From 6c75f0dc676d73c4cbcdca5a9cf05c6797a2ac0b Mon Sep 17 00:00:00 2001 From: William Joye Date: Wed, 19 Oct 2016 14:28:08 -0400 Subject: Squashed 'libxml2/' content from commit 56a6e1a git-subtree-dir: libxml2 git-subtree-split: 56a6e1aebed937941d2960cc5012665a5ca0115e --- .gitignore | 121 + AUTHORS | 5 + ChangeLog | 19678 +++++++ Copyright | 23 + DOCBparser.c | 305 + HACKING | 37 + HTMLparser.c | 7165 +++ HTMLtree.c | 1281 + INSTALL.libxml2 | 61 + MAINTAINERS | 9 + Makefile.am | 1283 + Makefile.tests | 41 + Makefile.win | 34 + NEWS | 2642 + README | 39 + README.cvs-commits | 5 + README.tests | 39 + SAX.c | 180 + SAX2.c | 3045 ++ TODO | 278 + TODO_SCHEMAS | 31 + VxWorks/Makefile | 68 + VxWorks/README | 86 + VxWorks/build.sh | 85 + acinclude.m4 | 28 + autogen.sh | 81 + bakefile/Bakefiles.bkgen | 15 + bakefile/Readme.txt | 92 + bakefile/libxml2.bkl | 749 + buf.c | 1345 + buf.h | 72 + build_glob.py | 122 + c14n.c | 2238 + catalog.c | 3825 ++ check-relaxng-test-suite.py | 394 + check-relaxng-test-suite2.py | 418 + check-xinclude-test-suite.py | 221 + check-xml-test-suite.py | 409 + check-xsddata-test-suite.py | 420 + chvalid.c | 336 + chvalid.def | 361 + configure.ac | 1726 + dbgen.pl | 43 + dbgenattr.pl | 42 + debugXML.c | 3428 ++ dict.c | 1262 + doc/APIchunk0.html | 301 + doc/APIchunk1.html | 382 + doc/APIchunk10.html | 675 + doc/APIchunk11.html | 339 + doc/APIchunk12.html | 927 + doc/APIchunk13.html | 653 + doc/APIchunk14.html | 470 + doc/APIchunk15.html | 454 + doc/APIchunk16.html | 375 + doc/APIchunk17.html | 580 + doc/APIchunk18.html | 457 + doc/APIchunk19.html | 373 + doc/APIchunk2.html | 416 + doc/APIchunk20.html | 330 + doc/APIchunk21.html | 399 + doc/APIchunk22.html | 599 + doc/APIchunk23.html | 668 + doc/APIchunk24.html | 1001 + doc/APIchunk25.html | 451 + doc/APIchunk26.html | 333 + doc/APIchunk27.html | 349 + doc/APIchunk28.html | 565 + doc/APIchunk29.html | 131 + doc/APIchunk3.html | 360 + doc/APIchunk4.html | 351 + doc/APIchunk5.html | 293 + doc/APIchunk6.html | 294 + doc/APIchunk7.html | 330 + doc/APIchunk8.html | 307 + doc/APIchunk9.html | 273 + doc/APIconstructors.html | 595 + doc/APIfiles.html | 3591 ++ doc/APIfunctions.html | 2345 + doc/APIsymbols.html | 3587 ++ doc/ChangeLog.awk | 49 + doc/ChangeLog.xsl | 117 + doc/DOM.fig | 64 + doc/DOM.gif | Bin 0 -> 3166 bytes doc/DOM.html | 17 + doc/FAQ.html | 299 + doc/Libxml2-Logo-180x168.gif | Bin 0 -> 8195 bytes doc/Libxml2-Logo-90x34.gif | Bin 0 -> 3070 bytes doc/Makefile.am | 351 + doc/README.docs | 24 + doc/XMLinfo.html | 35 + doc/XSLT.html | 13 + doc/api.xsl | 394 + doc/apibuild.py | 2152 + doc/architecture.html | 24 + doc/bugs.html | 70 + doc/buildDocBookCatalog | 414 + doc/catalog.fig | 62 + doc/catalog.gif | Bin 0 -> 6105 bytes doc/catalog.html | 261 + doc/checkapisym.xsl | 48 + doc/contribs.html | 41 + doc/devhelp/Makefile.am | 79 + doc/devhelp/devhelp.xsl | 127 + doc/devhelp/general.html | 38 + doc/devhelp/home.png | Bin 0 -> 654 bytes doc/devhelp/html.xsl | 602 + doc/devhelp/index.html | 67 + doc/devhelp/left.png | Bin 0 -> 459 bytes doc/devhelp/libxml2-DOCBparser.html | 138 + doc/devhelp/libxml2-HTMLparser.html | 373 + doc/devhelp/libxml2-HTMLtree.html | 172 + doc/devhelp/libxml2-SAX.html | 243 + doc/devhelp/libxml2-SAX2.html | 247 + doc/devhelp/libxml2-c14n.html | 91 + doc/devhelp/libxml2-catalog.html | 278 + doc/devhelp/libxml2-chvalid.html | 241 + doc/devhelp/libxml2-debugXML.html | 225 + doc/devhelp/libxml2-dict.html | 134 + doc/devhelp/libxml2-encoding.html | 218 + doc/devhelp/libxml2-entities.html | 166 + doc/devhelp/libxml2-globals.html | 383 + doc/devhelp/libxml2-hash.html | 214 + doc/devhelp/libxml2-list.html | 226 + doc/devhelp/libxml2-nanoftp.html | 187 + doc/devhelp/libxml2-nanohttp.html | 142 + doc/devhelp/libxml2-parser.html | 766 + doc/devhelp/libxml2-parserInternals.html | 688 + doc/devhelp/libxml2-pattern.html | 166 + doc/devhelp/libxml2-relaxng.html | 278 + doc/devhelp/libxml2-schemasInternals.html | 860 + doc/devhelp/libxml2-schematron.html | 166 + doc/devhelp/libxml2-threads.html | 161 + doc/devhelp/libxml2-tree.html | 1598 + doc/devhelp/libxml2-uri.html | 154 + doc/devhelp/libxml2-valid.html | 528 + doc/devhelp/libxml2-xinclude.html | 169 + doc/devhelp/libxml2-xlink.html | 160 + doc/devhelp/libxml2-xmlIO.html | 347 + doc/devhelp/libxml2-xmlautomata.html | 176 + doc/devhelp/libxml2-xmlerror.html | 953 + doc/devhelp/libxml2-xmlexports.html | 87 + doc/devhelp/libxml2-xmlmemory.html | 186 + doc/devhelp/libxml2-xmlmodule.html | 97 + doc/devhelp/libxml2-xmlreader.html | 565 + doc/devhelp/libxml2-xmlregexp.html | 280 + doc/devhelp/libxml2-xmlsave.html | 133 + doc/devhelp/libxml2-xmlschemas.html | 314 + doc/devhelp/libxml2-xmlschemastypes.html | 237 + doc/devhelp/libxml2-xmlstring.html | 217 + doc/devhelp/libxml2-xmlunicode.html | 887 + doc/devhelp/libxml2-xmlversion.html | 292 + doc/devhelp/libxml2-xmlwriter.html | 479 + doc/devhelp/libxml2-xpath.html | 542 + doc/devhelp/libxml2-xpathInternals.html | 787 + doc/devhelp/libxml2-xpointer.html | 171 + doc/devhelp/libxml2-xzlib.html | 62 + doc/devhelp/libxml2.devhelp | 3574 ++ doc/devhelp/right.png | Bin 0 -> 472 bytes doc/devhelp/style.css | 66 + doc/devhelp/up.png | Bin 0 -> 406 bytes doc/docdescr.doc | 100 + doc/docs.html | 34 + doc/downloads.html | 40 + doc/elfgcchack.xsl | 160 + doc/encoding.html | 217 + doc/entities.html | 64 + doc/epatents.png | Bin 0 -> 1901 bytes doc/example.html | 187 + doc/examples/Makefile.am | 135 + doc/examples/examples.xml | 751 + doc/examples/examples.xsl | 174 + doc/examples/index.html | 14 + doc/examples/index.py | 314 + doc/examples/io1.c | 166 + doc/examples/io1.res | 5 + doc/examples/io2.c | 58 + doc/examples/io2.res | 2 + doc/examples/parse1.c | 56 + doc/examples/parse2.c | 72 + doc/examples/parse3.c | 60 + doc/examples/parse4.c | 143 + doc/examples/reader1.c | 107 + doc/examples/reader1.res | 14 + doc/examples/reader2.c | 122 + doc/examples/reader3.c | 120 + doc/examples/reader3.res | 13 + doc/examples/reader4.c | 122 + doc/examples/reader4.res | 3 + doc/examples/test1.xml | 1 + doc/examples/test2.xml | 13 + doc/examples/test3.xml | 39 + doc/examples/testWriter.c | 1198 + doc/examples/tree1.c | 94 + doc/examples/tree1.res | 4 + doc/examples/tree2.c | 118 + doc/examples/tree2.res | 18 + doc/examples/tst.xml | 7 + doc/examples/writer.xml | 2 + doc/examples/xpath1.c | 250 + doc/examples/xpath1.res | 5 + doc/examples/xpath2.c | 190 + doc/examples/xpath2.res | 30 + doc/favicon.ico | Bin 0 -> 1107 bytes doc/gnome2.png | Bin 0 -> 3802 bytes doc/guidelines.html | 374 + doc/help.html | 26 + doc/html/book1.html | 13 + doc/html/home.png | Bin 0 -> 654 bytes doc/html/index.html | 13 + doc/html/index.sgml | 609 + doc/html/left.png | Bin 0 -> 459 bytes doc/html/libxml-DOCBparser.html | 51 + doc/html/libxml-HTMLparser.html | 184 + doc/html/libxml-HTMLtree.html | 73 + doc/html/libxml-SAX.html | 125 + doc/html/libxml-SAX2.html | 128 + doc/html/libxml-c14n.html | 38 + doc/html/libxml-catalog.html | 142 + doc/html/libxml-chvalid.html | 72 + doc/html/libxml-debugXML.html | 120 + doc/html/libxml-dict.html | 58 + doc/html/libxml-encoding.html | 124 + doc/html/libxml-entities.html | 79 + doc/html/libxml-globals.html | 152 + doc/html/libxml-hash.html | 116 + doc/html/libxml-lib.html | 13 + doc/html/libxml-list.html | 120 + doc/html/libxml-nanoftp.html | 94 + doc/html/libxml-nanohttp.html | 65 + doc/html/libxml-parser.html | 559 + doc/html/libxml-parserInternals.html | 322 + doc/html/libxml-pattern.html | 76 + doc/html/libxml-relaxng.html | 162 + doc/html/libxml-schemasInternals.html | 373 + doc/html/libxml-schematron.html | 81 + doc/html/libxml-threads.html | 72 + doc/html/libxml-tree.html | 991 + doc/html/libxml-uri.html | 73 + doc/html/libxml-valid.html | 289 + doc/html/libxml-xinclude.html | 59 + doc/html/libxml-xlink.html | 82 + doc/html/libxml-xmlIO.html | 212 + doc/html/libxml-xmlautomata.html | 85 + doc/html/libxml-xmlerror.html | 865 + doc/html/libxml-xmlexports.html | 20 + doc/html/libxml-xmlmemory.html | 107 + doc/html/libxml-xmlmodule.html | 38 + doc/html/libxml-xmlreader.html | 330 + doc/html/libxml-xmlregexp.html | 143 + doc/html/libxml-xmlsave.html | 60 + doc/html/libxml-xmlschemas.html | 185 + doc/html/libxml-xmlschemastypes.html | 123 + doc/html/libxml-xmlstring.html | 108 + doc/html/libxml-xmlunicode.html | 512 + doc/html/libxml-xmlversion.html | 63 + doc/html/libxml-xmlwriter.html | 261 + doc/html/libxml-xpath.html | 316 + doc/html/libxml-xpathInternals.html | 394 + doc/html/libxml-xpointer.html | 83 + doc/html/libxml-xzlib.html | 16 + doc/html/libxml.devhelp | 618 + doc/html/right.png | Bin 0 -> 472 bytes doc/html/up.png | Bin 0 -> 406 bytes doc/index.html | 77 + doc/index.py | 1258 + doc/interface.html | 59 + doc/intro.html | 32 + doc/library.html | 158 + doc/libxml-doc.el | 222 + doc/libxml.fig | 72 + doc/libxml.gif | Bin 0 -> 7692 bytes doc/libxml2-api.xml | 18510 +++++++ doc/libxml2-refs.xml | 32142 ++++++++++++ doc/libxml2.xsa | 82 + doc/namespaces.html | 50 + doc/newapi.xsl | 766 + doc/news.html | 2529 + doc/news.xsl | 44 + doc/python.html | 254 + doc/queries.py | 119 + doc/redhat.gif | Bin 0 -> 697 bytes doc/search.php | 477 + doc/searches.html | 61 + doc/searches.xsl | 97 + doc/searches/AllQueries-20040408.xml | 52 + doc/searches/Queries-20040408.xml | 52 + doc/site.xsl | 741 + doc/smallfootonly.gif | Bin 0 -> 2772 bytes doc/structure.fig | 242 + doc/structure.gif | Bin 0 -> 5559 bytes doc/symbols.xml | 1768 + doc/syms.xsl | 99 + doc/threads.html | 30 + doc/tree.html | 53 + doc/tutorial/apa.html | 8 + doc/tutorial/apb.html | 14 + doc/tutorial/apc.html | 82 + doc/tutorial/apd.html | 76 + doc/tutorial/ape.html | 78 + doc/tutorial/apf.html | 67 + doc/tutorial/apg.html | 75 + doc/tutorial/aph.html | 76 + doc/tutorial/api.html | 4 + doc/tutorial/ar01s02.html | 14 + doc/tutorial/ar01s03.html | 47 + doc/tutorial/ar01s04.html | 54 + doc/tutorial/ar01s05.html | 55 + doc/tutorial/ar01s06.html | 35 + doc/tutorial/ar01s07.html | 30 + doc/tutorial/ar01s08.html | 38 + doc/tutorial/ar01s09.html | 63 + doc/tutorial/customfo.xsl | 22 + doc/tutorial/customhtml.xsl | 18 + doc/tutorial/images/blank.png | Bin 0 -> 374 bytes doc/tutorial/images/callouts/1.png | Bin 0 -> 329 bytes doc/tutorial/images/callouts/10.png | Bin 0 -> 361 bytes doc/tutorial/images/callouts/2.png | Bin 0 -> 353 bytes doc/tutorial/images/callouts/3.png | Bin 0 -> 350 bytes doc/tutorial/images/callouts/4.png | Bin 0 -> 345 bytes doc/tutorial/images/callouts/5.png | Bin 0 -> 348 bytes doc/tutorial/images/callouts/6.png | Bin 0 -> 355 bytes doc/tutorial/images/callouts/7.png | Bin 0 -> 344 bytes doc/tutorial/images/callouts/8.png | Bin 0 -> 357 bytes doc/tutorial/images/callouts/9.png | Bin 0 -> 357 bytes doc/tutorial/images/caution.png | Bin 0 -> 1250 bytes doc/tutorial/images/draft.png | Bin 0 -> 17454 bytes doc/tutorial/images/home.png | Bin 0 -> 1156 bytes doc/tutorial/images/important.png | Bin 0 -> 722 bytes doc/tutorial/images/next.png | Bin 0 -> 1150 bytes doc/tutorial/images/note.png | Bin 0 -> 490 bytes doc/tutorial/images/prev.png | Bin 0 -> 1132 bytes doc/tutorial/images/tip.png | Bin 0 -> 449 bytes doc/tutorial/images/toc-blank.png | Bin 0 -> 318 bytes doc/tutorial/images/toc-minus.png | Bin 0 -> 259 bytes doc/tutorial/images/toc-plus.png | Bin 0 -> 264 bytes doc/tutorial/images/up.png | Bin 0 -> 1111 bytes doc/tutorial/images/warning.png | Bin 0 -> 1241 bytes doc/tutorial/includeaddattribute.c | 64 + doc/tutorial/includeaddkeyword.c | 75 + doc/tutorial/includeconvert.c | 73 + doc/tutorial/includegetattribute.c | 72 + doc/tutorial/includekeyword.c | 79 + doc/tutorial/includestory.xml | 14 + doc/tutorial/includexpath.c | 74 + doc/tutorial/index.html | 14 + doc/tutorial/ix01.html | 1 + doc/tutorial/xmltutorial.pdf | 1336 + doc/tutorial/xmltutorial.xml | 747 + doc/upgrade.html | 112 + doc/w3c.png | Bin 0 -> 2028 bytes doc/wiki.xsl | 589 + doc/xml.html | 6160 +++ doc/xmlcatalog.1 | 340 + doc/xmlcatalog_man.html | 101 + doc/xmlcatalog_man.xml | 450 + doc/xmldtd.html | 107 + doc/xmlio.html | 141 + doc/xmllint.1 | 647 + doc/xmllint.html | 175 + doc/xmllint.xml | 930 + doc/xmlmem.html | 122 + doc/xmlreader.html | 475 + doc/xsa.xsl | 54 + elfgcchack.h | 17808 +++++++ enc.h | 32 + encoding.c | 4085 ++ entities.c | 1105 + error.c | 998 + example/Makefile.am | 7 + example/gjobread.c | 309 + example/gjobs.xml | 57 + genChRanges.py | 578 + genUnicode.py | 478 + gentest.py | 963 + global.data | 29 + globals.c | 1114 + hash.c | 1124 + include/Makefile.am | 5 + include/libxml/DOCBparser.h | 96 + include/libxml/HTMLparser.h | 306 + include/libxml/HTMLtree.h | 147 + include/libxml/Makefile.am | 54 + include/libxml/SAX.h | 173 + include/libxml/SAX2.h | 178 + include/libxml/c14n.h | 126 + include/libxml/catalog.h | 182 + include/libxml/chvalid.h | 230 + include/libxml/debugXML.h | 217 + include/libxml/dict.h | 86 + include/libxml/encoding.h | 240 + include/libxml/entities.h | 151 + include/libxml/globals.h | 509 + include/libxml/hash.h | 233 + include/libxml/list.h | 137 + include/libxml/nanoftp.h | 163 + include/libxml/nanohttp.h | 81 + include/libxml/parser.h | 1241 + include/libxml/parserInternals.h | 644 + include/libxml/pattern.h | 100 + include/libxml/relaxng.h | 217 + include/libxml/schemasInternals.h | 958 + include/libxml/schematron.h | 142 + include/libxml/threads.h | 84 + include/libxml/tree.h | 1311 + include/libxml/uri.h | 94 + include/libxml/valid.h | 458 + include/libxml/xinclude.h | 129 + include/libxml/xlink.h | 189 + include/libxml/xmlIO.h | 366 + include/libxml/xmlautomata.h | 146 + include/libxml/xmlerror.h | 945 + include/libxml/xmlexports.h | 162 + include/libxml/xmlmemory.h | 224 + include/libxml/xmlmodule.h | 57 + include/libxml/xmlreader.h | 428 + include/libxml/xmlregexp.h | 222 + include/libxml/xmlsave.h | 88 + include/libxml/xmlschemas.h | 246 + include/libxml/xmlschemastypes.h | 151 + include/libxml/xmlstring.h | 140 + include/libxml/xmlunicode.h | 202 + include/libxml/xmlversion.h.in | 489 + include/libxml/xmlwin32version.h | 242 + include/libxml/xmlwin32version.h.in | 325 + include/libxml/xmlwriter.h | 488 + include/libxml/xpath.h | 557 + include/libxml/xpathInternals.h | 632 + include/libxml/xpointer.h | 114 + include/win32config.h | 128 + include/wsockcompat.h | 86 + legacy.c | 1343 + libxml-2.0-uninstalled.pc.in | 12 + libxml-2.0.pc.in | 13 + libxml.3 | 71 + libxml.h | 115 + libxml.m4 | 188 + libxml.spec.in | 199 + libxml2-config.cmake.in | 50 + libxml2.doap | 19 + libxml2.syms | 2281 + list.c | 779 + macos/README | 8 + macos/libxml2.mcp.xml.sit.hqx | 1 + macos/src/XMLTestPrefix.h | 1 + macos/src/XMLTestPrefix2.h | 1 + macos/src/config-mac.h | 192 + macos/src/libxml2_GUSIConfig.cp | 1 + macos/src/macos_main.c | 1 + nanoftp.c | 2121 + nanohttp.c | 1890 + optim/TOTRY | 23 + optim/hash_dict.patch | 257 + optim/hash_dict.txt | 11 + os400/README400 | 226 + os400/dlfcn/dlfcn.c | 1213 + os400/dlfcn/dlfcn.h | 32 + os400/iconv/README.iconv | 47 + os400/iconv/bldcsndfa/bldcsndfa.c | 1953 + os400/iconv/bldcsndfa/ccsid_mibenum.dtd | 15 + os400/iconv/bldcsndfa/ccsid_mibenum.xml | 270 + os400/iconv/bldcsndfa/character-sets.xhtml | 3077 ++ os400/iconv/ianatables.c | 4609 ++ os400/iconv/iconv.c | 154 + os400/iconv/iconv.h | 40 + os400/initscript.sh | 315 + os400/libxmlmain.c | 102 + os400/libxmlrpg/DOCBparser.rpgle | 120 + os400/libxmlrpg/HTMLparser.rpgle | 419 + os400/libxmlrpg/HTMLtree.rpgle | 176 + os400/libxmlrpg/SAX.rpgle | 213 + os400/libxmlrpg/SAX2.rpgle | 256 + os400/libxmlrpg/c14n.rpgle | 125 + os400/libxmlrpg/catalog.rpgle | 248 + os400/libxmlrpg/chvalid.rpgle | 107 + os400/libxmlrpg/debugXML.rpgle | 254 + os400/libxmlrpg/dict.rpgle | 85 + os400/libxmlrpg/encoding.rpgle | 284 + os400/libxmlrpg/entities.rpgle | 176 + os400/libxmlrpg/globals.rpgle | 581 + os400/libxmlrpg/hash.rpgle | 243 + os400/libxmlrpg/list.rpgle | 179 + os400/libxmlrpg/nanoftp.rpgle | 172 + os400/libxmlrpg/nanohttp.rpgle | 110 + os400/libxmlrpg/parser.rpgle | 1436 + os400/libxmlrpg/parserInternals.rpgle | 598 + os400/libxmlrpg/pattern.rpgle | 130 + os400/libxmlrpg/relaxng.rpgle | 310 + os400/libxmlrpg/schemasInternals.rpgle | 1142 + os400/libxmlrpg/schematron.rpgle | 204 + os400/libxmlrpg/threads.rpgle | 73 + os400/libxmlrpg/transcode.rpgle | 71 + os400/libxmlrpg/tree.rpgle | 1681 + os400/libxmlrpg/uri.rpgle | 103 + os400/libxmlrpg/valid.rpgle | 605 + os400/libxmlrpg/xinclude.rpgle | 156 + os400/libxmlrpg/xlink.rpgle | 169 + os400/libxmlrpg/xmlIO.rpgle | 464 + os400/libxmlrpg/xmlTypesC.rpgle | 26 + os400/libxmlrpg/xmlautomata.rpgle | 183 + os400/libxmlrpg/xmlerror.rpgle | 1686 + os400/libxmlrpg/xmlexports.rpgle | 15 + os400/libxmlrpg/xmlmemory.rpgle | 247 + os400/libxmlrpg/xmlmodule.rpgle | 57 + os400/libxmlrpg/xmlreader.rpgle | 668 + os400/libxmlrpg/xmlregexp.rpgle | 262 + os400/libxmlrpg/xmlsave.rpgle | 105 + os400/libxmlrpg/xmlschemas.rpgle | 331 + os400/libxmlrpg/xmlschemastypes.rpgle | 254 + os400/libxmlrpg/xmlstdarg.rpgle | 35 + os400/libxmlrpg/xmlstring.rpgle | 180 + os400/libxmlrpg/xmlunicode.rpgle | 836 + os400/libxmlrpg/xmlversion.rpgle.in | 353 + os400/libxmlrpg/xmlwriter.rpgle | 801 + os400/libxmlrpg/xpath.rpgle | 675 + os400/libxmlrpg/xpathInternals.rpgle | 693 + os400/libxmlrpg/xpointer.rpgle | 158 + os400/make-bldcsndfa.sh | 43 + os400/make-include.sh | 81 + os400/make-rpg.sh | 100 + os400/make-src.sh | 355 + os400/make.sh | 84 + os400/os400config.h.in | 353 + os400/rpgsupport.c | 270 + os400/rpgsupport.h | 157 + os400/transcode.c | 268 + os400/transcode.h | 43 + os400/wrappers.c | 170 + os400/wrappers.h | 70 + os400/xmlcatalog.cmd | 112 + os400/xmlcatlgcl.c | 288 + os400/xmllint.cmd | 146 + os400/xmllintcl.c | 216 + parser.c | 15817 ++++++ parserInternals.c | 2157 + pattern.c | 2617 + python/Makefile.am | 54 + python/README | 34 + python/TODO | 57 + python/drv_libxml2.py | 379 + python/generator.py | 1228 + python/libxml.c | 3934 ++ python/libxml.py | 788 + python/libxml2-python-api.xml | 350 + python/libxml_wrap.h | 279 + python/setup.py | 242 + python/setup.py.in | 242 + python/tests/Makefile.am | 75 + python/tests/attribs.py | 34 + python/tests/build.py | 59 + python/tests/compareNodes.py | 50 + python/tests/ctxterror.py | 56 + python/tests/cutnpaste.py | 48 + python/tests/dtdvalid.py | 32 + python/tests/error.py | 51 + python/tests/inbuf.py | 30 + python/tests/indexes.py | 113 + python/tests/input_callback.py | 148 + python/tests/invalid.xml | 6 + python/tests/nsdel.py | 62 + python/tests/outbuf.py | 110 + python/tests/push.py | 35 + python/tests/pushSAX.py | 64 + python/tests/pushSAXhtml.py | 65 + python/tests/reader.py | 446 + python/tests/reader2.py | 265 + python/tests/reader3.py | 160 + python/tests/reader4.py | 50 + python/tests/reader5.py | 47 + python/tests/reader6.py | 128 + python/tests/reader7.py | 101 + python/tests/reader8.py | 36 + python/tests/readererr.py | 56 + python/tests/readernext.py | 86 + python/tests/regexp.py | 32 + python/tests/relaxng.py | 48 + python/tests/resolver.py | 44 + python/tests/schema.py | 52 + python/tests/serialize.py | 150 + python/tests/sync.py | 138 + python/tests/test.dtd | 1 + python/tests/thread2.py | 99 + python/tests/tst.py | 28 + python/tests/tst.xml | 1 + python/tests/tstLastError.py | 82 + python/tests/tstURI.py | 41 + python/tests/tstmem.py | 36 + python/tests/tstxpath.py | 63 + python/tests/valid.xml | 4 + python/tests/validDTD.py | 59 + python/tests/validRNG.py | 76 + python/tests/validSchemas.py | 83 + python/tests/validate.py | 82 + python/tests/walker.py | 144 + python/tests/xpath.py | 51 + python/tests/xpathext.py | 49 + python/tests/xpathleak.py | 65 + python/tests/xpathns.py | 29 + python/tests/xpathret.py | 57 + python/types.c | 957 + regressions.py | 350 + regressions.xml | 226 + relaxng.c | 11058 ++++ result/HTML/53867.html | 70 + result/HTML/53867.html.err | 0 result/HTML/53867.html.sax | 26 + result/HTML/758605.html | 3 + result/HTML/758605.html.err | 3 + result/HTML/758605.html.sax | 14 + result/HTML/758606.html | 2 + result/HTML/758606.html.err | 16 + result/HTML/758606.html.sax | 10 + result/HTML/758606_2.html | 2 + result/HTML/758606_2.html.err | 16 + result/HTML/758606_2.html.sax | 17 + result/HTML/Down.html | 13 + result/HTML/Down.html.err | 0 result/HTML/Down.html.sax | 37 + result/HTML/attrents.html | 6 + result/HTML/attrents.html.err | 0 result/HTML/attrents.html.sax | 21 + result/HTML/autoclose.html | 4 + result/HTML/autoclose.html.err | 0 result/HTML/autoclose.html.sax | 11 + result/HTML/autoclose2.html | 3 + result/HTML/autoclose2.html.err | 0 result/HTML/autoclose2.html.sax | 11 + result/HTML/autoclose3.html | 7 + result/HTML/autoclose3.html.err | 0 result/HTML/autoclose3.html.sax | 19 + result/HTML/cf_128.html | 24 + result/HTML/cf_128.html.err | 0 result/HTML/cf_128.html.sax | 69 + result/HTML/doc2.htm | 30 + result/HTML/doc2.htm.err | 3 + result/HTML/doc2.htm.sax | 69 + result/HTML/doc3.htm | 579 + result/HTML/doc3.htm.err | 81 + result/HTML/doc3.htm.sax | 2878 + result/HTML/entities.html | 8 + result/HTML/entities.html.err | 12 + result/HTML/entities.html.sax | 27 + result/HTML/entities2.html | 8 + result/HTML/entities2.html.err | 0 result/HTML/entities2.html.sax | 23 + result/HTML/fp40.htm | 167 + result/HTML/fp40.htm.err | 3 + result/HTML/fp40.htm.sax | 463 + result/HTML/html5_enc.html | 9 + result/HTML/html5_enc.html.err | 0 result/HTML/html5_enc.html.sax | 30 + result/HTML/liclose.html | 15 + result/HTML/liclose.html.err | 0 result/HTML/liclose.html.sax | 38 + result/HTML/lt.html | 6 + result/HTML/lt.html.err | 0 result/HTML/lt.html.sax | 19 + result/HTML/noscript.html | 10 + result/HTML/noscript.html.err | 0 result/HTML/noscript.html.sax | 38 + result/HTML/pre.html | 6 + result/HTML/pre.html.err | 0 result/HTML/pre.html.sax | 23 + result/HTML/python.html | 9 + result/HTML/python.html.err | 0 result/HTML/python.html.sax | 29 + result/HTML/reg1.html | 12 + result/HTML/reg1.html.err | 0 result/HTML/reg1.html.sax | 36 + result/HTML/reg2.html | 15 + result/HTML/reg2.html.err | 0 result/HTML/reg2.html.sax | 41 + result/HTML/reg3.html | 16 + result/HTML/reg3.html.err | 0 result/HTML/reg3.html.sax | 45 + result/HTML/reg4.html | 14 + result/HTML/reg4.html.err | 3 + result/HTML/reg4.html.sax | 43 + result/HTML/repeat.html | 7 + result/HTML/repeat.html.err | 0 result/HTML/repeat.html.sax | 14 + result/HTML/script.html | 10 + result/HTML/script.html.err | 0 result/HTML/script.html.sax | 32 + result/HTML/script2.html | 17 + result/HTML/script2.html.err | 0 result/HTML/script2.html.sax | 50 + result/HTML/test2.html | 38 + result/HTML/test2.html.err | 0 result/HTML/test2.html.sax | 145 + result/HTML/test3.html | 59 + result/HTML/test3.html.err | 12 + result/HTML/test3.html.sax | 230 + result/HTML/utf8bug.html | 215 + result/HTML/utf8bug.html.err | 15 + result/HTML/utf8bug.html.sax | 737 + result/HTML/wired.html | 576 + result/HTML/wired.html.err | 249 + result/HTML/wired.html.sax | 2848 + result/SVG/4rects.xml | 10 + result/SVG/a-valid.xml | 9 + result/SVG/a-wf.xml | 8 + result/SVG/bike-errors.xml | 0 result/SVG/bike.xml | 44 + result/SVG/circle.xml | 9 + result/SVG/defs.xml | 14 + result/SVG/desc.xml | 14 + result/SVG/ellipse.xml | 9 + result/SVG/flower2.xml | 10 + result/SVG/gradient.xml | 16 + result/SVG/group01.xml | 14 + result/SVG/group02.xml | 12 + result/SVG/group03.xml | 11 + result/SVG/image-valid.xml | 9 + result/SVG/image-wf.xml | 8 + result/SVG/lin-gradient.xml | 15 + result/SVG/marker.xml | 23 + result/SVG/mask.xml | 12 + result/SVG/mathswitch.xml | 26 + result/SVG/parentns.xml | 9 + result/SVG/path01.xml | 4 + result/SVG/path02.xml | 9 + result/SVG/patternfill.xml | 11 + result/SVG/polyline.xml | 8 + result/SVG/private.xml | 18 + result/SVG/rad-gradient.xml | 16 + result/SVG/rectangle.xml | 9 + result/SVG/richdesc.xml | 11 + result/SVG/script.xml | 13 + result/SVG/structure01.xml | 8 + result/SVG/style.xml | 11 + result/SVG/switch.xml | 16 + result/SVG/symbol-use.xml | 22 + result/SVG/template.xml | 8 + result/SVG/text01.xml | 11 + result/SVG/text02.xml | 25 + result/SVG/text03.xml | 7 + result/SVG/toap01.xml | 8 + result/SVG/toap02.xml | 27 + result/SVG/transform.xml | 20 + result/SVG/trivial.xml | 4 + result/SVG/twin-gradients.xml | 18 + result/SVG/v-template.xml | 6 + result/SVG/viewport-nest.xml | 12 + result/SVG/viewport-transform.xml | 36 + result/SVG/viewport.xml | 8 + result/SVG/wf-template.xml | 4 + result/URI/smith.uri | 15 + result/URI/uri.data | 18 + result/VC/AttributeDefaultLegal | 12 + result/VC/AttributeDefaultLegal.rdr | 12 + result/VC/AttributeNmtokens | 3 + result/VC/AttributeNmtokens.rdr | 3 + result/VC/DuplicateType | 3 + result/VC/DuplicateType.rdr | 3 + result/VC/ElementValid | 3 + result/VC/ElementValid.rdr | 3 + result/VC/ElementValid2 | 3 + result/VC/ElementValid2.rdr | 6 + result/VC/ElementValid3 | 3 + result/VC/ElementValid3.rdr | 6 + result/VC/ElementValid4 | 3 + result/VC/ElementValid4.rdr | 6 + result/VC/ElementValid5 | 3 + result/VC/ElementValid5.rdr | 6 + result/VC/ElementValid6 | 3 + result/VC/ElementValid6.rdr | 6 + result/VC/ElementValid7 | 3 + result/VC/ElementValid7.rdr | 6 + result/VC/ElementValid8 | 3 + result/VC/ElementValid8.rdr | 3 + result/VC/Enumeration | 3 + result/VC/Enumeration.rdr | 3 + result/VC/NS1 | 0 result/VC/NS1.rdr | 0 result/VC/NS2 | 3 + result/VC/NS2.rdr | 3 + result/VC/NS3 | 9 + result/VC/NS3.rdr | 9 + result/VC/OneID | 6 + result/VC/OneID.rdr | 6 + result/VC/OneID2 | 6 + result/VC/OneID2.rdr | 6 + result/VC/OneID3 | 6 + result/VC/OneID3.rdr | 6 + result/VC/PENesting | 6 + result/VC/PENesting.rdr | 4 + result/VC/PENesting2 | 6 + result/VC/PENesting2.rdr | 4 + result/VC/UniqueElementTypeDeclaration | 3 + result/VC/UniqueElementTypeDeclaration.rdr | 3 + result/VC/UniqueElementTypeDeclaration2 | 3 + result/VC/UniqueElementTypeDeclaration2.rdr | 3 + result/XInclude/docids.xml | 19 + result/XInclude/docids.xml.err | 0 result/XInclude/docids.xml.rdr | 35 + result/XInclude/fallback.xml | 5 + result/XInclude/fallback.xml.err | 0 result/XInclude/fallback.xml.rdr | 12 + result/XInclude/fallback2.xml | 6 + result/XInclude/fallback2.xml.err | 0 result/XInclude/fallback2.xml.rdr | 11 + result/XInclude/include.xml | 9 + result/XInclude/include.xml.err | 0 result/XInclude/include.xml.rdr | 28 + result/XInclude/nodes.xml | 5 + result/XInclude/nodes.xml.err | 0 result/XInclude/nodes.xml.rdr | 18 + result/XInclude/nodes2.xml | 5 + result/XInclude/nodes2.xml.err | 0 result/XInclude/nodes2.xml.rdr | 18 + result/XInclude/nodes3.xml | 5 + result/XInclude/nodes3.xml.err | 1 + result/XInclude/nodes3.xml.rdr | 10 + result/XInclude/recursive.xml | 3 + result/XInclude/recursive.xml.err | 0 result/XInclude/recursive.xml.rdr | 6 + result/XInclude/tstencoding.xml | 6 + result/XInclude/tstencoding.xml.err | 0 result/XInclude/tstencoding.xml.rdr | 11 + result/XInclude/txtinclude.xml | 6 + result/XInclude/txtinclude.xml.err | 0 result/XInclude/txtinclude.xml.rdr | 11 + result/XPath/expr/base | 28 + result/XPath/expr/compare | 184 + result/XPath/expr/equality | 104 + result/XPath/expr/floats | 244 + result/XPath/expr/functions | 100 + result/XPath/expr/strings | 136 + result/XPath/tests/chaptersbase | 125 + result/XPath/tests/chaptersprefol | 100 + result/XPath/tests/idsimple | 33 + result/XPath/tests/langsimple | 60 + result/XPath/tests/mixedpat | 101 + result/XPath/tests/nodespat | 94 + result/XPath/tests/nssimple | 24 + result/XPath/tests/simpleabbr | 81 + result/XPath/tests/simplebase | 127 + result/XPath/tests/usr1check | 12 + result/XPath/tests/vidbase | 42 + result/XPath/xptr/chapterschildseq | 53 + result/XPath/xptr/chaptersparts | 44 + result/XPath/xptr/chaptersrange | 64 + result/XPath/xptr/strpoint | 75 + result/XPath/xptr/strrange | 96 + result/XPath/xptr/strrange2 | 64 + result/XPath/xptr/strrange3 | 48 + result/XPath/xptr/vidbase | 19 + result/XPath/xptr/vidchildseq | 36 + result/XPath/xptr/vidparts | 27 + result/att1 | 2 + result/att1.rde | 1 + result/att1.rdr | 1 + result/att1.sax | 5 + result/att1.sax2 | 5 + result/att10 | 18 + result/att10.rde | 23 + result/att10.rdr | 23 + result/att10.sax | 61 + result/att10.sax2 | 57 + result/att11 | 9 + result/att11.rde | 2 + result/att11.rdr | 2 + result/att11.sax | 19 + result/att11.sax2 | 18 + result/att2 | 2 + result/att2.rde | 1 + result/att2.rdr | 1 + result/att2.sax | 5 + result/att2.sax2 | 5 + result/att3 | 2 + result/att3.rde | 3 + result/att3.rdr | 3 + result/att3.sax | 9 + result/att3.sax2 | 8 + result/att4 | 9264 ++++ result/att4.rde | 27785 ++++++++++ result/att4.rdr | 27785 ++++++++++ result/att4.sax | 36976 +++++++++++++ result/att4.sax2 | 36976 +++++++++++++ result/att5 | 40 + result/att5.rde | 109 + result/att5.rdr | 109 + result/att5.sax | 148 + result/att5.sax2 | 149 + result/att6 | 6 + result/att6.rde | 15 + result/att6.rdr | 15 + result/att6.sax | 20 + result/att6.sax2 | 20 + result/att7 | 11 + result/att7.rde | 12 + result/att7.rdr | 11 + result/att7.sax | 24 + result/att7.sax2 | 24 + result/att8 | 2 + result/att8.rde | 22 + result/att8.rdr | 22 + result/att8.sax | 29 + result/att8.sax2 | 29 + result/att9 | 6 + result/att9.rde | 2 + result/att9.rdr | 2 + result/att9.sax | 9 + result/att9.sax2 | 9 + result/attrib.xml | 2 + result/attrib.xml.rde | 1 + result/attrib.xml.rdr | 1 + result/attrib.xml.sax | 5 + result/attrib.xml.sax2 | 5 + result/automata/a | 4 + result/automata/aba | 6 + result/automata/abaa | 5 + result/automata/abba | 4 + result/automata/po | 2 + result/badcomment.xml | 17 + result/badcomment.xml.rde | 21 + result/badcomment.xml.rdr | 21 + result/badcomment.xml.sax | 24 + result/badcomment.xml.sax2 | 24 + result/bigentname.xml | 6 + result/bigentname.xml.rde | 4 + result/bigentname.xml.rdr | 4 + result/bigentname.xml.sax | 17 + result/bigentname.xml.sax2 | 17 + result/bigname.xml | 2 + result/bigname.xml.rde | 1 + result/bigname.xml.rdr | 1 + result/bigname.xml.sax | 5 + result/bigname.xml.sax2 | 5 + result/bigname2.xml | 2 + result/bigname2.xml.rde | 1 + result/bigname2.xml.rdr | 1 + result/bigname2.xml.sax | 5 + result/bigname2.xml.sax2 | 5 + result/c14n/1-1-without-comments/example-1 | 4 + result/c14n/1-1-without-comments/example-2 | 11 + result/c14n/1-1-without-comments/example-3 | 14 + result/c14n/1-1-without-comments/example-4 | 9 + result/c14n/1-1-without-comments/example-5 | 3 + result/c14n/1-1-without-comments/example-6 | 1 + result/c14n/1-1-without-comments/example-7 | 1 + result/c14n/1-1-without-comments/example-8 | 1 + .../1-1-without-comments/xmlbase-c14n11spec-102 | 1 + .../1-1-without-comments/xmlbase-c14n11spec2-102 | 1 + .../1-1-without-comments/xmlbase-c14n11spec3-102 | 2 + result/c14n/1-1-without-comments/xmlbase-prop-1 | 14 + result/c14n/1-1-without-comments/xmlbase-prop-2 | 8 + result/c14n/1-1-without-comments/xmlbase-prop-3 | 3 + result/c14n/1-1-without-comments/xmlbase-prop-4 | 1 + result/c14n/1-1-without-comments/xmlbase-prop-5 | 1 + result/c14n/1-1-without-comments/xmlbase-prop-6 | 3 + result/c14n/1-1-without-comments/xmlbase-prop-7 | 7 + result/c14n/1-1-without-comments/xmlid-prop-1 | 8 + result/c14n/1-1-without-comments/xmlid-prop-2 | 5 + result/c14n/1-1-without-comments/xmllang-prop-1 | 8 + result/c14n/1-1-without-comments/xmllang-prop-2 | 3 + result/c14n/1-1-without-comments/xmllang-prop-3 | 3 + result/c14n/1-1-without-comments/xmllang-prop-4 | 5 + result/c14n/1-1-without-comments/xmlspace-prop-1 | 8 + result/c14n/1-1-without-comments/xmlspace-prop-2 | 3 + result/c14n/1-1-without-comments/xmlspace-prop-3 | 3 + result/c14n/1-1-without-comments/xmlspace-prop-4 | 5 + .../c14n/exc-without-comments/merlin-c14n-two-09 | 9 + .../c14n/exc-without-comments/merlin-c14n-two-10 | 9 + .../c14n/exc-without-comments/merlin-c14n-two-11 | 9 + .../c14n/exc-without-comments/merlin-c14n-two-12 | 9 + .../c14n/exc-without-comments/merlin-c14n-two-13 | 9 + .../c14n/exc-without-comments/merlin-c14n-two-14 | 9 + .../c14n/exc-without-comments/merlin-c14n-two-15 | 0 .../c14n/exc-without-comments/merlin-c14n-two-16 | 0 .../c14n/exc-without-comments/merlin-c14n-two-17 | 9 + .../c14n/exc-without-comments/merlin-c14n-two-18 | 9 + .../c14n/exc-without-comments/merlin-c14n-two-19 | 9 + .../c14n/exc-without-comments/merlin-c14n-two-20 | 9 + .../c14n/exc-without-comments/merlin-c14n-two-21 | 9 + .../c14n/exc-without-comments/merlin-c14n-two-22 | 9 + .../c14n/exc-without-comments/merlin-c14n-two-23 | 9 + .../c14n/exc-without-comments/merlin-c14n-two-24 | 1 + .../c14n/exc-without-comments/merlin-c14n-two-25 | 0 .../c14n/exc-without-comments/merlin-c14n-two-26 | 9 + result/c14n/exc-without-comments/test-0 | 7 + result/c14n/exc-without-comments/test-1 | 7 + result/c14n/exc-without-comments/test-2 | 11 + result/c14n/with-comments/example-1 | 6 + result/c14n/with-comments/example-2 | 11 + result/c14n/with-comments/example-3 | 14 + result/c14n/with-comments/example-4 | 9 + result/c14n/with-comments/example-5 | 4 + result/c14n/with-comments/example-6 | 1 + result/c14n/with-comments/example-7 | 1 + result/c14n/without-comments/example-1 | 4 + result/c14n/without-comments/example-2 | 11 + result/c14n/without-comments/example-3 | 14 + result/c14n/without-comments/example-4 | 9 + result/c14n/without-comments/example-5 | 3 + result/c14n/without-comments/example-6 | 1 + result/c14n/without-comments/example-7 | 1 + result/c14n/without-comments/merlin-c14n-two-00 | 9 + result/c14n/without-comments/merlin-c14n-two-01 | 9 + result/c14n/without-comments/merlin-c14n-two-02 | 9 + result/c14n/without-comments/merlin-c14n-two-03 | 9 + result/c14n/without-comments/merlin-c14n-two-04 | 9 + result/c14n/without-comments/merlin-c14n-two-05 | 9 + result/c14n/without-comments/merlin-c14n-two-06 | 1 + result/c14n/without-comments/merlin-c14n-two-07 | 1 + result/c14n/without-comments/merlin-c14n-two-08 | 9 + result/c14n/without-comments/test-0 | 1 + result/c14n/without-comments/test-1 | 31 + result/c14n/without-comments/test-2 | 3 + result/c14n/without-comments/test-3 | 7 + result/catalogs/catal | 5 + result/catalogs/docbook | 6 + result/catalogs/mycatalog.empty | 3 + result/catalogs/mycatalog.full | 7 + result/catalogs/registry | 5 + result/catalogs/whites | 5 + result/catalogs/whitex | 8 + result/cdata | 4 + result/cdata-2-byte-UTF-8.xml | 6 + result/cdata-2-byte-UTF-8.xml.rde | 15 + result/cdata-2-byte-UTF-8.xml.rdr | 15 + result/cdata-2-byte-UTF-8.xml.sax | 18 + result/cdata-2-byte-UTF-8.xml.sax2 | 18 + result/cdata-3-byte-UTF-8.xml | 7 + result/cdata-3-byte-UTF-8.xml.rde | 20 + result/cdata-3-byte-UTF-8.xml.rdr | 20 + result/cdata-3-byte-UTF-8.xml.sax | 23 + result/cdata-3-byte-UTF-8.xml.sax2 | 23 + result/cdata-4-byte-UTF-8.xml | 8 + result/cdata-4-byte-UTF-8.xml.rde | 25 + result/cdata-4-byte-UTF-8.xml.rdr | 25 + result/cdata-4-byte-UTF-8.xml.sax | 28 + result/cdata-4-byte-UTF-8.xml.sax2 | 28 + result/cdata.rde | 7 + result/cdata.rdr | 7 + result/cdata.sax | 10 + result/cdata.sax2 | 10 + result/cdata2 | 6 + result/cdata2.rde | 13 + result/cdata2.rdr | 13 + result/cdata2.sax | 17 + result/cdata2.sax2 | 17 + result/comment.xml | 6 + result/comment.xml.rde | 13 + result/comment.xml.rdr | 13 + result/comment.xml.sax | 17 + result/comment.xml.sax2 | 17 + result/comment2.xml | 6 + result/comment2.xml.rde | 9 + result/comment2.xml.rdr | 9 + result/comment2.xml.sax | 13 + result/comment2.xml.sax2 | 13 + result/comment3.xml | 164 + result/comment3.xml.rde | 163 + result/comment3.xml.rdr | 163 + result/comment3.xml.sax | 167 + result/comment3.xml.sax2 | 167 + result/comment4.xml | 5 + result/comment4.xml.rde | 4 + result/comment4.xml.rdr | 4 + result/comment4.xml.sax | 8 + result/comment4.xml.sax2 | 8 + result/comment5.xml | 9 + result/comment5.xml.rde | 8 + result/comment5.xml.rdr | 8 + result/comment5.xml.sax | 12 + result/comment5.xml.sax2 | 12 + result/comment6.xml | 14 + result/comment6.xml.rde | 11 + result/comment6.xml.rdr | 11 + result/comment6.xml.sax | 17 + result/comment6.xml.sax2 | 17 + result/dav1 | 25 + result/dav1.rde | 78 + result/dav1.rdr | 78 + result/dav1.sax | 81 + result/dav1.sax2 | 81 + result/dav10 | 4 + result/dav10.rde | 9 + result/dav10.rdr | 9 + result/dav10.sax | 12 + result/dav10.sax2 | 12 + result/dav11 | 21 + result/dav11.rde | 60 + result/dav11.rdr | 60 + result/dav11.sax | 62 + result/dav11.sax2 | 62 + result/dav12 | 2 + result/dav12.rde | 3 + result/dav12.rdr | 3 + result/dav12.sax | 6 + result/dav12.sax2 | 6 + result/dav13 | 16 + result/dav13.rde | 45 + result/dav13.rdr | 45 + result/dav13.sax | 46 + result/dav13.sax2 | 46 + result/dav15 | 20 + result/dav15.rde | 73 + result/dav15.rdr | 73 + result/dav15.sax | 76 + result/dav15.sax2 | 76 + result/dav16 | 6 + result/dav16.rde | 13 + result/dav16.rdr | 13 + result/dav16.sax | 17 + result/dav16.sax2 | 17 + result/dav17 | 22 + result/dav17.rde | 75 + result/dav17.rdr | 75 + result/dav17.sax | 78 + result/dav17.sax2 | 78 + result/dav18 | 6 + result/dav18.rde | 13 + result/dav18.rdr | 13 + result/dav18.sax | 17 + result/dav18.sax2 | 17 + result/dav19 | 18 + result/dav19.rde | 59 + result/dav19.rdr | 59 + result/dav19.sax | 62 + result/dav19.sax2 | 62 + result/dav2 | 24 + result/dav2.rde | 81 + result/dav2.rdr | 81 + result/dav2.sax | 84 + result/dav2.sax2 | 84 + result/dav3 | 18 + result/dav3.rde | 57 + result/dav3.rdr | 57 + result/dav3.sax | 63 + result/dav3.sax2 | 63 + result/dav4 | 16 + result/dav4.rde | 47 + result/dav4.rdr | 47 + result/dav4.sax | 51 + result/dav4.sax2 | 51 + result/dav5 | 17 + result/dav5.rde | 50 + result/dav5.rdr | 50 + result/dav5.sax | 54 + result/dav5.sax2 | 54 + result/dav6 | 22 + result/dav6.rde | 63 + result/dav6.rdr | 63 + result/dav6.sax | 66 + result/dav6.sax2 | 66 + result/dav7 | 16 + result/dav7.rde | 57 + result/dav7.rdr | 57 + result/dav7.sax | 60 + result/dav7.sax2 | 60 + result/dav8 | 14 + result/dav8.rde | 51 + result/dav8.rdr | 51 + result/dav8.sax | 54 + result/dav8.sax2 | 54 + result/dav9 | 18 + result/dav9.rde | 67 + result/dav9.rdr | 67 + result/dav9.sax | 70 + result/dav9.sax2 | 70 + result/defattr.xml | 6 + result/defattr.xml.rde | 2 + result/defattr.xml.rdr | 2 + result/defattr.xml.sax | 9 + result/defattr.xml.sax2 | 9 + result/defattr2.xml | 8 + result/defattr2.xml.rde | 2 + result/defattr2.xml.rdr | 2 + result/defattr2.xml.sax | 11 + result/defattr2.xml.sax2 | 11 + result/dia1 | 99 + result/dia1.rde | 292 + result/dia1.rdr | 292 + result/dia1.sax | 323 + result/dia1.sax2 | 323 + result/dia2 | 99 + result/dia2.rde | 292 + result/dia2.rdr | 292 + result/dia2.sax | 323 + result/dia2.sax2 | 323 + result/dtd1 | 4 + result/dtd1.rde | 5 + result/dtd1.rdr | 5 + result/dtd1.sax | 9 + result/dtd1.sax2 | 9 + result/dtd10 | 9 + result/dtd10.rde | 12 + result/dtd10.rdr | 12 + result/dtd10.sax | 21 + result/dtd10.sax2 | 21 + result/dtd11 | 6 + result/dtd11.rde | 2 + result/dtd11.rdr | 2 + result/dtd11.sax | 9 + result/dtd11.sax2 | 9 + result/dtd12 | 6 + result/dtd12.rde | 4 + result/dtd12.rdr | 4 + result/dtd12.sax | 17 + result/dtd12.sax2 | 17 + result/dtd13 | 7 + result/dtd13.rde | 4 + result/dtd13.rdr | 4 + result/dtd13.sax | 10 + result/dtd13.sax2 | 10 + result/dtd2 | 5 + result/dtd2.rde | 4 + result/dtd2.rdr | 4 + result/dtd2.sax | 9 + result/dtd2.sax2 | 9 + result/dtd3 | 5 + result/dtd3.rde | 4 + result/dtd3.rdr | 4 + result/dtd3.sax | 9 + result/dtd3.sax2 | 9 + result/dtd4 | 5 + result/dtd4.rde | 2 + result/dtd4.rdr | 2 + result/dtd4.sax | 8 + result/dtd4.sax2 | 8 + result/dtd5 | 7 + result/dtd5.rde | 11 + result/dtd5.rdr | 11 + result/dtd5.sax | 18 + result/dtd5.sax2 | 18 + result/dtd6 | 7 + result/dtd6.rde | 12 + result/dtd6.rdr | 12 + result/dtd6.sax | 19 + result/dtd6.sax2 | 19 + result/dtd7 | 7 + result/dtd7.rde | 9 + result/dtd7.rdr | 9 + result/dtd7.sax | 16 + result/dtd7.sax2 | 16 + result/dtd8 | 9 + result/dtd8.rde | 9 + result/dtd8.rdr | 9 + result/dtd8.sax | 18 + result/dtd8.sax2 | 18 + result/dtd9 | 9 + result/dtd9.rde | 9 + result/dtd9.rdr | 9 + result/dtd9.sax | 18 + result/dtd9.sax2 | 18 + result/ebcdic_566012.xml | 1 + result/ebcdic_566012.xml.rde | 1 + result/ebcdic_566012.xml.rdr | 1 + result/ebcdic_566012.xml.sax | 5 + result/ebcdic_566012.xml.sax2 | 5 + result/emptycdata.xml | 4 + result/emptycdata.xml.rde | 7 + result/emptycdata.xml.rdr | 7 + result/emptycdata.xml.sax | 10 + result/emptycdata.xml.sax2 | 10 + result/ent1 | 7 + result/ent1.rde | 6 + result/ent1.rdr | 8 + result/ent1.sax | 16 + result/ent1.sax2 | 16 + result/ent10 | 14 + result/ent10.rde | 14 + result/ent10.rdr | 8 + result/ent10.sax | 31 + result/ent10.sax2 | 31 + result/ent11 | 5 + result/ent11.rde | 5 + result/ent11.rdr | 4 + result/ent11.sax | 13 + result/ent11.sax2 | 13 + result/ent12 | 8 + result/ent12.rde | 10 + result/ent12.rdr | 10 + result/ent12.sax | 21 + result/ent12.sax2 | 21 + result/ent13 | 5 + result/ent13.rde | 4 + result/ent13.rdr | 4 + result/ent13.sax | 11 + result/ent13.sax2 | 11 + result/ent2 | 10 + result/ent2.rde | 15 + result/ent2.rdr | 13 + result/ent2.sax | 26 + result/ent2.sax2 | 26 + result/ent3 | 7 + result/ent3.rde | 6 + result/ent3.rdr | 6 + result/ent3.sax | 12 + result/ent3.sax2 | 12 + result/ent4 | 7 + result/ent4.rde | 6 + result/ent4.rdr | 6 + result/ent4.sax | 16 + result/ent4.sax2 | 16 + result/ent5 | 5 + result/ent5.rde | 6 + result/ent5.rdr | 6 + result/ent5.sax | 13 + result/ent5.sax2 | 13 + result/ent6 | 9 + result/ent6.rde | 2 + result/ent6.rdr | 2 + result/ent6.sax | 17 + result/ent6.sax2 | 17 + result/ent7 | 8 + result/ent7.rde | 6 + result/ent7.rdr | 8 + result/ent7.sax | 17 + result/ent7.sax2 | 17 + result/ent8 | 10 + result/ent8.rde | 20 + result/ent8.rdr | 21 + result/ent8.sax | 37 + result/ent8.sax2 | 37 + result/ent9 | 61 + result/ent9.rde | 300 + result/ent9.rdr | 280 + result/ent9.sax | 310 + result/ent9.sax2 | 310 + result/ent_738805.xml | 15 + result/ent_738805.xml.rde | 15 + result/ent_738805.xml.rdr | 31 + result/ent_738805.xml.sax | 66 + result/ent_738805.xml.sax2 | 66 + result/errors/754946.xml | 0 result/errors/754946.xml.err | 19 + result/errors/754946.xml.str | 4 + result/errors/754947.xml | 0 result/errors/754947.xml.err | 7 + result/errors/754947.xml.str | 5 + result/errors/758588.xml | 0 result/errors/758588.xml.err | 9 + result/errors/758588.xml.str | 10 + result/errors/759020.xml | 0 result/errors/759020.xml.err | 6 + result/errors/759020.xml.str | 7 + result/errors/759398.xml | 0 result/errors/759398.xml.err | 9 + result/errors/759398.xml.str | 5 + result/errors/759573-2.xml | 0 result/errors/759573-2.xml.err | 58 + result/errors/759573-2.xml.str | 4 + result/errors/759573.xml | 0 result/errors/759573.xml.err | 31 + result/errors/759573.xml.str | 4 + result/errors/attr1.xml | 0 result/errors/attr1.xml.err | 6 + result/errors/attr1.xml.str | 10 + result/errors/attr2.xml | 0 result/errors/attr2.xml.err | 6 + result/errors/attr2.xml.str | 10 + result/errors/attr3.xml | 6 + result/errors/attr3.xml.err | 3 + result/errors/attr3.xml.str | 3 + result/errors/attr4.xml | 0 result/errors/attr4.xml.err | 12 + result/errors/attr4.xml.str | 10 + result/errors/cdata.xml | 0 result/errors/cdata.xml.err | 4 + result/errors/cdata.xml.str | 5 + result/errors/charref1.xml | 0 result/errors/charref1.xml.err | 3 + result/errors/charref1.xml.str | 4 + result/errors/comment1.xml | 0 result/errors/comment1.xml.err | 6 + result/errors/comment1.xml.str | 4 + result/errors/content1.xml | 0 result/errors/content1.xml.err | 16 + result/errors/content1.xml.str | 14 + result/errors/extparsedent.xml | 5 + result/errors/extparsedent.xml.err | 0 result/errors/extparsedent.xml.str | 0 result/errors/name.xml | 0 result/errors/name.xml.err | 3 + result/errors/name.xml.str | 4 + result/errors/name2.xml | 0 result/errors/name2.xml.err | 6 + result/errors/name2.xml.str | 10 + result/eve.xml | 6 + result/eve.xml.rde | 5 + result/eve.xml.rdr | 5 + result/eve.xml.sax | 11 + result/eve.xml.sax2 | 11 + result/example.dtd | 0 result/expr/base | 85 + result/intsubset.xml | 5 + result/intsubset.xml.rde | 2 + result/intsubset.xml.rdr | 2 + result/intsubset.xml.sax | 9 + result/intsubset.xml.sax2 | 9 + result/intsubset2.xml | 250 + result/intsubset2.xml.rde | 5 + result/intsubset2.xml.rdr | 5 + result/intsubset2.xml.sax | 286 + result/intsubset2.xml.sax2 | 286 + result/isolat1 | 2 + result/isolat1.rde | 3 + result/isolat1.rdr | 3 + result/isolat1.sax | 7 + result/isolat1.sax2 | 7 + result/isolat2 | 107 + result/isolat2.rde | 108 + result/isolat2.rdr | 108 + result/isolat2.sax | 35 + result/isolat2.sax2 | 35 + result/isolat3 | 10 + result/isolat3.rde | 23 + result/isolat3.rdr | 23 + result/isolat3.sax | 29 + result/isolat3.sax2 | 29 + result/japancrlf.xml | 4 + result/japancrlf.xml.rde | 7 + result/japancrlf.xml.rdr | 7 + result/japancrlf.xml.sax | 11 + result/japancrlf.xml.sax2 | 11 + result/namespaces/err_0.xml | 2 + result/namespaces/err_0.xml.err | 0 result/namespaces/err_1.xml | 2 + result/namespaces/err_1.xml.err | 3 + result/namespaces/err_10.xml | 0 result/namespaces/err_10.xml.err | 3 + result/namespaces/err_11.xml | 0 result/namespaces/err_11.xml.err | 3 + result/namespaces/err_2.xml | 2 + result/namespaces/err_2.xml.err | 3 + result/namespaces/err_3.xml | 2 + result/namespaces/err_3.xml.err | 3 + result/namespaces/err_4.xml | 2 + result/namespaces/err_4.xml.err | 3 + result/namespaces/err_5.xml | 2 + result/namespaces/err_5.xml.err | 3 + result/namespaces/err_6.xml | 2 + result/namespaces/err_6.xml.err | 3 + result/namespaces/err_7.xml | 2 + result/namespaces/err_7.xml.err | 3 + result/namespaces/err_8.xml | 2 + result/namespaces/err_8.xml.err | 3 + result/namespaces/err_9.xml | 2 + result/namespaces/err_9.xml.err | 3 + result/noent/att1 | 2 + result/noent/att10 | 18 + result/noent/att11 | 9 + result/noent/att2 | 2 + result/noent/att3 | 2 + result/noent/att4 | 9264 ++++ result/noent/att5 | 40 + result/noent/att6 | 6 + result/noent/att7 | 11 + result/noent/att8 | 2 + result/noent/att9 | 6 + result/noent/attrib.xml | 2 + result/noent/badcomment.xml | 17 + result/noent/bigentname.xml | 6 + result/noent/bigname.xml | 2 + result/noent/bigname2.xml | 2 + result/noent/cdata | 4 + result/noent/cdata-2-byte-UTF-8.xml | 6 + result/noent/cdata-3-byte-UTF-8.xml | 7 + result/noent/cdata-4-byte-UTF-8.xml | 8 + result/noent/cdata2 | 6 + result/noent/comment.xml | 6 + result/noent/comment2.xml | 6 + result/noent/comment3.xml | 164 + result/noent/comment4.xml | 5 + result/noent/comment5.xml | 9 + result/noent/comment6.xml | 14 + result/noent/dav1 | 25 + result/noent/dav10 | 4 + result/noent/dav11 | 21 + result/noent/dav12 | 2 + result/noent/dav13 | 16 + result/noent/dav15 | 20 + result/noent/dav16 | 6 + result/noent/dav17 | 22 + result/noent/dav18 | 6 + result/noent/dav19 | 18 + result/noent/dav2 | 24 + result/noent/dav3 | 18 + result/noent/dav4 | 16 + result/noent/dav5 | 17 + result/noent/dav6 | 22 + result/noent/dav7 | 16 + result/noent/dav8 | 14 + result/noent/dav9 | 18 + result/noent/defattr.xml | 6 + result/noent/defattr2.xml | 8 + result/noent/dia1 | 99 + result/noent/dia2 | 99 + result/noent/dtd1 | 4 + result/noent/dtd10 | 9 + result/noent/dtd11 | 6 + result/noent/dtd12 | 6 + result/noent/dtd13 | 7 + result/noent/dtd2 | 5 + result/noent/dtd3 | 5 + result/noent/dtd4 | 5 + result/noent/dtd5 | 7 + result/noent/dtd6 | 7 + result/noent/dtd7 | 7 + result/noent/dtd8 | 9 + result/noent/dtd9 | 9 + result/noent/ebcdic_566012.xml | 1 + result/noent/emptycdata.xml | 4 + result/noent/ent1 | 7 + result/noent/ent10 | 18 + result/noent/ent11 | 6 + result/noent/ent12 | 8 + result/noent/ent13 | 5 + result/noent/ent2 | 12 + result/noent/ent3 | 7 + result/noent/ent4 | 7 + result/noent/ent5 | 5 + result/noent/ent6 | 9 + result/noent/ent7 | 8 + result/noent/ent8 | 10 + result/noent/ent9 | 61 + result/noent/ent_738805.xml | 15 + result/noent/eve.xml | 6 + result/noent/intsubset.xml | 5 + result/noent/intsubset2.xml | 250 + result/noent/isolat1 | 2 + result/noent/isolat2 | 107 + result/noent/isolat3 | 10 + result/noent/japancrlf.xml | 4 + result/noent/ns | 4 + result/noent/ns2 | 2 + result/noent/ns3 | 2 + result/noent/ns4 | 2 + result/noent/ns5 | 4 + result/noent/ns6 | 5 + result/noent/ns7 | 2 + result/noent/nsclean.xml | 5 + result/noent/p3p | 19 + result/noent/pi.xml | 6 + result/noent/pi2.xml | 6 + result/noent/rdf1 | 81 + result/noent/rdf2 | 1899 + result/noent/slashdot.rdf | 65 + result/noent/slashdot.xml | 113 + result/noent/slashdot16.xml | Bin 0 -> 10374 bytes result/noent/svg1 | 161 + result/noent/svg2 | 56 + result/noent/svg3 | 723 + result/noent/title.xml | 2 + result/noent/tstblanks.xml | 2 + result/noent/utf16bebom.xml | Bin 0 -> 344 bytes result/noent/utf16bom.xml | Bin 0 -> 258 bytes result/noent/utf16lebom.xml | Bin 0 -> 344 bytes result/noent/utf8bom.xml | 2 + result/noent/wap.xml | 24 + result/noent/winblanks.xml | 6 + result/noent/wml.xml | 10 + result/noent/xhtml1 | 30 + result/noent/xhtmlcomp | 7 + result/noent/xml1 | 9 + result/noent/xml2 | 8 + result/ns | 4 + result/ns.rde | 7 + result/ns.rdr | 7 + result/ns.sax | 11 + result/ns.sax2 | 11 + result/ns2 | 2 + result/ns2.rde | 1 + result/ns2.rdr | 1 + result/ns2.sax | 5 + result/ns2.sax2 | 5 + result/ns3 | 2 + result/ns3.rde | 1 + result/ns3.rdr | 1 + result/ns3.sax | 5 + result/ns3.sax2 | 5 + result/ns4 | 2 + result/ns4.rde | 1 + result/ns4.rdr | 1 + result/ns4.sax | 5 + result/ns4.sax2 | 5 + result/ns5 | 4 + result/ns5.rde | 7 + result/ns5.rdr | 7 + result/ns5.sax | 11 + result/ns5.sax2 | 11 + result/ns6 | 5 + result/ns6.rde | 10 + result/ns6.rdr | 10 + result/ns6.sax | 15 + result/ns6.sax2 | 15 + result/ns7 | 2 + result/ns7.rde | 1 + result/ns7.rdr | 1 + result/ns7.sax | 5 + result/ns7.sax2 | 5 + result/nsclean.xml | 5 + result/nsclean.xml.rde | 10 + result/nsclean.xml.rdr | 10 + result/nsclean.xml.sax | 13 + result/nsclean.xml.sax2 | 13 + result/p3p | 19 + result/p3p.rde | 55 + result/p3p.rdr | 55 + result/p3p.sax | 63 + result/p3p.sax2 | 65 + result/pattern/conj | 47 + result/pattern/multiple | 91 + result/pattern/namespaces | 20 + result/pattern/simple | 12 + result/pi.xml | 6 + result/pi.xml.rde | 13 + result/pi.xml.rdr | 13 + result/pi.xml.sax | 17 + result/pi.xml.sax2 | 17 + result/pi2.xml | 6 + result/pi2.xml.rde | 9 + result/pi2.xml.rdr | 9 + result/pi2.xml.sax | 13 + result/pi2.xml.sax2 | 13 + result/rdf1 | 81 + result/rdf1.rde | 214 + result/rdf1.rdr | 214 + result/rdf1.sax | 186 + result/rdf1.sax2 | 186 + result/rdf2 | 1899 + result/rdf2.rde | 2008 + result/rdf2.rdr | 2008 + result/rdf2.sax | 191 + result/rdf2.sax2 | 191 + result/regexp/branch | 14 + result/regexp/bug316338 | 20 + result/regexp/bug420596 | 10 + result/regexp/content | 12 + result/regexp/hard | 12 + result/regexp/ncname | 6 + result/regexp/ranges | 15 + result/regexp/ranges2 | 14 + result/regexp/xpath | 32 + result/relaxng/302836_0 | 0 result/relaxng/302836_0.err | 1 + result/relaxng/302836_err | 1 + result/relaxng/302836_valid | 0 result/relaxng/307377_0 | 0 result/relaxng/307377_0.err | 2 + result/relaxng/307377_1 | 0 result/relaxng/307377_1.err | 3 + result/relaxng/307377_2 | 0 result/relaxng/307377_2.err | 1 + result/relaxng/307377_err | 1 + result/relaxng/307377_valid | 0 result/relaxng/492317_0 | 0 result/relaxng/492317_0.err | 1 + result/relaxng/492317_1 | 0 result/relaxng/492317_1.err | 1 + result/relaxng/492317_2 | 0 result/relaxng/492317_2.err | 3 + result/relaxng/492317_err | 1 + result/relaxng/492317_valid | 0 result/relaxng/558452_0 | 0 result/relaxng/558452_0.err | 1 + result/relaxng/558452_1 | 0 result/relaxng/558452_1.err | 2 + result/relaxng/558452_2 | 0 result/relaxng/558452_2.err | 1 + result/relaxng/558452_3 | 0 result/relaxng/558452_3.err | 1 + result/relaxng/558452_4 | 0 result/relaxng/558452_4.err | 2 + result/relaxng/558452_err | 1 + result/relaxng/558452_valid | 0 result/relaxng/565219_0 | 0 result/relaxng/565219_0.err | 2 + result/relaxng/565219_1 | 0 result/relaxng/565219_1.err | 1 + result/relaxng/565219_2 | 0 result/relaxng/565219_2.err | 2 + result/relaxng/565219_err | 1 + result/relaxng/565219_valid | 0 result/relaxng/595792-ext_err | 1 + result/relaxng/595792-ext_valid | 0 result/relaxng/595792_0 | 0 result/relaxng/595792_0.err | 1 + result/relaxng/595792_err | 1 + result/relaxng/595792_valid | 0 result/relaxng/710744_1 | 0 result/relaxng/710744_1.err | 1 + result/relaxng/710744_2 | 0 result/relaxng/710744_2.err | 2 + result/relaxng/710744_err | 1 + result/relaxng/710744_valid | 0 result/relaxng/OpenDocumentSub_0 | 0 result/relaxng/OpenDocumentSub_0.err | 1 + result/relaxng/OpenDocumentSub_err | 1 + result/relaxng/OpenDocumentSub_valid | 0 result/relaxng/addressBook_err | 1 + result/relaxng/addressBook_valid | 0 result/relaxng/choice0_0 | 0 result/relaxng/choice0_0.err | 1 + result/relaxng/choice0_1 | 0 result/relaxng/choice0_1.err | 1 + result/relaxng/choice0_2 | 0 result/relaxng/choice0_2.err | 1 + result/relaxng/choice0_3 | 0 result/relaxng/choice0_3.err | 1 + result/relaxng/choice0_4 | 0 result/relaxng/choice0_4.err | 2 + result/relaxng/choice0_5 | 0 result/relaxng/choice0_5.err | 2 + result/relaxng/choice0_6 | 0 result/relaxng/choice0_6.err | 2 + result/relaxng/choice0_7 | 0 result/relaxng/choice0_7.err | 3 + result/relaxng/choice0_8 | 0 result/relaxng/choice0_8.err | 3 + result/relaxng/choice0_err | 1 + result/relaxng/choice0_valid | 0 result/relaxng/compare0_0 | 0 result/relaxng/compare0_0.err | 3 + result/relaxng/compare0_err | 1 + result/relaxng/compare0_valid | 0 result/relaxng/comps_0 | 0 result/relaxng/comps_0.err | 1 + result/relaxng/comps_err | 1 + result/relaxng/comps_valid | 0 result/relaxng/demo2_err | 1 + result/relaxng/demo2_valid | 0 result/relaxng/demo3_err | 1 + result/relaxng/demo3_valid | 0 result/relaxng/demo_err | 1 + result/relaxng/demo_valid | 0 result/relaxng/docbook_0 | 0 result/relaxng/docbook_0.err | 1 + result/relaxng/docbook_err | 1 + result/relaxng/docbook_valid | 0 result/relaxng/empty0_0 | 0 result/relaxng/empty0_0.err | 1 + result/relaxng/empty0_err | 1 + result/relaxng/empty0_valid | 0 result/relaxng/empty1_0 | 0 result/relaxng/empty1_0.err | 1 + result/relaxng/empty1_1 | 0 result/relaxng/empty1_1.err | 1 + result/relaxng/empty1_err | 1 + result/relaxng/empty1_valid | 0 result/relaxng/inline2_err | 1 + result/relaxng/inline2_valid | 0 result/relaxng/inline3_err | 1 + result/relaxng/inline3_valid | 0 result/relaxng/inline_err | 1 + result/relaxng/inline_valid | 0 result/relaxng/interleave0_0_err | 1 + result/relaxng/interleave0_0_valid | 0 result/relaxng/interleave1_0_err | 1 + result/relaxng/interleave1_0_valid | 0 result/relaxng/libvirt_0 | 0 result/relaxng/libvirt_0.err | 1 + result/relaxng/libvirt_err | 1 + result/relaxng/libvirt_valid | 0 result/relaxng/list_0 | 0 result/relaxng/list_0.err | 1 + result/relaxng/list_1 | 0 result/relaxng/list_1.err | 2 + result/relaxng/list_err | 1 + result/relaxng/list_valid | 0 result/relaxng/pattern1_err | 1 + result/relaxng/pattern1_valid | 0 result/relaxng/pattern2_err | 1 + result/relaxng/pattern2_valid | 0 result/relaxng/pattern3_1 | 0 result/relaxng/pattern3_1.err | 1 + result/relaxng/proofsystem_err | 1 + result/relaxng/proofsystem_valid | 0 result/relaxng/rngbug-001_err | 1 + result/relaxng/rngbug-001_valid | 0 result/relaxng/spec1_1 | 0 result/relaxng/spec1_1.err | 1 + result/relaxng/spec1_err | 1 + result/relaxng/spec1_valid | 0 result/relaxng/spec_0 | 0 result/relaxng/spec_0.err | 1 + result/relaxng/spec_err | 1 + result/relaxng/spec_valid | 0 result/relaxng/table_err | 1 + result/relaxng/table_valid | 0 result/relaxng/tutor10_10_1 | 0 result/relaxng/tutor10_10_1.err | 1 + result/relaxng/tutor10_10_err | 1 + result/relaxng/tutor10_10_valid | 0 result/relaxng/tutor10_1_1 | 0 result/relaxng/tutor10_1_1.err | 1 + result/relaxng/tutor10_1_2 | 0 result/relaxng/tutor10_1_2.err | 1 + result/relaxng/tutor10_1_3 | 0 result/relaxng/tutor10_1_3.err | 1 + result/relaxng/tutor10_1_4 | 0 result/relaxng/tutor10_1_4.err | 2 + result/relaxng/tutor10_1_5 | 0 result/relaxng/tutor10_1_5.err | 2 + result/relaxng/tutor10_1_6 | 0 result/relaxng/tutor10_1_6.err | 2 + result/relaxng/tutor10_1_err | 1 + result/relaxng/tutor10_1_valid | 0 result/relaxng/tutor10_2_1 | 0 result/relaxng/tutor10_2_1.err | 1 + result/relaxng/tutor10_2_2 | 0 result/relaxng/tutor10_2_2.err | 1 + result/relaxng/tutor10_2_3 | 0 result/relaxng/tutor10_2_3.err | 2 + result/relaxng/tutor10_2_4 | 0 result/relaxng/tutor10_2_4.err | 2 + result/relaxng/tutor10_2_err | 1 + result/relaxng/tutor10_2_valid | 0 result/relaxng/tutor10_3_1 | 0 result/relaxng/tutor10_3_1.err | 1 + result/relaxng/tutor10_3_err | 1 + result/relaxng/tutor10_3_valid | 0 result/relaxng/tutor10_4_1 | 0 result/relaxng/tutor10_4_1.err | 1 + result/relaxng/tutor10_4_err | 1 + result/relaxng/tutor10_4_valid | 0 result/relaxng/tutor10_5_1 | 0 result/relaxng/tutor10_5_1.err | 1 + result/relaxng/tutor10_5_err | 1 + result/relaxng/tutor10_5_valid | 0 result/relaxng/tutor10_6_1 | 0 result/relaxng/tutor10_6_1.err | 1 + result/relaxng/tutor10_6_err | 1 + result/relaxng/tutor10_6_valid | 0 result/relaxng/tutor10_7_1 | 0 result/relaxng/tutor10_7_1.err | 1 + result/relaxng/tutor10_7_2 | 0 result/relaxng/tutor10_7_2.err | 1 + result/relaxng/tutor10_7_3 | 0 result/relaxng/tutor10_7_3.err | 2 + result/relaxng/tutor10_7_err | 1 + result/relaxng/tutor10_7_valid | 0 result/relaxng/tutor10_8_1 | 0 result/relaxng/tutor10_8_1.err | 1 + result/relaxng/tutor10_8_2 | 0 result/relaxng/tutor10_8_2.err | 1 + result/relaxng/tutor10_8_3 | 0 result/relaxng/tutor10_8_3.err | 2 + result/relaxng/tutor10_8_err | 1 + result/relaxng/tutor10_8_valid | 0 result/relaxng/tutor10_9_1 | 0 result/relaxng/tutor10_9_1.err | 1 + result/relaxng/tutor10_9_err | 1 + result/relaxng/tutor10_9_valid | 0 result/relaxng/tutor11_1_1 | 0 result/relaxng/tutor11_1_1.err | 1 + result/relaxng/tutor11_1_2 | 0 result/relaxng/tutor11_1_2.err | 1 + result/relaxng/tutor11_1_3 | 0 result/relaxng/tutor11_1_3.err | 1 + result/relaxng/tutor11_1_err | 1 + result/relaxng/tutor11_1_valid | 0 result/relaxng/tutor11_2_1 | 0 result/relaxng/tutor11_2_1.err | 1 + result/relaxng/tutor11_2_2 | 0 result/relaxng/tutor11_2_2.err | 2 + result/relaxng/tutor11_2_3 | 0 result/relaxng/tutor11_2_3.err | 2 + result/relaxng/tutor11_2_err | 1 + result/relaxng/tutor11_2_valid | 0 result/relaxng/tutor11_3_1 | 0 result/relaxng/tutor11_3_1.err | 2 + result/relaxng/tutor11_3_err | 1 + result/relaxng/tutor11_3_valid | 0 result/relaxng/tutor11_4_1 | 0 result/relaxng/tutor11_4_1.err | 1 + result/relaxng/tutor11_4_err | 1 + result/relaxng/tutor11_4_valid | 0 result/relaxng/tutor12_1_1 | 0 result/relaxng/tutor12_1_1.err | 1 + result/relaxng/tutor12_1_err | 1 + result/relaxng/tutor12_1_valid | 0 result/relaxng/tutor13_1_1 | 0 result/relaxng/tutor13_1_1.err | 1 + result/relaxng/tutor13_1_err | 1 + result/relaxng/tutor13_1_valid | 0 result/relaxng/tutor14_1_err | 1 + result/relaxng/tutor14_1_valid | 0 result/relaxng/tutor1_1_1 | 0 result/relaxng/tutor1_1_1.err | 1 + result/relaxng/tutor1_1_err | 1 + result/relaxng/tutor1_1_valid | 0 result/relaxng/tutor1_2_1 | 0 result/relaxng/tutor1_2_1.err | 1 + result/relaxng/tutor1_2_err | 1 + result/relaxng/tutor1_2_valid | 0 result/relaxng/tutor1_3_1 | 0 result/relaxng/tutor1_3_1.err | 1 + result/relaxng/tutor1_3_err | 1 + result/relaxng/tutor1_3_valid | 0 result/relaxng/tutor1_4_1 | 0 result/relaxng/tutor1_4_1.err | 1 + result/relaxng/tutor1_4_err | 1 + result/relaxng/tutor1_4_valid | 0 result/relaxng/tutor2_1_1 | 0 result/relaxng/tutor2_1_1.err | 1 + result/relaxng/tutor2_1_err | 1 + result/relaxng/tutor2_1_valid | 0 result/relaxng/tutor3_1_1 | 0 result/relaxng/tutor3_1_1.err | 1 + result/relaxng/tutor3_1_2 | 0 result/relaxng/tutor3_1_2.err | 1 + result/relaxng/tutor3_1_err | 1 + result/relaxng/tutor3_1_valid | 0 result/relaxng/tutor3_2_1 | 0 result/relaxng/tutor3_2_1.err | 2 + result/relaxng/tutor3_2_err | 1 + result/relaxng/tutor3_2_valid | 0 result/relaxng/tutor3_3_1 | 0 result/relaxng/tutor3_3_1.err | 1 + result/relaxng/tutor3_3_err | 1 + result/relaxng/tutor3_3_valid | 0 result/relaxng/tutor3_4_1 | 0 result/relaxng/tutor3_4_1.err | 1 + result/relaxng/tutor3_4_err | 1 + result/relaxng/tutor3_4_valid | 0 result/relaxng/tutor3_5_1 | 0 result/relaxng/tutor3_5_1.err | 1 + result/relaxng/tutor3_5_2 | 0 result/relaxng/tutor3_5_2.err | 3 + result/relaxng/tutor3_5_err | 1 + result/relaxng/tutor3_5_valid | 0 result/relaxng/tutor3_6_1 | 0 result/relaxng/tutor3_6_1.err | 1 + result/relaxng/tutor3_6_err | 1 + result/relaxng/tutor3_6_valid | 0 result/relaxng/tutor3_7_1 | 0 result/relaxng/tutor3_7_1.err | 2 + result/relaxng/tutor3_7_err | 4 + result/relaxng/tutor3_7_valid | 0 result/relaxng/tutor3_8_1 | 0 result/relaxng/tutor3_8_1.err | 1 + result/relaxng/tutor3_8_err | 1 + result/relaxng/tutor3_8_valid | 0 result/relaxng/tutor3_9_1 | 0 result/relaxng/tutor3_9_1.err | 1 + result/relaxng/tutor3_9_err | 1 + result/relaxng/tutor3_9_valid | 0 result/relaxng/tutor4_1_1 | 0 result/relaxng/tutor4_1_1.err | 1 + result/relaxng/tutor4_1_err | 1 + result/relaxng/tutor4_1_valid | 0 result/relaxng/tutor4_2_1 | 0 result/relaxng/tutor4_2_1.err | 1 + result/relaxng/tutor4_2_err | 1 + result/relaxng/tutor4_2_valid | 0 result/relaxng/tutor4_3_1 | 0 result/relaxng/tutor4_3_1.err | 1 + result/relaxng/tutor4_3_2 | 0 result/relaxng/tutor4_3_2.err | 1 + result/relaxng/tutor4_3_3 | 0 result/relaxng/tutor4_3_3.err | 1 + result/relaxng/tutor4_3_4 | 0 result/relaxng/tutor4_3_4.err | 1 + result/relaxng/tutor4_3_5 | 0 result/relaxng/tutor4_3_5.err | 1 + result/relaxng/tutor4_3_6 | 0 result/relaxng/tutor4_3_6.err | 1 + result/relaxng/tutor4_3_err | 1 + result/relaxng/tutor4_3_valid | 0 result/relaxng/tutor4_4_1 | 0 result/relaxng/tutor4_4_1.err | 2 + result/relaxng/tutor4_4_err | 1 + result/relaxng/tutor4_4_valid | 0 result/relaxng/tutor5_1_1 | 0 result/relaxng/tutor5_1_1.err | 1 + result/relaxng/tutor5_1_err | 1 + result/relaxng/tutor5_1_valid | 0 result/relaxng/tutor5_2_1 | 0 result/relaxng/tutor5_2_1.err | 1 + result/relaxng/tutor5_2_err | 1 + result/relaxng/tutor5_2_valid | 0 result/relaxng/tutor5_3_1 | 0 result/relaxng/tutor5_3_1.err | 2 + result/relaxng/tutor5_3_err | 1 + result/relaxng/tutor5_3_valid | 0 result/relaxng/tutor5_4_1 | 0 result/relaxng/tutor5_4_1.err | 1 + result/relaxng/tutor5_4_err | 1 + result/relaxng/tutor5_4_valid | 0 result/relaxng/tutor5_5_err | 1 + result/relaxng/tutor5_5_valid | 0 result/relaxng/tutor6_1_1 | 0 result/relaxng/tutor6_1_1.err | 1 + result/relaxng/tutor6_1_2 | 0 result/relaxng/tutor6_1_2.err | 1 + result/relaxng/tutor6_1_3 | 0 result/relaxng/tutor6_1_3.err | 2 + result/relaxng/tutor6_1_4 | 0 result/relaxng/tutor6_1_4.err | 1 + result/relaxng/tutor6_1_5 | 0 result/relaxng/tutor6_1_5.err | 1 + result/relaxng/tutor6_1_err | 1 + result/relaxng/tutor6_1_valid | 0 result/relaxng/tutor6_2_1 | 0 result/relaxng/tutor6_2_1.err | 1 + result/relaxng/tutor6_2_2 | 0 result/relaxng/tutor6_2_2.err | 1 + result/relaxng/tutor6_2_3 | 0 result/relaxng/tutor6_2_3.err | 1 + result/relaxng/tutor6_2_4 | 0 result/relaxng/tutor6_2_4.err | 3 + result/relaxng/tutor6_2_err | 1 + result/relaxng/tutor6_2_valid | 0 result/relaxng/tutor6_3_1 | 0 result/relaxng/tutor6_3_1.err | 2 + result/relaxng/tutor6_3_err | 1 + result/relaxng/tutor6_3_valid | 0 result/relaxng/tutor7_1_1 | 0 result/relaxng/tutor7_1_1.err | 1 + result/relaxng/tutor7_1_2 | 0 result/relaxng/tutor7_1_2.err | 4 + result/relaxng/tutor7_1_3 | 0 result/relaxng/tutor7_1_3.err | 4 + result/relaxng/tutor7_1_4 | 0 result/relaxng/tutor7_1_4.err | 1 + result/relaxng/tutor7_1_err | 1 + result/relaxng/tutor7_1_valid | 0 result/relaxng/tutor7_2_1 | 0 result/relaxng/tutor7_2_1.err | 1 + result/relaxng/tutor7_2_2 | 0 result/relaxng/tutor7_2_2.err | 1 + result/relaxng/tutor7_2_3 | 0 result/relaxng/tutor7_2_3.err | 1 + result/relaxng/tutor7_2_4 | 0 result/relaxng/tutor7_2_4.err | 4 + result/relaxng/tutor7_2_err | 1 + result/relaxng/tutor7_2_valid | 0 result/relaxng/tutor7_3_1 | 0 result/relaxng/tutor7_3_1.err | 1 + result/relaxng/tutor7_3_2 | 0 result/relaxng/tutor7_3_2.err | 1 + result/relaxng/tutor7_3_3 | 0 result/relaxng/tutor7_3_3.err | 1 + result/relaxng/tutor7_3_4 | 0 result/relaxng/tutor7_3_4.err | 4 + result/relaxng/tutor7_3_5 | 0 result/relaxng/tutor7_3_5.err | 4 + result/relaxng/tutor7_3_err | 1 + result/relaxng/tutor7_3_valid | 0 result/relaxng/tutor8_1_1 | 0 result/relaxng/tutor8_1_1.err | 1 + result/relaxng/tutor8_1_2 | 0 result/relaxng/tutor8_1_2.err | 1 + result/relaxng/tutor8_1_err | 1 + result/relaxng/tutor8_1_valid | 0 result/relaxng/tutor8_2_1 | 0 result/relaxng/tutor8_2_1.err | 1 + result/relaxng/tutor8_2_2 | 0 result/relaxng/tutor8_2_2.err | 1 + result/relaxng/tutor8_2_3 | 0 result/relaxng/tutor8_2_3.err | 1 + result/relaxng/tutor8_2_4 | 0 result/relaxng/tutor8_2_4.err | 3 + result/relaxng/tutor8_2_5 | 0 result/relaxng/tutor8_2_5.err | 4 + result/relaxng/tutor8_2_6 | 0 result/relaxng/tutor8_2_6.err | 3 + result/relaxng/tutor8_2_err | 1 + result/relaxng/tutor8_2_valid | 0 result/relaxng/tutor8_3_1 | 0 result/relaxng/tutor8_3_1.err | 1 + result/relaxng/tutor8_3_err | 1 + result/relaxng/tutor8_3_valid | 0 result/relaxng/tutor9_10_1 | 0 result/relaxng/tutor9_10_1.err | 1 + result/relaxng/tutor9_10_err | 1 + result/relaxng/tutor9_10_valid | 0 result/relaxng/tutor9_11_1 | 0 result/relaxng/tutor9_11_1.err | 1 + result/relaxng/tutor9_11_err | 1 + result/relaxng/tutor9_11_valid | 0 result/relaxng/tutor9_12_1 | 0 result/relaxng/tutor9_12_1.err | 1 + result/relaxng/tutor9_12_err | 1 + result/relaxng/tutor9_12_valid | 0 result/relaxng/tutor9_1_1 | 0 result/relaxng/tutor9_1_1.err | 1 + result/relaxng/tutor9_1_err | 1 + result/relaxng/tutor9_1_valid | 0 result/relaxng/tutor9_2_1 | 0 result/relaxng/tutor9_2_1.err | 1 + result/relaxng/tutor9_2_2 | 0 result/relaxng/tutor9_2_2.err | 1 + result/relaxng/tutor9_2_err | 1 + result/relaxng/tutor9_2_valid | 0 result/relaxng/tutor9_3_1 | 0 result/relaxng/tutor9_3_1.err | 1 + result/relaxng/tutor9_3_2 | 0 result/relaxng/tutor9_3_2.err | 1 + result/relaxng/tutor9_3_err | 1 + result/relaxng/tutor9_3_valid | 0 result/relaxng/tutor9_4_1 | 0 result/relaxng/tutor9_4_1.err | 1 + result/relaxng/tutor9_4_2 | 0 result/relaxng/tutor9_4_2.err | 1 + result/relaxng/tutor9_4_err | 1 + result/relaxng/tutor9_4_valid | 0 result/relaxng/tutor9_5_1 | 0 result/relaxng/tutor9_5_1.err | 1 + result/relaxng/tutor9_5_2 | 0 result/relaxng/tutor9_5_2.err | 3 + result/relaxng/tutor9_5_3 | 0 result/relaxng/tutor9_5_3.err | 2 + result/relaxng/tutor9_5_err | 1 + result/relaxng/tutor9_5_valid | 0 result/relaxng/tutor9_6.rng | 24 + result/relaxng/tutor9_6_1 | 0 result/relaxng/tutor9_6_1.err | 1 + result/relaxng/tutor9_6_2 | 0 result/relaxng/tutor9_6_2.err | 2 + result/relaxng/tutor9_6_3 | 0 result/relaxng/tutor9_6_3.err | 2 + result/relaxng/tutor9_6_err | 1 + result/relaxng/tutor9_6_valid | 0 result/relaxng/tutor9_7_1 | 0 result/relaxng/tutor9_7_1.err | 1 + result/relaxng/tutor9_7_err | 1 + result/relaxng/tutor9_7_valid | 0 result/relaxng/tutor9_8_1 | 0 result/relaxng/tutor9_8_1.err | 1 + result/relaxng/tutor9_8_err | 1 + result/relaxng/tutor9_8_valid | 0 result/relaxng/tutor9_9_1 | 0 result/relaxng/tutor9_9_1.err | 1 + result/relaxng/tutor9_9_err | 1 + result/relaxng/tutor9_9_valid | 0 result/relaxng/tutorA_err | 1 + result/relaxng/tutorA_valid | 0 result/schemas/570702_0_0 | 1 + result/schemas/570702_0_0.err | 0 result/schemas/579746_0_0 | 1 + result/schemas/579746_0_0.err | 0 result/schemas/579746_0_1 | 1 + result/schemas/579746_0_1.err | 0 result/schemas/579746_0_2 | 1 + result/schemas/579746_0_2.err | 0 result/schemas/579746_0_3 | 1 + result/schemas/579746_0_3.err | 1 + result/schemas/579746_0_4 | 1 + result/schemas/579746_0_4.err | 0 result/schemas/579746_0_5 | 1 + result/schemas/579746_0_5.err | 1 + result/schemas/579746_1_0 | 1 + result/schemas/579746_1_0.err | 0 result/schemas/579746_1_1 | 1 + result/schemas/579746_1_1.err | 0 result/schemas/579746_1_2 | 1 + result/schemas/579746_1_2.err | 0 result/schemas/579746_1_3 | 1 + result/schemas/579746_1_3.err | 1 + result/schemas/579746_1_4 | 1 + result/schemas/579746_1_4.err | 0 result/schemas/579746_1_5 | 1 + result/schemas/579746_1_5.err | 1 + result/schemas/582887_0_0 | 1 + result/schemas/582887_0_0.err | 0 result/schemas/582906-1_0_0 | 1 + result/schemas/582906-1_0_0.err | 0 result/schemas/582906-2_0_0 | 0 result/schemas/582906-2_0_0.err | 1 + result/schemas/all1_0_0 | 1 + result/schemas/all1_0_0.err | 0 result/schemas/all_0_0 | 1 + result/schemas/all_0_0.err | 0 result/schemas/all_0_1 | 1 + result/schemas/all_0_1.err | 0 result/schemas/all_0_2 | 1 + result/schemas/all_0_2.err | 0 result/schemas/all_0_3 | 1 + result/schemas/all_0_3.err | 1 + result/schemas/all_0_4 | 1 + result/schemas/all_0_4.err | 1 + result/schemas/all_0_5 | 1 + result/schemas/all_0_5.err | 1 + result/schemas/all_0_6 | 1 + result/schemas/all_0_6.err | 1 + result/schemas/all_0_7 | 1 + result/schemas/all_0_7.err | 1 + result/schemas/all_1_0 | 1 + result/schemas/all_1_0.err | 0 result/schemas/all_1_1 | 1 + result/schemas/all_1_1.err | 0 result/schemas/all_1_2 | 1 + result/schemas/all_1_2.err | 0 result/schemas/all_1_3 | 1 + result/schemas/all_1_3.err | 1 + result/schemas/all_1_4 | 1 + result/schemas/all_1_4.err | 0 result/schemas/all_1_5 | 1 + result/schemas/all_1_5.err | 1 + result/schemas/all_1_6 | 1 + result/schemas/all_1_6.err | 1 + result/schemas/all_1_7 | 1 + result/schemas/all_1_7.err | 1 + result/schemas/all_2_0 | 1 + result/schemas/all_2_0.err | 1 + result/schemas/all_2_1 | 1 + result/schemas/all_2_1.err | 1 + result/schemas/all_2_2 | 1 + result/schemas/all_2_2.err | 1 + result/schemas/all_2_3 | 1 + result/schemas/all_2_3.err | 0 result/schemas/all_2_4 | 1 + result/schemas/all_2_4.err | 1 + result/schemas/all_2_5 | 1 + result/schemas/all_2_5.err | 1 + result/schemas/all_2_6 | 1 + result/schemas/all_2_6.err | 0 result/schemas/all_2_7 | 1 + result/schemas/all_2_7.err | 0 result/schemas/allsg_0_0 | 1 + result/schemas/allsg_0_0.err | 0 result/schemas/allsg_0_1 | 1 + result/schemas/allsg_0_1.err | 0 result/schemas/allsg_0_2 | 1 + result/schemas/allsg_0_2.err | 0 result/schemas/allsg_0_3 | 1 + result/schemas/allsg_0_3.err | 1 + result/schemas/allsg_0_4 | 1 + result/schemas/allsg_0_4.err | 1 + result/schemas/allsg_0_5 | 1 + result/schemas/allsg_0_5.err | 1 + result/schemas/annot-err_0_0 | 0 result/schemas/annot-err_0_0.err | 7 + result/schemas/any1_0_0 | 1 + result/schemas/any1_0_0.err | 0 result/schemas/any2_0_0 | 1 + result/schemas/any2_0_0.err | 0 result/schemas/any3_0_0 | 1 + result/schemas/any3_0_0.err | 1 + result/schemas/any4_0_0 | 1 + result/schemas/any4_0_0.err | 0 result/schemas/any5_0_0 | 1 + result/schemas/any5_0_0.err | 1 + result/schemas/any5_0_1 | 1 + result/schemas/any5_0_1.err | 1 + result/schemas/any5_0_2 | 1 + result/schemas/any5_0_2.err | 1 + result/schemas/any5_0_3 | 1 + result/schemas/any5_0_3.err | 0 result/schemas/any5_0_4 | 1 + result/schemas/any5_0_4.err | 1 + result/schemas/any5_0_5 | 1 + result/schemas/any5_0_5.err | 1 + result/schemas/any5_0_6 | 1 + result/schemas/any5_0_6.err | 1 + result/schemas/any5_1_0 | 1 + result/schemas/any5_1_0.err | 1 + result/schemas/any5_1_1 | 1 + result/schemas/any5_1_1.err | 1 + result/schemas/any5_1_2 | 1 + result/schemas/any5_1_2.err | 0 result/schemas/any5_1_3 | 1 + result/schemas/any5_1_3.err | 1 + result/schemas/any5_1_4 | 1 + result/schemas/any5_1_4.err | 1 + result/schemas/any5_1_5 | 1 + result/schemas/any5_1_5.err | 0 result/schemas/any5_1_6 | 1 + result/schemas/any5_1_6.err | 1 + result/schemas/any6_1_0 | 1 + result/schemas/any6_1_0.err | 0 result/schemas/any6_2_0 | 1 + result/schemas/any6_2_0.err | 0 result/schemas/any7_1_0 | 1 + result/schemas/any7_1_0.err | 1 + result/schemas/any7_1_1 | 1 + result/schemas/any7_1_1.err | 1 + result/schemas/any7_1_2 | 1 + result/schemas/any7_1_2.err | 0 result/schemas/any7_2_0 | 1 + result/schemas/any7_2_0.err | 1 + result/schemas/any7_2_1 | 1 + result/schemas/any7_2_1.err | 1 + result/schemas/any7_2_2 | 1 + result/schemas/any7_2_2.err | 0 result/schemas/any8_1_0 | 1 + result/schemas/any8_1_0.err | 0 result/schemas/anyAttr-derive-errors1_0_0 | 1 + result/schemas/anyAttr-derive-errors1_0_0.err | 0 result/schemas/anyAttr-derive1_0_0 | 1 + result/schemas/anyAttr-derive1_0_0.err | 0 result/schemas/anyAttr-derive2_0_0 | 1 + result/schemas/anyAttr-derive2_0_0.err | 0 result/schemas/anyAttr-processContents-err1_0_0 | 1 + .../schemas/anyAttr-processContents-err1_0_0.err | 2 + result/schemas/anyAttr-processContents1_0_0 | 1 + result/schemas/anyAttr-processContents1_0_0.err | 0 result/schemas/anyAttr1_0_0 | 1 + result/schemas/anyAttr1_0_0.err | 0 result/schemas/attr0_0_0 | 1 + result/schemas/attr0_0_0.err | 0 result/schemas/attruse_0_0 | 1 + result/schemas/attruse_0_0.err | 0 result/schemas/attruse_0_1 | 1 + result/schemas/attruse_0_1.err | 1 + result/schemas/attruse_0_2 | 1 + result/schemas/attruse_0_2.err | 1 + result/schemas/bug141312_0_0 | 1 + result/schemas/bug141312_0_0.err | 0 result/schemas/bug141333_0_0 | 1 + result/schemas/bug141333_0_0.err | 0 result/schemas/bug143951_0_0 | 1 + result/schemas/bug143951_0_0.err | 0 result/schemas/bug145246_0_0 | 1 + result/schemas/bug145246_0_0.err | 0 result/schemas/bug152470_1_1 | 1 + result/schemas/bug152470_1_1.err | 0 result/schemas/bug167754_0_0 | 1 + result/schemas/bug167754_0_0.err | 0 result/schemas/bug303566_1_1 | 1 + result/schemas/bug303566_1_1.err | 1 + result/schemas/bug306806_1_0 | 1 + result/schemas/bug306806_1_0.err | 0 result/schemas/bug309338_1_0 | 1 + result/schemas/bug309338_1_0.err | 0 result/schemas/bug310264_0_0 | 1 + result/schemas/bug310264_0_0.err | 0 result/schemas/bug312957_1_0 | 1 + result/schemas/bug312957_1_0.err | 1 + result/schemas/bug313982_0_0 | 1 + result/schemas/bug313982_0_0.err | 0 result/schemas/bug321475_1_0 | 1 + result/schemas/bug321475_1_0.err | 0 result/schemas/bug322411_1_0 | 1 + result/schemas/bug322411_1_0.err | 0 result/schemas/bug323510_1_0 | 1 + result/schemas/bug323510_1_0.err | 1 + result/schemas/bug455953_0_0 | 1 + result/schemas/bug455953_0_0.err | 0 result/schemas/changelog093_1_0 | 1 + result/schemas/changelog093_1_0.err | 1 + result/schemas/choice_0_0 | 1 + result/schemas/choice_0_0.err | 0 result/schemas/choice_0_1 | 1 + result/schemas/choice_0_1.err | 0 result/schemas/choice_0_2 | 1 + result/schemas/choice_0_2.err | 1 + result/schemas/choice_0_3 | 1 + result/schemas/choice_0_3.err | 1 + result/schemas/choice_0_4 | 1 + result/schemas/choice_0_4.err | 1 + result/schemas/choice_0_5 | 1 + result/schemas/choice_0_5.err | 1 + result/schemas/choice_0_6 | 1 + result/schemas/choice_0_6.err | 1 + result/schemas/choice_1_0 | 1 + result/schemas/choice_1_0.err | 0 result/schemas/choice_1_1 | 1 + result/schemas/choice_1_1.err | 0 result/schemas/choice_1_2 | 1 + result/schemas/choice_1_2.err | 1 + result/schemas/choice_1_3 | 1 + result/schemas/choice_1_3.err | 1 + result/schemas/choice_1_4 | 1 + result/schemas/choice_1_4.err | 0 result/schemas/choice_1_5 | 1 + result/schemas/choice_1_5.err | 1 + result/schemas/choice_1_6 | 1 + result/schemas/choice_1_6.err | 1 + result/schemas/choice_2_0 | 1 + result/schemas/choice_2_0.err | 0 result/schemas/choice_2_1 | 1 + result/schemas/choice_2_1.err | 0 result/schemas/choice_2_2 | 1 + result/schemas/choice_2_2.err | 0 result/schemas/choice_2_3 | 1 + result/schemas/choice_2_3.err | 0 result/schemas/choice_2_4 | 1 + result/schemas/choice_2_4.err | 1 + result/schemas/choice_2_5 | 1 + result/schemas/choice_2_5.err | 0 result/schemas/choice_2_6 | 1 + result/schemas/choice_2_6.err | 1 + result/schemas/complex-type-extension_0_0 | 1 + result/schemas/complex-type-extension_0_0.err | 0 result/schemas/cos-ct-extends-1-3_0_0 | 1 + result/schemas/cos-ct-extends-1-3_0_0.err | 0 result/schemas/cos-st-restricts-1-2-err_0_0 | 1 + result/schemas/cos-st-restricts-1-2-err_0_0.err | 2 + result/schemas/ct-sc-nobase_0_0 | 1 + result/schemas/ct-sc-nobase_0_0.err | 0 result/schemas/date_0_0 | 1 + result/schemas/date_0_0.err | 0 result/schemas/decimal-1_1_0 | 1 + result/schemas/decimal-1_1_0.err | 8 + result/schemas/decimal-2_1_0 | 1 + result/schemas/decimal-2_1_0.err | 4 + result/schemas/decimal-3_1_0 | 1 + result/schemas/decimal-3_1_0.err | 8 + result/schemas/derivation-ok-extension-err_0_0 | 0 result/schemas/derivation-ok-extension-err_0_0.err | 1 + result/schemas/derivation-ok-extension_0_0 | 1 + result/schemas/derivation-ok-extension_0_0.err | 1 + result/schemas/derivation-ok-restriction-2-1-1_0_0 | 0 .../derivation-ok-restriction-2-1-1_0_0.err | 6 + .../schemas/derivation-ok-restriction-4-1-err_0_0 | 0 .../derivation-ok-restriction-4-1-err_0_0.err | 3 + result/schemas/derivation-restriction-anyAttr_0_0 | 1 + .../schemas/derivation-restriction-anyAttr_0_0.err | 0 result/schemas/deter0_0_0 | 0 result/schemas/deter0_0_0.err | 1 + result/schemas/dur_0_0 | 1 + result/schemas/dur_0_0.err | 0 result/schemas/elem0_0_0 | 1 + result/schemas/elem0_0_0.err | 0 result/schemas/element-err_0_0 | 0 result/schemas/element-err_0_0.err | 20 + result/schemas/element-minmax-err_0_0 | 0 result/schemas/element-minmax-err_0_0.err | 1 + result/schemas/empty-value_1_0 | 1 + result/schemas/empty-value_1_0.err | 0 result/schemas/empty-value_1_1 | 1 + result/schemas/empty-value_1_1.err | 0 result/schemas/empty_0_0 | 1 + result/schemas/empty_0_0.err | 0 result/schemas/empty_1_0 | 1 + result/schemas/empty_1_0.err | 0 result/schemas/extension0_0_0 | 1 + result/schemas/extension0_0_0.err | 0 result/schemas/extension1_0_0 | 1 + result/schemas/extension1_0_0.err | 0 result/schemas/extension1_0_1 | 1 + result/schemas/extension1_0_1.err | 1 + result/schemas/extension1_0_2 | 1 + result/schemas/extension1_0_2.err | 1 + result/schemas/extension2_1_0 | 1 + result/schemas/extension2_1_0.err | 0 result/schemas/facet-unionST-err1_0_0 | 1 + result/schemas/facet-unionST-err1_0_0.err | 1 + result/schemas/facet-whiteSpace_0_0 | 1 + result/schemas/facet-whiteSpace_0_0.err | 0 result/schemas/group0_0_0 | 1 + result/schemas/group0_0_0.err | 0 result/schemas/hexbinary_0_0 | 1 + result/schemas/hexbinary_0_0.err | 0 result/schemas/hexbinary_0_1 | 1 + result/schemas/hexbinary_0_1.err | 10 + result/schemas/idc-keyref-err1_1_0 | 1 + result/schemas/idc-keyref-err1_1_0.err | 1 + result/schemas/import0_0_0 | 1 + result/schemas/import0_0_0.err | 0 result/schemas/import1_0_0 | 0 result/schemas/import1_0_0.err | 4 + result/schemas/import2_0_0 | 1 + result/schemas/import2_0_0.err | 0 result/schemas/include1_0_0 | 1 + result/schemas/include1_0_0.err | 0 result/schemas/include2_0_0 | 1 + result/schemas/include2_0_0.err | 0 result/schemas/include3_0_0 | 0 result/schemas/include3_0_0.err | 1 + result/schemas/item_0_0 | 1 + result/schemas/item_0_0.err | 0 result/schemas/item_1_0 | 1 + result/schemas/item_1_0.err | 0 result/schemas/length1_0_0 | 1 + result/schemas/length1_0_0.err | 0 result/schemas/length2_0_0 | 1 + result/schemas/length2_0_0.err | 0 result/schemas/length3_0_0 | 0 result/schemas/length3_0_0.err | 1 + result/schemas/list0_0_0 | 1 + result/schemas/list0_0_0.err | 0 result/schemas/list0_0_1 | 1 + result/schemas/list0_0_1.err | 1 + result/schemas/list0_0_2 | 1 + result/schemas/list0_0_2.err | 0 result/schemas/list0_1_0 | 1 + result/schemas/list0_1_0.err | 1 + result/schemas/list0_1_1 | 1 + result/schemas/list0_1_1.err | 1 + result/schemas/list0_1_2 | 1 + result/schemas/list0_1_2.err | 0 result/schemas/mixed0_0_0 | 1 + result/schemas/mixed0_0_0.err | 0 result/schemas/mixed1_0_0 | 1 + result/schemas/mixed1_0_0.err | 0 result/schemas/ns0_0_0 | 1 + result/schemas/ns0_0_0.err | 0 result/schemas/ns0_0_1 | 1 + result/schemas/ns0_0_1.err | 0 result/schemas/ns0_0_2 | 1 + result/schemas/ns0_0_2.err | 1 + result/schemas/ns0_0_3 | 1 + result/schemas/ns0_0_3.err | 1 + result/schemas/ns0_0_4 | 1 + result/schemas/ns0_0_4.err | 1 + result/schemas/ns0_1_0 | 1 + result/schemas/ns0_1_0.err | 1 + result/schemas/ns0_1_1 | 1 + result/schemas/ns0_1_1.err | 1 + result/schemas/ns0_1_2 | 1 + result/schemas/ns0_1_2.err | 1 + result/schemas/ns0_1_3 | 1 + result/schemas/ns0_1_3.err | 0 result/schemas/ns0_1_4 | 1 + result/schemas/ns0_1_4.err | 0 result/schemas/ns1_0_0 | 1 + result/schemas/ns1_0_0.err | 0 result/schemas/ns2_0_0 | 1 + result/schemas/ns2_0_0.err | 0 result/schemas/nvdcve_0_0 | 1 + result/schemas/nvdcve_0_0.err | 0 result/schemas/po0_0_0 | 1 + result/schemas/po0_0_0.err | 0 result/schemas/po1_0_0 | 1 + result/schemas/po1_0_0.err | 0 result/schemas/poschargrp0_0_0 | 1 + result/schemas/poschargrp0_0_0.err | 0 result/schemas/regexp-char-ref_0_0 | 1 + result/schemas/regexp-char-ref_0_0.err | 0 result/schemas/regexp-char-ref_1_0 | 1 + result/schemas/regexp-char-ref_1_0.err | 0 result/schemas/restrict-CT-attr-ref_0_0 | 1 + result/schemas/restrict-CT-attr-ref_0_0.err | 0 result/schemas/restriction-attr1_0_0 | 0 result/schemas/restriction-attr1_0_0.err | 1 + result/schemas/restriction-enum-1_1_0 | 1 + result/schemas/restriction-enum-1_1_0.err | 2 + result/schemas/restriction0_0_0 | 1 + result/schemas/restriction0_0_0.err | 0 result/schemas/scc-no-xmlns_0_0 | 0 result/schemas/scc-no-xmlns_0_0.err | 1 + result/schemas/scc-no-xsi_0_0 | 0 result/schemas/scc-no-xsi_0_0.err | 1 + result/schemas/seq-dubl-elem1_0_0 | 1 + result/schemas/seq-dubl-elem1_0_0.err | 0 result/schemas/seq0_0_0 | 1 + result/schemas/seq0_0_0.err | 0 result/schemas/src-attribute1_0_0 | 0 result/schemas/src-attribute1_0_0.err | 1 + result/schemas/src-attribute2_0_0 | 0 result/schemas/src-attribute2_0_0.err | 1 + result/schemas/src-attribute3-1_0_0 | 0 result/schemas/src-attribute3-1_0_0.err | 1 + result/schemas/src-attribute3-2-form_0_0 | 0 result/schemas/src-attribute3-2-form_0_0.err | 1 + result/schemas/src-attribute3-2-st_0_0 | 0 result/schemas/src-attribute3-2-st_0_0.err | 1 + result/schemas/src-attribute3-2-type_0_0 | 0 result/schemas/src-attribute3-2-type_0_0.err | 1 + result/schemas/src-attribute4_0_0 | 0 result/schemas/src-attribute4_0_0.err | 1 + result/schemas/src-element1_0_0 | 0 result/schemas/src-element1_0_0.err | 1 + result/schemas/src-element2-1_0_0 | 0 result/schemas/src-element2-1_0_0.err | 1 + result/schemas/src-element2-2_0_0 | 0 result/schemas/src-element2-2_0_0.err | 9 + result/schemas/src-element3_0_0 | 0 result/schemas/src-element3_0_0.err | 2 + result/schemas/subst-group-1_0_1 | 1 + result/schemas/subst-group-1_0_1.err | 0 result/schemas/union2_1_1 | 1 + result/schemas/union2_1_1.err | 3 + result/schemas/union_0_0 | 1 + result/schemas/union_0_0.err | 0 result/schemas/vdv-first0_0_0 | 1 + result/schemas/vdv-first0_0_0.err | 0 result/schemas/vdv-first1_0_0 | 1 + result/schemas/vdv-first1_0_0.err | 0 result/schemas/vdv-first2_0_0 | 1 + result/schemas/vdv-first2_0_0.err | 0 result/schemas/vdv-first3_0_0 | 1 + result/schemas/vdv-first3_0_0.err | 0 result/schemas/vdv-first4_0_0 | 1 + result/schemas/vdv-first4_0_0.err | 0 result/schemas/vdv-first4_0_1 | 1 + result/schemas/vdv-first4_0_1.err | 1 + result/schemas/vdv-first4_0_2 | 1 + result/schemas/vdv-first4_0_2.err | 2 + result/schemas/vdv-first5_0_0 | 1 + result/schemas/vdv-first5_0_0.err | 0 result/schemas/xsd-list-itemType_0_0 | 1 + result/schemas/xsd-list-itemType_0_0.err | 0 result/schemas/xsd-simpleType-varieties_0_0 | 1 + result/schemas/xsd-simpleType-varieties_0_0.err | 0 result/schematron/zvon10_0 | 4 + result/schematron/zvon10_0.err | 5 + result/schematron/zvon10_1 | 5 + result/schematron/zvon10_1.err | 6 + result/schematron/zvon11_0 | 4 + result/schematron/zvon11_0.err | 2 + result/schematron/zvon11_1 | 4 + result/schematron/zvon11_1.err | 3 + result/schematron/zvon11_2 | 4 + result/schematron/zvon11_2.err | 3 + result/schematron/zvon11_3 | 4 + result/schematron/zvon11_3.err | 2 + result/schematron/zvon12_0 | 4 + result/schematron/zvon12_0.err | 3 + result/schematron/zvon12_1 | 4 + result/schematron/zvon12_1.err | 2 + result/schematron/zvon12_2 | 4 + result/schematron/zvon12_2.err | 3 + result/schematron/zvon13_0 | 7 + result/schematron/zvon13_0.err | 3 + result/schematron/zvon13_1 | 6 + result/schematron/zvon13_1.err | 3 + result/schematron/zvon13_2 | 6 + result/schematron/zvon13_2.err | 2 + result/schematron/zvon14_0 | 13 + result/schematron/zvon14_0.err | 4 + result/schematron/zvon15_0 | 5 + result/schematron/zvon15_0.err | 4 + result/schematron/zvon1_0 | 4 + result/schematron/zvon1_0.err | 8 + result/schematron/zvon1_1 | 4 + result/schematron/zvon1_1.err | 8 + result/schematron/zvon2_0 | 5 + result/schematron/zvon2_0.err | 2 + result/schematron/zvon2_1 | 5 + result/schematron/zvon2_1.err | 5 + result/schematron/zvon2_2 | 6 + result/schematron/zvon2_2.err | 3 + result/schematron/zvon3_0 | 9 + result/schematron/zvon3_0.err | 6 + result/schematron/zvon4_0 | 7 + result/schematron/zvon4_0.err | 3 + result/schematron/zvon4_1 | 7 + result/schematron/zvon4_1.err | 3 + result/schematron/zvon5_0 | 6 + result/schematron/zvon5_0.err | 7 + result/schematron/zvon5_1 | 6 + result/schematron/zvon5_1.err | 5 + result/schematron/zvon5_2 | 8 + result/schematron/zvon5_2.err | 5 + result/schematron/zvon6_0 | 4 + result/schematron/zvon6_0.err | 3 + result/schematron/zvon6_1 | 4 + result/schematron/zvon6_1.err | 3 + result/schematron/zvon6_2 | 4 + result/schematron/zvon6_2.err | 3 + result/schematron/zvon7_0 | 4 + result/schematron/zvon7_0.err | 3 + result/schematron/zvon7_1 | 4 + result/schematron/zvon7_1.err | 3 + result/schematron/zvon7_2 | 4 + result/schematron/zvon7_2.err | 3 + result/schematron/zvon7_3 | 4 + result/schematron/zvon7_3.err | 3 + result/schematron/zvon7_4 | 4 + result/schematron/zvon7_4.err | 3 + result/schematron/zvon8_0 | 9 + result/schematron/zvon8_0.err | 3 + result/schematron/zvon8_1 | 8 + result/schematron/zvon8_1.err | 3 + result/schematron/zvon8_2 | 8 + result/schematron/zvon8_2.err | 3 + result/schematron/zvon9_0 | 8 + result/schematron/zvon9_0.err | 2 + result/schematron/zvon9_1 | 8 + result/schematron/zvon9_1.err | 3 + result/schematron/zvon9_2 | 8 + result/schematron/zvon9_2.err | 3 + result/scripts/base | 4 + result/scripts/base.err | 0 result/scripts/base2 | 4 + result/scripts/base2.err | 0 result/scripts/set1 | 3 + result/scripts/set1.err | 0 result/scripts/set3 | 12 + result/scripts/set3.err | 3 + result/scripts/set4 | 6 + result/scripts/set4.err | 0 result/slashdot.rdf | 65 + result/slashdot.rdf.rde | 218 + result/slashdot.rdf.rdr | 218 + result/slashdot.rdf.sax | 221 + result/slashdot.rdf.sax2 | 221 + result/slashdot.xml | 113 + result/slashdot.xml.rde | 514 + result/slashdot.xml.rdr | 514 + result/slashdot.xml.sax | 517 + result/slashdot.xml.sax2 | 517 + result/slashdot16.xml | Bin 0 -> 10374 bytes result/slashdot16.xml.rde | 718 + result/slashdot16.xml.rdr | 718 + result/slashdot16.xml.sax | 721 + result/slashdot16.xml.sax2 | 721 + result/svg1 | 161 + result/svg1.rde | 477 + result/svg1.rdr | 477 + result/svg1.sax | 613 + result/svg1.sax2 | 613 + result/svg2 | 56 + result/svg2.rde | 178 + result/svg2.rdr | 178 + result/svg2.sax | 189 + result/svg2.sax2 | 189 + result/svg3 | 723 + result/svg3.rde | 2164 + result/svg3.rdr | 2164 + result/svg3.sax | 2407 + result/svg3.sax2 | 2407 + result/title.xml | 2 + result/title.xml.rde | 3 + result/title.xml.rdr | 3 + result/title.xml.sax | 6 + result/title.xml.sax2 | 6 + result/tstblanks.xml | 2 + result/tstblanks.xml.rde | 3 + result/tstblanks.xml.rdr | 3 + result/tstblanks.xml.sax | 6 + result/tstblanks.xml.sax2 | 6 + result/utf16bebom.xml | Bin 0 -> 344 bytes result/utf16bebom.xml.rde | 4 + result/utf16bebom.xml.rdr | 4 + result/utf16bebom.xml.sax | 8 + result/utf16bebom.xml.sax2 | 8 + result/utf16bom.xml | Bin 0 -> 258 bytes result/utf16bom.xml.rde | 3 + result/utf16bom.xml.rdr | 3 + result/utf16bom.xml.sax | 7 + result/utf16bom.xml.sax2 | 7 + result/utf16lebom.xml | Bin 0 -> 344 bytes result/utf16lebom.xml.rde | 4 + result/utf16lebom.xml.rdr | 4 + result/utf16lebom.xml.sax | 8 + result/utf16lebom.xml.sax2 | 8 + result/utf8bom.xml | 2 + result/utf8bom.xml.rde | 1 + result/utf8bom.xml.rdr | 1 + result/utf8bom.xml.sax | 5 + result/utf8bom.xml.sax2 | 5 + result/valid/127772.xml | 5 + result/valid/127772.xml.err | 0 result/valid/127772.xml.err.rdr | 0 result/valid/694228.xml | 5 + result/valid/694228.xml.err | 0 result/valid/694228.xml.err.rdr | 0 result/valid/737840.xml | 10 + result/valid/737840.xml.err | 0 result/valid/737840.xml.err.rdr | 0 result/valid/REC-xml-19980210.xml | 4154 ++ result/valid/REC-xml-19980210.xml.err | 0 result/valid/REC-xml-19980210.xml.err.rdr | 0 result/valid/UTF16Entity.xml | 8 + result/valid/UTF16Entity.xml.err | 0 result/valid/UTF16Entity.xml.err.rdr | 0 result/valid/dia.xml | 139 + result/valid/dia.xml.err | 0 result/valid/dia.xml.err.rdr | 0 result/valid/id1.xml | 13 + result/valid/id1.xml.err | 0 result/valid/id1.xml.err.rdr | 0 result/valid/id2.xml | 14 + result/valid/id2.xml.err | 0 result/valid/id2.xml.err.rdr | 0 result/valid/id3.xml | 14 + result/valid/id3.xml.err | 0 result/valid/id3.xml.err.rdr | 0 result/valid/index.xml | 808 + result/valid/index.xml.err | 0 result/valid/index.xml.err.rdr | 0 result/valid/mixed_ns.xml | 16 + result/valid/mixed_ns.xml.err | 0 result/valid/mixed_ns.xml.err.rdr | 0 result/valid/notes.xml | 3 + result/valid/notes.xml.err | 0 result/valid/notes.xml.err.rdr | 0 result/valid/ns.xml | 7 + result/valid/ns.xml.err | 0 result/valid/ns.xml.err.rdr | 0 result/valid/ns2.xml | 11 + result/valid/ns2.xml.err | 0 result/valid/ns2.xml.err.rdr | 0 result/valid/objednavka.xml | 39 + result/valid/objednavka.xml.err | 0 result/valid/objednavka.xml.err.rdr | 0 result/valid/rss.xml | 169 + result/valid/rss.xml.err | 3 + result/valid/rss.xml.err.rdr | 3 + result/valid/t10.xml | 12 + result/valid/t10.xml.err | 0 result/valid/t10.xml.err.rdr | 0 result/valid/t11.xml | 3 + result/valid/t11.xml.err | 0 result/valid/t11.xml.err.rdr | 0 result/valid/t4.dtd | 0 result/valid/t4.dtd.err | 6 + result/valid/t4.dtd.err.rdr | 6 + result/valid/t4.xml | 3 + result/valid/t4.xml.err | 0 result/valid/t4.xml.err.rdr | 0 result/valid/t4a.dtd | 0 result/valid/t4a.dtd.err | 6 + result/valid/t4a.dtd.err.rdr | 6 + result/valid/t4a.xml | 3 + result/valid/t4a.xml.err | 0 result/valid/t4a.xml.err.rdr | 0 result/valid/t6.dtd | 0 result/valid/t6.dtd.err | 6 + result/valid/t6.dtd.err.rdr | 6 + result/valid/t6.xml | 3 + result/valid/t6.xml.err | 0 result/valid/t6.xml.err.rdr | 0 result/valid/t8.xml | 0 result/valid/t8.xml.err | 19 + result/valid/t8.xml.err.rdr | 14 + result/valid/t8a.xml | 0 result/valid/t8a.xml.err | 19 + result/valid/t8a.xml.err.rdr | 14 + result/valid/t9.xml | 10 + result/valid/t9.xml.err | 0 result/valid/t9.xml.err.rdr | 0 result/valid/t9a.xml | 10 + result/valid/t9a.xml.err | 0 result/valid/t9a.xml.err.rdr | 0 result/valid/xhtml1.xhtml | 1453 + result/valid/xhtml1.xhtml.err | 0 result/valid/xhtml1.xhtml.err.rdr | 0 result/valid/xlink.xml | 525 + result/valid/xlink.xml.err | 4 + result/valid/xlink.xml.err.rdr | 4 + result/wap.xml | 24 + result/wap.xml.rde | 70 + result/wap.xml.rdr | 70 + result/wap.xml.sax | 86 + result/wap.xml.sax2 | 87 + result/winblanks.xml | 6 + result/winblanks.xml.rde | 13 + result/winblanks.xml.rdr | 13 + result/winblanks.xml.sax | 18 + result/winblanks.xml.sax2 | 18 + result/wml.xml | 10 + result/wml.xml.rde | 24 + result/wml.xml.rdr | 24 + result/wml.xml.sax | 31 + result/wml.xml.sax2 | 31 + result/xhtml1 | 30 + result/xhtml1.rde | 95 + result/xhtml1.rdr | 95 + result/xhtml1.sax | 103 + result/xhtml1.sax2 | 104 + result/xhtmlcomp | 7 + result/xhtmlcomp.rde | 19 + result/xhtmlcomp.rdr | 19 + result/xhtmlcomp.sax | 23 + result/xhtmlcomp.sax2 | 23 + result/xml1 | 7 + result/xml1.rde | 8 + result/xml1.rdr | 4 + result/xml1.sax | 23 + result/xml1.sax2 | 23 + result/xml2 | 8 + result/xml2.rde | 4 + result/xml2.rdr | 6 + result/xml2.sax | 18 + result/xml2.sax2 | 18 + result/xmlid/id_err1.xml | 2 + result/xmlid/id_err1.xml.err | 3 + result/xmlid/id_err2.xml | 6 + result/xmlid/id_err2.xml.err | 3 + result/xmlid/id_tst1.xml | 6 + result/xmlid/id_tst1.xml.err | 0 result/xmlid/id_tst2.xml | 6 + result/xmlid/id_tst2.xml.err | 3 + result/xmlid/id_tst3.xml | 6 + result/xmlid/id_tst3.xml.err | 6 + result/xmlid/id_tst4.xml | 6 + result/xmlid/id_tst4.xml.err | 3 + rngparser.c | 1595 + runsuite.c | 1172 + runtest.c | 4528 ++ runxmlconf.c | 607 + save.h | 35 + schematron.c | 1787 + test/HTML/53867.html | 69 + test/HTML/758605.html | 1 + test/HTML/758606.html | 1 + test/HTML/758606_2.html | 1 + test/HTML/Down.html | 12 + test/HTML/attrents.html | 5 + test/HTML/autoclose.html | 1 + test/HTML/autoclose2.html | 1 + test/HTML/autoclose3.html | 3 + test/HTML/cf_128.html | 20 + test/HTML/doc2.htm | 30 + test/HTML/doc3.htm | 851 + test/HTML/entities.html | 5 + test/HTML/entities2.html | 7 + test/HTML/fp40.htm | 166 + test/HTML/html5_enc.html | 8 + test/HTML/liclose.html | 13 + test/HTML/lt.html | 5 + test/HTML/noscript.html | 10 + test/HTML/pre.html | 5 + test/HTML/python.html | 10 + test/HTML/reg1.html | 10 + test/HTML/reg2.html | 12 + test/HTML/reg3.html | 13 + test/HTML/reg4.html | 12 + test/HTML/repeat.html | 1 + test/HTML/script.html | 9 + test/HTML/script2.html | 19 + test/HTML/test2.html | 33 + test/HTML/test3.html | 34 + test/HTML/utf8bug.html | 182 + test/HTML/wired.html | 516 + test/SVG/4rects.xml | 11 + test/SVG/a-valid.xml | 10 + test/SVG/a-wf.xml | 9 + test/SVG/bike.xml | 41 + test/SVG/circle.xml | 11 + test/SVG/defs.xml | 14 + test/SVG/desc.xml | 14 + test/SVG/ellipse.xml | 10 + test/SVG/flower2.xml | 44 + test/SVG/gradient.xml | 16 + test/SVG/group01.xml | 15 + test/SVG/group02.xml | 13 + test/SVG/group03.xml | 13 + test/SVG/image-valid.xml | 11 + test/SVG/image-wf.xml | 11 + test/SVG/lin-gradient.xml | 16 + test/SVG/marker.xml | 28 + test/SVG/mask.xml | 13 + test/SVG/mathswitch.xml | 32 + test/SVG/parentns.xml | 12 + test/SVG/path01.xml | 5 + test/SVG/path02.xml | 10 + test/SVG/patternfill.xml | 12 + test/SVG/polyline.xml | 9 + test/SVG/private.xml | 19 + test/SVG/rad-gradient.xml | 17 + test/SVG/rectangle.xml | 10 + test/SVG/richdesc.xml | 12 + test/SVG/script.xml | 13 + test/SVG/structure01.xml | 10 + test/SVG/style.xml | 11 + test/SVG/switch.xml | 21 + test/SVG/symbol-use.xml | 28 + test/SVG/template.xml | 9 + test/SVG/text01.xml | 12 + test/SVG/text02.xml | 17 + test/SVG/text03.xml | 8 + test/SVG/toap01.xml | 10 + test/SVG/toap02.xml | 33 + test/SVG/transform.xml | 26 + test/SVG/trivial.xml | 6 + test/SVG/twin-gradients.xml | 19 + test/SVG/v-template.xml | 9 + test/SVG/viewport-nest.xml | 13 + test/SVG/viewport-transform.xml | 46 + test/SVG/viewport.xml | 11 + test/SVG/wf-template.xml | 7 + test/URI/smith.uri | 15 + test/URI/uri.data | 18 + test/VC/AttributeDefaultLegal | 12 + test/VC/AttributeNmtokens | 6 + test/VC/DuplicateType | 5 + test/VC/ElementValid | 3 + test/VC/ElementValid2 | 4 + test/VC/ElementValid3 | 4 + test/VC/ElementValid4 | 7 + test/VC/ElementValid5 | 7 + test/VC/ElementValid6 | 7 + test/VC/ElementValid7 | 7 + test/VC/ElementValid8 | 7 + test/VC/Enumeration | 5 + test/VC/NS1 | 13 + test/VC/NS2 | 13 + test/VC/NS3 | 9 + test/VC/OneID | 6 + test/VC/OneID2 | 6 + test/VC/OneID3 | 4 + test/VC/PENesting | 2 + test/VC/PENesting2 | 3 + test/VC/UniqueElementTypeDeclaration | 7 + test/VC/UniqueElementTypeDeclaration2 | 8 + test/VC/dtds/a.dtd | 2 + test/VC/dtds/doc.dtd | 2 + test/VCM/21.xml | 8 + test/VCM/AttributeNmtokens.xml | 14 + test/VCM/v1.xml | 4 + test/VCM/v10.xml | 5 + test/VCM/v11.xml | 5 + test/VCM/v12.xml | 9 + test/VCM/v13.xml | 7 + test/VCM/v14.xml | 9 + test/VCM/v15.xml | 9 + test/VCM/v16.xml | 8 + test/VCM/v17.xml | 7 + test/VCM/v18.xml | 7 + test/VCM/v19.xml | 7 + test/VCM/v2.xml | 4 + test/VCM/v20.xml | 10 + test/VCM/v21.xml | 7 + test/VCM/v22.xml | 15 + test/VCM/v23.xml | 10 + test/VCM/v24.xml | 16 + test/VCM/v3.xml | 8 + test/VCM/v4.xml | 5 + test/VCM/v5.xml | 7 + test/VCM/v6.xml | 9 + test/VCM/v7.xml | 8 + test/VCM/v8.xml | 5 + test/VCM/v9.xml | 5 + test/WFC/ElemTypeMatch | 2 + test/WFC/EntityDeclared | 2 + test/WFC/EntityDeclared2 | 5 + test/WFC/EntityDeclared3 | 3 + test/WFC/EntityDeclared4 | 6 + test/WFC/EntityDeclared5 | 6 + test/WFC/LegalCharacter | 2 + test/WFC/NoExternalEntityRef | 5 + test/WFC/NoLtInAttValue | 5 + test/WFC/NoRecursion | 7 + test/WFC/PEintsubset | 6 + test/WFC/UniqueAttSpec | 2 + test/WFC/UniqueAttSpec2 | 2 + test/XInclude/docs/docids.xml | 15 + test/XInclude/docs/fallback.xml | 6 + test/XInclude/docs/fallback2.xml | 10 + test/XInclude/docs/include.xml | 4 + test/XInclude/docs/nodes.xml | 4 + test/XInclude/docs/nodes2.xml | 4 + test/XInclude/docs/nodes3.xml | 4 + test/XInclude/docs/recursive.xml | 3 + test/XInclude/docs/tstencoding.xml | 5 + test/XInclude/docs/txtinclude.xml | 4 + test/XInclude/ents/ids.xml | 10 + test/XInclude/ents/inc.txt | 1 + test/XInclude/ents/isolatin.txt | 1 + test/XInclude/ents/something.txt | 1 + test/XInclude/ents/something.xml | 5 + test/XInclude/ents/sub-inc.ent | 2 + test/XPath/docs/chapters | 28 + test/XPath/docs/id | 28 + test/XPath/docs/lang | 13 + test/XPath/docs/mixed | 10 + test/XPath/docs/nodes | 2 + test/XPath/docs/ns | 3 + test/XPath/docs/simple | 12 + test/XPath/docs/str | 9 + test/XPath/docs/usr1 | 12 + test/XPath/docs/vid | 43 + test/XPath/expr/base | 7 + test/XPath/expr/compare | 46 + test/XPath/expr/equality | 26 + test/XPath/expr/floats | 61 + test/XPath/expr/functions | 25 + test/XPath/expr/strings | 34 + test/XPath/tests/chaptersbase | 10 + test/XPath/tests/chaptersprefol | 8 + test/XPath/tests/idsimple | 3 + test/XPath/tests/langsimple | 5 + test/XPath/tests/mixedpat | 7 + test/XPath/tests/nodespat | 5 + test/XPath/tests/nssimple | 3 + test/XPath/tests/simpleabbr | 10 + test/XPath/tests/simplebase | 15 + test/XPath/tests/usr1check | 1 + test/XPath/tests/vidbase | 5 + test/XPath/xptr/chapterschildseq | 8 + test/XPath/xptr/chaptersparts | 6 + test/XPath/xptr/chaptersrange | 4 + test/XPath/xptr/strpoint | 9 + test/XPath/xptr/strrange | 6 + test/XPath/xptr/strrange2 | 3 + test/XPath/xptr/strrange3 | 4 + test/XPath/xptr/vidbase | 2 + test/XPath/xptr/vidchildseq | 4 + test/XPath/xptr/vidparts | 3 + test/att1 | 2 + test/att10 | 22 + test/att11 | 13 + test/att2 | 1 + test/att3 | 1 + test/att4 | 9264 ++++ test/att5 | 73 + test/att6 | 6 + test/att7 | 10 + test/att8 | 1 + test/att9 | 5 + test/attrib.xml | 1 + test/automata/a | 14 + test/automata/aba | 26 + test/automata/abaa | 43 + test/automata/abba | 30 + test/automata/po | 19 + test/badcomment.xml | 18 + test/bigentname.xml | 5 + test/bigname.xml | 1 + test/bigname2.xml | 1 + test/c14n/1-1-without-comments/doc.dtd | 1 + test/c14n/1-1-without-comments/example-1.xml | 14 + test/c14n/1-1-without-comments/example-2.xml | 11 + test/c14n/1-1-without-comments/example-3.xml | 18 + test/c14n/1-1-without-comments/example-4.xml | 9 + test/c14n/1-1-without-comments/example-5.xml | 12 + test/c14n/1-1-without-comments/example-6.xml | 2 + test/c14n/1-1-without-comments/example-7.xml | 11 + test/c14n/1-1-without-comments/example-7.xpath | 10 + test/c14n/1-1-without-comments/example-8.xml | 11 + test/c14n/1-1-without-comments/example-8.xpath | 10 + test/c14n/1-1-without-comments/world.txt | 1 + .../xmlbase-c14n11spec-102.xml | 16 + .../xmlbase-c14n11spec-102.xpath | 9 + .../xmlbase-c14n11spec2-102.xml | 16 + .../xmlbase-c14n11spec2-102.xpath | 9 + .../xmlbase-c14n11spec3-102.xml | 14 + .../xmlbase-c14n11spec3-102.xpath | 9 + test/c14n/1-1-without-comments/xmlbase-prop-1.xml | 24 + .../c14n/1-1-without-comments/xmlbase-prop-1.xpath | 11 + test/c14n/1-1-without-comments/xmlbase-prop-2.xml | 23 + .../c14n/1-1-without-comments/xmlbase-prop-2.xpath | 10 + test/c14n/1-1-without-comments/xmlbase-prop-3.xml | 24 + .../c14n/1-1-without-comments/xmlbase-prop-3.xpath | 11 + test/c14n/1-1-without-comments/xmlbase-prop-4.xml | 24 + .../c14n/1-1-without-comments/xmlbase-prop-4.xpath | 11 + test/c14n/1-1-without-comments/xmlbase-prop-5.xml | 24 + .../c14n/1-1-without-comments/xmlbase-prop-5.xpath | 11 + test/c14n/1-1-without-comments/xmlbase-prop-6.xml | 23 + .../c14n/1-1-without-comments/xmlbase-prop-6.xpath | 10 + test/c14n/1-1-without-comments/xmlbase-prop-7.xml | 23 + .../c14n/1-1-without-comments/xmlbase-prop-7.xpath | 10 + test/c14n/1-1-without-comments/xmlid-prop-1.xml | 20 + test/c14n/1-1-without-comments/xmlid-prop-1.xpath | 10 + test/c14n/1-1-without-comments/xmlid-prop-2.xml | 20 + test/c14n/1-1-without-comments/xmlid-prop-2.xpath | 10 + test/c14n/1-1-without-comments/xmllang-prop-1.xml | 20 + .../c14n/1-1-without-comments/xmllang-prop-1.xpath | 10 + test/c14n/1-1-without-comments/xmllang-prop-2.xml | 20 + .../c14n/1-1-without-comments/xmllang-prop-2.xpath | 10 + test/c14n/1-1-without-comments/xmllang-prop-3.xml | 20 + .../c14n/1-1-without-comments/xmllang-prop-3.xpath | 10 + test/c14n/1-1-without-comments/xmllang-prop-4.xml | 20 + .../c14n/1-1-without-comments/xmllang-prop-4.xpath | 10 + test/c14n/1-1-without-comments/xmlspace-prop-1.xml | 20 + .../1-1-without-comments/xmlspace-prop-1.xpath | 10 + test/c14n/1-1-without-comments/xmlspace-prop-2.xml | 20 + .../1-1-without-comments/xmlspace-prop-2.xpath | 10 + test/c14n/1-1-without-comments/xmlspace-prop-3.xml | 20 + .../1-1-without-comments/xmlspace-prop-3.xpath | 10 + test/c14n/1-1-without-comments/xmlspace-prop-4.xml | 20 + .../1-1-without-comments/xmlspace-prop-4.xpath | 10 + .../exc-without-comments/merlin-c14n-two-09.xml | 12 + .../exc-without-comments/merlin-c14n-two-09.xpath | 8 + .../exc-without-comments/merlin-c14n-two-10.xml | 12 + .../exc-without-comments/merlin-c14n-two-10.xpath | 12 + .../exc-without-comments/merlin-c14n-two-11.xml | 12 + .../exc-without-comments/merlin-c14n-two-11.xpath | 11 + .../exc-without-comments/merlin-c14n-two-12.xml | 12 + .../exc-without-comments/merlin-c14n-two-12.xpath | 12 + .../exc-without-comments/merlin-c14n-two-13.xml | 12 + .../exc-without-comments/merlin-c14n-two-13.xpath | 10 + .../exc-without-comments/merlin-c14n-two-14.xml | 12 + .../exc-without-comments/merlin-c14n-two-14.xpath | 10 + .../exc-without-comments/merlin-c14n-two-15.xml | 12 + .../exc-without-comments/merlin-c14n-two-15.xpath | 10 + .../exc-without-comments/merlin-c14n-two-16.xml | 12 + .../exc-without-comments/merlin-c14n-two-16.xpath | 9 + .../exc-without-comments/merlin-c14n-two-17.xml | 12 + .../exc-without-comments/merlin-c14n-two-17.xpath | 12 + .../exc-without-comments/merlin-c14n-two-18.ns | 1 + .../exc-without-comments/merlin-c14n-two-18.xml | 12 + .../exc-without-comments/merlin-c14n-two-18.xpath | 8 + .../exc-without-comments/merlin-c14n-two-19.ns | 1 + .../exc-without-comments/merlin-c14n-two-19.xml | 12 + .../exc-without-comments/merlin-c14n-two-19.xpath | 12 + .../exc-without-comments/merlin-c14n-two-20.ns | 1 + .../exc-without-comments/merlin-c14n-two-20.xml | 12 + .../exc-without-comments/merlin-c14n-two-20.xpath | 11 + .../exc-without-comments/merlin-c14n-two-21.ns | 1 + .../exc-without-comments/merlin-c14n-two-21.xml | 12 + .../exc-without-comments/merlin-c14n-two-21.xpath | 12 + .../exc-without-comments/merlin-c14n-two-22.ns | 1 + .../exc-without-comments/merlin-c14n-two-22.xml | 12 + .../exc-without-comments/merlin-c14n-two-22.xpath | 10 + .../exc-without-comments/merlin-c14n-two-23.ns | 1 + .../exc-without-comments/merlin-c14n-two-23.xml | 12 + .../exc-without-comments/merlin-c14n-two-23.xpath | 10 + .../exc-without-comments/merlin-c14n-two-24.ns | 1 + .../exc-without-comments/merlin-c14n-two-24.xml | 12 + .../exc-without-comments/merlin-c14n-two-24.xpath | 10 + .../exc-without-comments/merlin-c14n-two-25.ns | 1 + .../exc-without-comments/merlin-c14n-two-25.xml | 12 + .../exc-without-comments/merlin-c14n-two-25.xpath | 9 + .../exc-without-comments/merlin-c14n-two-26.ns | 1 + .../exc-without-comments/merlin-c14n-two-26.xml | 12 + .../exc-without-comments/merlin-c14n-two-26.xpath | 12 + test/c14n/exc-without-comments/test-0.xml | 18 + test/c14n/exc-without-comments/test-0.xpath | 3 + test/c14n/exc-without-comments/test-1.ns | 1 + test/c14n/exc-without-comments/test-1.xml | 18 + test/c14n/exc-without-comments/test-1.xpath | 3 + test/c14n/exc-without-comments/test-2.xml | 20 + test/c14n/exc-without-comments/test-2.xpath | 6 + test/c14n/with-comments/doc.dtd | 1 + test/c14n/with-comments/example-1.xml | 14 + test/c14n/with-comments/example-2.xml | 11 + test/c14n/with-comments/example-3.xml | 18 + test/c14n/with-comments/example-4.xml | 9 + test/c14n/with-comments/example-5.xml | 12 + test/c14n/with-comments/example-6.xml | 2 + test/c14n/with-comments/example-7.xml | 11 + test/c14n/with-comments/example-7.xpath | 10 + test/c14n/with-comments/world.txt | 1 + test/c14n/without-comments/doc.dtd | 1 + test/c14n/without-comments/example-1.xml | 14 + test/c14n/without-comments/example-2.xml | 11 + test/c14n/without-comments/example-3.xml | 18 + test/c14n/without-comments/example-4.xml | 9 + test/c14n/without-comments/example-5.xml | 12 + test/c14n/without-comments/example-6.xml | 2 + test/c14n/without-comments/example-7.xml | 11 + test/c14n/without-comments/example-7.xpath | 10 + test/c14n/without-comments/merlin-c14n-two-00.xml | 12 + .../c14n/without-comments/merlin-c14n-two-00.xpath | 8 + test/c14n/without-comments/merlin-c14n-two-01.xml | 12 + .../c14n/without-comments/merlin-c14n-two-01.xpath | 12 + test/c14n/without-comments/merlin-c14n-two-02.xml | 12 + .../c14n/without-comments/merlin-c14n-two-02.xpath | 11 + test/c14n/without-comments/merlin-c14n-two-03.xml | 12 + .../c14n/without-comments/merlin-c14n-two-03.xpath | 12 + test/c14n/without-comments/merlin-c14n-two-04.xml | 12 + .../c14n/without-comments/merlin-c14n-two-04.xpath | 10 + test/c14n/without-comments/merlin-c14n-two-05.xml | 12 + .../c14n/without-comments/merlin-c14n-two-05.xpath | 10 + test/c14n/without-comments/merlin-c14n-two-06.xml | 12 + .../c14n/without-comments/merlin-c14n-two-06.xpath | 10 + test/c14n/without-comments/merlin-c14n-two-07.xml | 12 + .../c14n/without-comments/merlin-c14n-two-07.xpath | 9 + test/c14n/without-comments/merlin-c14n-two-08.xml | 12 + .../c14n/without-comments/merlin-c14n-two-08.xpath | 12 + test/c14n/without-comments/test-0.xml | 9 + test/c14n/without-comments/test-0.xpath | 14 + test/c14n/without-comments/test-1.xml | 43 + test/c14n/without-comments/test-1.xpath | 14 + test/c14n/without-comments/test-2.xml | 8 + test/c14n/without-comments/test-2.xpath | 8 + test/c14n/without-comments/test-3.xml | 18 + test/c14n/without-comments/test-3.xpath | 3 + test/c14n/without-comments/world.txt | 1 + test/catalogs/catal.script | 4 + test/catalogs/catal.sgml | 2 + test/catalogs/catal1.sgml | 1 + test/catalogs/catal2.sgml | 4 + test/catalogs/catal3.sgml | 8 + test/catalogs/docbook.script | 5 + test/catalogs/docbook.xml | 14 + test/catalogs/registry.script | 4 + test/catalogs/registry.xml | 23 + test/catalogs/stylesheet.xml | 12 + test/catalogs/whites.script | 4 + test/catalogs/whites.sgml | 5 + test/catalogs/whitex.script | 7 + test/catalogs/whitex.xml | 15 + test/cdata | 3 + test/cdata-2-byte-UTF-8.xml | 6 + test/cdata-3-byte-UTF-8.xml | 7 + test/cdata-4-byte-UTF-8.xml | 8 + test/cdata2 | 6 + test/comment.xml | 6 + test/comment2.xml | 6 + test/comment3.xml | 164 + test/comment4.xml | 5 + test/comment5.xml | 9 + test/comment6.xml | 13 + test/dav1 | 25 + test/dav10 | 4 + test/dav11 | 21 + test/dav12 | 2 + test/dav13 | 16 + test/dav15 | 20 + test/dav16 | 6 + test/dav17 | 22 + test/dav18 | 6 + test/dav19 | 18 + test/dav2 | 24 + test/dav3 | 18 + test/dav4 | 16 + test/dav5 | 17 + test/dav6 | 22 + test/dav7 | 16 + test/dav8 | 14 + test/dav9 | 18 + test/defattr.xml | 6 + test/defattr2.xml | 8 + test/dia1 | 99 + test/dia2 | 99 + test/dtd1 | 5 + test/dtd10 | 8 + test/dtd11 | 5 + test/dtd12 | 5 + test/dtd13 | 6 + test/dtd2 | 4 + test/dtd3 | 5 + test/dtd4 | 4 + test/dtd5 | 6 + test/dtd6 | 6 + test/dtd7 | 6 + test/dtd8 | 8 + test/dtd9 | 8 + test/dtds/eve.dtd | 4 + test/ebcdic_566012.xml | 1 + test/emptycdata.xml | 4 + test/ent1 | 7 + test/ent10 | 21 + test/ent11 | 6 + test/ent12 | 8 + test/ent13 | 6 + test/ent2 | 11 + test/ent3 | 8 + test/ent4 | 8 + test/ent5 | 5 + test/ent6 | 8 + test/ent7 | 7 + test/ent8 | 9 + test/ent9 | 61 + test/ent_738805.xml | 16 + test/errors/754946.xml | 1 + test/errors/754947.xml | 1 + test/errors/758588.xml | 1 + test/errors/759020.xml | 46 + test/errors/759398.xml | 326 + test/errors/759573-2.xml | 9 + test/errors/759573.xml | 1 + test/errors/attr1.xml | 1 + test/errors/attr2.xml | 1 + test/errors/attr3.xml | 6 + test/errors/attr4.xml | 1 + test/errors/cdata.xml | 2 + test/errors/charref1.xml | 1 + test/errors/comment1.xml | 6 + test/errors/content1.xml | 10 + test/errors/dtd13 | 6 + test/errors/extparsedent.xml | 5 + test/errors/name.xml | 1 + test/errors/name2.xml | 1 + test/eve.xml | 6 + test/expr/base | 86 + test/intsubset.xml | 6 + test/intsubset2.xml | 282 + test/isolat1 | 2 + test/isolat2 | 107 + test/isolat3 | 10 + test/japancrlf.xml | 6 + test/namespaces/err_0.xml | 1 + test/namespaces/err_1.xml | 1 + test/namespaces/err_10.xml | 1 + test/namespaces/err_11.xml | 1 + test/namespaces/err_2.xml | 1 + test/namespaces/err_3.xml | 1 + test/namespaces/err_4.xml | 1 + test/namespaces/err_5.xml | 1 + test/namespaces/err_6.xml | 1 + test/namespaces/err_7.xml | 1 + test/namespaces/err_8.xml | 1 + test/namespaces/err_9.xml | 2 + test/namespaces/reconcile/tests-to-c.xsl | 275 + test/namespaces/reconcile/tests.xml | 249 + test/ns | 4 + test/ns2 | 3 + test/ns3 | 3 + test/ns4 | 2 + test/ns5 | 4 + test/ns6 | 4 + test/ns7 | 1 + test/nsclean.xml | 9 + test/p3p | 24 + test/pattern/conj.pat | 8 + test/pattern/conj.xml | 13 + test/pattern/multiple.pat | 27 + test/pattern/multiple.xml | 5 + test/pattern/namespaces.pat | 10 + test/pattern/namespaces.xml | 17 + test/pattern/simple.pat | 15 + test/pattern/simple.xml | 5 + test/pi.xml | 6 + test/pi2.xml | 6 + test/rdf1 | 81 + test/rdf2 | 1899 + test/recurse/good.xml | 343 + test/recurse/goodattr.xml | 343 + test/recurse/lol1.xml | 23 + test/recurse/lol2.xml | 23 + test/recurse/lol3.dtd | 20 + test/recurse/lol3.xml | 5 + test/recurse/lol4.patch | 16 + test/recurse/lol4.xml | 36 + test/recurse/lol5.xml | 51 + test/recurse/lol6.xml | 23 + test/regexp/branch | 14 + test/regexp/bug316338 | 20 + test/regexp/bug420596 | 10 + test/regexp/content | 12 + test/regexp/hard | 12 + test/regexp/ncname | 6 + test/regexp/ranges | 15 + test/regexp/ranges2 | 14 + test/regexp/xpath | 37 + test/relaxng/302836.rng | 35 + test/relaxng/302836_0.xml | 12 + test/relaxng/307377.rng | 14 + test/relaxng/307377_0.xml | 1 + test/relaxng/307377_1.xml | 1 + test/relaxng/307377_2.xml | 1 + test/relaxng/492317.rng | 16 + test/relaxng/492317_0.xml | 4 + test/relaxng/492317_1.xml | 4 + test/relaxng/492317_2.xml | 4 + test/relaxng/558452.rng | 21 + test/relaxng/558452_0.xml | 6 + test/relaxng/558452_1.xml | 3 + test/relaxng/558452_2.xml | 4 + test/relaxng/558452_3.xml | 5 + test/relaxng/558452_4.xml | 7 + test/relaxng/565219.rng | 14 + test/relaxng/565219_0.xml | 1 + test/relaxng/565219_1.xml | 1 + test/relaxng/565219_2.xml | 1 + test/relaxng/595792-ext.rng | 11 + test/relaxng/595792.rng | 8 + test/relaxng/595792_0.xml | 4 + test/relaxng/710744.rng | 16 + test/relaxng/710744_1.xml | 2 + test/relaxng/710744_2.xml | 3 + test/relaxng/OASIS/spectest.xml | 6845 +++ test/relaxng/OpenDocumentSub.rng | 229 + test/relaxng/OpenDocumentSub_0.xml | 7 + test/relaxng/addressBook.rng | 24 + test/relaxng/choice0.rng | 25 + test/relaxng/choice0_0.xml | 2 + test/relaxng/choice0_1.xml | 2 + test/relaxng/choice0_2.xml | 3 + test/relaxng/choice0_3.xml | 3 + test/relaxng/choice0_4.xml | 2 + test/relaxng/choice0_5.xml | 3 + test/relaxng/choice0_6.xml | 3 + test/relaxng/choice0_7.xml | 3 + test/relaxng/choice0_8.xml | 3 + test/relaxng/compare0.rng | 8 + test/relaxng/compare0_0.xml | 3 + test/relaxng/comps.rng | 177 + test/relaxng/comps_0.xml | 17870 +++++++ test/relaxng/demo.rng | 11 + test/relaxng/demo.xml | 1 + test/relaxng/demo2.rng | 23 + test/relaxng/demo3.rng | 8 + test/relaxng/docbook.rng | 9141 ++++ test/relaxng/docbook_0.xml | 4448 ++ test/relaxng/empty0.rng | 16 + test/relaxng/empty0_0.xml | 3 + test/relaxng/empty1.rng | 18 + test/relaxng/empty1_0.xml | 3 + test/relaxng/empty1_1.xml | 2 + test/relaxng/inline.rng | 20 + test/relaxng/inline2.rng | 21 + test/relaxng/inline3.rng | 22 + test/relaxng/interleave0_0.rng | 24 + test/relaxng/interleave1_0.rng | 15 + test/relaxng/libvirt.rng | 1258 + test/relaxng/libvirt_0.xml | 23 + test/relaxng/list.rng | 23 + test/relaxng/list_0.xml | 1 + test/relaxng/list_1.xml | 1 + test/relaxng/pattern1.rng | 8 + test/relaxng/pattern2.rng | 9 + test/relaxng/pattern3.rng | 11 + test/relaxng/pattern3_1.xml | 1 + test/relaxng/proofsystem.rng | 96 + test/relaxng/rngbug-001.ext | 13 + test/relaxng/rngbug-001.rng | 16 + test/relaxng/rngbug-001.xml | 6 + test/relaxng/spec.rng | 60 + test/relaxng/spec1.rng | 14 + test/relaxng/spec1_1.xml | 3 + test/relaxng/spec_0.xml | 3589 ++ test/relaxng/table.rng | 21 + test/relaxng/testsuite.xml | 1708 + test/relaxng/tutor10_1.rng | 4 + test/relaxng/tutor10_10.rng | 13 + test/relaxng/tutor10_10_1.xml | 5 + test/relaxng/tutor10_1_1.xml | 1 + test/relaxng/tutor10_1_2.xml | 1 + test/relaxng/tutor10_1_3.xml | 1 + test/relaxng/tutor10_1_4.xml | 1 + test/relaxng/tutor10_1_5.xml | 1 + test/relaxng/tutor10_1_6.xml | 1 + test/relaxng/tutor10_2.rng | 3 + test/relaxng/tutor10_2_1.xml | 1 + test/relaxng/tutor10_2_2.xml | 1 + test/relaxng/tutor10_2_3.xml | 1 + test/relaxng/tutor10_2_4.xml | 1 + test/relaxng/tutor10_3.rng | 12 + test/relaxng/tutor10_3_1.xml | 3 + test/relaxng/tutor10_4.rng | 12 + test/relaxng/tutor10_4_1.xml | 3 + test/relaxng/tutor10_5.rng | 13 + test/relaxng/tutor10_5_1.xml | 3 + test/relaxng/tutor10_6.rng | 13 + test/relaxng/tutor10_6_1.xml | 3 + test/relaxng/tutor10_7.rng | 9 + test/relaxng/tutor10_7_1.xml | 3 + test/relaxng/tutor10_7_2.xml | 3 + test/relaxng/tutor10_7_3.xml | 3 + test/relaxng/tutor10_8.rng | 9 + test/relaxng/tutor10_8_1.xml | 3 + test/relaxng/tutor10_8_2.xml | 3 + test/relaxng/tutor10_8_3.xml | 3 + test/relaxng/tutor10_9.rng | 14 + test/relaxng/tutor10_9_1.xml | 5 + test/relaxng/tutor11_1.rng | 22 + test/relaxng/tutor11_1_1.xml | 22 + test/relaxng/tutor11_1_2.xml | 7 + test/relaxng/tutor11_1_3.xml | 4197 ++ test/relaxng/tutor11_2.rng | 14 + test/relaxng/tutor11_2_1.xml | 5 + test/relaxng/tutor11_2_2.xml | 5 + test/relaxng/tutor11_2_3.xml | 5 + test/relaxng/tutor11_3.rng | 15 + test/relaxng/tutor11_3_1.xml | 1 + test/relaxng/tutor11_4.rng | 19 + test/relaxng/tutor11_4_1.xml | 1 + test/relaxng/tutor12_1.rng | 13 + test/relaxng/tutor12_1_1.xml | 3 + test/relaxng/tutor13_1.rng | 33 + test/relaxng/tutor13_1_1.xml | 12 + test/relaxng/tutor14_1.rng | 53 + test/relaxng/tutor1_1.rng | 12 + test/relaxng/tutor1_1_1.xml | 10 + test/relaxng/tutor1_2.rng | 12 + test/relaxng/tutor1_2_1.xml | 10 + test/relaxng/tutor1_3.rng | 17 + test/relaxng/tutor1_3_1.xml | 10 + test/relaxng/tutor1_4.rng | 12 + test/relaxng/tutor1_4_1.xml | 10 + test/relaxng/tutor2_1.rng | 27 + test/relaxng/tutor2_1_1.xml | 11 + test/relaxng/tutor3_1.rng | 12 + test/relaxng/tutor3_1_1.xml | 3 + test/relaxng/tutor3_1_2.xml | 3 + test/relaxng/tutor3_2.rng | 8 + test/relaxng/tutor3_2_1.xml | 1 + test/relaxng/tutor3_3.rng | 17 + test/relaxng/tutor3_3_1.xml | 4 + test/relaxng/tutor3_4.rng | 22 + test/relaxng/tutor3_4_1.xml | 4 + test/relaxng/tutor3_5.rng | 22 + test/relaxng/tutor3_5_1.xml | 7 + test/relaxng/tutor3_5_2.xml | 3 + test/relaxng/tutor3_6.rng | 8 + test/relaxng/tutor3_6_1.xml | 3 + test/relaxng/tutor3_7.rng | 2 + test/relaxng/tutor3_7_1.xml | 1 + test/relaxng/tutor3_8.rng | 17 + test/relaxng/tutor3_8_1.xml | 4 + test/relaxng/tutor3_9.rng | 5 + test/relaxng/tutor3_9_1.xml | 1 + test/relaxng/tutor4_1.rng | 22 + test/relaxng/tutor4_1_1.xml | 4 + test/relaxng/tutor4_2.rng | 34 + test/relaxng/tutor4_2_1.xml | 4 + test/relaxng/tutor4_3.rng | 27 + test/relaxng/tutor4_3_1.xml | 1 + test/relaxng/tutor4_3_2.xml | 1 + test/relaxng/tutor4_3_3.xml | 1 + test/relaxng/tutor4_3_4.xml | 1 + test/relaxng/tutor4_3_5.xml | 1 + test/relaxng/tutor4_3_6.xml | 1 + test/relaxng/tutor4_4.rng | 28 + test/relaxng/tutor4_4_1.xml | 1 + test/relaxng/tutor5_1.rng | 3 + test/relaxng/tutor5_1_1.xml | 1 + test/relaxng/tutor5_2.rng | 9 + test/relaxng/tutor5_2_1.xml | 1 + test/relaxng/tutor5_3.rng | 6 + test/relaxng/tutor5_3_1.xml | 1 + test/relaxng/tutor5_4.rng | 6 + test/relaxng/tutor5_4_1.xml | 1 + test/relaxng/tutor5_5.rng | 5 + test/relaxng/tutor6_1.rng | 10 + test/relaxng/tutor6_1_1.xml | 1 + test/relaxng/tutor6_1_2.xml | 1 + test/relaxng/tutor6_1_3.xml | 1 + test/relaxng/tutor6_1_4.xml | 1 + test/relaxng/tutor6_1_5.xml | 2 + test/relaxng/tutor6_2.rng | 14 + test/relaxng/tutor6_2_1.xml | 5 + test/relaxng/tutor6_2_2.xml | 5 + test/relaxng/tutor6_2_3.xml | 5 + test/relaxng/tutor6_2_4.xml | 5 + test/relaxng/tutor6_3.rng | 10 + test/relaxng/tutor6_3_1.xml | 1 + test/relaxng/tutor7_1.rng | 7 + test/relaxng/tutor7_1_1.xml | 1 + test/relaxng/tutor7_1_2.xml | 1 + test/relaxng/tutor7_1_3.xml | 1 + test/relaxng/tutor7_1_4.xml | 1 + test/relaxng/tutor7_2.rng | 8 + test/relaxng/tutor7_2_1.xml | 1 + test/relaxng/tutor7_2_2.xml | 1 + test/relaxng/tutor7_2_3.xml | 1 + test/relaxng/tutor7_2_4.xml | 1 + test/relaxng/tutor7_3.rng | 9 + test/relaxng/tutor7_3_1.xml | 1 + test/relaxng/tutor7_3_2.xml | 1 + test/relaxng/tutor7_3_3.xml | 1 + test/relaxng/tutor7_3_4.xml | 1 + test/relaxng/tutor7_3_5.xml | 1 + test/relaxng/tutor8_1.rng | 15 + test/relaxng/tutor8_1_1.xml | 6 + test/relaxng/tutor8_1_2.xml | 7 + test/relaxng/tutor8_2.rng | 57 + test/relaxng/tutor8_2_1.xml | 5 + test/relaxng/tutor8_2_2.xml | 36 + test/relaxng/tutor8_2_3.xml | 3 + test/relaxng/tutor8_2_4.xml | 6 + test/relaxng/tutor8_2_5.xml | 3 + test/relaxng/tutor8_2_6.xml | 5 + test/relaxng/tutor8_3.rng | 9 + test/relaxng/tutor8_3_1.xml | 1 + test/relaxng/tutor9_1.rng | 17 + test/relaxng/tutor9_10.rng | 26 + test/relaxng/tutor9_10_1.xml | 3 + test/relaxng/tutor9_11.rng | 16 + test/relaxng/tutor9_11_1.xml | 3 + test/relaxng/tutor9_12.rng | 22 + test/relaxng/tutor9_12_1.xml | 3 + test/relaxng/tutor9_1_1.xml | 7 + test/relaxng/tutor9_2.rng | 7 + test/relaxng/tutor9_2_1.xml | 4 + test/relaxng/tutor9_2_2.xml | 4 + test/relaxng/tutor9_3.rng | 37 + test/relaxng/tutor9_3_1.xml | 1 + test/relaxng/tutor9_3_2.xml | 1 + test/relaxng/tutor9_4.rng | 36 + test/relaxng/tutor9_4_1.xml | 1 + test/relaxng/tutor9_4_2.xml | 1 + test/relaxng/tutor9_5.rng | 25 + test/relaxng/tutor9_5_1.xml | 3 + test/relaxng/tutor9_5_2.xml | 3 + test/relaxng/tutor9_5_3.xml | 3 + test/relaxng/tutor9_6.rng | 24 + test/relaxng/tutor9_6_1.xml | 3 + test/relaxng/tutor9_6_2.xml | 3 + test/relaxng/tutor9_6_3.xml | 3 + test/relaxng/tutor9_7.rng | 26 + test/relaxng/tutor9_7_1.xml | 3 + test/relaxng/tutor9_8.rng | 42 + test/relaxng/tutor9_8_1.xml | 3 + test/relaxng/tutor9_9.rng | 37 + test/relaxng/tutor9_9_1.xml | 3 + test/relaxng/tutorA.rng | 334 + test/schemas/570702_0.xml | 13 + test/schemas/570702_0.xsd | 25 + test/schemas/579746_0.xml | 3 + test/schemas/579746_0.xsd | 11 + test/schemas/579746_1.xml | 4 + test/schemas/579746_1.xsd | 10 + test/schemas/579746_2.xml | 5 + test/schemas/579746_3.xml | 7 + test/schemas/579746_4.xml | 5 + test/schemas/579746_5.xml | 6 + test/schemas/582887-attribute.xsd | 12 + test/schemas/582887-common.xsd | 8 + test/schemas/582887-element.xsd | 11 + test/schemas/582887_0.xml | 7 + test/schemas/582887_0.xsd | 17 + test/schemas/582906-1-common.xsd | 6 + test/schemas/582906-1-prog1.xsd | 11 + test/schemas/582906-1-prog2-include.xsd | 9 + test/schemas/582906-1-prog2.xsd | 13 + test/schemas/582906-1_0.xml | 5 + test/schemas/582906-1_0.xsd | 20 + test/schemas/582906-2-common.xsd | 7 + test/schemas/582906-2-prog1.xsd | 11 + test/schemas/582906-2-prog2-include.xsd | 9 + test/schemas/582906-2-prog2.xsd | 13 + test/schemas/582906-2_0.xml | 5 + test/schemas/582906-2_0.xsd | 20 + test/schemas/all.xsd | 16 + test/schemas/all1_0.xml | 4 + test/schemas/all1_0.xsd | 10 + test/schemas/all_0.xml | 1 + test/schemas/all_0.xsd | 12 + test/schemas/all_1.xml | 2 + test/schemas/all_1.xsd | 12 + test/schemas/all_2.xml | 1 + test/schemas/all_2.xsd | 11 + test/schemas/all_3.xml | 1 + test/schemas/all_4.xml | 1 + test/schemas/all_5.xml | 1 + test/schemas/all_6.xml | 1 + test/schemas/all_7.xml | 1 + test/schemas/allsg_0.xml | 7 + test/schemas/allsg_0.xsd | 26 + test/schemas/allsg_1.xml | 8 + test/schemas/allsg_2.xml | 8 + test/schemas/allsg_3.xml | 7 + test/schemas/allsg_4.xml | 7 + test/schemas/allsg_5.xml | 8 + test/schemas/annot-err_0.xml | 4 + test/schemas/annot-err_0.xsd | 21 + test/schemas/any1_0.xml | 21 + test/schemas/any1_0.xsd | 22 + test/schemas/any2_0.xml | 24 + test/schemas/any2_0.xsd | 26 + test/schemas/any3_0.xml | 17 + test/schemas/any3_0.xsd | 17 + test/schemas/any4_0.xml | 17 + test/schemas/any4_0.xsd | 28 + test/schemas/any5_0.xml | 7 + test/schemas/any5_0.xsd | 13 + test/schemas/any5_1.xml | 12 + test/schemas/any5_1.xsd | 14 + test/schemas/any5_2.xml | 8 + test/schemas/any5_3.xml | 11 + test/schemas/any5_4.xml | 12 + test/schemas/any5_5.xml | 12 + test/schemas/any5_6.xml | 13 + test/schemas/any6_0.xml | 8 + test/schemas/any6_1.xsd | 36 + test/schemas/any6_2.xsd | 19 + test/schemas/any7_0.xml | 19 + test/schemas/any7_1.xml | 18 + test/schemas/any7_1.xsd | 13 + test/schemas/any7_2.xml | 20 + test/schemas/any7_2.xsd | 13 + test/schemas/any8_0.xml | 9 + test/schemas/any8_1.xsd | 20 + test/schemas/anyAttr-derive-errors1_0.xml | 30 + test/schemas/anyAttr-derive-errors1_0.xsd | 223 + test/schemas/anyAttr-derive1_0.xml | 30 + test/schemas/anyAttr-derive1_0.xsd | 227 + test/schemas/anyAttr-derive2_0.xml | 9 + test/schemas/anyAttr-derive2_0.xsd | 33 + test/schemas/anyAttr-errors1_0.xml | 26 + test/schemas/anyAttr-processContents-err1_0.xml | 11 + test/schemas/anyAttr-processContents-err1_0.xsd | 26 + test/schemas/anyAttr-processContents1_0.xml | 13 + test/schemas/anyAttr-processContents1_0.xsd | 32 + test/schemas/anyAttr.importA.1_0.xsd | 24 + test/schemas/anyAttr.importB.1_0.xsd | 21 + test/schemas/anyAttr1_0.xml | 31 + test/schemas/anyAttr1_0.xsd | 144 + test/schemas/attr0_0.xml | 1 + test/schemas/attr0_0.xsd | 13 + test/schemas/attruse_0_0.xml | 8 + test/schemas/attruse_0_0.xsd | 32 + test/schemas/attruse_0_1.xml | 8 + test/schemas/attruse_0_2.xml | 8 + test/schemas/bug141312_0.xml | 2 + test/schemas/bug141312_0.xsd | 16 + test/schemas/bug141333.xml | 9 + test/schemas/bug141333.xsd | 25 + test/schemas/bug141333_0.xml | 9 + test/schemas/bug141333_0.xsd | 25 + test/schemas/bug143951.imp | 12 + test/schemas/bug143951_0.xml | 9 + test/schemas/bug143951_0.xsd | 17 + test/schemas/bug145246.xsd.imp | 119 + test/schemas/bug145246_0.xml | 30 + test/schemas/bug145246_0.xsd | 173 + test/schemas/bug152470_1.xml | 9 + test/schemas/bug152470_1.xsd | 49 + test/schemas/bug167754_0.xml | 12 + test/schemas/bug167754_0.xsd | 29 + test/schemas/bug303566_1.xml | 19 + test/schemas/bug303566_1.xsd | 63 + test/schemas/bug306806_0.xml | 111 + test/schemas/bug306806_1.xsd | 544 + test/schemas/bug309338_0.xml | 4 + test/schemas/bug309338_1.xsd | 13 + test/schemas/bug310264_0.xml | 41 + test/schemas/bug310264_0.xsd | 18 + test/schemas/bug312957_0.xml | 14 + test/schemas/bug312957_1.xsd | 39 + test/schemas/bug313982_0.xml | 4 + test/schemas/bug313982_0.xsd | 11 + test/schemas/bug321475_0.xml | 10 + test/schemas/bug321475_1.xsd | 48 + test/schemas/bug322411_0.xml | 93 + test/schemas/bug322411_1.xsd | 35 + test/schemas/bug323510_0.xml | 3 + test/schemas/bug323510_1.xsd | 12 + test/schemas/bug455953_0.xml | 9 + test/schemas/bug455953_0.xsd | 29 + test/schemas/changelog093_0.xml | 14 + test/schemas/changelog093_1.xsd | 253 + test/schemas/choice_0.xml | 3 + test/schemas/choice_0.xsd | 13 + test/schemas/choice_1.xml | 3 + test/schemas/choice_1.xsd | 13 + test/schemas/choice_2.xml | 4 + test/schemas/choice_2.xsd | 13 + test/schemas/choice_3.xml | 4 + test/schemas/choice_4.xml | 2 + test/schemas/choice_5.xml | 6 + test/schemas/choice_6.xml | 7 + test/schemas/complex-type-extension_0.xml | 12 + test/schemas/complex-type-extension_0.xsd | 27 + test/schemas/cos-ct-extends-1-3_0.xml | 9 + test/schemas/cos-ct-extends-1-3_0.xsd | 51 + test/schemas/cos-st-restricts-1-2-err_0.xml | 3 + test/schemas/cos-st-restricts-1-2-err_0.xsd | 30 + test/schemas/ct-sc-nobase_0.xml | 4 + test/schemas/ct-sc-nobase_0.xsd | 24 + test/schemas/date_0.xml | 26 + test/schemas/date_0.xsd | 122 + test/schemas/decimal-1.xml | 37 + test/schemas/decimal-1.xsd | 29 + test/schemas/decimal-1_0.xml | 24 + test/schemas/decimal-1_1.xsd | 19 + test/schemas/decimal-2_0.xml | 14 + test/schemas/decimal-2_1.xsd | 18 + test/schemas/decimal-3_0.xml | 17 + test/schemas/decimal-3_1.xsd | 18 + test/schemas/derivation-ok-extension-err_0.xml | 9 + test/schemas/derivation-ok-extension-err_0.xsd | 22 + test/schemas/derivation-ok-extension_0.xml | 9 + test/schemas/derivation-ok-extension_0.xsd | 22 + test/schemas/derivation-ok-restriction-2-1-1_0.xml | 8 + test/schemas/derivation-ok-restriction-2-1-1_0.xsd | 56 + .../derivation-ok-restriction-4-1-err_0.xml | 8 + .../derivation-ok-restriction-4-1-err_0.xsd | 69 + test/schemas/derivation-restriction-anyAttr_0.xml | 12 + test/schemas/derivation-restriction-anyAttr_0.xsd | 24 + test/schemas/derivation-restriction-anyType.xml | 9 + test/schemas/derivation-restriction-anyType.xsd | 22 + test/schemas/deter0_0.xml | 5 + test/schemas/deter0_0.xsd | 16 + test/schemas/dur_0.xml | 13 + test/schemas/dur_0.xsd | 72 + test/schemas/elem0_0.xml | 3 + test/schemas/elem0_0.xsd | 16 + test/schemas/element-err_0.xml | 4 + test/schemas/element-err_0.xsd | 39 + test/schemas/element-minmax-err_0.xml | 5 + test/schemas/element-minmax-err_0.xsd | 11 + test/schemas/empty-value_0.xml | 2 + test/schemas/empty-value_1.xml | 2 + test/schemas/empty-value_1.xsd | 24 + test/schemas/empty_0.xml | 1 + test/schemas/empty_0.xsd | 13 + test/schemas/empty_1.xsd | 9 + test/schemas/extension0_0.xml | 7 + test/schemas/extension0_0.xsd | 20 + test/schemas/extension1_0.xml | 1 + test/schemas/extension1_0.xsd | 17 + test/schemas/extension1_1.xml | 1 + test/schemas/extension1_2.xml | 1 + test/schemas/extension2_0.xml | 4 + test/schemas/extension2_1.xsd | 17 + test/schemas/facet-unionST-err1_0.xml | 4 + test/schemas/facet-unionST-err1_0.xsd | 27 + test/schemas/facet-whiteSpace_0.xml | 7 + test/schemas/facet-whiteSpace_0.xsd | 12 + test/schemas/group0_0.xml | 3 + test/schemas/group0_0.xsd | 18 + test/schemas/hexbinary_0.xml | 20 + test/schemas/hexbinary_0.xsd | 35 + test/schemas/hexbinary_1.xml | 15 + test/schemas/idc-keyref-err1_0.xml | 14 + test/schemas/idc-keyref-err1_1.xsd | 53 + test/schemas/import-455953.xsd | 24 + test/schemas/import-bad-1_0.imp | 5 + test/schemas/import0_0.imp | 13 + test/schemas/import0_0.xml | 8 + test/schemas/import0_0.xsd | 21 + test/schemas/import1_0.imp | 8 + test/schemas/import1_0.xml | 11 + test/schemas/import1_0.xsd | 30 + test/schemas/import1_0b.imp | 8 + test/schemas/import2_0.imp | 24 + test/schemas/import2_0.xml | 8 + test/schemas/import2_0.xsd | 24 + test/schemas/include1_0.inc | 28 + test/schemas/include1_0.xml | 8 + test/schemas/include1_0.xsd | 15 + test/schemas/include2_0.inc | 17 + test/schemas/include2_0.xml | 9 + test/schemas/include2_0.xsd | 14 + test/schemas/include3_0.inc | 5 + test/schemas/include3_0.xml | 7 + test/schemas/include3_0.xsd | 9 + test/schemas/item_0.xml | 6 + test/schemas/item_0.xsd | 39 + test/schemas/item_1.xsd | 42 + test/schemas/length1_0.xml | 1 + test/schemas/length1_0.xsd | 11 + test/schemas/length2_0.xml | 5 + test/schemas/length2_0.xsd | 14 + test/schemas/length3_0.xml | 5 + test/schemas/length3_0.xsd | 10 + test/schemas/list0_0.xml | 6 + test/schemas/list0_0.xsd | 13 + test/schemas/list0_1.xml | 3 + test/schemas/list0_1.xsd | 13 + test/schemas/list0_2.xml | 4 + test/schemas/mixed0_0.xml | 1 + test/schemas/mixed0_0.xsd | 5 + test/schemas/mixed1_0.xml | 1 + test/schemas/mixed1_0.xsd | 7 + test/schemas/ns0_0.xml | 2 + test/schemas/ns0_0.xsd | 16 + test/schemas/ns0_1.xml | 2 + test/schemas/ns0_1.xsd | 16 + test/schemas/ns0_2.xml | 2 + test/schemas/ns0_3.xml | 2 + test/schemas/ns0_4.xml | 3 + test/schemas/ns1_0.xml | 2 + test/schemas/ns1_0.xsd | 3 + test/schemas/ns2_0.xml | 1 + test/schemas/ns2_0.xsd | 15 + test/schemas/nvdcve_0.xml | 5235 ++ test/schemas/nvdcve_0.xsd | 498 + test/schemas/po0_0.xml | 32 + test/schemas/po0_0.xsd | 59 + test/schemas/po1_0.xml | 34 + test/schemas/po1_0.xsd | 64 + test/schemas/poschargrp0_0.xml | 2 + test/schemas/poschargrp0_0.xsd | 14 + test/schemas/regexp-char-ref_0.xml | 7 + test/schemas/regexp-char-ref_0.xsd | 20 + test/schemas/regexp-char-ref_1.xsd | 20 + test/schemas/restrict-CT-attr-ref_0.xml | 3 + test/schemas/restrict-CT-attr-ref_0.xsd | 30 + test/schemas/restriction-attr1_0.xml | 3 + test/schemas/restriction-attr1_0.xsd | 18 + test/schemas/restriction-enum-1_0.xml | 7 + test/schemas/restriction-enum-1_1.xsd | 19 + test/schemas/restriction0_0.xml | 5 + test/schemas/restriction0_0.xsd | 21 + test/schemas/scc-no-xmlns_0.xml | 3 + test/schemas/scc-no-xmlns_0.xsd | 11 + test/schemas/scc-no-xsi_0.xml | 3 + test/schemas/scc-no-xsi_0.xsd | 11 + test/schemas/seq-dubl-elem1_0.xml | 7 + test/schemas/seq-dubl-elem1_0.xsd | 25 + test/schemas/seq0_0.xml | 61 + test/schemas/seq0_0.xsd | 64 + test/schemas/src-attribute1_0.xml | 2 + test/schemas/src-attribute1_0.xsd | 13 + test/schemas/src-attribute2_0.xml | 2 + test/schemas/src-attribute2_0.xsd | 13 + test/schemas/src-attribute3-1_0.xml | 2 + test/schemas/src-attribute3-1_0.xsd | 15 + test/schemas/src-attribute3-2-form_0.xml | 2 + test/schemas/src-attribute3-2-form_0.xsd | 16 + test/schemas/src-attribute3-2-st_0.xml | 2 + test/schemas/src-attribute3-2-st_0.xsd | 22 + test/schemas/src-attribute3-2-type_0.xml | 2 + test/schemas/src-attribute3-2-type_0.xsd | 16 + test/schemas/src-attribute4_0.xml | 2 + test/schemas/src-attribute4_0.xsd | 17 + test/schemas/src-element1_0.xml | 2 + test/schemas/src-element1_0.xsd | 9 + test/schemas/src-element2-1_0.xml | 2 + test/schemas/src-element2-1_0.xsd | 17 + test/schemas/src-element2-2_0.xml | 2 + test/schemas/src-element2-2_0.xsd | 48 + test/schemas/src-element3_0.xml | 2 + test/schemas/src-element3_0.xsd | 29 + test/schemas/subst-group-1_0.xsd | 45 + test/schemas/subst-group-1_1.xml | 12 + test/schemas/union2_1.xml | 6 + test/schemas/union2_1.xsd | 21 + test/schemas/union_0_0.xml | 8 + test/schemas/union_0_0.xsd | 53 + test/schemas/vdv-complexTypes.xsd | 37 + test/schemas/vdv-first0_0.xml | 33 + test/schemas/vdv-first0_0.xsd | 67 + test/schemas/vdv-first1_0.xml | 33 + test/schemas/vdv-first1_0.xsd | 47 + test/schemas/vdv-first2_0.xml | 33 + test/schemas/vdv-first2_0.xsd | 89 + test/schemas/vdv-first3_0.xml | 33 + test/schemas/vdv-first3_0.xsd | 68 + test/schemas/vdv-first4_0.xml | 33 + test/schemas/vdv-first4_0.xsd | 150 + test/schemas/vdv-first4_1.xml | 33 + test/schemas/vdv-first4_2.xml | 33 + test/schemas/vdv-first5_0.xml | 33 + test/schemas/vdv-first5_0.xsd | 85 + test/schemas/vdv-simpleTypes.xsd | 38 + test/schemas/xml.xsd | 117 + test/schemas/xsd-list-itemType_0.xml | 3 + test/schemas/xsd-list-itemType_0.xsd | 14 + test/schemas/xsd-simpleType-varieties_0.xml | 8 + test/schemas/xsd-simpleType-varieties_0.xsd | 45 + test/schematron/zvon1.sct | 23 + test/schematron/zvon10.sct | 15 + test/schematron/zvon10_0.xml | 3 + test/schematron/zvon10_1.xml | 4 + test/schematron/zvon11.sct | 8 + test/schematron/zvon11_0.xml | 3 + test/schematron/zvon11_1.xml | 3 + test/schematron/zvon11_2.xml | 3 + test/schematron/zvon11_3.xml | 3 + test/schematron/zvon12.sct | 8 + test/schematron/zvon12_0.xml | 3 + test/schematron/zvon12_1.xml | 3 + test/schematron/zvon12_2.xml | 3 + test/schematron/zvon13.sct | 7 + test/schematron/zvon13_0.xml | 6 + test/schematron/zvon13_1.xml | 5 + test/schematron/zvon13_2.xml | 5 + test/schematron/zvon14.sct | 10 + test/schematron/zvon14_0.xml | 12 + test/schematron/zvon15.sct | 11 + test/schematron/zvon15_0.xml | 4 + test/schematron/zvon1_0.xml | 3 + test/schematron/zvon1_1.xml | 3 + test/schematron/zvon2.sct | 9 + test/schematron/zvon2_0.xml | 4 + test/schematron/zvon2_1.xml | 4 + test/schematron/zvon2_2.xml | 5 + test/schematron/zvon3.sct | 8 + test/schematron/zvon3_0.xml | 8 + test/schematron/zvon4.sct | 10 + test/schematron/zvon4_0.xml | 6 + test/schematron/zvon4_1.xml | 6 + test/schematron/zvon5.sct | 12 + test/schematron/zvon5_0.xml | 5 + test/schematron/zvon5_1.xml | 5 + test/schematron/zvon5_2.xml | 7 + test/schematron/zvon6.sct | 8 + test/schematron/zvon6_0.xml | 3 + test/schematron/zvon6_1.xml | 3 + test/schematron/zvon6_2.xml | 3 + test/schematron/zvon7.sct | 9 + test/schematron/zvon7_0.xml | 3 + test/schematron/zvon7_1.xml | 3 + test/schematron/zvon7_2.xml | 3 + test/schematron/zvon7_3.xml | 3 + test/schematron/zvon7_4.xml | 3 + test/schematron/zvon8.sct | 10 + test/schematron/zvon8_0.xml | 8 + test/schematron/zvon8_1.xml | 7 + test/schematron/zvon8_2.xml | 7 + test/schematron/zvon9.sct | 9 + test/schematron/zvon9_0.xml | 7 + test/schematron/zvon9_1.xml | 7 + test/schematron/zvon9_2.xml | 7 + test/scripts/base.script | 7 + test/scripts/base.xml | 7 + test/scripts/base2.script | 7 + test/scripts/base2.xml | 7 + test/scripts/set1.script | 2 + test/scripts/set1.xml | 1 + test/scripts/set3.script | 5 + test/scripts/set3.xml | 1 + test/scripts/set4.script | 4 + test/scripts/set4.xml | 1 + test/slashdot.rdf | 66 + test/slashdot.xml | 112 + test/slashdot16.xml | Bin 0 -> 10374 bytes test/svg1 | 163 + test/svg2 | 58 + test/svg3 | 722 + test/threads/a.example.org.xml | 6 + test/threads/a/a.dtd | 1 + test/threads/abc.dtd | 7 + test/threads/abc.xml | 7 + test/threads/acb.dtd | 7 + test/threads/acb.xml | 7 + test/threads/b.example.org.xml | 6 + test/threads/b/b.dtd | 2 + test/threads/bac.dtd | 7 + test/threads/bac.xml | 7 + test/threads/bca.dtd | 7 + test/threads/bca.xml | 7 + test/threads/c.example.org.xml | 6 + test/threads/c/c.dtd | 1 + test/threads/cab.dtd | 7 + test/threads/cab.xml | 7 + test/threads/cba.dtd | 7 + test/threads/cba.xml | 7 + test/threads/complex.xml | 6 + test/threads/example.org.xml | 9 + test/threads/invalid.xml | 2 + test/title.xml | 2 + test/tstblanks.xml | 495 + test/utf16bebom.xml | Bin 0 -> 346 bytes test/utf16bom.xml | Bin 0 -> 256 bytes test/utf16lebom.xml | Bin 0 -> 344 bytes test/utf8bom.xml | 1 + test/valid/127772.xml | 7 + test/valid/694228.xml | 5 + test/valid/737840.xml | 10 + test/valid/REC-xml-19980210.xml | 4197 ++ test/valid/UTF16Entity.xml | 8 + test/valid/dia.xml | 163 + test/valid/dtds/127772.dtd | 7 + test/valid/dtds/694228.dtd | 3 + test/valid/dtds/737840.ent | 1 + test/valid/dtds/NewsMLv1.0.dtd | 1578 + test/valid/dtds/destfoo.ent | 1 + test/valid/dtds/external.ent | 3 + test/valid/dtds/external2.ent | 1 + test/valid/dtds/nitf-2-5.dtd | 1004 + test/valid/dtds/notes.dtd | 19 + test/valid/dtds/objednavka.dtd | 23 + test/valid/dtds/spec.dtd | 972 + test/valid/dtds/utf16b.ent | Bin 0 -> 98 bytes test/valid/dtds/utf16l.ent | Bin 0 -> 98 bytes test/valid/dtds/xhtml-lat1.ent | 196 + test/valid/dtds/xhtml-special.ent | 79 + test/valid/dtds/xhtml-symbol.ent | 242 + test/valid/dtds/xhtml.cat | 14 + test/valid/dtds/xhtml1-frameset.dtd | 1223 + test/valid/dtds/xhtml1-strict.dtd | 986 + test/valid/dtds/xhtml1-transitional.dtd | 1194 + test/valid/dtds/xhtml1.dcl | 179 + test/valid/dtds/xmlspec.dtd | 1102 + test/valid/id1.xml | 13 + test/valid/id2.xml | 14 + test/valid/id3.xml | 14 + test/valid/index.xml | 111 + test/valid/mixed_ns.xml | 16 + test/valid/notes.xml | 5 + test/valid/ns.xml | 9 + test/valid/ns2.xml | 14 + test/valid/objednavka.xml | 39 + test/valid/rss.xml | 177 + test/valid/t10.xml | 12 + test/valid/t11.xml | 2 + test/valid/t4.dtd | 4 + test/valid/t4.xml | 3 + test/valid/t4a.dtd | 5 + test/valid/t4a.xml | 3 + test/valid/t6.dtd | 5 + test/valid/t6.xml | 3 + test/valid/t8.xml | 8 + test/valid/t8a.xml | 8 + test/valid/t9.xml | 8 + test/valid/t9a.xml | 8 + test/valid/xhtml1.xhtml | 1505 + test/valid/xlink.xml | 529 + test/wap.xml | 27 + test/warning/ent8 | 3 + test/warning/ent9 | 7 + test/winblanks.xml | 5 + test/wml.xml | 11 + test/xhtml1 | 34 + test/xhtmlcomp | 8 + test/xml1 | 7 + test/xml2 | 8 + test/xmlid/id_err1.xml | 1 + test/xmlid/id_err2.xml | 5 + test/xmlid/id_tst1.xml | 1 + test/xmlid/id_tst2.xml | 1 + test/xmlid/id_tst3.xml | 1 + test/xmlid/id_tst4.xml | 4 + test/xsdtest/xsdtest.xml | 806 + test/xsdtest/xsdtest.xsl | 238 + test/xsdtest/xsdtestsuite.xml | 5286 ++ testAutomata.c | 309 + testC14N.c | 370 + testHTML.c | 880 + testModule.c | 82 + testOOM.c | 377 + testOOMlib.c | 269 + testOOMlib.h | 26 + testReader.c | 145 + testRegexp.c | 402 + testRelax.c | 194 + testSAX.c | 1198 + testSchemas.c | 185 + testThreads.c | 200 + testThreadsWin32.c | 150 + testURI.c | 124 + testXPath.c | 229 + testapi.c | 52172 +++++++++++++++++++ testchar.c | 617 + testdict.c | 444 + testdso.c | 12 + testlimits.c | 1637 + testrecurse.c | 965 + threads.c | 1039 + timsort.h | 518 + tree.c | 10122 ++++ trio.c | 6895 +++ trio.h | 230 + triodef.h | 228 + trionan.c | 914 + trionan.h | 84 + triop.h | 150 + triostr.c | 2112 + triostr.h | 144 + uri.c | 2567 + valid.c | 7054 +++ vms/build_libxml.com | 273 + vms/config.vms | 216 + vms/diffs.vms | 192 + vms/readme.vms | 143 + win32/Makefile.bcb | 355 + win32/Makefile.mingw | 354 + win32/Makefile.msvc | 489 + win32/Readme.txt | 226 + win32/VC10/README.vc10 | 27 + win32/VC10/RuleSet1.ruleset | 3 + win32/VC10/config.h | 127 + win32/VC10/libxml2-focus.vcxproj | 184 + win32/VC10/libxml2.sln | 49 + win32/VC10/libxml2.vcxproj | 137 + win32/VC10/libxml2.vcxproj.filters | 171 + win32/VC10/runsuite.vcxproj | 85 + win32/VC10/runsuite.vcxproj.filters | 22 + win32/configure.js | 708 + win32/defgen.xsl | 288 + win32/libxml2.def.src | 3190 ++ win32/wince/libxml2.vcb | 1 + win32/wince/libxml2.vcl | 122 + win32/wince/libxml2.vco | 1 + win32/wince/libxml2.vcp | 5273 ++ win32/wince/libxml2.vcw | 41 + win32/wince/wincecompat.c | 68 + win32/wince/wincecompat.h | 50 + xinclude.c | 2624 + xlink.c | 183 + xml2-config.1 | 30 + xml2-config.in | 106 + xml2Conf.sh.in | 8 + xmlIO.c | 4186 ++ xmlcatalog.c | 616 + xmllint.c | 3809 ++ xmlmemory.c | 1142 + xmlmodule.c | 460 + xmlreader.c | 5956 +++ xmlregexp.c | 8173 +++ xmlsave.c | 2788 + xmlschemas.c | 28927 ++++++++++ xmlschemastypes.c | 6152 +++ xmlstring.c | 1046 + xmlunicode.c | 3179 ++ xmlwriter.c | 4743 ++ xpath.c | 15392 ++++++ xpointer.c | 3031 ++ xstc/Makefile.am | 132 + xstc/fixup-tests.py | 99 + xstc/xstc-to-python.xsl | 114 + xstc/xstc.py | 693 + xzlib.c | 804 + xzlib.h | 19 + 4245 files changed, 862906 insertions(+) create mode 100644 .gitignore create mode 100644 AUTHORS create mode 100644 ChangeLog create mode 100644 Copyright create mode 100644 DOCBparser.c create mode 100644 HACKING create mode 100644 HTMLparser.c create mode 100644 HTMLtree.c create mode 100644 INSTALL.libxml2 create mode 100644 MAINTAINERS create mode 100644 Makefile.am create mode 100644 Makefile.tests create mode 100644 Makefile.win create mode 100644 NEWS create mode 100644 README create mode 100644 README.cvs-commits create mode 100644 README.tests create mode 100644 SAX.c create mode 100644 SAX2.c create mode 100644 TODO create mode 100644 TODO_SCHEMAS create mode 100644 VxWorks/Makefile create mode 100644 VxWorks/README create mode 100644 VxWorks/build.sh create mode 100644 acinclude.m4 create mode 100755 autogen.sh create mode 100644 bakefile/Bakefiles.bkgen create mode 100644 bakefile/Readme.txt create mode 100644 bakefile/libxml2.bkl create mode 100644 buf.c create mode 100644 buf.h create mode 100755 build_glob.py create mode 100644 c14n.c create mode 100644 catalog.c create mode 100755 check-relaxng-test-suite.py create mode 100755 check-relaxng-test-suite2.py create mode 100755 check-xinclude-test-suite.py create mode 100755 check-xml-test-suite.py create mode 100755 check-xsddata-test-suite.py create mode 100644 chvalid.c create mode 100755 chvalid.def create mode 100644 configure.ac create mode 100755 dbgen.pl create mode 100755 dbgenattr.pl create mode 100644 debugXML.c create mode 100644 dict.c create mode 100644 doc/APIchunk0.html create mode 100644 doc/APIchunk1.html create mode 100644 doc/APIchunk10.html create mode 100644 doc/APIchunk11.html create mode 100644 doc/APIchunk12.html create mode 100644 doc/APIchunk13.html create mode 100644 doc/APIchunk14.html create mode 100644 doc/APIchunk15.html create mode 100644 doc/APIchunk16.html create mode 100644 doc/APIchunk17.html create mode 100644 doc/APIchunk18.html create mode 100644 doc/APIchunk19.html create mode 100644 doc/APIchunk2.html create mode 100644 doc/APIchunk20.html create mode 100644 doc/APIchunk21.html create mode 100644 doc/APIchunk22.html create mode 100644 doc/APIchunk23.html create mode 100644 doc/APIchunk24.html create mode 100644 doc/APIchunk25.html create mode 100644 doc/APIchunk26.html create mode 100644 doc/APIchunk27.html create mode 100644 doc/APIchunk28.html create mode 100644 doc/APIchunk29.html create mode 100644 doc/APIchunk3.html create mode 100644 doc/APIchunk4.html create mode 100644 doc/APIchunk5.html create mode 100644 doc/APIchunk6.html create mode 100644 doc/APIchunk7.html create mode 100644 doc/APIchunk8.html create mode 100644 doc/APIchunk9.html create mode 100644 doc/APIconstructors.html create mode 100644 doc/APIfiles.html create mode 100644 doc/APIfunctions.html create mode 100644 doc/APIsymbols.html create mode 100755 doc/ChangeLog.awk create mode 100644 doc/ChangeLog.xsl create mode 100644 doc/DOM.fig create mode 100644 doc/DOM.gif create mode 100644 doc/DOM.html create mode 100644 doc/FAQ.html create mode 100644 doc/Libxml2-Logo-180x168.gif create mode 100644 doc/Libxml2-Logo-90x34.gif create mode 100644 doc/Makefile.am create mode 100644 doc/README.docs create mode 100644 doc/XMLinfo.html create mode 100644 doc/XSLT.html create mode 100644 doc/api.xsl create mode 100755 doc/apibuild.py create mode 100644 doc/architecture.html create mode 100644 doc/bugs.html create mode 100755 doc/buildDocBookCatalog create mode 100644 doc/catalog.fig create mode 100644 doc/catalog.gif create mode 100644 doc/catalog.html create mode 100644 doc/checkapisym.xsl create mode 100644 doc/contribs.html create mode 100644 doc/devhelp/Makefile.am create mode 100644 doc/devhelp/devhelp.xsl create mode 100644 doc/devhelp/general.html create mode 100644 doc/devhelp/home.png create mode 100644 doc/devhelp/html.xsl create mode 100644 doc/devhelp/index.html create mode 100644 doc/devhelp/left.png create mode 100644 doc/devhelp/libxml2-DOCBparser.html create mode 100644 doc/devhelp/libxml2-HTMLparser.html create mode 100644 doc/devhelp/libxml2-HTMLtree.html create mode 100644 doc/devhelp/libxml2-SAX.html create mode 100644 doc/devhelp/libxml2-SAX2.html create mode 100644 doc/devhelp/libxml2-c14n.html create mode 100644 doc/devhelp/libxml2-catalog.html create mode 100644 doc/devhelp/libxml2-chvalid.html create mode 100644 doc/devhelp/libxml2-debugXML.html create mode 100644 doc/devhelp/libxml2-dict.html create mode 100644 doc/devhelp/libxml2-encoding.html create mode 100644 doc/devhelp/libxml2-entities.html create mode 100644 doc/devhelp/libxml2-globals.html create mode 100644 doc/devhelp/libxml2-hash.html create mode 100644 doc/devhelp/libxml2-list.html create mode 100644 doc/devhelp/libxml2-nanoftp.html create mode 100644 doc/devhelp/libxml2-nanohttp.html create mode 100644 doc/devhelp/libxml2-parser.html create mode 100644 doc/devhelp/libxml2-parserInternals.html create mode 100644 doc/devhelp/libxml2-pattern.html create mode 100644 doc/devhelp/libxml2-relaxng.html create mode 100644 doc/devhelp/libxml2-schemasInternals.html create mode 100644 doc/devhelp/libxml2-schematron.html create mode 100644 doc/devhelp/libxml2-threads.html create mode 100644 doc/devhelp/libxml2-tree.html create mode 100644 doc/devhelp/libxml2-uri.html create mode 100644 doc/devhelp/libxml2-valid.html create mode 100644 doc/devhelp/libxml2-xinclude.html create mode 100644 doc/devhelp/libxml2-xlink.html create mode 100644 doc/devhelp/libxml2-xmlIO.html create mode 100644 doc/devhelp/libxml2-xmlautomata.html create mode 100644 doc/devhelp/libxml2-xmlerror.html create mode 100644 doc/devhelp/libxml2-xmlexports.html create mode 100644 doc/devhelp/libxml2-xmlmemory.html create mode 100644 doc/devhelp/libxml2-xmlmodule.html create mode 100644 doc/devhelp/libxml2-xmlreader.html create mode 100644 doc/devhelp/libxml2-xmlregexp.html create mode 100644 doc/devhelp/libxml2-xmlsave.html create mode 100644 doc/devhelp/libxml2-xmlschemas.html create mode 100644 doc/devhelp/libxml2-xmlschemastypes.html create mode 100644 doc/devhelp/libxml2-xmlstring.html create mode 100644 doc/devhelp/libxml2-xmlunicode.html create mode 100644 doc/devhelp/libxml2-xmlversion.html create mode 100644 doc/devhelp/libxml2-xmlwriter.html create mode 100644 doc/devhelp/libxml2-xpath.html create mode 100644 doc/devhelp/libxml2-xpathInternals.html create mode 100644 doc/devhelp/libxml2-xpointer.html create mode 100644 doc/devhelp/libxml2-xzlib.html create mode 100644 doc/devhelp/libxml2.devhelp create mode 100644 doc/devhelp/right.png create mode 100644 doc/devhelp/style.css create mode 100644 doc/devhelp/up.png create mode 100644 doc/docdescr.doc create mode 100644 doc/docs.html create mode 100644 doc/downloads.html create mode 100644 doc/elfgcchack.xsl create mode 100644 doc/encoding.html create mode 100644 doc/entities.html create mode 100644 doc/epatents.png create mode 100644 doc/example.html create mode 100644 doc/examples/Makefile.am create mode 100644 doc/examples/examples.xml create mode 100644 doc/examples/examples.xsl create mode 100644 doc/examples/index.html create mode 100755 doc/examples/index.py create mode 100644 doc/examples/io1.c create mode 100644 doc/examples/io1.res create mode 100644 doc/examples/io2.c create mode 100644 doc/examples/io2.res create mode 100644 doc/examples/parse1.c create mode 100644 doc/examples/parse2.c create mode 100644 doc/examples/parse3.c create mode 100644 doc/examples/parse4.c create mode 100644 doc/examples/reader1.c create mode 100644 doc/examples/reader1.res create mode 100644 doc/examples/reader2.c create mode 100644 doc/examples/reader3.c create mode 100644 doc/examples/reader3.res create mode 100644 doc/examples/reader4.c create mode 100644 doc/examples/reader4.res create mode 100644 doc/examples/test1.xml create mode 100644 doc/examples/test2.xml create mode 100644 doc/examples/test3.xml create mode 100644 doc/examples/testWriter.c create mode 100644 doc/examples/tree1.c create mode 100644 doc/examples/tree1.res create mode 100644 doc/examples/tree2.c create mode 100644 doc/examples/tree2.res create mode 100644 doc/examples/tst.xml create mode 100644 doc/examples/writer.xml create mode 100644 doc/examples/xpath1.c create mode 100644 doc/examples/xpath1.res create mode 100644 doc/examples/xpath2.c create mode 100644 doc/examples/xpath2.res create mode 100644 doc/favicon.ico create mode 100644 doc/gnome2.png create mode 100644 doc/guidelines.html create mode 100644 doc/help.html create mode 100644 doc/html/book1.html create mode 100644 doc/html/home.png create mode 100644 doc/html/index.html create mode 100644 doc/html/index.sgml create mode 100644 doc/html/left.png create mode 100644 doc/html/libxml-DOCBparser.html create mode 100644 doc/html/libxml-HTMLparser.html create mode 100644 doc/html/libxml-HTMLtree.html create mode 100644 doc/html/libxml-SAX.html create mode 100644 doc/html/libxml-SAX2.html create mode 100644 doc/html/libxml-c14n.html create mode 100644 doc/html/libxml-catalog.html create mode 100644 doc/html/libxml-chvalid.html create mode 100644 doc/html/libxml-debugXML.html create mode 100644 doc/html/libxml-dict.html create mode 100644 doc/html/libxml-encoding.html create mode 100644 doc/html/libxml-entities.html create mode 100644 doc/html/libxml-globals.html create mode 100644 doc/html/libxml-hash.html create mode 100644 doc/html/libxml-lib.html create mode 100644 doc/html/libxml-list.html create mode 100644 doc/html/libxml-nanoftp.html create mode 100644 doc/html/libxml-nanohttp.html create mode 100644 doc/html/libxml-parser.html create mode 100644 doc/html/libxml-parserInternals.html create mode 100644 doc/html/libxml-pattern.html create mode 100644 doc/html/libxml-relaxng.html create mode 100644 doc/html/libxml-schemasInternals.html create mode 100644 doc/html/libxml-schematron.html create mode 100644 doc/html/libxml-threads.html create mode 100644 doc/html/libxml-tree.html create mode 100644 doc/html/libxml-uri.html create mode 100644 doc/html/libxml-valid.html create mode 100644 doc/html/libxml-xinclude.html create mode 100644 doc/html/libxml-xlink.html create mode 100644 doc/html/libxml-xmlIO.html create mode 100644 doc/html/libxml-xmlautomata.html create mode 100644 doc/html/libxml-xmlerror.html create mode 100644 doc/html/libxml-xmlexports.html create mode 100644 doc/html/libxml-xmlmemory.html create mode 100644 doc/html/libxml-xmlmodule.html create mode 100644 doc/html/libxml-xmlreader.html create mode 100644 doc/html/libxml-xmlregexp.html create mode 100644 doc/html/libxml-xmlsave.html create mode 100644 doc/html/libxml-xmlschemas.html create mode 100644 doc/html/libxml-xmlschemastypes.html create mode 100644 doc/html/libxml-xmlstring.html create mode 100644 doc/html/libxml-xmlunicode.html create mode 100644 doc/html/libxml-xmlversion.html create mode 100644 doc/html/libxml-xmlwriter.html create mode 100644 doc/html/libxml-xpath.html create mode 100644 doc/html/libxml-xpathInternals.html create mode 100644 doc/html/libxml-xpointer.html create mode 100644 doc/html/libxml-xzlib.html create mode 100644 doc/html/libxml.devhelp create mode 100644 doc/html/right.png create mode 100644 doc/html/up.png create mode 100644 doc/index.html create mode 100755 doc/index.py create mode 100644 doc/interface.html create mode 100644 doc/intro.html create mode 100644 doc/library.html create mode 100644 doc/libxml-doc.el create mode 100644 doc/libxml.fig create mode 100644 doc/libxml.gif create mode 100644 doc/libxml2-api.xml create mode 100644 doc/libxml2-refs.xml create mode 100644 doc/libxml2.xsa create mode 100644 doc/namespaces.html create mode 100644 doc/newapi.xsl create mode 100644 doc/news.html create mode 100644 doc/news.xsl create mode 100644 doc/python.html create mode 100755 doc/queries.py create mode 100644 doc/redhat.gif create mode 100644 doc/search.php create mode 100644 doc/searches.html create mode 100644 doc/searches.xsl create mode 100644 doc/searches/AllQueries-20040408.xml create mode 100644 doc/searches/Queries-20040408.xml create mode 100644 doc/site.xsl create mode 100644 doc/smallfootonly.gif create mode 100644 doc/structure.fig create mode 100644 doc/structure.gif create mode 100644 doc/symbols.xml create mode 100644 doc/syms.xsl create mode 100644 doc/threads.html create mode 100644 doc/tree.html create mode 100644 doc/tutorial/apa.html create mode 100644 doc/tutorial/apb.html create mode 100644 doc/tutorial/apc.html create mode 100644 doc/tutorial/apd.html create mode 100644 doc/tutorial/ape.html create mode 100644 doc/tutorial/apf.html create mode 100644 doc/tutorial/apg.html create mode 100644 doc/tutorial/aph.html create mode 100644 doc/tutorial/api.html create mode 100644 doc/tutorial/ar01s02.html create mode 100644 doc/tutorial/ar01s03.html create mode 100644 doc/tutorial/ar01s04.html create mode 100644 doc/tutorial/ar01s05.html create mode 100644 doc/tutorial/ar01s06.html create mode 100644 doc/tutorial/ar01s07.html create mode 100644 doc/tutorial/ar01s08.html create mode 100644 doc/tutorial/ar01s09.html create mode 100644 doc/tutorial/customfo.xsl create mode 100644 doc/tutorial/customhtml.xsl create mode 100644 doc/tutorial/images/blank.png create mode 100644 doc/tutorial/images/callouts/1.png create mode 100644 doc/tutorial/images/callouts/10.png create mode 100644 doc/tutorial/images/callouts/2.png create mode 100644 doc/tutorial/images/callouts/3.png create mode 100644 doc/tutorial/images/callouts/4.png create mode 100644 doc/tutorial/images/callouts/5.png create mode 100644 doc/tutorial/images/callouts/6.png create mode 100644 doc/tutorial/images/callouts/7.png create mode 100644 doc/tutorial/images/callouts/8.png create mode 100644 doc/tutorial/images/callouts/9.png create mode 100644 doc/tutorial/images/caution.png create mode 100644 doc/tutorial/images/draft.png create mode 100644 doc/tutorial/images/home.png create mode 100644 doc/tutorial/images/important.png create mode 100644 doc/tutorial/images/next.png create mode 100644 doc/tutorial/images/note.png create mode 100644 doc/tutorial/images/prev.png create mode 100644 doc/tutorial/images/tip.png create mode 100644 doc/tutorial/images/toc-blank.png create mode 100644 doc/tutorial/images/toc-minus.png create mode 100644 doc/tutorial/images/toc-plus.png create mode 100644 doc/tutorial/images/up.png create mode 100644 doc/tutorial/images/warning.png create mode 100644 doc/tutorial/includeaddattribute.c create mode 100644 doc/tutorial/includeaddkeyword.c create mode 100644 doc/tutorial/includeconvert.c create mode 100644 doc/tutorial/includegetattribute.c create mode 100644 doc/tutorial/includekeyword.c create mode 100644 doc/tutorial/includestory.xml create mode 100644 doc/tutorial/includexpath.c create mode 100644 doc/tutorial/index.html create mode 100644 doc/tutorial/ix01.html create mode 100644 doc/tutorial/xmltutorial.pdf create mode 100644 doc/tutorial/xmltutorial.xml create mode 100644 doc/upgrade.html create mode 100644 doc/w3c.png create mode 100644 doc/wiki.xsl create mode 100644 doc/xml.html create mode 100644 doc/xmlcatalog.1 create mode 100644 doc/xmlcatalog_man.html create mode 100644 doc/xmlcatalog_man.xml create mode 100644 doc/xmldtd.html create mode 100644 doc/xmlio.html create mode 100644 doc/xmllint.1 create mode 100644 doc/xmllint.html create mode 100644 doc/xmllint.xml create mode 100644 doc/xmlmem.html create mode 100644 doc/xmlreader.html create mode 100644 doc/xsa.xsl create mode 100644 elfgcchack.h create mode 100644 enc.h create mode 100644 encoding.c create mode 100644 entities.c create mode 100644 error.c create mode 100644 example/Makefile.am create mode 100644 example/gjobread.c create mode 100644 example/gjobs.xml create mode 100755 genChRanges.py create mode 100755 genUnicode.py create mode 100755 gentest.py create mode 100644 global.data create mode 100644 globals.c create mode 100644 hash.c create mode 100644 include/Makefile.am create mode 100644 include/libxml/DOCBparser.h create mode 100644 include/libxml/HTMLparser.h create mode 100644 include/libxml/HTMLtree.h create mode 100644 include/libxml/Makefile.am create mode 100644 include/libxml/SAX.h create mode 100644 include/libxml/SAX2.h create mode 100644 include/libxml/c14n.h create mode 100644 include/libxml/catalog.h create mode 100644 include/libxml/chvalid.h create mode 100644 include/libxml/debugXML.h create mode 100644 include/libxml/dict.h create mode 100644 include/libxml/encoding.h create mode 100644 include/libxml/entities.h create mode 100644 include/libxml/globals.h create mode 100644 include/libxml/hash.h create mode 100644 include/libxml/list.h create mode 100644 include/libxml/nanoftp.h create mode 100644 include/libxml/nanohttp.h create mode 100644 include/libxml/parser.h create mode 100644 include/libxml/parserInternals.h create mode 100644 include/libxml/pattern.h create mode 100644 include/libxml/relaxng.h create mode 100644 include/libxml/schemasInternals.h create mode 100644 include/libxml/schematron.h create mode 100644 include/libxml/threads.h create mode 100644 include/libxml/tree.h create mode 100644 include/libxml/uri.h create mode 100644 include/libxml/valid.h create mode 100644 include/libxml/xinclude.h create mode 100644 include/libxml/xlink.h create mode 100644 include/libxml/xmlIO.h create mode 100644 include/libxml/xmlautomata.h create mode 100644 include/libxml/xmlerror.h create mode 100644 include/libxml/xmlexports.h create mode 100644 include/libxml/xmlmemory.h create mode 100644 include/libxml/xmlmodule.h create mode 100644 include/libxml/xmlreader.h create mode 100644 include/libxml/xmlregexp.h create mode 100644 include/libxml/xmlsave.h create mode 100644 include/libxml/xmlschemas.h create mode 100644 include/libxml/xmlschemastypes.h create mode 100644 include/libxml/xmlstring.h create mode 100644 include/libxml/xmlunicode.h create mode 100644 include/libxml/xmlversion.h.in create mode 100644 include/libxml/xmlwin32version.h create mode 100644 include/libxml/xmlwin32version.h.in create mode 100644 include/libxml/xmlwriter.h create mode 100644 include/libxml/xpath.h create mode 100644 include/libxml/xpathInternals.h create mode 100644 include/libxml/xpointer.h create mode 100644 include/win32config.h create mode 100644 include/wsockcompat.h create mode 100644 legacy.c create mode 100644 libxml-2.0-uninstalled.pc.in create mode 100644 libxml-2.0.pc.in create mode 100644 libxml.3 create mode 100644 libxml.h create mode 100644 libxml.m4 create mode 100644 libxml.spec.in create mode 100644 libxml2-config.cmake.in create mode 100644 libxml2.doap create mode 100644 libxml2.syms create mode 100644 list.c create mode 100644 macos/README create mode 100644 macos/libxml2.mcp.xml.sit.hqx create mode 100644 macos/src/XMLTestPrefix.h create mode 100644 macos/src/XMLTestPrefix2.h create mode 100644 macos/src/config-mac.h create mode 100644 macos/src/libxml2_GUSIConfig.cp create mode 100644 macos/src/macos_main.c create mode 100644 nanoftp.c create mode 100644 nanohttp.c create mode 100644 optim/TOTRY create mode 100644 optim/hash_dict.patch create mode 100644 optim/hash_dict.txt create mode 100644 os400/README400 create mode 100644 os400/dlfcn/dlfcn.c create mode 100644 os400/dlfcn/dlfcn.h create mode 100644 os400/iconv/README.iconv create mode 100644 os400/iconv/bldcsndfa/bldcsndfa.c create mode 100644 os400/iconv/bldcsndfa/ccsid_mibenum.dtd create mode 100644 os400/iconv/bldcsndfa/ccsid_mibenum.xml create mode 100644 os400/iconv/bldcsndfa/character-sets.xhtml create mode 100644 os400/iconv/ianatables.c create mode 100644 os400/iconv/iconv.c create mode 100644 os400/iconv/iconv.h create mode 100644 os400/initscript.sh create mode 100644 os400/libxmlmain.c create mode 100644 os400/libxmlrpg/DOCBparser.rpgle create mode 100644 os400/libxmlrpg/HTMLparser.rpgle create mode 100644 os400/libxmlrpg/HTMLtree.rpgle create mode 100644 os400/libxmlrpg/SAX.rpgle create mode 100644 os400/libxmlrpg/SAX2.rpgle create mode 100644 os400/libxmlrpg/c14n.rpgle create mode 100644 os400/libxmlrpg/catalog.rpgle create mode 100644 os400/libxmlrpg/chvalid.rpgle create mode 100644 os400/libxmlrpg/debugXML.rpgle create mode 100644 os400/libxmlrpg/dict.rpgle create mode 100644 os400/libxmlrpg/encoding.rpgle create mode 100644 os400/libxmlrpg/entities.rpgle create mode 100644 os400/libxmlrpg/globals.rpgle create mode 100644 os400/libxmlrpg/hash.rpgle create mode 100644 os400/libxmlrpg/list.rpgle create mode 100644 os400/libxmlrpg/nanoftp.rpgle create mode 100644 os400/libxmlrpg/nanohttp.rpgle create mode 100644 os400/libxmlrpg/parser.rpgle create mode 100644 os400/libxmlrpg/parserInternals.rpgle create mode 100644 os400/libxmlrpg/pattern.rpgle create mode 100644 os400/libxmlrpg/relaxng.rpgle create mode 100644 os400/libxmlrpg/schemasInternals.rpgle create mode 100644 os400/libxmlrpg/schematron.rpgle create mode 100644 os400/libxmlrpg/threads.rpgle create mode 100644 os400/libxmlrpg/transcode.rpgle create mode 100644 os400/libxmlrpg/tree.rpgle create mode 100644 os400/libxmlrpg/uri.rpgle create mode 100644 os400/libxmlrpg/valid.rpgle create mode 100644 os400/libxmlrpg/xinclude.rpgle create mode 100644 os400/libxmlrpg/xlink.rpgle create mode 100644 os400/libxmlrpg/xmlIO.rpgle create mode 100644 os400/libxmlrpg/xmlTypesC.rpgle create mode 100644 os400/libxmlrpg/xmlautomata.rpgle create mode 100644 os400/libxmlrpg/xmlerror.rpgle create mode 100644 os400/libxmlrpg/xmlexports.rpgle create mode 100644 os400/libxmlrpg/xmlmemory.rpgle create mode 100644 os400/libxmlrpg/xmlmodule.rpgle create mode 100644 os400/libxmlrpg/xmlreader.rpgle create mode 100644 os400/libxmlrpg/xmlregexp.rpgle create mode 100644 os400/libxmlrpg/xmlsave.rpgle create mode 100644 os400/libxmlrpg/xmlschemas.rpgle create mode 100644 os400/libxmlrpg/xmlschemastypes.rpgle create mode 100644 os400/libxmlrpg/xmlstdarg.rpgle create mode 100644 os400/libxmlrpg/xmlstring.rpgle create mode 100644 os400/libxmlrpg/xmlunicode.rpgle create mode 100644 os400/libxmlrpg/xmlversion.rpgle.in create mode 100644 os400/libxmlrpg/xmlwriter.rpgle create mode 100644 os400/libxmlrpg/xpath.rpgle create mode 100644 os400/libxmlrpg/xpathInternals.rpgle create mode 100644 os400/libxmlrpg/xpointer.rpgle create mode 100644 os400/make-bldcsndfa.sh create mode 100644 os400/make-include.sh create mode 100644 os400/make-rpg.sh create mode 100644 os400/make-src.sh create mode 100644 os400/make.sh create mode 100644 os400/os400config.h.in create mode 100644 os400/rpgsupport.c create mode 100644 os400/rpgsupport.h create mode 100644 os400/transcode.c create mode 100644 os400/transcode.h create mode 100644 os400/wrappers.c create mode 100644 os400/wrappers.h create mode 100644 os400/xmlcatalog.cmd create mode 100644 os400/xmlcatlgcl.c create mode 100644 os400/xmllint.cmd create mode 100644 os400/xmllintcl.c create mode 100644 parser.c create mode 100644 parserInternals.c create mode 100644 pattern.c create mode 100644 python/Makefile.am create mode 100644 python/README create mode 100644 python/TODO create mode 100644 python/drv_libxml2.py create mode 100755 python/generator.py create mode 100644 python/libxml.c create mode 100644 python/libxml.py create mode 100644 python/libxml2-python-api.xml create mode 100644 python/libxml_wrap.h create mode 100755 python/setup.py create mode 100755 python/setup.py.in create mode 100644 python/tests/Makefile.am create mode 100755 python/tests/attribs.py create mode 100755 python/tests/build.py create mode 100755 python/tests/compareNodes.py create mode 100755 python/tests/ctxterror.py create mode 100755 python/tests/cutnpaste.py create mode 100755 python/tests/dtdvalid.py create mode 100755 python/tests/error.py create mode 100755 python/tests/inbuf.py create mode 100755 python/tests/indexes.py create mode 100755 python/tests/input_callback.py create mode 100644 python/tests/invalid.xml create mode 100755 python/tests/nsdel.py create mode 100755 python/tests/outbuf.py create mode 100755 python/tests/push.py create mode 100755 python/tests/pushSAX.py create mode 100755 python/tests/pushSAXhtml.py create mode 100755 python/tests/reader.py create mode 100755 python/tests/reader2.py create mode 100755 python/tests/reader3.py create mode 100755 python/tests/reader4.py create mode 100755 python/tests/reader5.py create mode 100755 python/tests/reader6.py create mode 100755 python/tests/reader7.py create mode 100755 python/tests/reader8.py create mode 100755 python/tests/readererr.py create mode 100755 python/tests/readernext.py create mode 100755 python/tests/regexp.py create mode 100755 python/tests/relaxng.py create mode 100755 python/tests/resolver.py create mode 100755 python/tests/schema.py create mode 100755 python/tests/serialize.py create mode 100755 python/tests/sync.py create mode 100644 python/tests/test.dtd create mode 100755 python/tests/thread2.py create mode 100755 python/tests/tst.py create mode 100644 python/tests/tst.xml create mode 100755 python/tests/tstLastError.py create mode 100755 python/tests/tstURI.py create mode 100755 python/tests/tstmem.py create mode 100755 python/tests/tstxpath.py create mode 100644 python/tests/valid.xml create mode 100755 python/tests/validDTD.py create mode 100755 python/tests/validRNG.py create mode 100755 python/tests/validSchemas.py create mode 100755 python/tests/validate.py create mode 100755 python/tests/walker.py create mode 100755 python/tests/xpath.py create mode 100755 python/tests/xpathext.py create mode 100755 python/tests/xpathleak.py create mode 100755 python/tests/xpathns.py create mode 100755 python/tests/xpathret.py create mode 100644 python/types.c create mode 100755 regressions.py create mode 100644 regressions.xml create mode 100644 relaxng.c create mode 100644 result/HTML/53867.html create mode 100644 result/HTML/53867.html.err create mode 100644 result/HTML/53867.html.sax create mode 100644 result/HTML/758605.html create mode 100644 result/HTML/758605.html.err create mode 100644 result/HTML/758605.html.sax create mode 100644 result/HTML/758606.html create mode 100644 result/HTML/758606.html.err create mode 100644 result/HTML/758606.html.sax create mode 100644 result/HTML/758606_2.html create mode 100644 result/HTML/758606_2.html.err create mode 100644 result/HTML/758606_2.html.sax create mode 100644 result/HTML/Down.html create mode 100644 result/HTML/Down.html.err create mode 100644 result/HTML/Down.html.sax create mode 100644 result/HTML/attrents.html create mode 100644 result/HTML/attrents.html.err create mode 100644 result/HTML/attrents.html.sax create mode 100644 result/HTML/autoclose.html create mode 100644 result/HTML/autoclose.html.err create mode 100644 result/HTML/autoclose.html.sax create mode 100644 result/HTML/autoclose2.html create mode 100644 result/HTML/autoclose2.html.err create mode 100644 result/HTML/autoclose2.html.sax create mode 100644 result/HTML/autoclose3.html create mode 100644 result/HTML/autoclose3.html.err create mode 100644 result/HTML/autoclose3.html.sax create mode 100644 result/HTML/cf_128.html create mode 100644 result/HTML/cf_128.html.err create mode 100644 result/HTML/cf_128.html.sax create mode 100644 result/HTML/doc2.htm create mode 100644 result/HTML/doc2.htm.err create mode 100644 result/HTML/doc2.htm.sax create mode 100644 result/HTML/doc3.htm create mode 100644 result/HTML/doc3.htm.err create mode 100644 result/HTML/doc3.htm.sax create mode 100644 result/HTML/entities.html create mode 100644 result/HTML/entities.html.err create mode 100644 result/HTML/entities.html.sax create mode 100644 result/HTML/entities2.html create mode 100644 result/HTML/entities2.html.err create mode 100644 result/HTML/entities2.html.sax create mode 100644 result/HTML/fp40.htm create mode 100644 result/HTML/fp40.htm.err create mode 100644 result/HTML/fp40.htm.sax create mode 100644 result/HTML/html5_enc.html create mode 100644 result/HTML/html5_enc.html.err create mode 100644 result/HTML/html5_enc.html.sax create mode 100644 result/HTML/liclose.html create mode 100644 result/HTML/liclose.html.err create mode 100644 result/HTML/liclose.html.sax create mode 100644 result/HTML/lt.html create mode 100644 result/HTML/lt.html.err create mode 100644 result/HTML/lt.html.sax create mode 100644 result/HTML/noscript.html create mode 100644 result/HTML/noscript.html.err create mode 100644 result/HTML/noscript.html.sax create mode 100644 result/HTML/pre.html create mode 100644 result/HTML/pre.html.err create mode 100644 result/HTML/pre.html.sax create mode 100644 result/HTML/python.html create mode 100644 result/HTML/python.html.err create mode 100644 result/HTML/python.html.sax create mode 100644 result/HTML/reg1.html create mode 100644 result/HTML/reg1.html.err create mode 100644 result/HTML/reg1.html.sax create mode 100644 result/HTML/reg2.html create mode 100644 result/HTML/reg2.html.err create mode 100644 result/HTML/reg2.html.sax create mode 100644 result/HTML/reg3.html create mode 100644 result/HTML/reg3.html.err create mode 100644 result/HTML/reg3.html.sax create mode 100644 result/HTML/reg4.html create mode 100644 result/HTML/reg4.html.err create mode 100644 result/HTML/reg4.html.sax create mode 100644 result/HTML/repeat.html create mode 100644 result/HTML/repeat.html.err create mode 100644 result/HTML/repeat.html.sax create mode 100644 result/HTML/script.html create mode 100644 result/HTML/script.html.err create mode 100644 result/HTML/script.html.sax create mode 100644 result/HTML/script2.html create mode 100644 result/HTML/script2.html.err create mode 100644 result/HTML/script2.html.sax create mode 100644 result/HTML/test2.html create mode 100644 result/HTML/test2.html.err create mode 100644 result/HTML/test2.html.sax create mode 100644 result/HTML/test3.html create mode 100644 result/HTML/test3.html.err create mode 100644 result/HTML/test3.html.sax create mode 100644 result/HTML/utf8bug.html create mode 100644 result/HTML/utf8bug.html.err create mode 100644 result/HTML/utf8bug.html.sax create mode 100644 result/HTML/wired.html create mode 100644 result/HTML/wired.html.err create mode 100644 result/HTML/wired.html.sax create mode 100644 result/SVG/4rects.xml create mode 100644 result/SVG/a-valid.xml create mode 100644 result/SVG/a-wf.xml create mode 100644 result/SVG/bike-errors.xml create mode 100644 result/SVG/bike.xml create mode 100644 result/SVG/circle.xml create mode 100644 result/SVG/defs.xml create mode 100644 result/SVG/desc.xml create mode 100644 result/SVG/ellipse.xml create mode 100644 result/SVG/flower2.xml create mode 100644 result/SVG/gradient.xml create mode 100644 result/SVG/group01.xml create mode 100644 result/SVG/group02.xml create mode 100644 result/SVG/group03.xml create mode 100644 result/SVG/image-valid.xml create mode 100644 result/SVG/image-wf.xml create mode 100644 result/SVG/lin-gradient.xml create mode 100644 result/SVG/marker.xml create mode 100644 result/SVG/mask.xml create mode 100644 result/SVG/mathswitch.xml create mode 100644 result/SVG/parentns.xml create mode 100644 result/SVG/path01.xml create mode 100644 result/SVG/path02.xml create mode 100644 result/SVG/patternfill.xml create mode 100644 result/SVG/polyline.xml create mode 100644 result/SVG/private.xml create mode 100644 result/SVG/rad-gradient.xml create mode 100644 result/SVG/rectangle.xml create mode 100644 result/SVG/richdesc.xml create mode 100644 result/SVG/script.xml create mode 100644 result/SVG/structure01.xml create mode 100644 result/SVG/style.xml create mode 100644 result/SVG/switch.xml create mode 100644 result/SVG/symbol-use.xml create mode 100644 result/SVG/template.xml create mode 100644 result/SVG/text01.xml create mode 100644 result/SVG/text02.xml create mode 100644 result/SVG/text03.xml create mode 100644 result/SVG/toap01.xml create mode 100644 result/SVG/toap02.xml create mode 100644 result/SVG/transform.xml create mode 100644 result/SVG/trivial.xml create mode 100644 result/SVG/twin-gradients.xml create mode 100644 result/SVG/v-template.xml create mode 100644 result/SVG/viewport-nest.xml create mode 100644 result/SVG/viewport-transform.xml create mode 100644 result/SVG/viewport.xml create mode 100644 result/SVG/wf-template.xml create mode 100644 result/URI/smith.uri create mode 100644 result/URI/uri.data create mode 100644 result/VC/AttributeDefaultLegal create mode 100644 result/VC/AttributeDefaultLegal.rdr create mode 100644 result/VC/AttributeNmtokens create mode 100644 result/VC/AttributeNmtokens.rdr create mode 100644 result/VC/DuplicateType create mode 100644 result/VC/DuplicateType.rdr create mode 100644 result/VC/ElementValid create mode 100644 result/VC/ElementValid.rdr create mode 100644 result/VC/ElementValid2 create mode 100644 result/VC/ElementValid2.rdr create mode 100644 result/VC/ElementValid3 create mode 100644 result/VC/ElementValid3.rdr create mode 100644 result/VC/ElementValid4 create mode 100644 result/VC/ElementValid4.rdr create mode 100644 result/VC/ElementValid5 create mode 100644 result/VC/ElementValid5.rdr create mode 100644 result/VC/ElementValid6 create mode 100644 result/VC/ElementValid6.rdr create mode 100644 result/VC/ElementValid7 create mode 100644 result/VC/ElementValid7.rdr create mode 100644 result/VC/ElementValid8 create mode 100644 result/VC/ElementValid8.rdr create mode 100644 result/VC/Enumeration create mode 100644 result/VC/Enumeration.rdr create mode 100644 result/VC/NS1 create mode 100644 result/VC/NS1.rdr create mode 100644 result/VC/NS2 create mode 100644 result/VC/NS2.rdr create mode 100644 result/VC/NS3 create mode 100644 result/VC/NS3.rdr create mode 100644 result/VC/OneID create mode 100644 result/VC/OneID.rdr create mode 100644 result/VC/OneID2 create mode 100644 result/VC/OneID2.rdr create mode 100644 result/VC/OneID3 create mode 100644 result/VC/OneID3.rdr create mode 100644 result/VC/PENesting create mode 100644 result/VC/PENesting.rdr create mode 100644 result/VC/PENesting2 create mode 100644 result/VC/PENesting2.rdr create mode 100644 result/VC/UniqueElementTypeDeclaration create mode 100644 result/VC/UniqueElementTypeDeclaration.rdr create mode 100644 result/VC/UniqueElementTypeDeclaration2 create mode 100644 result/VC/UniqueElementTypeDeclaration2.rdr create mode 100644 result/XInclude/docids.xml create mode 100644 result/XInclude/docids.xml.err create mode 100644 result/XInclude/docids.xml.rdr create mode 100644 result/XInclude/fallback.xml create mode 100644 result/XInclude/fallback.xml.err create mode 100644 result/XInclude/fallback.xml.rdr create mode 100644 result/XInclude/fallback2.xml create mode 100644 result/XInclude/fallback2.xml.err create mode 100644 result/XInclude/fallback2.xml.rdr create mode 100644 result/XInclude/include.xml create mode 100644 result/XInclude/include.xml.err create mode 100644 result/XInclude/include.xml.rdr create mode 100644 result/XInclude/nodes.xml create mode 100644 result/XInclude/nodes.xml.err create mode 100644 result/XInclude/nodes.xml.rdr create mode 100644 result/XInclude/nodes2.xml create mode 100644 result/XInclude/nodes2.xml.err create mode 100644 result/XInclude/nodes2.xml.rdr create mode 100644 result/XInclude/nodes3.xml create mode 100644 result/XInclude/nodes3.xml.err create mode 100644 result/XInclude/nodes3.xml.rdr create mode 100644 result/XInclude/recursive.xml create mode 100644 result/XInclude/recursive.xml.err create mode 100644 result/XInclude/recursive.xml.rdr create mode 100644 result/XInclude/tstencoding.xml create mode 100644 result/XInclude/tstencoding.xml.err create mode 100644 result/XInclude/tstencoding.xml.rdr create mode 100644 result/XInclude/txtinclude.xml create mode 100644 result/XInclude/txtinclude.xml.err create mode 100644 result/XInclude/txtinclude.xml.rdr create mode 100644 result/XPath/expr/base create mode 100644 result/XPath/expr/compare create mode 100644 result/XPath/expr/equality create mode 100644 result/XPath/expr/floats create mode 100644 result/XPath/expr/functions create mode 100644 result/XPath/expr/strings create mode 100644 result/XPath/tests/chaptersbase create mode 100644 result/XPath/tests/chaptersprefol create mode 100644 result/XPath/tests/idsimple create mode 100644 result/XPath/tests/langsimple create mode 100644 result/XPath/tests/mixedpat create mode 100644 result/XPath/tests/nodespat create mode 100644 result/XPath/tests/nssimple create mode 100644 result/XPath/tests/simpleabbr create mode 100644 result/XPath/tests/simplebase create mode 100644 result/XPath/tests/usr1check create mode 100644 result/XPath/tests/vidbase create mode 100644 result/XPath/xptr/chapterschildseq create mode 100644 result/XPath/xptr/chaptersparts create mode 100644 result/XPath/xptr/chaptersrange create mode 100644 result/XPath/xptr/strpoint create mode 100644 result/XPath/xptr/strrange create mode 100644 result/XPath/xptr/strrange2 create mode 100644 result/XPath/xptr/strrange3 create mode 100644 result/XPath/xptr/vidbase create mode 100644 result/XPath/xptr/vidchildseq create mode 100644 result/XPath/xptr/vidparts create mode 100644 result/att1 create mode 100644 result/att1.rde create mode 100644 result/att1.rdr create mode 100644 result/att1.sax create mode 100644 result/att1.sax2 create mode 100644 result/att10 create mode 100644 result/att10.rde create mode 100644 result/att10.rdr create mode 100644 result/att10.sax create mode 100644 result/att10.sax2 create mode 100644 result/att11 create mode 100644 result/att11.rde create mode 100644 result/att11.rdr create mode 100644 result/att11.sax create mode 100644 result/att11.sax2 create mode 100644 result/att2 create mode 100644 result/att2.rde create mode 100644 result/att2.rdr create mode 100644 result/att2.sax create mode 100644 result/att2.sax2 create mode 100644 result/att3 create mode 100644 result/att3.rde create mode 100644 result/att3.rdr create mode 100644 result/att3.sax create mode 100644 result/att3.sax2 create mode 100644 result/att4 create mode 100644 result/att4.rde create mode 100644 result/att4.rdr create mode 100644 result/att4.sax create mode 100644 result/att4.sax2 create mode 100644 result/att5 create mode 100644 result/att5.rde create mode 100644 result/att5.rdr create mode 100644 result/att5.sax create mode 100644 result/att5.sax2 create mode 100644 result/att6 create mode 100644 result/att6.rde create mode 100644 result/att6.rdr create mode 100644 result/att6.sax create mode 100644 result/att6.sax2 create mode 100644 result/att7 create mode 100644 result/att7.rde create mode 100644 result/att7.rdr create mode 100644 result/att7.sax create mode 100644 result/att7.sax2 create mode 100644 result/att8 create mode 100644 result/att8.rde create mode 100644 result/att8.rdr create mode 100644 result/att8.sax create mode 100644 result/att8.sax2 create mode 100644 result/att9 create mode 100644 result/att9.rde create mode 100644 result/att9.rdr create mode 100644 result/att9.sax create mode 100644 result/att9.sax2 create mode 100644 result/attrib.xml create mode 100644 result/attrib.xml.rde create mode 100644 result/attrib.xml.rdr create mode 100644 result/attrib.xml.sax create mode 100644 result/attrib.xml.sax2 create mode 100644 result/automata/a create mode 100644 result/automata/aba create mode 100644 result/automata/abaa create mode 100644 result/automata/abba create mode 100644 result/automata/po create mode 100644 result/badcomment.xml create mode 100644 result/badcomment.xml.rde create mode 100644 result/badcomment.xml.rdr create mode 100644 result/badcomment.xml.sax create mode 100644 result/badcomment.xml.sax2 create mode 100644 result/bigentname.xml create mode 100644 result/bigentname.xml.rde create mode 100644 result/bigentname.xml.rdr create mode 100644 result/bigentname.xml.sax create mode 100644 result/bigentname.xml.sax2 create mode 100644 result/bigname.xml create mode 100644 result/bigname.xml.rde create mode 100644 result/bigname.xml.rdr create mode 100644 result/bigname.xml.sax create mode 100644 result/bigname.xml.sax2 create mode 100644 result/bigname2.xml create mode 100644 result/bigname2.xml.rde create mode 100644 result/bigname2.xml.rdr create mode 100644 result/bigname2.xml.sax create mode 100644 result/bigname2.xml.sax2 create mode 100755 result/c14n/1-1-without-comments/example-1 create mode 100755 result/c14n/1-1-without-comments/example-2 create mode 100755 result/c14n/1-1-without-comments/example-3 create mode 100755 result/c14n/1-1-without-comments/example-4 create mode 100755 result/c14n/1-1-without-comments/example-5 create mode 100755 result/c14n/1-1-without-comments/example-6 create mode 100755 result/c14n/1-1-without-comments/example-7 create mode 100755 result/c14n/1-1-without-comments/example-8 create mode 100644 result/c14n/1-1-without-comments/xmlbase-c14n11spec-102 create mode 100644 result/c14n/1-1-without-comments/xmlbase-c14n11spec2-102 create mode 100644 result/c14n/1-1-without-comments/xmlbase-c14n11spec3-102 create mode 100644 result/c14n/1-1-without-comments/xmlbase-prop-1 create mode 100644 result/c14n/1-1-without-comments/xmlbase-prop-2 create mode 100644 result/c14n/1-1-without-comments/xmlbase-prop-3 create mode 100644 result/c14n/1-1-without-comments/xmlbase-prop-4 create mode 100644 result/c14n/1-1-without-comments/xmlbase-prop-5 create mode 100644 result/c14n/1-1-without-comments/xmlbase-prop-6 create mode 100644 result/c14n/1-1-without-comments/xmlbase-prop-7 create mode 100644 result/c14n/1-1-without-comments/xmlid-prop-1 create mode 100644 result/c14n/1-1-without-comments/xmlid-prop-2 create mode 100644 result/c14n/1-1-without-comments/xmllang-prop-1 create mode 100644 result/c14n/1-1-without-comments/xmllang-prop-2 create mode 100644 result/c14n/1-1-without-comments/xmllang-prop-3 create mode 100644 result/c14n/1-1-without-comments/xmllang-prop-4 create mode 100644 result/c14n/1-1-without-comments/xmlspace-prop-1 create mode 100644 result/c14n/1-1-without-comments/xmlspace-prop-2 create mode 100644 result/c14n/1-1-without-comments/xmlspace-prop-3 create mode 100644 result/c14n/1-1-without-comments/xmlspace-prop-4 create mode 100644 result/c14n/exc-without-comments/merlin-c14n-two-09 create mode 100644 result/c14n/exc-without-comments/merlin-c14n-two-10 create mode 100644 result/c14n/exc-without-comments/merlin-c14n-two-11 create mode 100644 result/c14n/exc-without-comments/merlin-c14n-two-12 create mode 100644 result/c14n/exc-without-comments/merlin-c14n-two-13 create mode 100644 result/c14n/exc-without-comments/merlin-c14n-two-14 create mode 100644 result/c14n/exc-without-comments/merlin-c14n-two-15 create mode 100644 result/c14n/exc-without-comments/merlin-c14n-two-16 create mode 100644 result/c14n/exc-without-comments/merlin-c14n-two-17 create mode 100644 result/c14n/exc-without-comments/merlin-c14n-two-18 create mode 100644 result/c14n/exc-without-comments/merlin-c14n-two-19 create mode 100644 result/c14n/exc-without-comments/merlin-c14n-two-20 create mode 100644 result/c14n/exc-without-comments/merlin-c14n-two-21 create mode 100644 result/c14n/exc-without-comments/merlin-c14n-two-22 create mode 100644 result/c14n/exc-without-comments/merlin-c14n-two-23 create mode 100644 result/c14n/exc-without-comments/merlin-c14n-two-24 create mode 100644 result/c14n/exc-without-comments/merlin-c14n-two-25 create mode 100644 result/c14n/exc-without-comments/merlin-c14n-two-26 create mode 100644 result/c14n/exc-without-comments/test-0 create mode 100644 result/c14n/exc-without-comments/test-1 create mode 100644 result/c14n/exc-without-comments/test-2 create mode 100644 result/c14n/with-comments/example-1 create mode 100644 result/c14n/with-comments/example-2 create mode 100644 result/c14n/with-comments/example-3 create mode 100644 result/c14n/with-comments/example-4 create mode 100644 result/c14n/with-comments/example-5 create mode 100644 result/c14n/with-comments/example-6 create mode 100644 result/c14n/with-comments/example-7 create mode 100644 result/c14n/without-comments/example-1 create mode 100644 result/c14n/without-comments/example-2 create mode 100644 result/c14n/without-comments/example-3 create mode 100644 result/c14n/without-comments/example-4 create mode 100644 result/c14n/without-comments/example-5 create mode 100644 result/c14n/without-comments/example-6 create mode 100644 result/c14n/without-comments/example-7 create mode 100644 result/c14n/without-comments/merlin-c14n-two-00 create mode 100644 result/c14n/without-comments/merlin-c14n-two-01 create mode 100644 result/c14n/without-comments/merlin-c14n-two-02 create mode 100644 result/c14n/without-comments/merlin-c14n-two-03 create mode 100644 result/c14n/without-comments/merlin-c14n-two-04 create mode 100644 result/c14n/without-comments/merlin-c14n-two-05 create mode 100644 result/c14n/without-comments/merlin-c14n-two-06 create mode 100644 result/c14n/without-comments/merlin-c14n-two-07 create mode 100644 result/c14n/without-comments/merlin-c14n-two-08 create mode 100644 result/c14n/without-comments/test-0 create mode 100644 result/c14n/without-comments/test-1 create mode 100644 result/c14n/without-comments/test-2 create mode 100644 result/c14n/without-comments/test-3 create mode 100644 result/catalogs/catal create mode 100644 result/catalogs/docbook create mode 100644 result/catalogs/mycatalog.empty create mode 100644 result/catalogs/mycatalog.full create mode 100644 result/catalogs/registry create mode 100644 result/catalogs/whites create mode 100644 result/catalogs/whitex create mode 100644 result/cdata create mode 100644 result/cdata-2-byte-UTF-8.xml create mode 100644 result/cdata-2-byte-UTF-8.xml.rde create mode 100644 result/cdata-2-byte-UTF-8.xml.rdr create mode 100644 result/cdata-2-byte-UTF-8.xml.sax create mode 100644 result/cdata-2-byte-UTF-8.xml.sax2 create mode 100644 result/cdata-3-byte-UTF-8.xml create mode 100644 result/cdata-3-byte-UTF-8.xml.rde create mode 100644 result/cdata-3-byte-UTF-8.xml.rdr create mode 100644 result/cdata-3-byte-UTF-8.xml.sax create mode 100644 result/cdata-3-byte-UTF-8.xml.sax2 create mode 100644 result/cdata-4-byte-UTF-8.xml create mode 100644 result/cdata-4-byte-UTF-8.xml.rde create mode 100644 result/cdata-4-byte-UTF-8.xml.rdr create mode 100644 result/cdata-4-byte-UTF-8.xml.sax create mode 100644 result/cdata-4-byte-UTF-8.xml.sax2 create mode 100644 result/cdata.rde create mode 100644 result/cdata.rdr create mode 100644 result/cdata.sax create mode 100644 result/cdata.sax2 create mode 100644 result/cdata2 create mode 100644 result/cdata2.rde create mode 100644 result/cdata2.rdr create mode 100644 result/cdata2.sax create mode 100644 result/cdata2.sax2 create mode 100644 result/comment.xml create mode 100644 result/comment.xml.rde create mode 100644 result/comment.xml.rdr create mode 100644 result/comment.xml.sax create mode 100644 result/comment.xml.sax2 create mode 100644 result/comment2.xml create mode 100644 result/comment2.xml.rde create mode 100644 result/comment2.xml.rdr create mode 100644 result/comment2.xml.sax create mode 100644 result/comment2.xml.sax2 create mode 100644 result/comment3.xml create mode 100644 result/comment3.xml.rde create mode 100644 result/comment3.xml.rdr create mode 100644 result/comment3.xml.sax create mode 100644 result/comment3.xml.sax2 create mode 100644 result/comment4.xml create mode 100644 result/comment4.xml.rde create mode 100644 result/comment4.xml.rdr create mode 100644 result/comment4.xml.sax create mode 100644 result/comment4.xml.sax2 create mode 100644 result/comment5.xml create mode 100644 result/comment5.xml.rde create mode 100644 result/comment5.xml.rdr create mode 100644 result/comment5.xml.sax create mode 100644 result/comment5.xml.sax2 create mode 100644 result/comment6.xml create mode 100644 result/comment6.xml.rde create mode 100644 result/comment6.xml.rdr create mode 100644 result/comment6.xml.sax create mode 100644 result/comment6.xml.sax2 create mode 100644 result/dav1 create mode 100644 result/dav1.rde create mode 100644 result/dav1.rdr create mode 100644 result/dav1.sax create mode 100644 result/dav1.sax2 create mode 100644 result/dav10 create mode 100644 result/dav10.rde create mode 100644 result/dav10.rdr create mode 100644 result/dav10.sax create mode 100644 result/dav10.sax2 create mode 100644 result/dav11 create mode 100644 result/dav11.rde create mode 100644 result/dav11.rdr create mode 100644 result/dav11.sax create mode 100644 result/dav11.sax2 create mode 100644 result/dav12 create mode 100644 result/dav12.rde create mode 100644 result/dav12.rdr create mode 100644 result/dav12.sax create mode 100644 result/dav12.sax2 create mode 100644 result/dav13 create mode 100644 result/dav13.rde create mode 100644 result/dav13.rdr create mode 100644 result/dav13.sax create mode 100644 result/dav13.sax2 create mode 100644 result/dav15 create mode 100644 result/dav15.rde create mode 100644 result/dav15.rdr create mode 100644 result/dav15.sax create mode 100644 result/dav15.sax2 create mode 100644 result/dav16 create mode 100644 result/dav16.rde create mode 100644 result/dav16.rdr create mode 100644 result/dav16.sax create mode 100644 result/dav16.sax2 create mode 100644 result/dav17 create mode 100644 result/dav17.rde create mode 100644 result/dav17.rdr create mode 100644 result/dav17.sax create mode 100644 result/dav17.sax2 create mode 100644 result/dav18 create mode 100644 result/dav18.rde create mode 100644 result/dav18.rdr create mode 100644 result/dav18.sax create mode 100644 result/dav18.sax2 create mode 100644 result/dav19 create mode 100644 result/dav19.rde create mode 100644 result/dav19.rdr create mode 100644 result/dav19.sax create mode 100644 result/dav19.sax2 create mode 100644 result/dav2 create mode 100644 result/dav2.rde create mode 100644 result/dav2.rdr create mode 100644 result/dav2.sax create mode 100644 result/dav2.sax2 create mode 100644 result/dav3 create mode 100644 result/dav3.rde create mode 100644 result/dav3.rdr create mode 100644 result/dav3.sax create mode 100644 result/dav3.sax2 create mode 100644 result/dav4 create mode 100644 result/dav4.rde create mode 100644 result/dav4.rdr create mode 100644 result/dav4.sax create mode 100644 result/dav4.sax2 create mode 100644 result/dav5 create mode 100644 result/dav5.rde create mode 100644 result/dav5.rdr create mode 100644 result/dav5.sax create mode 100644 result/dav5.sax2 create mode 100644 result/dav6 create mode 100644 result/dav6.rde create mode 100644 result/dav6.rdr create mode 100644 result/dav6.sax create mode 100644 result/dav6.sax2 create mode 100644 result/dav7 create mode 100644 result/dav7.rde create mode 100644 result/dav7.rdr create mode 100644 result/dav7.sax create mode 100644 result/dav7.sax2 create mode 100644 result/dav8 create mode 100644 result/dav8.rde create mode 100644 result/dav8.rdr create mode 100644 result/dav8.sax create mode 100644 result/dav8.sax2 create mode 100644 result/dav9 create mode 100644 result/dav9.rde create mode 100644 result/dav9.rdr create mode 100644 result/dav9.sax create mode 100644 result/dav9.sax2 create mode 100644 result/defattr.xml create mode 100644 result/defattr.xml.rde create mode 100644 result/defattr.xml.rdr create mode 100644 result/defattr.xml.sax create mode 100644 result/defattr.xml.sax2 create mode 100644 result/defattr2.xml create mode 100644 result/defattr2.xml.rde create mode 100644 result/defattr2.xml.rdr create mode 100644 result/defattr2.xml.sax create mode 100644 result/defattr2.xml.sax2 create mode 100644 result/dia1 create mode 100644 result/dia1.rde create mode 100644 result/dia1.rdr create mode 100644 result/dia1.sax create mode 100644 result/dia1.sax2 create mode 100644 result/dia2 create mode 100644 result/dia2.rde create mode 100644 result/dia2.rdr create mode 100644 result/dia2.sax create mode 100644 result/dia2.sax2 create mode 100644 result/dtd1 create mode 100644 result/dtd1.rde create mode 100644 result/dtd1.rdr create mode 100644 result/dtd1.sax create mode 100644 result/dtd1.sax2 create mode 100644 result/dtd10 create mode 100644 result/dtd10.rde create mode 100644 result/dtd10.rdr create mode 100644 result/dtd10.sax create mode 100644 result/dtd10.sax2 create mode 100644 result/dtd11 create mode 100644 result/dtd11.rde create mode 100644 result/dtd11.rdr create mode 100644 result/dtd11.sax create mode 100644 result/dtd11.sax2 create mode 100644 result/dtd12 create mode 100644 result/dtd12.rde create mode 100644 result/dtd12.rdr create mode 100644 result/dtd12.sax create mode 100644 result/dtd12.sax2 create mode 100644 result/dtd13 create mode 100644 result/dtd13.rde create mode 100644 result/dtd13.rdr create mode 100644 result/dtd13.sax create mode 100644 result/dtd13.sax2 create mode 100644 result/dtd2 create mode 100644 result/dtd2.rde create mode 100644 result/dtd2.rdr create mode 100644 result/dtd2.sax create mode 100644 result/dtd2.sax2 create mode 100644 result/dtd3 create mode 100644 result/dtd3.rde create mode 100644 result/dtd3.rdr create mode 100644 result/dtd3.sax create mode 100644 result/dtd3.sax2 create mode 100644 result/dtd4 create mode 100644 result/dtd4.rde create mode 100644 result/dtd4.rdr create mode 100644 result/dtd4.sax create mode 100644 result/dtd4.sax2 create mode 100644 result/dtd5 create mode 100644 result/dtd5.rde create mode 100644 result/dtd5.rdr create mode 100644 result/dtd5.sax create mode 100644 result/dtd5.sax2 create mode 100644 result/dtd6 create mode 100644 result/dtd6.rde create mode 100644 result/dtd6.rdr create mode 100644 result/dtd6.sax create mode 100644 result/dtd6.sax2 create mode 100644 result/dtd7 create mode 100644 result/dtd7.rde create mode 100644 result/dtd7.rdr create mode 100644 result/dtd7.sax create mode 100644 result/dtd7.sax2 create mode 100644 result/dtd8 create mode 100644 result/dtd8.rde create mode 100644 result/dtd8.rdr create mode 100644 result/dtd8.sax create mode 100644 result/dtd8.sax2 create mode 100644 result/dtd9 create mode 100644 result/dtd9.rde create mode 100644 result/dtd9.rdr create mode 100644 result/dtd9.sax create mode 100644 result/dtd9.sax2 create mode 100644 result/ebcdic_566012.xml create mode 100644 result/ebcdic_566012.xml.rde create mode 100644 result/ebcdic_566012.xml.rdr create mode 100644 result/ebcdic_566012.xml.sax create mode 100644 result/ebcdic_566012.xml.sax2 create mode 100644 result/emptycdata.xml create mode 100644 result/emptycdata.xml.rde create mode 100644 result/emptycdata.xml.rdr create mode 100644 result/emptycdata.xml.sax create mode 100644 result/emptycdata.xml.sax2 create mode 100644 result/ent1 create mode 100644 result/ent1.rde create mode 100644 result/ent1.rdr create mode 100644 result/ent1.sax create mode 100644 result/ent1.sax2 create mode 100644 result/ent10 create mode 100644 result/ent10.rde create mode 100644 result/ent10.rdr create mode 100644 result/ent10.sax create mode 100644 result/ent10.sax2 create mode 100644 result/ent11 create mode 100644 result/ent11.rde create mode 100644 result/ent11.rdr create mode 100644 result/ent11.sax create mode 100644 result/ent11.sax2 create mode 100644 result/ent12 create mode 100644 result/ent12.rde create mode 100644 result/ent12.rdr create mode 100644 result/ent12.sax create mode 100644 result/ent12.sax2 create mode 100644 result/ent13 create mode 100644 result/ent13.rde create mode 100644 result/ent13.rdr create mode 100644 result/ent13.sax create mode 100644 result/ent13.sax2 create mode 100644 result/ent2 create mode 100644 result/ent2.rde create mode 100644 result/ent2.rdr create mode 100644 result/ent2.sax create mode 100644 result/ent2.sax2 create mode 100644 result/ent3 create mode 100644 result/ent3.rde create mode 100644 result/ent3.rdr create mode 100644 result/ent3.sax create mode 100644 result/ent3.sax2 create mode 100644 result/ent4 create mode 100644 result/ent4.rde create mode 100644 result/ent4.rdr create mode 100644 result/ent4.sax create mode 100644 result/ent4.sax2 create mode 100644 result/ent5 create mode 100644 result/ent5.rde create mode 100644 result/ent5.rdr create mode 100644 result/ent5.sax create mode 100644 result/ent5.sax2 create mode 100644 result/ent6 create mode 100644 result/ent6.rde create mode 100644 result/ent6.rdr create mode 100644 result/ent6.sax create mode 100644 result/ent6.sax2 create mode 100644 result/ent7 create mode 100644 result/ent7.rde create mode 100644 result/ent7.rdr create mode 100644 result/ent7.sax create mode 100644 result/ent7.sax2 create mode 100644 result/ent8 create mode 100644 result/ent8.rde create mode 100644 result/ent8.rdr create mode 100644 result/ent8.sax create mode 100644 result/ent8.sax2 create mode 100644 result/ent9 create mode 100644 result/ent9.rde create mode 100644 result/ent9.rdr create mode 100644 result/ent9.sax create mode 100644 result/ent9.sax2 create mode 100644 result/ent_738805.xml create mode 100644 result/ent_738805.xml.rde create mode 100644 result/ent_738805.xml.rdr create mode 100644 result/ent_738805.xml.sax create mode 100644 result/ent_738805.xml.sax2 create mode 100644 result/errors/754946.xml create mode 100644 result/errors/754946.xml.err create mode 100644 result/errors/754946.xml.str create mode 100644 result/errors/754947.xml create mode 100644 result/errors/754947.xml.err create mode 100644 result/errors/754947.xml.str create mode 100644 result/errors/758588.xml create mode 100644 result/errors/758588.xml.err create mode 100644 result/errors/758588.xml.str create mode 100644 result/errors/759020.xml create mode 100644 result/errors/759020.xml.err create mode 100644 result/errors/759020.xml.str create mode 100644 result/errors/759398.xml create mode 100644 result/errors/759398.xml.err create mode 100644 result/errors/759398.xml.str create mode 100644 result/errors/759573-2.xml create mode 100644 result/errors/759573-2.xml.err create mode 100644 result/errors/759573-2.xml.str create mode 100644 result/errors/759573.xml create mode 100644 result/errors/759573.xml.err create mode 100644 result/errors/759573.xml.str create mode 100644 result/errors/attr1.xml create mode 100644 result/errors/attr1.xml.err create mode 100644 result/errors/attr1.xml.str create mode 100644 result/errors/attr2.xml create mode 100644 result/errors/attr2.xml.err create mode 100644 result/errors/attr2.xml.str create mode 100644 result/errors/attr3.xml create mode 100644 result/errors/attr3.xml.err create mode 100644 result/errors/attr3.xml.str create mode 100644 result/errors/attr4.xml create mode 100644 result/errors/attr4.xml.err create mode 100644 result/errors/attr4.xml.str create mode 100644 result/errors/cdata.xml create mode 100644 result/errors/cdata.xml.err create mode 100644 result/errors/cdata.xml.str create mode 100644 result/errors/charref1.xml create mode 100644 result/errors/charref1.xml.err create mode 100644 result/errors/charref1.xml.str create mode 100644 result/errors/comment1.xml create mode 100644 result/errors/comment1.xml.err create mode 100644 result/errors/comment1.xml.str create mode 100644 result/errors/content1.xml create mode 100644 result/errors/content1.xml.err create mode 100644 result/errors/content1.xml.str create mode 100644 result/errors/extparsedent.xml create mode 100644 result/errors/extparsedent.xml.err create mode 100644 result/errors/extparsedent.xml.str create mode 100644 result/errors/name.xml create mode 100644 result/errors/name.xml.err create mode 100644 result/errors/name.xml.str create mode 100644 result/errors/name2.xml create mode 100644 result/errors/name2.xml.err create mode 100644 result/errors/name2.xml.str create mode 100644 result/eve.xml create mode 100644 result/eve.xml.rde create mode 100644 result/eve.xml.rdr create mode 100644 result/eve.xml.sax create mode 100644 result/eve.xml.sax2 create mode 100644 result/example.dtd create mode 100644 result/expr/base create mode 100644 result/intsubset.xml create mode 100644 result/intsubset.xml.rde create mode 100644 result/intsubset.xml.rdr create mode 100644 result/intsubset.xml.sax create mode 100644 result/intsubset.xml.sax2 create mode 100644 result/intsubset2.xml create mode 100644 result/intsubset2.xml.rde create mode 100644 result/intsubset2.xml.rdr create mode 100644 result/intsubset2.xml.sax create mode 100644 result/intsubset2.xml.sax2 create mode 100644 result/isolat1 create mode 100644 result/isolat1.rde create mode 100644 result/isolat1.rdr create mode 100644 result/isolat1.sax create mode 100644 result/isolat1.sax2 create mode 100644 result/isolat2 create mode 100644 result/isolat2.rde create mode 100644 result/isolat2.rdr create mode 100644 result/isolat2.sax create mode 100644 result/isolat2.sax2 create mode 100644 result/isolat3 create mode 100644 result/isolat3.rde create mode 100644 result/isolat3.rdr create mode 100644 result/isolat3.sax create mode 100644 result/isolat3.sax2 create mode 100644 result/japancrlf.xml create mode 100644 result/japancrlf.xml.rde create mode 100644 result/japancrlf.xml.rdr create mode 100644 result/japancrlf.xml.sax create mode 100644 result/japancrlf.xml.sax2 create mode 100644 result/namespaces/err_0.xml create mode 100644 result/namespaces/err_0.xml.err create mode 100644 result/namespaces/err_1.xml create mode 100644 result/namespaces/err_1.xml.err create mode 100644 result/namespaces/err_10.xml create mode 100644 result/namespaces/err_10.xml.err create mode 100644 result/namespaces/err_11.xml create mode 100644 result/namespaces/err_11.xml.err create mode 100644 result/namespaces/err_2.xml create mode 100644 result/namespaces/err_2.xml.err create mode 100644 result/namespaces/err_3.xml create mode 100644 result/namespaces/err_3.xml.err create mode 100644 result/namespaces/err_4.xml create mode 100644 result/namespaces/err_4.xml.err create mode 100644 result/namespaces/err_5.xml create mode 100644 result/namespaces/err_5.xml.err create mode 100644 result/namespaces/err_6.xml create mode 100644 result/namespaces/err_6.xml.err create mode 100644 result/namespaces/err_7.xml create mode 100644 result/namespaces/err_7.xml.err create mode 100644 result/namespaces/err_8.xml create mode 100644 result/namespaces/err_8.xml.err create mode 100644 result/namespaces/err_9.xml create mode 100644 result/namespaces/err_9.xml.err create mode 100644 result/noent/att1 create mode 100644 result/noent/att10 create mode 100644 result/noent/att11 create mode 100644 result/noent/att2 create mode 100644 result/noent/att3 create mode 100644 result/noent/att4 create mode 100644 result/noent/att5 create mode 100644 result/noent/att6 create mode 100644 result/noent/att7 create mode 100644 result/noent/att8 create mode 100644 result/noent/att9 create mode 100644 result/noent/attrib.xml create mode 100644 result/noent/badcomment.xml create mode 100644 result/noent/bigentname.xml create mode 100644 result/noent/bigname.xml create mode 100644 result/noent/bigname2.xml create mode 100644 result/noent/cdata create mode 100644 result/noent/cdata-2-byte-UTF-8.xml create mode 100644 result/noent/cdata-3-byte-UTF-8.xml create mode 100644 result/noent/cdata-4-byte-UTF-8.xml create mode 100644 result/noent/cdata2 create mode 100644 result/noent/comment.xml create mode 100644 result/noent/comment2.xml create mode 100644 result/noent/comment3.xml create mode 100644 result/noent/comment4.xml create mode 100644 result/noent/comment5.xml create mode 100644 result/noent/comment6.xml create mode 100644 result/noent/dav1 create mode 100644 result/noent/dav10 create mode 100644 result/noent/dav11 create mode 100644 result/noent/dav12 create mode 100644 result/noent/dav13 create mode 100644 result/noent/dav15 create mode 100644 result/noent/dav16 create mode 100644 result/noent/dav17 create mode 100644 result/noent/dav18 create mode 100644 result/noent/dav19 create mode 100644 result/noent/dav2 create mode 100644 result/noent/dav3 create mode 100644 result/noent/dav4 create mode 100644 result/noent/dav5 create mode 100644 result/noent/dav6 create mode 100644 result/noent/dav7 create mode 100644 result/noent/dav8 create mode 100644 result/noent/dav9 create mode 100644 result/noent/defattr.xml create mode 100644 result/noent/defattr2.xml create mode 100644 result/noent/dia1 create mode 100644 result/noent/dia2 create mode 100644 result/noent/dtd1 create mode 100644 result/noent/dtd10 create mode 100644 result/noent/dtd11 create mode 100644 result/noent/dtd12 create mode 100644 result/noent/dtd13 create mode 100644 result/noent/dtd2 create mode 100644 result/noent/dtd3 create mode 100644 result/noent/dtd4 create mode 100644 result/noent/dtd5 create mode 100644 result/noent/dtd6 create mode 100644 result/noent/dtd7 create mode 100644 result/noent/dtd8 create mode 100644 result/noent/dtd9 create mode 100644 result/noent/ebcdic_566012.xml create mode 100644 result/noent/emptycdata.xml create mode 100644 result/noent/ent1 create mode 100644 result/noent/ent10 create mode 100644 result/noent/ent11 create mode 100644 result/noent/ent12 create mode 100644 result/noent/ent13 create mode 100644 result/noent/ent2 create mode 100644 result/noent/ent3 create mode 100644 result/noent/ent4 create mode 100644 result/noent/ent5 create mode 100644 result/noent/ent6 create mode 100644 result/noent/ent7 create mode 100644 result/noent/ent8 create mode 100644 result/noent/ent9 create mode 100644 result/noent/ent_738805.xml create mode 100644 result/noent/eve.xml create mode 100644 result/noent/intsubset.xml create mode 100644 result/noent/intsubset2.xml create mode 100644 result/noent/isolat1 create mode 100644 result/noent/isolat2 create mode 100644 result/noent/isolat3 create mode 100644 result/noent/japancrlf.xml create mode 100644 result/noent/ns create mode 100644 result/noent/ns2 create mode 100644 result/noent/ns3 create mode 100644 result/noent/ns4 create mode 100644 result/noent/ns5 create mode 100644 result/noent/ns6 create mode 100644 result/noent/ns7 create mode 100644 result/noent/nsclean.xml create mode 100644 result/noent/p3p create mode 100644 result/noent/pi.xml create mode 100644 result/noent/pi2.xml create mode 100644 result/noent/rdf1 create mode 100644 result/noent/rdf2 create mode 100644 result/noent/slashdot.rdf create mode 100644 result/noent/slashdot.xml create mode 100644 result/noent/slashdot16.xml create mode 100644 result/noent/svg1 create mode 100644 result/noent/svg2 create mode 100644 result/noent/svg3 create mode 100644 result/noent/title.xml create mode 100644 result/noent/tstblanks.xml create mode 100644 result/noent/utf16bebom.xml create mode 100644 result/noent/utf16bom.xml create mode 100644 result/noent/utf16lebom.xml create mode 100644 result/noent/utf8bom.xml create mode 100644 result/noent/wap.xml create mode 100644 result/noent/winblanks.xml create mode 100644 result/noent/wml.xml create mode 100644 result/noent/xhtml1 create mode 100644 result/noent/xhtmlcomp create mode 100644 result/noent/xml1 create mode 100644 result/noent/xml2 create mode 100644 result/ns create mode 100644 result/ns.rde create mode 100644 result/ns.rdr create mode 100644 result/ns.sax create mode 100644 result/ns.sax2 create mode 100644 result/ns2 create mode 100644 result/ns2.rde create mode 100644 result/ns2.rdr create mode 100644 result/ns2.sax create mode 100644 result/ns2.sax2 create mode 100644 result/ns3 create mode 100644 result/ns3.rde create mode 100644 result/ns3.rdr create mode 100644 result/ns3.sax create mode 100644 result/ns3.sax2 create mode 100644 result/ns4 create mode 100644 result/ns4.rde create mode 100644 result/ns4.rdr create mode 100644 result/ns4.sax create mode 100644 result/ns4.sax2 create mode 100644 result/ns5 create mode 100644 result/ns5.rde create mode 100644 result/ns5.rdr create mode 100644 result/ns5.sax create mode 100644 result/ns5.sax2 create mode 100644 result/ns6 create mode 100644 result/ns6.rde create mode 100644 result/ns6.rdr create mode 100644 result/ns6.sax create mode 100644 result/ns6.sax2 create mode 100644 result/ns7 create mode 100644 result/ns7.rde create mode 100644 result/ns7.rdr create mode 100644 result/ns7.sax create mode 100644 result/ns7.sax2 create mode 100644 result/nsclean.xml create mode 100644 result/nsclean.xml.rde create mode 100644 result/nsclean.xml.rdr create mode 100644 result/nsclean.xml.sax create mode 100644 result/nsclean.xml.sax2 create mode 100644 result/p3p create mode 100644 result/p3p.rde create mode 100644 result/p3p.rdr create mode 100644 result/p3p.sax create mode 100644 result/p3p.sax2 create mode 100644 result/pattern/conj create mode 100644 result/pattern/multiple create mode 100644 result/pattern/namespaces create mode 100644 result/pattern/simple create mode 100644 result/pi.xml create mode 100644 result/pi.xml.rde create mode 100644 result/pi.xml.rdr create mode 100644 result/pi.xml.sax create mode 100644 result/pi.xml.sax2 create mode 100644 result/pi2.xml create mode 100644 result/pi2.xml.rde create mode 100644 result/pi2.xml.rdr create mode 100644 result/pi2.xml.sax create mode 100644 result/pi2.xml.sax2 create mode 100644 result/rdf1 create mode 100644 result/rdf1.rde create mode 100644 result/rdf1.rdr create mode 100644 result/rdf1.sax create mode 100644 result/rdf1.sax2 create mode 100644 result/rdf2 create mode 100644 result/rdf2.rde create mode 100644 result/rdf2.rdr create mode 100644 result/rdf2.sax create mode 100644 result/rdf2.sax2 create mode 100644 result/regexp/branch create mode 100644 result/regexp/bug316338 create mode 100644 result/regexp/bug420596 create mode 100644 result/regexp/content create mode 100644 result/regexp/hard create mode 100644 result/regexp/ncname create mode 100644 result/regexp/ranges create mode 100644 result/regexp/ranges2 create mode 100644 result/regexp/xpath create mode 100644 result/relaxng/302836_0 create mode 100644 result/relaxng/302836_0.err create mode 100644 result/relaxng/302836_err create mode 100644 result/relaxng/302836_valid create mode 100644 result/relaxng/307377_0 create mode 100644 result/relaxng/307377_0.err create mode 100644 result/relaxng/307377_1 create mode 100644 result/relaxng/307377_1.err create mode 100644 result/relaxng/307377_2 create mode 100644 result/relaxng/307377_2.err create mode 100644 result/relaxng/307377_err create mode 100644 result/relaxng/307377_valid create mode 100644 result/relaxng/492317_0 create mode 100644 result/relaxng/492317_0.err create mode 100644 result/relaxng/492317_1 create mode 100644 result/relaxng/492317_1.err create mode 100644 result/relaxng/492317_2 create mode 100644 result/relaxng/492317_2.err create mode 100644 result/relaxng/492317_err create mode 100644 result/relaxng/492317_valid create mode 100644 result/relaxng/558452_0 create mode 100644 result/relaxng/558452_0.err create mode 100644 result/relaxng/558452_1 create mode 100644 result/relaxng/558452_1.err create mode 100644 result/relaxng/558452_2 create mode 100644 result/relaxng/558452_2.err create mode 100644 result/relaxng/558452_3 create mode 100644 result/relaxng/558452_3.err create mode 100644 result/relaxng/558452_4 create mode 100644 result/relaxng/558452_4.err create mode 100644 result/relaxng/558452_err create mode 100644 result/relaxng/558452_valid create mode 100644 result/relaxng/565219_0 create mode 100644 result/relaxng/565219_0.err create mode 100644 result/relaxng/565219_1 create mode 100644 result/relaxng/565219_1.err create mode 100644 result/relaxng/565219_2 create mode 100644 result/relaxng/565219_2.err create mode 100644 result/relaxng/565219_err create mode 100644 result/relaxng/565219_valid create mode 100644 result/relaxng/595792-ext_err create mode 100644 result/relaxng/595792-ext_valid create mode 100644 result/relaxng/595792_0 create mode 100644 result/relaxng/595792_0.err create mode 100644 result/relaxng/595792_err create mode 100644 result/relaxng/595792_valid create mode 100644 result/relaxng/710744_1 create mode 100644 result/relaxng/710744_1.err create mode 100644 result/relaxng/710744_2 create mode 100644 result/relaxng/710744_2.err create mode 100644 result/relaxng/710744_err create mode 100644 result/relaxng/710744_valid create mode 100644 result/relaxng/OpenDocumentSub_0 create mode 100644 result/relaxng/OpenDocumentSub_0.err create mode 100644 result/relaxng/OpenDocumentSub_err create mode 100644 result/relaxng/OpenDocumentSub_valid create mode 100644 result/relaxng/addressBook_err create mode 100644 result/relaxng/addressBook_valid create mode 100644 result/relaxng/choice0_0 create mode 100644 result/relaxng/choice0_0.err create mode 100644 result/relaxng/choice0_1 create mode 100644 result/relaxng/choice0_1.err create mode 100644 result/relaxng/choice0_2 create mode 100644 result/relaxng/choice0_2.err create mode 100644 result/relaxng/choice0_3 create mode 100644 result/relaxng/choice0_3.err create mode 100644 result/relaxng/choice0_4 create mode 100644 result/relaxng/choice0_4.err create mode 100644 result/relaxng/choice0_5 create mode 100644 result/relaxng/choice0_5.err create mode 100644 result/relaxng/choice0_6 create mode 100644 result/relaxng/choice0_6.err create mode 100644 result/relaxng/choice0_7 create mode 100644 result/relaxng/choice0_7.err create mode 100644 result/relaxng/choice0_8 create mode 100644 result/relaxng/choice0_8.err create mode 100644 result/relaxng/choice0_err create mode 100644 result/relaxng/choice0_valid create mode 100644 result/relaxng/compare0_0 create mode 100644 result/relaxng/compare0_0.err create mode 100644 result/relaxng/compare0_err create mode 100644 result/relaxng/compare0_valid create mode 100644 result/relaxng/comps_0 create mode 100644 result/relaxng/comps_0.err create mode 100644 result/relaxng/comps_err create mode 100644 result/relaxng/comps_valid create mode 100644 result/relaxng/demo2_err create mode 100644 result/relaxng/demo2_valid create mode 100644 result/relaxng/demo3_err create mode 100644 result/relaxng/demo3_valid create mode 100644 result/relaxng/demo_err create mode 100644 result/relaxng/demo_valid create mode 100644 result/relaxng/docbook_0 create mode 100644 result/relaxng/docbook_0.err create mode 100644 result/relaxng/docbook_err create mode 100644 result/relaxng/docbook_valid create mode 100644 result/relaxng/empty0_0 create mode 100644 result/relaxng/empty0_0.err create mode 100644 result/relaxng/empty0_err create mode 100644 result/relaxng/empty0_valid create mode 100644 result/relaxng/empty1_0 create mode 100644 result/relaxng/empty1_0.err create mode 100644 result/relaxng/empty1_1 create mode 100644 result/relaxng/empty1_1.err create mode 100644 result/relaxng/empty1_err create mode 100644 result/relaxng/empty1_valid create mode 100644 result/relaxng/inline2_err create mode 100644 result/relaxng/inline2_valid create mode 100644 result/relaxng/inline3_err create mode 100644 result/relaxng/inline3_valid create mode 100644 result/relaxng/inline_err create mode 100644 result/relaxng/inline_valid create mode 100644 result/relaxng/interleave0_0_err create mode 100644 result/relaxng/interleave0_0_valid create mode 100644 result/relaxng/interleave1_0_err create mode 100644 result/relaxng/interleave1_0_valid create mode 100644 result/relaxng/libvirt_0 create mode 100644 result/relaxng/libvirt_0.err create mode 100644 result/relaxng/libvirt_err create mode 100644 result/relaxng/libvirt_valid create mode 100644 result/relaxng/list_0 create mode 100644 result/relaxng/list_0.err create mode 100644 result/relaxng/list_1 create mode 100644 result/relaxng/list_1.err create mode 100644 result/relaxng/list_err create mode 100644 result/relaxng/list_valid create mode 100644 result/relaxng/pattern1_err create mode 100644 result/relaxng/pattern1_valid create mode 100644 result/relaxng/pattern2_err create mode 100644 result/relaxng/pattern2_valid create mode 100644 result/relaxng/pattern3_1 create mode 100644 result/relaxng/pattern3_1.err create mode 100644 result/relaxng/proofsystem_err create mode 100644 result/relaxng/proofsystem_valid create mode 100644 result/relaxng/rngbug-001_err create mode 100644 result/relaxng/rngbug-001_valid create mode 100644 result/relaxng/spec1_1 create mode 100644 result/relaxng/spec1_1.err create mode 100644 result/relaxng/spec1_err create mode 100644 result/relaxng/spec1_valid create mode 100644 result/relaxng/spec_0 create mode 100644 result/relaxng/spec_0.err create mode 100644 result/relaxng/spec_err create mode 100644 result/relaxng/spec_valid create mode 100644 result/relaxng/table_err create mode 100644 result/relaxng/table_valid create mode 100644 result/relaxng/tutor10_10_1 create mode 100644 result/relaxng/tutor10_10_1.err create mode 100644 result/relaxng/tutor10_10_err create mode 100644 result/relaxng/tutor10_10_valid create mode 100644 result/relaxng/tutor10_1_1 create mode 100644 result/relaxng/tutor10_1_1.err create mode 100644 result/relaxng/tutor10_1_2 create mode 100644 result/relaxng/tutor10_1_2.err create mode 100644 result/relaxng/tutor10_1_3 create mode 100644 result/relaxng/tutor10_1_3.err create mode 100644 result/relaxng/tutor10_1_4 create mode 100644 result/relaxng/tutor10_1_4.err create mode 100644 result/relaxng/tutor10_1_5 create mode 100644 result/relaxng/tutor10_1_5.err create mode 100644 result/relaxng/tutor10_1_6 create mode 100644 result/relaxng/tutor10_1_6.err create mode 100644 result/relaxng/tutor10_1_err create mode 100644 result/relaxng/tutor10_1_valid create mode 100644 result/relaxng/tutor10_2_1 create mode 100644 result/relaxng/tutor10_2_1.err create mode 100644 result/relaxng/tutor10_2_2 create mode 100644 result/relaxng/tutor10_2_2.err create mode 100644 result/relaxng/tutor10_2_3 create mode 100644 result/relaxng/tutor10_2_3.err create mode 100644 result/relaxng/tutor10_2_4 create mode 100644 result/relaxng/tutor10_2_4.err create mode 100644 result/relaxng/tutor10_2_err create mode 100644 result/relaxng/tutor10_2_valid create mode 100644 result/relaxng/tutor10_3_1 create mode 100644 result/relaxng/tutor10_3_1.err create mode 100644 result/relaxng/tutor10_3_err create mode 100644 result/relaxng/tutor10_3_valid create mode 100644 result/relaxng/tutor10_4_1 create mode 100644 result/relaxng/tutor10_4_1.err create mode 100644 result/relaxng/tutor10_4_err create mode 100644 result/relaxng/tutor10_4_valid create mode 100644 result/relaxng/tutor10_5_1 create mode 100644 result/relaxng/tutor10_5_1.err create mode 100644 result/relaxng/tutor10_5_err create mode 100644 result/relaxng/tutor10_5_valid create mode 100644 result/relaxng/tutor10_6_1 create mode 100644 result/relaxng/tutor10_6_1.err create mode 100644 result/relaxng/tutor10_6_err create mode 100644 result/relaxng/tutor10_6_valid create mode 100644 result/relaxng/tutor10_7_1 create mode 100644 result/relaxng/tutor10_7_1.err create mode 100644 result/relaxng/tutor10_7_2 create mode 100644 result/relaxng/tutor10_7_2.err create mode 100644 result/relaxng/tutor10_7_3 create mode 100644 result/relaxng/tutor10_7_3.err create mode 100644 result/relaxng/tutor10_7_err create mode 100644 result/relaxng/tutor10_7_valid create mode 100644 result/relaxng/tutor10_8_1 create mode 100644 result/relaxng/tutor10_8_1.err create mode 100644 result/relaxng/tutor10_8_2 create mode 100644 result/relaxng/tutor10_8_2.err create mode 100644 result/relaxng/tutor10_8_3 create mode 100644 result/relaxng/tutor10_8_3.err create mode 100644 result/relaxng/tutor10_8_err create mode 100644 result/relaxng/tutor10_8_valid create mode 100644 result/relaxng/tutor10_9_1 create mode 100644 result/relaxng/tutor10_9_1.err create mode 100644 result/relaxng/tutor10_9_err create mode 100644 result/relaxng/tutor10_9_valid create mode 100644 result/relaxng/tutor11_1_1 create mode 100644 result/relaxng/tutor11_1_1.err create mode 100644 result/relaxng/tutor11_1_2 create mode 100644 result/relaxng/tutor11_1_2.err create mode 100644 result/relaxng/tutor11_1_3 create mode 100644 result/relaxng/tutor11_1_3.err create mode 100644 result/relaxng/tutor11_1_err create mode 100644 result/relaxng/tutor11_1_valid create mode 100644 result/relaxng/tutor11_2_1 create mode 100644 result/relaxng/tutor11_2_1.err create mode 100644 result/relaxng/tutor11_2_2 create mode 100644 result/relaxng/tutor11_2_2.err create mode 100644 result/relaxng/tutor11_2_3 create mode 100644 result/relaxng/tutor11_2_3.err create mode 100644 result/relaxng/tutor11_2_err create mode 100644 result/relaxng/tutor11_2_valid create mode 100644 result/relaxng/tutor11_3_1 create mode 100644 result/relaxng/tutor11_3_1.err create mode 100644 result/relaxng/tutor11_3_err create mode 100644 result/relaxng/tutor11_3_valid create mode 100644 result/relaxng/tutor11_4_1 create mode 100644 result/relaxng/tutor11_4_1.err create mode 100644 result/relaxng/tutor11_4_err create mode 100644 result/relaxng/tutor11_4_valid create mode 100644 result/relaxng/tutor12_1_1 create mode 100644 result/relaxng/tutor12_1_1.err create mode 100644 result/relaxng/tutor12_1_err create mode 100644 result/relaxng/tutor12_1_valid create mode 100644 result/relaxng/tutor13_1_1 create mode 100644 result/relaxng/tutor13_1_1.err create mode 100644 result/relaxng/tutor13_1_err create mode 100644 result/relaxng/tutor13_1_valid create mode 100644 result/relaxng/tutor14_1_err create mode 100644 result/relaxng/tutor14_1_valid create mode 100644 result/relaxng/tutor1_1_1 create mode 100644 result/relaxng/tutor1_1_1.err create mode 100644 result/relaxng/tutor1_1_err create mode 100644 result/relaxng/tutor1_1_valid create mode 100644 result/relaxng/tutor1_2_1 create mode 100644 result/relaxng/tutor1_2_1.err create mode 100644 result/relaxng/tutor1_2_err create mode 100644 result/relaxng/tutor1_2_valid create mode 100644 result/relaxng/tutor1_3_1 create mode 100644 result/relaxng/tutor1_3_1.err create mode 100644 result/relaxng/tutor1_3_err create mode 100644 result/relaxng/tutor1_3_valid create mode 100644 result/relaxng/tutor1_4_1 create mode 100644 result/relaxng/tutor1_4_1.err create mode 100644 result/relaxng/tutor1_4_err create mode 100644 result/relaxng/tutor1_4_valid create mode 100644 result/relaxng/tutor2_1_1 create mode 100644 result/relaxng/tutor2_1_1.err create mode 100644 result/relaxng/tutor2_1_err create mode 100644 result/relaxng/tutor2_1_valid create mode 100644 result/relaxng/tutor3_1_1 create mode 100644 result/relaxng/tutor3_1_1.err create mode 100644 result/relaxng/tutor3_1_2 create mode 100644 result/relaxng/tutor3_1_2.err create mode 100644 result/relaxng/tutor3_1_err create mode 100644 result/relaxng/tutor3_1_valid create mode 100644 result/relaxng/tutor3_2_1 create mode 100644 result/relaxng/tutor3_2_1.err create mode 100644 result/relaxng/tutor3_2_err create mode 100644 result/relaxng/tutor3_2_valid create mode 100644 result/relaxng/tutor3_3_1 create mode 100644 result/relaxng/tutor3_3_1.err create mode 100644 result/relaxng/tutor3_3_err create mode 100644 result/relaxng/tutor3_3_valid create mode 100644 result/relaxng/tutor3_4_1 create mode 100644 result/relaxng/tutor3_4_1.err create mode 100644 result/relaxng/tutor3_4_err create mode 100644 result/relaxng/tutor3_4_valid create mode 100644 result/relaxng/tutor3_5_1 create mode 100644 result/relaxng/tutor3_5_1.err create mode 100644 result/relaxng/tutor3_5_2 create mode 100644 result/relaxng/tutor3_5_2.err create mode 100644 result/relaxng/tutor3_5_err create mode 100644 result/relaxng/tutor3_5_valid create mode 100644 result/relaxng/tutor3_6_1 create mode 100644 result/relaxng/tutor3_6_1.err create mode 100644 result/relaxng/tutor3_6_err create mode 100644 result/relaxng/tutor3_6_valid create mode 100644 result/relaxng/tutor3_7_1 create mode 100644 result/relaxng/tutor3_7_1.err create mode 100644 result/relaxng/tutor3_7_err create mode 100644 result/relaxng/tutor3_7_valid create mode 100644 result/relaxng/tutor3_8_1 create mode 100644 result/relaxng/tutor3_8_1.err create mode 100644 result/relaxng/tutor3_8_err create mode 100644 result/relaxng/tutor3_8_valid create mode 100644 result/relaxng/tutor3_9_1 create mode 100644 result/relaxng/tutor3_9_1.err create mode 100644 result/relaxng/tutor3_9_err create mode 100644 result/relaxng/tutor3_9_valid create mode 100644 result/relaxng/tutor4_1_1 create mode 100644 result/relaxng/tutor4_1_1.err create mode 100644 result/relaxng/tutor4_1_err create mode 100644 result/relaxng/tutor4_1_valid create mode 100644 result/relaxng/tutor4_2_1 create mode 100644 result/relaxng/tutor4_2_1.err create mode 100644 result/relaxng/tutor4_2_err create mode 100644 result/relaxng/tutor4_2_valid create mode 100644 result/relaxng/tutor4_3_1 create mode 100644 result/relaxng/tutor4_3_1.err create mode 100644 result/relaxng/tutor4_3_2 create mode 100644 result/relaxng/tutor4_3_2.err create mode 100644 result/relaxng/tutor4_3_3 create mode 100644 result/relaxng/tutor4_3_3.err create mode 100644 result/relaxng/tutor4_3_4 create mode 100644 result/relaxng/tutor4_3_4.err create mode 100644 result/relaxng/tutor4_3_5 create mode 100644 result/relaxng/tutor4_3_5.err create mode 100644 result/relaxng/tutor4_3_6 create mode 100644 result/relaxng/tutor4_3_6.err create mode 100644 result/relaxng/tutor4_3_err create mode 100644 result/relaxng/tutor4_3_valid create mode 100644 result/relaxng/tutor4_4_1 create mode 100644 result/relaxng/tutor4_4_1.err create mode 100644 result/relaxng/tutor4_4_err create mode 100644 result/relaxng/tutor4_4_valid create mode 100644 result/relaxng/tutor5_1_1 create mode 100644 result/relaxng/tutor5_1_1.err create mode 100644 result/relaxng/tutor5_1_err create mode 100644 result/relaxng/tutor5_1_valid create mode 100644 result/relaxng/tutor5_2_1 create mode 100644 result/relaxng/tutor5_2_1.err create mode 100644 result/relaxng/tutor5_2_err create mode 100644 result/relaxng/tutor5_2_valid create mode 100644 result/relaxng/tutor5_3_1 create mode 100644 result/relaxng/tutor5_3_1.err create mode 100644 result/relaxng/tutor5_3_err create mode 100644 result/relaxng/tutor5_3_valid create mode 100644 result/relaxng/tutor5_4_1 create mode 100644 result/relaxng/tutor5_4_1.err create mode 100644 result/relaxng/tutor5_4_err create mode 100644 result/relaxng/tutor5_4_valid create mode 100644 result/relaxng/tutor5_5_err create mode 100644 result/relaxng/tutor5_5_valid create mode 100644 result/relaxng/tutor6_1_1 create mode 100644 result/relaxng/tutor6_1_1.err create mode 100644 result/relaxng/tutor6_1_2 create mode 100644 result/relaxng/tutor6_1_2.err create mode 100644 result/relaxng/tutor6_1_3 create mode 100644 result/relaxng/tutor6_1_3.err create mode 100644 result/relaxng/tutor6_1_4 create mode 100644 result/relaxng/tutor6_1_4.err create mode 100644 result/relaxng/tutor6_1_5 create mode 100644 result/relaxng/tutor6_1_5.err create mode 100644 result/relaxng/tutor6_1_err create mode 100644 result/relaxng/tutor6_1_valid create mode 100644 result/relaxng/tutor6_2_1 create mode 100644 result/relaxng/tutor6_2_1.err create mode 100644 result/relaxng/tutor6_2_2 create mode 100644 result/relaxng/tutor6_2_2.err create mode 100644 result/relaxng/tutor6_2_3 create mode 100644 result/relaxng/tutor6_2_3.err create mode 100644 result/relaxng/tutor6_2_4 create mode 100644 result/relaxng/tutor6_2_4.err create mode 100644 result/relaxng/tutor6_2_err create mode 100644 result/relaxng/tutor6_2_valid create mode 100644 result/relaxng/tutor6_3_1 create mode 100644 result/relaxng/tutor6_3_1.err create mode 100644 result/relaxng/tutor6_3_err create mode 100644 result/relaxng/tutor6_3_valid create mode 100644 result/relaxng/tutor7_1_1 create mode 100644 result/relaxng/tutor7_1_1.err create mode 100644 result/relaxng/tutor7_1_2 create mode 100644 result/relaxng/tutor7_1_2.err create mode 100644 result/relaxng/tutor7_1_3 create mode 100644 result/relaxng/tutor7_1_3.err create mode 100644 result/relaxng/tutor7_1_4 create mode 100644 result/relaxng/tutor7_1_4.err create mode 100644 result/relaxng/tutor7_1_err create mode 100644 result/relaxng/tutor7_1_valid create mode 100644 result/relaxng/tutor7_2_1 create mode 100644 result/relaxng/tutor7_2_1.err create mode 100644 result/relaxng/tutor7_2_2 create mode 100644 result/relaxng/tutor7_2_2.err create mode 100644 result/relaxng/tutor7_2_3 create mode 100644 result/relaxng/tutor7_2_3.err create mode 100644 result/relaxng/tutor7_2_4 create mode 100644 result/relaxng/tutor7_2_4.err create mode 100644 result/relaxng/tutor7_2_err create mode 100644 result/relaxng/tutor7_2_valid create mode 100644 result/relaxng/tutor7_3_1 create mode 100644 result/relaxng/tutor7_3_1.err create mode 100644 result/relaxng/tutor7_3_2 create mode 100644 result/relaxng/tutor7_3_2.err create mode 100644 result/relaxng/tutor7_3_3 create mode 100644 result/relaxng/tutor7_3_3.err create mode 100644 result/relaxng/tutor7_3_4 create mode 100644 result/relaxng/tutor7_3_4.err create mode 100644 result/relaxng/tutor7_3_5 create mode 100644 result/relaxng/tutor7_3_5.err create mode 100644 result/relaxng/tutor7_3_err create mode 100644 result/relaxng/tutor7_3_valid create mode 100644 result/relaxng/tutor8_1_1 create mode 100644 result/relaxng/tutor8_1_1.err create mode 100644 result/relaxng/tutor8_1_2 create mode 100644 result/relaxng/tutor8_1_2.err create mode 100644 result/relaxng/tutor8_1_err create mode 100644 result/relaxng/tutor8_1_valid create mode 100644 result/relaxng/tutor8_2_1 create mode 100644 result/relaxng/tutor8_2_1.err create mode 100644 result/relaxng/tutor8_2_2 create mode 100644 result/relaxng/tutor8_2_2.err create mode 100644 result/relaxng/tutor8_2_3 create mode 100644 result/relaxng/tutor8_2_3.err create mode 100644 result/relaxng/tutor8_2_4 create mode 100644 result/relaxng/tutor8_2_4.err create mode 100644 result/relaxng/tutor8_2_5 create mode 100644 result/relaxng/tutor8_2_5.err create mode 100644 result/relaxng/tutor8_2_6 create mode 100644 result/relaxng/tutor8_2_6.err create mode 100644 result/relaxng/tutor8_2_err create mode 100644 result/relaxng/tutor8_2_valid create mode 100644 result/relaxng/tutor8_3_1 create mode 100644 result/relaxng/tutor8_3_1.err create mode 100644 result/relaxng/tutor8_3_err create mode 100644 result/relaxng/tutor8_3_valid create mode 100644 result/relaxng/tutor9_10_1 create mode 100644 result/relaxng/tutor9_10_1.err create mode 100644 result/relaxng/tutor9_10_err create mode 100644 result/relaxng/tutor9_10_valid create mode 100644 result/relaxng/tutor9_11_1 create mode 100644 result/relaxng/tutor9_11_1.err create mode 100644 result/relaxng/tutor9_11_err create mode 100644 result/relaxng/tutor9_11_valid create mode 100644 result/relaxng/tutor9_12_1 create mode 100644 result/relaxng/tutor9_12_1.err create mode 100644 result/relaxng/tutor9_12_err create mode 100644 result/relaxng/tutor9_12_valid create mode 100644 result/relaxng/tutor9_1_1 create mode 100644 result/relaxng/tutor9_1_1.err create mode 100644 result/relaxng/tutor9_1_err create mode 100644 result/relaxng/tutor9_1_valid create mode 100644 result/relaxng/tutor9_2_1 create mode 100644 result/relaxng/tutor9_2_1.err create mode 100644 result/relaxng/tutor9_2_2 create mode 100644 result/relaxng/tutor9_2_2.err create mode 100644 result/relaxng/tutor9_2_err create mode 100644 result/relaxng/tutor9_2_valid create mode 100644 result/relaxng/tutor9_3_1 create mode 100644 result/relaxng/tutor9_3_1.err create mode 100644 result/relaxng/tutor9_3_2 create mode 100644 result/relaxng/tutor9_3_2.err create mode 100644 result/relaxng/tutor9_3_err create mode 100644 result/relaxng/tutor9_3_valid create mode 100644 result/relaxng/tutor9_4_1 create mode 100644 result/relaxng/tutor9_4_1.err create mode 100644 result/relaxng/tutor9_4_2 create mode 100644 result/relaxng/tutor9_4_2.err create mode 100644 result/relaxng/tutor9_4_err create mode 100644 result/relaxng/tutor9_4_valid create mode 100644 result/relaxng/tutor9_5_1 create mode 100644 result/relaxng/tutor9_5_1.err create mode 100644 result/relaxng/tutor9_5_2 create mode 100644 result/relaxng/tutor9_5_2.err create mode 100644 result/relaxng/tutor9_5_3 create mode 100644 result/relaxng/tutor9_5_3.err create mode 100644 result/relaxng/tutor9_5_err create mode 100644 result/relaxng/tutor9_5_valid create mode 100644 result/relaxng/tutor9_6.rng create mode 100644 result/relaxng/tutor9_6_1 create mode 100644 result/relaxng/tutor9_6_1.err create mode 100644 result/relaxng/tutor9_6_2 create mode 100644 result/relaxng/tutor9_6_2.err create mode 100644 result/relaxng/tutor9_6_3 create mode 100644 result/relaxng/tutor9_6_3.err create mode 100644 result/relaxng/tutor9_6_err create mode 100644 result/relaxng/tutor9_6_valid create mode 100644 result/relaxng/tutor9_7_1 create mode 100644 result/relaxng/tutor9_7_1.err create mode 100644 result/relaxng/tutor9_7_err create mode 100644 result/relaxng/tutor9_7_valid create mode 100644 result/relaxng/tutor9_8_1 create mode 100644 result/relaxng/tutor9_8_1.err create mode 100644 result/relaxng/tutor9_8_err create mode 100644 result/relaxng/tutor9_8_valid create mode 100644 result/relaxng/tutor9_9_1 create mode 100644 result/relaxng/tutor9_9_1.err create mode 100644 result/relaxng/tutor9_9_err create mode 100644 result/relaxng/tutor9_9_valid create mode 100644 result/relaxng/tutorA_err create mode 100644 result/relaxng/tutorA_valid create mode 100644 result/schemas/570702_0_0 create mode 100644 result/schemas/570702_0_0.err create mode 100644 result/schemas/579746_0_0 create mode 100644 result/schemas/579746_0_0.err create mode 100644 result/schemas/579746_0_1 create mode 100644 result/schemas/579746_0_1.err create mode 100644 result/schemas/579746_0_2 create mode 100644 result/schemas/579746_0_2.err create mode 100644 result/schemas/579746_0_3 create mode 100644 result/schemas/579746_0_3.err create mode 100644 result/schemas/579746_0_4 create mode 100644 result/schemas/579746_0_4.err create mode 100644 result/schemas/579746_0_5 create mode 100644 result/schemas/579746_0_5.err create mode 100644 result/schemas/579746_1_0 create mode 100644 result/schemas/579746_1_0.err create mode 100644 result/schemas/579746_1_1 create mode 100644 result/schemas/579746_1_1.err create mode 100644 result/schemas/579746_1_2 create mode 100644 result/schemas/579746_1_2.err create mode 100644 result/schemas/579746_1_3 create mode 100644 result/schemas/579746_1_3.err create mode 100644 result/schemas/579746_1_4 create mode 100644 result/schemas/579746_1_4.err create mode 100644 result/schemas/579746_1_5 create mode 100644 result/schemas/579746_1_5.err create mode 100644 result/schemas/582887_0_0 create mode 100644 result/schemas/582887_0_0.err create mode 100644 result/schemas/582906-1_0_0 create mode 100644 result/schemas/582906-1_0_0.err create mode 100644 result/schemas/582906-2_0_0 create mode 100644 result/schemas/582906-2_0_0.err create mode 100644 result/schemas/all1_0_0 create mode 100644 result/schemas/all1_0_0.err create mode 100644 result/schemas/all_0_0 create mode 100644 result/schemas/all_0_0.err create mode 100644 result/schemas/all_0_1 create mode 100644 result/schemas/all_0_1.err create mode 100644 result/schemas/all_0_2 create mode 100644 result/schemas/all_0_2.err create mode 100644 result/schemas/all_0_3 create mode 100644 result/schemas/all_0_3.err create mode 100644 result/schemas/all_0_4 create mode 100644 result/schemas/all_0_4.err create mode 100644 result/schemas/all_0_5 create mode 100644 result/schemas/all_0_5.err create mode 100644 result/schemas/all_0_6 create mode 100644 result/schemas/all_0_6.err create mode 100644 result/schemas/all_0_7 create mode 100644 result/schemas/all_0_7.err create mode 100644 result/schemas/all_1_0 create mode 100644 result/schemas/all_1_0.err create mode 100644 result/schemas/all_1_1 create mode 100644 result/schemas/all_1_1.err create mode 100644 result/schemas/all_1_2 create mode 100644 result/schemas/all_1_2.err create mode 100644 result/schemas/all_1_3 create mode 100644 result/schemas/all_1_3.err create mode 100644 result/schemas/all_1_4 create mode 100644 result/schemas/all_1_4.err create mode 100644 result/schemas/all_1_5 create mode 100644 result/schemas/all_1_5.err create mode 100644 result/schemas/all_1_6 create mode 100644 result/schemas/all_1_6.err create mode 100644 result/schemas/all_1_7 create mode 100644 result/schemas/all_1_7.err create mode 100644 result/schemas/all_2_0 create mode 100644 result/schemas/all_2_0.err create mode 100644 result/schemas/all_2_1 create mode 100644 result/schemas/all_2_1.err create mode 100644 result/schemas/all_2_2 create mode 100644 result/schemas/all_2_2.err create mode 100644 result/schemas/all_2_3 create mode 100644 result/schemas/all_2_3.err create mode 100644 result/schemas/all_2_4 create mode 100644 result/schemas/all_2_4.err create mode 100644 result/schemas/all_2_5 create mode 100644 result/schemas/all_2_5.err create mode 100644 result/schemas/all_2_6 create mode 100644 result/schemas/all_2_6.err create mode 100644 result/schemas/all_2_7 create mode 100644 result/schemas/all_2_7.err create mode 100644 result/schemas/allsg_0_0 create mode 100644 result/schemas/allsg_0_0.err create mode 100644 result/schemas/allsg_0_1 create mode 100644 result/schemas/allsg_0_1.err create mode 100644 result/schemas/allsg_0_2 create mode 100644 result/schemas/allsg_0_2.err create mode 100644 result/schemas/allsg_0_3 create mode 100644 result/schemas/allsg_0_3.err create mode 100644 result/schemas/allsg_0_4 create mode 100644 result/schemas/allsg_0_4.err create mode 100644 result/schemas/allsg_0_5 create mode 100644 result/schemas/allsg_0_5.err create mode 100644 result/schemas/annot-err_0_0 create mode 100644 result/schemas/annot-err_0_0.err create mode 100644 result/schemas/any1_0_0 create mode 100644 result/schemas/any1_0_0.err create mode 100644 result/schemas/any2_0_0 create mode 100644 result/schemas/any2_0_0.err create mode 100644 result/schemas/any3_0_0 create mode 100644 result/schemas/any3_0_0.err create mode 100644 result/schemas/any4_0_0 create mode 100644 result/schemas/any4_0_0.err create mode 100644 result/schemas/any5_0_0 create mode 100644 result/schemas/any5_0_0.err create mode 100644 result/schemas/any5_0_1 create mode 100644 result/schemas/any5_0_1.err create mode 100644 result/schemas/any5_0_2 create mode 100644 result/schemas/any5_0_2.err create mode 100644 result/schemas/any5_0_3 create mode 100644 result/schemas/any5_0_3.err create mode 100644 result/schemas/any5_0_4 create mode 100644 result/schemas/any5_0_4.err create mode 100644 result/schemas/any5_0_5 create mode 100644 result/schemas/any5_0_5.err create mode 100644 result/schemas/any5_0_6 create mode 100644 result/schemas/any5_0_6.err create mode 100644 result/schemas/any5_1_0 create mode 100644 result/schemas/any5_1_0.err create mode 100644 result/schemas/any5_1_1 create mode 100644 result/schemas/any5_1_1.err create mode 100644 result/schemas/any5_1_2 create mode 100644 result/schemas/any5_1_2.err create mode 100644 result/schemas/any5_1_3 create mode 100644 result/schemas/any5_1_3.err create mode 100644 result/schemas/any5_1_4 create mode 100644 result/schemas/any5_1_4.err create mode 100644 result/schemas/any5_1_5 create mode 100644 result/schemas/any5_1_5.err create mode 100644 result/schemas/any5_1_6 create mode 100644 result/schemas/any5_1_6.err create mode 100644 result/schemas/any6_1_0 create mode 100644 result/schemas/any6_1_0.err create mode 100644 result/schemas/any6_2_0 create mode 100644 result/schemas/any6_2_0.err create mode 100644 result/schemas/any7_1_0 create mode 100644 result/schemas/any7_1_0.err create mode 100644 result/schemas/any7_1_1 create mode 100644 result/schemas/any7_1_1.err create mode 100644 result/schemas/any7_1_2 create mode 100644 result/schemas/any7_1_2.err create mode 100644 result/schemas/any7_2_0 create mode 100644 result/schemas/any7_2_0.err create mode 100644 result/schemas/any7_2_1 create mode 100644 result/schemas/any7_2_1.err create mode 100644 result/schemas/any7_2_2 create mode 100644 result/schemas/any7_2_2.err create mode 100644 result/schemas/any8_1_0 create mode 100644 result/schemas/any8_1_0.err create mode 100644 result/schemas/anyAttr-derive-errors1_0_0 create mode 100644 result/schemas/anyAttr-derive-errors1_0_0.err create mode 100644 result/schemas/anyAttr-derive1_0_0 create mode 100644 result/schemas/anyAttr-derive1_0_0.err create mode 100644 result/schemas/anyAttr-derive2_0_0 create mode 100644 result/schemas/anyAttr-derive2_0_0.err create mode 100644 result/schemas/anyAttr-processContents-err1_0_0 create mode 100644 result/schemas/anyAttr-processContents-err1_0_0.err create mode 100644 result/schemas/anyAttr-processContents1_0_0 create mode 100644 result/schemas/anyAttr-processContents1_0_0.err create mode 100644 result/schemas/anyAttr1_0_0 create mode 100644 result/schemas/anyAttr1_0_0.err create mode 100644 result/schemas/attr0_0_0 create mode 100644 result/schemas/attr0_0_0.err create mode 100644 result/schemas/attruse_0_0 create mode 100644 result/schemas/attruse_0_0.err create mode 100644 result/schemas/attruse_0_1 create mode 100644 result/schemas/attruse_0_1.err create mode 100644 result/schemas/attruse_0_2 create mode 100644 result/schemas/attruse_0_2.err create mode 100644 result/schemas/bug141312_0_0 create mode 100644 result/schemas/bug141312_0_0.err create mode 100644 result/schemas/bug141333_0_0 create mode 100644 result/schemas/bug141333_0_0.err create mode 100644 result/schemas/bug143951_0_0 create mode 100644 result/schemas/bug143951_0_0.err create mode 100644 result/schemas/bug145246_0_0 create mode 100644 result/schemas/bug145246_0_0.err create mode 100644 result/schemas/bug152470_1_1 create mode 100644 result/schemas/bug152470_1_1.err create mode 100644 result/schemas/bug167754_0_0 create mode 100644 result/schemas/bug167754_0_0.err create mode 100644 result/schemas/bug303566_1_1 create mode 100644 result/schemas/bug303566_1_1.err create mode 100644 result/schemas/bug306806_1_0 create mode 100644 result/schemas/bug306806_1_0.err create mode 100644 result/schemas/bug309338_1_0 create mode 100644 result/schemas/bug309338_1_0.err create mode 100644 result/schemas/bug310264_0_0 create mode 100644 result/schemas/bug310264_0_0.err create mode 100644 result/schemas/bug312957_1_0 create mode 100644 result/schemas/bug312957_1_0.err create mode 100644 result/schemas/bug313982_0_0 create mode 100644 result/schemas/bug313982_0_0.err create mode 100644 result/schemas/bug321475_1_0 create mode 100644 result/schemas/bug321475_1_0.err create mode 100644 result/schemas/bug322411_1_0 create mode 100644 result/schemas/bug322411_1_0.err create mode 100644 result/schemas/bug323510_1_0 create mode 100644 result/schemas/bug323510_1_0.err create mode 100644 result/schemas/bug455953_0_0 create mode 100644 result/schemas/bug455953_0_0.err create mode 100644 result/schemas/changelog093_1_0 create mode 100644 result/schemas/changelog093_1_0.err create mode 100644 result/schemas/choice_0_0 create mode 100644 result/schemas/choice_0_0.err create mode 100644 result/schemas/choice_0_1 create mode 100644 result/schemas/choice_0_1.err create mode 100644 result/schemas/choice_0_2 create mode 100644 result/schemas/choice_0_2.err create mode 100644 result/schemas/choice_0_3 create mode 100644 result/schemas/choice_0_3.err create mode 100644 result/schemas/choice_0_4 create mode 100644 result/schemas/choice_0_4.err create mode 100644 result/schemas/choice_0_5 create mode 100644 result/schemas/choice_0_5.err create mode 100644 result/schemas/choice_0_6 create mode 100644 result/schemas/choice_0_6.err create mode 100644 result/schemas/choice_1_0 create mode 100644 result/schemas/choice_1_0.err create mode 100644 result/schemas/choice_1_1 create mode 100644 result/schemas/choice_1_1.err create mode 100644 result/schemas/choice_1_2 create mode 100644 result/schemas/choice_1_2.err create mode 100644 result/schemas/choice_1_3 create mode 100644 result/schemas/choice_1_3.err create mode 100644 result/schemas/choice_1_4 create mode 100644 result/schemas/choice_1_4.err create mode 100644 result/schemas/choice_1_5 create mode 100644 result/schemas/choice_1_5.err create mode 100644 result/schemas/choice_1_6 create mode 100644 result/schemas/choice_1_6.err create mode 100644 result/schemas/choice_2_0 create mode 100644 result/schemas/choice_2_0.err create mode 100644 result/schemas/choice_2_1 create mode 100644 result/schemas/choice_2_1.err create mode 100644 result/schemas/choice_2_2 create mode 100644 result/schemas/choice_2_2.err create mode 100644 result/schemas/choice_2_3 create mode 100644 result/schemas/choice_2_3.err create mode 100644 result/schemas/choice_2_4 create mode 100644 result/schemas/choice_2_4.err create mode 100644 result/schemas/choice_2_5 create mode 100644 result/schemas/choice_2_5.err create mode 100644 result/schemas/choice_2_6 create mode 100644 result/schemas/choice_2_6.err create mode 100644 result/schemas/complex-type-extension_0_0 create mode 100644 result/schemas/complex-type-extension_0_0.err create mode 100644 result/schemas/cos-ct-extends-1-3_0_0 create mode 100644 result/schemas/cos-ct-extends-1-3_0_0.err create mode 100644 result/schemas/cos-st-restricts-1-2-err_0_0 create mode 100644 result/schemas/cos-st-restricts-1-2-err_0_0.err create mode 100644 result/schemas/ct-sc-nobase_0_0 create mode 100644 result/schemas/ct-sc-nobase_0_0.err create mode 100644 result/schemas/date_0_0 create mode 100644 result/schemas/date_0_0.err create mode 100644 result/schemas/decimal-1_1_0 create mode 100644 result/schemas/decimal-1_1_0.err create mode 100644 result/schemas/decimal-2_1_0 create mode 100644 result/schemas/decimal-2_1_0.err create mode 100644 result/schemas/decimal-3_1_0 create mode 100644 result/schemas/decimal-3_1_0.err create mode 100644 result/schemas/derivation-ok-extension-err_0_0 create mode 100644 result/schemas/derivation-ok-extension-err_0_0.err create mode 100644 result/schemas/derivation-ok-extension_0_0 create mode 100644 result/schemas/derivation-ok-extension_0_0.err create mode 100644 result/schemas/derivation-ok-restriction-2-1-1_0_0 create mode 100644 result/schemas/derivation-ok-restriction-2-1-1_0_0.err create mode 100644 result/schemas/derivation-ok-restriction-4-1-err_0_0 create mode 100644 result/schemas/derivation-ok-restriction-4-1-err_0_0.err create mode 100644 result/schemas/derivation-restriction-anyAttr_0_0 create mode 100644 result/schemas/derivation-restriction-anyAttr_0_0.err create mode 100644 result/schemas/deter0_0_0 create mode 100644 result/schemas/deter0_0_0.err create mode 100644 result/schemas/dur_0_0 create mode 100644 result/schemas/dur_0_0.err create mode 100644 result/schemas/elem0_0_0 create mode 100644 result/schemas/elem0_0_0.err create mode 100644 result/schemas/element-err_0_0 create mode 100644 result/schemas/element-err_0_0.err create mode 100644 result/schemas/element-minmax-err_0_0 create mode 100644 result/schemas/element-minmax-err_0_0.err create mode 100644 result/schemas/empty-value_1_0 create mode 100644 result/schemas/empty-value_1_0.err create mode 100644 result/schemas/empty-value_1_1 create mode 100644 result/schemas/empty-value_1_1.err create mode 100644 result/schemas/empty_0_0 create mode 100644 result/schemas/empty_0_0.err create mode 100644 result/schemas/empty_1_0 create mode 100644 result/schemas/empty_1_0.err create mode 100644 result/schemas/extension0_0_0 create mode 100644 result/schemas/extension0_0_0.err create mode 100644 result/schemas/extension1_0_0 create mode 100644 result/schemas/extension1_0_0.err create mode 100644 result/schemas/extension1_0_1 create mode 100644 result/schemas/extension1_0_1.err create mode 100644 result/schemas/extension1_0_2 create mode 100644 result/schemas/extension1_0_2.err create mode 100644 result/schemas/extension2_1_0 create mode 100644 result/schemas/extension2_1_0.err create mode 100644 result/schemas/facet-unionST-err1_0_0 create mode 100644 result/schemas/facet-unionST-err1_0_0.err create mode 100644 result/schemas/facet-whiteSpace_0_0 create mode 100644 result/schemas/facet-whiteSpace_0_0.err create mode 100644 result/schemas/group0_0_0 create mode 100644 result/schemas/group0_0_0.err create mode 100644 result/schemas/hexbinary_0_0 create mode 100644 result/schemas/hexbinary_0_0.err create mode 100644 result/schemas/hexbinary_0_1 create mode 100644 result/schemas/hexbinary_0_1.err create mode 100644 result/schemas/idc-keyref-err1_1_0 create mode 100644 result/schemas/idc-keyref-err1_1_0.err create mode 100644 result/schemas/import0_0_0 create mode 100644 result/schemas/import0_0_0.err create mode 100644 result/schemas/import1_0_0 create mode 100644 result/schemas/import1_0_0.err create mode 100644 result/schemas/import2_0_0 create mode 100644 result/schemas/import2_0_0.err create mode 100644 result/schemas/include1_0_0 create mode 100644 result/schemas/include1_0_0.err create mode 100644 result/schemas/include2_0_0 create mode 100644 result/schemas/include2_0_0.err create mode 100644 result/schemas/include3_0_0 create mode 100644 result/schemas/include3_0_0.err create mode 100644 result/schemas/item_0_0 create mode 100644 result/schemas/item_0_0.err create mode 100644 result/schemas/item_1_0 create mode 100644 result/schemas/item_1_0.err create mode 100644 result/schemas/length1_0_0 create mode 100644 result/schemas/length1_0_0.err create mode 100644 result/schemas/length2_0_0 create mode 100644 result/schemas/length2_0_0.err create mode 100644 result/schemas/length3_0_0 create mode 100644 result/schemas/length3_0_0.err create mode 100644 result/schemas/list0_0_0 create mode 100644 result/schemas/list0_0_0.err create mode 100644 result/schemas/list0_0_1 create mode 100644 result/schemas/list0_0_1.err create mode 100644 result/schemas/list0_0_2 create mode 100644 result/schemas/list0_0_2.err create mode 100644 result/schemas/list0_1_0 create mode 100644 result/schemas/list0_1_0.err create mode 100644 result/schemas/list0_1_1 create mode 100644 result/schemas/list0_1_1.err create mode 100644 result/schemas/list0_1_2 create mode 100644 result/schemas/list0_1_2.err create mode 100644 result/schemas/mixed0_0_0 create mode 100644 result/schemas/mixed0_0_0.err create mode 100644 result/schemas/mixed1_0_0 create mode 100644 result/schemas/mixed1_0_0.err create mode 100644 result/schemas/ns0_0_0 create mode 100644 result/schemas/ns0_0_0.err create mode 100644 result/schemas/ns0_0_1 create mode 100644 result/schemas/ns0_0_1.err create mode 100644 result/schemas/ns0_0_2 create mode 100644 result/schemas/ns0_0_2.err create mode 100644 result/schemas/ns0_0_3 create mode 100644 result/schemas/ns0_0_3.err create mode 100644 result/schemas/ns0_0_4 create mode 100644 result/schemas/ns0_0_4.err create mode 100644 result/schemas/ns0_1_0 create mode 100644 result/schemas/ns0_1_0.err create mode 100644 result/schemas/ns0_1_1 create mode 100644 result/schemas/ns0_1_1.err create mode 100644 result/schemas/ns0_1_2 create mode 100644 result/schemas/ns0_1_2.err create mode 100644 result/schemas/ns0_1_3 create mode 100644 result/schemas/ns0_1_3.err create mode 100644 result/schemas/ns0_1_4 create mode 100644 result/schemas/ns0_1_4.err create mode 100644 result/schemas/ns1_0_0 create mode 100644 result/schemas/ns1_0_0.err create mode 100644 result/schemas/ns2_0_0 create mode 100644 result/schemas/ns2_0_0.err create mode 100644 result/schemas/nvdcve_0_0 create mode 100644 result/schemas/nvdcve_0_0.err create mode 100644 result/schemas/po0_0_0 create mode 100644 result/schemas/po0_0_0.err create mode 100644 result/schemas/po1_0_0 create mode 100644 result/schemas/po1_0_0.err create mode 100644 result/schemas/poschargrp0_0_0 create mode 100644 result/schemas/poschargrp0_0_0.err create mode 100644 result/schemas/regexp-char-ref_0_0 create mode 100644 result/schemas/regexp-char-ref_0_0.err create mode 100644 result/schemas/regexp-char-ref_1_0 create mode 100644 result/schemas/regexp-char-ref_1_0.err create mode 100644 result/schemas/restrict-CT-attr-ref_0_0 create mode 100644 result/schemas/restrict-CT-attr-ref_0_0.err create mode 100644 result/schemas/restriction-attr1_0_0 create mode 100644 result/schemas/restriction-attr1_0_0.err create mode 100644 result/schemas/restriction-enum-1_1_0 create mode 100644 result/schemas/restriction-enum-1_1_0.err create mode 100644 result/schemas/restriction0_0_0 create mode 100644 result/schemas/restriction0_0_0.err create mode 100644 result/schemas/scc-no-xmlns_0_0 create mode 100644 result/schemas/scc-no-xmlns_0_0.err create mode 100644 result/schemas/scc-no-xsi_0_0 create mode 100644 result/schemas/scc-no-xsi_0_0.err create mode 100644 result/schemas/seq-dubl-elem1_0_0 create mode 100644 result/schemas/seq-dubl-elem1_0_0.err create mode 100644 result/schemas/seq0_0_0 create mode 100644 result/schemas/seq0_0_0.err create mode 100644 result/schemas/src-attribute1_0_0 create mode 100644 result/schemas/src-attribute1_0_0.err create mode 100644 result/schemas/src-attribute2_0_0 create mode 100644 result/schemas/src-attribute2_0_0.err create mode 100644 result/schemas/src-attribute3-1_0_0 create mode 100644 result/schemas/src-attribute3-1_0_0.err create mode 100644 result/schemas/src-attribute3-2-form_0_0 create mode 100644 result/schemas/src-attribute3-2-form_0_0.err create mode 100644 result/schemas/src-attribute3-2-st_0_0 create mode 100644 result/schemas/src-attribute3-2-st_0_0.err create mode 100644 result/schemas/src-attribute3-2-type_0_0 create mode 100644 result/schemas/src-attribute3-2-type_0_0.err create mode 100644 result/schemas/src-attribute4_0_0 create mode 100644 result/schemas/src-attribute4_0_0.err create mode 100644 result/schemas/src-element1_0_0 create mode 100644 result/schemas/src-element1_0_0.err create mode 100644 result/schemas/src-element2-1_0_0 create mode 100644 result/schemas/src-element2-1_0_0.err create mode 100644 result/schemas/src-element2-2_0_0 create mode 100644 result/schemas/src-element2-2_0_0.err create mode 100644 result/schemas/src-element3_0_0 create mode 100644 result/schemas/src-element3_0_0.err create mode 100644 result/schemas/subst-group-1_0_1 create mode 100644 result/schemas/subst-group-1_0_1.err create mode 100644 result/schemas/union2_1_1 create mode 100644 result/schemas/union2_1_1.err create mode 100644 result/schemas/union_0_0 create mode 100644 result/schemas/union_0_0.err create mode 100644 result/schemas/vdv-first0_0_0 create mode 100644 result/schemas/vdv-first0_0_0.err create mode 100644 result/schemas/vdv-first1_0_0 create mode 100644 result/schemas/vdv-first1_0_0.err create mode 100644 result/schemas/vdv-first2_0_0 create mode 100644 result/schemas/vdv-first2_0_0.err create mode 100644 result/schemas/vdv-first3_0_0 create mode 100644 result/schemas/vdv-first3_0_0.err create mode 100644 result/schemas/vdv-first4_0_0 create mode 100644 result/schemas/vdv-first4_0_0.err create mode 100644 result/schemas/vdv-first4_0_1 create mode 100644 result/schemas/vdv-first4_0_1.err create mode 100644 result/schemas/vdv-first4_0_2 create mode 100644 result/schemas/vdv-first4_0_2.err create mode 100644 result/schemas/vdv-first5_0_0 create mode 100644 result/schemas/vdv-first5_0_0.err create mode 100644 result/schemas/xsd-list-itemType_0_0 create mode 100644 result/schemas/xsd-list-itemType_0_0.err create mode 100644 result/schemas/xsd-simpleType-varieties_0_0 create mode 100644 result/schemas/xsd-simpleType-varieties_0_0.err create mode 100644 result/schematron/zvon10_0 create mode 100644 result/schematron/zvon10_0.err create mode 100644 result/schematron/zvon10_1 create mode 100644 result/schematron/zvon10_1.err create mode 100644 result/schematron/zvon11_0 create mode 100644 result/schematron/zvon11_0.err create mode 100644 result/schematron/zvon11_1 create mode 100644 result/schematron/zvon11_1.err create mode 100644 result/schematron/zvon11_2 create mode 100644 result/schematron/zvon11_2.err create mode 100644 result/schematron/zvon11_3 create mode 100644 result/schematron/zvon11_3.err create mode 100644 result/schematron/zvon12_0 create mode 100644 result/schematron/zvon12_0.err create mode 100644 result/schematron/zvon12_1 create mode 100644 result/schematron/zvon12_1.err create mode 100644 result/schematron/zvon12_2 create mode 100644 result/schematron/zvon12_2.err create mode 100644 result/schematron/zvon13_0 create mode 100644 result/schematron/zvon13_0.err create mode 100644 result/schematron/zvon13_1 create mode 100644 result/schematron/zvon13_1.err create mode 100644 result/schematron/zvon13_2 create mode 100644 result/schematron/zvon13_2.err create mode 100644 result/schematron/zvon14_0 create mode 100644 result/schematron/zvon14_0.err create mode 100644 result/schematron/zvon15_0 create mode 100644 result/schematron/zvon15_0.err create mode 100644 result/schematron/zvon1_0 create mode 100644 result/schematron/zvon1_0.err create mode 100644 result/schematron/zvon1_1 create mode 100644 result/schematron/zvon1_1.err create mode 100644 result/schematron/zvon2_0 create mode 100644 result/schematron/zvon2_0.err create mode 100644 result/schematron/zvon2_1 create mode 100644 result/schematron/zvon2_1.err create mode 100644 result/schematron/zvon2_2 create mode 100644 result/schematron/zvon2_2.err create mode 100644 result/schematron/zvon3_0 create mode 100644 result/schematron/zvon3_0.err create mode 100644 result/schematron/zvon4_0 create mode 100644 result/schematron/zvon4_0.err create mode 100644 result/schematron/zvon4_1 create mode 100644 result/schematron/zvon4_1.err create mode 100644 result/schematron/zvon5_0 create mode 100644 result/schematron/zvon5_0.err create mode 100644 result/schematron/zvon5_1 create mode 100644 result/schematron/zvon5_1.err create mode 100644 result/schematron/zvon5_2 create mode 100644 result/schematron/zvon5_2.err create mode 100644 result/schematron/zvon6_0 create mode 100644 result/schematron/zvon6_0.err create mode 100644 result/schematron/zvon6_1 create mode 100644 result/schematron/zvon6_1.err create mode 100644 result/schematron/zvon6_2 create mode 100644 result/schematron/zvon6_2.err create mode 100644 result/schematron/zvon7_0 create mode 100644 result/schematron/zvon7_0.err create mode 100644 result/schematron/zvon7_1 create mode 100644 result/schematron/zvon7_1.err create mode 100644 result/schematron/zvon7_2 create mode 100644 result/schematron/zvon7_2.err create mode 100644 result/schematron/zvon7_3 create mode 100644 result/schematron/zvon7_3.err create mode 100644 result/schematron/zvon7_4 create mode 100644 result/schematron/zvon7_4.err create mode 100644 result/schematron/zvon8_0 create mode 100644 result/schematron/zvon8_0.err create mode 100644 result/schematron/zvon8_1 create mode 100644 result/schematron/zvon8_1.err create mode 100644 result/schematron/zvon8_2 create mode 100644 result/schematron/zvon8_2.err create mode 100644 result/schematron/zvon9_0 create mode 100644 result/schematron/zvon9_0.err create mode 100644 result/schematron/zvon9_1 create mode 100644 result/schematron/zvon9_1.err create mode 100644 result/schematron/zvon9_2 create mode 100644 result/schematron/zvon9_2.err create mode 100644 result/scripts/base create mode 100644 result/scripts/base.err create mode 100644 result/scripts/base2 create mode 100644 result/scripts/base2.err create mode 100644 result/scripts/set1 create mode 100644 result/scripts/set1.err create mode 100644 result/scripts/set3 create mode 100644 result/scripts/set3.err create mode 100644 result/scripts/set4 create mode 100644 result/scripts/set4.err create mode 100644 result/slashdot.rdf create mode 100644 result/slashdot.rdf.rde create mode 100644 result/slashdot.rdf.rdr create mode 100644 result/slashdot.rdf.sax create mode 100644 result/slashdot.rdf.sax2 create mode 100644 result/slashdot.xml create mode 100644 result/slashdot.xml.rde create mode 100644 result/slashdot.xml.rdr create mode 100644 result/slashdot.xml.sax create mode 100644 result/slashdot.xml.sax2 create mode 100644 result/slashdot16.xml create mode 100644 result/slashdot16.xml.rde create mode 100644 result/slashdot16.xml.rdr create mode 100644 result/slashdot16.xml.sax create mode 100644 result/slashdot16.xml.sax2 create mode 100644 result/svg1 create mode 100644 result/svg1.rde create mode 100644 result/svg1.rdr create mode 100644 result/svg1.sax create mode 100644 result/svg1.sax2 create mode 100644 result/svg2 create mode 100644 result/svg2.rde create mode 100644 result/svg2.rdr create mode 100644 result/svg2.sax create mode 100644 result/svg2.sax2 create mode 100644 result/svg3 create mode 100644 result/svg3.rde create mode 100644 result/svg3.rdr create mode 100644 result/svg3.sax create mode 100644 result/svg3.sax2 create mode 100644 result/title.xml create mode 100644 result/title.xml.rde create mode 100644 result/title.xml.rdr create mode 100644 result/title.xml.sax create mode 100644 result/title.xml.sax2 create mode 100644 result/tstblanks.xml create mode 100644 result/tstblanks.xml.rde create mode 100644 result/tstblanks.xml.rdr create mode 100644 result/tstblanks.xml.sax create mode 100644 result/tstblanks.xml.sax2 create mode 100644 result/utf16bebom.xml create mode 100644 result/utf16bebom.xml.rde create mode 100644 result/utf16bebom.xml.rdr create mode 100644 result/utf16bebom.xml.sax create mode 100644 result/utf16bebom.xml.sax2 create mode 100644 result/utf16bom.xml create mode 100644 result/utf16bom.xml.rde create mode 100644 result/utf16bom.xml.rdr create mode 100644 result/utf16bom.xml.sax create mode 100644 result/utf16bom.xml.sax2 create mode 100644 result/utf16lebom.xml create mode 100644 result/utf16lebom.xml.rde create mode 100644 result/utf16lebom.xml.rdr create mode 100644 result/utf16lebom.xml.sax create mode 100644 result/utf16lebom.xml.sax2 create mode 100644 result/utf8bom.xml create mode 100644 result/utf8bom.xml.rde create mode 100644 result/utf8bom.xml.rdr create mode 100644 result/utf8bom.xml.sax create mode 100644 result/utf8bom.xml.sax2 create mode 100644 result/valid/127772.xml create mode 100644 result/valid/127772.xml.err create mode 100644 result/valid/127772.xml.err.rdr create mode 100644 result/valid/694228.xml create mode 100644 result/valid/694228.xml.err create mode 100644 result/valid/694228.xml.err.rdr create mode 100644 result/valid/737840.xml create mode 100644 result/valid/737840.xml.err create mode 100644 result/valid/737840.xml.err.rdr create mode 100644 result/valid/REC-xml-19980210.xml create mode 100644 result/valid/REC-xml-19980210.xml.err create mode 100644 result/valid/REC-xml-19980210.xml.err.rdr create mode 100644 result/valid/UTF16Entity.xml create mode 100644 result/valid/UTF16Entity.xml.err create mode 100644 result/valid/UTF16Entity.xml.err.rdr create mode 100644 result/valid/dia.xml create mode 100644 result/valid/dia.xml.err create mode 100644 result/valid/dia.xml.err.rdr create mode 100644 result/valid/id1.xml create mode 100644 result/valid/id1.xml.err create mode 100644 result/valid/id1.xml.err.rdr create mode 100644 result/valid/id2.xml create mode 100644 result/valid/id2.xml.err create mode 100644 result/valid/id2.xml.err.rdr create mode 100644 result/valid/id3.xml create mode 100644 result/valid/id3.xml.err create mode 100644 result/valid/id3.xml.err.rdr create mode 100644 result/valid/index.xml create mode 100644 result/valid/index.xml.err create mode 100644 result/valid/index.xml.err.rdr create mode 100644 result/valid/mixed_ns.xml create mode 100644 result/valid/mixed_ns.xml.err create mode 100644 result/valid/mixed_ns.xml.err.rdr create mode 100644 result/valid/notes.xml create mode 100644 result/valid/notes.xml.err create mode 100644 result/valid/notes.xml.err.rdr create mode 100644 result/valid/ns.xml create mode 100644 result/valid/ns.xml.err create mode 100644 result/valid/ns.xml.err.rdr create mode 100644 result/valid/ns2.xml create mode 100644 result/valid/ns2.xml.err create mode 100644 result/valid/ns2.xml.err.rdr create mode 100644 result/valid/objednavka.xml create mode 100644 result/valid/objednavka.xml.err create mode 100644 result/valid/objednavka.xml.err.rdr create mode 100644 result/valid/rss.xml create mode 100644 result/valid/rss.xml.err create mode 100644 result/valid/rss.xml.err.rdr create mode 100644 result/valid/t10.xml create mode 100644 result/valid/t10.xml.err create mode 100644 result/valid/t10.xml.err.rdr create mode 100644 result/valid/t11.xml create mode 100644 result/valid/t11.xml.err create mode 100644 result/valid/t11.xml.err.rdr create mode 100644 result/valid/t4.dtd create mode 100644 result/valid/t4.dtd.err create mode 100644 result/valid/t4.dtd.err.rdr create mode 100644 result/valid/t4.xml create mode 100644 result/valid/t4.xml.err create mode 100644 result/valid/t4.xml.err.rdr create mode 100644 result/valid/t4a.dtd create mode 100644 result/valid/t4a.dtd.err create mode 100644 result/valid/t4a.dtd.err.rdr create mode 100644 result/valid/t4a.xml create mode 100644 result/valid/t4a.xml.err create mode 100644 result/valid/t4a.xml.err.rdr create mode 100644 result/valid/t6.dtd create mode 100644 result/valid/t6.dtd.err create mode 100644 result/valid/t6.dtd.err.rdr create mode 100644 result/valid/t6.xml create mode 100644 result/valid/t6.xml.err create mode 100644 result/valid/t6.xml.err.rdr create mode 100644 result/valid/t8.xml create mode 100644 result/valid/t8.xml.err create mode 100644 result/valid/t8.xml.err.rdr create mode 100644 result/valid/t8a.xml create mode 100644 result/valid/t8a.xml.err create mode 100644 result/valid/t8a.xml.err.rdr create mode 100644 result/valid/t9.xml create mode 100644 result/valid/t9.xml.err create mode 100644 result/valid/t9.xml.err.rdr create mode 100644 result/valid/t9a.xml create mode 100644 result/valid/t9a.xml.err create mode 100644 result/valid/t9a.xml.err.rdr create mode 100644 result/valid/xhtml1.xhtml create mode 100644 result/valid/xhtml1.xhtml.err create mode 100644 result/valid/xhtml1.xhtml.err.rdr create mode 100644 result/valid/xlink.xml create mode 100644 result/valid/xlink.xml.err create mode 100644 result/valid/xlink.xml.err.rdr create mode 100644 result/wap.xml create mode 100644 result/wap.xml.rde create mode 100644 result/wap.xml.rdr create mode 100644 result/wap.xml.sax create mode 100644 result/wap.xml.sax2 create mode 100644 result/winblanks.xml create mode 100644 result/winblanks.xml.rde create mode 100644 result/winblanks.xml.rdr create mode 100644 result/winblanks.xml.sax create mode 100644 result/winblanks.xml.sax2 create mode 100644 result/wml.xml create mode 100644 result/wml.xml.rde create mode 100644 result/wml.xml.rdr create mode 100644 result/wml.xml.sax create mode 100644 result/wml.xml.sax2 create mode 100644 result/xhtml1 create mode 100644 result/xhtml1.rde create mode 100644 result/xhtml1.rdr create mode 100644 result/xhtml1.sax create mode 100644 result/xhtml1.sax2 create mode 100644 result/xhtmlcomp create mode 100644 result/xhtmlcomp.rde create mode 100644 result/xhtmlcomp.rdr create mode 100644 result/xhtmlcomp.sax create mode 100644 result/xhtmlcomp.sax2 create mode 100644 result/xml1 create mode 100644 result/xml1.rde create mode 100644 result/xml1.rdr create mode 100644 result/xml1.sax create mode 100644 result/xml1.sax2 create mode 100644 result/xml2 create mode 100644 result/xml2.rde create mode 100644 result/xml2.rdr create mode 100644 result/xml2.sax create mode 100644 result/xml2.sax2 create mode 100644 result/xmlid/id_err1.xml create mode 100644 result/xmlid/id_err1.xml.err create mode 100644 result/xmlid/id_err2.xml create mode 100644 result/xmlid/id_err2.xml.err create mode 100644 result/xmlid/id_tst1.xml create mode 100644 result/xmlid/id_tst1.xml.err create mode 100644 result/xmlid/id_tst2.xml create mode 100644 result/xmlid/id_tst2.xml.err create mode 100644 result/xmlid/id_tst3.xml create mode 100644 result/xmlid/id_tst3.xml.err create mode 100644 result/xmlid/id_tst4.xml create mode 100644 result/xmlid/id_tst4.xml.err create mode 100644 rngparser.c create mode 100644 runsuite.c create mode 100644 runtest.c create mode 100644 runxmlconf.c create mode 100644 save.h create mode 100644 schematron.c create mode 100644 test/HTML/53867.html create mode 100644 test/HTML/758605.html create mode 100644 test/HTML/758606.html create mode 100644 test/HTML/758606_2.html create mode 100644 test/HTML/Down.html create mode 100644 test/HTML/attrents.html create mode 100644 test/HTML/autoclose.html create mode 100644 test/HTML/autoclose2.html create mode 100644 test/HTML/autoclose3.html create mode 100644 test/HTML/cf_128.html create mode 100644 test/HTML/doc2.htm create mode 100644 test/HTML/doc3.htm create mode 100644 test/HTML/entities.html create mode 100644 test/HTML/entities2.html create mode 100644 test/HTML/fp40.htm create mode 100644 test/HTML/html5_enc.html create mode 100644 test/HTML/liclose.html create mode 100644 test/HTML/lt.html create mode 100644 test/HTML/noscript.html create mode 100644 test/HTML/pre.html create mode 100644 test/HTML/python.html create mode 100644 test/HTML/reg1.html create mode 100644 test/HTML/reg2.html create mode 100644 test/HTML/reg3.html create mode 100644 test/HTML/reg4.html create mode 100644 test/HTML/repeat.html create mode 100644 test/HTML/script.html create mode 100644 test/HTML/script2.html create mode 100644 test/HTML/test2.html create mode 100644 test/HTML/test3.html create mode 100644 test/HTML/utf8bug.html create mode 100644 test/HTML/wired.html create mode 100755 test/SVG/4rects.xml create mode 100755 test/SVG/a-valid.xml create mode 100755 test/SVG/a-wf.xml create mode 100755 test/SVG/bike.xml create mode 100755 test/SVG/circle.xml create mode 100755 test/SVG/defs.xml create mode 100755 test/SVG/desc.xml create mode 100755 test/SVG/ellipse.xml create mode 100755 test/SVG/flower2.xml create mode 100755 test/SVG/gradient.xml create mode 100755 test/SVG/group01.xml create mode 100755 test/SVG/group02.xml create mode 100755 test/SVG/group03.xml create mode 100755 test/SVG/image-valid.xml create mode 100755 test/SVG/image-wf.xml create mode 100755 test/SVG/lin-gradient.xml create mode 100755 test/SVG/marker.xml create mode 100755 test/SVG/mask.xml create mode 100755 test/SVG/mathswitch.xml create mode 100755 test/SVG/parentns.xml create mode 100755 test/SVG/path01.xml create mode 100755 test/SVG/path02.xml create mode 100755 test/SVG/patternfill.xml create mode 100755 test/SVG/polyline.xml create mode 100755 test/SVG/private.xml create mode 100755 test/SVG/rad-gradient.xml create mode 100755 test/SVG/rectangle.xml create mode 100755 test/SVG/richdesc.xml create mode 100755 test/SVG/script.xml create mode 100755 test/SVG/structure01.xml create mode 100755 test/SVG/style.xml create mode 100755 test/SVG/switch.xml create mode 100755 test/SVG/symbol-use.xml create mode 100755 test/SVG/template.xml create mode 100755 test/SVG/text01.xml create mode 100755 test/SVG/text02.xml create mode 100755 test/SVG/text03.xml create mode 100755 test/SVG/toap01.xml create mode 100755 test/SVG/toap02.xml create mode 100755 test/SVG/transform.xml create mode 100755 test/SVG/trivial.xml create mode 100755 test/SVG/twin-gradients.xml create mode 100755 test/SVG/v-template.xml create mode 100755 test/SVG/viewport-nest.xml create mode 100755 test/SVG/viewport-transform.xml create mode 100755 test/SVG/viewport.xml create mode 100755 test/SVG/wf-template.xml create mode 100644 test/URI/smith.uri create mode 100644 test/URI/uri.data create mode 100644 test/VC/AttributeDefaultLegal create mode 100644 test/VC/AttributeNmtokens create mode 100644 test/VC/DuplicateType create mode 100644 test/VC/ElementValid create mode 100644 test/VC/ElementValid2 create mode 100644 test/VC/ElementValid3 create mode 100644 test/VC/ElementValid4 create mode 100644 test/VC/ElementValid5 create mode 100644 test/VC/ElementValid6 create mode 100644 test/VC/ElementValid7 create mode 100644 test/VC/ElementValid8 create mode 100644 test/VC/Enumeration create mode 100644 test/VC/NS1 create mode 100644 test/VC/NS2 create mode 100644 test/VC/NS3 create mode 100644 test/VC/OneID create mode 100644 test/VC/OneID2 create mode 100644 test/VC/OneID3 create mode 100644 test/VC/PENesting create mode 100644 test/VC/PENesting2 create mode 100644 test/VC/UniqueElementTypeDeclaration create mode 100644 test/VC/UniqueElementTypeDeclaration2 create mode 100644 test/VC/dtds/a.dtd create mode 100644 test/VC/dtds/doc.dtd create mode 100644 test/VCM/21.xml create mode 100644 test/VCM/AttributeNmtokens.xml create mode 100644 test/VCM/v1.xml create mode 100644 test/VCM/v10.xml create mode 100644 test/VCM/v11.xml create mode 100644 test/VCM/v12.xml create mode 100644 test/VCM/v13.xml create mode 100644 test/VCM/v14.xml create mode 100644 test/VCM/v15.xml create mode 100644 test/VCM/v16.xml create mode 100644 test/VCM/v17.xml create mode 100644 test/VCM/v18.xml create mode 100644 test/VCM/v19.xml create mode 100644 test/VCM/v2.xml create mode 100644 test/VCM/v20.xml create mode 100644 test/VCM/v21.xml create mode 100644 test/VCM/v22.xml create mode 100644 test/VCM/v23.xml create mode 100644 test/VCM/v24.xml create mode 100644 test/VCM/v3.xml create mode 100644 test/VCM/v4.xml create mode 100644 test/VCM/v5.xml create mode 100644 test/VCM/v6.xml create mode 100644 test/VCM/v7.xml create mode 100644 test/VCM/v8.xml create mode 100644 test/VCM/v9.xml create mode 100644 test/WFC/ElemTypeMatch create mode 100644 test/WFC/EntityDeclared create mode 100644 test/WFC/EntityDeclared2 create mode 100644 test/WFC/EntityDeclared3 create mode 100644 test/WFC/EntityDeclared4 create mode 100644 test/WFC/EntityDeclared5 create mode 100644 test/WFC/LegalCharacter create mode 100644 test/WFC/NoExternalEntityRef create mode 100644 test/WFC/NoLtInAttValue create mode 100644 test/WFC/NoRecursion create mode 100644 test/WFC/PEintsubset create mode 100644 test/WFC/UniqueAttSpec create mode 100644 test/WFC/UniqueAttSpec2 create mode 100644 test/XInclude/docs/docids.xml create mode 100644 test/XInclude/docs/fallback.xml create mode 100644 test/XInclude/docs/fallback2.xml create mode 100644 test/XInclude/docs/include.xml create mode 100644 test/XInclude/docs/nodes.xml create mode 100644 test/XInclude/docs/nodes2.xml create mode 100644 test/XInclude/docs/nodes3.xml create mode 100644 test/XInclude/docs/recursive.xml create mode 100644 test/XInclude/docs/tstencoding.xml create mode 100644 test/XInclude/docs/txtinclude.xml create mode 100644 test/XInclude/ents/ids.xml create mode 100644 test/XInclude/ents/inc.txt create mode 100644 test/XInclude/ents/isolatin.txt create mode 100644 test/XInclude/ents/something.txt create mode 100644 test/XInclude/ents/something.xml create mode 100644 test/XInclude/ents/sub-inc.ent create mode 100644 test/XPath/docs/chapters create mode 100644 test/XPath/docs/id create mode 100644 test/XPath/docs/lang create mode 100644 test/XPath/docs/mixed create mode 100644 test/XPath/docs/nodes create mode 100644 test/XPath/docs/ns create mode 100644 test/XPath/docs/simple create mode 100644 test/XPath/docs/str create mode 100644 test/XPath/docs/usr1 create mode 100644 test/XPath/docs/vid create mode 100644 test/XPath/expr/base create mode 100644 test/XPath/expr/compare create mode 100644 test/XPath/expr/equality create mode 100644 test/XPath/expr/floats create mode 100644 test/XPath/expr/functions create mode 100644 test/XPath/expr/strings create mode 100644 test/XPath/tests/chaptersbase create mode 100644 test/XPath/tests/chaptersprefol create mode 100644 test/XPath/tests/idsimple create mode 100644 test/XPath/tests/langsimple create mode 100644 test/XPath/tests/mixedpat create mode 100644 test/XPath/tests/nodespat create mode 100644 test/XPath/tests/nssimple create mode 100644 test/XPath/tests/simpleabbr create mode 100644 test/XPath/tests/simplebase create mode 100644 test/XPath/tests/usr1check create mode 100644 test/XPath/tests/vidbase create mode 100644 test/XPath/xptr/chapterschildseq create mode 100644 test/XPath/xptr/chaptersparts create mode 100644 test/XPath/xptr/chaptersrange create mode 100644 test/XPath/xptr/strpoint create mode 100644 test/XPath/xptr/strrange create mode 100644 test/XPath/xptr/strrange2 create mode 100644 test/XPath/xptr/strrange3 create mode 100644 test/XPath/xptr/vidbase create mode 100644 test/XPath/xptr/vidchildseq create mode 100644 test/XPath/xptr/vidparts create mode 100644 test/att1 create mode 100644 test/att10 create mode 100644 test/att11 create mode 100644 test/att2 create mode 100644 test/att3 create mode 100644 test/att4 create mode 100644 test/att5 create mode 100644 test/att6 create mode 100644 test/att7 create mode 100644 test/att8 create mode 100644 test/att9 create mode 100644 test/attrib.xml create mode 100644 test/automata/a create mode 100644 test/automata/aba create mode 100644 test/automata/abaa create mode 100644 test/automata/abba create mode 100644 test/automata/po create mode 100644 test/badcomment.xml create mode 100644 test/bigentname.xml create mode 100644 test/bigname.xml create mode 100644 test/bigname2.xml create mode 100755 test/c14n/1-1-without-comments/doc.dtd create mode 100755 test/c14n/1-1-without-comments/example-1.xml create mode 100755 test/c14n/1-1-without-comments/example-2.xml create mode 100755 test/c14n/1-1-without-comments/example-3.xml create mode 100755 test/c14n/1-1-without-comments/example-4.xml create mode 100755 test/c14n/1-1-without-comments/example-5.xml create mode 100755 test/c14n/1-1-without-comments/example-6.xml create mode 100755 test/c14n/1-1-without-comments/example-7.xml create mode 100755 test/c14n/1-1-without-comments/example-7.xpath create mode 100755 test/c14n/1-1-without-comments/example-8.xml create mode 100755 test/c14n/1-1-without-comments/example-8.xpath create mode 100755 test/c14n/1-1-without-comments/world.txt create mode 100644 test/c14n/1-1-without-comments/xmlbase-c14n11spec-102.xml create mode 100644 test/c14n/1-1-without-comments/xmlbase-c14n11spec-102.xpath create mode 100644 test/c14n/1-1-without-comments/xmlbase-c14n11spec2-102.xml create mode 100644 test/c14n/1-1-without-comments/xmlbase-c14n11spec2-102.xpath create mode 100644 test/c14n/1-1-without-comments/xmlbase-c14n11spec3-102.xml create mode 100644 test/c14n/1-1-without-comments/xmlbase-c14n11spec3-102.xpath create mode 100755 test/c14n/1-1-without-comments/xmlbase-prop-1.xml create mode 100755 test/c14n/1-1-without-comments/xmlbase-prop-1.xpath create mode 100755 test/c14n/1-1-without-comments/xmlbase-prop-2.xml create mode 100755 test/c14n/1-1-without-comments/xmlbase-prop-2.xpath create mode 100755 test/c14n/1-1-without-comments/xmlbase-prop-3.xml create mode 100755 test/c14n/1-1-without-comments/xmlbase-prop-3.xpath create mode 100755 test/c14n/1-1-without-comments/xmlbase-prop-4.xml create mode 100755 test/c14n/1-1-without-comments/xmlbase-prop-4.xpath create mode 100755 test/c14n/1-1-without-comments/xmlbase-prop-5.xml create mode 100755 test/c14n/1-1-without-comments/xmlbase-prop-5.xpath create mode 100755 test/c14n/1-1-without-comments/xmlbase-prop-6.xml create mode 100755 test/c14n/1-1-without-comments/xmlbase-prop-6.xpath create mode 100755 test/c14n/1-1-without-comments/xmlbase-prop-7.xml create mode 100755 test/c14n/1-1-without-comments/xmlbase-prop-7.xpath create mode 100644 test/c14n/1-1-without-comments/xmlid-prop-1.xml create mode 100755 test/c14n/1-1-without-comments/xmlid-prop-1.xpath create mode 100644 test/c14n/1-1-without-comments/xmlid-prop-2.xml create mode 100755 test/c14n/1-1-without-comments/xmlid-prop-2.xpath create mode 100644 test/c14n/1-1-without-comments/xmllang-prop-1.xml create mode 100755 test/c14n/1-1-without-comments/xmllang-prop-1.xpath create mode 100644 test/c14n/1-1-without-comments/xmllang-prop-2.xml create mode 100755 test/c14n/1-1-without-comments/xmllang-prop-2.xpath create mode 100644 test/c14n/1-1-without-comments/xmllang-prop-3.xml create mode 100755 test/c14n/1-1-without-comments/xmllang-prop-3.xpath create mode 100644 test/c14n/1-1-without-comments/xmllang-prop-4.xml create mode 100755 test/c14n/1-1-without-comments/xmllang-prop-4.xpath create mode 100644 test/c14n/1-1-without-comments/xmlspace-prop-1.xml create mode 100755 test/c14n/1-1-without-comments/xmlspace-prop-1.xpath create mode 100644 test/c14n/1-1-without-comments/xmlspace-prop-2.xml create mode 100755 test/c14n/1-1-without-comments/xmlspace-prop-2.xpath create mode 100644 test/c14n/1-1-without-comments/xmlspace-prop-3.xml create mode 100755 test/c14n/1-1-without-comments/xmlspace-prop-3.xpath create mode 100644 test/c14n/1-1-without-comments/xmlspace-prop-4.xml create mode 100755 test/c14n/1-1-without-comments/xmlspace-prop-4.xpath create mode 100644 test/c14n/exc-without-comments/merlin-c14n-two-09.xml create mode 100644 test/c14n/exc-without-comments/merlin-c14n-two-09.xpath create mode 100644 test/c14n/exc-without-comments/merlin-c14n-two-10.xml create mode 100644 test/c14n/exc-without-comments/merlin-c14n-two-10.xpath create mode 100644 test/c14n/exc-without-comments/merlin-c14n-two-11.xml create mode 100644 test/c14n/exc-without-comments/merlin-c14n-two-11.xpath create mode 100644 test/c14n/exc-without-comments/merlin-c14n-two-12.xml create mode 100644 test/c14n/exc-without-comments/merlin-c14n-two-12.xpath create mode 100644 test/c14n/exc-without-comments/merlin-c14n-two-13.xml create mode 100644 test/c14n/exc-without-comments/merlin-c14n-two-13.xpath create mode 100644 test/c14n/exc-without-comments/merlin-c14n-two-14.xml create mode 100644 test/c14n/exc-without-comments/merlin-c14n-two-14.xpath create mode 100644 test/c14n/exc-without-comments/merlin-c14n-two-15.xml create mode 100644 test/c14n/exc-without-comments/merlin-c14n-two-15.xpath create mode 100644 test/c14n/exc-without-comments/merlin-c14n-two-16.xml create mode 100644 test/c14n/exc-without-comments/merlin-c14n-two-16.xpath create mode 100644 test/c14n/exc-without-comments/merlin-c14n-two-17.xml create mode 100644 test/c14n/exc-without-comments/merlin-c14n-two-17.xpath create mode 100644 test/c14n/exc-without-comments/merlin-c14n-two-18.ns create mode 100644 test/c14n/exc-without-comments/merlin-c14n-two-18.xml create mode 100644 test/c14n/exc-without-comments/merlin-c14n-two-18.xpath create mode 100644 test/c14n/exc-without-comments/merlin-c14n-two-19.ns create mode 100644 test/c14n/exc-without-comments/merlin-c14n-two-19.xml create mode 100644 test/c14n/exc-without-comments/merlin-c14n-two-19.xpath create mode 100644 test/c14n/exc-without-comments/merlin-c14n-two-20.ns create mode 100644 test/c14n/exc-without-comments/merlin-c14n-two-20.xml create mode 100644 test/c14n/exc-without-comments/merlin-c14n-two-20.xpath create mode 100644 test/c14n/exc-without-comments/merlin-c14n-two-21.ns create mode 100644 test/c14n/exc-without-comments/merlin-c14n-two-21.xml create mode 100644 test/c14n/exc-without-comments/merlin-c14n-two-21.xpath create mode 100644 test/c14n/exc-without-comments/merlin-c14n-two-22.ns create mode 100644 test/c14n/exc-without-comments/merlin-c14n-two-22.xml create mode 100644 test/c14n/exc-without-comments/merlin-c14n-two-22.xpath create mode 100644 test/c14n/exc-without-comments/merlin-c14n-two-23.ns create mode 100644 test/c14n/exc-without-comments/merlin-c14n-two-23.xml create mode 100644 test/c14n/exc-without-comments/merlin-c14n-two-23.xpath create mode 100644 test/c14n/exc-without-comments/merlin-c14n-two-24.ns create mode 100644 test/c14n/exc-without-comments/merlin-c14n-two-24.xml create mode 100644 test/c14n/exc-without-comments/merlin-c14n-two-24.xpath create mode 100644 test/c14n/exc-without-comments/merlin-c14n-two-25.ns create mode 100644 test/c14n/exc-without-comments/merlin-c14n-two-25.xml create mode 100644 test/c14n/exc-without-comments/merlin-c14n-two-25.xpath create mode 100644 test/c14n/exc-without-comments/merlin-c14n-two-26.ns create mode 100644 test/c14n/exc-without-comments/merlin-c14n-two-26.xml create mode 100644 test/c14n/exc-without-comments/merlin-c14n-two-26.xpath create mode 100644 test/c14n/exc-without-comments/test-0.xml create mode 100644 test/c14n/exc-without-comments/test-0.xpath create mode 100644 test/c14n/exc-without-comments/test-1.ns create mode 100644 test/c14n/exc-without-comments/test-1.xml create mode 100644 test/c14n/exc-without-comments/test-1.xpath create mode 100644 test/c14n/exc-without-comments/test-2.xml create mode 100644 test/c14n/exc-without-comments/test-2.xpath create mode 100644 test/c14n/with-comments/doc.dtd create mode 100644 test/c14n/with-comments/example-1.xml create mode 100644 test/c14n/with-comments/example-2.xml create mode 100644 test/c14n/with-comments/example-3.xml create mode 100644 test/c14n/with-comments/example-4.xml create mode 100644 test/c14n/with-comments/example-5.xml create mode 100644 test/c14n/with-comments/example-6.xml create mode 100644 test/c14n/with-comments/example-7.xml create mode 100644 test/c14n/with-comments/example-7.xpath create mode 100644 test/c14n/with-comments/world.txt create mode 100644 test/c14n/without-comments/doc.dtd create mode 100644 test/c14n/without-comments/example-1.xml create mode 100644 test/c14n/without-comments/example-2.xml create mode 100644 test/c14n/without-comments/example-3.xml create mode 100644 test/c14n/without-comments/example-4.xml create mode 100644 test/c14n/without-comments/example-5.xml create mode 100644 test/c14n/without-comments/example-6.xml create mode 100644 test/c14n/without-comments/example-7.xml create mode 100644 test/c14n/without-comments/example-7.xpath create mode 100644 test/c14n/without-comments/merlin-c14n-two-00.xml create mode 100644 test/c14n/without-comments/merlin-c14n-two-00.xpath create mode 100644 test/c14n/without-comments/merlin-c14n-two-01.xml create mode 100644 test/c14n/without-comments/merlin-c14n-two-01.xpath create mode 100644 test/c14n/without-comments/merlin-c14n-two-02.xml create mode 100644 test/c14n/without-comments/merlin-c14n-two-02.xpath create mode 100644 test/c14n/without-comments/merlin-c14n-two-03.xml create mode 100644 test/c14n/without-comments/merlin-c14n-two-03.xpath create mode 100644 test/c14n/without-comments/merlin-c14n-two-04.xml create mode 100644 test/c14n/without-comments/merlin-c14n-two-04.xpath create mode 100644 test/c14n/without-comments/merlin-c14n-two-05.xml create mode 100644 test/c14n/without-comments/merlin-c14n-two-05.xpath create mode 100644 test/c14n/without-comments/merlin-c14n-two-06.xml create mode 100644 test/c14n/without-comments/merlin-c14n-two-06.xpath create mode 100644 test/c14n/without-comments/merlin-c14n-two-07.xml create mode 100644 test/c14n/without-comments/merlin-c14n-two-07.xpath create mode 100644 test/c14n/without-comments/merlin-c14n-two-08.xml create mode 100644 test/c14n/without-comments/merlin-c14n-two-08.xpath create mode 100644 test/c14n/without-comments/test-0.xml create mode 100644 test/c14n/without-comments/test-0.xpath create mode 100644 test/c14n/without-comments/test-1.xml create mode 100644 test/c14n/without-comments/test-1.xpath create mode 100644 test/c14n/without-comments/test-2.xml create mode 100644 test/c14n/without-comments/test-2.xpath create mode 100644 test/c14n/without-comments/test-3.xml create mode 100644 test/c14n/without-comments/test-3.xpath create mode 100644 test/c14n/without-comments/world.txt create mode 100644 test/catalogs/catal.script create mode 100644 test/catalogs/catal.sgml create mode 100644 test/catalogs/catal1.sgml create mode 100644 test/catalogs/catal2.sgml create mode 100644 test/catalogs/catal3.sgml create mode 100644 test/catalogs/docbook.script create mode 100644 test/catalogs/docbook.xml create mode 100644 test/catalogs/registry.script create mode 100644 test/catalogs/registry.xml create mode 100644 test/catalogs/stylesheet.xml create mode 100644 test/catalogs/whites.script create mode 100644 test/catalogs/whites.sgml create mode 100644 test/catalogs/whitex.script create mode 100644 test/catalogs/whitex.xml create mode 100644 test/cdata create mode 100644 test/cdata-2-byte-UTF-8.xml create mode 100644 test/cdata-3-byte-UTF-8.xml create mode 100644 test/cdata-4-byte-UTF-8.xml create mode 100644 test/cdata2 create mode 100644 test/comment.xml create mode 100644 test/comment2.xml create mode 100644 test/comment3.xml create mode 100644 test/comment4.xml create mode 100644 test/comment5.xml create mode 100644 test/comment6.xml create mode 100644 test/dav1 create mode 100644 test/dav10 create mode 100644 test/dav11 create mode 100644 test/dav12 create mode 100644 test/dav13 create mode 100644 test/dav15 create mode 100644 test/dav16 create mode 100644 test/dav17 create mode 100644 test/dav18 create mode 100644 test/dav19 create mode 100644 test/dav2 create mode 100644 test/dav3 create mode 100644 test/dav4 create mode 100644 test/dav5 create mode 100644 test/dav6 create mode 100644 test/dav7 create mode 100644 test/dav8 create mode 100644 test/dav9 create mode 100644 test/defattr.xml create mode 100644 test/defattr2.xml create mode 100644 test/dia1 create mode 100644 test/dia2 create mode 100644 test/dtd1 create mode 100644 test/dtd10 create mode 100644 test/dtd11 create mode 100644 test/dtd12 create mode 100644 test/dtd13 create mode 100644 test/dtd2 create mode 100644 test/dtd3 create mode 100644 test/dtd4 create mode 100644 test/dtd5 create mode 100644 test/dtd6 create mode 100644 test/dtd7 create mode 100644 test/dtd8 create mode 100644 test/dtd9 create mode 100644 test/dtds/eve.dtd create mode 100644 test/ebcdic_566012.xml create mode 100644 test/emptycdata.xml create mode 100644 test/ent1 create mode 100644 test/ent10 create mode 100644 test/ent11 create mode 100644 test/ent12 create mode 100644 test/ent13 create mode 100644 test/ent2 create mode 100644 test/ent3 create mode 100644 test/ent4 create mode 100644 test/ent5 create mode 100644 test/ent6 create mode 100644 test/ent7 create mode 100644 test/ent8 create mode 100644 test/ent9 create mode 100644 test/ent_738805.xml create mode 100644 test/errors/754946.xml create mode 100644 test/errors/754947.xml create mode 100644 test/errors/758588.xml create mode 100644 test/errors/759020.xml create mode 100755 test/errors/759398.xml create mode 100644 test/errors/759573-2.xml create mode 100644 test/errors/759573.xml create mode 100644 test/errors/attr1.xml create mode 100644 test/errors/attr2.xml create mode 100644 test/errors/attr3.xml create mode 100644 test/errors/attr4.xml create mode 100644 test/errors/cdata.xml create mode 100644 test/errors/charref1.xml create mode 100644 test/errors/comment1.xml create mode 100644 test/errors/content1.xml create mode 100644 test/errors/dtd13 create mode 100644 test/errors/extparsedent.xml create mode 100644 test/errors/name.xml create mode 100644 test/errors/name2.xml create mode 100644 test/eve.xml create mode 100644 test/expr/base create mode 100644 test/intsubset.xml create mode 100644 test/intsubset2.xml create mode 100644 test/isolat1 create mode 100644 test/isolat2 create mode 100644 test/isolat3 create mode 100644 test/japancrlf.xml create mode 100644 test/namespaces/err_0.xml create mode 100644 test/namespaces/err_1.xml create mode 100644 test/namespaces/err_10.xml create mode 100644 test/namespaces/err_11.xml create mode 100644 test/namespaces/err_2.xml create mode 100644 test/namespaces/err_3.xml create mode 100644 test/namespaces/err_4.xml create mode 100644 test/namespaces/err_5.xml create mode 100644 test/namespaces/err_6.xml create mode 100644 test/namespaces/err_7.xml create mode 100644 test/namespaces/err_8.xml create mode 100644 test/namespaces/err_9.xml create mode 100644 test/namespaces/reconcile/tests-to-c.xsl create mode 100644 test/namespaces/reconcile/tests.xml create mode 100644 test/ns create mode 100644 test/ns2 create mode 100644 test/ns3 create mode 100644 test/ns4 create mode 100644 test/ns5 create mode 100644 test/ns6 create mode 100644 test/ns7 create mode 100644 test/nsclean.xml create mode 100644 test/p3p create mode 100644 test/pattern/conj.pat create mode 100644 test/pattern/conj.xml create mode 100644 test/pattern/multiple.pat create mode 100644 test/pattern/multiple.xml create mode 100644 test/pattern/namespaces.pat create mode 100644 test/pattern/namespaces.xml create mode 100644 test/pattern/simple.pat create mode 100644 test/pattern/simple.xml create mode 100644 test/pi.xml create mode 100644 test/pi2.xml create mode 100644 test/rdf1 create mode 100644 test/rdf2 create mode 100644 test/recurse/good.xml create mode 100644 test/recurse/goodattr.xml create mode 100644 test/recurse/lol1.xml create mode 100644 test/recurse/lol2.xml create mode 100644 test/recurse/lol3.dtd create mode 100644 test/recurse/lol3.xml create mode 100644 test/recurse/lol4.patch create mode 100644 test/recurse/lol4.xml create mode 100644 test/recurse/lol5.xml create mode 100644 test/recurse/lol6.xml create mode 100644 test/regexp/branch create mode 100644 test/regexp/bug316338 create mode 100644 test/regexp/bug420596 create mode 100644 test/regexp/content create mode 100644 test/regexp/hard create mode 100644 test/regexp/ncname create mode 100644 test/regexp/ranges create mode 100644 test/regexp/ranges2 create mode 100644 test/regexp/xpath create mode 100644 test/relaxng/302836.rng create mode 100644 test/relaxng/302836_0.xml create mode 100644 test/relaxng/307377.rng create mode 100644 test/relaxng/307377_0.xml create mode 100644 test/relaxng/307377_1.xml create mode 100644 test/relaxng/307377_2.xml create mode 100644 test/relaxng/492317.rng create mode 100644 test/relaxng/492317_0.xml create mode 100644 test/relaxng/492317_1.xml create mode 100644 test/relaxng/492317_2.xml create mode 100644 test/relaxng/558452.rng create mode 100644 test/relaxng/558452_0.xml create mode 100644 test/relaxng/558452_1.xml create mode 100644 test/relaxng/558452_2.xml create mode 100644 test/relaxng/558452_3.xml create mode 100644 test/relaxng/558452_4.xml create mode 100644 test/relaxng/565219.rng create mode 100644 test/relaxng/565219_0.xml create mode 100644 test/relaxng/565219_1.xml create mode 100644 test/relaxng/565219_2.xml create mode 100644 test/relaxng/595792-ext.rng create mode 100644 test/relaxng/595792.rng create mode 100644 test/relaxng/595792_0.xml create mode 100644 test/relaxng/710744.rng create mode 100644 test/relaxng/710744_1.xml create mode 100644 test/relaxng/710744_2.xml create mode 100644 test/relaxng/OASIS/spectest.xml create mode 100644 test/relaxng/OpenDocumentSub.rng create mode 100644 test/relaxng/OpenDocumentSub_0.xml create mode 100644 test/relaxng/addressBook.rng create mode 100644 test/relaxng/choice0.rng create mode 100644 test/relaxng/choice0_0.xml create mode 100644 test/relaxng/choice0_1.xml create mode 100644 test/relaxng/choice0_2.xml create mode 100644 test/relaxng/choice0_3.xml create mode 100644 test/relaxng/choice0_4.xml create mode 100644 test/relaxng/choice0_5.xml create mode 100644 test/relaxng/choice0_6.xml create mode 100644 test/relaxng/choice0_7.xml create mode 100644 test/relaxng/choice0_8.xml create mode 100644 test/relaxng/compare0.rng create mode 100644 test/relaxng/compare0_0.xml create mode 100644 test/relaxng/comps.rng create mode 100644 test/relaxng/comps_0.xml create mode 100644 test/relaxng/demo.rng create mode 100644 test/relaxng/demo.xml create mode 100644 test/relaxng/demo2.rng create mode 100644 test/relaxng/demo3.rng create mode 100644 test/relaxng/docbook.rng create mode 100644 test/relaxng/docbook_0.xml create mode 100644 test/relaxng/empty0.rng create mode 100644 test/relaxng/empty0_0.xml create mode 100644 test/relaxng/empty1.rng create mode 100644 test/relaxng/empty1_0.xml create mode 100644 test/relaxng/empty1_1.xml create mode 100644 test/relaxng/inline.rng create mode 100644 test/relaxng/inline2.rng create mode 100644 test/relaxng/inline3.rng create mode 100644 test/relaxng/interleave0_0.rng create mode 100644 test/relaxng/interleave1_0.rng create mode 100644 test/relaxng/libvirt.rng create mode 100644 test/relaxng/libvirt_0.xml create mode 100644 test/relaxng/list.rng create mode 100644 test/relaxng/list_0.xml create mode 100644 test/relaxng/list_1.xml create mode 100644 test/relaxng/pattern1.rng create mode 100644 test/relaxng/pattern2.rng create mode 100644 test/relaxng/pattern3.rng create mode 100644 test/relaxng/pattern3_1.xml create mode 100644 test/relaxng/proofsystem.rng create mode 100644 test/relaxng/rngbug-001.ext create mode 100644 test/relaxng/rngbug-001.rng create mode 100644 test/relaxng/rngbug-001.xml create mode 100644 test/relaxng/spec.rng create mode 100644 test/relaxng/spec1.rng create mode 100644 test/relaxng/spec1_1.xml create mode 100644 test/relaxng/spec_0.xml create mode 100644 test/relaxng/table.rng create mode 100644 test/relaxng/testsuite.xml create mode 100644 test/relaxng/tutor10_1.rng create mode 100644 test/relaxng/tutor10_10.rng create mode 100644 test/relaxng/tutor10_10_1.xml create mode 100644 test/relaxng/tutor10_1_1.xml create mode 100644 test/relaxng/tutor10_1_2.xml create mode 100644 test/relaxng/tutor10_1_3.xml create mode 100644 test/relaxng/tutor10_1_4.xml create mode 100644 test/relaxng/tutor10_1_5.xml create mode 100644 test/relaxng/tutor10_1_6.xml create mode 100644 test/relaxng/tutor10_2.rng create mode 100644 test/relaxng/tutor10_2_1.xml create mode 100644 test/relaxng/tutor10_2_2.xml create mode 100644 test/relaxng/tutor10_2_3.xml create mode 100644 test/relaxng/tutor10_2_4.xml create mode 100644 test/relaxng/tutor10_3.rng create mode 100644 test/relaxng/tutor10_3_1.xml create mode 100644 test/relaxng/tutor10_4.rng create mode 100644 test/relaxng/tutor10_4_1.xml create mode 100644 test/relaxng/tutor10_5.rng create mode 100644 test/relaxng/tutor10_5_1.xml create mode 100644 test/relaxng/tutor10_6.rng create mode 100644 test/relaxng/tutor10_6_1.xml create mode 100644 test/relaxng/tutor10_7.rng create mode 100644 test/relaxng/tutor10_7_1.xml create mode 100644 test/relaxng/tutor10_7_2.xml create mode 100644 test/relaxng/tutor10_7_3.xml create mode 100644 test/relaxng/tutor10_8.rng create mode 100644 test/relaxng/tutor10_8_1.xml create mode 100644 test/relaxng/tutor10_8_2.xml create mode 100644 test/relaxng/tutor10_8_3.xml create mode 100644 test/relaxng/tutor10_9.rng create mode 100644 test/relaxng/tutor10_9_1.xml create mode 100644 test/relaxng/tutor11_1.rng create mode 100644 test/relaxng/tutor11_1_1.xml create mode 100644 test/relaxng/tutor11_1_2.xml create mode 100644 test/relaxng/tutor11_1_3.xml create mode 100644 test/relaxng/tutor11_2.rng create mode 100644 test/relaxng/tutor11_2_1.xml create mode 100644 test/relaxng/tutor11_2_2.xml create mode 100644 test/relaxng/tutor11_2_3.xml create mode 100644 test/relaxng/tutor11_3.rng create mode 100644 test/relaxng/tutor11_3_1.xml create mode 100644 test/relaxng/tutor11_4.rng create mode 100644 test/relaxng/tutor11_4_1.xml create mode 100644 test/relaxng/tutor12_1.rng create mode 100644 test/relaxng/tutor12_1_1.xml create mode 100644 test/relaxng/tutor13_1.rng create mode 100644 test/relaxng/tutor13_1_1.xml create mode 100644 test/relaxng/tutor14_1.rng create mode 100644 test/relaxng/tutor1_1.rng create mode 100644 test/relaxng/tutor1_1_1.xml create mode 100644 test/relaxng/tutor1_2.rng create mode 100644 test/relaxng/tutor1_2_1.xml create mode 100644 test/relaxng/tutor1_3.rng create mode 100644 test/relaxng/tutor1_3_1.xml create mode 100644 test/relaxng/tutor1_4.rng create mode 100644 test/relaxng/tutor1_4_1.xml create mode 100644 test/relaxng/tutor2_1.rng create mode 100644 test/relaxng/tutor2_1_1.xml create mode 100644 test/relaxng/tutor3_1.rng create mode 100644 test/relaxng/tutor3_1_1.xml create mode 100644 test/relaxng/tutor3_1_2.xml create mode 100644 test/relaxng/tutor3_2.rng create mode 100644 test/relaxng/tutor3_2_1.xml create mode 100644 test/relaxng/tutor3_3.rng create mode 100644 test/relaxng/tutor3_3_1.xml create mode 100644 test/relaxng/tutor3_4.rng create mode 100644 test/relaxng/tutor3_4_1.xml create mode 100644 test/relaxng/tutor3_5.rng create mode 100644 test/relaxng/tutor3_5_1.xml create mode 100644 test/relaxng/tutor3_5_2.xml create mode 100644 test/relaxng/tutor3_6.rng create mode 100644 test/relaxng/tutor3_6_1.xml create mode 100644 test/relaxng/tutor3_7.rng create mode 100644 test/relaxng/tutor3_7_1.xml create mode 100644 test/relaxng/tutor3_8.rng create mode 100644 test/relaxng/tutor3_8_1.xml create mode 100644 test/relaxng/tutor3_9.rng create mode 100644 test/relaxng/tutor3_9_1.xml create mode 100644 test/relaxng/tutor4_1.rng create mode 100644 test/relaxng/tutor4_1_1.xml create mode 100644 test/relaxng/tutor4_2.rng create mode 100644 test/relaxng/tutor4_2_1.xml create mode 100644 test/relaxng/tutor4_3.rng create mode 100644 test/relaxng/tutor4_3_1.xml create mode 100644 test/relaxng/tutor4_3_2.xml create mode 100644 test/relaxng/tutor4_3_3.xml create mode 100644 test/relaxng/tutor4_3_4.xml create mode 100644 test/relaxng/tutor4_3_5.xml create mode 100644 test/relaxng/tutor4_3_6.xml create mode 100644 test/relaxng/tutor4_4.rng create mode 100644 test/relaxng/tutor4_4_1.xml create mode 100644 test/relaxng/tutor5_1.rng create mode 100644 test/relaxng/tutor5_1_1.xml create mode 100644 test/relaxng/tutor5_2.rng create mode 100644 test/relaxng/tutor5_2_1.xml create mode 100644 test/relaxng/tutor5_3.rng create mode 100644 test/relaxng/tutor5_3_1.xml create mode 100644 test/relaxng/tutor5_4.rng create mode 100644 test/relaxng/tutor5_4_1.xml create mode 100644 test/relaxng/tutor5_5.rng create mode 100644 test/relaxng/tutor6_1.rng create mode 100644 test/relaxng/tutor6_1_1.xml create mode 100644 test/relaxng/tutor6_1_2.xml create mode 100644 test/relaxng/tutor6_1_3.xml create mode 100644 test/relaxng/tutor6_1_4.xml create mode 100644 test/relaxng/tutor6_1_5.xml create mode 100644 test/relaxng/tutor6_2.rng create mode 100644 test/relaxng/tutor6_2_1.xml create mode 100644 test/relaxng/tutor6_2_2.xml create mode 100644 test/relaxng/tutor6_2_3.xml create mode 100644 test/relaxng/tutor6_2_4.xml create mode 100644 test/relaxng/tutor6_3.rng create mode 100644 test/relaxng/tutor6_3_1.xml create mode 100644 test/relaxng/tutor7_1.rng create mode 100644 test/relaxng/tutor7_1_1.xml create mode 100644 test/relaxng/tutor7_1_2.xml create mode 100644 test/relaxng/tutor7_1_3.xml create mode 100644 test/relaxng/tutor7_1_4.xml create mode 100644 test/relaxng/tutor7_2.rng create mode 100644 test/relaxng/tutor7_2_1.xml create mode 100644 test/relaxng/tutor7_2_2.xml create mode 100644 test/relaxng/tutor7_2_3.xml create mode 100644 test/relaxng/tutor7_2_4.xml create mode 100644 test/relaxng/tutor7_3.rng create mode 100644 test/relaxng/tutor7_3_1.xml create mode 100644 test/relaxng/tutor7_3_2.xml create mode 100644 test/relaxng/tutor7_3_3.xml create mode 100644 test/relaxng/tutor7_3_4.xml create mode 100644 test/relaxng/tutor7_3_5.xml create mode 100644 test/relaxng/tutor8_1.rng create mode 100644 test/relaxng/tutor8_1_1.xml create mode 100644 test/relaxng/tutor8_1_2.xml create mode 100644 test/relaxng/tutor8_2.rng create mode 100644 test/relaxng/tutor8_2_1.xml create mode 100644 test/relaxng/tutor8_2_2.xml create mode 100644 test/relaxng/tutor8_2_3.xml create mode 100644 test/relaxng/tutor8_2_4.xml create mode 100644 test/relaxng/tutor8_2_5.xml create mode 100644 test/relaxng/tutor8_2_6.xml create mode 100644 test/relaxng/tutor8_3.rng create mode 100644 test/relaxng/tutor8_3_1.xml create mode 100644 test/relaxng/tutor9_1.rng create mode 100644 test/relaxng/tutor9_10.rng create mode 100644 test/relaxng/tutor9_10_1.xml create mode 100644 test/relaxng/tutor9_11.rng create mode 100644 test/relaxng/tutor9_11_1.xml create mode 100644 test/relaxng/tutor9_12.rng create mode 100644 test/relaxng/tutor9_12_1.xml create mode 100644 test/relaxng/tutor9_1_1.xml create mode 100644 test/relaxng/tutor9_2.rng create mode 100644 test/relaxng/tutor9_2_1.xml create mode 100644 test/relaxng/tutor9_2_2.xml create mode 100644 test/relaxng/tutor9_3.rng create mode 100644 test/relaxng/tutor9_3_1.xml create mode 100644 test/relaxng/tutor9_3_2.xml create mode 100644 test/relaxng/tutor9_4.rng create mode 100644 test/relaxng/tutor9_4_1.xml create mode 100644 test/relaxng/tutor9_4_2.xml create mode 100644 test/relaxng/tutor9_5.rng create mode 100644 test/relaxng/tutor9_5_1.xml create mode 100644 test/relaxng/tutor9_5_2.xml create mode 100644 test/relaxng/tutor9_5_3.xml create mode 100644 test/relaxng/tutor9_6.rng create mode 100644 test/relaxng/tutor9_6_1.xml create mode 100644 test/relaxng/tutor9_6_2.xml create mode 100644 test/relaxng/tutor9_6_3.xml create mode 100644 test/relaxng/tutor9_7.rng create mode 100644 test/relaxng/tutor9_7_1.xml create mode 100644 test/relaxng/tutor9_8.rng create mode 100644 test/relaxng/tutor9_8_1.xml create mode 100644 test/relaxng/tutor9_9.rng create mode 100644 test/relaxng/tutor9_9_1.xml create mode 100644 test/relaxng/tutorA.rng create mode 100644 test/schemas/570702_0.xml create mode 100644 test/schemas/570702_0.xsd create mode 100644 test/schemas/579746_0.xml create mode 100644 test/schemas/579746_0.xsd create mode 100644 test/schemas/579746_1.xml create mode 100644 test/schemas/579746_1.xsd create mode 100644 test/schemas/579746_2.xml create mode 100644 test/schemas/579746_3.xml create mode 100644 test/schemas/579746_4.xml create mode 100644 test/schemas/579746_5.xml create mode 100644 test/schemas/582887-attribute.xsd create mode 100644 test/schemas/582887-common.xsd create mode 100644 test/schemas/582887-element.xsd create mode 100644 test/schemas/582887_0.xml create mode 100644 test/schemas/582887_0.xsd create mode 100644 test/schemas/582906-1-common.xsd create mode 100644 test/schemas/582906-1-prog1.xsd create mode 100644 test/schemas/582906-1-prog2-include.xsd create mode 100644 test/schemas/582906-1-prog2.xsd create mode 100644 test/schemas/582906-1_0.xml create mode 100644 test/schemas/582906-1_0.xsd create mode 100644 test/schemas/582906-2-common.xsd create mode 100644 test/schemas/582906-2-prog1.xsd create mode 100644 test/schemas/582906-2-prog2-include.xsd create mode 100644 test/schemas/582906-2-prog2.xsd create mode 100644 test/schemas/582906-2_0.xml create mode 100644 test/schemas/582906-2_0.xsd create mode 100644 test/schemas/all.xsd create mode 100644 test/schemas/all1_0.xml create mode 100644 test/schemas/all1_0.xsd create mode 100644 test/schemas/all_0.xml create mode 100644 test/schemas/all_0.xsd create mode 100644 test/schemas/all_1.xml create mode 100644 test/schemas/all_1.xsd create mode 100644 test/schemas/all_2.xml create mode 100644 test/schemas/all_2.xsd create mode 100644 test/schemas/all_3.xml create mode 100644 test/schemas/all_4.xml create mode 100644 test/schemas/all_5.xml create mode 100644 test/schemas/all_6.xml create mode 100644 test/schemas/all_7.xml create mode 100644 test/schemas/allsg_0.xml create mode 100644 test/schemas/allsg_0.xsd create mode 100644 test/schemas/allsg_1.xml create mode 100644 test/schemas/allsg_2.xml create mode 100644 test/schemas/allsg_3.xml create mode 100644 test/schemas/allsg_4.xml create mode 100644 test/schemas/allsg_5.xml create mode 100644 test/schemas/annot-err_0.xml create mode 100644 test/schemas/annot-err_0.xsd create mode 100644 test/schemas/any1_0.xml create mode 100644 test/schemas/any1_0.xsd create mode 100644 test/schemas/any2_0.xml create mode 100644 test/schemas/any2_0.xsd create mode 100644 test/schemas/any3_0.xml create mode 100644 test/schemas/any3_0.xsd create mode 100644 test/schemas/any4_0.xml create mode 100644 test/schemas/any4_0.xsd create mode 100644 test/schemas/any5_0.xml create mode 100644 test/schemas/any5_0.xsd create mode 100644 test/schemas/any5_1.xml create mode 100644 test/schemas/any5_1.xsd create mode 100644 test/schemas/any5_2.xml create mode 100644 test/schemas/any5_3.xml create mode 100644 test/schemas/any5_4.xml create mode 100644 test/schemas/any5_5.xml create mode 100644 test/schemas/any5_6.xml create mode 100755 test/schemas/any6_0.xml create mode 100644 test/schemas/any6_1.xsd create mode 100644 test/schemas/any6_2.xsd create mode 100755 test/schemas/any7_0.xml create mode 100755 test/schemas/any7_1.xml create mode 100755 test/schemas/any7_1.xsd create mode 100644 test/schemas/any7_2.xml create mode 100755 test/schemas/any7_2.xsd create mode 100644 test/schemas/any8_0.xml create mode 100644 test/schemas/any8_1.xsd create mode 100644 test/schemas/anyAttr-derive-errors1_0.xml create mode 100644 test/schemas/anyAttr-derive-errors1_0.xsd create mode 100644 test/schemas/anyAttr-derive1_0.xml create mode 100644 test/schemas/anyAttr-derive1_0.xsd create mode 100644 test/schemas/anyAttr-derive2_0.xml create mode 100644 test/schemas/anyAttr-derive2_0.xsd create mode 100644 test/schemas/anyAttr-errors1_0.xml create mode 100644 test/schemas/anyAttr-processContents-err1_0.xml create mode 100644 test/schemas/anyAttr-processContents-err1_0.xsd create mode 100644 test/schemas/anyAttr-processContents1_0.xml create mode 100644 test/schemas/anyAttr-processContents1_0.xsd create mode 100644 test/schemas/anyAttr.importA.1_0.xsd create mode 100644 test/schemas/anyAttr.importB.1_0.xsd create mode 100644 test/schemas/anyAttr1_0.xml create mode 100644 test/schemas/anyAttr1_0.xsd create mode 100644 test/schemas/attr0_0.xml create mode 100644 test/schemas/attr0_0.xsd create mode 100644 test/schemas/attruse_0_0.xml create mode 100644 test/schemas/attruse_0_0.xsd create mode 100644 test/schemas/attruse_0_1.xml create mode 100644 test/schemas/attruse_0_2.xml create mode 100644 test/schemas/bug141312_0.xml create mode 100644 test/schemas/bug141312_0.xsd create mode 100644 test/schemas/bug141333.xml create mode 100644 test/schemas/bug141333.xsd create mode 100644 test/schemas/bug141333_0.xml create mode 100644 test/schemas/bug141333_0.xsd create mode 100644 test/schemas/bug143951.imp create mode 100644 test/schemas/bug143951_0.xml create mode 100644 test/schemas/bug143951_0.xsd create mode 100644 test/schemas/bug145246.xsd.imp create mode 100644 test/schemas/bug145246_0.xml create mode 100644 test/schemas/bug145246_0.xsd create mode 100755 test/schemas/bug152470_1.xml create mode 100755 test/schemas/bug152470_1.xsd create mode 100644 test/schemas/bug167754_0.xml create mode 100644 test/schemas/bug167754_0.xsd create mode 100644 test/schemas/bug303566_1.xml create mode 100644 test/schemas/bug303566_1.xsd create mode 100644 test/schemas/bug306806_0.xml create mode 100644 test/schemas/bug306806_1.xsd create mode 100644 test/schemas/bug309338_0.xml create mode 100644 test/schemas/bug309338_1.xsd create mode 100644 test/schemas/bug310264_0.xml create mode 100644 test/schemas/bug310264_0.xsd create mode 100644 test/schemas/bug312957_0.xml create mode 100644 test/schemas/bug312957_1.xsd create mode 100644 test/schemas/bug313982_0.xml create mode 100644 test/schemas/bug313982_0.xsd create mode 100644 test/schemas/bug321475_0.xml create mode 100644 test/schemas/bug321475_1.xsd create mode 100644 test/schemas/bug322411_0.xml create mode 100644 test/schemas/bug322411_1.xsd create mode 100644 test/schemas/bug323510_0.xml create mode 100644 test/schemas/bug323510_1.xsd create mode 100644 test/schemas/bug455953_0.xml create mode 100644 test/schemas/bug455953_0.xsd create mode 100644 test/schemas/changelog093_0.xml create mode 100644 test/schemas/changelog093_1.xsd create mode 100644 test/schemas/choice_0.xml create mode 100644 test/schemas/choice_0.xsd create mode 100644 test/schemas/choice_1.xml create mode 100644 test/schemas/choice_1.xsd create mode 100644 test/schemas/choice_2.xml create mode 100644 test/schemas/choice_2.xsd create mode 100644 test/schemas/choice_3.xml create mode 100644 test/schemas/choice_4.xml create mode 100644 test/schemas/choice_5.xml create mode 100644 test/schemas/choice_6.xml create mode 100644 test/schemas/complex-type-extension_0.xml create mode 100644 test/schemas/complex-type-extension_0.xsd create mode 100644 test/schemas/cos-ct-extends-1-3_0.xml create mode 100644 test/schemas/cos-ct-extends-1-3_0.xsd create mode 100644 test/schemas/cos-st-restricts-1-2-err_0.xml create mode 100644 test/schemas/cos-st-restricts-1-2-err_0.xsd create mode 100644 test/schemas/ct-sc-nobase_0.xml create mode 100644 test/schemas/ct-sc-nobase_0.xsd create mode 100644 test/schemas/date_0.xml create mode 100644 test/schemas/date_0.xsd create mode 100644 test/schemas/decimal-1.xml create mode 100644 test/schemas/decimal-1.xsd create mode 100644 test/schemas/decimal-1_0.xml create mode 100644 test/schemas/decimal-1_1.xsd create mode 100644 test/schemas/decimal-2_0.xml create mode 100644 test/schemas/decimal-2_1.xsd create mode 100644 test/schemas/decimal-3_0.xml create mode 100644 test/schemas/decimal-3_1.xsd create mode 100644 test/schemas/derivation-ok-extension-err_0.xml create mode 100644 test/schemas/derivation-ok-extension-err_0.xsd create mode 100644 test/schemas/derivation-ok-extension_0.xml create mode 100644 test/schemas/derivation-ok-extension_0.xsd create mode 100644 test/schemas/derivation-ok-restriction-2-1-1_0.xml create mode 100644 test/schemas/derivation-ok-restriction-2-1-1_0.xsd create mode 100644 test/schemas/derivation-ok-restriction-4-1-err_0.xml create mode 100644 test/schemas/derivation-ok-restriction-4-1-err_0.xsd create mode 100644 test/schemas/derivation-restriction-anyAttr_0.xml create mode 100644 test/schemas/derivation-restriction-anyAttr_0.xsd create mode 100644 test/schemas/derivation-restriction-anyType.xml create mode 100644 test/schemas/derivation-restriction-anyType.xsd create mode 100644 test/schemas/deter0_0.xml create mode 100644 test/schemas/deter0_0.xsd create mode 100644 test/schemas/dur_0.xml create mode 100644 test/schemas/dur_0.xsd create mode 100644 test/schemas/elem0_0.xml create mode 100644 test/schemas/elem0_0.xsd create mode 100644 test/schemas/element-err_0.xml create mode 100644 test/schemas/element-err_0.xsd create mode 100644 test/schemas/element-minmax-err_0.xml create mode 100644 test/schemas/element-minmax-err_0.xsd create mode 100644 test/schemas/empty-value_0.xml create mode 100644 test/schemas/empty-value_1.xml create mode 100644 test/schemas/empty-value_1.xsd create mode 100644 test/schemas/empty_0.xml create mode 100644 test/schemas/empty_0.xsd create mode 100644 test/schemas/empty_1.xsd create mode 100644 test/schemas/extension0_0.xml create mode 100644 test/schemas/extension0_0.xsd create mode 100644 test/schemas/extension1_0.xml create mode 100644 test/schemas/extension1_0.xsd create mode 100644 test/schemas/extension1_1.xml create mode 100644 test/schemas/extension1_2.xml create mode 100644 test/schemas/extension2_0.xml create mode 100644 test/schemas/extension2_1.xsd create mode 100644 test/schemas/facet-unionST-err1_0.xml create mode 100644 test/schemas/facet-unionST-err1_0.xsd create mode 100644 test/schemas/facet-whiteSpace_0.xml create mode 100644 test/schemas/facet-whiteSpace_0.xsd create mode 100644 test/schemas/group0_0.xml create mode 100644 test/schemas/group0_0.xsd create mode 100644 test/schemas/hexbinary_0.xml create mode 100644 test/schemas/hexbinary_0.xsd create mode 100644 test/schemas/hexbinary_1.xml create mode 100644 test/schemas/idc-keyref-err1_0.xml create mode 100644 test/schemas/idc-keyref-err1_1.xsd create mode 100644 test/schemas/import-455953.xsd create mode 100755 test/schemas/import-bad-1_0.imp create mode 100644 test/schemas/import0_0.imp create mode 100644 test/schemas/import0_0.xml create mode 100644 test/schemas/import0_0.xsd create mode 100644 test/schemas/import1_0.imp create mode 100644 test/schemas/import1_0.xml create mode 100644 test/schemas/import1_0.xsd create mode 100644 test/schemas/import1_0b.imp create mode 100644 test/schemas/import2_0.imp create mode 100644 test/schemas/import2_0.xml create mode 100644 test/schemas/import2_0.xsd create mode 100644 test/schemas/include1_0.inc create mode 100644 test/schemas/include1_0.xml create mode 100644 test/schemas/include1_0.xsd create mode 100644 test/schemas/include2_0.inc create mode 100644 test/schemas/include2_0.xml create mode 100644 test/schemas/include2_0.xsd create mode 100644 test/schemas/include3_0.inc create mode 100644 test/schemas/include3_0.xml create mode 100644 test/schemas/include3_0.xsd create mode 100644 test/schemas/item_0.xml create mode 100644 test/schemas/item_0.xsd create mode 100644 test/schemas/item_1.xsd create mode 100644 test/schemas/length1_0.xml create mode 100644 test/schemas/length1_0.xsd create mode 100644 test/schemas/length2_0.xml create mode 100644 test/schemas/length2_0.xsd create mode 100644 test/schemas/length3_0.xml create mode 100644 test/schemas/length3_0.xsd create mode 100644 test/schemas/list0_0.xml create mode 100644 test/schemas/list0_0.xsd create mode 100644 test/schemas/list0_1.xml create mode 100644 test/schemas/list0_1.xsd create mode 100644 test/schemas/list0_2.xml create mode 100644 test/schemas/mixed0_0.xml create mode 100644 test/schemas/mixed0_0.xsd create mode 100644 test/schemas/mixed1_0.xml create mode 100644 test/schemas/mixed1_0.xsd create mode 100644 test/schemas/ns0_0.xml create mode 100644 test/schemas/ns0_0.xsd create mode 100644 test/schemas/ns0_1.xml create mode 100644 test/schemas/ns0_1.xsd create mode 100644 test/schemas/ns0_2.xml create mode 100644 test/schemas/ns0_3.xml create mode 100644 test/schemas/ns0_4.xml create mode 100644 test/schemas/ns1_0.xml create mode 100644 test/schemas/ns1_0.xsd create mode 100644 test/schemas/ns2_0.xml create mode 100644 test/schemas/ns2_0.xsd create mode 100644 test/schemas/nvdcve_0.xml create mode 100644 test/schemas/nvdcve_0.xsd create mode 100644 test/schemas/po0_0.xml create mode 100644 test/schemas/po0_0.xsd create mode 100644 test/schemas/po1_0.xml create mode 100644 test/schemas/po1_0.xsd create mode 100644 test/schemas/poschargrp0_0.xml create mode 100644 test/schemas/poschargrp0_0.xsd create mode 100644 test/schemas/regexp-char-ref_0.xml create mode 100644 test/schemas/regexp-char-ref_0.xsd create mode 100644 test/schemas/regexp-char-ref_1.xsd create mode 100644 test/schemas/restrict-CT-attr-ref_0.xml create mode 100644 test/schemas/restrict-CT-attr-ref_0.xsd create mode 100644 test/schemas/restriction-attr1_0.xml create mode 100644 test/schemas/restriction-attr1_0.xsd create mode 100644 test/schemas/restriction-enum-1_0.xml create mode 100644 test/schemas/restriction-enum-1_1.xsd create mode 100644 test/schemas/restriction0_0.xml create mode 100644 test/schemas/restriction0_0.xsd create mode 100644 test/schemas/scc-no-xmlns_0.xml create mode 100644 test/schemas/scc-no-xmlns_0.xsd create mode 100644 test/schemas/scc-no-xsi_0.xml create mode 100644 test/schemas/scc-no-xsi_0.xsd create mode 100644 test/schemas/seq-dubl-elem1_0.xml create mode 100644 test/schemas/seq-dubl-elem1_0.xsd create mode 100644 test/schemas/seq0_0.xml create mode 100644 test/schemas/seq0_0.xsd create mode 100644 test/schemas/src-attribute1_0.xml create mode 100644 test/schemas/src-attribute1_0.xsd create mode 100644 test/schemas/src-attribute2_0.xml create mode 100644 test/schemas/src-attribute2_0.xsd create mode 100644 test/schemas/src-attribute3-1_0.xml create mode 100644 test/schemas/src-attribute3-1_0.xsd create mode 100644 test/schemas/src-attribute3-2-form_0.xml create mode 100644 test/schemas/src-attribute3-2-form_0.xsd create mode 100644 test/schemas/src-attribute3-2-st_0.xml create mode 100644 test/schemas/src-attribute3-2-st_0.xsd create mode 100644 test/schemas/src-attribute3-2-type_0.xml create mode 100644 test/schemas/src-attribute3-2-type_0.xsd create mode 100644 test/schemas/src-attribute4_0.xml create mode 100644 test/schemas/src-attribute4_0.xsd create mode 100644 test/schemas/src-element1_0.xml create mode 100644 test/schemas/src-element1_0.xsd create mode 100644 test/schemas/src-element2-1_0.xml create mode 100644 test/schemas/src-element2-1_0.xsd create mode 100644 test/schemas/src-element2-2_0.xml create mode 100644 test/schemas/src-element2-2_0.xsd create mode 100644 test/schemas/src-element3_0.xml create mode 100644 test/schemas/src-element3_0.xsd create mode 100644 test/schemas/subst-group-1_0.xsd create mode 100644 test/schemas/subst-group-1_1.xml create mode 100644 test/schemas/union2_1.xml create mode 100644 test/schemas/union2_1.xsd create mode 100644 test/schemas/union_0_0.xml create mode 100644 test/schemas/union_0_0.xsd create mode 100644 test/schemas/vdv-complexTypes.xsd create mode 100644 test/schemas/vdv-first0_0.xml create mode 100644 test/schemas/vdv-first0_0.xsd create mode 100644 test/schemas/vdv-first1_0.xml create mode 100644 test/schemas/vdv-first1_0.xsd create mode 100644 test/schemas/vdv-first2_0.xml create mode 100644 test/schemas/vdv-first2_0.xsd create mode 100644 test/schemas/vdv-first3_0.xml create mode 100644 test/schemas/vdv-first3_0.xsd create mode 100644 test/schemas/vdv-first4_0.xml create mode 100755 test/schemas/vdv-first4_0.xsd create mode 100644 test/schemas/vdv-first4_1.xml create mode 100644 test/schemas/vdv-first4_2.xml create mode 100644 test/schemas/vdv-first5_0.xml create mode 100644 test/schemas/vdv-first5_0.xsd create mode 100644 test/schemas/vdv-simpleTypes.xsd create mode 100644 test/schemas/xml.xsd create mode 100644 test/schemas/xsd-list-itemType_0.xml create mode 100644 test/schemas/xsd-list-itemType_0.xsd create mode 100644 test/schemas/xsd-simpleType-varieties_0.xml create mode 100644 test/schemas/xsd-simpleType-varieties_0.xsd create mode 100644 test/schematron/zvon1.sct create mode 100644 test/schematron/zvon10.sct create mode 100644 test/schematron/zvon10_0.xml create mode 100644 test/schematron/zvon10_1.xml create mode 100644 test/schematron/zvon11.sct create mode 100644 test/schematron/zvon11_0.xml create mode 100644 test/schematron/zvon11_1.xml create mode 100644 test/schematron/zvon11_2.xml create mode 100644 test/schematron/zvon11_3.xml create mode 100644 test/schematron/zvon12.sct create mode 100644 test/schematron/zvon12_0.xml create mode 100644 test/schematron/zvon12_1.xml create mode 100644 test/schematron/zvon12_2.xml create mode 100644 test/schematron/zvon13.sct create mode 100644 test/schematron/zvon13_0.xml create mode 100644 test/schematron/zvon13_1.xml create mode 100644 test/schematron/zvon13_2.xml create mode 100644 test/schematron/zvon14.sct create mode 100644 test/schematron/zvon14_0.xml create mode 100644 test/schematron/zvon15.sct create mode 100644 test/schematron/zvon15_0.xml create mode 100644 test/schematron/zvon1_0.xml create mode 100644 test/schematron/zvon1_1.xml create mode 100644 test/schematron/zvon2.sct create mode 100644 test/schematron/zvon2_0.xml create mode 100644 test/schematron/zvon2_1.xml create mode 100644 test/schematron/zvon2_2.xml create mode 100644 test/schematron/zvon3.sct create mode 100644 test/schematron/zvon3_0.xml create mode 100644 test/schematron/zvon4.sct create mode 100644 test/schematron/zvon4_0.xml create mode 100644 test/schematron/zvon4_1.xml create mode 100644 test/schematron/zvon5.sct create mode 100644 test/schematron/zvon5_0.xml create mode 100644 test/schematron/zvon5_1.xml create mode 100644 test/schematron/zvon5_2.xml create mode 100644 test/schematron/zvon6.sct create mode 100644 test/schematron/zvon6_0.xml create mode 100644 test/schematron/zvon6_1.xml create mode 100644 test/schematron/zvon6_2.xml create mode 100644 test/schematron/zvon7.sct create mode 100644 test/schematron/zvon7_0.xml create mode 100644 test/schematron/zvon7_1.xml create mode 100644 test/schematron/zvon7_2.xml create mode 100644 test/schematron/zvon7_3.xml create mode 100644 test/schematron/zvon7_4.xml create mode 100644 test/schematron/zvon8.sct create mode 100644 test/schematron/zvon8_0.xml create mode 100644 test/schematron/zvon8_1.xml create mode 100644 test/schematron/zvon8_2.xml create mode 100644 test/schematron/zvon9.sct create mode 100644 test/schematron/zvon9_0.xml create mode 100644 test/schematron/zvon9_1.xml create mode 100644 test/schematron/zvon9_2.xml create mode 100644 test/scripts/base.script create mode 100644 test/scripts/base.xml create mode 100644 test/scripts/base2.script create mode 100644 test/scripts/base2.xml create mode 100644 test/scripts/set1.script create mode 100644 test/scripts/set1.xml create mode 100644 test/scripts/set3.script create mode 100644 test/scripts/set3.xml create mode 100644 test/scripts/set4.script create mode 100644 test/scripts/set4.xml create mode 100644 test/slashdot.rdf create mode 100644 test/slashdot.xml create mode 100644 test/slashdot16.xml create mode 100644 test/svg1 create mode 100644 test/svg2 create mode 100644 test/svg3 create mode 100644 test/threads/a.example.org.xml create mode 100644 test/threads/a/a.dtd create mode 100644 test/threads/abc.dtd create mode 100644 test/threads/abc.xml create mode 100644 test/threads/acb.dtd create mode 100644 test/threads/acb.xml create mode 100644 test/threads/b.example.org.xml create mode 100644 test/threads/b/b.dtd create mode 100644 test/threads/bac.dtd create mode 100644 test/threads/bac.xml create mode 100644 test/threads/bca.dtd create mode 100644 test/threads/bca.xml create mode 100644 test/threads/c.example.org.xml create mode 100644 test/threads/c/c.dtd create mode 100644 test/threads/cab.dtd create mode 100644 test/threads/cab.xml create mode 100644 test/threads/cba.dtd create mode 100644 test/threads/cba.xml create mode 100644 test/threads/complex.xml create mode 100644 test/threads/example.org.xml create mode 100644 test/threads/invalid.xml create mode 100644 test/title.xml create mode 100644 test/tstblanks.xml create mode 100644 test/utf16bebom.xml create mode 100644 test/utf16bom.xml create mode 100644 test/utf16lebom.xml create mode 100644 test/utf8bom.xml create mode 100644 test/valid/127772.xml create mode 100644 test/valid/694228.xml create mode 100644 test/valid/737840.xml create mode 100644 test/valid/REC-xml-19980210.xml create mode 100644 test/valid/UTF16Entity.xml create mode 100644 test/valid/dia.xml create mode 100644 test/valid/dtds/127772.dtd create mode 100644 test/valid/dtds/694228.dtd create mode 100644 test/valid/dtds/737840.ent create mode 100644 test/valid/dtds/NewsMLv1.0.dtd create mode 100644 test/valid/dtds/destfoo.ent create mode 100644 test/valid/dtds/external.ent create mode 100644 test/valid/dtds/external2.ent create mode 100644 test/valid/dtds/nitf-2-5.dtd create mode 100644 test/valid/dtds/notes.dtd create mode 100644 test/valid/dtds/objednavka.dtd create mode 100755 test/valid/dtds/spec.dtd create mode 100644 test/valid/dtds/utf16b.ent create mode 100644 test/valid/dtds/utf16l.ent create mode 100644 test/valid/dtds/xhtml-lat1.ent create mode 100644 test/valid/dtds/xhtml-special.ent create mode 100644 test/valid/dtds/xhtml-symbol.ent create mode 100644 test/valid/dtds/xhtml.cat create mode 100644 test/valid/dtds/xhtml1-frameset.dtd create mode 100644 test/valid/dtds/xhtml1-strict.dtd create mode 100644 test/valid/dtds/xhtml1-transitional.dtd create mode 100644 test/valid/dtds/xhtml1.dcl create mode 100644 test/valid/dtds/xmlspec.dtd create mode 100644 test/valid/id1.xml create mode 100644 test/valid/id2.xml create mode 100644 test/valid/id3.xml create mode 100644 test/valid/index.xml create mode 100644 test/valid/mixed_ns.xml create mode 100644 test/valid/notes.xml create mode 100644 test/valid/ns.xml create mode 100644 test/valid/ns2.xml create mode 100644 test/valid/objednavka.xml create mode 100644 test/valid/rss.xml create mode 100644 test/valid/t10.xml create mode 100644 test/valid/t11.xml create mode 100644 test/valid/t4.dtd create mode 100644 test/valid/t4.xml create mode 100644 test/valid/t4a.dtd create mode 100644 test/valid/t4a.xml create mode 100644 test/valid/t6.dtd create mode 100644 test/valid/t6.xml create mode 100644 test/valid/t8.xml create mode 100644 test/valid/t8a.xml create mode 100644 test/valid/t9.xml create mode 100644 test/valid/t9a.xml create mode 100644 test/valid/xhtml1.xhtml create mode 100644 test/valid/xlink.xml create mode 100644 test/wap.xml create mode 100644 test/warning/ent8 create mode 100644 test/warning/ent9 create mode 100644 test/winblanks.xml create mode 100644 test/wml.xml create mode 100644 test/xhtml1 create mode 100644 test/xhtmlcomp create mode 100644 test/xml1 create mode 100644 test/xml2 create mode 100644 test/xmlid/id_err1.xml create mode 100644 test/xmlid/id_err2.xml create mode 100644 test/xmlid/id_tst1.xml create mode 100644 test/xmlid/id_tst2.xml create mode 100644 test/xmlid/id_tst3.xml create mode 100644 test/xmlid/id_tst4.xml create mode 100644 test/xsdtest/xsdtest.xml create mode 100644 test/xsdtest/xsdtest.xsl create mode 100644 test/xsdtest/xsdtestsuite.xml create mode 100644 testAutomata.c create mode 100644 testC14N.c create mode 100644 testHTML.c create mode 100644 testModule.c create mode 100644 testOOM.c create mode 100644 testOOMlib.c create mode 100644 testOOMlib.h create mode 100644 testReader.c create mode 100644 testRegexp.c create mode 100644 testRelax.c create mode 100644 testSAX.c create mode 100644 testSchemas.c create mode 100644 testThreads.c create mode 100644 testThreadsWin32.c create mode 100644 testURI.c create mode 100644 testXPath.c create mode 100644 testapi.c create mode 100644 testchar.c create mode 100644 testdict.c create mode 100644 testdso.c create mode 100644 testlimits.c create mode 100644 testrecurse.c create mode 100644 threads.c create mode 100644 timsort.h create mode 100644 tree.c create mode 100644 trio.c create mode 100644 trio.h create mode 100644 triodef.h create mode 100644 trionan.c create mode 100644 trionan.h create mode 100644 triop.h create mode 100644 triostr.c create mode 100644 triostr.h create mode 100644 uri.c create mode 100644 valid.c create mode 100755 vms/build_libxml.com create mode 100755 vms/config.vms create mode 100644 vms/diffs.vms create mode 100644 vms/readme.vms create mode 100644 win32/Makefile.bcb create mode 100644 win32/Makefile.mingw create mode 100644 win32/Makefile.msvc create mode 100644 win32/Readme.txt create mode 100644 win32/VC10/README.vc10 create mode 100644 win32/VC10/RuleSet1.ruleset create mode 100644 win32/VC10/config.h create mode 100644 win32/VC10/libxml2-focus.vcxproj create mode 100644 win32/VC10/libxml2.sln create mode 100644 win32/VC10/libxml2.vcxproj create mode 100644 win32/VC10/libxml2.vcxproj.filters create mode 100644 win32/VC10/runsuite.vcxproj create mode 100644 win32/VC10/runsuite.vcxproj.filters create mode 100644 win32/configure.js create mode 100644 win32/defgen.xsl create mode 100644 win32/libxml2.def.src create mode 100644 win32/wince/libxml2.vcb create mode 100644 win32/wince/libxml2.vcl create mode 100644 win32/wince/libxml2.vco create mode 100644 win32/wince/libxml2.vcp create mode 100644 win32/wince/libxml2.vcw create mode 100644 win32/wince/wincecompat.c create mode 100644 win32/wince/wincecompat.h create mode 100644 xinclude.c create mode 100644 xlink.c create mode 100644 xml2-config.1 create mode 100644 xml2-config.in create mode 100644 xml2Conf.sh.in create mode 100644 xmlIO.c create mode 100644 xmlcatalog.c create mode 100644 xmllint.c create mode 100644 xmlmemory.c create mode 100644 xmlmodule.c create mode 100644 xmlreader.c create mode 100644 xmlregexp.c create mode 100644 xmlsave.c create mode 100644 xmlschemas.c create mode 100644 xmlschemastypes.c create mode 100644 xmlstring.c create mode 100644 xmlunicode.c create mode 100644 xmlwriter.c create mode 100644 xpath.c create mode 100644 xpointer.c create mode 100644 xstc/Makefile.am create mode 100755 xstc/fixup-tests.py create mode 100755 xstc/xstc-to-python.xsl create mode 100755 xstc/xstc.py create mode 100644 xzlib.c create mode 100644 xzlib.h diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..995094d --- /dev/null +++ b/.gitignore @@ -0,0 +1,121 @@ +*.o +*.lo +*.log +*.pyc +*.patch +.deps +.libs +.memdump +COPYING +CVE-* +INSTALL +Makefile +Makefile.in +aclocal.m4 +autom4te.cache +bissect* +config.guess +config.h +config.h.in +config.h.in~ +config.log +config.status +config.sub +configure +depcomp +doc/Makefile +doc/Makefile.in +doc/devhelp/Makefile +doc/devhelp/Makefile.in +doc/examples/.deps +doc/examples/Makefile +doc/examples/Makefile.in +doc/examples/io1 +doc/examples/io2 +doc/examples/parse1 +doc/examples/parse2 +doc/examples/parse3 +doc/examples/parse4 +doc/examples/reader1 +doc/examples/reader2 +doc/examples/reader3 +doc/examples/reader4 +doc/examples/testWriter +doc/examples/tree1 +doc/examples/tree2 +doc/examples/xpath1 +doc/examples/xpath2 +example/.deps +example/Makefile +example/Makefile.in +example/gjobread +include/Makefile +include/Makefile.in +include/libxml/Makefile +include/libxml/Makefile.in +include/libxml/xmlversion.h +install-sh +libtool +libxml-2.0-uninstalled.pc +libxml-2.0.pc +libxml2.la +libxml2.spec +list +ltmain.sh +log +missing +missing.lst +m4 +python/.deps +python/.libs +python/Makefile +python/Makefile.in +python/gen_prog +python/libxml2-export.c +python/libxml2-py.c +python/libxml2-py.h +python/libxml2.py +python/libxml2class.py +python/libxml2class.txt +python/libxml2mod.la +python/tests/Makefile +python/tests/Makefile.in +python/tests/tmp.xml +runsuite +runtest +runxmlconf +runxmlconf.log +stamp-h1 +tags +test.out +testAutomata +testC14N +testHTML +testModule +testReader +testRegexp +testRelax +testSAX +testSchemas +testThreads +testURI +testXPath +testapi +testapi.c.new +testchar +testdict +testdso.la +testlimits +testrecurse +tmp +tst.c +tst +xml2-config +xml2Conf.sh +xmlcatalog +xmlconf +xmllint +xstc/Makefile +xstc/Makefile.in +xstc/Tests +xstc/xsts-*.tar.gz diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000..cf2e9a6 --- /dev/null +++ b/AUTHORS @@ -0,0 +1,5 @@ +Daniel Veillard +Bjorn Reese +William Brack +Igor Zlatkovic for the Windows port +Aleksey Sanin diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 0000000..ef6cb8e --- /dev/null +++ b/ChangeLog @@ -0,0 +1,19678 @@ +Fri Jul 10 16:11:34 CEST 2009 Daniel Veillard + + * parser.c: fix a regression in entity parsing when using the reader + introduced because we were not reusing _private on entities parsing + context + +Thu Jul 9 10:21:00 CEST 2009 Daniel Veillard + + Aleksey Sanin support for c14n 1.1 + * c14n.c include/libxml/c14n.h: adds support for C14N 1.1, + new flags at the API level + * runtest.c Makefile.am testC14N.c xmllint.c: add support in CLI + tools and test binaries + * result/c14n/1-1-without-comments/* test/c14n/1-1-without-comments/*: + add a new batch of tests + +Thu Jul 9 08:52:35 CEST 2009 Daniel Veillard + + * config.h.in: update of libtool seems to have modified it + * python/libxml2class.txt: python update modified the order + of classes apparently + +Thu Jul 9 08:43:06 CEST 2009 Daniel Veillard + + * tree.c: avoid calling xmlAddID with NULL values + * parser.c: add a few xmlInitParser in some entry points + +Fri Jun 19 19:51:08 CEST 2009 Rob Richards + + * parser.c: use options from current parser context when creating + a parser context within xmlParseCtxtExternalEntity + * xmlwriter.c: fix error message when unable to create output file + +Thu Jun 4 11:17:23 CEST 2009 Daniel Veillard + + * c14n.c debugXML.c doc/examples/io2.c parser.c schematron.c + valid.c xmlschemas.c xmlwriter.c xpath.c: use %s to printf string + patch by Christian Persch, fixes #581612 + +Thu Jun 4 11:06:07 CEST 2009 Daniel Veillard + + * parser.c threads.c: change the threading initialization sequence + as suggested by Igor Novoseltsev to avoid crash if xmlInitParser() + is called from a thread which is not the main one, should fix + #584605 + +Fri May 15 17:54:48 CEST 2009 Daniel Veillard + + * HTMLparser.c: make sure we keep line numbers fixes #580705 + based Aaron Patterson patch + +Tue May 12 09:13:58 CEST 2009 Daniel Veillard + + * HTMLparser.c: a broken HTML table attributes initialization, + fixes #581803, by Roland Steiner + +Tue May 12 08:54:20 CEST 2009 Daniel Veillard + + * libxml2.doap: adding RDF dope file. + +Tue May 12 08:42:52 CEST 2009 Daniel Veillard + + * configure.in: adapt the extra version detection code to git + +Wed Apr 29 16:09:38 CEST 2009 Rob Richards + + * parser.c: do not set error code in xmlNsWarn + +Wed Apr 15 11:18:24 CEST 2009 Daniel Veillard + + * include/libxml/parser.h include/libxml/xmlwriter.h + include/libxml/relaxng.h include/libxml/xmlversion.h.in + include/libxml/xmlwin32version.h.in include/libxml/valid.h + include/libxml/xmlschemas.h include/libxml/xmlerror.h: change + ATTRIBUTE_PRINTF into LIBXML_ATTR_FORMAT to avoid macro name + collisions with other packages and headers as reported by + Belgabor and Mike Hommey + +Thu Apr 2 13:57:15 CEST 2009 Daniel Veillard + + * error.c: fix structured error handling problems #564217 + +Thu Mar 26 19:08:08 CET 2009 Rob Richards + + * parser.c: use options from current parser context when creating + an entity parser context + +Wed Mar 25 11:40:34 CET 2009 Daniel Veillard + + * doc/*: updated SVN URL for GNOME as pointed by Vincent Lefevre + and regenerated docs + +Wed Mar 25 11:21:26 CET 2009 Daniel Veillard + + * parser.c: hide the nbParse* variables used for debugging + as pointed by Mike Hommey + +Wed Mar 25 10:50:05 CET 2009 Daniel Veillard + + * include/wsockcompat.h win32/Makefile.bcb xpath.c: fixes for + Borland/CodeGear/Embarcadero compilers by Eric Zurcher + +Wed Mar 25 10:43:07 CET 2009 Daniel Veillard + + * xpath.c: xmlXPathRegisterNs should not allow enpty prefixes + +Mon Mar 23 20:27:15 CET 2009 Daniel Veillard + + * tree.c: add a missing check in xmlAddSibling, patch by Kris Breuker + * xmlIO.c: avoid xmlAllocOutputBuffer using XML_BUFFER_EXACT which + leads to performances problems especially on Windows. + +Tue Mar 3 14:30.28 HKT 2009 William Brack + + * trio.h: changed include of config.h to be surrounded by + quotation marks #570806 + +Sat Feb 21 10:20:34 CET 2009 Daniel Veillard + + * threads.c parser.c: more warnings about xmlCleanupThreads and + xmlCleanupParser to avoid troubles like #571409 + +Fri Feb 20 09:40:04 CET 2009 Daniel Veillard + + * xmlwriter.c: cleanups and error reports when xmlTextWriterVSprintf + fails, by Jinmei Tatuya + +Fri Feb 20 09:18:56 CET 2009 Daniel Veillard + + * xmlwriter.c: remove a couple of leaks on errors reported by + Jinmei Tatuya + +Sun Jan 18 22:37:59 CET 2009 Daniel Veillard + + * configure.in doc/xml.html doc/*: preparing 0.7.3 release + * include/libxml/parserInternals.h SAX2.c: fix a typo in a name + +Sun Jan 18 21:48:28 CET 2009 Daniel Veillard + + * include/libxml/parser.h include/libxml/xmlwriter.h + include/libxml/relaxng.h include/libxml/xmlversion.h.in + include/libxml/xmlwin32version.h.in include/libxml/valid.h + include/libxml/xmlschemas.h include/libxml/xmlerror.h: + port patch from Marcus Meissner to add gcc checking for + printf like functions parameters, should fix #65068 + * doc/apibuild.py doc/*: modified the script accordingly + and regenerated + * xpath.c xmlmemory.c threads.c: fix a few warnings + +Sun Jan 18 20:40:42 CET 2009 Daniel Veillard + + * include/libxml/xmlwin32version.h.in: windows header should + get the same define + +Sun Jan 18 18:22:33 CET 2009 Daniel Veillard + + * include/libxml/xmlversion.h.in include/libxml/xmlmemory.h: + apply patch from Marcus Meissner to add gcc attribute alloc_size + should fix #552505 + * doc/apibuild.py doc/* testapi.c: regenerate the API + * include/libxml/parserInternals.h: fix a comment problem raised + by apibuild.py + +Sun Jan 18 16:39:01 CET 2009 Daniel Veillard + + * threads.c: also remove pthread key when stopping thread + support, patch based on Alex Ott one should fix #564723 + +Sun Jan 18 15:55:18 CET 2009 Daniel Veillard + + * threads.c: patch from Daniel Zimmermann fixing a memory leak + in an edge case, solves #562230 + +Sun Jan 18 15:06:05 CET 2009 Daniel Veillard + + * include/libxml/parserInternals.h SAX2.c: add a new define + XML_MAX_TEXT_LENGTH limiting the maximum size of a single text + node, the defaultis 10MB and can be removed with the HUGE + parsing option + +Mon Jan 05 18:28:41 CET 2009 Rob Richards + + * include/libxml/parser.h parser.c: add XML_PARSE_OLDSAX parser + option to enable pre 2.7 SAX behavior. + +Wed Dec 31 23:11:37 CET 2008 Rob Richards + + * tree.c: set doc on last child tree in xmlAddChildList for + bug #546772. Fix problem adding an attribute via with xmlAddChild + reported by Kris Breuker. + +Sun Dec 27 14:16:13 CET 2008 Rob Richards + + * xmlwriter.c: fix indenting in xmlTextWriterFullEndElement for + bug# 554353. + +Thu Nov 27 16:24:52 CET 2008 Daniel Veillard + + * include/libxml/tree.h tree.c python/generator.py: adds + element traversal support + * valid.c: avoid a warning + * doc/*: regenerated + +Mon Nov 17 16:56:18 CET 2008 Daniel Veillard + + * SAX2.c parser.c: fix for CVE-2008-4226, a memory overflow + when building gigantic text nodes, and a bit of cleanup + to better handled out of memory problem in that code. + * tree.c: fix for CVE-2008-4225, lack of testing leads to + a busy loop test assuming one have enough core memory. + +Thu Nov 6 14:34:35 CET 2008 Daniel Veillard + + * xmllint.c: Matthias Kaehlcke reported a build problem when + not compiling HTML support in. + +Fri Oct 17 15:24:08 CEST 2008 Daniel Veillard + + * configure.in doc/Makefile.am: patch from Adrian Bunk which + adds --disable-rebuild-docs to avoid rebuilding them + +Fri Oct 3 09:43:45 CEST 2008 Daniel Veillard + + * configure.in doc/* NEWS: preparing the release of 2.7.2 + * dict.c: fix the Solaris portability issue + * parser.c: additional cleanup on #554660 fix + * test/ent13 result/ent13* result/noent/ent13*: added the + example in the regression test suite. + * HTMLparser.c: handle leading BOM in htmlParseElement() + +Thu Oct 2 22:53:39 CEST 2008 Daniel Veillard + + * parser.c: fix a nasty bug introduced when cleaning up + entities processing in 2.7.x , fixes #554660 + +Thu Sep 25 18:04:20 CEST 2008 Daniel Veillard + + * HTMLparser.c: fix an HTML parsing error on large data sections + reported by Mike Day + * test/HTML/utf8bug.html result/HTML/utf8bug.html.err + result/HTML/utf8bug.html.sax result/HTML/utf8bug.html: add the + reproducer to the test suite + +Thu Sep 25 17:35:57 CEST 2008 Daniel Veillard + + * runxmlconf.c: fix compilation if XPath is not included + +Thu Sep 25 16:54:04 CEST 2008 Daniel Veillard + + * xmlreader.c: patch from Riccardo Scussat fixing custom error + handlers problems. + +Thu Sep 25 16:30:11 CEST 2008 Daniel Veillard + + * include/libxml/xmlsave.h xmlsave.c: new options to serialize + as XML/HTML/XHTML and restore old entry point behaviours + +Mon Sep 1 16:49:05 CEST 2008 Daniel Veillard + + * doc/xml.html doc/news.html configure.in python/setup.py NEWS: + prepare release of 2.7.1 + +Mon Sep 1 15:35:13 CEST 2008 Daniel Veillard + + * schematron.c xpath.c: applied a couple of patches from Martin + avoiding some leaks, fixinq QName checks in XPath, XPath debugging + and schematron code cleanups. + * python/tests/Makefile.am python/tests/xpathleak.py: add the + specific regression tests, just tweak it to avoid output by default + +Mon Sep 1 15:02:05 CEST 2008 Daniel Veillard + + * trionan.c: Borland C fix from Moritz Both + * testapi.c: regenerate, workaround a problem for buffer testing + * xmlIO.c HTMLtree.c: new internal entry point to hide even better + xmlAllocOutputBufferInternal + * tree.c: harden the code around buffer allocation schemes + * parser.c: restore the warning when namespace names are not absolute + URIs + * runxmlconf.c: continue regression tests if we get the expected + number of errors + * Makefile.am: run the python tests on make check + * xmlsave.c: handle the HTML documents and trees + * python/libxml.c: convert python serialization to the xmlSave APIs + and avoid some horrible hacks + +Sat Aug 30 16:58:40 CEST 2008 Daniel Veillard + + * configure.in, doc/*: preparing 2.7.0 release + * tree.c: remove some testing traces + * parser.c xmlIO.c xmlschemas.c: remove some warnings + +Sat Aug 30 14:50:16 CEST 2008 Daniel Veillard + + * include/libxml/tree.h tree.c: make a new kind of buffer where + shrinking and adding in head can avoid reallocation or full + buffer memmoves + * encoding.c xmlIO.c: use the new kind of buffers for output + buffers + +Sat Aug 30 10:18:13 CEST 2008 Daniel Veillard + + * doc/* testapi.c: regenerated + +Fri Aug 29 21:53:12 CEST 2008 Daniel Veillard + + * doc/examples/reader3.c: patch from Robert Schwebel , allows to + compile the example if configured without output support fixes + #545582 + * Makefile.am: add testrecurse to the make check tests + * HTMLparser.c: if the parser got a encoding argument it should be + used over what the meta specifies, patch fixing #536346 + +Fri Aug 29 14:41:38 CEST 2008 Daniel Veillard + + * parser.c: a couple more fixes + * nanohttp.c nanoftp.c: patch from Andreas Färber to compile on Haiku + fixes #527880 + * doc/examples/*: regenerated + +Thu Aug 28 17:31:46 CEST 2008 Daniel Veillard + + * parser.c include/libxml/parser.h: completely different fix for + the recursion detection based on entity density, big cleanups + in the entity parsing code too + * result/*.sax*: the parser should not ask for used defined versions + of the predefined entities + * testrecurse.c: automatic test for entity recursion checks + * Makefile.am: added testrecurse + * test/recurse/lol* test/recurse/good*: a first set of tests for + the recursion + +Wed Aug 27 21:55:34 CEST 2008 Daniel Veillard + + * include/libxml/xmlerror.h parser.c: a bit of cleanup and + added checks based on the regression tests of the xmlconf suite + +Wed Aug 27 19:22:35 CEST 2008 Daniel Veillard + + * uri.c: bug in parsing RFC 3986 uris with port numbers + +Wed Aug 27 17:30:48 CEST 2008 Daniel Veillard + + * configure.in Makefile.am: add an --with-coverage configure option + and a 'make cov' target based on gcc profiling and the lcov + tool. Currently at 68.9% coverage out of 'make check' and + runsuite executions. + * xmlreader.c: remove warnings due to C++ comments + +Wed Aug 27 15:00:54 CEST 2008 Daniel Veillard + + * include/libxml/parserInternals.h parser.c: cleanup entity + pushing error handling based on a patch from Ashwin + +Wed Aug 27 13:41:26 CEST 2008 Daniel Veillard + + * threads.c: fix a small initialization problem raised by Ashwin + * testapi.c gentest.py: increase testing especially for document + with an internal subset, and entities + * tree.c: fix a deallocation issue when unlinking entities from + a document. + * valid.c: fix a missing entry point test not found previously. + * doc/*: regenerated the APIs, docs etc. + +Tue Aug 26 15:02:58 CEST 2008 Daniel Veillard + + * include/libxml/parser.h parser.c xmllint.c: strengthen some + of the internal parser limits, add an XML_PARSE_HUGE option + to bypass them all. More internal parser limits will still need + to be added. + +Tue Aug 26 09:42:08 CEST 2008 Daniel Veillard + + * Makefile.am: add the testchar to 'make check' + * xmlschemas.c: Volker Grabsch pointed out a typo + * xmlregexp.c: production [19] from XML Schemas regexps were a + mistake removed in version REC-xmlschema-2-20041028, Volker Grabsch + provided a patch to remove it + * test/schemas/regexp-char-ref_0.xml test/schemas/regexp-char-ref_0.xsd + test/schemas/regexp-char-ref_1.xsd result/schemas/regexp-char-ref_0_0 + result/schemas/regexp-char-ref_1_0: Volker Grabsch also provided + regession tests for this + +Tue Aug 26 09:25:39 CEST 2008 Daniel Veillard + + * include/libxml/parser.h xinclude.c xmllint.c: patch based on + Wieant Nielander contribution to add the option of not doing + URI base fixup in XInclude + +Mon Aug 25 16:52:53 CEST 2008 Daniel Veillard + + * xmlreader.c: applied patch from Aswin to fix tree skipping + * include/libxml/entities.h entities.c: fixed a comment and + added a new xmlNewEntity() entry point + * runtest.c: be less verbose + * tree.c: space and tabs cleanups + +Mon Aug 25 10:56:30 CEST 2008 Daniel Veillard + + * include/libxml/entities.h entities.c SAX2.c parser.c: rework + the patch to avoid some ABI issue with people allocating + entities structure directly + +Wed Aug 20 19:02:01 CEST 2008 Daniel Veillard + + * include/libxml/parser.h include/libxml/entities.h entities.c + parserInternals.c parser.c: fix for CVE-2008-3281 + +Sun Aug 10 17:06:13 CEST 2008 Rob Richards + + * dict.c: fix non GNUC builds. + +Fri Aug 8 14:13:06 CEST 2008 Daniel Veillard + + * makefile.am: adding a check-valgrind target + +Fri Aug 8 14:01:59 CEST 2008 Daniel Veillard + + * Makefile.am testdict.c: add the new test in 'make check' and + update it to check subdictionaries processing. + +Fri Aug 8 12:07:20 CEST 2008 Daniel Veillard + + * testdict.c: added a program to regression test the dictionary code + * dict.c: improve the lookup efficiency by caching the key. + +Thu Aug 7 18:30:55 CEST 2008 Daniel Veillard + + * dict.c: chased and found a couple of nasty issues + +Thu Aug 7 15:51:31 CEST 2008 Sven Herzberg + + Bug 546629 – runtests doesn't pass on my mac + Reviewed by William M. Brack. + + * runtest.c: use libpthread on Mac OS X as well + +Wed Aug 6 12:24:33 CEST 2008 Daniel Veillard + + * uri.c: allow [ and ] in fragment identifiers, 3986 disallow them + but it's widely used for XPointer, and would break DocBook + processing among others + +Wed Aug 6 11:32:21 CEST 2008 Daniel Veillard + + * dict.c: change the big key algorithm to work properly with QName + too, fix a bug with dict size and sub dictionaries + +Mon Aug 4 17:27:27 CEST 2008 Daniel Veillard + + * uri.c include/libxml/uri.h: rewrite the URI parser to update to + rfc3986 (from 2396) + * test/errors/webdav.xml result/errors/webdav.xml*: removed the + error test, 'DAV:' is a correct URI under 3986 + * Makefile.am: small cleanup in make check + +Thu Jul 31 21:49:45 CEST 2008 Daniel Veillard + + * runxmlconf.c: more progresses against the official regression tests + * runsuite.c: small cleanup for non-leak reports + * include/libxml/tree.h: parsing flags and other properties are + now added to the document node, this is generally useful and + allow to make Name and NmToken validations based on the parser + flags, more specifically the 5th edition of XML or not + * HTMLparser.c tree.c: small side effects for the previous changes + * parser.c SAX2.c valid.c: the bulk of teh changes are here, + the parser and validation behaviour can be affected, parsing + flags need to be copied, lot of changes. Also fixing various + validation problems in the regression tests. + +Thu Jul 31 10:15:53 CEST 2008 Daniel Veillard + + * runxmlconf.c: added a skipped list, insert rmt-ns10-035 + * Makefile.am: improve 'make check' + * include/libxml/xmlerror.h parser.c: clean up namespace errors + checking and reporting, errors when a document is labelled + as UTF-16 while it is parsed as UTF-8 and no encoding was given + explicitely. + * result/errors/webdav.xml.*: some warnings are no recategorized + as Namespace errors + +Wed Jul 30 14:55:54 CEST 2008 Daniel Veillard + + * include/libxml/xmlmemory.h xmlmemory.c: add xmlMemDisplayLast to + help debug incremental memory leaks, and some cleanups + * runxmlconf.c: use that new call and avoid ever touching the + system catalog in the regression tests + +Wed Jul 30 14:33:33 CEST 2008 Daniel Veillard + + * parser.c include/libxml/xmlerror.h: an XML-1.0 document can't load + an 1.1 entity + * runxmlconf.c: when using entities make sure we load them + +Tue Jul 29 18:43:07 CEST 2008 Daniel Veillard + + * parser.c: fix a bug not detecting cross entity comments probably + when comment parsing got optimized. + * Makefile.am: add make check + * runxmlconf.c: fix the log file name + +Tue Jul 29 18:09:26 CEST 2008 Daniel Veillard + + * runxmlconf.c Makefile.am: add a C program to run the W3C test + suite, work in progress + * xmllint.c: add a new option --oldxml10 to use the old parser + * parser.c: fix the XML_PARSE_OLD10 processing of the new option + and a bug in version parsing + +Tue Jul 29 11:12:40 CEST 2008 Daniel Veillard + + * xpath.c: space and tabs cleanup + +Tue Jul 29 10:59:36 CEST 2008 Daniel Veillard + + * include/libxml/parser.h include/libxml/xmlerror.h parser.c: + implement XML-1.0 5th edition, add parser option XML_PARSE_OLD10 + to stick to old behaviour + * testapi.c gentest.py: modified slightly and regenerated + * Makefile.am: add testchar + +Thu Jul 24 16:57:20 CEST 2008 Daniel Veillard + + * Makefile.am testchar.c Makefile.tests README.tests: add a + new regression test program for testing character ranges and + UTF8 encoding/decoding + +Wed Jul 23 15:32:39 CEST 2008 Daniel Veillard + + * libxml.spec.in: fix the build root + +Wed Jul 16 22:28:48 PDT 2008 William Brack + + * pattern.c: fix problem with xmlStreamPop when pattern includes + a "." element (see discussion on libxslt list) + +Mon Jul 7 15:49:59 CEST 2008 Daniel Veillard + + * SAX2.c: fix line number on text nodes, problem raised by Ralf Junker + +Sun Jun 29 17:04:28 CEST 2008 Rob Richards + * xmlschemas.c: fix crash with invalid whitespace facet + +Wed Jun 11 10:13:02 CEST 2008 Daniel Veillard + + * doc/xml.html doc/FAQ.html: add a section in the FAQ about + multithread and xmlCleanupParser + +Tue Jun 10 16:52:17 CEST 2008 Daniel Veillard + + * catalog.c: apply a couple of fixes based on a Coverity report + forwarded by Derrick Price. + * VxWorks/README VxWorks/Makefile VxWorks/build.sh: instructions + Makefile, and shell script to build on VxWorks 6.4+ provided by + Jim Wert. + +Tue Jun 3 18:07:13 CEST 2008 Daniel Veillard + + * python/generator.py python/setup.py: apply patch from Martin fixing + python whitespaces + * NEWS: following previous commit rebuilt now in UTF-8 + +Mon Jun 2 17:39:42 CEST 2008 Daniel Veillard + + * ChangeLog: patch from Hans de Goede to switch the file to UTF-8 + * doc/news.xsl: switch to generate the NEWS file in UTF-8 instead of + ISO-8859-1 + +Mon May 12 15:12:44 CEST 2008 Daniel Veillard + + * xmlregexp.c: avoid a regexp crash, should fix #523738 + +Mon May 12 14:56:06 CEST 2008 Daniel Veillard + + * xmlschemas.c runtest.c testapi.c include/libxml/xmlreader.h + python/types.c python/libxml_wrap.h python/libxml.c: fx compilation + when configured without the reader should fix #513110 + * doc/*: regenerated + +Sat May 3 14:33:29 CEST 2008 Rob Richards + + * dict.c: check for stdint.h and define types when using MSVC + +Mon Apr 28 20:06:12 CEST 2008 Daniel Veillard + + * parserInternals.c: applied patch from Ashwin to avoid a potential + double-free + +Thu Apr 24 13:56:53 CEST 2008 Daniel Veillard + + * uri.c: applied patch from Ashwin fixing a number of realloc problems + * HTMLparser.c: improve handling for misplaced html/head/body + +Tue Apr 22 10:27:17 CEST 2008 Daniel Veillard + + * dict.c: improvement on the hashing of the dictionary, with visible + speed up as the number of strings in the hash increases, work from + Stefan Behnel + +Fri Apr 11 14:44:00 CEST 2008 Daniel Veillard + + * include/libxml/xmlschemas.h xmlschemas.c: added new function + xmlSchemaValidCtxtGetParserCtxt based on Holger Kaelberer patch + * doc/apibuild.py doc/*: regenerated the doc, chased why the new + function didn't got any documentation, added more checking in the + generator + * include/libxml/relaxng.h include/libxml/schematron.h + include/libxml/xmlschemas.h include/libxml/c14n.h + include/libxml/xmlregexp.h include/libxml/globals.h + include/libxml/xmlreader.h threads.c xmlschemas.c: various changes + and cleanups following the new reports + + +Thu Apr 10 10:07:00 CEST 2008 Daniel Veillard + + * Makefile.am: extend the cleanup rule + * xmlschemas.c: space cleanup + +Wed Apr 9 19:43:25 CEST 2008 Rob Richards + + * include/wsockcompat.h: support older win32 platforms when building + with newer versions of VS + +Tue Apr 8 16:56:07 CEST 2008 Daniel Veillard + + * configure.in NEWS doc/*: preparing release of 2.6.32 + +Tue Apr 8 10:19:01 CEST 2008 Daniel Veillard + + * tree.c: fix a bug introduced when fixing #438208 and reported by + Ashwin + * python/generator.py: fix an infinite loop bug + +Mon Apr 7 14:44:51 CEST 2008 Daniel Veillard + + * xmlreader.c: fix a link to XmlNodeType doc reported by Martijn Arts + * docs/*: rebuilt + +Fri Apr 4 18:09:50 CEST 2008 Daniel Veillard + + * parser.c: improve the *Recover* functions documentation + +Thu Apr 3 14:57:15 CEST 2008 Daniel Veillard + + * parser.c: patch from Mark Rowe fixing BOM or encoding detection + in external parsed entities, should fix #440415 + +Thu Apr 3 13:16:01 CEST 2008 Daniel Veillard + + * tree.c: fix some problems with the *EatName functions when + running out of memory raised by Eric Schrock , should fix #438208 + +Thu Apr 3 12:41:29 CEST 2008 Daniel Veillard + + * xmlschemastypes.c: horror around the definition of the lexical + values for decimal and derived types, fixing to reject empty + values, should fix #503268 + +Thu Apr 3 11:44:57 CEST 2008 Daniel Veillard + + * encoding.c: buffer may not be large enough to convert to + UCS4, patch from Christian Fruth , fixes #504015 + +Thu Apr 3 11:02:02 CEST 2008 Daniel Veillard + + * HTMLparser.c: apparently it's okay to forget the semicolumn after + entity refs in HTML, fixing char refs parsing accordingly based on + T. Manske patch, this should fix #517653 + +Thu Apr 3 09:30:29 CEST 2008 Daniel Veillard + + * error.c: avoid a scary realloc() loop should fix #520383 + +Thu Apr 3 08:22:52 CEST 2008 Daniel Veillard + + * parser.c: more realloc problems pointed out by Ashwin + +Thu Apr 3 07:40:13 CEST 2008 Daniel Veillard + + * xstc/Makefile.am: applied patch from Mike Hommey fixing distclean, + fixes #520387 + +Thu Apr 3 06:52:32 CEST 2008 Daniel Veillard + + * include/libxml/xpath.h: small doc improvement for xmlXPathContext + from Jack Jansen, fixes #524759 + * doc/newapi.xsl doc/*: fixed a problem and regenerated the docs + +Tue Apr 1 09:59:22 CEST 2008 Daniel Veillard + + * xpath.c: two patches from Alvaro Herrera to avoid problem when + running out of memory in XPath evaluations. + +Mon Mar 31 11:23:19 CEST 2008 Daniel Veillard + + * parser.c: lot of out of memory handling fixes from Ashwin + * elfgcchack.h doc/elfgcchack.xsl: work around a problem with xmlDllMain + * include/libxml/threads.h: indenting cleanups + +Mon Mar 31 10:25:37 CEST 2008 Daniel Veillard + + * parser.c docs/*: trying to clarify even more the xmlCleanupParser() + use and the memory documentation + +Wed Mar 26 18:39:58 CET 2008 Daniel Veillard + + * parser.c: changes based on Alex Khesin patch where xmlParseCharRef + seems to not be checked correctly, fixes #520198 + +Wed Mar 26 15:03:49 CET 2008 Daniel Veillard + + * parser.c: patch from Ashwin to avoid a problem of attribute + redefinition in the DTD. Remove a warning too. + +Wed Mar 26 14:38:31 CET 2008 Daniel Veillard + + * xmlschemas.c: fix a problem in externalSubsetSplit with a patch + from Ashwin + +Tue Mar 25 17:48:02 CET 2008 Daniel Veillard + + * parser.c: fix various attribute normalisation problems reported + by Ashwin + * result/c14n/without-comments/example-4 + result/c14n/with-comments/example-4: this impacted the result of + two c14n tests :-\ + * test/att9 test/att10 test/att11 result//att9* result//att10* + result//att11*: added 3 specific regression tests coming from the + XML spec revision and from Ashwin + +Tue Mar 25 14:20:49 CET 2008 Daniel Veillard + + * uri.c: fix saving for file:///X:/ URI embedding Windows file paths + should fix #524253 + +Mon Mar 24 21:42:33 CET 2008 Daniel Veillard + + * parser.c: fix a problem reported by Ashwin for system parameter + entities referenced from entities in external subset, add a + specific loading routine. + * test/valid/dtds/external.ent test/valid/dtds/external2.ent + test/valid/t11.xml result/valid/t11.xml*: added the test to + the regression suite + +Mon Mar 24 15:04:54 CET 2008 Daniel Veillard + + * xmlschemas.c: fix an XML Schemas crash raised by Stefan Behnel + when testing with W3C test suite + +Mon Mar 24 12:12:00 CET 2008 Daniel Veillard + + * threads.c: check some allocation with Ashwin patch + +Wed Mar 19 16:41:52 CET 2008 Daniel Veillard + + * vms/build_libxml.com: update from Tycho Hilhorst, should fix #523378 + +Tue Mar 18 09:23:05 CET 2008 Daniel Veillard + + * threads.c: check some malloc returns with Ashwin patch, add + error messages and reindent the module. + +Fri Mar 14 15:28:43 CET 2008 Daniel Veillard + + * xmlreader.c: patch from Ashwin removing duplicate tests + +Fri Mar 14 13:44:29 CET 2008 Daniel Veillard + + * include/libxml/schematron.h include/libxml/xmlerror.h schematron.c: + applied patch from Tobias Minich to allow plugin schematron error + reporting in the normal error system, should fix #513998 + +Fri Mar 14 11:52:09 CET 2008 Daniel Veillard + + * parser.c xinclude.c: patch from Vasily Chekalkin fixes memory + leaks, should fix 512647 + +Thu Mar 13 08:17:58 CET 2008 Daniel Veillard + + * xmlregexp.c: found a nasty bug in regexp automata build, + reported by Ashwin and Bjorn Reese + +Wed Mar 12 18:56:22 CET 2008 Daniel Veillard + + * HTMLparser.c: patch from Arnold Hendriks improving parsing of + html within html bogus data, still not a complete fix though + +Wed Mar 12 10:22:01 CET 2008 Daniel Veillard + + * python/types.c: fix a memory errro when using namespace nodes + returned from XPath queries, should fix #521699 + * python/tests/Makefile.am python/tests/xpathns.py: add a specific + regression test for it + +Mon Mar 10 16:25:32 CET 2008 Rob Richards + + * include/win32config.h: add ICONV_CONST define for win32 build + to satisfy encoding.c change in rev 3693 + +Fri Mar 7 17:45:27 CET 2008 Daniel Veillard + + * xmlsave.c parser.c: fix handling of empty CDATA nodes as + reported and discussed around #514181 and associated patches + * test/emptycdata.xml result/emptycdata.xml* + result/noent/emptycdata.xml: added a specific test in the + regression suite. + +Thu Mar 6 15:23:10 CET 2008 Daniel Veillard + + * encoding.c: poblem with encoding detection for UTF-16 reported by + Ashwin and found by Bill + * test/valid/dtds/utf16b.ent test/valid/dtds/utf16l.ent + test/valid/UTF16Entity.xml result/valid/UTF16Entity.xml*: added + the example to the regression tests + +Tue Mar 4 14:16:38 CET 2008 Daniel Veillard + + * xmlwriter.c: patch from Alex Khesin fixing CDATA output after + a text node. + * parser.c: fixed the comment for xmlParserCleanup + * globals.c: fixed indentation + +Mon Feb 25 16:42:19 CET 2008 Daniel Veillard + + * testModule.c: patch from Florent Guiliani to fix build on + SCO OpenServer + +Thu Feb 21 22:46:08 CET 2008 Daniel Veillard + + * debugXML.c: made one of the changes suggested by Brian Krahmer + * testRegexp.c: allow to pass '--' on the command line to allow + regexps starting with the character '-' + +Tue Feb 19 08:49:32 CET 2008 Daniel Veillard + + * python/Makefile.am python/tests/Makefile.am: applied cleanup + patches for cross compilation and MinGW from Roumen Petrov + +Sat Feb 16 11:06:54 CET 2008 Daniel Veillard + + * xmlIO.c: fix output bug reported by Petr Pajas and analyzed by + Bill + +Fri Feb 15 09:32:11 CET 2008 Daniel Veillard + + * include/libxml/xmlerror.h tree.c: patch from Julien Charbon + to simplify the processing of xmlSetProp() + +Fri Feb 15 08:45:32 CET 2008 Daniel Veillard + + * config.h.in configure.in encoding.c: patch from Roumen Petrov + to detect if iconv() needs a const for the second parameter + +Fri Feb 15 08:41:31 CET 2008 Daniel Veillard + + * macos/src/XMLTestPrefix2.h win32/Makefile.msvc: EOL cleanups + from Florent Guiliani + +Wed Feb 13 10:56:38 CET 2008 Daniel Veillard + + * xmlwriter.c: applied patch from Alfred Mickautsch to flush the + output at the end of document. + +Fri Feb 8 11:57:03 CET 2008 Daniel Veillard + + * doc/examples/examples.xml: regenerated, it was truncated. + +Fri Feb 8 11:47:18 CET 2008 Daniel Veillard + + * xmlmodule.c: apply simple patch from Carlo Bramini to avoid + compilation problems with Mingw32 + +Fri Feb 8 11:33:15 CET 2008 Daniel Veillard + + * xmlregexp.c: apply patch from Andrew Tosh to fix behaviour + when '.' is used in a posCharGroup + * test/schemas/poschargrp0_0.* result/schemas/poschargrp0_0_0*: + added the test to the regression suite + +Fri Feb 8 10:54:09 CET 2008 Daniel Veillard + + * dict.c: applied patch from Florent Guilian to remove an + useless mutex in the xmlDict structure. + +Wed Feb 6 17:00:20 CET 2008 Daniel Veillard + + * SAX2.c: another leak reported by Ashwin + * xinclude.c: fixed the behaviour when XIncluding a fragment + of the current document, patch from Chris Ryan + +Wed Feb 6 12:10:08 HKT 2008 William Brack + + * nanohttp.c: added space for port number (when not 80) in + xmlNanoHTTPMethodRedir, plus a few more comments. Should + fix #514521. + +Tue Feb 5 09:41:46 CET 2008 Daniel Veillard + + * schemas.c: apply fix suggested by Ashwin correcting a cut-n-paste + error about the SAX callback in cdataBlockSplit when streaming + XSD validation + +Tue Feb 5 09:36:46 CET 2008 Daniel Veillard + + * uri.c: applied a patch based on Petr Sumbera one to avoid a + problem with paths starting with // + +Mon Feb 4 17:48:30 CET 2008 Daniel Veillard + + * doc/xml.html doc/xmlmem.html: added a small section on returning + memory to the kernel by compacting the heap provided by Wolfram Sang + +Fri Jan 25 20:01:42 CET 2007 Rob Richards + + * include/win32config.h win32/Makefile.msvc: fix build under VS 2008. + patch by David Wimsey + +Thu Jan 24 15:37:04 CET 2008 Daniel Veillard + + * parser.c: fix a memeory leak in internal subset parsing with + a fix from Ashwin + * test/errors/content1.xml result/errors/content1.xml*: + add test to regressions + +Fri Jan 11 09:00:09 CET 2008 Daniel Veillard + + * configure.in doc/*: preparing release of 2.6.31 + +Fri Jan 11 08:58:49 CET 2008 Daniel Veillard + + * parser.c: avoid a warning on 64bits introduced earlier + * parserInternals.c: make more checking on the UTF-8 input + +Fri Jan 11 15:37:05 CST 2008 Daniel Veillard + + * HTMLparser.c: avoid stopping parsing when encountering + out of range characters in an HTML file, report and + continue processing instead, should fix #472696 + +Fri Jan 11 15:13:35 CST 2008 Daniel Veillard + + * check-relaxng-test-suite2.py check-relaxng-test-suite.py + Makefile.am python/tests/Makefile.am python/Makefile.am + check-xsddata-test-suite.py: patches from John Carr to + start cleaning up 'make diskcheck' problems c.f. #506228 + +Fri Jan 11 14:48:40 CST 2008 Daniel Veillard + + * xmllint.c: apply fix from Stefan Kost to avoid a crash + in xmllint, fixes 504284 + +Fri Jan 11 14:39:03 CST 2008 Daniel Veillard + + * xml2-config.in: apply patch from Fred Crozat to avoid + outputting -L/usr/lib from xml2-config, fixes #497012 + +Fri Jan 11 14:18:09 CST 2008 Daniel Veillard + + * HTMLparser.c: fix definition for to avoid error + when saving back, patch from Stefan Behnel fixing 495213 + +Fri Jan 11 14:06:09 CST 2008 Daniel Veillard + + * parser.c: applied patch from Christian Schmidt fixing a + column counter update problem, fixes #472696 + +Fri Jan 11 13:22:14 CST 2008 Daniel Veillard + + * parser.c: handle a erroneous parsing of attributes in + case said attribute has been redeclared in the DTD with a + different type + * hash.c: fix the hash scanner to not crash if a first element + from the hash list is been removed in the callback + +Wed Jan 9 10:15:50 CST 2008 Daniel Veillard + + * xmlwriter.c: fix indentation in xmlTextWriterFullEndElement, + as raised by Felipe Pena, should fix #508156 + +Tue Dec 6 11:07:42 CET 2007 Rob Richards + + * pattern.c: fix crash from double free of name for bug #501760 + +Fri Nov 23 11:47:48 CET 2007 Daniel Veillard + + * threads.c: remove unused variable in __xmlGlobalInitMutexLock + reported by Hannes Eder + +Mon Nov 19 18:39:26 CET 2007 Daniel Veillard + + * xmlregexp.c: remove a cut-and-paste copy error + +Fri Nov 16 11:55:36 CET 2007 Rob Richards + + * globals.c threads.c include/libxml/threads.h: + __xmlGlobalInitMutexDestroy() will free global_init_lock on Win32. + Patch from Marc-Antoine Ruel. + +Tue Nov 13 21:26:27 CET 2007 Rob Richards + + * schematron.c: fix crash/leaks from xmlSchematronParse due to improper + schema document ownership for bug #495215 + +Tue Oct 30 21:24:55 CET 2007 Daniel Veillard + + * xmlmemory.c: xmlFree(NULL) should not crash in debug mode + should fix #491651 + +Tue Oct 16 13:58:41 CEST 2007 Daniel Veillard + + * testURI.c: add a debug option printing all the fields within + the parsed URI structure + +Wed Oct 10 10:25:52 CEST 2007 Daniel Veillard + + * xmlsave.c: fix to avoid a crash when dumping an attribute from + an XHTML document, patch contributed to fix #485298 + +Tue Aug 28 19:32:28 CEST 2007 Daniel Veillard + + * xmlregexp.c: another nasty regexp case fixed. + * test/regexp/ranges2 result/regexp/ranges2: added to regression + suite + +Fri Aug 24 10:58:58 HKT 2007 William Brack + + * nanohttp.c: Enhanced to include port number (if not == 80) on the + "Header:" URL (bug #469681). + * xmlregexp.c: Fixed a typo causing a warning message. + +Thu Aug 23 22:48:20 CEST 2007 Daniel Veillard + + * nanohttp.c: fix an open() call with creation without 3rd argument + hopefully that interface is never used. + +Thu Aug 23 17:00:49 CEST 2007 Daniel Veillard + + * configure.in doc/*: preparing release of 2.6.30 + +Thu Aug 23 20:58:28 HKT 2007 William Brack + + * xpath.c: fixed xmlXPathCompOpEvalPositionalPredicate problem + with object caching (bug #469410) + +Thu Aug 23 11:28:38 CEST 2007 Daniel Veillard + + * xmlschemas.c test/schemas/*455953* result/schemas/bug455953*: + applied patch from Frank Gross fixing Schemas IDC import bug + #455953 and also add the test to the regression suite + +Wed Aug 22 18:29:42 CEST 2007 Daniel Veillard + + * xmlregexp.c: try to fix for the nth time the automata generation + in case of complex ranges. I suppose that time it is actually okay + +Tue Aug 14 15:51:05 CEST 2007 Daniel Veillard + + * parser.c: aligned xmlSAXUserParseMemory() to match + xmlSAXUserParseFile() logic based on Ashwin post, and ifdef + cleanup + +Tue Aug 14 11:42:27 CEST 2007 Rob Richards + + * xmlIO.c: fixed windows path determination (patch from + Roland Schwarz, bug #462877) + * win32/Makefile.mingw win32/configure.js: fixed mingw build + (patch from Roland Schwarz, bug #462877) + +Wed Aug 1 09:50:12 CEST 2007 Daniel Veillard + + * parser.c: fixed a parser bug where invalid char in comment may + not be detected, reported by Ashwin Sinha + * test/errors/comment1.xml result/errors/comment1.xml*: added + the example to the regression suite + +Thu Jul 26 13:42:26 CEST 2007 Daniel Veillard + + * xmlsave.c: fixed problem reported on bug #460415 + +Thu Jul 19 18:10:58 PDT 2007 William Brack + + * uri.c: applied patch from from Patrik Fimml. Fixes bug #458268. + +Wed Jul 18 11:05:08 PDT 2007 William Brack + + * xinclude.c: applied patch from bug #454608 from Patrik Fimml. + Fixes bug #454608. + +Wed Jul 11 19:57:59 CEST 2007 Daniel Veillard + + * xmlschemas.c: applied patch for xsi:nil from Frank Gross, this + should fix bug #358125 + +Wed Jul 4 17:44:20 CEST 2007 Daniel Veillard + + * xmlwriter.c: patch from Dodji Seketeli to avoid a leak on repeated + uses of xmlTextWriterStartDocument() + +Tue Jun 26 13:30:50 CEST 2007 Daniel Veillard + + * xmlschemas.c: fix a crash on solaris when a printf %s with a NULL + argument occurs, should fix #450936 + +Wed Jun 13 13:33:38 PDT 2007 William Brack + + * xpath.c: fixed problem in previous fix to xmlXPathNodeSetSort + +Tue Jun 12 18:17:28 CEST 2007 Daniel Veillard + + * doc/* configure.in NEWS: release of libxml2 2.6.29 + * valid.c: patch from Dagfinn I. Mannsåker for idness of name + in HTML, c.f. bug #305885. + +Tue Jun 12 17:14:08 CEST 2007 Daniel Veillard + + * SAX2.c: fixing bug #319964, parsing of HTML attribute really + should not have namespace processing. + +Tue Jun 12 16:42:14 CEST 2007 Daniel Veillard + + * parser.c: fixed the push mode when a big comment occurs before + an internal subset, should close bug #438835 + * test/comment6.xml result//comment6.xml*: added a special + test in the regression suite + +Tue Jun 12 15:41:09 CEST 2007 Daniel Veillard + + * parser.c: fix bug #414846 where invalid characters in attributes + would sometimes not be detected. + * test/errors/attr4.xml result/errors/attr4.xml*: added a specific + test case to the regression tests + +Tue Jun 12 14:23:24 CEST 2007 Daniel Veillard + + * xstc/Makefile.am: apply patch from Ryan Hill to cope with changes + in GNU tar, should fix #396751 + +Tue Jun 12 12:03:36 CEST 2007 Daniel Veillard + + * python/types.c: try to allow compilation on old python version + should fix #398125 + +Tue Jun 12 11:48:15 CEST 2007 Daniel Veillard + + * HTMLtree.c: htmlNodeDumpFormatOutput didn't handle XML_ATTRIBUTE_NODe + fixes bug #438390 + +Tue Jun 12 11:37:55 CEST 2007 Daniel Veillard + + * xmlIO.c: workaround misgenerated file: URIs c.f. #437385 + +Tue Jun 12 11:22:47 CEST 2007 Daniel Veillard + + * relaxng.c: fixed bug #407436 a crash in a specific case of + Relax-NG validation + +Tue Jun 12 11:12:50 CEST 2007 Daniel Veillard + + * catalog.c: fixed bug #383687, some case of recursion on next + were not caught in the catalog code. + +Tue Jun 12 10:37:42 CEST 2007 Daniel Veillard + + * HTMLparser.c: fixed bug #381877, avoid reading over the end + of stream when generating an UTF-8 encoding error. + +Tue Jun 12 10:16:48 CEST 2007 Daniel Veillard + + * parser.c: fixed bug #366161, trivially added the check in + xmlCtxtReset() + +Fri Jun 8 21:48:21 CEST 2007 Rob Richards + + * win32/configure.js win32/Makefile.msvc: add --vcmanifest flag (yes/no) + for VC8 build support to embed manifest within files. Under MS VC, build + libxml2_a_dll.lib by default (LIBXML_STATIC_FOR_DLL flag). + +Fri Jun 8 21:37:46 CEST 2007 Rob Richards + + * threads.c include/libxml/threads.h: use specified calling convention + for xmlDllMain. Old SDKs (VC6) only support InterlockedCompareExchange. + add xmlDllMain to header for win32 when building for static dll + +Fri Jun 8 10:51:28 CEST 2007 Rob Richards + + * xmlwriter.c: fixed problem with namespace declaration being + written more than once per element start tag + +Wed Jun 6 10:18:28 PDT 2007 William Brack + + * xpath.c: fixed problem with xmlXPathNodeSetSort; + fixed problem with xmlXPathNodeTrailingSorted (both bug#413451) + +Wed May 30 22:05:08 PDT 2007 William Brack + + * xpath.c: fixed problem with string value for PI node + (bug #442275) + +Mon May 28 16:14:50 CEST 2007 Daniel Veillard + + * uri.c: fix bug reported by François Delyon + +Tue May 22 08:59:48 PDT 2007 William Brack + + * encoding.c: Fixed typo in xmlCharEncFirstLine pointed out + by Mark Rowe (bug #440159) + * include/libxml/xmlversion.h.in: Added check for definition of + _POSIX_C_SOURCE to avoid warnings on Apple OS/X (patch from + Wendy Doyle and Mark Rowe, bug #346675) + * schematron.c, testapi.c, tree.c, xmlIO.c, xmlsave.c: minor + changes to fix compilation warnings - no change to logic. + +Tue May 15 22:18:08 PDT 2007 William Brack + + * nanohttp.c: small enhancement to last fix, pointed out + by Alex Cornejo + +Tue May 15 12:38:38 PDT 2007 William Brack + + * nanohttp.c: fixed problem on gzip streams (bug #438045) + * xpath.c: fixed minor spot of redundant code - no logic change. + +Fri May 11 22:45:18 HKT 2007 William Brack + + * xpath.c: enhanced the coding for xmlXPathCastNumberToString + in order to produce the required number of significant digits + (bug #437179) + +Thu May 10 01:52:42 CEST 2007 Daniel Veillard + + * list.c: applied patch to fix xmlListAppend() from + Georges-André SILBER + * valid.c: also fix the place wher it was called. + +Wed May 2 18:47:33 CEST 2007 Daniel Veillard + + * parser.c: tried to fix an error problem on entity content failure + reported by Michael Day + +Wed May 2 18:23:35 CEST 2007 Daniel Veillard + + * configure.in: typo patch from Bjorn Reese + +Wed May 2 18:12:58 CEST 2007 Daniel Veillard + + * HTMLparser.c: applied patch from Michael Day to add support for + + +Thu Apr 26 10:58:50 CEST 2007 Daniel Veillard + + * HTMLparser.c: Jean-Daniel Dupas pointed a couple of problems + in htmlCreateDocParserCtxt. + +Thu Apr 26 10:36:26 CEST 2007 Daniel Veillard + + * uri.c include/libxml/uri.h: patch from Richard Jones to save + the query part in raw form. + * libxml2-python-api.xml: also added accessor for the python bindings + +Wed Apr 25 15:57:32 CEST 2007 Daniel Veillard + + * xstc/Makefile.am doc/examples/Makefile.am Makefile.am: applied + patch from Richard Jones to for the silent flag on valgrind + when doing "make valgrind" + * xmlregexp.c: raise a regexp error when '\' is misused to escape + a standard character. + +Tue Apr 24 20:15:14 CEST 2007 Daniel Veillard + + * tree.c: Richard Jones reported xmlBufferAdd (buf, "", -1), fixing it + +Tue Apr 24 10:59:28 CEST 2007 Daniel Veillard + + * uri.c: fix xmlURIUnescapeString comments which was confusing + +Wed Apr 18 09:52:25 CEST 2007 Daniel Veillard + + * include/win32config.h libxml.h: new patch from Andreas Stricke to + better integrate support for Windows CE + +Tue Apr 17 16:50:12 CEST 2007 Daniel Veillard + + * doc/* configure.in NEWS: release of libxml2 2.6.28 + +Tue Apr 17 14:47:42 CEST 2007 Daniel Veillard + + * catalog.c libxml.h win32/wince/wincecompat.h win32/wince/wincecompat.c + xmlIO.c nanohttp.c nanoftp.c trio.c triostr.c triostr.h: applied + patch from Andreas Stricke to ease the compilation on Windows CE + +Tue Apr 17 14:34:45 CEST 2007 Daniel Veillard + + * xmllint.c catalog.c: "xmllint unusable on win32" so applied + a libxml2 patch from Christian Ehrlicher + +Mon Apr 16 09:05:01 CEST 2007 Daniel Veillard + + * HTMLparser.c: change the way script/style are parsed to + not try to detect comments, reported by Mike Day + * result/HTML/doc3.*: affects the result of that test + +Wed Apr 11 22:38:18 HKT 2007 William Brack + + * xmlregexp.c: small enhancement for quantifier range with + min occurs of 0; fixes bug 425542. + +Fri Mar 30 14:41:57 CEST 2007 Daniel Veillard + + * xmlIO.c: applied change from Michael Day to avoid a problem when + compiled without zlib support. + +Wed Mar 21 17:58:13 CET 2007 Daniel Veillard + + * include/libxml/xpath.h: applied documentation patch from James Dennett + +Wed Mar 21 21:20:48 HKT 2007 William Brack + + * xmlregexp.c: fixed problem with 0x2d in Char Range (bug #420596) + * test/regexp/bug420596, result/regexp/bug420596: added regression + test for this + +Wed Mar 21 14:23:08 HKT 2007 William Brack + + * HTMLparser.c: fixed memory access error on parsing of meta data + which had errors (bug #382206). Also cleaned up a few warnings + by adding some additional DECL macros. + +Tue Mar 20 09:58:13 CET 2007 Daniel Veillard + + * nanoftp.c: applied patch from Björn Wiberg to try to fix again + the silly __ss_familly problem on various AIXes, should fix #420184 + +Wed Mar 14 20:30:38 HKT 2007 William Brack + + * configure.in: corrected small error in last commit + * xmlreader.c: corrected small typo in last commit + +Wed Mar 14 19:35:28 HKT 2007 William Brack + + * xmlschemas.c: fixed problem with referenced attribute groups + (bug #417621) + * configure.in: re-ordered some includes for types.h / socket.h + (bug #416001) + +Fri Mar 9 17:54:40 CET 2007 Daniel Veillard + + * xmlreader.c: applied patch from Julien Reichel cleaning up mode + and state internal flags mixups + +Wed Mar 7 16:18:18 HKT 2007 William Brack + + * xpath.c: fixed xmlXPathCmpNodes for incorrect result on certain + cases when comparing identical nodes (bug #415567) with patch + from Oleg Paraschenko + +Fri Feb 16 09:13:38 PST 2007 William Brack + + * python/libxml.py: fixed tab problem with patch from + Andreas Hanke (bug #408626) + +Thu Feb 15 12:43:28 PST 2007 William Brack + + * doc/xml.html: Changed all references to libxml2 CVS over to + the corresponding SVN. A few other spelling/grammar/links + also changed. + * doc/libxml2-api.xml, doc/*.html: Regenerated all docs. + +Tue Feb 13 18:15:58 PST 2007 William Brack + + * xpath.c: Fixed memory bug with invalid function reported by + Francois Delyon on mailing list + +Mon Feb 12 16:40:48 PST 2007 William Brack + + * xinclude.c: fixed problem with invalid char encountered + during text include (reported on xslt mailing list) + +Mon Feb 12 18:30:01 CET 2007 Daniel Veillard + + * Makefile.am: small cleanup to avoid packaging .svn + * libxml.h threads.c parser.c: applied patch to avoid a problem + in concurrent threaded initialization fix from Ted Phelps + +Thu Feb 08 15:35:18 PST 2007 William Brack + + * parser.c: added a GROW when parsing complex comments (bug #405666) + * gentest.py, testapi.c: added a hack to prevent destruction of any + param with 'destroy' in it's description (i.e. param destroyed by + the routine under test, so shouldn't be destroyed by testapi) + * xmlreader.c: added freeing of 'input' param even on error + (fixes leak detected by testapi) + +Wed Jan 31 10:25:38 PST 2007 William Brack + + * testAutomata.c, testRegexp.c, testThreads.c, testThreadsWin32.c, + xmlwriter.c: repositioned #include for libxml.h to avoid + compilation error on some architectures (bug #398277) + * fixed screwed-up ChangeLog (deleted some duplicate entries) + +Fri Jan 26 00:05:18 PST 2007 William Brack + + * implemented patch from Stéphane Bidoul for uri.c (bug #389767) + +Thu Jan 25 11:15:08 PST 2007 William Brack + + * xpath.c: added checks for alloc fail on calls to + xmlXPathNewContext (libxslt bug #400242) + +Thu Jan 11 15:38:08 PST 2007 William Brack + + * Re-generated the documentation (API chunks 27-29 were missing) + (also causes changes to testapi.c, elfgcchack.h and + win32/libxml2.def.src) + +Tue Jan 9 22:24:26 CET 2007 Daniel Veillard + + * python/libxml.c: fix a memory leak in the python string handling + when SAX event are passed back to the python handlers + +Thu Jan 4 18:27:49 CET 2007 Daniel Veillard + + * xmlreader.c: fix xmlTextReaderSetup() description + * test/relaxng/empty1.rng test/relaxng/comps_0.xml + test/relaxng/empty1_0.xml test/relaxng/comps.rng + test/relaxng/empty0.rng test/relaxng/empty0_0.xml + test/relaxng/empty1_1.xml: tests which were apparently + never commited to CVS + +Wed Jan 3 16:05:21 PST 2007 Aleksey Sanin + + * xmlreader.c include/libxml/xmlreader.h win32/libxml2.def.src: + expose xmlTextReaderSetup() function + +Wed Jan 3 16:14:13 CET 2007 Daniel Veillard + + * configure.in: adapt the extra versioning code to SVN + +Thu Dec 14 16:52:34 CET 2006 Daniel Veillard + + * python/generator.py python/libxml.py: apparently id() sometimes + generate negative values and %X outputs -XXXX :-( + +Mon Dec 4 10:30:25 CET 2006 Daniel Veillard + + * parser.c include/libxml/tree.h: patch from Michael Day on standalone + and XML declaration detection, and associated documentation change + +Mon Dec 4 10:27:01 CET 2006 Daniel Veillard + + * xinclude.c: another XInclude user data propagation patch from + Michael Day + +Thu Nov 23 17:22:03 CET 2006 Daniel Veillard + + * HTMLparser.c: applied patch from Steven Rainwater to fix + UTF8ToHtml behaviour on code points which are not mappable to + predefined HTML entities, fixes #377544 + +Thu Nov 23 17:11:23 CET 2006 Daniel Veillard + + * xpath.c: fixed a bug where the principal node type of an axis + wasn't tested on name check, fixes bug #377432 + +Wed Nov 8 10:19:27 CET 2006 Daniel Veillard + + * HTMLparser.c: change htmlCtxtReset() following Michael Day bug + report and suggestion. + +Mon Nov 6 09:56:41 CET 2006 Daniel Veillard + + * uri.c: applied patch from Igor for path conversion on Windows + +Thu Nov 2 11:29:17 CET 2006 Daniel Veillard + + * xmlregexp.c: another small change on the algorithm for the + elimination of epsilon transitions, should help on #362989 too + +Wed Nov 1 16:33:10 CET 2006 Daniel Veillard + + * tree.c: applied documentation patches from Markus Keim + * xmlregexp.c: fixed one bug and added a couple of optimisations + while working on bug #362989 + +Fri Oct 27 14:54:07 CEST 2006 Daniel Veillard + + * HTMLparser.c: applied a reworked version of Usamah Malik patch + to avoid growing the parser stack in some autoclose cases, should + fix #361221 + +Thu Oct 26 10:54:40 CEST 2006 Daniel Veillard + + * xpath.c: William spotted an obvious bug + +Wed Oct 25 18:04:50 CEST 2006 Daniel Veillard + + * NEWS configure.in testapi.c doc//*: preparing release of + libxml2-2.6.27 + * include/libxml/tree.h: fix a small problem with preproc flags + +Fri Oct 20 14:55:47 CEST 2006 Daniel Veillard + + * tree.c: fix comment for xmlDocSetRootElement c.f. #351981 + * xmllint.c: order XPath elements when using --shell + +Tue Oct 17 23:23:26 CEST 2006 Daniel Veillard + + * xmlregexp.c: applied fix from Christopher Boumenot for bug + #362714 on regexps missing ']' + +Tue Oct 17 22:32:42 CEST 2006 Daniel Veillard + + * parserInternals.c: applied patch from Marius Konitzer to avoid + leaking in xmlNewInputFromFile() in case of HTTP redirection + +Tue Oct 17 22:19:02 CEST 2006 Daniel Veillard + + * HTMLparser.c: fix one problem found in htmlCtxtUseOptions() + and pointed in #340591 + +Tue Oct 17 22:04:31 CEST 2006 Daniel Veillard + + * HTMLparser.c: fixed teh 2 stupid bugs affecting htmlReadDoc() and + htmlReadIO() this should fix #340322 + +Tue Oct 17 21:39:23 CEST 2006 Daniel Veillard + + * xpath.c: applied patch from Olaf Walkowiak which should fix #334104 + +Tue Oct 17 18:12:34 CEST 2006 Daniel Veillard + + * HTMLparser.c: fixing HTML minimized attribute values to be generated + internally if not present, fixes bug #332124 + * result/HTML/doc2.htm.sax result/HTML/doc3.htm.sax + result/HTML/wired.html.sax: this affects the SAX event strem for + a few test cases + +Tue Oct 17 17:56:31 CEST 2006 Daniel Veillard + + * HTMLparser.c: fixing HTML entities in attributes parsing bug #362552 + * result/HTML/entities2.html* test/HTML/entities2.html: added to + the regression suite + +Tue Oct 17 01:21:37 CEST 2006 Daniel Veillard + + * xmllint.c: started to switch xmllint to use xmlSaveDoc to test + #342556 + * xmlsave.c: fixed #342556 easy and a whole set of problems with + encodings, BOM and xmlSaveDoc() + +Mon Oct 16 15:14:53 CEST 2006 Daniel Veillard + + * HTMLparser.c: fix #348252 if the document clains to be in a + different encoding in the meta tag and it's obviously wrong, + don't screw up the end of the content. + +Mon Oct 16 11:32:09 CEST 2006 Daniel Veillard + + * HTMLparser.c: fix a chunking and script bug #347708 + +Mon Oct 16 09:51:05 CEST 2006 Daniel Veillard + + * HTMLparser.c: remove a warning + * encoding.c: check with uppercase for AIX iconv() should fix #352644 + * doc/examples/Makefile.am: partially handle one bug report + +Sun Oct 15 22:31:42 CEST 2006 Daniel Veillard + + * parser.c: fix the patch for unreproductable #343000 but + also fix a line/column keeping error + * result/errors/attr1.xml.err result/errors/attr2.xml.err + result/errors/name.xml.err result/errors/name2.xml.err + result/schemas/anyAttr-processContents-err1_0_0.err + result/schemas/bug312957_1_0.err: affected lines in error output + of the regression tests + +Sat Oct 14 10:46:46 CEST 2006 Daniel Veillard + + * tree.c: fixing bug #344390 with xmlReconciliateNs + +Sat Oct 14 00:31:49 CEST 2006 Daniel Veillard + + * xmllint.c: added --html --memory to test htmlReadMemory to + test #321632 + * HTMLparser.c: added various initialization calls which may help + #321632 but not conclusive + * testapi.c tree.c include/libxml/tree.h: fixed compilation with + --with-minimum --with-sax1 and --with-minimum --with-schemas + fixing #326442 + +Fri Oct 13 18:30:55 CEST 2006 Daniel Veillard + + * relaxng.c: fix a Relax-NG bug related to element content processing, + fixes bug #302836 + * test/relaxng/302836.rng test/relaxng/302836_0.xml + result/relaxng/302836*: added to regression tests + +Fri Oct 13 14:42:44 CEST 2006 Daniel Veillard + + * parser.c: fix a problem in xmlSplitQName resulting in bug #334669 + +Fri Oct 13 12:27:22 CEST 2006 Daniel Veillard + + * parser.c: fixed xmlIOParseDTD handling of @input in error case, + Should fix #335085 + * testapi.c: reset the http_proxy env variable to not waste time + on regression tests + +Thu Oct 12 23:07:43 CEST 2006 Rob Richards + + * xmlIO.c: fix Windows compile - missing xmlWrapOpen. + +Thu Oct 12 18:21:18 CEST 2006 Daniel Veillard + + * parser.c: fixed the heuristic used when trying to detect mixed-content + elememts if the parser wants to treat ignorable whitespaces + in a non-standard way, should fix bug #300263 + +Thu Oct 12 14:52:38 CEST 2006 Daniel Veillard + + * parser.c: fix a first arg error in SAX callback pointed out by + Mike Hommey, and another one still hanging around. Should fix #342737 + +Wed Oct 11 23:11:58 CEST 2006 Daniel Veillard + + * include/libxml/xmlversion.h.in: fix comment on versions + * xmlmemory.c: do not spend too much time digging in dumped memory + +Wed Oct 11 18:40:00 CEST 2006 Daniel Veillard + + * valid.c: fixed a weird error where validity context whould not + show up if warnings were disabled pointed out by Bob Stayton + * xmlIO.c doc/generator.py: cleanup and fix to regenerate the docs + * doc//* testapi.c: rebuilt the docs + +Wed Oct 11 14:32:00 CEST 2006 Daniel Veillard + + * libxml-2.0.pc.in: applied patch from Mikhail Zabaluev to separate + library flags for shared and static builds, fixes #344594. If this + bites you, use xml2-config. + +Wed Oct 11 11:27:37 CEST 2006 Daniel Veillard + + * python/Makefile.am: remove the build path recorded in the python + shared module as Peter Breitenlohner pointed out, should fix #346022 + +Wed Oct 11 11:14:51 CEST 2006 Daniel Veillard + + * xmlIO.c: applied patch from Mikhail Zabaluev fixing the conditions + of unescaping from URL to filepath, should fix #344588. + +Wed Oct 11 10:24:58 CEST 2006 Daniel Veillard + + * configure.in xstc/Makefile.am: applied patch from Peter Breitenlohner + for wget detection and fix of a Python path problem, should fix + #340993 + +Tue Oct 10 22:02:29 CEST 2006 Daniel Veillard + + * include/libxml/entities.h entities.c SAX2.c parser.c: trying to + fix entities behaviour when using SAX, had to extend entities + content and hack on the entities processing code, but that should + fix the long standing bug #159219 + +Tue Oct 10 14:36:18 CEST 2006 Daniel Veillard + + * uri.c include/libxml/uri.h: add a new function xmlPathToUri() + to provide a clean conversion when setting up a base + * SAX2.c tree.c: use said function when setting up doc->URL + or using the xmlSetBase function. Should fix #346261 + +Tue Oct 10 11:05:59 CEST 2006 Daniel Veillard + + * xmlIO.c: applied a portability patch from Emelyanov Alexey + +Tue Oct 10 10:52:01 CEST 2006 Daniel Veillard + + * parser.c: applied and slightly modified a patch from Michael Day to + keep _private in the parser context when parsing external entities + +Tue Oct 10 10:33:43 CEST 2006 Daniel Veillard + + * python/libxml.py python/types.c: applied patch from Ross Reedstrom, + Brian West and Stefan Anca to add XPointer suport to the Python bindings + +Fri Sep 29 11:13:59 CEST 2006 Daniel Veillard + + * xmlsave.c: fixed a comment + * xinclude.c include/libxml/xinclude.h: applied a patch from Michael Day + to add a new function providing the _private field for the generated + parser contexts xmlXIncludeProcessFlagsData() + +Thu Sep 21 10:36:11 CEST 2006 Daniel Veillard + + * xmlIO.c: applied patch from Michael Day doing some refactoring + for the catalog entity loaders. + +Thu Sep 21 08:53:06 CEST 2006 Daniel Veillard + + * HTMLparser.c include/libxml/HTMLparser.h: exports htmlNewParserCtxt() + as Michael Day pointed out this is needed to use htmlCtxtRead*() + +Tue Sep 19 14:42:59 CEST 2006 Daniel Veillard + + * parser.c: applied patch from Ben Darnell on #321545, I could not + reproduce the problem but 1/ this is safe 2/ it's better to be safe. + +Sat Sep 16 16:02:23 CEST 2006 Rob Richards + + * tree.c: xmlTextConcat works with comments and PI nodes (bug #355962). + * parser.c: fix resulting tree corruption when using XML namespace + with existing doc in xmlParseBalancedChunkMemoryRecover. + +Fri Sep 1 11:52:55 CEST 2006 Daniel Veillard + + * xmlIO.c: another patch from Emelyanov Alexey to clean up a few things + in the previous patch. + +Wed Aug 30 15:10:09 CEST 2006 Daniel Veillard + + * xmlIO.c: applied patch from Roland Schwingel to fix the problem + with file names in UTF-8 on Windows, and compat on older win9x + versions. + +Tue Aug 22 16:51:22 CEST 2006 Daniel Veillard + + * valid.c: fixed a bug #203125 in Red hat bugzilla, crashing PHP4 + on validation errors, the heuristic to guess is a vctxt user + pointer is the parsing context was insufficient. + +Mon Aug 21 10:40:10 CEST 2006 Daniel Veillard + + * doc/xmlcatalog.1 doc/xmlcatalog_man.xml doc/xmllint.1 doc/xmllint.xml: + applied patch to man pages from Daniel Leidert and regenerated + +Thu Aug 17 00:48:31 CEST 2006 Rob Richards + + * xmlwriter.c: Add a document to the xmlwriter structure and + pass document when writing attribute content for encoding support. + +Wed Aug 16 01:15:12 CEST 2006 Rob Richards + + * HTMLtree.c xmlsave.c: Add linefeeds to error messages allowing + for consistant handling. + +Tue Aug 15 15:02:18 CEST 2006 Kasimier Buchcik + + * xpath.c: Applied the proposed fix for the documentation + of xmlXPathCastToString(); see bug #346202. + +Tue Aug 15 14:49:18 CEST 2006 Kasimier Buchcik + + * xmlschemas.c: While investigating bug #350247, I noticed + that xmlSchemaIDCMatcher structs are massively recreated + although only a maximum of 3 structs is used at the same + time; added a cache for those structures to the + validation context. + +Sat Aug 12 16:12:53 CEST 2006 Daniel Veillard + + * xmlschemas.c: applied patch from Marton Illes to fix an allocation + bug in xmlSchemaXPathEvaluate should close #351032 + +Mon Aug 7 13:08:46 CEST 2006 Daniel Veillard + + * xmlschemas.c: applied patch from Bertrand Fritsch to fix a bug in + xmlSchemaClearValidCtxt + +Fri Aug 4 14:50:41 CEST 2006 Daniel Veillard + + * python/generator.py: fixed the conversion of long parameters + +Thu Jul 13 15:03:11 CEST 2006 Kasimier Buchcik + + * xmlsave.c: Removed the automatic generation of CDATA sections + for the content of the "script" and "style" elements when + serializing XHTML. The issue was reported by Vincent Lefevre, + bug #345147. + * result/xhtml1 result/noent/xhtml1: Adjusted regression test + results due to the serialization change described above. + +Thu Jul 13 08:32:21 CEST 2006 Daniel Veillard + + * configure.in parser.c xmllint.c include/libxml/parser.h + include/libxml/xmlversion.h.in: applied patch from Andrew W. Nosenko + to expose if zlib support was compiled in, in the header, in the + feature API and in the xmllint --version output. + +Thu Jul 13 08:24:14 CEST 2006 Daniel Veillard + + * SAX2.c: refactor to use normal warnings for entities problem + and not straight SAX callbacks. + +Wed Jul 12 17:13:03 CEST 2006 Kasimier Buchcik + + * xmlschemas.c: Fixed bug #347316, reported by David Belius: + The simple type, which was the content type definition + of a complex type, which in turn was the base type of a + extending complex type, was missed to be set on this + extending complex type in the derivation machinery. + +Mon Jul 3 13:36:43 CEST 2006 Kasimier Buchcik + + * xpath.c: Changed xmlXPathCollectAndTest() to use + xmlXPathNodeSetAddNs() when adding a ns-node in case of + NODE_TEST_TYPE (the ns-node was previously added plainly + to the list). Since for NODE_TEST_ALL and NODE_TEST_NAME + this specialized ns-addition function was already used, + I assume it was missed to be used with NODE_TEST_TYPE. + +Mon Jul 3 10:57:33 CEST 2006 Daniel Veillard + + * HTMLparser.c: applied const'ification of strings patch from + Matthias Clasen + +Thu Jun 29 13:51:12 CEST 2006 Daniel Veillard + + * threads.c: patch from Andrew W. Nosenko, xmlFreeRMutex forgot to + destroy the condition associated to the mutex. + +Thu Jun 29 12:48:00 CEST 2006 Kasimier Buchcik + + * xpath.c: Fixed a double-free in xmlXPathCompOpEvalToBoolean(), + revealed by a Libxslt regression test. + +Thu Jun 29 12:28:07 CEST 2006 Kasimier Buchcik + + * xpath.c: Enhanced xmlXPathCompOpEvalToBoolean() to be also + usable outside predicate evaluation; the intention is to + use it via xmlXPathCompiledEvalToBoolean() for XSLT tests, + like in . + +Wed Jun 28 19:11:16 CEST 2006 Kasimier Buchcik + + * xpath.c: Fix a memory leak which occurred when using + xmlXPathCompiledEvalToBoolean(). + +Mon Jun 26 17:24:28 UTC 2006 William Brack + + * python/libxml.c, python/libxml.py, python/tests/compareNodes.py, + python/tests/Makefile.am: + Added code submitted by Andreas Pakulat to provide node + equality, inequality and hash functions, plus a single + test program to check the functions (bugs 345779 + 345961). + +Mon Jun 26 18:38:51 CEST 2006 Kasimier Buchcik + + * xpath.c: Added xmlXPathCompiledEvalToBoolean() to the API and + adjusted/added xmlXPathRunEval(), xmlXPathRunStreamEval(), + xmlXPathCompOpEvalToBoolean(), xmlXPathNodeCollectAndTest() + to be aware of a boolean result request. The new function + is now used to evaluate predicates. + +Mon Jun 26 16:22:50 CEST 2006 Kasimier Buchcik + + * xpath.c: Fixed an bug in xmlXPathCompExprAdd(): the newly + introduced field @rewriteType on xmlXPathStepOp was not + initialized to zero here; this could lead to the activation + of the axis rewrite code in xmlXPathNodeCollectAndTest() when + @rewriteType is randomly set to the value 1. A test + (hardcoding the intial value to 1) revealed that the + resulting incorrect behaviour is similar to the behaviour + as described by Arnold Hendriks on the mailing list; so I + hope that will fix the issue. + +Fri Jun 23 18:26:08 CEST 2006 Kasimier Buchcik + + * xpath.c: Fixed an error in xmlXPathEvalExpr(), which + was introduced with the addition of the d-o-s rewrite + and made xpath.c unable to compile if XPATH_STREAMING + was not defined (reported by Kupriyanov Anatolij - + #345752). Fixed the check for d-o-s rewrite + to work on the correct XPath string, which is ctxt->base + and not comp->expr in this case. + +Mon Jun 19 12:23:41 CEST 2006 Kasimier Buchcik + + * xpath.c: Added optimization for positional predicates + (only short-hand form "[n]"), which have a preceding + predicate: "/foo[descendant::bar][3]". + +Sun Jun 18 20:59:02 EDT 2006 Daniel Veillard + + * parser.c: try to fix the crash raised by the parser in + recover mode as pointed by Ryan Phillips + +Sun Jun 18 18:44:56 EDT 2006 Daniel Veillard + + * python/types.c: patch from Nic Ferrier to provide a better type + mapping from XPath to python + +Sun Jun 18 18:35:50 EDT 2006 Daniel Veillard + + * runtest.c: applied patch from Boz for VMS and reporting + Schemas errors. + +Sun Jun 18 18:22:25 EDT 2006 Daniel Veillard + + * testapi.c: applied patch from Felipe Contreras when compiling + with --with-minimum + +Fri Jun 16 21:37:44 CEST 2006 Kasimier Buchcik + + * tree.c include/libxml/tree.h: Fixed a bug in + xmlDOMWrapAdoptNode(); the tree traversal stopped if the + very first given node had an attribute node :-( This was due + to a missed check in the traversal mechanism. + Expanded the xmlDOMWrapCtxt: it now holds the namespace map + used in xmlDOMWrapAdoptNode() and xmlDOMWrapCloneNode() for + reusal; so the map-items don't need to be created for every + cloning/adoption. Added a callback function to it for + retrieval of xmlNsPtr to be set on node->ns; this is needed + for my custom handling of ns-references in my DOM wrapper. + Substituted code which created the XML namespace decl on + the doc for a call to xmlTreeEnsureXMLDecl(). Removed + those nastly "warnigns" from the docs of the clone/adopt + functions; they work fine on my side. + +Mon Jun 12 13:23:11 CEST 2006 Kasimier Buchcik + + * result/pattern/namespaces: Adjusted the result of a + regression test, since the fix of xmlGetNodePath() revealed a + bug in this test result. + +Mon Jun 12 13:06:03 CEST 2006 Kasimier Buchcik + + * tree.c: Got rid of a compiler warning in xmlGetNodePath(). + +Mon Jun 12 12:54:25 CEST 2006 Kasimier Buchcik + + * tree.c: Fixed xmlGetNodePath() to generate the node test "*" + for elements in the default namespace, rather than generating + an unprefixed named node test and loosing the namespace + information. + +Fri Jun 9 21:45:02 CEST 2006 Kasimier Buchcik + + * include/libxml/parser.h: Clarified in the docs that the tree + must not be tried to be modified if using the parser flag + XML_PARSE_COMPACT as suggested by Stefan Behnel + (#344390). + +Tue Jun 6 17:50:43 CEST 2006 Daniel Veillard + + * configure.ini NEWS doc//* libxml.spec.in : preparing release of 2.6.26 + +Tue Jun 6 17:25:23 CEST 2006 Kasimier Buchcik + + * xpath.c: Fixed self-invented a segfault in xmlXPathCtxtCompile(), + when the expression was not valid and @comp was NULL and I + tried to do the d-o-s rewrite. + +Tue Jun 6 15:19:57 CEST 2006 Daniel Veillard + + * configure.ini NEWS doc//* libxml.spec.in : preparing release of 2.6.25 + +Tue Jun 6 11:28:15 CEST 2006 Kasimier Buchcik + + * xpath.c: Enabled the compound traversal again; I added a + check to use this only if the have an expression starting + with the document node; so in the case of "//foo", we + already know at compilation-time, that there will be only + 1 initial context node. Added the rewrite also to + xmlXPathEvalExpr(). + +Tue Jun 6 10:23:10 CEST 2006 Daniel Veillard + + * xinclude.c: fix bug #343968, include='text' can't lead to a + recursion. + +Fri Jun 2 22:47:08 CEST 2006 Kasimier Buchcik + + * xpath.c: Disabled the compound traversal for the release; + I need first to assure that this is done only if we have + 1 initial node. + +Wed May 31 13:53:41 PST 2006 Aleksey Sanin + + * xpath.c: fixed memory leak in xpath error reporting + +Wed May 31 15:30:16 CEST 2006 Daniel Veillard + + * libxml.h triodef.h: applied patch from Olli Savia for LynxOS + +Wed May 31 14:33:00 CEST 2006 Kasimier Buchcik + + * xpath.c include/libxml/xpath.h runsuite.c: + Changed the name of the recently added public function + xmlXPathContextSetObjectCache() to + xmlXPathContextSetCache(); so a more generic one, in + case we decide to cache more things than only XPath + objects. + +Tue May 30 21:36:16 CEST 2006 Kasimier Buchcik + + * xpath.c: Optimized xmlXPathNodeCollectAndTest() and + xmlXPathNodeCollectAndTestNth() to evaluate a compound + traversal of 2 axes when we have a "//foo" expression. + This is done with a rewrite of the XPath AST in + xmlXPathRewriteDOSExpression(); I added an additional field + to xmlXPathStepOp for this (but the field's name should be + changed). The mechanism: the embracing descendant-or-self + axis traversal (also optimized to return only nodes which + can hold elements), will produce context nodes for the + inner traversal of the child axis. This way we avoid a full + node-collecting traversal of the descendant-or-self axis. + Some tests indicate that this can reduce execution time of + "//foo" to 50%. Together with the XPath object cache this + all significantly speeds up libxslt. + +Tue May 30 11:38:47 CEST 2006 Kasimier Buchcik + + * xmlschemas.c: A warning will now be reported in the value of + the XSD attribute 'schemaLocation' does not consist of tuples + (namespace-name, document-URI). A warning will be reported + if a schema document could not be found at the specified + location (via 'schemaLocation' or + 'noNamespaceSchemaLocation'). + * include/libxml/xmlerror.h: Added XML_SCHEMAV_MISC to + xmlParserErrors. + +Tue May 30 11:21:34 CEST 2006 Kasimier Buchcik + + * xpath.c: Enhanced xmlXPathNodeCollectAndTest() to avoid + recreation (if possible) of the node-set which is used to + collect the nodes in the current axis for the currect context + node. Especially for "//foo" this will decrease dramatically + the number of created node-sets, since for each node in the + result node-set of the evaluation of descendant-or-self::node() + a new temporary node-set was created. Added node iterator + xmlXPathNextChildElement() as a tiny optimization for + child::foo. + +Mon May 29 18:06:17 CEST 2006 Kasimier Buchcik + + * xpath.c include/libxml/xpath.h: Added an XPath object cache. + It sits on an xmlXPathContext and need to be explicitely + activated (or deactivated again) with + xmlXPathContextSetObjectCache(). The cache consists of 5 + lists for node-set, string, number, boolean and misc XPath + objects. Internally the xpath.c module will use object- + deposition and -acquisition functions which will try to reuse + as many XPath objects as possible, and fallback to normal + free/create behaviour if no cache is available or if the cache + is full. + * runsuite.c: Adjusted to deactivate the cache for XML Schema + tests if a cache-creation is turned on by default for the whole + library, e.g. for testing purposes of the cache. It is + deactivated here in order to avoid confusion of the memory leak + detection in runsuite.c. + +Wed May 24 10:54:25 CEST 2006 Kasimier Buchcik + + * xpath.c: Removed a memcpy if xmlXPathNodeSetMerge(); it + seems we really need to walk the whole list, since those + nastly namespace nodes need to be added with + xmlXPathNodeSetDupNs(); thus a pure memcpy is not possible. + A flag on the node-set indicating if namespace nodes are in + the set would help here; this is the 3rd flag which would + be usefull with node-sets. The current flags I have in mind: + 1) Is a node-set already sorted? + This would allow for rebust and optimizable sorting + behaviour. + 2) Of what type are the nodes in the set (or of mixed type)? + This would allow for faster merging of node-sets. + 3) Are namespace nodes in the set? + This would allow to skipp all the namespace node specific + special handling. Faster node-set merging if the first + set is empty; just memcpy the set. + +Mon May 22 17:14:00 CEST 2006 Kasimier Buchcik + + * xpath.c: Optimization of count(): eliminated sorting + (see bug #165547). Optimization of XPATH_OP_FILTER if the + predicate is a [1] (disable with XP_OPTIMIZED_FILTER_FIRST if + it produces trouble). Tiny opt in xmlXPathNodeSetMerge(). + +Mon May 22 13:33:12 CEST 2006 Rob Richards + + * tree.c: Revert behavior change in xmlSetProp to handle attributes + with colons in name and no namespace. + +Fri May 19 21:56:43 CEST 2006 Kasimier Buchcik + + * xpath.c: Substituted all remaining calls to xmlXPathCmpNodes() + for xmlXPathCmpNodesExt(). Tiny further enhancement of + xmlXPathCmpNodesExt(). Added additional checks in various code + parts to avoid calling sorting or merging functions if the + node-set(s) don't need them; i.e., if they are empty or contain + just one node. + +Fri May 19 13:16:58 CEST 2006 Kasimier Buchcik + + * xpath.c: Optimized the comparison for non-element nodes + in xmlXPathCmpNodesExt(); the comparison is used for sorting + of node-sets. This enhancement is related to bug #165547. + There are other places where the old comparison function + xmlXPathCmpNodes() is still called, but I currently don't + know exactly what those calls are for; thus if they can be + substituted (if it makes sense) for the new function. + +Tue May 16 16:55:13 CEST 2006 Kasimier Buchcik + + * xpath.c: Applied patch from Rob Richards, fixing a potential + memory leak in xmlXPathTryStreamCompile(), when a list of + namespaces was assigned to the XPath compilation context; + here a new namespace list was created and passed to + xmlPatterncompile(); but this list was not freed afterwards. + Additionally we avoid now in xmlXPathTryStreamCompile() to + compile the expression, if it has a colon - indicating + prefixed name tests - and no namespace list was given. The + streaming XPath mechanism needs a namespace list at + compilation time (unlike normal XPath, where we can bind + namespace names to prefixes at execution time). + * pattern.c: Enhanced to use a string dict for local-names, + ns-prefixes and and namespace-names. + Fixed xmlStreamPushInternal() not to use string-pointer + comparison if a dict is available; this won't work, since + one does not know it the given strings originate from the + same dict - and they normally don't do, since e.g. + namespaces are hold on xmlNs->href. I think this would be + worth an investigation: if we can add a @doc field to xmlNs + and put the @href in to a additionan namespace dict hold + in xmlDoc. Daniel will surely not like this idea :-) But + evaluation of tons of elements/attributes in namespaces + with xmlStrEqual() isn't the way we should go forever. + +Thu May 11 18:03:49 CEST 2006 Kasimier Buchcik + + * xmlschemas.c: Fixed bug #341337, reported by David Grohmann. + The code expected a node (xmlNodePtr) on the info for a + non-existent default attribute, which clearly cannot be + expected, since the attribute does not exist. I can only + guess that this sneaked trying to eliminate the query + for the owner-element, which is unavoidable actually. + Note that creation of default attributes won't have an + effect if validating via SAX/XMLReader; i.e., the processor + won't fire additional start-attribute events (I'm not even + sure if Libxml2 has such a SAX-event; I think it hands them + all over in the start-element event). + +Tue May 9 21:47:58 CEST 2006 Kasimier Buchcik + + * xmlschemas.c: Fixed bug #341150, reported by Michael Romer. + In xmlSchemaBuildContentModelForSubstGroup(), + xmlAutomataNewOnceTrans2() was incorrectly used instead of + xmlAutomataNewTransition2() to mimic a xs:choice for + substitution-groups. + * test/schemas/subst-group-1_1.xsd + test/schemas/subst-group-1_0.xml + result/schemas/subst-group-1_0_1 + result/schemas/subst-group-1_0_1.err: Added regression test + supplied by Michael Romer for bug #341150. + +Sat May 6 11:05:24 HKT 2006 William M. Brack + + * relaxng.c: Fixed compilation error with patch supplied by + Graham Bennett. + +Thu May 4 19:14:03 CEST 2006 Kasimier Buchcik + + * xmlschemas.c: We'll raise an internal error and stop + validation now when an entity is found in the instance + document, since we don't support automatic entity + substitution by the schema processor (yet?) - + see bug #340316, reported by Nick Wellnhofer. + +Wed May 3 15:16:00 CEST 2006 Daniel Veillard + + * configure.in: applied another Python detection patch from Joseph Sacco + * libxml.spec.in: cleanup the changelog section, asciifies the spec file + too + +Tue May 2 22:34:54 CEST 2006 Daniel Veillard + + * xmlIO.c: fix a mix of code and declarations showing up on Windows + patch from Kjartan Maraas, fixing #340404 + +Tue May 2 14:24:40 CEST 2006 Daniel Veillard + + * encoding.c: fixing bug #340398 xmlCharEncOutFunc writing to + input buffer + +Fri Apr 28 18:29:22 CEST 2006 Daniel Veillard + + * NEWS configure.in doc//*: preparing 2.6.24 release, fixed Python + paths at the last moment + * relaxng.c testapi.c tree.c: fix some comments + +Thu Apr 27 10:15:45 CEST 2006 Daniel Veillard + + * xmlIO.c: applied patch from Roland Schwingel to allow UTF-8 + file paths on Windows + +Thu Apr 27 10:10:58 CEST 2006 Daniel Veillard + + * xmlwriter.c: patch from Jason Viers for line breaks after EndPI + +Tue Apr 25 22:22:58 CEST 2006 Daniel Veillard + + * tree.c: fix compilation without tree + +Tue Apr 25 18:17:37 CEST 2006 Daniel Veillard + + * xmllint.c: applied patch from Gary Coady to really make sure + xmllint --nonet would not reach the network, should fix #337483. + +Tue Apr 25 14:52:15 CEST 2006 Daniel Veillard + + * configure.in: applied patch from Joseph Sacco changing slightly + the python detection scheme should fix bug #338526 + +Mon Apr 24 10:50:19 CEST 2006 Daniel Veillard + + * parser.c: fix the error message for invalid code point in content + c.f. bug #339311 + +Wed Apr 19 13:16:23 CEST 2006 Kasimier Buchcik + + * xmlschemas.c test/schemas/restriction-enum-1* + result/schemas/restriction-enum-1*: Fixed incorrect + validation of restricted enumerations. Added related + regression tests. + +Thu Apr 13 09:47:25 CEST 2006 Daniel Veillard + + * xmlschemas.c: fixing a deallocation problem in xmlSchemaAddSchemaDoc() + in case of errors, should fix bug #338303 + +Thu Apr 13 09:31:45 CEST 2006 Daniel Veillard + + * relaxng.c: fixing a deallocation problem in xmlRelaxNGParse() + in case of errors, should fix bug #338306 + +Thu Apr 6 10:22:17 CEST 2006 Daniel Veillard + + * doc/xmlcatalog.1 doc/xmlcatalog_man.xml doc/xmllint.1 doc/xmllint.xml: + applied man page improvements from Daniel Leidert + +Mon Mar 27 11:44:07 CEST 2006 Daniel Veillard + + * xmlschemas.c: removed unused code or variables, from Stefan Kost + fixing #336163 and #336164 + +Mon Mar 27 11:38:21 CEST 2006 Daniel Veillard + + * xmlschemas.c: applied patch from Stefan Kost fixing #336160 + +Mon Mar 27 11:23:39 CEST 2006 Daniel Veillard + + * chvalid.c genChRanges.py genUnicode.py xmlunicode.c + include/libxml/chvalid.h include/libxml/xmlunicode.h: applied + patches from Aivars Kalvans to make unicode tables const, fixes + bug #336096, this also updates to Unicode 4.01 final with a couple + of character ranges fixes. + +Mon Mar 27 00:51:40 CEST 2006 Daniel Veillard + + * chvalid.c genChRanges.py include/libxml/chvalid.h: fixed bug + #335603 and resync'ed genChRanges.py to the expected output. + +Wed Mar 22 00:14:34 CET 2006 Daniel Veillard + + * xmlregexp.c: applied patch from Youri Golovanov fixing bug + #316338 and adding a couple of optimizations in the regexp + compilation engine. + * test/regexp/bug316338 result/regexp/bug316338: added regression + tests based on the examples provided in the bug report. + +Fri Mar 10 08:40:55 EST 2006 Daniel Veillard + + * c14n.c encoding.c xmlschemas.c xpath.c xpointer.c: fix a few + warning raised by gcc-4.1 and latests changes + +Fri Mar 10 01:34:42 CET 2006 Daniel Veillard + + * runtest.c schematron.c testAutomata.c tree.c valid.c xinclude.c + xmlcatalog.c xmlreader.c xmlregexp.c xpath.c: end of first + pass on coverity reports. + +Thu Mar 9 19:36:14 CET 2006 Daniel Veillard + + * relaxng.c xmlschemas.c xmlschemastypes.c: more cleanups based + on coverity reports. + +Thu Mar 9 17:47:40 CET 2006 Daniel Veillard + + * SAX2.c catalog.c encoding.c entities.c example/gjobread.c + python/libxml.c: more cleanups based on coverity reports. + +Thu Mar 9 15:12:19 CET 2006 Daniel Veillard + + * HTMLparser.c parser.c parserInternals.c pattern.c uri.c: a bunch + of small cleanups based on coverity reports. + +Thu Mar 9 09:42:10 CET 2006 Daniel Veillard + + * win32/Makefile.bcb: added schematron as pointed out by Eric Zurcher + +Tue Mar 7 09:50:09 CET 2006 Daniel Veillard + + * xml2-config.in: fix Red Hat bug #184170 + +Mon Mar 6 14:21:08 CET 2006 Kasimier Buchcik + + * tree.c: Simplified usage of the internal xmlNsMap. Added a + "strict" lookup for namespaces based on a prefix. Fixed a + namespace processing issue in the clone-node function, which + occured if a @ctxt argument was given. + +Fri Mar 3 17:44:10 CET 2006 Rob Richards + + * valid.c: fix HTML attribute ID checking for input element. + Maintain current attribute "name" behavior for now. + +Thu Mar 2 18:59:50 CET 2006 Kasimier Buchcik + + * tree.c: Bundled lookup of attr-nodes and retrieving their + values into the functions xmlGetPropNodeInternal() and + xmlGetPropNodeValueInternal(). Changed relevant code + to use those functions. + +Mon Feb 27 20:42:04 CET 2006 Daniel Veillard + + * xpath.c: workaround HP-UX compiler bug by Rick Jones + +Mon Feb 27 10:57:05 CET 2006 Daniel Veillard + + * python/libxml2.py: remove a tab, as pointed out on IRC + +Sat Feb 25 18:12:10 CET 2006 Rob Richards + + * tree.c: Fix the add sibling functions when passing attributes. + Modify testing for ID in xmlSetProp. + No longer remove IDness when unlinking or replacing an attribute. + +Fri Feb 24 21:20:33 CET 2006 Daniel Veillard + + * catalog.c: Martin Cole pointed out a bug in xmlCatalogAdd() + if /etc/xml/catalog doesn't exist. + +Thu Feb 23 23:06:18 CET 2006 Daniel Veillard + + * doc//*: updated the Ruby bindings links, and regenerated the + docs. + +Thu Feb 23 09:12:27 CET 2006 Daniel Veillard + + * catalog.c: improve catalog debugging message patch from Rick Jones + +Wed Feb 22 16:09:10 CET 2006 Daniel Veillard + + * python/types.c: Nic Ferrier found debug statement left in the + XPath conversion code + +Tue Feb 21 20:23:14 CET 2006 Daniel Veillard + + * doc/xmllint.1 doc/xmllint.xml: small man page improvements from + Daniel Leidert + +Mon Feb 20 15:45:19 CET 2006 Kasimier Buchcik + + * xmlschemas.c: Fixed a side-effect of the previous XSI bugfix: + The constructor needs a bucket to be assigned during component + fixup. + +Mon Feb 20 14:32:36 CET 2006 Kasimier Buchcik + + * xmlschemas.c xmlschemastypes.c: Fixed xs:boolean to reject + the empty string (reported by Bas Driessen on the mailing-list). + Fixed schema XSI-acquisition and construction: the schemata + (xmlSchema) didn't get the targetNamespace in some cases, thus + the component resolution mechanism failed to work. The XSI + stuff needs to be tested more intensively; think about how + to test this for regression. + +Mon Feb 20 09:57:41 CET 2006 Daniel Veillard + + * doc/xmllint.1 doc/xmllint.xml: more man page improvements from + Daniel Leidert + +Sun Feb 19 22:31:33 CET 2006 Daniel Veillard + + * doc/xmllint.1 doc/xmllint.xml: man page improvements from Daniel + Leidert, c.f. #331290 + +Sun Feb 19 17:54:04 CET 2006 Daniel Veillard + + * xmllint.c: fix an error report when using --path and --valid + closes bug #331290 + +Sun Feb 19 16:20:43 CET 2006 Daniel Veillard + + * relaxng.c: trying to fix #331062, this is again a problem + around interleave, there is no good fix unless reimplementing + but this works around some cases and allow to validate in that + case. + +Wed Feb 15 11:55:22 CET 2006 Kasimier Buchcik + + * tree.c: Fixed bug #328896 reported by Liron. The path + for text- and CDATA-section-nodes was computed incorrectly + in xmlGetNodePath(). + +Sun Feb 12 20:12:22 CET 2006 Daniel Veillard + + * xmlregexp.c: bug fixes for #327167 as well as some cleanups + and more thorough tests on atoms comparisons. + +Thu Feb 9 10:07:20 CET 2006 Daniel Veillard + + * include/wsockcompat.h: patch from Eric Zurcher to compile with + Borland C++ 6 + +Sun Feb 5 04:03:59 CET 2006 Daniel Veillard + + * parser.c: bill pointed out a missing block in xmlParseComment + trying to fill with a normal processing of the given character. + +Sun Feb 5 03:41:39 CET 2006 Daniel Veillard + + * parser.c: fixed the comment streaming bug raised by Graham Bennett + * test/badcomment.xml result//badcomment.xml*: added to the regression + suite. + +Fri Feb 3 17:36:41 CET 2006 Kasimier Buchcik + + * include/libxml/tree.h: Added the xmlDOMWrapCloneNode() to + the header file. + +Fri Feb 3 17:29:22 CET 2006 Kasimier Buchcik + + * tree.c: Added an initial version of xmlDOMWrapCloneNode() to + the API. It will be used to reflect DOM's Node.cloneNode and + Document.importNode methods. + The pros: 1) non-recursive, 2) optimized ns-lookup + (mostly pointer comparison), 3) user defined ns-lookup, + 4) save ns-processing. The function is in an unfinished + and experimental state and should be only used to test it. + +Fri Feb 3 10:42:48 CET 2006 Daniel Veillard + + * uri.c: applied patch from Rob Richards fixing the URI regressions + tests on Windows which seems to indicate bad escaping. + +Thu Feb 2 13:11:26 CET 2006 Kasimier Buchcik + + * tree.c: Fixed some bugs xmlDOMWrapReconcileNamespaces() wrt + the previous addition of the removal of redundant ns-decls. + +Wed Feb 1 17:32:25 CET 2006 Kasimier Buchcik + + * tree.c: Enhanced xmlDOMWrapReconcileNamespaces() to remove + redundant ns-decls if the option XML_DOM_RECONNS_REMOVEREDUND + was given. Note that I haven't moved this option to the + header file yet; so just call this function with an @option + of 1 to test the behaviour. + +Wed Feb 1 12:21:08 CET 2006 Kasimier Buchcik + + * tapi.c win32/Makefile.*: Added changed as proposed on + the mailing list by venkat naidu in order to compile + testapi.c on windows. + +Thu Jan 19 09:57:28 CET 2006 Daniel Veillard + + * configure.in xml2-config.in: trying to fix windows/configure + issues reported by Tim Van Holder + +Wed Jan 18 18:21:15 CET 2006 Daniel Veillard + + * HTMLparser.c libxml.h parser.c: try to fix xmlParseInNodeContext + when operating on an HTML document. + +Mon Jan 9 17:27:15 CET 2006 Kasimier Buchcik + + * relaxng.c include/libxml/relaxng.h: Added + xmlRelaxNGSetParserStructuredErrors() to the API. + +Mon Jan 9 15:33:16 CET 2006 Daniel Veillard + + * parser.c: reverted first patches for #319279 which led to #326295 + and fixed the problem in xmlParseChunk() instead + * test/ent11 result//ent11*: added test for #326295 to the regression + suite + +Thu Jan 5 16:25:06 CET 2006 Daniel Veillard + + * NEWS configure.in libxml.spec.in testapi.c doc/*: upated the news + regenerated the docs, preparing for release of 2.6.23 + * pattern.c xmlschemas.c: fixed some comments + +Thu Jan 5 15:48:27 CET 2006 Kasimier Buchcik + + * test/XPath/docs/nodes test/XPath/tests/nodespat + result/XPath/tests/nodespat: Added regression tests for + the latest XPath/pattern fixes. + +Thu Jan 5 15:43:38 CET 2006 Kasimier Buchcik + + * pattern.c: Another fix to handle "foo//.": "foo" was not + included in the resulting node-set. + +Thu Jan 5 13:22:29 CET 2006 Kasimier Buchcik + + * pattern.c xpath.c include/libxml/pattern.h: + Fixed bug #322928, reported by Erich Schubert: The bug was + in pattern.c, which is used for a tiny subset of xpath + expression which can be evaluated in an optimized way. + The doc-node was never considered when evaluating "//" + expressions. Additionally, we fixed resolution + to nodes of any type in pattern.c; i.e. a "//." didn't work + yet, as it did select only element-nodes. Due to this + issue the pushing of nodes in xpath.c needed to be adjusted + as well. + +Wed Jan 4 18:07:47 CET 2006 Daniel Veillard + + * parser.c: tiny refactoring patch from Bjorn Reese + +Wed Jan 4 15:00:51 CET 2006 Daniel Veillard + + * SAX2.c: fix bug #324432 with + * test/ns7 resul//ns7*: added to the regression tests + +Wed Jan 4 10:53:56 CET 2006 Daniel Veillard + + * include/wsockcompat.h: applied patch from Mark Junker, fixing a + MinGW compilation problem, should close bug #324943 + +Tue Jan 3 11:49:54 CET 2006 Kasimier Buchcik + + * xmlschemas.c: Removed last dependency on the obsolete enum + xmlSchemaValidError. + +Mon Jan 2 11:20:00 CET 2006 Daniel Veillard + + * xmlreader.c include/libxml/xmlreader.h xmlschemas.c: compilation + and doc build fixes from Michael Day + +Wed Dec 28 22:12:34 CET 2005 Daniel Veillard + + * xmlregexp.c: bug in xmlRegExecPushString2() pointed out by + Sreeni Nair. + +Tue Dec 20 16:55:31 CET 2005 Rob Richards + + * tree.c: fix bug #322136 in xmlNodeBufGetContent when entity ref is + a child of an element (fix by Oleksandr Kononenko). + * HTMLtree.c include/libxml/HTMLtree.h: Add htmlDocDumpMemoryFormat. + +Tue Dec 20 11:43:06 CET 2005 Kasimier Buchcik + + * xmlschemas.c xmlstring.c: Fixed a segfault during + text concatenation when validating a node tree: + xmlStrncat was called with a @len of -1; but unlike + xmlStrncatNew, it does not calculate the length + automatically in such a case (reported by Judy Hay + on the mailing list). + Updated the descriptions of the involved string + functions to note this. + +Thu Dec 15 12:11:07 CET 2005 Daniel Veillard + + * nanohttp.c: applied patch from Gary Coady to accept gzipped + http resources. + +Wed Dec 14 18:41:26 CET 2005 Kasimier Buchcik + + * win32/configure.js: Added enable/disable of runtime + debugging (LIBXML_DEBUG_RUNTIME). + +Wed Dec 14 18:11:50 CET 2005 Kasimier Buchcik + + * include/libxml/xmlversion.h.in: Fixed to define + LIBXML_DEBUG_RUNTIME on the basis of @WITH_RUN_DEBUG@. + +Tue Dec 13 12:49:23 CET 2005 Kasimier Buchcik + + * test/schemas/bug321475* result/schemas/bug321475*: + Added regression test for bug #321475 (reported by + Gabor Nagy). Fixing of bug #323510 seemed to have + fixed this bug as well. + +Mon Dec 12 16:19:16 CET 2005 Kasimier Buchcik + + * test/schemas/bug323510* result/schemas/bug323510*: + Added regression test for bug #323510. + +Mon Dec 12 16:11:13 CET 2005 Kasimier Buchcik + + * xmlschemas.c: Workaround for bug #323510 (reported by + Jonathan Filiatrault): substituted the epsilon transition + for a labelled transition, in order to avoid a bug in + xmlregexp.c which eliminated the epsilon transition and + marked the initial state as final. + +Mon Dec 12 14:25:46 CET 2005 Daniel Veillard + + * xmlreader.c: Gary Coady pointed a memory leak in + xmlTextReaderReadInnerXml() applied patch fixing #323864 + +Sat Dec 10 12:08:28 CET 2005 Daniel Veillard + + * HTMLparser.c configure.in parserInternals.c runsuite.c runtest.c + testapi.c xmlschemas.c xmlschemastypes.c xmlstring.c: fixed a number + of warnings shown by HP-UX compiler and reported by Rick Jones + +Fri Dec 9 18:57:31 CET 2005 Rob Richards + + * xmlwriter.c: Insert space between pubid and sysid when both + passed to xmlTextWriterStartDTD and indenting not being used. + Remove no longer used Mem callbacks. + +Fri Dec 9 11:01:16 CET 2005 Kasimier Buchcik + + * runsuite.c: Changed to instantly mark instance-tests as + failed if the corresponding schema was invalid. This + reflects the side of the Python code for the XML Schema test + suite. We now get the same number of failed tests on both + sides. + +Wed Dec 7 14:59:01 CET 2005 Kasimier Buchcik + + * xmlreader.c include/libxml/xmlreader.h: Added + xmlTextReaderSchemaValidateCtxt() to the API. + +Wed Dec 7 12:59:56 CET 2005 Kasimier Buchcik + + * xmlschemas.c: Fixed a segfault: the instance document was + still tried to be validated, if the schema, dynamically + acquired using XSI was invalid, thus mangled. The + validation will stop (or rather won't validate) now in + such a case. The schema parser error code will be set + on the validion context now; this is somehow not nice, + but it assures that the validation context indicates an + error in there was a parser error. + +Tue Dec 6 18:57:23 CET 2005 Daniel Veillard + + * xmlreader.c: small doc patch from Aron Stansvik + * legacy.c: another doc patch for a deprecated API + +Mon Dec 5 16:23:49 CET 2005 Kasimier Buchcik + + * Makefile.am: Tiny change for 'make tests': raised + the number of expected failures for James Clark's + XML Schema datatype tests from 10 to 11. The additional + reported error was agreed to be correct long time ago, + but we missed to adjust the message reported by + the testing script. + +Fri Dec 2 13:51:14 CET 2005 Kasimier Buchcik + + * result/schemas/decimal* result/schemas/bug322411*: + Added missing regression test results for the latest IDC + and xs:decimal bugs. + +Wed Nov 30 12:22:23 CET 2005 Kasimier Buchcik + + * test/schemas/decimal* test/schemas/bug322411*: Added + regression tests for the latest IDC and xs:decimal bugs. + +Wed Nov 30 11:57:35 CET 2005 Kasimier Buchcik + + * xmlschemas.c: Fixed bubbling of duplicate IDC nodes: the + parent's list of duplicates was filled with NULLs instead + of the nodes under certain conditions. This lead to a + segfault when the list's entries were accessed. + +Mon Nov 28 17:28:53 CET 2005 Kasimier Buchcik + + * xmlschemastypes.c: Fixed parsing of xs:decimal to + allow/deny special lexical forms. Fixed the totalDigits + for values in the range (x < 1) && (x > -1) && (x != 0); + E.g "0.123" has now a totalDigits of 3 (was 4 previously). + Adjusted the comparison function for decimals due to this + change. As a side effect comparison against zeroes was + optimized. + +Mon Nov 28 13:25:11 CET 2005 Kasimier Buchcik + + * xmlschemas.c: An assignment to a local variable, which was + used to access the IDC node list, was missing after the + reallocation of the list (reported by Fabrice GUY + bug #322411). Renamed the define ENABLE_IDC_NODE_TABLES + to ENABLE_IDC_NODE_TABLES_TEST and *disabled* it, since + it is used to force bubbling of IDC node tables even + if not necessary; this was intended to be used for test + purposes, but I obviously missed to disable it (although + it apparently helped finding the bug). + +Wed Nov 23 17:34:52 CET 2005 Kasimier Buchcik + + * xmlschemas.c: In xmlSchemaAssembleByXSI() the return value + of xmlSchemaGetMetaAttrInfo() was not assigned to anything; + this caused XSI-driven-dynamic schema acquisition to fail + with @noNamespaceSchemaLocation (reported by Julien Lamy + on the mailing list). + +Tue Nov 22 18:31:34 CET 2005 Kasimier Buchcik + + * xmlschemas.c: Fixed a bug in xmlSchemaFindRedefCompInGraph() + which caused the search for components to stop at the + first encountered attribute group component. + Fixed error report in xmlSchemaCheckSRCRedefineFirst(): the + designation of a not-found component was not reported. + +Mon Nov 21 12:23:28 CET 2005 Daniel Veillard + + * xmlschemastypes.c: Albert Chin found another signed/unsigned problem + in the date and time code raised on IRIX 6.5 + +Fri Nov 18 18:13:38 CET 2005 Kasimier Buchcik + + * xmlschemas.c include/libxml/xmlschemas.h: + Added xmlSchemaSetParserStructuredErrors() to the API. + Fixed channeling of error relevant information to + subsequent parser/validation contexts. + +Thu Nov 17 14:11:43 CET 2005 Daniel Veillard + + * parserInternals.c: removed unreachable code pointed out by + Oleksandr Kononenko, fixes bug #321695 + +Thu Nov 17 08:24:31 CET 2005 Daniel Veillard + + * parser.c: use ctxt->standalone = -2 to indicate that the + XMLDecl was parsed but no standalone attribute was found, + suggested by Michael Day to detect if an XMLDecl was found. + +Tue Nov 15 09:49:24 CET 2005 Daniel Veillard + + * runtest.c: Hisashi Fujinaka pointed that errors in Schemas tests + were not properly reported. + +Sun Nov 13 13:42:41 CET 2005 Daniel Veillard + + * xmlIO.c: applied patch from Geert Jansen to remove xmlBufferClose() + which is not needed. + +Fri Nov 11 13:48:52 CET 2005 Kasimier Buchcik + + * xmlschemas.c: Changed xmlSchemaFormatIDCKeySequence() + to use xmlSchemaGetCanonValueWhtspExt() in order to + correctly report values for xs:anySimpleType. + * test/schemas/idc-keyref-err1* + result/schemas/idc-keyref-err1*: Added a test for this change. + +Wed Nov 9 13:07:24 EST 2005 Rob Richards + + * xmlIO.c xmlwriter.c: function consolidation when writing to xmlBuffer. + Return error condition not len if xmlwriter fails writing to buffer. + +Wed Nov 9 09:54:54 CET 2005 Daniel Veillard + + * xmlsave.c xmlIO.c include/libxml/xmlIO.h include/libxml/xmlsave.h: + applied patch from Geert Jansen to implement the save function to + a xmlBuffer, and a bit of cleanup. + +Mon Nov 7 14:58:39 CET 2005 Kasimier Buchcik + + * xmlschemas.c xmlschemastypes.c: Fixed the type of the + totalDigits value to be positiveInteger. + Fixed crash in an error report function when we gave it + the document node; only element and attribute nodes are + processed now (reported by Rob Richards). + +Tue Nov 1 16:22:29 CET 2005 Daniel Veillard + + * xmlregexp.c: fix bug #319897, problem with counted atoms + when the transition itself is counted too + * result/regexp/hard test/regexp/hard: augmented the regression + tests with the problem exposed. + +Tue Nov 1 11:54:39 CET 2005 Daniel Veillard + + * win32/Makefile.mingw include/win32config.h: applied patch from + Mark Junker to fix compilation with MinGW + +Fri Oct 28 18:36:08 CEST 2005 Daniel Veillard + + * libxml.3: tiny fix from Albert Chin + * runsuite.c runtest.c testapi.c: portability cleanup for arch + needing trio for *printf + +Fri Oct 28 12:21:39 EDT 2005 Rob Richards + + * tree.c: add additional checks to prevent tree corruption. fix problem + copying attribute using xmlDocCopyNode from one document to another. + +Fri Oct 28 17:58:13 CEST 2005 Daniel Veillard + + * config.h.in configure.in vms/config.vms macos/src/config-mac.h: + cleanup from Albert Chin + * doc/Makefile.am: html/index.sgml doesn't exist anymore + +Fri Oct 28 16:53:51 CEST 2005 Daniel Veillard + + * xmlIO.c xmlmodule.c: more portability patches from Albert Chin for + HP-UX and AIX + +Fri Oct 28 10:36:10 CEST 2005 Daniel Veillard + + * xmlmodule.c configure.in: applied 2 patches from Albert Chin for + module portability + +Fri Oct 28 10:24:39 CEST 2005 Daniel Veillard + + * error.c: fixing a portability problem on some old Unices with + patch from Albert Chin + +2005-10-27 Aleksey Sanin + + * c14n.c result/c14n/exc-without-comments/test-2 + test/c14n/exc-without-comments/test-2.xml + test/c14n/exc-without-comments/test-2.xpath: fixing + bug in exc-c14n namespace visibility + test case (bug #319367) + +Thu Oct 27 16:10:31 CEST 2005 Daniel Veillard + + * python/libxml.py: remove warnings to stdout patch from Nic Ferrier + +Thu Oct 27 13:54:52 CEST 2005 Daniel Veillard + + * valid.c xmlregexp.c include/libxml/valid.h + include/libxml/xmlregexp.h: avoid function parameters names 'list' + as this seems to give troubles with VC6 and stl as reported by + Samuel Diaz Garcia. + +Wed Oct 26 10:59:21 CEST 2005 Daniel Veillard + + * parserInternals.c: fix a problem in some error case on Solaris + when passed a NULL filename, pointed by Albert Chin. + +Tue Oct 25 14:34:58 CEST 2005 Daniel Veillard + + * HTMLparser.c: script HTML parser error fix, corrects bug #319715 + * result/HTML/53867* test/HTML/53867.html: added test from Michael Day + to the regression suite + +Tue Oct 25 14:21:11 CEST 2005 Daniel Veillard + + * HTMLparser.c: typo fix from Michael Day + +Mon Oct 24 20:16:23 EDT 2005 Rob Richards + + * tree.c: fix issue adding non-namespaced attributes in xmlAddChild(), + xmlAddNextSibling() and xmlAddPrevSibling() (bug #319108) - part 1. + +Sat Oct 22 10:00:41 HKT 2005 William Brack + + * parser.c: fixed second spot where CRLF split between chunks + could cause trouble (bug #319279) + * gentest.py, testapi.c: fixed two problems involved with + --with-minimum compilation (compilation errors with schematron + and formal expressions tests) + +Fri Oct 21 10:50:14 EDT 2005 Rob Richards + + * xmlsave.c: prevent output of fragment tags when serializing XHTML. + +Wed Oct 19 16:53:47 BST 2005 Daniel Veillard + + * xmlregexp.c: commiting a some fixes and debug done yesterday in + the London airport. + +Thu Oct 20 12:54:23 CEST 2005 Kasimier Buchcik + + * xmlschemas.c: Removed creation of a temporary parser context + during validation when processing xsi:type; this previously + added a string to the dict of the schema - to assure thread + safety, we don't want to modify a given schema during + validation. + +Thu Oct 20 17:05:29 HKT 2005 William Brack + + * xmlwriter.c: fixed problem in xmlTextWriterVSprintf caused by + misuse of vsnprintf + * configure.in, config.h.in: added a configuration check for + va_copy and added a define for VA_COPY for xmlwriter.c fix + * parser.c: fixed problem with CRLF split between chunks (bug + #319279) (fix provided by Brion Vibber) + +Wed Oct 19 18:49:52 CEST 2005 Kasimier Buchcik + + * xmlschemas.c: Fixed a potential memory leak in + xmlSchemaCheckCSelectorXPath() when an internal error occurs. + Fixed setting of ctxt->err to the given error code in + the parsing error functions. + * pattern.c: Added internal xmlCompileIDCXPathPath() as a + starting point for IDC XPath compilation; this and some other + tiny changes fixes issues regarding whitespace in the + expressions and IDC selector/field relevant restrictions of + the subset of XPath. Fixed a missing blocking of attributes + in xmlStreamPushInternal(). + +Mon Oct 17 15:06:05 EDT 2005 Daniel Veillard + + * runtest.c: removed the error message + * relaxng.c xmlschemas.c: removed 2 instability warnings from function + documentation + * include/libxml/schemasInternals.h: changed warning about API stability + * xmlregexp.c: trying to improve runtime execution of non-deterministic + regexps and automata. Not fully finished but should be way better. + +Mon Oct 17 16:12:02 CEST 2005 Kasimier Buchcik + + * xmlschemas.c: Fixed a memory leak in + xmlSchemaContentModelDump(). Added output of local types + in xmlSchemaElementDump(). Tiny cosmetical changes to the + dump output. + +Mon Oct 17 14:29:08 CEST 2005 Kasimier Buchcik + + * tree.c pattern.c: Silenced intel compiler warnings (reported + by Kjartan Maraas, bug #318517). + * xmlschemas.c: The above changes in pattern.c revealed an + inconsistency wrt IDCs: we now _only_ pop XPath states, if + we really pushed them beforehand; this was previously not + checked for the case when we discover an element node to be + invalid wrt the content model. + Fixed segfault in xmlSchemaGetEffectiveValueConstraint(). + +Fri Oct 14 16:40:18 CEST 2005 Kasimier Buchcik + + * result/schemas/*.err: Adapted regression test results. + +Fri Oct 14 16:21:22 CEST 2005 Kasimier Buchcik + + * xmlschemas.c: Fixed some identity-constraint issues: + Restructured IDC node-tables + Allowed IDCs to resolve also to nodes of complex type with + simple content. + Added check for keyrefs with references to keyrefs. + IDC target-nodes were interferring with IDC node-tables, + since they used one list of entries only. I separated this + one big list into 3 lists: 1 for IDC node-table entries, + 1 for _duplicates_ of IDC node-table entries and 1 for + IDC target-nodes. More code, but cleaner and it works at last. + Keyrefs will fail to resolve to duplicate key/unique entries. + I thought this was already working this way, but it didn't. + The wording of the definition for [node table] in the spec + can lead to a scenario, where keyrefs resolve perfectly, even + if the relevant key-sequences of the referenced key/unique have + duplicates in the subtree. Currently only Saxon 8.5.1 is + dissallowing resolution to duplicate entries correctly - we + will follow Saxon here. + Removed some intel compiler warnings (reported by + Kjartan Maraas, bug #318517). + * pattern.c: Fixed an IDC-XPath problem when resolving to + attributes. + +Mon Oct 14 01:15:14 CEST 2005 Rob Richards + * nanohttp.c include/wsockcompat.h: applied patch from Kolja Nowak + to use getaddrinfo() if supported in Windows build (bug# 317431). + +Mon Oct 10 15:33:48 CEST 2005 Kasimier Buchcik + + * result/schemas/*: Adapted regression test results. + +Mon Oct 10 15:12:43 CEST 2005 Kasimier Buchcik + + * xmlschemas.c include/libxml/schemasInternals.h + include/libxml/xmlerror.h: Initial implementation for + redefinitions; this still misses checks for restrictions + of the content model of complex types. + Fixed default/fixed values for attributes (looks like they + did not work in the last releases). + Completed constraints for attribute uses. + Seperated attribute derivation from attribute constraints. + Completed constraints for attribute group definitions. + Disallowing s of schemas in no target namespace if the + importing schema is a chameleon schema. This contradicts + the way Saxon, Xerces-J, XSV and IBM's SQC works, but the + W3C XML Schema WG, thinks it is correct to dissalow such + imports. + Added cos-all-limited constraints. + Restructured reference resolution to model groups and element + declarations. + Misc cleanup. + +Fri Oct 7 04:34:12 CEST 2005 Rob Richards + + * schematron.c xmlregexp.c: remove warnings under Windows. + +Wed Sep 28 23:42:14 CEST 2005 Daniel Veillard + + * parser.c: applied patch from Massimo Morara fixing bug #317447 + about risk of invalid write in xmlStringLenDecodeEntities + +Tue Sep 27 11:20:57 CEST 2005 Daniel Veillard + + * error.c: Adrian Mouat pointed out redundancies in xmlReportError() + +Mon Sep 26 19:18:24 CEST 2005 Daniel Veillard + + * xmlregexp.c: seems a test to avoid duplicate transition is + really needed at all times. Luka Por gave an example hitting + this. Changed back the internal API. + +Thu Sep 22 13:14:07 CEST 2005 Daniel Veillard + + * xmlreader.c: fixing leak in xmlTextReaderReadString() #316924 + +Thu Sep 15 16:12:44 CEST 2005 Daniel Veillard + + * uri.c: more fixes to the behaviour of xmlBuildRelativeURI + +Thu Sep 15 15:08:21 CEST 2005 Daniel Veillard + + * xmlregexp.c: detect combinatory explosion and return with + a runtime error in those case, c.f. #316338 though maybe we + should not see such an explosion with that specific regexp, + more checking needs to be done. + +Wed Sep 14 19:52:18 CEST 2005 Kasimier Buchcik + + * include/libxml/schemasInternals.h: Added some comments for the + struct fields. + +Wed Sep 14 13:24:27 HKT 2005 William Brack + + * uri.c: fixed problem when xmlBuildRelativeURI was given a + blank path (bug 316224) + +Mon Sep 12 23:41:40 CEST 2005 Daniel Veillard + + * NEWS configure.in doc//*: release of 2.6.22 updated doc and + rebuild. + * xmlsave.c include/libxml/xmlsave.h: added XML_SAVE_NO_XHTML + xmlSaveOption + * xmlschemas.c: minor cleanups + +Mon Sep 12 21:42:47 CEST 2005 Kasimier Buchcik + + * test/schemas/import1_0.xsd: And adapting another one. + +Mon Sep 12 21:29:35 CEST 2005 Kasimier Buchcik + + * result/schemas/derivation-ok-extension_0_0: Adapted result. + +Mon Sep 12 21:20:41 CEST 2005 Kasimier Buchcik + + * result/schemas/allsg_0_3.err result/schemas/allsg_0_4.err + result/schemas/changelog093_1_0.err + result/schemas/derivation-ok-extension_0_0.err + result/schemas/import1_0_0.err + result/schemas/derivation-ok-restriction-2-1-1_0_0.err: + Adapted regression results. + +Mon Sep 12 21:00:53 CEST 2005 Kasimier Buchcik + + * xmlschemas.c include/libxml/schemasInternals.h + include/libxml/xmlerror.h: Completion of the schema graph. + Centralisation, more robustness of the schema document + aquisition story. Centralised and restructured component fixup. + Fixed attribute derivation when 'prohibiting' attribute uses. + Added warnings: when schema documents cannot be localized + during imports; when we get duplicate and pointless attribute + prohibitions. Changed error reports for IDCs to report + the relevant IDC designation as well (requested by GUY Fabrice). + Misc code-cleanup. + +Mon Sep 12 16:02:12 CEST 2005 Daniel Veillard + + * xmlsave.c: applied second patch from David Madore to be less intrusive + when handling scripts and style elements in XHTML1 should fix #316041 + * test/xhtml1 result//xhtml1\*: updated the test accordingly + +Mon Sep 12 15:09:09 CEST 2005 Daniel Veillard + + * libxml.spec.in doc/devhelp/*: finished the integration with + devhelp, completing the index and inserted into the gtk-doc + database at "make install" stage + +Mon Sep 12 14:14:12 CEST 2005 Rob Richards + + * include/libxml/xmlsave.h xmlsave.c: add XML_SAVE_NO_EMPTY save option + and use option from xmlSaveCtxtPtr rather than global during output. + * xmlsave.c: fix some output formatting for meta element under XHTML. + +Mon Sep 12 11:12:03 CEST 2005 Daniel Veillard + + * include/libxml/parser.h parser.c xmllint.c: damn XML_FEATURE_UNICODE + clashes with Expat headers rename to XML_WITH_ to fix bug #316053. + * doc/Makefile.am: build devhelp before the examples. + * doc/*: regenerated the API + +Mon Sep 12 02:03:12 CEST 2005 Daniel Veillard + + * xmlsave.c: fix bug #316034, where xmlElemDump() can crash if + given a document pointer instead of an element + +Mon Sep 12 01:26:16 CEST 2005 Daniel Veillard + + * doc/devhelp/devhelp.xsl: improvements on the html generation, + should be complete with navigation, what is left done is glueing + +Mon Sep 12 00:03:27 CEST 2005 Daniel Veillard + + * configure.in doc/Makefile.am doc/apibuild.py doc/libxml2-api.xml + doc/devhelp/*: started work needed to generate devhelp content, + not too hard based on the existing format and extractor. + +Fri Sep 9 12:56:19 CEST 2005 Daniel Veillard + + * parser.c: fixes bug #315617 when using push CDATA in some cases. + +Thu Sep 8 23:39:41 CEST 2005 Daniel Veillard + + * xmllint.c: patch from Stéphane Bidoul to compile without schematron + +Wed Sep 7 00:16:27 CEST 2005 Daniel Veillard + + * debugXML.c: patch from Oleg Paraschenko to fix xmlDebugDumpNode() + when handled a namespace node. + +Sun Sep 4 23:36:45 CEST 2005 Daniel Veillard + + * NEWS elfgcchack.h testapi.c doc/*: updated the docs and rebuild + releasing 2.6.21 + * include/libxml/threads.h threads.c: removed xmlIsThreadsEnabled() + * threads.c include/libxml/threads.h xmllint.c: added the more + generic xmlHasFeature() as suggested by Bjorn Reese, xmllint uses it. + +Sun Sep 4 22:45:49 CEST 2005 Daniel Veillard + + * configure.in doc/* configure.in: prepare for release + * xpath.c: work for #303289, fix a formatting bug for MIN_INT + +Sun Sep 4 15:48:57 CEST 2005 Daniel Veillard + + * relaxng.c: real fix for #314881 and #314759 is was a bit more complex + than initially expected as ctxt->error == NULL had behaviour side + effects at the compilation level itself. + +Sun Sep 4 14:01:00 CEST 2005 Daniel Veillard + + * pattern.c xpath.c include/libxml/pattern.h: fixing yet another + pattern induced XPath bug #314282 + * relaxng.c: reverted back last change it was seriously broken + +Sat Sep 3 16:51:55 CEST 2005 Rob Richards + + * xmlsave.c: check for NULL to prevent crash with meta elements + +Sat Sep 3 16:26:55 CEST 2005 Daniel Veillard + + * relaxng.c: structured error reporting problem with Relax-NG + should fix #314881 and #314759 + +Sat Sep 3 15:42:29 CEST 2005 Daniel Veillard + + * pattern.c: fixes a portability problem raised by C370 on Z/OS + +Sat Sep 3 15:26:31 CEST 2005 Daniel Veillard + + * SAX2.c tree.c valid.c: fixing a number of issues raised by xml:id + but more generally related to attributes and ID handling, fixes + #314358 among other things + +Fri Sep 2 14:26:43 CEST 2005 Daniel Veillard + + * encoding.c parserInternals.c: avoid passing a char[] as snprintf + first argument. + * threads.c include/libxml/threads.h: implemented xmlIsThreadsEnabled() + based on Andrew W. Nosenko idea. + * doc/* elfgcchack.h: regenerated the API + +Thu Sep 1 14:44:42 CEST 2005 Daniel Veillard + + * configure.in: the use of AM_PATH_PYTHON is not portable enough + reverting back to AM_PATH_PROG + +Thu Sep 1 11:42:39 CEST 2005 Daniel Veillard + + * HTMLparser.c: Applied the last patch from Gary Coady for #304637 + changing the behaviour when text nodes are found in body + * result/HTML/*: this changes the output of some tests + +Thu Sep 1 11:22:37 CEST 2005 Daniel Veillard + + * doc/downloads.html doc/xml.html: adding reference to Bull AIX rpms + c.f. #160598 + +Wed Aug 31 11:39:02 CEST 2005 Daniel Veillard + + * xml2-config.in: removed the obsolete --libtool-libs option, c.f. + bug #314853 + +Fri Aug 26 17:33:26 CEST 2005 Rob Richards + + * xmlsave.c: move handling of meta element for http-equiv in XHTML docs + to serialization and no longer modify internal tree. + +Fri Aug 26 00:51:58 CEST 2005 Daniel Veillard + + * libxml.spec.in: the profiling usually don't work, disabled + * doc/*: rebuilt + +Thu Aug 25 23:47:55 CEST 2005 Daniel Veillard + + * configure.in: trying to fix the first part of #310033 by + detecting gcc <= 3.2 + +Thu Aug 25 22:13:37 CEST 2005 Daniel Veillard + + * error.c: fixed bug #310033, the URI extraction code given a + node is a bit twisted and broke in the last months. + +Thu Aug 25 16:18:15 CEST 2005 Daniel Veillard + + * debugXML.c result/XPath/xptr/strrange2: uninitialized field and + fix on test. + +Thu Aug 25 16:03:05 CEST 2005 Daniel Veillard + + * debugXML.c: change verbosity depending on API + * result/XPath/tests/* result/XPath/xptr/* result/xmlid/*: get back + to previous outputs + +Thu Aug 25 15:14:56 CEST 2005 Daniel Veillard + + * HTMLparser.c parser.c SAX2.c debugXML.c tree.c valid.c xmlreader.c + xmllint.c include/libxml/HTMLparser.h include/libxml/parser.h: + added a parser XML_PARSE_COMPACT option to allocate small + text nodes (less than 8 bytes on 32bits, less than 16bytes on 64bits) + directly within the node, various changes to cope with this. + * result/XPath/tests/* result/XPath/xptr/* result/xmlid/*: this + slightly change the output + +Thu Aug 25 12:16:26 CEST 2005 Daniel Veillard + + * configure.in: patch from Andrew W. Nosenko, use se $GCC = 'yes' + instead of $CC = 'gcc' because GCC may have a different name + +Thu Aug 25 00:18:20 CEST 2005 Daniel Veillard + + * configure.in: changes the way the python binary is found, should + also fix bug #308004 + +Wed Aug 24 16:44:41 CEST 2005 Daniel Veillard + + * parser.c: found another bug while looking at #309616 on missing + entities. + * result/ent2.sax* result/ent7.sax* result/xml2.sax*: this changed the + SAX stream in missing conditions for a few tests + +Wed Aug 24 16:19:00 CEST 2005 Daniel Veillard + + * encoding.c: applied the patch suggested #309565 which can avoid + looping in error conditions. + +Wed Aug 24 16:04:17 CEST 2005 Daniel Veillard + + * SAX2.c tree.c: line numbers are now carried by most nodes, fixing + xmlGetLineNo() c.f. bug #309205 + +Wed Aug 24 14:43:34 CEST 2005 Daniel Veillard + + * encoding.c error.c include/libxml/xmlerror.h: finally converted + the encoding module to the common error reporting mechanism + * doc/* doc/html/libxml-xmlerror.html: rebuilt + +Wed Aug 24 11:35:26 CEST 2005 Daniel Veillard + + * xpath.c: removed a potentially uninitialized variable error + * python/generator.py: fixed a deprecation warning + * python/tests/tstLastError.py: silent the damn test when Okay ! + +Wed Aug 24 00:11:16 CEST 2005 Daniel Veillard + + * SAX2.c globals.c runtest.c testC14N.c testapi.c tree.c + include/libxml/SAX2.h include/libxml/xmlregexp.h: fixed compilation + when configured --without-sax1 and other cleanups fixes bug #172683 + * doc/* elfgcchack.h: regenerated + +Tue Aug 23 20:05:05 CEST 2005 Daniel Veillard + + * parser.c: fixed bug #170489 reported by Jirka Kosek + * test/valid/objednavka.xml test/valid/dtds/objednavka.dtd + result/valid/objednavka*: added the test to the regression suite. + +Tue Aug 23 18:04:08 CEST 2005 Daniel Veillard + + * HTMLparser.c include/libxml/HTMLparser.h: added a recovery mode + for the HTML parser based on the suggestions of bug #169834 by + Paul Loberg + +Tue Aug 23 15:38:46 CEST 2005 Daniel Veillard + + * elfgcchack.h testapi.c doc/*: regenerated + * schematron.c: fixed a compilation problem + * xmlregexp.c include/libxml/xmlregexp.h: some cleanups and one bug fix + * result/expr/base: slightly changes the number of Cons. + +Mon Aug 22 23:19:50 CEST 2005 Daniel Veillard + + * elfgcchack.h testapi.c doc/*: rescanned code and rebuilt + * xmlregexp.c: small cleanup + * include/libxml/schematron.h include/libxml/xmlexports.h + include/libxml/xmlversion.h.in: cleanup problems from code scanner + +Mon Aug 22 18:00:18 CEST 2005 Daniel Veillard + + * xmlschemastypes.c: applied patch from Kuba Nowakowski fixing bug + #313982 + * result/schemas/bug313982* test/schemas/bug313982*: also added + the test case to the regression suite. + +Mon Aug 22 17:50:20 CEST 2005 Daniel Veillard + + * testRegexp.c: printed the wrong string + +Mon Aug 22 16:42:07 CEST 2005 Daniel Veillard + + * testRegexp.c xmlregexp.c include/libxml/xmlregexp.h: exported + xmlExpExpDerive(), added it to the testRegexp command line + tool when providing multiple expressions. + +Mon Aug 22 14:57:13 CEST 2005 Daniel Veillard + + * Makefile.am result/expr/base test/expr/base: added the first + regression test suite set for the new expression support + +Mon Aug 22 13:49:18 CEST 2005 Daniel Veillard + + * valid.c: fixed an uninitialized variable + * xmlregexp.c include/libxml/xmlregexp.h: extended the API to + add the parser, serializer and some debugging + * include/libxml/xmlversion.h.in: made the new support compiled + by default if Schemas is included + * testRegexp.c: cleanup and integration of the first part of the + new code with a special switch + * xmllint.c: show up Expr in --version if compiled in + * include/libxml/tree.h: moved the xmlBuffer definition up + +Mon Aug 22 12:11:10 CEST 2005 Kasimier Buchcik + + * xmlschemas.c: Some preparation for the creation of a graph + of imported/included/redefined schemas; this is needed for + at least the redefinitions. + Centralized the creation of the parser context in one function. + +Mon Aug 22 02:19:33 CEST 2005 Daniel Veillard + + * xmlregexp.c include/libxml/xmlregexp.h: pushing the formal expression + handling code to have it in CVs from now. Not plugged, and misses + APIs it's not compiled in yet. + +Sat Aug 20 23:13:27 CEST 2005 Daniel Veillard + + * xmlreader.c: applied another patch from Rob Richards to fix + xmlTextReaderGetAttributeNs and xmlTextReaderMoveToAttributeNs + +Wed Aug 17 09:06:33 CEST 2005 Daniel Veillard + + * xmlreader.c: applied patch from Rob Richards to fix + xmlTextReaderGetAttribute behaviour with namespace declarations + +Fri Aug 12 14:12:56 CEST 2005 Kasimier Buchcik + + * xmlschemas.c include/libxml/xmlerror.h: + Changed output for keyref-match errors; the target-node will + be now reported rather than the scope-node of the keyref + definition - allowing easier chasing of instance errors. + This was reported by Guy Fabrice to the mailing list. + Some initial parsing code for schema redefinitions. + * result/schemas/bug303566_1_1.err + result/schemas/bug312957_1_0.err: Adapted test results due + to the keyref changes. + +Fri Aug 12 12:17:52 CEST 2005 Daniel Veillard + + * valid.c: applied patch from Derek Poon fixing bug #310692 + +Wed Aug 10 23:39:02 CEST 2005 Daniel Veillard + + * xmlschemas.c: fix for bug #312945 as pointed by Dean Hill, the + context type was not always properly initialized. + +Wed Aug 10 18:21:41 CEST 2005 Daniel Veillard + + * relaxng.c: fixed bug #307377 about validation of choices in + list values. + * test/relaxng/307377* result/relaxng/307377* Makefile.am runtest.c: + added examples to the regression tests, problem is that streaming + version gives slightly more informations. + +Wed Aug 10 15:25:53 CEST 2005 Daniel Veillard + + * xinclude.c: fixed bug #302302, nasty but the fix is rather simple. + +Wed Aug 10 11:59:46 CEST 2005 Kasimier Buchcik + + * result/schemas/any6_1_0*: Added missing test results. + +Tue Aug 9 23:37:22 CEST 2005 Daniel Veillard + + * xmlregexp.c: fixed a determinism detection problem exposed by + ##other tests commited by Kasimier, also added a small speedup + of determinism detection. + * test/results/any6_2_0* any8_1_0* any7_1_2* any7_2_2*: added + the results to the regression tests now + +Tue Aug 9 15:54:09 CEST 2005 Kasimier Buchcik + + * test/schemas/any7_2.xml test/schemas/any6_2.xsd + test/schemas/any8_1.xsd test/schemas/any8_0.xml: + Added some more tests for element wildcards. + +Tue Aug 9 14:22:47 CEST 2005 Kasimier Buchcik + + * xmlschemas.c: Fixed #312957 reported by Carol Hunter: + streaming XPath states were not popped in every case, + thus failed to resolve correctly for subsequent input. + * test/schemas/bug312957* result/schemas/bug312957*: + Added the test submitted by Carol Hunter. + +Tue Aug 9 13:07:27 CEST 2005 Daniel Veillard + + * xmlregexp.c xmlschemas.c: trying to nail down the remaining + ##other issues + * result/schemas/any7* test/schemas/any7: completed the tests + and added the results + * result/schemas/any3_0_0.err result/schemas/any5_0_0.err + result/schemas/any5_1_0.err: this slightly chnages the output + from 3 existing tests + +Mon Aug 8 22:33:08 CEST 2005 Daniel Veillard + + * nanoftp.c nanohttp.c xmlschemastypes.c: applied patch from + Marcus Boerger to remove warnings on Windows. + +Mon Aug 8 16:43:04 CEST 2005 Daniel Veillard + + * xmlsave.c include/libxml/xmlsave.h: fixed #145092 by adding + an xmlSaveOption to omit XML declaration + +Mon Aug 8 15:44:54 CEST 2005 Daniel Veillard + + * HTMLtree.c: fixed bug #310333 with a patch close to the provided + patch for HTML UTF-8 serialization + * result/HTML/script2.html: this changed the output of that test + +Mon Aug 8 15:01:51 CEST 2005 Daniel Veillard + + * xmlregexp.c: fixed bug #310264, basically it's about reentrancy + of count based transition, when going though the counter must + be reset to 0 + * test/schemas/bug310264* result/schemas/bug310264*: added the + regression test. + +Mon Aug 8 14:40:52 CEST 2005 Kasimier Buchcik + + * xmlschemas.c: Fixed a memory leak: xmlSchemaFreeAnnot() was + only freeing the first annotation in the list. + +Mon Aug 8 09:44:34 CEST 2005 Daniel Veillard + + * xmlreader.c: applied patch from Rob Richards fixing + xmlTextReaderGetAttribute + +Mon Aug 8 01:41:53 CEST 2005 Daniel Veillard + + * HTMLparser.c: fixed an uninitialized memory access spotted by + valgrind + +Sun Aug 7 12:39:35 CEST 2005 Daniel Veillard + + * test/relaxng/docbook_0.xml: get rid of the dependancy on a locally + installed DTD + * uri.c include/libxml/uri.h xmlIO.c nanoftp.c nanohttp.c: try to + cleanup the Path/URI conversion mess, needed fixing in various + layers and a new API to the uri module which also fixes #306861 + * runtest.c: integrated a regression test specific to check the + URI conversions done before calling the I/O handlers. + +Sat Aug 6 11:06:24 CEST 2005 Daniel Veillard + + * doc/XSLT.html doc/xml.html: small doc fix for #312647 + +Tue Aug 2 13:26:42 CEST 2005 Daniel Veillard + + * win32/configure.js: applied patch from Rob Richards to allow + disabling modules in win32, fixes #304071 + +Mon Aug 1 07:18:53 CEST 2005 Daniel Veillard + + * python/libxml.c: applied fix from Jakub Piotr Clapa for + xmlAttr.parent(), closing #312181 + +Sun Jul 31 18:48:55 CEST 2005 Daniel Veillard + + * schematron.c: report improvement + * test/schematron/zvon* result/schematron/zvon*: more tests + +Sun Jul 31 16:02:59 CEST 2005 Daniel Veillard + + * win32/Makefile.msvc win32/configure.js: applied patch from Rob + Richards to add schematron to the build on Windows + * test/schematron/zvon3* result/schematron/zvon3*: second test + * test/schematron/zvon10* result/schematron/zvon10*: this is the + real second test 10 and 2 are swapped. + +Sun Jul 31 15:42:31 CEST 2005 Daniel Veillard + + * schematron.c: more bug fixes, improve the error reporting. + * test/schematron/zvon2* result/schematron/zvon2*: second test + +Sun Jul 31 14:15:31 CEST 2005 Daniel Veillard + + * schematron.c xmllint.c: fixing the loop bug, fixing schematron + text error rendering + * Makefile.am result/schematron/* test/schematron/zvon1*.sct: + started integrating within "make tests" + +Sat Jul 30 17:26:58 EDT 2005 Daniel Veillard + + * test/schematron/*: a few first tests from Zvon unfortunately + with the old syntax + +Sat Jul 30 17:08:07 EDT 2005 Daniel Veillard + + * schematron.c xmllint.c include/libxml/schematron.h: commiting + work done on the plane last week-end + +Sat Jul 30 15:16:29 CEST 2005 Daniel Veillard + + * runtest.c: allows an extra argument to subset the tests + * xmlregexp.c: big speedup for validation, basically avoided + transition creation explosion when removing epsilon transition + +Sat Jul 30 00:00:46 CEST 2005 Daniel Veillard + + * Makefile.am globals.c parserInternals.c xmlreader.c xmlunicode.c + xmlwriter.c: more cleanups based on sparse reports, added + "make sparse" + +Fri Jul 29 12:11:25 CEST 2005 Daniel Veillard + + * python/libxml.c: don't output any message on failed resolver lookups, + better done by the python user provided resolver layer. + +Fri Jul 29 01:48:02 CEST 2005 Daniel Veillard + + * HTMLparser.c SAX2.c encoding.c globals.c parser.c relaxng.c + runsuite.c runtest.c schematron.c testHTML.c testReader.c + testRegexp.c testSAX.c testThreads.c valid.c xinclude.c xmlIO.c + xmllint.c xmlmodule.c xmlschemas.c xpath.c xpointer.c: a lot of + small cleanups based on Linus' sparse check output. + +Thu Jul 28 21:28:33 CEST 2005 Daniel Veillard + + * include/libxml/Makefile.am: added schematron.h, oops ... + +Thu Jul 28 02:38:21 CEST 2005 Kasimier Buchcik + + * xmlschemastypes.c: Added creation of the content type of + xs:anyType. This is needed when trying to extend xs:anyType + (although it makes no sense to extend it; IMHO the schema + people should have ruled this out). This was reported + by Yong Chen to the mailing list. + * xmlschemas.c: Fixed handling of xs:anyType in + xmlSchemaCheckCOSCTExtends() (reported by Young Chen). Tiny + adjustment to an error report output. + * test/schemas/extension2* result/schemas/extension2*: + Added a test case provided by Young Chen. + +Mon Jul 25 11:41:18 PDT 2005 William Brack + + * uri.c: enhanced xmlBuildRelativeURI to allow the URI and the + base to be in "relative" form + +Sun Jul 24 10:25:41 EDT 2005 Daniel Veillard + + * schematron.c xmllint.c: started adding schematron to the xmllint + tool, the report infrastructure is gonna be fun. + +Sat Jul 23 23:23:51 CEST 2005 Kasimier Buchcik + + * test/schemas/any6* test/schemas/any7*: Added regression tests + (they fail currently), but did not added results yet. + +Sat Jul 23 23:07:05 CEST 2005 Kasimier Buchcik + + * xmlschemas.c: Removed the workaround code in + xmlSchemaValidateElemWildcard() for the wildcard + with namespace == ##other. Support for such wildcards was + implemented by Daniel at the automaton level recently, and + the workaround code iterfered with it. + +Sat Jul 23 10:55:50 EDT 2005 Daniel Veillard + + * pattern.c include/libxml/pattern.h: changed xmlPatterncompile + signature to pass an int and not an enum since it can generate + ABI compat troubles. + * include/libxml/schematron.h schematron.c: adding the new + schematron code, work in progress lots to be left and needing + testing + * include/libxml/xmlversion.h.in include/libxml/xmlwin32version.h.in + Makefile.am configure.in: integration of schematron into the + build + * xpath.c include/libxml/xpath.h: adding flags to control compilation + options right now just XML_XPATH_CHECKNS. + +Sat Jul 23 16:39:35 CEST 2005 Kasimier Buchcik + + * xmlschemas.c: Removed an "internal error" message from + xmlSchemaBuildAContentModel() when an empty model group + definition is hit. + +Sat Jul 23 00:34:07 CEST 2005 Kasimier Buchcik + + * pattern.c: Changed xmlCompileStepPattern() and + xmlCompileAttributeTest() to handle the "xml" prefix without + caring if the XML namespace was supplied by the user. + +Fri Jul 22 00:08:43 CEST 2005 Kasimier Buchcik + + * xmlschemas.c: Fixed xmlSchemaPSimpleTypeErr(), which did not + output the given string arguments correctly. + +Thu Jul 21 09:21:00 EDT 2005 Daniel Veillard + + * error.c globals.c parser.c runtest.c testHTML.c testSAX.c + threads.c valid.c xmllint.c xmlreader.c xmlschemas.c xmlstring.c + xmlwriter.c include/libxml/parser.h include/libxml/relaxng.h + include/libxml/valid.h include/libxml/xmlIO.h + include/libxml/xmlerror.h include/libxml/xmlexports.h + include/libxml/xmlschemas.h: applied a patch from Marcus Boerger + to fix problems with calling conventions on Windows this should + fix #309757 + +Wed Jul 20 14:45:39 CEST 2005 Daniel Veillard + + * parser.c: an optimization of the char data inner loop, + can gain up to 10% in pure SAX2 parsing speed + * xmlschemas.c: applied patch from Kupriyanov Anatolij fixing + a bug in XML Schemas facet comparison #310893 + +Tue Jul 19 17:27:26 CEST 2005 Daniel Veillard + + * xmlregexp.c xmlschemas.c: fixed the error reporting for + not transitions + * result/schemas/any5_0_0* result/schemas/any5_0_2* + result/schemas/any5_1_0*: fixed output + +Tue Jul 19 15:34:12 CEST 2005 Daniel Veillard + + * xmlregexp.c xmlschemas.c include/libxml/xmlautomata.h: fixing + bug #172215 about foreign namespaces by adding support for + negated string transitions. Error messages still need to be + improved. + * test/schemas/any5* result/schemas/any5*: adding regression + tests for this. + +Tue Jul 19 12:33:31 CEST 2005 Daniel Veillard + + * tree.c: applied patch from Alexander Pohoyda fixing xmlGetNodePath + on namespaced attributes #310417. + +Mon Jul 18 23:01:15 CEST 2005 Daniel Veillard + + * doc/xmllint.1 doc/xmllint.html doc/xmllint.xml: --nonet was + ducplicated + +Mon Jul 18 20:49:28 CEST 2005 Daniel Veillard + + * xmlschemas.c: fixed xsd:all when used in conjunction with + substitution groups + * test/schemas/allsg_* result/schemas/allsg_*: adding specific + regression tests, strangely missing from NIST/Sun/Microsoft + testsuites + +Sun Jul 17 07:11:27 CEST 2005 Daniel Veillard + + * xmlschemas.c: fixed bug #307508, a bad automata was built but + this showed as an indeterminist result + +Thu Jul 14 17:53:02 CEST 2005 Daniel Veillard + + * xmlschemastypes.c: found the last bug raised by NIST tests in + comparing base64 strings, result from runsuite: + ## NIST test suite for Schemas version NIST2004-01-14 + Ran 23170 tests (3953 schemata), no errors + +Thu Jul 14 14:57:36 CEST 2005 Daniel Veillard + + * testRegexp.c: fixed where xmlMemoryDump() should be called. + * xmlregexp.c: fixed handling of {0}, \n, \r and \t, two bugs + affecting NIST regression tests + +Thu Jul 14 11:30:24 CEST 2005 Daniel Veillard + + * configure.in: applied a patch from Gerrit P. Haase to add + module support on cygwin + +Thu Jul 14 10:56:42 CEST 2005 Daniel Veillard + + * HTMLparser.c: fixed a potential buffer overrun error introduced + on last commit to htmlParseScript() c.f. #310229 + +Thu Jul 14 23:48:17 PDT 2005 William Brack + + * xpath.c: Changed the behaviour of xmlXPathEqualNodeSetFloat to + return TRUE if a nodeset with a numeric value of NaN is compared + for inequality with any numeric value (bug 309914). + +Thu Jul 14 01:03:03 CEST 2005 Daniel Veillard + + * error.c relaxng.c xmlreader.c xmlschemas.c include/libxml/relaxng.h + include/libxml/xmlschemas.h: applied patch from Marcus Boerger + to route relaxng and schemas error messages when using the reader + through the structured interface if activated. + * elfgcchack.h doc/* testapi.c: rebuilt since this add new APIs + to test. + +Wed Jul 13 18:35:47 CEST 2005 Daniel Veillard + + * HTMLparser.c: applied UTF-8 script parsing bug #310229 fix from + Jiri Netolicky + * result/HTML/script2.html* test/HTML/script2.html: added the test + case from the regression suite + +Tue Jul 12 17:08:11 CEST 2005 Daniel Veillard + + * nanohttp.c: fixed bug #310105 with http_proxy environments with + patch provided by Peter Breitenlohner + +Mon Jul 11 00:28:10 CEST 2005 Daniel Veillard + + * Makefile.am NEWS configure.in doc/*: preparing release 2.6.20 + * xmllint.c: removed a compilation problem + +Sun Jul 10 23:33:41 CEST 2005 Daniel Veillard + + * xstc/Makefile.am README README.tests Makefile.tests Makefile.am: + preparing to make testsuite releases along with code source releases + * gentest.py testapi.c: fixed a couple of problem introduced by + the new Schemas support for Readers + * xpath.c: fixed the XPath attribute:: bug #309580, #309864 in a crude + but simple way. + * xmlschemas.c include/libxml/tree.h: fixed a couple of problems + raised by the doc builder. + * doc/*: made rebuild + +Sun Jul 10 21:51:16 CEST 2005 Daniel Veillard + + * xmlschemas.c: fixed a bug introduced on last commit + +Sun Jul 10 21:00:54 CEST 2005 Daniel Veillard + + * doc/xmllint.1 doc/xmllint.html doc/xmllint.xml: fixed a typo + pointed by Jeroen Ruigrok + * include/libxml/xmlreader.h include/libxml/xmlschemas.h: increased + the APIs for xmlReader schemas validation support + * xmllint.c xmlreader.c xmlschemas.c: xmlReader schemas validation + implementation and testing as xmllint --stream --schema ... + +Sun Jul 10 16:11:26 CEST 2005 Daniel Veillard + + * include/libxml/xmlwin32version.h.in: try to avoid conflicts. + +Sat Jul 9 19:29:10 CEST 2005 Daniel Veillard + + * parser.c: fix for #309761 from Dylan Shell + * xmlschemas.c include/libxml/xmlschemas.h: added xmlSchemaSAXPlug + and xmlSchemaSAXUnplug generic APIs for SAX Schemas validation. + * xmllint.c: couple of fixes plus added descriptions for --sax and + --sax1 + +Fri Jul 8 23:35:00 CEST 2005 Kasimier Buchcik + + * xmlschemas.c: Added c-props-correct constraint to check + for equal cardinality of keyref/key. + * include/libxml/xmlerror.h: Added an error code. + +Fri Jul 8 21:56:04 CEST 2005 Kasimier Buchcik + + * pattern.c: Fixed evaluation of attributes. Actually only + attribute at the first level were evaluated (e.g. "@attr"); + expression like "foo/@attr" always failed. + +Fri Jul 8 20:04:29 CEST 2005 Kasimier Buchcik + + * xmlschemas.c: tiny fix in xmlSchemaValidateStream() if a + user-provided SAX handler is given. + +Fri Jul 8 19:25:26 CEST 2005 Daniel Veillard + + * parser.c: fix some potential leaks in error cases. + * xmllint.c: added --sax, to allow testing of --schemas --sax and + various other combinations. + * xmlschemas.c: fix a couple of tiny problems in + xmlSchemaValidateStream() + +Fri Jul 8 18:34:22 CEST 2005 Kasimier Buchcik + + * xmlschemas.c: Changed xmlSchemaValidateFile() to use + xmlSchemaValidateStream() internally. + +Fri Jul 8 17:02:14 CEST 2005 Daniel Veillard + + * test/relaxng/docbook_0.xml: added the missing entity to the + document internal subset to avoid errors if the DocBook catalogs + are not there + * xmlschemas.c: first cut at implementing xmlSchemaValidateStream() + untested yet + +Wed Jul 6 15:45:48 PDT 2005 William Brack + + * parser.c: fixed problem with free on dupl attribute in + dtd (bug309637). + * test/errors/attr3.xml, result/errors/attr3.*: added + regression test for this + +Wed Jul 6 13:11:35 PDT 2005 William Brack + + * win32/Makefile.msvc: try again to fix file format for Windows + +Wed Jul 6 12:20:13 PDT 2005 William Brack + + * win32/Makefile.msvc: removed spurious ^M + * runtest.c: added check for option O_BINARY + * test/schemas/bug309338*, result/schemas/bug309338*: changed + sticky tag to 'binary' + +Wed Jul 6 10:38:02 PDT 2005 William Brack + + * debugXML.c: excluded content string check for XML_ELEMENT_DECL + in xmlCtxtGenericNodeCheck + * runtest.c: changed "open" calls to include O_BINARY for Windows + +Wed Jul 6 17:14:03 CEST 2005 Daniel Veillard + + * parser.c: fixing bug #166777 (and #169838), it was an heuristic + in areBlanks which failed. + * result/winblanks.xml* result/noent/winblanks.xml test/winblanks.xml: + added the input file to the regression tests + +Wed Jul 6 13:40:22 CEST 2005 Kasimier Buchcik + + * xmlschemastypes.c: Fixed bug #309338, reported by Kupriyanov + Anotolij. + * test/schemas/bug309338* result/schemas/bug309338*: + Added a regression test for the above bug. + +Tue Jul 5 16:03:05 CEST 2005 Daniel Veillard + + * Makefile.am: first steps toward a testsuite dist + * SAX2.c include/libxml/xmlerror.h: fixed bug #307870 + +Tue Jul 5 12:38:36 CEST 2005 Kasimier Buchcik + + * runsuite.c runtest.c: Tiny portability adjustment for win. + * win32/Makefile.*: Added runtest.exe and runsuite.exe to + be created. + +Mon Jul 4 17:44:26 CEST 2005 Daniel Veillard + + * runsuite.c: first stb at unimplemnted detection + * runtest.c: fixing Windows code + +Mon Jul 4 17:19:31 CEST 2005 Daniel Veillard + + * runsuite.c: fix on schemas error + * runtest.c: portability glob() on Windows + +Mon Jul 4 16:23:54 CEST 2005 Daniel Veillard + + * runsuite.c runtest.c: cleanups, logfile and portability + * xmllint.c: fixed a memory leak + +Mon Jul 4 13:11:12 CEST 2005 Daniel Veillard + + * parser.c: fixed a bug failing to detect UTF-8 violations in + CData in push mode. + * result/errors/cdata.xml* test/errors/cdata.xml: added the test + to the regressions + +Mon Jul 4 11:26:57 CEST 2005 Daniel Veillard + + * debugXML.c: added enhancement for #309057 in xmllint shell + +Mon Jul 4 00:58:44 CEST 2005 Daniel Veillard + + * HTMLparser.c: applied patch from James Bursa fixing an html parsing + bug in push mode + * result/HTML/repeat.html* test/HTML/repeat.html: added the test to the + regression suite + +Sun Jul 3 23:42:31 CEST 2005 Daniel Veillard + + * testapi.c tree.c: fixing a leak detected by testapi in + xmlDOMWrapAdoptNode, and fixing another side effect in testapi + seems to pass tests fine now. + * include/libxml/parser.h parser.c: xmlStopParser() is no more limited + to push mode + * error.c: remove a warning + * runtest.c xmllint.c: avoid compilation errors if only some parts + of the library are compiled in. + +Mon Jul 4 00:39:35 CEST 2005 Daniel Veillard + + * gentest.py testapi.c: fix a problem with previous patch to + testapi.c + +Sun Jul 3 22:59:28 CEST 2005 Daniel Veillard + + * runsuite.c runtest.c tree.c: fixing compilations when + disabling parts of the library at configure time. + +Sun Jul 3 18:17:58 CEST 2005 Daniel Veillard + + * parserInternals.c: fix bug raised by zamez on IRC + * testapi.c: regenerated, seems to pop-up leaks in new tree functions + * tree.c: added comments missing. + * doc/*: regenerated + +Sun Jul 3 18:06:55 CEST 2005 Daniel Veillard + + * testapi.c runsuite.c runtest.c: fixing #307823 and a couple of + assorted bugs + * python/generator.py python/libxml2-python-api.xml: fixed + conditionals in generator too + * doc/apibuild.py doc/libxml2-api.xml doc/* elfgcchack.h: some + cleanups too and rebuilt + +Sun Jul 3 16:42:00 CEST 2005 Daniel Veillard + + * xmlIO.c: fixed bug #307503 misplaced #ifdef + +Sun Jul 3 16:34:47 CEST 2005 Daniel Veillard + + * runsuite.c: expanded test + * xmlregexp.c: found and fixed the leak exposed by Microsoft regtests + +Sat Jul 2 23:38:24 CEST 2005 Daniel Veillard + + * runsuite.c: a bit of progresses on xstc + +Sat Jul 2 09:30:13 CEST 2005 Daniel Veillard + + * runsuite.c: completed the simple checks for Relax-NG suites + back to the same 11 errors as in the Python runs. + +Thu Jun 30 15:01:52 CEST 2005 Daniel Veillard + + * runtest.c: complete, checking on other platforms is needed + * README: updated + * debugXML.c: fix a bug raised by bill on IRC + * relaxng.c: fix a leak in weird circumstances + * runsuite.c Makefile.am: standalone test tool agaisnt + the regression suites, work in progress + +Tue Jun 28 08:30:26 CEST 2005 Daniel Veillard + + * runtest.c: adding URI tests + +Mon Jun 27 23:55:56 CEST 2005 Daniel Veillard + + * runtest.c: adding xml:id + +Mon Jun 27 23:29:36 CEST 2005 Daniel Veillard + + * runtest.c: finishing XPath, adding XPointer + +Mon Jun 27 17:39:27 CEST 2005 Daniel Veillard + + * runtest.c: adding more coverage, XInclude and starting XPath + +Mon Jun 27 17:02:14 CEST 2005 Kasimier Buchcik + + * tree.c include/libxml/tree.h: Added allocation/deallocation + functions for the DOM-wrapper context. + +Mon Jun 27 15:41:30 CEST 2005 Kasimier Buchcik + + * tree.c: Commented the new functions to be experimental. + +Mon Jun 27 14:41:14 CEST 2005 Daniel Veillard + + * error.c valid.c: working some weird error reporting problem for + DTD validation. + * runtest.c: augmented with DTD validation tests + * result/VC/OneID*: slight change in validation output. + +Mon Jun 27 13:44:41 CEST 2005 Daniel Veillard + + * runtest.c: added most HTML tests + +Mon Jun 27 14:06:10 CEST 2005 Kasimier Buchcik + + * test/namespaces/reconcile/tests.xml + test/namespaces/reconcile/tests-to-c.xsl: Added initial tests + for some new DOM-wrapper helping functions. + +Mon Jun 27 14:01:06 CEST 2005 Kasimier Buchcik + + * xstc/xstc-to-python.xsl: Cleanup. + * xstc/sun-test-def.xml xstc/nist-test-def.xml xstc/ms-test-def.xml: + Removed, those are not needed anymore due to the new test suite. + +Mon Jun 27 11:39:50 CEST 2005 Daniel Veillard + + * result/*.sax2 MAkefile.am: added SAXv2 regression tests apparently + missing. + * runtest.c: added SAX1/SAX2 checks. + +Mon Jun 27 12:24:54 CEST 2005 Kasimier Buchcik + + * tree.c include/libxml/tree.h: Added + xmlDOMWrapReconcileNamespaces(), xmlDOMWrapAdoptNode() and + xmlDOMWrapRemoveNode() to the API. These are functions intended + to be used with DOM-wrappers. + +Mon Jun 27 10:14:57 CEST 2005 Daniel Veillard + + * runtest.c: continue to increase the tests + +Mon Jun 27 09:21:49 CEST 2005 Daniel Veillard + + * runtest.c: continue to increase the tests + +Mon Jun 27 01:01:32 CEST 2005 Daniel Veillard + + * runtest.c: continue to increase the tests + +Sun Jun 26 20:08:24 CEST 2005 Daniel Veillard + + * include/libxml/valid.h valid.c: avoid name glob in agruments as + it matches the glob() routine. + * runtest.c Makefile.am: first steps toward a C regression test + framework. + +Sat Jun 25 01:37:22 PDT 2005 William Brack + + * configure.in: fixed a problem with the detection of + ss_family for ipV6, as reported on the mailing list by + Doug Orleans. + +Tue Jun 21 10:44:34 CEST 2005 Kasimier Buchcik + + * test/schemas/empty-value* result/schemas/empty-value*: + Added regression tests (from Dhyanesh). + +Tue Jun 21 10:35:43 CEST 2005 Kasimier Buchcik + + * xmlschemas.c: Fixed NULL values to be validated as empty + string values (reported by Dhyanesh to the mailing list). + Adjusted text concatenation of mixed content. + +Mon Jun 20 18:11:32 CEST 2005 Daniel Veillard + + * tree.c valid.c: applied patch from Rob Richards for removal + of ID (and xml:id) + * xmlreader.c: applied patch from James Wert implementing + xmlTextReaderReadInnerXml and xmlTextReaderReadOuterXml + +Thu Jun 16 14:38:22 CEST 2005 Kasimier Buchcik + + * xmlschemas.c: Fixed SAX2 validation: grow of internal + namespace list, appending of element character content. + * xstc/xstc.py: Added "--sax" option for SAX2 validation. + +Wed Jun 15 15:34:52 CEST 2005 Kasimier Buchcik + + * xmlschemastypes.c: Added missing function descriptions. + +Wed Jun 15 15:26:14 CEST 2005 Daniel Veillard + + * xmllint.c: if sax1 is used and input is a file use the old + API xmlParseFile() + * xmlschemas.c: cleanups + * doc/* testapi.c elfgcchack.h: rebuilt to add python bindings + for the new functions in Schemas. + +Wed Jun 15 14:50:48 CEST 2005 Kasimier Buchcik + + * xmlschemas.c include/libxml/xmlschemas.h: Added + xmlSchemaValidateFile() to the public API. This will use + SAX2-driven validation. + +Wed Jun 15 11:11:38 CEST 2005 Kasimier Buchcik + + * result/schemas/bug306806_1_0 result/schemas/bug306806_1_0.err: + Added schema test results (Tom Browder, bug #306806). + +Wed Jun 15 11:08:34 CEST 2005 Kasimier Buchcik + + * test/schemas/bug306806_1.xsd test/schemas/bug306806_0.xml: + Added schema tests submitted by Tom Browder (bug #306806). + +Tue Jun 14 15:03:22 PDT 2005 William Brack + + * pattern.c: adjusted last change to xmlCompilePathPattern, + fixed one compilation warning + +Tue Jun 14 21:19:16 CEST 2005 Kasimier Buchcik + + * pattern.c: Some changes/fixes to the streaming evaluation. + * xmlschemas.c: A bit of support for parsing the schema for + schema. Fixed attribute derivation when the use is + "prohibited" and was "optional". Fixed an attribute construction + bug, a left-over from the time, where , + , etc. where created as structs. + +Tue Jun 14 12:35:12 CEST 2005 Daniel Veillard + + * libxml-2.0.pc.in: removed a redundant include path + +Mon Jun 13 14:58:33 CEST 2005 Kasimier Buchcik + + * xstc/Makefile.am: Some more adjustments. + +Mon Jun 13 14:35:59 CEST 2005 Kasimier Buchcik + + * xstc/Makefile.am: Changed test extraction process, since some + boxes don't know about "tar --strip-path". + +Mon Jun 13 13:39:43 CEST 2005 Daniel Veillard + + * relaxng.c: fixed a bug exposed by Rob Richards in the mailing-list + * result//compare0* test//compare0*: added the regression test in + the suite as this went unnoticed ! + +Wed Jun 9 11:07:42 PDT 2005 William Brack + + * pattern.c, xpath.c, include/libxml/pattern.h: Further + enhancement for XPath streaming, consolidated with + schemas usage of pattern.c. Added a new enum + xmlPatternFlags. + * doc/*, testapi.c, elfgcchack.h: updated to reflect new + enum. + * test/XPath/tests/mixedpat, test/XPath/docs/mixed, + result/XPath/mixedpat: added regression test for problems + reported in bug306348 + +Thu Jun 9 16:51:31 CEST 2005 Kasimier Buchcik + + * xmlschemastypes.c: Changed non-prefixed QNames to be bound to a + default namespace if existent. + +Thu Jun 9 15:11:38 CEST 2005 Kasimier Buchcik + + * xmlschemastypes.c: Fixed a bug which I invented: hexBinary's string + values were not duplicated corrently when creating a computed value + in xmlSchemaValAtomicType. + +Thu Jun 9 13:20:57 CEST 2005 Kasimier Buchcik + + * xmlschemas.c result/schemas/include1_0_0.err: + Fixed an attribute fixed/default value constraint error. + +Thu Jun 9 12:51:23 CEST 2005 Kasimier Buchcik + + * result/schemas/*: Adapted regression test results. + +Thu Jun 9 12:22:45 CEST 2005 Kasimier Buchcik + + * xmlschemas.c xmlschemastypes.c include/libxml/schemasInternals.h + include/libxml/xmlschemastypes.h: Changed the validation process + to be able to work in streaming mode. Some datatype fixes, + especially for list and union types. Due to the changes the + error report output has changed in most cases. Initial migration to + functions usable by both, the parser and the validator. This should + ease a yet-to-come XS construction API in the long term as well. + +Thu Jun 9 10:16:11 CEST 2005 Daniel Veillard + + * parser.c: applied patch from Malcolm Rowe to avoid namespace + troubles on rollback parsing of elements start #304761 + * test/nsclean.xml result/noent/nsclean.xml result/nsclean.xml*: + added it to the regression tests. + +Thu Jun 9 00:33:50 CEST 2005 Daniel Veillard + + * parser.c include/libxml/xmlerror.h: applied patch from Rob Richards + for xml:space and xml:lang handling with SAX2 api. + +Wed Jun 8 19:41:38 CEST 2005 Daniel Veillard + + * globals.c: applied patch from Morten Welinder, closing bug #306901 + on compiling subsets of the library + +Wed Jun 8 19:11:42 CEST 2005 Kasimier Buchcik + + * xstc/Makefile.am xstc.py xstc-to-python.xsl: Adapted the + XS tests to use the new release of tests and test-definitions. + +2005-06-07 Aleksey Sanin + + * c14n.c: fix rendering of attributes when parent node + is not in the node set + +2005-06-06 Aleksey Sanin + + * c14n.c: fixed xml attributes processing bug in exc c14n + * xmllint.c: added --exc-c14n command line option + +Mon Jun 6 06:43:33 PDT 2005 William Brack + + * xpath.c, pattern.c: Enhanced xmlXPathRunStreamEval, fixed + handling of depth/level for cases like union operator + (bug #306348 reported by Bob Stayton). Also enhanced + several comments throughout pattern.c. + * doc/apibuild.py: fixed problem in handling of + 'signed' declaration. Rebuilt the docs. + +Tue May 31 20:35:27 PDT 2005 William Brack + + * xinclude.c: Enhanced handling of xml:base for included + elements, fixing bugs 169209 and 302353. + +Wed May 25 18:59:53 CEST 2005 Kasimier Buchcik + + * xmlschemas.c: Fixed facet errors to be channelled back for + union type members; facet-validation will stop now on the + first error. Reported by GUY Fabrice to the mailing-list. + * xmlschemastypes.c: Changed to ignore lengh-related facet + validation for QNames and NOTATIONs as proposed by the + schema people. + * test/schemas/union2* result/schemas/union2*: Added + regression tests for union types (by GUY Fabrice). + +Fri May 20 20:48:08 CEST 2005 Daniel Veillard + + * xmlsave.c: applied patch from Mark Vakoc fixing saving of + CDATA with NULL content. + +Thu May 12 15:14:26 CEST 2005 Kasimier Buchcik + + * xmlschemastypes.c: Changed the VALID_TZO macro to restrict + the timezone to -840 to 840. + +Thu May 12 15:05:11 CEST 2005 Kasimier Buchcik + + * xmlschemastypes.c: Applied patch from Steve Nairn (bug #303670) + for "signed int" of the date-time timezone field. Silenced + a warning. + +Wed May 11 20:04:09 CEST 2005 Daniel Veillard + + * tree.c: applied patch for replaceNode from Brent Hendricks + +Tue May 10 17:27:52 CEST 2005 Daniel Veillard + + * tree.c: fixed bug #303682 of a leak reported by Malcolm Rowe + +Tue May 10 11:50:16 CEST 2005 Daniel Veillard + + * testapi.c: applied patch from Steve Nairn tof fix the compilation + problem exposed in bug #303640 + +Tue May 10 11:11:26 CEST 2005 Kasimier Buchcik + + * test/schemas/bug303566_1* result/schemas/bug303566_1_1*: + Added regression a test provided by Heiko Oberdiek (bug #303566). + +Mon May 9 17:56:58 CEST 2005 Kasimier Buchcik + + * pattern.c: Changed the XPath "." to resolve only on the first + level for XML Schema IDCs (bug #303566 reported by Heiko Oberdiek). + This should not affect pattern-like resolution on every level. + +Sun May 8 13:35:39 CEST 2005 Daniel Veillard + + * xmlmemory.c: fixed #169630 segfault in xmlMemDisplay + +Fri May 6 13:40:03 CEST 2005 Daniel Veillard + + * nanoftp.c: fixing bug #303068 increasing the nanoftp buffer. + * doc/apibuild.py: fixed __attribute() parsing problem + * doc/* testapi.c: regenerated the descriptions and docs. + +Wed May 4 11:16:00 CEST 2005 Daniel Veillard + + * Makefile.am configure.in threads.c: on linux/gcc use weak definitions + to avoid linking with pthread library on non-threaded environments. + * xpath.c: applied patch from Mark Vakoc w.r.t. a buggy namespace + list allocation. + +Fri Apr 29 11:27:37 CEST 2005 Kasimier Buchcik + + * parser.c: Fixed a test for duplicate attributes: Non-prefixed + attributes were treated as being bound to the default namespace. + +Tue Apr 19 17:51:32 CEST 2005 Kasimier Buchcik + + * xmlschemastypes.c: Fixed date-time related validation + (reported by David Crossley, bug #300576). + +Tue Apr 19 16:55:40 CEST 2005 Kasimier Buchcik + + * xmlschemas.c xmlregexp.c: Removed 5 unnecessary + dereferences (reported by Andriy, bug #301074). + +Tue Apr 19 22:33:18 HKT 2005 William Brack + + * xpath.c: Added some code to avoid integer overflow for + ceil, floor and round functions (bug 301162) + +Tue Apr 19 13:21:54 CEST 2005 Kasimier Buchcik + + * xmlschemas.c: Removed workaround for bug #172215, since it + does more harm in some scenarios. Added some of the + "Particle Restriction OK" constraints - not yet enabled. + +Mon Apr 18 13:02:55 CEST 2005 Kasimier Buchcik + + * result/schemas/changelog093*: Added test results. + +Mon Apr 18 12:42:14 CEST 2005 Kasimier Buchcik + + * xmlschemas.c: Added output of canonical values in + identity-constraint error messages. + * xmlschemastypes.c include/libxml/xmlschemastypes.h: + Added xmlSchemaGetCanonValueWhtsp() to the API. + Further enhancement of the canonical value + conversion. + * test/schemas/changelog093_0.*: Added test with an XSD + submitted by Randy J. Ray. + +Fri Apr 15 09:33:21 HKT 2005 William Brack + + * valid.c: Applied Daniel's fix for memory leak in dtd + prefix (bug 300550). + * xpath.c: minor change to comment only + +Thu Apr 14 20:52:41 CEST 2005 Daniel Veillard + + * xmlmemory.c: added the call to the breakpoint routine + when a monitored block is reallocated or freed + +Wed Apr 13 05:55:51 CEST 2005 Daniel Veillard + + * nanohttp.c: applied patch from Aron Stansvik for bug #172525 + about HTTP query string parameter being lost + +Tue Apr 12 04:03:32 CEST 2005 Daniel Veillard + + * python/libxml.c python/libxml.py: applied patch from Brent Hendricks + adding namespace removal at the python level #300209 + * python/tests/Makefile.am python/tests/nsdel.py: added the regression + test + +Sun Apr 10 09:03:22 HKT 2005 William Brack + + * xpath.c: fixed several places where memory cleanup was not + properly done after an error was detected (problem was + reported on the mailing list by Pawel Palucha) + +Fri Apr 8 21:58:04 CEST 2005 Kasimier Buchcik + + * xmlschemas.c: Added substitution group constraints; changed + the build of the pre-computed substitution groups. Channeled + errors during xsi assembling of schemas to the validation + context. Fixed a big memory leak, which occured when using + IDCs: the precomputed value of attributes was not freed if + the attribute did not resolve to an IDC field (discovered + with the help of Randy J. Ray's schema, posted to the + xmlschema-dev maling list). + +Fri Apr 8 13:22:01 CEST 2005 Kasimier Buchcik + + * xmlschemas.c: Added "Particle correct 2" to parsing of model groups. + Added handling substitution groups inside and ; + for this is not supported yet. Changed circular checks for + model groups definitions. "memberTypes" are processed at different + levels now: component resolution first, construction later; this + goes hand in hand with a global change to handle component + resolution in a distinct phase. Fixed invalid default values for + elements to mark the schema as invalid; this just resulted in an + error report previously, but the schema was handled as valid. + Separated the assignment of the model groups to referencing + model group definition references (i.e. particles); this was + needed to perform the circularity check for model group definitions. + Added "Element Declaration Properties Correct (e-props-correct)" + constraints. Separated component resolution for simple/complex + types. + * include/libxml/schemasInternals.h: Added a flag for substitution + group heads. + +Wed Apr 6 23:14:03 CEST 2005 Igor Zlatkovic + + * win32/Makefile.*: make install cleanup + +Wed Apr 6 22:42:23 CEST 2005 Igor Zlatkovic + + * win32/Makefile.mingw: fixed mingw compilation + * testModule.c: removed mingw warnings + +Wed Apr 6 21:59:11 CEST 2005 Igor Zlatkovic + + * .cvsignore: added Eclipse project files to ignore list + +Wed Apr 6 16:08:10 CEST 2005 Daniel Veillard + + * xpath.c: fixed the bug in lang() as raised by Elliotte Rusty Harold + * result/XPath/tests/langsimple test/XPath/tests/langsimple + test/XPath/docs/lang: added a regression test + +Tue Apr 5 23:48:35 CEST 2005 Daniel Veillard + + * nanoftp.c: applied fix from Rob Richards to compile on Windows. + +Tue Apr 5 17:02:58 CEST 2005 Kasimier Buchcik + + * xmlschemas.c: Added "Type Derivation OK (Complex)" constraints + and anchored them in the "Element Locally Valid (Element)" + constraints. This restricts the type substitution via "xsi:type". + +Tue Apr 5 13:10:06 CEST 2005 Daniel Veillard + + * xmlschemas.c: patch from Matthew Burgess to improve some schemas + facets validation messages. + +Sat Apr 2 12:48:41 CEST 2005 Daniel Veillard + + * doc/* configure.in NEWS: preparing release 2.6.19, updated docs and + rebuilding. + +Sat Apr 2 13:27:32 CEST 2005 Daniel Veillard + + * xstc/Makefile.am: integrated fixup-tests.py + +Fri Apr 1 19:14:18 CEST 2005 Daniel Veillard + + * xmlschemastypes.c: fixed a lack of comment and missing test for + a pointer in the API. + +Fri Apr 1 17:54:22 CEST 2005 Kasimier Buchcik + + * xstc/fixup-tests.py: A tiny script to fixup some of the schema + files used for the tests. + +Fri Apr 1 17:33:50 CEST 2005 Kasimier Buchcik + + * xmlschemas.c include/libxml/schemasInternals.h + result/schemas/src-element2-*.err result/schemas/element-*.err: + Committing again, since the CVS server aborted. + +Fri Apr 1 15:29:27 CEST 2005 Kasimier Buchcik + + * xmlschemastypes.c: Corrected 'length' facet validation for + QNames and notations. Corrected xmlSchemaGetCanonValue: some + data types did not return a value if already in normalized + form. + * xmlschemas.c include/libxml/schemasInternals.h: + Eliminated creation of structs for , , + , , and : the + information is now set directly on the corresponding simple/ + complex type. Added some more complex type constraints. + Added facet derivation constraints. Introduced "particle" + components, which seem to be really needed if applying + constraints. Corrected/change some of the parsing functions. + This is all a bit scary, since a significant change to the code. + * result/schemas/src-element2-*.err result/schemas/element-*.err: + Adapted regression test results. + +Fri Apr 1 16:07:59 CEST 2005 Daniel Veillard + + * doc/apibuild.py doc/elfgcchack.xsl: revamped the elfgcchack.h + format to cope with gcc4 change of aliasing allowed scopes, had + to add extra informations to doc/libxml2-api.xml to separate + the header from the c module source. + * *.c: updated all c library files to add a #define bottom_xxx + and reimport elfgcchack.h thereafter, and a bit of cleanups. + * doc//* testapi.c: regenerated when rebuilding the API + +Thu Mar 31 17:20:32 CEST 2005 Daniel Veillard + + * xmlsave.c: fixed bug reported by Petr Pajas, in the absence of + encoding UTF-8 should really be assumed. This may break if + the HTTP headers indicates for example ISO-8859-1 since this + then becomes a well formedness error. + +Thu Mar 31 16:57:18 CEST 2005 Daniel Veillard + + * SAX.c: fixed #172260 redundant assignment. + * parser.c include/libxml/parser.h: fixed xmlSAXParseDoc() and + xmlParseDoc() signatures #172257. + +Thu Mar 31 16:11:10 CEST 2005 Daniel Veillard + + * parser.c: fix potential crash if ctxt->sax->ignorableWhitespace + is NULL as reported by bug #172255 + +Thu Mar 31 15:36:52 CEST 2005 Daniel Veillard + + * relaxng.c: fixed a problem in Relax-NG validation #159968 + * test/relaxng/list.* result/relaxng/list_*: added the test + to the regression suite + +Thu Mar 31 13:06:02 CEST 2005 Daniel Veillard + + * python/libxml.c: fixed bug #168504 + +Thu Mar 31 12:22:54 CEST 2005 Daniel Veillard + + * config.h.in configure.in nanoftp.c nanohttp.c xmllint.c + macos/src/config-mac.h: use XML_SOCKLEN_T instead of SOCKLEN_T + since apparently IBM can't avoid breaking common defines #166922 + +Thu Mar 31 10:41:45 CEST 2005 Daniel Veillard + + * encoding.c: fix unitinialized variable in not frequently used + code bug #172182 + +Thu Mar 31 00:45:18 CEST 2005 Daniel Veillard + + * python/generator.py python/libxml.py: another patch from Brent + Hendricks to add new handlers with the various validity contexts + * python/tests/Makefile.am python/tests/validDTD.py + python/tests/validRNG.py python/tests/validSchemas.py: also + added the regression tests he provided + +Wed Mar 30 09:39:27 CEST 2005 Daniel Veillard + + * python/generator.py python/libxml.c: applied patch from Brent + Hendricks to avoid leak in python bindings when using schemas + error handlers. + +Tue Mar 29 22:29:28 CEST 2005 Daniel Veillard + + * HTMLtree.c: fixing bug 168196, must be URI escaped too + +Sun Mar 27 13:24:24 CEST 2005 Daniel Veillard + + * tree.c: cleanup of the Prop related functions and xmlNewNodeEatName + by Rob Richards + +Thu Mar 24 19:01:22 PST 2005 William Brack + + * gentest.py, testapi.c: fixed problem with 'minimal library' + compilation (LIBXML_PATTERN_ENABLED not properly checked) reported + by Greg Morgan + +Thu Mar 24 12:01:30 CET 2005 Kasimier Buchcik + + * xmlschemas.c: Fixed call to a facet error report: the type of + the error was wrong, resulting in a segfault (bug #171220, reported + by GUY Fabrice). + +Mon Mar 21 22:58:37 CET 2005 Kasimier Buchcik + + * xmlschemas.c: Removed a stupid bug in xmlSchemaValidateAttributes, + failing to build a linked list correctly (bug #169898, reported + by bing song, hmm...). + +Mon Mar 21 21:09:07 CET 2005 Kasimier Buchcik + + * xmlschemas.c: Fixed a segfault, which occured during bubbling + of IDC nodes (bug #170779 and #170778, reported by GUY Fabrice): + a variable was missed to be reset in a loop. Deactivated bubbling, + if not referenced by a keyref. + +Sun Mar 20 11:13:02 PST 2005 Aleksey Sanin + + * c14n.c include/libxml/xmlerror.h: special case "DAV:" namespace + in c14n relative namespaces check and add structured error messages + to c14n code + +Thu Mar 17 12:55:23 CET 2005 Kasimier Buchcik + + * xmlschemas.c: Removed inheritance of "mixed" content type for + short-hand restrictions of "anyType" (reported by Guy Fabrice + to the mailing list). Added the namespace conversion (chameleon + includes) for the base type reference of and + . + * test/schemas/bug152470_1.xsd: Adapted due to the above change + of "mixed" inheritance. + +Thu Mar 17 11:03:59 CET 2005 Daniel Veillard + + * xmlschemas.c: fixed a = -> == error pointed by GUY Fabrice + +Wed Mar 16 22:53:53 CET 2005 Daniel Veillard + + * xmlschemas.c: more debug messages from Matthew Burgess + * xmlschemastypes.c: xmlSchemaValidateLengthFacet API missing check. + +Wed Mar 16 17:37:04 CET 2005 Kasimier Buchcik + + * xmlschemastypes.c: Aaaannnd putting back the previous changes done + by Daniel, which I overwrote with the previous commit. + +Wed Mar 16 17:20:25 CET 2005 Kasimier Buchcik + + * xmlschemas.c xmlschemastypes.c include/libxml/xmlschemastypes.h: + Hopefully finished validation against facets to use the normalized + value of both, the facets and instance values. Added + xmlSchemaValidateLengthFacetWhtsp(), xmlSchemaValidateFacetWhtsp() + and xmlSchemaGetValType() to the schema API. + +Wed Mar 16 13:55:31 CET 2005 Daniel Veillard + + * libxml.spec.in: do not package .la files + * xmllint.c: applied patch from Gerry Murphy for xmllint return code + * xmlschemastypes.c: fixed a couple of missing tests of parameters + at public API entry points. + +Tue Mar 15 23:31:14 HKT 2005 William Brack + + * xmlschemastypes.c: a couple of more changes to various + decimal-handling routines. Fixes python some problems + turned up by the python tests. + * Makefile.am: change SchemasPythonTests message to warn + that there are 10 'expected' errors (rather than 6) since + we now reject a '+' sign on an unsigned. + +Tue Mar 15 15:43:27 CET 2005 Kasimier Buchcik + + * xmlschemastypes.c xmlschemastypes.h: In preparation to use + normalized values of facets during validation: changed the + arguments of some string comparison functions; added a static + xmlSchemaValidateFacetInternal() with more arguments to be + more flexible. Prepared XML_SCHEMA_FACET_ENUMERATION validation + to use the comparison functions. Fixed some assignments in + xmlSchemaValAtomicType(): total digit count, lo, mi, hi. + +Sun Mar 13 19:32:03 CET 2005 Daniel Veillard + + * NEWS configure.in testapi.c doc/*: preparing release of 2.6.18 + updated docs and rebuilt + * libxml.spec.in: reactivated gcc profiling for gcc >= 4.0.0 + +Sat Mar 12 19:50:22 CET 2005 Daniel Veillard + + * encoding.c: removed a static buffer in xmlByteConsumed(), + as pointed by Ben Maurer, fixes #170086 + * xmlschemas.c: remove a potentially uninitialized pointer warning + +Fri Mar 11 23:53:13 HKT 2005 William Brack + + * xmlschemastypes.c: enhanced the parsing of XML_SCHEMAS_DECIMAL + and much of the routine xmlSchemaCompareDecimals. The + changes were necessary to fix a problem reported on the + mailing list by John Hockaday. + +Fri Mar 11 13:22:52 CET 2005 Kasimier Buchcik + + * xmlschemas.c: The schema parser will stop if components could + not be resolved. This is not conforming to the spec but for now + will avoid internal errors during type fixup and content model + creation. Restructured inclusion/import of schemata: this avoids + duplicate, self and circular inclusion. Chameleon includes are + still workarounded. Added restriction to disallow references to + non-imported namespaces. Corrected parsing of . + * result/schemas/bug167754_0_0*: Added a missing test result. + +Thu Mar 10 16:02:17 CET 2005 Daniel Veillard + + * doc/xml.html doc/encoding.html: Enriched encoding.html with more + link and foreword warning to avoid problem with ignorant + programmers, c.f #169721 + +Thu Mar 10 15:01:34 CET 2005 Daniel Veillard + + * python/tests/Makefile.am python/tests/readernext.py: added + a regression test from Rob Richards for the previous bug + +Thu Mar 10 13:22:36 CET 2005 Daniel Veillard + + * xmlreader.c: applied fix for xmlTextReaderNext() bug from + Rob Richards + +Thu Mar 10 11:35:57 CET 2005 Daniel Veillard + + * xmlmodule.c: second patch from Rick Jones, portability fix for + HP-UX + * doc/examples/xpath1.c doc/examples/xpath2.c: first fix from Rick Jones + to avoid warnings. + +Thu Mar 10 10:20:23 CET 2005 Daniel Veillard + + * include/libxml/hash.h libxml.h libxml.spec.in: some gcc4 portability + patches, including a serious aliasing bug exposed in s390 + when trying to convert data pointer to code pointer. + +Mon Mar 7 18:34:00 CET 2005 Kasimier Buchcik + + * xmlschemas.c: Tiny restructuring of the validation start-up + functions. Added cleanup of the validation context at the + end of validation. This takes care of the validation context + being reused. + +Mon Mar 7 12:12:01 CET 2005 Kasimier Buchcik + + * xmlschemastypes.c: Tiny changes in the comparison functions + I forgot to commit last time. + +Fri Mar 4 22:51:42 CET 2005 Kasimier Buchcik + + * xmlschemas.c: Added IDC validation of anySimpleType attribute + values; anyway the IDC key comparison is restricted to + anySimpleType <--> string based types. For other types we + would possibly need the canonical lexical representation of + them; this sounds not performant, since we would need to + build such a representation each time we want to compare against + anySimpleType. TODO: think about buffering the canonical values + somewhere. Fixed error reports for default attributes to work + without a node being specified. This all and the enabling of IDC + validation fixes bug #165346 (reported by Benoit Gr?goire - could + not read his last name correctly from bugzilla). + +Fri Mar 4 18:57:44 CET 2005 Kasimier Buchcik + + * xmlschemas.c: Enabled IDC parsing and validation. + * xmlschemastypes.c include/libxml/xmlschemastypes.h: + Added xmlSchemaCopyValue to the API; this was done due to + validation of default attributes against IDCs: since IDC keys + consume the precomputed value, one needs a copy. + * pattern.c: Enabled IDC support; this is currently done + via calling xmlPatterncompile with a flag arg of 1. + +Wed Mar 2 11:45:18 CET 2005 Daniel Veillard + + * Makefile.am doc/examples/Makefile.am python/tests/Makefile.am + xstc/Makefile.am: try to fix a problem with valgrind. + * python/generator.py python/libxml.c python/tests/Makefile.am + python/tests/tstmem.py: applied memory leak fix from Brent Hendricks + c.f. bug #165349 + +Mon Feb 28 11:18:24 CET 2005 Kasimier Buchcik + + * tree.c: Changed xmlSearchNsByHref to call xmlNsInScope with + the prefix instead of the namespace name. + * test/schemas/annot-err_0.xsd test/schemas/element-err_0.xsd: + Adapted invalid values of the "id" attribute, since they are + validated now. + +Fri Feb 25 08:31:16 CET 2005 Daniel Veillard + + * threads.c: new version with fixes from Rob Richards + +Thu Feb 24 16:37:51 CET 2005 Daniel Veillard + + * threads.c: applied patch from Rich Salz for multithreading on + Windows. + +Wed Feb 23 15:04:46 CET 2005 Daniel Veillard + + * xmlwriter.c: applied a patch from Rob Richards fixing a couple + of bugs in the writer + +Mon Feb 21 21:51:03 HKT 2005 William Brack + + * xmlsave.c: fixed problem when XMLLINT_INDENT was empty (bug 168033). + * xpath.c: fixed compilation warning, no change to logic. + * xmlschemastypes.c: fixed compilation warning, no change to logic. + +Mon Feb 21 14:48:27 CET 2005 Daniel Veillard + + * xmlwriter.c: applied patch from Rob Richards to fix a problem with + xmlTextWriterStartAttributeNS + +Mon Feb 21 11:41:41 CET 2005 Daniel Veillard + + * pattern.c xpath.c: fixed remaining known bugs in the XPath streaming, + and switched XPath to use it by default when possible + +Sat Feb 19 19:25:14 CET 2005 Daniel Veillard + + * xmlschemastypes.c: a bit of cleanup + * elfgcchack.h testapi.c doc/*: rebuilt the API the tests and + the documentation as a result. + +Fri Feb 18 20:34:03 CET 2005 Daniel Veillard + + * xmlreader.c include/libxml/xmlreader.h: applied patch from + Aron Stansvik to add xmlTextReaderByteConsumed() + * testReader.c: added a test option + * xmlschemastypes.c: fix a lack of pointer checking in APIs + +Fri Feb 18 12:41:10 CET 2005 Kasimier Buchcik + + * test/schemas/bug167754_0*: Added the regression test of Frans + Englich for bug #167754. + +Fri Feb 18 12:31:49 CET 2005 Kasimier Buchcik + + * xmlschemas.c: Started support for IDC resolution to default + attributes. If building the content model for : ensured + to put element declarations and not the particles into the + content model automaton (this was bug #167754, reported by + Frans Englich). + +Thu Feb 17 22:31:58 CET 2005 Kasimier Buchcik + + * pattern.c pattern.h: Some experimental addition for parsing + of expressions and streamable validation. + Added xmlStreamPushAttr to the API. + +Thu Feb 17 19:57:35 CET 2005 Kasimier Buchcik + + * xmlschemas.c: Added validation for the attribute "id" in the + schemata; doing this needed error report fixes for notations, + facets and group. Changed NOTATION validation to work with the + declared NOTATIONs in the schema; this does have no impact on + the validation via the relaxng module. + * xmlschemastypes.c include/libxml/xmlschemastypes.h: + Added xmlSchemaNewNOTATIONValue to the API to be able to do + the NOTATION validation described above. + * test/schemas/element-err_0.xsd test/schemas/annot-err_0.xsd: + Fixed the values of the "id" attributes, which were not validated + previously. + +Thu Feb 17 12:03:46 CET 2005 Kasimier Buchcik + + * xmlschemas.c: Fixed comparison for default/fixed attribute + values, if the type was 'xsd:string'. Changed the comparison + for IDCs to use the whitespace aware comparison function. + * xmlschemastypes.c include/libxml/xmlschemastypes.h: + Added xmlSchemaGetCanonValue, xmlSchemaNewStringValue and + xmlSchemaCompareValuesWhtsp to the API. Added functions + to compare strings with whitespace combinations of "preserve", + "replace" and "collapse". + +Wed Feb 16 13:24:35 CET 2005 Kasimier Buchcik + + * xmlschemas.c: Further work on IDCs, especially evaluation for + attribute nodes. + +Wed Feb 16 01:19:27 CET 2005 Daniel Veillard + + * encoding.c: fix the comment to describe the real return values + * pattern.c xpath.c include/libxml/pattern.h: lot of work on + the patterns, pluggin in the XPath default evaluation, but + disabled right now because it's not yet good enough for XSLT. + pattern.h streaming API are likely to be changed to handle + relative and absolute paths in the same expression. + +Tue Feb 15 15:33:32 CET 2005 Kasimier Buchcik + + * xmlschemas.c: Added IDC evaluation for attribute nodes. + Made 'nil'ed elements work. Added a specific error message + for 'strict' attribute wildcards. + * include/libxml/xmlerror.h: Added an error code for + wildcards. + * result/schemas/anyAttr-processContents-err1_0_0.err: Adapted. + +Sun Feb 13 16:15:03 HKT 2005 William Brack + + This change started out as a simple desire to speed up the + execution time of testapi.c, which was being delayed by + nameserver requests for non-existent URL's. From there it + just sort of grew, and grew.... + * nanohttp.c, nanoftp.c: changed the processing of URL's + to use the uri.c routines instead of custom code. + * include/libxml/xmlerror.h: added code XML_FTP_URL_SYNTAX + * uri.c: added accepting ipV6 addresses, in accordance with + RFC's 2732 and 2373 (TODO: allow ipV4 within ipV6) + * gentest.py, testapi.c: fixed a few problems with the + testing of the nanoftp and nanohttp routines. + * include/libxml/xmlversion.h: minor change to fix a + warning on the docs generation + * regenerated the docs + +Sat Feb 12 09:07:11 HKT 2005 William Brack + + * xinclude.c: fixed xmlXIncludeParseFile to prevent + overwriting XML_COMPLETE_ATTRS when setting pctxt->loadsubset + (bug 166199) + * Makefile.am, python/tests/Makefile.am, xstc/Makefile.am: added + code to add $(top_builddir)/.libs to LD_LIBRARY_PATH whenever + PYTHONPATH is set, to assure new libxml2 routines are used. + +Fri Feb 11 22:20:41 HKT 2005 William Brack + + * parser.c: fixed problem when no initial "chunk" was + given to xmlCreatePushParser (bug 162613) + +Fri Feb 11 18:37:22 HKT 2005 William Brack + + * dict.c: fixed compilation warning + * parser.c: changed xmlWarningMsg so ctxt->errNo is not set + * xmllint.c: changed to return non-zero status if error + on xinclude processing + * xmlsave.c: minor deletion of a redundant condition statement + +Wed Feb 9 17:47:40 CET 2005 Daniel Veillard + + * tree.c: applied patch to xmlSetNsProp from Mike Hommey + +Sun Feb 6 00:17:57 CET 2005 Daniel Veillard + + * pattern.c xmllint.c: fixed implementation for | + * test/pattern/conj.* result/pattern/conj: added a specific regression + test + +Sat Feb 5 18:36:56 CET 2005 Daniel Veillard + + * pattern.c: first implementation for | support + +Sat Feb 5 14:58:46 CET 2005 Daniel Veillard + + * pattern.c: fixed the namespaces support + * tree.c: fixed xmlGetNodePath when namespaces are used + * result/pattern/multiple result/pattern/namespaces + test/pattern/multiple.* test/pattern/namespaces.*: added + more regression tests + +Fri Feb 4 18:26:43 CET 2005 Daniel Veillard + + * xmlschemas.c: fixed one internal function + * doc/Makefile.am doc/wiki.xsl: applied patch from Joel Reed + * testapi.c doc/libxml2-api.xml doc/libxml2-refs.xml: regenerated + +Fri Feb 4 00:25:43 CET 2005 Daniel Veillard + + * Makefile.am: use the walker to test the patterns instead of + the normal reader + * pattern.c xmllint.c: bug fixes in the train including fixing the + stupid build break. + +Tue Feb 1 18:15:52 CET 2005 Daniel Veillard + + * pattern.c: more bug fixes for the XPath streaming code. + +Mon Jan 31 17:59:24 CET 2005 Kasimier Buchcik + + * xmlschemas.c: Integrated the streaming pattern from the + pattern module. Fixed some IDC code bugs. Changed + fallback for attribute declaration addition to work like for + element declarations. + +Mon Jan 31 01:27:22 CET 2005 Daniel Veillard + + * pattern.c xmllint.c: bugfixes around the streaming patterns + +Sun Jan 30 23:35:19 CET 2005 Daniel Veillard + + * Makefile.am configure.in result/pattern/simple + test/pattern/simple.*: added first test for the patterns + * pattern.c xmllint.c: a few fixes + +Sun Jan 30 19:27:23 CET 2005 Daniel Veillard + + * pattern.c include/libxml/pattern.h xmllint.c: added a + streaming pattern detector for a subset of XPath, should + help Kasimier for identity constraints + * python/generator.py: applied Stéphane Bidoul patch to find + paths without breaking. + +Fri Jan 28 18:53:40 CET 2005 Daniel Veillard + + * xmlschemas.c: fixed an untested pointer dereference and a & vs && + +Fri Jan 28 18:37:18 CET 2005 Daniel Veillard + + * xmlreader.c: implementation of xmlTextReaderReadString by + Bjorn Reese + +Fri Jan 28 16:51:47 CET 2005 Kasimier Buchcik + + * xmlschemas.c: Corrected an ambigious symbol-space for + local attribute declarations. IFDEFed more IDC code to + surpress compiler warnings. + +Fri Jan 28 00:57:04 CET 2005 Daniel Veillard + + * bakefile/Readme.txt bakefile/Bakefiles.bkgen bakefile/libxml2.bkl: + files for the Bakefile generator for Makefiles from Francesco + Montorsi + * win32/configure.js: fixes for Windows compilation with non-default + flags by Joel Reed + +Thu Jan 27 18:23:50 CET 2005 Daniel Veillard + + * tree.c: fixed xmlCopyDoc to also copy the doc->URL as pointed + by Martijn Faassen + +Thu Jan 27 13:39:04 CET 2005 Kasimier Buchcik + + * xmlschemas.c include/libxml/schemasInternals.h: + Added an initial skeleton for indentity-constraints. This is all + defined out, since not complete, plus it needs support from other + modules. + Added machanism to store element information for the + ancestor-or-self axis; this is needed for identity-constraints + and should be helpfull for a future streamable validation. + * include/libxml/xmlerror.h: Added an error code for + identity-constraints. + +Wed Jan 26 01:03:37 CET 2005 Daniel Veillard + + * gentest.py testapi.c: had to fix generation and rebuild. + * valid.c: the testapi found a bug in the last code of course ! + +Wed Jan 26 00:43:05 CET 2005 Daniel Veillard + + * Makefile.am testapi.c doc/Makefile.am: fixing the way testapi.c + is generated, fixes bug #161386 + * dict.c: fix a comment typo + * elfgcchack.h doc/*: regenerated + +Tue Jan 25 22:39:33 CET 2005 Daniel Veillard + + * parser.c: found and fixed 2 problems in the internal subset scanning + code affecting the push parser (and the reader), fixes #165126 + * test/intsubset2.xml result//intsubset2.xml*: added the test case + to the regression tests. + +Tue Jan 25 01:20:11 CET 2005 Daniel Veillard + + * testdso.c xmlregexp.c: warning patches from Peter Breitenlohner + * include/libxml/valid.h valid.c parser.c: serious DTD parsing + speedups, start to deprecate 3 ElementDef related entry point + and replace them with better ones. + +Mon Jan 24 00:47:41 CET 2005 Daniel Veillard + + * xmlschemas.c: more hash dictionary interning changes + +Sun Jan 23 23:54:39 CET 2005 Daniel Veillard + + * hash.c include/libxml/hash.h: added xmlHashCreateDict where + the hash reuses the dictionary for internal strings + * entities.c valid.c parser.c: reuse that new API, leads to a decent + speedup when parsing for example DocBook documents. + +Sun Jan 23 21:14:20 CET 2005 Daniel Veillard + + * parser.c: small speedup in skipping blanks characters + * entities.c: interning the entities strings + +Sun Jan 23 18:35:00 CET 2005 Daniel Veillard + + * parser.c: boosting common commnent parsing code, it was really + slow. + * test/comment[3-5].xml result//comment[3-5].xml*: added sprecific + regression tests + +Sun Jan 23 01:00:09 CET 2005 Daniel Veillard + + * parser.c: small optimization back. + +Sat Jan 22 00:40:31 CET 2005 Daniel Veillard + + * dict.c parser.c include/libxml/dict.h: a single lock version + mostly avoid the cost penalty of the lock in case of low + parallelism, so applying that version instead. + +Fri Jan 21 17:54:06 CET 2005 Daniel Veillard + + * dict.c: patch from Gary Coady to fix a race in dict reference + counting in multithreaded apps. + +Fri Jan 21 16:08:21 CET 2005 Daniel Veillard + + * parser.c: fixed bug #164556 where non-fatal errors stopped + push parsing and xmlreader. + * Makefile.am: fixup + * test/errors/webdav.xml result/errors/webdav*: adding regression + test for this problem. + +Wed Jan 19 17:24:34 CET 2005 Kasimier Buchcik + + * xmlschemas.c: Corrected targetNamespace in + xmlSchemaElementDump. Cosmetic changes to the dump output. + +Sun Jan 16 21:00:53 CET 2005 Daniel Veillard + + * configure.in NEWS doc/*: preparing release of 2.6.17, + updated and rebuilt the docs + +Sun Jan 16 19:58:36 CET 2005 Daniel Veillard + + * parser.c: better fix for #151694 not killing c14n regression tests + * xmlschemastypes.c: fixing bug #157653 + +Sun Jan 16 19:01:06 CET 2005 Daniel Veillard + + * parser.c: fixing bug #151694, line should always be set in the + elements. + +Sun Jan 16 01:04:18 CET 2005 Daniel Veillard + + * xmlschemastypes.c: trying to fix at least the message from + bug #158628 + * include/libxml/xmlsave.h xmlsave.c: added first xmlsave option + for format, c.f. bug #159997 + +Sat Jan 15 18:44:30 CET 2005 Daniel Veillard + + * python/libxml.py: make __str__ call serialize() on nodes, c.f. + bug #157872 + +Sat Jan 15 18:18:07 CET 2005 Daniel Veillard + + * nanoftp.c: applied patch from Dan McNichol for compilation on AIX + +Sat Jan 15 13:35:19 CET 2005 Daniel Veillard + + * relaxng.c: fixed bug #157633 in relaxng choice optimization + * result/relaxng/choice0* test/relaxng/choice0*: added regression + tests about it. + * doc/*: rebuilt + * testdso.c: removed a warning due to a missing void in signature. + +Thu Jan 13 17:42:55 CET 2005 Kasimier Buchcik + + * include/libxml/schemasInternals.h xmlschemas.c: + Exposed targetNamespace for simple/complex types, model groups, + attribute groups and notations (reported by Michael Hewarth + to the mailing list). Added targetNamespace to xmlSchemaType, + xmlSchemaAttributeGroup and xmlSchemaNotation. + Tiny cosmetic change to the content model error report output. + * result//all_*.err result//any3_0_0.err result//choice_*.err + result//list0_0_1.err result//list0_1_1.err: Adapted output + of regression tests. + +Thu Jan 13 13:20:51 CET 2005 Kasimier Buchcik + + * xmlschemas.c: Put the fix of Daniel (from Tue Jan 11 14:41:47 CET) + back in, since I missed to update xmlschemas.c before doing + the previous commit. + +Thu Jan 13 12:59:25 CET 2005 Kasimier Buchcik + + * xmlschemas.c: Integrated xmlRegExecErrInfo and xmlRegExecNextValues + from xmlregexp.c to report expected elements on content model errors. + * all_*.err any3_0_0.err choice_*.err list0_0_1.err list0_1_1.err: + Adapted output of regression tests. + +Thu Jan 13 12:24:09 CET 2005 Daniel Veillard + + * config.h.in configure.in xmlmodule.c: trying to work around + the compilation problem on HP-UX + +Wed Jan 12 22:03:33 CET 2005 Daniel Veillard + + * pattern.c: fixed the fixed size array structure problem reported by + Patrick Streule + +Wed Jan 12 15:15:02 CET 2005 Daniel Veillard + + * elfgcchack.h testapi.c doc/libxml2-api.xml doc/*: regenerated + the API description, rebuilt, improved navigation in documentation + a bit. + +Wed Jan 12 14:17:14 CET 2005 Daniel Veillard + + * include/libxml/xmlregexp.h xmlregexp.c: extended xmlRegExecErrInfo() + and xmlRegExecNextValues() to return error transition strings too, + and sink state detection and handling. + +Tue Jan 11 14:41:47 CET 2005 Daniel Veillard + + * xmlschemas.c: fixed bug #163641 when the value passed for + an atomic list type is NULL. + +Tue Jan 11 10:14:33 HKT 2005 William Brack + + * Makefile.am configure.in: fixed dependency on python 2.3, + also small improvement for cygwin (bug 163273) + +Sun Jan 9 18:46:32 CET 2005 Daniel Veillard + + * gentest.py testapi.c: William noticed I forgot to add special + support for xmlmodules.c define + * xmlregexp.c include/libxml/xmlregexp.h: added terminal to + xmlRegExecErrInfo() API, adding new xmlRegExecNextValues() + entry point and refactored to use both code. + +Mon Jan 10 01:02:41 HKT 2006 William Brack + + * doc/xml.html, doc/FAQ.html: added an FAQ under Developer for + setting up a "private" library (after some list posts about + people having trouble doing it) + +Sat Jan 8 23:04:10 CET 2005 Daniel Veillard + + * xmlregexp.c: fixing behaviour for xmlRegExecErrInfo in case of + rollback + +Fri Jan 7 14:54:51 CET 2005 Daniel Veillard + + * TODO: small update + * xmlregexp.c: trying to add an API to get useful error informations + back from a failing regexp context. + +Thu Jan 6 17:35:41 HKT 2005 William Brack + + * xpath.c: fixed problem with xmlXPathErr when error number + subscript was out of range (bug 163055) + +Thu Jan 6 09:57:03 HKT 2005 William Brack + + * uri.c: fixed problem with xmlURIEscape when query part was + empty (actually fixed xmlURIEscapeStr to return an empty + string rather than NULL for empty string input) (bug 163079) + +Tue Jan 4 17:08:45 PST 2005 Aleksey Sanin + + * parser.c, parserInternal.c: fixed "col" calculation for + struct _xmlParserInput (based on patch from Rob Richards) + * include/libxml/xmlerror.h, error.c: propagated error column + number in the xmlError structure + +Tue Jan 4 22:47:22 CET 2005 Daniel Veillard + + * parser.c: fixed namespace bug in push mode reported by + Rob Richards + * test/ns6 result//ns6*: added it to the regression tests + * xmlmodule.c testModule.c include/libxml/xmlmodule.h: + added an extra option argument to module opening and defined + a couple of flags to the API. + +Tue Jan 4 21:16:05 CET 2005 Daniel Veillard + + * xmlmodule.c include/libxml/xmlmodule.h: applied patch from + Bjorn Reese, plus some cleanups + * elfgcchack.h doc/elfgcchack.xsl: fixed the stylesheet to + add the new header + * doc/* testapi.c: regenerated the API + +Tue Jan 4 18:47:19 CET 2005 Daniel Veillard + + * configure.in: making DSO support an option + * xmlmodule.c xmlreader.c include/libxml/xmlmodule.h: code + and documentation cleanups + * elfgcchack.h testapi.c doc/*: regenerated the docs and + checks for new module + * test/valid/REC-xml-19980210.xml: fix a small change introduced + previously + +Tue Jan 4 16:07:52 CET 2005 Daniel Veillard + + * Makefile.am config.h.in configure.in error.c libxml-2.0.pc.in + testModule.c testdso.c xml2-config.in xmllint.c xmlmodule.c + include/libxml/Makefile.am include/libxml/xmlerror.h + include/libxml/xmlmodule.h include/libxml/xmlversion.h.in + include/libxml/xmlwin32version.h.in: applied DSO support + patch 2 from Joel Reed + +Tue Jan 4 15:30:15 CET 2005 Daniel Veillard + + * configure.in: applied patch from Marcin Konicki for BeOS + +Mon Jan 3 13:57:21 PST 2005 Aleksey Sanin + + * parser.c: added GetLineNumber and GetColumnNumber functions for xmlReader + +Sun Jan 2 17:51:18 HKT 2005 William Brack + + Re-examined the problems of configuring a "minimal" library. + Synchronized the header files with the library code in order + to assure that all the various conditionals (LIBXML_xxxx_ENABLED) + were the same in both. Modified the API database content to more + accurately reflect the conditionals. Enhanced the generation + of that database. Although there was no substantial change to + any of the library code's logic, a large number of files were + modified to achieve the above, and the configuration script + was enhanced to do some automatic enabling of features (e.g. + --with-xinclude forces --with-xpath). Additionally, all the format + errors discovered by apibuild.py were corrected. + * configure.in: enhanced cross-checking of options + * doc/apibuild.py, doc/elfgcchack.xsl, doc/libxml2-refs.xml, + doc/libxml2-api.xml, gentest.py: changed the usage of the + element in module descriptions + * elfgcchack.h, testapi.c: regenerated with proper conditionals + * HTMLparser.c, SAX.c, globals.c, tree.c, xmlschemas.c, xpath.c, + testSAX.c: cleaned up conditionals + * include/libxml/[SAX.h, SAX2.h, debugXML.h, encoding.h, entities.h, + hash.h, parser.h, parserInternals.h, schemasInternals.h, tree.h, + valid.h, xlink.h, xmlIO.h, xmlautomata.h, xmlreader.h, xpath.h]: + synchronized the conditionals with the corresponding module code + * doc/examples/tree2.c, doc/examples/xpath1.c, doc/examples/xpath2.c: + added additional conditions required for compilation + * doc/*.html, doc/html/*.html: rebuilt the docs + +Sat Dec 25 18:10:02 HKT 2004 William Brack + + * parserInternals.c: fixed to skip (if necessary) the BOM for + encoding 'utf-16'. Completes the fix for bug #152286. + * tree.c, parser.c: minor warning cleanup, no change to logic + +Fri Dec 24 16:31:22 HKT 2004 William Brack + + * python/generator.py: added most required entires to + foreign encoding table, plus some additional logic to + assure only the 1st param uses the 't#' format. Fixes + bug #152286, but may still have some other UTF-16 problems. + +Thu Dec 23 23:44:08 HKT 2004 William Brack + + * Makefile.am, gentest.py: enhanced for enabling build in + a different directory. Added (optional) param to gentest.py + to specify the source directory (bug #155468) + * doc/Makefile.am: changed destination of NEWS from (top_srcdir) + to (top_builddir) (bug #155468) + * python/Makefile.am, python/generator.py: enhanced for enabling + build in a different directory(bug #155468). Added (optional) + param to generator.py to specify the source directory. Added + a new table of functions which have possible "foreign" encodings + (e.g. UTF16), and code to use python 't' format instead of + 'z' format (mostly solving bug #152286, but still need to + populate the table). + +Tue Dec 21 08:10:44 MST 2004 John Fleck + + * doc/site.xsl, doc/xml.html, plus rebuilt all the html pages + Change reference to new site for Solaris binaries, fixing bug + 160598 + + +Mon Dec 20 08:02:57 PST 2004 William Brack + + * parser.c: reset input->base within xmlStopParser + * xmlstring.c: removed call to xmlUTF8Strlen from within + xmlUTF8Strpos (Bill Moseley pointed out it was not + useful) + +Fri Dec 17 16:03:41 PST 2004 William Brack + + * valid.c: changed xmlErrValidWarning to use ctxt->warning + instead of ctxt->error for its reports (bug #160662) + +Fri Dec 17 14:52:17 PST 2004 William Brack + + * python/generator.py: modified to allow the ns and nsDefs + accessors to return None instead of error when no namespace + is present (bug #) + +Fri Dec 17 11:40:21 PST 2004 William Brack + + * doc/Makefile.am: changed maintainer-clean dependency with + suggestion from Crispin Flowerday (bug #157634) + * debugXML.c: fixed crash when ATTRIBUTE or DOCUMENT nodes + were specified with debugDumpNode (bug #160621) + +Fri Dec 10 11:24:41 CET 2004 Daniel Veillard + + * valid.c: fixed ID deallocation problem based on patch from + Steve Shepard fixes bug #160893 + * xmlmemory.c: improving comment. + * testapi.c: new test for xmlDictExists() is generated. + +Wed Dec 1 22:35:37 HKT 2004 William Brack + + * dict.c, xpath.c, include/libxml/hash.h: fixed up some gcc warnings, + no change to logic. New macro XML_CAST_FPTR to circumvent gcc + warnings on function pointer <-> object pointer (a hack). + +Mon Nov 29 14:07:18 CET 2004 Daniel Veillard + + * xpath.c: fixed a memory leak on errors in some circumstances #159812 + +Fri Nov 26 23:20:48 HKT 2004 William Brack + + * xmlIO.c: added a check within xmlOutputBufferWriteEscape to prevent + a dead loop on bad data (bug 159550) + +Fri Nov 26 13:09:04 CET 2004 Kasimier Buchcik + + * xmlschemas.c: Fixed strict/lax element wildcards: the children + of elements for which a declaration existed were still processed + by the wildcard mechanism (reported by philippe ventrillon to the + mailing list). + Changed the import and include machanism to share dictionaries. + +Fri Nov 26 11:44:36 CET 2004 Daniel Veillard + + * HTMLparser.c parser.c: make sure xmlCtxtReadFile and htmlCtxtReadFile + go through the catalog resolution. + * gentest.py testapi.c: fix a side effect wrning of the change + +Wed Nov 24 13:41:52 CET 2004 Daniel Veillard + + * dict.c include/libxml/dict.h: added xmlDictExists() to the + dictionary interface. + * xmlreader.c: applying xmlTextReaderHasAttributes fix for namespaces + from Rob Richards + +Wed Nov 17 13:54:37 CET 2004 Kasimier Buchcik + + * xmlschemas.c: tiny enhancement for content model error reports + (#157190, #143948). Removed abbreviations: CT, ST and WC + (#157190, reported by Frans Englich). + Initial: no report of local components. + * result/schemas/all* result/schemas/any3_0_0.err + result/schemas/choice* + result/schemas/cos-st-restricts-1-2-err_0_0.err + result/schemas/derivation-ok-extension-err_0_0.err + result/schemas/derivation-ok-extension_0_0.err + result/schemas/derivation-ok-restriction-2-1-1_0_0.err + result/schemas/derivation-ok-restriction-4-1-err_0_0.err + result/schemas/deter0_0_0.err result/schemas/extension1_0_2.err + result/schemas/facet-unionST-err1_0_0.err + result/schemas/hexbinary_0_1.err + result/schemas/list* result/schemas/restriction-attr1_0_0.err + result/schemas/vdv-first4_0_1.err result/schemas/vdv-first4_0_2.err: + Adapted output. + +Mon Nov 15 13:04:28 CET 2004 Kasimier Buchcik + + * xmlschemas.c: Moved execution of xmlSchemaCheckDefaults to + xmlSchemaTypeFixup; this ensures facets of inherited types to be + checked prior to facets of derived types - which caused a seg + fault otherwise (bug #158216, reported by Frans Englich). + +Sun Nov 14 22:23:18 HKT 2004 William Brack + + * gentest.py, testapi.c: further enhancement, now all + compilation warnings have been fixed. + * xmlschemastypes.c: added NULL check for one function + +Fri Nov 12 23:58:14 HKT 2004 William Brack + + * xpath.c: trivial change (changed CHECK_CONTEXT to CHECK_CTXT + on a couple of lines) + * gentest.py, testapi.c: enhanced to reduce compilation warnings + +Fri Nov 12 16:12:48 CET 2004 Kasimier Buchcik + + * xmlschemas.c: Un-commented a TODO in xmlSchemaParseElement. + +Fri Nov 12 14:55:36 CET 2004 Kasimier Buchcik + + * xmlschemas.c: Correct symbol space for 'all' and 'choice'. + * xmlschemastypes.c include/xmlschemastypes.h: Added 'replace' + normalization for 'normalizedString'. + Added xmlSchemaWhiteSpaceReplace to the API. + +Thu Nov 11 21:43:02 CET 2004 Daniel Veillard + + * Makefile.am: forgot a $(srcdir) + * encoding.c: stupid error wrong name #157976 + +Wed Nov 10 15:35:25 CET 2004 Daniel Veillard + + * NEWS configure.in doc/*: preparing release of libxml2-2.6.16 + +Wed Nov 10 12:55:18 CET 2004 Daniel Veillard + + * python/generator.py python/libxml.c python/libxml2class.txt + python/libxml_wrap.h python/types.c: Applied patch from Brent + Hendricks adding support for late DTD validation. + * python/tests/Makefile.am python/tests/dtdvalid.py + python/tests/test.dtd: integrated the provided regression test + +Tue nov 9 19:24:31 CET 2004 Dodji Seketeli + + * configure.in: detect when struct sockaddr_storage + has the __ss_family member instead of ss_family and + behave accordingly. We now can use ipv6 on aix. + +Tue Nov 9 17:15:46 CET 2004 Daniel Veillard + + * Makefile.am gentest.py testapi.c: integrated in "make tests" + added -q option, and more conditional features fixes + * catalog.c debugXML.c parser.c testThreads.c xmllint.c + xmlschemastypes.c xmlwriter.cinclude/libxml/catalog.h + include/libxml/debugXML.h: various compilation and conditional + cleanups. + * doc/*: regenerated + +Tue Nov 9 15:59:50 CET 2004 Daniel Veillard + + * gentest.py testapi.c: better handling of conditional features + * HTMLparser.c SAX2.c parserInternals.c xmlwriter.c: more testing + on parser contexts closed leaks, error messages + +Tue Nov 9 10:21:37 GMT 2004 William Brack + + * xpath.c: fixed problem concerning XPath context corruption + during function argument evaluation (bug 157652) + +Mon Nov 8 18:54:52 CET 2004 Daniel Veillard + + * testapi.c: more types. + * parserInternals.c xpath.c: more fixes + +Mon Nov 8 18:16:43 CET 2004 Daniel Veillard + + * gentest.py testapi.c: better parser options coverage + * SAX2.c xpath.c: more cleanups. + +Tue Nov 9 01:50:08 CET 2004 Daniel Veillard + + * testapi.c: trying to fix some optional support brokenness + +Mon Nov 8 17:25:27 CET 2004 Daniel Veillard + + * gentest.py testapi.c: more coverage + * debugXML.c parser.c xmlregexp.c xpath.c: more fixes + +Mon Nov 8 15:02:39 CET 2004 Daniel Veillard + + * gentest.py testapi.c: more coverage + * SAX2.c parser.c parserInternals.c: more fixes + +Mon Nov 8 12:55:16 CET 2004 Daniel Veillard + + * parser.c testapi.c xmlIO.c xmlstring.c: more fixes. + +Mon Nov 8 11:24:57 CET 2004 Daniel Veillard + + * gentest.py testapi.c: more types, more coverage + * parser.c parserInternals.c relaxng.c valid.c xmlIO.c + xmlschemastypes.c: more problems fixed + +Mon Nov 8 10:24:28 HKT 2004 William Brack + + * gentest.py: fixed test file corruption problem + +Sun Nov 7 13:18:05 CET 2004 Daniel Veillard + + * gentest.py testapi.c: fixed typos and avoid Catalogs verbosity + +Sat Nov 6 23:25:16 CET 2004 Daniel Veillard + + * testapi.c: augmented the number of types + +Sat Nov 6 20:24:07 CET 2004 Daniel Veillard + + * HTMLtree.c tree.c xmlreader.c xmlwriter.c: a number of new + bug fixes and documentation updates. + +Sat Nov 6 15:50:11 CET 2004 Daniel Veillard + + * gentest.py testapi.c: augmented type autogeneration for enums + * xpath.c include/libxml/xpath.h: removed direct error reporting. + +Sat Nov 6 14:27:18 CET 2004 Daniel Veillard + + * encoding.c: fixed a regression in iconv support. + +Fri Nov 5 18:19:23 CET 2004 Daniel Veillard + + * gentest.py testapi.c: autogenerate a minimal NULL value sequence + for unknown pointer types + * HTMLparser.c SAX2.c chvalid.c encoding.c entities.c parser.c + parserInternals.c relaxng.c valid.c xmlIO.c xmlreader.c + xmlsave.c xmlschemas.c xmlschemastypes.c xmlstring.c xpath.c + xpointer.c: This uncovered an impressive amount of entry points + not checking for NULL pointers when they ought to, closing all + the open gaps. + +Fri Nov 5 16:26:28 UTC 2004 William Brack + + * catalog.c: fixed problem with NULL entry (bug 157407) + * xpath.c: fixed a couple of warnings (no change to logic) + +Fri Nov 5 15:30:43 CET 2004 Daniel Veillard + + * gentest.py testapi.c: more coverage + * xmlunicode.c: one fix + +Fri Nov 5 23:15:51 CET 2004 Daniel Veillard + + * entities.c: fixed a compilation problem on a recent change + +Fri Nov 5 12:50:09 CET 2004 Daniel Veillard + + * gentest.py testapi.c: more coverage + * nanoftp.c tree.c: more fixes + +Fri Nov 5 11:02:28 CET 2004 Daniel Veillard + + * gentest.py testapi.c: fixed the way the generator works, + extended the testing, especially with more real trees and nodes. + * HTMLtree.c tree.c valid.c xinclude.c xmlIO.c xmlsave.c: a bunch + of real problems found and fixed. + * entities.c: fix error reporting to go through the new handlers + +Thu Nov 4 18:44:56 CET 2004 Daniel Veillard + + * parser.c: dohh ... stupid change killing xmlParseDoc() + +Thu Nov 4 18:32:22 CET 2004 Daniel Veillard + + * gentest.py testapi.c: changing the way the .c is generated, + extending the tests coverage + * include/libxml/nanoftp.h nanoftp.c elfgcchack.h doc/*: fixing some + function signatures, regenerating stuff + * SAX2.c parser.c xmlIO.c: another set of bug fixes and API hardening + +Thu Nov 4 13:32:19 CET 2004 Daniel Veillard + + * gentest.py testapi.c: extending the tests coverage + +Thu Nov 4 11:52:28 CET 2004 Daniel Veillard + + * Makefile.am: gentest.py was missing from the EXTRA_DIST + +Thu Nov 4 11:48:47 CET 2004 Daniel Veillard + + * gentest.py testapi.c: extending the tests coverage + * HTMLtree.c tree.c xmlsave.c xpointer.c: more fixes and cleanups + +Thu Nov 4 00:25:36 CET 2004 Daniel Veillard + + * gentest.py testapi.c: more fixes and extending the tests coverage + * nanoftp.c xmlIO.c: more fixes and hardening + +Wed Nov 3 20:16:24 CET 2004 Daniel Veillard + + * gentest.py testapi.c: more fixes and extending the tests coverage + * valid.c: bunch of cleanups and 2 leaks removed + +Wed Nov 3 18:06:44 CET 2004 Daniel Veillard + + * gentest.py testapi.c: more fixes and extending the tests coverage + * list.c tree.c: more fixes and hardening + +Wed Nov 3 15:19:22 CET 2004 Daniel Veillard + + * gentest.py testapi.c: more fixes and extending the tests coverage + * relaxng.c include/libxml/relaxng.h: adding a type init interface + * include/libxml/xmlerror.h parser.c xmlreader.c xmlwriter.c: more + cleanups and bug fixes raised by the regression tests + +Wed Nov 3 12:49:30 CET 2004 Daniel Veillard + + * gentest.py testapi.c: more fixes and extending the tests coverage + * xmlwriter.c list.c: more hardeing of APIs + * doc/apibuild.py: skip testapi.c when scanning the C files. + +Tue Nov 2 23:09:06 CET 2004 Daniel Veillard + + * gentest.py testapi.c: more testing and coverage + * elfgcchack.h xmlstring.c include/libxml/xmlstring.h: more cleanups + * doc/*: rebuilt + +Tue Nov 2 19:44:32 CET 2004 Daniel Veillard + + * gentest.py testapi.c: more developments on the API testing + * HTMLparser.c tree.c: more cleanups + * doc/*: rebuilt + +Tue Nov 2 15:49:34 CET 2004 Daniel Veillard + + * xmlmemory.c include/libxml/xmlmemory.h: adding xmlMemBlocks() + * Makefile.am gentest.py testapi.c: work on generator of an + automatic API regression test tool. + * SAX2.c nanoftp.c parser.c parserInternals.c tree.c xmlIO.c + xmlstring.c: various API hardeing changes as a result of running + teh first set of automatic API regression tests. + * test/slashdot16.xml: apparently missing from CVS, commited it + +Mon Nov 1 15:54:18 CET 2004 Daniel Veillard + + * xpath.c: fixed an UTF-8 parsing bug reported by Markus Bertheau + on #fedora-devel + +Sun Oct 31 22:03:38 CET 2004 Daniel Veillard + + * parser.c: fixed a bug reported by Petr Pajas on the list and + affecting XML::Libxml + +Sun Oct 31 16:33:54 CET 2004 Daniel Veillard + + * encoding.c doc/examples/testWriter.c: Fixed bug #153937, making + sure the conversion functions return the number of byte written. + Had to fix one of the examples. + +Fri Oct 29 14:16:56 CEST 2004 Daniel Veillard + + * doc/xmllint.1 doc/xmllint.xml: indicate - means stdin closing #156626 + +Fri Oct 29 14:03:36 CEST 2004 Daniel Veillard + + * python/libxml.c: register xmlSchemaSetValidErrors, patch from + Brent Hendricks in the mailing-list + * include/libxml/valid.h HTMLparser.c SAX2.c valid.c + parserInternals.c: fix #156626 and more generally how to find out + if a validation contect is part of a parsing context or not. This + can probably be improved to make 100% sure that vctxt->userData + is the parser context too. It's a bit hairy because we can't + change the xmlValidCtxt structure without breaking the ABI since + this change xmlParserCtxt information indexes. + +Wed Oct 27 19:26:20 CEST 2004 Daniel Veillard + + * ChangeLog NEWS configure.in doc/*: preparing release 2.6.15 + * debugXML.c nanoftp.c xmlschemas.c xmlschemastypes.c: cleanups + +Wed Oct 27 09:31:24 PDT 2004 William Brack + + * uri.c: fixed a stupid mistake in xmlBuildRelativeURI + (bug 156527) + +Wed Oct 27 11:44:35 CEST 2004 Daniel Veillard + + * nanoftp.c nanohttp.c: second part of the security fix for + xmlNanoFTPConnect() and xmlNanoHTTPConnectHost(). + +Tue Oct 26 23:57:02 CEST 2004 Daniel Veillard + + * nanoftp.c: applied fixes for a couple of potential security problems + * tree.c valid.c xmllint.c: more fixes on the string interning checks + +Tue Oct 26 18:09:59 CEST 2004 Daniel Veillard + + * debugXML.c include/libxml/xmlerror.h: added checking for names + values and dictionaries generates a tons of errors + * SAX2.ccatalog.c parser.c relaxng.c tree.c xinclude.c xmlwriter.c + include/libxml/tree.h: fixing the errors in the regression tests + +Mon Oct 25 16:04:22 PDT 2004 William Brack + + * parser.c: modified the handling of _private for entity + expansion (bug 155816) + +Mon Oct 25 17:11:37 CEST 2004 Daniel Veillard + + * parser.c: fixed the leak reported by Volker Roth on the list + * test/ent10 result//ent10*: added a specific test for the problem + +Sat Oct 23 11:07:41 PDT 2004 William Brack + + * valid.c: unlinked the internal subset within xmlValidateDtd + (bug 141827) + * configure.in: added -Wall to developer's flags + * doc/examples/reader4.res: added to CVS + +Fri Oct 22 16:36:50 CEST 2004 Daniel Veillard + + * HTMLparser.c: added support for HTML PIs #156087 + * test/HTML/python.html result/HTML/python.html*: added specific tests + +Fri Oct 22 15:20:23 CEST 2004 Daniel Veillard + + * threads.c: fixed nasty bug #156087 + +Fri Oct 22 21:04:20 CEST 2004 Daniel Veillard + + * python/libxml.c: fixed a problem occuring only in x86_64 when + very large error messages are raised to the Python handlers. + +Thu Oct 21 18:03:21 CEST 2004 Daniel Veillard + + * xmlschemas.c: fixed a memory bug + * doc/examples/reader4.c doc/examples/*: added test from Graham Bennett + and regenerated the directory + +Tue Oct 19 11:06:39 CEST 2004 Daniel Veillard + + * include/libxml/xmlreader.h xmlreader.c: applied patch from + Graham Bennett adding 4 convenience functions to the reader API. + +Fri Oct 15 11:22:48 PDT 2004 William Brack + + * debugXML.c: excluded a few nodes (with no content) from the + string check routine. + +Fri Oct 15 10:48:30 EDT 2004 Daniel Veillard + + * debugXML.c include/libxml/xmlerror.h: added UTF-8 string checking, + raise a problem, need debug + +Wed Oct 13 02:17:36 CEST 2004 Daniel Veillard + + * python/Makefile.am: applied patch from Thomas Fitzsimmons fixing + #155240 building outside the source tree. but make tests fails. + +Mon Oct 11 16:26:51 CEST 2004 Daniel Veillard + + * debugXML.c include/libxml/xmlerror.h: added namespace checking + +Sat Oct 9 22:36:21 CEST 2004 Daniel Veillard + + * debugXML.c: some framework preparation to add namespace checkings + +Thu Oct 7 15:12:58 CEST 2004 Daniel Veillard + + * debugXML.c include/libxml/debugXML.h include/libxml/xmlerror.h: + adding the tree debug mode + * parser.c relaxng.c tree.c xpath.c: fixing various problems reported + by the debug mode. + * SAX2.c: another tree fix from Rob Richards + +Wed Oct 6 10:50:03 PDT 2004 William Brack + + * catalog.c: small change to last fix, to get xml:base right + +Wed Oct 6 09:33:51 PDT 2004 William Brack + + * catalog.c: added code to handle , including dumping + to output (bug 151924). + * xmlcatalog.c, xmlstring.c, parser.c: minor compiler warning + cleanup (no change to logic) + +Mon Oct 4 16:09:07 CEST 2004 Daniel Veillard + + * configure.in debugXML.c include/libxml/xmlversion.h.in + include/libxml/xmlwin32version.h.in: revamped the XML debugging + module and prepare for a new checking mode + +Mon Oct 4 13:53:24 CEST 2004 Daniel Veillard + + * parser.c: applied patch from Malcolm Tredinnick fixing bug #152426 + +Mon Oct 4 12:26:28 CEST 2004 Daniel Veillard + + * python/generator.py python/libxml.c python/tests/outbuf.py: + applied patch from Malcolm Tredinnick fixing bug #154294 + related to saving to python file objects. + +Sat Oct 2 21:08:51 PDT 2004 William Brack + + * tree.c: changed xmlHasNsProp to properly handle a request for + the default namespace (bug 153557) + +Sat Oct 2 18:18:27 PDT 2004 William Brack + + * parser.c: fixed problem with dictionary handling within + xmlParseInNodeContext (bug 153175) + +Sat Oct 2 15:46:37 PDT 2004 William Brack + + * check-relaxng-test-suite.py, check-relaxng-test-suite2.py, + check-xinclude-test-suite.py, check-xml-test-suite.py, + check-xsddata-test-suite.py, doc/examples/index.py: changed + changed sys.path setting from 'append' to 'insert' (patch + supplied by Malcolm Tredinnick) (bug 153716) + +Sat Oct 2 15:03:14 PDT 2004 William Brack + + * include/libxml/parserInternals.h: added two new macros + IS_ASCII_LETTER and IS_ASCII_DIGIT used with (html) + parsing and xpath for testing data not necessarily + unicode. + * HTMLparser.c, xpath.c: changed use of IS_LETTER_CH and + IS_DIGIT_CH macros to ascii versions (bug 153936). + +Fri Oct 1 20:37:25 PDT 2004 William Brack + + * error.c: added some coding to attempt to display which file + contains an error when using XInclude (bug 152623) + +Thu Sep 30 11:19:17 CEST 2004 Daniel Veillard + + * configure.in: stupid cut'n paste bug in xmllint detection + +Wed Sep 29 17:47:56 CEST 2004 Daniel Veillard + + * configure.in doc/*: releasing 2.6.14, rebuilding the docs + +Wed Sep 29 15:00:11 CEST 2004 Kasimier Buchcik + + * xmlschemas.c include/libxml/xmlerror.h include/libxml/xmlschemas.h + include/libxml/schemasInternals.h: Parsing of + - handle attribute 'mixed', catch illegal attributes. + Parsing of - handle attributes 'abstract', + 'final' and 'block', catch illegal attributes. + Validation of complex types - handle abstract types. + Added handling of default/fixed attributes and element values. + Per validation option attribute nodes/text nodes are created + on the instance. + Added the corresponding constraints for fixed/default. + Added xmlSchemaSetValidOptions, xmlSchemaGetValidOptions + to the external API. + Extended element declaration constraints. + Got rid of perseverative creation of temporery validation/parser + contexts. + Added handling of xsi:schemaLocation and + xsi:noNamespaceSchemaLocation. + Fixed xsi:type component resolution if using non-prefixed + QNames. + * xmlregexp.c xmlschemas.c include/libxml/xmlautomata.h: + Enabled namespace awareness of the content model if using the + model group "all". + * test/schemas/bug152470_1.xsd: Removed an "abstract" attribute, + which broke the test. + * xstc/xstc.py: Workaround to accomodate case insensitive + test definitions in ms-test.def.xml (was missing in a previous + commit). + +Wed Sep 29 11:03:10 CEST 2004 Daniel Veillard + + * python/drv_libxml2.py: another patch from Malcolm Tredinnick + adding option not to load dtd from the drv_libxml2.py module + #134633 + +Tue Sep 28 14:30:22 CEST 2004 Daniel Veillard + + * acconfig.h config.h.in configure.in xmlIO.c xmlregexp.c xmlschemas.c + xmlschemastypes.c: another patch from Malcolm Tredinnick fixing + warning generated by the Nonstop Kernel Open System Services + compiler #151710 + +Tue Sep 28 13:07:37 CEST 2004 Daniel Veillard + + * python/libxml.py: applied patch from Malcolm Tredinnick fixing + python exception hierarchy #139824 + +Sun Sep 26 16:40:24 CEST 2004 Daniel Veillard + + * valid.c TODO: applied patch from Malcolm Tredinnick fixing errata + E20 concerning NMTOKENS and co. validation #153722 + * result/VC/AttributeNmtokens test/VC/AttributeNmtokens + test/VCM/AttributeNmtokens.xml: also added tests from Malcolm + +Sun Sep 26 16:24:44 CEST 2004 Daniel Veillard + + * xstc/xstc.py: applied patch from Malcolm Tredinnick fixing space/tabs + #153713 + * xpath.c: fixed a realloc potential problem + +Fri Sep 24 16:14:12 CEST 2004 Daniel Veillard + + * Makefile.am: fixed make valgrind xstc + +Thu Sep 23 18:23:46 CEST 2004 Daniel Veillard + + * xmlschemastypes.c: fixing an out of bound adressing issue + +Thu Sep 23 15:14:12 CEST 2004 Daniel Veillard + + * HTMLparser.c parser.c relaxng.c xmlschemas.c: more memory related + code cleanups. + +Thu Sep 23 01:04:30 CEST 2004 Daniel Veillard + + * parser.c: fixed a bunch of errors when realloc failed. + +Wed Sep 22 23:56:05 CEST 2004 Daniel Veillard + + * threads.c uri.c: couple of memory fixes from Mark Vakoc reported + by Purify on Windows. + +Mon Sep 20 22:01:47 CEST 2004 Daniel Veillard + + * xmllint.c: added --timing --copy timing for the copy + * vms/build_libxml.com: applied patch from Craig Berry + to build with recent releases + +Fri Sep 17 21:25:33 PDT 2004 William Brack + + * nanohttp.c, include/libxml/nanohttp.h: added the routine + xmlNanoHTTPContentLength to the external API (bug151968). + * parser.c: fixed unnecessary internal error message (bug152060); + also changed call to strncmp over to xmlStrncmp. + * encoding.c: fixed compilation warning (bug152307). + * tree.c: fixed segfault in xmlCopyPropList (bug152368); fixed + a couple of compilation warnings. + * HTMLtree.c, debugXML.c, xmlmemory.c: fixed a few compilation + warnings; no change to logic. + +Fri Sep 17 10:40:23 CEST 2004 Daniel Veillard + + * parser.c: removed some extern before function code reported by + Kjartan Maraas on IRC + * legacy.c: fixed compiling when configuring out the HTML parser + * Makefile.am: added a declaration for CVS_EXTRA_DIST + * HTMLparser.c: beginning of an attempt at cleaning up the construction + of the HTML parser data structures, current data generate a huge + amount of ELF relocations at loading time. + +Fri Sep 17 10:36:23 CEST 2004 Daniel Veillard + + * ChangeLog: applied fix from Stepan Kasal to fix duplication + in the change log and cleanup of space/tabs issues. + +Thu Sep 16 13:24:27 CEST 2004 Kasimier Buchcik + + * xmlschemas.c include/libxml/schemasInternals.h + test/schemas/bug152470_1.* result/schemas/bug152470_1_1*: + Simpified attribute wildcard creation and assignment to get rid + of memory leaks. + Restructured the validation process. + Restructured and expanded parsing of . + Added initial handing of xsi:type. + Advanced handling of xsi:nil (should work now for simple types). + Added construction of schemata using xsi:schemaLocation and + xsi:noNamespaceSchemaLocation; this is not enabled, since + no corresponding API exists yet. + Moved the content model to complex type components. + Resolution of types for attributes will look for simple types + only (incl. all the built-in simple types). + Extended parsing of 'anyAttribute'. + Fixed content-type type for complex types if derived from + 'anyType' using the short-hand form (see bug # 152470, + submitted by Thilo Jeremias). + * include/libxml/xmlschematypes.h: Cleaned up some comments. + * xstc/xstc.py: Workaround to accomodate case insensitive + test definitions in ms-test.def.xml. + * result/schemas/deter0_0_0.err result/schemas/ns0_0_2.err + result/schemas/ns0_1_2.err: Adapted. + +Sat Sep 11 09:04:22 PDT 2004 William Brack + + * xmlwriter.c: changed char array initialisation to avoid a + complaint from some compiler(s) (bug 152308) + +Thu Sep 9 07:22:11 PDT 2004 William Brack + + * encoding.c: applied fixes for the UTF8ToISO8859x transcoding + routine suggested by Mark Itzcovitz + +Wed Sep 8 22:50:27 CEST 2004 Daniel Veillard + + * valid.c xmlsave.c: fixed 2 problems raised by #152140, one + which is that notation not in the internal subset should + not be saved, and the second more nasty on an error saving + NOTATIONs, if there is a proof that nobody uses notations ! + +Wed Sep 8 11:04:27 CEST 2004 Kasimier Buchcik + + * xmlschemas.c include/libxml/xmlschemas.h: Added the function + xmlSchemaValidateOneElement to the XML Schema validation API, + as proposed by Jeffrey Fink - see bug # 152073. + +Tue Sep 7 11:10:36 CEST 2004 Daniel Veillard + + * configure.in doc/Makefile.am xstc/Makefile.am: some cleanup + checking for xmllint and xsltproc in configure.in, fixed + make dist w.r.t. the new xstc subdir. + * doc/*: rebuilt + +Mon Sep 6 16:42:59 CEST 2004 Kasimier Buchcik + + * xstc/xstc.py: Changed to finally validate instance documents. + +Mon Sep 6 16:04:01 CEST 2004 Daniel Veillard + + * xstc/Makefile.am Makefile.am: integrated to "make valgrind", + heavy ... weight 250MB of VM ! + +Mon Sep 6 14:54:39 CEST 2004 Daniel Veillard + + * xstc/Makefile.am xstc/xstc-to-python.xsl xstc/xstc.py Makefile.am: + more cleanup in integrating the xstc testsuite + +Mon Sep 6 13:56:28 CEST 2004 Daniel Veillard + + * Makefile.am configure.in xstc/.cvsignore xstc/Makefile.am: + starting to integrate the xstc suite in the normal regression + tests + +Mon Sep 6 13:14:11 CEST 2004 Kasimier Buchcik + + * xstc/sun-test-def.xml: The "tsDir" attribute was not + set correctly. + +Mon Sep 6 11:52:50 CEST 2004 Daniel Veillard + + * check-xinclude-test-suite.py: when output and expected do not match + exactly run diff to put the differences in the log c.f. #148691 + +Mon Sep 6 11:17:35 CEST 2004 Kasimier Buchcik + + * xstc/xstc-to-python.xslt xstc/ms-test-def.xml xstc/nist-test-def.xml + xstc/sun-test-def.xml: Initial release of generation files to + create python test scripts, which will run the W3C XML Schema Test + Collection. The ms-test-def.xml and sun-test-def.xml files + were extracted from the online HTML XSTC results [1], since they did + not exist for the SUN tests, and only partially did exist for the + MS tests. The NIST definition file was created by concatenation + of the existing definition files for each single datatype. + The stylesheet "xstc-to-python.xslt" should be run against the + definition files to produce the python scripts. + [1] "http://www.w3.org/XML/2001/05/xmlschema-test-collection/ + results-master.html" + +Fri Sep 3 20:29:59 CEST 2004 Kasimier Buchcik + + * xmlschemas.c include/libxml/schemasInternals.h + include/libxml/xmlerror.h: Fixed a seg fault in xmlGetQNameProp: + a format argument was missing. + Fixed wrong assignment of the owner of a wildcard in + xmlSchemaBuildAttributeValidation (in the shorthandform of + ; this caused a seg fault, due to a double-free + of the wildcard. + Added a check for circular attribute group references. + Added a check for circular model group definition references. + Fixed a dublicate xmlParserErrors enum value - see bug #151738. + +Fri Sep 3 10:08:13 PDT 2004 William Brack + + * xmlstring.c: modified comments on xmlGetUTF8Char in + response to bug 151760 (no change to logic) + +Tue Aug 31 09:46:18 PDT 2004 William Brack + + * xmlstring.c: fixed error reported on the list caused by + my last change + +Tue Aug 31 15:41:52 CEST 2004 Daniel Veillard + + * NEWS configure.in doc/*: release of libxml2-2.6.13 + +Tue Aug 31 14:14:30 CEST 2004 Daniel Veillard + + * xmlIO.c: fixing #151456, an encoding error could generate + a serialization loop. + +Tue Aug 31 11:34:04 CEST 2004 Daniel Veillard + + * Makefile.am: also produce a tar ball with just the sources + * xmllint.c: added --path option and --load-trace options to + xmllint, RFE #147740 based on xsltproc versions + * doc/xmllint.* doc/*: updated the man page and rebuilt + +Tue Aug 31 10:37:23 CEST 2004 Daniel Veillard + + * xmlschemastypes.c: "" is a valid hexbinary string dixit xmlschema-dev + * result/schemas/hexbinary_0_1.err test/schemas/hexbinary_1.xml: + update the test. + * test/ns5 result//ns5*: added a test for the namespace bug fixed + in previous commit. + * Makefile.am: added a message in the regression tests + +Mon Aug 30 23:36:21 PDT 2004 William Brack + + * SAX2.c: fixed bug introduced during OOM fixup causing problems + with default namespace when a named prefix with the same href + was present (reported on the mailing list by Karl Eichwalder. + * xmlstring.c: modified xmlCheckUTF8 with suggested code from + Julius Mittenzwei. + * dict.c: added a typecast to try to avoid problem reported by + Pascal Rodes. + +Mon Aug 30 12:45:46 CEST 2004 Kasimier Buchcik + + * xmlschemas.c: Fixed a bug in xmlSchemasCheckFacet, which did + not create a computed value on a facet and thus crashed during + validation of instances. + Expanded validity checks for min/maxOccurs attributes. + Expanded validity checks for the value of the attribute "form". + +Fri Aug 27 18:32:24 PST 2004 William Brack + + * xmlstring.c: fixed a problem with xmlCheckUTF8 reported on the + mailing list by Julius Mittenzwei + +Fri Aug 27 00:13:39 CEST 2004 Daniel Veillard + + * libxml.spec.in: added BuildRequires: zlib-devel, fixes + Red Hat bug #124942 + +Thu Aug 26 12:27:23 CEST 2004 Daniel Veillard + + * parser.c: remove a warning on Solaris + * xmlschemastype.c: fix a crashing bug #151111 + +Wed Aug 25 22:20:18 CEST 2004 Kasimier Buchcik + + * test/schemas/import-bad-1_0.imp: Added missing test file. + * xmlschemas.c include/libxml/xmlerror.h include/libxml/xmlschemas.h: + Substituted the obsolete xmlSchemaValidError(s) for xmlParserErrors + - see #150840. + Changed the import of schemas to allow failure of location + of a resource to be imported. + * result/schemas/all_* result/schemas/any3_0_0.err + result/schemas/choice_* result/schemas/import1_0_0.err + result/schemas/list0_0_1.err result/schemas/list0_1_0.err + result/schemas/list0_1_1.err result/schemas/ns0_0_2.err + result/schemas/ns0_1_2.err: Adapted regression test results. + +Tue Aug 24 20:49:15 MDT 2004 John Fleck + + * doc/tutorial/xmltutorial.xml, xmltutorial.pdf, *.html + fix Xpath memory leak (thanks to sKaBoy and William Brack) + +Tue Aug 24 21:10:59 CEST 2004 Igor Zlatkovic + + * parser.c: fixed path problem in DTD loading reported by + Sameer Abhinkar + +Tue Aug 24 16:40:51 CEST 2004 Igor Zlatkovic + + * win32/configure.js: added support for version extra + * win32/Makefile.*: upgraded to zlib 1.2.1 + +Mon Aug 23 14:33:54 CEST 2004 Daniel Veillard + + * configure.in: removing -O -g from default gcc flags #150828 + +Sun Aug 22 16:26:46 CEST 2004 Daniel Veillard + + * configure.in doc/* NEWS: preparing 2.6.12 release, updated and + and rebuilt the docs. + +Sun Aug 22 16:07:20 CEST 2004 Daniel Veillard + + * python/libxml.c: fix a problem on last commit + +Sun Aug 22 15:16:53 CEST 2004 Daniel Veillard + + * xmllint.c xpath.c include/libxml/xpath.h + include/libxml/xpathInternals.h python/libxml.c + python/libxml_wrap.h: trying to remove some warning when compiling + on Fedora Core 3 and 64bits + +Sat Aug 21 0:035:10 CET 2004 Kasimier Buchcik + + * xmlschemas.c: modified parsing of , , , + , , , . + Fixed schema defaults (elementFormDefault, etc.) for included + schemas. + Fixed a bug which reported attributes as invalid on + elements declarations with the built-in type 'anyType'. + Added "lax" validation of the content of elements of type + 'anyType'. + Fixed: element declarations with the same name were treated + as duplicate if located in the subtree of -> . + (This was bug 150623, submitted by Roland Lezuo) + Fixed cleanup of error codes in xmlSchemaValidateDoc as proposed + by Igor Kapitanker. (This was bug 150647, submitted by Igor + Kapitanker) + * xmlschemastypes.c: Changed the type of anyType to + XML_SCHEMAS_ANYTYPE. + * include/libxml/xmlerror.h: Added schema parser errors. + * result/schemas/bug145246_0_0* + result/schemas/extension1_0_2.err: Changed test results. + * result/schemas/ct-sc-nobase_0_0* + result/schemas/facet-whiteSpace_0_0* + result/schemas/import1_0_0* result/schemas/import2_0_0* + result/schemas/include2_0_0* result/schemas/include3_0_0* + result/schemas/restriction-attr1_0_0* + result/schemas/seq-dubl-elem1_0_0* + result/schemas/xsd-list-itemType_0_0*: Added new rest results. + test/schemas/bug145246.xsd.imp test/schemas/ct-sc-nobase_0* + test/schemas/facet-whiteSpace_0* test/schemas/import1_0* + test/schemas/import2_0* test/schemas/include2_0* + test/schemas/include3_0* test/schemas/restriction-attr1_0* + test/schemas/seq-dubl-elem1_0* test/schemas/xml.xsd + test/schemas/xsd-list-itemType_0*: Added new tests and missing + files. + +Fri Aug 20 18:51:36 CEST 2004 Daniel Veillard + + * Makefile.am configure.in: a bit of cleanup and a extra variable for + CVS dist + +Thu Aug 19 07:44:07 MDT 2004 John Fleck + + * doc/xmllint.xml, xmllint.1, xmllint.html: + Edit and rebuild the man pages with Daniel's C14 update + +Wed Aug 18 19:15:27 PDT 2004 William Brack + + * parser.c: fixed missing line numbers on entity as reported + on the list by Steve Cheng + +Wed Aug 18 14:04:31 PDT 2004 William Brack + + * configure.in globals.c include/libxml/xmlversion.h.in + include/libxml/xmlwin32version.h.in: added some code to + include the CVS ChangeLog version in the xmlParserVersion + string (printed by xmllint with --version) + +Wed Aug 18 11:14:06 CEST 2004 Daniel Veillard + + * xmlschemas.c include/libxml/xmlschemas.h python/generator.py + python/libxml.c python/libxml_wrap.h python/types.c + python/tests/schema.py python/tests/Makefile.am: Applied patch + from Torkel Lyng to add Schemas support to the Python bindings + and extend the schemas error API, registered a new test. + * doc/* elfgcchack.h: rebuilt to regenerate the bindings + +Mon Aug 16 14:36:25 CEST 2004 Daniel Veillard + + * debugXML.c: added help for new set shell command + * xinclude.c xmllint.c xmlreader.c include/libxml/parser.h: + added parser option to not generate XInclude start/end nodes, + added a specific option to xmllint to test it fixes #130769 + * Makefile.am: regression test the new feature + * doc/xmllint.1 doc/xmllint.xml: updated man page to document option. + +Mon Aug 16 02:42:30 CEST 2004 Daniel Veillard + + * xmlIO.c: small typo pointed out by Mike Hommey + * doc/xmllint.xml, xmllint.html, xmllint.1: slightly improved + the --c14n description, c.f. #144675 . + * nanohttp.c nanoftp.c: applied a first simple patch from + Mike Hommey for $no_proxy, c.f. #133470 + * parserInternals.c include/libxml/parserInternals.h + include/libxml/xmlerror.h: cleanup to avoid 'error' identifier + in includes #137414 + * parser.c SAX2.c debugXML.c include/libxml/parser.h: + first version of the inplementation of parsing within + the context of a node in the tree #142359, new function + xmlParseInNodeContext(), added support at the xmllint --shell + level as the "set" function + * test/scripts/set* result/scripts/* Makefile.am: extended + the script based regression tests to instrument the new function. + +Sat Aug 14 18:53:08 MDT 2004 John Fleck + + * doc/xmllint.xml, xmllint.html, xmllint.1: + add c14n to man page (man, it's hard to keep up with + Daniel!) + +Sat Aug 14 18:45:38 MDT 2004 John Fleck + + * doc/xmllint.xml, xmllint.html, xmllint.1: + add pattern, walker, maxmem, output and xmlout to man page + fixes #144675 + +Sun Aug 15 00:41:12 CEST 2004 Daniel Veillard + + * xmllint.c: added a --c14n option to canonicalize the output + should close the RFE #143226 + +Sat Aug 14 23:50:10 CEST 2004 Daniel Veillard + + * tree.c: Dodji pointed out a bug in xmlGetNodePath() + * xmlcatalog.c: applied patch from Albert Chin to add a + --no-super-update option to xmlcatalog see #145461 + and another patch also from Albert Chin to not crash + on -sgml --del without args see #145462 + * Makefile.am: applied another patch from Albert Chin to + fix a problem with diff on Solaris #145511 + * xmlstring.c: fix xmlCheckUTF8() according to the suggestion + in bug #148115 + * python/libxml.py: apply fix from Marc-Antoine Parent about + the errors in libxml(2).py on the node wrapper #135547 + +Sat Aug 14 13:18:57 CEST 2004 Daniel Veillard + + * Makefile.am: added a dumb rule to able to compile tst.c + when people submit a sample test program + * xmlschemas.c: applied small patch from Eric Haszlakiewicz + to document xmlSchemasSetValidErrors() limitations, #141827 + * error.c: Add information in generic and structured error + setter functions that this need to be done per thread #144308 + * xmlsave.c: fixed bug whith missing NOTATION(s) serialization + bug #144162 + * doc/xmllint.xml: typo fix #144840 + +Tue Aug 10 07:19:31 PDT 2004 Daniel Veillard + + * configure.in xmlregexp.c xmlschemas.c xmlschemastypes.c + include/libxml/schemasInternals.h include/libxml/xmlerror.h + include/libxml/xmlschemastypes.h: applied Schemas patches + from Kasimier Buchcik + * test/ result/ bug141333* annot-err* any[1-4]* bug145246* + element-err* element-minmax-err* include1* restrict-CT-attr-ref*: + lot of new tests for things fixed by the patch + +Fri Aug 6 09:22:34 PDT 2004 William Brack + + * valid.c: fixed my mis-handling of External ID on last + change. + +Wed Aug 4 23:40:21 PDT 2004 William Brack + + * valid.c: changed the parsing of a document's DTD to use + the proper base path (bug 144366) + +Wed Aug 4 16:58:08 CEST 2004 Daniel Veillard + + * Makefile.am config.h.in configure.in python/Makefile.am: + applied a patch from Gerrit P. Haase to get python bindings + on Cygwin + +Tue Aug 3 15:08:22 PDT 2004 William Brack + + * include/libxml/valid.h: elaborated on description of + xmlValidityWarningFunc and xmlValidityErrorFunc (bug + 144760) + * xmlIO.c, xmlschemastypes.c, include/libxml/schemasinternals.h: + minor fixes to comments for doc rebuilding errors. + * doc/*.html: rebuilt the docs + +Tue Aug 3 23:59:23 CEST 2004 Daniel Veillard + + * doc/ChangeLog.xsl doc/downloads.html doc/xml.html doc/*: + fixes documentation glitches raised by Oliver Stoeneberg + +Tue Aug 3 09:42:31 PDT 2004 William Brack + + * tree.c: fixed problem with memory leak on text nodes in DTD + (bug 148965) with patch provided by Darrell Kindred + +Tue Aug 3 08:14:44 PDT 2004 William Brack + + * HTMLparser.c: fixed initialisation problem for htmlReadMemory + (bug 149041) + +Sat Jul 31 11:01:33 PDT 2004 William Brack + + * doc/buildDocBookCatalog: enhanced per bug 119876. Further + info posted to the mailing list. + +Sat Jul 31 09:12:44 PDT 2004 William Brack + + * SAX2.c, encoding.c, error.c, parser.c, tree.c, uri.c, xmlIO.c, + xmlreader.c, include/libxml/tree.h: many further little changes + for OOM problems. Now seems to be getting closer to "ok". + * testOOM.c: added code to intercept more errors, found more + problems with library. Changed method of flagging / counting + errors intercepted. + +Fri Jul 30 13:57:55 CEST 2004 Daniel Veillard + + * tree.c: applied a couple of patch one from Oliver Stoeneberg + and another one from Rob Richards fixing #148448 + +Thu Jul 29 13:20:28 CEST 2004 Daniel Veillard + + * HTMLparser.c: 1 line patch, apparently htmlNewDoc() was not + setting doc->charset. + +Thu Jul 29 00:05:58 PDT 2004 William Brack + + * SAX2.c, tree.c, uri.c, xmlIO.c, xmlreader.c: further + fixes for out of memory condition, mostly from Olivier + Andrieu. + * testOOM.c: some further improvement by Olivier, with + a further small enhancement for easier debugging. + +Tue Jul 27 00:34:07 PDT 2004 William Brack + + * SAX2.c, error.c, parser.c, tree.c, xmlreader.c: + implemented patches supplied by Olivier Andrieu + (bug 148588), plus made some further enhancements, to + correct some problems with out of memory conditions. + * testOOM.c: improved with patches from Olivier Andrieu + +Mon Jul 26 11:03:18 PDT 2004 William Brack + + * tree.c: put in patch for Windows buffer re-allocation + submitted by Steve Hay (bug 146697) + +Sun Jul 25 17:18:39 PDT 2004 William Brack + + * xinclude.c: added some code to check, when an include is + done, whether the requested URL gets mapped to some other + location (e.g. with a catalog entry) and, if so, take care + of the xml:base properly (bug 146988) + +Sun Jul 25 14:02:24 PDT 2004 William Brack + + * error.c: fixed to assure user data param is set correctly + when user structured error handler is called (bug 144823) + +Thu Jul 22 10:14:48 PDT 2004 William Brack + + * xmlreader.c: fixed problem with reader state after + processing attributes (bug 147993) + +Wed Jul 21 17:04:27 HKT 2004 William Brack + + * configure.in, Makefile.am: put in an auto* check for the + path to perl (if it exists), and modified make Timingtests + to use that path instead of just executing the dbgenattr.pl + script (bug 148056) + +Fri Jul 16 18:36:33 HKT 2004 William Brack + + * python/generator.py: added a check on the argument for some + classes (e.g. xmlDoc and xmlNode) to prevent a segfault (as + reported on the list). Further enhancement should be done + to auto-create the appropriate object. + * python/libxml.c: minor fix for a warning message; added a + routine, currently not used, to report the description of a + PyCObject. + * python/libxml2class.txt: regenerated + +Fri Jul 16 11:01:40 CEST 2004 Daniel Veillard + + * catalog.c test/catalogs/white* result/catalogs/white*: + applied patches from Peter Breitenlohner to fix handling + of white space normalization in public ids and add tests + +Tue Jul 13 17:24:13 CEST 2004 Daniel Veillard + + * xmlmemory.c: applied a small fix from Steve Hay + +Tue Jul 13 23:02:19 HKT 2004 William Brack + + * xpath.c: Added code to in PREDICATE/FILTER handling to reset + the xpath context document pointer (part of fix to libxslt + bug 147445) + +Tue Jul 13 00:14:08 HKT 2004 William Brack + + * python/libxml.py: ran 'expand' on the file to get rid of mixture + of tabs and spaces (bug 147424) + +Sun Jul 11 22:38:29 HKT 2004 William Brack + + * python/drv_libxml.py: added an encoding "special comment" to avoid + warning message in python2.3 (bug 146889) + * Makefile.am, python/Makefile.am, python/tests/Makefile.am: small + change to make "make tests" a little quieter (MAKEFLAGS+=--silent) + * xpath.c: enhanced to take advantage of current libxslt handling + of tmpRVT. Fixes bug 145547. + +Fri Jul 9 14:02:54 CEST 2004 Daniel Veillard + + * libxml.h uri.c: fixed a couple of problems in the new + elfgcchack.h trick pointed by Peter Breitenlohner + +Wed Jul 7 00:45:48 CEST 2004 Daniel Veillard + + * elfgcchack.h doc/apibuild.py doc/libxml2-api.xml: fixed a bug + which prevented building with --with-minimum + +Mon Jul 5 19:43:51 CEST 2004 Daniel Veillard + + * configure.in doc/*: releasing 2.6.11, updated and regenerated the + docs + +Mon Jul 5 18:43:47 CEST 2004 Daniel Veillard + + * parser.c: make the push interfaces synchronous + * python/tests/sync.py: added a specific test + * python/tests/Makefile.am doc/examples/Makefile.am + doc/examples/index.py: added the new test, cleaning up + "make tests" output + +Mon Jul 5 15:09:17 CEST 2004 Daniel Veillard + + * xmlschemas.c: applied patch from Kasimier to fix some Relax-NG + datatype facet problem with recent changes. + +Sat Jul 3 11:31:02 HKT 2004 William Brack + + * python/libxml.c: Changed the number of XPath extension functions + allowed to be variable-length (patch supplied by Marc-Antoine + Parent, bug 143805). Added code to "unregister" the functions + when the parser cleanup takes place. + +Fri Jul 2 14:22:14 CEST 2004 Daniel Veillard + + * xmlmemory.c python/libxml.c python/libxml2-python-api.xml: + some updates with memory debugging facilities while messing + with libxslt python bindings + +Thu Jul 1 14:53:36 CEST 2004 Daniel Veillard + + * python/libxml.c python/generator.py python/libxml.py + python/libxml2-python-api.xml python/libxml2class.txt: + applied patch from Stéphane Bidoul to fix some Python bindings + initialization, then had to change the parserCleanup() + to handle memory released there. + * xmlmemory.c: added more debugging comments. + +Thu Jul 1 13:18:02 CEST 2004 Daniel Veillard + + * xmlreader.c: seems the reader buffer could be used while not + allocated, fixes bug #145218 + +Thu Jul 1 11:34:10 CEST 2004 Daniel Veillard + + * python/generator.py: do not provide functions used as destructor + of classes as public methods to avoid double-free problem like + in bug #145185 + +Wed Jun 30 19:45:23 HKT 2004 William Brack + + * xmlschemas.c, xmlschemastypes.c: warning message cleanup. + Now compiles warning-free, all tests passed. + * SAX2.c: small change to comments for documentation. + No change to logic. + +Tue Jun 29 15:00:13 PDT 2004 Daniel Veillard + + * xmlschemas.c: more fixes with Kasimier, looks far cleaner :-) + +Tue Jun 29 23:00:05 CEST 2004 Daniel Veillard + + * xmlschemas.c: Kasimier Buchcik fixed the memory access and + allocation problem + +Tue Jun 29 19:00:32 CEST 2004 Daniel Veillard + + * xmlschemas.c xmlschemastypes.c include/libxml/xmlerror.h + include/libxml/schemasInternals.h include/libxml/xmlschemastypes.h: + applied Schemas patches from Kasimier Buchcik, there is still + one open issue about referencing freed memory. + * test/schemas/* result/schemas/*: updated with new tests from + Kasimier + +Tue Jun 29 14:52:18 CEST 2004 Daniel Veillard + + * include/libxml/globals.h include/libxml/xmlIO.h + doc/libxml2-api.xml doc/libxml2-refs.xml: moved some definitions + to globals.h to avoid some troubles pointed out by Rob Richards + +Mon Jun 28 11:25:31 CEST 2004 Daniel Veillard + + * libxml.m4: applied changes suggested by Mike Hommey, remove + libxml1 support and use CPPFLAGS instead of CFLAGS + +Sun Jun 27 14:17:15 CEST 2004 Daniel Veillard + + * libxml.spec.in: another, more 'experimental' feature to + get compiler optimization based on gcc runtime profiling + +Sun Jun 27 14:02:36 CEST 2004 Daniel Veillard + + * elfgcchack.h doc/elfgcchack.xsl libxml.h: hack based on Arjan van de + Ven suggestion to reduce ELF footprint and generated code. Based on + aliasing of libraries function to generate direct call instead of + indirect ones + * doc/libxml2-api.xml doc/Makefile.am doc/apibuild.py: added automatic + generation of elfgcchack.h based on the API description, extended + the API description to show the conditionals configuration flags + required for symbols. + * nanohttp.c parser.c xmlsave.c include/libxml/*.h: lot of cleanup + * doc/*: regenerated the docs. + +Sun Jun 27 10:02:28 HKT 2004 William Brack + + * regressions.py, regressions.xml: new files for running + regression tests under Python. Not yet complete, but + should provide good testing under both Linux and Windows. + * testHTML.c, testSAX.c, xmllint.c: changed the 'fopen' used + for --push testing to include the 'rb' param when compiled + under Windows. + +Fri Jun 25 13:38:57 HKT 2004 William Brack + + * uri.c: fixed a problem when base path was "./xxx" + * result/XInclude/*: 5 test results changed by above. + * Makefile.am: fixed a couple of spots where a new + result file used different flags that the testing one. + +Thu Jun 24 16:27:44 HKT 2004 William Brack + + * valid.c: suppressed warnings from within xmlValidGetValidElements + (bug 144644) + * doc/examples/testWriter.c: corrected typo in comment for ISO-8859-1 + (bug 144245) + +Thu Jun 24 10:17:31 HKT 2004 William Brack + + * valid.c: implemented bugfix from Massimo Morara for DTD + dumping problem. + * test/valid/t10.xml, result/valid/t10.*: added regression + for above + * configure.in: small change for my profile settings + +Wed Jun 23 20:18:19 MDT 2004 John Fleck + + * doc/xmlcatalog_man.xml, xmlcatalog.1 + Docs patch from Ville Skytta, bugzilla #144841 + +Sat Jun 19 18:34:11 MDT 2004 John Fleck + + * doc/xmllint.xml, xmllint.html, xmllint.1 + update man page to reflect William's newly disciplined return + code mojo + +Thu Jun 17 00:51:55 CEST 2004 Daniel Veillard + + * doc/examples/io2.c doc/examples/parse4.c: fixing a couple of + compilation errors when configured with --with-minimum + +Wed Jun 16 16:07:10 CEST 2004 Daniel Veillard + + * debugXML.c: applied patch from Stefano Debenedetti to register + namespaces in the debug shell + +Mon Jun 14 21:56:31 CEST 2004 Daniel Veillard + + * xmlreader.c: fix from Steve Ball and update of the comment. + * Makefile.am result/errors/*.str: William pointed out that + the streaming error checking part wasn't streaming, fixing + +Mon Jun 14 14:11:52 CEST 2004 Daniel Veillard + + * catalog.c: patch from Igor for the default catalog path on Windows + +Sat Jun 12 09:03:57 HKT 2004 William Brack + + * configure.in: apparently wasn't updated last time + +Thu Jun 10 20:57:48 HKT 2004 William Brack + + * configure.in, xmlmemory.c, globals.c: fixed problem when + configuring using --with-thread-alloc + +Wed Jun 9 16:31:24 CEST 2004 Igor Zlatkovic + + * win32/configure.js win32/Makefile.* minor changes for the new + layout of the Windows binary package + +Tue Jun 8 19:50:25 CEST 2004 Daniel Veillard + + * xmlschemas.c include/libxml/xmlerror.h: applied another patch + from Kasimier Buchcik for Schema Component Constraints + * test/schemas/* result/schemas/*: added the regression tests + +Tue Jun 8 21:27:03 HKT 2004 William Brack + + * xmllint.c: fixed missing error return code for schema + validation (bug 143880), also changed over to an enum for + defining the error return codes for all conditions. + +Tue Jun 8 14:01:14 CEST 2004 Daniel Veillard + + * parser.c xmlreader.c include/libxml/parser.h: fixed a serious + problem when substituing entities using the Reader, the entities + content might be freed and if rereferenced would crash + * Makefile.am test/* result/*: added a new test case and a new + test operation for the reader with substitution of entities. + +Tue Jun 8 12:14:16 CEST 2004 Daniel Veillard + + * globals.c xmlIO.c include/libxml/globals.h include/libxml/xmlIO.h: + applied patch from Rob Richards for the per thread I/O mappings + +Tue Jun 8 09:58:31 HKT 2004 William Brack + + * xinclude.c: some further enhancement to take care of + xml:base for XPointer elements (bug 143886). Also fixed + a problem when xml:base was already specified on an + XInclude'd element. + +Mon Jun 7 22:14:58 HKT 2004 William Brack + + * relaxng.c: fixed a problem with internal cleanup of
element + (bug 143738). + +Mon Jun 7 16:57:43 HKT 2004 William Brack + + * uri.c, include/libxml/uri.h: added a new routine + xmlBuildRelativeURI needed for enhancement of xinclude.c + * xinclude.c: changed handling of xml:base (bug 135864) + * result/XInclude/*: results of 5 tests changed as a result + of the above change + +Fri Jun 4 11:27:37 CEST 2004 Daniel Veillard + + * test/schemas/* result/schemas/*: added a bunch of tests from + Kasimier Buchcik posted on May 11 + +Thu Jun 3 17:58:25 CEST 2004 Daniel Veillard + + * xmlschemas.c: new patch from Kasimier Buchcik for processContents + of wildcards attribute handling + * test/schemas/anyAttr-* result/schemas/anyAttr-*: added specific + regression tests + +Thu Jun 3 13:20:36 CEST 2004 Daniel Veillard + + * parser.c: fixed a bug where invalid charrefs may not be detected + sometimes as pointed by Morus Walter. + * test/errors/charref1.xm result/errors/charref1.xml*: added the + test in the regression suite. + +Thu Jun 3 18:38:27 HKT 2004 William Brack + + * xmlschemas.c: small change to xmlSchemaValidateAttributes, + also corrected typo on error code enum. + * include/libxml/xmlerror.h: corrected typo on schema error + code enum + +Thu Jun 3 10:12:38 HKT 2004 William Brack + + * xmlschemas.c: minor cosmetic changes, no change to logic. + * result/schemas/attruse_0_[12].err: regenerated + * globals.c: added a newline at end to make gcc happy + +Wed Jun 2 21:16:26 CEST 2004 Daniel Veillard + + * xmlschemas.c include/libxml/schemasInternals.h + include/libxml/xmlerror.h: applied a patch from Kasimier Buchcik + implementing attribute uses and wildcards. + * test/schemas/* result/schemas/*: added/fixed a bunch of tests + +Wed Jun 2 18:15:51 CEST 2004 Daniel Veillard + + * globals.c xmlIO.c include/libxml/globals.h: applied patch from + Rob Richards for custom I/O BufferCreateFilenane fixes bug + #143366 + +Wed Jun 02 16:25:32 HKT 2004 William Brack + + * xpath.c: fixed problem with predicate evaluation on an + empty nodeset (bug 143409) + +Wed Jun 02 11:26:41 HKT 2004 William Brack + + * testSAX.c: fixed problem with attribute listing (bug 142674) + and added macro LIBXML_TEST_VERSION to assure xmlInitParser + gets called (bug 142686) + +Sat May 29 21:35:52 CEST 2004 Daniel Veillard + + * test/schemas/date_0.xml xmlschemastypes.c: applied a patch from + Charles Bozeman fixing a side effect in date handling + +Thu May 27 19:47:48 MDT 2004 John Fleck + + * doc/tutorial/xmltutorial.xml fix lack of cast in Xpath example + * doc/tutorial/*.html, xmltutorial.pdf rebuild html, pdf + +2004-05-25 Aleksey Sanin + + * c14n.c: fixed c14n bug with serializing attribute namespaces + +Mon May 24 08:22:48 HKT 2004 William Brack + + * xpath.c: fixed to allow '+' in exponent of number + (bug 143005) + * SAX2.c: fixed typo in last commit + +Sat May 22 09:08:24 HKT 2004 William Brack + + * SAX2.c: skipped call to xmlValidateNCName when compiling + --with-minimum (bug 142917) + +Tue May 18 06:48:00 CEST 2004 Daniel Veillard + + * catalog.c: reverted the broken change. + +Mon May 17 23:07:15 CEST 2004 Daniel Veillard + + * NEWS doc/*: updated the docs for 2.6.10 + +Mon May 17 05:52:03 CEST 2004 Daniel Veillard + + * configure.in : releasing 2.6.10 + +Sun May 16 23:12:35 CEST 2004 Daniel Veillard + + * tree.c: avoid returning default namespace when searching + from an attribute + * entities.c xmlwriter.c: reverse xmlEncodeSpecialChars() behaviour + back to escaping " since the normal serialization routines do not + use it anymore, should close bug #134477 . Tried to make + the writer avoid it too but it didn't work. + +Sun May 16 01:07:16 CEST 2004 Daniel Veillard + + * doc/ChangeLog.awk doc/ChangeLog.xsl: fixed escaping + handling and added direct links to bugzilla report for + bug numbers. + +Sun May 16 11:11:13 HKT 2004 William Brack + + * error.c: modified to assure proper user data is sent to + structured error routine (bug 142598) + +Sun May 16 03:18:52 CEST 2004 Daniel Veillard + + * catalog.c: a couple of large static variable which should really + not be declared as such cluttered the .bss section. + +Sun May 16 03:06:31 CEST 2004 Daniel Veillard + + * doc/ChangeLog.awk: fixed a couple of problems when parsing + libxslt ChangeLog + +Sat May 15 20:14:21 CEST 2004 Daniel Veillard + + * doc/ChangeLog.awk doc/ChangeLog.xsl: first steps of a good + ChangeLog page generation. The awk shoudl escape characters + not okay in XML and the xslt should make links to functions + or variables or bug reported in the entries. + +Sat May 15 14:57:40 CEST 2004 Daniel Veillard + + * xmlsave.c include/libxml/xmlsave.h: start adding API for + escaping customization. + +Sat May 15 12:38:17 CEST 2004 Daniel Veillard + + * xmlsave.c: more xmlSave cleanup, optimization and refactoring + +Fri May 14 17:51:48 CEST 2004 Daniel Veillard + + * xmlIO.c xmlsave.c: third pass at the escaping refactoring. + +Fri May 14 12:37:24 HKT 2004 William Brack + + * parser.c: enhanced the enhancement, fixed another couple of + special cases. + +Fri May 14 11:48:33 HKT 2004 William Brack + + * parser.c: small enhancement to dtd handling of (a?)+ (bug 142487) + +Thu May 13 23:19:00 CEST 2004 Daniel Veillard + + * xmlIO.c xmlsave.c include/libxml/xmlIO.h: second pass on escaping + handling, start to looks better, need to be completed and added + directly at the saving context level. + +Thu May 13 10:31:28 CEST 2004 Daniel Veillard + + * xmlIO.c xmlsave.c include/libxml/xmlIO.h: first pass at refactoring + the escape on save routines for better performances (less malloc) + and more flexibility using the new saving context. Preliminary + work, interface will change. + +Wed May 12 22:34:03 HKT 2004 William Brack + + * xmlschemas.c: added code in xmlSchemaBuildAContentModel to handle + element reference within the xs:all construct (bug 139897) + +Wed May 12 17:27:18 HKT 2004 William Brack + + * xinclude.c: a little further fixing of fallback processing, this + time for fallback with children (bug 139520). + +Wed May 12 08:21:33 HKT 2004 William Brack + + * xmlschemas.c: added code in xmlSchemaBuildContentModel to + allow ref in group definition (bug 134411). Also fixed + misc compilation warning messages. + * result/schema/group0_0_0, result/schema/group0_0_0.err: + regenerated (now no error reported). + +Tue May 11 11:55:59 CEST 2004 Daniel Veillard + + * xmlIO.c: fix to the fix for #141864 from Paul Elseth + * HTMLparser.c result/HTML/doc3.htm: apply fix from David Gatwood for + #141195 about text between comments. + +Tue May 11 23:04:47 HKT 2004 William Brack + + * xmlschemas.c, include/libxml/schemasInternals.h, + include/libxml/xmlerror.h: Applied patches supplied by + Kasimier Buchcik. + * test/schemas/po1_0.xml, test/schemas/po1_0.xsd: + changed test to account for above patch. + +Tue May 11 09:06:53 CEST 2004 Daniel Veillard + + * python/tests/tstLastError.py: better portability fix for f(*args), + use apply(f, args) as Stéphane Bidoul suggested + +Mon May 10 15:49:22 HKT 2004 William Brack + + * xmlregexp.c: enhanced xmlRegStateAddTrans to check if transition + is already present and, if so, to ignore the request to add it. + This has a very dramatic effect on memory requirements as well + as efficiency. It also fixes bug 141762. + +Sun May 9 20:40:59 CEST 2004 Daniel Veillard + + * Makefile.am python/tests/Makefile.am python/tests/tstLastError.py: + applied patch from Ed Davis to allow "make tests" to work + with Python 1.5 + +Sun May 9 19:46:13 CEST 2004 Daniel Veillard + + * xmlsave.c: apply fix for XHTML1 formating from Nick Wellnhofer + fixes bug #141266 + * test/xhtmlcomp result//xhtmlcomp*: added the specific regression + test + +Sun May 9 14:07:21 CEST 2004 Daniel Veillard + + * Makefile.am: fix for a pedantic make check without make all request + +Sat May 8 22:56:22 CEST 2004 Daniel Veillard + + * uri.c xmlIO.c: fixing some problems in URI unescaping + and output buffer opening, this should fix #141864 + +Fri May 7 22:31:54 CEST 2004 Daniel Veillard + + * valid.c include/libxml/valid.h: fixes the use of 'list' as a parameter + * xmlIO.c include/libxml/xmlIO.h: added xmlPopInputCallback for + Matt Sergeant + +Thu May 6 21:14:38 PDT 2004 William Brack + + * xmlregexp.c: enhanced the handling of subexpression ranges + which have a minOccurs of 0 (bug 140478 again); cleaned up + comments throughout the module. + +Tue May 4 00:52:16 CEST 2004 Daniel Veillard + + * xmllint.c: adding a --maxmem option to check memory used. + +Sat May 1 01:08:44 CEST 2004 Daniel Veillard + + * xmllint.c xmlsave.c python/generator.py python/libxml.c: Fixed + bug #141529 i.e. various problems when building with --without-html + +Fri Apr 30 18:12:31 CEST 2004 Daniel Veillard + + * xmllint.c xmlreader.c: fixing bug #141384 where the reader didn't + call the deregistering functions. Also added the check to + xmllint --stream --chkregister . + +Fri Apr 30 08:57:47 CEST 2004 Daniel Veillard + + * win32/Makefile.msvc: applied a second patch from Mark Vakoc for + regression tests on Windows + +Thu Apr 29 21:47:23 CEST 2004 Daniel Veillard + + * xmlreader.c: never commit without running make tests first ! + +Thu Apr 29 20:15:20 CEST 2004 Daniel Veillard + + * xmlreader.c: fix a nasty problem with reading over the end + * xmlsave.c: fix a reported memory leak apparently + +Thu Apr 29 17:05:00 CEST 2004 Daniel Veillard + + * win32/Makefile.msvc: patch from Mark Vakoc for regression tests + on Windows. + * xpath.c: the NaN problem also shows up on Borland + +Mon Apr 26 23:37:12 HKT 2004 William Brack + + * xmlregexp.c: enhanced xmlFARegExec range evaluation for min + occurs 0 problems - fixes bug 140478. + +Thu Apr 22 09:12:47 CEST 2004 Daniel Veillard + + * rngparser.c: tiny path fixes the "xmlConvertCRNGFile" function name + from Kasimier Buchcik + * xmlschemas.c: recursive xs:extension fix from taihei goi + +Wed Apr 21 00:19:29 CEST 2004 Daniel Veillard + + * tree.c: small buffer resizing improvement from Morten Welinder + closes #140629 + +Tue Apr 20 23:40:14 CEST 2004 Daniel Veillard + + * xpath.c: last version of the fix for MSC version 1200 + +Tue Apr 20 19:40:37 CEST 2004 Daniel Veillard + + * parser.c: killing the strncmp vs. memcmp controversy and #140593 + +Tue Apr 20 13:27:06 CEST 2004 Daniel Veillard + + * include/libxml/SAX2.h: Kasimier Buchcik pointed out some + inexistent functions, cleaned them out. + +Tue Apr 20 11:42:50 CEST 2004 Daniel Veillard + + * error.c: Johnson Cameron pointed out that + initGenericErrorDefaultFunc() was really wrong. + * xmlreader.c include/libxml/xmlreader.h: xmlTextReaderMode enum + must be made public, added some missing comments on the XMLReader + header. + * c14n.c: Alexsey fixed C14N bug with processing namespaces + from attributes + +Mon Apr 19 23:27:46 CEST 2004 Daniel Veillard + + * xpath.c: fixed a stupid () error + Mark name. + +Sun Apr 18 23:45:46 CEST 2004 Daniel Veillard + + * configure.in: preparing 2.6.9 release + * doc/* News: updated and rebuilt the docs + +Sun Apr 18 22:51:43 CEST 2004 Daniel Veillard + + * xpath.c: relaxed id() to not check taht the name(s) passed + are actually NCName, decided this in agreement with Aleksey Sanin + since existing specs like Visa3D broke that conformance checking + and other tools seems to not implement it sigh... + * SAX2.c: check attribute decls for xml:id and the value is an + NCName. + * test/xmlid/id_err* result/xmlid/id_err*: added error testing + +Sun Apr 18 21:46:17 CEST 2004 Daniel Veillard + + * xpath.c: work around Microsoft compiler NaN bug raise reported + by Mark Vakoc + * xmlschemas.c include/libxml/schemasInternals.h + include/libxml/xmlerror.h: fixed a recusive extention schemas + compilation error raised by taihei goi + +Sun Apr 18 16:57:02 CEST 2004 Daniel Veillard + + * libxml.spec.in: keep the ChangeLog compressed + * xmlreader.c: fix a segfault when using Close() + * python/tests/Makefile.am python/tests/reader8.py: test for + the Close() reader API. + +Sat Apr 17 22:42:13 HKT 2004 William Brack + + * xmlschemas.c, xmlwriter.c, doc/examples/parse4.c, + doc/examples/io2.c: minor warning cleanup (no change to logic) + * xinclude: fixed return value for internal function + xmlXIncludeLoadFallback (now always 0 or -1) + +Sat Apr 17 21:32:32 HKT 2004 William Brack + + * valid.c: small enhancement to fix bug 139791 + +Fri Apr 16 18:44:47 CEST 2004 Daniel Veillard + + * xmlschemas.c include/libxml/schemasInternals.h + include/libxml/xmlerror.h: applied patches from Kasimier Buchcik + for the attribute use support + * test/schemas/attruse* result/schemas/attruse*: added the + tests to the regression suite. + +Fri Apr 16 18:22:25 CEST 2004 Daniel Veillard + + * xmlsave.c: move the TODO as comments as the function while not + finished are usable as-is + * xmlschemas.c include/libxml/xmlerror.h: patch from Kasimier Buchcik + implementing union + * test/schemas/union_0_0.x* result/schemas/union_0_0*: added example + * python/Makefile.am: applied fix from Mike Hommey + +Fri Apr 16 23:58:42 HKT 2004 William Brack + + * parser.c: fixed problem with detecting external dtd + encoding (bug 135229). + * Makefile.am: minor change to test label + +Fri Apr 16 16:09:31 HKT 2004 William Brack + + * xinclude.c: fixed problem causing duplicate fallback + execution (bug 139520) + * test/XInclude/docs/fallback2.xml result/XInclude/fallback2.*: + added testcase + +Fri Apr 9 23:49:37 CEST 2004 Daniel Veillard + + * SAX2.c include/libxml/tree.h: adding xml:id draft support + * Makefile.am test/xmlid/id_tst* result/xmlid/id_tst*: adding + 4 first regression tests + +Fri Apr 9 11:56:08 CEST 2004 Daniel Veillard + + * libxml.spec.in: fixing Red Hat bug #120482 , libxml2-python + should depend on the version of python used to compile it. + +Mon Apr 5 09:07:24 CEST 2004 Daniel Veillard + + * HTMLparser.c: applied patch from James Bursa, frameset should + close head. + +Fri Apr 2 22:02:24 HKT 2004 William Brack + + * relaxng.c: fixed problem in xmlRelaxNGCompareNameClasses + which was causing check-relaxng-test-suite.py test 351 to fail. + +Fri Apr 2 17:03:48 HKT 2004 William Brack + + * nanohttp.c: implemented fix for M$ IIS redirect provided + by Ian Hummel + * relaxng.c: fixed problem with notAllowed compilation + (bug 138793) + +Thu Apr 1 22:07:52 CEST 2004 Daniel Veillard + + * uri.c: fix for xmlUriEscape on "http://user@somewhere.com" + from Mark Vakoc. + +2004-04-01 Johan Dahlin + + * python/.cvsignore: Add generated files, to make cvs silent. + +Thu Apr 1 12:41:36 CEST 2004 Daniel Veillard + + * xmlschemas.c: small signed-ness patch from Steve Little + +Wed Mar 31 17:47:28 CEST 2004 Daniel Veillard + + * xmlregexp.c: patched a bug in parsing production 1 and 2 of + xmlschemas regexp that William pointed out while working on + #134120 + * test/regexp/branch result/regexp/branch: added a specific + regression test + +Wed Mar 31 09:50:32 HKT 2004 William Brack + + * Makefile.am: added PYTHONPATH to python tests for Schemas + and RelaxNG + * test/xsdtest/xsdtestsuite.xml: added testfile for + SchemasPythonTests + +Mon Mar 29 16:56:49 CEST 2004 Daniel Veillard + + * doc/examples/examples.xsl doc/examples/index.html: added + information about compiling on Unix + +Mon Mar 29 14:18:12 CEST 2004 Daniel Veillard + + * catalog.c: fixes the comments for xmlCatalogDump and xmlDumpACatalog + * doc/*: rebuilt to update + +Sun Mar 28 18:11:41 CEST 2004 Daniel Veillard + + * xmlsave.c: optimize indentation based on the new context + +Sun Mar 28 14:17:10 CEST 2004 Daniel Veillard + + * doc/examples/xpath2.c doc/examples/xpath2.res: handle and explain + a very tricky problem when modifying the tree based on an XPath + result query. + +Sat Mar 27 09:56:14 PST 2004 William Brack + + * relaxng.c: fixed problem with IS_COMPILABLE flag + (bug 130216) + +Fri Mar 26 18:28:32 CET 2004 Daniel Veillard + + * parser.c: applied patch from Dave Beckett to correct line number + errors when using push with CDATA + +Fri Mar 26 14:53:58 CET 2004 Daniel Veillard + + * doc/examples/xpath1.c: added a test template + * doc/examples/xpath2.c doc/examples/xpath2.res doc/examples/*: + added a new example, and make valgrind target + +Fri Mar 26 11:47:29 CET 2004 Daniel Veillard + + * parser.c: apply fix for #136693 + +Thu Mar 25 20:21:01 MST 2004 John Fleck + + * doc/examples/io2.c + * doc/examples/io2.res + add xmlDocDumpMemory example in response to mailing list FAQ + (rebuilt xml and html also) + +Thu Mar 25 10:33:05 CET 2004 Daniel Veillard + + * debugXML.c testXPath.c xmllint.c xmlschemastypes.c: applied + patch from Mark Vakoc avoiding using xmlParse* option and use + xmlRead* instead + * win32/Makefile.bcb: patch to Borland C++ builder from Eric Zurcher + to avoid problems with some pathnames. + +Tue Mar 23 12:35:08 CET 2004 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * relaxng.c: added an error message when an element is not + found within a (bug 126093) + +Sat Mar 20 22:25:18 HKT 2004 William Brack + + * 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 + + * 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 + + * nanohttp.c: added a close for the local file descriptor + (bug 137474) + +Mon Mar 15 15:46:59 CET 2004 Daniel Veillard + + * xmlsave.c: switched the output routines to use the new context. + +Mon Mar 15 10:37:18 HKT 2004 William Brack + + * 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 + + * xmlschemastypes.c: applied patch from John Belmonte for anyURI. + +Wed Mar 10 17:22:48 CET 2004 Daniel Veillard + + * 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 + + * doc/search.php: Minor change for later verson of php requiring + $HTTP_GET_VARS. + +Wed Mar 10 00:12:31 HKT 2004 William Brack + + * 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 + + * 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 + + * 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 + + * .cvsignore and python/.cvsignore patched + +Mon Mar 8 22:33:14 HKT 2004 William Brack + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * xmlcatalog.c: allow fallback to URI lookup when SYSTEM fails, + should close #134092 + +Thu Mar 4 14:39:38 CET 2004 Daniel Veillard + + * 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 + + * 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 + + * testSAX.c: fix a compilation problem about a missing timb include + +Sat Feb 28 22:35:32 HKT 2004 William Brack + + * 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 + + * 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 + + * Makefile.am: patch for cross-compilation to Windows from + Christophe de VIENNE. + +Thu Feb 26 18:52:11 HKT 2004 William Brack + + * 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 + + * Makefile.am: applied patch from Charles Bozeman to not use + the system xmllint. + +Wed Feb 25 18:07:05 CET 2004 Daniel Veillard + + * include/libxml/xmlexports.h: applied patch from Roland Schwingel + for MingW + +Wed Feb 25 13:57:25 CET 2004 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * 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 + + * xpath.c: fixed a memory leak (xmlXPathLangFunction) reported + on the list by Mike Hommey + +Mon Feb 23 17:28:34 CET 2004 Daniel Veillard + + * doc/* NEWS configure.in: preparing 2.6.7 release, updated and + rebuilt the documentation. + +Mon Feb 23 11:52:12 CET 2004 Daniel Veillard + + * 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 + + * 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 + + * encoding.c: small patch to try to fix a warning with Sun One compiler + +Sat Feb 21 16:22:35 CET 2004 Daniel Veillard + + * encoding.c: small patch removing a warning with MS compiler. + +Sat Feb 21 13:52:30 CET 2004 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * xpath.c: fixed problem with numbers having > 19 + fractional places (bug 133921) + +Tue Feb 17 12:47:20 CET 2004 Daniel Veillard + + * xpath.c: applied optimization patch from Petr Pajas + +Tue Feb 17 12:39:08 CET 2004 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * nanohttp.c: fixed the fix for the buffer overflow, thanx + William :-) + +Mon Feb 9 22:37:14 HKT 2004 William Brack + + * 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 + + * nanohttp.c: fixed buffer overflow reported by Yuuichi Teranishi + +Mon Feb 9 13:45:59 CET 2004 Daniel Veillard + + * xpath.c: small patch from Philip Ludlam to avoid warnings. + +Mon Feb 9 13:41:47 CET 2004 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * xinclude.c: fixed problem with function xmlXIncludeCopyRange + (bug 133686). + +Fri Feb 6 21:03:41 HKT 2004 William Brack + + * xmlwriter.c: fixed problem with return value of + xmlTextWriterWriteIndent() (bug 133297) + +Fri Feb 6 19:07:04 HKT 2004 William Brack + + * 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 + + * xinclude.c: corrected handling of empty fallback condition + (bug 132585) + +Fri Feb 6 15:28:36 HKT 2004 William Brack + + * 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 + + * 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 + + * 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 + + * 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 + + * xmlwriter.c: enhanced output indenting (bug 133264) + +Mon Feb 2 16:13:33 PST 2004 William Brack + + * 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 + + * 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 2.6, rebuild + html - this time doing it correctly :-) + +Fri Jan 30 20:45:36 MST 2004 John Fleck + + * 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 + + * xpath.c: added (void *) type override to prevent + warning on Solaris (Bug 132671) + +Wed Jan 28 07:20:37 MST 2004 John Fleck + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 dictionary, but this + opens the door to others possible optimizations. + * dict.c include/libxml/dict.h: added xmlDictCreateSub() which allows + to build a new dictionary based on another read-only dictionary. + This is needed for XSLT to keep the stylesheet dictionary read-only + while being able to reuse the strings for the transformation + dictionary. + * xinclude.c: fixed a dictionary 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 + + * xmlmemory.c: make xmlReallocLoc() accept NULL pointer + +Thu Jan 22 08:26:20 CET 2004 Daniel Veillard + + * xmlschemastypes.c: applied patch from John Belmonte for + normalizedString datatype support. + +Thu Jan 22 10:43:22 HKT 2004 William Brack + + * 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 + + * parser.c: fixed bug #131745 raised by Shaun McCance with the + suggested patch + +Wed Jan 21 10:59:55 CET 2004 Daniel Veillard + + * 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 + + * python/generator.py python/tests/tstLastError.py: applied + patch from Stéphane Bidoul to add enums to the Python bindings. + +Tue Jan 13 21:50:05 CET 2004 Daniel Veillard + + * testHTML.c: another small patch from Mark Vakoc + +Tue Jan 13 21:39:58 CET 2004 Daniel Veillard + + * HTMLparser.c relaxng.c testRelax.c testSchemas.c: applied + patch from Mark Vakoc to not use SAX1 unless necessary. + +Mon Jan 12 17:22:57 CET 2004 Daniel Veillard + + * 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 + + * xmlschemas.c: removed a memory leak remaining from the switch + to a dictionary for string allocations c.f. #130891 + +Thu Jan 8 17:48:46 CET 2004 Daniel Veillard + + * xmlreader.c: fixing some problem if configured --without-xinclude + c.f. #130902 + +Thu Jan 8 17:42:48 CET 2004 Daniel Veillard + + * configure.in: changed AC_OUTPUT() macro to avoid a cygwin problem + c.f. #130896 + +Thu Jan 8 00:36:00 CET 2004 Daniel Veillard + + * 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 + + * python/libxml2-python-api.xml python/libxml_wrap.h python/types.c + python/tests/Makefile.am python/tests/tstLastError.py: applied + patch from Stéphane Bidoul for structured error handling from + python, and the associated test + +Tue Jan 6 23:18:11 HKT 2004 William Brack + + * configure.in: fixed Bug130593 + * xmlwriter.c: fixed compilation warning + +Tue Jan 6 15:15:23 CET 2004 Daniel Veillard + + * include/libxml/xmlstring.h: fixed the comment in the header + * doc/*: rebuilt the docs + +Tue Jan 6 19:40:04 HKT 2004 William Brack + + * 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 + + * 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 + + * 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 + + * 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 + + * xmlwriter.c: applied patch from Lucas Brasilino fixing an indent + problem. + +Sun Jan 4 18:54:29 MST 2004 John Fleck + + * 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 + + * 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 + + * 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 + + * error.c: applied patch from Stéphane Bidoul for structured error + reporting. + +Fri Jan 2 21:03:17 CET 2004 Daniel Veillard + + * 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 + + * xinclude.c: fixed problem with "recursive" include (fallback + contains another include - Bug 129969) + +Fri Jan 2 11:40:06 CET 2004 Daniel Veillard + + * SAX2.c: found and fixed a bug misallocating some non + blank text node strings from the dictionary. + * xmlmemory.c: fixed a problem with the memory debug mutex + release. + +Wed Dec 31 22:02:37 HKT 2003 William Brack + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * xmlregexp.c: fixed xmlFAParseCharRange for Unicode ranges + with patch from Charles Bozeman. + +Fri Dec 26 14:03:41 HKT 2003 William Brack + + * xmlregexp.c: fixed problem causing segfault on validation error + condition (reported on mailing list) + +Thu Dec 25 21:16:22 HKT 2003 William Brack + + * 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 + + * 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 + + * legacy.c: remove deprecated warning on startElement() + +Wed Dec 24 12:04:35 CET 2003 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * xinclude.c: fixed a serious problem in XInclude #129021 + +Sun Dec 21 13:59:54 CET 2003 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * xmlreader.c: trying to fix #129692 xmlTextReaderExpand() when + using an xmlReaderWalker() + +Thu Dec 18 20:10:34 MST 2003 John Fleck + + * 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 + + * 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 + + * doc/html/libxml-pattern.html: - cvs add API docs for new + pattern stuff + +Tue Dec 16 20:40:40 MST 2003 John Fleck + + * 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 + + * xmlcatalog.c: applied patch from Stefan Kost + +Thu Dec 11 15:15:31 CET 2003 Daniel Veillard + + * doc/examples/testWriter.c: applied small fix from Lucas Brasilino + +Thu Dec 11 14:55:22 CET 2003 Igor Zlatkovic + + * win32/Makefile.* win32/configure.js: Added pattern support + +Wed Dec 10 14:11:20 CET 2003 Daniel Veillard + + * 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 + + * SAX2.c pattern.c: removed some compilation warnings + +Wed Dec 10 11:16:29 CET 2003 Daniel Veillard + + * xmllint.c: fixing bug #119264 xmllint failing to report + serialization errors in some cases. + +Tue Dec 9 23:50:23 CET 2003 Daniel Veillard + + * entities.c: fixed an XML entities content serialization + potentially triggered by XInclude, see #126817 + +Tue Dec 9 16:12:50 CET 2003 Daniel Veillard + + * xmlwriter.c: applied the patch to xmlTextWriterStartPI() + suggested by Daniel Schulman in #128313 + +Tue Dec 9 15:18:32 CET 2003 Daniel Veillard + + * configure.in Makefile.am: another patch from Kenneth Haley + for Mingw, c.f. #128787 + +Tue Dec 9 15:07:09 CET 2003 Daniel Veillard + + * 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 + + * xmllint.c: some flags were not passed down correctly as + parsing options. Fixes #126806 + +Tue Dec 9 12:29:26 CET 2003 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * parser.c: attempt to fix #126211 ... + +Fri Dec 5 17:07:29 CET 2003 Daniel Veillard + + * 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 + + * 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 + + * python/libxml.py: oops forgot to modify/commit the new code. + +Thu Dec 4 13:29:19 CET 2003 Daniel Veillard + + * 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 + + * 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 + + * config.h.in configure.in xmlregexp.c: fix bug #128401 affecting + regexp quantifiers + +Tue Dec 2 23:29:56 CET 2003 Daniel Veillard + + * 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 + + * xmlreader.c: fixed a problem in xmlreader validation when + streaming exposed by reader2 example. + +Mon Dec 1 20:40:51 MST 2003 John Fleck + + * 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 + + * win32/Makefile.bcb win32/configure.js: Applied the BCB patch + from Eric + +Sun Nov 30 21:33:37 MST 2003 John Fleck + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * win32/Makefile.bcb: applied patch from Eric + +Wed Nov 26 21:33:14 CET 2003 Daniel Veillard + + * 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 + + * entities.c: fixed #127877, never output " 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 + + * 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 + + * 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 + + * parser.c: moved xmlCleanupThreads() to the end of xmlCleanupParser() + to avoid bug #127851 + +Mon Nov 24 15:26:21 CET 2003 Daniel Veillard + + * xmlregexp.c: fixing some Negative Character Group and + Character Class Subtraction handling. + +Mon Nov 24 14:01:57 CET 2003 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * 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 + + * HTMLparser.c: applied two parsing fixes from James Bursa + +Thu Nov 20 19:20:46 CET 2003 Daniel Veillard + + * 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 + + * 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 + wasn't preceeded by + +Wed Nov 19 17:19:35 CET 2003 Daniel Veillard + + * xinclude.c: fix an error message + * doc/examples/*: added tree2 example from Lucas Brasilino + +Wed Nov 19 17:50:47 HKT 2003 William Brack + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * doc/newapi.xsl: lot of improvements, this starts looking good + enough to be usable. + +Mon Nov 17 00:58:09 CET 2003 Daniel Veillard + + * 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 + + * xpath.c: fixed bug 126976 (string != empty nodeset + should be false) + +Sun Nov 16 14:00:08 HKT 2003 William Brack + + * 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 + + * 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 + + * doc/docdescr.doc: added description of man page building + +Sat Nov 15 19:08:22 HKT 2003 William Brack + + * 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 + + * 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 + + * 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 + + * 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 + + * doc/examples/*: added Dodji's example, added output handling + +Thu Nov 13 11:35:35 CET 2003 Daniel Veillard + + * doc/examples/*: added Aleksey XPath example, fixed bugs + in the indexer + +Wed Nov 12 23:48:26 CET 2003 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * Makefile.am: apply fix from Karl Eichwalder for script path + +Wed Nov 5 10:49:20 CET 2003 Daniel Veillard + + * 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 + + * doc/xmlreader.html: minor cleanups + +Tue Nov 4 15:52:28 PST 2003 William Brack + + * 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 + + * 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 + + * configure.in NEWS doc/*: preparing release 2.6.2, updated and + rebuilt the docs + +Tue Nov 4 09:38:46 CET 2003 Daniel Veillard + + * 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

element and + solve #125093 + * result/HTML/*: this changes the output of some tests + +Mon Nov 3 17:51:28 CET 2003 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * 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 from + +Sat Nov 1 17:42:27 CET 2003 Daniel Veillard + + * tree.c nanohttp.c threads.c: second BeOS patch from + Marcin 'Shard' Konicki + +Fri Oct 31 15:35:20 CET 2003 Daniel Veillard + + * parser.c: always generate line numbers + +Fri Oct 31 11:53:46 CET 2003 Daniel Veillard + + * parser.c: fixed another regression introduced in fixing #125823 + +Fri Oct 31 11:33:18 CET 2003 Daniel Veillard + + * 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 + + * 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 + + * python/libxml.c: be more defensive in the xmlReader python bindings + fixing bug #124044 + +Thu Oct 30 11:14:31 CET 2003 Daniel Veillard + + * 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 + + * 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 + + * xmlIO.c: fix needed when HTTP is not compiled in by Mark Vakoc + +Wed Oct 29 18:05:53 CET 2003 Daniel Veillard + + * 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 + + * include/libxml/parser.h parser.c: added xmlStrVPrintf function + +Wed Oct 29 14:37:40 CET 2003 Daniel Veillard + + * 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 + + * 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 + + * tree.c: applied a couple of patches from Mark Lilback about text + nodes coalescing + +Wed Oct 29 12:16:52 CET 2003 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * 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 + + * xpath.c: applied patch from nico@xtradyne.com for #125030 + +Tue Oct 28 16:42:16 CET 2003 Daniel Veillard + + * 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 + + * 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 + + * parser.c: fixed #123263, the encoding is mandatory in a textdecl. + +Tue Oct 28 13:48:52 CET 2003 Daniel Veillard + + * tree.c: fix bug #125047 about serializing when finding a + document fragment node. + +Mon Oct 27 11:11:29 EST 2003 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * 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 + + * win32/configure.js: added declaration for verMicroSuffix + +Fri Oct 24 23:08:17 CEST 2003 Daniel Veillard + + * 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 + + * xmlwriter.c: applied patch from Alfred Mickautsch fixing #125180 + +Wed Oct 22 10:50:31 CEST 2003 Daniel Veillard + + * chvalid.c genChRanges.py: Stéphane Bidoul pointed out another + small glitch missing a const + +Wed Oct 22 10:43:21 CEST 2003 Daniel Veillard + + * chvalid.c genChRanges.py: Stéphane Bidoul pointed out that + it doesn't define IN_LIBXML + +Tue Oct 21 21:14:55 CEST 2003 Daniel Veillard + + * win32/Makefile.mingw: typo pointed out by Stéphane Bidoul + +Tue Oct 21 11:26:36 CEST 2003 Daniel Veillard + + * 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 + + * tree.c: last minute patch from Eric Zurcher making it into 2.6.0 + +Tue Oct 21 02:03:03 CEST 2003 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * valid.c xmlIO.c: fixes for compiling using --with-minimum + +Sun Oct 19 23:46:04 CEST 2003 Daniel Veillard + + * tree.c: cleanup xmlNodeGetContent() reusing xmlNodeBufGetContent(), + tested it through the xslt regression suite. + +Sun Oct 19 22:42:16 CEST 2003 Daniel Veillard + + * 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 + + * parser.c: applied patch from Chris Anderson to change back + memcmp with CMPx() + +Sun Oct 19 16:24:19 CEST 2003 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * parser.c: Marc Liyanage pointed out that xmlCleanupParser() + was missing xmlCleanupInputCallbacks and xmlCleanupOutputCallbacks + calls. + +Wed Oct 15 10:16:47 CEST 2003 Daniel Veillard + + * vms/build_libxml.com trionan.c: VMS patch from Craig A. Berry + +Mon Oct 13 21:46:25 CEST 2003 Daniel Veillard + + * Makefile.am: small fix from Bjorn Reese + +Mon Oct 13 15:59:25 CEST 2003 Daniel Veillard + + * valid.c: fix a call missing arguments + +Sun Oct 12 18:42:18 HKT 2003 William Brack + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * include/libxml/tree.h: make room in Doc, Element, Attributes + for PSVI type informations. + +Fri Oct 10 16:08:02 CEST 2003 Daniel Veillard + + * 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 + + * c14n.c include/libxml/xmlerror.h: converted the C14N module too + +Fri Oct 10 13:40:51 CEST 2003 Daniel Veillard + + * 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 + + * 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 + + * xpath.c: fixed bug 124061 + +Fri Oct 10 02:47:22 CEST 2003 Daniel Veillard + + * 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 + + * HTMLtree.c include/libxml/xmlerror.h: converted too + * tree.c: small cleanup + +Thu Oct 9 13:44:57 CEST 2003 Daniel Veillard + + * 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 + + * 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 + + * parser.c: bug in compression saving was crashing galeon + reported by teuf + +Wed Oct 8 21:18:12 CEST 2003 Daniel Veillard + + * 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 + + * xmlIO.c: better handling of error cases + +Wed Oct 8 13:51:14 CEST 2003 Daniel Veillard + + * 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 + + * xmlregexp.c include/libxml/xmlerror.h: error handling + cleanup of the Regexp module. + +Wed Oct 8 01:09:05 CEST 2003 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * include/libxml/parser.h parser.c: introduced xmlStrPrintf + function (wrapper around snprintf) + +Wed Oct 1 21:12:06 CEST 2003 Daniel Veillard + + * entities.c: Fix error on output of high codepoint charref like + 􏿿 , reported by Eric Hanchrow + +Wed Oct 1 14:20:10 CEST 2003 Daniel Veillard + + * 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 + + * xmlreader.c: Applied fix for bug #123481 reported by Peter Derr + +Tue Sep 30 15:34:31 CEST 2003 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * xmlmemory.c: better fix, avoids breaking the python bindings + +Mon Sep 29 11:21:33 CEST 2003 Daniel Veillard + + * xmlmemory.c: fix a compilation problem when configuring + with debug but without mem-debug + +Sun Sep 28 20:53:17 CEST 2003 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * parser.c: fixed small problem with missing entities (test/ent2) + +Sat Sep 27 01:25:39 CEST 2003 Daniel Veillard + + * 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 dictionary. + +Fri Sep 26 21:09:34 CEST 2003 Daniel Veillard + + * parser.c: other patches from William Brack to avoid + compilation warnings on AIX. + +Fri Sep 26 11:03:08 PDT 2003 William Brack + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * win32/configure.js: patch from Stéphane Bidoul for configuring + the beta2 version #123104 + +Wed Sep 24 23:17:59 CEST 2003 Daniel Veillard + + * 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 + + * 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 + + * parser.c: revert xmlCreateDocParserCtxt() since this break + the parseDoc() python bindings + +Tue Sep 23 11:00:18 CEST 2003 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * dict.c: the last patch broke unicity of returned strings, removed + +Thu Sep 18 00:31:02 CEST 2003 Daniel Veillard + + * 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 + + * dict.c xmlreader.c: two small improvements + +Wed Sep 17 22:53:32 CEST 2003 Daniel Veillard + + * parserInternals.c: avoid a leak with previous patch + +Wed Sep 17 22:06:11 CEST 2003 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * parser.c: more parser error factoring + +Sun Sep 14 21:53:39 PDT 2003 William Brack + + * HTMLtree.c: Fixed bug 121394 - missing ns on attributes + +Sun Sep 14 21:43:32 CEST 2003 Daniel Veillard + + * 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 + + * valid.c: fixed bug 121759 - early declaration of + attribute-list in external DTD + +Sat Sep 13 14:42:11 CEST 2003 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * threads.c: backport of a thread bugfix from 2_5_X branch + +Thu Sep 11 18:29:18 CEST 2003 Daniel Veillard + + * parser.c: fixed a bug in one corner case of attribute parsing. + +Thu Sep 11 16:21:53 CEST 2003 Daniel Veillard + + * 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 + + 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * include/libxml/xmlexports.h: defined additional macros which + affect exports and added mingw section + +Mon Sep 1 15:15:18 PDT 2003 William Brack + + * 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 + + * 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 + + * 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 + + * 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 + + * win32/Makefile.bcb: updates by Eric Zurcher + +Thu Aug 28 22:58:38 PDT 2003 William Brack + + * 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 + + * 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 + + * include/libxml/globals.h include/libxml/xmlexports.h: fixed + typos reported by Mark Vakoc + +Thu Aug 28 08:59:51 MDT 2003 John Fleck + + 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 + + * 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 + + * 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 + + * win32/Makefile.* win32/configure.js: fixed for mingw + +Thu Aug 28 10:01:44 CEST 2003 Daniel Veillard + + * globals.c threads.c: fixing bug #120870 try to avoid problem + with uninitialized mutexes + +Wed Aug 27 16:12:41 CEST 2003 Daniel Veillard + + * 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 + + * xmlschemastypes.c: applied base64 support patch from Anthony Carrico + +Wed Aug 27 10:58:51 CEST 2003 Igor Zlatkovic + + * include/libxml/[threads-xpointer].h: realigned parameters + after taint + +Wed Aug 27 09:59:54 CEST 2003 Igor Zlatkovic + + * include/libxml/xmlexports.h: fixed defs for Borland compiler, + as reported by Eric Zurcher + +Tue Aug 26 15:54:04 CEST 2003 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * include/libxml/*.h genUnicode.py: exportability taint + of the headers. + +Thu Aug 21 12:37:46 CEST 2003 Daniel Veillard + + * 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 + + * 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 + + * tree.c: fixes a small bug introduced in last commit and detected + by valgrind. + +Tue Aug 19 16:54:18 CEST 2003 Daniel Veillard + + * 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 + + * xmllint.c doc/xmllint.xml doc/xmllint.1: added option + --dtdvalidfpi for Tobias Reif + +Mon Aug 18 14:03:03 CEST 2003 Daniel Veillard + + * 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 + + * parser.c: applied patch to xmlCleanupParser from Dave Beckett + +Sat Aug 16 22:53:42 HKT 2003 William Brack + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * HTMLparser.c: allocation error #119784 raised by Oliver Stoeneberg + +Fri Aug 15 00:41:58 CEST 2003 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * doc/Makefile.am: Removed dependency from libxml2.def.src + +Tue Aug 12 18:55:08 HKT 2003 William Brack + + * 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 + + * 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 + + * win32/libxml2.def.src: renerated with fixed libxml2-api.xml + +Sun Aug 10 00:22:55 CEST 2003 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * encoding.c: further small changes for warnings when + configured with --with-iconv=no + +Wed Aug 6 12:32:11 HKT 2003 William Brack + + * 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 + + * 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 + + * doc/libxml2-api.xml doc/html/*: rebuilt the API and docs. + +Mon Aug 4 21:40:34 CEST 2003 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + 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 + + 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * encoding.c: fix the previous commit + +Tue Jul 29 12:28:17 HKT 2003 William Brack + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * globals.c: add xmlThrDefMutex = NULL in xmlCleanupGlobals() + as suggested by Rob Richards + +Tue Jul 15 15:30:55 CEST 2003 Daniel Veillard + + * 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 + + * xmlschemastypes.c: fixes a segfault on empty hexBinary strings + +Thu Jul 10 16:02:47 CEST 2003 Daniel Veillard + + * nanoftp.c nanohttp.c: cleanup patches from Peter Breitenlohner + +Tue Jul 8 16:02:19 CEST 2003 Daniel Veillard + + * globals.c threads.c: fixes some problem when freeing unititialized + mutexes + +Tue Jul 8 14:15:07 CEST 2003 Daniel Veillard + + * nanoftp.c nanohttp.c: the modules should not import + 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 + + * win32/configure.js: Jesse Pelton pointed out a problem in the + javascript code. + +Mon Jul 7 16:39:31 CEST 2003 Daniel Veillard + + * 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 + + * 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 + + * debugXML.c xpath.c: fixed 2 bugs pointed in #116448 + +Sun Jul 6 19:34:17 CEST 2003 Daniel Veillard + + * 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 + + * 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 + + * 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 + + 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 + + Applying IPv6 patch from Archana Shah + 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 + + * 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 + + * 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 + + * entities.c: do not generate " for " outside of attributes + * result//*: this changes the output of some tests + +Mon Jun 9 12:28:58 CEST 2003 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * 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 + + * encoding.c: small fix + * xmlIO.c: fixed an error message + +Tue May 20 14:21:23 CEST 2003 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * HTMLparser.c: oops last commit introduced a memory leak. + +Tue May 13 18:10:38 EDT 2003 Daniel Veillard + + * 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 + + * libxml.spec.in: added a comment about bug #112902 + +Mon May 12 21:58:00 EDT 2003 William Brack + + * minor cleanup of configure '--help' display + * error.c: enhanced xmlParserPrintFileContext to fix bug #109942 + +Mon May 12 17:53:30 EDT 2003 Daniel Veillard + + * tree.c: PI nodes in external subset were not freed :-\ + fixes bug #112842 + +Mon May 12 11:23:27 EDT 2003 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * xmlschemastypes.c: trying to fix #112673 + +Fri May 9 18:14:16 EDT 2003 Daniel Veillard + + * 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 + + * 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 + + * tree.c: fixed a problem with xmlUnlinkNode() for DTDs. + +Wed Apr 30 14:16:08 CEST 2003 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * win32/defgen.xsl: fixed the conditional for unicode map, + removed hardcoded schema entries + +Mon Apr 28 02:19:00 CEST 2003 Igor Zlatkovic + + * 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 + + * 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 + + * 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 + + * 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 + + * parser.c: fix for xmlIOParseDTD same as previous and reported + by Petr Pajas + +Sat Apr 26 15:26:04 CEST 2003 Daniel Veillard + + * parser.c: applied fix to xmlSAXParseDTD from Malcolm Tredinnick + closing #111638 + +Sat Apr 26 14:00:58 CEST 2003 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * parser.c: fixing an xmlParseDTD bug raised by Petr Pajas + +Fri Apr 25 15:20:29 CEST 2003 Daniel Veillard + + * 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 + + * doc/xmllint.*: trying to fix #110541 where   generated + character preventing rendering by the man command. + +Fri Apr 25 01:09:23 CEST 2003 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * xmlschemastypes.c: trivial fix for 109774 removing a warning + +Wed Apr 23 15:49:32 CEST 2003 Daniel Veillard + + * 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 + + * 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 + + * HTMLparser.c: tried to fix #98879 again in a more solid + way. + +Tue Apr 22 13:58:43 CEST 2003 Igor Zlatkovic + + * win32/libxml2.def.src: added more exports from the relaxng and + xmlreader clan + +Tue Apr 22 10:35:13 CEST 2003 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * doc/xmllint.xml + * doc/xmllint.1 + update man page to explain use of --stream + +Sat Apr 19 02:03:24 CEST 2003 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * 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 + + * relaxng.c: valgrind pointed out an uninitialized variable error. + +Thu Apr 17 11:06:28 CEST 2003 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * HTMLtree.c: patch from Vasily Tchekalkin to fix #109865 + +Thu Apr 10 15:32:44 CEST 2003 Daniel Veillard + + * xmlreader.c: fixing HasValue for namespace as raised by + Denys Duchier + +Wed Apr 9 14:07:18 CEST 2003 Daniel Veillard + + * HTMLparser.c include/libxml/HTMLparser.h: exported + htmlCreateMemoryParserCtxt() it was static + +Wed Apr 9 13:21:48 CEST 2003 Daniel Veillard + + * 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 + + * 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 + + * win32/libxml2.def.src: fixed conditional exports, reported by + Luke Murray. + +Fri Apr 4 18:08:00 CEST 2003 Daniel Veillard + + * parser.c: fixed a possible problem with xmlRecoverMemory() + +Thu Apr 3 17:24:44 CEST 2003 Daniel Veillard + + * 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 + + * win32/libxml2.def.src: exported new functions + +Tue Apr 1 13:09:46 CEST 2003 Daniel Veillard + + * configure.in NEWS: preparing release 2.5.6 + * doc/*: updated and rebuilt the docs + +Tue Apr 1 11:52:15 CEST 2003 Daniel Veillard + + * SAX.c: fixed an uninitialized memory access pointed by valgrind + on C14Ntests + +Tue Apr 1 00:12:28 CEST 2003 Daniel Veillard + + * relaxng.c: one more fixup of error message reporting + +Mon Mar 31 18:36:32 CEST 2003 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * xinclude.c: should fix #109327 errors on memory accesses + +Thu Mar 27 15:06:13 CET 2003 Daniel Veillard + + * HTMLtree.c: Fixed reopening of #78662

+ is an URI reference + +Wed Mar 26 22:38:39 CET 2003 Daniel Veillard + + * xpath.c: fixed bug #109160 on non-ASCII IDs + +Wed Mar 26 17:30:37 CET 2003 Daniel Veillard + + * parser.c: Norm suggested a nicer error message for xml:space values + errors + +Wed Mar 26 01:34:19 CET 2003 Daniel Veillard + + * 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 + + * xmlschemastypes.c: removing a warning with Sun compiler + bug #109154 + +Tue Mar 25 07:02:56 MST 2003 John Fleck + + * doc/xmllint.xml + * doc/xmllint.1 + update xmllint man page with --relaxng option + +Tue Mar 25 12:07:03 CET 2003 Daniel Veillard + + * python/setup.py.in : was missing "drv_libxml2.py" + +Mon Mar 24 19:38:05 CET 2003 Daniel Veillard + + * 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 + + * 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 + + * xpath.c: fixed some problems related to #75813 about handling + of Result Value Trees + +Sun Mar 23 22:57:20 CET 2003 Daniel Veillard + + * uri.c: applied a set of patches from Lorenzo Viali correcting + URI parsing errors. + +Sun Mar 23 22:00:14 CET 2003 Daniel Veillard + + * 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 + + * HTMLtree.c: avoid escaping ',' in URIs + +Sun Mar 23 12:57:00 CET 2003 Daniel Veillard + + * 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 + + * xmlreader.c: fixed #107043 removing 2 warnings with Sun One + compiler. + +Sat Mar 22 18:50:45 CET 2003 Daniel Veillard + + * relaxng.c: valgrind'ed and cleaned up a couple of memory issues. + +Sat Mar 22 16:15:50 CET 2003 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * relaxng.c: added another interleave speedup. + +Thu Mar 20 17:22:00 CET 2003 Daniel Veillard + + * 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 + + * valid.c xmlschemastypes.c: attempt to cope with ID/IDREF(S) + declared both in the DTD and in the Schemas + * relaxng.c: more debug, added a big optimization for + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * doc/xmllint.1: regenerating man page from xmllint.xml to pick + up Aleksey's change + +Sun Mar 9 13:53:16 2003 Aleksey Sanin + + * 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 + + * encoding.c: applied Gennady's patch against buffer overrun + +Fri Mar 7 19:29:40 CET 2003 Daniel Veillard + + * 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 + + * 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 + + * valid.c: fix bug #107764 , possibility of buffer overflow + in xmlValidDebug() + +Wed Mar 5 17:41:37 CET 2003 Daniel Veillard + + * nanoftp.c include/libxml/nanoftp.h: adding xmlNanoFTPDele() + from Philipp Dunkel + +Wed Mar 5 10:57:09 CET 2003 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * entities.c: fixes again one of the problem raised by + James Clark in #106788 + +Wed Feb 26 15:46:48 CET 2003 Daniel Veillard + + * 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 + + * 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 + + * valid.c: fixes a DTD regexp generation problem. + +Mon Feb 24 20:12:57 CET 2003 Daniel Veillard + + * parser.c: fixes bug #105998 about false detection of + attribute consumption loop. + +Mon Feb 24 19:14:57 CET 2003 Daniel Veillard + + * xinclude.c: Fixes bug #106931 in XInclude entities merging. + +Mon Feb 24 18:50:35 CET 2003 Daniel Veillard + + * SAX.c: fixed bug #105992 + +Mon Feb 24 18:14:16 CET 2003 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * relaxng.c: implemented checks from section 7.2 + +Thu Feb 20 16:00:31 CET 2003 Daniel Veillard + + * 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 + + * 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 + + * relaxng.c: more bugfixes + * result/relaxng/*: updated the results + +Wed Feb 19 15:39:56 CET 2003 Igor Zlatkovic + + * 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 + + * 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 + + * relaxng.c: guess what ! Relax-NG bugfixing, what a surprize... + +Tue Feb 18 22:09:50 CET 2003 Daniel Veillard + + * 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 + + * relaxng.c check-relaxng-test-suite.py: more RelaxNG bug hunting + +Mon Feb 17 18:23:32 CET 2003 Daniel Veillard + + * 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 + + * 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 + + * relaxng.c: more bug-hunting + * testRelax.c include/libxml/relaxng.h: added --tree to dump the + intermediate rng tree + * python/generator.py: patch from Stéphane Bidoul to fix the generator + on python < 2.2 + +Fri Feb 14 17:49:26 CET 2003 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * 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 + + * NEWS doc/* configure.in: preparing release 2.5.3 + +Mon Feb 10 17:11:22 CET 2003 Daniel Veillard + + * tree.c: trying to fix #104934 about some XHTML1 serialization + issues. + +Mon Feb 10 16:41:13 CET 2003 Daniel Veillard + + * 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 + + * 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 + + * tree.c: fixing #105678 problem when dumping a namespace node. + +Mon Feb 10 00:30:01 CET 2003 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * xinclude.c: applied another bug fix from Sean Chittenden + +Fri Feb 7 13:34:08 CET 2003 Daniel Veillard + + * 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 + + * xmlschemastypes.c: added the boolean base type. + +Thu Feb 6 10:23:52 CET 2003 Daniel Veillard + + * 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 + + * NEWS doc/*: updated the docs, ready for 2.5.2 release + +Wed Feb 5 14:15:59 CET 2003 Daniel Veillard + + * 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 + + * valid.c: do not run content model validation if the + content is not determinist + +Wed Feb 5 11:43:58 CET 2003 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * catalog.c: fixed bug #104817 with delegateURI + * xpath.c: fixing bugs #104123 and #104125 + +Tue Feb 4 17:12:56 CET 2003 Daniel Veillard + + * 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 + + * 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 + + * HTMLparser.c: applied patch from Arne de Bruijn fixing + bug #103827 + +Tue Feb 4 16:17:09 CET 2003 Daniel Veillard + + * HTMLparser.c: updating a comment, fixing #103776 + +Tue Feb 4 16:05:53 CET 2003 Daniel Veillard + + * parser.c: fixing bug 105049 for validity checking of content + within recursive entities. + +Tue Feb 4 15:40:54 CET 2003 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * relaxng.c: debugging of externalRef + * test/relaxng/* result/relaxng/*: augmented/updated the + regression tests + +Wed Jan 29 22:06:04 CET 2003 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + 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 + + * 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 + + * xmlcatalog.c xmllint.c: applied patch for NetBSD by + Julio Merino, closing #104475 + +Sun Jan 26 20:38:43 CET 2003 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * error.c parser.c tree.c: applied a documentation patch from + Stefan Kost + +Fri Jan 24 02:00:50 CET 2003 Daniel Veillard + + * 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 + + * 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 + + * tree.c: minimized the memory allocated for GetContent + and a bit of cleanup. + +Thu Jan 23 17:41:37 CET 2003 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * doc/guidelines.html + grammar and spelling cleanup + +Fri Jan 17 00:31:30 CET 2003 Daniel Veillard + + * 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 + + * 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 + + * python/libxml.c: cleanup patch from Stéphane Bidoul + +Tue Jan 14 14:41:18 CET 2003 Daniel Veillard + + * encoding.c: fixing bug #103100 with a dummy UTF8ToUTF8 copy + +Tue Jan 14 12:40:29 CET 2003 Daniel Veillard + + * 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 + + * 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 + + * win32/libxml2.def.src: added more xmlreader and other exports + +Fri Jan 10 18:04:32 CET 2003 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * 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 + + * HTMLparser.c: fixed bug #102960 by reusing the XML name parsing + routines. + +Fri Jan 10 00:16:49 CET 2003 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * doc/xmllint.xml + * doc/xmllint.1: + update man page with --stream and --chkregister + +Tue Jan 7 01:17:26 CET 2003 Daniel Veillard + + * 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 + + * 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 + + * doc/tutorial/* : fixed #101894 if doc == NULL xmlFreeDoc + should not be called. + +Mon Jan 6 11:59:09 CET 2003 Daniel Veillard + + * libxml-2.0.pc.in: applied the patch to fix #101894 + +Sun Jan 5 23:35:47 CET 2003 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * doc/xmlreader.html: starting documenting the new XmlTextReader + interface. + +Fri Jan 3 17:18:32 CET 2003 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * xmlreader.c python/tests/reader.py: fixed another problem + pointed by Stéphane Bidoul + +Mon Dec 30 12:39:55 CET 2002 Daniel Veillard + + * xmlreader.c python/tests/reader.py: fixed a limit case problem + with "" + +Mon Dec 30 11:53:44 CET 2002 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * doc/guidelines.html: added a document on guildeline for + publishing and deploying XML + +Fri Dec 27 20:35:15 CET 2002 Daniel Veillard + + * 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 + + * python/libxml.py: added a few predefined xmlTextReader parser + configuration values. + +Fri Dec 27 12:57:22 CET 2002 Daniel Veillard + + * python/libxml_wrap.h: trying to fix #102037 + +Fri Dec 27 12:18:14 CET 2002 Daniel Veillard + + * 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 + + * 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 + + * xmlreader.c: Fixed the empty node detection to avoid reporting + an inexistant close tag. + +Mon Dec 23 15:42:24 CET 2002 Daniel Veillard + + * 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 + + * testC14N.c vms/config.vms: applied Craig A. Berry patches for VMS + +Fri Dec 20 11:27:49 CET 2002 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * xmlIO.c: applied a patch for VMS following the report by + Nigel Hall + +Tue Dec 17 11:29:41 CET 2002 Daniel Veillard + + * parser.c: the parseStartTag bug fix wasn't complete. + +Mon Dec 16 23:00:05 CET 2002 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * win32/libxml2.def.src: exported htmlNodeDumpOutput + +Thu Dec 12 10:59:11 CET 2002 Daniel Veillard + + * 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 + + * HTMLtree.c include/libxml/HTMLtree.h: patch from Mark Vakoc + 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 + + * 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 + + * include/win32config.h: applied mingw patch from Magnus Henoch + +Wed Dec 11 16:58:48 CET 2002 Daniel Veillard + + * catalog.c doc/libxml2-api.xml: a bit more cleanup + +Wed Dec 11 14:54:47 CET 2002 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * win32/libxml2.def.src: applied YALDSP from Mark Vakoc + +Wed Dec 4 16:08:49 CET 2002 Daniel Veillard + + * 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 + + * nanhttp.c: handle HTTP URL escaping, problem reported by + Glen Nakamura and Stefano Zacchiroli + +Sat Nov 30 12:19:17 CET 2002 Daniel Veillard + + * DOCBparser.c HTMLparser.c parser.c valid.c xpath.c: code cleanup + +Thu Nov 28 12:53:22 CET 2002 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * 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 + + * libxml.spec.in configure.in: add a line in %changelog for releases + +Mon Nov 25 14:18:27 CET 2002 Daniel Veillard + + * 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 + + * 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 + + * doc/Makefile.am: Jan Rafaj pointed a bug in the Makefile. + +Sat Nov 23 12:21:24 CET 2002 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * 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 + + * HTMLparser.c: final touch at closing #87235

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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * parser.c: Martin Stoilov pointed out a potential leak in + xmlCreateMemoryParserCtxt + +Mon Nov 18 16:05:51 CET 2002 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * include/libxml/parser.h: fixed bug #98338 , fatalError SAX + callback is never used. + +Tue Nov 12 13:32:50 CET 2002 Daniel Veillard + + * 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 + + 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 + + * doc/tutorial/ar01s08.html + adding file what I forgot for tutorial + +Sun Nov 10 20:33:13 MST 2002 John Fleck + + 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 + + * 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 + + * 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 + + * 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 + + * tree.c: make xmlFreeNode() handle attributes correctly. + +Wed Nov 6 23:51:11 CET 2002 Igor Zlatkovic + + * catalog.c: completed the #96963 fix, as reported by Karl + Eichwalder + +Wed Nov 6 16:48:44 CET 2002 Daniel Veillard + + * xpointer.c: tried to fix bug #97852 reported by Nicolas Noffke + +Sun Nov 3 10:43:44 CET 2002 Daniel Veillard + + * Makefile.am: switched the order of a couple of includes + to fix bugs #97100 + +Thu Oct 31 17:11:46 CEST 2002 Igor Zlatkovic + + * 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 + + * 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 + + * 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 + + * configure.in: removed xmlwin32version.h + * include/libxml/Makefile.am: removed xmlwin32version.h + +Mon Oct 28 14:01:29 CET 2002 Daniel Veillard + + * tree.c: applied patch from Brian Stafford to fix a bug + in xmlReconciliateNs() + +Mon Oct 28 13:51:55 CET 2002 Daniel Veillard + + * tree.c: applied patch from Christian Glahn to allow + xmlNewChild() on document fragment nodes + +Sat Oct 26 15:27:00 CEST 2002 Daniel Veillard + + * 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 + + * 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 + + * include/Makefile.am: added winsockcompat.h to EXTRA_DIST to + fix bug #96586 + +Tue Oct 22 21:13:06 CEST 2002 Daniel Veillard + + * 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 + + * 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 + + * include/libxml/encoding.h encoding.c: made xmlGetUTF8Char public + +Tue Oct 22 16:25:18 CEST 2002 Daniel Veillard + + * debugXML.c: adding a grep command to --shell in xmllint + for T.V. Raman + +Tue Oct 22 16:23:57 CEST 2002 Daniel Veillard + + * xmlcatalog.c: tried to fix some of the problem with --sgml + +Mon Oct 21 09:57:10 CEST 2002 Daniel Veillard + + * 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 + + * 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 + + * python/types.c: fixed bugs when passing result value tree + to Python functions. + +Fri Oct 18 13:18:53 CEST 2002 Daniel Veillard + + * 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 + + * parser.c: fixed a XML Namespace compliance bug reported by + Alexander Grimalovsky + +Wed Oct 16 17:18:42 CEST 2002 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * README: updated the contact informations + +Tue Oct 15 10:35:57 CEST 2002 Daniel Veillard + + * 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 + + * tree.c: investigating xmlNodeGetContent() on namespace nodes + and removed a few warnings + +Mon Oct 14 13:12:55 CEST 2002 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * doc/index.py doc/search.php: added mailing-list archives + indexing and lookup + +Tue Oct 8 10:25:07 CEST 2002 Daniel Veillard + + * tree.c: patch from Mark Vakoc to fix xmlNodeGetPath() + +Mon Oct 7 13:12:03 CEST 2002 Daniel Veillard + + * 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 + + * doc/index.py: added HTML page indexing + +Fri Oct 4 15:33:55 CEST 2002 Igor Zlatkovic + + * 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 + + * valid.c: typo/bug found by Christian Glahn + +Sun Sep 29 19:44:10 CEST 2002 Igor Zlatkovic + + * 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 + + * 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 + + * 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 + + * HTMLtree.c: fixing bug #94241 on HTML boolean attributes + +Thu Sep 26 14:25:33 CEST 2002 Daniel Veillard + + * 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 + + * 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 + + * python/generator.py python/libxml2class.txt: fixed a stupid error + breaking the python API + +Thu Sep 26 00:31:46 CEST 2002 Daniel Veillard + + * 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 + + * 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 + + * doc/xml.html: + fixing ftp links - thanks to Vitaly Ostanin + +Tue Sep 24 16:08:17 CEST 2002 Daniel Veillard + + * 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 + + * Makefile.am: fixed a breakage raised by Jacob + +Fri Sep 20 20:08:18 CEST 2002 Igor Zlatkovic + + * 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 + + * 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 + + * 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 + + * xmlschemastypes.c: as pointed by Igor Float and Double + parsing ain't finished yet + +Fri Sep 20 14:00:16 CEST 2002 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * python/libxml_wrap.h: stupid bug found by mattam@netcourrier.com + +Tue Sep 17 19:58:26 CEST 2002 Daniel Veillard + + * xmlIO.c: small portability glitch fixed. + +Mon Sep 17 12:38:08 CEST 2002 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * 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 + + * win32/configure.js: added more readme info for the binary + package. + +Tue Sep 10 14:15:18 CEST 2002 Daniel Veillard + + * xmlIO.c: fixed a stupid out of bound array error + +Tue Sep 10 13:09:14 CEST 2002 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * python/Makefile.am: applied patch from Christophe Merlet to + reestablish DESTDIR + +Wed Sep 4 14:13:34 CEST 2002 Daniel Veillard + + * libxml.spec.in: fixes libary path for x86_64 AMD + +Tue Sep 3 21:14:19 MDT 2002 John Fleck + + * 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 + + * 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 + + * 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 + + * xmlIO.c: handle Windows sepecific file://localhost/ semantic ... + +Thu Aug 22 22:03:19 CEST 2002 Daniel Veillard + + * xpath.c: possible mem leak patch from Jason Adams + +Thu Aug 22 17:27:30 CEST 2002 Daniel Veillard + + * 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 + + * python/generator.py: closing bug #85258 by generating conditional + compile check to avoid linking to routines not configured in. + +2002-08-22 Havoc Pennington + + * autogen.sh: update error message for missing automake + +Thu Aug 22 11:45:50 CEST 2002 Daniel Veillard + + * 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 + + * 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 + + * win32/Makefile.msvc: added the prefix location to the include + and lib search path. + +2002-08-18 Havoc Pennington + + * 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 + + * configure.in python/Makefile.am: more AMD 64 induced changes from + Frederic Crozat + +Wed Aug 14 16:43:53 CEST 2002 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * python/tests/serialize.py: fixed the test results, indenting + behaviour changed slightly + +Thu Aug 8 11:00:26 2002 Aleksey Sanin + + * 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 + + * c14n.c: fixed a memory leak in c14n code + +Sat Aug 3 00:15:06 CEST 2002 Daniel Veillard + + * 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 + + * 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 + + * 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 + + * 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 + + * HTMLtree.c: trying to fix the API Alphabetic Index A-B for libxml2
Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
Made with Libxml2 Logo

The XML C parser and toolkit of Gnome

API Alphabetic Index A-B for libxml2

Developer Menu
API Indexes
Related links

A-B +C-C +D-E +F-I +J-N +O-P +Q-R +S-S +T-U +V-X +Y-a +b-b +c-c +d-d +e-e +f-f +g-h +i-i +j-l +m-m +n-n +o-o +p-p +q-r +s-s +t-t +u-v +w-w +x-x +y-z +

Letter A:

A-Z
xmlCheckLanguageID
+
A-Za-z
xmlParseEncName
+
A-Za-z0-9
xmlParseEncName
+
ABC
xmlXPathTranslateFunction
+
ABI
_xmlError
+
ALL
xmlAutomataNewAllTrans
+
ANY
xmlIsMixedElement
+xmlParseElementContentDecl
+
APIs
LIBXML_LEGACY_ENABLED
+xmlSchemaValidateSetFilename
+
ARRAY
xmlStrlen
+xmlUTF8Strsize
+
ASCII
UTF8ToHtml
+docbEncodeEntities
+htmlEncodeEntities
+xmlAddEncodingAlias
+xmlDelEncodingAlias
+xmlEncodeEntitiesReentrant
+xmlGetEncodingAlias
+xmlModuleOpen
+xmlModuleSymbol
+xmlNewCharEncodingHandler
+xmlParseCharEncoding
+
ATTLIST
xmlTextWriterStartDTDAttlist
+xmlTextWriterStartDTDEntity
+xmlTextWriterWriteDTDAttlist
+xmlTextWriterWriteFormatDTDAttlist
+xmlTextWriterWriteVFormatDTDAttlist
+
ATTRIBUTE
xmlAddChild
+xmlAddNextSibling
+xmlAddPrevSibling
+
Absolute
xmlBuildURI
+
Accessor
xmlSchemaGetValType
+xmlSchemaValueGetAsBoolean
+xmlSchemaValueGetAsString
+xmlSchemaValueGetNext
+
Activation
xmlTextReaderRelaxNGSetSchema
+xmlTextReaderRelaxNGValidate
+xmlTextReaderRelaxNGValidateCtxt
+xmlTextReaderSchemaValidate
+xmlTextReaderSchemaValidateCtxt
+xmlTextReaderSetSchema
+
Actually
XML_SCHEMAS_TYPE_VARIETY_ABSENT
+
Add
xmlACatalogAdd
+xmlAddChild
+xmlAddChildList
+xmlAddNextSibling
+xmlAddPrevSibling
+xmlAddSibling
+xmlBufferAdd
+xmlBufferAddHead
+xmlCatalogAdd
+xmlCatalogAddLocal
+xmlDictLookup
+xmlDictQLookup
+xmlHashAddEntry
+xmlHashAddEntry2
+xmlHashAddEntry3
+xmlHashUpdateEntry
+xmlHashUpdateEntry2
+xmlHashUpdateEntry3
+
Added
xmlDictGetUsage
+xmlDictSetLimit
+
Additional
_htmlElemDesc
+xmlCleanupGlobals
+xmlInitGlobals
+
AegeanNumbers
xmlUCSIsAegeanNumbers
+
All
_xmlSchema
+_xmlSchemaType
+xmlNanoFTPGet
+xmlNanoFTPList
+xmlParseAttValue
+xmlTextWriterEndDocument
+
Allocate
htmlNewParserCtxt
+xmlNanoFTPNewCtxt
+xmlNewDocElementContent
+xmlNewElementContent
+xmlNewParserCtxt
+xmlNewValidCtxt
+xmlSchemaNewFacet
+xmlSchemaNewNOTATIONValue
+xmlSchemaNewQNameValue
+xmlSchemaNewStringValue
+
Allocates
xmlDOMWrapNewCtxt
+
Allows
xmlCatalogSetDefaultPrefer
+xmlSchemaValidateSetLocator
+
AlphabeticPresentationForms
xmlUCSIsAlphabeticPresentationForms
+
Also
xmlCheckUTF8
+xmlParseAttribute
+xmlValidCtxtNormalizeAttributeValue
+
Always
IS_COMBINING_CH
+
Append
xmlBufferCCat
+xmlBufferCat
+xmlNodeAddContent
+xmlNodeAddContentLen
+
Appendix
xmlRegexpCompile
+
Appends
xmlSchemaValueAppend
+
Applies
htmlCtxtUseOptions
+xmlCtxtUseOptions
+xmlNormalizeURIPath
+xmlXPathCompiledEvalToBoolean
+
Apply
XML_SCHEMAS_ANYATTR_STRICT
+XML_SCHEMAS_ANY_STRICT
+
Arabic
xmlUCSIsArabic
+
ArabicPresentationForms-A
xmlUCSIsArabicPresentationFormsA
+
ArabicPresentationForms-B
xmlUCSIsArabicPresentationFormsB
+
Armenian
xmlUCSIsArmenian
+
Array
_xmlXPathContext
+
Arrows
xmlUCSIsArrows
+
Associate
xmlSetNs
+
Att
xmlParseStartTag
+
AttDef
xmlParseAttributeListDecl
+
AttType
xmlParseAttributeListDecl
+xmlParseAttributeType
+
AttValue
htmlParseElement
+xmlParseAttValue
+xmlParseAttribute
+xmlParseDefaultDecl
+
AttlistDecl
xmlParseAttributeListDecl
+xmlParseMarkupDecl
+
Attribute
_xmlAttribute
+htmlNodeStatus
+htmlParseElement
+xmlParseAttribute
+xmlParseAttributeListDecl
+xmlParseAttributeType
+xmlParseDefaultDecl
+xmlParseStartTag
+xmlTextReaderIsDefault
+xmlTextReaderMoveToElement
+xmlValidateAttributeDecl
+xmlValidateOneAttribute
+xmlValidateOneElement
+xmlValidateOneNamespace
+
Attribute-Value
xmlParseAttValue
+
Attributes
_htmlElemDesc
+xmlParseNotationType
+xmlValidateOneAttribute
+xmlValidateOneNamespace
+xmlXPtrBuildNodeList
+
Automatic
docbCreateFileParserCtxt
+docbParseFile
+docbSAXParseFile
+htmlCreateFileParserCtxt
+htmlParseFile
+htmlSAXParseFile
+xmlCreateEntityParserCtxt
+xmlCreateFileParserCtxt
+xmlCreateURLParserCtxt
+xmlOutputBufferCreateFilename
+xmlParseFile
+xmlParserInputBufferCreateFilename
+xmlRecoverFile
+xmlSAXParseFile
+xmlSAXParseFileWithData
+xmlSAXUserParseFile
+
Automatically
xmlIsBaseCharQ
+xmlIsBaseChar_ch
+xmlIsBlankQ
+xmlIsBlank_ch
+xmlIsCharQ
+xmlIsChar_ch
+xmlIsCombiningQ
+xmlIsDigitQ
+xmlIsDigit_ch
+xmlIsExtenderQ
+xmlIsExtender_ch
+xmlIsIdeographicQ
+xmlIsPubidCharQ
+xmlIsPubidChar_ch
+

Letter B:

BASE
xmlNodeGetBase
+
BAr
xmlXPathTranslateFunction
+
BOM
xmlCharEncOutFunc
+
Balanced
xmlParseBalancedChunkMemory
+xmlParseBalancedChunkMemoryRecover
+xmlParseEntity
+xmlParseInNodeContext
+xmlSAXParseEntity
+
Base
_xmlParserInput
+_xmlSchemaType
+xmlNodeGetBase
+
BaseChar
IS_BASECHAR
+IS_LETTER
+xmlIsLetter
+
Based
xmlExpExpDerive
+xmlXPathIsInf
+xmlXPathIsNaN
+
BasicLatin
xmlUCSIsBasicLatin
+
Basically
xmlValidateDtd
+
Before
xmlParseAttValue
+
Behaves
IS_CHAR_CH
+IS_DIGIT_CH
+IS_EXTENDER_CH
+
Behaviour
IS_BLANK_CH
+
Bengali
xmlUCSIsBengali
+
Best
xmlTextReaderGetRemainder
+
BinHex
xmlTextWriterWriteBinHex
+
Bit
XML_COMPLETE_ATTRS
+XML_DETECT_IDS
+XML_SKIP_IDS
+
BlockElements
xmlUCSIsBlockElements
+
Blocks
xmlStopParser
+
Bopomofo
xmlUCSIsBopomofo
+
BopomofoExtended
xmlUCSIsBopomofoExtended
+
Both
XML_SUBSTITUTE_BOTH
+xmlStreamPush
+xmlStreamPushAttr
+xmlStreamPushNode
+
BoxDrawing
xmlUCSIsBoxDrawing
+
BraillePatterns
xmlUCSIsBraillePatterns
+
Brzozowski
xmlExpExpDerive
+xmlExpStringDerive
+
Buffer
xmlIOParseDTD
+
Bugs:
_htmlElemDesc
+
Buhid
xmlUCSIsBuhid
+
Build
xmlCopyAttributeTable
+xmlCopyDocElementContent
+xmlCopyElementContent
+xmlCopyElementTable
+xmlCopyEntitiesTable
+xmlCopyNotationTable
+xmlGetNodePath
+xmlNodeListGetString
+xmlRegNewExecCtxt
+xmlValidBuildContentModel
+xmlValidGetPotentialChildren
+xmlXPtrBuildNodeList
+
Builds
xmlBuildQName
+xmlNodeListGetRawString
+
But
xmlValidateNotationDecl
+
ByzantineMusicalSymbols
xmlUCSIsByzantineMusicalSymbols
+

A-B +C-C +D-E +F-I +J-N +O-P +Q-R +S-S +T-U +V-X +Y-a +b-b +c-c +d-d +e-e +f-f +g-h +i-i +j-l +m-m +n-n +o-o +p-p +q-r +s-s +t-t +u-v +w-w +x-x +y-z +

Daniel Veillard

diff --git a/doc/APIchunk1.html b/doc/APIchunk1.html new file mode 100644 index 0000000..7947196 --- /dev/null +++ b/doc/APIchunk1.html @@ -0,0 +1,382 @@ + + +API Alphabetic Index C-C for libxml2
Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
Made with Libxml2 Logo

The XML C parser and toolkit of Gnome

API Alphabetic Index C-C for libxml2

Developer Menu
API Indexes
Related links

A-B +C-C +D-E +F-I +J-N +O-P +Q-R +S-S +T-U +V-X +Y-a +b-b +c-c +d-d +e-e +f-f +g-h +i-i +j-l +m-m +n-n +o-o +p-p +q-r +s-s +t-t +u-v +w-w +x-x +y-z +

Letter C:

C14N
xmlC14NDocSaveTo
+xmlC14NExecute
+xmlC14NIsVisibleCallback
+
CATALOG
xmlLoadACatalog
+xmlLoadCatalog
+xmlLoadSGMLSuperCatalog
+
CDATA
HTML_PRESERVE_NODE
+_htmlElemDesc
+xmlKeepBlanksDefault
+xmlNewCDataBlock
+xmlNewChild
+xmlNewDocNode
+xmlNewDocNodeEatName
+xmlNodeSetContent
+xmlNodeSetContentLen
+xmlParseAttValue
+xmlParseAttributeType
+xmlParseCDSect
+xmlParseCharData
+xmlTextWriterEndCDATA
+xmlTextWriterStartCDATA
+xmlTextWriterWriteCDATA
+xmlTextWriterWriteFormatCDATA
+xmlTextWriterWriteVFormatCDATA
+xmlValidCtxtNormalizeAttributeValue
+xmlValidNormalizeAttributeValue
+
CDEnd
xmlParseCDSect
+
CDSect
xmlParseBalancedChunkMemory
+xmlParseBalancedChunkMemoryRecover
+xmlParseCDSect
+xmlParseContent
+xmlParseInNodeContext
+
CDStart
xmlParseCDSect
+
CData
xmlParseCDSect
+xmlRelaxNGValidatePushCData
+xmlValidatePushCData
+
CJKCompatibility
xmlUCSIsCJKCompatibility
+
CJKCompatibilityForms
xmlUCSIsCJKCompatibilityForms
+
CJKCompatibilityIdeographs
xmlUCSIsCJKCompatibilityIdeographs
+
CJKCompatibilityIdeographsSupplement
xmlUCSIsCJKCompatibilityIdeographsSupplement
+
CJKRadicalsSupplement
xmlUCSIsCJKRadicalsSupplement
+
CJKSymbolsandPunctuation
xmlUCSIsCJKSymbolsandPunctuation
+
CJKUnifiedIdeographs
xmlUCSIsCJKUnifiedIdeographs
+
CJKUnifiedIdeographsExtensionA
xmlUCSIsCJKUnifiedIdeographsExtensionA
+
CJKUnifiedIdeographsExtensionB
xmlUCSIsCJKUnifiedIdeographsExtensionB
+
CVS
LIBXML_VERSION_EXTRA
+
CWD
xmlNanoFTPCwd
+
Cache
_xmlXPathContext
+
Call
htmlInitAutoClose
+xmlInitParser
+xmlXPathOrderDocElems
+
Callback
externalSubset
+externalSubsetSAXFunc
+internalSubset
+internalSubsetSAXFunc
+xmlEntityReferenceFunc
+xmlHashCopier
+xmlHashDeallocator
+xmlHashScanner
+xmlHashScannerFull
+xmlInputCloseCallback
+xmlInputMatchCallback
+xmlInputOpenCallback
+xmlInputReadCallback
+xmlListDataCompare
+xmlListDeallocator
+xmlListWalker
+xmlOutputCloseCallback
+xmlOutputMatchCallback
+xmlOutputOpenCallback
+xmlOutputWriteCallback
+xmlParserInputDeallocate
+xmlRegExecCallbacks
+xmlSAX2ExternalSubset
+xmlSAX2InternalSubset
+xmlValidityErrorFunc
+xmlValidityWarningFunc
+
Callback:
resolveEntitySAXFunc
+
Called
cdataBlockSAXFunc
+endDocumentSAXFunc
+endElementSAXFunc
+referenceSAXFunc
+startDocumentSAXFunc
+startElementSAXFunc
+
Calling
xmlRegisterHTTPPostCallbacks
+
Canonical
xmlC14NDocDumpMemory
+xmlC14NDocSave
+xmlC14NDocSaveTo
+xmlC14NExecute
+
Canonicalization
LIBXML_C14N_ENABLED
+xmlC14NDocDumpMemory
+xmlC14NDocSave
+xmlC14NDocSaveTo
+xmlC14NExecute
+
Carl
xmlURIEscape
+
Catalog
LIBXML_CATALOG_ENABLED
+XML_CATALOG_PI
+xmlACatalogAdd
+xmlACatalogDump
+xmlACatalogRemove
+xmlACatalogResolve
+xmlACatalogResolvePublic
+xmlACatalogResolveSystem
+xmlACatalogResolveURI
+xmlCatalogSetDefaultPrefer
+xmlFreeCatalog
+xmlLoadACatalog
+xmlNewCatalog
+
Catalogs
XML_CATALOGS_NAMESPACE
+xmlLoadACatalog
+xmlLoadSGMLSuperCatalog
+
Change
xmlSetFeature
+xmlTextReaderSetParserProp
+
Changes
xmlSetExternalEntityLoader
+
Char
IS_BYTE_CHAR
+IS_CHAR
+xmlParseCDSect
+xmlParseCharRef
+xmlParseComment
+xmlParsePI
+
CharData
xmlParseBalancedChunkMemory
+xmlParseBalancedChunkMemoryRecover
+xmlParseCharData
+xmlParseContent
+xmlParseInNodeContext
+
CharRef
htmlParseCharRef
+xmlCharEncOutFunc
+xmlDecodeEntities
+xmlEncodeEntitiesReentrant
+xmlParseCharRef
+xmlParseReference
+xmlParserHandleReference
+xmlStringDecodeEntities
+xmlStringLenDecodeEntities
+
Character
xmlDocDumpFormatMemoryEnc
+xmlDocDumpMemoryEnc
+xmlGetCharEncodingName
+xmlParseCharEncoding
+xmlParseCharRef
+
Characters
xmlParseCharRef
+
Checka
xmlSchemaValidateLengthFacet
+xmlSchemaValidateLengthFacetWhtsp
+
Checks
htmlAttrAllowed
+htmlElementAllowedHere
+htmlElementAllowedHereDesc
+htmlElementStatusHere
+htmlNodeStatus
+xmlAutomataIsDeterminist
+xmlCheckLanguageID
+xmlCheckUTF8
+xmlIsBlankNode
+xmlSchemaCheckFacet
+xmlSchemaValidateListSimpleTypeFacet
+xmlXPathNodeSetIsEmpty
+xmlXPathStackIsExternal
+
Cherokee
xmlUCSIsCherokee
+
Children
xmlParseElementContentDecl
+
Chunk
docbParseChunk
+htmlParseChunk
+xmlParseBalancedChunkMemory
+xmlParseBalancedChunkMemoryRecover
+xmlParseChunk
+xmlParseInNodeContext
+
Cleanup
xmlCleanupCharEncodingHandlers
+xmlCleanupPredefinedEntities
+xmlCtxtResetLastError
+xmlNanoFTPCleanup
+xmlNanoHTTPCleanup
+xmlRelaxNGCleanupTypes
+xmlResetError
+xmlResetLastError
+xmlSchemaCleanupTypes
+xmlSchemaFreeValue
+xmlXPathRegisteredFuncsCleanup
+xmlXPathRegisteredNsCleanup
+xmlXPathRegisteredVariablesCleanup
+
Clear
xmlClearNodeInfoSeq
+xmlClearParserCtxt
+xmlPopInputCallbacks
+
Clears
xmlSetupParserForBuffer
+
Close
xmlFileClose
+xmlIOFTPClose
+xmlIOHTTPClose
+xmlNanoFTPClose
+xmlNanoFTPCloseConnection
+xmlSaveClose
+
Closed
xmlTextReaderClose
+
CombiningChar
IS_COMBINING
+xmlNamespaceParseNCName
+xmlParseName
+xmlScanName
+xmlXPathParseNCName
+xmlXPathParseName
+
CombiningDiacriticalMarks
xmlUCSIsCombiningDiacriticalMarks
+
CombiningDiacriticalMarksforSymbols
xmlUCSIsCombiningDiacriticalMarksforSymbols
+
CombiningHalfMarks
xmlUCSIsCombiningHalfMarks
+
CombiningMarksforSymbols
xmlUCSIsCombiningMarksforSymbols
+
Comment
xmlParseBalancedChunkMemory
+xmlParseBalancedChunkMemoryRecover
+xmlParseComment
+xmlParseContent
+xmlParseInNodeContext
+xmlParseMarkupDecl
+xmlParseMisc
+
Compare
xmlParseCharEncoding
+xmlSchemaCompareValues
+xmlSchemaCompareValuesWhtsp
+xmlXPathCmpNodes
+
Compile
xmlAutomataCompile
+xmlPatterncompile
+xmlXPathCompile
+xmlXPathCtxtCompile
+xmlXPathStringEvalNumber
+
Compress
docbCreateFileParserCtxt
+docbParseFile
+docbSAXParseFile
+htmlCreateFileParserCtxt
+htmlParseFile
+htmlSAXParseFile
+xmlCreateEntityParserCtxt
+xmlCreateFileParserCtxt
+xmlCreateURLParserCtxt
+xmlOutputBufferCreateFilename
+xmlParseFile
+xmlParserInputBufferCreateFilename
+xmlRecoverFile
+xmlSAXParseFile
+xmlSAXParseFileWithData
+xmlSAXUserParseFile
+
Computes
xmlBuildURI
+
Concat
xmlTextConcat
+
Constructs
xmlCanonicPath
+xmlPathToURI
+
Content
xmlNodeGetBase
+xmlParseElementContentDecl
+
Content-Type
xmlNanoHTTPFetch
+xmlNanoHTTPMethod
+xmlNanoHTTPMethodRedir
+xmlNanoHTTPOpen
+xmlNanoHTTPOpenRedir
+
Contrary
xmlEncodeEntitiesReentrant
+
ControlPictures
xmlUCSIsControlPictures
+
Convenient
xmlBoolToText
+
Convert
xmlCatalogConvert
+xmlConvertSGMLCatalog
+
Converts
xmlXPathCastBooleanToNumber
+xmlXPathCastBooleanToString
+xmlXPathCastNodeSetToBoolean
+xmlXPathCastNodeSetToNumber
+xmlXPathCastNodeSetToString
+xmlXPathCastNodeToNumber
+xmlXPathCastNodeToString
+xmlXPathCastNumberToBoolean
+xmlXPathCastNumberToString
+xmlXPathCastStringToBoolean
+xmlXPathCastStringToNumber
+xmlXPathCastToBoolean
+xmlXPathCastToNumber
+xmlXPathCastToString
+xmlXPathConvertBoolean
+xmlXPathConvertNumber
+xmlXPathConvertString
+
Copies
xmlSchemaCopyValue
+
Copy
xmlCopyEnumeration
+xmlGetFeaturesList
+xmlReconciliateNs
+
Correct
xmlSetCompressMode
+xmlSetDocCompressMode
+
Could
_xmlSchemaType
+
Count
xmlLsCountNode
+
Creates
htmlNewDoc
+htmlNewDocNoDtD
+xmlCreateDocParserCtxt
+xmlExpNewCtxt
+xmlNewDoc
+xmlXIncludeNewContext
+xmlXPathContextSetCache
+
Creation
xmlNewCDataBlock
+xmlNewCharRef
+xmlNewChild
+xmlNewComment
+xmlNewDocComment
+xmlNewDocFragment
+xmlNewDocNode
+xmlNewDocNodeEatName
+xmlNewDocPI
+xmlNewDocRawNode
+xmlNewDocText
+xmlNewDocTextLen
+xmlNewDtd
+xmlNewGlobalNs
+xmlNewNode
+xmlNewNodeEatName
+xmlNewNs
+xmlNewPI
+xmlNewReference
+xmlNewText
+xmlNewTextChild
+xmlNewTextLen
+
CurrencySymbols
xmlUCSIsCurrencySymbols
+
Current
_xmlParserCtxt
+_xmlParserInput
+_xmlValidCtxt
+
Currently
xmlDOMWrapCloneNode
+xmlNanoFTPGetConnection
+xmlNanoFTPInit
+xmlNanoHTTPInit
+xmlTextReaderNextSibling
+
Cut
xmlReconciliateNs
+
CypriotSyllabary
xmlUCSIsCypriotSyllabary
+
Cyrillic
xmlUCSIsCyrillic
+
CyrillicSupplement
xmlUCSIsCyrillicSupplement
+

A-B +C-C +D-E +F-I +J-N +O-P +Q-R +S-S +T-U +V-X +Y-a +b-b +c-c +d-d +e-e +f-f +g-h +i-i +j-l +m-m +n-n +o-o +p-p +q-r +s-s +t-t +u-v +w-w +x-x +y-z +

Daniel Veillard

diff --git a/doc/APIchunk10.html b/doc/APIchunk10.html new file mode 100644 index 0000000..22d5061 --- /dev/null +++ b/doc/APIchunk10.html @@ -0,0 +1,675 @@ + + +API Alphabetic Index Y-a for libxml2
Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
Made with Libxml2 Logo

The XML C parser and toolkit of Gnome

API Alphabetic Index Y-a for libxml2

Developer Menu
API Indexes
Related links

A-B +C-C +D-E +F-I +J-N +O-P +Q-R +S-S +T-U +V-X +Y-a +b-b +c-c +d-d +e-e +f-f +g-h +i-i +j-l +m-m +n-n +o-o +p-p +q-r +s-s +t-t +u-v +w-w +x-x +y-z +

Letter Y:

YES
htmlNodeStatus
+
YiRadicals
xmlUCSIsYiRadicals
+
YiSyllables
xmlUCSIsYiSyllables
+
YijingHexagramSymbols
xmlUCSIsYijingHexagramSymbols
+

Letter Z:

ZLIB
docbCreateFileParserCtxt
+docbParseFile
+docbSAXParseFile
+htmlCreateFileParserCtxt
+htmlParseFile
+htmlSAXParseFile
+xmlCreateEntityParserCtxt
+xmlCreateFileParserCtxt
+xmlCreateURLParserCtxt
+xmlGetCompressMode
+xmlGetDocCompressMode
+xmlOutputBufferCreateFilename
+xmlParseFile
+xmlParserInputBufferCreateFilename
+xmlRecoverFile
+xmlSAXParseFile
+xmlSAXParseFileWithData
+xmlSAXUserParseFile
+xmlSetCompressMode
+xmlSetDocCompressMode
+
Zlib
LIBXML_ZLIB_ENABLED
+

Letter a:

a-z
xmlCheckLanguageID
+xmlURIEscapeStr
+
a-zA-Z
IS_ASCII_LETTER
+
a-zA-Z0-9
IS_PUBIDCHAR
+
a@b
xmlNanoFTPProxy
+
abc
xmlXPathTranslateFunction
+
abc-
xmlXPathTranslateFunction
+
able
xmlEntityReferenceFunc
+xmlFindCharEncodingHandler
+xmlGetCharEncodingHandler
+xmlParserInputBufferGrow
+xmlXPathOrderDocElems
+
about
_xmlParserCtxt
+xmlDebugDumpString
+xmlShellDir
+xmlTextWriterWriteRawLen
+
above
xmlParseMarkupDecl
+xmlStreamWantsAnyNode
+xmlXPathSubstringFunction
+
absent
XML_SCHEMAS_ELEM_BLOCK_ABSENT
+XML_SCHEMAS_ELEM_BLOCK_EXTENSION
+XML_SCHEMAS_ELEM_FINAL_ABSENT
+XML_SCHEMAS_TYPE_VARIETY_ABSENT
+
absoluteURI
xmlParseURI
+
abstain
xmlCleanupParser
+xmlCleanupThreads
+
abstract
XML_SCHEMAS_ELEM_ABSTRACT
+XML_SCHEMAS_TYPE_ABSTRACT
+
accept
xmlExpMaxToken
+xmlGetNoNsProp
+xmlIsMixedElement
+
acceptable
xmlRegExecErrInfo
+xmlRegExecNextValues
+
accepted
IS_BYTE_CHAR
+xmlCatalogGetDefaults
+xmlCatalogSetDefaultPrefer
+xmlCatalogSetDefaults
+xmlExpGetStart
+xmlRegExecErrInfo
+xmlRegExecNextValues
+xmlTextReaderNormalization
+
accepting
xmlTextReaderNormalization
+
accepts
xmlExpIsNillable
+xmlExpSubsume
+
access
xmlGcMemGet
+xmlGcMemSetup
+xmlMemGet
+xmlMemSetup
+xmlNewMutex
+xmlNewRMutex
+xmlSchemaValidCtxtGetParserCtxt
+
accessed
xmlTextReaderCurrentDoc
+xmlTextReaderCurrentNode
+
accesses
xmlCreateURLParserCtxt
+xmlNoNetExternalEntityLoader
+
accexpted
xmlExpSubsume
+
accommodate
xmlBufferResize
+
according
xmlBuildURI
+xmlDetectCharEncoding
+xmlSAXVersion
+xmlSchemaValidateFacetWhtsp
+xmlURIEscape
+xmlXPathCompareValues
+
accordingly
xmlParseCharEncoding
+xmlParserHandlePEReference
+xmlParserHandleReference
+xmlValidCtxtNormalizeAttributeValue
+
account
xmlSchemaValidateFacetWhtsp
+
acquire
_xmlDOMWrapCtxt
+xmlDOMWrapAcquireNsFunction
+
act
xmlStreamPush
+xmlStreamPushAttr
+xmlStreamPushNode
+
action
xmlDocSetRootElement
+
activate
xmlTextReaderSetParserProp
+
activated
DEBUG_MEMORY
+xmlAutomataNewAllTrans
+xmlAutomataNewCountTrans
+xmlAutomataNewCountTrans2
+xmlAutomataNewNegTrans
+xmlAutomataNewOnceTrans
+xmlAutomataNewOnceTrans2
+xmlAutomataNewTransition
+xmlAutomataNewTransition2
+xmlTextReaderRelaxNGSetSchema
+xmlTextReaderRelaxNGValidate
+xmlTextReaderRelaxNGValidateCtxt
+xmlTextReaderSchemaValidate
+xmlTextReaderSchemaValidateCtxt
+xmlTextReaderSetSchema
+
activates
xmlXPathContextSetCache
+
acts
xmlGetProp
+
actual
xmlGetUTF8Char
+xmlSchemaValidateLengthFacet
+xmlSchemaValidateLengthFacetWhtsp
+xmlXPathFreeNodeSet
+xmlXPtrFreeLocationSet
+
actually
_xmlDoc
+_xmlParserCtxt
+setDocumentLocator
+setDocumentLocatorSAXFunc
+xmlAddEncodingAlias
+xmlCurrentChar
+xmlDelEncodingAlias
+xmlGetEncodingAlias
+xmlNewCharEncodingHandler
+xmlParseCharEncoding
+xmlParseNotationDecl
+xmlSAX2SetDocumentLocator
+xmlStringCurrentChar
+xmlTextReaderByteConsumed
+xmlXPathOrderDocElems
+
actuate
xlinkExtendedLinkFunk
+
add
xmlACatalogAdd
+xmlBufferAdd
+xmlBufferAddHead
+xmlBufferCat
+xmlBufferWriteCHAR
+xmlBufferWriteChar
+xmlBufferWriteQuotedString
+xmlCatalogAdd
+xmlListPushBack
+xmlListPushFront
+xmlXPathAddValues
+xmlXPathNodeSetAdd
+xmlXPathNodeSetAddNs
+xmlXPathNodeSetAddUnique
+xmlXPtrLocationSetAdd
+
added
attribute
+attributeSAXFunc
+htmlDocContentDumpFormatOutput
+htmlDocContentDumpOutput
+htmlDocDumpMemoryFormat
+htmlNodeDump
+htmlNodeDumpFile
+htmlNodeDumpFileFormat
+htmlNodeDumpFormatOutput
+htmlNodeDumpOutput
+htmlSaveFileEnc
+htmlSaveFileFormat
+xmlAddChild
+xmlAddNextSibling
+xmlAddPrevSibling
+xmlCheckLanguageID
+xmlDOMWrapCloneNode
+xmlDocDumpFormatMemory
+xmlDocDumpFormatMemoryEnc
+xmlDocFormatDump
+xmlNewChild
+xmlNewTextChild
+xmlSaveFormatFile
+xmlSaveFormatFileEnc
+xmlSaveFormatFileTo
+xmlStrcat
+xmlStrncat
+xmlXPathNodeSetMerge
+xmlXPtrLocationSetMerge
+
adding
xmlLoadSGMLSuperCatalog
+xmlNanoHTTPMethod
+xmlNanoHTTPMethodRedir
+
addition
xmlHashAddEntry
+xmlHashAddEntry2
+xmlHashAddEntry3
+xmlHashUpdateEntry
+xmlHashUpdateEntry2
+xmlHashUpdateEntry3
+xmlXPathSubstringFunction
+
additional
xmlDOMWrapAdoptNode
+xmlDOMWrapCloneNode
+xmlDOMWrapReconcileNamespaces
+
additionally
xmlStreamWantsAnyNode
+
address
xmlModuleSymbol
+xmlNewTextWriterDoc
+
adds
xmlAutomataNewAllTrans
+xmlAutomataNewCountTrans
+xmlAutomataNewCountTrans2
+xmlAutomataNewCountedTrans
+xmlAutomataNewCounterTrans
+xmlAutomataNewEpsilon
+xmlAutomataNewNegTrans
+xmlAutomataNewOnceTrans
+xmlAutomataNewOnceTrans2
+xmlAutomataNewTransition
+xmlAutomataNewTransition2
+xmlBufferWriteCHAR
+
adequate
xmlStringDecodeEntities
+xmlStringLenDecodeEntities
+
adjacent
xmlAddChild
+xmlAddChildList
+xmlAddPrevSibling
+xmlAddSibling
+
affect
xmlKeepBlanksDefault
+
affected
xmlSchemaValidityLocatorFunc
+
affiliation
_xmlSchemaElement
+
afraid
xmlEncodeEntities
+
after
UTF8ToHtml
+UTF8Toisolat1
+_xmlParserCtxt
+docbEncodeEntities
+htmlEncodeEntities
+isolat1ToUTF8
+xmlAutomataCompile
+xmlCharEncodingInputFunc
+xmlCharEncodingOutputFunc
+xmlNanoFTPCheckResponse
+xmlNanoFTPFreeCtxt
+xmlNanoFTPGetResponse
+xmlReconciliateNs
+xmlSaveFileTo
+xmlSaveFormatFileTo
+xmlUnlinkNode
+xmlValidGetValidElements
+xmlXPathNextFollowing
+xmlXPathStringFunction
+
again
xmlCreatePushParserCtxt
+
against
LIBXML_TEST_VERSION
+XML_SCHEMAS_ELEM_INTERNAL_CHECKED
+checkNamespace
+xmlCheckVersion
+xmlRegexpCompile
+xmlRegexpExec
+xmlSchemaValidateFacet
+xmlSchemaValidateFacetWhtsp
+xmlSchemaValidateLengthFacet
+xmlSchemaValidateLengthFacetWhtsp
+xmlSchemaValidateListSimpleTypeFacet
+xmlSchematronValidateDoc
+xmlShellValidate
+xmlValidateDtd
+
aggregate
xmlBufGetNodeContent
+xmlNodeBufGetContent
+xmlNodeGetContent
+
ahead
XML_MAX_LOOKUP_LIMIT
+
algebraic
xmlExpExpDerive
+
alias
xmlAddEncodingAlias
+xmlDelEncodingAlias
+xmlGetEncodingAlias
+
aliases
xmlCleanupCharEncodingHandlers
+xmlCleanupEncodingAliases
+
aliasing
XML_CAST_FPTR
+xmlSearchNsByHref
+
allocate
_xmlDoc
+xmlBufferGrow
+xmlBuildQName
+xmlMallocAtomicLoc
+xmlMallocLoc
+xmlMemMalloc
+xmlMemRealloc
+xmlNewMutex
+xmlNewRMutex
+xmlReallocLoc
+xmlXPathObjectCopy
+
allocation
LIBXML_THREAD_ALLOC_ENABLED
+htmlNewParserCtxt
+xmlBufferSetAllocationScheme
+xmlGetBufferAllocationScheme
+xmlMallocAtomicLoc
+xmlMallocLoc
+xmlMemMalloc
+xmlMemRealloc
+xmlMemStrdupLoc
+xmlMemoryStrdup
+xmlNormalizeURIPath
+xmlReallocLoc
+xmlSetBufferAllocationScheme
+xmlTextReaderGetRemainder
+
allocations
xmlGcMemGet
+xmlGcMemSetup
+xmlMemSetup
+xmlParserInputDeallocate
+
allocator
DEBUG_MEMORY
+LIBXML_ATTR_ALLOC_SIZE
+
allocators
xmlGcMemGet
+xmlGcMemSetup
+
allow
XML_SCHEMAS_ATTR_GLOBAL
+XML_SCHEMAS_ATTR_NSDEFAULT
+XML_SCHEMAS_ELEM_NSDEFAULT
+docbCreatePushParserCtxt
+htmlAttrAllowed
+htmlNodeStatus
+xmlAutomataNewAllTrans
+xmlCheckLanguageID
+xmlCheckUTF8
+xmlCreatePushParserCtxt
+xmlKeepBlanksDefault
+xmlNewDocNode
+xmlNewDocNodeEatName
+xmlParseVersionNum
+xmlSchemaValidCtxtGetParserCtxt
+xmlSearchNs
+xmlShell
+xmlValidateNCName
+xmlValidateNMToken
+xmlValidateName
+xmlValidateQName
+
allowable
xmlSkipBlankChars
+
allowed
XML_MAX_DICTIONARY_LIMIT
+XML_MAX_LOOKUP_LIMIT
+XML_MAX_NAME_LENGTH
+XML_MAX_TEXT_LENGTH
+_htmlElemDesc
+_xmlElement
+_xmlSchemaWildcard
+htmlElementAllowedHere
+htmlElementAllowedHereDesc
+htmlNodeStatus
+xmlAutomataNewAllTrans
+xmlAutomataNewCounterTrans
+xmlBufNodeDump
+xmlIsLetter
+xmlNodeAddContent
+xmlNodeAddContentLen
+xmlNodeDump
+xmlNodeDumpOutput
+xmlParseBalancedChunkMemory
+xmlParseBalancedChunkMemoryRecover
+xmlParseInNodeContext
+xmlValidGetPotentialChildren
+xmlXPathNormalizeFunction
+
allowing
xmlNoNetExternalEntityLoader
+xmlTextReaderCurrentDoc
+xmlTextReaderCurrentNode
+
allows
htmlAutoCloseTag
+htmlIsAutoClosed
+xmlCatalogAdd
+xmlNewChild
+xmlNodeSetContent
+xmlNodeSetContentLen
+xmlParseURIRaw
+xmlTextReaderConstString
+
alphanumerics
xmlCheckLanguageID
+
already
XML_SCHEMAS_ATTRGROUP_GLOBAL
+XML_SCHEMAS_ATTRGROUP_WILDCARD_BUILDED
+_xmlParserInput
+xmlAddNextSibling
+xmlAddPrevSibling
+xmlAddSibling
+xmlBuildRelativeURI
+xmlDOMWrapAdoptNode
+xmlDOMWrapCloneNode
+xmlDOMWrapReconcileNamespaces
+xmlFreeFunc
+xmlGcMemSetup
+xmlInitializeDict
+xmlMemSetup
+xmlParseCharEncoding
+xmlParseNotationType
+xmlParserInputGrow
+xmlReallocFunc
+xmlReplaceNode
+xmlXPathNodeSetAddUnique
+xmlXPtrLocationSetAdd
+
also
_xmlEntity
+xmlCharEncodingOutputFunc
+xmlCheckHTTPInput
+xmlCleanupParser
+xmlHasProp
+xmlKeepBlanksDefault
+xmlNanoFTPProxy
+xmlStreamPush
+xmlStreamPushAttr
+xmlStreamPushNode
+xmlTextReaderPreserve
+xmlTextReaderPreservePattern
+xmlXPathStringEvalNumber
+
alternative
xmlTextWriterStartDTD
+xmlTextWriterWriteDTD
+xmlTextWriterWriteDTDEntity
+xmlTextWriterWriteDTDExternalEntity
+xmlTextWriterWriteDTDExternalEntityContents
+xmlTextWriterWriteDTDNotation
+xmlTextWriterWriteFormatDTD
+xmlTextWriterWriteVFormatDTD
+
always
INPUT_CHUNK
+xmlDecodeEntities
+xmlSubstituteEntitiesDefault
+
amd
xmlCatalogIsEmpty
+
amount
INPUT_CHUNK
+_xmlParserInputBuffer
+xmlDictGetUsage
+xmlMemDisplayLast
+xmlMemUsed
+xmlParserInputBufferGrow
+xmlParserInputBufferRead
+xmlParserInputGrow
+
amp
xmlParseEntityRef
+xmlParseSDDecl
+xmlParserHandleReference
+
ampersand
xmlNewTextChild
+
analysis
_xmlParserCtxt
+_xmlValidCtxt
+
analyze
xmlParseURI
+xmlParseURIRaw
+xmlParseURIReference
+
analyzed
_xmlParserInput
+
ancestor
xmlNodeGetLang
+xmlNodeGetSpacePreserve
+xmlShellPwd
+xmlXPathLangFunction
+xmlXPathNextAncestor
+
ancestor-or-self
xmlXPathNextAncestorOrSelf
+
ancestors
xmlXPathNextAncestor
+xmlXPathNextAncestorOrSelf
+xmlXPathNextPreceding
+
anchored
xmlGetNsProp
+xmlHasNsProp
+
angle
xmlParseCharData
+
annotation
_xmlSchemaAnnot
+
another
xmlCharEncodingOutputFunc
+xmlCleanupParser
+xmlCleanupThreads
+xmlInputMatchCallback
+xmlOutputMatchCallback
+xmlSetGenericErrorFunc
+
anySimpleType
xmlSchemaNewStringValue
+
anyURI
xmlSchemaGetCanonValue
+
anymore
XML_SCHEMAS_ANYATTR_LAX
+XML_SCHEMAS_ANYATTR_SKIP
+XML_SCHEMAS_ANYATTR_STRICT
+XML_SCHEMAS_ELEM_NSDEFAULT
+xmlDictCleanup
+xmlNamespaceParseNCName
+xmlNamespaceParseNSDef
+xmlNamespaceParseQName
+xmlNewEntity
+
anyway
xmlCheckLanguageID
+xmlRecoverDoc
+xmlRecoverFile
+xmlRecoverMemory
+xmlValidateNotationDecl
+
apart
xmlXPathStringFunction
+
apos
xmlParseEntityRef
+xmlParseSDDecl
+xmlParserHandleReference
+
appear
xmlNewTextChild
+xmlParseAttributeType
+xmlParseElementMixedContentDecl
+xmlParsePEReference
+xmlParseSDDecl
+xmlParseStartTag
+xmlParserHandlePEReference
+
appearing
xmlValidatePopElement
+xmlValidatePushElement
+
appears
_xmlURI
+xmlExpGetStart
+xmlParseCharData
+xmlParseElementChildrenContentDecl
+xmlParseEntityRef
+xmlParseSDDecl
+
append
xmlCopyChar
+xmlCopyCharMultiByte
+xmlValidGetValidElements
+
appended
xmlParseAttValue
+xmlSchemaValueAppend
+
appending
xmlParseAttValue
+
appendix
xmlDetectCharEncoding
+
applicable
xmlCopyNode
+xmlDocCopyNode
+
application
_xmlAttr
+_xmlAttribute
+_xmlDoc
+_xmlDtd
+_xmlElement
+_xmlEntity
+_xmlNode
+_xmlNs
+resolveEntity
+resolveEntitySAXFunc
+xmlCheckVersion
+xmlCleanupParser
+xmlCleanupThreads
+xmlCurrentChar
+xmlGetExternalEntityLoader
+xmlLineNumbersDefault
+xmlParseAttValue
+xmlSAX2ResolveEntity
+xmlSetExternalEntityLoader
+xmlXIncludeProcessFlagsData
+xmlXIncludeProcessTreeFlagsData
+
applications
xmlSetGenericErrorFunc
+xmlSetStructuredErrorFunc
+
applied
xmlHashCopy
+xmlHashScan
+xmlHashScan3
+xmlHashScanFull
+xmlHashScanFull3
+
applies
xmlParseElementChildrenContentDecl
+xmlParseElementMixedContentDecl
+
apply
xmlListReverseWalk
+xmlListWalk
+xmlParseMarkupDecl
+xmlParseSDDecl
+xmlSchemaValPredefTypeNodeNoNorm
+xmlValidateRoot
+
applying
xmlGetNsList
+xmlXPathIdFunction
+
appropriate
xlinkIsLink
+xmlCheckHTTPInput
+xmlParseURIReference
+
arcs
xlinkExtendedLinkFunk
+
area
xmlBufferCreateStatic
+xmlMallocAtomicLoc
+xmlMallocLoc
+xmlMemMalloc
+xmlMemRealloc
+xmlParserInputBufferCreateMem
+xmlParserInputBufferCreateStatic
+xmlReallocLoc
+
areas
xmlGcMemGet
+xmlGcMemSetup
+xmlMemBlocks
+xmlMemShow
+
args
CHECK_ARITY
+x
+xmlParseBalancedChunkMemory
+xmlParseBalancedChunkMemoryRecover
+xmlParseCtxtExternalEntity
+xmlParseExternalEntity
+xmlXPtrRangeToFunction
+
around
xmlFileOpen
+
arrays
_xmlParserCtxt
+
arry
xmlParserInputBufferPush
+
asked
xmlParseReference
+
assume
xmlStrcat
+xmlStrdup
+
assumed
xmlCheckUTF8
+
assumes
xmlBuildRelativeURI
+
assuming
xmlParseBalancedChunkMemoryRecover
+xmlSaveFileTo
+xmlSaveFormatFileTo
+
assure
xmlGetUTF8Char
+
atom
xmlExpNewAtom
+xmlExpNewOr
+xmlExpNewRange
+xmlExpNewSeq
+
atomic
xmlGcMemGet
+xmlGcMemSetup
+
attached
xmlTextReaderGetRemainder
+
attempt
xmlRecoverDoc
+xmlRecoverMemory
+
attempts
xmlRecoverFile
+
attr
XML_SCHEMAS_ATTRGROUP_HAS_REFS
+XML_SCHEMAS_ATTRGROUP_MARKED
+XML_SCHEMAS_ATTRGROUP_REDEFINED
+_xmlID
+_xmlRef
+
attribute-
xmlStreamPushNode
+
attribute-list
xmlParseDefaultDecl
+xmlParseEntityRef
+
attribute-node
xmlStreamPushAttr
+
attribute-nodes
xmlStreamWantsAnyNode
+
attributeFormDefault
XML_SCHEMAS_QUALIF_ATTR
+
augmented
docbParseDocument
+htmlParseDocument
+xmlParseDocument
+xmlParseExtParsedEnt
+xmlTextMerge
+
autark
xmlDOMWrapRemoveNode
+
authentication
xmlNanoHTTPAuthHeader
+
author
htmlNodeStatus
+
authority
_xmlURI
+
authorized
xmlValidGetValidElements
+
auto
htmlHandleOmittedElem
+
auto-repair
_htmlElemDesc
+
autoclose
htmlAutoCloseTag
+
autoclosed
htmlIsAutoClosed
+
autogeneration
xmlKeepBlanksDefault
+
automatically
XML_SCHEMAS_TYPE_VARIETY_ABSENT
+xmlCharEncOutFunc
+xmlNewTextChild
+xmlStrncatNew
+
automaton
_xmlSchemaType
+
autoreference
_xmlDoc
+
avoid
XML_MAX_LOOKUP_LIMIT
+xmlCleanupParser
+xmlCleanupThreads
+xmlGetBufferAllocationScheme
+
avoiding
xmlTextReaderNext
+xmlTextReaderNextSibling
+
aware
xmlGetProp
+

A-B +C-C +D-E +F-I +J-N +O-P +Q-R +S-S +T-U +V-X +Y-a +b-b +c-c +d-d +e-e +f-f +g-h +i-i +j-l +m-m +n-n +o-o +p-p +q-r +s-s +t-t +u-v +w-w +x-x +y-z +

Daniel Veillard

diff --git a/doc/APIchunk11.html b/doc/APIchunk11.html new file mode 100644 index 0000000..9f94a1f --- /dev/null +++ b/doc/APIchunk11.html @@ -0,0 +1,339 @@ + + +API Alphabetic Index b-b for libxml2
Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
Made with Libxml2 Logo

The XML C parser and toolkit of Gnome

API Alphabetic Index b-b for libxml2

Developer Menu
API Indexes
Related links

A-B +C-C +D-E +F-I +J-N +O-P +Q-R +S-S +T-U +V-X +Y-a +b-b +c-c +d-d +e-e +f-f +g-h +i-i +j-l +m-m +n-n +o-o +p-p +q-r +s-s +t-t +u-v +w-w +x-x +y-z +

Letter b:

back
xmlBufferDetach
+xmlChildElementCount
+xmlEntityReferenceFunc
+xmlFirstElementChild
+xmlKeepBlanksDefault
+xmlLastElementChild
+xmlNanoFTPGet
+xmlNanoFTPList
+xmlNextElementSibling
+xmlPreviousElementSibling
+xmlRelaxNGDump
+xmlSetEntityReferenceFunc
+
bad
XML_MAX_LOOKUP_LIMIT
+
badly
xmlParseExternalID
+
bahaviour
xmlTextReaderNormalization
+
balanced
xmlParseBalancedChunkMemory
+xmlParseBalancedChunkMemoryRecover
+xmlParseInNodeContext
+
bar
xmlXPathTranslateFunction
+
base64
xmlTextWriterWriteBase64
+
based
xmlGetCompressMode
+xmlGetDocCompressMode
+xmlGetNodePath
+xmlNewEntityInputStream
+xmlNewInputFromFile
+xmlNewStringInputStream
+xmlParseURI
+xmlParseURIReference
+xmlRelaxNGNewValidCtxt
+xmlSchemaNewStringValue
+xmlSchemaNewValidCtxt
+xmlSchemaSAXPlug
+xmlSchemaSAXUnplug
+xmlSchemaValidateStream
+xmlSchematronNewValidCtxt
+xmlSetCompressMode
+xmlSetDocCompressMode
+xmlStrcat
+xmlStrdup
+xmlStrsub
+xmlURIEscape
+
basically
getSystemId
+xmlIsMixedElement
+xmlSAX2GetSystemId
+xmlValidateAttributeDecl
+xmlValidateDocument
+xmlValidateDocumentFinal
+xmlValidateDtdFinal
+xmlValidateElementDecl
+xmlValidateNotationDecl
+xmlValidateOneAttribute
+xmlValidateOneElement
+xmlValidateOneNamespace
+xmlValidateRoot
+
basis
xmlSubstituteEntitiesDefault
+
bear
xmlParseAttributeType
+
becomes
xmlAddAttributeDecl
+
before
htmlInitAutoClose
+xmlBuildRelativeURI
+xmlCatalogAdd
+xmlCleanupParser
+xmlCleanupThreads
+xmlCurrentChar
+xmlGcMemSetup
+xmlInitParser
+xmlMemSetup
+xmlTextReaderRelaxNGSetSchema
+xmlTextReaderRelaxNGValidate
+xmlTextReaderRelaxNGValidateCtxt
+xmlTextReaderSchemaValidate
+xmlTextReaderSchemaValidateCtxt
+xmlTextReaderSetParserProp
+xmlTextReaderSetSchema
+xmlValidGetValidElements
+xmlXPathNextPreceding
+xmlXPathStringFunction
+
beginning
xmlBufShrink
+xmlBufferAddHead
+xmlBufferShrink
+xmlByteConsumed
+xmlListInsert
+xmlListPushFront
+xmlStringCurrentChar
+xmlTextReaderByteConsumed
+xmlValidGetValidElements
+
begins
_xmlParserNodeInfo
+
behaves
IS_LETTER_CH
+
behavior
htmlSAXParseDoc
+xmlCurrentChar
+xmlKeepBlanksDefault
+xmlSubstituteEntitiesDefault
+
behaviour
XML_MAX_LOOKUP_LIMIT
+htmlNodeDump
+htmlNodeDumpFile
+htmlNodeDumpFileFormat
+htmlNodeDumpFormatOutput
+htmlNodeDumpOutput
+resolveEntity
+resolveEntitySAXFunc
+xmlBufNodeDump
+xmlBufShrink
+xmlElemDump
+xmlFreeNode
+xmlFreeNodeList
+xmlModuleOpen
+xmlModuleSymbol
+xmlNodeDump
+xmlNodeDumpOutput
+xmlNodeGetSpacePreserve
+xmlNodeSetSpacePreserve
+xmlSAX2ResolveEntity
+xmlTextReaderSetParserProp
+xmlUTF8Strsize
+
below
_xmlParserCtxt
+xmlCheckLanguageID
+xmlParseExternalID
+
better
resolveEntity
+resolveEntitySAXFunc
+xmlNormalizeWindowsPath
+xmlSAX2ResolveEntity
+xmlSAXDefaultVersion
+xmlSAXUserParseMemory
+
between
_uconv_t
+xmlAutomataNewCountTrans
+xmlAutomataNewCountTrans2
+xmlAutomataNewOnceTrans
+xmlAutomataNewOnceTrans2
+xmlCatalogSetDefaultPrefer
+xmlMemDisplayLast
+xmlParseQuotedString
+xmlXPathDifference
+
beyond
xmlXPathStringFunction
+
binary
xmlCharInRange
+xmlEncodeEntities
+xmlParseNamespace
+xmlParseQuotedString
+xmlTextWriterWriteBase64
+xmlTextWriterWriteBinHex
+
bindings
_xmlSchema
+
bit
xmlStrEqual
+
bits
xmlGetLineNo
+
blanks
xmlKeepBlanksDefault
+xmlSkipBlankChars
+
bloc
xmlParseBalancedChunkMemory
+xmlParseBalancedChunkMemoryRecover
+xmlParseExternalEntity
+
blockDefault
XML_SCHEMAS_BLOCK_DEFAULT_EXTENSION
+XML_SCHEMAS_BLOCK_DEFAULT_RESTRICTION
+XML_SCHEMAS_BLOCK_DEFAULT_SUBSTITUTION
+
blocked
xmlGcMemSetup
+xmlMemSetup
+
blocking
xmlNanoFTPRead
+xmlNanoHTTPRead
+
blocks
IS_CHAR
+XML_SAX2_MAGIC
+initdocbDefaultSAXHandler
+inithtmlDefaultSAXHandler
+initxmlDefaultSAXHandler
+xmlMemBlocks
+xmlMemDisplay
+xmlMemoryDump
+
body
_xmlParserCtxt
+
book1
xmlBuildRelativeURI
+
bool
xmlBoolToText
+
both
xmlBufferFree
+xmlNanoFTPClose
+xmlNodeGetBase
+xmlParseElementChildrenContentDecl
+xmlParseMarkupDecl
+xmlParseStartTag
+xmlStrEqual
+xmlXPathCompareValues
+xmlXPathIntersection
+
bound
xmlExpNewRange
+
boundaries
_xmlParserCtxt
+xmlSearchNs
+
boundary
XML_MAX_DICTIONARY_LIMIT
+XML_MAX_LOOKUP_LIMIT
+XML_MAX_NAME_LENGTH
+XML_MAX_TEXT_LENGTH
+xmlParseElementChildrenContentDecl
+xmlParseElementMixedContentDecl
+
bracket
xmlParseCharData
+
branch
xmlDOMWrapCloneNode
+xmlDOMWrapRemoveNode
+xmlSchemaValidateOneElement
+
break
xmlDOMWrapAdoptNode
+xmlDOMWrapCloneNode
+xmlDOMWrapReconcileNamespaces
+xmlLineNumbersDefault
+
breaking
xmlEncodeEntities
+
breaks
xmlCurrentChar
+
brk
_xmlError
+
broke
XML_CAST_FPTR
+
broken
xmlGetThreadId
+xmlParseBalancedChunkMemoryRecover
+xmlTextReaderNormalization
+
buf
xmlSaveFileTo
+xmlSaveFormatFileTo
+
buffered
xmlAllocOutputBuffer
+xmlAllocParserInputBuffer
+xmlFreeParserInputBuffer
+xmlOutputBufferClose
+xmlOutputBufferCreateBuffer
+xmlOutputBufferCreateFd
+xmlOutputBufferCreateFile
+xmlOutputBufferCreateFilename
+xmlOutputBufferCreateIO
+xmlOutputBufferFlush
+xmlOutputBufferWrite
+xmlOutputBufferWriteEscape
+xmlOutputBufferWriteString
+xmlParserInputBufferCreateFd
+xmlParserInputBufferCreateFile
+xmlParserInputBufferCreateFilename
+xmlParserInputBufferCreateIO
+xmlParserInputBufferCreateMem
+xmlParserInputBufferCreateStatic
+xmlParserInputBufferGrow
+xmlParserInputBufferPush
+xmlParserInputBufferRead
+xmlTextReaderGetRemainder
+
buffers
LIBXML2_NEW_BUFFER
+xmlBufferDetach
+
builded
XML_SCHEMAS_ATTRGROUP_GLOBAL
+XML_SCHEMAS_ATTRGROUP_WILDCARD_BUILDED
+
building
XML_MAX_TEXT_LENGTH
+_xmlParserCtxt
+docbSAXParseDoc
+docbSAXParseFile
+htmlSAXParseFile
+ignorableWhitespace
+ignorableWhitespaceSAXFunc
+xmlBuildURI
+xmlSAX2IgnorableWhitespace
+xmlSAXParseDoc
+xmlSAXParseEntity
+xmlSAXParseFile
+xmlSAXParseFileWithData
+xmlSAXParseMemory
+xmlSAXParseMemoryWithData
+xmlShellPwd
+
builds
xmlRegexpCompile
+
built
_xmlParserCtxt
+xmlCleanupParser
+xmlParseAttributeType
+xmlParseEnumeratedType
+xmlParseEnumerationType
+xmlParseNotationType
+xmlParseURI
+xmlParseURIRaw
+xmlRelaxNGParse
+xmlSchemaGetBuiltInType
+xmlSchemaGetCanonValue
+xmlSchemaGetCanonValueWhtsp
+xmlSchemaParse
+xmlSchematronParse
+xmlTextReaderNextSibling
+
built-in
_xmlSchemaType
+xmlSchemaGetBuiltInListSimpleTypeItemType
+xmlSchemaGetBuiltInType
+xmlSchemaIsBuiltInTypeFacet
+xmlSchemaValidateFacetWhtsp
+xmlSchemaValidateLengthFacet
+xmlSchemaValidateLengthFacetWhtsp
+
builtin
XML_SCHEMAS_TYPE_BUILTIN_PRIMITIVE
+initGenericErrorDefaultFunc
+
bunch
xmlParseNamespace
+
bypass
xmlParseCatalogFile
+

A-B +C-C +D-E +F-I +J-N +O-P +Q-R +S-S +T-U +V-X +Y-a +b-b +c-c +d-d +e-e +f-f +g-h +i-i +j-l +m-m +n-n +o-o +p-p +q-r +s-s +t-t +u-v +w-w +x-x +y-z +

Daniel Veillard

diff --git a/doc/APIchunk12.html b/doc/APIchunk12.html new file mode 100644 index 0000000..de376f7 --- /dev/null +++ b/doc/APIchunk12.html @@ -0,0 +1,927 @@ + + +API Alphabetic Index c-c for libxml2
Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
Made with Libxml2 Logo

The XML C parser and toolkit of Gnome

API Alphabetic Index c-c for libxml2

Developer Menu
API Indexes
Related links

A-B +C-C +D-E +F-I +J-N +O-P +Q-R +S-S +T-U +V-X +Y-a +b-b +c-c +d-d +e-e +f-f +g-h +i-i +j-l +m-m +n-n +o-o +p-p +q-r +s-s +t-t +u-v +w-w +x-x +y-z +

Letter c:

c14n
xmlC14NDocDumpMemory
+xmlC14NDocSave
+xmlC14NDocSaveTo
+xmlC14NExecute
+
cache
xmlXPathContextSetCache
+
cached
xmlXPathContextSetCache
+
caching:
xmlXPathContextSetCache
+
calculated
xmlStrncatNew
+
calculates
xmlUTF8Size
+
calling
_xmlXPathContext
+xmlBuildRelativeURI
+xmlC14NDocDumpMemory
+xmlCheckFilename
+xmlCleanupParser
+xmlCleanupThreads
+xmlTextReaderCurrentDoc
+xmlXPathAddValues
+xmlXPathDivValues
+xmlXPathModValues
+xmlXPathMultValues
+xmlXPathSubValues
+xmlXPathValueFlipSign
+
calls
xlinkNodeDetectFunc
+xmlSchemaSAXPlug
+xmlXPathAxisFunc
+
came
xmlPopInput
+
cannot
xmlParseAttribute
+xmlTextReaderReadOuterXml
+xmlXPathRegisterNs
+
canonic
xmlCanonicPath
+
canonical
xmlC14NDocDumpMemory
+xmlC14NDocSave
+xmlC14NDocSaveTo
+xmlC14NExecute
+xmlGetCharEncodingName
+xmlSchemaGetCanonValue
+xmlSchemaGetCanonValueWhtsp
+
canonicalization
xmlC14NDocDumpMemory
+xmlC14NDocSave
+xmlC14NDocSaveTo
+xmlC14NExecute
+
canonicalized
xmlNormalizeWindowsPath
+
canonization
xmlC14NDocDumpMemory
+xmlC14NDocSave
+xmlC14NDocSaveTo
+xmlC14NExecute
+
canonized
xmlC14NDocDumpMemory
+xmlC14NDocSave
+xmlC14NDocSaveTo
+xmlC14NExecute
+
canot
xmlModuleOpen
+xmlModuleSymbol
+
capable
xmlCheckUTF8
+
caracters
xmlOutputBufferWriteEscape
+
cardinality
xmlExpParse
+
carried
xmlBufGetNodeContent
+xmlNewDocProp
+xmlNewNsProp
+xmlNewNsPropEatName
+xmlNewProp
+xmlNodeBufGetContent
+xmlNodeGetContent
+xmlNodeGetLang
+xmlNodeGetSpacePreserve
+xmlSetNsProp
+xmlSetProp
+xmlUnsetNsProp
+xmlUnsetProp
+
carries
xlinkIsLink
+
carrying
xlinkExtendedLinkFunk
+xlinkExtendedLinkSetFunk
+xlinkSimpleLinkFunk
+xmlIsID
+xmlIsRef
+xmlNewGlobalNs
+xmlNewNs
+
case-ignoring
xmlStrcasestr
+
cases
XML_SKIP_IDS
+xmlC14NExecute
+xmlParseElementContentDecl
+xmlScanName
+
cast
BAD_CAST
+CAST_TO_BOOLEAN
+CAST_TO_NUMBER
+CAST_TO_STRING
+xmlXPathConvertFunc
+
casting
XML_CAST_FPTR
+
cat
xmlShellCat
+
catalogs
xmlCatalogAddLocal
+xmlCatalogCleanup
+xmlCatalogFreeLocal
+xmlCatalogGetDefaults
+xmlCatalogLocalResolve
+xmlCatalogLocalResolveURI
+xmlCatalogSetDebug
+xmlCatalogSetDefaults
+xmlLoadCatalogs
+
category
xmlUCSIsCat
+
cause
xmlShellPrintXPathError
+
caution
_xmlURI
+
cdata-section-
xmlStreamPushNode
+xmlStreamWantsAnyNode
+
ceiling
xmlXPathCeilingFunction
+
certainly
xmlTextReaderGetRemainder
+
chained
xmlFreeNsList
+
change
LIBXML2_NEW_BUFFER
+htmlSetMetaEncoding
+xmlCtxtResetLastError
+xmlNanoFTPCwd
+xmlParseSDDecl
+xmlResetLastError
+xmlSchemaCollapseString
+xmlSchemaWhiteSpaceReplace
+xmlSubstituteEntitiesDefault
+xmlSwitchEncoding
+xmlSwitchInputEncoding
+xmlSwitchToEncoding
+
changed
xmlNodeSetBase
+xmlNodeSetLang
+xmlNodeSetName
+xmlNodeSetSpacePreserve
+xmlTextReaderSetParserProp
+xmlValidityErrorFunc
+xmlValidityWarningFunc
+
changes
xmlRegisterHTTPPostCallbacks
+xmlTextReaderClose
+
changing
xmlSubstituteEntitiesDefault
+xmlTextReaderSetParserProp
+
channel
xmlFileClose
+xmlFileRead
+xmlIOFTPClose
+xmlIOFTPOpen
+xmlIOFTPRead
+xmlIOHTTPClose
+xmlIOHTTPOpen
+xmlIOHTTPRead
+xmlOutputBufferClose
+xmlOutputBufferFlush
+xmlShellPrintXPathError
+
characters
ignorableWhitespace
+ignorableWhitespaceSAXFunc
+xmlCreatePushParserCtxt
+xmlKeepBlanksDefault
+xmlParseAttValue
+xmlStrPrintf
+xmlStrVPrintf
+xmlURIEscapeStr
+xmlUTF8Strlen
+xmlUTF8Strsize
+xmlValidCtxtNormalizeAttributeValue
+xmlValidNormalizeAttributeValue
+xmlXPathIdFunction
+xmlXPathNormalizeFunction
+xmlXPathStringLengthFunction
+xmlXPathSubstringFunction
+xmlXPathTranslateFunction
+
charencoding
xmlGetCharEncodingName
+
chars??
xmlTextWriterWriteRawLen
+
charset
xmlAllocParserInputBuffer
+xmlCreateIOParserCtxt
+xmlIOParseDTD
+xmlNewIOInputStream
+xmlOutputBufferCreateIO
+xmlParserInputBufferCreateFd
+xmlParserInputBufferCreateFile
+xmlParserInputBufferCreateFilename
+xmlParserInputBufferCreateIO
+xmlParserInputBufferCreateMem
+xmlParserInputBufferCreateStatic
+
checked
XML_SCHEMAS_ELEM_INTERNAL_CHECKED
+_xmlEntity
+xmlNodeGetBase
+xmlNodeGetLang
+xmlNodeGetSpacePreserve
+xmlParseAttValue
+xmlParseAttributeType
+xmlSetNsProp
+
checking
xlinkIsLink
+xmlBufferWriteQuotedString
+xmlBuildURI
+xmlExpParse
+xmlMemFree
+xmlUTF8Strlen
+
checkings
xmlExpParse
+xmlValidateOneElement
+
checks
XML_SCHEMAS_ATTRGROUP_MARKED
+XML_SCHEMAS_TYPE_MARKED
+htmlAutoCloseTag
+htmlIsAutoClosed
+htmlNodeStatus
+xmlCheckFilename
+xmlCheckHTTPInput
+xmlCheckUTF8
+xmlNanoFTPInit
+xmlNanoHTTPInit
+xmlParseElementChildrenContentDecl
+xmlParseElementMixedContentDecl
+xmlReconciliateNs
+xmlURIEscape
+xmlValidateAttributeDecl
+xmlValidateDocument
+xmlValidateDocumentFinal
+xmlValidateDtdFinal
+xmlValidateElementDecl
+xmlValidateNotationDecl
+xmlValidateOneAttribute
+xmlValidateOneElement
+xmlValidateOneNamespace
+xmlXPathNodeSetContains
+
child-
_xmlAttr
+_xmlDoc
+_xmlDtd
+_xmlNode
+
childrens
_xmlEntity
+
childs
_xmlNode
+xmlIsMixedElement
+xmlValidGetValidElements
+
choice
xmlExpNewOr
+xmlExpParse
+xmlParseElementChildrenContentDecl
+
choices
xmlParseElementMixedContentDecl
+
choices:
xmlParseNotationDecl
+
chunk
docbParseChunk
+htmlParseChunk
+xmlEntityReferenceFunc
+xmlParseBalancedChunkMemory
+xmlParseBalancedChunkMemoryRecover
+xmlParseChunk
+xmlParseEntity
+xmlParseExternalEntity
+xmlParseInNodeContext
+xmlSAXParseEntity
+
circular
XML_SCHEMAS_ATTRGROUP_MARKED
+XML_SCHEMAS_ELEM_CIRCULAR
+XML_SCHEMAS_TYPE_MARKED
+
clean
xmlCleanupParser
+
cleanly
xmlCheckHTTPInput
+
cleans
xmlCleanupParser
+xmlNanoFTPScanProxy
+xmlNanoHTTPScanProxy
+
cleanup
xmlCleanupGlobals
+xmlCleanupParser
+xmlCleanupThreads
+xmlNanoFTPCleanup
+
clear
xmlListMerge
+
clears
xmlCleanupInputCallbacks
+xmlCleanupOutputCallbacks
+
client
xmlKeepBlanksDefault
+
clone
xmlDOMWrapCloneNode
+
cloned
xmlDOMWrapCloneNode
+
close
htmlAutoCloseTag
+htmlCtxtReadIO
+htmlIsAutoClosed
+htmlReadIO
+xmlCharEncCloseFunc
+xmlCreateIOParserCtxt
+xmlCtxtReadIO
+xmlInputCloseCallback
+xmlModuleClose
+xmlOutputBufferClose
+xmlOutputBufferCreateIO
+xmlOutputCloseCallback
+xmlParserInputBufferCreateIO
+xmlReadIO
+xmlReaderForIO
+xmlReaderNewIO
+xmlSaveToIO
+xmlTextReaderClose
+
closed
xmlCtxtReadFd
+xmlModuleClose
+xmlNewTextWriter
+xmlReadFd
+xmlReaderForFd
+xmlReaderNewFd
+xmlTextWriterEndDocument
+
closes
xmlNanoHTTPClose
+xmlNanoHTTPSave
+
closest
xmlNextElementSibling
+xmlPreviousElementSibling
+xmlXPathCeilingFunction
+xmlXPathFloorFunction
+xmlXPathRoundFunction
+
closing
htmlInitAutoClose
+xmlNanoFTPFreeCtxt
+xmlParseElementChildrenContentDecl
+xmlParseStartTag
+
cncerning
xmlDebugDumpDocumentHead
+
codes
xmlCheckLanguageID
+
coding
xmlSAXDefaultVersion
+
collapse
XML_SCHEMAS_FACET_COLLAPSE
+XML_SCHEMAS_TYPE_WHITESPACE_COLLAPSE
+
collect
DEBUG_MEMORY
+xmlIOHTTPOpenW
+
collected
xmlGcMemGet
+xmlGcMemSetup
+
colon
xmlLoadCatalogs
+
column
_xmlError
+getColumnNumber
+xmlSAX2GetColumnNumber
+xmlTextReaderGetParserColumnNumber
+
com
getSystemId
+xmlBuildRelativeURI
+xmlSAX2GetSystemId
+
combining
IS_COMBINING_CH
+
come
xmlStreamPush
+xmlStreamPushAttr
+xmlStreamPushNode
+
coment
xmlTextWriterEndComment
+
comes
xmlValidityErrorFunc
+xmlValidityWarningFunc
+
coming
xmlXIncludeProcessNode
+
command
ftpDataCallback
+ftpListCallback
+xmlNanoFTPCheckResponse
+xmlNanoFTPGetResponse
+xmlNanoFTPQuit
+xmlShellDu
+
commandline
xmlShell
+
commands
xmlShellPwd
+
comment
HTML_COMMENT_NODE
+comment
+commentSAXFunc
+xmlNewComment
+xmlNewDocComment
+xmlParseComment
+xmlTextWriterStartComment
+xmlTextWriterWriteComment
+xmlTextWriterWriteFormatComment
+xmlTextWriterWriteVFormatComment
+xmlXPathIsNodeType
+
comment-
xmlStreamPushNode
+xmlStreamWantsAnyNode
+
comments
xmlC14NDocDumpMemory
+xmlC14NDocSave
+xmlC14NDocSaveTo
+xmlC14NExecute
+xmlDocGetRootElement
+xmlDocSetRootElement
+xmlParseComment
+
commodity
xmlKeepBlanksDefault
+
common
_xmlDoc
+_xmlDtd
+_xmlNode
+
comp
xmlFreePattern
+xmlFreePatternList
+xmlXPathFreeCompExpr
+
compare
xmlListDataCompare
+xmlUTF8Charcmp
+xmlXPathCompareValues
+
compared
xmlXPathCompareValues
+
compares
xmlUTF8Charcmp
+
comparing
xmlXPathCompareValues
+
comparison
xmlHashScan3
+xmlHashScanFull3
+xmlListCreate
+xmlParseCharEncoding
+xmlStrcasecmp
+xmlStrcmp
+xmlStrncasecmp
+xmlStrncmp
+xmlXPathCompareValues
+
comparisons
xmlTextReaderConstString
+xmlXPathSubstringFunction
+
compatibility
LIBXML_LEGACY_ENABLED
+htmlParseElement
+xmlChildrenNode
+xmlCopyChar
+xmlEncodeEntities
+xmlKeepBlanksDefault
+xmlParseCharData
+xmlParseComment
+xmlParseNamespace
+xmlParseQuotedString
+xmlRootNode
+
compatible
LIBXML_TEST_VERSION
+xmlShellPwd
+
compilation
LIBXML_VERSION_EXTRA
+XML_XPATH_CHECKNS
+_xmlXPathContext
+xmlPatterncompile
+xmlXPathCompile
+xmlXPathCtxtCompile
+
compile
xmlPatterncompile
+
compile-time
docbCreateFileParserCtxt
+docbParseFile
+docbSAXParseFile
+htmlCreateFileParserCtxt
+htmlParseFile
+htmlSAXParseFile
+xmlCreateEntityParserCtxt
+xmlCreateFileParserCtxt
+xmlCreateURLParserCtxt
+xmlOutputBufferCreateFilename
+xmlParseFile
+xmlParserInputBufferCreateFilename
+xmlRecoverFile
+xmlSAXParseFile
+xmlSAXParseFileWithData
+
compiled-in
xmlCleanupInputCallbacks
+xmlCleanupOutputCallbacks
+xmlPopInputCallbacks
+xmlRegisterDefaultInputCallbacks
+xmlRegisterDefaultOutputCallbacks
+
compiling
xmlRelaxNGNewDocParserCtxt
+
complement
xmlXPathStringEvalNumber
+
complete
XML_COMPLETE_ATTRS
+XML_SCHEMAS_WILDCARD_COMPLETE
+_xmlParserCtxt
+xmlACatalogResolve
+xmlACatalogResolveURI
+xmlCatalogLocalResolve
+xmlCatalogLocalResolveURI
+xmlCatalogResolve
+xmlCatalogResolveURI
+
completed
xmlValidateDocumentFinal
+
completely
xmlGetUTF8Char
+xmlNodeGetBase
+
complex
XML_SCHEMAS_TYPE_DERIVATION_METHOD_EXTENSION
+XML_SCHEMAS_TYPE_DERIVATION_METHOD_RESTRICTION
+_xmlSchemaType
+
complexType
XML_SCHEMAS_TYPE_ABSTRACT
+XML_SCHEMAS_TYPE_BLOCK_DEFAULT
+XML_SCHEMAS_TYPE_BLOCK_EXTENSION
+XML_SCHEMAS_TYPE_BLOCK_RESTRICTION
+XML_SCHEMAS_TYPE_FINAL_EXTENSION
+XML_SCHEMAS_TYPE_FINAL_RESTRICTION
+XML_SCHEMAS_TYPE_OWNED_ATTR_WILDCARD
+
complicated
xmlBuildRelativeURI
+
component
_xmlSchemaType
+
components
_xmlSchema
+
compound
xmlXPathFreeNodeSet
+xmlXPtrFreeLocationSet
+
compress
xmlNewTextWriterDoc
+xmlNewTextWriterFilename
+xmlNewTextWriterMemory
+xmlNewTextWriterPushParser
+xmlNewTextWriterTree
+
compressed
_xmlParserInputBuffer
+docbCreateFileParserCtxt
+docbParseFile
+docbSAXParseFile
+htmlCreateFileParserCtxt
+htmlParseFile
+htmlSAXParseFile
+xmlCreateEntityParserCtxt
+xmlCreateFileParserCtxt
+xmlCreateURLParserCtxt
+xmlOutputBufferCreateFilename
+xmlParseFile
+xmlParserInputBufferCreateFilename
+xmlRecoverFile
+xmlSAXParseFile
+xmlSAXParseFileWithData
+xmlSAXUserParseFile
+
compression
_xmlDoc
+xmlC14NDocSave
+xmlGetCompressMode
+xmlGetDocCompressMode
+xmlIOHTTPOpenW
+xmlNewTextWriterMemory
+xmlNewTextWriterPushParser
+xmlOutputBufferCreateFilename
+xmlSaveFile
+xmlSaveFormatFile
+xmlSetCompressMode
+xmlSetDocCompressMode
+
comprising
xmlXPathIntersection
+
computation
xmlXPathOrderDocElems
+
compute
xmlUTF8Strlen
+
computed
XML_SCHEMAS_TYPE_FACETSNEEDVALUE
+_xmlEntity
+xmlByteConsumed
+xmlSchemaValPredefTypeNode
+xmlSchemaValPredefTypeNodeNoNorm
+xmlSchemaValidateLengthFacet
+xmlSchemaValidateLengthFacetWhtsp
+xmlSchemaValidatePredefinedType
+xmlSchemaValueAppend
+xmlSchemaValueGetAsBoolean
+xmlSchemaValueGetAsString
+xmlSchemaValueGetNext
+xmlTextReaderByteConsumed
+
computes
xmlSchemaCheckFacet
+
concat
xmlXPathConcatFunction
+
concatenated
xmlStrcat
+
concatenation
xmlXPathConcatFunction
+
condition
xmlSchemaValidateFacet
+xmlSchemaValidateFacetWhtsp
+
conditionalSect
xmlParseExternalSubset
+
configured
DEBUG_MEMORY
+DEBUG_MEMORY_LOCATION
+LIBXML_C14N_ENABLED
+LIBXML_CATALOG_ENABLED
+LIBXML_DEBUG_ENABLED
+LIBXML_DEBUG_RUNTIME
+LIBXML_DOCB_ENABLED
+LIBXML_FTP_ENABLED
+LIBXML_HTML_ENABLED
+LIBXML_HTTP_ENABLED
+LIBXML_OUTPUT_ENABLED
+LIBXML_PATTERN_ENABLED
+LIBXML_PUSH_ENABLED
+LIBXML_READER_ENABLED
+LIBXML_SAX1_ENABLED
+LIBXML_THREAD_ENABLED
+LIBXML_TREE_ENABLED
+LIBXML_VALID_ENABLED
+LIBXML_WRITER_ENABLED
+LIBXML_XINCLUDE_ENABLED
+LIBXML_XPATH_ENABLED
+LIBXML_XPTR_ENABLED
+WITHOUT_TRIO
+WITH_TRIO
+
conforming
xmlRegexpCompile
+
conforms
xmlCheckLanguageID
+xmlSchemaValPredefTypeNode
+xmlSchemaValPredefTypeNodeNoNorm
+xmlSchemaValidatePredefinedType
+xmlValidateNCName
+xmlValidateNMToken
+xmlValidateName
+xmlValidateQName
+
conjunction
xmlSchemaIsBuiltInTypeFacet
+
connection
xmlNanoFTPClose
+xmlNanoFTPCloseConnection
+xmlNanoFTPConnect
+xmlNanoFTPConnectTo
+xmlNanoFTPFreeCtxt
+xmlNanoFTPGetConnection
+xmlNanoFTPGetSocket
+xmlNanoFTPRead
+xmlNanoFTPUpdateURL
+xmlNanoHTTPClose
+xmlNanoHTTPMethod
+xmlNanoHTTPMethodRedir
+xmlNanoHTTPOpen
+xmlNanoHTTPOpenRedir
+xmlNanoHTTPRead
+
connector
xmlParseElementChildrenContentDecl
+
consequent
_xmlError
+
consideration
xmlBuildRelativeURI
+
considered
xmlHashScan3
+xmlHashScanFull3
+xmlParserInputBufferRead
+xmlXPathSubstringFunction
+
consist
xmlXPathNextAncestor
+
const
xmlModuleOpen
+xmlModuleSymbol
+
constant
XML_SAX2_MAGIC
+xmlByteConsumed
+
constraint
_xmlSchemaAttribute
+_xmlSchemaElement
+_xmlSchemaWildcard
+_xmlSchemaWildcardNs
+xmlParseEntityRef
+xmlValidateNotationDecl
+
constraints
XML_SCHEMAS_ELEM_INTERNAL_CHECKED
+xmlParseAttributeType
+xmlParseDefaultDecl
+xmlValidGetValidElements
+
construct
xmlParseElementChildrenContentDecl
+
construction
xmlCanonicPath
+xmlPathToURI
+
constructs
xmlExpParse
+xmlParseNamespace
+
consumed
UTF8ToHtml
+UTF8Toisolat1
+_xmlParserInput
+_xmlParserInputBuffer
+docbEncodeEntities
+htmlEncodeEntities
+isolat1ToUTF8
+xmlCharEncodingInputFunc
+xmlCharEncodingOutputFunc
+xmlExpNewOr
+xmlExpNewRange
+xmlExpNewSeq
+xmlGetUTF8Char
+xmlParserInputBufferRead
+xmlSchemaNewNOTATIONValue
+xmlSchemaNewQNameValue
+xmlSchemaNewStringValue
+
consuming
xmlExpExpDerive
+xmlScanName
+
contain
xmlNewTextChild
+xmlParseAttribute
+xmlParseEntityRef
+xmlParsePEReference
+xmlParseSDDecl
+xmlParserHandlePEReference
+xmlParserHandleReference
+xmlRegExecErrInfo
+xmlRegExecNextValues
+xmlRelaxNGNewMemParserCtxt
+xmlRelaxNGNewParserCtxt
+xmlSchemaNewMemParserCtxt
+xmlSchemaNewParserCtxt
+xmlSchematronNewMemParserCtxt
+xmlSchematronNewParserCtxt
+xmlXPathLeading
+xmlXPathLeadingSorted
+xmlXPathNodeLeading
+xmlXPathNodeLeadingSorted
+xmlXPathNodeTrailing
+xmlXPathNodeTrailingSorted
+xmlXPathSubstringAfterFunction
+xmlXPathSubstringBeforeFunction
+xmlXPathTrailing
+xmlXPathTrailingSorted
+
contained
xmlBufferDetach
+xmlGetUTF8Char
+xmlNodeListGetRawString
+xmlNodeListGetString
+xmlParseElementChildrenContentDecl
+xmlParseMarkupDecl
+xmlStrlen
+xmlXPathDistinct
+xmlXPathDistinctSorted
+
contains
XML_SCHEMAS_ATTRGROUP_HAS_REFS
+_xmlEntity
+xmlCurrentChar
+xmlParseEntityRef
+xmlParsePEReference
+xmlParserHandlePEReference
+xmlTextReaderMoveToElement
+xmlValidityErrorFunc
+xmlValidityWarningFunc
+xmlXPathContainsFunction
+xmlXPathNextAncestor
+xmlXPathNextAncestorOrSelf
+xmlXPathNextChild
+xmlXPathNextDescendant
+xmlXPathNextDescendantOrSelf
+xmlXPathNextFollowing
+xmlXPathNextFollowingSibling
+xmlXPathNextNamespace
+xmlXPathNextParent
+xmlXPathNextPreceding
+xmlXPathNextPrecedingSibling
+xmlXPathNextSelf
+xmlXPathNodeSetContains
+xmlXPathSubstringFunction
+xmlXPtrNewContext
+
content:
xmlParseContent
+xmlXPathEqualValues
+xmlXPathNotEqualValues
+
contentType
xmlNanoHTTPFetch
+xmlNanoHTTPMethod
+xmlNanoHTTPMethodRedir
+xmlNanoHTTPOpen
+xmlNanoHTTPOpenRedir
+
contents
xmlDictFree
+xmlHashFree
+xmlLineNumbersDefault
+xmlNodeListGetRawString
+xmlNodeListGetString
+xmlSetupParserForBuffer
+xmlTextReaderExpand
+xmlTextReaderReadInnerXml
+xmlTextReaderReadOuterXml
+xmlTextReaderReadString
+xmlTextWriterWriteDTDExternalEntityContents
+
contentspec
xmlParseElementContentDecl
+xmlParseElementDecl
+
context?
_xmlXPathContext
+
contexts
_xmlDOMWrapCtxt
+
contextual
xmlRelaxNGGetParserErrors
+xmlRelaxNGSetParserErrors
+xmlRelaxNGSetParserStructuredErrors
+xmlSchemaGetParserErrors
+xmlSchemaSetParserErrors
+
continuing
xmlXPathSubstringFunction
+
contraint
_xmlSchemaElement
+
contrary
xmlNodeListGetRawString
+xmlXPathFreeNodeSetList
+
contrast
xmlNodeAddContent
+xmlNodeAddContentLen
+
control
_xmlXPathContext
+resolveEntity
+resolveEntitySAXFunc
+xmlNanoFTPClose
+xmlNanoFTPConnect
+xmlNanoFTPConnectTo
+xmlSAX2ResolveEntity
+
conveniently
xmlCurrentChar
+
conversion
_uconv_t
+_xmlXPathType
+xmlCharEncOutFunc
+xmlParseEncodingDecl
+xmlXPathConvertFunc
+xmlXPathPopBoolean
+xmlXPathPopExternal
+xmlXPathPopNodeSet
+xmlXPathPopNumber
+xmlXPathPopString
+
conversions
_xmlOutputBuffer
+_xmlParserInputBuffer
+
convert
UTF8ToHtml
+UTF8Toisolat1
+attribute
+attributeSAXFunc
+docbEncodeEntities
+htmlEncodeEntities
+isolat1ToUTF8
+xmlBuildRelativeURI
+xmlCharEncodingInputFunc
+xmlCharEncodingOutputFunc
+xmlEncodeEntities
+xmlEncodeEntitiesReentrant
+xmlEncodeSpecialChars
+xmlXPathAddValues
+xmlXPathDivValues
+xmlXPathModValues
+xmlXPathMultValues
+xmlXPathSubValues
+xmlXPathValueFlipSign
+
converted
xmlCatalogConvert
+xmlConvertSGMLCatalog
+xmlXPathCompareValues
+xmlXPathEvalPredicate
+xmlXPathEvaluatePredicateResult
+xmlXPathIdFunction
+xmlXPathNormalizeFunction
+xmlXPathStringFunction
+xmlXPathStringLengthFunction
+
converter
xmlAllocOutputBuffer
+xmlOutputBufferCreateBuffer
+xmlOutputBufferCreateFd
+xmlOutputBufferCreateFile
+xmlOutputBufferCreateFilename
+
converting
xmlSaveFileEnc
+xmlXPathEvalPredicate
+xmlXPathEvaluatePredicateResult
+
converts
xmlXPathBooleanFunction
+xmlXPathStringFunction
+
cope
xmlCheckLanguageID
+
copied
xmlBufferCreateStatic
+xmlCopyDoc
+xmlGetFeaturesList
+xmlSchemaCopyValue
+xmlXPathNodeSetMerge
+
copier
xmlHashCopy
+
copying
xmlParserInputBufferGrow
+
correct
xmlCheckLanguageID
+
correctly
xmlURIEscape
+
correponding
xmlTextReaderCurrentDoc
+xmlTextReaderCurrentNode
+
correspond
xmlIsXHTML
+xmlParseEntity
+xmlSAXParseEntity
+
corresponding
xmlGetDocEntity
+xmlGetDtdEntity
+xmlGetParameterEntity
+xmlOutputBufferCreateFilenameFunc
+xmlParserInputBufferCreateFilenameFunc
+xmlSetProp
+xmlXPathTranslateFunction
+
cost
xmlByteConsumed
+
costly
XML_MAX_NAMELEN
+xmlByteConsumed
+
could
xmlByteConsumed
+xmlCheckLanguageID
+xmlDOMWrapAdoptNode
+xmlDOMWrapCloneNode
+xmlDOMWrapReconcileNamespaces
+xmlModuleClose
+xmlSchemaGetCanonValue
+xmlSchemaGetCanonValueWhtsp
+xmlTextReaderByteConsumed
+xmlTextReaderRelaxNGSetSchema
+xmlTextReaderRelaxNGValidate
+xmlTextReaderRelaxNGValidateCtxt
+xmlTextReaderSchemaValidate
+xmlTextReaderSchemaValidateCtxt
+xmlTextReaderSetSchema
+xmlValidateDtd
+
count
_xmlEntity
+ftpListCallback
+xmlChildElementCount
+xmlExpRef
+xmlLsCountNode
+xmlSaveDoc
+xmlSaveTree
+xmlSchematronValidateDoc
+xmlTextReaderAttributeCount
+xmlXPathCountFunction
+
counter
xmlAutomataNewCountedTrans
+xmlAutomataNewCounter
+xmlAutomataNewCounterTrans
+xmlDictReference
+
counterparts
xmlEncodeEntitiesReentrant
+
course
xmlTextReaderNormalization
+
cover
xmlSearchNs
+
crash
xmlCleanupParser
+xmlCleanupThreads
+
create
xmlBufferCreate
+xmlBufferCreateSize
+xmlBufferCreateStatic
+xmlCatalogIsEmpty
+xmlCreateEntitiesTable
+xmlCreateEnumeration
+xmlNewCatalog
+xmlNewDtd
+xmlNewNs
+
creates
xmlAutomataNewAllTrans
+xmlAutomataNewCountTrans
+xmlAutomataNewCountTrans2
+xmlAutomataNewCountedTrans
+xmlAutomataNewCounterTrans
+xmlAutomataNewEpsilon
+xmlAutomataNewNegTrans
+xmlAutomataNewOnceTrans
+xmlAutomataNewOnceTrans2
+xmlAutomataNewTransition
+xmlAutomataNewTransition2
+xmlCreateURI
+xmlStrncatNew
+xmlXPathContextSetCache
+
creating
xmlDOMWrapAdoptNode
+xmlDOMWrapCloneNode
+xmlDOMWrapReconcileNamespaces
+
creation
xmlIOHTTPOpenW
+xmlNewNs
+xmlRegisterNodeDefault
+
cross
xmlSearchNs
+
crossed
xmlAutomataNewOnceTrans
+xmlAutomataNewOnceTrans2
+
cshema
XML_SCHEMAS_FINAL_DEFAULT_LIST
+
ctrio
xmlXPathIsInf
+xmlXPathIsNaN
+
ctxt
xmlExpNewOr
+xmlExpNewRange
+xmlExpNewSeq
+
ctxt-
docbFreeParserCtxt
+htmlFreeParserCtxt
+xmlFreeParserCtxt
+xmlPopInput
+xmlValidCtxtNormalizeAttributeValue
+xmlValidityErrorFunc
+xmlValidityWarningFunc
+
cur
xmlXPathAxisFunc
+
curent
xmlC14NIsVisibleCallback
+
currently
XML_SCHEMAS_INCLUDING_CONVERT_NS
+xmlCheckLanguageID
+xmlGcMemGet
+xmlMemBlocks
+xmlMemGet
+xmlMemUsed
+xmlOutputBufferCreateFilename
+xmlOutputBufferGetContent
+xmlOutputBufferGetSize
+xmlSchemaValidateFile
+xmlXPathContextSetCache
+
custom
xmlDOMWrapAdoptNode
+xmlDOMWrapCloneNode
+xmlSaveSetAttrEscape
+xmlSaveSetEscape
+

A-B +C-C +D-E +F-I +J-N +O-P +Q-R +S-S +T-U +V-X +Y-a +b-b +c-c +d-d +e-e +f-f +g-h +i-i +j-l +m-m +n-n +o-o +p-p +q-r +s-s +t-t +u-v +w-w +x-x +y-z +

Daniel Veillard

diff --git a/doc/APIchunk13.html b/doc/APIchunk13.html new file mode 100644 index 0000000..dba5952 --- /dev/null +++ b/doc/APIchunk13.html @@ -0,0 +1,653 @@ + + +API Alphabetic Index d-d for libxml2
Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
Made with Libxml2 Logo

The XML C parser and toolkit of Gnome

API Alphabetic Index d-d for libxml2

Developer Menu
API Indexes
Related links

A-B +C-C +D-E +F-I +J-N +O-P +Q-R +S-S +T-U +V-X +Y-a +b-b +c-c +d-d +e-e +f-f +g-h +i-i +j-l +m-m +n-n +o-o +p-p +q-r +s-s +t-t +u-v +w-w +x-x +y-z +

Letter d:

dangerous
xmlTextReaderCurrentNode
+
data-type
xmlSchemaCopyValue
+
datatype
xmlSchemaGetBuiltInListSimpleTypeItemType
+
day
ftpListCallback
+
day:minute
ftpListCallback
+
de-coupled
xmlValidateDtd
+
deactivated
xmlTextReaderRelaxNGSetSchema
+xmlTextReaderRelaxNGValidate
+xmlTextReaderRelaxNGValidateCtxt
+xmlTextReaderSchemaValidate
+xmlTextReaderSchemaValidateCtxt
+xmlTextReaderSetSchema
+
deallocate
_xmlParserInput
+xmlCleanupParser
+xmlDecodeEntities
+xmlListDeallocator
+xmlParserInputDeallocate
+xmlStringDecodeEntities
+xmlStringLenDecodeEntities
+xmlXPathFreeNodeSetList
+
deallocated
xmlDictFree
+xmlEncodeEntitiesReentrant
+xmlEncodeSpecialChars
+xmlGetFeaturesList
+xmlHashFree
+xmlNewTextWriter
+xmlRegExecErrInfo
+xmlRegExecNextValues
+xmlSaveUri
+xmlTextReaderConstBaseUri
+xmlTextReaderConstEncoding
+xmlTextReaderConstLocalName
+xmlTextReaderConstName
+xmlTextReaderConstNamespaceUri
+xmlTextReaderConstPrefix
+xmlTextReaderConstString
+xmlTextReaderConstValue
+xmlTextReaderConstXmlVersion
+xmlTextReaderGetAttribute
+xmlTextReaderGetAttributeNo
+xmlTextReaderGetAttributeNs
+xmlTextReaderLookupNamespace
+xmlTextReaderReadInnerXml
+xmlTextReaderReadOuterXml
+xmlTextReaderReadString
+xmlTextReaderRelaxNGSetSchema
+xmlTextReaderSetSchema
+xmlTextReaderValue
+
deallocation
xmlListRemoveAll
+xmlListRemoveFirst
+xmlListRemoveLast
+
deallocator
xmlHashFree
+xmlHashRemoveEntry
+xmlHashRemoveEntry2
+xmlHashRemoveEntry3
+xmlHashUpdateEntry
+xmlHashUpdateEntry2
+xmlHashUpdateEntry3
+xmlListCreate
+
debug
DEBUG_MEMORY
+xmlCatalogSetDebug
+xmlDebugDumpAttr
+xmlDebugDumpAttrList
+xmlDebugDumpDTD
+xmlDebugDumpDocument
+xmlDebugDumpDocumentHead
+xmlDebugDumpEntities
+xmlDebugDumpNode
+xmlDebugDumpNodeList
+xmlDebugDumpOneNode
+xmlRegexpPrint
+xmlSnprintfElementContent
+
debugging
DEBUG_MEMORY
+DEBUG_MEMORY_LOCATION
+LIBXML_DEBUG_RUNTIME
+xmlCatalogSetDebug
+xmlXPathDebugDumpObject
+
decimal
xmlXPathStringFunction
+
decl
XML_SCHEMAS_ELEM_INTERNAL_CHECKED
+xmlAddAttributeDecl
+xmlNewDocElementContent
+xmlNewElementContent
+
declarations
_xmlXPathContext
+htmlParseCharRef
+startElementNsSAX2Func
+xmlParseCharRef
+xmlParseEntityDecl
+xmlParseEntityRef
+xmlParseEntityValue
+xmlParseExternalSubset
+xmlParseMarkupDecl
+xmlParsePEReference
+xmlParseSDDecl
+xmlReconciliateNs
+xmlSAX2StartElementNs
+xmlTextWriterWriteFormatDTD
+xmlTextWriterWriteVFormatDTD
+xmlValidateNotationDecl
+xmlXPtrBuildNodeList
+
declare
xmlParseEntityRef
+xmlParserHandleReference
+xmlSearchNs
+
declared
_xmlElement
+_xmlParserCtxt
+xmlParseAttValue
+xmlParseAttribute
+xmlParseAttributeType
+xmlParseDefaultDecl
+xmlParseElementDecl
+xmlParseEntityDecl
+xmlParseEntityRef
+xmlParseNamespace
+xmlParseNotationType
+xmlReconciliateNs
+xmlTextReaderStandalone
+xmlValidCtxtNormalizeAttributeValue
+xmlValidNormalizeAttributeValue
+
declaring
xmlGetID
+
decode
xmlDecodeEntities
+
def
xmlParseAttributeListDecl
+xmlParseAttributeType
+
defaulted
XML_COMPLETE_ATTRS
+_xmlParserCtxt
+startElementNsSAX2Func
+xmlSAX2StartElementNs
+xmlTextReaderIsDefault
+
defaultexternal
xmlSetExternalEntityLoader
+
defaults
xmlShell
+xmlXPathLocalNameFunction
+xmlXPathNamespaceURIFunction
+xmlXPathNormalizeFunction
+xmlXPathStringFunction
+xmlXPathStringLengthFunction
+
define
DEBUG_MEMORY
+XML_CAST_FPTR
+xmlHandleEntity
+xmlSchemaGetCanonValue
+
defined
WITHOUT_TRIO
+WITH_TRIO
+_xmlXPathContext
+xmlGetNsList
+xmlHandleEntity
+xmlNewEntity
+xmlNewNs
+xmlNodeGetBase
+xmlParseBalancedChunkMemory
+xmlParseBalancedChunkMemoryRecover
+xmlParseElementContentDecl
+xmlParseInNodeContext
+xmlSchemaGetBuiltInListSimpleTypeItemType
+xmlSearchNs
+xmlSearchNsByHref
+xmlTextReaderIsDefault
+xmlValidGetValidElements
+xmlValidateDtdFinal
+xmlXPathNextAncestorOrSelf
+
defining
XINCLUDE_FALLBACK
+XINCLUDE_HREF
+XINCLUDE_NODE
+XINCLUDE_NS
+XINCLUDE_OLD_NS
+XINCLUDE_PARSE
+XINCLUDE_PARSE_ENCODING
+XINCLUDE_PARSE_TEXT
+XINCLUDE_PARSE_XML
+XINCLUDE_PARSE_XPOINTER
+xmlGetID
+xmlReconciliateNs
+xmlShellDu
+xmlTextReaderConstNamespaceUri
+xmlTextReaderNamespaceUri
+
definitions
_xmlNode
+startElementNsSAX2Func
+xmlLoadCatalog
+xmlLoadCatalogs
+xmlPatterncompile
+xmlSAX2StartElementNs
+xmlTextReaderPreservePattern
+xmlValidateDtd
+
defs
_xmlSchema
+_xmlSchemaElement
+
delayed
xmlOutputBufferWrite
+xmlOutputBufferWriteEscape
+xmlOutputBufferWriteString
+
delegation
xmlCatalogSetDefaultPrefer
+
delete
xmlNanoFTPDele
+
deletion
xmlCatalogSetDefaultPrefer
+
dependant
xmlXPathContextSetCache
+
depending
xmlIsID
+xmlIsRef
+xmlListDataCompare
+xmlParseReference
+xmlXPathEqualValues
+xmlXPathLangFunction
+xmlXPathNotEqualValues
+
deprecated
LIBXML_LEGACY_ENABLED
+_htmlElemDesc
+_xmlURI
+htmlAttrAllowed
+htmlElementAllowedHere
+htmlElementStatusHere
+htmlNodeStatus
+xmlCheckLanguageID
+xmlCreateEntitiesTable
+xmlDecodeEntities
+xmlInitializeDict
+xmlNodeDump
+xmlParserHandleReference
+xmlParserInputRead
+xmlScanName
+
depth
_xmlParserCtxt
+_xmlValidCtxt
+xmlPatternMaxDepth
+xmlPatternMinDepth
+xmlTextReaderDepth
+
deregistration
xmlDeregisterNodeDefault
+xmlDeregisterNodeFunc
+
derivation
XML_SCHEMAS_TYPE_DERIVATION_METHOD_EXTENSION
+XML_SCHEMAS_TYPE_DERIVATION_METHOD_RESTRICTION
+xmlExpExpDerive
+xmlExpStringDerive
+
des
xmlTextReaderRelaxNGSetSchema
+xmlTextReaderSetSchema
+
desactivated
xmlTextReaderRelaxNGSetSchema
+xmlTextReaderSetSchema
+
descend
xmlDOMWrapCloneNode
+
descendant
xmlXPathNextDescendant
+
descendant-or-self
xmlXPathNextDescendantOrSelf
+
descendants
xmlXPathNextDescendant
+xmlXPathNextDescendantOrSelf
+xmlXPathNextFollowing
+
described
xmlStreamWantsAnyNode
+xmlValidateAttributeDecl
+xmlValidateDocument
+xmlValidateDocumentFinal
+xmlValidateDtdFinal
+xmlValidateElementDecl
+xmlValidateNotationDecl
+xmlValidateOneAttribute
+xmlValidateOneElement
+xmlValidateOneNamespace
+xmlValidateRoot
+
describing
docbParseDoc
+docbParseFile
+docbSAXParseDoc
+docbSAXParseFile
+htmlCreateFileParserCtxt
+htmlParseDoc
+htmlParseFile
+htmlSAXParseDoc
+htmlSAXParseFile
+xmlFindCharEncodingHandler
+xmlParseElementChildrenContentDecl
+xmlParseElementMixedContentDecl
+
description
_htmlElemDesc
+_htmlEntityDesc
+htmlElementAllowedHereDesc
+xmlCopyDocElementContent
+xmlCopyElementContent
+xmlGetDtdAttrDesc
+xmlGetDtdElementDesc
+xmlGetDtdNotationDesc
+xmlGetDtdQAttrDesc
+xmlGetDtdQElementDesc
+xmlIsMixedElement
+xmlNodeSetLang
+
descriptor
htmlCtxtReadFd
+htmlReadFd
+xmlCtxtReadFd
+xmlMemDisplay
+xmlMemDisplayLast
+xmlMemShow
+xmlOutputBufferCreateFd
+xmlParserInputBufferCreateFd
+xmlReadFd
+xmlReaderForFd
+xmlReaderNewFd
+xmlSaveToFd
+xmlSaveToIO
+
designed
xmlCharEncodingOutputFunc
+
desired
xmlBufferResize
+xmlIOHTTPOpenW
+xmlUTF8Strloc
+xmlUTF8Strpos
+
destination
xmlDOMWrapAdoptNode
+xmlDOMWrapCloneNode
+xmlIOHTTPOpenW
+xmlURIUnescapeString
+
destroy
xmlTextReaderCurrentDoc
+
destroyed
xmlAddChild
+xmlAddNextSibling
+xmlAddPrevSibling
+xmlTextReaderCurrentNode
+xmlTextReaderSetup
+
destruction
xmlDeregisterNodeDefault
+
details
xmlC14NDocDumpMemory
+xmlC14NDocSave
+xmlC14NDocSaveTo
+xmlC14NExecute
+
detect
xlinkIsLink
+xmlCreatePushParserCtxt
+xmlInputMatchCallback
+xmlKeepBlanksDefault
+xmlOutputMatchCallback
+xmlXPathIsInf
+xmlXPathIsNaN
+
detected
CHECK_ERROR
+CHECK_ERROR0
+endDocument
+endDocumentSAXFunc
+endElement
+endElementNsSAX2Func
+endElementSAXFunc
+reference
+referenceSAXFunc
+startElementNsSAX2Func
+xlinkExtendedLinkFunk
+xlinkExtendedLinkSetFunk
+xlinkIsLink
+xmlParserHandlePEReference
+xmlParserHandleReference
+xmlSAX2EndDocument
+xmlSAX2EndElement
+xmlSAX2EndElementNs
+xmlSAX2Reference
+xmlSAX2StartElementNs
+xmlSchemaIsValid
+
detection
docbCreatePushParserCtxt
+xlinkExtendedLinkFunk
+xlinkExtendedLinkSetFunk
+xlinkGetDefaultDetect
+xlinkNodeDetectFunc
+xlinkSetDefaultDetect
+xlinkSimpleLinkFunk
+xmlCreatePushParserCtxt
+xmlIsID
+xmlParseBalancedChunkMemory
+xmlParseBalancedChunkMemoryRecover
+xmlParseExternalEntity
+
determine
xmlC14NExecute
+xmlCharInRange
+
determined
xmlXPathLangFunction
+
determinist
xmlAutomataIsDeterminist
+xmlRegexpIsDeterminist
+
dict
_xmlDoc
+
dictionaries
XML_MAX_NAME_LENGTH
+
did
XML_SCHEMAS_TYPE_BLOCK_DEFAULT
+xmlTextReaderGetRemainder
+xmlTextReaderStandalone
+
difference
xmlXPathDifference
+
different
_xmlBuffer
+xmlACatalogAdd
+xmlBuildQName
+xmlCatalogAdd
+xmlChildElementCount
+xmlFirstElementChild
+xmlLastElementChild
+xmlNextElementSibling
+xmlNodeGetBase
+xmlPreviousElementSibling
+xmlStrEqual
+xmlStrQEqual
+
differentiate
xmlXPathOrderDocElems
+
differently
xmlTextReaderGetRemainder
+
differs
xmlBufShrink
+xmlNewEntity
+
digit
xmlXPathStringFunction
+
digits
xmlXPathStringFunction
+
dir
xmlShellDir
+
direct
htmlElementAllowedHere
+htmlElementAllowedHereDesc
+htmlElementStatusHere
+xmlExpExpDerive
+xmlParseAttribute
+xmlURIUnescapeString
+
direction
xmlXPathNextAncestor
+xmlXPathNextAncestorOrSelf
+xmlXPathNextAttribute
+xmlXPathNextChild
+xmlXPathNextDescendant
+xmlXPathNextDescendantOrSelf
+xmlXPathNextFollowing
+xmlXPathNextFollowingSibling
+xmlXPathNextNamespace
+xmlXPathNextParent
+xmlXPathNextPreceding
+xmlXPathNextPrecedingSibling
+xmlXPathNextSelf
+
directly
xmlBufGetNodeContent
+xmlNodeBufGetContent
+xmlNodeGetContent
+xmlNormalizeURIPath
+xmlParseAttribute
+xmlParseElementContentDecl
+xmlParsePEReference
+xmlParseSDDecl
+xmlParserHandlePEReference
+xmlParserHandleReference
+xmlParserInputBufferGrow
+xmlXPathConvertBoolean
+xmlXPathConvertNumber
+xmlXPathConvertString
+xmlXPtrNewContext
+
directories
xmlLoadCatalogs
+
directory
_xmlParserCtxt
+_xmlParserInput
+xmlCheckFilename
+xmlNanoFTPCwd
+xmlNanoFTPDele
+xmlParserGetDirectory
+xmlShellList
+
disable
xmlCatalogSetDebug
+xmlSchemaValidateSetLocator
+
disabled
XML_CAST_FPTR
+_xmlParserCtxt
+xmlParseURIRaw
+
disables
xmlXPathContextSetCache
+
disabling
xmlNoNetExternalEntityLoader
+
disallowed
XML_SCHEMAS_ELEM_BLOCK_EXTENSION
+XML_SCHEMAS_ELEM_BLOCK_RESTRICTION
+XML_SCHEMAS_ELEM_BLOCK_SUBSTITUTION
+
discard
xmlUnlinkNode
+
discarded
xmlDeregisterNodeFunc
+
discarding
xmlParseAttValue
+xmlValidCtxtNormalizeAttributeValue
+xmlValidNormalizeAttributeValue
+
disconnected
xmlAutomataNewState
+
discovering
xmlSwitchEncoding
+xmlSwitchInputEncoding
+xmlSwitchToEncoding
+
disctionary
xmlDictOwns
+
display
errorSAXFunc
+fatalErrorSAXFunc
+warningSAXFunc
+xmlMemShow
+xmlParserError
+xmlParserValidityError
+xmlParserValidityWarning
+xmlParserWarning
+
distinct
xmlXPathDistinct
+xmlXPathDistinctSorted
+
distinguish
xmlXPathStringFunction
+
div
xmlXPathDivValues
+xmlXPathSubstringFunction
+
doc
htmlNodeDumpFileFormat
+xmlDOMWrapAdoptNode
+xmlDOMWrapCloneNode
+xmlDOMWrapRemoveNode
+xmlNewTextWriterDoc
+
doc-
xmlDOMWrapRemoveNode
+xmlDocGetRootElement
+xmlDocSetRootElement
+xmlNewTextWriterTree
+xmlNodeGetBase
+
docs
xmlBuildRelativeURI
+
doctypedecl
xmlParseDocTypeDecl
+xmlParseDocument
+
documents
xmlCleanupParser
+xmlIsID
+xmlParseEntityRef
+xmlParserHandleReference
+xmlSAXParseDoc
+xmlSAXParseFile
+xmlSAXParseFileWithData
+xmlSAXParseMemory
+xmlSAXParseMemoryWithData
+xmlXPathOrderDocElems
+
doesn
_htmlElemDesc
+htmlElementAllowedHere
+xmlBufferDetach
+xmlCheckLanguageID
+xmlCleanupParser
+xmlCreateEntitiesTable
+xmlFreeNode
+xmlGetThreadId
+xmlInitCharEncodingHandlers
+xmlKeepBlanksDefault
+xmlNodeListGetRawString
+xmlPatternMatch
+xmlRemoveProp
+xmlUTF8Strlen
+xmlValidateRoot
+xmlXPathLeading
+xmlXPathLeadingSorted
+xmlXPathNodeLeading
+xmlXPathNodeLeadingSorted
+xmlXPathNodeTrailing
+xmlXPathNodeTrailingSorted
+xmlXPathTrailing
+xmlXPathTrailingSorted
+
doing
xmlOutputBufferCreateFilenameFunc
+xmlParserInputBufferCreateFilenameFunc
+xmlRegExecCallbacks
+
don
XML_SCHEMAS_ANY_LAX
+xlinkIsLink
+xmlChildElementCount
+xmlCreatePushParserCtxt
+xmlDOMWrapCloneNode
+xmlFirstElementChild
+xmlLastElementChild
+xmlNewDocNode
+xmlNewDocNodeEatName
+xmlNextElementSibling
+xmlParseStartTag
+xmlPreviousElementSibling
+xmlRegExecErrInfo
+xmlRegExecNextValues
+xmlSearchNs
+xmlXPathFreeNodeSetList
+xmlXPathNodeSetFreeNs
+
dotgnu
xmlTextReaderNodeType
+
double
val
+xmlBufferWriteQuotedString
+xmlGetBufferAllocationScheme
+xmlSetBufferAllocationScheme
+xmlXPathIsInf
+xmlXPathIsNaN
+xmlXPathNewFloat
+xmlXPathNodeSetCreate
+xmlXPathReturnNumber
+xmlXPathStringEvalNumber
+xmlXPtrLocationSetCreate
+
double-hyphen
xmlParseComment
+
double-quotes
xmlBufferWriteQuotedString
+
doubleit
xmlGetBufferAllocationScheme
+
doublequotes
xmlParseQuotedString
+
doubt
xmlCleanupParser
+xmlCleanupThreads
+
down
xmlGetBufferAllocationScheme
+xmlSetBufferAllocationScheme
+
draft
XINCLUDE_OLD_NS
+
drop
xmlFileRead
+xmlIOFTPRead
+xmlIOHTTPRead
+xmlParseNamespace
+xmlParseQuotedString
+xmlXPtrBuildNodeList
+
dtd
getSystemId
+htmlNewDoc
+htmlNewDocNoDtD
+xmlCopyDtd
+xmlSAX2GetSystemId
+xmlValidateDtd
+
dtds
getSystemId
+xmlSAX2GetSystemId
+xmlValidateDtdFinal
+
due
xmlBufShrink
+xmlModuleOpen
+xmlModuleSymbol
+
dump
xmlBufShrink
+xmlBufferAdd
+xmlBufferCCat
+xmlBufferDump
+xmlBufferShrink
+xmlDumpAttributeDecl
+xmlDumpAttributeTable
+xmlDumpElementDecl
+xmlDumpElementTable
+xmlDumpEntitiesTable
+xmlDumpEntityDecl
+xmlDumpNotationDecl
+xmlDumpNotationTable
+xmlLsOneNode
+xmlMemDisplayLast
+xmlMemShow
+xmlSnprintfElementContent
+xmlXPathDebugDumpObject
+
dumping
xmlMemDisplayLast
+
dumps
xmlShellBase
+xmlShellCat
+xmlShellDir
+
duplicate
xmlCanonicPath
+xmlPathToURI
+
duplicated
xmlRelaxNGNewDocParserCtxt
+xmlXPathNodeSetFreeNs
+
duplicates
xmlSchemaCopyValue
+
duration
xmlSchemaGetCanonValue
+
during
xmlSAXDefaultVersion
+xmlSchemaIsValid
+xmlSchemaNewDocParserCtxt
+xmlSchemaSetValidOptions
+xmlSchematronNewDocParserCtxt
+
dynamic
LIBXML_MODULE_EXTENSION
+

A-B +C-C +D-E +F-I +J-N +O-P +Q-R +S-S +T-U +V-X +Y-a +b-b +c-c +d-d +e-e +f-f +g-h +i-i +j-l +m-m +n-n +o-o +p-p +q-r +s-s +t-t +u-v +w-w +x-x +y-z +

Daniel Veillard

diff --git a/doc/APIchunk14.html b/doc/APIchunk14.html new file mode 100644 index 0000000..0e33ddb --- /dev/null +++ b/doc/APIchunk14.html @@ -0,0 +1,470 @@ + + +API Alphabetic Index e-e for libxml2
Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
Made with Libxml2 Logo

The XML C parser and toolkit of Gnome

API Alphabetic Index e-e for libxml2

Developer Menu
API Indexes
Related links

A-B +C-C +D-E +F-I +J-N +O-P +Q-R +S-S +T-U +V-X +Y-a +b-b +c-c +d-d +e-e +f-f +g-h +i-i +j-l +m-m +n-n +o-o +p-p +q-r +s-s +t-t +u-v +w-w +x-x +y-z +

Letter e:

each
_xmlParserCtxt
+xmlHashCopy
+xmlHashScan
+xmlHashScan3
+xmlHashScanFull
+xmlHashScanFull3
+xmlParseAttributeType
+xmlSetGenericErrorFunc
+xmlSetStructuredErrorFunc
+xmlValidateOneElement
+xmlXPathIdFunction
+xmlXPathSubstringFunction
+
edition
xmlCheckLanguageID
+
effect
xmlXPathContextSetCache
+
effective
xmlLoadCatalog
+xmlLoadCatalogs
+
efficiency
xmlBuildRelativeURI
+
either
xmlBoolToText
+xmlBufGetNodeContent
+xmlCurrentChar
+xmlLoadACatalog
+xmlNodeBufGetContent
+xmlNodeGetContent
+xmlParseElementChildrenContentDecl
+xmlParseElementContentDecl
+xmlParseMarkupDecl
+xmlParsePEReference
+xmlParseStartTag
+xmlParserHandlePEReference
+xmlTextReaderNormalization
+
either:
resolveEntity
+resolveEntitySAXFunc
+xmlSAX2ResolveEntity
+
elem
XML_SCHEMAS_ELEM_INTERNAL_CHECKED
+
elem-
_xmlDOMWrapCtxt
+
element-
xmlStreamPushNode
+xmlXPathOrderDocElems
+
element-node
xmlDOMWrapReconcileNamespaces
+xmlStreamPush
+
element-nodes
xmlDOMWrapAdoptNode
+xmlDOMWrapCloneNode
+xmlDOMWrapReconcileNamespaces
+xmlStreamWantsAnyNode
+
elementFormDefault
XML_SCHEMAS_QUALIF_ELEM
+
elementdecl
xmlParseElementDecl
+xmlParseMarkupDecl
+
elements
XML_CATALOGS_NAMESPACE
+XML_COMPLETE_ATTRS
+XML_SCHEMAS_ATTR_GLOBAL
+XML_SCHEMAS_ATTR_NSDEFAULT
+XML_SCHEMAS_ELEM_NSDEFAULT
+_xmlDtd
+htmlElementAllowedHere
+htmlNodeStatus
+xlinkIsLink
+xmlDictSize
+xmlFreePatternList
+xmlHashSize
+xmlLineNumbersDefault
+xmlListMerge
+xmlListReverse
+xmlListSize
+xmlListSort
+xmlParseAttributeType
+xmlParseDefaultDecl
+xmlParseSDDecl
+xmlShellPwd
+xmlTextWriterEndDocument
+xmlXPathIdFunction
+xmlXPathOrderDocElems
+
else
UTF8ToHtml
+UTF8Toisolat1
+docbEncodeEntities
+htmlEncodeEntities
+isolat1ToUTF8
+xmlCharEncodingInputFunc
+xmlCharEncodingOutputFunc
+
embedded
XML_CTXT_FINISH_DTD_0
+XML_CTXT_FINISH_DTD_1
+
emitted
xmlSetGenericErrorFunc
+
empty-element
xmlParseStartTag
+
enable
xmlCatalogSetDebug
+
enabled
xmlSaveFile
+xmlSaveFormatFile
+
enables
xmlXPathContextSetCache
+
enabling
xmlLineNumbersDefault
+xmlPedanticParserDefault
+
enc
xmlParserInputBufferCreateFilename
+
encapsulate
xmlBufferFree
+
encapsulating
_htmlElemDesc
+xmlNewIOInputStream
+
enclose
xmlTextReaderQuoteChar
+
encode
xmlTextWriterWriteBase64
+xmlTextWriterWriteBinHex
+
encoded
_xmlOutputBuffer
+_xmlParserInput
+_xmlParserInputBuffer
+xmlCheckUTF8
+xmlGetUTF8Char
+xmlSplitQName
+xmlStrcat
+xmlStrdup
+xmlTextWriterWriteBase64
+xmlTextWriterWriteBinHex
+xmlUTF8Strlen
+xmlUTF8Strsize
+xmlUTF8Strsub
+
encoder
_xmlOutputBuffer
+_xmlParserInputBuffer
+xmlCharEncOutFunc
+xmlCharEncodingOutputFunc
+
encoder==NULL
xmlC14NDocSaveTo
+xmlC14NExecute
+
enconding
xmlCharEncCloseFunc
+xmlCharEncFirstLine
+xmlCharEncOutFunc
+
encountered
xmlEncodeEntities
+
encountering
XML_CAST_FPTR
+
end-tag
xmlParseElement
+
end-up
xmlParseReference
+
ended
xmlC14NDocDumpMemory
+xmlC14NDocSave
+xmlC14NDocSaveTo
+xmlC14NExecute
+xmlCleanupThreads
+
ending
xmlXPtrNewCollapsedRange
+xmlXPtrNewRange
+xmlXPtrNewRangeNodeObject
+xmlXPtrNewRangeNodePoint
+xmlXPtrNewRangeNodes
+xmlXPtrNewRangePointNode
+xmlXPtrNewRangePoints
+
ends
_xmlParserNodeInfo
+xmlNanoHTTPClose
+
enforced
XML_MAX_LOOKUP_LIMIT
+
engine
xmlXPathAxisFunc
+xmlXPathFuncLookupFunc
+xmlXPathVariableLookupFunc
+
englobing
xmlExpExpDerive
+xmlExpSubsume
+xmlSnprintfElementContent
+xmlSprintfElementContent
+
enhancements
htmlNodeStatus
+
enough
xmlBuildQName
+
ensure
xmlCopyNodeList
+xmlNewTextChild
+
ensures
xmlDOMWrapAdoptNode
+xmlDOMWrapCloneNode
+
ensuring
xmlDOMWrapRemoveNode
+
entire
xmlCleanupInputCallbacks
+xmlCleanupOutputCallbacks
+
entities:
xmlParseEntityRef
+xmlParserHandleReference
+
entproc
xmlParserHandlePEReference
+xmlParserHandleReference
+
entries
xmlACatalogAdd
+xmlACatalogRemove
+xmlCatalogAdd
+xmlCatalogConvert
+xmlCatalogRemove
+xmlConvertSGMLCatalog
+xmlDOMWrapAdoptNode
+xmlDOMWrapCloneNode
+xmlHashAddEntry3
+xmlLoadACatalog
+xmlLoadCatalog
+xmlLoadSGMLSuperCatalog
+xmlMemShow
+
entry
xmlACatalogAdd
+xmlACatalogRemove
+xmlCatalogAdd
+xmlCatalogAddLocal
+xmlCatalogRemove
+xmlHashUpdateEntry
+xmlHashUpdateEntry2
+xmlHashUpdateEntry3
+xmlXPathNodeSetRemove
+xmlXPtrLocationSetRemove
+
enumerated
attributeDecl
+attributeDeclSAXFunc
+xmlSAX2AttributeDecl
+
enumeration
_xmlAttribute
+xmlAddAttributeDecl
+xmlCopyEnumeration
+xmlCreateEnumeration
+xmlFreeEnumeration
+xmlParseAttributeType
+xmlParseEnumeratedType
+xmlParseEnumerationType
+
environment
xmlNanoFTPProxy
+xmlReconciliateNs
+xmlShell
+xmlXPathInit
+
epsilon
xmlAutomataNewAllTrans
+xmlAutomataNewCountedTrans
+xmlAutomataNewCounterTrans
+xmlAutomataNewEpsilon
+
equal
xmlAddChild
+xmlAddNextSibling
+xmlAddPrevSibling
+xmlStrEqual
+xmlStrQEqual
+xmlTextReaderConstName
+xmlTextReaderName
+xmlXPathCompareValues
+xmlXPathEqualValues
+xmlXPathEvalPredicate
+xmlXPathEvaluatePredicateResult
+xmlXPathIdFunction
+xmlXPathNotEqualValues
+xmlXPathPositionFunction
+xmlXPathSubstringFunction
+
equality
_xmlParserInput
+xmlListDataCompare
+
equivalent
xmlMallocAtomicLoc
+xmlMallocLoc
+xmlMemFree
+xmlMemMalloc
+xmlMemRealloc
+xmlMemStrdupLoc
+xmlMemoryStrdup
+xmlNodeListGetRawString
+xmlNodeListGetString
+xmlReallocLoc
+xmlUTF8Strpos
+xmlXPathCastToString
+xmlXPathConvertBoolean
+xmlXPathConvertNumber
+xmlXPathConvertString
+
escape
docbEncodeEntities
+htmlEncodeEntities
+xmlURIEscape
+xmlURIEscapeStr
+
escaped
xmlNewChild
+xmlNewDocNode
+xmlNewDocNodeEatName
+xmlNewTextChild
+xmlNodeSetContent
+xmlNodeSetContentLen
+xmlParseCDSect
+xmlParseCharData
+xmlSaveUri
+xmlURIEscape
+xmlURIEscapeStr
+
escapes
xmlOutputBufferWriteEscape
+xmlURIEscapeStr
+
escaping
xmlOutputBufferWriteEscape
+xmlSaveSetAttrEscape
+xmlSaveSetEscape
+
especially
xmlExpParse
+
established
xmlNanoFTPUpdateURL
+
etc
_xmlSchemaFacet
+xmlDocGetRootElement
+xmlDocSetRootElement
+xmlParseInNodeContext
+
evaluate
xmlXPathEvalExpr
+
evaluated
xmlXPathCompiledEvalToBoolean
+xmlXPathEvalPredicate
+xmlXPathEvaluatePredicateResult
+xmlXPtrNewContext
+
evaluating
xmlXPathEvalPredicate
+xmlXPathEvaluatePredicateResult
+
evaluation
_xmlXPathFunct
+_xmlXPathParserContext
+valuePop
+valuePush
+xmlRegNewExecCtxt
+xmlShellPrintXPathResult
+xmlXPathCompiledEval
+xmlXPathEval
+xmlXPathEvalExpression
+xmlXPathEvalFunc
+xmlXPathEvalPredicate
+xmlXPathEvaluatePredicateResult
+xmlXPathNodeEval
+xmlXPtrBuildNodeList
+xmlXPtrEval
+
evaulation
xmlRegFreeExecCtxt
+
even
_xmlParserInput
+xmlExpNewOr
+xmlExpNewRange
+xmlExpNewSeq
+xmlNodeGetBase
+xmlParseBalancedChunkMemoryRecover
+xmlTextWriterFullEndElement
+xmlXPathRoundFunction
+
event
xmlSchemaSAXPlug
+xmlSchemaSAXUnplug
+xmlSchemaValidateStream
+
events
htmlSAXParseDoc
+xmlSchemaValidateStream
+
ever
xmlExpCtxtNbCons
+
everywhere
xmlSAXParseFileWithData
+xmlSAXParseMemoryWithData
+
exact
xmlGetBufferAllocationScheme
+xmlSetBufferAllocationScheme
+
examined
xmlHasFeature
+
example
xmlParserInputBufferCreateStatic
+xmlReconciliateNs
+xmlTextReaderConstString
+xmlXPathSubstringAfterFunction
+xmlXPathSubstringBeforeFunction
+xmlXPathSubstringFunction
+xmlXPathTranslateFunction
+
examples
xmlBuildRelativeURI
+
except
xmlAutomataNewNegTrans
+xmlGetNoNsProp
+xmlParseAttValue
+xmlParseCatalogFile
+xmlParseEntityRef
+xmlParserHandleReference
+
exception
xmlURIEscapeStr
+
excluding
IS_CHAR
+xmlXPathNextFollowing
+xmlXPathNextPreceding
+
exclusions
XML_SCHEMAS_ELEM_FINAL_ABSENT
+
exclusions:
XML_SCHEMAS_ELEM_FINAL_EXTENSION
+XML_SCHEMAS_ELEM_FINAL_RESTRICTION
+
exclusive
xmlC14NDocDumpMemory
+xmlC14NDocSave
+xmlC14NDocSaveTo
+xmlC14NExecute
+
executed
xmlAutomataCompile
+
execution
xmlRegExecErrInfo
+xmlRegExecNextValues
+xmlRegExecPushString
+xmlRegExecPushString2
+
exist
xmlHasFeature
+xmlXPtrLocationSetAdd
+
existent
xmlDOMWrapAdoptNode
+xmlDOMWrapCloneNode
+xmlDOMWrapReconcileNamespaces
+
exists
xmlDictExists
+xmlShellPwd
+xmlTextReaderConstXmlLang
+xmlTextReaderXmlLang
+xmlValidateNotationDecl
+
exit
xmlCleanupParser
+xmlCleanupThreads
+
expand
xmlLoadSGMLSuperCatalog
+
expanded
xmlRelaxNGValidateFullElement
+xmlSchemaNewStringValue
+xmlXPathNamespaceURIFunction
+
expected
x
+xmlBufferCreateStatic
+xmlParserInputBufferCreateStatic
+xmlRelaxNGNewMemParserCtxt
+xmlRelaxNGNewParserCtxt
+xmlSchemaNewMemParserCtxt
+xmlSchemaNewParserCtxt
+xmlSchemaValidateListSimpleTypeFacet
+xmlSchematronNewMemParserCtxt
+xmlSchematronNewParserCtxt
+xmlStreamPush
+xmlStreamPushAttr
+xmlStreamPushNode
+
explicitly
xmlSAXDefaultVersion
+
explored
xmlXPathAxisFunc
+
exposing
xmlTextReaderRead
+
express
LIBXML2_NEW_BUFFER
+
expressing
xmlPathToURI
+
expressions
LIBXML_EXPR_ENABLED
+LIBXML_REGEXP_ENABLED
+xmlExpExpDerive
+xmlExpNewCtxt
+xmlExpParse
+xmlExpSubsume
+
exslSetsDistinctSorted
xmlXPathDistinct
+
exslSetsLeadingSorted
xmlXPathLeading
+
exslSetsNodeLeadingSorted
xmlXPathNodeLeading
+
ext
_xmlParserCtxt
+
extParsedEnt
xmlParseCtxtExternalEntity
+xmlParseEntity
+xmlParseExtParsedEnt
+xmlParseExternalEntity
+xmlSAXParseEntity
+
extSubset
xmlParseExternalSubset
+
extSubsetDecl
xmlParseExternalSubset
+
extend
xmlStrncat
+xmlValidGetPotentialChildren
+
extended
xlinkExtendedLinkFunk
+xlinkExtendedLinkSetFunk
+xmlCheckLanguageID
+xmlXPathNodeSetMerge
+xmlXPtrLocationSetMerge
+
extension
XML_SCHEMAS_BLOCK_DEFAULT_EXTENSION
+XML_SCHEMAS_ELEM_FINAL_EXTENSION
+XML_SCHEMAS_FINAL_DEFAULT_EXTENSION
+XML_SCHEMAS_TYPE_BLOCK_EXTENSION
+XML_SCHEMAS_TYPE_DERIVATION_METHOD_EXTENSION
+XML_SCHEMAS_TYPE_FINAL_EXTENSION
+xmlCheckLanguageID
+
extensions
_xmlSAXHandler
+
extent
xmlParseBalancedChunkMemoryRecover
+
extlang
xmlCheckLanguageID
+
extract
XML_GET_CONTENT
+XML_GET_LINE
+xmlBufContent
+xmlBufEnd
+xmlBufferContent
+

A-B +C-C +D-E +F-I +J-N +O-P +Q-R +S-S +T-U +V-X +Y-a +b-b +c-c +d-d +e-e +f-f +g-h +i-i +j-l +m-m +n-n +o-o +p-p +q-r +s-s +t-t +u-v +w-w +x-x +y-z +

Daniel Veillard

diff --git a/doc/APIchunk15.html b/doc/APIchunk15.html new file mode 100644 index 0000000..163d67b --- /dev/null +++ b/doc/APIchunk15.html @@ -0,0 +1,454 @@ + + +API Alphabetic Index f-f for libxml2
Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
Made with Libxml2 Logo

The XML C parser and toolkit of Gnome

API Alphabetic Index f-f for libxml2

Developer Menu
API Indexes
Related links

A-B +C-C +D-E +F-I +J-N +O-P +Q-R +S-S +T-U +V-X +Y-a +b-b +c-c +d-d +e-e +f-f +g-h +i-i +j-l +m-m +n-n +o-o +p-p +q-r +s-s +t-t +u-v +w-w +x-x +y-z +

Letter f:

fTP
xmlNanoFTPConnectTo
+
face
XML_MAX_NAME_LENGTH
+
facet
XML_SCHEMAS_FACET_COLLAPSE
+XML_SCHEMAS_FACET_PRESERVE
+XML_SCHEMAS_FACET_REPLACE
+XML_SCHEMAS_FACET_UNKNOWN
+_xmlSchemaFacetLink
+xmlSchemaCheckFacet
+xmlSchemaFreeFacet
+xmlSchemaGetFacetValueAsULong
+xmlSchemaIsBuiltInTypeFacet
+xmlSchemaValidateFacet
+xmlSchemaValidateFacetWhtsp
+xmlSchemaValidateLengthFacet
+xmlSchemaValidateLengthFacetWhtsp
+xmlSchemaValidateListSimpleTypeFacet
+
facets
XML_SCHEMAS_TYPE_FACETSNEEDVALUE
+XML_SCHEMAS_TYPE_HAS_FACETS
+XML_SCHEMAS_TYPE_NORMVALUENEEDED
+_xmlSchemaType
+xmlSchemaCheckFacet
+
facility
xmlExpCtxtNbCons
+xmlExpCtxtNbNodes
+
fail
xmlC14NDocDumpMemory
+xmlC14NDocSave
+xmlC14NDocSaveTo
+xmlC14NExecute
+xmlShellPrintXPathError
+
failed
xmlCharEncodingInputFunc
+xmlCharEncodingOutputFunc
+xmlNanoFTPConnectTo
+xmlNanoFTPCwd
+xmlNanoFTPDele
+xmlRemoveID
+xmlRemoveRef
+xmlShellLoad
+xmlXIncludeProcess
+xmlXIncludeProcessFlags
+xmlXIncludeProcessFlagsData
+xmlXIncludeProcessNode
+xmlXIncludeProcessTree
+xmlXIncludeProcessTreeFlags
+xmlXIncludeProcessTreeFlagsData
+xmlXPathCompareValues
+
fails
UTF8ToHtml
+UTF8Toisolat1
+_htmlElemDesc
+docbEncodeEntities
+htmlEncodeEntities
+xmlCanonicPath
+xmlCharEncFirstLine
+xmlCharEncInFunc
+xmlCharEncOutFunc
+xmlCheckFilename
+xmlFileOpen
+xmlPathToURI
+
fallback
XINCLUDE_FALLBACK
+docbSAXParseDoc
+docbSAXParseFile
+htmlSAXParseDoc
+htmlSAXParseFile
+xmlFileOpen
+xmlSAXParseDoc
+xmlSAXParseEntity
+xmlSAXParseFile
+xmlSAXParseFileWithData
+xmlSAXParseMemory
+xmlSAXParseMemoryWithData
+
far
_xmlParserCtxt
+fatalErrorSAXFunc
+xmlSchemaIsValid
+
fashion
xmlNewRMutex
+
fast
htmlInitAutoClose
+
faster
htmlNodeStatus
+xmlStrEqual
+
fatal
fatalErrorSAXFunc
+
fatalError
fatalErrorSAXFunc
+
favor
xmlNewElementContent
+
feature
XML_MAX_DICTIONARY_LIMIT
+XML_MAX_NAME_LENGTH
+XML_MAX_TEXT_LENGTH
+xmlGetFeature
+xmlGetFeaturesList
+xmlHasFeature
+xmlSetFeature
+
features
xmlGetFeaturesList
+
fed
xmlCreatePushParserCtxt
+xmlNewTextReader
+xmlNewTextReaderFilename
+xmlStreamPushNode
+xmlStreamWantsAnyNode
+
feed
xmlTextReaderSetup
+
fetch
xmlNanoFTPGetSocket
+xmlNanoFTPOpen
+xmlNanoHTTPFetch
+
fetching
docbCreatePushParserCtxt
+htmlCreatePushParserCtxt
+xmlCreatePushParserCtxt
+xmlUTF8Strpos
+
field
XML_COMPLETE_ATTRS
+XML_CTXT_FINISH_DTD_0
+XML_CTXT_FINISH_DTD_1
+XML_DETECT_IDS
+XML_SKIP_IDS
+_xmlError
+xmlParseMisc
+xmlXIncludeProcessFlagsData
+xmlXIncludeProcessTreeFlagsData
+xmlXPathOrderDocElems
+
fields
XML_SAX2_MAGIC
+_htmlElemDesc
+_xmlParserCtxt
+_xmlSAXHandler
+xmlParseURIReference
+
files
xmlNanoFTPList
+
filesystem
htmlCtxtReadFile
+htmlReadFile
+xmlCanonicPath
+xmlCtxtReadFile
+xmlPathToURI
+xmlReadFile
+xmlReaderForFile
+xmlReaderNewFile
+
filled
xmlGetFeaturesList
+
fills
xmlParseURIReference
+
filters
xmlParseEncodingDecl
+
final
XML_SCHEMAS_TYPE_FINAL_DEFAULT
+XML_SCHEMAS_TYPE_FINAL_EXTENSION
+XML_SCHEMAS_TYPE_FINAL_LIST
+XML_SCHEMAS_TYPE_FINAL_RESTRICTION
+XML_SCHEMAS_TYPE_FINAL_UNION
+xmlAutomataSetFinalState
+xmlBuildURI
+xmlRegExecPushString
+xmlRegExecPushString2
+xmlValidateDocumentFinal
+xmlValidateDtdFinal
+
finalDefault
XML_SCHEMAS_FINAL_DEFAULT_EXTENSION
+XML_SCHEMAS_FINAL_DEFAULT_LIST
+XML_SCHEMAS_FINAL_DEFAULT_RESTRICTION
+XML_SCHEMAS_FINAL_DEFAULT_UNION
+
find
xmlGetThreadId
+xmlIsXHTML
+xmlSchemaValidityLocatorFunc
+
finding
xmlNanoFTPScanProxy
+xmlNanoFTPUpdateURL
+xmlNanoHTTPScanProxy
+
finds
xmlSearchNs
+xmlSearchNsByHref
+
finishDtd
XML_CTXT_FINISH_DTD_0
+XML_CTXT_FINISH_DTD_1
+
finished
_xmlValidCtxt
+xmlCleanupParser
+xmlSkipBlankChars
+xmlTextReaderCurrentDoc
+xmlTextReaderPreserve
+xmlTextReaderPreservePattern
+
finishing
xmlByteConsumed
+
finite
xmlExpParse
+
firs
xmlCharEncOutFunc
+
fist
xmlEntityReferenceFunc
+
fit
xmlCharEncFirstLine
+xmlCharEncInFunc
+xmlCharEncOutFunc
+
fixed
XML_SCHEMAS_ATTR_FIXED
+XML_SCHEMAS_ELEM_FIXED
+xmlParseDefaultDecl
+xmlSchemaGetCanonValue
+
fixup
XML_SCHEMAS_TYPE_FIXUP_1
+
flag
XML_SCHEMAS_ELEM_CIRCULAR
+htmlSetMetaEncoding
+initxmlDefaultSAXHandler
+xmlSAX2InitDefaultSAXHandler
+xmlTextReaderIsValid
+
flagged
_htmlElemDesc
+htmlGetMetaEncoding
+
flags
XML_SCHEMAS_TYPE_VARIETY_ABSENT
+_xmlXPathContext
+xmlDOMWrapAdoptNode
+xmlDOMWrapCloneNode
+xmlDOMWrapReconcileNamespaces
+xmlPatterncompile
+xmlReaderForDoc
+xmlReaderForFd
+xmlReaderForFile
+xmlReaderForIO
+xmlReaderForMemory
+xmlReaderNewDoc
+xmlReaderNewFd
+xmlReaderNewFile
+xmlReaderNewIO
+xmlReaderNewMemory
+xmlRelaxParserSetFlag
+xmlXIncludeSetFlags
+
flat
xmlStringGetNodeList
+xmlStringLenGetNodeList
+
floor
xmlXPathFloorFunction
+
flow
xmlScanName
+xmlSchemaSAXPlug
+xmlSchemaSAXUnplug
+xmlSchemaValidateSetLocator
+xmlSchemaValidateStream
+
flushed
xmlTextWriterEndDocument
+
flushes
xmlOutputBufferClose
+xmlOutputBufferFlush
+
follow
xmlAutomataNewNegTrans
+xmlXPathNodeTrailing
+xmlXPathNodeTrailingSorted
+xmlXPathSubstringFunction
+xmlXPathTrailing
+xmlXPathTrailingSorted
+
followed
xmlCheckLanguageID
+
following-sibling
xmlXPathNextFollowingSibling
+
follows
xmlXPathStringFunction
+xmlXPathSubstringAfterFunction
+
follows:
xmlParseAttValue
+xmlXPathBooleanFunction
+xmlXPathStringFunction
+
fonctionnalities
xmlInputMatchCallback
+xmlOutputMatchCallback
+
for:
xmlSchemaGetCanonValue
+xmlXPathContextSetCache
+
forbid
XML_XPATH_NOVAR
+
force
xmlKeepBlanksDefault
+xmlSetGenericErrorFunc
+
forced
xmlValidGetValidElements
+
form
docbParseDoc
+docbParseFile
+docbSAXParseDoc
+docbSAXParseFile
+htmlCreateFileParserCtxt
+htmlParseDoc
+htmlParseFile
+htmlSAXParseDoc
+htmlSAXParseFile
+xmlNodeListGetRawString
+xmlNodeListGetString
+xmlPatterncompile
+xmlXPathStringFunction
+
formal
LIBXML_EXPR_ENABLED
+
formatted
xmlTextWriterWriteFormatAttribute
+xmlTextWriterWriteFormatAttributeNS
+xmlTextWriterWriteFormatCDATA
+xmlTextWriterWriteFormatDTD
+xmlTextWriterWriteFormatDTDAttlist
+xmlTextWriterWriteFormatDTDElement
+xmlTextWriterWriteFormatDTDInternalEntity
+xmlTextWriterWriteFormatElement
+xmlTextWriterWriteFormatElementNS
+xmlTextWriterWriteFormatPI
+xmlTextWriterWriteFormatRaw
+xmlTextWriterWriteFormatString
+xmlTextWriterWriteVFormatAttribute
+xmlTextWriterWriteVFormatAttributeNS
+xmlTextWriterWriteVFormatCDATA
+xmlTextWriterWriteVFormatDTD
+xmlTextWriterWriteVFormatDTDAttlist
+xmlTextWriterWriteVFormatDTDElement
+xmlTextWriterWriteVFormatDTDInternalEntity
+xmlTextWriterWriteVFormatElement
+xmlTextWriterWriteVFormatElementNS
+xmlTextWriterWriteVFormatPI
+xmlTextWriterWriteVFormatRaw
+xmlTextWriterWriteVFormatString
+
formatting
htmlDocContentDumpFormatOutput
+htmlDocDumpMemoryFormat
+htmlNodeDump
+htmlNodeDumpFile
+htmlNodeDumpFileFormat
+htmlNodeDumpFormatOutput
+htmlNodeDumpOutput
+htmlSaveFileEnc
+htmlSaveFileFormat
+xmlBufNodeDump
+xmlDocDumpFormatMemory
+xmlDocDumpFormatMemoryEnc
+xmlDocFormatDump
+xmlNodeDump
+xmlNodeDumpOutput
+xmlSaveFormatFile
+xmlSaveFormatFileEnc
+xmlSaveFormatFileTo
+xmlStrPrintf
+xmlStrVPrintf
+
formed
_xmlParserCtxt
+htmlSAXParseDoc
+htmlSAXParseFile
+xmlParseCtxtExternalEntity
+xmlParseExternalEntity
+
forward
xmlSchemaValidateStream
+
fptr
XML_CAST_FPTR
+
fragment
_xmlURI
+xmlNewDocFragment
+xmlParseURI
+xmlPushInput
+
fragments
xmlParseURIRaw
+
freeing
xmlCanonicPath
+xmlParserInputDeallocate
+xmlPathToURI
+
frees
xmlBufferFree
+xmlXPathContextSetCache
+
front
xmlValidateNCName
+xmlValidateNMToken
+xmlValidateName
+xmlValidateQName
+
front-end
xmlCharEncCloseFunc
+xmlCharEncInFunc
+xmlCharEncOutFunc
+
ftp:
xmlNanoFTPOpen
+xmlNanoFTPScanProxy
+
ftp_proxy
xmlNanoFTPProxy
+
ftp_proxy_password
xmlNanoFTPProxy
+
ftp_proxy_user
xmlNanoFTPProxy
+
full
_xmlEntity
+_xmlXPathParserContext
+htmlAttrAllowed
+xlinkIsLink
+xmlHashScannerFull
+xmlRelaxNGValidateFullElement
+xmlRelaxNGValidatePushElement
+xmlSaveDoc
+xmlShellPwd
+xmlSplitQName2
+xmlSplitQName3
+xmlTextReaderExpand
+xmlURIUnescapeString
+xmlUTF8Strlen
+
fully
_htmlElemDesc
+xmlSaveDoc
+xmlSaveTree
+
func
_xmlXPathContext
+
funcs
_xmlXPathContext
+
function:
xmlXPathDifference
+xmlXPathDistinct
+xmlXPathDistinctSorted
+xmlXPathHasSameNodes
+xmlXPathIntersection
+xmlXPathLeading
+xmlXPathLeadingSorted
+xmlXPathNodeLeading
+xmlXPathNodeLeadingSorted
+xmlXPathNodeTrailing
+xmlXPathNodeTrailingSorted
+xmlXPathTrailing
+xmlXPathTrailingSorted
+
functionality
xmlNewGlobalNs
+xmlXPathNodeSetGetLength
+xmlXPathNodeSetItem
+
functions
htmlCtxtReadIO
+htmlReadIO
+xmlC14NDocDumpMemory
+xmlCtxtReadIO
+xmlGcMemGet
+xmlGcMemSetup
+xmlMemGet
+xmlMemSetup
+xmlReadIO
+xmlReaderForIO
+xmlReaderNewIO
+xmlRelaxNGGetValidErrors
+xmlRelaxNGSetParserErrors
+xmlRelaxNGSetParserStructuredErrors
+xmlRelaxNGSetValidErrors
+xmlRelaxNGSetValidStructuredErrors
+xmlSchemaGetValidErrors
+xmlSchemaSetParserErrors
+xmlSchemaSetParserStructuredErrors
+xmlSchemaSetValidErrors
+xmlSchemaSetValidStructuredErrors
+xmlSchematronSetValidStructuredErrors
+xmlShellCmd
+xmlSwitchEncoding
+xmlSwitchInputEncoding
+xmlSwitchToEncoding
+xmlXPathRegisterAllFunctions
+xmlXPathRegisteredFuncsCleanup
+
further
xmlParseAttValue
+xmlStopParser
+xmlValidCtxtNormalizeAttributeValue
+xmlValidNormalizeAttributeValue
+xmlXIncludeSetFlags
+
future
_xmlDOMWrapCtxt
+xmlCheckLanguageID
+xmlSchemaValidateFile
+

A-B +C-C +D-E +F-I +J-N +O-P +Q-R +S-S +T-U +V-X +Y-a +b-b +c-c +d-d +e-e +f-f +g-h +i-i +j-l +m-m +n-n +o-o +p-p +q-r +s-s +t-t +u-v +w-w +x-x +y-z +

Daniel Veillard

diff --git a/doc/APIchunk16.html b/doc/APIchunk16.html new file mode 100644 index 0000000..92d3845 --- /dev/null +++ b/doc/APIchunk16.html @@ -0,0 +1,375 @@ + + +API Alphabetic Index g-h for libxml2
Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
Made with Libxml2 Logo

The XML C parser and toolkit of Gnome

API Alphabetic Index g-h for libxml2

Developer Menu
API Indexes
Related links

A-B +C-C +D-E +F-I +J-N +O-P +Q-R +S-S +T-U +V-X +Y-a +b-b +c-c +d-d +e-e +f-f +g-h +i-i +j-l +m-m +n-n +o-o +p-p +q-r +s-s +t-t +u-v +w-w +x-x +y-z +

Letter g:

gDay
xmlSchemaGetCanonValue
+
gMonth
xmlSchemaGetCanonValue
+
gMonthDay
xmlSchemaGetCanonValue
+
gYear
xmlSchemaGetCanonValue
+
gYearMonth
xmlSchemaGetCanonValue
+
garanteed
xmlUTF8Strsize
+
garbage
xmlGcMemGet
+xmlGcMemSetup
+
gcc
XML_CAST_FPTR
+
gcc4
XML_CAST_FPTR
+
genChRanges
xmlIsBaseCharQ
+xmlIsBaseChar_ch
+xmlIsBlankQ
+xmlIsBlank_ch
+xmlIsCharQ
+xmlIsChar_ch
+xmlIsCombiningQ
+xmlIsDigitQ
+xmlIsDigit_ch
+xmlIsExtenderQ
+xmlIsExtender_ch
+xmlIsIdeographicQ
+xmlIsPubidCharQ
+xmlIsPubidChar_ch
+
general
XML_SUBSTITUTE_BOTH
+XML_SUBSTITUTE_REF
+xmlCharEncFirstLine
+xmlCharEncInFunc
+xmlCharEncOutFunc
+xmlParseCtxtExternalEntity
+xmlParseEntityRef
+xmlParseExtParsedEnt
+xmlParseExternalEntity
+
generally
xmlSAXDefaultVersion
+
generate
xmlDocDumpFormatMemoryEnc
+xmlDocDumpMemoryEnc
+xmlHashAddEntry
+xmlHashAddEntry2
+xmlHashAddEntry3
+xmlLoadExternalEntity
+xmlParseExternalID
+
generated
xmlDocDumpFormatMemoryEnc
+xmlDocDumpMemoryEnc
+xmlIsBaseCharQ
+xmlIsBaseChar_ch
+xmlIsBlankQ
+xmlIsBlank_ch
+xmlIsCharQ
+xmlIsChar_ch
+xmlIsCombiningQ
+xmlIsDigitQ
+xmlIsDigit_ch
+xmlIsExtenderQ
+xmlIsExtender_ch
+xmlIsIdeographicQ
+xmlIsPubidCharQ
+xmlIsPubidChar_ch
+xmlKeepBlanksDefault
+xmlSearchNs
+xmlShellPrintXPathResult
+xmlTextReaderIsDefault
+
generates
xmlRegexpExec
+
generating
xmlDocDumpFormatMemoryEnc
+xmlDocDumpMemoryEnc
+xmlExpExpDerive
+xmlKeepBlanksDefault
+xmlRegExecErrInfo
+
generic
initGenericErrorDefaultFunc
+xmlShellCmd
+xmlShellReadlineFunc
+
get
_xmlSAXHandler
+_xmlSAXHandlerV1
+fatalErrorSAXFunc
+xmlBufUse
+xmlBufferLength
+xmlCatalogGetDefaults
+xmlGetCompressMode
+xmlGetDocCompressMode
+xmlGetNoNsProp
+xmlGetNsProp
+xmlGetProp
+xmlNamespaceParseQName
+xmlNanoFTPInit
+xmlNewPI
+xmlSplitQName
+xmlSplitQName2
+xmlTextReaderCurrentDoc
+xmlTextReaderCurrentNode
+xmlTextReaderGetParserProp
+xmlTextReaderGetRemainder
+xmlValidateNotationDecl
+
gie
xmlBufferDetach
+
gif
xmlBuildRelativeURI
+
give
_xmlParserInput
+_xmlSchema
+xmlValidateDtd
+
gives
xmlParserError
+xmlParserValidityError
+xmlParserValidityWarning
+xmlParserWarning
+
giving
xmlNewDoc
+xmlParseVersionNum
+
global
XML_SCHEMAS_ELEM_GLOBAL
+XML_SCHEMAS_TYPE_GLOBAL
+_xmlNs
+globalNamespace
+xmlCatalogDump
+xmlCleanupParser
+xmlCtxtResetLastError
+xmlEncodeEntitiesReentrant
+xmlEncodeSpecialChars
+xmlGetGlobalState
+xmlGetLastError
+xmlInitializeGlobalState
+xmlResetLastError
+
globally
xmlSAXDefaultVersion
+
gnu
xmlTextReaderNodeType
+
good
xmlTextReaderGetRemainder
+
grafted
xmlCopyProp
+xmlCopyPropList
+
grammar:
xmlParseBalancedChunkMemory
+xmlParseBalancedChunkMemoryRecover
+xmlParseInNodeContext
+
greater
xmlXPathCompareValues
+xmlXPathFloorFunction
+xmlXPathSubstringFunction
+
greater-than
xmlNewTextChild
+
group
XML_SCHEMAS_ATTRGROUP_HAS_REFS
+XML_SCHEMAS_ATTRGROUP_MARKED
+XML_SCHEMAS_ATTRGROUP_REDEFINED
+XML_SCHEMAS_ELEM_FINAL_ABSENT
+XML_SCHEMAS_ELEM_FINAL_EXTENSION
+XML_SCHEMAS_ELEM_FINAL_RESTRICTION
+XML_SCHEMAS_ELEM_SUBST_GROUP_HEAD
+_xmlSchemaAttributeGroup
+_xmlSchemaElement
+ftpListCallback
+
groups
xmlParseElementChildrenContentDecl
+
grow
xmlValidGetValidElements
+
grows
xmlBufferWriteCHAR
+xmlBufferWriteChar
+xmlBufferWriteQuotedString
+
guarantee
xmlModuleOpen
+xmlModuleSymbol
+
guaranteed
xmlModuleOpen
+xmlModuleSymbol
+
guess
xmlCleanupParser
+xmlCleanupThreads
+

Letter h:

had
xmlNewGlobalNs
+
hand
xmlLoadACatalog
+
handled
xmlLoadACatalog
+xmlParseAttValue
+xmlParseAttribute
+xmlParseDefaultDecl
+xmlParseElementContentDecl
+xmlParsePEReference
+xmlParserHandlePEReference
+
handlers
xlinkSetDefaultHandler
+xmlCleanupCharEncodingHandlers
+xmlRegisterDefaultInputCallbacks
+xmlRegisterDefaultOutputCallbacks
+xmlTextReaderSetErrorHandler
+xmlTextReaderSetStructuredErrorHandler
+
handles
xmlSaveFileTo
+xmlSaveFormatFileTo
+xmlStructuredErrorFunc
+xmlUnsetProp
+xmlXPathStringEvalNumber
+
handling
XML_SCHEMAS_FACET_UNKNOWN
+attribute
+attributeSAXFunc
+htmlHandleOmittedElem
+xmlChildElementCount
+xmlFirstElementChild
+xmlHandleEntity
+xmlLastElementChild
+xmlNamespaceParseNCName
+xmlNamespaceParseNSDef
+xmlNamespaceParseQName
+xmlNextElementSibling
+xmlNodeListGetRawString
+xmlOutputBufferCreateFilenameDefault
+xmlParserHandlePEReference
+xmlParserHandleReference
+xmlParserInputBufferCreateFilenameDefault
+xmlPreviousElementSibling
+xmlRegNewExecCtxt
+xmlRegisterInputCallbacks
+xmlRegisterOutputCallbacks
+xmlSetGenericErrorFunc
+xmlSetStructuredErrorFunc
+xmlXPathPopBoolean
+xmlXPathPopExternal
+xmlXPathPopNodeSet
+xmlXPathPopNumber
+xmlXPathPopString
+
hard
xmlCleanupParser
+xmlCleanupThreads
+
has-same-nodes
xmlXPathHasSameNodes
+
haystack
xmlStrcasestr
+xmlStrstr
+xmlStrsub
+
head
XML_SCHEMAS_ELEM_SUBST_GROUP_HEAD
+_xmlParserCtxt
+
header
xmlNanoHTTPAuthHeader
+xmlNanoHTTPContentLength
+xmlNanoHTTPRedir
+xmlParseTextDecl
+xmlParseXMLDecl
+
headers
xmlNanoHTTPEncoding
+xmlNanoHTTPMethod
+xmlNanoHTTPMethodRedir
+xmlNanoHTTPMimeType
+
heading
xmlCharEncodingOutputFunc
+
held
xmlOutputBufferGetContent
+xmlOutputBufferGetSize
+
helper
XML_SCHEMAS_ELEM_CIRCULAR
+
here
_xmlXPathContext
+htmlNodeStatus
+xmlParseAttValue
+xmlParseElementContentDecl
+xmlParseNamespace
+xmlXPathNextAncestorOrSelf
+
heuristic
xmlKeepBlanksDefault
+xmlURIEscape
+
heuristic:
xmlIsRef
+
hex
xmlURIEscapeStr
+
hierarchy
xmlParseElementChildrenContentDecl
+xmlSchemaGetBuiltInListSimpleTypeItemType
+
highly
htmlParseElement
+xmlParseElement
+
hold
xmlDOMWrapReconcileNamespaces
+xmlNewTextWriterDoc
+xmlNewTextWriterPushParser
+xmlReconciliateNs
+
holding
_xmlAttribute
+_xmlID
+_xmlRef
+xmlAddID
+xmlAddRef
+xmlNewNsProp
+xmlNewNsPropEatName
+xmlNewProp
+
holds
xmlBufferWriteQuotedString
+
hooks
LIBXML_THREAD_ALLOC_ENABLED
+
host
xmlNanoFTPProxy
+xmlNanoFTPScanProxy
+xmlNanoFTPUpdateURL
+xmlNanoHTTPScanProxy
+
hosting
xmlXPathFuncLookupFunc
+xmlXPathNodeSetAddNs
+xmlXPathVariableLookupFunc
+
hostname
xmlNanoFTPInit
+xmlNanoFTPUpdateURL
+
hour
ftpListCallback
+
how
_xmlError
+xmlDictGetUsage
+
href
XINCLUDE_HREF
+
href==NULL
xmlNewNs
+
hrefs
xlinkExtendedLinkFunk
+xlinkExtendedLinkSetFunk
+
html
xmlBuildRelativeURI
+xmlTextReaderNodeType
+
htmlAttrAllowed
htmlNodeStatus
+
htmlElemDescPtr
htmlTagLookup
+
htmlElementAllowedHere
htmlNodeStatus
+
htmlElementStatusHere
htmlNodeStatus
+
htmlEntityDescPtr
htmlEntityLookup
+htmlEntityValueLookup
+htmlParseEntityRef
+
htmlNodePtr
htmlNodeStatus
+
htmlParserCtxtPtr
htmlNewParserCtxt
+
htmlParserOption
htmlCtxtReadDoc
+htmlCtxtReadFd
+htmlCtxtReadFile
+htmlCtxtReadIO
+htmlCtxtReadMemory
+htmlCtxtUseOptions
+htmlReadDoc
+htmlReadFd
+htmlReadFile
+htmlReadIO
+htmlReadMemory
+
htmlStartClose
htmlAutoCloseTag
+htmlIsAutoClosed
+
htmlStartCloseIndex
htmlInitAutoClose
+
http:
XINCLUDE_NS
+XINCLUDE_OLD_NS
+getSystemId
+xmlBuildRelativeURI
+xmlC14NDocDumpMemory
+xmlC14NDocSave
+xmlC14NDocSaveTo
+xmlC14NExecute
+xmlCheckLanguageID
+xmlGetCharEncodingName
+xmlNanoHTTPScanProxy
+xmlParserHandlePEReference
+xmlParserHandleReference
+xmlSAX2GetSystemId
+xmlSchemaGetPredefinedType
+xmlTextReaderNodeType
+xmlXPathIsInf
+xmlXPathIsNaN
+
human-readable
_xmlError
+

A-B +C-C +D-E +F-I +J-N +O-P +Q-R +S-S +T-U +V-X +Y-a +b-b +c-c +d-d +e-e +f-f +g-h +i-i +j-l +m-m +n-n +o-o +p-p +q-r +s-s +t-t +u-v +w-w +x-x +y-z +

Daniel Veillard

diff --git a/doc/APIchunk17.html b/doc/APIchunk17.html new file mode 100644 index 0000000..070f8ce --- /dev/null +++ b/doc/APIchunk17.html @@ -0,0 +1,580 @@ + + +API Alphabetic Index i-i for libxml2
Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
Made with Libxml2 Logo

The XML C parser and toolkit of Gnome

API Alphabetic Index i-i for libxml2

Developer Menu
API Indexes
Related links

A-B +C-C +D-E +F-I +J-N +O-P +Q-R +S-S +T-U +V-X +Y-a +b-b +c-c +d-d +e-e +f-f +g-h +i-i +j-l +m-m +n-n +o-o +p-p +q-r +s-s +t-t +u-v +w-w +x-x +y-z +

Letter i:

i-xxx
xmlCheckLanguageID
+
iconv
LIBXML_ICONV_ENABLED
+LIBXML_ISO8859X_ENABLED
+
icu
LIBXML_ICU_ENABLED
+
identify
xmlParseAttributeType
+
identitier
XML_MAX_NAME_LENGTH
+
identity-constraint
_xmlSchema
+_xmlSchemaElement
+
ignorable
ignorableWhitespace
+ignorableWhitespaceSAXFunc
+xmlIsBlankNode
+xmlKeepBlanksDefault
+xmlSAX2IgnorableWhitespace
+
ignorableWhitespace
xmlKeepBlanksDefault
+
ignored
xmlC14NDocDumpMemory
+xmlC14NDocSave
+xmlC14NDocSaveTo
+xmlC14NExecute
+
ignoring
xmlURIEscapeStr
+
image
xmlC14NDocDumpMemory
+xmlC14NDocSave
+xmlC14NDocSaveTo
+xmlC14NExecute
+
imbrication
xmlBufNodeDump
+xmlNodeDump
+xmlNodeDumpOutput
+
img
xmlBuildRelativeURI
+
immediately
xmlCheckVersion
+xmlOutputBufferWrite
+xmlOutputBufferWriteEscape
+xmlOutputBufferWriteString
+xmlXPathStringFunction
+
immutable
xmlBufferCreateStatic
+xmlBufferDetach
+xmlParserInputBufferCreateStatic
+
implementation
xmlFreeFunc
+xmlMallocFunc
+xmlReallocFunc
+xmlStrdupFunc
+xmlTextReaderGetRemainder
+xmlXPathRegisterFunc
+xmlXPathRegisterFuncNS
+
implementation-defined
xmlXPathNextNamespace
+
implemented
HTML_COMMENT_NODE
+HTML_ENTITY_REF_NODE
+HTML_PI_NODE
+HTML_PRESERVE_NODE
+HTML_TEXT_NODE
+xmlModuleOpen
+xmlSaveDoc
+xmlSaveTree
+xmlSchemaCopyValue
+xmlTextReaderNextSibling
+
implicitly
htmlAutoCloseTag
+htmlIsAutoClosed
+
implied
_htmlElemDesc
+
impossible
xmlURIEscape
+
improves
xmlGetBufferAllocationScheme
+xmlSetBufferAllocationScheme
+
in-
xmlParserInputBufferGrow
+
in-extenso
xmlMemDisplay
+xmlMemoryDump
+
in-memory
_xmlDoc
+_xmlParserCtxt
+docbParseDoc
+docbSAXParseDoc
+htmlCreateMemoryParserCtxt
+htmlCtxtReadDoc
+htmlCtxtReadMemory
+htmlParseDoc
+htmlReadDoc
+htmlReadMemory
+htmlSAXParseDoc
+xmlCreateDocParserCtxt
+xmlCreateMemoryParserCtxt
+xmlCtxtReadDoc
+xmlCtxtReadMemory
+xmlParseDoc
+xmlParseMemory
+xmlReadDoc
+xmlReadMemory
+xmlReaderForDoc
+xmlReaderForMemory
+xmlReaderNewDoc
+xmlReaderNewMemory
+xmlRecoverDoc
+xmlRecoverMemory
+xmlSAXParseDoc
+xmlSAXParseMemory
+xmlSAXParseMemoryWithData
+xmlSAXUserParseMemory
+
incase
xmlNanoFTPClose
+xmlNanoFTPCloseConnection
+xmlNanoFTPCwd
+xmlNanoFTPDele
+xmlNanoFTPGet
+xmlNanoFTPGetConnection
+xmlNanoFTPList
+xmlNanoHTTPFetch
+xmlNanoHTTPSave
+
incl
_xmlSchemaType
+
include
XINCLUDE_NODE
+xmlC14NDocDumpMemory
+xmlC14NDocSave
+xmlC14NDocSaveTo
+xmlC14NExecute
+xmlCheckVersion
+xmlListMerge
+
include:
xmlBuildRelativeURI
+
included
xmlC14NDocDumpMemory
+xmlC14NDocSave
+xmlC14NDocSaveTo
+xmlC14NIsVisibleCallback
+xmlDocDumpMemory
+xmlFreeDoc
+xmlNanoHTTPContentLength
+xmlParseNotationType
+
includes
_xmlSchema
+xmlCleanupInputCallbacks
+xmlCleanupOutputCallbacks
+xmlPopInputCallbacks
+xmlXIncludeProcessFlags
+xmlXIncludeProcessFlagsData
+xmlXIncludeProcessTreeFlags
+xmlXIncludeProcessTreeFlagsData
+xmlXIncludeSetFlags
+
including
XML_SCHEMAS_INCLUDING_CONVERT_NS
+attribute
+attributeSAXFunc
+ftpListCallback
+startElement
+startElementSAXFunc
+xmlSAX2StartElement
+xmlTextReaderReadInnerXml
+xmlTextReaderReadOuterXml
+xmlXPathStringFunction
+
inclusive
xmlC14NDocDumpMemory
+xmlC14NDocSave
+xmlC14NDocSaveTo
+xmlC14NExecute
+
increase
xmlParserInputGrow
+
increment
xmlAutomataNewCountedTrans
+
incremental
xmlValidateDocumentFinal
+
indent
xmlTextWriterSetIndent
+
indentation
xmlDebugDumpAttr
+xmlDebugDumpAttrList
+xmlDebugDumpNode
+xmlDebugDumpNodeList
+xmlDebugDumpOneNode
+xmlKeepBlanksDefault
+xmlTextWriterSetIndent
+xmlTextWriterSetIndentString
+xmlXPathDebugDumpCompExpr
+xmlXPathDebugDumpObject
+
indentation?
xmlTextWriterSetIndent
+
indented
xmlSaveFormatFile
+
indenting
xmlBufNodeDump
+xmlDocDumpFormatMemory
+xmlDocDumpFormatMemoryEnc
+xmlDocFormatDump
+xmlNodeDump
+xmlNodeDumpOutput
+xmlSaveFormatFile
+xmlSaveFormatFileEnc
+
independently
xmlGetProp
+xmlParseAttribute
+
index
index
+inputPush
+namePush
+nodePush
+xmlByteConsumed
+xmlParserFindNodeInfoIndex
+xmlPushInput
+xmlStrsub
+xmlTextReaderByteConsumed
+xmlTextReaderGetAttributeNo
+xmlTextReaderMoveToAttributeNo
+xmlXPathNodeSetRemove
+xmlXPtrLocationSetRemove
+xmlXPtrNewRange
+
indicate
LIBXML_ATTR_ALLOC_SIZE
+LIBXML_ATTR_FORMAT
+xmlParseExternalID
+xmlParserInputGrow
+xmlRegExecPushString
+xmlRegExecPushString2
+xmlURIUnescapeString
+
indicated
xmlNanoHTTPFetch
+xmlNanoHTTPMethod
+xmlNanoHTTPMethodRedir
+xmlNanoHTTPOpen
+xmlNanoHTTPOpenRedir
+xmlStreamPush
+xmlStreamPushAttr
+xmlStreamPushNode
+
indicates
XML_SCHEMAS_TYPE_FACETSNEEDVALUE
+XML_SCHEMAS_TYPE_INTERNAL_INVALID
+XML_SCHEMAS_TYPE_INTERNAL_RESOLVED
+XML_SCHEMAS_TYPE_NORMVALUENEEDED
+xmlHasNsProp
+xmlNanoFTPRead
+xmlNanoFTPScanProxy
+xmlNanoFTPUpdateURL
+xmlNanoHTTPContentLength
+xmlNanoHTTPRead
+xmlNanoHTTPScanProxy
+
indicating
xmlParseCharData
+xmlParserFindNodeInfoIndex
+xmlShellCmd
+xmlTextReaderErrorFunc
+xmlTextReaderNormalization
+xmlXPathAxisFunc
+
indication
xmlNanoFTPRead
+xmlNanoHTTPRead
+
indicative
xmlParserInputBufferGrow
+xmlParserInputBufferRead
+xmlParserInputGrow
+xmlParserInputRead
+
indicator
docbParseChunk
+htmlParseChunk
+xmlParseChunk
+
indirect
xmlParseAttribute
+
indirectly
xmlParseAttribute
+xmlParsePEReference
+xmlParserHandlePEReference
+
infinite
xmlExpExpDerive
+xmlExpNewRange
+xmlExpParse
+
infinity
xmlXPathCeilingFunction
+xmlXPathFloorFunction
+xmlXPathStringFunction
+
info
_xmlParserCtxt
+xmlCharEncodingOutputFunc
+xmlClearNodeInfoSeq
+xmlCopyDoc
+xmlInitNodeInfoSeq
+xmlMallocAtomicLoc
+xmlMallocLoc
+xmlMemMalloc
+xmlMemRealloc
+xmlMemStrdupLoc
+xmlMemoryStrdup
+xmlNanoFTPList
+xmlParserAddNodeInfo
+xmlParserFindNodeInfo
+xmlParserFindNodeInfoIndex
+xmlReallocLoc
+
information
LIBXML_VERSION_EXTRA
+_xmlError
+xmlDebugDumpAttr
+xmlDebugDumpAttrList
+xmlDebugDumpDTD
+xmlDebugDumpDocument
+xmlDebugDumpDocumentHead
+xmlDebugDumpEntities
+xmlDebugDumpNode
+xmlDebugDumpNodeList
+xmlDebugDumpOneNode
+xmlNanoFTPUpdateURL
+xmlNanoHTTPFetch
+xmlNanoHTTPMethod
+xmlNanoHTTPMethodRedir
+xmlNanoHTTPOpen
+xmlNanoHTTPOpenRedir
+xmlNewTextReader
+xmlRelaxNGGetParserErrors
+xmlSchemaGetParserErrors
+xmlSchemaValidateSetFilename
+xmlSchemaValidateSetLocator
+xmlSchemaValidateStream
+xmlSchemaValidityLocatorFunc
+xmlTextReaderByteConsumed
+xmlXPathOrderDocElems
+
informations
_xmlAttr
+_xmlDoc
+_xmlNode
+_xmlParserCtxt
+endElementNsSAX2Func
+startElementNsSAX2Func
+xmlDebugDumpString
+xmlErrMemory
+xmlNanoFTPCleanup
+xmlNanoFTPInit
+xmlNanoFTPProxy
+xmlNanoFTPScanProxy
+xmlNanoHTTPInit
+xmlNanoHTTPScanProxy
+xmlParserPrintFileInfo
+xmlRegExecErrInfo
+xmlRegExecNextValues
+xmlRelaxNGGetValidErrors
+xmlRelaxNGSetValidErrors
+xmlRelaxParserSetFlag
+xmlSAX2EndElementNs
+xmlSAX2StartElementNs
+xmlSchemaGetValidErrors
+xmlSchemaSetValidErrors
+xmlSchemaValidityLocatorFunc
+xmlShellDir
+xmlXIncludeProcessNode
+
informative
_xmlError
+
infos
_xmlParserCtxt
+
inherited
_xmlParserCtxt
+_xmlSchemaType
+xmlEntityReferenceFunc
+xmlNodeGetSpacePreserve
+xmlXPathNextAttribute
+
inheriting
xmlDictCreateSub
+
inherits
xmlNewChild
+xmlNewTextChild
+
initial
_xmlDoc
+_xmlSchemaAttribute
+xmlAutomataGetInitState
+xmlBufferCreateSize
+xmlInitNodeInfoSeq
+xmlMemRealloc
+xmlMemStrdupLoc
+xmlMemoryStrdup
+xmlReallocLoc
+xmlShell
+xmlXPathNodeSetAdd
+xmlXPathNodeSetAddNs
+xmlXPathNodeSetAddUnique
+xmlXPathNodeSetCreate
+xmlXPathNodeSetDel
+xmlXPathNodeSetRemove
+xmlXPtrLocationSetAdd
+xmlXPtrLocationSetCreate
+xmlXPtrLocationSetDel
+xmlXPtrLocationSetRemove
+
initialisation
xmlInitGlobals
+
initialization
xmlInitializeCatalog
+xmlInitializeDict
+xmlLoadCatalog
+xmlLoadCatalogs
+xmlSAXDefaultVersion
+
initialize
XML_COMPLETE_ATTRS
+XML_DETECT_IDS
+XML_SKIP_IDS
+htmlNewDocNoDtD
+htmlNewParserCtxt
+xmlCharEncodingOutputFunc
+xmlCreateEntitiesTable
+xmlCreateEnumeration
+xmlInitThreads
+xmlInitializeGlobalState
+xmlNanoFTPNewCtxt
+xmlNanoFTPScanProxy
+xmlNanoHTTPScanProxy
+xmlNewParserCtxt
+xmlXPathNewNodeSet
+xmlXPathNewNodeSetList
+xmlXPathNewValueTree
+xmlXPtrNewLocationSetNodeSet
+xmlXPtrNewLocationSetNodes
+
initialized
XML_SAX2_MAGIC
+
initializes
xmlDOMWrapNewCtxt
+
initiate
xmlCharEncOutFunc
+
initiated
xmlXPtrNewContext
+
inline
_htmlElemDesc
+
inlined
resolveEntity
+resolveEntitySAXFunc
+xmlSAX2ResolveEntity
+
inputs
_xmlParserCtxt
+
insensitive
xmlParseCharEncoding
+
insert
xmlValidGetValidElements
+
inserted
xmlAddNextSibling
+xmlAddPrevSibling
+xmlAddSibling
+xmlReplaceNode
+xmlValidGetValidElements
+
insertion
htmlHandleOmittedElem
+xmlValidGetValidElements
+
inspect
xmlXPathDebugDumpObject
+
instace
xmlSchematronValidateDoc
+
installed
xmlDictSize
+xmlHashSize
+
instances
_xmlParserInput
+xmlParseDefaultDecl
+xmlRelaxNGParse
+xmlSchemaParse
+xmlSchematronParse
+
instead
XML_SCHEMAS_ELEM_TOPLEVEL
+xmlAddChild
+xmlAddNextSibling
+xmlAddPrevSibling
+xmlBufShrink
+xmlCopyElementContent
+xmlDocSetRootElement
+xmlFreeElementContent
+xmlIsBaseChar
+xmlIsBlank
+xmlIsChar
+xmlIsCombining
+xmlIsDigit
+xmlIsExtender
+xmlIsIdeographic
+xmlIsPubidChar
+xmlKeepBlanksDefault
+xmlNodeDump
+xmlRegisterHTTPPostCallbacks
+xmlSaveDoc
+xmlSaveTree
+xmlSubstituteEntitiesDefault
+xmlXPtrEvalRangePredicate
+
instruction
HTML_PI_NODE
+processingInstruction
+processingInstructionSAXFunc
+xmlNewDocPI
+xmlNewPI
+xmlSAX2ProcessingInstruction
+
insufficient
xmlCanonicPath
+xmlPathToURI
+
intact
xmlParseURIRaw
+
integer
xmlGetThreadId
+xmlStrcasecmp
+xmlStrcmp
+xmlStrncasecmp
+xmlStrncmp
+xmlXPathCeilingFunction
+xmlXPathFloorFunction
+xmlXPathRoundFunction
+xmlXPathStringFunction
+
intended
_xmlDOMWrapCtxt
+xmlSchemaNewStringValue
+
intensively
xmlDOMWrapAdoptNode
+xmlDOMWrapReconcileNamespaces
+xmlDOMWrapRemoveNode
+
interact
xmlParseExternalID
+
interface
LIBXML_PATTERN_ENABLED
+LIBXML_READER_ENABLED
+LIBXML_SAX1_ENABLED
+LIBXML_WRITER_ENABLED
+_xmlParserCtxt
+docbParseDocument
+htmlParseDocument
+xmlParseDocument
+xmlParseReference
+xmlTextReaderCurrentDoc
+xmlTextReaderCurrentNode
+
interfaces
LIBXML_AUTOMATA_ENABLED
+LIBXML_EXPR_ENABLED
+LIBXML_MODULES_ENABLED
+LIBXML_PUSH_ENABLED
+LIBXML_REGEXP_ENABLED
+LIBXML_SCHEMAS_ENABLED
+LIBXML_SCHEMATRON_ENABLED
+LIBXML_UNICODE_ENABLED
+xmlNamespaceParseNCName
+xmlNamespaceParseNSDef
+xmlNamespaceParseQName
+
intern
xmlTextReaderConstString
+
internally
xmlBufferWriteQuotedString
+xmlExpNewCtxt
+xmlRelaxNGNewDocParserCtxt
+xmlRemoveID
+xmlRemoveRef
+xmlSchemaValidateFile
+xmlXPathContextSetCache
+
interned
xmlPatterncompile
+xmlTextReaderConstString
+
interning
xmlCopyNodeList
+xmlNewPI
+
interoperability
xmlParseElementChildrenContentDecl
+
interoperable
xmlCheckLanguageID
+
interprestation
xmlXPathFunction
+
interpreter
xmlXPathAxisFunc
+
intersection
xmlXPathIntersection
+
introduced
LIBXML2_NEW_BUFFER
+
ints
xmlGetLineNo
+
invalid
XML_SCHEMAS_TYPE_INTERNAL_INVALID
+xmlParseSDDecl
+xmlReconciliateNs
+xmlValidateDtdFinal
+
invited
xmlValidGetValidElements
+
isinf
xmlXPathIsInf
+
isn
xmlRegisterCharEncodingHandler
+
isnan
xmlXPathIsNaN
+
issue
xmlEncodeEntities
+
issued
xlinkIsLink
+
issues
xmlModuleOpen
+xmlModuleSymbol
+
item
XML_SCHEMAS_TYPE_BLOCK_DEFAULT
+XML_SCHEMAS_TYPE_BUILTIN_PRIMITIVE
+XML_SCHEMAS_TYPE_MARKED
+_xmlXPathContext
+xmlHashRemoveEntry
+xmlHashRemoveEntry2
+xmlHashRemoveEntry3
+xmlHashUpdateEntry
+xmlHashUpdateEntry2
+xmlHashUpdateEntry3
+xmlNanoFTPDele
+xmlSchemaGetBuiltInListSimpleTypeItemType
+xmlXPathNodeSetItem
+
items
valuePush
+xmlHashCopy
+xmlHashFree
+xmlHashScan
+xmlHashScan3
+xmlHashScanFull
+xmlHashScanFull3
+xmlSchemaValidateListSimpleTypeFacet
+
itself
_xmlDoc
+xlinkIsLink
+xmlCharEncFirstLine
+xmlCleanupParser
+xmlParsePEReference
+xmlParserHandlePEReference
+xmlXPathNextSelf
+

A-B +C-C +D-E +F-I +J-N +O-P +Q-R +S-S +T-U +V-X +Y-a +b-b +c-c +d-d +e-e +f-f +g-h +i-i +j-l +m-m +n-n +o-o +p-p +q-r +s-s +t-t +u-v +w-w +x-x +y-z +

Daniel Veillard

diff --git a/doc/APIchunk18.html b/doc/APIchunk18.html new file mode 100644 index 0000000..90249a1 --- /dev/null +++ b/doc/APIchunk18.html @@ -0,0 +1,457 @@ + + +API Alphabetic Index j-l for libxml2
Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
Made with Libxml2 Logo

The XML C parser and toolkit of Gnome

API Alphabetic Index j-l for libxml2

Developer Menu
API Indexes
Related links

A-B +C-C +D-E +F-I +J-N +O-P +Q-R +S-S +T-U +V-X +Y-a +b-b +c-c +d-d +e-e +f-f +g-h +i-i +j-l +m-m +n-n +o-o +p-p +q-r +s-s +t-t +u-v +w-w +x-x +y-z +

Letter j:

just
_xmlDOMWrapCtxt
+htmlSetMetaEncoding
+inputPop
+namePop
+nodePop
+valuePop
+xmlCleanupParser
+xmlCleanupThreads
+xmlCopyEnumeration
+xmlCreateEntitiesTable
+xmlCreateEnumeration
+xmlDOMWrapAdoptNode
+xmlHandleEntity
+xmlNanoFTPInit
+xmlNanoHTTPInit
+xmlSnprintfElementContent
+xmlTextReaderByteConsumed
+xmlXPathNewContext
+xmlXPathNewParserContext
+xmlXPathNextSelf
+xmlXPtrNewContext
+

Letter k:

keep
xmlExpNewOr
+xmlExpNewRange
+xmlExpNewSeq
+xmlGetBufferAllocationScheme
+xmlParseURIRaw
+xmlParserInputGrow
+xmlSubstituteEntitiesDefault
+xmlTextReaderPreserve
+xmlTextReaderPreservePattern
+xmlXPathNextNamespace
+
keeps
xmlGetBufferAllocationScheme
+xmlSetBufferAllocationScheme
+
kept
_xmlParserCtxt
+_xmlXPathContext
+htmlAutoCloseTag
+htmlIsAutoClosed
+htmlParseElement
+xmlKeepBlanksDefault
+xmlXPathOrderDocElems
+
keyword
xmlParseDefaultDecl
+
kill
xmlCheckVersion
+
kind
_xmlSchemaAttributeGroup
+_xmlSchemaElement
+_xmlSchemaFacet
+_xmlSchemaNotation
+_xmlSchemaType
+_xmlSchemaWildcard
+
know
BAD_CAST
+xmlDOMWrapCloneNode
+
knowledge
htmlAttrAllowed
+
known
_xmlParserInput
+xmlAllocParserInputBuffer
+xmlCreateIOParserCtxt
+xmlIOParseDTD
+xmlNewIOInputStream
+xmlOutputBufferCreateIO
+xmlParseCharEncoding
+xmlParserInputBufferCreateFd
+xmlParserInputBufferCreateFile
+xmlParserInputBufferCreateFilename
+xmlParserInputBufferCreateIO
+xmlParserInputBufferCreateMem
+xmlParserInputBufferCreateStatic
+

Letter l:

label
_xmlParserCtxt
+
labeled
xmlParseCtxtExternalEntity
+xmlParseExtParsedEnt
+xmlParseExternalEntity
+
lack
xmlCharEncodingInputFunc
+xmlCharEncodingOutputFunc
+xmlMallocAtomicLoc
+xmlMallocLoc
+xmlMemMalloc
+xmlMemRealloc
+xmlReallocLoc
+
lang
xmlNodeGetLang
+xmlXPathLangFunction
+
langtag
xmlCheckLanguageID
+
language
xmlCheckLanguageID
+xmlNodeGetLang
+xmlNodeSetLang
+xmlXPathLangFunction
+
languages
xmlExpExpDerive
+xmlExpGetStart
+xmlExpSubsume
+
large
_xmlParserCtxt
+_xmlParserInput
+xmlGetBufferAllocationScheme
+
largest
xmlXPathFloorFunction
+
later
xmlHashAddEntry
+xmlHashAddEntry2
+xmlHashAddEntry3
+xmlHashUpdateEntry
+xmlHashUpdateEntry2
+xmlHashUpdateEntry3
+xmlKeepBlanksDefault
+xmlNewEntity
+xmlParseAttValue
+
latest
xmlNanoHTTPReturnCode
+
layer
xmlChildrenNode
+xmlInitMemory
+xmlNanoFTPCleanup
+xmlNanoFTPInit
+xmlNanoHTTPCleanup
+xmlNanoHTTPInit
+xmlRootNode
+xmlSaveFileTo
+xmlSaveFormatFileTo
+xmlSchemaSAXPlug
+xmlSchemaSAXUnplug
+
leading
xmlParseAttValue
+xmlParseElementChildrenContentDecl
+xmlParseElementMixedContentDecl
+xmlParseNotationType
+xmlValidCtxtNormalizeAttributeValue
+xmlValidNormalizeAttributeValue
+xmlXPathLeading
+xmlXPathLeadingSorted
+xmlXPathNodeLeading
+xmlXPathNodeLeadingSorted
+xmlXPathNormalizeFunction
+xmlXPathStringFunction
+
leak
xmlCleanupParser
+xmlCleanupThreads
+
least
xmlDetectCharEncoding
+xmlXPathStringFunction
+
led
xmlInitializeDict
+
left
xmlExpNewOr
+xmlExpNewSeq
+xmlMemDisplayLast
+xmlTextReaderGetRemainder
+
legacy
htmlNodeStatus
+
len
xmlBufferAdd
+xmlBufferAddHead
+xmlCharStrndup
+xmlDecodeEntities
+xmlExpStringDerive
+xmlGetFeaturesList
+xmlGetUTF8Char
+xmlNewDocTextLen
+xmlNewTextLen
+xmlSplitQName3
+xmlStrncat
+xmlStrncatNew
+xmlStrndup
+xmlUTF8Strndup
+xmlUTF8Strsize
+
length-1
xmlXPathNodeSetItem
+
less
xmlExpExpDerive
+xmlSaveToFilename
+xmlXPathCeilingFunction
+xmlXPathCompareValues
+xmlXPathSubstringFunction
+
less-than
xmlNewTextChild
+
level
XML_SCHEMAS_ELEM_TOPLEVEL
+_xmlDoc
+xmlBufNodeDump
+xmlC14NDocSave
+xmlCatalogSetDebug
+xmlCleanupMemory
+xmlDebugDumpAttr
+xmlDebugDumpAttrList
+xmlDebugDumpNode
+xmlDebugDumpNodeList
+xmlDebugDumpOneNode
+xmlNodeDump
+xmlNodeDumpOutput
+xmlParseVersionNum
+xmlShellPwd
+xmlStreamPop
+xmlXPathDebugDumpCompExpr
+xmlXPathDebugDumpObject
+
lexical
xmlParseDefaultDecl
+xmlSchemaGetCanonValue
+xmlSchemaValPredefTypeNode
+xmlSchemaValPredefTypeNodeNoNorm
+xmlSchemaValidateFacet
+xmlSchemaValidateFacetWhtsp
+xmlSchemaValidateLengthFacet
+xmlSchemaValidateLengthFacetWhtsp
+xmlSchemaValidateListSimpleTypeFacet
+xmlSchemaValidatePredefinedType
+xmlValidateNCName
+xmlValidateNMToken
+xmlValidateName
+xmlValidateQName
+
lib
xmlCheckVersion
+
libc
DEBUG_MEMORY
+
libraries
LIBXML_MODULE_EXTENSION
+xmlCleanupParser
+xmlCleanupThreads
+xmlRelaxNGInitTypes
+
library
_xmlError
+_xmlSchema
+xmlCleanupMemory
+xmlCleanupParser
+xmlCleanupThreads
+xmlDictCleanup
+xmlHasFeature
+xmlInitThreads
+xmlInitializeGlobalState
+xmlLockLibrary
+xmlModuleFree
+xmlModuleOpen
+xmlOutputBufferCreateFilename
+xmlParseNamespace
+xmlRelaxNGCleanupTypes
+xmlSAXDefaultVersion
+xmlSchemaCleanupTypes
+xmlSchemaFreeValue
+xmlSchemaGetPredefinedType
+xmlSchemaInitTypes
+xmlUnlockLibrary
+
libs
xmlKeepBlanksDefault
+
libxml
DEBUG_MEMORY
+LIBXML_TEST_VERSION
+_xmlParserCtxt
+xmlC14NDocSave
+xmlGcMemSetup
+xmlMemSetup
+xmlRegisterHTTPPostCallbacks
+xmlSAXParseFileWithData
+xmlSAXParseMemoryWithData
+xmlShellPrintXPathError
+xmlXPathNodeSetFreeNs
+
libxml1
xmlChildrenNode
+xmlRootNode
+
libxml2
xmlCleanupParser
+xmlCleanupThreads
+xmlFreeMutex
+xmlInitThreads
+xmlLockLibrary
+xmlMutexLock
+xmlMutexUnlock
+xmlNewMutex
+xmlRMutexLock
+xmlRMutexUnlock
+xmlUnlockLibrary
+
lifetime
xmlBufferCreateStatic
+xmlExpCtxtNbCons
+
like
IS_CHAR_CH
+IS_DIGIT_CH
+IS_EXTENDER_CH
+IS_LETTER_CH
+LIBXML_ATTR_FORMAT
+LIBXML_DOTTED_VERSION
+LIBXML_TREE_ENABLED
+xmlCharEncOutFunc
+xmlLoadSGMLSuperCatalog
+xmlNanoFTPScanProxy
+xmlNanoHTTPScanProxy
+xmlParseCatalogFile
+xmlShellList
+xmlTextReaderNormalization
+xmlValidityErrorFunc
+xmlValidityWarningFunc
+
likely
xmlGetThreadId
+
limit
XML_MAX_NAME_LENGTH
+_xmlXPathParserContext
+xmlCharEncFirstLine
+xmlDecodeEntities
+xmlDictSetLimit
+xmlPatternMaxDepth
+
limitation
XML_MAX_DICTIONARY_LIMIT
+XML_MAX_NAME_LENGTH
+XML_MAX_TEXT_LENGTH
+xmlGetLineNo
+
limited
_htmlElemDesc
+xmlNodeDump
+
linear
htmlEntityLookup
+htmlEntityValueLookup
+xmlExpExpDerive
+
lines
xmlGetLineNo
+
linked
_xmlSchemaAttributeLink
+_xmlSchemaFacetLink
+_xmlSchemaTypeLink
+
linking
xlinkIsLink
+
links
ftpListCallback
+
listing
xmlNanoFTPList
+xmlShellList
+
lists
XML_COMPLETE_ATTRS
+_xmlXPathContext
+
literal
xmlCurrentChar
+xmlParseAttValue
+xmlParsePubidLiteral
+xmlParserHandlePEReference
+
load
xmlLoadExternalEntity
+xmlNanoHTTPFetch
+xmlNanoHTTPMethod
+xmlNanoHTTPMethodRedir
+xmlNanoHTTPOpen
+xmlNanoHTTPOpenRedir
+xmlNoNetExternalEntityLoader
+xmlParseCtxtExternalEntity
+xmlParseExternalEntity
+xmlShell
+xmlShellLoad
+
loaded
_xmlParserCtxt
+
loader
resolveEntity
+resolveEntitySAXFunc
+xmlLoadCatalog
+xmlLoadCatalogs
+xmlNoNetExternalEntityLoader
+xmlSAX2ResolveEntity
+
loaders
xmlExternalEntityLoader
+
loading
resolveEntity
+resolveEntitySAXFunc
+xmlIsID
+xmlSAX2ResolveEntity
+xmlShellLoad
+
loads
xmlShellLoad
+
loadsubset
XML_COMPLETE_ATTRS
+XML_DETECT_IDS
+XML_SKIP_IDS
+
local-name
xmlXPathLocalNameFunction
+
localname
startElementNsSAX2Func
+xmlSAX2StartElementNs
+xmlStrQEqual
+
location
htmlParseEntityRef
+xmlGetFeature
+xmlNanoHTTPFetch
+xmlNanoHTTPOpen
+xmlNanoHTTPOpenRedir
+xmlRelaxNGNewParserCtxt
+xmlSchemaNewParserCtxt
+xmlSchematronNewParserCtxt
+xmlSetFeature
+xmlUTF8Strloc
+xmlXPtrLocationSetAdd
+
locations
_xmlLocationSet
+
locator
setDocumentLocator
+setDocumentLocatorSAXFunc
+xlinkExtendedLinkFunk
+xlinkExtendedLinkSetFunk
+xmlCanonicPath
+xmlPathToURI
+xmlSAX2SetDocumentLocator
+xmlSchemaValidateSetLocator
+xmlSchemaValidityLocatorFunc
+xmlTextReaderErrorFunc
+xmlTextReaderLocatorBaseURI
+xmlTextReaderLocatorLineNumber
+
locators
xlinkExtendedLinkFunk
+xlinkExtendedLinkSetFunk
+
lock
xmlLockLibrary
+xmlMutexLock
+xmlNewRMutex
+xmlRMutexLock
+xmlUnlockLibrary
+
logging
xmlMallocAtomicLoc
+xmlMallocLoc
+xmlMemMalloc
+xmlMemRealloc
+xmlMemStrdupLoc
+xmlMemoryStrdup
+xmlReallocLoc
+
long
IS_BASECHAR
+IS_COMBINING
+IS_DIGIT
+xmlDetectCharEncoding
+xmlParserFindNodeInfoIndex
+xmlSchemaGetFacetValueAsULong
+
longer
XML_MAX_NAMELEN
+xmlCheckUTF8
+xmlXPathTranslateFunction
+
look-ahead
_xmlParserCtxt
+
lookahead
xmlParserInputGrow
+xmlParserInputRead
+
looked
_xmlNodeSet
+xmlPatternFromRoot
+
looks
xmlGetNoNsProp
+xmlGetNsProp
+xmlGetProp
+xmlHasNsProp
+xmlHasProp
+
lookups
XML_DETECT_IDS
+xmlParseCatalogFile
+
loop
xmlParseBalancedChunkMemory
+xmlParseBalancedChunkMemoryRecover
+xmlParseExternalEntity
+
loops
_xmlParserCtxt
+
lossless
xmlOutputBufferWrite
+xmlOutputBufferWriteEscape
+xmlOutputBufferWriteString
+
lower
xmlExpNewRange
+
lowercase
htmlTagLookup
+xmlIsRef
+

A-B +C-C +D-E +F-I +J-N +O-P +Q-R +S-S +T-U +V-X +Y-a +b-b +c-c +d-d +e-e +f-f +g-h +i-i +j-l +m-m +n-n +o-o +p-p +q-r +s-s +t-t +u-v +w-w +x-x +y-z +

Daniel Veillard

diff --git a/doc/APIchunk19.html b/doc/APIchunk19.html new file mode 100644 index 0000000..23f434e --- /dev/null +++ b/doc/APIchunk19.html @@ -0,0 +1,373 @@ + + +API Alphabetic Index m-m for libxml2
Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
Made with Libxml2 Logo

The XML C parser and toolkit of Gnome

API Alphabetic Index m-m for libxml2

Developer Menu
API Indexes
Related links

A-B +C-C +D-E +F-I +J-N +O-P +Q-R +S-S +T-U +V-X +Y-a +b-b +c-c +d-d +e-e +f-f +g-h +i-i +j-l +m-m +n-n +o-o +p-p +q-r +s-s +t-t +u-v +w-w +x-x +y-z +

Letter m:

machine
xmlCheckFilename
+
macro
INVALID_SOCKET
+SOCKET
+XML_CAST_FPTR
+xmlTextWriterWriteDocType
+xmlTextWriterWriteProcessingInstruction
+
made
LIBXML_ISO8859X_ENABLED
+xmlCharEncOutFunc
+xmlExpParse
+xmlNodeListGetRawString
+xmlNodeListGetString
+xmlSetEntityReferenceFunc
+xmlXPtrNewLocationSetNodes
+
main
xmlIsMainThread
+
maintained
xmlRemoveID
+xmlRemoveRef
+xmlSchemaSAXPlug
+
major
xmlDecodeEntities
+
make
xmlCreateEntitiesTable
+xmlNewNode
+xmlSaveClose
+xmlSaveFlush
+
makes
xmlLoadCatalog
+xmlLoadCatalogs
+xmlTextReaderExpand
+
malloc
xmlGcMemGet
+xmlGcMemSetup
+xmlMallocAtomicLoc
+xmlMallocFunc
+xmlMallocLoc
+xmlMemGet
+xmlMemMalloc
+xmlMemSetup
+
mallocAtomicFunc
xmlGcMemGet
+xmlGcMemSetup
+
manage
xmlBufferWriteChar
+xmlBufferWriteQuotedString
+
manages
xmlBufferWriteCHAR
+
mandate
xmlGetThreadId
+
manipulated
xmlNewRMutex
+
manipulating
xmlExpNewCtxt
+xmlLoadSGMLSuperCatalog
+
manipulation
LIBXML_TREE_ENABLED
+
many
_xmlParserInput
+xmlXPathStringFunction
+
map
_xmlDOMWrapCtxt
+
maps
xmlTextReaderLookupNamespace
+xmlTextWriterWriteDocType
+xmlTextWriterWriteProcessingInstruction
+
mark
xmlStrcat
+xmlStrdup
+xmlTextReaderQuoteChar
+
marked
XML_SCHEMAS_ATTRGROUP_MARKED
+XML_SCHEMAS_TYPE_MARKED
+_xmlParserInput
+
marker
xmlDecodeEntities
+xmlStringDecodeEntities
+xmlStringLenDecodeEntities
+
marking
xmlParseCharData
+
marks
xmlParseCharData
+
markup
XML_MAX_NAME_LENGTH
+xmlParseMarkupDecl
+xmlParseSDDecl
+xmlTextReaderReadInnerXml
+xmlTextReaderReadOuterXml
+xmlTextWriterWriteFormatDTD
+xmlTextWriterWriteVFormatDTD
+
markupdecl
xmlParseDocTypeDecl
+xmlParseExternalSubset
+xmlParseMarkupDecl
+
masked
xmlReconciliateNs
+
matched
xmlTextReaderPreservePattern
+
matches
CHECK_ARITY
+xmlFileMatch
+xmlIOFTPMatch
+xmlIOHTTPMatch
+xmlParseCtxtExternalEntity
+xmlParseExtParsedEnt
+xmlParseExternalEntity
+xmlPatternMatch
+xmlRegexpExec
+xmlValidateDtdFinal
+
matching
xmlFileMatch
+xmlFileOpen
+xmlHashScan3
+xmlHashScanFull3
+xmlIOFTPMatch
+xmlIOFTPOpen
+xmlIOHTTPMatch
+xmlIOHTTPOpen
+xmlRegNewExecCtxt
+xmlValidateAttributeDecl
+xmlValidateOneAttribute
+xmlValidateOneNamespace
+xmlXPathIdFunction
+
max
_xmlXPathContext
+_xmlXPathParserContext
+xmlExpParse
+xmlGetCompressMode
+xmlGetDocCompressMode
+xmlOutputBufferCreateFilename
+xmlSetCompressMode
+xmlSetDocCompressMode
+xmlStrncasecmp
+xmlStrncmp
+
maxLength
xmlSchemaValidateLengthFacet
+xmlSchemaValidateLengthFacetWhtsp
+
maximal
xmlAutomataNewCounter
+
maximum
xmlAutomataNewCountTrans
+xmlAutomataNewCountTrans2
+xmlAutomataNewOnceTrans
+xmlAutomataNewOnceTrans2
+xmlCheckUTF8
+xmlExpMaxToken
+xmlExpNewCtxt
+xmlPatternMaxDepth
+xmlXPathContextSetCache
+
maybe
_xmlSchemaElement
+
mean
xmlPatternMinDepth
+
means
xmlExpNewRange
+xmlParseSDDecl
+xmlSetGenericErrorFunc
+xmlSetStructuredErrorFunc
+xmlStreamPush
+xmlStreamPushAttr
+xmlStreamPushNode
+
mechanism
_xmlXPathContext
+xmlStructuredErrorFunc
+xmlXPathRegisterFuncLookup
+xmlXPathRegisterVariableLookup
+
mechanisms
xmlNodeGetBase
+
meet
xmlParseDefaultDecl
+
member
xmlSAXParseFileWithData
+xmlSAXParseMemoryWithData
+xmlTextWriterWriteVFormatAttribute
+xmlTextWriterWriteVFormatAttributeNS
+xmlTextWriterWriteVFormatCDATA
+xmlTextWriterWriteVFormatComment
+xmlTextWriterWriteVFormatDTD
+xmlTextWriterWriteVFormatDTDAttlist
+xmlTextWriterWriteVFormatDTDElement
+xmlTextWriterWriteVFormatDTDInternalEntity
+xmlTextWriterWriteVFormatElement
+xmlTextWriterWriteVFormatElementNS
+xmlTextWriterWriteVFormatPI
+xmlTextWriterWriteVFormatRaw
+xmlTextWriterWriteVFormatString
+xmlXPathStringFunction
+
member-types
_xmlSchemaType
+
memo
getSystemId
+xmlSAX2GetSystemId
+
memorylist
xmlMemDisplay
+xmlMemDisplayLast
+xmlMemoryDump
+
merged
xmlTextMerge
+
merging
xmlAddChild
+xmlAddChildList
+xmlAddNextSibling
+xmlAddPrevSibling
+xmlAddSibling
+
messages
errorSAXFunc
+fatalErrorSAXFunc
+warningSAXFunc
+xmlParserError
+xmlParserValidityError
+xmlParserValidityWarning
+xmlParserWarning
+xmlSetGenericErrorFunc
+xmlSetStructuredErrorFunc
+
method
XML_SCHEMAS_TYPE_DERIVATION_METHOD_EXTENSION
+XML_SCHEMAS_TYPE_DERIVATION_METHOD_RESTRICTION
+_xmlBuffer
+xmlNanoHTTPMethod
+xmlNanoHTTPMethodRedir
+xmlOutputBufferCreateFilenameFunc
+xmlParserInputBufferCreateFilenameFunc
+xmlRegisterHTTPPostCallbacks
+xmlSetBufferAllocationScheme
+xmlTextReaderClose
+xmlTextReaderGetRemainder
+
might
xmlNewTextChild
+
migrate
xmlEncodeEntities
+
min
xmlExpParse
+
minLength
xmlSchemaValidateLengthFacet
+xmlSchemaValidateLengthFacetWhtsp
+
minimal
xmlAutomataNewCounter
+xmlExpParse
+
minimum
xmlAutomataNewCountTrans
+xmlAutomataNewCountTrans2
+xmlAutomataNewOnceTrans
+xmlAutomataNewOnceTrans2
+xmlBufferGrow
+xmlBufferResize
+xmlGetUTF8Char
+xmlPatternMinDepth
+
minus
xmlXPathStringFunction
+
minute
ftpListCallback
+
misc
xmlXPathContextSetCache
+
misleading
xmlCleanupParser
+xmlParsePEReference
+xmlParserHandlePEReference
+
missing
xmlParseSDDecl
+
mixed
XML_SCHEMAS_TYPE_MIXED
+xmlKeepBlanksDefault
+
mixed-content
xmlParseElementMixedContentDecl
+
mmap
xmlParserInputBufferCreateStatic
+
mod
xmlXPathModValues
+
mode
_xmlBuffer
+_xmlParserCtxt
+docbCreatePushParserCtxt
+htmlCreatePushParserCtxt
+xmlC14NDocDumpMemory
+xmlC14NDocSave
+xmlC14NDocSaveTo
+xmlC14NExecute
+xmlCreatePushParserCtxt
+xmlGetCompressMode
+xmlKeepBlanksDefault
+xmlNanoFTPGetConnection
+xmlParseReference
+xmlParserInputBufferGrow
+xmlParserInputBufferPush
+xmlSAXParseDoc
+xmlSAXParseFile
+xmlSAXParseFileWithData
+xmlSAXParseMemory
+xmlSAXParseMemoryWithData
+xmlSetCompressMode
+
model
_xmlSchemaType
+xmlValidBuildContentModel
+
modified
xmlBufferCreateStatic
+xmlNodeAddContent
+xmlNodeAddContentLen
+xmlNodeSetContent
+xmlNodeSetContentLen
+xmlSchemaNewDocParserCtxt
+xmlSchematronNewDocParserCtxt
+
modifies
xmlRelaxNGNewDocParserCtxt
+
modify
xmlShell
+
module
LIBXML_DEBUG_ENABLED
+LIBXML_MODULES_ENABLED
+xmlInputMatchCallback
+xmlModuleClose
+xmlModuleFree
+xmlModuleOpen
+xmlModuleSymbol
+xmlOutputMatchCallback
+xmlStructuredErrorFunc
+
modules
LIBXML_MODULE_EXTENSION
+
moment
xmlDOMWrapReconcileNamespaces
+xmlDOMWrapRemoveNode
+
month
ftpListCallback
+
more
XML_MAX_NAMELEN
+XML_MAX_NAME_LENGTH
+xmlExpGetLanguage
+xmlExpGetStart
+xmlParseAttributeType
+xmlParseElementDecl
+xmlParseElementMixedContentDecl
+xmlParseStartTag
+xmlStrEqual
+xmlTextReaderByteConsumed
+xmlTextReaderNext
+xmlTextReaderNextSibling
+xmlTextReaderRead
+xmlTextReaderReadAttributeValue
+xmlXPathStringFunction
+
moreover
xmlAutomataNewOnceTrans
+xmlAutomataNewOnceTrans2
+
most
xmlC14NExecute
+xmlGetFeaturesList
+
move
xmlDOMWrapAdoptNode
+
moved
xmlTextReaderMoveToElement
+
much
xmlDictGetUsage
+xmlReconciliateNs
+
multi-threaded
xmlSetGenericErrorFunc
+xmlSetStructuredErrorFunc
+
multi-threading
xmlCleanupGlobals
+xmlInitGlobals
+
multiple
xmlCurrentChar
+xmlStringCurrentChar
+
multiply
xmlXPathMultValues
+
multithreaded
htmlInitAutoClose
+xmlCleanupParser
+xmlCleanupThreads
+xmlInitParser
+
mutex
xmlDictCleanup
+xmlFreeMutex
+xmlFreeRMutex
+xmlInitializeDict
+xmlMutexLock
+xmlMutexUnlock
+xmlNewMutex
+xmlNewRMutex
+xmlRMutexLock
+xmlRMutexUnlock
+
myDoc
docbFreeParserCtxt
+htmlFreeParserCtxt
+xmlFreeParserCtxt
+
myproxy
xmlNanoFTPScanProxy
+xmlNanoHTTPScanProxy
+
myproxy:3128
xmlNanoFTPScanProxy
+xmlNanoHTTPScanProxy
+

A-B +C-C +D-E +F-I +J-N +O-P +Q-R +S-S +T-U +V-X +Y-a +b-b +c-c +d-d +e-e +f-f +g-h +i-i +j-l +m-m +n-n +o-o +p-p +q-r +s-s +t-t +u-v +w-w +x-x +y-z +

Daniel Veillard

diff --git a/doc/APIchunk2.html b/doc/APIchunk2.html new file mode 100644 index 0000000..1d10f93 --- /dev/null +++ b/doc/APIchunk2.html @@ -0,0 +1,416 @@ + + +API Alphabetic Index D-E for libxml2
Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
Made with Libxml2 Logo

The XML C parser and toolkit of Gnome

API Alphabetic Index D-E for libxml2

Developer Menu
API Indexes
Related links

A-B +C-C +D-E +F-I +J-N +O-P +Q-R +S-S +T-U +V-X +Y-a +b-b +c-c +d-d +e-e +f-f +g-h +i-i +j-l +m-m +n-n +o-o +p-p +q-r +s-s +t-t +u-v +w-w +x-x +y-z +

Letter D:

DEBUG_MEMORY
DEBUG_MEMORY
+
DEBUG_MEMORY_FREED
DEBUG_MEMORY
+
DEBUG_MEMORY_LOCATION
DEBUG_MEMORY
+
DELE
xmlNanoFTPDele
+
DELEGATE
xmlLoadSGMLSuperCatalog
+
DEMO
getPublicId
+xmlSAX2GetPublicId
+
DEPRECATED
checkNamespace
+getNamespace
+globalNamespace
+namespaceDecl
+setDocumentLocator
+setNamespace
+xmlCatalogGetPublic
+xmlCatalogGetSystem
+xmlIsBaseChar
+xmlIsBlank
+xmlIsChar
+xmlIsCombining
+xmlIsDigit
+xmlIsExtender
+xmlIsIdeographic
+xmlIsPubidChar
+xmlNewGlobalNs
+
DIGIT
xmlCheckLanguageID
+
DOCTYPE
xmlParseDocTypeDecl
+
DOM-wrapper
xmlDOMWrapFreeCtxt
+xmlDOMWrapNewCtxt
+
DTDs
XML_COMPLETE_ATTRS
+xmlParserHandlePEReference
+
Data
xmlParseCDSect
+
Datatype
xmlRegexpCompile
+
Datatypes
xmlSchemaGetBuiltInListSimpleTypeItemType
+
Deallocate
xmlFreeAttributeTable
+xmlFreeElementTable
+xmlFreeEntitiesTable
+xmlFreeIDTable
+xmlFreeNotationTable
+xmlFreeRefTable
+xmlFreeTextReader
+xmlFreeTextWriter
+xmlRelaxNGFree
+xmlSchemaFree
+xmlSchemaFreeFacet
+xmlSchemaFreeType
+xmlSchematronFree
+
Deallocates
xmlSchemaFreeWildcard
+
Debugging
LIBXML_DEBUG_ENABLED
+xmlExpCtxtNbCons
+xmlExpCtxtNbNodes
+
Declaration
xmlParseElementDecl
+xmlParseMarkupDecl
+xmlParseSDDecl
+xmlValidCtxtNormalizeAttributeValue
+xmlValidateElementDecl
+
Declared
xmlParseEntityDecl
+xmlParseEntityRef
+xmlParsePEReference
+xmlParserHandlePEReference
+xmlParserHandleReference
+xmlValidateNotationUse
+
Default
xmlHandleEntity
+xmlParseAttributeType
+xmlParseDefaultDecl
+xmlValidateAttributeDecl
+xmlValidateOneAttribute
+xmlValidateOneNamespace
+
DefaultDecl
xmlParseAttributeListDecl
+xmlParseDefaultDecl
+
Deletes
xmlListDelete
+
Depth
_xmlParserCtxt
+_xmlValidCtxt
+
Dereference
xmlExpFree
+
DeregisterNodeFunc
xmlDeregisterNodeDefault
+
Deseret
xmlUCSIsDeseret
+
Determine
htmlIsBooleanAttr
+xmlIsID
+xmlIsRef
+xmlTextReaderConstEncoding
+xmlTextReaderConstXmlVersion
+xmlTextReaderIsNamespaceDecl
+xmlTextReaderStandalone
+
Devanagari
xmlUCSIsDevanagari
+
Different
xmlStreamPushNode
+
Digit
IS_DIGIT
+xmlNamespaceParseNCName
+xmlParseName
+xmlScanName
+xmlXPathParseNCName
+xmlXPathParseName
+
Digits
xmlXPathStringEvalNumber
+
Digits?
xmlXPathStringEvalNumber
+
Dingbats
xmlUCSIsDingbats
+
Display
errorSAXFunc
+fatalErrorSAXFunc
+warningSAXFunc
+xmlParserError
+xmlParserValidityError
+xmlParserValidityWarning
+xmlParserWarning
+
Displays
xmlParserPrintFileContext
+xmlParserPrintFileInfo
+
DocBook
docbCreatePushParserCtxt
+initdocbDefaultSAXHandler
+xmlSAX2InitDocbDefaultSAXHandler
+
Docbook
LIBXML_DOCB_ENABLED
+_xmlParserCtxt
+docbParseFile
+
Document
xmlDocDumpFormatMemoryEnc
+xmlDocDumpMemoryEnc
+xmlNodeGetBase
+xmlParseSDDecl
+xmlValidCtxtNormalizeAttributeValue
+xmlXIncludeNewContext
+
Does
hasExternalSubset
+hasExternalSubsetSAXFunc
+hasInternalSubset
+hasInternalSubsetSAXFunc
+xmlCharInRange
+xmlSAX2HasExternalSubset
+xmlSAX2HasInternalSubset
+xmlShellList
+xmlValidCtxtNormalizeAttributeValue
+xmlValidNormalizeAttributeValue
+xmlValidateDocumentFinal
+xmlValidateDtdFinal
+
Douglas
xmlURIEscape
+
Draft
xmlParseNamespace
+
DtD
xmlGetDtdAttrDesc
+xmlGetDtdElementDesc
+xmlGetDtdNotationDesc
+xmlGetDtdQAttrDesc
+xmlGetDtdQElementDesc
+xmlValidateDtd
+
DtDs
xlinkIsLink
+xmlIsMixedElement
+
Dtd
_xmlValidCtxt
+xmlValidGetValidElements
+
Dumps
xmlBufferDump
+xmlC14NDocDumpMemory
+xmlC14NDocSave
+xmlC14NDocSaveTo
+xmlC14NExecute
+xmlDebugDumpAttr
+xmlDebugDumpAttrList
+xmlDebugDumpDTD
+xmlDebugDumpDocument
+xmlDebugDumpDocumentHead
+xmlDebugDumpEntities
+xmlDebugDumpNode
+xmlDebugDumpNodeList
+xmlDebugDumpOneNode
+xmlDebugDumpString
+xmlXPathDebugDumpCompExpr
+
Duplicate
xmlHashAddEntry
+xmlHashAddEntry2
+xmlHashAddEntry3
+xmlListDup
+xmlParseElementMixedContentDecl
+xmlValidateElementDecl
+

Letter E:

ELEMENT
_xmlElementContent
+
EMPTY
xmlParseElementContentDecl
+
ENTITIES
xmlParseAttributeType
+xmlValidateAttributeValue
+xmlValidateDtdFinal
+
ENTITY
htmlParseEntityRef
+xmlParseAttributeType
+xmlParseEntityRef
+xmlParseEntityValue
+xmlValidateAttributeValue
+xmlValidateDtdFinal
+
ENTITY_REF
xmlBufGetNodeContent
+xmlNodeBufGetContent
+xmlNodeGetContent
+
ENTITY_REFs
xmlNewChild
+xmlNodeListGetRawString
+xmlNodeListGetString
+xmlStringGetNodeList
+xmlStringLenGetNodeList
+
ETag
htmlParseElement
+xmlParseElement
+xmlParseEndTag
+
EXSLT
xmlXPathDifference
+xmlXPathDistinct
+xmlXPathDistinctSorted
+xmlXPathHasSameNodes
+xmlXPathIntersection
+xmlXPathLeading
+xmlXPathLeadingSorted
+xmlXPathNodeLeading
+xmlXPathNodeLeadingSorted
+xmlXPathNodeTrailing
+xmlXPathNodeTrailingSorted
+xmlXPathTrailing
+xmlXPathTrailingSorted
+
Element
_xmlAttribute
+_xmlElement
+_xmlElementContent
+htmlNodeStatus
+xmlFirstElementChild
+xmlLastElementChild
+xmlParseAttributeType
+xmlParseDocTypeDecl
+xmlParseElement
+xmlParseElementChildrenContentDecl
+xmlParseElementContentDecl
+xmlParseElementDecl
+xmlParseElementMixedContentDecl
+xmlTextReaderReadString
+xmlValidateElementDecl
+xmlValidateOneElement
+xmlValidateRoot
+
ElementTable
htmlTagLookup
+
Empties
xmlXPathEmptyNodeSet
+
EmptyElemTag
htmlParseElement
+xmlParseElement
+xmlParseStartTag
+
EmptyElement
xmlParseStartTag
+
EncName
xmlParseEncName
+xmlParseEncodingDecl
+
Encapsulating
xmlNodeGetBase
+
EnclosedAlphanumerics
xmlUCSIsEnclosedAlphanumerics
+
EnclosedCJKLettersandMonths
xmlUCSIsEnclosedCJKLettersandMonths
+
Encoding
htmlGetMetaEncoding
+xmlGetCharEncodingName
+xmlParseCharEncoding
+
EncodingDecl
xmlParseEncodingDecl
+xmlParseTextDecl
+
EncodingDecl?
xmlParseXMLDecl
+
End
_xmlDoc
+_xmlDtd
+_xmlNode
+xmlTextReaderGetRemainder
+xmlTextWriterEndAttribute
+xmlTextWriterEndCDATA
+xmlTextWriterEndComment
+xmlTextWriterEndDTD
+xmlTextWriterEndDTDAttlist
+xmlTextWriterEndDTDElement
+xmlTextWriterEndDTDEntity
+xmlTextWriterEndDocument
+xmlTextWriterEndElement
+xmlTextWriterEndPI
+xmlTextWriterFullEndElement
+
End-of-Line
xmlCurrentChar
+
Ensures
xmlDOMWrapReconcileNamespaces
+
Entities
xmlGetCharEncodingName
+xmlParseCharEncoding
+
EntitiesTable
htmlEntityLookup
+htmlEntityValueLookup
+
Entity
_xmlEntity
+xmlBufGetNodeContent
+xmlNewEntityInputStream
+xmlNodeBufGetContent
+xmlNodeGetBase
+xmlNodeGetContent
+xmlParseAttribute
+xmlParseAttributeType
+xmlParseEntityRef
+xmlParsePEReference
+xmlParserHandlePEReference
+xmlParserHandleReference
+xmlValidateAttributeValue
+xmlValidateOneAttribute
+xmlValidateOneNamespace
+
EntityDecl
xmlParseEntityDecl
+xmlParseMarkupDecl
+
EntityDef
xmlParseEntityDecl
+
EntityRef
htmlParseEntityRef
+xmlDecodeEntities
+xmlParseEntityRef
+xmlParseReference
+xmlParserHandleReference
+xmlStringDecodeEntities
+xmlStringLenDecodeEntities
+
EntityReference
xmlTextReaderReadAttributeValue
+
EntityValue
xmlParseEntityDecl
+xmlParseEntityValue
+
Enumerated
xmlParseEnumeratedType
+
EnumeratedType
xmlParseAttributeType
+xmlParseEnumeratedType
+
Enumeration
_xmlEnumeration
+xmlParseEnumeratedType
+xmlParseEnumerationType
+xmlValidateAttributeDecl
+
Equal
xmlStrQEqual
+
Escaping
xmlURIEscape
+
Ethiopic
xmlUCSIsEthiopic
+
Evaluate
xmlXPathCompiledEval
+xmlXPathEval
+xmlXPathEvalExpression
+xmlXPathEvalPredicate
+xmlXPathEvaluatePredicateResult
+xmlXPathNodeEval
+xmlXPtrEval
+xmlXPtrEvalRangePredicate
+
Evaluates
xmlExpExpDerive
+xmlSchemaIsBuiltInTypeFacet
+
Everything
_xmlParserCtxt
+setDocumentLocator
+setDocumentLocatorSAXFunc
+xmlSAX2SetDocumentLocator
+
Examines
xmlHasFeature
+
Exclusive
xmlC14NDocDumpMemory
+xmlC14NDocSave
+xmlC14NDocSaveTo
+xmlC14NExecute
+
Existing
xmlAddEncodingAlias
+xmlHashRemoveEntry
+xmlHashRemoveEntry2
+xmlHashRemoveEntry3
+xmlHashUpdateEntry
+xmlHashUpdateEntry2
+xmlHashUpdateEntry3
+
Exp
xmlAutomataCompile
+
Experimental
htmlNodeStatus
+
Expr
xmlXPathEvalPredicate
+xmlXPathEvaluatePredicateResult
+xmlXPtrEvalRangePredicate
+
Expresses
xmlBuildRelativeURI
+
Expression
xmlXPathEvalPredicate
+xmlXPathEvaluatePredicateResult
+
Extender
IS_EXTENDER
+xmlNamespaceParseNCName
+xmlParseName
+xmlScanName
+xmlXPathParseNCName
+xmlXPathParseName
+
External
_xmlDtd
+_xmlEntity
+xmlACatalogResolve
+xmlCatalogLocalResolve
+xmlCatalogResolve
+xmlExternalEntityLoader
+xmlParseAttribute
+xmlParseDTD
+xmlParseExternalID
+xmlSAXParseDTD
+
ExternalID
xmlParseDocTypeDecl
+xmlParseEntityDecl
+xmlParseExternalID
+xmlParseNotationDecl
+
Extract
xmlRegExecErrInfo
+xmlRegExecNextValues
+xmlSchemaGetFacetValueAsULong
+xmlStrsub
+

A-B +C-C +D-E +F-I +J-N +O-P +Q-R +S-S +T-U +V-X +Y-a +b-b +c-c +d-d +e-e +f-f +g-h +i-i +j-l +m-m +n-n +o-o +p-p +q-r +s-s +t-t +u-v +w-w +x-x +y-z +

Daniel Veillard

diff --git a/doc/APIchunk20.html b/doc/APIchunk20.html new file mode 100644 index 0000000..0317066 --- /dev/null +++ b/doc/APIchunk20.html @@ -0,0 +1,330 @@ + + +API Alphabetic Index n-n for libxml2
Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
Made with Libxml2 Logo

The XML C parser and toolkit of Gnome

API Alphabetic Index n-n for libxml2

Developer Menu
API Indexes
Related links

A-B +C-C +D-E +F-I +J-N +O-P +Q-R +S-S +T-U +V-X +Y-a +b-b +c-c +d-d +e-e +f-f +g-h +i-i +j-l +m-m +n-n +o-o +p-p +q-r +s-s +t-t +u-v +w-w +x-x +y-z +

Letter n:

named
xmlAddEncodingAlias
+
names
_xmlDoc
+_xmlParserCtxt
+_xmlSchema
+htmlInitAutoClose
+xmlGetFeaturesList
+xmlHashAddEntry
+xmlHashScan3
+xmlHashScanFull3
+xmlParseNotationType
+xmlValidGetPotentialChildren
+xmlValidGetValidElements
+
namespace-binding
xmlSetProp
+
namespace-uri
xmlXPathNamespaceURIFunction
+
namespace:
XINCLUDE_NS
+XINCLUDE_OLD_NS
+xmlParseAttribute
+xmlParseStartTag
+
namespaces
XML_XPATH_CHECKNS
+_xmlParserCtxt
+_xmlSchemaWildcard
+_xmlXPathContext
+xmlC14NDocDumpMemory
+xmlC14NDocSave
+xmlC14NDocSaveTo
+xmlC14NExecute
+xmlCopyDoc
+xmlCopyNode
+xmlDOMWrapAcquireNsFunction
+xmlDocCopyNode
+xmlFreeNsList
+xmlGetProp
+xmlParseInNodeContext
+xmlReconciliateNs
+
naming
xmlChildrenNode
+xmlRootNode
+
nbBytes
xmlMemDisplayLast
+
nbval
xmlRegExecErrInfo
+xmlRegExecNextValues
+
ncname
xmlBuildQName
+
ndata
_xmlEntity
+
nearest
xmlNodeGetLang
+xmlNodeGetSpacePreserve
+xmlXPathLangFunction
+
nearly
xmlSAXParseFileWithData
+xmlSAXParseMemoryWithData
+
necessary
XML_SCHEMAS_TYPE_VARIETY_ABSENT
+_htmlElemDesc
+xmlCheckUTF8
+xmlDebugDumpString
+
needed
_xmlParserCtxt
+_xmlXPathContext
+htmlEntityLookup
+htmlEntityValueLookup
+xlinkIsLink
+xmlDOMWrapAdoptNode
+xmlDOMWrapCloneNode
+xmlDOMWrapReconcileNamespaces
+xmlGetBufferAllocationScheme
+xmlLoadSGMLSuperCatalog
+xmlNewEntity
+xmlNewNodeEatName
+xmlParseElementChildrenContentDecl
+xmlParseElementMixedContentDecl
+xmlReconciliateNs
+xmlSchemaSAXPlug
+xmlSetBufferAllocationScheme
+xmlShellPwd
+xmlStrncat
+xmlTextReaderCurrentDoc
+xmlValidCtxtNormalizeAttributeValue
+xmlValidNormalizeAttributeValue
+xmlXPathPopBoolean
+xmlXPathPopExternal
+xmlXPathPopNodeSet
+xmlXPathPopNumber
+xmlXPathPopString
+xmlXPathStringFunction
+
needing
xmlCharEncOutFunc
+xmlURIEscape
+
needle
xmlStrcasestr
+xmlStrstr
+
needs
xmlEntityReferenceFunc
+xmlSchemaValidateFacetWhtsp
+xmlStreamWantsAnyNode
+xmlXPathNodeSetFreeNs
+
negated
_xmlSchemaWildcard
+
negative
xmlC14NDocDumpMemory
+xmlC14NDocSave
+xmlC14NDocSaveTo
+xmlC14NExecute
+xmlRegExecErrInfo
+xmlRegExecNextValues
+xmlRegExecPushString
+xmlRegExecPushString2
+xmlRegexpExec
+xmlRegexpIsDeterminist
+xmlShellCmd
+xmlXPathBooleanFunction
+xmlXPathCeilingFunction
+xmlXPathStringEvalNumber
+xmlXPathStringFunction
+
neither
xmlHasNsProp
+xmlHasProp
+xmlParseElementChildrenContentDecl
+xmlTextReaderReadInnerXml
+xmlXPathBooleanFunction
+xmlXPathCompareValues
+
nested
xmlParseElementChildrenContentDecl
+xmlParseMarkupDecl
+
net
xmlXPathIsInf
+xmlXPathIsNaN
+
network
htmlCtxtReadFile
+htmlReadFile
+xmlCtxtReadFile
+xmlNoNetExternalEntityLoader
+xmlReadFile
+xmlReaderForFile
+xmlReaderNewFile
+
nice
xmlBuildRelativeURI
+
nillable
XML_SCHEMAS_ELEM_NILLABLE
+xmlExpIsNillable
+
nod
xmlEntityReferenceFunc
+
node-
_xmlDOMWrapCtxt
+xmlDOMWrapRemoveNode
+xmlValidGetValidElements
+
node-set?
xmlXPathLocalNameFunction
+xmlXPathNamespaceURIFunction
+
nodeInfos
_xmlParserCtxt
+
nodelist
xmlParseBalancedChunkMemoryRecover
+
nodes1
xmlXPathDifference
+
nodes2
xmlXPathDifference
+
nodeset
xmlXPathNodeSetFreeNs
+
nodesets
xmlXPathNodeSetMerge
+
non
XML_SCHEMAS_ANYATTR_LAX
+xmlEncodeEntitiesReentrant
+xmlNewChild
+xmlNewTextChild
+xmlTextReaderBaseUri
+xmlTextReaderLocalName
+xmlTextReaderLocatorBaseURI
+xmlTextReaderName
+xmlTextReaderNamespaceUri
+xmlTextReaderPrefix
+xmlTextReaderXmlLang
+xmlXPathParseNCName
+
non-CDATA
_xmlParserCtxt
+
non-NULL
htmlParseEntityRef
+xmlCreatePushParserCtxt
+xmlParseEntityValue
+
non-UTF-8
xmlByteConsumed
+
non-blank
xmlParseElementChildrenContentDecl
+
non-determinist
_xmlValidCtxt
+
non-empty
xmlXPathBooleanFunction
+
non-final
xmlRegExecPushString
+xmlRegExecPushString2
+
non-negative
xmlC14NDocSaveTo
+xmlC14NExecute
+
non-normative
xmlDetectCharEncoding
+
non-null
xmlShellPrintNode
+
non-recursive
_xmlParserCtxt
+
non-stateless
xmlCharEncOutFunc
+
non-validating
xmlParseAttValue
+xmlParseEntityRef
+
non-zero
initxmlDefaultSAXHandler
+xmlHasFeature
+xmlIsLetter
+xmlSAX2InitDefaultSAXHandler
+xmlXPathBooleanFunction
+
none
XML_SCHEMAS_TYPE_VARIETY_ABSENT
+getNamespace
+xmlDecodeEntities
+xmlGetLastChild
+xmlOutputBufferCreateFilename
+xmlSchemaValueGetAsString
+xmlSchemaValueGetNext
+xmlStringDecodeEntities
+xmlStringLenDecodeEntities
+xmlTextReaderConstXmlLang
+xmlTextReaderXmlLang
+
nor
xmlBufferCreateStatic
+xmlBuildQName
+xmlParseElementChildrenContentDecl
+xmlSetGenericErrorFunc
+xmlSetStructuredErrorFunc
+xmlTextReaderReadInnerXml
+xmlXPathBooleanFunction
+
normal
xmlGetBufferAllocationScheme
+xmlInitCharEncodingHandlers
+xmlParserInputBufferGrow
+
normalization
xmlNormalizeURIPath
+xmlParseSDDecl
+xmlSchemaValPredefTypeNodeNoNorm
+xmlSchemaValidateFacetWhtsp
+xmlValidCtxtNormalizeAttributeValue
+xmlValidNormalizeAttributeValue
+
normalization:
xmlCurrentChar
+
normalizations
xmlTextReaderNormalization
+
normalize
xmlParseAttValue
+xmlSchemaCollapseString
+xmlTextReaderNormalization
+
normalize-space
xmlXPathNormalizeFunction
+
normalized
XML_SCHEMAS_TYPE_NORMVALUENEEDED
+xmlParseAttValue
+xmlSchemaValidateFacetWhtsp
+xmlValidCtxtNormalizeAttributeValue
+xmlValidNormalizeAttributeValue
+xmlXPathNormalizeFunction
+
normalizing
xmlCurrentChar
+
normally
_xmlNs
+c
+xmlValidityErrorFunc
+xmlValidityWarningFunc
+
notations
_xmlDtd
+xmlValidateDtdFinal
+
note
xmlCheckUTF8
+xmlLoadExternalEntity
+
notice
xmlCleanupParser
+xmlCleanupThreads
+
now
XML_CAST_FPTR
+_xmlSchema
+_xmlSchemaElement
+xmlDecodeEntities
+xmlParserHandleReference
+xmlScanName
+
ns-binding
xmlSetProp
+
ns-decls
xmlDOMWrapAdoptNode
+xmlDOMWrapCloneNode
+xmlDOMWrapReconcileNamespaces
+
ns-references
xmlDOMWrapReconcileNamespaces
+xmlDOMWrapRemoveNode
+
nsDef
_xmlDOMWrapCtxt
+xmlDOMWrapAdoptNode
+xmlDOMWrapCloneNode
+xmlDOMWrapRemoveNode
+
null
xmlHashScan3
+xmlHashScanFull3
+xmlShellDu
+
null-terminated
xmlCheckUTF8
+
number:
LIBXML_VERSION
+
number?
xmlXPathSubstringFunction
+
numbers
xmlLineNumbersDefault
+xmlUTF8Size
+xmlXPathAddValues
+xmlXPathCompareValues
+xmlXPathDivValues
+xmlXPathModValues
+xmlXPathMultValues
+xmlXPathOrderDocElems
+xmlXPathRoundFunction
+xmlXPathSubValues
+xmlXPathValueFlipSign
+
numeric
xmlXPathAddValues
+xmlXPathDivValues
+xmlXPathModValues
+xmlXPathMultValues
+xmlXPathStringFunction
+xmlXPathSubValues
+xmlXPathSubstringFunction
+xmlXPathValueFlipSign
+

A-B +C-C +D-E +F-I +J-N +O-P +Q-R +S-S +T-U +V-X +Y-a +b-b +c-c +d-d +e-e +f-f +g-h +i-i +j-l +m-m +n-n +o-o +p-p +q-r +s-s +t-t +u-v +w-w +x-x +y-z +

Daniel Veillard

diff --git a/doc/APIchunk21.html b/doc/APIchunk21.html new file mode 100644 index 0000000..c655198 --- /dev/null +++ b/doc/APIchunk21.html @@ -0,0 +1,399 @@ + + +API Alphabetic Index o-o for libxml2
Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
Made with Libxml2 Logo

The XML C parser and toolkit of Gnome

API Alphabetic Index o-o for libxml2

Developer Menu
API Indexes
Related links

A-B +C-C +D-E +F-I +J-N +O-P +Q-R +S-S +T-U +V-X +Y-a +b-b +c-c +d-d +e-e +f-f +g-h +i-i +j-l +m-m +n-n +o-o +p-p +q-r +s-s +t-t +u-v +w-w +x-x +y-z +

Letter o:

object?
xmlXPathNumberFunction
+xmlXPathStringFunction
+
objects
_xmlXPathContext
+xmlXPathCompareValues
+xmlXPathContextSetCache
+xmlXPathDivValues
+xmlXPathEqualValues
+xmlXPathFreeNodeSetList
+xmlXPathNotEqualValues
+
objects:
xmlXPathAddValues
+xmlXPathCompareValues
+xmlXPathModValues
+xmlXPathMultValues
+xmlXPathSubValues
+
obligated
xmlParseEntityRef
+
obsolete
xmlNormalizeWindowsPath
+
obsolete:
XML_SCHEMAS_ELEM_TOPLEVEL
+
occupied
xmlCanonicPath
+xmlPathToURI
+
occur
XML_SCHEMAS_TYPE_VARIETY_ABSENT
+xmlParseComment
+xmlParseMarkupDecl
+
occured
xmlCtxtGetLastError
+xmlDictCreate
+xmlDictCreateSub
+xmlGetLastError
+xmlHashCreate
+xmlHashCreateDict
+xmlListRemoveFirst
+xmlListRemoveLast
+xmlTextReaderErrorFunc
+
occurences
xmlAutomataNewCountTrans
+xmlAutomataNewCountTrans2
+xmlAutomataNewOnceTrans
+xmlAutomataNewOnceTrans2
+
occurred
xmlMemStrdupLoc
+xmlMemoryStrdup
+
occurrence
xmlStrcasestr
+xmlStrchr
+xmlStrstr
+xmlStrsub
+xmlXPathSubstringAfterFunction
+xmlXPathSubstringBeforeFunction
+
occurrences
xmlXPathTranslateFunction
+
occurs
xmlNormalizeURIPath
+xmlParseSDDecl
+xmlStrPrintf
+xmlStrVPrintf
+
octets
UTF8ToHtml
+UTF8Toisolat1
+docbEncodeEntities
+htmlEncodeEntities
+isolat1ToUTF8
+xmlCharEncodingInputFunc
+xmlCharEncodingOutputFunc
+
of:
xmlParseSDDecl
+
off
xmlGetNoNsProp
+xmlGetNsProp
+xmlGetProp
+xmlHasNsProp
+xmlHasProp
+xmlLineNumbersDefault
+xmlParseExternalID
+
okay
_xmlParserCtxt
+
old
_xmlDoc
+globalNamespace
+xmlDocSetRootElement
+xmlKeepBlanksDefault
+xmlLineNumbersDefault
+xmlListCopy
+xmlNewGlobalNs
+xmlOutputBufferCreateFilenameDefault
+xmlParserInputBufferCreateFilenameDefault
+xmlParserInputBufferGrow
+xmlParserInputBufferRead
+xmlRegisterNodeDefault
+xmlReplaceNode
+xmlXPathConvertBoolean
+xmlXPathConvertNumber
+xmlXPathConvertString
+
oldNs
xmlDOMWrapAdoptNode
+xmlDOMWrapCloneNode
+xmlDOMWrapRemoveNode
+
older
LIBXML_SAX1_ENABLED
+xmlParseNamespace
+
omitted
htmlHandleOmittedElem
+xmlXPathLocalNameFunction
+xmlXPathNamespaceURIFunction
+xmlXPathNormalizeFunction
+xmlXPathStringFunction
+xmlXPathStringLengthFunction
+
once
htmlInitAutoClose
+xmlAutomataNewOnceTrans
+xmlAutomataNewOnceTrans2
+xmlCleanupThreads
+xmlEncodeEntities
+xmlInitParser
+xmlInitializeCatalog
+xmlLoadCatalog
+xmlLoadCatalogs
+xmlParseAttributeType
+xmlParseElementDecl
+xmlParseElementMixedContentDecl
+xmlParsePI
+xmlParseStartTag
+xmlTextReaderCurrentDoc
+xmlTextReaderPreserve
+xmlTextReaderPreservePattern
+xmlValidateDocumentFinal
+xmlValidateDtdFinal
+xmlXPathNodeSetMerge
+xmlXPtrLocationSetMerge
+
ones
XML_COMPLETE_ATTRS
+startElementNsSAX2Func
+xmlCatalogConvert
+xmlConvertSGMLCatalog
+
ononymous
_xmlSchema
+
onto
xmlParserInputBufferGrow
+xmlStreamPush
+xmlStreamPushAttr
+xmlStreamPushNode
+
opaque
_xmlSchema
+_xmlURI
+
open
htmlCtxtReadFd
+htmlDocDump
+htmlReadFd
+xmlCtxtReadFd
+xmlDocDump
+xmlDocFormatDump
+xmlIOFTPOpen
+xmlIOHTTPOpen
+xmlInputOpenCallback
+xmlNanoFTPConnect
+xmlNanoFTPConnectTo
+xmlNanoFTPGetConnection
+xmlNanoHTTPMethod
+xmlNanoHTTPMethodRedir
+xmlNanoHTTPOpen
+xmlNanoHTTPOpenRedir
+xmlOutputOpenCallback
+xmlReadFd
+xmlReaderForFd
+xmlReaderNewFd
+xmlTextWriterEndDocument
+
opening
startElement
+startElementSAXFunc
+xmlParseElementChildrenContentDecl
+xmlSAX2StartElement
+
operands
xmlXPathAddValues
+xmlXPathDivValues
+xmlXPathModValues
+xmlXPathMultValues
+xmlXPathSubValues
+xmlXPathValueFlipSign
+
operating
_xmlParserCtxt
+xmlParserInputBufferGrow
+xmlParserInputBufferPush
+
operation
xmlBuildRelativeURI
+xmlCatalogSetDebug
+xmlDOMWrapAdoptNode
+xmlDOMWrapCloneNode
+xmlExpNewOr
+xmlExpNewRange
+xmlExpNewSeq
+xmlTextReaderConstValue
+xmlXPathAddValues
+xmlXPathCompareValues
+xmlXPathConvertBoolean
+xmlXPathConvertNumber
+xmlXPathConvertString
+xmlXPathDivValues
+xmlXPathEqualValues
+xmlXPathModValues
+xmlXPathMultValues
+xmlXPathNotEqualValues
+xmlXPathSubValues
+xmlXPathValueFlipSign
+
operations
_xmlDOMWrapCtxt
+xmlCleanupParser
+xmlModuleClose
+xmlModuleFree
+xmlReconciliateNs
+
operator
xmlExpParse
+xmlXPathCompareValues
+
operators
xmlExpParse
+xmlXPathAddValues
+xmlXPathDivValues
+xmlXPathModValues
+xmlXPathMultValues
+xmlXPathSubValues
+xmlXPathValueFlipSign
+
opposite
xmlCleanupParser
+
optimized
xmlXPathNodeSetAddUnique
+
option
XML_MAX_DICTIONARY_LIMIT
+XML_MAX_NAME_LENGTH
+XML_MAX_TEXT_LENGTH
+xmlDOMWrapAdoptNode
+xmlDOMWrapCloneNode
+xmlDOMWrapReconcileNamespaces
+xmlGetLineNo
+xmlSchemaValidCtxtGetOptions
+
options
htmlCtxtUseOptions
+xmlCtxtUseOptions
+xmlDOMWrapRemoveNode
+xmlModuleOpen
+xmlSaveToBuffer
+xmlSaveToFd
+xmlSaveToFilename
+xmlSaveToIO
+xmlSchemaSetValidOptions
+xmlSchemaValidCtxtGetOptions
+xmlSchemaValidateFile
+xmlTextReaderRelaxNGValidateCtxt
+xmlTextReaderSchemaValidateCtxt
+xmlTextReaderSetup
+xmlXPathContextSetCache
+
ordered
xmlListAppend
+xmlListInsert
+xmlXPathNextAncestor
+xmlXPathNextFollowing
+xmlXPathNextPreceding
+
ordering
xmlListDataCompare
+
org
XINCLUDE_NS
+XINCLUDE_OLD_NS
+xmlC14NDocDumpMemory
+xmlC14NDocSave
+xmlC14NDocSaveTo
+xmlC14NExecute
+xmlCheckLanguageID
+xmlGetCharEncodingName
+xmlParserHandlePEReference
+xmlParserHandleReference
+xmlSchemaGetPredefinedType
+xmlTextReaderNodeType
+
oriented
xmlValidityErrorFunc
+xmlValidityWarningFunc
+
origin
_xmlXPathContext
+
original
_xmlSchemaElement
+_xmlSchemaFacet
+xmlCharEncodingInputFunc
+xmlCopyError
+xmlGetEncodingAlias
+xmlListMerge
+xmlParseEntityValue
+xmlParseURIRaw
+xmlSchemaSAXPlug
+xmlSchemaSAXUnplug
+xmlShellSave
+xmlStrcat
+xmlStrncat
+xmlStrncatNew
+xmlXPathObjectCopy
+
other
XML_SCHEMAS_INCLUDING_CONVERT_NS
+htmlAutoCloseTag
+htmlIsAutoClosed
+htmlNodeStatus
+xmlAutomataNewNegTrans
+xmlCatalogAdd
+xmlGcMemSetup
+xmlLoadACatalog
+xmlMemSetup
+xmlNanoFTPUpdateURL
+xmlParseAttValue
+xmlParseAttribute
+xmlParseNamespace
+xmlParseSDDecl
+xmlSchemaNewStringValue
+xmlTextReaderIsNamespaceDecl
+xmlTextReaderReadString
+xmlValidateRoot
+xmlXPathIdFunction
+xmlXPathNormalizeFunction
+xmlXPathStringFunction
+xmlXPathStringLengthFunction
+
our
setDocumentLocator
+setDocumentLocatorSAXFunc
+xmlSAX2SetDocumentLocator
+
out
UTF8ToHtml
+UTF8Toisolat1
+docbEncodeEntities
+htmlEncodeEntities
+isolat1ToUTF8
+xmlCharEncodingInputFunc
+xmlLockLibrary
+xmlParseEntity
+xmlSAXParseEntity
+xmlSchemaValidityLocatorFunc
+xmlSetGenericErrorFunc
+xmlSetStructuredErrorFunc
+xmlTextReaderNormalization
+xmlXPathFunction
+xmlXPathNodeSetItem
+
out-of
xmlDOMWrapAdoptNode
+xmlDOMWrapCloneNode
+
output?
xmlNewTextWriterDoc
+xmlNewTextWriterFilename
+xmlNewTextWriterMemory
+xmlNewTextWriterPushParser
+xmlNewTextWriterTree
+
outside
xmlReconciliateNs
+
over
xmlExpCtxtNbCons
+
overflow
_xmlParserInput
+
override
XML_MAX_DICTIONARY_LIMIT
+XML_MAX_NAME_LENGTH
+XML_MAX_TEXT_LENGTH
+resolveEntity
+resolveEntitySAXFunc
+xmlCatalogAdd
+xmlGetLineNo
+xmlSAX2ResolveEntity
+
overriding
XML_MAX_NAME_LENGTH
+
overwrite
xmlACatalogAdd
+xmlCatalogAdd
+
overwritten
xmlAddEncodingAlias
+
own
_xmlEntity
+_xmlParserCtxt
+resolveEntity
+resolveEntitySAXFunc
+xmlCleanupMemory
+xmlSAX2ResolveEntity
+
owned
xmlClearParserCtxt
+xmlDictOwns
+
owner
ftpListCallback
+xmlDOMWrapRemoveNode
+
ownership
xmlAddAttributeDecl
+
owning
xmlCopyDocElementContent
+xmlFreeDocElementContent
+xmlNewDocFragment
+
owns
XML_SCHEMAS_TYPE_OWNED_ATTR_WILDCARD
+

A-B +C-C +D-E +F-I +J-N +O-P +Q-R +S-S +T-U +V-X +Y-a +b-b +c-c +d-d +e-e +f-f +g-h +i-i +j-l +m-m +n-n +o-o +p-p +q-r +s-s +t-t +u-v +w-w +x-x +y-z +

Daniel Veillard

diff --git a/doc/APIchunk22.html b/doc/APIchunk22.html new file mode 100644 index 0000000..2f20018 --- /dev/null +++ b/doc/APIchunk22.html @@ -0,0 +1,599 @@ + + +API Alphabetic Index p-p for libxml2
Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
Made with Libxml2 Logo

The XML C parser and toolkit of Gnome

API Alphabetic Index p-p for libxml2

Developer Menu
API Indexes
Related links

A-B +C-C +D-E +F-I +J-N +O-P +Q-R +S-S +T-U +V-X +Y-a +b-b +c-c +d-d +e-e +f-f +g-h +i-i +j-l +m-m +n-n +o-o +p-p +q-r +s-s +t-t +u-v +w-w +x-x +y-z +

Letter p:

pairs
startElement
+startElementNsSAX2Func
+startElementSAXFunc
+xmlSAX2StartElement
+xmlSAX2StartElementNs
+
param
_xmlDtd
+
parameter-entity
xmlParseElementChildrenContentDecl
+xmlParseMarkupDecl
+
parameters
ATTRIBUTE_UNUSED
+errorSAXFunc
+fatalErrorSAXFunc
+warningSAXFunc
+xmlNewChild
+xmlNewTextChild
+xmlParserError
+xmlParserValidityError
+xmlParserValidityWarning
+xmlParserWarning
+xmlStrPrintf
+xmlStrVPrintf
+xmlTextWriterWriteFormatAttribute
+xmlTextWriterWriteFormatAttributeNS
+xmlTextWriterWriteFormatCDATA
+xmlTextWriterWriteFormatComment
+xmlTextWriterWriteFormatDTD
+xmlTextWriterWriteFormatDTDAttlist
+xmlTextWriterWriteFormatDTDElement
+xmlTextWriterWriteFormatDTDInternalEntity
+xmlTextWriterWriteFormatElement
+xmlTextWriterWriteFormatElementNS
+xmlTextWriterWriteFormatPI
+xmlTextWriterWriteFormatRaw
+xmlTextWriterWriteFormatString
+xmlXPathEvalFunc
+
parent-
_xmlNode
+
parentheses
xmlParseElementChildrenContentDecl
+
parenthesis
xmlSnprintfElementContent
+xmlSprintfElementContent
+
parenthesized
xmlParseElementChildrenContentDecl
+
parents
xmlSearchNs
+xmlSearchNsByHref
+
partial
xmlOutputBufferWrite
+xmlOutputBufferWriteEscape
+xmlOutputBufferWriteString
+
particular
_xmlNodeSet
+
pass
xmlCurrentChar
+xmlRelaxParserSetFlag
+xmlTextReaderSetErrorHandler
+xmlTextReaderSetStructuredErrorHandler
+
passed
CHECK_ARITY
+xmlAutomataNewNegTrans
+xmlAutomataNewTransition
+xmlAutomataNewTransition2
+xmlHashScan
+xmlHashScan3
+xmlHashScanFull
+xmlHashScanFull3
+xmlListReverseWalk
+xmlListWalk
+xmlNanoFTPGet
+xmlNanoFTPList
+xmlParseAttValue
+xmlSetGenericErrorFunc
+xmlSetStructuredErrorFunc
+xmlXIncludeProcessFlagsData
+xmlXIncludeProcessTreeFlagsData
+xmlXPathEvalFunc
+xmlXPathIntersection
+
passive
xmlNanoFTPGetConnection
+
password
xmlNanoFTPProxy
+
past
attribute
+attributeSAXFunc
+xmlTextReaderGetRemainder
+
paste
xmlReconciliateNs
+
path
_xmlURI
+xmlCanonicPath
+xmlCheckFilename
+xmlGetNodePath
+xmlLoadACatalog
+xmlLoadCatalog
+xmlLoadSGMLSuperCatalog
+xmlModuleOpen
+xmlNanoFTPGetSocket
+xmlNanoFTPUpdateURL
+xmlNormalizeURIPath
+xmlNormalizeWindowsPath
+xmlParserGetDirectory
+xmlPathToURI
+xmlShellPwd
+xmlShellValidate
+xmlTextReaderRelaxNGValidate
+xmlTextReaderSchemaValidate
+
pathological
xmlGetBufferAllocationScheme
+
pattern
XML_SCHEMAS_TYPE_NORMVALUENEEDED
+xmlPatternFromRoot
+xmlPatternGetStreamCtxt
+xmlPatternMatch
+xmlPatternMaxDepth
+xmlPatternMinDepth
+xmlPatternStreamable
+xmlPatterncompile
+xmlSchemaValidateFacetWhtsp
+xmlStreamWantsAnyNode
+xmlTextReaderPreservePattern
+
patterns
_xmlSchemaFacet
+
pcdata
cdataBlock
+cdataBlockSAXFunc
+xmlSAX2CDataBlock
+
pedantic
_xmlParserCtxt
+xmlPedanticParserDefault
+
per
xmlGetLastError
+xmlParseAttributeType
+xmlValidateElementDecl
+xmlXPathContextSetCache
+
per-thread
LIBXML_THREAD_ALLOC_ENABLED
+
performance
xmlGetBufferAllocationScheme
+xmlSetBufferAllocationScheme
+
performed
htmlNodeStatus
+
permanently
xmlCheckLanguageID
+
pertain
xmlNewDocTextLen
+
pertains
xmlNodeGetBase
+xmlParseBalancedChunkMemory
+xmlParseBalancedChunkMemoryRecover
+xmlParseExternalEntity
+
phase
xmlRegNewExecCtxt
+
pic1
xmlBuildRelativeURI
+
piece
xmlNewChild
+xmlNewDocNode
+xmlNewDocNodeEatName
+xmlNodeSetContent
+xmlNodeSetContentLen
+
pieces
xmlParseURIRaw
+
place
xmlCatalogAdd
+xmlCopyError
+xmlGcMemGet
+xmlMemGet
+xmlReplaceNode
+
places
xmlMemDisplayLast
+xmlStrPrintf
+xmlStrVPrintf
+
platforms
xmlGetThreadId
+
plug
xmlXPathFuncLookupFunc
+xmlXPathVariableLookupFunc
+
plugin
xmlCleanupParser
+xmlCleanupThreads
+
plugins
xmlCleanupParser
+xmlCleanupThreads
+
plus
UTF8ToHtml
+docbEncodeEntities
+htmlEncodeEntities
+
pnetlib-doc
xmlTextReaderNodeType
+
pointed
xmlPopInput
+
pointers
xmlParserInputGrow
+xmlReconciliateNs
+xmlRegExecErrInfo
+xmlRegExecNextValues
+xmlSchemaSAXPlug
+xmlSchemaSAXUnplug
+xmlValidGetValidElements
+
points
_xmlChRangeGroup
+
pop
xmlPopInput
+
popped
xmlXPathFunction
+
pops
xmlSkipBlankChars
+
port
_xmlURI
+xmlNanoFTPConnectTo
+xmlNanoFTPProxy
+xmlNanoFTPScanProxy
+xmlNanoFTPUpdateURL
+xmlNanoHTTPScanProxy
+
portability
INVALID_SOCKET
+SOCKET
+xmlModuleOpen
+xmlModuleSymbol
+
portable
xmlXPathIsInf
+xmlXPathIsNaN
+
pos
xmlUTF8Strsub
+
position:
xmlXPathSubstringFunction
+
positioned
xmlTextReaderReadString
+
positionned
xmlTextReaderReadAttributeValue
+
positions
xmlUTF8Strsub
+
possible
xmlCopyNodeList
+xmlCreateEntityParserCtxt
+xmlParseDefaultDecl
+xmlParseExternalID
+xmlReconciliateNs
+xmlRegExecErrInfo
+xmlRegExecNextValues
+xmlTextReaderRelaxNGSetSchema
+xmlTextReaderRelaxNGValidate
+xmlTextReaderRelaxNGValidateCtxt
+xmlTextReaderSchemaValidate
+xmlTextReaderSchemaValidateCtxt
+xmlTextReaderSetSchema
+xmlValidateDtdFinal
+
possibly
xmlDocGetRootElement
+xmlDocSetRootElement
+xmlIsBlankNode
+xmlParseBalancedChunkMemory
+xmlParseBalancedChunkMemoryRecover
+xmlParseExternalEntity
+xmlSaveToFilename
+xmlXPathStringFunction
+
posteriori
xmlSetNs
+
potential
xmlDebugCheckDocument
+xmlValidGetPotentialChildren
+
potentially
_xmlURI
+
practice
xmlParseVersionNum
+
pre-interned
_xmlParserCtxt
+
preallocated
xmlBuildQName
+
precede
xmlParseEntityRef
+xmlParsePEReference
+xmlParserHandlePEReference
+xmlXPathLeading
+xmlXPathLeadingSorted
+xmlXPathNodeLeading
+xmlXPathNodeLeadingSorted
+
preceded
xmlXPathStringFunction
+
precedes
xmlXPathSubstringBeforeFunction
+
preceding
_xmlXPathParserContext
+xmlXPathNextPreceding
+xmlXPathNextPrecedingSibling
+
preceding-sibling
xmlXPathNextPrecedingSibling
+
precisely
xmlXPathSubstringFunction
+
precompiled
_xmlXPathParserContext
+xmlPatternFromRoot
+xmlPatternGetStreamCtxt
+xmlPatternMatch
+xmlPatternMaxDepth
+xmlPatternMinDepth
+xmlPatternStreamable
+xmlRegNewExecCtxt
+xmlRelaxNGNewValidCtxt
+xmlSchemaNewValidCtxt
+xmlSchematronNewValidCtxt
+xmlTextReaderRelaxNGSetSchema
+xmlTextReaderSetSchema
+xmlXPathDebugDumpCompExpr
+
precomputed
xmlSchemaCopyValue
+xmlSchemaGetCanonValue
+xmlSchemaGetCanonValueWhtsp
+xmlSchemaValidateFacet
+xmlSchemaValidateFacetWhtsp
+xmlSchemaValidateLengthFacet
+xmlSchemaValidateLengthFacetWhtsp
+
predefined
XML_XML_NAMESPACE
+xmlCleanupPredefinedEntities
+xmlEncodeEntitiesReentrant
+xmlEncodeSpecialChars
+xmlGetDocEntity
+xmlGetPredefinedEntity
+xmlInitializePredefinedEntities
+xmlParseReference
+xmlSchemaValPredefTypeNode
+xmlSchemaValPredefTypeNodeNoNorm
+xmlSchemaValidatePredefinedType
+
predicate
xmlXPathEvalPredicate
+xmlXPathEvaluatePredicateResult
+xmlXPtrEvalRangePredicate
+
preferably
xmlInitializeCatalog
+xmlLoadCatalog
+xmlLoadCatalogs
+xmlNewPI
+
preference
xmlCatalogGetDefaults
+xmlCatalogSetDefaultPrefer
+xmlCatalogSetDefaults
+
prefixes
xmlC14NDocDumpMemory
+xmlC14NDocSave
+xmlC14NDocSaveTo
+xmlC14NExecute
+xmlDOMWrapAdoptNode
+xmlDOMWrapCloneNode
+xmlDOMWrapReconcileNamespaces
+
preparing
xmlCleanupParser
+
preparsed
xmlReaderNewWalker
+xmlReaderWalker
+xmlRelaxNGNewDocParserCtxt
+xmlSchemaNewDocParserCtxt
+xmlSchematronNewDocParserCtxt
+
prepend
xmlValidGetValidElements
+
present
xmlBufferCreateStatic
+xmlDictLookup
+xmlDictQLookup
+xmlGetUTF8Char
+xmlNewNs
+xmlTextReaderConstValue
+xmlTextReaderValue
+xmlValidateDocument
+xmlValidateDtd
+xmlValidateOneElement
+
preserve
XML_SCHEMAS_FACET_PRESERVE
+XML_SCHEMAS_TYPE_WHITESPACE_PRESERVE
+_xmlParserCtxt
+xmlNodeGetSpacePreserve
+xmlNodeSetSpacePreserve
+xmlParserInputGrow
+xmlTextReaderPreserve
+xmlTextReaderPreservePattern
+
preserved
HTML_PRESERVE_NODE
+xmlNewTextChild
+xmlParserInputBufferGrow
+
preserving
xmlNodeGetSpacePreserve
+xmlNodeSetSpacePreserve
+
prev
xmlValidGetValidElements
+
prevent
_xmlParserCtxt
+
previous
_xmlAttr
+_xmlAttribute
+_xmlDoc
+_xmlDtd
+_xmlElement
+_xmlEntity
+_xmlNode
+htmlHandleOmittedElem
+htmlParseElement
+xmlAddPrevSibling
+xmlBufferDetach
+xmlCatalogSetDebug
+xmlCatalogSetDefaultPrefer
+xmlDeregisterNodeDefault
+xmlDictSetLimit
+xmlKeepBlanksDefault
+xmlLineNumbersDefault
+xmlPedanticParserDefault
+xmlPreviousElementSibling
+xmlPushInput
+xmlSAXDefaultVersion
+xmlSubstituteEntitiesDefault
+xmlXPathAxisFunc
+
primitive
XML_SCHEMAS_TYPE_BUILTIN_PRIMITIVE
+xmlXPathConvertFunc
+
print
xmlShellPrintNode
+xmlSnprintfElementContent
+xmlSprintfElementContent
+
printed
htmlNodeDump
+htmlNodeDumpFile
+htmlNodeDumpFileFormat
+htmlNodeDumpFormatOutput
+htmlNodeDumpOutput
+xmlBufNodeDump
+xmlElemDump
+xmlNodeDump
+xmlNodeDumpOutput
+
prior
xmlSetupParserForBuffer
+
private
xmlCatalogLocalResolve
+xmlCatalogLocalResolveURI
+xmlCheckLanguageID
+xmlRelaxParserSetFlag
+
privateuse
xmlCheckLanguageID
+
problem
xmlParseBalancedChunkMemory
+xmlParseBalancedChunkMemoryRecover
+xmlParseCtxtExternalEntity
+xmlParseExternalEntity
+xmlRelaxNGValidateFullElement
+xmlRelaxNGValidatePopElement
+xmlRelaxNGValidatePushCData
+xmlRelaxNGValidatePushElement
+xmlTextReaderGetRemainder
+xmlUTF8Strsub
+xmlValidatePopElement
+xmlValidatePushCData
+xmlValidatePushElement
+
problems
xmlBufferResize
+xmlDebugCheckDocument
+xmlLoadExternalEntity
+xmlValidateDtd
+
procedure
initxmlDefaultSAXHandler
+xmlSAX2InitDefaultSAXHandler
+
process
xmlCleanupParser
+xmlDOMWrapAdoptNode
+xmlDOMWrapCloneNode
+xmlDOMWrapReconcileNamespaces
+xmlDecodeEntities
+xmlNewTextReaderFilename
+xmlParseAttValue
+xmlParseEntityRef
+xmlRelaxNGNewDocParserCtxt
+xmlSchemaNewDocParserCtxt
+xmlSchematronNewDocParserCtxt
+xmlSkipBlankChars
+xmlStringDecodeEntities
+xmlStringLenDecodeEntities
+xmlValidCtxtNormalizeAttributeValue
+xmlValidNormalizeAttributeValue
+
processed
_xmlParserCtxt
+startDocument
+startDocumentSAXFunc
+startElement
+startElementSAXFunc
+xmlBuildURI
+xmlParseAttValue
+xmlSAX2StartDocument
+xmlSAX2StartElement
+xmlTextReaderRelaxNGSetSchema
+xmlTextReaderRelaxNGValidate
+xmlTextReaderRelaxNGValidateCtxt
+xmlTextReaderSchemaValidate
+xmlTextReaderSchemaValidateCtxt
+xmlTextReaderSetSchema
+
processing-instruction
xmlXPathIsNodeType
+
processing-instruction-node
xmlStreamPushNode
+
processing-instruction-nodes
xmlStreamWantsAnyNode
+
processor
xmlCurrentChar
+xmlParseAttValue
+xmlParseEntityRef
+xmlValidCtxtNormalizeAttributeValue
+xmlValidNormalizeAttributeValue
+
procgressed
xmlTextReaderGetRemainder
+
produce
xmlCharEncodingOutputFunc
+xmlStringGetNodeList
+xmlStringLenGetNodeList
+
produced
xmlCharEncodingOutputFunc
+xmlCurrentChar
+
producing
xmlCheckUTF8
+
production:
xmlCheckLanguageID
+
productions
xmlCheckLanguageID
+
program
xmlXPtrNewContext
+
programs
htmlInitAutoClose
+xmlInitParser
+
progresses
xmlRegNewExecCtxt
+
progressive
_xmlParserCtxt
+xmlAllocParserInputBuffer
+xmlOutputBufferCreateBuffer
+xmlOutputBufferCreateFd
+xmlOutputBufferCreateFile
+xmlOutputBufferCreateFilename
+xmlOutputBufferCreateIO
+xmlParserInputBufferCreateFd
+xmlParserInputBufferCreateFile
+xmlParserInputBufferCreateFilename
+xmlParserInputBufferCreateIO
+xmlParserInputBufferCreateMem
+xmlParserInputBufferCreateStatic
+xmlParserInputBufferPush
+xmlRegNewExecCtxt
+
prohibited
XML_SCHEMAS_ATTR_USE_PROHIBITED
+
projects
xmlXPathIsInf
+xmlXPathIsNaN
+
prolog
xmlParseDocument
+
prompt
xmlShellReadlineFunc
+
proper
xmlValidateAttributeValue
+
properly
xmlParseElementChildrenContentDecl
+xmlParseMarkupDecl
+xmlReconciliateNs
+
properties
_xmlNode
+xmlAddChild
+xmlAddNextSibling
+xmlAddPrevSibling
+xmlCopyNode
+xmlDocCopyNode
+xmlTextReaderRead
+xmlTextReaderSetParserProp
+
property
_xmlAttr
+_xmlDtd
+xmlAddChild
+xmlFreePropList
+xmlNewDocProp
+xmlNewNsProp
+xmlNewNsPropEatName
+xmlNewProp
+xmlTextReaderGetParserProp
+
protocol
xmlNanoFTPCleanup
+xmlNanoFTPInit
+xmlNanoFTPScanProxy
+xmlNanoFTPUpdateURL
+xmlNanoHTTPCleanup
+xmlNanoHTTPInit
+xmlNanoHTTPScanProxy
+
prototype
xlinkExtendedLinkFunk
+xlinkExtendedLinkSetFunk
+xlinkNodeDetectFunc
+xlinkSimpleLinkFunk
+
provenance
xmlEntityReferenceFunc
+
provide
INVALID_SOCKET
+SOCKET
+xmlBufNodeDump
+xmlDocDumpFormatMemory
+xmlDocDumpFormatMemoryEnc
+xmlDocFormatDump
+xmlInputMatchCallback
+xmlNodeDump
+xmlNodeDumpOutput
+xmlOutputMatchCallback
+xmlSaveFormatFile
+xmlSaveFormatFileEnc
+xmlSchemaValidateSetFilename
+xmlSchemaValidateSetLocator
+xmlSchemaValidateStream
+xmlUTF8Strloc
+xmlUTF8Strpos
+
provides
endElementNsSAX2Func
+startElementNsSAX2Func
+xmlByteConsumed
+xmlExpCtxtNbCons
+xmlExpCtxtNbNodes
+xmlSAX2EndElementNs
+xmlSAX2StartElementNs
+xmlTextReaderByteConsumed
+
providing
INPUT_CHUNK
+
provoked
xmlCheckUTF8
+
proximity
_xmlXPathContext
+
proxy
xmlNanoFTPCleanup
+xmlNanoFTPInit
+xmlNanoFTPProxy
+xmlNanoFTPScanProxy
+xmlNanoHTTPInit
+xmlNanoHTTPScanProxy
+
prune
xmlReplaceNode
+
pthread_t
xmlGetThreadId
+
pthreads
xmlGetThreadId
+
publicID
xmlParseExternalID
+
pull
xmlParserInputBufferGrow
+
pure
xmlParseCDSect
+
purposes
xmlXPathDebugDumpObject
+
push
LIBXML_PUSH_ENABLED
+_xmlParserCtxt
+docbCreatePushParserCtxt
+htmlCreatePushParserCtxt
+xmlCreatePushParserCtxt
+xmlCtxtResetPush
+xmlParserInputBufferPush
+xmlStreamPop
+xmlXPathEvalExpr
+
pushed
xmlRegExecErrInfo
+xmlStreamPushNode
+xmlStreamWantsAnyNode
+xmlXPathFunction
+
pushing
xmlParsePEReference
+
put
xmlCatalogAdd
+
putative
xmlCheckUTF8
+
pwd
xmlShellPwd
+

A-B +C-C +D-E +F-I +J-N +O-P +Q-R +S-S +T-U +V-X +Y-a +b-b +c-c +d-d +e-e +f-f +g-h +i-i +j-l +m-m +n-n +o-o +p-p +q-r +s-s +t-t +u-v +w-w +x-x +y-z +

Daniel Veillard

diff --git a/doc/APIchunk23.html b/doc/APIchunk23.html new file mode 100644 index 0000000..16c7c21 --- /dev/null +++ b/doc/APIchunk23.html @@ -0,0 +1,668 @@ + + +API Alphabetic Index q-r for libxml2
Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
Made with Libxml2 Logo

The XML C parser and toolkit of Gnome

API Alphabetic Index q-r for libxml2

Developer Menu
API Indexes
Related links

A-B +C-C +D-E +F-I +J-N +O-P +Q-R +S-S +T-U +V-X +Y-a +b-b +c-c +d-d +e-e +f-f +g-h +i-i +j-l +m-m +n-n +o-o +p-p +q-r +s-s +t-t +u-v +w-w +x-x +y-z +

Letter q:

qualified
XML_SCHEMAS_QUALIF_ATTR
+XML_SCHEMAS_QUALIF_ELEM
+xmlGetDtdQAttrDesc
+xmlNamespaceParseQName
+xmlSplitQName
+xmlSplitQName2
+xmlSplitQName3
+xmlTextReaderConstName
+xmlTextReaderGetAttribute
+xmlTextReaderMoveToAttribute
+xmlTextReaderName
+xmlValidatePopElement
+xmlValidatePushElement
+xmlXPathParseNCName
+
query
_xmlURI
+
quot
xmlParseEntityRef
+xmlParseSDDecl
+xmlParserHandleReference
+
quotation
xmlTextReaderQuoteChar
+
quote
docbEncodeEntities
+htmlEncodeEntities
+xmlBufferWriteQuotedString
+xmlTextWriterSetQuoteChar
+
quoted
xmlBufferWriteQuotedString
+
quotes
xmlParseQuotedString
+
quoting
xmlTextWriterSetQuoteChar
+

Letter r:

raise
XP_ERROR
+XP_ERROR0
+
raised
_xmlError
+xmlCheckHTTPInput
+xmlNanoFTPUpdateURL
+xmlStructuredErrorFunc
+xmlXPathCheckError
+
range
IS_BYTE_CHAR
+xmlAutomataNewCounterTrans
+xmlBufferAdd
+xmlBufferAddHead
+xmlCharInRange
+xmlExpNewRange
+xmlTextReaderNormalization
+xmlXPathNodeSetItem
+xmlXPtrLocationSetAdd
+xmlXPtrLocationSetDel
+xmlXPtrLocationSetRemove
+xmlXPtrNewCollapsedRange
+xmlXPtrNewLocationSetNodes
+xmlXPtrNewRange
+xmlXPtrNewRangeNodeObject
+xmlXPtrNewRangeNodePoint
+xmlXPtrNewRangeNodes
+xmlXPtrNewRangePointNode
+xmlXPtrNewRangePoints
+
range-to
xmlXPtrRangeToFunction
+
ranges
_xmlChRangeGroup
+xmlXPtrFreeLocationSet
+xmlXPtrLocationSetMerge
+
rangesets
xmlXPtrLocationSetMerge
+
rather
xmlTextReaderIsNamespaceDecl
+
ratio
xmlGetDocCompressMode
+xmlSetCompressMode
+xmlSetDocCompressMode
+
ration
xmlOutputBufferCreateFilename
+
raw
_xmlParserInputBuffer
+xmlNamespaceParseNCName
+xmlNamespaceParseNSDef
+xmlNamespaceParseQName
+xmlNodeAddContent
+xmlNodeAddContentLen
+xmlParseCDSect
+xmlParserInputBufferGrow
+xmlTextWriterWriteFormatRaw
+xmlTextWriterWriteRaw
+xmlTextWriterWriteVFormatRaw
+
re-entrant
xmlLockLibrary
+xmlNewRMutex
+xmlUnlockLibrary
+
reachable
xmlPatternMaxDepth
+xmlPatternMinDepth
+
reached
xmlRegExecPushString
+xmlRegExecPushString2
+
read-only
xmlDictCreateSub
+
readable
xmlStrEqual
+
reader-
xmlTextReaderGetRemainder
+
reading
xmlSchemaValidateStream
+xmlShell
+
ready
INPUT_CHUNK
+xmlAutomataCompile
+
realloc
_xmlBuffer
+xmlGcMemGet
+xmlGcMemSetup
+xmlMemGet
+xmlMemRealloc
+xmlMemSetup
+xmlReallocFunc
+xmlReallocLoc
+
reallocated
xmlReallocFunc
+xmlStrncat
+
really
HTML_COMMENT_NODE
+HTML_ENTITY_REF_NODE
+HTML_PI_NODE
+HTML_PRESERVE_NODE
+HTML_TEXT_NODE
+htmlEntityLookup
+htmlEntityValueLookup
+xmlBuildRelativeURI
+xmlCreateEntitiesTable
+
reasonable
xmlBuildRelativeURI
+
receive
xmlExpDump
+
received
ftpDataCallback
+xmlNanoHTTPReturnCode
+
receives
xmlParseExternalID
+
receiving
characters
+ignorableWhitespace
+xmlParseExternalID
+xmlSAX2Characters
+xmlSAX2IgnorableWhitespace
+xmlValidGetValidElements
+
reclaim
xmlCleanupParser
+xmlFreeMutex
+xmlFreeRMutex
+
recognized
xmlParseCharEncoding
+
recommendation
xmlDetectCharEncoding
+
recommendation:
xmlValidateAttributeDecl
+xmlValidateElementDecl
+xmlValidateNotationDecl
+xmlValidateOneAttribute
+xmlValidateOneElement
+xmlValidateOneNamespace
+xmlValidateRoot
+
recomputed
xmlBufferAdd
+xmlBufferAddHead
+xmlDictExists
+xmlDictLookup
+
reconciliate
xmlReconciliateNs
+
record
xmlACatalogAdd
+xmlCatalogAdd
+xmlParserAddNodeInfo
+xmlParserFindNodeInfoIndex
+
recover
xmlParseBalancedChunkMemoryRecover
+
recovery
_xmlParserCtxt
+xmlSAXParseDoc
+xmlSAXParseFile
+xmlSAXParseFileWithData
+xmlSAXParseMemory
+xmlSAXParseMemoryWithData
+
recurse
xmlLoadACatalog
+xmlLoadCatalog
+xmlSearchNs
+xmlValidateRoot
+
recursive
htmlNodeDump
+htmlNodeDumpFile
+htmlNodeDumpFileFormat
+htmlNodeDumpFormatOutput
+htmlNodeDumpOutput
+htmlParseElement
+xmlBufNodeDump
+xmlCopyDoc
+xmlCopyEnumeration
+xmlCopyNode
+xmlCopyNodeList
+xmlDebugDumpDocument
+xmlDebugDumpDocumentHead
+xmlDebugDumpNode
+xmlDebugDumpNodeList
+xmlDebugDumpOneNode
+xmlDocCopyNode
+xmlDocCopyNodeList
+xmlElemDump
+xmlFreeEnumeration
+xmlFreeNode
+xmlFreeNodeList
+xmlNewRMutex
+xmlNodeDump
+xmlNodeDumpOutput
+xmlParseElement
+xmlParsePEReference
+xmlParserHandlePEReference
+
recursively
xmlLoadACatalog
+xmlParseAttValue
+
redeclared
xmlReconciliateNs
+
redefined
XML_SCHEMAS_ATTRGROUP_REDEFINED
+XML_SCHEMAS_TYPE_REDEFINED
+
redefinition
xmlErrMemory
+
redir
xmlNanoHTTPMethodRedir
+
redirected
xmlNanoHTTPMethodRedir
+xmlNanoHTTPOpenRedir
+xmlNanoHTTPRedir
+
redirection
xmlCheckHTTPInput
+xmlNanoHTTPRedir
+
reentrant
htmlInitAutoClose
+xmlEncodeEntitiesReentrant
+xmlEncodeSpecialChars
+xmlFreeRMutex
+xmlInitParser
+xmlNewRMutex
+xmlRMutexLock
+xmlRMutexUnlock
+
ref
XML_SCHEMAS_ATTR_INTERNAL_RESOLVED
+XML_SCHEMAS_ELEM_INTERNAL_RESOLVED
+_xmlEntity
+xmlAddRef
+xmlFreeRefTable
+xmlNewCharRef
+
referenced
xmlLinkGetData
+xmlParseAttValue
+
referencing
xmlGetDocEntity
+xmlGetDtdEntity
+xmlGetParameterEntity
+
referred
xmlParseAttribute
+xmlParseCharRef
+
refs
_xmlDoc
+_xmlParserCtxt
+
refuse
xmlNewNs
+
regex
_xmlSchemaFacet
+
regexp
_xmlElement
+xmlAutomataCompile
+xmlRegExecErrInfo
+xmlRegExecNextValues
+xmlRegExecPushString
+xmlRegExecPushString2
+xmlRegFreeRegexp
+xmlRegNewExecCtxt
+xmlRegexpPrint
+
regexps
xmlExpParse
+
region
xmlCheckLanguageID
+
register
xmlXPathRegisterVariableLookup
+
registered
xmlCheckLanguageID
+xmlCtxtGetLastError
+xmlCtxtResetLastError
+xmlFindCharEncodingHandler
+xmlGetCharEncodingHandler
+xmlGetLastError
+xmlPopInputCallbacks
+xmlRegisterInputCallbacks
+xmlRegisterOutputCallbacks
+xmlResetLastError
+xmlSearchNs
+xmlTextReaderGetErrorHandler
+xmlXPathRegisteredFuncsCleanup
+xmlXPathRegisteredNsCleanup
+xmlXPathRegisteredVariablesCleanup
+
registers
xmlInitCharEncodingHandlers
+xmlNewCharEncodingHandler
+
registration
XML_SKIP_IDS
+xmlOutputBufferCreateFilenameDefault
+xmlParserInputBufferCreateFilenameDefault
+xmlRegisterNodeDefault
+xmlRegisterNodeFunc
+
regular
LIBXML_REGEXP_ENABLED
+xmlRegExecCallbacks
+xmlRegFreeExecCtxt
+xmlRegNewExecCtxt
+xmlRegexpCompile
+xmlRegexpExec
+xmlRegexpIsDeterminist
+xmlRegexpPrint
+xmlTextReaderIsNamespaceDecl
+
reinitialize
xmlClearNodeInfoSeq
+xmlClearParserCtxt
+
related
LIBXML_UNICODE_ENABLED
+htmlTagLookup
+xmlCleanupParser
+xmlCleanupThreads
+xmlInitThreads
+xmlNanoHTTPClose
+xmlValidCtxtNormalizeAttributeValue
+xmlValidNormalizeAttributeValue
+
relationships
_htmlElemDesc
+
relative
xmlBuildRelativeURI
+xmlByteConsumed
+xmlTextReaderByteConsumed
+xmlTextReaderGetAttributeNo
+xmlTextReaderMoveToAttributeNo
+xmlUTF8Strloc
+xmlUTF8Strsub
+
relative-ref
xmlParseURIRaw
+xmlParseURIReference
+
relativeURI
xmlParseURI
+
release
xmlClearNodeInfoSeq
+xmlClearParserCtxt
+xmlDecodeEntities
+xmlExpNewOr
+xmlExpNewRange
+xmlExpNewSeq
+xmlUnlockLibrary
+
releases
xmlTextReaderClose
+
reliable
xmlSaveToFilename
+
rely
xmlParseNamespace
+
remainder
xmlTextReaderGetRemainder
+
remaining
xmlCreatePushParserCtxt
+xmlValidityErrorFunc
+xmlValidityWarningFunc
+
remapped
xmlCharEncOutFunc
+xmlDOMWrapAdoptNode
+xmlDOMWrapCloneNode
+
remote
xmlNanoFTPCwd
+
removal
xmlHashRemoveEntry
+xmlHashRemoveEntry2
+xmlHashRemoveEntry3
+
remove
xmlACatalogRemove
+xmlBufShrink
+xmlBufferShrink
+xmlCatalogRemove
+xmlDecodeEntities
+xmlDocSetRootElement
+xmlEncodeEntities
+xmlHashRemoveEntry
+xmlHashRemoveEntry2
+xmlHashRemoveEntry3
+xmlParseNamespace
+xmlParserInputBufferGrow
+xmlXPathNodeSetRemove
+xmlXPtrLocationSetRemove
+
removed
inputPop
+namePop
+nodePop
+valuePop
+xmlACatalogRemove
+xmlBufShrink
+xmlBufferShrink
+xmlCatalogRemove
+xmlCheckLanguageID
+xmlDOMWrapRemoveNode
+xmlFreeDocElementContent
+xmlFreeElementContent
+xmlHandleEntity
+xmlHashRemoveEntry
+xmlHashRemoveEntry2
+xmlHashRemoveEntry3
+xmlHashUpdateEntry
+xmlHashUpdateEntry2
+xmlHashUpdateEntry3
+xmlNewGlobalNs
+xmlParseNamespace
+xmlParseQuotedString
+xmlXPathTranslateFunction
+
removes
xmlParserInputShrink
+
removing
xmlLoadSGMLSuperCatalog
+
rename
_xmlError
+
repeat
xmlXPathAxisFunc
+
repeated
xmlExpNewRange
+
repetition
xmlExpNewRange
+
replace
XML_SCHEMAS_FACET_REPLACE
+XML_SCHEMAS_TYPE_WHITESPACE_REPLACE
+_xmlParserCtxt
+xmlNodeListGetRawString
+xmlNodeListGetString
+xmlValidGetValidElements
+
replaced
xmlHashUpdateEntry
+xmlHashUpdateEntry2
+xmlHashUpdateEntry3
+xmlNewTextChild
+xmlSchemaSAXPlug
+xmlXPathTranslateFunction
+
replacement
xmlACatalogAdd
+xmlCatalogAdd
+xmlEntityReferenceFunc
+xmlParseAttValue
+xmlParseAttribute
+xmlParseElementChildrenContentDecl
+xmlParseMarkupDecl
+
replaces
DEBUG_MEMORY
+
replacing
xmlEncodeEntitiesReentrant
+xmlEncodeSpecialChars
+xmlParseAttValue
+xmlValidCtxtNormalizeAttributeValue
+xmlValidNormalizeAttributeValue
+xmlXPathNormalizeFunction
+
reporting
INPUT_CHUNK
+_xmlXPathContext
+xmlSchemaValidateSetFilename
+xmlStructuredErrorFunc
+
reports
docbCreatePushParserCtxt
+htmlCreatePushParserCtxt
+xmlCleanupParser
+xmlCleanupThreads
+xmlCreatePushParserCtxt
+
repr
xmlSchemaValidateFacet
+xmlSchemaValidateFacetWhtsp
+xmlSchemaValidateLengthFacet
+xmlSchemaValidateLengthFacetWhtsp
+xmlSchemaValidateListSimpleTypeFacet
+
representation
_htmlElemDesc
+xmlSchemaGetCanonValue
+xmlSchemaGetCanonValueWhtsp
+
representations
xmlNewTextChild
+xmlSchemaGetCanonValue
+
represented
xmlParseCharData
+xmlXPathStringFunction
+
represented:
_htmlElemDesc
+
representing
xmlMemBlocks
+xmlMemUsed
+
request
xmlIOHTTPOpenW
+xmlNanoHTTPMethod
+xmlNanoHTTPMethodRedir
+xmlNanoHTTPOpen
+xmlNanoHTTPOpenRedir
+xmlNanoHTTPReturnCode
+
requested
xmlDOMWrapAcquireNsFunction
+xmlExternalEntityLoader
+xmlHasFeature
+xmlIsID
+xmlMallocFunc
+xmlParserInputBufferCreateFilenameFunc
+xmlReallocFunc
+
requests
xmlRegisterHTTPPostCallbacks
+
required
XML_SCHEMAS_ATTR_USE_REQUIRED
+htmlRequiredAttrs
+xmlCatalogSetDebug
+xmlSchemaCollapseString
+xmlSchemaWhiteSpaceReplace
+xmlXPathStringFunction
+
requires
_htmlElemDesc
+xmlC14NDocSaveTo
+xmlC14NExecute
+xmlRelaxNGValidatePushElement
+
requred
xmlC14NDocSave
+
reserved
xmlCheckLanguageID
+xmlNewTextChild
+xmlURIEscapeStr
+
reset
initGenericErrorDefaultFunc
+xmlBufferDetach
+xmlCtxtReadFd
+xmlNodeSetBase
+xmlNodeSetName
+xmlNodeSetSpacePreserve
+xmlReadFd
+xmlReaderForFd
+xmlReaderNewFd
+xmlSetGenericErrorFunc
+xmlSetNsProp
+xmlSetProp
+xmlSetStructuredErrorFunc
+xmlStreamPush
+xmlStreamPushAttr
+xmlStreamPushNode
+
resides
xmlTextReaderConstXmlLang
+xmlTextReaderXmlLang
+
resize
xmlBufferResize
+
resolution
resolveEntity
+resolveEntitySAXFunc
+xmlACatalogResolve
+xmlACatalogResolveURI
+xmlCatalogLocalResolve
+xmlCatalogLocalResolveURI
+xmlCatalogResolve
+xmlCatalogResolveURI
+xmlCatalogSetDefaultPrefer
+xmlNoNetExternalEntityLoader
+xmlSAX2ResolveEntity
+
resolveEntity
resolveEntity
+resolveEntitySAXFunc
+
resolved
XML_SCHEMAS_ATTR_INTERNAL_RESOLVED
+XML_SCHEMAS_ELEM_INTERNAL_RESOLVED
+xmlTextReaderLookupNamespace
+
resolver
xmlGetExternalEntityLoader
+xmlSetExternalEntityLoader
+
resources
xmlClearParserCtxt
+xmlFreeMutex
+xmlFreeRMutex
+xmlFreeTextReader
+xmlFreeTextWriter
+xmlOutputBufferClose
+xmlRelaxNGFreeParserCtxt
+xmlRelaxNGFreeValidCtxt
+xmlSchemaFreeParserCtxt
+xmlSchemaFreeValidCtxt
+xmlSchematronFreeParserCtxt
+xmlSchematronFreeValidCtxt
+xmlTextReaderClose
+xmlXIncludeSetFlags
+
resp
xmlNodeSetContent
+xmlNodeSetContentLen
+
respect
xmlExpStringDerive
+
respecting
xmlValidGetValidElements
+
responsability
xmlNewEntity
+
response
xmlNanoFTPCheckResponse
+xmlNanoFTPGetResponse
+xmlNanoHTTPContentLength
+
responsible
xmlC14NDocDumpMemory
+xmlCanonicPath
+xmlPathToURI
+
restored
xmlSchemaSAXUnplug
+xmlTextReaderSetErrorHandler
+xmlTextReaderSetStructuredErrorHandler
+xmlXPathNodeEval
+
restrict
xmlParseExternalID
+
restriction
XML_SCHEMAS_BLOCK_DEFAULT_RESTRICTION
+XML_SCHEMAS_ELEM_BLOCK_RESTRICTION
+XML_SCHEMAS_ELEM_FINAL_RESTRICTION
+XML_SCHEMAS_FINAL_DEFAULT_RESTRICTION
+XML_SCHEMAS_TYPE_BLOCK_RESTRICTION
+XML_SCHEMAS_TYPE_DERIVATION_METHOD_RESTRICTION
+XML_SCHEMAS_TYPE_FINAL_RESTRICTION
+
results
xmlXPathEqualValues
+xmlXPathNotEqualValues
+
retValue
xmlSchemaGetCanonValue
+
retrieve
xmlGetGlobalState
+xmlNanoFTPGet
+xmlNanoFTPGetSocket
+
retrieved
xmlHashAddEntry
+xmlHashAddEntry2
+xmlHashAddEntry3
+xmlHashUpdateEntry
+xmlHashUpdateEntry2
+xmlHashUpdateEntry3
+
retry
xmlValidGetValidElements
+
returning
xmlXPathStringFunction
+
reusal
_xmlXPathContext
+
reuse
xmlReconciliateNs
+xmlRegExecPushString
+xmlRegExecPushString2
+
reused
xmlXPathContextSetCache
+
reuses
htmlCtxtReadDoc
+htmlCtxtReadFd
+htmlCtxtReadFile
+htmlCtxtReadIO
+htmlCtxtReadMemory
+xmlCtxtReadDoc
+xmlCtxtReadFd
+xmlCtxtReadFile
+xmlCtxtReadIO
+xmlCtxtReadMemory
+xmlReaderNewDoc
+xmlReaderNewFd
+xmlReaderNewFile
+xmlReaderNewIO
+xmlReaderNewMemory
+xmlReaderNewWalker
+
reusing
xmlXIncludeProcessNode
+
reverse
xmlListReverseSearch
+xmlListReverseWalk
+xmlXPathNextAncestor
+xmlXPathNextAncestorOrSelf
+xmlXPathNextPreceding
+xmlXPathNextPrecedingSibling
+
rewrite
xmlTextReaderGetRemainder
+
rfc
xmlCheckLanguageID
+
rfc-editor
xmlCheckLanguageID
+
rfc5646
xmlCheckLanguageID
+
right
xmlAutomataNewCounterTrans
+xmlCheckFilename
+xmlCheckLanguageID
+xmlExpNewOr
+xmlExpNewSeq
+xmlParseCharData
+xmlSetListDoc
+xmlSetTreeDoc
+
role
xlinkSimpleLinkFunk
+
roles
xlinkExtendedLinkFunk
+xlinkExtendedLinkSetFunk
+
rollback
xmlScanName
+
root
externalSubset
+externalSubsetSAXFunc
+internalSubset
+internalSubsetSAXFunc
+xmlDocGetRootElement
+xmlDocSetRootElement
+xmlParseDocTypeDecl
+xmlParseNamespace
+xmlPatternFromRoot
+xmlSAX2ExternalSubset
+xmlSAX2InternalSubset
+xmlShellPwd
+xmlStreamPush
+xmlStreamPushAttr
+xmlStreamPushNode
+xmlValidateRoot
+xmlXPathNewValueTree
+xmlXPathRoot
+
round
xmlXPathRoundFunction
+
routines
docbSAXParseDoc
+docbSAXParseFile
+htmlSAXParseFile
+xmlGcMemSetup
+xmlMemSetup
+xmlParserHandleReference
+xmlSAXParseDoc
+xmlSAXParseEntity
+xmlSAXParseFile
+xmlSAXParseFileWithData
+xmlSAXParseMemory
+xmlSAXParseMemoryWithData
+xmlSAXUserParseFile
+xmlSAXUserParseMemory
+
rule
xmlParseEntityRef
+xmlParseStartTag
+
rules
XML_CAST_FPTR
+XML_SCHEMAS_ANYATTR_STRICT
+XML_SCHEMAS_ANY_STRICT
+xmlXPathSubstringFunction
+
run
_xmlParserCtxt
+xmlByteConsumed
+
running
xmlKeepBlanksDefault
+
runtime
LIBXML_DEBUG_RUNTIME
+XML_MAX_NAMELEN
+XML_MAX_NAME_LENGTH
+xmlMemDisplayLast
+

A-B +C-C +D-E +F-I +J-N +O-P +Q-R +S-S +T-U +V-X +Y-a +b-b +c-c +d-d +e-e +f-f +g-h +i-i +j-l +m-m +n-n +o-o +p-p +q-r +s-s +t-t +u-v +w-w +x-x +y-z +

Daniel Veillard

diff --git a/doc/APIchunk24.html b/doc/APIchunk24.html new file mode 100644 index 0000000..e81f34d --- /dev/null +++ b/doc/APIchunk24.html @@ -0,0 +1,1001 @@ + + +API Alphabetic Index s-s for libxml2
Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
Made with Libxml2 Logo

The XML C parser and toolkit of Gnome

API Alphabetic Index s-s for libxml2

Developer Menu
API Indexes
Related links

A-B +C-C +D-E +F-I +J-N +O-P +Q-R +S-S +T-U +V-X +Y-a +b-b +c-c +d-d +e-e +f-f +g-h +i-i +j-l +m-m +n-n +o-o +p-p +q-r +s-s +t-t +u-v +w-w +x-x +y-z +

Letter s:

s390
XML_CAST_FPTR
+
safe
BAD_CAST
+xmlInitializeCatalog
+xmlLoadCatalog
+xmlLoadCatalogs
+
safety
XML_MAX_DICTIONARY_LIMIT
+XML_MAX_NAME_LENGTH
+XML_MAX_TEXT_LENGTH
+
same
HTML_COMMENT_NODE
+HTML_ENTITY_REF_NODE
+HTML_PI_NODE
+HTML_PRESERVE_NODE
+HTML_TEXT_NODE
+IS_BLANK_CH
+checkNamespace
+xmlParseElementChildrenContentDecl
+xmlParseElementMixedContentDecl
+xmlParseMarkupDecl
+xmlParseStartTag
+xmlReplaceNode
+xmlStrEqual
+xmlStrncatNew
+xmlURIUnescapeString
+xmlXPathCmpNodes
+xmlXPathIdFunction
+xmlXPathLangFunction
+xmlXPathNextAncestorOrSelf
+xmlXPathNextFollowing
+xmlXPathNextPreceding
+xmlXPathNormalizeFunction
+xmlXPathSetContextNode
+
save
htmlNodeDumpFileFormat
+xmlGcMemGet
+xmlMemGet
+xmlNanoHTTPFetch
+xmlSaveTree
+xmlShell
+xmlShellSave
+
saved
_htmlElemDesc
+xmlNanoHTTPFetch
+xmlNanoHTTPSave
+xmlSaveFormatFileEnc
+
saves
xmlNanoFTPRead
+xmlNanoHTTPRead
+xmlNanoHTTPSave
+xmlShellWrite
+
saving
LIBXML_OUTPUT_ENABLED
+LIBXML_WRITER_ENABLED
+xmlKeepBlanksDefault
+xmlOutputBufferCreateBuffer
+xmlOutputBufferCreateFd
+xmlOutputBufferCreateFile
+xmlOutputBufferCreateFilename
+xmlOutputBufferCreateIO
+xmlSaveClose
+xmlSaveDoc
+xmlSaveFlush
+xmlSaveSetAttrEscape
+xmlSaveSetEscape
+xmlSaveToBuffer
+xmlSaveToFd
+xmlSaveToFilename
+xmlSaveToIO
+xmlSaveTree
+
sax
docbSAXParseDoc
+docbSAXParseFile
+htmlSAXParseDoc
+htmlSAXParseFile
+xmlSAXParseDoc
+xmlSAXParseEntity
+xmlSAXParseFile
+xmlSAXParseFileWithData
+xmlSAXParseMemory
+xmlSAXParseMemoryWithData
+
say
xmlParseElementChildrenContentDecl
+xmlParseMarkupDecl
+
says
xmlParseComment
+
scan
htmlEntityLookup
+htmlEntityValueLookup
+xmlXPathStringEvalNumber
+
scanner
xmlHashScan
+xmlHashScan3
+xmlHashScanFull
+xmlHashScanFull3
+xmlHashScanner
+xmlHashScannerFull
+
scanning
xmlHashScanner
+xmlHashScannerFull
+
scannner
xmlHashScanner
+xmlHashScannerFull
+
schemas
xmlRelaxNGNewDocParserCtxt
+xmlRelaxNGNewMemParserCtxt
+xmlSchemaGetFacetValueAsULong
+xmlSchemaGetValType
+xmlSchemaNewMemParserCtxt
+xmlSchemaValidateDoc
+xmlSchemaValidateFacet
+xmlSchemaValidateFacetWhtsp
+xmlSchemaValidateFile
+xmlSchemaValidateStream
+xmlSchemaValidityLocatorFunc
+xmlSchematronNewMemParserCtxt
+xmlTextReaderRelaxNGValidate
+xmlTextReaderRelaxNGValidateCtxt
+xmlTextReaderSchemaValidate
+xmlTextReaderSchemaValidateCtxt
+
schematron
xmlSchematronValidateDoc
+
scheme
_xmlURI
+xmlBufferSetAllocationScheme
+xmlGetBufferAllocationScheme
+
schemes
xmlParseCharEncoding
+
scope
_xmlXPathContext
+xmlDOMWrapAdoptNode
+xmlDOMWrapCloneNode
+xmlSetNsProp
+xmlSetProp
+xmlTextReaderConstXmlLang
+xmlTextReaderLookupNamespace
+xmlTextReaderXmlLang
+
scoping
xmlNewGlobalNs
+
script
htmlIsScriptAttribute
+xmlCheckLanguageID
+
search
XML_SCHEMAS_ELEM_CIRCULAR
+_xmlXPathAxis
+xmlCharInRange
+xmlGetDtdAttrDesc
+xmlGetDtdElementDesc
+xmlGetDtdNotationDesc
+xmlGetDtdQAttrDesc
+xmlGetDtdQElementDesc
+xmlListReverseSearch
+xmlListSearch
+xmlSearchNs
+xmlStrcasestr
+xmlStrchr
+xmlStrstr
+
searched
xmlDictCreateSub
+
section
HTML_PRESERVE_NODE
+xmlBuildURI
+xmlCatalogSetDefaultPrefer
+xmlParseCharData
+xmlParseCharEncoding
+xmlTextWriterEndCDATA
+xmlTextWriterStartCDATA
+
sections
xmlKeepBlanksDefault
+xmlNodeGetBase
+
seems
xmlNamespaceParseNCName
+xmlNamespaceParseNSDef
+xmlNamespaceParseQName
+xmlScanName
+xmlValidateNotationDecl
+
selected
xmlCheckLanguageID
+
selection
LIBXML_PATTERN_ENABLED
+
selects
xmlXPathIdFunction
+
self
xmlXPathNextSelf
+
semantic
xmlAutomataNewNegTrans
+xmlXPathNodeSetFreeNs
+
semantics
xmlXPathContextSetCache
+
sense
xmlCreateEntitiesTable
+
separated
xmlLoadCatalogs
+
separately
xmlSetGenericErrorFunc
+xmlSetStructuredErrorFunc
+xmlValidateAttributeDecl
+xmlValidateOneAttribute
+xmlValidateOneElement
+xmlValidateOneNamespace
+
seq
xmlParseElementChildrenContentDecl
+
sequence
_xmlSchemaFacet
+_xmlSchemaType
+xmlCharEncOutFunc
+xmlClearNodeInfoSeq
+xmlCurrentChar
+xmlExpNewSeq
+xmlExpParse
+xmlGetUTF8Char
+xmlInitNodeInfoSeq
+xmlParseAttValue
+xmlParseBalancedChunkMemory
+xmlParseBalancedChunkMemoryRecover
+xmlParseInNodeContext
+xmlParserAddNodeInfo
+xmlParserFindNodeInfoIndex
+xmlUTF8Strlen
+xmlUTF8Strsize
+xmlUTF8Strsub
+xmlXPathIdFunction
+
sequences
xmlCheckUTF8
+xmlExpParse
+xmlParseAttValue
+xmlValidCtxtNormalizeAttributeValue
+xmlValidNormalizeAttributeValue
+xmlXPathNormalizeFunction
+
sequqnce
xmlExpIsNillable
+
serialization
LIBXML_OUTPUT_ENABLED
+xmlSaveToBuffer
+xmlSaveToFd
+xmlSaveToFilename
+xmlSaveToIO
+xmlShellCat
+xmlShellWrite
+xmlValidatePopElement
+xmlValidatePushElement
+
serialized
xmlTextReaderReadOuterXml
+
serializing
xmlSaveToBuffer
+xmlSaveToFd
+xmlSaveToFilename
+xmlSaveToIO
+
server
_xmlURI
+xmlNanoFTPCheckResponse
+xmlNanoFTPCloseConnection
+xmlNanoFTPConnectTo
+xmlNanoFTPCwd
+xmlNanoFTPDele
+xmlNanoFTPGet
+xmlNanoFTPGetConnection
+xmlNanoFTPGetResponse
+xmlNanoFTPGetSocket
+xmlNanoFTPList
+xmlNanoFTPQuit
+
set:difference
xmlXPathDifference
+
set:distinct
xmlXPathDistinct
+xmlXPathDistinctSorted
+
set:has-same-node
xmlXPathHasSameNodes
+
set:intersection
xmlXPathIntersection
+
set:leading
xmlXPathLeading
+xmlXPathLeadingSorted
+xmlXPathNodeLeading
+xmlXPathNodeLeadingSorted
+
set:trailing
xmlXPathNodeTrailing
+xmlXPathNodeTrailingSorted
+xmlXPathTrailing
+xmlXPathTrailingSorted
+
sets
initxmlDefaultSAXHandler
+xmlGetUTF8Char
+xmlSAX2InitDefaultSAXHandler
+xmlSchemaValidateLengthFacet
+xmlSchemaValidateLengthFacetWhtsp
+xmlXPathDifference
+xmlXPathIntersection
+
setting
xmlSetGenericErrorFunc
+xmlXPathContextSetCache
+
setups
xmlParseEncodingDecl
+
severity
xmlTextReaderErrorFunc
+
sgmlsource
getSystemId
+xmlSAX2GetSystemId
+
shadowed
xmlDOMWrapAdoptNode
+xmlDOMWrapCloneNode
+xmlDOMWrapReconcileNamespaces
+
shall
_xmlParserCtxt
+
shared
LIBXML_MODULE_EXTENSION
+xmlCatalogAdd
+xmlModuleFree
+xmlModuleOpen
+
shares
xmlXPathHasSameNodes
+
shell
DEBUG_MEMORY
+xmlShell
+xmlShellBase
+xmlShellCat
+xmlShellCmd
+xmlShellDir
+xmlShellDu
+xmlShellList
+xmlShellLoad
+xmlShellPwd
+xmlShellReadlineFunc
+xmlShellSave
+xmlShellValidate
+xmlShellWrite
+
shorten
xmlDebugDumpString
+
shortest
xmlCheckLanguageID
+
shorthand
xmlTextReaderConstPrefix
+xmlTextReaderPrefix
+
show
LIBXML_VERSION_EXTRA
+xlinkExtendedLinkFunk
+xmlMemDisplay
+xmlMemShow
+xmlNodeListGetRawString
+xmlNodeListGetString
+xmlShellDu
+
shown
ftpListCallback
+
sibling
_xmlAttr
+_xmlAttribute
+_xmlDoc
+_xmlDtd
+_xmlElement
+_xmlEntity
+_xmlNode
+xmlAddNextSibling
+xmlAddPrevSibling
+xmlNextElementSibling
+xmlPreviousElementSibling
+xmlSchemaValueAppend
+xmlSchemaValueGetNext
+xmlXPathNextPrecedingSibling
+
siblings
xmlAddSibling
+xmlFreeNodeList
+xmlFreePropList
+xmlXPathNextFollowingSibling
+xmlXPathNextPrecedingSibling
+
sign
xmlXPathStringFunction
+
signal
ATTRIBUTE_UNUSED
+_xmlParserCtxt
+
signature
xmlShellCmd
+xmlShellReadlineFunc
+
signs
xmlNewTextChild
+
similar
xmlGetNoNsProp
+xmlNewNs
+xmlShell
+xmlShellPwd
+xmlValidityErrorFunc
+xmlValidityWarningFunc
+xmlXPathNodeSetGetLength
+xmlXPathNodeSetItem
+
simple
XML_SCHEMAS_TYPE_ABSTRACT
+XML_SCHEMAS_TYPE_DERIVATION_METHOD_EXTENSION
+XML_SCHEMAS_TYPE_DERIVATION_METHOD_RESTRICTION
+_xmlSchemaType
+xlinkSimpleLinkFunk
+xmlAttrSerializeTxtContent
+xmlFreeMutex
+xmlHashScanner
+xmlIsRef
+xmlMutexLock
+xmlMutexUnlock
+xmlNewMutex
+xmlSchemaGetBuiltInListSimpleTypeItemType
+xmlSchemaNewStringValue
+xmlSchemaValidateListSimpleTypeFacet
+
simpleType
XML_SCHEMAS_TYPE_FINAL_DEFAULT
+XML_SCHEMAS_TYPE_FINAL_LIST
+XML_SCHEMAS_TYPE_FINAL_RESTRICTION
+XML_SCHEMAS_TYPE_FINAL_UNION
+XML_SCHEMAS_TYPE_VARIETY_ABSENT
+XML_SCHEMAS_TYPE_VARIETY_ATOMIC
+XML_SCHEMAS_TYPE_VARIETY_LIST
+XML_SCHEMAS_TYPE_VARIETY_UNION
+
simply
xmlSetGenericErrorFunc
+xmlSetStructuredErrorFunc
+
since
XML_SCHEMAS_TYPE_VARIETY_ABSENT
+xmlBuildRelativeURI
+xmlChildElementCount
+xmlDOMWrapAdoptNode
+xmlDOMWrapCloneNode
+xmlDOMWrapReconcileNamespaces
+xmlFirstElementChild
+xmlLastElementChild
+xmlNextElementSibling
+xmlParseExternalID
+xmlPreviousElementSibling
+xmlRelaxNGNewDocParserCtxt
+xmlSchemaValidateSetLocator
+
single
IS_DIGIT_CH
+XML_MAX_TEXT_LENGTH
+xmlCurrentChar
+xmlParseAttValue
+xmlParseElementMixedContentDecl
+xmlValidCtxtNormalizeAttributeValue
+xmlValidNormalizeAttributeValue
+xmlValidateAttributeDecl
+xmlValidateElementDecl
+xmlValidateNotationDecl
+xmlValidateOneAttribute
+xmlValidateOneElement
+xmlValidateOneNamespace
+xmlXPathNewNodeSet
+xmlXPathNormalizeFunction
+xmlXPtrNewCollapsedRange
+xmlXPtrNewLocationSetNodes
+
single-byte
IS_CHAR_CH
+IS_EXTENDER_CH
+IS_PUBIDCHAR_CH
+
singleton
xmlCheckLanguageID
+
site1
xmlBuildRelativeURI
+
site2
xmlBuildRelativeURI
+
size_t
xmlBufShrink
+
sizes
xmlGetBufferAllocationScheme
+xmlSetBufferAllocationScheme
+
skip
xmlSkipBlankChars
+
skipped
xmlParseElementChildrenContentDecl
+xmlParseElementMixedContentDecl
+xmlSkipBlankChars
+
slot
xmlXPathContextSetCache
+
slots
xmlXPathContextSetCache
+
small
xmlGetBufferAllocationScheme
+
smaller
xmlURIUnescapeString
+
smallest
xmlXPathCeilingFunction
+
socket
INVALID_SOCKET
+xmlCheckFilename
+xmlNanoFTPGetSocket
+
sockets
INVALID_SOCKET
+SOCKET
+
software
LIBXML_TEST_VERSION
+xmlTextReaderNodeType
+
solution
xmlNormalizeWindowsPath
+
some
XML_SKIP_IDS
+characters
+charactersSAXFunc
+ignorableWhitespace
+ignorableWhitespaceSAXFunc
+xmlBuildRelativeURI
+xmlCleanupParser
+xmlCleanupThreads
+xmlGcMemSetup
+xmlGetThreadId
+xmlHandleEntity
+xmlMemSetup
+xmlParseAttributeType
+xmlParseBalancedChunkMemoryRecover
+xmlParserInputDeallocate
+xmlRelaxNGValidatePushCData
+xmlSAX2Characters
+xmlSAX2IgnorableWhitespace
+xmlTextReaderSetParserProp
+xmlValidatePushCData
+xmlXIncludeProcess
+xmlXIncludeProcessFlags
+xmlXIncludeProcessFlagsData
+xmlXIncludeProcessNode
+xmlXIncludeProcessTree
+xmlXIncludeProcessTreeFlags
+xmlXIncludeProcessTreeFlagsData
+
somehow
xmlNodeDump
+
sometimes
xmlCheckLanguageID
+xmlCleanupParser
+xmlCleanupThreads
+xmlExpExpDerive
+
somewhat
xmlCheckLanguageID
+xmlCleanupParser
+
sorted
xmlParserAddNodeInfo
+xmlParserFindNodeInfoIndex
+xmlXPathDistinct
+xmlXPathDistinctSorted
+xmlXPathLeading
+xmlXPathLeadingSorted
+xmlXPathNodeLeading
+xmlXPathNodeLeadingSorted
+xmlXPathNodeTrailing
+xmlXPathNodeTrailingSorted
+xmlXPathTrailing
+xmlXPathTrailingSorted
+
sounds
xmlCheckLanguageID
+
source
_xmlXPathContext
+htmlCtxtReadIO
+htmlGetMetaEncoding
+htmlReadIO
+xlinkExtendedLinkFunk
+xmlCheckFilename
+xmlCopyError
+xmlCtxtReadIO
+xmlNewTextReader
+xmlParserInputBufferCreateFilenameFunc
+xmlReadIO
+xmlReaderForIO
+xmlReaderNewIO
+
sourceDoc
xmlDOMWrapAdoptNode
+xmlDOMWrapCloneNode
+
sourceforge
xmlXPathIsInf
+xmlXPathIsNaN
+
spaces
_xmlParserCtxt
+htmlDocContentDumpFormatOutput
+htmlDocContentDumpOutput
+htmlDocDumpMemoryFormat
+htmlNodeDumpFileFormat
+htmlNodeDumpFormatOutput
+htmlNodeDumpOutput
+htmlSaveFileEnc
+htmlSaveFileFormat
+xmlDocDumpFormatMemory
+xmlDocDumpFormatMemoryEnc
+xmlDocFormatDump
+xmlKeepBlanksDefault
+xmlParseElementChildrenContentDecl
+xmlParseElementMixedContentDecl
+xmlSaveFormatFile
+xmlSaveFormatFileEnc
+xmlSaveFormatFileTo
+xmlSchemaCollapseString
+xmlValidateNCName
+xmlValidateNMToken
+xmlValidateName
+xmlValidateQName
+
span
xmlCurrentChar
+xmlStringCurrentChar
+
spec
xmlCatalogSetDefaultPrefer
+xmlChildElementCount
+xmlFirstElementChild
+xmlLastElementChild
+xmlNextElementSibling
+xmlParseComment
+xmlPreviousElementSibling
+
spec:
IS_BASECHAR
+IS_BLANK
+IS_BYTE_CHAR
+IS_CHAR
+IS_COMBINING
+IS_DIGIT
+IS_EXTENDER
+IS_IDEOGRAPHIC
+IS_LETTER
+IS_PUBIDCHAR
+
special
XML_SKIP_IDS
+XML_XML_ID
+XML_XML_NAMESPACE
+xmlNewChild
+xmlNewDocNode
+xmlNewDocNodeEatName
+xmlNodeAddContent
+xmlNodeAddContentLen
+xmlNodeSetContent
+xmlNodeSetContentLen
+xmlTextWriterWriteRawLen
+
specialized
_xmlDOMWrapCtxt
+xmlGcMemGet
+xmlGcMemSetup
+
specific
XML_CATALOG_PI
+_xmlValidCtxt
+_xmlXPathContext
+xmlNoNetExternalEntityLoader
+xmlParseNamespace
+xmlSchemaIsBuiltInTypeFacet
+
specification
XML_XML_NAMESPACE
+xmlGetThreadId
+xmlTextReaderNormalization
+
specifications
xmlParseSDDecl
+
specify
XML_SCHEMAS_TYPE_BLOCK_DEFAULT
+xmlTextReaderLookupNamespace
+xmlTextReaderStandalone
+
specifying
xmlMallocAtomicLoc
+xmlMallocLoc
+xmlMemMalloc
+xmlMemRealloc
+xmlReallocLoc
+
speed
xmlXPathOrderDocElems
+
speedup
xmlTextReaderConstString
+
split
xmlXPathIdFunction
+
stacked
_xmlXPathParserContext
+xmlPushInput
+
stage
XML_SCHEMAS_TYPE_FIXUP_1
+
stamps
xmlXPathOrderDocElems
+
standalone
_xmlDoc
+_xmlParserCtxt
+_xmlParserInput
+isStandalone
+xmlCurrentChar
+xmlParseSDDecl
+xmlSAX2IsStandalone
+xmlTextReaderStandalone
+
standalone=
_xmlDoc
+xmlParseEntityRef
+xmlParsePEReference
+xmlParseSDDecl
+xmlParserHandlePEReference
+
standalone?
isStandaloneSAXFunc
+
standard
docbParseDocument
+htmlParseDocument
+xmlKeepBlanksDefault
+xmlParseDocument
+xmlXPathSubstringFunction
+
start
_htmlElemDesc
+startDocument
+startDocumentSAXFunc
+startElementNsSAX2Func
+xmlByteConsumed
+xmlDOMWrapAdoptNode
+xmlDOMWrapCloneNode
+xmlExpGetStart
+xmlParseStartTag
+xmlRelaxNGValidatePushElement
+xmlSAX2StartDocument
+xmlSAX2StartElementNs
+xmlSplitQName3
+xmlTextReaderByteConsumed
+xmlValidatePushElement
+xmlXPtrNewLocationSetNodes
+xmlXPtrNewRange
+
start-tag
xmlParseElement
+xmlParseStartTag
+
started
xmlTextWriterWriteDTDExternalEntity
+
starting
xmlAutomataNewAllTrans
+xmlAutomataNewCountTrans
+xmlAutomataNewCountTrans2
+xmlAutomataNewCountedTrans
+xmlAutomataNewCounterTrans
+xmlAutomataNewEpsilon
+xmlAutomataNewNegTrans
+xmlAutomataNewOnceTrans
+xmlAutomataNewOnceTrans2
+xmlAutomataNewTransition
+xmlAutomataNewTransition2
+xmlByteConsumed
+xmlNewCharRef
+xmlNewTextWriterTree
+xmlSaveTree
+xmlSchemaValidateOneElement
+xmlXPathOrderDocElems
+xmlXPathSubstringFunction
+xmlXPtrNewCollapsedRange
+xmlXPtrNewRange
+xmlXPtrNewRangeNodeObject
+xmlXPtrNewRangeNodePoint
+xmlXPtrNewRangeNodes
+xmlXPtrNewRangePointNode
+xmlXPtrNewRangePoints
+
starts
xmlXPathStartsWithFunction
+
starts-with
xmlXPathStartsWithFunction
+
startup
setDocumentLocator
+setDocumentLocatorSAXFunc
+xmlInitializeCatalog
+xmlLoadCatalog
+xmlLoadCatalogs
+xmlSAX2SetDocumentLocator
+
stashed
xmlNanoHTTPAuthHeader
+
stat
xmlCheckFilename
+
stateful
xmlCharEncodingOutputFunc
+
states
_xmlValidCtxt
+
static
xmlXPathOrderDocElems
+
status
xmlTextReaderIsValid
+xmlTextReaderStandalone
+
stderr
xmlSetGenericErrorFunc
+
stdin
xmlParserInputBufferCreateFilename
+
stdout
htmlSaveFile
+xmlOutputBufferCreateFilename
+xmlSaveFile
+xmlSaveFormatFile
+xmlShell
+
step
xmlExpStringDerive
+xmlValidCtxtNormalizeAttributeValue
+xmlValidNormalizeAttributeValue
+xmlValidateDocumentFinal
+xmlValidateDtdFinal
+
steps
xmlNormalizeURIPath
+xmlValidateDocumentFinal
+
still
xmlCheckLanguageID
+xmlCleanupParser
+xmlCleanupThreads
+xmlModuleFree
+xmlNoNetExternalEntityLoader
+xmlParseNamespace
+xmlReconciliateNs
+
stop
xmlListWalker
+
stops
xmlTextReaderGetRemainder
+
storage
xmlUTF8Strsize
+
store
UTF8ToHtml
+UTF8Toisolat1
+docbEncodeEntities
+htmlEncodeEntities
+htmlParseEntityRef
+isolat1ToUTF8
+xmlC14NDocSave
+xmlC14NDocSaveTo
+xmlC14NExecute
+xmlCharEncodingInputFunc
+xmlCharEncodingOutputFunc
+xmlExpGetLanguage
+xmlExpGetStart
+xmlGetFeature
+xmlGetLineNo
+xmlInputReadCallback
+xmlOutputBufferWrite
+xmlOutputBufferWriteEscape
+xmlOutputBufferWriteString
+xmlParseAttribute
+xmlParseEntityValue
+xmlValidGetPotentialChildren
+xmlValidGetValidElements
+
stored
xmlParseElementContentDecl
+xmlParserInputBufferGrow
+xmlParserInputBufferPush
+xmlParserInputBufferRead
+xmlSAXParseFileWithData
+xmlSAXParseMemoryWithData
+xmlXPathOrderDocElems
+
stores
xmlBufNodeDump
+
str
htmlParseEntityRef
+xmlBufferAdd
+
strcasecmp
xmlStrcasecmp
+
strcat
xmlStrcat
+
strchr
xmlStrchr
+
strcmp
xmlStrcmp
+
strdup
xmlCharStrdup
+xmlGcMemGet
+xmlGcMemSetup
+xmlMemGet
+xmlMemSetup
+xmlMemStrdupLoc
+xmlMemoryStrdup
+xmlStrdup
+xmlStrdupFunc
+
streamable
xmlPatternStreamable
+xmlSchemaValidateFile
+
streaming
xmlPatternGetStreamCtxt
+xmlStreamWantsAnyNode
+
streams
_xmlParserCtxt
+xmlSkipBlankChars
+
strict
XML_SCHEMAS_ANYATTR_STRICT
+XML_SCHEMAS_ANY_STRICT
+xmlParseExternalID
+xmlXPathCompareValues
+
string--that
xmlNormalizeURIPath
+
string-length
xmlXPathStringLengthFunction
+
string?
xmlXPathNormalizeFunction
+xmlXPathStringLengthFunction
+
stringi
xmlXPathSubstringAfterFunction
+
strings
_xmlParserCtxt
+xmlDictCreateSub
+xmlDictGetUsage
+xmlExpGetLanguage
+xmlExpGetStart
+xmlExpParse
+xmlGetBufferAllocationScheme
+xmlGetFeaturesList
+xmlPatterncompile
+xmlRegExecErrInfo
+xmlRegExecNextValues
+xmlRegexpCompile
+xmlStrEqual
+xmlStreamPush
+xmlStreamPushAttr
+xmlStreamPushNode
+xmlStrncatNew
+
stripping
xmlXPathNormalizeFunction
+
strncasecmp
xmlStrncasecmp
+
strncat
xmlStrncat
+
strncmp
xmlStrncmp
+
strndup
xmlCharStrndup
+xmlStrndup
+xmlUTF8Strndup
+
strstr
xmlStrcasestr
+xmlStrstr
+
struct
xmlFreeMutex
+xmlFreeURI
+xmlNewMutex
+xmlParserFindNodeInfo
+xmlSchemaGetBuiltInType
+xmlSchemaNewNOTATIONValue
+xmlSchemaNewQNameValue
+xmlSchemaNewStringValue
+
structured
xmlRelaxNGSetValidStructuredErrors
+xmlSchemaSetParserStructuredErrors
+xmlSchemaSetValidStructuredErrors
+xmlSchematronSetValidStructuredErrors
+xmlSetStructuredErrorFunc
+
structures
xmlFreeDoc
+xmlFreeNs
+xmlFreeNsList
+xmlLoadACatalog
+xmlNewRMutex
+xmlNodeDump
+xmlRegFreeExecCtxt
+
struture
xmlRelaxNGParse
+xmlSchemaParse
+xmlSchematronParse
+
stuff
_xmlXPathContext
+xmlParseNamespace
+
style
xmlSAXDefaultVersion
+
sub
xmlExpExpDerive
+
sub-elements
_htmlElemDesc
+
subelement
_htmlElemDesc
+htmlDefaultSubelement
+xmlNewDocElementContent
+xmlNewElementContent
+
subelements
_htmlElemDesc
+
subexpression
xmlExpExpDerive
+xmlExpSubsume
+
subexpressions
xmlExpParse
+
subject
xmlParseSDDecl
+
sublanguage
xmlXPathLangFunction
+
submits
xmlRegisterHTTPPostCallbacks
+
subsequent
xmlIOHTTPOpenW
+xmlSetGenericErrorFunc
+xmlSetStructuredErrorFunc
+
subset?
hasExternalSubsetSAXFunc
+
subsets
xmlGetParameterEntity
+xmlValidateDtdFinal
+
substituion
XML_SCHEMAS_ELEM_BLOCK_SUBSTITUTION
+
substitute
xmlDOMWrapRemoveNode
+
substituted
XML_SUBSTITUTE_BOTH
+XML_SUBSTITUTE_NONE
+XML_SUBSTITUTE_PEREF
+XML_SUBSTITUTE_REF
+xmlBufGetNodeContent
+xmlNodeBufGetContent
+xmlNodeGetContent
+xmlParseEntityValue
+
substituting
xmlSubstituteEntitiesDefault
+
substitutionGroup
XML_SCHEMAS_ELEM_INTERNAL_RESOLVED
+
substitutions
XML_SCHEMAS_ELEM_BLOCK_EXTENSION
+xmlStringDecodeEntities
+xmlStringLenDecodeEntities
+xmlXIncludeProcess
+xmlXIncludeProcessFlags
+xmlXIncludeProcessFlagsData
+xmlXIncludeProcessNode
+xmlXIncludeProcessTree
+xmlXIncludeProcessTreeFlags
+xmlXIncludeProcessTreeFlagsData
+
substitutions:
XML_SCHEMAS_ELEM_BLOCK_RESTRICTION
+XML_SCHEMAS_ELEM_BLOCK_SUBSTITUTION
+
substring
xmlNodeAddContent
+xmlNodeAddContentLen
+xmlStrsub
+xmlUTF8Strsub
+xmlXPathSubstringAfterFunction
+xmlXPathSubstringBeforeFunction
+xmlXPathSubstringFunction
+
substring-after
xmlXPathSubstringAfterFunction
+
substring-before
xmlXPathSubstringBeforeFunction
+
subtag
xmlCheckLanguageID
+
subtags
xmlCheckLanguageID
+
subtraction
xmlXPathSubValues
+
subtree
attribute
+attributeSAXFunc
+xmlFreeDocElementContent
+xmlFreeElementContent
+xmlReconciliateNs
+xmlRelaxNGValidateFullElement
+xmlSaveTree
+xmlSchemaValidateOneElement
+xmlShellDu
+xmlShellWrite
+xmlTextReaderExpand
+xmlTextReaderNext
+xmlTextReaderNextSibling
+xmlValidateElement
+xmlXIncludeProcessNode
+xmlXIncludeProcessTree
+xmlXIncludeProcessTreeFlags
+
succeed
xmlNewTextWriter
+
succeeded
xmlDOMWrapAdoptNode
+xmlDOMWrapCloneNode
+xmlDOMWrapReconcileNamespaces
+xmlHashAddEntry
+xmlHashAddEntry2
+xmlHashAddEntry3
+xmlHashRemoveEntry
+xmlHashRemoveEntry2
+xmlHashRemoveEntry3
+xmlHashUpdateEntry
+xmlHashUpdateEntry2
+xmlHashUpdateEntry3
+xmlParseBalancedChunkMemoryRecover
+xmlSchemaValueAppend
+xmlXPathCompareValues
+xmlXPathContextSetCache
+
succeeds
xmlCheckFilename
+xmlNewTextWriterPushParser
+
successful
xmlACatalogAdd
+xmlACatalogRemove
+xmlBufferAdd
+xmlBufferAddHead
+xmlBufferCCat
+xmlBufferCat
+xmlCatalogAdd
+xmlCatalogConvert
+xmlCatalogRemove
+xmlConvertSGMLCatalog
+xmlGetLineNo
+xmlListPushBack
+xmlListPushFront
+xmlSaveSetAttrEscape
+xmlSaveSetEscape
+xmlTextReaderSetParserProp
+xmlUnsetNsProp
+xmlUnsetProp
+xmlXPathSetContextNode
+
successfully
xmlTextReaderNext
+xmlTextReaderNextSibling
+xmlTextReaderRead
+
succession
xmlAutomataNewCountTrans
+xmlAutomataNewCountTrans2
+xmlAutomataNewOnceTrans
+xmlAutomataNewOnceTrans2
+
successive
xmlAutomataNewCountTrans
+xmlAutomataNewCountTrans2
+xmlAutomataNewOnceTrans
+xmlAutomataNewOnceTrans2
+
sucessors
xmlCheckLanguageID
+
such
xmlNewTextChild
+xmlParseEntityRef
+xmlSetProp
+xmlValidityErrorFunc
+xmlValidityWarningFunc
+xmlXPathLangFunction
+xmlXPathNodeSetFreeNs
+xmlXPathRoundFunction
+
suffix
LIBXML_MODULE_EXTENSION
+
suggested
_htmlElemDesc
+
suitable
xmlNewIOInputStream
+xmlOutputBufferCreateFilenameFunc
+xmlParserInputBufferCreateFilenameFunc
+xmlRegexpCompile
+
sum
xmlXPathSubstringFunction
+xmlXPathSumFunction
+
super
xmlLoadSGMLSuperCatalog
+
super-strict
xmlCheckUTF8
+
supplied
xmlGetRefs
+
supported
xmlDOMWrapAdoptNode
+xmlDOMWrapCloneNode
+xmlDOMWrapRemoveNode
+xmlInitCharEncodingHandlers
+xmlNanoFTPGetConnection
+xmlNodeAddContent
+xmlNodeAddContentLen
+xmlSchemaGetCanonValue
+xmlSchemaGetCanonValueWhtsp
+xmlTextReaderNormalization
+
supposed
xmlIsMixedElement
+xmlNewChild
+xmlNewDocNode
+xmlNewDocNodeEatName
+xmlNodeAddContent
+xmlNodeAddContentLen
+xmlNodeSetContent
+xmlNodeSetContentLen
+xmlStrcat
+xmlStrdup
+
sure
xmlDictCleanup
+xmlSaveClose
+xmlSaveFlush
+xmlURIEscape
+xmlXPathNodeSetAddUnique
+
surprising
xmlRegisterCharEncodingHandler
+
surrogate
IS_CHAR
+
switch
xmlKeepBlanksDefault
+xmlParseReference
+xmlPushInput
+
symbol
xmlModuleSymbol
+
synchronizing
xmlNewMutex
+xmlNewRMutex
+
syntax
xmlParseAttributeType
+
systematically
xmlIsID
+

A-B +C-C +D-E +F-I +J-N +O-P +Q-R +S-S +T-U +V-X +Y-a +b-b +c-c +d-d +e-e +f-f +g-h +i-i +j-l +m-m +n-n +o-o +p-p +q-r +s-s +t-t +u-v +w-w +x-x +y-z +

Daniel Veillard

diff --git a/doc/APIchunk25.html b/doc/APIchunk25.html new file mode 100644 index 0000000..dec65ba --- /dev/null +++ b/doc/APIchunk25.html @@ -0,0 +1,451 @@ + + +API Alphabetic Index t-t for libxml2
Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
Made with Libxml2 Logo

The XML C parser and toolkit of Gnome

API Alphabetic Index t-t for libxml2

Developer Menu
API Indexes
Related links

A-B +C-C +D-E +F-I +J-N +O-P +Q-R +S-S +T-U +V-X +Y-a +b-b +c-c +d-d +e-e +f-f +g-h +i-i +j-l +m-m +n-n +o-o +p-p +q-r +s-s +t-t +u-v +w-w +x-x +y-z +

Letter t:

tag
_htmlElemDesc
+htmlAutoCloseTag
+htmlIsAutoClosed
+htmlTagLookup
+startElement
+startElementSAXFunc
+xmlNodeSetName
+xmlParseEndTag
+xmlParseStartTag
+xmlSAX2StartElement
+xmlTextWriterFullEndElement
+
tagged
isStandalone
+isStandaloneSAXFunc
+xmlNewNsProp
+xmlNewNsPropEatName
+xmlSAX2IsStandalone
+
tags
htmlAutoCloseTag
+htmlGetMetaEncoding
+htmlHandleOmittedElem
+htmlInitAutoClose
+htmlIsAutoClosed
+htmlSetMetaEncoding
+
take
xmlLockLibrary
+
taken
xmlDocSetRootElement
+
takes
xmlSchemaValidateFacetWhtsp
+
tatkes
xmlExpExpDerive
+
tell
XML_COMPLETE_ATTRS
+XML_DETECT_IDS
+XML_SKIP_IDS
+_htmlElemDesc
+
tells
xmlTextReaderPreserve
+xmlTextReaderPreservePattern
+
temporary
_xmlValidCtxt
+_xmlXPathContext
+xmlIOHTTPOpenW
+
terminal
xmlRegExecErrInfo
+xmlRegExecNextValues
+
terminals
xmlExpParse
+
terminated
htmlCtxtReadDoc
+htmlReadDoc
+startElement
+startElementSAXFunc
+xmlBufferCCat
+xmlBufferCat
+xmlCtxtReadDoc
+xmlDocDumpMemory
+xmlExpParse
+xmlGetNsList
+xmlOutputBufferWriteEscape
+xmlOutputBufferWriteString
+xmlParseBalancedChunkMemory
+xmlParseBalancedChunkMemoryRecover
+xmlReadDoc
+xmlReaderForDoc
+xmlReaderNewDoc
+xmlSAX2StartElement
+xmlStrdupFunc
+
termination
xmlStrcat
+xmlStrdup
+
terms
xmlBuildRelativeURI
+
test
xmlParserHandleReference
+xmlXPathEqualValues
+xmlXPathNotEqualValues
+
tested
_xmlParserInput
+xmlDOMWrapAdoptNode
+xmlDOMWrapReconcileNamespaces
+xmlDOMWrapRemoveNode
+
testing
xmlRegexpCompile
+
text-
xmlStreamPushNode
+xmlStreamWantsAnyNode
+
text-node
xmlIsBlankNode
+
textDecl?
xmlParseExternalSubset
+
their
xmlCharEncOutFunc
+xmlEncodeEntities
+xmlEncodeEntitiesReentrant
+xmlLoadCatalogs
+xmlNewTextChild
+xmlNodeListGetRawString
+xmlNodeListGetString
+xmlParseEntityRef
+xmlUnlinkNode
+xmlXPathAddValues
+xmlXPathDivValues
+xmlXPathIdFunction
+xmlXPathModValues
+xmlXPathMultValues
+xmlXPathSubValues
+xmlXPathValueFlipSign
+
them
xmlExpGetLanguage
+xmlExpGetStart
+xmlExpNewOr
+xmlExpNewSeq
+xmlNanoFTPRead
+xmlNanoHTTPRead
+xmlParseAttValue
+xmlParseAttributeType
+xmlRegExecErrInfo
+xmlRegExecNextValues
+
these
_htmlElemDesc
+xmlCheckUTF8
+xmlParseSDDecl
+
they
_htmlElemDesc
+xmlBufferDetach
+xmlCreatePushParserCtxt
+xmlStrEqual
+xmlStrQEqual
+xmlStrcat
+xmlStrdup
+xmlUnlinkNode
+
third
xmlHashAddEntry3
+xmlHashLookup3
+xmlHashQLookup3
+xmlHashRemoveEntry3
+xmlHashScan3
+xmlHashScanFull3
+xmlHashScannerFull
+xmlHashUpdateEntry3
+xmlXPathSubstringFunction
+xmlXPathTranslateFunction
+
this?
_xmlSchemaType
+
those
xmlCheckLanguageID
+xmlKeepBlanksDefault
+xmlParseSDDecl
+xmlSchemaValidateSetLocator
+xmlSearchNs
+xmlXPathSubstringFunction
+
though
xmlDocDumpMemory
+xmlNoNetExternalEntityLoader
+
thread
LIBXML_THREAD_ENABLED
+xmlCleanupParser
+xmlCleanupThreads
+xmlGetGlobalState
+xmlGetLastError
+xmlGetThreadId
+xmlInitThreads
+xmlInitializeCatalog
+xmlIsMainThread
+xmlLoadCatalog
+xmlLoadCatalogs
+xmlSetGenericErrorFunc
+xmlSetStructuredErrorFunc
+
through
xmlBuildRelativeURI
+xmlCreatePushParserCtxt
+xmlDecodeEntities
+xmlNormalizeURIPath
+
thumblers
xmlShellPwd
+
thus
xmlDOMWrapRemoveNode
+xmlNewRMutex
+xmlXPathNextAncestor
+xmlXPathNextAncestorOrSelf
+xmlXPathNextDescendantOrSelf
+
tight
xmlGetBufferAllocationScheme
+
time
xmlExpExpDerive
+xmlXPathAxisFunc
+
title
xlinkSimpleLinkFunk
+
titles
xlinkExtendedLinkFunk
+xlinkExtendedLinkSetFunk
+
todo:
_xmlError
+
token
xmlAutomataNewCountTrans
+xmlAutomataNewCountTrans2
+xmlAutomataNewOnceTrans
+xmlAutomataNewOnceTrans2
+xmlFreeMutex
+xmlMutexLock
+xmlMutexUnlock
+xmlNewMutex
+xmlRegExecCallbacks
+xmlRegExecPushString
+xmlRegExecPushString2
+
token_r
xmlNewRMutex
+xmlRMutexLock
+xmlRMutexUnlock
+
tokens
xmlExpGetLanguage
+xmlExpGetStart
+xmlParseEnumerationType
+xmlXPathIdFunction
+
too
DEBUG_MEMORY
+htmlNodeDump
+htmlNodeDumpFile
+htmlNodeDumpFileFormat
+htmlNodeDumpFormatOutput
+htmlNodeDumpOutput
+xmlBufNodeDump
+xmlCheckLanguageID
+xmlCopyDoc
+xmlElemDump
+xmlFreeNode
+xmlFreeNodeList
+xmlFreeProp
+xmlFreePropList
+xmlGetDocEntity
+xmlNodeDump
+xmlNodeDumpOutput
+xmlParseElementMixedContentDecl
+xmlRemoveProp
+
top
CAST_TO_BOOLEAN
+CAST_TO_NUMBER
+CAST_TO_STRING
+CHECK_TYPE
+CHECK_TYPE0
+XML_SCHEMAS_ELEM_TOPLEVEL
+inputPop
+inputPush
+namePop
+namePush
+nodePop
+nodePush
+valuePop
+valuePush
+xmlNamespaceParseNCName
+xmlNamespaceParseNSDef
+xmlNamespaceParseQName
+xmlPopInputCallbacks
+xmlPushInput
+xmlReconciliateNs
+xmlSaveTree
+xmlSetTreeDoc
+
total
_xmlOutputBuffer
+xmlGetFeaturesList
+xmlUTF8Strsub
+
touch
_xmlParserCtxt
+
track
xmlEntityReferenceFunc
+
tracking
xmlParserPrintFileContext
+
trailing
xmlParseAttValue
+xmlValidCtxtNormalizeAttributeValue
+xmlValidNormalizeAttributeValue
+xmlXPathNodeTrailing
+xmlXPathNodeTrailingSorted
+xmlXPathNormalizeFunction
+xmlXPathTrailing
+xmlXPathTrailingSorted
+
trancoding
xmlSaveFileTo
+xmlSaveFormatFileTo
+
transaction
xmlNanoHTTPSave
+
transcoding
UTF8ToHtml
+UTF8Toisolat1
+docbEncodeEntities
+htmlEncodeEntities
+xmlCharEncFirstLine
+xmlCharEncInFunc
+xmlCharEncOutFunc
+xmlCharEncodingInputFunc
+xmlCharEncodingOutputFunc
+xmlOutputBufferWrite
+xmlOutputBufferWriteEscape
+xmlOutputBufferWriteString
+xmlParserInputBufferGrow
+xmlParserInputBufferPush
+xmlParserInputBufferRead
+
transfered
xmlParsePI
+
transformation
xmlCharEncCloseFunc
+xmlCharEncFirstLine
+xmlCharEncInFunc
+xmlCharEncOutFunc
+
transformed
xmlRelaxNGDumpTree
+
transitions
xmlAutomataNewAllTrans
+xmlRegExecErrInfo
+xmlRegExecNextValues
+
translate
xmlXPathTranslateFunction
+
translation
xmlURIUnescapeString
+
transmit
errorSAXFunc
+fatalErrorSAXFunc
+warningSAXFunc
+xmlParserError
+xmlParserValidityError
+xmlParserValidityWarning
+xmlParserWarning
+
transport
xmlNanoFTPClose
+
traversal
xmlChildElementCount
+xmlFirstElementChild
+xmlLastElementChild
+xmlNextElementSibling
+xmlPreviousElementSibling
+xmlXPathAxisFunc
+xmlXPathNextAncestor
+xmlXPathNextAncestorOrSelf
+xmlXPathNextAttribute
+xmlXPathNextChild
+xmlXPathNextDescendant
+xmlXPathNextDescendantOrSelf
+xmlXPathNextFollowing
+xmlXPathNextFollowingSibling
+xmlXPathNextNamespace
+xmlXPathNextParent
+xmlXPathNextPreceding
+xmlXPathNextPrecedingSibling
+xmlXPathNextSelf
+xmlXPtrNewContext
+
traverse
xmlXPathAxisFunc
+
treaming
_xmlParserCtxt
+
treated
xmlParseAttValue
+
tried
xmlRecoverDoc
+xmlRecoverMemory
+
tries
INPUT_CHUNK
+xlinkIsLink
+xmlCleanupParser
+xmlNanoFTPRead
+xmlNanoHTTPRead
+xmlParserInputGrow
+xmlSAXParseDoc
+xmlSAXParseFile
+xmlSAXParseFileWithData
+xmlSAXParseMemory
+xmlSAXParseMemoryWithData
+
trio
WITHOUT_TRIO
+WITH_TRIO
+xmlXPathIsInf
+xmlXPathIsNaN
+
troubles
_xmlParserInput
+xmlSearchNs
+
try
CAST_TO_BOOLEAN
+CAST_TO_NUMBER
+CAST_TO_STRING
+UTF8ToHtml
+UTF8Toisolat1
+_xmlParserCtxt
+docbEncodeEntities
+htmlEncodeEntities
+htmlNodeDumpFileFormat
+isolat1ToUTF8
+xlinkIsLink
+xmlCharEncodingInputFunc
+xmlCharEncodingOutputFunc
+xmlCheckLanguageID
+xmlFileOpen
+xmlKeepBlanksDefault
+xmlNanoHTTPFetch
+xmlNanoHTTPMethod
+xmlNanoHTTPMethodRedir
+xmlNanoHTTPOpen
+xmlNanoHTTPOpenRedir
+xmlReconciliateNs
+xmlURIEscape
+xmlValidateRoot
+
ttribute
xmlTextReaderReadAttributeValue
+
tune
xmlBufferSetAllocationScheme
+
tuple
xmlHashAddEntry2
+xmlHashAddEntry3
+xmlHashLookup2
+xmlHashLookup3
+xmlHashQLookup2
+xmlHashQLookup3
+xmlHashRemoveEntry
+xmlHashRemoveEntry2
+xmlHashRemoveEntry3
+xmlHashScan3
+xmlHashScanFull3
+xmlHashUpdateEntry2
+xmlHashUpdateEntry3
+
tuples
xmlHashAddEntry2
+
turn
xmlBoolToText
+
turned
xmlGetNoNsProp
+xmlGetNsProp
+xmlGetProp
+xmlHasNsProp
+xmlHasProp
+xmlLineNumbersDefault
+
two
_xmlParserCtxt
+xmlMemDisplayLast
+xmlStrncatNew
+xmlTextMerge
+xmlUTF8Charcmp
+xmlXPathCmpNodes
+xmlXPathDifference
+xmlXPathNodeSetMerge
+xmlXPathRoundFunction
+xmlXPtrLocationSetMerge
+xmlXPtrNewLocationSetNodes
+
two-character
xmlCurrentChar
+
txt
xmlCheckLanguageID
+
type:
xmlStreamPushNode
+
typefixed
XML_SCHEMAS_TYPE_INTERNAL_RESOLVED
+
types
XML_SCHEMAS_FACET_COLLAPSE
+_xmlSchemaType
+_xmlXPathContext
+xmlExternalEntityLoader
+xmlParseSDDecl
+xmlSchemaGetCanonValue
+xmlSchemaNewStringValue
+xmlSchemaValidateFacetWhtsp
+xmlStreamWantsAnyNode
+

A-B +C-C +D-E +F-I +J-N +O-P +Q-R +S-S +T-U +V-X +Y-a +b-b +c-c +d-d +e-e +f-f +g-h +i-i +j-l +m-m +n-n +o-o +p-p +q-r +s-s +t-t +u-v +w-w +x-x +y-z +

Daniel Veillard

diff --git a/doc/APIchunk26.html b/doc/APIchunk26.html new file mode 100644 index 0000000..af3b1a5 --- /dev/null +++ b/doc/APIchunk26.html @@ -0,0 +1,333 @@ + + +API Alphabetic Index u-v for libxml2
Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
Made with Libxml2 Logo

The XML C parser and toolkit of Gnome

API Alphabetic Index u-v for libxml2

Developer Menu
API Indexes
Related links

A-B +C-C +D-E +F-I +J-N +O-P +Q-R +S-S +T-U +V-X +Y-a +b-b +c-c +d-d +e-e +f-f +g-h +i-i +j-l +m-m +n-n +o-o +p-p +q-r +s-s +t-t +u-v +w-w +x-x +y-z +

Letter u:

ugly
_xmlParserCtxt
+htmlEntityLookup
+htmlEntityValueLookup
+
unary
xmlXPathValueFlipSign
+
unclean
_xmlURI
+
uncompressed
xmlC14NDocSave
+xmlGetCompressMode
+xmlGetDocCompressMode
+xmlSetCompressMode
+xmlSetDocCompressMode
+
under
xmlBuildRelativeURI
+xmlSearchNs
+xmlSetTreeDoc
+xmlShellDu
+xmlShellWrite
+xmlValidateElement
+
underlying
xmlTextReaderClose
+xmlTextReaderCurrentNode
+
understand
xmlExpParse
+
unescape
xmlURIUnescapeString
+
unescaped
xmlFileOpen
+xmlNodeAddContent
+xmlNodeAddContentLen
+xmlURIUnescapeString
+
unescaping
xmlParseURIRaw
+
unfriendly
XML_MAX_LOOKUP_LIMIT
+XML_MAX_NAME_LENGTH
+
unicode
htmlEntityValueLookup
+xmlIsLetter
+
unimplemented
htmlCtxtUseOptions
+xmlCtxtUseOptions
+
union
XML_SCHEMAS_FINAL_DEFAULT_UNION
+XML_SCHEMAS_TYPE_FINAL_UNION
+XML_SCHEMAS_TYPE_VARIETY_ATOMIC
+XML_SCHEMAS_TYPE_VARIETY_UNION
+_xmlSchemaType
+xmlXPathIdFunction
+
unique
_xmlParserInput
+_xmlSchema
+xmlExpGetLanguage
+xmlExpGetStart
+xmlXPathIdFunction
+
uniquely
xmlParseAttributeType
+xmlXPathStringFunction
+
uniqueness
xmlValidateAttributeDecl
+xmlValidateOneAttribute
+xmlValidateOneNamespace
+
units
xmlUTF8Strsub
+
unknown
XML_SCHEMAS_ANYATTR_SKIP
+XML_SCHEMAS_ANY_SKIP
+XML_SCHEMAS_FACET_UNKNOWN
+htmlCtxtUseOptions
+xmlCtxtUseOptions
+xmlHasFeature
+xmlUCSIsBlock
+xmlUCSIsCat
+
unless
htmlSAXParseDoc
+htmlSAXParseFile
+xmlDictCleanup
+xmlExpNewOr
+xmlExpNewRange
+xmlExpNewSeq
+xmlGetNoNsProp
+xmlGetNsProp
+xmlGetProp
+xmlHasNsProp
+xmlHasProp
+xmlXPathNextNamespace
+
unlink
xmlFreeNode
+xmlUnlinkNode
+
unlinked
xmlAddNextSibling
+xmlAddPrevSibling
+xmlAddSibling
+xmlDOMWrapAdoptNode
+xmlNewEntity
+xmlReplaceNode
+xmlUnlinkNode
+
unload
xmlModuleClose
+xmlModuleFree
+
unloaded
xmlModuleClose
+
unlock
xmlMutexUnlock
+xmlRMutexUnlock
+
unparsed
_xmlEntity
+unparsedEntityDecl
+unparsedEntityDeclSAXFunc
+xmlLoadExternalEntity
+xmlParseAttributeType
+xmlParseEntityRef
+xmlParserHandleReference
+xmlSAX2UnparsedEntityDecl
+
unplug
xmlSchemaSAXPlug
+
unpredictable
UTF8ToHtml
+UTF8Toisolat1
+docbEncodeEntities
+htmlEncodeEntities
+isolat1ToUTF8
+
unpredictiable
xmlCharEncodingInputFunc
+xmlCharEncodingOutputFunc
+
unregisters
xmlCleanupCharEncodingHandlers
+xmlXPathRegisterFunc
+xmlXPathRegisterFuncNS
+xmlXPathRegisterNs
+xmlXPathRegisterVariable
+xmlXPathRegisterVariableNS
+
unsafe
xmlSprintfElementContent
+
unsigned
c
+xmlMallocAtomicLoc
+xmlURIUnescapeString
+
unsupported
xmlDOMWrapAdoptNode
+xmlDOMWrapCloneNode
+
until
xmlBufferCreateStatic
+xmlParserInputBufferCreateStatic
+xmlSearchNs
+xmlSearchNsByHref
+xmlTextReaderExpand
+xmlTextReaderRelaxNGSetSchema
+xmlTextReaderSetSchema
+xmlXPathAxisFunc
+
unused
ATTRIBUTE_UNUSED
+_xmlEntity
+_xmlSAXHandler
+_xmlSAXHandlerV1
+_xmlSchema
+_xmlXPathContext
+xmlDOMWrapReconcileNamespaces
+xmlDOMWrapRemoveNode
+xmlSchemaValidateFile
+xmlShellBase
+xmlShellCat
+xmlShellDir
+xmlShellDu
+xmlShellList
+xmlShellLoad
+xmlShellPwd
+xmlShellSave
+xmlShellValidate
+xmlShellWrite
+
update
xmlCheckHTTPInput
+xmlNanoFTPUpdateURL
+xmlSetListDoc
+xmlSetTreeDoc
+xmlSplitQName3
+xmlValidCtxtNormalizeAttributeValue
+
updated
xmlCatalogAddLocal
+xmlGetFeaturesList
+xmlNamespaceParseQName
+xmlRegExecErrInfo
+xmlRegExecNextValues
+xmlSplitQName
+xmlSplitQName2
+
upon
checkNamespace
+xlinkNodeDetectFunc
+
upper
XML_MAX_LOOKUP_LIMIT
+xmlExpNewRange
+xmlIsRef
+
uri
xmlNormalizeWindowsPath
+
usage
XML_MAX_NAME_LENGTH
+xmlGetBufferAllocationScheme
+xmlSetBufferAllocationScheme
+
used:
XML_DEFAULT_VERSION
+
used?
_xmlSchemaAttribute
+_xmlSchemaElement
+
useful
xmlGcMemGet
+xmlGcMemSetup
+xmlMemDisplayLast
+xmlNewRMutex
+xmlParserInputBufferCreateStatic
+
useless
setDocumentLocator
+setDocumentLocatorSAXFunc
+xmlSAX2SetDocumentLocator
+
userData
xmlValidityErrorFunc
+xmlValidityWarningFunc
+
users
_xmlSchema
+
uses
htmlNodeStatus
+
usual
xmlExpParse
+
usually
LIBXML_MODULE_EXTENSION
+c
+xmlExpExpDerive
+xmlInitCharEncodingHandlers
+xmlSchemaGetPredefinedType
+xmlTextReaderGetParserProp
+xmlTextReaderSetParserProp
+xmlValidityErrorFunc
+xmlValidityWarningFunc
+
utf8
xmlCharEncFirstLine
+xmlCharEncInFunc
+xmlCharEncOutFunc
+

Letter v:

val1
xmlXPtrLocationSetMerge
+
valgrind
xmlCleanupParser
+xmlCleanupThreads
+
validated
xmlCharInRange
+xmlSchemaValidateLengthFacet
+xmlSchemaValidateLengthFacetWhtsp
+
validates
xmlSchemaValPredefTypeNode
+xmlSchemaValPredefTypeNodeNoNorm
+xmlSchemaValidatePredefinedType
+xmlValidateDocument
+xmlValidateNCName
+xmlValidateNMToken
+xmlValidateName
+xmlValidateQName
+
validating
_xmlAttr
+_xmlElement
+_xmlValidCtxt
+xmlKeepBlanksDefault
+xmlRelaxNGValidatePushElement
+xmlSetGenericErrorFunc
+xmlSetStructuredErrorFunc
+
validator
xmlSchemaValidityLocatorFunc
+
validity
_xmlParserCtxt
+_xmlValidCtxt
+xlinkIsLink
+xmlGenericErrorFunc
+xmlParseAttValue
+xmlParserValidityError
+xmlParserValidityWarning
+xmlTextReaderIsValid
+xmlURIEscape
+xmlValidGetValidElements
+xmlValidateDocumentFinal
+xmlValidateNotationDecl
+xmlValidityErrorFunc
+xmlValidityWarningFunc
+
value:
xmlCheckUTF8
+
values:
xmlSetCompressMode
+xmlSetDocCompressMode
+xmlValidCtxtNormalizeAttributeValue
+xmlValidNormalizeAttributeValue
+
varags
xmlGenericErrorFunc
+
vararg
xmlValidityErrorFunc
+xmlValidityWarningFunc
+
variables
XML_XPATH_NOVAR
+_xmlXPathContext
+xmlNanoFTPProxy
+xmlXPathRegisteredNsCleanup
+xmlXPathRegisteredVariablesCleanup
+
variant
xmlCheckLanguageID
+xmlDetectCharEncoding
+
variants
xmlCheckLanguageID
+
variety
XML_SCHEMAS_TYPE_VARIETY_ABSENT
+XML_SCHEMAS_TYPE_VARIETY_ATOMIC
+XML_SCHEMAS_TYPE_VARIETY_LIST
+XML_SCHEMAS_TYPE_VARIETY_UNION
+
various
_xmlDOMWrapCtxt
+
versions
htmlParseElement
+
very
_htmlElemDesc
+_xmlParserInput
+xmlCharEncFirstLine
+xmlCleanupParser
+xmlCleanupThreads
+
via
xmlNanoHTTPFetch
+xmlNanoHTTPMethod
+xmlNanoHTTPMethodRedir
+xmlNanoHTTPOpen
+xmlNanoHTTPOpenRedir
+
view
xmlShell
+
violated
XML_CAST_FPTR
+
visible
xmlC14NExecute
+xmlC14NIsVisibleCallback
+
void
XML_CAST_FPTR
+xmlSAXParseFileWithData
+xmlSAXParseMemoryWithData
+
volume
_xmlParserCtxt
+

A-B +C-C +D-E +F-I +J-N +O-P +Q-R +S-S +T-U +V-X +Y-a +b-b +c-c +d-d +e-e +f-f +g-h +i-i +j-l +m-m +n-n +o-o +p-p +q-r +s-s +t-t +u-v +w-w +x-x +y-z +

Daniel Veillard

diff --git a/doc/APIchunk27.html b/doc/APIchunk27.html new file mode 100644 index 0000000..cabaa27 --- /dev/null +++ b/doc/APIchunk27.html @@ -0,0 +1,349 @@ + + +API Alphabetic Index w-w for libxml2
Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
Made with Libxml2 Logo

The XML C parser and toolkit of Gnome

API Alphabetic Index w-w for libxml2

Developer Menu
API Indexes
Related links

A-B +C-C +D-E +F-I +J-N +O-P +Q-R +S-S +T-U +V-X +Y-a +b-b +c-c +d-d +e-e +f-f +g-h +i-i +j-l +m-m +n-n +o-o +p-p +q-r +s-s +t-t +u-v +w-w +x-x +y-z +

Letter w:

walker
xmlListReverseWalk
+xmlListWalk
+xmlListWalker
+
walking
_xmlXPathContext
+_xmlXPathParserContext
+xmlListWalker
+
want
xmlCharEncFirstLine
+xmlCharEncInFunc
+xmlCharEncOutFunc
+xmlDOMWrapAdoptNode
+
warn
xmlCheckVersion
+
warning
XML_CAST_FPTR
+_xmlValidCtxt
+docbCreatePushParserCtxt
+htmlCreatePushParserCtxt
+initxmlDefaultSAXHandler
+warningSAXFunc
+xmlCreatePushParserCtxt
+xmlEncodeEntities
+xmlParserValidityWarning
+xmlParserWarning
+xmlRelaxNGGetParserErrors
+xmlRelaxNGGetValidErrors
+xmlRelaxNGSetParserErrors
+xmlRelaxNGSetValidErrors
+xmlRelaxNGValidityWarningFunc
+xmlSAX2InitDefaultSAXHandler
+xmlSchemaGetParserErrors
+xmlSchemaGetValidErrors
+xmlSchemaSetParserErrors
+xmlSchemaSetValidErrors
+xmlSchemaValidityWarningFunc
+xmlSchematronValidityWarningFunc
+xmlSearchNs
+xmlTextReaderSetErrorHandler
+xmlTextReaderSetStructuredErrorHandler
+xmlValidityWarningFunc
+
warnings
_xmlParserCtxt
+xmlPedanticParserDefault
+xmlTextReaderSetErrorHandler
+xmlTextReaderSetStructuredErrorHandler
+
way
HTML_COMMENT_NODE
+HTML_ENTITY_REF_NODE
+HTML_PI_NODE
+HTML_PRESERVE_NODE
+HTML_TEXT_NODE
+_xmlDoc
+xmlBoolToText
+xmlKeepBlanksDefault
+xmlNewGlobalNs
+
ways:
xmlValidGetValidElements
+
well
_xmlParserCtxt
+htmlSAXParseDoc
+htmlSAXParseFile
+startElementNsSAX2Func
+xmlCopyDoc
+xmlParseBalancedChunkMemory
+xmlParseBalancedChunkMemoryRecover
+xmlParseCtxtExternalEntity
+xmlParseExternalEntity
+xmlParseInNodeContext
+xmlSAX2StartElementNs
+xmlSchemaNewStringValue
+
well-balanced
xmlParseBalancedChunkMemory
+xmlParseBalancedChunkMemoryRecover
+xmlParseInNodeContext
+
well-formed
xmlParseCtxtExternalEntity
+xmlParseEntityRef
+xmlParseExtParsedEnt
+xmlParseExternalEntity
+xmlParserHandleReference
+xmlValidateDtdFinal
+
well-formedness
xmlCtxtResetLastError
+xmlParseEntityRef
+xmlResetLastError
+
wellformed
xmlDOMWrapAdoptNode
+xmlDOMWrapCloneNode
+xmlDOMWrapReconcileNamespaces
+xmlParseFile
+
were
_xmlParserCtxt
+xmlCheckLanguageID
+xmlKeepBlanksDefault
+xmlMemShow
+xmlSchemaIsValid
+xmlXIncludeProcess
+xmlXIncludeProcessFlags
+xmlXIncludeProcessFlagsData
+xmlXIncludeProcessNode
+xmlXIncludeProcessTree
+xmlXIncludeProcessTreeFlags
+xmlXIncludeProcessTreeFlagsData
+
wether
_xmlNodeSet
+
what
xmlCatalogGetDefaults
+xmlCatalogSetDefaults
+xmlParseNamespace
+xmlSchemaValidityLocatorFunc
+xmlTextReaderGetRemainder
+xmlTextWriterWriteRawLen
+
where
_htmlElemDesc
+xmlCopyProp
+xmlCopyPropList
+xmlDOMWrapAdoptNode
+xmlDOMWrapCloneNode
+xmlDOMWrapReconcileNamespaces
+xmlExpGetLanguage
+xmlExpGetStart
+xmlFileRead
+xmlIOFTPRead
+xmlIOHTTPRead
+xmlNanoHTTPFetch
+xmlNanoHTTPSave
+xmlNewNs
+xmlParseMarkupDecl
+xmlParseSDDecl
+xmlTextReaderErrorFunc
+
while
xmlInitCharEncodingHandlers
+xmlParseAttributeType
+xmlParseEnumeratedType
+xmlParseEnumerationType
+xmlParseNotationType
+xmlSetGenericErrorFunc
+xmlSetStructuredErrorFunc
+xmlTextReaderNext
+xmlTextReaderNextSibling
+xmlValidGetValidElements
+
white
xmlKeepBlanksDefault
+xmlParseSDDecl
+xmlSchemaCollapseString
+xmlTextReaderNormalization
+xmlXPathNormalizeFunction
+
whitespace
xmlIsBlankNode
+xmlParseAttValue
+xmlSchemaCompareValuesWhtsp
+xmlSchemaGetCanonValueWhtsp
+xmlSchemaValidateFacetWhtsp
+xmlSchemaValidateLengthFacetWhtsp
+xmlXPathIdFunction
+xmlXPathNormalizeFunction
+
whitespace-facet
XML_SCHEMAS_TYPE_WHITESPACE_COLLAPSE
+XML_SCHEMAS_TYPE_WHITESPACE_PRESERVE
+XML_SCHEMAS_TYPE_WHITESPACE_REPLACE
+
whitespace-separated
xmlXPathIdFunction
+
whitespaces
ignorableWhitespace
+ignorableWhitespaceSAXFunc
+xmlSAX2IgnorableWhitespace
+
whole
xmlFreeDocElementContent
+xmlFreeElementContent
+
whose
xmlAutomataNewCountTrans
+xmlAutomataNewCountTrans2
+xmlAutomataNewOnceTrans
+xmlAutomataNewOnceTrans2
+xmlTextReaderLookupNamespace
+
why
xmlModuleOpen
+xmlModuleSymbol
+
wierd
xmlBuildRelativeURI
+
wildcard
XML_SCHEMAS_ATTRGROUP_GLOBAL
+XML_SCHEMAS_ATTRGROUP_WILDCARD_BUILDED
+XML_SCHEMAS_TYPE_OWNED_ATTR_WILDCARD
+XML_SCHEMAS_WILDCARD_COMPLETE
+xmlSchemaFreeWildcard
+
wildcards
XML_SCHEMAS_ANY_LAX
+XML_SCHEMAS_ANY_STRICT
+XML_SCHEMAS_ATTR_USE_PROHIBITED
+
windows
INVALID_SOCKET
+SOCKET
+
with_ns
_xmlNodeSet
+
within
_xmlValidCtxt
+xmlAutomataNewCounterTrans
+xmlGetUTF8Char
+xmlNewDocComment
+xmlNewDocNode
+xmlNewDocNodeEatName
+xmlNewDocRawNode
+xmlNewDocText
+xmlNodeGetBase
+xmlParseCharData
+xmlParseComment
+xmlParseCtxtExternalEntity
+xmlParseInNodeContext
+xmlParseMarkupDecl
+xmlParseSDDecl
+xmlParserFindNodeInfo
+xmlParserHandlePEReference
+xmlParserPrintFileContext
+xmlReconciliateNs
+xmlSAXParseFileWithData
+xmlSAXParseMemoryWithData
+xmlSchemaCopyValue
+xmlSearchNs
+xmlTextReaderConstXmlLang
+xmlTextReaderXmlLang
+xmlTextWriterWriteBase64
+xmlTextWriterWriteBinHex
+xmlValidGetValidElements
+xmlXPathIntersection
+
without
XML_CAST_FPTR
+_xmlEntity
+entityDecl
+entityDeclSAXFunc
+htmlNewDocNoDtD
+xmlCleanupParser
+xmlCleanupThreads
+xmlNewGlobalNs
+xmlParseEntityRef
+xmlParsePEReference
+xmlParseSDDecl
+xmlParserHandlePEReference
+xmlSAX2EntityDecl
+xmlScanName
+xmlSplitQName3
+xmlValidateOneAttribute
+xmlValidateOneNamespace
+
won
_xmlParserCtxt
+xmlAutomataNewNegTrans
+xmlBufferCreateStatic
+xmlLoadSGMLSuperCatalog
+xmlParseAttValue
+
word
_htmlElemDesc
+
words
xmlXPathNormalizeFunction
+xmlXPathStringLengthFunction
+
work
xmlBufferDetach
+xmlModuleOpen
+xmlModuleSymbol
+xmlNodeGetBase
+xmlPatternStreamable
+xmlRemoveProp
+xmlSAXParseDoc
+xmlSAXParseFile
+xmlSAXParseFileWithData
+xmlSAXParseMemory
+xmlSAXParseMemoryWithData
+
worked
xmlNanoFTPCwd
+xmlNanoFTPDele
+
works
xmlShellDu
+
worry
XML_SCHEMAS_ANY_LAX
+
worthwhile
xmlBuildRelativeURI
+
would
_xmlError
+htmlAutoCloseTag
+xmlModuleOpen
+xmlModuleSymbol
+xmlTextReaderGetRemainder
+
wrapper
xmlDOMWrapAcquireNsFunction
+xmlDOMWrapReconcileNamespaces
+xmlDOMWrapRemoveNode
+
wraps
xmlTextReaderByteConsumed
+
write
xmlFileRead
+xmlFindCharEncodingHandler
+xmlGetCharEncodingHandler
+xmlIOFTPRead
+xmlIOHTTPRead
+xmlNewCharEncodingHandler
+xmlOutputBufferCreateFilenameFunc
+xmlOutputBufferCreateIO
+xmlOutputWriteCallback
+xmlSaveToIO
+xmlShellWrite
+
writer
xmlFreeTextWriter
+xmlNewTextWriter
+xmlNewTextWriterPushParser
+
writes
xmlBufferWriteQuotedString
+xmlOutputBufferWrite
+xmlOutputBufferWriteEscape
+xmlOutputBufferWriteString
+
writing
xmlOutputBufferCreateFilename
+
wrt
xmlDOMWrapRemoveNode
+
www
XINCLUDE_NS
+XINCLUDE_OLD_NS
+getSystemId
+xmlC14NDocDumpMemory
+xmlC14NDocSave
+xmlC14NDocSaveTo
+xmlC14NExecute
+xmlCheckLanguageID
+xmlGetCharEncodingName
+xmlParserHandlePEReference
+xmlParserHandleReference
+xmlSAX2GetSystemId
+xmlSchemaGetPredefinedType
+xmlTextReaderNodeType
+

A-B +C-C +D-E +F-I +J-N +O-P +Q-R +S-S +T-U +V-X +Y-a +b-b +c-c +d-d +e-e +f-f +g-h +i-i +j-l +m-m +n-n +o-o +p-p +q-r +s-s +t-t +u-v +w-w +x-x +y-z +

Daniel Veillard

diff --git a/doc/APIchunk28.html b/doc/APIchunk28.html new file mode 100644 index 0000000..c5993f9 --- /dev/null +++ b/doc/APIchunk28.html @@ -0,0 +1,565 @@ + + +API Alphabetic Index x-x for libxml2
Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
Made with Libxml2 Logo

The XML C parser and toolkit of Gnome

API Alphabetic Index x-x for libxml2

Developer Menu
API Indexes
Related links

A-B +C-C +D-E +F-I +J-N +O-P +Q-R +S-S +T-U +V-X +Y-a +b-b +c-c +d-d +e-e +f-f +g-h +i-i +j-l +m-m +n-n +o-o +p-p +q-r +s-s +t-t +u-v +w-w +x-x +y-z +

Letter x:

x00B7
IS_EXTENDER
+
x02D0
IS_EXTENDER
+
x02D1
IS_EXTENDER
+
x0387
IS_EXTENDER
+
x0640
IS_EXTENDER
+
x0E46
IS_EXTENDER
+
x0EC6
IS_EXTENDER
+
x10000-
IS_CHAR
+
x10FFFF
IS_CHAR
+
x20
IS_BLANK
+IS_BYTE_CHAR
+IS_PUBIDCHAR
+xmlParseAttValue
+xmlParseName
+xmlParseNmtoken
+xmlValidCtxtNormalizeAttributeValue
+xmlValidNormalizeAttributeValue
+
x20-
IS_CHAR
+
x3005
IS_EXTENDER
+
x3007
IS_IDEOGRAPHIC
+
x3021-
IS_IDEOGRAPHIC
+
x3029
IS_IDEOGRAPHIC
+
x3031-
IS_EXTENDER
+
x3035
IS_EXTENDER
+
x309D-
IS_EXTENDER
+
x309E
IS_EXTENDER
+
x30FC-
IS_EXTENDER
+
x30FE
IS_EXTENDER
+
x4E00-
IS_IDEOGRAPHIC
+
x9FA5
IS_IDEOGRAPHIC
+
xD7FF
IS_CHAR
+
xE000-
IS_CHAR
+
xFFFD
IS_CHAR
+
xlink
xlinkGetDefaultDetect
+xlinkGetDefaultHandler
+xlinkSetDefaultDetect
+xlinkSetDefaultHandler
+
xlinkHandlerPtr
xlinkGetDefaultHandler
+
xlinkType
xlinkIsLink
+
xml-c14n
xmlC14NDocDumpMemory
+xmlC14NDocSave
+xmlC14NDocSaveTo
+xmlC14NExecute
+
xml-exc-c14n
xmlC14NDocDumpMemory
+xmlC14NDocSave
+xmlC14NDocSaveTo
+xmlC14NExecute
+
xml-name
xmlParseNamespace
+
xml:
XML_XML_NAMESPACE
+
xml:base
xmlNodeSetBase
+
xml:id
XML_XML_ID
+
xml:lang
xlinkExtendedLinkFunk
+xlinkExtendedLinkSetFunk
+xmlNodeGetLang
+xmlNodeSetLang
+xmlTextReaderConstXmlLang
+xmlTextReaderXmlLang
+xmlXPathLangFunction
+
xml:space
_xmlParserCtxt
+xmlNodeGetSpacePreserve
+xmlNodeSetSpacePreserve
+
xmlAddDocEntity
xmlNewEntity
+
xmlAttr
attribute
+attributeSAXFunc
+
xmlAttrPtr
xmlCopyProp
+xmlCopyPropList
+xmlGetID
+
xmlAttributePtr
xmlGetDtdAttrDesc
+xmlGetDtdQAttrDesc
+
xmlAttributeTablePtr
xmlCopyAttributeTable
+
xmlBufNodeDump
xmlNodeDump
+
xmlBufPtr
xmlBufGetNodeContent
+
xmlBuffer
xmlCharEncFirstLine
+xmlCharEncInFunc
+xmlCharEncOutFunc
+xmlNodeDump
+xmlOutputBufferCreateBuffer
+
xmlBufferPtr
xmlNewTextWriterMemory
+xmlOutputBufferCreateBuffer
+
xmlBufferShrink
xmlBufShrink
+
xmlBuildURI
xmlBuildRelativeURI
+
xmlBytesConsumed
xmlTextReaderByteConsumed
+
xmlCatalogAllow
xmlCatalogGetDefaults
+
xmlCatalogPtr
xmlNewCatalog
+
xmlCatalogResolvePublic
xmlCatalogGetPublic
+
xmlCatalogResolveSystem
xmlCatalogGetSystem
+
xmlCharEncoding
_xmlDoc
+_xmlParserCtxt
+xmlGetCharEncodingHandler
+
xmlCharEncodingHandler
xmlNewCharEncodingHandler
+
xmlCharEncodingHandlerPtr
xmlNewCharEncodingHandler
+xmlRegisterCharEncodingHandler
+
xmlCharEncodingInputFunc
xmlNewCharEncodingHandler
+
xmlCharEncodingOutputFunc
xmlNewCharEncodingHandler
+
xmlChars
_xmlParserInput
+xmlBufferWriteCHAR
+
xmlCleanupParser
xmlCleanupParser
+
xmlCleanupThreads
xmlCleanupThreads
+
xmlCopyDocElementContent
xmlCopyElementContent
+
xmlCreateIntSubset
xmlNewDtd
+
xmlDOMWrapCtxtPtr
xmlDOMWrapNewCtxt
+
xmlDefaultSAXLocator
setDocumentLocator
+setDocumentLocatorSAXFunc
+xmlSAX2SetDocumentLocator
+
xmlDoc
_xmlNs
+
xmlDocCopyNodeList
xmlCopyNodeList
+
xmlDocNewPI
xmlNewPI
+
xmlDocProperties
_xmlDoc
+
xmlDocPtr
xmlCopyDoc
+xmlNewTextWriterDoc
+xmlNewTextWriterTree
+xmlTextReaderCurrentDoc
+
xmlDtdPtr
xmlCopyDtd
+xmlIOParseDTD
+xmlParseDTD
+xmlSAXParseDTD
+
xmlElementContentPtr
xmlCopyDocElementContent
+xmlCopyElementContent
+xmlParseElementChildrenContentDecl
+xmlParseElementMixedContentDecl
+
xmlElementPtr
xmlGetDtdElementDesc
+xmlGetDtdQElementDesc
+
xmlElementTablePtr
xmlCopyElementTable
+
xmlEncodeEntities
xmlEncodeEntities
+xmlEncodeEntitiesReentrant
+
xmlEncodeEntitiesReentrant
xmlEncodeEntities
+xmlNewChild
+xmlNewDocNode
+xmlNewDocNodeEatName
+xmlNodeSetContent
+xmlNodeSetContentLen
+
xmlEncodeSpecialChars
xmlNodeSetContent
+xmlNodeSetContentLen
+
xmlEntitiesTablePtr
xmlCopyEntitiesTable
+xmlCreateEntitiesTable
+
xmlEntityPtr
getEntity
+getEntitySAXFunc
+getParameterEntity
+getParameterEntitySAXFunc
+xmlNewEntityInputStream
+xmlParseEntityRef
+xmlSAX2GetEntity
+xmlSAX2GetParameterEntity
+
xmlEnumerationPtr
xmlCopyEnumeration
+xmlCreateEnumeration
+
xmlExpFree
xmlExpNewOr
+xmlExpNewRange
+xmlExpNewSeq
+
xmlExpRef
xmlExpNewOr
+xmlExpNewRange
+xmlExpNewSeq
+
xmlExternalEntityLoader
xmlGetExternalEntityLoader
+
xmlFileOpen_real
xmlFileOpen
+
xmlFree
xmlC14NDocDumpMemory
+xmlDocDumpFormatMemory
+xmlDocDumpFormatMemoryEnc
+xmlDocDumpMemory
+xmlDocDumpMemoryEnc
+xmlGetNoNsProp
+xmlGetNsProp
+xmlGetProp
+xmlNodeGetBase
+xmlNodeGetContent
+xmlNodeGetLang
+xmlNodeListGetRawString
+xmlNodeListGetString
+xmlTextReaderValue
+xmlXPathCastToString
+
xmlFreeDoc
xmlTextReaderCurrentDoc
+
xmlFreeDocElementContent
xmlFreeElementContent
+
xmlFreeMutex
xmlFreeMutex
+
xmlFreeNode
xmlUnlinkNode
+
xmlFreeStreamCtxt
xmlPatternGetStreamCtxt
+
xmlGetGlobalState
xmlGetGlobalState
+
xmlGetNoNsProp
xmlGetProp
+
xmlGetNsProp
xmlGetProp
+
xmlGetProp
xmlGetNoNsProp
+
xmlGetThreadId
xmlGetThreadId
+
xmlHashTablePtr
xmlHashCreate
+xmlHashCreateDict
+
xmlIDPtr
xmlAddID
+
xmlIndentTreeOutput
xmlBufNodeDump
+xmlDocDumpFormatMemory
+xmlDocDumpFormatMemoryEnc
+xmlDocFormatDump
+xmlNodeDump
+xmlNodeDumpOutput
+xmlSaveFormatFile
+xmlSaveFormatFileEnc
+
xmlInitParser
htmlInitAutoClose
+xmlCleanupParser
+
xmlInitThreads
xmlInitThreads
+
xmlInitializeCatalog
xmlCatalogAdd
+
xmlInitializeGlobalState
xmlInitializeGlobalState
+
xmlInputCloseCallback
xmlRegisterInputCallbacks
+
xmlInputMatchCallback
xmlRegisterInputCallbacks
+
xmlInputOpenCallback
xmlRegisterInputCallbacks
+
xmlInputReadCallback
xmlRegisterInputCallbacks
+
xmlIsBaseCharQ
xmlIsBaseChar
+
xmlIsBaseChar_ch
xmlIsBaseChar
+
xmlIsBlankNode
xmlKeepBlanksDefault
+
xmlIsBlankQ
xmlIsBlank
+
xmlIsBlank_ch
xmlIsBlank
+
xmlIsCharQ
xmlIsChar
+
xmlIsChar_ch
xmlIsChar
+
xmlIsCombiningQ
xmlIsCombining
+
xmlIsDigitQ
xmlIsDigit
+
xmlIsDigit_ch
xmlIsDigit
+
xmlIsExtenderQ
xmlIsExtender
+
xmlIsExtender_ch
xmlIsExtender
+
xmlIsIdeographicQ
xmlIsIdeographic
+
xmlIsMainThread
xmlIsMainThread
+
xmlIsPubidCharQ
xmlIsPubidChar
+
xmlIsPubidChar_ch
xmlIsPubidChar
+
xmlKeepBlanksDefault
xmlBufNodeDump
+xmlDocDumpFormatMemory
+xmlDocDumpFormatMemoryEnc
+xmlDocFormatDump
+xmlNodeDump
+xmlNodeDumpOutput
+xmlSaveFormatFile
+xmlSaveFormatFileEnc
+
xmlListWalk
xmlListWalker
+
xmlLoadExtDtdDefaultValue
XML_COMPLETE_ATTRS
+XML_DETECT_IDS
+XML_SKIP_IDS
+
xmlLocationSetPtr
xmlXPtrFreeLocationSet
+xmlXPtrLocationSetCreate
+
xmlLockLibrary
xmlLockLibrary
+
xmlModuleOption
xmlModuleOpen
+
xmlMutexLock
xmlMutexLock
+
xmlMutexUnlock
xmlMutexUnlock
+
xmlNanoFTPGet
ftpDataCallback
+
xmlNanoFTPList
ftpListCallback
+
xmlNewChild
xmlNewTextChild
+
xmlNewDocElementContent
xmlNewElementContent
+
xmlNewDocRawNode
xmlNewDocNode
+xmlNewDocNodeEatName
+
xmlNewMutex
xmlNewMutex
+
xmlNewNode
xmlNewNodeEatName
+
xmlNewTextChild
xmlNewChild
+xmlNewTextChild
+
xmlNewTextWriter
xmlNewTextWriter
+xmlNewTextWriterDoc
+xmlNewTextWriterFilename
+xmlNewTextWriterMemory
+xmlNewTextWriterPushParser
+xmlNewTextWriterTree
+
xmlNodeListGetString
xmlNodeListGetRawString
+
xmlNodePtr
xmlCopyNode
+xmlCopyNodeList
+xmlDocCopyNode
+xmlDocCopyNodeList
+xmlDocGetRootElement
+xmlNewTextWriterTree
+xmlTextReaderCurrentNode
+xmlTextReaderPreserve
+xmlXPathNodeSetAdd
+xmlXPathNodeSetAddUnique
+xmlXPathNodeSetCreate
+xmlXPathNodeSetDel
+xmlXPathNodeSetItem
+xmlXPtrBuildNodeList
+
xmlNodeSetContent
xmlNodeAddContent
+
xmlNodeSetContentLen
xmlNodeAddContentLen
+
xmlNodeSetPtr
xmlXPathFreeNodeSet
+xmlXPathNodeSetCreate
+
xmlNodeType
xmlTextReaderNodeType
+
xmlNotationPtr
xmlGetDtdNotationDesc
+
xmlNotationTablePtr
xmlCopyNotationTable
+
xmlNs
xmlDOMWrapAcquireNsFunction
+
xmlNsPtr
_xmlDOMWrapCtxt
+getNamespace
+xmlCopyNamespace
+xmlCopyNamespaceList
+xmlDOMWrapAcquireNsFunction
+xmlGetNsList
+
xmlOutputBuffer
LIBXML2_NEW_BUFFER
+
xmlOutputBufferClose
xmlSaveFileTo
+xmlSaveFormatFileTo
+
xmlOutputBufferPtr
xmlNewTextWriter
+xmlOutputBufferCreateFilenameFunc
+xmlOutputBufferGetContent
+xmlOutputBufferGetSize
+
xmlOutputCloseCallback
xmlRegisterOutputCallbacks
+
xmlOutputMatchCallback
xmlRegisterOutputCallbacks
+
xmlOutputOpenCallback
xmlRegisterOutputCallbacks
+
xmlOutputWriteCallback
xmlRegisterOutputCallbacks
+
xmlParseAttValue
xmlParseDefaultDecl
+
xmlParseChunk
xmlCreatePushParserCtxt
+
xmlParseElementContentDecl
xmlParseElementChildrenContentDecl
+xmlParseElementMixedContentDecl
+
xmlParseElementDecl
xmlParseElementContentDecl
+
xmlParseExternalID
xmlParseNotationDecl
+
xmlParseFile
xmlParseCatalogFile
+
xmlParseNamespace:
xmlParseNamespace
+
xmlParseURI
xmlURIEscape
+
xmlParserCtxt
XML_CTXT_FINISH_DTD_0
+XML_CTXT_FINISH_DTD_1
+
xmlParserCtxtPtr
xmlNewParserCtxt
+xmlNewTextWriterPushParser
+
xmlParserError
_xmlError
+
xmlParserErrors
docbParseChunk
+htmlParseChunk
+xmlParseChunk
+
xmlParserFindNodeInfoIndex
xmlParserFindNodeInfoIndex
+
xmlParserHandleReference
xmlScanName
+
xmlParserInputBuffer
LIBXML2_NEW_BUFFER
+
xmlParserInputBufferPtr
xmlNewTextReader
+xmlParserInputBufferCreateFilenameFunc
+xmlTextReaderGetRemainder
+xmlTextReaderSetup
+
xmlParserInputPtr
resolveEntity
+resolveEntitySAXFunc
+xmlFreeInputStream
+xmlLoadExternalEntity
+xmlNoNetExternalEntityLoader
+xmlParserPrintFileContext
+xmlParserPrintFileInfo
+xmlSAX2ResolveEntity
+
xmlParserNodeInfo
xmlParserFindNodeInfo
+
xmlParserProperties
xmlTextReaderGetParserProp
+xmlTextReaderSetParserProp
+
xmlPattern
LIBXML_PATTERN_ENABLED
+
xmlPatternFlags
xmlPatterncompile
+
xmlPatternGetStreamCtxt
xmlPatternStreamable
+
xmlPatterncompile
xmlStreamPush
+xmlStreamPushAttr
+xmlStreamPushNode
+
xmlPopInput:
xmlPopInput
+
xmlPushInput:
xmlPushInput
+
xmlRFreeMutex
xmlFreeRMutex
+
xmlRMutexLock
xmlRMutexLock
+
xmlRMutexUnlock
xmlRMutexUnlock
+
xmlRNewMutex
xmlNewRMutex
+
xmlReader
LIBXML_READER_ENABLED
+
xmlRefPtr
xmlAddRef
+
xmlRelaxNGParserFlag
xmlRelaxParserSetFlag
+
xmlRelaxNGValidatePushElement
xmlRelaxNGValidateFullElement
+
xmlSAX2Attribute
attribute
+
xmlSAX2AttributeDecl
attributeDecl
+
xmlSAX2CDataBlock
cdataBlock
+
xmlSAX2Characters
characters
+xmlSAX2IgnorableWhitespace
+
xmlSAX2Comment
comment
+xmlSAX2Comment
+
xmlSAX2ElementDecl
elementDecl
+
xmlSAX2EndDocument
endDocument
+
xmlSAX2EndElement
endElement
+
xmlSAX2EntityDecl
entityDecl
+
xmlSAX2ExternalSubset
externalSubset
+
xmlSAX2GetColumnNumber
getColumnNumber
+
xmlSAX2GetEntity
getEntity
+
xmlSAX2GetLineNumber
getLineNumber
+
xmlSAX2GetParameterEntity
getParameterEntity
+
xmlSAX2GetPublicId
getPublicId
+
xmlSAX2GetSystemId
getSystemId
+
xmlSAX2HasExternalSubset
hasExternalSubset
+
xmlSAX2HasInternalSubset
hasInternalSubset
+
xmlSAX2IgnorableWhitespace
ignorableWhitespace
+xmlKeepBlanksDefault
+
xmlSAX2InitDefaultSAXHandler
initxmlDefaultSAXHandler
+
xmlSAX2InitDocbDefaultSAXHandler
initdocbDefaultSAXHandler
+
xmlSAX2InitHtmlDefaultSAXHandler
inithtmlDefaultSAXHandler
+
xmlSAX2InternalSubset
internalSubset
+
xmlSAX2IsStandalone
isStandalone
+
xmlSAX2NotationDecl
notationDecl
+
xmlSAX2ProcessingInstruction
processingInstruction
+
xmlSAX2Reference
reference
+xmlSAX2Reference
+
xmlSAX2ResolveEntity
resolveEntity
+xmlSAX2ResolveEntity
+
xmlSAX2StartDocument
startDocument
+
xmlSAX2StartElement
startElement
+
xmlSAX2UnparsedEntityDecl
unparsedEntityDecl
+
xmlSAXHandlerPtr
xmlSchemaSAXPlug
+
xmlSAXVersion
xmlSAXDefaultVersion
+
xmlSaveOptions
xmlSaveToBuffer
+xmlSaveToFd
+xmlSaveToFilename
+xmlSaveToIO
+
xmlSchemaSAXPlug
xmlSchemaSAXUnplug
+
xmlSchemaValType
xmlSchemaGetValType
+
xmlSchemaValidOption
xmlSchemaSetValidOptions
+
xmlSchematronValidOptions
xmlSchematronNewValidCtxt
+
xmlSetExternalEntityLoader
resolveEntity
+resolveEntitySAXFunc
+xmlSAX2ResolveEntity
+
xmlSnprintfElementContent
xmlSprintfElementContent
+
xmlStrcmp
xmlStrEqual
+
xmlStrdup
xmlNewNode
+
xmlStreamPush
xmlStreamPushNode
+
xmlStringDecodeEntities
xmlDecodeEntities
+
xmlStringGetNodeList
xmlParseAttValue
+
xmlStrncat
xmlStrncatNew
+
xmlStrncmp
xmlUTF8Charcmp
+
xmlTextReader
xmlNewTextReader
+xmlNewTextReaderFilename
+xmlReaderNewDoc
+xmlReaderNewFd
+xmlReaderNewFile
+xmlReaderNewIO
+xmlReaderNewMemory
+xmlReaderNewWalker
+xmlTextReaderCurrentDoc
+xmlTextReaderCurrentNode
+
xmlTextReaderCurrentDoc
xmlTextReaderPreserve
+xmlTextReaderPreservePattern
+
xmlTextReaderLocatorPtr
xmlTextReaderLocatorBaseURI
+xmlTextReaderLocatorLineNumber
+
xmlTextReaderRead
xmlTextReaderExpand
+
xmlTextWriterStartDTDEntity
xmlTextWriterWriteDTDExternalEntity
+
xmlTextWriterWriteDTD
xmlTextWriterWriteDocType
+
xmlTextWriterWritePI
xmlTextWriterWriteProcessingInstruction
+
xmlURI
xmlCreateURI
+xmlFreeURI
+xmlPrintURI
+xmlSaveUri
+
xmlURIEscapeStr
xmlURIEscape
+
xmlURIFromPath
xmlNormalizeWindowsPath
+
xmlURIPtr
xmlParseURI
+xmlParseURIRaw
+
xmlUnlinkNode
xmlDocSetRootElement
+xmlFreeNode
+
xmlUnlockLibrary
xmlUnlockLibrary
+
xmlValidCtxtPtr
xmlValidityErrorFunc
+xmlValidityWarningFunc
+
xmlValidGetValidElements
xmlValidGetValidElements
+
xmlValidateAttributeDecl
xmlParseDefaultDecl
+
xmlValidateAttributeValue
xmlParseAttributeType
+
xmlValidateOneAttribute
xmlValidateOneElement
+
xmlWriter
LIBXML_WRITER_ENABLED
+
xmlXPathCheckError
xmlXPathPopBoolean
+xmlXPathPopExternal
+xmlXPathPopNodeSet
+xmlXPathPopNumber
+xmlXPathPopString
+
xmlXPathCompExprPtr
xmlXPathCompile
+xmlXPathCtxtCompile
+
xmlXPathContext
xmlXPathFreeContext
+xmlXPathNewContext
+xmlXPtrNewContext
+
xmlXPathError
err
+
xmlXPathEvalPredicate
xmlXPtrEvalRangePredicate
+
xmlXPathFreeObject
xmlXPathFreeNodeSetList
+
xmlXPathFunction
xmlXPathFunctionLookup
+xmlXPathFunctionLookupNS
+
xmlXPathNodeTrailingSorted
xmlXPathNodeTrailing
+
xmlXPathObject
xmlXPathContextSetCache
+
xmlXPathObjectPtr
xmlXPathCompiledEval
+xmlXPathEval
+xmlXPathEvalExpression
+xmlXPathFreeNodeSetList
+xmlXPathFreeObject
+xmlXPathNewBoolean
+xmlXPathNewCString
+xmlXPathNewFloat
+xmlXPathNewNodeSet
+xmlXPathNewNodeSetList
+xmlXPathNewString
+xmlXPathNewValueTree
+xmlXPathNodeEval
+xmlXPathWrapNodeSet
+xmlXPtrEval
+xmlXPtrLocationSetAdd
+xmlXPtrLocationSetCreate
+xmlXPtrLocationSetDel
+xmlXPtrNewCollapsedRange
+xmlXPtrNewLocationSetNodeSet
+xmlXPtrNewLocationSetNodes
+xmlXPtrNewRange
+xmlXPtrNewRangeNodeObject
+xmlXPtrNewRangeNodePoint
+xmlXPtrNewRangeNodes
+xmlXPtrNewRangePointNode
+xmlXPtrNewRangePoints
+xmlXPtrWrapLocationSet
+
xmlXPathParserContext
xmlXPathFreeParserContext
+xmlXPathNewParserContext
+
xmlXPathTrailingSorted
xmlXPathTrailing
+
xmlns
xmlNamespaceParseNSDef
+
xmlns:???
xmlParseAttribute
+
xmltextReader
xmlReaderForDoc
+xmlReaderForFd
+xmlReaderForIO
+xmlReaderForMemory
+xmlReaderNewDoc
+xmlReaderNewFd
+xmlReaderNewIO
+xmlReaderNewMemory
+xmlReaderNewWalker
+xmlReaderWalker
+
xpath
xmlShellPrintXPathError
+xmlShellPrintXPathResult
+
xpointer
XINCLUDE_PARSE_XPOINTER
+

A-B +C-C +D-E +F-I +J-N +O-P +Q-R +S-S +T-U +V-X +Y-a +b-b +c-c +d-d +e-e +f-f +g-h +i-i +j-l +m-m +n-n +o-o +p-p +q-r +s-s +t-t +u-v +w-w +x-x +y-z +

Daniel Veillard

diff --git a/doc/APIchunk29.html b/doc/APIchunk29.html new file mode 100644 index 0000000..2aaa21b --- /dev/null +++ b/doc/APIchunk29.html @@ -0,0 +1,131 @@ + + +API Alphabetic Index y-z for libxml2
Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
Made with Libxml2 Logo

The XML C parser and toolkit of Gnome

API Alphabetic Index y-z for libxml2

Developer Menu
API Indexes
Related links

A-B +C-C +D-E +F-I +J-N +O-P +Q-R +S-S +T-U +V-X +Y-a +b-b +c-c +d-d +e-e +f-f +g-h +i-i +j-l +m-m +n-n +o-o +p-p +q-r +s-s +t-t +u-v +w-w +x-x +y-z +

Letter y:

year
ftpListCallback
+
yes
_xmlDoc
+xmlInputMatchCallback
+xmlIsBlankNode
+xmlIsMixedElement
+xmlNodeIsText
+xmlOutputMatchCallback
+xmlParseEntityRef
+xmlParsePEReference
+xmlParseSDDecl
+xmlParserHandlePEReference
+xmlRegexpIsDeterminist
+xmlTextWriterStartDocument
+
yet
xmlDOMWrapAdoptNode
+xmlDOMWrapCloneNode
+xmlModuleOpen
+xmlSaveDoc
+xmlSaveTree
+xmlSchemaGetCanonValue
+xmlSchemaGetCanonValueWhtsp
+xmlTextReaderRelaxNGValidateCtxt
+xmlTextReaderSchemaValidateCtxt
+
you
xmlDOMWrapAdoptNode
+xmlDOMWrapCloneNode
+xmlNewDocNode
+xmlNewDocNodeEatName
+xmlNewTextChild
+xmlSchemaGetBuiltInType
+xmlSearchNs
+
your
xmlCleanupParser
+xmlCleanupThreads
+

Letter z:

zero
docbEncodeEntities
+docbParseChunk
+htmlCtxtReadDoc
+htmlEncodeEntities
+htmlParseChunk
+htmlReadDoc
+xmlBufferCCat
+xmlBufferCat
+xmlByteConsumed
+xmlCopyDoc
+xmlCtxtReadDoc
+xmlDocDumpMemory
+xmlHasFeature
+xmlOutputBufferWriteEscape
+xmlOutputBufferWriteString
+xmlParseBalancedChunkMemory
+xmlParseBalancedChunkMemoryRecover
+xmlParseChunk
+xmlReadDoc
+xmlReaderForDoc
+xmlReaderNewDoc
+xmlStrdupFunc
+xmlStrsub
+xmlXPathBooleanFunction
+xmlXPathStringFunction
+
zero-based
xmlTextReaderGetAttributeNo
+xmlTextReaderMoveToAttributeNo
+
zeros
xmlXPathStringFunction
+
zlib
_xmlDoc
+xmlC14NDocSave
+

A-B +C-C +D-E +F-I +J-N +O-P +Q-R +S-S +T-U +V-X +Y-a +b-b +c-c +d-d +e-e +f-f +g-h +i-i +j-l +m-m +n-n +o-o +p-p +q-r +s-s +t-t +u-v +w-w +x-x +y-z +

Daniel Veillard

diff --git a/doc/APIchunk3.html b/doc/APIchunk3.html new file mode 100644 index 0000000..515118a --- /dev/null +++ b/doc/APIchunk3.html @@ -0,0 +1,360 @@ + + +API Alphabetic Index F-I for libxml2
Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
Made with Libxml2 Logo

The XML C parser and toolkit of Gnome

API Alphabetic Index F-I for libxml2

Developer Menu
API Indexes
Related links

A-B +C-C +D-E +F-I +J-N +O-P +Q-R +S-S +T-U +V-X +Y-a +b-b +c-c +d-d +e-e +f-f +g-h +i-i +j-l +m-m +n-n +o-o +p-p +q-r +s-s +t-t +u-v +w-w +x-x +y-z +

Letter F:

FALSE
xmlTextWriterStartDTDEntity
+xmlTextWriterWriteDTDEntity
+xmlTextWriterWriteDTDExternalEntity
+xmlTextWriterWriteDTDInternalEntity
+xmlTextWriterWriteFormatDTDInternalEntity
+xmlTextWriterWriteVFormatDTDInternalEntity
+
FFFE
IS_CHAR
+
FFFF
IS_CHAR
+
FIXED
xmlGetNoNsProp
+xmlGetNsProp
+xmlGetProp
+xmlHasNsProp
+xmlHasProp
+xmlParseDefaultDecl
+
FREE
xmlSchemaGetCanonValue
+
Facet
xmlSchemaFreeFacet
+xmlSchemaNewFacet
+
False
xmlBoolToText
+
Fetch
xmlNanoFTPGet
+
File
xmlTextReaderGetRemainder
+
Fills
xmlBufGetNodeContent
+xmlNodeBufGetContent
+
Find
xmlExpGetLanguage
+xmlExpGetStart
+xmlGetRefs
+xmlHashLookup
+xmlHashLookup2
+xmlHashLookup3
+xmlHashQLookup
+xmlHashQLookup2
+xmlHashQLookup3
+xmlHashRemoveEntry
+xmlHashRemoveEntry2
+xmlHashRemoveEntry3
+xmlParserFindNodeInfo
+xmlParserFindNodeInfoIndex
+
Finds
xmlChildElementCount
+xmlExpIsNillable
+xmlFirstElementChild
+xmlLastElementChild
+xmlNextElementSibling
+xmlPreviousElementSibling
+
First
XML_SCHEMAS_TYPE_FIXUP_1
+_xmlEntity
+
Fixed
xmlParseDefaultDecl
+xmlValidateOneAttribute
+xmlValidateOneNamespace
+
Float
xmlXPathStringEvalNumber
+
Flush
xmlSaveFlush
+xmlTextWriterFlush
+
For
_xmlParserCtxt
+xmlC14NDocDumpMemory
+xmlC14NDocSave
+xmlC14NDocSaveTo
+xmlC14NExecute
+xmlCtxtResetLastError
+xmlParseComment
+xmlParseElementChildrenContentDecl
+xmlResetLastError
+xmlSetGenericErrorFunc
+xmlSetStructuredErrorFunc
+xmlXPathSubstringAfterFunction
+xmlXPathSubstringBeforeFunction
+xmlXPathSubstringFunction
+xmlXPathTranslateFunction
+
Form
xmlBuildURI
+
Formating
htmlDocContentDumpOutput
+
Formats
xmlStrPrintf
+xmlStrVPrintf
+xmlXPatherror
+
Formed
xmlRecoverDoc
+xmlRecoverFile
+xmlRecoverMemory
+xmlSAXParseDoc
+xmlSAXParseFile
+xmlSAXParseFileWithData
+xmlSAXParseMemory
+xmlSAXParseMemoryWithData
+
Fragment
xmlNewDocFragment
+
Frameset
_htmlElemDesc
+
Frees
xmlBufferFree
+xmlDOMWrapFreeCtxt
+xmlNanoFTPFreeCtxt
+
Front-end
xmlCharEncFirstLine
+
Function
xmlBufContent
+xmlBufEnd
+xmlBufUse
+xmlBufferContent
+xmlBufferLength
+xmlSetGenericErrorFunc
+xmlSetStructuredErrorFunc
+xmlXPathFunctionLookup
+xmlXPathFunctionLookupNS
+

Letter G:

GCC
ATTRIBUTE_UNUSED
+LIBXML_ATTR_ALLOC_SIZE
+LIBXML_ATTR_FORMAT
+
GEDecl
xmlParseEntityDecl
+
GET
xmlNanoHTTPFetch
+xmlNanoHTTPOpen
+xmlNanoHTTPOpenRedir
+
GeneralPunctuation
xmlUCSIsGeneralPunctuation
+
Generic
xmlCharEncCloseFunc
+xmlCharEncInFunc
+xmlCharEncOutFunc
+
GeometricShapes
xmlUCSIsGeometricShapes
+
Georgian
xmlUCSIsGeorgian
+
Gets
xmlTextReaderReadState
+
Gives
xmlOutputBufferGetContent
+xmlOutputBufferGetSize
+xmlSchemaGetBuiltInType
+
Global
_xmlDoc
+
Gothic
xmlUCSIsGothic
+
Greek
xmlUCSIsGreek
+
GreekExtended
xmlUCSIsGreekExtended
+
GreekandCoptic
xmlUCSIsGreekandCoptic
+
Group
xmlParseElementChildrenContentDecl
+xmlParseElementMixedContentDecl
+
Grow
xmlBufferGrow
+xmlParserInputBufferGrow
+
Guess
xmlDetectCharEncoding
+
Gujarati
xmlUCSIsGujarati
+
Gurmukhi
xmlUCSIsGurmukhi
+

Letter H:

HTML_DEPRECATED
htmlAttrAllowed
+htmlElementStatusHere
+
HTML_INVALID
htmlAttrAllowed
+htmlElementStatusHere
+
HTML_NA
htmlNodeStatus
+
HTML_REQUIRED
htmlAttrAllowed
+
HTML_VALID
htmlAttrAllowed
+htmlElementStatusHere
+
Hacking
xmlTextReaderCurrentDoc
+xmlTextReaderCurrentNode
+
HalfwidthandFullwidthForms
xmlUCSIsHalfwidthandFullwidthForms
+
Handle
attribute
+attributeSAXFunc
+xmlErrMemory
+xmlXPathErr
+
Handling
xmlCurrentChar
+
HangulCompatibilityJamo
xmlUCSIsHangulCompatibilityJamo
+
HangulJamo
xmlUCSIsHangulJamo
+
HangulSyllables
xmlUCSIsHangulSyllables
+
Hanunoo
xmlUCSIsHanunoo
+
Has
htmlAttrAllowed
+
Hash
_xmlDoc
+_xmlDtd
+_xmlXPathContext
+
Hebrew
xmlUCSIsHebrew
+
Hence
xmlParseNotationDecl
+
HighPrivateUseSurrogates
xmlUCSIsHighPrivateUseSurrogates
+
HighSurrogates
xmlUCSIsHighSurrogates
+
Hiragana
xmlUCSIsHiragana
+
Hmm
xmlSchemaValueGetAsBoolean
+
Holds
_xmlSchemaType
+
How
_xmlParserInput
+
However
docbFreeParserCtxt
+htmlFreeParserCtxt
+xmlFreeParserCtxt
+xmlNodeGetBase
+

Letter I:

I18N
_xmlOutputBuffer
+_xmlParserInputBuffer
+xmlOutputBufferWrite
+xmlOutputBufferWriteEscape
+xmlOutputBufferWriteString
+xmlParserInputBufferGrow
+xmlParserInputBufferPush
+xmlParserInputBufferRead
+
IANA
xmlCheckLanguageID
+
IDREF
xmlParseAttributeType
+xmlValidateAttributeDecl
+xmlValidateAttributeValue
+xmlValidateDocumentFinal
+xmlValidateDtd
+xmlValidateOneAttribute
+xmlValidateOneElement
+xmlValidateOneNamespace
+
IDREFS
xmlParseAttributeType
+xmlValidateAttributeValue
+xmlValidateDocumentFinal
+
IDREFs
_xmlDoc
+
IDs
xmlXPathIdFunction
+
IEEE
xmlXPathCompareValues
+xmlXPathStringFunction
+xmlXPathSubstringFunction
+
IMPLIED
xmlParseAttributeType
+xmlParseDefaultDecl
+
IPAExtensions
xmlUCSIsIPAExtensions
+
ISO
UTF8Toisolat1
+XML_CAST_FPTR
+isolat1ToUTF8
+xmlCheckLanguageID
+
ISO-8859-
LIBXML_ISO8859X_ENABLED
+
ISO-Latin
xmlParseBalancedChunkMemory
+xmlParseBalancedChunkMemoryRecover
+
ISO639Code
xmlCheckLanguageID
+
ISOLatin
_xmlOutputBuffer
+
IS_BLANK
IS_BLANK_CH
+
IS_CHAR
IS_CHAR_CH
+
IS_DIGIT
IS_DIGIT_CH
+
IS_EXTENDER
IS_EXTENDER_CH
+
IS_LETTER
IS_LETTER_CH
+
IS_PUBIDCHAR
IS_PUBIDCHAR_CH
+
IanaCode
xmlCheckLanguageID
+
Identifier
xmlACatalogResolve
+xmlCatalogLocalResolve
+xmlCatalogResolve
+
Identifiers
XML_MAX_NAMELEN
+
Ideographic
IS_IDEOGRAPHIC
+IS_LETTER
+xmlIsLetter
+
IdeographicDescriptionCharacters
xmlUCSIsIdeographicDescriptionCharacters
+
Ignore
XML_SCHEMAS_ANYATTR_LAX
+
Ignored
xmlCopyChar
+
Implements
xmlShell
+xmlShellBase
+xmlShellCat
+xmlShellDir
+xmlShellDu
+xmlShellList
+xmlShellLoad
+xmlShellPwd
+xmlShellSave
+xmlShellValidate
+xmlShellWrite
+xmlXPathDifference
+xmlXPathDistinct
+xmlXPathDistinctSorted
+xmlXPathHasSameNodes
+xmlXPathIntersection
+xmlXPathLeading
+xmlXPathLeadingSorted
+xmlXPathNodeLeading
+xmlXPathNodeLeadingSorted
+xmlXPathNodeSetItem
+xmlXPathNodeTrailing
+xmlXPathNodeTrailingSorted
+xmlXPathTrailing
+xmlXPathTrailingSorted
+
Included
xmlParserHandlePEReference
+
Increase
xmlExpRef
+
Increment
xmlDictReference
+
Indicate
xmlExpMaxToken
+
Indicates
_xmlSchemaWildcard
+
Infinity
xmlXPathStringFunction
+
Initial
xmlAutomataGetInitState
+
Initialization
xmlInitParser
+
Initialize
docbDefaultSAXHandlerInit
+htmlDefaultSAXHandlerInit
+htmlInitAutoClose
+initdocbDefaultSAXHandler
+inithtmlDefaultSAXHandler
+initxmlDefaultSAXHandler
+xmlDefaultSAXHandlerInit
+xmlInitCharEncodingHandlers
+xmlInitMemory
+xmlInitNodeInfoSeq
+xmlInitParserCtxt
+xmlNanoFTPInit
+xmlNanoFTPScanProxy
+xmlNanoHTTPInit
+xmlNanoHTTPScanProxy
+xmlSAX2InitDefaultSAXHandler
+xmlSAX2InitDocbDefaultSAXHandler
+xmlSAX2InitHtmlDefaultSAXHandler
+xmlSAXVersion
+xmlSchemaInitTypes
+xmlXPathInit
+xmlXPathRoot
+
Initially
xmlSubstituteEntitiesDefault
+
Initiate
xmlNanoFTPGetSocket
+
Initilize
xmlRelaxNGInitTypes
+
Input
_xmlParserCtxt
+xmlIOParseDTD
+xmlInputCloseCallback
+xmlInputMatchCallback
+xmlInputOpenCallback
+xmlInputReadCallback
+xmlNewIOInputStream
+
Insert
xmlListAppend
+xmlListInsert
+xmlParserAddNodeInfo
+
Instruction
xmlParsePI
+
Instuction
XML_CATALOG_PI
+
Intended
xmlSnprintfElementContent
+
Internal
_xmlDOMWrapCtxt
+xmlParseMarkupDecl
+
Introduced
XML_MAX_DICTIONARY_LIMIT
+XML_MAX_LOOKUP_LIMIT
+XML_MAX_NAME_LENGTH
+XML_MAX_TEXT_LENGTH
+
Irregular
xmlCheckLanguageID
+

A-B +C-C +D-E +F-I +J-N +O-P +Q-R +S-S +T-U +V-X +Y-a +b-b +c-c +d-d +e-e +f-f +g-h +i-i +j-l +m-m +n-n +o-o +p-p +q-r +s-s +t-t +u-v +w-w +x-x +y-z +

Daniel Veillard

diff --git a/doc/APIchunk4.html b/doc/APIchunk4.html new file mode 100644 index 0000000..d26883b --- /dev/null +++ b/doc/APIchunk4.html @@ -0,0 +1,351 @@ + + +API Alphabetic Index J-N for libxml2
Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
Made with Libxml2 Logo

The XML C parser and toolkit of Gnome

API Alphabetic Index J-N for libxml2

Developer Menu
API Indexes
Related links

A-B +C-C +D-E +F-I +J-N +O-P +Q-R +S-S +T-U +V-X +Y-a +b-b +c-c +d-d +e-e +f-f +g-h +i-i +j-l +m-m +n-n +o-o +p-p +q-r +s-s +t-t +u-v +w-w +x-x +y-z +

Letter J:

Jan
_htmlElemDesc
+
Java
xmlCheckUTF8
+

Letter K:

Kanbun
xmlUCSIsKanbun
+
KangxiRadicals
xmlUCSIsKangxiRadicals
+
Kannada
xmlUCSIsKannada
+
Katakana
xmlUCSIsKatakana
+
KatakanaPhoneticExtensions
xmlUCSIsKatakanaPhoneticExtensions
+
Khmer
xmlUCSIsKhmer
+
KhmerSymbols
xmlUCSIsKhmerSymbols
+

Letter L:

Langcode
xmlCheckLanguageID
+
LanguageID
xmlCheckLanguageID
+
Lao
xmlUCSIsLao
+
Last
_xmlEntity
+
Latin
UTF8Toisolat1
+isolat1ToUTF8
+
Latin-1Supplement
xmlUCSIsLatin1Supplement
+
LatinExtended-A
xmlUCSIsLatinExtendedA
+
LatinExtended-B
xmlUCSIsLatinExtendedB
+
LatinExtendedAdditional
xmlUCSIsLatinExtendedAdditional
+
Legal
xmlParseCharRef
+xmlParseDefaultDecl
+xmlValidateAttributeDecl
+
Length
xmlDocDumpFormatMemoryEnc
+xmlDocDumpMemoryEnc
+
Letter
IS_LETTER
+xmlIsLetter
+xmlNamespaceParseNCName
+xmlParseName
+xmlScanName
+xmlXPathParseNCName
+xmlXPathParseName
+
LetterlikeSymbols
xmlUCSIsLetterlikeSymbols
+
Like
xmlXPathOrderDocElems
+
Limbu
xmlUCSIsLimbu
+
LinearBIdeograms
xmlUCSIsLinearBIdeograms
+
LinearBSyllabary
xmlUCSIsLinearBSyllabary
+
List
_xmlElement
+_xmlParserCtxt
+
Literal
xmlParseSystemLiteral
+
Load
xmlIOParseDTD
+xmlLoadACatalog
+xmlLoadCatalog
+xmlLoadCatalogs
+xmlLoadExternalEntity
+xmlLoadSGMLSuperCatalog
+xmlParseDTD
+xmlSAXParseDTD
+
Local
_xmlOutputBuffer
+_xmlParserInputBuffer
+_xmlSchemaType
+
LocalPart
xmlNamespaceParseQName
+xmlSplitQName
+xmlSplitQName2
+
Location
xmlXPathEval
+xmlXPathNodeEval
+xmlXPtrEval
+xmlXPtrEvalRangePredicate
+
LocationSet
xmlXPtrFreeLocationSet
+xmlXPtrLocationSetAdd
+xmlXPtrLocationSetDel
+xmlXPtrLocationSetMerge
+xmlXPtrLocationSetRemove
+xmlXPtrNewLocationSetNodeSet
+xmlXPtrNewLocationSetNodes
+xmlXPtrWrapLocationSet
+
Locator
setDocumentLocator
+setDocumentLocatorSAXFunc
+xmlSAX2SetDocumentLocator
+
Lookup
htmlEntityLookup
+htmlEntityValueLookup
+htmlTagLookup
+xmlGetEncodingAlias
+xmlModuleSymbol
+xmlSchemaGetBuiltInListSimpleTypeItemType
+xmlSchemaGetPredefinedType
+
Loose
_htmlElemDesc
+
LowSurrogates
xmlUCSIsLowSurrogates
+
Lzma
LIBXML_LZMA_ENABLED
+

Letter M:

META
htmlSetMetaEncoding
+
MODIFIER
_htmlElemDesc
+
MULT
_xmlElementContent
+
MUST
xmlC14NDocSaveTo
+xmlC14NExecute
+xmlTextReaderNormalization
+
Makes
xmlAutomataSetFinalState
+
Malayalam
xmlUCSIsMalayalam
+
Maps
xmlChildrenNode
+xmlRootNode
+
Marks
XML_SCHEMAS_ATTRGROUP_MARKED
+XML_SCHEMAS_TYPE_BUILTIN_PRIMITIVE
+XML_SCHEMAS_TYPE_MARKED
+
Markup
xmlParseExternalSubset
+xmlParseMarkupDecl
+
Match
xmlParseElement
+
MathematicalAlphanumericSymbols
xmlUCSIsMathematicalAlphanumericSymbols
+
MathematicalOperators
xmlUCSIsMathematicalOperators
+
Max
_xmlParserCtxt
+_xmlValidCtxt
+
Maximum
XML_MAX_DICTIONARY_LIMIT
+XML_MAX_LOOKUP_LIMIT
+XML_MAX_NAME_LENGTH
+XML_MAX_TEXT_LENGTH
+
May
xmlURIEscape
+
Memory
xmlDocDumpFormatMemoryEnc
+xmlDocDumpMemoryEnc
+
Merge
xmlTextMerge
+
Merges
xmlXPathNodeSetMerge
+xmlXPtrLocationSetMerge
+
Meta
htmlGetMetaEncoding
+htmlSetMetaEncoding
+
Method
xmlTextReaderGetRemainder
+
Mime-Type
xmlNanoHTTPMimeType
+
Minimal
xmlExpParse
+
Misc
xmlParseDocument
+xmlParseMisc
+
MiscellaneousMathematicalSymbols-A
xmlUCSIsMiscellaneousMathematicalSymbolsA
+
MiscellaneousMathematicalSymbols-B
xmlUCSIsMiscellaneousMathematicalSymbolsB
+
MiscellaneousSymbols
xmlUCSIsMiscellaneousSymbols
+
MiscellaneousSymbolsandArrows
xmlUCSIsMiscellaneousSymbolsandArrows
+
MiscellaneousTechnical
xmlUCSIsMiscellaneousTechnical
+
Mixed
xmlIsMixedElement
+xmlParseElementChildrenContentDecl
+xmlParseElementContentDecl
+xmlParseElementMixedContentDecl
+
Mongolian
xmlUCSIsMongolian
+
More
xmlXPathSubstringFunction
+
Move
xmlListCopy
+
Moves
xmlTextReaderMoveToAttribute
+xmlTextReaderMoveToAttributeNo
+xmlTextReaderMoveToAttributeNs
+xmlTextReaderMoveToElement
+xmlTextReaderMoveToFirstAttribute
+xmlTextReaderMoveToNextAttribute
+xmlTextReaderRead
+
MusicalSymbols
xmlUCSIsMusicalSymbols
+
Myanmar
xmlUCSIsMyanmar
+

Letter N:

NAME
xmlParseDTD
+xmlSAXParseDTD
+
NCName
xmlNamespaceParseNCName
+xmlNamespaceParseNSDef
+xmlNamespaceParseQName
+xmlSplitQName
+xmlSplitQName2
+xmlValidateNCName
+xmlXPathParseNCName
+
NCNameChar
xmlNamespaceParseNCName
+xmlXPathParseNCName
+
NDATA
xmlParseEntityDecl
+
NDataDecl
xmlParseEntityDecl
+
NDataDecl?
xmlParseEntityDecl
+
NMTOKEN
xmlParseAttributeType
+xmlValidateAttributeValue
+
NMTOKENS
xmlParseAttributeType
+xmlValidateAttributeValue
+
NMToken
xmlValidateNMToken
+
NOTATION
xmlParseEnumeratedType
+xmlParseNotationType
+xmlSchemaGetCanonValue
+xmlSchemaNewNOTATIONValue
+xmlValidateDtdFinal
+
NOTE
xmlBufShrink
+xmlCtxtReadFd
+xmlParseExternalID
+xmlParseNotationDecl
+xmlReadFd
+xmlReaderForFd
+xmlReaderNewFd
+
NOTE:
_xmlParserInput
+htmlSetMetaEncoding
+xmlCheckLanguageID
+xmlDOMWrapAdoptNode
+xmlDOMWrapReconcileNamespaces
+xmlDOMWrapRemoveNode
+xmlGetProp
+xmlInitCharEncodingHandlers
+xmlModuleOpen
+xmlModuleSymbol
+xmlNewChild
+xmlNewDocNode
+xmlNewDocNodeEatName
+xmlNewTextChild
+xmlNewTextWriter
+xmlNewTextWriterPushParser
+xmlNodeAddContent
+xmlNodeAddContentLen
+xmlNodeSetContent
+xmlNodeSetContentLen
+xmlParseExternalID
+xmlParsePEReference
+xmlParserHandlePEReference
+xmlStreamPush
+xmlStreamPushAttr
+xmlStreamPushNode
+xmlTextReaderCurrentDoc
+
NRK
_htmlElemDesc
+
NSDef
xmlNamespaceParseNSDef
+
NaN
xmlXPathBooleanFunction
+xmlXPathIsNaN
+xmlXPathStringFunction
+
NameChar
xmlParseName
+xmlParseNmtoken
+xmlScanName
+xmlXPathParseName
+
Names
xmlParseAttributeType
+xmlParseName
+xmlScanName
+xmlValidateAttributeValue
+xmlValidateNamesValue
+
Namespace
XML_XML_NAMESPACE
+_xmlElementContent
+xmlNewGlobalNs
+xmlNewNs
+xmlXPathNodeSetFreeNs
+xmlXPtrBuildNodeList
+
Nanespace
_xmlParserCtxt
+
Needed
xmlScanName
+
Nesting
xmlParseElementChildrenContentDecl
+xmlParseElementMixedContentDecl
+xmlParseMarkupDecl
+
New
_htmlElemDesc
+
Nmtoken
xmlParseAttributeType
+xmlParseEnumerationType
+xmlParseNmtoken
+xmlValidateAttributeValue
+xmlValidateNmtokenValue
+
Nmtokens
xmlParseAttributeType
+xmlParseNmtoken
+xmlValidateAttributeValue
+xmlValidateNmtokensValue
+
Node
_xmlParserCtxt
+_xmlValidCtxt
+xmlNodeListGetRawString
+xmlNodeListGetString
+xmlXPathNewNodeSet
+
NodeInfo
_xmlParserCtxt
+
NodeList
xmlXPathNodeSetGetLength
+xmlXPathNodeSetItem
+
NodePtr
xmlXPathNewNodeSet
+xmlXPathNewValueTree
+xmlXPathWrapNodeSet
+xmlXPtrNewLocationSetNodes
+
NodeSet
xmlXPathFreeNodeSet
+xmlXPathNewNodeSet
+xmlXPathNewNodeSetList
+xmlXPathNodeSetAdd
+xmlXPathNodeSetAddNs
+xmlXPathNodeSetAddUnique
+xmlXPathNodeSetDel
+xmlXPathNodeSetMerge
+xmlXPathNodeSetRemove
+
NodeSetList
xmlXPathFreeNodeSetList
+
NodeType
xmlXPathIsNodeType
+
Nodeset
xmlXPathNewNodeSetList
+xmlXPathWrapNodeSet
+
Non-static
xmlIOHTTPOpenW
+
Normalization
xmlNormalizeURIPath
+
Normalization:
xmlParseAttValue
+
Not
_xmlSchemaElement
+
NotaNumber
xmlXPathIsNaN
+
Notation
_xmlNotation
+xmlParseEntityDecl
+xmlParseNotationType
+xmlValidateNotationUse
+xmlValidateOneAttribute
+xmlValidateOneNamespace
+
NotationDecl
xmlParseMarkupDecl
+xmlParseNotationDecl
+
NotationType
xmlParseEnumeratedType
+xmlParseNotationType
+
Note:
fatalErrorSAXFunc
+xmlBuildRelativeURI
+xmlCharEncodingOutputFunc
+xmlGetDtdEntity
+xmlParseAttValue
+xmlParseNotationType
+xmlRelaxNGNewDocParserCtxt
+xmlUTF8Strsub
+
Number
_xmlParserCtxt
+xmlXPathStringEvalNumber
+xmlXPathStringFunction
+
NumberForms
xmlUCSIsNumberForms
+

A-B +C-C +D-E +F-I +J-N +O-P +Q-R +S-S +T-U +V-X +Y-a +b-b +c-c +d-d +e-e +f-f +g-h +i-i +j-l +m-m +n-n +o-o +p-p +q-r +s-s +t-t +u-v +w-w +x-x +y-z +

Daniel Veillard

diff --git a/doc/APIchunk5.html b/doc/APIchunk5.html new file mode 100644 index 0000000..da60d1a --- /dev/null +++ b/doc/APIchunk5.html @@ -0,0 +1,293 @@ + + +API Alphabetic Index O-P for libxml2
Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
Made with Libxml2 Logo

The XML C parser and toolkit of Gnome

API Alphabetic Index O-P for libxml2

Developer Menu
API Indexes
Related links

A-B +C-C +D-E +F-I +J-N +O-P +Q-R +S-S +T-U +V-X +Y-a +b-b +c-c +d-d +e-e +f-f +g-h +i-i +j-l +m-m +n-n +o-o +p-p +q-r +s-s +t-t +u-v +w-w +x-x +y-z +

Letter O:

OBSOLETE:
xmlHandleEntity
+
ONCE
_xmlElementContent
+
OPT
_xmlElementContent
+
OUT
xmlNanoHTTPMethod
+xmlNanoHTTPMethodRedir
+xmlRegExecErrInfo
+xmlRegExecNextValues
+
OUT:
htmlDocDumpMemory
+htmlDocDumpMemoryFormat
+xmlDocDumpFormatMemory
+xmlDocDumpMemory
+
Obsolete
XML_SCHEMAS_ANYATTR_LAX
+XML_SCHEMAS_ANYATTR_SKIP
+XML_SCHEMAS_ANYATTR_STRICT
+XML_SCHEMAS_ELEM_NSDEFAULT
+_xmlSchema
+_xmlSchemaElement
+_xmlSchemaFacet
+_xmlSchemaType
+
Obtain
xmlTextReaderLocatorBaseURI
+xmlTextReaderLocatorLineNumber
+
Ogham
xmlUCSIsOgham
+
OldItalic
xmlUCSIsOldItalic
+
One
INPUT_CHUNK
+xmlCleanupParser
+xmlParseAttributeType
+xmlSetGenericErrorFunc
+xmlValidateElementDecl
+
Open
xmlIOHTTPOpenW
+
Opens
xmlModuleOpen
+
OpticalCharacterRecognition
xmlUCSIsOpticalCharacterRecognition
+
Optional
_htmlElemDesc
+
Oriya
xmlUCSIsOriya
+
Osmanya
xmlUCSIsOsmanya
+
Other
xmlXPathContextSetCache
+
Otherwise
xmlStreamPush
+xmlStreamPushAttr
+
Output
xmlOutputCloseCallback
+xmlOutputMatchCallback
+xmlOutputOpenCallback
+xmlOutputWriteCallback
+
OutputBufferCreateFilenameFunc
xmlOutputBufferCreateFilenameDefault
+
Override
xmlGcMemSetup
+xmlMemSetup
+

Letter P:

P32
xmlValidCtxtNormalizeAttributeValue
+
PCDATA
_htmlElemDesc
+_xmlElementContent
+xmlParseElementMixedContentDecl
+
PEDecl
xmlParseEntityDecl
+
PEDef
xmlParseEntityDecl
+
PEReference
xmlDecodeEntities
+xmlParseDocTypeDecl
+xmlParseEntityValue
+xmlParseExternalSubset
+xmlParsePEReference
+xmlParserHandlePEReference
+xmlParserHandleReference
+xmlStringDecodeEntities
+xmlStringLenDecodeEntities
+
PEs
xmlParseMarkupDecl
+
PITarget
xmlParsePI
+xmlParsePITarget
+
PIs
xmlDocGetRootElement
+xmlDocSetRootElement
+
PLUS
_xmlElementContent
+
POST
xmlIOHTTPOpenW
+xmlRegisterHTTPPostCallbacks
+
PSVI
_xmlAttr
+_xmlDoc
+_xmlNode
+
PUBLIC
_xmlDtd
+_xmlEntity
+xmlCreateEntityParserCtxt
+xmlCreateIntSubset
+xmlParseExternalID
+xmlParseNotationDecl
+
PUT
xmlRegisterHTTPPostCallbacks
+
Parameter
xmlParserHandlePEReference
+
Parameter-entity
xmlParseElementChildrenContentDecl
+xmlParseMarkupDecl
+xmlParsePEReference
+xmlParserHandlePEReference
+
Parse
docbParseChunk
+htmlParseChunk
+htmlSAXParseDoc
+xmlParseBalancedChunkMemory
+xmlParseBalancedChunkMemoryRecover
+xmlParseCDSect
+xmlParseChunk
+xmlParseContent
+xmlParseCtxtExternalEntity
+xmlParseDefaultDecl
+xmlParseExternalEntity
+xmlParseExternalID
+xmlParseInNodeContext
+xmlParseQuotedString
+xmlParseURI
+xmlParseURIRaw
+xmlParseURIReference
+xmlStringGetNodeList
+xmlStringLenGetNodeList
+xmlXPathEvalExpr
+
Parsed
xmlParseEntityRef
+xmlParserHandleReference
+
ParserInputBufferCreateFilenameFunc
xmlParserInputBufferCreateFilenameDefault
+
Parses
xmlRegexpCompile
+xmlTextReaderReadAttributeValue
+
Parsing
_xmlParserCtxt
+
Part
xmlRegexpCompile
+xmlSchemaGetBuiltInListSimpleTypeItemType
+
Path
xmlGetNodePath
+xmlXPathEval
+xmlXPathNodeEval
+xmlXPtrEval
+
People
xmlEncodeEntities
+
PhoneticExtensions
xmlUCSIsPhoneticExtensions
+
Please
xmlNormalizeWindowsPath
+
Plug
xmlSchemaSAXPlug
+
Pointer
xmlCheckUTF8
+
Points
xmlXPtrNewRangePoints
+
Pop
_xmlXPathParserContext
+xmlRelaxNGValidatePopElement
+xmlValidatePopElement
+
Pops
inputPop
+namePop
+nodePop
+valuePop
+xmlXPathPopBoolean
+xmlXPathPopExternal
+xmlXPathPopNodeSet
+xmlXPathPopNumber
+xmlXPathPopString
+
Position
_xmlParserNodeInfo
+
Possibility
_xmlXPathContext
+
Precompiled
xmlXPathCompiledEval
+
Predicate
xmlXPathEvalPredicate
+xmlXPathEvaluatePredicateResult
+xmlXPtrEvalRangePredicate
+
PredicateExpr
xmlXPathEvalPredicate
+xmlXPathEvaluatePredicateResult
+xmlXPtrEvalRangePredicate
+
Prefix
xmlNamespaceParseQName
+xmlSplitQName
+xmlSplitQName2
+xmlTextReaderConstName
+xmlTextReaderName
+
PrefixDef
xmlNamespaceParseNSDef
+
Print
xmlRegexpPrint
+xmlShellPrintNode
+xmlShellPrintXPathError
+
Prints
xmlPrintURI
+xmlShellPrintXPathResult
+
PrivateUse
xmlUCSIsPrivateUse
+
PrivateUseArea
xmlUCSIsPrivateUseArea
+
Processing
XML_CATALOG_PI
+xmlParsePI
+
Productions
xmlParseExternalID
+
Proper
xmlParseElementChildrenContentDecl
+xmlParseElementMixedContentDecl
+xmlParseMarkupDecl
+
Prototype
xmlXPathFuncLookupFunc
+xmlXPathVariableLookupFunc
+
Provide
getColumnNumber
+getLineNumber
+xmlSAX2GetColumnNumber
+xmlSAX2GetLineNumber
+xmlTextReaderGetParserColumnNumber
+xmlTextReaderGetParserLineNumber
+
Provides
getPublicId
+getSystemId
+xmlGcMemGet
+xmlMemBlocks
+xmlMemGet
+xmlMemUsed
+xmlNanoHTTPContentLength
+xmlNanoHTTPEncoding
+xmlNanoHTTPMimeType
+xmlNanoHTTPRedir
+xmlSAX2GetPublicId
+xmlSAX2GetSystemId
+xmlTextReaderAttributeCount
+xmlTextReaderConstValue
+xmlTextReaderGetAttribute
+xmlTextReaderGetAttributeNo
+xmlTextReaderGetAttributeNs
+xmlTextReaderValue
+xmlXPathIsInf
+xmlXPathIsNaN
+
Proxy
xmlNanoFTPScanProxy
+xmlNanoHTTPScanProxy
+
Proxy-Authenticate
xmlNanoHTTPAuthHeader
+
PubidChar
IS_PUBIDCHAR
+xmlParsePubidLiteral
+
PubidLiteral
xmlParseExternalID
+xmlParseNotationDecl
+xmlParsePubidLiteral
+
Public
_xmlNotation
+xmlExternalEntityLoader
+xmlLoadExternalEntity
+xmlParseExternalID
+
PublicID
xmlParseExternalID
+xmlParseNotationDecl
+
Push
xmlParserInputBufferPush
+xmlRegExecPushString
+xmlRegExecPushString2
+xmlRelaxNGValidatePushElement
+xmlStreamPush
+xmlStreamPushAttr
+xmlStreamPushNode
+xmlValidatePushElement
+
Pushes
inputPush
+namePush
+nodePush
+valuePush
+xmlXPathReturnBoolean
+xmlXPathReturnEmptyNodeSet
+xmlXPathReturnEmptyString
+xmlXPathReturnExternal
+xmlXPathReturnFalse
+xmlXPathReturnNodeSet
+xmlXPathReturnNumber
+xmlXPathReturnString
+xmlXPathReturnTrue
+

A-B +C-C +D-E +F-I +J-N +O-P +Q-R +S-S +T-U +V-X +Y-a +b-b +c-c +d-d +e-e +f-f +g-h +i-i +j-l +m-m +n-n +o-o +p-p +q-r +s-s +t-t +u-v +w-w +x-x +y-z +

Daniel Veillard

diff --git a/doc/APIchunk6.html b/doc/APIchunk6.html new file mode 100644 index 0000000..346e7e5 --- /dev/null +++ b/doc/APIchunk6.html @@ -0,0 +1,294 @@ + + +API Alphabetic Index Q-R for libxml2
Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
Made with Libxml2 Logo

The XML C parser and toolkit of Gnome

API Alphabetic Index Q-R for libxml2

Developer Menu
API Indexes
Related links

A-B +C-C +D-E +F-I +J-N +O-P +Q-R +S-S +T-U +V-X +Y-a +b-b +c-c +d-d +e-e +f-f +g-h +i-i +j-l +m-m +n-n +o-o +p-p +q-r +s-s +t-t +u-v +w-w +x-x +y-z +

Letter Q:

QName
xmlBuildQName
+xmlDictQLookup
+xmlHashQLookup
+xmlNamespaceParseQName
+xmlParseAttribute
+xmlParseEndTag
+xmlParseStartTag
+xmlSchemaGetCanonValue
+xmlSchemaNewQNameValue
+xmlSetProp
+xmlSplitQName
+xmlSplitQName2
+xmlSplitQName3
+xmlStrQEqual
+xmlValidateQName
+
QNames
xmlDOMWrapAdoptNode
+xmlDOMWrapCloneNode
+xmlDOMWrapReconcileNamespaces
+xmlHashQLookup2
+
QUIT
xmlNanoFTPQuit
+
Qualified
xmlSplitQName3
+
Query
xmlDictSize
+xmlHashSize
+xmlStreamWantsAnyNode
+

Letter R:

REC
IS_BASECHAR
+IS_COMBINING
+IS_DIGIT
+xmlCheckLanguageID
+
REC-xml
xmlGetCharEncodingName
+xmlParserHandlePEReference
+xmlParserHandleReference
+
REFs
XML_DETECT_IDS
+XML_SKIP_IDS
+
REQUIRED
xmlParseAttributeType
+xmlParseDefaultDecl
+
RFC
xmlBuildURI
+xmlCheckLanguageID
+xmlNodeGetBase
+xmlNormalizeURIPath
+xmlParseURI
+xmlParseURIReference
+
RFC2396
xmlURIEscape
+
Raises
xmlXPathSetArityError
+xmlXPathSetError
+xmlXPathSetTypeError
+
Read
xmlBufGetNodeContent
+xmlFileRead
+xmlGetFeature
+xmlGetUTF8Char
+xmlIOFTPRead
+xmlIOHTTPRead
+xmlNodeBufGetContent
+xmlNodeGetContent
+xmlTextReaderConstValue
+xmlTextReaderGetParserProp
+xmlTextReaderRelaxNGSetSchema
+xmlTextReaderRelaxNGValidate
+xmlTextReaderRelaxNGValidateCtxt
+xmlTextReaderSchemaValidate
+xmlTextReaderSchemaValidateCtxt
+xmlTextReaderSetSchema
+
Reader
xmlTextReaderPreserve
+xmlTextReaderPreservePattern
+
Readers
xmlTextReaderNextSibling
+
Reads
xmlTextReaderCurrentNode
+xmlTextReaderExpand
+xmlTextReaderReadInnerXml
+xmlTextReaderReadOuterXml
+xmlTextReaderReadString
+
Rec
xmlValidateDocument
+xmlValidateDocumentFinal
+xmlValidateDtdFinal
+
Receive
setDocumentLocator
+setDocumentLocatorSAXFunc
+xmlParseDefaultDecl
+xmlSAX2SetDocumentLocator
+
Receiving
charactersSAXFunc
+ignorableWhitespaceSAXFunc
+
Recurse
xmlSearchNsByHref
+
Recursion
xmlParsePEReference
+xmlParserHandlePEReference
+
Ref
_xmlRef
+xmlAddRef
+xmlFreeRefTable
+xmlIsRef
+xmlRemoveRef
+
Reference
htmlParseCharRef
+xmlDecodeEntities
+xmlParseAttValue
+xmlParseBalancedChunkMemory
+xmlParseBalancedChunkMemoryRecover
+xmlParseCharRef
+xmlParseContent
+xmlParseEntityValue
+xmlParseInNodeContext
+xmlParseReference
+xmlParserHandleReference
+xmlStringDecodeEntities
+xmlStringLenDecodeEntities
+
Reference:
xmlTextReaderNodeType
+
References
xmlBuildURI
+xmlDOMWrapAdoptNode
+xmlDOMWrapCloneNode
+xmlParseAttribute
+
Reflects
XML_SCHEMAS_QUALIF_ATTR
+XML_SCHEMAS_QUALIF_ELEM
+
Refresh
xmlParserInputBufferRead
+
Reg
xmlAutomataCompile
+
Register
xmlAddAttributeDecl
+xmlAddDocEntity
+xmlAddDtdEntity
+xmlAddElementDecl
+xmlAddID
+xmlAddNotationDecl
+xmlAddRef
+xmlRegisterCharEncodingHandler
+xmlRegisterInputCallbacks
+xmlRegisterOutputCallbacks
+xmlTextReaderSetErrorHandler
+xmlTextReaderSetStructuredErrorHandler
+xmlXPathRegisterFunc
+xmlXPathRegisterFuncNS
+xmlXPathRegisterNs
+xmlXPathRegisterVariable
+xmlXPathRegisterVariableNS
+
RegisterNodeFunc
xmlRegisterNodeDefault
+
Registers
xmlAddEncodingAlias
+xmlDeregisterNodeDefault
+xmlOutputBufferCreateFilenameDefault
+xmlParserInputBufferCreateFilenameDefault
+xmlRegisterDefaultInputCallbacks
+xmlRegisterDefaultOutputCallbacks
+xmlRegisterNodeDefault
+xmlXPathRegisterAllFunctions
+xmlXPathRegisterFuncLookup
+
Relative
xmlBuildURI
+
Relax-NG
xmlRelaxNGGetParserErrors
+xmlRelaxNGGetValidErrors
+xmlRelaxNGParse
+xmlRelaxNGSetParserErrors
+xmlRelaxNGSetParserStructuredErrors
+xmlRelaxNGSetValidErrors
+xmlRelaxNGSetValidStructuredErrors
+xmlRelaxNGValidateDoc
+xmlRelaxNGValidityErrorFunc
+xmlRelaxNGValidityWarningFunc
+
RelaxNG
_xmlSchemaElement
+xmlRelaxNGCleanupTypes
+xmlRelaxNGDump
+xmlRelaxNGDumpTree
+xmlRelaxNGFree
+xmlRelaxNGNewDocParserCtxt
+xmlRelaxNGParse
+xmlRelaxNGValidatePopElement
+xmlRelaxNGValidatePushCData
+xmlRelaxNGValidatePushElement
+xmlRelaxParserSetFlag
+xmlTextReaderRelaxNGSetSchema
+xmlTextReaderRelaxNGValidate
+xmlTextReaderRelaxNGValidateCtxt
+
RelaxNGs
xmlRelaxNGNewDocParserCtxt
+xmlRelaxNGNewMemParserCtxt
+xmlRelaxNGNewParserCtxt
+xmlRelaxNGNewValidCtxt
+
Remove
xmlACatalogRemove
+xmlBufShrink
+xmlBufferDetach
+xmlBufferShrink
+xmlCatalogRemove
+xmlListClear
+xmlListRemoveAll
+xmlListRemoveFirst
+xmlListRemoveLast
+xmlParserHandleReference
+xmlRemoveID
+xmlRemoveRef
+xmlUnsetNsProp
+xmlUnsetProp
+
Removes
xmlListPopBack
+xmlListPopFront
+xmlSchemaCollapseString
+xmlXPathNodeSetDel
+xmlXPathNodeSetRemove
+xmlXPtrLocationSetDel
+xmlXPtrLocationSetRemove
+
Replace
xmlNodeSetContent
+xmlNodeSetContentLen
+
Replaces
xmlSchemaWhiteSpaceReplace
+
Required
_htmlElemDesc
+htmlAttrAllowed
+xmlParseDefaultDecl
+xmlValidateOneElement
+
Reset
htmlCtxtReset
+xmlCtxtReset
+xmlCtxtResetPush
+
Resize
xmlBufferResize
+
Resolves
xmlTextReaderLookupNamespace
+
Resolving
xmlBuildURI
+
Retrieve
xmlTextReaderGetErrorHandler
+xmlTextReaderIsValid
+
Return
CHECK_TYPE0
+
Returns
htmlDefaultSubelement
+htmlElementAllowedHereDesc
+htmlRequiredAttrs
+xmlGetDocEntity
+xmlGetDtdEntity
+xmlGetParameterEntity
+xmlHasFeature
+xmlLinkGetData
+xmlXPathCheckError
+xmlXPathGetContextNode
+xmlXPathGetDocument
+xmlXPathGetError
+xmlXPathNodeSetGetLength
+xmlXPathNodeSetIsEmpty
+xmlXPathNodeSetItem
+xmlXPathStackIsExternal
+xmlXPathStackIsNodeSet
+
Returns:
xmlRegExecErrInfo
+xmlRegExecNextValues
+
Reverse
xmlListReverse
+
Root
xmlParseDocTypeDecl
+xmlValidateRoot
+
Runic
xmlUCSIsRunic
+

A-B +C-C +D-E +F-I +J-N +O-P +Q-R +S-S +T-U +V-X +Y-a +b-b +c-c +d-d +e-e +f-f +g-h +i-i +j-l +m-m +n-n +o-o +p-p +q-r +s-s +t-t +u-v +w-w +x-x +y-z +

Daniel Veillard

diff --git a/doc/APIchunk7.html b/doc/APIchunk7.html new file mode 100644 index 0000000..3f46f99 --- /dev/null +++ b/doc/APIchunk7.html @@ -0,0 +1,330 @@ + + +API Alphabetic Index S-S for libxml2
Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
Made with Libxml2 Logo

The XML C parser and toolkit of Gnome

API Alphabetic Index S-S for libxml2

Developer Menu
API Indexes
Related links

A-B +C-C +D-E +F-I +J-N +O-P +Q-R +S-S +T-U +V-X +Y-a +b-b +c-c +d-d +e-e +f-f +g-h +i-i +j-l +m-m +n-n +o-o +p-p +q-r +s-s +t-t +u-v +w-w +x-x +y-z +

Letter S:

SAX1
LIBXML_SAX1_ENABLED
+
SAX2
XML_SAX2_MAGIC
+endElementNsSAX2Func
+initdocbDefaultSAXHandler
+inithtmlDefaultSAXHandler
+initxmlDefaultSAXHandler
+startElementNsSAX2Func
+xmlDefaultSAXHandlerInit
+xmlSAX2EndElementNs
+xmlSAX2InitDefaultSAXHandler
+xmlSAX2InitDocbDefaultSAXHandler
+xmlSAX2InitHtmlDefaultSAXHandler
+xmlSAX2StartElementNs
+xmlSchemaValidateStream
+
SAX::substituteEntities
xmlSubstituteEntitiesDefault
+
SDDecl
xmlParseSDDecl
+
SDDecl?
xmlParseXMLDecl
+
SEQ
_xmlElementContent
+
SGML
LIBXML_DOCB_ENABLED
+docbCreateFileParserCtxt
+docbCreatePushParserCtxt
+docbEncodeEntities
+docbFreeParserCtxt
+docbParseDoc
+docbParseDocument
+docbParseFile
+docbSAXParseDoc
+docbSAXParseFile
+xmlCatalogConvert
+xmlCatalogIsEmpty
+xmlConvertSGMLCatalog
+xmlLoadACatalog
+xmlLoadCatalog
+xmlLoadSGMLSuperCatalog
+xmlNewCatalog
+xmlParseComment
+
SGMLSOURCE
getPublicId
+xmlSAX2GetPublicId
+
SITE
xmlNanoFTPProxy
+
STag
htmlParseElement
+xmlParseElement
+xmlParseStartTag
+
SYSTEM
_xmlDtd
+_xmlEntity
+_xmlParserCtxt
+externalSubset
+externalSubsetSAXFunc
+internalSubset
+internalSubsetSAXFunc
+xmlParseExternalID
+xmlParseNotationDecl
+xmlSAX2ExternalSubset
+xmlSAX2InternalSubset
+
Same
IS_PUBIDCHAR_CH
+
Save
xmlCopyError
+xmlSaveDoc
+xmlSaveTree
+xmlSaveUri
+
Scan
xmlHashCopy
+xmlHashScan
+xmlHashScan3
+xmlHashScanFull
+xmlHashScanFull3
+
Schema
xmlSchemaDump
+xmlSchemaFree
+xmlSchemaFreeFacet
+xmlSchemaFreeType
+xmlSchemaGetBuiltInListSimpleTypeItemType
+xmlSchemaGetCanonValue
+xmlSchemaParse
+xmlTextReaderSchemaValidate
+xmlTextReaderSchemaValidateCtxt
+xmlTextReaderSetSchema
+
Schemas
LIBXML_SCHEMAS_ENABLED
+xmlRegexpCompile
+xmlRelaxNGCleanupTypes
+xmlSchemaCleanupTypes
+xmlSchemaFreeValue
+xmlSchemaGetPredefinedType
+xmlSchemaInitTypes
+xmlSchemaNewDocParserCtxt
+xmlSchemaNewMemParserCtxt
+xmlSchemaNewParserCtxt
+xmlSchemaNewValidCtxt
+
Schematron
LIBXML_SCHEMATRON_ENABLED
+xmlSchematronFree
+xmlSchematronParse
+xmlSchematronSetValidStructuredErrors
+xmlSchematronValidityErrorFunc
+xmlSchematronValidityWarningFunc
+
Schematrons
xmlSchematronNewDocParserCtxt
+xmlSchematronNewMemParserCtxt
+xmlSchematronNewParserCtxt
+xmlSchematronNewValidCtxt
+
Script
htmlIsScriptAttribute
+
Search
xmlFindCharEncodingHandler
+xmlGetCharEncodingHandler
+xmlGetDtdAttrDesc
+xmlGetDtdElementDesc
+xmlGetDtdNotationDesc
+xmlGetDtdQAttrDesc
+xmlGetDtdQElementDesc
+xmlGetID
+xmlGetLastChild
+xmlGetNoNsProp
+xmlGetNsList
+xmlGetNsProp
+xmlGetProp
+xmlHasNsProp
+xmlHasProp
+xmlIsMixedElement
+xmlListReverseSearch
+xmlListSearch
+xmlSearchNs
+xmlSearchNsByHref
+xmlXPathFunctionLookup
+xmlXPathFunctionLookupNS
+xmlXPathNsLookup
+xmlXPathVariableLookup
+xmlXPathVariableLookupNS
+
Searches
xmlNodeGetBase
+xmlNodeGetLang
+xmlNodeGetSpacePreserve
+
Second
xmlCheckLanguageID
+
Section
xmlGetCharEncodingName
+xmlNormalizeURIPath
+
See
xmlCleanupParser
+xmlLinkGetData
+xmlParseNotationDecl
+xmlTextReaderByteConsumed
+
Semi
xmlRelaxParserSetFlag
+
Send
xmlNanoFTPQuit
+
Serialize
xmlAttrSerializeTxtContent
+xmlExpDump
+
Sets
htmlSetMetaEncoding
+xmlBufferSetAllocationScheme
+xmlSchemaSetValidOptions
+xmlXPathDifference
+xmlXPathDistinct
+xmlXPathDistinctSorted
+xmlXPathHasSameNodes
+xmlXPathIntersection
+xmlXPathLeading
+xmlXPathLeadingSorted
+xmlXPathNodeLeading
+xmlXPathNodeLeadingSorted
+xmlXPathNodeTrailing
+xmlXPathNodeTrailingSorted
+xmlXPathSetContextNode
+xmlXPathTrailing
+xmlXPathTrailingSorted
+
Setting
xmlSchemaValidateSetLocator
+
Setup
xmlNanoFTPProxy
+xmlReaderNewDoc
+xmlReaderNewFd
+xmlReaderNewIO
+xmlReaderNewMemory
+xmlReaderNewWalker
+xmlSetupParserForBuffer
+xmlTextReaderSetup
+
Shavian
xmlUCSIsShavian
+
Shell
xmlShellReadlineFunc
+
Shema
xmlRelaxNGParse
+xmlSchemaParse
+xmlSchematronParse
+
Should
_xmlParserCtxt
+xmlGcMemSetup
+xmlMemSetup
+xmlNanoFTPScanProxy
+xmlNanoHTTPScanProxy
+xmlStrEqual
+xmlStringGetNodeList
+xmlStringLenGetNodeList
+
Show
xmlShellPwd
+
Signature
xmlC14NIsVisibleCallback
+xmlDeregisterNodeFunc
+xmlFreeFunc
+xmlGenericErrorFunc
+xmlMallocFunc
+xmlOutputBufferCreateFilenameFunc
+xmlParserInputBufferCreateFilenameFunc
+xmlReallocFunc
+xmlRegisterNodeFunc
+xmlRelaxNGValidityErrorFunc
+xmlRelaxNGValidityWarningFunc
+xmlSchemaValidityErrorFunc
+xmlSchemaValidityWarningFunc
+xmlSchematronValidityErrorFunc
+xmlSchematronValidityWarningFunc
+xmlStrdupFunc
+xmlStructuredErrorFunc
+xmlTextReaderErrorFunc
+
Similarly
xmlParseEntityRef
+
Simply
xmlCreateURI
+
Since
xmlNodeDump
+xmlStrcat
+xmlStrdup
+xmlTextReaderNormalization
+
Single
xmlCheckLanguageID
+
Sinhala
xmlUCSIsSinhala
+
Skip
XML_SCHEMAS_ANYATTR_SKIP
+XML_SCHEMAS_ANY_SKIP
+xmlNextChar
+xmlParseComment
+xmlTextReaderNext
+xmlTextReaderNextSibling
+
Skips
MOVETO_ENDTAG
+MOVETO_STARTTAG
+SKIP_EOL
+
SmallFormVariants
xmlUCSIsSmallFormVariants
+
Some
_htmlElemDesc
+xmlBuildRelativeURI
+xmlSchemaGetCanonValue
+
Sort
xmlListSort
+xmlXPathNodeSetSort
+
SpacingModifierLetters
xmlUCSIsSpacingModifierLetters
+
Spec
xmlParseStartTag
+
Special
XML_CTXT_FINISH_DTD_0
+XML_CTXT_FINISH_DTD_1
+XML_SAX2_MAGIC
+
Specials
xmlUCSIsSpecials
+
Speed
_xmlParserCtxt
+
Standalone
xmlParseSDDecl
+xmlValidCtxtNormalizeAttributeValue
+
Start
xmlNanoFTPOpen
+xmlTextWriterStartAttribute
+xmlTextWriterStartAttributeNS
+xmlTextWriterStartCDATA
+xmlTextWriterStartComment
+xmlTextWriterStartDTD
+xmlTextWriterStartDTDAttlist
+xmlTextWriterStartDTDElement
+xmlTextWriterStartDTDEntity
+xmlTextWriterStartDocument
+xmlTextWriterStartElement
+xmlTextWriterStartElementNS
+xmlTextWriterStartPI
+
StringType
xmlParseAttributeType
+
Strings
xmlXPathStringLengthFunction
+xmlXPathSubstringFunction
+
Subcode
xmlCheckLanguageID
+
Subset
xmlParseMarkupDecl
+
Super
xmlLoadSGMLSuperCatalog
+
SuperscriptsandSubscripts
xmlUCSIsSuperscriptsandSubscripts
+
SupplementalArrows-A
xmlUCSIsSupplementalArrowsA
+
SupplementalArrows-B
xmlUCSIsSupplementalArrowsB
+
SupplementalMathematicalOperators
xmlUCSIsSupplementalMathematicalOperators
+
SupplementaryPrivateUseArea-A
xmlUCSIsSupplementaryPrivateUseAreaA
+
SupplementaryPrivateUseArea-B
xmlUCSIsSupplementaryPrivateUseAreaB
+
Syriac
xmlUCSIsSyriac
+
System
_xmlNotation
+xmlExternalEntityLoader
+xmlNoNetExternalEntityLoader
+xmlParseCtxtExternalEntity
+xmlParseExternalEntity
+xmlTextReaderNodeType
+
SystemLiteral
xmlNamespaceParseNSDef
+xmlParseExternalID
+xmlParseNotationDecl
+xmlParseSystemLiteral
+

A-B +C-C +D-E +F-I +J-N +O-P +Q-R +S-S +T-U +V-X +Y-a +b-b +c-c +d-d +e-e +f-f +g-h +i-i +j-l +m-m +n-n +o-o +p-p +q-r +s-s +t-t +u-v +w-w +x-x +y-z +

Daniel Veillard

diff --git a/doc/APIchunk8.html b/doc/APIchunk8.html new file mode 100644 index 0000000..934e39d --- /dev/null +++ b/doc/APIchunk8.html @@ -0,0 +1,307 @@ + + +API Alphabetic Index T-U for libxml2
Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
Made with Libxml2 Logo

The XML C parser and toolkit of Gnome

API Alphabetic Index T-U for libxml2

Developer Menu
API Indexes
Related links

A-B +C-C +D-E +F-I +J-N +O-P +Q-R +S-S +T-U +V-X +Y-a +b-b +c-c +d-d +e-e +f-f +g-h +i-i +j-l +m-m +n-n +o-o +p-p +q-r +s-s +t-t +u-v +w-w +x-x +y-z +

Letter T:

TEXT
xmlAddChild
+xmlAddChildList
+xmlAddPrevSibling
+xmlAddSibling
+xmlBufGetNodeContent
+xmlNewTextChild
+xmlNodeBufGetContent
+xmlNodeGetContent
+
TEXTs
xmlNewChild
+xmlNodeListGetRawString
+xmlNodeListGetString
+xmlStringGetNodeList
+xmlStringLenGetNodeList
+
TODO
xmlParseElementChildrenContentDecl
+xmlParseSDDecl
+
TODO:
XML_SCHEMAS_TYPE_VARIETY_ABSENT
+htmlEntityLookup
+htmlEntityValueLookup
+htmlNodeDumpFileFormat
+xmlDOMWrapCloneNode
+xmlDecodeEntities
+xmlEncodeEntities
+xmlModuleOpen
+xmlNamespaceParseNCName
+xmlNamespaceParseNSDef
+xmlNamespaceParseQName
+xmlNewTextWriterMemory
+xmlNewTextWriterPushParser
+xmlOutputBufferCreateFilename
+xmlParseNamespace
+xmlParseQuotedString
+xmlParserHandleReference
+xmlParserInputBufferGrow
+xmlSaveDoc
+xmlSaveTree
+xmlScanName
+xmlSchemaGetCanonValue
+xmlTextWriterWriteRawLen
+xmlXPathNextAttribute
+
TRUE
xmlTextWriterStartDTDEntity
+xmlTextWriterWriteDTDEntity
+xmlTextWriterWriteDTDExternalEntity
+xmlTextWriterWriteDTDInternalEntity
+xmlTextWriterWriteFormatDTDInternalEntity
+xmlTextWriterWriteVFormatDTDInternalEntity
+
Tagalog
xmlUCSIsTagalog
+
Tagbanwa
xmlUCSIsTagbanwa
+
Tags
xmlUCSIsTags
+
TaiLe
xmlUCSIsTaiLe
+
TaiXuanJingSymbols
xmlUCSIsTaiXuanJingSymbols
+
Take
UTF8ToHtml
+UTF8Toisolat1
+docbEncodeEntities
+htmlEncodeEntities
+isolat1ToUTF8
+xmlCharEncodingInputFunc
+xmlCharEncodingOutputFunc
+
Takes
xmlStringDecodeEntities
+xmlStringLenDecodeEntities
+
Tamil
xmlUCSIsTamil
+
Telugu
xmlUCSIsTelugu
+
Test
xmlPatternMatch
+
Text
xmlNodeIsText
+xmlTextReaderReadAttributeValue
+xmlTextReaderReadString
+
TextDecl
xmlParseTextDecl
+
TextDecl?
xmlParseCtxtExternalEntity
+xmlParseEntity
+xmlParseExtParsedEnt
+xmlParseExternalEntity
+xmlSAXParseEntity
+
Thaana
xmlUCSIsThaana
+
Thai
xmlUCSIsThai
+
That
xmlAutomataNewAllTrans
+xmlParseElementChildrenContentDecl
+xmlParseMarkupDecl
+
Then
xmlValidateOneElement
+
There
xmlExpParse
+xmlXPathContextSetCache
+
Those
_xmlParserCtxt
+
Thus:
xmlXPathSubstringFunction
+
Tibetan
xmlUCSIsTibetan
+
Token
xmlParseAttributeType
+xmlValidateAttributeValue
+xmlValidateNmtokenValue
+xmlValidateNmtokensValue
+xmlValidateOneAttribute
+xmlValidateOneNamespace
+
TokenizedType
xmlParseAttributeType
+
Traversal
xmlXPathNextAncestor
+xmlXPathNextAncestorOrSelf
+xmlXPathNextAttribute
+xmlXPathNextChild
+xmlXPathNextDescendant
+xmlXPathNextDescendantOrSelf
+xmlXPathNextFollowing
+xmlXPathNextFollowingSibling
+xmlXPathNextNamespace
+xmlXPathNextParent
+xmlXPathNextPreceding
+xmlXPathNextPrecedingSibling
+xmlXPathNextSelf
+
Tree
xmlXPathNewValueTree
+
Tree:-
xmlParseNamespace
+
Trickery:
xmlScanName
+
Tries
xmlNanoFTPConnect
+xmlNanoFTPConnectTo
+xmlNanoFTPCwd
+xmlNanoFTPDele
+
True
xmlBoolToText
+
Try
xmlACatalogResolvePublic
+xmlACatalogResolveSystem
+xmlCatalogGetPublic
+xmlCatalogGetSystem
+xmlCatalogResolvePublic
+xmlCatalogResolveSystem
+xmlGetLineNo
+xmlIsXHTML
+xmlNanoFTPGetConnection
+xmlValidateAttributeDecl
+xmlValidateDocument
+xmlValidateDtd
+xmlValidateElement
+xmlValidateElementDecl
+xmlValidateNotationDecl
+xmlValidateOneAttribute
+xmlValidateOneElement
+xmlValidateOneNamespace
+xmlValidateRoot
+
Type
_xmlSchemaType
+xmlParseAttribute
+xmlParseAttributeType
+xmlParseDocTypeDecl
+xmlParseElement
+xmlParseElementDecl
+xmlSchemaFreeType
+xmlValidateElementDecl
+xmlValidateOneAttribute
+xmlValidateOneNamespace
+xmlValidateRoot
+
Types
xmlGetBufferAllocationScheme
+xmlParseElementMixedContentDecl
+xmlSetBufferAllocationScheme
+xmlValidateElementDecl
+

Letter U:

UCS4
xmlUTF8Charcmp
+
UNICODE
_htmlEntityDesc
+c
+
UNIX
xmlShell
+
UNUSED:
ignorableWhitespace
+ignorableWhitespaceSAXFunc
+xmlSAX2IgnorableWhitespace
+
URI-reference
xmlParseURI
+xmlParseURIRaw
+xmlParseURIReference
+
URN
globalNamespace
+namespaceDecl
+
USER
xmlNanoFTPProxy
+
UTF-16
_uconv_t
+
UTF16
xmlCharEncOutFunc
+
UTF4
xmlDetectCharEncoding
+
UTF8
_xmlBuffer
+p
+xmlCharEncOutFunc
+xmlGetUTF8Char
+xmlParseBalancedChunkMemory
+xmlParseBalancedChunkMemoryRecover
+xmlSplitQName
+xmlUTF8Charcmp
+xmlUTF8Size
+xmlUTF8Strlen
+xmlUTF8Strloc
+xmlUTF8Strndup
+xmlUTF8Strpos
+xmlUTF8Strsize
+
Ugaritic
xmlUCSIsUgaritic
+
Unescaping
xmlURIUnescapeString
+
Unicode
IS_CHAR
+LIBXML_UNICODE_ENABLED
+
UnifiedCanadianAboriginalSyllabics
xmlUCSIsUnifiedCanadianAboriginalSyllabics
+
Unique
xmlParseElementDecl
+xmlParseStartTag
+xmlValidateElementDecl
+xmlXPathIdFunction
+
Unix
xmlShellList
+
Unlink
xmlRemoveProp
+xmlReplaceNode
+xmlUnlinkNode
+
Unlinks
xmlDOMWrapRemoveNode
+
Unplug
xmlSchemaSAXUnplug
+
Unregisters
xmlCleanupEncodingAliases
+xmlDelEncodingAlias
+
Update
xmlNanoFTPUpdateURL
+
Upgrade
xmlKeepBlanksDefault
+
Use
XML_COMPLETE_ATTRS
+XML_DETECT_IDS
+_xmlDOMWrapCtxt
+_xmlParserCtxt
+xmlCopyNodeList
+xmlGetProp
+xmlIsBaseChar
+xmlIsBlank
+xmlIsChar
+xmlIsCombining
+xmlIsDigit
+xmlIsExtender
+xmlIsIdeographic
+xmlIsPubidChar
+xmlNewDocNode
+xmlNewDocNodeEatName
+xmlNewNodeEatName
+xmlNewPI
+xmlNewTextChild
+xmlPatternGetStreamCtxt
+xmlTextReaderRelaxNGSetSchema
+xmlTextReaderRelaxNGValidate
+xmlTextReaderRelaxNGValidateCtxt
+xmlTextReaderSchemaValidate
+xmlTextReaderSchemaValidateCtxt
+xmlTextReaderSetSchema
+xmlXPathContextSetCache
+
Used
XML_SCHEMAS_ANY_LAX
+XML_SCHEMAS_ANY_STRICT
+XML_SCHEMAS_ATTR_USE_PROHIBITED
+XML_SKIP_IDS
+_xmlSchemaType
+xmlCatalogGetDefaults
+xmlCatalogSetDebug
+xmlCatalogSetDefaults
+xmlParseBalancedChunkMemory
+xmlParseBalancedChunkMemoryRecover
+xmlParseExternalEntity
+xmlScanName
+
User
xmlSAXParseFileWithData
+xmlSAXParseMemoryWithData
+
UserCode
xmlCheckLanguageID
+
Uses
xmlNewNode
+xmlURIEscape
+

A-B +C-C +D-E +F-I +J-N +O-P +Q-R +S-S +T-U +V-X +Y-a +b-b +c-c +d-d +e-e +f-f +g-h +i-i +j-l +m-m +n-n +o-o +p-p +q-r +s-s +t-t +u-v +w-w +x-x +y-z +

Daniel Veillard

diff --git a/doc/APIchunk9.html b/doc/APIchunk9.html new file mode 100644 index 0000000..8c4ac1f --- /dev/null +++ b/doc/APIchunk9.html @@ -0,0 +1,273 @@ + + +API Alphabetic Index V-X for libxml2
Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
Made with Libxml2 Logo

The XML C parser and toolkit of Gnome

API Alphabetic Index V-X for libxml2

Developer Menu
API Indexes
Related links

A-B +C-C +D-E +F-I +J-N +O-P +Q-R +S-S +T-U +V-X +Y-a +b-b +c-c +d-d +e-e +f-f +g-h +i-i +j-l +m-m +n-n +o-o +p-p +q-r +s-s +t-t +u-v +w-w +x-x +y-z +

Letter V:

Valid
xmlValidateOneElement
+
Validate
XML_SCHEMAS_ANY_LAX
+xmlRelaxNGValidateDoc
+xmlRelaxNGValidateFullElement
+xmlSchemaValidateDoc
+xmlSchemaValidateOneElement
+xmlSchemaValidateStream
+xmlSchematronValidateDoc
+xmlShellValidate
+xmlValidateAttributeValue
+xmlValidateNameValue
+xmlValidateNamesValue
+xmlValidateNmtokenValue
+xmlValidateNmtokensValue
+xmlValidateNotationUse
+
Validity
xmlParseAttributeType
+
Value
xmlParseAttribute
+xmlValidateOneAttribute
+xmlValidateOneNamespace
+xmlXPathNewValueTree
+
Values
xmlCatalogSetDefaultPrefer
+xmlParseAttribute
+xmlParseAttributeType
+xmlParseDefaultDecl
+xmlParseEnumerationType
+xmlParseNotationType
+xmlValidateAttributeValue
+
Variable
xmlXPathVariableLookup
+xmlXPathVariableLookupNS
+
VariationSelectors
xmlUCSIsVariationSelectors
+
VariationSelectorsSupplement
xmlUCSIsVariationSelectorsSupplement
+
VersionInfo
xmlParseVersionInfo
+xmlParseXMLDecl
+
VersionInfo?
xmlParseTextDecl
+
VersionNum
xmlParseVersionInfo
+xmlParseVersionNum
+

Letter W:

W3C
xmlChildElementCount
+xmlFirstElementChild
+xmlLastElementChild
+xmlNextElementSibling
+xmlPreviousElementSibling
+xmlTextReaderSchemaValidate
+xmlTextReaderSchemaValidateCtxt
+
WARNING:
xmlCleanupParser
+xmlCleanupThreads
+xmlSchemaGetCanonValue
+xmlSchemaNewStringValue
+
WFC:
xmlParseAttribute
+xmlParseCharRef
+xmlParseDefaultDecl
+xmlParseElement
+xmlParseEntityRef
+xmlParseMarkupDecl
+xmlParsePEReference
+xmlParseStartTag
+xmlParserHandlePEReference
+xmlParserHandleReference
+
WWW-Authenticate
xmlNanoHTTPAuthHeader
+
WXS
_xmlSchemaElement
+
Walk
xmlListReverseWalk
+xmlListWalk
+
Warning
xmlSaveFileTo
+xmlSaveFormatFileTo
+
Was
_xmlParserInput
+
Well
xmlParseBalancedChunkMemory
+xmlParseBalancedChunkMemoryRecover
+xmlParseEntity
+xmlParseInNodeContext
+xmlRecoverDoc
+xmlRecoverFile
+xmlRecoverMemory
+xmlSAXParseDoc
+xmlSAXParseEntity
+xmlSAXParseFile
+xmlSAXParseFileWithData
+xmlSAXParseMemory
+xmlSAXParseMemoryWithData
+
What
_xmlError
+notationDecl
+notationDeclSAXFunc
+unparsedEntityDecl
+unparsedEntityDeclSAXFunc
+xmlDOMWrapCloneNode
+xmlSAX2NotationDecl
+xmlSAX2UnparsedEntityDecl
+
When
xmlHandleEntity
+xmlXPathCompareValues
+xmlXPathIdFunction
+
Wherever
xmlCurrentChar
+
Whitespace
xmlXPathNormalizeFunction
+
Will
xmlSaveFile
+xmlSaveFormatFile
+
With
xmlParseAttribute
+xmlParseEndTag
+xmlParseStartTag
+
Workaround
xmlSchemaValidateSetFilename
+
Working
xmlParseNamespace
+
Wrap
xmlXPathWrapNodeSet
+xmlXPtrWrapLocationSet
+
Wrapper
xmlFileOpen
+
Wraps
xmlXPathWrapCString
+xmlXPathWrapExternal
+xmlXPathWrapString
+
Writes
xmlTextWriterFullEndElement
+

Letter X:

XHTML
xmlIsXHTML
+
XInclude
LIBXML_XINCLUDE_ENABLED
+XINCLUDE_NS
+XINCLUDE_OLD_NS
+xmlDOMWrapCloneNode
+xmlXIncludeFreeContext
+xmlXIncludeNewContext
+xmlXIncludeProcess
+xmlXIncludeProcessFlags
+xmlXIncludeProcessFlagsData
+xmlXIncludeProcessNode
+xmlXIncludeProcessTree
+xmlXIncludeProcessTreeFlags
+xmlXIncludeProcessTreeFlagsData
+xmlXIncludeSetFlags
+
XInclude?
xmlDOMWrapCloneNode
+
XLINK_TYPE_NONE
xlinkIsLink
+
XML-1
xmlDetectCharEncoding
+xmlValidateAttributeDecl
+xmlValidateElementDecl
+xmlValidateNotationDecl
+xmlValidateOneAttribute
+xmlValidateOneElement
+xmlValidateOneNamespace
+xmlValidateRoot
+
XML-Schema
xmlSchemaGetValidErrors
+
XMLDecl
xmlParseXMLDecl
+
XMLDecl?
xmlParseDocument
+
XMLSchema
xmlSchemaGetPredefinedType
+
XML_ATTRIBUTE_DECL
_xmlAttribute
+
XML_ATTRIBUTE_ENUMERATION
xmlParseEnumeratedType
+
XML_ATTRIBUTE_FIXED
xmlParseDefaultDecl
+
XML_ATTRIBUTE_IMPLIED
xmlParseDefaultDecl
+
XML_ATTRIBUTE_NODE
_xmlAttr
+
XML_ATTRIBUTE_NONE
xmlParseDefaultDecl
+
XML_ATTRIBUTE_NOTATION
xmlParseEnumeratedType
+
XML_ATTRIBUTE_REQUIRED
xmlParseDefaultDecl
+
XML_BUFFER_ALLOC_DOUBLEIT
xmlGetBufferAllocationScheme
+xmlSetBufferAllocationScheme
+
XML_BUFFER_ALLOC_EXACT
xmlGetBufferAllocationScheme
+xmlSetBufferAllocationScheme
+
XML_BUFFER_ALLOC_HYBRID
xmlGetBufferAllocationScheme
+
XML_CAST_FPTR
XML_CAST_FPTR
+
XML_CATA_PREFER_PUBLIC
xmlCatalogSetDefaultPrefer
+
XML_CATA_PREFER_SYSTEM
xmlCatalogSetDefaultPrefer
+
XML_CHAR_ENCODING_
xmlDetectCharEncoding
+xmlParseCharEncoding
+
XML_CHAR_ENCODING_NONE
xmlParseCharEncoding
+xmlParserInputBufferCreateFilename
+
XML_DOCUMENT_NODE
_xmlDoc
+
XML_DTD_NODE
_xmlDtd
+
XML_ELEMENT_DECL
_xmlElement
+
XML_ELEMENT_TYPE_xxx
xmlParseElementContentDecl
+
XML_ENTITY_DECL
_xmlEntity
+
XML_ERR_OK
xmlParseInNodeContext
+
XML_PARSE_BIG_LINES
xmlGetLineNo
+
XML_PARSE_HUGE
XML_MAX_DICTIONARY_LIMIT
+XML_MAX_NAME_LENGTH
+XML_MAX_TEXT_LENGTH
+
XML_SCHEMAS_ELEM_GLOBAL
XML_SCHEMAS_ELEM_TOPLEVEL
+
XML_SCHEMAS_FACET_PRESERVE
_xmlSchemaFacet
+
XML_SCHEMAS_STRING
xmlSchemaNewStringValue
+
XML_SUBSTITUTE_PEREF
xmlDecodeEntities
+xmlStringDecodeEntities
+xmlStringLenDecodeEntities
+
XML_SUBSTITUTE_REF
xmlDecodeEntities
+xmlStringDecodeEntities
+xmlStringLenDecodeEntities
+
XML_xxx_yyy_ENTITY
xmlAddDocEntity
+xmlAddDtdEntity
+xmlNewEntity
+
XMl-Schema
xmlSchemaGetParserErrors
+
XPATH
xmlXPathFreeCompExpr
+
XPATH_INVALID_ARITY
xmlXPathSetArityError
+
XPATH_INVALID_TYPE
xmlXPathSetTypeError
+
XPointer
LIBXML_XPTR_ENABLED
+_xmlXPathContext
+_xmlXPathParserContext
+xmlXPtrBuildNodeList
+xmlXPtrEval
+xmlXPtrEvalRangePredicate
+xmlXPtrNewContext
+xmlXPtrRangeToFunction
+
XSD
xmlAutomataNewNegTrans
+xmlSchemaValidityErrorFunc
+xmlSchemaValidityWarningFunc
+xmlTextReaderSchemaValidate
+xmlTextReaderSchemaValidateCtxt
+xmlTextReaderSetSchema
+
XSLT
_xmlNode
+_xmlXPathContext
+xmlFreePattern
+xmlFreePatternList
+xmlXPathNewValueTree
+xmlXPathStackIsNodeSet
+
Xinclude
XINCLUDE_NS
+XINCLUDE_OLD_NS
+
Xml
xmlTextReaderNodeType
+
XmlNodeType
xmlTextReaderNodeType
+

A-B +C-C +D-E +F-I +J-N +O-P +Q-R +S-S +T-U +V-X +Y-a +b-b +c-c +d-d +e-e +f-f +g-h +i-i +j-l +m-m +n-n +o-o +p-p +q-r +s-s +t-t +u-v +w-w +x-x +y-z +

Daniel Veillard

diff --git a/doc/APIconstructors.html b/doc/APIconstructors.html new file mode 100644 index 0000000..d5ca488 --- /dev/null +++ b/doc/APIconstructors.html @@ -0,0 +1,595 @@ + + +List of constructors for libxml2
Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
Made with Libxml2 Logo

The XML C parser and toolkit of Gnome

List of constructors for libxml2

Developer Menu
API Indexes
Related links

Type SOCKET:

xmlNanoFTPGetConnection
+xmlNanoFTPGetSocket
+

Type const htmlElemDesc *:

htmlTagLookup
+

Type const htmlEntityDesc *:

htmlEntityLookup
+htmlEntityValueLookup
+htmlParseEntityRef
+

Type const xmlChar *:

getPublicId
+getSystemId
+htmlGetMetaEncoding
+namePop
+xmlBufferContent
+xmlCatalogGetPublic
+xmlCatalogGetSystem
+xmlDictExists
+xmlDictLookup
+xmlDictQLookup
+xmlEncodeEntities
+xmlOutputBufferGetContent
+xmlParseAttribute
+xmlParseEncodingDecl
+xmlParseName
+xmlParsePITarget
+xmlParseStartTag
+xmlSAX2GetPublicId
+xmlSAX2GetSystemId
+xmlSchemaValueGetAsString
+xmlSplitQName3
+xmlStrcasestr
+xmlStrchr
+xmlStrstr
+xmlTextReaderConstBaseUri
+xmlTextReaderConstEncoding
+xmlTextReaderConstLocalName
+xmlTextReaderConstName
+xmlTextReaderConstNamespaceUri
+xmlTextReaderConstPrefix
+xmlTextReaderConstString
+xmlTextReaderConstValue
+xmlTextReaderConstXmlLang
+xmlTextReaderConstXmlVersion
+xmlUTF8Strpos
+xmlXPathNsLookup
+

Type const xmlParserNodeInfo *:

xmlParserFindNodeInfo
+

Type docbDocPtr:

docbParseDoc
+docbParseFile
+docbSAXParseDoc
+docbSAXParseFile
+

Type docbParserCtxtPtr:

docbCreateFileParserCtxt
+docbCreatePushParserCtxt
+

Type double:

xmlXPathCastBooleanToNumber
+xmlXPathCastNodeSetToNumber
+xmlXPathCastNodeToNumber
+xmlXPathCastStringToNumber
+xmlXPathCastToNumber
+xmlXPathPopNumber
+xmlXPathStringEvalNumber
+

Type htmlDocPtr:

htmlCtxtReadDoc
+htmlCtxtReadFd
+htmlCtxtReadFile
+htmlCtxtReadIO
+htmlCtxtReadMemory
+htmlNewDoc
+htmlNewDocNoDtD
+htmlParseDoc
+htmlParseFile
+htmlReadDoc
+htmlReadFd
+htmlReadFile
+htmlReadIO
+htmlReadMemory
+htmlSAXParseDoc
+htmlSAXParseFile
+

Type htmlParserCtxtPtr:

htmlCreateFileParserCtxt
+htmlCreateMemoryParserCtxt
+htmlCreatePushParserCtxt
+htmlNewParserCtxt
+

Type htmlStatus:

htmlAttrAllowed
+htmlElementStatusHere
+htmlNodeStatus
+

Type long:

xmlByteConsumed
+xmlGetLineNo
+xmlSaveDoc
+xmlSaveTree
+xmlTextReaderByteConsumed
+xmlXPathOrderDocElems
+

Type size_t:

xmlBufNodeDump
+xmlBufShrink
+xmlBufUse
+xmlDictGetUsage
+xmlDictSetLimit
+xmlOutputBufferGetSize
+

Type unsigned long:

xmlChildElementCount
+xmlParserFindNodeInfoIndex
+xmlSchemaGetFacetValueAsULong
+

Type void *:

xmlCatalogAddLocal
+xmlFileOpen
+xmlHashCopier
+xmlHashLookup
+xmlHashLookup2
+xmlHashLookup3
+xmlHashQLookup
+xmlHashQLookup2
+xmlHashQLookup3
+xmlIOFTPOpen
+xmlIOHTTPOpen
+xmlIOHTTPOpenW
+xmlInputOpenCallback
+xmlLinkGetData
+xmlListReverseSearch
+xmlListSearch
+xmlMallocAtomicLoc
+xmlMallocFunc
+xmlMallocLoc
+xmlMemMalloc
+xmlMemRealloc
+xmlNanoFTPConnectTo
+xmlNanoFTPNewCtxt
+xmlNanoFTPOpen
+xmlNanoHTTPMethod
+xmlNanoHTTPMethodRedir
+xmlNanoHTTPOpen
+xmlNanoHTTPOpenRedir
+xmlOutputOpenCallback
+xmlReallocFunc
+xmlReallocLoc
+xmlXPathPopExternal
+

Type xlinkHandlerPtr:

xlinkGetDefaultHandler
+

Type xlinkNodeDetectFunc:

xlinkGetDefaultDetect
+

Type xlinkType:

xlinkIsLink
+

Type xmlAttrPtr:

xmlCopyProp
+xmlCopyPropList
+xmlGetID
+xmlHasNsProp
+xmlHasProp
+xmlNewDocProp
+xmlNewNsProp
+xmlNewNsPropEatName
+xmlNewProp
+xmlSetNsProp
+xmlSetProp
+

Type xmlAttributePtr:

xmlAddAttributeDecl
+xmlGetDtdAttrDesc
+xmlGetDtdQAttrDesc
+

Type xmlAttributeTablePtr:

xmlCopyAttributeTable
+

Type xmlAutomataPtr:

xmlNewAutomata
+

Type xmlAutomataStatePtr:

xmlAutomataGetInitState
+xmlAutomataNewAllTrans
+xmlAutomataNewCountTrans
+xmlAutomataNewCountTrans2
+xmlAutomataNewCountedTrans
+xmlAutomataNewCounterTrans
+xmlAutomataNewEpsilon
+xmlAutomataNewNegTrans
+xmlAutomataNewOnceTrans
+xmlAutomataNewOnceTrans2
+xmlAutomataNewState
+xmlAutomataNewTransition
+xmlAutomataNewTransition2
+

Type xmlBufferAllocationScheme:

xmlGetBufferAllocationScheme
+xmlThrDefBufferAllocScheme
+

Type xmlBufferPtr:

xmlBufferCreate
+xmlBufferCreateSize
+xmlBufferCreateStatic
+

Type xmlCatalogAllow:

xmlCatalogGetDefaults
+

Type xmlCatalogPrefer:

xmlCatalogSetDefaultPrefer
+

Type xmlCatalogPtr:

xmlLoadACatalog
+xmlLoadSGMLSuperCatalog
+xmlNewCatalog
+

Type xmlChar:

xmlPopInput
+

Type xmlChar *:

xmlACatalogResolve
+xmlACatalogResolvePublic
+xmlACatalogResolveSystem
+xmlACatalogResolveURI
+xmlBufContent
+xmlBufEnd
+xmlBufferDetach
+xmlBuildQName
+xmlBuildRelativeURI
+xmlBuildURI
+xmlCanonicPath
+xmlCatalogLocalResolve
+xmlCatalogLocalResolveURI
+xmlCatalogResolve
+xmlCatalogResolvePublic
+xmlCatalogResolveSystem
+xmlCatalogResolveURI
+xmlCharStrdup
+xmlCharStrndup
+xmlDecodeEntities
+xmlEncodeEntitiesReentrant
+xmlEncodeSpecialChars
+xmlGetNoNsProp
+xmlGetNodePath
+xmlGetNsProp
+xmlGetProp
+xmlNamespaceParseNCName
+xmlNamespaceParseNSDef
+xmlNamespaceParseQName
+xmlNodeGetBase
+xmlNodeGetContent
+xmlNodeGetLang
+xmlNodeListGetRawString
+xmlNodeListGetString
+xmlNormalizeWindowsPath
+xmlParseAttValue
+xmlParseEncName
+xmlParseEntityValue
+xmlParseExternalID
+xmlParseNmtoken
+xmlParsePubidLiteral
+xmlParseQuotedString
+xmlParseSystemLiteral
+xmlParseVersionInfo
+xmlParseVersionNum
+xmlPathToURI
+xmlSaveUri
+xmlScanName
+xmlSchemaCollapseString
+xmlSchemaWhiteSpaceReplace
+xmlSplitQName
+xmlSplitQName2
+xmlStrcat
+xmlStrdup
+xmlStringDecodeEntities
+xmlStringLenDecodeEntities
+xmlStrncat
+xmlStrncatNew
+xmlStrndup
+xmlStrsub
+xmlTextReaderBaseUri
+xmlTextReaderGetAttribute
+xmlTextReaderGetAttributeNo
+xmlTextReaderGetAttributeNs
+xmlTextReaderLocalName
+xmlTextReaderLocatorBaseURI
+xmlTextReaderLookupNamespace
+xmlTextReaderName
+xmlTextReaderNamespaceUri
+xmlTextReaderPrefix
+xmlTextReaderReadInnerXml
+xmlTextReaderReadOuterXml
+xmlTextReaderReadString
+xmlTextReaderValue
+xmlTextReaderXmlLang
+xmlURIEscape
+xmlURIEscapeStr
+xmlUTF8Strndup
+xmlUTF8Strsub
+xmlValidCtxtNormalizeAttributeValue
+xmlValidNormalizeAttributeValue
+xmlXPathCastBooleanToString
+xmlXPathCastNodeSetToString
+xmlXPathCastNodeToString
+xmlXPathCastNumberToString
+xmlXPathCastToString
+xmlXPathParseNCName
+xmlXPathParseName
+xmlXPathPopString
+

Type xmlCharEncoding:

xmlDetectCharEncoding
+xmlParseCharEncoding
+

Type xmlCharEncodingHandlerPtr:

xmlFindCharEncodingHandler
+xmlGetCharEncodingHandler
+xmlNewCharEncodingHandler
+

Type xmlDOMWrapCtxtPtr:

xmlDOMWrapNewCtxt
+

Type xmlDeregisterNodeFunc:

xmlDeregisterNodeDefault
+xmlThrDefDeregisterNodeDefault
+

Type xmlDictPtr:

xmlDictCreate
+xmlDictCreateSub
+

Type xmlDocPtr:

xmlCopyDoc
+xmlCtxtReadDoc
+xmlCtxtReadFd
+xmlCtxtReadFile
+xmlCtxtReadIO
+xmlCtxtReadMemory
+xmlNewDoc
+xmlParseCatalogFile
+xmlParseDoc
+xmlParseEntity
+xmlParseFile
+xmlParseMemory
+xmlReadDoc
+xmlReadFd
+xmlReadFile
+xmlReadIO
+xmlReadMemory
+xmlRecoverDoc
+xmlRecoverFile
+xmlRecoverMemory
+xmlSAXParseDoc
+xmlSAXParseEntity
+xmlSAXParseFile
+xmlSAXParseFileWithData
+xmlSAXParseMemory
+xmlSAXParseMemoryWithData
+xmlTextReaderCurrentDoc
+

Type xmlDtdPtr:

xmlCopyDtd
+xmlCreateIntSubset
+xmlGetIntSubset
+xmlIOParseDTD
+xmlNewDtd
+xmlParseDTD
+xmlSAXParseDTD
+

Type xmlElementContentPtr:

xmlCopyDocElementContent
+xmlCopyElementContent
+xmlNewDocElementContent
+xmlNewElementContent
+xmlParseElementChildrenContentDecl
+xmlParseElementMixedContentDecl
+

Type xmlElementPtr:

xmlAddElementDecl
+xmlGetDtdElementDesc
+xmlGetDtdQElementDesc
+

Type xmlElementTablePtr:

xmlCopyElementTable
+

Type xmlEntitiesTablePtr:

xmlCopyEntitiesTable
+xmlCreateEntitiesTable
+

Type xmlEntityPtr:

getEntity
+getEntitySAXFunc
+getParameterEntity
+getParameterEntitySAXFunc
+xmlAddDocEntity
+xmlAddDtdEntity
+xmlGetDocEntity
+xmlGetDtdEntity
+xmlGetParameterEntity
+xmlGetPredefinedEntity
+xmlNewEntity
+xmlParseEntityRef
+xmlSAX2GetEntity
+xmlSAX2GetParameterEntity
+

Type xmlEnumerationPtr:

xmlCopyEnumeration
+xmlCreateEnumeration
+xmlParseEnumerationType
+xmlParseNotationType
+

Type xmlErrorPtr:

xmlCtxtGetLastError
+xmlGetLastError
+

Type xmlExpCtxtPtr:

xmlExpNewCtxt
+

Type xmlExpNodePtr:

xmlExpExpDerive
+xmlExpNewAtom
+xmlExpNewOr
+xmlExpNewRange
+xmlExpNewSeq
+xmlExpParse
+xmlExpStringDerive
+

Type xmlExternalEntityLoader:

xmlGetExternalEntityLoader
+

Type xmlGlobalStatePtr:

xmlGetGlobalState
+

Type xmlHashTablePtr:

xmlHashCopy
+xmlHashCreate
+xmlHashCreateDict
+

Type xmlIDPtr:

xmlAddID
+

Type xmlLinkPtr:

xmlListEnd
+xmlListFront
+

Type xmlListPtr:

xmlGetRefs
+xmlListCreate
+xmlListDup
+

Type xmlLocationSetPtr:

xmlXPtrLocationSetCreate
+xmlXPtrLocationSetMerge
+

Type xmlModulePtr:

xmlModuleOpen
+

Type xmlMutexPtr:

xmlNewMutex
+

Type xmlNodePtr:

nodePop
+xmlAddChild
+xmlAddChildList
+xmlAddNextSibling
+xmlAddPrevSibling
+xmlAddSibling
+xmlCopyNode
+xmlCopyNodeList
+xmlDocCopyNode
+xmlDocCopyNodeList
+xmlDocGetRootElement
+xmlDocSetRootElement
+xmlFirstElementChild
+xmlGetLastChild
+xmlLastElementChild
+xmlNewCDataBlock
+xmlNewCharRef
+xmlNewChild
+xmlNewComment
+xmlNewDocComment
+xmlNewDocFragment
+xmlNewDocNode
+xmlNewDocNodeEatName
+xmlNewDocPI
+xmlNewDocRawNode
+xmlNewDocText
+xmlNewDocTextLen
+xmlNewNode
+xmlNewNodeEatName
+xmlNewPI
+xmlNewReference
+xmlNewText
+xmlNewTextChild
+xmlNewTextLen
+xmlNextElementSibling
+xmlPreviousElementSibling
+xmlReplaceNode
+xmlStringGetNodeList
+xmlStringLenGetNodeList
+xmlTextMerge
+xmlTextReaderCurrentNode
+xmlTextReaderExpand
+xmlTextReaderPreserve
+xmlXPathNextAncestor
+xmlXPathNextAncestorOrSelf
+xmlXPathNextAttribute
+xmlXPathNextChild
+xmlXPathNextDescendant
+xmlXPathNextDescendantOrSelf
+xmlXPathNextFollowing
+xmlXPathNextFollowingSibling
+xmlXPathNextNamespace
+xmlXPathNextParent
+xmlXPathNextPreceding
+xmlXPathNextPrecedingSibling
+xmlXPathNextSelf
+xmlXPtrBuildNodeList
+

Type xmlNodeSetPtr:

xmlXPathDifference
+xmlXPathDistinct
+xmlXPathDistinctSorted
+xmlXPathIntersection
+xmlXPathLeading
+xmlXPathLeadingSorted
+xmlXPathNodeLeading
+xmlXPathNodeLeadingSorted
+xmlXPathNodeSetCreate
+xmlXPathNodeSetMerge
+xmlXPathNodeTrailing
+xmlXPathNodeTrailingSorted
+xmlXPathPopNodeSet
+xmlXPathTrailing
+xmlXPathTrailingSorted
+

Type xmlNotationPtr:

xmlAddNotationDecl
+xmlGetDtdNotationDesc
+

Type xmlNotationTablePtr:

xmlCopyNotationTable
+

Type xmlNsPtr:

getNamespace
+xmlCopyNamespace
+xmlCopyNamespaceList
+xmlDOMWrapAcquireNsFunction
+xmlNewGlobalNs
+xmlNewNs
+xmlSearchNs
+xmlSearchNsByHref
+

Type xmlNsPtr *:

xmlGetNsList
+

Type xmlOutputBufferCreateFilenameFunc:

xmlOutputBufferCreateFilenameDefault
+xmlThrDefOutputBufferCreateFilenameDefault
+

Type xmlOutputBufferPtr:

xmlAllocOutputBuffer
+xmlOutputBufferCreateBuffer
+xmlOutputBufferCreateFd
+xmlOutputBufferCreateFile
+xmlOutputBufferCreateFilename
+xmlOutputBufferCreateFilenameFunc
+xmlOutputBufferCreateIO
+

Type xmlParserCtxtPtr:

xmlCreateDocParserCtxt
+xmlCreateEntityParserCtxt
+xmlCreateFileParserCtxt
+xmlCreateIOParserCtxt
+xmlCreateMemoryParserCtxt
+xmlCreatePushParserCtxt
+xmlCreateURLParserCtxt
+xmlNewParserCtxt
+xmlSchemaValidCtxtGetParserCtxt
+

Type xmlParserErrors:

xmlParseInNodeContext
+

Type xmlParserInputBufferCreateFilenameFunc:

xmlParserInputBufferCreateFilenameDefault
+xmlThrDefParserInputBufferCreateFilenameDefault
+

Type xmlParserInputBufferPtr:

xmlAllocParserInputBuffer
+xmlParserInputBufferCreateFd
+xmlParserInputBufferCreateFile
+xmlParserInputBufferCreateFilename
+xmlParserInputBufferCreateFilenameFunc
+xmlParserInputBufferCreateIO
+xmlParserInputBufferCreateMem
+xmlParserInputBufferCreateStatic
+xmlTextReaderGetRemainder
+

Type xmlParserInputPtr:

inputPop
+resolveEntity
+resolveEntitySAXFunc
+xmlCheckHTTPInput
+xmlExternalEntityLoader
+xmlLoadExternalEntity
+xmlNewEntityInputStream
+xmlNewIOInputStream
+xmlNewInputFromFile
+xmlNewInputStream
+xmlNewStringInputStream
+xmlNoNetExternalEntityLoader
+xmlSAX2ResolveEntity
+

Type xmlPatternPtr:

xmlPatterncompile
+

Type xmlRMutexPtr:

xmlNewRMutex
+

Type xmlRefPtr:

xmlAddRef
+

Type xmlRegExecCtxtPtr:

xmlRegNewExecCtxt
+

Type xmlRegexpPtr:

xmlAutomataCompile
+xmlRegexpCompile
+

Type xmlRegisterNodeFunc:

xmlRegisterNodeDefault
+xmlThrDefRegisterNodeDefault
+

Type xmlRelaxNGParserCtxtPtr:

xmlRelaxNGNewDocParserCtxt
+xmlRelaxNGNewMemParserCtxt
+xmlRelaxNGNewParserCtxt
+

Type xmlRelaxNGPtr:

xmlRelaxNGParse
+

Type xmlRelaxNGValidCtxtPtr:

xmlRelaxNGNewValidCtxt
+

Type xmlSaveCtxtPtr:

xmlSaveToBuffer
+xmlSaveToFd
+xmlSaveToFilename
+xmlSaveToIO
+

Type xmlSchemaFacetPtr:

xmlSchemaNewFacet
+

Type xmlSchemaParserCtxtPtr:

xmlSchemaNewDocParserCtxt
+xmlSchemaNewMemParserCtxt
+xmlSchemaNewParserCtxt
+

Type xmlSchemaPtr:

xmlSchemaParse
+

Type xmlSchemaSAXPlugPtr:

xmlSchemaSAXPlug
+

Type xmlSchemaTypePtr:

xmlSchemaGetBuiltInListSimpleTypeItemType
+xmlSchemaGetBuiltInType
+xmlSchemaGetPredefinedType
+

Type xmlSchemaValPtr:

xmlSchemaCopyValue
+xmlSchemaNewNOTATIONValue
+xmlSchemaNewQNameValue
+xmlSchemaNewStringValue
+xmlSchemaValueGetNext
+

Type xmlSchemaValType:

xmlSchemaGetValType
+

Type xmlSchemaValidCtxtPtr:

xmlSchemaNewValidCtxt
+

Type xmlSchematronParserCtxtPtr:

xmlSchematronNewDocParserCtxt
+xmlSchematronNewMemParserCtxt
+xmlSchematronNewParserCtxt
+

Type xmlSchematronPtr:

xmlSchematronParse
+

Type xmlSchematronValidCtxtPtr:

xmlSchematronNewValidCtxt
+

Type xmlStreamCtxtPtr:

xmlPatternGetStreamCtxt
+

Type xmlTextReaderPtr:

xmlNewTextReader
+xmlNewTextReaderFilename
+xmlReaderForDoc
+xmlReaderForFd
+xmlReaderForFile
+xmlReaderForIO
+xmlReaderForMemory
+xmlReaderWalker
+

Type xmlTextWriterPtr:

xmlNewTextWriter
+xmlNewTextWriterDoc
+xmlNewTextWriterFilename
+xmlNewTextWriterMemory
+xmlNewTextWriterPushParser
+xmlNewTextWriterTree
+

Type xmlURIPtr:

xmlCreateURI
+xmlParseURI
+xmlParseURIRaw
+

Type xmlValidCtxtPtr:

xmlNewValidCtxt
+

Type xmlXIncludeCtxtPtr:

xmlXIncludeNewContext
+

Type xmlXPathCompExprPtr:

xmlXPathCompile
+xmlXPathCtxtCompile
+

Type xmlXPathContextPtr:

xmlXPathNewContext
+xmlXPtrNewContext
+

Type xmlXPathFunction:

xmlXPathFuncLookupFunc
+xmlXPathFunctionLookup
+xmlXPathFunctionLookupNS
+

Type xmlXPathObjectPtr:

valuePop
+xmlXPathAxisFunc
+xmlXPathCompiledEval
+xmlXPathConvertBoolean
+xmlXPathConvertNumber
+xmlXPathConvertString
+xmlXPathEval
+xmlXPathEvalExpression
+xmlXPathNewBoolean
+xmlXPathNewCString
+xmlXPathNewFloat
+xmlXPathNewNodeSet
+xmlXPathNewNodeSetList
+xmlXPathNewString
+xmlXPathNewValueTree
+xmlXPathNodeEval
+xmlXPathObjectCopy
+xmlXPathVariableLookup
+xmlXPathVariableLookupFunc
+xmlXPathVariableLookupNS
+xmlXPathWrapCString
+xmlXPathWrapExternal
+xmlXPathWrapNodeSet
+xmlXPathWrapString
+xmlXPtrEval
+xmlXPtrNewCollapsedRange
+xmlXPtrNewLocationSetNodeSet
+xmlXPtrNewLocationSetNodes
+xmlXPtrNewRange
+xmlXPtrNewRangeNodeObject
+xmlXPtrNewRangeNodePoint
+xmlXPtrNewRangeNodes
+xmlXPtrNewRangePointNode
+xmlXPtrNewRangePoints
+xmlXPtrWrapLocationSet
+

Type xmlXPathParserContextPtr:

xmlXPathNewParserContext
+

Daniel Veillard

diff --git a/doc/APIfiles.html b/doc/APIfiles.html new file mode 100644 index 0000000..2252a6b --- /dev/null +++ b/doc/APIfiles.html @@ -0,0 +1,3591 @@ + + +List of Symbols per Module for libxml2
Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
Made with Libxml2 Logo

The XML C parser and toolkit of Gnome

List of Symbols per Module for libxml2

Developer Menu
API Indexes
Related links

Module DOCBparser:

docbCreateFileParserCtxt
+docbCreatePushParserCtxt
+docbDocPtr
+docbEncodeEntities
+docbFreeParserCtxt
+docbParseChunk
+docbParseDoc
+docbParseDocument
+docbParseFile
+docbParserCtxt
+docbParserCtxtPtr
+docbParserInput
+docbParserInputPtr
+docbSAXHandler
+docbSAXHandlerPtr
+docbSAXParseDoc
+docbSAXParseFile
+

Module HTMLparser:

HTML_DEPRECATED
+HTML_INVALID
+HTML_NA
+HTML_PARSE_COMPACT
+HTML_PARSE_IGNORE_ENC
+HTML_PARSE_NOBLANKS
+HTML_PARSE_NODEFDTD
+HTML_PARSE_NOERROR
+HTML_PARSE_NOIMPLIED
+HTML_PARSE_NONET
+HTML_PARSE_NOWARNING
+HTML_PARSE_PEDANTIC
+HTML_PARSE_RECOVER
+HTML_REQUIRED
+HTML_VALID
+UTF8ToHtml
+_htmlElemDesc
+_htmlEntityDesc
+htmlAttrAllowed
+htmlAutoCloseTag
+htmlCreateMemoryParserCtxt
+htmlCreatePushParserCtxt
+htmlCtxtReadDoc
+htmlCtxtReadFd
+htmlCtxtReadFile
+htmlCtxtReadIO
+htmlCtxtReadMemory
+htmlCtxtReset
+htmlCtxtUseOptions
+htmlDefaultSubelement
+htmlDocPtr
+htmlElemDesc
+htmlElemDescPtr
+htmlElementAllowedHere
+htmlElementAllowedHereDesc
+htmlElementStatusHere
+htmlEncodeEntities
+htmlEntityDesc
+htmlEntityDescPtr
+htmlEntityLookup
+htmlEntityValueLookup
+htmlFreeParserCtxt
+htmlHandleOmittedElem
+htmlIsAutoClosed
+htmlIsScriptAttribute
+htmlNewParserCtxt
+htmlNodePtr
+htmlNodeStatus
+htmlParseCharRef
+htmlParseChunk
+htmlParseDoc
+htmlParseDocument
+htmlParseElement
+htmlParseEntityRef
+htmlParseFile
+htmlParserCtxt
+htmlParserCtxtPtr
+htmlParserInput
+htmlParserInputPtr
+htmlParserNodeInfo
+htmlParserOption
+htmlReadDoc
+htmlReadFd
+htmlReadFile
+htmlReadIO
+htmlReadMemory
+htmlRequiredAttrs
+htmlSAXHandler
+htmlSAXHandlerPtr
+htmlSAXParseDoc
+htmlSAXParseFile
+htmlStatus
+htmlTagLookup
+

Module HTMLtree:

HTML_COMMENT_NODE
+HTML_ENTITY_REF_NODE
+HTML_PI_NODE
+HTML_PRESERVE_NODE
+HTML_TEXT_NODE
+htmlDocContentDumpFormatOutput
+htmlDocContentDumpOutput
+htmlDocDump
+htmlDocDumpMemory
+htmlDocDumpMemoryFormat
+htmlGetMetaEncoding
+htmlIsBooleanAttr
+htmlNewDoc
+htmlNewDocNoDtD
+htmlNodeDump
+htmlNodeDumpFile
+htmlNodeDumpFileFormat
+htmlNodeDumpFormatOutput
+htmlNodeDumpOutput
+htmlSaveFile
+htmlSaveFileEnc
+htmlSaveFileFormat
+htmlSetMetaEncoding
+

Module SAX:

attribute
+attributeDecl
+cdataBlock
+characters
+checkNamespace
+comment
+elementDecl
+endDocument
+endElement
+entityDecl
+externalSubset
+getColumnNumber
+getEntity
+getLineNumber
+getNamespace
+getParameterEntity
+getPublicId
+getSystemId
+globalNamespace
+hasExternalSubset
+hasInternalSubset
+ignorableWhitespace
+initdocbDefaultSAXHandler
+inithtmlDefaultSAXHandler
+initxmlDefaultSAXHandler
+internalSubset
+isStandalone
+namespaceDecl
+notationDecl
+processingInstruction
+reference
+resolveEntity
+setDocumentLocator
+setNamespace
+startDocument
+startElement
+unparsedEntityDecl
+

Module SAX2:

docbDefaultSAXHandlerInit
+htmlDefaultSAXHandlerInit
+xmlDefaultSAXHandlerInit
+xmlSAX2AttributeDecl
+xmlSAX2CDataBlock
+xmlSAX2Characters
+xmlSAX2Comment
+xmlSAX2ElementDecl
+xmlSAX2EndDocument
+xmlSAX2EndElement
+xmlSAX2EndElementNs
+xmlSAX2EntityDecl
+xmlSAX2ExternalSubset
+xmlSAX2GetColumnNumber
+xmlSAX2GetEntity
+xmlSAX2GetLineNumber
+xmlSAX2GetParameterEntity
+xmlSAX2GetPublicId
+xmlSAX2GetSystemId
+xmlSAX2HasExternalSubset
+xmlSAX2HasInternalSubset
+xmlSAX2IgnorableWhitespace
+xmlSAX2InitDefaultSAXHandler
+xmlSAX2InitDocbDefaultSAXHandler
+xmlSAX2InitHtmlDefaultSAXHandler
+xmlSAX2InternalSubset
+xmlSAX2IsStandalone
+xmlSAX2NotationDecl
+xmlSAX2ProcessingInstruction
+xmlSAX2Reference
+xmlSAX2ResolveEntity
+xmlSAX2SetDocumentLocator
+xmlSAX2StartDocument
+xmlSAX2StartElement
+xmlSAX2StartElementNs
+xmlSAX2UnparsedEntityDecl
+xmlSAXDefaultVersion
+xmlSAXVersion
+

Module c14n:

XML_C14N_1_0
+XML_C14N_1_1
+XML_C14N_EXCLUSIVE_1_0
+xmlC14NDocDumpMemory
+xmlC14NDocSave
+xmlC14NDocSaveTo
+xmlC14NExecute
+xmlC14NIsVisibleCallback
+xmlC14NMode
+

Module catalog:

XML_CATALOGS_NAMESPACE
+XML_CATALOG_PI
+XML_CATA_ALLOW_ALL
+XML_CATA_ALLOW_DOCUMENT
+XML_CATA_ALLOW_GLOBAL
+XML_CATA_ALLOW_NONE
+XML_CATA_PREFER_NONE
+XML_CATA_PREFER_PUBLIC
+XML_CATA_PREFER_SYSTEM
+xmlACatalogAdd
+xmlACatalogDump
+xmlACatalogRemove
+xmlACatalogResolve
+xmlACatalogResolvePublic
+xmlACatalogResolveSystem
+xmlACatalogResolveURI
+xmlCatalog
+xmlCatalogAdd
+xmlCatalogAddLocal
+xmlCatalogAllow
+xmlCatalogCleanup
+xmlCatalogConvert
+xmlCatalogDump
+xmlCatalogFreeLocal
+xmlCatalogGetDefaults
+xmlCatalogGetPublic
+xmlCatalogGetSystem
+xmlCatalogIsEmpty
+xmlCatalogLocalResolve
+xmlCatalogLocalResolveURI
+xmlCatalogPrefer
+xmlCatalogPtr
+xmlCatalogRemove
+xmlCatalogResolve
+xmlCatalogResolvePublic
+xmlCatalogResolveSystem
+xmlCatalogResolveURI
+xmlCatalogSetDebug
+xmlCatalogSetDefaultPrefer
+xmlCatalogSetDefaults
+xmlConvertSGMLCatalog
+xmlFreeCatalog
+xmlInitializeCatalog
+xmlLoadACatalog
+xmlLoadCatalog
+xmlLoadCatalogs
+xmlLoadSGMLSuperCatalog
+xmlNewCatalog
+xmlParseCatalogFile
+

Module chvalid:

_xmlChLRange
+_xmlChRangeGroup
+_xmlChSRange
+xmlChLRange
+xmlChLRangePtr
+xmlChRangeGroup
+xmlChRangeGroupPtr
+xmlChSRange
+xmlChSRangePtr
+xmlCharInRange
+xmlIsBaseChar
+xmlIsBaseCharGroup
+xmlIsBaseCharQ
+xmlIsBaseChar_ch
+xmlIsBlank
+xmlIsBlankQ
+xmlIsBlank_ch
+xmlIsChar
+xmlIsCharGroup
+xmlIsCharQ
+xmlIsChar_ch
+xmlIsCombining
+xmlIsCombiningGroup
+xmlIsCombiningQ
+xmlIsDigit
+xmlIsDigitGroup
+xmlIsDigitQ
+xmlIsDigit_ch
+xmlIsExtender
+xmlIsExtenderGroup
+xmlIsExtenderQ
+xmlIsExtender_ch
+xmlIsIdeographic
+xmlIsIdeographicGroup
+xmlIsIdeographicQ
+xmlIsPubidChar
+xmlIsPubidCharQ
+xmlIsPubidChar_ch
+xmlIsPubidChar_tab
+

Module debugXML:

_xmlShellCtxt
+xmlBoolToText
+xmlDebugCheckDocument
+xmlDebugDumpAttr
+xmlDebugDumpAttrList
+xmlDebugDumpDTD
+xmlDebugDumpDocument
+xmlDebugDumpDocumentHead
+xmlDebugDumpEntities
+xmlDebugDumpNode
+xmlDebugDumpNodeList
+xmlDebugDumpOneNode
+xmlDebugDumpString
+xmlLsCountNode
+xmlLsOneNode
+xmlShell
+xmlShellBase
+xmlShellCat
+xmlShellCmd
+xmlShellCtxt
+xmlShellCtxtPtr
+xmlShellDir
+xmlShellDu
+xmlShellList
+xmlShellLoad
+xmlShellPrintNode
+xmlShellPrintXPathError
+xmlShellPrintXPathResult
+xmlShellPwd
+xmlShellReadlineFunc
+xmlShellSave
+xmlShellValidate
+xmlShellWrite
+

Module dict:

xmlDict
+xmlDictCleanup
+xmlDictCreate
+xmlDictCreateSub
+xmlDictExists
+xmlDictFree
+xmlDictGetUsage
+xmlDictLookup
+xmlDictOwns
+xmlDictPtr
+xmlDictQLookup
+xmlDictReference
+xmlDictSetLimit
+xmlDictSize
+xmlInitializeDict
+

Module encoding:

UTF8Toisolat1
+XML_CHAR_ENCODING_2022_JP
+XML_CHAR_ENCODING_8859_1
+XML_CHAR_ENCODING_8859_2
+XML_CHAR_ENCODING_8859_3
+XML_CHAR_ENCODING_8859_4
+XML_CHAR_ENCODING_8859_5
+XML_CHAR_ENCODING_8859_6
+XML_CHAR_ENCODING_8859_7
+XML_CHAR_ENCODING_8859_8
+XML_CHAR_ENCODING_8859_9
+XML_CHAR_ENCODING_ASCII
+XML_CHAR_ENCODING_EBCDIC
+XML_CHAR_ENCODING_ERROR
+XML_CHAR_ENCODING_EUC_JP
+XML_CHAR_ENCODING_NONE
+XML_CHAR_ENCODING_SHIFT_JIS
+XML_CHAR_ENCODING_UCS2
+XML_CHAR_ENCODING_UCS4BE
+XML_CHAR_ENCODING_UCS4LE
+XML_CHAR_ENCODING_UCS4_2143
+XML_CHAR_ENCODING_UCS4_3412
+XML_CHAR_ENCODING_UTF16BE
+XML_CHAR_ENCODING_UTF16LE
+XML_CHAR_ENCODING_UTF8
+_uconv_t
+_xmlCharEncodingHandler
+isolat1ToUTF8
+uconv_t
+xmlAddEncodingAlias
+xmlCharEncCloseFunc
+xmlCharEncFirstLine
+xmlCharEncInFunc
+xmlCharEncOutFunc
+xmlCharEncoding
+xmlCharEncodingHandler
+xmlCharEncodingHandlerPtr
+xmlCharEncodingInputFunc
+xmlCharEncodingOutputFunc
+xmlCleanupCharEncodingHandlers
+xmlCleanupEncodingAliases
+xmlDelEncodingAlias
+xmlDetectCharEncoding
+xmlFindCharEncodingHandler
+xmlGetCharEncodingHandler
+xmlGetCharEncodingName
+xmlGetEncodingAlias
+xmlInitCharEncodingHandlers
+xmlNewCharEncodingHandler
+xmlParseCharEncoding
+xmlRegisterCharEncodingHandler
+

Module entities:

XML_EXTERNAL_GENERAL_PARSED_ENTITY
+XML_EXTERNAL_GENERAL_UNPARSED_ENTITY
+XML_EXTERNAL_PARAMETER_ENTITY
+XML_INTERNAL_GENERAL_ENTITY
+XML_INTERNAL_PARAMETER_ENTITY
+XML_INTERNAL_PREDEFINED_ENTITY
+_xmlEntity
+xmlAddDocEntity
+xmlAddDtdEntity
+xmlCleanupPredefinedEntities
+xmlCopyEntitiesTable
+xmlCreateEntitiesTable
+xmlDumpEntitiesTable
+xmlDumpEntityDecl
+xmlEncodeEntities
+xmlEncodeEntitiesReentrant
+xmlEncodeSpecialChars
+xmlEntitiesTable
+xmlEntitiesTablePtr
+xmlEntityType
+xmlFreeEntitiesTable
+xmlGetDocEntity
+xmlGetDtdEntity
+xmlGetParameterEntity
+xmlGetPredefinedEntity
+xmlInitializePredefinedEntities
+xmlNewEntity
+

Module globals:

_xmlGlobalState
+docbDefaultSAXHandler
+htmlDefaultSAXHandler
+oldXMLWDcompatibility
+xmlBufferAllocScheme
+xmlCleanupGlobals
+xmlDefaultBufferSize
+xmlDefaultSAXHandler
+xmlDefaultSAXLocator
+xmlDeregisterNodeDefault
+xmlDeregisterNodeDefaultValue
+xmlDeregisterNodeFunc
+xmlDoValidityCheckingDefaultValue
+xmlFree
+xmlGenericError
+xmlGenericErrorContext
+xmlGetWarningsDefaultValue
+xmlGlobalState
+xmlGlobalStatePtr
+xmlIndentTreeOutput
+xmlInitGlobals
+xmlInitializeGlobalState
+xmlKeepBlanksDefaultValue
+xmlLastError
+xmlLineNumbersDefaultValue
+xmlLoadExtDtdDefaultValue
+xmlMalloc
+xmlMallocAtomic
+xmlMemStrdup
+xmlOutputBufferCreateFilenameDefault
+xmlOutputBufferCreateFilenameFunc
+xmlOutputBufferCreateFilenameValue
+xmlParserDebugEntities
+xmlParserInputBufferCreateFilenameDefault
+xmlParserInputBufferCreateFilenameFunc
+xmlParserInputBufferCreateFilenameValue
+xmlParserVersion
+xmlPedanticParserDefaultValue
+xmlRealloc
+xmlRegisterNodeDefault
+xmlRegisterNodeDefaultValue
+xmlRegisterNodeFunc
+xmlSaveNoEmptyTags
+xmlStructuredError
+xmlStructuredErrorContext
+xmlSubstituteEntitiesDefaultValue
+xmlThrDefBufferAllocScheme
+xmlThrDefDefaultBufferSize
+xmlThrDefDeregisterNodeDefault
+xmlThrDefDoValidityCheckingDefaultValue
+xmlThrDefGetWarningsDefaultValue
+xmlThrDefIndentTreeOutput
+xmlThrDefKeepBlanksDefaultValue
+xmlThrDefLineNumbersDefaultValue
+xmlThrDefLoadExtDtdDefaultValue
+xmlThrDefOutputBufferCreateFilenameDefault
+xmlThrDefParserDebugEntities
+xmlThrDefParserInputBufferCreateFilenameDefault
+xmlThrDefPedanticParserDefaultValue
+xmlThrDefRegisterNodeDefault
+xmlThrDefSaveNoEmptyTags
+xmlThrDefSetGenericErrorFunc
+xmlThrDefSetStructuredErrorFunc
+xmlThrDefSubstituteEntitiesDefaultValue
+xmlThrDefTreeIndentString
+xmlTreeIndentString
+

Module hash:

XML_CAST_FPTR
+xmlHashAddEntry
+xmlHashAddEntry2
+xmlHashAddEntry3
+xmlHashCopier
+xmlHashCopy
+xmlHashCreate
+xmlHashCreateDict
+xmlHashDeallocator
+xmlHashFree
+xmlHashLookup
+xmlHashLookup2
+xmlHashLookup3
+xmlHashQLookup
+xmlHashQLookup2
+xmlHashQLookup3
+xmlHashRemoveEntry
+xmlHashRemoveEntry2
+xmlHashRemoveEntry3
+xmlHashScan
+xmlHashScan3
+xmlHashScanFull
+xmlHashScanFull3
+xmlHashScanner
+xmlHashScannerFull
+xmlHashSize
+xmlHashTable
+xmlHashTablePtr
+xmlHashUpdateEntry
+xmlHashUpdateEntry2
+xmlHashUpdateEntry3
+

Module list:

xmlLink
+xmlLinkGetData
+xmlLinkPtr
+xmlList
+xmlListAppend
+xmlListClear
+xmlListCopy
+xmlListCreate
+xmlListDataCompare
+xmlListDeallocator
+xmlListDelete
+xmlListDup
+xmlListEmpty
+xmlListEnd
+xmlListFront
+xmlListInsert
+xmlListMerge
+xmlListPopBack
+xmlListPopFront
+xmlListPtr
+xmlListPushBack
+xmlListPushFront
+xmlListRemoveAll
+xmlListRemoveFirst
+xmlListRemoveLast
+xmlListReverse
+xmlListReverseSearch
+xmlListReverseWalk
+xmlListSearch
+xmlListSize
+xmlListSort
+xmlListWalk
+xmlListWalker
+

Module nanoftp:

INVALID_SOCKET
+SOCKET
+ftpDataCallback
+ftpListCallback
+xmlNanoFTPCheckResponse
+xmlNanoFTPCleanup
+xmlNanoFTPClose
+xmlNanoFTPCloseConnection
+xmlNanoFTPConnect
+xmlNanoFTPConnectTo
+xmlNanoFTPCwd
+xmlNanoFTPDele
+xmlNanoFTPFreeCtxt
+xmlNanoFTPGet
+xmlNanoFTPGetConnection
+xmlNanoFTPGetResponse
+xmlNanoFTPGetSocket
+xmlNanoFTPInit
+xmlNanoFTPList
+xmlNanoFTPNewCtxt
+xmlNanoFTPOpen
+xmlNanoFTPProxy
+xmlNanoFTPQuit
+xmlNanoFTPRead
+xmlNanoFTPScanProxy
+xmlNanoFTPUpdateURL
+

Module nanohttp:

xmlNanoHTTPAuthHeader
+xmlNanoHTTPCleanup
+xmlNanoHTTPClose
+xmlNanoHTTPContentLength
+xmlNanoHTTPEncoding
+xmlNanoHTTPFetch
+xmlNanoHTTPInit
+xmlNanoHTTPMethod
+xmlNanoHTTPMethodRedir
+xmlNanoHTTPMimeType
+xmlNanoHTTPOpen
+xmlNanoHTTPOpenRedir
+xmlNanoHTTPRead
+xmlNanoHTTPRedir
+xmlNanoHTTPReturnCode
+xmlNanoHTTPSave
+xmlNanoHTTPScanProxy
+

Module parser:

XML_COMPLETE_ATTRS
+XML_DEFAULT_VERSION
+XML_DETECT_IDS
+XML_PARSER_ATTRIBUTE_VALUE
+XML_PARSER_CDATA_SECTION
+XML_PARSER_COMMENT
+XML_PARSER_CONTENT
+XML_PARSER_DTD
+XML_PARSER_END_TAG
+XML_PARSER_ENTITY_DECL
+XML_PARSER_ENTITY_VALUE
+XML_PARSER_EOF
+XML_PARSER_EPILOG
+XML_PARSER_IGNORE
+XML_PARSER_MISC
+XML_PARSER_PI
+XML_PARSER_PROLOG
+XML_PARSER_PUBLIC_LITERAL
+XML_PARSER_START
+XML_PARSER_START_TAG
+XML_PARSER_SYSTEM_LITERAL
+XML_PARSE_BIG_LINES
+XML_PARSE_COMPACT
+XML_PARSE_DOM
+XML_PARSE_DTDATTR
+XML_PARSE_DTDLOAD
+XML_PARSE_DTDVALID
+XML_PARSE_HUGE
+XML_PARSE_IGNORE_ENC
+XML_PARSE_NOBASEFIX
+XML_PARSE_NOBLANKS
+XML_PARSE_NOCDATA
+XML_PARSE_NODICT
+XML_PARSE_NOENT
+XML_PARSE_NOERROR
+XML_PARSE_NONET
+XML_PARSE_NOWARNING
+XML_PARSE_NOXINCNODE
+XML_PARSE_NSCLEAN
+XML_PARSE_OLD10
+XML_PARSE_OLDSAX
+XML_PARSE_PEDANTIC
+XML_PARSE_PUSH_DOM
+XML_PARSE_PUSH_SAX
+XML_PARSE_READER
+XML_PARSE_RECOVER
+XML_PARSE_SAX
+XML_PARSE_SAX1
+XML_PARSE_UNKNOWN
+XML_PARSE_XINCLUDE
+XML_SAX2_MAGIC
+XML_SKIP_IDS
+XML_WITH_AUTOMATA
+XML_WITH_C14N
+XML_WITH_CATALOG
+XML_WITH_DEBUG
+XML_WITH_DEBUG_MEM
+XML_WITH_DEBUG_RUN
+XML_WITH_EXPR
+XML_WITH_FTP
+XML_WITH_HTML
+XML_WITH_HTTP
+XML_WITH_ICONV
+XML_WITH_ICU
+XML_WITH_ISO8859X
+XML_WITH_LEGACY
+XML_WITH_LZMA
+XML_WITH_MODULES
+XML_WITH_NONE
+XML_WITH_OUTPUT
+XML_WITH_PATTERN
+XML_WITH_PUSH
+XML_WITH_READER
+XML_WITH_REGEXP
+XML_WITH_SAX1
+XML_WITH_SCHEMAS
+XML_WITH_SCHEMATRON
+XML_WITH_THREAD
+XML_WITH_TREE
+XML_WITH_UNICODE
+XML_WITH_VALID
+XML_WITH_WRITER
+XML_WITH_XINCLUDE
+XML_WITH_XPATH
+XML_WITH_XPTR
+XML_WITH_ZLIB
+_xmlParserCtxt
+_xmlParserInput
+_xmlParserNodeInfo
+_xmlParserNodeInfoSeq
+_xmlSAXHandler
+_xmlSAXHandlerV1
+_xmlSAXLocator
+attributeDeclSAXFunc
+attributeSAXFunc
+cdataBlockSAXFunc
+charactersSAXFunc
+commentSAXFunc
+elementDeclSAXFunc
+endDocumentSAXFunc
+endElementNsSAX2Func
+endElementSAXFunc
+entityDeclSAXFunc
+errorSAXFunc
+externalSubsetSAXFunc
+fatalErrorSAXFunc
+getEntitySAXFunc
+getParameterEntitySAXFunc
+hasExternalSubsetSAXFunc
+hasInternalSubsetSAXFunc
+ignorableWhitespaceSAXFunc
+internalSubsetSAXFunc
+isStandaloneSAXFunc
+notationDeclSAXFunc
+processingInstructionSAXFunc
+referenceSAXFunc
+resolveEntitySAXFunc
+setDocumentLocatorSAXFunc
+startDocumentSAXFunc
+startElementNsSAX2Func
+startElementSAXFunc
+unparsedEntityDeclSAXFunc
+warningSAXFunc
+xmlByteConsumed
+xmlCleanupParser
+xmlClearNodeInfoSeq
+xmlClearParserCtxt
+xmlCreateDocParserCtxt
+xmlCreateIOParserCtxt
+xmlCreatePushParserCtxt
+xmlCtxtReadDoc
+xmlCtxtReadFd
+xmlCtxtReadFile
+xmlCtxtReadIO
+xmlCtxtReadMemory
+xmlCtxtReset
+xmlCtxtResetPush
+xmlCtxtUseOptions
+xmlExternalEntityLoader
+xmlFeature
+xmlFreeParserCtxt
+xmlGetExternalEntityLoader
+xmlGetFeature
+xmlGetFeaturesList
+xmlHasFeature
+xmlIOParseDTD
+xmlInitNodeInfoSeq
+xmlInitParser
+xmlInitParserCtxt
+xmlKeepBlanksDefault
+xmlLineNumbersDefault
+xmlLoadExternalEntity
+xmlNewIOInputStream
+xmlNewParserCtxt
+xmlParseBalancedChunkMemory
+xmlParseBalancedChunkMemoryRecover
+xmlParseChunk
+xmlParseCtxtExternalEntity
+xmlParseDTD
+xmlParseDoc
+xmlParseDocument
+xmlParseEntity
+xmlParseExtParsedEnt
+xmlParseExternalEntity
+xmlParseFile
+xmlParseInNodeContext
+xmlParseMemory
+xmlParserAddNodeInfo
+xmlParserFindNodeInfo
+xmlParserFindNodeInfoIndex
+xmlParserInputDeallocate
+xmlParserInputGrow
+xmlParserInputRead
+xmlParserInputState
+xmlParserMode
+xmlParserNodeInfo
+xmlParserNodeInfoPtr
+xmlParserNodeInfoSeq
+xmlParserNodeInfoSeqPtr
+xmlParserOption
+xmlPedanticParserDefault
+xmlReadDoc
+xmlReadFd
+xmlReadFile
+xmlReadIO
+xmlReadMemory
+xmlRecoverDoc
+xmlRecoverFile
+xmlRecoverMemory
+xmlSAXHandlerV1
+xmlSAXHandlerV1Ptr
+xmlSAXParseDTD
+xmlSAXParseDoc
+xmlSAXParseEntity
+xmlSAXParseFile
+xmlSAXParseFileWithData
+xmlSAXParseMemory
+xmlSAXParseMemoryWithData
+xmlSAXUserParseFile
+xmlSAXUserParseMemory
+xmlSetExternalEntityLoader
+xmlSetFeature
+xmlSetupParserForBuffer
+xmlStopParser
+xmlSubstituteEntitiesDefault
+

Module parserInternals:

INPUT_CHUNK
+IS_ASCII_DIGIT
+IS_ASCII_LETTER
+IS_BASECHAR
+IS_BLANK
+IS_BLANK_CH
+IS_BYTE_CHAR
+IS_CHAR
+IS_CHAR_CH
+IS_COMBINING
+IS_COMBINING_CH
+IS_DIGIT
+IS_DIGIT_CH
+IS_EXTENDER
+IS_EXTENDER_CH
+IS_IDEOGRAPHIC
+IS_LETTER
+IS_LETTER_CH
+IS_PUBIDCHAR
+IS_PUBIDCHAR_CH
+MOVETO_ENDTAG
+MOVETO_STARTTAG
+SKIP_EOL
+XML_MAX_DICTIONARY_LIMIT
+XML_MAX_LOOKUP_LIMIT
+XML_MAX_NAMELEN
+XML_MAX_NAME_LENGTH
+XML_MAX_TEXT_LENGTH
+XML_SUBSTITUTE_BOTH
+XML_SUBSTITUTE_NONE
+XML_SUBSTITUTE_PEREF
+XML_SUBSTITUTE_REF
+htmlCreateFileParserCtxt
+htmlInitAutoClose
+inputPop
+inputPush
+namePop
+namePush
+nodePop
+nodePush
+xmlCheckLanguageID
+xmlCopyChar
+xmlCopyCharMultiByte
+xmlCreateEntityParserCtxt
+xmlCreateFileParserCtxt
+xmlCreateMemoryParserCtxt
+xmlCreateURLParserCtxt
+xmlCurrentChar
+xmlDecodeEntities
+xmlEntityReferenceFunc
+xmlErrMemory
+xmlFreeInputStream
+xmlHandleEntity
+xmlIsLetter
+xmlNamespaceParseNCName
+xmlNamespaceParseNSDef
+xmlNamespaceParseQName
+xmlNewEntityInputStream
+xmlNewInputFromFile
+xmlNewInputStream
+xmlNewStringInputStream
+xmlNextChar
+xmlParseAttValue
+xmlParseAttribute
+xmlParseAttributeListDecl
+xmlParseAttributeType
+xmlParseCDSect
+xmlParseCharData
+xmlParseCharRef
+xmlParseComment
+xmlParseContent
+xmlParseDefaultDecl
+xmlParseDocTypeDecl
+xmlParseElement
+xmlParseElementChildrenContentDecl
+xmlParseElementContentDecl
+xmlParseElementDecl
+xmlParseElementMixedContentDecl
+xmlParseEncName
+xmlParseEncodingDecl
+xmlParseEndTag
+xmlParseEntityDecl
+xmlParseEntityRef
+xmlParseEntityValue
+xmlParseEnumeratedType
+xmlParseEnumerationType
+xmlParseExternalID
+xmlParseExternalSubset
+xmlParseMarkupDecl
+xmlParseMisc
+xmlParseName
+xmlParseNamespace
+xmlParseNmtoken
+xmlParseNotationDecl
+xmlParseNotationType
+xmlParsePEReference
+xmlParsePI
+xmlParsePITarget
+xmlParsePubidLiteral
+xmlParseQuotedString
+xmlParseReference
+xmlParseSDDecl
+xmlParseStartTag
+xmlParseSystemLiteral
+xmlParseTextDecl
+xmlParseVersionInfo
+xmlParseVersionNum
+xmlParseXMLDecl
+xmlParserHandlePEReference
+xmlParserHandleReference
+xmlParserInputShrink
+xmlParserMaxDepth
+xmlPopInput
+xmlPushInput
+xmlScanName
+xmlSetEntityReferenceFunc
+xmlSkipBlankChars
+xmlSplitQName
+xmlStringComment
+xmlStringCurrentChar
+xmlStringDecodeEntities
+xmlStringLenDecodeEntities
+xmlStringText
+xmlStringTextNoenc
+xmlSwitchEncoding
+xmlSwitchInputEncoding
+xmlSwitchToEncoding
+

Module pattern:

XML_PATTERN_DEFAULT
+XML_PATTERN_XPATH
+XML_PATTERN_XSFIELD
+XML_PATTERN_XSSEL
+xmlFreePattern
+xmlFreePatternList
+xmlFreeStreamCtxt
+xmlPattern
+xmlPatternFlags
+xmlPatternFromRoot
+xmlPatternGetStreamCtxt
+xmlPatternMatch
+xmlPatternMaxDepth
+xmlPatternMinDepth
+xmlPatternPtr
+xmlPatternStreamable
+xmlPatterncompile
+xmlStreamCtxt
+xmlStreamCtxtPtr
+xmlStreamPop
+xmlStreamPush
+xmlStreamPushAttr
+xmlStreamPushNode
+xmlStreamWantsAnyNode
+

Module relaxng:

XML_RELAXNGP_CRNG
+XML_RELAXNGP_FREE_DOC
+XML_RELAXNGP_NONE
+XML_RELAXNG_ERR_ATTREXTRANS
+XML_RELAXNG_ERR_ATTRNAME
+XML_RELAXNG_ERR_ATTRNONS
+XML_RELAXNG_ERR_ATTRVALID
+XML_RELAXNG_ERR_ATTRWRONGNS
+XML_RELAXNG_ERR_CONTENTVALID
+XML_RELAXNG_ERR_DATAELEM
+XML_RELAXNG_ERR_DATATYPE
+XML_RELAXNG_ERR_DUPID
+XML_RELAXNG_ERR_ELEMEXTRANS
+XML_RELAXNG_ERR_ELEMNAME
+XML_RELAXNG_ERR_ELEMNONS
+XML_RELAXNG_ERR_ELEMNOTEMPTY
+XML_RELAXNG_ERR_ELEMWRONG
+XML_RELAXNG_ERR_ELEMWRONGNS
+XML_RELAXNG_ERR_EXTRACONTENT
+XML_RELAXNG_ERR_EXTRADATA
+XML_RELAXNG_ERR_INTEREXTRA
+XML_RELAXNG_ERR_INTERNAL
+XML_RELAXNG_ERR_INTERNODATA
+XML_RELAXNG_ERR_INTERSEQ
+XML_RELAXNG_ERR_INVALIDATTR
+XML_RELAXNG_ERR_LACKDATA
+XML_RELAXNG_ERR_LIST
+XML_RELAXNG_ERR_LISTELEM
+XML_RELAXNG_ERR_LISTEMPTY
+XML_RELAXNG_ERR_LISTEXTRA
+XML_RELAXNG_ERR_MEMORY
+XML_RELAXNG_ERR_NODEFINE
+XML_RELAXNG_ERR_NOELEM
+XML_RELAXNG_ERR_NOGRAMMAR
+XML_RELAXNG_ERR_NOSTATE
+XML_RELAXNG_ERR_NOTELEM
+XML_RELAXNG_ERR_TEXTWRONG
+XML_RELAXNG_ERR_TYPE
+XML_RELAXNG_ERR_TYPECMP
+XML_RELAXNG_ERR_TYPEVAL
+XML_RELAXNG_ERR_VALELEM
+XML_RELAXNG_ERR_VALUE
+XML_RELAXNG_OK
+xmlRelaxNG
+xmlRelaxNGCleanupTypes
+xmlRelaxNGDump
+xmlRelaxNGDumpTree
+xmlRelaxNGFree
+xmlRelaxNGFreeParserCtxt
+xmlRelaxNGFreeValidCtxt
+xmlRelaxNGGetParserErrors
+xmlRelaxNGGetValidErrors
+xmlRelaxNGInitTypes
+xmlRelaxNGNewDocParserCtxt
+xmlRelaxNGNewMemParserCtxt
+xmlRelaxNGNewParserCtxt
+xmlRelaxNGNewValidCtxt
+xmlRelaxNGParse
+xmlRelaxNGParserCtxt
+xmlRelaxNGParserCtxtPtr
+xmlRelaxNGParserFlag
+xmlRelaxNGPtr
+xmlRelaxNGSetParserErrors
+xmlRelaxNGSetParserStructuredErrors
+xmlRelaxNGSetValidErrors
+xmlRelaxNGSetValidStructuredErrors
+xmlRelaxNGValidCtxt
+xmlRelaxNGValidCtxtPtr
+xmlRelaxNGValidErr
+xmlRelaxNGValidateDoc
+xmlRelaxNGValidateFullElement
+xmlRelaxNGValidatePopElement
+xmlRelaxNGValidatePushCData
+xmlRelaxNGValidatePushElement
+xmlRelaxNGValidityErrorFunc
+xmlRelaxNGValidityWarningFunc
+xmlRelaxParserSetFlag
+

Module schemasInternals:

XML_SCHEMAS_ANYATTR_LAX
+XML_SCHEMAS_ANYATTR_SKIP
+XML_SCHEMAS_ANYATTR_STRICT
+XML_SCHEMAS_ANYSIMPLETYPE
+XML_SCHEMAS_ANYTYPE
+XML_SCHEMAS_ANYURI
+XML_SCHEMAS_ANY_LAX
+XML_SCHEMAS_ANY_SKIP
+XML_SCHEMAS_ANY_STRICT
+XML_SCHEMAS_ATTRGROUP_GLOBAL
+XML_SCHEMAS_ATTRGROUP_HAS_REFS
+XML_SCHEMAS_ATTRGROUP_MARKED
+XML_SCHEMAS_ATTRGROUP_REDEFINED
+XML_SCHEMAS_ATTRGROUP_WILDCARD_BUILDED
+XML_SCHEMAS_ATTR_FIXED
+XML_SCHEMAS_ATTR_GLOBAL
+XML_SCHEMAS_ATTR_INTERNAL_RESOLVED
+XML_SCHEMAS_ATTR_NSDEFAULT
+XML_SCHEMAS_ATTR_USE_OPTIONAL
+XML_SCHEMAS_ATTR_USE_PROHIBITED
+XML_SCHEMAS_ATTR_USE_REQUIRED
+XML_SCHEMAS_BASE64BINARY
+XML_SCHEMAS_BLOCK_DEFAULT_EXTENSION
+XML_SCHEMAS_BLOCK_DEFAULT_RESTRICTION
+XML_SCHEMAS_BLOCK_DEFAULT_SUBSTITUTION
+XML_SCHEMAS_BOOLEAN
+XML_SCHEMAS_BYTE
+XML_SCHEMAS_DATE
+XML_SCHEMAS_DATETIME
+XML_SCHEMAS_DECIMAL
+XML_SCHEMAS_DOUBLE
+XML_SCHEMAS_DURATION
+XML_SCHEMAS_ELEM_ABSTRACT
+XML_SCHEMAS_ELEM_BLOCK_ABSENT
+XML_SCHEMAS_ELEM_BLOCK_EXTENSION
+XML_SCHEMAS_ELEM_BLOCK_RESTRICTION
+XML_SCHEMAS_ELEM_BLOCK_SUBSTITUTION
+XML_SCHEMAS_ELEM_CIRCULAR
+XML_SCHEMAS_ELEM_DEFAULT
+XML_SCHEMAS_ELEM_FINAL_ABSENT
+XML_SCHEMAS_ELEM_FINAL_EXTENSION
+XML_SCHEMAS_ELEM_FINAL_RESTRICTION
+XML_SCHEMAS_ELEM_FIXED
+XML_SCHEMAS_ELEM_GLOBAL
+XML_SCHEMAS_ELEM_INTERNAL_CHECKED
+XML_SCHEMAS_ELEM_INTERNAL_RESOLVED
+XML_SCHEMAS_ELEM_NILLABLE
+XML_SCHEMAS_ELEM_NSDEFAULT
+XML_SCHEMAS_ELEM_REF
+XML_SCHEMAS_ELEM_SUBST_GROUP_HEAD
+XML_SCHEMAS_ELEM_TOPLEVEL
+XML_SCHEMAS_ENTITIES
+XML_SCHEMAS_ENTITY
+XML_SCHEMAS_FACET_COLLAPSE
+XML_SCHEMAS_FACET_PRESERVE
+XML_SCHEMAS_FACET_REPLACE
+XML_SCHEMAS_FACET_UNKNOWN
+XML_SCHEMAS_FINAL_DEFAULT_EXTENSION
+XML_SCHEMAS_FINAL_DEFAULT_LIST
+XML_SCHEMAS_FINAL_DEFAULT_RESTRICTION
+XML_SCHEMAS_FINAL_DEFAULT_UNION
+XML_SCHEMAS_FLOAT
+XML_SCHEMAS_GDAY
+XML_SCHEMAS_GMONTH
+XML_SCHEMAS_GMONTHDAY
+XML_SCHEMAS_GYEAR
+XML_SCHEMAS_GYEARMONTH
+XML_SCHEMAS_HEXBINARY
+XML_SCHEMAS_ID
+XML_SCHEMAS_IDREF
+XML_SCHEMAS_IDREFS
+XML_SCHEMAS_INCLUDING_CONVERT_NS
+XML_SCHEMAS_INT
+XML_SCHEMAS_INTEGER
+XML_SCHEMAS_LANGUAGE
+XML_SCHEMAS_LONG
+XML_SCHEMAS_NAME
+XML_SCHEMAS_NCNAME
+XML_SCHEMAS_NINTEGER
+XML_SCHEMAS_NMTOKEN
+XML_SCHEMAS_NMTOKENS
+XML_SCHEMAS_NNINTEGER
+XML_SCHEMAS_NORMSTRING
+XML_SCHEMAS_NOTATION
+XML_SCHEMAS_NPINTEGER
+XML_SCHEMAS_PINTEGER
+XML_SCHEMAS_QNAME
+XML_SCHEMAS_QUALIF_ATTR
+XML_SCHEMAS_QUALIF_ELEM
+XML_SCHEMAS_SHORT
+XML_SCHEMAS_STRING
+XML_SCHEMAS_TIME
+XML_SCHEMAS_TOKEN
+XML_SCHEMAS_TYPE_ABSTRACT
+XML_SCHEMAS_TYPE_BLOCK_DEFAULT
+XML_SCHEMAS_TYPE_BLOCK_EXTENSION
+XML_SCHEMAS_TYPE_BLOCK_RESTRICTION
+XML_SCHEMAS_TYPE_BUILTIN_PRIMITIVE
+XML_SCHEMAS_TYPE_DERIVATION_METHOD_EXTENSION
+XML_SCHEMAS_TYPE_DERIVATION_METHOD_RESTRICTION
+XML_SCHEMAS_TYPE_FACETSNEEDVALUE
+XML_SCHEMAS_TYPE_FINAL_DEFAULT
+XML_SCHEMAS_TYPE_FINAL_EXTENSION
+XML_SCHEMAS_TYPE_FINAL_LIST
+XML_SCHEMAS_TYPE_FINAL_RESTRICTION
+XML_SCHEMAS_TYPE_FINAL_UNION
+XML_SCHEMAS_TYPE_FIXUP_1
+XML_SCHEMAS_TYPE_GLOBAL
+XML_SCHEMAS_TYPE_HAS_FACETS
+XML_SCHEMAS_TYPE_INTERNAL_INVALID
+XML_SCHEMAS_TYPE_INTERNAL_RESOLVED
+XML_SCHEMAS_TYPE_MARKED
+XML_SCHEMAS_TYPE_MIXED
+XML_SCHEMAS_TYPE_NORMVALUENEEDED
+XML_SCHEMAS_TYPE_OWNED_ATTR_WILDCARD
+XML_SCHEMAS_TYPE_REDEFINED
+XML_SCHEMAS_TYPE_VARIETY_ABSENT
+XML_SCHEMAS_TYPE_VARIETY_ATOMIC
+XML_SCHEMAS_TYPE_VARIETY_LIST
+XML_SCHEMAS_TYPE_VARIETY_UNION
+XML_SCHEMAS_TYPE_WHITESPACE_COLLAPSE
+XML_SCHEMAS_TYPE_WHITESPACE_PRESERVE
+XML_SCHEMAS_TYPE_WHITESPACE_REPLACE
+XML_SCHEMAS_UBYTE
+XML_SCHEMAS_UINT
+XML_SCHEMAS_ULONG
+XML_SCHEMAS_UNKNOWN
+XML_SCHEMAS_USHORT
+XML_SCHEMAS_WILDCARD_COMPLETE
+XML_SCHEMA_CONTENT_ANY
+XML_SCHEMA_CONTENT_BASIC
+XML_SCHEMA_CONTENT_ELEMENTS
+XML_SCHEMA_CONTENT_EMPTY
+XML_SCHEMA_CONTENT_MIXED
+XML_SCHEMA_CONTENT_MIXED_OR_ELEMENTS
+XML_SCHEMA_CONTENT_SIMPLE
+XML_SCHEMA_CONTENT_UNKNOWN
+XML_SCHEMA_EXTRA_ATTR_USE_PROHIB
+XML_SCHEMA_EXTRA_QNAMEREF
+XML_SCHEMA_FACET_ENUMERATION
+XML_SCHEMA_FACET_FRACTIONDIGITS
+XML_SCHEMA_FACET_LENGTH
+XML_SCHEMA_FACET_MAXEXCLUSIVE
+XML_SCHEMA_FACET_MAXINCLUSIVE
+XML_SCHEMA_FACET_MAXLENGTH
+XML_SCHEMA_FACET_MINEXCLUSIVE
+XML_SCHEMA_FACET_MININCLUSIVE
+XML_SCHEMA_FACET_MINLENGTH
+XML_SCHEMA_FACET_PATTERN
+XML_SCHEMA_FACET_TOTALDIGITS
+XML_SCHEMA_FACET_WHITESPACE
+XML_SCHEMA_TYPE_ALL
+XML_SCHEMA_TYPE_ANY
+XML_SCHEMA_TYPE_ANY_ATTRIBUTE
+XML_SCHEMA_TYPE_ATTRIBUTE
+XML_SCHEMA_TYPE_ATTRIBUTEGROUP
+XML_SCHEMA_TYPE_ATTRIBUTE_USE
+XML_SCHEMA_TYPE_BASIC
+XML_SCHEMA_TYPE_CHOICE
+XML_SCHEMA_TYPE_COMPLEX
+XML_SCHEMA_TYPE_COMPLEX_CONTENT
+XML_SCHEMA_TYPE_ELEMENT
+XML_SCHEMA_TYPE_EXTENSION
+XML_SCHEMA_TYPE_FACET
+XML_SCHEMA_TYPE_GROUP
+XML_SCHEMA_TYPE_IDC_KEY
+XML_SCHEMA_TYPE_IDC_KEYREF
+XML_SCHEMA_TYPE_IDC_UNIQUE
+XML_SCHEMA_TYPE_LIST
+XML_SCHEMA_TYPE_NOTATION
+XML_SCHEMA_TYPE_PARTICLE
+XML_SCHEMA_TYPE_RESTRICTION
+XML_SCHEMA_TYPE_SEQUENCE
+XML_SCHEMA_TYPE_SIMPLE
+XML_SCHEMA_TYPE_SIMPLE_CONTENT
+XML_SCHEMA_TYPE_UNION
+XML_SCHEMA_TYPE_UR
+_xmlSchema
+_xmlSchemaAnnot
+_xmlSchemaAttribute
+_xmlSchemaAttributeGroup
+_xmlSchemaAttributeLink
+_xmlSchemaElement
+_xmlSchemaFacet
+_xmlSchemaFacetLink
+_xmlSchemaNotation
+_xmlSchemaType
+_xmlSchemaTypeLink
+_xmlSchemaWildcard
+_xmlSchemaWildcardNs
+xmlSchemaAnnot
+xmlSchemaAnnotPtr
+xmlSchemaAttribute
+xmlSchemaAttributeGroup
+xmlSchemaAttributeGroupPtr
+xmlSchemaAttributeLink
+xmlSchemaAttributeLinkPtr
+xmlSchemaAttributePtr
+xmlSchemaContentType
+xmlSchemaElement
+xmlSchemaElementPtr
+xmlSchemaFacet
+xmlSchemaFacetLink
+xmlSchemaFacetLinkPtr
+xmlSchemaFacetPtr
+xmlSchemaFreeType
+xmlSchemaFreeWildcard
+xmlSchemaNotation
+xmlSchemaNotationPtr
+xmlSchemaType
+xmlSchemaTypeLink
+xmlSchemaTypeLinkPtr
+xmlSchemaTypePtr
+xmlSchemaTypeType
+xmlSchemaVal
+xmlSchemaValPtr
+xmlSchemaValType
+xmlSchemaWildcard
+xmlSchemaWildcardNs
+xmlSchemaWildcardNsPtr
+xmlSchemaWildcardPtr
+

Module schematron:

XML_SCHEMATRON_OUT_BUFFER
+XML_SCHEMATRON_OUT_ERROR
+XML_SCHEMATRON_OUT_FILE
+XML_SCHEMATRON_OUT_IO
+XML_SCHEMATRON_OUT_QUIET
+XML_SCHEMATRON_OUT_TEXT
+XML_SCHEMATRON_OUT_XML
+xmlSchematron
+xmlSchematronFree
+xmlSchematronFreeParserCtxt
+xmlSchematronFreeValidCtxt
+xmlSchematronNewDocParserCtxt
+xmlSchematronNewMemParserCtxt
+xmlSchematronNewParserCtxt
+xmlSchematronNewValidCtxt
+xmlSchematronParse
+xmlSchematronParserCtxt
+xmlSchematronParserCtxtPtr
+xmlSchematronPtr
+xmlSchematronSetValidStructuredErrors
+xmlSchematronValidCtxt
+xmlSchematronValidCtxtPtr
+xmlSchematronValidOptions
+xmlSchematronValidateDoc
+xmlSchematronValidityErrorFunc
+xmlSchematronValidityWarningFunc
+

Module threads:

xmlCleanupThreads
+xmlDllMain
+xmlFreeMutex
+xmlFreeRMutex
+xmlGetGlobalState
+xmlGetThreadId
+xmlInitThreads
+xmlIsMainThread
+xmlLockLibrary
+xmlMutex
+xmlMutexLock
+xmlMutexPtr
+xmlMutexUnlock
+xmlNewMutex
+xmlNewRMutex
+xmlRMutex
+xmlRMutexLock
+xmlRMutexPtr
+xmlRMutexUnlock
+xmlUnlockLibrary
+

Module tree:

BASE_BUFFER_SIZE
+LIBXML2_NEW_BUFFER
+XML_ATTRIBUTE_CDATA
+XML_ATTRIBUTE_DECL
+XML_ATTRIBUTE_ENTITIES
+XML_ATTRIBUTE_ENTITY
+XML_ATTRIBUTE_ENUMERATION
+XML_ATTRIBUTE_FIXED
+XML_ATTRIBUTE_ID
+XML_ATTRIBUTE_IDREF
+XML_ATTRIBUTE_IDREFS
+XML_ATTRIBUTE_IMPLIED
+XML_ATTRIBUTE_NMTOKEN
+XML_ATTRIBUTE_NMTOKENS
+XML_ATTRIBUTE_NODE
+XML_ATTRIBUTE_NONE
+XML_ATTRIBUTE_NOTATION
+XML_ATTRIBUTE_REQUIRED
+XML_BUFFER_ALLOC_BOUNDED
+XML_BUFFER_ALLOC_DOUBLEIT
+XML_BUFFER_ALLOC_EXACT
+XML_BUFFER_ALLOC_HYBRID
+XML_BUFFER_ALLOC_IMMUTABLE
+XML_BUFFER_ALLOC_IO
+XML_CDATA_SECTION_NODE
+XML_COMMENT_NODE
+XML_DOCB_DOCUMENT_NODE
+XML_DOCUMENT_FRAG_NODE
+XML_DOCUMENT_NODE
+XML_DOCUMENT_TYPE_NODE
+XML_DOC_DTDVALID
+XML_DOC_HTML
+XML_DOC_INTERNAL
+XML_DOC_NSVALID
+XML_DOC_OLD10
+XML_DOC_USERBUILT
+XML_DOC_WELLFORMED
+XML_DOC_XINCLUDE
+XML_DTD_NODE
+XML_ELEMENT_CONTENT_ELEMENT
+XML_ELEMENT_CONTENT_MULT
+XML_ELEMENT_CONTENT_ONCE
+XML_ELEMENT_CONTENT_OPT
+XML_ELEMENT_CONTENT_OR
+XML_ELEMENT_CONTENT_PCDATA
+XML_ELEMENT_CONTENT_PLUS
+XML_ELEMENT_CONTENT_SEQ
+XML_ELEMENT_DECL
+XML_ELEMENT_NODE
+XML_ELEMENT_TYPE_ANY
+XML_ELEMENT_TYPE_ELEMENT
+XML_ELEMENT_TYPE_EMPTY
+XML_ELEMENT_TYPE_MIXED
+XML_ELEMENT_TYPE_UNDEFINED
+XML_ENTITY_DECL
+XML_ENTITY_NODE
+XML_ENTITY_REF_NODE
+XML_GET_CONTENT
+XML_GET_LINE
+XML_HTML_DOCUMENT_NODE
+XML_LOCAL_NAMESPACE
+XML_NAMESPACE_DECL
+XML_NOTATION_NODE
+XML_PI_NODE
+XML_TEXT_NODE
+XML_XINCLUDE_END
+XML_XINCLUDE_START
+XML_XML_ID
+XML_XML_NAMESPACE
+_xmlAttr
+_xmlAttribute
+_xmlBuffer
+_xmlDOMWrapCtxt
+_xmlDoc
+_xmlDtd
+_xmlElement
+_xmlElementContent
+_xmlEnumeration
+_xmlID
+_xmlNode
+_xmlNotation
+_xmlNs
+_xmlRef
+xmlAddChild
+xmlAddChildList
+xmlAddNextSibling
+xmlAddPrevSibling
+xmlAddSibling
+xmlAttr
+xmlAttrPtr
+xmlAttrSerializeTxtContent
+xmlAttribute
+xmlAttributeDefault
+xmlAttributePtr
+xmlAttributeType
+xmlBuf
+xmlBufContent
+xmlBufEnd
+xmlBufGetNodeContent
+xmlBufNodeDump
+xmlBufPtr
+xmlBufShrink
+xmlBufUse
+xmlBuffer
+xmlBufferAdd
+xmlBufferAddHead
+xmlBufferAllocationScheme
+xmlBufferCCat
+xmlBufferCat
+xmlBufferContent
+xmlBufferCreate
+xmlBufferCreateSize
+xmlBufferCreateStatic
+xmlBufferDetach
+xmlBufferDump
+xmlBufferEmpty
+xmlBufferFree
+xmlBufferGrow
+xmlBufferLength
+xmlBufferPtr
+xmlBufferResize
+xmlBufferSetAllocationScheme
+xmlBufferShrink
+xmlBufferWriteCHAR
+xmlBufferWriteChar
+xmlBufferWriteQuotedString
+xmlBuildQName
+xmlChildElementCount
+xmlChildrenNode
+xmlCopyDoc
+xmlCopyDtd
+xmlCopyNamespace
+xmlCopyNamespaceList
+xmlCopyNode
+xmlCopyNodeList
+xmlCopyProp
+xmlCopyPropList
+xmlCreateIntSubset
+xmlDOMWrapAcquireNsFunction
+xmlDOMWrapAdoptNode
+xmlDOMWrapCloneNode
+xmlDOMWrapCtxt
+xmlDOMWrapCtxtPtr
+xmlDOMWrapFreeCtxt
+xmlDOMWrapNewCtxt
+xmlDOMWrapReconcileNamespaces
+xmlDOMWrapRemoveNode
+xmlDoc
+xmlDocCopyNode
+xmlDocCopyNodeList
+xmlDocDump
+xmlDocDumpFormatMemory
+xmlDocDumpFormatMemoryEnc
+xmlDocDumpMemory
+xmlDocDumpMemoryEnc
+xmlDocFormatDump
+xmlDocGetRootElement
+xmlDocProperties
+xmlDocPtr
+xmlDocSetRootElement
+xmlDtd
+xmlDtdPtr
+xmlElemDump
+xmlElement
+xmlElementContent
+xmlElementContentOccur
+xmlElementContentPtr
+xmlElementContentType
+xmlElementPtr
+xmlElementType
+xmlElementTypeVal
+xmlEntity
+xmlEntityPtr
+xmlEnumeration
+xmlEnumerationPtr
+xmlFirstElementChild
+xmlFreeDoc
+xmlFreeDtd
+xmlFreeNode
+xmlFreeNodeList
+xmlFreeNs
+xmlFreeNsList
+xmlFreeProp
+xmlFreePropList
+xmlGetBufferAllocationScheme
+xmlGetCompressMode
+xmlGetDocCompressMode
+xmlGetIntSubset
+xmlGetLastChild
+xmlGetLineNo
+xmlGetNoNsProp
+xmlGetNodePath
+xmlGetNsList
+xmlGetNsProp
+xmlGetProp
+xmlHasNsProp
+xmlHasProp
+xmlID
+xmlIDPtr
+xmlIsBlankNode
+xmlIsXHTML
+xmlLastElementChild
+xmlNewCDataBlock
+xmlNewCharRef
+xmlNewChild
+xmlNewComment
+xmlNewDoc
+xmlNewDocComment
+xmlNewDocFragment
+xmlNewDocNode
+xmlNewDocNodeEatName
+xmlNewDocPI
+xmlNewDocProp
+xmlNewDocRawNode
+xmlNewDocText
+xmlNewDocTextLen
+xmlNewDtd
+xmlNewGlobalNs
+xmlNewNode
+xmlNewNodeEatName
+xmlNewNs
+xmlNewNsProp
+xmlNewNsPropEatName
+xmlNewPI
+xmlNewProp
+xmlNewReference
+xmlNewText
+xmlNewTextChild
+xmlNewTextLen
+xmlNextElementSibling
+xmlNode
+xmlNodeAddContent
+xmlNodeAddContentLen
+xmlNodeBufGetContent
+xmlNodeDump
+xmlNodeDumpOutput
+xmlNodeGetBase
+xmlNodeGetContent
+xmlNodeGetLang
+xmlNodeGetSpacePreserve
+xmlNodeIsText
+xmlNodeListGetRawString
+xmlNodeListGetString
+xmlNodePtr
+xmlNodeSetBase
+xmlNodeSetContent
+xmlNodeSetContentLen
+xmlNodeSetLang
+xmlNodeSetName
+xmlNodeSetSpacePreserve
+xmlNotation
+xmlNotationPtr
+xmlNs
+xmlNsPtr
+xmlNsType
+xmlOutputBuffer
+xmlOutputBufferPtr
+xmlParserCtxt
+xmlParserCtxtPtr
+xmlParserInput
+xmlParserInputBuffer
+xmlParserInputBufferPtr
+xmlParserInputPtr
+xmlPreviousElementSibling
+xmlReconciliateNs
+xmlRef
+xmlRefPtr
+xmlRemoveProp
+xmlReplaceNode
+xmlRootNode
+xmlSAXHandler
+xmlSAXHandlerPtr
+xmlSAXLocator
+xmlSAXLocatorPtr
+xmlSaveFile
+xmlSaveFileEnc
+xmlSaveFileTo
+xmlSaveFormatFile
+xmlSaveFormatFileEnc
+xmlSaveFormatFileTo
+xmlSearchNs
+xmlSearchNsByHref
+xmlSetBufferAllocationScheme
+xmlSetCompressMode
+xmlSetDocCompressMode
+xmlSetListDoc
+xmlSetNs
+xmlSetNsProp
+xmlSetProp
+xmlSetTreeDoc
+xmlSplitQName2
+xmlSplitQName3
+xmlStringGetNodeList
+xmlStringLenGetNodeList
+xmlTextConcat
+xmlTextMerge
+xmlUnlinkNode
+xmlUnsetNsProp
+xmlUnsetProp
+xmlValidateNCName
+xmlValidateNMToken
+xmlValidateName
+xmlValidateQName
+

Module uri:

_xmlURI
+xmlBuildRelativeURI
+xmlBuildURI
+xmlCanonicPath
+xmlCreateURI
+xmlFreeURI
+xmlNormalizeURIPath
+xmlParseURI
+xmlParseURIRaw
+xmlParseURIReference
+xmlPathToURI
+xmlPrintURI
+xmlSaveUri
+xmlURI
+xmlURIEscape
+xmlURIEscapeStr
+xmlURIPtr
+xmlURIUnescapeString
+

Module valid:

XML_CTXT_FINISH_DTD_0
+XML_CTXT_FINISH_DTD_1
+_xmlValidCtxt
+xmlAddAttributeDecl
+xmlAddElementDecl
+xmlAddID
+xmlAddNotationDecl
+xmlAddRef
+xmlAttributeTable
+xmlAttributeTablePtr
+xmlCopyAttributeTable
+xmlCopyDocElementContent
+xmlCopyElementContent
+xmlCopyElementTable
+xmlCopyEnumeration
+xmlCopyNotationTable
+xmlCreateEnumeration
+xmlDumpAttributeDecl
+xmlDumpAttributeTable
+xmlDumpElementDecl
+xmlDumpElementTable
+xmlDumpNotationDecl
+xmlDumpNotationTable
+xmlElementTable
+xmlElementTablePtr
+xmlFreeAttributeTable
+xmlFreeDocElementContent
+xmlFreeElementContent
+xmlFreeElementTable
+xmlFreeEnumeration
+xmlFreeIDTable
+xmlFreeNotationTable
+xmlFreeRefTable
+xmlFreeValidCtxt
+xmlGetDtdAttrDesc
+xmlGetDtdElementDesc
+xmlGetDtdNotationDesc
+xmlGetDtdQAttrDesc
+xmlGetDtdQElementDesc
+xmlGetID
+xmlGetRefs
+xmlIDTable
+xmlIDTablePtr
+xmlIsID
+xmlIsMixedElement
+xmlIsRef
+xmlNewDocElementContent
+xmlNewElementContent
+xmlNewValidCtxt
+xmlNotationTable
+xmlNotationTablePtr
+xmlRefTable
+xmlRefTablePtr
+xmlRemoveID
+xmlRemoveRef
+xmlSnprintfElementContent
+xmlSprintfElementContent
+xmlValidBuildContentModel
+xmlValidCtxt
+xmlValidCtxtNormalizeAttributeValue
+xmlValidCtxtPtr
+xmlValidGetPotentialChildren
+xmlValidGetValidElements
+xmlValidNormalizeAttributeValue
+xmlValidState
+xmlValidStatePtr
+xmlValidateAttributeDecl
+xmlValidateAttributeValue
+xmlValidateDocument
+xmlValidateDocumentFinal
+xmlValidateDtd
+xmlValidateDtdFinal
+xmlValidateElement
+xmlValidateElementDecl
+xmlValidateNameValue
+xmlValidateNamesValue
+xmlValidateNmtokenValue
+xmlValidateNmtokensValue
+xmlValidateNotationDecl
+xmlValidateNotationUse
+xmlValidateOneAttribute
+xmlValidateOneElement
+xmlValidateOneNamespace
+xmlValidatePopElement
+xmlValidatePushCData
+xmlValidatePushElement
+xmlValidateRoot
+xmlValidityErrorFunc
+xmlValidityWarningFunc
+

Module xinclude:

XINCLUDE_FALLBACK
+XINCLUDE_HREF
+XINCLUDE_NODE
+XINCLUDE_NS
+XINCLUDE_OLD_NS
+XINCLUDE_PARSE
+XINCLUDE_PARSE_ENCODING
+XINCLUDE_PARSE_TEXT
+XINCLUDE_PARSE_XML
+XINCLUDE_PARSE_XPOINTER
+xmlXIncludeCtxt
+xmlXIncludeCtxtPtr
+xmlXIncludeFreeContext
+xmlXIncludeNewContext
+xmlXIncludeProcess
+xmlXIncludeProcessFlags
+xmlXIncludeProcessFlagsData
+xmlXIncludeProcessNode
+xmlXIncludeProcessTree
+xmlXIncludeProcessTreeFlags
+xmlXIncludeProcessTreeFlagsData
+xmlXIncludeSetFlags
+

Module xlink:

XLINK_ACTUATE_AUTO
+XLINK_ACTUATE_NONE
+XLINK_ACTUATE_ONREQUEST
+XLINK_SHOW_EMBED
+XLINK_SHOW_NEW
+XLINK_SHOW_NONE
+XLINK_SHOW_REPLACE
+XLINK_TYPE_EXTENDED
+XLINK_TYPE_EXTENDED_SET
+XLINK_TYPE_NONE
+XLINK_TYPE_SIMPLE
+_xlinkHandler
+xlinkActuate
+xlinkExtendedLinkFunk
+xlinkExtendedLinkSetFunk
+xlinkGetDefaultDetect
+xlinkGetDefaultHandler
+xlinkHRef
+xlinkHandler
+xlinkHandlerPtr
+xlinkIsLink
+xlinkNodeDetectFunc
+xlinkRole
+xlinkSetDefaultDetect
+xlinkSetDefaultHandler
+xlinkShow
+xlinkSimpleLinkFunk
+xlinkTitle
+xlinkType
+

Module xmlIO:

_xmlOutputBuffer
+_xmlParserInputBuffer
+xmlAllocOutputBuffer
+xmlAllocParserInputBuffer
+xmlCheckFilename
+xmlCheckHTTPInput
+xmlCleanupInputCallbacks
+xmlCleanupOutputCallbacks
+xmlFileClose
+xmlFileMatch
+xmlFileOpen
+xmlFileRead
+xmlFreeParserInputBuffer
+xmlIOFTPClose
+xmlIOFTPMatch
+xmlIOFTPOpen
+xmlIOFTPRead
+xmlIOHTTPClose
+xmlIOHTTPMatch
+xmlIOHTTPOpen
+xmlIOHTTPOpenW
+xmlIOHTTPRead
+xmlInputCloseCallback
+xmlInputMatchCallback
+xmlInputOpenCallback
+xmlInputReadCallback
+xmlNoNetExternalEntityLoader
+xmlNormalizeWindowsPath
+xmlOutputBufferClose
+xmlOutputBufferCreateBuffer
+xmlOutputBufferCreateFd
+xmlOutputBufferCreateFile
+xmlOutputBufferCreateFilename
+xmlOutputBufferCreateIO
+xmlOutputBufferFlush
+xmlOutputBufferGetContent
+xmlOutputBufferGetSize
+xmlOutputBufferWrite
+xmlOutputBufferWriteEscape
+xmlOutputBufferWriteString
+xmlOutputCloseCallback
+xmlOutputMatchCallback
+xmlOutputOpenCallback
+xmlOutputWriteCallback
+xmlParserGetDirectory
+xmlParserInputBufferCreateFd
+xmlParserInputBufferCreateFile
+xmlParserInputBufferCreateFilename
+xmlParserInputBufferCreateIO
+xmlParserInputBufferCreateMem
+xmlParserInputBufferCreateStatic
+xmlParserInputBufferGrow
+xmlParserInputBufferPush
+xmlParserInputBufferRead
+xmlPopInputCallbacks
+xmlRegisterDefaultInputCallbacks
+xmlRegisterDefaultOutputCallbacks
+xmlRegisterHTTPPostCallbacks
+xmlRegisterInputCallbacks
+xmlRegisterOutputCallbacks
+

Module xmlautomata:

xmlAutomata
+xmlAutomataCompile
+xmlAutomataGetInitState
+xmlAutomataIsDeterminist
+xmlAutomataNewAllTrans
+xmlAutomataNewCountTrans
+xmlAutomataNewCountTrans2
+xmlAutomataNewCountedTrans
+xmlAutomataNewCounter
+xmlAutomataNewCounterTrans
+xmlAutomataNewEpsilon
+xmlAutomataNewNegTrans
+xmlAutomataNewOnceTrans
+xmlAutomataNewOnceTrans2
+xmlAutomataNewState
+xmlAutomataNewTransition
+xmlAutomataNewTransition2
+xmlAutomataPtr
+xmlAutomataSetFinalState
+xmlAutomataState
+xmlAutomataStatePtr
+xmlFreeAutomata
+xmlNewAutomata
+

Module xmlerror:

XML_BUF_OVERFLOW
+XML_C14N_CREATE_CTXT
+XML_C14N_CREATE_STACK
+XML_C14N_INVALID_NODE
+XML_C14N_RELATIVE_NAMESPACE
+XML_C14N_REQUIRES_UTF8
+XML_C14N_UNKNOW_NODE
+XML_CATALOG_ENTRY_BROKEN
+XML_CATALOG_MISSING_ATTR
+XML_CATALOG_NOT_CATALOG
+XML_CATALOG_PREFER_VALUE
+XML_CATALOG_RECURSION
+XML_CHECK_ENTITY_TYPE
+XML_CHECK_FOUND_ATTRIBUTE
+XML_CHECK_FOUND_CDATA
+XML_CHECK_FOUND_COMMENT
+XML_CHECK_FOUND_DOCTYPE
+XML_CHECK_FOUND_ELEMENT
+XML_CHECK_FOUND_ENTITY
+XML_CHECK_FOUND_ENTITYREF
+XML_CHECK_FOUND_FRAGMENT
+XML_CHECK_FOUND_NOTATION
+XML_CHECK_FOUND_PI
+XML_CHECK_FOUND_TEXT
+XML_CHECK_NAME_NOT_NULL
+XML_CHECK_NOT_ATTR
+XML_CHECK_NOT_ATTR_DECL
+XML_CHECK_NOT_DTD
+XML_CHECK_NOT_ELEM_DECL
+XML_CHECK_NOT_ENTITY_DECL
+XML_CHECK_NOT_NCNAME
+XML_CHECK_NOT_NS_DECL
+XML_CHECK_NOT_UTF8
+XML_CHECK_NO_DICT
+XML_CHECK_NO_DOC
+XML_CHECK_NO_ELEM
+XML_CHECK_NO_HREF
+XML_CHECK_NO_NAME
+XML_CHECK_NO_NEXT
+XML_CHECK_NO_PARENT
+XML_CHECK_NO_PREV
+XML_CHECK_NS_ANCESTOR
+XML_CHECK_NS_SCOPE
+XML_CHECK_OUTSIDE_DICT
+XML_CHECK_UNKNOWN_NODE
+XML_CHECK_WRONG_DOC
+XML_CHECK_WRONG_NAME
+XML_CHECK_WRONG_NEXT
+XML_CHECK_WRONG_PARENT
+XML_CHECK_WRONG_PREV
+XML_DTD_ATTRIBUTE_DEFAULT
+XML_DTD_ATTRIBUTE_REDEFINED
+XML_DTD_ATTRIBUTE_VALUE
+XML_DTD_CONTENT_ERROR
+XML_DTD_CONTENT_MODEL
+XML_DTD_CONTENT_NOT_DETERMINIST
+XML_DTD_DIFFERENT_PREFIX
+XML_DTD_DUP_TOKEN
+XML_DTD_ELEM_DEFAULT_NAMESPACE
+XML_DTD_ELEM_NAMESPACE
+XML_DTD_ELEM_REDEFINED
+XML_DTD_EMPTY_NOTATION
+XML_DTD_ENTITY_TYPE
+XML_DTD_ID_FIXED
+XML_DTD_ID_REDEFINED
+XML_DTD_ID_SUBSET
+XML_DTD_INVALID_CHILD
+XML_DTD_INVALID_DEFAULT
+XML_DTD_LOAD_ERROR
+XML_DTD_MISSING_ATTRIBUTE
+XML_DTD_MIXED_CORRUPT
+XML_DTD_MULTIPLE_ID
+XML_DTD_NOTATION_REDEFINED
+XML_DTD_NOTATION_VALUE
+XML_DTD_NOT_EMPTY
+XML_DTD_NOT_PCDATA
+XML_DTD_NOT_STANDALONE
+XML_DTD_NO_DOC
+XML_DTD_NO_DTD
+XML_DTD_NO_ELEM_NAME
+XML_DTD_NO_PREFIX
+XML_DTD_NO_ROOT
+XML_DTD_ROOT_NAME
+XML_DTD_STANDALONE_DEFAULTED
+XML_DTD_STANDALONE_WHITE_SPACE
+XML_DTD_UNKNOWN_ATTRIBUTE
+XML_DTD_UNKNOWN_ELEM
+XML_DTD_UNKNOWN_ENTITY
+XML_DTD_UNKNOWN_ID
+XML_DTD_UNKNOWN_NOTATION
+XML_DTD_XMLID_TYPE
+XML_DTD_XMLID_VALUE
+XML_ERR_ATTLIST_NOT_FINISHED
+XML_ERR_ATTLIST_NOT_STARTED
+XML_ERR_ATTRIBUTE_NOT_FINISHED
+XML_ERR_ATTRIBUTE_NOT_STARTED
+XML_ERR_ATTRIBUTE_REDEFINED
+XML_ERR_ATTRIBUTE_WITHOUT_VALUE
+XML_ERR_CDATA_NOT_FINISHED
+XML_ERR_CHARREF_AT_EOF
+XML_ERR_CHARREF_IN_DTD
+XML_ERR_CHARREF_IN_EPILOG
+XML_ERR_CHARREF_IN_PROLOG
+XML_ERR_COMMENT_NOT_FINISHED
+XML_ERR_CONDSEC_INVALID
+XML_ERR_CONDSEC_INVALID_KEYWORD
+XML_ERR_CONDSEC_NOT_FINISHED
+XML_ERR_CONDSEC_NOT_STARTED
+XML_ERR_DOCTYPE_NOT_FINISHED
+XML_ERR_DOCUMENT_EMPTY
+XML_ERR_DOCUMENT_END
+XML_ERR_DOCUMENT_START
+XML_ERR_ELEMCONTENT_NOT_FINISHED
+XML_ERR_ELEMCONTENT_NOT_STARTED
+XML_ERR_ENCODING_NAME
+XML_ERR_ENTITYREF_AT_EOF
+XML_ERR_ENTITYREF_IN_DTD
+XML_ERR_ENTITYREF_IN_EPILOG
+XML_ERR_ENTITYREF_IN_PROLOG
+XML_ERR_ENTITYREF_NO_NAME
+XML_ERR_ENTITYREF_SEMICOL_MISSING
+XML_ERR_ENTITY_BOUNDARY
+XML_ERR_ENTITY_CHAR_ERROR
+XML_ERR_ENTITY_IS_EXTERNAL
+XML_ERR_ENTITY_IS_PARAMETER
+XML_ERR_ENTITY_LOOP
+XML_ERR_ENTITY_NOT_FINISHED
+XML_ERR_ENTITY_NOT_STARTED
+XML_ERR_ENTITY_PE_INTERNAL
+XML_ERR_ENTITY_PROCESSING
+XML_ERR_EQUAL_REQUIRED
+XML_ERR_ERROR
+XML_ERR_EXTRA_CONTENT
+XML_ERR_EXT_ENTITY_STANDALONE
+XML_ERR_EXT_SUBSET_NOT_FINISHED
+XML_ERR_FATAL
+XML_ERR_GT_REQUIRED
+XML_ERR_HYPHEN_IN_COMMENT
+XML_ERR_INTERNAL_ERROR
+XML_ERR_INVALID_CHAR
+XML_ERR_INVALID_CHARREF
+XML_ERR_INVALID_DEC_CHARREF
+XML_ERR_INVALID_ENCODING
+XML_ERR_INVALID_HEX_CHARREF
+XML_ERR_INVALID_URI
+XML_ERR_LITERAL_NOT_FINISHED
+XML_ERR_LITERAL_NOT_STARTED
+XML_ERR_LTSLASH_REQUIRED
+XML_ERR_LT_IN_ATTRIBUTE
+XML_ERR_LT_REQUIRED
+XML_ERR_MISPLACED_CDATA_END
+XML_ERR_MISSING_ENCODING
+XML_ERR_MIXED_NOT_FINISHED
+XML_ERR_MIXED_NOT_STARTED
+XML_ERR_NAME_REQUIRED
+XML_ERR_NAME_TOO_LONG
+XML_ERR_NMTOKEN_REQUIRED
+XML_ERR_NONE
+XML_ERR_NOTATION_NOT_FINISHED
+XML_ERR_NOTATION_NOT_STARTED
+XML_ERR_NOTATION_PROCESSING
+XML_ERR_NOT_STANDALONE
+XML_ERR_NOT_WELL_BALANCED
+XML_ERR_NO_DTD
+XML_ERR_NO_MEMORY
+XML_ERR_NS_DECL_ERROR
+XML_ERR_OK
+XML_ERR_PCDATA_REQUIRED
+XML_ERR_PEREF_AT_EOF
+XML_ERR_PEREF_IN_EPILOG
+XML_ERR_PEREF_IN_INT_SUBSET
+XML_ERR_PEREF_IN_PROLOG
+XML_ERR_PEREF_NO_NAME
+XML_ERR_PEREF_SEMICOL_MISSING
+XML_ERR_PI_NOT_FINISHED
+XML_ERR_PI_NOT_STARTED
+XML_ERR_PUBID_REQUIRED
+XML_ERR_RESERVED_XML_NAME
+XML_ERR_SEPARATOR_REQUIRED
+XML_ERR_SPACE_REQUIRED
+XML_ERR_STANDALONE_VALUE
+XML_ERR_STRING_NOT_CLOSED
+XML_ERR_STRING_NOT_STARTED
+XML_ERR_TAG_NAME_MISMATCH
+XML_ERR_TAG_NOT_FINISHED
+XML_ERR_UNDECLARED_ENTITY
+XML_ERR_UNKNOWN_ENCODING
+XML_ERR_UNKNOWN_VERSION
+XML_ERR_UNPARSED_ENTITY
+XML_ERR_UNSUPPORTED_ENCODING
+XML_ERR_URI_FRAGMENT
+XML_ERR_URI_REQUIRED
+XML_ERR_USER_STOP
+XML_ERR_VALUE_REQUIRED
+XML_ERR_VERSION_MISMATCH
+XML_ERR_VERSION_MISSING
+XML_ERR_WARNING
+XML_ERR_XMLDECL_NOT_FINISHED
+XML_ERR_XMLDECL_NOT_STARTED
+XML_FROM_BUFFER
+XML_FROM_C14N
+XML_FROM_CATALOG
+XML_FROM_CHECK
+XML_FROM_DATATYPE
+XML_FROM_DTD
+XML_FROM_FTP
+XML_FROM_HTML
+XML_FROM_HTTP
+XML_FROM_I18N
+XML_FROM_IO
+XML_FROM_MEMORY
+XML_FROM_MODULE
+XML_FROM_NAMESPACE
+XML_FROM_NONE
+XML_FROM_OUTPUT
+XML_FROM_PARSER
+XML_FROM_REGEXP
+XML_FROM_RELAXNGP
+XML_FROM_RELAXNGV
+XML_FROM_SCHEMASP
+XML_FROM_SCHEMASV
+XML_FROM_SCHEMATRONV
+XML_FROM_TREE
+XML_FROM_URI
+XML_FROM_VALID
+XML_FROM_WRITER
+XML_FROM_XINCLUDE
+XML_FROM_XPATH
+XML_FROM_XPOINTER
+XML_FROM_XSLT
+XML_FTP_ACCNT
+XML_FTP_EPSV_ANSWER
+XML_FTP_PASV_ANSWER
+XML_FTP_URL_SYNTAX
+XML_HTML_STRUCURE_ERROR
+XML_HTML_UNKNOWN_TAG
+XML_HTTP_UNKNOWN_HOST
+XML_HTTP_URL_SYNTAX
+XML_HTTP_USE_IP
+XML_I18N_CONV_FAILED
+XML_I18N_EXCESS_HANDLER
+XML_I18N_NO_HANDLER
+XML_I18N_NO_NAME
+XML_I18N_NO_OUTPUT
+XML_IO_BUFFER_FULL
+XML_IO_EACCES
+XML_IO_EADDRINUSE
+XML_IO_EAFNOSUPPORT
+XML_IO_EAGAIN
+XML_IO_EALREADY
+XML_IO_EBADF
+XML_IO_EBADMSG
+XML_IO_EBUSY
+XML_IO_ECANCELED
+XML_IO_ECHILD
+XML_IO_ECONNREFUSED
+XML_IO_EDEADLK
+XML_IO_EDOM
+XML_IO_EEXIST
+XML_IO_EFAULT
+XML_IO_EFBIG
+XML_IO_EINPROGRESS
+XML_IO_EINTR
+XML_IO_EINVAL
+XML_IO_EIO
+XML_IO_EISCONN
+XML_IO_EISDIR
+XML_IO_EMFILE
+XML_IO_EMLINK
+XML_IO_EMSGSIZE
+XML_IO_ENAMETOOLONG
+XML_IO_ENCODER
+XML_IO_ENETUNREACH
+XML_IO_ENFILE
+XML_IO_ENODEV
+XML_IO_ENOENT
+XML_IO_ENOEXEC
+XML_IO_ENOLCK
+XML_IO_ENOMEM
+XML_IO_ENOSPC
+XML_IO_ENOSYS
+XML_IO_ENOTDIR
+XML_IO_ENOTEMPTY
+XML_IO_ENOTSOCK
+XML_IO_ENOTSUP
+XML_IO_ENOTTY
+XML_IO_ENXIO
+XML_IO_EPERM
+XML_IO_EPIPE
+XML_IO_ERANGE
+XML_IO_EROFS
+XML_IO_ESPIPE
+XML_IO_ESRCH
+XML_IO_ETIMEDOUT
+XML_IO_EXDEV
+XML_IO_FLUSH
+XML_IO_LOAD_ERROR
+XML_IO_NETWORK_ATTEMPT
+XML_IO_NO_INPUT
+XML_IO_UNKNOWN
+XML_IO_WRITE
+XML_MODULE_CLOSE
+XML_MODULE_OPEN
+XML_NS_ERR_ATTRIBUTE_REDEFINED
+XML_NS_ERR_COLON
+XML_NS_ERR_EMPTY
+XML_NS_ERR_QNAME
+XML_NS_ERR_UNDEFINED_NAMESPACE
+XML_NS_ERR_XML_NAMESPACE
+XML_REGEXP_COMPILE_ERROR
+XML_RNGP_ANYNAME_ATTR_ANCESTOR
+XML_RNGP_ATTRIBUTE_CHILDREN
+XML_RNGP_ATTRIBUTE_CONTENT
+XML_RNGP_ATTRIBUTE_EMPTY
+XML_RNGP_ATTRIBUTE_NOOP
+XML_RNGP_ATTR_CONFLICT
+XML_RNGP_CHOICE_CONTENT
+XML_RNGP_CHOICE_EMPTY
+XML_RNGP_CREATE_FAILURE
+XML_RNGP_DATA_CONTENT
+XML_RNGP_DEFINE_CREATE_FAILED
+XML_RNGP_DEFINE_EMPTY
+XML_RNGP_DEFINE_MISSING
+XML_RNGP_DEFINE_NAME_MISSING
+XML_RNGP_DEF_CHOICE_AND_INTERLEAVE
+XML_RNGP_ELEMENT_CONTENT
+XML_RNGP_ELEMENT_EMPTY
+XML_RNGP_ELEMENT_NAME
+XML_RNGP_ELEMENT_NO_CONTENT
+XML_RNGP_ELEM_CONTENT_EMPTY
+XML_RNGP_ELEM_CONTENT_ERROR
+XML_RNGP_ELEM_TEXT_CONFLICT
+XML_RNGP_EMPTY
+XML_RNGP_EMPTY_CONSTRUCT
+XML_RNGP_EMPTY_CONTENT
+XML_RNGP_EMPTY_NOT_EMPTY
+XML_RNGP_ERROR_TYPE_LIB
+XML_RNGP_EXCEPT_EMPTY
+XML_RNGP_EXCEPT_MISSING
+XML_RNGP_EXCEPT_MULTIPLE
+XML_RNGP_EXCEPT_NO_CONTENT
+XML_RNGP_EXTERNALREF_EMTPY
+XML_RNGP_EXTERNALREF_RECURSE
+XML_RNGP_EXTERNAL_REF_FAILURE
+XML_RNGP_FORBIDDEN_ATTRIBUTE
+XML_RNGP_FOREIGN_ELEMENT
+XML_RNGP_GRAMMAR_CONTENT
+XML_RNGP_GRAMMAR_EMPTY
+XML_RNGP_GRAMMAR_MISSING
+XML_RNGP_GRAMMAR_NO_START
+XML_RNGP_GROUP_ATTR_CONFLICT
+XML_RNGP_HREF_ERROR
+XML_RNGP_INCLUDE_EMPTY
+XML_RNGP_INCLUDE_FAILURE
+XML_RNGP_INCLUDE_RECURSE
+XML_RNGP_INTERLEAVE_ADD
+XML_RNGP_INTERLEAVE_CREATE_FAILED
+XML_RNGP_INTERLEAVE_EMPTY
+XML_RNGP_INTERLEAVE_NO_CONTENT
+XML_RNGP_INVALID_DEFINE_NAME
+XML_RNGP_INVALID_URI
+XML_RNGP_INVALID_VALUE
+XML_RNGP_MISSING_HREF
+XML_RNGP_NAME_MISSING
+XML_RNGP_NEED_COMBINE
+XML_RNGP_NOTALLOWED_NOT_EMPTY
+XML_RNGP_NSNAME_ATTR_ANCESTOR
+XML_RNGP_NSNAME_NO_NS
+XML_RNGP_PARAM_FORBIDDEN
+XML_RNGP_PARAM_NAME_MISSING
+XML_RNGP_PARENTREF_CREATE_FAILED
+XML_RNGP_PARENTREF_NAME_INVALID
+XML_RNGP_PARENTREF_NOT_EMPTY
+XML_RNGP_PARENTREF_NO_NAME
+XML_RNGP_PARENTREF_NO_PARENT
+XML_RNGP_PARSE_ERROR
+XML_RNGP_PAT_ANYNAME_EXCEPT_ANYNAME
+XML_RNGP_PAT_ATTR_ATTR
+XML_RNGP_PAT_ATTR_ELEM
+XML_RNGP_PAT_DATA_EXCEPT_ATTR
+XML_RNGP_PAT_DATA_EXCEPT_ELEM
+XML_RNGP_PAT_DATA_EXCEPT_EMPTY
+XML_RNGP_PAT_DATA_EXCEPT_GROUP
+XML_RNGP_PAT_DATA_EXCEPT_INTERLEAVE
+XML_RNGP_PAT_DATA_EXCEPT_LIST
+XML_RNGP_PAT_DATA_EXCEPT_ONEMORE
+XML_RNGP_PAT_DATA_EXCEPT_REF
+XML_RNGP_PAT_DATA_EXCEPT_TEXT
+XML_RNGP_PAT_LIST_ATTR
+XML_RNGP_PAT_LIST_ELEM
+XML_RNGP_PAT_LIST_INTERLEAVE
+XML_RNGP_PAT_LIST_LIST
+XML_RNGP_PAT_LIST_REF
+XML_RNGP_PAT_LIST_TEXT
+XML_RNGP_PAT_NSNAME_EXCEPT_ANYNAME
+XML_RNGP_PAT_NSNAME_EXCEPT_NSNAME
+XML_RNGP_PAT_ONEMORE_GROUP_ATTR
+XML_RNGP_PAT_ONEMORE_INTERLEAVE_ATTR
+XML_RNGP_PAT_START_ATTR
+XML_RNGP_PAT_START_DATA
+XML_RNGP_PAT_START_EMPTY
+XML_RNGP_PAT_START_GROUP
+XML_RNGP_PAT_START_INTERLEAVE
+XML_RNGP_PAT_START_LIST
+XML_RNGP_PAT_START_ONEMORE
+XML_RNGP_PAT_START_TEXT
+XML_RNGP_PAT_START_VALUE
+XML_RNGP_PREFIX_UNDEFINED
+XML_RNGP_REF_CREATE_FAILED
+XML_RNGP_REF_CYCLE
+XML_RNGP_REF_NAME_INVALID
+XML_RNGP_REF_NOT_EMPTY
+XML_RNGP_REF_NO_DEF
+XML_RNGP_REF_NO_NAME
+XML_RNGP_START_CHOICE_AND_INTERLEAVE
+XML_RNGP_START_CONTENT
+XML_RNGP_START_EMPTY
+XML_RNGP_START_MISSING
+XML_RNGP_TEXT_EXPECTED
+XML_RNGP_TEXT_HAS_CHILD
+XML_RNGP_TYPE_MISSING
+XML_RNGP_TYPE_NOT_FOUND
+XML_RNGP_TYPE_VALUE
+XML_RNGP_UNKNOWN_ATTRIBUTE
+XML_RNGP_UNKNOWN_COMBINE
+XML_RNGP_UNKNOWN_CONSTRUCT
+XML_RNGP_UNKNOWN_TYPE_LIB
+XML_RNGP_URI_FRAGMENT
+XML_RNGP_URI_NOT_ABSOLUTE
+XML_RNGP_VALUE_EMPTY
+XML_RNGP_VALUE_NO_CONTENT
+XML_RNGP_XMLNS_NAME
+XML_RNGP_XML_NS
+XML_SAVE_CHAR_INVALID
+XML_SAVE_NOT_UTF8
+XML_SAVE_NO_DOCTYPE
+XML_SAVE_UNKNOWN_ENCODING
+XML_SCHEMAP_AG_PROPS_CORRECT
+XML_SCHEMAP_ATTRFORMDEFAULT_VALUE
+XML_SCHEMAP_ATTRGRP_NONAME_NOREF
+XML_SCHEMAP_ATTR_NONAME_NOREF
+XML_SCHEMAP_AU_PROPS_CORRECT
+XML_SCHEMAP_AU_PROPS_CORRECT_2
+XML_SCHEMAP_A_PROPS_CORRECT_2
+XML_SCHEMAP_A_PROPS_CORRECT_3
+XML_SCHEMAP_COMPLEXTYPE_NONAME_NOREF
+XML_SCHEMAP_COS_ALL_LIMITED
+XML_SCHEMAP_COS_CT_EXTENDS_1_1
+XML_SCHEMAP_COS_CT_EXTENDS_1_2
+XML_SCHEMAP_COS_CT_EXTENDS_1_3
+XML_SCHEMAP_COS_ST_DERIVED_OK_2_1
+XML_SCHEMAP_COS_ST_DERIVED_OK_2_2
+XML_SCHEMAP_COS_ST_RESTRICTS_1_1
+XML_SCHEMAP_COS_ST_RESTRICTS_1_2
+XML_SCHEMAP_COS_ST_RESTRICTS_1_3_1
+XML_SCHEMAP_COS_ST_RESTRICTS_1_3_2
+XML_SCHEMAP_COS_ST_RESTRICTS_2_1
+XML_SCHEMAP_COS_ST_RESTRICTS_2_3_1_1
+XML_SCHEMAP_COS_ST_RESTRICTS_2_3_1_2
+XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_1
+XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_2
+XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_3
+XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_4
+XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_5
+XML_SCHEMAP_COS_ST_RESTRICTS_3_1
+XML_SCHEMAP_COS_ST_RESTRICTS_3_3_1
+XML_SCHEMAP_COS_ST_RESTRICTS_3_3_1_2
+XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_1
+XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_2
+XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_3
+XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_4
+XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_5
+XML_SCHEMAP_COS_VALID_DEFAULT_1
+XML_SCHEMAP_COS_VALID_DEFAULT_2_1
+XML_SCHEMAP_COS_VALID_DEFAULT_2_2_1
+XML_SCHEMAP_COS_VALID_DEFAULT_2_2_2
+XML_SCHEMAP_CT_PROPS_CORRECT_1
+XML_SCHEMAP_CT_PROPS_CORRECT_2
+XML_SCHEMAP_CT_PROPS_CORRECT_3
+XML_SCHEMAP_CT_PROPS_CORRECT_4
+XML_SCHEMAP_CT_PROPS_CORRECT_5
+XML_SCHEMAP_CVC_SIMPLE_TYPE
+XML_SCHEMAP_C_PROPS_CORRECT
+XML_SCHEMAP_DEF_AND_PREFIX
+XML_SCHEMAP_DERIVATION_OK_RESTRICTION_1
+XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_1
+XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_2
+XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_3
+XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_2
+XML_SCHEMAP_DERIVATION_OK_RESTRICTION_3
+XML_SCHEMAP_DERIVATION_OK_RESTRICTION_4_1
+XML_SCHEMAP_DERIVATION_OK_RESTRICTION_4_2
+XML_SCHEMAP_DERIVATION_OK_RESTRICTION_4_3
+XML_SCHEMAP_ELEMFORMDEFAULT_VALUE
+XML_SCHEMAP_ELEM_DEFAULT_FIXED
+XML_SCHEMAP_ELEM_NONAME_NOREF
+XML_SCHEMAP_EXTENSION_NO_BASE
+XML_SCHEMAP_E_PROPS_CORRECT_2
+XML_SCHEMAP_E_PROPS_CORRECT_3
+XML_SCHEMAP_E_PROPS_CORRECT_4
+XML_SCHEMAP_E_PROPS_CORRECT_5
+XML_SCHEMAP_E_PROPS_CORRECT_6
+XML_SCHEMAP_FACET_NO_VALUE
+XML_SCHEMAP_FAILED_BUILD_IMPORT
+XML_SCHEMAP_FAILED_LOAD
+XML_SCHEMAP_FAILED_PARSE
+XML_SCHEMAP_GROUP_NONAME_NOREF
+XML_SCHEMAP_IMPORT_NAMESPACE_NOT_URI
+XML_SCHEMAP_IMPORT_REDEFINE_NSNAME
+XML_SCHEMAP_IMPORT_SCHEMA_NOT_URI
+XML_SCHEMAP_INCLUDE_SCHEMA_NOT_URI
+XML_SCHEMAP_INCLUDE_SCHEMA_NO_URI
+XML_SCHEMAP_INTERNAL
+XML_SCHEMAP_INTERSECTION_NOT_EXPRESSIBLE
+XML_SCHEMAP_INVALID_ATTR_COMBINATION
+XML_SCHEMAP_INVALID_ATTR_INLINE_COMBINATION
+XML_SCHEMAP_INVALID_ATTR_NAME
+XML_SCHEMAP_INVALID_ATTR_USE
+XML_SCHEMAP_INVALID_BOOLEAN
+XML_SCHEMAP_INVALID_ENUM
+XML_SCHEMAP_INVALID_FACET
+XML_SCHEMAP_INVALID_FACET_VALUE
+XML_SCHEMAP_INVALID_MAXOCCURS
+XML_SCHEMAP_INVALID_MINOCCURS
+XML_SCHEMAP_INVALID_REF_AND_SUBTYPE
+XML_SCHEMAP_INVALID_WHITE_SPACE
+XML_SCHEMAP_MG_PROPS_CORRECT_1
+XML_SCHEMAP_MG_PROPS_CORRECT_2
+XML_SCHEMAP_MISSING_SIMPLETYPE_CHILD
+XML_SCHEMAP_NOATTR_NOREF
+XML_SCHEMAP_NOROOT
+XML_SCHEMAP_NOTATION_NO_NAME
+XML_SCHEMAP_NOTHING_TO_PARSE
+XML_SCHEMAP_NOTYPE_NOREF
+XML_SCHEMAP_NOT_DETERMINISTIC
+XML_SCHEMAP_NOT_SCHEMA
+XML_SCHEMAP_NO_XMLNS
+XML_SCHEMAP_NO_XSI
+XML_SCHEMAP_PREFIX_UNDEFINED
+XML_SCHEMAP_P_PROPS_CORRECT_1
+XML_SCHEMAP_P_PROPS_CORRECT_2_1
+XML_SCHEMAP_P_PROPS_CORRECT_2_2
+XML_SCHEMAP_RECURSIVE
+XML_SCHEMAP_REDEFINED_ATTR
+XML_SCHEMAP_REDEFINED_ATTRGROUP
+XML_SCHEMAP_REDEFINED_ELEMENT
+XML_SCHEMAP_REDEFINED_GROUP
+XML_SCHEMAP_REDEFINED_NOTATION
+XML_SCHEMAP_REDEFINED_TYPE
+XML_SCHEMAP_REF_AND_CONTENT
+XML_SCHEMAP_REF_AND_SUBTYPE
+XML_SCHEMAP_REGEXP_INVALID
+XML_SCHEMAP_RESTRICTION_NONAME_NOREF
+XML_SCHEMAP_S4S_ATTR_INVALID_VALUE
+XML_SCHEMAP_S4S_ATTR_MISSING
+XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED
+XML_SCHEMAP_S4S_ELEM_MISSING
+XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED
+XML_SCHEMAP_SIMPLETYPE_NONAME
+XML_SCHEMAP_SRC_ATTRIBUTE_1
+XML_SCHEMAP_SRC_ATTRIBUTE_2
+XML_SCHEMAP_SRC_ATTRIBUTE_3_1
+XML_SCHEMAP_SRC_ATTRIBUTE_3_2
+XML_SCHEMAP_SRC_ATTRIBUTE_4
+XML_SCHEMAP_SRC_ATTRIBUTE_GROUP_1
+XML_SCHEMAP_SRC_ATTRIBUTE_GROUP_2
+XML_SCHEMAP_SRC_ATTRIBUTE_GROUP_3
+XML_SCHEMAP_SRC_CT_1
+XML_SCHEMAP_SRC_ELEMENT_1
+XML_SCHEMAP_SRC_ELEMENT_2_1
+XML_SCHEMAP_SRC_ELEMENT_2_2
+XML_SCHEMAP_SRC_ELEMENT_3
+XML_SCHEMAP_SRC_IMPORT
+XML_SCHEMAP_SRC_IMPORT_1_1
+XML_SCHEMAP_SRC_IMPORT_1_2
+XML_SCHEMAP_SRC_IMPORT_2
+XML_SCHEMAP_SRC_IMPORT_2_1
+XML_SCHEMAP_SRC_IMPORT_2_2
+XML_SCHEMAP_SRC_IMPORT_3_1
+XML_SCHEMAP_SRC_IMPORT_3_2
+XML_SCHEMAP_SRC_INCLUDE
+XML_SCHEMAP_SRC_LIST_ITEMTYPE_OR_SIMPLETYPE
+XML_SCHEMAP_SRC_REDEFINE
+XML_SCHEMAP_SRC_RESOLVE
+XML_SCHEMAP_SRC_RESTRICTION_BASE_OR_SIMPLETYPE
+XML_SCHEMAP_SRC_SIMPLE_TYPE_1
+XML_SCHEMAP_SRC_SIMPLE_TYPE_2
+XML_SCHEMAP_SRC_SIMPLE_TYPE_3
+XML_SCHEMAP_SRC_SIMPLE_TYPE_4
+XML_SCHEMAP_SRC_UNION_MEMBERTYPES_OR_SIMPLETYPES
+XML_SCHEMAP_ST_PROPS_CORRECT_1
+XML_SCHEMAP_ST_PROPS_CORRECT_2
+XML_SCHEMAP_ST_PROPS_CORRECT_3
+XML_SCHEMAP_SUPERNUMEROUS_LIST_ITEM_TYPE
+XML_SCHEMAP_TYPE_AND_SUBTYPE
+XML_SCHEMAP_UNION_NOT_EXPRESSIBLE
+XML_SCHEMAP_UNKNOWN_ALL_CHILD
+XML_SCHEMAP_UNKNOWN_ANYATTRIBUTE_CHILD
+XML_SCHEMAP_UNKNOWN_ATTRGRP_CHILD
+XML_SCHEMAP_UNKNOWN_ATTRIBUTE_GROUP
+XML_SCHEMAP_UNKNOWN_ATTR_CHILD
+XML_SCHEMAP_UNKNOWN_BASE_TYPE
+XML_SCHEMAP_UNKNOWN_CHOICE_CHILD
+XML_SCHEMAP_UNKNOWN_COMPLEXCONTENT_CHILD
+XML_SCHEMAP_UNKNOWN_COMPLEXTYPE_CHILD
+XML_SCHEMAP_UNKNOWN_ELEM_CHILD
+XML_SCHEMAP_UNKNOWN_EXTENSION_CHILD
+XML_SCHEMAP_UNKNOWN_FACET_CHILD
+XML_SCHEMAP_UNKNOWN_FACET_TYPE
+XML_SCHEMAP_UNKNOWN_GROUP_CHILD
+XML_SCHEMAP_UNKNOWN_IMPORT_CHILD
+XML_SCHEMAP_UNKNOWN_INCLUDE_CHILD
+XML_SCHEMAP_UNKNOWN_LIST_CHILD
+XML_SCHEMAP_UNKNOWN_MEMBER_TYPE
+XML_SCHEMAP_UNKNOWN_NOTATION_CHILD
+XML_SCHEMAP_UNKNOWN_PREFIX
+XML_SCHEMAP_UNKNOWN_PROCESSCONTENT_CHILD
+XML_SCHEMAP_UNKNOWN_REF
+XML_SCHEMAP_UNKNOWN_RESTRICTION_CHILD
+XML_SCHEMAP_UNKNOWN_SCHEMAS_CHILD
+XML_SCHEMAP_UNKNOWN_SEQUENCE_CHILD
+XML_SCHEMAP_UNKNOWN_SIMPLECONTENT_CHILD
+XML_SCHEMAP_UNKNOWN_SIMPLETYPE_CHILD
+XML_SCHEMAP_UNKNOWN_TYPE
+XML_SCHEMAP_UNKNOWN_UNION_CHILD
+XML_SCHEMAP_WARN_ATTR_POINTLESS_PROH
+XML_SCHEMAP_WARN_ATTR_REDECL_PROH
+XML_SCHEMAP_WARN_SKIP_SCHEMA
+XML_SCHEMAP_WARN_UNLOCATED_SCHEMA
+XML_SCHEMAP_WILDCARD_INVALID_NS_MEMBER
+XML_SCHEMATRONV_ASSERT
+XML_SCHEMATRONV_REPORT
+XML_SCHEMAV_ATTRINVALID
+XML_SCHEMAV_ATTRUNKNOWN
+XML_SCHEMAV_CONSTRUCT
+XML_SCHEMAV_CVC_ATTRIBUTE_1
+XML_SCHEMAV_CVC_ATTRIBUTE_2
+XML_SCHEMAV_CVC_ATTRIBUTE_3
+XML_SCHEMAV_CVC_ATTRIBUTE_4
+XML_SCHEMAV_CVC_AU
+XML_SCHEMAV_CVC_COMPLEX_TYPE_1
+XML_SCHEMAV_CVC_COMPLEX_TYPE_2_1
+XML_SCHEMAV_CVC_COMPLEX_TYPE_2_2
+XML_SCHEMAV_CVC_COMPLEX_TYPE_2_3
+XML_SCHEMAV_CVC_COMPLEX_TYPE_2_4
+XML_SCHEMAV_CVC_COMPLEX_TYPE_3_1
+XML_SCHEMAV_CVC_COMPLEX_TYPE_3_2_1
+XML_SCHEMAV_CVC_COMPLEX_TYPE_3_2_2
+XML_SCHEMAV_CVC_COMPLEX_TYPE_4
+XML_SCHEMAV_CVC_COMPLEX_TYPE_5_1
+XML_SCHEMAV_CVC_COMPLEX_TYPE_5_2
+XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_1
+XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_2
+XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_3
+XML_SCHEMAV_CVC_ELT_1
+XML_SCHEMAV_CVC_ELT_2
+XML_SCHEMAV_CVC_ELT_3_1
+XML_SCHEMAV_CVC_ELT_3_2_1
+XML_SCHEMAV_CVC_ELT_3_2_2
+XML_SCHEMAV_CVC_ELT_4_1
+XML_SCHEMAV_CVC_ELT_4_2
+XML_SCHEMAV_CVC_ELT_4_3
+XML_SCHEMAV_CVC_ELT_5_1_1
+XML_SCHEMAV_CVC_ELT_5_1_2
+XML_SCHEMAV_CVC_ELT_5_2_1
+XML_SCHEMAV_CVC_ELT_5_2_2_1
+XML_SCHEMAV_CVC_ELT_5_2_2_2_1
+XML_SCHEMAV_CVC_ELT_5_2_2_2_2
+XML_SCHEMAV_CVC_ELT_6
+XML_SCHEMAV_CVC_ELT_7
+XML_SCHEMAV_CVC_ENUMERATION_VALID
+XML_SCHEMAV_CVC_FACET_VALID
+XML_SCHEMAV_CVC_FRACTIONDIGITS_VALID
+XML_SCHEMAV_CVC_IDC
+XML_SCHEMAV_CVC_LENGTH_VALID
+XML_SCHEMAV_CVC_MAXEXCLUSIVE_VALID
+XML_SCHEMAV_CVC_MAXINCLUSIVE_VALID
+XML_SCHEMAV_CVC_MAXLENGTH_VALID
+XML_SCHEMAV_CVC_MINEXCLUSIVE_VALID
+XML_SCHEMAV_CVC_MININCLUSIVE_VALID
+XML_SCHEMAV_CVC_MINLENGTH_VALID
+XML_SCHEMAV_CVC_PATTERN_VALID
+XML_SCHEMAV_CVC_TOTALDIGITS_VALID
+XML_SCHEMAV_CVC_TYPE_1
+XML_SCHEMAV_CVC_TYPE_2
+XML_SCHEMAV_CVC_TYPE_3_1_1
+XML_SCHEMAV_CVC_TYPE_3_1_2
+XML_SCHEMAV_CVC_WILDCARD
+XML_SCHEMAV_DOCUMENT_ELEMENT_MISSING
+XML_SCHEMAV_ELEMCONT
+XML_SCHEMAV_ELEMENT_CONTENT
+XML_SCHEMAV_EXTRACONTENT
+XML_SCHEMAV_FACET
+XML_SCHEMAV_HAVEDEFAULT
+XML_SCHEMAV_INTERNAL
+XML_SCHEMAV_INVALIDATTR
+XML_SCHEMAV_INVALIDELEM
+XML_SCHEMAV_ISABSTRACT
+XML_SCHEMAV_MISC
+XML_SCHEMAV_MISSING
+XML_SCHEMAV_NOROLLBACK
+XML_SCHEMAV_NOROOT
+XML_SCHEMAV_NOTDETERMINIST
+XML_SCHEMAV_NOTEMPTY
+XML_SCHEMAV_NOTNILLABLE
+XML_SCHEMAV_NOTSIMPLE
+XML_SCHEMAV_NOTTOPLEVEL
+XML_SCHEMAV_NOTYPE
+XML_SCHEMAV_UNDECLAREDELEM
+XML_SCHEMAV_VALUE
+XML_SCHEMAV_WRONGELEM
+XML_TREE_INVALID_DEC
+XML_TREE_INVALID_HEX
+XML_TREE_NOT_UTF8
+XML_TREE_UNTERMINATED_ENTITY
+XML_WAR_CATALOG_PI
+XML_WAR_ENTITY_REDEFINED
+XML_WAR_LANG_VALUE
+XML_WAR_NS_COLUMN
+XML_WAR_NS_URI
+XML_WAR_NS_URI_RELATIVE
+XML_WAR_SPACE_VALUE
+XML_WAR_UNDECLARED_ENTITY
+XML_WAR_UNKNOWN_VERSION
+XML_XINCLUDE_BUILD_FAILED
+XML_XINCLUDE_DEPRECATED_NS
+XML_XINCLUDE_ENTITY_DEF_MISMATCH
+XML_XINCLUDE_FALLBACKS_IN_INCLUDE
+XML_XINCLUDE_FALLBACK_NOT_IN_INCLUDE
+XML_XINCLUDE_FRAGMENT_ID
+XML_XINCLUDE_HREF_URI
+XML_XINCLUDE_INCLUDE_IN_INCLUDE
+XML_XINCLUDE_INVALID_CHAR
+XML_XINCLUDE_MULTIPLE_ROOT
+XML_XINCLUDE_NO_FALLBACK
+XML_XINCLUDE_NO_HREF
+XML_XINCLUDE_PARSE_VALUE
+XML_XINCLUDE_RECURSION
+XML_XINCLUDE_TEXT_DOCUMENT
+XML_XINCLUDE_TEXT_FRAGMENT
+XML_XINCLUDE_UNKNOWN_ENCODING
+XML_XINCLUDE_XPTR_FAILED
+XML_XINCLUDE_XPTR_RESULT
+XML_XPATH_ENCODING_ERROR
+XML_XPATH_EXPRESSION_OK
+XML_XPATH_EXPR_ERROR
+XML_XPATH_INVALID_ARITY
+XML_XPATH_INVALID_CHAR_ERROR
+XML_XPATH_INVALID_CTXT_POSITION
+XML_XPATH_INVALID_CTXT_SIZE
+XML_XPATH_INVALID_OPERAND
+XML_XPATH_INVALID_PREDICATE_ERROR
+XML_XPATH_INVALID_TYPE
+XML_XPATH_MEMORY_ERROR
+XML_XPATH_NUMBER_ERROR
+XML_XPATH_START_LITERAL_ERROR
+XML_XPATH_UNCLOSED_ERROR
+XML_XPATH_UNDEF_PREFIX_ERROR
+XML_XPATH_UNDEF_VARIABLE_ERROR
+XML_XPATH_UNFINISHED_LITERAL_ERROR
+XML_XPATH_UNKNOWN_FUNC_ERROR
+XML_XPATH_VARIABLE_REF_ERROR
+XML_XPTR_CHILDSEQ_START
+XML_XPTR_EVAL_FAILED
+XML_XPTR_EXTRA_OBJECTS
+XML_XPTR_RESOURCE_ERROR
+XML_XPTR_SUB_RESOURCE_ERROR
+XML_XPTR_SYNTAX_ERROR
+XML_XPTR_UNKNOWN_SCHEME
+_xmlError
+initGenericErrorDefaultFunc
+xmlCopyError
+xmlCtxtGetLastError
+xmlCtxtResetLastError
+xmlError
+xmlErrorDomain
+xmlErrorLevel
+xmlErrorPtr
+xmlGenericErrorFunc
+xmlGetLastError
+xmlParserError
+xmlParserErrors
+xmlParserPrintFileContext
+xmlParserPrintFileInfo
+xmlParserValidityError
+xmlParserValidityWarning
+xmlParserWarning
+xmlResetError
+xmlResetLastError
+xmlSetGenericErrorFunc
+xmlSetStructuredErrorFunc
+xmlStructuredErrorFunc
+

Module xmlexports:

LIBXML_DLL_IMPORT
+XMLCALL
+XMLCDECL
+XMLPUBFUN
+XMLPUBVAR
+_REENTRANT
+

Module xmlmemory:

DEBUG_MEMORY
+xmlCleanupMemory
+xmlFreeFunc
+xmlGcMemGet
+xmlGcMemSetup
+xmlInitMemory
+xmlMalloc
+xmlMallocAtomic
+xmlMallocAtomicLoc
+xmlMallocFunc
+xmlMallocLoc
+xmlMemBlocks
+xmlMemDisplay
+xmlMemDisplayLast
+xmlMemFree
+xmlMemGet
+xmlMemMalloc
+xmlMemRealloc
+xmlMemSetup
+xmlMemShow
+xmlMemStrdup
+xmlMemStrdupLoc
+xmlMemUsed
+xmlMemoryDump
+xmlMemoryStrdup
+xmlRealloc
+xmlReallocFunc
+xmlReallocLoc
+xmlStrdupFunc
+

Module xmlmodule:

XML_MODULE_LAZY
+XML_MODULE_LOCAL
+xmlModule
+xmlModuleClose
+xmlModuleFree
+xmlModuleOpen
+xmlModuleOption
+xmlModulePtr
+xmlModuleSymbol
+

Module xmlreader:

XML_PARSER_DEFAULTATTRS
+XML_PARSER_LOADDTD
+XML_PARSER_SEVERITY_ERROR
+XML_PARSER_SEVERITY_VALIDITY_ERROR
+XML_PARSER_SEVERITY_VALIDITY_WARNING
+XML_PARSER_SEVERITY_WARNING
+XML_PARSER_SUBST_ENTITIES
+XML_PARSER_VALIDATE
+XML_READER_TYPE_ATTRIBUTE
+XML_READER_TYPE_CDATA
+XML_READER_TYPE_COMMENT
+XML_READER_TYPE_DOCUMENT
+XML_READER_TYPE_DOCUMENT_FRAGMENT
+XML_READER_TYPE_DOCUMENT_TYPE
+XML_READER_TYPE_ELEMENT
+XML_READER_TYPE_END_ELEMENT
+XML_READER_TYPE_END_ENTITY
+XML_READER_TYPE_ENTITY
+XML_READER_TYPE_ENTITY_REFERENCE
+XML_READER_TYPE_NONE
+XML_READER_TYPE_NOTATION
+XML_READER_TYPE_PROCESSING_INSTRUCTION
+XML_READER_TYPE_SIGNIFICANT_WHITESPACE
+XML_READER_TYPE_TEXT
+XML_READER_TYPE_WHITESPACE
+XML_READER_TYPE_XML_DECLARATION
+XML_TEXTREADER_MODE_CLOSED
+XML_TEXTREADER_MODE_EOF
+XML_TEXTREADER_MODE_ERROR
+XML_TEXTREADER_MODE_INITIAL
+XML_TEXTREADER_MODE_INTERACTIVE
+XML_TEXTREADER_MODE_READING
+xmlFreeTextReader
+xmlNewTextReader
+xmlNewTextReaderFilename
+xmlParserProperties
+xmlParserSeverities
+xmlReaderForDoc
+xmlReaderForFd
+xmlReaderForFile
+xmlReaderForIO
+xmlReaderForMemory
+xmlReaderNewDoc
+xmlReaderNewFd
+xmlReaderNewFile
+xmlReaderNewIO
+xmlReaderNewMemory
+xmlReaderNewWalker
+xmlReaderTypes
+xmlReaderWalker
+xmlTextReader
+xmlTextReaderAttributeCount
+xmlTextReaderBaseUri
+xmlTextReaderByteConsumed
+xmlTextReaderClose
+xmlTextReaderConstBaseUri
+xmlTextReaderConstEncoding
+xmlTextReaderConstLocalName
+xmlTextReaderConstName
+xmlTextReaderConstNamespaceUri
+xmlTextReaderConstPrefix
+xmlTextReaderConstString
+xmlTextReaderConstValue
+xmlTextReaderConstXmlLang
+xmlTextReaderConstXmlVersion
+xmlTextReaderCurrentDoc
+xmlTextReaderCurrentNode
+xmlTextReaderDepth
+xmlTextReaderErrorFunc
+xmlTextReaderExpand
+xmlTextReaderGetAttribute
+xmlTextReaderGetAttributeNo
+xmlTextReaderGetAttributeNs
+xmlTextReaderGetErrorHandler
+xmlTextReaderGetParserColumnNumber
+xmlTextReaderGetParserLineNumber
+xmlTextReaderGetParserProp
+xmlTextReaderGetRemainder
+xmlTextReaderHasAttributes
+xmlTextReaderHasValue
+xmlTextReaderIsDefault
+xmlTextReaderIsEmptyElement
+xmlTextReaderIsNamespaceDecl
+xmlTextReaderIsValid
+xmlTextReaderLocalName
+xmlTextReaderLocatorBaseURI
+xmlTextReaderLocatorLineNumber
+xmlTextReaderLocatorPtr
+xmlTextReaderLookupNamespace
+xmlTextReaderMode
+xmlTextReaderMoveToAttribute
+xmlTextReaderMoveToAttributeNo
+xmlTextReaderMoveToAttributeNs
+xmlTextReaderMoveToElement
+xmlTextReaderMoveToFirstAttribute
+xmlTextReaderMoveToNextAttribute
+xmlTextReaderName
+xmlTextReaderNamespaceUri
+xmlTextReaderNext
+xmlTextReaderNextSibling
+xmlTextReaderNodeType
+xmlTextReaderNormalization
+xmlTextReaderPrefix
+xmlTextReaderPreserve
+xmlTextReaderPreservePattern
+xmlTextReaderPtr
+xmlTextReaderQuoteChar
+xmlTextReaderRead
+xmlTextReaderReadAttributeValue
+xmlTextReaderReadInnerXml
+xmlTextReaderReadOuterXml
+xmlTextReaderReadState
+xmlTextReaderReadString
+xmlTextReaderRelaxNGSetSchema
+xmlTextReaderRelaxNGValidate
+xmlTextReaderRelaxNGValidateCtxt
+xmlTextReaderSchemaValidate
+xmlTextReaderSchemaValidateCtxt
+xmlTextReaderSetErrorHandler
+xmlTextReaderSetParserProp
+xmlTextReaderSetSchema
+xmlTextReaderSetStructuredErrorHandler
+xmlTextReaderSetup
+xmlTextReaderStandalone
+xmlTextReaderValue
+xmlTextReaderXmlLang
+

Module xmlregexp:

XML_EXP_ATOM
+XML_EXP_COUNT
+XML_EXP_EMPTY
+XML_EXP_FORBID
+XML_EXP_OR
+XML_EXP_SEQ
+emptyExp
+forbiddenExp
+xmlExpCtxt
+xmlExpCtxtNbCons
+xmlExpCtxtNbNodes
+xmlExpCtxtPtr
+xmlExpDump
+xmlExpExpDerive
+xmlExpFree
+xmlExpFreeCtxt
+xmlExpGetLanguage
+xmlExpGetStart
+xmlExpIsNillable
+xmlExpMaxToken
+xmlExpNewAtom
+xmlExpNewCtxt
+xmlExpNewOr
+xmlExpNewRange
+xmlExpNewSeq
+xmlExpNode
+xmlExpNodePtr
+xmlExpNodeType
+xmlExpParse
+xmlExpRef
+xmlExpStringDerive
+xmlExpSubsume
+xmlRegExecCallbacks
+xmlRegExecCtxt
+xmlRegExecCtxtPtr
+xmlRegExecErrInfo
+xmlRegExecNextValues
+xmlRegExecPushString
+xmlRegExecPushString2
+xmlRegFreeExecCtxt
+xmlRegFreeRegexp
+xmlRegNewExecCtxt
+xmlRegexp
+xmlRegexpCompile
+xmlRegexpExec
+xmlRegexpIsDeterminist
+xmlRegexpPrint
+xmlRegexpPtr
+

Module xmlsave:

XML_SAVE_AS_HTML
+XML_SAVE_AS_XML
+XML_SAVE_FORMAT
+XML_SAVE_NO_DECL
+XML_SAVE_NO_EMPTY
+XML_SAVE_NO_XHTML
+XML_SAVE_WSNONSIG
+XML_SAVE_XHTML
+xmlSaveClose
+xmlSaveCtxt
+xmlSaveCtxtPtr
+xmlSaveDoc
+xmlSaveFlush
+xmlSaveOption
+xmlSaveSetAttrEscape
+xmlSaveSetEscape
+xmlSaveToBuffer
+xmlSaveToFd
+xmlSaveToFilename
+xmlSaveToIO
+xmlSaveTree
+

Module xmlschemas:

XML_SCHEMAS_ERR_
+XML_SCHEMAS_ERR_ATTRINVALID
+XML_SCHEMAS_ERR_ATTRUNKNOWN
+XML_SCHEMAS_ERR_CONSTRUCT
+XML_SCHEMAS_ERR_ELEMCONT
+XML_SCHEMAS_ERR_EXTRACONTENT
+XML_SCHEMAS_ERR_FACET
+XML_SCHEMAS_ERR_HAVEDEFAULT
+XML_SCHEMAS_ERR_INTERNAL
+XML_SCHEMAS_ERR_INVALIDATTR
+XML_SCHEMAS_ERR_INVALIDELEM
+XML_SCHEMAS_ERR_ISABSTRACT
+XML_SCHEMAS_ERR_MISSING
+XML_SCHEMAS_ERR_NOROLLBACK
+XML_SCHEMAS_ERR_NOROOT
+XML_SCHEMAS_ERR_NOTDETERMINIST
+XML_SCHEMAS_ERR_NOTEMPTY
+XML_SCHEMAS_ERR_NOTNILLABLE
+XML_SCHEMAS_ERR_NOTSIMPLE
+XML_SCHEMAS_ERR_NOTTOPLEVEL
+XML_SCHEMAS_ERR_NOTYPE
+XML_SCHEMAS_ERR_OK
+XML_SCHEMAS_ERR_UNDECLAREDELEM
+XML_SCHEMAS_ERR_VALUE
+XML_SCHEMAS_ERR_WRONGELEM
+XML_SCHEMAS_ERR_XXX
+XML_SCHEMA_VAL_VC_I_CREATE
+xmlSchema
+xmlSchemaDump
+xmlSchemaFree
+xmlSchemaFreeParserCtxt
+xmlSchemaFreeValidCtxt
+xmlSchemaGetParserErrors
+xmlSchemaGetValidErrors
+xmlSchemaIsValid
+xmlSchemaNewDocParserCtxt
+xmlSchemaNewMemParserCtxt
+xmlSchemaNewParserCtxt
+xmlSchemaNewValidCtxt
+xmlSchemaParse
+xmlSchemaParserCtxt
+xmlSchemaParserCtxtPtr
+xmlSchemaPtr
+xmlSchemaSAXPlug
+xmlSchemaSAXPlugPtr
+xmlSchemaSAXPlugStruct
+xmlSchemaSAXUnplug
+xmlSchemaSetParserErrors
+xmlSchemaSetParserStructuredErrors
+xmlSchemaSetValidErrors
+xmlSchemaSetValidOptions
+xmlSchemaSetValidStructuredErrors
+xmlSchemaValidCtxt
+xmlSchemaValidCtxtGetOptions
+xmlSchemaValidCtxtGetParserCtxt
+xmlSchemaValidCtxtPtr
+xmlSchemaValidError
+xmlSchemaValidOption
+xmlSchemaValidateDoc
+xmlSchemaValidateFile
+xmlSchemaValidateOneElement
+xmlSchemaValidateSetFilename
+xmlSchemaValidateSetLocator
+xmlSchemaValidateStream
+xmlSchemaValidityErrorFunc
+xmlSchemaValidityLocatorFunc
+xmlSchemaValidityWarningFunc
+

Module xmlschemastypes:

XML_SCHEMA_WHITESPACE_COLLAPSE
+XML_SCHEMA_WHITESPACE_PRESERVE
+XML_SCHEMA_WHITESPACE_REPLACE
+XML_SCHEMA_WHITESPACE_UNKNOWN
+xmlSchemaCheckFacet
+xmlSchemaCleanupTypes
+xmlSchemaCollapseString
+xmlSchemaCompareValues
+xmlSchemaCompareValuesWhtsp
+xmlSchemaCopyValue
+xmlSchemaFreeFacet
+xmlSchemaFreeValue
+xmlSchemaGetBuiltInListSimpleTypeItemType
+xmlSchemaGetBuiltInType
+xmlSchemaGetCanonValue
+xmlSchemaGetCanonValueWhtsp
+xmlSchemaGetFacetValueAsULong
+xmlSchemaGetPredefinedType
+xmlSchemaGetValType
+xmlSchemaInitTypes
+xmlSchemaIsBuiltInTypeFacet
+xmlSchemaNewFacet
+xmlSchemaNewNOTATIONValue
+xmlSchemaNewQNameValue
+xmlSchemaNewStringValue
+xmlSchemaValPredefTypeNode
+xmlSchemaValPredefTypeNodeNoNorm
+xmlSchemaValidateFacet
+xmlSchemaValidateFacetWhtsp
+xmlSchemaValidateLengthFacet
+xmlSchemaValidateLengthFacetWhtsp
+xmlSchemaValidateListSimpleTypeFacet
+xmlSchemaValidatePredefinedType
+xmlSchemaValueAppend
+xmlSchemaValueGetAsBoolean
+xmlSchemaValueGetAsString
+xmlSchemaValueGetNext
+xmlSchemaWhiteSpaceReplace
+xmlSchemaWhitespaceValueType
+

Module xmlstring:

BAD_CAST
+xmlChar
+xmlCharStrdup
+xmlCharStrndup
+xmlCheckUTF8
+xmlGetUTF8Char
+xmlStrEqual
+xmlStrPrintf
+xmlStrQEqual
+xmlStrVPrintf
+xmlStrcasecmp
+xmlStrcasestr
+xmlStrcat
+xmlStrchr
+xmlStrcmp
+xmlStrdup
+xmlStrlen
+xmlStrncasecmp
+xmlStrncat
+xmlStrncatNew
+xmlStrncmp
+xmlStrndup
+xmlStrstr
+xmlStrsub
+xmlUTF8Charcmp
+xmlUTF8Size
+xmlUTF8Strlen
+xmlUTF8Strloc
+xmlUTF8Strndup
+xmlUTF8Strpos
+xmlUTF8Strsize
+xmlUTF8Strsub
+

Module xmlunicode:

xmlUCSIsAegeanNumbers
+xmlUCSIsAlphabeticPresentationForms
+xmlUCSIsArabic
+xmlUCSIsArabicPresentationFormsA
+xmlUCSIsArabicPresentationFormsB
+xmlUCSIsArmenian
+xmlUCSIsArrows
+xmlUCSIsBasicLatin
+xmlUCSIsBengali
+xmlUCSIsBlock
+xmlUCSIsBlockElements
+xmlUCSIsBopomofo
+xmlUCSIsBopomofoExtended
+xmlUCSIsBoxDrawing
+xmlUCSIsBraillePatterns
+xmlUCSIsBuhid
+xmlUCSIsByzantineMusicalSymbols
+xmlUCSIsCJKCompatibility
+xmlUCSIsCJKCompatibilityForms
+xmlUCSIsCJKCompatibilityIdeographs
+xmlUCSIsCJKCompatibilityIdeographsSupplement
+xmlUCSIsCJKRadicalsSupplement
+xmlUCSIsCJKSymbolsandPunctuation
+xmlUCSIsCJKUnifiedIdeographs
+xmlUCSIsCJKUnifiedIdeographsExtensionA
+xmlUCSIsCJKUnifiedIdeographsExtensionB
+xmlUCSIsCat
+xmlUCSIsCatC
+xmlUCSIsCatCc
+xmlUCSIsCatCf
+xmlUCSIsCatCo
+xmlUCSIsCatCs
+xmlUCSIsCatL
+xmlUCSIsCatLl
+xmlUCSIsCatLm
+xmlUCSIsCatLo
+xmlUCSIsCatLt
+xmlUCSIsCatLu
+xmlUCSIsCatM
+xmlUCSIsCatMc
+xmlUCSIsCatMe
+xmlUCSIsCatMn
+xmlUCSIsCatN
+xmlUCSIsCatNd
+xmlUCSIsCatNl
+xmlUCSIsCatNo
+xmlUCSIsCatP
+xmlUCSIsCatPc
+xmlUCSIsCatPd
+xmlUCSIsCatPe
+xmlUCSIsCatPf
+xmlUCSIsCatPi
+xmlUCSIsCatPo
+xmlUCSIsCatPs
+xmlUCSIsCatS
+xmlUCSIsCatSc
+xmlUCSIsCatSk
+xmlUCSIsCatSm
+xmlUCSIsCatSo
+xmlUCSIsCatZ
+xmlUCSIsCatZl
+xmlUCSIsCatZp
+xmlUCSIsCatZs
+xmlUCSIsCherokee
+xmlUCSIsCombiningDiacriticalMarks
+xmlUCSIsCombiningDiacriticalMarksforSymbols
+xmlUCSIsCombiningHalfMarks
+xmlUCSIsCombiningMarksforSymbols
+xmlUCSIsControlPictures
+xmlUCSIsCurrencySymbols
+xmlUCSIsCypriotSyllabary
+xmlUCSIsCyrillic
+xmlUCSIsCyrillicSupplement
+xmlUCSIsDeseret
+xmlUCSIsDevanagari
+xmlUCSIsDingbats
+xmlUCSIsEnclosedAlphanumerics
+xmlUCSIsEnclosedCJKLettersandMonths
+xmlUCSIsEthiopic
+xmlUCSIsGeneralPunctuation
+xmlUCSIsGeometricShapes
+xmlUCSIsGeorgian
+xmlUCSIsGothic
+xmlUCSIsGreek
+xmlUCSIsGreekExtended
+xmlUCSIsGreekandCoptic
+xmlUCSIsGujarati
+xmlUCSIsGurmukhi
+xmlUCSIsHalfwidthandFullwidthForms
+xmlUCSIsHangulCompatibilityJamo
+xmlUCSIsHangulJamo
+xmlUCSIsHangulSyllables
+xmlUCSIsHanunoo
+xmlUCSIsHebrew
+xmlUCSIsHighPrivateUseSurrogates
+xmlUCSIsHighSurrogates
+xmlUCSIsHiragana
+xmlUCSIsIPAExtensions
+xmlUCSIsIdeographicDescriptionCharacters
+xmlUCSIsKanbun
+xmlUCSIsKangxiRadicals
+xmlUCSIsKannada
+xmlUCSIsKatakana
+xmlUCSIsKatakanaPhoneticExtensions
+xmlUCSIsKhmer
+xmlUCSIsKhmerSymbols
+xmlUCSIsLao
+xmlUCSIsLatin1Supplement
+xmlUCSIsLatinExtendedA
+xmlUCSIsLatinExtendedAdditional
+xmlUCSIsLatinExtendedB
+xmlUCSIsLetterlikeSymbols
+xmlUCSIsLimbu
+xmlUCSIsLinearBIdeograms
+xmlUCSIsLinearBSyllabary
+xmlUCSIsLowSurrogates
+xmlUCSIsMalayalam
+xmlUCSIsMathematicalAlphanumericSymbols
+xmlUCSIsMathematicalOperators
+xmlUCSIsMiscellaneousMathematicalSymbolsA
+xmlUCSIsMiscellaneousMathematicalSymbolsB
+xmlUCSIsMiscellaneousSymbols
+xmlUCSIsMiscellaneousSymbolsandArrows
+xmlUCSIsMiscellaneousTechnical
+xmlUCSIsMongolian
+xmlUCSIsMusicalSymbols
+xmlUCSIsMyanmar
+xmlUCSIsNumberForms
+xmlUCSIsOgham
+xmlUCSIsOldItalic
+xmlUCSIsOpticalCharacterRecognition
+xmlUCSIsOriya
+xmlUCSIsOsmanya
+xmlUCSIsPhoneticExtensions
+xmlUCSIsPrivateUse
+xmlUCSIsPrivateUseArea
+xmlUCSIsRunic
+xmlUCSIsShavian
+xmlUCSIsSinhala
+xmlUCSIsSmallFormVariants
+xmlUCSIsSpacingModifierLetters
+xmlUCSIsSpecials
+xmlUCSIsSuperscriptsandSubscripts
+xmlUCSIsSupplementalArrowsA
+xmlUCSIsSupplementalArrowsB
+xmlUCSIsSupplementalMathematicalOperators
+xmlUCSIsSupplementaryPrivateUseAreaA
+xmlUCSIsSupplementaryPrivateUseAreaB
+xmlUCSIsSyriac
+xmlUCSIsTagalog
+xmlUCSIsTagbanwa
+xmlUCSIsTags
+xmlUCSIsTaiLe
+xmlUCSIsTaiXuanJingSymbols
+xmlUCSIsTamil
+xmlUCSIsTelugu
+xmlUCSIsThaana
+xmlUCSIsThai
+xmlUCSIsTibetan
+xmlUCSIsUgaritic
+xmlUCSIsUnifiedCanadianAboriginalSyllabics
+xmlUCSIsVariationSelectors
+xmlUCSIsVariationSelectorsSupplement
+xmlUCSIsYiRadicals
+xmlUCSIsYiSyllables
+xmlUCSIsYijingHexagramSymbols
+

Module xmlversion:

ATTRIBUTE_UNUSED
+DEBUG_MEMORY_LOCATION
+LIBXML_ATTR_ALLOC_SIZE
+LIBXML_ATTR_FORMAT
+LIBXML_AUTOMATA_ENABLED
+LIBXML_C14N_ENABLED
+LIBXML_CATALOG_ENABLED
+LIBXML_DEBUG_ENABLED
+LIBXML_DEBUG_RUNTIME
+LIBXML_DOCB_ENABLED
+LIBXML_DOTTED_VERSION
+LIBXML_EXPR_ENABLED
+LIBXML_FTP_ENABLED
+LIBXML_HTML_ENABLED
+LIBXML_HTTP_ENABLED
+LIBXML_ICONV_ENABLED
+LIBXML_ICU_ENABLED
+LIBXML_ISO8859X_ENABLED
+LIBXML_LEGACY_ENABLED
+LIBXML_LZMA_ENABLED
+LIBXML_MODULES_ENABLED
+LIBXML_MODULE_EXTENSION
+LIBXML_OUTPUT_ENABLED
+LIBXML_PATTERN_ENABLED
+LIBXML_PUSH_ENABLED
+LIBXML_READER_ENABLED
+LIBXML_REGEXP_ENABLED
+LIBXML_SAX1_ENABLED
+LIBXML_SCHEMAS_ENABLED
+LIBXML_SCHEMATRON_ENABLED
+LIBXML_TEST_VERSION
+LIBXML_THREAD_ALLOC_ENABLED
+LIBXML_THREAD_ENABLED
+LIBXML_TREE_ENABLED
+LIBXML_UNICODE_ENABLED
+LIBXML_VALID_ENABLED
+LIBXML_VERSION
+LIBXML_VERSION_EXTRA
+LIBXML_VERSION_STRING
+LIBXML_WRITER_ENABLED
+LIBXML_XINCLUDE_ENABLED
+LIBXML_XPATH_ENABLED
+LIBXML_XPTR_ENABLED
+LIBXML_ZLIB_ENABLED
+WITHOUT_TRIO
+WITH_TRIO
+xmlCheckVersion
+

Module xmlwriter:

xmlFreeTextWriter
+xmlNewTextWriter
+xmlNewTextWriterDoc
+xmlNewTextWriterFilename
+xmlNewTextWriterMemory
+xmlNewTextWriterPushParser
+xmlNewTextWriterTree
+xmlTextWriter
+xmlTextWriterEndAttribute
+xmlTextWriterEndCDATA
+xmlTextWriterEndComment
+xmlTextWriterEndDTD
+xmlTextWriterEndDTDAttlist
+xmlTextWriterEndDTDElement
+xmlTextWriterEndDTDEntity
+xmlTextWriterEndDocument
+xmlTextWriterEndElement
+xmlTextWriterEndPI
+xmlTextWriterFlush
+xmlTextWriterFullEndElement
+xmlTextWriterPtr
+xmlTextWriterSetIndent
+xmlTextWriterSetIndentString
+xmlTextWriterSetQuoteChar
+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
+xmlTextWriterWriteDocType
+xmlTextWriterWriteElement
+xmlTextWriterWriteElementNS
+xmlTextWriterWriteFormatAttribute
+xmlTextWriterWriteFormatAttributeNS
+xmlTextWriterWriteFormatCDATA
+xmlTextWriterWriteFormatComment
+xmlTextWriterWriteFormatDTD
+xmlTextWriterWriteFormatDTDAttlist
+xmlTextWriterWriteFormatDTDElement
+xmlTextWriterWriteFormatDTDInternalEntity
+xmlTextWriterWriteFormatElement
+xmlTextWriterWriteFormatElementNS
+xmlTextWriterWriteFormatPI
+xmlTextWriterWriteFormatRaw
+xmlTextWriterWriteFormatString
+xmlTextWriterWritePI
+xmlTextWriterWriteProcessingInstruction
+xmlTextWriterWriteRaw
+xmlTextWriterWriteRawLen
+xmlTextWriterWriteString
+xmlTextWriterWriteVFormatAttribute
+xmlTextWriterWriteVFormatAttributeNS
+xmlTextWriterWriteVFormatCDATA
+xmlTextWriterWriteVFormatComment
+xmlTextWriterWriteVFormatDTD
+xmlTextWriterWriteVFormatDTDAttlist
+xmlTextWriterWriteVFormatDTDElement
+xmlTextWriterWriteVFormatDTDInternalEntity
+xmlTextWriterWriteVFormatElement
+xmlTextWriterWriteVFormatElementNS
+xmlTextWriterWriteVFormatPI
+xmlTextWriterWriteVFormatRaw
+xmlTextWriterWriteVFormatString
+

Module xpath:

XML_XPATH_CHECKNS
+XML_XPATH_NOVAR
+XPATH_BOOLEAN
+XPATH_ENCODING_ERROR
+XPATH_EXPRESSION_OK
+XPATH_EXPR_ERROR
+XPATH_FORBID_VARIABLE_ERROR
+XPATH_INVALID_ARITY
+XPATH_INVALID_CHAR_ERROR
+XPATH_INVALID_CTXT
+XPATH_INVALID_CTXT_POSITION
+XPATH_INVALID_CTXT_SIZE
+XPATH_INVALID_OPERAND
+XPATH_INVALID_PREDICATE_ERROR
+XPATH_INVALID_TYPE
+XPATH_LOCATIONSET
+XPATH_MEMORY_ERROR
+XPATH_NODESET
+XPATH_NUMBER
+XPATH_NUMBER_ERROR
+XPATH_POINT
+XPATH_RANGE
+XPATH_STACK_ERROR
+XPATH_START_LITERAL_ERROR
+XPATH_STRING
+XPATH_UNCLOSED_ERROR
+XPATH_UNDEFINED
+XPATH_UNDEF_PREFIX_ERROR
+XPATH_UNDEF_VARIABLE_ERROR
+XPATH_UNFINISHED_LITERAL_ERROR
+XPATH_UNKNOWN_FUNC_ERROR
+XPATH_USERS
+XPATH_VARIABLE_REF_ERROR
+XPATH_XSLT_TREE
+XPTR_RESOURCE_ERROR
+XPTR_SUB_RESOURCE_ERROR
+XPTR_SYNTAX_ERROR
+_xmlNodeSet
+_xmlXPathAxis
+_xmlXPathContext
+_xmlXPathFunct
+_xmlXPathObject
+_xmlXPathParserContext
+_xmlXPathType
+_xmlXPathVariable
+xmlNodeSet
+xmlNodeSetPtr
+xmlXPathAxis
+xmlXPathAxisFunc
+xmlXPathAxisPtr
+xmlXPathCastBooleanToNumber
+xmlXPathCastBooleanToString
+xmlXPathCastNodeSetToBoolean
+xmlXPathCastNodeSetToNumber
+xmlXPathCastNodeSetToString
+xmlXPathCastNodeToNumber
+xmlXPathCastNodeToString
+xmlXPathCastNumberToBoolean
+xmlXPathCastNumberToString
+xmlXPathCastStringToBoolean
+xmlXPathCastStringToNumber
+xmlXPathCastToBoolean
+xmlXPathCastToNumber
+xmlXPathCastToString
+xmlXPathCmpNodes
+xmlXPathCompExpr
+xmlXPathCompExprPtr
+xmlXPathCompile
+xmlXPathCompiledEval
+xmlXPathCompiledEvalToBoolean
+xmlXPathContext
+xmlXPathContextPtr
+xmlXPathContextSetCache
+xmlXPathConvertBoolean
+xmlXPathConvertFunc
+xmlXPathConvertNumber
+xmlXPathConvertString
+xmlXPathCtxtCompile
+xmlXPathError
+xmlXPathEval
+xmlXPathEvalExpression
+xmlXPathEvalFunc
+xmlXPathEvalPredicate
+xmlXPathFreeCompExpr
+xmlXPathFreeContext
+xmlXPathFreeNodeSet
+xmlXPathFreeNodeSetList
+xmlXPathFreeObject
+xmlXPathFuncLookupFunc
+xmlXPathFuncPtr
+xmlXPathFunct
+xmlXPathFunction
+xmlXPathInit
+xmlXPathIsInf
+xmlXPathIsNaN
+xmlXPathNAN
+xmlXPathNINF
+xmlXPathNewContext
+xmlXPathNodeEval
+xmlXPathNodeSetCreate
+xmlXPathNodeSetGetLength
+xmlXPathNodeSetIsEmpty
+xmlXPathNodeSetItem
+xmlXPathObject
+xmlXPathObjectCopy
+xmlXPathObjectPtr
+xmlXPathObjectType
+xmlXPathOrderDocElems
+xmlXPathPINF
+xmlXPathParserContext
+xmlXPathParserContextPtr
+xmlXPathSetContextNode
+xmlXPathType
+xmlXPathTypePtr
+xmlXPathVariable
+xmlXPathVariableLookupFunc
+xmlXPathVariablePtr
+

Module xpathInternals:

CAST_TO_BOOLEAN
+CAST_TO_NUMBER
+CAST_TO_STRING
+CHECK_ARITY
+CHECK_ERROR
+CHECK_ERROR0
+CHECK_TYPE
+CHECK_TYPE0
+XP_ERROR
+XP_ERROR0
+valuePop
+valuePush
+xmlXPathAddValues
+xmlXPathBooleanFunction
+xmlXPathCeilingFunction
+xmlXPathCheckError
+xmlXPathCompareValues
+xmlXPathConcatFunction
+xmlXPathContainsFunction
+xmlXPathCountFunction
+xmlXPathDebugDumpCompExpr
+xmlXPathDebugDumpObject
+xmlXPathDifference
+xmlXPathDistinct
+xmlXPathDistinctSorted
+xmlXPathDivValues
+xmlXPathEmptyNodeSet
+xmlXPathEqualValues
+xmlXPathErr
+xmlXPathEvalExpr
+xmlXPathEvaluatePredicateResult
+xmlXPathFalseFunction
+xmlXPathFloorFunction
+xmlXPathFreeParserContext
+xmlXPathFunctionLookup
+xmlXPathFunctionLookupNS
+xmlXPathGetContextNode
+xmlXPathGetDocument
+xmlXPathGetError
+xmlXPathHasSameNodes
+xmlXPathIdFunction
+xmlXPathIntersection
+xmlXPathIsNodeType
+xmlXPathLangFunction
+xmlXPathLastFunction
+xmlXPathLeading
+xmlXPathLeadingSorted
+xmlXPathLocalNameFunction
+xmlXPathModValues
+xmlXPathMultValues
+xmlXPathNamespaceURIFunction
+xmlXPathNewBoolean
+xmlXPathNewCString
+xmlXPathNewFloat
+xmlXPathNewNodeSet
+xmlXPathNewNodeSetList
+xmlXPathNewParserContext
+xmlXPathNewString
+xmlXPathNewValueTree
+xmlXPathNextAncestor
+xmlXPathNextAncestorOrSelf
+xmlXPathNextAttribute
+xmlXPathNextChild
+xmlXPathNextDescendant
+xmlXPathNextDescendantOrSelf
+xmlXPathNextFollowing
+xmlXPathNextFollowingSibling
+xmlXPathNextNamespace
+xmlXPathNextParent
+xmlXPathNextPreceding
+xmlXPathNextPrecedingSibling
+xmlXPathNextSelf
+xmlXPathNodeLeading
+xmlXPathNodeLeadingSorted
+xmlXPathNodeSetAdd
+xmlXPathNodeSetAddNs
+xmlXPathNodeSetAddUnique
+xmlXPathNodeSetContains
+xmlXPathNodeSetDel
+xmlXPathNodeSetFreeNs
+xmlXPathNodeSetMerge
+xmlXPathNodeSetRemove
+xmlXPathNodeSetSort
+xmlXPathNodeTrailing
+xmlXPathNodeTrailingSorted
+xmlXPathNormalizeFunction
+xmlXPathNotEqualValues
+xmlXPathNotFunction
+xmlXPathNsLookup
+xmlXPathNumberFunction
+xmlXPathParseNCName
+xmlXPathParseName
+xmlXPathPopBoolean
+xmlXPathPopExternal
+xmlXPathPopNodeSet
+xmlXPathPopNumber
+xmlXPathPopString
+xmlXPathPositionFunction
+xmlXPathRegisterAllFunctions
+xmlXPathRegisterFunc
+xmlXPathRegisterFuncLookup
+xmlXPathRegisterFuncNS
+xmlXPathRegisterNs
+xmlXPathRegisterVariable
+xmlXPathRegisterVariableLookup
+xmlXPathRegisterVariableNS
+xmlXPathRegisteredFuncsCleanup
+xmlXPathRegisteredNsCleanup
+xmlXPathRegisteredVariablesCleanup
+xmlXPathReturnBoolean
+xmlXPathReturnEmptyNodeSet
+xmlXPathReturnEmptyString
+xmlXPathReturnExternal
+xmlXPathReturnFalse
+xmlXPathReturnNodeSet
+xmlXPathReturnNumber
+xmlXPathReturnString
+xmlXPathReturnTrue
+xmlXPathRoot
+xmlXPathRoundFunction
+xmlXPathSetArityError
+xmlXPathSetError
+xmlXPathSetTypeError
+xmlXPathStackIsExternal
+xmlXPathStackIsNodeSet
+xmlXPathStartsWithFunction
+xmlXPathStringEvalNumber
+xmlXPathStringFunction
+xmlXPathStringLengthFunction
+xmlXPathSubValues
+xmlXPathSubstringAfterFunction
+xmlXPathSubstringBeforeFunction
+xmlXPathSubstringFunction
+xmlXPathSumFunction
+xmlXPathTrailing
+xmlXPathTrailingSorted
+xmlXPathTranslateFunction
+xmlXPathTrueFunction
+xmlXPathValueFlipSign
+xmlXPathVariableLookup
+xmlXPathVariableLookupNS
+xmlXPathWrapCString
+xmlXPathWrapExternal
+xmlXPathWrapNodeSet
+xmlXPathWrapString
+xmlXPatherror
+

Module xpointer:

_xmlLocationSet
+xmlLocationSet
+xmlLocationSetPtr
+xmlXPtrBuildNodeList
+xmlXPtrEval
+xmlXPtrEvalRangePredicate
+xmlXPtrFreeLocationSet
+xmlXPtrLocationSetAdd
+xmlXPtrLocationSetCreate
+xmlXPtrLocationSetDel
+xmlXPtrLocationSetMerge
+xmlXPtrLocationSetRemove
+xmlXPtrNewCollapsedRange
+xmlXPtrNewContext
+xmlXPtrNewLocationSetNodeSet
+xmlXPtrNewLocationSetNodes
+xmlXPtrNewRange
+xmlXPtrNewRangeNodeObject
+xmlXPtrNewRangeNodePoint
+xmlXPtrNewRangeNodes
+xmlXPtrNewRangePointNode
+xmlXPtrNewRangePoints
+xmlXPtrRangeToFunction
+xmlXPtrWrapLocationSet
+

Daniel Veillard

diff --git a/doc/APIfunctions.html b/doc/APIfunctions.html new file mode 100644 index 0000000..f9ac249 --- /dev/null +++ b/doc/APIfunctions.html @@ -0,0 +1,2345 @@ + + +List of function manipulating types in libxml2
Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
Made with Libxml2 Logo

The XML C parser and toolkit of Gnome

List of function manipulating types in libxml2

Developer Menu
API Indexes
Related links

Type ...:

errorSAXFunc
+fatalErrorSAXFunc
+warningSAXFunc
+xmlGenericErrorFunc
+xmlParserError
+xmlParserValidityError
+xmlParserValidityWarning
+xmlParserWarning
+xmlRelaxNGValidityErrorFunc
+xmlRelaxNGValidityWarningFunc
+xmlSchemaValidityErrorFunc
+xmlSchemaValidityWarningFunc
+xmlSchematronValidityErrorFunc
+xmlSchematronValidityWarningFunc
+xmlStrPrintf
+xmlTextWriterWriteFormatAttribute
+xmlTextWriterWriteFormatAttributeNS
+xmlTextWriterWriteFormatCDATA
+xmlTextWriterWriteFormatComment
+xmlTextWriterWriteFormatDTD
+xmlTextWriterWriteFormatDTDAttlist
+xmlTextWriterWriteFormatDTDElement
+xmlTextWriterWriteFormatDTDInternalEntity
+xmlTextWriterWriteFormatElement
+xmlTextWriterWriteFormatElementNS
+xmlTextWriterWriteFormatPI
+xmlTextWriterWriteFormatRaw
+xmlTextWriterWriteFormatString
+xmlValidityErrorFunc
+xmlValidityWarningFunc
+

Type FILE *:

htmlDocDump
+htmlNodeDumpFile
+htmlNodeDumpFileFormat
+xmlACatalogDump
+xmlBufferDump
+xmlCatalogDump
+xmlDebugCheckDocument
+xmlDebugDumpAttr
+xmlDebugDumpAttrList
+xmlDebugDumpDTD
+xmlDebugDumpDocument
+xmlDebugDumpDocumentHead
+xmlDebugDumpEntities
+xmlDebugDumpNode
+xmlDebugDumpNodeList
+xmlDebugDumpOneNode
+xmlDebugDumpString
+xmlDocDump
+xmlDocFormatDump
+xmlElemDump
+xmlLsOneNode
+xmlMemDisplay
+xmlMemDisplayLast
+xmlMemShow
+xmlOutputBufferCreateFile
+xmlParserInputBufferCreateFile
+xmlPrintURI
+xmlRegexpPrint
+xmlRelaxNGDump
+xmlRelaxNGDumpTree
+xmlSchemaDump
+xmlShell
+xmlXPathDebugDumpCompExpr
+xmlXPathDebugDumpObject
+

Type char **:

xmlNanoHTTPFetch
+xmlNanoHTTPMethod
+xmlNanoHTTPMethodRedir
+xmlNanoHTTPOpen
+xmlNanoHTTPOpenRedir
+

Type char const *:

xmlInputMatchCallback
+xmlInputOpenCallback
+xmlOutputMatchCallback
+xmlOutputOpenCallback
+

Type const char **:

xmlGetFeaturesList
+xmlSchemaValidityLocatorFunc
+

Type const htmlElemDesc *:

htmlAttrAllowed
+htmlElementAllowedHere
+htmlElementStatusHere
+

Type const htmlNodePtr:

htmlNodeStatus
+

Type const unsigned char *:

UTF8ToHtml
+UTF8Toisolat1
+docbEncodeEntities
+htmlEncodeEntities
+isolat1ToUTF8
+xmlCharEncodingInputFunc
+xmlCharEncodingOutputFunc
+xmlCheckUTF8
+xmlDetectCharEncoding
+xmlGetUTF8Char
+

Type const void *:

xmlListDataCompare
+xmlListReverseWalk
+xmlListWalk
+xmlListWalker
+

Type const xlinkHRef:

xlinkSimpleLinkFunk
+

Type const xlinkHRef *:

xlinkExtendedLinkFunk
+xlinkExtendedLinkSetFunk
+

Type const xlinkRole:

xlinkSimpleLinkFunk
+

Type const xlinkRole *:

xlinkExtendedLinkFunk
+xlinkExtendedLinkSetFunk
+

Type const xlinkTitle:

xlinkSimpleLinkFunk
+

Type const xlinkTitle *:

xlinkExtendedLinkFunk
+xlinkExtendedLinkSetFunk
+

Type const xmlBuf *:

xmlBufContent
+

Type const xmlBufPtr:

xmlBufUse
+

Type const xmlBuffer *:

xmlBufferContent
+xmlBufferLength
+

Type const xmlChRangeGroup *:

xmlCharInRange
+

Type const xmlChar *:

attribute
+attributeDecl
+attributeDeclSAXFunc
+attributeSAXFunc
+cdataBlock
+cdataBlockSAXFunc
+characters
+charactersSAXFunc
+comment
+commentSAXFunc
+elementDecl
+elementDeclSAXFunc
+endElement
+endElementNsSAX2Func
+endElementSAXFunc
+entityDecl
+entityDeclSAXFunc
+externalSubset
+externalSubsetSAXFunc
+getEntity
+getEntitySAXFunc
+getParameterEntity
+getParameterEntitySAXFunc
+globalNamespace
+htmlAttrAllowed
+htmlAutoCloseTag
+htmlCtxtReadDoc
+htmlElementAllowedHere
+htmlEntityLookup
+htmlIsBooleanAttr
+htmlIsScriptAttribute
+htmlNewDoc
+htmlNewDocNoDtD
+htmlReadDoc
+htmlSetMetaEncoding
+htmlTagLookup
+ignorableWhitespace
+ignorableWhitespaceSAXFunc
+internalSubset
+internalSubsetSAXFunc
+namePush
+namespaceDecl
+notationDecl
+notationDeclSAXFunc
+processingInstruction
+processingInstructionSAXFunc
+reference
+referenceSAXFunc
+resolveEntity
+resolveEntitySAXFunc
+setNamespace
+startElement
+startElementNsSAX2Func
+startElementSAXFunc
+unparsedEntityDecl
+unparsedEntityDeclSAXFunc
+xmlACatalogAdd
+xmlACatalogRemove
+xmlACatalogResolve
+xmlACatalogResolvePublic
+xmlACatalogResolveSystem
+xmlACatalogResolveURI
+xmlAddAttributeDecl
+xmlAddDocEntity
+xmlAddDtdEntity
+xmlAddElementDecl
+xmlAddID
+xmlAddNotationDecl
+xmlAddRef
+xmlAttrSerializeTxtContent
+xmlAutomataNewCountTrans
+xmlAutomataNewCountTrans2
+xmlAutomataNewNegTrans
+xmlAutomataNewOnceTrans
+xmlAutomataNewOnceTrans2
+xmlAutomataNewTransition
+xmlAutomataNewTransition2
+xmlBufferAdd
+xmlBufferAddHead
+xmlBufferCat
+xmlBufferWriteCHAR
+xmlBufferWriteQuotedString
+xmlBuildQName
+xmlBuildRelativeURI
+xmlBuildURI
+xmlCanonicPath
+xmlCatalogAdd
+xmlCatalogAddLocal
+xmlCatalogGetPublic
+xmlCatalogGetSystem
+xmlCatalogLocalResolve
+xmlCatalogLocalResolveURI
+xmlCatalogRemove
+xmlCatalogResolve
+xmlCatalogResolvePublic
+xmlCatalogResolveSystem
+xmlCatalogResolveURI
+xmlCheckLanguageID
+xmlCreateDocParserCtxt
+xmlCreateEntityParserCtxt
+xmlCreateEnumeration
+xmlCreateIntSubset
+xmlCtxtReadDoc
+xmlDOMWrapAcquireNsFunction
+xmlDebugDumpString
+xmlDictExists
+xmlDictLookup
+xmlDictOwns
+xmlDictQLookup
+xmlEncodeEntities
+xmlEncodeEntitiesReentrant
+xmlEncodeSpecialChars
+xmlExpNewAtom
+xmlExpStringDerive
+xmlGetDocEntity
+xmlGetDtdAttrDesc
+xmlGetDtdElementDesc
+xmlGetDtdEntity
+xmlGetDtdNotationDesc
+xmlGetDtdQAttrDesc
+xmlGetDtdQElementDesc
+xmlGetID
+xmlGetNoNsProp
+xmlGetNsProp
+xmlGetParameterEntity
+xmlGetPredefinedEntity
+xmlGetProp
+xmlGetRefs
+xmlHasNsProp
+xmlHasProp
+xmlHashAddEntry
+xmlHashAddEntry2
+xmlHashAddEntry3
+xmlHashLookup
+xmlHashLookup2
+xmlHashLookup3
+xmlHashQLookup
+xmlHashQLookup2
+xmlHashQLookup3
+xmlHashRemoveEntry
+xmlHashRemoveEntry2
+xmlHashRemoveEntry3
+xmlHashScan3
+xmlHashScanFull3
+xmlHashScannerFull
+xmlHashUpdateEntry
+xmlHashUpdateEntry2
+xmlHashUpdateEntry3
+xmlIsMixedElement
+xmlIsXHTML
+xmlNewCDataBlock
+xmlNewCharRef
+xmlNewChild
+xmlNewComment
+xmlNewDoc
+xmlNewDocComment
+xmlNewDocElementContent
+xmlNewDocNode
+xmlNewDocNodeEatName
+xmlNewDocPI
+xmlNewDocProp
+xmlNewDocRawNode
+xmlNewDocText
+xmlNewDocTextLen
+xmlNewDtd
+xmlNewElementContent
+xmlNewEntity
+xmlNewGlobalNs
+xmlNewNode
+xmlNewNs
+xmlNewNsProp
+xmlNewNsPropEatName
+xmlNewPI
+xmlNewProp
+xmlNewReference
+xmlNewStringInputStream
+xmlNewText
+xmlNewTextChild
+xmlNewTextLen
+xmlNodeAddContent
+xmlNodeAddContentLen
+xmlNodeSetBase
+xmlNodeSetContent
+xmlNodeSetContentLen
+xmlNodeSetLang
+xmlNodeSetName
+xmlNormalizeWindowsPath
+xmlOutputBufferWriteEscape
+xmlParseBalancedChunkMemory
+xmlParseBalancedChunkMemoryRecover
+xmlParseCtxtExternalEntity
+xmlParseDTD
+xmlParseDoc
+xmlParseElementContentDecl
+xmlParseExternalEntity
+xmlParseExternalSubset
+xmlPathToURI
+xmlPatterncompile
+xmlReadDoc
+xmlReaderForDoc
+xmlReaderNewDoc
+xmlRecoverDoc
+xmlRegExecCallbacks
+xmlRegExecPushString
+xmlRegExecPushString2
+xmlRegexpCompile
+xmlRegexpExec
+xmlRelaxNGValidatePushCData
+xmlSAX2AttributeDecl
+xmlSAX2CDataBlock
+xmlSAX2Characters
+xmlSAX2Comment
+xmlSAX2ElementDecl
+xmlSAX2EndElement
+xmlSAX2EndElementNs
+xmlSAX2EntityDecl
+xmlSAX2ExternalSubset
+xmlSAX2GetEntity
+xmlSAX2GetParameterEntity
+xmlSAX2IgnorableWhitespace
+xmlSAX2InternalSubset
+xmlSAX2NotationDecl
+xmlSAX2ProcessingInstruction
+xmlSAX2Reference
+xmlSAX2ResolveEntity
+xmlSAX2StartElement
+xmlSAX2StartElementNs
+xmlSAX2UnparsedEntityDecl
+xmlSAXParseDTD
+xmlSAXParseDoc
+xmlSchemaCheckFacet
+xmlSchemaCollapseString
+xmlSchemaGetPredefinedType
+xmlSchemaNewNOTATIONValue
+xmlSchemaNewQNameValue
+xmlSchemaNewStringValue
+xmlSchemaValPredefTypeNode
+xmlSchemaValPredefTypeNodeNoNorm
+xmlSchemaValidateFacet
+xmlSchemaValidateFacetWhtsp
+xmlSchemaValidateLengthFacet
+xmlSchemaValidateLengthFacetWhtsp
+xmlSchemaValidateListSimpleTypeFacet
+xmlSchemaValidatePredefinedType
+xmlSchemaWhiteSpaceReplace
+xmlSearchNs
+xmlSearchNsByHref
+xmlSetNsProp
+xmlSetProp
+xmlSetupParserForBuffer
+xmlSplitQName
+xmlSplitQName2
+xmlSplitQName3
+xmlStrEqual
+xmlStrQEqual
+xmlStrcasecmp
+xmlStrcasestr
+xmlStrcat
+xmlStrchr
+xmlStrcmp
+xmlStrdup
+xmlStreamPush
+xmlStreamPushAttr
+xmlStreamPushNode
+xmlStringCurrentChar
+xmlStringDecodeEntities
+xmlStringGetNodeList
+xmlStringLenDecodeEntities
+xmlStringLenGetNodeList
+xmlStrlen
+xmlStrncasecmp
+xmlStrncat
+xmlStrncatNew
+xmlStrncmp
+xmlStrndup
+xmlStrstr
+xmlStrsub
+xmlTextConcat
+xmlTextReaderConstString
+xmlTextReaderGetAttribute
+xmlTextReaderGetAttributeNs
+xmlTextReaderLookupNamespace
+xmlTextReaderMoveToAttribute
+xmlTextReaderMoveToAttributeNs
+xmlTextReaderPreservePattern
+xmlTextWriterSetIndentString
+xmlTextWriterStartAttribute
+xmlTextWriterStartAttributeNS
+xmlTextWriterStartDTD
+xmlTextWriterStartDTDAttlist
+xmlTextWriterStartDTDElement
+xmlTextWriterStartDTDEntity
+xmlTextWriterStartElement
+xmlTextWriterStartElementNS
+xmlTextWriterStartPI
+xmlTextWriterWriteAttribute
+xmlTextWriterWriteAttributeNS
+xmlTextWriterWriteCDATA
+xmlTextWriterWriteComment
+xmlTextWriterWriteDTD
+xmlTextWriterWriteDTDAttlist
+xmlTextWriterWriteDTDElement
+xmlTextWriterWriteDTDEntity
+xmlTextWriterWriteDTDExternalEntity
+xmlTextWriterWriteDTDExternalEntityContents
+xmlTextWriterWriteDTDInternalEntity
+xmlTextWriterWriteDTDNotation
+xmlTextWriterWriteElement
+xmlTextWriterWriteElementNS
+xmlTextWriterWriteFormatAttribute
+xmlTextWriterWriteFormatAttributeNS
+xmlTextWriterWriteFormatDTD
+xmlTextWriterWriteFormatDTDAttlist
+xmlTextWriterWriteFormatDTDElement
+xmlTextWriterWriteFormatDTDInternalEntity
+xmlTextWriterWriteFormatElement
+xmlTextWriterWriteFormatElementNS
+xmlTextWriterWriteFormatPI
+xmlTextWriterWritePI
+xmlTextWriterWriteRaw
+xmlTextWriterWriteRawLen
+xmlTextWriterWriteString
+xmlTextWriterWriteVFormatAttribute
+xmlTextWriterWriteVFormatAttributeNS
+xmlTextWriterWriteVFormatDTD
+xmlTextWriterWriteVFormatDTDAttlist
+xmlTextWriterWriteVFormatDTDElement
+xmlTextWriterWriteVFormatDTDInternalEntity
+xmlTextWriterWriteVFormatElement
+xmlTextWriterWriteVFormatElementNS
+xmlTextWriterWriteVFormatPI
+xmlURIEscape
+xmlURIEscapeStr
+xmlUTF8Charcmp
+xmlUTF8Size
+xmlUTF8Strlen
+xmlUTF8Strloc
+xmlUTF8Strndup
+xmlUTF8Strpos
+xmlUTF8Strsize
+xmlUTF8Strsub
+xmlUnsetNsProp
+xmlUnsetProp
+xmlValidCtxtNormalizeAttributeValue
+xmlValidNormalizeAttributeValue
+xmlValidateAttributeValue
+xmlValidateNCName
+xmlValidateNMToken
+xmlValidateName
+xmlValidateNameValue
+xmlValidateNamesValue
+xmlValidateNmtokenValue
+xmlValidateNmtokensValue
+xmlValidateNotationUse
+xmlValidateOneAttribute
+xmlValidateOneNamespace
+xmlValidatePopElement
+xmlValidatePushCData
+xmlValidatePushElement
+xmlValidateQName
+xmlXPathCastStringToBoolean
+xmlXPathCastStringToNumber
+xmlXPathCompile
+xmlXPathCtxtCompile
+xmlXPathEval
+xmlXPathEvalExpression
+xmlXPathFuncLookupFunc
+xmlXPathFunctionLookup
+xmlXPathFunctionLookupNS
+xmlXPathIsNodeType
+xmlXPathNewParserContext
+xmlXPathNewString
+xmlXPathNodeEval
+xmlXPathNsLookup
+xmlXPathRegisterFunc
+xmlXPathRegisterFuncNS
+xmlXPathRegisterNs
+xmlXPathRegisterVariable
+xmlXPathRegisterVariableNS
+xmlXPathStringEvalNumber
+xmlXPathVariableLookup
+xmlXPathVariableLookupFunc
+xmlXPathVariableLookupNS
+xmlXPtrEval
+

Type const xmlChar **:

htmlParseEntityRef
+startElement
+startElementNsSAX2Func
+startElementSAXFunc
+xlinkExtendedLinkFunk
+xlinkExtendedLinkSetFunk
+xmlExpGetLanguage
+xmlExpGetStart
+xmlPatterncompile
+xmlRegExecErrInfo
+xmlSAX2StartElement
+xmlSAX2StartElementNs
+xmlSchemaGetCanonValue
+xmlSchemaGetCanonValueWhtsp
+xmlTextReaderPreservePattern
+xmlValidGetPotentialChildren
+xmlValidGetValidElements
+

Type const xmlDoc *:

xmlDocGetRootElement
+xmlEncodeSpecialChars
+xmlGetDocCompressMode
+xmlGetDocEntity
+xmlGetIntSubset
+xmlGetNsList
+xmlNewDocText
+xmlNewReference
+xmlNodeGetBase
+xmlNodeListGetRawString
+xmlStringGetNodeList
+xmlStringLenGetNodeList
+

Type const xmlListPtr:

xmlListCopy
+xmlListDup
+

Type const xmlNode *:

xmlBufGetNodeContent
+xmlGetLastChild
+xmlGetLineNo
+xmlGetNoNsProp
+xmlGetNodePath
+xmlGetNsList
+xmlGetNsProp
+xmlGetProp
+xmlHasNsProp
+xmlHasProp
+xmlIsBlankNode
+xmlNodeBufGetContent
+xmlNodeGetBase
+xmlNodeGetContent
+xmlNodeGetLang
+xmlNodeGetSpacePreserve
+xmlNodeIsText
+xmlNodeListGetRawString
+xmlNodeListGetString
+

Type const xmlNodePtr:

xmlParserFindNodeInfo
+xmlParserFindNodeInfoIndex
+

Type const xmlParserCtxtPtr:

xmlParserFindNodeInfo
+

Type const xmlParserNodeInfoPtr:

xmlParserAddNodeInfo
+

Type const xmlParserNodeInfoSeqPtr:

xmlParserFindNodeInfoIndex
+

Type docbParserCtxtPtr:

docbFreeParserCtxt
+docbParseChunk
+docbParseDocument
+

Type docbSAXHandlerPtr:

docbCreatePushParserCtxt
+docbSAXParseDoc
+docbSAXParseFile
+

Type double:

xmlXPathCastNumberToBoolean
+xmlXPathCastNumberToString
+xmlXPathIsInf
+xmlXPathIsNaN
+xmlXPathNewFloat
+

Type ftpDataCallback:

xmlNanoFTPGet
+

Type ftpListCallback:

xmlNanoFTPList
+

Type htmlDocPtr:

htmlAutoCloseTag
+htmlGetMetaEncoding
+htmlIsAutoClosed
+htmlSetMetaEncoding
+

Type htmlNodePtr:

htmlAutoCloseTag
+htmlIsAutoClosed
+

Type htmlParserCtxtPtr:

htmlCtxtReadDoc
+htmlCtxtReadFd
+htmlCtxtReadFile
+htmlCtxtReadIO
+htmlCtxtReadMemory
+htmlCtxtReset
+htmlCtxtUseOptions
+htmlFreeParserCtxt
+htmlParseCharRef
+htmlParseChunk
+htmlParseDocument
+htmlParseElement
+htmlParseEntityRef
+

Type htmlSAXHandlerPtr:

htmlCreatePushParserCtxt
+htmlSAXParseDoc
+htmlSAXParseFile
+

Type int *:

UTF8ToHtml
+UTF8Toisolat1
+docbEncodeEntities
+htmlDocDumpMemory
+htmlDocDumpMemoryFormat
+htmlEncodeEntities
+isolat1ToUTF8
+xmlCharEncodingInputFunc
+xmlCharEncodingOutputFunc
+xmlCurrentChar
+xmlDocDumpFormatMemory
+xmlDocDumpFormatMemoryEnc
+xmlDocDumpMemory
+xmlDocDumpMemoryEnc
+xmlGetFeaturesList
+xmlGetUTF8Char
+xmlRegExecErrInfo
+xmlRegExecNextValues
+xmlSplitQName3
+xmlStringCurrentChar
+xmlValidGetPotentialChildren
+

Type long:

xmlMemDisplayLast
+

Type size_t:

xmlBufShrink
+xmlBufferCreateSize
+xmlBufferCreateStatic
+xmlDictSetLimit
+xmlMallocAtomicLoc
+xmlMallocFunc
+xmlMallocLoc
+xmlMemMalloc
+xmlMemRealloc
+xmlReallocFunc
+xmlReallocLoc
+

Type unsigned char *:

UTF8ToHtml
+UTF8Toisolat1
+docbEncodeEntities
+htmlEncodeEntities
+isolat1ToUTF8
+xmlCharEncodingInputFunc
+xmlCharEncodingOutputFunc
+

Type unsigned int:

htmlEntityValueLookup
+xmlBufferGrow
+xmlBufferResize
+xmlBufferShrink
+xmlCharInRange
+xmlIsBaseChar
+xmlIsBlank
+xmlIsChar
+xmlIsCombining
+xmlIsDigit
+xmlIsExtender
+xmlIsIdeographic
+xmlIsPubidChar
+

Type unsigned long:

ftpListCallback
+xmlDllMain
+xmlSchemaValidateListSimpleTypeFacet
+

Type unsigned long *:

xmlSchemaValidateLengthFacet
+xmlSchemaValidateLengthFacetWhtsp
+xmlSchemaValidateListSimpleTypeFacet
+xmlSchemaValidityLocatorFunc
+

Type va_list:

xmlStrVPrintf
+xmlTextWriterWriteVFormatAttribute
+xmlTextWriterWriteVFormatAttributeNS
+xmlTextWriterWriteVFormatCDATA
+xmlTextWriterWriteVFormatComment
+xmlTextWriterWriteVFormatDTD
+xmlTextWriterWriteVFormatDTDAttlist
+xmlTextWriterWriteVFormatDTDElement
+xmlTextWriterWriteVFormatDTDInternalEntity
+xmlTextWriterWriteVFormatElement
+xmlTextWriterWriteVFormatElementNS
+xmlTextWriterWriteVFormatPI
+xmlTextWriterWriteVFormatRaw
+xmlTextWriterWriteVFormatString
+

Type void *:

attribute
+attributeDecl
+attributeDeclSAXFunc
+attributeSAXFunc
+cdataBlock
+cdataBlockSAXFunc
+characters
+charactersSAXFunc
+checkNamespace
+comment
+commentSAXFunc
+docbCreatePushParserCtxt
+docbSAXParseDoc
+docbSAXParseFile
+elementDecl
+elementDeclSAXFunc
+endDocument
+endDocumentSAXFunc
+endElement
+endElementNsSAX2Func
+endElementSAXFunc
+entityDecl
+entityDeclSAXFunc
+errorSAXFunc
+externalSubset
+externalSubsetSAXFunc
+fatalErrorSAXFunc
+ftpDataCallback
+ftpListCallback
+getColumnNumber
+getEntity
+getEntitySAXFunc
+getLineNumber
+getNamespace
+getParameterEntity
+getParameterEntitySAXFunc
+getPublicId
+getSystemId
+globalNamespace
+hasExternalSubset
+hasExternalSubsetSAXFunc
+hasInternalSubset
+hasInternalSubsetSAXFunc
+htmlCreatePushParserCtxt
+htmlCtxtReadIO
+htmlReadIO
+htmlSAXParseDoc
+htmlSAXParseFile
+ignorableWhitespace
+ignorableWhitespaceSAXFunc
+internalSubset
+internalSubsetSAXFunc
+isStandalone
+isStandaloneSAXFunc
+namespaceDecl
+notationDecl
+notationDeclSAXFunc
+processingInstruction
+processingInstructionSAXFunc
+reference
+referenceSAXFunc
+resolveEntity
+resolveEntitySAXFunc
+setDocumentLocator
+setDocumentLocatorSAXFunc
+setNamespace
+startDocument
+startDocumentSAXFunc
+startElement
+startElementNsSAX2Func
+startElementSAXFunc
+unparsedEntityDecl
+unparsedEntityDeclSAXFunc
+warningSAXFunc
+xlinkExtendedLinkFunk
+xlinkExtendedLinkSetFunk
+xlinkNodeDetectFunc
+xlinkSimpleLinkFunk
+xmlAutomataNewCountTrans
+xmlAutomataNewCountTrans2
+xmlAutomataNewNegTrans
+xmlAutomataNewOnceTrans
+xmlAutomataNewOnceTrans2
+xmlAutomataNewTransition
+xmlAutomataNewTransition2
+xmlBufferCreateStatic
+xmlC14NExecute
+xmlC14NIsVisibleCallback
+xmlCatalogAddLocal
+xmlCatalogFreeLocal
+xmlCatalogLocalResolve
+xmlCatalogLocalResolveURI
+xmlCreateIOParserCtxt
+xmlCreatePushParserCtxt
+xmlCtxtGetLastError
+xmlCtxtReadIO
+xmlCtxtResetLastError
+xmlDllMain
+xmlFileClose
+xmlFileRead
+xmlFreeFunc
+xmlGenericErrorFunc
+xmlGetFeature
+xmlHashAddEntry
+xmlHashAddEntry2
+xmlHashAddEntry3
+xmlHashCopier
+xmlHashDeallocator
+xmlHashScan
+xmlHashScan3
+xmlHashScanFull
+xmlHashScanFull3
+xmlHashScanner
+xmlHashScannerFull
+xmlHashUpdateEntry
+xmlHashUpdateEntry2
+xmlHashUpdateEntry3
+xmlIOFTPClose
+xmlIOFTPRead
+xmlIOHTTPClose
+xmlIOHTTPRead
+xmlInputCloseCallback
+xmlInputReadCallback
+xmlListAppend
+xmlListInsert
+xmlListPushBack
+xmlListPushFront
+xmlListRemoveAll
+xmlListRemoveFirst
+xmlListRemoveLast
+xmlListReverseSearch
+xmlListSearch
+xmlMemFree
+xmlMemRealloc
+xmlNanoFTPCheckResponse
+xmlNanoFTPClose
+xmlNanoFTPCloseConnection
+xmlNanoFTPConnect
+xmlNanoFTPCwd
+xmlNanoFTPDele
+xmlNanoFTPFreeCtxt
+xmlNanoFTPGet
+xmlNanoFTPGetConnection
+xmlNanoFTPGetResponse
+xmlNanoFTPGetSocket
+xmlNanoFTPList
+xmlNanoFTPQuit
+xmlNanoFTPRead
+xmlNanoFTPUpdateURL
+xmlNanoHTTPAuthHeader
+xmlNanoHTTPClose
+xmlNanoHTTPContentLength
+xmlNanoHTTPEncoding
+xmlNanoHTTPMimeType
+xmlNanoHTTPRead
+xmlNanoHTTPRedir
+xmlNanoHTTPReturnCode
+xmlNanoHTTPSave
+xmlOutputBufferCreateIO
+xmlOutputCloseCallback
+xmlOutputWriteCallback
+xmlParseBalancedChunkMemory
+xmlParseBalancedChunkMemoryRecover
+xmlParseExternalEntity
+xmlParserError
+xmlParserInputBufferCreateIO
+xmlParserValidityError
+xmlParserValidityWarning
+xmlParserWarning
+xmlReadIO
+xmlReaderForIO
+xmlReaderNewIO
+xmlReallocFunc
+xmlReallocLoc
+xmlRegExecCallbacks
+xmlRegExecPushString
+xmlRegExecPushString2
+xmlRegNewExecCtxt
+xmlRelaxNGSetParserErrors
+xmlRelaxNGSetParserStructuredErrors
+xmlRelaxNGSetValidErrors
+xmlRelaxNGSetValidStructuredErrors
+xmlRelaxNGValidityErrorFunc
+xmlRelaxNGValidityWarningFunc
+xmlSAX2AttributeDecl
+xmlSAX2CDataBlock
+xmlSAX2Characters
+xmlSAX2Comment
+xmlSAX2ElementDecl
+xmlSAX2EndDocument
+xmlSAX2EndElement
+xmlSAX2EndElementNs
+xmlSAX2EntityDecl
+xmlSAX2ExternalSubset
+xmlSAX2GetColumnNumber
+xmlSAX2GetEntity
+xmlSAX2GetLineNumber
+xmlSAX2GetParameterEntity
+xmlSAX2GetPublicId
+xmlSAX2GetSystemId
+xmlSAX2HasExternalSubset
+xmlSAX2HasInternalSubset
+xmlSAX2IgnorableWhitespace
+xmlSAX2InternalSubset
+xmlSAX2IsStandalone
+xmlSAX2NotationDecl
+xmlSAX2ProcessingInstruction
+xmlSAX2Reference
+xmlSAX2ResolveEntity
+xmlSAX2SetDocumentLocator
+xmlSAX2StartDocument
+xmlSAX2StartElement
+xmlSAX2StartElementNs
+xmlSAX2UnparsedEntityDecl
+xmlSAXParseFileWithData
+xmlSAXParseMemoryWithData
+xmlSAXUserParseFile
+xmlSAXUserParseMemory
+xmlSaveToIO
+xmlSchemaSetParserErrors
+xmlSchemaSetParserStructuredErrors
+xmlSchemaSetValidErrors
+xmlSchemaSetValidStructuredErrors
+xmlSchemaValidateSetLocator
+xmlSchemaValidateStream
+xmlSchemaValidityErrorFunc
+xmlSchemaValidityLocatorFunc
+xmlSchemaValidityWarningFunc
+xmlSchematronSetValidStructuredErrors
+xmlSchematronValidityErrorFunc
+xmlSchematronValidityWarningFunc
+xmlSetFeature
+xmlSetGenericErrorFunc
+xmlSetStructuredErrorFunc
+xmlStructuredErrorFunc
+xmlTextReaderErrorFunc
+xmlTextReaderSetErrorHandler
+xmlTextReaderSetStructuredErrorHandler
+xmlThrDefSetGenericErrorFunc
+xmlThrDefSetStructuredErrorFunc
+xmlValidityErrorFunc
+xmlValidityWarningFunc
+xmlXIncludeProcessFlagsData
+xmlXIncludeProcessTreeFlagsData
+xmlXPathFuncLookupFunc
+xmlXPathRegisterFuncLookup
+xmlXPathRegisterVariableLookup
+xmlXPathVariableLookupFunc
+xmlXPathWrapExternal
+

Type void **:

xmlModuleSymbol
+xmlRelaxNGGetParserErrors
+xmlRelaxNGGetValidErrors
+xmlSchemaGetParserErrors
+xmlSchemaGetValidErrors
+xmlSchemaSAXPlug
+xmlTextReaderGetErrorHandler
+

Type xlinkActuate *:

xlinkExtendedLinkFunk
+

Type xlinkHandlerPtr:

xlinkSetDefaultHandler
+

Type xlinkNodeDetectFunc:

xlinkSetDefaultDetect
+

Type xlinkShow *:

xlinkExtendedLinkFunk
+

Type xmlAttrPtr:

xmlAddID
+xmlAddRef
+xmlAttrSerializeTxtContent
+xmlCopyProp
+xmlCopyPropList
+xmlDebugDumpAttr
+xmlDebugDumpAttrList
+xmlFreeProp
+xmlFreePropList
+xmlIsID
+xmlIsRef
+xmlRemoveID
+xmlRemoveProp
+xmlRemoveRef
+xmlValidateOneAttribute
+

Type xmlAttributeDefault:

xmlAddAttributeDecl
+

Type xmlAttributePtr:

xmlDumpAttributeDecl
+xmlValidateAttributeDecl
+

Type xmlAttributeTablePtr:

xmlCopyAttributeTable
+xmlDumpAttributeTable
+xmlFreeAttributeTable
+

Type xmlAttributeType:

xmlAddAttributeDecl
+xmlValidateAttributeValue
+

Type xmlAutomataPtr:

xmlAutomataCompile
+xmlAutomataGetInitState
+xmlAutomataIsDeterminist
+xmlAutomataNewAllTrans
+xmlAutomataNewCountTrans
+xmlAutomataNewCountTrans2
+xmlAutomataNewCountedTrans
+xmlAutomataNewCounter
+xmlAutomataNewCounterTrans
+xmlAutomataNewEpsilon
+xmlAutomataNewNegTrans
+xmlAutomataNewOnceTrans
+xmlAutomataNewOnceTrans2
+xmlAutomataNewState
+xmlAutomataNewTransition
+xmlAutomataNewTransition2
+xmlAutomataSetFinalState
+xmlFreeAutomata
+

Type xmlAutomataStatePtr:

xmlAutomataNewAllTrans
+xmlAutomataNewCountTrans
+xmlAutomataNewCountTrans2
+xmlAutomataNewCountedTrans
+xmlAutomataNewCounterTrans
+xmlAutomataNewEpsilon
+xmlAutomataNewNegTrans
+xmlAutomataNewOnceTrans
+xmlAutomataNewOnceTrans2
+xmlAutomataNewTransition
+xmlAutomataNewTransition2
+xmlAutomataSetFinalState
+

Type xmlBufPtr:

xmlBufEnd
+xmlBufGetNodeContent
+xmlBufNodeDump
+xmlBufShrink
+

Type xmlBufferAllocationScheme:

xmlBufferSetAllocationScheme
+xmlSetBufferAllocationScheme
+xmlThrDefBufferAllocScheme
+

Type xmlBufferPtr:

htmlNodeDump
+xmlAttrSerializeTxtContent
+xmlBufferAdd
+xmlBufferAddHead
+xmlBufferCCat
+xmlBufferCat
+xmlBufferDetach
+xmlBufferDump
+xmlBufferEmpty
+xmlBufferFree
+xmlBufferGrow
+xmlBufferResize
+xmlBufferSetAllocationScheme
+xmlBufferShrink
+xmlBufferWriteCHAR
+xmlBufferWriteChar
+xmlBufferWriteQuotedString
+xmlCharEncFirstLine
+xmlCharEncInFunc
+xmlCharEncOutFunc
+xmlDumpAttributeDecl
+xmlDumpAttributeTable
+xmlDumpElementDecl
+xmlDumpElementTable
+xmlDumpEntitiesTable
+xmlDumpEntityDecl
+xmlDumpNotationDecl
+xmlDumpNotationTable
+xmlExpDump
+xmlNewTextWriterMemory
+xmlNodeBufGetContent
+xmlNodeDump
+xmlOutputBufferCreateBuffer
+xmlSaveToBuffer
+

Type xmlC14NIsVisibleCallback:

xmlC14NExecute
+

Type xmlCatalogAllow:

xmlCatalogSetDefaults
+

Type xmlCatalogPrefer:

xmlCatalogSetDefaultPrefer
+

Type xmlCatalogPtr:

xmlACatalogAdd
+xmlACatalogDump
+xmlACatalogRemove
+xmlACatalogResolve
+xmlACatalogResolvePublic
+xmlACatalogResolveSystem
+xmlACatalogResolveURI
+xmlCatalogIsEmpty
+xmlConvertSGMLCatalog
+xmlFreeCatalog
+

Type xmlChar:

xmlDecodeEntities
+xmlStrchr
+xmlStringDecodeEntities
+xmlStringLenDecodeEntities
+xmlTextWriterSetQuoteChar
+

Type xmlChar *:

checkNamespace
+docbParseDoc
+docbSAXParseDoc
+entityDecl
+entityDeclSAXFunc
+htmlParseDoc
+htmlSAXParseDoc
+xmlBuildQName
+xmlCopyChar
+xmlCopyCharMultiByte
+xmlHashCopier
+xmlHashDeallocator
+xmlHashScanner
+xmlNewDocNodeEatName
+xmlNewNodeEatName
+xmlNewNsPropEatName
+xmlParserInputDeallocate
+xmlSAX2EntityDecl
+xmlStrPrintf
+xmlStrVPrintf
+xmlStrcat
+xmlStrncat
+xmlXPathWrapString
+

Type xmlChar **:

htmlDocDumpMemory
+htmlDocDumpMemoryFormat
+xmlC14NDocDumpMemory
+xmlC14NDocSave
+xmlC14NDocSaveTo
+xmlC14NExecute
+xmlDocDumpFormatMemory
+xmlDocDumpFormatMemoryEnc
+xmlDocDumpMemory
+xmlDocDumpMemoryEnc
+xmlNamespaceParseQName
+xmlParseAttribute
+xmlParseDefaultDecl
+xmlParseEntityValue
+xmlParseExternalID
+xmlRegExecErrInfo
+xmlRegExecNextValues
+xmlSplitQName
+xmlSplitQName2
+

Type xmlCharEncoding:

docbCreatePushParserCtxt
+htmlCreatePushParserCtxt
+xmlAllocParserInputBuffer
+xmlCreateIOParserCtxt
+xmlGetCharEncodingHandler
+xmlGetCharEncodingName
+xmlIOParseDTD
+xmlNewIOInputStream
+xmlParserInputBufferCreateFd
+xmlParserInputBufferCreateFile
+xmlParserInputBufferCreateFilename
+xmlParserInputBufferCreateFilenameFunc
+xmlParserInputBufferCreateIO
+xmlParserInputBufferCreateMem
+xmlParserInputBufferCreateStatic
+xmlSchemaValidateStream
+xmlSwitchEncoding
+

Type xmlCharEncodingHandler *:

xmlCharEncCloseFunc
+xmlCharEncFirstLine
+xmlCharEncInFunc
+xmlCharEncOutFunc
+

Type xmlCharEncodingHandlerPtr:

xmlAllocOutputBuffer
+xmlOutputBufferCreateBuffer
+xmlOutputBufferCreateFd
+xmlOutputBufferCreateFile
+xmlOutputBufferCreateFilename
+xmlOutputBufferCreateFilenameFunc
+xmlOutputBufferCreateIO
+xmlRegisterCharEncodingHandler
+xmlSwitchInputEncoding
+xmlSwitchToEncoding
+

Type xmlCharEncodingInputFunc:

xmlNewCharEncodingHandler
+

Type xmlCharEncodingOutputFunc:

xmlNewCharEncodingHandler
+xmlOutputBufferWriteEscape
+xmlSaveSetAttrEscape
+xmlSaveSetEscape
+

Type xmlDOMWrapCtxtPtr:

xmlDOMWrapAcquireNsFunction
+xmlDOMWrapAdoptNode
+xmlDOMWrapCloneNode
+xmlDOMWrapFreeCtxt
+xmlDOMWrapReconcileNamespaces
+xmlDOMWrapRemoveNode
+

Type xmlDeregisterNodeFunc:

xmlDeregisterNodeDefault
+xmlThrDefDeregisterNodeDefault
+

Type xmlDict *:

xmlPatterncompile
+

Type xmlDictPtr:

xmlDictCreateSub
+xmlDictExists
+xmlDictFree
+xmlDictGetUsage
+xmlDictLookup
+xmlDictOwns
+xmlDictQLookup
+xmlDictReference
+xmlDictSetLimit
+xmlDictSize
+xmlExpNewCtxt
+xmlHashCreateDict
+

Type xmlDocPtr:

htmlDocContentDumpFormatOutput
+htmlDocContentDumpOutput
+htmlDocDump
+htmlDocDumpMemory
+htmlDocDumpMemoryFormat
+htmlNodeDump
+htmlNodeDumpFile
+htmlNodeDumpFileFormat
+htmlNodeDumpFormatOutput
+htmlNodeDumpOutput
+htmlSaveFile
+htmlSaveFileEnc
+htmlSaveFileFormat
+xlinkIsLink
+xmlAddDocEntity
+xmlAddDtdEntity
+xmlAddID
+xmlAddRef
+xmlAttrSerializeTxtContent
+xmlBufNodeDump
+xmlC14NDocDumpMemory
+xmlC14NDocSave
+xmlC14NDocSaveTo
+xmlC14NExecute
+xmlCopyDoc
+xmlCopyDocElementContent
+xmlCreateIntSubset
+xmlDOMWrapAdoptNode
+xmlDOMWrapCloneNode
+xmlDOMWrapRemoveNode
+xmlDebugCheckDocument
+xmlDebugDumpDocument
+xmlDebugDumpDocumentHead
+xmlDebugDumpEntities
+xmlDocCopyNode
+xmlDocCopyNodeList
+xmlDocDump
+xmlDocDumpFormatMemory
+xmlDocDumpFormatMemoryEnc
+xmlDocDumpMemory
+xmlDocDumpMemoryEnc
+xmlDocFormatDump
+xmlDocSetRootElement
+xmlElemDump
+xmlEncodeEntities
+xmlEncodeEntitiesReentrant
+xmlFreeDoc
+xmlFreeDocElementContent
+xmlGetDtdEntity
+xmlGetID
+xmlGetParameterEntity
+xmlGetRefs
+xmlIsID
+xmlIsMixedElement
+xmlIsRef
+xmlNewCDataBlock
+xmlNewCharRef
+xmlNewDocComment
+xmlNewDocElementContent
+xmlNewDocFragment
+xmlNewDocNode
+xmlNewDocNodeEatName
+xmlNewDocPI
+xmlNewDocProp
+xmlNewDocRawNode
+xmlNewDocTextLen
+xmlNewDtd
+xmlNewEntity
+xmlNewGlobalNs
+xmlNewTextWriterTree
+xmlNodeDump
+xmlNodeDumpOutput
+xmlNodeListGetString
+xmlParseBalancedChunkMemory
+xmlParseBalancedChunkMemoryRecover
+xmlParseExternalEntity
+xmlReaderNewWalker
+xmlReaderWalker
+xmlReconciliateNs
+xmlRelaxNGNewDocParserCtxt
+xmlRelaxNGValidateDoc
+xmlRelaxNGValidateFullElement
+xmlRelaxNGValidatePopElement
+xmlRelaxNGValidatePushElement
+xmlRemoveID
+xmlRemoveRef
+xmlSaveDoc
+xmlSaveFile
+xmlSaveFileEnc
+xmlSaveFileTo
+xmlSaveFormatFile
+xmlSaveFormatFileEnc
+xmlSaveFormatFileTo
+xmlSchemaNewDocParserCtxt
+xmlSchemaValidateDoc
+xmlSchematronNewDocParserCtxt
+xmlSchematronValidateDoc
+xmlSearchNs
+xmlSearchNsByHref
+xmlSetDocCompressMode
+xmlSetListDoc
+xmlSetTreeDoc
+xmlShell
+xmlValidCtxtNormalizeAttributeValue
+xmlValidNormalizeAttributeValue
+xmlValidateAttributeDecl
+xmlValidateDocument
+xmlValidateDocumentFinal
+xmlValidateDtd
+xmlValidateDtdFinal
+xmlValidateElement
+xmlValidateElementDecl
+xmlValidateNotationDecl
+xmlValidateNotationUse
+xmlValidateOneAttribute
+xmlValidateOneElement
+xmlValidateOneNamespace
+xmlValidatePopElement
+xmlValidatePushElement
+xmlValidateRoot
+xmlXIncludeNewContext
+xmlXIncludeProcess
+xmlXIncludeProcessFlags
+xmlXIncludeProcessFlagsData
+xmlXPathNewContext
+xmlXPathOrderDocElems
+xmlXPtrNewContext
+

Type xmlDocPtr *:

xmlNewTextWriterDoc
+

Type xmlDtdPtr:

xmlAddAttributeDecl
+xmlAddElementDecl
+xmlAddNotationDecl
+xmlCopyDtd
+xmlDebugDumpDTD
+xmlFreeDtd
+xmlGetDtdAttrDesc
+xmlGetDtdElementDesc
+xmlGetDtdNotationDesc
+xmlGetDtdQAttrDesc
+xmlGetDtdQElementDesc
+xmlValidateDtd
+

Type xmlElementContent *:

xmlValidGetPotentialChildren
+

Type xmlElementContentPtr:

elementDecl
+elementDeclSAXFunc
+xmlAddElementDecl
+xmlCopyDocElementContent
+xmlCopyElementContent
+xmlFreeDocElementContent
+xmlFreeElementContent
+xmlSAX2ElementDecl
+xmlSnprintfElementContent
+xmlSprintfElementContent
+

Type xmlElementContentPtr *:

xmlParseElementContentDecl
+

Type xmlElementContentType:

xmlNewDocElementContent
+xmlNewElementContent
+

Type xmlElementPtr:

xmlDumpElementDecl
+xmlValidBuildContentModel
+xmlValidateElementDecl
+

Type xmlElementTablePtr:

xmlCopyElementTable
+xmlDumpElementTable
+xmlFreeElementTable
+

Type xmlElementTypeVal:

xmlAddElementDecl
+

Type xmlEntitiesTablePtr:

xmlCopyEntitiesTable
+xmlDumpEntitiesTable
+xmlFreeEntitiesTable
+

Type xmlEntityPtr:

xmlDumpEntityDecl
+xmlEntityReferenceFunc
+xmlHandleEntity
+xmlNewEntityInputStream
+

Type xmlEntityReferenceFunc:

xmlSetEntityReferenceFunc
+

Type xmlEnumerationPtr:

attributeDecl
+attributeDeclSAXFunc
+xmlAddAttributeDecl
+xmlCopyEnumeration
+xmlFreeEnumeration
+xmlSAX2AttributeDecl
+

Type xmlEnumerationPtr *:

xmlParseAttributeType
+xmlParseEnumeratedType
+

Type xmlErrorPtr:

xmlCopyError
+xmlResetError
+xmlStructuredErrorFunc
+

Type xmlExpCtxtPtr:

xmlExpCtxtNbCons
+xmlExpCtxtNbNodes
+xmlExpExpDerive
+xmlExpFree
+xmlExpFreeCtxt
+xmlExpGetLanguage
+xmlExpGetStart
+xmlExpNewAtom
+xmlExpNewOr
+xmlExpNewRange
+xmlExpNewSeq
+xmlExpParse
+xmlExpStringDerive
+xmlExpSubsume
+

Type xmlExpNodePtr:

xmlExpDump
+xmlExpExpDerive
+xmlExpFree
+xmlExpGetLanguage
+xmlExpGetStart
+xmlExpIsNillable
+xmlExpMaxToken
+xmlExpNewOr
+xmlExpNewRange
+xmlExpNewSeq
+xmlExpRef
+xmlExpStringDerive
+xmlExpSubsume
+

Type xmlExternalEntityLoader:

xmlSetExternalEntityLoader
+

Type xmlFeature:

xmlHasFeature
+

Type xmlFreeFunc:

xmlGcMemSetup
+xmlMemSetup
+

Type xmlFreeFunc *:

xmlGcMemGet
+xmlMemGet
+

Type xmlGenericErrorFunc:

xmlSetGenericErrorFunc
+xmlThrDefSetGenericErrorFunc
+

Type xmlGenericErrorFunc *:

initGenericErrorDefaultFunc
+

Type xmlGlobalStatePtr:

xmlInitializeGlobalState
+

Type xmlHashCopier:

xmlHashCopy
+

Type xmlHashDeallocator:

xmlHashFree
+xmlHashRemoveEntry
+xmlHashRemoveEntry2
+xmlHashRemoveEntry3
+xmlHashUpdateEntry
+xmlHashUpdateEntry2
+xmlHashUpdateEntry3
+

Type xmlHashScanner:

xmlHashScan
+xmlHashScan3
+

Type xmlHashScannerFull:

xmlHashScanFull
+xmlHashScanFull3
+

Type xmlHashTablePtr:

xmlHashAddEntry
+xmlHashAddEntry2
+xmlHashAddEntry3
+xmlHashCopy
+xmlHashFree
+xmlHashLookup
+xmlHashLookup2
+xmlHashLookup3
+xmlHashQLookup
+xmlHashQLookup2
+xmlHashQLookup3
+xmlHashRemoveEntry
+xmlHashRemoveEntry2
+xmlHashRemoveEntry3
+xmlHashScan
+xmlHashScan3
+xmlHashScanFull
+xmlHashScanFull3
+xmlHashSize
+xmlHashUpdateEntry
+xmlHashUpdateEntry2
+xmlHashUpdateEntry3
+

Type xmlIDTablePtr:

xmlFreeIDTable
+

Type xmlInputCloseCallback:

htmlCtxtReadIO
+htmlReadIO
+xmlCreateIOParserCtxt
+xmlCtxtReadIO
+xmlParserInputBufferCreateIO
+xmlReadIO
+xmlReaderForIO
+xmlReaderNewIO
+xmlRegisterInputCallbacks
+

Type xmlInputMatchCallback:

xmlRegisterInputCallbacks
+

Type xmlInputOpenCallback:

xmlRegisterInputCallbacks
+

Type xmlInputReadCallback:

htmlCtxtReadIO
+htmlReadIO
+xmlCreateIOParserCtxt
+xmlCtxtReadIO
+xmlParserInputBufferCreateIO
+xmlReadIO
+xmlReaderForIO
+xmlReaderNewIO
+xmlRegisterInputCallbacks
+

Type xmlLinkPtr:

xmlLinkGetData
+xmlListDeallocator
+

Type xmlListDataCompare:

xmlListCreate
+

Type xmlListDeallocator:

xmlListCreate
+

Type xmlListPtr:

xmlListAppend
+xmlListClear
+xmlListCopy
+xmlListDelete
+xmlListEmpty
+xmlListEnd
+xmlListFront
+xmlListInsert
+xmlListMerge
+xmlListPopBack
+xmlListPopFront
+xmlListPushBack
+xmlListPushFront
+xmlListRemoveAll
+xmlListRemoveFirst
+xmlListRemoveLast
+xmlListReverse
+xmlListReverseSearch
+xmlListReverseWalk
+xmlListSearch
+xmlListSize
+xmlListSort
+xmlListWalk
+

Type xmlListWalker:

xmlListReverseWalk
+xmlListWalk
+

Type xmlLocationSetPtr:

xmlXPtrFreeLocationSet
+xmlXPtrLocationSetAdd
+xmlXPtrLocationSetDel
+xmlXPtrLocationSetMerge
+xmlXPtrLocationSetRemove
+xmlXPtrWrapLocationSet
+

Type xmlMallocFunc:

xmlGcMemSetup
+xmlMemSetup
+

Type xmlMallocFunc *:

xmlGcMemGet
+xmlMemGet
+

Type xmlModulePtr:

xmlModuleClose
+xmlModuleFree
+xmlModuleSymbol
+

Type xmlMutexPtr:

xmlFreeMutex
+xmlMutexLock
+xmlMutexUnlock
+

Type xmlNode *:

xmlValidGetValidElements
+

Type xmlNodePtr:

htmlNodeDump
+htmlNodeDumpFile
+htmlNodeDumpFileFormat
+htmlNodeDumpFormatOutput
+htmlNodeDumpOutput
+nodePush
+xlinkExtendedLinkFunk
+xlinkExtendedLinkSetFunk
+xlinkIsLink
+xlinkNodeDetectFunc
+xlinkSimpleLinkFunk
+xmlAddChild
+xmlAddChildList
+xmlAddNextSibling
+xmlAddPrevSibling
+xmlAddSibling
+xmlBufNodeDump
+xmlC14NIsVisibleCallback
+xmlChildElementCount
+xmlCopyNode
+xmlCopyNodeList
+xmlCopyProp
+xmlCopyPropList
+xmlDOMWrapAcquireNsFunction
+xmlDOMWrapAdoptNode
+xmlDOMWrapCloneNode
+xmlDOMWrapReconcileNamespaces
+xmlDOMWrapRemoveNode
+xmlDebugDumpNode
+xmlDebugDumpNodeList
+xmlDebugDumpOneNode
+xmlDeregisterNodeFunc
+xmlDocCopyNode
+xmlDocCopyNodeList
+xmlDocSetRootElement
+xmlElemDump
+xmlEntityReferenceFunc
+xmlFirstElementChild
+xmlFreeNode
+xmlFreeNodeList
+xmlIsID
+xmlIsRef
+xmlLastElementChild
+xmlLsCountNode
+xmlLsOneNode
+xmlNewChild
+xmlNewNs
+xmlNewNsProp
+xmlNewNsPropEatName
+xmlNewProp
+xmlNewTextChild
+xmlNewTextWriterTree
+xmlNextElementSibling
+xmlNodeAddContent
+xmlNodeAddContentLen
+xmlNodeDump
+xmlNodeDumpOutput
+xmlNodeSetBase
+xmlNodeSetContent
+xmlNodeSetContentLen
+xmlNodeSetLang
+xmlNodeSetName
+xmlNodeSetSpacePreserve
+xmlParseInNodeContext
+xmlPatternMatch
+xmlPreviousElementSibling
+xmlReconciliateNs
+xmlRegisterNodeFunc
+xmlRelaxNGValidateFullElement
+xmlRelaxNGValidatePopElement
+xmlRelaxNGValidatePushElement
+xmlReplaceNode
+xmlSaveTree
+xmlSchemaValPredefTypeNode
+xmlSchemaValPredefTypeNodeNoNorm
+xmlSchemaValidateOneElement
+xmlSearchNs
+xmlSearchNsByHref
+xmlSetListDoc
+xmlSetNs
+xmlSetNsProp
+xmlSetProp
+xmlSetTreeDoc
+xmlShellBase
+xmlShellCat
+xmlShellCmd
+xmlShellDir
+xmlShellDu
+xmlShellList
+xmlShellLoad
+xmlShellPrintNode
+xmlShellPwd
+xmlShellSave
+xmlShellValidate
+xmlShellWrite
+xmlTextConcat
+xmlTextMerge
+xmlUnlinkNode
+xmlUnsetNsProp
+xmlUnsetProp
+xmlValidCtxtNormalizeAttributeValue
+xmlValidNormalizeAttributeValue
+xmlValidateElement
+xmlValidateOneAttribute
+xmlValidateOneElement
+xmlValidateOneNamespace
+xmlValidatePopElement
+xmlValidatePushElement
+xmlXIncludeProcessNode
+xmlXIncludeProcessTree
+xmlXIncludeProcessTreeFlags
+xmlXIncludeProcessTreeFlagsData
+xmlXPathCastNodeToNumber
+xmlXPathCastNodeToString
+xmlXPathCmpNodes
+xmlXPathNewNodeSet
+xmlXPathNewValueTree
+xmlXPathNextAncestor
+xmlXPathNextAncestorOrSelf
+xmlXPathNextAttribute
+xmlXPathNextChild
+xmlXPathNextDescendant
+xmlXPathNextDescendantOrSelf
+xmlXPathNextFollowing
+xmlXPathNextFollowingSibling
+xmlXPathNextNamespace
+xmlXPathNextParent
+xmlXPathNextPreceding
+xmlXPathNextPrecedingSibling
+xmlXPathNextSelf
+xmlXPathNodeEval
+xmlXPathNodeLeading
+xmlXPathNodeLeadingSorted
+xmlXPathNodeSetAdd
+xmlXPathNodeSetAddNs
+xmlXPathNodeSetAddUnique
+xmlXPathNodeSetContains
+xmlXPathNodeSetCreate
+xmlXPathNodeSetDel
+xmlXPathNodeTrailing
+xmlXPathNodeTrailingSorted
+xmlXPathSetContextNode
+xmlXPtrNewCollapsedRange
+xmlXPtrNewContext
+xmlXPtrNewLocationSetNodes
+xmlXPtrNewRange
+xmlXPtrNewRangeNodeObject
+xmlXPtrNewRangeNodePoint
+xmlXPtrNewRangeNodes
+xmlXPtrNewRangePointNode
+

Type xmlNodePtr *:

xmlDOMWrapCloneNode
+xmlParseBalancedChunkMemory
+xmlParseBalancedChunkMemoryRecover
+xmlParseCtxtExternalEntity
+xmlParseExternalEntity
+xmlParseInNodeContext
+

Type xmlNodeSetPtr:

xmlC14NDocDumpMemory
+xmlC14NDocSave
+xmlC14NDocSaveTo
+xmlXPathCastNodeSetToBoolean
+xmlXPathCastNodeSetToNumber
+xmlXPathCastNodeSetToString
+xmlXPathDifference
+xmlXPathDistinct
+xmlXPathDistinctSorted
+xmlXPathFreeNodeSet
+xmlXPathHasSameNodes
+xmlXPathIntersection
+xmlXPathLeading
+xmlXPathLeadingSorted
+xmlXPathNewNodeSetList
+xmlXPathNodeLeading
+xmlXPathNodeLeadingSorted
+xmlXPathNodeSetAdd
+xmlXPathNodeSetAddNs
+xmlXPathNodeSetAddUnique
+xmlXPathNodeSetContains
+xmlXPathNodeSetDel
+xmlXPathNodeSetMerge
+xmlXPathNodeSetRemove
+xmlXPathNodeSetSort
+xmlXPathNodeTrailing
+xmlXPathNodeTrailingSorted
+xmlXPathTrailing
+xmlXPathTrailingSorted
+xmlXPathWrapNodeSet
+xmlXPtrNewLocationSetNodeSet
+

Type xmlNotationPtr:

xmlDumpNotationDecl
+xmlValidateNotationDecl
+

Type xmlNotationTablePtr:

xmlCopyNotationTable
+xmlDumpNotationTable
+xmlFreeNotationTable
+

Type xmlNsPtr:

xmlCopyNamespace
+xmlCopyNamespaceList
+xmlFreeNs
+xmlFreeNsList
+xmlNewChild
+xmlNewDocNode
+xmlNewDocNodeEatName
+xmlNewDocRawNode
+xmlNewNode
+xmlNewNodeEatName
+xmlNewNsProp
+xmlNewNsPropEatName
+xmlNewTextChild
+xmlSetNs
+xmlSetNsProp
+xmlUnsetNsProp
+xmlValidateOneNamespace
+xmlXPathNodeSetAddNs
+xmlXPathNodeSetFreeNs
+

Type xmlOutputBufferCreateFilenameFunc:

xmlOutputBufferCreateFilenameDefault
+xmlThrDefOutputBufferCreateFilenameDefault
+

Type xmlOutputBufferPtr:

htmlDocContentDumpFormatOutput
+htmlDocContentDumpOutput
+htmlNodeDumpFormatOutput
+htmlNodeDumpOutput
+xmlC14NDocSaveTo
+xmlC14NExecute
+xmlNewTextWriter
+xmlNodeDumpOutput
+xmlOutputBufferClose
+xmlOutputBufferFlush
+xmlOutputBufferGetContent
+xmlOutputBufferGetSize
+xmlOutputBufferWrite
+xmlOutputBufferWriteEscape
+xmlOutputBufferWriteString
+xmlSaveFileTo
+xmlSaveFormatFileTo
+

Type xmlOutputCloseCallback:

xmlOutputBufferCreateIO
+xmlRegisterOutputCallbacks
+xmlSaveToIO
+

Type xmlOutputMatchCallback:

xmlRegisterOutputCallbacks
+

Type xmlOutputOpenCallback:

xmlRegisterOutputCallbacks
+

Type xmlOutputWriteCallback:

xmlOutputBufferCreateIO
+xmlRegisterOutputCallbacks
+xmlSaveToIO
+

Type xmlParserCtxtPtr:

inputPop
+inputPush
+namePop
+namePush
+nodePop
+nodePush
+xmlByteConsumed
+xmlCheckHTTPInput
+xmlClearParserCtxt
+xmlCtxtReadDoc
+xmlCtxtReadFd
+xmlCtxtReadFile
+xmlCtxtReadIO
+xmlCtxtReadMemory
+xmlCtxtReset
+xmlCtxtResetPush
+xmlCtxtUseOptions
+xmlCurrentChar
+xmlDecodeEntities
+xmlErrMemory
+xmlExternalEntityLoader
+xmlFreeParserCtxt
+xmlGetFeature
+xmlHandleEntity
+xmlInitParserCtxt
+xmlLoadExternalEntity
+xmlNamespaceParseNCName
+xmlNamespaceParseNSDef
+xmlNamespaceParseQName
+xmlNewEntityInputStream
+xmlNewIOInputStream
+xmlNewInputFromFile
+xmlNewInputStream
+xmlNewStringInputStream
+xmlNewTextWriterPushParser
+xmlNextChar
+xmlNoNetExternalEntityLoader
+xmlParseAttValue
+xmlParseAttribute
+xmlParseAttributeListDecl
+xmlParseAttributeType
+xmlParseCDSect
+xmlParseCharData
+xmlParseCharRef
+xmlParseChunk
+xmlParseComment
+xmlParseContent
+xmlParseCtxtExternalEntity
+xmlParseDefaultDecl
+xmlParseDocTypeDecl
+xmlParseDocument
+xmlParseElement
+xmlParseElementChildrenContentDecl
+xmlParseElementContentDecl
+xmlParseElementDecl
+xmlParseElementMixedContentDecl
+xmlParseEncName
+xmlParseEncodingDecl
+xmlParseEndTag
+xmlParseEntityDecl
+xmlParseEntityRef
+xmlParseEntityValue
+xmlParseEnumeratedType
+xmlParseEnumerationType
+xmlParseExtParsedEnt
+xmlParseExternalID
+xmlParseExternalSubset
+xmlParseMarkupDecl
+xmlParseMisc
+xmlParseName
+xmlParseNamespace
+xmlParseNmtoken
+xmlParseNotationDecl
+xmlParseNotationType
+xmlParsePEReference
+xmlParsePI
+xmlParsePITarget
+xmlParsePubidLiteral
+xmlParseQuotedString
+xmlParseReference
+xmlParseSDDecl
+xmlParseStartTag
+xmlParseSystemLiteral
+xmlParseTextDecl
+xmlParseVersionInfo
+xmlParseVersionNum
+xmlParseXMLDecl
+xmlParserAddNodeInfo
+xmlParserHandlePEReference
+xmlParserHandleReference
+xmlPopInput
+xmlPushInput
+xmlScanName
+xmlSetFeature
+xmlSetupParserForBuffer
+xmlSkipBlankChars
+xmlSplitQName
+xmlStopParser
+xmlStringCurrentChar
+xmlStringDecodeEntities
+xmlStringLenDecodeEntities
+xmlSwitchEncoding
+xmlSwitchInputEncoding
+xmlSwitchToEncoding
+

Type xmlParserInputBufferCreateFilenameFunc:

xmlParserInputBufferCreateFilenameDefault
+xmlThrDefParserInputBufferCreateFilenameDefault
+

Type xmlParserInputBufferPtr:

xmlFreeParserInputBuffer
+xmlIOParseDTD
+xmlNewIOInputStream
+xmlNewTextReader
+xmlParserInputBufferGrow
+xmlParserInputBufferPush
+xmlParserInputBufferRead
+xmlSchemaValidateStream
+xmlTextReaderSetup
+

Type xmlParserInputPtr:

inputPush
+xmlCheckHTTPInput
+xmlFreeInputStream
+xmlParserInputGrow
+xmlParserInputRead
+xmlParserInputShrink
+xmlParserPrintFileContext
+xmlParserPrintFileInfo
+xmlPushInput
+xmlSwitchInputEncoding
+

Type xmlParserNodeInfoSeqPtr:

xmlClearNodeInfoSeq
+xmlInitNodeInfoSeq
+

Type xmlParserSeverities:

xmlTextReaderErrorFunc
+

Type xmlPatternPtr:

xmlFreePattern
+xmlFreePatternList
+xmlPatternFromRoot
+xmlPatternGetStreamCtxt
+xmlPatternMatch
+xmlPatternMaxDepth
+xmlPatternMinDepth
+xmlPatternStreamable
+

Type xmlRMutexPtr:

xmlFreeRMutex
+xmlRMutexLock
+xmlRMutexUnlock
+

Type xmlReallocFunc:

xmlGcMemSetup
+xmlMemSetup
+

Type xmlReallocFunc *:

xmlGcMemGet
+xmlMemGet
+

Type xmlRefTablePtr:

xmlFreeRefTable
+

Type xmlRegExecCallbacks:

xmlRegNewExecCtxt
+

Type xmlRegExecCtxtPtr:

xmlRegExecCallbacks
+xmlRegExecErrInfo
+xmlRegExecNextValues
+xmlRegExecPushString
+xmlRegExecPushString2
+xmlRegFreeExecCtxt
+

Type xmlRegexpPtr:

xmlRegFreeRegexp
+xmlRegNewExecCtxt
+xmlRegexpExec
+xmlRegexpIsDeterminist
+xmlRegexpPrint
+

Type xmlRegisterNodeFunc:

xmlRegisterNodeDefault
+xmlThrDefRegisterNodeDefault
+

Type xmlRelaxNGParserCtxtPtr:

xmlRelaxNGFreeParserCtxt
+xmlRelaxNGGetParserErrors
+xmlRelaxNGParse
+xmlRelaxNGSetParserErrors
+xmlRelaxNGSetParserStructuredErrors
+xmlRelaxParserSetFlag
+

Type xmlRelaxNGPtr:

xmlRelaxNGDump
+xmlRelaxNGDumpTree
+xmlRelaxNGFree
+xmlRelaxNGNewValidCtxt
+xmlTextReaderRelaxNGSetSchema
+

Type xmlRelaxNGValidCtxtPtr:

xmlRelaxNGFreeValidCtxt
+xmlRelaxNGGetValidErrors
+xmlRelaxNGSetValidErrors
+xmlRelaxNGSetValidStructuredErrors
+xmlRelaxNGValidateDoc
+xmlRelaxNGValidateFullElement
+xmlRelaxNGValidatePopElement
+xmlRelaxNGValidatePushCData
+xmlRelaxNGValidatePushElement
+xmlTextReaderRelaxNGValidateCtxt
+

Type xmlRelaxNGValidityErrorFunc:

xmlRelaxNGSetParserErrors
+xmlRelaxNGSetValidErrors
+

Type xmlRelaxNGValidityErrorFunc *:

xmlRelaxNGGetParserErrors
+xmlRelaxNGGetValidErrors
+

Type xmlRelaxNGValidityWarningFunc:

xmlRelaxNGSetParserErrors
+xmlRelaxNGSetValidErrors
+

Type xmlRelaxNGValidityWarningFunc *:

xmlRelaxNGGetParserErrors
+xmlRelaxNGGetValidErrors
+

Type xmlSAXHandler *:

xmlSAX2InitDefaultSAXHandler
+xmlSAX2InitDocbDefaultSAXHandler
+xmlSAX2InitHtmlDefaultSAXHandler
+xmlSAXVersion
+

Type xmlSAXHandlerPtr:

xmlCreateIOParserCtxt
+xmlCreatePushParserCtxt
+xmlIOParseDTD
+xmlParseBalancedChunkMemory
+xmlParseBalancedChunkMemoryRecover
+xmlParseExternalEntity
+xmlSAXParseDTD
+xmlSAXParseDoc
+xmlSAXParseEntity
+xmlSAXParseFile
+xmlSAXParseFileWithData
+xmlSAXParseMemory
+xmlSAXParseMemoryWithData
+xmlSAXUserParseFile
+xmlSAXUserParseMemory
+xmlSchemaValidateStream
+

Type xmlSAXHandlerPtr *:

xmlSchemaSAXPlug
+

Type xmlSAXHandlerV1 *:

initdocbDefaultSAXHandler
+inithtmlDefaultSAXHandler
+initxmlDefaultSAXHandler
+

Type xmlSAXLocatorPtr:

setDocumentLocator
+setDocumentLocatorSAXFunc
+xmlSAX2SetDocumentLocator
+

Type xmlSaveCtxtPtr:

xmlSaveClose
+xmlSaveDoc
+xmlSaveFlush
+xmlSaveSetAttrEscape
+xmlSaveSetEscape
+xmlSaveTree
+

Type xmlSchemaFacetPtr:

xmlSchemaCheckFacet
+xmlSchemaFreeFacet
+xmlSchemaGetFacetValueAsULong
+xmlSchemaValidateFacet
+xmlSchemaValidateFacetWhtsp
+xmlSchemaValidateLengthFacet
+xmlSchemaValidateLengthFacetWhtsp
+xmlSchemaValidateListSimpleTypeFacet
+

Type xmlSchemaParserCtxtPtr:

xmlSchemaCheckFacet
+xmlSchemaFreeParserCtxt
+xmlSchemaGetParserErrors
+xmlSchemaParse
+xmlSchemaSetParserErrors
+xmlSchemaSetParserStructuredErrors
+

Type xmlSchemaPtr:

xmlSchemaDump
+xmlSchemaFree
+xmlSchemaNewValidCtxt
+xmlTextReaderSetSchema
+

Type xmlSchemaSAXPlugPtr:

xmlSchemaSAXUnplug
+

Type xmlSchemaTypePtr:

xmlSchemaCheckFacet
+xmlSchemaFreeType
+xmlSchemaGetBuiltInListSimpleTypeItemType
+xmlSchemaIsBuiltInTypeFacet
+xmlSchemaValPredefTypeNode
+xmlSchemaValPredefTypeNodeNoNorm
+xmlSchemaValidateFacet
+xmlSchemaValidateLengthFacet
+xmlSchemaValidatePredefinedType
+

Type xmlSchemaValPtr:

xmlSchemaCompareValues
+xmlSchemaCompareValuesWhtsp
+xmlSchemaCopyValue
+xmlSchemaFreeValue
+xmlSchemaGetCanonValue
+xmlSchemaGetCanonValueWhtsp
+xmlSchemaGetValType
+xmlSchemaValidateFacet
+xmlSchemaValidateFacetWhtsp
+xmlSchemaValidateLengthFacet
+xmlSchemaValidateLengthFacetWhtsp
+xmlSchemaValueAppend
+xmlSchemaValueGetAsBoolean
+xmlSchemaValueGetAsString
+xmlSchemaValueGetNext
+

Type xmlSchemaValPtr *:

xmlSchemaValPredefTypeNode
+xmlSchemaValPredefTypeNodeNoNorm
+xmlSchemaValidatePredefinedType
+

Type xmlSchemaValType:

xmlSchemaGetBuiltInType
+xmlSchemaNewStringValue
+xmlSchemaValidateFacetWhtsp
+xmlSchemaValidateLengthFacetWhtsp
+

Type xmlSchemaValidCtxtPtr:

xmlSchemaFreeValidCtxt
+xmlSchemaGetValidErrors
+xmlSchemaIsValid
+xmlSchemaSAXPlug
+xmlSchemaSetValidErrors
+xmlSchemaSetValidOptions
+xmlSchemaSetValidStructuredErrors
+xmlSchemaValidCtxtGetOptions
+xmlSchemaValidCtxtGetParserCtxt
+xmlSchemaValidateDoc
+xmlSchemaValidateFile
+xmlSchemaValidateOneElement
+xmlSchemaValidateSetFilename
+xmlSchemaValidateSetLocator
+xmlSchemaValidateStream
+xmlTextReaderSchemaValidateCtxt
+

Type xmlSchemaValidityErrorFunc:

xmlSchemaSetParserErrors
+xmlSchemaSetValidErrors
+

Type xmlSchemaValidityErrorFunc *:

xmlSchemaGetParserErrors
+xmlSchemaGetValidErrors
+

Type xmlSchemaValidityLocatorFunc:

xmlSchemaValidateSetLocator
+

Type xmlSchemaValidityWarningFunc:

xmlSchemaSetParserErrors
+xmlSchemaSetValidErrors
+

Type xmlSchemaValidityWarningFunc *:

xmlSchemaGetParserErrors
+xmlSchemaGetValidErrors
+

Type xmlSchemaWhitespaceValueType:

xmlSchemaCompareValuesWhtsp
+xmlSchemaGetCanonValueWhtsp
+xmlSchemaValidateFacetWhtsp
+xmlSchemaValidateLengthFacetWhtsp
+

Type xmlSchemaWildcardPtr:

xmlSchemaFreeWildcard
+

Type xmlSchematronParserCtxtPtr:

xmlSchematronFreeParserCtxt
+xmlSchematronParse
+

Type xmlSchematronPtr:

xmlSchematronFree
+xmlSchematronNewValidCtxt
+

Type xmlSchematronValidCtxtPtr:

xmlSchematronFreeValidCtxt
+xmlSchematronSetValidStructuredErrors
+xmlSchematronValidateDoc
+

Type xmlShellCtxtPtr:

xmlShellBase
+xmlShellCat
+xmlShellCmd
+xmlShellDir
+xmlShellDu
+xmlShellList
+xmlShellLoad
+xmlShellPwd
+xmlShellSave
+xmlShellValidate
+xmlShellWrite
+

Type xmlShellReadlineFunc:

xmlShell
+

Type xmlStrdupFunc:

xmlGcMemSetup
+xmlMemSetup
+

Type xmlStrdupFunc *:

xmlGcMemGet
+xmlMemGet
+

Type xmlStreamCtxtPtr:

xmlFreeStreamCtxt
+xmlStreamPop
+xmlStreamPush
+xmlStreamPushAttr
+xmlStreamPushNode
+xmlStreamWantsAnyNode
+

Type xmlStructuredErrorFunc:

xmlRelaxNGSetParserStructuredErrors
+xmlRelaxNGSetValidStructuredErrors
+xmlSchemaSetParserStructuredErrors
+xmlSchemaSetValidStructuredErrors
+xmlSchematronSetValidStructuredErrors
+xmlSetStructuredErrorFunc
+xmlTextReaderSetStructuredErrorHandler
+xmlThrDefSetStructuredErrorFunc
+

Type xmlTextReaderErrorFunc:

xmlTextReaderSetErrorHandler
+

Type xmlTextReaderErrorFunc *:

xmlTextReaderGetErrorHandler
+

Type xmlTextReaderLocatorPtr:

xmlTextReaderErrorFunc
+xmlTextReaderLocatorBaseURI
+xmlTextReaderLocatorLineNumber
+

Type xmlTextReaderPtr:

xmlFreeTextReader
+xmlReaderNewDoc
+xmlReaderNewFd
+xmlReaderNewFile
+xmlReaderNewIO
+xmlReaderNewMemory
+xmlReaderNewWalker
+xmlTextReaderAttributeCount
+xmlTextReaderBaseUri
+xmlTextReaderByteConsumed
+xmlTextReaderClose
+xmlTextReaderConstBaseUri
+xmlTextReaderConstEncoding
+xmlTextReaderConstLocalName
+xmlTextReaderConstName
+xmlTextReaderConstNamespaceUri
+xmlTextReaderConstPrefix
+xmlTextReaderConstString
+xmlTextReaderConstValue
+xmlTextReaderConstXmlLang
+xmlTextReaderConstXmlVersion
+xmlTextReaderCurrentDoc
+xmlTextReaderCurrentNode
+xmlTextReaderDepth
+xmlTextReaderExpand
+xmlTextReaderGetAttribute
+xmlTextReaderGetAttributeNo
+xmlTextReaderGetAttributeNs
+xmlTextReaderGetErrorHandler
+xmlTextReaderGetParserColumnNumber
+xmlTextReaderGetParserLineNumber
+xmlTextReaderGetParserProp
+xmlTextReaderGetRemainder
+xmlTextReaderHasAttributes
+xmlTextReaderHasValue
+xmlTextReaderIsDefault
+xmlTextReaderIsEmptyElement
+xmlTextReaderIsNamespaceDecl
+xmlTextReaderIsValid
+xmlTextReaderLocalName
+xmlTextReaderLookupNamespace
+xmlTextReaderMoveToAttribute
+xmlTextReaderMoveToAttributeNo
+xmlTextReaderMoveToAttributeNs
+xmlTextReaderMoveToElement
+xmlTextReaderMoveToFirstAttribute
+xmlTextReaderMoveToNextAttribute
+xmlTextReaderName
+xmlTextReaderNamespaceUri
+xmlTextReaderNext
+xmlTextReaderNextSibling
+xmlTextReaderNodeType
+xmlTextReaderNormalization
+xmlTextReaderPrefix
+xmlTextReaderPreserve
+xmlTextReaderPreservePattern
+xmlTextReaderQuoteChar
+xmlTextReaderRead
+xmlTextReaderReadAttributeValue
+xmlTextReaderReadInnerXml
+xmlTextReaderReadOuterXml
+xmlTextReaderReadState
+xmlTextReaderReadString
+xmlTextReaderRelaxNGSetSchema
+xmlTextReaderRelaxNGValidate
+xmlTextReaderRelaxNGValidateCtxt
+xmlTextReaderSchemaValidate
+xmlTextReaderSchemaValidateCtxt
+xmlTextReaderSetErrorHandler
+xmlTextReaderSetParserProp
+xmlTextReaderSetSchema
+xmlTextReaderSetStructuredErrorHandler
+xmlTextReaderSetup
+xmlTextReaderStandalone
+xmlTextReaderValue
+xmlTextReaderXmlLang
+

Type xmlTextWriterPtr:

xmlFreeTextWriter
+xmlTextWriterEndAttribute
+xmlTextWriterEndCDATA
+xmlTextWriterEndComment
+xmlTextWriterEndDTD
+xmlTextWriterEndDTDAttlist
+xmlTextWriterEndDTDElement
+xmlTextWriterEndDTDEntity
+xmlTextWriterEndDocument
+xmlTextWriterEndElement
+xmlTextWriterEndPI
+xmlTextWriterFlush
+xmlTextWriterFullEndElement
+xmlTextWriterSetIndent
+xmlTextWriterSetIndentString
+xmlTextWriterSetQuoteChar
+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
+

Type xmlURIPtr:

xmlFreeURI
+xmlParseURIReference
+xmlPrintURI
+xmlSaveUri
+

Type xmlValidCtxtPtr:

xmlAddAttributeDecl
+xmlAddElementDecl
+xmlAddID
+xmlAddNotationDecl
+xmlAddRef
+xmlFreeValidCtxt
+xmlValidBuildContentModel
+xmlValidCtxtNormalizeAttributeValue
+xmlValidateAttributeDecl
+xmlValidateDocument
+xmlValidateDocumentFinal
+xmlValidateDtd
+xmlValidateDtdFinal
+xmlValidateElement
+xmlValidateElementDecl
+xmlValidateNotationDecl
+xmlValidateNotationUse
+xmlValidateOneAttribute
+xmlValidateOneElement
+xmlValidateOneNamespace
+xmlValidatePopElement
+xmlValidatePushCData
+xmlValidatePushElement
+xmlValidateRoot
+

Type xmlXIncludeCtxtPtr:

xmlXIncludeFreeContext
+xmlXIncludeProcessNode
+xmlXIncludeSetFlags
+

Type xmlXPathCompExprPtr:

xmlXPathCompiledEval
+xmlXPathCompiledEvalToBoolean
+xmlXPathDebugDumpCompExpr
+xmlXPathFreeCompExpr
+

Type xmlXPathContextPtr:

xmlXPathCompiledEval
+xmlXPathCompiledEvalToBoolean
+xmlXPathContextSetCache
+xmlXPathCtxtCompile
+xmlXPathEval
+xmlXPathEvalExpression
+xmlXPathEvalPredicate
+xmlXPathFreeContext
+xmlXPathFunctionLookup
+xmlXPathFunctionLookupNS
+xmlXPathNewParserContext
+xmlXPathNodeEval
+xmlXPathNsLookup
+xmlXPathRegisterAllFunctions
+xmlXPathRegisterFunc
+xmlXPathRegisterFuncLookup
+xmlXPathRegisterFuncNS
+xmlXPathRegisterNs
+xmlXPathRegisterVariable
+xmlXPathRegisterVariableLookup
+xmlXPathRegisterVariableNS
+xmlXPathRegisteredFuncsCleanup
+xmlXPathRegisteredNsCleanup
+xmlXPathRegisteredVariablesCleanup
+xmlXPathSetContextNode
+xmlXPathVariableLookup
+xmlXPathVariableLookupNS
+xmlXPtrEval
+

Type xmlXPathFuncLookupFunc:

xmlXPathRegisterFuncLookup
+

Type xmlXPathFunction:

xmlXPathRegisterFunc
+xmlXPathRegisterFuncNS
+

Type xmlXPathObjectPtr:

valuePush
+xmlShellPrintXPathResult
+xmlXPathAxisFunc
+xmlXPathCastToBoolean
+xmlXPathCastToNumber
+xmlXPathCastToString
+xmlXPathConvertBoolean
+xmlXPathConvertFunc
+xmlXPathConvertNumber
+xmlXPathConvertString
+xmlXPathDebugDumpObject
+xmlXPathEvalPredicate
+xmlXPathEvaluatePredicateResult
+xmlXPathFreeNodeSetList
+xmlXPathFreeObject
+xmlXPathObjectCopy
+xmlXPathRegisterVariable
+xmlXPathRegisterVariableNS
+xmlXPtrBuildNodeList
+xmlXPtrLocationSetAdd
+xmlXPtrLocationSetCreate
+xmlXPtrLocationSetDel
+xmlXPtrNewRangeNodeObject
+xmlXPtrNewRangeNodePoint
+xmlXPtrNewRangePointNode
+xmlXPtrNewRangePoints
+

Type xmlXPathParserContextPtr:

valuePop
+valuePush
+xmlXPathAddValues
+xmlXPathAxisFunc
+xmlXPathBooleanFunction
+xmlXPathCeilingFunction
+xmlXPathCompareValues
+xmlXPathConcatFunction
+xmlXPathContainsFunction
+xmlXPathCountFunction
+xmlXPathDivValues
+xmlXPathEqualValues
+xmlXPathErr
+xmlXPathEvalExpr
+xmlXPathEvalFunc
+xmlXPathEvaluatePredicateResult
+xmlXPathFalseFunction
+xmlXPathFloorFunction
+xmlXPathFreeParserContext
+xmlXPathFunction
+xmlXPathIdFunction
+xmlXPathLangFunction
+xmlXPathLastFunction
+xmlXPathLocalNameFunction
+xmlXPathModValues
+xmlXPathMultValues
+xmlXPathNamespaceURIFunction
+xmlXPathNextAncestor
+xmlXPathNextAncestorOrSelf
+xmlXPathNextAttribute
+xmlXPathNextChild
+xmlXPathNextDescendant
+xmlXPathNextDescendantOrSelf
+xmlXPathNextFollowing
+xmlXPathNextFollowingSibling
+xmlXPathNextNamespace
+xmlXPathNextParent
+xmlXPathNextPreceding
+xmlXPathNextPrecedingSibling
+xmlXPathNextSelf
+xmlXPathNormalizeFunction
+xmlXPathNotEqualValues
+xmlXPathNotFunction
+xmlXPathNumberFunction
+xmlXPathParseNCName
+xmlXPathParseName
+xmlXPathPopBoolean
+xmlXPathPopExternal
+xmlXPathPopNodeSet
+xmlXPathPopNumber
+xmlXPathPopString
+xmlXPathPositionFunction
+xmlXPathRoot
+xmlXPathRoundFunction
+xmlXPathStartsWithFunction
+xmlXPathStringFunction
+xmlXPathStringLengthFunction
+xmlXPathSubValues
+xmlXPathSubstringAfterFunction
+xmlXPathSubstringBeforeFunction
+xmlXPathSubstringFunction
+xmlXPathSumFunction
+xmlXPathTranslateFunction
+xmlXPathTrueFunction
+xmlXPathValueFlipSign
+xmlXPatherror
+xmlXPtrEvalRangePredicate
+xmlXPtrRangeToFunction
+

Type xmlXPathVariableLookupFunc:

xmlXPathRegisterVariableLookup
+

Daniel Veillard

diff --git a/doc/APIsymbols.html b/doc/APIsymbols.html new file mode 100644 index 0000000..cdde358 --- /dev/null +++ b/doc/APIsymbols.html @@ -0,0 +1,3587 @@ + + +Alphabetic List of Symbols in libxml2
Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
Made with Libxml2 Logo

The XML C parser and toolkit of Gnome

Alphabetic List of Symbols in libxml2

Developer Menu
API Indexes
Related links

Letter A:

ATTRIBUTE_UNUSED
+

Letter B:

BAD_CAST
+BASE_BUFFER_SIZE
+

Letter C:

CAST_TO_BOOLEAN
+CAST_TO_NUMBER
+CAST_TO_STRING
+CHECK_ARITY
+CHECK_ERROR
+CHECK_ERROR0
+CHECK_TYPE
+CHECK_TYPE0
+

Letter D:

DEBUG_MEMORY
+DEBUG_MEMORY_LOCATION
+

Letter H:

HTML_COMMENT_NODE
+HTML_DEPRECATED
+HTML_ENTITY_REF_NODE
+HTML_INVALID
+HTML_NA
+HTML_PARSE_COMPACT
+HTML_PARSE_IGNORE_ENC
+HTML_PARSE_NOBLANKS
+HTML_PARSE_NODEFDTD
+HTML_PARSE_NOERROR
+HTML_PARSE_NOIMPLIED
+HTML_PARSE_NONET
+HTML_PARSE_NOWARNING
+HTML_PARSE_PEDANTIC
+HTML_PARSE_RECOVER
+HTML_PI_NODE
+HTML_PRESERVE_NODE
+HTML_REQUIRED
+HTML_TEXT_NODE
+HTML_VALID
+

Letter I:

INPUT_CHUNK
+INVALID_SOCKET
+IS_ASCII_DIGIT
+IS_ASCII_LETTER
+IS_BASECHAR
+IS_BLANK
+IS_BLANK_CH
+IS_BYTE_CHAR
+IS_CHAR
+IS_CHAR_CH
+IS_COMBINING
+IS_COMBINING_CH
+IS_DIGIT
+IS_DIGIT_CH
+IS_EXTENDER
+IS_EXTENDER_CH
+IS_IDEOGRAPHIC
+IS_LETTER
+IS_LETTER_CH
+IS_PUBIDCHAR
+IS_PUBIDCHAR_CH
+

Letter L:

LIBXML2_NEW_BUFFER
+LIBXML_ATTR_ALLOC_SIZE
+LIBXML_ATTR_FORMAT
+LIBXML_AUTOMATA_ENABLED
+LIBXML_C14N_ENABLED
+LIBXML_CATALOG_ENABLED
+LIBXML_DEBUG_ENABLED
+LIBXML_DEBUG_RUNTIME
+LIBXML_DLL_IMPORT
+LIBXML_DOCB_ENABLED
+LIBXML_DOTTED_VERSION
+LIBXML_EXPR_ENABLED
+LIBXML_FTP_ENABLED
+LIBXML_HTML_ENABLED
+LIBXML_HTTP_ENABLED
+LIBXML_ICONV_ENABLED
+LIBXML_ICU_ENABLED
+LIBXML_ISO8859X_ENABLED
+LIBXML_LEGACY_ENABLED
+LIBXML_LZMA_ENABLED
+LIBXML_MODULES_ENABLED
+LIBXML_MODULE_EXTENSION
+LIBXML_OUTPUT_ENABLED
+LIBXML_PATTERN_ENABLED
+LIBXML_PUSH_ENABLED
+LIBXML_READER_ENABLED
+LIBXML_REGEXP_ENABLED
+LIBXML_SAX1_ENABLED
+LIBXML_SCHEMAS_ENABLED
+LIBXML_SCHEMATRON_ENABLED
+LIBXML_TEST_VERSION
+LIBXML_THREAD_ALLOC_ENABLED
+LIBXML_THREAD_ENABLED
+LIBXML_TREE_ENABLED
+LIBXML_UNICODE_ENABLED
+LIBXML_VALID_ENABLED
+LIBXML_VERSION
+LIBXML_VERSION_EXTRA
+LIBXML_VERSION_STRING
+LIBXML_WRITER_ENABLED
+LIBXML_XINCLUDE_ENABLED
+LIBXML_XPATH_ENABLED
+LIBXML_XPTR_ENABLED
+LIBXML_ZLIB_ENABLED
+

Letter M:

MOVETO_ENDTAG
+MOVETO_STARTTAG
+

Letter S:

SKIP_EOL
+SOCKET
+

Letter U:

UTF8ToHtml
+UTF8Toisolat1
+

Letter W:

WITHOUT_TRIO
+WITH_TRIO
+

Letter X:

XINCLUDE_FALLBACK
+XINCLUDE_HREF
+XINCLUDE_NODE
+XINCLUDE_NS
+XINCLUDE_OLD_NS
+XINCLUDE_PARSE
+XINCLUDE_PARSE_ENCODING
+XINCLUDE_PARSE_TEXT
+XINCLUDE_PARSE_XML
+XINCLUDE_PARSE_XPOINTER
+XLINK_ACTUATE_AUTO
+XLINK_ACTUATE_NONE
+XLINK_ACTUATE_ONREQUEST
+XLINK_SHOW_EMBED
+XLINK_SHOW_NEW
+XLINK_SHOW_NONE
+XLINK_SHOW_REPLACE
+XLINK_TYPE_EXTENDED
+XLINK_TYPE_EXTENDED_SET
+XLINK_TYPE_NONE
+XLINK_TYPE_SIMPLE
+XMLCALL
+XMLCDECL
+XMLPUBFUN
+XMLPUBVAR
+XML_ATTRIBUTE_CDATA
+XML_ATTRIBUTE_DECL
+XML_ATTRIBUTE_ENTITIES
+XML_ATTRIBUTE_ENTITY
+XML_ATTRIBUTE_ENUMERATION
+XML_ATTRIBUTE_FIXED
+XML_ATTRIBUTE_ID
+XML_ATTRIBUTE_IDREF
+XML_ATTRIBUTE_IDREFS
+XML_ATTRIBUTE_IMPLIED
+XML_ATTRIBUTE_NMTOKEN
+XML_ATTRIBUTE_NMTOKENS
+XML_ATTRIBUTE_NODE
+XML_ATTRIBUTE_NONE
+XML_ATTRIBUTE_NOTATION
+XML_ATTRIBUTE_REQUIRED
+XML_BUFFER_ALLOC_BOUNDED
+XML_BUFFER_ALLOC_DOUBLEIT
+XML_BUFFER_ALLOC_EXACT
+XML_BUFFER_ALLOC_HYBRID
+XML_BUFFER_ALLOC_IMMUTABLE
+XML_BUFFER_ALLOC_IO
+XML_BUF_OVERFLOW
+XML_C14N_1_0
+XML_C14N_1_1
+XML_C14N_CREATE_CTXT
+XML_C14N_CREATE_STACK
+XML_C14N_EXCLUSIVE_1_0
+XML_C14N_INVALID_NODE
+XML_C14N_RELATIVE_NAMESPACE
+XML_C14N_REQUIRES_UTF8
+XML_C14N_UNKNOW_NODE
+XML_CAST_FPTR
+XML_CATALOGS_NAMESPACE
+XML_CATALOG_ENTRY_BROKEN
+XML_CATALOG_MISSING_ATTR
+XML_CATALOG_NOT_CATALOG
+XML_CATALOG_PI
+XML_CATALOG_PREFER_VALUE
+XML_CATALOG_RECURSION
+XML_CATA_ALLOW_ALL
+XML_CATA_ALLOW_DOCUMENT
+XML_CATA_ALLOW_GLOBAL
+XML_CATA_ALLOW_NONE
+XML_CATA_PREFER_NONE
+XML_CATA_PREFER_PUBLIC
+XML_CATA_PREFER_SYSTEM
+XML_CDATA_SECTION_NODE
+XML_CHAR_ENCODING_2022_JP
+XML_CHAR_ENCODING_8859_1
+XML_CHAR_ENCODING_8859_2
+XML_CHAR_ENCODING_8859_3
+XML_CHAR_ENCODING_8859_4
+XML_CHAR_ENCODING_8859_5
+XML_CHAR_ENCODING_8859_6
+XML_CHAR_ENCODING_8859_7
+XML_CHAR_ENCODING_8859_8
+XML_CHAR_ENCODING_8859_9
+XML_CHAR_ENCODING_ASCII
+XML_CHAR_ENCODING_EBCDIC
+XML_CHAR_ENCODING_ERROR
+XML_CHAR_ENCODING_EUC_JP
+XML_CHAR_ENCODING_NONE
+XML_CHAR_ENCODING_SHIFT_JIS
+XML_CHAR_ENCODING_UCS2
+XML_CHAR_ENCODING_UCS4BE
+XML_CHAR_ENCODING_UCS4LE
+XML_CHAR_ENCODING_UCS4_2143
+XML_CHAR_ENCODING_UCS4_3412
+XML_CHAR_ENCODING_UTF16BE
+XML_CHAR_ENCODING_UTF16LE
+XML_CHAR_ENCODING_UTF8
+XML_CHECK_ENTITY_TYPE
+XML_CHECK_FOUND_ATTRIBUTE
+XML_CHECK_FOUND_CDATA
+XML_CHECK_FOUND_COMMENT
+XML_CHECK_FOUND_DOCTYPE
+XML_CHECK_FOUND_ELEMENT
+XML_CHECK_FOUND_ENTITY
+XML_CHECK_FOUND_ENTITYREF
+XML_CHECK_FOUND_FRAGMENT
+XML_CHECK_FOUND_NOTATION
+XML_CHECK_FOUND_PI
+XML_CHECK_FOUND_TEXT
+XML_CHECK_NAME_NOT_NULL
+XML_CHECK_NOT_ATTR
+XML_CHECK_NOT_ATTR_DECL
+XML_CHECK_NOT_DTD
+XML_CHECK_NOT_ELEM_DECL
+XML_CHECK_NOT_ENTITY_DECL
+XML_CHECK_NOT_NCNAME
+XML_CHECK_NOT_NS_DECL
+XML_CHECK_NOT_UTF8
+XML_CHECK_NO_DICT
+XML_CHECK_NO_DOC
+XML_CHECK_NO_ELEM
+XML_CHECK_NO_HREF
+XML_CHECK_NO_NAME
+XML_CHECK_NO_NEXT
+XML_CHECK_NO_PARENT
+XML_CHECK_NO_PREV
+XML_CHECK_NS_ANCESTOR
+XML_CHECK_NS_SCOPE
+XML_CHECK_OUTSIDE_DICT
+XML_CHECK_UNKNOWN_NODE
+XML_CHECK_WRONG_DOC
+XML_CHECK_WRONG_NAME
+XML_CHECK_WRONG_NEXT
+XML_CHECK_WRONG_PARENT
+XML_CHECK_WRONG_PREV
+XML_COMMENT_NODE
+XML_COMPLETE_ATTRS
+XML_CTXT_FINISH_DTD_0
+XML_CTXT_FINISH_DTD_1
+XML_DEFAULT_VERSION
+XML_DETECT_IDS
+XML_DOCB_DOCUMENT_NODE
+XML_DOCUMENT_FRAG_NODE
+XML_DOCUMENT_NODE
+XML_DOCUMENT_TYPE_NODE
+XML_DOC_DTDVALID
+XML_DOC_HTML
+XML_DOC_INTERNAL
+XML_DOC_NSVALID
+XML_DOC_OLD10
+XML_DOC_USERBUILT
+XML_DOC_WELLFORMED
+XML_DOC_XINCLUDE
+XML_DTD_ATTRIBUTE_DEFAULT
+XML_DTD_ATTRIBUTE_REDEFINED
+XML_DTD_ATTRIBUTE_VALUE
+XML_DTD_CONTENT_ERROR
+XML_DTD_CONTENT_MODEL
+XML_DTD_CONTENT_NOT_DETERMINIST
+XML_DTD_DIFFERENT_PREFIX
+XML_DTD_DUP_TOKEN
+XML_DTD_ELEM_DEFAULT_NAMESPACE
+XML_DTD_ELEM_NAMESPACE
+XML_DTD_ELEM_REDEFINED
+XML_DTD_EMPTY_NOTATION
+XML_DTD_ENTITY_TYPE
+XML_DTD_ID_FIXED
+XML_DTD_ID_REDEFINED
+XML_DTD_ID_SUBSET
+XML_DTD_INVALID_CHILD
+XML_DTD_INVALID_DEFAULT
+XML_DTD_LOAD_ERROR
+XML_DTD_MISSING_ATTRIBUTE
+XML_DTD_MIXED_CORRUPT
+XML_DTD_MULTIPLE_ID
+XML_DTD_NODE
+XML_DTD_NOTATION_REDEFINED
+XML_DTD_NOTATION_VALUE
+XML_DTD_NOT_EMPTY
+XML_DTD_NOT_PCDATA
+XML_DTD_NOT_STANDALONE
+XML_DTD_NO_DOC
+XML_DTD_NO_DTD
+XML_DTD_NO_ELEM_NAME
+XML_DTD_NO_PREFIX
+XML_DTD_NO_ROOT
+XML_DTD_ROOT_NAME
+XML_DTD_STANDALONE_DEFAULTED
+XML_DTD_STANDALONE_WHITE_SPACE
+XML_DTD_UNKNOWN_ATTRIBUTE
+XML_DTD_UNKNOWN_ELEM
+XML_DTD_UNKNOWN_ENTITY
+XML_DTD_UNKNOWN_ID
+XML_DTD_UNKNOWN_NOTATION
+XML_DTD_XMLID_TYPE
+XML_DTD_XMLID_VALUE
+XML_ELEMENT_CONTENT_ELEMENT
+XML_ELEMENT_CONTENT_MULT
+XML_ELEMENT_CONTENT_ONCE
+XML_ELEMENT_CONTENT_OPT
+XML_ELEMENT_CONTENT_OR
+XML_ELEMENT_CONTENT_PCDATA
+XML_ELEMENT_CONTENT_PLUS
+XML_ELEMENT_CONTENT_SEQ
+XML_ELEMENT_DECL
+XML_ELEMENT_NODE
+XML_ELEMENT_TYPE_ANY
+XML_ELEMENT_TYPE_ELEMENT
+XML_ELEMENT_TYPE_EMPTY
+XML_ELEMENT_TYPE_MIXED
+XML_ELEMENT_TYPE_UNDEFINED
+XML_ENTITY_DECL
+XML_ENTITY_NODE
+XML_ENTITY_REF_NODE
+XML_ERR_ATTLIST_NOT_FINISHED
+XML_ERR_ATTLIST_NOT_STARTED
+XML_ERR_ATTRIBUTE_NOT_FINISHED
+XML_ERR_ATTRIBUTE_NOT_STARTED
+XML_ERR_ATTRIBUTE_REDEFINED
+XML_ERR_ATTRIBUTE_WITHOUT_VALUE
+XML_ERR_CDATA_NOT_FINISHED
+XML_ERR_CHARREF_AT_EOF
+XML_ERR_CHARREF_IN_DTD
+XML_ERR_CHARREF_IN_EPILOG
+XML_ERR_CHARREF_IN_PROLOG
+XML_ERR_COMMENT_NOT_FINISHED
+XML_ERR_CONDSEC_INVALID
+XML_ERR_CONDSEC_INVALID_KEYWORD
+XML_ERR_CONDSEC_NOT_FINISHED
+XML_ERR_CONDSEC_NOT_STARTED
+XML_ERR_DOCTYPE_NOT_FINISHED
+XML_ERR_DOCUMENT_EMPTY
+XML_ERR_DOCUMENT_END
+XML_ERR_DOCUMENT_START
+XML_ERR_ELEMCONTENT_NOT_FINISHED
+XML_ERR_ELEMCONTENT_NOT_STARTED
+XML_ERR_ENCODING_NAME
+XML_ERR_ENTITYREF_AT_EOF
+XML_ERR_ENTITYREF_IN_DTD
+XML_ERR_ENTITYREF_IN_EPILOG
+XML_ERR_ENTITYREF_IN_PROLOG
+XML_ERR_ENTITYREF_NO_NAME
+XML_ERR_ENTITYREF_SEMICOL_MISSING
+XML_ERR_ENTITY_BOUNDARY
+XML_ERR_ENTITY_CHAR_ERROR
+XML_ERR_ENTITY_IS_EXTERNAL
+XML_ERR_ENTITY_IS_PARAMETER
+XML_ERR_ENTITY_LOOP
+XML_ERR_ENTITY_NOT_FINISHED
+XML_ERR_ENTITY_NOT_STARTED
+XML_ERR_ENTITY_PE_INTERNAL
+XML_ERR_ENTITY_PROCESSING
+XML_ERR_EQUAL_REQUIRED
+XML_ERR_ERROR
+XML_ERR_EXTRA_CONTENT
+XML_ERR_EXT_ENTITY_STANDALONE
+XML_ERR_EXT_SUBSET_NOT_FINISHED
+XML_ERR_FATAL
+XML_ERR_GT_REQUIRED
+XML_ERR_HYPHEN_IN_COMMENT
+XML_ERR_INTERNAL_ERROR
+XML_ERR_INVALID_CHAR
+XML_ERR_INVALID_CHARREF
+XML_ERR_INVALID_DEC_CHARREF
+XML_ERR_INVALID_ENCODING
+XML_ERR_INVALID_HEX_CHARREF
+XML_ERR_INVALID_URI
+XML_ERR_LITERAL_NOT_FINISHED
+XML_ERR_LITERAL_NOT_STARTED
+XML_ERR_LTSLASH_REQUIRED
+XML_ERR_LT_IN_ATTRIBUTE
+XML_ERR_LT_REQUIRED
+XML_ERR_MISPLACED_CDATA_END
+XML_ERR_MISSING_ENCODING
+XML_ERR_MIXED_NOT_FINISHED
+XML_ERR_MIXED_NOT_STARTED
+XML_ERR_NAME_REQUIRED
+XML_ERR_NAME_TOO_LONG
+XML_ERR_NMTOKEN_REQUIRED
+XML_ERR_NONE
+XML_ERR_NOTATION_NOT_FINISHED
+XML_ERR_NOTATION_NOT_STARTED
+XML_ERR_NOTATION_PROCESSING
+XML_ERR_NOT_STANDALONE
+XML_ERR_NOT_WELL_BALANCED
+XML_ERR_NO_DTD
+XML_ERR_NO_MEMORY
+XML_ERR_NS_DECL_ERROR
+XML_ERR_OK
+XML_ERR_PCDATA_REQUIRED
+XML_ERR_PEREF_AT_EOF
+XML_ERR_PEREF_IN_EPILOG
+XML_ERR_PEREF_IN_INT_SUBSET
+XML_ERR_PEREF_IN_PROLOG
+XML_ERR_PEREF_NO_NAME
+XML_ERR_PEREF_SEMICOL_MISSING
+XML_ERR_PI_NOT_FINISHED
+XML_ERR_PI_NOT_STARTED
+XML_ERR_PUBID_REQUIRED
+XML_ERR_RESERVED_XML_NAME
+XML_ERR_SEPARATOR_REQUIRED
+XML_ERR_SPACE_REQUIRED
+XML_ERR_STANDALONE_VALUE
+XML_ERR_STRING_NOT_CLOSED
+XML_ERR_STRING_NOT_STARTED
+XML_ERR_TAG_NAME_MISMATCH
+XML_ERR_TAG_NOT_FINISHED
+XML_ERR_UNDECLARED_ENTITY
+XML_ERR_UNKNOWN_ENCODING
+XML_ERR_UNKNOWN_VERSION
+XML_ERR_UNPARSED_ENTITY
+XML_ERR_UNSUPPORTED_ENCODING
+XML_ERR_URI_FRAGMENT
+XML_ERR_URI_REQUIRED
+XML_ERR_USER_STOP
+XML_ERR_VALUE_REQUIRED
+XML_ERR_VERSION_MISMATCH
+XML_ERR_VERSION_MISSING
+XML_ERR_WARNING
+XML_ERR_XMLDECL_NOT_FINISHED
+XML_ERR_XMLDECL_NOT_STARTED
+XML_EXP_ATOM
+XML_EXP_COUNT
+XML_EXP_EMPTY
+XML_EXP_FORBID
+XML_EXP_OR
+XML_EXP_SEQ
+XML_EXTERNAL_GENERAL_PARSED_ENTITY
+XML_EXTERNAL_GENERAL_UNPARSED_ENTITY
+XML_EXTERNAL_PARAMETER_ENTITY
+XML_FROM_BUFFER
+XML_FROM_C14N
+XML_FROM_CATALOG
+XML_FROM_CHECK
+XML_FROM_DATATYPE
+XML_FROM_DTD
+XML_FROM_FTP
+XML_FROM_HTML
+XML_FROM_HTTP
+XML_FROM_I18N
+XML_FROM_IO
+XML_FROM_MEMORY
+XML_FROM_MODULE
+XML_FROM_NAMESPACE
+XML_FROM_NONE
+XML_FROM_OUTPUT
+XML_FROM_PARSER
+XML_FROM_REGEXP
+XML_FROM_RELAXNGP
+XML_FROM_RELAXNGV
+XML_FROM_SCHEMASP
+XML_FROM_SCHEMASV
+XML_FROM_SCHEMATRONV
+XML_FROM_TREE
+XML_FROM_URI
+XML_FROM_VALID
+XML_FROM_WRITER
+XML_FROM_XINCLUDE
+XML_FROM_XPATH
+XML_FROM_XPOINTER
+XML_FROM_XSLT
+XML_FTP_ACCNT
+XML_FTP_EPSV_ANSWER
+XML_FTP_PASV_ANSWER
+XML_FTP_URL_SYNTAX
+XML_GET_CONTENT
+XML_GET_LINE
+XML_HTML_DOCUMENT_NODE
+XML_HTML_STRUCURE_ERROR
+XML_HTML_UNKNOWN_TAG
+XML_HTTP_UNKNOWN_HOST
+XML_HTTP_URL_SYNTAX
+XML_HTTP_USE_IP
+XML_I18N_CONV_FAILED
+XML_I18N_EXCESS_HANDLER
+XML_I18N_NO_HANDLER
+XML_I18N_NO_NAME
+XML_I18N_NO_OUTPUT
+XML_INTERNAL_GENERAL_ENTITY
+XML_INTERNAL_PARAMETER_ENTITY
+XML_INTERNAL_PREDEFINED_ENTITY
+XML_IO_BUFFER_FULL
+XML_IO_EACCES
+XML_IO_EADDRINUSE
+XML_IO_EAFNOSUPPORT
+XML_IO_EAGAIN
+XML_IO_EALREADY
+XML_IO_EBADF
+XML_IO_EBADMSG
+XML_IO_EBUSY
+XML_IO_ECANCELED
+XML_IO_ECHILD
+XML_IO_ECONNREFUSED
+XML_IO_EDEADLK
+XML_IO_EDOM
+XML_IO_EEXIST
+XML_IO_EFAULT
+XML_IO_EFBIG
+XML_IO_EINPROGRESS
+XML_IO_EINTR
+XML_IO_EINVAL
+XML_IO_EIO
+XML_IO_EISCONN
+XML_IO_EISDIR
+XML_IO_EMFILE
+XML_IO_EMLINK
+XML_IO_EMSGSIZE
+XML_IO_ENAMETOOLONG
+XML_IO_ENCODER
+XML_IO_ENETUNREACH
+XML_IO_ENFILE
+XML_IO_ENODEV
+XML_IO_ENOENT
+XML_IO_ENOEXEC
+XML_IO_ENOLCK
+XML_IO_ENOMEM
+XML_IO_ENOSPC
+XML_IO_ENOSYS
+XML_IO_ENOTDIR
+XML_IO_ENOTEMPTY
+XML_IO_ENOTSOCK
+XML_IO_ENOTSUP
+XML_IO_ENOTTY
+XML_IO_ENXIO
+XML_IO_EPERM
+XML_IO_EPIPE
+XML_IO_ERANGE
+XML_IO_EROFS
+XML_IO_ESPIPE
+XML_IO_ESRCH
+XML_IO_ETIMEDOUT
+XML_IO_EXDEV
+XML_IO_FLUSH
+XML_IO_LOAD_ERROR
+XML_IO_NETWORK_ATTEMPT
+XML_IO_NO_INPUT
+XML_IO_UNKNOWN
+XML_IO_WRITE
+XML_LOCAL_NAMESPACE
+XML_MAX_DICTIONARY_LIMIT
+XML_MAX_LOOKUP_LIMIT
+XML_MAX_NAMELEN
+XML_MAX_NAME_LENGTH
+XML_MAX_TEXT_LENGTH
+XML_MODULE_CLOSE
+XML_MODULE_LAZY
+XML_MODULE_LOCAL
+XML_MODULE_OPEN
+XML_NAMESPACE_DECL
+XML_NOTATION_NODE
+XML_NS_ERR_ATTRIBUTE_REDEFINED
+XML_NS_ERR_COLON
+XML_NS_ERR_EMPTY
+XML_NS_ERR_QNAME
+XML_NS_ERR_UNDEFINED_NAMESPACE
+XML_NS_ERR_XML_NAMESPACE
+XML_PARSER_ATTRIBUTE_VALUE
+XML_PARSER_CDATA_SECTION
+XML_PARSER_COMMENT
+XML_PARSER_CONTENT
+XML_PARSER_DEFAULTATTRS
+XML_PARSER_DTD
+XML_PARSER_END_TAG
+XML_PARSER_ENTITY_DECL
+XML_PARSER_ENTITY_VALUE
+XML_PARSER_EOF
+XML_PARSER_EPILOG
+XML_PARSER_IGNORE
+XML_PARSER_LOADDTD
+XML_PARSER_MISC
+XML_PARSER_PI
+XML_PARSER_PROLOG
+XML_PARSER_PUBLIC_LITERAL
+XML_PARSER_SEVERITY_ERROR
+XML_PARSER_SEVERITY_VALIDITY_ERROR
+XML_PARSER_SEVERITY_VALIDITY_WARNING
+XML_PARSER_SEVERITY_WARNING
+XML_PARSER_START
+XML_PARSER_START_TAG
+XML_PARSER_SUBST_ENTITIES
+XML_PARSER_SYSTEM_LITERAL
+XML_PARSER_VALIDATE
+XML_PARSE_BIG_LINES
+XML_PARSE_COMPACT
+XML_PARSE_DOM
+XML_PARSE_DTDATTR
+XML_PARSE_DTDLOAD
+XML_PARSE_DTDVALID
+XML_PARSE_HUGE
+XML_PARSE_IGNORE_ENC
+XML_PARSE_NOBASEFIX
+XML_PARSE_NOBLANKS
+XML_PARSE_NOCDATA
+XML_PARSE_NODICT
+XML_PARSE_NOENT
+XML_PARSE_NOERROR
+XML_PARSE_NONET
+XML_PARSE_NOWARNING
+XML_PARSE_NOXINCNODE
+XML_PARSE_NSCLEAN
+XML_PARSE_OLD10
+XML_PARSE_OLDSAX
+XML_PARSE_PEDANTIC
+XML_PARSE_PUSH_DOM
+XML_PARSE_PUSH_SAX
+XML_PARSE_READER
+XML_PARSE_RECOVER
+XML_PARSE_SAX
+XML_PARSE_SAX1
+XML_PARSE_UNKNOWN
+XML_PARSE_XINCLUDE
+XML_PATTERN_DEFAULT
+XML_PATTERN_XPATH
+XML_PATTERN_XSFIELD
+XML_PATTERN_XSSEL
+XML_PI_NODE
+XML_READER_TYPE_ATTRIBUTE
+XML_READER_TYPE_CDATA
+XML_READER_TYPE_COMMENT
+XML_READER_TYPE_DOCUMENT
+XML_READER_TYPE_DOCUMENT_FRAGMENT
+XML_READER_TYPE_DOCUMENT_TYPE
+XML_READER_TYPE_ELEMENT
+XML_READER_TYPE_END_ELEMENT
+XML_READER_TYPE_END_ENTITY
+XML_READER_TYPE_ENTITY
+XML_READER_TYPE_ENTITY_REFERENCE
+XML_READER_TYPE_NONE
+XML_READER_TYPE_NOTATION
+XML_READER_TYPE_PROCESSING_INSTRUCTION
+XML_READER_TYPE_SIGNIFICANT_WHITESPACE
+XML_READER_TYPE_TEXT
+XML_READER_TYPE_WHITESPACE
+XML_READER_TYPE_XML_DECLARATION
+XML_REGEXP_COMPILE_ERROR
+XML_RELAXNGP_CRNG
+XML_RELAXNGP_FREE_DOC
+XML_RELAXNGP_NONE
+XML_RELAXNG_ERR_ATTREXTRANS
+XML_RELAXNG_ERR_ATTRNAME
+XML_RELAXNG_ERR_ATTRNONS
+XML_RELAXNG_ERR_ATTRVALID
+XML_RELAXNG_ERR_ATTRWRONGNS
+XML_RELAXNG_ERR_CONTENTVALID
+XML_RELAXNG_ERR_DATAELEM
+XML_RELAXNG_ERR_DATATYPE
+XML_RELAXNG_ERR_DUPID
+XML_RELAXNG_ERR_ELEMEXTRANS
+XML_RELAXNG_ERR_ELEMNAME
+XML_RELAXNG_ERR_ELEMNONS
+XML_RELAXNG_ERR_ELEMNOTEMPTY
+XML_RELAXNG_ERR_ELEMWRONG
+XML_RELAXNG_ERR_ELEMWRONGNS
+XML_RELAXNG_ERR_EXTRACONTENT
+XML_RELAXNG_ERR_EXTRADATA
+XML_RELAXNG_ERR_INTEREXTRA
+XML_RELAXNG_ERR_INTERNAL
+XML_RELAXNG_ERR_INTERNODATA
+XML_RELAXNG_ERR_INTERSEQ
+XML_RELAXNG_ERR_INVALIDATTR
+XML_RELAXNG_ERR_LACKDATA
+XML_RELAXNG_ERR_LIST
+XML_RELAXNG_ERR_LISTELEM
+XML_RELAXNG_ERR_LISTEMPTY
+XML_RELAXNG_ERR_LISTEXTRA
+XML_RELAXNG_ERR_MEMORY
+XML_RELAXNG_ERR_NODEFINE
+XML_RELAXNG_ERR_NOELEM
+XML_RELAXNG_ERR_NOGRAMMAR
+XML_RELAXNG_ERR_NOSTATE
+XML_RELAXNG_ERR_NOTELEM
+XML_RELAXNG_ERR_TEXTWRONG
+XML_RELAXNG_ERR_TYPE
+XML_RELAXNG_ERR_TYPECMP
+XML_RELAXNG_ERR_TYPEVAL
+XML_RELAXNG_ERR_VALELEM
+XML_RELAXNG_ERR_VALUE
+XML_RELAXNG_OK
+XML_RNGP_ANYNAME_ATTR_ANCESTOR
+XML_RNGP_ATTRIBUTE_CHILDREN
+XML_RNGP_ATTRIBUTE_CONTENT
+XML_RNGP_ATTRIBUTE_EMPTY
+XML_RNGP_ATTRIBUTE_NOOP
+XML_RNGP_ATTR_CONFLICT
+XML_RNGP_CHOICE_CONTENT
+XML_RNGP_CHOICE_EMPTY
+XML_RNGP_CREATE_FAILURE
+XML_RNGP_DATA_CONTENT
+XML_RNGP_DEFINE_CREATE_FAILED
+XML_RNGP_DEFINE_EMPTY
+XML_RNGP_DEFINE_MISSING
+XML_RNGP_DEFINE_NAME_MISSING
+XML_RNGP_DEF_CHOICE_AND_INTERLEAVE
+XML_RNGP_ELEMENT_CONTENT
+XML_RNGP_ELEMENT_EMPTY
+XML_RNGP_ELEMENT_NAME
+XML_RNGP_ELEMENT_NO_CONTENT
+XML_RNGP_ELEM_CONTENT_EMPTY
+XML_RNGP_ELEM_CONTENT_ERROR
+XML_RNGP_ELEM_TEXT_CONFLICT
+XML_RNGP_EMPTY
+XML_RNGP_EMPTY_CONSTRUCT
+XML_RNGP_EMPTY_CONTENT
+XML_RNGP_EMPTY_NOT_EMPTY
+XML_RNGP_ERROR_TYPE_LIB
+XML_RNGP_EXCEPT_EMPTY
+XML_RNGP_EXCEPT_MISSING
+XML_RNGP_EXCEPT_MULTIPLE
+XML_RNGP_EXCEPT_NO_CONTENT
+XML_RNGP_EXTERNALREF_EMTPY
+XML_RNGP_EXTERNALREF_RECURSE
+XML_RNGP_EXTERNAL_REF_FAILURE
+XML_RNGP_FORBIDDEN_ATTRIBUTE
+XML_RNGP_FOREIGN_ELEMENT
+XML_RNGP_GRAMMAR_CONTENT
+XML_RNGP_GRAMMAR_EMPTY
+XML_RNGP_GRAMMAR_MISSING
+XML_RNGP_GRAMMAR_NO_START
+XML_RNGP_GROUP_ATTR_CONFLICT
+XML_RNGP_HREF_ERROR
+XML_RNGP_INCLUDE_EMPTY
+XML_RNGP_INCLUDE_FAILURE
+XML_RNGP_INCLUDE_RECURSE
+XML_RNGP_INTERLEAVE_ADD
+XML_RNGP_INTERLEAVE_CREATE_FAILED
+XML_RNGP_INTERLEAVE_EMPTY
+XML_RNGP_INTERLEAVE_NO_CONTENT
+XML_RNGP_INVALID_DEFINE_NAME
+XML_RNGP_INVALID_URI
+XML_RNGP_INVALID_VALUE
+XML_RNGP_MISSING_HREF
+XML_RNGP_NAME_MISSING
+XML_RNGP_NEED_COMBINE
+XML_RNGP_NOTALLOWED_NOT_EMPTY
+XML_RNGP_NSNAME_ATTR_ANCESTOR
+XML_RNGP_NSNAME_NO_NS
+XML_RNGP_PARAM_FORBIDDEN
+XML_RNGP_PARAM_NAME_MISSING
+XML_RNGP_PARENTREF_CREATE_FAILED
+XML_RNGP_PARENTREF_NAME_INVALID
+XML_RNGP_PARENTREF_NOT_EMPTY
+XML_RNGP_PARENTREF_NO_NAME
+XML_RNGP_PARENTREF_NO_PARENT
+XML_RNGP_PARSE_ERROR
+XML_RNGP_PAT_ANYNAME_EXCEPT_ANYNAME
+XML_RNGP_PAT_ATTR_ATTR
+XML_RNGP_PAT_ATTR_ELEM
+XML_RNGP_PAT_DATA_EXCEPT_ATTR
+XML_RNGP_PAT_DATA_EXCEPT_ELEM
+XML_RNGP_PAT_DATA_EXCEPT_EMPTY
+XML_RNGP_PAT_DATA_EXCEPT_GROUP
+XML_RNGP_PAT_DATA_EXCEPT_INTERLEAVE
+XML_RNGP_PAT_DATA_EXCEPT_LIST
+XML_RNGP_PAT_DATA_EXCEPT_ONEMORE
+XML_RNGP_PAT_DATA_EXCEPT_REF
+XML_RNGP_PAT_DATA_EXCEPT_TEXT
+XML_RNGP_PAT_LIST_ATTR
+XML_RNGP_PAT_LIST_ELEM
+XML_RNGP_PAT_LIST_INTERLEAVE
+XML_RNGP_PAT_LIST_LIST
+XML_RNGP_PAT_LIST_REF
+XML_RNGP_PAT_LIST_TEXT
+XML_RNGP_PAT_NSNAME_EXCEPT_ANYNAME
+XML_RNGP_PAT_NSNAME_EXCEPT_NSNAME
+XML_RNGP_PAT_ONEMORE_GROUP_ATTR
+XML_RNGP_PAT_ONEMORE_INTERLEAVE_ATTR
+XML_RNGP_PAT_START_ATTR
+XML_RNGP_PAT_START_DATA
+XML_RNGP_PAT_START_EMPTY
+XML_RNGP_PAT_START_GROUP
+XML_RNGP_PAT_START_INTERLEAVE
+XML_RNGP_PAT_START_LIST
+XML_RNGP_PAT_START_ONEMORE
+XML_RNGP_PAT_START_TEXT
+XML_RNGP_PAT_START_VALUE
+XML_RNGP_PREFIX_UNDEFINED
+XML_RNGP_REF_CREATE_FAILED
+XML_RNGP_REF_CYCLE
+XML_RNGP_REF_NAME_INVALID
+XML_RNGP_REF_NOT_EMPTY
+XML_RNGP_REF_NO_DEF
+XML_RNGP_REF_NO_NAME
+XML_RNGP_START_CHOICE_AND_INTERLEAVE
+XML_RNGP_START_CONTENT
+XML_RNGP_START_EMPTY
+XML_RNGP_START_MISSING
+XML_RNGP_TEXT_EXPECTED
+XML_RNGP_TEXT_HAS_CHILD
+XML_RNGP_TYPE_MISSING
+XML_RNGP_TYPE_NOT_FOUND
+XML_RNGP_TYPE_VALUE
+XML_RNGP_UNKNOWN_ATTRIBUTE
+XML_RNGP_UNKNOWN_COMBINE
+XML_RNGP_UNKNOWN_CONSTRUCT
+XML_RNGP_UNKNOWN_TYPE_LIB
+XML_RNGP_URI_FRAGMENT
+XML_RNGP_URI_NOT_ABSOLUTE
+XML_RNGP_VALUE_EMPTY
+XML_RNGP_VALUE_NO_CONTENT
+XML_RNGP_XMLNS_NAME
+XML_RNGP_XML_NS
+XML_SAVE_AS_HTML
+XML_SAVE_AS_XML
+XML_SAVE_CHAR_INVALID
+XML_SAVE_FORMAT
+XML_SAVE_NOT_UTF8
+XML_SAVE_NO_DECL
+XML_SAVE_NO_DOCTYPE
+XML_SAVE_NO_EMPTY
+XML_SAVE_NO_XHTML
+XML_SAVE_UNKNOWN_ENCODING
+XML_SAVE_WSNONSIG
+XML_SAVE_XHTML
+XML_SAX2_MAGIC
+XML_SCHEMAP_AG_PROPS_CORRECT
+XML_SCHEMAP_ATTRFORMDEFAULT_VALUE
+XML_SCHEMAP_ATTRGRP_NONAME_NOREF
+XML_SCHEMAP_ATTR_NONAME_NOREF
+XML_SCHEMAP_AU_PROPS_CORRECT
+XML_SCHEMAP_AU_PROPS_CORRECT_2
+XML_SCHEMAP_A_PROPS_CORRECT_2
+XML_SCHEMAP_A_PROPS_CORRECT_3
+XML_SCHEMAP_COMPLEXTYPE_NONAME_NOREF
+XML_SCHEMAP_COS_ALL_LIMITED
+XML_SCHEMAP_COS_CT_EXTENDS_1_1
+XML_SCHEMAP_COS_CT_EXTENDS_1_2
+XML_SCHEMAP_COS_CT_EXTENDS_1_3
+XML_SCHEMAP_COS_ST_DERIVED_OK_2_1
+XML_SCHEMAP_COS_ST_DERIVED_OK_2_2
+XML_SCHEMAP_COS_ST_RESTRICTS_1_1
+XML_SCHEMAP_COS_ST_RESTRICTS_1_2
+XML_SCHEMAP_COS_ST_RESTRICTS_1_3_1
+XML_SCHEMAP_COS_ST_RESTRICTS_1_3_2
+XML_SCHEMAP_COS_ST_RESTRICTS_2_1
+XML_SCHEMAP_COS_ST_RESTRICTS_2_3_1_1
+XML_SCHEMAP_COS_ST_RESTRICTS_2_3_1_2
+XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_1
+XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_2
+XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_3
+XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_4
+XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_5
+XML_SCHEMAP_COS_ST_RESTRICTS_3_1
+XML_SCHEMAP_COS_ST_RESTRICTS_3_3_1
+XML_SCHEMAP_COS_ST_RESTRICTS_3_3_1_2
+XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_1
+XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_2
+XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_3
+XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_4
+XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_5
+XML_SCHEMAP_COS_VALID_DEFAULT_1
+XML_SCHEMAP_COS_VALID_DEFAULT_2_1
+XML_SCHEMAP_COS_VALID_DEFAULT_2_2_1
+XML_SCHEMAP_COS_VALID_DEFAULT_2_2_2
+XML_SCHEMAP_CT_PROPS_CORRECT_1
+XML_SCHEMAP_CT_PROPS_CORRECT_2
+XML_SCHEMAP_CT_PROPS_CORRECT_3
+XML_SCHEMAP_CT_PROPS_CORRECT_4
+XML_SCHEMAP_CT_PROPS_CORRECT_5
+XML_SCHEMAP_CVC_SIMPLE_TYPE
+XML_SCHEMAP_C_PROPS_CORRECT
+XML_SCHEMAP_DEF_AND_PREFIX
+XML_SCHEMAP_DERIVATION_OK_RESTRICTION_1
+XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_1
+XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_2
+XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_3
+XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_2
+XML_SCHEMAP_DERIVATION_OK_RESTRICTION_3
+XML_SCHEMAP_DERIVATION_OK_RESTRICTION_4_1
+XML_SCHEMAP_DERIVATION_OK_RESTRICTION_4_2
+XML_SCHEMAP_DERIVATION_OK_RESTRICTION_4_3
+XML_SCHEMAP_ELEMFORMDEFAULT_VALUE
+XML_SCHEMAP_ELEM_DEFAULT_FIXED
+XML_SCHEMAP_ELEM_NONAME_NOREF
+XML_SCHEMAP_EXTENSION_NO_BASE
+XML_SCHEMAP_E_PROPS_CORRECT_2
+XML_SCHEMAP_E_PROPS_CORRECT_3
+XML_SCHEMAP_E_PROPS_CORRECT_4
+XML_SCHEMAP_E_PROPS_CORRECT_5
+XML_SCHEMAP_E_PROPS_CORRECT_6
+XML_SCHEMAP_FACET_NO_VALUE
+XML_SCHEMAP_FAILED_BUILD_IMPORT
+XML_SCHEMAP_FAILED_LOAD
+XML_SCHEMAP_FAILED_PARSE
+XML_SCHEMAP_GROUP_NONAME_NOREF
+XML_SCHEMAP_IMPORT_NAMESPACE_NOT_URI
+XML_SCHEMAP_IMPORT_REDEFINE_NSNAME
+XML_SCHEMAP_IMPORT_SCHEMA_NOT_URI
+XML_SCHEMAP_INCLUDE_SCHEMA_NOT_URI
+XML_SCHEMAP_INCLUDE_SCHEMA_NO_URI
+XML_SCHEMAP_INTERNAL
+XML_SCHEMAP_INTERSECTION_NOT_EXPRESSIBLE
+XML_SCHEMAP_INVALID_ATTR_COMBINATION
+XML_SCHEMAP_INVALID_ATTR_INLINE_COMBINATION
+XML_SCHEMAP_INVALID_ATTR_NAME
+XML_SCHEMAP_INVALID_ATTR_USE
+XML_SCHEMAP_INVALID_BOOLEAN
+XML_SCHEMAP_INVALID_ENUM
+XML_SCHEMAP_INVALID_FACET
+XML_SCHEMAP_INVALID_FACET_VALUE
+XML_SCHEMAP_INVALID_MAXOCCURS
+XML_SCHEMAP_INVALID_MINOCCURS
+XML_SCHEMAP_INVALID_REF_AND_SUBTYPE
+XML_SCHEMAP_INVALID_WHITE_SPACE
+XML_SCHEMAP_MG_PROPS_CORRECT_1
+XML_SCHEMAP_MG_PROPS_CORRECT_2
+XML_SCHEMAP_MISSING_SIMPLETYPE_CHILD
+XML_SCHEMAP_NOATTR_NOREF
+XML_SCHEMAP_NOROOT
+XML_SCHEMAP_NOTATION_NO_NAME
+XML_SCHEMAP_NOTHING_TO_PARSE
+XML_SCHEMAP_NOTYPE_NOREF
+XML_SCHEMAP_NOT_DETERMINISTIC
+XML_SCHEMAP_NOT_SCHEMA
+XML_SCHEMAP_NO_XMLNS
+XML_SCHEMAP_NO_XSI
+XML_SCHEMAP_PREFIX_UNDEFINED
+XML_SCHEMAP_P_PROPS_CORRECT_1
+XML_SCHEMAP_P_PROPS_CORRECT_2_1
+XML_SCHEMAP_P_PROPS_CORRECT_2_2
+XML_SCHEMAP_RECURSIVE
+XML_SCHEMAP_REDEFINED_ATTR
+XML_SCHEMAP_REDEFINED_ATTRGROUP
+XML_SCHEMAP_REDEFINED_ELEMENT
+XML_SCHEMAP_REDEFINED_GROUP
+XML_SCHEMAP_REDEFINED_NOTATION
+XML_SCHEMAP_REDEFINED_TYPE
+XML_SCHEMAP_REF_AND_CONTENT
+XML_SCHEMAP_REF_AND_SUBTYPE
+XML_SCHEMAP_REGEXP_INVALID
+XML_SCHEMAP_RESTRICTION_NONAME_NOREF
+XML_SCHEMAP_S4S_ATTR_INVALID_VALUE
+XML_SCHEMAP_S4S_ATTR_MISSING
+XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED
+XML_SCHEMAP_S4S_ELEM_MISSING
+XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED
+XML_SCHEMAP_SIMPLETYPE_NONAME
+XML_SCHEMAP_SRC_ATTRIBUTE_1
+XML_SCHEMAP_SRC_ATTRIBUTE_2
+XML_SCHEMAP_SRC_ATTRIBUTE_3_1
+XML_SCHEMAP_SRC_ATTRIBUTE_3_2
+XML_SCHEMAP_SRC_ATTRIBUTE_4
+XML_SCHEMAP_SRC_ATTRIBUTE_GROUP_1
+XML_SCHEMAP_SRC_ATTRIBUTE_GROUP_2
+XML_SCHEMAP_SRC_ATTRIBUTE_GROUP_3
+XML_SCHEMAP_SRC_CT_1
+XML_SCHEMAP_SRC_ELEMENT_1
+XML_SCHEMAP_SRC_ELEMENT_2_1
+XML_SCHEMAP_SRC_ELEMENT_2_2
+XML_SCHEMAP_SRC_ELEMENT_3
+XML_SCHEMAP_SRC_IMPORT
+XML_SCHEMAP_SRC_IMPORT_1_1
+XML_SCHEMAP_SRC_IMPORT_1_2
+XML_SCHEMAP_SRC_IMPORT_2
+XML_SCHEMAP_SRC_IMPORT_2_1
+XML_SCHEMAP_SRC_IMPORT_2_2
+XML_SCHEMAP_SRC_IMPORT_3_1
+XML_SCHEMAP_SRC_IMPORT_3_2
+XML_SCHEMAP_SRC_INCLUDE
+XML_SCHEMAP_SRC_LIST_ITEMTYPE_OR_SIMPLETYPE
+XML_SCHEMAP_SRC_REDEFINE
+XML_SCHEMAP_SRC_RESOLVE
+XML_SCHEMAP_SRC_RESTRICTION_BASE_OR_SIMPLETYPE
+XML_SCHEMAP_SRC_SIMPLE_TYPE_1
+XML_SCHEMAP_SRC_SIMPLE_TYPE_2
+XML_SCHEMAP_SRC_SIMPLE_TYPE_3
+XML_SCHEMAP_SRC_SIMPLE_TYPE_4
+XML_SCHEMAP_SRC_UNION_MEMBERTYPES_OR_SIMPLETYPES
+XML_SCHEMAP_ST_PROPS_CORRECT_1
+XML_SCHEMAP_ST_PROPS_CORRECT_2
+XML_SCHEMAP_ST_PROPS_CORRECT_3
+XML_SCHEMAP_SUPERNUMEROUS_LIST_ITEM_TYPE
+XML_SCHEMAP_TYPE_AND_SUBTYPE
+XML_SCHEMAP_UNION_NOT_EXPRESSIBLE
+XML_SCHEMAP_UNKNOWN_ALL_CHILD
+XML_SCHEMAP_UNKNOWN_ANYATTRIBUTE_CHILD
+XML_SCHEMAP_UNKNOWN_ATTRGRP_CHILD
+XML_SCHEMAP_UNKNOWN_ATTRIBUTE_GROUP
+XML_SCHEMAP_UNKNOWN_ATTR_CHILD
+XML_SCHEMAP_UNKNOWN_BASE_TYPE
+XML_SCHEMAP_UNKNOWN_CHOICE_CHILD
+XML_SCHEMAP_UNKNOWN_COMPLEXCONTENT_CHILD
+XML_SCHEMAP_UNKNOWN_COMPLEXTYPE_CHILD
+XML_SCHEMAP_UNKNOWN_ELEM_CHILD
+XML_SCHEMAP_UNKNOWN_EXTENSION_CHILD
+XML_SCHEMAP_UNKNOWN_FACET_CHILD
+XML_SCHEMAP_UNKNOWN_FACET_TYPE
+XML_SCHEMAP_UNKNOWN_GROUP_CHILD
+XML_SCHEMAP_UNKNOWN_IMPORT_CHILD
+XML_SCHEMAP_UNKNOWN_INCLUDE_CHILD
+XML_SCHEMAP_UNKNOWN_LIST_CHILD
+XML_SCHEMAP_UNKNOWN_MEMBER_TYPE
+XML_SCHEMAP_UNKNOWN_NOTATION_CHILD
+XML_SCHEMAP_UNKNOWN_PREFIX
+XML_SCHEMAP_UNKNOWN_PROCESSCONTENT_CHILD
+XML_SCHEMAP_UNKNOWN_REF
+XML_SCHEMAP_UNKNOWN_RESTRICTION_CHILD
+XML_SCHEMAP_UNKNOWN_SCHEMAS_CHILD
+XML_SCHEMAP_UNKNOWN_SEQUENCE_CHILD
+XML_SCHEMAP_UNKNOWN_SIMPLECONTENT_CHILD
+XML_SCHEMAP_UNKNOWN_SIMPLETYPE_CHILD
+XML_SCHEMAP_UNKNOWN_TYPE
+XML_SCHEMAP_UNKNOWN_UNION_CHILD
+XML_SCHEMAP_WARN_ATTR_POINTLESS_PROH
+XML_SCHEMAP_WARN_ATTR_REDECL_PROH
+XML_SCHEMAP_WARN_SKIP_SCHEMA
+XML_SCHEMAP_WARN_UNLOCATED_SCHEMA
+XML_SCHEMAP_WILDCARD_INVALID_NS_MEMBER
+XML_SCHEMAS_ANYATTR_LAX
+XML_SCHEMAS_ANYATTR_SKIP
+XML_SCHEMAS_ANYATTR_STRICT
+XML_SCHEMAS_ANYSIMPLETYPE
+XML_SCHEMAS_ANYTYPE
+XML_SCHEMAS_ANYURI
+XML_SCHEMAS_ANY_LAX
+XML_SCHEMAS_ANY_SKIP
+XML_SCHEMAS_ANY_STRICT
+XML_SCHEMAS_ATTRGROUP_GLOBAL
+XML_SCHEMAS_ATTRGROUP_HAS_REFS
+XML_SCHEMAS_ATTRGROUP_MARKED
+XML_SCHEMAS_ATTRGROUP_REDEFINED
+XML_SCHEMAS_ATTRGROUP_WILDCARD_BUILDED
+XML_SCHEMAS_ATTR_FIXED
+XML_SCHEMAS_ATTR_GLOBAL
+XML_SCHEMAS_ATTR_INTERNAL_RESOLVED
+XML_SCHEMAS_ATTR_NSDEFAULT
+XML_SCHEMAS_ATTR_USE_OPTIONAL
+XML_SCHEMAS_ATTR_USE_PROHIBITED
+XML_SCHEMAS_ATTR_USE_REQUIRED
+XML_SCHEMAS_BASE64BINARY
+XML_SCHEMAS_BLOCK_DEFAULT_EXTENSION
+XML_SCHEMAS_BLOCK_DEFAULT_RESTRICTION
+XML_SCHEMAS_BLOCK_DEFAULT_SUBSTITUTION
+XML_SCHEMAS_BOOLEAN
+XML_SCHEMAS_BYTE
+XML_SCHEMAS_DATE
+XML_SCHEMAS_DATETIME
+XML_SCHEMAS_DECIMAL
+XML_SCHEMAS_DOUBLE
+XML_SCHEMAS_DURATION
+XML_SCHEMAS_ELEM_ABSTRACT
+XML_SCHEMAS_ELEM_BLOCK_ABSENT
+XML_SCHEMAS_ELEM_BLOCK_EXTENSION
+XML_SCHEMAS_ELEM_BLOCK_RESTRICTION
+XML_SCHEMAS_ELEM_BLOCK_SUBSTITUTION
+XML_SCHEMAS_ELEM_CIRCULAR
+XML_SCHEMAS_ELEM_DEFAULT
+XML_SCHEMAS_ELEM_FINAL_ABSENT
+XML_SCHEMAS_ELEM_FINAL_EXTENSION
+XML_SCHEMAS_ELEM_FINAL_RESTRICTION
+XML_SCHEMAS_ELEM_FIXED
+XML_SCHEMAS_ELEM_GLOBAL
+XML_SCHEMAS_ELEM_INTERNAL_CHECKED
+XML_SCHEMAS_ELEM_INTERNAL_RESOLVED
+XML_SCHEMAS_ELEM_NILLABLE
+XML_SCHEMAS_ELEM_NSDEFAULT
+XML_SCHEMAS_ELEM_REF
+XML_SCHEMAS_ELEM_SUBST_GROUP_HEAD
+XML_SCHEMAS_ELEM_TOPLEVEL
+XML_SCHEMAS_ENTITIES
+XML_SCHEMAS_ENTITY
+XML_SCHEMAS_ERR_
+XML_SCHEMAS_ERR_ATTRINVALID
+XML_SCHEMAS_ERR_ATTRUNKNOWN
+XML_SCHEMAS_ERR_CONSTRUCT
+XML_SCHEMAS_ERR_ELEMCONT
+XML_SCHEMAS_ERR_EXTRACONTENT
+XML_SCHEMAS_ERR_FACET
+XML_SCHEMAS_ERR_HAVEDEFAULT
+XML_SCHEMAS_ERR_INTERNAL
+XML_SCHEMAS_ERR_INVALIDATTR
+XML_SCHEMAS_ERR_INVALIDELEM
+XML_SCHEMAS_ERR_ISABSTRACT
+XML_SCHEMAS_ERR_MISSING
+XML_SCHEMAS_ERR_NOROLLBACK
+XML_SCHEMAS_ERR_NOROOT
+XML_SCHEMAS_ERR_NOTDETERMINIST
+XML_SCHEMAS_ERR_NOTEMPTY
+XML_SCHEMAS_ERR_NOTNILLABLE
+XML_SCHEMAS_ERR_NOTSIMPLE
+XML_SCHEMAS_ERR_NOTTOPLEVEL
+XML_SCHEMAS_ERR_NOTYPE
+XML_SCHEMAS_ERR_OK
+XML_SCHEMAS_ERR_UNDECLAREDELEM
+XML_SCHEMAS_ERR_VALUE
+XML_SCHEMAS_ERR_WRONGELEM
+XML_SCHEMAS_ERR_XXX
+XML_SCHEMAS_FACET_COLLAPSE
+XML_SCHEMAS_FACET_PRESERVE
+XML_SCHEMAS_FACET_REPLACE
+XML_SCHEMAS_FACET_UNKNOWN
+XML_SCHEMAS_FINAL_DEFAULT_EXTENSION
+XML_SCHEMAS_FINAL_DEFAULT_LIST
+XML_SCHEMAS_FINAL_DEFAULT_RESTRICTION
+XML_SCHEMAS_FINAL_DEFAULT_UNION
+XML_SCHEMAS_FLOAT
+XML_SCHEMAS_GDAY
+XML_SCHEMAS_GMONTH
+XML_SCHEMAS_GMONTHDAY
+XML_SCHEMAS_GYEAR
+XML_SCHEMAS_GYEARMONTH
+XML_SCHEMAS_HEXBINARY
+XML_SCHEMAS_ID
+XML_SCHEMAS_IDREF
+XML_SCHEMAS_IDREFS
+XML_SCHEMAS_INCLUDING_CONVERT_NS
+XML_SCHEMAS_INT
+XML_SCHEMAS_INTEGER
+XML_SCHEMAS_LANGUAGE
+XML_SCHEMAS_LONG
+XML_SCHEMAS_NAME
+XML_SCHEMAS_NCNAME
+XML_SCHEMAS_NINTEGER
+XML_SCHEMAS_NMTOKEN
+XML_SCHEMAS_NMTOKENS
+XML_SCHEMAS_NNINTEGER
+XML_SCHEMAS_NORMSTRING
+XML_SCHEMAS_NOTATION
+XML_SCHEMAS_NPINTEGER
+XML_SCHEMAS_PINTEGER
+XML_SCHEMAS_QNAME
+XML_SCHEMAS_QUALIF_ATTR
+XML_SCHEMAS_QUALIF_ELEM
+XML_SCHEMAS_SHORT
+XML_SCHEMAS_STRING
+XML_SCHEMAS_TIME
+XML_SCHEMAS_TOKEN
+XML_SCHEMAS_TYPE_ABSTRACT
+XML_SCHEMAS_TYPE_BLOCK_DEFAULT
+XML_SCHEMAS_TYPE_BLOCK_EXTENSION
+XML_SCHEMAS_TYPE_BLOCK_RESTRICTION
+XML_SCHEMAS_TYPE_BUILTIN_PRIMITIVE
+XML_SCHEMAS_TYPE_DERIVATION_METHOD_EXTENSION
+XML_SCHEMAS_TYPE_DERIVATION_METHOD_RESTRICTION
+XML_SCHEMAS_TYPE_FACETSNEEDVALUE
+XML_SCHEMAS_TYPE_FINAL_DEFAULT
+XML_SCHEMAS_TYPE_FINAL_EXTENSION
+XML_SCHEMAS_TYPE_FINAL_LIST
+XML_SCHEMAS_TYPE_FINAL_RESTRICTION
+XML_SCHEMAS_TYPE_FINAL_UNION
+XML_SCHEMAS_TYPE_FIXUP_1
+XML_SCHEMAS_TYPE_GLOBAL
+XML_SCHEMAS_TYPE_HAS_FACETS
+XML_SCHEMAS_TYPE_INTERNAL_INVALID
+XML_SCHEMAS_TYPE_INTERNAL_RESOLVED
+XML_SCHEMAS_TYPE_MARKED
+XML_SCHEMAS_TYPE_MIXED
+XML_SCHEMAS_TYPE_NORMVALUENEEDED
+XML_SCHEMAS_TYPE_OWNED_ATTR_WILDCARD
+XML_SCHEMAS_TYPE_REDEFINED
+XML_SCHEMAS_TYPE_VARIETY_ABSENT
+XML_SCHEMAS_TYPE_VARIETY_ATOMIC
+XML_SCHEMAS_TYPE_VARIETY_LIST
+XML_SCHEMAS_TYPE_VARIETY_UNION
+XML_SCHEMAS_TYPE_WHITESPACE_COLLAPSE
+XML_SCHEMAS_TYPE_WHITESPACE_PRESERVE
+XML_SCHEMAS_TYPE_WHITESPACE_REPLACE
+XML_SCHEMAS_UBYTE
+XML_SCHEMAS_UINT
+XML_SCHEMAS_ULONG
+XML_SCHEMAS_UNKNOWN
+XML_SCHEMAS_USHORT
+XML_SCHEMAS_WILDCARD_COMPLETE
+XML_SCHEMATRONV_ASSERT
+XML_SCHEMATRONV_REPORT
+XML_SCHEMATRON_OUT_BUFFER
+XML_SCHEMATRON_OUT_ERROR
+XML_SCHEMATRON_OUT_FILE
+XML_SCHEMATRON_OUT_IO
+XML_SCHEMATRON_OUT_QUIET
+XML_SCHEMATRON_OUT_TEXT
+XML_SCHEMATRON_OUT_XML
+XML_SCHEMAV_ATTRINVALID
+XML_SCHEMAV_ATTRUNKNOWN
+XML_SCHEMAV_CONSTRUCT
+XML_SCHEMAV_CVC_ATTRIBUTE_1
+XML_SCHEMAV_CVC_ATTRIBUTE_2
+XML_SCHEMAV_CVC_ATTRIBUTE_3
+XML_SCHEMAV_CVC_ATTRIBUTE_4
+XML_SCHEMAV_CVC_AU
+XML_SCHEMAV_CVC_COMPLEX_TYPE_1
+XML_SCHEMAV_CVC_COMPLEX_TYPE_2_1
+XML_SCHEMAV_CVC_COMPLEX_TYPE_2_2
+XML_SCHEMAV_CVC_COMPLEX_TYPE_2_3
+XML_SCHEMAV_CVC_COMPLEX_TYPE_2_4
+XML_SCHEMAV_CVC_COMPLEX_TYPE_3_1
+XML_SCHEMAV_CVC_COMPLEX_TYPE_3_2_1
+XML_SCHEMAV_CVC_COMPLEX_TYPE_3_2_2
+XML_SCHEMAV_CVC_COMPLEX_TYPE_4
+XML_SCHEMAV_CVC_COMPLEX_TYPE_5_1
+XML_SCHEMAV_CVC_COMPLEX_TYPE_5_2
+XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_1
+XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_2
+XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_3
+XML_SCHEMAV_CVC_ELT_1
+XML_SCHEMAV_CVC_ELT_2
+XML_SCHEMAV_CVC_ELT_3_1
+XML_SCHEMAV_CVC_ELT_3_2_1
+XML_SCHEMAV_CVC_ELT_3_2_2
+XML_SCHEMAV_CVC_ELT_4_1
+XML_SCHEMAV_CVC_ELT_4_2
+XML_SCHEMAV_CVC_ELT_4_3
+XML_SCHEMAV_CVC_ELT_5_1_1
+XML_SCHEMAV_CVC_ELT_5_1_2
+XML_SCHEMAV_CVC_ELT_5_2_1
+XML_SCHEMAV_CVC_ELT_5_2_2_1
+XML_SCHEMAV_CVC_ELT_5_2_2_2_1
+XML_SCHEMAV_CVC_ELT_5_2_2_2_2
+XML_SCHEMAV_CVC_ELT_6
+XML_SCHEMAV_CVC_ELT_7
+XML_SCHEMAV_CVC_ENUMERATION_VALID
+XML_SCHEMAV_CVC_FACET_VALID
+XML_SCHEMAV_CVC_FRACTIONDIGITS_VALID
+XML_SCHEMAV_CVC_IDC
+XML_SCHEMAV_CVC_LENGTH_VALID
+XML_SCHEMAV_CVC_MAXEXCLUSIVE_VALID
+XML_SCHEMAV_CVC_MAXINCLUSIVE_VALID
+XML_SCHEMAV_CVC_MAXLENGTH_VALID
+XML_SCHEMAV_CVC_MINEXCLUSIVE_VALID
+XML_SCHEMAV_CVC_MININCLUSIVE_VALID
+XML_SCHEMAV_CVC_MINLENGTH_VALID
+XML_SCHEMAV_CVC_PATTERN_VALID
+XML_SCHEMAV_CVC_TOTALDIGITS_VALID
+XML_SCHEMAV_CVC_TYPE_1
+XML_SCHEMAV_CVC_TYPE_2
+XML_SCHEMAV_CVC_TYPE_3_1_1
+XML_SCHEMAV_CVC_TYPE_3_1_2
+XML_SCHEMAV_CVC_WILDCARD
+XML_SCHEMAV_DOCUMENT_ELEMENT_MISSING
+XML_SCHEMAV_ELEMCONT
+XML_SCHEMAV_ELEMENT_CONTENT
+XML_SCHEMAV_EXTRACONTENT
+XML_SCHEMAV_FACET
+XML_SCHEMAV_HAVEDEFAULT
+XML_SCHEMAV_INTERNAL
+XML_SCHEMAV_INVALIDATTR
+XML_SCHEMAV_INVALIDELEM
+XML_SCHEMAV_ISABSTRACT
+XML_SCHEMAV_MISC
+XML_SCHEMAV_MISSING
+XML_SCHEMAV_NOROLLBACK
+XML_SCHEMAV_NOROOT
+XML_SCHEMAV_NOTDETERMINIST
+XML_SCHEMAV_NOTEMPTY
+XML_SCHEMAV_NOTNILLABLE
+XML_SCHEMAV_NOTSIMPLE
+XML_SCHEMAV_NOTTOPLEVEL
+XML_SCHEMAV_NOTYPE
+XML_SCHEMAV_UNDECLAREDELEM
+XML_SCHEMAV_VALUE
+XML_SCHEMAV_WRONGELEM
+XML_SCHEMA_CONTENT_ANY
+XML_SCHEMA_CONTENT_BASIC
+XML_SCHEMA_CONTENT_ELEMENTS
+XML_SCHEMA_CONTENT_EMPTY
+XML_SCHEMA_CONTENT_MIXED
+XML_SCHEMA_CONTENT_MIXED_OR_ELEMENTS
+XML_SCHEMA_CONTENT_SIMPLE
+XML_SCHEMA_CONTENT_UNKNOWN
+XML_SCHEMA_EXTRA_ATTR_USE_PROHIB
+XML_SCHEMA_EXTRA_QNAMEREF
+XML_SCHEMA_FACET_ENUMERATION
+XML_SCHEMA_FACET_FRACTIONDIGITS
+XML_SCHEMA_FACET_LENGTH
+XML_SCHEMA_FACET_MAXEXCLUSIVE
+XML_SCHEMA_FACET_MAXINCLUSIVE
+XML_SCHEMA_FACET_MAXLENGTH
+XML_SCHEMA_FACET_MINEXCLUSIVE
+XML_SCHEMA_FACET_MININCLUSIVE
+XML_SCHEMA_FACET_MINLENGTH
+XML_SCHEMA_FACET_PATTERN
+XML_SCHEMA_FACET_TOTALDIGITS
+XML_SCHEMA_FACET_WHITESPACE
+XML_SCHEMA_TYPE_ALL
+XML_SCHEMA_TYPE_ANY
+XML_SCHEMA_TYPE_ANY_ATTRIBUTE
+XML_SCHEMA_TYPE_ATTRIBUTE
+XML_SCHEMA_TYPE_ATTRIBUTEGROUP
+XML_SCHEMA_TYPE_ATTRIBUTE_USE
+XML_SCHEMA_TYPE_BASIC
+XML_SCHEMA_TYPE_CHOICE
+XML_SCHEMA_TYPE_COMPLEX
+XML_SCHEMA_TYPE_COMPLEX_CONTENT
+XML_SCHEMA_TYPE_ELEMENT
+XML_SCHEMA_TYPE_EXTENSION
+XML_SCHEMA_TYPE_FACET
+XML_SCHEMA_TYPE_GROUP
+XML_SCHEMA_TYPE_IDC_KEY
+XML_SCHEMA_TYPE_IDC_KEYREF
+XML_SCHEMA_TYPE_IDC_UNIQUE
+XML_SCHEMA_TYPE_LIST
+XML_SCHEMA_TYPE_NOTATION
+XML_SCHEMA_TYPE_PARTICLE
+XML_SCHEMA_TYPE_RESTRICTION
+XML_SCHEMA_TYPE_SEQUENCE
+XML_SCHEMA_TYPE_SIMPLE
+XML_SCHEMA_TYPE_SIMPLE_CONTENT
+XML_SCHEMA_TYPE_UNION
+XML_SCHEMA_TYPE_UR
+XML_SCHEMA_VAL_VC_I_CREATE
+XML_SCHEMA_WHITESPACE_COLLAPSE
+XML_SCHEMA_WHITESPACE_PRESERVE
+XML_SCHEMA_WHITESPACE_REPLACE
+XML_SCHEMA_WHITESPACE_UNKNOWN
+XML_SKIP_IDS
+XML_SUBSTITUTE_BOTH
+XML_SUBSTITUTE_NONE
+XML_SUBSTITUTE_PEREF
+XML_SUBSTITUTE_REF
+XML_TEXTREADER_MODE_CLOSED
+XML_TEXTREADER_MODE_EOF
+XML_TEXTREADER_MODE_ERROR
+XML_TEXTREADER_MODE_INITIAL
+XML_TEXTREADER_MODE_INTERACTIVE
+XML_TEXTREADER_MODE_READING
+XML_TEXT_NODE
+XML_TREE_INVALID_DEC
+XML_TREE_INVALID_HEX
+XML_TREE_NOT_UTF8
+XML_TREE_UNTERMINATED_ENTITY
+XML_WAR_CATALOG_PI
+XML_WAR_ENTITY_REDEFINED
+XML_WAR_LANG_VALUE
+XML_WAR_NS_COLUMN
+XML_WAR_NS_URI
+XML_WAR_NS_URI_RELATIVE
+XML_WAR_SPACE_VALUE
+XML_WAR_UNDECLARED_ENTITY
+XML_WAR_UNKNOWN_VERSION
+XML_WITH_AUTOMATA
+XML_WITH_C14N
+XML_WITH_CATALOG
+XML_WITH_DEBUG
+XML_WITH_DEBUG_MEM
+XML_WITH_DEBUG_RUN
+XML_WITH_EXPR
+XML_WITH_FTP
+XML_WITH_HTML
+XML_WITH_HTTP
+XML_WITH_ICONV
+XML_WITH_ICU
+XML_WITH_ISO8859X
+XML_WITH_LEGACY
+XML_WITH_LZMA
+XML_WITH_MODULES
+XML_WITH_NONE
+XML_WITH_OUTPUT
+XML_WITH_PATTERN
+XML_WITH_PUSH
+XML_WITH_READER
+XML_WITH_REGEXP
+XML_WITH_SAX1
+XML_WITH_SCHEMAS
+XML_WITH_SCHEMATRON
+XML_WITH_THREAD
+XML_WITH_TREE
+XML_WITH_UNICODE
+XML_WITH_VALID
+XML_WITH_WRITER
+XML_WITH_XINCLUDE
+XML_WITH_XPATH
+XML_WITH_XPTR
+XML_WITH_ZLIB
+XML_XINCLUDE_BUILD_FAILED
+XML_XINCLUDE_DEPRECATED_NS
+XML_XINCLUDE_END
+XML_XINCLUDE_ENTITY_DEF_MISMATCH
+XML_XINCLUDE_FALLBACKS_IN_INCLUDE
+XML_XINCLUDE_FALLBACK_NOT_IN_INCLUDE
+XML_XINCLUDE_FRAGMENT_ID
+XML_XINCLUDE_HREF_URI
+XML_XINCLUDE_INCLUDE_IN_INCLUDE
+XML_XINCLUDE_INVALID_CHAR
+XML_XINCLUDE_MULTIPLE_ROOT
+XML_XINCLUDE_NO_FALLBACK
+XML_XINCLUDE_NO_HREF
+XML_XINCLUDE_PARSE_VALUE
+XML_XINCLUDE_RECURSION
+XML_XINCLUDE_START
+XML_XINCLUDE_TEXT_DOCUMENT
+XML_XINCLUDE_TEXT_FRAGMENT
+XML_XINCLUDE_UNKNOWN_ENCODING
+XML_XINCLUDE_XPTR_FAILED
+XML_XINCLUDE_XPTR_RESULT
+XML_XML_ID
+XML_XML_NAMESPACE
+XML_XPATH_CHECKNS
+XML_XPATH_ENCODING_ERROR
+XML_XPATH_EXPRESSION_OK
+XML_XPATH_EXPR_ERROR
+XML_XPATH_INVALID_ARITY
+XML_XPATH_INVALID_CHAR_ERROR
+XML_XPATH_INVALID_CTXT_POSITION
+XML_XPATH_INVALID_CTXT_SIZE
+XML_XPATH_INVALID_OPERAND
+XML_XPATH_INVALID_PREDICATE_ERROR
+XML_XPATH_INVALID_TYPE
+XML_XPATH_MEMORY_ERROR
+XML_XPATH_NOVAR
+XML_XPATH_NUMBER_ERROR
+XML_XPATH_START_LITERAL_ERROR
+XML_XPATH_UNCLOSED_ERROR
+XML_XPATH_UNDEF_PREFIX_ERROR
+XML_XPATH_UNDEF_VARIABLE_ERROR
+XML_XPATH_UNFINISHED_LITERAL_ERROR
+XML_XPATH_UNKNOWN_FUNC_ERROR
+XML_XPATH_VARIABLE_REF_ERROR
+XML_XPTR_CHILDSEQ_START
+XML_XPTR_EVAL_FAILED
+XML_XPTR_EXTRA_OBJECTS
+XML_XPTR_RESOURCE_ERROR
+XML_XPTR_SUB_RESOURCE_ERROR
+XML_XPTR_SYNTAX_ERROR
+XML_XPTR_UNKNOWN_SCHEME
+XPATH_BOOLEAN
+XPATH_ENCODING_ERROR
+XPATH_EXPRESSION_OK
+XPATH_EXPR_ERROR
+XPATH_FORBID_VARIABLE_ERROR
+XPATH_INVALID_ARITY
+XPATH_INVALID_CHAR_ERROR
+XPATH_INVALID_CTXT
+XPATH_INVALID_CTXT_POSITION
+XPATH_INVALID_CTXT_SIZE
+XPATH_INVALID_OPERAND
+XPATH_INVALID_PREDICATE_ERROR
+XPATH_INVALID_TYPE
+XPATH_LOCATIONSET
+XPATH_MEMORY_ERROR
+XPATH_NODESET
+XPATH_NUMBER
+XPATH_NUMBER_ERROR
+XPATH_POINT
+XPATH_RANGE
+XPATH_STACK_ERROR
+XPATH_START_LITERAL_ERROR
+XPATH_STRING
+XPATH_UNCLOSED_ERROR
+XPATH_UNDEFINED
+XPATH_UNDEF_PREFIX_ERROR
+XPATH_UNDEF_VARIABLE_ERROR
+XPATH_UNFINISHED_LITERAL_ERROR
+XPATH_UNKNOWN_FUNC_ERROR
+XPATH_USERS
+XPATH_VARIABLE_REF_ERROR
+XPATH_XSLT_TREE
+XPTR_RESOURCE_ERROR
+XPTR_SUB_RESOURCE_ERROR
+XPTR_SYNTAX_ERROR
+XP_ERROR
+XP_ERROR0
+

Letter _:

_REENTRANT
+_htmlElemDesc
+_htmlEntityDesc
+_uconv_t
+_xlinkHandler
+_xmlAttr
+_xmlAttribute
+_xmlBuffer
+_xmlChLRange
+_xmlChRangeGroup
+_xmlChSRange
+_xmlCharEncodingHandler
+_xmlDOMWrapCtxt
+_xmlDoc
+_xmlDtd
+_xmlElement
+_xmlElementContent
+_xmlEntity
+_xmlEnumeration
+_xmlError
+_xmlGlobalState
+_xmlID
+_xmlLocationSet
+_xmlNode
+_xmlNodeSet
+_xmlNotation
+_xmlNs
+_xmlOutputBuffer
+_xmlParserCtxt
+_xmlParserInput
+_xmlParserInputBuffer
+_xmlParserNodeInfo
+_xmlParserNodeInfoSeq
+_xmlRef
+_xmlSAXHandler
+_xmlSAXHandlerV1
+_xmlSAXLocator
+_xmlSchema
+_xmlSchemaAnnot
+_xmlSchemaAttribute
+_xmlSchemaAttributeGroup
+_xmlSchemaAttributeLink
+_xmlSchemaElement
+_xmlSchemaFacet
+_xmlSchemaFacetLink
+_xmlSchemaNotation
+_xmlSchemaType
+_xmlSchemaTypeLink
+_xmlSchemaWildcard
+_xmlSchemaWildcardNs
+_xmlShellCtxt
+_xmlURI
+_xmlValidCtxt
+_xmlXPathAxis
+_xmlXPathContext
+_xmlXPathFunct
+_xmlXPathObject
+_xmlXPathParserContext
+_xmlXPathType
+_xmlXPathVariable
+

Letter a:

attribute
+attributeDecl
+attributeDeclSAXFunc
+attributeSAXFunc
+

Letter c:

cdataBlock
+cdataBlockSAXFunc
+characters
+charactersSAXFunc
+checkNamespace
+comment
+commentSAXFunc
+

Letter d:

docbCreateFileParserCtxt
+docbCreatePushParserCtxt
+docbDefaultSAXHandler
+docbDefaultSAXHandlerInit
+docbDocPtr
+docbEncodeEntities
+docbFreeParserCtxt
+docbParseChunk
+docbParseDoc
+docbParseDocument
+docbParseFile
+docbParserCtxt
+docbParserCtxtPtr
+docbParserInput
+docbParserInputPtr
+docbSAXHandler
+docbSAXHandlerPtr
+docbSAXParseDoc
+docbSAXParseFile
+

Letter e:

elementDecl
+elementDeclSAXFunc
+emptyExp
+endDocument
+endDocumentSAXFunc
+endElement
+endElementNsSAX2Func
+endElementSAXFunc
+entityDecl
+entityDeclSAXFunc
+errorSAXFunc
+externalSubset
+externalSubsetSAXFunc
+

Letter f:

fatalErrorSAXFunc
+forbiddenExp
+ftpDataCallback
+ftpListCallback
+

Letter g:

getColumnNumber
+getEntity
+getEntitySAXFunc
+getLineNumber
+getNamespace
+getParameterEntity
+getParameterEntitySAXFunc
+getPublicId
+getSystemId
+globalNamespace
+

Letter h:

hasExternalSubset
+hasExternalSubsetSAXFunc
+hasInternalSubset
+hasInternalSubsetSAXFunc
+htmlAttrAllowed
+htmlAutoCloseTag
+htmlCreateFileParserCtxt
+htmlCreateMemoryParserCtxt
+htmlCreatePushParserCtxt
+htmlCtxtReadDoc
+htmlCtxtReadFd
+htmlCtxtReadFile
+htmlCtxtReadIO
+htmlCtxtReadMemory
+htmlCtxtReset
+htmlCtxtUseOptions
+htmlDefaultSAXHandler
+htmlDefaultSAXHandlerInit
+htmlDefaultSubelement
+htmlDocContentDumpFormatOutput
+htmlDocContentDumpOutput
+htmlDocDump
+htmlDocDumpMemory
+htmlDocDumpMemoryFormat
+htmlDocPtr
+htmlElemDesc
+htmlElemDescPtr
+htmlElementAllowedHere
+htmlElementAllowedHereDesc
+htmlElementStatusHere
+htmlEncodeEntities
+htmlEntityDesc
+htmlEntityDescPtr
+htmlEntityLookup
+htmlEntityValueLookup
+htmlFreeParserCtxt
+htmlGetMetaEncoding
+htmlHandleOmittedElem
+htmlInitAutoClose
+htmlIsAutoClosed
+htmlIsBooleanAttr
+htmlIsScriptAttribute
+htmlNewDoc
+htmlNewDocNoDtD
+htmlNewParserCtxt
+htmlNodeDump
+htmlNodeDumpFile
+htmlNodeDumpFileFormat
+htmlNodeDumpFormatOutput
+htmlNodeDumpOutput
+htmlNodePtr
+htmlNodeStatus
+htmlParseCharRef
+htmlParseChunk
+htmlParseDoc
+htmlParseDocument
+htmlParseElement
+htmlParseEntityRef
+htmlParseFile
+htmlParserCtxt
+htmlParserCtxtPtr
+htmlParserInput
+htmlParserInputPtr
+htmlParserNodeInfo
+htmlParserOption
+htmlReadDoc
+htmlReadFd
+htmlReadFile
+htmlReadIO
+htmlReadMemory
+htmlRequiredAttrs
+htmlSAXHandler
+htmlSAXHandlerPtr
+htmlSAXParseDoc
+htmlSAXParseFile
+htmlSaveFile
+htmlSaveFileEnc
+htmlSaveFileFormat
+htmlSetMetaEncoding
+htmlStatus
+htmlTagLookup
+

Letter i:

ignorableWhitespace
+ignorableWhitespaceSAXFunc
+initGenericErrorDefaultFunc
+initdocbDefaultSAXHandler
+inithtmlDefaultSAXHandler
+initxmlDefaultSAXHandler
+inputPop
+inputPush
+internalSubset
+internalSubsetSAXFunc
+isStandalone
+isStandaloneSAXFunc
+isolat1ToUTF8
+

Letter n:

namePop
+namePush
+namespaceDecl
+nodePop
+nodePush
+notationDecl
+notationDeclSAXFunc
+

Letter o:

oldXMLWDcompatibility
+

Letter p:

processingInstruction
+processingInstructionSAXFunc
+

Letter r:

reference
+referenceSAXFunc
+resolveEntity
+resolveEntitySAXFunc
+

Letter s:

setDocumentLocator
+setDocumentLocatorSAXFunc
+setNamespace
+startDocument
+startDocumentSAXFunc
+startElement
+startElementNsSAX2Func
+startElementSAXFunc
+

Letter u:

uconv_t
+unparsedEntityDecl
+unparsedEntityDeclSAXFunc
+

Letter v:

valuePop
+valuePush
+

Letter w:

warningSAXFunc
+

Letter x:

xlinkActuate
+xlinkExtendedLinkFunk
+xlinkExtendedLinkSetFunk
+xlinkGetDefaultDetect
+xlinkGetDefaultHandler
+xlinkHRef
+xlinkHandler
+xlinkHandlerPtr
+xlinkIsLink
+xlinkNodeDetectFunc
+xlinkRole
+xlinkSetDefaultDetect
+xlinkSetDefaultHandler
+xlinkShow
+xlinkSimpleLinkFunk
+xlinkTitle
+xlinkType
+xmlACatalogAdd
+xmlACatalogDump
+xmlACatalogRemove
+xmlACatalogResolve
+xmlACatalogResolvePublic
+xmlACatalogResolveSystem
+xmlACatalogResolveURI
+xmlAddAttributeDecl
+xmlAddChild
+xmlAddChildList
+xmlAddDocEntity
+xmlAddDtdEntity
+xmlAddElementDecl
+xmlAddEncodingAlias
+xmlAddID
+xmlAddNextSibling
+xmlAddNotationDecl
+xmlAddPrevSibling
+xmlAddRef
+xmlAddSibling
+xmlAllocOutputBuffer
+xmlAllocParserInputBuffer
+xmlAttr
+xmlAttrPtr
+xmlAttrSerializeTxtContent
+xmlAttribute
+xmlAttributeDefault
+xmlAttributePtr
+xmlAttributeTable
+xmlAttributeTablePtr
+xmlAttributeType
+xmlAutomata
+xmlAutomataCompile
+xmlAutomataGetInitState
+xmlAutomataIsDeterminist
+xmlAutomataNewAllTrans
+xmlAutomataNewCountTrans
+xmlAutomataNewCountTrans2
+xmlAutomataNewCountedTrans
+xmlAutomataNewCounter
+xmlAutomataNewCounterTrans
+xmlAutomataNewEpsilon
+xmlAutomataNewNegTrans
+xmlAutomataNewOnceTrans
+xmlAutomataNewOnceTrans2
+xmlAutomataNewState
+xmlAutomataNewTransition
+xmlAutomataNewTransition2
+xmlAutomataPtr
+xmlAutomataSetFinalState
+xmlAutomataState
+xmlAutomataStatePtr
+xmlBoolToText
+xmlBuf
+xmlBufContent
+xmlBufEnd
+xmlBufGetNodeContent
+xmlBufNodeDump
+xmlBufPtr
+xmlBufShrink
+xmlBufUse
+xmlBuffer
+xmlBufferAdd
+xmlBufferAddHead
+xmlBufferAllocScheme
+xmlBufferAllocationScheme
+xmlBufferCCat
+xmlBufferCat
+xmlBufferContent
+xmlBufferCreate
+xmlBufferCreateSize
+xmlBufferCreateStatic
+xmlBufferDetach
+xmlBufferDump
+xmlBufferEmpty
+xmlBufferFree
+xmlBufferGrow
+xmlBufferLength
+xmlBufferPtr
+xmlBufferResize
+xmlBufferSetAllocationScheme
+xmlBufferShrink
+xmlBufferWriteCHAR
+xmlBufferWriteChar
+xmlBufferWriteQuotedString
+xmlBuildQName
+xmlBuildRelativeURI
+xmlBuildURI
+xmlByteConsumed
+xmlC14NDocDumpMemory
+xmlC14NDocSave
+xmlC14NDocSaveTo
+xmlC14NExecute
+xmlC14NIsVisibleCallback
+xmlC14NMode
+xmlCanonicPath
+xmlCatalog
+xmlCatalogAdd
+xmlCatalogAddLocal
+xmlCatalogAllow
+xmlCatalogCleanup
+xmlCatalogConvert
+xmlCatalogDump
+xmlCatalogFreeLocal
+xmlCatalogGetDefaults
+xmlCatalogGetPublic
+xmlCatalogGetSystem
+xmlCatalogIsEmpty
+xmlCatalogLocalResolve
+xmlCatalogLocalResolveURI
+xmlCatalogPrefer
+xmlCatalogPtr
+xmlCatalogRemove
+xmlCatalogResolve
+xmlCatalogResolvePublic
+xmlCatalogResolveSystem
+xmlCatalogResolveURI
+xmlCatalogSetDebug
+xmlCatalogSetDefaultPrefer
+xmlCatalogSetDefaults
+xmlChLRange
+xmlChLRangePtr
+xmlChRangeGroup
+xmlChRangeGroupPtr
+xmlChSRange
+xmlChSRangePtr
+xmlChar
+xmlCharEncCloseFunc
+xmlCharEncFirstLine
+xmlCharEncInFunc
+xmlCharEncOutFunc
+xmlCharEncoding
+xmlCharEncodingHandler
+xmlCharEncodingHandlerPtr
+xmlCharEncodingInputFunc
+xmlCharEncodingOutputFunc
+xmlCharInRange
+xmlCharStrdup
+xmlCharStrndup
+xmlCheckFilename
+xmlCheckHTTPInput
+xmlCheckLanguageID
+xmlCheckUTF8
+xmlCheckVersion
+xmlChildElementCount
+xmlChildrenNode
+xmlCleanupCharEncodingHandlers
+xmlCleanupEncodingAliases
+xmlCleanupGlobals
+xmlCleanupInputCallbacks
+xmlCleanupMemory
+xmlCleanupOutputCallbacks
+xmlCleanupParser
+xmlCleanupPredefinedEntities
+xmlCleanupThreads
+xmlClearNodeInfoSeq
+xmlClearParserCtxt
+xmlConvertSGMLCatalog
+xmlCopyAttributeTable
+xmlCopyChar
+xmlCopyCharMultiByte
+xmlCopyDoc
+xmlCopyDocElementContent
+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
+xmlDOMWrapAcquireNsFunction
+xmlDOMWrapAdoptNode
+xmlDOMWrapCloneNode
+xmlDOMWrapCtxt
+xmlDOMWrapCtxtPtr
+xmlDOMWrapFreeCtxt
+xmlDOMWrapNewCtxt
+xmlDOMWrapReconcileNamespaces
+xmlDOMWrapRemoveNode
+xmlDebugCheckDocument
+xmlDebugDumpAttr
+xmlDebugDumpAttrList
+xmlDebugDumpDTD
+xmlDebugDumpDocument
+xmlDebugDumpDocumentHead
+xmlDebugDumpEntities
+xmlDebugDumpNode
+xmlDebugDumpNodeList
+xmlDebugDumpOneNode
+xmlDebugDumpString
+xmlDecodeEntities
+xmlDefaultBufferSize
+xmlDefaultSAXHandler
+xmlDefaultSAXHandlerInit
+xmlDefaultSAXLocator
+xmlDelEncodingAlias
+xmlDeregisterNodeDefault
+xmlDeregisterNodeDefaultValue
+xmlDeregisterNodeFunc
+xmlDetectCharEncoding
+xmlDict
+xmlDictCleanup
+xmlDictCreate
+xmlDictCreateSub
+xmlDictExists
+xmlDictFree
+xmlDictGetUsage
+xmlDictLookup
+xmlDictOwns
+xmlDictPtr
+xmlDictQLookup
+xmlDictReference
+xmlDictSetLimit
+xmlDictSize
+xmlDllMain
+xmlDoValidityCheckingDefaultValue
+xmlDoc
+xmlDocCopyNode
+xmlDocCopyNodeList
+xmlDocDump
+xmlDocDumpFormatMemory
+xmlDocDumpFormatMemoryEnc
+xmlDocDumpMemory
+xmlDocDumpMemoryEnc
+xmlDocFormatDump
+xmlDocGetRootElement
+xmlDocProperties
+xmlDocPtr
+xmlDocSetRootElement
+xmlDtd
+xmlDtdPtr
+xmlDumpAttributeDecl
+xmlDumpAttributeTable
+xmlDumpElementDecl
+xmlDumpElementTable
+xmlDumpEntitiesTable
+xmlDumpEntityDecl
+xmlDumpNotationDecl
+xmlDumpNotationTable
+xmlElemDump
+xmlElement
+xmlElementContent
+xmlElementContentOccur
+xmlElementContentPtr
+xmlElementContentType
+xmlElementPtr
+xmlElementTable
+xmlElementTablePtr
+xmlElementType
+xmlElementTypeVal
+xmlEncodeEntities
+xmlEncodeEntitiesReentrant
+xmlEncodeSpecialChars
+xmlEntitiesTable
+xmlEntitiesTablePtr
+xmlEntity
+xmlEntityPtr
+xmlEntityReferenceFunc
+xmlEntityType
+xmlEnumeration
+xmlEnumerationPtr
+xmlErrMemory
+xmlError
+xmlErrorDomain
+xmlErrorLevel
+xmlErrorPtr
+xmlExpCtxt
+xmlExpCtxtNbCons
+xmlExpCtxtNbNodes
+xmlExpCtxtPtr
+xmlExpDump
+xmlExpExpDerive
+xmlExpFree
+xmlExpFreeCtxt
+xmlExpGetLanguage
+xmlExpGetStart
+xmlExpIsNillable
+xmlExpMaxToken
+xmlExpNewAtom
+xmlExpNewCtxt
+xmlExpNewOr
+xmlExpNewRange
+xmlExpNewSeq
+xmlExpNode
+xmlExpNodePtr
+xmlExpNodeType
+xmlExpParse
+xmlExpRef
+xmlExpStringDerive
+xmlExpSubsume
+xmlExternalEntityLoader
+xmlFeature
+xmlFileClose
+xmlFileMatch
+xmlFileOpen
+xmlFileRead
+xmlFindCharEncodingHandler
+xmlFirstElementChild
+xmlFree
+xmlFreeAttributeTable
+xmlFreeAutomata
+xmlFreeCatalog
+xmlFreeDoc
+xmlFreeDocElementContent
+xmlFreeDtd
+xmlFreeElementContent
+xmlFreeElementTable
+xmlFreeEntitiesTable
+xmlFreeEnumeration
+xmlFreeFunc
+xmlFreeIDTable
+xmlFreeInputStream
+xmlFreeMutex
+xmlFreeNode
+xmlFreeNodeList
+xmlFreeNotationTable
+xmlFreeNs
+xmlFreeNsList
+xmlFreeParserCtxt
+xmlFreeParserInputBuffer
+xmlFreePattern
+xmlFreePatternList
+xmlFreeProp
+xmlFreePropList
+xmlFreeRMutex
+xmlFreeRefTable
+xmlFreeStreamCtxt
+xmlFreeTextReader
+xmlFreeTextWriter
+xmlFreeURI
+xmlFreeValidCtxt
+xmlGcMemGet
+xmlGcMemSetup
+xmlGenericError
+xmlGenericErrorContext
+xmlGenericErrorFunc
+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
+xmlGetWarningsDefaultValue
+xmlGlobalState
+xmlGlobalStatePtr
+xmlHandleEntity
+xmlHasFeature
+xmlHasNsProp
+xmlHasProp
+xmlHashAddEntry
+xmlHashAddEntry2
+xmlHashAddEntry3
+xmlHashCopier
+xmlHashCopy
+xmlHashCreate
+xmlHashCreateDict
+xmlHashDeallocator
+xmlHashFree
+xmlHashLookup
+xmlHashLookup2
+xmlHashLookup3
+xmlHashQLookup
+xmlHashQLookup2
+xmlHashQLookup3
+xmlHashRemoveEntry
+xmlHashRemoveEntry2
+xmlHashRemoveEntry3
+xmlHashScan
+xmlHashScan3
+xmlHashScanFull
+xmlHashScanFull3
+xmlHashScanner
+xmlHashScannerFull
+xmlHashSize
+xmlHashTable
+xmlHashTablePtr
+xmlHashUpdateEntry
+xmlHashUpdateEntry2
+xmlHashUpdateEntry3
+xmlID
+xmlIDPtr
+xmlIDTable
+xmlIDTablePtr
+xmlIOFTPClose
+xmlIOFTPMatch
+xmlIOFTPOpen
+xmlIOFTPRead
+xmlIOHTTPClose
+xmlIOHTTPMatch
+xmlIOHTTPOpen
+xmlIOHTTPOpenW
+xmlIOHTTPRead
+xmlIOParseDTD
+xmlIndentTreeOutput
+xmlInitCharEncodingHandlers
+xmlInitGlobals
+xmlInitMemory
+xmlInitNodeInfoSeq
+xmlInitParser
+xmlInitParserCtxt
+xmlInitThreads
+xmlInitializeCatalog
+xmlInitializeDict
+xmlInitializeGlobalState
+xmlInitializePredefinedEntities
+xmlInputCloseCallback
+xmlInputMatchCallback
+xmlInputOpenCallback
+xmlInputReadCallback
+xmlIsBaseChar
+xmlIsBaseCharGroup
+xmlIsBaseCharQ
+xmlIsBaseChar_ch
+xmlIsBlank
+xmlIsBlankNode
+xmlIsBlankQ
+xmlIsBlank_ch
+xmlIsChar
+xmlIsCharGroup
+xmlIsCharQ
+xmlIsChar_ch
+xmlIsCombining
+xmlIsCombiningGroup
+xmlIsCombiningQ
+xmlIsDigit
+xmlIsDigitGroup
+xmlIsDigitQ
+xmlIsDigit_ch
+xmlIsExtender
+xmlIsExtenderGroup
+xmlIsExtenderQ
+xmlIsExtender_ch
+xmlIsID
+xmlIsIdeographic
+xmlIsIdeographicGroup
+xmlIsIdeographicQ
+xmlIsLetter
+xmlIsMainThread
+xmlIsMixedElement
+xmlIsPubidChar
+xmlIsPubidCharQ
+xmlIsPubidChar_ch
+xmlIsPubidChar_tab
+xmlIsRef
+xmlIsXHTML
+xmlKeepBlanksDefault
+xmlKeepBlanksDefaultValue
+xmlLastElementChild
+xmlLastError
+xmlLineNumbersDefault
+xmlLineNumbersDefaultValue
+xmlLink
+xmlLinkGetData
+xmlLinkPtr
+xmlList
+xmlListAppend
+xmlListClear
+xmlListCopy
+xmlListCreate
+xmlListDataCompare
+xmlListDeallocator
+xmlListDelete
+xmlListDup
+xmlListEmpty
+xmlListEnd
+xmlListFront
+xmlListInsert
+xmlListMerge
+xmlListPopBack
+xmlListPopFront
+xmlListPtr
+xmlListPushBack
+xmlListPushFront
+xmlListRemoveAll
+xmlListRemoveFirst
+xmlListRemoveLast
+xmlListReverse
+xmlListReverseSearch
+xmlListReverseWalk
+xmlListSearch
+xmlListSize
+xmlListSort
+xmlListWalk
+xmlListWalker
+xmlLoadACatalog
+xmlLoadCatalog
+xmlLoadCatalogs
+xmlLoadExtDtdDefaultValue
+xmlLoadExternalEntity
+xmlLoadSGMLSuperCatalog
+xmlLocationSet
+xmlLocationSetPtr
+xmlLockLibrary
+xmlLsCountNode
+xmlLsOneNode
+xmlMalloc
+xmlMallocAtomic
+xmlMallocAtomicLoc
+xmlMallocFunc
+xmlMallocLoc
+xmlMemBlocks
+xmlMemDisplay
+xmlMemDisplayLast
+xmlMemFree
+xmlMemGet
+xmlMemMalloc
+xmlMemRealloc
+xmlMemSetup
+xmlMemShow
+xmlMemStrdup
+xmlMemStrdupLoc
+xmlMemUsed
+xmlMemoryDump
+xmlMemoryStrdup
+xmlModule
+xmlModuleClose
+xmlModuleFree
+xmlModuleOpen
+xmlModuleOption
+xmlModulePtr
+xmlModuleSymbol
+xmlMutex
+xmlMutexLock
+xmlMutexPtr
+xmlMutexUnlock
+xmlNamespaceParseNCName
+xmlNamespaceParseNSDef
+xmlNamespaceParseQName
+xmlNanoFTPCheckResponse
+xmlNanoFTPCleanup
+xmlNanoFTPClose
+xmlNanoFTPCloseConnection
+xmlNanoFTPConnect
+xmlNanoFTPConnectTo
+xmlNanoFTPCwd
+xmlNanoFTPDele
+xmlNanoFTPFreeCtxt
+xmlNanoFTPGet
+xmlNanoFTPGetConnection
+xmlNanoFTPGetResponse
+xmlNanoFTPGetSocket
+xmlNanoFTPInit
+xmlNanoFTPList
+xmlNanoFTPNewCtxt
+xmlNanoFTPOpen
+xmlNanoFTPProxy
+xmlNanoFTPQuit
+xmlNanoFTPRead
+xmlNanoFTPScanProxy
+xmlNanoFTPUpdateURL
+xmlNanoHTTPAuthHeader
+xmlNanoHTTPCleanup
+xmlNanoHTTPClose
+xmlNanoHTTPContentLength
+xmlNanoHTTPEncoding
+xmlNanoHTTPFetch
+xmlNanoHTTPInit
+xmlNanoHTTPMethod
+xmlNanoHTTPMethodRedir
+xmlNanoHTTPMimeType
+xmlNanoHTTPOpen
+xmlNanoHTTPOpenRedir
+xmlNanoHTTPRead
+xmlNanoHTTPRedir
+xmlNanoHTTPReturnCode
+xmlNanoHTTPSave
+xmlNanoHTTPScanProxy
+xmlNewAutomata
+xmlNewCDataBlock
+xmlNewCatalog
+xmlNewCharEncodingHandler
+xmlNewCharRef
+xmlNewChild
+xmlNewComment
+xmlNewDoc
+xmlNewDocComment
+xmlNewDocElementContent
+xmlNewDocFragment
+xmlNewDocNode
+xmlNewDocNodeEatName
+xmlNewDocPI
+xmlNewDocProp
+xmlNewDocRawNode
+xmlNewDocText
+xmlNewDocTextLen
+xmlNewDtd
+xmlNewElementContent
+xmlNewEntity
+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
+xmlNextElementSibling
+xmlNoNetExternalEntityLoader
+xmlNode
+xmlNodeAddContent
+xmlNodeAddContentLen
+xmlNodeBufGetContent
+xmlNodeDump
+xmlNodeDumpOutput
+xmlNodeGetBase
+xmlNodeGetContent
+xmlNodeGetLang
+xmlNodeGetSpacePreserve
+xmlNodeIsText
+xmlNodeListGetRawString
+xmlNodeListGetString
+xmlNodePtr
+xmlNodeSet
+xmlNodeSetBase
+xmlNodeSetContent
+xmlNodeSetContentLen
+xmlNodeSetLang
+xmlNodeSetName
+xmlNodeSetPtr
+xmlNodeSetSpacePreserve
+xmlNormalizeURIPath
+xmlNormalizeWindowsPath
+xmlNotation
+xmlNotationPtr
+xmlNotationTable
+xmlNotationTablePtr
+xmlNs
+xmlNsPtr
+xmlNsType
+xmlOutputBuffer
+xmlOutputBufferClose
+xmlOutputBufferCreateBuffer
+xmlOutputBufferCreateFd
+xmlOutputBufferCreateFile
+xmlOutputBufferCreateFilename
+xmlOutputBufferCreateFilenameDefault
+xmlOutputBufferCreateFilenameFunc
+xmlOutputBufferCreateFilenameValue
+xmlOutputBufferCreateIO
+xmlOutputBufferFlush
+xmlOutputBufferGetContent
+xmlOutputBufferGetSize
+xmlOutputBufferPtr
+xmlOutputBufferWrite
+xmlOutputBufferWriteEscape
+xmlOutputBufferWriteString
+xmlOutputCloseCallback
+xmlOutputMatchCallback
+xmlOutputOpenCallback
+xmlOutputWriteCallback
+xmlParseAttValue
+xmlParseAttribute
+xmlParseAttributeListDecl
+xmlParseAttributeType
+xmlParseBalancedChunkMemory
+xmlParseBalancedChunkMemoryRecover
+xmlParseCDSect
+xmlParseCatalogFile
+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
+xmlParseInNodeContext
+xmlParseMarkupDecl
+xmlParseMemory
+xmlParseMisc
+xmlParseName
+xmlParseNamespace
+xmlParseNmtoken
+xmlParseNotationDecl
+xmlParseNotationType
+xmlParsePEReference
+xmlParsePI
+xmlParsePITarget
+xmlParsePubidLiteral
+xmlParseQuotedString
+xmlParseReference
+xmlParseSDDecl
+xmlParseStartTag
+xmlParseSystemLiteral
+xmlParseTextDecl
+xmlParseURI
+xmlParseURIRaw
+xmlParseURIReference
+xmlParseVersionInfo
+xmlParseVersionNum
+xmlParseXMLDecl
+xmlParserAddNodeInfo
+xmlParserCtxt
+xmlParserCtxtPtr
+xmlParserDebugEntities
+xmlParserError
+xmlParserErrors
+xmlParserFindNodeInfo
+xmlParserFindNodeInfoIndex
+xmlParserGetDirectory
+xmlParserHandlePEReference
+xmlParserHandleReference
+xmlParserInput
+xmlParserInputBuffer
+xmlParserInputBufferCreateFd
+xmlParserInputBufferCreateFile
+xmlParserInputBufferCreateFilename
+xmlParserInputBufferCreateFilenameDefault
+xmlParserInputBufferCreateFilenameFunc
+xmlParserInputBufferCreateFilenameValue
+xmlParserInputBufferCreateIO
+xmlParserInputBufferCreateMem
+xmlParserInputBufferCreateStatic
+xmlParserInputBufferGrow
+xmlParserInputBufferPtr
+xmlParserInputBufferPush
+xmlParserInputBufferRead
+xmlParserInputDeallocate
+xmlParserInputGrow
+xmlParserInputPtr
+xmlParserInputRead
+xmlParserInputShrink
+xmlParserInputState
+xmlParserMaxDepth
+xmlParserMode
+xmlParserNodeInfo
+xmlParserNodeInfoPtr
+xmlParserNodeInfoSeq
+xmlParserNodeInfoSeqPtr
+xmlParserOption
+xmlParserPrintFileContext
+xmlParserPrintFileInfo
+xmlParserProperties
+xmlParserSeverities
+xmlParserValidityError
+xmlParserValidityWarning
+xmlParserVersion
+xmlParserWarning
+xmlPathToURI
+xmlPattern
+xmlPatternFlags
+xmlPatternFromRoot
+xmlPatternGetStreamCtxt
+xmlPatternMatch
+xmlPatternMaxDepth
+xmlPatternMinDepth
+xmlPatternPtr
+xmlPatternStreamable
+xmlPatterncompile
+xmlPedanticParserDefault
+xmlPedanticParserDefaultValue
+xmlPopInput
+xmlPopInputCallbacks
+xmlPreviousElementSibling
+xmlPrintURI
+xmlPushInput
+xmlRMutex
+xmlRMutexLock
+xmlRMutexPtr
+xmlRMutexUnlock
+xmlReadDoc
+xmlReadFd
+xmlReadFile
+xmlReadIO
+xmlReadMemory
+xmlReaderForDoc
+xmlReaderForFd
+xmlReaderForFile
+xmlReaderForIO
+xmlReaderForMemory
+xmlReaderNewDoc
+xmlReaderNewFd
+xmlReaderNewFile
+xmlReaderNewIO
+xmlReaderNewMemory
+xmlReaderNewWalker
+xmlReaderTypes
+xmlReaderWalker
+xmlRealloc
+xmlReallocFunc
+xmlReallocLoc
+xmlReconciliateNs
+xmlRecoverDoc
+xmlRecoverFile
+xmlRecoverMemory
+xmlRef
+xmlRefPtr
+xmlRefTable
+xmlRefTablePtr
+xmlRegExecCallbacks
+xmlRegExecCtxt
+xmlRegExecCtxtPtr
+xmlRegExecErrInfo
+xmlRegExecNextValues
+xmlRegExecPushString
+xmlRegExecPushString2
+xmlRegFreeExecCtxt
+xmlRegFreeRegexp
+xmlRegNewExecCtxt
+xmlRegexp
+xmlRegexpCompile
+xmlRegexpExec
+xmlRegexpIsDeterminist
+xmlRegexpPrint
+xmlRegexpPtr
+xmlRegisterCharEncodingHandler
+xmlRegisterDefaultInputCallbacks
+xmlRegisterDefaultOutputCallbacks
+xmlRegisterHTTPPostCallbacks
+xmlRegisterInputCallbacks
+xmlRegisterNodeDefault
+xmlRegisterNodeDefaultValue
+xmlRegisterNodeFunc
+xmlRegisterOutputCallbacks
+xmlRelaxNG
+xmlRelaxNGCleanupTypes
+xmlRelaxNGDump
+xmlRelaxNGDumpTree
+xmlRelaxNGFree
+xmlRelaxNGFreeParserCtxt
+xmlRelaxNGFreeValidCtxt
+xmlRelaxNGGetParserErrors
+xmlRelaxNGGetValidErrors
+xmlRelaxNGInitTypes
+xmlRelaxNGNewDocParserCtxt
+xmlRelaxNGNewMemParserCtxt
+xmlRelaxNGNewParserCtxt
+xmlRelaxNGNewValidCtxt
+xmlRelaxNGParse
+xmlRelaxNGParserCtxt
+xmlRelaxNGParserCtxtPtr
+xmlRelaxNGParserFlag
+xmlRelaxNGPtr
+xmlRelaxNGSetParserErrors
+xmlRelaxNGSetParserStructuredErrors
+xmlRelaxNGSetValidErrors
+xmlRelaxNGSetValidStructuredErrors
+xmlRelaxNGValidCtxt
+xmlRelaxNGValidCtxtPtr
+xmlRelaxNGValidErr
+xmlRelaxNGValidateDoc
+xmlRelaxNGValidateFullElement
+xmlRelaxNGValidatePopElement
+xmlRelaxNGValidatePushCData
+xmlRelaxNGValidatePushElement
+xmlRelaxNGValidityErrorFunc
+xmlRelaxNGValidityWarningFunc
+xmlRelaxParserSetFlag
+xmlRemoveID
+xmlRemoveProp
+xmlRemoveRef
+xmlReplaceNode
+xmlResetError
+xmlResetLastError
+xmlRootNode
+xmlSAX2AttributeDecl
+xmlSAX2CDataBlock
+xmlSAX2Characters
+xmlSAX2Comment
+xmlSAX2ElementDecl
+xmlSAX2EndDocument
+xmlSAX2EndElement
+xmlSAX2EndElementNs
+xmlSAX2EntityDecl
+xmlSAX2ExternalSubset
+xmlSAX2GetColumnNumber
+xmlSAX2GetEntity
+xmlSAX2GetLineNumber
+xmlSAX2GetParameterEntity
+xmlSAX2GetPublicId
+xmlSAX2GetSystemId
+xmlSAX2HasExternalSubset
+xmlSAX2HasInternalSubset
+xmlSAX2IgnorableWhitespace
+xmlSAX2InitDefaultSAXHandler
+xmlSAX2InitDocbDefaultSAXHandler
+xmlSAX2InitHtmlDefaultSAXHandler
+xmlSAX2InternalSubset
+xmlSAX2IsStandalone
+xmlSAX2NotationDecl
+xmlSAX2ProcessingInstruction
+xmlSAX2Reference
+xmlSAX2ResolveEntity
+xmlSAX2SetDocumentLocator
+xmlSAX2StartDocument
+xmlSAX2StartElement
+xmlSAX2StartElementNs
+xmlSAX2UnparsedEntityDecl
+xmlSAXDefaultVersion
+xmlSAXHandler
+xmlSAXHandlerPtr
+xmlSAXHandlerV1
+xmlSAXHandlerV1Ptr
+xmlSAXLocator
+xmlSAXLocatorPtr
+xmlSAXParseDTD
+xmlSAXParseDoc
+xmlSAXParseEntity
+xmlSAXParseFile
+xmlSAXParseFileWithData
+xmlSAXParseMemory
+xmlSAXParseMemoryWithData
+xmlSAXUserParseFile
+xmlSAXUserParseMemory
+xmlSAXVersion
+xmlSaveClose
+xmlSaveCtxt
+xmlSaveCtxtPtr
+xmlSaveDoc
+xmlSaveFile
+xmlSaveFileEnc
+xmlSaveFileTo
+xmlSaveFlush
+xmlSaveFormatFile
+xmlSaveFormatFileEnc
+xmlSaveFormatFileTo
+xmlSaveNoEmptyTags
+xmlSaveOption
+xmlSaveSetAttrEscape
+xmlSaveSetEscape
+xmlSaveToBuffer
+xmlSaveToFd
+xmlSaveToFilename
+xmlSaveToIO
+xmlSaveTree
+xmlSaveUri
+xmlScanName
+xmlSchema
+xmlSchemaAnnot
+xmlSchemaAnnotPtr
+xmlSchemaAttribute
+xmlSchemaAttributeGroup
+xmlSchemaAttributeGroupPtr
+xmlSchemaAttributeLink
+xmlSchemaAttributeLinkPtr
+xmlSchemaAttributePtr
+xmlSchemaCheckFacet
+xmlSchemaCleanupTypes
+xmlSchemaCollapseString
+xmlSchemaCompareValues
+xmlSchemaCompareValuesWhtsp
+xmlSchemaContentType
+xmlSchemaCopyValue
+xmlSchemaDump
+xmlSchemaElement
+xmlSchemaElementPtr
+xmlSchemaFacet
+xmlSchemaFacetLink
+xmlSchemaFacetLinkPtr
+xmlSchemaFacetPtr
+xmlSchemaFree
+xmlSchemaFreeFacet
+xmlSchemaFreeParserCtxt
+xmlSchemaFreeType
+xmlSchemaFreeValidCtxt
+xmlSchemaFreeValue
+xmlSchemaFreeWildcard
+xmlSchemaGetBuiltInListSimpleTypeItemType
+xmlSchemaGetBuiltInType
+xmlSchemaGetCanonValue
+xmlSchemaGetCanonValueWhtsp
+xmlSchemaGetFacetValueAsULong
+xmlSchemaGetParserErrors
+xmlSchemaGetPredefinedType
+xmlSchemaGetValType
+xmlSchemaGetValidErrors
+xmlSchemaInitTypes
+xmlSchemaIsBuiltInTypeFacet
+xmlSchemaIsValid
+xmlSchemaNewDocParserCtxt
+xmlSchemaNewFacet
+xmlSchemaNewMemParserCtxt
+xmlSchemaNewNOTATIONValue
+xmlSchemaNewParserCtxt
+xmlSchemaNewQNameValue
+xmlSchemaNewStringValue
+xmlSchemaNewValidCtxt
+xmlSchemaNotation
+xmlSchemaNotationPtr
+xmlSchemaParse
+xmlSchemaParserCtxt
+xmlSchemaParserCtxtPtr
+xmlSchemaPtr
+xmlSchemaSAXPlug
+xmlSchemaSAXPlugPtr
+xmlSchemaSAXPlugStruct
+xmlSchemaSAXUnplug
+xmlSchemaSetParserErrors
+xmlSchemaSetParserStructuredErrors
+xmlSchemaSetValidErrors
+xmlSchemaSetValidOptions
+xmlSchemaSetValidStructuredErrors
+xmlSchemaType
+xmlSchemaTypeLink
+xmlSchemaTypeLinkPtr
+xmlSchemaTypePtr
+xmlSchemaTypeType
+xmlSchemaVal
+xmlSchemaValPredefTypeNode
+xmlSchemaValPredefTypeNodeNoNorm
+xmlSchemaValPtr
+xmlSchemaValType
+xmlSchemaValidCtxt
+xmlSchemaValidCtxtGetOptions
+xmlSchemaValidCtxtGetParserCtxt
+xmlSchemaValidCtxtPtr
+xmlSchemaValidError
+xmlSchemaValidOption
+xmlSchemaValidateDoc
+xmlSchemaValidateFacet
+xmlSchemaValidateFacetWhtsp
+xmlSchemaValidateFile
+xmlSchemaValidateLengthFacet
+xmlSchemaValidateLengthFacetWhtsp
+xmlSchemaValidateListSimpleTypeFacet
+xmlSchemaValidateOneElement
+xmlSchemaValidatePredefinedType
+xmlSchemaValidateSetFilename
+xmlSchemaValidateSetLocator
+xmlSchemaValidateStream
+xmlSchemaValidityErrorFunc
+xmlSchemaValidityLocatorFunc
+xmlSchemaValidityWarningFunc
+xmlSchemaValueAppend
+xmlSchemaValueGetAsBoolean
+xmlSchemaValueGetAsString
+xmlSchemaValueGetNext
+xmlSchemaWhiteSpaceReplace
+xmlSchemaWhitespaceValueType
+xmlSchemaWildcard
+xmlSchemaWildcardNs
+xmlSchemaWildcardNsPtr
+xmlSchemaWildcardPtr
+xmlSchematron
+xmlSchematronFree
+xmlSchematronFreeParserCtxt
+xmlSchematronFreeValidCtxt
+xmlSchematronNewDocParserCtxt
+xmlSchematronNewMemParserCtxt
+xmlSchematronNewParserCtxt
+xmlSchematronNewValidCtxt
+xmlSchematronParse
+xmlSchematronParserCtxt
+xmlSchematronParserCtxtPtr
+xmlSchematronPtr
+xmlSchematronSetValidStructuredErrors
+xmlSchematronValidCtxt
+xmlSchematronValidCtxtPtr
+xmlSchematronValidOptions
+xmlSchematronValidateDoc
+xmlSchematronValidityErrorFunc
+xmlSchematronValidityWarningFunc
+xmlSearchNs
+xmlSearchNsByHref
+xmlSetBufferAllocationScheme
+xmlSetCompressMode
+xmlSetDocCompressMode
+xmlSetEntityReferenceFunc
+xmlSetExternalEntityLoader
+xmlSetFeature
+xmlSetGenericErrorFunc
+xmlSetListDoc
+xmlSetNs
+xmlSetNsProp
+xmlSetProp
+xmlSetStructuredErrorFunc
+xmlSetTreeDoc
+xmlSetupParserForBuffer
+xmlShell
+xmlShellBase
+xmlShellCat
+xmlShellCmd
+xmlShellCtxt
+xmlShellCtxtPtr
+xmlShellDir
+xmlShellDu
+xmlShellList
+xmlShellLoad
+xmlShellPrintNode
+xmlShellPrintXPathError
+xmlShellPrintXPathResult
+xmlShellPwd
+xmlShellReadlineFunc
+xmlShellSave
+xmlShellValidate
+xmlShellWrite
+xmlSkipBlankChars
+xmlSnprintfElementContent
+xmlSplitQName
+xmlSplitQName2
+xmlSplitQName3
+xmlSprintfElementContent
+xmlStopParser
+xmlStrEqual
+xmlStrPrintf
+xmlStrQEqual
+xmlStrVPrintf
+xmlStrcasecmp
+xmlStrcasestr
+xmlStrcat
+xmlStrchr
+xmlStrcmp
+xmlStrdup
+xmlStrdupFunc
+xmlStreamCtxt
+xmlStreamCtxtPtr
+xmlStreamPop
+xmlStreamPush
+xmlStreamPushAttr
+xmlStreamPushNode
+xmlStreamWantsAnyNode
+xmlStringComment
+xmlStringCurrentChar
+xmlStringDecodeEntities
+xmlStringGetNodeList
+xmlStringLenDecodeEntities
+xmlStringLenGetNodeList
+xmlStringText
+xmlStringTextNoenc
+xmlStrlen
+xmlStrncasecmp
+xmlStrncat
+xmlStrncatNew
+xmlStrncmp
+xmlStrndup
+xmlStrstr
+xmlStrsub
+xmlStructuredError
+xmlStructuredErrorContext
+xmlStructuredErrorFunc
+xmlSubstituteEntitiesDefault
+xmlSubstituteEntitiesDefaultValue
+xmlSwitchEncoding
+xmlSwitchInputEncoding
+xmlSwitchToEncoding
+xmlTextConcat
+xmlTextMerge
+xmlTextReader
+xmlTextReaderAttributeCount
+xmlTextReaderBaseUri
+xmlTextReaderByteConsumed
+xmlTextReaderClose
+xmlTextReaderConstBaseUri
+xmlTextReaderConstEncoding
+xmlTextReaderConstLocalName
+xmlTextReaderConstName
+xmlTextReaderConstNamespaceUri
+xmlTextReaderConstPrefix
+xmlTextReaderConstString
+xmlTextReaderConstValue
+xmlTextReaderConstXmlLang
+xmlTextReaderConstXmlVersion
+xmlTextReaderCurrentDoc
+xmlTextReaderCurrentNode
+xmlTextReaderDepth
+xmlTextReaderErrorFunc
+xmlTextReaderExpand
+xmlTextReaderGetAttribute
+xmlTextReaderGetAttributeNo
+xmlTextReaderGetAttributeNs
+xmlTextReaderGetErrorHandler
+xmlTextReaderGetParserColumnNumber
+xmlTextReaderGetParserLineNumber
+xmlTextReaderGetParserProp
+xmlTextReaderGetRemainder
+xmlTextReaderHasAttributes
+xmlTextReaderHasValue
+xmlTextReaderIsDefault
+xmlTextReaderIsEmptyElement
+xmlTextReaderIsNamespaceDecl
+xmlTextReaderIsValid
+xmlTextReaderLocalName
+xmlTextReaderLocatorBaseURI
+xmlTextReaderLocatorLineNumber
+xmlTextReaderLocatorPtr
+xmlTextReaderLookupNamespace
+xmlTextReaderMode
+xmlTextReaderMoveToAttribute
+xmlTextReaderMoveToAttributeNo
+xmlTextReaderMoveToAttributeNs
+xmlTextReaderMoveToElement
+xmlTextReaderMoveToFirstAttribute
+xmlTextReaderMoveToNextAttribute
+xmlTextReaderName
+xmlTextReaderNamespaceUri
+xmlTextReaderNext
+xmlTextReaderNextSibling
+xmlTextReaderNodeType
+xmlTextReaderNormalization
+xmlTextReaderPrefix
+xmlTextReaderPreserve
+xmlTextReaderPreservePattern
+xmlTextReaderPtr
+xmlTextReaderQuoteChar
+xmlTextReaderRead
+xmlTextReaderReadAttributeValue
+xmlTextReaderReadInnerXml
+xmlTextReaderReadOuterXml
+xmlTextReaderReadState
+xmlTextReaderReadString
+xmlTextReaderRelaxNGSetSchema
+xmlTextReaderRelaxNGValidate
+xmlTextReaderRelaxNGValidateCtxt
+xmlTextReaderSchemaValidate
+xmlTextReaderSchemaValidateCtxt
+xmlTextReaderSetErrorHandler
+xmlTextReaderSetParserProp
+xmlTextReaderSetSchema
+xmlTextReaderSetStructuredErrorHandler
+xmlTextReaderSetup
+xmlTextReaderStandalone
+xmlTextReaderValue
+xmlTextReaderXmlLang
+xmlTextWriter
+xmlTextWriterEndAttribute
+xmlTextWriterEndCDATA
+xmlTextWriterEndComment
+xmlTextWriterEndDTD
+xmlTextWriterEndDTDAttlist
+xmlTextWriterEndDTDElement
+xmlTextWriterEndDTDEntity
+xmlTextWriterEndDocument
+xmlTextWriterEndElement
+xmlTextWriterEndPI
+xmlTextWriterFlush
+xmlTextWriterFullEndElement
+xmlTextWriterPtr
+xmlTextWriterSetIndent
+xmlTextWriterSetIndentString
+xmlTextWriterSetQuoteChar
+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
+xmlTextWriterWriteDocType
+xmlTextWriterWriteElement
+xmlTextWriterWriteElementNS
+xmlTextWriterWriteFormatAttribute
+xmlTextWriterWriteFormatAttributeNS
+xmlTextWriterWriteFormatCDATA
+xmlTextWriterWriteFormatComment
+xmlTextWriterWriteFormatDTD
+xmlTextWriterWriteFormatDTDAttlist
+xmlTextWriterWriteFormatDTDElement
+xmlTextWriterWriteFormatDTDInternalEntity
+xmlTextWriterWriteFormatElement
+xmlTextWriterWriteFormatElementNS
+xmlTextWriterWriteFormatPI
+xmlTextWriterWriteFormatRaw
+xmlTextWriterWriteFormatString
+xmlTextWriterWritePI
+xmlTextWriterWriteProcessingInstruction
+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
+xmlThrDefOutputBufferCreateFilenameDefault
+xmlThrDefParserDebugEntities
+xmlThrDefParserInputBufferCreateFilenameDefault
+xmlThrDefPedanticParserDefaultValue
+xmlThrDefRegisterNodeDefault
+xmlThrDefSaveNoEmptyTags
+xmlThrDefSetGenericErrorFunc
+xmlThrDefSetStructuredErrorFunc
+xmlThrDefSubstituteEntitiesDefaultValue
+xmlThrDefTreeIndentString
+xmlTreeIndentString
+xmlUCSIsAegeanNumbers
+xmlUCSIsAlphabeticPresentationForms
+xmlUCSIsArabic
+xmlUCSIsArabicPresentationFormsA
+xmlUCSIsArabicPresentationFormsB
+xmlUCSIsArmenian
+xmlUCSIsArrows
+xmlUCSIsBasicLatin
+xmlUCSIsBengali
+xmlUCSIsBlock
+xmlUCSIsBlockElements
+xmlUCSIsBopomofo
+xmlUCSIsBopomofoExtended
+xmlUCSIsBoxDrawing
+xmlUCSIsBraillePatterns
+xmlUCSIsBuhid
+xmlUCSIsByzantineMusicalSymbols
+xmlUCSIsCJKCompatibility
+xmlUCSIsCJKCompatibilityForms
+xmlUCSIsCJKCompatibilityIdeographs
+xmlUCSIsCJKCompatibilityIdeographsSupplement
+xmlUCSIsCJKRadicalsSupplement
+xmlUCSIsCJKSymbolsandPunctuation
+xmlUCSIsCJKUnifiedIdeographs
+xmlUCSIsCJKUnifiedIdeographsExtensionA
+xmlUCSIsCJKUnifiedIdeographsExtensionB
+xmlUCSIsCat
+xmlUCSIsCatC
+xmlUCSIsCatCc
+xmlUCSIsCatCf
+xmlUCSIsCatCo
+xmlUCSIsCatCs
+xmlUCSIsCatL
+xmlUCSIsCatLl
+xmlUCSIsCatLm
+xmlUCSIsCatLo
+xmlUCSIsCatLt
+xmlUCSIsCatLu
+xmlUCSIsCatM
+xmlUCSIsCatMc
+xmlUCSIsCatMe
+xmlUCSIsCatMn
+xmlUCSIsCatN
+xmlUCSIsCatNd
+xmlUCSIsCatNl
+xmlUCSIsCatNo
+xmlUCSIsCatP
+xmlUCSIsCatPc
+xmlUCSIsCatPd
+xmlUCSIsCatPe
+xmlUCSIsCatPf
+xmlUCSIsCatPi
+xmlUCSIsCatPo
+xmlUCSIsCatPs
+xmlUCSIsCatS
+xmlUCSIsCatSc
+xmlUCSIsCatSk
+xmlUCSIsCatSm
+xmlUCSIsCatSo
+xmlUCSIsCatZ
+xmlUCSIsCatZl
+xmlUCSIsCatZp
+xmlUCSIsCatZs
+xmlUCSIsCherokee
+xmlUCSIsCombiningDiacriticalMarks
+xmlUCSIsCombiningDiacriticalMarksforSymbols
+xmlUCSIsCombiningHalfMarks
+xmlUCSIsCombiningMarksforSymbols
+xmlUCSIsControlPictures
+xmlUCSIsCurrencySymbols
+xmlUCSIsCypriotSyllabary
+xmlUCSIsCyrillic
+xmlUCSIsCyrillicSupplement
+xmlUCSIsDeseret
+xmlUCSIsDevanagari
+xmlUCSIsDingbats
+xmlUCSIsEnclosedAlphanumerics
+xmlUCSIsEnclosedCJKLettersandMonths
+xmlUCSIsEthiopic
+xmlUCSIsGeneralPunctuation
+xmlUCSIsGeometricShapes
+xmlUCSIsGeorgian
+xmlUCSIsGothic
+xmlUCSIsGreek
+xmlUCSIsGreekExtended
+xmlUCSIsGreekandCoptic
+xmlUCSIsGujarati
+xmlUCSIsGurmukhi
+xmlUCSIsHalfwidthandFullwidthForms
+xmlUCSIsHangulCompatibilityJamo
+xmlUCSIsHangulJamo
+xmlUCSIsHangulSyllables
+xmlUCSIsHanunoo
+xmlUCSIsHebrew
+xmlUCSIsHighPrivateUseSurrogates
+xmlUCSIsHighSurrogates
+xmlUCSIsHiragana
+xmlUCSIsIPAExtensions
+xmlUCSIsIdeographicDescriptionCharacters
+xmlUCSIsKanbun
+xmlUCSIsKangxiRadicals
+xmlUCSIsKannada
+xmlUCSIsKatakana
+xmlUCSIsKatakanaPhoneticExtensions
+xmlUCSIsKhmer
+xmlUCSIsKhmerSymbols
+xmlUCSIsLao
+xmlUCSIsLatin1Supplement
+xmlUCSIsLatinExtendedA
+xmlUCSIsLatinExtendedAdditional
+xmlUCSIsLatinExtendedB
+xmlUCSIsLetterlikeSymbols
+xmlUCSIsLimbu
+xmlUCSIsLinearBIdeograms
+xmlUCSIsLinearBSyllabary
+xmlUCSIsLowSurrogates
+xmlUCSIsMalayalam
+xmlUCSIsMathematicalAlphanumericSymbols
+xmlUCSIsMathematicalOperators
+xmlUCSIsMiscellaneousMathematicalSymbolsA
+xmlUCSIsMiscellaneousMathematicalSymbolsB
+xmlUCSIsMiscellaneousSymbols
+xmlUCSIsMiscellaneousSymbolsandArrows
+xmlUCSIsMiscellaneousTechnical
+xmlUCSIsMongolian
+xmlUCSIsMusicalSymbols
+xmlUCSIsMyanmar
+xmlUCSIsNumberForms
+xmlUCSIsOgham
+xmlUCSIsOldItalic
+xmlUCSIsOpticalCharacterRecognition
+xmlUCSIsOriya
+xmlUCSIsOsmanya
+xmlUCSIsPhoneticExtensions
+xmlUCSIsPrivateUse
+xmlUCSIsPrivateUseArea
+xmlUCSIsRunic
+xmlUCSIsShavian
+xmlUCSIsSinhala
+xmlUCSIsSmallFormVariants
+xmlUCSIsSpacingModifierLetters
+xmlUCSIsSpecials
+xmlUCSIsSuperscriptsandSubscripts
+xmlUCSIsSupplementalArrowsA
+xmlUCSIsSupplementalArrowsB
+xmlUCSIsSupplementalMathematicalOperators
+xmlUCSIsSupplementaryPrivateUseAreaA
+xmlUCSIsSupplementaryPrivateUseAreaB
+xmlUCSIsSyriac
+xmlUCSIsTagalog
+xmlUCSIsTagbanwa
+xmlUCSIsTags
+xmlUCSIsTaiLe
+xmlUCSIsTaiXuanJingSymbols
+xmlUCSIsTamil
+xmlUCSIsTelugu
+xmlUCSIsThaana
+xmlUCSIsThai
+xmlUCSIsTibetan
+xmlUCSIsUgaritic
+xmlUCSIsUnifiedCanadianAboriginalSyllabics
+xmlUCSIsVariationSelectors
+xmlUCSIsVariationSelectorsSupplement
+xmlUCSIsYiRadicals
+xmlUCSIsYiSyllables
+xmlUCSIsYijingHexagramSymbols
+xmlURI
+xmlURIEscape
+xmlURIEscapeStr
+xmlURIPtr
+xmlURIUnescapeString
+xmlUTF8Charcmp
+xmlUTF8Size
+xmlUTF8Strlen
+xmlUTF8Strloc
+xmlUTF8Strndup
+xmlUTF8Strpos
+xmlUTF8Strsize
+xmlUTF8Strsub
+xmlUnlinkNode
+xmlUnlockLibrary
+xmlUnsetNsProp
+xmlUnsetProp
+xmlValidBuildContentModel
+xmlValidCtxt
+xmlValidCtxtNormalizeAttributeValue
+xmlValidCtxtPtr
+xmlValidGetPotentialChildren
+xmlValidGetValidElements
+xmlValidNormalizeAttributeValue
+xmlValidState
+xmlValidStatePtr
+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
+xmlValidityErrorFunc
+xmlValidityWarningFunc
+xmlXIncludeCtxt
+xmlXIncludeCtxtPtr
+xmlXIncludeFreeContext
+xmlXIncludeNewContext
+xmlXIncludeProcess
+xmlXIncludeProcessFlags
+xmlXIncludeProcessFlagsData
+xmlXIncludeProcessNode
+xmlXIncludeProcessTree
+xmlXIncludeProcessTreeFlags
+xmlXIncludeProcessTreeFlagsData
+xmlXIncludeSetFlags
+xmlXPathAddValues
+xmlXPathAxis
+xmlXPathAxisFunc
+xmlXPathAxisPtr
+xmlXPathBooleanFunction
+xmlXPathCastBooleanToNumber
+xmlXPathCastBooleanToString
+xmlXPathCastNodeSetToBoolean
+xmlXPathCastNodeSetToNumber
+xmlXPathCastNodeSetToString
+xmlXPathCastNodeToNumber
+xmlXPathCastNodeToString
+xmlXPathCastNumberToBoolean
+xmlXPathCastNumberToString
+xmlXPathCastStringToBoolean
+xmlXPathCastStringToNumber
+xmlXPathCastToBoolean
+xmlXPathCastToNumber
+xmlXPathCastToString
+xmlXPathCeilingFunction
+xmlXPathCheckError
+xmlXPathCmpNodes
+xmlXPathCompExpr
+xmlXPathCompExprPtr
+xmlXPathCompareValues
+xmlXPathCompile
+xmlXPathCompiledEval
+xmlXPathCompiledEvalToBoolean
+xmlXPathConcatFunction
+xmlXPathContainsFunction
+xmlXPathContext
+xmlXPathContextPtr
+xmlXPathContextSetCache
+xmlXPathConvertBoolean
+xmlXPathConvertFunc
+xmlXPathConvertNumber
+xmlXPathConvertString
+xmlXPathCountFunction
+xmlXPathCtxtCompile
+xmlXPathDebugDumpCompExpr
+xmlXPathDebugDumpObject
+xmlXPathDifference
+xmlXPathDistinct
+xmlXPathDistinctSorted
+xmlXPathDivValues
+xmlXPathEmptyNodeSet
+xmlXPathEqualValues
+xmlXPathErr
+xmlXPathError
+xmlXPathEval
+xmlXPathEvalExpr
+xmlXPathEvalExpression
+xmlXPathEvalFunc
+xmlXPathEvalPredicate
+xmlXPathEvaluatePredicateResult
+xmlXPathFalseFunction
+xmlXPathFloorFunction
+xmlXPathFreeCompExpr
+xmlXPathFreeContext
+xmlXPathFreeNodeSet
+xmlXPathFreeNodeSetList
+xmlXPathFreeObject
+xmlXPathFreeParserContext
+xmlXPathFuncLookupFunc
+xmlXPathFuncPtr
+xmlXPathFunct
+xmlXPathFunction
+xmlXPathFunctionLookup
+xmlXPathFunctionLookupNS
+xmlXPathGetContextNode
+xmlXPathGetDocument
+xmlXPathGetError
+xmlXPathHasSameNodes
+xmlXPathIdFunction
+xmlXPathInit
+xmlXPathIntersection
+xmlXPathIsInf
+xmlXPathIsNaN
+xmlXPathIsNodeType
+xmlXPathLangFunction
+xmlXPathLastFunction
+xmlXPathLeading
+xmlXPathLeadingSorted
+xmlXPathLocalNameFunction
+xmlXPathModValues
+xmlXPathMultValues
+xmlXPathNAN
+xmlXPathNINF
+xmlXPathNamespaceURIFunction
+xmlXPathNewBoolean
+xmlXPathNewCString
+xmlXPathNewContext
+xmlXPathNewFloat
+xmlXPathNewNodeSet
+xmlXPathNewNodeSetList
+xmlXPathNewParserContext
+xmlXPathNewString
+xmlXPathNewValueTree
+xmlXPathNextAncestor
+xmlXPathNextAncestorOrSelf
+xmlXPathNextAttribute
+xmlXPathNextChild
+xmlXPathNextDescendant
+xmlXPathNextDescendantOrSelf
+xmlXPathNextFollowing
+xmlXPathNextFollowingSibling
+xmlXPathNextNamespace
+xmlXPathNextParent
+xmlXPathNextPreceding
+xmlXPathNextPrecedingSibling
+xmlXPathNextSelf
+xmlXPathNodeEval
+xmlXPathNodeLeading
+xmlXPathNodeLeadingSorted
+xmlXPathNodeSetAdd
+xmlXPathNodeSetAddNs
+xmlXPathNodeSetAddUnique
+xmlXPathNodeSetContains
+xmlXPathNodeSetCreate
+xmlXPathNodeSetDel
+xmlXPathNodeSetFreeNs
+xmlXPathNodeSetGetLength
+xmlXPathNodeSetIsEmpty
+xmlXPathNodeSetItem
+xmlXPathNodeSetMerge
+xmlXPathNodeSetRemove
+xmlXPathNodeSetSort
+xmlXPathNodeTrailing
+xmlXPathNodeTrailingSorted
+xmlXPathNormalizeFunction
+xmlXPathNotEqualValues
+xmlXPathNotFunction
+xmlXPathNsLookup
+xmlXPathNumberFunction
+xmlXPathObject
+xmlXPathObjectCopy
+xmlXPathObjectPtr
+xmlXPathObjectType
+xmlXPathOrderDocElems
+xmlXPathPINF
+xmlXPathParseNCName
+xmlXPathParseName
+xmlXPathParserContext
+xmlXPathParserContextPtr
+xmlXPathPopBoolean
+xmlXPathPopExternal
+xmlXPathPopNodeSet
+xmlXPathPopNumber
+xmlXPathPopString
+xmlXPathPositionFunction
+xmlXPathRegisterAllFunctions
+xmlXPathRegisterFunc
+xmlXPathRegisterFuncLookup
+xmlXPathRegisterFuncNS
+xmlXPathRegisterNs
+xmlXPathRegisterVariable
+xmlXPathRegisterVariableLookup
+xmlXPathRegisterVariableNS
+xmlXPathRegisteredFuncsCleanup
+xmlXPathRegisteredNsCleanup
+xmlXPathRegisteredVariablesCleanup
+xmlXPathReturnBoolean
+xmlXPathReturnEmptyNodeSet
+xmlXPathReturnEmptyString
+xmlXPathReturnExternal
+xmlXPathReturnFalse
+xmlXPathReturnNodeSet
+xmlXPathReturnNumber
+xmlXPathReturnString
+xmlXPathReturnTrue
+xmlXPathRoot
+xmlXPathRoundFunction
+xmlXPathSetArityError
+xmlXPathSetContextNode
+xmlXPathSetError
+xmlXPathSetTypeError
+xmlXPathStackIsExternal
+xmlXPathStackIsNodeSet
+xmlXPathStartsWithFunction
+xmlXPathStringEvalNumber
+xmlXPathStringFunction
+xmlXPathStringLengthFunction
+xmlXPathSubValues
+xmlXPathSubstringAfterFunction
+xmlXPathSubstringBeforeFunction
+xmlXPathSubstringFunction
+xmlXPathSumFunction
+xmlXPathTrailing
+xmlXPathTrailingSorted
+xmlXPathTranslateFunction
+xmlXPathTrueFunction
+xmlXPathType
+xmlXPathTypePtr
+xmlXPathValueFlipSign
+xmlXPathVariable
+xmlXPathVariableLookup
+xmlXPathVariableLookupFunc
+xmlXPathVariableLookupNS
+xmlXPathVariablePtr
+xmlXPathWrapCString
+xmlXPathWrapExternal
+xmlXPathWrapNodeSet
+xmlXPathWrapString
+xmlXPatherror
+xmlXPtrBuildNodeList
+xmlXPtrEval
+xmlXPtrEvalRangePredicate
+xmlXPtrFreeLocationSet
+xmlXPtrLocationSetAdd
+xmlXPtrLocationSetCreate
+xmlXPtrLocationSetDel
+xmlXPtrLocationSetMerge
+xmlXPtrLocationSetRemove
+xmlXPtrNewCollapsedRange
+xmlXPtrNewContext
+xmlXPtrNewLocationSetNodeSet
+xmlXPtrNewLocationSetNodes
+xmlXPtrNewRange
+xmlXPtrNewRangeNodeObject
+xmlXPtrNewRangeNodePoint
+xmlXPtrNewRangeNodes
+xmlXPtrNewRangePointNode
+xmlXPtrNewRangePoints
+xmlXPtrRangeToFunction
+xmlXPtrWrapLocationSet
+

Daniel Veillard

diff --git a/doc/ChangeLog.awk b/doc/ChangeLog.awk new file mode 100755 index 0000000..eb0db03 --- /dev/null +++ b/doc/ChangeLog.awk @@ -0,0 +1,49 @@ +#!/bin/awk -f +function translate(str) { + while (sub(/&/, "#amp;", str) == 1); + while (sub(/#amp;/, "\\&", str) == 1); # fun isn't it ? + while (sub(//, "\\>", str) == 1); + sub(/[0-9][0-9][0-9][0-9][0-9]+/, "", str) + return(str) +} +BEGIN { + nb_entry = 0 + in_entry = 0 + in_item = 0 + print "" + print "" + } +END { + if (in_item == 1) printf("%s\n", translate(item)) + if (in_entry == 1) print " " + print "" + } +/^[ \t]*$/ { next } +/^[A-Za-z0-9]/ { + match($0, "\(.*\) \([A-Z]+\) \([0-9][0-9][0-9][0-9]\) \(.*\) <\(.*\)>", loge) + if (in_item == 1) printf("%s\n", translate(item)) + if (in_entry == 1) print " " + nb_entry = nb_entry + 1 + if (nb_entry > 50) { + in_entry = 0 + in_item = 0 + exit + } + in_entry = 1 + in_item = 0 + printf(" \n", loge[1], loge[2], loge[3], loge[4], loge[5]) + } +/^[ \t]*\*/ { + if (in_item == 1) printf("%s\n", translate(item)) + in_item = 1 + printf(" ") + match($0, "[ \t]*. *\(.*\)", loge) + item = loge[1] + } +/^[ \t]*[a-zA-Z0-9\#]/ { + if (in_item == 1) { + match($0, "[ \t]*\(.*\)[ \t]*", loge) + item = sprintf("%s %s", item, loge[1]) + } + } diff --git a/doc/ChangeLog.xsl b/doc/ChangeLog.xsl new file mode 100644 index 0000000..7073ba2 --- /dev/null +++ b/doc/ChangeLog.xsl @@ -0,0 +1,117 @@ + + + + + + + + + + + libxml2 + + + API Menu + +
+ + +
+
+ + + + + + + + +
  • +
    + + + +

    + + + + + +

      + +
    +

    +
    + + + ChangeLog last entries of + + + + + + + + + + + + + + + +
    + + + + + +
    + + + + + + +
    + + + + +
    + + + + +
    + +

    Daniel Veillard

    +
    +
    +
    +
    +
    + + +
    + + diff --git a/doc/DOM.fig b/doc/DOM.fig new file mode 100644 index 0000000..7a48a32 --- /dev/null +++ b/doc/DOM.fig @@ -0,0 +1,64 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +2 2 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 5 + 825 1125 2625 1125 2625 3375 825 3375 825 1125 +2 2 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 5 + 4125 1125 5925 1125 5925 3375 4125 3375 4125 1125 +2 4 0 1 0 7 0 0 -1 0.000 0 0 7 0 0 5 + 2025 3075 2025 1650 1050 1650 1050 3075 2025 3075 +2 2 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 5 + 1425 1875 1575 1875 1575 2025 1425 2025 1425 1875 +2 2 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 5 + 1200 2175 1350 2175 1350 2325 1200 2325 1200 2175 +2 2 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 5 + 1500 2175 1650 2175 1650 2325 1500 2325 1500 2175 +2 2 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 5 + 1800 2175 1950 2175 1950 2325 1800 2325 1800 2175 +2 2 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 5 + 1500 2475 1650 2475 1650 2625 1500 2625 1500 2475 +2 2 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 5 + 1725 2700 1875 2700 1875 2850 1725 2850 1725 2700 +2 2 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 5 + 1275 2700 1425 2700 1425 2850 1275 2850 1275 2700 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 + 1500 2025 1350 2175 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 + 1500 2025 1575 2175 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 + 1500 2025 1875 2175 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 + 1575 2325 1575 2475 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 + 1650 2625 1725 2700 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 + 1500 2625 1425 2700 +2 3 0 2 0 7 0 0 -1 6.000 0 0 -1 0 0 5 + 2550 1725 2175 1950 2175 2850 2550 3075 2550 1725 +2 3 0 2 0 7 0 0 -1 6.000 0 0 -1 0 0 5 + 4575 1725 4200 1950 4200 2850 4575 3075 4575 1725 +2 2 0 1 0 7 0 0 -1 4.000 0 0 -1 0 0 5 + 2700 2025 4050 2025 4050 2775 2700 2775 2700 2025 +2 1 0 2 0 7 0 0 -1 6.000 0 0 -1 0 0 2 + 5025 2025 4575 2175 +2 1 1 2 0 7 0 0 -1 6.000 0 0 -1 1 0 3 + 1 1 2.00 120.00 240.00 + 4575 2175 4200 2250 2025 2250 +2 1 1 2 0 7 0 0 -1 6.000 0 0 -1 0 0 3 + 2025 2475 4200 2475 4575 2550 +2 1 0 2 0 7 0 0 -1 6.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 4575 2550 5025 2625 +4 0 0 0 0 0 18 0.0000 4 255 1155 1050 825 Program 1\001 +4 0 0 0 0 0 18 0.0000 4 255 1155 4425 900 Program 2\001 +4 0 0 0 0 0 18 0.0000 4 195 585 1350 1500 XML\001 +4 0 0 0 0 0 18 0.0000 4 195 975 3000 3075 CORBA\001 +4 0 0 0 0 0 18 0.0000 4 195 735 3000 3375 ORBit\001 +4 0 0 0 0 0 18 0.0000 4 195 1395 2175 1575 DOM server\001 +4 0 0 0 0 0 18 0.0000 4 195 1335 4200 1650 DOM client\001 diff --git a/doc/DOM.gif b/doc/DOM.gif new file mode 100644 index 0000000..a44882f Binary files /dev/null and b/doc/DOM.gif differ diff --git a/doc/DOM.html b/doc/DOM.html new file mode 100644 index 0000000..5b2517c --- /dev/null +++ b/doc/DOM.html @@ -0,0 +1,17 @@ + + +DOM Principles
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    The XML C parser and toolkit of Gnome

    DOM Principles

    Developer Menu
    API Indexes
    Related links

    DOM stands for the Document +Object Model; 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.

    The current DOM implementation on top of libxml2 is the gdome2 Gnome module, this +is a full DOM interface, thanks to Paolo Casarini, check the Gdome2 homepage for more +information.

    Daniel Veillard

    diff --git a/doc/FAQ.html b/doc/FAQ.html new file mode 100644 index 0000000..3481c19 --- /dev/null +++ b/doc/FAQ.html @@ -0,0 +1,299 @@ + + +FAQ
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    The XML C parser and toolkit of Gnome

    FAQ

    Main Menu
    Related links

    Table of Contents:

    License(s)

      +
    1. Licensing Terms for libxml +

      libxml2 is released under the MIT + License; see the file Copyright in the distribution for the precise + wording

      +
    2. +
    3. Can I embed libxml2 in a proprietary application ? +

      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.

      +
    4. +

    Installation

      +
    1. Do Not Use + libxml1, use libxml2
    2. +

      +
    3. Where can I get libxml ? +

      The original distribution comes from xmlsoft.org or gnome.org

      +

      Most Linux and BSD distributions include libxml, this is probably the + safer way for end-users to use libxml.

      +

      David Doolin provides precompiled Windows versions at http://www.ce.berkeley.edu/~doolin/code/libxmlwin32/

      +
    4. +

      +
    5. I see libxml and libxml2 releases, which one should I install ? +
        +
      • If you are not constrained by backward compatibility issues with + existing applications, install libxml2 only
      • +
      • If you are not doing development, you can safely install both. + Usually the packages libxml and libxml2 are + compatible (this is not the case for development packages).
      • +
      • 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 libxml-devel + and libxml2-devel + too for libxml2 >= 2.3.0
      • +
      • If you are developing a new application, please develop against + libxml2(-devel)
      • +
      +
    6. +
    7. I can't install the libxml package, it conflicts with libxml0 +

      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 xmlsoft.org provide + libxml.so.0

      +
    8. +
    9. I can't install the libxml(2) RPM package due to failed + dependencies +

      The most generic solution is to re-fetch the latest src.rpm , and + rebuild it locally with

      +

      rpm --rebuild libxml(2)-xxx.src.rpm.

      +

      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.

      +
    10. +

    Compilation

      +
    1. What is the process to compile libxml2 ? +

      As most UNIX libraries libxml2 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 a similar utility to + update your list of installed shared libs.

      +
    2. +
    3. What other libraries are needed to compile/install libxml2 ? +

      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).

      +

      However if found at configuration time libxml2 will detect and use the + following libs:

      +
        +
      • libz : a + highly portable and available widely compression library.
      • +
      • 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 part + of the official UNIX specification. Here is one implementation of the + library which source can be found here.
      • +
      +
    4. +

      +
    5. Make check fails on some platforms +

      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.

      +

      Sometimes (especially on Solaris) make checks fail due to limitations + in make. Try using GNU-make instead.

      +
    6. +
    7. I use the SVN version and there is no configure script +

      The configure script (and other Makefiles) are generated. Use the + autogen.sh script to regenerate the configure script and Makefiles, + like:

      +

      ./autogen.sh --prefix=/usr --disable-shared

      +
    8. +
    9. I have troubles when running make tests with gcc-3.0 +

      It seems the initial release of gcc-3.0 has a problem with the + optimizer which miscompiles the URI module. Please use another + compiler.

      +
    10. +

    Developer corner

      +
    1. Troubles compiling or linking programs using libxml2 +

      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 + xml2-config which is installed as part of libxml2 usual + install process which provides those flags. Use

      +

      xml2-config --cflags

      +

      to get the compilation flags and

      +

      xml2-config --libs

      +

      to get the linker flags. Usually this is done directly from the + Makefile as:

      +

      CFLAGS=`xml2-config --cflags`

      +

      LIBS=`xml2-config --libs`

      +
    2. +
    3. I want to install my own copy of libxml2 in my home directory and + link my programs against it, but it doesn't work +

      There are many different ways to accomplish this. Here is one way to + do this under Linux. Suppose your home directory is /home/user. + Then:

      +
        +
      • Create a subdirectory, let's call it myxml
      • +
      • unpack the libxml2 distribution into that subdirectory
      • +
      • chdir into the unpacked distribution + (/home/user/myxml/libxml2 )
      • +
      • configure the library using the "--prefix" switch, + specifying an installation subdirectory in + /home/user/myxml, e.g. +

        ./configure --prefix /home/user/myxml/xmlinst {other + configuration options}

        +
      • +
      • now run make followed by make install
      • +
      • At this point, the installation subdirectory contains the complete + "private" include files, library files and binary program files (e.g. + xmllint), located in +

        /home/user/myxml/xmlinst/lib, + /home/user/myxml/xmlinst/include and + /home/user/myxml/xmlinst/bin

        + respectively.
      • +
      • In order to use this "private" library, you should first add it to + the beginning of your default PATH (so that your own private program + files such as xmllint will be used instead of the normal system + ones). To do this, the Bash command would be +

        export PATH=/home/user/myxml/xmlinst/bin:$PATH

        +
      • +
      • Now suppose you have a program test1.c that you would + like to compile with your "private" library. Simply compile it using + the command +

        gcc `xml2-config --cflags --libs` -o test test.c

        + Note that, because your PATH has been set with + /home/user/myxml/xmlinst/bin at the beginning, the xml2-config + program which you just installed will be used instead of the system + default one, and this will automatically get the correct + libraries linked with your program.
      • +
      +
    4. + +

      +
    5. xmlDocDump() generates output on one line. +

      Libxml2 will not invent spaces in the content of a + document since all spaces in the content of a document are + significant. If you build a tree from the API and want + indentation:

      +
        +
      1. the correct way is to generate those yourself too.
      2. +
      3. the dangerous way is to ask libxml2 to add those blanks to your + content modifying the content of your document in the + process. The result may not be what you expect. There is + NO way to guarantee that such a modification won't + affect other parts of the content of your document. See xmlKeepBlanksDefault + () and xmlSaveFormatFile + ()
      4. +
      +
    6. +

      +
    7. Extra nodes in the document: +

      For an XML file as below:

      +
      <?xml version="1.0"?>
      +<PLAN xmlns="http://www.argus.ca/autotest/1.0/">
      +<NODE CommFlag="0"/>
      +<NODE CommFlag="1"/>
      +</PLAN>
      +

      after parsing it with the function + pxmlDoc=xmlParseFile(...);

      +

      I want to the get the content of the first node (node with the + CommFlag="0")

      +

      so I did it as following;

      +
      xmlNodePtr pnode;
      +pnode=pxmlDoc->children->children;
      +

      but it does not work. If I change it to

      +
      pnode=pxmlDoc->children->children->next;
      +

      then it works. Can someone explain it to me.

      +

      +

      In XML all characters in the content of the document are significant + including blanks and formatting line breaks.

      +

      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 xmlKeepBlanksDefault + () 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.

      +
    8. +
    9. I get compilation errors of existing code like when accessing + root or child fields of nodes. +

      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 following the instructions.

      +
    10. +
    11. I get compilation errors about non existing + xmlRootNode or xmlChildrenNode + fields. +

      The source code you are using has been upgraded to be able to compile with both libxml + and libxml2, but you need to install a more recent version: + libxml(-devel) >= 1.8.8 or libxml2(-devel) >= 2.1.0

      +
    12. +
    13. Random crashes in threaded applications +

      Read and follow all advices on the thread + safety page, and make 100% sure you never call xmlCleanupParser() + while the library or an XML document might still be in use by another + thread.

      +
    14. +
    15. The example provided in the web page does not compile. +

      It's hard to maintain the documentation in sync with the code + <grin/> ...

      +

      Check the previous points 1/ and 2/ raised before, and please send + patches.

      +
    16. +
    17. Where can I get more examples and information than provided on the + web page? +

      Ideally a libxml2 book would be nice. I have no such plan ... But you + can:

      +
        +
      • check more deeply the existing + generated doc
      • +
      • have a look at the set of + examples.
      • +
      • look for examples of use for libxml2 function using the Gnome code + or by asking on Google.
      • +
      • Browse + the libxml2 source , 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.
      • +
      +
    18. +

      +
    19. What about C++ ? +

      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++.

      +

      There is however a C++ wrapper which may fulfill your needs:

      + +
    20. +
    21. How to validate a document a posteriori ? +

      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 xmlValidateDtd() + function. It is also possible to simply add a DTD to an existing + document:

      +
      xmlDocPtr doc; /* your existing document */
      +xmlDtdPtr dtd = xmlParseDTD(NULL, filename_of_dtd); /* parse the DTD */
      +
      +        dtd->name = xmlStrDup((xmlChar*)"root_name"); /* use the given root */
      +
      +        doc->intSubset = dtd;
      +        if (doc->children == NULL) xmlAddChild((xmlNodePtr)doc, (xmlNodePtr)dtd);
      +        else xmlAddPrevSibling(doc->children, (xmlNodePtr)dtd);
      +          
      +
    22. +
    23. So what is this funky "xmlChar" used all the time? +

      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.

      +
    24. +
    25. etc ...
    26. +

    Daniel Veillard

    diff --git a/doc/Libxml2-Logo-180x168.gif b/doc/Libxml2-Logo-180x168.gif new file mode 100644 index 0000000..ebded4f Binary files /dev/null and b/doc/Libxml2-Logo-180x168.gif differ diff --git a/doc/Libxml2-Logo-90x34.gif b/doc/Libxml2-Logo-90x34.gif new file mode 100644 index 0000000..b96fff0 Binary files /dev/null and b/doc/Libxml2-Logo-90x34.gif differ diff --git a/doc/Makefile.am b/doc/Makefile.am new file mode 100644 index 0000000..0cc0a50 --- /dev/null +++ b/doc/Makefile.am @@ -0,0 +1,351 @@ +## Process this file with automake to produce Makefile.in +SUBDIRS = . devhelp 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 + +if REBUILD_DOCS +EXTRA_DIST_wc = xmlcatalog_man.xml $(wildcard tutorial/*.html) \ + $(wildcard tutorial/*.c) $(wildcard tutorial/*.pdf) \ + $(wildcard tutorial/images/*.png) \ + $(wildcard tutorial/images/callouts/*.png) $(wildcard API*.html) \ + $(wildcard *.1) $(wildcard *.xsl) $(wildcard *.html) \ + $(wildcard *.gif) w3c.png $(wildcard html/*.html) \ + $(wildcard html/*.png) libxml2-api.xml index.py search.php \ + apibuild.py libxml2.xsa xmllint.xml xmlcatalog_man.xml \ + README.docs symbols.xml +endif + +# Expanded form of EXTRA_DIST_wc +# +EXTRA_DIST = \ + APIchunk0.html \ + APIchunk1.html \ + APIchunk2.html \ + APIchunk3.html \ + APIchunk4.html \ + APIchunk5.html \ + APIchunk6.html \ + APIchunk7.html \ + APIchunk8.html \ + APIchunk9.html \ + APIchunk10.html \ + APIchunk11.html \ + APIchunk12.html \ + APIchunk13.html \ + APIchunk14.html \ + APIchunk15.html \ + APIchunk16.html \ + APIchunk17.html \ + APIchunk18.html \ + APIchunk19.html \ + APIchunk20.html \ + APIchunk21.html \ + APIchunk22.html \ + APIchunk23.html \ + APIchunk24.html \ + APIchunk25.html \ + APIchunk26.html \ + APIchunk27.html \ + APIchunk28.html \ + APIchunk29.html \ + APIconstructors.html \ + APIfiles.html \ + APIfunctions.html \ + APIsymbols.html \ + ChangeLog.xsl \ + DOM.gif \ + DOM.html \ + FAQ.html \ + Libxml2-Logo-180x168.gif \ + Libxml2-Logo-90x34.gif \ + README.docs \ + XMLinfo.html \ + XSLT.html \ + api.xsl \ + apibuild.py \ + architecture.html \ + bugs.html \ + catalog.gif \ + catalog.html \ + checkapisym.xsl \ + contribs.html \ + docs.html \ + downloads.html \ + elfgcchack.xsl \ + encoding.html \ + entities.html \ + example.html \ + guidelines.html \ + help.html \ + html/book1.html \ + html/home.png \ + html/index.html \ + html/left.png \ + html/libxml-DOCBparser.html \ + html/libxml-HTMLparser.html \ + html/libxml-HTMLtree.html \ + html/libxml-SAX.html \ + html/libxml-SAX2.html \ + html/libxml-c14n.html \ + html/libxml-catalog.html \ + html/libxml-chvalid.html \ + html/libxml-debugXML.html \ + html/libxml-dict.html \ + html/libxml-encoding.html \ + html/libxml-entities.html \ + html/libxml-globals.html \ + html/libxml-hash.html \ + html/libxml-lib.html \ + html/libxml-list.html \ + html/libxml-nanoftp.html \ + html/libxml-nanohttp.html \ + html/libxml-parser.html \ + html/libxml-parserInternals.html \ + html/libxml-pattern.html \ + html/libxml-relaxng.html \ + html/libxml-schemasInternals.html \ + html/libxml-schematron.html \ + html/libxml-threads.html \ + html/libxml-tree.html \ + html/libxml-uri.html \ + html/libxml-valid.html \ + html/libxml-xinclude.html \ + html/libxml-xlink.html \ + html/libxml-xmlIO.html \ + html/libxml-xmlautomata.html \ + html/libxml-xmlerror.html \ + html/libxml-xmlexports.html \ + html/libxml-xmlmemory.html \ + html/libxml-xmlmodule.html \ + html/libxml-xmlreader.html \ + html/libxml-xmlregexp.html \ + html/libxml-xmlsave.html \ + html/libxml-xmlschemas.html \ + html/libxml-xmlschemastypes.html \ + html/libxml-xmlstring.html \ + html/libxml-xmlunicode.html \ + html/libxml-xmlversion.html \ + html/libxml-xmlwriter.html \ + html/libxml-xpath.html \ + html/libxml-xpathInternals.html \ + html/libxml-xpointer.html \ + html/libxml-xzlib.html \ + html/right.png \ + html/up.png \ + index.html \ + index.py \ + interface.html \ + intro.html \ + library.html \ + libxml.gif \ + libxml2-api.xml \ + libxml2.xsa \ + namespaces.html \ + newapi.xsl \ + news.html \ + news.xsl \ + python.html \ + redhat.gif \ + search.php \ + searches.html \ + searches.xsl \ + site.xsl \ + smallfootonly.gif \ + structure.gif \ + symbols.xml \ + syms.xsl \ + threads.html \ + tree.html \ + tutorial/apa.html \ + tutorial/apb.html \ + tutorial/apc.html \ + tutorial/apd.html \ + tutorial/ape.html \ + tutorial/apf.html \ + tutorial/apg.html \ + tutorial/aph.html \ + tutorial/api.html \ + tutorial/ar01s02.html \ + tutorial/ar01s03.html \ + tutorial/ar01s04.html \ + tutorial/ar01s05.html \ + tutorial/ar01s06.html \ + tutorial/ar01s07.html \ + tutorial/ar01s08.html \ + tutorial/ar01s09.html \ + tutorial/images/blank.png \ + tutorial/images/callouts/1.png \ + tutorial/images/callouts/10.png \ + tutorial/images/callouts/2.png \ + tutorial/images/callouts/3.png \ + tutorial/images/callouts/4.png \ + tutorial/images/callouts/5.png \ + tutorial/images/callouts/6.png \ + tutorial/images/callouts/7.png \ + tutorial/images/callouts/8.png \ + tutorial/images/callouts/9.png \ + tutorial/images/caution.png \ + tutorial/images/draft.png \ + tutorial/images/home.png \ + tutorial/images/important.png \ + tutorial/images/next.png \ + tutorial/images/note.png \ + tutorial/images/prev.png \ + tutorial/images/tip.png \ + tutorial/images/toc-blank.png \ + tutorial/images/toc-minus.png \ + tutorial/images/toc-plus.png \ + tutorial/images/up.png \ + tutorial/images/warning.png \ + tutorial/includeaddattribute.c \ + tutorial/includeaddkeyword.c \ + tutorial/includeconvert.c \ + tutorial/includegetattribute.c \ + tutorial/includekeyword.c \ + tutorial/includexpath.c \ + tutorial/index.html \ + tutorial/ix01.html \ + tutorial/xmltutorial.pdf \ + upgrade.html \ + w3c.png \ + wiki.xsl \ + xml.html \ + xmlcatalog.1 \ + xmlcatalog_man.html \ + xmlcatalog_man.xml \ + xmldtd.html \ + xmlio.html \ + xmllint.1 \ + xmllint.html \ + xmllint.xml \ + xmlmem.html \ + xmlreader.html \ + xsa.xsl + +man_MANS = xmllint.1 xmlcatalog.1 + +if REBUILD_DOCS +docs: web $(top_builddir)/NEWS libxml2.xsa $(man_MANS) + +api: libxml2-api.xml libxml2-refs.xml $(APIPAGES) $(srcdir)/html/index.html $(WIN32_DIR)/libxml2.def.src ../elfgcchack.h $(srcdir)/site.xsl + +web: $(PAGES) + +../elfgcchack.h: $(srcdir)/elfgcchack.xsl $(srcdir)/libxml2-api.xml + -@(if [ -x $(XSLTPROC) ] ; then \ + echo "Rebuilding the elfgcchack.h header" ; \ + $(XSLTPROC) --nonet $(srcdir)/elfgcchack.xsl $(srcdir)/libxml2-api.xml > elfgcchack.h ; \ + if [ "`diff -q elfgcchack.h ../elfgcchack.h`" ] ; then \ + echo "updating ../elfgcchack.h"; \ + cp elfgcchack.h ../elfgcchack.h; \ + fi ; rm -f elfgcchack.h ; fi ); + +$(PAGES): xml.html $(srcdir)/site.xsl + -@(if [ -x $(XSLTPROC) ] ; then \ + echo "Rebuilding the HTML Web pages from xml.html" ; \ + $(XSLTPROC) --nonet --html --path $(srcdir) $(srcdir)/site.xsl $(srcdir)/xml.html > index.html ; fi ); + -@(if [ -x $(XMLLINT) ] ; then \ + echo "Validating the HTML Web pages" ; \ + $(XMLLINT) --nonet --valid --noout $(PAGES) ; fi ); + +$(top_builddir)/NEWS: $(srcdir)/news.xsl $(srcdir)/news.html + -@(if [ -x $(XSLTPROC) ] ; then \ + $(XSLTPROC) --nonet $(srcdir)/news.xsl $(srcdir)/news.html > $(top_builddir)/NEWS ; fi ); + +libxml2.xsa: $(srcdir)/xsa.xsl $(srcdir)/news.html + -@(if [ -x $(XSLTPROC) ] ; then \ + echo "Rebuilding the NEWS file" ; \ + $(XSLTPROC) --nonet $(srcdir)/xsa.xsl $(srcdir)/news.html > libxml2.xsa ; fi ); + +$(APIPAGES): libxml2-api.xml libxml2-refs.xml $(srcdir)/site.xsl $(srcdir)/api.xsl + -@(if [ -x $(XSLTPROC) ] ; then \ + echo "Rebuilding the HTML API pages from libxml2-refs.xml" ; \ + $(XSLTPROC) --nonet --html $(srcdir)/api.xsl \ + $(srcdir)/xml.html ; fi ); + -@(if [ -x $(XMLLINT) ] ; then \ + echo "Validating the HTML API pages" ; \ + $(XMLLINT) --nonet --valid --noout API*.html ; fi ); + +$(srcdir)/html/index.html: libxml2-api.xml $(srcdir)/newapi.xsl + -@(if [ -x $(XSLTPROC) ] ; then \ + echo "Rebuilding the HTML pages from the XML API" ; \ + $(XSLTPROC) --nonet $(srcdir)/newapi.xsl $(srcdir)/libxml2-api.xml ; fi ) + -@(if [ -x $(XMLLINT) ] ; then \ + echo "Validating the resulting XHTML pages" ; \ + $(XMLLINT) --nonet --valid --noout html/*.html ; fi ); + +wiki: libxml2-api.xml $(srcdir)/wiki.xsl + -@(if [ -x $(XSLTPROC) ] ; then \ + echo "Rebuilding the wiki HTML pages from the XML API" ; \ + $(XSLTPROC) --nonet $(srcdir)/wiki.xsl $(srcdir)/libxml2-api.xml; fi ) + +$(WIN32_DIR)/libxml2.def.src: libxml2-api.xml + -@(if [ -x $(XSLTPROC) ] ; then \ + $(XSLTPROC) -o $(WIN32_DIR)/libxml2.def.src \ + --nonet $(WIN32_DIR)/defgen.xsl libxml2-api.xml ; fi ) + +source_file_deps = \ + $(filter-out %/xmlversion.h, $(wildcard $(top_srcdir)/include/libxml/*.h)) \ + $(top_srcdir)/include/libxml/xmlversion.h.in \ + $(wildcard $(top_srcdir)/*.c) + +libxml2-api.xml libxml2-refs.xml ../libxml2.syms: apibuild.py symbols.xml syms.xsl checkapisym.xsl $(source_file_deps) + test -f $(top_srcdir)/include/libxml/xmlversion.h + (cd $(srcdir) && ./apibuild.py) + ($(XSLTPROC) $(srcdir)/checkapisym.xsl $(srcdir)/libxml2-api.xml) + ($(XSLTPROC) -o ../libxml2.syms $(srcdir)/syms.xsl $(srcdir)/symbols.xml) + -@(cd .. ; $(MAKE) rebuild_testapi) + + +xmllint.1: xmllint.xml + -@($(XSLTPROC) --nonet xmllint.xml) + +xmlcatalog.1: xmlcatalog_man.xml + -@($(XSLTPROC) --nonet xmlcatalog_man.xml) + +check-extra-dist: + for f in $(EXTRA_DIST_wc) ; do echo $$f; done | sort -u >tmp.EXTRA_DIST_wc + for f in $(EXTRA_DIST) ; do echo $$f; done | sort >tmp.EXTRA_DIST + diff -u tmp.EXTRA_DIST_wc tmp.EXTRA_DIST + rm -f tmp.EXTRA_DIST_wc tmp.EXTRA_DIST +endif + +clean-local: + rm -f *~ *.bak *.hierarchy *.signals *-unused.txt + +maintainer-clean-local: clean-local + rm -rf libxml-decl-list.txt libxml-decl.txt + +rebuild: api docs + +install-data-local: + $(MKDIR_P) $(DESTDIR)$(HTML_DIR) + -$(INSTALL) -m 0644 $(srcdir)/xml.html $(srcdir)/encoding.html $(srcdir)/FAQ.html $(srcdir)/structure.gif $(srcdir)/DOM.gif $(srcdir)/smallfootonly.gif $(srcdir)/redhat.gif $(srcdir)/libxml.gif $(srcdir)/w3c.png $(srcdir)/Libxml2-Logo-180x168.gif $(srcdir)/Libxml2-Logo-90x34.gif $(DESTDIR)$(HTML_DIR) + $(MKDIR_P) $(DESTDIR)$(HTML_DIR)/html + -$(INSTALL) -m 0644 $(srcdir)/html/*.html $(DESTDIR)$(HTML_DIR)/html + -$(INSTALL) -m 0644 $(srcdir)/html/*.png $(DESTDIR)$(HTML_DIR)/html + $(MKDIR_P) $(DESTDIR)$(HTML_DIR)/tutorial + -$(INSTALL) -m 0644 $(srcdir)/tutorial/*.* \ + $(DESTDIR)$(HTML_DIR)/tutorial + $(MKDIR_P) $(DESTDIR)$(HTML_DIR)/tutorial/images + -$(INSTALL) -m 0644 $(srcdir)/tutorial/images/*.* \ + $(DESTDIR)$(HTML_DIR)/tutorial/images + $(MKDIR_P) $(DESTDIR)$(HTML_DIR)/tutorial/images/callouts + -$(INSTALL) -m 0644 $(srcdir)/tutorial/images/callouts/*.* \ + $(DESTDIR)$(HTML_DIR)/tutorial/images/callouts + +.PHONY: docs api web wiki rebuild diff --git a/doc/README.docs b/doc/README.docs new file mode 100644 index 0000000..279b375 --- /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$ diff --git a/doc/XMLinfo.html b/doc/XMLinfo.html new file mode 100644 index 0000000..44a7b36 --- /dev/null +++ b/doc/XMLinfo.html @@ -0,0 +1,35 @@ + + +XML
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    The XML C parser and toolkit of Gnome

    XML

    Main Menu
    Related links

    XML is a standard for +markup-based structured documents. Here is an example XML +document:

    <?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>

    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. Each +tag opened has to be closed. 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 /> rather than with +>. Note that, for example, the image tag has no content (just +an attribute) and is closed by ending the tag with />.

    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.

    Daniel Veillard

    diff --git a/doc/XSLT.html b/doc/XSLT.html new file mode 100644 index 0000000..264a677 --- /dev/null +++ b/doc/XSLT.html @@ -0,0 +1,13 @@ + + +XSLT
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    The XML C parser and toolkit of Gnome

    XSLT

    Main Menu
    Related links

    Check the separate libxslt page

    XSL Transformations, is a +language for transforming XML documents into other XML documents (or +HTML/textual output).

    A separate library called libxslt is available implementing XSLT-1.0 for +libxml2. This module "libxslt" too can be found in the Gnome SVN base.

    You can check the progresses on the libxslt Changelog.

    Daniel Veillard

    diff --git a/doc/api.xsl b/doc/api.xsl new file mode 100644 index 0000000..6f9007f --- /dev/null +++ b/doc/api.xsl @@ -0,0 +1,394 @@ + + + + + + + + + + + + + + + + + + +
    +
    +
    + +

    Type :

    +

    + + + + + +

    +
    + +

    Letter :

    +

    + + + + + +

    +
    + +

    Module :

    +

    + + + + + +

    +
    + +

    Letter :

    +
    + +
    +
    + + + + + +
    +
    +
    +
    + + + Generating API Constructors + List of constructors for + + + + + + + + + + + + + + + + +
    + + + + + +
    + + + + + + +
    + + + + +
    + + + + +
    + +

    Daniel Veillard

    +
    +
    +
    +
    +
    + + +
    +
    + + Generating API List of synbols per file + List of Symbols per Module for + + + + + + + + + + + + + + + + +
    + + + + + +
    + + + + + + +
    + + + + +
    + + + + +
    + +

    Daniel Veillard

    +
    +
    +
    +
    +
    + + +
    +
    + + Generating API Functions by Type + List of function manipulating types in + + + + + + + + + + + + + + + + +
    + + + + + +
    + + + + + + +
    + + + + +
    + + + + +
    + +

    Daniel Veillard

    +
    +
    +
    +
    +
    + + +
    +
    + + Generating API Alphabetic list + Alphabetic List of Symbols in + + + + + + + + + + + + + + + + +
    + + + + + +
    + + + + + + +
    + + + + +
    + + + + +
    + +

    Daniel Veillard

    +
    +
    +
    +
    +
    + + +
    +
    + +

    + + + + + + + + + +

    +
    + + + + + + + API Alphabetic Index for + + + + + + + + + + + + + + + + +
    + + + + + +
    + + + + + + +
    + + + + +
    + + + + +
    + + + +

    Daniel Veillard

    +
    +
    +
    +
    +
    + + +
    +
    + + + Generating API Index + + + + + Generating API Cross References + + + + + + + + + + + +
    diff --git a/doc/apibuild.py b/doc/apibuild.py new file mode 100755 index 0000000..7a36466 --- /dev/null +++ b/doc/apibuild.py @@ -0,0 +1,2152 @@ +#!/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 +#debugsym='ignorableWhitespaceSAXFunc' +debugsym=None + +# +# 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", + "elfgcchack.h": "not a normal header", + "testHTML.c": "test tool", + "testReader.c": "test tool", + "testSchemas.c": "test tool", + "testXPath.c": "test tool", + "testAutomata.c": "test tool", + "testModule.c": "test tool", + "testRegexp.c": "test tool", + "testThreads.c": "test tool", + "testC14N.c": "test tool", + "testRelax.c": "test tool", + "testThreadsWin32.c": "test tool", + "testSAX.c": "test tool", + "testURI.c": "test tool", + "testapi.c": "generated regression tests", + "runtest.c": "regression tests program", + "runsuite.c": "regression tests program", + "tst.c": "not part of the library", + "test.c": "not part of the library", + "testdso.c": "test for dynamid shared libraries", + "testrecurse.c": "test for entities recursions", + "xzlib.h": "Internal API only 2.8.0", + "buf.h": "Internal API only 2.9.0", + "enc.h": "Internal API only 2.9.0", + "/save.h": "Internal API only 2.9.0", + "timsort.h": "Internal header only for xpath.c 2.9.0", +} + +ignored_words = { + "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"), + "XMLCDECL": (0, "Special macro for win32 calls"), + "EXSLTCALL": (0, "Special macro for win32 calls"), + "__declspec": (3, "Windows keyword"), + "__stdcall": (0, "Windows keyword"), + "ATTRIBUTE_UNUSED": (0, "macro keyword"), + "LIBEXSLT_PUBLIC": (0, "macro keyword"), + "X_IN_Y": (5, "macro function builder"), + "ATTRIBUTE_ALLOC_SIZE": (3, "macro for gcc checking extension"), + "ATTRIBUTE_PRINTF": (5, "macro for gcc printf args checking extension"), + "LIBXML_ATTR_FORMAT": (5, "macro for gcc printf args checking extension"), + "LIBXML_ATTR_ALLOC_SIZE": (3, "macro for gcc checking extension"), + "__XML_EXTERNC": (0, "Special macro added for os400"), +} + +def escape(raw): + raw = raw.replace('&', '&') + raw = raw.replace('<', '<') + raw = raw.replace('>', '>') + raw = raw.replace("'", ''') + raw = raw.replace('"', '"') + return raw + +def uniq(items): + d = {} + for item in items: + d[item]=1 + return list(d.keys()) + +class identifier: + def __init__(self, name, header=None, module=None, type=None, lineno = 0, + info=None, extra=None, conditionals = None): + self.name = name + self.header = header + self.module = module + self.type = type + self.info = info + self.extra = extra + self.lineno = lineno + self.static = 0 + if conditionals == None or len(conditionals) == 0: + self.conditionals = None + else: + self.conditionals = conditionals[:] + if self.name == debugsym: + print("=> define %s : %s" % (debugsym, (module, type, info, + extra, conditionals))) + + 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 + " " + repr(self.info) + if self.extra != None: + r = r + " " + repr(self.extra) + if self.conditionals != None: + r = r + " " + repr(self.conditionals) + return r + + + def set_header(self, header): + self.header = header + 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 set_conditionals(self, conditionals): + if conditionals == None or len(conditionals) == 0: + self.conditionals = None + else: + self.conditionals = conditionals[:] + + def get_name(self): + return self.name + def get_header(self): + return self.module + 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 get_conditionals(self): + return self.conditionals + + def update(self, header, module, type = None, info = None, extra=None, + conditionals=None): + if self.name == debugsym: + print("=> update %s : %s" % (debugsym, (module, type, info, + extra, conditionals))) + if header != None and self.header == None: + self.set_header(module) + if module != None and (self.module == None or self.header == self.module): + 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) + if conditionals != None: + self.set_conditionals(conditionals) + +class index: + def __init__(self, name = "noname"): + self.name = name + self.identifiers = {} + self.functions = {} + self.variables = {} + self.includes = {} + self.structs = {} + self.enums = {} + self.typedefs = {} + self.macros = {} + self.references = {} + self.info = {} + + def add_ref(self, name, header, module, static, type, lineno, info=None, extra=None, conditionals = None): + if name[0:2] == '__': + return None + d = None + try: + d = self.identifiers[name] + d.update(header, module, type, lineno, info, extra, conditionals) + except: + d = identifier(name, header, module, type, lineno, info, extra, conditionals) + self.identifiers[name] = d + + if d != None and static == 1: + d.set_static(1) + + if d != None and name != None and type != None: + self.references[name] = d + + if name == debugsym: + print("New ref: %s" % (d)) + + return d + + def add(self, name, header, module, static, type, lineno, info=None, extra=None, conditionals = None): + if name[0:2] == '__': + return None + d = None + try: + d = self.identifiers[name] + d.update(header, module, type, lineno, info, extra, conditionals) + except: + d = identifier(name, header, module, type, lineno, info, extra, conditionals) + self.identifiers[name] = d + + if d != None and static == 1: + d.set_static(1) + + if d != None and name != None and type != None: + if type == "function": + self.functions[name] = d + elif type == "functype": + self.functions[name] = d + elif type == "variable": + self.variables[name] = d + elif type == "include": + self.includes[name] = d + elif type == "struct": + self.structs[name] = d + elif type == "enum": + self.enums[name] = d + elif type == "typedef": + self.typedefs[name] = d + elif type == "macro": + self.macros[name] = d + else: + print("Unable to register type ", type) + + if name == debugsym: + print("New symbol: %s" % (d)) + + return d + + def merge(self, idx): + for id in list(idx.functions.keys()): + # + # macro might be used to override functions or variables + # definitions + # + if id in self.macros: + del self.macros[id] + if id in self.functions: + print("function %s from %s redeclared in %s" % ( + id, self.functions[id].header, idx.functions[id].header)) + else: + self.functions[id] = idx.functions[id] + self.identifiers[id] = idx.functions[id] + for id in list(idx.variables.keys()): + # + # macro might be used to override functions or variables + # definitions + # + if id in self.macros: + del self.macros[id] + if id in self.variables: + print("variable %s from %s redeclared in %s" % ( + id, self.variables[id].header, idx.variables[id].header)) + else: + self.variables[id] = idx.variables[id] + self.identifiers[id] = idx.variables[id] + for id in list(idx.structs.keys()): + if id in self.structs: + print("struct %s from %s redeclared in %s" % ( + id, self.structs[id].header, idx.structs[id].header)) + else: + self.structs[id] = idx.structs[id] + self.identifiers[id] = idx.structs[id] + for id in list(idx.typedefs.keys()): + if id in self.typedefs: + print("typedef %s from %s redeclared in %s" % ( + id, self.typedefs[id].header, idx.typedefs[id].header)) + else: + self.typedefs[id] = idx.typedefs[id] + self.identifiers[id] = idx.typedefs[id] + for id in list(idx.macros.keys()): + # + # macro might be used to override functions or variables + # definitions + # + if id in self.variables: + continue + if id in self.functions: + continue + if id in self.enums: + continue + if id in self.macros: + print("macro %s from %s redeclared in %s" % ( + id, self.macros[id].header, idx.macros[id].header)) + else: + self.macros[id] = idx.macros[id] + self.identifiers[id] = idx.macros[id] + for id in list(idx.enums.keys()): + if id in self.enums: + print("enum %s from %s redeclared in %s" % ( + id, self.enums[id].header, idx.enums[id].header)) + else: + self.enums[id] = idx.enums[id] + self.identifiers[id] = idx.enums[id] + + def merge_public(self, idx): + for id in list(idx.functions.keys()): + if id in self.functions: + # check that function condition agrees with header + if idx.functions[id].conditionals != \ + self.functions[id].conditionals: + print("Header condition differs from Function for %s:" \ + % id) + print(" H: %s" % self.functions[id].conditionals) + print(" C: %s" % idx.functions[id].conditionals) + up = idx.functions[id] + self.functions[id].update(None, up.module, up.type, up.info, up.extra) + # else: + # print "Function %s from %s is not declared in headers" % ( + # id, idx.functions[id].module) + # TODO: do the same for variables. + + def analyze_dict(self, type, dict): + count = 0 + public = 0 + for name in list(dict.keys()): + id = dict[name] + count = count + 1 + if id.static == 0: + public = public + 1 + if count != public: + print(" %d %s , %d public" % (count, type, public)) + elif count != 0: + print(" %d public %s" % (count, type)) + + + 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 = line.lstrip() + line = line.rstrip() + if line == '': + continue + while line[-1] == '\\': + line = line[:-1] + n = self.input.readline() + self.lineno = self.lineno + 1 + n = n.lstrip() + n = n.rstrip() + if not n: + break + else: + line = line + n + return line + + def getlineno(self): + 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 = list(map((lambda x: ('preproc', x)), + line.split())) + break; + l = len(line) + if line[0] == '"' or line[0] == "'": + end = line[0] + line = line[1:] + found = 0 + tok = "" + while found == 0: + i = 0 + l = len(line) + while i < l: + if line[i] == end: + self.line = line[i+1:] + line = line[:i] + l = i + found = 1 + break + if line[i] == '\\': + i = i + 1 + i = i + 1 + tok = tok + line + if found == 0: + line = self.getline() + if line == None: + return None + self.last = ('string', tok) + return self.last + + if l >= 2 and line[0] == '/' and line[1] == '*': + line = line[2:] + found = 0 + tok = "" + while found == 0: + i = 0 + l = len(line) + while i < l: + if line[i] == '*' and i+1 < l and line[i+1] == '/': + self.line = line[i+2:] + line = line[:i-1] + l = i + found = 1 + break + i = i + 1 + if tok != "": + tok = tok + "\n" + tok = tok + line + if found == 0: + line = self.getline() + if line == None: + return None + self.last = ('comment', tok) + return self.last + if l >= 2 and line[0] == '/' and line[1] == '/': + line = line[2:] + self.last = ('comment', line) + return self.last + i = 0 + while i < l: + if line[i] == '/' and i+1 < l and line[i+1] == '/': + self.line = line[i:] + line = line[:i] + break + if line[i] == '/' and i+1 < l and line[i+1] == '*': + self.line = line[i:] + line = line[:i] + break + if line[i] == '"' or line[i] == "'": + self.line = line[i:] + line = line[:i] + break + i = i + 1 + l = len(line) + i = 0 + while i < l: + if line[i] == ' ' or line[i] == '\t': + i = i + 1 + continue + o = ord(line[i]) + if (o >= 97 and o <= 122) or (o >= 65 and o <= 90) or \ + (o >= 48 and o <= 57): + s = i + while i < l: + o = ord(line[i]) + if (o >= 97 and o <= 122) or (o >= 65 and o <= 90) or \ + (o >= 48 and o <= 57) or \ + (" \t(){}:;,+-*/%&!|[]=><".find(line[i])) == -1: + i = i + 1 + else: + break + self.tokens.append(('name', line[s:i])) + continue + if "(){}:;,[]".find(line[i]) != -1: +# if line[i] == '(' or line[i] == ')' or line[i] == '{' or \ +# line[i] == '}' or line[i] == ':' or line[i] == ';' or \ +# line[i] == ',' or line[i] == '[' or line[i] == ']': + self.tokens.append(('sep', line[i])) + i = i + 1 + continue + if "+-*><=/%&!|.".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 ( + "+-*><=/%&!|".find(line[j]) != -1): +# line[j] == '+' or line[j] == '-' or line[j] == '*' or \ +# line[j] == '>' or line[j] == '<' or line[j] == '=' or \ +# line[j] == '/' or line[j] == '%' or line[j] == '&' or \ +# line[j] == '!' or line[j] == '|'): + self.tokens.append(('op', line[i:j+1])) + i = j + 1 + else: + self.tokens.append(('op', line[i])) + i = i + 1 + continue + s = i + while i < l: + o = ord(line[i]) + if (o >= 97 and o <= 122) or (o >= 65 and o <= 90) or \ + (o >= 48 and o <= 57) or ( + " \t(){}:;,+-*/%&!|[]=><".find(line[i]) == -1): +# line[i] != ' ' and line[i] != '\t' and +# line[i] != '(' and line[i] != ')' and +# line[i] != '{' and line[i] != '}' and +# line[i] != ':' and line[i] != ';' and +# line[i] != ',' and line[i] != '+' and +# line[i] != '-' and line[i] != '*' and +# line[i] != '/' and line[i] != '%' and +# line[i] != '&' and line[i] != '!' and +# line[i] != '|' and line[i] != '[' and +# line[i] != ']' and line[i] != '=' and +# line[i] != '*' and line[i] != '>' and +# line[i] != '<'): + i = i + 1 + else: + break + self.tokens.append(('name', line[s:i])) + + tok = self.tokens[0] + self.tokens = self.tokens[1:] + self.last = tok + return tok + +class CParser: + """The C module parser""" + def __init__(self, filename, idx = None): + self.filename = filename + if len(filename) > 2 and filename[-2:] == '.h': + self.is_header = 1 + else: + self.is_header = 0 + self.input = open(filename) + self.lexer = CLexer(self.input) + if idx == None: + self.index = index() + else: + self.index = idx + self.top_comment = "" + self.last_comment = "" + self.comment = None + self.collect_ref = 0 + self.no_error = 0 + self.conditionals = [] + self.defines = [] + + 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): + if self.is_header == 1: + self.index.add(name, module, module, static, type, self.lineno(), + info, extra, self.conditionals) + else: + self.index.add(name, None, module, static, type, self.lineno(), + info, extra, self.conditionals) + + def index_add_ref(self, name, module, static, type, info=None, + extra = None): + if self.is_header == 1: + self.index.add_ref(name, module, module, static, type, + self.lineno(), info, extra, self.conditionals) + else: + self.index.add_ref(name, None, module, static, type, self.lineno(), + info, extra, self.conditionals) + + 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 = comment.split("\n") + item = None + for line in lines: + while line != "" and (line[0] == ' ' or line[0] == '\t'): + line = line[1:] + while line != "" and line[0] == '*': + line = line[1:] + while line != "" and (line[0] == ' ' or line[0] == '\t'): + line = line[1:] + try: + (it, line) = line.split(":", 1) + item = it + while line != "" and (line[0] == ' ' or line[0] == '\t'): + line = line[1:] + if item in res: + res[item] = res[item] + " " + line + else: + res[item] = line + except: + if item != None: + if item in res: + res[item] = res[item] + " " + line + else: + res[item] = line + self.index.info = res + + def parseComment(self, token): + if self.top_comment == "": + self.top_comment = token[1] + if self.comment == None or token[1][0] == '*': + self.comment = token[1]; + else: + self.comment = self.comment + token[1] + token = self.lexer.token() + + if self.comment.find("DOC_DISABLE") != -1: + self.stop_error() + + if self.comment.find("DOC_ENABLE") != -1: + self.start_error() + + return token + + # + # Parse a comment block associate to a typedef + # + def parseTypeComment(self, name, quiet = 0): + if name[0:2] == '__': + quiet = 1 + + args = [] + desc = "" + + if self.comment == None: + if not quiet: + self.warning("Missing comment for type %s" % (name)) + return((args, desc)) + if self.comment[0] != '*': + if not quiet: + self.warning("Missing * in type comment for %s" % (name)) + return((args, desc)) + lines = self.comment.split('\n') + if lines[0] == '*': + del lines[0] + if lines[0] != "* %s:" % (name): + if not quiet: + self.warning("Misformatted type comment for %s" % (name)) + self.warning(" Expecting '* %s:' got '%s'" % (name, lines[0])) + return((args, desc)) + del lines[0] + while len(lines) > 0 and lines[0] == '*': + del lines[0] + desc = "" + while len(lines) > 0: + l = lines[0] + while len(l) > 0 and l[0] == '*': + l = l[1:] + l = l.strip() + desc = desc + " " + l + del lines[0] + + desc = desc.strip() + + if quiet == 0: + if desc == "": + self.warning("Type comment for %s lack description of the macro" % (name)) + + return(desc) + # + # Parse a comment block associate to a macro + # + def parseMacroComment(self, name, quiet = 0): + if name[0:2] == '__': + quiet = 1 + + 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 = self.comment.split('\n') + if lines[0] == '*': + del lines[0] + if lines[0] != "* %s:" % (name): + if not quiet: + self.warning("Misformatted macro comment for %s" % (name)) + self.warning(" Expecting '* %s:' got '%s'" % (name, lines[0])) + return((args, desc)) + del lines[0] + while lines[0] == '*': + del lines[0] + while len(lines) > 0 and lines[0][0:3] == '* @': + l = lines[0][3:] + try: + (arg, desc) = l.split(':', 1) + desc=desc.strip() + arg=arg.strip() + except: + if not quiet: + self.warning("Misformatted macro comment for %s" % (name)) + self.warning(" problem with '%s'" % (lines[0])) + del lines[0] + continue + del lines[0] + l = lines[0].strip() + while len(l) > 2 and l[0:3] != '* @': + while l[0] == '*': + l = l[1:] + desc = desc + ' ' + l.strip() + del lines[0] + if len(lines) == 0: + break + l = lines[0] + args.append((arg, desc)) + while len(lines) > 0 and lines[0] == '*': + del lines[0] + desc = "" + while len(lines) > 0: + l = lines[0] + while len(l) > 0 and l[0] == '*': + l = l[1:] + l = l.strip() + desc = desc + " " + l + del lines[0] + + desc = desc.strip() + + 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 = self.comment.split('\n') + if lines[0] == '*': + del lines[0] + if lines[0] != "* %s:" % (name): + if not quiet: + self.warning("Misformatted function comment for %s" % (name)) + self.warning(" Expecting '* %s:' got '%s'" % (name, lines[0])) + return(((ret[0], retdesc), args, desc)) + del lines[0] + while lines[0] == '*': + del lines[0] + nbargs = len(args) + while len(lines) > 0 and lines[0][0:3] == '* @': + l = lines[0][3:] + try: + (arg, desc) = l.split(':', 1) + desc=desc.strip() + arg=arg.strip() + except: + if not quiet: + self.warning("Misformatted function comment for %s" % (name)) + self.warning(" problem with '%s'" % (lines[0])) + del lines[0] + continue + del lines[0] + l = lines[0].strip() + while len(l) > 2 and l[0:3] != '* @': + while l[0] == '*': + l = l[1:] + desc = desc + ' ' + l.strip() + del lines[0] + if len(lines) == 0: + break + l = lines[0] + i = 0 + while i < nbargs: + if args[i][1] == arg: + args[i] = (args[i][0], arg, desc) + break; + i = i + 1 + if i >= nbargs: + if not quiet: + self.warning("Unable to find arg %s from function comment for %s" % ( + arg, name)) + while len(lines) > 0 and lines[0] == '*': + del lines[0] + desc = "" + while len(lines) > 0: + l = lines[0] + while len(l) > 0 and l[0] == '*': + l = l[1:] + l = l.strip() + if len(l) >= 6 and l[0:6] == "return" or l[0:6] == "Return": + try: + l = l.split(' ', 1)[1] + except: + l = "" + retdesc = l.strip() + del lines[0] + while len(lines) > 0: + l = lines[0] + while len(l) > 0 and l[0] == '*': + l = l[1:] + l = l.strip() + retdesc = retdesc + " " + l + del lines[0] + else: + desc = desc + " " + l + del lines[0] + + retdesc = retdesc.strip() + desc = desc.strip() + + if quiet == 0: + # + # report missing comments + # + i = 0 + while i < nbargs: + if args[i][2] == None and args[i][0] != "void" and \ + ((args[i][1] != None) or (args[i][1] == '')): + self.warning("Function comment for %s lacks description of arg %s" % (name, args[i][1])) + i = i + 1 + if retdesc == "" and ret[0] != "void": + self.warning("Function comment for %s lacks description of return value" % (name)) + if desc == "": + self.warning("Function comment for %s lacks description of the function" % (name)) + + return(((ret[0], retdesc), args, desc)) + + def parsePreproc(self, token): + if debug: + print("=> preproc ", token, self.lexer.tokens) + 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 = name.split('(') [0] + except: + pass + info = self.parseMacroComment(name, not self.is_header) + self.index_add(name, self.filename, not self.is_header, + "macro", info) + return token + + # + # Processing of conditionals modified by Bill 1/1/05 + # + # We process conditionals (i.e. tokens from #ifdef, #ifndef, + # #if, #else and #endif) for headers and mainline code, + # store the ones from the header in libxml2-api.xml, and later + # (in the routine merge_public) verify that the two (header and + # mainline code) agree. + # + # There is a small problem with processing the headers. Some of + # the variables are not concerned with enabling / disabling of + # library functions (e.g. '__XML_PARSER_H__'), and we don't want + # them to be included in libxml2-api.xml, or involved in + # the check between the header and the mainline code. To + # accomplish this, we ignore any conditional which doesn't include + # the string 'ENABLED' + # + if name == "#ifdef": + apstr = self.lexer.tokens[0][1] + try: + self.defines.append(apstr) + if apstr.find('ENABLED') != -1: + self.conditionals.append("defined(%s)" % apstr) + except: + pass + elif name == "#ifndef": + apstr = self.lexer.tokens[0][1] + try: + self.defines.append(apstr) + if apstr.find('ENABLED') != -1: + self.conditionals.append("!defined(%s)" % apstr) + except: + pass + elif name == "#if": + apstr = "" + for tok in self.lexer.tokens: + if apstr != "": + apstr = apstr + " " + apstr = apstr + tok[1] + try: + self.defines.append(apstr) + if apstr.find('ENABLED') != -1: + self.conditionals.append(apstr) + except: + pass + elif name == "#else": + if self.conditionals != [] and \ + self.defines[-1].find('ENABLED') != -1: + self.conditionals[-1] = "!(%s)" % self.conditionals[-1] + elif name == "#endif": + if self.conditionals != [] and \ + self.defines[-1].find('ENABLED') != -1: + self.conditionals = self.conditionals[:-1] + self.defines = self.defines[:-1] + token = self.lexer.token() + while token != None and token[0] == 'preproc' and \ + token[1][0] != '#': + token = self.lexer.token() + return token + + # + # token acquisition on top of the lexer, it handle internally + # 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 token[1] == "__const": + token = ("name", "const") + return token + elif token[0] == "name" and token[1] == "__attribute": + token = self.lexer.token() + while token != None and token[1] != ";": + token = self.lexer.token() + return token + elif token[0] == "name" and token[1] in ignored_words: + (n, info) = ignored_words[token[1]] + i = 0 + while i < n: + token = self.lexer.token() + i = i + 1 + token = self.lexer.token() + continue + else: + if debug: + print("=> ", token) + return token + return None + + # + # Parse a typedef, it records the type and its name. + # + def parseTypedef(self, token): + if token == None: + return None + token = self.parseType(token) + if token == None: + self.error("parsing typedef") + return None + base_type = self.type + type = base_type + #self.debug("end typedef type", token) + while token != None: + if token[0] == "name": + name = token[1] + signature = self.signature + if signature != None: + type = type.split('(')[0] + d = self.mergeFunctionComment(name, + ((type, None), signature), 1) + self.index_add(name, self.filename, not self.is_header, + "functype", d) + else: + if base_type == "struct": + self.index_add(name, self.filename, not self.is_header, + "struct", type) + base_type = "struct " + name + else: + # TODO report missing or misformatted comments + info = self.parseTypeComment(name, 1) + self.index_add(name, self.filename, not self.is_header, + "typedef", type, info) + token = self.token() + else: + self.error("parsing typedef: expecting a name") + return token + #self.debug("end typedef", token) + if token != None and token[0] == 'sep' and token[1] == ',': + type = base_type + token = self.token() + while token != None and token[0] == "op": + type = type + token[1] + token = self.token() + elif token != None and token[0] == 'sep' and token[1] == ';': + break; + elif token != None and token[0] == 'name': + type = base_type + continue; + else: + self.error("parsing typedef: expecting ';'", token) + return token + token = self.token() + return token + + # + # Parse a C code block, used for functions it parse till + # 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 = self.comment.strip() + self.comment = None + self.enums.append((name, value, comment)) + name = token[1] + comment = "" + token = self.token() + if token[0] == "op" and token[1][0] == "=": + value = "" + if len(token[1]) > 1: + value = token[1][1:] + token = self.token() + while token[0] != "sep" or (token[1] != ',' and + token[1] != '}'): + value = value + token[1] + token = self.token() + else: + try: + value = "%d" % (int(value) + 1) + except: + self.warning("Failed to compute value of enum %s" % (name)) + value="" + if token[0] == "sep" and token[1] == ",": + token = self.token() + else: + token = self.token() + return token + + # + # Parse a C definition block, used for structs it parse till + # 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" or \ + token[1] == "signed"): + if self.type == "": + self.type = token[1] + else: + self.type = self.type + " " + token[1] + token = self.token() + + if token[0] == "name" and (token[1] == "long" or token[1] == "short"): + if self.type == "": + self.type = token[1] + else: + self.type = self.type + " " + token[1] + if token[0] == "name" and token[1] == "int": + if self.type == "": + self.type = tmp[1] + else: + self.type = self.type + " " + tmp[1] + + 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 + list(ignored_files.keys()) + self.modules = {} + self.headers = {} + self.idx = index() + self.xref = {} + self.index = {} + if name == 'libxml2': + self.basename = 'libxml' + else: + self.basename = name + + def indexString(self, id, str): + if str == None: + return + str = str.replace("'", ' ') + str = str.replace('"', ' ') + str = str.replace("/", ' ') + str = str.replace('*', ' ') + str = str.replace("[", ' ') + str = str.replace("]", ' ') + str = str.replace("(", ' ') + str = str.replace(")", ' ') + str = str.replace("<", ' ') + str = str.replace('>', ' ') + str = str.replace("&", ' ') + str = str.replace('#', ' ') + str = str.replace(",", ' ') + str = str.replace('.', ' ') + str = str.replace(';', ' ') + tokens = str.split() + for token in tokens: + try: + c = token[0] + if string.ascii_letters.find(c) < 0: + pass + elif len(token) < 3: + pass + else: + lower = token.lower() + # TODO: generalize this a bit + if lower == 'and' or lower == 'the': + pass + elif token in self.xref: + self.xref[token].append(id) + else: + self.xref[token] = [id] + except: + pass + + def analyze(self): + print("Project %s : %d headers, %d modules" % (self.name, len(list(self.headers.keys())), len(list(self.modules.keys())))) + self.idx.analyze() + + def scanHeaders(self): + for header in list(self.headers.keys()): + parser = CParser(header) + idx = parser.parse() + self.headers[header] = idx; + self.idx.merge(idx) + + def scanModules(self): + for module in list(self.modules.keys()): + parser = CParser(module) + idx = parser.parse() + # idx.analyze() + self.modules[module] = idx + self.idx.merge_public(idx) + + def scan(self): + for directory in self.directories: + files = glob.glob(directory + "/*.c") + for file in files: + skip = 0 + for excl in self.excludes: + if file.find(excl) != -1: + print("Skipping %s" % file) + skip = 1 + break + if skip == 0: + self.modules[file] = None; + files = glob.glob(directory + "/*.h") + for file in files: + skip = 0 + for excl in self.excludes: + if file.find(excl) != -1: + print("Skipping %s" % file) + skip = 1 + break + if skip == 0: + self.headers[file] = None; + self.scanHeaders() + self.scanModules() + + def modulename_file(self, file): + module = os.path.basename(file) + if module[-2:] == '.h': + module = module[:-2] + elif module[-2:] == '.c': + module = module[:-2] + return module + + def serialize_enum(self, output, name): + id = self.idx.enums[name] + output.write(" \n") + + def serialize_macro(self, output, name): + id = self.idx.macros[name] + output.write(" \n" % (name, + self.modulename_file(id.header))) + if id.info != None: + try: + (args, desc) = id.info + if desc != None and desc != "": + output.write(" %s\n" % (escape(desc))) + self.indexString(name, desc) + for arg in args: + (name, desc) = arg + if desc != None and desc != "": + output.write(" \n" % ( + name, escape(desc))) + self.indexString(name, desc) + else: + output.write(" \n" % (name)) + except: + pass + output.write(" \n") + + def serialize_typedef(self, output, name): + id = self.idx.typedefs[name] + if id.info[0:7] == 'struct ': + 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(" \n" % (field[1] , field[0], desc)) + except: + print("Failed to serialize struct %s" % (name)) + output.write(" \n") + else: + output.write("/>\n"); + else : + output.write(" \n %s\n" % (escape(desc))) + output.write(" \n") + else: + output.write("/>\n") + except: + output.write("/>\n") + + def serialize_variable(self, output, name): + id = self.idx.variables[name] + if id.info != None: + output.write(" \n" % ( + name, self.modulename_file(id.header), id.info)) + else: + output.write(" \n" % ( + name, self.modulename_file(id.header))) + + def serialize_function(self, output, name): + id = self.idx.functions[name] + if name == debugsym: + print("=>", id) + + output.write(" <%s name='%s' file='%s' module='%s'>\n" % (id.type, + name, self.modulename_file(id.header), + self.modulename_file(id.module))) + # + # Processing of conditionals modified by Bill 1/1/05 + # + if id.conditionals != None: + apstr = "" + for cond in id.conditionals: + if apstr != "": + apstr = apstr + " && " + apstr = apstr + cond + output.write(" %s\n"% (apstr)); + try: + (ret, params, desc) = id.info + if (desc == None or desc == '') and \ + name[0:9] != "xmlThrDef" and name != "xmlDllMain": + print("%s %s from %s has no description" % (id.type, name, + self.modulename_file(id.module))) + + output.write(" %s\n" % (escape(desc))) + self.indexString(name, desc) + if ret[0] != None: + if ret[0] == "void": + output.write(" \n") + else: + output.write(" \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(" \n" % (param[1], param[0])) + else: + output.write(" \n" % (param[1], param[0], escape(param[2]))) + self.indexString(name, param[2]) + except: + print("Failed to save function %s info: " % name, repr(id.info)) + output.write(" \n" % (id.type)) + + def serialize_exports(self, output, file): + module = self.modulename_file(file) + output.write(" \n" % (module)) + dict = self.headers[file] + if dict.info != None: + for data in ('Summary', 'Description', 'Author'): + try: + output.write(" <%s>%s\n" % ( + data.lower(), + escape(dict.info[data]), + data.lower())) + except: + print("Header %s lacks a %s description" % (module, data)) + if 'Description' in dict.info: + desc = dict.info['Description'] + if desc.find("DEPRECATED") != -1: + output.write(" \n") + + ids = list(dict.macros.keys()) + ids.sort() + for id in uniq(ids): + # Macros are sometime used to masquerade other types. + if id in dict.functions: + continue + if id in dict.variables: + continue + if id in dict.typedefs: + continue + if id in dict.structs: + continue + if id in dict.enums: + continue + output.write(" \n" % (id)) + ids = list(dict.enums.keys()) + ids.sort() + for id in uniq(ids): + output.write(" \n" % (id)) + ids = list(dict.typedefs.keys()) + ids.sort() + for id in uniq(ids): + output.write(" \n" % (id)) + ids = list(dict.structs.keys()) + ids.sort() + for id in uniq(ids): + output.write(" \n" % (id)) + ids = list(dict.variables.keys()) + ids.sort() + for id in uniq(ids): + output.write(" \n" % (id)) + ids = list(dict.functions.keys()) + ids.sort() + for id in uniq(ids): + output.write(" \n" % (id)) + output.write(" \n") + + def serialize_xrefs_files(self, output): + headers = list(self.headers.keys()) + headers.sort() + for file in headers: + module = self.modulename_file(file) + output.write(" \n" % (module)) + dict = self.headers[file] + ids = uniq(list(dict.functions.keys()) + list(dict.variables.keys()) + \ + list(dict.macros.keys()) + list(dict.typedefs.keys()) + \ + list(dict.structs.keys()) + list(dict.enums.keys())) + ids.sort() + for id in ids: + output.write(" \n" % (id)) + output.write(" \n") + pass + + def serialize_xrefs_functions(self, output): + funcs = {} + for name in list(self.idx.functions.keys()): + id = self.idx.functions[name] + try: + (ret, params, desc) = id.info + for param in params: + if param[0] == 'void': + continue + if param[0] in funcs: + funcs[param[0]].append(name) + else: + funcs[param[0]] = [name] + except: + pass + typ = list(funcs.keys()) + typ.sort() + for type in typ: + if type == '' or type == 'void' or type == "int" or \ + type == "char *" or type == "const char *" : + continue + output.write(" \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(" \n" % (id)) + pid = id + output.write(" \n") + + def serialize_xrefs_constructors(self, output): + funcs = {} + for name in list(self.idx.functions.keys()): + id = self.idx.functions[name] + try: + (ret, params, desc) = id.info + if ret[0] == "void": + continue + if ret[0] in funcs: + funcs[ret[0]].append(name) + else: + funcs[ret[0]] = [name] + except: + pass + typ = list(funcs.keys()) + typ.sort() + for type in typ: + if type == '' or type == 'void' or type == "int" or \ + type == "char *" or type == "const char *" : + continue + output.write(" \n" % (type)) + ids = funcs[type] + ids.sort() + for id in ids: + output.write(" \n" % (id)) + output.write(" \n") + + def serialize_xrefs_alpha(self, output): + letter = None + ids = list(self.idx.identifiers.keys()) + ids.sort() + for id in ids: + if id[0] != letter: + if letter != None: + output.write(" \n") + letter = id[0] + output.write(" \n" % (letter)) + output.write(" \n" % (id)) + if letter != None: + output.write(" \n") + + def serialize_xrefs_references(self, output): + typ = list(self.idx.identifiers.keys()) + typ.sort() + for id in typ: + idf = self.idx.identifiers[id] + module = idf.header + output.write(" \n" % (id, + 'html/' + self.basename + '-' + + self.modulename_file(module) + '.html#' + + id)) + + def serialize_xrefs_index(self, output): + index = self.xref + typ = list(index.keys()) + typ.sort() + letter = None + count = 0 + chunk = 0 + chunks = [] + for id in typ: + if len(index[id]) > 30: + continue + if id[0] != letter: + if letter == None or count > 200: + if letter != None: + output.write(" \n") + output.write(" \n") + count = 0 + chunks.append(["chunk%s" % (chunk -1), first_letter, letter]) + output.write(" \n" % (chunk)) + first_letter = id[0] + chunk = chunk + 1 + elif letter != None: + output.write(" \n") + letter = id[0] + output.write(" \n" % (letter)) + output.write(" \n" % (id)) + tokens = index[id]; + tokens.sort() + tok = None + for token in tokens: + if tok == token: + continue + tok = token + output.write(" \n" % (token)) + count = count + 1 + output.write(" \n") + if letter != None: + output.write(" \n") + output.write(" \n") + if count != 0: + chunks.append(["chunk%s" % (chunk -1), first_letter, letter]) + output.write(" \n") + for ch in chunks: + output.write(" \n" % ( + ch[0], ch[1], ch[2])) + output.write(" \n") + + def serialize_xrefs(self, output): + output.write(" \n") + self.serialize_xrefs_references(output) + output.write(" \n") + output.write(" \n") + self.serialize_xrefs_alpha(output) + output.write(" \n") + output.write(" \n") + self.serialize_xrefs_constructors(output) + output.write(" \n") + output.write(" \n") + self.serialize_xrefs_functions(output) + output.write(" \n") + output.write(" \n") + self.serialize_xrefs_files(output) + output.write(" \n") + output.write(" \n") + self.serialize_xrefs_index(output) + output.write(" \n") + + def serialize(self): + filename = "%s-api.xml" % self.name + print("Saving XML description %s" % (filename)) + output = open(filename, "w") + output.write('\n') + output.write("\n" % self.name) + output.write(" \n") + headers = list(self.headers.keys()) + headers.sort() + for file in headers: + self.serialize_exports(output, file) + output.write(" \n") + output.write(" \n") + macros = list(self.idx.macros.keys()) + macros.sort() + for macro in macros: + self.serialize_macro(output, macro) + enums = list(self.idx.enums.keys()) + enums.sort() + for enum in enums: + self.serialize_enum(output, enum) + typedefs = list(self.idx.typedefs.keys()) + typedefs.sort() + for typedef in typedefs: + self.serialize_typedef(output, typedef) + variables = list(self.idx.variables.keys()) + variables.sort() + for variable in variables: + self.serialize_variable(output, variable) + functions = list(self.idx.functions.keys()) + functions.sort() + for function in functions: + self.serialize_function(output, function) + output.write(" \n") + output.write("\n") + output.close() + + filename = "%s-refs.xml" % self.name + print("Saving XML Cross References %s" % (filename)) + output = open(filename, "w") + output.write('\n') + output.write("\n" % self.name) + self.serialize_xrefs(output) + output.write("\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__": + if len(sys.argv) > 1: + debug = 1 + parse(sys.argv[1]) + else: + rebuild() diff --git a/doc/architecture.html b/doc/architecture.html new file mode 100644 index 0000000..62a922f --- /dev/null +++ b/doc/architecture.html @@ -0,0 +1,24 @@ + + +libxml2 architecture
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    The XML C parser and toolkit of Gnome

    libxml2 architecture

    Developer Menu
    API Indexes
    Related links

    Libxml2 is made of multiple components; some of them are optional, and +most of the block interfaces are public. The main components are:

      +
    • an Input/Output layer
    • +
    • FTP and HTTP client layers (optional)
    • +
    • an Internationalization layer managing the encodings support
    • +
    • a URI module
    • +
    • the XML parser and its basic SAX interface
    • +
    • an HTML parser using the same SAX interface (optional)
    • +
    • a SAX tree module to build an in-memory DOM representation
    • +
    • a tree module to manipulate the DOM representation
    • +
    • a validation module using the DOM representation (optional)
    • +
    • an XPath module for global lookup in a DOM representation + (optional)
    • +
    • a debug module (optional)
    • +

    Graphically this gives the following:

    a graphical view of the various

    Daniel Veillard

    diff --git a/doc/bugs.html b/doc/bugs.html new file mode 100644 index 0000000..55ff296 --- /dev/null +++ b/doc/bugs.html @@ -0,0 +1,70 @@ + + +Reporting bugs and getting help
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    The XML C parser and toolkit of Gnome

    Reporting bugs and getting help

    Main Menu
    Related links

    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 Gnome +bug tracking database (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.

    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 guarantee and if a real issue is raised it should go on the +mailing-list for archival).

    There is also a mailing-list xml@gnome.org for libxml, with an on-line archive (old). To subscribe to this list, +please visit the associated Web page and +follow the instructions. Do not send code, I won't debug it +(but patches are really appreciated!).

    Please note that with the current amount of virus and SPAM, sending mail +to the list without being subscribed won't work. There is *far too many +bounces* (in the order of a thousand a day !) I cannot approve them manually +anymore. If your mail to the list bounced waiting for administrator approval, +it is LOST ! Repost it and fix the problem triggering the error. Also please +note that emails with +a legal warning asking to not copy or redistribute freely the information +they contain are NOT acceptable for the mailing-list, +such mail will as much as possible be discarded automatically, and are less +likely to be answered if they made it to the list, DO NOT +post to the list from an email address where such legal requirements are +automatically added, get private paying support if you can't share +information.

    Check the following before +posting:

      +
    • Read the FAQ and use the + search engine to get information related to your problem.
    • +
    • Make sure you are using a recent + version, and that the problem still shows up in a recent version.
    • +
    • Check the list + archives to see if the problem was reported already. In this case + there is probably a fix available, similarly check the registered + open bugs.
    • +
    • Make sure you can reproduce the bug with xmllint or one of the test + programs found in source in the distribution.
    • +
    • Please send the command showing the error as well as the input (as an + attachment)
    • +

    Then send the bug with associated information to reproduce it to the xml@gnome.org 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.

    To be really clear about support:

      +
    • Support or help requests MUST be sent to + the list or on bugzilla 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.
    • +
    • There is no guarantee of support. If + your question remains unanswered after a week, repost it, making sure you + gave all the detail needed and the information requested.
    • +
    • 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.
    • +

    Of course, bugs reported with a suggested patch for fixing them will +probably be processed faster than those without.

    If you're looking for help, a quick look at the list archive may actually +provide the answer. I usually send source samples when answering libxml2 +usage questions. The auto-generated documentation is +not as polished as I would like (i need to learn more about DocBook), but +it's a good starting point.

    Daniel Veillard

    diff --git a/doc/buildDocBookCatalog b/doc/buildDocBookCatalog new file mode 100755 index 0000000..d1b8c94 --- /dev/null +++ b/doc/buildDocBookCatalog @@ -0,0 +1,414 @@ +#! /bin/bash + +usage() +{ + cat <' $tst` + if [ "$check" != "" ] ; then + entxml=$tst + break + fi +done + +if [ "$entxml" = "" ] ; then + echo could not locate ISO DocBook entities + exit 1 +fi +isodir=`dirname $entxml` +echo Found ISO DocBook entities in $isodir + +xmlcatalog --noout --add "public" \ + "ISO 8879:1986//ENTITIES Publishing//EN" \ + "file://$isodir/iso-pub.ent" $CATALOG +xmlcatalog --noout --add "public" \ + "ISO 8879:1986//ENTITIES Greek Letters//EN" \ + "file://$isodir/iso-grk1.ent" $CATALOG +xmlcatalog --noout --add "public" \ + "ISO 8879:1986//ENTITIES Box and Line Drawing//EN" \ + "file://$isodir/iso-box.ent" $CATALOG +xmlcatalog --noout --add "public" \ + "ISO 8879:1986//ENTITIES Greek Symbols//EN" \ + "file://$isodir/iso-grk3.ent" $CATALOG +xmlcatalog --noout --add "public" \ + "ISO 8879:1986//ENTITIES Added Math Symbols: Negated Relations//EN" \ + "file://$isodir/iso-amsn.ent" $CATALOG +xmlcatalog --noout --add "public" \ + "ISO 8879:1986//ENTITIES Numeric and Special Graphic//EN" \ + "file://$isodir/iso-num.ent" $CATALOG +xmlcatalog --noout --add "public" \ + "ISO 8879:1986//ENTITIES Alternative Greek Symbols//EN" \ + "file://$isodir/iso-grk4.ent" $CATALOG +xmlcatalog --noout --add "public" \ + "ISO 8879:1986//ENTITIES Diacritical Marks//EN" \ + "file://$isodir/iso-dia.ent" $CATALOG +xmlcatalog --noout --add "public" \ + "ISO 8879:1986//ENTITIES Monotoniko Greek//EN" \ + "file://$isodir/iso-grk2.ent" $CATALOG +xmlcatalog --noout --add "public" \ + "ISO 8879:1986//ENTITIES Added Math Symbols: Arrow Relations//EN" \ + "file://$isodir/iso-amsa.ent" $CATALOG +xmlcatalog --noout --add "public" \ + "ISO 8879:1986//ENTITIES Added Math Symbols: Ordinary//EN" \ + "file://$isodir/iso-amso.ent" $CATALOG +xmlcatalog --noout --add "public" \ + "ISO 8879:1986//ENTITIES Russian Cyrillic//EN" \ + "file://$isodir/iso-cyr1.ent" $CATALOG +xmlcatalog --noout --add "public" \ + "ISO 8879:1986//ENTITIES General Technical//EN" \ + "file://$isodir/iso-tech.ent" $CATALOG +xmlcatalog --noout --add "public" \ + "ISO 8879:1986//ENTITIES Added Math Symbols: Delimiters//EN" \ + "file://$isodir/iso-amsc.ent" $CATALOG +xmlcatalog --noout --add "public" \ + "ISO 8879:1986//ENTITIES Added Latin 1//EN" \ + "file://$isodir/iso-lat1.ent" $CATALOG +xmlcatalog --noout --add "public" \ + "ISO 8879:1986//ENTITIES Added Math Symbols: Binary Operators//EN" \ + "file://$isodir/iso-amsb.ent" $CATALOG +xmlcatalog --noout --add "public" \ + "ISO 8879:1986//ENTITIES Added Latin 2//EN" \ + "file://$isodir/iso-lat2.ent" $CATALOG +xmlcatalog --noout --add "public" \ + "ISO 8879:1986//ENTITIES Added Math Symbols: Relations//EN" \ + "file://$isodir/iso-amsr.ent" $CATALOG +xmlcatalog --noout --add "public" \ + "ISO 8879:1986//ENTITIES Non-Russian Cyrillic//EN" \ + "file://$isodir/iso-cyr2.ent" $CATALOG + +xmlcatalog --noout --add "delegatePublic" \ + "ISO 8879:1986" \ + "file://$CATALOG" $ROOTCATALOG + +# +# find the prefix for XSLT stylesheets +# +top=`dirname $docbookdir` +found=`find $top -name chunk.xsl` +if [ "$found" = "" ] ; then + found=`find /usr/share/xml -name chunk.xsl` +fi +if [ "$found" = "" ] ; then + found=`find $HOME -name chunk.xsl` +fi +if [ "$found" = "" ] ; then + found=`find /usr/local -name chunk.xsl` +fi +if [ "$found" = "" ] ; then + found=`find /usr/share/sgml -name chunk.xsl` +fi +if [ "$found" = "" ] ; then + echo could not locate chunk-common.xsl of DocBook XSLT stylesheets + exit 1 +fi + +xsldir="" +for tst in $found; do + dir=`dirname $tst` + dir=`dirname $dir` + if [ -r $dir/html/docbook.xsl -a -r $dir/common/l10n.xml ]; then + xsldir=$dir + break + fi +done + +if [ "$xsldir" = "" ] ; then + echo could not locate DocBook XSLT stylesheets + exit 1 +fi +echo Found DocBook XSLT stylesheets in $xsldir +for version in current 1.39 1.40 1.41 1.42 1.43 1.44 1.45 1.46 1.47 \ + 1.48 1.49 1.50 +do + xmlcatalog --noout --add "rewriteSystem" \ + "http://docbook.sourceforge.net/release/xsl/$version" \ + "file://$xsldir" $CATALOG + xmlcatalog --noout --add "rewriteURI" \ + "http://docbook.sourceforge.net/release/xsl/$version" \ + "file://$xsldir" $CATALOG +done + +xmlcatalog --noout --add "delegateSystem" \ + "http://docbook.sourceforge.net/release/xsl/" \ + "file://$CATALOG" $ROOTCATALOG +xmlcatalog --noout --add "delegateURI" \ + "http://docbook.sourceforge.net/release/xsl/" \ + "file://$CATALOG" $ROOTCATALOG + +# +# diff --git a/doc/catalog.fig b/doc/catalog.fig new file mode 100644 index 0000000..dadb347 --- /dev/null +++ b/doc/catalog.fig @@ -0,0 +1,62 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +1 2 0 1 0 7 50 0 -1 0.000 1 0.0000 2587 1875 1312 300 1275 1575 3900 2175 +1 2 0 1 0 7 50 0 -1 0.000 1 0.0000 2587 3900 1312 300 1275 3600 3900 4200 +1 2 0 1 0 7 50 0 -1 0.000 1 0.0000 10987 1875 1312 300 9675 1575 12300 2175 +1 2 0 1 0 7 50 0 -1 0.000 1 0.0000 10987 3900 1312 300 9675 3600 12300 4200 +2 4 0 2 -1 7 50 0 -1 6.000 0 0 7 0 0 5 + 4350 5925 4350 4650 3375 4650 3375 5925 4350 5925 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 + 1275 1875 1275 3900 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 + 3900 1875 3900 3900 +2 3 0 1 0 1 50 0 20 0.000 0 0 0 0 0 7 + 1685 3675 1945 3525 1945 3225 1685 3075 1425 3225 1425 3525 + 1685 3675 +2 3 0 1 0 1 50 0 20 0.000 0 0 0 0 0 7 + 2250 3000 2510 2850 2510 2550 2250 2400 1990 2550 1990 2850 + 2250 3000 +2 4 0 1 0 11 50 0 20 0.000 0 0 7 0 0 5 + 3375 2625 3000 2625 3000 2325 3375 2325 3375 2625 +2 4 0 1 0 17 50 0 20 0.000 0 0 7 0 0 5 + 3375 3000 3000 3000 3000 2700 3375 2700 3375 3000 +2 4 0 1 0 13 50 0 20 0.000 0 0 7 0 0 5 + 3825 2850 3450 2850 3450 2550 3825 2550 3825 2850 +2 1 0 2 4 7 50 0 -1 6.000 0 0 -1 1 0 2 + 1 0 2.00 120.00 240.00 + 2550 2625 3000 2475 +2 1 0 2 4 7 50 0 -1 6.000 0 0 -1 1 0 2 + 1 0 2.00 120.00 240.00 + 3811 5007 1875 3600 +2 1 0 2 -1 7 50 0 -1 0.000 0 0 -1 1 0 4 + 1 0 2.00 120.00 240.00 + 3825 5025 5250 5025 9075 4125 11325 2625 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 + 9675 1875 9675 3900 +2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 + 12300 1875 12300 3900 +2 4 0 1 0 11 50 0 20 0.000 0 0 7 0 0 5 + 11775 2625 11400 2625 11400 2325 11775 2325 11775 2625 +2 4 0 1 0 17 50 0 20 0.000 0 0 7 0 0 5 + 11775 3000 11400 3000 11400 2700 11775 2700 11775 3000 +2 4 0 1 0 13 50 0 20 0.000 0 0 7 0 0 5 + 12225 2850 11850 2850 11850 2550 12225 2550 12225 2850 +3 3 0 1 -1 7 50 0 -1 4.000 0 0 0 11 + 7725 2625 6450 2700 5775 3525 5700 4200 5925 4800 6600 5475 + 7350 5625 8100 5400 8550 4725 8625 3975 8400 3075 + -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 + -1.000 -1.000 -1.000 +3 2 0 2 4 7 50 0 -1 6.000 0 1 0 3 + 1 0 2.00 120.00 240.00 + 1575 3150 1575 2775 1950 2700 + 0.000 -1.000 0.000 +4 0 -1 50 0 2 35 0.0000 4 345 1740 6375 4200 Internet\001 +4 0 0 50 0 0 18 0.0000 4 255 1770 2025 3450 /etc/xml/catalog\001 +4 0 -1 50 0 0 22 0.0000 4 255 810 3825 4500 XML\001 diff --git a/doc/catalog.gif b/doc/catalog.gif new file mode 100644 index 0000000..f2e2bd3 Binary files /dev/null and b/doc/catalog.gif differ diff --git a/doc/catalog.html b/doc/catalog.html new file mode 100644 index 0000000..3d5bbe1 --- /dev/null +++ b/doc/catalog.html @@ -0,0 +1,261 @@ + + +Catalog support
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    The XML C parser and toolkit of Gnome

    Catalog support

    Main Menu
    Related links

    Table of Content:

      +
    1. General overview
    2. +
    3. The definition
    4. +
    5. Using catalogs
    6. +
    7. Some examples
    8. +
    9. How to tune catalog usage
    10. +
    11. How to debug catalog processing
    12. +
    13. How to create and maintain catalogs
    14. +
    15. The implementor corner quick review of the + API
    16. +
    17. Other resources
    18. +

    General overview

    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.

    It is basically used for 3 things:

      +
    • 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 +

      "-//OASIS//DTD DocBook XML V4.1.2//EN"

      +

      of the DocBook 4.1.2 XML DTD with the actual URL where it can be + downloaded

      +

      http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd

      +
    • +
    • remapping from a given URL to another one, like an HTTP indirection + saying that +

      "http://www.oasis-open.org/committes/tr.xsl"

      +

      should really be looked at

      +

      "http://www.oasis-open.org/committes/entity/stylesheets/base/tr.xsl"

      +
    • +
    • 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.
    • +

    The definitions

    Libxml, as of 2.4.3 implements 2 kind of catalogs:

      +
    • the older SGML catalogs, the official spec is SGML Open Technical + Resolution TR9401:1997, but is better understood by reading the SP Catalog page from + James Clark. This is relatively old and not the preferred mode of + operation of libxml.
    • +
    • XML + Catalogs is far more flexible, more recent, uses an XML syntax and + should scale quite better. This is the default option of libxml.
    • +

    Using catalog

    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:

    <?xml version='1.0'?>
    +<!DOCTYPE book PUBLIC "-//Norman Walsh//DTD DocBk XML V3.1.4//EN"
    +          "http://nwalsh.com/docbook/xml/3.1.4/db3xml.dtd">

    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.

    Note: Really don't use this +DOCTYPE example it's a really old version, but is fine as an example.

    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.

    Some examples:

    Here is a couple of fragments from XML Catalogs used in libxml2 early +regression tests in test/catalogs :

    <?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"/>
    +...

    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 public mapping it allows to associate a Public +Identifier with an URI.

    ...
    +    <rewriteSystem systemIdStartString="http://www.oasis-open.org/docbook/"
    +                   rewritePrefix="file:///usr/share/xml/docbook/"/>
    +...

    A rewriteSystem 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.

    ...
    +<delegatePublic publicIdStartString="-//OASIS//DTD XML Catalog //"
    +                catalog="file:///usr/share/xml/docbook.xml"/>
    +<delegatePublic publicIdStartString="-//OASIS//ENTITIES DocBook XML"
    +                catalog="file:///usr/share/xml/docbook.xml"/>
    +<delegatePublic publicIdStartString="-//OASIS//DTD DocBook XML"
    +                catalog="file:///usr/share/xml/docbook.xml"/>
    +<delegateSystem systemIdStartString="http://www.oasis-open.org/docbook/"
    +                catalog="file:///usr/share/xml/docbook.xml"/>
    +<delegateURI uriStartString="http://www.oasis-open.org/docbook/"
    +                catalog="file:///usr/share/xml/docbook.xml"/>
    +...

    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 +/usr/share/xml/docbook.xml 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.

    How to tune catalog usage:

    The user can change the default catalog behaviour by redirecting queries +to its own set of catalogs, this can be done by setting the +XML_CATALOG_FILES environment variable to a list of catalogs, an +empty one should deactivate loading the default /etc/xml/catalog +default catalog

    How to debug catalog processing:

    Setting up the XML_DEBUG_CATALOG environment variable will +make libxml2 output debugging information for each catalog operations, for +example:

    orchis:~/XML -> xmllint --memory --noout test/ent2
    +warning: failed to load external entity "title.xml"
    +orchis:~/XML -> export XML_DEBUG_CATALOG=
    +orchis:~/XML -> 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 -> 

    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 /etc/xml/catalog but since it's not present the +resolution fails.

    But the most advanced way to debug XML catalog processing is to use the +xmlcatalog 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:

    orchis:~/XML -> ./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 -> 

    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):

    orchis:~/XML -> ./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 -> 

    A shell interface is also available to debug and process multiple queries +(and for regression tests):

    orchis:~/XML -> ./xmlcatalog -shell test/catalogs/docbook.xml \
    +                   "-//OASIS//DTD DocBook XML V4.1.2//EN"
    +> 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
    +> public "-//OASIS//DTD DocBook XML V4.1.2//EN"
    +http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd
    +> quit
    +orchis:~/XML -> 

    This should be sufficient for most debugging purpose, this was actually +used heavily to debug the XML Catalog implementation itself.

    How to create and maintain catalogs:

    Basically XML Catalogs are XML files, you can either use XML tools to +manage them or use xmlcatalog for this. The basic step is +to create a catalog the -create option provide this facility:

    orchis:~/XML -> ./xmlcatalog --create tst.xml
    +<?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"/>
    +orchis:~/XML -> 

    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 -add command allows to add entries in the +catalog:

    orchis:~/XML -> ./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 -> cat tst.xml
    +<?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"/>
    +</catalog>
    +orchis:~/XML -> 

    The -add 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.

    Similarly the -del option remove matching entries from the +catalog:

    orchis:~/XML -> ./xmlcatalog --del \
    +  "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" tst.xml
    +<?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"/>
    +orchis:~/XML -> 

    The catalog is now empty. Note that the matching of -del is +exact and would have worked in a similar fashion with the Public ID +string.

    This is rudimentary but should be sufficient to manage a not too complex +catalog tree of resources.

    The implementor corner quick review of the +API:

    First, and like for every other module of libxml, there is an +automatically generated API page for +catalog support.

    The header for the catalog interfaces should be included as:

    #include <libxml/catalog.h>

    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 xmlSetExternalEntityLoader to +plug an application specific resolver).

    Basically libxml2 support 2 catalog lists:

      +
    • the default one, global shared by all the application
    • +
    • a per-document catalog, this one is built if the document uses the + oasis-xml-catalog PIs to specify its own catalog list, it is + associated to the parser context and destroyed when the parsing context + is destroyed.
    • +

    the document one will be used first if it exists.

    Initialization routines:

    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.

    The xmlCatalogAddLocal() call is used by the parser to grow the document +own catalog list if needed.

    Preferences setup:

    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.

    And of course xmlCatalogSetDebug() allows to generate debug messages +(through the xmlGenericError() mechanism).

    Querying routines:

    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.

    xmlCatalogLocalResolve() and xmlCatalogLocalResolveURI() are the same but +operate on the document catalog list

    Cleanup and Miscellaneous:

    xmlCatalogCleanup() free-up the global catalog, xmlCatalogFreeLocal() is +the per-document equivalent.

    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.

    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.

    threaded environments:

    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.

    Other resources

    The XML Catalog specification is relatively recent so there isn't much +literature to point at:

      +
    • You can find a good rant from Norm Walsh about the + need for catalogs, it provides a lot of context information even if + I don't agree with everything presented. Norm also wrote a more recent + article XML + entities and URI resolvers describing them.
    • +
    • An old XML + catalog proposal from John Cowan
    • +
    • The Resource Directory Description + Language (RDDL) another catalog system but more oriented toward + providing metadata for XML namespaces.
    • +
    • the page from the OASIS Technical Committee on Entity + Resolution who maintains XML Catalog, you will find pointers to the + specification update, some background and pointers to others tools + providing XML Catalog support
    • +
    • There is a shell script 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: +

      export XML_CATALOG_FILES=$HOME/xmlcatalog

      +

      should allow to process DocBook documentations without requiring + network accesses for the DTD or stylesheets

      +
    • +
    • I have uploaded a + small tarball containing XML Catalogs for DocBook 4.1.2 which seems + to work fine for me too
    • +
    • The xmlcatalog + manual page
    • +

    If you have suggestions for corrections or additions, simply contact +me:

    Daniel Veillard

    diff --git a/doc/checkapisym.xsl b/doc/checkapisym.xsl new file mode 100644 index 0000000..8591393 --- /dev/null +++ b/doc/checkapisym.xsl @@ -0,0 +1,48 @@ + + + + + + + + + + + + Looking for functions in symbols.xml + + + + Found + + functions + + + Looking for variables in symbols.xml + + + + Found + + variables + + + + + + + + + Failed to find export in symbols.xml: + + + + + + + diff --git a/doc/contribs.html b/doc/contribs.html new file mode 100644 index 0000000..37a50c9 --- /dev/null +++ b/doc/contribs.html @@ -0,0 +1,41 @@ + + +Contributions
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    The XML C parser and toolkit of Gnome

    Contributions

    Main Menu
    Related links

    Daniel Veillard

    diff --git a/doc/devhelp/Makefile.am b/doc/devhelp/Makefile.am new file mode 100644 index 0000000..dad7975 --- /dev/null +++ b/doc/devhelp/Makefile.am @@ -0,0 +1,79 @@ +devhelpdir = $(datadir)/gtk-doc/html/libxml2 + +dist_devhelp_DATA = \ + libxml2.devhelp \ + $(HTML_FILES) \ + $(EXTRA_FORMAT) + +HTML_FILES = \ + general.html \ + index.html \ + $(HTML_MODULES) + +HTML_MODULES= \ + libxml2-c14n.html \ + libxml2-catalog.html \ + libxml2-chvalid.html \ + libxml2-debugXML.html \ + libxml2-dict.html \ + libxml2-DOCBparser.html \ + libxml2-encoding.html \ + libxml2-entities.html \ + libxml2-globals.html \ + libxml2-hash.html \ + libxml2-HTMLparser.html \ + libxml2-HTMLtree.html \ + libxml2-list.html \ + libxml2-nanoftp.html \ + libxml2-nanohttp.html \ + libxml2-parser.html \ + libxml2-parserInternals.html \ + libxml2-pattern.html \ + libxml2-relaxng.html \ + libxml2-SAX2.html \ + libxml2-SAX.html \ + libxml2-schemasInternals.html \ + libxml2-schematron.html \ + libxml2-threads.html \ + libxml2-tree.html \ + libxml2-uri.html \ + libxml2-valid.html \ + libxml2-xinclude.html \ + libxml2-xlink.html \ + libxml2-xmlautomata.html \ + libxml2-xmlerror.html \ + libxml2-xmlexports.html \ + libxml2-xmlIO.html \ + libxml2-xmlmemory.html \ + libxml2-xmlmodule.html \ + libxml2-xmlreader.html \ + libxml2-xmlregexp.html \ + libxml2-xmlsave.html \ + libxml2-xmlschemas.html \ + libxml2-xmlschemastypes.html \ + libxml2-xmlstring.html \ + libxml2-xmlunicode.html \ + libxml2-xmlversion.html \ + libxml2-xmlwriter.html \ + libxml2-xpath.html \ + libxml2-xpathInternals.html \ + libxml2-xpointer.html + +EXTRA_FORMAT= \ + home.png \ + left.png \ + right.png \ + up.png \ + style.css + +EXTRA_DIST = devhelp.xsl html.xsl + +if REBUILD_DOCS +rebuild: libxml2.devhelp $(HTML_FILES) +.PHONY: rebuild + +libxml2.devhelp $(HTML_FILES): devhelp.xsl html.xsl $(top_srcdir)/doc/libxml2-api.xml + -@(if [ -x $(XSLTPROC) ] ; then \ + echo Rebuilding devhelp files ; \ + $(XSLTPROC) --nonet -o $(srcdir)/libxml2.devhelp $(srcdir)/devhelp.xsl $(top_srcdir)/doc/libxml2-api.xml ; fi ); +endif diff --git a/doc/devhelp/devhelp.xsl b/doc/devhelp/devhelp.xsl new file mode 100644 index 0000000..f19c3f1 --- /dev/null +++ b/doc/devhelp/devhelp.xsl @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <xsl:value-of select="concat(@name, ': ', summary)"/> + + + + + + + + + + + + + + + + + + + + + +

    +

    -

    +

    + +

    WARNING: this module is deprecated !

    +
    +

    Author(s):

    +
    +

    Synopsis

    +
    +	    
    +	  
    +
    +
    +

    Description

    +
    +
    +

    Details

    +
    + + + + + +
    +
    + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + diff --git a/doc/devhelp/general.html b/doc/devhelp/general.html new file mode 100644 index 0000000..90f0d39 --- /dev/null +++ b/doc/devhelp/general.html @@ -0,0 +1,38 @@ + + + + + libxml2: + + + + + + + + + + + + + + + +

    + libxml2 API Modules +

    +

    DOCBparser - old DocBook SGML parser
    HTMLparser - interface for an HTML 4.0 non-verifying parser
    HTMLtree - specific APIs to process HTML tree, especially serialization
    SAX - Old SAX version 1 handler, deprecated
    SAX2 - SAX2 parser interface used to build the DOM tree
    c14n - Provide Canonical XML and Exclusive XML Canonicalization
    catalog - interfaces to the Catalog handling system
    chvalid - Unicode character range checking
    debugXML - Tree debugging APIs
    dict - string dictionary
    encoding - interface for the encoding conversion functions
    entities - interface for the XML entities handling
    globals - interface for all global variables of the library
    hash - Chained hash tables
    list - lists interfaces
    nanoftp - minimal FTP implementation
    nanohttp - minimal HTTP implementation
    parser - the core parser module
    parserInternals - internals routines and limits exported by the parser.
    pattern - pattern expression handling
    relaxng - implementation of the Relax-NG validation
    schemasInternals - internal interfaces for XML Schemas
    schematron - XML Schemastron implementation
    threads - interfaces for thread handling
    tree - interfaces for tree manipulation
    uri - library of generic URI related routines
    valid - The DTD validation
    xinclude - implementation of XInclude
    xlink - unfinished XLink detection module
    xmlIO - interface for the I/O interfaces used by the parser
    xmlautomata - API to build regexp automata
    xmlerror - error handling
    xmlexports - macros for marking symbols as exportable/importable.
    xmlmemory - interface for the memory allocator
    xmlmodule - dynamic module loading
    xmlreader - the XMLReader implementation
    xmlregexp - regular expressions handling
    xmlsave - the XML document serializer
    xmlschemas - incomplete XML Schemas structure implementation
    xmlschemastypes - implementation of XML Schema Datatypes
    xmlstring - set of routines to process strings
    xmlunicode - Unicode character APIs
    xmlversion - compile-time version informations
    xmlwriter - text writing API for XML
    xpath - XML Path Language implementation
    xpathInternals - internal interfaces for XML Path Language implementation
    xpointer - API to handle XML Pointers

    + + diff --git a/doc/devhelp/home.png b/doc/devhelp/home.png new file mode 100644 index 0000000..1700361 Binary files /dev/null and b/doc/devhelp/home.png differ diff --git a/doc/devhelp/html.xsl b/doc/devhelp/html.xsl new file mode 100644 index 0000000..1720b29 --- /dev/null +++ b/doc/devhelp/html.xsl @@ -0,0 +1,602 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ( + + void + + + + + + + + + ,
    + + + + + + + +
    +
    + ); + + +
    + + + + + + + typedef + + + + + + + + + + + + ( + + void + + + + + + + + + ,
    + + + + + + + +
    +
    + ); + + +
    + + + + + + + + typedef + + + + + + ; + + + + + + #define + + + ( + + + + , + + + ) + + ; + + + + + + + + + + +
    +

    Structure

    +
    +     {
    +
    +    
    +      The content of this structure is not made public by the API.
    +
    +    
    +    
    +            
    +	
    +	  
    +	
    +		
    +	
    +	
    +	  	: 
    +	  
    +	    
    +	  
    +	
    +	
    +
    +    
    +    } 
    +    
    +    ;
    +
    +    
    +

    + + + +

    + +

    +
    + + + +
    +

    Typedef

    +
    +    
    +      
    +    
    +     
    +    
    +    ;
    +
    +    
    +

    + + + +

    + +

    +
    + + + +
    +

    Variable

    +
    +    
    +      
    +    
    +     
    +    
    +    ;
    +
    +    
    +

    + + + +

    + +

    +
    + + + +
    +

    Enum

    +
    +    enum 
    +    
    +     {
    +
    +    
    +      
    +          
    +      
    +      
    +         = 
    +	
    +      
    +      
    +         /* 
    +	
    +         */
    +      
    +      
    +
    +    
    +    };
    +
    +    
    +

    + + + +

    + +

    +
    + + + +
    +

    Macro

    +
    +    #define 
    +    
    +    
    +      (
    +      
    +        
    +	
    +	  , 
    +	
    +      
    +      )
    +    
    +    ;
    +
    +    
    +

    + + + +

    + +
    + + + + + + +
    : + + + +
    +
    + + +

    +
    + + + + + + +
    +

    ()

    +
    +    
    +      
    +    
    +    	
    +    
    +    
    +      	
    +    
    +    
    +      	
    +    
    +    	(
    +    
    +      void
    +    
    +    
    +      
    +        
    +      
    +       
    +      
    +      
    +        , 
    + + + + + + + +
    +
    + )
    + + +
    +

    + + + +

    + + +
    + + + + + + + + + + + + +
    : + + + +
    Returns: + + + +
    +
    +

    +
    + + + + + + +
    +

    Function type

    +
    +    
    +      
    +    
    +    	
    +    
    +    
    +      	
    +    
    +    
    +      	
    +    
    +    	(
    +    
    +      void
    +    
    +    
    +      
    +        
    +      
    +       
    +      
    +      
    +        , 
    + + + + + + + +
    +
    + )
    + + +
    +

    + + + +

    + + +
    + + + + + + + + + + + + +
    : + + + +
    Returns: + + + +
    +
    +

    +
    + + + + + + + + + <xsl:value-of select="concat(@name, ': ', summary)"/> + + + + + + + + + + + + + + + + + + +

    libxml2 API Modules

    +

    + + -
    +
    +

    + + +
    +
    + + + + + + + + libxml2 Reference Manual + + + + + + + + + + + + +

    libxml2 Reference Manual

    +

    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 MIT +License. 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 variety of language bindings make it available in +other environments.

    +

    Libxml2 implements a number of existing standards related to markup +languages:

    + +

    As a result the libxml2 API is very + large. If you get lost searching for some specific API use + the online search + engine hosted on xmlsoft.org + the libxml2 and libxslt project page.

    + + +
    +
    + +
    + + diff --git a/doc/devhelp/index.html b/doc/devhelp/index.html new file mode 100644 index 0000000..26c2839 --- /dev/null +++ b/doc/devhelp/index.html @@ -0,0 +1,67 @@ + + + + + libxml2 Reference Manual + + + + + + + + + + + +

    + libxml2 Reference Manual +

    +

    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 MIT +License. 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 variety of language bindings make it available in +other environments.

    +

    Libxml2 implements a number of existing standards related to markup +languages:

    + +

    As a result the libxml2 API is very + large. If you get lost searching for some specific API use + the online search + engine hosted on xmlsoft.org + the libxml2 and libxslt project page.

    + + diff --git a/doc/devhelp/left.png b/doc/devhelp/left.png new file mode 100644 index 0000000..2d05b3d Binary files /dev/null and b/doc/devhelp/left.png differ diff --git a/doc/devhelp/libxml2-DOCBparser.html b/doc/devhelp/libxml2-DOCBparser.html new file mode 100644 index 0000000..a7b514e --- /dev/null +++ b/doc/devhelp/libxml2-DOCBparser.html @@ -0,0 +1,138 @@ + + + + + DOCBparser: old DocBook SGML parser + + + + + + + + + + + + + + + +

    + DOCBparser +

    +

    DOCBparser - old DocBook SGML parser

    +

    interface for a DocBook SGML non-verifying parser This code is DEPRECATED, and should not be used anymore.

    +

    WARNING: this module is deprecated !

    +

    Author(s): Daniel Veillard

    +
    +

    Synopsis

    +
    typedef xmlParserInputPtr docbParserInputPtr;
    +typedef xmlParserCtxt docbParserCtxt;
    +typedef xmlParserCtxtPtr docbParserCtxtPtr;
    +typedef xmlParserInput docbParserInput;
    +typedef xmlDocPtr docbDocPtr;
    +typedef xmlSAXHandler docbSAXHandler;
    +typedef xmlSAXHandlerPtr docbSAXHandlerPtr;
    +void	docbFreeParserCtxt		(docbParserCtxtPtr ctxt);
    +docbDocPtr	docbParseDoc		(xmlChar * cur, 
    const char * encoding); +docbParserCtxtPtr docbCreateFileParserCtxt (const char * filename,
    const char * encoding); +docbDocPtr docbSAXParseFile (const char * filename,
    const char * encoding,
    docbSAXHandlerPtr sax,
    void * userData); +docbDocPtr docbSAXParseDoc (xmlChar * cur,
    const char * encoding,
    docbSAXHandlerPtr sax,
    void * userData); +docbParserCtxtPtr docbCreatePushParserCtxt (docbSAXHandlerPtr sax,
    void * user_data,
    const char * chunk,
    int size,
    const char * filename,
    xmlCharEncoding enc); +int docbEncodeEntities (unsigned char * out,
    int * outlen,
    const unsigned char * in,
    int * inlen,
    int quoteChar); +docbDocPtr docbParseFile (const char * filename,
    const char * encoding); +int docbParseDocument (docbParserCtxtPtr ctxt); +int docbParseChunk (docbParserCtxtPtr ctxt,
    const char * chunk,
    int size,
    int terminate); +
    +
    +
    +

    Description

    +
    +
    +

    Details

    +
    +

    Typedef docbDocPtr

    xmlDocPtr docbDocPtr;
    +

    +

    +
    +

    Typedef docbParserCtxt

    xmlParserCtxt docbParserCtxt;
    +

    +

    +
    +

    Typedef docbParserCtxtPtr

    xmlParserCtxtPtr docbParserCtxtPtr;
    +

    +

    +
    +

    Typedef docbParserInput

    xmlParserInput docbParserInput;
    +

    +

    +
    +

    Typedef docbParserInputPtr

    xmlParserInputPtr docbParserInputPtr;
    +

    +

    +
    +

    Typedef docbSAXHandler

    xmlSAXHandler docbSAXHandler;
    +

    +

    +
    +

    Typedef docbSAXHandlerPtr

    xmlSAXHandlerPtr docbSAXHandlerPtr;
    +

    +

    +
    +

    docbCreateFileParserCtxt ()

    docbParserCtxtPtr	docbCreateFileParserCtxt	(const char * filename, 
    const char * encoding)
    +

    Create a parser context for a file content. Automatic support for ZLIB/Compress compressed document is provided by default if found at compile-time.

    +
    filename:the filename
    encoding:the SGML document encoding, or NULL
    Returns:the new parser context or NULL
    +
    +

    docbCreatePushParserCtxt ()

    docbParserCtxtPtr	docbCreatePushParserCtxt	(docbSAXHandlerPtr sax, 
    void * user_data,
    const char * chunk,
    int size,
    const char * filename,
    xmlCharEncoding enc)
    +

    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.

    +
    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
    Returns:the new parser context or NULL
    +
    + +
    +

    docbFreeParserCtxt ()

    void	docbFreeParserCtxt		(docbParserCtxtPtr ctxt)
    +

    Free all the memory used by a parser context. However the parsed document in ctxt->myDoc is not freed.

    +
    ctxt:an SGML parser context
    +
    +

    docbParseChunk ()

    int	docbParseChunk			(docbParserCtxtPtr ctxt, 
    const char * chunk,
    int size,
    int terminate)
    +

    Parse a Chunk of memory

    +
    ctxt:an XML parser context
    chunk:an char array
    size:the size in byte of the chunk
    terminate:last chunk indicator
    Returns:zero if no error, the xmlParserErrors otherwise.
    +
    +

    docbParseDoc ()

    docbDocPtr	docbParseDoc		(xmlChar * cur, 
    const char * encoding)
    +

    parse an SGML in-memory document and build a tree.

    +
    cur:a pointer to an array of xmlChar
    encoding:a free form C string describing the SGML document encoding, or NULL
    Returns:the resulting document tree
    +
    +

    docbParseDocument ()

    int	docbParseDocument		(docbParserCtxtPtr ctxt)
    +

    parse an SGML document (and build a tree if using the standard SAX interface).

    +
    ctxt:an SGML parser context
    Returns:0, -1 in case of error. the parser context is augmented as a result of the parsing.
    +
    +

    docbParseFile ()

    docbDocPtr	docbParseFile		(const char * filename, 
    const char * encoding)
    +

    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.

    +
    filename:the filename
    encoding:a free form C string describing document encoding, or NULL
    Returns:the resulting document tree
    +
    +

    docbSAXParseDoc ()

    docbDocPtr	docbSAXParseDoc		(xmlChar * cur, 
    const char * encoding,
    docbSAXHandlerPtr sax,
    void * userData)
    +

    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.

    +
    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.
    Returns:the resulting document tree
    +
    +

    docbSAXParseFile ()

    docbDocPtr	docbSAXParseFile	(const char * filename, 
    const char * encoding,
    docbSAXHandlerPtr sax,
    void * userData)
    +

    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.

    +
    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.
    Returns:the resulting document tree
    +
    +
    +
    + + diff --git a/doc/devhelp/libxml2-HTMLparser.html b/doc/devhelp/libxml2-HTMLparser.html new file mode 100644 index 0000000..6d8a42a --- /dev/null +++ b/doc/devhelp/libxml2-HTMLparser.html @@ -0,0 +1,373 @@ + + + + + HTMLparser: interface for an HTML 4.0 non-verifying parser + + + + + + + + + + + + + + + + +

    + HTMLparser +

    +

    HTMLparser - interface for an HTML 4.0 non-verifying parser

    +

    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.

    +

    Author(s): Daniel Veillard

    +
    +

    Synopsis

    +
    #define htmlDefaultSubelement(elt);
    +#define htmlElementAllowedHereDesc(parent, elt);
    +#define htmlRequiredAttrs(elt);
    +typedef xmlParserNodeInfo htmlParserNodeInfo;
    +typedef xmlParserInput htmlParserInput;
    +typedef xmlParserCtxtPtr htmlParserCtxtPtr;
    +typedef struct _htmlEntityDesc htmlEntityDesc;
    +typedef xmlDocPtr htmlDocPtr;
    +typedef xmlSAXHandlerPtr htmlSAXHandlerPtr;
    +typedef enum htmlStatus;
    +typedef xmlNodePtr htmlNodePtr;
    +typedef htmlElemDesc * htmlElemDescPtr;
    +typedef struct _htmlElemDesc htmlElemDesc;
    +typedef xmlSAXHandler htmlSAXHandler;
    +typedef xmlParserInputPtr htmlParserInputPtr;
    +typedef enum htmlParserOption;
    +typedef htmlEntityDesc * htmlEntityDescPtr;
    +typedef xmlParserCtxt htmlParserCtxt;
    +int	htmlIsScriptAttribute		(const xmlChar * name);
    +int	htmlHandleOmittedElem		(int val);
    +htmlDocPtr	htmlReadFd		(int fd, 
    const char * URL,
    const char * encoding,
    int options); +htmlDocPtr htmlReadIO (xmlInputReadCallback ioread,
    xmlInputCloseCallback ioclose,
    void * ioctx,
    const char * URL,
    const char * encoding,
    int options); +htmlDocPtr htmlParseFile (const char * filename,
    const char * encoding); +htmlDocPtr htmlCtxtReadDoc (htmlParserCtxtPtr ctxt,
    const xmlChar * cur,
    const char * URL,
    const char * encoding,
    int options); +int htmlAutoCloseTag (htmlDocPtr doc,
    const xmlChar * name,
    htmlNodePtr elem); +int htmlParseChunk (htmlParserCtxtPtr ctxt,
    const char * chunk,
    int size,
    int terminate); +const htmlElemDesc * htmlTagLookup (const xmlChar * tag); +htmlParserCtxtPtr htmlCreateMemoryParserCtxt (const char * buffer,
    int size); +void htmlCtxtReset (htmlParserCtxtPtr ctxt); +int htmlElementAllowedHere (const htmlElemDesc * parent,
    const xmlChar * elt); +htmlDocPtr htmlCtxtReadIO (htmlParserCtxtPtr ctxt,
    xmlInputReadCallback ioread,
    xmlInputCloseCallback ioclose,
    void * ioctx,
    const char * URL,
    const char * encoding,
    int options); +htmlParserCtxtPtr htmlCreatePushParserCtxt (htmlSAXHandlerPtr sax,
    void * user_data,
    const char * chunk,
    int size,
    const char * filename,
    xmlCharEncoding enc); +htmlDocPtr htmlReadMemory (const char * buffer,
    int size,
    const char * URL,
    const char * encoding,
    int options); +int htmlIsAutoClosed (htmlDocPtr doc,
    htmlNodePtr elem); +int htmlParseCharRef (htmlParserCtxtPtr ctxt); +htmlDocPtr htmlReadDoc (const xmlChar * cur,
    const char * URL,
    const char * encoding,
    int options); +int htmlEncodeEntities (unsigned char * out,
    int * outlen,
    const unsigned char * in,
    int * inlen,
    int quoteChar); +htmlStatus htmlNodeStatus (const htmlNodePtr node,
    int legacy); +htmlStatus htmlAttrAllowed (const htmlElemDesc * elt,
    const xmlChar * attr,
    int legacy); +htmlDocPtr htmlSAXParseFile (const char * filename,
    const char * encoding,
    htmlSAXHandlerPtr sax,
    void * userData); +const htmlEntityDesc * htmlParseEntityRef (htmlParserCtxtPtr ctxt,
    const xmlChar ** str); +htmlStatus htmlElementStatusHere (const htmlElemDesc * parent,
    const htmlElemDesc * elt); +const htmlEntityDesc * htmlEntityValueLookup (unsigned int value); +void htmlParseElement (htmlParserCtxtPtr ctxt); +int UTF8ToHtml (unsigned char * out,
    int * outlen,
    const unsigned char * in,
    int * inlen); +const htmlEntityDesc * htmlEntityLookup (const xmlChar * name); +void htmlFreeParserCtxt (htmlParserCtxtPtr ctxt); +htmlDocPtr htmlCtxtReadMemory (htmlParserCtxtPtr ctxt,
    const char * buffer,
    int size,
    const char * URL,
    const char * encoding,
    int options); +htmlDocPtr htmlCtxtReadFd (htmlParserCtxtPtr ctxt,
    int fd,
    const char * URL,
    const char * encoding,
    int options); +htmlDocPtr htmlReadFile (const char * filename,
    const char * encoding,
    int options); +htmlDocPtr htmlCtxtReadFile (htmlParserCtxtPtr ctxt,
    const char * filename,
    const char * encoding,
    int options); +int htmlParseDocument (htmlParserCtxtPtr ctxt); +htmlParserCtxtPtr htmlNewParserCtxt (void); +htmlDocPtr htmlSAXParseDoc (xmlChar * cur,
    const char * encoding,
    htmlSAXHandlerPtr sax,
    void * userData); +int htmlCtxtUseOptions (htmlParserCtxtPtr ctxt,
    int options); +htmlDocPtr htmlParseDoc (xmlChar * cur,
    const char * encoding); +
    +
    +
    +

    Description

    +
    +
    +

    Details

    +
    +

    Macro htmlDefaultSubelement

    #define htmlDefaultSubelement(elt);
    +

    Returns the default subelement for this element

    elt:HTML element
    +
    +
    +

    Macro htmlElementAllowedHereDesc

    #define htmlElementAllowedHereDesc(parent, elt);
    +

    Checks whether an HTML element description may be a direct child of the specified element. Returns 1 if allowed; 0 otherwise.

    parent:HTML parent element
    elt:HTML element
    +
    +
    +

    Macro htmlRequiredAttrs

    #define htmlRequiredAttrs(elt);
    +

    Returns the attributes required for the specified element.

    elt:HTML element
    +
    +
    +

    Typedef htmlDocPtr

    xmlDocPtr htmlDocPtr;
    +

    +

    +
    +

    Structure htmlElemDesc

    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 structur
    +    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
    +} htmlElemDesc;
    +

    +

    +
    +

    Typedef htmlElemDescPtr

    htmlElemDesc * htmlElemDescPtr;
    +

    +

    +
    +

    Structure htmlEntityDesc

    struct _htmlEntityDesc {
    +    unsigned int	value	: the UNICODE value for the character
    +    const char *	name	: The entity name
    +    const char *	desc	: the description
    +} htmlEntityDesc;
    +

    +

    +
    +

    Typedef htmlEntityDescPtr

    htmlEntityDesc * htmlEntityDescPtr;
    +

    +

    +
    +

    Typedef htmlNodePtr

    xmlNodePtr htmlNodePtr;
    +

    +

    +
    +

    Typedef htmlParserCtxt

    xmlParserCtxt htmlParserCtxt;
    +

    +

    +
    +

    Typedef htmlParserCtxtPtr

    xmlParserCtxtPtr htmlParserCtxtPtr;
    +

    +

    +
    +

    Typedef htmlParserInput

    xmlParserInput htmlParserInput;
    +

    +

    +
    +

    Typedef htmlParserInputPtr

    xmlParserInputPtr htmlParserInputPtr;
    +

    +

    +
    +

    Typedef htmlParserNodeInfo

    xmlParserNodeInfo htmlParserNodeInfo;
    +

    +

    +
    +

    Enum htmlParserOption

    enum htmlParserOption {
    +    HTML_PARSE_RECOVER = 1 /* Relaxed parsing */
    +    HTML_PARSE_NODEFDTD = 4 /* do not default a doctype if not found */
    +    HTML_PARSE_NOERROR = 32 /* suppress error reports */
    +    HTML_PARSE_NOWARNING = 64 /* suppress warning reports */
    +    HTML_PARSE_PEDANTIC = 128 /* pedantic error reporting */
    +    HTML_PARSE_NOBLANKS = 256 /* remove blank nodes */
    +    HTML_PARSE_NONET = 2048 /* Forbid network access */
    +    HTML_PARSE_NOIMPLIED = 8192 /* Do not add implied html/body... elements */
    +    HTML_PARSE_COMPACT = 65536 /* compact small text nodes */
    +    HTML_PARSE_IGNORE_ENC = 2097152 /*  ignore internal document encoding hint */
    +};
    +

    +

    +
    +

    Typedef htmlSAXHandler

    xmlSAXHandler htmlSAXHandler;
    +

    +

    +
    +

    Typedef htmlSAXHandlerPtr

    xmlSAXHandlerPtr htmlSAXHandlerPtr;
    +

    +

    +
    +

    Enum htmlStatus

    enum htmlStatus {
    +    HTML_NA = 0 /* something we don't check at all */
    +    HTML_INVALID = 1
    +    HTML_DEPRECATED = 2
    +    HTML_VALID = 4
    +    HTML_REQUIRED = 12 /*  VALID bit set so ( & HTML_VALID ) is TRUE */
    +};
    +

    +

    +
    + +
    +

    htmlAttrAllowed ()

    htmlStatus	htmlAttrAllowed		(const htmlElemDesc * elt, 
    const xmlChar * attr,
    int legacy)
    +

    Checks whether an attribute is valid for an element Has full knowledge of Required and Deprecated attributes

    +
    elt:HTML element
    attr:HTML attribute
    legacy:whether to allow deprecated attributes
    Returns:one of HTML_REQUIRED, HTML_VALID, HTML_DEPRECATED, HTML_INVALID
    +
    +

    htmlAutoCloseTag ()

    int	htmlAutoCloseTag		(htmlDocPtr doc, 
    const xmlChar * name,
    htmlNodePtr elem)
    +

    The HTML DTD allows a tag to implicitly close other tags. The list is kept in htmlStartClose array. This function checks if the element or one of it's children would autoclose the given tag.

    +
    doc:the HTML document
    name:The tag name
    elem:the HTML element
    Returns:1 if autoclose, 0 otherwise
    +
    +

    htmlCreateMemoryParserCtxt ()

    htmlParserCtxtPtr	htmlCreateMemoryParserCtxt	(const char * buffer, 
    int size)
    +

    Create a parser context for an HTML in-memory document.

    +
    buffer:a pointer to a char array
    size:the size of the array
    Returns:the new parser context or NULL
    +
    +

    htmlCreatePushParserCtxt ()

    htmlParserCtxtPtr	htmlCreatePushParserCtxt	(htmlSAXHandlerPtr sax, 
    void * user_data,
    const char * chunk,
    int size,
    const char * filename,
    xmlCharEncoding enc)
    +

    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.

    +
    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
    Returns:the new parser context or NULL
    +
    +

    htmlCtxtReadDoc ()

    htmlDocPtr	htmlCtxtReadDoc		(htmlParserCtxtPtr ctxt, 
    const xmlChar * cur,
    const char * URL,
    const char * encoding,
    int options)
    +

    parse an XML in-memory document and build a tree. This reuses the existing @ctxt parser context

    +
    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)
    Returns:the resulting document tree
    +
    +

    htmlCtxtReadFd ()

    htmlDocPtr	htmlCtxtReadFd		(htmlParserCtxtPtr ctxt, 
    int fd,
    const char * URL,
    const char * encoding,
    int options)
    +

    parse an XML from a file descriptor and build a tree. This reuses the existing @ctxt parser context

    +
    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)
    Returns:the resulting document tree
    +
    +

    htmlCtxtReadFile ()

    htmlDocPtr	htmlCtxtReadFile	(htmlParserCtxtPtr ctxt, 
    const char * filename,
    const char * encoding,
    int options)
    +

    parse an XML file from the filesystem or the network. This reuses the existing @ctxt parser context

    +
    ctxt:an HTML parser context
    filename:a file or URL
    encoding:the document encoding, or NULL
    options:a combination of htmlParserOption(s)
    Returns:the resulting document tree
    +
    +

    htmlCtxtReadIO ()

    htmlDocPtr	htmlCtxtReadIO		(htmlParserCtxtPtr ctxt, 
    xmlInputReadCallback ioread,
    xmlInputCloseCallback ioclose,
    void * ioctx,
    const char * URL,
    const char * encoding,
    int options)
    +

    parse an HTML document from I/O functions and source and build a tree. This reuses the existing @ctxt parser context

    +
    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)
    Returns:the resulting document tree
    +
    +

    htmlCtxtReadMemory ()

    htmlDocPtr	htmlCtxtReadMemory	(htmlParserCtxtPtr ctxt, 
    const char * buffer,
    int size,
    const char * URL,
    const char * encoding,
    int options)
    +

    parse an XML in-memory document and build a tree. This reuses the existing @ctxt parser context

    +
    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)
    Returns:the resulting document tree
    +
    +

    htmlCtxtReset ()

    void	htmlCtxtReset			(htmlParserCtxtPtr ctxt)
    +

    Reset a parser context

    +
    ctxt:an HTML parser context
    +
    +

    htmlCtxtUseOptions ()

    int	htmlCtxtUseOptions		(htmlParserCtxtPtr ctxt, 
    int options)
    +

    Applies the options to the parser context

    +
    ctxt:an HTML parser context
    options:a combination of htmlParserOption(s)
    Returns:0 in case of success, the set of unknown or unimplemented options in case of error.
    +
    +

    htmlElementAllowedHere ()

    int	htmlElementAllowedHere		(const htmlElemDesc * parent, 
    const xmlChar * elt)
    +

    Checks whether an HTML element may be a direct child of a parent element. Note - doesn't check for deprecated elements

    +
    parent:HTML parent element
    elt:HTML element
    Returns:1 if allowed; 0 otherwise.
    +
    +

    htmlElementStatusHere ()

    htmlStatus	htmlElementStatusHere	(const htmlElemDesc * parent, 
    const htmlElemDesc * elt)
    +

    Checks whether an HTML element may be a direct child of a parent element. and if so whether it is valid or deprecated.

    +
    parent:HTML parent element
    elt:HTML element
    Returns:one of HTML_VALID, HTML_DEPRECATED, HTML_INVALID
    +
    + +
    +

    htmlEntityLookup ()

    const htmlEntityDesc *	htmlEntityLookup	(const xmlChar * name)
    +

    Lookup the given entity in EntitiesTable TODO: the linear scan is really ugly, an hash table is really needed.

    +
    name:the entity name
    Returns:the associated htmlEntityDescPtr if found, NULL otherwise.
    +
    +

    htmlEntityValueLookup ()

    const htmlEntityDesc *	htmlEntityValueLookup	(unsigned int value)
    +

    Lookup the given entity in EntitiesTable TODO: the linear scan is really ugly, an hash table is really needed.

    +
    value:the entity's unicode value
    Returns:the associated htmlEntityDescPtr if found, NULL otherwise.
    +
    +

    htmlFreeParserCtxt ()

    void	htmlFreeParserCtxt		(htmlParserCtxtPtr ctxt)
    +

    Free all the memory used by a parser context. However the parsed document in ctxt->myDoc is not freed.

    +
    ctxt:an HTML parser context
    +
    + +
    +

    htmlIsAutoClosed ()

    int	htmlIsAutoClosed		(htmlDocPtr doc, 
    htmlNodePtr elem)
    +

    The HTML DTD allows a tag to implicitly close other tags. The list is kept in htmlStartClose array. This function checks if a tag is autoclosed by one of it's child

    +
    doc:the HTML document
    elem:the HTML element
    Returns:1 if autoclosed, 0 otherwise
    +
    +

    htmlIsScriptAttribute ()

    int	htmlIsScriptAttribute		(const xmlChar * name)
    +

    Check if an attribute is of content type Script

    +
    name:an attribute name
    Returns:1 is the attribute is a script 0 otherwise
    +
    +

    htmlNewParserCtxt ()

    htmlParserCtxtPtr	htmlNewParserCtxt	(void)
    +

    Allocate and initialize a new parser context.

    +
    Returns:the htmlParserCtxtPtr or NULL in case of allocation error
    +
    +

    htmlNodeStatus ()

    htmlStatus	htmlNodeStatus		(const htmlNodePtr node, 
    int legacy)
    +

    Checks whether the tree node is valid. Experimental (the author only uses the HTML enhancements in a SAX parser)

    +
    node:an htmlNodePtr in a tree
    legacy:whether to allow deprecated elements (YES is faster here for Element nodes)
    Returns: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)
    +
    +

    htmlParseCharRef ()

    int	htmlParseCharRef		(htmlParserCtxtPtr ctxt)
    +

    parse Reference declarations [66] CharRef ::= '&#' [0-9]+ ';' | '&#x' [0-9a-fA-F]+ ';'

    +
    ctxt:an HTML parser context
    Returns:the value parsed (as an int)
    +
    +

    htmlParseChunk ()

    int	htmlParseChunk			(htmlParserCtxtPtr ctxt, 
    const char * chunk,
    int size,
    int terminate)
    +

    Parse a Chunk of memory

    +
    ctxt:an HTML parser context
    chunk:an char array
    size:the size in byte of the chunk
    terminate:last chunk indicator
    Returns:zero if no error, the xmlParserErrors otherwise.
    +
    +

    htmlParseDoc ()

    htmlDocPtr	htmlParseDoc		(xmlChar * cur, 
    const char * encoding)
    +

    parse an HTML in-memory document and build a tree.

    +
    cur:a pointer to an array of xmlChar
    encoding:a free form C string describing the HTML document encoding, or NULL
    Returns:the resulting document tree
    +
    +

    htmlParseDocument ()

    int	htmlParseDocument		(htmlParserCtxtPtr ctxt)
    +

    parse an HTML document (and build a tree if using the standard SAX interface).

    +
    ctxt:an HTML parser context
    Returns:0, -1 in case of error. the parser context is augmented as a result of the parsing.
    +
    +

    htmlParseElement ()

    void	htmlParseElement		(htmlParserCtxtPtr ctxt)
    +

    parse an HTML element, this is highly recursive this is kept for compatibility with previous code versions [39] element ::= EmptyElemTag | STag content ETag [41] Attribute ::= Name Eq AttValue

    +
    ctxt:an HTML parser context
    +
    +

    htmlParseEntityRef ()

    const htmlEntityDesc *	htmlParseEntityRef	(htmlParserCtxtPtr ctxt, 
    const xmlChar ** str)
    +

    parse an HTML ENTITY references [68] EntityRef ::= '&' Name ';'

    +
    ctxt:an HTML parser context
    str:location to store the entity name
    Returns:the associated htmlEntityDescPtr if found, or NULL otherwise, if non-NULL *str will have to be freed by the caller.
    +
    +

    htmlParseFile ()

    htmlDocPtr	htmlParseFile		(const char * filename, 
    const char * encoding)
    +

    parse an HTML file and build a tree. Automatic support for ZLIB/Compress compressed document is provided by default if found at compile-time.

    +
    filename:the filename
    encoding:a free form C string describing the HTML document encoding, or NULL
    Returns:the resulting document tree
    +
    +

    htmlReadDoc ()

    htmlDocPtr	htmlReadDoc		(const xmlChar * cur, 
    const char * URL,
    const char * encoding,
    int options)
    +

    parse an XML in-memory document and build a tree.

    +
    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)
    Returns:the resulting document tree
    +
    +

    htmlReadFd ()

    htmlDocPtr	htmlReadFd		(int fd, 
    const char * URL,
    const char * encoding,
    int options)
    +

    parse an XML from a file descriptor and build a tree.

    +
    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)
    Returns:the resulting document tree
    +
    +

    htmlReadFile ()

    htmlDocPtr	htmlReadFile		(const char * filename, 
    const char * encoding,
    int options)
    +

    parse an XML file from the filesystem or the network.

    +
    filename:a file or URL
    encoding:the document encoding, or NULL
    options:a combination of htmlParserOption(s)
    Returns:the resulting document tree
    +
    +

    htmlReadIO ()

    htmlDocPtr	htmlReadIO		(xmlInputReadCallback ioread, 
    xmlInputCloseCallback ioclose,
    void * ioctx,
    const char * URL,
    const char * encoding,
    int options)
    +

    parse an HTML document from I/O functions and source and build a tree.

    +
    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)
    Returns:the resulting document tree
    +
    +

    htmlReadMemory ()

    htmlDocPtr	htmlReadMemory		(const char * buffer, 
    int size,
    const char * URL,
    const char * encoding,
    int options)
    +

    parse an XML in-memory document and build a tree.

    +
    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)
    Returns:the resulting document tree
    +
    +

    htmlSAXParseDoc ()

    htmlDocPtr	htmlSAXParseDoc		(xmlChar * cur, 
    const char * encoding,
    htmlSAXHandlerPtr sax,
    void * userData)
    +

    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.

    +
    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.
    Returns:the resulting document tree unless SAX is NULL or the document is not well formed.
    +
    +

    htmlSAXParseFile ()

    htmlDocPtr	htmlSAXParseFile	(const char * filename, 
    const char * encoding,
    htmlSAXHandlerPtr sax,
    void * userData)
    +

    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.

    +
    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.
    Returns:the resulting document tree unless SAX is NULL or the document is not well formed.
    +
    +

    htmlTagLookup ()

    const htmlElemDesc *	htmlTagLookup	(const xmlChar * tag)
    +

    Lookup the HTML tag in the ElementTable

    +
    tag:The tag name in lowercase
    Returns:the related htmlElemDescPtr or NULL if not found.
    +
    +
    +
    + + diff --git a/doc/devhelp/libxml2-HTMLtree.html b/doc/devhelp/libxml2-HTMLtree.html new file mode 100644 index 0000000..6430f8b --- /dev/null +++ b/doc/devhelp/libxml2-HTMLtree.html @@ -0,0 +1,172 @@ + + + + + HTMLtree: specific APIs to process HTML tree, especially serialization + + + + + + + + + + + + + + + + +

    + HTMLtree +

    +

    HTMLtree - specific APIs to process HTML tree, especially serialization

    +

    this module implements a few function needed to process tree in an HTML specific way.

    +

    Author(s): Daniel Veillard

    +
    +

    Synopsis

    +
    #define HTML_ENTITY_REF_NODE;
    +#define HTML_COMMENT_NODE;
    +#define HTML_PRESERVE_NODE;
    +#define HTML_TEXT_NODE;
    +#define HTML_PI_NODE;
    +int	htmlNodeDumpFileFormat		(FILE * out, 
    xmlDocPtr doc,
    xmlNodePtr cur,
    const char * encoding,
    int format); +void htmlDocDumpMemory (xmlDocPtr cur,
    xmlChar ** mem,
    int * size); +int htmlSaveFile (const char * filename,
    xmlDocPtr cur); +int htmlDocDump (FILE * f,
    xmlDocPtr cur); +void htmlDocDumpMemoryFormat (xmlDocPtr cur,
    xmlChar ** mem,
    int * size,
    int format); +int htmlIsBooleanAttr (const xmlChar * name); +int htmlSaveFileFormat (const char * filename,
    xmlDocPtr cur,
    const char * encoding,
    int format); +void htmlNodeDumpFormatOutput (xmlOutputBufferPtr buf,
    xmlDocPtr doc,
    xmlNodePtr cur,
    const char * encoding,
    int format); +int htmlSetMetaEncoding (htmlDocPtr doc,
    const xmlChar * encoding); +int htmlSaveFileEnc (const char * filename,
    xmlDocPtr cur,
    const char * encoding); +void htmlNodeDumpOutput (xmlOutputBufferPtr buf,
    xmlDocPtr doc,
    xmlNodePtr cur,
    const char * encoding); +int htmlNodeDump (xmlBufferPtr buf,
    xmlDocPtr doc,
    xmlNodePtr cur); +htmlDocPtr htmlNewDoc (const xmlChar * URI,
    const xmlChar * ExternalID); +const xmlChar * htmlGetMetaEncoding (htmlDocPtr doc); +void htmlNodeDumpFile (FILE * out,
    xmlDocPtr doc,
    xmlNodePtr cur); +void htmlDocContentDumpFormatOutput (xmlOutputBufferPtr buf,
    xmlDocPtr cur,
    const char * encoding,
    int format); +htmlDocPtr htmlNewDocNoDtD (const xmlChar * URI,
    const xmlChar * ExternalID); +void htmlDocContentDumpOutput (xmlOutputBufferPtr buf,
    xmlDocPtr cur,
    const char * encoding); +
    +
    +
    +

    Description

    +
    +
    +

    Details

    +
    +

    Macro HTML_COMMENT_NODE

    #define HTML_COMMENT_NODE;
    +

    Macro. A comment in a HTML document is really implemented the same way as a comment in an XML document.

    +
    +
    +

    Macro HTML_ENTITY_REF_NODE

    #define 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.

    +
    +
    +

    Macro HTML_PI_NODE

    #define 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.

    +
    +
    +

    Macro HTML_PRESERVE_NODE

    #define 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.

    +
    +
    +

    Macro HTML_TEXT_NODE

    #define 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.

    +
    +
    +

    htmlDocContentDumpFormatOutput ()

    void	htmlDocContentDumpFormatOutput	(xmlOutputBufferPtr buf, 
    xmlDocPtr cur,
    const char * encoding,
    int format)
    +

    Dump an HTML document.

    +
    buf:the HTML buffer output
    cur:the document
    encoding:the encoding string
    format:should formatting spaces been added
    +
    +

    htmlDocContentDumpOutput ()

    void	htmlDocContentDumpOutput	(xmlOutputBufferPtr buf, 
    xmlDocPtr cur,
    const char * encoding)
    +

    Dump an HTML document. Formating return/spaces are added.

    +
    buf:the HTML buffer output
    cur:the document
    encoding:the encoding string
    +
    +

    htmlDocDump ()

    int	htmlDocDump			(FILE * f, 
    xmlDocPtr cur)
    +

    Dump an HTML document to an open FILE.

    +
    f:the FILE*
    cur:the document
    Returns:the number of byte written or -1 in case of failure.
    +
    +

    htmlDocDumpMemory ()

    void	htmlDocDumpMemory		(xmlDocPtr cur, 
    xmlChar ** mem,
    int * size)
    +

    Dump an HTML document in memory and return the xmlChar * and it's size. It's up to the caller to free the memory.

    +
    cur:the document
    mem:OUT: the memory pointer
    size:OUT: the memory length
    +
    +

    htmlDocDumpMemoryFormat ()

    void	htmlDocDumpMemoryFormat		(xmlDocPtr cur, 
    xmlChar ** mem,
    int * size,
    int format)
    +

    Dump an HTML document in memory and return the xmlChar * and it's size. It's up to the caller to free the memory.

    +
    cur:the document
    mem:OUT: the memory pointer
    size:OUT: the memory length
    format:should formatting spaces been added
    +
    +

    htmlGetMetaEncoding ()

    const xmlChar *	htmlGetMetaEncoding	(htmlDocPtr doc)
    +

    Encoding definition lookup in the Meta tags

    +
    doc:the document
    Returns:the current encoding as flagged in the HTML source
    +
    +

    htmlIsBooleanAttr ()

    int	htmlIsBooleanAttr		(const xmlChar * name)
    +

    Determine if a given attribute is a boolean attribute.

    +
    name:the name of the attribute to check
    Returns:false if the attribute is not boolean, true otherwise.
    +
    +

    htmlNewDoc ()

    htmlDocPtr	htmlNewDoc		(const xmlChar * URI, 
    const xmlChar * ExternalID)
    +

    Creates a new HTML document

    +
    URI:URI for the dtd, or NULL
    ExternalID:the external ID of the DTD, or NULL
    Returns:a new document
    +
    +

    htmlNewDocNoDtD ()

    htmlDocPtr	htmlNewDocNoDtD		(const xmlChar * URI, 
    const xmlChar * ExternalID)
    +

    Creates a new HTML document without a DTD node if @URI and @ExternalID are NULL

    +
    URI:URI for the dtd, or NULL
    ExternalID:the external ID of the DTD, or NULL
    Returns:a new document, do not initialize the DTD if not provided
    +
    +

    htmlNodeDump ()

    int	htmlNodeDump			(xmlBufferPtr buf, 
    xmlDocPtr doc,
    xmlNodePtr cur)
    +

    Dump an HTML node, recursive behaviour,children are printed too, and formatting returns are added.

    +
    buf:the HTML buffer output
    doc:the document
    cur:the current node
    Returns:the number of byte written or -1 in case of error
    +
    +

    htmlNodeDumpFile ()

    void	htmlNodeDumpFile		(FILE * out, 
    xmlDocPtr doc,
    xmlNodePtr cur)
    +

    Dump an HTML node, recursive behaviour,children are printed too, and formatting returns are added.

    +
    out:the FILE pointer
    doc:the document
    cur:the current node
    +
    +

    htmlNodeDumpFileFormat ()

    int	htmlNodeDumpFileFormat		(FILE * out, 
    xmlDocPtr doc,
    xmlNodePtr cur,
    const char * encoding,
    int format)
    +

    Dump an HTML node, recursive behaviour,children are printed too. TODO: if encoding == NULL try to save in the doc encoding

    +
    out:the FILE pointer
    doc:the document
    cur:the current node
    encoding:the document encoding
    format:should formatting spaces been added
    Returns:the number of byte written or -1 in case of failure.
    +
    +

    htmlNodeDumpFormatOutput ()

    void	htmlNodeDumpFormatOutput	(xmlOutputBufferPtr buf, 
    xmlDocPtr doc,
    xmlNodePtr cur,
    const char * encoding,
    int format)
    +

    Dump an HTML node, recursive behaviour,children are printed too.

    +
    buf:the HTML buffer output
    doc:the document
    cur:the current node
    encoding:the encoding string
    format:should formatting spaces been added
    +
    +

    htmlNodeDumpOutput ()

    void	htmlNodeDumpOutput		(xmlOutputBufferPtr buf, 
    xmlDocPtr doc,
    xmlNodePtr cur,
    const char * encoding)
    +

    Dump an HTML node, recursive behaviour,children are printed too, and formatting returns/spaces are added.

    +
    buf:the HTML buffer output
    doc:the document
    cur:the current node
    encoding:the encoding string
    +
    +

    htmlSaveFile ()

    int	htmlSaveFile			(const char * filename, 
    xmlDocPtr cur)
    +

    Dump an HTML document to a file. If @filename is "-" the stdout file is used.

    +
    filename:the filename (or URL)
    cur:the document
    Returns:the number of byte written or -1 in case of failure.
    +
    +

    htmlSaveFileEnc ()

    int	htmlSaveFileEnc			(const char * filename, 
    xmlDocPtr cur,
    const char * encoding)
    +

    Dump an HTML document to a file using a given encoding and formatting returns/spaces are added.

    +
    filename:the filename
    cur:the document
    encoding:the document encoding
    Returns:the number of byte written or -1 in case of failure.
    +
    +

    htmlSaveFileFormat ()

    int	htmlSaveFileFormat		(const char * filename, 
    xmlDocPtr cur,
    const char * encoding,
    int format)
    +

    Dump an HTML document to a file using a given encoding.

    +
    filename:the filename
    cur:the document
    encoding:the document encoding
    format:should formatting spaces been added
    Returns:the number of byte written or -1 in case of failure.
    +
    +

    htmlSetMetaEncoding ()

    int	htmlSetMetaEncoding		(htmlDocPtr doc, 
    const xmlChar * encoding)
    +

    Sets the current encoding in the Meta tags NOTE: this will not change the document content encoding, just the META flag associated.

    +
    doc:the document
    encoding:the encoding string
    Returns:0 in case of success and -1 in case of error
    +
    +
    +
    + + diff --git a/doc/devhelp/libxml2-SAX.html b/doc/devhelp/libxml2-SAX.html new file mode 100644 index 0000000..5163b7b --- /dev/null +++ b/doc/devhelp/libxml2-SAX.html @@ -0,0 +1,243 @@ + + + + + SAX: Old SAX version 1 handler, deprecated + + + + + + + + + + + + + + + + +

    + SAX +

    +

    SAX - Old SAX version 1 handler, deprecated

    +

    DEPRECATED set of SAX version 1 interfaces used to build the DOM tree.

    +

    WARNING: this module is deprecated !

    +

    Author(s): Daniel Veillard

    +
    +

    Synopsis

    +
    void	comment			(void * ctx, 
    const xmlChar * value); +int checkNamespace (void * ctx,
    xmlChar * namespace); +int getColumnNumber (void * ctx); +void entityDecl (void * ctx,
    const xmlChar * name,
    int type,
    const xmlChar * publicId,
    const xmlChar * systemId,
    xmlChar * content); +void attribute (void * ctx,
    const xmlChar * fullname,
    const xmlChar * value); +xmlNsPtr getNamespace (void * ctx); +void setDocumentLocator (void * ctx,
    xmlSAXLocatorPtr loc); +void initxmlDefaultSAXHandler (xmlSAXHandlerV1 * hdlr,
    int warning); +void ignorableWhitespace (void * ctx,
    const xmlChar * ch,
    int len); +int hasExternalSubset (void * ctx); +void unparsedEntityDecl (void * ctx,
    const xmlChar * name,
    const xmlChar * publicId,
    const xmlChar * systemId,
    const xmlChar * notationName); +void globalNamespace (void * ctx,
    const xmlChar * href,
    const xmlChar * prefix); +int hasInternalSubset (void * ctx); +void reference (void * ctx,
    const xmlChar * name); +void notationDecl (void * ctx,
    const xmlChar * name,
    const xmlChar * publicId,
    const xmlChar * systemId); +const xmlChar * getSystemId (void * ctx); +void externalSubset (void * ctx,
    const xmlChar * name,
    const xmlChar * ExternalID,
    const xmlChar * SystemID); +xmlParserInputPtr resolveEntity (void * ctx,
    const xmlChar * publicId,
    const xmlChar * systemId); +void startDocument (void * ctx); +void setNamespace (void * ctx,
    const xmlChar * name); +void cdataBlock (void * ctx,
    const xmlChar * value,
    int len); +const xmlChar * getPublicId (void * ctx); +void inithtmlDefaultSAXHandler (xmlSAXHandlerV1 * hdlr); +void processingInstruction (void * ctx,
    const xmlChar * target,
    const xmlChar * data); +void endElement (void * ctx,
    const xmlChar * name); +void namespaceDecl (void * ctx,
    const xmlChar * href,
    const xmlChar * prefix); +void initdocbDefaultSAXHandler (xmlSAXHandlerV1 * hdlr); +xmlEntityPtr getEntity (void * ctx,
    const xmlChar * name); +void characters (void * ctx,
    const xmlChar * ch,
    int len); +void elementDecl (void * ctx,
    const xmlChar * name,
    int type,
    xmlElementContentPtr content); +void startElement (void * ctx,
    const xmlChar * fullname,
    const xmlChar ** atts); +xmlEntityPtr getParameterEntity (void * ctx,
    const xmlChar * name); +void attributeDecl (void * ctx,
    const xmlChar * elem,
    const xmlChar * fullname,
    int type,
    int def,
    const xmlChar * defaultValue,
    xmlEnumerationPtr tree); +int isStandalone (void * ctx); +void internalSubset (void * ctx,
    const xmlChar * name,
    const xmlChar * ExternalID,
    const xmlChar * SystemID); +void endDocument (void * ctx); +int getLineNumber (void * ctx); +
    +
    +
    +

    Description

    +
    +
    +

    Details

    +
    +

    attribute ()

    void	attribute			(void * ctx, 
    const
    xmlChar * fullname,
    const xmlChar * 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()

    +
    ctx:the user data (XML parser context)
    fullname:The attribute name, including namespace prefix
    value:The attribute value
    +
    +

    attributeDecl ()

    void	attributeDecl			(void * ctx, 
    const
    xmlChar * elem,
    const xmlChar * fullname,
    int type,
    int def,
    const xmlChar * defaultValue,
    xmlEnumerationPtr tree)
    +

    An attribute definition has been parsed DEPRECATED: use 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
    +
    +

    cdataBlock ()

    void	cdataBlock			(void * ctx, 
    const
    xmlChar * value,
    int len)
    +

    called when a pcdata block has been parsed DEPRECATED: use xmlSAX2CDataBlock()

    +
    ctx:the user data (XML parser context)
    value:The pcdata content
    len:the block length
    +
    +

    characters ()

    void	characters			(void * ctx, 
    const
    xmlChar * ch,
    int len)
    +

    receiving some chars from the parser. DEPRECATED: use xmlSAX2Characters()

    +
    ctx:the user data (XML parser context)
    ch:a xmlChar string
    len:the number of xmlChar
    +
    +

    checkNamespace ()

    int	checkNamespace			(void * ctx, 
    xmlChar * namespace)
    +

    Check that the current element namespace is the same as the one read upon parsing. DEPRECATED

    +
    ctx:the user data (XML parser context)
    namespace:the namespace to check against
    Returns:1 if true 0 otherwise
    +
    +

    comment ()

    void	comment			(void * ctx, 
    const
    xmlChar * value)
    +

    A comment has been parsed. DEPRECATED: use xmlSAX2Comment()

    +
    ctx:the user data (XML parser context)
    value:the comment content
    +
    +

    elementDecl ()

    void	elementDecl			(void * ctx, 
    const
    xmlChar * name,
    int type,
    xmlElementContentPtr content)
    +

    An element definition has been parsed DEPRECATED: use xmlSAX2ElementDecl()

    +
    ctx:the user data (XML parser context)
    name:the element name
    type:the element type
    content:the element value tree
    +
    + +
    +

    endElement ()

    void	endElement			(void * ctx, 
    const
    xmlChar * name)
    +

    called when the end of an element has been detected. DEPRECATED: use xmlSAX2EndElement()

    +
    ctx:the user data (XML parser context)
    name:The element name
    +
    +

    entityDecl ()

    void	entityDecl			(void * ctx, 
    const
    xmlChar * name,
    int type,
    const xmlChar * publicId,
    const xmlChar * systemId,
    xmlChar * content)
    +

    An entity definition has been parsed DEPRECATED: use 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).
    +
    +

    externalSubset ()

    void	externalSubset			(void * ctx, 
    const
    xmlChar * name,
    const xmlChar * ExternalID,
    const xmlChar * SystemID)
    +

    Callback on external subset declaration. DEPRECATED: use 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)
    +
    + +
    +

    getEntity ()

    xmlEntityPtr	getEntity		(void * ctx, 
    const xmlChar * name)
    +

    Get an entity by name DEPRECATED: use xmlSAX2GetEntity()

    +
    ctx:the user data (XML parser context)
    name:The entity name
    Returns:the xmlEntityPtr if found.
    +
    + +
    +

    getNamespace ()

    xmlNsPtr	getNamespace		(void * ctx)
    +

    Get the current element namespace. DEPRECATED

    +
    ctx:the user data (XML parser context)
    Returns:the xmlNsPtr or NULL if none
    +
    +

    getParameterEntity ()

    xmlEntityPtr	getParameterEntity	(void * ctx, 
    const xmlChar * name)
    +

    Get a parameter entity by name DEPRECATED: use xmlSAX2GetParameterEntity()

    +
    ctx:the user data (XML parser context)
    name:The entity name
    Returns:the xmlEntityPtr if found.
    +
    +

    getPublicId ()

    const xmlChar *	getPublicId		(void * ctx)
    +

    Provides the public ID e.g. "-//SGMLSOURCE//DTD DEMO//EN" DEPRECATED: use xmlSAX2GetPublicId()

    +
    ctx:the user data (XML parser context)
    Returns:a xmlChar *
    +
    +

    getSystemId ()

    const xmlChar *	getSystemId		(void * ctx)
    +

    Provides the system ID, basically URL or filename e.g. http://www.sgmlsource.com/dtds/memo.dtd DEPRECATED: use xmlSAX2GetSystemId()

    +
    ctx:the user data (XML parser context)
    Returns:a xmlChar *
    +
    +

    globalNamespace ()

    void	globalNamespace			(void * ctx, 
    const
    xmlChar * href,
    const xmlChar * prefix)
    +

    An old global namespace has been parsed. DEPRECATED

    +
    ctx:the user data (XML parser context)
    href:the namespace associated URN
    prefix:the namespace prefix
    +
    + +
    +
    +
    +

    ignorableWhitespace ()

    void	ignorableWhitespace		(void * ctx, 
    const
    xmlChar * ch,
    int len)
    +

    receiving some ignorable whitespaces from the parser. UNUSED: by default the DOM building will use characters DEPRECATED: use xmlSAX2IgnorableWhitespace()

    +
    ctx:the user data (XML parser context)
    ch:a xmlChar string
    len:the number of xmlChar
    +
    +

    initdocbDefaultSAXHandler ()

    void	initdocbDefaultSAXHandler	(xmlSAXHandlerV1 * hdlr)
    +

    Initialize the default DocBook SAX version 1 handler DEPRECATED: use xmlSAX2InitDocbDefaultSAXHandler() for the new SAX2 blocks

    +
    hdlr:the SAX handler
    +
    +

    inithtmlDefaultSAXHandler ()

    void	inithtmlDefaultSAXHandler	(xmlSAXHandlerV1 * hdlr)
    +

    Initialize the default HTML SAX version 1 handler DEPRECATED: use xmlSAX2InitHtmlDefaultSAXHandler() for the new SAX2 blocks

    +
    hdlr:the SAX handler
    +
    +

    initxmlDefaultSAXHandler ()

    void	initxmlDefaultSAXHandler	(xmlSAXHandlerV1 * hdlr, 
    int warning)
    +

    Initialize the default XML SAX version 1 handler DEPRECATED: use xmlSAX2InitDefaultSAXHandler() for the new SAX2 blocks

    +
    hdlr:the SAX handler
    warning:flag if non-zero sets the handler warning procedure
    +
    +

    internalSubset ()

    void	internalSubset			(void * ctx, 
    const
    xmlChar * name,
    const xmlChar * ExternalID,
    const xmlChar * SystemID)
    +

    Callback on internal subset declaration. DEPRECATED: use 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)
    +
    + +
    +

    namespaceDecl ()

    void	namespaceDecl			(void * ctx, 
    const
    xmlChar * href,
    const xmlChar * prefix)
    +

    A namespace has been parsed. DEPRECATED

    +
    ctx:the user data (XML parser context)
    href:the namespace associated URN
    prefix:the namespace prefix
    +
    +

    notationDecl ()

    void	notationDecl			(void * ctx, 
    const
    xmlChar * name,
    const xmlChar * publicId,
    const xmlChar * systemId)
    +

    What to do when a notation declaration has been parsed. DEPRECATED: use 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
    +
    +

    processingInstruction ()

    void	processingInstruction		(void * ctx, 
    const
    xmlChar * target,
    const xmlChar * data)
    +

    A processing instruction has been parsed. DEPRECATED: use xmlSAX2ProcessingInstruction()

    +
    ctx:the user data (XML parser context)
    target:the target name
    data:the PI data's
    +
    +

    reference ()

    void	reference			(void * ctx, 
    const
    xmlChar * name)
    +

    called when an entity reference is detected. DEPRECATED: use xmlSAX2Reference()

    +
    ctx:the user data (XML parser context)
    name:The entity name
    +
    +

    resolveEntity ()

    xmlParserInputPtr	resolveEntity	(void * ctx, 
    const xmlChar * publicId,
    const xmlChar * systemId)
    +

    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()

    +
    ctx:the user data (XML parser context)
    publicId:The public ID of the entity
    systemId:The system ID of the entity
    Returns:the xmlParserInputPtr if inlined or NULL for DOM behaviour.
    +
    +

    setDocumentLocator ()

    void	setDocumentLocator		(void * ctx, 
    xmlSAXLocatorPtr loc)
    +

    Receive the document locator at startup, actually xmlDefaultSAXLocator Everything is available on the context, so this is useless in our case. DEPRECATED

    +
    ctx:the user data (XML parser context)
    loc:A SAX Locator
    +
    +

    setNamespace ()

    void	setNamespace			(void * ctx, 
    const
    xmlChar * name)
    +

    Set the current element namespace. DEPRECATED

    +
    ctx:the user data (XML parser context)
    name:the namespace prefix
    +
    + +
    +

    startElement ()

    void	startElement			(void * ctx, 
    const
    xmlChar * fullname,
    const xmlChar ** atts)
    +

    called when an opening tag has been processed. DEPRECATED: use 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
    +
    +

    unparsedEntityDecl ()

    void	unparsedEntityDecl		(void * ctx, 
    const
    xmlChar * name,
    const xmlChar * publicId,
    const xmlChar * systemId,
    const xmlChar * notationName)
    +

    What to do when an unparsed entity declaration is parsed DEPRECATED: use 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
    +
    +
    +
    + + diff --git a/doc/devhelp/libxml2-SAX2.html b/doc/devhelp/libxml2-SAX2.html new file mode 100644 index 0000000..e80199e --- /dev/null +++ b/doc/devhelp/libxml2-SAX2.html @@ -0,0 +1,247 @@ + + + + + SAX2: SAX2 parser interface used to build the DOM tree + + + + + + + + + + + + + + + + +

    + SAX2 +

    +

    SAX2 - SAX2 parser interface used to build the DOM tree

    +

    those are the default SAX2 interfaces used by the library when building DOM tree.

    +

    Author(s): Daniel Veillard

    +
    +

    Synopsis

    +
    void	xmlSAX2EndElementNs		(void * ctx, 
    const xmlChar * localname,
    const xmlChar * prefix,
    const xmlChar * URI); +void xmlSAX2Reference (void * ctx,
    const xmlChar * name); +void xmlSAX2ElementDecl (void * ctx,
    const xmlChar * name,
    int type,
    xmlElementContentPtr content); +void xmlSAX2AttributeDecl (void * ctx,
    const xmlChar * elem,
    const xmlChar * fullname,
    int type,
    int def,
    const xmlChar * defaultValue,
    xmlEnumerationPtr tree); +void xmlSAX2Comment (void * ctx,
    const xmlChar * value); +int xmlSAX2GetColumnNumber (void * ctx); +xmlEntityPtr xmlSAX2GetEntity (void * ctx,
    const xmlChar * name); +void xmlSAX2UnparsedEntityDecl (void * ctx,
    const xmlChar * name,
    const xmlChar * publicId,
    const xmlChar * systemId,
    const xmlChar * notationName); +void xmlSAX2InitDocbDefaultSAXHandler (xmlSAXHandler * hdlr); +int xmlSAXVersion (xmlSAXHandler * hdlr,
    int version); +void xmlSAX2IgnorableWhitespace (void * ctx,
    const xmlChar * ch,
    int len); +void xmlSAX2NotationDecl (void * ctx,
    const xmlChar * name,
    const xmlChar * publicId,
    const xmlChar * systemId); +void xmlSAX2StartDocument (void * ctx); +void xmlSAX2EndElement (void * ctx,
    const xmlChar * name); +xmlParserInputPtr xmlSAX2ResolveEntity (void * ctx,
    const xmlChar * publicId,
    const xmlChar * systemId); +void xmlSAX2ExternalSubset (void * ctx,
    const xmlChar * name,
    const xmlChar * ExternalID,
    const xmlChar * SystemID); +const xmlChar * xmlSAX2GetPublicId (void * ctx); +int xmlSAX2IsStandalone (void * ctx); +void xmlSAX2EndDocument (void * ctx); +void xmlSAX2ProcessingInstruction (void * ctx,
    const xmlChar * target,
    const xmlChar * data); +void xmlSAX2InternalSubset (void * ctx,
    const xmlChar * name,
    const xmlChar * ExternalID,
    const xmlChar * SystemID); +void xmlSAX2Characters (void * ctx,
    const xmlChar * ch,
    int len); +int xmlSAXDefaultVersion (int version); +void xmlSAX2StartElement (void * ctx,
    const xmlChar * fullname,
    const xmlChar ** atts); +void xmlSAX2SetDocumentLocator (void * ctx,
    xmlSAXLocatorPtr loc); +void xmlSAX2CDataBlock (void * ctx,
    const xmlChar * value,
    int len); +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); +int xmlSAX2HasExternalSubset (void * ctx); +void htmlDefaultSAXHandlerInit (void); +int xmlSAX2GetLineNumber (void * ctx); +int xmlSAX2HasInternalSubset (void * ctx); +void xmlSAX2InitHtmlDefaultSAXHandler (xmlSAXHandler * hdlr); +void docbDefaultSAXHandlerInit (void); +void xmlDefaultSAXHandlerInit (void); +void xmlSAX2InitDefaultSAXHandler (xmlSAXHandler * hdlr,
    int warning); +xmlEntityPtr xmlSAX2GetParameterEntity (void * ctx,
    const xmlChar * name); +const xmlChar * xmlSAX2GetSystemId (void * ctx); +void xmlSAX2EntityDecl (void * ctx,
    const xmlChar * name,
    int type,
    const xmlChar * publicId,
    const xmlChar * systemId,
    xmlChar * content); +
    +
    +
    +

    Description

    +
    +
    +

    Details

    +
    + +
    +
    +
    +
    +
    +

    xmlSAX2AttributeDecl ()

    void	xmlSAX2AttributeDecl		(void * ctx, 
    const
    xmlChar * elem,
    const xmlChar * fullname,
    int type,
    int def,
    const xmlChar * defaultValue,
    xmlEnumerationPtr tree)
    +

    An attribute definition has been parsed

    +
    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
    +
    +

    xmlSAX2CDataBlock ()

    void	xmlSAX2CDataBlock		(void * ctx, 
    const
    xmlChar * value,
    int len)
    +

    called when a pcdata block has been parsed

    +
    ctx:the user data (XML parser context)
    value:The pcdata content
    len:the block length
    +
    +

    xmlSAX2Characters ()

    void	xmlSAX2Characters		(void * ctx, 
    const
    xmlChar * ch,
    int len)
    +

    receiving some chars from the parser.

    +
    ctx:the user data (XML parser context)
    ch:a xmlChar string
    len:the number of xmlChar
    +
    +

    xmlSAX2Comment ()

    void	xmlSAX2Comment			(void * ctx, 
    const
    xmlChar * value)
    +

    A xmlSAX2Comment has been parsed.

    +
    ctx:the user data (XML parser context)
    value:the xmlSAX2Comment content
    +
    +

    xmlSAX2ElementDecl ()

    void	xmlSAX2ElementDecl		(void * ctx, 
    const
    xmlChar * name,
    int type,
    xmlElementContentPtr content)
    +

    An element definition has been parsed

    +
    ctx:the user data (XML parser context)
    name:the element name
    type:the element type
    content:the element value tree
    +
    + +
    +

    xmlSAX2EndElement ()

    void	xmlSAX2EndElement		(void * ctx, 
    const
    xmlChar * name)
    +

    called when the end of an element has been detected.

    +
    ctx:the user data (XML parser context)
    name:The element name
    +
    +

    xmlSAX2EndElementNs ()

    void	xmlSAX2EndElementNs		(void * ctx, 
    const
    xmlChar * localname,
    const xmlChar * prefix,
    const xmlChar * URI)
    +

    SAX2 callback when an element end has been detected by the parser. It provides the namespace informations for the element.

    +
    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
    +
    +

    xmlSAX2EntityDecl ()

    void	xmlSAX2EntityDecl		(void * ctx, 
    const
    xmlChar * name,
    int type,
    const xmlChar * publicId,
    const xmlChar * systemId,
    xmlChar * content)
    +

    An entity definition has been parsed

    +
    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).
    +
    +

    xmlSAX2ExternalSubset ()

    void	xmlSAX2ExternalSubset		(void * ctx, 
    const
    xmlChar * name,
    const xmlChar * ExternalID,
    const xmlChar * SystemID)
    +

    Callback on external subset declaration.

    +
    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)
    +
    + +
    +

    xmlSAX2GetEntity ()

    xmlEntityPtr	xmlSAX2GetEntity	(void * ctx, 
    const xmlChar * name)
    +

    Get an entity by name

    +
    ctx:the user data (XML parser context)
    name:The entity name
    Returns:the xmlEntityPtr if found.
    +
    + +
    +

    xmlSAX2GetParameterEntity ()

    xmlEntityPtr	xmlSAX2GetParameterEntity	(void * ctx, 
    const xmlChar * name)
    +

    Get a parameter entity by name

    +
    ctx:the user data (XML parser context)
    name:The entity name
    Returns:the xmlEntityPtr if found.
    +
    +

    xmlSAX2GetPublicId ()

    const xmlChar *	xmlSAX2GetPublicId	(void * ctx)
    +

    Provides the public ID e.g. "-//SGMLSOURCE//DTD DEMO//EN"

    +
    ctx:the user data (XML parser context)
    Returns:a xmlChar *
    +
    +

    xmlSAX2GetSystemId ()

    const xmlChar *	xmlSAX2GetSystemId	(void * ctx)
    +

    Provides the system ID, basically URL or filename e.g. http://www.sgmlsource.com/dtds/memo.dtd

    +
    ctx:the user data (XML parser context)
    Returns:a xmlChar *
    +
    + +
    +
    +
    +

    xmlSAX2IgnorableWhitespace ()

    void	xmlSAX2IgnorableWhitespace	(void * ctx, 
    const
    xmlChar * ch,
    int len)
    +

    receiving some ignorable whitespaces from the parser. UNUSED: by default the DOM building will use xmlSAX2Characters

    +
    ctx:the user data (XML parser context)
    ch:a xmlChar string
    len:the number of xmlChar
    +
    +

    xmlSAX2InitDefaultSAXHandler ()

    void	xmlSAX2InitDefaultSAXHandler	(xmlSAXHandler * hdlr, 
    int warning)
    +

    Initialize the default XML SAX2 handler

    +
    hdlr:the SAX handler
    warning:flag if non-zero sets the handler warning procedure
    +
    +

    xmlSAX2InitDocbDefaultSAXHandler ()

    void	xmlSAX2InitDocbDefaultSAXHandler	(xmlSAXHandler * hdlr)
    +

    Initialize the default DocBook SAX2 handler

    +
    hdlr:the SAX handler
    +
    +

    xmlSAX2InitHtmlDefaultSAXHandler ()

    void	xmlSAX2InitHtmlDefaultSAXHandler	(xmlSAXHandler * hdlr)
    +

    Initialize the default HTML SAX2 handler

    +
    hdlr:the SAX handler
    +
    +

    xmlSAX2InternalSubset ()

    void	xmlSAX2InternalSubset		(void * ctx, 
    const
    xmlChar * name,
    const xmlChar * ExternalID,
    const xmlChar * SystemID)
    +

    Callback on internal subset declaration.

    +
    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)
    +
    + +
    +

    xmlSAX2NotationDecl ()

    void	xmlSAX2NotationDecl		(void * ctx, 
    const
    xmlChar * name,
    const xmlChar * publicId,
    const xmlChar * systemId)
    +

    What to do when a notation declaration has been parsed.

    +
    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
    +
    +

    xmlSAX2ProcessingInstruction ()

    void	xmlSAX2ProcessingInstruction	(void * ctx, 
    const
    xmlChar * target,
    const xmlChar * data)
    +

    A processing instruction has been parsed.

    +
    ctx:the user data (XML parser context)
    target:the target name
    data:the PI data's
    +
    +

    xmlSAX2Reference ()

    void	xmlSAX2Reference		(void * ctx, 
    const
    xmlChar * name)
    +

    called when an entity xmlSAX2Reference is detected.

    +
    ctx:the user data (XML parser context)
    name:The entity name
    +
    +

    xmlSAX2ResolveEntity ()

    xmlParserInputPtr	xmlSAX2ResolveEntity	(void * ctx, 
    const xmlChar * publicId,
    const xmlChar * systemId)
    +

    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

    +
    ctx:the user data (XML parser context)
    publicId:The public ID of the entity
    systemId:The system ID of the entity
    Returns:the xmlParserInputPtr if inlined or NULL for DOM behaviour.
    +
    +

    xmlSAX2SetDocumentLocator ()

    void	xmlSAX2SetDocumentLocator	(void * ctx, 
    xmlSAXLocatorPtr loc)
    +

    Receive the document locator at startup, actually xmlDefaultSAXLocator Everything is available on the context, so this is useless in our case.

    +
    ctx:the user data (XML parser context)
    loc:A SAX Locator
    +
    + +
    +

    xmlSAX2StartElement ()

    void	xmlSAX2StartElement		(void * ctx, 
    const
    xmlChar * fullname,
    const xmlChar ** atts)
    +

    called when an opening tag has been processed.

    +
    ctx:the user data (XML parser context)
    fullname:The element name, including namespace prefix
    atts:An array of name/value attributes pairs, NULL terminated
    +
    +

    xmlSAX2StartElementNs ()

    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)
    +

    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.

    +
    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.
    +
    +

    xmlSAX2UnparsedEntityDecl ()

    void	xmlSAX2UnparsedEntityDecl	(void * ctx, 
    const
    xmlChar * name,
    const xmlChar * publicId,
    const xmlChar * systemId,
    const xmlChar * notationName)
    +

    What to do when an unparsed entity declaration is parsed

    +
    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
    +
    + +
    +

    xmlSAXVersion ()

    int	xmlSAXVersion			(xmlSAXHandler * hdlr, 
    int version)
    +

    Initialize the default XML SAX handler according to the version

    +
    hdlr:the SAX handler
    version:the version, 1 or 2
    Returns:0 in case of success and -1 in case of error.
    +
    +
    +
    + + diff --git a/doc/devhelp/libxml2-c14n.html b/doc/devhelp/libxml2-c14n.html new file mode 100644 index 0000000..914500e --- /dev/null +++ b/doc/devhelp/libxml2-c14n.html @@ -0,0 +1,91 @@ + + + + + c14n: Provide Canonical XML and Exclusive XML Canonicalization + + + + + + + + + + + + + + + + +

    + c14n +

    +

    c14n - Provide Canonical XML and Exclusive XML Canonicalization

    +

    the c14n modules provides a "Canonical XML" implementation

    +

    Author(s): Aleksey Sanin <aleksey@aleksey.com>

    +
    +

    Synopsis

    +
    typedef enum xmlC14NMode;
    +int	xmlC14NExecute			(xmlDocPtr doc, 
    xmlC14NIsVisibleCallback is_visible_callback,
    void * user_data,
    int mode,
    xmlChar ** inclusive_ns_prefixes,
    int with_comments,
    xmlOutputBufferPtr buf); +int xmlC14NDocSaveTo (xmlDocPtr doc,
    xmlNodeSetPtr nodes,
    int mode,
    xmlChar ** inclusive_ns_prefixes,
    int with_comments,
    xmlOutputBufferPtr buf); +typedef int xmlC14NIsVisibleCallback (void * user_data,
    xmlNodePtr node,
    xmlNodePtr parent); +int xmlC14NDocSave (xmlDocPtr doc,
    xmlNodeSetPtr nodes,
    int mode,
    xmlChar ** inclusive_ns_prefixes,
    int with_comments,
    const char * filename,
    int compression); +int xmlC14NDocDumpMemory (xmlDocPtr doc,
    xmlNodeSetPtr nodes,
    int mode,
    xmlChar ** inclusive_ns_prefixes,
    int with_comments,
    xmlChar ** doc_txt_ptr); +
    +
    +
    +

    Description

    +
    +
    +

    Details

    +
    +

    Enum xmlC14NMode

    enum xmlC14NMode {
    +    XML_C14N_1_0 = 0 /* Origianal C14N 1.0 spec */
    +    XML_C14N_EXCLUSIVE_1_0 = 1 /* Exclusive C14N 1.0 spec */
    +    XML_C14N_1_1 = 2 /*  C14N 1.1 spec */
    +};
    +

    +

    +
    +

    Function type xmlC14NIsVisibleCallback

    int	xmlC14NIsVisibleCallback	(void * user_data, 
    xmlNodePtr node,
    xmlNodePtr parent)
    +

    Signature for a C14N callback on visible nodes

    +
    user_data:user data
    node:the curent node
    parent:the parent node
    Returns:1 if the node should be included
    +
    +

    xmlC14NDocDumpMemory ()

    int	xmlC14NDocDumpMemory		(xmlDocPtr doc, 
    xmlNodeSetPtr nodes,
    int mode,
    xmlChar ** inclusive_ns_prefixes,
    int with_comments,
    xmlChar ** doc_txt_ptr)
    +

    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)

    +
    doc:the XML document for canonization
    nodes:the nodes set to be included in the canonized image or NULL if all document nodes should be included
    mode:the c14n mode (see @xmlC14NMode)
    inclusive_ns_prefixes:the list of inclusive namespace prefixes 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
    Returns:the number of bytes written on success or a negative value on fail
    +
    +

    xmlC14NDocSave ()

    int	xmlC14NDocSave			(xmlDocPtr doc, 
    xmlNodeSetPtr nodes,
    int mode,
    xmlChar ** inclusive_ns_prefixes,
    int with_comments,
    const char * filename,
    int compression)
    +

    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)

    +
    doc:the XML document for canonization
    nodes:the nodes set to be included in the canonized image or NULL if all document nodes should be included
    mode:the c14n mode (see @xmlC14NMode)
    inclusive_ns_prefixes:the list of inclusive namespace prefixes 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
    Returns:the number of bytes written success or a negative value on fail
    +
    +

    xmlC14NDocSaveTo ()

    int	xmlC14NDocSaveTo		(xmlDocPtr doc, 
    xmlNodeSetPtr nodes,
    int mode,
    xmlChar ** inclusive_ns_prefixes,
    int with_comments,
    xmlOutputBufferPtr buf)
    +

    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)

    +
    doc:the XML document for canonization
    nodes:the nodes set to be included in the canonized image or NULL if all document nodes should be included
    mode:the c14n mode (see @xmlC14NMode)
    inclusive_ns_prefixes:the list of inclusive namespace prefixes 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
    Returns:non-negative value on success or a negative value on fail
    +
    +

    xmlC14NExecute ()

    int	xmlC14NExecute			(xmlDocPtr doc, 
    xmlC14NIsVisibleCallback is_visible_callback,
    void * user_data,
    int mode,
    xmlChar ** inclusive_ns_prefixes,
    int with_comments,
    xmlOutputBufferPtr buf)
    +

    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)

    +
    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)
    mode:the c14n mode (see @xmlC14NMode)
    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
    Returns:non-negative value on success or a negative value on fail
    +
    +
    +
    + + diff --git a/doc/devhelp/libxml2-catalog.html b/doc/devhelp/libxml2-catalog.html new file mode 100644 index 0000000..11fc4c6 --- /dev/null +++ b/doc/devhelp/libxml2-catalog.html @@ -0,0 +1,278 @@ + + + + + catalog: interfaces to the Catalog handling system + + + + + + + + + + + + + + + + +

    + catalog +

    +

    catalog - interfaces to the Catalog handling system

    +

    the catalog module implements the support for XML Catalogs and SGML catalogs

    +

    Author(s): Daniel Veillard

    +
    +

    Synopsis

    +
    #define XML_CATALOG_PI;
    +#define XML_CATALOGS_NAMESPACE;
    +typedef enum xmlCatalogAllow;
    +typedef enum xmlCatalogPrefer;
    +typedef struct _xmlCatalog xmlCatalog;
    +typedef xmlCatalog * xmlCatalogPtr;
    +void	xmlFreeCatalog			(xmlCatalogPtr catal);
    +void	xmlLoadCatalogs			(const char * pathss);
    +xmlChar *	xmlCatalogLocalResolve	(void * catalogs, 
    const xmlChar * pubID,
    const xmlChar * sysID); +int xmlACatalogAdd (xmlCatalogPtr catal,
    const xmlChar * type,
    const xmlChar * orig,
    const xmlChar * replace); +xmlChar * xmlACatalogResolvePublic (xmlCatalogPtr catal,
    const xmlChar * pubID); +xmlCatalogAllow xmlCatalogGetDefaults (void); +int xmlACatalogRemove (xmlCatalogPtr catal,
    const xmlChar * value); +xmlCatalogPrefer xmlCatalogSetDefaultPrefer (xmlCatalogPrefer prefer); +xmlChar * xmlACatalogResolveURI (xmlCatalogPtr catal,
    const xmlChar * URI); +int xmlCatalogAdd (const xmlChar * type,
    const xmlChar * orig,
    const xmlChar * replace); +xmlChar * xmlCatalogResolvePublic (const xmlChar * pubID); +const xmlChar * xmlCatalogGetSystem (const xmlChar * sysID); +void xmlInitializeCatalog (void); +int xmlLoadCatalog (const char * filename); +int xmlCatalogRemove (const xmlChar * value); +int xmlCatalogIsEmpty (xmlCatalogPtr catal); +void xmlACatalogDump (xmlCatalogPtr catal,
    FILE * out); +void xmlCatalogFreeLocal (void * catalogs); +xmlChar * xmlACatalogResolve (xmlCatalogPtr catal,
    const xmlChar * pubID,
    const xmlChar * sysID); +xmlChar * xmlCatalogResolveSystem (const xmlChar * sysID); +xmlCatalogPtr xmlLoadSGMLSuperCatalog (const char * filename); +int xmlCatalogConvert (void); +const xmlChar * xmlCatalogGetPublic (const xmlChar * pubID); +xmlCatalogPtr xmlLoadACatalog (const char * filename); +xmlChar * xmlACatalogResolveSystem (xmlCatalogPtr catal,
    const xmlChar * sysID); +xmlChar * xmlCatalogLocalResolveURI (void * catalogs,
    const xmlChar * URI); +int xmlConvertSGMLCatalog (xmlCatalogPtr catal); +void * xmlCatalogAddLocal (void * catalogs,
    const xmlChar * URL); +xmlCatalogPtr xmlNewCatalog (int sgml); +xmlDocPtr xmlParseCatalogFile (const char * filename); +int xmlCatalogSetDebug (int level); +xmlChar * xmlCatalogResolve (const xmlChar * pubID,
    const xmlChar * sysID); +void xmlCatalogSetDefaults (xmlCatalogAllow allow); +void xmlCatalogDump (FILE * out); +void xmlCatalogCleanup (void); +xmlChar * xmlCatalogResolveURI (const xmlChar * URI); +
    +
    +
    +

    Description

    +
    +
    +

    Details

    +
    +

    Macro XML_CATALOGS_NAMESPACE

    #define XML_CATALOGS_NAMESPACE;
    +

    The namespace for the XML Catalogs elements.

    +
    +
    +

    Macro XML_CATALOG_PI

    #define XML_CATALOG_PI;
    +

    The specific XML Catalog Processing Instuction name.

    +
    +
    +

    Structure xmlCatalog

    struct _xmlCatalog {
    +The content of this structure is not made public by the API.
    +} xmlCatalog;
    +

    +

    +
    + +
    + +
    +

    Typedef xmlCatalogPtr

    xmlCatalog * xmlCatalogPtr;
    +

    +

    +
    +

    xmlACatalogAdd ()

    int	xmlACatalogAdd			(xmlCatalogPtr catal, 
    const xmlChar * type,
    const xmlChar * orig,
    const xmlChar * replace)
    +

    Add an entry in the catalog, it may overwrite existing but different entries.

    +
    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
    Returns:0 if successful, -1 otherwise
    +
    +

    xmlACatalogDump ()

    void	xmlACatalogDump			(xmlCatalogPtr catal, 
    FILE * out)
    +

    Dump the given catalog to the given file.

    +
    catal:a Catalog
    out:the file.
    +
    +

    xmlACatalogRemove ()

    int	xmlACatalogRemove		(xmlCatalogPtr catal, 
    const xmlChar * value)
    +

    Remove an entry from the catalog

    +
    catal:a Catalog
    value:the value to remove
    Returns:the number of entries removed if successful, -1 otherwise
    +
    +

    xmlACatalogResolve ()

    xmlChar *	xmlACatalogResolve	(xmlCatalogPtr catal, 
    const xmlChar * pubID,
    const xmlChar * sysID)
    +

    Do a complete resolution lookup of an External Identifier

    +
    catal:a Catalog
    pubID:the public ID string
    sysID:the system ID string
    Returns:the URI of the resource or NULL if not found, it must be freed by the caller.
    +
    +

    xmlACatalogResolvePublic ()

    xmlChar *	xmlACatalogResolvePublic	(xmlCatalogPtr catal, 
    const xmlChar * pubID)
    +

    Try to lookup the catalog local reference associated to a public ID in that catalog

    +
    catal:a Catalog
    pubID:the public ID string
    Returns:the local resource if found or NULL otherwise, the value returned must be freed by the caller.
    +
    +

    xmlACatalogResolveSystem ()

    xmlChar *	xmlACatalogResolveSystem	(xmlCatalogPtr catal, 
    const xmlChar * sysID)
    +

    Try to lookup the catalog resource for a system ID

    +
    catal:a Catalog
    sysID:the system ID string
    Returns:the resource if found or NULL otherwise, the value returned must be freed by the caller.
    +
    +

    xmlACatalogResolveURI ()

    xmlChar *	xmlACatalogResolveURI	(xmlCatalogPtr catal, 
    const xmlChar * URI)
    +

    Do a complete resolution lookup of an URI

    +
    catal:a Catalog
    URI:the URI
    Returns:the URI of the resource or NULL if not found, it must be freed by the caller.
    +
    +

    xmlCatalogAdd ()

    int	xmlCatalogAdd			(const xmlChar * type, 
    const xmlChar * orig,
    const xmlChar * replace)
    +

    Add an entry in the catalog, it may overwrite existing but different entries. If called before any other catalog routine, allows to override the default shared catalog put in place by xmlInitializeCatalog();

    +
    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
    Returns:0 if successful, -1 otherwise
    +
    +

    xmlCatalogAddLocal ()

    void *	xmlCatalogAddLocal		(void * catalogs, 
    const
    xmlChar * URL)
    +

    Add the new entry to the catalog list

    +
    catalogs:a document's list of catalogs
    URL:the URL to a new local catalog
    Returns:the updated list
    +
    + +
    +
    +
    +
    +
    +
    +
    +

    xmlCatalogGetDefaults ()

    xmlCatalogAllow	xmlCatalogGetDefaults	(void)
    +

    Used to get the user preference w.r.t. to what catalogs should be accepted

    +
    Returns:the current xmlCatalogAllow value
    +
    +

    xmlCatalogGetPublic ()

    const xmlChar *	xmlCatalogGetPublic	(const xmlChar * pubID)
    +

    Try to lookup the catalog reference associated to a public ID DEPRECATED, use xmlCatalogResolvePublic()

    +
    pubID:the public ID string
    Returns:the resource if found or NULL otherwise.
    +
    +

    xmlCatalogGetSystem ()

    const xmlChar *	xmlCatalogGetSystem	(const xmlChar * sysID)
    +

    Try to lookup the catalog reference associated to a system ID DEPRECATED, use xmlCatalogResolveSystem()

    +
    sysID:the system ID string
    Returns:the resource if found or NULL otherwise.
    +
    +

    xmlCatalogIsEmpty ()

    int	xmlCatalogIsEmpty		(xmlCatalogPtr catal)
    +

    Check is a catalog is empty

    +
    catal:should this create an SGML catalog
    Returns:1 if the catalog is empty, 0 if not, amd -1 in case of error.
    +
    +

    xmlCatalogLocalResolve ()

    xmlChar *	xmlCatalogLocalResolve	(void * catalogs, 
    const xmlChar * pubID,
    const xmlChar * sysID)
    +

    Do a complete resolution lookup of an External Identifier using a document's private catalog list

    +
    catalogs:a document's list of catalogs
    pubID:the public ID string
    sysID:the system ID string
    Returns:the URI of the resource or NULL if not found, it must be freed by the caller.
    +
    +

    xmlCatalogLocalResolveURI ()

    xmlChar *	xmlCatalogLocalResolveURI	(void * catalogs, 
    const xmlChar * URI)
    +

    Do a complete resolution lookup of an URI using a document's private catalog list

    +
    catalogs:a document's list of catalogs
    URI:the URI
    Returns:the URI of the resource or NULL if not found, it must be freed by the caller.
    +
    +

    xmlCatalogRemove ()

    int	xmlCatalogRemove		(const xmlChar * value)
    +

    Remove an entry from the catalog

    +
    value:the value to remove
    Returns:the number of entries removed if successful, -1 otherwise
    +
    +

    xmlCatalogResolve ()

    xmlChar *	xmlCatalogResolve	(const xmlChar * pubID, 
    const xmlChar * sysID)
    +

    Do a complete resolution lookup of an External Identifier

    +
    pubID:the public ID string
    sysID:the system ID string
    Returns:the URI of the resource or NULL if not found, it must be freed by the caller.
    +
    +

    xmlCatalogResolvePublic ()

    xmlChar *	xmlCatalogResolvePublic	(const xmlChar * pubID)
    +

    Try to lookup the catalog reference associated to a public ID

    +
    pubID:the public ID string
    Returns:the resource if found or NULL otherwise, the value returned must be freed by the caller.
    +
    +

    xmlCatalogResolveSystem ()

    xmlChar *	xmlCatalogResolveSystem	(const xmlChar * sysID)
    +

    Try to lookup the catalog resource for a system ID

    +
    sysID:the system ID string
    Returns:the resource if found or NULL otherwise, the value returned must be freed by the caller.
    +
    +

    xmlCatalogResolveURI ()

    xmlChar *	xmlCatalogResolveURI	(const xmlChar * URI)
    +

    Do a complete resolution lookup of an URI

    +
    URI:the URI
    Returns:the URI of the resource or NULL if not found, it must be freed by the caller.
    +
    + +
    +

    xmlCatalogSetDefaultPrefer ()

    xmlCatalogPrefer	xmlCatalogSetDefaultPrefer	(xmlCatalogPrefer prefer)
    +

    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

    +
    prefer:the default preference for delegation
    Returns:the previous value of the default preference for delegation
    +
    +

    xmlCatalogSetDefaults ()

    void	xmlCatalogSetDefaults		(xmlCatalogAllow allow)
    +

    Used to set the user preference w.r.t. to what catalogs should be accepted

    +
    allow:what catalogs should be accepted
    +
    +

    xmlConvertSGMLCatalog ()

    int	xmlConvertSGMLCatalog		(xmlCatalogPtr catal)
    +

    Convert all the SGML catalog entries as XML ones

    +
    catal:the catalog
    Returns:the number of entries converted if successful, -1 otherwise
    +
    +

    xmlFreeCatalog ()

    void	xmlFreeCatalog			(xmlCatalogPtr catal)
    +

    Free the memory allocated to a Catalog

    +
    catal:a Catalog
    +
    + +
    +

    xmlLoadACatalog ()

    xmlCatalogPtr	xmlLoadACatalog		(const char * filename)
    +

    Load the catalog and build the associated data structures. This can be either an XML Catalog or an SGML Catalog It will recurse in SGML CATALOG entries. On the other hand XML Catalogs are not handled recursively.

    +
    filename:a file path
    Returns:the catalog parsed or NULL in case of error
    +
    + +
    +
    +
    +

    xmlLoadSGMLSuperCatalog ()

    xmlCatalogPtr	xmlLoadSGMLSuperCatalog	(const char * filename)
    +

    Load an SGML super catalog. It won't expand CATALOG or DELEGATE references. This is only needed for manipulating SGML Super Catalogs like adding and removing CATALOG or DELEGATE entries.

    +
    filename:a file path
    Returns:the catalog parsed or NULL in case of error
    +
    +

    xmlNewCatalog ()

    xmlCatalogPtr	xmlNewCatalog		(int sgml)
    +

    create a new Catalog.

    +
    sgml:should this create an SGML catalog
    Returns:the xmlCatalogPtr or NULL in case of error
    +
    +

    xmlParseCatalogFile ()

    xmlDocPtr	xmlParseCatalogFile	(const char * filename)
    +

    parse an XML file and build a tree. It's like xmlParseFile() except it bypass all catalog lookups.

    +
    filename:the filename
    Returns:the resulting document tree or NULL in case of error
    +
    +
    +
    + + diff --git a/doc/devhelp/libxml2-chvalid.html b/doc/devhelp/libxml2-chvalid.html new file mode 100644 index 0000000..9c77158 --- /dev/null +++ b/doc/devhelp/libxml2-chvalid.html @@ -0,0 +1,241 @@ + + + + + chvalid: Unicode character range checking + + + + + + + + + + + + + + + + +

    + chvalid +

    +

    chvalid - Unicode character range checking

    +

    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

    +

    Author(s): William Brack <wbrack@mmm.com.hk>

    +
    +

    Synopsis

    +
    #define xmlIsExtender_ch(c);
    +#define xmlIsPubidCharQ(c);
    +#define xmlIsPubidChar_ch(c);
    +#define xmlIsIdeographicQ(c);
    +#define xmlIsExtenderQ(c);
    +#define xmlIsChar_ch(c);
    +#define xmlIsDigitQ(c);
    +#define xmlIsDigit_ch(c);
    +#define xmlIsBaseChar_ch(c);
    +#define xmlIsCombiningQ(c);
    +#define xmlIsBlankQ(c);
    +#define xmlIsCharQ(c);
    +#define xmlIsBaseCharQ(c);
    +#define xmlIsBlank_ch(c);
    +typedef struct _xmlChLRange xmlChLRange;
    +typedef xmlChSRange * xmlChSRangePtr;
    +typedef xmlChLRange * xmlChLRangePtr;
    +typedef xmlChRangeGroup * xmlChRangeGroupPtr;
    +typedef struct _xmlChSRange xmlChSRange;
    +typedef struct _xmlChRangeGroup xmlChRangeGroup;
    +int	xmlIsChar			(unsigned int ch);
    +int	xmlIsDigit			(unsigned int ch);
    +int	xmlIsBlank			(unsigned int ch);
    +int	xmlIsIdeographic		(unsigned int ch);
    +int	xmlCharInRange			(unsigned int val, 
    const xmlChRangeGroup * rptr); +int xmlIsPubidChar (unsigned int ch); +int xmlIsCombining (unsigned int ch); +int xmlIsBaseChar (unsigned int ch); +int xmlIsExtender (unsigned int ch); +
    +
    +
    +

    Description

    +
    +
    +

    Details

    +
    +

    Macro xmlIsBaseCharQ

    #define xmlIsBaseCharQ(c);
    +

    Automatically generated by genChRanges.py

    c:char to validate
    +
    +
    +

    Macro xmlIsBaseChar_ch

    #define xmlIsBaseChar_ch(c);
    +

    Automatically generated by genChRanges.py

    c:char to validate
    +
    +
    +

    Macro xmlIsBlankQ

    #define xmlIsBlankQ(c);
    +

    Automatically generated by genChRanges.py

    c:char to validate
    +
    +
    +

    Macro xmlIsBlank_ch

    #define xmlIsBlank_ch(c);
    +

    Automatically generated by genChRanges.py

    c:char to validate
    +
    +
    +

    Macro xmlIsCharQ

    #define xmlIsCharQ(c);
    +

    Automatically generated by genChRanges.py

    c:char to validate
    +
    +
    +

    Macro xmlIsChar_ch

    #define xmlIsChar_ch(c);
    +

    Automatically generated by genChRanges.py

    c:char to validate
    +
    +
    +

    Macro xmlIsCombiningQ

    #define xmlIsCombiningQ(c);
    +

    Automatically generated by genChRanges.py

    c:char to validate
    +
    +
    +

    Macro xmlIsDigitQ

    #define xmlIsDigitQ(c);
    +

    Automatically generated by genChRanges.py

    c:char to validate
    +
    +
    +

    Macro xmlIsDigit_ch

    #define xmlIsDigit_ch(c);
    +

    Automatically generated by genChRanges.py

    c:char to validate
    +
    +
    +

    Macro xmlIsExtenderQ

    #define xmlIsExtenderQ(c);
    +

    Automatically generated by genChRanges.py

    c:char to validate
    +
    +
    +

    Macro xmlIsExtender_ch

    #define xmlIsExtender_ch(c);
    +

    Automatically generated by genChRanges.py

    c:char to validate
    +
    +
    +

    Macro xmlIsIdeographicQ

    #define xmlIsIdeographicQ(c);
    +

    Automatically generated by genChRanges.py

    c:char to validate
    +
    +
    +

    Macro xmlIsPubidCharQ

    #define xmlIsPubidCharQ(c);
    +

    Automatically generated by genChRanges.py

    c:char to validate
    +
    +
    +

    Macro xmlIsPubidChar_ch

    #define xmlIsPubidChar_ch(c);
    +

    Automatically generated by genChRanges.py

    c:char to validate
    +
    +
    +

    Structure xmlChLRange

    struct _xmlChLRange {
    +    unsigned int	low
    +    unsigned int	high
    +} xmlChLRange;
    +

    +

    +
    +

    Typedef xmlChLRangePtr

    xmlChLRange * xmlChLRangePtr;
    +

    +

    +
    +

    Structure xmlChRangeGroup

    struct _xmlChRangeGroup {
    +    int	nbShortRange
    +    int	nbLongRange
    +    const xmlChSRange *	shortRange	: points to an array of ranges
    +    const xmlChLRange *	longRange
    +} xmlChRangeGroup;
    +

    +

    +
    +

    Typedef xmlChRangeGroupPtr

    xmlChRangeGroup * xmlChRangeGroupPtr;
    +

    +

    +
    +

    Structure xmlChSRange

    struct _xmlChSRange {
    +    unsigned short	low
    +    unsigned short	high
    +} xmlChSRange;
    +

    +

    +
    +

    Typedef xmlChSRangePtr

    xmlChSRange * xmlChSRangePtr;
    +

    +

    +
    +

    Variable xmlIsBaseCharGroup

    const xmlChRangeGroup xmlIsBaseCharGroup;
    +

    +

    +
    +

    Variable xmlIsCharGroup

    const xmlChRangeGroup xmlIsCharGroup;
    +

    +

    +
    +

    Variable xmlIsCombiningGroup

    const xmlChRangeGroup xmlIsCombiningGroup;
    +

    +

    +
    +

    Variable xmlIsDigitGroup

    const xmlChRangeGroup xmlIsDigitGroup;
    +

    +

    +
    +

    Variable xmlIsExtenderGroup

    const xmlChRangeGroup xmlIsExtenderGroup;
    +

    +

    +
    +

    Variable xmlIsIdeographicGroup

    const xmlChRangeGroup xmlIsIdeographicGroup;
    +

    +

    +
    +

    Variable xmlIsPubidChar_tab

    const unsigned charxmlIsPubidChar_tab[256] xmlIsPubidChar_tab;
    +

    +

    +
    +

    xmlCharInRange ()

    int	xmlCharInRange			(unsigned int val, 
    const
    xmlChRangeGroup * rptr)
    +

    Does a binary search of the range table to determine if char is valid

    +
    val:character to be validated
    rptr:pointer to range to be used to validate
    Returns:true if character valid, false otherwise
    +
    +

    xmlIsBaseChar ()

    int	xmlIsBaseChar			(unsigned int ch)
    +

    This function is DEPRECATED. Use xmlIsBaseChar_ch or xmlIsBaseCharQ instead

    +
    ch:character to validate
    Returns:true if argument valid, false otherwise
    +
    +

    xmlIsBlank ()

    int	xmlIsBlank			(unsigned int ch)
    +

    This function is DEPRECATED. Use xmlIsBlank_ch or xmlIsBlankQ instead

    +
    ch:character to validate
    Returns:true if argument valid, false otherwise
    +
    +

    xmlIsChar ()

    int	xmlIsChar			(unsigned int ch)
    +

    This function is DEPRECATED. Use xmlIsChar_ch or xmlIsCharQ instead

    +
    ch:character to validate
    Returns:true if argument valid, false otherwise
    +
    +

    xmlIsCombining ()

    int	xmlIsCombining			(unsigned int ch)
    +

    This function is DEPRECATED. Use xmlIsCombiningQ instead

    +
    ch:character to validate
    Returns:true if argument valid, false otherwise
    +
    +

    xmlIsDigit ()

    int	xmlIsDigit			(unsigned int ch)
    +

    This function is DEPRECATED. Use xmlIsDigit_ch or xmlIsDigitQ instead

    +
    ch:character to validate
    Returns:true if argument valid, false otherwise
    +
    +

    xmlIsExtender ()

    int	xmlIsExtender			(unsigned int ch)
    +

    This function is DEPRECATED. Use xmlIsExtender_ch or xmlIsExtenderQ instead

    +
    ch:character to validate
    Returns:true if argument valid, false otherwise
    +
    +

    xmlIsIdeographic ()

    int	xmlIsIdeographic		(unsigned int ch)
    +

    This function is DEPRECATED. Use xmlIsIdeographicQ instead

    +
    ch:character to validate
    Returns:true if argument valid, false otherwise
    +
    +

    xmlIsPubidChar ()

    int	xmlIsPubidChar			(unsigned int ch)
    +

    This function is DEPRECATED. Use xmlIsPubidChar_ch or xmlIsPubidCharQ instead

    +
    ch:character to validate
    Returns:true if argument valid, false otherwise
    +
    +
    +
    + + diff --git a/doc/devhelp/libxml2-debugXML.html b/doc/devhelp/libxml2-debugXML.html new file mode 100644 index 0000000..00541cd --- /dev/null +++ b/doc/devhelp/libxml2-debugXML.html @@ -0,0 +1,225 @@ + + + + + debugXML: Tree debugging APIs + + + + + + + + + + + + + + + + +

    + debugXML +

    +

    debugXML - Tree debugging APIs

    +

    Interfaces to a set of routines used for debugging the tree produced by the XML parser.

    +

    Author(s): Daniel Veillard

    +
    +

    Synopsis

    +
    typedef struct _xmlShellCtxt xmlShellCtxt;
    +typedef xmlShellCtxt * xmlShellCtxtPtr;
    +void	xmlDebugDumpAttrList		(FILE * output, 
    xmlAttrPtr attr,
    int depth); +void xmlLsOneNode (FILE * output,
    xmlNodePtr node); +typedef char * xmlShellReadlineFunc (char * prompt); +int xmlShellSave (xmlShellCtxtPtr ctxt,
    char * filename,
    xmlNodePtr node,
    xmlNodePtr node2); +const char * xmlBoolToText (int boolval); +int xmlShellWrite (xmlShellCtxtPtr ctxt,
    char * filename,
    xmlNodePtr node,
    xmlNodePtr node2); +int xmlShellDu (xmlShellCtxtPtr ctxt,
    char * arg,
    xmlNodePtr tree,
    xmlNodePtr node2); +int xmlShellValidate (xmlShellCtxtPtr ctxt,
    char * dtd,
    xmlNodePtr node,
    xmlNodePtr node2); +int xmlDebugCheckDocument (FILE * output,
    xmlDocPtr doc); +void xmlShellPrintXPathResult (xmlXPathObjectPtr list); +typedef int xmlShellCmd (xmlShellCtxtPtr ctxt,
    char * arg,
    xmlNodePtr node,
    xmlNodePtr node2); +int xmlShellLoad (xmlShellCtxtPtr ctxt,
    char * filename,
    xmlNodePtr node,
    xmlNodePtr node2); +void xmlDebugDumpString (FILE * output,
    const xmlChar * str); +int xmlShellBase (xmlShellCtxtPtr ctxt,
    char * arg,
    xmlNodePtr node,
    xmlNodePtr node2); +int xmlShellCat (xmlShellCtxtPtr ctxt,
    char * arg,
    xmlNodePtr node,
    xmlNodePtr node2); +void xmlDebugDumpDTD (FILE * output,
    xmlDtdPtr dtd); +void xmlDebugDumpNode (FILE * output,
    xmlNodePtr node,
    int depth); +void xmlDebugDumpEntities (FILE * output,
    xmlDocPtr doc); +void xmlShellPrintNode (xmlNodePtr node); +int xmlShellPwd (xmlShellCtxtPtr ctxt,
    char * buffer,
    xmlNodePtr node,
    xmlNodePtr node2); +void xmlDebugDumpNodeList (FILE * output,
    xmlNodePtr node,
    int depth); +void xmlDebugDumpAttr (FILE * output,
    xmlAttrPtr attr,
    int depth); +void xmlDebugDumpDocument (FILE * output,
    xmlDocPtr doc); +int xmlLsCountNode (xmlNodePtr node); +void xmlShellPrintXPathError (int errorType,
    const char * arg); +int xmlShellDir (xmlShellCtxtPtr ctxt,
    char * arg,
    xmlNodePtr node,
    xmlNodePtr node2); +void xmlDebugDumpOneNode (FILE * output,
    xmlNodePtr node,
    int depth); +int xmlShellList (xmlShellCtxtPtr ctxt,
    char * arg,
    xmlNodePtr node,
    xmlNodePtr node2); +void xmlDebugDumpDocumentHead (FILE * output,
    xmlDocPtr doc); +void xmlShell (xmlDocPtr doc,
    char * filename,
    xmlShellReadlineFunc input,
    FILE * output); +
    +
    +
    +

    Description

    +
    +
    +

    Details

    +
    +

    Structure xmlShellCtxt

    struct _xmlShellCtxt {
    +    char *	filename
    +    xmlDocPtr	doc
    +    xmlNodePtr	node
    +    xmlXPathContextPtr	pctxt
    +    int	loaded
    +    FILE *	output
    +    xmlShellReadlineFunc	input
    +} xmlShellCtxt;
    +

    +

    +
    +

    Typedef xmlShellCtxtPtr

    xmlShellCtxt * xmlShellCtxtPtr;
    +

    +

    +
    +

    Function type xmlShellCmd

    int	xmlShellCmd			(xmlShellCtxtPtr ctxt, 
    char * arg,
    xmlNodePtr node,
    xmlNodePtr node2)
    +

    This is a generic signature for the XML shell functions.

    +
    ctxt:a shell context
    arg:a string argument
    node:a first node
    node2:a second node
    Returns:an int, negative returns indicating errors.
    +
    + +
    +
    +
    +

    xmlDebugCheckDocument ()

    int	xmlDebugCheckDocument		(FILE * output, 
    xmlDocPtr doc)
    +

    Check the document for potential content problems, and output the errors to @output

    +
    output:the FILE * for the output
    doc:the document
    Returns:the number of errors found
    +
    +

    xmlDebugDumpAttr ()

    void	xmlDebugDumpAttr		(FILE * output, 
    xmlAttrPtr attr,
    int depth)
    +

    Dumps debug information for the attribute

    +
    output:the FILE * for the output
    attr:the attribute
    depth:the indentation level.
    +
    +

    xmlDebugDumpAttrList ()

    void	xmlDebugDumpAttrList		(FILE * output, 
    xmlAttrPtr attr,
    int depth)
    +

    Dumps debug information for the attribute list

    +
    output:the FILE * for the output
    attr:the attribute list
    depth:the indentation level.
    +
    +

    xmlDebugDumpDTD ()

    void	xmlDebugDumpDTD			(FILE * output, 
    xmlDtdPtr dtd)
    +

    Dumps debug information for the DTD

    +
    output:the FILE * for the output
    dtd:the DTD
    +
    +

    xmlDebugDumpDocument ()

    void	xmlDebugDumpDocument		(FILE * output, 
    xmlDocPtr doc)
    +

    Dumps debug information for the document, it's recursive

    +
    output:the FILE * for the output
    doc:the document
    +
    +

    xmlDebugDumpDocumentHead ()

    void	xmlDebugDumpDocumentHead	(FILE * output, 
    xmlDocPtr doc)
    +

    Dumps debug information cncerning the document, not recursive

    +
    output:the FILE * for the output
    doc:the document
    +
    +

    xmlDebugDumpEntities ()

    void	xmlDebugDumpEntities		(FILE * output, 
    xmlDocPtr doc)
    +

    Dumps debug information for all the entities in use by the document

    +
    output:the FILE * for the output
    doc:the document
    +
    +

    xmlDebugDumpNode ()

    void	xmlDebugDumpNode		(FILE * output, 
    xmlNodePtr node,
    int depth)
    +

    Dumps debug information for the element node, it is recursive

    +
    output:the FILE * for the output
    node:the node
    depth:the indentation level.
    +
    +

    xmlDebugDumpNodeList ()

    void	xmlDebugDumpNodeList		(FILE * output, 
    xmlNodePtr node,
    int depth)
    +

    Dumps debug information for the list of element node, it is recursive

    +
    output:the FILE * for the output
    node:the node list
    depth:the indentation level.
    +
    +

    xmlDebugDumpOneNode ()

    void	xmlDebugDumpOneNode		(FILE * output, 
    xmlNodePtr node,
    int depth)
    +

    Dumps debug information for the element node, it is not recursive

    +
    output:the FILE * for the output
    node:the node
    depth:the indentation level.
    +
    +

    xmlDebugDumpString ()

    void	xmlDebugDumpString		(FILE * output, 
    const
    xmlChar * str)
    +

    Dumps informations about the string, shorten it if necessary

    +
    output:the FILE * for the output
    str:the string
    +
    +

    xmlLsCountNode ()

    int	xmlLsCountNode			(xmlNodePtr node)
    +

    Count the children of @node.

    +
    node:the node to count
    Returns:the number of children of @node.
    +
    +

    xmlLsOneNode ()

    void	xmlLsOneNode			(FILE * output, 
    xmlNodePtr node)
    +

    Dump to @output the type and name of @node.

    +
    output:the FILE * for the output
    node:the node to dump
    +
    +

    xmlShell ()

    void	xmlShell			(xmlDocPtr doc, 
    char * filename,
    xmlShellReadlineFunc input,
    FILE * output)
    +

    Implements the XML shell This allow to load, validate, view, modify and save a document using a environment similar to a UNIX commandline.

    +
    doc:the initial document
    filename:the output buffer
    input:the line reading function
    output:the output FILE*, defaults to stdout if NULL
    +
    +

    xmlShellBase ()

    int	xmlShellBase			(xmlShellCtxtPtr ctxt, 
    char * arg,
    xmlNodePtr node,
    xmlNodePtr node2)
    +

    Implements the XML shell function "base" dumps the current XML base of the node

    +
    ctxt:the shell context
    arg:unused
    node:a node
    node2:unused
    Returns:0
    +
    +

    xmlShellCat ()

    int	xmlShellCat			(xmlShellCtxtPtr ctxt, 
    char * arg,
    xmlNodePtr node,
    xmlNodePtr node2)
    +

    Implements the XML shell function "cat" dumps the serialization node content (XML or HTML).

    +
    ctxt:the shell context
    arg:unused
    node:a node
    node2:unused
    Returns:0
    +
    +

    xmlShellDir ()

    int	xmlShellDir			(xmlShellCtxtPtr ctxt, 
    char * arg,
    xmlNodePtr node,
    xmlNodePtr node2)
    +

    Implements the XML shell function "dir" dumps informations about the node (namespace, attributes, content).

    +
    ctxt:the shell context
    arg:unused
    node:a node
    node2:unused
    Returns:0
    +
    +

    xmlShellDu ()

    int	xmlShellDu			(xmlShellCtxtPtr ctxt, 
    char * arg,
    xmlNodePtr tree,
    xmlNodePtr node2)
    +

    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.

    +
    ctxt:the shell context
    arg:unused
    tree:a node defining a subtree
    node2:unused
    Returns:0 or -1 in case of error
    +
    +

    xmlShellList ()

    int	xmlShellList			(xmlShellCtxtPtr ctxt, 
    char * arg,
    xmlNodePtr node,
    xmlNodePtr node2)
    +

    Implements the XML shell function "ls" Does an Unix like listing of the given node (like a directory)

    +
    ctxt:the shell context
    arg:unused
    node:a node
    node2:unused
    Returns:0
    +
    +

    xmlShellLoad ()

    int	xmlShellLoad			(xmlShellCtxtPtr ctxt, 
    char * filename,
    xmlNodePtr node,
    xmlNodePtr node2)
    +

    Implements the XML shell function "load" loads a new document specified by the filename

    +
    ctxt:the shell context
    filename:the file name
    node:unused
    node2:unused
    Returns:0 or -1 if loading failed
    +
    +

    xmlShellPrintNode ()

    void	xmlShellPrintNode		(xmlNodePtr node)
    +

    Print node to the output FILE

    +
    node:a non-null node to print to the output FILE
    +
    + +
    +

    xmlShellPrintXPathResult ()

    void	xmlShellPrintXPathResult	(xmlXPathObjectPtr list)
    +

    Prints result to the output FILE

    +
    list:a valid result generated by an xpath evaluation
    +
    +

    xmlShellPwd ()

    int	xmlShellPwd			(xmlShellCtxtPtr ctxt, 
    char * buffer,
    xmlNodePtr node,
    xmlNodePtr node2)
    +

    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.

    +
    ctxt:the shell context
    buffer:the output buffer
    node:a node
    node2:unused
    Returns:0 or -1 in case of error
    +
    +

    xmlShellSave ()

    int	xmlShellSave			(xmlShellCtxtPtr ctxt, 
    char * filename,
    xmlNodePtr node,
    xmlNodePtr node2)
    +

    Implements the XML shell function "save" Write the current document to the filename, or it's original name

    +
    ctxt:the shell context
    filename:the file name (optional)
    node:unused
    node2:unused
    Returns:0 or -1 in case of error
    +
    +

    xmlShellValidate ()

    int	xmlShellValidate		(xmlShellCtxtPtr ctxt, 
    char * dtd,
    xmlNodePtr node,
    xmlNodePtr node2)
    +

    Implements the XML shell function "validate" Validate the document, if a DTD path is provided, then the validation is done against the given DTD.

    +
    ctxt:the shell context
    dtd:the DTD URI (optional)
    node:unused
    node2:unused
    Returns:0 or -1 in case of error
    +
    +

    xmlShellWrite ()

    int	xmlShellWrite			(xmlShellCtxtPtr ctxt, 
    char * filename,
    xmlNodePtr node,
    xmlNodePtr node2)
    +

    Implements the XML shell function "write" Write the current node to the filename, it saves the serialization of the subtree under the @node specified

    +
    ctxt:the shell context
    filename:the file name
    node:a node in the tree
    node2:unused
    Returns:0 or -1 in case of error
    +
    +
    +
    + + diff --git a/doc/devhelp/libxml2-dict.html b/doc/devhelp/libxml2-dict.html new file mode 100644 index 0000000..3776c5b --- /dev/null +++ b/doc/devhelp/libxml2-dict.html @@ -0,0 +1,134 @@ + + + + + dict: string dictionary + + + + + + + + + + + + + + + + +

    + dict +

    +

    dict - string dictionary

    +

    dictionary of reusable strings, just used to avoid allocation and freeing operations.

    +

    Author(s): Daniel Veillard

    +
    +

    Synopsis

    +
    typedef struct _xmlDict xmlDict;
    +typedef xmlDict * xmlDictPtr;
    +size_t	xmlDictGetUsage			(xmlDictPtr dict);
    +int	xmlDictReference		(xmlDictPtr dict);
    +void	xmlDictCleanup			(void);
    +int	xmlDictSize			(xmlDictPtr dict);
    +const xmlChar *	xmlDictExists		(xmlDictPtr dict, 
    const xmlChar * name,
    int len); +size_t xmlDictSetLimit (xmlDictPtr dict,
    size_t limit); +int xmlDictOwns (xmlDictPtr dict,
    const xmlChar * str); +const xmlChar * xmlDictQLookup (xmlDictPtr dict,
    const xmlChar * prefix,
    const xmlChar * name); +int xmlInitializeDict (void); +xmlDictPtr xmlDictCreateSub (xmlDictPtr sub); +void xmlDictFree (xmlDictPtr dict); +const xmlChar * xmlDictLookup (xmlDictPtr dict,
    const xmlChar * name,
    int len); +xmlDictPtr xmlDictCreate (void); +
    +
    +
    +

    Description

    +
    +
    +

    Details

    +
    +

    Structure xmlDict

    struct _xmlDict {
    +The content of this structure is not made public by the API.
    +} xmlDict;
    +

    +

    +
    +

    Typedef xmlDictPtr

    xmlDict * xmlDictPtr;
    +

    +

    +
    + +
    +

    xmlDictCreate ()

    xmlDictPtr	xmlDictCreate		(void)
    +

    Create a new dictionary

    +
    Returns:the newly created dictionary, or NULL if an error occured.
    +
    +

    xmlDictCreateSub ()

    xmlDictPtr	xmlDictCreateSub	(xmlDictPtr sub)
    +

    Create a new dictionary, inheriting strings from the read-only dictionary @sub. On lookup, strings are first searched in the new dictionary, then in @sub, and if not found are created in the new dictionary.

    +
    sub:an existing dictionary
    Returns:the newly created dictionary, or NULL if an error occured.
    +
    +

    xmlDictExists ()

    const xmlChar *	xmlDictExists		(xmlDictPtr dict, 
    const xmlChar * name,
    int len)
    +

    Check if the @name exists in the dictionary @dict.

    +
    dict:the dictionary
    name:the name of the userdata
    len:the length of the name, if -1 it is recomputed
    Returns:the internal copy of the name or NULL if not found.
    +
    +

    xmlDictFree ()

    void	xmlDictFree			(xmlDictPtr dict)
    +

    Free the hash @dict and its contents. The userdata is deallocated with @f if provided.

    +
    dict:the dictionary
    +
    +

    xmlDictGetUsage ()

    size_t	xmlDictGetUsage			(xmlDictPtr dict)
    +

    Get how much memory is used by a dictionary for strings Added in 2.9.0

    +
    dict:the dictionary
    Returns:the amount of strings allocated
    +
    +

    xmlDictLookup ()

    const xmlChar *	xmlDictLookup		(xmlDictPtr dict, 
    const xmlChar * name,
    int len)
    +

    Add the @name to the dictionary @dict if not present.

    +
    dict:the dictionary
    name:the name of the userdata
    len:the length of the name, if -1 it is recomputed
    Returns:the internal copy of the name or NULL in case of internal error
    +
    +

    xmlDictOwns ()

    int	xmlDictOwns			(xmlDictPtr dict, 
    const xmlChar * str)
    +

    check if a string is owned by the disctionary

    +
    dict:the dictionary
    str:the string
    Returns:1 if true, 0 if false and -1 in case of error -1 in case of error
    +
    +

    xmlDictQLookup ()

    const xmlChar *	xmlDictQLookup		(xmlDictPtr dict, 
    const xmlChar * prefix,
    const xmlChar * name)
    +

    Add the QName @prefix:@name to the hash @dict if not present.

    +
    dict:the dictionary
    prefix:the prefix
    name:the name
    Returns:the internal copy of the QName or NULL in case of internal error
    +
    +

    xmlDictReference ()

    int	xmlDictReference		(xmlDictPtr dict)
    +

    Increment the reference counter of a dictionary

    +
    dict:the dictionary
    Returns:0 in case of success and -1 in case of error
    +
    +

    xmlDictSetLimit ()

    size_t	xmlDictSetLimit			(xmlDictPtr dict, 
    size_t limit)
    +

    Set a size limit for the dictionary Added in 2.9.0

    +
    dict:the dictionary
    limit:the limit in bytes
    Returns:the previous limit of the dictionary or 0
    +
    +

    xmlDictSize ()

    int	xmlDictSize			(xmlDictPtr dict)
    +

    Query the number of elements installed in the hash @dict.

    +
    dict:the dictionary
    Returns:the number of elements in the dictionary or -1 in case of error
    +
    + +
    +
    +
    + + diff --git a/doc/devhelp/libxml2-encoding.html b/doc/devhelp/libxml2-encoding.html new file mode 100644 index 0000000..261e50a --- /dev/null +++ b/doc/devhelp/libxml2-encoding.html @@ -0,0 +1,218 @@ + + + + + encoding: interface for the encoding conversion functions + + + + + + + + + + + + + + + + +

    + encoding +

    +

    encoding - interface for the encoding conversion functions

    +

    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.

    +

    Author(s): Daniel Veillard

    +
    +

    Synopsis

    +
    typedef struct _uconv_t uconv_t;
    +typedef enum xmlCharEncoding;
    +typedef struct _xmlCharEncodingHandler xmlCharEncodingHandler;
    +typedef xmlCharEncodingHandler * xmlCharEncodingHandlerPtr;
    +int	xmlDelEncodingAlias		(const char * alias);
    +const char *	xmlGetEncodingAlias	(const char * alias);
    +void	xmlRegisterCharEncodingHandler	(xmlCharEncodingHandlerPtr handler);
    +int	UTF8Toisolat1			(unsigned char * out, 
    int * outlen,
    const unsigned char * in,
    int * inlen); +void xmlInitCharEncodingHandlers (void); +int xmlAddEncodingAlias (const char * name,
    const char * alias); +void xmlCleanupEncodingAliases (void); +int xmlCharEncOutFunc (xmlCharEncodingHandler * handler,
    xmlBufferPtr out,
    xmlBufferPtr in); +xmlCharEncoding xmlParseCharEncoding (const char * name); +typedef int xmlCharEncodingInputFunc (unsigned char * out,
    int * outlen,
    const unsigned char * in,
    int * inlen); +void xmlCleanupCharEncodingHandlers (void); +xmlCharEncodingHandlerPtr xmlNewCharEncodingHandler (const char * name,
    xmlCharEncodingInputFunc input,
    xmlCharEncodingOutputFunc output); +typedef int xmlCharEncodingOutputFunc (unsigned char * out,
    int * outlen,
    const unsigned char * in,
    int * inlen); +int isolat1ToUTF8 (unsigned char * out,
    int * outlen,
    const unsigned char * in,
    int * inlen); +xmlCharEncodingHandlerPtr xmlFindCharEncodingHandler (const char * name); +int xmlCharEncInFunc (xmlCharEncodingHandler * handler,
    xmlBufferPtr out,
    xmlBufferPtr in); +xmlCharEncodingHandlerPtr xmlGetCharEncodingHandler (xmlCharEncoding enc); +int xmlCharEncFirstLine (xmlCharEncodingHandler * handler,
    xmlBufferPtr out,
    xmlBufferPtr in); +xmlCharEncoding xmlDetectCharEncoding (const unsigned char * in,
    int len); +int xmlCharEncCloseFunc (xmlCharEncodingHandler * handler); +const char * xmlGetCharEncodingName (xmlCharEncoding enc); +
    +
    +
    +

    Description

    +
    +
    +

    Details

    +
    +

    Structure uconv_t

    struct _uconv_t {
    +    UConverter *	uconv	: for conversion between an encoding and UTF-16
    +    UConverter *	utf8	: for conversion between UTF-8 and UTF-16
    +} uconv_t;
    +

    +

    +
    +

    Enum xmlCharEncoding

    enum xmlCharEncoding {
    +    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 */
    +};
    +

    +

    +
    +

    Structure xmlCharEncodingHandler

    struct _xmlCharEncodingHandler {
    +    char *	name
    +    xmlCharEncodingInputFunc	input
    +    xmlCharEncodingOutputFunc	output
    +    iconv_t	iconv_in
    +    iconv_t	iconv_out
    +    uconv_t *	uconv_in
    +    uconv_t *	uconv_out
    +} xmlCharEncodingHandler;
    +

    +

    +
    +

    Typedef xmlCharEncodingHandlerPtr

    xmlCharEncodingHandler * xmlCharEncodingHandlerPtr;
    +

    +

    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +

    xmlCharEncCloseFunc ()

    int	xmlCharEncCloseFunc		(xmlCharEncodingHandler * handler)
    +

    Generic front-end for encoding handler close function

    +
    handler:char enconding transformation data structure
    Returns:0 if success, or -1 in case of error
    +
    +

    xmlCharEncFirstLine ()

    int	xmlCharEncFirstLine		(xmlCharEncodingHandler * handler, 
    xmlBufferPtr out,
    xmlBufferPtr in)
    +

    Front-end for the encoding handler input function, but handle only the very first line, i.e. limit itself to 45 chars.

    +
    handler:char enconding transformation data structure
    out:an xmlBuffer for the output.
    in:an xmlBuffer for the input
    Returns:the number of byte written if success, or -1 general error -2 if the transcoding fails (for *in is not valid utf8 string or the result of transformation can't fit into the encoding we want), or
    +
    +

    xmlCharEncInFunc ()

    int	xmlCharEncInFunc		(xmlCharEncodingHandler * handler, 
    xmlBufferPtr out,
    xmlBufferPtr in)
    +

    Generic front-end for the encoding handler input function

    +
    handler:char encoding transformation data structure
    out:an xmlBuffer for the output.
    in:an xmlBuffer for the input
    Returns:the number of byte written if success, or -1 general error -2 if the transcoding fails (for *in is not valid utf8 string or the result of transformation can't fit into the encoding we want), or
    +
    +

    xmlCharEncOutFunc ()

    int	xmlCharEncOutFunc		(xmlCharEncodingHandler * handler, 
    xmlBufferPtr out,
    xmlBufferPtr in)
    +

    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.

    +
    handler:char enconding transformation data structure
    out:an xmlBuffer for the output.
    in:an xmlBuffer for the input
    Returns:the number of byte written if success, or -1 general error -2 if the transcoding fails (for *in is not valid utf8 string or the result of transformation can't fit into the encoding we want), or
    +
    + +
    +
    +
    +
    +
    +

    xmlDetectCharEncoding ()

    xmlCharEncoding	xmlDetectCharEncoding	(const unsigned char * in, 
    int len)
    +

    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.

    +
    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
    Returns:one of the XML_CHAR_ENCODING_... values.
    +
    +

    xmlFindCharEncodingHandler ()

    xmlCharEncodingHandlerPtr	xmlFindCharEncodingHandler	(const char * name)
    +

    Search in the registered set the handler able to read/write that encoding.

    +
    name:a string describing the char encoding.
    Returns:the handler or NULL if not found
    +
    +

    xmlGetCharEncodingHandler ()

    xmlCharEncodingHandlerPtr	xmlGetCharEncodingHandler	(xmlCharEncoding enc)
    +

    Search in the registered set the handler able to read/write that encoding.

    +
    enc:an xmlCharEncoding value.
    Returns:the handler or NULL if not found
    +
    +

    xmlGetCharEncodingName ()

    const char *	xmlGetCharEncodingName	(xmlCharEncoding enc)
    +

    The "canonical" name for XML encoding. C.f. http://www.w3.org/TR/REC-xml#charencoding Section 4.3.3 Character Encoding in Entities

    +
    enc:the encoding
    Returns:the canonical name for the given encoding
    +
    + +
    +
    +
    +

    xmlNewCharEncodingHandler ()

    xmlCharEncodingHandlerPtr	xmlNewCharEncodingHandler	(const char * name, 
    xmlCharEncodingInputFunc input,
    xmlCharEncodingOutputFunc output)
    +

    Create and registers an xmlCharEncodingHandler.

    +
    name:the encoding name, in UTF-8 format (ASCII actually)
    input:the xmlCharEncodingInputFunc to read that encoding
    output:the xmlCharEncodingOutputFunc to write that encoding
    Returns:the xmlCharEncodingHandlerPtr created (or NULL in case of error).
    +
    +

    xmlParseCharEncoding ()

    xmlCharEncoding	xmlParseCharEncoding	(const char * name)
    +

    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.

    +
    name:the encoding name as parsed, in UTF-8 format (ASCII actually)
    Returns:one of the XML_CHAR_ENCODING_... values or XML_CHAR_ENCODING_NONE if not recognized.
    +
    +

    xmlRegisterCharEncodingHandler ()

    void	xmlRegisterCharEncodingHandler	(xmlCharEncodingHandlerPtr handler)
    +

    Register the char encoding handler, surprising, isn't it ?

    +
    handler:the xmlCharEncodingHandlerPtr handler block
    +
    +
    +
    + + diff --git a/doc/devhelp/libxml2-entities.html b/doc/devhelp/libxml2-entities.html new file mode 100644 index 0000000..3262c40 --- /dev/null +++ b/doc/devhelp/libxml2-entities.html @@ -0,0 +1,166 @@ + + + + + entities: interface for the XML entities handling + + + + + + + + + + + + + + + + +

    + entities +

    +

    entities - interface for the XML entities handling

    +

    this module provides some of the entity API needed for the parser and applications.

    +

    Author(s): Daniel Veillard

    +
    +

    Synopsis

    +
    typedef enum xmlEntityType;
    +typedef struct _xmlHashTable xmlEntitiesTable;
    +typedef xmlEntitiesTable * xmlEntitiesTablePtr;
    +xmlEntityPtr	xmlAddDocEntity		(xmlDocPtr doc, 
    const xmlChar * name,
    int type,
    const xmlChar * ExternalID,
    const xmlChar * SystemID,
    const xmlChar * content); +xmlEntityPtr xmlNewEntity (xmlDocPtr doc,
    const xmlChar * name,
    int type,
    const xmlChar * ExternalID,
    const xmlChar * SystemID,
    const xmlChar * content); +xmlChar * xmlEncodeEntitiesReentrant (xmlDocPtr doc,
    const xmlChar * input); +xmlEntityPtr xmlGetDocEntity (const xmlDoc * doc,
    const xmlChar * name); +xmlEntityPtr xmlGetDtdEntity (xmlDocPtr doc,
    const xmlChar * name); +xmlEntityPtr xmlAddDtdEntity (xmlDocPtr doc,
    const xmlChar * name,
    int type,
    const xmlChar * ExternalID,
    const xmlChar * SystemID,
    const xmlChar * content); +xmlEntitiesTablePtr xmlCopyEntitiesTable (xmlEntitiesTablePtr table); +void xmlFreeEntitiesTable (xmlEntitiesTablePtr table); +xmlEntityPtr xmlGetParameterEntity (xmlDocPtr doc,
    const xmlChar * name); +void xmlDumpEntitiesTable (xmlBufferPtr buf,
    xmlEntitiesTablePtr table); +void xmlDumpEntityDecl (xmlBufferPtr buf,
    xmlEntityPtr ent); +void xmlCleanupPredefinedEntities (void); +xmlEntitiesTablePtr xmlCreateEntitiesTable (void); +const xmlChar * xmlEncodeEntities (xmlDocPtr doc,
    const xmlChar * input); +xmlChar * xmlEncodeSpecialChars (const xmlDoc * doc,
    const xmlChar * input); +xmlEntityPtr xmlGetPredefinedEntity (const xmlChar * name); +void xmlInitializePredefinedEntities (void); +
    +
    +
    +

    Description

    +
    +
    +

    Details

    +
    +

    Structure xmlEntitiesTable

    struct _xmlHashTable {
    +The content of this structure is not made public by the API.
    +} xmlEntitiesTable;
    +

    +

    +
    +

    Typedef xmlEntitiesTablePtr

    xmlEntitiesTable * xmlEntitiesTablePtr;
    +

    +

    +
    + +
    +

    xmlAddDocEntity ()

    xmlEntityPtr	xmlAddDocEntity		(xmlDocPtr doc, 
    const xmlChar * name,
    int type,
    const xmlChar * ExternalID,
    const xmlChar * SystemID,
    const xmlChar * content)
    +

    Register a new entity for this document.

    +
    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
    Returns:a pointer to the entity or NULL in case of error
    +
    +

    xmlAddDtdEntity ()

    xmlEntityPtr	xmlAddDtdEntity		(xmlDocPtr doc, 
    const xmlChar * name,
    int type,
    const xmlChar * ExternalID,
    const xmlChar * SystemID,
    const xmlChar * content)
    +

    Register a new entity for this document DTD external subset.

    +
    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
    Returns:a pointer to the entity or NULL in case of error
    +
    + +
    +

    xmlCopyEntitiesTable ()

    xmlEntitiesTablePtr	xmlCopyEntitiesTable	(xmlEntitiesTablePtr table)
    +

    Build a copy of an entity table.

    +
    table:An entity table
    Returns:the new xmlEntitiesTablePtr or NULL in case of error.
    +
    +

    xmlCreateEntitiesTable ()

    xmlEntitiesTablePtr	xmlCreateEntitiesTable	(void)
    +

    create and initialize an empty entities hash table. This really doesn't make sense and should be deprecated

    +
    Returns:the xmlEntitiesTablePtr just created or NULL in case of error.
    +
    +

    xmlDumpEntitiesTable ()

    void	xmlDumpEntitiesTable		(xmlBufferPtr buf, 
    xmlEntitiesTablePtr table)
    +

    This will dump the content of the entity table as an XML DTD definition

    +
    buf:An XML buffer.
    table:An entity table
    +
    +

    xmlDumpEntityDecl ()

    void	xmlDumpEntityDecl		(xmlBufferPtr buf, 
    xmlEntityPtr ent)
    +

    This will dump the content of the entity table as an XML DTD definition

    +
    buf:An XML buffer.
    ent:An entity table
    +
    +

    xmlEncodeEntities ()

    const xmlChar *	xmlEncodeEntities	(xmlDocPtr doc, 
    const xmlChar * input)
    +

    TODO: remove xmlEncodeEntities, once we are not afraid of breaking binary compatibility People must migrate their code to xmlEncodeEntitiesReentrant ! This routine will issue a warning when encountered.

    +
    doc:the document containing the string
    input:A string to convert to XML.
    Returns:NULL
    +
    +

    xmlEncodeEntitiesReentrant ()

    xmlChar *	xmlEncodeEntitiesReentrant	(xmlDocPtr doc, 
    const xmlChar * input)
    +

    Do a global encoding of a string, replacing the predefined entities and non ASCII values with their entities and CharRef counterparts. Contrary to xmlEncodeEntities, this routine is reentrant, and result must be deallocated.

    +
    doc:the document containing the string
    input:A string to convert to XML.
    Returns:A newly allocated string with the substitution done.
    +
    +

    xmlEncodeSpecialChars ()

    xmlChar *	xmlEncodeSpecialChars	(const xmlDoc * doc, 
    const xmlChar * input)
    +

    Do a global encoding of a string, replacing the predefined entities this routine is reentrant, and result must be deallocated.

    +
    doc:the document containing the string
    input:A string to convert to XML.
    Returns:A newly allocated string with the substitution done.
    +
    +

    xmlFreeEntitiesTable ()

    void	xmlFreeEntitiesTable		(xmlEntitiesTablePtr table)
    +

    Deallocate the memory used by an entities hash table.

    +
    table:An entity table
    +
    +

    xmlGetDocEntity ()

    xmlEntityPtr	xmlGetDocEntity		(const xmlDoc * doc, 
    const xmlChar * name)
    +

    Do an entity lookup in the document entity hash table and

    +
    doc:the document referencing the entity
    name:the entity name
    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.
    +
    +

    xmlGetDtdEntity ()

    xmlEntityPtr	xmlGetDtdEntity		(xmlDocPtr doc, 
    const xmlChar * name)
    +

    Do an entity lookup in the DTD entity hash table and

    +
    doc:the document referencing the entity
    name:the entity name
    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.
    +
    +

    xmlGetParameterEntity ()

    xmlEntityPtr	xmlGetParameterEntity	(xmlDocPtr doc, 
    const xmlChar * name)
    +

    Do an entity lookup in the internal and external subsets and

    +
    doc:the document referencing the entity
    name:the entity name
    Returns:the corresponding parameter entity, if found. Returns A pointer to the entity structure or NULL if not found.
    +
    +

    xmlGetPredefinedEntity ()

    xmlEntityPtr	xmlGetPredefinedEntity	(const xmlChar * name)
    +

    Check whether this name is an predefined entity.

    +
    name:the entity name
    Returns:NULL if not, otherwise the entity
    +
    + +
    +

    xmlNewEntity ()

    xmlEntityPtr	xmlNewEntity		(xmlDocPtr doc, 
    const xmlChar * name,
    int type,
    const xmlChar * ExternalID,
    const xmlChar * SystemID,
    const xmlChar * content)
    +

    Create a new entity, this differs from xmlAddDocEntity() that if the document is NULL or has no internal subset defined, then an unlinked entity structure will be returned, it is then the responsability of the caller to link it to the document later or free it when not needed anymore.

    +
    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
    Returns:a pointer to the entity or NULL in case of error
    +
    +
    +
    + + diff --git a/doc/devhelp/libxml2-globals.html b/doc/devhelp/libxml2-globals.html new file mode 100644 index 0000000..415492b --- /dev/null +++ b/doc/devhelp/libxml2-globals.html @@ -0,0 +1,383 @@ + + + + + globals: interface for all global variables of the library + + + + + + + + + + + + + + + + +

    + globals +

    +

    globals - interface for all global variables of the library

    +

    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

    +

    Author(s): Gary Pennington <Gary.Pennington@uk.sun.com>, Daniel Veillard

    +
    +

    Synopsis

    +
    typedef xmlGlobalState * xmlGlobalStatePtr;
    +typedef struct _xmlGlobalState xmlGlobalState;
    +void	xmlThrDefSetStructuredErrorFunc	(void * ctx, 
    xmlStructuredErrorFunc handler); +void xmlInitializeGlobalState (xmlGlobalStatePtr gs); +xmlBufferAllocationScheme xmlThrDefBufferAllocScheme (xmlBufferAllocationScheme v); +int xmlThrDefPedanticParserDefaultValue (int v); +xmlRegisterNodeFunc xmlRegisterNodeDefault (xmlRegisterNodeFunc func); +typedef xmlParserInputBufferPtr xmlParserInputBufferCreateFilenameFunc (const char * URI,
    xmlCharEncoding enc); +xmlOutputBufferCreateFilenameFunc xmlThrDefOutputBufferCreateFilenameDefault (xmlOutputBufferCreateFilenameFunc func); +xmlDeregisterNodeFunc xmlDeregisterNodeDefault (xmlDeregisterNodeFunc func); +int xmlThrDefDefaultBufferSize (int v); +xmlOutputBufferCreateFilenameFunc xmlOutputBufferCreateFilenameDefault (xmlOutputBufferCreateFilenameFunc func); +int xmlThrDefLoadExtDtdDefaultValue (int v); +xmlRegisterNodeFunc xmlThrDefRegisterNodeDefault (xmlRegisterNodeFunc func); +int xmlThrDefKeepBlanksDefaultValue (int v); +typedef void xmlDeregisterNodeFunc (xmlNodePtr node); +int xmlThrDefParserDebugEntities (int v); +xmlParserInputBufferCreateFilenameFunc xmlThrDefParserInputBufferCreateFilenameDefault (xmlParserInputBufferCreateFilenameFunc func); +void xmlThrDefSetGenericErrorFunc (void * ctx,
    xmlGenericErrorFunc handler); +xmlParserInputBufferCreateFilenameFunc xmlParserInputBufferCreateFilenameDefault (xmlParserInputBufferCreateFilenameFunc func); +int xmlThrDefDoValidityCheckingDefaultValue (int v); +void xmlCleanupGlobals (void); +int xmlThrDefGetWarningsDefaultValue (int v); +xmlDeregisterNodeFunc xmlThrDefDeregisterNodeDefault (xmlDeregisterNodeFunc func); +int xmlThrDefSubstituteEntitiesDefaultValue (int v); +typedef void xmlRegisterNodeFunc (xmlNodePtr node); +int xmlThrDefSaveNoEmptyTags (int v); +int xmlThrDefIndentTreeOutput (int v); +typedef xmlOutputBufferPtr xmlOutputBufferCreateFilenameFunc (const char * URI,
    xmlCharEncodingHandlerPtr encoder,
    int compression); +void xmlInitGlobals (void); +int xmlThrDefLineNumbersDefaultValue (int v); +const char * xmlThrDefTreeIndentString (const char * v); +
    +
    +
    +

    Description

    +
    +
    +

    Details

    +
    +

    Structure xmlGlobalState

    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
    +    xmlParserInputBufferCreateFilenameFunc	xmlParserInputBufferCreateFilenameValue
    +    xmlOutputBufferCreateFilenameFunc	xmlOutputBufferCreateFilenameValue
    +    void *	xmlStructuredErrorContext
    +} xmlGlobalState;
    +

    +

    +
    +

    Typedef xmlGlobalStatePtr

    xmlGlobalState * xmlGlobalStatePtr;
    +

    +

    +
    +

    Function type xmlDeregisterNodeFunc

    void	xmlDeregisterNodeFunc		(xmlNodePtr node)
    +

    Signature for the deregistration callback of a discarded node

    +
    node:the current node
    +
    +

    Function type xmlOutputBufferCreateFilenameFunc

    xmlOutputBufferPtr	xmlOutputBufferCreateFilenameFunc	(const char * URI, 
    xmlCharEncodingHandlerPtr encoder,
    int compression)
    +

    Signature for the function doing the lookup for a suitable output method corresponding to an URI.

    +
    URI:the URI to write to
    encoder:
    compression:
    Returns:the new xmlOutputBufferPtr in case of success or NULL if no method was found.
    +
    +

    Function type xmlParserInputBufferCreateFilenameFunc

    xmlParserInputBufferPtr	xmlParserInputBufferCreateFilenameFunc	(const char * URI, 
    xmlCharEncoding enc)
    +

    Signature for the function doing the lookup for a suitable input method corresponding to an URI.

    +
    URI:the URI to read from
    enc:the requested source encoding
    Returns:the new xmlParserInputBufferPtr in case of success or NULL if no method was found.
    +
    +

    Function type xmlRegisterNodeFunc

    void	xmlRegisterNodeFunc		(xmlNodePtr node)
    +

    Signature for the registration callback of a created node

    +
    node:the current node
    +
    +

    Variable docbDefaultSAXHandler

    xmlSAXHandlerV1 docbDefaultSAXHandler;
    +

    +

    +
    +

    Variable htmlDefaultSAXHandler

    xmlSAXHandlerV1 htmlDefaultSAXHandler;
    +

    +

    +
    +

    Variable oldXMLWDcompatibility

    int oldXMLWDcompatibility;
    +

    +

    +
    +

    Variable xmlBufferAllocScheme

    xmlBufferAllocationScheme xmlBufferAllocScheme;
    +

    +

    +
    +

    Variable xmlDefaultBufferSize

    int xmlDefaultBufferSize;
    +

    +

    +
    +

    Variable xmlDefaultSAXHandler

    xmlSAXHandlerV1 xmlDefaultSAXHandler;
    +

    +

    +
    +

    Variable xmlDefaultSAXLocator

    xmlSAXLocator xmlDefaultSAXLocator;
    +

    +

    +
    +

    Variable xmlDeregisterNodeDefaultValue

    xmlDeregisterNodeFunc xmlDeregisterNodeDefaultValue;
    +

    +

    +
    +

    Variable xmlDoValidityCheckingDefaultValue

    int xmlDoValidityCheckingDefaultValue;
    +

    +

    +
    +

    Variable xmlFree

    xmlFreeFunc xmlFree;
    +

    +

    +
    +

    Variable xmlGenericError

    xmlGenericErrorFunc xmlGenericError;
    +

    +

    +
    +

    Variable xmlGenericErrorContext

    void * xmlGenericErrorContext;
    +

    +

    +
    +

    Variable xmlGetWarningsDefaultValue

    int xmlGetWarningsDefaultValue;
    +

    +

    +
    +

    Variable xmlIndentTreeOutput

    int xmlIndentTreeOutput;
    +

    +

    +
    +

    Variable xmlKeepBlanksDefaultValue

    int xmlKeepBlanksDefaultValue;
    +

    +

    +
    +

    Variable xmlLastError

    xmlError xmlLastError;
    +

    +

    +
    +

    Variable xmlLineNumbersDefaultValue

    int xmlLineNumbersDefaultValue;
    +

    +

    +
    +

    Variable xmlLoadExtDtdDefaultValue

    int xmlLoadExtDtdDefaultValue;
    +

    +

    +
    +

    Variable xmlMalloc

    xmlMallocFunc xmlMalloc;
    +

    +

    +
    +

    Variable xmlMallocAtomic

    xmlMallocFunc xmlMallocAtomic;
    +

    +

    +
    +

    Variable xmlMemStrdup

    xmlStrdupFunc xmlMemStrdup;
    +

    +

    +
    +

    Variable xmlOutputBufferCreateFilenameValue

    xmlOutputBufferCreateFilenameFunc xmlOutputBufferCreateFilenameValue;
    +

    +

    +
    +

    Variable xmlParserDebugEntities

    int xmlParserDebugEntities;
    +

    +

    +
    +

    Variable xmlParserInputBufferCreateFilenameValue

    xmlParserInputBufferCreateFilenameFunc xmlParserInputBufferCreateFilenameValue;
    +

    +

    +
    +

    Variable xmlParserVersion

    const char * xmlParserVersion;
    +

    +

    +
    +

    Variable xmlPedanticParserDefaultValue

    int xmlPedanticParserDefaultValue;
    +

    +

    +
    +

    Variable xmlRealloc

    xmlReallocFunc xmlRealloc;
    +

    +

    +
    +

    Variable xmlRegisterNodeDefaultValue

    xmlRegisterNodeFunc xmlRegisterNodeDefaultValue;
    +

    +

    +
    +

    Variable xmlSaveNoEmptyTags

    int xmlSaveNoEmptyTags;
    +

    +

    +
    +

    Variable xmlStructuredError

    xmlStructuredErrorFunc xmlStructuredError;
    +

    +

    +
    +

    Variable xmlStructuredErrorContext

    void * xmlStructuredErrorContext;
    +

    +

    +
    +

    Variable xmlSubstituteEntitiesDefaultValue

    int xmlSubstituteEntitiesDefaultValue;
    +

    +

    +
    +

    Variable xmlTreeIndentString

    const char * xmlTreeIndentString;
    +

    +

    +
    + +
    +

    xmlDeregisterNodeDefault ()

    xmlDeregisterNodeFunc	xmlDeregisterNodeDefault	(xmlDeregisterNodeFunc func)
    +

    Registers a callback for node destruction

    +
    func:function pointer to the new DeregisterNodeFunc
    Returns:the previous value of the deregistration function
    +
    + +
    +

    xmlInitializeGlobalState ()

    void	xmlInitializeGlobalState	(xmlGlobalStatePtr gs)
    +

    xmlInitializeGlobalState() initialize a global state with all the default values of the library.

    +
    gs:a pointer to a newly allocated global state
    +
    +

    xmlOutputBufferCreateFilenameDefault ()

    xmlOutputBufferCreateFilenameFunc	xmlOutputBufferCreateFilenameDefault	(xmlOutputBufferCreateFilenameFunc func)
    +

    Registers a callback for URI output file handling

    +
    func:function pointer to the new OutputBufferCreateFilenameFunc
    Returns:the old value of the registration function
    +
    +

    xmlParserInputBufferCreateFilenameDefault ()

    xmlParserInputBufferCreateFilenameFunc	xmlParserInputBufferCreateFilenameDefault	(xmlParserInputBufferCreateFilenameFunc func)
    +

    Registers a callback for URI input file handling

    +
    func:function pointer to the new ParserInputBufferCreateFilenameFunc
    Returns:the old value of the registration function
    +
    +

    xmlRegisterNodeDefault ()

    xmlRegisterNodeFunc	xmlRegisterNodeDefault	(xmlRegisterNodeFunc func)
    +

    Registers a callback for node creation

    +
    func:function pointer to the new RegisterNodeFunc
    Returns:the old value of the registration function
    +
    + +
    + +
    +

    xmlThrDefDeregisterNodeDefault ()

    xmlDeregisterNodeFunc	xmlThrDefDeregisterNodeDefault	(xmlDeregisterNodeFunc func)
    +

    +

    func:
    Returns:
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + +
    +

    xmlThrDefRegisterNodeDefault ()

    xmlRegisterNodeFunc	xmlThrDefRegisterNodeDefault	(xmlRegisterNodeFunc func)
    +

    +

    func:
    Returns:
    +
    + +
    +
    +
    + +
    + +
    +
    +
    +
    +
    + + diff --git a/doc/devhelp/libxml2-hash.html b/doc/devhelp/libxml2-hash.html new file mode 100644 index 0000000..c5a9911 --- /dev/null +++ b/doc/devhelp/libxml2-hash.html @@ -0,0 +1,214 @@ + + + + + hash: Chained hash tables + + + + + + + + + + + + + + + + +

    + hash +

    +

    hash - Chained hash tables

    +

    This module implements the hash table support used in various places in the library.

    +

    Author(s): Bjorn Reese <bjorn.reese@systematic.dk>

    +
    +

    Synopsis

    +
    #define XML_CAST_FPTR(fptr);
    +typedef struct _xmlHashTable xmlHashTable;
    +typedef xmlHashTable * xmlHashTablePtr;
    +void	xmlHashScanFull			(xmlHashTablePtr table, 
    xmlHashScannerFull f,
    void * data); +void xmlHashScan (xmlHashTablePtr table,
    xmlHashScanner f,
    void * data); +typedef void xmlHashScannerFull (void * payload,
    void * data,
    const xmlChar * name,
    const xmlChar * name2,
    const xmlChar * name3); +xmlHashTablePtr xmlHashCreateDict (int size,
    xmlDictPtr dict); +int xmlHashAddEntry (xmlHashTablePtr table,
    const xmlChar * name,
    void * userdata); +int xmlHashUpdateEntry (xmlHashTablePtr table,
    const xmlChar * name,
    void * userdata,
    xmlHashDeallocator f); +void * xmlHashQLookup3 (xmlHashTablePtr table,
    const xmlChar * prefix,
    const xmlChar * name,
    const xmlChar * prefix2,
    const xmlChar * name2,
    const xmlChar * prefix3,
    const xmlChar * name3); +void * xmlHashQLookup2 (xmlHashTablePtr table,
    const xmlChar * prefix,
    const xmlChar * name,
    const xmlChar * prefix2,
    const xmlChar * name2); +void xmlHashScan3 (xmlHashTablePtr table,
    const xmlChar * name,
    const xmlChar * name2,
    const xmlChar * name3,
    xmlHashScanner f,
    void * data); +typedef void xmlHashScanner (void * payload,
    void * data,
    xmlChar * name); +typedef void xmlHashDeallocator (void * payload,
    xmlChar * name); +xmlHashTablePtr xmlHashCreate (int size); +void xmlHashFree (xmlHashTablePtr table,
    xmlHashDeallocator f); +void * xmlHashLookup (xmlHashTablePtr table,
    const xmlChar * name); +void * xmlHashQLookup (xmlHashTablePtr table,
    const xmlChar * prefix,
    const xmlChar * name); +int xmlHashUpdateEntry2 (xmlHashTablePtr table,
    const xmlChar * name,
    const xmlChar * name2,
    void * userdata,
    xmlHashDeallocator f); +int xmlHashRemoveEntry2 (xmlHashTablePtr table,
    const xmlChar * name,
    const xmlChar * name2,
    xmlHashDeallocator f); +int xmlHashRemoveEntry3 (xmlHashTablePtr table,
    const xmlChar * name,
    const xmlChar * name2,
    const xmlChar * name3,
    xmlHashDeallocator f); +xmlHashTablePtr xmlHashCopy (xmlHashTablePtr table,
    xmlHashCopier f); +void xmlHashScanFull3 (xmlHashTablePtr table,
    const xmlChar * name,
    const xmlChar * name2,
    const xmlChar * name3,
    xmlHashScannerFull f,
    void * data); +int xmlHashUpdateEntry3 (xmlHashTablePtr table,
    const xmlChar * name,
    const xmlChar * name2,
    const xmlChar * name3,
    void * userdata,
    xmlHashDeallocator f); +void * xmlHashLookup3 (xmlHashTablePtr table,
    const xmlChar * name,
    const xmlChar * name2,
    const xmlChar * name3); +void * xmlHashLookup2 (xmlHashTablePtr table,
    const xmlChar * name,
    const xmlChar * name2); +int xmlHashRemoveEntry (xmlHashTablePtr table,
    const xmlChar * name,
    xmlHashDeallocator f); +typedef void * xmlHashCopier (void * payload,
    xmlChar * name); +int xmlHashAddEntry2 (xmlHashTablePtr table,
    const xmlChar * name,
    const xmlChar * name2,
    void * userdata); +int xmlHashAddEntry3 (xmlHashTablePtr table,
    const xmlChar * name,
    const xmlChar * name2,
    const xmlChar * name3,
    void * userdata); +int xmlHashSize (xmlHashTablePtr table); +
    +
    +
    +

    Description

    +
    +
    +

    Details

    +
    +

    Macro XML_CAST_FPTR

    #define XML_CAST_FPTR(fptr);
    +

    Macro to do a casting from an object pointer to a function pointer without encountering a warning from gcc #define XML_CAST_FPTR(fptr) (*(void **)(&fptr)) This macro violated ISO C aliasing rules (gcc4 on s390 broke) so it is disabled now

    fptr:pointer to a function
    +
    +
    +

    Structure xmlHashTable

    struct _xmlHashTable {
    +The content of this structure is not made public by the API.
    +} xmlHashTable;
    +

    +

    +
    +

    Typedef xmlHashTablePtr

    xmlHashTable * xmlHashTablePtr;
    +

    +

    +
    +

    Function type xmlHashCopier

    void *	xmlHashCopier			(void * payload, 
    xmlChar * name)
    +

    Callback to copy data from a hash.

    +
    payload:the data in the hash
    name:the name associated
    Returns:a copy of the data or NULL in case of error.
    +
    +

    Function type xmlHashDeallocator

    void	xmlHashDeallocator		(void * payload, 
    xmlChar * name)
    +

    Callback to free data from a hash.

    +
    payload:the data in the hash
    name:the name associated
    +
    +

    Function type xmlHashScanner

    void	xmlHashScanner			(void * payload, 
    void * data,
    xmlChar * name)
    +

    Callback when scanning data in a hash with the simple scanner.

    +
    payload:the data in the hash
    data:extra scannner data
    name:the name associated
    +
    +

    Function type xmlHashScannerFull

    void	xmlHashScannerFull		(void * payload, 
    void * data,
    const
    xmlChar * name,
    const xmlChar * name2,
    const xmlChar * name3)
    +

    Callback when scanning data in a hash with the full scanner.

    +
    payload:the data in the hash
    data:extra scannner data
    name:the name associated
    name2:the second name associated
    name3:the third name associated
    +
    +

    xmlHashAddEntry ()

    int	xmlHashAddEntry			(xmlHashTablePtr table, 
    const xmlChar * name,
    void * userdata)
    +

    Add the @userdata to the hash @table. This can later be retrieved by using the @name. Duplicate names generate errors.

    +
    table:the hash table
    name:the name of the userdata
    userdata:a pointer to the userdata
    Returns:0 the addition succeeded and -1 in case of error.
    +
    +

    xmlHashAddEntry2 ()

    int	xmlHashAddEntry2		(xmlHashTablePtr table, 
    const xmlChar * name,
    const xmlChar * name2,
    void * userdata)
    +

    Add the @userdata to the hash @table. This can later be retrieved by using the (@name, @name2) tuple. Duplicate tuples generate errors.

    +
    table:the hash table
    name:the name of the userdata
    name2:a second name of the userdata
    userdata:a pointer to the userdata
    Returns:0 the addition succeeded and -1 in case of error.
    +
    +

    xmlHashAddEntry3 ()

    int	xmlHashAddEntry3		(xmlHashTablePtr table, 
    const xmlChar * name,
    const xmlChar * name2,
    const xmlChar * name3,
    void * userdata)
    +

    Add the @userdata to the hash @table. This can later be retrieved by using the tuple (@name, @name2, @name3). Duplicate entries generate errors.

    +
    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
    Returns:0 the addition succeeded and -1 in case of error.
    +
    +

    xmlHashCopy ()

    xmlHashTablePtr	xmlHashCopy		(xmlHashTablePtr table, 
    xmlHashCopier f)
    +

    Scan the hash @table and applied @f to each value.

    +
    table:the hash table
    f:the copier function for items in the hash
    Returns:the new table or NULL in case of error.
    +
    +

    xmlHashCreate ()

    xmlHashTablePtr	xmlHashCreate		(int size)
    +

    Create a new xmlHashTablePtr.

    +
    size:the size of the hash table
    Returns:the newly created object, or NULL if an error occured.
    +
    +

    xmlHashCreateDict ()

    xmlHashTablePtr	xmlHashCreateDict	(int size, 
    xmlDictPtr dict)
    +

    Create a new xmlHashTablePtr which will use @dict as the internal dictionary

    +
    size:the size of the hash table
    dict:a dictionary to use for the hash
    Returns:the newly created object, or NULL if an error occured.
    +
    +

    xmlHashFree ()

    void	xmlHashFree			(xmlHashTablePtr table, 
    xmlHashDeallocator f)
    +

    Free the hash @table and its contents. The userdata is deallocated with @f if provided.

    +
    table:the hash table
    f:the deallocator function for items in the hash
    +
    +

    xmlHashLookup ()

    void *	xmlHashLookup			(xmlHashTablePtr table, 
    const xmlChar * name)
    +

    Find the userdata specified by the @name.

    +
    table:the hash table
    name:the name of the userdata
    Returns:the pointer to the userdata
    +
    +

    xmlHashLookup2 ()

    void *	xmlHashLookup2			(xmlHashTablePtr table, 
    const xmlChar * name,
    const xmlChar * name2)
    +

    Find the userdata specified by the (@name, @name2) tuple.

    +
    table:the hash table
    name:the name of the userdata
    name2:a second name of the userdata
    Returns:the pointer to the userdata
    +
    +

    xmlHashLookup3 ()

    void *	xmlHashLookup3			(xmlHashTablePtr table, 
    const xmlChar * name,
    const xmlChar * name2,
    const xmlChar * name3)
    +

    Find the userdata specified by the (@name, @name2, @name3) tuple.

    +
    table:the hash table
    name:the name of the userdata
    name2:a second name of the userdata
    name3:a third name of the userdata
    Returns:the a pointer to the userdata
    +
    +

    xmlHashQLookup ()

    void *	xmlHashQLookup			(xmlHashTablePtr table, 
    const xmlChar * prefix,
    const xmlChar * name)
    +

    Find the userdata specified by the QName @prefix:@name/@name.

    +
    table:the hash table
    prefix:the prefix of the userdata
    name:the name of the userdata
    Returns:the pointer to the userdata
    +
    +

    xmlHashQLookup2 ()

    void *	xmlHashQLookup2			(xmlHashTablePtr table, 
    const xmlChar * prefix,
    const xmlChar * name,
    const xmlChar * prefix2,
    const xmlChar * name2)
    +

    Find the userdata specified by the QNames tuple

    +
    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
    Returns:the pointer to the userdata
    +
    +

    xmlHashQLookup3 ()

    void *	xmlHashQLookup3			(xmlHashTablePtr table, 
    const xmlChar * prefix,
    const xmlChar * name,
    const xmlChar * prefix2,
    const xmlChar * name2,
    const xmlChar * prefix3,
    const xmlChar * name3)
    +

    Find the userdata specified by the (@name, @name2, @name3) tuple.

    +
    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
    Returns:the a pointer to the userdata
    +
    +

    xmlHashRemoveEntry ()

    int	xmlHashRemoveEntry		(xmlHashTablePtr table, 
    const xmlChar * name,
    xmlHashDeallocator f)
    +

    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.

    +
    table:the hash table
    name:the name of the userdata
    f:the deallocator function for removed item (if any)
    Returns:0 if the removal succeeded and -1 in case of error or not found.
    +
    +

    xmlHashRemoveEntry2 ()

    int	xmlHashRemoveEntry2		(xmlHashTablePtr table, 
    const xmlChar * name,
    const xmlChar * name2,
    xmlHashDeallocator f)
    +

    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.

    +
    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)
    Returns:0 if the removal succeeded and -1 in case of error or not found.
    +
    +

    xmlHashRemoveEntry3 ()

    int	xmlHashRemoveEntry3		(xmlHashTablePtr table, 
    const xmlChar * name,
    const xmlChar * name2,
    const xmlChar * name3,
    xmlHashDeallocator f)
    +

    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.

    +
    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)
    Returns:0 if the removal succeeded and -1 in case of error or not found.
    +
    +

    xmlHashScan ()

    void	xmlHashScan			(xmlHashTablePtr table, 
    xmlHashScanner f,
    void * data)
    +

    Scan the hash @table and applied @f to each value.

    +
    table:the hash table
    f:the scanner function for items in the hash
    data:extra data passed to f
    +
    +

    xmlHashScan3 ()

    void	xmlHashScan3			(xmlHashTablePtr table, 
    const xmlChar * name,
    const xmlChar * name2,
    const xmlChar * name3,
    xmlHashScanner f,
    void * data)
    +

    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.

    +
    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
    +
    +

    xmlHashScanFull ()

    void	xmlHashScanFull			(xmlHashTablePtr table, 
    xmlHashScannerFull f,
    void * data)
    +

    Scan the hash @table and applied @f to each value.

    +
    table:the hash table
    f:the scanner function for items in the hash
    data:extra data passed to f
    +
    +

    xmlHashScanFull3 ()

    void	xmlHashScanFull3		(xmlHashTablePtr table, 
    const xmlChar * name,
    const xmlChar * name2,
    const xmlChar * name3,
    xmlHashScannerFull f,
    void * data)
    +

    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.

    +
    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
    +
    +

    xmlHashSize ()

    int	xmlHashSize			(xmlHashTablePtr table)
    +

    Query the number of elements installed in the hash @table.

    +
    table:the hash table
    Returns:the number of elements in the hash table or -1 in case of error
    +
    +

    xmlHashUpdateEntry ()

    int	xmlHashUpdateEntry		(xmlHashTablePtr table, 
    const xmlChar * name,
    void * userdata,
    xmlHashDeallocator f)
    +

    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.

    +
    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)
    Returns:0 the addition succeeded and -1 in case of error.
    +
    +

    xmlHashUpdateEntry2 ()

    int	xmlHashUpdateEntry2		(xmlHashTablePtr table, 
    const xmlChar * name,
    const xmlChar * name2,
    void * userdata,
    xmlHashDeallocator f)
    +

    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.

    +
    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)
    Returns:0 the addition succeeded and -1 in case of error.
    +
    +

    xmlHashUpdateEntry3 ()

    int	xmlHashUpdateEntry3		(xmlHashTablePtr table, 
    const xmlChar * name,
    const xmlChar * name2,
    const xmlChar * name3,
    void * userdata,
    xmlHashDeallocator f)
    +

    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.

    +
    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)
    Returns:0 the addition succeeded and -1 in case of error.
    +
    +
    +
    + + diff --git a/doc/devhelp/libxml2-list.html b/doc/devhelp/libxml2-list.html new file mode 100644 index 0000000..8a4fa73 --- /dev/null +++ b/doc/devhelp/libxml2-list.html @@ -0,0 +1,226 @@ + + + + + list: lists interfaces + + + + + + + + + + + + + + + + +

    + list +

    +

    list - lists interfaces

    +

    this module implement the list support used in various place in the library.

    +

    Author(s): Gary Pennington <Gary.Pennington@uk.sun.com>

    +
    +

    Synopsis

    +
    typedef struct _xmlLink xmlLink;
    +typedef xmlLink * xmlLinkPtr;
    +typedef struct _xmlList xmlList;
    +typedef xmlList * xmlListPtr;
    +int	xmlListInsert			(xmlListPtr l, 
    void * data); +int xmlListEmpty (xmlListPtr l); +void xmlListSort (xmlListPtr l); +typedef void xmlListDeallocator (xmlLinkPtr lk); +void xmlListMerge (xmlListPtr l1,
    xmlListPtr l2); +xmlListPtr xmlListCreate (xmlListDeallocator deallocator,
    xmlListDataCompare compare); +xmlListPtr xmlListDup (const xmlListPtr old); +int xmlListRemoveLast (xmlListPtr l,
    void * data); +void xmlListWalk (xmlListPtr l,
    xmlListWalker walker,
    const void * user); +int xmlListRemoveAll (xmlListPtr l,
    void * data); +int xmlListCopy (xmlListPtr cur,
    const xmlListPtr old); +void xmlListPopFront (xmlListPtr l); +void * xmlListSearch (xmlListPtr l,
    void * data); +typedef int xmlListWalker (const void * data,
    const void * user); +int xmlListRemoveFirst (xmlListPtr l,
    void * data); +void xmlListReverseWalk (xmlListPtr l,
    xmlListWalker walker,
    const void * user); +void * xmlLinkGetData (xmlLinkPtr lk); +void xmlListClear (xmlListPtr l); +int xmlListAppend (xmlListPtr l,
    void * data); +void xmlListReverse (xmlListPtr l); +typedef int xmlListDataCompare (const void * data0,
    const void * data1); +int xmlListSize (xmlListPtr l); +int xmlListPushFront (xmlListPtr l,
    void * data); +xmlLinkPtr xmlListEnd (xmlListPtr l); +void xmlListPopBack (xmlListPtr l); +void * xmlListReverseSearch (xmlListPtr l,
    void * data); +int xmlListPushBack (xmlListPtr l,
    void * data); +xmlLinkPtr xmlListFront (xmlListPtr l); +void xmlListDelete (xmlListPtr l); +
    +
    +
    +

    Description

    +
    +
    +

    Details

    +
    +

    Structure xmlLink

    struct _xmlLink {
    +The content of this structure is not made public by the API.
    +} xmlLink;
    +

    +

    +
    +

    Typedef xmlLinkPtr

    xmlLink * xmlLinkPtr;
    +

    +

    +
    +

    Structure xmlList

    struct _xmlList {
    +The content of this structure is not made public by the API.
    +} xmlList;
    +

    +

    +
    +

    Typedef xmlListPtr

    xmlList * xmlListPtr;
    +

    +

    +
    + +
    +

    Function type xmlListDeallocator

    void	xmlListDeallocator		(xmlLinkPtr lk)
    +

    Callback function used to free data from a list.

    +
    lk:the data to deallocate
    +
    + +
    +

    xmlLinkGetData ()

    void *	xmlLinkGetData			(xmlLinkPtr lk)
    +

    See Returns.

    +
    lk:a link
    Returns:a pointer to the data referenced from this link
    +
    +

    xmlListAppend ()

    int	xmlListAppend			(xmlListPtr l, 
    void * data)
    +

    Insert data in the ordered list at the end for this value

    +
    l:a list
    data:the data
    Returns:0 in case of success, 1 in case of failure
    +
    +

    xmlListClear ()

    void	xmlListClear			(xmlListPtr l)
    +

    Remove the all data in the list

    +
    l:a list
    +
    +

    xmlListCopy ()

    int	xmlListCopy			(xmlListPtr cur, 
    const xmlListPtr old)
    +

    Move all the element from the old list in the new list

    +
    cur:the new list
    old:the old list
    Returns:0 in case of success 1 in case of error
    +
    +

    xmlListCreate ()

    xmlListPtr	xmlListCreate		(xmlListDeallocator deallocator, 
    xmlListDataCompare compare)
    +

    Create a new list

    +
    deallocator:an optional deallocator function
    compare:an optional comparison function
    Returns:the new list or NULL in case of error
    +
    +

    xmlListDelete ()

    void	xmlListDelete			(xmlListPtr l)
    +

    Deletes the list and its associated data

    +
    l:a list
    +
    +

    xmlListDup ()

    xmlListPtr	xmlListDup		(const xmlListPtr old)
    +

    Duplicate the list

    +
    old:the list
    Returns:a new copy of the list or NULL in case of error
    +
    +

    xmlListEmpty ()

    int	xmlListEmpty			(xmlListPtr l)
    +

    Is the list empty ?

    +
    l:a list
    Returns:1 if the list is empty, 0 if not empty and -1 in case of error
    +
    +

    xmlListEnd ()

    xmlLinkPtr	xmlListEnd		(xmlListPtr l)
    +

    Get the last element in the list

    +
    l:a list
    Returns:the last element in the list, or NULL
    +
    +

    xmlListFront ()

    xmlLinkPtr	xmlListFront		(xmlListPtr l)
    +

    Get the first element in the list

    +
    l:a list
    Returns:the first element in the list, or NULL
    +
    +

    xmlListInsert ()

    int	xmlListInsert			(xmlListPtr l, 
    void * data)
    +

    Insert data in the ordered list at the beginning for this value

    +
    l:a list
    data:the data
    Returns:0 in case of success, 1 in case of failure
    +
    +

    xmlListMerge ()

    void	xmlListMerge			(xmlListPtr l1, 
    xmlListPtr l2)
    +

    include all the elements of the second list in the first one and clear the second list

    +
    l1:the original list
    l2:the new list
    +
    +

    xmlListPopBack ()

    void	xmlListPopBack			(xmlListPtr l)
    +

    Removes the last element in the list

    +
    l:a list
    +
    +

    xmlListPopFront ()

    void	xmlListPopFront			(xmlListPtr l)
    +

    Removes the first element in the list

    +
    l:a list
    +
    +

    xmlListPushBack ()

    int	xmlListPushBack			(xmlListPtr l, 
    void * data)
    +

    add the new data at the end of the list

    +
    l:a list
    data:new data
    Returns:1 if successful, 0 otherwise
    +
    +

    xmlListPushFront ()

    int	xmlListPushFront		(xmlListPtr l, 
    void * data)
    +

    add the new data at the beginning of the list

    +
    l:a list
    data:new data
    Returns:1 if successful, 0 otherwise
    +
    +

    xmlListRemoveAll ()

    int	xmlListRemoveAll		(xmlListPtr l, 
    void * data)
    +

    Remove the all instance associated to data in the list

    +
    l:a list
    data:list data
    Returns:the number of deallocation, or 0 if not found
    +
    +

    xmlListRemoveFirst ()

    int	xmlListRemoveFirst		(xmlListPtr l, 
    void * data)
    +

    Remove the first instance associated to data in the list

    +
    l:a list
    data:list data
    Returns:1 if a deallocation occured, or 0 if not found
    +
    +

    xmlListRemoveLast ()

    int	xmlListRemoveLast		(xmlListPtr l, 
    void * data)
    +

    Remove the last instance associated to data in the list

    +
    l:a list
    data:list data
    Returns:1 if a deallocation occured, or 0 if not found
    +
    +

    xmlListReverse ()

    void	xmlListReverse			(xmlListPtr l)
    +

    Reverse the order of the elements in the list

    +
    l:a list
    +
    +

    xmlListReverseSearch ()

    void *	xmlListReverseSearch		(xmlListPtr l, 
    void * data)
    +

    Search the list in reverse order for an existing value of @data

    +
    l:a list
    data:a search value
    Returns:the value associated to @data or NULL in case of error
    +
    +

    xmlListReverseWalk ()

    void	xmlListReverseWalk		(xmlListPtr l, 
    xmlListWalker walker,
    const void * user)
    +

    Walk all the element of the list in reverse order and apply the walker function to it

    +
    l:a list
    walker:a processing function
    user:a user parameter passed to the walker function
    +
    +

    xmlListSearch ()

    void *	xmlListSearch			(xmlListPtr l, 
    void * data)
    +

    Search the list for an existing value of @data

    +
    l:a list
    data:a search value
    Returns:the value associated to @data or NULL in case of error
    +
    +

    xmlListSize ()

    int	xmlListSize			(xmlListPtr l)
    +

    Get the number of elements in the list

    +
    l:a list
    Returns:the number of elements in the list or -1 in case of error
    +
    +

    xmlListSort ()

    void	xmlListSort			(xmlListPtr l)
    +

    Sort all the elements in the list

    +
    l:a list
    +
    +

    xmlListWalk ()

    void	xmlListWalk			(xmlListPtr l, 
    xmlListWalker walker,
    const void * user)
    +

    Walk all the element of the first from first to last and apply the walker function to it

    +
    l:a list
    walker:a processing function
    user:a user parameter passed to the walker function
    +
    +
    +
    + + diff --git a/doc/devhelp/libxml2-nanoftp.html b/doc/devhelp/libxml2-nanoftp.html new file mode 100644 index 0000000..07e10f3 --- /dev/null +++ b/doc/devhelp/libxml2-nanoftp.html @@ -0,0 +1,187 @@ + + + + + nanoftp: minimal FTP implementation + + + + + + + + + + + + + + + + +

    + nanoftp +

    +

    nanoftp - minimal FTP implementation

    +

    minimal FTP implementation allowing to fetch resources like external subset.

    +

    Author(s): Daniel Veillard

    +
    +

    Synopsis

    +
    #define INVALID_SOCKET;
    +#define SOCKET;
    +int	xmlNanoFTPQuit			(void * ctx);
    +int	xmlNanoFTPClose			(void * ctx);
    +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); +int xmlNanoFTPCloseConnection (void * ctx); +void xmlNanoFTPProxy (const char * host,
    int port,
    const char * user,
    const char * passwd,
    int type); +int xmlNanoFTPUpdateURL (void * ctx,
    const char * URL); +SOCKET xmlNanoFTPGetConnection (void * ctx); +int xmlNanoFTPDele (void * ctx,
    const char * file); +void * xmlNanoFTPNewCtxt (const char * URL); +int xmlNanoFTPCheckResponse (void * ctx); +void xmlNanoFTPScanProxy (const char * URL); +typedef void ftpDataCallback (void * userData,
    const char * data,
    int len); +int xmlNanoFTPGetResponse (void * ctx); +int xmlNanoFTPCwd (void * ctx,
    const char * directory); +void xmlNanoFTPInit (void); +void * xmlNanoFTPConnectTo (const char * server,
    int port); +int xmlNanoFTPList (void * ctx,
    ftpListCallback callback,
    void * userData,
    const char * filename); +void * xmlNanoFTPOpen (const char * URL); +int xmlNanoFTPConnect (void * ctx); +SOCKET xmlNanoFTPGetSocket (void * ctx,
    const char * filename); +int xmlNanoFTPGet (void * ctx,
    ftpDataCallback callback,
    void * userData,
    const char * filename); +int xmlNanoFTPRead (void * ctx,
    void * dest,
    int len); +void xmlNanoFTPFreeCtxt (void * ctx); +void xmlNanoFTPCleanup (void); +
    +
    +
    +

    Description

    +
    +
    +

    Details

    +
    +

    Macro INVALID_SOCKET

    #define INVALID_SOCKET;
    +

    macro used to provide portability of code to windows sockets the value to be used when the socket is not valid

    +
    +
    +

    Macro SOCKET

    #define SOCKET;
    +

    macro used to provide portability of code to windows sockets

    +
    +
    +

    Function type ftpDataCallback

    void	ftpDataCallback			(void * userData, 
    const char * data,
    int len)
    +

    A callback for the xmlNanoFTPGet command.

    +
    userData:the user provided context
    data:the data received
    len:its size in bytes
    +
    +

    Function type ftpListCallback

    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)
    +

    A callback for the xmlNanoFTPList command. Note that only one of year and day:minute are specified.

    +
    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
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +

    xmlNanoFTPGet ()

    int	xmlNanoFTPGet			(void * ctx, 
    ftpDataCallback callback,
    void * userData,
    const char * filename)
    +

    Fetch the given file from the server. All data are passed back in the callbacks. The last callback has a size of 0 block.

    +
    ctx:an FTP context
    callback:the user callback
    userData:the user callback data
    filename:the file to retrieve
    Returns:-1 incase of error, 0 otherwise
    +
    +

    xmlNanoFTPGetConnection ()

    SOCKET	xmlNanoFTPGetConnection		(void * ctx)
    +

    Try to open a data connection to the server. Currently only passive mode is supported.

    +
    ctx:an FTP context
    Returns:-1 incase of error, 0 otherwise
    +
    + +
    +

    xmlNanoFTPGetSocket ()

    SOCKET	xmlNanoFTPGetSocket		(void * ctx, 
    const char * filename)
    +

    Initiate fetch of the given file from the server.

    +
    ctx:an FTP context
    filename:the file to retrieve (or NULL if path is in context).
    Returns:the socket for the data connection, or <0 in case of error
    +
    + +
    +

    xmlNanoFTPList ()

    int	xmlNanoFTPList			(void * ctx, 
    ftpListCallback callback,
    void * userData,
    const char * filename)
    +

    Do a listing on the server. All files info are passed back in the callbacks.

    +
    ctx:an FTP context
    callback:the user callback
    userData:the user callback data
    filename:optional files to list
    Returns:-1 incase of error, 0 otherwise
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/doc/devhelp/libxml2-nanohttp.html b/doc/devhelp/libxml2-nanohttp.html new file mode 100644 index 0000000..075ae48 --- /dev/null +++ b/doc/devhelp/libxml2-nanohttp.html @@ -0,0 +1,142 @@ + + + + + nanohttp: minimal HTTP implementation + + + + + + + + + + + + + + + + +

    + nanohttp +

    +

    nanohttp - minimal HTTP implementation

    +

    minimal HTTP implementation allowing to fetch resources like external subset.

    +

    Author(s): Daniel Veillard

    +
    +

    Synopsis

    +
    int	xmlNanoHTTPRead			(void * ctx, 
    void * dest,
    int len); +int xmlNanoHTTPSave (void * ctxt,
    const char * filename); +const char * xmlNanoHTTPRedir (void * ctx); +const char * xmlNanoHTTPAuthHeader (void * ctx); +int xmlNanoHTTPFetch (const char * URL,
    const char * filename,
    char ** contentType); +int xmlNanoHTTPContentLength (void * ctx); +const char * xmlNanoHTTPMimeType (void * ctx); +void xmlNanoHTTPClose (void * ctx); +void xmlNanoHTTPCleanup (void); +void * xmlNanoHTTPMethod (const char * URL,
    const char * method,
    const char * input,
    char ** contentType,
    const char * headers,
    int ilen); +void xmlNanoHTTPInit (void); +void * xmlNanoHTTPOpen (const char * URL,
    char ** contentType); +void * xmlNanoHTTPOpenRedir (const char * URL,
    char ** contentType,
    char ** redir); +void * xmlNanoHTTPMethodRedir (const char * URL,
    const char * method,
    const char * input,
    char ** contentType,
    char ** redir,
    const char * headers,
    int ilen); +void xmlNanoHTTPScanProxy (const char * URL); +const char * xmlNanoHTTPEncoding (void * ctx); +int xmlNanoHTTPReturnCode (void * ctx); +
    +
    +
    +

    Description

    +
    +
    +

    Details

    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/doc/devhelp/libxml2-parser.html b/doc/devhelp/libxml2-parser.html new file mode 100644 index 0000000..c740554 --- /dev/null +++ b/doc/devhelp/libxml2-parser.html @@ -0,0 +1,766 @@ + + + + + parser: the core parser module + + + + + + + + + + + + + + + + +

    + parser +

    +

    parser - the core parser module

    +

    Interfaces, constants and types related to the XML parser

    +

    Author(s): Daniel Veillard

    +
    +

    Synopsis

    +
    #define XML_COMPLETE_ATTRS;
    +#define XML_SKIP_IDS;
    +#define XML_SAX2_MAGIC;
    +#define XML_DETECT_IDS;
    +#define XML_DEFAULT_VERSION;
    +typedef xmlParserNodeInfoSeq * xmlParserNodeInfoSeqPtr;
    +typedef struct _xmlSAXHandlerV1 xmlSAXHandlerV1;
    +typedef enum xmlParserInputState;
    +typedef xmlParserNodeInfo * xmlParserNodeInfoPtr;
    +typedef struct _xmlParserNodeInfoSeq xmlParserNodeInfoSeq;
    +typedef enum xmlFeature;
    +typedef enum xmlParserMode;
    +typedef enum xmlParserOption;
    +typedef xmlSAXHandlerV1 * xmlSAXHandlerV1Ptr;
    +typedef struct _xmlParserNodeInfo xmlParserNodeInfo;
    +void	xmlSetupParserForBuffer		(xmlParserCtxtPtr ctxt, 
    const xmlChar * buffer,
    const char * filename); +xmlDocPtr xmlCtxtReadFile (xmlParserCtxtPtr ctxt,
    const char * filename,
    const char * encoding,
    int options); +int xmlParseCtxtExternalEntity (xmlParserCtxtPtr ctx,
    const xmlChar * URL,
    const xmlChar * ID,
    xmlNodePtr * lst); +typedef void attributeDeclSAXFunc (void * ctx,
    const xmlChar * elem,
    const xmlChar * fullname,
    int type,
    int def,
    const xmlChar * defaultValue,
    xmlEnumerationPtr tree); +typedef xmlEntityPtr getEntitySAXFunc (void * ctx,
    const xmlChar * name); +typedef void startElementSAXFunc (void * ctx,
    const xmlChar * name,
    const xmlChar ** atts); +typedef void charactersSAXFunc (void * ctx,
    const xmlChar * ch,
    int len); +void xmlClearNodeInfoSeq (xmlParserNodeInfoSeqPtr seq); +int xmlParseChunk (xmlParserCtxtPtr ctxt,
    const char * chunk,
    int size,
    int terminate); +xmlDocPtr xmlParseEntity (const char * filename); +xmlDocPtr xmlRecoverFile (const char * filename); +xmlDocPtr xmlCtxtReadDoc (xmlParserCtxtPtr ctxt,
    const xmlChar * cur,
    const char * URL,
    const char * encoding,
    int options); +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); +xmlParserCtxtPtr xmlCreateIOParserCtxt (xmlSAXHandlerPtr sax,
    void * user_data,
    xmlInputReadCallback ioread,
    xmlInputCloseCallback ioclose,
    void * ioctx,
    xmlCharEncoding enc); +xmlParserErrors xmlParseInNodeContext (xmlNodePtr node,
    const char * data,
    int datalen,
    int options,
    xmlNodePtr * lst); +typedef void referenceSAXFunc (void * ctx,
    const xmlChar * name); +typedef int hasExternalSubsetSAXFunc (void * ctx); +xmlDocPtr xmlSAXParseDoc (xmlSAXHandlerPtr sax,
    const xmlChar * cur,
    int recovery); +xmlDocPtr xmlReadMemory (const char * buffer,
    int size,
    const char * URL,
    const char * encoding,
    int options); +xmlDocPtr xmlParseMemory (const char * buffer,
    int size); +xmlParserInputPtr xmlNewIOInputStream (xmlParserCtxtPtr ctxt,
    xmlParserInputBufferPtr input,
    xmlCharEncoding enc); +typedef void processingInstructionSAXFunc (void * ctx,
    const xmlChar * target,
    const xmlChar * data); +int xmlParseBalancedChunkMemoryRecover (xmlDocPtr doc,
    xmlSAXHandlerPtr sax,
    void * user_data,
    int depth,
    const xmlChar * string,
    xmlNodePtr * lst,
    int recover); +void xmlInitParser (void); +xmlParserCtxtPtr xmlCreateDocParserCtxt (const xmlChar * cur); +typedef void errorSAXFunc (void * ctx,
    const char * msg,
    ... ...); +xmlDocPtr xmlSAXParseMemory (xmlSAXHandlerPtr sax,
    const char * buffer,
    int size,
    int recovery); +xmlDocPtr xmlRecoverMemory (const char * buffer,
    int size); +typedef xmlParserInputPtr xmlExternalEntityLoader (const char * URL,
    const char * ID,
    xmlParserCtxtPtr context); +typedef int hasInternalSubsetSAXFunc (void * ctx); +typedef void cdataBlockSAXFunc (void * ctx,
    const xmlChar * value,
    int len); +xmlDocPtr xmlSAXParseFile (xmlSAXHandlerPtr sax,
    const char * filename,
    int recovery); +typedef void xmlParserInputDeallocate (xmlChar * str); +xmlDocPtr xmlCtxtReadIO (xmlParserCtxtPtr ctxt,
    xmlInputReadCallback ioread,
    xmlInputCloseCallback ioclose,
    void * ioctx,
    const char * URL,
    const char * encoding,
    int options); +xmlDocPtr xmlSAXParseMemoryWithData (xmlSAXHandlerPtr sax,
    const char * buffer,
    int size,
    int recovery,
    void * data); +int xmlGetFeature (xmlParserCtxtPtr ctxt,
    const char * name,
    void * result); +xmlDtdPtr xmlIOParseDTD (xmlSAXHandlerPtr sax,
    xmlParserInputBufferPtr input,
    xmlCharEncoding enc); +void xmlFreeParserCtxt (xmlParserCtxtPtr ctxt); +xmlDtdPtr xmlParseDTD (const xmlChar * ExternalID,
    const xmlChar * SystemID); +xmlDocPtr xmlRecoverDoc (const xmlChar * cur); +typedef void commentSAXFunc (void * ctx,
    const xmlChar * value); +int xmlInitParserCtxt (xmlParserCtxtPtr ctxt); +typedef void attributeSAXFunc (void * ctx,
    const xmlChar * name,
    const xmlChar * value); +int xmlParserInputGrow (xmlParserInputPtr in,
    int len); +xmlDocPtr xmlCtxtReadMemory (xmlParserCtxtPtr ctxt,
    const char * buffer,
    int size,
    const char * URL,
    const char * encoding,
    int options); +typedef void externalSubsetSAXFunc (void * ctx,
    const xmlChar * name,
    const xmlChar * ExternalID,
    const xmlChar * SystemID); +typedef xmlParserInputPtr resolveEntitySAXFunc (void * ctx,
    const xmlChar * publicId,
    const xmlChar * systemId); +int xmlPedanticParserDefault (int val); +xmlDocPtr xmlSAXParseEntity (xmlSAXHandlerPtr sax,
    const char * filename); +xmlDocPtr xmlParseDoc (const xmlChar * cur); +xmlDocPtr xmlSAXParseFileWithData (xmlSAXHandlerPtr sax,
    const char * filename,
    int recovery,
    void * data); +int xmlLineNumbersDefault (int val); +xmlExternalEntityLoader xmlGetExternalEntityLoader (void); +typedef void elementDeclSAXFunc (void * ctx,
    const xmlChar * name,
    int type,
    xmlElementContentPtr content); +int xmlCtxtUseOptions (xmlParserCtxtPtr ctxt,
    int options); +xmlParserCtxtPtr xmlCreatePushParserCtxt (xmlSAXHandlerPtr sax,
    void * user_data,
    const char * chunk,
    int size,
    const char * filename); +void xmlParserAddNodeInfo (xmlParserCtxtPtr ctxt,
    const xmlParserNodeInfoPtr info); +xmlDocPtr xmlCtxtReadFd (xmlParserCtxtPtr ctxt,
    int fd,
    const char * URL,
    const char * encoding,
    int options); +typedef void internalSubsetSAXFunc (void * ctx,
    const xmlChar * name,
    const xmlChar * ExternalID,
    const xmlChar * SystemID); +xmlParserCtxtPtr xmlNewParserCtxt (void); +typedef void endDocumentSAXFunc (void * ctx); +xmlDocPtr xmlParseFile (const char * filename); +int xmlParseDocument (xmlParserCtxtPtr ctxt); +typedef void setDocumentLocatorSAXFunc (void * ctx,
    xmlSAXLocatorPtr loc); +typedef xmlEntityPtr getParameterEntitySAXFunc (void * ctx,
    const xmlChar * name); +typedef void ignorableWhitespaceSAXFunc (void * ctx,
    const xmlChar * ch,
    int len); +void xmlInitNodeInfoSeq (xmlParserNodeInfoSeqPtr seq); +int xmlSubstituteEntitiesDefault (int val); +typedef void endElementSAXFunc (void * ctx,
    const xmlChar * name); +unsigned long xmlParserFindNodeInfoIndex (const xmlParserNodeInfoSeqPtr seq,
    const xmlNodePtr node); +long xmlByteConsumed (xmlParserCtxtPtr ctxt); +void xmlCtxtReset (xmlParserCtxtPtr ctxt); +int xmlSetFeature (xmlParserCtxtPtr ctxt,
    const char * name,
    void * value); +int xmlKeepBlanksDefault (int val); +int xmlParserInputRead (xmlParserInputPtr in,
    int len); +xmlDocPtr xmlReadFile (const char * filename,
    const char * encoding,
    int options); +int xmlGetFeaturesList (int * len,
    const char ** result); +int xmlHasFeature (xmlFeature feature); +typedef void unparsedEntityDeclSAXFunc (void * ctx,
    const xmlChar * name,
    const xmlChar * publicId,
    const xmlChar * systemId,
    const xmlChar * notationName); +int xmlSAXUserParseFile (xmlSAXHandlerPtr sax,
    void * user_data,
    const char * filename); +typedef void fatalErrorSAXFunc (void * ctx,
    const char * msg,
    ... ...); +xmlDtdPtr xmlSAXParseDTD (xmlSAXHandlerPtr sax,
    const xmlChar * ExternalID,
    const xmlChar * SystemID); +const xmlParserNodeInfo * xmlParserFindNodeInfo (const xmlParserCtxtPtr ctx,
    const xmlNodePtr node); +typedef void entityDeclSAXFunc (void * ctx,
    const xmlChar * name,
    int type,
    const xmlChar * publicId,
    const xmlChar * systemId,
    xmlChar * content); +xmlParserInputPtr xmlLoadExternalEntity (const char * URL,
    const char * ID,
    xmlParserCtxtPtr ctxt); +void xmlStopParser (xmlParserCtxtPtr ctxt); +xmlDocPtr xmlReadFd (int fd,
    const char * URL,
    const char * encoding,
    int options); +int xmlParseExtParsedEnt (xmlParserCtxtPtr ctxt); +xmlDocPtr xmlReadIO (xmlInputReadCallback ioread,
    xmlInputCloseCallback ioclose,
    void * ioctx,
    const char * URL,
    const char * encoding,
    int options); +xmlDocPtr xmlReadDoc (const xmlChar * cur,
    const char * URL,
    const char * encoding,
    int options); +int xmlSAXUserParseMemory (xmlSAXHandlerPtr sax,
    void * user_data,
    const char * buffer,
    int size); +int xmlParseBalancedChunkMemory (xmlDocPtr doc,
    xmlSAXHandlerPtr sax,
    void * user_data,
    int depth,
    const xmlChar * string,
    xmlNodePtr * lst); +typedef void endElementNsSAX2Func (void * ctx,
    const xmlChar * localname,
    const xmlChar * prefix,
    const xmlChar * URI); +void xmlCleanupParser (void); +int xmlCtxtResetPush (xmlParserCtxtPtr ctxt,
    const char * chunk,
    int size,
    const char * filename,
    const char * encoding); +typedef int isStandaloneSAXFunc (void * ctx); +typedef void startDocumentSAXFunc (void * ctx); +void xmlClearParserCtxt (xmlParserCtxtPtr ctxt); +int xmlParseExternalEntity (xmlDocPtr doc,
    xmlSAXHandlerPtr sax,
    void * user_data,
    int depth,
    const xmlChar * URL,
    const xmlChar * ID,
    xmlNodePtr * lst); +typedef void notationDeclSAXFunc (void * ctx,
    const xmlChar * name,
    const xmlChar * publicId,
    const xmlChar * systemId); +typedef void warningSAXFunc (void * ctx,
    const char * msg,
    ... ...); +void xmlSetExternalEntityLoader (xmlExternalEntityLoader f); +
    +
    +
    +

    Description

    +
    +
    +

    Details

    +
    +

    Macro XML_COMPLETE_ATTRS

    #define 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.

    +
    +
    +

    Macro XML_DEFAULT_VERSION

    #define XML_DEFAULT_VERSION;
    +

    The default version of XML used: 1.0

    +
    +
    +

    Macro XML_DETECT_IDS

    #define XML_DETECT_IDS;
    +

    Bit in the loadsubset context field to tell to do ID/REFs lookups. Use it to initialize xmlLoadExtDtdDefaultValue.

    +
    +
    +

    Macro XML_SAX2_MAGIC

    #define XML_SAX2_MAGIC;
    +

    Special constant found in SAX2 blocks initialized fields

    +
    +
    +

    Macro XML_SKIP_IDS

    #define 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.

    +
    +
    + +
    +

    Enum xmlParserInputState

    enum xmlParserInputState {
    +    XML_PARSER_EOF = -1 /* nothing is to be parsed */
    +    XML_PARSER_START = 0 /* nothing has been parsed */
    +    XML_PARSER_MISC = 1 /* Misc* before int subset */
    +    XML_PARSER_PI = 2 /* Within a processing instruction */
    +    XML_PARSER_DTD = 3 /* within some DTD content */
    +    XML_PARSER_PROLOG = 4 /* Misc* after internal subset */
    +    XML_PARSER_COMMENT = 5 /* within a comment */
    +    XML_PARSER_START_TAG = 6 /* within a start tag */
    +    XML_PARSER_CONTENT = 7 /* within the content */
    +    XML_PARSER_CDATA_SECTION = 8 /* within a CDATA section */
    +    XML_PARSER_END_TAG = 9 /* within a closing tag */
    +    XML_PARSER_ENTITY_DECL = 10 /* within an entity declaration */
    +    XML_PARSER_ENTITY_VALUE = 11 /* within an entity value in a decl */
    +    XML_PARSER_ATTRIBUTE_VALUE = 12 /* within an attribute value */
    +    XML_PARSER_SYSTEM_LITERAL = 13 /* within a SYSTEM value */
    +    XML_PARSER_EPILOG = 14 /* the Misc* after the last end tag */
    +    XML_PARSER_IGNORE = 15 /* within an IGNORED section */
    +    XML_PARSER_PUBLIC_LITERAL = 16 /*  within a PUBLIC value */
    +};
    +

    +

    +
    + +
    +

    Structure xmlParserNodeInfo

    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
    +} xmlParserNodeInfo;
    +

    +

    +
    +

    Typedef xmlParserNodeInfoPtr

    xmlParserNodeInfo * xmlParserNodeInfoPtr;
    +

    +

    +
    +

    Structure xmlParserNodeInfoSeq

    struct _xmlParserNodeInfoSeq {
    +    unsigned long	maximum
    +    unsigned long	length
    +    xmlParserNodeInfo *	buffer
    +} xmlParserNodeInfoSeq;
    +

    +

    +
    +

    Typedef xmlParserNodeInfoSeqPtr

    xmlParserNodeInfoSeq * xmlParserNodeInfoSeqPtr;
    +

    +

    +
    +

    Enum xmlParserOption

    enum xmlParserOption {
    +    XML_PARSE_RECOVER = 1 /* recover on errors */
    +    XML_PARSE_NOENT = 2 /* substitute entities */
    +    XML_PARSE_DTDLOAD = 4 /* load the external subset */
    +    XML_PARSE_DTDATTR = 8 /* default DTD attributes */
    +    XML_PARSE_DTDVALID = 16 /* validate with the DTD */
    +    XML_PARSE_NOERROR = 32 /* suppress error reports */
    +    XML_PARSE_NOWARNING = 64 /* suppress warning reports */
    +    XML_PARSE_PEDANTIC = 128 /* pedantic error reporting */
    +    XML_PARSE_NOBLANKS = 256 /* remove blank nodes */
    +    XML_PARSE_SAX1 = 512 /* use the SAX1 interface internally */
    +    XML_PARSE_XINCLUDE = 1024 /* Implement XInclude substitition */
    +    XML_PARSE_NONET = 2048 /* Forbid network access */
    +    XML_PARSE_NODICT = 4096 /* Do not reuse the context dictionary */
    +    XML_PARSE_NSCLEAN = 8192 /* remove redundant namespaces declarations */
    +    XML_PARSE_NOCDATA = 16384 /* merge CDATA as text nodes */
    +    XML_PARSE_NOXINCNODE = 32768 /* do not generate XINCLUDE START/END nodes */
    +    XML_PARSE_COMPACT = 65536 /* compact small text nodes; no modification of the tree allowed afterwards (will possibly crash if you try to modify the tree) */
    +    XML_PARSE_OLD10 = 131072 /* parse using XML-1.0 before update 5 */
    +    XML_PARSE_NOBASEFIX = 262144 /* do not fixup XINCLUDE xml:base uris */
    +    XML_PARSE_HUGE = 524288 /* relax any hardcoded limit from the parser */
    +    XML_PARSE_OLDSAX = 1048576 /* parse using SAX2 interface before 2.7.0 */
    +    XML_PARSE_IGNORE_ENC = 2097152 /* ignore internal document encoding hint */
    +    XML_PARSE_BIG_LINES = 4194304 /*  Store big lines numbers in text PSVI field */
    +};
    +

    +

    +
    +

    Structure xmlSAXHandlerV1

    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
    +} xmlSAXHandlerV1;
    +

    +

    +
    +

    Typedef xmlSAXHandlerV1Ptr

    xmlSAXHandlerV1 * xmlSAXHandlerV1Ptr;
    +

    +

    +
    +

    Function type attributeDeclSAXFunc

    void	attributeDeclSAXFunc		(void * ctx, 
    const
    xmlChar * elem,
    const xmlChar * fullname,
    int type,
    int def,
    const xmlChar * defaultValue,
    xmlEnumerationPtr tree)
    +

    An attribute definition has been parsed.

    +
    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
    +
    +

    Function type attributeSAXFunc

    void	attributeSAXFunc		(void * ctx, 
    const
    xmlChar * name,
    const xmlChar * 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.

    +
    ctx:the user data (XML parser context)
    name:The attribute name, including namespace prefix
    value:The attribute value
    +
    +

    Function type cdataBlockSAXFunc

    void	cdataBlockSAXFunc		(void * ctx, 
    const
    xmlChar * value,
    int len)
    +

    Called when a pcdata block has been parsed.

    +
    ctx:the user data (XML parser context)
    value:The pcdata content
    len:the block length
    +
    +

    Function type charactersSAXFunc

    void	charactersSAXFunc		(void * ctx, 
    const
    xmlChar * ch,
    int len)
    +

    Receiving some chars from the parser.

    +
    ctx:the user data (XML parser context)
    ch:a xmlChar string
    len:the number of xmlChar
    +
    +

    Function type commentSAXFunc

    void	commentSAXFunc			(void * ctx, 
    const
    xmlChar * value)
    +

    A comment has been parsed.

    +
    ctx:the user data (XML parser context)
    value:the comment content
    +
    +

    Function type elementDeclSAXFunc

    void	elementDeclSAXFunc		(void * ctx, 
    const
    xmlChar * name,
    int type,
    xmlElementContentPtr content)
    +

    An element definition has been parsed.

    +
    ctx:the user data (XML parser context)
    name:the element name
    type:the element type
    content:the element value tree
    +
    + +
    +

    Function type endElementNsSAX2Func

    void	endElementNsSAX2Func		(void * ctx, 
    const
    xmlChar * localname,
    const xmlChar * prefix,
    const xmlChar * URI)
    +

    SAX2 callback when an element end has been detected by the parser. It provides the namespace informations for the element.

    +
    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
    +
    +

    Function type endElementSAXFunc

    void	endElementSAXFunc		(void * ctx, 
    const
    xmlChar * name)
    +

    Called when the end of an element has been detected.

    +
    ctx:the user data (XML parser context)
    name:The element name
    +
    +

    Function type entityDeclSAXFunc

    void	entityDeclSAXFunc		(void * ctx, 
    const
    xmlChar * name,
    int type,
    const xmlChar * publicId,
    const xmlChar * systemId,
    xmlChar * content)
    +

    An entity definition has been parsed.

    +
    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).
    +
    + +
    +

    Function type externalSubsetSAXFunc

    void	externalSubsetSAXFunc		(void * ctx, 
    const
    xmlChar * name,
    const xmlChar * ExternalID,
    const xmlChar * SystemID)
    +

    Callback on external subset declaration.

    +
    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)
    +
    + +
    +

    Function type getEntitySAXFunc

    xmlEntityPtr	getEntitySAXFunc	(void * ctx, 
    const xmlChar * name)
    +

    Get an entity by name.

    +
    ctx:the user data (XML parser context)
    name:The entity name
    Returns:the xmlEntityPtr if found.
    +
    +

    Function type getParameterEntitySAXFunc

    xmlEntityPtr	getParameterEntitySAXFunc	(void * ctx, 
    const xmlChar * name)
    +

    Get a parameter entity by name.

    +
    ctx:the user data (XML parser context)
    name:The entity name
    Returns:the xmlEntityPtr if found.
    +
    + +
    +
    +
    +

    Function type ignorableWhitespaceSAXFunc

    void	ignorableWhitespaceSAXFunc	(void * ctx, 
    const
    xmlChar * ch,
    int len)
    +

    Receiving some ignorable whitespaces from the parser. UNUSED: by default the DOM building will use characters.

    +
    ctx:the user data (XML parser context)
    ch:a xmlChar string
    len:the number of xmlChar
    +
    +

    Function type internalSubsetSAXFunc

    void	internalSubsetSAXFunc		(void * ctx, 
    const
    xmlChar * name,
    const xmlChar * ExternalID,
    const xmlChar * SystemID)
    +

    Callback on internal subset declaration.

    +
    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)
    +
    + +
    +

    Function type notationDeclSAXFunc

    void	notationDeclSAXFunc		(void * ctx, 
    const
    xmlChar * name,
    const xmlChar * publicId,
    const xmlChar * systemId)
    +

    What to do when a notation declaration has been parsed.

    +
    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
    +
    +

    Function type processingInstructionSAXFunc

    void	processingInstructionSAXFunc	(void * ctx, 
    const
    xmlChar * target,
    const xmlChar * data)
    +

    A processing instruction has been parsed.

    +
    ctx:the user data (XML parser context)
    target:the target name
    data:the PI data's
    +
    +

    Function type referenceSAXFunc

    void	referenceSAXFunc		(void * ctx, 
    const
    xmlChar * name)
    +

    Called when an entity reference is detected.

    +
    ctx:the user data (XML parser context)
    name:The entity name
    +
    +

    Function type resolveEntitySAXFunc

    xmlParserInputPtr	resolveEntitySAXFunc	(void * ctx, 
    const xmlChar * publicId,
    const xmlChar * systemId)
    +

    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

    +
    ctx:the user data (XML parser context)
    publicId:The public ID of the entity
    systemId:The system ID of the entity
    Returns:the xmlParserInputPtr if inlined or NULL for DOM behaviour.
    +
    +

    Function type setDocumentLocatorSAXFunc

    void	setDocumentLocatorSAXFunc	(void * ctx, 
    xmlSAXLocatorPtr loc)
    +

    Receive the document locator at startup, actually xmlDefaultSAXLocator. Everything is available on the context, so this is useless in our case.

    +
    ctx:the user data (XML parser context)
    loc:A SAX Locator
    +
    + +
    +

    Function type startElementNsSAX2Func

    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)
    +

    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.

    +
    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.
    +
    +

    Function type startElementSAXFunc

    void	startElementSAXFunc		(void * ctx, 
    const
    xmlChar * name,
    const xmlChar ** atts)
    +

    Called when an opening tag has been processed.

    +
    ctx:the user data (XML parser context)
    name:The element name, including namespace prefix
    atts:An array of name/value attributes pairs, NULL terminated
    +
    +

    Function type unparsedEntityDeclSAXFunc

    void	unparsedEntityDeclSAXFunc	(void * ctx, 
    const
    xmlChar * name,
    const xmlChar * publicId,
    const xmlChar * systemId,
    const xmlChar * notationName)
    +

    What to do when an unparsed entity declaration is parsed.

    +
    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
    +
    + +
    +

    Function type xmlExternalEntityLoader

    xmlParserInputPtr	xmlExternalEntityLoader	(const char * URL, 
    const char * ID,
    xmlParserCtxtPtr context)
    +

    External entity loaders types.

    +
    URL:The System ID of the resource requested
    ID:The Public ID of the resource requested
    context:the XML parser context
    Returns:the entity input parser.
    +
    +

    Function type xmlParserInputDeallocate

    void	xmlParserInputDeallocate	(xmlChar * str)
    +

    Callback for freeing some parser input allocations.

    +
    str:the string to deallocate
    +
    +

    xmlByteConsumed ()

    long	xmlByteConsumed			(xmlParserCtxtPtr ctxt)
    +

    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.

    +
    ctxt:an XML parser context
    Returns:the index in bytes from the beginning of the entity or -1 in case the index could not be computed.
    +
    + +
    +

    xmlClearNodeInfoSeq ()

    void	xmlClearNodeInfoSeq		(xmlParserNodeInfoSeqPtr seq)
    +

    -- Clear (release memory and reinitialize) node info sequence

    +
    seq:a node info sequence pointer
    +
    +

    xmlClearParserCtxt ()

    void	xmlClearParserCtxt		(xmlParserCtxtPtr ctxt)
    +

    Clear (release owned resources) and reinitialize a parser context

    +
    ctxt:an XML parser context
    +
    +

    xmlCreateDocParserCtxt ()

    xmlParserCtxtPtr	xmlCreateDocParserCtxt	(const xmlChar * cur)
    +

    Creates a parser context for an XML in-memory document.

    +
    cur:a pointer to an array of xmlChar
    Returns:the new parser context or NULL
    +
    +

    xmlCreateIOParserCtxt ()

    xmlParserCtxtPtr	xmlCreateIOParserCtxt	(xmlSAXHandlerPtr sax, 
    void * user_data,
    xmlInputReadCallback ioread,
    xmlInputCloseCallback ioclose,
    void * ioctx,
    xmlCharEncoding enc)
    +

    Create a parser context for using the XML parser with an existing I/O stream

    +
    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
    Returns:the new parser context or NULL
    +
    +

    xmlCreatePushParserCtxt ()

    xmlParserCtxtPtr	xmlCreatePushParserCtxt	(xmlSAXHandlerPtr sax, 
    void * user_data,
    const char * chunk,
    int size,
    const char * filename)
    +

    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.

    +
    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
    Returns:the new parser context or NULL
    +
    +

    xmlCtxtReadDoc ()

    xmlDocPtr	xmlCtxtReadDoc		(xmlParserCtxtPtr ctxt, 
    const xmlChar * cur,
    const char * URL,
    const char * encoding,
    int options)
    +

    parse an XML in-memory document and build a tree. This reuses the existing @ctxt parser context

    +
    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
    Returns:the resulting document tree
    +
    +

    xmlCtxtReadFd ()

    xmlDocPtr	xmlCtxtReadFd		(xmlParserCtxtPtr ctxt, 
    int fd,
    const char * URL,
    const char * encoding,
    int options)
    +

    parse an XML from a file descriptor and build a tree. This reuses the existing @ctxt parser context NOTE that the file descriptor will not be closed when the reader is closed or reset.

    +
    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
    Returns:the resulting document tree
    +
    +

    xmlCtxtReadFile ()

    xmlDocPtr	xmlCtxtReadFile		(xmlParserCtxtPtr ctxt, 
    const char * filename,
    const char * encoding,
    int options)
    +

    parse an XML file from the filesystem or the network. This reuses the existing @ctxt parser context

    +
    ctxt:an XML parser context
    filename:a file or URL
    encoding:the document encoding, or NULL
    options:a combination of xmlParserOption
    Returns:the resulting document tree
    +
    +

    xmlCtxtReadIO ()

    xmlDocPtr	xmlCtxtReadIO		(xmlParserCtxtPtr ctxt, 
    xmlInputReadCallback ioread,
    xmlInputCloseCallback ioclose,
    void * ioctx,
    const char * URL,
    const char * encoding,
    int options)
    +

    parse an XML document from I/O functions and source and build a tree. This reuses the existing @ctxt parser context

    +
    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
    Returns:the resulting document tree
    +
    +

    xmlCtxtReadMemory ()

    xmlDocPtr	xmlCtxtReadMemory	(xmlParserCtxtPtr ctxt, 
    const char * buffer,
    int size,
    const char * URL,
    const char * encoding,
    int options)
    +

    parse an XML in-memory document and build a tree. This reuses the existing @ctxt parser context

    +
    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
    Returns:the resulting document tree
    +
    +

    xmlCtxtReset ()

    void	xmlCtxtReset			(xmlParserCtxtPtr ctxt)
    +

    Reset a parser context

    +
    ctxt:an XML parser context
    +
    +

    xmlCtxtResetPush ()

    int	xmlCtxtResetPush		(xmlParserCtxtPtr ctxt, 
    const char * chunk,
    int size,
    const char * filename,
    const char * encoding)
    +

    Reset a push parser context

    +
    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
    Returns:0 in case of success and 1 in case of error
    +
    +

    xmlCtxtUseOptions ()

    int	xmlCtxtUseOptions		(xmlParserCtxtPtr ctxt, 
    int options)
    +

    Applies the options to the parser context

    +
    ctxt:an XML parser context
    options:a combination of xmlParserOption
    Returns:0 in case of success, the set of unknown or unimplemented options in case of error.
    +
    +

    xmlFreeParserCtxt ()

    void	xmlFreeParserCtxt		(xmlParserCtxtPtr ctxt)
    +

    Free all the memory used by a parser context. However the parsed document in ctxt->myDoc is not freed.

    +
    ctxt:an XML parser context
    +
    +

    xmlGetExternalEntityLoader ()

    xmlExternalEntityLoader	xmlGetExternalEntityLoader	(void)
    +

    Get the default external entity resolver function for the application

    +
    Returns:the xmlExternalEntityLoader function pointer
    +
    +

    xmlGetFeature ()

    int	xmlGetFeature			(xmlParserCtxtPtr ctxt, 
    const char * name,
    void * result)
    +

    Read the current value of one feature of this parser instance

    +
    ctxt:an XML/HTML parser context
    name:the feature name
    result:location to store the result
    Returns:-1 in case or error, 0 otherwise
    +
    + +
    +

    xmlHasFeature ()

    int	xmlHasFeature			(xmlFeature feature)
    +

    Examines if the library has been compiled with a given feature.

    +
    feature:the feature to be examined
    Returns:a non-zero value if the feature exist, otherwise zero. Returns zero (0) if the feature does not exist or an unknown unknown feature is requested, non-zero otherwise.
    +
    +

    xmlIOParseDTD ()

    xmlDtdPtr	xmlIOParseDTD		(xmlSAXHandlerPtr sax, 
    xmlParserInputBufferPtr input,
    xmlCharEncoding enc)
    +

    Load and parse a DTD

    +
    sax:the SAX handler block or NULL
    input:an Input Buffer
    enc:the charset encoding if known
    Returns:the resulting xmlDtdPtr or NULL in case of error. @input will be freed by the function in any case.
    +
    +

    xmlInitNodeInfoSeq ()

    void	xmlInitNodeInfoSeq		(xmlParserNodeInfoSeqPtr seq)
    +

    -- Initialize (set to initial state) node info sequence

    +
    seq:a node info sequence pointer
    +
    + +
    +

    xmlInitParserCtxt ()

    int	xmlInitParserCtxt		(xmlParserCtxtPtr ctxt)
    +

    Initialize a parser context

    +
    ctxt:an XML parser context
    Returns:0 in case of success and -1 in case of error
    +
    + +
    +
    +
    +

    xmlLoadExternalEntity ()

    xmlParserInputPtr	xmlLoadExternalEntity	(const char * URL, 
    const char * ID,
    xmlParserCtxtPtr ctxt)
    +

    Load an external entity, note that the use of this function for unparsed entities may generate problems

    +
    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
    Returns:the xmlParserInputPtr or NULL
    +
    +

    xmlNewIOInputStream ()

    xmlParserInputPtr	xmlNewIOInputStream	(xmlParserCtxtPtr ctxt, 
    xmlParserInputBufferPtr input,
    xmlCharEncoding enc)
    +

    Create a new input stream structure encapsulating the @input into a stream suitable for the parser.

    +
    ctxt:an XML parser context
    input:an I/O Input
    enc:the charset encoding if known
    Returns:the new input stream or NULL
    +
    +

    xmlNewParserCtxt ()

    xmlParserCtxtPtr	xmlNewParserCtxt	(void)
    +

    Allocate and initialize a new parser context.

    +
    Returns:the xmlParserCtxtPtr or NULL
    +
    +

    xmlParseBalancedChunkMemory ()

    int	xmlParseBalancedChunkMemory	(xmlDocPtr doc, 
    xmlSAXHandlerPtr sax,
    void * user_data,
    int depth,
    const xmlChar * string,
    xmlNodePtr * lst)
    +

    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)*

    +
    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
    Returns:0 if the chunk is well balanced, -1 in case of args problem and the parser error code otherwise
    +
    +

    xmlParseBalancedChunkMemoryRecover ()

    int	xmlParseBalancedChunkMemoryRecover	(xmlDocPtr doc, 
    xmlSAXHandlerPtr sax,
    void * user_data,
    int depth,
    const xmlChar * string,
    xmlNodePtr * lst,
    int recover)
    +

    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)*

    +
    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)
    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, assuming the parsing succeeded to some extent.
    +
    +

    xmlParseChunk ()

    int	xmlParseChunk			(xmlParserCtxtPtr ctxt, 
    const char * chunk,
    int size,
    int terminate)
    +

    Parse a Chunk of memory

    +
    ctxt:an XML parser context
    chunk:an char array
    size:the size in byte of the chunk
    terminate:last chunk indicator
    Returns:zero if no error, the xmlParserErrors otherwise.
    +
    +

    xmlParseCtxtExternalEntity ()

    int	xmlParseCtxtExternalEntity	(xmlParserCtxtPtr ctx, 
    const xmlChar * URL,
    const xmlChar * ID,
    xmlNodePtr * lst)
    +

    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

    +
    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
    Returns:0 if the entity is well formed, -1 in case of args problem and the parser error code otherwise
    +
    +

    xmlParseDTD ()

    xmlDtdPtr	xmlParseDTD		(const xmlChar * ExternalID, 
    const xmlChar * SystemID)
    +

    Load and parse an external subset.

    +
    ExternalID:a NAME* containing the External ID of the DTD
    SystemID:a NAME* containing the URL to the DTD
    Returns:the resulting xmlDtdPtr or NULL in case of error.
    +
    +

    xmlParseDoc ()

    xmlDocPtr	xmlParseDoc		(const xmlChar * cur)
    +

    parse an XML in-memory document and build a tree.

    +
    cur:a pointer to an array of xmlChar
    Returns:the resulting document tree
    +
    +

    xmlParseDocument ()

    int	xmlParseDocument		(xmlParserCtxtPtr ctxt)
    +

    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*)?

    +
    ctxt:an XML parser context
    Returns:0, -1 in case of error. the parser context is augmented as a result of the parsing.
    +
    +

    xmlParseEntity ()

    xmlDocPtr	xmlParseEntity		(const char * filename)
    +

    parse an XML external entity out of context and build a tree. [78] extParsedEnt ::= TextDecl? content This correspond to a "Well Balanced" chunk

    +
    filename:the filename
    Returns:the resulting document tree
    +
    +

    xmlParseExtParsedEnt ()

    int	xmlParseExtParsedEnt		(xmlParserCtxtPtr ctxt)
    +

    parse a general parsed entity An external general parsed entity is well-formed if it matches the production labeled extParsedEnt. [78] extParsedEnt ::= TextDecl? content

    +
    ctxt:an XML parser context
    Returns:0, -1 in case of error. the parser context is augmented as a result of the parsing.
    +
    +

    xmlParseExternalEntity ()

    int	xmlParseExternalEntity		(xmlDocPtr doc, 
    xmlSAXHandlerPtr sax,
    void * user_data,
    int depth,
    const xmlChar * URL,
    const xmlChar * ID,
    xmlNodePtr * lst)
    +

    Parse an external general entity An external general parsed entity is well-formed if it matches the production labeled extParsedEnt. [78] extParsedEnt ::= TextDecl? content

    +
    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
    Returns:0 if the entity is well formed, -1 in case of args problem and the parser error code otherwise
    +
    +

    xmlParseFile ()

    xmlDocPtr	xmlParseFile		(const char * 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.

    +
    filename:the filename
    Returns:the resulting document tree if the file was wellformed, NULL otherwise.
    +
    +

    xmlParseInNodeContext ()

    xmlParserErrors	xmlParseInNodeContext	(xmlNodePtr node, 
    const char * data,
    int datalen,
    int options,
    xmlNodePtr * lst)
    +

    Parse a well-balanced chunk of an XML document within the context (DTD, namespaces, etc ...) of the given node. The allowed sequence for the data is a Well Balanced Chunk defined by the content production in the XML grammar: [43] content ::= (element | CharData | Reference | CDSect | PI | Comment)*

    +
    node:the context node
    data:the input string
    datalen:the input string length in bytes
    options:a combination of xmlParserOption
    lst:the return value for the set of parsed nodes
    Returns:XML_ERR_OK if the chunk is well balanced, and the parser error code otherwise
    +
    +

    xmlParseMemory ()

    xmlDocPtr	xmlParseMemory		(const char * buffer, 
    int size)
    +

    parse an XML in-memory block and build a tree.

    +
    buffer:an pointer to a char array
    size:the size of the array
    Returns:the resulting document tree
    +
    +

    xmlParserAddNodeInfo ()

    void	xmlParserAddNodeInfo		(xmlParserCtxtPtr ctxt, 
    const xmlParserNodeInfoPtr info)
    +

    Insert node info record into the sorted sequence

    +
    ctxt:an XML parser context
    info:a node info sequence pointer
    +
    +

    xmlParserFindNodeInfo ()

    const xmlParserNodeInfo *	xmlParserFindNodeInfo	(const xmlParserCtxtPtr ctx, 
    const xmlNodePtr node)
    +

    Find the parser node info struct for a given node

    +
    ctx:an XML parser context
    node:an XML node within the tree
    Returns:an xmlParserNodeInfo block pointer or NULL
    +
    +

    xmlParserFindNodeInfoIndex ()

    unsigned long	xmlParserFindNodeInfoIndex	(const xmlParserNodeInfoSeqPtr seq, 
    const xmlNodePtr node)
    +

    xmlParserFindNodeInfoIndex : Find the index that the info record for the given node is or should be at in a sorted sequence

    +
    seq:a node info sequence pointer
    node:an XML node pointer
    Returns:a long indicating the position of the record
    +
    +

    xmlParserInputGrow ()

    int	xmlParserInputGrow		(xmlParserInputPtr in, 
    int len)
    +

    This function increase the input for the parser. It tries to preserve pointers to the input buffer, and keep already read data

    +
    in:an XML parser input
    len:an indicative size for the lookahead
    Returns:the amount of char read, or -1 in case of error, 0 indicate the end of this entity
    +
    +

    xmlParserInputRead ()

    int	xmlParserInputRead		(xmlParserInputPtr in, 
    int len)
    +

    This function was internal and is deprecated.

    +
    in:an XML parser input
    len:an indicative size for the lookahead
    Returns:-1 as this is an error to use it.
    +
    + +
    +

    xmlReadDoc ()

    xmlDocPtr	xmlReadDoc		(const xmlChar * cur, 
    const char * URL,
    const char * encoding,
    int options)
    +

    parse an XML in-memory document and build a tree.

    +
    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
    Returns:the resulting document tree
    +
    +

    xmlReadFd ()

    xmlDocPtr	xmlReadFd		(int fd, 
    const char * URL,
    const char * encoding,
    int options)
    +

    parse an XML from a file descriptor and build a tree. NOTE that the file descriptor will not be closed when the reader is closed or reset.

    +
    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
    Returns:the resulting document tree
    +
    +

    xmlReadFile ()

    xmlDocPtr	xmlReadFile		(const char * filename, 
    const char * encoding,
    int options)
    +

    parse an XML file from the filesystem or the network.

    +
    filename:a file or URL
    encoding:the document encoding, or NULL
    options:a combination of xmlParserOption
    Returns:the resulting document tree
    +
    +

    xmlReadIO ()

    xmlDocPtr	xmlReadIO		(xmlInputReadCallback ioread, 
    xmlInputCloseCallback ioclose,
    void * ioctx,
    const char * URL,
    const char * encoding,
    int options)
    +

    parse an XML document from I/O functions and source and build a tree.

    +
    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
    Returns:the resulting document tree
    +
    +

    xmlReadMemory ()

    xmlDocPtr	xmlReadMemory		(const char * buffer, 
    int size,
    const char * URL,
    const char * encoding,
    int options)
    +

    parse an XML in-memory document and build a tree.

    +
    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
    Returns:the resulting document tree
    +
    +

    xmlRecoverDoc ()

    xmlDocPtr	xmlRecoverDoc		(const xmlChar * cur)
    +

    parse an XML in-memory document and build a tree. In the case the document is not Well Formed, a attempt to build a tree is tried anyway

    +
    cur:a pointer to an array of xmlChar
    Returns:the resulting document tree or NULL in case of failure
    +
    +

    xmlRecoverFile ()

    xmlDocPtr	xmlRecoverFile		(const char * filename)
    +

    parse an XML file and build a tree. Automatic support for ZLIB/Compress compressed document is provided by default if found at compile-time. In the case the document is not Well Formed, it attempts to build a tree anyway

    +
    filename:the filename
    Returns:the resulting document tree or NULL in case of failure
    +
    +

    xmlRecoverMemory ()

    xmlDocPtr	xmlRecoverMemory	(const char * buffer, 
    int size)
    +

    parse an XML in-memory block and build a tree. In the case the document is not Well Formed, an attempt to build a tree is tried anyway

    +
    buffer:an pointer to a char array
    size:the size of the array
    Returns:the resulting document tree or NULL in case of error
    +
    +

    xmlSAXParseDTD ()

    xmlDtdPtr	xmlSAXParseDTD		(xmlSAXHandlerPtr sax, 
    const xmlChar * ExternalID,
    const xmlChar * SystemID)
    +

    Load and parse an external subset.

    +
    sax:the SAX handler block
    ExternalID:a NAME* containing the External ID of the DTD
    SystemID:a NAME* containing the URL to the DTD
    Returns:the resulting xmlDtdPtr or NULL in case of error.
    +
    +

    xmlSAXParseDoc ()

    xmlDocPtr	xmlSAXParseDoc		(xmlSAXHandlerPtr sax, 
    const xmlChar * cur,
    int recovery)
    +

    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.

    +
    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
    Returns:the resulting document tree
    +
    +

    xmlSAXParseEntity ()

    xmlDocPtr	xmlSAXParseEntity	(xmlSAXHandlerPtr sax, 
    const char * 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

    +
    sax:the SAX handler block
    filename:the filename
    Returns:the resulting document tree
    +
    +

    xmlSAXParseFile ()

    xmlDocPtr	xmlSAXParseFile		(xmlSAXHandlerPtr sax, 
    const char * filename,
    int recovery)
    +

    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.

    +
    sax:the SAX handler block
    filename:the filename
    recovery:work in recovery mode, i.e. tries to read no Well Formed documents
    Returns:the resulting document tree
    +
    +

    xmlSAXParseFileWithData ()

    xmlDocPtr	xmlSAXParseFileWithData	(xmlSAXHandlerPtr sax, 
    const char * filename,
    int recovery,
    void * data)
    +

    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

    +
    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
    Returns:the resulting document tree
    +
    +

    xmlSAXParseMemory ()

    xmlDocPtr	xmlSAXParseMemory	(xmlSAXHandlerPtr sax, 
    const char * buffer,
    int size,
    int recovery)
    +

    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.

    +
    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
    Returns:the resulting document tree
    +
    +

    xmlSAXParseMemoryWithData ()

    xmlDocPtr	xmlSAXParseMemoryWithData	(xmlSAXHandlerPtr sax, 
    const char * buffer,
    int size,
    int recovery,
    void * data)
    +

    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

    +
    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
    Returns:the resulting document tree
    +
    +

    xmlSAXUserParseFile ()

    int	xmlSAXUserParseFile		(xmlSAXHandlerPtr sax, 
    void * user_data,
    const char * filename)
    +

    parse an XML file and call the given SAX handler routines. Automatic support for ZLIB/Compress compressed document is provided

    +
    sax:a SAX handler
    user_data:The user data returned on SAX callbacks
    filename:a file name
    Returns:0 in case of success or a error number otherwise
    +
    +

    xmlSAXUserParseMemory ()

    int	xmlSAXUserParseMemory		(xmlSAXHandlerPtr sax, 
    void * user_data,
    const char * buffer,
    int size)
    +

    A better SAX parsing routine. parse an XML in-memory buffer and call the given SAX handler routines.

    +
    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
    Returns:0 in case of success or a error number otherwise
    +
    +

    xmlSetExternalEntityLoader ()

    void	xmlSetExternalEntityLoader	(xmlExternalEntityLoader f)
    +

    Changes the defaultexternal entity resolver function for the application

    +
    f:the new entity resolver function
    +
    +

    xmlSetFeature ()

    int	xmlSetFeature			(xmlParserCtxtPtr ctxt, 
    const char * name,
    void * value)
    +

    Change the current value of one feature of this parser instance

    +
    ctxt:an XML/HTML parser context
    name:the feature name
    value:pointer to the location of the new value
    Returns:-1 in case or error, 0 otherwise
    +
    +

    xmlSetupParserForBuffer ()

    void	xmlSetupParserForBuffer		(xmlParserCtxtPtr ctxt, 
    const xmlChar * buffer,
    const char * filename)
    +

    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

    +
    ctxt:an XML parser context
    buffer:a xmlChar * buffer
    filename:a file name
    +
    +

    xmlStopParser ()

    void	xmlStopParser			(xmlParserCtxtPtr ctxt)
    +

    Blocks further parser processing

    +
    ctxt:an XML parser context
    +
    + +
    +
    +
    + + diff --git a/doc/devhelp/libxml2-parserInternals.html b/doc/devhelp/libxml2-parserInternals.html new file mode 100644 index 0000000..915ad5b --- /dev/null +++ b/doc/devhelp/libxml2-parserInternals.html @@ -0,0 +1,688 @@ + + + + + parserInternals: internals routines and limits exported by the parser. + + + + + + + + + + + + + + + + +

    + parserInternals +

    +

    parserInternals - internals routines and limits exported by the parser.

    +

    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.

    +

    Author(s): Daniel Veillard

    +
    +

    Synopsis

    +
    #define XML_SUBSTITUTE_REF;
    +#define IS_BLANK(c);
    +#define IS_BYTE_CHAR(c);
    +#define IS_PUBIDCHAR(c);
    +#define IS_DIGIT_CH(c);
    +#define IS_EXTENDER(c);
    +#define IS_ASCII_DIGIT(c);
    +#define IS_COMBINING_CH(c);
    +#define IS_CHAR(c);
    +#define IS_LETTER(c);
    +#define IS_IDEOGRAPHIC(c);
    +#define MOVETO_STARTTAG(p);
    +#define XML_MAX_NAME_LENGTH;
    +#define IS_ASCII_LETTER(c);
    +#define IS_DIGIT(c);
    +#define XML_MAX_DICTIONARY_LIMIT;
    +#define XML_SUBSTITUTE_PEREF;
    +#define MOVETO_ENDTAG(p);
    +#define SKIP_EOL(p);
    +#define IS_EXTENDER_CH(c);
    +#define IS_BLANK_CH(c);
    +#define IS_LETTER_CH(c);
    +#define XML_MAX_LOOKUP_LIMIT;
    +#define XML_MAX_TEXT_LENGTH;
    +#define XML_SUBSTITUTE_NONE;
    +#define IS_COMBINING(c);
    +#define XML_MAX_NAMELEN;
    +#define IS_BASECHAR(c);
    +#define INPUT_CHUNK;
    +#define IS_PUBIDCHAR_CH(c);
    +#define IS_CHAR_CH(c);
    +#define XML_SUBSTITUTE_BOTH;
    +xmlNodePtr	nodePop			(xmlParserCtxtPtr ctxt);
    +void	xmlParseNotationDecl		(xmlParserCtxtPtr ctxt);
    +void	xmlParseExternalSubset		(xmlParserCtxtPtr ctxt, 
    const xmlChar * ExternalID,
    const xmlChar * SystemID); +void xmlParseMisc (xmlParserCtxtPtr ctxt); +int xmlSwitchInputEncoding (xmlParserCtxtPtr ctxt,
    xmlParserInputPtr input,
    xmlCharEncodingHandlerPtr handler); +xmlParserInputPtr xmlNewStringInputStream (xmlParserCtxtPtr ctxt,
    const xmlChar * buffer); +xmlChar * xmlParseExternalID (xmlParserCtxtPtr ctxt,
    xmlChar ** publicID,
    int strict); +xmlChar * xmlScanName (xmlParserCtxtPtr ctxt); +int xmlParseElementDecl (xmlParserCtxtPtr ctxt); +void xmlParseMarkupDecl (xmlParserCtxtPtr ctxt); +htmlParserCtxtPtr htmlCreateFileParserCtxt (const char * filename,
    const char * encoding); +int inputPush (xmlParserCtxtPtr ctxt,
    xmlParserInputPtr value); +xmlChar * xmlStringLenDecodeEntities (xmlParserCtxtPtr ctxt,
    const xmlChar * str,
    int len,
    int what,
    xmlChar end,
    xmlChar end2,
    xmlChar end3); +const xmlChar * namePop (xmlParserCtxtPtr ctxt); +void xmlParseContent (xmlParserCtxtPtr ctxt); +xmlParserInputPtr xmlNewInputStream (xmlParserCtxtPtr ctxt); +xmlChar * xmlNamespaceParseQName (xmlParserCtxtPtr ctxt,
    xmlChar ** prefix); +xmlParserInputPtr xmlNewInputFromFile (xmlParserCtxtPtr ctxt,
    const char * filename); +void xmlParserHandlePEReference (xmlParserCtxtPtr ctxt); +xmlChar * xmlStringDecodeEntities (xmlParserCtxtPtr ctxt,
    const xmlChar * str,
    int what,
    xmlChar end,
    xmlChar end2,
    xmlChar end3); +xmlParserCtxtPtr xmlCreateFileParserCtxt (const char * filename); +int xmlParseCharRef (xmlParserCtxtPtr ctxt); +void xmlParseElement (xmlParserCtxtPtr ctxt); +void xmlParseTextDecl (xmlParserCtxtPtr ctxt); +xmlParserInputPtr xmlNewEntityInputStream (xmlParserCtxtPtr ctxt,
    xmlEntityPtr entity); +int xmlCopyCharMultiByte (xmlChar * out,
    int val); +xmlElementContentPtr xmlParseElementChildrenContentDecl (xmlParserCtxtPtr ctxt,
    int inputchk); +void xmlParseCharData (xmlParserCtxtPtr ctxt,
    int cdata); +xmlChar * xmlParseVersionInfo (xmlParserCtxtPtr ctxt); +int xmlParseSDDecl (xmlParserCtxtPtr ctxt); +int xmlParseEnumeratedType (xmlParserCtxtPtr ctxt,
    xmlEnumerationPtr * tree); +void xmlHandleEntity (xmlParserCtxtPtr ctxt,
    xmlEntityPtr entity); +int xmlCurrentChar (xmlParserCtxtPtr ctxt,
    int * len); +int xmlSkipBlankChars (xmlParserCtxtPtr ctxt); +xmlEnumerationPtr xmlParseNotationType (xmlParserCtxtPtr ctxt); +void xmlParserInputShrink (xmlParserInputPtr in); +void xmlSetEntityReferenceFunc (xmlEntityReferenceFunc func); +void xmlFreeInputStream (xmlParserInputPtr input); +void xmlParsePEReference (xmlParserCtxtPtr ctxt); +xmlParserCtxtPtr xmlCreateURLParserCtxt (const char * filename,
    int options); +int xmlIsLetter (int c); +int xmlCheckLanguageID (const xmlChar * lang); +void xmlNextChar (xmlParserCtxtPtr ctxt); +xmlEnumerationPtr xmlParseEnumerationType (xmlParserCtxtPtr ctxt); +int xmlParseAttributeType (xmlParserCtxtPtr ctxt,
    xmlEnumerationPtr * tree); +int xmlParseDefaultDecl (xmlParserCtxtPtr ctxt,
    xmlChar ** value); +xmlChar * xmlParseSystemLiteral (xmlParserCtxtPtr ctxt); +xmlChar * xmlParseAttValue (xmlParserCtxtPtr ctxt); +xmlParserCtxtPtr xmlCreateMemoryParserCtxt (const char * buffer,
    int size); +void xmlParseAttributeListDecl (xmlParserCtxtPtr ctxt); +const xmlChar * xmlParseName (xmlParserCtxtPtr ctxt); +xmlChar * xmlParseEncName (xmlParserCtxtPtr ctxt); +int nodePush (xmlParserCtxtPtr ctxt,
    xmlNodePtr value); +int xmlSwitchEncoding (xmlParserCtxtPtr ctxt,
    xmlCharEncoding enc); +int xmlSwitchToEncoding (xmlParserCtxtPtr ctxt,
    xmlCharEncodingHandlerPtr handler); +xmlEntityPtr xmlParseEntityRef (xmlParserCtxtPtr ctxt); +const xmlChar * xmlParseAttribute (xmlParserCtxtPtr ctxt,
    xmlChar ** value); +void xmlParseEndTag (xmlParserCtxtPtr ctxt); +const xmlChar * xmlParseEncodingDecl (xmlParserCtxtPtr ctxt); +void htmlInitAutoClose (void); +xmlParserCtxtPtr xmlCreateEntityParserCtxt (const xmlChar * URL,
    const xmlChar * ID,
    const xmlChar * base); +xmlChar * xmlSplitQName (xmlParserCtxtPtr ctxt,
    const xmlChar * name,
    xmlChar ** prefix); +void xmlParserHandleReference (xmlParserCtxtPtr ctxt); +const xmlChar * xmlParsePITarget (xmlParserCtxtPtr ctxt); +int xmlParseElementContentDecl (xmlParserCtxtPtr ctxt,
    const xmlChar * name,
    xmlElementContentPtr * result); +xmlParserInputPtr inputPop (xmlParserCtxtPtr ctxt); +xmlChar xmlPopInput (xmlParserCtxtPtr ctxt); +xmlChar * xmlParsePubidLiteral (xmlParserCtxtPtr ctxt); +int xmlPushInput (xmlParserCtxtPtr ctxt,
    xmlParserInputPtr input); +xmlChar * xmlParseEntityValue (xmlParserCtxtPtr ctxt,
    xmlChar ** orig); +xmlChar * xmlDecodeEntities (xmlParserCtxtPtr ctxt,
    int len,
    int what,
    xmlChar end,
    xmlChar end2,
    xmlChar end3); +xmlChar * xmlParseVersionNum (xmlParserCtxtPtr ctxt); +void xmlParseXMLDecl (xmlParserCtxtPtr ctxt); +typedef void xmlEntityReferenceFunc (xmlEntityPtr ent,
    xmlNodePtr firstNode,
    xmlNodePtr lastNode); +xmlElementContentPtr xmlParseElementMixedContentDecl (xmlParserCtxtPtr ctxt,
    int inputchk); +xmlChar * xmlParseQuotedString (xmlParserCtxtPtr ctxt); +xmlChar * xmlNamespaceParseNSDef (xmlParserCtxtPtr ctxt); +void xmlParseCDSect (xmlParserCtxtPtr ctxt); +int xmlStringCurrentChar (xmlParserCtxtPtr ctxt,
    const xmlChar * cur,
    int * len); +void xmlParseComment (xmlParserCtxtPtr ctxt); +void xmlErrMemory (xmlParserCtxtPtr ctxt,
    const char * extra); +xmlChar * xmlNamespaceParseNCName (xmlParserCtxtPtr ctxt); +xmlChar * xmlParseNmtoken (xmlParserCtxtPtr ctxt); +void xmlParseReference (xmlParserCtxtPtr ctxt); +int namePush (xmlParserCtxtPtr ctxt,
    const xmlChar * value); +void xmlParseNamespace (xmlParserCtxtPtr ctxt); +int xmlCopyChar (int len,
    xmlChar * out,
    int val); +void xmlParsePI (xmlParserCtxtPtr ctxt); +void xmlParseDocTypeDecl (xmlParserCtxtPtr ctxt); +const xmlChar * xmlParseStartTag (xmlParserCtxtPtr ctxt); +void xmlParseEntityDecl (xmlParserCtxtPtr ctxt); +
    +
    +
    +

    Description

    +
    +
    +

    Details

    +
    +

    Macro INPUT_CHUNK

    #define INPUT_CHUNK;
    +

    The parser tries to always have that amount of input ready. One of the point is providing context when reporting errors.

    +
    +
    +

    Macro IS_ASCII_DIGIT

    #define IS_ASCII_DIGIT(c);
    +

    Macro to check [0-9]

    c:an xmlChar value
    +
    +
    +

    Macro IS_ASCII_LETTER

    #define IS_ASCII_LETTER(c);
    +

    Macro to check [a-zA-Z]

    c:an xmlChar value
    +
    +
    +

    Macro IS_BASECHAR

    #define IS_BASECHAR(c);
    +

    Macro to check the following production in the XML spec: [85] BaseChar ::= ... long list see REC ...

    c:an UNICODE value (int)
    +
    +
    +

    Macro IS_BLANK

    #define IS_BLANK(c);
    +

    Macro to check the following production in the XML spec: [3] S ::= (#x20 | #x9 | #xD | #xA)+

    c:an UNICODE value (int)
    +
    +
    +

    Macro IS_BLANK_CH

    #define IS_BLANK_CH(c);
    +

    Behaviour same as IS_BLANK

    c:an xmlChar value (normally unsigned char)
    +
    +
    +

    Macro IS_BYTE_CHAR

    #define IS_BYTE_CHAR(c);
    +

    Macro to check the following production in the XML spec: [2] Char ::= #x9 | #xA | #xD | [#x20...] any byte character in the accepted range

    c:an byte value (int)
    +
    +
    +

    Macro IS_CHAR

    #define IS_CHAR(c);
    +

    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.

    c:an UNICODE value (int)
    +
    +
    +

    Macro IS_CHAR_CH

    #define IS_CHAR_CH(c);
    +

    Behaves like IS_CHAR on single-byte value

    c:an xmlChar (usually an unsigned char)
    +
    +
    +

    Macro IS_COMBINING

    #define IS_COMBINING(c);
    +

    Macro to check the following production in the XML spec: [87] CombiningChar ::= ... long list see REC ...

    c:an UNICODE value (int)
    +
    +
    +

    Macro IS_COMBINING_CH

    #define IS_COMBINING_CH(c);
    +

    Always false (all combining chars > 0xff)

    c:an xmlChar (usually an unsigned char)
    +
    +
    +

    Macro IS_DIGIT

    #define IS_DIGIT(c);
    +

    Macro to check the following production in the XML spec: [88] Digit ::= ... long list see REC ...

    c:an UNICODE value (int)
    +
    +
    +

    Macro IS_DIGIT_CH

    #define IS_DIGIT_CH(c);
    +

    Behaves like IS_DIGIT but with a single byte argument

    c:an xmlChar value (usually an unsigned char)
    +
    +
    +

    Macro IS_EXTENDER

    #define IS_EXTENDER(c);
    +

    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]

    c:an UNICODE value (int)
    +
    +
    +

    Macro IS_EXTENDER_CH

    #define IS_EXTENDER_CH(c);
    +

    Behaves like IS_EXTENDER but with a single-byte argument

    c:an xmlChar value (usually an unsigned char)
    +
    +
    +

    Macro IS_IDEOGRAPHIC

    #define IS_IDEOGRAPHIC(c);
    +

    Macro to check the following production in the XML spec: [86] Ideographic ::= [#x4E00-#x9FA5] | #x3007 | [#x3021-#x3029]

    c:an UNICODE value (int)
    +
    +
    +

    Macro IS_LETTER

    #define IS_LETTER(c);
    +

    Macro to check the following production in the XML spec: [84] Letter ::= BaseChar | Ideographic

    c:an UNICODE value (int)
    +
    +
    +

    Macro IS_LETTER_CH

    #define IS_LETTER_CH(c);
    +

    Macro behaves like IS_LETTER, but only check base chars

    c:an xmlChar value (normally unsigned char)
    +
    +
    +

    Macro IS_PUBIDCHAR

    #define IS_PUBIDCHAR(c);
    +

    Macro to check the following production in the XML spec: [13] PubidChar ::= #x20 | #xD | #xA | [a-zA-Z0-9] | [-'()+,./:=?;!*#@$_%]

    c:an UNICODE value (int)
    +
    +
    +

    Macro IS_PUBIDCHAR_CH

    #define IS_PUBIDCHAR_CH(c);
    +

    Same as IS_PUBIDCHAR but for single-byte value

    c:an xmlChar value (normally unsigned char)
    +
    +
    +

    Macro MOVETO_ENDTAG

    #define MOVETO_ENDTAG(p);
    +

    Skips to the next '>' char.

    p:and UTF8 string pointer
    +
    +
    +

    Macro MOVETO_STARTTAG

    #define MOVETO_STARTTAG(p);
    +

    Skips to the next '<' char.

    p:and UTF8 string pointer
    +
    +
    +

    Macro SKIP_EOL

    #define SKIP_EOL(p);
    +

    Skips the end of line chars.

    p:and UTF8 string pointer
    +
    +
    +

    Macro XML_MAX_DICTIONARY_LIMIT

    #define XML_MAX_DICTIONARY_LIMIT;
    +

    Maximum size allowed by the parser for a dictionary by default This is not a limitation of the parser but a safety boundary feature, use XML_PARSE_HUGE option to override it. Introduced in 2.9.0

    +
    +
    +

    Macro XML_MAX_LOOKUP_LIMIT

    #define XML_MAX_LOOKUP_LIMIT;
    +

    Maximum size allowed by the parser for ahead lookup This is an upper boundary enforced by the parser to avoid bad behaviour on "unfriendly' content Introduced in 2.9.0

    +
    +
    +

    Macro XML_MAX_NAMELEN

    #define XML_MAX_NAMELEN;
    +

    Identifiers can be longer, but this will be more costly at runtime.

    +
    +
    +

    Macro XML_MAX_NAME_LENGTH

    #define XML_MAX_NAME_LENGTH;
    +

    Maximum size allowed for a markup identitier This is not a limitation of the parser but a safety boundary feature, use XML_PARSE_HUGE option to override it. Note that with the use of parsing dictionaries overriding the limit may result in more runtime memory usage in face of "unfriendly' content Introduced in 2.9.0

    +
    +
    +

    Macro XML_MAX_TEXT_LENGTH

    #define XML_MAX_TEXT_LENGTH;
    +

    Maximum size allowed for a single text node when building a tree. This is not a limitation of the parser but a safety boundary feature, use XML_PARSE_HUGE option to override it. Introduced in 2.9.0

    +
    +
    +

    Macro XML_SUBSTITUTE_BOTH

    #define XML_SUBSTITUTE_BOTH;
    +

    Both general and parameter entities need to be substituted.

    +
    +
    +

    Macro XML_SUBSTITUTE_NONE

    #define XML_SUBSTITUTE_NONE;
    +

    If no entities need to be substituted.

    +
    +
    +

    Macro XML_SUBSTITUTE_PEREF

    #define XML_SUBSTITUTE_PEREF;
    +

    Whether parameter entities need to be substituted.

    +
    +
    +

    Macro XML_SUBSTITUTE_REF

    #define XML_SUBSTITUTE_REF;
    +

    Whether general entities need to be substituted.

    +
    +
    +

    Function type xmlEntityReferenceFunc

    void	xmlEntityReferenceFunc		(xmlEntityPtr ent, 
    xmlNodePtr firstNode,
    xmlNodePtr lastNode)
    +

    Callback function used when one needs to be able to track back the provenance of a chunk of nodes inherited from an entity replacement.

    +
    ent:the entity
    firstNode:the fist node in the chunk
    lastNode:the last nod in the chunk
    +
    +

    Variable xmlParserMaxDepth

    unsigned int xmlParserMaxDepth;
    +

    +

    +
    +

    Variable xmlStringComment

    const xmlCharxmlStringComment[] xmlStringComment;
    +

    +

    +
    +

    Variable xmlStringText

    const xmlCharxmlStringText[] xmlStringText;
    +

    +

    +
    +

    Variable xmlStringTextNoenc

    const xmlCharxmlStringTextNoenc[] xmlStringTextNoenc;
    +

    +

    +
    +

    htmlCreateFileParserCtxt ()

    htmlParserCtxtPtr	htmlCreateFileParserCtxt	(const char * filename, 
    const char * encoding)
    +

    Create a parser context for a file content. Automatic support for ZLIB/Compress compressed document is provided by default if found at compile-time.

    +
    filename:the filename
    encoding:a free form C string describing the HTML document encoding, or NULL
    Returns:the new parser context or NULL
    +
    + +
    +

    inputPop ()

    xmlParserInputPtr	inputPop	(xmlParserCtxtPtr ctxt)
    +

    Pops the top parser input from the input stack

    +
    ctxt:an XML parser context
    Returns:the input just removed
    +
    +

    inputPush ()

    int	inputPush			(xmlParserCtxtPtr ctxt, 
    xmlParserInputPtr value)
    +

    Pushes a new parser input on top of the input stack

    +
    ctxt:an XML parser context
    value:the parser input
    Returns:-1 in case of error, the index in the stack otherwise
    +
    +

    namePop ()

    const xmlChar *	namePop			(xmlParserCtxtPtr ctxt)
    +

    Pops the top element name from the name stack

    +
    ctxt:an XML parser context
    Returns:the name just removed
    +
    +

    namePush ()

    int	namePush			(xmlParserCtxtPtr ctxt, 
    const xmlChar * value)
    +

    Pushes a new element name on top of the name stack

    +
    ctxt:an XML parser context
    value:the element name
    Returns:-1 in case of error, the index in the stack otherwise
    +
    +

    nodePop ()

    xmlNodePtr	nodePop			(xmlParserCtxtPtr ctxt)
    +

    Pops the top element node from the node stack

    +
    ctxt:an XML parser context
    Returns:the node just removed
    +
    +

    nodePush ()

    int	nodePush			(xmlParserCtxtPtr ctxt, 
    xmlNodePtr value)
    +

    Pushes a new element node on top of the node stack

    +
    ctxt:an XML parser context
    value:the element node
    Returns:-1 in case of error, the index in the stack otherwise
    +
    +

    xmlCheckLanguageID ()

    int	xmlCheckLanguageID		(const xmlChar * lang)
    +

    Checks that the value conforms to the LanguageID production: NOTE: this is somewhat deprecated, those productions were removed from the XML Second edition. [33] LanguageID ::= Langcode ('-' Subcode)* [34] Langcode ::= ISO639Code | IanaCode | UserCode [35] ISO639Code ::= ([a-z] | [A-Z]) ([a-z] | [A-Z]) [36] IanaCode ::= ('i' | 'I') '-' ([a-z] | [A-Z])+ [37] UserCode ::= ('x' | 'X') '-' ([a-z] | [A-Z])+ [38] Subcode ::= ([a-z] | [A-Z])+ The current REC reference the sucessors of RFC 1766, currently 5646 http://www.rfc-editor.org/rfc/rfc5646.txt langtag = language ["-" script] ["-" region] *("-" variant) *("-" extension) ["-" privateuse] language = 2*3ALPHA ; shortest ISO 639 code ["-" extlang] ; sometimes followed by ; extended language subtags / 4ALPHA ; or reserved for future use / 5*8ALPHA ; or registered language subtag extlang = 3ALPHA ; selected ISO 639 codes *2("-" 3ALPHA) ; permanently reserved script = 4ALPHA ; ISO 15924 code region = 2ALPHA ; ISO 3166-1 code / 3DIGIT ; UN M.49 code variant = 5*8alphanum ; registered variants / (DIGIT 3alphanum) extension = singleton 1*("-" (2*8alphanum)) ; Single alphanumerics ; "x" reserved for private use singleton = DIGIT ; 0 - 9 / %x41-57 ; A - W / %x59-5A ; Y - Z / %x61-77 ; a - w / %x79-7A ; y - z it sounds right to still allow Irregular i-xxx IANA and user codes too The parser below doesn't try to cope with extension or privateuse that could be added but that's not interoperable anyway

    +
    lang:pointer to the string value
    Returns:1 if correct 0 otherwise
    +
    +

    xmlCopyChar ()

    int	xmlCopyChar			(int len, 
    xmlChar * out,
    int val)
    +

    append the char value in the array

    +
    len:Ignored, compatibility
    out:pointer to an array of xmlChar
    val:the char value
    Returns:the number of xmlChar written
    +
    +

    xmlCopyCharMultiByte ()

    int	xmlCopyCharMultiByte		(xmlChar * out, 
    int val)
    +

    append the char value in the array

    +
    out:pointer to an array of xmlChar
    val:the char value
    Returns:the number of xmlChar written
    +
    +

    xmlCreateEntityParserCtxt ()

    xmlParserCtxtPtr	xmlCreateEntityParserCtxt	(const xmlChar * URL, 
    const xmlChar * ID,
    const xmlChar * base)
    +

    Create a parser context for an external entity Automatic support for ZLIB/Compress compressed document is provided by default if found at compile-time.

    +
    URL:the entity URL
    ID:the entity PUBLIC ID
    base:a possible base for the target URI
    Returns:the new parser context or NULL
    +
    +

    xmlCreateFileParserCtxt ()

    xmlParserCtxtPtr	xmlCreateFileParserCtxt	(const char * 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.

    +
    filename:the filename
    Returns:the new parser context or NULL
    +
    +

    xmlCreateMemoryParserCtxt ()

    xmlParserCtxtPtr	xmlCreateMemoryParserCtxt	(const char * buffer, 
    int size)
    +

    Create a parser context for an XML in-memory document.

    +
    buffer:a pointer to a char array
    size:the size of the array
    Returns:the new parser context or NULL
    +
    +

    xmlCreateURLParserCtxt ()

    xmlParserCtxtPtr	xmlCreateURLParserCtxt	(const char * filename, 
    int options)
    +

    Create a parser context for a file or URL content. Automatic support for ZLIB/Compress compressed document is provided by default if found at compile-time and for file accesses

    +
    filename:the filename or URL
    options:a combination of xmlParserOption
    Returns:the new parser context or NULL
    +
    +

    xmlCurrentChar ()

    int	xmlCurrentChar			(xmlParserCtxtPtr ctxt, 
    int * len)
    +

    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.)

    +
    ctxt:the XML parser context
    len:pointer to the length of the char read
    Returns:the current char value and its length
    +
    +

    xmlDecodeEntities ()

    xmlChar *	xmlDecodeEntities	(xmlParserCtxtPtr ctxt, 
    int len,
    int what,
    xmlChar end,
    xmlChar end2,
    xmlChar end3)
    +

    This function is deprecated, we now always process entities content through xmlStringDecodeEntities TODO: remove it in next major release. [67] Reference ::= EntityRef | CharRef [69] PEReference ::= '%' Name ';'

    +
    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
    Returns:A newly allocated string with the substitution done. The caller must deallocate it !
    +
    +

    xmlErrMemory ()

    void	xmlErrMemory			(xmlParserCtxtPtr ctxt, 
    const char * extra)
    +

    Handle a redefinition of attribute error

    +
    ctxt:an XML parser context
    extra:extra informations
    +
    + +
    +

    xmlHandleEntity ()

    void	xmlHandleEntity			(xmlParserCtxtPtr ctxt, 
    xmlEntityPtr entity)
    +

    Default handling of defined entities, when should we define a new input stream ? When do we just handle that as a set of chars ? OBSOLETE: to be removed at some point.

    +
    ctxt:an XML parser context
    entity:an XML entity pointer.
    +
    + +
    +

    xmlNamespaceParseNCName ()

    xmlChar *	xmlNamespaceParseNCName	(xmlParserCtxtPtr ctxt)
    +

    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

    +
    ctxt:an XML parser context
    Returns:the namespace name or NULL
    +
    +

    xmlNamespaceParseNSDef ()

    xmlChar *	xmlNamespaceParseNSDef	(xmlParserCtxtPtr ctxt)
    +

    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)?

    +
    ctxt:an XML parser context
    Returns:the namespace name
    +
    +

    xmlNamespaceParseQName ()

    xmlChar *	xmlNamespaceParseQName	(xmlParserCtxtPtr ctxt, 
    xmlChar ** prefix)
    +

    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

    +
    ctxt:an XML parser context
    prefix:a xmlChar **
    Returns:the local part, and prefix is updated to get the Prefix if any.
    +
    +

    xmlNewEntityInputStream ()

    xmlParserInputPtr	xmlNewEntityInputStream	(xmlParserCtxtPtr ctxt, 
    xmlEntityPtr entity)
    +

    Create a new input stream based on an xmlEntityPtr

    +
    ctxt:an XML parser context
    entity:an Entity pointer
    Returns:the new input stream or NULL
    +
    +

    xmlNewInputFromFile ()

    xmlParserInputPtr	xmlNewInputFromFile	(xmlParserCtxtPtr ctxt, 
    const char * filename)
    +

    Create a new input stream based on a file or an URL.

    +
    ctxt:an XML parser context
    filename:the filename to use as entity
    Returns:the new input stream or NULL in case of error
    +
    +

    xmlNewInputStream ()

    xmlParserInputPtr	xmlNewInputStream	(xmlParserCtxtPtr ctxt)
    +

    Create a new input stream structure.

    +
    ctxt:an XML parser context
    Returns:the new input stream or NULL
    +
    +

    xmlNewStringInputStream ()

    xmlParserInputPtr	xmlNewStringInputStream	(xmlParserCtxtPtr ctxt, 
    const xmlChar * buffer)
    +

    Create a new input stream based on a memory buffer.

    +
    ctxt:an XML parser context
    buffer:an memory buffer
    Returns:the new input stream
    +
    +

    xmlNextChar ()

    void	xmlNextChar			(xmlParserCtxtPtr ctxt)
    +

    Skip to the next char input char.

    +
    ctxt:the XML parser context
    +
    +

    xmlParseAttValue ()

    xmlChar *	xmlParseAttValue	(xmlParserCtxtPtr ctxt)
    +

    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.

    +
    ctxt:an XML parser context
    Returns:the AttValue parsed or NULL. The value has to be freed by the caller.
    +
    +

    xmlParseAttribute ()

    const xmlChar *	xmlParseAttribute	(xmlParserCtxtPtr ctxt, 
    xmlChar ** value)
    +

    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.

    +
    ctxt:an XML parser context
    value:a xmlChar ** used to store the value of the attribute
    Returns:the attribute name, and the value in *value.
    +
    +

    xmlParseAttributeListDecl ()

    void	xmlParseAttributeListDecl	(xmlParserCtxtPtr ctxt)
    +

    : parse the Attribute list def for an element [52] AttlistDecl ::= '<!ATTLIST' S Name AttDef* S? '>' [53] AttDef ::= S Name S AttType S DefaultDecl

    +
    ctxt:an XML parser context
    +
    +

    xmlParseAttributeType ()

    int	xmlParseAttributeType		(xmlParserCtxtPtr ctxt, 
    xmlEnumerationPtr * tree)
    +

    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.

    +
    ctxt:an XML parser context
    tree:the enumeration tree built while parsing
    Returns:the attribute type
    +
    +

    xmlParseCDSect ()

    void	xmlParseCDSect			(xmlParserCtxtPtr ctxt)
    +

    Parse escaped pure raw content. [18] CDSect ::= CDStart CData CDEnd [19] CDStart ::= '<![CDATA[' [20] Data ::= (Char* - (Char* ']]>' Char*)) [21] CDEnd ::= ']]>'

    +
    ctxt:an XML parser context
    +
    +

    xmlParseCharData ()

    void	xmlParseCharData		(xmlParserCtxtPtr ctxt, 
    int cdata)
    +

    parse a CharData section. if we are within a CDATA section ']]>' marks an end of section. The right angle bracket (>) may be represented using the string "&gt;", and must, for compatibility, be escaped using "&gt;" or a character reference when it appears in the string "]]>" in content, when that string is not marking the end of a CDATA section. [14] CharData ::= [^<&]* - ([^<&]* ']]>' [^<&]*)

    +
    ctxt:an XML parser context
    cdata:int indicating whether we are within a CDATA section
    +
    +

    xmlParseCharRef ()

    int	xmlParseCharRef			(xmlParserCtxtPtr ctxt)
    +

    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.

    +
    ctxt:an XML parser context
    Returns:the value parsed (as an int), 0 in case of error
    +
    +

    xmlParseComment ()

    void	xmlParseComment			(xmlParserCtxtPtr ctxt)
    +

    Skip an XML (SGML) comment <!-- .... --> The spec says that "For compatibility, the string "--" (double-hyphen) must not occur within comments. " [15] Comment ::= '<!--' ((Char - '-') | ('-' (Char - '-')))* '-->'

    +
    ctxt:an XML parser context
    +
    +

    xmlParseContent ()

    void	xmlParseContent			(xmlParserCtxtPtr ctxt)
    +

    Parse a content: [43] content ::= (element | CharData | Reference | CDSect | PI | Comment)*

    +
    ctxt:an XML parser context
    +
    +

    xmlParseDefaultDecl ()

    int	xmlParseDefaultDecl		(xmlParserCtxtPtr ctxt, 
    xmlChar ** value)
    +

    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()

    +
    ctxt:an XML parser context
    value:Receive a possible fixed default value for the attribute
    Returns:XML_ATTRIBUTE_NONE, XML_ATTRIBUTE_REQUIRED, XML_ATTRIBUTE_IMPLIED or XML_ATTRIBUTE_FIXED.
    +
    +

    xmlParseDocTypeDecl ()

    void	xmlParseDocTypeDecl		(xmlParserCtxtPtr ctxt)
    +

    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.

    +
    ctxt:an XML parser context
    +
    +

    xmlParseElement ()

    void	xmlParseElement			(xmlParserCtxtPtr ctxt)
    +

    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.

    +
    ctxt:an XML parser context
    +
    +

    xmlParseElementChildrenContentDecl ()

    xmlElementContentPtr	xmlParseElementChildrenContentDecl	(xmlParserCtxtPtr ctxt, 
    int inputchk)
    +

    parse the declaration for a Mixed Element content The leading '(' and spaces have been skipped in xmlParseElementContentDecl [47] children ::= (choice | seq) ('?' | '*' | '+')? [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 ,).

    +
    ctxt:an XML parser context
    inputchk:the input used for the current entity, needed for boundary checks
    Returns:the tree of xmlElementContentPtr describing the element hierarchy.
    +
    +

    xmlParseElementContentDecl ()

    int	xmlParseElementContentDecl	(xmlParserCtxtPtr ctxt, 
    const xmlChar * name,
    xmlElementContentPtr * result)
    +

    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

    +
    ctxt:an XML parser context
    name:the name of the element being defined.
    result:the Element Content pointer will be stored here if any
    Returns:the type of element content XML_ELEMENT_TYPE_xxx
    +
    +

    xmlParseElementDecl ()

    int	xmlParseElementDecl		(xmlParserCtxtPtr ctxt)
    +

    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

    +
    ctxt:an XML parser context
    Returns:the type of the element, or -1 in case of error
    +
    +

    xmlParseElementMixedContentDecl ()

    xmlElementContentPtr	xmlParseElementMixedContentDecl	(xmlParserCtxtPtr ctxt, 
    int inputchk)
    +

    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.

    +
    ctxt:an XML parser context
    inputchk:the input used for the current entity, needed for boundary checks
    Returns:the list of the xmlElementContentPtr describing the element choices
    +
    +

    xmlParseEncName ()

    xmlChar *	xmlParseEncName		(xmlParserCtxtPtr ctxt)
    +

    parse the XML encoding name [81] EncName ::= [A-Za-z] ([A-Za-z0-9._] | '-')*

    +
    ctxt:an XML parser context
    Returns:the encoding name value or NULL
    +
    +

    xmlParseEncodingDecl ()

    const xmlChar *	xmlParseEncodingDecl	(xmlParserCtxtPtr ctxt)
    +

    parse the XML encoding declaration [80] EncodingDecl ::= S 'encoding' Eq ('"' EncName '"' | "'" EncName "'") this setups the conversion filters.

    +
    ctxt:an XML parser context
    Returns:the encoding value or NULL
    +
    +

    xmlParseEndTag ()

    void	xmlParseEndTag			(xmlParserCtxtPtr ctxt)
    +

    parse an end of tag [42] ETag ::= '</' Name S? '>' With namespace [NS 9] ETag ::= '</' QName S? '>'

    +
    ctxt:an XML parser context
    +
    +

    xmlParseEntityDecl ()

    void	xmlParseEntityDecl		(xmlParserCtxtPtr ctxt)
    +

    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.

    +
    ctxt:an XML parser context
    +
    +

    xmlParseEntityRef ()

    xmlEntityPtr	xmlParseEntityRef	(xmlParserCtxtPtr ctxt)
    +

    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

    +
    ctxt:an XML parser context
    Returns:the xmlEntityPtr if found, or NULL otherwise.
    +
    +

    xmlParseEntityValue ()

    xmlChar *	xmlParseEntityValue	(xmlParserCtxtPtr ctxt, 
    xmlChar ** orig)
    +

    parse a value for ENTITY declarations [9] EntityValue ::= '"' ([^%&"] | PEReference | Reference)* '"' | "'" ([^%&'] | PEReference | Reference)* "'"

    +
    ctxt:an XML parser context
    orig:if non-NULL store a copy of the original entity value
    Returns:the EntityValue parsed with reference substituted or NULL
    +
    +

    xmlParseEnumeratedType ()

    int	xmlParseEnumeratedType		(xmlParserCtxtPtr ctxt, 
    xmlEnumerationPtr * tree)
    +

    parse an Enumerated attribute type. [57] EnumeratedType ::= NotationType | Enumeration [58] NotationType ::= 'NOTATION' S '(' S? Name (S? '|' S? Name)* S? ')'

    +
    ctxt:an XML parser context
    tree:the enumeration tree built while parsing
    Returns:XML_ATTRIBUTE_ENUMERATION or XML_ATTRIBUTE_NOTATION
    +
    +

    xmlParseEnumerationType ()

    xmlEnumerationPtr	xmlParseEnumerationType	(xmlParserCtxtPtr ctxt)
    +

    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

    +
    ctxt:an XML parser context
    Returns:the enumeration attribute tree built while parsing
    +
    +

    xmlParseExternalID ()

    xmlChar *	xmlParseExternalID	(xmlParserCtxtPtr ctxt, 
    xmlChar ** publicID,
    int strict)
    +

    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

    +
    ctxt:an XML parser context
    publicID:a xmlChar** receiving PubidLiteral
    strict:indicate whether we should restrict parsing to only production [75], see NOTE below
    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.
    +
    +

    xmlParseExternalSubset ()

    void	xmlParseExternalSubset		(xmlParserCtxtPtr ctxt, 
    const xmlChar * ExternalID,
    const xmlChar * SystemID)
    +

    parse Markup declarations from an external subset [30] extSubset ::= textDecl? extSubsetDecl [31] extSubsetDecl ::= (markupdecl | conditionalSect | PEReference | S) *

    +
    ctxt:an XML parser context
    ExternalID:the external identifier
    SystemID:the system identifier (or URL)
    +
    +

    xmlParseMarkupDecl ()

    void	xmlParseMarkupDecl		(xmlParserCtxtPtr ctxt)
    +

    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.)

    +
    ctxt:an XML parser context
    +
    +

    xmlParseMisc ()

    void	xmlParseMisc			(xmlParserCtxtPtr ctxt)
    +

    parse an XML Misc* optional field. [27] Misc ::= Comment | PI | S

    +
    ctxt:an XML parser context
    +
    +

    xmlParseName ()

    const xmlChar *	xmlParseName		(xmlParserCtxtPtr ctxt)
    +

    parse an XML name. [4] NameChar ::= Letter | Digit | '.' | '-' | '_' | ':' | CombiningChar | Extender [5] Name ::= (Letter | '_' | ':') (NameChar)* [6] Names ::= Name (#x20 Name)*

    +
    ctxt:an XML parser context
    Returns:the Name parsed or NULL
    +
    +

    xmlParseNamespace ()

    void	xmlParseNamespace		(xmlParserCtxtPtr ctxt)
    +

    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

    +
    ctxt:an XML parser context
    +
    +

    xmlParseNmtoken ()

    xmlChar *	xmlParseNmtoken		(xmlParserCtxtPtr ctxt)
    +

    parse an XML Nmtoken. [7] Nmtoken ::= (NameChar)+ [8] Nmtokens ::= Nmtoken (#x20 Nmtoken)*

    +
    ctxt:an XML parser context
    Returns:the Nmtoken parsed or NULL
    +
    +

    xmlParseNotationDecl ()

    void	xmlParseNotationDecl		(xmlParserCtxtPtr ctxt)
    +

    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().

    +
    ctxt:an XML parser context
    +
    +

    xmlParseNotationType ()

    xmlEnumerationPtr	xmlParseNotationType	(xmlParserCtxtPtr ctxt)
    +

    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.

    +
    ctxt:an XML parser context
    Returns:the notation attribute tree built while parsing
    +
    +

    xmlParsePEReference ()

    void	xmlParsePEReference		(xmlParserCtxtPtr ctxt)
    +

    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.

    +
    ctxt:an XML parser context
    +
    +

    xmlParsePI ()

    void	xmlParsePI			(xmlParserCtxtPtr ctxt)
    +

    parse an XML Processing Instruction. [16] PI ::= '<?' PITarget (S (Char* - (Char* '?>' Char*)))? '?>' The processing is transfered to SAX once parsed.

    +
    ctxt:an XML parser context
    +
    +

    xmlParsePITarget ()

    const xmlChar *	xmlParsePITarget	(xmlParserCtxtPtr ctxt)
    +

    parse the name of a PI [17] PITarget ::= Name - (('X' | 'x') ('M' | 'm') ('L' | 'l'))

    +
    ctxt:an XML parser context
    Returns:the PITarget name or NULL
    +
    +

    xmlParsePubidLiteral ()

    xmlChar *	xmlParsePubidLiteral	(xmlParserCtxtPtr ctxt)
    +

    parse an XML public literal [12] PubidLiteral ::= '"' PubidChar* '"' | "'" (PubidChar - "'")* "'"

    +
    ctxt:an XML parser context
    Returns:the PubidLiteral parsed or NULL.
    +
    +

    xmlParseQuotedString ()

    xmlChar *	xmlParseQuotedString	(xmlParserCtxtPtr ctxt)
    +

    Parse and return a string between quotes or doublequotes TODO: Deprecated, to be removed at next drop of binary compatibility

    +
    ctxt:an XML parser context
    Returns:the string parser or NULL.
    +
    +

    xmlParseReference ()

    void	xmlParseReference		(xmlParserCtxtPtr ctxt)
    +

    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

    +
    ctxt:an XML parser context
    +
    +

    xmlParseSDDecl ()

    int	xmlParseSDDecl			(xmlParserCtxtPtr ctxt)
    +

    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.

    +
    ctxt:an XML parser context
    Returns:1 if standalone="yes" 0 if standalone="no" -2 if standalone attribute is missing or invalid (A standalone value of -2 means that the XML declaration was found, but no value was specified for the standalone attribute).
    +
    +

    xmlParseStartTag ()

    const xmlChar *	xmlParseStartTag	(xmlParserCtxtPtr ctxt)
    +

    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? '/>'

    +
    ctxt:an XML parser context
    Returns:the element name parsed
    +
    +

    xmlParseSystemLiteral ()

    xmlChar *	xmlParseSystemLiteral	(xmlParserCtxtPtr ctxt)
    +

    parse an XML Literal [11] SystemLiteral ::= ('"' [^"]* '"') | ("'" [^']* "'")

    +
    ctxt:an XML parser context
    Returns:the SystemLiteral parsed or NULL
    +
    +

    xmlParseTextDecl ()

    void	xmlParseTextDecl		(xmlParserCtxtPtr ctxt)
    +

    parse an XML declaration header for external entities [77] TextDecl ::= '<?xml' VersionInfo? EncodingDecl S? '?>'

    +
    ctxt:an XML parser context
    +
    +

    xmlParseVersionInfo ()

    xmlChar *	xmlParseVersionInfo	(xmlParserCtxtPtr ctxt)
    +

    parse the XML version. [24] VersionInfo ::= S 'version' Eq (' VersionNum ' | " VersionNum ") [25] Eq ::= S? '=' S?

    +
    ctxt:an XML parser context
    Returns:the version string, e.g. "1.0"
    +
    +

    xmlParseVersionNum ()

    xmlChar *	xmlParseVersionNum	(xmlParserCtxtPtr ctxt)
    +

    parse the XML version value. [26] VersionNum ::= '1.' [0-9]+ In practice allow [0-9].[0-9]+ at that level

    +
    ctxt:an XML parser context
    Returns:the string giving the XML version number, or NULL
    +
    +

    xmlParseXMLDecl ()

    void	xmlParseXMLDecl			(xmlParserCtxtPtr ctxt)
    +

    parse an XML declaration header [23] XMLDecl ::= '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>'

    +
    ctxt:an XML parser context
    +
    +

    xmlParserHandlePEReference ()

    void	xmlParserHandlePEReference	(xmlParserCtxtPtr ctxt)
    +

    [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

    +
    ctxt:the parser context
    +
    +

    xmlParserHandleReference ()

    void	xmlParserHandleReference	(xmlParserCtxtPtr ctxt)
    +

    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

    +
    ctxt:the parser context
    +
    +

    xmlParserInputShrink ()

    void	xmlParserInputShrink		(xmlParserInputPtr in)
    +

    This function removes used input for the parser.

    +
    in:an XML parser input
    +
    +

    xmlPopInput ()

    xmlChar	xmlPopInput			(xmlParserCtxtPtr ctxt)
    +

    xmlPopInput: the current input pointed by ctxt->input came to an end pop it and return the next char.

    +
    ctxt:an XML parser context
    Returns:the current xmlChar in the parser context
    +
    +

    xmlPushInput ()

    int	xmlPushInput			(xmlParserCtxtPtr ctxt, 
    xmlParserInputPtr input)
    +

    xmlPushInput: switch to a new input stream which is stacked on top of the previous one(s).

    +
    ctxt:an XML parser context
    input:an XML parser input fragment (entity, XML fragment ...).
    Returns:-1 in case of error or the index in the input stack
    +
    +

    xmlScanName ()

    xmlChar *	xmlScanName		(xmlParserCtxtPtr ctxt)
    +

    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)*

    +
    ctxt:an XML parser context
    Returns:the Name parsed or NULL
    +
    +

    xmlSetEntityReferenceFunc ()

    void	xmlSetEntityReferenceFunc	(xmlEntityReferenceFunc func)
    +

    Set the function to call call back when a xml reference has been made

    +
    func:A valid function
    +
    +

    xmlSkipBlankChars ()

    int	xmlSkipBlankChars		(xmlParserCtxtPtr ctxt)
    +

    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.

    +
    ctxt:the XML parser context
    Returns:the number of space chars skipped
    +
    +

    xmlSplitQName ()

    xmlChar *	xmlSplitQName		(xmlParserCtxtPtr ctxt, 
    const xmlChar * name,
    xmlChar ** prefix)
    +

    parse an UTF8 encoded XML qualified name string [NS 5] QName ::= (Prefix ':')? LocalPart [NS 6] Prefix ::= NCName [NS 7] LocalPart ::= NCName

    +
    ctxt:an XML parser context
    name:an XML parser context
    prefix:a xmlChar **
    Returns:the local part, and prefix is updated to get the Prefix if any.
    +
    +

    xmlStringCurrentChar ()

    int	xmlStringCurrentChar		(xmlParserCtxtPtr ctxt, 
    const xmlChar * cur,
    int * len)
    +

    The current char value, if using UTF-8 this may actually span multiple bytes in the input buffer.

    +
    ctxt:the XML parser context
    cur:pointer to the beginning of the char
    len:pointer to the length of the char read
    Returns:the current char value and its length
    +
    +

    xmlStringDecodeEntities ()

    xmlChar *	xmlStringDecodeEntities	(xmlParserCtxtPtr ctxt, 
    const xmlChar * str,
    int what,
    xmlChar end,
    xmlChar end2,
    xmlChar end3)
    +

    Takes a entity string content and process to do the adequate substitutions. [67] Reference ::= EntityRef | CharRef [69] PEReference ::= '%' Name ';'

    +
    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
    Returns:A newly allocated string with the substitution done. The caller must deallocate it !
    +
    +

    xmlStringLenDecodeEntities ()

    xmlChar *	xmlStringLenDecodeEntities	(xmlParserCtxtPtr ctxt, 
    const xmlChar * str,
    int len,
    int what,
    xmlChar end,
    xmlChar end2,
    xmlChar end3)
    +

    Takes a entity string content and process to do the adequate substitutions. [67] Reference ::= EntityRef | CharRef [69] PEReference ::= '%' Name ';'

    +
    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
    Returns:A newly allocated string with the substitution done. The caller must deallocate it !
    +
    +

    xmlSwitchEncoding ()

    int	xmlSwitchEncoding		(xmlParserCtxtPtr ctxt, 
    xmlCharEncoding enc)
    +

    change the input functions when discovering the character encoding of a given entity.

    +
    ctxt:the parser context
    enc:the encoding value (number)
    Returns:0 in case of success, -1 otherwise
    +
    +

    xmlSwitchInputEncoding ()

    int	xmlSwitchInputEncoding		(xmlParserCtxtPtr ctxt, 
    xmlParserInputPtr input,
    xmlCharEncodingHandlerPtr handler)
    +

    change the input functions when discovering the character encoding of a given entity.

    +
    ctxt:the parser context
    input:the input stream
    handler:the encoding handler
    Returns:0 in case of success, -1 otherwise
    +
    +

    xmlSwitchToEncoding ()

    int	xmlSwitchToEncoding		(xmlParserCtxtPtr ctxt, 
    xmlCharEncodingHandlerPtr handler)
    +

    change the input functions when discovering the character encoding of a given entity.

    +
    ctxt:the parser context
    handler:the encoding handler
    Returns:0 in case of success, -1 otherwise
    +
    +
    +
    + + diff --git a/doc/devhelp/libxml2-pattern.html b/doc/devhelp/libxml2-pattern.html new file mode 100644 index 0000000..321bd79 --- /dev/null +++ b/doc/devhelp/libxml2-pattern.html @@ -0,0 +1,166 @@ + + + + + pattern: pattern expression handling + + + + + + + + + + + + + + + + +

    + pattern +

    +

    pattern - pattern expression handling

    +

    allows to compile and test pattern expressions for nodes either in a tree or based on a parser state.

    +

    Author(s): Daniel Veillard

    +
    +

    Synopsis

    +
    typedef xmlStreamCtxt * xmlStreamCtxtPtr;
    +typedef enum xmlPatternFlags;
    +typedef struct _xmlStreamCtxt xmlStreamCtxt;
    +typedef struct _xmlPattern xmlPattern;
    +typedef xmlPattern * xmlPatternPtr;
    +int	xmlPatternMinDepth		(xmlPatternPtr comp);
    +xmlStreamCtxtPtr	xmlPatternGetStreamCtxt	(xmlPatternPtr comp);
    +int	xmlPatternFromRoot		(xmlPatternPtr comp);
    +void	xmlFreePatternList		(xmlPatternPtr comp);
    +int	xmlPatternStreamable		(xmlPatternPtr comp);
    +int	xmlStreamPushAttr		(xmlStreamCtxtPtr stream, 
    const xmlChar * name,
    const xmlChar * ns); +int xmlPatternMatch (xmlPatternPtr comp,
    xmlNodePtr node); +int xmlStreamWantsAnyNode (xmlStreamCtxtPtr streamCtxt); +int xmlStreamPop (xmlStreamCtxtPtr stream); +void xmlFreePattern (xmlPatternPtr comp); +int xmlStreamPush (xmlStreamCtxtPtr stream,
    const xmlChar * name,
    const xmlChar * ns); +int xmlPatternMaxDepth (xmlPatternPtr comp); +xmlPatternPtr xmlPatterncompile (const xmlChar * pattern,
    xmlDict * dict,
    int flags,
    const xmlChar ** namespaces); +int xmlStreamPushNode (xmlStreamCtxtPtr stream,
    const xmlChar * name,
    const xmlChar * ns,
    int nodeType); +void xmlFreeStreamCtxt (xmlStreamCtxtPtr stream); +
    +
    +
    +

    Description

    +
    +
    +

    Details

    +
    +

    Structure xmlPattern

    struct _xmlPattern {
    +The content of this structure is not made public by the API.
    +} xmlPattern;
    +

    +

    +
    +

    Enum xmlPatternFlags

    enum xmlPatternFlags {
    +    XML_PATTERN_DEFAULT = 0 /* simple pattern match */
    +    XML_PATTERN_XPATH = 1 /* standard XPath pattern */
    +    XML_PATTERN_XSSEL = 2 /* XPath subset for schema selector */
    +    XML_PATTERN_XSFIELD = 4 /*  XPath subset for schema field */
    +};
    +

    +

    +
    +

    Typedef xmlPatternPtr

    xmlPattern * xmlPatternPtr;
    +

    +

    +
    +

    Structure xmlStreamCtxt

    struct _xmlStreamCtxt {
    +The content of this structure is not made public by the API.
    +} xmlStreamCtxt;
    +

    +

    +
    +

    Typedef xmlStreamCtxtPtr

    xmlStreamCtxt * xmlStreamCtxtPtr;
    +

    +

    +
    +

    xmlFreePattern ()

    void	xmlFreePattern			(xmlPatternPtr comp)
    +

    Free up the memory allocated by @comp

    +
    comp:an XSLT comp
    +
    +

    xmlFreePatternList ()

    void	xmlFreePatternList		(xmlPatternPtr comp)
    +

    Free up the memory allocated by all the elements of @comp

    +
    comp:an XSLT comp list
    +
    +

    xmlFreeStreamCtxt ()

    void	xmlFreeStreamCtxt		(xmlStreamCtxtPtr stream)
    +

    Free the stream context

    +
    stream:the stream context
    +
    +

    xmlPatternFromRoot ()

    int	xmlPatternFromRoot		(xmlPatternPtr comp)
    +

    Check if the pattern must be looked at from the root.

    +
    comp:the precompiled pattern
    Returns:1 if true, 0 if false and -1 in case of error
    +
    +

    xmlPatternGetStreamCtxt ()

    xmlStreamCtxtPtr	xmlPatternGetStreamCtxt	(xmlPatternPtr comp)
    +

    Get a streaming context for that pattern Use xmlFreeStreamCtxt to free the context.

    +
    comp:the precompiled pattern
    Returns:a pointer to the context or NULL in case of failure
    +
    +

    xmlPatternMatch ()

    int	xmlPatternMatch			(xmlPatternPtr comp, 
    xmlNodePtr node)
    +

    Test whether the node matches the pattern

    +
    comp:the precompiled pattern
    node:a node
    Returns:1 if it matches, 0 if it doesn't and -1 in case of failure
    +
    +

    xmlPatternMaxDepth ()

    int	xmlPatternMaxDepth		(xmlPatternPtr comp)
    +

    Check the maximum depth reachable by a pattern

    +
    comp:the precompiled pattern
    Returns:-2 if no limit (using //), otherwise the depth, and -1 in case of error
    +
    +

    xmlPatternMinDepth ()

    int	xmlPatternMinDepth		(xmlPatternPtr comp)
    +

    Check the minimum depth reachable by a pattern, 0 mean the / or . are part of the set.

    +
    comp:the precompiled pattern
    Returns:-1 in case of error otherwise the depth,
    +
    +

    xmlPatternStreamable ()

    int	xmlPatternStreamable		(xmlPatternPtr comp)
    +

    Check if the pattern is streamable i.e. xmlPatternGetStreamCtxt() should work.

    +
    comp:the precompiled pattern
    Returns:1 if streamable, 0 if not and -1 in case of error.
    +
    +

    xmlPatterncompile ()

    xmlPatternPtr	xmlPatterncompile	(const xmlChar * pattern, 
    xmlDict * dict,
    int flags,
    const xmlChar ** namespaces)
    +

    Compile a pattern.

    +
    pattern:the pattern to compile
    dict:an optional dictionary for interned strings
    flags:compilation flags, see xmlPatternFlags
    namespaces:the prefix definitions, array of [URI, prefix] or NULL
    Returns:the compiled form of the pattern or NULL in case of error
    +
    +

    xmlStreamPop ()

    int	xmlStreamPop			(xmlStreamCtxtPtr stream)
    +

    push one level from the stream.

    +
    stream:the stream context
    Returns:-1 in case of error, 0 otherwise.
    +
    +

    xmlStreamPush ()

    int	xmlStreamPush			(xmlStreamCtxtPtr stream, 
    const xmlChar * name,
    const xmlChar * ns)
    +

    Push new data onto the stream. NOTE: if the call xmlPatterncompile() indicated a dictionary, then strings for name and ns will be expected to come from the dictionary. Both @name and @ns being NULL means the / i.e. the root of the document. This can also act as a reset. Otherwise the function will act as if it has been given an element-node.

    +
    stream:the stream context
    name:the current name
    ns:the namespace name
    Returns:-1 in case of error, 1 if the current state in the stream is a match and 0 otherwise.
    +
    +

    xmlStreamPushAttr ()

    int	xmlStreamPushAttr		(xmlStreamCtxtPtr stream, 
    const xmlChar * name,
    const xmlChar * ns)
    +

    Push new attribute data onto the stream. NOTE: if the call xmlPatterncompile() indicated a dictionary, then strings for name and ns will be expected to come from the dictionary. Both @name and @ns being NULL means the / i.e. the root of the document. This can also act as a reset. Otherwise the function will act as if it has been given an attribute-node.

    +
    stream:the stream context
    name:the current name
    ns:the namespace name
    Returns:-1 in case of error, 1 if the current state in the stream is a match and 0 otherwise.
    +
    +

    xmlStreamPushNode ()

    int	xmlStreamPushNode		(xmlStreamCtxtPtr stream, 
    const xmlChar * name,
    const xmlChar * ns,
    int nodeType)
    +

    Push new data onto the stream. NOTE: if the call xmlPatterncompile() indicated a dictionary, then strings for name and ns will be expected to come from the dictionary. Both @name and @ns being NULL means the / i.e. the root of the document. This can also act as a reset. Different from xmlStreamPush() this function can be fed with nodes of type: element-, attribute-, text-, cdata-section-, comment- and processing-instruction-node.

    +
    stream:the stream context
    name:the current name
    ns:the namespace name
    nodeType:the type of the node being pushed
    Returns:-1 in case of error, 1 if the current state in the stream is a match and 0 otherwise.
    +
    +

    xmlStreamWantsAnyNode ()

    int	xmlStreamWantsAnyNode		(xmlStreamCtxtPtr streamCtxt)
    +

    Query if the streaming pattern additionally needs to be fed with text-, cdata-section-, comment- and processing-instruction-nodes. If the result is 0 then only element-nodes and attribute-nodes need to be pushed.

    +
    streamCtxt:the stream context
    Returns:1 in case of need of nodes of the above described types, 0 otherwise. -1 on API errors.
    +
    +
    +
    + + diff --git a/doc/devhelp/libxml2-relaxng.html b/doc/devhelp/libxml2-relaxng.html new file mode 100644 index 0000000..23905d0 --- /dev/null +++ b/doc/devhelp/libxml2-relaxng.html @@ -0,0 +1,278 @@ + + + + + relaxng: implementation of the Relax-NG validation + + + + + + + + + + + + + + + + +

    + relaxng +

    +

    relaxng - implementation of the Relax-NG validation

    +

    implementation of the Relax-NG validation

    +

    Author(s): Daniel Veillard

    +
    +

    Synopsis

    +
    typedef struct _xmlRelaxNG xmlRelaxNG;
    +typedef xmlRelaxNG * xmlRelaxNGPtr;
    +typedef enum xmlRelaxNGValidErr;
    +typedef struct _xmlRelaxNGParserCtxt xmlRelaxNGParserCtxt;
    +typedef xmlRelaxNGParserCtxt * xmlRelaxNGParserCtxtPtr;
    +typedef enum xmlRelaxNGParserFlag;
    +typedef struct _xmlRelaxNGValidCtxt xmlRelaxNGValidCtxt;
    +typedef xmlRelaxNGValidCtxt * xmlRelaxNGValidCtxtPtr;
    +void	xmlRelaxNGFreeValidCtxt		(xmlRelaxNGValidCtxtPtr ctxt);
    +xmlRelaxNGParserCtxtPtr	xmlRelaxNGNewDocParserCtxt	(xmlDocPtr doc);
    +void	xmlRelaxNGSetValidErrors	(xmlRelaxNGValidCtxtPtr ctxt, 
    xmlRelaxNGValidityErrorFunc err,
    xmlRelaxNGValidityWarningFunc warn,
    void * ctx); +xmlRelaxNGParserCtxtPtr xmlRelaxNGNewParserCtxt (const char * URL); +int xmlRelaxNGGetParserErrors (xmlRelaxNGParserCtxtPtr ctxt,
    xmlRelaxNGValidityErrorFunc * err,
    xmlRelaxNGValidityWarningFunc * warn,
    void ** ctx); +int xmlRelaxNGValidatePopElement (xmlRelaxNGValidCtxtPtr ctxt,
    xmlDocPtr doc,
    xmlNodePtr elem); +xmlRelaxNGValidCtxtPtr xmlRelaxNGNewValidCtxt (xmlRelaxNGPtr schema); +xmlRelaxNGParserCtxtPtr xmlRelaxNGNewMemParserCtxt (const char * buffer,
    int size); +void xmlRelaxNGDump (FILE * output,
    xmlRelaxNGPtr schema); +void xmlRelaxNGSetParserErrors (xmlRelaxNGParserCtxtPtr ctxt,
    xmlRelaxNGValidityErrorFunc err,
    xmlRelaxNGValidityWarningFunc warn,
    void * ctx); +xmlRelaxNGPtr xmlRelaxNGParse (xmlRelaxNGParserCtxtPtr ctxt); +void xmlRelaxNGSetParserStructuredErrors (xmlRelaxNGParserCtxtPtr ctxt,
    xmlStructuredErrorFunc serror,
    void * ctx); +int xmlRelaxNGValidateFullElement (xmlRelaxNGValidCtxtPtr ctxt,
    xmlDocPtr doc,
    xmlNodePtr elem); +typedef void xmlRelaxNGValidityErrorFunc (void * ctx,
    const char * msg,
    ... ...); +int xmlRelaxNGValidatePushElement (xmlRelaxNGValidCtxtPtr ctxt,
    xmlDocPtr doc,
    xmlNodePtr elem); +void xmlRelaxNGFree (xmlRelaxNGPtr schema); +int xmlRelaxNGValidateDoc (xmlRelaxNGValidCtxtPtr ctxt,
    xmlDocPtr doc); +void xmlRelaxNGSetValidStructuredErrors (xmlRelaxNGValidCtxtPtr ctxt,
    xmlStructuredErrorFunc serror,
    void * ctx); +void xmlRelaxNGFreeParserCtxt (xmlRelaxNGParserCtxtPtr ctxt); +int xmlRelaxNGGetValidErrors (xmlRelaxNGValidCtxtPtr ctxt,
    xmlRelaxNGValidityErrorFunc * err,
    xmlRelaxNGValidityWarningFunc * warn,
    void ** ctx); +int xmlRelaxNGInitTypes (void); +void xmlRelaxNGDumpTree (FILE * output,
    xmlRelaxNGPtr schema); +void xmlRelaxNGCleanupTypes (void); +int xmlRelaxNGValidatePushCData (xmlRelaxNGValidCtxtPtr ctxt,
    const xmlChar * data,
    int len); +int xmlRelaxParserSetFlag (xmlRelaxNGParserCtxtPtr ctxt,
    int flags); +typedef void xmlRelaxNGValidityWarningFunc (void * ctx,
    const char * msg,
    ... ...); +
    +
    +
    +

    Description

    +
    +
    +

    Details

    +
    +

    Structure xmlRelaxNG

    struct _xmlRelaxNG {
    +The content of this structure is not made public by the API.
    +} xmlRelaxNG;
    +

    +

    +
    +

    Structure xmlRelaxNGParserCtxt

    struct _xmlRelaxNGParserCtxt {
    +The content of this structure is not made public by the API.
    +} xmlRelaxNGParserCtxt;
    +

    +

    +
    +

    Typedef xmlRelaxNGParserCtxtPtr

    xmlRelaxNGParserCtxt * xmlRelaxNGParserCtxtPtr;
    +

    +

    +
    +

    Enum xmlRelaxNGParserFlag

    enum xmlRelaxNGParserFlag {
    +    XML_RELAXNGP_NONE = 0
    +    XML_RELAXNGP_FREE_DOC = 1
    +    XML_RELAXNGP_CRNG = 2
    +};
    +

    +

    +
    +

    Typedef xmlRelaxNGPtr

    xmlRelaxNG * xmlRelaxNGPtr;
    +

    +

    +
    +

    Structure xmlRelaxNGValidCtxt

    struct _xmlRelaxNGValidCtxt {
    +The content of this structure is not made public by the API.
    +} xmlRelaxNGValidCtxt;
    +

    +

    +
    +

    Typedef xmlRelaxNGValidCtxtPtr

    xmlRelaxNGValidCtxt * xmlRelaxNGValidCtxtPtr;
    +

    +

    +
    + +
    + +
    +
    +
    +
    +
    +

    xmlRelaxNGDump ()

    void	xmlRelaxNGDump			(FILE * output, 
    xmlRelaxNGPtr schema)
    +

    Dump a RelaxNG structure back

    +
    output:the file output
    schema:a schema structure
    +
    +

    xmlRelaxNGDumpTree ()

    void	xmlRelaxNGDumpTree		(FILE * output, 
    xmlRelaxNGPtr schema)
    +

    Dump the transformed RelaxNG tree.

    +
    output:the file output
    schema:a schema structure
    +
    +

    xmlRelaxNGFree ()

    void	xmlRelaxNGFree			(xmlRelaxNGPtr schema)
    +

    Deallocate a RelaxNG structure.

    +
    schema:a schema structure
    +
    +

    xmlRelaxNGFreeParserCtxt ()

    void	xmlRelaxNGFreeParserCtxt	(xmlRelaxNGParserCtxtPtr ctxt)
    +

    Free the resources associated to the schema parser context

    +
    ctxt:the schema parser context
    +
    +

    xmlRelaxNGFreeValidCtxt ()

    void	xmlRelaxNGFreeValidCtxt		(xmlRelaxNGValidCtxtPtr ctxt)
    +

    Free the resources associated to the schema validation context

    +
    ctxt:the schema validation context
    +
    +

    xmlRelaxNGGetParserErrors ()

    int	xmlRelaxNGGetParserErrors	(xmlRelaxNGParserCtxtPtr ctxt, 
    xmlRelaxNGValidityErrorFunc * err,
    xmlRelaxNGValidityWarningFunc * warn,
    void ** ctx)
    +

    Get the callback information used to handle errors for a validation context

    +
    ctxt:a Relax-NG validation context
    err:the error callback result
    warn:the warning callback result
    ctx:contextual data for the callbacks result
    Returns:-1 in case of failure, 0 otherwise.
    +
    +

    xmlRelaxNGGetValidErrors ()

    int	xmlRelaxNGGetValidErrors	(xmlRelaxNGValidCtxtPtr ctxt, 
    xmlRelaxNGValidityErrorFunc * err,
    xmlRelaxNGValidityWarningFunc * warn,
    void ** ctx)
    +

    Get the error and warning callback informations

    +
    ctxt:a Relax-NG validation context
    err:the error function result
    warn:the warning function result
    ctx:the functions context result
    Returns:-1 in case of error and 0 otherwise
    +
    + +
    +

    xmlRelaxNGNewDocParserCtxt ()

    xmlRelaxNGParserCtxtPtr	xmlRelaxNGNewDocParserCtxt	(xmlDocPtr doc)
    +

    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.

    +
    doc:a preparsed document tree
    Returns:the parser context or NULL in case of error
    +
    +

    xmlRelaxNGNewMemParserCtxt ()

    xmlRelaxNGParserCtxtPtr	xmlRelaxNGNewMemParserCtxt	(const char * buffer, 
    int size)
    +

    Create an XML RelaxNGs parse context for that memory buffer expected to contain an XML RelaxNGs file.

    +
    buffer:a pointer to a char array containing the schemas
    size:the size of the array
    Returns:the parser context or NULL in case of error
    +
    +

    xmlRelaxNGNewParserCtxt ()

    xmlRelaxNGParserCtxtPtr	xmlRelaxNGNewParserCtxt	(const char * URL)
    +

    Create an XML RelaxNGs parse context for that file/resource expected to contain an XML RelaxNGs file.

    +
    URL:the location of the schema
    Returns:the parser context or NULL in case of error
    +
    +

    xmlRelaxNGNewValidCtxt ()

    xmlRelaxNGValidCtxtPtr	xmlRelaxNGNewValidCtxt	(xmlRelaxNGPtr schema)
    +

    Create an XML RelaxNGs validation context based on the given schema

    +
    schema:a precompiled XML RelaxNGs
    Returns:the validation context or NULL in case of error
    +
    +

    xmlRelaxNGParse ()

    xmlRelaxNGPtr	xmlRelaxNGParse		(xmlRelaxNGParserCtxtPtr ctxt)
    +

    parse a schema definition resource and build an internal XML Shema struture which can be used to validate instances.

    +
    ctxt:a Relax-NG parser context
    Returns:the internal XML RelaxNG structure built from the resource or NULL in case of error
    +
    +

    xmlRelaxNGSetParserErrors ()

    void	xmlRelaxNGSetParserErrors	(xmlRelaxNGParserCtxtPtr ctxt, 
    xmlRelaxNGValidityErrorFunc err,
    xmlRelaxNGValidityWarningFunc warn,
    void * ctx)
    +

    Set the callback functions used to handle errors for a validation context

    +
    ctxt:a Relax-NG validation context
    err:the error callback
    warn:the warning callback
    ctx:contextual data for the callbacks
    +
    +

    xmlRelaxNGSetParserStructuredErrors ()

    void	xmlRelaxNGSetParserStructuredErrors	(xmlRelaxNGParserCtxtPtr ctxt, 
    xmlStructuredErrorFunc serror,
    void * ctx)
    +

    Set the callback functions used to handle errors for a parsing context

    +
    ctxt:a Relax-NG parser context
    serror:the error callback
    ctx:contextual data for the callbacks
    +
    +

    xmlRelaxNGSetValidErrors ()

    void	xmlRelaxNGSetValidErrors	(xmlRelaxNGValidCtxtPtr ctxt, 
    xmlRelaxNGValidityErrorFunc err,
    xmlRelaxNGValidityWarningFunc warn,
    void * ctx)
    +

    Set the error and warning callback informations

    +
    ctxt:a Relax-NG validation context
    err:the error function
    warn:the warning function
    ctx:the functions context
    +
    +

    xmlRelaxNGSetValidStructuredErrors ()

    void	xmlRelaxNGSetValidStructuredErrors	(xmlRelaxNGValidCtxtPtr ctxt, 
    xmlStructuredErrorFunc serror,
    void * ctx)
    +

    Set the structured error callback

    +
    ctxt:a Relax-NG validation context
    serror:the structured error function
    ctx:the functions context
    +
    +

    xmlRelaxNGValidateDoc ()

    int	xmlRelaxNGValidateDoc		(xmlRelaxNGValidCtxtPtr ctxt, 
    xmlDocPtr doc)
    +

    Validate a document tree in memory.

    +
    ctxt:a Relax-NG validation context
    doc:a parsed document tree
    Returns:0 if the document is valid, a positive error code number otherwise and -1 in case of internal or API error.
    +
    +

    xmlRelaxNGValidateFullElement ()

    int	xmlRelaxNGValidateFullElement	(xmlRelaxNGValidCtxtPtr ctxt, 
    xmlDocPtr doc,
    xmlNodePtr elem)
    +

    Validate a full subtree when xmlRelaxNGValidatePushElement() returned 0 and the content of the node has been expanded.

    +
    ctxt:the validation context
    doc:a document instance
    elem:an element instance
    Returns:1 if no validation problem was found or -1 in case of error.
    +
    +

    xmlRelaxNGValidatePopElement ()

    int	xmlRelaxNGValidatePopElement	(xmlRelaxNGValidCtxtPtr ctxt, 
    xmlDocPtr doc,
    xmlNodePtr elem)
    +

    Pop the element end from the RelaxNG validation stack.

    +
    ctxt:the RelaxNG validation context
    doc:a document instance
    elem:an element instance
    Returns:1 if no validation problem was found or 0 otherwise
    +
    +

    xmlRelaxNGValidatePushCData ()

    int	xmlRelaxNGValidatePushCData	(xmlRelaxNGValidCtxtPtr ctxt, 
    const xmlChar * data,
    int len)
    +

    check the CData parsed for validation in the current stack

    +
    ctxt:the RelaxNG validation context
    data:some character data read
    len:the length of the data
    Returns:1 if no validation problem was found or -1 otherwise
    +
    +

    xmlRelaxNGValidatePushElement ()

    int	xmlRelaxNGValidatePushElement	(xmlRelaxNGValidCtxtPtr ctxt, 
    xmlDocPtr doc,
    xmlNodePtr elem)
    +

    Push a new element start on the RelaxNG validation stack.

    +
    ctxt:the validation context
    doc:a document instance
    elem:an element instance
    Returns:1 if no validation problem was found or 0 if validating the element requires a full node, and -1 in case of error.
    +
    +

    xmlRelaxParserSetFlag ()

    int	xmlRelaxParserSetFlag		(xmlRelaxNGParserCtxtPtr ctxt, 
    int flags)
    +

    Semi private function used to pass informations to a parser context which are a combination of xmlRelaxNGParserFlag .

    +
    ctxt:a RelaxNG parser context
    flags:a set of flags values
    Returns:0 if success and -1 in case of error
    +
    +
    +
    + + diff --git a/doc/devhelp/libxml2-schemasInternals.html b/doc/devhelp/libxml2-schemasInternals.html new file mode 100644 index 0000000..2f9cbc9 --- /dev/null +++ b/doc/devhelp/libxml2-schemasInternals.html @@ -0,0 +1,860 @@ + + + + + schemasInternals: internal interfaces for XML Schemas + + + + + + + + + + + + + + + + +

    + schemasInternals +

    +

    schemasInternals - internal interfaces for XML Schemas

    +

    internal interfaces for the XML Schemas handling and schema validity checking The Schemas development is a Work In Progress. Some of those interfaces are not garanteed to be API or ABI stable !

    +

    Author(s): Daniel Veillard

    +
    +

    Synopsis

    +
    #define XML_SCHEMAS_BLOCK_DEFAULT_RESTRICTION;
    +#define XML_SCHEMAS_FINAL_DEFAULT_EXTENSION;
    +#define XML_SCHEMAS_TYPE_FIXUP_1;
    +#define XML_SCHEMAS_FINAL_DEFAULT_RESTRICTION;
    +#define XML_SCHEMAS_ELEM_CIRCULAR;
    +#define XML_SCHEMAS_QUALIF_ATTR;
    +#define XML_SCHEMAS_TYPE_BUILTIN_PRIMITIVE;
    +#define XML_SCHEMAS_TYPE_DERIVATION_METHOD_RESTRICTION;
    +#define XML_SCHEMAS_ATTR_USE_REQUIRED;
    +#define XML_SCHEMAS_FACET_COLLAPSE;
    +#define XML_SCHEMAS_TYPE_WHITESPACE_COLLAPSE;
    +#define XML_SCHEMAS_TYPE_VARIETY_UNION;
    +#define XML_SCHEMAS_ANY_STRICT;
    +#define XML_SCHEMAS_TYPE_INTERNAL_RESOLVED;
    +#define XML_SCHEMAS_QUALIF_ELEM;
    +#define XML_SCHEMAS_TYPE_VARIETY_LIST;
    +#define XML_SCHEMAS_TYPE_WHITESPACE_PRESERVE;
    +#define XML_SCHEMAS_ELEM_INTERNAL_CHECKED;
    +#define XML_SCHEMAS_INCLUDING_CONVERT_NS;
    +#define XML_SCHEMAS_ATTR_INTERNAL_RESOLVED;
    +#define XML_SCHEMAS_ATTR_USE_PROHIBITED;
    +#define XML_SCHEMAS_ELEM_NILLABLE;
    +#define XML_SCHEMAS_BLOCK_DEFAULT_SUBSTITUTION;
    +#define XML_SCHEMAS_ATTRGROUP_REDEFINED;
    +#define XML_SCHEMAS_ELEM_SUBST_GROUP_HEAD;
    +#define XML_SCHEMAS_TYPE_BLOCK_DEFAULT;
    +#define XML_SCHEMAS_ELEM_BLOCK_SUBSTITUTION;
    +#define XML_SCHEMAS_TYPE_FINAL_EXTENSION;
    +#define XML_SCHEMAS_TYPE_REDEFINED;
    +#define XML_SCHEMAS_ELEM_FIXED;
    +#define XML_SCHEMAS_TYPE_OWNED_ATTR_WILDCARD;
    +#define XML_SCHEMAS_TYPE_VARIETY_ATOMIC;
    +#define XML_SCHEMAS_TYPE_FINAL_LIST;
    +#define XML_SCHEMAS_ATTR_USE_OPTIONAL;
    +#define XML_SCHEMAS_ATTR_NSDEFAULT;
    +#define XML_SCHEMAS_TYPE_WHITESPACE_REPLACE;
    +#define XML_SCHEMAS_TYPE_BLOCK_RESTRICTION;
    +#define XML_SCHEMAS_ANYATTR_STRICT;
    +#define XML_SCHEMAS_FACET_UNKNOWN;
    +#define XML_SCHEMAS_ATTRGROUP_MARKED;
    +#define XML_SCHEMAS_FACET_PRESERVE;
    +#define XML_SCHEMAS_ELEM_BLOCK_EXTENSION;
    +#define XML_SCHEMAS_ATTR_GLOBAL;
    +#define XML_SCHEMAS_ANYATTR_SKIP;
    +#define XML_SCHEMAS_TYPE_DERIVATION_METHOD_EXTENSION;
    +#define XML_SCHEMAS_ANYATTR_LAX;
    +#define XML_SCHEMAS_TYPE_GLOBAL;
    +#define XML_SCHEMAS_TYPE_ABSTRACT;
    +#define XML_SCHEMAS_TYPE_MIXED;
    +#define XML_SCHEMAS_ATTR_FIXED;
    +#define XML_SCHEMAS_ELEM_INTERNAL_RESOLVED;
    +#define XML_SCHEMAS_ANY_SKIP;
    +#define XML_SCHEMAS_FINAL_DEFAULT_LIST;
    +#define XML_SCHEMAS_TYPE_VARIETY_ABSENT;
    +#define XML_SCHEMAS_ELEM_FINAL_RESTRICTION;
    +#define XML_SCHEMAS_WILDCARD_COMPLETE;
    +#define XML_SCHEMAS_ATTRGROUP_WILDCARD_BUILDED;
    +#define XML_SCHEMAS_ELEM_NSDEFAULT;
    +#define XML_SCHEMAS_ELEM_GLOBAL;
    +#define XML_SCHEMAS_ELEM_TOPLEVEL;
    +#define XML_SCHEMAS_ANY_LAX;
    +#define XML_SCHEMAS_TYPE_FINAL_RESTRICTION;
    +#define XML_SCHEMAS_TYPE_HAS_FACETS;
    +#define XML_SCHEMAS_ELEM_FINAL_EXTENSION;
    +#define XML_SCHEMAS_TYPE_NORMVALUENEEDED;
    +#define XML_SCHEMAS_ELEM_FINAL_ABSENT;
    +#define XML_SCHEMAS_TYPE_BLOCK_EXTENSION;
    +#define XML_SCHEMAS_TYPE_INTERNAL_INVALID;
    +#define XML_SCHEMAS_ATTRGROUP_HAS_REFS;
    +#define XML_SCHEMAS_ELEM_ABSTRACT;
    +#define XML_SCHEMAS_BLOCK_DEFAULT_EXTENSION;
    +#define XML_SCHEMAS_TYPE_FINAL_UNION;
    +#define XML_SCHEMAS_TYPE_FINAL_DEFAULT;
    +#define XML_SCHEMAS_TYPE_FACETSNEEDVALUE;
    +#define XML_SCHEMAS_FINAL_DEFAULT_UNION;
    +#define XML_SCHEMAS_ELEM_BLOCK_RESTRICTION;
    +#define XML_SCHEMAS_FACET_REPLACE;
    +#define XML_SCHEMAS_ELEM_DEFAULT;
    +#define XML_SCHEMAS_TYPE_MARKED;
    +#define XML_SCHEMAS_ELEM_BLOCK_ABSENT;
    +#define XML_SCHEMAS_ATTRGROUP_GLOBAL;
    +#define XML_SCHEMAS_ELEM_REF;
    +typedef xmlSchemaAttributeGroup * xmlSchemaAttributeGroupPtr;
    +typedef xmlSchemaElement * xmlSchemaElementPtr;
    +typedef xmlSchemaFacetLink * xmlSchemaFacetLinkPtr;
    +typedef struct _xmlSchemaVal xmlSchemaVal;
    +typedef xmlSchemaAttributeLink * xmlSchemaAttributeLinkPtr;
    +typedef struct _xmlSchemaType xmlSchemaType;
    +typedef struct _xmlSchemaAnnot xmlSchemaAnnot;
    +typedef xmlSchemaAnnot * xmlSchemaAnnotPtr;
    +typedef struct _xmlSchemaElement xmlSchemaElement;
    +typedef struct _xmlSchemaWildcard xmlSchemaWildcard;
    +typedef xmlSchemaWildcard * xmlSchemaWildcardPtr;
    +typedef xmlSchemaFacet * xmlSchemaFacetPtr;
    +typedef struct _xmlSchemaTypeLink xmlSchemaTypeLink;
    +typedef struct _xmlSchemaAttributeLink xmlSchemaAttributeLink;
    +typedef xmlSchemaVal * xmlSchemaValPtr;
    +typedef struct _xmlSchemaFacetLink xmlSchemaFacetLink;
    +typedef xmlSchemaWildcardNs * xmlSchemaWildcardNsPtr;
    +typedef struct _xmlSchemaAttributeGroup xmlSchemaAttributeGroup;
    +typedef xmlSchemaTypeLink * xmlSchemaTypeLinkPtr;
    +typedef struct _xmlSchemaWildcardNs xmlSchemaWildcardNs;
    +typedef xmlSchemaAttribute * xmlSchemaAttributePtr;
    +typedef xmlSchemaNotation * xmlSchemaNotationPtr;
    +typedef enum xmlSchemaValType;
    +typedef xmlSchemaType * xmlSchemaTypePtr;
    +typedef struct _xmlSchemaNotation xmlSchemaNotation;
    +typedef struct _xmlSchemaFacet xmlSchemaFacet;
    +typedef enum xmlSchemaContentType;
    +typedef enum xmlSchemaTypeType;
    +typedef struct _xmlSchemaAttribute xmlSchemaAttribute;
    +void	xmlSchemaFreeType		(xmlSchemaTypePtr type);
    +void	xmlSchemaFreeWildcard		(xmlSchemaWildcardPtr wildcard);
    +
    +
    +
    +

    Description

    +
    +
    +

    Details

    +
    +

    Macro XML_SCHEMAS_ANYATTR_LAX

    #define XML_SCHEMAS_ANYATTR_LAX;
    +

    Ignore validation non definition on attributes Obsolete, not used anymore.

    +
    +
    +

    Macro XML_SCHEMAS_ANYATTR_SKIP

    #define XML_SCHEMAS_ANYATTR_SKIP;
    +

    Skip unknown attribute from validation Obsolete, not used anymore.

    +
    +
    +

    Macro XML_SCHEMAS_ANYATTR_STRICT

    #define XML_SCHEMAS_ANYATTR_STRICT;
    +

    Apply strict validation rules on attributes Obsolete, not used anymore.

    +
    +
    +

    Macro XML_SCHEMAS_ANY_LAX

    #define XML_SCHEMAS_ANY_LAX;
    +

    Used by wildcards. Validate if type found, don't worry if not found

    +
    +
    +

    Macro XML_SCHEMAS_ANY_SKIP

    #define XML_SCHEMAS_ANY_SKIP;
    +

    Skip unknown attribute from validation

    +
    +
    +

    Macro XML_SCHEMAS_ANY_STRICT

    #define XML_SCHEMAS_ANY_STRICT;
    +

    Used by wildcards. Apply strict validation rules

    +
    +
    +

    Macro XML_SCHEMAS_ATTRGROUP_GLOBAL

    #define XML_SCHEMAS_ATTRGROUP_GLOBAL;
    +

    The attribute wildcard has been already builded.

    +
    +
    +

    Macro XML_SCHEMAS_ATTRGROUP_HAS_REFS

    #define XML_SCHEMAS_ATTRGROUP_HAS_REFS;
    +

    Whether this attr. group contains attr. group references.

    +
    +
    +

    Macro XML_SCHEMAS_ATTRGROUP_MARKED

    #define XML_SCHEMAS_ATTRGROUP_MARKED;
    +

    Marks the attr group as marked; used for circular checks.

    +
    +
    +

    Macro XML_SCHEMAS_ATTRGROUP_REDEFINED

    #define XML_SCHEMAS_ATTRGROUP_REDEFINED;
    +

    The attr group was redefined.

    +
    +
    +

    Macro XML_SCHEMAS_ATTRGROUP_WILDCARD_BUILDED

    #define XML_SCHEMAS_ATTRGROUP_WILDCARD_BUILDED;
    +

    The attribute wildcard has been already builded.

    +
    +
    +

    Macro XML_SCHEMAS_ATTR_FIXED

    #define XML_SCHEMAS_ATTR_FIXED;
    +

    the attribute has a fixed value

    +
    +
    +

    Macro XML_SCHEMAS_ATTR_GLOBAL

    #define XML_SCHEMAS_ATTR_GLOBAL;
    +

    allow elements in no namespace

    +
    +
    +

    Macro XML_SCHEMAS_ATTR_INTERNAL_RESOLVED

    #define XML_SCHEMAS_ATTR_INTERNAL_RESOLVED;
    +

    this is set when the "type" and "ref" references have been resolved.

    +
    +
    +

    Macro XML_SCHEMAS_ATTR_NSDEFAULT

    #define XML_SCHEMAS_ATTR_NSDEFAULT;
    +

    allow elements in no namespace

    +
    +
    +

    Macro XML_SCHEMAS_ATTR_USE_OPTIONAL

    #define XML_SCHEMAS_ATTR_USE_OPTIONAL;
    +

    The attribute is optional.

    +
    +
    +

    Macro XML_SCHEMAS_ATTR_USE_PROHIBITED

    #define XML_SCHEMAS_ATTR_USE_PROHIBITED;
    +

    Used by wildcards. The attribute is prohibited.

    +
    +
    +

    Macro XML_SCHEMAS_ATTR_USE_REQUIRED

    #define XML_SCHEMAS_ATTR_USE_REQUIRED;
    +

    The attribute is required.

    +
    +
    +

    Macro XML_SCHEMAS_BLOCK_DEFAULT_EXTENSION

    #define XML_SCHEMAS_BLOCK_DEFAULT_EXTENSION;
    +

    the schema has "extension" in the set of blockDefault.

    +
    +
    +

    Macro XML_SCHEMAS_BLOCK_DEFAULT_RESTRICTION

    #define XML_SCHEMAS_BLOCK_DEFAULT_RESTRICTION;
    +

    the schema has "restriction" in the set of blockDefault.

    +
    +
    +

    Macro XML_SCHEMAS_BLOCK_DEFAULT_SUBSTITUTION

    #define XML_SCHEMAS_BLOCK_DEFAULT_SUBSTITUTION;
    +

    the schema has "substitution" in the set of blockDefault.

    +
    +
    +

    Macro XML_SCHEMAS_ELEM_ABSTRACT

    #define XML_SCHEMAS_ELEM_ABSTRACT;
    +

    the element is abstract

    +
    +
    +

    Macro XML_SCHEMAS_ELEM_BLOCK_ABSENT

    #define XML_SCHEMAS_ELEM_BLOCK_ABSENT;
    +

    the "block" attribute is absent

    +
    +
    +

    Macro XML_SCHEMAS_ELEM_BLOCK_EXTENSION

    #define XML_SCHEMAS_ELEM_BLOCK_EXTENSION;
    +

    disallowed substitutions are absent

    +
    +
    +

    Macro XML_SCHEMAS_ELEM_BLOCK_RESTRICTION

    #define XML_SCHEMAS_ELEM_BLOCK_RESTRICTION;
    +

    disallowed substitutions: "restriction"

    +
    +
    +

    Macro XML_SCHEMAS_ELEM_BLOCK_SUBSTITUTION

    #define XML_SCHEMAS_ELEM_BLOCK_SUBSTITUTION;
    +

    disallowed substitutions: "substituion"

    +
    +
    +

    Macro XML_SCHEMAS_ELEM_CIRCULAR

    #define XML_SCHEMAS_ELEM_CIRCULAR;
    +

    a helper flag for the search of circular references.

    +
    +
    +

    Macro XML_SCHEMAS_ELEM_DEFAULT

    #define XML_SCHEMAS_ELEM_DEFAULT;
    +

    the element has a default value

    +
    +
    +

    Macro XML_SCHEMAS_ELEM_FINAL_ABSENT

    #define XML_SCHEMAS_ELEM_FINAL_ABSENT;
    +

    substitution group exclusions are absent

    +
    +
    +

    Macro XML_SCHEMAS_ELEM_FINAL_EXTENSION

    #define XML_SCHEMAS_ELEM_FINAL_EXTENSION;
    +

    substitution group exclusions: "extension"

    +
    +
    +

    Macro XML_SCHEMAS_ELEM_FINAL_RESTRICTION

    #define XML_SCHEMAS_ELEM_FINAL_RESTRICTION;
    +

    substitution group exclusions: "restriction"

    +
    +
    +

    Macro XML_SCHEMAS_ELEM_FIXED

    #define XML_SCHEMAS_ELEM_FIXED;
    +

    the element has a fixed value

    +
    +
    +

    Macro XML_SCHEMAS_ELEM_GLOBAL

    #define XML_SCHEMAS_ELEM_GLOBAL;
    +

    the element is global

    +
    +
    +

    Macro XML_SCHEMAS_ELEM_INTERNAL_CHECKED

    #define XML_SCHEMAS_ELEM_INTERNAL_CHECKED;
    +

    this is set when the elem decl has been checked against all constraints

    +
    +
    +

    Macro XML_SCHEMAS_ELEM_INTERNAL_RESOLVED

    #define XML_SCHEMAS_ELEM_INTERNAL_RESOLVED;
    +

    this is set when "type", "ref", "substitutionGroup" references have been resolved.

    +
    +
    +

    Macro XML_SCHEMAS_ELEM_NILLABLE

    #define XML_SCHEMAS_ELEM_NILLABLE;
    +

    the element is nillable

    +
    +
    +

    Macro XML_SCHEMAS_ELEM_NSDEFAULT

    #define XML_SCHEMAS_ELEM_NSDEFAULT;
    +

    allow elements in no namespace Obsolete, not used anymore.

    +
    +
    +

    Macro XML_SCHEMAS_ELEM_REF

    #define XML_SCHEMAS_ELEM_REF;
    +

    the element is a reference to a type

    +
    +
    +

    Macro XML_SCHEMAS_ELEM_SUBST_GROUP_HEAD

    #define XML_SCHEMAS_ELEM_SUBST_GROUP_HEAD;
    +

    the declaration is a substitution group head

    +
    +
    +

    Macro XML_SCHEMAS_ELEM_TOPLEVEL

    #define XML_SCHEMAS_ELEM_TOPLEVEL;
    +

    the element is top level obsolete: use XML_SCHEMAS_ELEM_GLOBAL instead

    +
    +
    +

    Macro XML_SCHEMAS_FACET_COLLAPSE

    #define XML_SCHEMAS_FACET_COLLAPSE;
    +

    collapse the types of the facet

    +
    +
    +

    Macro XML_SCHEMAS_FACET_PRESERVE

    #define XML_SCHEMAS_FACET_PRESERVE;
    +

    preserve the type of the facet

    +
    +
    +

    Macro XML_SCHEMAS_FACET_REPLACE

    #define XML_SCHEMAS_FACET_REPLACE;
    +

    replace the type of the facet

    +
    +
    +

    Macro XML_SCHEMAS_FACET_UNKNOWN

    #define XML_SCHEMAS_FACET_UNKNOWN;
    +

    unknown facet handling

    +
    +
    +

    Macro XML_SCHEMAS_FINAL_DEFAULT_EXTENSION

    #define XML_SCHEMAS_FINAL_DEFAULT_EXTENSION;
    +

    the schema has "extension" in the set of finalDefault.

    +
    +
    +

    Macro XML_SCHEMAS_FINAL_DEFAULT_LIST

    #define XML_SCHEMAS_FINAL_DEFAULT_LIST;
    +

    the cshema has "list" in the set of finalDefault.

    +
    +
    +

    Macro XML_SCHEMAS_FINAL_DEFAULT_RESTRICTION

    #define XML_SCHEMAS_FINAL_DEFAULT_RESTRICTION;
    +

    the schema has "restriction" in the set of finalDefault.

    +
    +
    +

    Macro XML_SCHEMAS_FINAL_DEFAULT_UNION

    #define XML_SCHEMAS_FINAL_DEFAULT_UNION;
    +

    the schema has "union" in the set of finalDefault.

    +
    +
    +

    Macro XML_SCHEMAS_INCLUDING_CONVERT_NS

    #define XML_SCHEMAS_INCLUDING_CONVERT_NS;
    +

    the schema is currently including an other schema with no target namespace.

    +
    +
    +

    Macro XML_SCHEMAS_QUALIF_ATTR

    #define XML_SCHEMAS_QUALIF_ATTR;
    +

    Reflects attributeFormDefault == qualified in an XML schema document.

    +
    +
    +

    Macro XML_SCHEMAS_QUALIF_ELEM

    #define XML_SCHEMAS_QUALIF_ELEM;
    +

    Reflects elementFormDefault == qualified in an XML schema document.

    +
    +
    +

    Macro XML_SCHEMAS_TYPE_ABSTRACT

    #define XML_SCHEMAS_TYPE_ABSTRACT;
    +

    the simple/complexType is abstract.

    +
    +
    +

    Macro XML_SCHEMAS_TYPE_BLOCK_DEFAULT

    #define XML_SCHEMAS_TYPE_BLOCK_DEFAULT;
    +

    the complexType did not specify 'block' so use the default of the <schema> item.

    +
    +
    +

    Macro XML_SCHEMAS_TYPE_BLOCK_EXTENSION

    #define XML_SCHEMAS_TYPE_BLOCK_EXTENSION;
    +

    the complexType has a 'block' of "extension".

    +
    +
    +

    Macro XML_SCHEMAS_TYPE_BLOCK_RESTRICTION

    #define XML_SCHEMAS_TYPE_BLOCK_RESTRICTION;
    +

    the complexType has a 'block' of "restriction".

    +
    +
    +

    Macro XML_SCHEMAS_TYPE_BUILTIN_PRIMITIVE

    #define XML_SCHEMAS_TYPE_BUILTIN_PRIMITIVE;
    +

    Marks the item as a builtin primitive.

    +
    +
    +

    Macro XML_SCHEMAS_TYPE_DERIVATION_METHOD_EXTENSION

    #define XML_SCHEMAS_TYPE_DERIVATION_METHOD_EXTENSION;
    +

    the simple or complex type has a derivation method of "extension".

    +
    +
    +

    Macro XML_SCHEMAS_TYPE_DERIVATION_METHOD_RESTRICTION

    #define XML_SCHEMAS_TYPE_DERIVATION_METHOD_RESTRICTION;
    +

    the simple or complex type has a derivation method of "restriction".

    +
    +
    +

    Macro XML_SCHEMAS_TYPE_FACETSNEEDVALUE

    #define XML_SCHEMAS_TYPE_FACETSNEEDVALUE;
    +

    indicates if the facets need a computed value

    +
    +
    +

    Macro XML_SCHEMAS_TYPE_FINAL_DEFAULT

    #define XML_SCHEMAS_TYPE_FINAL_DEFAULT;
    +

    the simpleType has a final of "default".

    +
    +
    +

    Macro XML_SCHEMAS_TYPE_FINAL_EXTENSION

    #define XML_SCHEMAS_TYPE_FINAL_EXTENSION;
    +

    the complexType has a final of "extension".

    +
    +
    +

    Macro XML_SCHEMAS_TYPE_FINAL_LIST

    #define XML_SCHEMAS_TYPE_FINAL_LIST;
    +

    the simpleType has a final of "list".

    +
    +
    +

    Macro XML_SCHEMAS_TYPE_FINAL_RESTRICTION

    #define XML_SCHEMAS_TYPE_FINAL_RESTRICTION;
    +

    the simpleType/complexType has a final of "restriction".

    +
    +
    +

    Macro XML_SCHEMAS_TYPE_FINAL_UNION

    #define XML_SCHEMAS_TYPE_FINAL_UNION;
    +

    the simpleType has a final of "union".

    +
    +
    +

    Macro XML_SCHEMAS_TYPE_FIXUP_1

    #define XML_SCHEMAS_TYPE_FIXUP_1;
    +

    First stage of fixup was done.

    +
    +
    +

    Macro XML_SCHEMAS_TYPE_GLOBAL

    #define XML_SCHEMAS_TYPE_GLOBAL;
    +

    the type is global

    +
    +
    +

    Macro XML_SCHEMAS_TYPE_HAS_FACETS

    #define XML_SCHEMAS_TYPE_HAS_FACETS;
    +

    has facets

    +
    +
    +

    Macro XML_SCHEMAS_TYPE_INTERNAL_INVALID

    #define XML_SCHEMAS_TYPE_INTERNAL_INVALID;
    +

    indicates that the type is invalid

    +
    +
    +

    Macro XML_SCHEMAS_TYPE_INTERNAL_RESOLVED

    #define XML_SCHEMAS_TYPE_INTERNAL_RESOLVED;
    +

    indicates that the type was typefixed

    +
    +
    +

    Macro XML_SCHEMAS_TYPE_MARKED

    #define XML_SCHEMAS_TYPE_MARKED;
    +

    Marks the item as marked; used for circular checks.

    +
    +
    +

    Macro XML_SCHEMAS_TYPE_MIXED

    #define XML_SCHEMAS_TYPE_MIXED;
    +

    the element content type is mixed

    +
    +
    +

    Macro XML_SCHEMAS_TYPE_NORMVALUENEEDED

    #define XML_SCHEMAS_TYPE_NORMVALUENEEDED;
    +

    indicates if the facets (pattern) need a normalized value

    +
    +
    +

    Macro XML_SCHEMAS_TYPE_OWNED_ATTR_WILDCARD

    #define XML_SCHEMAS_TYPE_OWNED_ATTR_WILDCARD;
    +

    the complexType owns an attribute wildcard, i.e. it can be freed by the complexType

    +
    +
    +

    Macro XML_SCHEMAS_TYPE_REDEFINED

    #define XML_SCHEMAS_TYPE_REDEFINED;
    +

    The type was redefined.

    +
    +
    +

    Macro XML_SCHEMAS_TYPE_VARIETY_ABSENT

    #define XML_SCHEMAS_TYPE_VARIETY_ABSENT;
    +

    the simpleType has a variety of "absent". TODO: Actually not necessary :-/, since if none of the variety flags occur then it's automatically absent.

    +
    +
    +

    Macro XML_SCHEMAS_TYPE_VARIETY_ATOMIC

    #define XML_SCHEMAS_TYPE_VARIETY_ATOMIC;
    +

    the simpleType has a variety of "union".

    +
    +
    +

    Macro XML_SCHEMAS_TYPE_VARIETY_LIST

    #define XML_SCHEMAS_TYPE_VARIETY_LIST;
    +

    the simpleType has a variety of "list".

    +
    +
    +

    Macro XML_SCHEMAS_TYPE_VARIETY_UNION

    #define XML_SCHEMAS_TYPE_VARIETY_UNION;
    +

    the simpleType has a variety of "union".

    +
    +
    +

    Macro XML_SCHEMAS_TYPE_WHITESPACE_COLLAPSE

    #define XML_SCHEMAS_TYPE_WHITESPACE_COLLAPSE;
    +

    a whitespace-facet value of "collapse"

    +
    +
    +

    Macro XML_SCHEMAS_TYPE_WHITESPACE_PRESERVE

    #define XML_SCHEMAS_TYPE_WHITESPACE_PRESERVE;
    +

    a whitespace-facet value of "preserve"

    +
    +
    +

    Macro XML_SCHEMAS_TYPE_WHITESPACE_REPLACE

    #define XML_SCHEMAS_TYPE_WHITESPACE_REPLACE;
    +

    a whitespace-facet value of "replace"

    +
    +
    +

    Macro XML_SCHEMAS_WILDCARD_COMPLETE

    #define XML_SCHEMAS_WILDCARD_COMPLETE;
    +

    If the wildcard is complete.

    +
    +
    +

    Structure xmlSchemaAnnot

    struct _xmlSchemaAnnot {
    +    struct _xmlSchemaAnnot *	next
    +    xmlNodePtr	content	: the annotation
    +} xmlSchemaAnnot;
    +

    +

    +
    +

    Typedef xmlSchemaAnnotPtr

    xmlSchemaAnnot * xmlSchemaAnnotPtr;
    +

    +

    +
    +

    Structure xmlSchemaAttribute

    struct _xmlSchemaAttribute {
    +    xmlSchemaTypeType	type
    +    struct _xmlSchemaAttribute *	next	: the next attribute (not used?)
    +    const xmlChar *	name	: the name of the declaration
    +    const xmlChar *	id	: Deprecated; not used
    +    const xmlChar *	ref	: Deprecated; not used
    +    const xmlChar *	refNs	: Deprecated; not used
    +    const xmlChar *	typeName	: the local name of the type definition
    +    const xmlChar *	typeNs	: the ns URI of the type definition
    +    xmlSchemaAnnotPtr	annot
    +    xmlSchemaTypePtr	base	: Deprecated; not used
    +    int	occurs	: Deprecated; not used
    +    const xmlChar *	defValue	: The initial value of the value constraint
    +    xmlSchemaTypePtr	subtypes	: the type definition
    +    xmlNodePtr	node
    +    const xmlChar *	targetNamespace
    +    int	flags
    +    const xmlChar *	refPrefix	: Deprecated; not used
    +    xmlSchemaValPtr	defVal	: The compiled value constraint
    +    xmlSchemaAttributePtr	refDecl	: Deprecated; not used
    +} xmlSchemaAttribute;
    +

    +

    +
    +

    Structure xmlSchemaAttributeGroup

    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	: Deprecated; not used
    +    const xmlChar *	refNs	: Deprecated; not used
    +    xmlSchemaAnnotPtr	annot
    +    xmlSchemaAttributePtr	attributes	: Deprecated; not used
    +    xmlNodePtr	node
    +    int	flags
    +    xmlSchemaWildcardPtr	attributeWildcard
    +    const xmlChar *	refPrefix	: Deprecated; not used
    +    xmlSchemaAttributeGroupPtr	refItem	: Deprecated; not used
    +    const xmlChar *	targetNamespace
    +    void *	attrUses
    +} xmlSchemaAttributeGroup;
    +

    +

    +
    +

    Typedef xmlSchemaAttributeGroupPtr

    xmlSchemaAttributeGroup * xmlSchemaAttributeGroupPtr;
    +

    +

    +
    +

    Structure xmlSchemaAttributeLink

    struct _xmlSchemaAttributeLink {
    +    struct _xmlSchemaAttributeLink *	next	: the next attribute link ...
    +    struct _xmlSchemaAttribute *	attr	: the linked attribute
    +} xmlSchemaAttributeLink;
    +

    +

    +
    +

    Typedef xmlSchemaAttributeLinkPtr

    xmlSchemaAttributeLink * xmlSchemaAttributeLinkPtr;
    +

    +

    +
    +

    Typedef xmlSchemaAttributePtr

    xmlSchemaAttribute * xmlSchemaAttributePtr;
    +

    +

    +
    + +
    +

    Structure xmlSchemaElement

    struct _xmlSchemaElement {
    +    xmlSchemaTypeType	type	: The kind of type
    +    struct _xmlSchemaType *	next	: Not used?
    +    const xmlChar *	name
    +    const xmlChar *	id	: Deprecated; not used
    +    const xmlChar *	ref	: Deprecated; not used
    +    const xmlChar *	refNs	: Deprecated; not used
    +    xmlSchemaAnnotPtr	annot
    +    xmlSchemaTypePtr	subtypes	: the type definition
    +    xmlSchemaAttributePtr	attributes
    +    xmlNodePtr	node
    +    int	minOccurs	: Deprecated; not used
    +    int	maxOccurs	: Deprecated; not used
    +    int	flags
    +    const xmlChar *	targetNamespace
    +    const xmlChar *	namedType
    +    const xmlChar *	namedTypeNs
    +    const xmlChar *	substGroup
    +    const xmlChar *	substGroupNs
    +    const xmlChar *	scope
    +    const xmlChar *	value	: The original value of the value constraint.
    +    struct _xmlSchemaElement *	refDecl	: This will now be used for the substitution group affiliation
    +    xmlRegexpPtr	contModel	: Obsolete for WXS, maybe used for RelaxNG
    +    xmlSchemaContentType	contentType
    +    const xmlChar *	refPrefix	: Deprecated; not used
    +    xmlSchemaValPtr	defVal	: The compiled value contraint.
    +    void *	idcs	: The identity-constraint defs
    +} xmlSchemaElement;
    +

    +

    +
    +

    Typedef xmlSchemaElementPtr

    xmlSchemaElement * xmlSchemaElementPtr;
    +

    +

    +
    +

    Structure xmlSchemaFacet

    struct _xmlSchemaFacet {
    +    xmlSchemaTypeType	type	: The kind of type
    +    struct _xmlSchemaFacet *	next	: the next type if in a sequence ...
    +    const xmlChar *	value	: The original value
    +    const xmlChar *	id	: Obsolete
    +    xmlSchemaAnnotPtr	annot
    +    xmlNodePtr	node
    +    int	fixed	: XML_SCHEMAS_FACET_PRESERVE, etc.
    +    int	whitespace
    +    xmlSchemaValPtr	val	: The compiled value
    +    xmlRegexpPtr	regexp	: The regex for patterns
    +} xmlSchemaFacet;
    +

    +

    +
    +

    Structure xmlSchemaFacetLink

    struct _xmlSchemaFacetLink {
    +    struct _xmlSchemaFacetLink *	next	: the next facet link ...
    +    xmlSchemaFacetPtr	facet	: the linked facet
    +} xmlSchemaFacetLink;
    +

    +

    +
    +

    Typedef xmlSchemaFacetLinkPtr

    xmlSchemaFacetLink * xmlSchemaFacetLinkPtr;
    +

    +

    +
    +

    Typedef xmlSchemaFacetPtr

    xmlSchemaFacet * xmlSchemaFacetPtr;
    +

    +

    +
    +

    Structure xmlSchemaNotation

    struct _xmlSchemaNotation {
    +    xmlSchemaTypeType	type	: The kind of type
    +    const xmlChar *	name
    +    xmlSchemaAnnotPtr	annot
    +    const xmlChar *	identifier
    +    const xmlChar *	targetNamespace
    +} xmlSchemaNotation;
    +

    +

    +
    +

    Typedef xmlSchemaNotationPtr

    xmlSchemaNotation * xmlSchemaNotationPtr;
    +

    +

    +
    +

    Structure xmlSchemaType

    struct _xmlSchemaType {
    +    xmlSchemaTypeType	type	: The kind of type
    +    struct _xmlSchemaType *	next	: the next type if in a sequence ...
    +    const xmlChar *	name
    +    const xmlChar *	id	: Deprecated; not used
    +    const xmlChar *	ref	: Deprecated; not used
    +    const xmlChar *	refNs	: Deprecated; not used
    +    xmlSchemaAnnotPtr	annot
    +    xmlSchemaTypePtr	subtypes
    +    xmlSchemaAttributePtr	attributes	: Deprecated; not used
    +    xmlNodePtr	node
    +    int	minOccurs	: Deprecated; not used
    +    int	maxOccurs	: Deprecated; not used
    +    int	flags
    +    xmlSchemaContentType	contentType
    +    const xmlChar *	base	: Base type's local name
    +    const xmlChar *	baseNs	: Base type's target namespace
    +    xmlSchemaTypePtr	baseType	: The base type component
    +    xmlSchemaFacetPtr	facets	: Local facets
    +    struct _xmlSchemaType *	redef	: Deprecated; not used
    +    int	recurse	: Obsolete
    +    xmlSchemaAttributeLinkPtr *	attributeUses	: Deprecated; not used
    +    xmlSchemaWildcardPtr	attributeWildcard
    +    int	builtInType	: Type of built-in types.
    +    xmlSchemaTypeLinkPtr	memberTypes	: member-types if a union type.
    +    xmlSchemaFacetLinkPtr	facetSet	: All facets (incl. inherited)
    +    const xmlChar *	refPrefix	: Deprecated; not used
    +    xmlSchemaTypePtr	contentTypeDef	: Used for the simple content of complex types. Could we use @subtypes
    +    xmlRegexpPtr	contModel	: Holds the automaton of the content model
    +    const xmlChar *	targetNamespace
    +    void *	attrUses
    +} xmlSchemaType;
    +

    +

    +
    +

    Structure xmlSchemaTypeLink

    struct _xmlSchemaTypeLink {
    +    struct _xmlSchemaTypeLink *	next	: the next type link ...
    +    xmlSchemaTypePtr	type	: the linked type
    +} xmlSchemaTypeLink;
    +

    +

    +
    +

    Typedef xmlSchemaTypeLinkPtr

    xmlSchemaTypeLink * xmlSchemaTypeLinkPtr;
    +

    +

    +
    +

    Typedef xmlSchemaTypePtr

    xmlSchemaType * xmlSchemaTypePtr;
    +

    +

    +
    + +
    +

    Structure xmlSchemaVal

    struct _xmlSchemaVal {
    +The content of this structure is not made public by the API.
    +} xmlSchemaVal;
    +

    +

    +
    +

    Typedef xmlSchemaValPtr

    xmlSchemaVal * xmlSchemaValPtr;
    +

    +

    +
    + +
    +

    Structure xmlSchemaWildcard

    struct _xmlSchemaWildcard {
    +    xmlSchemaTypeType	type	: The kind of type
    +    const xmlChar *	id	: Deprecated; not used
    +    xmlSchemaAnnotPtr	annot
    +    xmlNodePtr	node
    +    int	minOccurs	: Deprecated; not used
    +    int	maxOccurs	: Deprecated; not used
    +    int	processContents
    +    int	any	: Indicates if the ns constraint is of ##any
    +    xmlSchemaWildcardNsPtr	nsSet	: The list of allowed namespaces
    +    xmlSchemaWildcardNsPtr	negNsSet	: The negated namespace
    +    int	flags
    +} xmlSchemaWildcard;
    +

    +

    +
    +

    Structure xmlSchemaWildcardNs

    struct _xmlSchemaWildcardNs {
    +    struct _xmlSchemaWildcardNs *	next	: the next constraint link ...
    +    const xmlChar *	value	: the value
    +} xmlSchemaWildcardNs;
    +

    +

    +
    +

    Typedef xmlSchemaWildcardNsPtr

    xmlSchemaWildcardNs * xmlSchemaWildcardNsPtr;
    +

    +

    +
    +

    Typedef xmlSchemaWildcardPtr

    xmlSchemaWildcard * xmlSchemaWildcardPtr;
    +

    +

    +
    +

    xmlSchemaFreeType ()

    void	xmlSchemaFreeType		(xmlSchemaTypePtr type)
    +

    Deallocate a Schema Type structure.

    +
    type:a schema type structure
    +
    +

    xmlSchemaFreeWildcard ()

    void	xmlSchemaFreeWildcard		(xmlSchemaWildcardPtr wildcard)
    +

    Deallocates a wildcard structure.

    +
    wildcard:a wildcard structure
    +
    +
    +
    + + diff --git a/doc/devhelp/libxml2-schematron.html b/doc/devhelp/libxml2-schematron.html new file mode 100644 index 0000000..c99e33e --- /dev/null +++ b/doc/devhelp/libxml2-schematron.html @@ -0,0 +1,166 @@ + + + + + schematron: XML Schemastron implementation + + + + + + + + + + + + + + + + +

    + schematron +

    +

    schematron - XML Schemastron implementation

    +

    interface to the XML Schematron validity checking.

    +

    Author(s): Daniel Veillard

    + +
    +

    Description

    +
    +
    +

    Details

    +
    +

    Structure xmlSchematron

    struct _xmlSchematron {
    +The content of this structure is not made public by the API.
    +} xmlSchematron;
    +

    +

    +
    +

    Structure xmlSchematronParserCtxt

    struct _xmlSchematronParserCtxt {
    +The content of this structure is not made public by the API.
    +} xmlSchematronParserCtxt;
    +

    +

    +
    +

    Typedef xmlSchematronParserCtxtPtr

    xmlSchematronParserCtxt * xmlSchematronParserCtxtPtr;
    +

    +

    +
    +

    Typedef xmlSchematronPtr

    xmlSchematron * xmlSchematronPtr;
    +

    +

    +
    +

    Structure xmlSchematronValidCtxt

    struct _xmlSchematronValidCtxt {
    +The content of this structure is not made public by the API.
    +} xmlSchematronValidCtxt;
    +

    +

    +
    +

    Typedef xmlSchematronValidCtxtPtr

    xmlSchematronValidCtxt * xmlSchematronValidCtxtPtr;
    +

    +

    +
    +

    Enum xmlSchematronValidOptions

    enum xmlSchematronValidOptions {
    +    XML_SCHEMATRON_OUT_QUIET = 1 /* quiet no report */
    +    XML_SCHEMATRON_OUT_TEXT = 2 /* build a textual report */
    +    XML_SCHEMATRON_OUT_XML = 4 /* output SVRL */
    +    XML_SCHEMATRON_OUT_ERROR = 8 /* output via xmlStructuredErrorFunc */
    +    XML_SCHEMATRON_OUT_FILE = 256 /* output to a file descriptor */
    +    XML_SCHEMATRON_OUT_BUFFER = 512 /* output to a buffer */
    +    XML_SCHEMATRON_OUT_IO = 1024 /*  output to I/O mechanism */
    +};
    +

    +

    +
    + +
    +
    +
    +

    xmlSchematronFree ()

    void	xmlSchematronFree		(xmlSchematronPtr schema)
    +

    Deallocate a Schematron structure.

    +
    schema:a schema structure
    +
    +

    xmlSchematronFreeParserCtxt ()

    void	xmlSchematronFreeParserCtxt	(xmlSchematronParserCtxtPtr ctxt)
    +

    Free the resources associated to the schema parser context

    +
    ctxt:the schema parser context
    +
    +

    xmlSchematronFreeValidCtxt ()

    void	xmlSchematronFreeValidCtxt	(xmlSchematronValidCtxtPtr ctxt)
    +

    Free the resources associated to the schema validation context

    +
    ctxt:the schema validation context
    +
    +

    xmlSchematronNewDocParserCtxt ()

    xmlSchematronParserCtxtPtr	xmlSchematronNewDocParserCtxt	(xmlDocPtr doc)
    +

    Create an XML Schematrons parse context for that document. NB. The document may be modified during the parsing process.

    +
    doc:a preparsed document tree
    Returns:the parser context or NULL in case of error
    +
    +

    xmlSchematronNewMemParserCtxt ()

    xmlSchematronParserCtxtPtr	xmlSchematronNewMemParserCtxt	(const char * buffer, 
    int size)
    +

    Create an XML Schematrons parse context for that memory buffer expected to contain an XML Schematrons file.

    +
    buffer:a pointer to a char array containing the schemas
    size:the size of the array
    Returns:the parser context or NULL in case of error
    +
    +

    xmlSchematronNewParserCtxt ()

    xmlSchematronParserCtxtPtr	xmlSchematronNewParserCtxt	(const char * URL)
    +

    Create an XML Schematrons parse context for that file/resource expected to contain an XML Schematrons file.

    +
    URL:the location of the schema
    Returns:the parser context or NULL in case of error
    +
    +

    xmlSchematronNewValidCtxt ()

    xmlSchematronValidCtxtPtr	xmlSchematronNewValidCtxt	(xmlSchematronPtr schema, 
    int options)
    +

    Create an XML Schematrons validation context based on the given schema.

    +
    schema:a precompiled XML Schematrons
    options:a set of xmlSchematronValidOptions
    Returns:the validation context or NULL in case of error
    +
    +

    xmlSchematronParse ()

    xmlSchematronPtr	xmlSchematronParse	(xmlSchematronParserCtxtPtr ctxt)
    +

    parse a schema definition resource and build an internal XML Shema struture which can be used to validate instances.

    +
    ctxt:a schema validation context
    Returns:the internal XML Schematron structure built from the resource or NULL in case of error
    +
    +

    xmlSchematronSetValidStructuredErrors ()

    void	xmlSchematronSetValidStructuredErrors	(xmlSchematronValidCtxtPtr ctxt, 
    xmlStructuredErrorFunc serror,
    void * ctx)
    +

    Set the structured error callback

    +
    ctxt:a Schematron validation context
    serror:the structured error function
    ctx:the functions context
    +
    +

    xmlSchematronValidateDoc ()

    int	xmlSchematronValidateDoc	(xmlSchematronValidCtxtPtr ctxt, 
    xmlDocPtr instance)
    +

    Validate a tree instance against the schematron

    +
    ctxt:the schema validation context
    instance:the document instace tree
    Returns:0 in case of success, -1 in case of internal error and an error count otherwise.
    +
    +
    +
    + + diff --git a/doc/devhelp/libxml2-threads.html b/doc/devhelp/libxml2-threads.html new file mode 100644 index 0000000..0ddd0bc --- /dev/null +++ b/doc/devhelp/libxml2-threads.html @@ -0,0 +1,161 @@ + + + + + threads: interfaces for thread handling + + + + + + + + + + + + + + + + +

    + threads +

    +

    threads - interfaces for thread handling

    +

    set of generic threading related routines should work with pthreads, Windows native or TLS threads

    +

    Author(s): Daniel Veillard

    +
    +

    Synopsis

    +
    typedef struct _xmlMutex xmlMutex;
    +typedef struct _xmlRMutex xmlRMutex;
    +typedef xmlRMutex * xmlRMutexPtr;
    +typedef xmlMutex * xmlMutexPtr;
    +void	xmlFreeRMutex			(xmlRMutexPtr tok);
    +int	xmlGetThreadId			(void);
    +void	xmlMutexUnlock			(xmlMutexPtr tok);
    +void	xmlCleanupThreads		(void);
    +void	xmlLockLibrary			(void);
    +xmlRMutexPtr	xmlNewRMutex		(void);
    +void	xmlMutexLock			(xmlMutexPtr tok);
    +int	xmlIsMainThread			(void);
    +void	xmlRMutexUnlock			(xmlRMutexPtr tok);
    +xmlGlobalStatePtr	xmlGetGlobalState	(void);
    +xmlMutexPtr	xmlNewMutex		(void);
    +int	xmlDllMain			(void * hinstDLL, 
    unsigned long fdwReason,
    void * lpvReserved); +void xmlFreeMutex (xmlMutexPtr tok); +void xmlUnlockLibrary (void); +void xmlInitThreads (void); +void xmlRMutexLock (xmlRMutexPtr tok); +
    +
    +
    +

    Description

    +
    +
    +

    Details

    +
    +

    Structure xmlMutex

    struct _xmlMutex {
    +The content of this structure is not made public by the API.
    +} xmlMutex;
    +

    +

    +
    +

    Typedef xmlMutexPtr

    xmlMutex * xmlMutexPtr;
    +

    +

    +
    +

    Structure xmlRMutex

    struct _xmlRMutex {
    +The content of this structure is not made public by the API.
    +} xmlRMutex;
    +

    +

    +
    +

    Typedef xmlRMutexPtr

    xmlRMutex * xmlRMutexPtr;
    +

    +

    +
    + +
    +
    +
    +

    xmlFreeMutex ()

    void	xmlFreeMutex			(xmlMutexPtr tok)
    +

    xmlFreeMutex() is used to reclaim resources associated with a libxml2 token struct.

    +
    tok:the simple mutex
    +
    +

    xmlFreeRMutex ()

    void	xmlFreeRMutex			(xmlRMutexPtr tok)
    +

    xmlRFreeMutex() is used to reclaim resources associated with a reentrant mutex.

    +
    tok:the reentrant mutex
    +
    +

    xmlGetGlobalState ()

    xmlGlobalStatePtr	xmlGetGlobalState	(void)
    +

    xmlGetGlobalState() is called to retrieve the global state for a thread.

    +
    Returns:the thread global state or NULL in case of error
    +
    + +
    +
    +
    +
    +
    +
    +
    +

    xmlMutexLock ()

    void	xmlMutexLock			(xmlMutexPtr tok)
    +

    xmlMutexLock() is used to lock a libxml2 token.

    +
    tok:the simple mutex
    +
    +

    xmlMutexUnlock ()

    void	xmlMutexUnlock			(xmlMutexPtr tok)
    +

    xmlMutexUnlock() is used to unlock a libxml2 token.

    +
    tok:the simple mutex
    +
    +

    xmlNewMutex ()

    xmlMutexPtr	xmlNewMutex		(void)
    +

    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
    +
    +

    xmlNewRMutex ()

    xmlRMutexPtr	xmlNewRMutex		(void)
    +

    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
    +
    +

    xmlRMutexLock ()

    void	xmlRMutexLock			(xmlRMutexPtr tok)
    +

    xmlRMutexLock() is used to lock a libxml2 token_r.

    +
    tok:the reentrant mutex
    +
    +

    xmlRMutexUnlock ()

    void	xmlRMutexUnlock			(xmlRMutexPtr tok)
    +

    xmlRMutexUnlock() is used to unlock a libxml2 token_r.

    +
    tok:the reentrant mutex
    +
    + +
    +
    +
    + + diff --git a/doc/devhelp/libxml2-tree.html b/doc/devhelp/libxml2-tree.html new file mode 100644 index 0000000..ac85d60 --- /dev/null +++ b/doc/devhelp/libxml2-tree.html @@ -0,0 +1,1598 @@ + + + + + tree: interfaces for tree manipulation + + + + + + + + + + + + + + + + +

    + tree +

    +

    tree - interfaces for tree manipulation

    +

    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

    +

    Author(s): Daniel Veillard

    +
    +

    Synopsis

    +
    #define XML_LOCAL_NAMESPACE;
    +#define BASE_BUFFER_SIZE;
    +#define XML_XML_ID;
    +#define xmlRootNode;
    +#define XML_GET_LINE;
    +#define XML_GET_CONTENT;
    +#define xmlChildrenNode;
    +#define XML_XML_NAMESPACE;
    +#define LIBXML2_NEW_BUFFER;
    +typedef struct _xmlNs xmlNs;
    +typedef struct _xmlElementContent xmlElementContent;
    +typedef xmlEnumeration * xmlEnumerationPtr;
    +typedef struct _xmlBuffer xmlBuffer;
    +typedef xmlParserInput * xmlParserInputPtr;
    +typedef xmlSAXLocator * xmlSAXLocatorPtr;
    +typedef struct _xmlParserInput xmlParserInput;
    +typedef struct _xmlElement xmlElement;
    +typedef xmlElementType xmlNsType;
    +typedef enum xmlBufferAllocationScheme;
    +typedef struct _xmlNode xmlNode;
    +typedef xmlDoc * xmlDocPtr;
    +typedef xmlBuffer * xmlBufferPtr;
    +typedef xmlDOMWrapCtxt * xmlDOMWrapCtxtPtr;
    +typedef xmlRef * xmlRefPtr;
    +typedef struct _xmlParserInputBuffer xmlParserInputBuffer;
    +typedef struct _xmlRef xmlRef;
    +typedef struct _xmlDOMWrapCtxt xmlDOMWrapCtxt;
    +typedef xmlNode * xmlNodePtr;
    +typedef struct _xmlParserCtxt xmlParserCtxt;
    +typedef xmlDtd * xmlDtdPtr;
    +typedef enum xmlAttributeDefault;
    +typedef struct _xmlBuf xmlBuf;
    +typedef struct _xmlNotation xmlNotation;
    +typedef enum xmlElementType;
    +typedef struct _xmlEntity xmlEntity;
    +typedef struct _xmlAttr xmlAttr;
    +typedef xmlAttribute * xmlAttributePtr;
    +typedef enum xmlElementTypeVal;
    +typedef xmlNotation * xmlNotationPtr;
    +typedef xmlElement * xmlElementPtr;
    +typedef xmlBuf * xmlBufPtr;
    +typedef enum xmlElementContentOccur;
    +typedef xmlAttr * xmlAttrPtr;
    +typedef struct _xmlDoc xmlDoc;
    +typedef struct _xmlID xmlID;
    +typedef xmlParserCtxt * xmlParserCtxtPtr;
    +typedef xmlEntity * xmlEntityPtr;
    +typedef struct _xmlEnumeration xmlEnumeration;
    +typedef enum xmlAttributeType;
    +typedef xmlNs * xmlNsPtr;
    +typedef xmlParserInputBuffer * xmlParserInputBufferPtr;
    +typedef struct _xmlSAXHandler xmlSAXHandler;
    +typedef struct _xmlOutputBuffer xmlOutputBuffer;
    +typedef struct _xmlSAXLocator xmlSAXLocator;
    +typedef xmlElementContent * xmlElementContentPtr;
    +typedef enum xmlElementContentType;
    +typedef enum xmlDocProperties;
    +typedef xmlID * xmlIDPtr;
    +typedef struct _xmlDtd xmlDtd;
    +typedef struct _xmlAttribute xmlAttribute;
    +typedef xmlOutputBuffer * xmlOutputBufferPtr;
    +typedef xmlSAXHandler * xmlSAXHandlerPtr;
    +xmlNodePtr	xmlDocCopyNode		(xmlNodePtr node, 
    xmlDocPtr doc,
    int extended); +xmlNodePtr xmlNewDocRawNode (xmlDocPtr doc,
    xmlNsPtr ns,
    const xmlChar * name,
    const xmlChar * content); +xmlChar * xmlBufContent (const xmlBuf * buf); +xmlAttrPtr xmlNewNsPropEatName (xmlNodePtr node,
    xmlNsPtr ns,
    xmlChar * name,
    const xmlChar * value); +xmlNodePtr xmlStringGetNodeList (const xmlDoc * doc,
    const xmlChar * value); +xmlNodePtr xmlNewCDataBlock (xmlDocPtr doc,
    const xmlChar * content,
    int len); +void xmlBufferWriteCHAR (xmlBufferPtr buf,
    const xmlChar * string); +xmlChar * xmlNodeGetBase (const xmlDoc * doc,
    const xmlNode * cur); +void xmlBufferEmpty (xmlBufferPtr buf); +xmlChar * xmlBuildQName (const xmlChar * ncname,
    const xmlChar * prefix,
    xmlChar * memory,
    int len); +int xmlValidateNMToken (const xmlChar * value,
    int space); +int xmlSaveFormatFileEnc (const char * filename,
    xmlDocPtr cur,
    const char * encoding,
    int format); +xmlNodePtr xmlAddSibling (xmlNodePtr cur,
    xmlNodePtr elem); +xmlBufferPtr xmlBufferCreate (void); +xmlNodePtr xmlNewDocFragment (xmlDocPtr doc); +xmlNodePtr xmlDocGetRootElement (const xmlDoc * doc); +xmlChar * xmlGetProp (const xmlNode * node,
    const xmlChar * name); +int xmlValidateName (const xmlChar * value,
    int space); +xmlChar * xmlBufEnd (xmlBufPtr buf); +int xmlValidateQName (const xmlChar * value,
    int space); +xmlAttrPtr xmlHasNsProp (const xmlNode * node,
    const xmlChar * name,
    const xmlChar * nameSpace); +xmlNodePtr xmlAddPrevSibling (xmlNodePtr cur,
    xmlNodePtr elem); +int xmlBufferAddHead (xmlBufferPtr buf,
    const xmlChar * str,
    int len); +xmlNodePtr xmlNewPI (const xmlChar * name,
    const xmlChar * content); +void xmlDocDumpFormatMemoryEnc (xmlDocPtr out_doc,
    xmlChar ** doc_txt_ptr,
    int * doc_txt_len,
    const char * txt_encoding,
    int format); +xmlAttrPtr xmlSetProp (xmlNodePtr node,
    const xmlChar * name,
    const xmlChar * value); +unsigned long xmlChildElementCount (xmlNodePtr parent); +void xmlElemDump (FILE * f,
    xmlDocPtr doc,
    xmlNodePtr cur); +int xmlSaveFormatFileTo (xmlOutputBufferPtr buf,
    xmlDocPtr cur,
    const char * encoding,
    int format); +xmlDtdPtr xmlGetIntSubset (const xmlDoc * doc); +int xmlNodeBufGetContent (xmlBufferPtr buffer,
    const xmlNode * cur); +xmlNodePtr xmlNextElementSibling (xmlNodePtr node); +void xmlBufferWriteChar (xmlBufferPtr buf,
    const char * string); +void xmlBufferFree (xmlBufferPtr buf); +int xmlDOMWrapCloneNode (xmlDOMWrapCtxtPtr ctxt,
    xmlDocPtr sourceDoc,
    xmlNodePtr node,
    xmlNodePtr * resNode,
    xmlDocPtr destDoc,
    xmlNodePtr destParent,
    int deep,
    int options); +xmlNodePtr xmlNewNode (xmlNsPtr ns,
    const xmlChar * name); +int xmlSaveFileTo (xmlOutputBufferPtr buf,
    xmlDocPtr cur,
    const char * encoding); +xmlNodePtr xmlNewTextLen (const xmlChar * content,
    int len); +xmlNodePtr xmlNewTextChild (xmlNodePtr parent,
    xmlNsPtr ns,
    const xmlChar * name,
    const xmlChar * content); +void xmlNodeSetContent (xmlNodePtr cur,
    const xmlChar * content); +int xmlBufferAdd (xmlBufferPtr buf,
    const xmlChar * str,
    int len); +void xmlNodeDumpOutput (xmlOutputBufferPtr buf,
    xmlDocPtr doc,
    xmlNodePtr cur,
    int level,
    int format,
    const char * encoding); +xmlNsPtr xmlCopyNamespace (xmlNsPtr cur); +xmlNsPtr xmlSearchNsByHref (xmlDocPtr doc,
    xmlNodePtr node,
    const xmlChar * href); +xmlNodePtr xmlAddChild (xmlNodePtr parent,
    xmlNodePtr cur); +int xmlReconciliateNs (xmlDocPtr doc,
    xmlNodePtr tree); +int xmlValidateNCName (const xmlChar * value,
    int space); +xmlNodePtr xmlNewDocComment (xmlDocPtr doc,
    const xmlChar * content); +int xmlGetCompressMode (void); +int xmlNodeDump (xmlBufferPtr buf,
    xmlDocPtr doc,
    xmlNodePtr cur,
    int level,
    int format); +xmlBufferPtr xmlBufferCreateSize (size_t size); +xmlChar * xmlNodeListGetString (xmlDocPtr doc,
    const xmlNode * list,
    int inLine); +void xmlSetCompressMode (int mode); +void xmlSetTreeDoc (xmlNodePtr tree,
    xmlDocPtr doc); +int xmlDOMWrapAdoptNode (xmlDOMWrapCtxtPtr ctxt,
    xmlDocPtr sourceDoc,
    xmlNodePtr node,
    xmlDocPtr destDoc,
    xmlNodePtr destParent,
    int options); +xmlNodePtr xmlCopyNodeList (xmlNodePtr node); +xmlNodePtr xmlNewDocNodeEatName (xmlDocPtr doc,
    xmlNsPtr ns,
    xmlChar * name,
    const xmlChar * content); +xmlNodePtr xmlAddChildList (xmlNodePtr parent,
    xmlNodePtr cur); +xmlChar * xmlGetNodePath (const xmlNode * node); +void xmlFreePropList (xmlAttrPtr cur); +void xmlNodeAddContent (xmlNodePtr cur,
    const xmlChar * content); +int xmlUnsetNsProp (xmlNodePtr node,
    xmlNsPtr ns,
    const xmlChar * name); +xmlNodePtr xmlFirstElementChild (xmlNodePtr parent); +xmlNodePtr xmlAddNextSibling (xmlNodePtr cur,
    xmlNodePtr elem); +int xmlIsBlankNode (const xmlNode * node); +xmlNsPtr xmlNewGlobalNs (xmlDocPtr doc,
    const xmlChar * href,
    const xmlChar * prefix); +int xmlBufferDump (FILE * file,
    xmlBufferPtr buf); +xmlChar * xmlNodeGetContent (const xmlNode * cur); +xmlDocPtr xmlCopyDoc (xmlDocPtr doc,
    int recursive); +xmlDOMWrapCtxtPtr xmlDOMWrapNewCtxt (void); +void xmlDocDumpMemoryEnc (xmlDocPtr out_doc,
    xmlChar ** doc_txt_ptr,
    int * doc_txt_len,
    const char * txt_encoding); +int xmlBufGetNodeContent (xmlBufPtr buf,
    const xmlNode * cur); +xmlNodePtr xmlTextMerge (xmlNodePtr first,
    xmlNodePtr second); +void xmlDocDumpMemory (xmlDocPtr cur,
    xmlChar ** mem,
    int * size); +xmlNodePtr xmlNewDocPI (xmlDocPtr doc,
    const xmlChar * name,
    const xmlChar * content); +void xmlFreeNs (xmlNsPtr cur); +int xmlDocDump (FILE * f,
    xmlDocPtr cur); +void xmlFreeProp (xmlAttrPtr cur); +xmlChar * xmlGetNoNsProp (const xmlNode * node,
    const xmlChar * name); +xmlChar * xmlSplitQName2 (const xmlChar * name,
    xmlChar ** prefix); +xmlAttrPtr xmlNewProp (xmlNodePtr node,
    const xmlChar * name,
    const xmlChar * value); +int xmlTextConcat (xmlNodePtr node,
    const xmlChar * content,
    int len); +int xmlNodeGetSpacePreserve (const xmlNode * cur); +int xmlBufferShrink (xmlBufferPtr buf,
    unsigned int len); +xmlNodePtr xmlPreviousElementSibling (xmlNodePtr node); +void xmlNodeSetContentLen (xmlNodePtr cur,
    const xmlChar * content,
    int len); +void xmlNodeAddContentLen (xmlNodePtr cur,
    const xmlChar * content,
    int len); +void xmlBufferWriteQuotedString (xmlBufferPtr buf,
    const xmlChar * string); +xmlAttrPtr xmlCopyProp (xmlNodePtr target,
    xmlAttrPtr cur); +xmlNodePtr xmlReplaceNode (xmlNodePtr old,
    xmlNodePtr cur); +void xmlSetDocCompressMode (xmlDocPtr doc,
    int mode); +xmlNodePtr xmlCopyNode (xmlNodePtr node,
    int extended); +void xmlUnlinkNode (xmlNodePtr cur); +const xmlChar * xmlSplitQName3 (const xmlChar * name,
    int * len); +typedef xmlNsPtr xmlDOMWrapAcquireNsFunction (xmlDOMWrapCtxtPtr ctxt,
    xmlNodePtr node,
    const xmlChar * nsName,
    const xmlChar * nsPrefix); +size_t xmlBufUse (const xmlBufPtr buf); +xmlNodePtr xmlDocSetRootElement (xmlDocPtr doc,
    xmlNodePtr root); +long xmlGetLineNo (const xmlNode * node); +const xmlChar * xmlBufferContent (const xmlBuffer * buf); +int xmlRemoveProp (xmlAttrPtr cur); +xmlNodePtr xmlLastElementChild (xmlNodePtr parent); +xmlChar * xmlNodeGetLang (const xmlNode * cur); +int xmlGetDocCompressMode (const xmlDoc * doc); +size_t xmlBufNodeDump (xmlBufPtr buf,
    xmlDocPtr doc,
    xmlNodePtr cur,
    int level,
    int format); +xmlChar * xmlGetNsProp (const xmlNode * node,
    const xmlChar * name,
    const xmlChar * nameSpace); +xmlAttrPtr xmlNewDocProp (xmlDocPtr doc,
    const xmlChar * name,
    const xmlChar * value); +void xmlFreeNode (xmlNodePtr cur); +xmlAttrPtr xmlNewNsProp (xmlNodePtr node,
    xmlNsPtr ns,
    const xmlChar * name,
    const xmlChar * value); +void xmlDOMWrapFreeCtxt (xmlDOMWrapCtxtPtr ctxt); +xmlChar * xmlBufferDetach (xmlBufferPtr buf); +void xmlBufferSetAllocationScheme (xmlBufferPtr buf,
    xmlBufferAllocationScheme scheme); +xmlNodePtr xmlNewChild (xmlNodePtr parent,
    xmlNsPtr ns,
    const xmlChar * name,
    const xmlChar * content); +xmlNsPtr xmlSearchNs (xmlDocPtr doc,
    xmlNodePtr node,
    const xmlChar * nameSpace); +xmlNodePtr xmlStringLenGetNodeList (const xmlDoc * doc,
    const xmlChar * value,
    int len); +int xmlSaveFormatFile (const char * filename,
    xmlDocPtr cur,
    int format); +xmlAttrPtr xmlCopyPropList (xmlNodePtr target,
    xmlAttrPtr cur); +int xmlDocFormatDump (FILE * f,
    xmlDocPtr cur,
    int format); +void xmlNodeSetSpacePreserve (xmlNodePtr cur,
    int val); +xmlAttrPtr xmlHasProp (const xmlNode * node,
    const xmlChar * name); +int xmlBufferCat (xmlBufferPtr buf,
    const xmlChar * str); +xmlDtdPtr xmlCreateIntSubset (xmlDocPtr doc,
    const xmlChar * name,
    const xmlChar * ExternalID,
    const xmlChar * SystemID); +xmlDocPtr xmlNewDoc (const xmlChar * version); +xmlNodePtr xmlNewCharRef (xmlDocPtr doc,
    const xmlChar * name); +xmlNsPtr xmlCopyNamespaceList (xmlNsPtr cur); +xmlNodePtr xmlNewNodeEatName (xmlNsPtr ns,
    xmlChar * name); +int xmlBufferResize (xmlBufferPtr buf,
    unsigned int size); +void xmlNodeSetBase (xmlNodePtr cur,
    const xmlChar * uri); +xmlNodePtr xmlNewComment (const xmlChar * content); +int xmlBufferLength (const xmlBuffer * buf); +xmlNodePtr xmlNewText (const xmlChar * content); +int xmlUnsetProp (xmlNodePtr node,
    const xmlChar * name); +xmlBufferAllocationScheme xmlGetBufferAllocationScheme (void); +int xmlSaveFile (const char * filename,
    xmlDocPtr cur); +xmlNodePtr xmlDocCopyNodeList (xmlDocPtr doc,
    xmlNodePtr node); +void xmlSetNs (xmlNodePtr node,
    xmlNsPtr ns); +xmlNsPtr xmlNewNs (xmlNodePtr node,
    const xmlChar * href,
    const xmlChar * prefix); +int xmlDOMWrapRemoveNode (xmlDOMWrapCtxtPtr ctxt,
    xmlDocPtr doc,
    xmlNodePtr node,
    int options); +void xmlAttrSerializeTxtContent (xmlBufferPtr buf,
    xmlDocPtr doc,
    xmlAttrPtr attr,
    const xmlChar * string); +xmlDtdPtr xmlCopyDtd (xmlDtdPtr dtd); +xmlNodePtr xmlNewDocText (const xmlDoc * doc,
    const xmlChar * content); +xmlChar * xmlNodeListGetRawString (const xmlDoc * doc,
    const xmlNode * list,
    int inLine); +xmlBufferPtr xmlBufferCreateStatic (void * mem,
    size_t size); +xmlNodePtr xmlNewReference (const xmlDoc * doc,
    const xmlChar * name); +int xmlDOMWrapReconcileNamespaces (xmlDOMWrapCtxtPtr ctxt,
    xmlNodePtr elem,
    int options); +int xmlBufferCCat (xmlBufferPtr buf,
    const char * str); +xmlNsPtr * xmlGetNsList (const xmlDoc * doc,
    const xmlNode * node); +int xmlBufferGrow (xmlBufferPtr buf,
    unsigned int len); +int xmlNodeIsText (const xmlNode * node); +void xmlSetBufferAllocationScheme (xmlBufferAllocationScheme scheme); +int xmlIsXHTML (const xmlChar * systemID,
    const xmlChar * publicID); +void xmlNodeSetLang (xmlNodePtr cur,
    const xmlChar * lang); +void xmlFreeDtd (xmlDtdPtr cur); +void xmlFreeNodeList (xmlNodePtr cur); +void xmlFreeDoc (xmlDocPtr cur); +size_t xmlBufShrink (xmlBufPtr buf,
    size_t len); +xmlNodePtr xmlNewDocNode (xmlDocPtr doc,
    xmlNsPtr ns,
    const xmlChar * name,
    const xmlChar * content); +int xmlSaveFileEnc (const char * filename,
    xmlDocPtr cur,
    const char * encoding); +xmlAttrPtr xmlSetNsProp (xmlNodePtr node,
    xmlNsPtr ns,
    const xmlChar * name,
    const xmlChar * value); +void xmlDocDumpFormatMemory (xmlDocPtr cur,
    xmlChar ** mem,
    int * size,
    int format); +void xmlSetListDoc (xmlNodePtr list,
    xmlDocPtr doc); +void xmlNodeSetName (xmlNodePtr cur,
    const xmlChar * name); +xmlNodePtr xmlNewDocTextLen (xmlDocPtr doc,
    const xmlChar * content,
    int len); +xmlDtdPtr xmlNewDtd (xmlDocPtr doc,
    const xmlChar * name,
    const xmlChar * ExternalID,
    const xmlChar * SystemID); +void xmlFreeNsList (xmlNsPtr cur); +xmlNodePtr xmlGetLastChild (const xmlNode * parent); +
    +
    +
    +

    Description

    +
    +
    +

    Details

    +
    +

    Macro BASE_BUFFER_SIZE

    #define BASE_BUFFER_SIZE;
    +

    default buffer size 4000.

    +
    +
    +

    Macro LIBXML2_NEW_BUFFER

    #define LIBXML2_NEW_BUFFER;
    +

    Macro used to express that the API use the new buffers for xmlParserInputBuffer and xmlOutputBuffer. The change was introduced in 2.9.0.

    +
    +
    +

    Macro XML_GET_CONTENT

    #define XML_GET_CONTENT;
    +

    Macro to extract the content pointer of a node.

    +
    +
    +

    Macro XML_GET_LINE

    #define XML_GET_LINE;
    +

    Macro to extract the line number of an element node.

    +
    +
    +

    Macro XML_LOCAL_NAMESPACE

    #define XML_LOCAL_NAMESPACE;
    +

    A namespace declaration node.

    +
    +
    +

    Macro XML_XML_ID

    #define XML_XML_ID;
    +

    This is the name for the special xml:id attribute

    +
    +
    +

    Macro XML_XML_NAMESPACE

    #define XML_XML_NAMESPACE;
    +

    This is the namespace for the special xml: prefix predefined in the XML Namespace specification.

    +
    +
    +

    Macro xmlChildrenNode

    #define xmlChildrenNode;
    +

    Macro for compatibility naming layer with libxml1. Maps to "children."

    +
    +
    +

    Macro xmlRootNode

    #define xmlRootNode;
    +

    Macro for compatibility naming layer with libxml1. Maps to "children".

    +
    +
    +

    Structure xmlAttr

    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
    +} xmlAttr;
    +

    +

    +
    +

    Typedef xmlAttrPtr

    xmlAttr * xmlAttrPtr;
    +

    +

    +
    +

    Structure xmlAttribute

    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
    +} xmlAttribute;
    +

    +

    +
    + +
    +

    Typedef xmlAttributePtr

    xmlAttribute * xmlAttributePtr;
    +

    +

    +
    + +
    +

    Structure xmlBuf

    struct _xmlBuf {
    +The content of this structure is not made public by the API.
    +} xmlBuf;
    +

    +

    +
    +

    Typedef xmlBufPtr

    xmlBuf * xmlBufPtr;
    +

    A pointer to a buffer structure, the actual structure internals are not public

    +
    +
    +

    Structure xmlBuffer

    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
    +    xmlChar *	contentIO	: in IO mode we may have a different base
    +} xmlBuffer;
    +

    +

    +
    +

    Enum xmlBufferAllocationScheme

    enum xmlBufferAllocationScheme {
    +    XML_BUFFER_ALLOC_DOUBLEIT = 1 /* double each time one need to grow */
    +    XML_BUFFER_ALLOC_EXACT = 2 /* grow only to the minimal size */
    +    XML_BUFFER_ALLOC_IMMUTABLE = 3 /* immutable buffer */
    +    XML_BUFFER_ALLOC_IO = 4 /* special allocation scheme used for I/O */
    +    XML_BUFFER_ALLOC_HYBRID = 5 /* exact up to a threshold, and doubleit thereafter */
    +    XML_BUFFER_ALLOC_BOUNDED = 6 /*  limit the upper size of the buffer */
    +};
    +

    +

    +
    +

    Typedef xmlBufferPtr

    xmlBuffer * xmlBufferPtr;
    +

    +

    +
    +

    Structure xmlDOMWrapCtxt

    struct _xmlDOMWrapCtxt {
    +    void *	_private	: * The type of this context, just in case we need specialized * context
    +    int	type	: * Internal namespace map used for various operations. *
    +    void *	namespaceMap	: * Use this one to acquire an xmlNsPtr intended for node->ns. * (Note t
    +    xmlDOMWrapAcquireNsFunction	getNsForNodeFunc
    +} xmlDOMWrapCtxt;
    +

    +

    +
    +

    Typedef xmlDOMWrapCtxtPtr

    xmlDOMWrapCtxt * xmlDOMWrapCtxtPtr;
    +

    +

    +
    +

    Structure xmlDoc

    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) 1 if standalone="yes" 0 if sta
    +    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
    +    int	parseFlags	: set of xmlParserOption used to parse the document
    +    int	properties	: set of xmlDocProperties for this document set at the end of parsing
    +} xmlDoc;
    +

    +

    +
    +

    Enum xmlDocProperties

    enum xmlDocProperties {
    +    XML_DOC_WELLFORMED = 1 /* document is XML well formed */
    +    XML_DOC_NSVALID = 2 /* document is Namespace valid */
    +    XML_DOC_OLD10 = 4 /* parsed with old XML-1.0 parser */
    +    XML_DOC_DTDVALID = 8 /* DTD validation was successful */
    +    XML_DOC_XINCLUDE = 16 /* XInclude substitution was done */
    +    XML_DOC_USERBUILT = 32 /* Document was built using the API and not by parsing an instance */
    +    XML_DOC_INTERNAL = 64 /* built for internal processing */
    +    XML_DOC_HTML = 128 /*  parsed or built HTML document */
    +};
    +

    +

    +
    +

    Typedef xmlDocPtr

    xmlDoc * xmlDocPtr;
    +

    +

    +
    +

    Structure xmlDtd

    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
    +} xmlDtd;
    +

    +

    +
    +

    Typedef xmlDtdPtr

    xmlDtd * xmlDtdPtr;
    +

    +

    +
    +

    Structure xmlElement

    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
    +    xmlRegexpPtr	contModel	: the validating regexp
    +    void *	contModel
    +} xmlElement;
    +

    +

    +
    +

    Structure xmlElementContent

    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
    +} xmlElementContent;
    +

    +

    +
    + +
    +

    Typedef xmlElementContentPtr

    xmlElementContent * xmlElementContentPtr;
    +

    +

    +
    + +
    +

    Typedef xmlElementPtr

    xmlElement * xmlElementPtr;
    +

    +

    +
    + +
    + +
    +

    Structure xmlEntity

    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
    +    int	checked	: was the entity content checked this is also used to count entities *
    +} xmlEntity;
    +

    +

    +
    +

    Typedef xmlEntityPtr

    xmlEntity * xmlEntityPtr;
    +

    +

    +
    +

    Structure xmlEnumeration

    struct _xmlEnumeration {
    +    struct _xmlEnumeration *	next	: next one
    +    const xmlChar *	name	: Enumeration name
    +} xmlEnumeration;
    +

    +

    +
    +

    Typedef xmlEnumerationPtr

    xmlEnumeration * xmlEnumerationPtr;
    +

    +

    +
    +

    Structure xmlID

    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
    +} xmlID;
    +

    +

    +
    +

    Typedef xmlIDPtr

    xmlID * xmlIDPtr;
    +

    +

    +
    +

    Structure xmlNode

    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
    +} xmlNode;
    +

    +

    +
    +

    Typedef xmlNodePtr

    xmlNode * xmlNodePtr;
    +

    +

    +
    +

    Structure xmlNotation

    struct _xmlNotation {
    +    const xmlChar *	name	: Notation name
    +    const xmlChar *	PublicID	: Public identifier, if any
    +    const xmlChar *	SystemID	: System identifier, if any
    +} xmlNotation;
    +

    +

    +
    +

    Typedef xmlNotationPtr

    xmlNotation * xmlNotationPtr;
    +

    +

    +
    +

    Structure xmlNs

    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
    +    struct _xmlDoc *	context	: normally an xmlDoc
    +} xmlNs;
    +

    +

    +
    +

    Typedef xmlNsPtr

    xmlNs * xmlNsPtr;
    +

    +

    +
    +

    Typedef xmlNsType

    xmlElementType xmlNsType;
    +

    +

    +
    +

    Structure xmlOutputBuffer

    struct _xmlOutputBuffer {
    +    void *	context
    +    xmlOutputWriteCallback	writecallback
    +    xmlOutputCloseCallback	closecallback
    +    xmlCharEncodingHandlerPtr	encoder	: I18N conversions to UTF-8
    +    xmlBufPtr	buffer	: Local buffer encoded in UTF-8 or ISOLatin
    +    xmlBufPtr	conv	: if encoder != NULL buffer for output
    +    int	written	: total number of byte written
    +    int	error
    +} xmlOutputBuffer;
    +

    +

    +
    +

    Typedef xmlOutputBufferPtr

    xmlOutputBuffer * xmlOutputBufferPtr;
    +

    +

    +
    +

    Structure xmlParserCtxt

    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 * 3 is HTML after <head> * 10 is HTML
    +    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	: dictionary for the parser
    +    const xmlChar * *	atts	: array for the attributes callbacks
    +    int	maxatts	: the size of the array
    +    int	docdict	: * 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	: * 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	: * the complete error informations for the last error. *
    +    xmlError	lastError
    +    xmlParserMode	parseMode	: the parser mode
    +    unsigned long	nbentities	: number of entities references
    +    unsigned long	sizeentities	: size of parsed entities for use by HTML non-recursive parser
    +    xmlParserNodeInfo *	nodeInfo	: Current NodeInfo
    +    int	nodeInfoNr	: Depth of the parsing stack
    +    int	nodeInfoMax	: Max depth of the parsing stack
    +    xmlParserNodeInfo *	nodeInfoTab	: array of nodeInfos
    +    int	input_id	: we need to label inputs
    +    unsigned long	sizeentcopy	: volume of entity copy
    +} xmlParserCtxt;
    +

    +

    +
    +

    Typedef xmlParserCtxtPtr

    xmlParserCtxt * xmlParserCtxtPtr;
    +

    +

    +
    +

    Structure xmlParserInput

    struct _xmlParserInput {
    +    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	: * NOTE: consumed is only tested for equality in the parser code, *
    +    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
    +} xmlParserInput;
    +

    +

    +
    +

    Structure xmlParserInputBuffer

    struct _xmlParserInputBuffer {
    +    void *	context
    +    xmlInputReadCallback	readcallback
    +    xmlInputCloseCallback	closecallback
    +    xmlCharEncodingHandlerPtr	encoder	: I18N conversions to UTF-8
    +    xmlBufPtr	buffer	: Local buffer encoded in UTF-8
    +    xmlBufPtr	raw	: if encoder != NULL buffer for raw input
    +    int	compressed	: -1=unknown, 0=not compressed, 1=compressed
    +    int	error
    +    unsigned long	rawconsumed	: amount consumed from raw
    +} xmlParserInputBuffer;
    +

    +

    +
    +

    Typedef xmlParserInputBufferPtr

    xmlParserInputBuffer * xmlParserInputBufferPtr;
    +

    +

    +
    +

    Typedef xmlParserInputPtr

    xmlParserInput * xmlParserInputPtr;
    +

    +

    +
    +

    Structure xmlRef

    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
    +} xmlRef;
    +

    +

    +
    +

    Typedef xmlRefPtr

    xmlRef * xmlRefPtr;
    +

    +

    +
    +

    Structure xmlSAXHandler

    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
    +} xmlSAXHandler;
    +

    +

    +
    +

    Typedef xmlSAXHandlerPtr

    xmlSAXHandler * xmlSAXHandlerPtr;
    +

    +

    +
    +

    Structure xmlSAXLocator

    struct _xmlSAXLocator {
    +    const xmlChar *(*getPublicId)	getPublicId
    +    const xmlChar *(*getSystemId)	getSystemId
    +    int(*getLineNumber)	getLineNumber
    +    int(*getColumnNumber)	getColumnNumber
    +} xmlSAXLocator;
    +

    +

    +
    +

    Typedef xmlSAXLocatorPtr

    xmlSAXLocator * xmlSAXLocatorPtr;
    +

    +

    +
    +

    Function type xmlDOMWrapAcquireNsFunction

    xmlNsPtr	xmlDOMWrapAcquireNsFunction	(xmlDOMWrapCtxtPtr ctxt, 
    xmlNodePtr node,
    const xmlChar * nsName,
    const xmlChar * nsPrefix)
    +

    A function called to acquire namespaces (xmlNs) from the wrapper.

    +
    ctxt:a DOM wrapper context
    node:the context node (element or attribute)
    nsName:the requested namespace name
    nsPrefix:the requested namespace prefix
    Returns:an xmlNsPtr or NULL in case of an error.
    +
    +

    xmlAddChild ()

    xmlNodePtr	xmlAddChild		(xmlNodePtr parent, 
    xmlNodePtr cur)
    +

    Add a new node to @parent, at the end of the child (or property) list merging adjacent TEXT nodes (in which case @cur is freed) If the new node is ATTRIBUTE, it is added into properties instead of children. If there is an attribute with equal name, it is first destroyed.

    +
    parent:the parent node
    cur:the child node
    Returns:the child or NULL in case of error.
    +
    +

    xmlAddChildList ()

    xmlNodePtr	xmlAddChildList		(xmlNodePtr parent, 
    xmlNodePtr cur)
    +

    Add a list of node at the end of the child list of the parent merging adjacent TEXT nodes (@cur may be freed)

    +
    parent:the parent node
    cur:the first node in the list
    Returns:the last child or NULL in case of error.
    +
    +

    xmlAddNextSibling ()

    xmlNodePtr	xmlAddNextSibling	(xmlNodePtr cur, 
    xmlNodePtr elem)
    +

    Add a new node @elem as the next sibling of @cur If the new node was already inserted in a document it is first unlinked from its existing context. As a result of text merging @elem may be freed. If the new node is ATTRIBUTE, it is added into properties instead of children. If there is an attribute with equal name, it is first destroyed.

    +
    cur:the child node
    elem:the new node
    Returns:the new node or NULL in case of error.
    +
    +

    xmlAddPrevSibling ()

    xmlNodePtr	xmlAddPrevSibling	(xmlNodePtr cur, 
    xmlNodePtr elem)
    +

    Add a new node @elem as the previous sibling of @cur merging adjacent TEXT nodes (@elem may be freed) If the new node was already inserted in a document it is first unlinked from its existing context. If the new node is ATTRIBUTE, it is added into properties instead of children. If there is an attribute with equal name, it is first destroyed.

    +
    cur:the child node
    elem:the new node
    Returns:the new node or NULL in case of error.
    +
    +

    xmlAddSibling ()

    xmlNodePtr	xmlAddSibling		(xmlNodePtr cur, 
    xmlNodePtr elem)
    +

    Add a new element @elem to the list of siblings of @cur merging adjacent TEXT nodes (@elem may be freed) If the new element was already inserted in a document it is first unlinked from its existing context.

    +
    cur:the child node
    elem:the new node
    Returns:the new element or NULL in case of error.
    +
    +

    xmlAttrSerializeTxtContent ()

    void	xmlAttrSerializeTxtContent	(xmlBufferPtr buf, 
    xmlDocPtr doc,
    xmlAttrPtr attr,
    const xmlChar * string)
    +

    Serialize text attribute values to an xml simple buffer

    +
    buf:the XML buffer output
    doc:the document
    attr:the attribute node
    string:the text content
    +
    +

    xmlBufContent ()

    xmlChar *	xmlBufContent		(const xmlBuf * buf)
    +

    Function to extract the content of a buffer

    +
    buf:the buffer
    Returns:the internal content
    +
    +

    xmlBufEnd ()

    xmlChar *	xmlBufEnd		(xmlBufPtr buf)
    +

    Function to extract the end of the content of a buffer

    +
    buf:the buffer
    Returns:the end of the internal content or NULL in case of error
    +
    +

    xmlBufGetNodeContent ()

    int	xmlBufGetNodeContent		(xmlBufPtr buf, 
    const xmlNode * cur)
    +

    Read the value of a node @cur, this can be either the text carried directly by this node if it's a TEXT node or the aggregate string of the values carried by this node child's (TEXT and ENTITY_REF). Entity references are substituted. Fills up the buffer @buf with this value

    +
    buf:a buffer xmlBufPtr
    cur:the node being read
    Returns:0 in case of success and -1 in case of error.
    +
    +

    xmlBufNodeDump ()

    size_t	xmlBufNodeDump			(xmlBufPtr buf, 
    xmlDocPtr doc,
    xmlNodePtr cur,
    int level,
    int format)
    +

    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

    +
    buf:the XML buffer output
    doc:the document
    cur:the current node
    level:the imbrication level for indenting
    format:is formatting allowed
    Returns:the number of bytes written to the buffer, in case of error 0 is returned or @buf stores the error
    +
    +

    xmlBufShrink ()

    size_t	xmlBufShrink			(xmlBufPtr buf, 
    size_t len)
    +

    Remove the beginning of an XML buffer. NOTE that this routine behaviour differs from xmlBufferShrink() as it will return 0 on error instead of -1 due to size_t being used as the return type.

    +
    buf:the buffer to dump
    len:the number of xmlChar to remove
    Returns:the number of byte removed or 0 in case of failure
    +
    +

    xmlBufUse ()

    size_t	xmlBufUse			(const xmlBufPtr buf)
    +

    Function to get the length of a buffer

    +
    buf:the buffer
    Returns:the length of data in the internal content
    +
    +

    xmlBufferAdd ()

    int	xmlBufferAdd			(xmlBufferPtr buf, 
    const xmlChar * str,
    int len)
    +

    Add a string range to an XML buffer. if len == -1, the length of str is recomputed.

    +
    buf:the buffer to dump
    str:the #xmlChar string
    len:the number of #xmlChar to add
    Returns:0 successful, a positive error code number otherwise and -1 in case of internal or API error.
    +
    +

    xmlBufferAddHead ()

    int	xmlBufferAddHead		(xmlBufferPtr buf, 
    const xmlChar * str,
    int len)
    +

    Add a string range to the beginning of an XML buffer. if len == -1, the length of @str is recomputed.

    +
    buf:the buffer
    str:the #xmlChar string
    len:the number of #xmlChar to add
    Returns:0 successful, a positive error code number otherwise and -1 in case of internal or API error.
    +
    +

    xmlBufferCCat ()

    int	xmlBufferCCat			(xmlBufferPtr buf, 
    const char * str)
    +

    Append a zero terminated C string to an XML buffer.

    +
    buf:the buffer to dump
    str:the C char string
    Returns:0 successful, a positive error code number otherwise and -1 in case of internal or API error.
    +
    +

    xmlBufferCat ()

    int	xmlBufferCat			(xmlBufferPtr buf, 
    const xmlChar * str)
    +

    Append a zero terminated string to an XML buffer.

    +
    buf:the buffer to add to
    str:the #xmlChar string
    Returns:0 successful, a positive error code number otherwise and -1 in case of internal or API error.
    +
    +

    xmlBufferContent ()

    const xmlChar *	xmlBufferContent	(const xmlBuffer * buf)
    +

    Function to extract the content of a buffer

    +
    buf:the buffer
    Returns:the internal content
    +
    +

    xmlBufferCreate ()

    xmlBufferPtr	xmlBufferCreate		(void)
    +

    routine to create an XML buffer.

    +
    Returns:the new structure.
    +
    +

    xmlBufferCreateSize ()

    xmlBufferPtr	xmlBufferCreateSize	(size_t size)
    +

    routine to create an XML buffer.

    +
    size:initial size of buffer
    Returns:the new structure.
    +
    +

    xmlBufferCreateStatic ()

    xmlBufferPtr	xmlBufferCreateStatic	(void * mem, 
    size_t size)
    +

    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.

    +
    mem:the memory area
    size:the size in byte
    Returns:the new structure.
    +
    +

    xmlBufferDetach ()

    xmlChar *	xmlBufferDetach		(xmlBufferPtr buf)
    +

    Remove the string contained in a buffer and gie it back to the caller. The buffer is reset to an empty content. This doesn't work with immutable buffers as they can't be reset.

    +
    buf:the buffer
    Returns:the previous string contained by the buffer.
    +
    +

    xmlBufferDump ()

    int	xmlBufferDump			(FILE * file, 
    xmlBufferPtr buf)
    +

    Dumps an XML buffer to a FILE *.

    +
    file:the file output
    buf:the buffer to dump
    Returns:the number of #xmlChar written
    +
    +

    xmlBufferEmpty ()

    void	xmlBufferEmpty			(xmlBufferPtr buf)
    +

    empty a buffer.

    +
    buf:the buffer
    +
    +

    xmlBufferFree ()

    void	xmlBufferFree			(xmlBufferPtr buf)
    +

    Frees an XML buffer. It frees both the content and the structure which encapsulate it.

    +
    buf:the buffer to free
    +
    +

    xmlBufferGrow ()

    int	xmlBufferGrow			(xmlBufferPtr buf, 
    unsigned int len)
    +

    Grow the available space of an XML buffer.

    +
    buf:the buffer
    len:the minimum free size to allocate
    Returns:the new available space or -1 in case of error
    +
    +

    xmlBufferLength ()

    int	xmlBufferLength			(const xmlBuffer * buf)
    +

    Function to get the length of a buffer

    +
    buf:the buffer
    Returns:the length of data in the internal content
    +
    +

    xmlBufferResize ()

    int	xmlBufferResize			(xmlBufferPtr buf, 
    unsigned int size)
    +

    Resize a buffer to accommodate minimum size of @size.

    +
    buf:the buffer to resize
    size:the desired size
    Returns:0 in case of problems, 1 otherwise
    +
    +

    xmlBufferSetAllocationScheme ()

    void	xmlBufferSetAllocationScheme	(xmlBufferPtr buf, 
    xmlBufferAllocationScheme scheme)
    +

    Sets the allocation scheme for this buffer

    +
    buf:the buffer to tune
    scheme:allocation scheme to use
    +
    +

    xmlBufferShrink ()

    int	xmlBufferShrink			(xmlBufferPtr buf, 
    unsigned int len)
    +

    Remove the beginning of an XML buffer.

    +
    buf:the buffer to dump
    len:the number of xmlChar to remove
    Returns:the number of #xmlChar removed, or -1 in case of failure.
    +
    +

    xmlBufferWriteCHAR ()

    void	xmlBufferWriteCHAR		(xmlBufferPtr buf, 
    const xmlChar * string)
    +

    routine which manages and grows an output buffer. This one adds xmlChars at the end of the buffer.

    +
    buf:the XML buffer
    string:the string to add
    +
    +

    xmlBufferWriteChar ()

    void	xmlBufferWriteChar		(xmlBufferPtr buf, 
    const char * string)
    +

    routine which manage and grows an output buffer. This one add C chars at the end of the array.

    +
    buf:the XML buffer output
    string:the string to add
    +
    +

    xmlBufferWriteQuotedString ()

    void	xmlBufferWriteQuotedString	(xmlBufferPtr buf, 
    const xmlChar * string)
    +

    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

    +
    buf:the XML buffer output
    string:the string to add
    +
    +

    xmlBuildQName ()

    xmlChar *	xmlBuildQName		(const xmlChar * ncname, 
    const xmlChar * prefix,
    xmlChar * memory,
    int len)
    +

    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.

    +
    ncname:the Name
    prefix:the prefix
    memory:preallocated memory
    len:preallocated memory length
    Returns:the new string which must be freed by the caller if different from @memory and @ncname or NULL in case of error
    +
    +

    xmlChildElementCount ()

    unsigned long	xmlChildElementCount	(xmlNodePtr parent)
    +

    Finds the current number of child nodes of that element which are element nodes. Note the handling of entities references is different than in the W3C DOM element traversal spec since we don't have back reference from entities content to entities references.

    +
    parent:the parent node
    Returns:the count of element child or 0 if not available
    +
    +

    xmlCopyDoc ()

    xmlDocPtr	xmlCopyDoc		(xmlDocPtr doc, 
    int recursive)
    +

    Do a copy of the document info. If recursive, the content tree will be copied too as well as DTD, namespaces and entities.

    +
    doc:the document
    recursive:if not zero do a recursive copy.
    Returns:a new #xmlDocPtr, or NULL in case of error.
    +
    +

    xmlCopyDtd ()

    xmlDtdPtr	xmlCopyDtd		(xmlDtdPtr dtd)
    +

    Do a copy of the dtd.

    +
    dtd:the dtd
    Returns:a new #xmlDtdPtr, or NULL in case of error.
    +
    +

    xmlCopyNamespace ()

    xmlNsPtr	xmlCopyNamespace	(xmlNsPtr cur)
    +

    Do a copy of the namespace.

    +
    cur:the namespace
    Returns:a new #xmlNsPtr, or NULL in case of error.
    +
    +

    xmlCopyNamespaceList ()

    xmlNsPtr	xmlCopyNamespaceList	(xmlNsPtr cur)
    +

    Do a copy of an namespace list.

    +
    cur:the first namespace
    Returns:a new #xmlNsPtr, or NULL in case of error.
    +
    +

    xmlCopyNode ()

    xmlNodePtr	xmlCopyNode		(xmlNodePtr node, 
    int extended)
    +

    Do a copy of the node.

    +
    node:the node
    extended:if 1 do a recursive copy (properties, namespaces and children when applicable) if 2 copy properties and namespaces (when applicable)
    Returns:a new #xmlNodePtr, or NULL in case of error.
    +
    +

    xmlCopyNodeList ()

    xmlNodePtr	xmlCopyNodeList		(xmlNodePtr node)
    +

    Do a recursive copy of the node list. Use xmlDocCopyNodeList() if possible to ensure string interning.

    +
    node:the first node in the list.
    Returns:a new #xmlNodePtr, or NULL in case of error.
    +
    +

    xmlCopyProp ()

    xmlAttrPtr	xmlCopyProp		(xmlNodePtr target, 
    xmlAttrPtr cur)
    +

    Do a copy of the attribute.

    +
    target:the element where the attribute will be grafted
    cur:the attribute
    Returns:a new #xmlAttrPtr, or NULL in case of error.
    +
    +

    xmlCopyPropList ()

    xmlAttrPtr	xmlCopyPropList		(xmlNodePtr target, 
    xmlAttrPtr cur)
    +

    Do a copy of an attribute list.

    +
    target:the element where the attributes will be grafted
    cur:the first attribute
    Returns:a new #xmlAttrPtr, or NULL in case of error.
    +
    +

    xmlCreateIntSubset ()

    xmlDtdPtr	xmlCreateIntSubset	(xmlDocPtr doc, 
    const xmlChar * name,
    const xmlChar * ExternalID,
    const xmlChar * SystemID)
    +

    Create the internal subset of a document

    +
    doc:the document pointer
    name:the DTD name
    ExternalID:the external (PUBLIC) ID
    SystemID:the system ID
    Returns:a pointer to the new DTD structure
    +
    +

    xmlDOMWrapAdoptNode ()

    int	xmlDOMWrapAdoptNode		(xmlDOMWrapCtxtPtr ctxt, 
    xmlDocPtr sourceDoc,
    xmlNodePtr node,
    xmlDocPtr destDoc,
    xmlNodePtr destParent,
    int options)
    +

    References of out-of scope ns-decls are remapped to point to @destDoc: 1) If @destParent is given, then nsDef entries on element-nodes are used 2) If *no* @destParent is given, then @destDoc->oldNs entries are used This is the case when you have an unlinked node and just want to move it to the context of If @destParent is given, it ensures that the tree is namespace wellformed by creating additional ns-decls where needed. Note that, since prefixes of already existent ns-decls can be shadowed by this process, it could break QNames in attribute values or element content. NOTE: This function was not intensively tested.

    +
    ctxt:the optional context for custom processing
    sourceDoc:the optional sourceDoc
    node:the node to start with
    destDoc:the destination doc
    destParent:the optional new parent of @node in @destDoc
    options:option flags
    Returns:0 if the operation succeeded, 1 if a node of unsupported type was given, 2 if a node of not yet supported type was given and -1 on API/internal errors.
    +
    +

    xmlDOMWrapCloneNode ()

    int	xmlDOMWrapCloneNode		(xmlDOMWrapCtxtPtr ctxt, 
    xmlDocPtr sourceDoc,
    xmlNodePtr node,
    xmlNodePtr * resNode,
    xmlDocPtr destDoc,
    xmlNodePtr destParent,
    int deep,
    int options)
    +

    References of out-of scope ns-decls are remapped to point to @destDoc: 1) If @destParent is given, then nsDef entries on element-nodes are used 2) If *no* @destParent is given, then @destDoc->oldNs entries are used. This is the case when you don't know already where the cloned branch will be added to. If @destParent is given, it ensures that the tree is namespace wellformed by creating additional ns-decls where needed. Note that, since prefixes of already existent ns-decls can be shadowed by this process, it could break QNames in attribute values or element content. TODO: 1) What to do with XInclude? Currently this returns an error for XInclude.

    +
    ctxt:the optional context for custom processing
    sourceDoc:the optional sourceDoc
    node:the node to start with
    resNode:the clone of the given @node
    destDoc:the destination doc
    destParent:the optional new parent of @node in @destDoc
    deep:descend into child if set
    options:option flags
    Returns:0 if the operation succeeded, 1 if a node of unsupported (or not yet supported) type was given, -1 on API/internal errors.
    +
    +

    xmlDOMWrapFreeCtxt ()

    void	xmlDOMWrapFreeCtxt		(xmlDOMWrapCtxtPtr ctxt)
    +

    Frees the DOM-wrapper context.

    +
    ctxt:the DOM-wrapper context
    +
    +

    xmlDOMWrapNewCtxt ()

    xmlDOMWrapCtxtPtr	xmlDOMWrapNewCtxt	(void)
    +

    Allocates and initializes a new DOM-wrapper context.

    +
    Returns:the xmlDOMWrapCtxtPtr or NULL in case of an internal error.
    +
    +

    xmlDOMWrapReconcileNamespaces ()

    int	xmlDOMWrapReconcileNamespaces	(xmlDOMWrapCtxtPtr ctxt, 
    xmlNodePtr elem,
    int options)
    +

    Ensures that ns-references point to ns-decls hold on element-nodes. Ensures that the tree is namespace wellformed by creating additional ns-decls where needed. Note that, since prefixes of already existent ns-decls can be shadowed by this process, it could break QNames in attribute values or element content. NOTE: This function was not intensively tested.

    +
    ctxt:DOM wrapper context, unused at the moment
    elem:the element-node
    options:option flags
    Returns:0 if succeeded, -1 otherwise and on API/internal errors.
    +
    +

    xmlDOMWrapRemoveNode ()

    int	xmlDOMWrapRemoveNode		(xmlDOMWrapCtxtPtr ctxt, 
    xmlDocPtr doc,
    xmlNodePtr node,
    int options)
    +

    Unlinks the given node from its owner. This will substitute ns-references to node->nsDef for ns-references to doc->oldNs, thus ensuring the removed branch to be autark wrt ns-references. NOTE: This function was not intensively tested.

    +
    ctxt:a DOM wrapper context
    doc:the doc
    node:the node to be removed.
    options:set of options, unused at the moment
    Returns:0 on success, 1 if the node is not supported, -1 on API and internal errors.
    +
    +

    xmlDocCopyNode ()

    xmlNodePtr	xmlDocCopyNode		(xmlNodePtr node, 
    xmlDocPtr doc,
    int extended)
    +

    Do a copy of the node to a given document.

    +
    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)
    Returns:a new #xmlNodePtr, or NULL in case of error.
    +
    +

    xmlDocCopyNodeList ()

    xmlNodePtr	xmlDocCopyNodeList	(xmlDocPtr doc, 
    xmlNodePtr node)
    +

    Do a recursive copy of the node list.

    +
    doc:the target document
    node:the first node in the list.
    Returns:a new #xmlNodePtr, or NULL in case of error.
    +
    +

    xmlDocDump ()

    int	xmlDocDump			(FILE * f, 
    xmlDocPtr cur)
    +

    Dump an XML document to an open FILE.

    +
    f:the FILE*
    cur:the document
    Returns:the number of bytes written or -1 in case of failure.
    +
    +

    xmlDocDumpFormatMemory ()

    void	xmlDocDumpFormatMemory		(xmlDocPtr cur, 
    xmlChar ** mem,
    int * size,
    int format)
    +

    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

    +
    cur:the document
    mem:OUT: the memory pointer
    size:OUT: the memory length
    format:should formatting spaces been added
    +
    +

    xmlDocDumpFormatMemoryEnc ()

    void	xmlDocDumpFormatMemoryEnc	(xmlDocPtr out_doc, 
    xmlChar ** doc_txt_ptr,
    int * doc_txt_len,
    const char * txt_encoding,
    int format)
    +

    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

    +
    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
    +
    +

    xmlDocDumpMemory ()

    void	xmlDocDumpMemory		(xmlDocPtr cur, 
    xmlChar ** mem,
    int * size)
    +

    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.

    +
    cur:the document
    mem:OUT: the memory pointer
    size:OUT: the memory length
    +
    +

    xmlDocDumpMemoryEnc ()

    void	xmlDocDumpMemoryEnc		(xmlDocPtr out_doc, 
    xmlChar ** doc_txt_ptr,
    int * doc_txt_len,
    const char * txt_encoding)
    +

    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().

    +
    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
    +
    +

    xmlDocFormatDump ()

    int	xmlDocFormatDump		(FILE * f, 
    xmlDocPtr cur,
    int format)
    +

    Dump an XML document to an open FILE.

    +
    f:the FILE*
    cur:the document
    format:should formatting spaces been added
    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
    +
    +

    xmlDocGetRootElement ()

    xmlNodePtr	xmlDocGetRootElement	(const xmlDoc * doc)
    +

    Get the root element of the document (doc->children is a list containing possibly comments, PIs, etc ...).

    +
    doc:the document
    Returns:the #xmlNodePtr for the root or NULL
    +
    +

    xmlDocSetRootElement ()

    xmlNodePtr	xmlDocSetRootElement	(xmlDocPtr doc, 
    xmlNodePtr root)
    +

    Set the root element of the document (doc->children is a list containing possibly comments, PIs, etc ...).

    +
    doc:the document
    root:the new document root element, if root is NULL no action is taken, to remove a node from a document use xmlUnlinkNode(root) instead.
    Returns:the old root element if any was found, NULL if root was NULL
    +
    +

    xmlElemDump ()

    void	xmlElemDump			(FILE * f, 
    xmlDocPtr doc,
    xmlNodePtr cur)
    +

    Dump an XML/HTML node, recursive behaviour, children are printed too.

    +
    f:the FILE * for the output
    doc:the document
    cur:the current node
    +
    +

    xmlFirstElementChild ()

    xmlNodePtr	xmlFirstElementChild	(xmlNodePtr parent)
    +

    Finds the first child node of that element which is a Element node Note the handling of entities references is different than in the W3C DOM element traversal spec since we don't have back reference from entities content to entities references.

    +
    parent:the parent node
    Returns:the first element child or NULL if not available
    +
    +

    xmlFreeDoc ()

    void	xmlFreeDoc			(xmlDocPtr cur)
    +

    Free up all the structures used by a document, tree included.

    +
    cur:pointer to the document
    +
    +

    xmlFreeDtd ()

    void	xmlFreeDtd			(xmlDtdPtr cur)
    +

    Free a DTD structure.

    +
    cur:the DTD structure to free up
    +
    +

    xmlFreeNode ()

    void	xmlFreeNode			(xmlNodePtr cur)
    +

    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.

    +
    cur:the node
    +
    +

    xmlFreeNodeList ()

    void	xmlFreeNodeList			(xmlNodePtr cur)
    +

    Free a node and all its siblings, this is a recursive behaviour, all the children are freed too.

    +
    cur:the first node in the list
    +
    +

    xmlFreeNs ()

    void	xmlFreeNs			(xmlNsPtr cur)
    +

    Free up the structures associated to a namespace

    +
    cur:the namespace pointer
    +
    +

    xmlFreeNsList ()

    void	xmlFreeNsList			(xmlNsPtr cur)
    +

    Free up all the structures associated to the chained namespaces.

    +
    cur:the first namespace pointer
    +
    +

    xmlFreeProp ()

    void	xmlFreeProp			(xmlAttrPtr cur)
    +

    Free one attribute, all the content is freed too

    +
    cur:an attribute
    +
    +

    xmlFreePropList ()

    void	xmlFreePropList			(xmlAttrPtr cur)
    +

    Free a property and all its siblings, all the children are freed too.

    +
    cur:the first property in the list
    +
    +

    xmlGetBufferAllocationScheme ()

    xmlBufferAllocationScheme	xmlGetBufferAllocationScheme	(void)
    +

    Types are XML_BUFFER_ALLOC_EXACT - use exact sizes, keeps memory usage down XML_BUFFER_ALLOC_DOUBLEIT - double buffer when extra needed, improves performance XML_BUFFER_ALLOC_HYBRID - use exact sizes on small strings to keep memory usage tight in normal usage, and doubleit on large strings to avoid pathological performance.

    +
    Returns:the current allocation scheme
    +
    + +
    +

    xmlGetDocCompressMode ()

    int	xmlGetDocCompressMode		(const xmlDoc * doc)
    +

    get the compression ratio for a document, ZLIB based

    +
    doc:the document
    Returns:0 (uncompressed) to 9 (max compression)
    +
    +

    xmlGetIntSubset ()

    xmlDtdPtr	xmlGetIntSubset		(const xmlDoc * doc)
    +

    Get the internal subset of a document

    +
    doc:the document pointer
    Returns:a pointer to the DTD structure or NULL if not found
    +
    +

    xmlGetLastChild ()

    xmlNodePtr	xmlGetLastChild		(const xmlNode * parent)
    +

    Search the last child of a node.

    +
    parent:the parent node
    Returns:the last child or NULL if none.
    +
    +

    xmlGetLineNo ()

    long	xmlGetLineNo			(const xmlNode * node)
    +

    Get line number of @node. Try to override the limitation of lines being store in 16 bits ints if XML_PARSE_BIG_LINES parser option was used

    +
    node:valid node
    Returns:the line number if successful, -1 otherwise
    +
    +

    xmlGetNoNsProp ()

    xmlChar *	xmlGetNoNsProp		(const xmlNode * node, 
    const xmlChar * 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.

    +
    node:the node
    name:the attribute name
    Returns:the attribute value or NULL if not found. It's up to the caller to free the memory with xmlFree().
    +
    +

    xmlGetNodePath ()

    xmlChar *	xmlGetNodePath		(const xmlNode * node)
    +

    Build a structure based Path for the given node

    +
    node:a node
    Returns:the new path or NULL in case of error. The caller must free the returned string
    +
    +

    xmlGetNsList ()

    xmlNsPtr *	xmlGetNsList		(const xmlDoc * doc, 
    const xmlNode * node)
    +

    Search all the namespace applying to a given element.

    +
    doc:the document
    node:the current node
    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
    +
    +

    xmlGetNsProp ()

    xmlChar *	xmlGetNsProp		(const xmlNode * node, 
    const xmlChar * name,
    const xmlChar * 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.

    +
    node:the node
    name:the attribute name
    nameSpace:the URI of the namespace
    Returns:the attribute value or NULL if not found. It's up to the caller to free the memory with xmlFree().
    +
    +

    xmlGetProp ()

    xmlChar *	xmlGetProp		(const xmlNode * node, 
    const xmlChar * 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.

    +
    node:the node
    name:the attribute name
    Returns:the attribute value or NULL if not found. It's up to the caller to free the memory with xmlFree().
    +
    +

    xmlHasNsProp ()

    xmlAttrPtr	xmlHasNsProp		(const xmlNode * node, 
    const xmlChar * name,
    const xmlChar * nameSpace)
    +

    Search for an attribute associated to a node This attribute has to be anchored in the namespace specified. This does the entity substitution. This function looks in DTD attribute declaration for #FIXED or default declaration values unless DTD use has been turned off. Note that a namespace of NULL indicates to use the default namespace.

    +
    node:the node
    name:the attribute name
    nameSpace:the URI of the namespace
    Returns:the attribute or the attribute declaration or NULL if neither was found.
    +
    +

    xmlHasProp ()

    xmlAttrPtr	xmlHasProp		(const xmlNode * node, 
    const xmlChar * 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.

    +
    node:the node
    name:the attribute name
    Returns:the attribute or the attribute declaration or NULL if neither was found.
    +
    +

    xmlIsBlankNode ()

    int	xmlIsBlankNode			(const xmlNode * node)
    +

    Checks whether this node is an empty or whitespace only (and possibly ignorable) text-node.

    +
    node:the node
    Returns:1 yes, 0 no
    +
    +

    xmlIsXHTML ()

    int	xmlIsXHTML			(const xmlChar * systemID, 
    const xmlChar * publicID)
    +

    Try to find if the document correspond to an XHTML DTD

    +
    systemID:the system identifier
    publicID:the public identifier
    Returns:1 if true, 0 if not and -1 in case of error
    +
    +

    xmlLastElementChild ()

    xmlNodePtr	xmlLastElementChild	(xmlNodePtr parent)
    +

    Finds the last child node of that element which is a Element node Note the handling of entities references is different than in the W3C DOM element traversal spec since we don't have back reference from entities content to entities references.

    +
    parent:the parent node
    Returns:the last element child or NULL if not available
    +
    +

    xmlNewCDataBlock ()

    xmlNodePtr	xmlNewCDataBlock	(xmlDocPtr doc, 
    const xmlChar * content,
    int len)
    +

    Creation of a new node containing a CDATA block.

    +
    doc:the document
    content:the CDATA block content content
    len:the length of the block
    Returns:a pointer to the new node object.
    +
    +

    xmlNewCharRef ()

    xmlNodePtr	xmlNewCharRef		(xmlDocPtr doc, 
    const xmlChar * name)
    +

    Creation of a new character reference node.

    +
    doc:the document
    name:the char ref string, starting with # or "&# ... ;"
    Returns:a pointer to the new node object.
    +
    +

    xmlNewChild ()

    xmlNodePtr	xmlNewChild		(xmlNodePtr parent, 
    xmlNsPtr ns,
    const xmlChar * name,
    const xmlChar * content)
    +

    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.

    +
    parent:the parent node
    ns:a namespace if any
    name:the name of the child
    content:the XML content of the child if any.
    Returns:a pointer to the new node object.
    +
    +

    xmlNewComment ()

    xmlNodePtr	xmlNewComment		(const xmlChar * content)
    +

    Creation of a new node containing a comment.

    +
    content:the comment content
    Returns:a pointer to the new node object.
    +
    +

    xmlNewDoc ()

    xmlDocPtr	xmlNewDoc		(const xmlChar * version)
    +

    Creates a new XML document

    +
    version:xmlChar string giving the version of XML "1.0"
    Returns:a new document
    +
    +

    xmlNewDocComment ()

    xmlNodePtr	xmlNewDocComment	(xmlDocPtr doc, 
    const xmlChar * content)
    +

    Creation of a new node containing a comment within a document.

    +
    doc:the document
    content:the comment content
    Returns:a pointer to the new node object.
    +
    +

    xmlNewDocFragment ()

    xmlNodePtr	xmlNewDocFragment	(xmlDocPtr doc)
    +

    Creation of a new Fragment node.

    +
    doc:the document owning the fragment
    Returns:a pointer to the new node object.
    +
    +

    xmlNewDocNode ()

    xmlNodePtr	xmlNewDocNode		(xmlDocPtr doc, 
    xmlNsPtr ns,
    const xmlChar * name,
    const xmlChar * content)
    +

    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.

    +
    doc:the document
    ns:namespace if any
    name:the node name
    content:the XML text content if any
    Returns:a pointer to the new node object.
    +
    +

    xmlNewDocNodeEatName ()

    xmlNodePtr	xmlNewDocNodeEatName	(xmlDocPtr doc, 
    xmlNsPtr ns,
    xmlChar * name,
    const xmlChar * content)
    +

    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.

    +
    doc:the document
    ns:namespace if any
    name:the node name
    content:the XML text content if any
    Returns:a pointer to the new node object.
    +
    +

    xmlNewDocPI ()

    xmlNodePtr	xmlNewDocPI		(xmlDocPtr doc, 
    const xmlChar * name,
    const xmlChar * content)
    +

    Creation of a processing instruction element.

    +
    doc:the target document
    name:the processing instruction name
    content:the PI content
    Returns:a pointer to the new node object.
    +
    +

    xmlNewDocProp ()

    xmlAttrPtr	xmlNewDocProp		(xmlDocPtr doc, 
    const xmlChar * name,
    const xmlChar * value)
    +

    Create a new property carried by a document.

    +
    doc:the document
    name:the name of the attribute
    value:the value of the attribute
    Returns:a pointer to the attribute
    +
    +

    xmlNewDocRawNode ()

    xmlNodePtr	xmlNewDocRawNode	(xmlDocPtr doc, 
    xmlNsPtr ns,
    const xmlChar * name,
    const xmlChar * content)
    +

    Creation of a new node element within a document. @ns and @content are optional (NULL).

    +
    doc:the document
    ns:namespace if any
    name:the node name
    content:the text content if any
    Returns:a pointer to the new node object.
    +
    +

    xmlNewDocText ()

    xmlNodePtr	xmlNewDocText		(const xmlDoc * doc, 
    const xmlChar * content)
    +

    Creation of a new text node within a document.

    +
    doc:the document
    content:the text content
    Returns:a pointer to the new node object.
    +
    +

    xmlNewDocTextLen ()

    xmlNodePtr	xmlNewDocTextLen	(xmlDocPtr doc, 
    const xmlChar * content,
    int len)
    +

    Creation of a new text node with an extra content length parameter. The text node pertain to a given document.

    +
    doc:the document
    content:the text content
    len:the text len.
    Returns:a pointer to the new node object.
    +
    +

    xmlNewDtd ()

    xmlDtdPtr	xmlNewDtd		(xmlDocPtr doc, 
    const xmlChar * name,
    const xmlChar * ExternalID,
    const xmlChar * SystemID)
    +

    Creation of a new DTD for the external subset. To create an internal subset, use xmlCreateIntSubset().

    +
    doc:the document pointer
    name:the DTD name
    ExternalID:the external ID
    SystemID:the system ID
    Returns:a pointer to the new DTD structure
    +
    +

    xmlNewGlobalNs ()

    xmlNsPtr	xmlNewGlobalNs		(xmlDocPtr doc, 
    const xmlChar * href,
    const xmlChar * prefix)
    +

    Creation of a Namespace, the old way using PI and without scoping DEPRECATED !!!

    +
    doc:the document carrying the namespace
    href:the URI associated
    prefix:the prefix for the namespace
    Returns:NULL this functionality had been removed
    +
    +

    xmlNewNode ()

    xmlNodePtr	xmlNewNode		(xmlNsPtr ns, 
    const xmlChar * name)
    +

    Creation of a new node element. @ns is optional (NULL).

    +
    ns:namespace if any
    name:the node name
    Returns:a pointer to the new node object. Uses xmlStrdup() to make copy of @name.
    +
    +

    xmlNewNodeEatName ()

    xmlNodePtr	xmlNewNodeEatName	(xmlNsPtr ns, 
    xmlChar * name)
    +

    Creation of a new node element. @ns is optional (NULL).

    +
    ns:namespace if any
    name:the node name
    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.
    +
    +

    xmlNewNs ()

    xmlNsPtr	xmlNewNs		(xmlNodePtr node, 
    const xmlChar * href,
    const xmlChar * prefix)
    +

    Creation of a new Namespace. This function will refuse to create a namespace with a similar prefix than an existing one present on this node. Note that for a default namespace, @prefix should be NULL. We use href==NULL in the case of an element creation where the namespace was not defined.

    +
    node:the element carrying the namespace
    href:the URI associated
    prefix:the prefix for the namespace
    Returns:a new namespace pointer or NULL
    +
    +

    xmlNewNsProp ()

    xmlAttrPtr	xmlNewNsProp		(xmlNodePtr node, 
    xmlNsPtr ns,
    const xmlChar * name,
    const xmlChar * value)
    +

    Create a new property tagged with a namespace and carried by a node.

    +
    node:the holding node
    ns:the namespace
    name:the name of the attribute
    value:the value of the attribute
    Returns:a pointer to the attribute
    +
    +

    xmlNewNsPropEatName ()

    xmlAttrPtr	xmlNewNsPropEatName	(xmlNodePtr node, 
    xmlNsPtr ns,
    xmlChar * name,
    const xmlChar * value)
    +

    Create a new property tagged with a namespace and carried by a node.

    +
    node:the holding node
    ns:the namespace
    name:the name of the attribute
    value:the value of the attribute
    Returns:a pointer to the attribute
    +
    +

    xmlNewPI ()

    xmlNodePtr	xmlNewPI		(const xmlChar * name, 
    const xmlChar * content)
    +

    Creation of a processing instruction element. Use xmlDocNewPI preferably to get string interning

    +
    name:the processing instruction name
    content:the PI content
    Returns:a pointer to the new node object.
    +
    +

    xmlNewProp ()

    xmlAttrPtr	xmlNewProp		(xmlNodePtr node, 
    const xmlChar * name,
    const xmlChar * value)
    +

    Create a new property carried by a node.

    +
    node:the holding node
    name:the name of the attribute
    value:the value of the attribute
    Returns:a pointer to the attribute
    +
    +

    xmlNewReference ()

    xmlNodePtr	xmlNewReference		(const xmlDoc * doc, 
    const xmlChar * name)
    +

    Creation of a new reference node.

    +
    doc:the document
    name:the reference name, or the reference string with & and ;
    Returns:a pointer to the new node object.
    +
    +

    xmlNewText ()

    xmlNodePtr	xmlNewText		(const xmlChar * content)
    +

    Creation of a new text node.

    +
    content:the text content
    Returns:a pointer to the new node object.
    +
    +

    xmlNewTextChild ()

    xmlNodePtr	xmlNewTextChild		(xmlNodePtr parent, 
    xmlNsPtr ns,
    const xmlChar * name,
    const xmlChar * content)
    +

    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.

    +
    parent:the parent node
    ns:a namespace if any
    name:the name of the child
    content:the text content of the child if any.
    Returns:a pointer to the new node object.
    +
    +

    xmlNewTextLen ()

    xmlNodePtr	xmlNewTextLen		(const xmlChar * content, 
    int len)
    +

    Creation of a new text node with an extra parameter for the content's length

    +
    content:the text content
    len:the text len.
    Returns:a pointer to the new node object.
    +
    +

    xmlNextElementSibling ()

    xmlNodePtr	xmlNextElementSibling	(xmlNodePtr node)
    +

    Finds the first closest next sibling of the node which is an element node. Note the handling of entities references is different than in the W3C DOM element traversal spec since we don't have back reference from entities content to entities references.

    +
    node:the current node
    Returns:the next element sibling or NULL if not available
    +
    +

    xmlNodeAddContent ()

    void	xmlNodeAddContent		(xmlNodePtr cur, 
    const xmlChar * content)
    +

    Append the extra substring to the node content. NOTE: In contrast to xmlNodeSetContent(), @content is supposed to be raw text, so unescaped XML special chars are allowed, entity references are not supported.

    +
    cur:the node being modified
    content:extra content
    +
    +

    xmlNodeAddContentLen ()

    void	xmlNodeAddContentLen		(xmlNodePtr cur, 
    const xmlChar * content,
    int len)
    +

    Append the extra substring to the node content. NOTE: In contrast to xmlNodeSetContentLen(), @content is supposed to be raw text, so unescaped XML special chars are allowed, entity references are not supported.

    +
    cur:the node being modified
    content:extra content
    len:the size of @content
    +
    +

    xmlNodeBufGetContent ()

    int	xmlNodeBufGetContent		(xmlBufferPtr buffer, 
    const xmlNode * cur)
    +

    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

    +
    buffer:a buffer
    cur:the node being read
    Returns:0 in case of success and -1 in case of error.
    +
    +

    xmlNodeDump ()

    int	xmlNodeDump			(xmlBufferPtr buf, 
    xmlDocPtr doc,
    xmlNodePtr cur,
    int level,
    int format)
    +

    Dump an XML node, recursive behaviour,children are printed too. Note that @format = 1 provide node indenting only if xmlIndentTreeOutput = 1 or xmlKeepBlanksDefault(0) was called Since this is using xmlBuffer structures it is limited to 2GB and somehow deprecated, use xmlBufNodeDump() instead.

    +
    buf:the XML buffer output
    doc:the document
    cur:the current node
    level:the imbrication level for indenting
    format:is formatting allowed
    Returns:the number of bytes written to the buffer or -1 in case of error
    +
    +

    xmlNodeDumpOutput ()

    void	xmlNodeDumpOutput		(xmlOutputBufferPtr buf, 
    xmlDocPtr doc,
    xmlNodePtr cur,
    int level,
    int format,
    const char * encoding)
    +

    Dump an XML node, recursive behaviour, children are printed too. Note that @format = 1 provide node indenting only if xmlIndentTreeOutput = 1 or xmlKeepBlanksDefault(0) was called

    +
    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
    +
    +

    xmlNodeGetBase ()

    xmlChar *	xmlNodeGetBase		(const xmlDoc * doc, 
    const xmlNode * cur)
    +

    Searches for the BASE URL. The code should work on both XML and HTML document even if base mechanisms are completely different. It returns the base as defined in RFC 2396 sections 5.1.1. Base URI within Document Content and 5.1.2. Base URI from the Encapsulating Entity However it does not return the document base (5.1.3), use doc->URL in this case

    +
    doc:the document the node pertains to
    cur:the node being checked
    Returns:a pointer to the base URL, or NULL if not found It's up to the caller to free the memory with xmlFree().
    +
    +

    xmlNodeGetContent ()

    xmlChar *	xmlNodeGetContent	(const xmlNode * cur)
    +

    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.

    +
    cur:the node being read
    Returns:a new #xmlChar * or NULL if no content is available. It's up to the caller to free the memory with xmlFree().
    +
    +

    xmlNodeGetLang ()

    xmlChar *	xmlNodeGetLang		(const xmlNode * cur)
    +

    Searches the language of a node, i.e. the values of the xml:lang attribute or the one carried by the nearest ancestor.

    +
    cur:the node being checked
    Returns:a pointer to the lang value, or NULL if not found It's up to the caller to free the memory with xmlFree().
    +
    +

    xmlNodeGetSpacePreserve ()

    int	xmlNodeGetSpacePreserve		(const xmlNode * cur)
    +

    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.

    +
    cur:the node being checked
    Returns:-1 if xml:space is not inherited, 0 if "default", 1 if "preserve"
    +
    +

    xmlNodeIsText ()

    int	xmlNodeIsText			(const xmlNode * node)
    +

    Is this node a Text node ?

    +
    node:the node
    Returns:1 yes, 0 no
    +
    +

    xmlNodeListGetRawString ()

    xmlChar *	xmlNodeListGetRawString	(const xmlDoc * doc, 
    const xmlNode * list,
    int inLine)
    +

    Builds the string equivalent to the text contained in the Node list made of TEXTs and ENTITY_REFs, contrary to xmlNodeListGetString() this function doesn't do any character encoding handling.

    +
    doc:the document
    list:a Node list
    inLine:should we replace entity contents or show their external form
    Returns:a pointer to the string copy, the caller must free it with xmlFree().
    +
    +

    xmlNodeListGetString ()

    xmlChar *	xmlNodeListGetString	(xmlDocPtr doc, 
    const xmlNode * list,
    int inLine)
    +

    Build the string equivalent to the text contained in the Node list made of TEXTs and ENTITY_REFs

    +
    doc:the document
    list:a Node list
    inLine:should we replace entity contents or show their external form
    Returns:a pointer to the string copy, the caller must free it with xmlFree().
    +
    +

    xmlNodeSetBase ()

    void	xmlNodeSetBase			(xmlNodePtr cur, 
    const xmlChar * uri)
    +

    Set (or reset) the base URI of a node, i.e. the value of the xml:base attribute.

    +
    cur:the node being changed
    uri:the new base URI
    +
    +

    xmlNodeSetContent ()

    void	xmlNodeSetContent		(xmlNodePtr cur, 
    const xmlChar * content)
    +

    Replace the content of a node. NOTE: @content is supposed to be a piece of XML CDATA, so it allows entity references, but XML special chars need to be escaped first by using xmlEncodeEntitiesReentrant() resp. xmlEncodeSpecialChars().

    +
    cur:the node being modified
    content:the new value of the content
    +
    +

    xmlNodeSetContentLen ()

    void	xmlNodeSetContentLen		(xmlNodePtr cur, 
    const xmlChar * content,
    int len)
    +

    Replace the content of a node. NOTE: @content is supposed to be a piece of XML CDATA, so it allows entity references, but XML special chars need to be escaped first by using xmlEncodeEntitiesReentrant() resp. xmlEncodeSpecialChars().

    +
    cur:the node being modified
    content:the new value of the content
    len:the size of @content
    +
    +

    xmlNodeSetLang ()

    void	xmlNodeSetLang			(xmlNodePtr cur, 
    const xmlChar * lang)
    +

    Set the language of a node, i.e. the values of the xml:lang attribute.

    +
    cur:the node being changed
    lang:the language description
    +
    +

    xmlNodeSetName ()

    void	xmlNodeSetName			(xmlNodePtr cur, 
    const xmlChar * name)
    +

    Set (or reset) the name of a node.

    +
    cur:the node being changed
    name:the new tag name
    +
    +

    xmlNodeSetSpacePreserve ()

    void	xmlNodeSetSpacePreserve		(xmlNodePtr cur, 
    int val)
    +

    Set (or reset) the space preserving behaviour of a node, i.e. the value of the xml:space attribute.

    +
    cur:the node being changed
    val:the xml:space value ("0": default, 1: "preserve")
    +
    +

    xmlPreviousElementSibling ()

    xmlNodePtr	xmlPreviousElementSibling	(xmlNodePtr node)
    +

    Finds the first closest previous sibling of the node which is an element node. Note the handling of entities references is different than in the W3C DOM element traversal spec since we don't have back reference from entities content to entities references.

    +
    node:the current node
    Returns:the previous element sibling or NULL if not available
    +
    +

    xmlReconciliateNs ()

    int	xmlReconciliateNs		(xmlDocPtr doc, 
    xmlNodePtr tree)
    +

    This function checks that all the namespaces declared within the given tree are properly declared. This is needed for example after Copy or Cut and then paste operations. The subtree may still hold pointers to namespace declarations outside the subtree or invalid/masked. As much as possible the function try to reuse the existing namespaces found in the new environment. If not possible the new namespaces are redeclared on @tree at the top of the given subtree.

    +
    doc:the document
    tree:a node defining the subtree to reconciliate
    Returns:the number of namespace declarations created or -1 in case of error.
    +
    +

    xmlRemoveProp ()

    int	xmlRemoveProp			(xmlAttrPtr cur)
    +

    Unlink and free one attribute, all the content is freed too Note this doesn't work for namespace definition attributes

    +
    cur:an attribute
    Returns:0 if success and -1 in case of error.
    +
    +

    xmlReplaceNode ()

    xmlNodePtr	xmlReplaceNode		(xmlNodePtr old, 
    xmlNodePtr cur)
    +

    Unlink the old node from its current context, prune the new one at the same place. If @cur was already inserted in a document it is first unlinked from its existing context.

    +
    old:the old node
    cur:the node
    Returns:the @old node
    +
    +

    xmlSaveFile ()

    int	xmlSaveFile			(const char * filename, 
    xmlDocPtr cur)
    +

    Dump an XML document to a file. Will use compression if compiled in and enabled. If @filename is "-" the stdout file is used.

    +
    filename:the filename (or URL)
    cur:the document
    Returns:the number of bytes written or -1 in case of failure.
    +
    +

    xmlSaveFileEnc ()

    int	xmlSaveFileEnc			(const char * filename, 
    xmlDocPtr cur,
    const char * encoding)
    +

    Dump an XML document, converting it to the given encoding

    +
    filename:the filename (or URL)
    cur:the document
    encoding:the name of an encoding (or NULL)
    Returns:the number of bytes written or -1 in case of failure.
    +
    +

    xmlSaveFileTo ()

    int	xmlSaveFileTo			(xmlOutputBufferPtr buf, 
    xmlDocPtr cur,
    const char * encoding)
    +

    Dump an XML document to an I/O buffer. Warning ! This call xmlOutputBufferClose() on buf which is not available after this call.

    +
    buf:an output I/O buffer
    cur:the document
    encoding:the encoding if any assuming the I/O layer handles the trancoding
    Returns:the number of bytes written or -1 in case of failure.
    +
    +

    xmlSaveFormatFile ()

    int	xmlSaveFormatFile		(const char * filename, 
    xmlDocPtr cur,
    int format)
    +

    Dump an XML document to a file. Will use compression if compiled in and enabled. If @filename is "-" the stdout file is used. If @format is set then the document will be indented on output. Note that @format = 1 provide node indenting only if xmlIndentTreeOutput = 1 or xmlKeepBlanksDefault(0) was called

    +
    filename:the filename (or URL)
    cur:the document
    format:should formatting spaces been added
    Returns:the number of bytes written or -1 in case of failure.
    +
    +

    xmlSaveFormatFileEnc ()

    int	xmlSaveFormatFileEnc		(const char * filename, 
    xmlDocPtr cur,
    const char * encoding,
    int format)
    +

    Dump an XML document to a file or an URL.

    +
    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.
    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
    +
    +

    xmlSaveFormatFileTo ()

    int	xmlSaveFormatFileTo		(xmlOutputBufferPtr buf, 
    xmlDocPtr cur,
    const char * encoding,
    int format)
    +

    Dump an XML document to an I/O buffer. Warning ! This call xmlOutputBufferClose() on buf which is not available after this call.

    +
    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
    Returns:the number of bytes written or -1 in case of failure.
    +
    +

    xmlSearchNs ()

    xmlNsPtr	xmlSearchNs		(xmlDocPtr doc, 
    xmlNodePtr node,
    const xmlChar * nameSpace)
    +

    Search a Ns registered under a given name space for a document. recurse on the parents until it finds the defined namespace or return 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.

    +
    doc:the document
    node:the current node
    nameSpace:the namespace prefix
    Returns:the namespace pointer or NULL.
    +
    +

    xmlSearchNsByHref ()

    xmlNsPtr	xmlSearchNsByHref	(xmlDocPtr doc, 
    xmlNodePtr node,
    const xmlChar * href)
    +

    Search a Ns aliasing a given URI. Recurse on the parents until it finds the defined namespace or return NULL otherwise.

    +
    doc:the document
    node:the current node
    href:the namespace value
    Returns:the namespace pointer or NULL.
    +
    +

    xmlSetBufferAllocationScheme ()

    void	xmlSetBufferAllocationScheme	(xmlBufferAllocationScheme scheme)
    +

    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

    +
    scheme:allocation method to use
    +
    + +
    +

    xmlSetDocCompressMode ()

    void	xmlSetDocCompressMode		(xmlDocPtr doc, 
    int mode)
    +

    set the compression ratio for a document, ZLIB based Correct values: 0 (uncompressed) to 9 (max compression)

    +
    doc:the document
    mode:the compression ratio
    +
    +

    xmlSetListDoc ()

    void	xmlSetListDoc			(xmlNodePtr list, 
    xmlDocPtr doc)
    +

    update all nodes in the list to point to the right document

    +
    list:the first element
    doc:the document
    +
    +

    xmlSetNs ()

    void	xmlSetNs			(xmlNodePtr node, 
    xmlNsPtr ns)
    +

    Associate a namespace to a node, a posteriori.

    +
    node:a node in the document
    ns:a namespace pointer
    +
    +

    xmlSetNsProp ()

    xmlAttrPtr	xmlSetNsProp		(xmlNodePtr node, 
    xmlNsPtr ns,
    const xmlChar * name,
    const xmlChar * value)
    +

    Set (or reset) an attribute carried by a node. The ns structure must be in scope, this is not checked

    +
    node:the node
    ns:the namespace definition
    name:the attribute name
    value:the attribute value
    Returns:the attribute pointer.
    +
    +

    xmlSetProp ()

    xmlAttrPtr	xmlSetProp		(xmlNodePtr node, 
    const xmlChar * name,
    const xmlChar * value)
    +

    Set (or reset) an attribute carried by a node. If @name has a prefix, then the corresponding namespace-binding will be used, if in scope; it is an error it there's no such ns-binding for the prefix in scope.

    +
    node:the node
    name:the attribute name (a QName)
    value:the attribute value
    Returns:the attribute pointer.
    +
    +

    xmlSetTreeDoc ()

    void	xmlSetTreeDoc			(xmlNodePtr tree, 
    xmlDocPtr doc)
    +

    update all nodes under the tree to point to the right document

    +
    tree:the top element
    doc:the document
    +
    +

    xmlSplitQName2 ()

    xmlChar *	xmlSplitQName2		(const xmlChar * name, 
    xmlChar ** prefix)
    +

    parse an XML qualified name string [NS 5] QName ::= (Prefix ':')? LocalPart [NS 6] Prefix ::= NCName [NS 7] LocalPart ::= NCName

    +
    name:the full QName
    prefix:a xmlChar **
    Returns:NULL if not a QName, otherwise the local part, and prefix is updated to get the Prefix if any.
    +
    +

    xmlSplitQName3 ()

    const xmlChar *	xmlSplitQName3		(const xmlChar * name, 
    int * len)
    +

    parse an XML qualified name string,i

    +
    name:the full QName
    len:an int *
    Returns:NULL if it is not a Qualified Name, otherwise, update len with the length in byte of the prefix and return a pointer to the start of the name without the prefix
    +
    +

    xmlStringGetNodeList ()

    xmlNodePtr	xmlStringGetNodeList	(const xmlDoc * doc, 
    const xmlChar * value)
    +

    Parse the value string and build the node list associated. Should produce a flat tree with only TEXTs and ENTITY_REFs.

    +
    doc:the document
    value:the value of the attribute
    Returns:a pointer to the first child
    +
    +

    xmlStringLenGetNodeList ()

    xmlNodePtr	xmlStringLenGetNodeList	(const xmlDoc * doc, 
    const xmlChar * value,
    int len)
    +

    Parse the value string and build the node list associated. Should produce a flat tree with only TEXTs and ENTITY_REFs.

    +
    doc:the document
    value:the value of the text
    len:the length of the string value
    Returns:a pointer to the first child
    +
    +

    xmlTextConcat ()

    int	xmlTextConcat			(xmlNodePtr node, 
    const xmlChar * content,
    int len)
    +

    Concat the given string at the end of the existing node content

    +
    node:the node
    content:the content
    len:@content length
    Returns:-1 in case of error, 0 otherwise
    +
    +

    xmlTextMerge ()

    xmlNodePtr	xmlTextMerge		(xmlNodePtr first, 
    xmlNodePtr second)
    +

    Merge two text nodes into one

    +
    first:the first text node
    second:the second text node being merged
    Returns:the first text node augmented
    +
    +

    xmlUnlinkNode ()

    void	xmlUnlinkNode			(xmlNodePtr cur)
    +

    Unlink a node from it's current context, the node is not freed If one need to free the node, use xmlFreeNode() routine after the unlink to discard it. Note that namespace nodes can't be unlinked as they do not have pointer to their parent.

    +
    cur:the node
    +
    +

    xmlUnsetNsProp ()

    int	xmlUnsetNsProp			(xmlNodePtr node, 
    xmlNsPtr ns,
    const xmlChar * name)
    +

    Remove an attribute carried by a node.

    +
    node:the node
    ns:the namespace definition
    name:the attribute name
    Returns:0 if successful, -1 if not found
    +
    +

    xmlUnsetProp ()

    int	xmlUnsetProp			(xmlNodePtr node, 
    const xmlChar * name)
    +

    Remove an attribute carried by a node. This handles only attributes in no namespace.

    +
    node:the node
    name:the attribute name
    Returns:0 if successful, -1 if not found
    +
    +

    xmlValidateNCName ()

    int	xmlValidateNCName		(const xmlChar * value, 
    int space)
    +

    Check that a value conforms to the lexical space of NCName

    +
    value:the value to check
    space:allow spaces in front and end of the string
    Returns:0 if this validates, a positive error code number otherwise and -1 in case of internal or API error.
    +
    +

    xmlValidateNMToken ()

    int	xmlValidateNMToken		(const xmlChar * value, 
    int space)
    +

    Check that a value conforms to the lexical space of NMToken

    +
    value:the value to check
    space:allow spaces in front and end of the string
    Returns:0 if this validates, a positive error code number otherwise and -1 in case of internal or API error.
    +
    +

    xmlValidateName ()

    int	xmlValidateName			(const xmlChar * value, 
    int space)
    +

    Check that a value conforms to the lexical space of Name

    +
    value:the value to check
    space:allow spaces in front and end of the string
    Returns:0 if this validates, a positive error code number otherwise and -1 in case of internal or API error.
    +
    +

    xmlValidateQName ()

    int	xmlValidateQName		(const xmlChar * value, 
    int space)
    +

    Check that a value conforms to the lexical space of QName

    +
    value:the value to check
    space:allow spaces in front and end of the string
    Returns:0 if this validates, a positive error code number otherwise and -1 in case of internal or API error.
    +
    +
    +
    + + diff --git a/doc/devhelp/libxml2-uri.html b/doc/devhelp/libxml2-uri.html new file mode 100644 index 0000000..8b33c4e --- /dev/null +++ b/doc/devhelp/libxml2-uri.html @@ -0,0 +1,154 @@ + + + + + uri: library of generic URI related routines + + + + + + + + + + + + + + + + +

    + uri +

    +

    uri - library of generic URI related routines

    +

    library of generic URI related routines Implements RFC 2396

    +

    Author(s): Daniel Veillard

    +
    +

    Synopsis

    +
    typedef struct _xmlURI xmlURI;
    +typedef xmlURI * xmlURIPtr;
    +int	xmlNormalizeURIPath		(char * path);
    +void	xmlPrintURI			(FILE * stream, 
    xmlURIPtr uri); +xmlURIPtr xmlParseURIRaw (const char * str,
    int raw); +char * xmlURIUnescapeString (const char * str,
    int len,
    char * target); +xmlURIPtr xmlParseURI (const char * str); +xmlURIPtr xmlCreateURI (void); +xmlChar * xmlURIEscapeStr (const xmlChar * str,
    const xmlChar * list); +xmlChar * xmlPathToURI (const xmlChar * path); +xmlChar * xmlCanonicPath (const xmlChar * path); +void xmlFreeURI (xmlURIPtr uri); +int xmlParseURIReference (xmlURIPtr uri,
    const char * str); +xmlChar * xmlBuildRelativeURI (const xmlChar * URI,
    const xmlChar * base); +xmlChar * xmlSaveUri (xmlURIPtr uri); +xmlChar * xmlURIEscape (const xmlChar * str); +xmlChar * xmlBuildURI (const xmlChar * URI,
    const xmlChar * base); +
    +
    +
    +

    Description

    +
    +
    +

    Details

    +
    +

    Structure xmlURI

    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 (deprecated - use with caution)
    +    char *	fragment	: the fragment identifier
    +    int	cleanup	: parsing potentially unclean URI
    +    char *	query_raw	: the query string (as it appears in the URI)
    +} xmlURI;
    +

    +

    +
    +

    Typedef xmlURIPtr

    xmlURI * xmlURIPtr;
    +

    +

    +
    +

    xmlBuildRelativeURI ()

    xmlChar *	xmlBuildRelativeURI	(const xmlChar * URI, 
    const xmlChar * base)
    +

    Expresses the URI of the reference in terms relative to the base. Some examples of this operation include: base = "http://site1.com/docs/book1.html" URI input URI returned docs/pic1.gif pic1.gif docs/img/pic1.gif img/pic1.gif img/pic1.gif ../img/pic1.gif http://site1.com/docs/pic1.gif pic1.gif http://site2.com/docs/pic1.gif http://site2.com/docs/pic1.gif base = "docs/book1.html" URI input URI returned docs/pic1.gif pic1.gif docs/img/pic1.gif img/pic1.gif img/pic1.gif ../img/pic1.gif http://site1.com/docs/pic1.gif http://site1.com/docs/pic1.gif Note: if the URI reference is really wierd or complicated, it may be worthwhile to first convert it into a "nice" one by calling xmlBuildURI (using 'base') before calling this routine, since this routine (for reasonable efficiency) assumes URI has already been through some validation.

    +
    URI:the URI reference under consideration
    base:the base value
    Returns:a new URI string (to be freed by the caller) or NULL in case error.
    +
    +

    xmlBuildURI ()

    xmlChar *	xmlBuildURI		(const xmlChar * URI, 
    const xmlChar * base)
    +

    Computes he final URI of the reference done by checking that the given URI is valid, and building the final URI using the base URI. This is processed according to section 5.2 of the RFC 2396 5.2. Resolving Relative References to Absolute Form

    +
    URI:the URI instance found in the document
    base:the base value
    Returns:a new URI string (to be freed by the caller) or NULL in case of error.
    +
    +

    xmlCanonicPath ()

    xmlChar *	xmlCanonicPath		(const xmlChar * path)
    +

    Constructs a canonic path from the specified path.

    +
    path:the resource locator in a filesystem notation
    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.
    +
    +

    xmlCreateURI ()

    xmlURIPtr	xmlCreateURI		(void)
    +

    Simply creates an empty xmlURI

    +
    Returns:the new structure or NULL in case of error
    +
    +

    xmlFreeURI ()

    void	xmlFreeURI			(xmlURIPtr uri)
    +

    Free up the xmlURI struct

    +
    uri:pointer to an xmlURI
    +
    + +
    +

    xmlParseURI ()

    xmlURIPtr	xmlParseURI		(const char * str)
    +

    Parse an URI based on RFC 3986 URI-reference = [ absoluteURI | relativeURI ] [ "#" fragment ]

    +
    str:the URI string to analyze
    Returns:a newly built xmlURIPtr or NULL in case of error
    +
    +

    xmlParseURIRaw ()

    xmlURIPtr	xmlParseURIRaw		(const char * str, 
    int raw)
    +

    Parse an URI but allows to keep intact the original fragments. URI-reference = URI / relative-ref

    +
    str:the URI string to analyze
    raw:if 1 unescaping of URI pieces are disabled
    Returns:a newly built xmlURIPtr or NULL in case of error
    +
    +

    xmlParseURIReference ()

    int	xmlParseURIReference		(xmlURIPtr uri, 
    const char * str)
    +

    Parse an URI reference string based on RFC 3986 and fills in the appropriate fields of the @uri structure URI-reference = URI / relative-ref

    +
    uri:pointer to an URI structure
    str:the string to analyze
    Returns:0 or the error code
    +
    +

    xmlPathToURI ()

    xmlChar *	xmlPathToURI		(const xmlChar * path)
    +

    Constructs an URI expressing the existing path

    +
    path:the resource locator in a filesystem notation
    Returns:a new URI, or a duplicate of the path parameter if the construction fails. The caller is responsible for freeing the memory occupied by the returned string. If there is insufficient memory available, or the argument is NULL, the function returns NULL.
    +
    +

    xmlPrintURI ()

    void	xmlPrintURI			(FILE * stream, 
    xmlURIPtr uri)
    +

    Prints the URI in the stream @stream.

    +
    stream:a FILE* for the output
    uri:pointer to an xmlURI
    +
    +

    xmlSaveUri ()

    xmlChar *	xmlSaveUri		(xmlURIPtr uri)
    +

    Save the URI as an escaped string

    +
    uri:pointer to an xmlURI
    Returns:a new string (to be deallocated by caller)
    +
    +

    xmlURIEscape ()

    xmlChar *	xmlURIEscape		(const xmlChar * str)
    +

    Escaping routine, does not do validity checks ! It will try to escape the chars needing this, but this is heuristic based it's impossible to be sure.

    +
    str:the string of the URI to escape
    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
    +
    +

    xmlURIEscapeStr ()

    xmlChar *	xmlURIEscapeStr		(const xmlChar * str, 
    const xmlChar * list)
    +

    This routine escapes a string to hex, ignoring reserved characters (a-z) and the characters in the exception list.

    +
    str:string to escape
    list:exception list string of chars not to escape
    Returns:a new escaped string or NULL in case of error.
    +
    + +
    +
    +
    + + diff --git a/doc/devhelp/libxml2-valid.html b/doc/devhelp/libxml2-valid.html new file mode 100644 index 0000000..fcb68e7 --- /dev/null +++ b/doc/devhelp/libxml2-valid.html @@ -0,0 +1,528 @@ + + + + + valid: The DTD validation + + + + + + + + + + + + + + + + +

    + valid +

    +

    valid - The DTD validation

    +

    API for the DTD handling and the validity checking

    +

    Author(s): Daniel Veillard

    +
    +

    Synopsis

    +
    #define XML_CTXT_FINISH_DTD_0;
    +#define XML_CTXT_FINISH_DTD_1;
    +typedef struct _xmlHashTable xmlElementTable;
    +typedef xmlValidState * xmlValidStatePtr;
    +typedef xmlIDTable * xmlIDTablePtr;
    +typedef xmlNotationTable * xmlNotationTablePtr;
    +typedef struct _xmlValidCtxt xmlValidCtxt;
    +typedef xmlElementTable * xmlElementTablePtr;
    +typedef xmlRefTable * xmlRefTablePtr;
    +typedef struct _xmlHashTable xmlNotationTable;
    +typedef struct _xmlHashTable xmlRefTable;
    +typedef struct _xmlValidState xmlValidState;
    +typedef struct _xmlHashTable xmlAttributeTable;
    +typedef xmlAttributeTable * xmlAttributeTablePtr;
    +typedef struct _xmlHashTable xmlIDTable;
    +typedef xmlValidCtxt * xmlValidCtxtPtr;
    +void	xmlFreeNotationTable		(xmlNotationTablePtr table);
    +int	xmlValidateNameValue		(const xmlChar * value);
    +void	xmlSnprintfElementContent	(char * buf, 
    int size,
    xmlElementContentPtr content,
    int englob); +xmlRefPtr xmlAddRef (xmlValidCtxtPtr ctxt,
    xmlDocPtr doc,
    const xmlChar * value,
    xmlAttrPtr attr); +void xmlDumpAttributeDecl (xmlBufferPtr buf,
    xmlAttributePtr attr); +int xmlValidateDocumentFinal (xmlValidCtxtPtr ctxt,
    xmlDocPtr doc); +int xmlValidateDtdFinal (xmlValidCtxtPtr ctxt,
    xmlDocPtr doc); +void xmlDumpAttributeTable (xmlBufferPtr buf,
    xmlAttributeTablePtr table); +xmlEnumerationPtr xmlCreateEnumeration (const xmlChar * name); +int xmlValidateOneAttribute (xmlValidCtxtPtr ctxt,
    xmlDocPtr doc,
    xmlNodePtr elem,
    xmlAttrPtr attr,
    const xmlChar * value); +int xmlValidGetValidElements (xmlNode * prev,
    xmlNode * next,
    const xmlChar ** names,
    int max); +int xmlIsMixedElement (xmlDocPtr doc,
    const xmlChar * name); +void xmlDumpNotationDecl (xmlBufferPtr buf,
    xmlNotationPtr nota); +int xmlIsID (xmlDocPtr doc,
    xmlNodePtr elem,
    xmlAttrPtr attr); +xmlAttributePtr xmlGetDtdQAttrDesc (xmlDtdPtr dtd,
    const xmlChar * elem,
    const xmlChar * name,
    const xmlChar * prefix); +xmlElementContentPtr xmlNewDocElementContent (xmlDocPtr doc,
    const xmlChar * name,
    xmlElementContentType type); +void xmlFreeAttributeTable (xmlAttributeTablePtr table); +typedef void xmlValidityErrorFunc (void * ctx,
    const char * msg,
    ... ...); +int xmlValidateAttributeDecl (xmlValidCtxtPtr ctxt,
    xmlDocPtr doc,
    xmlAttributePtr attr); +xmlElementPtr xmlGetDtdQElementDesc (xmlDtdPtr dtd,
    const xmlChar * name,
    const xmlChar * prefix); +xmlNotationTablePtr xmlCopyNotationTable (xmlNotationTablePtr table); +int xmlValidateDocument (xmlValidCtxtPtr ctxt,
    xmlDocPtr doc); +int xmlValidGetPotentialChildren (xmlElementContent * ctree,
    const xmlChar ** names,
    int * len,
    int max); +xmlNotationPtr xmlAddNotationDecl (xmlValidCtxtPtr ctxt,
    xmlDtdPtr dtd,
    const xmlChar * name,
    const xmlChar * PublicID,
    const xmlChar * SystemID); +int xmlValidateElementDecl (xmlValidCtxtPtr ctxt,
    xmlDocPtr doc,
    xmlElementPtr elem); +xmlAttributePtr xmlAddAttributeDecl (xmlValidCtxtPtr ctxt,
    xmlDtdPtr dtd,
    const xmlChar * elem,
    const xmlChar * name,
    const xmlChar * ns,
    xmlAttributeType type,
    xmlAttributeDefault def,
    const xmlChar * defaultValue,
    xmlEnumerationPtr tree); +xmlAttrPtr xmlGetID (xmlDocPtr doc,
    const xmlChar * ID); +xmlElementTablePtr xmlCopyElementTable (xmlElementTablePtr table); +xmlListPtr xmlGetRefs (xmlDocPtr doc,
    const xmlChar * ID); +void xmlSprintfElementContent (char * buf,
    xmlElementContentPtr content,
    int englob); +int xmlValidateOneElement (xmlValidCtxtPtr ctxt,
    xmlDocPtr doc,
    xmlNodePtr elem); +int xmlValidateNmtokenValue (const xmlChar * value); +void xmlDumpElementTable (xmlBufferPtr buf,
    xmlElementTablePtr table); +xmlChar * xmlValidCtxtNormalizeAttributeValue (xmlValidCtxtPtr ctxt,
    xmlDocPtr doc,
    xmlNodePtr elem,
    const xmlChar * name,
    const xmlChar * value); +void xmlDumpElementDecl (xmlBufferPtr buf,
    xmlElementPtr elem); +void xmlFreeElementContent (xmlElementContentPtr cur); +int xmlValidateOneNamespace (xmlValidCtxtPtr ctxt,
    xmlDocPtr doc,
    xmlNodePtr elem,
    const xmlChar * prefix,
    xmlNsPtr ns,
    const xmlChar * value); +int xmlValidatePushElement (xmlValidCtxtPtr ctxt,
    xmlDocPtr doc,
    xmlNodePtr elem,
    const xmlChar * qname); +int xmlIsRef (xmlDocPtr doc,
    xmlNodePtr elem,
    xmlAttrPtr attr); +xmlElementContentPtr xmlCopyDocElementContent (xmlDocPtr doc,
    xmlElementContentPtr cur); +xmlIDPtr xmlAddID (xmlValidCtxtPtr ctxt,
    xmlDocPtr doc,
    const xmlChar * value,
    xmlAttrPtr attr); +void xmlFreeRefTable (xmlRefTablePtr table); +int xmlValidateNamesValue (const xmlChar * value); +int xmlRemoveID (xmlDocPtr doc,
    xmlAttrPtr attr); +void xmlFreeElementTable (xmlElementTablePtr table); +void xmlFreeIDTable (xmlIDTablePtr table); +void xmlFreeValidCtxt (xmlValidCtxtPtr cur); +xmlAttributeTablePtr xmlCopyAttributeTable (xmlAttributeTablePtr table); +xmlElementContentPtr xmlCopyElementContent (xmlElementContentPtr cur); +int xmlValidateAttributeValue (xmlAttributeType type,
    const xmlChar * value); +int xmlRemoveRef (xmlDocPtr doc,
    xmlAttrPtr attr); +typedef void xmlValidityWarningFunc (void * ctx,
    const char * msg,
    ... ...); +int xmlValidatePopElement (xmlValidCtxtPtr ctxt,
    xmlDocPtr doc,
    xmlNodePtr elem,
    const xmlChar * qname); +void xmlFreeEnumeration (xmlEnumerationPtr cur); +xmlEnumerationPtr xmlCopyEnumeration (xmlEnumerationPtr cur); +xmlAttributePtr xmlGetDtdAttrDesc (xmlDtdPtr dtd,
    const xmlChar * elem,
    const xmlChar * name); +int xmlValidateDtd (xmlValidCtxtPtr ctxt,
    xmlDocPtr doc,
    xmlDtdPtr dtd); +xmlValidCtxtPtr xmlNewValidCtxt (void); +void xmlDumpNotationTable (xmlBufferPtr buf,
    xmlNotationTablePtr table); +xmlElementPtr xmlAddElementDecl (xmlValidCtxtPtr ctxt,
    xmlDtdPtr dtd,
    const xmlChar * name,
    xmlElementTypeVal type,
    xmlElementContentPtr content); +xmlChar * xmlValidNormalizeAttributeValue (xmlDocPtr doc,
    xmlNodePtr elem,
    const xmlChar * name,
    const xmlChar * value); +int xmlValidBuildContentModel (xmlValidCtxtPtr ctxt,
    xmlElementPtr elem); +int xmlValidateElement (xmlValidCtxtPtr ctxt,
    xmlDocPtr doc,
    xmlNodePtr elem); +int xmlValidateNotationUse (xmlValidCtxtPtr ctxt,
    xmlDocPtr doc,
    const xmlChar * notationName); +int xmlValidateRoot (xmlValidCtxtPtr ctxt,
    xmlDocPtr doc); +int xmlValidateNotationDecl (xmlValidCtxtPtr ctxt,
    xmlDocPtr doc,
    xmlNotationPtr nota); +xmlElementContentPtr xmlNewElementContent (const xmlChar * name,
    xmlElementContentType type); +xmlElementPtr xmlGetDtdElementDesc (xmlDtdPtr dtd,
    const xmlChar * name); +xmlNotationPtr xmlGetDtdNotationDesc (xmlDtdPtr dtd,
    const xmlChar * name); +int xmlValidatePushCData (xmlValidCtxtPtr ctxt,
    const xmlChar * data,
    int len); +int xmlValidateNmtokensValue (const xmlChar * value); +void xmlFreeDocElementContent (xmlDocPtr doc,
    xmlElementContentPtr cur); +
    +
    +
    +

    Description

    +
    +
    +

    Details

    +
    +

    Macro XML_CTXT_FINISH_DTD_0

    #define XML_CTXT_FINISH_DTD_0;
    +

    Special value for finishDtd field when embedded in an xmlParserCtxt

    +
    +
    +

    Macro XML_CTXT_FINISH_DTD_1

    #define XML_CTXT_FINISH_DTD_1;
    +

    Special value for finishDtd field when embedded in an xmlParserCtxt

    +
    +
    +

    Structure xmlAttributeTable

    struct _xmlHashTable {
    +The content of this structure is not made public by the API.
    +} xmlAttributeTable;
    +

    +

    +
    +

    Typedef xmlAttributeTablePtr

    xmlAttributeTable * xmlAttributeTablePtr;
    +

    +

    +
    +

    Structure xmlElementTable

    struct _xmlHashTable {
    +The content of this structure is not made public by the API.
    +} xmlElementTable;
    +

    +

    +
    +

    Typedef xmlElementTablePtr

    xmlElementTable * xmlElementTablePtr;
    +

    +

    +
    +

    Structure xmlIDTable

    struct _xmlHashTable {
    +The content of this structure is not made public by the API.
    +} xmlIDTable;
    +

    +

    +
    +

    Typedef xmlIDTablePtr

    xmlIDTable * xmlIDTablePtr;
    +

    +

    +
    +

    Structure xmlNotationTable

    struct _xmlHashTable {
    +The content of this structure is not made public by the API.
    +} xmlNotationTable;
    +

    +

    +
    +

    Typedef xmlNotationTablePtr

    xmlNotationTable * xmlNotationTablePtr;
    +

    +

    +
    +

    Structure xmlRefTable

    struct _xmlHashTable {
    +The content of this structure is not made public by the API.
    +} xmlRefTable;
    +

    +

    +
    +

    Typedef xmlRefTablePtr

    xmlRefTable * xmlRefTablePtr;
    +

    +

    +
    +

    Structure xmlValidCtxt

    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 validat
    +    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
    +    unsigned int	finishDtd	: finished validating the Dtd ?
    +    xmlDocPtr	doc	: the document
    +    int	valid	: temporary validity check result state state used for non-determinist
    +    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
    +    xmlAutomataPtr	am	: the automata
    +    xmlAutomataStatePtr	state	: used to build the automata
    +    void *	am
    +    void *	state
    +} xmlValidCtxt;
    +

    +

    +
    +

    Typedef xmlValidCtxtPtr

    xmlValidCtxt * xmlValidCtxtPtr;
    +

    +

    +
    +

    Structure xmlValidState

    struct _xmlValidState {
    +The content of this structure is not made public by the API.
    +} xmlValidState;
    +

    +

    +
    +

    Typedef xmlValidStatePtr

    xmlValidState * xmlValidStatePtr;
    +

    +

    +
    + +
    +
    +
    +

    xmlAddAttributeDecl ()

    xmlAttributePtr	xmlAddAttributeDecl	(xmlValidCtxtPtr ctxt, 
    xmlDtdPtr dtd,
    const xmlChar * elem,
    const xmlChar * name,
    const xmlChar * ns,
    xmlAttributeType type,
    xmlAttributeDefault def,
    const xmlChar * defaultValue,
    xmlEnumerationPtr tree)
    +

    Register a new attribute declaration Note that @tree becomes the ownership of the DTD

    +
    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
    Returns:NULL if not new, otherwise the attribute decl
    +
    +

    xmlAddElementDecl ()

    xmlElementPtr	xmlAddElementDecl	(xmlValidCtxtPtr ctxt, 
    xmlDtdPtr dtd,
    const xmlChar * name,
    xmlElementTypeVal type,
    xmlElementContentPtr content)
    +

    Register a new element declaration

    +
    ctxt:the validation context
    dtd:pointer to the DTD
    name:the entity name
    type:the element type
    content:the element content tree or NULL
    Returns:NULL if not, otherwise the entity
    +
    +

    xmlAddID ()

    xmlIDPtr	xmlAddID		(xmlValidCtxtPtr ctxt, 
    xmlDocPtr doc,
    const xmlChar * value,
    xmlAttrPtr attr)
    +

    Register a new id declaration

    +
    ctxt:the validation context
    doc:pointer to the document
    value:the value name
    attr:the attribute holding the ID
    Returns:NULL if not, otherwise the new xmlIDPtr
    +
    +

    xmlAddNotationDecl ()

    xmlNotationPtr	xmlAddNotationDecl	(xmlValidCtxtPtr ctxt, 
    xmlDtdPtr dtd,
    const xmlChar * name,
    const xmlChar * PublicID,
    const xmlChar * SystemID)
    +

    Register a new notation declaration

    +
    ctxt:the validation context
    dtd:pointer to the DTD
    name:the entity name
    PublicID:the public identifier or NULL
    SystemID:the system identifier or NULL
    Returns:NULL if not, otherwise the entity
    +
    +

    xmlAddRef ()

    xmlRefPtr	xmlAddRef		(xmlValidCtxtPtr ctxt, 
    xmlDocPtr doc,
    const xmlChar * value,
    xmlAttrPtr attr)
    +

    Register a new ref declaration

    +
    ctxt:the validation context
    doc:pointer to the document
    value:the value name
    attr:the attribute holding the Ref
    Returns:NULL if not, otherwise the new xmlRefPtr
    +
    +

    xmlCopyAttributeTable ()

    xmlAttributeTablePtr	xmlCopyAttributeTable	(xmlAttributeTablePtr table)
    +

    Build a copy of an attribute table.

    +
    table:An attribute table
    Returns:the new xmlAttributeTablePtr or NULL in case of error.
    +
    +

    xmlCopyDocElementContent ()

    xmlElementContentPtr	xmlCopyDocElementContent	(xmlDocPtr doc, 
    xmlElementContentPtr cur)
    +

    Build a copy of an element content description.

    +
    doc:the document owning the element declaration
    cur:An element content pointer.
    Returns:the new xmlElementContentPtr or NULL in case of error.
    +
    +

    xmlCopyElementContent ()

    xmlElementContentPtr	xmlCopyElementContent	(xmlElementContentPtr cur)
    +

    Build a copy of an element content description. Deprecated, use xmlCopyDocElementContent instead

    +
    cur:An element content pointer.
    Returns:the new xmlElementContentPtr or NULL in case of error.
    +
    +

    xmlCopyElementTable ()

    xmlElementTablePtr	xmlCopyElementTable	(xmlElementTablePtr table)
    +

    Build a copy of an element table.

    +
    table:An element table
    Returns:the new xmlElementTablePtr or NULL in case of error.
    +
    +

    xmlCopyEnumeration ()

    xmlEnumerationPtr	xmlCopyEnumeration	(xmlEnumerationPtr cur)
    +

    Copy an enumeration attribute node (recursive).

    +
    cur:the tree to copy.
    Returns:the xmlEnumerationPtr just created or NULL in case of error.
    +
    +

    xmlCopyNotationTable ()

    xmlNotationTablePtr	xmlCopyNotationTable	(xmlNotationTablePtr table)
    +

    Build a copy of a notation table.

    +
    table:A notation table
    Returns:the new xmlNotationTablePtr or NULL in case of error.
    +
    +

    xmlCreateEnumeration ()

    xmlEnumerationPtr	xmlCreateEnumeration	(const xmlChar * name)
    +

    create and initialize an enumeration attribute node.

    +
    name:the enumeration name or NULL
    Returns:the xmlEnumerationPtr just created or NULL in case of error.
    +
    +

    xmlDumpAttributeDecl ()

    void	xmlDumpAttributeDecl		(xmlBufferPtr buf, 
    xmlAttributePtr attr)
    +

    This will dump the content of the attribute declaration as an XML DTD definition

    +
    buf:the XML buffer output
    attr:An attribute declaration
    +
    +

    xmlDumpAttributeTable ()

    void	xmlDumpAttributeTable		(xmlBufferPtr buf, 
    xmlAttributeTablePtr table)
    +

    This will dump the content of the attribute table as an XML DTD definition

    +
    buf:the XML buffer output
    table:An attribute table
    +
    +

    xmlDumpElementDecl ()

    void	xmlDumpElementDecl		(xmlBufferPtr buf, 
    xmlElementPtr elem)
    +

    This will dump the content of the element declaration as an XML DTD definition

    +
    buf:the XML buffer output
    elem:An element table
    +
    +

    xmlDumpElementTable ()

    void	xmlDumpElementTable		(xmlBufferPtr buf, 
    xmlElementTablePtr table)
    +

    This will dump the content of the element table as an XML DTD definition

    +
    buf:the XML buffer output
    table:An element table
    +
    +

    xmlDumpNotationDecl ()

    void	xmlDumpNotationDecl		(xmlBufferPtr buf, 
    xmlNotationPtr nota)
    +

    This will dump the content the notation declaration as an XML DTD definition

    +
    buf:the XML buffer output
    nota:A notation declaration
    +
    +

    xmlDumpNotationTable ()

    void	xmlDumpNotationTable		(xmlBufferPtr buf, 
    xmlNotationTablePtr table)
    +

    This will dump the content of the notation table as an XML DTD definition

    +
    buf:the XML buffer output
    table:A notation table
    +
    +

    xmlFreeAttributeTable ()

    void	xmlFreeAttributeTable		(xmlAttributeTablePtr table)
    +

    Deallocate the memory used by an entities hash table.

    +
    table:An attribute table
    +
    +

    xmlFreeDocElementContent ()

    void	xmlFreeDocElementContent	(xmlDocPtr doc, 
    xmlElementContentPtr cur)
    +

    Free an element content structure. The whole subtree is removed.

    +
    doc:the document owning the element declaration
    cur:the element content tree to free
    +
    +

    xmlFreeElementContent ()

    void	xmlFreeElementContent		(xmlElementContentPtr cur)
    +

    Free an element content structure. The whole subtree is removed. Deprecated, use xmlFreeDocElementContent instead

    +
    cur:the element content tree to free
    +
    +

    xmlFreeElementTable ()

    void	xmlFreeElementTable		(xmlElementTablePtr table)
    +

    Deallocate the memory used by an element hash table.

    +
    table:An element table
    +
    +

    xmlFreeEnumeration ()

    void	xmlFreeEnumeration		(xmlEnumerationPtr cur)
    +

    free an enumeration attribute node (recursive).

    +
    cur:the tree to free.
    +
    +

    xmlFreeIDTable ()

    void	xmlFreeIDTable			(xmlIDTablePtr table)
    +

    Deallocate the memory used by an ID hash table.

    +
    table:An id table
    +
    +

    xmlFreeNotationTable ()

    void	xmlFreeNotationTable		(xmlNotationTablePtr table)
    +

    Deallocate the memory used by an entities hash table.

    +
    table:An notation table
    +
    +

    xmlFreeRefTable ()

    void	xmlFreeRefTable			(xmlRefTablePtr table)
    +

    Deallocate the memory used by an Ref hash table.

    +
    table:An ref table
    +
    +

    xmlFreeValidCtxt ()

    void	xmlFreeValidCtxt		(xmlValidCtxtPtr cur)
    +

    Free a validation context structure.

    +
    cur:the validation context to free
    +
    +

    xmlGetDtdAttrDesc ()

    xmlAttributePtr	xmlGetDtdAttrDesc	(xmlDtdPtr dtd, 
    const xmlChar * elem,
    const xmlChar * name)
    +

    Search the DTD for the description of this attribute on this element.

    +
    dtd:a pointer to the DtD to search
    elem:the element name
    name:the attribute name
    Returns:the xmlAttributePtr if found or NULL
    +
    +

    xmlGetDtdElementDesc ()

    xmlElementPtr	xmlGetDtdElementDesc	(xmlDtdPtr dtd, 
    const xmlChar * name)
    +

    Search the DTD for the description of this element

    +
    dtd:a pointer to the DtD to search
    name:the element name
    Returns:the xmlElementPtr if found or NULL
    +
    +

    xmlGetDtdNotationDesc ()

    xmlNotationPtr	xmlGetDtdNotationDesc	(xmlDtdPtr dtd, 
    const xmlChar * name)
    +

    Search the DTD for the description of this notation

    +
    dtd:a pointer to the DtD to search
    name:the notation name
    Returns:the xmlNotationPtr if found or NULL
    +
    +

    xmlGetDtdQAttrDesc ()

    xmlAttributePtr	xmlGetDtdQAttrDesc	(xmlDtdPtr dtd, 
    const xmlChar * elem,
    const xmlChar * name,
    const xmlChar * prefix)
    +

    Search the DTD for the description of this qualified attribute on this element.

    +
    dtd:a pointer to the DtD to search
    elem:the element name
    name:the attribute name
    prefix:the attribute namespace prefix
    Returns:the xmlAttributePtr if found or NULL
    +
    +

    xmlGetDtdQElementDesc ()

    xmlElementPtr	xmlGetDtdQElementDesc	(xmlDtdPtr dtd, 
    const xmlChar * name,
    const xmlChar * prefix)
    +

    Search the DTD for the description of this element

    +
    dtd:a pointer to the DtD to search
    name:the element name
    prefix:the element namespace prefix
    Returns:the xmlElementPtr if found or NULL
    +
    +

    xmlGetID ()

    xmlAttrPtr	xmlGetID		(xmlDocPtr doc, 
    const xmlChar * ID)
    +

    Search the attribute declaring the given ID

    +
    doc:pointer to the document
    ID:the ID value
    Returns:NULL if not found, otherwise the xmlAttrPtr defining the ID
    +
    +

    xmlGetRefs ()

    xmlListPtr	xmlGetRefs		(xmlDocPtr doc, 
    const xmlChar * ID)
    +

    Find the set of references for the supplied ID.

    +
    doc:pointer to the document
    ID:the ID value
    Returns:NULL if not found, otherwise node set for the ID.
    +
    +

    xmlIsID ()

    int	xmlIsID			(xmlDocPtr doc, 
    xmlNodePtr elem,
    xmlAttrPtr attr)
    +

    Determine whether an attribute is of type ID. In case we have DTD(s) then this is done if DTD loading has been requested. In the case of HTML documents parsed with the HTML parser, then ID detection is done systematically.

    +
    doc:the document
    elem:the element carrying the attribute
    attr:the attribute
    Returns:0 or 1 depending on the lookup result
    +
    +

    xmlIsMixedElement ()

    int	xmlIsMixedElement		(xmlDocPtr doc, 
    const xmlChar * name)
    +

    Search in the DtDs whether an element accept Mixed content (or ANY) basically if it is supposed to accept text childs

    +
    doc:the document
    name:the element name
    Returns:0 if no, 1 if yes, and -1 if no element description is available
    +
    +

    xmlIsRef ()

    int	xmlIsRef			(xmlDocPtr doc, 
    xmlNodePtr elem,
    xmlAttrPtr attr)
    +

    Determine whether an attribute is of type Ref. In case we have DTD(s) then this is simple, otherwise we use an heuristic: name Ref (upper or lowercase).

    +
    doc:the document
    elem:the element carrying the attribute
    attr:the attribute
    Returns:0 or 1 depending on the lookup result
    +
    +

    xmlNewDocElementContent ()

    xmlElementContentPtr	xmlNewDocElementContent	(xmlDocPtr doc, 
    const xmlChar * name,
    xmlElementContentType type)
    +

    Allocate an element content structure for the document.

    +
    doc:the document
    name:the subelement name or NULL
    type:the type of element content decl
    Returns:NULL if not, otherwise the new element content structure
    +
    +

    xmlNewElementContent ()

    xmlElementContentPtr	xmlNewElementContent	(const xmlChar * name, 
    xmlElementContentType type)
    +

    Allocate an element content structure. Deprecated in favor of xmlNewDocElementContent

    +
    name:the subelement name or NULL
    type:the type of element content decl
    Returns:NULL if not, otherwise the new element content structure
    +
    +

    xmlNewValidCtxt ()

    xmlValidCtxtPtr	xmlNewValidCtxt		(void)
    +

    Allocate a validation context structure.

    +
    Returns:NULL if not, otherwise the new validation context structure
    +
    +

    xmlRemoveID ()

    int	xmlRemoveID			(xmlDocPtr doc, 
    xmlAttrPtr attr)
    +

    Remove the given attribute from the ID table maintained internally.

    +
    doc:the document
    attr:the attribute
    Returns:-1 if the lookup failed and 0 otherwise
    +
    +

    xmlRemoveRef ()

    int	xmlRemoveRef			(xmlDocPtr doc, 
    xmlAttrPtr attr)
    +

    Remove the given attribute from the Ref table maintained internally.

    +
    doc:the document
    attr:the attribute
    Returns:-1 if the lookup failed and 0 otherwise
    +
    +

    xmlSnprintfElementContent ()

    void	xmlSnprintfElementContent	(char * buf, 
    int size,
    xmlElementContentPtr content,
    int englob)
    +

    This will dump the content of the element content definition Intended just for the debug routine

    +
    buf:an output buffer
    size:the buffer size
    content:An element table
    englob:1 if one must print the englobing parenthesis, 0 otherwise
    +
    +

    xmlSprintfElementContent ()

    void	xmlSprintfElementContent	(char * buf, 
    xmlElementContentPtr content,
    int englob)
    +

    Deprecated, unsafe, use xmlSnprintfElementContent

    +
    buf:an output buffer
    content:An element table
    englob:1 if one must print the englobing parenthesis, 0 otherwise
    +
    +

    xmlValidBuildContentModel ()

    int	xmlValidBuildContentModel	(xmlValidCtxtPtr ctxt, 
    xmlElementPtr elem)
    +

    (Re)Build the automata associated to the content model of this element

    +
    ctxt:a validation context
    elem:an element declaration node
    Returns:1 in case of success, 0 in case of error
    +
    +

    xmlValidCtxtNormalizeAttributeValue ()

    xmlChar *	xmlValidCtxtNormalizeAttributeValue	(xmlValidCtxtPtr ctxt, 
    xmlDocPtr doc,
    xmlNodePtr elem,
    const xmlChar * name,
    const xmlChar * value)
    +

    Does the validation related extra step of the normalization of attribute values: If the declared value is not CDATA, then the XML processor must further process the normalized attribute value by discarding any leading and trailing space (#x20) characters, and by replacing sequences of space (#x20) characters by single space (#x20) character. Also check VC: Standalone Document Declaration in P32, and update ctxt->valid accordingly

    +
    ctxt:the validation context or NULL
    doc:the document
    elem:the parent
    name:the attribute name
    value:the attribute value
    Returns:a new normalized string if normalization is needed, NULL otherwise the caller must free the returned value.
    +
    +

    xmlValidGetPotentialChildren ()

    int	xmlValidGetPotentialChildren	(xmlElementContent * ctree, 
    const xmlChar ** names,
    int * len,
    int max)
    +

    Build/extend a list of potential children allowed by the content tree

    +
    ctree:an element content tree
    names: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
    Returns:the number of element in the list, or -1 in case of error.
    +
    +

    xmlValidGetValidElements ()

    int	xmlValidGetValidElements	(xmlNode * prev, 
    xmlNode * next,
    const xmlChar ** names,
    int max)
    +

    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.

    +
    prev:an element to insert after
    next:an element to insert next
    names:an array to store the list of child names
    max:the size of the array
    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.
    +
    +

    xmlValidNormalizeAttributeValue ()

    xmlChar *	xmlValidNormalizeAttributeValue	(xmlDocPtr doc, 
    xmlNodePtr elem,
    const xmlChar * name,
    const xmlChar * 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.

    +
    doc:the document
    elem:the parent
    name:the attribute name
    value:the attribute value
    Returns:a new normalized string if normalization is needed, NULL otherwise the caller must free the returned value.
    +
    +

    xmlValidateAttributeDecl ()

    int	xmlValidateAttributeDecl	(xmlValidCtxtPtr ctxt, 
    xmlDocPtr doc,
    xmlAttributePtr attr)
    +

    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

    +
    ctxt:the validation context
    doc:a document instance
    attr:an attribute definition
    Returns:1 if valid or 0 otherwise
    +
    +

    xmlValidateAttributeValue ()

    int	xmlValidateAttributeValue	(xmlAttributeType type, 
    const xmlChar * 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.

    +
    type:an attribute type
    value:an attribute value
    Returns:1 if valid or 0 otherwise
    +
    +

    xmlValidateDocument ()

    int	xmlValidateDocument		(xmlValidCtxtPtr ctxt, 
    xmlDocPtr doc)
    +

    Try to validate the document instance basically it does the all the checks described by the XML Rec i.e. validates the internal and external subset (if present) and validate the document tree.

    +
    ctxt:the validation context
    doc:a document instance
    Returns:1 if valid or 0 otherwise
    +
    +

    xmlValidateDocumentFinal ()

    int	xmlValidateDocumentFinal	(xmlValidCtxtPtr ctxt, 
    xmlDocPtr doc)
    +

    Does the final step for the document validation once all the incremental validation steps have been completed basically it does the following checks described by the XML Rec Check all the IDREF/IDREFS attributes definition for validity

    +
    ctxt:the validation context
    doc:a document instance
    Returns:1 if valid or 0 otherwise
    +
    +

    xmlValidateDtd ()

    int	xmlValidateDtd			(xmlValidCtxtPtr ctxt, 
    xmlDocPtr doc,
    xmlDtdPtr dtd)
    +

    Try to validate the document against the dtd instance Basically it does check all the definitions in the DtD. Note the the internal subset (if present) is de-coupled (i.e. not used), which could give problems if ID or IDREF is present.

    +
    ctxt:the validation context
    doc:a document instance
    dtd:a dtd instance
    Returns:1 if valid or 0 otherwise
    +
    +

    xmlValidateDtdFinal ()

    int	xmlValidateDtdFinal		(xmlValidCtxtPtr ctxt, 
    xmlDocPtr doc)
    +

    Does the final step for the dtds validation once all the subsets have been parsed basically it does the following checks described by the XML Rec - check that ENTITY and ENTITIES type attributes default or possible values matches one of the defined entities. - check that NOTATION type attributes default or possible values matches one of the defined notations.

    +
    ctxt:the validation context
    doc:a document instance
    Returns:1 if valid or 0 if invalid and -1 if not well-formed
    +
    +

    xmlValidateElement ()

    int	xmlValidateElement		(xmlValidCtxtPtr ctxt, 
    xmlDocPtr doc,
    xmlNodePtr elem)
    +

    Try to validate the subtree under an element

    +
    ctxt:the validation context
    doc:a document instance
    elem:an element instance
    Returns:1 if valid or 0 otherwise
    +
    +

    xmlValidateElementDecl ()

    int	xmlValidateElementDecl		(xmlValidCtxtPtr ctxt, 
    xmlDocPtr doc,
    xmlElementPtr elem)
    +

    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 ]

    +
    ctxt:the validation context
    doc:a document instance
    elem:an element definition
    Returns:1 if valid or 0 otherwise
    +
    +

    xmlValidateNameValue ()

    int	xmlValidateNameValue		(const xmlChar * value)
    +

    Validate that the given value match Name production

    +
    value:an Name value
    Returns:1 if valid or 0 otherwise
    +
    +

    xmlValidateNamesValue ()

    int	xmlValidateNamesValue		(const xmlChar * value)
    +

    Validate that the given value match Names production

    +
    value:an Names value
    Returns:1 if valid or 0 otherwise
    +
    +

    xmlValidateNmtokenValue ()

    int	xmlValidateNmtokenValue		(const xmlChar * value)
    +

    Validate that the given value match Nmtoken production [ VC: Name Token ]

    +
    value:an Nmtoken value
    Returns:1 if valid or 0 otherwise
    +
    +

    xmlValidateNmtokensValue ()

    int	xmlValidateNmtokensValue	(const xmlChar * value)
    +

    Validate that the given value match Nmtokens production [ VC: Name Token ]

    +
    value:an Nmtokens value
    Returns:1 if valid or 0 otherwise
    +
    +

    xmlValidateNotationDecl ()

    int	xmlValidateNotationDecl		(xmlValidCtxtPtr ctxt, 
    xmlDocPtr doc,
    xmlNotationPtr nota)
    +

    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 ...

    +
    ctxt:the validation context
    doc:a document instance
    nota:a notation definition
    Returns:1 if valid or 0 otherwise
    +
    +

    xmlValidateNotationUse ()

    int	xmlValidateNotationUse		(xmlValidCtxtPtr ctxt, 
    xmlDocPtr doc,
    const xmlChar * notationName)
    +

    Validate that the given name match a notation declaration. - [ VC: Notation Declared ]

    +
    ctxt:the validation context
    doc:the document
    notationName:the notation name to check
    Returns:1 if valid or 0 otherwise
    +
    +

    xmlValidateOneAttribute ()

    int	xmlValidateOneAttribute		(xmlValidCtxtPtr ctxt, 
    xmlDocPtr doc,
    xmlNodePtr elem,
    xmlAttrPtr attr,
    const xmlChar * value)
    +

    Try to validate a single attribute for an element basically it does the following checks as described by the XML-1.0 recommendation: - [ VC: Attribute Value Type ] - [ VC: Fixed Attribute Default ] - [ VC: Entity Name ] - [ VC: Name Token ] - [ VC: ID ] - [ VC: IDREF ] - [ VC: Entity Name ] - [ VC: Notation Attributes ] The ID/IDREF uniqueness and matching are done separately

    +
    ctxt:the validation context
    doc:a document instance
    elem:an element instance
    attr:an attribute instance
    value:the attribute value (without entities processing)
    Returns:1 if valid or 0 otherwise
    +
    +

    xmlValidateOneElement ()

    int	xmlValidateOneElement		(xmlValidCtxtPtr ctxt, 
    xmlDocPtr doc,
    xmlNodePtr elem)
    +

    Try to validate a single element and it's attributes, basically it does the following checks as described by the XML-1.0 recommendation: - [ VC: Element Valid ] - [ VC: Required Attribute ] Then call xmlValidateOneAttribute() for each attribute present. The ID/IDREF checkings are done separately

    +
    ctxt:the validation context
    doc:a document instance
    elem:an element instance
    Returns:1 if valid or 0 otherwise
    +
    +

    xmlValidateOneNamespace ()

    int	xmlValidateOneNamespace		(xmlValidCtxtPtr ctxt, 
    xmlDocPtr doc,
    xmlNodePtr elem,
    const xmlChar * prefix,
    xmlNsPtr ns,
    const xmlChar * value)
    +

    Try to validate a single namespace declaration for an element basically it does the following checks as described by the XML-1.0 recommendation: - [ VC: Attribute Value Type ] - [ VC: Fixed Attribute Default ] - [ VC: Entity Name ] - [ VC: Name Token ] - [ VC: ID ] - [ VC: IDREF ] - [ VC: Entity Name ] - [ VC: Notation Attributes ] The ID/IDREF uniqueness and matching are done separately

    +
    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)
    Returns:1 if valid or 0 otherwise
    +
    +

    xmlValidatePopElement ()

    int	xmlValidatePopElement		(xmlValidCtxtPtr ctxt, 
    xmlDocPtr doc,
    xmlNodePtr elem,
    const xmlChar * qname)
    +

    Pop the element end from the validation stack.

    +
    ctxt:the validation context
    doc:a document instance
    elem:an element instance
    qname:the qualified name as appearing in the serialization
    Returns:1 if no validation problem was found or 0 otherwise
    +
    +

    xmlValidatePushCData ()

    int	xmlValidatePushCData		(xmlValidCtxtPtr ctxt, 
    const xmlChar * data,
    int len)
    +

    check the CData parsed for validation in the current stack

    +
    ctxt:the validation context
    data:some character data read
    len:the length of the data
    Returns:1 if no validation problem was found or 0 otherwise
    +
    +

    xmlValidatePushElement ()

    int	xmlValidatePushElement		(xmlValidCtxtPtr ctxt, 
    xmlDocPtr doc,
    xmlNodePtr elem,
    const xmlChar * qname)
    +

    Push a new element start on the validation stack.

    +
    ctxt:the validation context
    doc:a document instance
    elem:an element instance
    qname:the qualified name as appearing in the serialization
    Returns:1 if no validation problem was found or 0 otherwise
    +
    +

    xmlValidateRoot ()

    int	xmlValidateRoot			(xmlValidCtxtPtr ctxt, 
    xmlDocPtr doc)
    +

    Try to validate a the root element basically it does the following check as described by the XML-1.0 recommendation: - [ VC: Root Element Type ] it doesn't try to recurse or apply other check to the element

    +
    ctxt:the validation context
    doc:a document instance
    Returns:1 if valid or 0 otherwise
    +
    +
    +
    + + diff --git a/doc/devhelp/libxml2-xinclude.html b/doc/devhelp/libxml2-xinclude.html new file mode 100644 index 0000000..12a61d5 --- /dev/null +++ b/doc/devhelp/libxml2-xinclude.html @@ -0,0 +1,169 @@ + + + + + xinclude: implementation of XInclude + + + + + + + + + + + + + + + + +

    + xinclude +

    +

    xinclude - implementation of XInclude

    +

    API to handle XInclude processing, implements the World Wide Web Consortium Last Call Working Draft 10 November 2003

    +

    Author(s): Daniel Veillard

    +
    +

    Synopsis

    +
    #define XINCLUDE_PARSE_TEXT;
    +#define XINCLUDE_PARSE_XPOINTER;
    +#define XINCLUDE_HREF;
    +#define XINCLUDE_FALLBACK;
    +#define XINCLUDE_NS;
    +#define XINCLUDE_PARSE;
    +#define XINCLUDE_NODE;
    +#define XINCLUDE_PARSE_XML;
    +#define XINCLUDE_PARSE_ENCODING;
    +#define XINCLUDE_OLD_NS;
    +typedef struct _xmlXIncludeCtxt xmlXIncludeCtxt;
    +typedef xmlXIncludeCtxt * xmlXIncludeCtxtPtr;
    +int	xmlXIncludeProcessTreeFlagsData	(xmlNodePtr tree, 
    int flags,
    void * data); +int xmlXIncludeProcessFlagsData (xmlDocPtr doc,
    int flags,
    void * data); +int xmlXIncludeProcessFlags (xmlDocPtr doc,
    int flags); +int xmlXIncludeProcessTree (xmlNodePtr tree); +int xmlXIncludeProcessNode (xmlXIncludeCtxtPtr ctxt,
    xmlNodePtr node); +void xmlXIncludeFreeContext (xmlXIncludeCtxtPtr ctxt); +int xmlXIncludeSetFlags (xmlXIncludeCtxtPtr ctxt,
    int flags); +int xmlXIncludeProcess (xmlDocPtr doc); +xmlXIncludeCtxtPtr xmlXIncludeNewContext (xmlDocPtr doc); +int xmlXIncludeProcessTreeFlags (xmlNodePtr tree,
    int flags); +
    +
    +
    +

    Description

    +
    +
    +

    Details

    +
    +

    Macro XINCLUDE_FALLBACK

    #define XINCLUDE_FALLBACK;
    +

    Macro defining "fallback"

    +
    +
    +

    Macro XINCLUDE_HREF

    #define XINCLUDE_HREF;
    +

    Macro defining "href"

    +
    +
    +

    Macro XINCLUDE_NODE

    #define XINCLUDE_NODE;
    +

    Macro defining "include"

    +
    +
    +

    Macro XINCLUDE_NS

    #define XINCLUDE_NS;
    +

    Macro defining the Xinclude namespace: http://www.w3.org/2003/XInclude

    +
    +
    +

    Macro XINCLUDE_OLD_NS

    #define XINCLUDE_OLD_NS;
    +

    Macro defining the draft Xinclude namespace: http://www.w3.org/2001/XInclude

    +
    +
    +

    Macro XINCLUDE_PARSE

    #define XINCLUDE_PARSE;
    +

    Macro defining "parse"

    +
    +
    +

    Macro XINCLUDE_PARSE_ENCODING

    #define XINCLUDE_PARSE_ENCODING;
    +

    Macro defining "encoding"

    +
    +
    +

    Macro XINCLUDE_PARSE_TEXT

    #define XINCLUDE_PARSE_TEXT;
    +

    Macro defining "text"

    +
    +
    +

    Macro XINCLUDE_PARSE_XML

    #define XINCLUDE_PARSE_XML;
    +

    Macro defining "xml"

    +
    +
    +

    Macro XINCLUDE_PARSE_XPOINTER

    #define XINCLUDE_PARSE_XPOINTER;
    +

    Macro defining "xpointer"

    +
    +
    +

    Structure xmlXIncludeCtxt

    struct _xmlXIncludeCtxt {
    +The content of this structure is not made public by the API.
    +} xmlXIncludeCtxt;
    +

    +

    +
    +

    Typedef xmlXIncludeCtxtPtr

    xmlXIncludeCtxt * xmlXIncludeCtxtPtr;
    +

    +

    +
    +

    xmlXIncludeFreeContext ()

    void	xmlXIncludeFreeContext		(xmlXIncludeCtxtPtr ctxt)
    +

    Free an XInclude context

    +
    ctxt:the XInclude context
    +
    +

    xmlXIncludeNewContext ()

    xmlXIncludeCtxtPtr	xmlXIncludeNewContext	(xmlDocPtr doc)
    +

    Creates a new XInclude context

    +
    doc:an XML Document
    Returns:the new set
    +
    +

    xmlXIncludeProcess ()

    int	xmlXIncludeProcess		(xmlDocPtr doc)
    +

    Implement the XInclude substitution on the XML document @doc

    +
    doc:an XML document
    Returns:0 if no substitution were done, -1 if some processing failed or the number of substitutions done.
    +
    +

    xmlXIncludeProcessFlags ()

    int	xmlXIncludeProcessFlags		(xmlDocPtr doc, 
    int flags)
    +

    Implement the XInclude substitution on the XML document @doc

    +
    doc:an XML document
    flags:a set of xmlParserOption used for parsing XML includes
    Returns:0 if no substitution were done, -1 if some processing failed or the number of substitutions done.
    +
    +

    xmlXIncludeProcessFlagsData ()

    int	xmlXIncludeProcessFlagsData	(xmlDocPtr doc, 
    int flags,
    void * data)
    +

    Implement the XInclude substitution on the XML document @doc

    +
    doc:an XML document
    flags:a set of xmlParserOption used for parsing XML includes
    data:application data that will be passed to the parser context in the _private field of the parser context(s)
    Returns:0 if no substitution were done, -1 if some processing failed or the number of substitutions done.
    +
    +

    xmlXIncludeProcessNode ()

    int	xmlXIncludeProcessNode		(xmlXIncludeCtxtPtr ctxt, 
    xmlNodePtr node)
    +

    Implement the XInclude substitution for the given subtree reusing the informations and data coming from the given context.

    +
    ctxt:an existing XInclude context
    node:a node in an XML document
    Returns:0 if no substitution were done, -1 if some processing failed or the number of substitutions done.
    +
    +

    xmlXIncludeProcessTree ()

    int	xmlXIncludeProcessTree		(xmlNodePtr tree)
    +

    Implement the XInclude substitution for the given subtree

    +
    tree:a node in an XML document
    Returns:0 if no substitution were done, -1 if some processing failed or the number of substitutions done.
    +
    +

    xmlXIncludeProcessTreeFlags ()

    int	xmlXIncludeProcessTreeFlags	(xmlNodePtr tree, 
    int flags)
    +

    Implement the XInclude substitution for the given subtree

    +
    tree:a node in an XML document
    flags:a set of xmlParserOption used for parsing XML includes
    Returns:0 if no substitution were done, -1 if some processing failed or the number of substitutions done.
    +
    +

    xmlXIncludeProcessTreeFlagsData ()

    int	xmlXIncludeProcessTreeFlagsData	(xmlNodePtr tree, 
    int flags,
    void * data)
    +

    Implement the XInclude substitution on the XML node @tree

    +
    tree:an XML node
    flags:a set of xmlParserOption used for parsing XML includes
    data:application data that will be passed to the parser context in the _private field of the parser context(s)
    Returns:0 if no substitution were done, -1 if some processing failed or the number of substitutions done.
    +
    +

    xmlXIncludeSetFlags ()

    int	xmlXIncludeSetFlags		(xmlXIncludeCtxtPtr ctxt, 
    int flags)
    +

    Set the flags used for further processing of XML resources.

    +
    ctxt:an XInclude processing context
    flags:a set of xmlParserOption used for parsing XML includes
    Returns:0 in case of success and -1 in case of error.
    +
    +
    +
    + + diff --git a/doc/devhelp/libxml2-xlink.html b/doc/devhelp/libxml2-xlink.html new file mode 100644 index 0000000..abe6965 --- /dev/null +++ b/doc/devhelp/libxml2-xlink.html @@ -0,0 +1,160 @@ + + + + + xlink: unfinished XLink detection module + + + + + + + + + + + + + + + + +

    + xlink +

    +

    xlink - unfinished XLink detection module

    +

    unfinished XLink detection module

    +

    Author(s): Daniel Veillard

    +
    +

    Synopsis

    +
    typedef xmlChar * xlinkTitle;
    +typedef enum xlinkShow;
    +typedef xmlChar * xlinkHRef;
    +typedef enum xlinkActuate;
    +typedef struct _xlinkHandler xlinkHandler;
    +typedef xmlChar * xlinkRole;
    +typedef xlinkHandler * xlinkHandlerPtr;
    +typedef enum xlinkType;
    +void	xlinkSetDefaultDetect		(xlinkNodeDetectFunc func);
    +void	xlinkSetDefaultHandler		(xlinkHandlerPtr handler);
    +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); +typedef void xlinkExtendedLinkSetFunk (void * ctx,
    xmlNodePtr node,
    int nbLocators,
    const xlinkHRef * hrefs,
    const xlinkRole * roles,
    int nbTitles,
    const xlinkTitle * titles,
    const xmlChar ** langs); +typedef void xlinkSimpleLinkFunk (void * ctx,
    xmlNodePtr node,
    const xlinkHRef href,
    const xlinkRole role,
    const xlinkTitle title); +typedef void xlinkNodeDetectFunc (void * ctx,
    xmlNodePtr node); +xlinkHandlerPtr xlinkGetDefaultHandler (void); +xlinkType xlinkIsLink (xmlDocPtr doc,
    xmlNodePtr node); +xlinkNodeDetectFunc xlinkGetDefaultDetect (void); +
    +
    +
    +

    Description

    +
    +
    +

    Details

    +
    + +
    +

    Typedef xlinkHRef

    xmlChar * xlinkHRef;
    +

    +

    +
    +

    Structure xlinkHandler

    struct _xlinkHandler {
    +    xlinkSimpleLinkFunk	simple
    +    xlinkExtendedLinkFunk	extended
    +    xlinkExtendedLinkSetFunk	set
    +} xlinkHandler;
    +

    +

    +
    +

    Typedef xlinkHandlerPtr

    xlinkHandler * xlinkHandlerPtr;
    +

    +

    +
    +

    Typedef xlinkRole

    xmlChar * xlinkRole;
    +

    +

    +
    +

    Enum xlinkShow

    enum xlinkShow {
    +    XLINK_SHOW_NONE = 0
    +    XLINK_SHOW_NEW = 1
    +    XLINK_SHOW_EMBED = 2
    +    XLINK_SHOW_REPLACE = 3
    +};
    +

    +

    +
    +

    Typedef xlinkTitle

    xmlChar * xlinkTitle;
    +

    +

    +
    + +
    +

    Function type xlinkExtendedLinkFunk

    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)
    +

    This is the prototype for a extended link detection callback.

    +
    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
    titles:
    langs:array of xml:lang values for the titles
    +
    +

    Function type xlinkExtendedLinkSetFunk

    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 prototype for a extended link set detection callback.

    +
    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
    titles:
    langs:array of xml:lang values for the titles
    +
    +

    Function type xlinkNodeDetectFunc

    void	xlinkNodeDetectFunc		(void * ctx, 
    xmlNodePtr node)
    +

    This is the prototype for the link detection routine. It calls the default link detection callbacks upon link detection.

    +
    ctx:user data pointer
    node:the node to check
    +
    +

    Function type xlinkSimpleLinkFunk

    void	xlinkSimpleLinkFunk		(void * ctx, 
    xmlNodePtr node,
    const xlinkHRef href,
    const xlinkRole role,
    const xlinkTitle title)
    +

    This is the prototype for a simple link detection callback.

    +
    ctx:user data pointer
    node:the node carrying the link
    href:the target of the link
    role:the role string
    title:the link title
    +
    +

    xlinkGetDefaultDetect ()

    xlinkNodeDetectFunc	xlinkGetDefaultDetect	(void)
    +

    Get the default xlink detection routine

    +
    Returns:the current function or NULL;
    +
    +

    xlinkGetDefaultHandler ()

    xlinkHandlerPtr	xlinkGetDefaultHandler	(void)
    +

    Get the default xlink handler.

    +
    Returns:the current xlinkHandlerPtr value.
    +
    +

    xlinkIsLink ()

    xlinkType	xlinkIsLink		(xmlDocPtr doc, 
    xmlNodePtr node)
    +

    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.

    +
    doc:the document containing the node
    node:the node pointer itself
    Returns:the xlinkType of the node (XLINK_TYPE_NONE if there is no link detected.
    +
    +

    xlinkSetDefaultDetect ()

    void	xlinkSetDefaultDetect		(xlinkNodeDetectFunc func)
    +

    Set the default xlink detection routine

    +
    func:pointer to the new detection routine.
    +
    +

    xlinkSetDefaultHandler ()

    void	xlinkSetDefaultHandler		(xlinkHandlerPtr handler)
    +

    Set the default xlink handlers

    +
    handler:the new value for the xlink handler block
    +
    +
    +
    + + diff --git a/doc/devhelp/libxml2-xmlIO.html b/doc/devhelp/libxml2-xmlIO.html new file mode 100644 index 0000000..5bccc27 --- /dev/null +++ b/doc/devhelp/libxml2-xmlIO.html @@ -0,0 +1,347 @@ + + + + + xmlIO: interface for the I/O interfaces used by the parser + + + + + + + + + + + + + + + + +

    + xmlIO +

    +

    xmlIO - interface for the I/O interfaces used by the parser

    +

    interface for the I/O interfaces used by the parser

    +

    Author(s): Daniel Veillard

    +
    +

    Synopsis

    +
    int	xmlIOHTTPRead			(void * context, 
    char * buffer,
    int len); +typedef int xmlInputMatchCallback (char const * filename); +void xmlRegisterDefaultOutputCallbacks (void); +int xmlFileClose (void * context); +typedef int xmlOutputMatchCallback (char const * filename); +int xmlParserInputBufferPush (xmlParserInputBufferPtr in,
    int len,
    const char * buf); +int xmlIOFTPRead (void * context,
    char * buffer,
    int len); +void xmlRegisterHTTPPostCallbacks (void); +void * xmlIOFTPOpen (const char * filename); +int xmlIOFTPClose (void * context); +void * xmlFileOpen (const char * filename); +xmlOutputBufferPtr xmlOutputBufferCreateFile (FILE * file,
    xmlCharEncodingHandlerPtr encoder); +int xmlCheckFilename (const char * path); +typedef void * xmlOutputOpenCallback (char const * filename); +xmlParserInputBufferPtr xmlParserInputBufferCreateFilename (const char * URI,
    xmlCharEncoding enc); +int xmlOutputBufferClose (xmlOutputBufferPtr out); +xmlParserInputBufferPtr xmlAllocParserInputBuffer (xmlCharEncoding enc); +xmlOutputBufferPtr xmlOutputBufferCreateIO (xmlOutputWriteCallback iowrite,
    xmlOutputCloseCallback ioclose,
    void * ioctx,
    xmlCharEncodingHandlerPtr encoder); +typedef int xmlOutputWriteCallback (void * context,
    const char * buffer,
    int len); +int xmlOutputBufferFlush (xmlOutputBufferPtr out); +xmlParserInputPtr xmlCheckHTTPInput (xmlParserCtxtPtr ctxt,
    xmlParserInputPtr ret); +int xmlRegisterOutputCallbacks (xmlOutputMatchCallback matchFunc,
    xmlOutputOpenCallback openFunc,
    xmlOutputWriteCallback writeFunc,
    xmlOutputCloseCallback closeFunc); +xmlParserInputBufferPtr xmlParserInputBufferCreateMem (const char * mem,
    int size,
    xmlCharEncoding enc); +int xmlIOFTPMatch (const char * filename); +int xmlRegisterInputCallbacks (xmlInputMatchCallback matchFunc,
    xmlInputOpenCallback openFunc,
    xmlInputReadCallback readFunc,
    xmlInputCloseCallback closeFunc); +void xmlFreeParserInputBuffer (xmlParserInputBufferPtr in); +void xmlRegisterDefaultInputCallbacks (void); +int xmlParserInputBufferGrow (xmlParserInputBufferPtr in,
    int len); +typedef int xmlOutputCloseCallback (void * context); +xmlOutputBufferPtr xmlAllocOutputBuffer (xmlCharEncodingHandlerPtr encoder); +xmlParserInputPtr xmlNoNetExternalEntityLoader (const char * URL,
    const char * ID,
    xmlParserCtxtPtr ctxt); +xmlOutputBufferPtr xmlOutputBufferCreateBuffer (xmlBufferPtr buffer,
    xmlCharEncodingHandlerPtr encoder); +int xmlIOHTTPMatch (const char * filename); +void * xmlIOHTTPOpen (const char * filename); +xmlParserInputBufferPtr xmlParserInputBufferCreateIO (xmlInputReadCallback ioread,
    xmlInputCloseCallback ioclose,
    void * ioctx,
    xmlCharEncoding enc); +xmlOutputBufferPtr xmlOutputBufferCreateFd (int fd,
    xmlCharEncodingHandlerPtr encoder); +xmlChar * xmlNormalizeWindowsPath (const xmlChar * path); +typedef int xmlInputReadCallback (void * context,
    char * buffer,
    int len); +xmlParserInputBufferPtr xmlParserInputBufferCreateStatic (const char * mem,
    int size,
    xmlCharEncoding enc); +const xmlChar * xmlOutputBufferGetContent (xmlOutputBufferPtr out); +int xmlIOHTTPClose (void * context); +int xmlOutputBufferWriteEscape (xmlOutputBufferPtr out,
    const xmlChar * str,
    xmlCharEncodingOutputFunc escaping); +xmlOutputBufferPtr xmlOutputBufferCreateFilename (const char * URI,
    xmlCharEncodingHandlerPtr encoder,
    int compression); +size_t xmlOutputBufferGetSize (xmlOutputBufferPtr out); +void xmlCleanupOutputCallbacks (void); +typedef void * xmlInputOpenCallback (char const * filename); +int xmlParserInputBufferRead (xmlParserInputBufferPtr in,
    int len); +int xmlOutputBufferWriteString (xmlOutputBufferPtr out,
    const char * str); +int xmlFileMatch (const char * filename); +int xmlPopInputCallbacks (void); +int xmlFileRead (void * context,
    char * buffer,
    int len); +xmlParserInputBufferPtr xmlParserInputBufferCreateFile (FILE * file,
    xmlCharEncoding enc); +char * xmlParserGetDirectory (const char * filename); +int xmlOutputBufferWrite (xmlOutputBufferPtr out,
    int len,
    const char * buf); +void xmlCleanupInputCallbacks (void); +typedef int xmlInputCloseCallback (void * context); +void * xmlIOHTTPOpenW (const char * post_uri,
    int compression); +xmlParserInputBufferPtr xmlParserInputBufferCreateFd (int fd,
    xmlCharEncoding enc); +
    +
    +
    +

    Description

    +
    +
    +

    Details

    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +

    xmlAllocOutputBuffer ()

    xmlOutputBufferPtr	xmlAllocOutputBuffer	(xmlCharEncodingHandlerPtr encoder)
    +

    Create a buffered parser output

    +
    encoder:the encoding converter or NULL
    Returns:the new parser output or NULL
    +
    +

    xmlAllocParserInputBuffer ()

    xmlParserInputBufferPtr	xmlAllocParserInputBuffer	(xmlCharEncoding enc)
    +

    Create a buffered parser input for progressive parsing

    +
    enc:the charset encoding if known
    Returns:the new parser input or NULL
    +
    + +
    +

    xmlCheckHTTPInput ()

    xmlParserInputPtr	xmlCheckHTTPInput	(xmlParserCtxtPtr ctxt, 
    xmlParserInputPtr ret)
    +

    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

    +
    ctxt:an XML parser context
    ret:an XML parser input
    Returns:the input or NULL in case of HTTP error.
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +

    xmlFreeParserInputBuffer ()

    void	xmlFreeParserInputBuffer	(xmlParserInputBufferPtr in)
    +

    Free up the memory used by a buffered parser input

    +
    in:a buffered parser input
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +

    xmlNoNetExternalEntityLoader ()

    xmlParserInputPtr	xmlNoNetExternalEntityLoader	(const char * URL, 
    const char * ID,
    xmlParserCtxtPtr ctxt)
    +

    A specific entity loader disabling network accesses, though still allowing local catalog accesses for resolution.

    +
    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
    Returns:a new allocated xmlParserInputPtr, or NULL.
    +
    +

    xmlNormalizeWindowsPath ()

    xmlChar *	xmlNormalizeWindowsPath	(const xmlChar * path)
    +

    This function is obsolete. Please see xmlURIFromPath in uri.c for a better solution.

    +
    path:the input file path
    Returns:a canonicalized version of the path
    +
    +

    xmlOutputBufferClose ()

    int	xmlOutputBufferClose		(xmlOutputBufferPtr out)
    +

    flushes and close the output I/O channel and free up all the associated resources

    +
    out:a buffered output
    Returns:the number of byte written or -1 in case of error.
    +
    +

    xmlOutputBufferCreateBuffer ()

    xmlOutputBufferPtr	xmlOutputBufferCreateBuffer	(xmlBufferPtr buffer, 
    xmlCharEncodingHandlerPtr encoder)
    +

    Create a buffered output for the progressive saving to a xmlBuffer

    +
    buffer:a xmlBufferPtr
    encoder:the encoding converter or NULL
    Returns:the new parser output or NULL
    +
    +

    xmlOutputBufferCreateFd ()

    xmlOutputBufferPtr	xmlOutputBufferCreateFd	(int fd, 
    xmlCharEncodingHandlerPtr encoder)
    +

    Create a buffered output for the progressive saving to a file descriptor

    +
    fd:a file descriptor number
    encoder:the encoding converter or NULL
    Returns:the new parser output or NULL
    +
    +

    xmlOutputBufferCreateFile ()

    xmlOutputBufferPtr	xmlOutputBufferCreateFile	(FILE * file, 
    xmlCharEncodingHandlerPtr encoder)
    +

    Create a buffered output for the progressive saving to a FILE * buffered C I/O

    +
    file:a FILE*
    encoder:the encoding converter or NULL
    Returns:the new parser output or NULL
    +
    +

    xmlOutputBufferCreateFilename ()

    xmlOutputBufferPtr	xmlOutputBufferCreateFilename	(const char * URI, 
    xmlCharEncodingHandlerPtr encoder,
    int compression)
    +

    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.

    +
    URI:a C string containing the URI or filename
    encoder:the encoding converter or NULL
    compression:the compression ration (0 none, 9 max).
    Returns:the new output or NULL
    +
    +

    xmlOutputBufferCreateIO ()

    xmlOutputBufferPtr	xmlOutputBufferCreateIO	(xmlOutputWriteCallback iowrite, 
    xmlOutputCloseCallback ioclose,
    void * ioctx,
    xmlCharEncodingHandlerPtr encoder)
    +

    Create a buffered output for the progressive saving to an I/O handler

    +
    iowrite:an I/O write function
    ioclose:an I/O close function
    ioctx:an I/O handler
    encoder:the charset encoding if known
    Returns:the new parser output or NULL
    +
    +

    xmlOutputBufferFlush ()

    int	xmlOutputBufferFlush		(xmlOutputBufferPtr out)
    +

    flushes the output I/O channel

    +
    out:a buffered output
    Returns:the number of byte written or -1 in case of error.
    +
    +

    xmlOutputBufferGetContent ()

    const xmlChar *	xmlOutputBufferGetContent	(xmlOutputBufferPtr out)
    +

    Gives a pointer to the data currently held in the output buffer

    +
    out:an xmlOutputBufferPtr
    Returns:a pointer to the data or NULL in case of error
    +
    +

    xmlOutputBufferGetSize ()

    size_t	xmlOutputBufferGetSize		(xmlOutputBufferPtr out)
    +

    Gives the length of the data currently held in the output buffer

    +
    out:an xmlOutputBufferPtr
    Returns:0 in case or error or no data is held, the size otherwise
    +
    +

    xmlOutputBufferWrite ()

    int	xmlOutputBufferWrite		(xmlOutputBufferPtr out, 
    int len,
    const char * buf)
    +

    Write the content of the array in the output I/O buffer This routine handle the I18N transcoding from internal UTF-8 The buffer is lossless, i.e. will store in case of partial or delayed writes.

    +
    out:a buffered parser output
    len:the size in bytes of the array.
    buf:an char array
    Returns:the number of chars immediately written, or -1 in case of error.
    +
    +

    xmlOutputBufferWriteEscape ()

    int	xmlOutputBufferWriteEscape	(xmlOutputBufferPtr out, 
    const xmlChar * str,
    xmlCharEncodingOutputFunc escaping)
    +

    Write the content of the string in the output I/O buffer This routine escapes the caracters and then handle the I18N transcoding from internal UTF-8 The buffer is lossless, i.e. will store in case of partial or delayed writes.

    +
    out:a buffered parser output
    str:a zero terminated UTF-8 string
    escaping:an optional escaping function (or NULL)
    Returns:the number of chars immediately written, or -1 in case of error.
    +
    +

    xmlOutputBufferWriteString ()

    int	xmlOutputBufferWriteString	(xmlOutputBufferPtr out, 
    const char * str)
    +

    Write the content of the string in the output I/O buffer This routine handle the I18N transcoding from internal UTF-8 The buffer is lossless, i.e. will store in case of partial or delayed writes.

    +
    out:a buffered parser output
    str:a zero terminated C string
    Returns:the number of chars immediately written, or -1 in case of error.
    +
    + +
    +

    xmlParserInputBufferCreateFd ()

    xmlParserInputBufferPtr	xmlParserInputBufferCreateFd	(int fd, 
    xmlCharEncoding enc)
    +

    Create a buffered parser input for the progressive parsing for the input from a file descriptor

    +
    fd:a file descriptor number
    enc:the charset encoding if known
    Returns:the new parser input or NULL
    +
    +

    xmlParserInputBufferCreateFile ()

    xmlParserInputBufferPtr	xmlParserInputBufferCreateFile	(FILE * file, 
    xmlCharEncoding enc)
    +

    Create a buffered parser input for the progressive parsing of a FILE * buffered C I/O

    +
    file:a FILE*
    enc:the charset encoding if known
    Returns:the new parser input or NULL
    +
    +

    xmlParserInputBufferCreateFilename ()

    xmlParserInputBufferPtr	xmlParserInputBufferCreateFilename	(const char * URI, 
    xmlCharEncoding enc)
    +

    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

    +
    URI:a C string containing the URI or filename
    enc:the charset encoding if known
    Returns:the new parser input or NULL
    +
    +

    xmlParserInputBufferCreateIO ()

    xmlParserInputBufferPtr	xmlParserInputBufferCreateIO	(xmlInputReadCallback ioread, 
    xmlInputCloseCallback ioclose,
    void * ioctx,
    xmlCharEncoding enc)
    +

    Create a buffered parser input for the progressive parsing for the input from an I/O handler

    +
    ioread:an I/O read function
    ioclose:an I/O close function
    ioctx:an I/O handler
    enc:the charset encoding if known
    Returns:the new parser input or NULL
    +
    +

    xmlParserInputBufferCreateMem ()

    xmlParserInputBufferPtr	xmlParserInputBufferCreateMem	(const char * mem, 
    int size,
    xmlCharEncoding enc)
    +

    Create a buffered parser input for the progressive parsing for the input from a memory area.

    +
    mem:the memory input
    size:the length of the memory block
    enc:the charset encoding if known
    Returns:the new parser input or NULL
    +
    +

    xmlParserInputBufferCreateStatic ()

    xmlParserInputBufferPtr	xmlParserInputBufferCreateStatic	(const char * mem, 
    int size,
    xmlCharEncoding enc)
    +

    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.

    +
    mem:the memory input
    size:the length of the memory block
    enc:the charset encoding if known
    Returns:the new parser input or NULL
    +
    +

    xmlParserInputBufferGrow ()

    int	xmlParserInputBufferGrow	(xmlParserInputBufferPtr in, 
    int len)
    +

    Grow up the content of the input buffer, the old data are preserved This routine handle the I18N transcoding to internal UTF-8 This routine is used when operating the parser in normal (pull) mode TODO: one should be able to remove one extra copy by copying directly onto in->buffer or in->raw

    +
    in:a buffered parser input
    len:indicative value of the amount of chars to read
    Returns:the number of chars read and stored in the buffer, or -1 in case of error.
    +
    +

    xmlParserInputBufferPush ()

    int	xmlParserInputBufferPush	(xmlParserInputBufferPtr in, 
    int len,
    const char * buf)
    +

    Push the content of the arry in the input buffer This routine handle the I18N transcoding to internal UTF-8 This is used when operating the parser in progressive (push) mode.

    +
    in:a buffered parser input
    len:the size in bytes of the array.
    buf:an char array
    Returns:the number of chars read and stored in the buffer, or -1 in case of error.
    +
    +

    xmlParserInputBufferRead ()

    int	xmlParserInputBufferRead	(xmlParserInputBufferPtr in, 
    int len)
    +

    Refresh the content of the input buffer, the old data are considered consumed This routine handle the I18N transcoding to internal UTF-8

    +
    in:a buffered parser input
    len:indicative value of the amount of chars to read
    Returns:the number of chars read and stored in the buffer, or -1 in case of error.
    +
    + +
    +
    +
    +
    +
    +
    +
    +

    xmlRegisterInputCallbacks ()

    int	xmlRegisterInputCallbacks	(xmlInputMatchCallback matchFunc, 
    xmlInputOpenCallback openFunc,
    xmlInputReadCallback readFunc,
    xmlInputCloseCallback closeFunc)
    +

    Register a new set of I/O callback for handling parser input.

    +
    matchFunc:the xmlInputMatchCallback
    openFunc:the xmlInputOpenCallback
    readFunc:the xmlInputReadCallback
    closeFunc:the xmlInputCloseCallback
    Returns:the registered handler number or -1 in case of error
    +
    +

    xmlRegisterOutputCallbacks ()

    int	xmlRegisterOutputCallbacks	(xmlOutputMatchCallback matchFunc, 
    xmlOutputOpenCallback openFunc,
    xmlOutputWriteCallback writeFunc,
    xmlOutputCloseCallback closeFunc)
    +

    Register a new set of I/O callback for handling output.

    +
    matchFunc:the xmlOutputMatchCallback
    openFunc:the xmlOutputOpenCallback
    writeFunc:the xmlOutputWriteCallback
    closeFunc:the xmlOutputCloseCallback
    Returns:the registered handler number or -1 in case of error
    +
    +
    +
    + + diff --git a/doc/devhelp/libxml2-xmlautomata.html b/doc/devhelp/libxml2-xmlautomata.html new file mode 100644 index 0000000..d468442 --- /dev/null +++ b/doc/devhelp/libxml2-xmlautomata.html @@ -0,0 +1,176 @@ + + + + + xmlautomata: API to build regexp automata + + + + + + + + + + + + + + + + +

    + xmlautomata +

    +

    xmlautomata - API to build regexp automata

    +

    the API to build regexp automata

    +

    Author(s): Daniel Veillard

    +
    +

    Synopsis

    +
    typedef xmlAutomataState * xmlAutomataStatePtr;
    +typedef struct _xmlAutomata xmlAutomata;
    +typedef xmlAutomata * xmlAutomataPtr;
    +typedef struct _xmlAutomataState xmlAutomataState;
    +void	xmlFreeAutomata			(xmlAutomataPtr am);
    +int	xmlAutomataNewCounter		(xmlAutomataPtr am, 
    int min,
    int max); +xmlAutomataStatePtr xmlAutomataGetInitState (xmlAutomataPtr am); +xmlAutomataStatePtr xmlAutomataNewTransition2 (xmlAutomataPtr am,
    xmlAutomataStatePtr from,
    xmlAutomataStatePtr to,
    const xmlChar * token,
    const xmlChar * token2,
    void * data); +xmlAutomataStatePtr xmlAutomataNewState (xmlAutomataPtr am); +xmlAutomataStatePtr xmlAutomataNewCountTrans (xmlAutomataPtr am,
    xmlAutomataStatePtr from,
    xmlAutomataStatePtr to,
    const xmlChar * token,
    int min,
    int max,
    void * data); +xmlAutomataStatePtr xmlAutomataNewOnceTrans2 (xmlAutomataPtr am,
    xmlAutomataStatePtr from,
    xmlAutomataStatePtr to,
    const xmlChar * token,
    const xmlChar * token2,
    int min,
    int max,
    void * data); +xmlAutomataStatePtr xmlAutomataNewAllTrans (xmlAutomataPtr am,
    xmlAutomataStatePtr from,
    xmlAutomataStatePtr to,
    int lax); +xmlAutomataStatePtr xmlAutomataNewCountedTrans (xmlAutomataPtr am,
    xmlAutomataStatePtr from,
    xmlAutomataStatePtr to,
    int counter); +xmlAutomataStatePtr xmlAutomataNewCounterTrans (xmlAutomataPtr am,
    xmlAutomataStatePtr from,
    xmlAutomataStatePtr to,
    int counter); +xmlRegexpPtr xmlAutomataCompile (xmlAutomataPtr am); +xmlAutomataStatePtr xmlAutomataNewNegTrans (xmlAutomataPtr am,
    xmlAutomataStatePtr from,
    xmlAutomataStatePtr to,
    const xmlChar * token,
    const xmlChar * token2,
    void * data); +xmlAutomataStatePtr xmlAutomataNewEpsilon (xmlAutomataPtr am,
    xmlAutomataStatePtr from,
    xmlAutomataStatePtr to); +xmlAutomataStatePtr xmlAutomataNewCountTrans2 (xmlAutomataPtr am,
    xmlAutomataStatePtr from,
    xmlAutomataStatePtr to,
    const xmlChar * token,
    const xmlChar * token2,
    int min,
    int max,
    void * data); +xmlAutomataPtr xmlNewAutomata (void); +int xmlAutomataSetFinalState (xmlAutomataPtr am,
    xmlAutomataStatePtr state); +xmlAutomataStatePtr xmlAutomataNewOnceTrans (xmlAutomataPtr am,
    xmlAutomataStatePtr from,
    xmlAutomataStatePtr to,
    const xmlChar * token,
    int min,
    int max,
    void * data); +xmlAutomataStatePtr xmlAutomataNewTransition (xmlAutomataPtr am,
    xmlAutomataStatePtr from,
    xmlAutomataStatePtr to,
    const xmlChar * token,
    void * data); +int xmlAutomataIsDeterminist (xmlAutomataPtr am); +
    +
    +
    +

    Description

    +
    +
    +

    Details

    +
    +

    Structure xmlAutomata

    struct _xmlAutomata {
    +The content of this structure is not made public by the API.
    +} xmlAutomata;
    +

    +

    +
    +

    Typedef xmlAutomataPtr

    xmlAutomata * xmlAutomataPtr;
    +

    A libxml automata description, It can be compiled into a regexp

    +
    +
    +

    Structure xmlAutomataState

    struct _xmlAutomataState {
    +The content of this structure is not made public by the API.
    +} xmlAutomataState;
    +

    +

    +
    +

    Typedef xmlAutomataStatePtr

    xmlAutomataState * xmlAutomataStatePtr;
    +

    A state int the automata description,

    +
    +
    +

    xmlAutomataCompile ()

    xmlRegexpPtr	xmlAutomataCompile	(xmlAutomataPtr am)
    +

    Compile the automata into a Reg Exp ready for being executed. The automata should be free after this point.

    +
    am:an automata
    Returns:the compiled regexp or NULL in case of error
    +
    +

    xmlAutomataGetInitState ()

    xmlAutomataStatePtr	xmlAutomataGetInitState	(xmlAutomataPtr am)
    +

    Initial state lookup

    +
    am:an automata
    Returns:the initial state of the automata
    +
    +

    xmlAutomataIsDeterminist ()

    int	xmlAutomataIsDeterminist	(xmlAutomataPtr am)
    +

    Checks if an automata is determinist.

    +
    am:an automata
    Returns:1 if true, 0 if not, and -1 in case of error
    +
    +

    xmlAutomataNewAllTrans ()

    xmlAutomataStatePtr	xmlAutomataNewAllTrans	(xmlAutomataPtr am, 
    xmlAutomataStatePtr from,
    xmlAutomataStatePtr to,
    int lax)
    +

    If @to is NULL, this creates 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.

    +
    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
    Returns:the target state or NULL in case of error
    +
    +

    xmlAutomataNewCountTrans ()

    xmlAutomataStatePtr	xmlAutomataNewCountTrans	(xmlAutomataPtr am, 
    xmlAutomataStatePtr from,
    xmlAutomataStatePtr to,
    const xmlChar * token,
    int min,
    int max,
    void * data)
    +

    If @to is NULL, this creates first a new target state in the automata and then adds a transition from the @from state to the target state activated by a succession of input of value @token and whose number is between @min and @max

    +
    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
    Returns:the target state or NULL in case of error
    +
    +

    xmlAutomataNewCountTrans2 ()

    xmlAutomataStatePtr	xmlAutomataNewCountTrans2	(xmlAutomataPtr am, 
    xmlAutomataStatePtr from,
    xmlAutomataStatePtr to,
    const xmlChar * token,
    const xmlChar * token2,
    int min,
    int max,
    void * data)
    +

    If @to is NULL, this creates first a new target state in the automata and then adds a transition from the @from state to the target state activated by a succession of input of value @token and @token2 and whose number is between @min and @max

    +
    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
    token2:the second 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
    Returns:the target state or NULL in case of error
    +
    +

    xmlAutomataNewCountedTrans ()

    xmlAutomataStatePtr	xmlAutomataNewCountedTrans	(xmlAutomataPtr am, 
    xmlAutomataStatePtr from,
    xmlAutomataStatePtr to,
    int counter)
    +

    If @to is NULL, this creates first a new target state in the automata and then adds an epsilon transition from the @from state to the target state which will increment the counter provided

    +
    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
    Returns:the target state or NULL in case of error
    +
    +

    xmlAutomataNewCounter ()

    int	xmlAutomataNewCounter		(xmlAutomataPtr am, 
    int min,
    int max)
    +

    Create a new counter

    +
    am:an automata
    min:the minimal value on the counter
    max:the maximal value on the counter
    Returns:the counter number or -1 in case of error
    +
    +

    xmlAutomataNewCounterTrans ()

    xmlAutomataStatePtr	xmlAutomataNewCounterTrans	(xmlAutomataPtr am, 
    xmlAutomataStatePtr from,
    xmlAutomataStatePtr to,
    int counter)
    +

    If @to is NULL, this creates first a new target state in the automata and then adds an epsilon transition from the @from state to the target state which will be allowed only if the counter is within the right range.

    +
    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
    Returns:the target state or NULL in case of error
    +
    +

    xmlAutomataNewEpsilon ()

    xmlAutomataStatePtr	xmlAutomataNewEpsilon	(xmlAutomataPtr am, 
    xmlAutomataStatePtr from,
    xmlAutomataStatePtr to)
    +

    If @to is NULL, this creates first a new target state in the automata and then adds an epsilon transition from the @from state to the target state

    +
    am:an automata
    from:the starting point of the transition
    to:the target point of the transition or NULL
    Returns:the target state or NULL in case of error
    +
    +

    xmlAutomataNewNegTrans ()

    xmlAutomataStatePtr	xmlAutomataNewNegTrans	(xmlAutomataPtr am, 
    xmlAutomataStatePtr from,
    xmlAutomataStatePtr to,
    const xmlChar * token,
    const xmlChar * token2,
    void * data)
    +

    If @to is NULL, this creates first a new target state in the automata and then adds a transition from the @from state to the target state activated by any value except (@token,@token2) Note that if @token2 is not NULL, then (X, NULL) won't match to follow # the semantic of XSD ##other

    +
    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
    Returns:the target state or NULL in case of error
    +
    +

    xmlAutomataNewOnceTrans ()

    xmlAutomataStatePtr	xmlAutomataNewOnceTrans	(xmlAutomataPtr am, 
    xmlAutomataStatePtr from,
    xmlAutomataStatePtr to,
    const xmlChar * token,
    int min,
    int max,
    void * data)
    +

    If @to is NULL, this creates first a new target state in the automata and then adds a transition from the @from state to the target state activated by a succession of input of value @token and whose number is between @min and @max, moreover that transition can only be crossed once.

    +
    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
    Returns:the target state or NULL in case of error
    +
    +

    xmlAutomataNewOnceTrans2 ()

    xmlAutomataStatePtr	xmlAutomataNewOnceTrans2	(xmlAutomataPtr am, 
    xmlAutomataStatePtr from,
    xmlAutomataStatePtr to,
    const xmlChar * token,
    const xmlChar * token2,
    int min,
    int max,
    void * data)
    +

    If @to is NULL, this creates first a new target state in the automata and then adds a transition from the @from state to the target state activated by a succession of input of value @token and @token2 and whose number is between @min and @max, moreover that transition can only be crossed once.

    +
    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
    token2:the second 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
    Returns:the target state or NULL in case of error
    +
    +

    xmlAutomataNewState ()

    xmlAutomataStatePtr	xmlAutomataNewState	(xmlAutomataPtr am)
    +

    Create a new disconnected state in the automata

    +
    am:an automata
    Returns:the new state or NULL in case of error
    +
    +

    xmlAutomataNewTransition ()

    xmlAutomataStatePtr	xmlAutomataNewTransition	(xmlAutomataPtr am, 
    xmlAutomataStatePtr from,
    xmlAutomataStatePtr to,
    const xmlChar * token,
    void * data)
    +

    If @to is NULL, this creates first a new target state in the automata and then adds a transition from the @from state to the target state activated by the value of @token

    +
    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
    Returns:the target state or NULL in case of error
    +
    +

    xmlAutomataNewTransition2 ()

    xmlAutomataStatePtr	xmlAutomataNewTransition2	(xmlAutomataPtr am, 
    xmlAutomataStatePtr from,
    xmlAutomataStatePtr to,
    const xmlChar * token,
    const xmlChar * token2,
    void * data)
    +

    If @to is NULL, this creates first a new target state in the automata and then adds a transition from the @from state to the target state activated by the value of @token

    +
    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
    Returns:the target state or NULL in case of error
    +
    +

    xmlAutomataSetFinalState ()

    int	xmlAutomataSetFinalState	(xmlAutomataPtr am, 
    xmlAutomataStatePtr state)
    +

    Makes that state a final state

    +
    am:an automata
    state:a state in this automata
    Returns:0 or -1 in case of error
    +
    +

    xmlFreeAutomata ()

    void	xmlFreeAutomata			(xmlAutomataPtr am)
    +

    Free an automata

    +
    am:an automata
    +
    +

    xmlNewAutomata ()

    xmlAutomataPtr	xmlNewAutomata		(void)
    +

    Create a new automata

    +
    Returns:the new object or NULL in case of failure
    +
    +
    +
    + + diff --git a/doc/devhelp/libxml2-xmlerror.html b/doc/devhelp/libxml2-xmlerror.html new file mode 100644 index 0000000..13bab8a --- /dev/null +++ b/doc/devhelp/libxml2-xmlerror.html @@ -0,0 +1,953 @@ + + + + + xmlerror: error handling + + + + + + + + + + + + + + + + +

    + xmlerror +

    +

    xmlerror - error handling

    +

    the API used to report errors

    +

    Author(s): Daniel Veillard

    +
    +

    Synopsis

    +
    typedef xmlError * xmlErrorPtr;
    +typedef enum xmlErrorLevel;
    +typedef enum xmlParserErrors;
    +typedef enum xmlErrorDomain;
    +typedef struct _xmlError xmlError;
    +void	xmlParserValidityError		(void * ctx, 
    const char * msg,
    ... ...); +typedef void xmlGenericErrorFunc (void * ctx,
    const char * msg,
    ... ...); +void xmlSetGenericErrorFunc (void * ctx,
    xmlGenericErrorFunc handler); +void xmlParserPrintFileInfo (xmlParserInputPtr input); +void xmlCtxtResetLastError (void * ctx); +void xmlResetLastError (void); +void initGenericErrorDefaultFunc (xmlGenericErrorFunc * handler); +int xmlCopyError (xmlErrorPtr from,
    xmlErrorPtr to); +void xmlParserValidityWarning (void * ctx,
    const char * msg,
    ... ...); +void xmlParserPrintFileContext (xmlParserInputPtr input); +void xmlParserError (void * ctx,
    const char * msg,
    ... ...); +void xmlParserWarning (void * ctx,
    const char * msg,
    ... ...); +typedef void xmlStructuredErrorFunc (void * userData,
    xmlErrorPtr error); +void xmlSetStructuredErrorFunc (void * ctx,
    xmlStructuredErrorFunc handler); +void xmlResetError (xmlErrorPtr err); +xmlErrorPtr xmlGetLastError (void); +xmlErrorPtr xmlCtxtGetLastError (void * ctx); +
    +
    +
    +

    Description

    +
    +
    +

    Details

    +
    +

    Structure xmlError

    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	: error column # or 0 if N/A (todo: rename field when we would brk ABI)
    +    void *	ctxt	: the parser context if available
    +    void *	node	: the node in the tree
    +} xmlError;
    +

    +

    +
    +

    Enum xmlErrorDomain

    enum xmlErrorDomain {
    +    XML_FROM_NONE = 0
    +    XML_FROM_PARSER = 1 /* The XML parser */
    +    XML_FROM_TREE = 2 /* The tree module */
    +    XML_FROM_NAMESPACE = 3 /* The XML Namespace module */
    +    XML_FROM_DTD = 4 /* The XML DTD validation with parser contex */
    +    XML_FROM_HTML = 5 /* The HTML parser */
    +    XML_FROM_MEMORY = 6 /* The memory allocator */
    +    XML_FROM_OUTPUT = 7 /* The serialization code */
    +    XML_FROM_IO = 8 /* The Input/Output stack */
    +    XML_FROM_FTP = 9 /* The FTP module */
    +    XML_FROM_HTTP = 10 /* The HTTP module */
    +    XML_FROM_XINCLUDE = 11 /* The XInclude processing */
    +    XML_FROM_XPATH = 12 /* The XPath module */
    +    XML_FROM_XPOINTER = 13 /* The XPointer module */
    +    XML_FROM_REGEXP = 14 /* The regular expressions module */
    +    XML_FROM_DATATYPE = 15 /* The W3C XML Schemas Datatype module */
    +    XML_FROM_SCHEMASP = 16 /* The W3C XML Schemas parser module */
    +    XML_FROM_SCHEMASV = 17 /* The W3C XML Schemas validation module */
    +    XML_FROM_RELAXNGP = 18 /* The Relax-NG parser module */
    +    XML_FROM_RELAXNGV = 19 /* The Relax-NG validator module */
    +    XML_FROM_CATALOG = 20 /* The Catalog module */
    +    XML_FROM_C14N = 21 /* The Canonicalization module */
    +    XML_FROM_XSLT = 22 /* The XSLT engine from libxslt */
    +    XML_FROM_VALID = 23 /* The XML DTD validation with valid context */
    +    XML_FROM_CHECK = 24 /* The error checking module */
    +    XML_FROM_WRITER = 25 /* The xmlwriter module */
    +    XML_FROM_MODULE = 26 /* The dynamically loaded module modul */
    +    XML_FROM_I18N = 27 /* The module handling character conversion */
    +    XML_FROM_SCHEMATRONV = 28 /* The Schematron validator module */
    +    XML_FROM_BUFFER = 29 /* The buffers module */
    +    XML_FROM_URI = 30 /*  The URI module */
    +};
    +

    +

    +
    +

    Enum xmlErrorLevel

    enum xmlErrorLevel {
    +    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 */
    +};
    +

    +

    +
    +

    Typedef xmlErrorPtr

    xmlError * xmlErrorPtr;
    +

    +

    +
    +

    Enum xmlParserErrors

    enum xmlParserErrors {
    +    XML_ERR_OK = 0
    +    XML_ERR_INTERNAL_ERROR = 1 /* 1 */
    +    XML_ERR_NO_MEMORY = 2 /* 2 */
    +    XML_ERR_DOCUMENT_START = 3 /* 3 */
    +    XML_ERR_DOCUMENT_EMPTY = 4 /* 4 */
    +    XML_ERR_DOCUMENT_END = 5 /* 5 */
    +    XML_ERR_INVALID_HEX_CHARREF = 6 /* 6 */
    +    XML_ERR_INVALID_DEC_CHARREF = 7 /* 7 */
    +    XML_ERR_INVALID_CHARREF = 8 /* 8 */
    +    XML_ERR_INVALID_CHAR = 9 /* 9 */
    +    XML_ERR_CHARREF_AT_EOF = 10 /* 10 */
    +    XML_ERR_CHARREF_IN_PROLOG = 11 /* 11 */
    +    XML_ERR_CHARREF_IN_EPILOG = 12 /* 12 */
    +    XML_ERR_CHARREF_IN_DTD = 13 /* 13 */
    +    XML_ERR_ENTITYREF_AT_EOF = 14 /* 14 */
    +    XML_ERR_ENTITYREF_IN_PROLOG = 15 /* 15 */
    +    XML_ERR_ENTITYREF_IN_EPILOG = 16 /* 16 */
    +    XML_ERR_ENTITYREF_IN_DTD = 17 /* 17 */
    +    XML_ERR_PEREF_AT_EOF = 18 /* 18 */
    +    XML_ERR_PEREF_IN_PROLOG = 19 /* 19 */
    +    XML_ERR_PEREF_IN_EPILOG = 20 /* 20 */
    +    XML_ERR_PEREF_IN_INT_SUBSET = 21 /* 21 */
    +    XML_ERR_ENTITYREF_NO_NAME = 22 /* 22 */
    +    XML_ERR_ENTITYREF_SEMICOL_MISSING = 23 /* 23 */
    +    XML_ERR_PEREF_NO_NAME = 24 /* 24 */
    +    XML_ERR_PEREF_SEMICOL_MISSING = 25 /* 25 */
    +    XML_ERR_UNDECLARED_ENTITY = 26 /* 26 */
    +    XML_WAR_UNDECLARED_ENTITY = 27 /* 27 */
    +    XML_ERR_UNPARSED_ENTITY = 28 /* 28 */
    +    XML_ERR_ENTITY_IS_EXTERNAL = 29 /* 29 */
    +    XML_ERR_ENTITY_IS_PARAMETER = 30 /* 30 */
    +    XML_ERR_UNKNOWN_ENCODING = 31 /* 31 */
    +    XML_ERR_UNSUPPORTED_ENCODING = 32 /* 32 */
    +    XML_ERR_STRING_NOT_STARTED = 33 /* 33 */
    +    XML_ERR_STRING_NOT_CLOSED = 34 /* 34 */
    +    XML_ERR_NS_DECL_ERROR = 35 /* 35 */
    +    XML_ERR_ENTITY_NOT_STARTED = 36 /* 36 */
    +    XML_ERR_ENTITY_NOT_FINISHED = 37 /* 37 */
    +    XML_ERR_LT_IN_ATTRIBUTE = 38 /* 38 */
    +    XML_ERR_ATTRIBUTE_NOT_STARTED = 39 /* 39 */
    +    XML_ERR_ATTRIBUTE_NOT_FINISHED = 40 /* 40 */
    +    XML_ERR_ATTRIBUTE_WITHOUT_VALUE = 41 /* 41 */
    +    XML_ERR_ATTRIBUTE_REDEFINED = 42 /* 42 */
    +    XML_ERR_LITERAL_NOT_STARTED = 43 /* 43 */
    +    XML_ERR_LITERAL_NOT_FINISHED = 44 /* 44 */
    +    XML_ERR_COMMENT_NOT_FINISHED = 45 /* 45 */
    +    XML_ERR_PI_NOT_STARTED = 46 /* 46 */
    +    XML_ERR_PI_NOT_FINISHED = 47 /* 47 */
    +    XML_ERR_NOTATION_NOT_STARTED = 48 /* 48 */
    +    XML_ERR_NOTATION_NOT_FINISHED = 49 /* 49 */
    +    XML_ERR_ATTLIST_NOT_STARTED = 50 /* 50 */
    +    XML_ERR_ATTLIST_NOT_FINISHED = 51 /* 51 */
    +    XML_ERR_MIXED_NOT_STARTED = 52 /* 52 */
    +    XML_ERR_MIXED_NOT_FINISHED = 53 /* 53 */
    +    XML_ERR_ELEMCONTENT_NOT_STARTED = 54 /* 54 */
    +    XML_ERR_ELEMCONTENT_NOT_FINISHED = 55 /* 55 */
    +    XML_ERR_XMLDECL_NOT_STARTED = 56 /* 56 */
    +    XML_ERR_XMLDECL_NOT_FINISHED = 57 /* 57 */
    +    XML_ERR_CONDSEC_NOT_STARTED = 58 /* 58 */
    +    XML_ERR_CONDSEC_NOT_FINISHED = 59 /* 59 */
    +    XML_ERR_EXT_SUBSET_NOT_FINISHED = 60 /* 60 */
    +    XML_ERR_DOCTYPE_NOT_FINISHED = 61 /* 61 */
    +    XML_ERR_MISPLACED_CDATA_END = 62 /* 62 */
    +    XML_ERR_CDATA_NOT_FINISHED = 63 /* 63 */
    +    XML_ERR_RESERVED_XML_NAME = 64 /* 64 */
    +    XML_ERR_SPACE_REQUIRED = 65 /* 65 */
    +    XML_ERR_SEPARATOR_REQUIRED = 66 /* 66 */
    +    XML_ERR_NMTOKEN_REQUIRED = 67 /* 67 */
    +    XML_ERR_NAME_REQUIRED = 68 /* 68 */
    +    XML_ERR_PCDATA_REQUIRED = 69 /* 69 */
    +    XML_ERR_URI_REQUIRED = 70 /* 70 */
    +    XML_ERR_PUBID_REQUIRED = 71 /* 71 */
    +    XML_ERR_LT_REQUIRED = 72 /* 72 */
    +    XML_ERR_GT_REQUIRED = 73 /* 73 */
    +    XML_ERR_LTSLASH_REQUIRED = 74 /* 74 */
    +    XML_ERR_EQUAL_REQUIRED = 75 /* 75 */
    +    XML_ERR_TAG_NAME_MISMATCH = 76 /* 76 */
    +    XML_ERR_TAG_NOT_FINISHED = 77 /* 77 */
    +    XML_ERR_STANDALONE_VALUE = 78 /* 78 */
    +    XML_ERR_ENCODING_NAME = 79 /* 79 */
    +    XML_ERR_HYPHEN_IN_COMMENT = 80 /* 80 */
    +    XML_ERR_INVALID_ENCODING = 81 /* 81 */
    +    XML_ERR_EXT_ENTITY_STANDALONE = 82 /* 82 */
    +    XML_ERR_CONDSEC_INVALID = 83 /* 83 */
    +    XML_ERR_VALUE_REQUIRED = 84 /* 84 */
    +    XML_ERR_NOT_WELL_BALANCED = 85 /* 85 */
    +    XML_ERR_EXTRA_CONTENT = 86 /* 86 */
    +    XML_ERR_ENTITY_CHAR_ERROR = 87 /* 87 */
    +    XML_ERR_ENTITY_PE_INTERNAL = 88 /* 88 */
    +    XML_ERR_ENTITY_LOOP = 89 /* 89 */
    +    XML_ERR_ENTITY_BOUNDARY = 90 /* 90 */
    +    XML_ERR_INVALID_URI = 91 /* 91 */
    +    XML_ERR_URI_FRAGMENT = 92 /* 92 */
    +    XML_WAR_CATALOG_PI = 93 /* 93 */
    +    XML_ERR_NO_DTD = 94 /* 94 */
    +    XML_ERR_CONDSEC_INVALID_KEYWORD = 95 /* 95 */
    +    XML_ERR_VERSION_MISSING = 96 /* 96 */
    +    XML_WAR_UNKNOWN_VERSION = 97 /* 97 */
    +    XML_WAR_LANG_VALUE = 98 /* 98 */
    +    XML_WAR_NS_URI = 99 /* 99 */
    +    XML_WAR_NS_URI_RELATIVE = 100 /* 100 */
    +    XML_ERR_MISSING_ENCODING = 101 /* 101 */
    +    XML_WAR_SPACE_VALUE = 102 /* 102 */
    +    XML_ERR_NOT_STANDALONE = 103 /* 103 */
    +    XML_ERR_ENTITY_PROCESSING = 104 /* 104 */
    +    XML_ERR_NOTATION_PROCESSING = 105 /* 105 */
    +    XML_WAR_NS_COLUMN = 106 /* 106 */
    +    XML_WAR_ENTITY_REDEFINED = 107 /* 107 */
    +    XML_ERR_UNKNOWN_VERSION = 108 /* 108 */
    +    XML_ERR_VERSION_MISMATCH = 109 /* 109 */
    +    XML_ERR_NAME_TOO_LONG = 110 /* 110 */
    +    XML_ERR_USER_STOP = 111 /* 111 */
    +    XML_NS_ERR_XML_NAMESPACE = 200
    +    XML_NS_ERR_UNDEFINED_NAMESPACE = 201 /* 201 */
    +    XML_NS_ERR_QNAME = 202 /* 202 */
    +    XML_NS_ERR_ATTRIBUTE_REDEFINED = 203 /* 203 */
    +    XML_NS_ERR_EMPTY = 204 /* 204 */
    +    XML_NS_ERR_COLON = 205 /* 205 */
    +    XML_DTD_ATTRIBUTE_DEFAULT = 500
    +    XML_DTD_ATTRIBUTE_REDEFINED = 501 /* 501 */
    +    XML_DTD_ATTRIBUTE_VALUE = 502 /* 502 */
    +    XML_DTD_CONTENT_ERROR = 503 /* 503 */
    +    XML_DTD_CONTENT_MODEL = 504 /* 504 */
    +    XML_DTD_CONTENT_NOT_DETERMINIST = 505 /* 505 */
    +    XML_DTD_DIFFERENT_PREFIX = 506 /* 506 */
    +    XML_DTD_ELEM_DEFAULT_NAMESPACE = 507 /* 507 */
    +    XML_DTD_ELEM_NAMESPACE = 508 /* 508 */
    +    XML_DTD_ELEM_REDEFINED = 509 /* 509 */
    +    XML_DTD_EMPTY_NOTATION = 510 /* 510 */
    +    XML_DTD_ENTITY_TYPE = 511 /* 511 */
    +    XML_DTD_ID_FIXED = 512 /* 512 */
    +    XML_DTD_ID_REDEFINED = 513 /* 513 */
    +    XML_DTD_ID_SUBSET = 514 /* 514 */
    +    XML_DTD_INVALID_CHILD = 515 /* 515 */
    +    XML_DTD_INVALID_DEFAULT = 516 /* 516 */
    +    XML_DTD_LOAD_ERROR = 517 /* 517 */
    +    XML_DTD_MISSING_ATTRIBUTE = 518 /* 518 */
    +    XML_DTD_MIXED_CORRUPT = 519 /* 519 */
    +    XML_DTD_MULTIPLE_ID = 520 /* 520 */
    +    XML_DTD_NO_DOC = 521 /* 521 */
    +    XML_DTD_NO_DTD = 522 /* 522 */
    +    XML_DTD_NO_ELEM_NAME = 523 /* 523 */
    +    XML_DTD_NO_PREFIX = 524 /* 524 */
    +    XML_DTD_NO_ROOT = 525 /* 525 */
    +    XML_DTD_NOTATION_REDEFINED = 526 /* 526 */
    +    XML_DTD_NOTATION_VALUE = 527 /* 527 */
    +    XML_DTD_NOT_EMPTY = 528 /* 528 */
    +    XML_DTD_NOT_PCDATA = 529 /* 529 */
    +    XML_DTD_NOT_STANDALONE = 530 /* 530 */
    +    XML_DTD_ROOT_NAME = 531 /* 531 */
    +    XML_DTD_STANDALONE_WHITE_SPACE = 532 /* 532 */
    +    XML_DTD_UNKNOWN_ATTRIBUTE = 533 /* 533 */
    +    XML_DTD_UNKNOWN_ELEM = 534 /* 534 */
    +    XML_DTD_UNKNOWN_ENTITY = 535 /* 535 */
    +    XML_DTD_UNKNOWN_ID = 536 /* 536 */
    +    XML_DTD_UNKNOWN_NOTATION = 537 /* 537 */
    +    XML_DTD_STANDALONE_DEFAULTED = 538 /* 538 */
    +    XML_DTD_XMLID_VALUE = 539 /* 539 */
    +    XML_DTD_XMLID_TYPE = 540 /* 540 */
    +    XML_DTD_DUP_TOKEN = 541 /* 541 */
    +    XML_HTML_STRUCURE_ERROR = 800
    +    XML_HTML_UNKNOWN_TAG = 801 /* 801 */
    +    XML_RNGP_ANYNAME_ATTR_ANCESTOR = 1000
    +    XML_RNGP_ATTR_CONFLICT = 1001 /* 1001 */
    +    XML_RNGP_ATTRIBUTE_CHILDREN = 1002 /* 1002 */
    +    XML_RNGP_ATTRIBUTE_CONTENT = 1003 /* 1003 */
    +    XML_RNGP_ATTRIBUTE_EMPTY = 1004 /* 1004 */
    +    XML_RNGP_ATTRIBUTE_NOOP = 1005 /* 1005 */
    +    XML_RNGP_CHOICE_CONTENT = 1006 /* 1006 */
    +    XML_RNGP_CHOICE_EMPTY = 1007 /* 1007 */
    +    XML_RNGP_CREATE_FAILURE = 1008 /* 1008 */
    +    XML_RNGP_DATA_CONTENT = 1009 /* 1009 */
    +    XML_RNGP_DEF_CHOICE_AND_INTERLEAVE = 1010 /* 1010 */
    +    XML_RNGP_DEFINE_CREATE_FAILED = 1011 /* 1011 */
    +    XML_RNGP_DEFINE_EMPTY = 1012 /* 1012 */
    +    XML_RNGP_DEFINE_MISSING = 1013 /* 1013 */
    +    XML_RNGP_DEFINE_NAME_MISSING = 1014 /* 1014 */
    +    XML_RNGP_ELEM_CONTENT_EMPTY = 1015 /* 1015 */
    +    XML_RNGP_ELEM_CONTENT_ERROR = 1016 /* 1016 */
    +    XML_RNGP_ELEMENT_EMPTY = 1017 /* 1017 */
    +    XML_RNGP_ELEMENT_CONTENT = 1018 /* 1018 */
    +    XML_RNGP_ELEMENT_NAME = 1019 /* 1019 */
    +    XML_RNGP_ELEMENT_NO_CONTENT = 1020 /* 1020 */
    +    XML_RNGP_ELEM_TEXT_CONFLICT = 1021 /* 1021 */
    +    XML_RNGP_EMPTY = 1022 /* 1022 */
    +    XML_RNGP_EMPTY_CONSTRUCT = 1023 /* 1023 */
    +    XML_RNGP_EMPTY_CONTENT = 1024 /* 1024 */
    +    XML_RNGP_EMPTY_NOT_EMPTY = 1025 /* 1025 */
    +    XML_RNGP_ERROR_TYPE_LIB = 1026 /* 1026 */
    +    XML_RNGP_EXCEPT_EMPTY = 1027 /* 1027 */
    +    XML_RNGP_EXCEPT_MISSING = 1028 /* 1028 */
    +    XML_RNGP_EXCEPT_MULTIPLE = 1029 /* 1029 */
    +    XML_RNGP_EXCEPT_NO_CONTENT = 1030 /* 1030 */
    +    XML_RNGP_EXTERNALREF_EMTPY = 1031 /* 1031 */
    +    XML_RNGP_EXTERNAL_REF_FAILURE = 1032 /* 1032 */
    +    XML_RNGP_EXTERNALREF_RECURSE = 1033 /* 1033 */
    +    XML_RNGP_FORBIDDEN_ATTRIBUTE = 1034 /* 1034 */
    +    XML_RNGP_FOREIGN_ELEMENT = 1035 /* 1035 */
    +    XML_RNGP_GRAMMAR_CONTENT = 1036 /* 1036 */
    +    XML_RNGP_GRAMMAR_EMPTY = 1037 /* 1037 */
    +    XML_RNGP_GRAMMAR_MISSING = 1038 /* 1038 */
    +    XML_RNGP_GRAMMAR_NO_START = 1039 /* 1039 */
    +    XML_RNGP_GROUP_ATTR_CONFLICT = 1040 /* 1040 */
    +    XML_RNGP_HREF_ERROR = 1041 /* 1041 */
    +    XML_RNGP_INCLUDE_EMPTY = 1042 /* 1042 */
    +    XML_RNGP_INCLUDE_FAILURE = 1043 /* 1043 */
    +    XML_RNGP_INCLUDE_RECURSE = 1044 /* 1044 */
    +    XML_RNGP_INTERLEAVE_ADD = 1045 /* 1045 */
    +    XML_RNGP_INTERLEAVE_CREATE_FAILED = 1046 /* 1046 */
    +    XML_RNGP_INTERLEAVE_EMPTY = 1047 /* 1047 */
    +    XML_RNGP_INTERLEAVE_NO_CONTENT = 1048 /* 1048 */
    +    XML_RNGP_INVALID_DEFINE_NAME = 1049 /* 1049 */
    +    XML_RNGP_INVALID_URI = 1050 /* 1050 */
    +    XML_RNGP_INVALID_VALUE = 1051 /* 1051 */
    +    XML_RNGP_MISSING_HREF = 1052 /* 1052 */
    +    XML_RNGP_NAME_MISSING = 1053 /* 1053 */
    +    XML_RNGP_NEED_COMBINE = 1054 /* 1054 */
    +    XML_RNGP_NOTALLOWED_NOT_EMPTY = 1055 /* 1055 */
    +    XML_RNGP_NSNAME_ATTR_ANCESTOR = 1056 /* 1056 */
    +    XML_RNGP_NSNAME_NO_NS = 1057 /* 1057 */
    +    XML_RNGP_PARAM_FORBIDDEN = 1058 /* 1058 */
    +    XML_RNGP_PARAM_NAME_MISSING = 1059 /* 1059 */
    +    XML_RNGP_PARENTREF_CREATE_FAILED = 1060 /* 1060 */
    +    XML_RNGP_PARENTREF_NAME_INVALID = 1061 /* 1061 */
    +    XML_RNGP_PARENTREF_NO_NAME = 1062 /* 1062 */
    +    XML_RNGP_PARENTREF_NO_PARENT = 1063 /* 1063 */
    +    XML_RNGP_PARENTREF_NOT_EMPTY = 1064 /* 1064 */
    +    XML_RNGP_PARSE_ERROR = 1065 /* 1065 */
    +    XML_RNGP_PAT_ANYNAME_EXCEPT_ANYNAME = 1066 /* 1066 */
    +    XML_RNGP_PAT_ATTR_ATTR = 1067 /* 1067 */
    +    XML_RNGP_PAT_ATTR_ELEM = 1068 /* 1068 */
    +    XML_RNGP_PAT_DATA_EXCEPT_ATTR = 1069 /* 1069 */
    +    XML_RNGP_PAT_DATA_EXCEPT_ELEM = 1070 /* 1070 */
    +    XML_RNGP_PAT_DATA_EXCEPT_EMPTY = 1071 /* 1071 */
    +    XML_RNGP_PAT_DATA_EXCEPT_GROUP = 1072 /* 1072 */
    +    XML_RNGP_PAT_DATA_EXCEPT_INTERLEAVE = 1073 /* 1073 */
    +    XML_RNGP_PAT_DATA_EXCEPT_LIST = 1074 /* 1074 */
    +    XML_RNGP_PAT_DATA_EXCEPT_ONEMORE = 1075 /* 1075 */
    +    XML_RNGP_PAT_DATA_EXCEPT_REF = 1076 /* 1076 */
    +    XML_RNGP_PAT_DATA_EXCEPT_TEXT = 1077 /* 1077 */
    +    XML_RNGP_PAT_LIST_ATTR = 1078 /* 1078 */
    +    XML_RNGP_PAT_LIST_ELEM = 1079 /* 1079 */
    +    XML_RNGP_PAT_LIST_INTERLEAVE = 1080 /* 1080 */
    +    XML_RNGP_PAT_LIST_LIST = 1081 /* 1081 */
    +    XML_RNGP_PAT_LIST_REF = 1082 /* 1082 */
    +    XML_RNGP_PAT_LIST_TEXT = 1083 /* 1083 */
    +    XML_RNGP_PAT_NSNAME_EXCEPT_ANYNAME = 1084 /* 1084 */
    +    XML_RNGP_PAT_NSNAME_EXCEPT_NSNAME = 1085 /* 1085 */
    +    XML_RNGP_PAT_ONEMORE_GROUP_ATTR = 1086 /* 1086 */
    +    XML_RNGP_PAT_ONEMORE_INTERLEAVE_ATTR = 1087 /* 1087 */
    +    XML_RNGP_PAT_START_ATTR = 1088 /* 1088 */
    +    XML_RNGP_PAT_START_DATA = 1089 /* 1089 */
    +    XML_RNGP_PAT_START_EMPTY = 1090 /* 1090 */
    +    XML_RNGP_PAT_START_GROUP = 1091 /* 1091 */
    +    XML_RNGP_PAT_START_INTERLEAVE = 1092 /* 1092 */
    +    XML_RNGP_PAT_START_LIST = 1093 /* 1093 */
    +    XML_RNGP_PAT_START_ONEMORE = 1094 /* 1094 */
    +    XML_RNGP_PAT_START_TEXT = 1095 /* 1095 */
    +    XML_RNGP_PAT_START_VALUE = 1096 /* 1096 */
    +    XML_RNGP_PREFIX_UNDEFINED = 1097 /* 1097 */
    +    XML_RNGP_REF_CREATE_FAILED = 1098 /* 1098 */
    +    XML_RNGP_REF_CYCLE = 1099 /* 1099 */
    +    XML_RNGP_REF_NAME_INVALID = 1100 /* 1100 */
    +    XML_RNGP_REF_NO_DEF = 1101 /* 1101 */
    +    XML_RNGP_REF_NO_NAME = 1102 /* 1102 */
    +    XML_RNGP_REF_NOT_EMPTY = 1103 /* 1103 */
    +    XML_RNGP_START_CHOICE_AND_INTERLEAVE = 1104 /* 1104 */
    +    XML_RNGP_START_CONTENT = 1105 /* 1105 */
    +    XML_RNGP_START_EMPTY = 1106 /* 1106 */
    +    XML_RNGP_START_MISSING = 1107 /* 1107 */
    +    XML_RNGP_TEXT_EXPECTED = 1108 /* 1108 */
    +    XML_RNGP_TEXT_HAS_CHILD = 1109 /* 1109 */
    +    XML_RNGP_TYPE_MISSING = 1110 /* 1110 */
    +    XML_RNGP_TYPE_NOT_FOUND = 1111 /* 1111 */
    +    XML_RNGP_TYPE_VALUE = 1112 /* 1112 */
    +    XML_RNGP_UNKNOWN_ATTRIBUTE = 1113 /* 1113 */
    +    XML_RNGP_UNKNOWN_COMBINE = 1114 /* 1114 */
    +    XML_RNGP_UNKNOWN_CONSTRUCT = 1115 /* 1115 */
    +    XML_RNGP_UNKNOWN_TYPE_LIB = 1116 /* 1116 */
    +    XML_RNGP_URI_FRAGMENT = 1117 /* 1117 */
    +    XML_RNGP_URI_NOT_ABSOLUTE = 1118 /* 1118 */
    +    XML_RNGP_VALUE_EMPTY = 1119 /* 1119 */
    +    XML_RNGP_VALUE_NO_CONTENT = 1120 /* 1120 */
    +    XML_RNGP_XMLNS_NAME = 1121 /* 1121 */
    +    XML_RNGP_XML_NS = 1122 /* 1122 */
    +    XML_XPATH_EXPRESSION_OK = 1200
    +    XML_XPATH_NUMBER_ERROR = 1201 /* 1201 */
    +    XML_XPATH_UNFINISHED_LITERAL_ERROR = 1202 /* 1202 */
    +    XML_XPATH_START_LITERAL_ERROR = 1203 /* 1203 */
    +    XML_XPATH_VARIABLE_REF_ERROR = 1204 /* 1204 */
    +    XML_XPATH_UNDEF_VARIABLE_ERROR = 1205 /* 1205 */
    +    XML_XPATH_INVALID_PREDICATE_ERROR = 1206 /* 1206 */
    +    XML_XPATH_EXPR_ERROR = 1207 /* 1207 */
    +    XML_XPATH_UNCLOSED_ERROR = 1208 /* 1208 */
    +    XML_XPATH_UNKNOWN_FUNC_ERROR = 1209 /* 1209 */
    +    XML_XPATH_INVALID_OPERAND = 1210 /* 1210 */
    +    XML_XPATH_INVALID_TYPE = 1211 /* 1211 */
    +    XML_XPATH_INVALID_ARITY = 1212 /* 1212 */
    +    XML_XPATH_INVALID_CTXT_SIZE = 1213 /* 1213 */
    +    XML_XPATH_INVALID_CTXT_POSITION = 1214 /* 1214 */
    +    XML_XPATH_MEMORY_ERROR = 1215 /* 1215 */
    +    XML_XPTR_SYNTAX_ERROR = 1216 /* 1216 */
    +    XML_XPTR_RESOURCE_ERROR = 1217 /* 1217 */
    +    XML_XPTR_SUB_RESOURCE_ERROR = 1218 /* 1218 */
    +    XML_XPATH_UNDEF_PREFIX_ERROR = 1219 /* 1219 */
    +    XML_XPATH_ENCODING_ERROR = 1220 /* 1220 */
    +    XML_XPATH_INVALID_CHAR_ERROR = 1221 /* 1221 */
    +    XML_TREE_INVALID_HEX = 1300
    +    XML_TREE_INVALID_DEC = 1301 /* 1301 */
    +    XML_TREE_UNTERMINATED_ENTITY = 1302 /* 1302 */
    +    XML_TREE_NOT_UTF8 = 1303 /* 1303 */
    +    XML_SAVE_NOT_UTF8 = 1400
    +    XML_SAVE_CHAR_INVALID = 1401 /* 1401 */
    +    XML_SAVE_NO_DOCTYPE = 1402 /* 1402 */
    +    XML_SAVE_UNKNOWN_ENCODING = 1403 /* 1403 */
    +    XML_REGEXP_COMPILE_ERROR = 1450
    +    XML_IO_UNKNOWN = 1500
    +    XML_IO_EACCES = 1501 /* 1501 */
    +    XML_IO_EAGAIN = 1502 /* 1502 */
    +    XML_IO_EBADF = 1503 /* 1503 */
    +    XML_IO_EBADMSG = 1504 /* 1504 */
    +    XML_IO_EBUSY = 1505 /* 1505 */
    +    XML_IO_ECANCELED = 1506 /* 1506 */
    +    XML_IO_ECHILD = 1507 /* 1507 */
    +    XML_IO_EDEADLK = 1508 /* 1508 */
    +    XML_IO_EDOM = 1509 /* 1509 */
    +    XML_IO_EEXIST = 1510 /* 1510 */
    +    XML_IO_EFAULT = 1511 /* 1511 */
    +    XML_IO_EFBIG = 1512 /* 1512 */
    +    XML_IO_EINPROGRESS = 1513 /* 1513 */
    +    XML_IO_EINTR = 1514 /* 1514 */
    +    XML_IO_EINVAL = 1515 /* 1515 */
    +    XML_IO_EIO = 1516 /* 1516 */
    +    XML_IO_EISDIR = 1517 /* 1517 */
    +    XML_IO_EMFILE = 1518 /* 1518 */
    +    XML_IO_EMLINK = 1519 /* 1519 */
    +    XML_IO_EMSGSIZE = 1520 /* 1520 */
    +    XML_IO_ENAMETOOLONG = 1521 /* 1521 */
    +    XML_IO_ENFILE = 1522 /* 1522 */
    +    XML_IO_ENODEV = 1523 /* 1523 */
    +    XML_IO_ENOENT = 1524 /* 1524 */
    +    XML_IO_ENOEXEC = 1525 /* 1525 */
    +    XML_IO_ENOLCK = 1526 /* 1526 */
    +    XML_IO_ENOMEM = 1527 /* 1527 */
    +    XML_IO_ENOSPC = 1528 /* 1528 */
    +    XML_IO_ENOSYS = 1529 /* 1529 */
    +    XML_IO_ENOTDIR = 1530 /* 1530 */
    +    XML_IO_ENOTEMPTY = 1531 /* 1531 */
    +    XML_IO_ENOTSUP = 1532 /* 1532 */
    +    XML_IO_ENOTTY = 1533 /* 1533 */
    +    XML_IO_ENXIO = 1534 /* 1534 */
    +    XML_IO_EPERM = 1535 /* 1535 */
    +    XML_IO_EPIPE = 1536 /* 1536 */
    +    XML_IO_ERANGE = 1537 /* 1537 */
    +    XML_IO_EROFS = 1538 /* 1538 */
    +    XML_IO_ESPIPE = 1539 /* 1539 */
    +    XML_IO_ESRCH = 1540 /* 1540 */
    +    XML_IO_ETIMEDOUT = 1541 /* 1541 */
    +    XML_IO_EXDEV = 1542 /* 1542 */
    +    XML_IO_NETWORK_ATTEMPT = 1543 /* 1543 */
    +    XML_IO_ENCODER = 1544 /* 1544 */
    +    XML_IO_FLUSH = 1545 /* 1545 */
    +    XML_IO_WRITE = 1546 /* 1546 */
    +    XML_IO_NO_INPUT = 1547 /* 1547 */
    +    XML_IO_BUFFER_FULL = 1548 /* 1548 */
    +    XML_IO_LOAD_ERROR = 1549 /* 1549 */
    +    XML_IO_ENOTSOCK = 1550 /* 1550 */
    +    XML_IO_EISCONN = 1551 /* 1551 */
    +    XML_IO_ECONNREFUSED = 1552 /* 1552 */
    +    XML_IO_ENETUNREACH = 1553 /* 1553 */
    +    XML_IO_EADDRINUSE = 1554 /* 1554 */
    +    XML_IO_EALREADY = 1555 /* 1555 */
    +    XML_IO_EAFNOSUPPORT = 1556 /* 1556 */
    +    XML_XINCLUDE_RECURSION = 1600
    +    XML_XINCLUDE_PARSE_VALUE = 1601 /* 1601 */
    +    XML_XINCLUDE_ENTITY_DEF_MISMATCH = 1602 /* 1602 */
    +    XML_XINCLUDE_NO_HREF = 1603 /* 1603 */
    +    XML_XINCLUDE_NO_FALLBACK = 1604 /* 1604 */
    +    XML_XINCLUDE_HREF_URI = 1605 /* 1605 */
    +    XML_XINCLUDE_TEXT_FRAGMENT = 1606 /* 1606 */
    +    XML_XINCLUDE_TEXT_DOCUMENT = 1607 /* 1607 */
    +    XML_XINCLUDE_INVALID_CHAR = 1608 /* 1608 */
    +    XML_XINCLUDE_BUILD_FAILED = 1609 /* 1609 */
    +    XML_XINCLUDE_UNKNOWN_ENCODING = 1610 /* 1610 */
    +    XML_XINCLUDE_MULTIPLE_ROOT = 1611 /* 1611 */
    +    XML_XINCLUDE_XPTR_FAILED = 1612 /* 1612 */
    +    XML_XINCLUDE_XPTR_RESULT = 1613 /* 1613 */
    +    XML_XINCLUDE_INCLUDE_IN_INCLUDE = 1614 /* 1614 */
    +    XML_XINCLUDE_FALLBACKS_IN_INCLUDE = 1615 /* 1615 */
    +    XML_XINCLUDE_FALLBACK_NOT_IN_INCLUDE = 1616 /* 1616 */
    +    XML_XINCLUDE_DEPRECATED_NS = 1617 /* 1617 */
    +    XML_XINCLUDE_FRAGMENT_ID = 1618 /* 1618 */
    +    XML_CATALOG_MISSING_ATTR = 1650
    +    XML_CATALOG_ENTRY_BROKEN = 1651 /* 1651 */
    +    XML_CATALOG_PREFER_VALUE = 1652 /* 1652 */
    +    XML_CATALOG_NOT_CATALOG = 1653 /* 1653 */
    +    XML_CATALOG_RECURSION = 1654 /* 1654 */
    +    XML_SCHEMAP_PREFIX_UNDEFINED = 1700
    +    XML_SCHEMAP_ATTRFORMDEFAULT_VALUE = 1701 /* 1701 */
    +    XML_SCHEMAP_ATTRGRP_NONAME_NOREF = 1702 /* 1702 */
    +    XML_SCHEMAP_ATTR_NONAME_NOREF = 1703 /* 1703 */
    +    XML_SCHEMAP_COMPLEXTYPE_NONAME_NOREF = 1704 /* 1704 */
    +    XML_SCHEMAP_ELEMFORMDEFAULT_VALUE = 1705 /* 1705 */
    +    XML_SCHEMAP_ELEM_NONAME_NOREF = 1706 /* 1706 */
    +    XML_SCHEMAP_EXTENSION_NO_BASE = 1707 /* 1707 */
    +    XML_SCHEMAP_FACET_NO_VALUE = 1708 /* 1708 */
    +    XML_SCHEMAP_FAILED_BUILD_IMPORT = 1709 /* 1709 */
    +    XML_SCHEMAP_GROUP_NONAME_NOREF = 1710 /* 1710 */
    +    XML_SCHEMAP_IMPORT_NAMESPACE_NOT_URI = 1711 /* 1711 */
    +    XML_SCHEMAP_IMPORT_REDEFINE_NSNAME = 1712 /* 1712 */
    +    XML_SCHEMAP_IMPORT_SCHEMA_NOT_URI = 1713 /* 1713 */
    +    XML_SCHEMAP_INVALID_BOOLEAN = 1714 /* 1714 */
    +    XML_SCHEMAP_INVALID_ENUM = 1715 /* 1715 */
    +    XML_SCHEMAP_INVALID_FACET = 1716 /* 1716 */
    +    XML_SCHEMAP_INVALID_FACET_VALUE = 1717 /* 1717 */
    +    XML_SCHEMAP_INVALID_MAXOCCURS = 1718 /* 1718 */
    +    XML_SCHEMAP_INVALID_MINOCCURS = 1719 /* 1719 */
    +    XML_SCHEMAP_INVALID_REF_AND_SUBTYPE = 1720 /* 1720 */
    +    XML_SCHEMAP_INVALID_WHITE_SPACE = 1721 /* 1721 */
    +    XML_SCHEMAP_NOATTR_NOREF = 1722 /* 1722 */
    +    XML_SCHEMAP_NOTATION_NO_NAME = 1723 /* 1723 */
    +    XML_SCHEMAP_NOTYPE_NOREF = 1724 /* 1724 */
    +    XML_SCHEMAP_REF_AND_SUBTYPE = 1725 /* 1725 */
    +    XML_SCHEMAP_RESTRICTION_NONAME_NOREF = 1726 /* 1726 */
    +    XML_SCHEMAP_SIMPLETYPE_NONAME = 1727 /* 1727 */
    +    XML_SCHEMAP_TYPE_AND_SUBTYPE = 1728 /* 1728 */
    +    XML_SCHEMAP_UNKNOWN_ALL_CHILD = 1729 /* 1729 */
    +    XML_SCHEMAP_UNKNOWN_ANYATTRIBUTE_CHILD = 1730 /* 1730 */
    +    XML_SCHEMAP_UNKNOWN_ATTR_CHILD = 1731 /* 1731 */
    +    XML_SCHEMAP_UNKNOWN_ATTRGRP_CHILD = 1732 /* 1732 */
    +    XML_SCHEMAP_UNKNOWN_ATTRIBUTE_GROUP = 1733 /* 1733 */
    +    XML_SCHEMAP_UNKNOWN_BASE_TYPE = 1734 /* 1734 */
    +    XML_SCHEMAP_UNKNOWN_CHOICE_CHILD = 1735 /* 1735 */
    +    XML_SCHEMAP_UNKNOWN_COMPLEXCONTENT_CHILD = 1736 /* 1736 */
    +    XML_SCHEMAP_UNKNOWN_COMPLEXTYPE_CHILD = 1737 /* 1737 */
    +    XML_SCHEMAP_UNKNOWN_ELEM_CHILD = 1738 /* 1738 */
    +    XML_SCHEMAP_UNKNOWN_EXTENSION_CHILD = 1739 /* 1739 */
    +    XML_SCHEMAP_UNKNOWN_FACET_CHILD = 1740 /* 1740 */
    +    XML_SCHEMAP_UNKNOWN_FACET_TYPE = 1741 /* 1741 */
    +    XML_SCHEMAP_UNKNOWN_GROUP_CHILD = 1742 /* 1742 */
    +    XML_SCHEMAP_UNKNOWN_IMPORT_CHILD = 1743 /* 1743 */
    +    XML_SCHEMAP_UNKNOWN_LIST_CHILD = 1744 /* 1744 */
    +    XML_SCHEMAP_UNKNOWN_NOTATION_CHILD = 1745 /* 1745 */
    +    XML_SCHEMAP_UNKNOWN_PROCESSCONTENT_CHILD = 1746 /* 1746 */
    +    XML_SCHEMAP_UNKNOWN_REF = 1747 /* 1747 */
    +    XML_SCHEMAP_UNKNOWN_RESTRICTION_CHILD = 1748 /* 1748 */
    +    XML_SCHEMAP_UNKNOWN_SCHEMAS_CHILD = 1749 /* 1749 */
    +    XML_SCHEMAP_UNKNOWN_SEQUENCE_CHILD = 1750 /* 1750 */
    +    XML_SCHEMAP_UNKNOWN_SIMPLECONTENT_CHILD = 1751 /* 1751 */
    +    XML_SCHEMAP_UNKNOWN_SIMPLETYPE_CHILD = 1752 /* 1752 */
    +    XML_SCHEMAP_UNKNOWN_TYPE = 1753 /* 1753 */
    +    XML_SCHEMAP_UNKNOWN_UNION_CHILD = 1754 /* 1754 */
    +    XML_SCHEMAP_ELEM_DEFAULT_FIXED = 1755 /* 1755 */
    +    XML_SCHEMAP_REGEXP_INVALID = 1756 /* 1756 */
    +    XML_SCHEMAP_FAILED_LOAD = 1757 /* 1757 */
    +    XML_SCHEMAP_NOTHING_TO_PARSE = 1758 /* 1758 */
    +    XML_SCHEMAP_NOROOT = 1759 /* 1759 */
    +    XML_SCHEMAP_REDEFINED_GROUP = 1760 /* 1760 */
    +    XML_SCHEMAP_REDEFINED_TYPE = 1761 /* 1761 */
    +    XML_SCHEMAP_REDEFINED_ELEMENT = 1762 /* 1762 */
    +    XML_SCHEMAP_REDEFINED_ATTRGROUP = 1763 /* 1763 */
    +    XML_SCHEMAP_REDEFINED_ATTR = 1764 /* 1764 */
    +    XML_SCHEMAP_REDEFINED_NOTATION = 1765 /* 1765 */
    +    XML_SCHEMAP_FAILED_PARSE = 1766 /* 1766 */
    +    XML_SCHEMAP_UNKNOWN_PREFIX = 1767 /* 1767 */
    +    XML_SCHEMAP_DEF_AND_PREFIX = 1768 /* 1768 */
    +    XML_SCHEMAP_UNKNOWN_INCLUDE_CHILD = 1769 /* 1769 */
    +    XML_SCHEMAP_INCLUDE_SCHEMA_NOT_URI = 1770 /* 1770 */
    +    XML_SCHEMAP_INCLUDE_SCHEMA_NO_URI = 1771 /* 1771 */
    +    XML_SCHEMAP_NOT_SCHEMA = 1772 /* 1772 */
    +    XML_SCHEMAP_UNKNOWN_MEMBER_TYPE = 1773 /* 1773 */
    +    XML_SCHEMAP_INVALID_ATTR_USE = 1774 /* 1774 */
    +    XML_SCHEMAP_RECURSIVE = 1775 /* 1775 */
    +    XML_SCHEMAP_SUPERNUMEROUS_LIST_ITEM_TYPE = 1776 /* 1776 */
    +    XML_SCHEMAP_INVALID_ATTR_COMBINATION = 1777 /* 1777 */
    +    XML_SCHEMAP_INVALID_ATTR_INLINE_COMBINATION = 1778 /* 1778 */
    +    XML_SCHEMAP_MISSING_SIMPLETYPE_CHILD = 1779 /* 1779 */
    +    XML_SCHEMAP_INVALID_ATTR_NAME = 1780 /* 1780 */
    +    XML_SCHEMAP_REF_AND_CONTENT = 1781 /* 1781 */
    +    XML_SCHEMAP_CT_PROPS_CORRECT_1 = 1782 /* 1782 */
    +    XML_SCHEMAP_CT_PROPS_CORRECT_2 = 1783 /* 1783 */
    +    XML_SCHEMAP_CT_PROPS_CORRECT_3 = 1784 /* 1784 */
    +    XML_SCHEMAP_CT_PROPS_CORRECT_4 = 1785 /* 1785 */
    +    XML_SCHEMAP_CT_PROPS_CORRECT_5 = 1786 /* 1786 */
    +    XML_SCHEMAP_DERIVATION_OK_RESTRICTION_1 = 1787 /* 1787 */
    +    XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_1 = 1788 /* 1788 */
    +    XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_2 = 1789 /* 1789 */
    +    XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_2 = 1790 /* 1790 */
    +    XML_SCHEMAP_DERIVATION_OK_RESTRICTION_3 = 1791 /* 1791 */
    +    XML_SCHEMAP_WILDCARD_INVALID_NS_MEMBER = 1792 /* 1792 */
    +    XML_SCHEMAP_INTERSECTION_NOT_EXPRESSIBLE = 1793 /* 1793 */
    +    XML_SCHEMAP_UNION_NOT_EXPRESSIBLE = 1794 /* 1794 */
    +    XML_SCHEMAP_SRC_IMPORT_3_1 = 1795 /* 1795 */
    +    XML_SCHEMAP_SRC_IMPORT_3_2 = 1796 /* 1796 */
    +    XML_SCHEMAP_DERIVATION_OK_RESTRICTION_4_1 = 1797 /* 1797 */
    +    XML_SCHEMAP_DERIVATION_OK_RESTRICTION_4_2 = 1798 /* 1798 */
    +    XML_SCHEMAP_DERIVATION_OK_RESTRICTION_4_3 = 1799 /* 1799 */
    +    XML_SCHEMAP_COS_CT_EXTENDS_1_3 = 1800 /* 1800 */
    +    XML_SCHEMAV_NOROOT = 1801
    +    XML_SCHEMAV_UNDECLAREDELEM = 1802 /* 1802 */
    +    XML_SCHEMAV_NOTTOPLEVEL = 1803 /* 1803 */
    +    XML_SCHEMAV_MISSING = 1804 /* 1804 */
    +    XML_SCHEMAV_WRONGELEM = 1805 /* 1805 */
    +    XML_SCHEMAV_NOTYPE = 1806 /* 1806 */
    +    XML_SCHEMAV_NOROLLBACK = 1807 /* 1807 */
    +    XML_SCHEMAV_ISABSTRACT = 1808 /* 1808 */
    +    XML_SCHEMAV_NOTEMPTY = 1809 /* 1809 */
    +    XML_SCHEMAV_ELEMCONT = 1810 /* 1810 */
    +    XML_SCHEMAV_HAVEDEFAULT = 1811 /* 1811 */
    +    XML_SCHEMAV_NOTNILLABLE = 1812 /* 1812 */
    +    XML_SCHEMAV_EXTRACONTENT = 1813 /* 1813 */
    +    XML_SCHEMAV_INVALIDATTR = 1814 /* 1814 */
    +    XML_SCHEMAV_INVALIDELEM = 1815 /* 1815 */
    +    XML_SCHEMAV_NOTDETERMINIST = 1816 /* 1816 */
    +    XML_SCHEMAV_CONSTRUCT = 1817 /* 1817 */
    +    XML_SCHEMAV_INTERNAL = 1818 /* 1818 */
    +    XML_SCHEMAV_NOTSIMPLE = 1819 /* 1819 */
    +    XML_SCHEMAV_ATTRUNKNOWN = 1820 /* 1820 */
    +    XML_SCHEMAV_ATTRINVALID = 1821 /* 1821 */
    +    XML_SCHEMAV_VALUE = 1822 /* 1822 */
    +    XML_SCHEMAV_FACET = 1823 /* 1823 */
    +    XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_1 = 1824 /* 1824 */
    +    XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_2 = 1825 /* 1825 */
    +    XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_3 = 1826 /* 1826 */
    +    XML_SCHEMAV_CVC_TYPE_3_1_1 = 1827 /* 1827 */
    +    XML_SCHEMAV_CVC_TYPE_3_1_2 = 1828 /* 1828 */
    +    XML_SCHEMAV_CVC_FACET_VALID = 1829 /* 1829 */
    +    XML_SCHEMAV_CVC_LENGTH_VALID = 1830 /* 1830 */
    +    XML_SCHEMAV_CVC_MINLENGTH_VALID = 1831 /* 1831 */
    +    XML_SCHEMAV_CVC_MAXLENGTH_VALID = 1832 /* 1832 */
    +    XML_SCHEMAV_CVC_MININCLUSIVE_VALID = 1833 /* 1833 */
    +    XML_SCHEMAV_CVC_MAXINCLUSIVE_VALID = 1834 /* 1834 */
    +    XML_SCHEMAV_CVC_MINEXCLUSIVE_VALID = 1835 /* 1835 */
    +    XML_SCHEMAV_CVC_MAXEXCLUSIVE_VALID = 1836 /* 1836 */
    +    XML_SCHEMAV_CVC_TOTALDIGITS_VALID = 1837 /* 1837 */
    +    XML_SCHEMAV_CVC_FRACTIONDIGITS_VALID = 1838 /* 1838 */
    +    XML_SCHEMAV_CVC_PATTERN_VALID = 1839 /* 1839 */
    +    XML_SCHEMAV_CVC_ENUMERATION_VALID = 1840 /* 1840 */
    +    XML_SCHEMAV_CVC_COMPLEX_TYPE_2_1 = 1841 /* 1841 */
    +    XML_SCHEMAV_CVC_COMPLEX_TYPE_2_2 = 1842 /* 1842 */
    +    XML_SCHEMAV_CVC_COMPLEX_TYPE_2_3 = 1843 /* 1843 */
    +    XML_SCHEMAV_CVC_COMPLEX_TYPE_2_4 = 1844 /* 1844 */
    +    XML_SCHEMAV_CVC_ELT_1 = 1845 /* 1845 */
    +    XML_SCHEMAV_CVC_ELT_2 = 1846 /* 1846 */
    +    XML_SCHEMAV_CVC_ELT_3_1 = 1847 /* 1847 */
    +    XML_SCHEMAV_CVC_ELT_3_2_1 = 1848 /* 1848 */
    +    XML_SCHEMAV_CVC_ELT_3_2_2 = 1849 /* 1849 */
    +    XML_SCHEMAV_CVC_ELT_4_1 = 1850 /* 1850 */
    +    XML_SCHEMAV_CVC_ELT_4_2 = 1851 /* 1851 */
    +    XML_SCHEMAV_CVC_ELT_4_3 = 1852 /* 1852 */
    +    XML_SCHEMAV_CVC_ELT_5_1_1 = 1853 /* 1853 */
    +    XML_SCHEMAV_CVC_ELT_5_1_2 = 1854 /* 1854 */
    +    XML_SCHEMAV_CVC_ELT_5_2_1 = 1855 /* 1855 */
    +    XML_SCHEMAV_CVC_ELT_5_2_2_1 = 1856 /* 1856 */
    +    XML_SCHEMAV_CVC_ELT_5_2_2_2_1 = 1857 /* 1857 */
    +    XML_SCHEMAV_CVC_ELT_5_2_2_2_2 = 1858 /* 1858 */
    +    XML_SCHEMAV_CVC_ELT_6 = 1859 /* 1859 */
    +    XML_SCHEMAV_CVC_ELT_7 = 1860 /* 1860 */
    +    XML_SCHEMAV_CVC_ATTRIBUTE_1 = 1861 /* 1861 */
    +    XML_SCHEMAV_CVC_ATTRIBUTE_2 = 1862 /* 1862 */
    +    XML_SCHEMAV_CVC_ATTRIBUTE_3 = 1863 /* 1863 */
    +    XML_SCHEMAV_CVC_ATTRIBUTE_4 = 1864 /* 1864 */
    +    XML_SCHEMAV_CVC_COMPLEX_TYPE_3_1 = 1865 /* 1865 */
    +    XML_SCHEMAV_CVC_COMPLEX_TYPE_3_2_1 = 1866 /* 1866 */
    +    XML_SCHEMAV_CVC_COMPLEX_TYPE_3_2_2 = 1867 /* 1867 */
    +    XML_SCHEMAV_CVC_COMPLEX_TYPE_4 = 1868 /* 1868 */
    +    XML_SCHEMAV_CVC_COMPLEX_TYPE_5_1 = 1869 /* 1869 */
    +    XML_SCHEMAV_CVC_COMPLEX_TYPE_5_2 = 1870 /* 1870 */
    +    XML_SCHEMAV_ELEMENT_CONTENT = 1871 /* 1871 */
    +    XML_SCHEMAV_DOCUMENT_ELEMENT_MISSING = 1872 /* 1872 */
    +    XML_SCHEMAV_CVC_COMPLEX_TYPE_1 = 1873 /* 1873 */
    +    XML_SCHEMAV_CVC_AU = 1874 /* 1874 */
    +    XML_SCHEMAV_CVC_TYPE_1 = 1875 /* 1875 */
    +    XML_SCHEMAV_CVC_TYPE_2 = 1876 /* 1876 */
    +    XML_SCHEMAV_CVC_IDC = 1877 /* 1877 */
    +    XML_SCHEMAV_CVC_WILDCARD = 1878 /* 1878 */
    +    XML_SCHEMAV_MISC = 1879 /* 1879 */
    +    XML_XPTR_UNKNOWN_SCHEME = 1900
    +    XML_XPTR_CHILDSEQ_START = 1901 /* 1901 */
    +    XML_XPTR_EVAL_FAILED = 1902 /* 1902 */
    +    XML_XPTR_EXTRA_OBJECTS = 1903 /* 1903 */
    +    XML_C14N_CREATE_CTXT = 1950
    +    XML_C14N_REQUIRES_UTF8 = 1951 /* 1951 */
    +    XML_C14N_CREATE_STACK = 1952 /* 1952 */
    +    XML_C14N_INVALID_NODE = 1953 /* 1953 */
    +    XML_C14N_UNKNOW_NODE = 1954 /* 1954 */
    +    XML_C14N_RELATIVE_NAMESPACE = 1955 /* 1955 */
    +    XML_FTP_PASV_ANSWER = 2000
    +    XML_FTP_EPSV_ANSWER = 2001 /* 2001 */
    +    XML_FTP_ACCNT = 2002 /* 2002 */
    +    XML_FTP_URL_SYNTAX = 2003 /* 2003 */
    +    XML_HTTP_URL_SYNTAX = 2020
    +    XML_HTTP_USE_IP = 2021 /* 2021 */
    +    XML_HTTP_UNKNOWN_HOST = 2022 /* 2022 */
    +    XML_SCHEMAP_SRC_SIMPLE_TYPE_1 = 3000
    +    XML_SCHEMAP_SRC_SIMPLE_TYPE_2 = 3001 /* 3001 */
    +    XML_SCHEMAP_SRC_SIMPLE_TYPE_3 = 3002 /* 3002 */
    +    XML_SCHEMAP_SRC_SIMPLE_TYPE_4 = 3003 /* 3003 */
    +    XML_SCHEMAP_SRC_RESOLVE = 3004 /* 3004 */
    +    XML_SCHEMAP_SRC_RESTRICTION_BASE_OR_SIMPLETYPE = 3005 /* 3005 */
    +    XML_SCHEMAP_SRC_LIST_ITEMTYPE_OR_SIMPLETYPE = 3006 /* 3006 */
    +    XML_SCHEMAP_SRC_UNION_MEMBERTYPES_OR_SIMPLETYPES = 3007 /* 3007 */
    +    XML_SCHEMAP_ST_PROPS_CORRECT_1 = 3008 /* 3008 */
    +    XML_SCHEMAP_ST_PROPS_CORRECT_2 = 3009 /* 3009 */
    +    XML_SCHEMAP_ST_PROPS_CORRECT_3 = 3010 /* 3010 */
    +    XML_SCHEMAP_COS_ST_RESTRICTS_1_1 = 3011 /* 3011 */
    +    XML_SCHEMAP_COS_ST_RESTRICTS_1_2 = 3012 /* 3012 */
    +    XML_SCHEMAP_COS_ST_RESTRICTS_1_3_1 = 3013 /* 3013 */
    +    XML_SCHEMAP_COS_ST_RESTRICTS_1_3_2 = 3014 /* 3014 */
    +    XML_SCHEMAP_COS_ST_RESTRICTS_2_1 = 3015 /* 3015 */
    +    XML_SCHEMAP_COS_ST_RESTRICTS_2_3_1_1 = 3016 /* 3016 */
    +    XML_SCHEMAP_COS_ST_RESTRICTS_2_3_1_2 = 3017 /* 3017 */
    +    XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_1 = 3018 /* 3018 */
    +    XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_2 = 3019 /* 3019 */
    +    XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_3 = 3020 /* 3020 */
    +    XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_4 = 3021 /* 3021 */
    +    XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_5 = 3022 /* 3022 */
    +    XML_SCHEMAP_COS_ST_RESTRICTS_3_1 = 3023 /* 3023 */
    +    XML_SCHEMAP_COS_ST_RESTRICTS_3_3_1 = 3024 /* 3024 */
    +    XML_SCHEMAP_COS_ST_RESTRICTS_3_3_1_2 = 3025 /* 3025 */
    +    XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_2 = 3026 /* 3026 */
    +    XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_1 = 3027 /* 3027 */
    +    XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_3 = 3028 /* 3028 */
    +    XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_4 = 3029 /* 3029 */
    +    XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_5 = 3030 /* 3030 */
    +    XML_SCHEMAP_COS_ST_DERIVED_OK_2_1 = 3031 /* 3031 */
    +    XML_SCHEMAP_COS_ST_DERIVED_OK_2_2 = 3032 /* 3032 */
    +    XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED = 3033 /* 3033 */
    +    XML_SCHEMAP_S4S_ELEM_MISSING = 3034 /* 3034 */
    +    XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED = 3035 /* 3035 */
    +    XML_SCHEMAP_S4S_ATTR_MISSING = 3036 /* 3036 */
    +    XML_SCHEMAP_S4S_ATTR_INVALID_VALUE = 3037 /* 3037 */
    +    XML_SCHEMAP_SRC_ELEMENT_1 = 3038 /* 3038 */
    +    XML_SCHEMAP_SRC_ELEMENT_2_1 = 3039 /* 3039 */
    +    XML_SCHEMAP_SRC_ELEMENT_2_2 = 3040 /* 3040 */
    +    XML_SCHEMAP_SRC_ELEMENT_3 = 3041 /* 3041 */
    +    XML_SCHEMAP_P_PROPS_CORRECT_1 = 3042 /* 3042 */
    +    XML_SCHEMAP_P_PROPS_CORRECT_2_1 = 3043 /* 3043 */
    +    XML_SCHEMAP_P_PROPS_CORRECT_2_2 = 3044 /* 3044 */
    +    XML_SCHEMAP_E_PROPS_CORRECT_2 = 3045 /* 3045 */
    +    XML_SCHEMAP_E_PROPS_CORRECT_3 = 3046 /* 3046 */
    +    XML_SCHEMAP_E_PROPS_CORRECT_4 = 3047 /* 3047 */
    +    XML_SCHEMAP_E_PROPS_CORRECT_5 = 3048 /* 3048 */
    +    XML_SCHEMAP_E_PROPS_CORRECT_6 = 3049 /* 3049 */
    +    XML_SCHEMAP_SRC_INCLUDE = 3050 /* 3050 */
    +    XML_SCHEMAP_SRC_ATTRIBUTE_1 = 3051 /* 3051 */
    +    XML_SCHEMAP_SRC_ATTRIBUTE_2 = 3052 /* 3052 */
    +    XML_SCHEMAP_SRC_ATTRIBUTE_3_1 = 3053 /* 3053 */
    +    XML_SCHEMAP_SRC_ATTRIBUTE_3_2 = 3054 /* 3054 */
    +    XML_SCHEMAP_SRC_ATTRIBUTE_4 = 3055 /* 3055 */
    +    XML_SCHEMAP_NO_XMLNS = 3056 /* 3056 */
    +    XML_SCHEMAP_NO_XSI = 3057 /* 3057 */
    +    XML_SCHEMAP_COS_VALID_DEFAULT_1 = 3058 /* 3058 */
    +    XML_SCHEMAP_COS_VALID_DEFAULT_2_1 = 3059 /* 3059 */
    +    XML_SCHEMAP_COS_VALID_DEFAULT_2_2_1 = 3060 /* 3060 */
    +    XML_SCHEMAP_COS_VALID_DEFAULT_2_2_2 = 3061 /* 3061 */
    +    XML_SCHEMAP_CVC_SIMPLE_TYPE = 3062 /* 3062 */
    +    XML_SCHEMAP_COS_CT_EXTENDS_1_1 = 3063 /* 3063 */
    +    XML_SCHEMAP_SRC_IMPORT_1_1 = 3064 /* 3064 */
    +    XML_SCHEMAP_SRC_IMPORT_1_2 = 3065 /* 3065 */
    +    XML_SCHEMAP_SRC_IMPORT_2 = 3066 /* 3066 */
    +    XML_SCHEMAP_SRC_IMPORT_2_1 = 3067 /* 3067 */
    +    XML_SCHEMAP_SRC_IMPORT_2_2 = 3068 /* 3068 */
    +    XML_SCHEMAP_INTERNAL = 3069 /* 3069 non-W3C */
    +    XML_SCHEMAP_NOT_DETERMINISTIC = 3070 /* 3070 non-W3C */
    +    XML_SCHEMAP_SRC_ATTRIBUTE_GROUP_1 = 3071 /* 3071 */
    +    XML_SCHEMAP_SRC_ATTRIBUTE_GROUP_2 = 3072 /* 3072 */
    +    XML_SCHEMAP_SRC_ATTRIBUTE_GROUP_3 = 3073 /* 3073 */
    +    XML_SCHEMAP_MG_PROPS_CORRECT_1 = 3074 /* 3074 */
    +    XML_SCHEMAP_MG_PROPS_CORRECT_2 = 3075 /* 3075 */
    +    XML_SCHEMAP_SRC_CT_1 = 3076 /* 3076 */
    +    XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_3 = 3077 /* 3077 */
    +    XML_SCHEMAP_AU_PROPS_CORRECT_2 = 3078 /* 3078 */
    +    XML_SCHEMAP_A_PROPS_CORRECT_2 = 3079 /* 3079 */
    +    XML_SCHEMAP_C_PROPS_CORRECT = 3080 /* 3080 */
    +    XML_SCHEMAP_SRC_REDEFINE = 3081 /* 3081 */
    +    XML_SCHEMAP_SRC_IMPORT = 3082 /* 3082 */
    +    XML_SCHEMAP_WARN_SKIP_SCHEMA = 3083 /* 3083 */
    +    XML_SCHEMAP_WARN_UNLOCATED_SCHEMA = 3084 /* 3084 */
    +    XML_SCHEMAP_WARN_ATTR_REDECL_PROH = 3085 /* 3085 */
    +    XML_SCHEMAP_WARN_ATTR_POINTLESS_PROH = 3086 /* 3085 */
    +    XML_SCHEMAP_AG_PROPS_CORRECT = 3087 /* 3086 */
    +    XML_SCHEMAP_COS_CT_EXTENDS_1_2 = 3088 /* 3087 */
    +    XML_SCHEMAP_AU_PROPS_CORRECT = 3089 /* 3088 */
    +    XML_SCHEMAP_A_PROPS_CORRECT_3 = 3090 /* 3089 */
    +    XML_SCHEMAP_COS_ALL_LIMITED = 3091 /* 3090 */
    +    XML_SCHEMATRONV_ASSERT = 4000 /* 4000 */
    +    XML_SCHEMATRONV_REPORT = 4001
    +    XML_MODULE_OPEN = 4900 /* 4900 */
    +    XML_MODULE_CLOSE = 4901 /* 4901 */
    +    XML_CHECK_FOUND_ELEMENT = 5000
    +    XML_CHECK_FOUND_ATTRIBUTE = 5001 /* 5001 */
    +    XML_CHECK_FOUND_TEXT = 5002 /* 5002 */
    +    XML_CHECK_FOUND_CDATA = 5003 /* 5003 */
    +    XML_CHECK_FOUND_ENTITYREF = 5004 /* 5004 */
    +    XML_CHECK_FOUND_ENTITY = 5005 /* 5005 */
    +    XML_CHECK_FOUND_PI = 5006 /* 5006 */
    +    XML_CHECK_FOUND_COMMENT = 5007 /* 5007 */
    +    XML_CHECK_FOUND_DOCTYPE = 5008 /* 5008 */
    +    XML_CHECK_FOUND_FRAGMENT = 5009 /* 5009 */
    +    XML_CHECK_FOUND_NOTATION = 5010 /* 5010 */
    +    XML_CHECK_UNKNOWN_NODE = 5011 /* 5011 */
    +    XML_CHECK_ENTITY_TYPE = 5012 /* 5012 */
    +    XML_CHECK_NO_PARENT = 5013 /* 5013 */
    +    XML_CHECK_NO_DOC = 5014 /* 5014 */
    +    XML_CHECK_NO_NAME = 5015 /* 5015 */
    +    XML_CHECK_NO_ELEM = 5016 /* 5016 */
    +    XML_CHECK_WRONG_DOC = 5017 /* 5017 */
    +    XML_CHECK_NO_PREV = 5018 /* 5018 */
    +    XML_CHECK_WRONG_PREV = 5019 /* 5019 */
    +    XML_CHECK_NO_NEXT = 5020 /* 5020 */
    +    XML_CHECK_WRONG_NEXT = 5021 /* 5021 */
    +    XML_CHECK_NOT_DTD = 5022 /* 5022 */
    +    XML_CHECK_NOT_ATTR = 5023 /* 5023 */
    +    XML_CHECK_NOT_ATTR_DECL = 5024 /* 5024 */
    +    XML_CHECK_NOT_ELEM_DECL = 5025 /* 5025 */
    +    XML_CHECK_NOT_ENTITY_DECL = 5026 /* 5026 */
    +    XML_CHECK_NOT_NS_DECL = 5027 /* 5027 */
    +    XML_CHECK_NO_HREF = 5028 /* 5028 */
    +    XML_CHECK_WRONG_PARENT = 5029 /* 5029 */
    +    XML_CHECK_NS_SCOPE = 5030 /* 5030 */
    +    XML_CHECK_NS_ANCESTOR = 5031 /* 5031 */
    +    XML_CHECK_NOT_UTF8 = 5032 /* 5032 */
    +    XML_CHECK_NO_DICT = 5033 /* 5033 */
    +    XML_CHECK_NOT_NCNAME = 5034 /* 5034 */
    +    XML_CHECK_OUTSIDE_DICT = 5035 /* 5035 */
    +    XML_CHECK_WRONG_NAME = 5036 /* 5036 */
    +    XML_CHECK_NAME_NOT_NULL = 5037 /* 5037 */
    +    XML_I18N_NO_NAME = 6000
    +    XML_I18N_NO_HANDLER = 6001 /* 6001 */
    +    XML_I18N_EXCESS_HANDLER = 6002 /* 6002 */
    +    XML_I18N_CONV_FAILED = 6003 /* 6003 */
    +    XML_I18N_NO_OUTPUT = 6004 /* 6004 */
    +    XML_BUF_OVERFLOW = 7000
    +};
    +

    +

    +
    + +
    +

    Function type xmlStructuredErrorFunc

    void	xmlStructuredErrorFunc		(void * userData, 
    xmlErrorPtr error)
    +

    Signature of the function to use when there is an error and the module handles the new error reporting mechanism.

    +
    userData:user provided data for the error callback
    error:the error being raised.
    +
    +

    initGenericErrorDefaultFunc ()

    void	initGenericErrorDefaultFunc	(xmlGenericErrorFunc * handler)
    +

    Set or reset (if NULL) the default handler for generic errors to the builtin error function.

    +
    handler:the handler
    +
    +

    xmlCopyError ()

    int	xmlCopyError			(xmlErrorPtr from, 
    xmlErrorPtr to)
    +

    Save the original error to the new place.

    +
    from:a source error
    to:a target error
    Returns:0 in case of success and -1 in case of error.
    +
    +

    xmlCtxtGetLastError ()

    xmlErrorPtr	xmlCtxtGetLastError	(void * ctx)
    +

    Get the last parsing error registered.

    +
    ctx:an XML parser context
    Returns:NULL if no error occured or a pointer to the error
    +
    + +
    +

    xmlGetLastError ()

    xmlErrorPtr	xmlGetLastError		(void)
    +

    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
    +
    + +
    +

    xmlParserPrintFileContext ()

    void	xmlParserPrintFileContext	(xmlParserInputPtr input)
    +

    Displays current context within the input content for error tracking

    +
    input:an xmlParserInputPtr input
    +
    +

    xmlParserPrintFileInfo ()

    void	xmlParserPrintFileInfo		(xmlParserInputPtr input)
    +

    Displays the associated file and line informations for the current input

    +
    input:an xmlParserInputPtr input
    +
    + +
    +
    +
    +
    +
    +

    xmlResetError ()

    void	xmlResetError			(xmlErrorPtr err)
    +

    Cleanup the error.

    +
    err:pointer to the error.
    +
    + +
    +

    xmlSetGenericErrorFunc ()

    void	xmlSetGenericErrorFunc		(void * ctx, 
    xmlGenericErrorFunc handler)
    +

    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. For multi-threaded applications, this must be set separately for each thread.

    +
    ctx:the new error handling context
    handler:the new handler function
    +
    +

    xmlSetStructuredErrorFunc ()

    void	xmlSetStructuredErrorFunc	(void * ctx, 
    xmlStructuredErrorFunc handler)
    +

    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 For multi-threaded applications, this must be set separately for each thread.

    +
    ctx:the new error handling context
    handler:the new handler function
    +
    +
    +
    + + diff --git a/doc/devhelp/libxml2-xmlexports.html b/doc/devhelp/libxml2-xmlexports.html new file mode 100644 index 0000000..f0ee4b4 --- /dev/null +++ b/doc/devhelp/libxml2-xmlexports.html @@ -0,0 +1,87 @@ + + + + + xmlexports: macros for marking symbols as exportable/importable. + + + + + + + + + + + + + + + + +

    + xmlexports +

    +

    xmlexports - macros for marking symbols as exportable/importable.

    +

    macros for marking symbols as exportable/importable.

    +

    Author(s): Igor Zlatovic <igor@zlatkovic.com>

    +
    +

    Synopsis

    +
    #define _REENTRANT;
    +#define XMLCDECL;
    +#define XMLPUBVAR;
    +#define LIBXML_DLL_IMPORT;
    +#define XMLCALL;
    +#define XMLPUBFUN;
    +
    +
    +
    +

    Description

    +
    +
    +

    Details

    +
    +

    Macro LIBXML_DLL_IMPORT

    #define LIBXML_DLL_IMPORT;
    +

    +

    +
    +

    Macro XMLCALL

    #define XMLCALL;
    +

    +

    +
    +

    Macro XMLCDECL

    #define XMLCDECL;
    +

    +

    +
    +

    Macro XMLPUBFUN

    #define XMLPUBFUN;
    +

    +

    +
    +

    Macro XMLPUBVAR

    #define XMLPUBVAR;
    +

    +

    +
    +

    Macro _REENTRANT

    #define _REENTRANT;
    +

    +

    +
    +
    +
    + + diff --git a/doc/devhelp/libxml2-xmlmemory.html b/doc/devhelp/libxml2-xmlmemory.html new file mode 100644 index 0000000..bf400d0 --- /dev/null +++ b/doc/devhelp/libxml2-xmlmemory.html @@ -0,0 +1,186 @@ + + + + + xmlmemory: interface for the memory allocator + + + + + + + + + + + + + + + + +

    + xmlmemory +

    +

    xmlmemory - interface for the memory allocator

    +

    provides interfaces for the memory allocator, including debugging capabilities.

    +

    Author(s): Daniel Veillard

    +
    +

    Synopsis

    +
    #define xmlRealloc;
    +#define xmlMalloc;
    +#define xmlMallocAtomic;
    +#define DEBUG_MEMORY;
    +#define xmlMemStrdup;
    +void *	xmlMemRealloc			(void * ptr, 
    size_t size); +int xmlInitMemory (void); +void xmlMemFree (void * ptr); +void * xmlMemMalloc (size_t size); +void xmlMemDisplayLast (FILE * fp,
    long nbBytes); +int xmlMemGet (xmlFreeFunc * freeFunc,
    xmlMallocFunc * mallocFunc,
    xmlReallocFunc * reallocFunc,
    xmlStrdupFunc * strdupFunc); +void xmlMemoryDump (void); +void * xmlMallocLoc (size_t size,
    const char * file,
    int line); +void xmlMemDisplay (FILE * fp); +int xmlMemBlocks (void); +int xmlGcMemGet (xmlFreeFunc * freeFunc,
    xmlMallocFunc * mallocFunc,
    xmlMallocFunc * mallocAtomicFunc,
    xmlReallocFunc * reallocFunc,
    xmlStrdupFunc * strdupFunc); +typedef char * xmlStrdupFunc (const char * str); +typedef void xmlFreeFunc (void * mem); +void xmlMemShow (FILE * fp,
    int nr); +void * xmlMallocAtomicLoc (size_t size,
    const char * file,
    int line); +void * xmlReallocLoc (void * ptr,
    size_t size,
    const char * file,
    int line); +void xmlCleanupMemory (void); +int xmlMemUsed (void); +int xmlMemSetup (xmlFreeFunc freeFunc,
    xmlMallocFunc mallocFunc,
    xmlReallocFunc reallocFunc,
    xmlStrdupFunc strdupFunc); +typedef void * xmlReallocFunc (void * mem,
    size_t size); +typedef void * xmlMallocFunc (size_t size); +int xmlGcMemSetup (xmlFreeFunc freeFunc,
    xmlMallocFunc mallocFunc,
    xmlMallocFunc mallocAtomicFunc,
    xmlReallocFunc reallocFunc,
    xmlStrdupFunc strdupFunc); +char * xmlMemoryStrdup (const char * str); +char * xmlMemStrdupLoc (const char * str,
    const char * file,
    int line); +
    +
    +
    +

    Description

    +
    +
    +

    Details

    +
    +

    Macro DEBUG_MEMORY

    #define 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

    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +

    xmlGcMemGet ()

    int	xmlGcMemGet			(xmlFreeFunc * freeFunc, 
    xmlMallocFunc * mallocFunc,
    xmlMallocFunc * mallocAtomicFunc,
    xmlReallocFunc * reallocFunc,
    xmlStrdupFunc * strdupFunc)
    +

    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

    +
    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
    Returns:0 on success
    +
    +

    xmlGcMemSetup ()

    int	xmlGcMemSetup			(xmlFreeFunc freeFunc, 
    xmlMallocFunc mallocFunc,
    xmlMallocFunc mallocAtomicFunc,
    xmlReallocFunc reallocFunc,
    xmlStrdupFunc strdupFunc)
    +

    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 ?

    +
    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
    Returns:0 on success
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +

    xmlMemGet ()

    int	xmlMemGet			(xmlFreeFunc * freeFunc, 
    xmlMallocFunc * mallocFunc,
    xmlReallocFunc * reallocFunc,
    xmlStrdupFunc * strdupFunc)
    +

    Provides the memory access functions set currently in use

    +
    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
    Returns:0 on success
    +
    + +
    +
    +
    +

    xmlMemSetup ()

    int	xmlMemSetup			(xmlFreeFunc freeFunc, 
    xmlMallocFunc mallocFunc,
    xmlReallocFunc reallocFunc,
    xmlStrdupFunc strdupFunc)
    +

    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 ?

    +
    freeFunc:the free() function to use
    mallocFunc:the malloc() function to use
    reallocFunc:the realloc() function to use
    strdupFunc:the strdup() function to use
    Returns:0 on success
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/doc/devhelp/libxml2-xmlmodule.html b/doc/devhelp/libxml2-xmlmodule.html new file mode 100644 index 0000000..08bb4ef --- /dev/null +++ b/doc/devhelp/libxml2-xmlmodule.html @@ -0,0 +1,97 @@ + + + + + xmlmodule: dynamic module loading + + + + + + + + + + + + + + + + +

    + xmlmodule +

    +

    xmlmodule - dynamic module loading

    +

    basic API for dynamic module loading, used by libexslt added in 2.6.17

    +

    Author(s): Joel W. Reed

    +
    +

    Synopsis

    +
    typedef struct _xmlModule xmlModule;
    +typedef xmlModule * xmlModulePtr;
    +typedef enum xmlModuleOption;
    +int	xmlModuleFree			(xmlModulePtr module);
    +int	xmlModuleSymbol			(xmlModulePtr module, 
    const char * name,
    void ** symbol); +xmlModulePtr xmlModuleOpen (const char * name,
    int options); +int xmlModuleClose (xmlModulePtr module); +
    +
    +
    +

    Description

    +
    +
    +

    Details

    +
    +

    Structure xmlModule

    struct _xmlModule {
    +The content of this structure is not made public by the API.
    +} xmlModule;
    +

    +

    +
    +

    Enum xmlModuleOption

    enum xmlModuleOption {
    +    XML_MODULE_LAZY = 1 /* lazy binding */
    +    XML_MODULE_LOCAL = 2 /*  local binding */
    +};
    +

    +

    +
    +

    Typedef xmlModulePtr

    xmlModule * xmlModulePtr;
    +

    A handle to a dynamically loaded module

    +
    +
    +

    xmlModuleClose ()

    int	xmlModuleClose			(xmlModulePtr module)
    +

    The close operations unload the associated module and free the data associated to the module.

    +
    module:the module handle
    Returns:0 in case of success, -1 in case of argument error and -2 if the module could not be closed/unloaded.
    +
    +

    xmlModuleFree ()

    int	xmlModuleFree			(xmlModulePtr module)
    +

    The free operations free the data associated to the module but does not unload the associated shared library which may still be in use.

    +
    module:the module handle
    Returns:0 in case of success, -1 in case of argument error
    +
    +

    xmlModuleOpen ()

    xmlModulePtr	xmlModuleOpen		(const char * name, 
    int options)
    +

    Opens a module/shared library given its name or path NOTE: that due to portability issues, behaviour can only be guaranteed with @name using ASCII. We canot guarantee that an UTF-8 string would work, which is why name is a const char * and not a const xmlChar * . TODO: options are not yet implemented.

    +
    name:the module name
    options:a set of xmlModuleOption
    Returns:a handle for the module or NULL in case of error
    +
    +

    xmlModuleSymbol ()

    int	xmlModuleSymbol			(xmlModulePtr module, 
    const char * name,
    void ** symbol)
    +

    Lookup for a symbol address in the given module NOTE: that due to portability issues, behaviour can only be guaranteed with @name using ASCII. We canot guarantee that an UTF-8 string would work, which is why name is a const char * and not a const xmlChar * .

    +
    module:the module
    name:the name of the symbol
    symbol:the resulting symbol address
    Returns:0 if the symbol was found, or -1 in case of error
    +
    +
    +
    + + diff --git a/doc/devhelp/libxml2-xmlreader.html b/doc/devhelp/libxml2-xmlreader.html new file mode 100644 index 0000000..3814f43 --- /dev/null +++ b/doc/devhelp/libxml2-xmlreader.html @@ -0,0 +1,565 @@ + + + + + xmlreader: the XMLReader implementation + + + + + + + + + + + + + + + + +

    + xmlreader +

    +

    xmlreader - the XMLReader implementation

    +

    API of the XML streaming API based on C# interfaces.

    +

    Author(s): Daniel Veillard

    +
    +

    Synopsis

    +
    typedef xmlTextReader * xmlTextReaderPtr;
    +typedef enum xmlParserSeverities;
    +typedef enum xmlParserProperties;
    +typedef enum xmlTextReaderMode;
    +typedef struct _xmlTextReader xmlTextReader;
    +typedef void * xmlTextReaderLocatorPtr;
    +typedef enum xmlReaderTypes;
    +xmlTextReaderPtr	xmlNewTextReaderFilename	(const char * URI);
    +int	xmlTextReaderHasAttributes	(xmlTextReaderPtr reader);
    +int	xmlTextReaderReadState		(xmlTextReaderPtr reader);
    +xmlTextReaderPtr	xmlReaderForFile	(const char * filename, 
    const char * encoding,
    int options); +const xmlChar * xmlTextReaderConstNamespaceUri (xmlTextReaderPtr reader); +xmlDocPtr xmlTextReaderCurrentDoc (xmlTextReaderPtr reader); +int xmlTextReaderGetParserLineNumber (xmlTextReaderPtr reader); +xmlNodePtr xmlTextReaderExpand (xmlTextReaderPtr reader); +xmlChar * xmlTextReaderXmlLang (xmlTextReaderPtr reader); +xmlTextReaderPtr xmlReaderForDoc (const xmlChar * cur,
    const char * URL,
    const char * encoding,
    int options); +int xmlReaderNewIO (xmlTextReaderPtr reader,
    xmlInputReadCallback ioread,
    xmlInputCloseCallback ioclose,
    void * ioctx,
    const char * URL,
    const char * encoding,
    int options); +int xmlTextReaderClose (xmlTextReaderPtr reader); +xmlChar * xmlTextReaderReadInnerXml (xmlTextReaderPtr reader); +const xmlChar * xmlTextReaderConstEncoding (xmlTextReaderPtr reader); +int xmlTextReaderNormalization (xmlTextReaderPtr reader); +int xmlTextReaderGetParserProp (xmlTextReaderPtr reader,
    int prop); +int xmlTextReaderMoveToAttribute (xmlTextReaderPtr reader,
    const xmlChar * name); +int xmlTextReaderQuoteChar (xmlTextReaderPtr reader); +int xmlTextReaderSetSchema (xmlTextReaderPtr reader,
    xmlSchemaPtr schema); +xmlChar * xmlTextReaderValue (xmlTextReaderPtr reader); +int xmlTextReaderIsValid (xmlTextReaderPtr reader); +int xmlTextReaderMoveToFirstAttribute (xmlTextReaderPtr reader); +int xmlTextReaderGetParserColumnNumber (xmlTextReaderPtr reader); +const xmlChar * xmlTextReaderConstValue (xmlTextReaderPtr reader); +xmlTextReaderPtr xmlNewTextReader (xmlParserInputBufferPtr input,
    const char * URI); +xmlChar * xmlTextReaderGetAttributeNo (xmlTextReaderPtr reader,
    int no); +xmlChar * xmlTextReaderGetAttributeNs (xmlTextReaderPtr reader,
    const xmlChar * localName,
    const xmlChar * namespaceURI); +const xmlChar * xmlTextReaderConstName (xmlTextReaderPtr reader); +const xmlChar * xmlTextReaderConstString (xmlTextReaderPtr reader,
    const xmlChar * str); +const xmlChar * xmlTextReaderConstXmlVersion (xmlTextReaderPtr reader); +int xmlTextReaderDepth (xmlTextReaderPtr reader); +xmlChar * xmlTextReaderReadString (xmlTextReaderPtr reader); +int xmlTextReaderIsDefault (xmlTextReaderPtr reader); +int xmlTextReaderMoveToNextAttribute (xmlTextReaderPtr reader); +int xmlReaderNewWalker (xmlTextReaderPtr reader,
    xmlDocPtr doc); +const xmlChar * xmlTextReaderConstPrefix (xmlTextReaderPtr reader); +xmlTextReaderPtr xmlReaderWalker (xmlDocPtr doc); +const xmlChar * xmlTextReaderConstLocalName (xmlTextReaderPtr reader); +int xmlTextReaderNodeType (xmlTextReaderPtr reader); +void xmlFreeTextReader (xmlTextReaderPtr reader); +xmlChar * xmlTextReaderName (xmlTextReaderPtr reader); +int xmlTextReaderRead (xmlTextReaderPtr reader); +int xmlTextReaderIsEmptyElement (xmlTextReaderPtr reader); +int xmlReaderNewMemory (xmlTextReaderPtr reader,
    const char * buffer,
    int size,
    const char * URL,
    const char * encoding,
    int options); +int xmlTextReaderSchemaValidateCtxt (xmlTextReaderPtr reader,
    xmlSchemaValidCtxtPtr ctxt,
    int options); +int xmlTextReaderHasValue (xmlTextReaderPtr reader); +const xmlChar * xmlTextReaderConstBaseUri (xmlTextReaderPtr reader); +xmlChar * xmlTextReaderBaseUri (xmlTextReaderPtr reader); +int xmlTextReaderMoveToAttributeNo (xmlTextReaderPtr reader,
    int no); +int xmlTextReaderLocatorLineNumber (xmlTextReaderLocatorPtr locator); +int xmlTextReaderMoveToAttributeNs (xmlTextReaderPtr reader,
    const xmlChar * localName,
    const xmlChar * namespaceURI); +int xmlTextReaderNext (xmlTextReaderPtr reader); +int xmlTextReaderAttributeCount (xmlTextReaderPtr reader); +xmlChar * xmlTextReaderLookupNamespace (xmlTextReaderPtr reader,
    const xmlChar * prefix); +int xmlTextReaderMoveToElement (xmlTextReaderPtr reader); +xmlTextReaderPtr xmlReaderForIO (xmlInputReadCallback ioread,
    xmlInputCloseCallback ioclose,
    void * ioctx,
    const char * URL,
    const char * encoding,
    int options); +xmlChar * xmlTextReaderReadOuterXml (xmlTextReaderPtr reader); +int xmlTextReaderRelaxNGValidateCtxt (xmlTextReaderPtr reader,
    xmlRelaxNGValidCtxtPtr ctxt,
    int options); +xmlChar * xmlTextReaderPrefix (xmlTextReaderPtr reader); +int xmlTextReaderReadAttributeValue (xmlTextReaderPtr reader); +int xmlTextReaderNextSibling (xmlTextReaderPtr reader); +typedef void xmlTextReaderErrorFunc (void * arg,
    const char * msg,
    xmlParserSeverities severity,
    xmlTextReaderLocatorPtr locator); +xmlTextReaderPtr xmlReaderForFd (int fd,
    const char * URL,
    const char * encoding,
    int options); +xmlChar * xmlTextReaderGetAttribute (xmlTextReaderPtr reader,
    const xmlChar * name); +xmlChar * xmlTextReaderLocalName (xmlTextReaderPtr reader); +xmlNodePtr xmlTextReaderPreserve (xmlTextReaderPtr reader); +xmlNodePtr xmlTextReaderCurrentNode (xmlTextReaderPtr reader); +int xmlTextReaderSetParserProp (xmlTextReaderPtr reader,
    int prop,
    int value); +xmlParserInputBufferPtr xmlTextReaderGetRemainder (xmlTextReaderPtr reader); +void xmlTextReaderSetErrorHandler (xmlTextReaderPtr reader,
    xmlTextReaderErrorFunc f,
    void * arg); +int xmlTextReaderIsNamespaceDecl (xmlTextReaderPtr reader); +int xmlReaderNewDoc (xmlTextReaderPtr reader,
    const xmlChar * cur,
    const char * URL,
    const char * encoding,
    int options); +int xmlTextReaderPreservePattern (xmlTextReaderPtr reader,
    const xmlChar * pattern,
    const xmlChar ** namespaces); +const xmlChar * xmlTextReaderConstXmlLang (xmlTextReaderPtr reader); +void xmlTextReaderGetErrorHandler (xmlTextReaderPtr reader,
    xmlTextReaderErrorFunc * f,
    void ** arg); +void xmlTextReaderSetStructuredErrorHandler (xmlTextReaderPtr reader,
    xmlStructuredErrorFunc f,
    void * arg); +int xmlReaderNewFile (xmlTextReaderPtr reader,
    const char * filename,
    const char * encoding,
    int options); +int xmlTextReaderRelaxNGSetSchema (xmlTextReaderPtr reader,
    xmlRelaxNGPtr schema); +int xmlReaderNewFd (xmlTextReaderPtr reader,
    int fd,
    const char * URL,
    const char * encoding,
    int options); +int xmlTextReaderRelaxNGValidate (xmlTextReaderPtr reader,
    const char * rng); +xmlTextReaderPtr xmlReaderForMemory (const char * buffer,
    int size,
    const char * URL,
    const char * encoding,
    int options); +int xmlTextReaderSetup (xmlTextReaderPtr reader,
    xmlParserInputBufferPtr input,
    const char * URL,
    const char * encoding,
    int options); +long xmlTextReaderByteConsumed (xmlTextReaderPtr reader); +xmlChar * xmlTextReaderLocatorBaseURI (xmlTextReaderLocatorPtr locator); +xmlChar * xmlTextReaderNamespaceUri (xmlTextReaderPtr reader); +int xmlTextReaderSchemaValidate (xmlTextReaderPtr reader,
    const char * xsd); +int xmlTextReaderStandalone (xmlTextReaderPtr reader); +
    +
    +
    +

    Description

    +
    +
    +

    Details

    +
    + +
    + +
    + +
    +

    Structure xmlTextReader

    struct _xmlTextReader {
    +The content of this structure is not made public by the API.
    +} xmlTextReader;
    +

    +

    +
    +

    Typedef xmlTextReaderLocatorPtr

    void * xmlTextReaderLocatorPtr;
    +

    +

    +
    + +
    +

    Typedef xmlTextReaderPtr

    xmlTextReader * xmlTextReaderPtr;
    +

    Pointer to an xmlReader context.

    +
    +
    +

    Function type xmlTextReaderErrorFunc

    void	xmlTextReaderErrorFunc		(void * arg, 
    const char * msg,
    xmlParserSeverities severity,
    xmlTextReaderLocatorPtr locator)
    +

    Signature of an error callback from a reader parser

    +
    arg:the user argument
    msg:the message
    severity:the severity of the error
    locator:a locator indicating where the error occured
    +
    +

    xmlFreeTextReader ()

    void	xmlFreeTextReader		(xmlTextReaderPtr reader)
    +

    Deallocate all the resources associated to the reader

    +
    reader:the xmlTextReaderPtr
    +
    +

    xmlNewTextReader ()

    xmlTextReaderPtr	xmlNewTextReader	(xmlParserInputBufferPtr input, 
    const char * URI)
    +

    Create an xmlTextReader structure fed with @input

    +
    input:the xmlParserInputBufferPtr used to read data
    URI:the URI information for the source if available
    Returns:the new xmlTextReaderPtr or NULL in case of error
    +
    +

    xmlNewTextReaderFilename ()

    xmlTextReaderPtr	xmlNewTextReaderFilename	(const char * URI)
    +

    Create an xmlTextReader structure fed with the resource at @URI

    +
    URI:the URI of the resource to process
    Returns:the new xmlTextReaderPtr or NULL in case of error
    +
    +

    xmlReaderForDoc ()

    xmlTextReaderPtr	xmlReaderForDoc	(const xmlChar * cur, 
    const char * URL,
    const char * encoding,
    int options)
    +

    Create an xmltextReader for an XML in-memory document. The parsing flags @options are a combination of xmlParserOption.

    +
    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
    Returns:the new reader or NULL in case of error.
    +
    +

    xmlReaderForFd ()

    xmlTextReaderPtr	xmlReaderForFd	(int fd, 
    const char * URL,
    const char * encoding,
    int options)
    +

    Create an xmltextReader for an XML from a file descriptor. The parsing flags @options are a combination of xmlParserOption. NOTE that the file descriptor will not be closed when the reader is closed or reset.

    +
    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
    Returns:the new reader or NULL in case of error.
    +
    +

    xmlReaderForFile ()

    xmlTextReaderPtr	xmlReaderForFile	(const char * filename, 
    const char * encoding,
    int options)
    +

    parse an XML file from the filesystem or the network. The parsing flags @options are a combination of xmlParserOption.

    +
    filename:a file or URL
    encoding:the document encoding, or NULL
    options:a combination of xmlParserOption
    Returns:the new reader or NULL in case of error.
    +
    +

    xmlReaderForIO ()

    xmlTextReaderPtr	xmlReaderForIO	(xmlInputReadCallback ioread, 
    xmlInputCloseCallback ioclose,
    void * ioctx,
    const char * URL,
    const char * encoding,
    int options)
    +

    Create an xmltextReader for an XML document from I/O functions and source. The parsing flags @options are a combination of xmlParserOption.

    +
    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
    Returns:the new reader or NULL in case of error.
    +
    +

    xmlReaderForMemory ()

    xmlTextReaderPtr	xmlReaderForMemory	(const char * buffer, 
    int size,
    const char * URL,
    const char * encoding,
    int options)
    +

    Create an xmltextReader for an XML in-memory document. The parsing flags @options are a combination of xmlParserOption.

    +
    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
    Returns:the new reader or NULL in case of error.
    +
    +

    xmlReaderNewDoc ()

    int	xmlReaderNewDoc			(xmlTextReaderPtr reader, 
    const xmlChar * cur,
    const char * URL,
    const char * encoding,
    int options)
    +

    Setup an xmltextReader to parse an XML in-memory document. The parsing flags @options are a combination of xmlParserOption. This reuses the existing @reader xmlTextReader.

    +
    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
    Returns:0 in case of success and -1 in case of error
    +
    +

    xmlReaderNewFd ()

    int	xmlReaderNewFd			(xmlTextReaderPtr reader, 
    int fd,
    const char * URL,
    const char * encoding,
    int options)
    +

    Setup an xmltextReader to parse an XML from a file descriptor. NOTE that the file descriptor will not be closed when the reader is closed or reset. The parsing flags @options are a combination of xmlParserOption. This reuses the existing @reader xmlTextReader.

    +
    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
    Returns:0 in case of success and -1 in case of error
    +
    +

    xmlReaderNewFile ()

    int	xmlReaderNewFile		(xmlTextReaderPtr reader, 
    const char * filename,
    const char * encoding,
    int options)
    +

    parse an XML file from the filesystem or the network. The parsing flags @options are a combination of xmlParserOption. This reuses the existing @reader xmlTextReader.

    +
    reader:an XML reader
    filename:a file or URL
    encoding:the document encoding, or NULL
    options:a combination of xmlParserOption
    Returns:0 in case of success and -1 in case of error
    +
    +

    xmlReaderNewIO ()

    int	xmlReaderNewIO			(xmlTextReaderPtr reader, 
    xmlInputReadCallback ioread,
    xmlInputCloseCallback ioclose,
    void * ioctx,
    const char * URL,
    const char * encoding,
    int options)
    +

    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.

    +
    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
    Returns:0 in case of success and -1 in case of error
    +
    +

    xmlReaderNewMemory ()

    int	xmlReaderNewMemory		(xmlTextReaderPtr reader, 
    const char * buffer,
    int size,
    const char * URL,
    const char * encoding,
    int options)
    +

    Setup an xmltextReader to parse an XML in-memory document. The parsing flags @options are a combination of xmlParserOption. This reuses the existing @reader xmlTextReader.

    +
    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
    Returns:0 in case of success and -1 in case of error
    +
    +

    xmlReaderNewWalker ()

    int	xmlReaderNewWalker		(xmlTextReaderPtr reader, 
    xmlDocPtr doc)
    +

    Setup an xmltextReader to parse a preparsed XML document. This reuses the existing @reader xmlTextReader.

    +
    reader:an XML reader
    doc:a preparsed document
    Returns:0 in case of success and -1 in case of error
    +
    +

    xmlReaderWalker ()

    xmlTextReaderPtr	xmlReaderWalker	(xmlDocPtr doc)
    +

    Create an xmltextReader for a preparsed document.

    +
    doc:a preparsed document
    Returns:the new reader or NULL in case of error.
    +
    +

    xmlTextReaderAttributeCount ()

    int	xmlTextReaderAttributeCount	(xmlTextReaderPtr reader)
    +

    Provides the number of attributes of the current node

    +
    reader:the xmlTextReaderPtr used
    Returns:0 i no attributes, -1 in case of error or the attribute count
    +
    +

    xmlTextReaderBaseUri ()

    xmlChar *	xmlTextReaderBaseUri	(xmlTextReaderPtr reader)
    +

    The base URI of the node.

    +
    reader:the xmlTextReaderPtr used
    Returns:the base URI or NULL if not available, if non NULL it need to be freed by the caller.
    +
    +

    xmlTextReaderByteConsumed ()

    long	xmlTextReaderByteConsumed	(xmlTextReaderPtr reader)
    +

    This function provides the current index of the parser used by the reader, relative to the start of the current entity. This function actually just wraps a call to xmlBytesConsumed() for the parser context associated with the reader. See xmlBytesConsumed() for more information.

    +
    reader:an XML reader
    Returns:the index in bytes from the beginning of the entity or -1 in case the index could not be computed.
    +
    +

    xmlTextReaderClose ()

    int	xmlTextReaderClose		(xmlTextReaderPtr reader)
    +

    This method releases any resources allocated by the current instance changes the state to Closed and close any underlying input.

    +
    reader:the xmlTextReaderPtr used
    Returns:0 or -1 in case of error
    +
    +

    xmlTextReaderConstBaseUri ()

    const xmlChar *	xmlTextReaderConstBaseUri	(xmlTextReaderPtr reader)
    +

    The base URI of the node.

    +
    reader:the xmlTextReaderPtr used
    Returns:the base URI or NULL if not available, the string will be deallocated with the reader
    +
    +

    xmlTextReaderConstEncoding ()

    const xmlChar *	xmlTextReaderConstEncoding	(xmlTextReaderPtr reader)
    +

    Determine the encoding of the document being read.

    +
    reader:the xmlTextReaderPtr used
    Returns:a string containing the encoding of the document or NULL in case of error. The string is deallocated with the reader.
    +
    +

    xmlTextReaderConstLocalName ()

    const xmlChar *	xmlTextReaderConstLocalName	(xmlTextReaderPtr reader)
    +

    The local name of the node.

    +
    reader:the xmlTextReaderPtr used
    Returns:the local name or NULL if not available, the string will be deallocated with the reader.
    +
    +

    xmlTextReaderConstName ()

    const xmlChar *	xmlTextReaderConstName	(xmlTextReaderPtr reader)
    +

    The qualified name of the node, equal to Prefix :LocalName.

    +
    reader:the xmlTextReaderPtr used
    Returns:the local name or NULL if not available, the string is deallocated with the reader.
    +
    +

    xmlTextReaderConstNamespaceUri ()

    const xmlChar *	xmlTextReaderConstNamespaceUri	(xmlTextReaderPtr reader)
    +

    The URI defining the namespace associated with the node.

    +
    reader:the xmlTextReaderPtr used
    Returns:the namespace URI or NULL if not available, the string will be deallocated with the reader
    +
    +

    xmlTextReaderConstPrefix ()

    const xmlChar *	xmlTextReaderConstPrefix	(xmlTextReaderPtr reader)
    +

    A shorthand reference to the namespace associated with the node.

    +
    reader:the xmlTextReaderPtr used
    Returns:the prefix or NULL if not available, the string is deallocated with the reader.
    +
    +

    xmlTextReaderConstString ()

    const xmlChar *	xmlTextReaderConstString	(xmlTextReaderPtr reader, 
    const xmlChar * str)
    +

    Get an interned string from the reader, allows for example to speedup string name comparisons

    +
    reader:the xmlTextReaderPtr used
    str:the string to intern.
    Returns:an interned copy of the string or NULL in case of error. The string will be deallocated with the reader.
    +
    +

    xmlTextReaderConstValue ()

    const xmlChar *	xmlTextReaderConstValue	(xmlTextReaderPtr reader)
    +

    Provides the text value of the node if present

    +
    reader:the xmlTextReaderPtr used
    Returns:the string or NULL if not available. The result will be deallocated on the next Read() operation.
    +
    +

    xmlTextReaderConstXmlLang ()

    const xmlChar *	xmlTextReaderConstXmlLang	(xmlTextReaderPtr reader)
    +

    The xml:lang scope within which the node resides.

    +
    reader:the xmlTextReaderPtr used
    Returns:the xml:lang value or NULL if none exists.
    +
    +

    xmlTextReaderConstXmlVersion ()

    const xmlChar *	xmlTextReaderConstXmlVersion	(xmlTextReaderPtr reader)
    +

    Determine the XML version of the document being read.

    +
    reader:the xmlTextReaderPtr used
    Returns:a string containing the XML version of the document or NULL in case of error. The string is deallocated with the reader.
    +
    +

    xmlTextReaderCurrentDoc ()

    xmlDocPtr	xmlTextReaderCurrentDoc	(xmlTextReaderPtr reader)
    +

    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.

    +
    reader:the xmlTextReaderPtr used
    Returns:the xmlDocPtr or NULL in case of error.
    +
    +

    xmlTextReaderCurrentNode ()

    xmlNodePtr	xmlTextReaderCurrentNode	(xmlTextReaderPtr reader)
    +

    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.

    +
    reader:the xmlTextReaderPtr used
    Returns:the xmlNodePtr or NULL in case of error.
    +
    +

    xmlTextReaderDepth ()

    int	xmlTextReaderDepth		(xmlTextReaderPtr reader)
    +

    The depth of the node in the tree.

    +
    reader:the xmlTextReaderPtr used
    Returns:the depth or -1 in case of error
    +
    +

    xmlTextReaderExpand ()

    xmlNodePtr	xmlTextReaderExpand	(xmlTextReaderPtr reader)
    +

    Reads the contents of the current node and the full subtree. It then makes the subtree available until the next xmlTextReaderRead() call

    +
    reader:the xmlTextReaderPtr used
    Returns:a node pointer valid until the next xmlTextReaderRead() call or NULL in case of error.
    +
    +

    xmlTextReaderGetAttribute ()

    xmlChar *	xmlTextReaderGetAttribute	(xmlTextReaderPtr reader, 
    const xmlChar * name)
    +

    Provides the value of the attribute with the specified qualified name.

    +
    reader:the xmlTextReaderPtr used
    name:the qualified name of the 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.
    +
    +

    xmlTextReaderGetAttributeNo ()

    xmlChar *	xmlTextReaderGetAttributeNo	(xmlTextReaderPtr reader, 
    int no)
    +

    Provides the value of the attribute with the specified index relative to the containing element.

    +
    reader:the xmlTextReaderPtr used
    no:the zero-based index of the attribute 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.
    +
    +

    xmlTextReaderGetAttributeNs ()

    xmlChar *	xmlTextReaderGetAttributeNs	(xmlTextReaderPtr reader, 
    const xmlChar * localName,
    const xmlChar * namespaceURI)
    +

    Provides the value of the specified attribute

    +
    reader:the xmlTextReaderPtr used
    localName:the local name of the attribute.
    namespaceURI:the namespace URI of the 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.
    +
    +

    xmlTextReaderGetErrorHandler ()

    void	xmlTextReaderGetErrorHandler	(xmlTextReaderPtr reader, 
    xmlTextReaderErrorFunc * f,
    void ** arg)
    +

    Retrieve the error callback function and user argument.

    +
    reader:the xmlTextReaderPtr used
    f:the callback function or NULL is no callback has been registered
    arg:a user argument
    +
    +

    xmlTextReaderGetParserColumnNumber ()

    int	xmlTextReaderGetParserColumnNumber	(xmlTextReaderPtr reader)
    +

    Provide the column number of the current parsing point.

    +
    reader:the user data (XML reader context)
    Returns:an int or 0 if not available
    +
    +

    xmlTextReaderGetParserLineNumber ()

    int	xmlTextReaderGetParserLineNumber	(xmlTextReaderPtr reader)
    +

    Provide the line number of the current parsing point.

    +
    reader:the user data (XML reader context)
    Returns:an int or 0 if not available
    +
    +

    xmlTextReaderGetParserProp ()

    int	xmlTextReaderGetParserProp	(xmlTextReaderPtr reader, 
    int prop)
    +

    Read the parser internal property.

    +
    reader:the xmlTextReaderPtr used
    prop:the xmlParserProperties to get
    Returns:the value, usually 0 or 1, or -1 in case of error.
    +
    +

    xmlTextReaderGetRemainder ()

    xmlParserInputBufferPtr	xmlTextReaderGetRemainder	(xmlTextReaderPtr reader)
    +

    Method to get the remainder of the buffered XML. this method stops the parser, set its state to End Of File and return the input stream with what is left that the parser did not use. The implementation is not good, the parser certainly procgressed past what's left in reader->input, and there is an allocation problem. Best would be to rewrite it differently.

    +
    reader:the xmlTextReaderPtr used
    Returns:the xmlParserInputBufferPtr attached to the XML or NULL in case of error.
    +
    +

    xmlTextReaderHasAttributes ()

    int	xmlTextReaderHasAttributes	(xmlTextReaderPtr reader)
    +

    Whether the node has attributes.

    +
    reader:the xmlTextReaderPtr used
    Returns:1 if true, 0 if false, and -1 in case or error
    +
    +

    xmlTextReaderHasValue ()

    int	xmlTextReaderHasValue		(xmlTextReaderPtr reader)
    +

    Whether the node can have a text value.

    +
    reader:the xmlTextReaderPtr used
    Returns:1 if true, 0 if false, and -1 in case or error
    +
    +

    xmlTextReaderIsDefault ()

    int	xmlTextReaderIsDefault		(xmlTextReaderPtr reader)
    +

    Whether an Attribute node was generated from the default value defined in the DTD or schema.

    +
    reader:the xmlTextReaderPtr used
    Returns:0 if not defaulted, 1 if defaulted, and -1 in case of error
    +
    +

    xmlTextReaderIsEmptyElement ()

    int	xmlTextReaderIsEmptyElement	(xmlTextReaderPtr reader)
    +

    Check if the current node is empty

    +
    reader:the xmlTextReaderPtr used
    Returns:1 if empty, 0 if not and -1 in case of error
    +
    +

    xmlTextReaderIsNamespaceDecl ()

    int	xmlTextReaderIsNamespaceDecl	(xmlTextReaderPtr reader)
    +

    Determine whether the current node is a namespace declaration rather than a regular attribute.

    +
    reader:the xmlTextReaderPtr used
    Returns:1 if the current node is a namespace declaration, 0 if it is a regular attribute or other type of node, or -1 in case of error.
    +
    +

    xmlTextReaderIsValid ()

    int	xmlTextReaderIsValid		(xmlTextReaderPtr reader)
    +

    Retrieve the validity status from the parser context

    +
    reader:the xmlTextReaderPtr used
    Returns:the flag value 1 if valid, 0 if no, and -1 in case of error
    +
    +

    xmlTextReaderLocalName ()

    xmlChar *	xmlTextReaderLocalName	(xmlTextReaderPtr reader)
    +

    The local name of the node.

    +
    reader:the xmlTextReaderPtr used
    Returns:the local name or NULL if not available, if non NULL it need to be freed by the caller.
    +
    +

    xmlTextReaderLocatorBaseURI ()

    xmlChar *	xmlTextReaderLocatorBaseURI	(xmlTextReaderLocatorPtr locator)
    +

    Obtain the base URI for the given locator.

    +
    locator:the xmlTextReaderLocatorPtr used
    Returns:the base URI or NULL in case of error, if non NULL it need to be freed by the caller.
    +
    +

    xmlTextReaderLocatorLineNumber ()

    int	xmlTextReaderLocatorLineNumber	(xmlTextReaderLocatorPtr locator)
    +

    Obtain the line number for the given locator.

    +
    locator:the xmlTextReaderLocatorPtr used
    Returns:the line number or -1 in case of error.
    +
    +

    xmlTextReaderLookupNamespace ()

    xmlChar *	xmlTextReaderLookupNamespace	(xmlTextReaderPtr reader, 
    const xmlChar * prefix)
    +

    Resolves a namespace prefix in the scope of the current element.

    +
    reader:the xmlTextReaderPtr used
    prefix:the prefix whose namespace URI is to be resolved. To return the default namespace, specify NULL
    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.
    +
    +

    xmlTextReaderMoveToAttribute ()

    int	xmlTextReaderMoveToAttribute	(xmlTextReaderPtr reader, 
    const xmlChar * name)
    +

    Moves the position of the current instance to the attribute with the specified qualified name.

    +
    reader:the xmlTextReaderPtr used
    name:the qualified name of the attribute.
    Returns:1 in case of success, -1 in case of error, 0 if not found
    +
    +

    xmlTextReaderMoveToAttributeNo ()

    int	xmlTextReaderMoveToAttributeNo	(xmlTextReaderPtr reader, 
    int no)
    +

    Moves the position of the current instance to the attribute with the specified index relative to the containing element.

    +
    reader:the xmlTextReaderPtr used
    no:the zero-based index of the attribute relative to the containing element.
    Returns:1 in case of success, -1 in case of error, 0 if not found
    +
    +

    xmlTextReaderMoveToAttributeNs ()

    int	xmlTextReaderMoveToAttributeNs	(xmlTextReaderPtr reader, 
    const xmlChar * localName,
    const xmlChar * namespaceURI)
    +

    Moves the position of the current instance to the attribute with the specified local name and namespace URI.

    +
    reader:the xmlTextReaderPtr used
    localName:the local name of the attribute.
    namespaceURI:the namespace URI of the attribute.
    Returns:1 in case of success, -1 in case of error, 0 if not found
    +
    +

    xmlTextReaderMoveToElement ()

    int	xmlTextReaderMoveToElement	(xmlTextReaderPtr reader)
    +

    Moves the position of the current instance to the node that contains the current Attribute node.

    +
    reader:the xmlTextReaderPtr used
    Returns:1 in case of success, -1 in case of error, 0 if not moved
    +
    +

    xmlTextReaderMoveToFirstAttribute ()

    int	xmlTextReaderMoveToFirstAttribute	(xmlTextReaderPtr reader)
    +

    Moves the position of the current instance to the first attribute associated with the current node.

    +
    reader:the xmlTextReaderPtr used
    Returns:1 in case of success, -1 in case of error, 0 if not found
    +
    +

    xmlTextReaderMoveToNextAttribute ()

    int	xmlTextReaderMoveToNextAttribute	(xmlTextReaderPtr reader)
    +

    Moves the position of the current instance to the next attribute associated with the current node.

    +
    reader:the xmlTextReaderPtr used
    Returns:1 in case of success, -1 in case of error, 0 if not found
    +
    +

    xmlTextReaderName ()

    xmlChar *	xmlTextReaderName	(xmlTextReaderPtr reader)
    +

    The qualified name of the node, equal to Prefix :LocalName.

    +
    reader:the xmlTextReaderPtr used
    Returns:the local name or NULL if not available, if non NULL it need to be freed by the caller.
    +
    +

    xmlTextReaderNamespaceUri ()

    xmlChar *	xmlTextReaderNamespaceUri	(xmlTextReaderPtr reader)
    +

    The URI defining the namespace associated with the node.

    +
    reader:the xmlTextReaderPtr used
    Returns:the namespace URI or NULL if not available, if non NULL it need to be freed by the caller.
    +
    +

    xmlTextReaderNext ()

    int	xmlTextReaderNext		(xmlTextReaderPtr reader)
    +

    Skip to the node following the current one in document order while avoiding the subtree if any.

    +
    reader:the xmlTextReaderPtr used
    Returns:1 if the node was read successfully, 0 if there is no more nodes to read, or -1 in case of error
    +
    +

    xmlTextReaderNextSibling ()

    int	xmlTextReaderNextSibling	(xmlTextReaderPtr reader)
    +

    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

    +
    reader:the xmlTextReaderPtr used
    Returns:1 if the node was read successfully, 0 if there is no more nodes to read, or -1 in case of error
    +
    +

    xmlTextReaderNodeType ()

    int	xmlTextReaderNodeType		(xmlTextReaderPtr reader)
    +

    Get the node type of the current node Reference: http://www.gnu.org/software/dotgnu/pnetlib-doc/System/Xml/XmlNodeType.html

    +
    reader:the xmlTextReaderPtr used
    Returns:the xmlNodeType of the current node or -1 in case of error
    +
    +

    xmlTextReaderNormalization ()

    int	xmlTextReaderNormalization	(xmlTextReaderPtr reader)
    +

    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.

    +
    reader:the xmlTextReaderPtr used
    Returns:1 or -1 in case of error.
    +
    +

    xmlTextReaderPrefix ()

    xmlChar *	xmlTextReaderPrefix	(xmlTextReaderPtr reader)
    +

    A shorthand reference to the namespace associated with the node.

    +
    reader:the xmlTextReaderPtr used
    Returns:the prefix or NULL if not available, if non NULL it need to be freed by the caller.
    +
    +

    xmlTextReaderPreserve ()

    xmlNodePtr	xmlTextReaderPreserve	(xmlTextReaderPtr reader)
    +

    This tells the XML Reader to preserve the current node. The caller must also use xmlTextReaderCurrentDoc() to keep an handle on the resulting document once parsing has finished

    +
    reader:the xmlTextReaderPtr used
    Returns:the xmlNodePtr or NULL in case of error.
    +
    +

    xmlTextReaderPreservePattern ()

    int	xmlTextReaderPreservePattern	(xmlTextReaderPtr reader, 
    const xmlChar * pattern,
    const xmlChar ** namespaces)
    +

    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

    +
    reader:the xmlTextReaderPtr used
    pattern:an XPath subset pattern
    namespaces:the prefix definitions, array of [URI, prefix] or NULL
    Returns:a positive number in case of success and -1 in case of error
    +
    +

    xmlTextReaderQuoteChar ()

    int	xmlTextReaderQuoteChar		(xmlTextReaderPtr reader)
    +

    The quotation mark character used to enclose the value of an attribute.

    +
    reader:the xmlTextReaderPtr used
    Returns:" or ' and -1 in case of error
    +
    +

    xmlTextReaderRead ()

    int	xmlTextReaderRead		(xmlTextReaderPtr reader)
    +

    Moves the position of the current instance to the next node in the stream, exposing its properties.

    +
    reader:the xmlTextReaderPtr used
    Returns:1 if the node was read successfully, 0 if there is no more nodes to read, or -1 in case of error
    +
    +

    xmlTextReaderReadAttributeValue ()

    int	xmlTextReaderReadAttributeValue	(xmlTextReaderPtr reader)
    +

    Parses an attribute value into one or more Text and EntityReference nodes.

    +
    reader:the xmlTextReaderPtr used
    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.
    +
    +

    xmlTextReaderReadInnerXml ()

    xmlChar *	xmlTextReaderReadInnerXml	(xmlTextReaderPtr reader)
    +

    Reads the contents of the current node, including child nodes and markup.

    +
    reader:the xmlTextReaderPtr used
    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.
    +
    +

    xmlTextReaderReadOuterXml ()

    xmlChar *	xmlTextReaderReadOuterXml	(xmlTextReaderPtr reader)
    +

    Reads the contents of the current node, including child nodes and markup.

    +
    reader:the xmlTextReaderPtr used
    Returns:a string containing the node and any XML content, or NULL if the current node cannot be serialized. The string must be deallocated by the caller.
    +
    +

    xmlTextReaderReadState ()

    int	xmlTextReaderReadState		(xmlTextReaderPtr reader)
    +

    Gets the read state of the reader.

    +
    reader:the xmlTextReaderPtr used
    Returns:the state value, or -1 in case of error
    +
    +

    xmlTextReaderReadString ()

    xmlChar *	xmlTextReaderReadString	(xmlTextReaderPtr reader)
    +

    Reads the contents of an element or a text node as a string.

    +
    reader:the xmlTextReaderPtr used
    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.
    +
    +

    xmlTextReaderRelaxNGSetSchema ()

    int	xmlTextReaderRelaxNGSetSchema	(xmlTextReaderPtr reader, 
    xmlRelaxNGPtr 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.

    +
    reader:the xmlTextReaderPtr used
    schema:a precompiled RelaxNG schema
    Returns:0 in case the RelaxNG validation could be (des)activated and -1 in case of error.
    +
    +

    xmlTextReaderRelaxNGValidate ()

    int	xmlTextReaderRelaxNGValidate	(xmlTextReaderPtr reader, 
    const char * rng)
    +

    Use RelaxNG schema to validate the document as it is processed. Activation is only possible before the first Read(). If @rng is NULL, then RelaxNG schema validation is deactivated.

    +
    reader:the xmlTextReaderPtr used
    rng:the path to a RelaxNG schema or NULL
    Returns:0 in case the schemas validation could be (de)activated and -1 in case of error.
    +
    +

    xmlTextReaderRelaxNGValidateCtxt ()

    int	xmlTextReaderRelaxNGValidateCtxt	(xmlTextReaderPtr reader, 
    xmlRelaxNGValidCtxtPtr ctxt,
    int options)
    +

    Use RelaxNG schema context to validate the document as it is processed. Activation is only possible before the first Read(). If @ctxt is NULL, then RelaxNG schema validation is deactivated.

    +
    reader:the xmlTextReaderPtr used
    ctxt:the RelaxNG schema validation context or NULL
    options:options (not used yet)
    Returns:0 in case the schemas validation could be (de)activated and -1 in case of error.
    +
    +

    xmlTextReaderSchemaValidate ()

    int	xmlTextReaderSchemaValidate	(xmlTextReaderPtr reader, 
    const char * xsd)
    +

    Use W3C XSD schema to validate the document as it is processed. Activation is only possible before the first Read(). If @xsd is NULL, then XML Schema validation is deactivated.

    +
    reader:the xmlTextReaderPtr used
    xsd:the path to a W3C XSD schema or NULL
    Returns:0 in case the schemas validation could be (de)activated and -1 in case of error.
    +
    +

    xmlTextReaderSchemaValidateCtxt ()

    int	xmlTextReaderSchemaValidateCtxt	(xmlTextReaderPtr reader, 
    xmlSchemaValidCtxtPtr ctxt,
    int options)
    +

    Use W3C XSD schema context to validate the document as it is processed. Activation is only possible before the first Read(). If @ctxt is NULL, then XML Schema validation is deactivated.

    +
    reader:the xmlTextReaderPtr used
    ctxt:the XML Schema validation context or NULL
    options:options (not used yet)
    Returns:0 in case the schemas validation could be (de)activated and -1 in case of error.
    +
    +

    xmlTextReaderSetErrorHandler ()

    void	xmlTextReaderSetErrorHandler	(xmlTextReaderPtr reader, 
    xmlTextReaderErrorFunc f,
    void * arg)
    +

    Register a callback function that will be called on error and warnings. If @f is NULL, the default error and warning handlers are restored.

    +
    reader:the xmlTextReaderPtr used
    f:the callback function to call on error and warnings
    arg:a user argument to pass to the callback function
    +
    +

    xmlTextReaderSetParserProp ()

    int	xmlTextReaderSetParserProp	(xmlTextReaderPtr reader, 
    int prop,
    int value)
    +

    Change the parser processing behaviour by changing some of its internal properties. Note that some properties can only be changed before any read has been done.

    +
    reader:the xmlTextReaderPtr used
    prop:the xmlParserProperties to set
    value:usually 0 or 1 to (de)activate it
    Returns:0 if the call was successful, or -1 in case of error
    +
    +

    xmlTextReaderSetSchema ()

    int	xmlTextReaderSetSchema		(xmlTextReaderPtr reader, 
    xmlSchemaPtr schema)
    +

    Use XSD Schema to validate the document as it is processed. Activation is only possible before the first Read(). if @schema is NULL, then Schema validation is desactivated. @ The @schema should not be freed until the reader is deallocated or its use has been deactivated.

    +
    reader:the xmlTextReaderPtr used
    schema:a precompiled Schema schema
    Returns:0 in case the Schema validation could be (des)activated and -1 in case of error.
    +
    +

    xmlTextReaderSetStructuredErrorHandler ()

    void	xmlTextReaderSetStructuredErrorHandler	(xmlTextReaderPtr reader, 
    xmlStructuredErrorFunc f,
    void * arg)
    +

    Register a callback function that will be called on error and warnings. If @f is NULL, the default error and warning handlers are restored.

    +
    reader:the xmlTextReaderPtr used
    f:the callback function to call on error and warnings
    arg:a user argument to pass to the callback function
    +
    +

    xmlTextReaderSetup ()

    int	xmlTextReaderSetup		(xmlTextReaderPtr reader, 
    xmlParserInputBufferPtr input,
    const char * URL,
    const char * encoding,
    int options)
    +

    Setup an XML reader with new options

    +
    reader:an XML reader
    input:xmlParserInputBufferPtr used to feed the reader, will be destroyed with it.
    URL:the base URL to use for the document
    encoding:the document encoding, or NULL
    options:a combination of xmlParserOption
    Returns:0 in case of success and -1 in case of error.
    +
    +

    xmlTextReaderStandalone ()

    int	xmlTextReaderStandalone		(xmlTextReaderPtr reader)
    +

    Determine the standalone status of the document being read.

    +
    reader:the xmlTextReaderPtr used
    Returns:1 if the document was declared to be standalone, 0 if it was declared to be not standalone, or -1 if the document did not specify its standalone status or in case of error.
    +
    +

    xmlTextReaderValue ()

    xmlChar *	xmlTextReaderValue	(xmlTextReaderPtr reader)
    +

    Provides the text value of the node if present

    +
    reader:the xmlTextReaderPtr used
    Returns:the string or NULL if not available. The result must be deallocated with xmlFree()
    +
    +

    xmlTextReaderXmlLang ()

    xmlChar *	xmlTextReaderXmlLang	(xmlTextReaderPtr reader)
    +

    The xml:lang scope within which the node resides.

    +
    reader:the xmlTextReaderPtr used
    Returns:the xml:lang value or NULL if none exists., if non NULL it need to be freed by the caller.
    +
    +
    +
    + + diff --git a/doc/devhelp/libxml2-xmlregexp.html b/doc/devhelp/libxml2-xmlregexp.html new file mode 100644 index 0000000..8d5c80e --- /dev/null +++ b/doc/devhelp/libxml2-xmlregexp.html @@ -0,0 +1,280 @@ + + + + + xmlregexp: regular expressions handling + + + + + + + + + + + + + + + + +

    + xmlregexp +

    +

    xmlregexp - regular expressions handling

    +

    basic API for libxml regular expressions handling used for XML Schemas and validation.

    +

    Author(s): Daniel Veillard

    +
    +

    Synopsis

    +
    typedef xmlRegExecCtxt * xmlRegExecCtxtPtr;
    +typedef struct _xmlExpCtxt xmlExpCtxt;
    +typedef xmlExpNode * xmlExpNodePtr;
    +typedef xmlExpCtxt * xmlExpCtxtPtr;
    +typedef enum xmlExpNodeType;
    +typedef struct _xmlRegExecCtxt xmlRegExecCtxt;
    +typedef struct _xmlExpNode xmlExpNode;
    +typedef struct _xmlRegexp xmlRegexp;
    +typedef xmlRegexp * xmlRegexpPtr;
    +typedef void xmlRegExecCallbacks		(xmlRegExecCtxtPtr exec, 
    const xmlChar * token,
    void * transdata,
    void * inputdata); +xmlRegExecCtxtPtr xmlRegNewExecCtxt (xmlRegexpPtr comp,
    xmlRegExecCallbacks callback,
    void * data); +xmlExpNodePtr xmlExpNewOr (xmlExpCtxtPtr ctxt,
    xmlExpNodePtr left,
    xmlExpNodePtr right); +void xmlRegFreeRegexp (xmlRegexpPtr regexp); +void xmlExpRef (xmlExpNodePtr exp); +int xmlRegexpIsDeterminist (xmlRegexpPtr comp); +int xmlRegExecErrInfo (xmlRegExecCtxtPtr exec,
    const xmlChar ** string,
    int * nbval,
    int * nbneg,
    xmlChar ** values,
    int * terminal); +void xmlRegFreeExecCtxt (xmlRegExecCtxtPtr exec); +int xmlExpCtxtNbCons (xmlExpCtxtPtr ctxt); +int xmlExpSubsume (xmlExpCtxtPtr ctxt,
    xmlExpNodePtr exp,
    xmlExpNodePtr sub); +int xmlRegExecPushString2 (xmlRegExecCtxtPtr exec,
    const xmlChar * value,
    const xmlChar * value2,
    void * data); +int xmlRegExecNextValues (xmlRegExecCtxtPtr exec,
    int * nbval,
    int * nbneg,
    xmlChar ** values,
    int * terminal); +xmlExpNodePtr xmlExpExpDerive (xmlExpCtxtPtr ctxt,
    xmlExpNodePtr exp,
    xmlExpNodePtr sub); +int xmlExpIsNillable (xmlExpNodePtr exp); +void xmlExpFreeCtxt (xmlExpCtxtPtr ctxt); +void xmlExpDump (xmlBufferPtr buf,
    xmlExpNodePtr expr); +xmlExpNodePtr xmlExpNewSeq (xmlExpCtxtPtr ctxt,
    xmlExpNodePtr left,
    xmlExpNodePtr right); +void xmlExpFree (xmlExpCtxtPtr ctxt,
    xmlExpNodePtr exp); +xmlExpNodePtr xmlExpNewRange (xmlExpCtxtPtr ctxt,
    xmlExpNodePtr subset,
    int min,
    int max); +xmlRegexpPtr xmlRegexpCompile (const xmlChar * regexp); +xmlExpNodePtr xmlExpNewAtom (xmlExpCtxtPtr ctxt,
    const xmlChar * name,
    int len); +int xmlRegexpExec (xmlRegexpPtr comp,
    const xmlChar * content); +int xmlRegExecPushString (xmlRegExecCtxtPtr exec,
    const xmlChar * value,
    void * data); +int xmlExpGetStart (xmlExpCtxtPtr ctxt,
    xmlExpNodePtr exp,
    const xmlChar ** tokList,
    int len); +xmlExpNodePtr xmlExpParse (xmlExpCtxtPtr ctxt,
    const char * expr); +xmlExpCtxtPtr xmlExpNewCtxt (int maxNodes,
    xmlDictPtr dict); +int xmlExpGetLanguage (xmlExpCtxtPtr ctxt,
    xmlExpNodePtr exp,
    const xmlChar ** langList,
    int len); +xmlExpNodePtr xmlExpStringDerive (xmlExpCtxtPtr ctxt,
    xmlExpNodePtr exp,
    const xmlChar * str,
    int len); +int xmlExpCtxtNbNodes (xmlExpCtxtPtr ctxt); +int xmlExpMaxToken (xmlExpNodePtr expr); +void xmlRegexpPrint (FILE * output,
    xmlRegexpPtr regexp); +
    +
    +
    +

    Description

    +
    +
    +

    Details

    +
    +

    Structure xmlExpCtxt

    struct _xmlExpCtxt {
    +The content of this structure is not made public by the API.
    +} xmlExpCtxt;
    +

    +

    +
    +

    Typedef xmlExpCtxtPtr

    xmlExpCtxt * xmlExpCtxtPtr;
    +

    +

    +
    +

    Structure xmlExpNode

    struct _xmlExpNode {
    +The content of this structure is not made public by the API.
    +} xmlExpNode;
    +

    +

    +
    +

    Typedef xmlExpNodePtr

    xmlExpNode * xmlExpNodePtr;
    +

    +

    +
    +

    Enum xmlExpNodeType

    enum xmlExpNodeType {
    +    XML_EXP_EMPTY = 0
    +    XML_EXP_FORBID = 1
    +    XML_EXP_ATOM = 2
    +    XML_EXP_SEQ = 3
    +    XML_EXP_OR = 4
    +    XML_EXP_COUNT = 5
    +};
    +

    +

    +
    +

    Structure xmlRegExecCtxt

    struct _xmlRegExecCtxt {
    +The content of this structure is not made public by the API.
    +} xmlRegExecCtxt;
    +

    +

    +
    +

    Typedef xmlRegExecCtxtPtr

    xmlRegExecCtxt * xmlRegExecCtxtPtr;
    +

    A libxml progressive regular expression evaluation context

    +
    +
    +

    Structure xmlRegexp

    struct _xmlRegexp {
    +The content of this structure is not made public by the API.
    +} xmlRegexp;
    +

    +

    +
    +

    Typedef xmlRegexpPtr

    xmlRegexp * xmlRegexpPtr;
    +

    A libxml regular expression, they can actually be far more complex thank the POSIX regex expressions.

    +
    +
    +

    Function type xmlRegExecCallbacks

    void	xmlRegExecCallbacks		(xmlRegExecCtxtPtr exec, 
    const xmlChar * token,
    void * transdata,
    void * inputdata)
    +

    Callback function when doing a transition in the automata

    +
    exec:the regular expression context
    token:the current token string
    transdata:transition data
    inputdata:input data
    +
    +

    Variable emptyExp

    xmlExpNodePtr emptyExp;
    +

    +

    +
    +

    Variable forbiddenExp

    xmlExpNodePtr forbiddenExp;
    +

    +

    +
    +

    xmlExpCtxtNbCons ()

    int	xmlExpCtxtNbCons		(xmlExpCtxtPtr ctxt)
    +

    Debugging facility provides the number of allocated nodes over lifetime

    +
    ctxt:an expression context
    Returns:the number of nodes ever allocated or -1 in case of error
    +
    +

    xmlExpCtxtNbNodes ()

    int	xmlExpCtxtNbNodes		(xmlExpCtxtPtr ctxt)
    +

    Debugging facility provides the number of allocated nodes at a that point

    +
    ctxt:an expression context
    Returns:the number of nodes in use or -1 in case of error
    +
    +

    xmlExpDump ()

    void	xmlExpDump			(xmlBufferPtr buf, 
    xmlExpNodePtr expr)
    +

    Serialize the expression as compiled to the buffer

    +
    buf:a buffer to receive the output
    expr:the compiled expression
    +
    +

    xmlExpExpDerive ()

    xmlExpNodePtr	xmlExpExpDerive		(xmlExpCtxtPtr ctxt, 
    xmlExpNodePtr exp,
    xmlExpNodePtr sub)
    +

    Evaluates the expression resulting from @exp consuming a sub expression @sub Based on algebraic derivation and sometimes direct Brzozowski derivation it usually tatkes less than linear time and can handle expressions generating infinite languages.

    +
    ctxt:the expressions context
    exp:the englobing expression
    sub:the subexpression
    Returns:the resulting expression or NULL in case of internal error, the result must be freed
    +
    +

    xmlExpFree ()

    void	xmlExpFree			(xmlExpCtxtPtr ctxt, 
    xmlExpNodePtr exp)
    +

    Dereference the expression

    +
    ctxt:the expression context
    exp:the expression
    +
    +

    xmlExpFreeCtxt ()

    void	xmlExpFreeCtxt			(xmlExpCtxtPtr ctxt)
    +

    Free an expression context

    +
    ctxt:an expression context
    +
    +

    xmlExpGetLanguage ()

    int	xmlExpGetLanguage		(xmlExpCtxtPtr ctxt, 
    xmlExpNodePtr exp,
    const xmlChar ** langList,
    int len)
    +

    Find all the strings used in @exp and store them in @list

    +
    ctxt:the expression context
    exp:the expression
    langList:where to store the tokens
    len:the allocated length of @list
    Returns:the number of unique strings found, -1 in case of errors and -2 if there is more than @len strings
    +
    +

    xmlExpGetStart ()

    int	xmlExpGetStart			(xmlExpCtxtPtr ctxt, 
    xmlExpNodePtr exp,
    const xmlChar ** tokList,
    int len)
    +

    Find all the strings that appears at the start of the languages accepted by @exp and store them in @list. E.g. for (a, b) | c it will return the list [a, c]

    +
    ctxt:the expression context
    exp:the expression
    tokList:where to store the tokens
    len:the allocated length of @list
    Returns:the number of unique strings found, -1 in case of errors and -2 if there is more than @len strings
    +
    +

    xmlExpIsNillable ()

    int	xmlExpIsNillable		(xmlExpNodePtr exp)
    +

    Finds if the expression is nillable, i.e. if it accepts the empty sequqnce

    +
    exp:the expression
    Returns:1 if nillable, 0 if not and -1 in case of error
    +
    +

    xmlExpMaxToken ()

    int	xmlExpMaxToken			(xmlExpNodePtr expr)
    +

    Indicate the maximum number of input a expression can accept

    +
    expr:a compiled expression
    Returns:the maximum length or -1 in case of error
    +
    +

    xmlExpNewAtom ()

    xmlExpNodePtr	xmlExpNewAtom		(xmlExpCtxtPtr ctxt, 
    const xmlChar * name,
    int len)
    +

    Get the atom associated to this name from that context

    +
    ctxt:the expression context
    name:the atom name
    len:the atom name length in byte (or -1);
    Returns:the node or NULL in case of error
    +
    +

    xmlExpNewCtxt ()

    xmlExpCtxtPtr	xmlExpNewCtxt		(int maxNodes, 
    xmlDictPtr dict)
    +

    Creates a new context for manipulating expressions

    +
    maxNodes:the maximum number of nodes
    dict:optional dictionary to use internally
    Returns:the context or NULL in case of error
    +
    +

    xmlExpNewOr ()

    xmlExpNodePtr	xmlExpNewOr		(xmlExpCtxtPtr ctxt, 
    xmlExpNodePtr left,
    xmlExpNodePtr right)
    +

    Get the atom associated to the choice @left | @right Note that @left and @right are consumed in the operation, to keep an handle on them use xmlExpRef() and use xmlExpFree() to release them, this is true even in case of failure (unless ctxt == NULL).

    +
    ctxt:the expression context
    left:left expression
    right:right expression
    Returns:the node or NULL in case of error
    +
    +

    xmlExpNewRange ()

    xmlExpNodePtr	xmlExpNewRange		(xmlExpCtxtPtr ctxt, 
    xmlExpNodePtr subset,
    int min,
    int max)
    +

    Get the atom associated to the range (@subset){@min, @max} Note that @subset is consumed in the operation, to keep an handle on it use xmlExpRef() and use xmlExpFree() to release it, this is true even in case of failure (unless ctxt == NULL).

    +
    ctxt:the expression context
    subset:the expression to be repeated
    min:the lower bound for the repetition
    max:the upper bound for the repetition, -1 means infinite
    Returns:the node or NULL in case of error
    +
    +

    xmlExpNewSeq ()

    xmlExpNodePtr	xmlExpNewSeq		(xmlExpCtxtPtr ctxt, 
    xmlExpNodePtr left,
    xmlExpNodePtr right)
    +

    Get the atom associated to the sequence @left , @right Note that @left and @right are consumed in the operation, to keep an handle on them use xmlExpRef() and use xmlExpFree() to release them, this is true even in case of failure (unless ctxt == NULL).

    +
    ctxt:the expression context
    left:left expression
    right:right expression
    Returns:the node or NULL in case of error
    +
    +

    xmlExpParse ()

    xmlExpNodePtr	xmlExpParse		(xmlExpCtxtPtr ctxt, 
    const char * expr)
    +

    Minimal parser for regexps, it understand the following constructs - string terminals - choice operator | - sequence operator , - subexpressions (...) - usual cardinality operators + * and ? - finite sequences { min, max } - infinite sequences { min, * } There is minimal checkings made especially no checking on strings values

    +
    ctxt:the expressions context
    expr:the 0 terminated string
    Returns:a new expression or NULL in case of failure
    +
    +

    xmlExpRef ()

    void	xmlExpRef			(xmlExpNodePtr exp)
    +

    Increase the reference count of the expression

    +
    exp:the expression
    +
    +

    xmlExpStringDerive ()

    xmlExpNodePtr	xmlExpStringDerive	(xmlExpCtxtPtr ctxt, 
    xmlExpNodePtr exp,
    const xmlChar * str,
    int len)
    +

    Do one step of Brzozowski derivation of the expression @exp with respect to the input string

    +
    ctxt:the expression context
    exp:the expression
    str:the string
    len:the string len in bytes if available
    Returns:the resulting expression or NULL in case of internal error
    +
    +

    xmlExpSubsume ()

    int	xmlExpSubsume			(xmlExpCtxtPtr ctxt, 
    xmlExpNodePtr exp,
    xmlExpNodePtr sub)
    +

    Check whether @exp accepts all the languages accexpted by @sub the input being a subexpression.

    +
    ctxt:the expressions context
    exp:the englobing expression
    sub:the subexpression
    Returns:1 if true 0 if false and -1 in case of failure.
    +
    +

    xmlRegExecErrInfo ()

    int	xmlRegExecErrInfo		(xmlRegExecCtxtPtr exec, 
    const xmlChar ** string,
    int * nbval,
    int * nbneg,
    xmlChar ** values,
    int * terminal)
    +

    Extract error informations from the regexp execution, the parameter @string will be updated with the value pushed and not accepted, the parameter @values must point to an array of @nbval string pointers on return nbval will contain the number of possible strings in that state and the @values array will be updated with them. The string values

    +
    exec:a regexp execution context generating an error
    string:return value for the error string
    nbval:pointer to the number of accepted values IN/OUT
    nbneg:return number of negative transitions
    values:pointer to the array of acceptable values
    terminal:return value if this was a terminal state
    Returns:will be freed with the @exec context and don't need to be deallocated. Returns: 0 in case of success or -1 in case of error.
    +
    +

    xmlRegExecNextValues ()

    int	xmlRegExecNextValues		(xmlRegExecCtxtPtr exec, 
    int * nbval,
    int * nbneg,
    xmlChar ** values,
    int * terminal)
    +

    Extract informations from the regexp execution, the parameter @values must point to an array of @nbval string pointers on return nbval will contain the number of possible strings in that state and the @values array will be updated with them. The string values

    +
    exec:a regexp execution context
    nbval:pointer to the number of accepted values IN/OUT
    nbneg:return number of negative transitions
    values:pointer to the array of acceptable values
    terminal:return value if this was a terminal state
    Returns:will be freed with the @exec context and don't need to be deallocated. Returns: 0 in case of success or -1 in case of error.
    +
    +

    xmlRegExecPushString ()

    int	xmlRegExecPushString		(xmlRegExecCtxtPtr exec, 
    const xmlChar * value,
    void * data)
    +

    Push one input token in the execution context

    +
    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
    Returns:1 if the regexp reached a final state, 0 if non-final, and a negative value in case of error.
    +
    +

    xmlRegExecPushString2 ()

    int	xmlRegExecPushString2		(xmlRegExecCtxtPtr exec, 
    const xmlChar * value,
    const xmlChar * value2,
    void * data)
    +

    Push one input token in the execution context

    +
    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
    Returns:1 if the regexp reached a final state, 0 if non-final, and a negative value in case of error.
    +
    +

    xmlRegFreeExecCtxt ()

    void	xmlRegFreeExecCtxt		(xmlRegExecCtxtPtr exec)
    +

    Free the structures associated to a regular expression evaulation context.

    +
    exec:a regular expression evaulation context
    +
    +

    xmlRegFreeRegexp ()

    void	xmlRegFreeRegexp		(xmlRegexpPtr regexp)
    +

    Free a regexp

    +
    regexp:the regexp
    +
    +

    xmlRegNewExecCtxt ()

    xmlRegExecCtxtPtr	xmlRegNewExecCtxt	(xmlRegexpPtr comp, 
    xmlRegExecCallbacks callback,
    void * data)
    +

    Build a context used for progressive evaluation of a regexp.

    +
    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
    Returns:the new context
    +
    +

    xmlRegexpCompile ()

    xmlRegexpPtr	xmlRegexpCompile	(const xmlChar * regexp)
    +

    Parses a regular expression conforming to XML Schemas Part 2 Datatype Appendix F and builds an automata suitable for testing strings against that regular expression

    +
    regexp:a regular expression string
    Returns:the compiled expression or NULL in case of error
    +
    +

    xmlRegexpExec ()

    int	xmlRegexpExec			(xmlRegexpPtr comp, 
    const xmlChar * content)
    +

    Check if the regular expression generates the value

    +
    comp:the compiled regular expression
    content:the value to check against the regular expression
    Returns:1 if it matches, 0 if not and a negative value in case of error
    +
    +

    xmlRegexpIsDeterminist ()

    int	xmlRegexpIsDeterminist		(xmlRegexpPtr comp)
    +

    Check if the regular expression is determinist

    +
    comp:the compiled regular expression
    Returns:1 if it yes, 0 if not and a negative value in case of error
    +
    +

    xmlRegexpPrint ()

    void	xmlRegexpPrint			(FILE * output, 
    xmlRegexpPtr regexp)
    +

    Print the content of the compiled regular expression

    +
    output:the file for the output debug
    regexp:the compiled regexp
    +
    +
    +
    + + diff --git a/doc/devhelp/libxml2-xmlsave.html b/doc/devhelp/libxml2-xmlsave.html new file mode 100644 index 0000000..f006e3b --- /dev/null +++ b/doc/devhelp/libxml2-xmlsave.html @@ -0,0 +1,133 @@ + + + + + xmlsave: the XML document serializer + + + + + + + + + + + + + + + + +

    + xmlsave +

    +

    xmlsave - the XML document serializer

    +

    API to save document or subtree of document

    +

    Author(s): Daniel Veillard

    +
    +

    Synopsis

    +
    typedef enum xmlSaveOption;
    +typedef struct _xmlSaveCtxt xmlSaveCtxt;
    +typedef xmlSaveCtxt * xmlSaveCtxtPtr;
    +xmlSaveCtxtPtr	xmlSaveToIO		(xmlOutputWriteCallback iowrite, 
    xmlOutputCloseCallback ioclose,
    void * ioctx,
    const char * encoding,
    int options); +xmlSaveCtxtPtr xmlSaveToFd (int fd,
    const char * encoding,
    int options); +int xmlSaveClose (xmlSaveCtxtPtr ctxt); +int xmlSaveSetAttrEscape (xmlSaveCtxtPtr ctxt,
    xmlCharEncodingOutputFunc escape); +xmlSaveCtxtPtr xmlSaveToBuffer (xmlBufferPtr buffer,
    const char * encoding,
    int options); +xmlSaveCtxtPtr xmlSaveToFilename (const char * filename,
    const char * encoding,
    int options); +int xmlSaveFlush (xmlSaveCtxtPtr ctxt); +long xmlSaveDoc (xmlSaveCtxtPtr ctxt,
    xmlDocPtr doc); +int xmlSaveSetEscape (xmlSaveCtxtPtr ctxt,
    xmlCharEncodingOutputFunc escape); +long xmlSaveTree (xmlSaveCtxtPtr ctxt,
    xmlNodePtr node); +
    +
    +
    +

    Description

    +
    +
    +

    Details

    +
    +

    Structure xmlSaveCtxt

    struct _xmlSaveCtxt {
    +The content of this structure is not made public by the API.
    +} xmlSaveCtxt;
    +

    +

    +
    +

    Typedef xmlSaveCtxtPtr

    xmlSaveCtxt * xmlSaveCtxtPtr;
    +

    +

    +
    +

    Enum xmlSaveOption

    enum xmlSaveOption {
    +    XML_SAVE_FORMAT = 1 /* format save output */
    +    XML_SAVE_NO_DECL = 2 /* drop the xml declaration */
    +    XML_SAVE_NO_EMPTY = 4 /* no empty tags */
    +    XML_SAVE_NO_XHTML = 8 /* disable XHTML1 specific rules */
    +    XML_SAVE_XHTML = 16 /* force XHTML1 specific rules */
    +    XML_SAVE_AS_XML = 32 /* force XML serialization on HTML doc */
    +    XML_SAVE_AS_HTML = 64 /* force HTML serialization on XML doc */
    +    XML_SAVE_WSNONSIG = 128 /*  format with non-significant whitespace */
    +};
    +

    +

    +
    +

    xmlSaveClose ()

    int	xmlSaveClose			(xmlSaveCtxtPtr ctxt)
    +

    Close a document saving context, i.e. make sure that all bytes have been output and free the associated data.

    +
    ctxt:a document saving context
    Returns:the number of byte written or -1 in case of error.
    +
    +

    xmlSaveDoc ()

    long	xmlSaveDoc			(xmlSaveCtxtPtr ctxt, 
    xmlDocPtr doc)
    +

    Save a full document to a saving context TODO: The function is not fully implemented yet as it does not return the byte count but 0 instead

    +
    ctxt:a document saving context
    doc:a document
    Returns:the number of byte written or -1 in case of error
    +
    +

    xmlSaveFlush ()

    int	xmlSaveFlush			(xmlSaveCtxtPtr ctxt)
    +

    Flush a document saving context, i.e. make sure that all bytes have been output.

    +
    ctxt:a document saving context
    Returns:the number of byte written or -1 in case of error.
    +
    +

    xmlSaveSetAttrEscape ()

    int	xmlSaveSetAttrEscape		(xmlSaveCtxtPtr ctxt, 
    xmlCharEncodingOutputFunc escape)
    +

    Set a custom escaping function to be used for text in attribute content

    +
    ctxt:a document saving context
    escape:the escaping function
    Returns:0 if successful or -1 in case of error.
    +
    +

    xmlSaveSetEscape ()

    int	xmlSaveSetEscape		(xmlSaveCtxtPtr ctxt, 
    xmlCharEncodingOutputFunc escape)
    +

    Set a custom escaping function to be used for text in element content

    +
    ctxt:a document saving context
    escape:the escaping function
    Returns:0 if successful or -1 in case of error.
    +
    +

    xmlSaveToBuffer ()

    xmlSaveCtxtPtr	xmlSaveToBuffer		(xmlBufferPtr buffer, 
    const char * encoding,
    int options)
    +

    Create a document saving context serializing to a buffer with the encoding and the options given

    +
    buffer:a buffer
    encoding:the encoding name to use or NULL
    options:a set of xmlSaveOptions
    Returns:a new serialization context or NULL in case of error.
    +
    +

    xmlSaveToFd ()

    xmlSaveCtxtPtr	xmlSaveToFd		(int fd, 
    const char * encoding,
    int options)
    +

    Create a document saving context serializing to a file descriptor with the encoding and the options given.

    +
    fd:a file descriptor number
    encoding:the encoding name to use or NULL
    options:a set of xmlSaveOptions
    Returns:a new serialization context or NULL in case of error.
    +
    +

    xmlSaveToFilename ()

    xmlSaveCtxtPtr	xmlSaveToFilename	(const char * filename, 
    const char * encoding,
    int options)
    +

    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.

    +
    filename:a file name or an URL
    encoding:the encoding name to use or NULL
    options:a set of xmlSaveOptions
    Returns:a new serialization context or NULL in case of error.
    +
    +

    xmlSaveToIO ()

    xmlSaveCtxtPtr	xmlSaveToIO		(xmlOutputWriteCallback iowrite, 
    xmlOutputCloseCallback ioclose,
    void * ioctx,
    const char * encoding,
    int options)
    +

    Create a document saving context serializing to a file descriptor with the encoding and the options given

    +
    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
    Returns:a new serialization context or NULL in case of error.
    +
    +

    xmlSaveTree ()

    long	xmlSaveTree			(xmlSaveCtxtPtr ctxt, 
    xmlNodePtr node)
    +

    Save a subtree starting at the node parameter to a saving context TODO: The function is not fully implemented yet as it does not return the byte count but 0 instead

    +
    ctxt:a document saving context
    node:the top node of the subtree to save
    Returns:the number of byte written or -1 in case of error
    +
    +
    +
    + + diff --git a/doc/devhelp/libxml2-xmlschemas.html b/doc/devhelp/libxml2-xmlschemas.html new file mode 100644 index 0000000..533c114 --- /dev/null +++ b/doc/devhelp/libxml2-xmlschemas.html @@ -0,0 +1,314 @@ + + + + + xmlschemas: incomplete XML Schemas structure implementation + + + + + + + + + + + + + + + + +

    + xmlschemas +

    +

    xmlschemas - incomplete XML Schemas structure implementation

    +

    interface to the XML Schemas handling and schema validity checking, it is incomplete right now.

    +

    Author(s): Daniel Veillard

    +
    +

    Synopsis

    +
    typedef xmlSchema * xmlSchemaPtr;
    +typedef struct _xmlSchemaParserCtxt xmlSchemaParserCtxt;
    +typedef enum xmlSchemaValidOption;
    +typedef xmlSchemaSAXPlugStruct * xmlSchemaSAXPlugPtr;
    +typedef struct _xmlSchemaSAXPlug xmlSchemaSAXPlugStruct;
    +typedef xmlSchemaValidCtxt * xmlSchemaValidCtxtPtr;
    +typedef xmlSchemaParserCtxt * xmlSchemaParserCtxtPtr;
    +typedef struct _xmlSchema xmlSchema;
    +typedef enum xmlSchemaValidError;
    +typedef struct _xmlSchemaValidCtxt xmlSchemaValidCtxt;
    +xmlSchemaParserCtxtPtr	xmlSchemaNewDocParserCtxt	(xmlDocPtr doc);
    +int	xmlSchemaSAXUnplug		(xmlSchemaSAXPlugPtr plug);
    +xmlSchemaPtr	xmlSchemaParse		(xmlSchemaParserCtxtPtr ctxt);
    +void	xmlSchemaFreeParserCtxt		(xmlSchemaParserCtxtPtr ctxt);
    +void	xmlSchemaValidateSetFilename	(xmlSchemaValidCtxtPtr vctxt, 
    const char * filename); +xmlSchemaParserCtxtPtr xmlSchemaNewParserCtxt (const char * URL); +int xmlSchemaIsValid (xmlSchemaValidCtxtPtr ctxt); +typedef void xmlSchemaValidityErrorFunc (void * ctx,
    const char * msg,
    ... ...); +xmlSchemaSAXPlugPtr xmlSchemaSAXPlug (xmlSchemaValidCtxtPtr ctxt,
    xmlSAXHandlerPtr * sax,
    void ** user_data); +int xmlSchemaValidateStream (xmlSchemaValidCtxtPtr ctxt,
    xmlParserInputBufferPtr input,
    xmlCharEncoding enc,
    xmlSAXHandlerPtr sax,
    void * user_data); +int xmlSchemaGetParserErrors (xmlSchemaParserCtxtPtr ctxt,
    xmlSchemaValidityErrorFunc * err,
    xmlSchemaValidityWarningFunc * warn,
    void ** ctx); +void xmlSchemaValidateSetLocator (xmlSchemaValidCtxtPtr vctxt,
    xmlSchemaValidityLocatorFunc f,
    void * ctxt); +int xmlSchemaValidateOneElement (xmlSchemaValidCtxtPtr ctxt,
    xmlNodePtr elem); +void xmlSchemaSetValidStructuredErrors (xmlSchemaValidCtxtPtr ctxt,
    xmlStructuredErrorFunc serror,
    void * ctx); +void xmlSchemaSetValidErrors (xmlSchemaValidCtxtPtr ctxt,
    xmlSchemaValidityErrorFunc err,
    xmlSchemaValidityWarningFunc warn,
    void * ctx); +int xmlSchemaValidCtxtGetOptions (xmlSchemaValidCtxtPtr ctxt); +int xmlSchemaValidateFile (xmlSchemaValidCtxtPtr ctxt,
    const char * filename,
    int options); +int xmlSchemaValidateDoc (xmlSchemaValidCtxtPtr ctxt,
    xmlDocPtr doc); +void xmlSchemaFree (xmlSchemaPtr schema); +xmlSchemaParserCtxtPtr xmlSchemaNewMemParserCtxt (const char * buffer,
    int size); +typedef int xmlSchemaValidityLocatorFunc (void * ctx,
    const char ** file,
    unsigned long * line); +int xmlSchemaGetValidErrors (xmlSchemaValidCtxtPtr ctxt,
    xmlSchemaValidityErrorFunc * err,
    xmlSchemaValidityWarningFunc * warn,
    void ** ctx); +int xmlSchemaSetValidOptions (xmlSchemaValidCtxtPtr ctxt,
    int options); +void xmlSchemaSetParserErrors (xmlSchemaParserCtxtPtr ctxt,
    xmlSchemaValidityErrorFunc err,
    xmlSchemaValidityWarningFunc warn,
    void * ctx); +typedef void xmlSchemaValidityWarningFunc (void * ctx,
    const char * msg,
    ... ...); +void xmlSchemaDump (FILE * output,
    xmlSchemaPtr schema); +void xmlSchemaFreeValidCtxt (xmlSchemaValidCtxtPtr ctxt); +xmlParserCtxtPtr xmlSchemaValidCtxtGetParserCtxt (xmlSchemaValidCtxtPtr ctxt); +void xmlSchemaSetParserStructuredErrors (xmlSchemaParserCtxtPtr ctxt,
    xmlStructuredErrorFunc serror,
    void * ctx); +xmlSchemaValidCtxtPtr xmlSchemaNewValidCtxt (xmlSchemaPtr schema); +
    +
    +
    +

    Description

    +
    +
    +

    Details

    +
    +

    Structure xmlSchema

    struct _xmlSchema {
    +    const xmlChar *	name	: schema name
    +    const xmlChar *	targetNamespace	: the target namespace
    +    const xmlChar *	version
    +    const xmlChar *	id	: Obsolete
    +    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
    +    int	counter	: used to give ononymous components unique names
    +    xmlHashTablePtr	idcDef	: All identity-constraint defs.
    +    void *	volatiles	: Obsolete
    +} xmlSchema;
    +

    +

    +
    +

    Structure xmlSchemaParserCtxt

    struct _xmlSchemaParserCtxt {
    +The content of this structure is not made public by the API.
    +} xmlSchemaParserCtxt;
    +

    +

    +
    +

    Typedef xmlSchemaParserCtxtPtr

    xmlSchemaParserCtxt * xmlSchemaParserCtxtPtr;
    +

    +

    +
    +

    Typedef xmlSchemaPtr

    xmlSchema * xmlSchemaPtr;
    +

    +

    +
    +

    Typedef xmlSchemaSAXPlugPtr

    xmlSchemaSAXPlugStruct * xmlSchemaSAXPlugPtr;
    +

    +

    +
    +

    Structure xmlSchemaSAXPlugStruct

    struct _xmlSchemaSAXPlug {
    +The content of this structure is not made public by the API.
    +} xmlSchemaSAXPlugStruct;
    +

    +

    +
    +

    Structure xmlSchemaValidCtxt

    struct _xmlSchemaValidCtxt {
    +The content of this structure is not made public by the API.
    +} xmlSchemaValidCtxt;
    +

    +

    +
    +

    Typedef xmlSchemaValidCtxtPtr

    xmlSchemaValidCtxt * xmlSchemaValidCtxtPtr;
    +

    +

    +
    + +
    +

    Enum xmlSchemaValidOption

    enum xmlSchemaValidOption {
    +    XML_SCHEMA_VAL_VC_I_CREATE = 1 /*  Default/fixed: create an attribute node * or an element's text node on the instance. * */
    +};
    +

    +

    +
    + +
    +
    +
    +
    +
    +

    xmlSchemaDump ()

    void	xmlSchemaDump			(FILE * output, 
    xmlSchemaPtr schema)
    +

    Dump a Schema structure.

    +
    output:the file output
    schema:a schema structure
    +
    +

    xmlSchemaFree ()

    void	xmlSchemaFree			(xmlSchemaPtr schema)
    +

    Deallocate a Schema structure.

    +
    schema:a schema structure
    +
    +

    xmlSchemaFreeParserCtxt ()

    void	xmlSchemaFreeParserCtxt		(xmlSchemaParserCtxtPtr ctxt)
    +

    Free the resources associated to the schema parser context

    +
    ctxt:the schema parser context
    +
    +

    xmlSchemaFreeValidCtxt ()

    void	xmlSchemaFreeValidCtxt		(xmlSchemaValidCtxtPtr ctxt)
    +

    Free the resources associated to the schema validation context

    +
    ctxt:the schema validation context
    +
    +

    xmlSchemaGetParserErrors ()

    int	xmlSchemaGetParserErrors	(xmlSchemaParserCtxtPtr ctxt, 
    xmlSchemaValidityErrorFunc * err,
    xmlSchemaValidityWarningFunc * warn,
    void ** ctx)
    +

    Get the callback information used to handle errors for a parser context

    +
    ctxt:a XMl-Schema parser context
    err:the error callback result
    warn:the warning callback result
    ctx:contextual data for the callbacks result
    Returns:-1 in case of failure, 0 otherwise
    +
    +

    xmlSchemaGetValidErrors ()

    int	xmlSchemaGetValidErrors		(xmlSchemaValidCtxtPtr ctxt, 
    xmlSchemaValidityErrorFunc * err,
    xmlSchemaValidityWarningFunc * warn,
    void ** ctx)
    +

    Get the error and warning callback informations

    +
    ctxt:a XML-Schema validation context
    err:the error function result
    warn:the warning function result
    ctx:the functions context result
    Returns:-1 in case of error and 0 otherwise
    +
    +

    xmlSchemaIsValid ()

    int	xmlSchemaIsValid		(xmlSchemaValidCtxtPtr ctxt)
    +

    Check if any error was detected during validation.

    +
    ctxt:the schema validation context
    Returns:1 if valid so far, 0 if errors were detected, and -1 in case of internal error.
    +
    +

    xmlSchemaNewDocParserCtxt ()

    xmlSchemaParserCtxtPtr	xmlSchemaNewDocParserCtxt	(xmlDocPtr doc)
    +

    Create an XML Schemas parse context for that document. NB. The document may be modified during the parsing process.

    +
    doc:a preparsed document tree
    Returns:the parser context or NULL in case of error
    +
    +

    xmlSchemaNewMemParserCtxt ()

    xmlSchemaParserCtxtPtr	xmlSchemaNewMemParserCtxt	(const char * buffer, 
    int size)
    +

    Create an XML Schemas parse context for that memory buffer expected to contain an XML Schemas file.

    +
    buffer:a pointer to a char array containing the schemas
    size:the size of the array
    Returns:the parser context or NULL in case of error
    +
    +

    xmlSchemaNewParserCtxt ()

    xmlSchemaParserCtxtPtr	xmlSchemaNewParserCtxt	(const char * URL)
    +

    Create an XML Schemas parse context for that file/resource expected to contain an XML Schemas file.

    +
    URL:the location of the schema
    Returns:the parser context or NULL in case of error
    +
    +

    xmlSchemaNewValidCtxt ()

    xmlSchemaValidCtxtPtr	xmlSchemaNewValidCtxt	(xmlSchemaPtr schema)
    +

    Create an XML Schemas validation context based on the given schema.

    +
    schema:a precompiled XML Schemas
    Returns:the validation context or NULL in case of error
    +
    +

    xmlSchemaParse ()

    xmlSchemaPtr	xmlSchemaParse		(xmlSchemaParserCtxtPtr ctxt)
    +

    parse a schema definition resource and build an internal XML Shema struture which can be used to validate instances.

    +
    ctxt:a schema validation context
    Returns:the internal XML Schema structure built from the resource or NULL in case of error
    +
    +

    xmlSchemaSAXPlug ()

    xmlSchemaSAXPlugPtr	xmlSchemaSAXPlug	(xmlSchemaValidCtxtPtr ctxt, 
    xmlSAXHandlerPtr * sax,
    void ** user_data)
    +

    Plug a SAX based validation layer in a SAX parsing event flow. The original @saxptr and @dataptr data are replaced by new pointers but the calls to the original will be maintained.

    +
    ctxt:a schema validation context
    sax:a pointer to the original xmlSAXHandlerPtr
    user_data:a pointer to the original SAX user data pointer
    Returns:a pointer to a data structure needed to unplug the validation layer or NULL in case of errors.
    +
    +

    xmlSchemaSAXUnplug ()

    int	xmlSchemaSAXUnplug		(xmlSchemaSAXPlugPtr plug)
    +

    Unplug a SAX based validation layer in a SAX parsing event flow. The original pointers used in the call are restored.

    +
    plug:a data structure returned by xmlSchemaSAXPlug
    Returns:0 in case of success and -1 in case of failure.
    +
    +

    xmlSchemaSetParserErrors ()

    void	xmlSchemaSetParserErrors	(xmlSchemaParserCtxtPtr ctxt, 
    xmlSchemaValidityErrorFunc err,
    xmlSchemaValidityWarningFunc warn,
    void * ctx)
    +

    Set the callback functions used to handle errors for a validation context

    +
    ctxt:a schema validation context
    err:the error callback
    warn:the warning callback
    ctx:contextual data for the callbacks
    +
    +

    xmlSchemaSetParserStructuredErrors ()

    void	xmlSchemaSetParserStructuredErrors	(xmlSchemaParserCtxtPtr ctxt, 
    xmlStructuredErrorFunc serror,
    void * ctx)
    +

    Set the structured error callback

    +
    ctxt:a schema parser context
    serror:the structured error function
    ctx:the functions context
    +
    +

    xmlSchemaSetValidErrors ()

    void	xmlSchemaSetValidErrors		(xmlSchemaValidCtxtPtr ctxt, 
    xmlSchemaValidityErrorFunc err,
    xmlSchemaValidityWarningFunc warn,
    void * ctx)
    +

    Set the error and warning callback informations

    +
    ctxt:a schema validation context
    err:the error function
    warn:the warning function
    ctx:the functions context
    +
    +

    xmlSchemaSetValidOptions ()

    int	xmlSchemaSetValidOptions	(xmlSchemaValidCtxtPtr ctxt, 
    int options)
    +

    Sets the options to be used during the validation.

    +
    ctxt:a schema validation context
    options:a combination of xmlSchemaValidOption
    Returns:0 in case of success, -1 in case of an API error.
    +
    +

    xmlSchemaSetValidStructuredErrors ()

    void	xmlSchemaSetValidStructuredErrors	(xmlSchemaValidCtxtPtr ctxt, 
    xmlStructuredErrorFunc serror,
    void * ctx)
    +

    Set the structured error callback

    +
    ctxt:a schema validation context
    serror:the structured error function
    ctx:the functions context
    +
    +

    xmlSchemaValidCtxtGetOptions ()

    int	xmlSchemaValidCtxtGetOptions	(xmlSchemaValidCtxtPtr ctxt)
    +

    Get the validation context options.

    +
    ctxt:a schema validation context
    Returns:the option combination or -1 on error.
    +
    +

    xmlSchemaValidCtxtGetParserCtxt ()

    xmlParserCtxtPtr	xmlSchemaValidCtxtGetParserCtxt	(xmlSchemaValidCtxtPtr ctxt)
    +

    allow access to the parser context of the schema validation context

    +
    ctxt:a schema validation context
    Returns:the parser context of the schema validation context or NULL in case of error.
    +
    +

    xmlSchemaValidateDoc ()

    int	xmlSchemaValidateDoc		(xmlSchemaValidCtxtPtr ctxt, 
    xmlDocPtr doc)
    +

    Validate a document tree in memory.

    +
    ctxt:a schema validation context
    doc:a parsed document tree
    Returns:0 if the document is schemas valid, a positive error code number otherwise and -1 in case of internal or API error.
    +
    +

    xmlSchemaValidateFile ()

    int	xmlSchemaValidateFile		(xmlSchemaValidCtxtPtr ctxt, 
    const char * filename,
    int options)
    +

    Do a schemas validation of the given resource, it will use the SAX streamable validation internally.

    +
    ctxt:a schema validation context
    filename:the URI of the instance
    options:a future set of options, currently unused
    Returns:0 if the document is valid, a positive error code number otherwise and -1 in case of an internal or API error.
    +
    +

    xmlSchemaValidateOneElement ()

    int	xmlSchemaValidateOneElement	(xmlSchemaValidCtxtPtr ctxt, 
    xmlNodePtr elem)
    +

    Validate a branch of a tree, starting with the given @elem.

    +
    ctxt:a schema validation context
    elem:an element node
    Returns:0 if the element and its subtree is valid, a positive error code number otherwise and -1 in case of an internal or API error.
    +
    +

    xmlSchemaValidateSetFilename ()

    void	xmlSchemaValidateSetFilename	(xmlSchemaValidCtxtPtr vctxt, 
    const char * filename)
    +

    Workaround to provide file error reporting information when this is not provided by current APIs

    +
    vctxt:the schema validation context
    filename:the file name
    +
    +

    xmlSchemaValidateSetLocator ()

    void	xmlSchemaValidateSetLocator	(xmlSchemaValidCtxtPtr vctxt, 
    xmlSchemaValidityLocatorFunc f,
    void * ctxt)
    +

    Allows to set a locator function to the validation context, which will be used to provide file and line information since those are not provided as part of the SAX validation flow Setting @f to NULL disable the locator.

    +
    vctxt:a schema validation context
    f:the locator function pointer
    ctxt:the locator context
    +
    +

    xmlSchemaValidateStream ()

    int	xmlSchemaValidateStream		(xmlSchemaValidCtxtPtr ctxt, 
    xmlParserInputBufferPtr input,
    xmlCharEncoding enc,
    xmlSAXHandlerPtr sax,
    void * user_data)
    +

    Validate an input based on a flow of SAX event from the parser and forward the events to the @sax handler with the provided @user_data the user provided @sax handler must be a SAX2 one.

    +
    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.
    Returns:0 if the document is schemas valid, a positive error code number otherwise and -1 in case of internal or API error.
    +
    +
    +
    + + diff --git a/doc/devhelp/libxml2-xmlschemastypes.html b/doc/devhelp/libxml2-xmlschemastypes.html new file mode 100644 index 0000000..36a59f8 --- /dev/null +++ b/doc/devhelp/libxml2-xmlschemastypes.html @@ -0,0 +1,237 @@ + + + + + xmlschemastypes: implementation of XML Schema Datatypes + + + + + + + + + + + + + + + + +

    + xmlschemastypes +

    +

    xmlschemastypes - implementation of XML Schema Datatypes

    +

    module providing the XML Schema Datatypes implementation both definition and validity checking

    +

    Author(s): Daniel Veillard

    +
    +

    Synopsis

    +
    typedef enum xmlSchemaWhitespaceValueType;
    +int	xmlSchemaValPredefTypeNode	(xmlSchemaTypePtr type, 
    const xmlChar * value,
    xmlSchemaValPtr * val,
    xmlNodePtr node); +int xmlSchemaGetCanonValueWhtsp (xmlSchemaValPtr val,
    const xmlChar ** retValue,
    xmlSchemaWhitespaceValueType ws); +int xmlSchemaValidateLengthFacetWhtsp (xmlSchemaFacetPtr facet,
    xmlSchemaValType valType,
    const xmlChar * value,
    xmlSchemaValPtr val,
    unsigned long * length,
    xmlSchemaWhitespaceValueType ws); +int xmlSchemaIsBuiltInTypeFacet (xmlSchemaTypePtr type,
    int facetType); +int xmlSchemaGetCanonValue (xmlSchemaValPtr val,
    const xmlChar ** retValue); +xmlSchemaTypePtr xmlSchemaGetBuiltInListSimpleTypeItemType (xmlSchemaTypePtr type); +int xmlSchemaCompareValuesWhtsp (xmlSchemaValPtr x,
    xmlSchemaWhitespaceValueType xws,
    xmlSchemaValPtr y,
    xmlSchemaWhitespaceValueType yws); +int xmlSchemaValueGetAsBoolean (xmlSchemaValPtr val); +xmlChar * xmlSchemaCollapseString (const xmlChar * value); +int xmlSchemaValPredefTypeNodeNoNorm (xmlSchemaTypePtr type,
    const xmlChar * value,
    xmlSchemaValPtr * val,
    xmlNodePtr node); +int xmlSchemaValidateFacet (xmlSchemaTypePtr base,
    xmlSchemaFacetPtr facet,
    const xmlChar * value,
    xmlSchemaValPtr val); +xmlSchemaFacetPtr xmlSchemaNewFacet (void); +int xmlSchemaValueAppend (xmlSchemaValPtr prev,
    xmlSchemaValPtr cur); +int xmlSchemaCompareValues (xmlSchemaValPtr x,
    xmlSchemaValPtr y); +int xmlSchemaValidateLengthFacet (xmlSchemaTypePtr type,
    xmlSchemaFacetPtr facet,
    const xmlChar * value,
    xmlSchemaValPtr val,
    unsigned long * length); +xmlSchemaValType xmlSchemaGetValType (xmlSchemaValPtr val); +xmlSchemaTypePtr xmlSchemaGetPredefinedType (const xmlChar * name,
    const xmlChar * ns); +int xmlSchemaValidatePredefinedType (xmlSchemaTypePtr type,
    const xmlChar * value,
    xmlSchemaValPtr * val); +void xmlSchemaFreeFacet (xmlSchemaFacetPtr facet); +int xmlSchemaValidateListSimpleTypeFacet (xmlSchemaFacetPtr facet,
    const xmlChar * value,
    unsigned long actualLen,
    unsigned long * expectedLen); +unsigned long xmlSchemaGetFacetValueAsULong (xmlSchemaFacetPtr facet); +void xmlSchemaFreeValue (xmlSchemaValPtr value); +xmlSchemaValPtr xmlSchemaValueGetNext (xmlSchemaValPtr cur); +const xmlChar * xmlSchemaValueGetAsString (xmlSchemaValPtr val); +xmlSchemaValPtr xmlSchemaCopyValue (xmlSchemaValPtr val); +xmlSchemaValPtr xmlSchemaNewNOTATIONValue (const xmlChar * name,
    const xmlChar * ns); +xmlSchemaValPtr xmlSchemaNewQNameValue (const xmlChar * namespaceName,
    const xmlChar * localName); +void xmlSchemaCleanupTypes (void); +xmlChar * xmlSchemaWhiteSpaceReplace (const xmlChar * value); +xmlSchemaValPtr xmlSchemaNewStringValue (xmlSchemaValType type,
    const xmlChar * value); +xmlSchemaTypePtr xmlSchemaGetBuiltInType (xmlSchemaValType type); +void xmlSchemaInitTypes (void); +int xmlSchemaValidateFacetWhtsp (xmlSchemaFacetPtr facet,
    xmlSchemaWhitespaceValueType fws,
    xmlSchemaValType valType,
    const xmlChar * value,
    xmlSchemaValPtr val,
    xmlSchemaWhitespaceValueType ws); +int xmlSchemaCheckFacet (xmlSchemaFacetPtr facet,
    xmlSchemaTypePtr typeDecl,
    xmlSchemaParserCtxtPtr pctxt,
    const xmlChar * name); +
    +
    +
    +

    Description

    +
    +
    +

    Details

    +
    + +
    +

    xmlSchemaCheckFacet ()

    int	xmlSchemaCheckFacet		(xmlSchemaFacetPtr facet, 
    xmlSchemaTypePtr typeDecl,
    xmlSchemaParserCtxtPtr pctxt,
    const xmlChar * name)
    +

    Checks and computes the values of facets.

    +
    facet:the facet
    typeDecl:the schema type definition
    pctxt:the schema parser context or NULL
    name:the optional name of the type
    Returns:0 if valid, a positive error code if not valid and -1 in case of an internal or API error.
    +
    + +
    +

    xmlSchemaCollapseString ()

    xmlChar *	xmlSchemaCollapseString	(const xmlChar * value)
    +

    Removes and normalize white spaces in the string

    +
    value:a value
    Returns:the new string or NULL if no change was required.
    +
    +

    xmlSchemaCompareValues ()

    int	xmlSchemaCompareValues		(xmlSchemaValPtr x, 
    xmlSchemaValPtr y)
    +

    Compare 2 values

    +
    x:a first value
    y:a second value
    Returns:-1 if x < y, 0 if x == y, 1 if x > y, 2 if x <> y, and -2 in case of error
    +
    +

    xmlSchemaCompareValuesWhtsp ()

    int	xmlSchemaCompareValuesWhtsp	(xmlSchemaValPtr x, 
    xmlSchemaWhitespaceValueType xws,
    xmlSchemaValPtr y,
    xmlSchemaWhitespaceValueType yws)
    +

    Compare 2 values

    +
    x:a first value
    xws:the whitespace value of x
    y:a second value
    yws:the whitespace value of y
    Returns:-1 if x < y, 0 if x == y, 1 if x > y, 2 if x <> y, and -2 in case of error
    +
    +

    xmlSchemaCopyValue ()

    xmlSchemaValPtr	xmlSchemaCopyValue	(xmlSchemaValPtr val)
    +

    Copies the precomputed value. This duplicates any string within.

    +
    val:the precomputed value to be copied
    Returns:the copy or NULL if a copy for a data-type is not implemented.
    +
    +

    xmlSchemaFreeFacet ()

    void	xmlSchemaFreeFacet		(xmlSchemaFacetPtr facet)
    +

    Deallocate a Schema Facet structure.

    +
    facet:a schema facet structure
    +
    +

    xmlSchemaFreeValue ()

    void	xmlSchemaFreeValue		(xmlSchemaValPtr value)
    +

    Cleanup the default XML Schemas type library

    +
    value:the value to free
    +
    +

    xmlSchemaGetBuiltInListSimpleTypeItemType ()

    xmlSchemaTypePtr	xmlSchemaGetBuiltInListSimpleTypeItemType	(xmlSchemaTypePtr type)
    +

    Lookup function

    +
    type:the built-in simple type.
    Returns:the item type of @type as defined by the built-in datatype hierarchy of XML Schema Part 2: Datatypes, or NULL in case of an error.
    +
    +

    xmlSchemaGetBuiltInType ()

    xmlSchemaTypePtr	xmlSchemaGetBuiltInType	(xmlSchemaValType type)
    +

    Gives you the type struct for a built-in type by its type id.

    +
    type:the type of the built in type
    Returns:the type if found, NULL otherwise.
    +
    +

    xmlSchemaGetCanonValue ()

    int	xmlSchemaGetCanonValue		(xmlSchemaValPtr val, 
    const xmlChar ** retValue)
    +

    Get the canonical lexical representation of the value. The caller has to FREE the returned retValue. WARNING: Some value types are not supported yet, resulting in a @retValue of "???". TODO: XML Schema 1.0 does not define canonical representations for: duration, gYearMonth, gYear, gMonthDay, gMonth, gDay, anyURI, QName, NOTATION. This will be fixed in XML Schema 1.1.

    +
    val:the precomputed value
    retValue:the returned value
    Returns:0 if the value could be built, 1 if the value type is not supported yet and -1 in case of API errors.
    +
    +

    xmlSchemaGetCanonValueWhtsp ()

    int	xmlSchemaGetCanonValueWhtsp	(xmlSchemaValPtr val, 
    const xmlChar ** retValue,
    xmlSchemaWhitespaceValueType ws)
    +

    Get the canonical representation of the value. The caller has to free the returned @retValue.

    +
    val:the precomputed value
    retValue:the returned value
    ws:the whitespace type of the value
    Returns:0 if the value could be built, 1 if the value type is not supported yet and -1 in case of API errors.
    +
    +

    xmlSchemaGetFacetValueAsULong ()

    unsigned long	xmlSchemaGetFacetValueAsULong	(xmlSchemaFacetPtr facet)
    +

    Extract the value of a facet

    +
    facet:an schemas type facet
    Returns:the value as a long
    +
    +

    xmlSchemaGetPredefinedType ()

    xmlSchemaTypePtr	xmlSchemaGetPredefinedType	(const xmlChar * name, 
    const xmlChar * ns)
    +

    Lookup a type in the default XML Schemas type library

    +
    name:the type name
    ns:the URI of the namespace usually "http://www.w3.org/2001/XMLSchema"
    Returns:the type if found, NULL otherwise
    +
    +

    xmlSchemaGetValType ()

    xmlSchemaValType	xmlSchemaGetValType	(xmlSchemaValPtr val)
    +

    Accessor for the type of a value

    +
    val:a schemas value
    Returns:the xmlSchemaValType of the value
    +
    + +
    +

    xmlSchemaIsBuiltInTypeFacet ()

    int	xmlSchemaIsBuiltInTypeFacet	(xmlSchemaTypePtr type, 
    int facetType)
    +

    Evaluates if a specific facet can be used in conjunction with a type.

    +
    type:the built-in type
    facetType:the facet type
    Returns:1 if the facet can be used with the given built-in type, 0 otherwise and -1 in case the type is not a built-in type.
    +
    +

    xmlSchemaNewFacet ()

    xmlSchemaFacetPtr	xmlSchemaNewFacet	(void)
    +

    Allocate a new Facet structure.

    +
    Returns:the newly allocated structure or NULL in case or error
    +
    +

    xmlSchemaNewNOTATIONValue ()

    xmlSchemaValPtr	xmlSchemaNewNOTATIONValue	(const xmlChar * name, 
    const xmlChar * ns)
    +

    Allocate a new NOTATION value. The given values are consumed and freed with the struct.

    +
    name:the notation name
    ns:the notation namespace name or NULL
    Returns:a pointer to the new value or NULL in case of error
    +
    +

    xmlSchemaNewQNameValue ()

    xmlSchemaValPtr	xmlSchemaNewQNameValue	(const xmlChar * namespaceName, 
    const xmlChar * localName)
    +

    Allocate a new QName value. The given values are consumed and freed with the struct.

    +
    namespaceName:the namespace name
    localName:the local name
    Returns:a pointer to the new value or NULL in case of an error.
    +
    +

    xmlSchemaNewStringValue ()

    xmlSchemaValPtr	xmlSchemaNewStringValue	(xmlSchemaValType type, 
    const xmlChar * value)
    +

    Allocate a new simple type value. The type can be of XML_SCHEMAS_STRING. WARNING: This one is intended to be expanded for other string based types. We need this for anySimpleType as well. The given value is consumed and freed with the struct.

    +
    type:the value type
    value:the value
    Returns:a pointer to the new value or NULL in case of error
    +
    +

    xmlSchemaValPredefTypeNode ()

    int	xmlSchemaValPredefTypeNode	(xmlSchemaTypePtr type, 
    const xmlChar * value,
    xmlSchemaValPtr * val,
    xmlNodePtr node)
    +

    Check that a value conforms to the lexical space of the predefined type. if true a value is computed and returned in @val.

    +
    type:the predefined type
    value:the value to check
    val:the return computed value
    node:the node containing the value
    Returns:0 if this validates, a positive error code number otherwise and -1 in case of internal or API error.
    +
    +

    xmlSchemaValPredefTypeNodeNoNorm ()

    int	xmlSchemaValPredefTypeNodeNoNorm	(xmlSchemaTypePtr type, 
    const xmlChar * value,
    xmlSchemaValPtr * val,
    xmlNodePtr node)
    +

    Check that a value conforms to the lexical space of the predefined type. if true a value is computed and returned in @val. This one does apply any normalization to the value.

    +
    type:the predefined type
    value:the value to check
    val:the return computed value
    node:the node containing the value
    Returns:0 if this validates, a positive error code number otherwise and -1 in case of internal or API error.
    +
    +

    xmlSchemaValidateFacet ()

    int	xmlSchemaValidateFacet		(xmlSchemaTypePtr base, 
    xmlSchemaFacetPtr facet,
    const xmlChar * value,
    xmlSchemaValPtr val)
    +

    Check a value against a facet condition

    +
    base:the base type
    facet:the facet to check
    value:the lexical repr of the value to validate
    val:the precomputed value
    Returns:0 if the element is schemas valid, a positive error code number otherwise and -1 in case of internal or API error.
    +
    +

    xmlSchemaValidateFacetWhtsp ()

    int	xmlSchemaValidateFacetWhtsp	(xmlSchemaFacetPtr facet, 
    xmlSchemaWhitespaceValueType fws,
    xmlSchemaValType valType,
    const xmlChar * value,
    xmlSchemaValPtr val,
    xmlSchemaWhitespaceValueType ws)
    +

    Check a value against a facet condition. This takes value normalization according to the specified whitespace types into account. Note that @value needs to be the *normalized* value if the facet is of type "pattern".

    +
    facet:the facet to check
    fws:the whitespace type of the facet's value
    valType:the built-in type of the value
    value:the lexical (or normalized for pattern) repr of the value to validate
    val:the precomputed value
    ws:the whitespace type of the value
    Returns:0 if the element is schemas valid, a positive error code number otherwise and -1 in case of internal or API error.
    +
    +

    xmlSchemaValidateLengthFacet ()

    int	xmlSchemaValidateLengthFacet	(xmlSchemaTypePtr type, 
    xmlSchemaFacetPtr facet,
    const xmlChar * value,
    xmlSchemaValPtr val,
    unsigned long * length)
    +

    Checka a value against a "length", "minLength" and "maxLength" facet; sets @length to the computed length of @value.

    +
    type:the built-in type
    facet:the facet to check
    value:the lexical repr. of the value to be validated
    val:the precomputed value
    length:the actual length of the value
    Returns:0 if the value is valid, a positive error code otherwise and -1 in case of an internal or API error.
    +
    +

    xmlSchemaValidateLengthFacetWhtsp ()

    int	xmlSchemaValidateLengthFacetWhtsp	(xmlSchemaFacetPtr facet, 
    xmlSchemaValType valType,
    const xmlChar * value,
    xmlSchemaValPtr val,
    unsigned long * length,
    xmlSchemaWhitespaceValueType ws)
    +

    Checka a value against a "length", "minLength" and "maxLength" facet; sets @length to the computed length of @value.

    +
    facet:the facet to check
    valType:the built-in type
    value:the lexical repr. of the value to be validated
    val:the precomputed value
    length:the actual length of the value
    ws:the whitespace type of the value
    Returns:0 if the value is valid, a positive error code otherwise and -1 in case of an internal or API error.
    +
    +

    xmlSchemaValidateListSimpleTypeFacet ()

    int	xmlSchemaValidateListSimpleTypeFacet	(xmlSchemaFacetPtr facet, 
    const xmlChar * value,
    unsigned long actualLen,
    unsigned long * expectedLen)
    +

    Checks the value of a list simple type against a facet.

    +
    facet:the facet to check
    value:the lexical repr of the value to validate
    actualLen:the number of list items
    expectedLen:the resulting expected number of list items
    Returns:0 if the value is valid, a positive error code number otherwise and -1 in case of an internal error.
    +
    +

    xmlSchemaValidatePredefinedType ()

    int	xmlSchemaValidatePredefinedType	(xmlSchemaTypePtr type, 
    const xmlChar * value,
    xmlSchemaValPtr * val)
    +

    Check that a value conforms to the lexical space of the predefined type. if true a value is computed and returned in @val.

    +
    type:the predefined type
    value:the value to check
    val:the return computed value
    Returns:0 if this validates, a positive error code number otherwise and -1 in case of internal or API error.
    +
    +

    xmlSchemaValueAppend ()

    int	xmlSchemaValueAppend		(xmlSchemaValPtr prev, 
    xmlSchemaValPtr cur)
    +

    Appends a next sibling to a list of computed values.

    +
    prev:the value
    cur:the value to be appended
    Returns:0 if succeeded and -1 on API errors.
    +
    +

    xmlSchemaValueGetAsBoolean ()

    int	xmlSchemaValueGetAsBoolean	(xmlSchemaValPtr val)
    +

    Accessor for the boolean value of a computed value.

    +
    val:the value
    Returns:1 if true and 0 if false, or in case of an error. Hmm.
    +
    +

    xmlSchemaValueGetAsString ()

    const xmlChar *	xmlSchemaValueGetAsString	(xmlSchemaValPtr val)
    +

    Accessor for the string value of a computed value.

    +
    val:the value
    Returns:the string value or NULL if there was none, or on API errors.
    +
    +

    xmlSchemaValueGetNext ()

    xmlSchemaValPtr	xmlSchemaValueGetNext	(xmlSchemaValPtr cur)
    +

    Accessor for the next sibling of a list of computed values.

    +
    cur:the value
    Returns:the next value or NULL if there was none, or on API errors.
    +
    +

    xmlSchemaWhiteSpaceReplace ()

    xmlChar *	xmlSchemaWhiteSpaceReplace	(const xmlChar * value)
    +

    Replaces 0xd, 0x9 and 0xa with a space.

    +
    value:a value
    Returns:the new string or NULL if no change was required.
    +
    +
    +
    + + diff --git a/doc/devhelp/libxml2-xmlstring.html b/doc/devhelp/libxml2-xmlstring.html new file mode 100644 index 0000000..ca90ed4 --- /dev/null +++ b/doc/devhelp/libxml2-xmlstring.html @@ -0,0 +1,217 @@ + + + + + xmlstring: set of routines to process strings + + + + + + + + + + + + + + + + +

    + xmlstring +

    +

    xmlstring - set of routines to process strings

    +

    type and interfaces needed for the internal string handling of the library, especially UTF8 processing.

    +

    Author(s): Daniel Veillard

    +
    +

    Synopsis

    +
    #define BAD_CAST;
    +typedef unsigned char xmlChar;
    +int	xmlStrcmp			(const xmlChar * str1, 
    const xmlChar * str2); +xmlChar * xmlCharStrndup (const char * cur,
    int len); +const xmlChar * xmlStrcasestr (const xmlChar * str,
    const xmlChar * val); +xmlChar * xmlStrcat (xmlChar * cur,
    const xmlChar * add); +int xmlStrPrintf (xmlChar * buf,
    int len,
    const char * msg,
    ... ...); +const xmlChar * xmlStrstr (const xmlChar * str,
    const xmlChar * val); +int xmlUTF8Size (const xmlChar * utf); +int xmlStrQEqual (const xmlChar * pref,
    const xmlChar * name,
    const xmlChar * str); +xmlChar * xmlStrncatNew (const xmlChar * str1,
    const xmlChar * str2,
    int len); +const xmlChar * xmlUTF8Strpos (const xmlChar * utf,
    int pos); +xmlChar * xmlStrdup (const xmlChar * cur); +xmlChar * xmlCharStrdup (const char * cur); +const xmlChar * xmlStrchr (const xmlChar * str,
    xmlChar val); +int xmlStrlen (const xmlChar * str); +int xmlStrncmp (const xmlChar * str1,
    const xmlChar * str2,
    int len); +xmlChar * xmlStrsub (const xmlChar * str,
    int start,
    int len); +xmlChar * xmlStrncat (xmlChar * cur,
    const xmlChar * add,
    int len); +int xmlGetUTF8Char (const unsigned char * utf,
    int * len); +int xmlStrcasecmp (const xmlChar * str1,
    const xmlChar * str2); +xmlChar * xmlStrndup (const xmlChar * cur,
    int len); +int xmlStrVPrintf (xmlChar * buf,
    int len,
    const char * msg,
    va_list ap); +int xmlUTF8Strsize (const xmlChar * utf,
    int len); +int xmlCheckUTF8 (const unsigned char * utf); +int xmlStrncasecmp (const xmlChar * str1,
    const xmlChar * str2,
    int len); +int xmlUTF8Strlen (const xmlChar * utf); +xmlChar * xmlUTF8Strsub (const xmlChar * utf,
    int start,
    int len); +int xmlStrEqual (const xmlChar * str1,
    const xmlChar * str2); +int xmlUTF8Charcmp (const xmlChar * utf1,
    const xmlChar * utf2); +xmlChar * xmlUTF8Strndup (const xmlChar * utf,
    int len); +int xmlUTF8Strloc (const xmlChar * utf,
    const xmlChar * utfchar); +
    +
    +
    +

    Description

    +
    +
    +

    Details

    +
    +

    Macro BAD_CAST

    #define BAD_CAST;
    +

    Macro to cast a string to an xmlChar * when one know its safe.

    +
    +
    +

    Typedef xmlChar

    unsigned char 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).

    +
    +
    +

    xmlCharStrdup ()

    xmlChar *	xmlCharStrdup		(const char * cur)
    +

    a strdup for char's to xmlChar's

    +
    cur:the input char *
    Returns:a new xmlChar * or NULL
    +
    +

    xmlCharStrndup ()

    xmlChar *	xmlCharStrndup		(const char * cur, 
    int len)
    +

    a strndup for char's to xmlChar's

    +
    cur:the input char *
    len:the len of @cur
    Returns:a new xmlChar * or NULL
    +
    + +
    +
    +
    +

    xmlStrEqual ()

    int	xmlStrEqual			(const xmlChar * str1, 
    const xmlChar * str2)
    +

    Check if both strings are equal of have same content. Should be a bit more readable and faster than xmlStrcmp()

    +
    str1:the first xmlChar *
    str2:the second xmlChar *
    Returns:1 if they are equal, 0 if they are different
    +
    +

    xmlStrPrintf ()

    int	xmlStrPrintf			(xmlChar * buf, 
    int len,
    const char * msg,
    ... ...)
    +

    Formats @msg and places result into @buf.

    +
    buf:the result buffer.
    len:the result buffer length.
    msg:the message with printf formatting.
    ...:extra parameters for the message.
    Returns:the number of characters written to @buf or -1 if an error occurs.
    +
    +

    xmlStrQEqual ()

    int	xmlStrQEqual			(const xmlChar * pref, 
    const xmlChar * name,
    const xmlChar * str)
    +

    Check if a QName is Equal to a given string

    +
    pref:the prefix of the QName
    name:the localname of the QName
    str:the second xmlChar *
    Returns:1 if they are equal, 0 if they are different
    +
    +

    xmlStrVPrintf ()

    int	xmlStrVPrintf			(xmlChar * buf, 
    int len,
    const char * msg,
    va_list ap)
    +

    Formats @msg and places result into @buf.

    +
    buf:the result buffer.
    len:the result buffer length.
    msg:the message with printf formatting.
    ap:extra parameters for the message.
    Returns:the number of characters written to @buf or -1 if an error occurs.
    +
    +

    xmlStrcasecmp ()

    int	xmlStrcasecmp			(const xmlChar * str1, 
    const xmlChar * str2)
    +

    a strcasecmp for xmlChar's

    +
    str1:the first xmlChar *
    str2:the second xmlChar *
    Returns:the integer result of the comparison
    +
    +

    xmlStrcasestr ()

    const xmlChar *	xmlStrcasestr		(const xmlChar * str, 
    const xmlChar * val)
    +

    a case-ignoring strstr for xmlChar's

    +
    str:the xmlChar * array (haystack)
    val:the xmlChar to search (needle)
    Returns:the xmlChar * for the first occurrence or NULL.
    +
    +

    xmlStrcat ()

    xmlChar *	xmlStrcat		(xmlChar * cur, 
    const xmlChar * add)
    +

    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'.

    +
    cur:the original xmlChar * array
    add:the xmlChar * array added
    Returns:a new xmlChar * containing the concatenated string.
    +
    +

    xmlStrchr ()

    const xmlChar *	xmlStrchr		(const xmlChar * str, 
    xmlChar val)
    +

    a strchr for xmlChar's

    +
    str:the xmlChar * array
    val:the xmlChar to search
    Returns:the xmlChar * for the first occurrence or NULL.
    +
    +

    xmlStrcmp ()

    int	xmlStrcmp			(const xmlChar * str1, 
    const xmlChar * str2)
    +

    a strcmp for xmlChar's

    +
    str1:the first xmlChar *
    str2:the second xmlChar *
    Returns:the integer result of the comparison
    +
    +

    xmlStrdup ()

    xmlChar *	xmlStrdup		(const xmlChar * cur)
    +

    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'.

    +
    cur:the input xmlChar *
    Returns:a new xmlChar * or NULL
    +
    +

    xmlStrlen ()

    int	xmlStrlen			(const xmlChar * str)
    +

    length of a xmlChar's string

    +
    str:the xmlChar * array
    Returns:the number of xmlChar contained in the ARRAY.
    +
    +

    xmlStrncasecmp ()

    int	xmlStrncasecmp			(const xmlChar * str1, 
    const xmlChar * str2,
    int len)
    +

    a strncasecmp for xmlChar's

    +
    str1:the first xmlChar *
    str2:the second xmlChar *
    len:the max comparison length
    Returns:the integer result of the comparison
    +
    +

    xmlStrncat ()

    xmlChar *	xmlStrncat		(xmlChar * cur, 
    const xmlChar * add,
    int len)
    +

    a strncat for array of xmlChar's, it will extend @cur with the len first bytes of @add. Note that if @len < 0 then this is an API error and NULL will be returned.

    +
    cur:the original xmlChar * array
    add:the xmlChar * array added
    len:the length of @add
    Returns:a new xmlChar *, the original @cur is reallocated if needed and should not be freed
    +
    +

    xmlStrncatNew ()

    xmlChar *	xmlStrncatNew		(const xmlChar * str1, 
    const xmlChar * str2,
    int len)
    +

    same as xmlStrncat, but creates a new string. The original two strings are not freed. If @len is < 0 then the length will be calculated automatically.

    +
    str1:first xmlChar string
    str2:second xmlChar string
    len:the len of @str2 or < 0
    Returns:a new xmlChar * or NULL
    +
    +

    xmlStrncmp ()

    int	xmlStrncmp			(const xmlChar * str1, 
    const xmlChar * str2,
    int len)
    +

    a strncmp for xmlChar's

    +
    str1:the first xmlChar *
    str2:the second xmlChar *
    len:the max comparison length
    Returns:the integer result of the comparison
    +
    +

    xmlStrndup ()

    xmlChar *	xmlStrndup		(const xmlChar * cur, 
    int len)
    +

    a strndup for array of xmlChar's

    +
    cur:the input xmlChar *
    len:the len of @cur
    Returns:a new xmlChar * or NULL
    +
    +

    xmlStrstr ()

    const xmlChar *	xmlStrstr		(const xmlChar * str, 
    const xmlChar * val)
    +

    a strstr for xmlChar's

    +
    str:the xmlChar * array (haystack)
    val:the xmlChar to search (needle)
    Returns:the xmlChar * for the first occurrence or NULL.
    +
    +

    xmlStrsub ()

    xmlChar *	xmlStrsub		(const xmlChar * str, 
    int start,
    int len)
    +

    Extract a substring of a given string

    +
    str:the xmlChar * array (haystack)
    start:the index of the first char (zero based)
    len:the length of the substring
    Returns:the xmlChar * for the first occurrence or NULL.
    +
    +

    xmlUTF8Charcmp ()

    int	xmlUTF8Charcmp			(const xmlChar * utf1, 
    const xmlChar * utf2)
    +

    compares the two UCS4 values

    +
    utf1:pointer to first UTF8 char
    utf2:pointer to second UTF8 char
    Returns:result of the compare as with xmlStrncmp
    +
    +

    xmlUTF8Size ()

    int	xmlUTF8Size			(const xmlChar * utf)
    +

    calculates the internal size of a UTF8 character

    +
    utf:pointer to the UTF8 character
    Returns:the numbers of bytes in the character, -1 on format error
    +
    +

    xmlUTF8Strlen ()

    int	xmlUTF8Strlen			(const xmlChar * utf)
    +

    compute the length of an UTF8 string, it doesn't do a full UTF8 checking of the content of the string.

    +
    utf:a sequence of UTF-8 encoded bytes
    Returns:the number of characters in the string or -1 in case of error
    +
    +

    xmlUTF8Strloc ()

    int	xmlUTF8Strloc			(const xmlChar * utf, 
    const xmlChar * utfchar)
    +

    a function to provide the relative location of a UTF8 char

    +
    utf:the input UTF8 *
    utfchar:the UTF8 character to be found
    Returns:the relative character position of the desired char or -1 if not found
    +
    +

    xmlUTF8Strndup ()

    xmlChar *	xmlUTF8Strndup		(const xmlChar * utf, 
    int len)
    +

    a strndup for array of UTF8's

    +
    utf:the input UTF8 *
    len:the len of @utf (in chars)
    Returns:a new UTF8 * or NULL
    +
    +

    xmlUTF8Strpos ()

    const xmlChar *	xmlUTF8Strpos		(const xmlChar * utf, 
    int pos)
    +

    a function to provide the equivalent of fetching a character from a string array

    +
    utf:the input UTF8 *
    pos:the position of the desired UTF8 char (in chars)
    Returns:a pointer to the UTF8 character or NULL
    +
    +

    xmlUTF8Strsize ()

    int	xmlUTF8Strsize			(const xmlChar * utf, 
    int len)
    +

    storage size of an UTF8 string the behaviour is not garanteed if the input string is not UTF-8

    +
    utf:a sequence of UTF-8 encoded bytes
    len:the number of characters in the array
    Returns:the storage size of the first 'len' characters of ARRAY
    +
    +

    xmlUTF8Strsub ()

    xmlChar *	xmlUTF8Strsub		(const xmlChar * utf, 
    int start,
    int len)
    +

    Create a substring from a given UTF-8 string Note: positions are given in units of UTF-8 chars

    +
    utf:a sequence of UTF-8 encoded bytes
    start:relative pos of first char
    len:total number to copy
    Returns:a pointer to a newly created string or NULL if any problem
    +
    +
    +
    + + diff --git a/doc/devhelp/libxml2-xmlunicode.html b/doc/devhelp/libxml2-xmlunicode.html new file mode 100644 index 0000000..7d4f0d8 --- /dev/null +++ b/doc/devhelp/libxml2-xmlunicode.html @@ -0,0 +1,887 @@ + + + + + xmlunicode: Unicode character APIs + + + + + + + + + + + + + + + + +

    + xmlunicode +

    +

    xmlunicode - Unicode character APIs

    +

    API for the Unicode character APIs This file is automatically generated from the UCS description files of the Unicode Character Database

    +

    Author(s): Daniel Veillard

    +
    +

    Synopsis

    +
    int	xmlUCSIsBlockElements		(int code);
    +int	xmlUCSIsBopomofo		(int code);
    +int	xmlUCSIsDingbats		(int code);
    +int	xmlUCSIsSuperscriptsandSubscripts	(int code);
    +int	xmlUCSIsCombiningHalfMarks	(int code);
    +int	xmlUCSIsTibetan			(int code);
    +int	xmlUCSIsYiRadicals		(int code);
    +int	xmlUCSIsCombiningMarksforSymbols	(int code);
    +int	xmlUCSIsHangulSyllables		(int code);
    +int	xmlUCSIsBasicLatin		(int code);
    +int	xmlUCSIsCatSc			(int code);
    +int	xmlUCSIsCatSo			(int code);
    +int	xmlUCSIsLimbu			(int code);
    +int	xmlUCSIsCatSm			(int code);
    +int	xmlUCSIsCatSk			(int code);
    +int	xmlUCSIsKhmerSymbols		(int code);
    +int	xmlUCSIsMongolian		(int code);
    +int	xmlUCSIsMalayalam		(int code);
    +int	xmlUCSIsMathematicalAlphanumericSymbols	(int code);
    +int	xmlUCSIsThaana			(int code);
    +int	xmlUCSIsMyanmar			(int code);
    +int	xmlUCSIsTags			(int code);
    +int	xmlUCSIsCJKCompatibilityIdeographs	(int code);
    +int	xmlUCSIsTelugu			(int code);
    +int	xmlUCSIsLowSurrogates		(int code);
    +int	xmlUCSIsOsmanya			(int code);
    +int	xmlUCSIsSyriac			(int code);
    +int	xmlUCSIsEthiopic		(int code);
    +int	xmlUCSIsBoxDrawing		(int code);
    +int	xmlUCSIsGreekExtended		(int code);
    +int	xmlUCSIsGreekandCoptic		(int code);
    +int	xmlUCSIsKannada			(int code);
    +int	xmlUCSIsByzantineMusicalSymbols	(int code);
    +int	xmlUCSIsEnclosedCJKLettersandMonths	(int code);
    +int	xmlUCSIsCJKCompatibilityForms	(int code);
    +int	xmlUCSIsCatCs			(int code);
    +int	xmlUCSIsCJKRadicalsSupplement	(int code);
    +int	xmlUCSIsCatCf			(int code);
    +int	xmlUCSIsSmallFormVariants	(int code);
    +int	xmlUCSIsHangulCompatibilityJamo	(int code);
    +int	xmlUCSIsCatCc			(int code);
    +int	xmlUCSIsCatCo			(int code);
    +int	xmlUCSIsCherokee		(int code);
    +int	xmlUCSIsGothic			(int code);
    +int	xmlUCSIsKhmer			(int code);
    +int	xmlUCSIsCombiningDiacriticalMarksforSymbols	(int code);
    +int	xmlUCSIsOgham			(int code);
    +int	xmlUCSIsOriya			(int code);
    +int	xmlUCSIsLinearBIdeograms	(int code);
    +int	xmlUCSIsBlock			(int code, 
    const char * block); +int xmlUCSIsBopomofoExtended (int code); +int xmlUCSIsHangulJamo (int code); +int xmlUCSIsTagbanwa (int code); +int xmlUCSIsGeneralPunctuation (int code); +int xmlUCSIsCyrillic (int code); +int xmlUCSIsArrows (int code); +int xmlUCSIsControlPictures (int code); +int xmlUCSIsCJKUnifiedIdeographs (int code); +int xmlUCSIsCatNl (int code); +int xmlUCSIsCatNo (int code); +int xmlUCSIsYijingHexagramSymbols (int code); +int xmlUCSIsVariationSelectorsSupplement (int code); +int xmlUCSIsBengali (int code); +int xmlUCSIsPrivateUse (int code); +int xmlUCSIsMusicalSymbols (int code); +int xmlUCSIsMiscellaneousSymbols (int code); +int xmlUCSIsCJKCompatibility (int code); +int xmlUCSIsAegeanNumbers (int code); +int xmlUCSIsDevanagari (int code); +int xmlUCSIsSupplementalArrowsA (int code); +int xmlUCSIsSupplementalArrowsB (int code); +int xmlUCSIsNumberForms (int code); +int xmlUCSIsSpacingModifierLetters (int code); +int xmlUCSIsOpticalCharacterRecognition (int code); +int xmlUCSIsCatPc (int code); +int xmlUCSIsCatPf (int code); +int xmlUCSIsCyrillicSupplement (int code); +int xmlUCSIsCatPd (int code); +int xmlUCSIsCatPi (int code); +int xmlUCSIsCatPo (int code); +int xmlUCSIsHighPrivateUseSurrogates (int code); +int xmlUCSIsLatinExtendedAdditional (int code); +int xmlUCSIsCatPs (int code); +int xmlUCSIsHighSurrogates (int code); +int xmlUCSIsLao (int code); +int xmlUCSIsBraillePatterns (int code); +int xmlUCSIsDeseret (int code); +int xmlUCSIsEnclosedAlphanumerics (int code); +int xmlUCSIsCombiningDiacriticalMarks (int code); +int xmlUCSIsIdeographicDescriptionCharacters (int code); +int xmlUCSIsPrivateUseArea (int code); +int xmlUCSIsCat (int code,
    const char * cat); +int xmlUCSIsCatLu (int code); +int xmlUCSIsCatLt (int code); +int xmlUCSIsYiSyllables (int code); +int xmlUCSIsShavian (int code); +int xmlUCSIsCatLo (int code); +int xmlUCSIsCatLm (int code); +int xmlUCSIsCatLl (int code); +int xmlUCSIsMiscellaneousTechnical (int code); +int xmlUCSIsUgaritic (int code); +int xmlUCSIsCJKCompatibilityIdeographsSupplement (int code); +int xmlUCSIsCypriotSyllabary (int code); +int xmlUCSIsTamil (int code); +int xmlUCSIsCatC (int code); +int xmlUCSIsCatN (int code); +int xmlUCSIsCatL (int code); +int xmlUCSIsCatM (int code); +int xmlUCSIsUnifiedCanadianAboriginalSyllabics (int code); +int xmlUCSIsCatS (int code); +int xmlUCSIsCatP (int code); +int xmlUCSIsSinhala (int code); +int xmlUCSIsGeorgian (int code); +int xmlUCSIsCatZ (int code); +int xmlUCSIsIPAExtensions (int code); +int xmlUCSIsKangxiRadicals (int code); +int xmlUCSIsGreek (int code); +int xmlUCSIsCatPe (int code); +int xmlUCSIsHanunoo (int code); +int xmlUCSIsArmenian (int code); +int xmlUCSIsSupplementaryPrivateUseAreaB (int code); +int xmlUCSIsSupplementaryPrivateUseAreaA (int code); +int xmlUCSIsKatakanaPhoneticExtensions (int code); +int xmlUCSIsLetterlikeSymbols (int code); +int xmlUCSIsPhoneticExtensions (int code); +int xmlUCSIsArabic (int code); +int xmlUCSIsHebrew (int code); +int xmlUCSIsOldItalic (int code); +int xmlUCSIsArabicPresentationFormsA (int code); +int xmlUCSIsCatZp (int code); +int xmlUCSIsCatZs (int code); +int xmlUCSIsArabicPresentationFormsB (int code); +int xmlUCSIsGeometricShapes (int code); +int xmlUCSIsCatZl (int code); +int xmlUCSIsTagalog (int code); +int xmlUCSIsSpecials (int code); +int xmlUCSIsGujarati (int code); +int xmlUCSIsKatakana (int code); +int xmlUCSIsHalfwidthandFullwidthForms (int code); +int xmlUCSIsLatinExtendedB (int code); +int xmlUCSIsLatinExtendedA (int code); +int xmlUCSIsBuhid (int code); +int xmlUCSIsMiscellaneousSymbolsandArrows (int code); +int xmlUCSIsTaiLe (int code); +int xmlUCSIsCJKSymbolsandPunctuation (int code); +int xmlUCSIsTaiXuanJingSymbols (int code); +int xmlUCSIsGurmukhi (int code); +int xmlUCSIsMathematicalOperators (int code); +int xmlUCSIsAlphabeticPresentationForms (int code); +int xmlUCSIsCurrencySymbols (int code); +int xmlUCSIsSupplementalMathematicalOperators (int code); +int xmlUCSIsCJKUnifiedIdeographsExtensionA (int code); +int xmlUCSIsKanbun (int code); +int xmlUCSIsCJKUnifiedIdeographsExtensionB (int code); +int xmlUCSIsThai (int code); +int xmlUCSIsRunic (int code); +int xmlUCSIsCatNd (int code); +int xmlUCSIsLatin1Supplement (int code); +int xmlUCSIsLinearBSyllabary (int code); +int xmlUCSIsHiragana (int code); +int xmlUCSIsMiscellaneousMathematicalSymbolsB (int code); +int xmlUCSIsMiscellaneousMathematicalSymbolsA (int code); +int xmlUCSIsCatMn (int code); +int xmlUCSIsVariationSelectors (int code); +int xmlUCSIsCatMc (int code); +int xmlUCSIsCatMe (int code); +
    +
    +
    +

    Description

    +
    +
    +

    Details

    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/doc/devhelp/libxml2-xmlversion.html b/doc/devhelp/libxml2-xmlversion.html new file mode 100644 index 0000000..8178614 --- /dev/null +++ b/doc/devhelp/libxml2-xmlversion.html @@ -0,0 +1,292 @@ + + + + + xmlversion: compile-time version informations + + + + + + + + + + + + + + + + +

    + xmlversion +

    +

    xmlversion - compile-time version informations

    +

    compile-time version informations for the XML library

    +

    Author(s): Daniel Veillard

    +
    +
    +

    Description

    +
    +
    +

    Details

    +
    +

    Macro ATTRIBUTE_UNUSED

    #define ATTRIBUTE_UNUSED;
    +

    Macro used to signal to GCC unused function parameters

    +
    +
    +

    Macro DEBUG_MEMORY_LOCATION

    #define DEBUG_MEMORY_LOCATION;
    +

    Whether the memory debugging is configured in

    +
    +
    +

    Macro LIBXML_ATTR_ALLOC_SIZE

    #define LIBXML_ATTR_ALLOC_SIZE;
    +

    Macro used to indicate to GCC this is an allocator function

    +
    +
    +

    Macro LIBXML_ATTR_FORMAT

    #define LIBXML_ATTR_FORMAT;
    +

    Macro used to indicate to GCC the parameter are printf like

    +
    +
    +

    Macro LIBXML_AUTOMATA_ENABLED

    #define LIBXML_AUTOMATA_ENABLED;
    +

    Whether the automata interfaces are compiled in

    +
    +
    +

    Macro LIBXML_C14N_ENABLED

    #define LIBXML_C14N_ENABLED;
    +

    Whether the Canonicalization support is configured in

    +
    +
    +

    Macro LIBXML_CATALOG_ENABLED

    #define LIBXML_CATALOG_ENABLED;
    +

    Whether the Catalog support is configured in

    +
    +
    +

    Macro LIBXML_DEBUG_ENABLED

    #define LIBXML_DEBUG_ENABLED;
    +

    Whether Debugging module is configured in

    +
    +
    +

    Macro LIBXML_DEBUG_RUNTIME

    #define LIBXML_DEBUG_RUNTIME;
    +

    Whether the runtime debugging is configured in

    +
    +
    +

    Macro LIBXML_DOCB_ENABLED

    #define LIBXML_DOCB_ENABLED;
    +

    Whether the SGML Docbook support is configured in

    +
    +
    +

    Macro LIBXML_DOTTED_VERSION

    #define LIBXML_DOTTED_VERSION;
    +

    the version string like "1.2.3"

    +
    +
    +

    Macro LIBXML_EXPR_ENABLED

    #define LIBXML_EXPR_ENABLED;
    +

    Whether the formal expressions interfaces are compiled in

    +
    +
    +

    Macro LIBXML_FTP_ENABLED

    #define LIBXML_FTP_ENABLED;
    +

    Whether the FTP support is configured in

    +
    +
    +

    Macro LIBXML_HTML_ENABLED

    #define LIBXML_HTML_ENABLED;
    +

    Whether the HTML support is configured in

    +
    +
    +

    Macro LIBXML_HTTP_ENABLED

    #define LIBXML_HTTP_ENABLED;
    +

    Whether the HTTP support is configured in

    +
    +
    +

    Macro LIBXML_ICONV_ENABLED

    #define LIBXML_ICONV_ENABLED;
    +

    Whether iconv support is available

    +
    +
    +

    Macro LIBXML_ICU_ENABLED

    #define LIBXML_ICU_ENABLED;
    +

    Whether icu support is available

    +
    +
    +

    Macro LIBXML_ISO8859X_ENABLED

    #define LIBXML_ISO8859X_ENABLED;
    +

    Whether ISO-8859-* support is made available in case iconv is not

    +
    +
    +

    Macro LIBXML_LEGACY_ENABLED

    #define LIBXML_LEGACY_ENABLED;
    +

    Whether the deprecated APIs are compiled in for compatibility

    +
    +
    +

    Macro LIBXML_LZMA_ENABLED

    #define LIBXML_LZMA_ENABLED;
    +

    Whether the Lzma support is compiled in

    +
    +
    +

    Macro LIBXML_MODULES_ENABLED

    #define LIBXML_MODULES_ENABLED;
    +

    Whether the module interfaces are compiled in

    +
    +
    +

    Macro LIBXML_MODULE_EXTENSION

    #define LIBXML_MODULE_EXTENSION;
    +

    the string suffix used by dynamic modules (usually shared libraries)

    +
    +
    +

    Macro LIBXML_OUTPUT_ENABLED

    #define LIBXML_OUTPUT_ENABLED;
    +

    Whether the serialization/saving support is configured in

    +
    +
    +

    Macro LIBXML_PATTERN_ENABLED

    #define LIBXML_PATTERN_ENABLED;
    +

    Whether the xmlPattern node selection interface is configured in

    +
    +
    +

    Macro LIBXML_PUSH_ENABLED

    #define LIBXML_PUSH_ENABLED;
    +

    Whether the push parsing interfaces are configured in

    +
    +
    +

    Macro LIBXML_READER_ENABLED

    #define LIBXML_READER_ENABLED;
    +

    Whether the xmlReader parsing interface is configured in

    +
    +
    +

    Macro LIBXML_REGEXP_ENABLED

    #define LIBXML_REGEXP_ENABLED;
    +

    Whether the regular expressions interfaces are compiled in

    +
    +
    +

    Macro LIBXML_SAX1_ENABLED

    #define LIBXML_SAX1_ENABLED;
    +

    Whether the older SAX1 interface is configured in

    +
    +
    +

    Macro LIBXML_SCHEMAS_ENABLED

    #define LIBXML_SCHEMAS_ENABLED;
    +

    Whether the Schemas validation interfaces are compiled in

    +
    +
    +

    Macro LIBXML_SCHEMATRON_ENABLED

    #define LIBXML_SCHEMATRON_ENABLED;
    +

    Whether the Schematron validation interfaces are compiled in

    +
    +
    +

    Macro LIBXML_TEST_VERSION

    #define LIBXML_TEST_VERSION;
    +

    Macro to check that the libxml version in use is compatible with the version the software has been compiled against

    +
    +
    +

    Macro LIBXML_THREAD_ALLOC_ENABLED

    #define LIBXML_THREAD_ALLOC_ENABLED;
    +

    Whether the allocation hooks are per-thread

    +
    +
    +

    Macro LIBXML_THREAD_ENABLED

    #define LIBXML_THREAD_ENABLED;
    +

    Whether the thread support is configured in

    +
    +
    +

    Macro LIBXML_TREE_ENABLED

    #define LIBXML_TREE_ENABLED;
    +

    Whether the DOM like tree manipulation API support is configured in

    +
    +
    +

    Macro LIBXML_UNICODE_ENABLED

    #define LIBXML_UNICODE_ENABLED;
    +

    Whether the Unicode related interfaces are compiled in

    +
    +
    +

    Macro LIBXML_VALID_ENABLED

    #define LIBXML_VALID_ENABLED;
    +

    Whether the DTD validation support is configured in

    +
    +
    +

    Macro LIBXML_VERSION

    #define LIBXML_VERSION;
    +

    the version number: 1.2.3 value is 10203

    +
    +
    +

    Macro LIBXML_VERSION_EXTRA

    #define LIBXML_VERSION_EXTRA;
    +

    extra version information, used to show a CVS compilation

    +
    +
    +

    Macro LIBXML_VERSION_STRING

    #define LIBXML_VERSION_STRING;
    +

    the version number string, 1.2.3 value is "10203"

    +
    +
    +

    Macro LIBXML_WRITER_ENABLED

    #define LIBXML_WRITER_ENABLED;
    +

    Whether the xmlWriter saving interface is configured in

    +
    +
    +

    Macro LIBXML_XINCLUDE_ENABLED

    #define LIBXML_XINCLUDE_ENABLED;
    +

    Whether XInclude is configured in

    +
    +
    +

    Macro LIBXML_XPATH_ENABLED

    #define LIBXML_XPATH_ENABLED;
    +

    Whether XPath is configured in

    +
    +
    +

    Macro LIBXML_XPTR_ENABLED

    #define LIBXML_XPTR_ENABLED;
    +

    Whether XPointer is configured in

    +
    +
    +

    Macro LIBXML_ZLIB_ENABLED

    #define LIBXML_ZLIB_ENABLED;
    +

    Whether the Zlib support is compiled in

    +
    +
    +

    Macro WITHOUT_TRIO

    #define WITHOUT_TRIO;
    +

    defined if the trio support should not be configured in

    +
    +
    +

    Macro WITH_TRIO

    #define WITH_TRIO;
    +

    defined if the trio support need to be configured in

    +
    +
    + +
    +
    +
    + + diff --git a/doc/devhelp/libxml2-xmlwriter.html b/doc/devhelp/libxml2-xmlwriter.html new file mode 100644 index 0000000..7c2be92 --- /dev/null +++ b/doc/devhelp/libxml2-xmlwriter.html @@ -0,0 +1,479 @@ + + + + + xmlwriter: text writing API for XML + + + + + + + + + + + + + + + + +

    + xmlwriter +

    +

    xmlwriter - text writing API for XML

    +

    text writing API for XML

    +

    Author(s): Alfred Mickautsch <alfred@mickautsch.de>

    +
    +

    Synopsis

    +
    #define xmlTextWriterWriteProcessingInstruction;
    +#define xmlTextWriterWriteDocType;
    +typedef struct _xmlTextWriter xmlTextWriter;
    +typedef xmlTextWriter * xmlTextWriterPtr;
    +int	xmlTextWriterStartDocument	(xmlTextWriterPtr writer, 
    const char * version,
    const char * encoding,
    const char * standalone); +int xmlTextWriterEndPI (xmlTextWriterPtr writer); +int xmlTextWriterWriteBase64 (xmlTextWriterPtr writer,
    const char * data,
    int start,
    int len); +int xmlTextWriterSetIndentString (xmlTextWriterPtr writer,
    const xmlChar * str); +int xmlTextWriterStartAttribute (xmlTextWriterPtr writer,
    const xmlChar * name); +int xmlTextWriterEndComment (xmlTextWriterPtr writer); +int xmlTextWriterWriteRawLen (xmlTextWriterPtr writer,
    const xmlChar * content,
    int len); +int xmlTextWriterWriteDTDExternalEntityContents (xmlTextWriterPtr writer,
    const xmlChar * pubid,
    const xmlChar * sysid,
    const xmlChar * ndataid); +int xmlTextWriterWriteVFormatCDATA (xmlTextWriterPtr writer,
    const char * format,
    va_list argptr); +int xmlTextWriterStartAttributeNS (xmlTextWriterPtr writer,
    const xmlChar * prefix,
    const xmlChar * name,
    const xmlChar * namespaceURI); +xmlTextWriterPtr xmlNewTextWriterPushParser (xmlParserCtxtPtr ctxt,
    int compression); +int xmlTextWriterWriteFormatAttributeNS (xmlTextWriterPtr writer,
    const xmlChar * prefix,
    const xmlChar * name,
    const xmlChar * namespaceURI,
    const char * format,
    ... ...); +int xmlTextWriterWriteDTDEntity (xmlTextWriterPtr writer,
    int pe,
    const xmlChar * name,
    const xmlChar * pubid,
    const xmlChar * sysid,
    const xmlChar * ndataid,
    const xmlChar * content); +int xmlTextWriterWriteVFormatPI (xmlTextWriterPtr writer,
    const xmlChar * target,
    const char * format,
    va_list argptr); +int xmlTextWriterWriteBinHex (xmlTextWriterPtr writer,
    const char * data,
    int start,
    int len); +int xmlTextWriterEndAttribute (xmlTextWriterPtr writer); +int xmlTextWriterSetIndent (xmlTextWriterPtr writer,
    int indent); +int xmlTextWriterWriteFormatPI (xmlTextWriterPtr writer,
    const xmlChar * target,
    const char * format,
    ... ...); +int xmlTextWriterEndDocument (xmlTextWriterPtr writer); +int xmlTextWriterWriteDTDAttlist (xmlTextWriterPtr writer,
    const xmlChar * name,
    const xmlChar * content); +int xmlTextWriterStartComment (xmlTextWriterPtr writer); +int xmlTextWriterWriteVFormatDTD (xmlTextWriterPtr writer,
    const xmlChar * name,
    const xmlChar * pubid,
    const xmlChar * sysid,
    const char * format,
    va_list argptr); +int xmlTextWriterEndCDATA (xmlTextWriterPtr writer); +int xmlTextWriterStartElementNS (xmlTextWriterPtr writer,
    const xmlChar * prefix,
    const xmlChar * name,
    const xmlChar * namespaceURI); +int xmlTextWriterEndDTDEntity (xmlTextWriterPtr writer); +xmlTextWriterPtr xmlNewTextWriter (xmlOutputBufferPtr out); +void xmlFreeTextWriter (xmlTextWriterPtr writer); +int xmlTextWriterWriteVFormatDTDAttlist (xmlTextWriterPtr writer,
    const xmlChar * name,
    const char * format,
    va_list argptr); +int xmlTextWriterStartPI (xmlTextWriterPtr writer,
    const xmlChar * target); +int xmlTextWriterStartElement (xmlTextWriterPtr writer,
    const xmlChar * name); +int xmlTextWriterWriteDTDExternalEntity (xmlTextWriterPtr writer,
    int pe,
    const xmlChar * name,
    const xmlChar * pubid,
    const xmlChar * sysid,
    const xmlChar * ndataid); +int xmlTextWriterWriteFormatRaw (xmlTextWriterPtr writer,
    const char * format,
    ... ...); +int xmlTextWriterWriteCDATA (xmlTextWriterPtr writer,
    const xmlChar * content); +int xmlTextWriterWriteVFormatDTDInternalEntity (xmlTextWriterPtr writer,
    int pe,
    const xmlChar * name,
    const char * format,
    va_list argptr); +int xmlTextWriterWriteVFormatAttribute (xmlTextWriterPtr writer,
    const xmlChar * name,
    const char * format,
    va_list argptr); +int xmlTextWriterEndDTDElement (xmlTextWriterPtr writer); +int xmlTextWriterEndDTD (xmlTextWriterPtr writer); +int xmlTextWriterWriteElement (xmlTextWriterPtr writer,
    const xmlChar * name,
    const xmlChar * content); +int xmlTextWriterEndElement (xmlTextWriterPtr writer); +int xmlTextWriterWriteVFormatComment (xmlTextWriterPtr writer,
    const char * format,
    va_list argptr); +int xmlTextWriterStartCDATA (xmlTextWriterPtr writer); +xmlTextWriterPtr xmlNewTextWriterFilename (const char * uri,
    int compression); +int xmlTextWriterWriteVFormatElement (xmlTextWriterPtr writer,
    const xmlChar * name,
    const char * format,
    va_list argptr); +int xmlTextWriterWriteFormatComment (xmlTextWriterPtr writer,
    const char * format,
    ... ...); +int xmlTextWriterWriteAttributeNS (xmlTextWriterPtr writer,
    const xmlChar * prefix,
    const xmlChar * name,
    const xmlChar * namespaceURI,
    const xmlChar * content); +int xmlTextWriterWritePI (xmlTextWriterPtr writer,
    const xmlChar * target,
    const xmlChar * content); +int xmlTextWriterWriteFormatDTDInternalEntity (xmlTextWriterPtr writer,
    int pe,
    const xmlChar * name,
    const char * format,
    ... ...); +int xmlTextWriterWriteVFormatString (xmlTextWriterPtr writer,
    const char * format,
    va_list argptr); +int xmlTextWriterWriteDTDInternalEntity (xmlTextWriterPtr writer,
    int pe,
    const xmlChar * name,
    const xmlChar * content); +int xmlTextWriterWriteVFormatElementNS (xmlTextWriterPtr writer,
    const xmlChar * prefix,
    const xmlChar * name,
    const xmlChar * namespaceURI,
    const char * format,
    va_list argptr); +int xmlTextWriterWriteDTDNotation (xmlTextWriterPtr writer,
    const xmlChar * name,
    const xmlChar * pubid,
    const xmlChar * sysid); +int xmlTextWriterWriteFormatElement (xmlTextWriterPtr writer,
    const xmlChar * name,
    const char * format,
    ... ...); +int xmlTextWriterSetQuoteChar (xmlTextWriterPtr writer,
    xmlChar quotechar); +int xmlTextWriterWriteString (xmlTextWriterPtr writer,
    const xmlChar * content); +int xmlTextWriterWriteElementNS (xmlTextWriterPtr writer,
    const xmlChar * prefix,
    const xmlChar * name,
    const xmlChar * namespaceURI,
    const xmlChar * content); +int xmlTextWriterFullEndElement (xmlTextWriterPtr writer); +int xmlTextWriterWriteVFormatAttributeNS (xmlTextWriterPtr writer,
    const xmlChar * prefix,
    const xmlChar * name,
    const xmlChar * namespaceURI,
    const char * format,
    va_list argptr); +int xmlTextWriterFlush (xmlTextWriterPtr writer); +int xmlTextWriterStartDTD (xmlTextWriterPtr writer,
    const xmlChar * name,
    const xmlChar * pubid,
    const xmlChar * sysid); +int xmlTextWriterWriteAttribute (xmlTextWriterPtr writer,
    const xmlChar * name,
    const xmlChar * content); +xmlTextWriterPtr xmlNewTextWriterDoc (xmlDocPtr * doc,
    int compression); +int xmlTextWriterWriteFormatDTDElement (xmlTextWriterPtr writer,
    const xmlChar * name,
    const char * format,
    ... ...); +int xmlTextWriterEndDTDAttlist (xmlTextWriterPtr writer); +xmlTextWriterPtr xmlNewTextWriterTree (xmlDocPtr doc,
    xmlNodePtr node,
    int compression); +xmlTextWriterPtr xmlNewTextWriterMemory (xmlBufferPtr buf,
    int compression); +int xmlTextWriterWriteFormatCDATA (xmlTextWriterPtr writer,
    const char * format,
    ... ...); +int xmlTextWriterStartDTDAttlist (xmlTextWriterPtr writer,
    const xmlChar * name); +int xmlTextWriterWriteFormatString (xmlTextWriterPtr writer,
    const char * format,
    ... ...); +int xmlTextWriterWriteComment (xmlTextWriterPtr writer,
    const xmlChar * content); +int xmlTextWriterWriteVFormatRaw (xmlTextWriterPtr writer,
    const char * format,
    va_list argptr); +int xmlTextWriterWriteFormatDTD (xmlTextWriterPtr writer,
    const xmlChar * name,
    const xmlChar * pubid,
    const xmlChar * sysid,
    const char * format,
    ... ...); +int xmlTextWriterWriteFormatDTDAttlist (xmlTextWriterPtr writer,
    const xmlChar * name,
    const char * format,
    ... ...); +int xmlTextWriterWriteRaw (xmlTextWriterPtr writer,
    const xmlChar * content); +int xmlTextWriterWriteDTDElement (xmlTextWriterPtr writer,
    const xmlChar * name,
    const xmlChar * content); +int xmlTextWriterWriteDTD (xmlTextWriterPtr writer,
    const xmlChar * name,
    const xmlChar * pubid,
    const xmlChar * sysid,
    const xmlChar * subset); +int xmlTextWriterWriteFormatAttribute (xmlTextWriterPtr writer,
    const xmlChar * name,
    const char * format,
    ... ...); +int xmlTextWriterStartDTDEntity (xmlTextWriterPtr writer,
    int pe,
    const xmlChar * name); +int xmlTextWriterWriteVFormatDTDElement (xmlTextWriterPtr writer,
    const xmlChar * name,
    const char * format,
    va_list argptr); +int xmlTextWriterStartDTDElement (xmlTextWriterPtr writer,
    const xmlChar * name); +int xmlTextWriterWriteFormatElementNS (xmlTextWriterPtr writer,
    const xmlChar * prefix,
    const xmlChar * name,
    const xmlChar * namespaceURI,
    const char * format,
    ... ...); +
    +
    +
    +

    Description

    +
    +
    +

    Details

    +
    +

    Macro xmlTextWriterWriteDocType

    #define xmlTextWriterWriteDocType;
    +

    this macro maps to xmlTextWriterWriteDTD

    +
    +
    +

    Macro xmlTextWriterWriteProcessingInstruction

    #define xmlTextWriterWriteProcessingInstruction;
    +

    This macro maps to xmlTextWriterWritePI

    +
    +
    +

    Structure xmlTextWriter

    struct _xmlTextWriter {
    +The content of this structure is not made public by the API.
    +} xmlTextWriter;
    +

    +

    +
    +

    Typedef xmlTextWriterPtr

    xmlTextWriter * xmlTextWriterPtr;
    +

    +

    +
    +

    xmlFreeTextWriter ()

    void	xmlFreeTextWriter		(xmlTextWriterPtr writer)
    +

    Deallocate all the resources associated to the writer

    +
    writer:the xmlTextWriterPtr
    +
    +

    xmlNewTextWriter ()

    xmlTextWriterPtr	xmlNewTextWriter	(xmlOutputBufferPtr out)
    +

    Create a new xmlNewTextWriter structure using an xmlOutputBufferPtr NOTE: the @out parameter will be deallocated when the writer is closed (if the call succeed.)

    +
    out:an xmlOutputBufferPtr
    Returns:the new xmlTextWriterPtr or NULL in case of error
    +
    +

    xmlNewTextWriterDoc ()

    xmlTextWriterPtr	xmlNewTextWriterDoc	(xmlDocPtr * doc, 
    int compression)
    +

    Create a new xmlNewTextWriter structure with @*doc as output

    +
    doc:address of a xmlDocPtr to hold the new XML document tree
    compression:compress the output?
    Returns:the new xmlTextWriterPtr or NULL in case of error
    +
    +

    xmlNewTextWriterFilename ()

    xmlTextWriterPtr	xmlNewTextWriterFilename	(const char * uri, 
    int compression)
    +

    Create a new xmlNewTextWriter structure with @uri as output

    +
    uri:the URI of the resource for the output
    compression:compress the output?
    Returns:the new xmlTextWriterPtr or NULL in case of error
    +
    +

    xmlNewTextWriterMemory ()

    xmlTextWriterPtr	xmlNewTextWriterMemory	(xmlBufferPtr buf, 
    int compression)
    +

    Create a new xmlNewTextWriter structure with @buf as output TODO: handle compression

    +
    buf:xmlBufferPtr
    compression:compress the output?
    Returns:the new xmlTextWriterPtr or NULL in case of error
    +
    +

    xmlNewTextWriterPushParser ()

    xmlTextWriterPtr	xmlNewTextWriterPushParser	(xmlParserCtxtPtr ctxt, 
    int compression)
    +

    Create a new xmlNewTextWriter structure with @ctxt as output NOTE: the @ctxt context will be freed with the resulting writer (if the call succeeds). TODO: handle compression

    +
    ctxt:xmlParserCtxtPtr to hold the new XML document tree
    compression:compress the output?
    Returns:the new xmlTextWriterPtr or NULL in case of error
    +
    +

    xmlNewTextWriterTree ()

    xmlTextWriterPtr	xmlNewTextWriterTree	(xmlDocPtr doc, 
    xmlNodePtr node,
    int compression)
    +

    Create a new xmlNewTextWriter structure with @doc as output starting at @node

    +
    doc:xmlDocPtr
    node:xmlNodePtr or NULL for doc->children
    compression:compress the output?
    Returns:the new xmlTextWriterPtr or NULL in case of error
    +
    +

    xmlTextWriterEndAttribute ()

    int	xmlTextWriterEndAttribute	(xmlTextWriterPtr writer)
    +

    End the current xml element.

    +
    writer:the xmlTextWriterPtr
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterEndCDATA ()

    int	xmlTextWriterEndCDATA		(xmlTextWriterPtr writer)
    +

    End an xml CDATA section.

    +
    writer:the xmlTextWriterPtr
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterEndComment ()

    int	xmlTextWriterEndComment		(xmlTextWriterPtr writer)
    +

    End the current xml coment.

    +
    writer:the xmlTextWriterPtr
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterEndDTD ()

    int	xmlTextWriterEndDTD		(xmlTextWriterPtr writer)
    +

    End an xml DTD.

    +
    writer:the xmlTextWriterPtr
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterEndDTDAttlist ()

    int	xmlTextWriterEndDTDAttlist	(xmlTextWriterPtr writer)
    +

    End an xml DTD attribute list.

    +
    writer:the xmlTextWriterPtr
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterEndDTDElement ()

    int	xmlTextWriterEndDTDElement	(xmlTextWriterPtr writer)
    +

    End an xml DTD element.

    +
    writer:the xmlTextWriterPtr
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterEndDTDEntity ()

    int	xmlTextWriterEndDTDEntity	(xmlTextWriterPtr writer)
    +

    End an xml DTD entity.

    +
    writer:the xmlTextWriterPtr
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterEndDocument ()

    int	xmlTextWriterEndDocument	(xmlTextWriterPtr writer)
    +

    End an xml document. All open elements are closed, and the content is flushed to the output.

    +
    writer:the xmlTextWriterPtr
    Returns:the bytes written or -1 in case of error
    +
    +

    xmlTextWriterEndElement ()

    int	xmlTextWriterEndElement		(xmlTextWriterPtr writer)
    +

    End the current xml element.

    +
    writer:the xmlTextWriterPtr
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterEndPI ()

    int	xmlTextWriterEndPI		(xmlTextWriterPtr writer)
    +

    End the current xml PI.

    +
    writer:the xmlTextWriterPtr
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterFlush ()

    int	xmlTextWriterFlush		(xmlTextWriterPtr writer)
    +

    Flush the output buffer.

    +
    writer:the xmlTextWriterPtr
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterFullEndElement ()

    int	xmlTextWriterFullEndElement	(xmlTextWriterPtr writer)
    +

    End the current xml element. Writes an end tag even if the element is empty

    +
    writer:the xmlTextWriterPtr
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterSetIndent ()

    int	xmlTextWriterSetIndent		(xmlTextWriterPtr writer, 
    int indent)
    +

    Set indentation output. indent = 0 do not indentation. indent > 0 do indentation.

    +
    writer:the xmlTextWriterPtr
    indent:do indentation?
    Returns:-1 on error or 0 otherwise.
    +
    +

    xmlTextWriterSetIndentString ()

    int	xmlTextWriterSetIndentString	(xmlTextWriterPtr writer, 
    const xmlChar * str)
    +

    Set string indentation.

    +
    writer:the xmlTextWriterPtr
    str:the xmlChar string
    Returns:-1 on error or 0 otherwise.
    +
    +

    xmlTextWriterSetQuoteChar ()

    int	xmlTextWriterSetQuoteChar	(xmlTextWriterPtr writer, 
    xmlChar quotechar)
    +

    Set the character used for quoting attributes.

    +
    writer:the xmlTextWriterPtr
    quotechar:the quote character
    Returns:-1 on error or 0 otherwise.
    +
    +

    xmlTextWriterStartAttribute ()

    int	xmlTextWriterStartAttribute	(xmlTextWriterPtr writer, 
    const xmlChar * name)
    +

    Start an xml attribute.

    +
    writer:the xmlTextWriterPtr
    name:element name
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterStartAttributeNS ()

    int	xmlTextWriterStartAttributeNS	(xmlTextWriterPtr writer, 
    const xmlChar * prefix,
    const xmlChar * name,
    const xmlChar * namespaceURI)
    +

    Start an xml attribute with namespace support.

    +
    writer:the xmlTextWriterPtr
    prefix:namespace prefix or NULL
    name:element local name
    namespaceURI:namespace URI or NULL
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterStartCDATA ()

    int	xmlTextWriterStartCDATA		(xmlTextWriterPtr writer)
    +

    Start an xml CDATA section.

    +
    writer:the xmlTextWriterPtr
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterStartComment ()

    int	xmlTextWriterStartComment	(xmlTextWriterPtr writer)
    +

    Start an xml comment.

    +
    writer:the xmlTextWriterPtr
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterStartDTD ()

    int	xmlTextWriterStartDTD		(xmlTextWriterPtr writer, 
    const xmlChar * name,
    const xmlChar * pubid,
    const xmlChar * sysid)
    +

    Start an xml DTD.

    +
    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
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterStartDTDAttlist ()

    int	xmlTextWriterStartDTDAttlist	(xmlTextWriterPtr writer, 
    const xmlChar * name)
    +

    Start an xml DTD ATTLIST.

    +
    writer:the xmlTextWriterPtr
    name:the name of the DTD ATTLIST
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterStartDTDElement ()

    int	xmlTextWriterStartDTDElement	(xmlTextWriterPtr writer, 
    const xmlChar * name)
    +

    Start an xml DTD element.

    +
    writer:the xmlTextWriterPtr
    name:the name of the DTD element
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterStartDTDEntity ()

    int	xmlTextWriterStartDTDEntity	(xmlTextWriterPtr writer, 
    int pe,
    const xmlChar * name)
    +

    Start an xml DTD ATTLIST.

    +
    writer:the xmlTextWriterPtr
    pe:TRUE if this is a parameter entity, FALSE if not
    name:the name of the DTD ATTLIST
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterStartDocument ()

    int	xmlTextWriterStartDocument	(xmlTextWriterPtr writer, 
    const char * version,
    const char * encoding,
    const char * standalone)
    +

    Start a new xml document

    +
    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
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterStartElement ()

    int	xmlTextWriterStartElement	(xmlTextWriterPtr writer, 
    const xmlChar * name)
    +

    Start an xml element.

    +
    writer:the xmlTextWriterPtr
    name:element name
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterStartElementNS ()

    int	xmlTextWriterStartElementNS	(xmlTextWriterPtr writer, 
    const xmlChar * prefix,
    const xmlChar * name,
    const xmlChar * namespaceURI)
    +

    Start an xml element with namespace support.

    +
    writer:the xmlTextWriterPtr
    prefix:namespace prefix or NULL
    name:element local name
    namespaceURI:namespace URI or NULL
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterStartPI ()

    int	xmlTextWriterStartPI		(xmlTextWriterPtr writer, 
    const xmlChar * target)
    +

    Start an xml PI.

    +
    writer:the xmlTextWriterPtr
    target:PI target
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterWriteAttribute ()

    int	xmlTextWriterWriteAttribute	(xmlTextWriterPtr writer, 
    const xmlChar * name,
    const xmlChar * content)
    +

    Write an xml attribute.

    +
    writer:the xmlTextWriterPtr
    name:attribute name
    content:attribute content
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterWriteAttributeNS ()

    int	xmlTextWriterWriteAttributeNS	(xmlTextWriterPtr writer, 
    const xmlChar * prefix,
    const xmlChar * name,
    const xmlChar * namespaceURI,
    const xmlChar * content)
    +

    Write an xml attribute.

    +
    writer:the xmlTextWriterPtr
    prefix:namespace prefix
    name:attribute local name
    namespaceURI:namespace URI
    content:attribute content
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterWriteBase64 ()

    int	xmlTextWriterWriteBase64	(xmlTextWriterPtr writer, 
    const char * data,
    int start,
    int len)
    +

    Write an base64 encoded xml text.

    +
    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
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterWriteBinHex ()

    int	xmlTextWriterWriteBinHex	(xmlTextWriterPtr writer, 
    const char * data,
    int start,
    int len)
    +

    Write a BinHex encoded xml text.

    +
    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
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterWriteCDATA ()

    int	xmlTextWriterWriteCDATA		(xmlTextWriterPtr writer, 
    const xmlChar * content)
    +

    Write an xml CDATA.

    +
    writer:the xmlTextWriterPtr
    content:CDATA content
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterWriteComment ()

    int	xmlTextWriterWriteComment	(xmlTextWriterPtr writer, 
    const xmlChar * content)
    +

    Write an xml comment.

    +
    writer:the xmlTextWriterPtr
    content:comment string
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterWriteDTD ()

    int	xmlTextWriterWriteDTD		(xmlTextWriterPtr writer, 
    const xmlChar * name,
    const xmlChar * pubid,
    const xmlChar * sysid,
    const xmlChar * subset)
    +

    Write a DTD.

    +
    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
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterWriteDTDAttlist ()

    int	xmlTextWriterWriteDTDAttlist	(xmlTextWriterPtr writer, 
    const xmlChar * name,
    const xmlChar * content)
    +

    Write a DTD ATTLIST.

    +
    writer:the xmlTextWriterPtr
    name:the name of the DTD ATTLIST
    content:content of the ATTLIST
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterWriteDTDElement ()

    int	xmlTextWriterWriteDTDElement	(xmlTextWriterPtr writer, 
    const xmlChar * name,
    const xmlChar * content)
    +

    Write a DTD element.

    +
    writer:the xmlTextWriterPtr
    name:the name of the DTD element
    content:content of the element
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterWriteDTDEntity ()

    int	xmlTextWriterWriteDTDEntity	(xmlTextWriterPtr writer, 
    int pe,
    const xmlChar * name,
    const xmlChar * pubid,
    const xmlChar * sysid,
    const xmlChar * ndataid,
    const xmlChar * content)
    +

    Write a DTD entity.

    +
    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
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterWriteDTDExternalEntity ()

    int	xmlTextWriterWriteDTDExternalEntity	(xmlTextWriterPtr writer, 
    int pe,
    const xmlChar * name,
    const xmlChar * pubid,
    const xmlChar * sysid,
    const xmlChar * ndataid)
    +

    Write a DTD external entity. The entity must have been started with xmlTextWriterStartDTDEntity

    +
    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.
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterWriteDTDExternalEntityContents ()

    int	xmlTextWriterWriteDTDExternalEntityContents	(xmlTextWriterPtr writer, 
    const xmlChar * pubid,
    const xmlChar * sysid,
    const xmlChar * ndataid)
    +

    Write the contents of a DTD external entity.

    +
    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.
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterWriteDTDInternalEntity ()

    int	xmlTextWriterWriteDTDInternalEntity	(xmlTextWriterPtr writer, 
    int pe,
    const xmlChar * name,
    const xmlChar * content)
    +

    Write a DTD internal entity.

    +
    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
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterWriteDTDNotation ()

    int	xmlTextWriterWriteDTDNotation	(xmlTextWriterPtr writer, 
    const xmlChar * name,
    const xmlChar * pubid,
    const xmlChar * sysid)
    +

    Write a DTD entity.

    +
    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
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterWriteElement ()

    int	xmlTextWriterWriteElement	(xmlTextWriterPtr writer, 
    const xmlChar * name,
    const xmlChar * content)
    +

    Write an xml element.

    +
    writer:the xmlTextWriterPtr
    name:element name
    content:element content
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterWriteElementNS ()

    int	xmlTextWriterWriteElementNS	(xmlTextWriterPtr writer, 
    const xmlChar * prefix,
    const xmlChar * name,
    const xmlChar * namespaceURI,
    const xmlChar * content)
    +

    Write an xml element with namespace support.

    +
    writer:the xmlTextWriterPtr
    prefix:namespace prefix
    name:element local name
    namespaceURI:namespace URI
    content:element content
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterWriteFormatAttribute ()

    int	xmlTextWriterWriteFormatAttribute	(xmlTextWriterPtr writer, 
    const xmlChar * name,
    const char * format,
    ... ...)
    +

    Write a formatted xml attribute.

    +
    writer:the xmlTextWriterPtr
    name:attribute name
    format:format string (see printf)
    ...:extra parameters for the format
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterWriteFormatAttributeNS ()

    int	xmlTextWriterWriteFormatAttributeNS	(xmlTextWriterPtr writer, 
    const xmlChar * prefix,
    const xmlChar * name,
    const xmlChar * namespaceURI,
    const char * format,
    ... ...)
    +

    Write a formatted xml attribute.with namespace support

    +
    writer:the xmlTextWriterPtr
    prefix:namespace prefix
    name:attribute local name
    namespaceURI:namespace URI
    format:format string (see printf)
    ...:extra parameters for the format
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterWriteFormatCDATA ()

    int	xmlTextWriterWriteFormatCDATA	(xmlTextWriterPtr writer, 
    const char * format,
    ... ...)
    +

    Write a formatted xml CDATA.

    +
    writer:the xmlTextWriterPtr
    format:format string (see printf)
    ...:extra parameters for the format
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterWriteFormatComment ()

    int	xmlTextWriterWriteFormatComment	(xmlTextWriterPtr writer, 
    const char * format,
    ... ...)
    +

    Write an xml comment.

    +
    writer:the xmlTextWriterPtr
    format:format string (see printf)
    ...:extra parameters for the format
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterWriteFormatDTD ()

    int	xmlTextWriterWriteFormatDTD	(xmlTextWriterPtr writer, 
    const xmlChar * name,
    const xmlChar * pubid,
    const xmlChar * sysid,
    const char * format,
    ... ...)
    +

    Write a DTD with a formatted markup declarations part.

    +
    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
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterWriteFormatDTDAttlist ()

    int	xmlTextWriterWriteFormatDTDAttlist	(xmlTextWriterPtr writer, 
    const xmlChar * name,
    const char * format,
    ... ...)
    +

    Write a formatted DTD ATTLIST.

    +
    writer:the xmlTextWriterPtr
    name:the name of the DTD ATTLIST
    format:format string (see printf)
    ...:extra parameters for the format
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterWriteFormatDTDElement ()

    int	xmlTextWriterWriteFormatDTDElement	(xmlTextWriterPtr writer, 
    const xmlChar * name,
    const char * format,
    ... ...)
    +

    Write a formatted DTD element.

    +
    writer:the xmlTextWriterPtr
    name:the name of the DTD element
    format:format string (see printf)
    ...:extra parameters for the format
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterWriteFormatDTDInternalEntity ()

    int	xmlTextWriterWriteFormatDTDInternalEntity	(xmlTextWriterPtr writer, 
    int pe,
    const xmlChar * name,
    const char * format,
    ... ...)
    +

    Write a formatted DTD internal entity.

    +
    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
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterWriteFormatElement ()

    int	xmlTextWriterWriteFormatElement	(xmlTextWriterPtr writer, 
    const xmlChar * name,
    const char * format,
    ... ...)
    +

    Write a formatted xml element.

    +
    writer:the xmlTextWriterPtr
    name:element name
    format:format string (see printf)
    ...:extra parameters for the format
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterWriteFormatElementNS ()

    int	xmlTextWriterWriteFormatElementNS	(xmlTextWriterPtr writer, 
    const xmlChar * prefix,
    const xmlChar * name,
    const xmlChar * namespaceURI,
    const char * format,
    ... ...)
    +

    Write a formatted xml element with namespace support.

    +
    writer:the xmlTextWriterPtr
    prefix:namespace prefix
    name:element local name
    namespaceURI:namespace URI
    format:format string (see printf)
    ...:extra parameters for the format
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterWriteFormatPI ()

    int	xmlTextWriterWriteFormatPI	(xmlTextWriterPtr writer, 
    const xmlChar * target,
    const char * format,
    ... ...)
    +

    Write a formatted PI.

    +
    writer:the xmlTextWriterPtr
    target:PI target
    format:format string (see printf)
    ...:extra parameters for the format
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterWriteFormatRaw ()

    int	xmlTextWriterWriteFormatRaw	(xmlTextWriterPtr writer, 
    const char * format,
    ... ...)
    +

    Write a formatted raw xml text.

    +
    writer:the xmlTextWriterPtr
    format:format string (see printf)
    ...:extra parameters for the format
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterWriteFormatString ()

    int	xmlTextWriterWriteFormatString	(xmlTextWriterPtr writer, 
    const char * format,
    ... ...)
    +

    Write a formatted xml text.

    +
    writer:the xmlTextWriterPtr
    format:format string (see printf)
    ...:extra parameters for the format
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterWritePI ()

    int	xmlTextWriterWritePI		(xmlTextWriterPtr writer, 
    const xmlChar * target,
    const xmlChar * content)
    +

    Write an xml PI.

    +
    writer:the xmlTextWriterPtr
    target:PI target
    content:PI content
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterWriteRaw ()

    int	xmlTextWriterWriteRaw		(xmlTextWriterPtr writer, 
    const xmlChar * content)
    +

    Write a raw xml text.

    +
    writer:the xmlTextWriterPtr
    content:text string
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterWriteRawLen ()

    int	xmlTextWriterWriteRawLen	(xmlTextWriterPtr writer, 
    const xmlChar * content,
    int len)
    +

    Write an xml text. TODO: what about entities and special chars??

    +
    writer:the xmlTextWriterPtr
    content:text string
    len:length of the text string
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterWriteString ()

    int	xmlTextWriterWriteString	(xmlTextWriterPtr writer, 
    const xmlChar * content)
    +

    Write an xml text.

    +
    writer:the xmlTextWriterPtr
    content:text string
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterWriteVFormatAttribute ()

    int	xmlTextWriterWriteVFormatAttribute	(xmlTextWriterPtr writer, 
    const xmlChar * name,
    const char * format,
    va_list argptr)
    +

    Write a formatted xml attribute.

    +
    writer:the xmlTextWriterPtr
    name:attribute name
    format:format string (see printf)
    argptr:pointer to the first member of the variable argument list.
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterWriteVFormatAttributeNS ()

    int	xmlTextWriterWriteVFormatAttributeNS	(xmlTextWriterPtr writer, 
    const xmlChar * prefix,
    const xmlChar * name,
    const xmlChar * namespaceURI,
    const char * format,
    va_list argptr)
    +

    Write a formatted xml attribute.with namespace support

    +
    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.
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterWriteVFormatCDATA ()

    int	xmlTextWriterWriteVFormatCDATA	(xmlTextWriterPtr writer, 
    const char * format,
    va_list argptr)
    +

    Write a formatted xml CDATA.

    +
    writer:the xmlTextWriterPtr
    format:format string (see printf)
    argptr:pointer to the first member of the variable argument list.
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterWriteVFormatComment ()

    int	xmlTextWriterWriteVFormatComment	(xmlTextWriterPtr writer, 
    const char * format,
    va_list argptr)
    +

    Write an xml comment.

    +
    writer:the xmlTextWriterPtr
    format:format string (see printf)
    argptr:pointer to the first member of the variable argument list.
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterWriteVFormatDTD ()

    int	xmlTextWriterWriteVFormatDTD	(xmlTextWriterPtr writer, 
    const xmlChar * name,
    const xmlChar * pubid,
    const xmlChar * sysid,
    const char * format,
    va_list argptr)
    +

    Write a DTD with a formatted markup declarations part.

    +
    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.
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterWriteVFormatDTDAttlist ()

    int	xmlTextWriterWriteVFormatDTDAttlist	(xmlTextWriterPtr writer, 
    const xmlChar * name,
    const char * format,
    va_list argptr)
    +

    Write a formatted DTD ATTLIST.

    +
    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.
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterWriteVFormatDTDElement ()

    int	xmlTextWriterWriteVFormatDTDElement	(xmlTextWriterPtr writer, 
    const xmlChar * name,
    const char * format,
    va_list argptr)
    +

    Write a formatted DTD element.

    +
    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.
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterWriteVFormatDTDInternalEntity ()

    int	xmlTextWriterWriteVFormatDTDInternalEntity	(xmlTextWriterPtr writer, 
    int pe,
    const xmlChar * name,
    const char * format,
    va_list argptr)
    +

    Write a formatted DTD internal entity.

    +
    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.
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterWriteVFormatElement ()

    int	xmlTextWriterWriteVFormatElement	(xmlTextWriterPtr writer, 
    const xmlChar * name,
    const char * format,
    va_list argptr)
    +

    Write a formatted xml element.

    +
    writer:the xmlTextWriterPtr
    name:element name
    format:format string (see printf)
    argptr:pointer to the first member of the variable argument list.
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterWriteVFormatElementNS ()

    int	xmlTextWriterWriteVFormatElementNS	(xmlTextWriterPtr writer, 
    const xmlChar * prefix,
    const xmlChar * name,
    const xmlChar * namespaceURI,
    const char * format,
    va_list argptr)
    +

    Write a formatted xml element with namespace support.

    +
    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.
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterWriteVFormatPI ()

    int	xmlTextWriterWriteVFormatPI	(xmlTextWriterPtr writer, 
    const xmlChar * target,
    const char * format,
    va_list argptr)
    +

    Write a formatted xml PI.

    +
    writer:the xmlTextWriterPtr
    target:PI target
    format:format string (see printf)
    argptr:pointer to the first member of the variable argument list.
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterWriteVFormatRaw ()

    int	xmlTextWriterWriteVFormatRaw	(xmlTextWriterPtr writer, 
    const char * format,
    va_list argptr)
    +

    Write a formatted raw xml text.

    +
    writer:the xmlTextWriterPtr
    format:format string (see printf)
    argptr:pointer to the first member of the variable argument list.
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +

    xmlTextWriterWriteVFormatString ()

    int	xmlTextWriterWriteVFormatString	(xmlTextWriterPtr writer, 
    const char * format,
    va_list argptr)
    +

    Write a formatted xml text.

    +
    writer:the xmlTextWriterPtr
    format:format string (see printf)
    argptr:pointer to the first member of the variable argument list.
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error
    +
    +
    +
    + + diff --git a/doc/devhelp/libxml2-xpath.html b/doc/devhelp/libxml2-xpath.html new file mode 100644 index 0000000..640c715 --- /dev/null +++ b/doc/devhelp/libxml2-xpath.html @@ -0,0 +1,542 @@ + + + + + xpath: XML Path Language implementation + + + + + + + + + + + + + + + + +

    + xpath +

    +

    xpath - XML Path Language implementation

    +

    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

    +

    Author(s): Daniel Veillard

    +
    +

    Synopsis

    +
    #define xmlXPathNodeSetGetLength(ns);
    +#define XML_XPATH_CHECKNS;
    +#define XML_XPATH_NOVAR;
    +#define xmlXPathNodeSetItem(ns, index);
    +#define xmlXPathNodeSetIsEmpty(ns);
    +typedef enum xmlXPathObjectType;
    +typedef xmlXPathVariable * xmlXPathVariablePtr;
    +typedef struct _xmlXPathContext xmlXPathContext;
    +typedef enum xmlXPathError;
    +typedef struct _xmlXPathFunct xmlXPathFunct;
    +typedef xmlXPathType * xmlXPathTypePtr;
    +typedef struct _xmlXPathType xmlXPathType;
    +typedef xmlNodeSet * xmlNodeSetPtr;
    +typedef xmlXPathFunct * xmlXPathFuncPtr;
    +typedef xmlXPathCompExpr * xmlXPathCompExprPtr;
    +typedef struct _xmlXPathObject xmlXPathObject;
    +typedef struct _xmlXPathCompExpr xmlXPathCompExpr;
    +typedef xmlXPathContext * xmlXPathContextPtr;
    +typedef xmlXPathParserContext * xmlXPathParserContextPtr;
    +typedef struct _xmlNodeSet xmlNodeSet;
    +typedef struct _xmlXPathVariable xmlXPathVariable;
    +typedef xmlXPathObject * xmlXPathObjectPtr;
    +typedef struct _xmlXPathAxis xmlXPathAxis;
    +typedef xmlXPathAxis * xmlXPathAxisPtr;
    +typedef struct _xmlXPathParserContext xmlXPathParserContext;
    +int	xmlXPathCastNodeSetToBoolean	(xmlNodeSetPtr ns);
    +typedef xmlXPathFunction xmlXPathFuncLookupFunc	(void * ctxt, 
    const xmlChar * name,
    const xmlChar * ns_uri); +xmlXPathObjectPtr xmlXPathNodeEval (xmlNodePtr node,
    const xmlChar * str,
    xmlXPathContextPtr ctx); +xmlChar * xmlXPathCastNodeToString (xmlNodePtr node); +int xmlXPathIsNaN (double val); +int xmlXPathContextSetCache (xmlXPathContextPtr ctxt,
    int active,
    int value,
    int options); +xmlXPathObjectPtr xmlXPathConvertString (xmlXPathObjectPtr val); +int xmlXPathCompiledEvalToBoolean (xmlXPathCompExprPtr comp,
    xmlXPathContextPtr ctxt); +int xmlXPathIsInf (double val); +long xmlXPathOrderDocElems (xmlDocPtr doc); +xmlNodeSetPtr xmlXPathNodeSetCreate (xmlNodePtr val); +double xmlXPathCastBooleanToNumber (int val); +double xmlXPathCastNodeToNumber (xmlNodePtr node); +double xmlXPathCastStringToNumber (const xmlChar * val); +typedef xmlXPathObjectPtr xmlXPathAxisFunc (xmlXPathParserContextPtr ctxt,
    xmlXPathObjectPtr cur); +double xmlXPathCastToNumber (xmlXPathObjectPtr val); +int xmlXPathCastStringToBoolean (const xmlChar * val); +xmlChar * xmlXPathCastNumberToString (double val); +typedef xmlXPathObjectPtr xmlXPathVariableLookupFunc (void * ctxt,
    const xmlChar * name,
    const xmlChar * ns_uri); +void xmlXPathFreeObject (xmlXPathObjectPtr obj); +int xmlXPathEvalPredicate (xmlXPathContextPtr ctxt,
    xmlXPathObjectPtr res); +void xmlXPathFreeContext (xmlXPathContextPtr ctxt); +xmlXPathObjectPtr xmlXPathObjectCopy (xmlXPathObjectPtr val); +void xmlXPathFreeNodeSetList (xmlXPathObjectPtr obj); +xmlXPathObjectPtr xmlXPathEval (const xmlChar * str,
    xmlXPathContextPtr ctx); +xmlChar * xmlXPathCastNodeSetToString (xmlNodeSetPtr ns); +xmlXPathObjectPtr xmlXPathCompiledEval (xmlXPathCompExprPtr comp,
    xmlXPathContextPtr ctx); +xmlXPathObjectPtr xmlXPathEvalExpression (const xmlChar * str,
    xmlXPathContextPtr ctxt); +void xmlXPathInit (void); +xmlXPathObjectPtr xmlXPathConvertBoolean (xmlXPathObjectPtr val); +typedef int xmlXPathConvertFunc (xmlXPathObjectPtr obj,
    int type); +typedef void xmlXPathFunction (xmlXPathParserContextPtr ctxt,
    int nargs); +int xmlXPathCmpNodes (xmlNodePtr node1,
    xmlNodePtr node2); +xmlChar * xmlXPathCastToString (xmlXPathObjectPtr val); +xmlXPathCompExprPtr xmlXPathCtxtCompile (xmlXPathContextPtr ctxt,
    const xmlChar * str); +typedef void xmlXPathEvalFunc (xmlXPathParserContextPtr ctxt,
    int nargs); +xmlChar * xmlXPathCastBooleanToString (int val); +int xmlXPathSetContextNode (xmlNodePtr node,
    xmlXPathContextPtr ctx); +int xmlXPathCastNumberToBoolean (double val); +void xmlXPathFreeNodeSet (xmlNodeSetPtr obj); +void xmlXPathFreeCompExpr (xmlXPathCompExprPtr comp); +xmlXPathContextPtr xmlXPathNewContext (xmlDocPtr doc); +xmlXPathObjectPtr xmlXPathConvertNumber (xmlXPathObjectPtr val); +xmlXPathCompExprPtr xmlXPathCompile (const xmlChar * str); +double xmlXPathCastNodeSetToNumber (xmlNodeSetPtr ns); +int xmlXPathCastToBoolean (xmlXPathObjectPtr val); +
    +
    +
    +

    Description

    +
    +
    +

    Details

    +
    +

    Macro XML_XPATH_CHECKNS

    #define XML_XPATH_CHECKNS;
    +

    check namespaces at compilation

    +
    +
    +

    Macro XML_XPATH_NOVAR

    #define XML_XPATH_NOVAR;
    +

    forbid variables in expression

    +
    +
    +

    Macro xmlXPathNodeSetGetLength

    #define xmlXPathNodeSetGetLength(ns);
    +

    Implement a functionality similar to the DOM NodeList.length. Returns the number of nodes in the node-set.

    ns:a node-set
    +
    +
    +

    Macro xmlXPathNodeSetIsEmpty

    #define xmlXPathNodeSetIsEmpty(ns);
    +

    Checks whether @ns is empty or not. Returns %TRUE if @ns is an empty node-set.

    ns:a node-set
    +
    +
    +

    Macro xmlXPathNodeSetItem

    #define xmlXPathNodeSetItem(ns, index);
    +

    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)

    ns:a node-set
    index:index of a node in the set
    +
    +
    +

    Structure xmlNodeSet

    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 name
    +} xmlNodeSet;
    +

    +

    +
    +

    Typedef xmlNodeSetPtr

    xmlNodeSet * xmlNodeSetPtr;
    +

    +

    +
    +

    Structure xmlXPathAxis

    struct _xmlXPathAxis {
    +    const xmlChar *	name	: the axis name
    +    xmlXPathAxisFunc	func	: the search function
    +} xmlXPathAxis;
    +

    +

    +
    +

    Typedef xmlXPathAxisPtr

    xmlXPathAxis * xmlXPathAxisPtr;
    +

    +

    +
    +

    Structure xmlXPathCompExpr

    struct _xmlXPathCompExpr {
    +The content of this structure is not made public by the API.
    +} xmlXPathCompExpr;
    +

    +

    +
    +

    Typedef xmlXPathCompExprPtr

    xmlXPathCompExpr * xmlXPathCompExprPtr;
    +

    +

    +
    +

    Structure xmlXPathContext

    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	: is this an XPointer context?
    +    xmlNodePtr	here	: for here()
    +    xmlNodePtr	origin	: for origin() the set of namespace declarations in scope for the expre
    +    xmlHashTablePtr	nsHash	: The namespaces hash table
    +    xmlXPathVariableLookupFunc	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
    +    xmlXPathFuncLookupFunc	funcLookupFunc	: function lookup func
    +    void *	funcLookupData	: function lookup data temporary namespace lists kept for walking the n
    +    xmlNsPtr *	tmpNsList	: Array of namespaces
    +    int	tmpNsNr	: number of namespaces 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 dictionary
    +    xmlDictPtr	dict	: dictionary if any
    +    int	flags	: flags to control compilation Cache for reusal of XPath objects
    +    void *	cache
    +} xmlXPathContext;
    +

    +

    +
    +

    Typedef xmlXPathContextPtr

    xmlXPathContext * xmlXPathContextPtr;
    +

    +

    +
    + +
    +

    Typedef xmlXPathFuncPtr

    xmlXPathFunct * xmlXPathFuncPtr;
    +

    +

    +
    +

    Structure xmlXPathFunct

    struct _xmlXPathFunct {
    +    const xmlChar *	name	: the function name
    +    xmlXPathEvalFunc	func	: the evaluation function
    +} xmlXPathFunct;
    +

    +

    +
    +

    Structure xmlXPathObject

    struct _xmlXPathObject {
    +    xmlXPathObjectType	type
    +    xmlNodeSetPtr	nodesetval
    +    int	boolval
    +    double	floatval
    +    xmlChar *	stringval
    +    void *	user
    +    int	index
    +    void *	user2
    +    int	index2
    +} xmlXPathObject;
    +

    +

    +
    +

    Typedef xmlXPathObjectPtr

    xmlXPathObject * xmlXPathObjectPtr;
    +

    +

    +
    +

    Enum xmlXPathObjectType

    enum xmlXPathObjectType {
    +    XPATH_UNDEFINED = 0
    +    XPATH_NODESET = 1
    +    XPATH_BOOLEAN = 2
    +    XPATH_NUMBER = 3
    +    XPATH_STRING = 4
    +    XPATH_POINT = 5
    +    XPATH_RANGE = 6
    +    XPATH_LOCATIONSET = 7
    +    XPATH_USERS = 8
    +    XPATH_XSLT_TREE = 9 /*  An XSLT value tree, non modifiable */
    +};
    +

    +

    +
    +

    Structure xmlXPathParserContext

    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
    +    int	valueFrame	: used to limit Pop on the stack
    +} xmlXPathParserContext;
    +

    +

    +
    +

    Typedef xmlXPathParserContextPtr

    xmlXPathParserContext * xmlXPathParserContextPtr;
    +

    +

    +
    +

    Structure xmlXPathType

    struct _xmlXPathType {
    +    const xmlChar *	name	: the type name
    +    xmlXPathConvertFunc	func	: the conversion function
    +} xmlXPathType;
    +

    +

    +
    +

    Typedef xmlXPathTypePtr

    xmlXPathType * xmlXPathTypePtr;
    +

    +

    +
    +

    Structure xmlXPathVariable

    struct _xmlXPathVariable {
    +    const xmlChar *	name	: the variable name
    +    xmlXPathObjectPtr	value	: the value
    +} xmlXPathVariable;
    +

    +

    +
    +

    Typedef xmlXPathVariablePtr

    xmlXPathVariable * xmlXPathVariablePtr;
    +

    +

    +
    +

    Function type xmlXPathAxisFunc

    xmlXPathObjectPtr	xmlXPathAxisFunc	(xmlXPathParserContextPtr ctxt, 
    xmlXPathObjectPtr cur)
    +

    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.

    +
    ctxt:the XPath interpreter context
    cur:the previous node being explored on that axis
    Returns:the next node in that axis or NULL if at the end of the axis.
    +
    +

    Function type xmlXPathConvertFunc

    int	xmlXPathConvertFunc		(xmlXPathObjectPtr obj, 
    int type)
    +

    A conversion function is associated to a type and used to cast the new type to primitive values.

    +
    obj:an XPath object
    type:the number of the target type
    Returns:-1 in case of error, 0 otherwise
    +
    +

    Function type xmlXPathEvalFunc

    void	xmlXPathEvalFunc		(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +

    An XPath evaluation function, the parameters are on the XPath context stack.

    +
    ctxt:an XPath parser context
    nargs:the number of arguments passed to the function
    +
    +

    Function type xmlXPathFuncLookupFunc

    xmlXPathFunction	xmlXPathFuncLookupFunc	(void * ctxt, 
    const xmlChar * name,
    const xmlChar * ns_uri)
    +

    Prototype for callbacks used to plug function lookup in the XPath engine.

    +
    ctxt:an XPath context
    name:name of the function
    ns_uri:the namespace name hosting this function
    Returns:the XPath function or NULL if not found.
    +
    +

    Function type xmlXPathFunction

    void	xmlXPathFunction		(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +

    An XPath function. The arguments (if any) are popped out from the context stack and the result is pushed on the stack.

    +
    ctxt:the XPath interprestation context
    nargs:the number of arguments
    +
    +

    Function type xmlXPathVariableLookupFunc

    xmlXPathObjectPtr	xmlXPathVariableLookupFunc	(void * ctxt, 
    const xmlChar * name,
    const xmlChar * ns_uri)
    +

    Prototype for callbacks used to plug variable lookup in the XPath engine.

    +
    ctxt:an XPath context
    name:name of the variable
    ns_uri:the namespace name hosting this variable
    Returns:the XPath object value or NULL if not found.
    +
    +

    Variable xmlXPathNAN

    double xmlXPathNAN;
    +

    +

    +
    +

    Variable xmlXPathNINF

    double xmlXPathNINF;
    +

    +

    +
    +

    Variable xmlXPathPINF

    double xmlXPathPINF;
    +

    +

    +
    + +
    +

    xmlXPathCastBooleanToString ()

    xmlChar *	xmlXPathCastBooleanToString	(int val)
    +

    Converts a boolean to its string value.

    +
    val:a boolean
    Returns:a newly allocated string.
    +
    +

    xmlXPathCastNodeSetToBoolean ()

    int	xmlXPathCastNodeSetToBoolean	(xmlNodeSetPtr ns)
    +

    Converts a node-set to its boolean value

    +
    ns:a node-set
    Returns:the boolean value
    +
    +

    xmlXPathCastNodeSetToNumber ()

    double	xmlXPathCastNodeSetToNumber	(xmlNodeSetPtr ns)
    +

    Converts a node-set to its number value

    +
    ns:a node-set
    Returns:the number value
    +
    +

    xmlXPathCastNodeSetToString ()

    xmlChar *	xmlXPathCastNodeSetToString	(xmlNodeSetPtr ns)
    +

    Converts a node-set to its string value.

    +
    ns:a node-set
    Returns:a newly allocated string.
    +
    +

    xmlXPathCastNodeToNumber ()

    double	xmlXPathCastNodeToNumber	(xmlNodePtr node)
    +

    Converts a node to its number value

    +
    node:a node
    Returns:the number value
    +
    +

    xmlXPathCastNodeToString ()

    xmlChar *	xmlXPathCastNodeToString	(xmlNodePtr node)
    +

    Converts a node to its string value.

    +
    node:a node
    Returns:a newly allocated string.
    +
    + +
    +

    xmlXPathCastNumberToString ()

    xmlChar *	xmlXPathCastNumberToString	(double val)
    +

    Converts a number to its string value.

    +
    val:a number
    Returns:a newly allocated string.
    +
    +

    xmlXPathCastStringToBoolean ()

    int	xmlXPathCastStringToBoolean	(const xmlChar * val)
    +

    Converts a string to its boolean value

    +
    val:a string
    Returns:the boolean value
    +
    +

    xmlXPathCastStringToNumber ()

    double	xmlXPathCastStringToNumber	(const xmlChar * val)
    +

    Converts a string to its number value

    +
    val:a string
    Returns:the number value
    +
    +

    xmlXPathCastToBoolean ()

    int	xmlXPathCastToBoolean		(xmlXPathObjectPtr val)
    +

    Converts an XPath object to its boolean value

    +
    val:an XPath object
    Returns:the boolean value
    +
    +

    xmlXPathCastToNumber ()

    double	xmlXPathCastToNumber		(xmlXPathObjectPtr val)
    +

    Converts an XPath object to its number value

    +
    val:an XPath object
    Returns:the number value
    +
    +

    xmlXPathCastToString ()

    xmlChar *	xmlXPathCastToString	(xmlXPathObjectPtr val)
    +

    Converts an existing object to its string() equivalent

    +
    val:an XPath object
    Returns:the allocated string value of the object, NULL in case of error. It's up to the caller to free the string memory with xmlFree().
    +
    +

    xmlXPathCmpNodes ()

    int	xmlXPathCmpNodes		(xmlNodePtr node1, 
    xmlNodePtr node2)
    +

    Compare two nodes w.r.t document order

    +
    node1:the first node
    node2:the second node
    Returns:-2 in case of error 1 if first point < second point, 0 if it's the same node, -1 otherwise
    +
    +

    xmlXPathCompile ()

    xmlXPathCompExprPtr	xmlXPathCompile	(const xmlChar * str)
    +

    Compile an XPath expression

    +
    str:the XPath expression
    Returns:the xmlXPathCompExprPtr resulting from the compilation or NULL. the caller has to free the object.
    +
    +

    xmlXPathCompiledEval ()

    xmlXPathObjectPtr	xmlXPathCompiledEval	(xmlXPathCompExprPtr comp, 
    xmlXPathContextPtr ctx)
    +

    Evaluate the Precompiled XPath expression in the given context.

    +
    comp:the compiled XPath expression
    ctx:the XPath context
    Returns:the xmlXPathObjectPtr resulting from the evaluation or NULL. the caller has to free the object.
    +
    +

    xmlXPathCompiledEvalToBoolean ()

    int	xmlXPathCompiledEvalToBoolean	(xmlXPathCompExprPtr comp, 
    xmlXPathContextPtr ctxt)
    +

    Applies the XPath boolean() function on the result of the given compiled expression.

    +
    comp:the compiled XPath expression
    ctxt:the XPath context
    Returns:1 if the expression evaluated to true, 0 if to false and -1 in API and internal errors.
    +
    +

    xmlXPathContextSetCache ()

    int	xmlXPathContextSetCache		(xmlXPathContextPtr ctxt, 
    int active,
    int value,
    int options)
    +

    Creates/frees an object cache on the XPath context. If activates XPath objects (xmlXPathObject) will be cached internally to be reused. @options: 0: This will set the XPath object caching: @value: This will set the maximum number of XPath objects to be cached per slot There are 5 slots for: node-set, string, number, boolean, and misc objects. Use <0 for the default number (100). Other values for @options have currently no effect.

    +
    ctxt:the XPath context
    active:enables/disables (creates/frees) the cache
    value:a value with semantics dependant on @options
    options:options (currently only the value 0 is used)
    Returns:0 if the setting succeeded, and -1 on API or internal errors.
    +
    +

    xmlXPathConvertBoolean ()

    xmlXPathObjectPtr	xmlXPathConvertBoolean	(xmlXPathObjectPtr val)
    +

    Converts an existing object to its boolean() equivalent

    +
    val:an XPath object
    Returns:the new object, the old one is freed (or the operation is done directly on @val)
    +
    +

    xmlXPathConvertNumber ()

    xmlXPathObjectPtr	xmlXPathConvertNumber	(xmlXPathObjectPtr val)
    +

    Converts an existing object to its number() equivalent

    +
    val:an XPath object
    Returns:the new object, the old one is freed (or the operation is done directly on @val)
    +
    +

    xmlXPathConvertString ()

    xmlXPathObjectPtr	xmlXPathConvertString	(xmlXPathObjectPtr val)
    +

    Converts an existing object to its string() equivalent

    +
    val:an XPath object
    Returns:the new object, the old one is freed (or the operation is done directly on @val)
    +
    +

    xmlXPathCtxtCompile ()

    xmlXPathCompExprPtr	xmlXPathCtxtCompile	(xmlXPathContextPtr ctxt, 
    const xmlChar * str)
    +

    Compile an XPath expression

    +
    ctxt:an XPath context
    str:the XPath expression
    Returns:the xmlXPathCompExprPtr resulting from the compilation or NULL. the caller has to free the object.
    +
    +

    xmlXPathEval ()

    xmlXPathObjectPtr	xmlXPathEval	(const xmlChar * str, 
    xmlXPathContextPtr ctx)
    +

    Evaluate the XPath Location Path in the given context.

    +
    str:the XPath expression
    ctx:the XPath context
    Returns:the xmlXPathObjectPtr resulting from the evaluation or NULL. the caller has to free the object.
    +
    +

    xmlXPathEvalExpression ()

    xmlXPathObjectPtr	xmlXPathEvalExpression	(const xmlChar * str, 
    xmlXPathContextPtr ctxt)
    +

    Evaluate the XPath expression in the given context.

    +
    str:the XPath expression
    ctxt:the XPath context
    Returns:the xmlXPathObjectPtr resulting from the evaluation or NULL. the caller has to free the object.
    +
    +

    xmlXPathEvalPredicate ()

    int	xmlXPathEvalPredicate		(xmlXPathContextPtr ctxt, 
    xmlXPathObjectPtr res)
    +

    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.

    +
    ctxt:the XPath context
    res:the Predicate Expression evaluation result
    Returns:1 if predicate is true, 0 otherwise
    +
    +

    xmlXPathFreeCompExpr ()

    void	xmlXPathFreeCompExpr		(xmlXPathCompExprPtr comp)
    +

    Free up the memory allocated by @comp

    +
    comp:an XPATH comp
    +
    + +
    +

    xmlXPathFreeNodeSet ()

    void	xmlXPathFreeNodeSet		(xmlNodeSetPtr obj)
    +

    Free the NodeSet compound (not the actual nodes !).

    +
    obj:the xmlNodeSetPtr to free
    +
    +

    xmlXPathFreeNodeSetList ()

    void	xmlXPathFreeNodeSetList		(xmlXPathObjectPtr obj)
    +

    Free up the xmlXPathObjectPtr @obj but don't deallocate the objects in the list contrary to xmlXPathFreeObject().

    +
    obj:an existing NodeSetList object
    +
    + +
    + +
    +
    +
    +
    +
    +

    xmlXPathNewContext ()

    xmlXPathContextPtr	xmlXPathNewContext	(xmlDocPtr doc)
    +

    Create a new xmlXPathContext

    +
    doc:the XML document
    Returns:the xmlXPathContext just allocated. The caller will need to free it.
    +
    +

    xmlXPathNodeEval ()

    xmlXPathObjectPtr	xmlXPathNodeEval	(xmlNodePtr node, 
    const xmlChar * str,
    xmlXPathContextPtr ctx)
    +

    Evaluate the XPath Location Path in the given context. The node 'node' is set as the context node. The context node is not restored.

    +
    node:the node to to use as the context node
    str:the XPath expression
    ctx:the XPath context
    Returns:the xmlXPathObjectPtr resulting from the evaluation or NULL. the caller has to free the object.
    +
    +

    xmlXPathNodeSetCreate ()

    xmlNodeSetPtr	xmlXPathNodeSetCreate	(xmlNodePtr val)
    +

    Create a new xmlNodeSetPtr of type double and of value @val

    +
    val:an initial xmlNodePtr, or NULL
    Returns:the newly created object.
    +
    +

    xmlXPathObjectCopy ()

    xmlXPathObjectPtr	xmlXPathObjectCopy	(xmlXPathObjectPtr val)
    +

    allocate a new copy of a given object

    +
    val:the original object
    Returns:the newly created object.
    +
    +

    xmlXPathOrderDocElems ()

    long	xmlXPathOrderDocElems		(xmlDocPtr doc)
    +

    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.

    +
    doc:an input document
    Returns:the number of elements found in the document or -1 in case of error.
    +
    +

    xmlXPathSetContextNode ()

    int	xmlXPathSetContextNode		(xmlNodePtr node, 
    xmlXPathContextPtr ctx)
    +

    Sets 'node' as the context node. The node must be in the same document as that associated with the context.

    +
    node:the node to to use as the context node
    ctx:the XPath context
    Returns:-1 in case of error or 0 if successful
    +
    +
    +
    + + diff --git a/doc/devhelp/libxml2-xpathInternals.html b/doc/devhelp/libxml2-xpathInternals.html new file mode 100644 index 0000000..0597343 --- /dev/null +++ b/doc/devhelp/libxml2-xpathInternals.html @@ -0,0 +1,787 @@ + + + + + xpathInternals: internal interfaces for XML Path Language implementation + + + + + + + + + + + + + + + + +

    + xpathInternals +

    +

    xpathInternals - internal interfaces for XML Path Language implementation

    +

    internal interfaces for XML Path Language implementation used to build new modules on top of XPath like XPointer and XSLT

    +

    Author(s): Daniel Veillard

    +
    +

    Synopsis

    +
    #define xmlXPathStackIsExternal(ctxt);
    +#define xmlXPathReturnEmptyString(ctxt);
    +#define XP_ERROR0(X);
    +#define xmlXPathSetTypeError(ctxt);
    +#define xmlXPathReturnEmptyNodeSet(ctxt);
    +#define xmlXPathReturnTrue(ctxt);
    +#define xmlXPathReturnBoolean(ctxt, val);
    +#define xmlXPathGetContextNode(ctxt);
    +#define CAST_TO_NUMBER;
    +#define CHECK_ARITY(x);
    +#define CHECK_TYPE0(typeval);
    +#define CAST_TO_STRING;
    +#define xmlXPathReturnExternal(ctxt, val);
    +#define xmlXPathStackIsNodeSet(ctxt);
    +#define xmlXPathCheckError(ctxt);
    +#define xmlXPathSetError(ctxt, err);
    +#define CHECK_ERROR;
    +#define xmlXPathReturnString(ctxt, str);
    +#define CAST_TO_BOOLEAN;
    +#define xmlXPathSetArityError(ctxt);
    +#define CHECK_TYPE(typeval);
    +#define xmlXPathReturnFalse(ctxt);
    +#define xmlXPathReturnNumber(ctxt, val);
    +#define CHECK_ERROR0;
    +#define xmlXPathGetDocument(ctxt);
    +#define xmlXPathGetError(ctxt);
    +#define XP_ERROR(X);
    +#define xmlXPathEmptyNodeSet(ns);
    +#define xmlXPathReturnNodeSet(ctxt, ns);
    +xmlNodeSetPtr	xmlXPathNodeSetMerge	(xmlNodeSetPtr val1, 
    xmlNodeSetPtr val2); +void xmlXPathNumberFunction (xmlXPathParserContextPtr ctxt,
    int nargs); +const xmlChar * xmlXPathNsLookup (xmlXPathContextPtr ctxt,
    const xmlChar * prefix); +xmlXPathObjectPtr xmlXPathNewNodeSet (xmlNodePtr val); +xmlNodePtr xmlXPathNextAncestorOrSelf (xmlXPathParserContextPtr ctxt,
    xmlNodePtr cur); +void xmlXPathNodeSetRemove (xmlNodeSetPtr cur,
    int val); +xmlXPathObjectPtr xmlXPathNewNodeSetList (xmlNodeSetPtr val); +int xmlXPathPopBoolean (xmlXPathParserContextPtr ctxt); +xmlXPathObjectPtr xmlXPathNewString (const xmlChar * val); +xmlNodeSetPtr xmlXPathNodeLeadingSorted (xmlNodeSetPtr nodes,
    xmlNodePtr node); +xmlNodePtr xmlXPathNextChild (xmlXPathParserContextPtr ctxt,
    xmlNodePtr cur); +xmlNodePtr xmlXPathNextFollowingSibling (xmlXPathParserContextPtr ctxt,
    xmlNodePtr cur); +xmlChar * xmlXPathPopString (xmlXPathParserContextPtr ctxt); +void xmlXPathNamespaceURIFunction (xmlXPathParserContextPtr ctxt,
    int nargs); +int xmlXPathCompareValues (xmlXPathParserContextPtr ctxt,
    int inf,
    int strict); +void xmlXPathConcatFunction (xmlXPathParserContextPtr ctxt,
    int nargs); +int xmlXPathNodeSetContains (xmlNodeSetPtr cur,
    xmlNodePtr val); +void xmlXPatherror (xmlXPathParserContextPtr ctxt,
    const char * file,
    int line,
    int no); +xmlNodePtr xmlXPathNextAncestor (xmlXPathParserContextPtr ctxt,
    xmlNodePtr cur); +void xmlXPathBooleanFunction (xmlXPathParserContextPtr ctxt,
    int nargs); +void xmlXPathRoot (xmlXPathParserContextPtr ctxt); +void xmlXPathRegisteredNsCleanup (xmlXPathContextPtr ctxt); +int xmlXPathIsNodeType (const xmlChar * name); +xmlNodePtr xmlXPathNextFollowing (xmlXPathParserContextPtr ctxt,
    xmlNodePtr cur); +void xmlXPathAddValues (xmlXPathParserContextPtr ctxt); +int xmlXPathRegisterVariable (xmlXPathContextPtr ctxt,
    const xmlChar * name,
    xmlXPathObjectPtr value); +xmlXPathObjectPtr valuePop (xmlXPathParserContextPtr ctxt); +void xmlXPathCeilingFunction (xmlXPathParserContextPtr ctxt,
    int nargs); +xmlNodeSetPtr xmlXPathIntersection (xmlNodeSetPtr nodes1,
    xmlNodeSetPtr nodes2); +void xmlXPathContainsFunction (xmlXPathParserContextPtr ctxt,
    int nargs); +void xmlXPathNodeSetSort (xmlNodeSetPtr set); +void xmlXPathStartsWithFunction (xmlXPathParserContextPtr ctxt,
    int nargs); +xmlNodeSetPtr xmlXPathNodeLeading (xmlNodeSetPtr nodes,
    xmlNodePtr node); +void xmlXPathSumFunction (xmlXPathParserContextPtr ctxt,
    int nargs); +int xmlXPathNotEqualValues (xmlXPathParserContextPtr ctxt); +int xmlXPathEvaluatePredicateResult (xmlXPathParserContextPtr ctxt,
    xmlXPathObjectPtr res); +void xmlXPathErr (xmlXPathParserContextPtr ctxt,
    int error); +xmlNodePtr xmlXPathNextPreceding (xmlXPathParserContextPtr ctxt,
    xmlNodePtr cur); +xmlXPathFunction xmlXPathFunctionLookupNS (xmlXPathContextPtr ctxt,
    const xmlChar * name,
    const xmlChar * ns_uri); +void xmlXPathRegisteredFuncsCleanup (xmlXPathContextPtr ctxt); +void xmlXPathRegisterAllFunctions (xmlXPathContextPtr ctxt); +xmlXPathFunction xmlXPathFunctionLookup (xmlXPathContextPtr ctxt,
    const xmlChar * name); +void xmlXPathPositionFunction (xmlXPathParserContextPtr ctxt,
    int nargs); +void xmlXPathSubstringBeforeFunction (xmlXPathParserContextPtr ctxt,
    int nargs); +void xmlXPathRegisteredVariablesCleanup (xmlXPathContextPtr ctxt); +xmlXPathObjectPtr xmlXPathNewFloat (double val); +int xmlXPathRegisterNs (xmlXPathContextPtr ctxt,
    const xmlChar * prefix,
    const xmlChar * ns_uri); +xmlNodePtr xmlXPathNextParent (xmlXPathParserContextPtr ctxt,
    xmlNodePtr cur); +void xmlXPathNodeSetFreeNs (xmlNsPtr ns); +int xmlXPathHasSameNodes (xmlNodeSetPtr nodes1,
    xmlNodeSetPtr nodes2); +xmlNodeSetPtr xmlXPathDistinctSorted (xmlNodeSetPtr nodes); +int valuePush (xmlXPathParserContextPtr ctxt,
    xmlXPathObjectPtr value); +void xmlXPathSubstringFunction (xmlXPathParserContextPtr ctxt,
    int nargs); +void xmlXPathStringFunction (xmlXPathParserContextPtr ctxt,
    int nargs); +void xmlXPathFloorFunction (xmlXPathParserContextPtr ctxt,
    int nargs); +void xmlXPathIdFunction (xmlXPathParserContextPtr ctxt,
    int nargs); +void xmlXPathLastFunction (xmlXPathParserContextPtr ctxt,
    int nargs); +void xmlXPathStringLengthFunction (xmlXPathParserContextPtr ctxt,
    int nargs); +xmlNodePtr xmlXPathNextSelf (xmlXPathParserContextPtr ctxt,
    xmlNodePtr cur); +void xmlXPathDebugDumpCompExpr (FILE * output,
    xmlXPathCompExprPtr comp,
    int depth); +void xmlXPathFalseFunction (xmlXPathParserContextPtr ctxt,
    int nargs); +void xmlXPathValueFlipSign (xmlXPathParserContextPtr ctxt); +void xmlXPathTranslateFunction (xmlXPathParserContextPtr ctxt,
    int nargs); +void xmlXPathRegisterFuncLookup (xmlXPathContextPtr ctxt,
    xmlXPathFuncLookupFunc f,
    void * funcCtxt); +double xmlXPathPopNumber (xmlXPathParserContextPtr ctxt); +void xmlXPathRoundFunction (xmlXPathParserContextPtr ctxt,
    int nargs); +xmlNodeSetPtr xmlXPathPopNodeSet (xmlXPathParserContextPtr ctxt); +void xmlXPathCountFunction (xmlXPathParserContextPtr ctxt,
    int nargs); +xmlChar * xmlXPathParseNCName (xmlXPathParserContextPtr ctxt); +void xmlXPathTrueFunction (xmlXPathParserContextPtr ctxt,
    int nargs); +xmlXPathObjectPtr xmlXPathNewBoolean (int val); +void xmlXPathSubValues (xmlXPathParserContextPtr ctxt); +int xmlXPathEqualValues (xmlXPathParserContextPtr ctxt); +xmlNodeSetPtr xmlXPathTrailingSorted (xmlNodeSetPtr nodes1,
    xmlNodeSetPtr nodes2); +void xmlXPathMultValues (xmlXPathParserContextPtr ctxt); +void xmlXPathModValues (xmlXPathParserContextPtr ctxt); +xmlXPathParserContextPtr xmlXPathNewParserContext (const xmlChar * str,
    xmlXPathContextPtr ctxt); +xmlXPathObjectPtr xmlXPathWrapNodeSet (xmlNodeSetPtr val); +xmlXPathObjectPtr xmlXPathWrapString (xmlChar * val); +void xmlXPathLangFunction (xmlXPathParserContextPtr ctxt,
    int nargs); +int xmlXPathRegisterFuncNS (xmlXPathContextPtr ctxt,
    const xmlChar * name,
    const xmlChar * ns_uri,
    xmlXPathFunction f); +int xmlXPathNodeSetAddNs (xmlNodeSetPtr cur,
    xmlNodePtr node,
    xmlNsPtr ns); +void xmlXPathLocalNameFunction (xmlXPathParserContextPtr ctxt,
    int nargs); +xmlNodeSetPtr xmlXPathDifference (xmlNodeSetPtr nodes1,
    xmlNodeSetPtr nodes2); +xmlNodeSetPtr xmlXPathLeadingSorted (xmlNodeSetPtr nodes1,
    xmlNodeSetPtr nodes2); +xmlNodePtr xmlXPathNextPrecedingSibling (xmlXPathParserContextPtr ctxt,
    xmlNodePtr cur); +void * xmlXPathPopExternal (xmlXPathParserContextPtr ctxt); +void xmlXPathNormalizeFunction (xmlXPathParserContextPtr ctxt,
    int nargs); +void xmlXPathRegisterVariableLookup (xmlXPathContextPtr ctxt,
    xmlXPathVariableLookupFunc f,
    void * data); +void xmlXPathNodeSetDel (xmlNodeSetPtr cur,
    xmlNodePtr val); +xmlNodeSetPtr xmlXPathNodeTrailingSorted (xmlNodeSetPtr nodes,
    xmlNodePtr node); +xmlXPathObjectPtr xmlXPathNewCString (const char * val); +int xmlXPathRegisterFunc (xmlXPathContextPtr ctxt,
    const xmlChar * name,
    xmlXPathFunction f); +void xmlXPathSubstringAfterFunction (xmlXPathParserContextPtr ctxt,
    int nargs); +xmlNodePtr xmlXPathNextDescendant (xmlXPathParserContextPtr ctxt,
    xmlNodePtr cur); +xmlNodePtr xmlXPathNextNamespace (xmlXPathParserContextPtr ctxt,
    xmlNodePtr cur); +xmlXPathObjectPtr xmlXPathWrapCString (char * val); +void xmlXPathFreeParserContext (xmlXPathParserContextPtr ctxt); +xmlNodeSetPtr xmlXPathNodeTrailing (xmlNodeSetPtr nodes,
    xmlNodePtr node); +int xmlXPathNodeSetAdd (xmlNodeSetPtr cur,
    xmlNodePtr val); +int xmlXPathNodeSetAddUnique (xmlNodeSetPtr cur,
    xmlNodePtr val); +xmlXPathObjectPtr xmlXPathNewValueTree (xmlNodePtr val); +xmlNodeSetPtr xmlXPathDistinct (xmlNodeSetPtr nodes); +xmlXPathObjectPtr xmlXPathVariableLookup (xmlXPathContextPtr ctxt,
    const xmlChar * name); +void xmlXPathNotFunction (xmlXPathParserContextPtr ctxt,
    int nargs); +double xmlXPathStringEvalNumber (const xmlChar * str); +xmlNodePtr xmlXPathNextDescendantOrSelf (xmlXPathParserContextPtr ctxt,
    xmlNodePtr cur); +xmlXPathObjectPtr xmlXPathWrapExternal (void * val); +xmlNodePtr xmlXPathNextAttribute (xmlXPathParserContextPtr ctxt,
    xmlNodePtr cur); +void xmlXPathDivValues (xmlXPathParserContextPtr ctxt); +xmlXPathObjectPtr xmlXPathVariableLookupNS (xmlXPathContextPtr ctxt,
    const xmlChar * name,
    const xmlChar * ns_uri); +int xmlXPathRegisterVariableNS (xmlXPathContextPtr ctxt,
    const xmlChar * name,
    const xmlChar * ns_uri,
    xmlXPathObjectPtr value); +xmlNodeSetPtr xmlXPathTrailing (xmlNodeSetPtr nodes1,
    xmlNodeSetPtr nodes2); +void xmlXPathEvalExpr (xmlXPathParserContextPtr ctxt); +void xmlXPathDebugDumpObject (FILE * output,
    xmlXPathObjectPtr cur,
    int depth); +xmlNodeSetPtr xmlXPathLeading (xmlNodeSetPtr nodes1,
    xmlNodeSetPtr nodes2); +xmlChar * xmlXPathParseName (xmlXPathParserContextPtr ctxt); +
    +
    +
    +

    Description

    +
    +
    +

    Details

    +
    +

    Macro CAST_TO_BOOLEAN

    #define CAST_TO_BOOLEAN;
    +

    Macro to try to cast the value on the top of the XPath stack to a boolean.

    +
    +
    +

    Macro CAST_TO_NUMBER

    #define CAST_TO_NUMBER;
    +

    Macro to try to cast the value on the top of the XPath stack to a number.

    +
    +
    +

    Macro CAST_TO_STRING

    #define CAST_TO_STRING;
    +

    Macro to try to cast the value on the top of the XPath stack to a string.

    +
    +
    +

    Macro CHECK_ARITY

    #define CHECK_ARITY(x);
    +

    Macro to check that the number of args passed to an XPath function matches.

    x:the number of expected args
    +
    +
    +

    Macro CHECK_ERROR

    #define CHECK_ERROR;
    +

    Macro to return from the function if an XPath error was detected.

    +
    +
    +

    Macro CHECK_ERROR0

    #define CHECK_ERROR0;
    +

    Macro to return 0 from the function if an XPath error was detected.

    +
    +
    +

    Macro CHECK_TYPE

    #define CHECK_TYPE(typeval);
    +

    Macro to check that the value on top of the XPath stack is of a given type.

    typeval:the XPath type
    +
    +
    +

    Macro CHECK_TYPE0

    #define CHECK_TYPE0(typeval);
    +

    Macro to check that the value on top of the XPath stack is of a given type. Return(0) in case of failure

    typeval:the XPath type
    +
    +
    +

    Macro XP_ERROR

    #define XP_ERROR(X);
    +

    Macro to raise an XPath error and return.

    X:the error code
    +
    +
    +

    Macro XP_ERROR0

    #define XP_ERROR0(X);
    +

    Macro to raise an XPath error and return 0.

    X:the error code
    +
    +
    +

    Macro xmlXPathCheckError

    #define xmlXPathCheckError(ctxt);
    +

    Check if an XPath error was raised. Returns true if an error has been raised, false otherwise.

    ctxt:an XPath parser context
    +
    +
    +

    Macro xmlXPathEmptyNodeSet

    #define xmlXPathEmptyNodeSet(ns);
    +

    Empties a node-set.

    ns:a node-set
    +
    +
    +

    Macro xmlXPathGetContextNode

    #define xmlXPathGetContextNode(ctxt);
    +

    Get the context node of an XPath context. Returns the context node.

    ctxt:an XPath parser context
    +
    +
    +

    Macro xmlXPathGetDocument

    #define xmlXPathGetDocument(ctxt);
    +

    Get the document of an XPath context. Returns the context document.

    ctxt:an XPath parser context
    +
    +
    +

    Macro xmlXPathGetError

    #define xmlXPathGetError(ctxt);
    +

    Get the error code of an XPath context. Returns the context error.

    ctxt:an XPath parser context
    +
    +
    +

    Macro xmlXPathReturnBoolean

    #define xmlXPathReturnBoolean(ctxt, val);
    +

    Pushes the boolean @val on the context stack.

    ctxt:an XPath parser context
    val:a boolean
    +
    +
    +

    Macro xmlXPathReturnEmptyNodeSet

    #define xmlXPathReturnEmptyNodeSet(ctxt);
    +

    Pushes an empty node-set on the context stack.

    ctxt:an XPath parser context
    +
    +
    +

    Macro xmlXPathReturnEmptyString

    #define xmlXPathReturnEmptyString(ctxt);
    +

    Pushes an empty string on the stack.

    ctxt:an XPath parser context
    +
    +
    +

    Macro xmlXPathReturnExternal

    #define xmlXPathReturnExternal(ctxt, val);
    +

    Pushes user data on the context stack.

    ctxt:an XPath parser context
    val:user data
    +
    +
    +

    Macro xmlXPathReturnFalse

    #define xmlXPathReturnFalse(ctxt);
    +

    Pushes false on the context stack.

    ctxt:an XPath parser context
    +
    +
    +

    Macro xmlXPathReturnNodeSet

    #define xmlXPathReturnNodeSet(ctxt, ns);
    +

    Pushes the node-set @ns on the context stack.

    ctxt:an XPath parser context
    ns:a node-set
    +
    +
    +

    Macro xmlXPathReturnNumber

    #define xmlXPathReturnNumber(ctxt, val);
    +

    Pushes the double @val on the context stack.

    ctxt:an XPath parser context
    val:a double
    +
    +
    +

    Macro xmlXPathReturnString

    #define xmlXPathReturnString(ctxt, str);
    +

    Pushes the string @str on the context stack.

    ctxt:an XPath parser context
    str:a string
    +
    +
    +

    Macro xmlXPathReturnTrue

    #define xmlXPathReturnTrue(ctxt);
    +

    Pushes true on the context stack.

    ctxt:an XPath parser context
    +
    +
    +

    Macro xmlXPathSetArityError

    #define xmlXPathSetArityError(ctxt);
    +

    Raises an XPATH_INVALID_ARITY error.

    ctxt:an XPath parser context
    +
    +
    +

    Macro xmlXPathSetError

    #define xmlXPathSetError(ctxt, err);
    +

    Raises an error.

    ctxt:an XPath parser context
    err:an xmlXPathError code
    +
    +
    +

    Macro xmlXPathSetTypeError

    #define xmlXPathSetTypeError(ctxt);
    +

    Raises an XPATH_INVALID_TYPE error.

    ctxt:an XPath parser context
    +
    +
    +

    Macro xmlXPathStackIsExternal

    #define xmlXPathStackIsExternal(ctxt);
    +

    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.

    ctxt:an XPath parser context
    +
    +
    +

    Macro xmlXPathStackIsNodeSet

    #define xmlXPathStackIsNodeSet(ctxt);
    +

    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.

    ctxt:an XPath parser context
    +
    +
    +

    valuePop ()

    xmlXPathObjectPtr	valuePop	(xmlXPathParserContextPtr ctxt)
    +

    Pops the top XPath object from the value stack

    +
    ctxt:an XPath evaluation context
    Returns:the XPath object just removed
    +
    +

    valuePush ()

    int	valuePush			(xmlXPathParserContextPtr ctxt, 
    xmlXPathObjectPtr value)
    +

    Pushes a new XPath object on top of the value stack

    +
    ctxt:an XPath evaluation context
    value:the XPath object
    Returns:the number of items on the value stack
    +
    +

    xmlXPathAddValues ()

    void	xmlXPathAddValues		(xmlXPathParserContextPtr ctxt)
    +

    Implement the add operation on XPath objects: The numeric operators convert their operands to numbers as if by calling the number function.

    +
    ctxt:the XPath Parser context
    +
    +

    xmlXPathBooleanFunction ()

    void	xmlXPathBooleanFunction		(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +

    Implement the boolean() XPath function boolean boolean(object) The boolean function converts its argument to a boolean as follows: - a number is true if and only if it is neither positive or negative zero nor NaN - a node-set is true if and only if it is non-empty - a string is true if and only if its length is non-zero

    +
    ctxt:the XPath Parser context
    nargs:the number of arguments
    +
    +

    xmlXPathCeilingFunction ()

    void	xmlXPathCeilingFunction		(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +

    Implement the ceiling() XPath function number ceiling(number) The ceiling function returns the smallest (closest to negative infinity) number that is not less than the argument and that is an integer.

    +
    ctxt:the XPath Parser context
    nargs:the number of arguments
    +
    +

    xmlXPathCompareValues ()

    int	xmlXPathCompareValues		(xmlXPathParserContextPtr ctxt, 
    int inf,
    int 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.

    +
    ctxt:the XPath Parser context
    inf:less than (1) or greater than (0)
    strict:is the comparison strict
    Returns:1 if the comparison succeeded, 0 if it failed
    +
    +

    xmlXPathConcatFunction ()

    void	xmlXPathConcatFunction		(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +

    Implement the concat() XPath function string concat(string, string, string*) The concat function returns the concatenation of its arguments.

    +
    ctxt:the XPath Parser context
    nargs:the number of arguments
    +
    +

    xmlXPathContainsFunction ()

    void	xmlXPathContainsFunction	(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +

    Implement the contains() XPath function boolean contains(string, string) The contains function returns true if the first argument string contains the second argument string, and otherwise returns false.

    +
    ctxt:the XPath Parser context
    nargs:the number of arguments
    +
    +

    xmlXPathCountFunction ()

    void	xmlXPathCountFunction		(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +

    Implement the count() XPath function number count(node-set)

    +
    ctxt:the XPath Parser context
    nargs:the number of arguments
    +
    +

    xmlXPathDebugDumpCompExpr ()

    void	xmlXPathDebugDumpCompExpr	(FILE * output, 
    xmlXPathCompExprPtr comp,
    int depth)
    +

    Dumps the tree of the compiled XPath expression.

    +
    output:the FILE * for the output
    comp:the precompiled XPath expression
    depth:the indentation level.
    +
    +

    xmlXPathDebugDumpObject ()

    void	xmlXPathDebugDumpObject		(FILE * output, 
    xmlXPathObjectPtr cur,
    int depth)
    +

    Dump the content of the object for debugging purposes

    +
    output:the FILE * to dump the output
    cur:the object to inspect
    depth:indentation level
    +
    +

    xmlXPathDifference ()

    xmlNodeSetPtr	xmlXPathDifference	(xmlNodeSetPtr nodes1, 
    xmlNodeSetPtr nodes2)
    +

    Implements the EXSLT - Sets difference() function: node-set set:difference (node-set, node-set)

    +
    nodes1:a node-set
    nodes2:a node-set
    Returns:the difference between the two node sets, or nodes1 if nodes2 is empty
    +
    +

    xmlXPathDistinct ()

    xmlNodeSetPtr	xmlXPathDistinct	(xmlNodeSetPtr nodes)
    +

    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

    +
    nodes:a node-set
    Returns:a subset of the nodes contained in @nodes, or @nodes if it is empty
    +
    +

    xmlXPathDistinctSorted ()

    xmlNodeSetPtr	xmlXPathDistinctSorted	(xmlNodeSetPtr nodes)
    +

    Implements the EXSLT - Sets distinct() function: node-set set:distinct (node-set)

    +
    nodes:a node-set, sorted by document order
    Returns:a subset of the nodes contained in @nodes, or @nodes if it is empty
    +
    +

    xmlXPathDivValues ()

    void	xmlXPathDivValues		(xmlXPathParserContextPtr ctxt)
    +

    Implement the div operation on XPath objects @arg1 / @arg2: The numeric operators convert their operands to numbers as if by calling the number function.

    +
    ctxt:the XPath Parser context
    +
    +

    xmlXPathEqualValues ()

    int	xmlXPathEqualValues		(xmlXPathParserContextPtr ctxt)
    +

    Implement the equal operation on XPath objects content: @arg1 == @arg2

    +
    ctxt:the XPath Parser context
    Returns:0 or 1 depending on the results of the test.
    +
    +

    xmlXPathErr ()

    void	xmlXPathErr			(xmlXPathParserContextPtr ctxt, 
    int error)
    +

    Handle an XPath error

    +
    ctxt:a XPath parser context
    error:the error code
    +
    +

    xmlXPathEvalExpr ()

    void	xmlXPathEvalExpr		(xmlXPathParserContextPtr ctxt)
    +

    Parse and evaluate an XPath expression in the given context, then push the result on the context stack

    +
    ctxt:the XPath Parser context
    +
    +

    xmlXPathEvaluatePredicateResult ()

    int	xmlXPathEvaluatePredicateResult	(xmlXPathParserContextPtr ctxt, 
    xmlXPathObjectPtr res)
    +

    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.

    +
    ctxt:the XPath Parser context
    res:the Predicate Expression evaluation result
    Returns:1 if predicate is true, 0 otherwise
    +
    +

    xmlXPathFalseFunction ()

    void	xmlXPathFalseFunction		(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +

    Implement the false() XPath function boolean false()

    +
    ctxt:the XPath Parser context
    nargs:the number of arguments
    +
    +

    xmlXPathFloorFunction ()

    void	xmlXPathFloorFunction		(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +

    Implement the floor() XPath function number floor(number) The floor function returns the largest (closest to positive infinity) number that is not greater than the argument and that is an integer.

    +
    ctxt:the XPath Parser context
    nargs:the number of arguments
    +
    + +
    +

    xmlXPathFunctionLookup ()

    xmlXPathFunction	xmlXPathFunctionLookup	(xmlXPathContextPtr ctxt, 
    const xmlChar * name)
    +

    Search in the Function array of the context for the given function.

    +
    ctxt:the XPath context
    name:the function name
    Returns:the xmlXPathFunction or NULL if not found
    +
    +

    xmlXPathFunctionLookupNS ()

    xmlXPathFunction	xmlXPathFunctionLookupNS	(xmlXPathContextPtr ctxt, 
    const xmlChar * name,
    const xmlChar * ns_uri)
    +

    Search in the Function array of the context for the given function.

    +
    ctxt:the XPath context
    name:the function name
    ns_uri:the function namespace URI
    Returns:the xmlXPathFunction or NULL if not found
    +
    +

    xmlXPathHasSameNodes ()

    int	xmlXPathHasSameNodes		(xmlNodeSetPtr nodes1, 
    xmlNodeSetPtr nodes2)
    +

    Implements the EXSLT - Sets has-same-nodes function: boolean set:has-same-node(node-set, node-set)

    +
    nodes1:a node-set
    nodes2:a node-set
    Returns:true (1) if @nodes1 shares any node with @nodes2, false (0) otherwise
    +
    +

    xmlXPathIdFunction ()

    void	xmlXPathIdFunction		(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +

    Implement the id() XPath function node-set id(object) The id function selects elements by their unique ID (see [5.2.1 Unique IDs]). When the argument to id is of type node-set, then the result is the union of the result of applying id to the string value of each of the nodes in the argument node-set. When the argument to id is of any other type, the argument is converted to a string as if by a call to the string function; the string is split into a whitespace-separated list of tokens (whitespace is any sequence of characters matching the production S); the result is a node-set containing the elements in the same document as the context node that have a unique ID equal to any of the tokens in the list.

    +
    ctxt:the XPath Parser context
    nargs:the number of arguments
    +
    +

    xmlXPathIntersection ()

    xmlNodeSetPtr	xmlXPathIntersection	(xmlNodeSetPtr nodes1, 
    xmlNodeSetPtr nodes2)
    +

    Implements the EXSLT - Sets intersection() function: node-set set:intersection (node-set, node-set)

    +
    nodes1:a node-set
    nodes2:a node-set
    Returns:a node set comprising the nodes that are within both the node sets passed as arguments
    +
    +

    xmlXPathIsNodeType ()

    int	xmlXPathIsNodeType		(const xmlChar * name)
    +

    Is the name given a NodeType one. [38] NodeType ::= 'comment' | 'text' | 'processing-instruction' | 'node'

    +
    name:a name string
    Returns:1 if true 0 otherwise
    +
    +

    xmlXPathLangFunction ()

    void	xmlXPathLangFunction		(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +

    Implement the lang() XPath function boolean lang(string) The lang function returns true or false depending on whether the language of the context node as specified by xml:lang attributes is the same as or is a sublanguage of the language specified by the argument string. The language of the context node is determined by the value of the xml:lang attribute on the context node, or, if the context node has no xml:lang attribute, by the value of the xml:lang attribute on the nearest ancestor of the context node that has an xml:lang attribute. If there is no such attribute, then lang

    +
    ctxt:the XPath Parser context
    nargs:the number of arguments
    +
    +

    xmlXPathLastFunction ()

    void	xmlXPathLastFunction		(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +

    Implement the last() XPath function number last() The last function returns the number of nodes in the context node list.

    +
    ctxt:the XPath Parser context
    nargs:the number of arguments
    +
    +

    xmlXPathLeading ()

    xmlNodeSetPtr	xmlXPathLeading		(xmlNodeSetPtr nodes1, 
    xmlNodeSetPtr nodes2)
    +

    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.

    +
    nodes1:a node-set
    nodes2:a 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
    +
    +

    xmlXPathLeadingSorted ()

    xmlNodeSetPtr	xmlXPathLeadingSorted	(xmlNodeSetPtr nodes1, 
    xmlNodeSetPtr nodes2)
    +

    Implements the EXSLT - Sets leading() function: node-set set:leading (node-set, node-set)

    +
    nodes1:a node-set, sorted by document order
    nodes2:a node-set, sorted by document order
    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
    +
    +

    xmlXPathLocalNameFunction ()

    void	xmlXPathLocalNameFunction	(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +

    Implement the local-name() XPath function string local-name(node-set?) The local-name function returns a string containing the local part of the name of the node in the argument node-set that is first in document order. If the node-set is empty or the first node has no name, an empty string is returned. If the argument is omitted it defaults to the context node.

    +
    ctxt:the XPath Parser context
    nargs:the number of arguments
    +
    +

    xmlXPathModValues ()

    void	xmlXPathModValues		(xmlXPathParserContextPtr ctxt)
    +

    Implement the mod operation on XPath objects: @arg1 / @arg2 The numeric operators convert their operands to numbers as if by calling the number function.

    +
    ctxt:the XPath Parser context
    +
    +

    xmlXPathMultValues ()

    void	xmlXPathMultValues		(xmlXPathParserContextPtr ctxt)
    +

    Implement the multiply operation on XPath objects: The numeric operators convert their operands to numbers as if by calling the number function.

    +
    ctxt:the XPath Parser context
    +
    +

    xmlXPathNamespaceURIFunction ()

    void	xmlXPathNamespaceURIFunction	(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +

    Implement the namespace-uri() XPath function string namespace-uri(node-set?) The namespace-uri function returns a string containing the namespace URI of the expanded name of the node in the argument node-set that is first in document order. If the node-set is empty, the first node has no name, or the expanded name has no namespace URI, an empty string is returned. If the argument is omitted it defaults to the context node.

    +
    ctxt:the XPath Parser context
    nargs:the number of arguments
    +
    +

    xmlXPathNewBoolean ()

    xmlXPathObjectPtr	xmlXPathNewBoolean	(int val)
    +

    Create a new xmlXPathObjectPtr of type boolean and of value @val

    +
    val:the boolean value
    Returns:the newly created object.
    +
    +

    xmlXPathNewCString ()

    xmlXPathObjectPtr	xmlXPathNewCString	(const char * val)
    +

    Create a new xmlXPathObjectPtr of type string and of value @val

    +
    val:the char * value
    Returns:the newly created object.
    +
    +

    xmlXPathNewFloat ()

    xmlXPathObjectPtr	xmlXPathNewFloat	(double val)
    +

    Create a new xmlXPathObjectPtr of type double and of value @val

    +
    val:the double value
    Returns:the newly created object.
    +
    +

    xmlXPathNewNodeSet ()

    xmlXPathObjectPtr	xmlXPathNewNodeSet	(xmlNodePtr val)
    +

    Create a new xmlXPathObjectPtr of type NodeSet and initialize it with the single Node @val

    +
    val:the NodePtr value
    Returns:the newly created object.
    +
    +

    xmlXPathNewNodeSetList ()

    xmlXPathObjectPtr	xmlXPathNewNodeSetList	(xmlNodeSetPtr val)
    +

    Create a new xmlXPathObjectPtr of type NodeSet and initialize it with the Nodeset @val

    +
    val:an existing NodeSet
    Returns:the newly created object.
    +
    +

    xmlXPathNewParserContext ()

    xmlXPathParserContextPtr	xmlXPathNewParserContext	(const xmlChar * str, 
    xmlXPathContextPtr ctxt)
    +

    Create a new xmlXPathParserContext

    +
    str:the XPath expression
    ctxt:the XPath context
    Returns:the xmlXPathParserContext just allocated.
    +
    +

    xmlXPathNewString ()

    xmlXPathObjectPtr	xmlXPathNewString	(const xmlChar * val)
    +

    Create a new xmlXPathObjectPtr of type string and of value @val

    +
    val:the xmlChar * value
    Returns:the newly created object.
    +
    +

    xmlXPathNewValueTree ()

    xmlXPathObjectPtr	xmlXPathNewValueTree	(xmlNodePtr val)
    +

    Create a new xmlXPathObjectPtr of type Value Tree (XSLT) and initialize it with the tree root @val

    +
    val:the NodePtr value
    Returns:the newly created object.
    +
    +

    xmlXPathNextAncestor ()

    xmlNodePtr	xmlXPathNextAncestor	(xmlXPathParserContextPtr ctxt, 
    xmlNodePtr cur)
    +

    Traversal function for the "ancestor" direction the ancestor axis contains the ancestors of the context node; the ancestors of the context node consist of the parent of context node and the parent's parent and so on; the nodes are ordered in reverse document order; thus the parent is the first node on the axis, and the parent's parent is the second node on the axis

    +
    ctxt:the XPath Parser context
    cur:the current node in the traversal
    Returns:the next element following that axis
    +
    +

    xmlXPathNextAncestorOrSelf ()

    xmlNodePtr	xmlXPathNextAncestorOrSelf	(xmlXPathParserContextPtr ctxt, 
    xmlNodePtr cur)
    +

    Traversal function for the "ancestor-or-self" direction he ancestor-or-self axis contains the context node and ancestors of the context node in reverse document order; thus the context node is the first node on the axis, and the context node's parent the second; parent here is defined the same as with the parent axis.

    +
    ctxt:the XPath Parser context
    cur:the current node in the traversal
    Returns:the next element following that axis
    +
    +

    xmlXPathNextAttribute ()

    xmlNodePtr	xmlXPathNextAttribute	(xmlXPathParserContextPtr ctxt, 
    xmlNodePtr cur)
    +

    Traversal function for the "attribute" direction TODO: support DTD inherited default attributes

    +
    ctxt:the XPath Parser context
    cur:the current attribute in the traversal
    Returns:the next element following that axis
    +
    +

    xmlXPathNextChild ()

    xmlNodePtr	xmlXPathNextChild	(xmlXPathParserContextPtr ctxt, 
    xmlNodePtr cur)
    +

    Traversal function for the "child" direction The child axis contains the children of the context node in document order.

    +
    ctxt:the XPath Parser context
    cur:the current node in the traversal
    Returns:the next element following that axis
    +
    +

    xmlXPathNextDescendant ()

    xmlNodePtr	xmlXPathNextDescendant	(xmlXPathParserContextPtr ctxt, 
    xmlNodePtr cur)
    +

    Traversal function for the "descendant" direction the descendant axis contains the descendants of the context node in document order; a descendant is a child or a child of a child and so on.

    +
    ctxt:the XPath Parser context
    cur:the current node in the traversal
    Returns:the next element following that axis
    +
    +

    xmlXPathNextDescendantOrSelf ()

    xmlNodePtr	xmlXPathNextDescendantOrSelf	(xmlXPathParserContextPtr ctxt, 
    xmlNodePtr cur)
    +

    Traversal function for the "descendant-or-self" direction the descendant-or-self axis contains the context node and the descendants of the context node in document order; thus the context node is the first node on the axis, and the first child of the context node is the second node on the axis

    +
    ctxt:the XPath Parser context
    cur:the current node in the traversal
    Returns:the next element following that axis
    +
    +

    xmlXPathNextFollowing ()

    xmlNodePtr	xmlXPathNextFollowing	(xmlXPathParserContextPtr ctxt, 
    xmlNodePtr cur)
    +

    Traversal function for the "following" direction The following axis contains all nodes in the same document as the context node that are after the context node in document order, excluding any descendants and excluding attribute nodes and namespace nodes; the nodes are ordered in document order

    +
    ctxt:the XPath Parser context
    cur:the current node in the traversal
    Returns:the next element following that axis
    +
    +

    xmlXPathNextFollowingSibling ()

    xmlNodePtr	xmlXPathNextFollowingSibling	(xmlXPathParserContextPtr ctxt, 
    xmlNodePtr cur)
    +

    Traversal function for the "following-sibling" direction The following-sibling axis contains the following siblings of the context node in document order.

    +
    ctxt:the XPath Parser context
    cur:the current node in the traversal
    Returns:the next element following that axis
    +
    +

    xmlXPathNextNamespace ()

    xmlNodePtr	xmlXPathNextNamespace	(xmlXPathParserContextPtr ctxt, 
    xmlNodePtr cur)
    +

    Traversal function for the "namespace" direction the namespace axis contains the namespace nodes of the context node; the order of nodes on this axis is implementation-defined; the axis will be empty unless the context node is an element We keep the XML namespace node at the end of the list.

    +
    ctxt:the XPath Parser context
    cur:the current attribute in the traversal
    Returns:the next element following that axis
    +
    +

    xmlXPathNextParent ()

    xmlNodePtr	xmlXPathNextParent	(xmlXPathParserContextPtr ctxt, 
    xmlNodePtr cur)
    +

    Traversal function for the "parent" direction The parent axis contains the parent of the context node, if there is one.

    +
    ctxt:the XPath Parser context
    cur:the current node in the traversal
    Returns:the next element following that axis
    +
    +

    xmlXPathNextPreceding ()

    xmlNodePtr	xmlXPathNextPreceding	(xmlXPathParserContextPtr ctxt, 
    xmlNodePtr cur)
    +

    Traversal function for the "preceding" direction the preceding axis contains all nodes in the same document as the context node that are before the context node in document order, excluding any ancestors and excluding attribute nodes and namespace nodes; the nodes are ordered in reverse document order

    +
    ctxt:the XPath Parser context
    cur:the current node in the traversal
    Returns:the next element following that axis
    +
    +

    xmlXPathNextPrecedingSibling ()

    xmlNodePtr	xmlXPathNextPrecedingSibling	(xmlXPathParserContextPtr ctxt, 
    xmlNodePtr cur)
    +

    Traversal function for the "preceding-sibling" direction The preceding-sibling axis contains the preceding siblings of the context node in reverse document order; the first preceding sibling is first on the axis; the sibling preceding that node is the second on the axis and so on.

    +
    ctxt:the XPath Parser context
    cur:the current node in the traversal
    Returns:the next element following that axis
    +
    +

    xmlXPathNextSelf ()

    xmlNodePtr	xmlXPathNextSelf	(xmlXPathParserContextPtr ctxt, 
    xmlNodePtr cur)
    +

    Traversal function for the "self" direction The self axis contains just the context node itself

    +
    ctxt:the XPath Parser context
    cur:the current node in the traversal
    Returns:the next element following that axis
    +
    +

    xmlXPathNodeLeading ()

    xmlNodeSetPtr	xmlXPathNodeLeading	(xmlNodeSetPtr nodes, 
    xmlNodePtr 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.

    +
    nodes:a node-set
    node:a node
    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
    +
    +

    xmlXPathNodeLeadingSorted ()

    xmlNodeSetPtr	xmlXPathNodeLeadingSorted	(xmlNodeSetPtr nodes, 
    xmlNodePtr node)
    +

    Implements the EXSLT - Sets leading() function: node-set set:leading (node-set, node-set)

    +
    nodes:a node-set, sorted by document order
    node:a node
    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
    +
    +

    xmlXPathNodeSetAdd ()

    int	xmlXPathNodeSetAdd		(xmlNodeSetPtr cur, 
    xmlNodePtr val)
    +

    add a new xmlNodePtr to an existing NodeSet

    +
    cur:the initial node set
    val:a new xmlNodePtr
    Returns:0 in case of success, and -1 in case of error
    +
    +

    xmlXPathNodeSetAddNs ()

    int	xmlXPathNodeSetAddNs		(xmlNodeSetPtr cur, 
    xmlNodePtr node,
    xmlNsPtr ns)
    +

    add a new namespace node to an existing NodeSet

    +
    cur:the initial node set
    node:the hosting node
    ns:a the namespace node
    Returns:0 in case of success and -1 in case of error
    +
    +

    xmlXPathNodeSetAddUnique ()

    int	xmlXPathNodeSetAddUnique	(xmlNodeSetPtr cur, 
    xmlNodePtr val)
    +

    add a new xmlNodePtr to an existing NodeSet, optimized version when we are sure the node is not already in the set.

    +
    cur:the initial node set
    val:a new xmlNodePtr
    Returns:0 in case of success and -1 in case of failure
    +
    +

    xmlXPathNodeSetContains ()

    int	xmlXPathNodeSetContains		(xmlNodeSetPtr cur, 
    xmlNodePtr val)
    +

    checks whether @cur contains @val

    +
    cur:the node-set
    val:the node
    Returns:true (1) if @cur contains @val, false (0) otherwise
    +
    +

    xmlXPathNodeSetDel ()

    void	xmlXPathNodeSetDel		(xmlNodeSetPtr cur, 
    xmlNodePtr val)
    +

    Removes an xmlNodePtr from an existing NodeSet

    +
    cur:the initial node set
    val:an xmlNodePtr
    +
    +

    xmlXPathNodeSetFreeNs ()

    void	xmlXPathNodeSetFreeNs		(xmlNsPtr ns)
    +

    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

    +
    ns:the XPath namespace node found in a nodeset.
    +
    +

    xmlXPathNodeSetMerge ()

    xmlNodeSetPtr	xmlXPathNodeSetMerge	(xmlNodeSetPtr val1, 
    xmlNodeSetPtr val2)
    +

    Merges two nodesets, all nodes from @val2 are added to @val1 if @val1 is NULL, a new set is created and copied from @val2

    +
    val1:the first NodeSet or NULL
    val2:the second NodeSet
    Returns:@val1 once extended or NULL in case of error.
    +
    +

    xmlXPathNodeSetRemove ()

    void	xmlXPathNodeSetRemove		(xmlNodeSetPtr cur, 
    int val)
    +

    Removes an entry from an existing NodeSet list.

    +
    cur:the initial node set
    val:the index to remove
    +
    +

    xmlXPathNodeSetSort ()

    void	xmlXPathNodeSetSort		(xmlNodeSetPtr set)
    +

    Sort the node set in document order

    +
    set:the node set
    +
    +

    xmlXPathNodeTrailing ()

    xmlNodeSetPtr	xmlXPathNodeTrailing	(xmlNodeSetPtr nodes, 
    xmlNodePtr 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.

    +
    nodes:a node-set
    node:a node
    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
    +
    +

    xmlXPathNodeTrailingSorted ()

    xmlNodeSetPtr	xmlXPathNodeTrailingSorted	(xmlNodeSetPtr nodes, 
    xmlNodePtr node)
    +

    Implements the EXSLT - Sets trailing() function: node-set set:trailing (node-set, node-set)

    +
    nodes:a node-set, sorted by document order
    node:a node
    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
    +
    +

    xmlXPathNormalizeFunction ()

    void	xmlXPathNormalizeFunction	(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +

    Implement the normalize-space() XPath function string normalize-space(string?) The normalize-space function returns the argument string with white space normalized by stripping leading and trailing whitespace and replacing sequences of whitespace characters by a single space. Whitespace characters are the same allowed by the S production in XML. If the argument is omitted, it defaults to the context node converted to a string, in other words the value of the context node.

    +
    ctxt:the XPath Parser context
    nargs:the number of arguments
    +
    +

    xmlXPathNotEqualValues ()

    int	xmlXPathNotEqualValues		(xmlXPathParserContextPtr ctxt)
    +

    Implement the equal operation on XPath objects content: @arg1 == @arg2

    +
    ctxt:the XPath Parser context
    Returns:0 or 1 depending on the results of the test.
    +
    +

    xmlXPathNotFunction ()

    void	xmlXPathNotFunction		(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +

    Implement the not() XPath function boolean not(boolean) The not function returns true if its argument is false, and false otherwise.

    +
    ctxt:the XPath Parser context
    nargs:the number of arguments
    +
    +

    xmlXPathNsLookup ()

    const xmlChar *	xmlXPathNsLookup	(xmlXPathContextPtr ctxt, 
    const xmlChar * prefix)
    +

    Search in the namespace declaration array of the context for the given namespace name associated to the given prefix

    +
    ctxt:the XPath context
    prefix:the namespace prefix value
    Returns:the value or NULL if not found
    +
    +

    xmlXPathNumberFunction ()

    void	xmlXPathNumberFunction		(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +

    Implement the number() XPath function number number(object?)

    +
    ctxt:the XPath Parser context
    nargs:the number of arguments
    +
    +

    xmlXPathParseNCName ()

    xmlChar *	xmlXPathParseNCName	(xmlXPathParserContextPtr ctxt)
    +

    parse an XML namespace non qualified name. [NS 3] NCName ::= (Letter | '_') (NCNameChar)* [NS 4] NCNameChar ::= Letter | Digit | '.' | '-' | '_' | CombiningChar | Extender

    +
    ctxt:the XPath Parser context
    Returns:the namespace name or NULL
    +
    +

    xmlXPathParseName ()

    xmlChar *	xmlXPathParseName	(xmlXPathParserContextPtr ctxt)
    +

    parse an XML name [4] NameChar ::= Letter | Digit | '.' | '-' | '_' | ':' | CombiningChar | Extender [5] Name ::= (Letter | '_' | ':') (NameChar)*

    +
    ctxt:the XPath Parser context
    Returns:the namespace name or NULL
    +
    +

    xmlXPathPopBoolean ()

    int	xmlXPathPopBoolean		(xmlXPathParserContextPtr ctxt)
    +

    Pops a boolean from the stack, handling conversion if needed. Check error with #xmlXPathCheckError.

    +
    ctxt:an XPath parser context
    Returns:the boolean
    +
    +

    xmlXPathPopExternal ()

    void *	xmlXPathPopExternal		(xmlXPathParserContextPtr ctxt)
    +

    Pops an external object from the stack, handling conversion if needed. Check error with #xmlXPathCheckError.

    +
    ctxt:an XPath parser context
    Returns:the object
    +
    +

    xmlXPathPopNodeSet ()

    xmlNodeSetPtr	xmlXPathPopNodeSet	(xmlXPathParserContextPtr ctxt)
    +

    Pops a node-set from the stack, handling conversion if needed. Check error with #xmlXPathCheckError.

    +
    ctxt:an XPath parser context
    Returns:the node-set
    +
    +

    xmlXPathPopNumber ()

    double	xmlXPathPopNumber		(xmlXPathParserContextPtr ctxt)
    +

    Pops a number from the stack, handling conversion if needed. Check error with #xmlXPathCheckError.

    +
    ctxt:an XPath parser context
    Returns:the number
    +
    +

    xmlXPathPopString ()

    xmlChar *	xmlXPathPopString	(xmlXPathParserContextPtr ctxt)
    +

    Pops a string from the stack, handling conversion if needed. Check error with #xmlXPathCheckError.

    +
    ctxt:an XPath parser context
    Returns:the string
    +
    +

    xmlXPathPositionFunction ()

    void	xmlXPathPositionFunction	(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +

    Implement the position() XPath function number position() The position function returns the position of the context node in the context node list. The first position is 1, and so the last position will be equal to last().

    +
    ctxt:the XPath Parser context
    nargs:the number of arguments
    +
    +

    xmlXPathRegisterAllFunctions ()

    void	xmlXPathRegisterAllFunctions	(xmlXPathContextPtr ctxt)
    +

    Registers all default XPath functions in this context

    +
    ctxt:the XPath context
    +
    +

    xmlXPathRegisterFunc ()

    int	xmlXPathRegisterFunc		(xmlXPathContextPtr ctxt, 
    const xmlChar * name,
    xmlXPathFunction f)
    +

    Register a new function. If @f is NULL it unregisters the function

    +
    ctxt:the XPath context
    name:the function name
    f:the function implementation or NULL
    Returns:0 in case of success, -1 in case of error
    +
    +

    xmlXPathRegisterFuncLookup ()

    void	xmlXPathRegisterFuncLookup	(xmlXPathContextPtr ctxt, 
    xmlXPathFuncLookupFunc f,
    void * funcCtxt)
    +

    Registers an external mechanism to do function lookup.

    +
    ctxt:the XPath context
    f:the lookup function
    funcCtxt:the lookup data
    +
    +

    xmlXPathRegisterFuncNS ()

    int	xmlXPathRegisterFuncNS		(xmlXPathContextPtr ctxt, 
    const xmlChar * name,
    const xmlChar * ns_uri,
    xmlXPathFunction f)
    +

    Register a new function. If @f is NULL it unregisters the function

    +
    ctxt:the XPath context
    name:the function name
    ns_uri:the function namespace URI
    f:the function implementation or NULL
    Returns:0 in case of success, -1 in case of error
    +
    +

    xmlXPathRegisterNs ()

    int	xmlXPathRegisterNs		(xmlXPathContextPtr ctxt, 
    const xmlChar * prefix,
    const xmlChar * ns_uri)
    +

    Register a new namespace. If @ns_uri is NULL it unregisters the namespace

    +
    ctxt:the XPath context
    prefix:the namespace prefix cannot be NULL or empty string
    ns_uri:the namespace name
    Returns:0 in case of success, -1 in case of error
    +
    +

    xmlXPathRegisterVariable ()

    int	xmlXPathRegisterVariable	(xmlXPathContextPtr ctxt, 
    const xmlChar * name,
    xmlXPathObjectPtr value)
    +

    Register a new variable value. If @value is NULL it unregisters the variable

    +
    ctxt:the XPath context
    name:the variable name
    value:the variable value or NULL
    Returns:0 in case of success, -1 in case of error
    +
    +

    xmlXPathRegisterVariableLookup ()

    void	xmlXPathRegisterVariableLookup	(xmlXPathContextPtr ctxt, 
    xmlXPathVariableLookupFunc f,
    void * data)
    +

    register an external mechanism to do variable lookup

    +
    ctxt:the XPath context
    f:the lookup function
    data:the lookup data
    +
    +

    xmlXPathRegisterVariableNS ()

    int	xmlXPathRegisterVariableNS	(xmlXPathContextPtr ctxt, 
    const xmlChar * name,
    const xmlChar * ns_uri,
    xmlXPathObjectPtr value)
    +

    Register a new variable value. If @value is NULL it unregisters the variable

    +
    ctxt:the XPath context
    name:the variable name
    ns_uri:the variable namespace URI
    value:the variable value or NULL
    Returns:0 in case of success, -1 in case of error
    +
    +

    xmlXPathRegisteredFuncsCleanup ()

    void	xmlXPathRegisteredFuncsCleanup	(xmlXPathContextPtr ctxt)
    +

    Cleanup the XPath context data associated to registered functions

    +
    ctxt:the XPath context
    +
    +

    xmlXPathRegisteredNsCleanup ()

    void	xmlXPathRegisteredNsCleanup	(xmlXPathContextPtr ctxt)
    +

    Cleanup the XPath context data associated to registered variables

    +
    ctxt:the XPath context
    +
    +

    xmlXPathRegisteredVariablesCleanup ()

    void	xmlXPathRegisteredVariablesCleanup	(xmlXPathContextPtr ctxt)
    +

    Cleanup the XPath context data associated to registered variables

    +
    ctxt:the XPath context
    +
    +

    xmlXPathRoot ()

    void	xmlXPathRoot			(xmlXPathParserContextPtr ctxt)
    +

    Initialize the context to the root of the document

    +
    ctxt:the XPath Parser context
    +
    +

    xmlXPathRoundFunction ()

    void	xmlXPathRoundFunction		(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +

    Implement the round() XPath function number round(number) The round function returns the number that is closest to the argument and that is an integer. If there are two such numbers, then the one that is even is returned.

    +
    ctxt:the XPath Parser context
    nargs:the number of arguments
    +
    +

    xmlXPathStartsWithFunction ()

    void	xmlXPathStartsWithFunction	(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +

    Implement the starts-with() XPath function boolean starts-with(string, string) The starts-with function returns true if the first argument string starts with the second argument string, and otherwise returns false.

    +
    ctxt:the XPath Parser context
    nargs:the number of arguments
    +
    +

    xmlXPathStringEvalNumber ()

    double	xmlXPathStringEvalNumber	(const xmlChar * str)
    +

    [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.

    +
    str:A string to scan
    Returns:the double value.
    +
    +

    xmlXPathStringFunction ()

    void	xmlXPathStringFunction		(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +

    Implement the string() XPath function string string(object?) The string function converts an object to a string as follows: - A node-set is converted to a string by returning the value of the node in the node-set that is first in document order. If the node-set is empty, an empty string is returned. - A number is converted to a string as follows + NaN is converted to the string NaN + positive zero is converted to the string 0 + negative zero is converted to the string 0 + positive infinity is converted to the string Infinity + negative infinity is converted to the string -Infinity + if the number is an integer, the number is represented in decimal form as a Number with no decimal point and no leading zeros, preceded by a minus sign (-) if the number is negative + otherwise, the number is represented in decimal form as a Number including a decimal point with at least one digit before the decimal point and at least one digit after the decimal point, preceded by a minus sign (-) if the number is negative; there must be no leading zeros before the decimal point apart possibly from the one required digit immediately before the decimal point; beyond the one required digit after the decimal point there must be as many, but only as many, more digits as are needed to uniquely distinguish the number from all other IEEE 754 numeric values. - The boolean false value is converted to the string false. The boolean true value is converted to the string true. If the argument is omitted, it defaults to a node-set with the context node as its only member.

    +
    ctxt:the XPath Parser context
    nargs:the number of arguments
    +
    +

    xmlXPathStringLengthFunction ()

    void	xmlXPathStringLengthFunction	(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +

    Implement the string-length() XPath function number string-length(string?) The string-length returns the number of characters in the string (see [3.6 Strings]). If the argument is omitted, it defaults to the context node converted to a string, in other words the value of the context node.

    +
    ctxt:the XPath Parser context
    nargs:the number of arguments
    +
    +

    xmlXPathSubValues ()

    void	xmlXPathSubValues		(xmlXPathParserContextPtr ctxt)
    +

    Implement the subtraction operation on XPath objects: The numeric operators convert their operands to numbers as if by calling the number function.

    +
    ctxt:the XPath Parser context
    +
    +

    xmlXPathSubstringAfterFunction ()

    void	xmlXPathSubstringAfterFunction	(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +

    Implement the substring-after() XPath function string substring-after(string, string) The substring-after function returns the substring of the first argument string that follows the first occurrence of the second argument string in the first argument string, or the empty stringi if the first argument string does not contain the second argument string. For example, substring-after("1999/04/01","/") returns 04/01, and substring-after("1999/04/01","19") returns 99/04/01.

    +
    ctxt:the XPath Parser context
    nargs:the number of arguments
    +
    +

    xmlXPathSubstringBeforeFunction ()

    void	xmlXPathSubstringBeforeFunction	(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +

    Implement the substring-before() XPath function string substring-before(string, string) The substring-before function returns the substring of the first argument string that precedes the first occurrence of the second argument string in the first argument string, or the empty string if the first argument string does not contain the second argument string. For example, substring-before("1999/04/01","/") returns 1999.

    +
    ctxt:the XPath Parser context
    nargs:the number of arguments
    +
    +

    xmlXPathSubstringFunction ()

    void	xmlXPathSubstringFunction	(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +

    Implement the substring() XPath function string substring(string, number, number?) The substring function returns the substring of the first argument starting at the position specified in the second argument with length specified in the third argument. For example, substring("12345",2,3) returns "234". If the third argument is not specified, it returns the substring starting at the position specified in the second argument and continuing to the end of the string. For example, substring("12345",2) returns "2345". More precisely, each character in the string (see [3.6 Strings]) is considered to have a numeric position: the position of the first character is 1, the position of the second character is 2 and so on. The returned substring contains those characters for which the position of the character is greater than or equal to the second argument and, if the third argument is specified, less than the sum of the second and third arguments; the comparisons and addition used for the above follow the standard IEEE 754 rules. Thus: - substring("12345", 1.5, 2.6) returns "234" - substring("12345", 0, 3) returns "12" - substring("12345", 0 div 0, 3) returns "" - substring("12345", 1, 0 div 0) returns "" - substring("12345", -42, 1 div 0) returns "12345" - substring("12345", -1 div 0, 1 div 0) returns ""

    +
    ctxt:the XPath Parser context
    nargs:the number of arguments
    +
    +

    xmlXPathSumFunction ()

    void	xmlXPathSumFunction		(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +

    Implement the sum() XPath function number sum(node-set) The sum function returns the sum of the values of the nodes in the argument node-set.

    +
    ctxt:the XPath Parser context
    nargs:the number of arguments
    +
    +

    xmlXPathTrailing ()

    xmlNodeSetPtr	xmlXPathTrailing	(xmlNodeSetPtr nodes1, 
    xmlNodeSetPtr nodes2)
    +

    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.

    +
    nodes1:a node-set
    nodes2:a 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
    +
    +

    xmlXPathTrailingSorted ()

    xmlNodeSetPtr	xmlXPathTrailingSorted	(xmlNodeSetPtr nodes1, 
    xmlNodeSetPtr nodes2)
    +

    Implements the EXSLT - Sets trailing() function: node-set set:trailing (node-set, node-set)

    +
    nodes1:a node-set, sorted by document order
    nodes2:a node-set, sorted by document order
    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
    +
    +

    xmlXPathTranslateFunction ()

    void	xmlXPathTranslateFunction	(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +

    Implement the translate() XPath function string translate(string, string, string) The translate function returns the first argument string with occurrences of characters in the second argument string replaced by the character at the corresponding position in the third argument string. For example, translate("bar","abc","ABC") returns the string BAr. If there is a character in the second argument string with no character at a corresponding position in the third argument string (because the second argument string is longer than the third argument string), then occurrences of that character in the first argument string are removed. For example, translate("--aaa--","abc-","ABC")

    +
    ctxt:the XPath Parser context
    nargs:the number of arguments
    +
    +

    xmlXPathTrueFunction ()

    void	xmlXPathTrueFunction		(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +

    Implement the true() XPath function boolean true()

    +
    ctxt:the XPath Parser context
    nargs:the number of arguments
    +
    +

    xmlXPathValueFlipSign ()

    void	xmlXPathValueFlipSign		(xmlXPathParserContextPtr ctxt)
    +

    Implement the unary - operation on an XPath object The numeric operators convert their operands to numbers as if by calling the number function.

    +
    ctxt:the XPath Parser context
    +
    +

    xmlXPathVariableLookup ()

    xmlXPathObjectPtr	xmlXPathVariableLookup	(xmlXPathContextPtr ctxt, 
    const xmlChar * name)
    +

    Search in the Variable array of the context for the given variable value.

    +
    ctxt:the XPath context
    name:the variable name
    Returns:a copy of the value or NULL if not found
    +
    +

    xmlXPathVariableLookupNS ()

    xmlXPathObjectPtr	xmlXPathVariableLookupNS	(xmlXPathContextPtr ctxt, 
    const xmlChar * name,
    const xmlChar * ns_uri)
    +

    Search in the Variable array of the context for the given variable value.

    +
    ctxt:the XPath context
    name:the variable name
    ns_uri:the variable namespace URI
    Returns:the a copy of the value or NULL if not found
    +
    +

    xmlXPathWrapCString ()

    xmlXPathObjectPtr	xmlXPathWrapCString	(char * val)
    +

    Wraps a string into an XPath object.

    +
    val:the char * value
    Returns:the newly created object.
    +
    +

    xmlXPathWrapExternal ()

    xmlXPathObjectPtr	xmlXPathWrapExternal	(void * val)
    +

    Wraps the @val data into an XPath object.

    +
    val:the user data
    Returns:the newly created object.
    +
    +

    xmlXPathWrapNodeSet ()

    xmlXPathObjectPtr	xmlXPathWrapNodeSet	(xmlNodeSetPtr val)
    +

    Wrap the Nodeset @val in a new xmlXPathObjectPtr

    +
    val:the NodePtr value
    Returns:the newly created object.
    +
    +

    xmlXPathWrapString ()

    xmlXPathObjectPtr	xmlXPathWrapString	(xmlChar * val)
    +

    Wraps the @val string into an XPath object.

    +
    val:the xmlChar * value
    Returns:the newly created object.
    +
    +

    xmlXPatherror ()

    void	xmlXPatherror			(xmlXPathParserContextPtr ctxt, 
    const char * file,
    int line,
    int no)
    +

    Formats an error message.

    +
    ctxt:the XPath Parser context
    file:the file name
    line:the line number
    no:the error number
    +
    +
    +
    + + diff --git a/doc/devhelp/libxml2-xpointer.html b/doc/devhelp/libxml2-xpointer.html new file mode 100644 index 0000000..807eed7 --- /dev/null +++ b/doc/devhelp/libxml2-xpointer.html @@ -0,0 +1,171 @@ + + + + + xpointer: API to handle XML Pointers + + + + + + + + + + + + + + + +

    + xpointer +

    +

    xpointer - API to handle XML Pointers

    +

    API to handle XML Pointers Base implementation was made accordingly to W3C Candidate Recommendation 7 June 2000

    +

    Author(s): Daniel Veillard

    +
    +

    Synopsis

    +
    typedef struct _xmlLocationSet xmlLocationSet;
    +typedef xmlLocationSet * xmlLocationSetPtr;
    +xmlXPathObjectPtr	xmlXPtrNewRange	(xmlNodePtr start, 
    int startindex,
    xmlNodePtr end,
    int endindex); +void xmlXPtrFreeLocationSet (xmlLocationSetPtr obj); +xmlXPathObjectPtr xmlXPtrWrapLocationSet (xmlLocationSetPtr val); +xmlNodePtr xmlXPtrBuildNodeList (xmlXPathObjectPtr obj); +xmlXPathObjectPtr xmlXPtrEval (const xmlChar * str,
    xmlXPathContextPtr ctx); +xmlXPathObjectPtr xmlXPtrNewRangeNodes (xmlNodePtr start,
    xmlNodePtr end); +void xmlXPtrLocationSetAdd (xmlLocationSetPtr cur,
    xmlXPathObjectPtr val); +void xmlXPtrRangeToFunction (xmlXPathParserContextPtr ctxt,
    int nargs); +xmlXPathObjectPtr xmlXPtrNewCollapsedRange (xmlNodePtr start); +xmlXPathObjectPtr xmlXPtrNewRangePoints (xmlXPathObjectPtr start,
    xmlXPathObjectPtr end); +xmlXPathObjectPtr xmlXPtrNewLocationSetNodeSet (xmlNodeSetPtr set); +xmlXPathObjectPtr xmlXPtrNewRangePointNode (xmlXPathObjectPtr start,
    xmlNodePtr end); +xmlLocationSetPtr xmlXPtrLocationSetCreate (xmlXPathObjectPtr val); +xmlXPathObjectPtr xmlXPtrNewRangeNodeObject (xmlNodePtr start,
    xmlXPathObjectPtr end); +xmlXPathContextPtr xmlXPtrNewContext (xmlDocPtr doc,
    xmlNodePtr here,
    xmlNodePtr origin); +void xmlXPtrLocationSetRemove (xmlLocationSetPtr cur,
    int val); +xmlXPathObjectPtr xmlXPtrNewRangeNodePoint (xmlNodePtr start,
    xmlXPathObjectPtr end); +void xmlXPtrLocationSetDel (xmlLocationSetPtr cur,
    xmlXPathObjectPtr val); +xmlLocationSetPtr xmlXPtrLocationSetMerge (xmlLocationSetPtr val1,
    xmlLocationSetPtr val2); +void xmlXPtrEvalRangePredicate (xmlXPathParserContextPtr ctxt); +xmlXPathObjectPtr xmlXPtrNewLocationSetNodes (xmlNodePtr start,
    xmlNodePtr end); +
    +
    +
    +

    Description

    +
    +
    +

    Details

    +
    +

    Structure xmlLocationSet

    struct _xmlLocationSet {
    +    int	locNr	: number of locations in the set
    +    int	locMax	: size of the array as allocated
    +    xmlXPathObjectPtr *	locTab	: array of locations
    +} xmlLocationSet;
    +

    +

    +
    +

    Typedef xmlLocationSetPtr

    xmlLocationSet * xmlLocationSetPtr;
    +

    +

    +
    +

    xmlXPtrBuildNodeList ()

    xmlNodePtr	xmlXPtrBuildNodeList	(xmlXPathObjectPtr obj)
    +

    Build a node list tree copy of the XPointer result. This will drop Attributes and Namespace declarations.

    +
    obj:the XPointer result from the evaluation.
    Returns:an xmlNodePtr list or NULL. the caller has to free the node tree.
    +
    +

    xmlXPtrEval ()

    xmlXPathObjectPtr	xmlXPtrEval	(const xmlChar * str, 
    xmlXPathContextPtr ctx)
    +

    Evaluate the XPath Location Path in the given context.

    +
    str:the XPointer expression
    ctx:the XPointer context
    Returns:the xmlXPathObjectPtr resulting from the evaluation or NULL. the caller has to free the object.
    +
    +

    xmlXPtrEvalRangePredicate ()

    void	xmlXPtrEvalRangePredicate	(xmlXPathParserContextPtr ctxt)
    +

    [8] Predicate ::= '[' PredicateExpr ']' [9] PredicateExpr ::= Expr Evaluate a predicate as in xmlXPathEvalPredicate() but for a Location Set instead of a node set

    +
    ctxt:the XPointer Parser context
    +
    +

    xmlXPtrFreeLocationSet ()

    void	xmlXPtrFreeLocationSet		(xmlLocationSetPtr obj)
    +

    Free the LocationSet compound (not the actual ranges !).

    +
    obj:the xmlLocationSetPtr to free
    +
    +

    xmlXPtrLocationSetAdd ()

    void	xmlXPtrLocationSetAdd		(xmlLocationSetPtr cur, 
    xmlXPathObjectPtr val)
    +

    add a new xmlXPathObjectPtr to an existing LocationSet If the location already exist in the set @val is freed.

    +
    cur:the initial range set
    val:a new xmlXPathObjectPtr
    +
    +

    xmlXPtrLocationSetCreate ()

    xmlLocationSetPtr	xmlXPtrLocationSetCreate	(xmlXPathObjectPtr val)
    +

    Create a new xmlLocationSetPtr of type double and of value @val

    +
    val:an initial xmlXPathObjectPtr, or NULL
    Returns:the newly created object.
    +
    +

    xmlXPtrLocationSetDel ()

    void	xmlXPtrLocationSetDel		(xmlLocationSetPtr cur, 
    xmlXPathObjectPtr val)
    +

    Removes an xmlXPathObjectPtr from an existing LocationSet

    +
    cur:the initial range set
    val:an xmlXPathObjectPtr
    +
    +

    xmlXPtrLocationSetMerge ()

    xmlLocationSetPtr	xmlXPtrLocationSetMerge	(xmlLocationSetPtr val1, 
    xmlLocationSetPtr val2)
    +

    Merges two rangesets, all ranges from @val2 are added to @val1

    +
    val1:the first LocationSet
    val2:the second LocationSet
    Returns:val1 once extended or NULL in case of error.
    +
    +

    xmlXPtrLocationSetRemove ()

    void	xmlXPtrLocationSetRemove	(xmlLocationSetPtr cur, 
    int val)
    +

    Removes an entry from an existing LocationSet list.

    +
    cur:the initial range set
    val:the index to remove
    +
    +

    xmlXPtrNewCollapsedRange ()

    xmlXPathObjectPtr	xmlXPtrNewCollapsedRange	(xmlNodePtr start)
    +

    Create a new xmlXPathObjectPtr of type range using a single nodes

    +
    start:the starting and ending node
    Returns:the newly created object.
    +
    +

    xmlXPtrNewContext ()

    xmlXPathContextPtr	xmlXPtrNewContext	(xmlDocPtr doc, 
    xmlNodePtr here,
    xmlNodePtr origin)
    +

    Create a new XPointer context

    +
    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.
    Returns:the xmlXPathContext just allocated.
    +
    +

    xmlXPtrNewLocationSetNodeSet ()

    xmlXPathObjectPtr	xmlXPtrNewLocationSetNodeSet	(xmlNodeSetPtr set)
    +

    Create a new xmlXPathObjectPtr of type LocationSet and initialize it with all the nodes from @set

    +
    set:a node set
    Returns:the newly created object.
    +
    +

    xmlXPtrNewLocationSetNodes ()

    xmlXPathObjectPtr	xmlXPtrNewLocationSetNodes	(xmlNodePtr start, 
    xmlNodePtr end)
    +

    Create a new xmlXPathObjectPtr of type LocationSet and initialize it with the single range made of the two nodes @start and @end

    +
    start:the start NodePtr value
    end:the end NodePtr value or NULL
    Returns:the newly created object.
    +
    +

    xmlXPtrNewRange ()

    xmlXPathObjectPtr	xmlXPtrNewRange	(xmlNodePtr start, 
    int startindex,
    xmlNodePtr end,
    int endindex)
    +

    Create a new xmlXPathObjectPtr of type range

    +
    start:the starting node
    startindex:the start index
    end:the ending point
    endindex:the ending index
    Returns:the newly created object.
    +
    +

    xmlXPtrNewRangeNodeObject ()

    xmlXPathObjectPtr	xmlXPtrNewRangeNodeObject	(xmlNodePtr start, 
    xmlXPathObjectPtr end)
    +

    Create a new xmlXPathObjectPtr of type range from a not to an object

    +
    start:the starting node
    end:the ending object
    Returns:the newly created object.
    +
    +

    xmlXPtrNewRangeNodePoint ()

    xmlXPathObjectPtr	xmlXPtrNewRangeNodePoint	(xmlNodePtr start, 
    xmlXPathObjectPtr end)
    +

    Create a new xmlXPathObjectPtr of type range from a node to a point

    +
    start:the starting node
    end:the ending point
    Returns:the newly created object.
    +
    +

    xmlXPtrNewRangeNodes ()

    xmlXPathObjectPtr	xmlXPtrNewRangeNodes	(xmlNodePtr start, 
    xmlNodePtr end)
    +

    Create a new xmlXPathObjectPtr of type range using 2 nodes

    +
    start:the starting node
    end:the ending node
    Returns:the newly created object.
    +
    +

    xmlXPtrNewRangePointNode ()

    xmlXPathObjectPtr	xmlXPtrNewRangePointNode	(xmlXPathObjectPtr start, 
    xmlNodePtr end)
    +

    Create a new xmlXPathObjectPtr of type range from a point to a node

    +
    start:the starting point
    end:the ending node
    Returns:the newly created object.
    +
    +

    xmlXPtrNewRangePoints ()

    xmlXPathObjectPtr	xmlXPtrNewRangePoints	(xmlXPathObjectPtr start, 
    xmlXPathObjectPtr end)
    +

    Create a new xmlXPathObjectPtr of type range using 2 Points

    +
    start:the starting point
    end:the ending point
    Returns:the newly created object.
    +
    +

    xmlXPtrRangeToFunction ()

    void	xmlXPtrRangeToFunction		(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +

    Implement the range-to() XPointer function

    +
    ctxt:the XPointer Parser context
    nargs:the number of args
    +
    +

    xmlXPtrWrapLocationSet ()

    xmlXPathObjectPtr	xmlXPtrWrapLocationSet	(xmlLocationSetPtr val)
    +

    Wrap the LocationSet @val in a new xmlXPathObjectPtr

    +
    val:the LocationSet value
    Returns:the newly created object.
    +
    +
    +
    + + diff --git a/doc/devhelp/libxml2-xzlib.html b/doc/devhelp/libxml2-xzlib.html new file mode 100644 index 0000000..89507c5 --- /dev/null +++ b/doc/devhelp/libxml2-xzlib.html @@ -0,0 +1,62 @@ + + + + + xzlib: + + + + + + + + + + + + + + + +

    + xzlib +

    +

    xzlib -

    +

    +

    Author(s):

    +
    +

    Synopsis

    +
    #define LIBXML2_XZLIB_H;
    +typedef void * xzFile;
    +
    +
    +
    +

    Description

    +
    +
    +

    Details

    +
    +

    Macro LIBXML2_XZLIB_H

    #define LIBXML2_XZLIB_H;
    +

    +

    +
    +

    Typedef xzFile

    void * xzFile;
    +

    +

    +
    +
    +
    + + diff --git a/doc/devhelp/libxml2.devhelp b/doc/devhelp/libxml2.devhelp new file mode 100644 index 0000000..fbd3ad4 --- /dev/null +++ b/doc/devhelp/libxml2.devhelp @@ -0,0 +1,3574 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/devhelp/right.png b/doc/devhelp/right.png new file mode 100644 index 0000000..92832e3 Binary files /dev/null and b/doc/devhelp/right.png differ diff --git a/doc/devhelp/style.css b/doc/devhelp/style.css new file mode 100644 index 0000000..c9cabe7 --- /dev/null +++ b/doc/devhelp/style.css @@ -0,0 +1,66 @@ +.synopsis, .classsynopsis +{ + background: #eeeeee; + border: solid 1px #aaaaaa; + padding: 0.5em; +} +.programlisting +{ + background: #eeeeff; + border: solid 1px #aaaaff; + padding: 0.5em; +} +.variablelist +{ + padding: 4px; + margin-left: 3em; +} +.variablelist td:first-child +{ + vertical-align: top; +} +table.navigation +{ + background: #ffeeee; + border: solid 1px #ffaaaa; + margin-top: 0.5em; + margin-bottom: 0.5em; +} +.navigation a +{ + color: #770000; +} +.navigation a:visited +{ + color: #550000; +} +.navigation .title +{ + font-size: 200%; +} +div.refnamediv +{ + margin-top: 2em; +} +div.gallery-float +{ + float: left; + padding: 10px; +} +div.gallery-float img +{ + border-style: none; +} +div.gallery-spacer +{ + clear: both; +} +a +{ + text-decoration: none; +} +a:hover +{ + text-decoration: underline; + color: #FF0000; +} diff --git a/doc/devhelp/up.png b/doc/devhelp/up.png new file mode 100644 index 0000000..85b3e2a Binary files /dev/null and b/doc/devhelp/up.png differ diff --git a/doc/docdescr.doc b/doc/docdescr.doc new file mode 100644 index 0000000..3fec94a --- /dev/null +++ b/doc/docdescr.doc @@ -0,0 +1,100 @@ + Notes on the libxml2 Documentation + Prepared by: William Brack + + After spending a lot of time tracing through Makefile.am, some Python +scripts and some xsl scripts and xml files, I thought it might be good +to save others some time by setting down the basic information about how +the library documentation is created. I intend to enhance this process, +but will keep this document up-to-date for everyone's information. Note +that this document does not apply to the subdirectory "tutorial", which +is separately maintained by John Fleck. + + There are a relatively small number of files which form the "core" of +the document directory. All the other files in the directory can be re- +generated using the information present in these core files, plus the +actual library source files (*.[ch]) in the parent directory "../" and +it's descendants include and include/libxml. These core files, together +with a brief description of each, are as follows:- + +xml.html The "main page", manually produced by Daniel Veillard +news.html The latest news, extracted from xml.html by site.xsl + +benchmark.gif Illustrations used for the "main page" and subsidiaries +gnome2.png ------- +Libxml2-Logo-180x168.gif | +libxml.gif | +linus.gif | +redhat.gif | +structure.gif \ / +w3c.png - + +apibuild.py Python script which generates the file libxml2-api.xml +parsedecl.py Python script which generates the file libxml2-refs.xml + +api.xsl xslt script to generate API cross-references APIchunk*.html + using information from libxml2-api.xml and libxml2-refs.xml +news.xsl xslt script to generate ../NEWS from news.html +site.xsl xslt script imported by api.xsl, generates most top-level + pages from news.html +xsa.xsl xslt script to generate libxml.xsa from news.html + +xmlcatalog.1 Man page for xml catalogs, built from xmlcatalog_man.xml DocBook + source with "make xmlcatalog.1" or "make all" +xmllint.1 Man page for xmllint program, built from xmllint.xml DocBook + source with "make xmllint.1" or "make all" + +libxml-doc.el Control script for displaying docs under emacs + + + Given the above files, the generation of the complete documentation (as +provided on the web by xmlsoft.org) can be created with the following steps: + +NOTE: Steps 1 through 7 are performed with the command "make rebuild"; + Steps 3 and 5 through 7 are performed with the command "make all" + + +1) Generate libxml2-api.xml: + ./apibuild.py + + This script is a more recent addition to the documentation generation. + Instead of using the information from the gtk-doc routines, it actually + re-processes all the the library source files, extracting information + about the api (exported procedures and symbols, together with information + from the source comments within these). It produces an xml file which + contains all of this information, "libxml2-api.xml". + +2) Generate libxml2-refs.xml: + ./parsedecl.py + + This script produces the summary + xml file "libxml2-refs.xml". Historically, it also used to produce + information on the api's in the file "libxml2-api.xml", but that step is + now being done by a separate script. + +3) Generate the site's main pages: + xsltproc --nonet --html --output index.html site.xsl xml.html + + All of the "top-level" pages (except xmlreader.html and guidelines.html) + which have navigation framing, are generated from this step + +4) Generate the contents and cross-referencing pages: + xsltproc --nonet --html api.xsl xml.html + +5) Generate the NEWS file in the top directory: + xsltproc --nonet --output ../NEWS news.xsl news.html + +6) Generate the XML Software Autoupdate file libxml2.xsa: + make libxml2.xsa, or, + xsltproc --nonet --output libxml2.xsa xsa.xsl news.html + +7) Manually generate xmlcatalog.1 and xmllint.1 using manpages/docbook.xsl + stylesheet in docbook stylesheets. "make all" also takes care of this. + + After these steps have been done, the documentation is complete. +The search engine is then set up using the script index.py, using +libxml2-api.xml, the HTML web pages generated above, and the HTML +mailing list archives at gnome.org. + + +Last update: 30 November 2003 + diff --git a/doc/docs.html b/doc/docs.html new file mode 100644 index 0000000..dd59a37 --- /dev/null +++ b/doc/docs.html @@ -0,0 +1,34 @@ + + +Developer Menu
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    The XML C parser and toolkit of Gnome

    Developer Menu

    Developer Menu
    API Indexes
    Related links

    There are several on-line resources related to using libxml:

      +
    1. Use the search engine to look up + information.
    2. +
    3. Check the FAQ.
    4. +
    5. Check the extensive + documentation automatically extracted from code comments.
    6. +
    7. Look at the documentation about libxml + internationalization support.
    8. +
    9. This page provides a global overview and some + examples on how to use libxml.
    10. +
    11. Code examples
    12. +
    13. John Fleck's libxml2 tutorial: html + or pdf.
    14. +
    15. If you need to parse large files, check the xmlReader API tutorial
    16. +
    17. James Henstridge wrote some nice + documentation explaining how to use the libxml SAX interface.
    18. +
    19. George Lebl wrote an article + for IBM developerWorks about using libxml.
    20. +
    21. Check the TODO + file.
    22. +
    23. Read the 1.x to 2.x upgrade path + description. If you are starting a new project using libxml you should + really use the 2.x version.
    24. +
    25. And don't forget to look at the mailing-list archive.
    26. +

    Daniel Veillard

    diff --git a/doc/downloads.html b/doc/downloads.html new file mode 100644 index 0000000..20f9e57 --- /dev/null +++ b/doc/downloads.html @@ -0,0 +1,40 @@ + + +Downloads
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    The XML C parser and toolkit of Gnome

    Downloads

    Main Menu
    Related links

    The latest versions of libxml2 can be found on the xmlsoft.org server ( FTP and rsync are available), there are also +mirrors (France and +Antonin Sprinzl also provide a +mirror in Austria). (NOTE that you need both the libxml(2) and libxml(2)-devel +packages installed to compile applications using libxml if using RPMs.)

    You can find all the history of libxml(2) and libxslt releases in the old directory. The precompiled +Windows binaries made by Igor Zlatovic are available in the win32 directory.

    Binary ports:

    If you know other supported binary ports, please contact me.

    Snapshot:

    Contributions:

    I do accept external contributions, especially if compiling on another +platform, get in touch with the list to upload the package, wrappers for +various languages have been provided, and can be found in the bindings section

    Libxml2 is also available from GIT:

      +
    • See libxml2 Git web. + To checkout a local tree use:

      +
      git clone git://git.gnome.org/libxml2
      +
    • +
    • The libxslt module is also present + there.
    • +

    Daniel Veillard

    diff --git a/doc/elfgcchack.xsl b/doc/elfgcchack.xsl new file mode 100644 index 0000000..9b1a9bc --- /dev/null +++ b/doc/elfgcchack.xsl @@ -0,0 +1,160 @@ + + + + + + /* + * elfgcchack.h: hack by Arjan van de Ven <arjanv@redhat.com> to speed + * up the code when using gcc for call within the library. + * + * Based on the analysis http://people.redhat.com/drepper/dsohowto.pdf + * from Ulrich drepper. Rewritten to be generated from the XML description + * file for libxml2 API + * autogenerated with xsltproc doc/elfgcchack.xsl doc/libxml2-api.xml + */ + +#ifdef IN_LIBXML +#ifdef __GNUC__ +#ifdef PIC +#ifdef linux +#if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || (__GNUC__ > 3) + +#include "libxml/c14n.h" +#include "libxml/catalog.h" +#include "libxml/chvalid.h" +#include "libxml/debugXML.h" +#include "libxml/dict.h" +#include "libxml/DOCBparser.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/nanoftp.h" +#include "libxml/nanohttp.h" +#include "libxml/parser.h" +#include "libxml/parserInternals.h" +#include "libxml/pattern.h" +#include "libxml/relaxng.h" +#include "libxml/SAX2.h" +#include "libxml/SAX.h" +#include "libxml/schemasInternals.h" +#include "libxml/schematron.h" +#include "libxml/threads.h" +#include "libxml/tree.h" +#include "libxml/uri.h" +#include "libxml/valid.h" +#include "libxml/xinclude.h" +#include "libxml/xlink.h" +#include "libxml/xmlautomata.h" +#include "libxml/xmlerror.h" +#include "libxml/xmlexports.h" +#include "libxml/xmlIO.h" +#include "libxml/xmlmemory.h" +#include "libxml/xmlreader.h" +#include "libxml/xmlregexp.h" +#include "libxml/xmlsave.h" +#include "libxml/xmlschemas.h" +#include "libxml/xmlschemastypes.h" +#include "libxml/xmlstring.h" +#include "libxml/xmlunicode.h" +#include "libxml/xmlversion.h" +#include "libxml/xmlwriter.h" +#include "libxml/xpath.h" +#include "libxml/xpathInternals.h" +#include "libxml/xpointer.h" +#include "libxml/xmlmodule.h" + +/* special hot spot not exported ones */ + +#ifdef bottom_globals +#undef __xmlGenericError +extern __typeof (__xmlGenericError) __xmlGenericError __attribute((alias("__xmlGenericError__internal_alias"))); +#else +#ifndef __xmlGenericError +extern __typeof (__xmlGenericError) __xmlGenericError__internal_alias __attribute((visibility("hidden"))); +#define __xmlGenericError __xmlGenericError__internal_alias +#endif +#endif + +#ifdef bottom_globals +#undef __xmlGenericErrorContext +extern __typeof (__xmlGenericErrorContext) __xmlGenericErrorContext __attribute((alias("__xmlGenericErrorContext__internal_alias"))); +#else +#ifndef __xmlGenericErrorContext +extern __typeof (__xmlGenericErrorContext) __xmlGenericErrorContext__internal_alias __attribute((visibility("hidden"))); +#define __xmlGenericErrorContext __xmlGenericErrorContext__internal_alias +#endif +#endif + +/* list generated from libxml2-api.xml */ + + + +#endif +#endif +#endif +#endif +#endif + + + + + + + + + + #ifdef bottom_ + + +#undef + + +extern __typeof ( + + ) + + __attribute((alias(" + + "))); +#else +#ifndef + + + + extern __typeof ( + + ) + + __attribute((visibility("hidden"))); + + #define + + + + +#endif +#endif + + + + + + + + #if + + + + + + #endif + + + + diff --git a/doc/encoding.html b/doc/encoding.html new file mode 100644 index 0000000..7c7953f --- /dev/null +++ b/doc/encoding.html @@ -0,0 +1,217 @@ + + +Encodings support
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    The XML C parser and toolkit of Gnome

    Encodings support

    Main Menu
    Related links

    If you are not really familiar with Internationalization (usual shortcut +is I18N) , Unicode, characters and glyphs, I suggest you read a presentation +by Tim Bray on Unicode and why you should care about it.

    If you don't understand why it does not make sense to have a string +without knowing what encoding it uses, then as Joel Spolsky said please do not +write another line of code until you finish reading that article.. It is +a prerequisite to understand this page, and avoid a lot of problems with +libxml2, XML or text processing in general.

    Table of Content:

      +
    1. What does internationalization support + mean ?
    2. +
    3. The internal encoding, how and + why
    4. +
    5. How is it implemented ?
    6. +
    7. Default supported encodings
    8. +
    9. How to extend the existing + support
    10. +

    What does internationalization support mean ?

    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:

    <?xml version="1.0" encoding="ISO-8859-1"?>
    +<très>là </très>

    Having internationalization support in libxml2 means the following:

      +
    • the document is properly parsed
    • +
    • information about it's encoding is saved
    • +
    • it can be modified
    • +
    • it can be saved in its original encoding
    • +
    • it can also be saved in another encoding supported by libxml2 (for + example straight UTF8 or even an ASCII form)
    • +

    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.

    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:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
    +                      "http://www.w3.org/TR/REC-html40/loose.dtd">
    +<html lang="fr">
    +<head>
    +  <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
    +</head>
    +<body>
    +<p>W3C crée des standards pour le Web.</body>
    +</html>

    The internal encoding, how and why

    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:

      +
    • 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.
    • +
    • 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: +
        +
      • 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
      • +
      • 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.
      • +
      • UTF-8 is being used as the de-facto internal encoding standard for + related code like the pango + 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)
      • +
      +
    • +

    What does this mean in practice for the libxml2 user:

      +
    • 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.
    • +
    • One just need to make sure that when using chars outside the ASCII set, + the values has been properly converted to UTF-8
    • +

    How is it implemented ?

    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:

      +
    1. 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
    2. +
    3. 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.
    4. +
    5. 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: +
      ~/XML -> ./xmllint err.xml 
      +err.xml:1: error: Input is not proper UTF-8, indicate encoding !
      +<très>là </très>
      +   ^
      +err.xml:1: error: Bytes: 0xE8 0x73 0x3E 0x6C
      +<très>là </très>
      +   ^
      +
    6. +
    7. 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: +
      ~/XML -> ./xmllint err2.xml 
      +err2.xml:1: error: Unsupported encoding UnsupportedEnc
      +<?xml version="1.0" encoding="UnsupportedEnc"?>
      +                                             ^
      +
    8. +
    9. 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).
    10. +
    11. The result (when using DOM) is an internal form completely in UTF-8 + with just an encoding information on the document node.
    12. +

    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:

      +
    1. 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, +

      otherwise everything is written in the internal form, i.e. UTF-8

      +
    2. +
    3. 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
    4. +
    5. 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.
    6. +
    7. 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 &#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
    8. +

    Here are a few examples based on the same test document and assumin a +terminal using ISO-8859-1 as the text encoding:

    ~/XML -> ./xmllint isolat1 
    +<?xml version="1.0" encoding="ISO-8859-1"?>
    +<très>là</très>
    +~/XML -> ./xmllint --encode UTF-8 isolat1 
    +<?xml version="1.0" encoding="UTF-8"?>
    +<très>là  </très>
    +~/XML -> 

    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 <meta> tag under the <head>, +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).

    Default supported encodings

    libxml2 has a set of default converters for the following encodings +(located in encoding.c):

      +
    1. UTF-8 is supported by default (null handlers)
    2. +
    3. UTF-16, both little and big endian
    4. +
    5. ISO-Latin-1 (ISO-8859-1) covering most western languages
    6. +
    7. ASCII, useful mostly for saving
    8. +
    9. HTML, a specific handler for the conversion of UTF-8 to ASCII with HTML + predefined entities like &copy; for the Copyright sign.
    10. +

    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.

    To convert from the UTF-8 values returned from the API to another encoding +then it is possible to use the function provided from the encoding module like UTF8Toisolat1, or use the +POSIX iconv() +API directly.

    Encoding aliases

    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:

      +
    • int xmlAddEncodingAlias(const char *name, const char *alias);
    • +
    • int xmlDelEncodingAlias(const char *alias);
    • +
    • const char * xmlGetEncodingAlias(const char *alias);
    • +
    • void xmlCleanupEncodingAliases(void);
    • +

    How to extend the existing support

    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.

    Daniel Veillard

    diff --git a/doc/entities.html b/doc/entities.html new file mode 100644 index 0000000..f9bcc4e --- /dev/null +++ b/doc/entities.html @@ -0,0 +1,64 @@ + + +Entities or no entities
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    The XML C parser and toolkit of Gnome

    Entities or no entities

    Developer Menu
    API Indexes
    Related links

    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:

    1 <?xml version="1.0"?>
    +2 <!DOCTYPE EXAMPLE SYSTEM "example.dtd" [
    +3 <!ENTITY xml "Extensible Markup Language">
    +4 ]>
    +5 <EXAMPLE>
    +6    &xml;
    +7 </EXAMPLE>

    Line 3 declares the xml entity. Line 6 uses the xml entity, by prefixing +its name with '&' 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: +&lt; for the character '<', &gt; +for the character '>', &apos; for the character ''', +&quot; for the character '"', and +&amp; for the character '&'.

    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 xmlSubstituteEntitiesDefault() +function allows you to check and change the behaviour, which is to not +substitute entities by default.

    Here is the DOM tree built by libxml2 for the previous document in the +default case:

    /gnome/src/gnome-xml -> ./xmllint --debug test/ent1
    +DOCUMENT
    +version=1.0
    +   ELEMENT EXAMPLE
    +     TEXT
    +     content=
    +     ENTITY_REF
    +       INTERNAL_GENERAL_ENTITY xml
    +       content=Extensible Markup Language
    +     TEXT
    +     content=

    And here is the result when substituting entities:

    /gnome/src/gnome-xml -> ./tester --debug --noent test/ent1
    +DOCUMENT
    +version=1.0
    +   ELEMENT EXAMPLE
    +     TEXT
    +     content=     Extensible Markup Language

    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.

    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).

    WARNING: 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.

    Daniel Veillard

    diff --git a/doc/epatents.png b/doc/epatents.png new file mode 100644 index 0000000..6cd3a13 Binary files /dev/null and b/doc/epatents.png differ diff --git a/doc/example.html b/doc/example.html new file mode 100644 index 0000000..50668bf --- /dev/null +++ b/doc/example.html @@ -0,0 +1,187 @@ + + +A real example
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    The XML C parser and toolkit of Gnome

    A real example

    Developer Menu
    API Indexes
    Related links

    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 XML encoded jobs +base:

    <?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>

    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.

    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:

    /*
    + * 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->xmlChildrenNode;
    +    while (cur != NULL) {
    +        if ((!strcmp(cur->name, "Person")) && (cur->ns == ns))
    +            ret->name = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
    +        if ((!strcmp(cur->name, "Email")) && (cur->ns == ns))
    +            ret->email = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
    +        cur = cur->next;
    +    }
    +
    +    return(ret);
    +}

    Here are a couple of things to notice:

      +
    • 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.
    • +
    • The two arguments of type xmlDocPtr and xmlNsPtr, + 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->ns == ns).
    • +
    • To retrieve text and attributes value, you can use the function + xmlNodeListGetString to gather all the text and entity reference + nodes generated by the DOM output and produce an single text string.
    • +

    Here is another piece of code used to parse another level of the +structure:

    #include <libxml/tree.h>
    +/*
    + * 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->xmlChildrenNode;
    +    while (cur != NULL) {
    +        
    +        if ((!strcmp(cur->name, "Project")) && (cur->ns == ns)) {
    +            ret->projectID = xmlGetProp(cur, "ID");
    +            if (ret->projectID == NULL) {
    +                fprintf(stderr, "Project has no ID\n");
    +            }
    +        }
    +        if ((!strcmp(cur->name, "Application")) && (cur->ns == ns))
    +            ret->application = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
    +        if ((!strcmp(cur->name, "Category")) && (cur->ns == ns))
    +            ret->category = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
    +        if ((!strcmp(cur->name, "Contact")) && (cur->ns == ns))
    +            ret->contact = parsePerson(doc, ns, cur);
    +        cur = cur->next;
    +    }
    +
    +    return(ret);
    +}

    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 :-)

    Feel free to use the code for the full C +parsing example as a template, it is also available with Makefile in the +Gnome SVN base under libxml2/example

    Daniel Veillard

    diff --git a/doc/examples/Makefile.am b/doc/examples/Makefile.am new file mode 100644 index 0000000..57af9c2 --- /dev/null +++ b/doc/examples/Makefile.am @@ -0,0 +1,135 @@ +## +## This file is auto-generated by index.py +## DO NOT EDIT !!! +## + +AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include -I$(srcdir)/include +AM_CFLAGS = $(THREAD_CFLAGS) $(Z_CFLAGS) +LDADD = $(RDL_LIBS) $(STATIC_BINARIES) $(top_builddir)/libxml2.la $(THREAD_LIBS) $(Z_LIBS) $(ICONV_LIBS) -lm $(WIN32_EXTRA_LIBADD) + +CLEANFILES = *.tmp + +if REBUILD_DOCS +rebuild: examples.xml index.html +.PHONY: rebuild + +examples.xml: index.py $(noinst_PROGRAMS:=.c) + cd $(srcdir) && $(PYTHON) index.py + $(MAKE) Makefile + +index.html: examples.xml examples.xsl + cd $(srcdir) && xsltproc examples.xsl examples.xml && echo "Rebuilt web page" + -cd $(srcdir) && xmllint --valid --noout index.html +endif + +install-data-local: + $(MKDIR_P) $(DESTDIR)$(HTML_DIR) + -$(INSTALL) -m 0644 $(srcdir)/*.html $(srcdir)/*.c $(srcdir)/*.xml $(srcdir)/*.xsl $(srcdir)/*.res $(DESTDIR)$(HTML_DIR) + +clean-local: + test -f Makefile.am || rm -f test?.xml + +EXTRA_DIST = \ + examples.xml \ + examples.xsl \ + index.html \ + index.py \ + io1.res \ + io2.res \ + reader1.res \ + reader3.res \ + reader4.res \ + test1.xml \ + test2.xml \ + test3.xml \ + tree1.res \ + tree2.res \ + tst.xml \ + writer.xml \ + xpath1.res \ + xpath2.res + +noinst_PROGRAMS = \ + io1 \ + io2 \ + parse1 \ + parse2 \ + parse3 \ + parse4 \ + reader1 \ + reader2 \ + reader3 \ + reader4 \ + testWriter \ + tree1 \ + tree2 \ + xpath1 \ + xpath2 + +io1_SOURCES = io1.c + +io2_SOURCES = io2.c + +parse1_SOURCES = parse1.c + +parse2_SOURCES = parse2.c + +parse3_SOURCES = parse3.c + +parse4_SOURCES = parse4.c + +reader1_SOURCES = reader1.c + +reader2_SOURCES = reader2.c + +reader3_SOURCES = reader3.c + +reader4_SOURCES = reader4.c + +testWriter_SOURCES = testWriter.c + +tree1_SOURCES = tree1.c + +tree2_SOURCES = tree2.c + +xpath1_SOURCES = xpath1.c + +xpath2_SOURCES = xpath2.c + +valgrind: + $(MAKE) CHECKER='valgrind' tests + +tests: $(noinst_PROGRAMS) + test -f Makefile.am || test -f test1.xml || $(LN_S) $(srcdir)/test?.xml . + @(echo '## examples regression tests') + @(echo > .memdump) + $(CHECKER) ./io1 > io1.tmp && diff io1.tmp $(srcdir)/io1.res + @grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0 + $(CHECKER) ./io2 > io2.tmp && diff io2.tmp $(srcdir)/io2.res + @grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0 + $(CHECKER) ./parse1 test1.xml + @grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0 + $(CHECKER) ./parse2 test2.xml + @grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0 + $(CHECKER) ./parse3 + @grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0 + $(CHECKER) ./parse4 test3.xml + @grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0 + $(CHECKER) ./reader1 test2.xml > reader1.tmp && diff reader1.tmp $(srcdir)/reader1.res + @grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0 + $(CHECKER) ./reader2 test2.xml > reader1.tmp && diff reader1.tmp $(srcdir)/reader1.res + @grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0 + $(CHECKER) ./reader3 > reader3.tmp && diff reader3.tmp $(srcdir)/reader3.res + @grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0 + $(CHECKER) ./reader4 test1.xml test2.xml test3.xml > reader4.tmp && diff reader4.tmp $(srcdir)/reader4.res + @grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0 + $(CHECKER) ./testWriter && for i in 1 2 3 4 ; do diff $(srcdir)/writer.xml writer$$i.tmp || break ; done + @grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0 + $(CHECKER) ./tree1 test2.xml > tree1.tmp && diff tree1.tmp $(srcdir)/tree1.res + @grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0 + $(CHECKER) ./tree2 > tree2.tmp && diff tree2.tmp $(srcdir)/tree2.res + @grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0 + $(CHECKER) ./xpath1 test3.xml '//child2' > xpath1.tmp && diff xpath1.tmp $(srcdir)/xpath1.res + @grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0 + $(CHECKER) ./xpath2 test3.xml '//discarded' discarded > xpath2.tmp && diff xpath2.tmp $(srcdir)/xpath2.res + @grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0 diff --git a/doc/examples/examples.xml b/doc/examples/examples.xml new file mode 100644 index 0000000..28929cc --- /dev/null +++ b/doc/examples/examples.xml @@ -0,0 +1,751 @@ + + + Evaluate XPath expression and prints result node set. + Shows how to evaluate XPath expression and register known namespaces in XPath context. + xpath1 <xml-file> <xpath-expr> [<known-ns-list>] + xpath1 test3.xml '//child2' > xpath1.tmp && diff xpath1.tmp $(srcdir)/xpath1.res + Aleksey Sanin + see Copyright for the status of this software. +
    XPath
    + + <libxml/parser.h> + <libxml/xpath.h> + <libxml/xpathInternals.h> + <libxml/tree.h> + + + + + + + + + + + + + + + + + + + + + + + + +
    + + Parse an XML document in memory to a tree and free it + Demonstrate the use of xmlReadMemory() to read an XML file into a tree and and xmlFreeDoc() to free the resulting tree + parse3 + parse3 + Daniel Veillard + see Copyright for the status of this software. +
    Parsing
    + + <libxml/tree.h> + <libxml/parser.h> + + + + + + + + + +
    + + Parse and validate an XML file with an xmlReader + 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.) + reader2 <valid_xml_filename> + reader2 test2.xml > reader1.tmp && diff reader1.tmp $(srcdir)/reader1.res + Daniel Veillard + see Copyright for the status of this software. +
    xmlReader
    + + <libxml/xmlreader.h> + + + + + + + + + + + + + + + + + + + + + +
    + + Creates a tree + Shows how to create document, nodes and dump it to stdout or file. + tree2 <filename> -Default output: stdout + tree2 > tree2.tmp && diff tree2.tmp $(srcdir)/tree2.res + Lucas Brasilino <brasilino@recife.pe.gov.br> + see Copyright for the status of this software +
    Tree
    + + <libxml/tree.h> + <libxml/parser.h> + + + + + + + + + + + + + + + + +
    + + Example of custom Input/Output + 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. + io1 + io1 > io1.tmp && diff io1.tmp $(srcdir)/io1.res + Daniel Veillard + see Copyright for the status of this software. +
    InputOutput
    + + <libxml/parser.h> + <libxml/xmlIO.h> + <libxml/xinclude.h> + <libxml/tree.h> + + + + + + + + + + + + +
    + + Parse an XML document chunk by chunk to a tree and free it + Demonstrate the use of xmlCreatePushParserCtxt() and xmlParseChunk() to read an XML file progressively into a tree and and xmlFreeDoc() to free the resulting tree + parse4 test3.xml + parse4 test3.xml + Daniel Veillard + see Copyright for the status of this software. +
    Parsing
    + + <libxml/tree.h> + <libxml/parser.h> + + + + + + + + + + + + +
    + + Load a document, locate subelements with XPath, modify said elements and save the resulting document. + Shows how to make a full round-trip from a load/edit/save + xpath2 <xml-file> <xpath-expr> <new-value> + xpath2 test3.xml '//discarded' discarded > xpath2.tmp && diff xpath2.tmp $(srcdir)/xpath2.res + Aleksey Sanin and Daniel Veillard + see Copyright for the status of this software. +
    XPath
    + + <libxml/parser.h> + <libxml/xpath.h> + <libxml/xpathInternals.h> + <libxml/tree.h> + + + + + + + + + + + + + + + + +
    + + Output to char buffer + Demonstrate the use of xmlDocDumpMemory to output document to a character buffer + io2 + io2 > io2.tmp && diff io2.tmp $(srcdir)/io2.res + John Fleck + see Copyright for the status of this software. +
    InputOutput
    + + <libxml/parser.h> + + + + + + + + + + + +
    + + Parse an XML file with an xmlReader + 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.) + reader1 <filename> + reader1 test2.xml > reader1.tmp && diff reader1.tmp $(srcdir)/reader1.res + Daniel Veillard + see Copyright for the status of this software. +
    xmlReader
    + + <libxml/xmlreader.h> + + + + + + + + + + + + + + +
    + + Navigates a tree to print element names + 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. + tree1 filename_or_URL + tree1 test2.xml > tree1.tmp && diff tree1.tmp $(srcdir)/tree1.res + Dodji Seketeli + see Copyright for the status of this software. +
    Tree
    + + <libxml/tree.h> + <libxml/parser.h> + + + + + + +
    + + Show how to extract subdocuments with xmlReader + 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.) + reader3 + reader3 > reader3.tmp && diff reader3.tmp $(srcdir)/reader3.res + Daniel Veillard + see Copyright for the status of this software. +
    xmlReader
    + + <libxml/xmlreader.h> + + + + + + + + + + +
    + + Parse and validate an XML file to a tree and free the result + 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. + parse2 test2.xml + parse2 test2.xml + Daniel Veillard + see Copyright for the status of this software. +
    Parsing
    + + <libxml/tree.h> + <libxml/parser.h> + + + + + + + + +
    + + Parse an XML file to a tree and free it + Demonstrate the use of xmlReadFile() to read an XML file into a tree and and xmlFreeDoc() to free the resulting tree + parse1 test1.xml + parse1 test1.xml + Daniel Veillard + see Copyright for the status of this software. +
    Parsing
    + + <libxml/tree.h> + <libxml/parser.h> + + + + +
    + + Parse multiple XML files reusing an xmlReader + Demonstrate the use of xmlReaderForFile() and xmlReaderNewFile to parse XML files while reusing the reader object and parser context. (Note that the XMLReader functions require libxml2 version later than 2.6.) + reader4 <filename> [ filename ... ] + reader4 test1.xml test2.xml test3.xml > reader4.tmp && diff reader4.tmp $(srcdir)/reader4.res + Graham Bennett + see Copyright for the status of this software. +
    xmlReader
    + + <libxml/xmlreader.h> + + + + + + + + + +
    + + use various APIs for the xmlWriter + 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. + testWriter + testWriter && for i in 1 2 3 4 ; do diff $(srcdir)/writer.xml writer$$i.tmp || break ; done + Alfred Mickautsch + see Copyright for the status of this software. +
    xmlWriter
    + + <libxml/encoding.h> + <libxml/xmlwriter.h> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    +
    + + + + +
    +
    + + +
    +
    + + +
    +
    + + + + +
    +
    + +
    +
    +
    diff --git a/doc/examples/examples.xsl b/doc/examples/examples.xsl new file mode 100644 index 0000000..74aaaa2 --- /dev/null +++ b/doc/examples/examples.xsl @@ -0,0 +1,174 @@ + + + + + + ../ + Examples Menu + + +
    + + +
    + +
    + + + + +
  • +
    + + + + + +
  • line : Type from
  • +
    + + + + + +
  • line : Function from
  • +
    + + + + + +
  • line : Macro from
  • +
    + + + +

    :

    +

    +

    Includes:

    +
      + + + +
    +

    Uses:

    +
      + + + + +
    +

    Usage:

    +

    +

    Author:

    +
    + + +
  • :

    +
      + + + +
    • :
    • +
      +
    +
  • +
    + + +

    The examples are stored per section depending on the main focus + of the example:

    +
      + + + + +
    +

    Getting the compilation options and libraries dependancies needed +to generate binaries from the examples is best done on Linux/Unix by using +the xml2-config script which should have been installed as part of make +install step or when installing the libxml2 development package:

    +
    gcc -o example `xml2-config --cflags` example.c `xml2-config --libs`
    +
    + + + + +

    Examples

    + +
    +
    + + + Libxml2 set of examples + + + + + + + + + + + + + + + + +
    + + + + + +
    + + + + + + +
    + + + + +
    + + + + +
    + + +

    Daniel Veillard

    +
    +
    +
    +
    +
    + + +
    +
    + +
    diff --git a/doc/examples/index.html b/doc/examples/index.html new file mode 100644 index 0000000..c9314a3 --- /dev/null +++ b/doc/examples/index.html @@ -0,0 +1,14 @@ + + +Libxml2 set of examples
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    Libxml2 set of examples

    Examples Menu
    Related links

    The examples are stored per section depending on the main focus + of the example:

    • xmlWriter :

    • InputOutput :

      • io1.c: Example of custom Input/Output
      • io2.c: Output to char buffer
    • Tree :

      • tree2.c: Creates a tree
      • tree1.c: Navigates a tree to print element names
    • XPath :

      • xpath1.c: Evaluate XPath expression and prints result node set.
      • xpath2.c: Load a document, locate subelements with XPath, modify said elements and save the resulting document.
    • Parsing :

      • parse3.c: Parse an XML document in memory to a tree and free it
      • parse4.c: Parse an XML document chunk by chunk to a tree and free it
      • parse2.c: Parse and validate an XML file to a tree and free the result
      • parse1.c: Parse an XML file to a tree and free it
    • xmlReader :

      • reader2.c: Parse and validate an XML file with an xmlReader
      • reader1.c: Parse an XML file with an xmlReader
      • reader3.c: Show how to extract subdocuments with xmlReader
      • reader4.c: Parse multiple XML files reusing an xmlReader

    Getting the compilation options and libraries dependancies needed +to generate binaries from the examples is best done on Linux/Unix by using +the xml2-config script which should have been installed as part of make +install step or when installing the libxml2 development package:

    gcc -o example `xml2-config --cflags` example.c `xml2-config --libs`

    InputOutput Examples

    io1.c: Example of custom Input/Output

    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.

    Includes:

    Uses:

    Usage:

    io1

    Author: Daniel Veillard

    io2.c: Output to char buffer

    Demonstrate the use of xmlDocDumpMemory to output document to a character buffer

    Includes:

    Uses:

    Usage:

    io2

    Author: John Fleck

    Parsing Examples

    parse3.c: Parse an XML document in memory to a tree and free it

    Demonstrate the use of xmlReadMemory() to read an XML file into a tree and and xmlFreeDoc() to free the resulting tree

    Includes:

    Uses:

    Usage:

    parse3

    Author: Daniel Veillard

    parse4.c: Parse an XML document chunk by chunk to a tree and free it

    Demonstrate the use of xmlCreatePushParserCtxt() and xmlParseChunk() to read an XML file progressively into a tree and and xmlFreeDoc() to free the resulting tree

    Includes:

    Uses:

    Usage:

    parse4 test3.xml

    Author: Daniel Veillard

    parse2.c: Parse and validate an XML file to a tree and free the result

    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.

    Includes:

    Uses:

    Usage:

    parse2 test2.xml

    Author: Daniel Veillard

    parse1.c: Parse an XML file to a tree and free it

    Demonstrate the use of xmlReadFile() to read an XML file into a tree and and xmlFreeDoc() to free the resulting tree

    Includes:

    Uses:

    Usage:

    parse1 test1.xml

    Author: Daniel Veillard

    Tree Examples

    tree2.c: Creates a tree

    Shows how to create document, nodes and dump it to stdout or file.

    Includes:

    Uses:

    Usage:

    tree2 <filename> -Default output: stdout

    Author: Lucas Brasilino <brasilino@recife.pe.gov.br>

    tree1.c: Navigates a tree to print element names

    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.

    Includes:

    Uses:

    Usage:

    tree1 filename_or_URL

    Author: Dodji Seketeli

    XPath Examples

    xpath1.c: Evaluate XPath expression and prints result node set.

    Shows how to evaluate XPath expression and register known namespaces in XPath context.

    Includes:

    Uses:

    Usage:

    xpath1 <xml-file> <xpath-expr> [<known-ns-list>]

    Author: Aleksey Sanin

    xpath2.c: Load a document, locate subelements with XPath, modify said elements and save the resulting document.

    Shows how to make a full round-trip from a load/edit/save

    Includes:

    Uses:

    Usage:

    xpath2 <xml-file> <xpath-expr> <new-value>

    Author: Aleksey Sanin and Daniel Veillard

    xmlReader Examples

    reader2.c: Parse and validate an XML file with an xmlReader

    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.)

    Includes:

    Uses:

    Usage:

    reader2 <valid_xml_filename>

    Author: Daniel Veillard

    reader1.c: Parse an XML file with an xmlReader

    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.)

    Includes:

    Uses:

    Usage:

    reader1 <filename>

    Author: Daniel Veillard

    reader3.c: Show how to extract subdocuments with xmlReader

    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.)

    Includes:

    Uses:

    Usage:

    reader3

    Author: Daniel Veillard

    reader4.c: Parse multiple XML files reusing an xmlReader

    Demonstrate the use of xmlReaderForFile() and xmlReaderNewFile to parse XML files while reusing the reader object and parser context. (Note that the XMLReader functions require libxml2 version later than 2.6.)

    Includes:

    Uses:

    Usage:

    reader4 <filename> [ filename ... ]

    Author: Graham Bennett

    xmlWriter Examples

    testWriter.c: use various APIs for the xmlWriter

    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.

    Includes:

    Uses:

    Usage:

    testWriter

    Author: Alfred Mickautsch

    Daniel Veillard

    diff --git a/doc/examples/index.py b/doc/examples/index.py new file mode 100755 index 0000000..7e0efaa --- /dev/null +++ b/doc/examples/index.py @@ -0,0 +1,314 @@ +#!/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.insert(0, "..") +from apibuild import CParser, escape + +examples = [] +extras = ['examples.xsl', 'index.html', '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(" \n" % filename) + try: + synopsis = info['synopsis'] + output.write(" %s\n" % escape(synopsis)); + except: + print "Example %s lacks a synopsis description" % (filename) + try: + purpose = info['purpose'] + output.write(" %s\n" % escape(purpose)); + except: + print "Example %s lacks a purpose description" % (filename) + try: + usage = info['usage'] + output.write(" %s\n" % escape(usage)); + except: + print "Example %s lacks an usage description" % (filename) + try: + test = info['test'] + output.write(" %s\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(" %s\n" % escape(author)); + except: + print "Example %s lacks an author description" % (filename) + try: + copy = info['copy'] + output.write(" %s\n" % escape(copy)); + except: + print "Example %s lacks a copyright description" % (filename) + try: + section = info['section'] + output.write("
    %s
    \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(" %s\n" % ( + escape(topic), escape(str))) + output.write(" \n") + for include in idx.includes.keys(): + if include.find("libxml") != -1: + output.write(" %s\n" % (escape(include))) + output.write(" \n") + output.write(" \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(" \n") + output.write("
    \n") + + return idx + +def dump_symbols(output): + global symbols + + output.write(" \n") + keys = symbols.keys() + keys.sort() + for symbol in keys: + output.write(" \n" % (symbol)) + info = symbols[symbol] + i = 1 + while i < len(info): + output.write(" \n" % (info[i])) + i = i + 1 + output.write(" \n") + output.write(" \n") + +def dump_sections(output): + global sections + + output.write(" \n") + keys = sections.keys() + keys.sort() + for section in keys: + output.write("
    \n" % (section)) + info = sections[section] + i = 0 + while i < len(info): + output.write(" \n" % (info[i])) + i = i + 1 + output.write("
    \n") + output.write("
    \n") + +def dump_Makefile(): + for file in glob.glob('*.xml'): + extras.append(file) + for file in glob.glob('*.res'): + extras.append(file) + Makefile="""## +## This file is auto-generated by index.py +## DO NOT EDIT !!! +## + +AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include -I$(srcdir)/include +AM_CFLAGS = $(THREAD_CFLAGS) $(Z_CFLAGS) +LDADD = $(RDL_LIBS) $(STATIC_BINARIES) $(top_builddir)/libxml2.la $(THREAD_LIBS) $(Z_LIBS) $(ICONV_LIBS) -lm $(WIN32_EXTRA_LIBADD) + +CLEANFILES = *.tmp + +if REBUILD_DOCS +rebuild: examples.xml index.html +.PHONY: rebuild + +examples.xml: index.py $(noinst_PROGRAMS:=.c) + cd $(srcdir) && $(PYTHON) index.py + $(MAKE) Makefile + +index.html: examples.xml examples.xsl + cd $(srcdir) && xsltproc examples.xsl examples.xml && echo "Rebuilt web page" + -cd $(srcdir) && xmllint --valid --noout index.html +endif + +install-data-local: + $(MKDIR_P) $(DESTDIR)$(HTML_DIR) + -$(INSTALL) -m 0644 $(srcdir)/*.html $(srcdir)/*.c $(srcdir)/*.xml $(srcdir)/*.xsl $(srcdir)/*.res $(DESTDIR)$(HTML_DIR) + +clean-local: + test -f Makefile.am || rm -f test?.xml + +""" + examples.sort() + extras.sort() + tests.sort() + EXTRA_DIST="" + for extra in extras: + EXTRA_DIST = EXTRA_DIST + " \\\n\t" + extra + Makefile = Makefile + "EXTRA_DIST =%s\n\n" % (EXTRA_DIST) + noinst_PROGRAMS="" + for example in examples: + noinst_PROGRAMS = noinst_PROGRAMS + " \\\n\t" + example + Makefile = Makefile + "noinst_PROGRAMS =%s\n\n" % (noinst_PROGRAMS) + for example in examples: + Makefile = Makefile + "%s_SOURCES = %s.c\n\n" % (example, example) + Makefile = Makefile + "valgrind: \n\t$(MAKE) CHECKER='valgrind' tests\n\n" + Makefile = Makefile + "tests: $(noinst_PROGRAMS)\n" + Makefile = Makefile + "\ttest -f Makefile.am || test -f test1.xml || $(LN_S) $(srcdir)/test?.xml .\n" + Makefile = Makefile + "\t@(echo '## examples regression tests')\n" + Makefile = Makefile + "\t@(echo > .memdump)\n" + for test in tests: + Makefile = Makefile + "\t$(CHECKER) %s\n" % (test) + Makefile = Makefile + '\t@grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0\n' + 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 ... DEPRECATED +# # +# ignore = """.memdump +#Makefile.in +#Makefile +#""" +# for example in examples: +# ignore = ignore + "%s\n" % (example) +# try: +# old = open(".cvsignore", "r").read() +# if old != ignore: +# n = open(".cvsignore", "w").write(ignore) +# print "Updated .cvsignore" +# except: +# print "Failed to read or save .cvsignore" + +if __name__ == "__main__": + load_api() + output = open("examples.xml", "w") + output.write("\n") + + for file in glob.glob('*.c'): + parse(file, output) + examples.append(file[:-2]) + + dump_symbols(output) + dump_sections(output) + output.write("\n") + output.close() + dump_Makefile() + diff --git a/doc/examples/io1.c b/doc/examples/io1.c new file mode 100644 index 0000000..d077cd8 --- /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 $(srcdir)/io1.res + * author: Daniel Veillard + * copy: see Copyright for the status of this software. + */ + +#include +#include +#include +#include +#include +#include + +#ifdef LIBXML_XINCLUDE_ENABLED +static const char *result = "ab"; +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 = "\n\ +\n\ +

    List of people:

    \n\ + \n\ +
    \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 @@ + + +

    List of people:

    + ab +
    diff --git a/doc/examples/io2.c b/doc/examples/io2.c new file mode 100644 index 0000000..4676f4a --- /dev/null +++ b/doc/examples/io2.c @@ -0,0 +1,58 @@ +/** + * section: InputOutput + * synopsis: Output to char buffer + * purpose: Demonstrate the use of xmlDocDumpMemory + * to output document to a character buffer + * usage: io2 + * test: io2 > io2.tmp && diff io2.tmp $(srcdir)/io2.res + * author: John Fleck + * copy: see Copyright for the status of this software. + */ + +#include + +#if defined(LIBXML_TREE_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) +int +main(void) +{ + + xmlNodePtr n; + xmlDocPtr doc; + xmlChar *xmlbuff; + int buffersize; + + /* + * Create the document. + */ + doc = xmlNewDoc(BAD_CAST "1.0"); + n = xmlNewNode(NULL, BAD_CAST "root"); + xmlNodeSetContent(n, BAD_CAST "content"); + xmlDocSetRootElement(doc, n); + + /* + * Dump the document to a buffer and print it + * for demonstration purposes. + */ + xmlDocDumpFormatMemory(doc, &xmlbuff, &buffersize, 1); + printf("%s", (char *) xmlbuff); + + /* + * Free associated memory. + */ + xmlFree(xmlbuff); + xmlFreeDoc(doc); + + return (0); + +} +#else +#include + +int +main(void) +{ + fprintf(stderr, + "library not configured with tree and output support\n"); + return (1); +} +#endif diff --git a/doc/examples/io2.res b/doc/examples/io2.res new file mode 100644 index 0000000..8737b87 --- /dev/null +++ b/doc/examples/io2.res @@ -0,0 +1,2 @@ + +content 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 +#include +#include + +/** + * 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 +#include +#include + +/** + * 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/parse3.c b/doc/examples/parse3.c new file mode 100644 index 0000000..a2d3a40 --- /dev/null +++ b/doc/examples/parse3.c @@ -0,0 +1,60 @@ +/** + * section: Parsing + * synopsis: Parse an XML document in memory to a tree and free it + * purpose: Demonstrate the use of xmlReadMemory() to read an XML file + * into a tree and and xmlFreeDoc() to free the resulting tree + * usage: parse3 + * test: parse3 + * author: Daniel Veillard + * copy: see Copyright for the status of this software. + */ + +#include +#include +#include + +static const char *document = ""; + +/** + * example3Func: + * @content: the content of the document + * @length: the length in bytes + * + * Parse the in memory document and free the resulting tree + */ +static void +example3Func(const char *content, int length) { + xmlDocPtr doc; /* the resulting document tree */ + + /* + * The document being in memory, it have no base per RFC 2396, + * and the "noname.xml" argument will serve as its base. + */ + doc = xmlReadMemory(content, length, "noname.xml", NULL, 0); + if (doc == NULL) { + fprintf(stderr, "Failed to parse document\n"); + return; + } + xmlFreeDoc(doc); +} + +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 + + example3Func(document, 6); + + /* + * Cleanup function for the XML library. + */ + xmlCleanupParser(); + /* + * this is to debug memory for regression tests + */ + xmlMemoryDump(); + return(0); +} diff --git a/doc/examples/parse4.c b/doc/examples/parse4.c new file mode 100644 index 0000000..3e28056 --- /dev/null +++ b/doc/examples/parse4.c @@ -0,0 +1,143 @@ +/** + * section: Parsing + * synopsis: Parse an XML document chunk by chunk to a tree and free it + * purpose: Demonstrate the use of xmlCreatePushParserCtxt() and + * xmlParseChunk() to read an XML file progressively + * into a tree and and xmlFreeDoc() to free the resulting tree + * usage: parse4 test3.xml + * test: parse4 test3.xml + * author: Daniel Veillard + * copy: see Copyright for the status of this software. + */ + +#include +#include +#include + +#ifdef LIBXML_PUSH_ENABLED +static FILE *desc; + +/** + * readPacket: + * @mem: array to store the packet + * @size: the packet size + * + * read at most @size bytes from the document and store it in @mem + * + * Returns the number of bytes read + */ +static int +readPacket(char *mem, int size) { + int res; + + res = fread(mem, 1, size, desc); + return(res); +} + +/** + * example4Func: + * @filename: a filename or an URL + * + * Parse the resource and free the resulting tree + */ +static void +example4Func(const char *filename) { + xmlParserCtxtPtr ctxt; + char chars[4]; + xmlDocPtr doc; /* the resulting document tree */ + int res; + + /* + * Read a few first byte to check the input used for the + * encoding detection at the parser level. + */ + res = readPacket(chars, 4); + if (res <= 0) { + fprintf(stderr, "Failed to parse %s\n", filename); + return; + } + + /* + * Create a progressive parsing context, the 2 first arguments + * are not used since we want to build a tree and not use a SAX + * parsing interface. We also pass the first bytes of the document + * to allow encoding detection when creating the parser but this + * is optional. + */ + ctxt = xmlCreatePushParserCtxt(NULL, NULL, + chars, res, filename); + if (ctxt == NULL) { + fprintf(stderr, "Failed to create parser context !\n"); + return; + } + + /* + * loop on the input getting the document data, of course 4 bytes + * at a time is not realistic but allows to verify testing on small + * documents. + */ + while ((res = readPacket(chars, 4)) > 0) { + xmlParseChunk(ctxt, chars, res, 0); + } + + /* + * there is no more input, indicate the parsing is finished. + */ + xmlParseChunk(ctxt, chars, 0, 1); + + /* + * collect the document back and if it was wellformed + * and destroy the parser context. + */ + doc = ctxt->myDoc; + res = ctxt->wellFormed; + xmlFreeParserCtxt(ctxt); + + if (!res) { + fprintf(stderr, "Failed to parse %s\n", filename); + } + + /* + * since we don't use the document, destroy it now. + */ + 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 + + /* + * simulate a progressive parsing using the input file. + */ + desc = fopen(argv[1], "rb"); + if (desc != NULL) { + example4Func(argv[1]); + fclose(desc); + } else { + fprintf(stderr, "Failed to parse %s\n", argv[1]); + } + + /* + * Cleanup function for the XML library. + */ + xmlCleanupParser(); + /* + * this is to debug memory for regression tests + */ + xmlMemoryDump(); + return(0); +} +#else /* ! LIBXML_PUSH_ENABLED */ +int main(int argc, char **argv) { + fprintf(stderr, "Library not compiled with push parser support\n"); + return(1); +} +#endif diff --git a/doc/examples/reader1.c b/doc/examples/reader1.c new file mode 100644 index 0000000..e8a005a --- /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 + * test: reader1 test2.xml > reader1.tmp && diff reader1.tmp $(srcdir)/reader1.res + * author: Daniel Veillard + * copy: see Copyright for the status of this software. + */ + +#include +#include + +#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..043b137 --- /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 + * test: reader2 test2.xml > reader1.tmp && diff reader1.tmp $(srcdir)/reader1.res + * author: Daniel Veillard + * copy: see Copyright for the status of this software. + */ + +#include +#include + +#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..3eeb61f --- /dev/null +++ b/doc/examples/reader3.c @@ -0,0 +1,120 @@ +/** + * 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 $(srcdir)/reader3.res + * author: Daniel Veillard + * copy: see Copyright for the status of this software. + */ + +#include +#include + +#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_PATTERN_ENABLED) && defined(LIBXML_OUTPUT_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, "Reader, Pattern or output 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 @@ + + + content1 + + content2 + too + content3 + + content4 + + content5 + content6 + diff --git a/doc/examples/reader4.c b/doc/examples/reader4.c new file mode 100644 index 0000000..1289d0d --- /dev/null +++ b/doc/examples/reader4.c @@ -0,0 +1,122 @@ +/** + * section: xmlReader + * synopsis: Parse multiple XML files reusing an xmlReader + * purpose: Demonstrate the use of xmlReaderForFile() and + * xmlReaderNewFile to parse XML files while reusing the reader object + * and parser context. (Note that the XMLReader functions require + * libxml2 version later than 2.6.) + * usage: reader4 [ filename ... ] + * test: reader4 test1.xml test2.xml test3.xml > reader4.tmp && diff reader4.tmp $(srcdir)/reader4.res + * author: Graham Bennett + * copy: see Copyright for the status of this software. + */ + +#include +#include + +#ifdef LIBXML_READER_ENABLED + +static void processDoc(xmlTextReaderPtr readerPtr) { + int ret; + xmlDocPtr docPtr; + const xmlChar *URL; + + ret = xmlTextReaderRead(readerPtr); + while (ret == 1) { + ret = xmlTextReaderRead(readerPtr); + } + + /* + * One can obtain the document pointer to get insteresting + * information about the document like the URL, but one must also + * be sure to clean it up at the end (see below). + */ + docPtr = xmlTextReaderCurrentDoc(readerPtr); + if (NULL == docPtr) { + fprintf(stderr, "failed to obtain document\n"); + return; + } + + URL = docPtr->URL; + if (NULL == URL) { + fprintf(stderr, "Failed to obtain URL\n"); + } + + if (ret != 0) { + fprintf(stderr, "%s: Failed to parse\n", URL); + return; + } + + printf("%s: Processed ok\n", (const char *)URL); +} + +int main(int argc, char **argv) { + xmlTextReaderPtr readerPtr; + int i; + xmlDocPtr docPtr; + + if (argc < 2) + return(1); + + /* + * this initialises the library and check potential ABI mismatches + * between the version it was compiled for and the actual shared + * library used. + */ + LIBXML_TEST_VERSION + + /* + * Create a new reader for the first file and process the + * document. + */ + readerPtr = xmlReaderForFile(argv[1], NULL, 0); + if (NULL == readerPtr) { + fprintf(stderr, "%s: failed to create reader\n", argv[1]); + return(1); + } + processDoc(readerPtr); + + /* + * The reader can be reused for subsequent files. + */ + for (i=2; i < argc; ++i) { + xmlReaderNewFile(readerPtr, argv[i], NULL, 0); + if (NULL == readerPtr) { + fprintf(stderr, "%s: failed to create reader\n", argv[i]); + return(1); + } + processDoc(readerPtr); + } + + /* + * Since we've called xmlTextReaderCurrentDoc, we now have to + * clean up after ourselves. We only have to do this the last + * time, because xmlReaderNewFile calls xmlCtxtReset which takes + * care of it. + */ + docPtr = xmlTextReaderCurrentDoc(readerPtr); + if (docPtr != NULL) + xmlFreeDoc(docPtr); + + /* + * Clean up the reader. + */ + xmlFreeTextReader(readerPtr); + + /* + * Cleanup function for the XML library. + */ + xmlCleanupParser(); + /* + * this is to debug memory for regression tests + */ + xmlMemoryDump(); + return(0); +} + +#else +int main(void) { + fprintf(stderr, "xmlReader support not compiled in\n"); + exit(1); +} +#endif diff --git a/doc/examples/reader4.res b/doc/examples/reader4.res new file mode 100644 index 0000000..b793f82 --- /dev/null +++ b/doc/examples/reader4.res @@ -0,0 +1,3 @@ +test1.xml: Processed ok +test2.xml: Processed ok +test3.xml: Processed ok 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 @@ + 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 @@ + + + + + +]> + + + + + + 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 @@ + + + + + + + This text node must be discarded + + + + + content1 + + content2 + too + content3 + + content4 + + content5 + content6 + + This text node must be discarded + + + + This text node must be discarded + + This text node must be discarded + + This text node must be discarded + + + + This text node must be discarded + + + + diff --git a/doc/examples/testWriter.c b/doc/examples/testWriter.c new file mode 100644 index 0000000..f662f76 --- /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 $(srcdir)/writer.xml writer$$i.tmp || break ; done + * author: Alfred Mickautsch + * copy: see Copyright for the status of this software. + */ +#include +#include +#include +#include + +#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.tmp"); + + /* next, the memory version */ + testXmlwriterMemory("writer2.tmp"); + + /* next, the DOM version */ + testXmlwriterDoc("writer3.tmp"); + + /* next, the tree version */ + testXmlwriterTree("writer4.tmp"); + + /* + * 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 8859-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", 53535); + 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 ""); + 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 ""); + 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 8859-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", 53535); + 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 ""); + 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 ""); + 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 8859-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", 53535); + 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 ""); + 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 ""); + 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 8859-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", 53535); + 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 ""); + 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 ""); + 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 < 0) || (temp - size + 1)) { + if (ret < 0) { + 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..e6faefc --- /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 $(srcdir)/tree1.res + * author: Dodji Seketeli + * copy: see Copyright for the status of this software. + */ +#include +#include +#include + +#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 = xmlReadFile(argv[1], NULL, 0); + + if (doc == NULL) { + printf("error: could not parse file %s\n", argv[1]); + } + + /*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..1cd1abe --- /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 -Default output: stdout + * test: tree2 > tree2.tmp && diff tree2.tmp $(srcdir)/tree2.res + * author: Lucas Brasilino + * copy: see Copyright for the status of this software + */ + +#include +#include +#include + +#if defined(LIBXML_TREE_ENABLED) && defined(LIBXML_OUTPUT_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 @@ + + + + content of node 1 + + this node has attributes + other way to create content (which is also a node) + + + + + + + + + + + diff --git a/doc/examples/tst.xml b/doc/examples/tst.xml new file mode 100644 index 0000000..1cc6c95 --- /dev/null +++ b/doc/examples/tst.xml @@ -0,0 +1,7 @@ + + hello + + + goodbye + + 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 @@ + +
    00000535351010MüllerJörg
    <Test>
    10
    <Test 2>
    20
    This is a text.
    diff --git a/doc/examples/xpath1.c b/doc/examples/xpath1.c new file mode 100644 index 0000000..0a31650 --- /dev/null +++ b/doc/examples/xpath1.c @@ -0,0 +1,250 @@ +/** + * 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 [] + * test: xpath1 test3.xml '//child2' > xpath1.tmp && diff xpath1.tmp $(srcdir)/xpath1.res + * author: Aleksey Sanin + * copy: see Copyright for the status of this software. + */ +#include +#include +#include +#include + +#include +#include +#include +#include + +#if defined(LIBXML_XPATH_ENABLED) && defined(LIBXML_SAX1_ENABLED) + + +static 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. + */ +static void +usage(const char *name) { + assert(name); + + fprintf(stderr, "Usage: %s []\n", name); + fprintf(stderr, "where is a list of known namespaces\n"); + fprintf(stderr, "in \"= =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 + * "= =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 + * "= =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/examples/xpath1.res b/doc/examples/xpath1.res new file mode 100644 index 0000000..76af3a9 --- /dev/null +++ b/doc/examples/xpath1.res @@ -0,0 +1,5 @@ +Result (4 nodes): += element node "child2" += element node "child2" += element node "child2" += element node "child2" diff --git a/doc/examples/xpath2.c b/doc/examples/xpath2.c new file mode 100644 index 0000000..f604114 --- /dev/null +++ b/doc/examples/xpath2.c @@ -0,0 +1,190 @@ +/** + * section: XPath + * synopsis: Load a document, locate subelements with XPath, modify + * said elements and save the resulting document. + * purpose: Shows how to make a full round-trip from a load/edit/save + * usage: xpath2 + * test: xpath2 test3.xml '//discarded' discarded > xpath2.tmp && diff xpath2.tmp $(srcdir)/xpath2.res + * author: Aleksey Sanin and Daniel Veillard + * copy: see Copyright for the status of this software. + */ +#include +#include +#include +#include + +#include +#include +#include +#include + +#if defined(LIBXML_XPATH_ENABLED) && defined(LIBXML_SAX1_ENABLED) && \ + defined(LIBXML_OUTPUT_ENABLED) + + +static void usage(const char *name); +static int example4(const char *filename, const xmlChar * xpathExpr, + const xmlChar * value); +static void update_xpath_nodes(xmlNodeSetPtr nodes, const xmlChar * value); + + +int +main(int argc, char **argv) { + /* Parse command line and process file */ + if (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 (example4(argv[1], BAD_CAST argv[2], BAD_CAST argv[3])) { + 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. + */ +static void +usage(const char *name) { + assert(name); + + fprintf(stderr, "Usage: %s \n", name); +} + +/** + * example4: + * @filename: the input XML filename. + * @xpathExpr: the xpath expression for evaluation. + * @value: the new node content. + * + * Parses input XML file, evaluates XPath expression and update the nodes + * then print the result. + * + * Returns 0 on success and a negative value otherwise. + */ +static int +example4(const char* filename, const xmlChar* xpathExpr, const xmlChar* value) { + xmlDocPtr doc; + xmlXPathContextPtr xpathCtx; + xmlXPathObjectPtr xpathObj; + + assert(filename); + assert(xpathExpr); + assert(value); + + /* 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); + } + + /* 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); + } + + /* update selected nodes */ + update_xpath_nodes(xpathObj->nodesetval, value); + + + /* Cleanup of XPath data */ + xmlXPathFreeObject(xpathObj); + xmlXPathFreeContext(xpathCtx); + + /* dump the resulting document */ + xmlDocDump(stdout, doc); + + + /* free the document */ + xmlFreeDoc(doc); + + return(0); +} + +/** + * update_xpath_nodes: + * @nodes: the nodes set. + * @value: the new value for the node(s) + * + * Prints the @nodes content to @output. + */ +static void +update_xpath_nodes(xmlNodeSetPtr nodes, const xmlChar* value) { + int size; + int i; + + assert(value); + size = (nodes) ? nodes->nodeNr : 0; + + /* + * NOTE: the nodes are processed in reverse order, i.e. reverse document + * order because xmlNodeSetContent can actually free up descendant + * of the node and such nodes may have been selected too ! Handling + * in reverse order ensure that descendant are accessed first, before + * they get removed. Mixing XPath and modifications on a tree must be + * done carefully ! + */ + for(i = size - 1; i >= 0; i--) { + assert(nodes->nodeTab[i]); + + xmlNodeSetContent(nodes->nodeTab[i], value); + /* + * All the elements returned by an XPath query are pointers to + * elements from the tree *except* namespace nodes where the XPath + * semantic is different from the implementation in libxml2 tree. + * As a result when a returned node set is freed when + * xmlXPathFreeObject() is called, that routine must check the + * element type. But node from the returned set may have been removed + * by xmlNodeSetContent() resulting in access to freed data. + * This can be exercised by running + * valgrind xpath2 test3.xml '//discarded' discarded + * There is 2 ways around it: + * - make a copy of the pointers to the nodes from the result set + * then call xmlXPathFreeObject() and then modify the nodes + * or + * - remove the reference to the modified nodes from the node set + * as they are processed, if they are not namespace nodes. + */ + if (nodes->nodeTab[i]->type != XML_NAMESPACE_DECL) + nodes->nodeTab[i] = NULL; + } +} + +#else +int main(void) { + fprintf(stderr, "XPath support not compiled in\n"); + exit(1); +} +#endif diff --git a/doc/examples/xpath2.res b/doc/examples/xpath2.res new file mode 100644 index 0000000..4e89699 --- /dev/null +++ b/doc/examples/xpath2.res @@ -0,0 +1,30 @@ + + + + discarded + + This text node must be discarded + discarded + + content1 + + content2 + too + content3 + + content4 + + content5 + content6 + + This text node must be discarded + discarded + This text node must be discarded + + This text node must be discarded + + This text node must be discarded + discarded + This text node must be discarded + + diff --git a/doc/favicon.ico b/doc/favicon.ico new file mode 100644 index 0000000..912cb9f Binary files /dev/null and b/doc/favicon.ico differ diff --git a/doc/gnome2.png b/doc/gnome2.png new file mode 100644 index 0000000..4a16fb1 Binary files /dev/null and b/doc/gnome2.png differ diff --git a/doc/guidelines.html b/doc/guidelines.html new file mode 100644 index 0000000..af4a7b3 --- /dev/null +++ b/doc/guidelines.html @@ -0,0 +1,374 @@ + + + + + + + XML resources publication guidelines + + + +

    XML resources publication guidelines

    + +

    + +

    The goal of this document is to provide a set of guidelines and tips +helping the publication and deployment of XML resources for the GNOME project. However it is not tied to +GNOME and might be helpful more generally. I welcome feedback on this document.

    + +

    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:

    + +

    Table of contents:

    +
      +
    1. Design guidelines
    2. +
    3. Canonical URL
    4. +
    5. Catalog setup
    6. +
    7. Package integration
    8. +
    + +

    Design guidelines

    + +

    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:

    + +

    Reuse existing formats:

    + +

    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, DocBook 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.

    + +

    DTD rules:

    + +

    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:

    +
      +
    • use significant words for the element and attributes names.
    • +
    • 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.
    • +
    • 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: +
      <welcome>
      +  <msg xml:lang="en">hello</msg>
      +  <msg xml:lang="fr">bonjour</msg>
      +</welcome>
      +
    • +
    • 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.
    • +
    + +

    Versioning:

    + +

    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:

    +
      +
    • Make sure the instance contains a version number which will allow to + make backward compatibility easy. Something as simple as having a + version="1.0" on the root document of the instance is + sufficient.
    • +
    • 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.
    • +
    + +

    Other design parts:

    + +

    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.

    + +

    Namespace:

    + +

    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 XML namespace 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:

    + +

    "http://www.gnome.org/project/projectname/1.0/"

    + +

    An easy way to use them is to make them the default namespace on the +root element of the XML instance like:

    +
    <structure xmlns="http://www.gnome.org/project/projectname/1.0/">
    +  <data>
    +  ...
    +  </data>
    +</structure>
    + +

    In that document, structure and all descendant elements like data are in +the given namespace.

    + +

    Canonical URL

    + +

    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).

    + +

    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:

    +
    <!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
    + + + "/usr/share/xml/docbook/4.2/docbookx.dtd">
    + +

    But always reference the canonical URL for the DTD:

    +
    <!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
    + + + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
    + +

    Similarly, the document instance may reference the XSLT stylesheets needed to process it to +generate HTML, and the canonical URL should be used:

    +
    <?xml-stylesheet
    +  href="http://docbook.sourceforge.net/release/xsl/current/html/docbook.xsl"
    +  type="text/xsl"?>
    + +

    Defining the canonical URL for the resources needed should obey a few +simple rules similar to those used to design namespace names:

    +
      +
    • use a DNS name you know is associated to the project and will be + available on the long term
    • +
    • within that server space, reserve the right to the subtree where you + intend to keep those data
    • +
    • version the URL so that multiple concurrent versions of the resources + can be hosted simultaneously
    • +
    + +

    Catalog setup

    + +

    How catalogs work:

    + +

    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. XML Catalogs are +anchored in the root catalog (usually /etc/xml/catalog 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.

    + +

    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:

    + +

    Usual catalog setup:

    + +

    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 XHTML1 DTDs, only 3 items are added to +the root catalog:

    +
      <delegatePublic publicIdStartString="-//W3C//DTD XHTML 1.0"
    +                  catalog="file:///usr/share/sgml/xhtml1/xmlcatalog"/>
    +  <delegateSystem systemIdStartString="http://www.w3.org/TR/xhtml1/DTD"
    +                  catalog="file:///usr/share/sgml/xhtml1/xmlcatalog"/>
    +  <delegateURI uriStartString="http://www.w3.org/TR/xhtml1/DTD"
    +                  catalog="file:///usr/share/sgml/xhtml1/xmlcatalog"/>
    + +

    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 +/usr/share/sgml/xhtml1/xmlcatalog 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

    + +

    "-//W3C//DTD XHTML 1.0"

    + +

    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 "http://www.w3.org/TR/xhtml1/DTD" 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.

    + +

    A subcatalog example:

    + +

    Here is the complete subcatalog used for XHTML1:

    +
    <?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="-//W3C//DTD XHTML 1.0 Strict//EN"
    +          uri="xhtml1-20020801/DTD/xhtml1-strict.dtd"/>
    +  <public publicId="-//W3C//DTD XHTML 1.0 Transitional//EN"
    +          uri="xhtml1-20020801/DTD/xhtml1-transitional.dtd"/>
    +  <public publicId="-//W3C//DTD XHTML 1.0 Frameset//EN"
    +          uri="xhtml1-20020801/DTD/xhtml1-frameset.dtd"/>
    +  <rewriteSystem systemIdStartString="http://www.w3.org/TR/xhtml1/DTD"
    +          rewritePrefix="xhtml1-20020801/DTD"/>
    +  <rewriteURI uriStartString="http://www.w3.org/TR/xhtml1/DTD"
    +          rewritePrefix="xhtml1-20020801/DTD"/>
    +</catalog>
    + +

    There are a few things to notice:

    +
      +
    • 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).
    • +
    • 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
    • +
    • 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 + /usr/share/sgml/xhtml1/xmlcatalog/xhtml1-20020801/DTD/xhtml1-strict.dtd
    • +
    + +

    Those 5 rules are sufficient to cover all references to the resources held +at the Canonical URL for the XHTML1 DTDs.

    + +

    Package integration

    + +

    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:

    +
    %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
    + +

    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.

    + +

    Similarly, the script for the post-uninstall just remove the rules from the +catalog:

    +
    %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
    + +

    Note the test against $1, this is needed to not remove the delegate rules +in case of upgrade of the package.

    + +

    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.

    + +

    Daniel Veillard

    + +

    $Id$

    + +

    + + diff --git a/doc/help.html b/doc/help.html new file mode 100644 index 0000000..1f1df2a --- /dev/null +++ b/doc/help.html @@ -0,0 +1,26 @@ + + +How to help
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    The XML C parser and toolkit of Gnome

    How to help

    Main Menu
    Related links

    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 archives and the Gnome bug +database:

      +
    1. Provide patches when you find problems.
    2. +
    3. 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
    4. +
    5. Provide documentation fixes (either as patches to the code comments or + as HTML diffs).
    6. +
    7. Provide new documentations pieces (translations, examples, etc + ...).
    8. +
    9. Check the TODO file and try to close one of the items.
    10. +
    11. Take one of the points raised in the archive or the bug database and + provide a fix. Get in touch with me + before to avoid synchronization problems and check that the suggested + fix will fit in nicely :-)
    12. +

    Daniel Veillard

    diff --git a/doc/html/book1.html b/doc/html/book1.html new file mode 100644 index 0000000..42d71a6 --- /dev/null +++ b/doc/html/book1.html @@ -0,0 +1,13 @@ + + +Reference Manual for libxml2
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    Reference Manual for libxml2

    API Menu
    API Indexes
    Related links

    Table of Contents

    • DOCBparser: old DocBook SGML parser
    • HTMLparser: interface for an HTML 4.0 non-verifying parser
    • HTMLtree: specific APIs to process HTML tree, especially serialization
    • SAX: Old SAX version 1 handler, deprecated
    • SAX2: SAX2 parser interface used to build the DOM tree
    • c14n: Provide Canonical XML and Exclusive XML Canonicalization
    • catalog: interfaces to the Catalog handling system
    • chvalid: Unicode character range checking
    • debugXML: Tree debugging APIs
    • dict: string dictionary
    • encoding: interface for the encoding conversion functions
    • entities: interface for the XML entities handling
    • globals: interface for all global variables of the library
    • hash: Chained hash tables
    • list: lists interfaces
    • nanoftp: minimal FTP implementation
    • nanohttp: minimal HTTP implementation
    • parser: the core parser module
    • parserInternals: internals routines and limits exported by the parser.
    • pattern: pattern expression handling
    • relaxng: implementation of the Relax-NG validation
    • schemasInternals: internal interfaces for XML Schemas
    • schematron: XML Schemastron implementation
    • threads: interfaces for thread handling
    • tree: interfaces for tree manipulation
    • uri: library of generic URI related routines
    • valid: The DTD validation
    • xinclude: implementation of XInclude
    • xlink: unfinished XLink detection module
    • xmlIO: interface for the I/O interfaces used by the parser
    • xmlautomata: API to build regexp automata
    • xmlerror: error handling
    • xmlexports: macros for marking symbols as exportable/importable.
    • xmlmemory: interface for the memory allocator
    • xmlmodule: dynamic module loading
    • xmlreader: the XMLReader implementation
    • xmlregexp: regular expressions handling
    • xmlsave: the XML document serializer
    • xmlschemas: incomplete XML Schemas structure implementation
    • xmlschemastypes: implementation of XML Schema Datatypes
    • xmlstring: set of routines to process strings
    • xmlunicode: Unicode character APIs
    • xmlversion: compile-time version informations
    • xmlwriter: text writing API for XML
    • xpath: XML Path Language implementation
    • xpathInternals: internal interfaces for XML Path Language implementation
    • xpointer: API to handle XML Pointers

    Daniel Veillard

    diff --git a/doc/html/home.png b/doc/html/home.png new file mode 100644 index 0000000..1700361 Binary files /dev/null and b/doc/html/home.png differ diff --git a/doc/html/index.html b/doc/html/index.html new file mode 100644 index 0000000..42d71a6 --- /dev/null +++ b/doc/html/index.html @@ -0,0 +1,13 @@ + + +Reference Manual for libxml2
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    Reference Manual for libxml2

    API Menu
    API Indexes
    Related links

    Table of Contents

    • DOCBparser: old DocBook SGML parser
    • HTMLparser: interface for an HTML 4.0 non-verifying parser
    • HTMLtree: specific APIs to process HTML tree, especially serialization
    • SAX: Old SAX version 1 handler, deprecated
    • SAX2: SAX2 parser interface used to build the DOM tree
    • c14n: Provide Canonical XML and Exclusive XML Canonicalization
    • catalog: interfaces to the Catalog handling system
    • chvalid: Unicode character range checking
    • debugXML: Tree debugging APIs
    • dict: string dictionary
    • encoding: interface for the encoding conversion functions
    • entities: interface for the XML entities handling
    • globals: interface for all global variables of the library
    • hash: Chained hash tables
    • list: lists interfaces
    • nanoftp: minimal FTP implementation
    • nanohttp: minimal HTTP implementation
    • parser: the core parser module
    • parserInternals: internals routines and limits exported by the parser.
    • pattern: pattern expression handling
    • relaxng: implementation of the Relax-NG validation
    • schemasInternals: internal interfaces for XML Schemas
    • schematron: XML Schemastron implementation
    • threads: interfaces for thread handling
    • tree: interfaces for tree manipulation
    • uri: library of generic URI related routines
    • valid: The DTD validation
    • xinclude: implementation of XInclude
    • xlink: unfinished XLink detection module
    • xmlIO: interface for the I/O interfaces used by the parser
    • xmlautomata: API to build regexp automata
    • xmlerror: error handling
    • xmlexports: macros for marking symbols as exportable/importable.
    • xmlmemory: interface for the memory allocator
    • xmlmodule: dynamic module loading
    • xmlreader: the XMLReader implementation
    • xmlregexp: regular expressions handling
    • xmlsave: the XML document serializer
    • xmlschemas: incomplete XML Schemas structure implementation
    • xmlschemastypes: implementation of XML Schema Datatypes
    • xmlstring: set of routines to process strings
    • xmlunicode: Unicode character APIs
    • xmlversion: compile-time version informations
    • xmlwriter: text writing API for XML
    • xpath: XML Path Language implementation
    • xpathInternals: internal interfaces for XML Path Language implementation
    • xpointer: API to handle XML Pointers

    Daniel Veillard

    diff --git a/doc/html/index.sgml b/doc/html/index.sgml new file mode 100644 index 0000000..f7fddd1 --- /dev/null +++ b/doc/html/index.sgml @@ -0,0 +1,609 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/html/left.png b/doc/html/left.png new file mode 100644 index 0000000..2d05b3d Binary files /dev/null and b/doc/html/left.png differ diff --git a/doc/html/libxml-DOCBparser.html b/doc/html/libxml-DOCBparser.html new file mode 100644 index 0000000..b00dad4 --- /dev/null +++ b/doc/html/libxml-DOCBparser.html @@ -0,0 +1,51 @@ + + +Module DOCBparser from libxml2
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    Module DOCBparser from libxml2

    API Menu
    API Indexes
    Related links

    This module is deprecated

    interface for a DocBook SGML non-verifying parser This code is DEPRECATED, and should not be used anymore.

    Table of Contents

    Typedef xmlParserInputPtr docbParserInputPtr
    +
    Typedef xmlParserCtxt docbParserCtxt
    +
    Typedef xmlParserCtxtPtr docbParserCtxtPtr
    +
    Typedef xmlParserInput docbParserInput
    +
    Typedef xmlDocPtr docbDocPtr
    +
    Typedef xmlSAXHandler docbSAXHandler
    +
    Typedef xmlSAXHandlerPtr docbSAXHandlerPtr
    +
    void	docbFreeParserCtxt		(docbParserCtxtPtr ctxt)
    +
    docbDocPtr	docbParseDoc		(xmlChar * cur, 
    const char * encoding)
    +
    docbParserCtxtPtr	docbCreateFileParserCtxt	(const char * filename, 
    const char * encoding)
    +
    docbDocPtr	docbSAXParseFile	(const char * filename, 
    const char * encoding,
    docbSAXHandlerPtr sax,
    void * userData)
    +
    docbDocPtr	docbSAXParseDoc		(xmlChar * cur, 
    const char * encoding,
    docbSAXHandlerPtr sax,
    void * userData)
    +
    docbParserCtxtPtr	docbCreatePushParserCtxt	(docbSAXHandlerPtr sax, 
    void * user_data,
    const char * chunk,
    int size,
    const char * filename,
    xmlCharEncoding enc)
    +
    int	docbEncodeEntities		(unsigned char * out, 
    int * outlen,
    const unsigned char * in,
    int * inlen,
    int quoteChar)
    +
    docbDocPtr	docbParseFile		(const char * filename, 
    const char * encoding)
    +
    int	docbParseDocument		(docbParserCtxtPtr ctxt)
    +
    int	docbParseChunk			(docbParserCtxtPtr ctxt, 
    const char * chunk,
    int size,
    int terminate)
    +

    Description

    +

    Function: docbFreeParserCtxt

    void	docbFreeParserCtxt		(docbParserCtxtPtr ctxt)
    +

    Free all the memory used by a parser context. However the parsed document in ctxt->myDoc is not freed.

    +
    ctxt:an SGML parser context

    Function: docbParseDoc

    docbDocPtr	docbParseDoc		(xmlChar * cur, 
    const char * encoding)
    +

    parse an SGML in-memory document and build a tree.

    +
    cur:a pointer to an array of xmlChar
    encoding:a free form C string describing the SGML document encoding, or NULL
    Returns:the resulting document tree

    Function: docbCreateFileParserCtxt

    docbParserCtxtPtr	docbCreateFileParserCtxt	(const char * filename, 
    const char * encoding)
    +

    Create a parser context for a file content. Automatic support for ZLIB/Compress compressed document is provided by default if found at compile-time.

    +
    filename:the filename
    encoding:the SGML document encoding, or NULL
    Returns:the new parser context or NULL

    Function: docbSAXParseFile

    docbDocPtr	docbSAXParseFile	(const char * filename, 
    const char * encoding,
    docbSAXHandlerPtr sax,
    void * userData)
    +

    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.

    +
    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.
    Returns:the resulting document tree

    Function: docbSAXParseDoc

    docbDocPtr	docbSAXParseDoc		(xmlChar * cur, 
    const char * encoding,
    docbSAXHandlerPtr sax,
    void * userData)
    +

    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.

    +
    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.
    Returns:the resulting document tree

    Function: docbCreatePushParserCtxt

    docbParserCtxtPtr	docbCreatePushParserCtxt	(docbSAXHandlerPtr sax, 
    void * user_data,
    const char * chunk,
    int size,
    const char * filename,
    xmlCharEncoding enc)
    +

    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.

    +
    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
    Returns:the new parser context or NULL

    Function: docbEncodeEntities

    int	docbEncodeEntities		(unsigned char * out, 
    int * outlen,
    const unsigned char * in,
    int * inlen,
    int quoteChar)
    +

    Take a block of UTF-8 chars in and try to convert it to an ASCII plus SGML entities block of chars out.

    +
    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.
    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.

    Function: docbParseFile

    docbDocPtr	docbParseFile		(const char * filename, 
    const char * encoding)
    +

    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.

    +
    filename:the filename
    encoding:a free form C string describing document encoding, or NULL
    Returns:the resulting document tree

    Function: docbParseDocument

    int	docbParseDocument		(docbParserCtxtPtr ctxt)
    +

    parse an SGML document (and build a tree if using the standard SAX interface).

    +
    ctxt:an SGML parser context
    Returns:0, -1 in case of error. the parser context is augmented as a result of the parsing.

    Function: docbParseChunk

    int	docbParseChunk			(docbParserCtxtPtr ctxt, 
    const char * chunk,
    int size,
    int terminate)
    +

    Parse a Chunk of memory

    +
    ctxt:an XML parser context
    chunk:an char array
    size:the size in byte of the chunk
    terminate:last chunk indicator
    Returns:zero if no error, the xmlParserErrors otherwise.

    Daniel Veillard

    diff --git a/doc/html/libxml-HTMLparser.html b/doc/html/libxml-HTMLparser.html new file mode 100644 index 0000000..f5f77af --- /dev/null +++ b/doc/html/libxml-HTMLparser.html @@ -0,0 +1,184 @@ + + +Module HTMLparser from libxml2
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    Module HTMLparser from libxml2

    API Menu
    API Indexes
    Related links

    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.

    Table of Contents

    #define htmlDefaultSubelement
    #define htmlElementAllowedHereDesc
    #define htmlRequiredAttrs
    Typedef xmlDocPtr htmlDocPtr
    +
    Structure htmlElemDesc
    struct _htmlElemDesc +
    Typedef htmlElemDesc * htmlElemDescPtr
    +
    Structure htmlEntityDesc
    struct _htmlEntityDesc +
    Typedef htmlEntityDesc * htmlEntityDescPtr
    +
    Typedef xmlNodePtr htmlNodePtr
    +
    Typedef xmlParserCtxt htmlParserCtxt
    +
    Typedef xmlParserCtxtPtr htmlParserCtxtPtr
    +
    Typedef xmlParserInput htmlParserInput
    +
    Typedef xmlParserInputPtr htmlParserInputPtr
    +
    Typedef xmlParserNodeInfo htmlParserNodeInfo
    +
    Enum htmlParserOption
    +
    Typedef xmlSAXHandler htmlSAXHandler
    +
    Typedef xmlSAXHandlerPtr htmlSAXHandlerPtr
    +
    Enum htmlStatus
    +
    int	UTF8ToHtml			(unsigned char * out, 
    int * outlen,
    const unsigned char * in,
    int * inlen)
    +
    htmlStatus	htmlAttrAllowed		(const htmlElemDesc * elt, 
    const xmlChar * attr,
    int legacy)
    +
    int	htmlAutoCloseTag		(htmlDocPtr doc, 
    const xmlChar * name,
    htmlNodePtr elem)
    +
    htmlParserCtxtPtr	htmlCreateMemoryParserCtxt	(const char * buffer, 
    int size)
    +
    htmlParserCtxtPtr	htmlCreatePushParserCtxt	(htmlSAXHandlerPtr sax, 
    void * user_data,
    const char * chunk,
    int size,
    const char * filename,
    xmlCharEncoding enc)
    +
    htmlDocPtr	htmlCtxtReadDoc		(htmlParserCtxtPtr ctxt, 
    const xmlChar * cur,
    const char * URL,
    const char * encoding,
    int options)
    +
    htmlDocPtr	htmlCtxtReadFd		(htmlParserCtxtPtr ctxt, 
    int fd,
    const char * URL,
    const char * encoding,
    int options)
    +
    htmlDocPtr	htmlCtxtReadFile	(htmlParserCtxtPtr ctxt, 
    const char * filename,
    const char * encoding,
    int options)
    +
    htmlDocPtr	htmlCtxtReadIO		(htmlParserCtxtPtr ctxt, 
    xmlInputReadCallback ioread,
    xmlInputCloseCallback ioclose,
    void * ioctx,
    const char * URL,
    const char * encoding,
    int options)
    +
    htmlDocPtr	htmlCtxtReadMemory	(htmlParserCtxtPtr ctxt, 
    const char * buffer,
    int size,
    const char * URL,
    const char * encoding,
    int options)
    +
    void	htmlCtxtReset			(htmlParserCtxtPtr ctxt)
    +
    int	htmlCtxtUseOptions		(htmlParserCtxtPtr ctxt, 
    int options)
    +
    int	htmlElementAllowedHere		(const htmlElemDesc * parent, 
    const xmlChar * elt)
    +
    htmlStatus	htmlElementStatusHere	(const htmlElemDesc * parent, 
    const htmlElemDesc * elt)
    +
    int	htmlEncodeEntities		(unsigned char * out, 
    int * outlen,
    const unsigned char * in,
    int * inlen,
    int quoteChar)
    +
    const htmlEntityDesc *	htmlEntityLookup	(const xmlChar * name)
    +
    const htmlEntityDesc *	htmlEntityValueLookup	(unsigned int value)
    +
    void	htmlFreeParserCtxt		(htmlParserCtxtPtr ctxt)
    +
    int	htmlHandleOmittedElem		(int val)
    +
    int	htmlIsAutoClosed		(htmlDocPtr doc, 
    htmlNodePtr elem)
    +
    int	htmlIsScriptAttribute		(const xmlChar * name)
    +
    htmlParserCtxtPtr	htmlNewParserCtxt	(void)
    +
    htmlStatus	htmlNodeStatus		(const htmlNodePtr node, 
    int legacy)
    +
    int	htmlParseCharRef		(htmlParserCtxtPtr ctxt)
    +
    int	htmlParseChunk			(htmlParserCtxtPtr ctxt, 
    const char * chunk,
    int size,
    int terminate)
    +
    htmlDocPtr	htmlParseDoc		(xmlChar * cur, 
    const char * encoding)
    +
    int	htmlParseDocument		(htmlParserCtxtPtr ctxt)
    +
    void	htmlParseElement		(htmlParserCtxtPtr ctxt)
    +
    const htmlEntityDesc *	htmlParseEntityRef	(htmlParserCtxtPtr ctxt, 
    const xmlChar ** str)
    +
    htmlDocPtr	htmlParseFile		(const char * filename, 
    const char * encoding)
    +
    htmlDocPtr	htmlReadDoc		(const xmlChar * cur, 
    const char * URL,
    const char * encoding,
    int options)
    +
    htmlDocPtr	htmlReadFd		(int fd, 
    const char * URL,
    const char * encoding,
    int options)
    +
    htmlDocPtr	htmlReadFile		(const char * filename, 
    const char * encoding,
    int options)
    +
    htmlDocPtr	htmlReadIO		(xmlInputReadCallback ioread, 
    xmlInputCloseCallback ioclose,
    void * ioctx,
    const char * URL,
    const char * encoding,
    int options)
    +
    htmlDocPtr	htmlReadMemory		(const char * buffer, 
    int size,
    const char * URL,
    const char * encoding,
    int options)
    +
    htmlDocPtr	htmlSAXParseDoc		(xmlChar * cur, 
    const char * encoding,
    htmlSAXHandlerPtr sax,
    void * userData)
    +
    htmlDocPtr	htmlSAXParseFile	(const char * filename, 
    const char * encoding,
    htmlSAXHandlerPtr sax,
    void * userData)
    +
    const htmlElemDesc *	htmlTagLookup	(const xmlChar * tag)
    +

    Description

    +

    Macro: htmlDefaultSubelement

    #define htmlDefaultSubelement

    Returns the default subelement for this element

    +

    Macro: htmlElementAllowedHereDesc

    #define htmlElementAllowedHereDesc

    Checks whether an HTML element description may be a direct child of the specified element. Returns 1 if allowed; 0 otherwise.

    +

    Macro: htmlRequiredAttrs

    #define htmlRequiredAttrs

    Returns the attributes required for the specified element.

    +

    Structure htmlElemDesc

    Structure htmlElemDesc
    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 +}

    Structure htmlEntityDesc

    Structure htmlEntityDesc
    struct _htmlEntityDesc { + unsigned int value : the UNICODE value for the character + const char * name : The entity name + const char * desc : the description +}

    Enum htmlParserOption

    Enum htmlParserOption {
    +    HTML_PARSE_RECOVER = 1 : Relaxed parsing
    +    HTML_PARSE_NODEFDTD = 4 : do not default a doctype if not found
    +    HTML_PARSE_NOERROR = 32 : suppress error reports
    +    HTML_PARSE_NOWARNING = 64 : suppress warning reports
    +    HTML_PARSE_PEDANTIC = 128 : pedantic error reporting
    +    HTML_PARSE_NOBLANKS = 256 : remove blank nodes
    +    HTML_PARSE_NONET = 2048 : Forbid network access
    +    HTML_PARSE_NOIMPLIED = 8192 : Do not add implied html/body... elements
    +    HTML_PARSE_COMPACT = 65536 : compact small text nodes
    +    HTML_PARSE_IGNORE_ENC = 2097152 : ignore internal document encoding hint
    +}
    +

    Enum htmlStatus

    Enum htmlStatus {
    +    HTML_NA = 0 : something we don't check at all
    +    HTML_INVALID = 1
    +    HTML_DEPRECATED = 2
    +    HTML_VALID = 4
    +    HTML_REQUIRED = 12 : VALID bit set so ( & HTML_VALID ) is TRUE
    +}
    +

    Function: UTF8ToHtml

    int	UTF8ToHtml			(unsigned char * out, 
    int * outlen,
    const unsigned char * in,
    int * inlen)
    +

    Take a block of UTF-8 chars in and try to convert it to an ASCII plus HTML entities block of chars out.

    +
    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
    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.

    Function: htmlAttrAllowed

    htmlStatus	htmlAttrAllowed		(const htmlElemDesc * elt, 
    const xmlChar * attr,
    int legacy)
    +

    Checks whether an attribute is valid for an element Has full knowledge of Required and Deprecated attributes

    +
    elt:HTML element
    attr:HTML attribute
    legacy:whether to allow deprecated attributes
    Returns:one of HTML_REQUIRED, HTML_VALID, HTML_DEPRECATED, HTML_INVALID

    Function: htmlAutoCloseTag

    int	htmlAutoCloseTag		(htmlDocPtr doc, 
    const xmlChar * name,
    htmlNodePtr elem)
    +

    The HTML DTD allows a tag to implicitly close other tags. The list is kept in htmlStartClose array. This function checks if the element or one of it's children would autoclose the given tag.

    +
    doc:the HTML document
    name:The tag name
    elem:the HTML element
    Returns:1 if autoclose, 0 otherwise

    Function: htmlCreateMemoryParserCtxt

    htmlParserCtxtPtr	htmlCreateMemoryParserCtxt	(const char * buffer, 
    int size)
    +

    Create a parser context for an HTML in-memory document.

    +
    buffer:a pointer to a char array
    size:the size of the array
    Returns:the new parser context or NULL

    Function: htmlCreatePushParserCtxt

    htmlParserCtxtPtr	htmlCreatePushParserCtxt	(htmlSAXHandlerPtr sax, 
    void * user_data,
    const char * chunk,
    int size,
    const char * filename,
    xmlCharEncoding enc)
    +

    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.

    +
    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
    Returns:the new parser context or NULL

    Function: htmlCtxtReadDoc

    htmlDocPtr	htmlCtxtReadDoc		(htmlParserCtxtPtr ctxt, 
    const xmlChar * cur,
    const char * URL,
    const char * encoding,
    int options)
    +

    parse an XML in-memory document and build a tree. This reuses the existing @ctxt parser context

    +
    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)
    Returns:the resulting document tree

    Function: htmlCtxtReadFd

    htmlDocPtr	htmlCtxtReadFd		(htmlParserCtxtPtr ctxt, 
    int fd,
    const char * URL,
    const char * encoding,
    int options)
    +

    parse an XML from a file descriptor and build a tree. This reuses the existing @ctxt parser context

    +
    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)
    Returns:the resulting document tree

    Function: htmlCtxtReadFile

    htmlDocPtr	htmlCtxtReadFile	(htmlParserCtxtPtr ctxt, 
    const char * filename,
    const char * encoding,
    int options)
    +

    parse an XML file from the filesystem or the network. This reuses the existing @ctxt parser context

    +
    ctxt:an HTML parser context
    filename:a file or URL
    encoding:the document encoding, or NULL
    options:a combination of htmlParserOption(s)
    Returns:the resulting document tree

    Function: htmlCtxtReadIO

    htmlDocPtr	htmlCtxtReadIO		(htmlParserCtxtPtr ctxt, 
    xmlInputReadCallback ioread,
    xmlInputCloseCallback ioclose,
    void * ioctx,
    const char * URL,
    const char * encoding,
    int options)
    +

    parse an HTML document from I/O functions and source and build a tree. This reuses the existing @ctxt parser context

    +
    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)
    Returns:the resulting document tree

    Function: htmlCtxtReadMemory

    htmlDocPtr	htmlCtxtReadMemory	(htmlParserCtxtPtr ctxt, 
    const char * buffer,
    int size,
    const char * URL,
    const char * encoding,
    int options)
    +

    parse an XML in-memory document and build a tree. This reuses the existing @ctxt parser context

    +
    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)
    Returns:the resulting document tree

    Function: htmlCtxtReset

    void	htmlCtxtReset			(htmlParserCtxtPtr ctxt)
    +

    Reset a parser context

    +
    ctxt:an HTML parser context

    Function: htmlCtxtUseOptions

    int	htmlCtxtUseOptions		(htmlParserCtxtPtr ctxt, 
    int options)
    +

    Applies the options to the parser context

    +
    ctxt:an HTML parser context
    options:a combination of htmlParserOption(s)
    Returns:0 in case of success, the set of unknown or unimplemented options in case of error.

    Function: htmlElementAllowedHere

    int	htmlElementAllowedHere		(const htmlElemDesc * parent, 
    const xmlChar * elt)
    +

    Checks whether an HTML element may be a direct child of a parent element. Note - doesn't check for deprecated elements

    +
    parent:HTML parent element
    elt:HTML element
    Returns:1 if allowed; 0 otherwise.

    Function: htmlElementStatusHere

    htmlStatus	htmlElementStatusHere	(const htmlElemDesc * parent, 
    const htmlElemDesc * elt)
    +

    Checks whether an HTML element may be a direct child of a parent element. and if so whether it is valid or deprecated.

    +
    parent:HTML parent element
    elt:HTML element
    Returns:one of HTML_VALID, HTML_DEPRECATED, HTML_INVALID

    Function: htmlEncodeEntities

    int	htmlEncodeEntities		(unsigned char * out, 
    int * outlen,
    const unsigned char * in,
    int * inlen,
    int quoteChar)
    +

    Take a block of UTF-8 chars in and try to convert it to an ASCII plus HTML entities block of chars out.

    +
    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.
    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.

    Function: htmlEntityLookup

    const htmlEntityDesc *	htmlEntityLookup	(const xmlChar * name)
    +

    Lookup the given entity in EntitiesTable TODO: the linear scan is really ugly, an hash table is really needed.

    +
    name:the entity name
    Returns:the associated htmlEntityDescPtr if found, NULL otherwise.

    Function: htmlEntityValueLookup

    const htmlEntityDesc *	htmlEntityValueLookup	(unsigned int value)
    +

    Lookup the given entity in EntitiesTable TODO: the linear scan is really ugly, an hash table is really needed.

    +
    value:the entity's unicode value
    Returns:the associated htmlEntityDescPtr if found, NULL otherwise.

    Function: htmlFreeParserCtxt

    void	htmlFreeParserCtxt		(htmlParserCtxtPtr ctxt)
    +

    Free all the memory used by a parser context. However the parsed document in ctxt->myDoc is not freed.

    +
    ctxt:an HTML parser context

    Function: htmlHandleOmittedElem

    int	htmlHandleOmittedElem		(int val)
    +

    Set and return the previous value for handling HTML omitted tags.

    +
    val:int 0 or 1
    Returns:the last value for 0 for no handling, 1 for auto insertion.

    Function: htmlIsAutoClosed

    int	htmlIsAutoClosed		(htmlDocPtr doc, 
    htmlNodePtr elem)
    +

    The HTML DTD allows a tag to implicitly close other tags. The list is kept in htmlStartClose array. This function checks if a tag is autoclosed by one of it's child

    +
    doc:the HTML document
    elem:the HTML element
    Returns:1 if autoclosed, 0 otherwise

    Function: htmlIsScriptAttribute

    int	htmlIsScriptAttribute		(const xmlChar * name)
    +

    Check if an attribute is of content type Script

    +
    name:an attribute name
    Returns:1 is the attribute is a script 0 otherwise

    Function: htmlNewParserCtxt

    htmlParserCtxtPtr	htmlNewParserCtxt	(void)
    +

    Allocate and initialize a new parser context.

    +
    Returns:the htmlParserCtxtPtr or NULL in case of allocation error

    Function: htmlNodeStatus

    htmlStatus	htmlNodeStatus		(const htmlNodePtr node, 
    int legacy)
    +

    Checks whether the tree node is valid. Experimental (the author only uses the HTML enhancements in a SAX parser)

    +
    node:an htmlNodePtr in a tree
    legacy:whether to allow deprecated elements (YES is faster here for Element nodes)
    Returns: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)

    Function: htmlParseCharRef

    int	htmlParseCharRef		(htmlParserCtxtPtr ctxt)
    +

    parse Reference declarations [66] CharRef ::= '&#' [0-9]+ ';' | '&#x' [0-9a-fA-F]+ ';'

    +
    ctxt:an HTML parser context
    Returns:the value parsed (as an int)

    Function: htmlParseChunk

    int	htmlParseChunk			(htmlParserCtxtPtr ctxt, 
    const char * chunk,
    int size,
    int terminate)
    +

    Parse a Chunk of memory

    +
    ctxt:an HTML parser context
    chunk:an char array
    size:the size in byte of the chunk
    terminate:last chunk indicator
    Returns:zero if no error, the xmlParserErrors otherwise.

    Function: htmlParseDoc

    htmlDocPtr	htmlParseDoc		(xmlChar * cur, 
    const char * encoding)
    +

    parse an HTML in-memory document and build a tree.

    +
    cur:a pointer to an array of xmlChar
    encoding:a free form C string describing the HTML document encoding, or NULL
    Returns:the resulting document tree

    Function: htmlParseDocument

    int	htmlParseDocument		(htmlParserCtxtPtr ctxt)
    +

    parse an HTML document (and build a tree if using the standard SAX interface).

    +
    ctxt:an HTML parser context
    Returns:0, -1 in case of error. the parser context is augmented as a result of the parsing.

    Function: htmlParseElement

    void	htmlParseElement		(htmlParserCtxtPtr ctxt)
    +

    parse an HTML element, this is highly recursive this is kept for compatibility with previous code versions [39] element ::= EmptyElemTag | STag content ETag [41] Attribute ::= Name Eq AttValue

    +
    ctxt:an HTML parser context

    Function: htmlParseEntityRef

    const htmlEntityDesc *	htmlParseEntityRef	(htmlParserCtxtPtr ctxt, 
    const xmlChar ** str)
    +

    parse an HTML ENTITY references [68] EntityRef ::= '&' Name ';'

    +
    ctxt:an HTML parser context
    str:location to store the entity name
    Returns:the associated htmlEntityDescPtr if found, or NULL otherwise, if non-NULL *str will have to be freed by the caller.

    Function: htmlParseFile

    htmlDocPtr	htmlParseFile		(const char * filename, 
    const char * encoding)
    +

    parse an HTML file and build a tree. Automatic support for ZLIB/Compress compressed document is provided by default if found at compile-time.

    +
    filename:the filename
    encoding:a free form C string describing the HTML document encoding, or NULL
    Returns:the resulting document tree

    Function: htmlReadDoc

    htmlDocPtr	htmlReadDoc		(const xmlChar * cur, 
    const char * URL,
    const char * encoding,
    int options)
    +

    parse an XML in-memory document and build a tree.

    +
    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)
    Returns:the resulting document tree

    Function: htmlReadFd

    htmlDocPtr	htmlReadFd		(int fd, 
    const char * URL,
    const char * encoding,
    int options)
    +

    parse an XML from a file descriptor and build a tree.

    +
    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)
    Returns:the resulting document tree

    Function: htmlReadFile

    htmlDocPtr	htmlReadFile		(const char * filename, 
    const char * encoding,
    int options)
    +

    parse an XML file from the filesystem or the network.

    +
    filename:a file or URL
    encoding:the document encoding, or NULL
    options:a combination of htmlParserOption(s)
    Returns:the resulting document tree

    Function: htmlReadIO

    htmlDocPtr	htmlReadIO		(xmlInputReadCallback ioread, 
    xmlInputCloseCallback ioclose,
    void * ioctx,
    const char * URL,
    const char * encoding,
    int options)
    +

    parse an HTML document from I/O functions and source and build a tree.

    +
    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)
    Returns:the resulting document tree

    Function: htmlReadMemory

    htmlDocPtr	htmlReadMemory		(const char * buffer, 
    int size,
    const char * URL,
    const char * encoding,
    int options)
    +

    parse an XML in-memory document and build a tree.

    +
    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)
    Returns:the resulting document tree

    Function: htmlSAXParseDoc

    htmlDocPtr	htmlSAXParseDoc		(xmlChar * cur, 
    const char * encoding,
    htmlSAXHandlerPtr sax,
    void * userData)
    +

    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.

    +
    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.
    Returns:the resulting document tree unless SAX is NULL or the document is not well formed.

    Function: htmlSAXParseFile

    htmlDocPtr	htmlSAXParseFile	(const char * filename, 
    const char * encoding,
    htmlSAXHandlerPtr sax,
    void * userData)
    +

    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.

    +
    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.
    Returns:the resulting document tree unless SAX is NULL or the document is not well formed.

    Function: htmlTagLookup

    const htmlElemDesc *	htmlTagLookup	(const xmlChar * tag)
    +

    Lookup the HTML tag in the ElementTable

    +
    tag:The tag name in lowercase
    Returns:the related htmlElemDescPtr or NULL if not found.

    Daniel Veillard

    diff --git a/doc/html/libxml-HTMLtree.html b/doc/html/libxml-HTMLtree.html new file mode 100644 index 0000000..0c89727 --- /dev/null +++ b/doc/html/libxml-HTMLtree.html @@ -0,0 +1,73 @@ + + +Module HTMLtree from libxml2
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    Module HTMLtree from libxml2

    API Menu
    API Indexes
    Related links

    this module implements a few function needed to process tree in an HTML specific way.

    Table of Contents

    #define HTML_COMMENT_NODE
    #define HTML_ENTITY_REF_NODE
    #define HTML_PI_NODE
    #define HTML_PRESERVE_NODE
    #define HTML_TEXT_NODE
    void	htmlDocContentDumpFormatOutput	(xmlOutputBufferPtr buf, 
    xmlDocPtr cur,
    const char * encoding,
    int format)
    +
    void	htmlDocContentDumpOutput	(xmlOutputBufferPtr buf, 
    xmlDocPtr cur,
    const char * encoding)
    +
    int	htmlDocDump			(FILE * f, 
    xmlDocPtr cur)
    +
    void	htmlDocDumpMemory		(xmlDocPtr cur, 
    xmlChar ** mem,
    int * size)
    +
    void	htmlDocDumpMemoryFormat		(xmlDocPtr cur, 
    xmlChar ** mem,
    int * size,
    int format)
    +
    const xmlChar *	htmlGetMetaEncoding	(htmlDocPtr doc)
    +
    int	htmlIsBooleanAttr		(const xmlChar * name)
    +
    htmlDocPtr	htmlNewDoc		(const xmlChar * URI, 
    const xmlChar * ExternalID)
    +
    htmlDocPtr	htmlNewDocNoDtD		(const xmlChar * URI, 
    const xmlChar * ExternalID)
    +
    int	htmlNodeDump			(xmlBufferPtr buf, 
    xmlDocPtr doc,
    xmlNodePtr cur)
    +
    void	htmlNodeDumpFile		(FILE * out, 
    xmlDocPtr doc,
    xmlNodePtr cur)
    +
    int	htmlNodeDumpFileFormat		(FILE * out, 
    xmlDocPtr doc,
    xmlNodePtr cur,
    const char * encoding,
    int format)
    +
    void	htmlNodeDumpFormatOutput	(xmlOutputBufferPtr buf, 
    xmlDocPtr doc,
    xmlNodePtr cur,
    const char * encoding,
    int format)
    +
    void	htmlNodeDumpOutput		(xmlOutputBufferPtr buf, 
    xmlDocPtr doc,
    xmlNodePtr cur,
    const char * encoding)
    +
    int	htmlSaveFile			(const char * filename, 
    xmlDocPtr cur)
    +
    int	htmlSaveFileEnc			(const char * filename, 
    xmlDocPtr cur,
    const char * encoding)
    +
    int	htmlSaveFileFormat		(const char * filename, 
    xmlDocPtr cur,
    const char * encoding,
    int format)
    +
    int	htmlSetMetaEncoding		(htmlDocPtr doc, 
    const xmlChar * encoding)
    +

    Description

    +

    Macro: HTML_COMMENT_NODE

    #define HTML_COMMENT_NODE

    Macro. A comment in a HTML document is really implemented the same way as a comment in an XML document.

    +

    Macro: HTML_ENTITY_REF_NODE

    #define 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.

    +

    Macro: HTML_PI_NODE

    #define 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.

    +

    Macro: HTML_PRESERVE_NODE

    #define 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.

    +

    Macro: HTML_TEXT_NODE

    #define 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.

    +

    Function: htmlDocContentDumpFormatOutput

    void	htmlDocContentDumpFormatOutput	(xmlOutputBufferPtr buf, 
    xmlDocPtr cur,
    const char * encoding,
    int format)
    +

    Dump an HTML document.

    +
    buf:the HTML buffer output
    cur:the document
    encoding:the encoding string
    format:should formatting spaces been added

    Function: htmlDocContentDumpOutput

    void	htmlDocContentDumpOutput	(xmlOutputBufferPtr buf, 
    xmlDocPtr cur,
    const char * encoding)
    +

    Dump an HTML document. Formating return/spaces are added.

    +
    buf:the HTML buffer output
    cur:the document
    encoding:the encoding string

    Function: htmlDocDump

    int	htmlDocDump			(FILE * f, 
    xmlDocPtr cur)
    +

    Dump an HTML document to an open FILE.

    +
    f:the FILE*
    cur:the document
    Returns:the number of byte written or -1 in case of failure.

    Function: htmlDocDumpMemory

    void	htmlDocDumpMemory		(xmlDocPtr cur, 
    xmlChar ** mem,
    int * size)
    +

    Dump an HTML document in memory and return the xmlChar * and it's size. It's up to the caller to free the memory.

    +
    cur:the document
    mem:OUT: the memory pointer
    size:OUT: the memory length

    Function: htmlDocDumpMemoryFormat

    void	htmlDocDumpMemoryFormat		(xmlDocPtr cur, 
    xmlChar ** mem,
    int * size,
    int format)
    +

    Dump an HTML document in memory and return the xmlChar * and it's size. It's up to the caller to free the memory.

    +
    cur:the document
    mem:OUT: the memory pointer
    size:OUT: the memory length
    format:should formatting spaces been added

    Function: htmlGetMetaEncoding

    const xmlChar *	htmlGetMetaEncoding	(htmlDocPtr doc)
    +

    Encoding definition lookup in the Meta tags

    +
    doc:the document
    Returns:the current encoding as flagged in the HTML source

    Function: htmlIsBooleanAttr

    int	htmlIsBooleanAttr		(const xmlChar * name)
    +

    Determine if a given attribute is a boolean attribute.

    +
    name:the name of the attribute to check
    Returns:false if the attribute is not boolean, true otherwise.

    Function: htmlNewDoc

    htmlDocPtr	htmlNewDoc		(const xmlChar * URI, 
    const xmlChar * ExternalID)
    +

    Creates a new HTML document

    +
    URI:URI for the dtd, or NULL
    ExternalID:the external ID of the DTD, or NULL
    Returns:a new document

    Function: htmlNewDocNoDtD

    htmlDocPtr	htmlNewDocNoDtD		(const xmlChar * URI, 
    const xmlChar * ExternalID)
    +

    Creates a new HTML document without a DTD node if @URI and @ExternalID are NULL

    +
    URI:URI for the dtd, or NULL
    ExternalID:the external ID of the DTD, or NULL
    Returns:a new document, do not initialize the DTD if not provided

    Function: htmlNodeDump

    int	htmlNodeDump			(xmlBufferPtr buf, 
    xmlDocPtr doc,
    xmlNodePtr cur)
    +

    Dump an HTML node, recursive behaviour,children are printed too, and formatting returns are added.

    +
    buf:the HTML buffer output
    doc:the document
    cur:the current node
    Returns:the number of byte written or -1 in case of error

    Function: htmlNodeDumpFile

    void	htmlNodeDumpFile		(FILE * out, 
    xmlDocPtr doc,
    xmlNodePtr cur)
    +

    Dump an HTML node, recursive behaviour,children are printed too, and formatting returns are added.

    +
    out:the FILE pointer
    doc:the document
    cur:the current node

    Function: htmlNodeDumpFileFormat

    int	htmlNodeDumpFileFormat		(FILE * out, 
    xmlDocPtr doc,
    xmlNodePtr cur,
    const char * encoding,
    int format)
    +

    Dump an HTML node, recursive behaviour,children are printed too. TODO: if encoding == NULL try to save in the doc encoding

    +
    out:the FILE pointer
    doc:the document
    cur:the current node
    encoding:the document encoding
    format:should formatting spaces been added
    Returns:the number of byte written or -1 in case of failure.

    Function: htmlNodeDumpFormatOutput

    void	htmlNodeDumpFormatOutput	(xmlOutputBufferPtr buf, 
    xmlDocPtr doc,
    xmlNodePtr cur,
    const char * encoding,
    int format)
    +

    Dump an HTML node, recursive behaviour,children are printed too.

    +
    buf:the HTML buffer output
    doc:the document
    cur:the current node
    encoding:the encoding string
    format:should formatting spaces been added

    Function: htmlNodeDumpOutput

    void	htmlNodeDumpOutput		(xmlOutputBufferPtr buf, 
    xmlDocPtr doc,
    xmlNodePtr cur,
    const char * encoding)
    +

    Dump an HTML node, recursive behaviour,children are printed too, and formatting returns/spaces are added.

    +
    buf:the HTML buffer output
    doc:the document
    cur:the current node
    encoding:the encoding string

    Function: htmlSaveFile

    int	htmlSaveFile			(const char * filename, 
    xmlDocPtr cur)
    +

    Dump an HTML document to a file. If @filename is "-" the stdout file is used.

    +
    filename:the filename (or URL)
    cur:the document
    Returns:the number of byte written or -1 in case of failure.

    Function: htmlSaveFileEnc

    int	htmlSaveFileEnc			(const char * filename, 
    xmlDocPtr cur,
    const char * encoding)
    +

    Dump an HTML document to a file using a given encoding and formatting returns/spaces are added.

    +
    filename:the filename
    cur:the document
    encoding:the document encoding
    Returns:the number of byte written or -1 in case of failure.

    Function: htmlSaveFileFormat

    int	htmlSaveFileFormat		(const char * filename, 
    xmlDocPtr cur,
    const char * encoding,
    int format)
    +

    Dump an HTML document to a file using a given encoding.

    +
    filename:the filename
    cur:the document
    encoding:the document encoding
    format:should formatting spaces been added
    Returns:the number of byte written or -1 in case of failure.

    Function: htmlSetMetaEncoding

    int	htmlSetMetaEncoding		(htmlDocPtr doc, 
    const xmlChar * encoding)
    +

    Sets the current encoding in the Meta tags NOTE: this will not change the document content encoding, just the META flag associated.

    +
    doc:the document
    encoding:the encoding string
    Returns:0 in case of success and -1 in case of error

    Daniel Veillard

    diff --git a/doc/html/libxml-SAX.html b/doc/html/libxml-SAX.html new file mode 100644 index 0000000..f77a9df --- /dev/null +++ b/doc/html/libxml-SAX.html @@ -0,0 +1,125 @@ + + +Module SAX from libxml2
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    Module SAX from libxml2

    API Menu
    API Indexes
    Related links

    This module is deprecated

    DEPRECATED set of SAX version 1 interfaces used to build the DOM tree.

    Table of Contents

    void	comment			(void * ctx, 
    const xmlChar * value)
    +
    int	checkNamespace			(void * ctx, 
    xmlChar * namespace)
    +
    int	getColumnNumber			(void * ctx)
    +
    void	entityDecl			(void * ctx, 
    const xmlChar * name,
    int type,
    const xmlChar * publicId,
    const xmlChar * systemId,
    xmlChar * content)
    +
    void	attribute			(void * ctx, 
    const xmlChar * fullname,
    const xmlChar * value)
    +
    xmlNsPtr	getNamespace		(void * ctx)
    +
    void	setDocumentLocator		(void * ctx, 
    xmlSAXLocatorPtr loc)
    +
    void	initxmlDefaultSAXHandler	(xmlSAXHandlerV1 * hdlr, 
    int warning)
    +
    void	ignorableWhitespace		(void * ctx, 
    const xmlChar * ch,
    int len)
    +
    int	hasExternalSubset		(void * ctx)
    +
    void	unparsedEntityDecl		(void * ctx, 
    const xmlChar * name,
    const xmlChar * publicId,
    const xmlChar * systemId,
    const xmlChar * notationName)
    +
    void	globalNamespace			(void * ctx, 
    const xmlChar * href,
    const xmlChar * prefix)
    +
    int	hasInternalSubset		(void * ctx)
    +
    void	reference			(void * ctx, 
    const xmlChar * name)
    +
    void	notationDecl			(void * ctx, 
    const xmlChar * name,
    const xmlChar * publicId,
    const xmlChar * systemId)
    +
    const xmlChar *	getSystemId		(void * ctx)
    +
    void	externalSubset			(void * ctx, 
    const xmlChar * name,
    const xmlChar * ExternalID,
    const xmlChar * SystemID)
    +
    xmlParserInputPtr	resolveEntity	(void * ctx, 
    const xmlChar * publicId,
    const xmlChar * systemId)
    +
    void	startDocument			(void * ctx)
    +
    void	setNamespace			(void * ctx, 
    const xmlChar * name)
    +
    void	cdataBlock			(void * ctx, 
    const xmlChar * value,
    int len)
    +
    const xmlChar *	getPublicId		(void * ctx)
    +
    void	inithtmlDefaultSAXHandler	(xmlSAXHandlerV1 * hdlr)
    +
    void	processingInstruction		(void * ctx, 
    const xmlChar * target,
    const xmlChar * data)
    +
    void	endElement			(void * ctx, 
    const xmlChar * name)
    +
    void	namespaceDecl			(void * ctx, 
    const xmlChar * href,
    const xmlChar * prefix)
    +
    void	initdocbDefaultSAXHandler	(xmlSAXHandlerV1 * hdlr)
    +
    xmlEntityPtr	getEntity		(void * ctx, 
    const xmlChar * name)
    +
    void	characters			(void * ctx, 
    const xmlChar * ch,
    int len)
    +
    void	elementDecl			(void * ctx, 
    const xmlChar * name,
    int type,
    xmlElementContentPtr content)
    +
    void	startElement			(void * ctx, 
    const xmlChar * fullname,
    const xmlChar ** atts)
    +
    xmlEntityPtr	getParameterEntity	(void * ctx, 
    const xmlChar * name)
    +
    void	attributeDecl			(void * ctx, 
    const xmlChar * elem,
    const xmlChar * fullname,
    int type,
    int def,
    const xmlChar * defaultValue,
    xmlEnumerationPtr tree)
    +
    int	isStandalone			(void * ctx)
    +
    void	internalSubset			(void * ctx, 
    const xmlChar * name,
    const xmlChar * ExternalID,
    const xmlChar * SystemID)
    +
    void	endDocument			(void * ctx)
    +
    int	getLineNumber			(void * ctx)
    +

    Description

    +

    Function: comment

    void	comment			(void * ctx, 
    const xmlChar * value)
    +

    A comment has been parsed. DEPRECATED: use xmlSAX2Comment()

    +
    ctx:the user data (XML parser context)
    value:the comment content

    Function: checkNamespace

    int	checkNamespace			(void * ctx, 
    xmlChar * namespace)
    +

    Check that the current element namespace is the same as the one read upon parsing. DEPRECATED

    +
    ctx:the user data (XML parser context)
    namespace:the namespace to check against
    Returns:1 if true 0 otherwise

    Function: getColumnNumber

    int	getColumnNumber			(void * ctx)
    +

    Provide the column number of the current parsing point. DEPRECATED: use xmlSAX2GetColumnNumber()

    +
    ctx:the user data (XML parser context)
    Returns:an int

    Function: entityDecl

    void	entityDecl			(void * ctx, 
    const xmlChar * name,
    int type,
    const xmlChar * publicId,
    const xmlChar * systemId,
    xmlChar * content)
    +

    An entity definition has been parsed DEPRECATED: use 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).

    Function: attribute

    void	attribute			(void * ctx, 
    const xmlChar * fullname,
    const xmlChar * 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()

    +
    ctx:the user data (XML parser context)
    fullname:The attribute name, including namespace prefix
    value:The attribute value

    Function: getNamespace

    xmlNsPtr	getNamespace		(void * ctx)
    +

    Get the current element namespace. DEPRECATED

    +
    ctx:the user data (XML parser context)
    Returns:the xmlNsPtr or NULL if none

    Function: setDocumentLocator

    void	setDocumentLocator		(void * ctx, 
    xmlSAXLocatorPtr loc)
    +

    Receive the document locator at startup, actually xmlDefaultSAXLocator Everything is available on the context, so this is useless in our case. DEPRECATED

    +
    ctx:the user data (XML parser context)
    loc:A SAX Locator

    Function: initxmlDefaultSAXHandler

    void	initxmlDefaultSAXHandler	(xmlSAXHandlerV1 * hdlr, 
    int warning)
    +

    Initialize the default XML SAX version 1 handler DEPRECATED: use xmlSAX2InitDefaultSAXHandler() for the new SAX2 blocks

    +
    hdlr:the SAX handler
    warning:flag if non-zero sets the handler warning procedure

    Function: ignorableWhitespace

    void	ignorableWhitespace		(void * ctx, 
    const xmlChar * ch,
    int len)
    +

    receiving some ignorable whitespaces from the parser. UNUSED: by default the DOM building will use characters DEPRECATED: use xmlSAX2IgnorableWhitespace()

    +
    ctx:the user data (XML parser context)
    ch:a xmlChar string
    len:the number of xmlChar

    Function: hasExternalSubset

    int	hasExternalSubset		(void * ctx)
    +

    Does this document has an external subset DEPRECATED: use xmlSAX2HasExternalSubset()

    +
    ctx:the user data (XML parser context)
    Returns:1 if true

    Function: unparsedEntityDecl

    void	unparsedEntityDecl		(void * ctx, 
    const xmlChar * name,
    const xmlChar * publicId,
    const xmlChar * systemId,
    const xmlChar * notationName)
    +

    What to do when an unparsed entity declaration is parsed DEPRECATED: use 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

    Function: globalNamespace

    void	globalNamespace			(void * ctx, 
    const xmlChar * href,
    const xmlChar * prefix)
    +

    An old global namespace has been parsed. DEPRECATED

    +
    ctx:the user data (XML parser context)
    href:the namespace associated URN
    prefix:the namespace prefix

    Function: hasInternalSubset

    int	hasInternalSubset		(void * ctx)
    +

    Does this document has an internal subset DEPRECATED: use xmlSAX2HasInternalSubset()

    +
    ctx:the user data (XML parser context)
    Returns:1 if true

    Function: reference

    void	reference			(void * ctx, 
    const xmlChar * name)
    +

    called when an entity reference is detected. DEPRECATED: use xmlSAX2Reference()

    +
    ctx:the user data (XML parser context)
    name:The entity name

    Function: notationDecl

    void	notationDecl			(void * ctx, 
    const xmlChar * name,
    const xmlChar * publicId,
    const xmlChar * systemId)
    +

    What to do when a notation declaration has been parsed. DEPRECATED: use 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

    Function: getSystemId

    const xmlChar *	getSystemId		(void * ctx)
    +

    Provides the system ID, basically URL or filename e.g. http://www.sgmlsource.com/dtds/memo.dtd DEPRECATED: use xmlSAX2GetSystemId()

    +
    ctx:the user data (XML parser context)
    Returns:a xmlChar *

    Function: externalSubset

    void	externalSubset			(void * ctx, 
    const xmlChar * name,
    const xmlChar * ExternalID,
    const xmlChar * SystemID)
    +

    Callback on external subset declaration. DEPRECATED: use 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)

    Function: resolveEntity

    xmlParserInputPtr	resolveEntity	(void * ctx, 
    const xmlChar * publicId,
    const xmlChar * systemId)
    +

    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()

    +
    ctx:the user data (XML parser context)
    publicId:The public ID of the entity
    systemId:The system ID of the entity
    Returns:the xmlParserInputPtr if inlined or NULL for DOM behaviour.

    Function: startDocument

    void	startDocument			(void * ctx)
    +

    called when the document start being processed. DEPRECATED: use xmlSAX2StartDocument()

    +
    ctx:the user data (XML parser context)

    Function: setNamespace

    void	setNamespace			(void * ctx, 
    const xmlChar * name)
    +

    Set the current element namespace. DEPRECATED

    +
    ctx:the user data (XML parser context)
    name:the namespace prefix

    Function: cdataBlock

    void	cdataBlock			(void * ctx, 
    const xmlChar * value,
    int len)
    +

    called when a pcdata block has been parsed DEPRECATED: use xmlSAX2CDataBlock()

    +
    ctx:the user data (XML parser context)
    value:The pcdata content
    len:the block length

    Function: getPublicId

    const xmlChar *	getPublicId		(void * ctx)
    +

    Provides the public ID e.g. "-//SGMLSOURCE//DTD DEMO//EN" DEPRECATED: use xmlSAX2GetPublicId()

    +
    ctx:the user data (XML parser context)
    Returns:a xmlChar *

    Function: inithtmlDefaultSAXHandler

    void	inithtmlDefaultSAXHandler	(xmlSAXHandlerV1 * hdlr)
    +

    Initialize the default HTML SAX version 1 handler DEPRECATED: use xmlSAX2InitHtmlDefaultSAXHandler() for the new SAX2 blocks

    +
    hdlr:the SAX handler

    Function: processingInstruction

    void	processingInstruction		(void * ctx, 
    const xmlChar * target,
    const xmlChar * data)
    +

    A processing instruction has been parsed. DEPRECATED: use xmlSAX2ProcessingInstruction()

    +
    ctx:the user data (XML parser context)
    target:the target name
    data:the PI data's

    Function: endElement

    void	endElement			(void * ctx, 
    const xmlChar * name)
    +

    called when the end of an element has been detected. DEPRECATED: use xmlSAX2EndElement()

    +
    ctx:the user data (XML parser context)
    name:The element name

    Function: namespaceDecl

    void	namespaceDecl			(void * ctx, 
    const xmlChar * href,
    const xmlChar * prefix)
    +

    A namespace has been parsed. DEPRECATED

    +
    ctx:the user data (XML parser context)
    href:the namespace associated URN
    prefix:the namespace prefix

    Function: initdocbDefaultSAXHandler

    void	initdocbDefaultSAXHandler	(xmlSAXHandlerV1 * hdlr)
    +

    Initialize the default DocBook SAX version 1 handler DEPRECATED: use xmlSAX2InitDocbDefaultSAXHandler() for the new SAX2 blocks

    +
    hdlr:the SAX handler

    Function: getEntity

    xmlEntityPtr	getEntity		(void * ctx, 
    const xmlChar * name)
    +

    Get an entity by name DEPRECATED: use xmlSAX2GetEntity()

    +
    ctx:the user data (XML parser context)
    name:The entity name
    Returns:the xmlEntityPtr if found.

    Function: characters

    void	characters			(void * ctx, 
    const xmlChar * ch,
    int len)
    +

    receiving some chars from the parser. DEPRECATED: use xmlSAX2Characters()

    +
    ctx:the user data (XML parser context)
    ch:a xmlChar string
    len:the number of xmlChar

    Function: elementDecl

    void	elementDecl			(void * ctx, 
    const xmlChar * name,
    int type,
    xmlElementContentPtr content)
    +

    An element definition has been parsed DEPRECATED: use xmlSAX2ElementDecl()

    +
    ctx:the user data (XML parser context)
    name:the element name
    type:the element type
    content:the element value tree

    Function: startElement

    void	startElement			(void * ctx, 
    const xmlChar * fullname,
    const xmlChar ** atts)
    +

    called when an opening tag has been processed. DEPRECATED: use 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

    Function: getParameterEntity

    xmlEntityPtr	getParameterEntity	(void * ctx, 
    const xmlChar * name)
    +

    Get a parameter entity by name DEPRECATED: use xmlSAX2GetParameterEntity()

    +
    ctx:the user data (XML parser context)
    name:The entity name
    Returns:the xmlEntityPtr if found.

    Function: attributeDecl

    void	attributeDecl			(void * ctx, 
    const xmlChar * elem,
    const xmlChar * fullname,
    int type,
    int def,
    const xmlChar * defaultValue,
    xmlEnumerationPtr tree)
    +

    An attribute definition has been parsed DEPRECATED: use 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

    Function: isStandalone

    int	isStandalone			(void * ctx)
    +

    Is this document tagged standalone ? DEPRECATED: use xmlSAX2IsStandalone()

    +
    ctx:the user data (XML parser context)
    Returns:1 if true

    Function: internalSubset

    void	internalSubset			(void * ctx, 
    const xmlChar * name,
    const xmlChar * ExternalID,
    const xmlChar * SystemID)
    +

    Callback on internal subset declaration. DEPRECATED: use 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)

    Function: endDocument

    void	endDocument			(void * ctx)
    +

    called when the document end has been detected. DEPRECATED: use xmlSAX2EndDocument()

    +
    ctx:the user data (XML parser context)

    Function: getLineNumber

    int	getLineNumber			(void * ctx)
    +

    Provide the line number of the current parsing point. DEPRECATED: use xmlSAX2GetLineNumber()

    +
    ctx:the user data (XML parser context)
    Returns:an int

    Daniel Veillard

    diff --git a/doc/html/libxml-SAX2.html b/doc/html/libxml-SAX2.html new file mode 100644 index 0000000..5447450 --- /dev/null +++ b/doc/html/libxml-SAX2.html @@ -0,0 +1,128 @@ + + +Module SAX2 from libxml2
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    Module SAX2 from libxml2

    API Menu
    API Indexes
    Related links

    those are the default SAX2 interfaces used by the library when building DOM tree.

    Table of Contents

    void	docbDefaultSAXHandlerInit	(void)
    +
    void	htmlDefaultSAXHandlerInit	(void)
    +
    void	xmlDefaultSAXHandlerInit	(void)
    +
    void	xmlSAX2AttributeDecl		(void * ctx, 
    const xmlChar * elem,
    const xmlChar * fullname,
    int type,
    int def,
    const xmlChar * defaultValue,
    xmlEnumerationPtr tree)
    +
    void	xmlSAX2CDataBlock		(void * ctx, 
    const xmlChar * value,
    int len)
    +
    void	xmlSAX2Characters		(void * ctx, 
    const xmlChar * ch,
    int len)
    +
    void	xmlSAX2Comment			(void * ctx, 
    const xmlChar * value)
    +
    void	xmlSAX2ElementDecl		(void * ctx, 
    const xmlChar * name,
    int type,
    xmlElementContentPtr content)
    +
    void	xmlSAX2EndDocument		(void * ctx)
    +
    void	xmlSAX2EndElement		(void * ctx, 
    const xmlChar * name)
    +
    void	xmlSAX2EndElementNs		(void * ctx, 
    const xmlChar * localname,
    const xmlChar * prefix,
    const xmlChar * URI)
    +
    void	xmlSAX2EntityDecl		(void * ctx, 
    const xmlChar * name,
    int type,
    const xmlChar * publicId,
    const xmlChar * systemId,
    xmlChar * content)
    +
    void	xmlSAX2ExternalSubset		(void * ctx, 
    const xmlChar * name,
    const xmlChar * ExternalID,
    const xmlChar * SystemID)
    +
    int	xmlSAX2GetColumnNumber		(void * ctx)
    +
    xmlEntityPtr	xmlSAX2GetEntity	(void * ctx, 
    const xmlChar * name)
    +
    int	xmlSAX2GetLineNumber		(void * ctx)
    +
    xmlEntityPtr	xmlSAX2GetParameterEntity	(void * ctx, 
    const xmlChar * name)
    +
    const xmlChar *	xmlSAX2GetPublicId	(void * ctx)
    +
    const xmlChar *	xmlSAX2GetSystemId	(void * ctx)
    +
    int	xmlSAX2HasExternalSubset	(void * ctx)
    +
    int	xmlSAX2HasInternalSubset	(void * ctx)
    +
    void	xmlSAX2IgnorableWhitespace	(void * ctx, 
    const xmlChar * ch,
    int len)
    +
    void	xmlSAX2InitDefaultSAXHandler	(xmlSAXHandler * hdlr, 
    int warning)
    +
    void	xmlSAX2InitDocbDefaultSAXHandler	(xmlSAXHandler * hdlr)
    +
    void	xmlSAX2InitHtmlDefaultSAXHandler	(xmlSAXHandler * hdlr)
    +
    void	xmlSAX2InternalSubset		(void * ctx, 
    const xmlChar * name,
    const xmlChar * ExternalID,
    const xmlChar * SystemID)
    +
    int	xmlSAX2IsStandalone		(void * ctx)
    +
    void	xmlSAX2NotationDecl		(void * ctx, 
    const xmlChar * name,
    const xmlChar * publicId,
    const xmlChar * systemId)
    +
    void	xmlSAX2ProcessingInstruction	(void * ctx, 
    const xmlChar * target,
    const xmlChar * data)
    +
    void	xmlSAX2Reference		(void * ctx, 
    const xmlChar * name)
    +
    xmlParserInputPtr	xmlSAX2ResolveEntity	(void * ctx, 
    const xmlChar * publicId,
    const xmlChar * systemId)
    +
    void	xmlSAX2SetDocumentLocator	(void * ctx, 
    xmlSAXLocatorPtr loc)
    +
    void	xmlSAX2StartDocument		(void * ctx)
    +
    void	xmlSAX2StartElement		(void * ctx, 
    const xmlChar * fullname,
    const xmlChar ** atts)
    +
    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)
    +
    void	xmlSAX2UnparsedEntityDecl	(void * ctx, 
    const xmlChar * name,
    const xmlChar * publicId,
    const xmlChar * systemId,
    const xmlChar * notationName)
    +
    int	xmlSAXDefaultVersion		(int version)
    +
    int	xmlSAXVersion			(xmlSAXHandler * hdlr, 
    int version)
    +

    Description

    +

    Function: docbDefaultSAXHandlerInit

    void	docbDefaultSAXHandlerInit	(void)
    +

    Initialize the default SAX handler

    +

    Function: htmlDefaultSAXHandlerInit

    void	htmlDefaultSAXHandlerInit	(void)
    +

    Initialize the default SAX handler

    +

    Function: xmlDefaultSAXHandlerInit

    void	xmlDefaultSAXHandlerInit	(void)
    +

    Initialize the default SAX2 handler

    +

    Function: xmlSAX2AttributeDecl

    void	xmlSAX2AttributeDecl		(void * ctx, 
    const xmlChar * elem,
    const xmlChar * fullname,
    int type,
    int def,
    const xmlChar * defaultValue,
    xmlEnumerationPtr tree)
    +

    An attribute definition has been parsed

    +
    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

    Function: xmlSAX2CDataBlock

    void	xmlSAX2CDataBlock		(void * ctx, 
    const xmlChar * value,
    int len)
    +

    called when a pcdata block has been parsed

    +
    ctx:the user data (XML parser context)
    value:The pcdata content
    len:the block length

    Function: xmlSAX2Characters

    void	xmlSAX2Characters		(void * ctx, 
    const xmlChar * ch,
    int len)
    +

    receiving some chars from the parser.

    +
    ctx:the user data (XML parser context)
    ch:a xmlChar string
    len:the number of xmlChar

    Function: xmlSAX2Comment

    void	xmlSAX2Comment			(void * ctx, 
    const xmlChar * value)
    +

    A xmlSAX2Comment has been parsed.

    +
    ctx:the user data (XML parser context)
    value:the xmlSAX2Comment content

    Function: xmlSAX2ElementDecl

    void	xmlSAX2ElementDecl		(void * ctx, 
    const xmlChar * name,
    int type,
    xmlElementContentPtr content)
    +

    An element definition has been parsed

    +
    ctx:the user data (XML parser context)
    name:the element name
    type:the element type
    content:the element value tree

    Function: xmlSAX2EndDocument

    void	xmlSAX2EndDocument		(void * ctx)
    +

    called when the document end has been detected.

    +
    ctx:the user data (XML parser context)

    Function: xmlSAX2EndElement

    void	xmlSAX2EndElement		(void * ctx, 
    const xmlChar * name)
    +

    called when the end of an element has been detected.

    +
    ctx:the user data (XML parser context)
    name:The element name

    Function: xmlSAX2EndElementNs

    void	xmlSAX2EndElementNs		(void * ctx, 
    const xmlChar * localname,
    const xmlChar * prefix,
    const xmlChar * URI)
    +

    SAX2 callback when an element end has been detected by the parser. It provides the namespace informations for the element.

    +
    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

    Function: xmlSAX2EntityDecl

    void	xmlSAX2EntityDecl		(void * ctx, 
    const xmlChar * name,
    int type,
    const xmlChar * publicId,
    const xmlChar * systemId,
    xmlChar * content)
    +

    An entity definition has been parsed

    +
    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).

    Function: xmlSAX2ExternalSubset

    void	xmlSAX2ExternalSubset		(void * ctx, 
    const xmlChar * name,
    const xmlChar * ExternalID,
    const xmlChar * SystemID)
    +

    Callback on external subset declaration.

    +
    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)

    Function: xmlSAX2GetColumnNumber

    int	xmlSAX2GetColumnNumber		(void * ctx)
    +

    Provide the column number of the current parsing point.

    +
    ctx:the user data (XML parser context)
    Returns:an int

    Function: xmlSAX2GetEntity

    xmlEntityPtr	xmlSAX2GetEntity	(void * ctx, 
    const xmlChar * name)
    +

    Get an entity by name

    +
    ctx:the user data (XML parser context)
    name:The entity name
    Returns:the xmlEntityPtr if found.

    Function: xmlSAX2GetLineNumber

    int	xmlSAX2GetLineNumber		(void * ctx)
    +

    Provide the line number of the current parsing point.

    +
    ctx:the user data (XML parser context)
    Returns:an int

    Function: xmlSAX2GetParameterEntity

    xmlEntityPtr	xmlSAX2GetParameterEntity	(void * ctx, 
    const xmlChar * name)
    +

    Get a parameter entity by name

    +
    ctx:the user data (XML parser context)
    name:The entity name
    Returns:the xmlEntityPtr if found.

    Function: xmlSAX2GetPublicId

    const xmlChar *	xmlSAX2GetPublicId	(void * ctx)
    +

    Provides the public ID e.g. "-//SGMLSOURCE//DTD DEMO//EN"

    +
    ctx:the user data (XML parser context)
    Returns:a xmlChar *

    Function: xmlSAX2GetSystemId

    const xmlChar *	xmlSAX2GetSystemId	(void * ctx)
    +

    Provides the system ID, basically URL or filename e.g. http://www.sgmlsource.com/dtds/memo.dtd

    +
    ctx:the user data (XML parser context)
    Returns:a xmlChar *

    Function: xmlSAX2HasExternalSubset

    int	xmlSAX2HasExternalSubset	(void * ctx)
    +

    Does this document has an external subset

    +
    ctx:the user data (XML parser context)
    Returns:1 if true

    Function: xmlSAX2HasInternalSubset

    int	xmlSAX2HasInternalSubset	(void * ctx)
    +

    Does this document has an internal subset

    +
    ctx:the user data (XML parser context)
    Returns:1 if true

    Function: xmlSAX2IgnorableWhitespace

    void	xmlSAX2IgnorableWhitespace	(void * ctx, 
    const xmlChar * ch,
    int len)
    +

    receiving some ignorable whitespaces from the parser. UNUSED: by default the DOM building will use xmlSAX2Characters

    +
    ctx:the user data (XML parser context)
    ch:a xmlChar string
    len:the number of xmlChar

    Function: xmlSAX2InitDefaultSAXHandler

    void	xmlSAX2InitDefaultSAXHandler	(xmlSAXHandler * hdlr, 
    int warning)
    +

    Initialize the default XML SAX2 handler

    +
    hdlr:the SAX handler
    warning:flag if non-zero sets the handler warning procedure

    Function: xmlSAX2InitDocbDefaultSAXHandler

    void	xmlSAX2InitDocbDefaultSAXHandler	(xmlSAXHandler * hdlr)
    +

    Initialize the default DocBook SAX2 handler

    +
    hdlr:the SAX handler

    Function: xmlSAX2InitHtmlDefaultSAXHandler

    void	xmlSAX2InitHtmlDefaultSAXHandler	(xmlSAXHandler * hdlr)
    +

    Initialize the default HTML SAX2 handler

    +
    hdlr:the SAX handler

    Function: xmlSAX2InternalSubset

    void	xmlSAX2InternalSubset		(void * ctx, 
    const xmlChar * name,
    const xmlChar * ExternalID,
    const xmlChar * SystemID)
    +

    Callback on internal subset declaration.

    +
    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)

    Function: xmlSAX2IsStandalone

    int	xmlSAX2IsStandalone		(void * ctx)
    +

    Is this document tagged standalone ?

    +
    ctx:the user data (XML parser context)
    Returns:1 if true

    Function: xmlSAX2NotationDecl

    void	xmlSAX2NotationDecl		(void * ctx, 
    const xmlChar * name,
    const xmlChar * publicId,
    const xmlChar * systemId)
    +

    What to do when a notation declaration has been parsed.

    +
    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

    Function: xmlSAX2ProcessingInstruction

    void	xmlSAX2ProcessingInstruction	(void * ctx, 
    const xmlChar * target,
    const xmlChar * data)
    +

    A processing instruction has been parsed.

    +
    ctx:the user data (XML parser context)
    target:the target name
    data:the PI data's

    Function: xmlSAX2Reference

    void	xmlSAX2Reference		(void * ctx, 
    const xmlChar * name)
    +

    called when an entity xmlSAX2Reference is detected.

    +
    ctx:the user data (XML parser context)
    name:The entity name

    Function: xmlSAX2ResolveEntity

    xmlParserInputPtr	xmlSAX2ResolveEntity	(void * ctx, 
    const xmlChar * publicId,
    const xmlChar * systemId)
    +

    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

    +
    ctx:the user data (XML parser context)
    publicId:The public ID of the entity
    systemId:The system ID of the entity
    Returns:the xmlParserInputPtr if inlined or NULL for DOM behaviour.

    Function: xmlSAX2SetDocumentLocator

    void	xmlSAX2SetDocumentLocator	(void * ctx, 
    xmlSAXLocatorPtr loc)
    +

    Receive the document locator at startup, actually xmlDefaultSAXLocator Everything is available on the context, so this is useless in our case.

    +
    ctx:the user data (XML parser context)
    loc:A SAX Locator

    Function: xmlSAX2StartDocument

    void	xmlSAX2StartDocument		(void * ctx)
    +

    called when the document start being processed.

    +
    ctx:the user data (XML parser context)

    Function: xmlSAX2StartElement

    void	xmlSAX2StartElement		(void * ctx, 
    const xmlChar * fullname,
    const xmlChar ** atts)
    +

    called when an opening tag has been processed.

    +
    ctx:the user data (XML parser context)
    fullname:The element name, including namespace prefix
    atts:An array of name/value attributes pairs, NULL terminated

    Function: xmlSAX2StartElementNs

    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)
    +

    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.

    +
    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.

    Function: xmlSAX2UnparsedEntityDecl

    void	xmlSAX2UnparsedEntityDecl	(void * ctx, 
    const xmlChar * name,
    const xmlChar * publicId,
    const xmlChar * systemId,
    const xmlChar * notationName)
    +

    What to do when an unparsed entity declaration is parsed

    +
    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

    Function: xmlSAXDefaultVersion

    int	xmlSAXDefaultVersion		(int version)
    +

    Set the default version of SAX used globally by the library. By default, during initialization the default is set to 2. Note that it is generally a better coding style to use xmlSAXVersion() to set up the version explicitly for a given parsing context.

    +
    version:the version, 1 or 2
    Returns:the previous value in case of success and -1 in case of error.

    Function: xmlSAXVersion

    int	xmlSAXVersion			(xmlSAXHandler * hdlr, 
    int version)
    +

    Initialize the default XML SAX handler according to the version

    +
    hdlr:the SAX handler
    version:the version, 1 or 2
    Returns:0 in case of success and -1 in case of error.

    Daniel Veillard

    diff --git a/doc/html/libxml-c14n.html b/doc/html/libxml-c14n.html new file mode 100644 index 0000000..2e61a98 --- /dev/null +++ b/doc/html/libxml-c14n.html @@ -0,0 +1,38 @@ + + +Module c14n from libxml2
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    Module c14n from libxml2

    API Menu
    API Indexes
    Related links

    the c14n modules provides a "Canonical XML" implementation

    Table of Contents

    Enum xmlC14NMode
    +
    int	xmlC14NDocDumpMemory		(xmlDocPtr doc, 
    xmlNodeSetPtr nodes,
    int mode,
    xmlChar ** inclusive_ns_prefixes,
    int with_comments,
    xmlChar ** doc_txt_ptr)
    +
    int	xmlC14NDocSave			(xmlDocPtr doc, 
    xmlNodeSetPtr nodes,
    int mode,
    xmlChar ** inclusive_ns_prefixes,
    int with_comments,
    const char * filename,
    int compression)
    +
    int	xmlC14NDocSaveTo		(xmlDocPtr doc, 
    xmlNodeSetPtr nodes,
    int mode,
    xmlChar ** inclusive_ns_prefixes,
    int with_comments,
    xmlOutputBufferPtr buf)
    +
    int	xmlC14NExecute			(xmlDocPtr doc, 
    xmlC14NIsVisibleCallback is_visible_callback,
    void * user_data,
    int mode,
    xmlChar ** inclusive_ns_prefixes,
    int with_comments,
    xmlOutputBufferPtr buf)
    +
    Function type: xmlC14NIsVisibleCallback
    +int	xmlC14NIsVisibleCallback	(void * user_data, 
    xmlNodePtr node,
    xmlNodePtr parent) +
    +

    Description

    +

    Enum xmlC14NMode

    Enum xmlC14NMode {
    +    XML_C14N_1_0 = 0 : Origianal C14N 1.0 spec
    +    XML_C14N_EXCLUSIVE_1_0 = 1 : Exclusive C14N 1.0 spec
    +    XML_C14N_1_1 = 2 : C14N 1.1 spec
    +}
    +

    Function: xmlC14NDocDumpMemory

    int	xmlC14NDocDumpMemory		(xmlDocPtr doc, 
    xmlNodeSetPtr nodes,
    int mode,
    xmlChar ** inclusive_ns_prefixes,
    int with_comments,
    xmlChar ** doc_txt_ptr)
    +

    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)

    +
    doc:the XML document for canonization
    nodes:the nodes set to be included in the canonized image or NULL if all document nodes should be included
    mode:the c14n mode (see @xmlC14NMode)
    inclusive_ns_prefixes:the list of inclusive namespace prefixes 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
    Returns:the number of bytes written on success or a negative value on fail

    Function: xmlC14NDocSave

    int	xmlC14NDocSave			(xmlDocPtr doc, 
    xmlNodeSetPtr nodes,
    int mode,
    xmlChar ** inclusive_ns_prefixes,
    int with_comments,
    const char * filename,
    int compression)
    +

    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)

    +
    doc:the XML document for canonization
    nodes:the nodes set to be included in the canonized image or NULL if all document nodes should be included
    mode:the c14n mode (see @xmlC14NMode)
    inclusive_ns_prefixes:the list of inclusive namespace prefixes 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
    Returns:the number of bytes written success or a negative value on fail

    Function: xmlC14NDocSaveTo

    int	xmlC14NDocSaveTo		(xmlDocPtr doc, 
    xmlNodeSetPtr nodes,
    int mode,
    xmlChar ** inclusive_ns_prefixes,
    int with_comments,
    xmlOutputBufferPtr buf)
    +

    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)

    +
    doc:the XML document for canonization
    nodes:the nodes set to be included in the canonized image or NULL if all document nodes should be included
    mode:the c14n mode (see @xmlC14NMode)
    inclusive_ns_prefixes:the list of inclusive namespace prefixes 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
    Returns:non-negative value on success or a negative value on fail

    Function: xmlC14NExecute

    int	xmlC14NExecute			(xmlDocPtr doc, 
    xmlC14NIsVisibleCallback is_visible_callback,
    void * user_data,
    int mode,
    xmlChar ** inclusive_ns_prefixes,
    int with_comments,
    xmlOutputBufferPtr buf)
    +

    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)

    +
    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)
    mode:the c14n mode (see @xmlC14NMode)
    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
    Returns:non-negative value on success or a negative value on fail

    Function type: xmlC14NIsVisibleCallback

    Function type: xmlC14NIsVisibleCallback
    +int	xmlC14NIsVisibleCallback	(void * user_data, 
    xmlNodePtr node,
    xmlNodePtr parent) +

    Signature for a C14N callback on visible nodes

    user_data:user data
    node:the curent node
    parent:the parent node
    Returns:1 if the node should be included

    +

    Daniel Veillard

    diff --git a/doc/html/libxml-catalog.html b/doc/html/libxml-catalog.html new file mode 100644 index 0000000..d6d28f8 --- /dev/null +++ b/doc/html/libxml-catalog.html @@ -0,0 +1,142 @@ + + +Module catalog from libxml2
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    Module catalog from libxml2

    API Menu
    API Indexes
    Related links

    the catalog module implements the support for XML Catalogs and SGML catalogs

    Table of Contents

    #define XML_CATALOGS_NAMESPACE
    #define XML_CATALOG_PI
    Structure xmlCatalog
    struct _xmlCatalog +The content of this structure is not made public by the API. +
    Enum xmlCatalogAllow
    +
    Enum xmlCatalogPrefer
    +
    Typedef xmlCatalog * xmlCatalogPtr
    +
    int	xmlACatalogAdd			(xmlCatalogPtr catal, 
    const xmlChar * type,
    const xmlChar * orig,
    const xmlChar * replace)
    +
    void	xmlACatalogDump			(xmlCatalogPtr catal, 
    FILE * out)
    +
    int	xmlACatalogRemove		(xmlCatalogPtr catal, 
    const xmlChar * value)
    +
    xmlChar *	xmlACatalogResolve	(xmlCatalogPtr catal, 
    const xmlChar * pubID,
    const xmlChar * sysID)
    +
    xmlChar *	xmlACatalogResolvePublic	(xmlCatalogPtr catal, 
    const xmlChar * pubID)
    +
    xmlChar *	xmlACatalogResolveSystem	(xmlCatalogPtr catal, 
    const xmlChar * sysID)
    +
    xmlChar *	xmlACatalogResolveURI	(xmlCatalogPtr catal, 
    const xmlChar * URI)
    +
    int	xmlCatalogAdd			(const xmlChar * type, 
    const xmlChar * orig,
    const xmlChar * replace)
    +
    void *	xmlCatalogAddLocal		(void * catalogs, 
    const xmlChar * URL)
    +
    void	xmlCatalogCleanup		(void)
    +
    int	xmlCatalogConvert		(void)
    +
    void	xmlCatalogDump			(FILE * out)
    +
    void	xmlCatalogFreeLocal		(void * catalogs)
    +
    xmlCatalogAllow	xmlCatalogGetDefaults	(void)
    +
    const xmlChar *	xmlCatalogGetPublic	(const xmlChar * pubID)
    +
    const xmlChar *	xmlCatalogGetSystem	(const xmlChar * sysID)
    +
    int	xmlCatalogIsEmpty		(xmlCatalogPtr catal)
    +
    xmlChar *	xmlCatalogLocalResolve	(void * catalogs, 
    const xmlChar * pubID,
    const xmlChar * sysID)
    +
    xmlChar *	xmlCatalogLocalResolveURI	(void * catalogs, 
    const xmlChar * URI)
    +
    int	xmlCatalogRemove		(const xmlChar * value)
    +
    xmlChar *	xmlCatalogResolve	(const xmlChar * pubID, 
    const xmlChar * sysID)
    +
    xmlChar *	xmlCatalogResolvePublic	(const xmlChar * pubID)
    +
    xmlChar *	xmlCatalogResolveSystem	(const xmlChar * sysID)
    +
    xmlChar *	xmlCatalogResolveURI	(const xmlChar * URI)
    +
    int	xmlCatalogSetDebug		(int level)
    +
    xmlCatalogPrefer	xmlCatalogSetDefaultPrefer	(xmlCatalogPrefer prefer)
    +
    void	xmlCatalogSetDefaults		(xmlCatalogAllow allow)
    +
    int	xmlConvertSGMLCatalog		(xmlCatalogPtr catal)
    +
    void	xmlFreeCatalog			(xmlCatalogPtr catal)
    +
    void	xmlInitializeCatalog		(void)
    +
    xmlCatalogPtr	xmlLoadACatalog		(const char * filename)
    +
    int	xmlLoadCatalog			(const char * filename)
    +
    void	xmlLoadCatalogs			(const char * pathss)
    +
    xmlCatalogPtr	xmlLoadSGMLSuperCatalog	(const char * filename)
    +
    xmlCatalogPtr	xmlNewCatalog		(int sgml)
    +
    xmlDocPtr	xmlParseCatalogFile	(const char * filename)
    +

    Description

    +

    Macro: XML_CATALOGS_NAMESPACE

    #define XML_CATALOGS_NAMESPACE

    The namespace for the XML Catalogs elements.

    +

    Macro: XML_CATALOG_PI

    #define XML_CATALOG_PI

    The specific XML Catalog Processing Instuction name.

    +

    Structure xmlCatalog

    Structure xmlCatalog
    struct _xmlCatalog { +The content of this structure is not made public by the API. +}

    Enum xmlCatalogAllow

    Enum xmlCatalogAllow {
    +    XML_CATA_ALLOW_NONE = 0
    +    XML_CATA_ALLOW_GLOBAL = 1
    +    XML_CATA_ALLOW_DOCUMENT = 2
    +    XML_CATA_ALLOW_ALL = 3
    +}
    +

    Enum xmlCatalogPrefer

    Enum xmlCatalogPrefer {
    +    XML_CATA_PREFER_NONE = 0
    +    XML_CATA_PREFER_PUBLIC = 1
    +    XML_CATA_PREFER_SYSTEM = 2
    +}
    +

    Function: xmlACatalogAdd

    int	xmlACatalogAdd			(xmlCatalogPtr catal, 
    const xmlChar * type,
    const xmlChar * orig,
    const xmlChar * replace)
    +

    Add an entry in the catalog, it may overwrite existing but different entries.

    +
    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
    Returns:0 if successful, -1 otherwise

    Function: xmlACatalogDump

    void	xmlACatalogDump			(xmlCatalogPtr catal, 
    FILE * out)
    +

    Dump the given catalog to the given file.

    +
    catal:a Catalog
    out:the file.

    Function: xmlACatalogRemove

    int	xmlACatalogRemove		(xmlCatalogPtr catal, 
    const xmlChar * value)
    +

    Remove an entry from the catalog

    +
    catal:a Catalog
    value:the value to remove
    Returns:the number of entries removed if successful, -1 otherwise

    Function: xmlACatalogResolve

    xmlChar *	xmlACatalogResolve	(xmlCatalogPtr catal, 
    const xmlChar * pubID,
    const xmlChar * sysID)
    +

    Do a complete resolution lookup of an External Identifier

    +
    catal:a Catalog
    pubID:the public ID string
    sysID:the system ID string
    Returns:the URI of the resource or NULL if not found, it must be freed by the caller.

    Function: xmlACatalogResolvePublic

    xmlChar *	xmlACatalogResolvePublic	(xmlCatalogPtr catal, 
    const xmlChar * pubID)
    +

    Try to lookup the catalog local reference associated to a public ID in that catalog

    +
    catal:a Catalog
    pubID:the public ID string
    Returns:the local resource if found or NULL otherwise, the value returned must be freed by the caller.

    Function: xmlACatalogResolveSystem

    xmlChar *	xmlACatalogResolveSystem	(xmlCatalogPtr catal, 
    const xmlChar * sysID)
    +

    Try to lookup the catalog resource for a system ID

    +
    catal:a Catalog
    sysID:the system ID string
    Returns:the resource if found or NULL otherwise, the value returned must be freed by the caller.

    Function: xmlACatalogResolveURI

    xmlChar *	xmlACatalogResolveURI	(xmlCatalogPtr catal, 
    const xmlChar * URI)
    +

    Do a complete resolution lookup of an URI

    +
    catal:a Catalog
    URI:the URI
    Returns:the URI of the resource or NULL if not found, it must be freed by the caller.

    Function: xmlCatalogAdd

    int	xmlCatalogAdd			(const xmlChar * type, 
    const xmlChar * orig,
    const xmlChar * replace)
    +

    Add an entry in the catalog, it may overwrite existing but different entries. If called before any other catalog routine, allows to override the default shared catalog put in place by xmlInitializeCatalog();

    +
    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
    Returns:0 if successful, -1 otherwise

    Function: xmlCatalogAddLocal

    void *	xmlCatalogAddLocal		(void * catalogs, 
    const xmlChar * URL)
    +

    Add the new entry to the catalog list

    +
    catalogs:a document's list of catalogs
    URL:the URL to a new local catalog
    Returns:the updated list

    Function: xmlCatalogCleanup

    void	xmlCatalogCleanup		(void)
    +

    Free up all the memory associated with catalogs

    +

    Function: xmlCatalogConvert

    int	xmlCatalogConvert		(void)
    +

    Convert all the SGML catalog entries as XML ones

    +
    Returns:the number of entries converted if successful, -1 otherwise

    Function: xmlCatalogDump

    void	xmlCatalogDump			(FILE * out)
    +

    Dump all the global catalog content to the given file.

    +
    out:the file.

    Function: xmlCatalogFreeLocal

    void	xmlCatalogFreeLocal		(void * catalogs)
    +

    Free up the memory associated to the catalog list

    +
    catalogs:a document's list of catalogs

    Function: xmlCatalogGetDefaults

    xmlCatalogAllow	xmlCatalogGetDefaults	(void)
    +

    Used to get the user preference w.r.t. to what catalogs should be accepted

    +
    Returns:the current xmlCatalogAllow value

    Function: xmlCatalogGetPublic

    const xmlChar *	xmlCatalogGetPublic	(const xmlChar * pubID)
    +

    Try to lookup the catalog reference associated to a public ID DEPRECATED, use xmlCatalogResolvePublic()

    +
    pubID:the public ID string
    Returns:the resource if found or NULL otherwise.

    Function: xmlCatalogGetSystem

    const xmlChar *	xmlCatalogGetSystem	(const xmlChar * sysID)
    +

    Try to lookup the catalog reference associated to a system ID DEPRECATED, use xmlCatalogResolveSystem()

    +
    sysID:the system ID string
    Returns:the resource if found or NULL otherwise.

    Function: xmlCatalogIsEmpty

    int	xmlCatalogIsEmpty		(xmlCatalogPtr catal)
    +

    Check is a catalog is empty

    +
    catal:should this create an SGML catalog
    Returns:1 if the catalog is empty, 0 if not, amd -1 in case of error.

    Function: xmlCatalogLocalResolve

    xmlChar *	xmlCatalogLocalResolve	(void * catalogs, 
    const xmlChar * pubID,
    const xmlChar * sysID)
    +

    Do a complete resolution lookup of an External Identifier using a document's private catalog list

    +
    catalogs:a document's list of catalogs
    pubID:the public ID string
    sysID:the system ID string
    Returns:the URI of the resource or NULL if not found, it must be freed by the caller.

    Function: xmlCatalogLocalResolveURI

    xmlChar *	xmlCatalogLocalResolveURI	(void * catalogs, 
    const xmlChar * URI)
    +

    Do a complete resolution lookup of an URI using a document's private catalog list

    +
    catalogs:a document's list of catalogs
    URI:the URI
    Returns:the URI of the resource or NULL if not found, it must be freed by the caller.

    Function: xmlCatalogRemove

    int	xmlCatalogRemove		(const xmlChar * value)
    +

    Remove an entry from the catalog

    +
    value:the value to remove
    Returns:the number of entries removed if successful, -1 otherwise

    Function: xmlCatalogResolve

    xmlChar *	xmlCatalogResolve	(const xmlChar * pubID, 
    const xmlChar * sysID)
    +

    Do a complete resolution lookup of an External Identifier

    +
    pubID:the public ID string
    sysID:the system ID string
    Returns:the URI of the resource or NULL if not found, it must be freed by the caller.

    Function: xmlCatalogResolvePublic

    xmlChar *	xmlCatalogResolvePublic	(const xmlChar * pubID)
    +

    Try to lookup the catalog reference associated to a public ID

    +
    pubID:the public ID string
    Returns:the resource if found or NULL otherwise, the value returned must be freed by the caller.

    Function: xmlCatalogResolveSystem

    xmlChar *	xmlCatalogResolveSystem	(const xmlChar * sysID)
    +

    Try to lookup the catalog resource for a system ID

    +
    sysID:the system ID string
    Returns:the resource if found or NULL otherwise, the value returned must be freed by the caller.

    Function: xmlCatalogResolveURI

    xmlChar *	xmlCatalogResolveURI	(const xmlChar * URI)
    +

    Do a complete resolution lookup of an URI

    +
    URI:the URI
    Returns:the URI of the resource or NULL if not found, it must be freed by the caller.

    Function: xmlCatalogSetDebug

    int	xmlCatalogSetDebug		(int level)
    +

    Used to set the debug level for catalog operation, 0 disable debugging, 1 enable it

    +
    level:the debug level of catalogs required
    Returns:the previous value of the catalog debugging level

    Function: xmlCatalogSetDefaultPrefer

    xmlCatalogPrefer	xmlCatalogSetDefaultPrefer	(xmlCatalogPrefer prefer)
    +

    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

    +
    prefer:the default preference for delegation
    Returns:the previous value of the default preference for delegation

    Function: xmlCatalogSetDefaults

    void	xmlCatalogSetDefaults		(xmlCatalogAllow allow)
    +

    Used to set the user preference w.r.t. to what catalogs should be accepted

    +
    allow:what catalogs should be accepted

    Function: xmlConvertSGMLCatalog

    int	xmlConvertSGMLCatalog		(xmlCatalogPtr catal)
    +

    Convert all the SGML catalog entries as XML ones

    +
    catal:the catalog
    Returns:the number of entries converted if successful, -1 otherwise

    Function: xmlFreeCatalog

    void	xmlFreeCatalog			(xmlCatalogPtr catal)
    +

    Free the memory allocated to a Catalog

    +
    catal:a Catalog

    Function: xmlInitializeCatalog

    void	xmlInitializeCatalog		(void)
    +

    Do the catalog initialization. this function is not thread safe, catalog initialization should preferably be done once at startup

    +

    Function: xmlLoadACatalog

    xmlCatalogPtr	xmlLoadACatalog		(const char * filename)
    +

    Load the catalog and build the associated data structures. This can be either an XML Catalog or an SGML Catalog It will recurse in SGML CATALOG entries. On the other hand XML Catalogs are not handled recursively.

    +
    filename:a file path
    Returns:the catalog parsed or NULL in case of error

    Function: xmlLoadCatalog

    int	xmlLoadCatalog			(const char * filename)
    +

    Load the catalog and makes its definitions effective for the default external entity loader. It will recurse in SGML CATALOG entries. this function is not thread safe, catalog initialization should preferably be done once at startup

    +
    filename:a file path
    Returns:0 in case of success -1 in case of error

    Function: xmlLoadCatalogs

    void	xmlLoadCatalogs			(const char * pathss)
    +

    Load the catalogs and makes their definitions effective for the default external entity loader. this function is not thread safe, catalog initialization should preferably be done once at startup

    +
    pathss:a list of directories separated by a colon or a space.

    Function: xmlLoadSGMLSuperCatalog

    xmlCatalogPtr	xmlLoadSGMLSuperCatalog	(const char * filename)
    +

    Load an SGML super catalog. It won't expand CATALOG or DELEGATE references. This is only needed for manipulating SGML Super Catalogs like adding and removing CATALOG or DELEGATE entries.

    +
    filename:a file path
    Returns:the catalog parsed or NULL in case of error

    Function: xmlNewCatalog

    xmlCatalogPtr	xmlNewCatalog		(int sgml)
    +

    create a new Catalog.

    +
    sgml:should this create an SGML catalog
    Returns:the xmlCatalogPtr or NULL in case of error

    Function: xmlParseCatalogFile

    xmlDocPtr	xmlParseCatalogFile	(const char * filename)
    +

    parse an XML file and build a tree. It's like xmlParseFile() except it bypass all catalog lookups.

    +
    filename:the filename
    Returns:the resulting document tree or NULL in case of error

    Daniel Veillard

    diff --git a/doc/html/libxml-chvalid.html b/doc/html/libxml-chvalid.html new file mode 100644 index 0000000..177e9f6 --- /dev/null +++ b/doc/html/libxml-chvalid.html @@ -0,0 +1,72 @@ + + +Module chvalid from libxml2
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    Module chvalid from libxml2

    API Menu
    API Indexes
    Related links

    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

    Table of Contents

    #define xmlIsBaseCharQ
    #define xmlIsBaseChar_ch
    #define xmlIsBlankQ
    #define xmlIsBlank_ch
    #define xmlIsCharQ
    #define xmlIsChar_ch
    #define xmlIsCombiningQ
    #define xmlIsDigitQ
    #define xmlIsDigit_ch
    #define xmlIsExtenderQ
    #define xmlIsExtender_ch
    #define xmlIsIdeographicQ
    #define xmlIsPubidCharQ
    #define xmlIsPubidChar_ch
    Structure xmlChLRange
    struct _xmlChLRange +
    Typedef xmlChLRange * xmlChLRangePtr
    +
    Structure xmlChRangeGroup
    struct _xmlChRangeGroup +
    Typedef xmlChRangeGroup * xmlChRangeGroupPtr
    +
    Structure xmlChSRange
    struct _xmlChSRange +
    Typedef xmlChSRange * xmlChSRangePtr
    +
    int	xmlCharInRange			(unsigned int val, 
    const xmlChRangeGroup * rptr)
    +
    int	xmlIsBaseChar			(unsigned int ch)
    +
    int	xmlIsBlank			(unsigned int ch)
    +
    int	xmlIsChar			(unsigned int ch)
    +
    int	xmlIsCombining			(unsigned int ch)
    +
    int	xmlIsDigit			(unsigned int ch)
    +
    int	xmlIsExtender			(unsigned int ch)
    +
    int	xmlIsIdeographic		(unsigned int ch)
    +
    int	xmlIsPubidChar			(unsigned int ch)
    +

    Description

    +

    Macro: xmlIsBaseCharQ

    #define xmlIsBaseCharQ

    Automatically generated by genChRanges.py

    +

    Macro: xmlIsBaseChar_ch

    #define xmlIsBaseChar_ch

    Automatically generated by genChRanges.py

    +

    Macro: xmlIsBlankQ

    #define xmlIsBlankQ

    Automatically generated by genChRanges.py

    +

    Macro: xmlIsBlank_ch

    #define xmlIsBlank_ch

    Automatically generated by genChRanges.py

    +

    Macro: xmlIsCharQ

    #define xmlIsCharQ

    Automatically generated by genChRanges.py

    +

    Macro: xmlIsChar_ch

    #define xmlIsChar_ch

    Automatically generated by genChRanges.py

    +

    Macro: xmlIsCombiningQ

    #define xmlIsCombiningQ

    Automatically generated by genChRanges.py

    +

    Macro: xmlIsDigitQ

    #define xmlIsDigitQ

    Automatically generated by genChRanges.py

    +

    Macro: xmlIsDigit_ch

    #define xmlIsDigit_ch

    Automatically generated by genChRanges.py

    +

    Macro: xmlIsExtenderQ

    #define xmlIsExtenderQ

    Automatically generated by genChRanges.py

    +

    Macro: xmlIsExtender_ch

    #define xmlIsExtender_ch

    Automatically generated by genChRanges.py

    +

    Macro: xmlIsIdeographicQ

    #define xmlIsIdeographicQ

    Automatically generated by genChRanges.py

    +

    Macro: xmlIsPubidCharQ

    #define xmlIsPubidCharQ

    Automatically generated by genChRanges.py

    +

    Macro: xmlIsPubidChar_ch

    #define xmlIsPubidChar_ch

    Automatically generated by genChRanges.py

    +

    Structure xmlChLRange

    Structure xmlChLRange
    struct _xmlChLRange { + unsigned int low + unsigned int high +}

    Structure xmlChRangeGroup

    Structure xmlChRangeGroup
    struct _xmlChRangeGroup { + int nbShortRange + int nbLongRange + const xmlChSRange * shortRange : points to an array of ranges + const xmlChLRange * longRange +}

    Structure xmlChSRange

    Structure xmlChSRange
    struct _xmlChSRange { + unsigned short low + unsigned short high +}

    Function: xmlCharInRange

    int	xmlCharInRange			(unsigned int val, 
    const xmlChRangeGroup * rptr)
    +

    Does a binary search of the range table to determine if char is valid

    +
    val:character to be validated
    rptr:pointer to range to be used to validate
    Returns:true if character valid, false otherwise

    Function: xmlIsBaseChar

    int	xmlIsBaseChar			(unsigned int ch)
    +

    This function is DEPRECATED. Use xmlIsBaseChar_ch or xmlIsBaseCharQ instead

    +
    ch:character to validate
    Returns:true if argument valid, false otherwise

    Function: xmlIsBlank

    int	xmlIsBlank			(unsigned int ch)
    +

    This function is DEPRECATED. Use xmlIsBlank_ch or xmlIsBlankQ instead

    +
    ch:character to validate
    Returns:true if argument valid, false otherwise

    Function: xmlIsChar

    int	xmlIsChar			(unsigned int ch)
    +

    This function is DEPRECATED. Use xmlIsChar_ch or xmlIsCharQ instead

    +
    ch:character to validate
    Returns:true if argument valid, false otherwise

    Function: xmlIsCombining

    int	xmlIsCombining			(unsigned int ch)
    +

    This function is DEPRECATED. Use xmlIsCombiningQ instead

    +
    ch:character to validate
    Returns:true if argument valid, false otherwise

    Function: xmlIsDigit

    int	xmlIsDigit			(unsigned int ch)
    +

    This function is DEPRECATED. Use xmlIsDigit_ch or xmlIsDigitQ instead

    +
    ch:character to validate
    Returns:true if argument valid, false otherwise

    Function: xmlIsExtender

    int	xmlIsExtender			(unsigned int ch)
    +

    This function is DEPRECATED. Use xmlIsExtender_ch or xmlIsExtenderQ instead

    +
    ch:character to validate
    Returns:true if argument valid, false otherwise

    Function: xmlIsIdeographic

    int	xmlIsIdeographic		(unsigned int ch)
    +

    This function is DEPRECATED. Use xmlIsIdeographicQ instead

    +
    ch:character to validate
    Returns:true if argument valid, false otherwise

    Function: xmlIsPubidChar

    int	xmlIsPubidChar			(unsigned int ch)
    +

    This function is DEPRECATED. Use xmlIsPubidChar_ch or xmlIsPubidCharQ instead

    +
    ch:character to validate
    Returns:true if argument valid, false otherwise

    Daniel Veillard

    diff --git a/doc/html/libxml-debugXML.html b/doc/html/libxml-debugXML.html new file mode 100644 index 0000000..3426e14 --- /dev/null +++ b/doc/html/libxml-debugXML.html @@ -0,0 +1,120 @@ + + +Module debugXML from libxml2
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    Module debugXML from libxml2

    API Menu
    API Indexes
    Related links

    Interfaces to a set of routines used for debugging the tree produced by the XML parser.

    Table of Contents

    Structure xmlShellCtxt
    struct _xmlShellCtxt +
    Typedef xmlShellCtxt * xmlShellCtxtPtr
    +
    const char *	xmlBoolToText		(int boolval)
    +
    int	xmlDebugCheckDocument		(FILE * output, 
    xmlDocPtr doc)
    +
    void	xmlDebugDumpAttr		(FILE * output, 
    xmlAttrPtr attr,
    int depth)
    +
    void	xmlDebugDumpAttrList		(FILE * output, 
    xmlAttrPtr attr,
    int depth)
    +
    void	xmlDebugDumpDTD			(FILE * output, 
    xmlDtdPtr dtd)
    +
    void	xmlDebugDumpDocument		(FILE * output, 
    xmlDocPtr doc)
    +
    void	xmlDebugDumpDocumentHead	(FILE * output, 
    xmlDocPtr doc)
    +
    void	xmlDebugDumpEntities		(FILE * output, 
    xmlDocPtr doc)
    +
    void	xmlDebugDumpNode		(FILE * output, 
    xmlNodePtr node,
    int depth)
    +
    void	xmlDebugDumpNodeList		(FILE * output, 
    xmlNodePtr node,
    int depth)
    +
    void	xmlDebugDumpOneNode		(FILE * output, 
    xmlNodePtr node,
    int depth)
    +
    void	xmlDebugDumpString		(FILE * output, 
    const xmlChar * str)
    +
    int	xmlLsCountNode			(xmlNodePtr node)
    +
    void	xmlLsOneNode			(FILE * output, 
    xmlNodePtr node)
    +
    void	xmlShell			(xmlDocPtr doc, 
    char * filename,
    xmlShellReadlineFunc input,
    FILE * output)
    +
    int	xmlShellBase			(xmlShellCtxtPtr ctxt, 
    char * arg,
    xmlNodePtr node,
    xmlNodePtr node2)
    +
    int	xmlShellCat			(xmlShellCtxtPtr ctxt, 
    char * arg,
    xmlNodePtr node,
    xmlNodePtr node2)
    +
    Function type: xmlShellCmd
    +int	xmlShellCmd			(xmlShellCtxtPtr ctxt, 
    char * arg,
    xmlNodePtr node,
    xmlNodePtr node2) +
    +
    int	xmlShellDir			(xmlShellCtxtPtr ctxt, 
    char * arg,
    xmlNodePtr node,
    xmlNodePtr node2)
    +
    int	xmlShellDu			(xmlShellCtxtPtr ctxt, 
    char * arg,
    xmlNodePtr tree,
    xmlNodePtr node2)
    +
    int	xmlShellList			(xmlShellCtxtPtr ctxt, 
    char * arg,
    xmlNodePtr node,
    xmlNodePtr node2)
    +
    int	xmlShellLoad			(xmlShellCtxtPtr ctxt, 
    char * filename,
    xmlNodePtr node,
    xmlNodePtr node2)
    +
    void	xmlShellPrintNode		(xmlNodePtr node)
    +
    void	xmlShellPrintXPathError		(int errorType, 
    const char * arg)
    +
    void	xmlShellPrintXPathResult	(xmlXPathObjectPtr list)
    +
    int	xmlShellPwd			(xmlShellCtxtPtr ctxt, 
    char * buffer,
    xmlNodePtr node,
    xmlNodePtr node2)
    +
    Function type: xmlShellReadlineFunc
    +char *	xmlShellReadlineFunc		(char * prompt)
    +
    +
    int	xmlShellSave			(xmlShellCtxtPtr ctxt, 
    char * filename,
    xmlNodePtr node,
    xmlNodePtr node2)
    +
    int	xmlShellValidate		(xmlShellCtxtPtr ctxt, 
    char * dtd,
    xmlNodePtr node,
    xmlNodePtr node2)
    +
    int	xmlShellWrite			(xmlShellCtxtPtr ctxt, 
    char * filename,
    xmlNodePtr node,
    xmlNodePtr node2)
    +

    Description

    +

    Structure xmlShellCtxt

    Structure xmlShellCtxt
    struct _xmlShellCtxt { + char * filename + xmlDocPtr doc + xmlNodePtr node + xmlXPathContextPtr pctxt + int loaded + FILE * output + xmlShellReadlineFunc input +}

    Function: xmlBoolToText

    const char *	xmlBoolToText		(int boolval)
    +

    Convenient way to turn bool into text

    +
    boolval:a bool to turn into text
    Returns:a pointer to either "True" or "False"

    Function: xmlDebugCheckDocument

    int	xmlDebugCheckDocument		(FILE * output, 
    xmlDocPtr doc)
    +

    Check the document for potential content problems, and output the errors to @output

    +
    output:the FILE * for the output
    doc:the document
    Returns:the number of errors found

    Function: xmlDebugDumpAttr

    void	xmlDebugDumpAttr		(FILE * output, 
    xmlAttrPtr attr,
    int depth)
    +

    Dumps debug information for the attribute

    +
    output:the FILE * for the output
    attr:the attribute
    depth:the indentation level.

    Function: xmlDebugDumpAttrList

    void	xmlDebugDumpAttrList		(FILE * output, 
    xmlAttrPtr attr,
    int depth)
    +

    Dumps debug information for the attribute list

    +
    output:the FILE * for the output
    attr:the attribute list
    depth:the indentation level.

    Function: xmlDebugDumpDTD

    void	xmlDebugDumpDTD			(FILE * output, 
    xmlDtdPtr dtd)
    +

    Dumps debug information for the DTD

    +
    output:the FILE * for the output
    dtd:the DTD

    Function: xmlDebugDumpDocument

    void	xmlDebugDumpDocument		(FILE * output, 
    xmlDocPtr doc)
    +

    Dumps debug information for the document, it's recursive

    +
    output:the FILE * for the output
    doc:the document

    Function: xmlDebugDumpDocumentHead

    void	xmlDebugDumpDocumentHead	(FILE * output, 
    xmlDocPtr doc)
    +

    Dumps debug information cncerning the document, not recursive

    +
    output:the FILE * for the output
    doc:the document

    Function: xmlDebugDumpEntities

    void	xmlDebugDumpEntities		(FILE * output, 
    xmlDocPtr doc)
    +

    Dumps debug information for all the entities in use by the document

    +
    output:the FILE * for the output
    doc:the document

    Function: xmlDebugDumpNode

    void	xmlDebugDumpNode		(FILE * output, 
    xmlNodePtr node,
    int depth)
    +

    Dumps debug information for the element node, it is recursive

    +
    output:the FILE * for the output
    node:the node
    depth:the indentation level.

    Function: xmlDebugDumpNodeList

    void	xmlDebugDumpNodeList		(FILE * output, 
    xmlNodePtr node,
    int depth)
    +

    Dumps debug information for the list of element node, it is recursive

    +
    output:the FILE * for the output
    node:the node list
    depth:the indentation level.

    Function: xmlDebugDumpOneNode

    void	xmlDebugDumpOneNode		(FILE * output, 
    xmlNodePtr node,
    int depth)
    +

    Dumps debug information for the element node, it is not recursive

    +
    output:the FILE * for the output
    node:the node
    depth:the indentation level.

    Function: xmlDebugDumpString

    void	xmlDebugDumpString		(FILE * output, 
    const xmlChar * str)
    +

    Dumps informations about the string, shorten it if necessary

    +
    output:the FILE * for the output
    str:the string

    Function: xmlLsCountNode

    int	xmlLsCountNode			(xmlNodePtr node)
    +

    Count the children of @node.

    +
    node:the node to count
    Returns:the number of children of @node.

    Function: xmlLsOneNode

    void	xmlLsOneNode			(FILE * output, 
    xmlNodePtr node)
    +

    Dump to @output the type and name of @node.

    +
    output:the FILE * for the output
    node:the node to dump

    Function: xmlShell

    void	xmlShell			(xmlDocPtr doc, 
    char * filename,
    xmlShellReadlineFunc input,
    FILE * output)
    +

    Implements the XML shell This allow to load, validate, view, modify and save a document using a environment similar to a UNIX commandline.

    +
    doc:the initial document
    filename:the output buffer
    input:the line reading function
    output:the output FILE*, defaults to stdout if NULL

    Function: xmlShellBase

    int	xmlShellBase			(xmlShellCtxtPtr ctxt, 
    char * arg,
    xmlNodePtr node,
    xmlNodePtr node2)
    +

    Implements the XML shell function "base" dumps the current XML base of the node

    +
    ctxt:the shell context
    arg:unused
    node:a node
    node2:unused
    Returns:0

    Function: xmlShellCat

    int	xmlShellCat			(xmlShellCtxtPtr ctxt, 
    char * arg,
    xmlNodePtr node,
    xmlNodePtr node2)
    +

    Implements the XML shell function "cat" dumps the serialization node content (XML or HTML).

    +
    ctxt:the shell context
    arg:unused
    node:a node
    node2:unused
    Returns:0

    Function type: xmlShellCmd

    Function type: xmlShellCmd
    +int	xmlShellCmd			(xmlShellCtxtPtr ctxt, 
    char * arg,
    xmlNodePtr node,
    xmlNodePtr node2) +

    This is a generic signature for the XML shell functions.

    ctxt:a shell context
    arg:a string argument
    node:a first node
    node2:a second node
    Returns:an int, negative returns indicating errors.

    +

    Function: xmlShellDir

    int	xmlShellDir			(xmlShellCtxtPtr ctxt, 
    char * arg,
    xmlNodePtr node,
    xmlNodePtr node2)
    +

    Implements the XML shell function "dir" dumps informations about the node (namespace, attributes, content).

    +
    ctxt:the shell context
    arg:unused
    node:a node
    node2:unused
    Returns:0

    Function: xmlShellDu

    int	xmlShellDu			(xmlShellCtxtPtr ctxt, 
    char * arg,
    xmlNodePtr tree,
    xmlNodePtr node2)
    +

    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.

    +
    ctxt:the shell context
    arg:unused
    tree:a node defining a subtree
    node2:unused
    Returns:0 or -1 in case of error

    Function: xmlShellList

    int	xmlShellList			(xmlShellCtxtPtr ctxt, 
    char * arg,
    xmlNodePtr node,
    xmlNodePtr node2)
    +

    Implements the XML shell function "ls" Does an Unix like listing of the given node (like a directory)

    +
    ctxt:the shell context
    arg:unused
    node:a node
    node2:unused
    Returns:0

    Function: xmlShellLoad

    int	xmlShellLoad			(xmlShellCtxtPtr ctxt, 
    char * filename,
    xmlNodePtr node,
    xmlNodePtr node2)
    +

    Implements the XML shell function "load" loads a new document specified by the filename

    +
    ctxt:the shell context
    filename:the file name
    node:unused
    node2:unused
    Returns:0 or -1 if loading failed

    Function: xmlShellPrintNode

    void	xmlShellPrintNode		(xmlNodePtr node)
    +

    Print node to the output FILE

    +
    node:a non-null node to print to the output FILE

    Function: xmlShellPrintXPathError

    void	xmlShellPrintXPathError		(int errorType, 
    const char * arg)
    +

    Print the xpath error to libxml default error channel

    +
    errorType:valid xpath error id
    arg:the argument that cause xpath to fail

    Function: xmlShellPrintXPathResult

    void	xmlShellPrintXPathResult	(xmlXPathObjectPtr list)
    +

    Prints result to the output FILE

    +
    list:a valid result generated by an xpath evaluation

    Function: xmlShellPwd

    int	xmlShellPwd			(xmlShellCtxtPtr ctxt, 
    char * buffer,
    xmlNodePtr node,
    xmlNodePtr node2)
    +

    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.

    +
    ctxt:the shell context
    buffer:the output buffer
    node:a node
    node2:unused
    Returns:0 or -1 in case of error

    Function type: xmlShellReadlineFunc

    Function type: xmlShellReadlineFunc
    +char *	xmlShellReadlineFunc		(char * prompt)
    +

    This is a generic signature for the XML shell input function.

    prompt:a string prompt
    Returns:a string which will be freed by the Shell.

    +

    Function: xmlShellSave

    int	xmlShellSave			(xmlShellCtxtPtr ctxt, 
    char * filename,
    xmlNodePtr node,
    xmlNodePtr node2)
    +

    Implements the XML shell function "save" Write the current document to the filename, or it's original name

    +
    ctxt:the shell context
    filename:the file name (optional)
    node:unused
    node2:unused
    Returns:0 or -1 in case of error

    Function: xmlShellValidate

    int	xmlShellValidate		(xmlShellCtxtPtr ctxt, 
    char * dtd,
    xmlNodePtr node,
    xmlNodePtr node2)
    +

    Implements the XML shell function "validate" Validate the document, if a DTD path is provided, then the validation is done against the given DTD.

    +
    ctxt:the shell context
    dtd:the DTD URI (optional)
    node:unused
    node2:unused
    Returns:0 or -1 in case of error

    Function: xmlShellWrite

    int	xmlShellWrite			(xmlShellCtxtPtr ctxt, 
    char * filename,
    xmlNodePtr node,
    xmlNodePtr node2)
    +

    Implements the XML shell function "write" Write the current node to the filename, it saves the serialization of the subtree under the @node specified

    +
    ctxt:the shell context
    filename:the file name
    node:a node in the tree
    node2:unused
    Returns:0 or -1 in case of error

    Daniel Veillard

    diff --git a/doc/html/libxml-dict.html b/doc/html/libxml-dict.html new file mode 100644 index 0000000..74e243b --- /dev/null +++ b/doc/html/libxml-dict.html @@ -0,0 +1,58 @@ + + +Module dict from libxml2
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    Module dict from libxml2

    API Menu
    API Indexes
    Related links

    dictionary of reusable strings, just used to avoid allocation and freeing operations.

    Table of Contents

    Structure xmlDict
    struct _xmlDict +The content of this structure is not made public by the API. +
    Typedef xmlDict * xmlDictPtr
    +
    void	xmlDictCleanup			(void)
    +
    xmlDictPtr	xmlDictCreate		(void)
    +
    xmlDictPtr	xmlDictCreateSub	(xmlDictPtr sub)
    +
    const xmlChar *	xmlDictExists		(xmlDictPtr dict, 
    const xmlChar * name,
    int len)
    +
    void	xmlDictFree			(xmlDictPtr dict)
    +
    size_t	xmlDictGetUsage			(xmlDictPtr dict)
    +
    const xmlChar *	xmlDictLookup		(xmlDictPtr dict, 
    const xmlChar * name,
    int len)
    +
    int	xmlDictOwns			(xmlDictPtr dict, 
    const xmlChar * str)
    +
    const xmlChar *	xmlDictQLookup		(xmlDictPtr dict, 
    const xmlChar * prefix,
    const xmlChar * name)
    +
    int	xmlDictReference		(xmlDictPtr dict)
    +
    size_t	xmlDictSetLimit			(xmlDictPtr dict, 
    size_t limit)
    +
    int	xmlDictSize			(xmlDictPtr dict)
    +
    int	xmlInitializeDict		(void)
    +

    Description

    +

    Structure xmlDict

    Structure xmlDict
    struct _xmlDict { +The content of this structure is not made public by the API. +}

    Function: xmlDictCleanup

    void	xmlDictCleanup			(void)
    +

    Free the dictionary mutex. Do not call unless sure the library is not in use anymore !

    +

    Function: xmlDictCreate

    xmlDictPtr	xmlDictCreate		(void)
    +

    Create a new dictionary

    +
    Returns:the newly created dictionary, or NULL if an error occured.

    Function: xmlDictCreateSub

    xmlDictPtr	xmlDictCreateSub	(xmlDictPtr sub)
    +

    Create a new dictionary, inheriting strings from the read-only dictionary @sub. On lookup, strings are first searched in the new dictionary, then in @sub, and if not found are created in the new dictionary.

    +
    sub:an existing dictionary
    Returns:the newly created dictionary, or NULL if an error occured.

    Function: xmlDictExists

    const xmlChar *	xmlDictExists		(xmlDictPtr dict, 
    const xmlChar * name,
    int len)
    +

    Check if the @name exists in the dictionary @dict.

    +
    dict:the dictionary
    name:the name of the userdata
    len:the length of the name, if -1 it is recomputed
    Returns:the internal copy of the name or NULL if not found.

    Function: xmlDictFree

    void	xmlDictFree			(xmlDictPtr dict)
    +

    Free the hash @dict and its contents. The userdata is deallocated with @f if provided.

    +
    dict:the dictionary

    Function: xmlDictGetUsage

    size_t	xmlDictGetUsage			(xmlDictPtr dict)
    +

    Get how much memory is used by a dictionary for strings Added in 2.9.0

    +
    dict:the dictionary
    Returns:the amount of strings allocated

    Function: xmlDictLookup

    const xmlChar *	xmlDictLookup		(xmlDictPtr dict, 
    const xmlChar * name,
    int len)
    +

    Add the @name to the dictionary @dict if not present.

    +
    dict:the dictionary
    name:the name of the userdata
    len:the length of the name, if -1 it is recomputed
    Returns:the internal copy of the name or NULL in case of internal error

    Function: xmlDictOwns

    int	xmlDictOwns			(xmlDictPtr dict, 
    const xmlChar * str)
    +

    check if a string is owned by the disctionary

    +
    dict:the dictionary
    str:the string
    Returns:1 if true, 0 if false and -1 in case of error -1 in case of error

    Function: xmlDictQLookup

    const xmlChar *	xmlDictQLookup		(xmlDictPtr dict, 
    const xmlChar * prefix,
    const xmlChar * name)
    +

    Add the QName @prefix:@name to the hash @dict if not present.

    +
    dict:the dictionary
    prefix:the prefix
    name:the name
    Returns:the internal copy of the QName or NULL in case of internal error

    Function: xmlDictReference

    int	xmlDictReference		(xmlDictPtr dict)
    +

    Increment the reference counter of a dictionary

    +
    dict:the dictionary
    Returns:0 in case of success and -1 in case of error

    Function: xmlDictSetLimit

    size_t	xmlDictSetLimit			(xmlDictPtr dict, 
    size_t limit)
    +

    Set a size limit for the dictionary Added in 2.9.0

    +
    dict:the dictionary
    limit:the limit in bytes
    Returns:the previous limit of the dictionary or 0

    Function: xmlDictSize

    int	xmlDictSize			(xmlDictPtr dict)
    +

    Query the number of elements installed in the hash @dict.

    +
    dict:the dictionary
    Returns:the number of elements in the dictionary or -1 in case of error

    Function: xmlInitializeDict

    int	xmlInitializeDict		(void)
    +

    Do the dictionary mutex initialization. this function is deprecated

    +
    Returns:0 if initialization was already done, and 1 if that call led to the initialization

    Daniel Veillard

    diff --git a/doc/html/libxml-encoding.html b/doc/html/libxml-encoding.html new file mode 100644 index 0000000..70f56f8 --- /dev/null +++ b/doc/html/libxml-encoding.html @@ -0,0 +1,124 @@ + + +Module encoding from libxml2
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    Module encoding from libxml2

    API Menu
    API Indexes
    Related links

    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.

    Table of Contents

    Structure uconv_t
    struct _uconv_t +
    Enum xmlCharEncoding
    +
    Structure xmlCharEncodingHandler
    struct _xmlCharEncodingHandler +
    Typedef xmlCharEncodingHandler * xmlCharEncodingHandlerPtr
    +
    int	UTF8Toisolat1			(unsigned char * out, 
    int * outlen,
    const unsigned char * in,
    int * inlen)
    +
    int	isolat1ToUTF8			(unsigned char * out, 
    int * outlen,
    const unsigned char * in,
    int * inlen)
    +
    int	xmlAddEncodingAlias		(const char * name, 
    const char * alias)
    +
    int	xmlCharEncCloseFunc		(xmlCharEncodingHandler * handler)
    +
    int	xmlCharEncFirstLine		(xmlCharEncodingHandler * handler, 
    xmlBufferPtr out,
    xmlBufferPtr in)
    +
    int	xmlCharEncInFunc		(xmlCharEncodingHandler * handler, 
    xmlBufferPtr out,
    xmlBufferPtr in)
    +
    int	xmlCharEncOutFunc		(xmlCharEncodingHandler * handler, 
    xmlBufferPtr out,
    xmlBufferPtr in)
    +
    Function type: xmlCharEncodingInputFunc
    +int	xmlCharEncodingInputFunc	(unsigned char * out, 
    int * outlen,
    const unsigned char * in,
    int * inlen) +
    +
    Function type: xmlCharEncodingOutputFunc
    +int	xmlCharEncodingOutputFunc	(unsigned char * out, 
    int * outlen,
    const unsigned char * in,
    int * inlen) +
    +
    void	xmlCleanupCharEncodingHandlers	(void)
    +
    void	xmlCleanupEncodingAliases	(void)
    +
    int	xmlDelEncodingAlias		(const char * alias)
    +
    xmlCharEncoding	xmlDetectCharEncoding	(const unsigned char * in, 
    int len)
    +
    xmlCharEncodingHandlerPtr	xmlFindCharEncodingHandler	(const char * name)
    +
    xmlCharEncodingHandlerPtr	xmlGetCharEncodingHandler	(xmlCharEncoding enc)
    +
    const char *	xmlGetCharEncodingName	(xmlCharEncoding enc)
    +
    const char *	xmlGetEncodingAlias	(const char * alias)
    +
    void	xmlInitCharEncodingHandlers	(void)
    +
    xmlCharEncodingHandlerPtr	xmlNewCharEncodingHandler	(const char * name, 
    xmlCharEncodingInputFunc input,
    xmlCharEncodingOutputFunc output)
    +
    xmlCharEncoding	xmlParseCharEncoding	(const char * name)
    +
    void	xmlRegisterCharEncodingHandler	(xmlCharEncodingHandlerPtr handler)
    +

    Description

    +

    Structure uconv_t

    Structure uconv_t
    struct _uconv_t { + UConverter * uconv : for conversion between an encoding and + UConverter * utf8 : for conversion between UTF-8 and UTF-16 +}

    Enum xmlCharEncoding

    Enum xmlCharEncoding {
    +    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
    +}
    +

    Structure xmlCharEncodingHandler

    Structure xmlCharEncodingHandler
    struct _xmlCharEncodingHandler { + char * name + xmlCharEncodingInputFunc input + xmlCharEncodingOutputFunc output + iconv_t iconv_in + iconv_t iconv_out + uconv_t * uconv_in + uconv_t * uconv_out +}

    Function: UTF8Toisolat1

    int	UTF8Toisolat1			(unsigned char * out, 
    int * outlen,
    const unsigned char * in,
    int * inlen)
    +

    Take a block of UTF-8 chars in and try to convert it to an ISO Latin 1 block of chars out.

    +
    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
    Returns:the number of bytes written 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.

    Function: isolat1ToUTF8

    int	isolat1ToUTF8			(unsigned char * out, 
    int * outlen,
    const unsigned char * in,
    int * inlen)
    +

    Take a block of ISO Latin 1 chars in and try to convert it to an UTF-8 block of chars out.

    +
    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:the number of bytes written 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.

    Function: xmlAddEncodingAlias

    int	xmlAddEncodingAlias		(const char * name, 
    const char * alias)
    +

    Registers an alias @alias for an encoding named @name. Existing alias will be overwritten.

    +
    name:the encoding name as parsed, in UTF-8 format (ASCII actually)
    alias:the alias name as parsed, in UTF-8 format (ASCII actually)
    Returns:0 in case of success, -1 in case of error

    Function: xmlCharEncCloseFunc

    int	xmlCharEncCloseFunc		(xmlCharEncodingHandler * handler)
    +

    Generic front-end for encoding handler close function

    +
    handler:char enconding transformation data structure
    Returns:0 if success, or -1 in case of error

    Function: xmlCharEncFirstLine

    int	xmlCharEncFirstLine		(xmlCharEncodingHandler * handler, 
    xmlBufferPtr out,
    xmlBufferPtr in)
    +

    Front-end for the encoding handler input function, but handle only the very first line, i.e. limit itself to 45 chars.

    +
    handler:char enconding transformation data structure
    out:an xmlBuffer for the output.
    in:an xmlBuffer for the input
    Returns:the number of byte written if success, or -1 general error -2 if the transcoding fails (for *in is not valid utf8 string or the result of transformation can't fit into the encoding we want), or

    Function: xmlCharEncInFunc

    int	xmlCharEncInFunc		(xmlCharEncodingHandler * handler, 
    xmlBufferPtr out,
    xmlBufferPtr in)
    +

    Generic front-end for the encoding handler input function

    +
    handler:char encoding transformation data structure
    out:an xmlBuffer for the output.
    in:an xmlBuffer for the input
    Returns:the number of byte written if success, or -1 general error -2 if the transcoding fails (for *in is not valid utf8 string or the result of transformation can't fit into the encoding we want), or

    Function: xmlCharEncOutFunc

    int	xmlCharEncOutFunc		(xmlCharEncodingHandler * handler, 
    xmlBufferPtr out,
    xmlBufferPtr in)
    +

    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.

    +
    handler:char enconding transformation data structure
    out:an xmlBuffer for the output.
    in:an xmlBuffer for the input
    Returns:the number of byte written if success, or -1 general error -2 if the transcoding fails (for *in is not valid utf8 string or the result of transformation can't fit into the encoding we want), or

    Function type: xmlCharEncodingInputFunc

    Function type: xmlCharEncodingInputFunc
    +int	xmlCharEncodingInputFunc	(unsigned char * out, 
    int * outlen,
    const unsigned char * in,
    int * inlen) +

    Take a block of chars in the original encoding and try to convert it to an UTF-8 block of chars out.

    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
    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.

    +

    Function type: xmlCharEncodingOutputFunc

    Function type: xmlCharEncodingOutputFunc
    +int	xmlCharEncodingOutputFunc	(unsigned char * out, 
    int * outlen,
    const unsigned char * in,
    int * inlen) +

    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.

    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
    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.

    +

    Function: xmlCleanupCharEncodingHandlers

    void	xmlCleanupCharEncodingHandlers	(void)
    +

    Cleanup the memory allocated for the char encoding support, it unregisters all the encoding handlers and the aliases.

    +

    Function: xmlCleanupEncodingAliases

    void	xmlCleanupEncodingAliases	(void)
    +

    Unregisters all aliases

    +

    Function: xmlDelEncodingAlias

    int	xmlDelEncodingAlias		(const char * alias)
    +

    Unregisters an encoding alias @alias

    +
    alias:the alias name as parsed, in UTF-8 format (ASCII actually)
    Returns:0 in case of success, -1 in case of error

    Function: xmlDetectCharEncoding

    xmlCharEncoding	xmlDetectCharEncoding	(const unsigned char * in, 
    int len)
    +

    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.

    +
    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
    Returns:one of the XML_CHAR_ENCODING_... values.

    Function: xmlFindCharEncodingHandler

    xmlCharEncodingHandlerPtr	xmlFindCharEncodingHandler	(const char * name)
    +

    Search in the registered set the handler able to read/write that encoding.

    +
    name:a string describing the char encoding.
    Returns:the handler or NULL if not found

    Function: xmlGetCharEncodingHandler

    xmlCharEncodingHandlerPtr	xmlGetCharEncodingHandler	(xmlCharEncoding enc)
    +

    Search in the registered set the handler able to read/write that encoding.

    +
    enc:an xmlCharEncoding value.
    Returns:the handler or NULL if not found

    Function: xmlGetCharEncodingName

    const char *	xmlGetCharEncodingName	(xmlCharEncoding enc)
    +

    The "canonical" name for XML encoding. C.f. http://www.w3.org/TR/REC-xml#charencoding Section 4.3.3 Character Encoding in Entities

    +
    enc:the encoding
    Returns:the canonical name for the given encoding

    Function: xmlGetEncodingAlias

    const char *	xmlGetEncodingAlias	(const char * alias)
    +

    Lookup an encoding name for the given alias.

    +
    alias:the alias name as parsed, in UTF-8 format (ASCII actually)
    Returns:NULL if not found, otherwise the original name

    Function: xmlInitCharEncodingHandlers

    void	xmlInitCharEncodingHandlers	(void)
    +

    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.

    +

    Function: xmlNewCharEncodingHandler

    xmlCharEncodingHandlerPtr	xmlNewCharEncodingHandler	(const char * name, 
    xmlCharEncodingInputFunc input,
    xmlCharEncodingOutputFunc output)
    +

    Create and registers an xmlCharEncodingHandler.

    +
    name:the encoding name, in UTF-8 format (ASCII actually)
    input:the xmlCharEncodingInputFunc to read that encoding
    output:the xmlCharEncodingOutputFunc to write that encoding
    Returns:the xmlCharEncodingHandlerPtr created (or NULL in case of error).

    Function: xmlParseCharEncoding

    xmlCharEncoding	xmlParseCharEncoding	(const char * name)
    +

    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.

    +
    name:the encoding name as parsed, in UTF-8 format (ASCII actually)
    Returns:one of the XML_CHAR_ENCODING_... values or XML_CHAR_ENCODING_NONE if not recognized.

    Function: xmlRegisterCharEncodingHandler

    void	xmlRegisterCharEncodingHandler	(xmlCharEncodingHandlerPtr handler)
    +

    Register the char encoding handler, surprising, isn't it ?

    +
    handler:the xmlCharEncodingHandlerPtr handler block

    Daniel Veillard

    diff --git a/doc/html/libxml-entities.html b/doc/html/libxml-entities.html new file mode 100644 index 0000000..b7d1455 --- /dev/null +++ b/doc/html/libxml-entities.html @@ -0,0 +1,79 @@ + + +Module entities from libxml2
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    Module entities from libxml2

    API Menu
    API Indexes
    Related links

    this module provides some of the entity API needed for the parser and applications.

    Table of Contents

    Structure xmlEntitiesTable
    struct _xmlHashTable +The content of this structure is not made public by the API. +
    Typedef xmlEntitiesTable * xmlEntitiesTablePtr
    +
    Enum xmlEntityType
    +
    xmlEntityPtr	xmlAddDocEntity		(xmlDocPtr doc, 
    const xmlChar * name,
    int type,
    const xmlChar * ExternalID,
    const xmlChar * SystemID,
    const xmlChar * content)
    +
    xmlEntityPtr	xmlAddDtdEntity		(xmlDocPtr doc, 
    const xmlChar * name,
    int type,
    const xmlChar * ExternalID,
    const xmlChar * SystemID,
    const xmlChar * content)
    +
    void	xmlCleanupPredefinedEntities	(void)
    +
    xmlEntitiesTablePtr	xmlCopyEntitiesTable	(xmlEntitiesTablePtr table)
    +
    xmlEntitiesTablePtr	xmlCreateEntitiesTable	(void)
    +
    void	xmlDumpEntitiesTable		(xmlBufferPtr buf, 
    xmlEntitiesTablePtr table)
    +
    void	xmlDumpEntityDecl		(xmlBufferPtr buf, 
    xmlEntityPtr ent)
    +
    const xmlChar *	xmlEncodeEntities	(xmlDocPtr doc, 
    const xmlChar * input)
    +
    xmlChar *	xmlEncodeEntitiesReentrant	(xmlDocPtr doc, 
    const xmlChar * input)
    +
    xmlChar *	xmlEncodeSpecialChars	(const xmlDoc * doc, 
    const xmlChar * input)
    +
    void	xmlFreeEntitiesTable		(xmlEntitiesTablePtr table)
    +
    xmlEntityPtr	xmlGetDocEntity		(const xmlDoc * doc, 
    const xmlChar * name)
    +
    xmlEntityPtr	xmlGetDtdEntity		(xmlDocPtr doc, 
    const xmlChar * name)
    +
    xmlEntityPtr	xmlGetParameterEntity	(xmlDocPtr doc, 
    const xmlChar * name)
    +
    xmlEntityPtr	xmlGetPredefinedEntity	(const xmlChar * name)
    +
    void	xmlInitializePredefinedEntities	(void)
    +
    xmlEntityPtr	xmlNewEntity		(xmlDocPtr doc, 
    const xmlChar * name,
    int type,
    const xmlChar * ExternalID,
    const xmlChar * SystemID,
    const xmlChar * content)
    +

    Description

    +

    Structure xmlEntitiesTable

    Structure xmlEntitiesTable
    struct _xmlHashTable { +The content of this structure is not made public by the API. +}

    Enum xmlEntityType

    Enum xmlEntityType {
    +    XML_INTERNAL_GENERAL_ENTITY = 1
    +    XML_EXTERNAL_GENERAL_PARSED_ENTITY = 2
    +    XML_EXTERNAL_GENERAL_UNPARSED_ENTITY = 3
    +    XML_INTERNAL_PARAMETER_ENTITY = 4
    +    XML_EXTERNAL_PARAMETER_ENTITY = 5
    +    XML_INTERNAL_PREDEFINED_ENTITY = 6
    +}
    +

    Function: xmlAddDocEntity

    xmlEntityPtr	xmlAddDocEntity		(xmlDocPtr doc, 
    const xmlChar * name,
    int type,
    const xmlChar * ExternalID,
    const xmlChar * SystemID,
    const xmlChar * content)
    +

    Register a new entity for this document.

    +
    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
    Returns:a pointer to the entity or NULL in case of error

    Function: xmlAddDtdEntity

    xmlEntityPtr	xmlAddDtdEntity		(xmlDocPtr doc, 
    const xmlChar * name,
    int type,
    const xmlChar * ExternalID,
    const xmlChar * SystemID,
    const xmlChar * content)
    +

    Register a new entity for this document DTD external subset.

    +
    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
    Returns:a pointer to the entity or NULL in case of error

    Function: xmlCleanupPredefinedEntities

    void	xmlCleanupPredefinedEntities	(void)
    +

    Cleanup up the predefined entities table. Deprecated call

    +

    Function: xmlCopyEntitiesTable

    xmlEntitiesTablePtr	xmlCopyEntitiesTable	(xmlEntitiesTablePtr table)
    +

    Build a copy of an entity table.

    +
    table:An entity table
    Returns:the new xmlEntitiesTablePtr or NULL in case of error.

    Function: xmlCreateEntitiesTable

    xmlEntitiesTablePtr	xmlCreateEntitiesTable	(void)
    +

    create and initialize an empty entities hash table. This really doesn't make sense and should be deprecated

    +
    Returns:the xmlEntitiesTablePtr just created or NULL in case of error.

    Function: xmlDumpEntitiesTable

    void	xmlDumpEntitiesTable		(xmlBufferPtr buf, 
    xmlEntitiesTablePtr table)
    +

    This will dump the content of the entity table as an XML DTD definition

    +
    buf:An XML buffer.
    table:An entity table

    Function: xmlDumpEntityDecl

    void	xmlDumpEntityDecl		(xmlBufferPtr buf, 
    xmlEntityPtr ent)
    +

    This will dump the content of the entity table as an XML DTD definition

    +
    buf:An XML buffer.
    ent:An entity table

    Function: xmlEncodeEntities

    const xmlChar *	xmlEncodeEntities	(xmlDocPtr doc, 
    const xmlChar * input)
    +

    TODO: remove xmlEncodeEntities, once we are not afraid of breaking binary compatibility People must migrate their code to xmlEncodeEntitiesReentrant ! This routine will issue a warning when encountered.

    +
    doc:the document containing the string
    input:A string to convert to XML.
    Returns:NULL

    Function: xmlEncodeEntitiesReentrant

    xmlChar *	xmlEncodeEntitiesReentrant	(xmlDocPtr doc, 
    const xmlChar * input)
    +

    Do a global encoding of a string, replacing the predefined entities and non ASCII values with their entities and CharRef counterparts. Contrary to xmlEncodeEntities, this routine is reentrant, and result must be deallocated.

    +
    doc:the document containing the string
    input:A string to convert to XML.
    Returns:A newly allocated string with the substitution done.

    Function: xmlEncodeSpecialChars

    xmlChar *	xmlEncodeSpecialChars	(const xmlDoc * doc, 
    const xmlChar * input)
    +

    Do a global encoding of a string, replacing the predefined entities this routine is reentrant, and result must be deallocated.

    +
    doc:the document containing the string
    input:A string to convert to XML.
    Returns:A newly allocated string with the substitution done.

    Function: xmlFreeEntitiesTable

    void	xmlFreeEntitiesTable		(xmlEntitiesTablePtr table)
    +

    Deallocate the memory used by an entities hash table.

    +
    table:An entity table

    Function: xmlGetDocEntity

    xmlEntityPtr	xmlGetDocEntity		(const xmlDoc * doc, 
    const xmlChar * name)
    +

    Do an entity lookup in the document entity hash table and

    +
    doc:the document referencing the entity
    name:the entity name
    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.

    Function: xmlGetDtdEntity

    xmlEntityPtr	xmlGetDtdEntity		(xmlDocPtr doc, 
    const xmlChar * name)
    +

    Do an entity lookup in the DTD entity hash table and

    +
    doc:the document referencing the entity
    name:the entity name
    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.

    Function: xmlGetParameterEntity

    xmlEntityPtr	xmlGetParameterEntity	(xmlDocPtr doc, 
    const xmlChar * name)
    +

    Do an entity lookup in the internal and external subsets and

    +
    doc:the document referencing the entity
    name:the entity name
    Returns:the corresponding parameter entity, if found. Returns A pointer to the entity structure or NULL if not found.

    Function: xmlGetPredefinedEntity

    xmlEntityPtr	xmlGetPredefinedEntity	(const xmlChar * name)
    +

    Check whether this name is an predefined entity.

    +
    name:the entity name
    Returns:NULL if not, otherwise the entity

    Function: xmlInitializePredefinedEntities

    void	xmlInitializePredefinedEntities	(void)
    +

    Set up the predefined entities. Deprecated call

    +

    Function: xmlNewEntity

    xmlEntityPtr	xmlNewEntity		(xmlDocPtr doc, 
    const xmlChar * name,
    int type,
    const xmlChar * ExternalID,
    const xmlChar * SystemID,
    const xmlChar * content)
    +

    Create a new entity, this differs from xmlAddDocEntity() that if the document is NULL or has no internal subset defined, then an unlinked entity structure will be returned, it is then the responsability of the caller to link it to the document later or free it when not needed anymore.

    +
    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
    Returns:a pointer to the entity or NULL in case of error

    Daniel Veillard

    diff --git a/doc/html/libxml-globals.html b/doc/html/libxml-globals.html new file mode 100644 index 0000000..04986ef --- /dev/null +++ b/doc/html/libxml-globals.html @@ -0,0 +1,152 @@ + + +Module globals from libxml2
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    Module globals from libxml2

    API Menu
    API Indexes
    Related links

    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

    Table of Contents

    Structure xmlGlobalState
    struct _xmlGlobalState +
    Typedef xmlGlobalState * xmlGlobalStatePtr
    +
    void	xmlCleanupGlobals		(void)
    +
    xmlDeregisterNodeFunc	xmlDeregisterNodeDefault	(xmlDeregisterNodeFunc func)
    +
    Function type: xmlDeregisterNodeFunc
    +void	xmlDeregisterNodeFunc		(xmlNodePtr node)
    +
    +
    void	xmlInitGlobals			(void)
    +
    void	xmlInitializeGlobalState	(xmlGlobalStatePtr gs)
    +
    xmlOutputBufferCreateFilenameFunc	xmlOutputBufferCreateFilenameDefault	(xmlOutputBufferCreateFilenameFunc func)
    +
    Function type: xmlOutputBufferCreateFilenameFunc
    +xmlOutputBufferPtr	xmlOutputBufferCreateFilenameFunc	(const char * URI, 
    xmlCharEncodingHandlerPtr encoder,
    int compression) +
    +
    xmlParserInputBufferCreateFilenameFunc	xmlParserInputBufferCreateFilenameDefault	(xmlParserInputBufferCreateFilenameFunc func)
    +
    Function type: xmlParserInputBufferCreateFilenameFunc
    +xmlParserInputBufferPtr	xmlParserInputBufferCreateFilenameFunc	(const char * URI, 
    xmlCharEncoding enc) +
    +
    xmlRegisterNodeFunc	xmlRegisterNodeDefault	(xmlRegisterNodeFunc func)
    +
    Function type: xmlRegisterNodeFunc
    +void	xmlRegisterNodeFunc		(xmlNodePtr node)
    +
    +
    xmlBufferAllocationScheme	xmlThrDefBufferAllocScheme	(xmlBufferAllocationScheme v)
    +
    int	xmlThrDefDefaultBufferSize	(int v)
    +
    xmlDeregisterNodeFunc	xmlThrDefDeregisterNodeDefault	(xmlDeregisterNodeFunc func)
    +
    int	xmlThrDefDoValidityCheckingDefaultValue	(int v)
    +
    int	xmlThrDefGetWarningsDefaultValue	(int v)
    +
    int	xmlThrDefIndentTreeOutput	(int v)
    +
    int	xmlThrDefKeepBlanksDefaultValue	(int v)
    +
    int	xmlThrDefLineNumbersDefaultValue	(int v)
    +
    int	xmlThrDefLoadExtDtdDefaultValue	(int v)
    +
    xmlOutputBufferCreateFilenameFunc	xmlThrDefOutputBufferCreateFilenameDefault	(xmlOutputBufferCreateFilenameFunc func)
    +
    int	xmlThrDefParserDebugEntities	(int v)
    +
    xmlParserInputBufferCreateFilenameFunc	xmlThrDefParserInputBufferCreateFilenameDefault	(xmlParserInputBufferCreateFilenameFunc func)
    +
    int	xmlThrDefPedanticParserDefaultValue	(int v)
    +
    xmlRegisterNodeFunc	xmlThrDefRegisterNodeDefault	(xmlRegisterNodeFunc func)
    +
    int	xmlThrDefSaveNoEmptyTags	(int v)
    +
    void	xmlThrDefSetGenericErrorFunc	(void * ctx, 
    xmlGenericErrorFunc handler)
    +
    void	xmlThrDefSetStructuredErrorFunc	(void * ctx, 
    xmlStructuredErrorFunc handler)
    +
    int	xmlThrDefSubstituteEntitiesDefaultValue	(int v)
    +
    const char *	xmlThrDefTreeIndentString	(const char * v)
    +

    Description

    +

    Structure xmlGlobalState

    Structure xmlGlobalState
    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 + xmlParserInputBufferCreateFilenameFunc xmlParserInputBufferCreateFilenameValue + xmlOutputBufferCreateFilenameFunc xmlOutputBufferCreateFilenameValue + void * xmlStructuredErrorContext +}

    Function: xmlCleanupGlobals

    void	xmlCleanupGlobals		(void)
    +

    Additional cleanup for multi-threading

    +

    Function: xmlDeregisterNodeDefault

    xmlDeregisterNodeFunc	xmlDeregisterNodeDefault	(xmlDeregisterNodeFunc func)
    +

    Registers a callback for node destruction

    +
    func:function pointer to the new DeregisterNodeFunc
    Returns:the previous value of the deregistration function

    Function type: xmlDeregisterNodeFunc

    Function type: xmlDeregisterNodeFunc
    +void	xmlDeregisterNodeFunc		(xmlNodePtr node)
    +

    Signature for the deregistration callback of a discarded node

    node:the current node

    +

    Function: xmlInitGlobals

    void	xmlInitGlobals			(void)
    +

    Additional initialisation for multi-threading

    +

    Function: xmlInitializeGlobalState

    void	xmlInitializeGlobalState	(xmlGlobalStatePtr gs)
    +

    xmlInitializeGlobalState() initialize a global state with all the default values of the library.

    +
    gs:a pointer to a newly allocated global state

    Function: xmlOutputBufferCreateFilenameDefault

    xmlOutputBufferCreateFilenameFunc	xmlOutputBufferCreateFilenameDefault	(xmlOutputBufferCreateFilenameFunc func)
    +

    Registers a callback for URI output file handling

    +
    func:function pointer to the new OutputBufferCreateFilenameFunc
    Returns:the old value of the registration function

    Function type: xmlOutputBufferCreateFilenameFunc

    Function type: xmlOutputBufferCreateFilenameFunc
    +xmlOutputBufferPtr	xmlOutputBufferCreateFilenameFunc	(const char * URI, 
    xmlCharEncodingHandlerPtr encoder,
    int compression) +

    Signature for the function doing the lookup for a suitable output method corresponding to an URI.

    URI:the URI to write to
    encoder:
    compression:
    Returns:the new xmlOutputBufferPtr in case of success or NULL if no method was found.

    +

    Function: xmlParserInputBufferCreateFilenameDefault

    xmlParserInputBufferCreateFilenameFunc	xmlParserInputBufferCreateFilenameDefault	(xmlParserInputBufferCreateFilenameFunc func)
    +

    Registers a callback for URI input file handling

    +
    func:function pointer to the new ParserInputBufferCreateFilenameFunc
    Returns:the old value of the registration function

    Function type: xmlParserInputBufferCreateFilenameFunc

    Function type: xmlParserInputBufferCreateFilenameFunc
    +xmlParserInputBufferPtr	xmlParserInputBufferCreateFilenameFunc	(const char * URI, 
    xmlCharEncoding enc) +

    Signature for the function doing the lookup for a suitable input method corresponding to an URI.

    URI:the URI to read from
    enc:the requested source encoding
    Returns:the new xmlParserInputBufferPtr in case of success or NULL if no method was found.

    +

    Function: xmlRegisterNodeDefault

    xmlRegisterNodeFunc	xmlRegisterNodeDefault	(xmlRegisterNodeFunc func)
    +

    Registers a callback for node creation

    +
    func:function pointer to the new RegisterNodeFunc
    Returns:the old value of the registration function

    Function type: xmlRegisterNodeFunc

    Function type: xmlRegisterNodeFunc
    +void	xmlRegisterNodeFunc		(xmlNodePtr node)
    +

    Signature for the registration callback of a created node

    node:the current node

    +

    Function: xmlThrDefBufferAllocScheme

    xmlBufferAllocationScheme	xmlThrDefBufferAllocScheme	(xmlBufferAllocationScheme v)
    +

    +
    v:
    Returns:

    Function: xmlThrDefDefaultBufferSize

    int	xmlThrDefDefaultBufferSize	(int v)
    +

    +
    v:
    Returns:

    Function: xmlThrDefDeregisterNodeDefault

    xmlDeregisterNodeFunc	xmlThrDefDeregisterNodeDefault	(xmlDeregisterNodeFunc func)
    +

    +
    func:
    Returns:

    Function: xmlThrDefDoValidityCheckingDefaultValue

    int	xmlThrDefDoValidityCheckingDefaultValue	(int v)
    +

    +
    v:
    Returns:

    Function: xmlThrDefGetWarningsDefaultValue

    int	xmlThrDefGetWarningsDefaultValue	(int v)
    +

    +
    v:
    Returns:

    Function: xmlThrDefIndentTreeOutput

    int	xmlThrDefIndentTreeOutput	(int v)
    +

    +
    v:
    Returns:

    Function: xmlThrDefKeepBlanksDefaultValue

    int	xmlThrDefKeepBlanksDefaultValue	(int v)
    +

    +
    v:
    Returns:

    Function: xmlThrDefLineNumbersDefaultValue

    int	xmlThrDefLineNumbersDefaultValue	(int v)
    +

    +
    v:
    Returns:

    Function: xmlThrDefLoadExtDtdDefaultValue

    int	xmlThrDefLoadExtDtdDefaultValue	(int v)
    +

    +
    v:
    Returns:

    Function: xmlThrDefOutputBufferCreateFilenameDefault

    xmlOutputBufferCreateFilenameFunc	xmlThrDefOutputBufferCreateFilenameDefault	(xmlOutputBufferCreateFilenameFunc func)
    +

    +
    func:
    Returns:

    Function: xmlThrDefParserDebugEntities

    int	xmlThrDefParserDebugEntities	(int v)
    +

    +
    v:
    Returns:

    Function: xmlThrDefParserInputBufferCreateFilenameDefault

    xmlParserInputBufferCreateFilenameFunc	xmlThrDefParserInputBufferCreateFilenameDefault	(xmlParserInputBufferCreateFilenameFunc func)
    +

    +
    func:
    Returns:

    Function: xmlThrDefPedanticParserDefaultValue

    int	xmlThrDefPedanticParserDefaultValue	(int v)
    +

    +
    v:
    Returns:

    Function: xmlThrDefRegisterNodeDefault

    xmlRegisterNodeFunc	xmlThrDefRegisterNodeDefault	(xmlRegisterNodeFunc func)
    +

    +
    func:
    Returns:

    Function: xmlThrDefSaveNoEmptyTags

    int	xmlThrDefSaveNoEmptyTags	(int v)
    +

    +
    v:
    Returns:

    Function: xmlThrDefSetGenericErrorFunc

    void	xmlThrDefSetGenericErrorFunc	(void * ctx, 
    xmlGenericErrorFunc handler)
    +

    +
    ctx:
    handler:

    Function: xmlThrDefSetStructuredErrorFunc

    void	xmlThrDefSetStructuredErrorFunc	(void * ctx, 
    xmlStructuredErrorFunc handler)
    +

    +
    ctx:
    handler:

    Function: xmlThrDefSubstituteEntitiesDefaultValue

    int	xmlThrDefSubstituteEntitiesDefaultValue	(int v)
    +

    +
    v:
    Returns:

    Function: xmlThrDefTreeIndentString

    const char *	xmlThrDefTreeIndentString	(const char * v)
    +

    +
    v:
    Returns:

    Daniel Veillard

    diff --git a/doc/html/libxml-hash.html b/doc/html/libxml-hash.html new file mode 100644 index 0000000..922e3f1 --- /dev/null +++ b/doc/html/libxml-hash.html @@ -0,0 +1,116 @@ + + +Module hash from libxml2
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    Module hash from libxml2

    API Menu
    API Indexes
    Related links

    This module implements the hash table support used in various places in the library.

    Table of Contents

    #define XML_CAST_FPTR
    Structure xmlHashTable
    struct _xmlHashTable +The content of this structure is not made public by the API. +
    Typedef xmlHashTable * xmlHashTablePtr
    +
    int	xmlHashAddEntry			(xmlHashTablePtr table, 
    const xmlChar * name,
    void * userdata)
    +
    int	xmlHashAddEntry2		(xmlHashTablePtr table, 
    const xmlChar * name,
    const xmlChar * name2,
    void * userdata)
    +
    int	xmlHashAddEntry3		(xmlHashTablePtr table, 
    const xmlChar * name,
    const xmlChar * name2,
    const xmlChar * name3,
    void * userdata)
    +
    Function type: xmlHashCopier
    +void *	xmlHashCopier			(void * payload, 
    xmlChar * name) +
    +
    xmlHashTablePtr	xmlHashCopy		(xmlHashTablePtr table, 
    xmlHashCopier f)
    +
    xmlHashTablePtr	xmlHashCreate		(int size)
    +
    xmlHashTablePtr	xmlHashCreateDict	(int size, 
    xmlDictPtr dict)
    +
    Function type: xmlHashDeallocator
    +void	xmlHashDeallocator		(void * payload, 
    xmlChar * name) +
    +
    void	xmlHashFree			(xmlHashTablePtr table, 
    xmlHashDeallocator f)
    +
    void *	xmlHashLookup			(xmlHashTablePtr table, 
    const xmlChar * name)
    +
    void *	xmlHashLookup2			(xmlHashTablePtr table, 
    const xmlChar * name,
    const xmlChar * name2)
    +
    void *	xmlHashLookup3			(xmlHashTablePtr table, 
    const xmlChar * name,
    const xmlChar * name2,
    const xmlChar * name3)
    +
    void *	xmlHashQLookup			(xmlHashTablePtr table, 
    const xmlChar * prefix,
    const xmlChar * name)
    +
    void *	xmlHashQLookup2			(xmlHashTablePtr table, 
    const xmlChar * prefix,
    const xmlChar * name,
    const xmlChar * prefix2,
    const xmlChar * name2)
    +
    void *	xmlHashQLookup3			(xmlHashTablePtr table, 
    const xmlChar * prefix,
    const xmlChar * name,
    const xmlChar * prefix2,
    const xmlChar * name2,
    const xmlChar * prefix3,
    const xmlChar * name3)
    +
    int	xmlHashRemoveEntry		(xmlHashTablePtr table, 
    const xmlChar * name,
    xmlHashDeallocator f)
    +
    int	xmlHashRemoveEntry2		(xmlHashTablePtr table, 
    const xmlChar * name,
    const xmlChar * name2,
    xmlHashDeallocator f)
    +
    int	xmlHashRemoveEntry3		(xmlHashTablePtr table, 
    const xmlChar * name,
    const xmlChar * name2,
    const xmlChar * name3,
    xmlHashDeallocator f)
    +
    void	xmlHashScan			(xmlHashTablePtr table, 
    xmlHashScanner f,
    void * data)
    +
    void	xmlHashScan3			(xmlHashTablePtr table, 
    const xmlChar * name,
    const xmlChar * name2,
    const xmlChar * name3,
    xmlHashScanner f,
    void * data)
    +
    void	xmlHashScanFull			(xmlHashTablePtr table, 
    xmlHashScannerFull f,
    void * data)
    +
    void	xmlHashScanFull3		(xmlHashTablePtr table, 
    const xmlChar * name,
    const xmlChar * name2,
    const xmlChar * name3,
    xmlHashScannerFull f,
    void * data)
    +
    Function type: xmlHashScanner
    +void	xmlHashScanner			(void * payload, 
    void * data,
    xmlChar * name) +
    +
    Function type: xmlHashScannerFull
    +void	xmlHashScannerFull		(void * payload, 
    void * data,
    const xmlChar * name,
    const xmlChar * name2,
    const xmlChar * name3) +
    +
    int	xmlHashSize			(xmlHashTablePtr table)
    +
    int	xmlHashUpdateEntry		(xmlHashTablePtr table, 
    const xmlChar * name,
    void * userdata,
    xmlHashDeallocator f)
    +
    int	xmlHashUpdateEntry2		(xmlHashTablePtr table, 
    const xmlChar * name,
    const xmlChar * name2,
    void * userdata,
    xmlHashDeallocator f)
    +
    int	xmlHashUpdateEntry3		(xmlHashTablePtr table, 
    const xmlChar * name,
    const xmlChar * name2,
    const xmlChar * name3,
    void * userdata,
    xmlHashDeallocator f)
    +

    Description

    +

    Macro: XML_CAST_FPTR

    #define XML_CAST_FPTR

    Macro to do a casting from an object pointer to a function pointer without encountering a warning from gcc #define XML_CAST_FPTR(fptr) (*(void **)(&fptr)) This macro violated ISO C aliasing rules (gcc4 on s390 broke) so it is disabled now

    +

    Structure xmlHashTable

    Structure xmlHashTable
    struct _xmlHashTable { +The content of this structure is not made public by the API. +}

    Function: xmlHashAddEntry

    int	xmlHashAddEntry			(xmlHashTablePtr table, 
    const xmlChar * name,
    void * userdata)
    +

    Add the @userdata to the hash @table. This can later be retrieved by using the @name. Duplicate names generate errors.

    +
    table:the hash table
    name:the name of the userdata
    userdata:a pointer to the userdata
    Returns:0 the addition succeeded and -1 in case of error.

    Function: xmlHashAddEntry2

    int	xmlHashAddEntry2		(xmlHashTablePtr table, 
    const xmlChar * name,
    const xmlChar * name2,
    void * userdata)
    +

    Add the @userdata to the hash @table. This can later be retrieved by using the (@name, @name2) tuple. Duplicate tuples generate errors.

    +
    table:the hash table
    name:the name of the userdata
    name2:a second name of the userdata
    userdata:a pointer to the userdata
    Returns:0 the addition succeeded and -1 in case of error.

    Function: xmlHashAddEntry3

    int	xmlHashAddEntry3		(xmlHashTablePtr table, 
    const xmlChar * name,
    const xmlChar * name2,
    const xmlChar * name3,
    void * userdata)
    +

    Add the @userdata to the hash @table. This can later be retrieved by using the tuple (@name, @name2, @name3). Duplicate entries generate errors.

    +
    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
    Returns:0 the addition succeeded and -1 in case of error.

    Function type: xmlHashCopier

    Function type: xmlHashCopier
    +void *	xmlHashCopier			(void * payload, 
    xmlChar * name) +

    Callback to copy data from a hash.

    payload:the data in the hash
    name:the name associated
    Returns:a copy of the data or NULL in case of error.

    +

    Function: xmlHashCopy

    xmlHashTablePtr	xmlHashCopy		(xmlHashTablePtr table, 
    xmlHashCopier f)
    +

    Scan the hash @table and applied @f to each value.

    +
    table:the hash table
    f:the copier function for items in the hash
    Returns:the new table or NULL in case of error.

    Function: xmlHashCreate

    xmlHashTablePtr	xmlHashCreate		(int size)
    +

    Create a new xmlHashTablePtr.

    +
    size:the size of the hash table
    Returns:the newly created object, or NULL if an error occured.

    Function: xmlHashCreateDict

    xmlHashTablePtr	xmlHashCreateDict	(int size, 
    xmlDictPtr dict)
    +

    Create a new xmlHashTablePtr which will use @dict as the internal dictionary

    +
    size:the size of the hash table
    dict:a dictionary to use for the hash
    Returns:the newly created object, or NULL if an error occured.

    Function type: xmlHashDeallocator

    Function type: xmlHashDeallocator
    +void	xmlHashDeallocator		(void * payload, 
    xmlChar * name) +

    Callback to free data from a hash.

    payload:the data in the hash
    name:the name associated

    +

    Function: xmlHashFree

    void	xmlHashFree			(xmlHashTablePtr table, 
    xmlHashDeallocator f)
    +

    Free the hash @table and its contents. The userdata is deallocated with @f if provided.

    +
    table:the hash table
    f:the deallocator function for items in the hash

    Function: xmlHashLookup

    void *	xmlHashLookup			(xmlHashTablePtr table, 
    const xmlChar * name)
    +

    Find the userdata specified by the @name.

    +
    table:the hash table
    name:the name of the userdata
    Returns:the pointer to the userdata

    Function: xmlHashLookup2

    void *	xmlHashLookup2			(xmlHashTablePtr table, 
    const xmlChar * name,
    const xmlChar * name2)
    +

    Find the userdata specified by the (@name, @name2) tuple.

    +
    table:the hash table
    name:the name of the userdata
    name2:a second name of the userdata
    Returns:the pointer to the userdata

    Function: xmlHashLookup3

    void *	xmlHashLookup3			(xmlHashTablePtr table, 
    const xmlChar * name,
    const xmlChar * name2,
    const xmlChar * name3)
    +

    Find the userdata specified by the (@name, @name2, @name3) tuple.

    +
    table:the hash table
    name:the name of the userdata
    name2:a second name of the userdata
    name3:a third name of the userdata
    Returns:the a pointer to the userdata

    Function: xmlHashQLookup

    void *	xmlHashQLookup			(xmlHashTablePtr table, 
    const xmlChar * prefix,
    const xmlChar * name)
    +

    Find the userdata specified by the QName @prefix:@name/@name.

    +
    table:the hash table
    prefix:the prefix of the userdata
    name:the name of the userdata
    Returns:the pointer to the userdata

    Function: xmlHashQLookup2

    void *	xmlHashQLookup2			(xmlHashTablePtr table, 
    const xmlChar * prefix,
    const xmlChar * name,
    const xmlChar * prefix2,
    const xmlChar * name2)
    +

    Find the userdata specified by the QNames tuple

    +
    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
    Returns:the pointer to the userdata

    Function: xmlHashQLookup3

    void *	xmlHashQLookup3			(xmlHashTablePtr table, 
    const xmlChar * prefix,
    const xmlChar * name,
    const xmlChar * prefix2,
    const xmlChar * name2,
    const xmlChar * prefix3,
    const xmlChar * name3)
    +

    Find the userdata specified by the (@name, @name2, @name3) tuple.

    +
    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
    Returns:the a pointer to the userdata

    Function: xmlHashRemoveEntry

    int	xmlHashRemoveEntry		(xmlHashTablePtr table, 
    const xmlChar * name,
    xmlHashDeallocator f)
    +

    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.

    +
    table:the hash table
    name:the name of the userdata
    f:the deallocator function for removed item (if any)
    Returns:0 if the removal succeeded and -1 in case of error or not found.

    Function: xmlHashRemoveEntry2

    int	xmlHashRemoveEntry2		(xmlHashTablePtr table, 
    const xmlChar * name,
    const xmlChar * name2,
    xmlHashDeallocator f)
    +

    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.

    +
    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)
    Returns:0 if the removal succeeded and -1 in case of error or not found.

    Function: xmlHashRemoveEntry3

    int	xmlHashRemoveEntry3		(xmlHashTablePtr table, 
    const xmlChar * name,
    const xmlChar * name2,
    const xmlChar * name3,
    xmlHashDeallocator f)
    +

    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.

    +
    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)
    Returns:0 if the removal succeeded and -1 in case of error or not found.

    Function: xmlHashScan

    void	xmlHashScan			(xmlHashTablePtr table, 
    xmlHashScanner f,
    void * data)
    +

    Scan the hash @table and applied @f to each value.

    +
    table:the hash table
    f:the scanner function for items in the hash
    data:extra data passed to f

    Function: xmlHashScan3

    void	xmlHashScan3			(xmlHashTablePtr table, 
    const xmlChar * name,
    const xmlChar * name2,
    const xmlChar * name3,
    xmlHashScanner f,
    void * data)
    +

    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.

    +
    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

    Function: xmlHashScanFull

    void	xmlHashScanFull			(xmlHashTablePtr table, 
    xmlHashScannerFull f,
    void * data)
    +

    Scan the hash @table and applied @f to each value.

    +
    table:the hash table
    f:the scanner function for items in the hash
    data:extra data passed to f

    Function: xmlHashScanFull3

    void	xmlHashScanFull3		(xmlHashTablePtr table, 
    const xmlChar * name,
    const xmlChar * name2,
    const xmlChar * name3,
    xmlHashScannerFull f,
    void * data)
    +

    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.

    +
    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

    Function type: xmlHashScanner

    Function type: xmlHashScanner
    +void	xmlHashScanner			(void * payload, 
    void * data,
    xmlChar * name) +

    Callback when scanning data in a hash with the simple scanner.

    payload:the data in the hash
    data:extra scannner data
    name:the name associated

    +

    Function type: xmlHashScannerFull

    Function type: xmlHashScannerFull
    +void	xmlHashScannerFull		(void * payload, 
    void * data,
    const xmlChar * name,
    const xmlChar * name2,
    const xmlChar * name3) +

    Callback when scanning data in a hash with the full scanner.

    payload:the data in the hash
    data:extra scannner data
    name:the name associated
    name2:the second name associated
    name3:the third name associated

    +

    Function: xmlHashSize

    int	xmlHashSize			(xmlHashTablePtr table)
    +

    Query the number of elements installed in the hash @table.

    +
    table:the hash table
    Returns:the number of elements in the hash table or -1 in case of error

    Function: xmlHashUpdateEntry

    int	xmlHashUpdateEntry		(xmlHashTablePtr table, 
    const xmlChar * name,
    void * userdata,
    xmlHashDeallocator f)
    +

    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.

    +
    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)
    Returns:0 the addition succeeded and -1 in case of error.

    Function: xmlHashUpdateEntry2

    int	xmlHashUpdateEntry2		(xmlHashTablePtr table, 
    const xmlChar * name,
    const xmlChar * name2,
    void * userdata,
    xmlHashDeallocator f)
    +

    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.

    +
    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)
    Returns:0 the addition succeeded and -1 in case of error.

    Function: xmlHashUpdateEntry3

    int	xmlHashUpdateEntry3		(xmlHashTablePtr table, 
    const xmlChar * name,
    const xmlChar * name2,
    const xmlChar * name3,
    void * userdata,
    xmlHashDeallocator f)
    +

    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.

    +
    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)
    Returns:0 the addition succeeded and -1 in case of error.

    Daniel Veillard

    diff --git a/doc/html/libxml-lib.html b/doc/html/libxml-lib.html new file mode 100644 index 0000000..42d71a6 --- /dev/null +++ b/doc/html/libxml-lib.html @@ -0,0 +1,13 @@ + + +Reference Manual for libxml2
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    Reference Manual for libxml2

    API Menu
    API Indexes
    Related links

    Table of Contents

    • DOCBparser: old DocBook SGML parser
    • HTMLparser: interface for an HTML 4.0 non-verifying parser
    • HTMLtree: specific APIs to process HTML tree, especially serialization
    • SAX: Old SAX version 1 handler, deprecated
    • SAX2: SAX2 parser interface used to build the DOM tree
    • c14n: Provide Canonical XML and Exclusive XML Canonicalization
    • catalog: interfaces to the Catalog handling system
    • chvalid: Unicode character range checking
    • debugXML: Tree debugging APIs
    • dict: string dictionary
    • encoding: interface for the encoding conversion functions
    • entities: interface for the XML entities handling
    • globals: interface for all global variables of the library
    • hash: Chained hash tables
    • list: lists interfaces
    • nanoftp: minimal FTP implementation
    • nanohttp: minimal HTTP implementation
    • parser: the core parser module
    • parserInternals: internals routines and limits exported by the parser.
    • pattern: pattern expression handling
    • relaxng: implementation of the Relax-NG validation
    • schemasInternals: internal interfaces for XML Schemas
    • schematron: XML Schemastron implementation
    • threads: interfaces for thread handling
    • tree: interfaces for tree manipulation
    • uri: library of generic URI related routines
    • valid: The DTD validation
    • xinclude: implementation of XInclude
    • xlink: unfinished XLink detection module
    • xmlIO: interface for the I/O interfaces used by the parser
    • xmlautomata: API to build regexp automata
    • xmlerror: error handling
    • xmlexports: macros for marking symbols as exportable/importable.
    • xmlmemory: interface for the memory allocator
    • xmlmodule: dynamic module loading
    • xmlreader: the XMLReader implementation
    • xmlregexp: regular expressions handling
    • xmlsave: the XML document serializer
    • xmlschemas: incomplete XML Schemas structure implementation
    • xmlschemastypes: implementation of XML Schema Datatypes
    • xmlstring: set of routines to process strings
    • xmlunicode: Unicode character APIs
    • xmlversion: compile-time version informations
    • xmlwriter: text writing API for XML
    • xpath: XML Path Language implementation
    • xpathInternals: internal interfaces for XML Path Language implementation
    • xpointer: API to handle XML Pointers

    Daniel Veillard

    diff --git a/doc/html/libxml-list.html b/doc/html/libxml-list.html new file mode 100644 index 0000000..33e60d1 --- /dev/null +++ b/doc/html/libxml-list.html @@ -0,0 +1,120 @@ + + +Module list from libxml2
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    Module list from libxml2

    API Menu
    API Indexes
    Related links

    this module implement the list support used in various place in the library.

    Table of Contents

    Structure xmlLink
    struct _xmlLink +The content of this structure is not made public by the API. +
    Typedef xmlLink * xmlLinkPtr
    +
    Structure xmlList
    struct _xmlList +The content of this structure is not made public by the API. +
    Typedef xmlList * xmlListPtr
    +
    void *	xmlLinkGetData			(xmlLinkPtr lk)
    +
    int	xmlListAppend			(xmlListPtr l, 
    void * data)
    +
    void	xmlListClear			(xmlListPtr l)
    +
    int	xmlListCopy			(xmlListPtr cur, 
    const xmlListPtr old)
    +
    xmlListPtr	xmlListCreate		(xmlListDeallocator deallocator, 
    xmlListDataCompare compare)
    +
    Function type: xmlListDataCompare
    +int	xmlListDataCompare		(const void * data0, 
    const void * data1) +
    +
    Function type: xmlListDeallocator
    +void	xmlListDeallocator		(xmlLinkPtr lk)
    +
    +
    void	xmlListDelete			(xmlListPtr l)
    +
    xmlListPtr	xmlListDup		(const xmlListPtr old)
    +
    int	xmlListEmpty			(xmlListPtr l)
    +
    xmlLinkPtr	xmlListEnd		(xmlListPtr l)
    +
    xmlLinkPtr	xmlListFront		(xmlListPtr l)
    +
    int	xmlListInsert			(xmlListPtr l, 
    void * data)
    +
    void	xmlListMerge			(xmlListPtr l1, 
    xmlListPtr l2)
    +
    void	xmlListPopBack			(xmlListPtr l)
    +
    void	xmlListPopFront			(xmlListPtr l)
    +
    int	xmlListPushBack			(xmlListPtr l, 
    void * data)
    +
    int	xmlListPushFront		(xmlListPtr l, 
    void * data)
    +
    int	xmlListRemoveAll		(xmlListPtr l, 
    void * data)
    +
    int	xmlListRemoveFirst		(xmlListPtr l, 
    void * data)
    +
    int	xmlListRemoveLast		(xmlListPtr l, 
    void * data)
    +
    void	xmlListReverse			(xmlListPtr l)
    +
    void *	xmlListReverseSearch		(xmlListPtr l, 
    void * data)
    +
    void	xmlListReverseWalk		(xmlListPtr l, 
    xmlListWalker walker,
    const void * user)
    +
    void *	xmlListSearch			(xmlListPtr l, 
    void * data)
    +
    int	xmlListSize			(xmlListPtr l)
    +
    void	xmlListSort			(xmlListPtr l)
    +
    void	xmlListWalk			(xmlListPtr l, 
    xmlListWalker walker,
    const void * user)
    +
    Function type: xmlListWalker
    +int	xmlListWalker			(const void * data, 
    const void * user) +
    +

    Description

    +

    Structure xmlLink

    Structure xmlLink
    struct _xmlLink { +The content of this structure is not made public by the API. +}

    Structure xmlList

    Structure xmlList
    struct _xmlList { +The content of this structure is not made public by the API. +}

    Function: xmlLinkGetData

    void *	xmlLinkGetData			(xmlLinkPtr lk)
    +

    See Returns.

    +
    lk:a link
    Returns:a pointer to the data referenced from this link

    Function: xmlListAppend

    int	xmlListAppend			(xmlListPtr l, 
    void * data)
    +

    Insert data in the ordered list at the end for this value

    +
    l:a list
    data:the data
    Returns:0 in case of success, 1 in case of failure

    Function: xmlListClear

    void	xmlListClear			(xmlListPtr l)
    +

    Remove the all data in the list

    +
    l:a list

    Function: xmlListCopy

    int	xmlListCopy			(xmlListPtr cur, 
    const xmlListPtr old)
    +

    Move all the element from the old list in the new list

    +
    cur:the new list
    old:the old list
    Returns:0 in case of success 1 in case of error

    Function: xmlListCreate

    xmlListPtr	xmlListCreate		(xmlListDeallocator deallocator, 
    xmlListDataCompare compare)
    +

    Create a new list

    +
    deallocator:an optional deallocator function
    compare:an optional comparison function
    Returns:the new list or NULL in case of error

    Function type: xmlListDataCompare

    Function type: xmlListDataCompare
    +int	xmlListDataCompare		(const void * data0, 
    const void * data1) +

    Callback function used to compare 2 data.

    data0:the first data
    data1:the second data
    Returns:0 is equality, -1 or 1 otherwise depending on the ordering.

    +

    Function type: xmlListDeallocator

    Function type: xmlListDeallocator
    +void	xmlListDeallocator		(xmlLinkPtr lk)
    +

    Callback function used to free data from a list.

    lk:the data to deallocate

    +

    Function: xmlListDelete

    void	xmlListDelete			(xmlListPtr l)
    +

    Deletes the list and its associated data

    +
    l:a list

    Function: xmlListDup

    xmlListPtr	xmlListDup		(const xmlListPtr old)
    +

    Duplicate the list

    +
    old:the list
    Returns:a new copy of the list or NULL in case of error

    Function: xmlListEmpty

    int	xmlListEmpty			(xmlListPtr l)
    +

    Is the list empty ?

    +
    l:a list
    Returns:1 if the list is empty, 0 if not empty and -1 in case of error

    Function: xmlListEnd

    xmlLinkPtr	xmlListEnd		(xmlListPtr l)
    +

    Get the last element in the list

    +
    l:a list
    Returns:the last element in the list, or NULL

    Function: xmlListFront

    xmlLinkPtr	xmlListFront		(xmlListPtr l)
    +

    Get the first element in the list

    +
    l:a list
    Returns:the first element in the list, or NULL

    Function: xmlListInsert

    int	xmlListInsert			(xmlListPtr l, 
    void * data)
    +

    Insert data in the ordered list at the beginning for this value

    +
    l:a list
    data:the data
    Returns:0 in case of success, 1 in case of failure

    Function: xmlListMerge

    void	xmlListMerge			(xmlListPtr l1, 
    xmlListPtr l2)
    +

    include all the elements of the second list in the first one and clear the second list

    +
    l1:the original list
    l2:the new list

    Function: xmlListPopBack

    void	xmlListPopBack			(xmlListPtr l)
    +

    Removes the last element in the list

    +
    l:a list

    Function: xmlListPopFront

    void	xmlListPopFront			(xmlListPtr l)
    +

    Removes the first element in the list

    +
    l:a list

    Function: xmlListPushBack

    int	xmlListPushBack			(xmlListPtr l, 
    void * data)
    +

    add the new data at the end of the list

    +
    l:a list
    data:new data
    Returns:1 if successful, 0 otherwise

    Function: xmlListPushFront

    int	xmlListPushFront		(xmlListPtr l, 
    void * data)
    +

    add the new data at the beginning of the list

    +
    l:a list
    data:new data
    Returns:1 if successful, 0 otherwise

    Function: xmlListRemoveAll

    int	xmlListRemoveAll		(xmlListPtr l, 
    void * data)
    +

    Remove the all instance associated to data in the list

    +
    l:a list
    data:list data
    Returns:the number of deallocation, or 0 if not found

    Function: xmlListRemoveFirst

    int	xmlListRemoveFirst		(xmlListPtr l, 
    void * data)
    +

    Remove the first instance associated to data in the list

    +
    l:a list
    data:list data
    Returns:1 if a deallocation occured, or 0 if not found

    Function: xmlListRemoveLast

    int	xmlListRemoveLast		(xmlListPtr l, 
    void * data)
    +

    Remove the last instance associated to data in the list

    +
    l:a list
    data:list data
    Returns:1 if a deallocation occured, or 0 if not found

    Function: xmlListReverse

    void	xmlListReverse			(xmlListPtr l)
    +

    Reverse the order of the elements in the list

    +
    l:a list

    Function: xmlListReverseSearch

    void *	xmlListReverseSearch		(xmlListPtr l, 
    void * data)
    +

    Search the list in reverse order for an existing value of @data

    +
    l:a list
    data:a search value
    Returns:the value associated to @data or NULL in case of error

    Function: xmlListReverseWalk

    void	xmlListReverseWalk		(xmlListPtr l, 
    xmlListWalker walker,
    const void * user)
    +

    Walk all the element of the list in reverse order and apply the walker function to it

    +
    l:a list
    walker:a processing function
    user:a user parameter passed to the walker function

    Function: xmlListSearch

    void *	xmlListSearch			(xmlListPtr l, 
    void * data)
    +

    Search the list for an existing value of @data

    +
    l:a list
    data:a search value
    Returns:the value associated to @data or NULL in case of error

    Function: xmlListSize

    int	xmlListSize			(xmlListPtr l)
    +

    Get the number of elements in the list

    +
    l:a list
    Returns:the number of elements in the list or -1 in case of error

    Function: xmlListSort

    void	xmlListSort			(xmlListPtr l)
    +

    Sort all the elements in the list

    +
    l:a list

    Function: xmlListWalk

    void	xmlListWalk			(xmlListPtr l, 
    xmlListWalker walker,
    const void * user)
    +

    Walk all the element of the first from first to last and apply the walker function to it

    +
    l:a list
    walker:a processing function
    user:a user parameter passed to the walker function

    Function type: xmlListWalker

    Function type: xmlListWalker
    +int	xmlListWalker			(const void * data, 
    const void * user) +

    Callback function used when walking a list with xmlListWalk().

    data:the data found in the list
    user:extra user provided data to the walker
    Returns:0 to stop walking the list, 1 otherwise.

    +

    Daniel Veillard

    diff --git a/doc/html/libxml-nanoftp.html b/doc/html/libxml-nanoftp.html new file mode 100644 index 0000000..9f70ea6 --- /dev/null +++ b/doc/html/libxml-nanoftp.html @@ -0,0 +1,94 @@ + + +Module nanoftp from libxml2
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    Module nanoftp from libxml2

    API Menu
    API Indexes
    Related links

    minimal FTP implementation allowing to fetch resources like external subset.

    Table of Contents

    #define INVALID_SOCKET
    #define SOCKET
    Function type: ftpDataCallback
    +void	ftpDataCallback			(void * userData, 
    const char * data,
    int len) +
    +
    Function type: ftpListCallback
    +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) +
    +
    int	xmlNanoFTPCheckResponse		(void * ctx)
    +
    void	xmlNanoFTPCleanup		(void)
    +
    int	xmlNanoFTPClose			(void * ctx)
    +
    int	xmlNanoFTPCloseConnection	(void * ctx)
    +
    int	xmlNanoFTPConnect		(void * ctx)
    +
    void *	xmlNanoFTPConnectTo		(const char * server, 
    int port)
    +
    int	xmlNanoFTPCwd			(void * ctx, 
    const char * directory)
    +
    int	xmlNanoFTPDele			(void * ctx, 
    const char * file)
    +
    void	xmlNanoFTPFreeCtxt		(void * ctx)
    +
    int	xmlNanoFTPGet			(void * ctx, 
    ftpDataCallback callback,
    void * userData,
    const char * filename)
    +
    SOCKET	xmlNanoFTPGetConnection		(void * ctx)
    +
    int	xmlNanoFTPGetResponse		(void * ctx)
    +
    SOCKET	xmlNanoFTPGetSocket		(void * ctx, 
    const char * filename)
    +
    void	xmlNanoFTPInit			(void)
    +
    int	xmlNanoFTPList			(void * ctx, 
    ftpListCallback callback,
    void * userData,
    const char * filename)
    +
    void *	xmlNanoFTPNewCtxt		(const char * URL)
    +
    void *	xmlNanoFTPOpen			(const char * URL)
    +
    void	xmlNanoFTPProxy			(const char * host, 
    int port,
    const char * user,
    const char * passwd,
    int type)
    +
    int	xmlNanoFTPQuit			(void * ctx)
    +
    int	xmlNanoFTPRead			(void * ctx, 
    void * dest,
    int len)
    +
    void	xmlNanoFTPScanProxy		(const char * URL)
    +
    int	xmlNanoFTPUpdateURL		(void * ctx, 
    const char * URL)
    +

    Description

    +

    Macro: INVALID_SOCKET

    #define INVALID_SOCKET

    macro used to provide portability of code to windows sockets the value to be used when the socket is not valid

    +

    Macro: SOCKET

    #define SOCKET

    macro used to provide portability of code to windows sockets

    +

    Function type: ftpDataCallback

    Function type: ftpDataCallback
    +void	ftpDataCallback			(void * userData, 
    const char * data,
    int len) +

    A callback for the xmlNanoFTPGet command.

    userData:the user provided context
    data:the data received
    len:its size in bytes

    +

    Function type: ftpListCallback

    Function type: ftpListCallback
    +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) +

    A callback for the xmlNanoFTPList command. Note that only one of year and day:minute are specified.

    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

    +

    Function: xmlNanoFTPCheckResponse

    int	xmlNanoFTPCheckResponse		(void * ctx)
    +

    Check if there is a response from the FTP server after a command.

    +
    ctx:an FTP context
    Returns:the code number, or 0

    Function: xmlNanoFTPCleanup

    void	xmlNanoFTPCleanup		(void)
    +

    Cleanup the FTP protocol layer. This cleanup proxy informations.

    +

    Function: xmlNanoFTPClose

    int	xmlNanoFTPClose			(void * ctx)
    +

    Close the connection and both control and transport

    +
    ctx:an FTP context
    Returns:-1 incase of error, 0 otherwise

    Function: xmlNanoFTPCloseConnection

    int	xmlNanoFTPCloseConnection	(void * ctx)
    +

    Close the data connection from the server

    +
    ctx:an FTP context
    Returns:-1 incase of error, 0 otherwise

    Function: xmlNanoFTPConnect

    int	xmlNanoFTPConnect		(void * ctx)
    +

    Tries to open a control connection

    +
    ctx:an FTP context
    Returns:-1 in case of error, 0 otherwise

    Function: xmlNanoFTPConnectTo

    void *	xmlNanoFTPConnectTo		(const char * server, 
    int port)
    +

    Tries to open a control connection to the given server/port

    +
    server:an FTP server name
    port:the port (use 21 if 0)
    Returns:an fTP context or NULL if it failed

    Function: xmlNanoFTPCwd

    int	xmlNanoFTPCwd			(void * ctx, 
    const char * directory)
    +

    Tries to change the remote directory

    +
    ctx:an FTP context
    directory:a directory on the server
    Returns:-1 incase of error, 1 if CWD worked, 0 if it failed

    Function: xmlNanoFTPDele

    int	xmlNanoFTPDele			(void * ctx, 
    const char * file)
    +

    Tries to delete an item (file or directory) from server

    +
    ctx:an FTP context
    file:a file or directory on the server
    Returns:-1 incase of error, 1 if DELE worked, 0 if it failed

    Function: xmlNanoFTPFreeCtxt

    void	xmlNanoFTPFreeCtxt		(void * ctx)
    +

    Frees the context after closing the connection.

    +
    ctx:an FTP context

    Function: xmlNanoFTPGet

    int	xmlNanoFTPGet			(void * ctx, 
    ftpDataCallback callback,
    void * userData,
    const char * filename)
    +

    Fetch the given file from the server. All data are passed back in the callbacks. The last callback has a size of 0 block.

    +
    ctx:an FTP context
    callback:the user callback
    userData:the user callback data
    filename:the file to retrieve
    Returns:-1 incase of error, 0 otherwise

    Function: xmlNanoFTPGetConnection

    SOCKET	xmlNanoFTPGetConnection		(void * ctx)
    +

    Try to open a data connection to the server. Currently only passive mode is supported.

    +
    ctx:an FTP context
    Returns:-1 incase of error, 0 otherwise

    Function: xmlNanoFTPGetResponse

    int	xmlNanoFTPGetResponse		(void * ctx)
    +

    Get the response from the FTP server after a command.

    +
    ctx:an FTP context
    Returns:the code number

    Function: xmlNanoFTPGetSocket

    SOCKET	xmlNanoFTPGetSocket		(void * ctx, 
    const char * filename)
    +

    Initiate fetch of the given file from the server.

    +
    ctx:an FTP context
    filename:the file to retrieve (or NULL if path is in context).
    Returns:the socket for the data connection, or <0 in case of error

    Function: xmlNanoFTPInit

    void	xmlNanoFTPInit			(void)
    +

    Initialize the FTP protocol layer. Currently it just checks for proxy informations, and get the hostname

    +

    Function: xmlNanoFTPList

    int	xmlNanoFTPList			(void * ctx, 
    ftpListCallback callback,
    void * userData,
    const char * filename)
    +

    Do a listing on the server. All files info are passed back in the callbacks.

    +
    ctx:an FTP context
    callback:the user callback
    userData:the user callback data
    filename:optional files to list
    Returns:-1 incase of error, 0 otherwise

    Function: xmlNanoFTPNewCtxt

    void *	xmlNanoFTPNewCtxt		(const char * URL)
    +

    Allocate and initialize a new FTP context.

    +
    URL:The URL used to initialize the context
    Returns:an FTP context or NULL in case of error.

    Function: xmlNanoFTPOpen

    void *	xmlNanoFTPOpen			(const char * URL)
    +

    Start to fetch the given ftp:// resource

    +
    URL:the URL to the resource
    Returns:an FTP context, or NULL

    Function: xmlNanoFTPProxy

    void	xmlNanoFTPProxy			(const char * host, 
    int port,
    const char * user,
    const char * passwd,
    int type)
    +

    Setup the FTP proxy informations. This can also be done by using ftp_proxy ftp_proxy_user and ftp_proxy_password environment variables.

    +
    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

    Function: xmlNanoFTPQuit

    int	xmlNanoFTPQuit			(void * ctx)
    +

    Send a QUIT command to the server

    +
    ctx:an FTP context
    Returns:-1 in case of error, 0 otherwise

    Function: xmlNanoFTPRead

    int	xmlNanoFTPRead			(void * ctx, 
    void * dest,
    int len)
    +

    This function tries to read @len bytes from the existing FTP connection and saves them in @dest. This is a blocking call.

    +
    ctx:the FTP context
    dest:a buffer
    len:the buffer length
    Returns:the number of byte read. 0 is an indication of an end of connection. -1 indicates a parameter error.

    Function: xmlNanoFTPScanProxy

    void	xmlNanoFTPScanProxy		(const char * URL)
    +

    (Re)Initialize the FTP Proxy context by parsing the URL and finding the protocol host port it indicates. Should be like ftp://myproxy/ or ftp://myproxy:3128/ A NULL URL cleans up proxy informations.

    +
    URL:The proxy URL used to initialize the proxy context

    Function: xmlNanoFTPUpdateURL

    int	xmlNanoFTPUpdateURL		(void * ctx, 
    const char * URL)
    +

    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.

    +
    ctx:an FTP context
    URL:The URL used to update the context
    Returns:0 if Ok, -1 in case of error (other host).

    Daniel Veillard

    diff --git a/doc/html/libxml-nanohttp.html b/doc/html/libxml-nanohttp.html new file mode 100644 index 0000000..5bbcbaf --- /dev/null +++ b/doc/html/libxml-nanohttp.html @@ -0,0 +1,65 @@ + + +Module nanohttp from libxml2
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    Module nanohttp from libxml2

    API Menu
    API Indexes
    Related links

    minimal HTTP implementation allowing to fetch resources like external subset.

    Table of Contents

    const char *	xmlNanoHTTPAuthHeader	(void * ctx)
    +
    void	xmlNanoHTTPCleanup		(void)
    +
    void	xmlNanoHTTPClose		(void * ctx)
    +
    int	xmlNanoHTTPContentLength	(void * ctx)
    +
    const char *	xmlNanoHTTPEncoding	(void * ctx)
    +
    int	xmlNanoHTTPFetch		(const char * URL, 
    const char * filename,
    char ** contentType)
    +
    void	xmlNanoHTTPInit			(void)
    +
    void *	xmlNanoHTTPMethod		(const char * URL, 
    const char * method,
    const char * input,
    char ** contentType,
    const char * headers,
    int ilen)
    +
    void *	xmlNanoHTTPMethodRedir		(const char * URL, 
    const char * method,
    const char * input,
    char ** contentType,
    char ** redir,
    const char * headers,
    int ilen)
    +
    const char *	xmlNanoHTTPMimeType	(void * ctx)
    +
    void *	xmlNanoHTTPOpen			(const char * URL, 
    char ** contentType)
    +
    void *	xmlNanoHTTPOpenRedir		(const char * URL, 
    char ** contentType,
    char ** redir)
    +
    int	xmlNanoHTTPRead			(void * ctx, 
    void * dest,
    int len)
    +
    const char *	xmlNanoHTTPRedir	(void * ctx)
    +
    int	xmlNanoHTTPReturnCode		(void * ctx)
    +
    int	xmlNanoHTTPSave			(void * ctxt, 
    const char * filename)
    +
    void	xmlNanoHTTPScanProxy		(const char * URL)
    +

    Description

    +

    Function: xmlNanoHTTPAuthHeader

    const char *	xmlNanoHTTPAuthHeader	(void * ctx)
    +

    Get the authentication header of an HTTP context

    +
    ctx:the HTTP context
    Returns:the stashed value of the WWW-Authenticate or Proxy-Authenticate header.

    Function: xmlNanoHTTPCleanup

    void	xmlNanoHTTPCleanup		(void)
    +

    Cleanup the HTTP protocol layer.

    +

    Function: xmlNanoHTTPClose

    void	xmlNanoHTTPClose		(void * ctx)
    +

    This function closes an HTTP context, it ends up the connection and free all data related to it.

    +
    ctx:the HTTP context

    Function: xmlNanoHTTPContentLength

    int	xmlNanoHTTPContentLength	(void * ctx)
    +

    Provides the specified content length from the HTTP header.

    +
    ctx:the HTTP context
    Returns: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.

    Function: xmlNanoHTTPEncoding

    const char *	xmlNanoHTTPEncoding	(void * ctx)
    +

    Provides the specified encoding if specified in the HTTP headers.

    +
    ctx:the HTTP context
    Returns:the specified encoding or NULL if not available

    Function: xmlNanoHTTPFetch

    int	xmlNanoHTTPFetch		(const char * URL, 
    const char * filename,
    char ** contentType)
    +

    This function try to fetch the indicated resource via HTTP GET and save it's content in the file.

    +
    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
    Returns:-1 in case of failure, 0 incase of success. The contentType, if provided must be freed by the caller

    Function: xmlNanoHTTPInit

    void	xmlNanoHTTPInit			(void)
    +

    Initialize the HTTP protocol layer. Currently it just checks for proxy informations

    +

    Function: xmlNanoHTTPMethod

    void *	xmlNanoHTTPMethod		(const char * URL, 
    const char * method,
    const char * input,
    char ** contentType,
    const char * headers,
    int ilen)
    +

    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.

    +
    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
    Returns:NULL in case of failure, otherwise a request handler. The contentType, if provided must be freed by the caller

    Function: xmlNanoHTTPMethodRedir

    void *	xmlNanoHTTPMethodRedir		(const char * URL, 
    const char * method,
    const char * input,
    char ** contentType,
    char ** redir,
    const char * headers,
    int ilen)
    +

    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.

    +
    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
    Returns:NULL in case of failure, otherwise a request handler. The contentType, or redir, if provided must be freed by the caller

    Function: xmlNanoHTTPMimeType

    const char *	xmlNanoHTTPMimeType	(void * ctx)
    +

    Provides the specified Mime-Type if specified in the HTTP headers.

    +
    ctx:the HTTP context
    Returns:the specified Mime-Type or NULL if not available

    Function: xmlNanoHTTPOpen

    void *	xmlNanoHTTPOpen			(const char * URL, 
    char ** contentType)
    +

    This function try to open a connection to the indicated resource via HTTP GET.

    +
    URL:The URL to load
    contentType:if available the Content-Type information will be returned at that location
    Returns:NULL in case of failure, otherwise a request handler. The contentType, if provided must be freed by the caller

    Function: xmlNanoHTTPOpenRedir

    void *	xmlNanoHTTPOpenRedir		(const char * URL, 
    char ** contentType,
    char ** redir)
    +

    This function try to open a connection to the indicated resource via HTTP GET.

    +
    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
    Returns:NULL in case of failure, otherwise a request handler. The contentType, if provided must be freed by the caller

    Function: xmlNanoHTTPRead

    int	xmlNanoHTTPRead			(void * ctx, 
    void * dest,
    int len)
    +

    This function tries to read @len bytes from the existing HTTP connection and saves them in @dest. This is a blocking call.

    +
    ctx:the HTTP context
    dest:a buffer
    len:the buffer length
    Returns:the number of byte read. 0 is an indication of an end of connection. -1 indicates a parameter error.

    Function: xmlNanoHTTPRedir

    const char *	xmlNanoHTTPRedir	(void * ctx)
    +

    Provides the specified redirection URL if available from the HTTP header.

    +
    ctx:the HTTP context
    Returns:the specified redirection URL or NULL if not redirected.

    Function: xmlNanoHTTPReturnCode

    int	xmlNanoHTTPReturnCode		(void * ctx)
    +

    Get the latest HTTP return code received

    +
    ctx:the HTTP context
    Returns:the HTTP return code for the request.

    Function: xmlNanoHTTPSave

    int	xmlNanoHTTPSave			(void * ctxt, 
    const char * filename)
    +

    This function saves the output of the HTTP transaction to a file It closes and free the context at the end

    +
    ctxt:the HTTP context
    filename:the filename where the content should be saved
    Returns:-1 in case of failure, 0 incase of success.

    Function: xmlNanoHTTPScanProxy

    void	xmlNanoHTTPScanProxy		(const char * URL)
    +

    (Re)Initialize the HTTP Proxy context by parsing the URL and finding the protocol host port it indicates. Should be like http://myproxy/ or http://myproxy:3128/ A NULL URL cleans up proxy informations.

    +
    URL:The proxy URL used to initialize the proxy context

    Daniel Veillard

    diff --git a/doc/html/libxml-parser.html b/doc/html/libxml-parser.html new file mode 100644 index 0000000..4d890c6 --- /dev/null +++ b/doc/html/libxml-parser.html @@ -0,0 +1,559 @@ + + +Module parser from libxml2
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    Module parser from libxml2

    API Menu
    API Indexes
    Related links

    Interfaces, constants and types related to the XML parser

    Table of Contents

    #define XML_COMPLETE_ATTRS
    #define XML_DEFAULT_VERSION
    #define XML_DETECT_IDS
    #define XML_SAX2_MAGIC
    #define XML_SKIP_IDS
    Enum xmlFeature
    +
    Enum xmlParserInputState
    +
    Enum xmlParserMode
    +
    Structure xmlParserNodeInfo
    struct _xmlParserNodeInfo +
    Typedef xmlParserNodeInfo * xmlParserNodeInfoPtr
    +
    Structure xmlParserNodeInfoSeq
    struct _xmlParserNodeInfoSeq +
    Typedef xmlParserNodeInfoSeq * xmlParserNodeInfoSeqPtr
    +
    Enum xmlParserOption
    +
    Structure xmlSAXHandlerV1
    struct _xmlSAXHandlerV1 +
    Typedef xmlSAXHandlerV1 * xmlSAXHandlerV1Ptr
    +
    Function type: attributeDeclSAXFunc
    +void	attributeDeclSAXFunc		(void * ctx, 
    const xmlChar * elem,
    const xmlChar * fullname,
    int type,
    int def,
    const xmlChar * defaultValue,
    xmlEnumerationPtr tree) +
    +
    Function type: attributeSAXFunc
    +void	attributeSAXFunc		(void * ctx, 
    const xmlChar * name,
    const xmlChar * value) +
    +
    Function type: cdataBlockSAXFunc
    +void	cdataBlockSAXFunc		(void * ctx, 
    const xmlChar * value,
    int len) +
    +
    Function type: charactersSAXFunc
    +void	charactersSAXFunc		(void * ctx, 
    const xmlChar * ch,
    int len) +
    +
    Function type: commentSAXFunc
    +void	commentSAXFunc			(void * ctx, 
    const xmlChar * value) +
    +
    Function type: elementDeclSAXFunc
    +void	elementDeclSAXFunc		(void * ctx, 
    const xmlChar * name,
    int type,
    xmlElementContentPtr content) +
    +
    Function type: endDocumentSAXFunc
    +void	endDocumentSAXFunc		(void * ctx)
    +
    +
    Function type: endElementNsSAX2Func
    +void	endElementNsSAX2Func		(void * ctx, 
    const xmlChar * localname,
    const xmlChar * prefix,
    const xmlChar * URI) +
    +
    Function type: endElementSAXFunc
    +void	endElementSAXFunc		(void * ctx, 
    const xmlChar * name) +
    +
    Function type: entityDeclSAXFunc
    +void	entityDeclSAXFunc		(void * ctx, 
    const xmlChar * name,
    int type,
    const xmlChar * publicId,
    const xmlChar * systemId,
    xmlChar * content) +
    +
    Function type: errorSAXFunc
    +void	errorSAXFunc			(void * ctx, 
    const char * msg,
    ... ...) +
    +
    Function type: externalSubsetSAXFunc
    +void	externalSubsetSAXFunc		(void * ctx, 
    const xmlChar * name,
    const xmlChar * ExternalID,
    const xmlChar * SystemID) +
    +
    Function type: fatalErrorSAXFunc
    +void	fatalErrorSAXFunc		(void * ctx, 
    const char * msg,
    ... ...) +
    +
    Function type: getEntitySAXFunc
    +xmlEntityPtr	getEntitySAXFunc	(void * ctx, 
    const xmlChar * name) +
    +
    Function type: getParameterEntitySAXFunc
    +xmlEntityPtr	getParameterEntitySAXFunc	(void * ctx, 
    const xmlChar * name) +
    +
    Function type: hasExternalSubsetSAXFunc
    +int	hasExternalSubsetSAXFunc	(void * ctx)
    +
    +
    Function type: hasInternalSubsetSAXFunc
    +int	hasInternalSubsetSAXFunc	(void * ctx)
    +
    +
    Function type: ignorableWhitespaceSAXFunc
    +void	ignorableWhitespaceSAXFunc	(void * ctx, 
    const xmlChar * ch,
    int len) +
    +
    Function type: internalSubsetSAXFunc
    +void	internalSubsetSAXFunc		(void * ctx, 
    const xmlChar * name,
    const xmlChar * ExternalID,
    const xmlChar * SystemID) +
    +
    Function type: isStandaloneSAXFunc
    +int	isStandaloneSAXFunc		(void * ctx)
    +
    +
    Function type: notationDeclSAXFunc
    +void	notationDeclSAXFunc		(void * ctx, 
    const xmlChar * name,
    const xmlChar * publicId,
    const xmlChar * systemId) +
    +
    Function type: processingInstructionSAXFunc
    +void	processingInstructionSAXFunc	(void * ctx, 
    const xmlChar * target,
    const xmlChar * data) +
    +
    Function type: referenceSAXFunc
    +void	referenceSAXFunc		(void * ctx, 
    const xmlChar * name) +
    +
    Function type: resolveEntitySAXFunc
    +xmlParserInputPtr	resolveEntitySAXFunc	(void * ctx, 
    const xmlChar * publicId,
    const xmlChar * systemId) +
    +
    Function type: setDocumentLocatorSAXFunc
    +void	setDocumentLocatorSAXFunc	(void * ctx, 
    xmlSAXLocatorPtr loc) +
    +
    Function type: startDocumentSAXFunc
    +void	startDocumentSAXFunc		(void * ctx)
    +
    +
    Function type: startElementNsSAX2Func
    +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) +
    +
    Function type: startElementSAXFunc
    +void	startElementSAXFunc		(void * ctx, 
    const xmlChar * name,
    const xmlChar ** atts) +
    +
    Function type: unparsedEntityDeclSAXFunc
    +void	unparsedEntityDeclSAXFunc	(void * ctx, 
    const xmlChar * name,
    const xmlChar * publicId,
    const xmlChar * systemId,
    const xmlChar * notationName) +
    +
    Function type: warningSAXFunc
    +void	warningSAXFunc			(void * ctx, 
    const char * msg,
    ... ...) +
    +
    long	xmlByteConsumed			(xmlParserCtxtPtr ctxt)
    +
    void	xmlCleanupParser		(void)
    +
    void	xmlClearNodeInfoSeq		(xmlParserNodeInfoSeqPtr seq)
    +
    void	xmlClearParserCtxt		(xmlParserCtxtPtr ctxt)
    +
    xmlParserCtxtPtr	xmlCreateDocParserCtxt	(const xmlChar * cur)
    +
    xmlParserCtxtPtr	xmlCreateIOParserCtxt	(xmlSAXHandlerPtr sax, 
    void * user_data,
    xmlInputReadCallback ioread,
    xmlInputCloseCallback ioclose,
    void * ioctx,
    xmlCharEncoding enc)
    +
    xmlParserCtxtPtr	xmlCreatePushParserCtxt	(xmlSAXHandlerPtr sax, 
    void * user_data,
    const char * chunk,
    int size,
    const char * filename)
    +
    xmlDocPtr	xmlCtxtReadDoc		(xmlParserCtxtPtr ctxt, 
    const xmlChar * cur,
    const char * URL,
    const char * encoding,
    int options)
    +
    xmlDocPtr	xmlCtxtReadFd		(xmlParserCtxtPtr ctxt, 
    int fd,
    const char * URL,
    const char * encoding,
    int options)
    +
    xmlDocPtr	xmlCtxtReadFile		(xmlParserCtxtPtr ctxt, 
    const char * filename,
    const char * encoding,
    int options)
    +
    xmlDocPtr	xmlCtxtReadIO		(xmlParserCtxtPtr ctxt, 
    xmlInputReadCallback ioread,
    xmlInputCloseCallback ioclose,
    void * ioctx,
    const char * URL,
    const char * encoding,
    int options)
    +
    xmlDocPtr	xmlCtxtReadMemory	(xmlParserCtxtPtr ctxt, 
    const char * buffer,
    int size,
    const char * URL,
    const char * encoding,
    int options)
    +
    void	xmlCtxtReset			(xmlParserCtxtPtr ctxt)
    +
    int	xmlCtxtResetPush		(xmlParserCtxtPtr ctxt, 
    const char * chunk,
    int size,
    const char * filename,
    const char * encoding)
    +
    int	xmlCtxtUseOptions		(xmlParserCtxtPtr ctxt, 
    int options)
    +
    Function type: xmlExternalEntityLoader
    +xmlParserInputPtr	xmlExternalEntityLoader	(const char * URL, 
    const char * ID,
    xmlParserCtxtPtr context) +
    +
    void	xmlFreeParserCtxt		(xmlParserCtxtPtr ctxt)
    +
    xmlExternalEntityLoader	xmlGetExternalEntityLoader	(void)
    +
    int	xmlGetFeature			(xmlParserCtxtPtr ctxt, 
    const char * name,
    void * result)
    +
    int	xmlGetFeaturesList		(int * len, 
    const char ** result)
    +
    int	xmlHasFeature			(xmlFeature feature)
    +
    xmlDtdPtr	xmlIOParseDTD		(xmlSAXHandlerPtr sax, 
    xmlParserInputBufferPtr input,
    xmlCharEncoding enc)
    +
    void	xmlInitNodeInfoSeq		(xmlParserNodeInfoSeqPtr seq)
    +
    void	xmlInitParser			(void)
    +
    int	xmlInitParserCtxt		(xmlParserCtxtPtr ctxt)
    +
    int	xmlKeepBlanksDefault		(int val)
    +
    int	xmlLineNumbersDefault		(int val)
    +
    xmlParserInputPtr	xmlLoadExternalEntity	(const char * URL, 
    const char * ID,
    xmlParserCtxtPtr ctxt)
    +
    xmlParserInputPtr	xmlNewIOInputStream	(xmlParserCtxtPtr ctxt, 
    xmlParserInputBufferPtr input,
    xmlCharEncoding enc)
    +
    xmlParserCtxtPtr	xmlNewParserCtxt	(void)
    +
    int	xmlParseBalancedChunkMemory	(xmlDocPtr doc, 
    xmlSAXHandlerPtr sax,
    void * user_data,
    int depth,
    const xmlChar * string,
    xmlNodePtr * lst)
    +
    int	xmlParseBalancedChunkMemoryRecover	(xmlDocPtr doc, 
    xmlSAXHandlerPtr sax,
    void * user_data,
    int depth,
    const xmlChar * string,
    xmlNodePtr * lst,
    int recover)
    +
    int	xmlParseChunk			(xmlParserCtxtPtr ctxt, 
    const char * chunk,
    int size,
    int terminate)
    +
    int	xmlParseCtxtExternalEntity	(xmlParserCtxtPtr ctx, 
    const xmlChar * URL,
    const xmlChar * ID,
    xmlNodePtr * lst)
    +
    xmlDtdPtr	xmlParseDTD		(const xmlChar * ExternalID, 
    const xmlChar * SystemID)
    +
    xmlDocPtr	xmlParseDoc		(const xmlChar * cur)
    +
    int	xmlParseDocument		(xmlParserCtxtPtr ctxt)
    +
    xmlDocPtr	xmlParseEntity		(const char * filename)
    +
    int	xmlParseExtParsedEnt		(xmlParserCtxtPtr ctxt)
    +
    int	xmlParseExternalEntity		(xmlDocPtr doc, 
    xmlSAXHandlerPtr sax,
    void * user_data,
    int depth,
    const xmlChar * URL,
    const xmlChar * ID,
    xmlNodePtr * lst)
    +
    xmlDocPtr	xmlParseFile		(const char * filename)
    +
    xmlParserErrors	xmlParseInNodeContext	(xmlNodePtr node, 
    const char * data,
    int datalen,
    int options,
    xmlNodePtr * lst)
    +
    xmlDocPtr	xmlParseMemory		(const char * buffer, 
    int size)
    +
    void	xmlParserAddNodeInfo		(xmlParserCtxtPtr ctxt, 
    const xmlParserNodeInfoPtr info)
    +
    const xmlParserNodeInfo *	xmlParserFindNodeInfo	(const xmlParserCtxtPtr ctx, 
    const xmlNodePtr node)
    +
    unsigned long	xmlParserFindNodeInfoIndex	(const xmlParserNodeInfoSeqPtr seq, 
    const xmlNodePtr node)
    +
    Function type: xmlParserInputDeallocate
    +void	xmlParserInputDeallocate	(xmlChar * str)
    +
    +
    int	xmlParserInputGrow		(xmlParserInputPtr in, 
    int len)
    +
    int	xmlParserInputRead		(xmlParserInputPtr in, 
    int len)
    +
    int	xmlPedanticParserDefault	(int val)
    +
    xmlDocPtr	xmlReadDoc		(const xmlChar * cur, 
    const char * URL,
    const char * encoding,
    int options)
    +
    xmlDocPtr	xmlReadFd		(int fd, 
    const char * URL,
    const char * encoding,
    int options)
    +
    xmlDocPtr	xmlReadFile		(const char * filename, 
    const char * encoding,
    int options)
    +
    xmlDocPtr	xmlReadIO		(xmlInputReadCallback ioread, 
    xmlInputCloseCallback ioclose,
    void * ioctx,
    const char * URL,
    const char * encoding,
    int options)
    +
    xmlDocPtr	xmlReadMemory		(const char * buffer, 
    int size,
    const char * URL,
    const char * encoding,
    int options)
    +
    xmlDocPtr	xmlRecoverDoc		(const xmlChar * cur)
    +
    xmlDocPtr	xmlRecoverFile		(const char * filename)
    +
    xmlDocPtr	xmlRecoverMemory	(const char * buffer, 
    int size)
    +
    xmlDtdPtr	xmlSAXParseDTD		(xmlSAXHandlerPtr sax, 
    const xmlChar * ExternalID,
    const xmlChar * SystemID)
    +
    xmlDocPtr	xmlSAXParseDoc		(xmlSAXHandlerPtr sax, 
    const xmlChar * cur,
    int recovery)
    +
    xmlDocPtr	xmlSAXParseEntity	(xmlSAXHandlerPtr sax, 
    const char * filename)
    +
    xmlDocPtr	xmlSAXParseFile		(xmlSAXHandlerPtr sax, 
    const char * filename,
    int recovery)
    +
    xmlDocPtr	xmlSAXParseFileWithData	(xmlSAXHandlerPtr sax, 
    const char * filename,
    int recovery,
    void * data)
    +
    xmlDocPtr	xmlSAXParseMemory	(xmlSAXHandlerPtr sax, 
    const char * buffer,
    int size,
    int recovery)
    +
    xmlDocPtr	xmlSAXParseMemoryWithData	(xmlSAXHandlerPtr sax, 
    const char * buffer,
    int size,
    int recovery,
    void * data)
    +
    int	xmlSAXUserParseFile		(xmlSAXHandlerPtr sax, 
    void * user_data,
    const char * filename)
    +
    int	xmlSAXUserParseMemory		(xmlSAXHandlerPtr sax, 
    void * user_data,
    const char * buffer,
    int size)
    +
    void	xmlSetExternalEntityLoader	(xmlExternalEntityLoader f)
    +
    int	xmlSetFeature			(xmlParserCtxtPtr ctxt, 
    const char * name,
    void * value)
    +
    void	xmlSetupParserForBuffer		(xmlParserCtxtPtr ctxt, 
    const xmlChar * buffer,
    const char * filename)
    +
    void	xmlStopParser			(xmlParserCtxtPtr ctxt)
    +
    int	xmlSubstituteEntitiesDefault	(int val)
    +

    Description

    +

    Macro: XML_COMPLETE_ATTRS

    #define 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.

    +

    Macro: XML_DEFAULT_VERSION

    #define XML_DEFAULT_VERSION

    The default version of XML used: 1.0

    +

    Macro: XML_DETECT_IDS

    #define XML_DETECT_IDS

    Bit in the loadsubset context field to tell to do ID/REFs lookups. Use it to initialize xmlLoadExtDtdDefaultValue.

    +

    Macro: XML_SAX2_MAGIC

    #define XML_SAX2_MAGIC

    Special constant found in SAX2 blocks initialized fields

    +

    Macro: XML_SKIP_IDS

    #define 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.

    +

    Enum xmlFeature

    Enum xmlFeature {
    +    XML_WITH_THREAD = 1
    +    XML_WITH_TREE = 2
    +    XML_WITH_OUTPUT = 3
    +    XML_WITH_PUSH = 4
    +    XML_WITH_READER = 5
    +    XML_WITH_PATTERN = 6
    +    XML_WITH_WRITER = 7
    +    XML_WITH_SAX1 = 8
    +    XML_WITH_FTP = 9
    +    XML_WITH_HTTP = 10
    +    XML_WITH_VALID = 11
    +    XML_WITH_HTML = 12
    +    XML_WITH_LEGACY = 13
    +    XML_WITH_C14N = 14
    +    XML_WITH_CATALOG = 15
    +    XML_WITH_XPATH = 16
    +    XML_WITH_XPTR = 17
    +    XML_WITH_XINCLUDE = 18
    +    XML_WITH_ICONV = 19
    +    XML_WITH_ISO8859X = 20
    +    XML_WITH_UNICODE = 21
    +    XML_WITH_REGEXP = 22
    +    XML_WITH_AUTOMATA = 23
    +    XML_WITH_EXPR = 24
    +    XML_WITH_SCHEMAS = 25
    +    XML_WITH_SCHEMATRON = 26
    +    XML_WITH_MODULES = 27
    +    XML_WITH_DEBUG = 28
    +    XML_WITH_DEBUG_MEM = 29
    +    XML_WITH_DEBUG_RUN = 30
    +    XML_WITH_ZLIB = 31
    +    XML_WITH_ICU = 32
    +    XML_WITH_LZMA = 33
    +    XML_WITH_NONE = 99999 : just to be sure of allocation size
    +}
    +

    Enum xmlParserInputState

    Enum xmlParserInputState {
    +    XML_PARSER_EOF = -1 : nothing is to be parsed
    +    XML_PARSER_START = 0 : nothing has been parsed
    +    XML_PARSER_MISC = 1 : Misc* before int subset
    +    XML_PARSER_PI = 2 : Within a processing instruction
    +    XML_PARSER_DTD = 3 : within some DTD content
    +    XML_PARSER_PROLOG = 4 : Misc* after internal subset
    +    XML_PARSER_COMMENT = 5 : within a comment
    +    XML_PARSER_START_TAG = 6 : within a start tag
    +    XML_PARSER_CONTENT = 7 : within the content
    +    XML_PARSER_CDATA_SECTION = 8 : within a CDATA section
    +    XML_PARSER_END_TAG = 9 : within a closing tag
    +    XML_PARSER_ENTITY_DECL = 10 : within an entity declaration
    +    XML_PARSER_ENTITY_VALUE = 11 : within an entity value in a decl
    +    XML_PARSER_ATTRIBUTE_VALUE = 12 : within an attribute value
    +    XML_PARSER_SYSTEM_LITERAL = 13 : within a SYSTEM value
    +    XML_PARSER_EPILOG = 14 : the Misc* after the last end tag
    +    XML_PARSER_IGNORE = 15 : within an IGNORED section
    +    XML_PARSER_PUBLIC_LITERAL = 16 : within a PUBLIC value
    +}
    +

    Enum xmlParserMode

    Enum xmlParserMode {
    +    XML_PARSE_UNKNOWN = 0
    +    XML_PARSE_DOM = 1
    +    XML_PARSE_SAX = 2
    +    XML_PARSE_PUSH_DOM = 3
    +    XML_PARSE_PUSH_SAX = 4
    +    XML_PARSE_READER = 5
    +}
    +

    Structure xmlParserNodeInfo

    Structure xmlParserNodeInfo
    struct _xmlParserNodeInfo { + const struct _xmlNode * node : Position & line # that text that create + unsigned long begin_pos + unsigned long begin_line + unsigned long end_pos + unsigned long end_line +}

    Structure xmlParserNodeInfoSeq

    Structure xmlParserNodeInfoSeq
    struct _xmlParserNodeInfoSeq { + unsigned long maximum + unsigned long length + xmlParserNodeInfo * buffer +}

    Enum xmlParserOption

    Enum xmlParserOption {
    +    XML_PARSE_RECOVER = 1 : recover on errors
    +    XML_PARSE_NOENT = 2 : substitute entities
    +    XML_PARSE_DTDLOAD = 4 : load the external subset
    +    XML_PARSE_DTDATTR = 8 : default DTD attributes
    +    XML_PARSE_DTDVALID = 16 : validate with the DTD
    +    XML_PARSE_NOERROR = 32 : suppress error reports
    +    XML_PARSE_NOWARNING = 64 : suppress warning reports
    +    XML_PARSE_PEDANTIC = 128 : pedantic error reporting
    +    XML_PARSE_NOBLANKS = 256 : remove blank nodes
    +    XML_PARSE_SAX1 = 512 : use the SAX1 interface internally
    +    XML_PARSE_XINCLUDE = 1024 : Implement XInclude substitition
    +    XML_PARSE_NONET = 2048 : Forbid network access
    +    XML_PARSE_NODICT = 4096 : Do not reuse the context dictionary
    +    XML_PARSE_NSCLEAN = 8192 : remove redundant namespaces declarations
    +    XML_PARSE_NOCDATA = 16384 : merge CDATA as text nodes
    +    XML_PARSE_NOXINCNODE = 32768 : do not generate XINCLUDE START/END nodes
    +    XML_PARSE_COMPACT = 65536 : compact small text nodes; no modification of the tree allowed afterwards (will possibly crash if you try to modify the tree)
    +    XML_PARSE_OLD10 = 131072 : parse using XML-1.0 before update 5
    +    XML_PARSE_NOBASEFIX = 262144 : do not fixup XINCLUDE xml:base uris
    +    XML_PARSE_HUGE = 524288 : relax any hardcoded limit from the parser
    +    XML_PARSE_OLDSAX = 1048576 : parse using SAX2 interface before 2.7.0
    +    XML_PARSE_IGNORE_ENC = 2097152 : ignore internal document encoding hint
    +    XML_PARSE_BIG_LINES = 4194304 : Store big lines numbers in text PSVI field
    +}
    +

    Structure xmlSAXHandlerV1

    Structure xmlSAXHandlerV1
    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 +}

    Function type: attributeDeclSAXFunc

    Function type: attributeDeclSAXFunc
    +void	attributeDeclSAXFunc		(void * ctx, 
    const xmlChar * elem,
    const xmlChar * fullname,
    int type,
    int def,
    const xmlChar * defaultValue,
    xmlEnumerationPtr tree) +

    An attribute definition has been parsed.

    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

    +

    Function type: attributeSAXFunc

    Function type: attributeSAXFunc
    +void	attributeSAXFunc		(void * ctx, 
    const xmlChar * name,
    const xmlChar * 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.

    ctx:the user data (XML parser context)
    name:The attribute name, including namespace prefix
    value:The attribute value

    +

    Function type: cdataBlockSAXFunc

    Function type: cdataBlockSAXFunc
    +void	cdataBlockSAXFunc		(void * ctx, 
    const xmlChar * value,
    int len) +

    Called when a pcdata block has been parsed.

    ctx:the user data (XML parser context)
    value:The pcdata content
    len:the block length

    +

    Function type: charactersSAXFunc

    Function type: charactersSAXFunc
    +void	charactersSAXFunc		(void * ctx, 
    const xmlChar * ch,
    int len) +

    Receiving some chars from the parser.

    ctx:the user data (XML parser context)
    ch:a xmlChar string
    len:the number of xmlChar

    +

    Function type: commentSAXFunc

    Function type: commentSAXFunc
    +void	commentSAXFunc			(void * ctx, 
    const xmlChar * value) +

    A comment has been parsed.

    ctx:the user data (XML parser context)
    value:the comment content

    +

    Function type: elementDeclSAXFunc

    Function type: elementDeclSAXFunc
    +void	elementDeclSAXFunc		(void * ctx, 
    const xmlChar * name,
    int type,
    xmlElementContentPtr content) +

    An element definition has been parsed.

    ctx:the user data (XML parser context)
    name:the element name
    type:the element type
    content:the element value tree

    +

    Function type: endDocumentSAXFunc

    Function type: endDocumentSAXFunc
    +void	endDocumentSAXFunc		(void * ctx)
    +

    Called when the document end has been detected.

    ctx:the user data (XML parser context)

    +

    Function type: endElementNsSAX2Func

    Function type: endElementNsSAX2Func
    +void	endElementNsSAX2Func		(void * ctx, 
    const xmlChar * localname,
    const xmlChar * prefix,
    const xmlChar * URI) +

    SAX2 callback when an element end has been detected by the parser. It provides the namespace informations for the element.

    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

    +

    Function type: endElementSAXFunc

    Function type: endElementSAXFunc
    +void	endElementSAXFunc		(void * ctx, 
    const xmlChar * name) +

    Called when the end of an element has been detected.

    ctx:the user data (XML parser context)
    name:The element name

    +

    Function type: entityDeclSAXFunc

    Function type: entityDeclSAXFunc
    +void	entityDeclSAXFunc		(void * ctx, 
    const xmlChar * name,
    int type,
    const xmlChar * publicId,
    const xmlChar * systemId,
    xmlChar * content) +

    An entity definition has been parsed.

    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).

    +

    Function type: errorSAXFunc

    Function type: errorSAXFunc
    +void	errorSAXFunc			(void * ctx, 
    const char * msg,
    ... ...) +

    Display and format an error messages, callback.

    ctx:an XML parser context
    msg:the message to display/transmit
    ...:extra parameters for the message display

    +

    Function type: externalSubsetSAXFunc

    Function type: externalSubsetSAXFunc
    +void	externalSubsetSAXFunc		(void * ctx, 
    const xmlChar * name,
    const xmlChar * ExternalID,
    const xmlChar * SystemID) +

    Callback on external subset declaration.

    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)

    +

    Function type: fatalErrorSAXFunc

    Function type: fatalErrorSAXFunc
    +void	fatalErrorSAXFunc		(void * ctx, 
    const char * msg,
    ... ...) +

    Display and format fatal error messages, callback. Note: so far fatalError() SAX callbacks are not used, error() get all the callbacks for errors.

    ctx:an XML parser context
    msg:the message to display/transmit
    ...:extra parameters for the message display

    +

    Function type: getEntitySAXFunc

    Function type: getEntitySAXFunc
    +xmlEntityPtr	getEntitySAXFunc	(void * ctx, 
    const xmlChar * name) +

    Get an entity by name.

    ctx:the user data (XML parser context)
    name:The entity name
    Returns:the xmlEntityPtr if found.

    +

    Function type: getParameterEntitySAXFunc

    Function type: getParameterEntitySAXFunc
    +xmlEntityPtr	getParameterEntitySAXFunc	(void * ctx, 
    const xmlChar * name) +

    Get a parameter entity by name.

    ctx:the user data (XML parser context)
    name:The entity name
    Returns:the xmlEntityPtr if found.

    +

    Function type: hasExternalSubsetSAXFunc

    Function type: hasExternalSubsetSAXFunc
    +int	hasExternalSubsetSAXFunc	(void * ctx)
    +

    Does this document has an external subset?

    ctx:the user data (XML parser context)
    Returns:1 if true

    +

    Function type: hasInternalSubsetSAXFunc

    Function type: hasInternalSubsetSAXFunc
    +int	hasInternalSubsetSAXFunc	(void * ctx)
    +

    Does this document has an internal subset.

    ctx:the user data (XML parser context)
    Returns:1 if true

    +

    Function type: ignorableWhitespaceSAXFunc

    Function type: ignorableWhitespaceSAXFunc
    +void	ignorableWhitespaceSAXFunc	(void * ctx, 
    const xmlChar * ch,
    int len) +

    Receiving some ignorable whitespaces from the parser. UNUSED: by default the DOM building will use characters.

    ctx:the user data (XML parser context)
    ch:a xmlChar string
    len:the number of xmlChar

    +

    Function type: internalSubsetSAXFunc

    Function type: internalSubsetSAXFunc
    +void	internalSubsetSAXFunc		(void * ctx, 
    const xmlChar * name,
    const xmlChar * ExternalID,
    const xmlChar * SystemID) +

    Callback on internal subset declaration.

    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)

    +

    Function type: isStandaloneSAXFunc

    Function type: isStandaloneSAXFunc
    +int	isStandaloneSAXFunc		(void * ctx)
    +

    Is this document tagged standalone?

    ctx:the user data (XML parser context)
    Returns:1 if true

    +

    Function type: notationDeclSAXFunc

    Function type: notationDeclSAXFunc
    +void	notationDeclSAXFunc		(void * ctx, 
    const xmlChar * name,
    const xmlChar * publicId,
    const xmlChar * systemId) +

    What to do when a notation declaration has been parsed.

    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

    +

    Function type: processingInstructionSAXFunc

    Function type: processingInstructionSAXFunc
    +void	processingInstructionSAXFunc	(void * ctx, 
    const xmlChar * target,
    const xmlChar * data) +

    A processing instruction has been parsed.

    ctx:the user data (XML parser context)
    target:the target name
    data:the PI data's

    +

    Function type: referenceSAXFunc

    Function type: referenceSAXFunc
    +void	referenceSAXFunc		(void * ctx, 
    const xmlChar * name) +

    Called when an entity reference is detected.

    ctx:the user data (XML parser context)
    name:The entity name

    +

    Function type: resolveEntitySAXFunc

    Function type: resolveEntitySAXFunc
    +xmlParserInputPtr	resolveEntitySAXFunc	(void * ctx, 
    const xmlChar * publicId,
    const xmlChar * systemId) +

    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

    ctx:the user data (XML parser context)
    publicId:The public ID of the entity
    systemId:The system ID of the entity
    Returns:the xmlParserInputPtr if inlined or NULL for DOM behaviour.

    +

    Function type: setDocumentLocatorSAXFunc

    Function type: setDocumentLocatorSAXFunc
    +void	setDocumentLocatorSAXFunc	(void * ctx, 
    xmlSAXLocatorPtr loc) +

    Receive the document locator at startup, actually xmlDefaultSAXLocator. Everything is available on the context, so this is useless in our case.

    ctx:the user data (XML parser context)
    loc:A SAX Locator

    +

    Function type: startDocumentSAXFunc

    Function type: startDocumentSAXFunc
    +void	startDocumentSAXFunc		(void * ctx)
    +

    Called when the document start being processed.

    ctx:the user data (XML parser context)

    +

    Function type: startElementNsSAX2Func

    Function type: startElementNsSAX2Func
    +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) +

    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.

    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.

    +

    Function type: startElementSAXFunc

    Function type: startElementSAXFunc
    +void	startElementSAXFunc		(void * ctx, 
    const xmlChar * name,
    const xmlChar ** atts) +

    Called when an opening tag has been processed.

    ctx:the user data (XML parser context)
    name:The element name, including namespace prefix
    atts:An array of name/value attributes pairs, NULL terminated

    +

    Function type: unparsedEntityDeclSAXFunc

    Function type: unparsedEntityDeclSAXFunc
    +void	unparsedEntityDeclSAXFunc	(void * ctx, 
    const xmlChar * name,
    const xmlChar * publicId,
    const xmlChar * systemId,
    const xmlChar * notationName) +

    What to do when an unparsed entity declaration is parsed.

    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

    +

    Function type: warningSAXFunc

    Function type: warningSAXFunc
    +void	warningSAXFunc			(void * ctx, 
    const char * msg,
    ... ...) +

    Display and format a warning messages, callback.

    ctx:an XML parser context
    msg:the message to display/transmit
    ...:extra parameters for the message display

    +

    Function: xmlByteConsumed

    long	xmlByteConsumed			(xmlParserCtxtPtr ctxt)
    +

    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.

    +
    ctxt:an XML parser context
    Returns:the index in bytes from the beginning of the entity or -1 in case the index could not be computed.

    Function: xmlCleanupParser

    void	xmlCleanupParser		(void)
    +

    This function name is somewhat misleading. It does not clean up parser state, it cleans up memory allocated by the library itself. It is a cleanup function for the XML library. It tries to reclaim all related global memory allocated for the library processing. It doesn't deallocate any document related memory. One should call xmlCleanupParser() only when the process has finished using the library and all XML/HTML documents built with it. See also xmlInitParser() which has the opposite function of preparing the library for operations. WARNING: if your application is multithreaded or has plugin support calling this may crash the application if another thread or a plugin is still using libxml2. It's sometimes very hard to guess if libxml2 is in use in the application, some libraries or plugins may use it without notice. In case of doubt abstain from calling this function or do it just before calling exit() to avoid leak reports from valgrind !

    +

    Function: xmlClearNodeInfoSeq

    void	xmlClearNodeInfoSeq		(xmlParserNodeInfoSeqPtr seq)
    +

    -- Clear (release memory and reinitialize) node info sequence

    +
    seq:a node info sequence pointer

    Function: xmlClearParserCtxt

    void	xmlClearParserCtxt		(xmlParserCtxtPtr ctxt)
    +

    Clear (release owned resources) and reinitialize a parser context

    +
    ctxt:an XML parser context

    Function: xmlCreateDocParserCtxt

    xmlParserCtxtPtr	xmlCreateDocParserCtxt	(const xmlChar * cur)
    +

    Creates a parser context for an XML in-memory document.

    +
    cur:a pointer to an array of xmlChar
    Returns:the new parser context or NULL

    Function: xmlCreateIOParserCtxt

    xmlParserCtxtPtr	xmlCreateIOParserCtxt	(xmlSAXHandlerPtr sax, 
    void * user_data,
    xmlInputReadCallback ioread,
    xmlInputCloseCallback ioclose,
    void * ioctx,
    xmlCharEncoding enc)
    +

    Create a parser context for using the XML parser with an existing I/O stream

    +
    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
    Returns:the new parser context or NULL

    Function: xmlCreatePushParserCtxt

    xmlParserCtxtPtr	xmlCreatePushParserCtxt	(xmlSAXHandlerPtr sax, 
    void * user_data,
    const char * chunk,
    int size,
    const char * filename)
    +

    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.

    +
    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
    Returns:the new parser context or NULL

    Function: xmlCtxtReadDoc

    xmlDocPtr	xmlCtxtReadDoc		(xmlParserCtxtPtr ctxt, 
    const xmlChar * cur,
    const char * URL,
    const char * encoding,
    int options)
    +

    parse an XML in-memory document and build a tree. This reuses the existing @ctxt parser context

    +
    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
    Returns:the resulting document tree

    Function: xmlCtxtReadFd

    xmlDocPtr	xmlCtxtReadFd		(xmlParserCtxtPtr ctxt, 
    int fd,
    const char * URL,
    const char * encoding,
    int options)
    +

    parse an XML from a file descriptor and build a tree. This reuses the existing @ctxt parser context NOTE that the file descriptor will not be closed when the reader is closed or reset.

    +
    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
    Returns:the resulting document tree

    Function: xmlCtxtReadFile

    xmlDocPtr	xmlCtxtReadFile		(xmlParserCtxtPtr ctxt, 
    const char * filename,
    const char * encoding,
    int options)
    +

    parse an XML file from the filesystem or the network. This reuses the existing @ctxt parser context

    +
    ctxt:an XML parser context
    filename:a file or URL
    encoding:the document encoding, or NULL
    options:a combination of xmlParserOption
    Returns:the resulting document tree

    Function: xmlCtxtReadIO

    xmlDocPtr	xmlCtxtReadIO		(xmlParserCtxtPtr ctxt, 
    xmlInputReadCallback ioread,
    xmlInputCloseCallback ioclose,
    void * ioctx,
    const char * URL,
    const char * encoding,
    int options)
    +

    parse an XML document from I/O functions and source and build a tree. This reuses the existing @ctxt parser context

    +
    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
    Returns:the resulting document tree

    Function: xmlCtxtReadMemory

    xmlDocPtr	xmlCtxtReadMemory	(xmlParserCtxtPtr ctxt, 
    const char * buffer,
    int size,
    const char * URL,
    const char * encoding,
    int options)
    +

    parse an XML in-memory document and build a tree. This reuses the existing @ctxt parser context

    +
    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
    Returns:the resulting document tree

    Function: xmlCtxtReset

    void	xmlCtxtReset			(xmlParserCtxtPtr ctxt)
    +

    Reset a parser context

    +
    ctxt:an XML parser context

    Function: xmlCtxtResetPush

    int	xmlCtxtResetPush		(xmlParserCtxtPtr ctxt, 
    const char * chunk,
    int size,
    const char * filename,
    const char * encoding)
    +

    Reset a push parser context

    +
    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
    Returns:0 in case of success and 1 in case of error

    Function: xmlCtxtUseOptions

    int	xmlCtxtUseOptions		(xmlParserCtxtPtr ctxt, 
    int options)
    +

    Applies the options to the parser context

    +
    ctxt:an XML parser context
    options:a combination of xmlParserOption
    Returns:0 in case of success, the set of unknown or unimplemented options in case of error.

    Function type: xmlExternalEntityLoader

    Function type: xmlExternalEntityLoader
    +xmlParserInputPtr	xmlExternalEntityLoader	(const char * URL, 
    const char * ID,
    xmlParserCtxtPtr context) +

    External entity loaders types.

    URL:The System ID of the resource requested
    ID:The Public ID of the resource requested
    context:the XML parser context
    Returns:the entity input parser.

    +

    Function: xmlFreeParserCtxt

    void	xmlFreeParserCtxt		(xmlParserCtxtPtr ctxt)
    +

    Free all the memory used by a parser context. However the parsed document in ctxt->myDoc is not freed.

    +
    ctxt:an XML parser context

    Function: xmlGetExternalEntityLoader

    xmlExternalEntityLoader	xmlGetExternalEntityLoader	(void)
    +

    Get the default external entity resolver function for the application

    +
    Returns:the xmlExternalEntityLoader function pointer

    Function: xmlGetFeature

    int	xmlGetFeature			(xmlParserCtxtPtr ctxt, 
    const char * name,
    void * result)
    +

    Read the current value of one feature of this parser instance

    +
    ctxt:an XML/HTML parser context
    name:the feature name
    result:location to store the result
    Returns:-1 in case or error, 0 otherwise

    Function: xmlGetFeaturesList

    int	xmlGetFeaturesList		(int * len, 
    const char ** result)
    +

    Copy at most *@len feature names into the @result array

    +
    len:the length of the features name array (input/output)
    result:an array of string to be filled with the features name.
    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

    Function: xmlHasFeature

    int	xmlHasFeature			(xmlFeature feature)
    +

    Examines if the library has been compiled with a given feature.

    +
    feature:the feature to be examined
    Returns:a non-zero value if the feature exist, otherwise zero. Returns zero (0) if the feature does not exist or an unknown unknown feature is requested, non-zero otherwise.

    Function: xmlIOParseDTD

    xmlDtdPtr	xmlIOParseDTD		(xmlSAXHandlerPtr sax, 
    xmlParserInputBufferPtr input,
    xmlCharEncoding enc)
    +

    Load and parse a DTD

    +
    sax:the SAX handler block or NULL
    input:an Input Buffer
    enc:the charset encoding if known
    Returns:the resulting xmlDtdPtr or NULL in case of error. @input will be freed by the function in any case.

    Function: xmlInitNodeInfoSeq

    void	xmlInitNodeInfoSeq		(xmlParserNodeInfoSeqPtr seq)
    +

    -- Initialize (set to initial state) node info sequence

    +
    seq:a node info sequence pointer

    Function: xmlInitParser

    void	xmlInitParser			(void)
    +

    Initialization function for the XML parser. This is not reentrant. Call once before processing in case of use in multithreaded programs.

    +

    Function: xmlInitParserCtxt

    int	xmlInitParserCtxt		(xmlParserCtxtPtr ctxt)
    +

    Initialize a parser context

    +
    ctxt:an XML parser context
    Returns:0 in case of success and -1 in case of error

    Function: xmlKeepBlanksDefault

    int	xmlKeepBlanksDefault		(int val)
    +

    Set and return the previous value for default blanks text nodes support. The 1.x version of the parser used an heuristic to try to detect ignorable white spaces. As a result the SAX callback was generating xmlSAX2IgnorableWhitespace() callbacks instead of characters() one, and when using the DOM output text nodes containing those blanks were not generated. The 2.x and later version will switch to the XML standard way and ignorableWhitespace() are only generated when running the parser in validating mode and when the current element doesn't allow CDATA or mixed content. This function is provided as a way to force the standard behavior on 1.X libs and to switch back to the old mode for compatibility when running 1.X client code on 2.X . Upgrade of 1.X code should be done by using xmlIsBlankNode() commodity function to detect the "empty" nodes generated. This value also affect autogeneration of indentation when saving code if blanks sections are kept, indentation is not generated.

    +
    val:int 0 or 1
    Returns:the last value for 0 for no substitution, 1 for substitution.

    Function: xmlLineNumbersDefault

    int	xmlLineNumbersDefault		(int val)
    +

    Set and return the previous value for enabling line numbers in elements contents. This may break on old application and is turned off by default.

    +
    val:int 0 or 1
    Returns:the last value for 0 for no substitution, 1 for substitution.

    Function: xmlLoadExternalEntity

    xmlParserInputPtr	xmlLoadExternalEntity	(const char * URL, 
    const char * ID,
    xmlParserCtxtPtr ctxt)
    +

    Load an external entity, note that the use of this function for unparsed entities may generate problems

    +
    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
    Returns:the xmlParserInputPtr or NULL

    Function: xmlNewIOInputStream

    xmlParserInputPtr	xmlNewIOInputStream	(xmlParserCtxtPtr ctxt, 
    xmlParserInputBufferPtr input,
    xmlCharEncoding enc)
    +

    Create a new input stream structure encapsulating the @input into a stream suitable for the parser.

    +
    ctxt:an XML parser context
    input:an I/O Input
    enc:the charset encoding if known
    Returns:the new input stream or NULL

    Function: xmlNewParserCtxt

    xmlParserCtxtPtr	xmlNewParserCtxt	(void)
    +

    Allocate and initialize a new parser context.

    +
    Returns:the xmlParserCtxtPtr or NULL

    Function: xmlParseBalancedChunkMemory

    int	xmlParseBalancedChunkMemory	(xmlDocPtr doc, 
    xmlSAXHandlerPtr sax,
    void * user_data,
    int depth,
    const xmlChar * string,
    xmlNodePtr * lst)
    +

    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)*

    +
    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
    Returns:0 if the chunk is well balanced, -1 in case of args problem and the parser error code otherwise

    Function: xmlParseBalancedChunkMemoryRecover

    int	xmlParseBalancedChunkMemoryRecover	(xmlDocPtr doc, 
    xmlSAXHandlerPtr sax,
    void * user_data,
    int depth,
    const xmlChar * string,
    xmlNodePtr * lst,
    int recover)
    +

    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)*

    +
    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)
    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, assuming the parsing succeeded to some extent.

    Function: xmlParseChunk

    int	xmlParseChunk			(xmlParserCtxtPtr ctxt, 
    const char * chunk,
    int size,
    int terminate)
    +

    Parse a Chunk of memory

    +
    ctxt:an XML parser context
    chunk:an char array
    size:the size in byte of the chunk
    terminate:last chunk indicator
    Returns:zero if no error, the xmlParserErrors otherwise.

    Function: xmlParseCtxtExternalEntity

    int	xmlParseCtxtExternalEntity	(xmlParserCtxtPtr ctx, 
    const xmlChar * URL,
    const xmlChar * ID,
    xmlNodePtr * lst)
    +

    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

    +
    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
    Returns:0 if the entity is well formed, -1 in case of args problem and the parser error code otherwise

    Function: xmlParseDTD

    xmlDtdPtr	xmlParseDTD		(const xmlChar * ExternalID, 
    const xmlChar * SystemID)
    +

    Load and parse an external subset.

    +
    ExternalID:a NAME* containing the External ID of the DTD
    SystemID:a NAME* containing the URL to the DTD
    Returns:the resulting xmlDtdPtr or NULL in case of error.

    Function: xmlParseDoc

    xmlDocPtr	xmlParseDoc		(const xmlChar * cur)
    +

    parse an XML in-memory document and build a tree.

    +
    cur:a pointer to an array of xmlChar
    Returns:the resulting document tree

    Function: xmlParseDocument

    int	xmlParseDocument		(xmlParserCtxtPtr ctxt)
    +

    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*)?

    +
    ctxt:an XML parser context
    Returns:0, -1 in case of error. the parser context is augmented as a result of the parsing.

    Function: xmlParseEntity

    xmlDocPtr	xmlParseEntity		(const char * filename)
    +

    parse an XML external entity out of context and build a tree. [78] extParsedEnt ::= TextDecl? content This correspond to a "Well Balanced" chunk

    +
    filename:the filename
    Returns:the resulting document tree

    Function: xmlParseExtParsedEnt

    int	xmlParseExtParsedEnt		(xmlParserCtxtPtr ctxt)
    +

    parse a general parsed entity An external general parsed entity is well-formed if it matches the production labeled extParsedEnt. [78] extParsedEnt ::= TextDecl? content

    +
    ctxt:an XML parser context
    Returns:0, -1 in case of error. the parser context is augmented as a result of the parsing.

    Function: xmlParseExternalEntity

    int	xmlParseExternalEntity		(xmlDocPtr doc, 
    xmlSAXHandlerPtr sax,
    void * user_data,
    int depth,
    const xmlChar * URL,
    const xmlChar * ID,
    xmlNodePtr * lst)
    +

    Parse an external general entity An external general parsed entity is well-formed if it matches the production labeled extParsedEnt. [78] extParsedEnt ::= TextDecl? content

    +
    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
    Returns:0 if the entity is well formed, -1 in case of args problem and the parser error code otherwise

    Function: xmlParseFile

    xmlDocPtr	xmlParseFile		(const char * 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.

    +
    filename:the filename
    Returns:the resulting document tree if the file was wellformed, NULL otherwise.

    Function: xmlParseInNodeContext

    xmlParserErrors	xmlParseInNodeContext	(xmlNodePtr node, 
    const char * data,
    int datalen,
    int options,
    xmlNodePtr * lst)
    +

    Parse a well-balanced chunk of an XML document within the context (DTD, namespaces, etc ...) of the given node. The allowed sequence for the data is a Well Balanced Chunk defined by the content production in the XML grammar: [43] content ::= (element | CharData | Reference | CDSect | PI | Comment)*

    +
    node:the context node
    data:the input string
    datalen:the input string length in bytes
    options:a combination of xmlParserOption
    lst:the return value for the set of parsed nodes
    Returns:XML_ERR_OK if the chunk is well balanced, and the parser error code otherwise

    Function: xmlParseMemory

    xmlDocPtr	xmlParseMemory		(const char * buffer, 
    int size)
    +

    parse an XML in-memory block and build a tree.

    +
    buffer:an pointer to a char array
    size:the size of the array
    Returns:the resulting document tree

    Function: xmlParserAddNodeInfo

    void	xmlParserAddNodeInfo		(xmlParserCtxtPtr ctxt, 
    const xmlParserNodeInfoPtr info)
    +

    Insert node info record into the sorted sequence

    +
    ctxt:an XML parser context
    info:a node info sequence pointer

    Function: xmlParserFindNodeInfo

    const xmlParserNodeInfo *	xmlParserFindNodeInfo	(const xmlParserCtxtPtr ctx, 
    const xmlNodePtr node)
    +

    Find the parser node info struct for a given node

    +
    ctx:an XML parser context
    node:an XML node within the tree
    Returns:an xmlParserNodeInfo block pointer or NULL

    Function: xmlParserFindNodeInfoIndex

    unsigned long	xmlParserFindNodeInfoIndex	(const xmlParserNodeInfoSeqPtr seq, 
    const xmlNodePtr node)
    +

    xmlParserFindNodeInfoIndex : Find the index that the info record for the given node is or should be at in a sorted sequence

    +
    seq:a node info sequence pointer
    node:an XML node pointer
    Returns:a long indicating the position of the record

    Function type: xmlParserInputDeallocate

    Function type: xmlParserInputDeallocate
    +void	xmlParserInputDeallocate	(xmlChar * str)
    +

    Callback for freeing some parser input allocations.

    str:the string to deallocate

    +

    Function: xmlParserInputGrow

    int	xmlParserInputGrow		(xmlParserInputPtr in, 
    int len)
    +

    This function increase the input for the parser. It tries to preserve pointers to the input buffer, and keep already read data

    +
    in:an XML parser input
    len:an indicative size for the lookahead
    Returns:the amount of char read, or -1 in case of error, 0 indicate the end of this entity

    Function: xmlParserInputRead

    int	xmlParserInputRead		(xmlParserInputPtr in, 
    int len)
    +

    This function was internal and is deprecated.

    +
    in:an XML parser input
    len:an indicative size for the lookahead
    Returns:-1 as this is an error to use it.

    Function: xmlPedanticParserDefault

    int	xmlPedanticParserDefault	(int val)
    +

    Set and return the previous value for enabling pedantic warnings.

    +
    val:int 0 or 1
    Returns:the last value for 0 for no substitution, 1 for substitution.

    Function: xmlReadDoc

    xmlDocPtr	xmlReadDoc		(const xmlChar * cur, 
    const char * URL,
    const char * encoding,
    int options)
    +

    parse an XML in-memory document and build a tree.

    +
    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
    Returns:the resulting document tree

    Function: xmlReadFd

    xmlDocPtr	xmlReadFd		(int fd, 
    const char * URL,
    const char * encoding,
    int options)
    +

    parse an XML from a file descriptor and build a tree. NOTE that the file descriptor will not be closed when the reader is closed or reset.

    +
    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
    Returns:the resulting document tree

    Function: xmlReadFile

    xmlDocPtr	xmlReadFile		(const char * filename, 
    const char * encoding,
    int options)
    +

    parse an XML file from the filesystem or the network.

    +
    filename:a file or URL
    encoding:the document encoding, or NULL
    options:a combination of xmlParserOption
    Returns:the resulting document tree

    Function: xmlReadIO

    xmlDocPtr	xmlReadIO		(xmlInputReadCallback ioread, 
    xmlInputCloseCallback ioclose,
    void * ioctx,
    const char * URL,
    const char * encoding,
    int options)
    +

    parse an XML document from I/O functions and source and build a tree.

    +
    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
    Returns:the resulting document tree

    Function: xmlReadMemory

    xmlDocPtr	xmlReadMemory		(const char * buffer, 
    int size,
    const char * URL,
    const char * encoding,
    int options)
    +

    parse an XML in-memory document and build a tree.

    +
    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
    Returns:the resulting document tree

    Function: xmlRecoverDoc

    xmlDocPtr	xmlRecoverDoc		(const xmlChar * cur)
    +

    parse an XML in-memory document and build a tree. In the case the document is not Well Formed, a attempt to build a tree is tried anyway

    +
    cur:a pointer to an array of xmlChar
    Returns:the resulting document tree or NULL in case of failure

    Function: xmlRecoverFile

    xmlDocPtr	xmlRecoverFile		(const char * filename)
    +

    parse an XML file and build a tree. Automatic support for ZLIB/Compress compressed document is provided by default if found at compile-time. In the case the document is not Well Formed, it attempts to build a tree anyway

    +
    filename:the filename
    Returns:the resulting document tree or NULL in case of failure

    Function: xmlRecoverMemory

    xmlDocPtr	xmlRecoverMemory	(const char * buffer, 
    int size)
    +

    parse an XML in-memory block and build a tree. In the case the document is not Well Formed, an attempt to build a tree is tried anyway

    +
    buffer:an pointer to a char array
    size:the size of the array
    Returns:the resulting document tree or NULL in case of error

    Function: xmlSAXParseDTD

    xmlDtdPtr	xmlSAXParseDTD		(xmlSAXHandlerPtr sax, 
    const xmlChar * ExternalID,
    const xmlChar * SystemID)
    +

    Load and parse an external subset.

    +
    sax:the SAX handler block
    ExternalID:a NAME* containing the External ID of the DTD
    SystemID:a NAME* containing the URL to the DTD
    Returns:the resulting xmlDtdPtr or NULL in case of error.

    Function: xmlSAXParseDoc

    xmlDocPtr	xmlSAXParseDoc		(xmlSAXHandlerPtr sax, 
    const xmlChar * cur,
    int recovery)
    +

    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.

    +
    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
    Returns:the resulting document tree

    Function: xmlSAXParseEntity

    xmlDocPtr	xmlSAXParseEntity	(xmlSAXHandlerPtr sax, 
    const char * 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

    +
    sax:the SAX handler block
    filename:the filename
    Returns:the resulting document tree

    Function: xmlSAXParseFile

    xmlDocPtr	xmlSAXParseFile		(xmlSAXHandlerPtr sax, 
    const char * filename,
    int recovery)
    +

    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.

    +
    sax:the SAX handler block
    filename:the filename
    recovery:work in recovery mode, i.e. tries to read no Well Formed documents
    Returns:the resulting document tree

    Function: xmlSAXParseFileWithData

    xmlDocPtr	xmlSAXParseFileWithData	(xmlSAXHandlerPtr sax, 
    const char * filename,
    int recovery,
    void * data)
    +

    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

    +
    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
    Returns:the resulting document tree

    Function: xmlSAXParseMemory

    xmlDocPtr	xmlSAXParseMemory	(xmlSAXHandlerPtr sax, 
    const char * buffer,
    int size,
    int recovery)
    +

    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.

    +
    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
    Returns:the resulting document tree

    Function: xmlSAXParseMemoryWithData

    xmlDocPtr	xmlSAXParseMemoryWithData	(xmlSAXHandlerPtr sax, 
    const char * buffer,
    int size,
    int recovery,
    void * data)
    +

    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

    +
    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
    Returns:the resulting document tree

    Function: xmlSAXUserParseFile

    int	xmlSAXUserParseFile		(xmlSAXHandlerPtr sax, 
    void * user_data,
    const char * filename)
    +

    parse an XML file and call the given SAX handler routines. Automatic support for ZLIB/Compress compressed document is provided

    +
    sax:a SAX handler
    user_data:The user data returned on SAX callbacks
    filename:a file name
    Returns:0 in case of success or a error number otherwise

    Function: xmlSAXUserParseMemory

    int	xmlSAXUserParseMemory		(xmlSAXHandlerPtr sax, 
    void * user_data,
    const char * buffer,
    int size)
    +

    A better SAX parsing routine. parse an XML in-memory buffer and call the given SAX handler routines.

    +
    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
    Returns:0 in case of success or a error number otherwise

    Function: xmlSetExternalEntityLoader

    void	xmlSetExternalEntityLoader	(xmlExternalEntityLoader f)
    +

    Changes the defaultexternal entity resolver function for the application

    +
    f:the new entity resolver function

    Function: xmlSetFeature

    int	xmlSetFeature			(xmlParserCtxtPtr ctxt, 
    const char * name,
    void * value)
    +

    Change the current value of one feature of this parser instance

    +
    ctxt:an XML/HTML parser context
    name:the feature name
    value:pointer to the location of the new value
    Returns:-1 in case or error, 0 otherwise

    Function: xmlSetupParserForBuffer

    void	xmlSetupParserForBuffer		(xmlParserCtxtPtr ctxt, 
    const xmlChar * buffer,
    const char * filename)
    +

    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

    +
    ctxt:an XML parser context
    buffer:a xmlChar * buffer
    filename:a file name

    Function: xmlStopParser

    void	xmlStopParser			(xmlParserCtxtPtr ctxt)
    +

    Blocks further parser processing

    +
    ctxt:an XML parser context

    Function: xmlSubstituteEntitiesDefault

    int	xmlSubstituteEntitiesDefault	(int val)
    +

    Set and return the previous value for default entity support. Initially the parser always keep entity references instead of substituting entity values in the output. This function has to be used to change the default parser behavior SAX::substituteEntities() has to be used for changing that on a file by file basis.

    +
    val:int 0 or 1
    Returns:the last value for 0 for no substitution, 1 for substitution.

    Daniel Veillard

    diff --git a/doc/html/libxml-parserInternals.html b/doc/html/libxml-parserInternals.html new file mode 100644 index 0000000..4d1292b --- /dev/null +++ b/doc/html/libxml-parserInternals.html @@ -0,0 +1,322 @@ + + +Module parserInternals from libxml2
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    Module parserInternals from libxml2

    API Menu
    API Indexes
    Related links

    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.

    Table of Contents

    #define INPUT_CHUNK
    #define IS_ASCII_DIGIT
    #define IS_ASCII_LETTER
    #define IS_BASECHAR
    #define IS_BLANK
    #define IS_BLANK_CH
    #define IS_BYTE_CHAR
    #define IS_CHAR
    #define IS_CHAR_CH
    #define IS_COMBINING
    #define IS_COMBINING_CH
    #define IS_DIGIT
    #define IS_DIGIT_CH
    #define IS_EXTENDER
    #define IS_EXTENDER_CH
    #define IS_IDEOGRAPHIC
    #define IS_LETTER
    #define IS_LETTER_CH
    #define IS_PUBIDCHAR
    #define IS_PUBIDCHAR_CH
    #define MOVETO_ENDTAG
    #define MOVETO_STARTTAG
    #define SKIP_EOL
    #define XML_MAX_DICTIONARY_LIMIT
    #define XML_MAX_LOOKUP_LIMIT
    #define XML_MAX_NAMELEN
    #define XML_MAX_NAME_LENGTH
    #define XML_MAX_TEXT_LENGTH
    #define XML_SUBSTITUTE_BOTH
    #define XML_SUBSTITUTE_NONE
    #define XML_SUBSTITUTE_PEREF
    #define XML_SUBSTITUTE_REF
    htmlParserCtxtPtr	htmlCreateFileParserCtxt	(const char * filename, 
    const char * encoding)
    +
    void	htmlInitAutoClose		(void)
    +
    xmlParserInputPtr	inputPop	(xmlParserCtxtPtr ctxt)
    +
    int	inputPush			(xmlParserCtxtPtr ctxt, 
    xmlParserInputPtr value)
    +
    const xmlChar *	namePop			(xmlParserCtxtPtr ctxt)
    +
    int	namePush			(xmlParserCtxtPtr ctxt, 
    const xmlChar * value)
    +
    xmlNodePtr	nodePop			(xmlParserCtxtPtr ctxt)
    +
    int	nodePush			(xmlParserCtxtPtr ctxt, 
    xmlNodePtr value)
    +
    int	xmlCheckLanguageID		(const xmlChar * lang)
    +
    int	xmlCopyChar			(int len, 
    xmlChar * out,
    int val)
    +
    int	xmlCopyCharMultiByte		(xmlChar * out, 
    int val)
    +
    xmlParserCtxtPtr	xmlCreateEntityParserCtxt	(const xmlChar * URL, 
    const xmlChar * ID,
    const xmlChar * base)
    +
    xmlParserCtxtPtr	xmlCreateFileParserCtxt	(const char * filename)
    +
    xmlParserCtxtPtr	xmlCreateMemoryParserCtxt	(const char * buffer, 
    int size)
    +
    xmlParserCtxtPtr	xmlCreateURLParserCtxt	(const char * filename, 
    int options)
    +
    int	xmlCurrentChar			(xmlParserCtxtPtr ctxt, 
    int * len)
    +
    xmlChar *	xmlDecodeEntities	(xmlParserCtxtPtr ctxt, 
    int len,
    int what,
    xmlChar end,
    xmlChar end2,
    xmlChar end3)
    +
    Function type: xmlEntityReferenceFunc
    +void	xmlEntityReferenceFunc		(xmlEntityPtr ent, 
    xmlNodePtr firstNode,
    xmlNodePtr lastNode) +
    +
    void	xmlErrMemory			(xmlParserCtxtPtr ctxt, 
    const char * extra)
    +
    void	xmlFreeInputStream		(xmlParserInputPtr input)
    +
    void	xmlHandleEntity			(xmlParserCtxtPtr ctxt, 
    xmlEntityPtr entity)
    +
    int	xmlIsLetter			(int c)
    +
    xmlChar *	xmlNamespaceParseNCName	(xmlParserCtxtPtr ctxt)
    +
    xmlChar *	xmlNamespaceParseNSDef	(xmlParserCtxtPtr ctxt)
    +
    xmlChar *	xmlNamespaceParseQName	(xmlParserCtxtPtr ctxt, 
    xmlChar ** prefix)
    +
    xmlParserInputPtr	xmlNewEntityInputStream	(xmlParserCtxtPtr ctxt, 
    xmlEntityPtr entity)
    +
    xmlParserInputPtr	xmlNewInputFromFile	(xmlParserCtxtPtr ctxt, 
    const char * filename)
    +
    xmlParserInputPtr	xmlNewInputStream	(xmlParserCtxtPtr ctxt)
    +
    xmlParserInputPtr	xmlNewStringInputStream	(xmlParserCtxtPtr ctxt, 
    const xmlChar * buffer)
    +
    void	xmlNextChar			(xmlParserCtxtPtr ctxt)
    +
    xmlChar *	xmlParseAttValue	(xmlParserCtxtPtr ctxt)
    +
    const xmlChar *	xmlParseAttribute	(xmlParserCtxtPtr ctxt, 
    xmlChar ** value)
    +
    void	xmlParseAttributeListDecl	(xmlParserCtxtPtr ctxt)
    +
    int	xmlParseAttributeType		(xmlParserCtxtPtr ctxt, 
    xmlEnumerationPtr * tree)
    +
    void	xmlParseCDSect			(xmlParserCtxtPtr ctxt)
    +
    void	xmlParseCharData		(xmlParserCtxtPtr ctxt, 
    int cdata)
    +
    int	xmlParseCharRef			(xmlParserCtxtPtr ctxt)
    +
    void	xmlParseComment			(xmlParserCtxtPtr ctxt)
    +
    void	xmlParseContent			(xmlParserCtxtPtr ctxt)
    +
    int	xmlParseDefaultDecl		(xmlParserCtxtPtr ctxt, 
    xmlChar ** value)
    +
    void	xmlParseDocTypeDecl		(xmlParserCtxtPtr ctxt)
    +
    void	xmlParseElement			(xmlParserCtxtPtr ctxt)
    +
    xmlElementContentPtr	xmlParseElementChildrenContentDecl	(xmlParserCtxtPtr ctxt, 
    int inputchk)
    +
    int	xmlParseElementContentDecl	(xmlParserCtxtPtr ctxt, 
    const xmlChar * name,
    xmlElementContentPtr * result)
    +
    int	xmlParseElementDecl		(xmlParserCtxtPtr ctxt)
    +
    xmlElementContentPtr	xmlParseElementMixedContentDecl	(xmlParserCtxtPtr ctxt, 
    int inputchk)
    +
    xmlChar *	xmlParseEncName		(xmlParserCtxtPtr ctxt)
    +
    const xmlChar *	xmlParseEncodingDecl	(xmlParserCtxtPtr ctxt)
    +
    void	xmlParseEndTag			(xmlParserCtxtPtr ctxt)
    +
    void	xmlParseEntityDecl		(xmlParserCtxtPtr ctxt)
    +
    xmlEntityPtr	xmlParseEntityRef	(xmlParserCtxtPtr ctxt)
    +
    xmlChar *	xmlParseEntityValue	(xmlParserCtxtPtr ctxt, 
    xmlChar ** orig)
    +
    int	xmlParseEnumeratedType		(xmlParserCtxtPtr ctxt, 
    xmlEnumerationPtr * tree)
    +
    xmlEnumerationPtr	xmlParseEnumerationType	(xmlParserCtxtPtr ctxt)
    +
    xmlChar *	xmlParseExternalID	(xmlParserCtxtPtr ctxt, 
    xmlChar ** publicID,
    int strict)
    +
    void	xmlParseExternalSubset		(xmlParserCtxtPtr ctxt, 
    const xmlChar * ExternalID,
    const xmlChar * SystemID)
    +
    void	xmlParseMarkupDecl		(xmlParserCtxtPtr ctxt)
    +
    void	xmlParseMisc			(xmlParserCtxtPtr ctxt)
    +
    const xmlChar *	xmlParseName		(xmlParserCtxtPtr ctxt)
    +
    void	xmlParseNamespace		(xmlParserCtxtPtr ctxt)
    +
    xmlChar *	xmlParseNmtoken		(xmlParserCtxtPtr ctxt)
    +
    void	xmlParseNotationDecl		(xmlParserCtxtPtr ctxt)
    +
    xmlEnumerationPtr	xmlParseNotationType	(xmlParserCtxtPtr ctxt)
    +
    void	xmlParsePEReference		(xmlParserCtxtPtr ctxt)
    +
    void	xmlParsePI			(xmlParserCtxtPtr ctxt)
    +
    const xmlChar *	xmlParsePITarget	(xmlParserCtxtPtr ctxt)
    +
    xmlChar *	xmlParsePubidLiteral	(xmlParserCtxtPtr ctxt)
    +
    xmlChar *	xmlParseQuotedString	(xmlParserCtxtPtr ctxt)
    +
    void	xmlParseReference		(xmlParserCtxtPtr ctxt)
    +
    int	xmlParseSDDecl			(xmlParserCtxtPtr ctxt)
    +
    const xmlChar *	xmlParseStartTag	(xmlParserCtxtPtr ctxt)
    +
    xmlChar *	xmlParseSystemLiteral	(xmlParserCtxtPtr ctxt)
    +
    void	xmlParseTextDecl		(xmlParserCtxtPtr ctxt)
    +
    xmlChar *	xmlParseVersionInfo	(xmlParserCtxtPtr ctxt)
    +
    xmlChar *	xmlParseVersionNum	(xmlParserCtxtPtr ctxt)
    +
    void	xmlParseXMLDecl			(xmlParserCtxtPtr ctxt)
    +
    void	xmlParserHandlePEReference	(xmlParserCtxtPtr ctxt)
    +
    void	xmlParserHandleReference	(xmlParserCtxtPtr ctxt)
    +
    void	xmlParserInputShrink		(xmlParserInputPtr in)
    +
    xmlChar	xmlPopInput			(xmlParserCtxtPtr ctxt)
    +
    int	xmlPushInput			(xmlParserCtxtPtr ctxt, 
    xmlParserInputPtr input)
    +
    xmlChar *	xmlScanName		(xmlParserCtxtPtr ctxt)
    +
    void	xmlSetEntityReferenceFunc	(xmlEntityReferenceFunc func)
    +
    int	xmlSkipBlankChars		(xmlParserCtxtPtr ctxt)
    +
    xmlChar *	xmlSplitQName		(xmlParserCtxtPtr ctxt, 
    const xmlChar * name,
    xmlChar ** prefix)
    +
    int	xmlStringCurrentChar		(xmlParserCtxtPtr ctxt, 
    const xmlChar * cur,
    int * len)
    +
    xmlChar *	xmlStringDecodeEntities	(xmlParserCtxtPtr ctxt, 
    const xmlChar * str,
    int what,
    xmlChar end,
    xmlChar end2,
    xmlChar end3)
    +
    xmlChar *	xmlStringLenDecodeEntities	(xmlParserCtxtPtr ctxt, 
    const xmlChar * str,
    int len,
    int what,
    xmlChar end,
    xmlChar end2,
    xmlChar end3)
    +
    int	xmlSwitchEncoding		(xmlParserCtxtPtr ctxt, 
    xmlCharEncoding enc)
    +
    int	xmlSwitchInputEncoding		(xmlParserCtxtPtr ctxt, 
    xmlParserInputPtr input,
    xmlCharEncodingHandlerPtr handler)
    +
    int	xmlSwitchToEncoding		(xmlParserCtxtPtr ctxt, 
    xmlCharEncodingHandlerPtr handler)
    +

    Description

    +

    Macro: INPUT_CHUNK

    #define INPUT_CHUNK

    The parser tries to always have that amount of input ready. One of the point is providing context when reporting errors.

    +

    Macro: IS_ASCII_DIGIT

    #define IS_ASCII_DIGIT

    Macro to check [0-9]

    +

    Macro: IS_ASCII_LETTER

    #define IS_ASCII_LETTER

    Macro to check [a-zA-Z]

    +

    Macro: IS_BASECHAR

    #define IS_BASECHAR

    Macro to check the following production in the XML spec: [85] BaseChar ::= ... long list see REC ...

    +

    Macro: IS_BLANK

    #define IS_BLANK

    Macro to check the following production in the XML spec: [3] S ::= (#x20 | #x9 | #xD | #xA)+

    +

    Macro: IS_BLANK_CH

    #define IS_BLANK_CH

    Behaviour same as IS_BLANK

    +

    Macro: IS_BYTE_CHAR

    #define IS_BYTE_CHAR

    Macro to check the following production in the XML spec: [2] Char ::= #x9 | #xA | #xD | [#x20...] any byte character in the accepted range

    +

    Macro: IS_CHAR

    #define IS_CHAR

    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.

    +

    Macro: IS_CHAR_CH

    #define IS_CHAR_CH

    Behaves like IS_CHAR on single-byte value

    +

    Macro: IS_COMBINING

    #define IS_COMBINING

    Macro to check the following production in the XML spec: [87] CombiningChar ::= ... long list see REC ...

    +

    Macro: IS_COMBINING_CH

    #define IS_COMBINING_CH

    Always false (all combining chars > 0xff)

    +

    Macro: IS_DIGIT

    #define IS_DIGIT

    Macro to check the following production in the XML spec: [88] Digit ::= ... long list see REC ...

    +

    Macro: IS_DIGIT_CH

    #define IS_DIGIT_CH

    Behaves like IS_DIGIT but with a single byte argument

    +

    Macro: IS_EXTENDER

    #define IS_EXTENDER

    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]

    +

    Macro: IS_EXTENDER_CH

    #define IS_EXTENDER_CH

    Behaves like IS_EXTENDER but with a single-byte argument

    +

    Macro: IS_IDEOGRAPHIC

    #define IS_IDEOGRAPHIC

    Macro to check the following production in the XML spec: [86] Ideographic ::= [#x4E00-#x9FA5] | #x3007 | [#x3021-#x3029]

    +

    Macro: IS_LETTER

    #define IS_LETTER

    Macro to check the following production in the XML spec: [84] Letter ::= BaseChar | Ideographic

    +

    Macro: IS_LETTER_CH

    #define IS_LETTER_CH

    Macro behaves like IS_LETTER, but only check base chars

    +

    Macro: IS_PUBIDCHAR

    #define IS_PUBIDCHAR

    Macro to check the following production in the XML spec: [13] PubidChar ::= #x20 | #xD | #xA | [a-zA-Z0-9] | [-'()+,./:=?;!*#@$_%]

    +

    Macro: IS_PUBIDCHAR_CH

    #define IS_PUBIDCHAR_CH

    Same as IS_PUBIDCHAR but for single-byte value

    +

    Macro: MOVETO_ENDTAG

    #define MOVETO_ENDTAG

    Skips to the next '>' char.

    +

    Macro: MOVETO_STARTTAG

    #define MOVETO_STARTTAG

    Skips to the next '<' char.

    +

    Macro: SKIP_EOL

    #define SKIP_EOL

    Skips the end of line chars.

    +

    Macro: XML_MAX_DICTIONARY_LIMIT

    #define XML_MAX_DICTIONARY_LIMIT

    Maximum size allowed by the parser for a dictionary by default This is not a limitation of the parser but a safety boundary feature, use XML_PARSE_HUGE option to override it. Introduced in 2.9.0

    +

    Macro: XML_MAX_LOOKUP_LIMIT

    #define XML_MAX_LOOKUP_LIMIT

    Maximum size allowed by the parser for ahead lookup This is an upper boundary enforced by the parser to avoid bad behaviour on "unfriendly' content Introduced in 2.9.0

    +

    Macro: XML_MAX_NAMELEN

    #define XML_MAX_NAMELEN

    Identifiers can be longer, but this will be more costly at runtime.

    +

    Macro: XML_MAX_NAME_LENGTH

    #define XML_MAX_NAME_LENGTH

    Maximum size allowed for a markup identitier This is not a limitation of the parser but a safety boundary feature, use XML_PARSE_HUGE option to override it. Note that with the use of parsing dictionaries overriding the limit may result in more runtime memory usage in face of "unfriendly' content Introduced in 2.9.0

    +

    Macro: XML_MAX_TEXT_LENGTH

    #define XML_MAX_TEXT_LENGTH

    Maximum size allowed for a single text node when building a tree. This is not a limitation of the parser but a safety boundary feature, use XML_PARSE_HUGE option to override it. Introduced in 2.9.0

    +

    Macro: XML_SUBSTITUTE_BOTH

    #define XML_SUBSTITUTE_BOTH

    Both general and parameter entities need to be substituted.

    +

    Macro: XML_SUBSTITUTE_NONE

    #define XML_SUBSTITUTE_NONE

    If no entities need to be substituted.

    +

    Macro: XML_SUBSTITUTE_PEREF

    #define XML_SUBSTITUTE_PEREF

    Whether parameter entities need to be substituted.

    +

    Macro: XML_SUBSTITUTE_REF

    #define XML_SUBSTITUTE_REF

    Whether general entities need to be substituted.

    +

    Function: htmlCreateFileParserCtxt

    htmlParserCtxtPtr	htmlCreateFileParserCtxt	(const char * filename, 
    const char * encoding)
    +

    Create a parser context for a file content. Automatic support for ZLIB/Compress compressed document is provided by default if found at compile-time.

    +
    filename:the filename
    encoding:a free form C string describing the HTML document encoding, or NULL
    Returns:the new parser context or NULL

    Function: htmlInitAutoClose

    void	htmlInitAutoClose		(void)
    +

    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.

    +

    Function: inputPop

    xmlParserInputPtr	inputPop	(xmlParserCtxtPtr ctxt)
    +

    Pops the top parser input from the input stack

    +
    ctxt:an XML parser context
    Returns:the input just removed

    Function: inputPush

    int	inputPush			(xmlParserCtxtPtr ctxt, 
    xmlParserInputPtr value)
    +

    Pushes a new parser input on top of the input stack

    +
    ctxt:an XML parser context
    value:the parser input
    Returns:-1 in case of error, the index in the stack otherwise

    Function: namePop

    const xmlChar *	namePop			(xmlParserCtxtPtr ctxt)
    +

    Pops the top element name from the name stack

    +
    ctxt:an XML parser context
    Returns:the name just removed

    Function: namePush

    int	namePush			(xmlParserCtxtPtr ctxt, 
    const xmlChar * value)
    +

    Pushes a new element name on top of the name stack

    +
    ctxt:an XML parser context
    value:the element name
    Returns:-1 in case of error, the index in the stack otherwise

    Function: nodePop

    xmlNodePtr	nodePop			(xmlParserCtxtPtr ctxt)
    +

    Pops the top element node from the node stack

    +
    ctxt:an XML parser context
    Returns:the node just removed

    Function: nodePush

    int	nodePush			(xmlParserCtxtPtr ctxt, 
    xmlNodePtr value)
    +

    Pushes a new element node on top of the node stack

    +
    ctxt:an XML parser context
    value:the element node
    Returns:-1 in case of error, the index in the stack otherwise

    Function: xmlCheckLanguageID

    int	xmlCheckLanguageID		(const xmlChar * lang)
    +

    Checks that the value conforms to the LanguageID production: NOTE: this is somewhat deprecated, those productions were removed from the XML Second edition. [33] LanguageID ::= Langcode ('-' Subcode)* [34] Langcode ::= ISO639Code | IanaCode | UserCode [35] ISO639Code ::= ([a-z] | [A-Z]) ([a-z] | [A-Z]) [36] IanaCode ::= ('i' | 'I') '-' ([a-z] | [A-Z])+ [37] UserCode ::= ('x' | 'X') '-' ([a-z] | [A-Z])+ [38] Subcode ::= ([a-z] | [A-Z])+ The current REC reference the sucessors of RFC 1766, currently 5646 http://www.rfc-editor.org/rfc/rfc5646.txt langtag = language ["-" script] ["-" region] *("-" variant) *("-" extension) ["-" privateuse] language = 2*3ALPHA ; shortest ISO 639 code ["-" extlang] ; sometimes followed by ; extended language subtags / 4ALPHA ; or reserved for future use / 5*8ALPHA ; or registered language subtag extlang = 3ALPHA ; selected ISO 639 codes *2("-" 3ALPHA) ; permanently reserved script = 4ALPHA ; ISO 15924 code region = 2ALPHA ; ISO 3166-1 code / 3DIGIT ; UN M.49 code variant = 5*8alphanum ; registered variants / (DIGIT 3alphanum) extension = singleton 1*("-" (2*8alphanum)) ; Single alphanumerics ; "x" reserved for private use singleton = DIGIT ; 0 - 9 / %x41-57 ; A - W / %x59-5A ; Y - Z / %x61-77 ; a - w / %x79-7A ; y - z it sounds right to still allow Irregular i-xxx IANA and user codes too The parser below doesn't try to cope with extension or privateuse that could be added but that's not interoperable anyway

    +
    lang:pointer to the string value
    Returns:1 if correct 0 otherwise

    Function: xmlCopyChar

    int	xmlCopyChar			(int len, 
    xmlChar * out,
    int val)
    +

    append the char value in the array

    +
    len:Ignored, compatibility
    out:pointer to an array of xmlChar
    val:the char value
    Returns:the number of xmlChar written

    Function: xmlCopyCharMultiByte

    int	xmlCopyCharMultiByte		(xmlChar * out, 
    int val)
    +

    append the char value in the array

    +
    out:pointer to an array of xmlChar
    val:the char value
    Returns:the number of xmlChar written

    Function: xmlCreateEntityParserCtxt

    xmlParserCtxtPtr	xmlCreateEntityParserCtxt	(const xmlChar * URL, 
    const xmlChar * ID,
    const xmlChar * base)
    +

    Create a parser context for an external entity Automatic support for ZLIB/Compress compressed document is provided by default if found at compile-time.

    +
    URL:the entity URL
    ID:the entity PUBLIC ID
    base:a possible base for the target URI
    Returns:the new parser context or NULL

    Function: xmlCreateFileParserCtxt

    xmlParserCtxtPtr	xmlCreateFileParserCtxt	(const char * 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.

    +
    filename:the filename
    Returns:the new parser context or NULL

    Function: xmlCreateMemoryParserCtxt

    xmlParserCtxtPtr	xmlCreateMemoryParserCtxt	(const char * buffer, 
    int size)
    +

    Create a parser context for an XML in-memory document.

    +
    buffer:a pointer to a char array
    size:the size of the array
    Returns:the new parser context or NULL

    Function: xmlCreateURLParserCtxt

    xmlParserCtxtPtr	xmlCreateURLParserCtxt	(const char * filename, 
    int options)
    +

    Create a parser context for a file or URL content. Automatic support for ZLIB/Compress compressed document is provided by default if found at compile-time and for file accesses

    +
    filename:the filename or URL
    options:a combination of xmlParserOption
    Returns:the new parser context or NULL

    Function: xmlCurrentChar

    int	xmlCurrentChar			(xmlParserCtxtPtr ctxt, 
    int * len)
    +

    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.)

    +
    ctxt:the XML parser context
    len:pointer to the length of the char read
    Returns:the current char value and its length

    Function: xmlDecodeEntities

    xmlChar *	xmlDecodeEntities	(xmlParserCtxtPtr ctxt, 
    int len,
    int what,
    xmlChar end,
    xmlChar end2,
    xmlChar end3)
    +

    This function is deprecated, we now always process entities content through xmlStringDecodeEntities TODO: remove it in next major release. [67] Reference ::= EntityRef | CharRef [69] PEReference ::= '%' Name ';'

    +
    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
    Returns:A newly allocated string with the substitution done. The caller must deallocate it !

    Function type: xmlEntityReferenceFunc

    Function type: xmlEntityReferenceFunc
    +void	xmlEntityReferenceFunc		(xmlEntityPtr ent, 
    xmlNodePtr firstNode,
    xmlNodePtr lastNode) +

    Callback function used when one needs to be able to track back the provenance of a chunk of nodes inherited from an entity replacement.

    ent:the entity
    firstNode:the fist node in the chunk
    lastNode:the last nod in the chunk

    +

    Function: xmlErrMemory

    void	xmlErrMemory			(xmlParserCtxtPtr ctxt, 
    const char * extra)
    +

    Handle a redefinition of attribute error

    +
    ctxt:an XML parser context
    extra:extra informations

    Function: xmlFreeInputStream

    void	xmlFreeInputStream		(xmlParserInputPtr input)
    +

    Free up an input stream.

    +

    Function: xmlHandleEntity

    void	xmlHandleEntity			(xmlParserCtxtPtr ctxt, 
    xmlEntityPtr entity)
    +

    Default handling of defined entities, when should we define a new input stream ? When do we just handle that as a set of chars ? OBSOLETE: to be removed at some point.

    +
    ctxt:an XML parser context
    entity:an XML entity pointer.

    Function: xmlIsLetter

    int	xmlIsLetter			(int c)
    +

    Check whether the character is allowed by the production [84] Letter ::= BaseChar | Ideographic

    +
    c:an unicode character (int)
    Returns:0 if not, non-zero otherwise

    Function: xmlNamespaceParseNCName

    xmlChar *	xmlNamespaceParseNCName	(xmlParserCtxtPtr ctxt)
    +

    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

    +
    ctxt:an XML parser context
    Returns:the namespace name or NULL

    Function: xmlNamespaceParseNSDef

    xmlChar *	xmlNamespaceParseNSDef	(xmlParserCtxtPtr ctxt)
    +

    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)?

    +
    ctxt:an XML parser context
    Returns:the namespace name

    Function: xmlNamespaceParseQName

    xmlChar *	xmlNamespaceParseQName	(xmlParserCtxtPtr ctxt, 
    xmlChar ** prefix)
    +

    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

    +
    ctxt:an XML parser context
    prefix:a xmlChar **
    Returns:the local part, and prefix is updated to get the Prefix if any.

    Function: xmlNewEntityInputStream

    xmlParserInputPtr	xmlNewEntityInputStream	(xmlParserCtxtPtr ctxt, 
    xmlEntityPtr entity)
    +

    Create a new input stream based on an xmlEntityPtr

    +
    ctxt:an XML parser context
    entity:an Entity pointer
    Returns:the new input stream or NULL

    Function: xmlNewInputFromFile

    xmlParserInputPtr	xmlNewInputFromFile	(xmlParserCtxtPtr ctxt, 
    const char * filename)
    +

    Create a new input stream based on a file or an URL.

    +
    ctxt:an XML parser context
    filename:the filename to use as entity
    Returns:the new input stream or NULL in case of error

    Function: xmlNewInputStream

    xmlParserInputPtr	xmlNewInputStream	(xmlParserCtxtPtr ctxt)
    +

    Create a new input stream structure.

    +
    ctxt:an XML parser context
    Returns:the new input stream or NULL

    Function: xmlNewStringInputStream

    xmlParserInputPtr	xmlNewStringInputStream	(xmlParserCtxtPtr ctxt, 
    const xmlChar * buffer)
    +

    Create a new input stream based on a memory buffer.

    +
    ctxt:an XML parser context
    buffer:an memory buffer
    Returns:the new input stream

    Function: xmlNextChar

    void	xmlNextChar			(xmlParserCtxtPtr ctxt)
    +

    Skip to the next char input char.

    +
    ctxt:the XML parser context

    Function: xmlParseAttValue

    xmlChar *	xmlParseAttValue	(xmlParserCtxtPtr ctxt)
    +

    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.

    +
    ctxt:an XML parser context
    Returns:the AttValue parsed or NULL. The value has to be freed by the caller.

    Function: xmlParseAttribute

    const xmlChar *	xmlParseAttribute	(xmlParserCtxtPtr ctxt, 
    xmlChar ** value)
    +

    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.

    +
    ctxt:an XML parser context
    value:a xmlChar ** used to store the value of the attribute
    Returns:the attribute name, and the value in *value.

    Function: xmlParseAttributeListDecl

    void	xmlParseAttributeListDecl	(xmlParserCtxtPtr ctxt)
    +

    : parse the Attribute list def for an element [52] AttlistDecl ::= '<!ATTLIST' S Name AttDef* S? '>' [53] AttDef ::= S Name S AttType S DefaultDecl

    +
    ctxt:an XML parser context

    Function: xmlParseAttributeType

    int	xmlParseAttributeType		(xmlParserCtxtPtr ctxt, 
    xmlEnumerationPtr * tree)
    +

    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.

    +
    ctxt:an XML parser context
    tree:the enumeration tree built while parsing
    Returns:the attribute type

    Function: xmlParseCDSect

    void	xmlParseCDSect			(xmlParserCtxtPtr ctxt)
    +

    Parse escaped pure raw content. [18] CDSect ::= CDStart CData CDEnd [19] CDStart ::= '<![CDATA[' [20] Data ::= (Char* - (Char* ']]>' Char*)) [21] CDEnd ::= ']]>'

    +
    ctxt:an XML parser context

    Function: xmlParseCharData

    void	xmlParseCharData		(xmlParserCtxtPtr ctxt, 
    int cdata)
    +

    parse a CharData section. if we are within a CDATA section ']]>' marks an end of section. The right angle bracket (>) may be represented using the string "&gt;", and must, for compatibility, be escaped using "&gt;" or a character reference when it appears in the string "]]>" in content, when that string is not marking the end of a CDATA section. [14] CharData ::= [^<&]* - ([^<&]* ']]>' [^<&]*)

    +
    ctxt:an XML parser context
    cdata:int indicating whether we are within a CDATA section

    Function: xmlParseCharRef

    int	xmlParseCharRef			(xmlParserCtxtPtr ctxt)
    +

    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.

    +
    ctxt:an XML parser context
    Returns:the value parsed (as an int), 0 in case of error

    Function: xmlParseComment

    void	xmlParseComment			(xmlParserCtxtPtr ctxt)
    +

    Skip an XML (SGML) comment <!-- .... --> The spec says that "For compatibility, the string "--" (double-hyphen) must not occur within comments. " [15] Comment ::= '<!--' ((Char - '-') | ('-' (Char - '-')))* '-->'

    +
    ctxt:an XML parser context

    Function: xmlParseContent

    void	xmlParseContent			(xmlParserCtxtPtr ctxt)
    +

    Parse a content: [43] content ::= (element | CharData | Reference | CDSect | PI | Comment)*

    +
    ctxt:an XML parser context

    Function: xmlParseDefaultDecl

    int	xmlParseDefaultDecl		(xmlParserCtxtPtr ctxt, 
    xmlChar ** value)
    +

    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()

    +
    ctxt:an XML parser context
    value:Receive a possible fixed default value for the attribute
    Returns:XML_ATTRIBUTE_NONE, XML_ATTRIBUTE_REQUIRED, XML_ATTRIBUTE_IMPLIED or XML_ATTRIBUTE_FIXED.

    Function: xmlParseDocTypeDecl

    void	xmlParseDocTypeDecl		(xmlParserCtxtPtr ctxt)
    +

    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.

    +
    ctxt:an XML parser context

    Function: xmlParseElement

    void	xmlParseElement			(xmlParserCtxtPtr ctxt)
    +

    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.

    +
    ctxt:an XML parser context

    Function: xmlParseElementChildrenContentDecl

    xmlElementContentPtr	xmlParseElementChildrenContentDecl	(xmlParserCtxtPtr ctxt, 
    int inputchk)
    +

    parse the declaration for a Mixed Element content The leading '(' and spaces have been skipped in xmlParseElementContentDecl [47] children ::= (choice | seq) ('?' | '*' | '+')? [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 ,).

    +
    ctxt:an XML parser context
    inputchk:the input used for the current entity, needed for boundary checks
    Returns:the tree of xmlElementContentPtr describing the element hierarchy.

    Function: xmlParseElementContentDecl

    int	xmlParseElementContentDecl	(xmlParserCtxtPtr ctxt, 
    const xmlChar * name,
    xmlElementContentPtr * result)
    +

    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

    +
    ctxt:an XML parser context
    name:the name of the element being defined.
    result:the Element Content pointer will be stored here if any
    Returns:the type of element content XML_ELEMENT_TYPE_xxx

    Function: xmlParseElementDecl

    int	xmlParseElementDecl		(xmlParserCtxtPtr ctxt)
    +

    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

    +
    ctxt:an XML parser context
    Returns:the type of the element, or -1 in case of error

    Function: xmlParseElementMixedContentDecl

    xmlElementContentPtr	xmlParseElementMixedContentDecl	(xmlParserCtxtPtr ctxt, 
    int inputchk)
    +

    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.

    +
    ctxt:an XML parser context
    inputchk:the input used for the current entity, needed for boundary checks
    Returns:the list of the xmlElementContentPtr describing the element choices

    Function: xmlParseEncName

    xmlChar *	xmlParseEncName		(xmlParserCtxtPtr ctxt)
    +

    parse the XML encoding name [81] EncName ::= [A-Za-z] ([A-Za-z0-9._] | '-')*

    +
    ctxt:an XML parser context
    Returns:the encoding name value or NULL

    Function: xmlParseEncodingDecl

    const xmlChar *	xmlParseEncodingDecl	(xmlParserCtxtPtr ctxt)
    +

    parse the XML encoding declaration [80] EncodingDecl ::= S 'encoding' Eq ('"' EncName '"' | "'" EncName "'") this setups the conversion filters.

    +
    ctxt:an XML parser context
    Returns:the encoding value or NULL

    Function: xmlParseEndTag

    void	xmlParseEndTag			(xmlParserCtxtPtr ctxt)
    +

    parse an end of tag [42] ETag ::= '</' Name S? '>' With namespace [NS 9] ETag ::= '</' QName S? '>'

    +
    ctxt:an XML parser context

    Function: xmlParseEntityDecl

    void	xmlParseEntityDecl		(xmlParserCtxtPtr ctxt)
    +

    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.

    +
    ctxt:an XML parser context

    Function: xmlParseEntityRef

    xmlEntityPtr	xmlParseEntityRef	(xmlParserCtxtPtr ctxt)
    +

    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

    +
    ctxt:an XML parser context
    Returns:the xmlEntityPtr if found, or NULL otherwise.

    Function: xmlParseEntityValue

    xmlChar *	xmlParseEntityValue	(xmlParserCtxtPtr ctxt, 
    xmlChar ** orig)
    +

    parse a value for ENTITY declarations [9] EntityValue ::= '"' ([^%&"] | PEReference | Reference)* '"' | "'" ([^%&'] | PEReference | Reference)* "'"

    +
    ctxt:an XML parser context
    orig:if non-NULL store a copy of the original entity value
    Returns:the EntityValue parsed with reference substituted or NULL

    Function: xmlParseEnumeratedType

    int	xmlParseEnumeratedType		(xmlParserCtxtPtr ctxt, 
    xmlEnumerationPtr * tree)
    +

    parse an Enumerated attribute type. [57] EnumeratedType ::= NotationType | Enumeration [58] NotationType ::= 'NOTATION' S '(' S? Name (S? '|' S? Name)* S? ')'

    +
    ctxt:an XML parser context
    tree:the enumeration tree built while parsing
    Returns:XML_ATTRIBUTE_ENUMERATION or XML_ATTRIBUTE_NOTATION

    Function: xmlParseEnumerationType

    xmlEnumerationPtr	xmlParseEnumerationType	(xmlParserCtxtPtr ctxt)
    +

    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

    +
    ctxt:an XML parser context
    Returns:the enumeration attribute tree built while parsing

    Function: xmlParseExternalID

    xmlChar *	xmlParseExternalID	(xmlParserCtxtPtr ctxt, 
    xmlChar ** publicID,
    int strict)
    +

    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

    +
    ctxt:an XML parser context
    publicID:a xmlChar** receiving PubidLiteral
    strict:indicate whether we should restrict parsing to only production [75], see NOTE below
    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.

    Function: xmlParseExternalSubset

    void	xmlParseExternalSubset		(xmlParserCtxtPtr ctxt, 
    const xmlChar * ExternalID,
    const xmlChar * SystemID)
    +

    parse Markup declarations from an external subset [30] extSubset ::= textDecl? extSubsetDecl [31] extSubsetDecl ::= (markupdecl | conditionalSect | PEReference | S) *

    +
    ctxt:an XML parser context
    ExternalID:the external identifier
    SystemID:the system identifier (or URL)

    Function: xmlParseMarkupDecl

    void	xmlParseMarkupDecl		(xmlParserCtxtPtr ctxt)
    +

    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.)

    +
    ctxt:an XML parser context

    Function: xmlParseMisc

    void	xmlParseMisc			(xmlParserCtxtPtr ctxt)
    +

    parse an XML Misc* optional field. [27] Misc ::= Comment | PI | S

    +
    ctxt:an XML parser context

    Function: xmlParseName

    const xmlChar *	xmlParseName		(xmlParserCtxtPtr ctxt)
    +

    parse an XML name. [4] NameChar ::= Letter | Digit | '.' | '-' | '_' | ':' | CombiningChar | Extender [5] Name ::= (Letter | '_' | ':') (NameChar)* [6] Names ::= Name (#x20 Name)*

    +
    ctxt:an XML parser context
    Returns:the Name parsed or NULL

    Function: xmlParseNamespace

    void	xmlParseNamespace		(xmlParserCtxtPtr ctxt)
    +

    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

    +
    ctxt:an XML parser context

    Function: xmlParseNmtoken

    xmlChar *	xmlParseNmtoken		(xmlParserCtxtPtr ctxt)
    +

    parse an XML Nmtoken. [7] Nmtoken ::= (NameChar)+ [8] Nmtokens ::= Nmtoken (#x20 Nmtoken)*

    +
    ctxt:an XML parser context
    Returns:the Nmtoken parsed or NULL

    Function: xmlParseNotationDecl

    void	xmlParseNotationDecl		(xmlParserCtxtPtr ctxt)
    +

    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().

    +
    ctxt:an XML parser context

    Function: xmlParseNotationType

    xmlEnumerationPtr	xmlParseNotationType	(xmlParserCtxtPtr ctxt)
    +

    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.

    +
    ctxt:an XML parser context
    Returns:the notation attribute tree built while parsing

    Function: xmlParsePEReference

    void	xmlParsePEReference		(xmlParserCtxtPtr ctxt)
    +

    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.

    +
    ctxt:an XML parser context

    Function: xmlParsePI

    void	xmlParsePI			(xmlParserCtxtPtr ctxt)
    +

    parse an XML Processing Instruction. [16] PI ::= '<?' PITarget (S (Char* - (Char* '?>' Char*)))? '?>' The processing is transfered to SAX once parsed.

    +
    ctxt:an XML parser context

    Function: xmlParsePITarget

    const xmlChar *	xmlParsePITarget	(xmlParserCtxtPtr ctxt)
    +

    parse the name of a PI [17] PITarget ::= Name - (('X' | 'x') ('M' | 'm') ('L' | 'l'))

    +
    ctxt:an XML parser context
    Returns:the PITarget name or NULL

    Function: xmlParsePubidLiteral

    xmlChar *	xmlParsePubidLiteral	(xmlParserCtxtPtr ctxt)
    +

    parse an XML public literal [12] PubidLiteral ::= '"' PubidChar* '"' | "'" (PubidChar - "'")* "'"

    +
    ctxt:an XML parser context
    Returns:the PubidLiteral parsed or NULL.

    Function: xmlParseQuotedString

    xmlChar *	xmlParseQuotedString	(xmlParserCtxtPtr ctxt)
    +

    Parse and return a string between quotes or doublequotes TODO: Deprecated, to be removed at next drop of binary compatibility

    +
    ctxt:an XML parser context
    Returns:the string parser or NULL.

    Function: xmlParseReference

    void	xmlParseReference		(xmlParserCtxtPtr ctxt)
    +

    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

    +
    ctxt:an XML parser context

    Function: xmlParseSDDecl

    int	xmlParseSDDecl			(xmlParserCtxtPtr ctxt)
    +

    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.

    +
    ctxt:an XML parser context
    Returns:1 if standalone="yes" 0 if standalone="no" -2 if standalone attribute is missing or invalid (A standalone value of -2 means that the XML declaration was found, but no value was specified for the standalone attribute).

    Function: xmlParseStartTag

    const xmlChar *	xmlParseStartTag	(xmlParserCtxtPtr ctxt)
    +

    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? '/>'

    +
    ctxt:an XML parser context
    Returns:the element name parsed

    Function: xmlParseSystemLiteral

    xmlChar *	xmlParseSystemLiteral	(xmlParserCtxtPtr ctxt)
    +

    parse an XML Literal [11] SystemLiteral ::= ('"' [^"]* '"') | ("'" [^']* "'")

    +
    ctxt:an XML parser context
    Returns:the SystemLiteral parsed or NULL

    Function: xmlParseTextDecl

    void	xmlParseTextDecl		(xmlParserCtxtPtr ctxt)
    +

    parse an XML declaration header for external entities [77] TextDecl ::= '<?xml' VersionInfo? EncodingDecl S? '?>'

    +
    ctxt:an XML parser context

    Function: xmlParseVersionInfo

    xmlChar *	xmlParseVersionInfo	(xmlParserCtxtPtr ctxt)
    +

    parse the XML version. [24] VersionInfo ::= S 'version' Eq (' VersionNum ' | " VersionNum ") [25] Eq ::= S? '=' S?

    +
    ctxt:an XML parser context
    Returns:the version string, e.g. "1.0"

    Function: xmlParseVersionNum

    xmlChar *	xmlParseVersionNum	(xmlParserCtxtPtr ctxt)
    +

    parse the XML version value. [26] VersionNum ::= '1.' [0-9]+ In practice allow [0-9].[0-9]+ at that level

    +
    ctxt:an XML parser context
    Returns:the string giving the XML version number, or NULL

    Function: xmlParseXMLDecl

    void	xmlParseXMLDecl			(xmlParserCtxtPtr ctxt)
    +

    parse an XML declaration header [23] XMLDecl ::= '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>'

    +
    ctxt:an XML parser context

    Function: xmlParserHandlePEReference

    void	xmlParserHandlePEReference	(xmlParserCtxtPtr ctxt)
    +

    [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

    +
    ctxt:the parser context

    Function: xmlParserHandleReference

    void	xmlParserHandleReference	(xmlParserCtxtPtr ctxt)
    +

    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

    +
    ctxt:the parser context

    Function: xmlParserInputShrink

    void	xmlParserInputShrink		(xmlParserInputPtr in)
    +

    This function removes used input for the parser.

    +
    in:an XML parser input

    Function: xmlPopInput

    xmlChar	xmlPopInput			(xmlParserCtxtPtr ctxt)
    +

    xmlPopInput: the current input pointed by ctxt->input came to an end pop it and return the next char.

    +
    ctxt:an XML parser context
    Returns:the current xmlChar in the parser context

    Function: xmlPushInput

    int	xmlPushInput			(xmlParserCtxtPtr ctxt, 
    xmlParserInputPtr input)
    +

    xmlPushInput: switch to a new input stream which is stacked on top of the previous one(s).

    +
    ctxt:an XML parser context
    input:an XML parser input fragment (entity, XML fragment ...).
    Returns:-1 in case of error or the index in the input stack

    Function: xmlScanName

    xmlChar *	xmlScanName		(xmlParserCtxtPtr ctxt)
    +

    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)*

    +
    ctxt:an XML parser context
    Returns:the Name parsed or NULL

    Function: xmlSetEntityReferenceFunc

    void	xmlSetEntityReferenceFunc	(xmlEntityReferenceFunc func)
    +

    Set the function to call call back when a xml reference has been made

    +
    func:A valid function

    Function: xmlSkipBlankChars

    int	xmlSkipBlankChars		(xmlParserCtxtPtr ctxt)
    +

    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.

    +
    ctxt:the XML parser context
    Returns:the number of space chars skipped

    Function: xmlSplitQName

    xmlChar *	xmlSplitQName		(xmlParserCtxtPtr ctxt, 
    const xmlChar * name,
    xmlChar ** prefix)
    +

    parse an UTF8 encoded XML qualified name string [NS 5] QName ::= (Prefix ':')? LocalPart [NS 6] Prefix ::= NCName [NS 7] LocalPart ::= NCName

    +
    ctxt:an XML parser context
    name:an XML parser context
    prefix:a xmlChar **
    Returns:the local part, and prefix is updated to get the Prefix if any.

    Function: xmlStringCurrentChar

    int	xmlStringCurrentChar		(xmlParserCtxtPtr ctxt, 
    const xmlChar * cur,
    int * len)
    +

    The current char value, if using UTF-8 this may actually span multiple bytes in the input buffer.

    +
    ctxt:the XML parser context
    cur:pointer to the beginning of the char
    len:pointer to the length of the char read
    Returns:the current char value and its length

    Function: xmlStringDecodeEntities

    xmlChar *	xmlStringDecodeEntities	(xmlParserCtxtPtr ctxt, 
    const xmlChar * str,
    int what,
    xmlChar end,
    xmlChar end2,
    xmlChar end3)
    +

    Takes a entity string content and process to do the adequate substitutions. [67] Reference ::= EntityRef | CharRef [69] PEReference ::= '%' Name ';'

    +
    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
    Returns:A newly allocated string with the substitution done. The caller must deallocate it !

    Function: xmlStringLenDecodeEntities

    xmlChar *	xmlStringLenDecodeEntities	(xmlParserCtxtPtr ctxt, 
    const xmlChar * str,
    int len,
    int what,
    xmlChar end,
    xmlChar end2,
    xmlChar end3)
    +

    Takes a entity string content and process to do the adequate substitutions. [67] Reference ::= EntityRef | CharRef [69] PEReference ::= '%' Name ';'

    +
    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
    Returns:A newly allocated string with the substitution done. The caller must deallocate it !

    Function: xmlSwitchEncoding

    int	xmlSwitchEncoding		(xmlParserCtxtPtr ctxt, 
    xmlCharEncoding enc)
    +

    change the input functions when discovering the character encoding of a given entity.

    +
    ctxt:the parser context
    enc:the encoding value (number)
    Returns:0 in case of success, -1 otherwise

    Function: xmlSwitchInputEncoding

    int	xmlSwitchInputEncoding		(xmlParserCtxtPtr ctxt, 
    xmlParserInputPtr input,
    xmlCharEncodingHandlerPtr handler)
    +

    change the input functions when discovering the character encoding of a given entity.

    +
    ctxt:the parser context
    input:the input stream
    handler:the encoding handler
    Returns:0 in case of success, -1 otherwise

    Function: xmlSwitchToEncoding

    int	xmlSwitchToEncoding		(xmlParserCtxtPtr ctxt, 
    xmlCharEncodingHandlerPtr handler)
    +

    change the input functions when discovering the character encoding of a given entity.

    +
    ctxt:the parser context
    handler:the encoding handler
    Returns:0 in case of success, -1 otherwise

    Daniel Veillard

    diff --git a/doc/html/libxml-pattern.html b/doc/html/libxml-pattern.html new file mode 100644 index 0000000..cd2789b --- /dev/null +++ b/doc/html/libxml-pattern.html @@ -0,0 +1,76 @@ + + +Module pattern from libxml2
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    Module pattern from libxml2

    API Menu
    API Indexes
    Related links

    allows to compile and test pattern expressions for nodes either in a tree or based on a parser state.

    Table of Contents

    Structure xmlPattern
    struct _xmlPattern +The content of this structure is not made public by the API. +
    Enum xmlPatternFlags
    +
    Typedef xmlPattern * xmlPatternPtr
    +
    Structure xmlStreamCtxt
    struct _xmlStreamCtxt +The content of this structure is not made public by the API. +
    Typedef xmlStreamCtxt * xmlStreamCtxtPtr
    +
    void	xmlFreePattern			(xmlPatternPtr comp)
    +
    void	xmlFreePatternList		(xmlPatternPtr comp)
    +
    void	xmlFreeStreamCtxt		(xmlStreamCtxtPtr stream)
    +
    int	xmlPatternFromRoot		(xmlPatternPtr comp)
    +
    xmlStreamCtxtPtr	xmlPatternGetStreamCtxt	(xmlPatternPtr comp)
    +
    int	xmlPatternMatch			(xmlPatternPtr comp, 
    xmlNodePtr node)
    +
    int	xmlPatternMaxDepth		(xmlPatternPtr comp)
    +
    int	xmlPatternMinDepth		(xmlPatternPtr comp)
    +
    int	xmlPatternStreamable		(xmlPatternPtr comp)
    +
    xmlPatternPtr	xmlPatterncompile	(const xmlChar * pattern, 
    xmlDict * dict,
    int flags,
    const xmlChar ** namespaces)
    +
    int	xmlStreamPop			(xmlStreamCtxtPtr stream)
    +
    int	xmlStreamPush			(xmlStreamCtxtPtr stream, 
    const xmlChar * name,
    const xmlChar * ns)
    +
    int	xmlStreamPushAttr		(xmlStreamCtxtPtr stream, 
    const xmlChar * name,
    const xmlChar * ns)
    +
    int	xmlStreamPushNode		(xmlStreamCtxtPtr stream, 
    const xmlChar * name,
    const xmlChar * ns,
    int nodeType)
    +
    int	xmlStreamWantsAnyNode		(xmlStreamCtxtPtr streamCtxt)
    +

    Description

    +

    Structure xmlPattern

    Structure xmlPattern
    struct _xmlPattern { +The content of this structure is not made public by the API. +}

    Enum xmlPatternFlags

    Enum xmlPatternFlags {
    +    XML_PATTERN_DEFAULT = 0 : simple pattern match
    +    XML_PATTERN_XPATH = 1 : standard XPath pattern
    +    XML_PATTERN_XSSEL = 2 : XPath subset for schema selector
    +    XML_PATTERN_XSFIELD = 4 : XPath subset for schema field
    +}
    +

    Structure xmlStreamCtxt

    Structure xmlStreamCtxt
    struct _xmlStreamCtxt { +The content of this structure is not made public by the API. +}

    Function: xmlFreePattern

    void	xmlFreePattern			(xmlPatternPtr comp)
    +

    Free up the memory allocated by @comp

    +
    comp:an XSLT comp

    Function: xmlFreePatternList

    void	xmlFreePatternList		(xmlPatternPtr comp)
    +

    Free up the memory allocated by all the elements of @comp

    +
    comp:an XSLT comp list

    Function: xmlFreeStreamCtxt

    void	xmlFreeStreamCtxt		(xmlStreamCtxtPtr stream)
    +

    Free the stream context

    +
    stream:the stream context

    Function: xmlPatternFromRoot

    int	xmlPatternFromRoot		(xmlPatternPtr comp)
    +

    Check if the pattern must be looked at from the root.

    +
    comp:the precompiled pattern
    Returns:1 if true, 0 if false and -1 in case of error

    Function: xmlPatternGetStreamCtxt

    xmlStreamCtxtPtr	xmlPatternGetStreamCtxt	(xmlPatternPtr comp)
    +

    Get a streaming context for that pattern Use xmlFreeStreamCtxt to free the context.

    +
    comp:the precompiled pattern
    Returns:a pointer to the context or NULL in case of failure

    Function: xmlPatternMatch

    int	xmlPatternMatch			(xmlPatternPtr comp, 
    xmlNodePtr node)
    +

    Test whether the node matches the pattern

    +
    comp:the precompiled pattern
    node:a node
    Returns:1 if it matches, 0 if it doesn't and -1 in case of failure

    Function: xmlPatternMaxDepth

    int	xmlPatternMaxDepth		(xmlPatternPtr comp)
    +

    Check the maximum depth reachable by a pattern

    +
    comp:the precompiled pattern
    Returns:-2 if no limit (using //), otherwise the depth, and -1 in case of error

    Function: xmlPatternMinDepth

    int	xmlPatternMinDepth		(xmlPatternPtr comp)
    +

    Check the minimum depth reachable by a pattern, 0 mean the / or . are part of the set.

    +
    comp:the precompiled pattern
    Returns:-1 in case of error otherwise the depth,

    Function: xmlPatternStreamable

    int	xmlPatternStreamable		(xmlPatternPtr comp)
    +

    Check if the pattern is streamable i.e. xmlPatternGetStreamCtxt() should work.

    +
    comp:the precompiled pattern
    Returns:1 if streamable, 0 if not and -1 in case of error.

    Function: xmlPatterncompile

    xmlPatternPtr	xmlPatterncompile	(const xmlChar * pattern, 
    xmlDict * dict,
    int flags,
    const xmlChar ** namespaces)
    +

    Compile a pattern.

    +
    pattern:the pattern to compile
    dict:an optional dictionary for interned strings
    flags:compilation flags, see xmlPatternFlags
    namespaces:the prefix definitions, array of [URI, prefix] or NULL
    Returns:the compiled form of the pattern or NULL in case of error

    Function: xmlStreamPop

    int	xmlStreamPop			(xmlStreamCtxtPtr stream)
    +

    push one level from the stream.

    +
    stream:the stream context
    Returns:-1 in case of error, 0 otherwise.

    Function: xmlStreamPush

    int	xmlStreamPush			(xmlStreamCtxtPtr stream, 
    const xmlChar * name,
    const xmlChar * ns)
    +

    Push new data onto the stream. NOTE: if the call xmlPatterncompile() indicated a dictionary, then strings for name and ns will be expected to come from the dictionary. Both @name and @ns being NULL means the / i.e. the root of the document. This can also act as a reset. Otherwise the function will act as if it has been given an element-node.

    +
    stream:the stream context
    name:the current name
    ns:the namespace name
    Returns:-1 in case of error, 1 if the current state in the stream is a match and 0 otherwise.

    Function: xmlStreamPushAttr

    int	xmlStreamPushAttr		(xmlStreamCtxtPtr stream, 
    const xmlChar * name,
    const xmlChar * ns)
    +

    Push new attribute data onto the stream. NOTE: if the call xmlPatterncompile() indicated a dictionary, then strings for name and ns will be expected to come from the dictionary. Both @name and @ns being NULL means the / i.e. the root of the document. This can also act as a reset. Otherwise the function will act as if it has been given an attribute-node.

    +
    stream:the stream context
    name:the current name
    ns:the namespace name
    Returns:-1 in case of error, 1 if the current state in the stream is a match and 0 otherwise.

    Function: xmlStreamPushNode

    int	xmlStreamPushNode		(xmlStreamCtxtPtr stream, 
    const xmlChar * name,
    const xmlChar * ns,
    int nodeType)
    +

    Push new data onto the stream. NOTE: if the call xmlPatterncompile() indicated a dictionary, then strings for name and ns will be expected to come from the dictionary. Both @name and @ns being NULL means the / i.e. the root of the document. This can also act as a reset. Different from xmlStreamPush() this function can be fed with nodes of type: element-, attribute-, text-, cdata-section-, comment- and processing-instruction-node.

    +
    stream:the stream context
    name:the current name
    ns:the namespace name
    nodeType:the type of the node being pushed
    Returns:-1 in case of error, 1 if the current state in the stream is a match and 0 otherwise.

    Function: xmlStreamWantsAnyNode

    int	xmlStreamWantsAnyNode		(xmlStreamCtxtPtr streamCtxt)
    +

    Query if the streaming pattern additionally needs to be fed with text-, cdata-section-, comment- and processing-instruction-nodes. If the result is 0 then only element-nodes and attribute-nodes need to be pushed.

    +
    streamCtxt:the stream context
    Returns:1 in case of need of nodes of the above described types, 0 otherwise. -1 on API errors.

    Daniel Veillard

    diff --git a/doc/html/libxml-relaxng.html b/doc/html/libxml-relaxng.html new file mode 100644 index 0000000..1ec3192 --- /dev/null +++ b/doc/html/libxml-relaxng.html @@ -0,0 +1,162 @@ + + +Module relaxng from libxml2
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    Module relaxng from libxml2

    API Menu
    API Indexes
    Related links

    implementation of the Relax-NG validation

    Table of Contents

    Structure xmlRelaxNG
    struct _xmlRelaxNG +The content of this structure is not made public by the API. +
    Structure xmlRelaxNGParserCtxt
    struct _xmlRelaxNGParserCtxt +The content of this structure is not made public by the API. +
    Typedef xmlRelaxNGParserCtxt * xmlRelaxNGParserCtxtPtr
    +
    Enum xmlRelaxNGParserFlag
    +
    Typedef xmlRelaxNG * xmlRelaxNGPtr
    +
    Structure xmlRelaxNGValidCtxt
    struct _xmlRelaxNGValidCtxt +The content of this structure is not made public by the API. +
    Typedef xmlRelaxNGValidCtxt * xmlRelaxNGValidCtxtPtr
    +
    Enum xmlRelaxNGValidErr
    +
    void	xmlRelaxNGCleanupTypes		(void)
    +
    void	xmlRelaxNGDump			(FILE * output, 
    xmlRelaxNGPtr schema)
    +
    void	xmlRelaxNGDumpTree		(FILE * output, 
    xmlRelaxNGPtr schema)
    +
    void	xmlRelaxNGFree			(xmlRelaxNGPtr schema)
    +
    void	xmlRelaxNGFreeParserCtxt	(xmlRelaxNGParserCtxtPtr ctxt)
    +
    void	xmlRelaxNGFreeValidCtxt		(xmlRelaxNGValidCtxtPtr ctxt)
    +
    int	xmlRelaxNGGetParserErrors	(xmlRelaxNGParserCtxtPtr ctxt, 
    xmlRelaxNGValidityErrorFunc * err,
    xmlRelaxNGValidityWarningFunc * warn,
    void ** ctx)
    +
    int	xmlRelaxNGGetValidErrors	(xmlRelaxNGValidCtxtPtr ctxt, 
    xmlRelaxNGValidityErrorFunc * err,
    xmlRelaxNGValidityWarningFunc * warn,
    void ** ctx)
    +
    int	xmlRelaxNGInitTypes		(void)
    +
    xmlRelaxNGParserCtxtPtr	xmlRelaxNGNewDocParserCtxt	(xmlDocPtr doc)
    +
    xmlRelaxNGParserCtxtPtr	xmlRelaxNGNewMemParserCtxt	(const char * buffer, 
    int size)
    +
    xmlRelaxNGParserCtxtPtr	xmlRelaxNGNewParserCtxt	(const char * URL)
    +
    xmlRelaxNGValidCtxtPtr	xmlRelaxNGNewValidCtxt	(xmlRelaxNGPtr schema)
    +
    xmlRelaxNGPtr	xmlRelaxNGParse		(xmlRelaxNGParserCtxtPtr ctxt)
    +
    void	xmlRelaxNGSetParserErrors	(xmlRelaxNGParserCtxtPtr ctxt, 
    xmlRelaxNGValidityErrorFunc err,
    xmlRelaxNGValidityWarningFunc warn,
    void * ctx)
    +
    void	xmlRelaxNGSetParserStructuredErrors	(xmlRelaxNGParserCtxtPtr ctxt, 
    xmlStructuredErrorFunc serror,
    void * ctx)
    +
    void	xmlRelaxNGSetValidErrors	(xmlRelaxNGValidCtxtPtr ctxt, 
    xmlRelaxNGValidityErrorFunc err,
    xmlRelaxNGValidityWarningFunc warn,
    void * ctx)
    +
    void	xmlRelaxNGSetValidStructuredErrors	(xmlRelaxNGValidCtxtPtr ctxt, 
    xmlStructuredErrorFunc serror,
    void * ctx)
    +
    int	xmlRelaxNGValidateDoc		(xmlRelaxNGValidCtxtPtr ctxt, 
    xmlDocPtr doc)
    +
    int	xmlRelaxNGValidateFullElement	(xmlRelaxNGValidCtxtPtr ctxt, 
    xmlDocPtr doc,
    xmlNodePtr elem)
    +
    int	xmlRelaxNGValidatePopElement	(xmlRelaxNGValidCtxtPtr ctxt, 
    xmlDocPtr doc,
    xmlNodePtr elem)
    +
    int	xmlRelaxNGValidatePushCData	(xmlRelaxNGValidCtxtPtr ctxt, 
    const xmlChar * data,
    int len)
    +
    int	xmlRelaxNGValidatePushElement	(xmlRelaxNGValidCtxtPtr ctxt, 
    xmlDocPtr doc,
    xmlNodePtr elem)
    +
    Function type: xmlRelaxNGValidityErrorFunc
    +void	xmlRelaxNGValidityErrorFunc	(void * ctx, 
    const char * msg,
    ... ...) +
    +
    Function type: xmlRelaxNGValidityWarningFunc
    +void	xmlRelaxNGValidityWarningFunc	(void * ctx, 
    const char * msg,
    ... ...) +
    +
    int	xmlRelaxParserSetFlag		(xmlRelaxNGParserCtxtPtr ctxt, 
    int flags)
    +

    Description

    +

    Structure xmlRelaxNG

    Structure xmlRelaxNG
    struct _xmlRelaxNG { +The content of this structure is not made public by the API. +}

    Structure xmlRelaxNGParserCtxt

    Structure xmlRelaxNGParserCtxt
    struct _xmlRelaxNGParserCtxt { +The content of this structure is not made public by the API. +}

    Enum xmlRelaxNGParserFlag

    Enum xmlRelaxNGParserFlag {
    +    XML_RELAXNGP_NONE = 0
    +    XML_RELAXNGP_FREE_DOC = 1
    +    XML_RELAXNGP_CRNG = 2
    +}
    +

    Structure xmlRelaxNGValidCtxt

    Structure xmlRelaxNGValidCtxt
    struct _xmlRelaxNGValidCtxt { +The content of this structure is not made public by the API. +}

    Enum xmlRelaxNGValidErr

    Enum xmlRelaxNGValidErr {
    +    XML_RELAXNG_OK = 0
    +    XML_RELAXNG_ERR_MEMORY = 1
    +    XML_RELAXNG_ERR_TYPE = 2
    +    XML_RELAXNG_ERR_TYPEVAL = 3
    +    XML_RELAXNG_ERR_DUPID = 4
    +    XML_RELAXNG_ERR_TYPECMP = 5
    +    XML_RELAXNG_ERR_NOSTATE = 6
    +    XML_RELAXNG_ERR_NODEFINE = 7
    +    XML_RELAXNG_ERR_LISTEXTRA = 8
    +    XML_RELAXNG_ERR_LISTEMPTY = 9
    +    XML_RELAXNG_ERR_INTERNODATA = 10
    +    XML_RELAXNG_ERR_INTERSEQ = 11
    +    XML_RELAXNG_ERR_INTEREXTRA = 12
    +    XML_RELAXNG_ERR_ELEMNAME = 13
    +    XML_RELAXNG_ERR_ATTRNAME = 14
    +    XML_RELAXNG_ERR_ELEMNONS = 15
    +    XML_RELAXNG_ERR_ATTRNONS = 16
    +    XML_RELAXNG_ERR_ELEMWRONGNS = 17
    +    XML_RELAXNG_ERR_ATTRWRONGNS = 18
    +    XML_RELAXNG_ERR_ELEMEXTRANS = 19
    +    XML_RELAXNG_ERR_ATTREXTRANS = 20
    +    XML_RELAXNG_ERR_ELEMNOTEMPTY = 21
    +    XML_RELAXNG_ERR_NOELEM = 22
    +    XML_RELAXNG_ERR_NOTELEM = 23
    +    XML_RELAXNG_ERR_ATTRVALID = 24
    +    XML_RELAXNG_ERR_CONTENTVALID = 25
    +    XML_RELAXNG_ERR_EXTRACONTENT = 26
    +    XML_RELAXNG_ERR_INVALIDATTR = 27
    +    XML_RELAXNG_ERR_DATAELEM = 28
    +    XML_RELAXNG_ERR_VALELEM = 29
    +    XML_RELAXNG_ERR_LISTELEM = 30
    +    XML_RELAXNG_ERR_DATATYPE = 31
    +    XML_RELAXNG_ERR_VALUE = 32
    +    XML_RELAXNG_ERR_LIST = 33
    +    XML_RELAXNG_ERR_NOGRAMMAR = 34
    +    XML_RELAXNG_ERR_EXTRADATA = 35
    +    XML_RELAXNG_ERR_LACKDATA = 36
    +    XML_RELAXNG_ERR_INTERNAL = 37
    +    XML_RELAXNG_ERR_ELEMWRONG = 38
    +    XML_RELAXNG_ERR_TEXTWRONG = 39
    +}
    +

    Function: xmlRelaxNGCleanupTypes

    void	xmlRelaxNGCleanupTypes		(void)
    +

    Cleanup the default Schemas type library associated to RelaxNG

    +

    Function: xmlRelaxNGDump

    void	xmlRelaxNGDump			(FILE * output, 
    xmlRelaxNGPtr schema)
    +

    Dump a RelaxNG structure back

    +
    output:the file output
    schema:a schema structure

    Function: xmlRelaxNGDumpTree

    void	xmlRelaxNGDumpTree		(FILE * output, 
    xmlRelaxNGPtr schema)
    +

    Dump the transformed RelaxNG tree.

    +
    output:the file output
    schema:a schema structure

    Function: xmlRelaxNGFree

    void	xmlRelaxNGFree			(xmlRelaxNGPtr schema)
    +

    Deallocate a RelaxNG structure.

    +
    schema:a schema structure

    Function: xmlRelaxNGFreeParserCtxt

    void	xmlRelaxNGFreeParserCtxt	(xmlRelaxNGParserCtxtPtr ctxt)
    +

    Free the resources associated to the schema parser context

    +
    ctxt:the schema parser context

    Function: xmlRelaxNGFreeValidCtxt

    void	xmlRelaxNGFreeValidCtxt		(xmlRelaxNGValidCtxtPtr ctxt)
    +

    Free the resources associated to the schema validation context

    +
    ctxt:the schema validation context

    Function: xmlRelaxNGGetParserErrors

    int	xmlRelaxNGGetParserErrors	(xmlRelaxNGParserCtxtPtr ctxt, 
    xmlRelaxNGValidityErrorFunc * err,
    xmlRelaxNGValidityWarningFunc * warn,
    void ** ctx)
    +

    Get the callback information used to handle errors for a validation context

    +
    ctxt:a Relax-NG validation context
    err:the error callback result
    warn:the warning callback result
    ctx:contextual data for the callbacks result
    Returns:-1 in case of failure, 0 otherwise.

    Function: xmlRelaxNGGetValidErrors

    int	xmlRelaxNGGetValidErrors	(xmlRelaxNGValidCtxtPtr ctxt, 
    xmlRelaxNGValidityErrorFunc * err,
    xmlRelaxNGValidityWarningFunc * warn,
    void ** ctx)
    +

    Get the error and warning callback informations

    +
    ctxt:a Relax-NG validation context
    err:the error function result
    warn:the warning function result
    ctx:the functions context result
    Returns:-1 in case of error and 0 otherwise

    Function: xmlRelaxNGInitTypes

    int	xmlRelaxNGInitTypes		(void)
    +

    Initilize the default type libraries.

    +
    Returns:0 in case of success and -1 in case of error.

    Function: xmlRelaxNGNewDocParserCtxt

    xmlRelaxNGParserCtxtPtr	xmlRelaxNGNewDocParserCtxt	(xmlDocPtr doc)
    +

    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.

    +
    doc:a preparsed document tree
    Returns:the parser context or NULL in case of error

    Function: xmlRelaxNGNewMemParserCtxt

    xmlRelaxNGParserCtxtPtr	xmlRelaxNGNewMemParserCtxt	(const char * buffer, 
    int size)
    +

    Create an XML RelaxNGs parse context for that memory buffer expected to contain an XML RelaxNGs file.

    +
    buffer:a pointer to a char array containing the schemas
    size:the size of the array
    Returns:the parser context or NULL in case of error

    Function: xmlRelaxNGNewParserCtxt

    xmlRelaxNGParserCtxtPtr	xmlRelaxNGNewParserCtxt	(const char * URL)
    +

    Create an XML RelaxNGs parse context for that file/resource expected to contain an XML RelaxNGs file.

    +
    URL:the location of the schema
    Returns:the parser context or NULL in case of error

    Function: xmlRelaxNGNewValidCtxt

    xmlRelaxNGValidCtxtPtr	xmlRelaxNGNewValidCtxt	(xmlRelaxNGPtr schema)
    +

    Create an XML RelaxNGs validation context based on the given schema

    +
    schema:a precompiled XML RelaxNGs
    Returns:the validation context or NULL in case of error

    Function: xmlRelaxNGParse

    xmlRelaxNGPtr	xmlRelaxNGParse		(xmlRelaxNGParserCtxtPtr ctxt)
    +

    parse a schema definition resource and build an internal XML Shema struture which can be used to validate instances.

    +
    ctxt:a Relax-NG parser context
    Returns:the internal XML RelaxNG structure built from the resource or NULL in case of error

    Function: xmlRelaxNGSetParserErrors

    void	xmlRelaxNGSetParserErrors	(xmlRelaxNGParserCtxtPtr ctxt, 
    xmlRelaxNGValidityErrorFunc err,
    xmlRelaxNGValidityWarningFunc warn,
    void * ctx)
    +

    Set the callback functions used to handle errors for a validation context

    +
    ctxt:a Relax-NG validation context
    err:the error callback
    warn:the warning callback
    ctx:contextual data for the callbacks

    Function: xmlRelaxNGSetParserStructuredErrors

    void	xmlRelaxNGSetParserStructuredErrors	(xmlRelaxNGParserCtxtPtr ctxt, 
    xmlStructuredErrorFunc serror,
    void * ctx)
    +

    Set the callback functions used to handle errors for a parsing context

    +
    ctxt:a Relax-NG parser context
    serror:the error callback
    ctx:contextual data for the callbacks

    Function: xmlRelaxNGSetValidErrors

    void	xmlRelaxNGSetValidErrors	(xmlRelaxNGValidCtxtPtr ctxt, 
    xmlRelaxNGValidityErrorFunc err,
    xmlRelaxNGValidityWarningFunc warn,
    void * ctx)
    +

    Set the error and warning callback informations

    +
    ctxt:a Relax-NG validation context
    err:the error function
    warn:the warning function
    ctx:the functions context

    Function: xmlRelaxNGSetValidStructuredErrors

    void	xmlRelaxNGSetValidStructuredErrors	(xmlRelaxNGValidCtxtPtr ctxt, 
    xmlStructuredErrorFunc serror,
    void * ctx)
    +

    Set the structured error callback

    +
    ctxt:a Relax-NG validation context
    serror:the structured error function
    ctx:the functions context

    Function: xmlRelaxNGValidateDoc

    int	xmlRelaxNGValidateDoc		(xmlRelaxNGValidCtxtPtr ctxt, 
    xmlDocPtr doc)
    +

    Validate a document tree in memory.

    +
    ctxt:a Relax-NG validation context
    doc:a parsed document tree
    Returns:0 if the document is valid, a positive error code number otherwise and -1 in case of internal or API error.

    Function: xmlRelaxNGValidateFullElement

    int	xmlRelaxNGValidateFullElement	(xmlRelaxNGValidCtxtPtr ctxt, 
    xmlDocPtr doc,
    xmlNodePtr elem)
    +

    Validate a full subtree when xmlRelaxNGValidatePushElement() returned 0 and the content of the node has been expanded.

    +
    ctxt:the validation context
    doc:a document instance
    elem:an element instance
    Returns:1 if no validation problem was found or -1 in case of error.

    Function: xmlRelaxNGValidatePopElement

    int	xmlRelaxNGValidatePopElement	(xmlRelaxNGValidCtxtPtr ctxt, 
    xmlDocPtr doc,
    xmlNodePtr elem)
    +

    Pop the element end from the RelaxNG validation stack.

    +
    ctxt:the RelaxNG validation context
    doc:a document instance
    elem:an element instance
    Returns:1 if no validation problem was found or 0 otherwise

    Function: xmlRelaxNGValidatePushCData

    int	xmlRelaxNGValidatePushCData	(xmlRelaxNGValidCtxtPtr ctxt, 
    const xmlChar * data,
    int len)
    +

    check the CData parsed for validation in the current stack

    +
    ctxt:the RelaxNG validation context
    data:some character data read
    len:the length of the data
    Returns:1 if no validation problem was found or -1 otherwise

    Function: xmlRelaxNGValidatePushElement

    int	xmlRelaxNGValidatePushElement	(xmlRelaxNGValidCtxtPtr ctxt, 
    xmlDocPtr doc,
    xmlNodePtr elem)
    +

    Push a new element start on the RelaxNG validation stack.

    +
    ctxt:the validation context
    doc:a document instance
    elem:an element instance
    Returns:1 if no validation problem was found or 0 if validating the element requires a full node, and -1 in case of error.

    Function type: xmlRelaxNGValidityErrorFunc

    Function type: xmlRelaxNGValidityErrorFunc
    +void	xmlRelaxNGValidityErrorFunc	(void * ctx, 
    const char * msg,
    ... ...) +

    Signature of an error callback from a Relax-NG validation

    ctx:the validation context
    msg:the message
    ...:extra arguments

    +

    Function type: xmlRelaxNGValidityWarningFunc

    Function type: xmlRelaxNGValidityWarningFunc
    +void	xmlRelaxNGValidityWarningFunc	(void * ctx, 
    const char * msg,
    ... ...) +

    Signature of a warning callback from a Relax-NG validation

    ctx:the validation context
    msg:the message
    ...:extra arguments

    +

    Function: xmlRelaxParserSetFlag

    int	xmlRelaxParserSetFlag		(xmlRelaxNGParserCtxtPtr ctxt, 
    int flags)
    +

    Semi private function used to pass informations to a parser context which are a combination of xmlRelaxNGParserFlag .

    +
    ctxt:a RelaxNG parser context
    flags:a set of flags values
    Returns:0 if success and -1 in case of error

    Daniel Veillard

    diff --git a/doc/html/libxml-schemasInternals.html b/doc/html/libxml-schemasInternals.html new file mode 100644 index 0000000..db4a5a1 --- /dev/null +++ b/doc/html/libxml-schemasInternals.html @@ -0,0 +1,373 @@ + + +Module schemasInternals from libxml2
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    Module schemasInternals from libxml2

    API Menu
    API Indexes
    Related links

    internal interfaces for the XML Schemas handling and schema validity checking The Schemas development is a Work In Progress. Some of those interfaces are not garanteed to be API or ABI stable !

    Table of Contents

    #define XML_SCHEMAS_ANYATTR_LAX
    #define XML_SCHEMAS_ANYATTR_SKIP
    #define XML_SCHEMAS_ANYATTR_STRICT
    #define XML_SCHEMAS_ANY_LAX
    #define XML_SCHEMAS_ANY_SKIP
    #define XML_SCHEMAS_ANY_STRICT
    #define XML_SCHEMAS_ATTRGROUP_GLOBAL
    #define XML_SCHEMAS_ATTRGROUP_HAS_REFS
    #define XML_SCHEMAS_ATTRGROUP_MARKED
    #define XML_SCHEMAS_ATTRGROUP_REDEFINED
    #define XML_SCHEMAS_ATTRGROUP_WILDCARD_BUILDED
    #define XML_SCHEMAS_ATTR_FIXED
    #define XML_SCHEMAS_ATTR_GLOBAL
    #define XML_SCHEMAS_ATTR_INTERNAL_RESOLVED
    #define XML_SCHEMAS_ATTR_NSDEFAULT
    #define XML_SCHEMAS_ATTR_USE_OPTIONAL
    #define XML_SCHEMAS_ATTR_USE_PROHIBITED
    #define XML_SCHEMAS_ATTR_USE_REQUIRED
    #define XML_SCHEMAS_BLOCK_DEFAULT_EXTENSION
    #define XML_SCHEMAS_BLOCK_DEFAULT_RESTRICTION
    #define XML_SCHEMAS_BLOCK_DEFAULT_SUBSTITUTION
    #define XML_SCHEMAS_ELEM_ABSTRACT
    #define XML_SCHEMAS_ELEM_BLOCK_ABSENT
    #define XML_SCHEMAS_ELEM_BLOCK_EXTENSION
    #define XML_SCHEMAS_ELEM_BLOCK_RESTRICTION
    #define XML_SCHEMAS_ELEM_BLOCK_SUBSTITUTION
    #define XML_SCHEMAS_ELEM_CIRCULAR
    #define XML_SCHEMAS_ELEM_DEFAULT
    #define XML_SCHEMAS_ELEM_FINAL_ABSENT
    #define XML_SCHEMAS_ELEM_FINAL_EXTENSION
    #define XML_SCHEMAS_ELEM_FINAL_RESTRICTION
    #define XML_SCHEMAS_ELEM_FIXED
    #define XML_SCHEMAS_ELEM_GLOBAL
    #define XML_SCHEMAS_ELEM_INTERNAL_CHECKED
    #define XML_SCHEMAS_ELEM_INTERNAL_RESOLVED
    #define XML_SCHEMAS_ELEM_NILLABLE
    #define XML_SCHEMAS_ELEM_NSDEFAULT
    #define XML_SCHEMAS_ELEM_REF
    #define XML_SCHEMAS_ELEM_SUBST_GROUP_HEAD
    #define XML_SCHEMAS_ELEM_TOPLEVEL
    #define XML_SCHEMAS_FACET_COLLAPSE
    #define XML_SCHEMAS_FACET_PRESERVE
    #define XML_SCHEMAS_FACET_REPLACE
    #define XML_SCHEMAS_FACET_UNKNOWN
    #define XML_SCHEMAS_FINAL_DEFAULT_EXTENSION
    #define XML_SCHEMAS_FINAL_DEFAULT_LIST
    #define XML_SCHEMAS_FINAL_DEFAULT_RESTRICTION
    #define XML_SCHEMAS_FINAL_DEFAULT_UNION
    #define XML_SCHEMAS_INCLUDING_CONVERT_NS
    #define XML_SCHEMAS_QUALIF_ATTR
    #define XML_SCHEMAS_QUALIF_ELEM
    #define XML_SCHEMAS_TYPE_ABSTRACT
    #define XML_SCHEMAS_TYPE_BLOCK_DEFAULT
    #define XML_SCHEMAS_TYPE_BLOCK_EXTENSION
    #define XML_SCHEMAS_TYPE_BLOCK_RESTRICTION
    #define XML_SCHEMAS_TYPE_BUILTIN_PRIMITIVE
    #define XML_SCHEMAS_TYPE_DERIVATION_METHOD_EXTENSION
    #define XML_SCHEMAS_TYPE_DERIVATION_METHOD_RESTRICTION
    #define XML_SCHEMAS_TYPE_FACETSNEEDVALUE
    #define XML_SCHEMAS_TYPE_FINAL_DEFAULT
    #define XML_SCHEMAS_TYPE_FINAL_EXTENSION
    #define XML_SCHEMAS_TYPE_FINAL_LIST
    #define XML_SCHEMAS_TYPE_FINAL_RESTRICTION
    #define XML_SCHEMAS_TYPE_FINAL_UNION
    #define XML_SCHEMAS_TYPE_FIXUP_1
    #define XML_SCHEMAS_TYPE_GLOBAL
    #define XML_SCHEMAS_TYPE_HAS_FACETS
    #define XML_SCHEMAS_TYPE_INTERNAL_INVALID
    #define XML_SCHEMAS_TYPE_INTERNAL_RESOLVED
    #define XML_SCHEMAS_TYPE_MARKED
    #define XML_SCHEMAS_TYPE_MIXED
    #define XML_SCHEMAS_TYPE_NORMVALUENEEDED
    #define XML_SCHEMAS_TYPE_OWNED_ATTR_WILDCARD
    #define XML_SCHEMAS_TYPE_REDEFINED
    #define XML_SCHEMAS_TYPE_VARIETY_ABSENT
    #define XML_SCHEMAS_TYPE_VARIETY_ATOMIC
    #define XML_SCHEMAS_TYPE_VARIETY_LIST
    #define XML_SCHEMAS_TYPE_VARIETY_UNION
    #define XML_SCHEMAS_TYPE_WHITESPACE_COLLAPSE
    #define XML_SCHEMAS_TYPE_WHITESPACE_PRESERVE
    #define XML_SCHEMAS_TYPE_WHITESPACE_REPLACE
    #define XML_SCHEMAS_WILDCARD_COMPLETE
    Structure xmlSchemaAnnot
    struct _xmlSchemaAnnot +
    Typedef xmlSchemaAnnot * xmlSchemaAnnotPtr
    +
    Structure xmlSchemaAttribute
    struct _xmlSchemaAttribute +
    Structure xmlSchemaAttributeGroup
    struct _xmlSchemaAttributeGroup +
    Typedef xmlSchemaAttributeGroup * xmlSchemaAttributeGroupPtr
    +
    Structure xmlSchemaAttributeLink
    struct _xmlSchemaAttributeLink +
    Typedef xmlSchemaAttributeLink * xmlSchemaAttributeLinkPtr
    +
    Typedef xmlSchemaAttribute * xmlSchemaAttributePtr
    +
    Enum xmlSchemaContentType
    +
    Structure xmlSchemaElement
    struct _xmlSchemaElement +
    Typedef xmlSchemaElement * xmlSchemaElementPtr
    +
    Structure xmlSchemaFacet
    struct _xmlSchemaFacet +
    Structure xmlSchemaFacetLink
    struct _xmlSchemaFacetLink +
    Typedef xmlSchemaFacetLink * xmlSchemaFacetLinkPtr
    +
    Typedef xmlSchemaFacet * xmlSchemaFacetPtr
    +
    Structure xmlSchemaNotation
    struct _xmlSchemaNotation +
    Typedef xmlSchemaNotation * xmlSchemaNotationPtr
    +
    Structure xmlSchemaType
    struct _xmlSchemaType +
    Structure xmlSchemaTypeLink
    struct _xmlSchemaTypeLink +
    Typedef xmlSchemaTypeLink * xmlSchemaTypeLinkPtr
    +
    Typedef xmlSchemaType * xmlSchemaTypePtr
    +
    Enum xmlSchemaTypeType
    +
    Structure xmlSchemaVal
    struct _xmlSchemaVal +The content of this structure is not made public by the API. +
    Typedef xmlSchemaVal * xmlSchemaValPtr
    +
    Enum xmlSchemaValType
    +
    Structure xmlSchemaWildcard
    struct _xmlSchemaWildcard +
    Structure xmlSchemaWildcardNs
    struct _xmlSchemaWildcardNs +
    Typedef xmlSchemaWildcardNs * xmlSchemaWildcardNsPtr
    +
    Typedef xmlSchemaWildcard * xmlSchemaWildcardPtr
    +
    void	xmlSchemaFreeType		(xmlSchemaTypePtr type)
    +
    void	xmlSchemaFreeWildcard		(xmlSchemaWildcardPtr wildcard)
    +

    Description

    +

    Macro: XML_SCHEMAS_ANYATTR_LAX

    #define XML_SCHEMAS_ANYATTR_LAX

    Ignore validation non definition on attributes Obsolete, not used anymore.

    +

    Macro: XML_SCHEMAS_ANYATTR_SKIP

    #define XML_SCHEMAS_ANYATTR_SKIP

    Skip unknown attribute from validation Obsolete, not used anymore.

    +

    Macro: XML_SCHEMAS_ANYATTR_STRICT

    #define XML_SCHEMAS_ANYATTR_STRICT

    Apply strict validation rules on attributes Obsolete, not used anymore.

    +

    Macro: XML_SCHEMAS_ANY_LAX

    #define XML_SCHEMAS_ANY_LAX

    Used by wildcards. Validate if type found, don't worry if not found

    +

    Macro: XML_SCHEMAS_ANY_SKIP

    #define XML_SCHEMAS_ANY_SKIP

    Skip unknown attribute from validation

    +

    Macro: XML_SCHEMAS_ANY_STRICT

    #define XML_SCHEMAS_ANY_STRICT

    Used by wildcards. Apply strict validation rules

    +

    Macro: XML_SCHEMAS_ATTRGROUP_GLOBAL

    #define XML_SCHEMAS_ATTRGROUP_GLOBAL

    The attribute wildcard has been already builded.

    +

    Macro: XML_SCHEMAS_ATTRGROUP_HAS_REFS

    #define XML_SCHEMAS_ATTRGROUP_HAS_REFS

    Whether this attr. group contains attr. group references.

    +

    Macro: XML_SCHEMAS_ATTRGROUP_MARKED

    #define XML_SCHEMAS_ATTRGROUP_MARKED

    Marks the attr group as marked; used for circular checks.

    +

    Macro: XML_SCHEMAS_ATTRGROUP_REDEFINED

    #define XML_SCHEMAS_ATTRGROUP_REDEFINED

    The attr group was redefined.

    +

    Macro: XML_SCHEMAS_ATTRGROUP_WILDCARD_BUILDED

    #define XML_SCHEMAS_ATTRGROUP_WILDCARD_BUILDED

    The attribute wildcard has been already builded.

    +

    Macro: XML_SCHEMAS_ATTR_FIXED

    #define XML_SCHEMAS_ATTR_FIXED

    the attribute has a fixed value

    +

    Macro: XML_SCHEMAS_ATTR_GLOBAL

    #define XML_SCHEMAS_ATTR_GLOBAL

    allow elements in no namespace

    +

    Macro: XML_SCHEMAS_ATTR_INTERNAL_RESOLVED

    #define XML_SCHEMAS_ATTR_INTERNAL_RESOLVED

    this is set when the "type" and "ref" references have been resolved.

    +

    Macro: XML_SCHEMAS_ATTR_NSDEFAULT

    #define XML_SCHEMAS_ATTR_NSDEFAULT

    allow elements in no namespace

    +

    Macro: XML_SCHEMAS_ATTR_USE_OPTIONAL

    #define XML_SCHEMAS_ATTR_USE_OPTIONAL

    The attribute is optional.

    +

    Macro: XML_SCHEMAS_ATTR_USE_PROHIBITED

    #define XML_SCHEMAS_ATTR_USE_PROHIBITED

    Used by wildcards. The attribute is prohibited.

    +

    Macro: XML_SCHEMAS_ATTR_USE_REQUIRED

    #define XML_SCHEMAS_ATTR_USE_REQUIRED

    The attribute is required.

    +

    Macro: XML_SCHEMAS_BLOCK_DEFAULT_EXTENSION

    #define XML_SCHEMAS_BLOCK_DEFAULT_EXTENSION

    the schema has "extension" in the set of blockDefault.

    +

    Macro: XML_SCHEMAS_BLOCK_DEFAULT_RESTRICTION

    #define XML_SCHEMAS_BLOCK_DEFAULT_RESTRICTION

    the schema has "restriction" in the set of blockDefault.

    +

    Macro: XML_SCHEMAS_BLOCK_DEFAULT_SUBSTITUTION

    #define XML_SCHEMAS_BLOCK_DEFAULT_SUBSTITUTION

    the schema has "substitution" in the set of blockDefault.

    +

    Macro: XML_SCHEMAS_ELEM_ABSTRACT

    #define XML_SCHEMAS_ELEM_ABSTRACT

    the element is abstract

    +

    Macro: XML_SCHEMAS_ELEM_BLOCK_ABSENT

    #define XML_SCHEMAS_ELEM_BLOCK_ABSENT

    the "block" attribute is absent

    +

    Macro: XML_SCHEMAS_ELEM_BLOCK_EXTENSION

    #define XML_SCHEMAS_ELEM_BLOCK_EXTENSION

    disallowed substitutions are absent

    +

    Macro: XML_SCHEMAS_ELEM_BLOCK_RESTRICTION

    #define XML_SCHEMAS_ELEM_BLOCK_RESTRICTION

    disallowed substitutions: "restriction"

    +

    Macro: XML_SCHEMAS_ELEM_BLOCK_SUBSTITUTION

    #define XML_SCHEMAS_ELEM_BLOCK_SUBSTITUTION

    disallowed substitutions: "substituion"

    +

    Macro: XML_SCHEMAS_ELEM_CIRCULAR

    #define XML_SCHEMAS_ELEM_CIRCULAR

    a helper flag for the search of circular references.

    +

    Macro: XML_SCHEMAS_ELEM_DEFAULT

    #define XML_SCHEMAS_ELEM_DEFAULT

    the element has a default value

    +

    Macro: XML_SCHEMAS_ELEM_FINAL_ABSENT

    #define XML_SCHEMAS_ELEM_FINAL_ABSENT

    substitution group exclusions are absent

    +

    Macro: XML_SCHEMAS_ELEM_FINAL_EXTENSION

    #define XML_SCHEMAS_ELEM_FINAL_EXTENSION

    substitution group exclusions: "extension"

    +

    Macro: XML_SCHEMAS_ELEM_FINAL_RESTRICTION

    #define XML_SCHEMAS_ELEM_FINAL_RESTRICTION

    substitution group exclusions: "restriction"

    +

    Macro: XML_SCHEMAS_ELEM_FIXED

    #define XML_SCHEMAS_ELEM_FIXED

    the element has a fixed value

    +

    Macro: XML_SCHEMAS_ELEM_GLOBAL

    #define XML_SCHEMAS_ELEM_GLOBAL

    the element is global

    +

    Macro: XML_SCHEMAS_ELEM_INTERNAL_CHECKED

    #define XML_SCHEMAS_ELEM_INTERNAL_CHECKED

    this is set when the elem decl has been checked against all constraints

    +

    Macro: XML_SCHEMAS_ELEM_INTERNAL_RESOLVED

    #define XML_SCHEMAS_ELEM_INTERNAL_RESOLVED

    this is set when "type", "ref", "substitutionGroup" references have been resolved.

    +

    Macro: XML_SCHEMAS_ELEM_NILLABLE

    #define XML_SCHEMAS_ELEM_NILLABLE

    the element is nillable

    +

    Macro: XML_SCHEMAS_ELEM_NSDEFAULT

    #define XML_SCHEMAS_ELEM_NSDEFAULT

    allow elements in no namespace Obsolete, not used anymore.

    +

    Macro: XML_SCHEMAS_ELEM_REF

    #define XML_SCHEMAS_ELEM_REF

    the element is a reference to a type

    +

    Macro: XML_SCHEMAS_ELEM_SUBST_GROUP_HEAD

    #define XML_SCHEMAS_ELEM_SUBST_GROUP_HEAD

    the declaration is a substitution group head

    +

    Macro: XML_SCHEMAS_ELEM_TOPLEVEL

    #define XML_SCHEMAS_ELEM_TOPLEVEL

    the element is top level obsolete: use XML_SCHEMAS_ELEM_GLOBAL instead

    +

    Macro: XML_SCHEMAS_FACET_COLLAPSE

    #define XML_SCHEMAS_FACET_COLLAPSE

    collapse the types of the facet

    +

    Macro: XML_SCHEMAS_FACET_PRESERVE

    #define XML_SCHEMAS_FACET_PRESERVE

    preserve the type of the facet

    +

    Macro: XML_SCHEMAS_FACET_REPLACE

    #define XML_SCHEMAS_FACET_REPLACE

    replace the type of the facet

    +

    Macro: XML_SCHEMAS_FACET_UNKNOWN

    #define XML_SCHEMAS_FACET_UNKNOWN

    unknown facet handling

    +

    Macro: XML_SCHEMAS_FINAL_DEFAULT_EXTENSION

    #define XML_SCHEMAS_FINAL_DEFAULT_EXTENSION

    the schema has "extension" in the set of finalDefault.

    +

    Macro: XML_SCHEMAS_FINAL_DEFAULT_LIST

    #define XML_SCHEMAS_FINAL_DEFAULT_LIST

    the cshema has "list" in the set of finalDefault.

    +

    Macro: XML_SCHEMAS_FINAL_DEFAULT_RESTRICTION

    #define XML_SCHEMAS_FINAL_DEFAULT_RESTRICTION

    the schema has "restriction" in the set of finalDefault.

    +

    Macro: XML_SCHEMAS_FINAL_DEFAULT_UNION

    #define XML_SCHEMAS_FINAL_DEFAULT_UNION

    the schema has "union" in the set of finalDefault.

    +

    Macro: XML_SCHEMAS_INCLUDING_CONVERT_NS

    #define XML_SCHEMAS_INCLUDING_CONVERT_NS

    the schema is currently including an other schema with no target namespace.

    +

    Macro: XML_SCHEMAS_QUALIF_ATTR

    #define XML_SCHEMAS_QUALIF_ATTR

    Reflects attributeFormDefault == qualified in an XML schema document.

    +

    Macro: XML_SCHEMAS_QUALIF_ELEM

    #define XML_SCHEMAS_QUALIF_ELEM

    Reflects elementFormDefault == qualified in an XML schema document.

    +

    Macro: XML_SCHEMAS_TYPE_ABSTRACT

    #define XML_SCHEMAS_TYPE_ABSTRACT

    the simple/complexType is abstract.

    +

    Macro: XML_SCHEMAS_TYPE_BLOCK_DEFAULT

    #define XML_SCHEMAS_TYPE_BLOCK_DEFAULT

    the complexType did not specify 'block' so use the default of the <schema> item.

    +

    Macro: XML_SCHEMAS_TYPE_BLOCK_EXTENSION

    #define XML_SCHEMAS_TYPE_BLOCK_EXTENSION

    the complexType has a 'block' of "extension".

    +

    Macro: XML_SCHEMAS_TYPE_BLOCK_RESTRICTION

    #define XML_SCHEMAS_TYPE_BLOCK_RESTRICTION

    the complexType has a 'block' of "restriction".

    +

    Macro: XML_SCHEMAS_TYPE_BUILTIN_PRIMITIVE

    #define XML_SCHEMAS_TYPE_BUILTIN_PRIMITIVE

    Marks the item as a builtin primitive.

    +

    Macro: XML_SCHEMAS_TYPE_DERIVATION_METHOD_EXTENSION

    #define XML_SCHEMAS_TYPE_DERIVATION_METHOD_EXTENSION

    the simple or complex type has a derivation method of "extension".

    +

    Macro: XML_SCHEMAS_TYPE_DERIVATION_METHOD_RESTRICTION

    #define XML_SCHEMAS_TYPE_DERIVATION_METHOD_RESTRICTION

    the simple or complex type has a derivation method of "restriction".

    +

    Macro: XML_SCHEMAS_TYPE_FACETSNEEDVALUE

    #define XML_SCHEMAS_TYPE_FACETSNEEDVALUE

    indicates if the facets need a computed value

    +

    Macro: XML_SCHEMAS_TYPE_FINAL_DEFAULT

    #define XML_SCHEMAS_TYPE_FINAL_DEFAULT

    the simpleType has a final of "default".

    +

    Macro: XML_SCHEMAS_TYPE_FINAL_EXTENSION

    #define XML_SCHEMAS_TYPE_FINAL_EXTENSION

    the complexType has a final of "extension".

    +

    Macro: XML_SCHEMAS_TYPE_FINAL_LIST

    #define XML_SCHEMAS_TYPE_FINAL_LIST

    the simpleType has a final of "list".

    +

    Macro: XML_SCHEMAS_TYPE_FINAL_RESTRICTION

    #define XML_SCHEMAS_TYPE_FINAL_RESTRICTION

    the simpleType/complexType has a final of "restriction".

    +

    Macro: XML_SCHEMAS_TYPE_FINAL_UNION

    #define XML_SCHEMAS_TYPE_FINAL_UNION

    the simpleType has a final of "union".

    +

    Macro: XML_SCHEMAS_TYPE_FIXUP_1

    #define XML_SCHEMAS_TYPE_FIXUP_1

    First stage of fixup was done.

    +

    Macro: XML_SCHEMAS_TYPE_GLOBAL

    #define XML_SCHEMAS_TYPE_GLOBAL

    the type is global

    +

    Macro: XML_SCHEMAS_TYPE_HAS_FACETS

    #define XML_SCHEMAS_TYPE_HAS_FACETS

    has facets

    +

    Macro: XML_SCHEMAS_TYPE_INTERNAL_INVALID

    #define XML_SCHEMAS_TYPE_INTERNAL_INVALID

    indicates that the type is invalid

    +

    Macro: XML_SCHEMAS_TYPE_INTERNAL_RESOLVED

    #define XML_SCHEMAS_TYPE_INTERNAL_RESOLVED

    indicates that the type was typefixed

    +

    Macro: XML_SCHEMAS_TYPE_MARKED

    #define XML_SCHEMAS_TYPE_MARKED

    Marks the item as marked; used for circular checks.

    +

    Macro: XML_SCHEMAS_TYPE_MIXED

    #define XML_SCHEMAS_TYPE_MIXED

    the element content type is mixed

    +

    Macro: XML_SCHEMAS_TYPE_NORMVALUENEEDED

    #define XML_SCHEMAS_TYPE_NORMVALUENEEDED

    indicates if the facets (pattern) need a normalized value

    +

    Macro: XML_SCHEMAS_TYPE_OWNED_ATTR_WILDCARD

    #define XML_SCHEMAS_TYPE_OWNED_ATTR_WILDCARD

    the complexType owns an attribute wildcard, i.e. it can be freed by the complexType

    +

    Macro: XML_SCHEMAS_TYPE_REDEFINED

    #define XML_SCHEMAS_TYPE_REDEFINED

    The type was redefined.

    +

    Macro: XML_SCHEMAS_TYPE_VARIETY_ABSENT

    #define XML_SCHEMAS_TYPE_VARIETY_ABSENT

    the simpleType has a variety of "absent". TODO: Actually not necessary :-/, since if none of the variety flags occur then it's automatically absent.

    +

    Macro: XML_SCHEMAS_TYPE_VARIETY_ATOMIC

    #define XML_SCHEMAS_TYPE_VARIETY_ATOMIC

    the simpleType has a variety of "union".

    +

    Macro: XML_SCHEMAS_TYPE_VARIETY_LIST

    #define XML_SCHEMAS_TYPE_VARIETY_LIST

    the simpleType has a variety of "list".

    +

    Macro: XML_SCHEMAS_TYPE_VARIETY_UNION

    #define XML_SCHEMAS_TYPE_VARIETY_UNION

    the simpleType has a variety of "union".

    +

    Macro: XML_SCHEMAS_TYPE_WHITESPACE_COLLAPSE

    #define XML_SCHEMAS_TYPE_WHITESPACE_COLLAPSE

    a whitespace-facet value of "collapse"

    +

    Macro: XML_SCHEMAS_TYPE_WHITESPACE_PRESERVE

    #define XML_SCHEMAS_TYPE_WHITESPACE_PRESERVE

    a whitespace-facet value of "preserve"

    +

    Macro: XML_SCHEMAS_TYPE_WHITESPACE_REPLACE

    #define XML_SCHEMAS_TYPE_WHITESPACE_REPLACE

    a whitespace-facet value of "replace"

    +

    Macro: XML_SCHEMAS_WILDCARD_COMPLETE

    #define XML_SCHEMAS_WILDCARD_COMPLETE

    If the wildcard is complete.

    +

    Structure xmlSchemaAnnot

    Structure xmlSchemaAnnot
    struct _xmlSchemaAnnot { + struct _xmlSchemaAnnot * next + xmlNodePtr content : the annotation +}

    Structure xmlSchemaAttribute

    Structure xmlSchemaAttribute
    struct _xmlSchemaAttribute { + xmlSchemaTypeType type + struct _xmlSchemaAttribute * next : the next attribute (not used?) + const xmlChar * name : the name of the declaration + const xmlChar * id : Deprecated; not used + const xmlChar * ref : Deprecated; not used + const xmlChar * refNs : Deprecated; not used + const xmlChar * typeName : the local name of the type definition + const xmlChar * typeNs : the ns URI of the type definition + xmlSchemaAnnotPtr annot + xmlSchemaTypePtr base : Deprecated; not used + int occurs : Deprecated; not used + const xmlChar * defValue : The initial value of the value constrai + xmlSchemaTypePtr subtypes : the type definition + xmlNodePtr node + const xmlChar * targetNamespace + int flags + const xmlChar * refPrefix : Deprecated; not used + xmlSchemaValPtr defVal : The compiled value constraint + xmlSchemaAttributePtr refDecl : Deprecated; not used +}

    Structure xmlSchemaAttributeGroup

    Structure xmlSchemaAttributeGroup
    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 : Deprecated; not used + const xmlChar * refNs : Deprecated; not used + xmlSchemaAnnotPtr annot + xmlSchemaAttributePtr attributes : Deprecated; not used + xmlNodePtr node + int flags + xmlSchemaWildcardPtr attributeWildcard + const xmlChar * refPrefix : Deprecated; not used + xmlSchemaAttributeGroupPtr refItem : Deprecated; not used + const xmlChar * targetNamespace + void * attrUses +}

    Structure xmlSchemaAttributeLink

    Structure xmlSchemaAttributeLink
    struct _xmlSchemaAttributeLink { + struct _xmlSchemaAttributeLink * next : the next attribute link ... + struct _xmlSchemaAttribute * attr : the linked attribute +}

    Enum xmlSchemaContentType

    Enum xmlSchemaContentType {
    +    XML_SCHEMA_CONTENT_UNKNOWN = 0
    +    XML_SCHEMA_CONTENT_EMPTY = 1
    +    XML_SCHEMA_CONTENT_ELEMENTS = 2
    +    XML_SCHEMA_CONTENT_MIXED = 3
    +    XML_SCHEMA_CONTENT_SIMPLE = 4
    +    XML_SCHEMA_CONTENT_MIXED_OR_ELEMENTS = 5 : Obsolete
    +    XML_SCHEMA_CONTENT_BASIC = 6
    +    XML_SCHEMA_CONTENT_ANY = 7
    +}
    +

    Structure xmlSchemaElement

    Structure xmlSchemaElement
    struct _xmlSchemaElement { + xmlSchemaTypeType type : The kind of type + struct _xmlSchemaType * next : Not used? + const xmlChar * name + const xmlChar * id : Deprecated; not used + const xmlChar * ref : Deprecated; not used + const xmlChar * refNs : Deprecated; not used + xmlSchemaAnnotPtr annot + xmlSchemaTypePtr subtypes : the type definition + xmlSchemaAttributePtr attributes + xmlNodePtr node + int minOccurs : Deprecated; not used + int maxOccurs : Deprecated; not used + int flags + const xmlChar * targetNamespace + const xmlChar * namedType + const xmlChar * namedTypeNs + const xmlChar * substGroup + const xmlChar * substGroupNs + const xmlChar * scope + const xmlChar * value : The original value of the value constra + struct _xmlSchemaElement * refDecl : This will now be used for the substitut + xmlRegexpPtr contModel : Obsolete for WXS, maybe used for RelaxN + xmlSchemaContentType contentType + const xmlChar * refPrefix : Deprecated; not used + xmlSchemaValPtr defVal : The compiled value contraint. + void * idcs : The identity-constraint defs +}

    Structure xmlSchemaFacet

    Structure xmlSchemaFacet
    struct _xmlSchemaFacet { + xmlSchemaTypeType type : The kind of type + struct _xmlSchemaFacet * next : the next type if in a sequence ... + const xmlChar * value : The original value + const xmlChar * id : Obsolete + xmlSchemaAnnotPtr annot + xmlNodePtr node + int fixed : XML_SCHEMAS_FACET_PRESERVE, etc. + int whitespace + xmlSchemaValPtr val : The compiled value + xmlRegexpPtr regexp : The regex for patterns +}

    Structure xmlSchemaFacetLink

    Structure xmlSchemaFacetLink
    struct _xmlSchemaFacetLink { + struct _xmlSchemaFacetLink * next : the next facet link ... + xmlSchemaFacetPtr facet : the linked facet +}

    Structure xmlSchemaNotation

    Structure xmlSchemaNotation
    struct _xmlSchemaNotation { + xmlSchemaTypeType type : The kind of type + const xmlChar * name + xmlSchemaAnnotPtr annot + const xmlChar * identifier + const xmlChar * targetNamespace +}

    Structure xmlSchemaType

    Structure xmlSchemaType
    struct _xmlSchemaType { + xmlSchemaTypeType type : The kind of type + struct _xmlSchemaType * next : the next type if in a sequence ... + const xmlChar * name + const xmlChar * id : Deprecated; not used + const xmlChar * ref : Deprecated; not used + const xmlChar * refNs : Deprecated; not used + xmlSchemaAnnotPtr annot + xmlSchemaTypePtr subtypes + xmlSchemaAttributePtr attributes : Deprecated; not used + xmlNodePtr node + int minOccurs : Deprecated; not used + int maxOccurs : Deprecated; not used + int flags + xmlSchemaContentType contentType + const xmlChar * base : Base type's local name + const xmlChar * baseNs : Base type's target namespace + xmlSchemaTypePtr baseType : The base type component + xmlSchemaFacetPtr facets : Local facets + struct _xmlSchemaType * redef : Deprecated; not used + int recurse : Obsolete + xmlSchemaAttributeLinkPtr * attributeUses : Deprecated; not used + xmlSchemaWildcardPtr attributeWildcard + int builtInType : Type of built-in types. + xmlSchemaTypeLinkPtr memberTypes : member-types if a union type. + xmlSchemaFacetLinkPtr facetSet : All facets (incl. inherited) + const xmlChar * refPrefix : Deprecated; not used + xmlSchemaTypePtr contentTypeDef : Used for the simple content of complex + xmlRegexpPtr contModel : Holds the automaton of the content mode + const xmlChar * targetNamespace + void * attrUses +}

    Structure xmlSchemaTypeLink

    Structure xmlSchemaTypeLink
    struct _xmlSchemaTypeLink { + struct _xmlSchemaTypeLink * next : the next type link ... + xmlSchemaTypePtr type : the linked type +}

    Enum xmlSchemaTypeType

    Enum xmlSchemaTypeType {
    +    XML_SCHEMA_TYPE_BASIC = 1 : A built-in datatype
    +    XML_SCHEMA_TYPE_ANY = 2
    +    XML_SCHEMA_TYPE_FACET = 3
    +    XML_SCHEMA_TYPE_SIMPLE = 4
    +    XML_SCHEMA_TYPE_COMPLEX = 5
    +    XML_SCHEMA_TYPE_SEQUENCE = 6
    +    XML_SCHEMA_TYPE_CHOICE = 7
    +    XML_SCHEMA_TYPE_ALL = 8
    +    XML_SCHEMA_TYPE_SIMPLE_CONTENT = 9
    +    XML_SCHEMA_TYPE_COMPLEX_CONTENT = 10
    +    XML_SCHEMA_TYPE_UR = 11
    +    XML_SCHEMA_TYPE_RESTRICTION = 12
    +    XML_SCHEMA_TYPE_EXTENSION = 13
    +    XML_SCHEMA_TYPE_ELEMENT = 14
    +    XML_SCHEMA_TYPE_ATTRIBUTE = 15
    +    XML_SCHEMA_TYPE_ATTRIBUTEGROUP = 16
    +    XML_SCHEMA_TYPE_GROUP = 17
    +    XML_SCHEMA_TYPE_NOTATION = 18
    +    XML_SCHEMA_TYPE_LIST = 19
    +    XML_SCHEMA_TYPE_UNION = 20
    +    XML_SCHEMA_TYPE_ANY_ATTRIBUTE = 21
    +    XML_SCHEMA_TYPE_IDC_UNIQUE = 22
    +    XML_SCHEMA_TYPE_IDC_KEY = 23
    +    XML_SCHEMA_TYPE_IDC_KEYREF = 24
    +    XML_SCHEMA_TYPE_PARTICLE = 25
    +    XML_SCHEMA_TYPE_ATTRIBUTE_USE = 26
    +    XML_SCHEMA_FACET_MININCLUSIVE = 1000
    +    XML_SCHEMA_FACET_MINEXCLUSIVE = 1001
    +    XML_SCHEMA_FACET_MAXINCLUSIVE = 1002
    +    XML_SCHEMA_FACET_MAXEXCLUSIVE = 1003
    +    XML_SCHEMA_FACET_TOTALDIGITS = 1004
    +    XML_SCHEMA_FACET_FRACTIONDIGITS = 1005
    +    XML_SCHEMA_FACET_PATTERN = 1006
    +    XML_SCHEMA_FACET_ENUMERATION = 1007
    +    XML_SCHEMA_FACET_WHITESPACE = 1008
    +    XML_SCHEMA_FACET_LENGTH = 1009
    +    XML_SCHEMA_FACET_MAXLENGTH = 1010
    +    XML_SCHEMA_FACET_MINLENGTH = 1011
    +    XML_SCHEMA_EXTRA_QNAMEREF = 2000
    +    XML_SCHEMA_EXTRA_ATTR_USE_PROHIB = 2001
    +}
    +

    Structure xmlSchemaVal

    Structure xmlSchemaVal
    struct _xmlSchemaVal { +The content of this structure is not made public by the API. +}

    Enum xmlSchemaValType

    Enum xmlSchemaValType {
    +    XML_SCHEMAS_UNKNOWN = 0
    +    XML_SCHEMAS_STRING = 1
    +    XML_SCHEMAS_NORMSTRING = 2
    +    XML_SCHEMAS_DECIMAL = 3
    +    XML_SCHEMAS_TIME = 4
    +    XML_SCHEMAS_GDAY = 5
    +    XML_SCHEMAS_GMONTH = 6
    +    XML_SCHEMAS_GMONTHDAY = 7
    +    XML_SCHEMAS_GYEAR = 8
    +    XML_SCHEMAS_GYEARMONTH = 9
    +    XML_SCHEMAS_DATE = 10
    +    XML_SCHEMAS_DATETIME = 11
    +    XML_SCHEMAS_DURATION = 12
    +    XML_SCHEMAS_FLOAT = 13
    +    XML_SCHEMAS_DOUBLE = 14
    +    XML_SCHEMAS_BOOLEAN = 15
    +    XML_SCHEMAS_TOKEN = 16
    +    XML_SCHEMAS_LANGUAGE = 17
    +    XML_SCHEMAS_NMTOKEN = 18
    +    XML_SCHEMAS_NMTOKENS = 19
    +    XML_SCHEMAS_NAME = 20
    +    XML_SCHEMAS_QNAME = 21
    +    XML_SCHEMAS_NCNAME = 22
    +    XML_SCHEMAS_ID = 23
    +    XML_SCHEMAS_IDREF = 24
    +    XML_SCHEMAS_IDREFS = 25
    +    XML_SCHEMAS_ENTITY = 26
    +    XML_SCHEMAS_ENTITIES = 27
    +    XML_SCHEMAS_NOTATION = 28
    +    XML_SCHEMAS_ANYURI = 29
    +    XML_SCHEMAS_INTEGER = 30
    +    XML_SCHEMAS_NPINTEGER = 31
    +    XML_SCHEMAS_NINTEGER = 32
    +    XML_SCHEMAS_NNINTEGER = 33
    +    XML_SCHEMAS_PINTEGER = 34
    +    XML_SCHEMAS_INT = 35
    +    XML_SCHEMAS_UINT = 36
    +    XML_SCHEMAS_LONG = 37
    +    XML_SCHEMAS_ULONG = 38
    +    XML_SCHEMAS_SHORT = 39
    +    XML_SCHEMAS_USHORT = 40
    +    XML_SCHEMAS_BYTE = 41
    +    XML_SCHEMAS_UBYTE = 42
    +    XML_SCHEMAS_HEXBINARY = 43
    +    XML_SCHEMAS_BASE64BINARY = 44
    +    XML_SCHEMAS_ANYTYPE = 45
    +    XML_SCHEMAS_ANYSIMPLETYPE = 46
    +}
    +

    Structure xmlSchemaWildcard

    Structure xmlSchemaWildcard
    struct _xmlSchemaWildcard { + xmlSchemaTypeType type : The kind of type + const xmlChar * id : Deprecated; not used + xmlSchemaAnnotPtr annot + xmlNodePtr node + int minOccurs : Deprecated; not used + int maxOccurs : Deprecated; not used + int processContents + int any : Indicates if the ns constraint is of ## + xmlSchemaWildcardNsPtr nsSet : The list of allowed namespaces + xmlSchemaWildcardNsPtr negNsSet : The negated namespace + int flags +}

    Structure xmlSchemaWildcardNs

    Structure xmlSchemaWildcardNs
    struct _xmlSchemaWildcardNs { + struct _xmlSchemaWildcardNs * next : the next constraint link ... + const xmlChar * value : the value +}

    Function: xmlSchemaFreeType

    void	xmlSchemaFreeType		(xmlSchemaTypePtr type)
    +

    Deallocate a Schema Type structure.

    +
    type:a schema type structure

    Function: xmlSchemaFreeWildcard

    void	xmlSchemaFreeWildcard		(xmlSchemaWildcardPtr wildcard)
    +

    Deallocates a wildcard structure.

    +
    wildcard:a wildcard structure

    Daniel Veillard

    diff --git a/doc/html/libxml-schematron.html b/doc/html/libxml-schematron.html new file mode 100644 index 0000000..1620fa7 --- /dev/null +++ b/doc/html/libxml-schematron.html @@ -0,0 +1,81 @@ + + +Module schematron from libxml2
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    Module schematron from libxml2

    API Menu
    API Indexes
    Related links

    interface to the XML Schematron validity checking.

    Table of Contents

    Structure xmlSchematron
    struct _xmlSchematron +The content of this structure is not made public by the API. +
    Structure xmlSchematronParserCtxt
    struct _xmlSchematronParserCtxt +The content of this structure is not made public by the API. +
    Typedef xmlSchematronParserCtxt * xmlSchematronParserCtxtPtr
    +
    Typedef xmlSchematron * xmlSchematronPtr
    +
    Structure xmlSchematronValidCtxt
    struct _xmlSchematronValidCtxt +The content of this structure is not made public by the API. +
    Typedef xmlSchematronValidCtxt * xmlSchematronValidCtxtPtr
    +
    Enum xmlSchematronValidOptions
    +
    void	xmlSchematronFree		(xmlSchematronPtr schema)
    +
    void	xmlSchematronFreeParserCtxt	(xmlSchematronParserCtxtPtr ctxt)
    +
    void	xmlSchematronFreeValidCtxt	(xmlSchematronValidCtxtPtr ctxt)
    +
    xmlSchematronParserCtxtPtr	xmlSchematronNewDocParserCtxt	(xmlDocPtr doc)
    +
    xmlSchematronParserCtxtPtr	xmlSchematronNewMemParserCtxt	(const char * buffer, 
    int size)
    +
    xmlSchematronParserCtxtPtr	xmlSchematronNewParserCtxt	(const char * URL)
    +
    xmlSchematronValidCtxtPtr	xmlSchematronNewValidCtxt	(xmlSchematronPtr schema, 
    int options)
    +
    xmlSchematronPtr	xmlSchematronParse	(xmlSchematronParserCtxtPtr ctxt)
    +
    void	xmlSchematronSetValidStructuredErrors	(xmlSchematronValidCtxtPtr ctxt, 
    xmlStructuredErrorFunc serror,
    void * ctx)
    +
    int	xmlSchematronValidateDoc	(xmlSchematronValidCtxtPtr ctxt, 
    xmlDocPtr instance)
    +
    Function type: xmlSchematronValidityErrorFunc
    +void	xmlSchematronValidityErrorFunc	(void * ctx, 
    const char * msg,
    ... ...) +
    +
    Function type: xmlSchematronValidityWarningFunc
    +void	xmlSchematronValidityWarningFunc	(void * ctx, 
    const char * msg,
    ... ...) +
    +

    Description

    +

    Structure xmlSchematron

    Structure xmlSchematron
    struct _xmlSchematron { +The content of this structure is not made public by the API. +}

    Structure xmlSchematronParserCtxt

    Structure xmlSchematronParserCtxt
    struct _xmlSchematronParserCtxt { +The content of this structure is not made public by the API. +}

    Structure xmlSchematronValidCtxt

    Structure xmlSchematronValidCtxt
    struct _xmlSchematronValidCtxt { +The content of this structure is not made public by the API. +}

    Enum xmlSchematronValidOptions

    Enum xmlSchematronValidOptions {
    +    XML_SCHEMATRON_OUT_QUIET = 1 : quiet no report
    +    XML_SCHEMATRON_OUT_TEXT = 2 : build a textual report
    +    XML_SCHEMATRON_OUT_XML = 4 : output SVRL
    +    XML_SCHEMATRON_OUT_ERROR = 8 : output via xmlStructuredErrorFunc
    +    XML_SCHEMATRON_OUT_FILE = 256 : output to a file descriptor
    +    XML_SCHEMATRON_OUT_BUFFER = 512 : output to a buffer
    +    XML_SCHEMATRON_OUT_IO = 1024 : output to I/O mechanism
    +}
    +

    Function: xmlSchematronFree

    void	xmlSchematronFree		(xmlSchematronPtr schema)
    +

    Deallocate a Schematron structure.

    +
    schema:a schema structure

    Function: xmlSchematronFreeParserCtxt

    void	xmlSchematronFreeParserCtxt	(xmlSchematronParserCtxtPtr ctxt)
    +

    Free the resources associated to the schema parser context

    +
    ctxt:the schema parser context

    Function: xmlSchematronFreeValidCtxt

    void	xmlSchematronFreeValidCtxt	(xmlSchematronValidCtxtPtr ctxt)
    +

    Free the resources associated to the schema validation context

    +
    ctxt:the schema validation context

    Function: xmlSchematronNewDocParserCtxt

    xmlSchematronParserCtxtPtr	xmlSchematronNewDocParserCtxt	(xmlDocPtr doc)
    +

    Create an XML Schematrons parse context for that document. NB. The document may be modified during the parsing process.

    +
    doc:a preparsed document tree
    Returns:the parser context or NULL in case of error

    Function: xmlSchematronNewMemParserCtxt

    xmlSchematronParserCtxtPtr	xmlSchematronNewMemParserCtxt	(const char * buffer, 
    int size)
    +

    Create an XML Schematrons parse context for that memory buffer expected to contain an XML Schematrons file.

    +
    buffer:a pointer to a char array containing the schemas
    size:the size of the array
    Returns:the parser context or NULL in case of error

    Function: xmlSchematronNewParserCtxt

    xmlSchematronParserCtxtPtr	xmlSchematronNewParserCtxt	(const char * URL)
    +

    Create an XML Schematrons parse context for that file/resource expected to contain an XML Schematrons file.

    +
    URL:the location of the schema
    Returns:the parser context or NULL in case of error

    Function: xmlSchematronNewValidCtxt

    xmlSchematronValidCtxtPtr	xmlSchematronNewValidCtxt	(xmlSchematronPtr schema, 
    int options)
    +

    Create an XML Schematrons validation context based on the given schema.

    +
    schema:a precompiled XML Schematrons
    options:a set of xmlSchematronValidOptions
    Returns:the validation context or NULL in case of error

    Function: xmlSchematronParse

    xmlSchematronPtr	xmlSchematronParse	(xmlSchematronParserCtxtPtr ctxt)
    +

    parse a schema definition resource and build an internal XML Shema struture which can be used to validate instances.

    +
    ctxt:a schema validation context
    Returns:the internal XML Schematron structure built from the resource or NULL in case of error

    Function: xmlSchematronSetValidStructuredErrors

    void	xmlSchematronSetValidStructuredErrors	(xmlSchematronValidCtxtPtr ctxt, 
    xmlStructuredErrorFunc serror,
    void * ctx)
    +

    Set the structured error callback

    +
    ctxt:a Schematron validation context
    serror:the structured error function
    ctx:the functions context

    Function: xmlSchematronValidateDoc

    int	xmlSchematronValidateDoc	(xmlSchematronValidCtxtPtr ctxt, 
    xmlDocPtr instance)
    +

    Validate a tree instance against the schematron

    +
    ctxt:the schema validation context
    instance:the document instace tree
    Returns:0 in case of success, -1 in case of internal error and an error count otherwise.

    Function type: xmlSchematronValidityErrorFunc

    Function type: xmlSchematronValidityErrorFunc
    +void	xmlSchematronValidityErrorFunc	(void * ctx, 
    const char * msg,
    ... ...) +

    Signature of an error callback from a Schematron validation

    ctx:the validation context
    msg:the message
    ...:extra arguments

    +

    Function type: xmlSchematronValidityWarningFunc

    Function type: xmlSchematronValidityWarningFunc
    +void	xmlSchematronValidityWarningFunc	(void * ctx, 
    const char * msg,
    ... ...) +

    Signature of a warning callback from a Schematron validation

    ctx:the validation context
    msg:the message
    ...:extra arguments

    +

    Daniel Veillard

    diff --git a/doc/html/libxml-threads.html b/doc/html/libxml-threads.html new file mode 100644 index 0000000..3c1d1ec --- /dev/null +++ b/doc/html/libxml-threads.html @@ -0,0 +1,72 @@ + + +Module threads from libxml2
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    Module threads from libxml2

    API Menu
    API Indexes
    Related links

    set of generic threading related routines should work with pthreads, Windows native or TLS threads

    Table of Contents

    Structure xmlMutex
    struct _xmlMutex +The content of this structure is not made public by the API. +
    Typedef xmlMutex * xmlMutexPtr
    +
    Structure xmlRMutex
    struct _xmlRMutex +The content of this structure is not made public by the API. +
    Typedef xmlRMutex * xmlRMutexPtr
    +
    void	xmlCleanupThreads		(void)
    +
    int	xmlDllMain			(void * hinstDLL, 
    unsigned long fdwReason,
    void * lpvReserved)
    +
    void	xmlFreeMutex			(xmlMutexPtr tok)
    +
    void	xmlFreeRMutex			(xmlRMutexPtr tok)
    +
    xmlGlobalStatePtr	xmlGetGlobalState	(void)
    +
    int	xmlGetThreadId			(void)
    +
    void	xmlInitThreads			(void)
    +
    int	xmlIsMainThread			(void)
    +
    void	xmlLockLibrary			(void)
    +
    void	xmlMutexLock			(xmlMutexPtr tok)
    +
    void	xmlMutexUnlock			(xmlMutexPtr tok)
    +
    xmlMutexPtr	xmlNewMutex		(void)
    +
    xmlRMutexPtr	xmlNewRMutex		(void)
    +
    void	xmlRMutexLock			(xmlRMutexPtr tok)
    +
    void	xmlRMutexUnlock			(xmlRMutexPtr tok)
    +
    void	xmlUnlockLibrary		(void)
    +

    Description

    +

    Structure xmlMutex

    Structure xmlMutex
    struct _xmlMutex { +The content of this structure is not made public by the API. +}

    Structure xmlRMutex

    Structure xmlRMutex
    struct _xmlRMutex { +The content of this structure is not made public by the API. +}

    Function: xmlCleanupThreads

    void	xmlCleanupThreads		(void)
    +

    xmlCleanupThreads() is used to to cleanup all the thread related data of the libxml2 library once processing has ended. WARNING: if your application is multithreaded or has plugin support calling this may crash the application if another thread or a plugin is still using libxml2. It's sometimes very hard to guess if libxml2 is in use in the application, some libraries or plugins may use it without notice. In case of doubt abstain from calling this function or do it just before calling exit() to avoid leak reports from valgrind !

    +

    Function: xmlDllMain

    int	xmlDllMain			(void * hinstDLL, 
    unsigned long fdwReason,
    void * lpvReserved)
    +

    +
    hinstDLL:
    fdwReason:
    lpvReserved:
    Returns:

    Function: xmlFreeMutex

    void	xmlFreeMutex			(xmlMutexPtr tok)
    +

    xmlFreeMutex() is used to reclaim resources associated with a libxml2 token struct.

    +
    tok:the simple mutex

    Function: xmlFreeRMutex

    void	xmlFreeRMutex			(xmlRMutexPtr tok)
    +

    xmlRFreeMutex() is used to reclaim resources associated with a reentrant mutex.

    +
    tok:the reentrant mutex

    Function: xmlGetGlobalState

    xmlGlobalStatePtr	xmlGetGlobalState	(void)
    +

    xmlGetGlobalState() is called to retrieve the global state for a thread.

    +
    Returns:the thread global state or NULL in case of error

    Function: xmlGetThreadId

    int	xmlGetThreadId			(void)
    +

    xmlGetThreadId() find the current thread ID number Note that this is likely to be broken on some platforms using pthreads as the specification doesn't mandate pthread_t to be an integer type

    +
    Returns:the current thread ID number

    Function: xmlInitThreads

    void	xmlInitThreads			(void)
    +

    xmlInitThreads() is used to to initialize all the thread related data of the libxml2 library.

    +

    Function: xmlIsMainThread

    int	xmlIsMainThread			(void)
    +

    xmlIsMainThread() check whether the current thread is the main thread.

    +
    Returns:1 if the current thread is the main thread, 0 otherwise

    Function: xmlLockLibrary

    void	xmlLockLibrary			(void)
    +

    xmlLockLibrary() is used to take out a re-entrant lock on the libxml2 library.

    +

    Function: xmlMutexLock

    void	xmlMutexLock			(xmlMutexPtr tok)
    +

    xmlMutexLock() is used to lock a libxml2 token.

    +
    tok:the simple mutex

    Function: xmlMutexUnlock

    void	xmlMutexUnlock			(xmlMutexPtr tok)
    +

    xmlMutexUnlock() is used to unlock a libxml2 token.

    +
    tok:the simple mutex

    Function: xmlNewMutex

    xmlMutexPtr	xmlNewMutex		(void)
    +

    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

    Function: xmlNewRMutex

    xmlRMutexPtr	xmlNewRMutex		(void)
    +

    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

    Function: xmlRMutexLock

    void	xmlRMutexLock			(xmlRMutexPtr tok)
    +

    xmlRMutexLock() is used to lock a libxml2 token_r.

    +
    tok:the reentrant mutex

    Function: xmlRMutexUnlock

    void	xmlRMutexUnlock			(xmlRMutexPtr tok)
    +

    xmlRMutexUnlock() is used to unlock a libxml2 token_r.

    +
    tok:the reentrant mutex

    Function: xmlUnlockLibrary

    void	xmlUnlockLibrary		(void)
    +

    xmlUnlockLibrary() is used to release a re-entrant lock on the libxml2 library.

    +

    Daniel Veillard

    diff --git a/doc/html/libxml-tree.html b/doc/html/libxml-tree.html new file mode 100644 index 0000000..d95872d --- /dev/null +++ b/doc/html/libxml-tree.html @@ -0,0 +1,991 @@ + + +Module tree from libxml2
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    Module tree from libxml2

    API Menu
    API Indexes
    Related links

    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

    Table of Contents

    #define BASE_BUFFER_SIZE
    #define LIBXML2_NEW_BUFFER
    #define XML_GET_CONTENT
    #define XML_GET_LINE
    #define XML_LOCAL_NAMESPACE
    #define XML_XML_ID
    #define XML_XML_NAMESPACE
    #define xmlChildrenNode
    #define xmlRootNode
    Structure xmlAttr
    struct _xmlAttr +
    Typedef xmlAttr * xmlAttrPtr
    +
    Structure xmlAttribute
    struct _xmlAttribute +
    Enum xmlAttributeDefault
    +
    Typedef xmlAttribute * xmlAttributePtr
    +
    Enum xmlAttributeType
    +
    Structure xmlBuf
    struct _xmlBuf +The content of this structure is not made public by the API. +
    Typedef xmlBuf * xmlBufPtr
    +
    Structure xmlBuffer
    struct _xmlBuffer +
    Enum xmlBufferAllocationScheme
    +
    Typedef xmlBuffer * xmlBufferPtr
    +
    Structure xmlDOMWrapCtxt
    struct _xmlDOMWrapCtxt +
    Typedef xmlDOMWrapCtxt * xmlDOMWrapCtxtPtr
    +
    Structure xmlDoc
    struct _xmlDoc +
    Enum xmlDocProperties
    +
    Typedef xmlDoc * xmlDocPtr
    +
    Structure xmlDtd
    struct _xmlDtd +
    Typedef xmlDtd * xmlDtdPtr
    +
    Structure xmlElement
    struct _xmlElement +
    Structure xmlElementContent
    struct _xmlElementContent +
    Enum xmlElementContentOccur
    +
    Typedef xmlElementContent * xmlElementContentPtr
    +
    Enum xmlElementContentType
    +
    Typedef xmlElement * xmlElementPtr
    +
    Enum xmlElementType
    +
    Enum xmlElementTypeVal
    +
    Structure xmlEntity
    struct _xmlEntity +
    Typedef xmlEntity * xmlEntityPtr
    +
    Structure xmlEnumeration
    struct _xmlEnumeration +
    Typedef xmlEnumeration * xmlEnumerationPtr
    +
    Structure xmlID
    struct _xmlID +
    Typedef xmlID * xmlIDPtr
    +
    Structure xmlNode
    struct _xmlNode +
    Typedef xmlNode * xmlNodePtr
    +
    Structure xmlNotation
    struct _xmlNotation +
    Typedef xmlNotation * xmlNotationPtr
    +
    Structure xmlNs
    struct _xmlNs +
    Typedef xmlNs * xmlNsPtr
    +
    Typedef xmlElementType xmlNsType
    +
    Structure xmlOutputBuffer
    struct _xmlOutputBuffer +
    Typedef xmlOutputBuffer * xmlOutputBufferPtr
    +
    Structure xmlParserCtxt
    struct _xmlParserCtxt +
    Typedef xmlParserCtxt * xmlParserCtxtPtr
    +
    Structure xmlParserInput
    struct _xmlParserInput +
    Structure xmlParserInputBuffer
    struct _xmlParserInputBuffer +
    Typedef xmlParserInputBuffer * xmlParserInputBufferPtr
    +
    Typedef xmlParserInput * xmlParserInputPtr
    +
    Structure xmlRef
    struct _xmlRef +
    Typedef xmlRef * xmlRefPtr
    +
    Structure xmlSAXHandler
    struct _xmlSAXHandler +
    Typedef xmlSAXHandler * xmlSAXHandlerPtr
    +
    Structure xmlSAXLocator
    struct _xmlSAXLocator +
    Typedef xmlSAXLocator * xmlSAXLocatorPtr
    +
    xmlNodePtr	xmlAddChild		(xmlNodePtr parent, 
    xmlNodePtr cur)
    +
    xmlNodePtr	xmlAddChildList		(xmlNodePtr parent, 
    xmlNodePtr cur)
    +
    xmlNodePtr	xmlAddNextSibling	(xmlNodePtr cur, 
    xmlNodePtr elem)
    +
    xmlNodePtr	xmlAddPrevSibling	(xmlNodePtr cur, 
    xmlNodePtr elem)
    +
    xmlNodePtr	xmlAddSibling		(xmlNodePtr cur, 
    xmlNodePtr elem)
    +
    void	xmlAttrSerializeTxtContent	(xmlBufferPtr buf, 
    xmlDocPtr doc,
    xmlAttrPtr attr,
    const xmlChar * string)
    +
    xmlChar *	xmlBufContent		(const xmlBuf * buf)
    +
    xmlChar *	xmlBufEnd		(xmlBufPtr buf)
    +
    int	xmlBufGetNodeContent		(xmlBufPtr buf, 
    const xmlNode * cur)
    +
    size_t	xmlBufNodeDump			(xmlBufPtr buf, 
    xmlDocPtr doc,
    xmlNodePtr cur,
    int level,
    int format)
    +
    size_t	xmlBufShrink			(xmlBufPtr buf, 
    size_t len)
    +
    size_t	xmlBufUse			(const xmlBufPtr buf)
    +
    int	xmlBufferAdd			(xmlBufferPtr buf, 
    const xmlChar * str,
    int len)
    +
    int	xmlBufferAddHead		(xmlBufferPtr buf, 
    const xmlChar * str,
    int len)
    +
    int	xmlBufferCCat			(xmlBufferPtr buf, 
    const char * str)
    +
    int	xmlBufferCat			(xmlBufferPtr buf, 
    const xmlChar * str)
    +
    const xmlChar *	xmlBufferContent	(const xmlBuffer * buf)
    +
    xmlBufferPtr	xmlBufferCreate		(void)
    +
    xmlBufferPtr	xmlBufferCreateSize	(size_t size)
    +
    xmlBufferPtr	xmlBufferCreateStatic	(void * mem, 
    size_t size)
    +
    xmlChar *	xmlBufferDetach		(xmlBufferPtr buf)
    +
    int	xmlBufferDump			(FILE * file, 
    xmlBufferPtr buf)
    +
    void	xmlBufferEmpty			(xmlBufferPtr buf)
    +
    void	xmlBufferFree			(xmlBufferPtr buf)
    +
    int	xmlBufferGrow			(xmlBufferPtr buf, 
    unsigned int len)
    +
    int	xmlBufferLength			(const xmlBuffer * buf)
    +
    int	xmlBufferResize			(xmlBufferPtr buf, 
    unsigned int size)
    +
    void	xmlBufferSetAllocationScheme	(xmlBufferPtr buf, 
    xmlBufferAllocationScheme scheme)
    +
    int	xmlBufferShrink			(xmlBufferPtr buf, 
    unsigned int len)
    +
    void	xmlBufferWriteCHAR		(xmlBufferPtr buf, 
    const xmlChar * string)
    +
    void	xmlBufferWriteChar		(xmlBufferPtr buf, 
    const char * string)
    +
    void	xmlBufferWriteQuotedString	(xmlBufferPtr buf, 
    const xmlChar * string)
    +
    xmlChar *	xmlBuildQName		(const xmlChar * ncname, 
    const xmlChar * prefix,
    xmlChar * memory,
    int len)
    +
    unsigned long	xmlChildElementCount	(xmlNodePtr parent)
    +
    xmlDocPtr	xmlCopyDoc		(xmlDocPtr doc, 
    int recursive)
    +
    xmlDtdPtr	xmlCopyDtd		(xmlDtdPtr dtd)
    +
    xmlNsPtr	xmlCopyNamespace	(xmlNsPtr cur)
    +
    xmlNsPtr	xmlCopyNamespaceList	(xmlNsPtr cur)
    +
    xmlNodePtr	xmlCopyNode		(xmlNodePtr node, 
    int extended)
    +
    xmlNodePtr	xmlCopyNodeList		(xmlNodePtr node)
    +
    xmlAttrPtr	xmlCopyProp		(xmlNodePtr target, 
    xmlAttrPtr cur)
    +
    xmlAttrPtr	xmlCopyPropList		(xmlNodePtr target, 
    xmlAttrPtr cur)
    +
    xmlDtdPtr	xmlCreateIntSubset	(xmlDocPtr doc, 
    const xmlChar * name,
    const xmlChar * ExternalID,
    const xmlChar * SystemID)
    +
    Function type: xmlDOMWrapAcquireNsFunction
    +xmlNsPtr	xmlDOMWrapAcquireNsFunction	(xmlDOMWrapCtxtPtr ctxt, 
    xmlNodePtr node,
    const xmlChar * nsName,
    const xmlChar * nsPrefix) +
    +
    int	xmlDOMWrapAdoptNode		(xmlDOMWrapCtxtPtr ctxt, 
    xmlDocPtr sourceDoc,
    xmlNodePtr node,
    xmlDocPtr destDoc,
    xmlNodePtr destParent,
    int options)
    +
    int	xmlDOMWrapCloneNode		(xmlDOMWrapCtxtPtr ctxt, 
    xmlDocPtr sourceDoc,
    xmlNodePtr node,
    xmlNodePtr * resNode,
    xmlDocPtr destDoc,
    xmlNodePtr destParent,
    int deep,
    int options)
    +
    void	xmlDOMWrapFreeCtxt		(xmlDOMWrapCtxtPtr ctxt)
    +
    xmlDOMWrapCtxtPtr	xmlDOMWrapNewCtxt	(void)
    +
    int	xmlDOMWrapReconcileNamespaces	(xmlDOMWrapCtxtPtr ctxt, 
    xmlNodePtr elem,
    int options)
    +
    int	xmlDOMWrapRemoveNode		(xmlDOMWrapCtxtPtr ctxt, 
    xmlDocPtr doc,
    xmlNodePtr node,
    int options)
    +
    xmlNodePtr	xmlDocCopyNode		(xmlNodePtr node, 
    xmlDocPtr doc,
    int extended)
    +
    xmlNodePtr	xmlDocCopyNodeList	(xmlDocPtr doc, 
    xmlNodePtr node)
    +
    int	xmlDocDump			(FILE * f, 
    xmlDocPtr cur)
    +
    void	xmlDocDumpFormatMemory		(xmlDocPtr cur, 
    xmlChar ** mem,
    int * size,
    int format)
    +
    void	xmlDocDumpFormatMemoryEnc	(xmlDocPtr out_doc, 
    xmlChar ** doc_txt_ptr,
    int * doc_txt_len,
    const char * txt_encoding,
    int format)
    +
    void	xmlDocDumpMemory		(xmlDocPtr cur, 
    xmlChar ** mem,
    int * size)
    +
    void	xmlDocDumpMemoryEnc		(xmlDocPtr out_doc, 
    xmlChar ** doc_txt_ptr,
    int * doc_txt_len,
    const char * txt_encoding)
    +
    int	xmlDocFormatDump		(FILE * f, 
    xmlDocPtr cur,
    int format)
    +
    xmlNodePtr	xmlDocGetRootElement	(const xmlDoc * doc)
    +
    xmlNodePtr	xmlDocSetRootElement	(xmlDocPtr doc, 
    xmlNodePtr root)
    +
    void	xmlElemDump			(FILE * f, 
    xmlDocPtr doc,
    xmlNodePtr cur)
    +
    xmlNodePtr	xmlFirstElementChild	(xmlNodePtr parent)
    +
    void	xmlFreeDoc			(xmlDocPtr cur)
    +
    void	xmlFreeDtd			(xmlDtdPtr cur)
    +
    void	xmlFreeNode			(xmlNodePtr cur)
    +
    void	xmlFreeNodeList			(xmlNodePtr cur)
    +
    void	xmlFreeNs			(xmlNsPtr cur)
    +
    void	xmlFreeNsList			(xmlNsPtr cur)
    +
    void	xmlFreeProp			(xmlAttrPtr cur)
    +
    void	xmlFreePropList			(xmlAttrPtr cur)
    +
    xmlBufferAllocationScheme	xmlGetBufferAllocationScheme	(void)
    +
    int	xmlGetCompressMode		(void)
    +
    int	xmlGetDocCompressMode		(const xmlDoc * doc)
    +
    xmlDtdPtr	xmlGetIntSubset		(const xmlDoc * doc)
    +
    xmlNodePtr	xmlGetLastChild		(const xmlNode * parent)
    +
    long	xmlGetLineNo			(const xmlNode * node)
    +
    xmlChar *	xmlGetNoNsProp		(const xmlNode * node, 
    const xmlChar * name)
    +
    xmlChar *	xmlGetNodePath		(const xmlNode * node)
    +
    xmlNsPtr *	xmlGetNsList		(const xmlDoc * doc, 
    const xmlNode * node)
    +
    xmlChar *	xmlGetNsProp		(const xmlNode * node, 
    const xmlChar * name,
    const xmlChar * nameSpace)
    +
    xmlChar *	xmlGetProp		(const xmlNode * node, 
    const xmlChar * name)
    +
    xmlAttrPtr	xmlHasNsProp		(const xmlNode * node, 
    const xmlChar * name,
    const xmlChar * nameSpace)
    +
    xmlAttrPtr	xmlHasProp		(const xmlNode * node, 
    const xmlChar * name)
    +
    int	xmlIsBlankNode			(const xmlNode * node)
    +
    int	xmlIsXHTML			(const xmlChar * systemID, 
    const xmlChar * publicID)
    +
    xmlNodePtr	xmlLastElementChild	(xmlNodePtr parent)
    +
    xmlNodePtr	xmlNewCDataBlock	(xmlDocPtr doc, 
    const xmlChar * content,
    int len)
    +
    xmlNodePtr	xmlNewCharRef		(xmlDocPtr doc, 
    const xmlChar * name)
    +
    xmlNodePtr	xmlNewChild		(xmlNodePtr parent, 
    xmlNsPtr ns,
    const xmlChar * name,
    const xmlChar * content)
    +
    xmlNodePtr	xmlNewComment		(const xmlChar * content)
    +
    xmlDocPtr	xmlNewDoc		(const xmlChar * version)
    +
    xmlNodePtr	xmlNewDocComment	(xmlDocPtr doc, 
    const xmlChar * content)
    +
    xmlNodePtr	xmlNewDocFragment	(xmlDocPtr doc)
    +
    xmlNodePtr	xmlNewDocNode		(xmlDocPtr doc, 
    xmlNsPtr ns,
    const xmlChar * name,
    const xmlChar * content)
    +
    xmlNodePtr	xmlNewDocNodeEatName	(xmlDocPtr doc, 
    xmlNsPtr ns,
    xmlChar * name,
    const xmlChar * content)
    +
    xmlNodePtr	xmlNewDocPI		(xmlDocPtr doc, 
    const xmlChar * name,
    const xmlChar * content)
    +
    xmlAttrPtr	xmlNewDocProp		(xmlDocPtr doc, 
    const xmlChar * name,
    const xmlChar * value)
    +
    xmlNodePtr	xmlNewDocRawNode	(xmlDocPtr doc, 
    xmlNsPtr ns,
    const xmlChar * name,
    const xmlChar * content)
    +
    xmlNodePtr	xmlNewDocText		(const xmlDoc * doc, 
    const xmlChar * content)
    +
    xmlNodePtr	xmlNewDocTextLen	(xmlDocPtr doc, 
    const xmlChar * content,
    int len)
    +
    xmlDtdPtr	xmlNewDtd		(xmlDocPtr doc, 
    const xmlChar * name,
    const xmlChar * ExternalID,
    const xmlChar * SystemID)
    +
    xmlNsPtr	xmlNewGlobalNs		(xmlDocPtr doc, 
    const xmlChar * href,
    const xmlChar * prefix)
    +
    xmlNodePtr	xmlNewNode		(xmlNsPtr ns, 
    const xmlChar * name)
    +
    xmlNodePtr	xmlNewNodeEatName	(xmlNsPtr ns, 
    xmlChar * name)
    +
    xmlNsPtr	xmlNewNs		(xmlNodePtr node, 
    const xmlChar * href,
    const xmlChar * prefix)
    +
    xmlAttrPtr	xmlNewNsProp		(xmlNodePtr node, 
    xmlNsPtr ns,
    const xmlChar * name,
    const xmlChar * value)
    +
    xmlAttrPtr	xmlNewNsPropEatName	(xmlNodePtr node, 
    xmlNsPtr ns,
    xmlChar * name,
    const xmlChar * value)
    +
    xmlNodePtr	xmlNewPI		(const xmlChar * name, 
    const xmlChar * content)
    +
    xmlAttrPtr	xmlNewProp		(xmlNodePtr node, 
    const xmlChar * name,
    const xmlChar * value)
    +
    xmlNodePtr	xmlNewReference		(const xmlDoc * doc, 
    const xmlChar * name)
    +
    xmlNodePtr	xmlNewText		(const xmlChar * content)
    +
    xmlNodePtr	xmlNewTextChild		(xmlNodePtr parent, 
    xmlNsPtr ns,
    const xmlChar * name,
    const xmlChar * content)
    +
    xmlNodePtr	xmlNewTextLen		(const xmlChar * content, 
    int len)
    +
    xmlNodePtr	xmlNextElementSibling	(xmlNodePtr node)
    +
    void	xmlNodeAddContent		(xmlNodePtr cur, 
    const xmlChar * content)
    +
    void	xmlNodeAddContentLen		(xmlNodePtr cur, 
    const xmlChar * content,
    int len)
    +
    int	xmlNodeBufGetContent		(xmlBufferPtr buffer, 
    const xmlNode * cur)
    +
    int	xmlNodeDump			(xmlBufferPtr buf, 
    xmlDocPtr doc,
    xmlNodePtr cur,
    int level,
    int format)
    +
    void	xmlNodeDumpOutput		(xmlOutputBufferPtr buf, 
    xmlDocPtr doc,
    xmlNodePtr cur,
    int level,
    int format,
    const char * encoding)
    +
    xmlChar *	xmlNodeGetBase		(const xmlDoc * doc, 
    const xmlNode * cur)
    +
    xmlChar *	xmlNodeGetContent	(const xmlNode * cur)
    +
    xmlChar *	xmlNodeGetLang		(const xmlNode * cur)
    +
    int	xmlNodeGetSpacePreserve		(const xmlNode * cur)
    +
    int	xmlNodeIsText			(const xmlNode * node)
    +
    xmlChar *	xmlNodeListGetRawString	(const xmlDoc * doc, 
    const xmlNode * list,
    int inLine)
    +
    xmlChar *	xmlNodeListGetString	(xmlDocPtr doc, 
    const xmlNode * list,
    int inLine)
    +
    void	xmlNodeSetBase			(xmlNodePtr cur, 
    const xmlChar * uri)
    +
    void	xmlNodeSetContent		(xmlNodePtr cur, 
    const xmlChar * content)
    +
    void	xmlNodeSetContentLen		(xmlNodePtr cur, 
    const xmlChar * content,
    int len)
    +
    void	xmlNodeSetLang			(xmlNodePtr cur, 
    const xmlChar * lang)
    +
    void	xmlNodeSetName			(xmlNodePtr cur, 
    const xmlChar * name)
    +
    void	xmlNodeSetSpacePreserve		(xmlNodePtr cur, 
    int val)
    +
    xmlNodePtr	xmlPreviousElementSibling	(xmlNodePtr node)
    +
    int	xmlReconciliateNs		(xmlDocPtr doc, 
    xmlNodePtr tree)
    +
    int	xmlRemoveProp			(xmlAttrPtr cur)
    +
    xmlNodePtr	xmlReplaceNode		(xmlNodePtr old, 
    xmlNodePtr cur)
    +
    int	xmlSaveFile			(const char * filename, 
    xmlDocPtr cur)
    +
    int	xmlSaveFileEnc			(const char * filename, 
    xmlDocPtr cur,
    const char * encoding)
    +
    int	xmlSaveFileTo			(xmlOutputBufferPtr buf, 
    xmlDocPtr cur,
    const char * encoding)
    +
    int	xmlSaveFormatFile		(const char * filename, 
    xmlDocPtr cur,
    int format)
    +
    int	xmlSaveFormatFileEnc		(const char * filename, 
    xmlDocPtr cur,
    const char * encoding,
    int format)
    +
    int	xmlSaveFormatFileTo		(xmlOutputBufferPtr buf, 
    xmlDocPtr cur,
    const char * encoding,
    int format)
    +
    xmlNsPtr	xmlSearchNs		(xmlDocPtr doc, 
    xmlNodePtr node,
    const xmlChar * nameSpace)
    +
    xmlNsPtr	xmlSearchNsByHref	(xmlDocPtr doc, 
    xmlNodePtr node,
    const xmlChar * href)
    +
    void	xmlSetBufferAllocationScheme	(xmlBufferAllocationScheme scheme)
    +
    void	xmlSetCompressMode		(int mode)
    +
    void	xmlSetDocCompressMode		(xmlDocPtr doc, 
    int mode)
    +
    void	xmlSetListDoc			(xmlNodePtr list, 
    xmlDocPtr doc)
    +
    void	xmlSetNs			(xmlNodePtr node, 
    xmlNsPtr ns)
    +
    xmlAttrPtr	xmlSetNsProp		(xmlNodePtr node, 
    xmlNsPtr ns,
    const xmlChar * name,
    const xmlChar * value)
    +
    xmlAttrPtr	xmlSetProp		(xmlNodePtr node, 
    const xmlChar * name,
    const xmlChar * value)
    +
    void	xmlSetTreeDoc			(xmlNodePtr tree, 
    xmlDocPtr doc)
    +
    xmlChar *	xmlSplitQName2		(const xmlChar * name, 
    xmlChar ** prefix)
    +
    const xmlChar *	xmlSplitQName3		(const xmlChar * name, 
    int * len)
    +
    xmlNodePtr	xmlStringGetNodeList	(const xmlDoc * doc, 
    const xmlChar * value)
    +
    xmlNodePtr	xmlStringLenGetNodeList	(const xmlDoc * doc, 
    const xmlChar * value,
    int len)
    +
    int	xmlTextConcat			(xmlNodePtr node, 
    const xmlChar * content,
    int len)
    +
    xmlNodePtr	xmlTextMerge		(xmlNodePtr first, 
    xmlNodePtr second)
    +
    void	xmlUnlinkNode			(xmlNodePtr cur)
    +
    int	xmlUnsetNsProp			(xmlNodePtr node, 
    xmlNsPtr ns,
    const xmlChar * name)
    +
    int	xmlUnsetProp			(xmlNodePtr node, 
    const xmlChar * name)
    +
    int	xmlValidateNCName		(const xmlChar * value, 
    int space)
    +
    int	xmlValidateNMToken		(const xmlChar * value, 
    int space)
    +
    int	xmlValidateName			(const xmlChar * value, 
    int space)
    +
    int	xmlValidateQName		(const xmlChar * value, 
    int space)
    +

    Description

    +

    Macro: BASE_BUFFER_SIZE

    #define BASE_BUFFER_SIZE

    default buffer size 4000.

    +

    Macro: LIBXML2_NEW_BUFFER

    #define LIBXML2_NEW_BUFFER

    Macro used to express that the API use the new buffers for xmlParserInputBuffer and xmlOutputBuffer. The change was introduced in 2.9.0.

    +

    Macro: XML_GET_CONTENT

    #define XML_GET_CONTENT

    Macro to extract the content pointer of a node.

    +

    Macro: XML_GET_LINE

    #define XML_GET_LINE

    Macro to extract the line number of an element node.

    +

    Macro: XML_LOCAL_NAMESPACE

    #define XML_LOCAL_NAMESPACE

    A namespace declaration node.

    +

    Macro: XML_XML_ID

    #define XML_XML_ID

    This is the name for the special xml:id attribute

    +

    Macro: XML_XML_NAMESPACE

    #define XML_XML_NAMESPACE

    This is the namespace for the special xml: prefix predefined in the XML Namespace specification.

    +

    Macro: xmlChildrenNode

    #define xmlChildrenNode

    Macro for compatibility naming layer with libxml1. Maps to "children."

    +

    Macro: xmlRootNode

    #define xmlRootNode

    Macro for compatibility naming layer with libxml1. Maps to "children".

    +

    Structure xmlAttr

    Structure xmlAttr
    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 +}

    Structure xmlAttribute

    Structure xmlAttribute
    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 +}

    Enum xmlAttributeDefault

    Enum xmlAttributeDefault {
    +    XML_ATTRIBUTE_NONE = 1
    +    XML_ATTRIBUTE_REQUIRED = 2
    +    XML_ATTRIBUTE_IMPLIED = 3
    +    XML_ATTRIBUTE_FIXED = 4
    +}
    +

    Enum xmlAttributeType

    Enum xmlAttributeType {
    +    XML_ATTRIBUTE_CDATA = 1
    +    XML_ATTRIBUTE_ID = 2
    +    XML_ATTRIBUTE_IDREF = 3
    +    XML_ATTRIBUTE_IDREFS = 4
    +    XML_ATTRIBUTE_ENTITY = 5
    +    XML_ATTRIBUTE_ENTITIES = 6
    +    XML_ATTRIBUTE_NMTOKEN = 7
    +    XML_ATTRIBUTE_NMTOKENS = 8
    +    XML_ATTRIBUTE_ENUMERATION = 9
    +    XML_ATTRIBUTE_NOTATION = 10
    +}
    +

    Structure xmlBuf

    Structure xmlBuf
    struct _xmlBuf { +The content of this structure is not made public by the API. +}
    + A pointer to a buffer structure, the actual structure internals are not public +

    Structure xmlBuffer

    Structure xmlBuffer
    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 + xmlChar * contentIO : in IO mode we may have a different base +}

    Enum xmlBufferAllocationScheme

    Enum xmlBufferAllocationScheme {
    +    XML_BUFFER_ALLOC_DOUBLEIT = 1 : double each time one need to grow
    +    XML_BUFFER_ALLOC_EXACT = 2 : grow only to the minimal size
    +    XML_BUFFER_ALLOC_IMMUTABLE = 3 : immutable buffer
    +    XML_BUFFER_ALLOC_IO = 4 : special allocation scheme used for I/O
    +    XML_BUFFER_ALLOC_HYBRID = 5 : exact up to a threshold, and doubleit thereafter
    +    XML_BUFFER_ALLOC_BOUNDED = 6 : limit the upper size of the buffer
    +}
    +

    Structure xmlDOMWrapCtxt

    Structure xmlDOMWrapCtxt
    struct _xmlDOMWrapCtxt { + void * _private : * The type of this context, just in case + int type : * Internal namespace map used for variou + void * namespaceMap : * Use this one to acquire an xmlNsPtr in + xmlDOMWrapAcquireNsFunction getNsForNodeFunc +}

    Structure xmlDoc

    Structure xmlDoc
    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 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 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 actua + struct _xmlDict * dict : dict used to allocate names or NULL + void * psvi : for type/PSVI informations + int parseFlags : set of xmlParserOption used to parse th + int properties : set of xmlDocProperties for this docume +}

    Enum xmlDocProperties

    Enum xmlDocProperties {
    +    XML_DOC_WELLFORMED = 1 : document is XML well formed
    +    XML_DOC_NSVALID = 2 : document is Namespace valid
    +    XML_DOC_OLD10 = 4 : parsed with old XML-1.0 parser
    +    XML_DOC_DTDVALID = 8 : DTD validation was successful
    +    XML_DOC_XINCLUDE = 16 : XInclude substitution was done
    +    XML_DOC_USERBUILT = 32 : Document was built using the API and not by parsing an instance
    +    XML_DOC_INTERNAL = 64 : built for internal processing
    +    XML_DOC_HTML = 128 : parsed or built HTML document
    +}
    +

    Structure xmlDtd

    Structure xmlDtd
    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 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 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 +}

    Structure xmlElement

    Structure xmlElement
    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 + xmlRegexpPtr contModel : the validating regexp + void * contModel +}

    Structure xmlElementContent

    Structure xmlElementContent
    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 +}

    Enum xmlElementContentOccur

    Enum xmlElementContentOccur {
    +    XML_ELEMENT_CONTENT_ONCE = 1
    +    XML_ELEMENT_CONTENT_OPT = 2
    +    XML_ELEMENT_CONTENT_MULT = 3
    +    XML_ELEMENT_CONTENT_PLUS = 4
    +}
    +

    Enum xmlElementContentType

    Enum xmlElementContentType {
    +    XML_ELEMENT_CONTENT_PCDATA = 1
    +    XML_ELEMENT_CONTENT_ELEMENT = 2
    +    XML_ELEMENT_CONTENT_SEQ = 3
    +    XML_ELEMENT_CONTENT_OR = 4
    +}
    +

    Enum xmlElementType

    Enum xmlElementType {
    +    XML_ELEMENT_NODE = 1
    +    XML_ATTRIBUTE_NODE = 2
    +    XML_TEXT_NODE = 3
    +    XML_CDATA_SECTION_NODE = 4
    +    XML_ENTITY_REF_NODE = 5
    +    XML_ENTITY_NODE = 6
    +    XML_PI_NODE = 7
    +    XML_COMMENT_NODE = 8
    +    XML_DOCUMENT_NODE = 9
    +    XML_DOCUMENT_TYPE_NODE = 10
    +    XML_DOCUMENT_FRAG_NODE = 11
    +    XML_NOTATION_NODE = 12
    +    XML_HTML_DOCUMENT_NODE = 13
    +    XML_DTD_NODE = 14
    +    XML_ELEMENT_DECL = 15
    +    XML_ATTRIBUTE_DECL = 16
    +    XML_ENTITY_DECL = 17
    +    XML_NAMESPACE_DECL = 18
    +    XML_XINCLUDE_START = 19
    +    XML_XINCLUDE_END = 20
    +    XML_DOCB_DOCUMENT_NODE = 21
    +}
    +

    Enum xmlElementTypeVal

    Enum xmlElementTypeVal {
    +    XML_ELEMENT_TYPE_UNDEFINED = 0
    +    XML_ELEMENT_TYPE_EMPTY = 1
    +    XML_ELEMENT_TYPE_ANY = 2
    +    XML_ELEMENT_TYPE_MIXED = 3
    +    XML_ELEMENT_TYPE_ELEMENT = 4
    +}
    +

    Structure xmlEntity

    Structure xmlEntity
    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 + int checked : was the entity content checked this is +}

    Structure xmlEnumeration

    Structure xmlEnumeration
    struct _xmlEnumeration { + struct _xmlEnumeration * next : next one + const xmlChar * name : Enumeration name +}

    Structure xmlID

    Structure xmlID
    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 availabl + struct _xmlDoc * doc : The document holding the ID +}

    Structure xmlNode

    Structure xmlNode
    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 p + 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 +}

    Structure xmlNotation

    Structure xmlNotation
    struct _xmlNotation { + const xmlChar * name : Notation name + const xmlChar * PublicID : Public identifier, if any + const xmlChar * SystemID : System identifier, if any +}

    Structure xmlNs

    Structure xmlNs
    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 + struct _xmlDoc * context : normally an xmlDoc +}

    Structure xmlOutputBuffer

    Structure xmlOutputBuffer
    struct _xmlOutputBuffer { + void * context + xmlOutputWriteCallback writecallback + xmlOutputCloseCallback closecallback + xmlCharEncodingHandlerPtr encoder : I18N conversions to UTF-8 + xmlBufPtr buffer : Local buffer encoded in UTF-8 or ISOLat + xmlBufPtr conv : if encoder != NULL buffer for output + int written : total number of byte written + int error +}

    Structure xmlParserCtxt

    Structure xmlParserCtxt
    struct _xmlParserCtxt { + struct _xmlSAXHandler * sax : The SAX handler + void * userData : For SAX interface only, used by DOM bui + 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 * 3 is H + 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 onl + 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 + 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 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 + xmlDictPtr dict : dictionary for the parser + const xmlChar * * atts : array for the attributes callbacks + int maxatts : the size of the array + int docdict : * pre-interned strings * + const xmlChar * str_xml + const xmlChar * str_xmlns + const xmlChar * 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 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 : * Those fields are needed only for tream + 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 : * the complete error informations for th + xmlError lastError + xmlParserMode parseMode : the parser mode + unsigned long nbentities : number of entities references + unsigned long sizeentities : size of parsed entities for use by HTML + xmlParserNodeInfo * nodeInfo : Current NodeInfo + int nodeInfoNr : Depth of the parsing stack + int nodeInfoMax : Max depth of the parsing stack + xmlParserNodeInfo * nodeInfoTab : array of nodeInfos + int input_id : we need to label inputs + unsigned long sizeentcopy : volume of entity copy +}

    Structure xmlParserInput

    Structure xmlParserInput
    struct _xmlParserInput { + 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 : * NOTE: consumed is only tested for equa + 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 +}

    Structure xmlParserInputBuffer

    Structure xmlParserInputBuffer
    struct _xmlParserInputBuffer { + void * context + xmlInputReadCallback readcallback + xmlInputCloseCallback closecallback + xmlCharEncodingHandlerPtr encoder : I18N conversions to UTF-8 + xmlBufPtr buffer : Local buffer encoded in UTF-8 + xmlBufPtr raw : if encoder != NULL buffer for raw input + int compressed : -1=unknown, 0=not compressed, 1=compres + int error + unsigned long rawconsumed : amount consumed from raw +}

    Structure xmlRef

    Structure xmlRef
    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 availabl +}

    Structure xmlSAXHandler

    Structure xmlSAXHandler
    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 ava + void * _private + startElementNsSAX2Func startElementNs + endElementNsSAX2Func endElementNs + xmlStructuredErrorFunc serror +}

    Structure xmlSAXLocator

    Structure xmlSAXLocator
    struct _xmlSAXLocator { + const xmlChar *(*getPublicId) getPublicId + const xmlChar *(*getSystemId) getSystemId + int(*getLineNumber) getLineNumber + int(*getColumnNumber) getColumnNumber +}

    Function: xmlAddChild

    xmlNodePtr	xmlAddChild		(xmlNodePtr parent, 
    xmlNodePtr cur)
    +

    Add a new node to @parent, at the end of the child (or property) list merging adjacent TEXT nodes (in which case @cur is freed) If the new node is ATTRIBUTE, it is added into properties instead of children. If there is an attribute with equal name, it is first destroyed.

    +
    parent:the parent node
    cur:the child node
    Returns:the child or NULL in case of error.

    Function: xmlAddChildList

    xmlNodePtr	xmlAddChildList		(xmlNodePtr parent, 
    xmlNodePtr cur)
    +

    Add a list of node at the end of the child list of the parent merging adjacent TEXT nodes (@cur may be freed)

    +
    parent:the parent node
    cur:the first node in the list
    Returns:the last child or NULL in case of error.

    Function: xmlAddNextSibling

    xmlNodePtr	xmlAddNextSibling	(xmlNodePtr cur, 
    xmlNodePtr elem)
    +

    Add a new node @elem as the next sibling of @cur If the new node was already inserted in a document it is first unlinked from its existing context. As a result of text merging @elem may be freed. If the new node is ATTRIBUTE, it is added into properties instead of children. If there is an attribute with equal name, it is first destroyed.

    +
    cur:the child node
    elem:the new node
    Returns:the new node or NULL in case of error.

    Function: xmlAddPrevSibling

    xmlNodePtr	xmlAddPrevSibling	(xmlNodePtr cur, 
    xmlNodePtr elem)
    +

    Add a new node @elem as the previous sibling of @cur merging adjacent TEXT nodes (@elem may be freed) If the new node was already inserted in a document it is first unlinked from its existing context. If the new node is ATTRIBUTE, it is added into properties instead of children. If there is an attribute with equal name, it is first destroyed.

    +
    cur:the child node
    elem:the new node
    Returns:the new node or NULL in case of error.

    Function: xmlAddSibling

    xmlNodePtr	xmlAddSibling		(xmlNodePtr cur, 
    xmlNodePtr elem)
    +

    Add a new element @elem to the list of siblings of @cur merging adjacent TEXT nodes (@elem may be freed) If the new element was already inserted in a document it is first unlinked from its existing context.

    +
    cur:the child node
    elem:the new node
    Returns:the new element or NULL in case of error.

    Function: xmlAttrSerializeTxtContent

    void	xmlAttrSerializeTxtContent	(xmlBufferPtr buf, 
    xmlDocPtr doc,
    xmlAttrPtr attr,
    const xmlChar * string)
    +

    Serialize text attribute values to an xml simple buffer

    +
    buf:the XML buffer output
    doc:the document
    attr:the attribute node
    string:the text content

    Function: xmlBufContent

    xmlChar *	xmlBufContent		(const xmlBuf * buf)
    +

    Function to extract the content of a buffer

    +
    buf:the buffer
    Returns:the internal content

    Function: xmlBufEnd

    xmlChar *	xmlBufEnd		(xmlBufPtr buf)
    +

    Function to extract the end of the content of a buffer

    +
    buf:the buffer
    Returns:the end of the internal content or NULL in case of error

    Function: xmlBufGetNodeContent

    int	xmlBufGetNodeContent		(xmlBufPtr buf, 
    const xmlNode * cur)
    +

    Read the value of a node @cur, this can be either the text carried directly by this node if it's a TEXT node or the aggregate string of the values carried by this node child's (TEXT and ENTITY_REF). Entity references are substituted. Fills up the buffer @buf with this value

    +
    buf:a buffer xmlBufPtr
    cur:the node being read
    Returns:0 in case of success and -1 in case of error.

    Function: xmlBufNodeDump

    size_t	xmlBufNodeDump			(xmlBufPtr buf, 
    xmlDocPtr doc,
    xmlNodePtr cur,
    int level,
    int format)
    +

    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

    +
    buf:the XML buffer output
    doc:the document
    cur:the current node
    level:the imbrication level for indenting
    format:is formatting allowed
    Returns:the number of bytes written to the buffer, in case of error 0 is returned or @buf stores the error

    Function: xmlBufShrink

    size_t	xmlBufShrink			(xmlBufPtr buf, 
    size_t len)
    +

    Remove the beginning of an XML buffer. NOTE that this routine behaviour differs from xmlBufferShrink() as it will return 0 on error instead of -1 due to size_t being used as the return type.

    +
    buf:the buffer to dump
    len:the number of xmlChar to remove
    Returns:the number of byte removed or 0 in case of failure

    Function: xmlBufUse

    size_t	xmlBufUse			(const xmlBufPtr buf)
    +

    Function to get the length of a buffer

    +
    buf:the buffer
    Returns:the length of data in the internal content

    Function: xmlBufferAdd

    int	xmlBufferAdd			(xmlBufferPtr buf, 
    const xmlChar * str,
    int len)
    +

    Add a string range to an XML buffer. if len == -1, the length of str is recomputed.

    +
    buf:the buffer to dump
    str:the #xmlChar string
    len:the number of #xmlChar to add
    Returns:0 successful, a positive error code number otherwise and -1 in case of internal or API error.

    Function: xmlBufferAddHead

    int	xmlBufferAddHead		(xmlBufferPtr buf, 
    const xmlChar * str,
    int len)
    +

    Add a string range to the beginning of an XML buffer. if len == -1, the length of @str is recomputed.

    +
    buf:the buffer
    str:the #xmlChar string
    len:the number of #xmlChar to add
    Returns:0 successful, a positive error code number otherwise and -1 in case of internal or API error.

    Function: xmlBufferCCat

    int	xmlBufferCCat			(xmlBufferPtr buf, 
    const char * str)
    +

    Append a zero terminated C string to an XML buffer.

    +
    buf:the buffer to dump
    str:the C char string
    Returns:0 successful, a positive error code number otherwise and -1 in case of internal or API error.

    Function: xmlBufferCat

    int	xmlBufferCat			(xmlBufferPtr buf, 
    const xmlChar * str)
    +

    Append a zero terminated string to an XML buffer.

    +
    buf:the buffer to add to
    str:the #xmlChar string
    Returns:0 successful, a positive error code number otherwise and -1 in case of internal or API error.

    Function: xmlBufferContent

    const xmlChar *	xmlBufferContent	(const xmlBuffer * buf)
    +

    Function to extract the content of a buffer

    +
    buf:the buffer
    Returns:the internal content

    Function: xmlBufferCreate

    xmlBufferPtr	xmlBufferCreate		(void)
    +

    routine to create an XML buffer.

    +
    Returns:the new structure.

    Function: xmlBufferCreateSize

    xmlBufferPtr	xmlBufferCreateSize	(size_t size)
    +

    routine to create an XML buffer.

    +
    size:initial size of buffer
    Returns:the new structure.

    Function: xmlBufferCreateStatic

    xmlBufferPtr	xmlBufferCreateStatic	(void * mem, 
    size_t size)
    +

    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.

    +
    mem:the memory area
    size:the size in byte
    Returns:the new structure.

    Function: xmlBufferDetach

    xmlChar *	xmlBufferDetach		(xmlBufferPtr buf)
    +

    Remove the string contained in a buffer and gie it back to the caller. The buffer is reset to an empty content. This doesn't work with immutable buffers as they can't be reset.

    +
    buf:the buffer
    Returns:the previous string contained by the buffer.

    Function: xmlBufferDump

    int	xmlBufferDump			(FILE * file, 
    xmlBufferPtr buf)
    +

    Dumps an XML buffer to a FILE *.

    +
    file:the file output
    buf:the buffer to dump
    Returns:the number of #xmlChar written

    Function: xmlBufferEmpty

    void	xmlBufferEmpty			(xmlBufferPtr buf)
    +

    empty a buffer.

    +
    buf:the buffer

    Function: xmlBufferFree

    void	xmlBufferFree			(xmlBufferPtr buf)
    +

    Frees an XML buffer. It frees both the content and the structure which encapsulate it.

    +
    buf:the buffer to free

    Function: xmlBufferGrow

    int	xmlBufferGrow			(xmlBufferPtr buf, 
    unsigned int len)
    +

    Grow the available space of an XML buffer.

    +
    buf:the buffer
    len:the minimum free size to allocate
    Returns:the new available space or -1 in case of error

    Function: xmlBufferLength

    int	xmlBufferLength			(const xmlBuffer * buf)
    +

    Function to get the length of a buffer

    +
    buf:the buffer
    Returns:the length of data in the internal content

    Function: xmlBufferResize

    int	xmlBufferResize			(xmlBufferPtr buf, 
    unsigned int size)
    +

    Resize a buffer to accommodate minimum size of @size.

    +
    buf:the buffer to resize
    size:the desired size
    Returns:0 in case of problems, 1 otherwise

    Function: xmlBufferSetAllocationScheme

    void	xmlBufferSetAllocationScheme	(xmlBufferPtr buf, 
    xmlBufferAllocationScheme scheme)
    +

    Sets the allocation scheme for this buffer

    +
    buf:the buffer to tune
    scheme:allocation scheme to use

    Function: xmlBufferShrink

    int	xmlBufferShrink			(xmlBufferPtr buf, 
    unsigned int len)
    +

    Remove the beginning of an XML buffer.

    +
    buf:the buffer to dump
    len:the number of xmlChar to remove
    Returns:the number of #xmlChar removed, or -1 in case of failure.

    Function: xmlBufferWriteCHAR

    void	xmlBufferWriteCHAR		(xmlBufferPtr buf, 
    const xmlChar * string)
    +

    routine which manages and grows an output buffer. This one adds xmlChars at the end of the buffer.

    +
    buf:the XML buffer
    string:the string to add

    Function: xmlBufferWriteChar

    void	xmlBufferWriteChar		(xmlBufferPtr buf, 
    const char * string)
    +

    routine which manage and grows an output buffer. This one add C chars at the end of the array.

    +
    buf:the XML buffer output
    string:the string to add

    Function: xmlBufferWriteQuotedString

    void	xmlBufferWriteQuotedString	(xmlBufferPtr buf, 
    const xmlChar * string)
    +

    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

    +
    buf:the XML buffer output
    string:the string to add

    Function: xmlBuildQName

    xmlChar *	xmlBuildQName		(const xmlChar * ncname, 
    const xmlChar * prefix,
    xmlChar * memory,
    int len)
    +

    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.

    +
    ncname:the Name
    prefix:the prefix
    memory:preallocated memory
    len:preallocated memory length
    Returns:the new string which must be freed by the caller if different from @memory and @ncname or NULL in case of error

    Function: xmlChildElementCount

    unsigned long	xmlChildElementCount	(xmlNodePtr parent)
    +

    Finds the current number of child nodes of that element which are element nodes. Note the handling of entities references is different than in the W3C DOM element traversal spec since we don't have back reference from entities content to entities references.

    +
    parent:the parent node
    Returns:the count of element child or 0 if not available

    Function: xmlCopyDoc

    xmlDocPtr	xmlCopyDoc		(xmlDocPtr doc, 
    int recursive)
    +

    Do a copy of the document info. If recursive, the content tree will be copied too as well as DTD, namespaces and entities.

    +
    doc:the document
    recursive:if not zero do a recursive copy.
    Returns:a new #xmlDocPtr, or NULL in case of error.

    Function: xmlCopyDtd

    xmlDtdPtr	xmlCopyDtd		(xmlDtdPtr dtd)
    +

    Do a copy of the dtd.

    +
    dtd:the dtd
    Returns:a new #xmlDtdPtr, or NULL in case of error.

    Function: xmlCopyNamespace

    xmlNsPtr	xmlCopyNamespace	(xmlNsPtr cur)
    +

    Do a copy of the namespace.

    +
    cur:the namespace
    Returns:a new #xmlNsPtr, or NULL in case of error.

    Function: xmlCopyNamespaceList

    xmlNsPtr	xmlCopyNamespaceList	(xmlNsPtr cur)
    +

    Do a copy of an namespace list.

    +
    cur:the first namespace
    Returns:a new #xmlNsPtr, or NULL in case of error.

    Function: xmlCopyNode

    xmlNodePtr	xmlCopyNode		(xmlNodePtr node, 
    int extended)
    +

    Do a copy of the node.

    +
    node:the node
    extended:if 1 do a recursive copy (properties, namespaces and children when applicable) if 2 copy properties and namespaces (when applicable)
    Returns:a new #xmlNodePtr, or NULL in case of error.

    Function: xmlCopyNodeList

    xmlNodePtr	xmlCopyNodeList		(xmlNodePtr node)
    +

    Do a recursive copy of the node list. Use xmlDocCopyNodeList() if possible to ensure string interning.

    +
    node:the first node in the list.
    Returns:a new #xmlNodePtr, or NULL in case of error.

    Function: xmlCopyProp

    xmlAttrPtr	xmlCopyProp		(xmlNodePtr target, 
    xmlAttrPtr cur)
    +

    Do a copy of the attribute.

    +
    target:the element where the attribute will be grafted
    cur:the attribute
    Returns:a new #xmlAttrPtr, or NULL in case of error.

    Function: xmlCopyPropList

    xmlAttrPtr	xmlCopyPropList		(xmlNodePtr target, 
    xmlAttrPtr cur)
    +

    Do a copy of an attribute list.

    +
    target:the element where the attributes will be grafted
    cur:the first attribute
    Returns:a new #xmlAttrPtr, or NULL in case of error.

    Function: xmlCreateIntSubset

    xmlDtdPtr	xmlCreateIntSubset	(xmlDocPtr doc, 
    const xmlChar * name,
    const xmlChar * ExternalID,
    const xmlChar * SystemID)
    +

    Create the internal subset of a document

    +
    doc:the document pointer
    name:the DTD name
    ExternalID:the external (PUBLIC) ID
    SystemID:the system ID
    Returns:a pointer to the new DTD structure

    Function type: xmlDOMWrapAcquireNsFunction

    Function type: xmlDOMWrapAcquireNsFunction
    +xmlNsPtr	xmlDOMWrapAcquireNsFunction	(xmlDOMWrapCtxtPtr ctxt, 
    xmlNodePtr node,
    const xmlChar * nsName,
    const xmlChar * nsPrefix) +

    A function called to acquire namespaces (xmlNs) from the wrapper.

    ctxt:a DOM wrapper context
    node:the context node (element or attribute)
    nsName:the requested namespace name
    nsPrefix:the requested namespace prefix
    Returns:an xmlNsPtr or NULL in case of an error.

    +

    Function: xmlDOMWrapAdoptNode

    int	xmlDOMWrapAdoptNode		(xmlDOMWrapCtxtPtr ctxt, 
    xmlDocPtr sourceDoc,
    xmlNodePtr node,
    xmlDocPtr destDoc,
    xmlNodePtr destParent,
    int options)
    +

    References of out-of scope ns-decls are remapped to point to @destDoc: 1) If @destParent is given, then nsDef entries on element-nodes are used 2) If *no* @destParent is given, then @destDoc->oldNs entries are used This is the case when you have an unlinked node and just want to move it to the context of If @destParent is given, it ensures that the tree is namespace wellformed by creating additional ns-decls where needed. Note that, since prefixes of already existent ns-decls can be shadowed by this process, it could break QNames in attribute values or element content. NOTE: This function was not intensively tested.

    +
    ctxt:the optional context for custom processing
    sourceDoc:the optional sourceDoc
    node:the node to start with
    destDoc:the destination doc
    destParent:the optional new parent of @node in @destDoc
    options:option flags
    Returns:0 if the operation succeeded, 1 if a node of unsupported type was given, 2 if a node of not yet supported type was given and -1 on API/internal errors.

    Function: xmlDOMWrapCloneNode

    int	xmlDOMWrapCloneNode		(xmlDOMWrapCtxtPtr ctxt, 
    xmlDocPtr sourceDoc,
    xmlNodePtr node,
    xmlNodePtr * resNode,
    xmlDocPtr destDoc,
    xmlNodePtr destParent,
    int deep,
    int options)
    +

    References of out-of scope ns-decls are remapped to point to @destDoc: 1) If @destParent is given, then nsDef entries on element-nodes are used 2) If *no* @destParent is given, then @destDoc->oldNs entries are used. This is the case when you don't know already where the cloned branch will be added to. If @destParent is given, it ensures that the tree is namespace wellformed by creating additional ns-decls where needed. Note that, since prefixes of already existent ns-decls can be shadowed by this process, it could break QNames in attribute values or element content. TODO: 1) What to do with XInclude? Currently this returns an error for XInclude.

    +
    ctxt:the optional context for custom processing
    sourceDoc:the optional sourceDoc
    node:the node to start with
    resNode:the clone of the given @node
    destDoc:the destination doc
    destParent:the optional new parent of @node in @destDoc
    deep:descend into child if set
    options:option flags
    Returns:0 if the operation succeeded, 1 if a node of unsupported (or not yet supported) type was given, -1 on API/internal errors.

    Function: xmlDOMWrapFreeCtxt

    void	xmlDOMWrapFreeCtxt		(xmlDOMWrapCtxtPtr ctxt)
    +

    Frees the DOM-wrapper context.

    +
    ctxt:the DOM-wrapper context

    Function: xmlDOMWrapNewCtxt

    xmlDOMWrapCtxtPtr	xmlDOMWrapNewCtxt	(void)
    +

    Allocates and initializes a new DOM-wrapper context.

    +
    Returns:the xmlDOMWrapCtxtPtr or NULL in case of an internal error.

    Function: xmlDOMWrapReconcileNamespaces

    int	xmlDOMWrapReconcileNamespaces	(xmlDOMWrapCtxtPtr ctxt, 
    xmlNodePtr elem,
    int options)
    +

    Ensures that ns-references point to ns-decls hold on element-nodes. Ensures that the tree is namespace wellformed by creating additional ns-decls where needed. Note that, since prefixes of already existent ns-decls can be shadowed by this process, it could break QNames in attribute values or element content. NOTE: This function was not intensively tested.

    +
    ctxt:DOM wrapper context, unused at the moment
    elem:the element-node
    options:option flags
    Returns:0 if succeeded, -1 otherwise and on API/internal errors.

    Function: xmlDOMWrapRemoveNode

    int	xmlDOMWrapRemoveNode		(xmlDOMWrapCtxtPtr ctxt, 
    xmlDocPtr doc,
    xmlNodePtr node,
    int options)
    +

    Unlinks the given node from its owner. This will substitute ns-references to node->nsDef for ns-references to doc->oldNs, thus ensuring the removed branch to be autark wrt ns-references. NOTE: This function was not intensively tested.

    +
    ctxt:a DOM wrapper context
    doc:the doc
    node:the node to be removed.
    options:set of options, unused at the moment
    Returns:0 on success, 1 if the node is not supported, -1 on API and internal errors.

    Function: xmlDocCopyNode

    xmlNodePtr	xmlDocCopyNode		(xmlNodePtr node, 
    xmlDocPtr doc,
    int extended)
    +

    Do a copy of the node to a given document.

    +
    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)
    Returns:a new #xmlNodePtr, or NULL in case of error.

    Function: xmlDocCopyNodeList

    xmlNodePtr	xmlDocCopyNodeList	(xmlDocPtr doc, 
    xmlNodePtr node)
    +

    Do a recursive copy of the node list.

    +
    doc:the target document
    node:the first node in the list.
    Returns:a new #xmlNodePtr, or NULL in case of error.

    Function: xmlDocDump

    int	xmlDocDump			(FILE * f, 
    xmlDocPtr cur)
    +

    Dump an XML document to an open FILE.

    +
    f:the FILE*
    cur:the document
    Returns:the number of bytes written or -1 in case of failure.

    Function: xmlDocDumpFormatMemory

    void	xmlDocDumpFormatMemory		(xmlDocPtr cur, 
    xmlChar ** mem,
    int * size,
    int format)
    +

    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

    +
    cur:the document
    mem:OUT: the memory pointer
    size:OUT: the memory length
    format:should formatting spaces been added

    Function: xmlDocDumpFormatMemoryEnc

    void	xmlDocDumpFormatMemoryEnc	(xmlDocPtr out_doc, 
    xmlChar ** doc_txt_ptr,
    int * doc_txt_len,
    const char * txt_encoding,
    int format)
    +

    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

    +
    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

    Function: xmlDocDumpMemory

    void	xmlDocDumpMemory		(xmlDocPtr cur, 
    xmlChar ** mem,
    int * size)
    +

    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.

    +
    cur:the document
    mem:OUT: the memory pointer
    size:OUT: the memory length

    Function: xmlDocDumpMemoryEnc

    void	xmlDocDumpMemoryEnc		(xmlDocPtr out_doc, 
    xmlChar ** doc_txt_ptr,
    int * doc_txt_len,
    const char * txt_encoding)
    +

    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().

    +
    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

    Function: xmlDocFormatDump

    int	xmlDocFormatDump		(FILE * f, 
    xmlDocPtr cur,
    int format)
    +

    Dump an XML document to an open FILE.

    +
    f:the FILE*
    cur:the document
    format:should formatting spaces been added
    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

    Function: xmlDocGetRootElement

    xmlNodePtr	xmlDocGetRootElement	(const xmlDoc * doc)
    +

    Get the root element of the document (doc->children is a list containing possibly comments, PIs, etc ...).

    +
    doc:the document
    Returns:the #xmlNodePtr for the root or NULL

    Function: xmlDocSetRootElement

    xmlNodePtr	xmlDocSetRootElement	(xmlDocPtr doc, 
    xmlNodePtr root)
    +

    Set the root element of the document (doc->children is a list containing possibly comments, PIs, etc ...).

    +
    doc:the document
    root:the new document root element, if root is NULL no action is taken, to remove a node from a document use xmlUnlinkNode(root) instead.
    Returns:the old root element if any was found, NULL if root was NULL

    Function: xmlElemDump

    void	xmlElemDump			(FILE * f, 
    xmlDocPtr doc,
    xmlNodePtr cur)
    +

    Dump an XML/HTML node, recursive behaviour, children are printed too.

    +
    f:the FILE * for the output
    doc:the document
    cur:the current node

    Function: xmlFirstElementChild

    xmlNodePtr	xmlFirstElementChild	(xmlNodePtr parent)
    +

    Finds the first child node of that element which is a Element node Note the handling of entities references is different than in the W3C DOM element traversal spec since we don't have back reference from entities content to entities references.

    +
    parent:the parent node
    Returns:the first element child or NULL if not available

    Function: xmlFreeDoc

    void	xmlFreeDoc			(xmlDocPtr cur)
    +

    Free up all the structures used by a document, tree included.

    +
    cur:pointer to the document

    Function: xmlFreeDtd

    void	xmlFreeDtd			(xmlDtdPtr cur)
    +

    Free a DTD structure.

    +
    cur:the DTD structure to free up

    Function: xmlFreeNode

    void	xmlFreeNode			(xmlNodePtr cur)
    +

    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.

    +
    cur:the node

    Function: xmlFreeNodeList

    void	xmlFreeNodeList			(xmlNodePtr cur)
    +

    Free a node and all its siblings, this is a recursive behaviour, all the children are freed too.

    +
    cur:the first node in the list

    Function: xmlFreeNs

    void	xmlFreeNs			(xmlNsPtr cur)
    +

    Free up the structures associated to a namespace

    +
    cur:the namespace pointer

    Function: xmlFreeNsList

    void	xmlFreeNsList			(xmlNsPtr cur)
    +

    Free up all the structures associated to the chained namespaces.

    +
    cur:the first namespace pointer

    Function: xmlFreeProp

    void	xmlFreeProp			(xmlAttrPtr cur)
    +

    Free one attribute, all the content is freed too

    +
    cur:an attribute

    Function: xmlFreePropList

    void	xmlFreePropList			(xmlAttrPtr cur)
    +

    Free a property and all its siblings, all the children are freed too.

    +
    cur:the first property in the list

    Function: xmlGetBufferAllocationScheme

    xmlBufferAllocationScheme	xmlGetBufferAllocationScheme	(void)
    +

    Types are XML_BUFFER_ALLOC_EXACT - use exact sizes, keeps memory usage down XML_BUFFER_ALLOC_DOUBLEIT - double buffer when extra needed, improves performance XML_BUFFER_ALLOC_HYBRID - use exact sizes on small strings to keep memory usage tight in normal usage, and doubleit on large strings to avoid pathological performance.

    +
    Returns:the current allocation scheme

    Function: xmlGetCompressMode

    int	xmlGetCompressMode		(void)
    +

    get the default compression mode used, ZLIB based.

    +
    Returns:0 (uncompressed) to 9 (max compression)

    Function: xmlGetDocCompressMode

    int	xmlGetDocCompressMode		(const xmlDoc * doc)
    +

    get the compression ratio for a document, ZLIB based

    +
    doc:the document
    Returns:0 (uncompressed) to 9 (max compression)

    Function: xmlGetIntSubset

    xmlDtdPtr	xmlGetIntSubset		(const xmlDoc * doc)
    +

    Get the internal subset of a document

    +
    doc:the document pointer
    Returns:a pointer to the DTD structure or NULL if not found

    Function: xmlGetLastChild

    xmlNodePtr	xmlGetLastChild		(const xmlNode * parent)
    +

    Search the last child of a node.

    +
    parent:the parent node
    Returns:the last child or NULL if none.

    Function: xmlGetLineNo

    long	xmlGetLineNo			(const xmlNode * node)
    +

    Get line number of @node. Try to override the limitation of lines being store in 16 bits ints if XML_PARSE_BIG_LINES parser option was used

    +
    node:valid node
    Returns:the line number if successful, -1 otherwise

    Function: xmlGetNoNsProp

    xmlChar *	xmlGetNoNsProp		(const xmlNode * node, 
    const xmlChar * 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.

    +
    node:the node
    name:the attribute name
    Returns:the attribute value or NULL if not found. It's up to the caller to free the memory with xmlFree().

    Function: xmlGetNodePath

    xmlChar *	xmlGetNodePath		(const xmlNode * node)
    +

    Build a structure based Path for the given node

    +
    node:a node
    Returns:the new path or NULL in case of error. The caller must free the returned string

    Function: xmlGetNsList

    xmlNsPtr *	xmlGetNsList		(const xmlDoc * doc, 
    const xmlNode * node)
    +

    Search all the namespace applying to a given element.

    +
    doc:the document
    node:the current node
    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

    Function: xmlGetNsProp

    xmlChar *	xmlGetNsProp		(const xmlNode * node, 
    const xmlChar * name,
    const xmlChar * 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.

    +
    node:the node
    name:the attribute name
    nameSpace:the URI of the namespace
    Returns:the attribute value or NULL if not found. It's up to the caller to free the memory with xmlFree().

    Function: xmlGetProp

    xmlChar *	xmlGetProp		(const xmlNode * node, 
    const xmlChar * 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.

    +
    node:the node
    name:the attribute name
    Returns:the attribute value or NULL if not found. It's up to the caller to free the memory with xmlFree().

    Function: xmlHasNsProp

    xmlAttrPtr	xmlHasNsProp		(const xmlNode * node, 
    const xmlChar * name,
    const xmlChar * nameSpace)
    +

    Search for an attribute associated to a node This attribute has to be anchored in the namespace specified. This does the entity substitution. This function looks in DTD attribute declaration for #FIXED or default declaration values unless DTD use has been turned off. Note that a namespace of NULL indicates to use the default namespace.

    +
    node:the node
    name:the attribute name
    nameSpace:the URI of the namespace
    Returns:the attribute or the attribute declaration or NULL if neither was found.

    Function: xmlHasProp

    xmlAttrPtr	xmlHasProp		(const xmlNode * node, 
    const xmlChar * 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.

    +
    node:the node
    name:the attribute name
    Returns:the attribute or the attribute declaration or NULL if neither was found.

    Function: xmlIsBlankNode

    int	xmlIsBlankNode			(const xmlNode * node)
    +

    Checks whether this node is an empty or whitespace only (and possibly ignorable) text-node.

    +
    node:the node
    Returns:1 yes, 0 no

    Function: xmlIsXHTML

    int	xmlIsXHTML			(const xmlChar * systemID, 
    const xmlChar * publicID)
    +

    Try to find if the document correspond to an XHTML DTD

    +
    systemID:the system identifier
    publicID:the public identifier
    Returns:1 if true, 0 if not and -1 in case of error

    Function: xmlLastElementChild

    xmlNodePtr	xmlLastElementChild	(xmlNodePtr parent)
    +

    Finds the last child node of that element which is a Element node Note the handling of entities references is different than in the W3C DOM element traversal spec since we don't have back reference from entities content to entities references.

    +
    parent:the parent node
    Returns:the last element child or NULL if not available

    Function: xmlNewCDataBlock

    xmlNodePtr	xmlNewCDataBlock	(xmlDocPtr doc, 
    const xmlChar * content,
    int len)
    +

    Creation of a new node containing a CDATA block.

    +
    doc:the document
    content:the CDATA block content content
    len:the length of the block
    Returns:a pointer to the new node object.

    Function: xmlNewCharRef

    xmlNodePtr	xmlNewCharRef		(xmlDocPtr doc, 
    const xmlChar * name)
    +

    Creation of a new character reference node.

    +
    doc:the document
    name:the char ref string, starting with # or "&# ... ;"
    Returns:a pointer to the new node object.

    Function: xmlNewChild

    xmlNodePtr	xmlNewChild		(xmlNodePtr parent, 
    xmlNsPtr ns,
    const xmlChar * name,
    const xmlChar * content)
    +

    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.

    +
    parent:the parent node
    ns:a namespace if any
    name:the name of the child
    content:the XML content of the child if any.
    Returns:a pointer to the new node object.

    Function: xmlNewComment

    xmlNodePtr	xmlNewComment		(const xmlChar * content)
    +

    Creation of a new node containing a comment.

    +
    content:the comment content
    Returns:a pointer to the new node object.

    Function: xmlNewDoc

    xmlDocPtr	xmlNewDoc		(const xmlChar * version)
    +

    Creates a new XML document

    +
    version:xmlChar string giving the version of XML "1.0"
    Returns:a new document

    Function: xmlNewDocComment

    xmlNodePtr	xmlNewDocComment	(xmlDocPtr doc, 
    const xmlChar * content)
    +

    Creation of a new node containing a comment within a document.

    +
    doc:the document
    content:the comment content
    Returns:a pointer to the new node object.

    Function: xmlNewDocFragment

    xmlNodePtr	xmlNewDocFragment	(xmlDocPtr doc)
    +

    Creation of a new Fragment node.

    +
    doc:the document owning the fragment
    Returns:a pointer to the new node object.

    Function: xmlNewDocNode

    xmlNodePtr	xmlNewDocNode		(xmlDocPtr doc, 
    xmlNsPtr ns,
    const xmlChar * name,
    const xmlChar * content)
    +

    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.

    +
    doc:the document
    ns:namespace if any
    name:the node name
    content:the XML text content if any
    Returns:a pointer to the new node object.

    Function: xmlNewDocNodeEatName

    xmlNodePtr	xmlNewDocNodeEatName	(xmlDocPtr doc, 
    xmlNsPtr ns,
    xmlChar * name,
    const xmlChar * content)
    +

    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.

    +
    doc:the document
    ns:namespace if any
    name:the node name
    content:the XML text content if any
    Returns:a pointer to the new node object.

    Function: xmlNewDocPI

    xmlNodePtr	xmlNewDocPI		(xmlDocPtr doc, 
    const xmlChar * name,
    const xmlChar * content)
    +

    Creation of a processing instruction element.

    +
    doc:the target document
    name:the processing instruction name
    content:the PI content
    Returns:a pointer to the new node object.

    Function: xmlNewDocProp

    xmlAttrPtr	xmlNewDocProp		(xmlDocPtr doc, 
    const xmlChar * name,
    const xmlChar * value)
    +

    Create a new property carried by a document.

    +
    doc:the document
    name:the name of the attribute
    value:the value of the attribute
    Returns:a pointer to the attribute

    Function: xmlNewDocRawNode

    xmlNodePtr	xmlNewDocRawNode	(xmlDocPtr doc, 
    xmlNsPtr ns,
    const xmlChar * name,
    const xmlChar * content)
    +

    Creation of a new node element within a document. @ns and @content are optional (NULL).

    +
    doc:the document
    ns:namespace if any
    name:the node name
    content:the text content if any
    Returns:a pointer to the new node object.

    Function: xmlNewDocText

    xmlNodePtr	xmlNewDocText		(const xmlDoc * doc, 
    const xmlChar * content)
    +

    Creation of a new text node within a document.

    +
    doc:the document
    content:the text content
    Returns:a pointer to the new node object.

    Function: xmlNewDocTextLen

    xmlNodePtr	xmlNewDocTextLen	(xmlDocPtr doc, 
    const xmlChar * content,
    int len)
    +

    Creation of a new text node with an extra content length parameter. The text node pertain to a given document.

    +
    doc:the document
    content:the text content
    len:the text len.
    Returns:a pointer to the new node object.

    Function: xmlNewDtd

    xmlDtdPtr	xmlNewDtd		(xmlDocPtr doc, 
    const xmlChar * name,
    const xmlChar * ExternalID,
    const xmlChar * SystemID)
    +

    Creation of a new DTD for the external subset. To create an internal subset, use xmlCreateIntSubset().

    +
    doc:the document pointer
    name:the DTD name
    ExternalID:the external ID
    SystemID:the system ID
    Returns:a pointer to the new DTD structure

    Function: xmlNewGlobalNs

    xmlNsPtr	xmlNewGlobalNs		(xmlDocPtr doc, 
    const xmlChar * href,
    const xmlChar * prefix)
    +

    Creation of a Namespace, the old way using PI and without scoping DEPRECATED !!!

    +
    doc:the document carrying the namespace
    href:the URI associated
    prefix:the prefix for the namespace
    Returns:NULL this functionality had been removed

    Function: xmlNewNode

    xmlNodePtr	xmlNewNode		(xmlNsPtr ns, 
    const xmlChar * name)
    +

    Creation of a new node element. @ns is optional (NULL).

    +
    ns:namespace if any
    name:the node name
    Returns:a pointer to the new node object. Uses xmlStrdup() to make copy of @name.

    Function: xmlNewNodeEatName

    xmlNodePtr	xmlNewNodeEatName	(xmlNsPtr ns, 
    xmlChar * name)
    +

    Creation of a new node element. @ns is optional (NULL).

    +
    ns:namespace if any
    name:the node name
    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.

    Function: xmlNewNs

    xmlNsPtr	xmlNewNs		(xmlNodePtr node, 
    const xmlChar * href,
    const xmlChar * prefix)
    +

    Creation of a new Namespace. This function will refuse to create a namespace with a similar prefix than an existing one present on this node. Note that for a default namespace, @prefix should be NULL. We use href==NULL in the case of an element creation where the namespace was not defined.

    +
    node:the element carrying the namespace
    href:the URI associated
    prefix:the prefix for the namespace
    Returns:a new namespace pointer or NULL

    Function: xmlNewNsProp

    xmlAttrPtr	xmlNewNsProp		(xmlNodePtr node, 
    xmlNsPtr ns,
    const xmlChar * name,
    const xmlChar * value)
    +

    Create a new property tagged with a namespace and carried by a node.

    +
    node:the holding node
    ns:the namespace
    name:the name of the attribute
    value:the value of the attribute
    Returns:a pointer to the attribute

    Function: xmlNewNsPropEatName

    xmlAttrPtr	xmlNewNsPropEatName	(xmlNodePtr node, 
    xmlNsPtr ns,
    xmlChar * name,
    const xmlChar * value)
    +

    Create a new property tagged with a namespace and carried by a node.

    +
    node:the holding node
    ns:the namespace
    name:the name of the attribute
    value:the value of the attribute
    Returns:a pointer to the attribute

    Function: xmlNewPI

    xmlNodePtr	xmlNewPI		(const xmlChar * name, 
    const xmlChar * content)
    +

    Creation of a processing instruction element. Use xmlDocNewPI preferably to get string interning

    +
    name:the processing instruction name
    content:the PI content
    Returns:a pointer to the new node object.

    Function: xmlNewProp

    xmlAttrPtr	xmlNewProp		(xmlNodePtr node, 
    const xmlChar * name,
    const xmlChar * value)
    +

    Create a new property carried by a node.

    +
    node:the holding node
    name:the name of the attribute
    value:the value of the attribute
    Returns:a pointer to the attribute

    Function: xmlNewReference

    xmlNodePtr	xmlNewReference		(const xmlDoc * doc, 
    const xmlChar * name)
    +

    Creation of a new reference node.

    +
    doc:the document
    name:the reference name, or the reference string with & and ;
    Returns:a pointer to the new node object.

    Function: xmlNewText

    xmlNodePtr	xmlNewText		(const xmlChar * content)
    +

    Creation of a new text node.

    +
    content:the text content
    Returns:a pointer to the new node object.

    Function: xmlNewTextChild

    xmlNodePtr	xmlNewTextChild		(xmlNodePtr parent, 
    xmlNsPtr ns,
    const xmlChar * name,
    const xmlChar * content)
    +

    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.

    +
    parent:the parent node
    ns:a namespace if any
    name:the name of the child
    content:the text content of the child if any.
    Returns:a pointer to the new node object.

    Function: xmlNewTextLen

    xmlNodePtr	xmlNewTextLen		(const xmlChar * content, 
    int len)
    +

    Creation of a new text node with an extra parameter for the content's length

    +
    content:the text content
    len:the text len.
    Returns:a pointer to the new node object.

    Function: xmlNextElementSibling

    xmlNodePtr	xmlNextElementSibling	(xmlNodePtr node)
    +

    Finds the first closest next sibling of the node which is an element node. Note the handling of entities references is different than in the W3C DOM element traversal spec since we don't have back reference from entities content to entities references.

    +
    node:the current node
    Returns:the next element sibling or NULL if not available

    Function: xmlNodeAddContent

    void	xmlNodeAddContent		(xmlNodePtr cur, 
    const xmlChar * content)
    +

    Append the extra substring to the node content. NOTE: In contrast to xmlNodeSetContent(), @content is supposed to be raw text, so unescaped XML special chars are allowed, entity references are not supported.

    +
    cur:the node being modified
    content:extra content

    Function: xmlNodeAddContentLen

    void	xmlNodeAddContentLen		(xmlNodePtr cur, 
    const xmlChar * content,
    int len)
    +

    Append the extra substring to the node content. NOTE: In contrast to xmlNodeSetContentLen(), @content is supposed to be raw text, so unescaped XML special chars are allowed, entity references are not supported.

    +
    cur:the node being modified
    content:extra content
    len:the size of @content

    Function: xmlNodeBufGetContent

    int	xmlNodeBufGetContent		(xmlBufferPtr buffer, 
    const xmlNode * cur)
    +

    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

    +
    buffer:a buffer
    cur:the node being read
    Returns:0 in case of success and -1 in case of error.

    Function: xmlNodeDump

    int	xmlNodeDump			(xmlBufferPtr buf, 
    xmlDocPtr doc,
    xmlNodePtr cur,
    int level,
    int format)
    +

    Dump an XML node, recursive behaviour,children are printed too. Note that @format = 1 provide node indenting only if xmlIndentTreeOutput = 1 or xmlKeepBlanksDefault(0) was called Since this is using xmlBuffer structures it is limited to 2GB and somehow deprecated, use xmlBufNodeDump() instead.

    +
    buf:the XML buffer output
    doc:the document
    cur:the current node
    level:the imbrication level for indenting
    format:is formatting allowed
    Returns:the number of bytes written to the buffer or -1 in case of error

    Function: xmlNodeDumpOutput

    void	xmlNodeDumpOutput		(xmlOutputBufferPtr buf, 
    xmlDocPtr doc,
    xmlNodePtr cur,
    int level,
    int format,
    const char * encoding)
    +

    Dump an XML node, recursive behaviour, children are printed too. Note that @format = 1 provide node indenting only if xmlIndentTreeOutput = 1 or xmlKeepBlanksDefault(0) was called

    +
    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

    Function: xmlNodeGetBase

    xmlChar *	xmlNodeGetBase		(const xmlDoc * doc, 
    const xmlNode * cur)
    +

    Searches for the BASE URL. The code should work on both XML and HTML document even if base mechanisms are completely different. It returns the base as defined in RFC 2396 sections 5.1.1. Base URI within Document Content and 5.1.2. Base URI from the Encapsulating Entity However it does not return the document base (5.1.3), use doc->URL in this case

    +
    doc:the document the node pertains to
    cur:the node being checked
    Returns:a pointer to the base URL, or NULL if not found It's up to the caller to free the memory with xmlFree().

    Function: xmlNodeGetContent

    xmlChar *	xmlNodeGetContent	(const xmlNode * cur)
    +

    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.

    +
    cur:the node being read
    Returns:a new #xmlChar * or NULL if no content is available. It's up to the caller to free the memory with xmlFree().

    Function: xmlNodeGetLang

    xmlChar *	xmlNodeGetLang		(const xmlNode * cur)
    +

    Searches the language of a node, i.e. the values of the xml:lang attribute or the one carried by the nearest ancestor.

    +
    cur:the node being checked
    Returns:a pointer to the lang value, or NULL if not found It's up to the caller to free the memory with xmlFree().

    Function: xmlNodeGetSpacePreserve

    int	xmlNodeGetSpacePreserve		(const xmlNode * cur)
    +

    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.

    +
    cur:the node being checked
    Returns:-1 if xml:space is not inherited, 0 if "default", 1 if "preserve"

    Function: xmlNodeIsText

    int	xmlNodeIsText			(const xmlNode * node)
    +

    Is this node a Text node ?

    +
    node:the node
    Returns:1 yes, 0 no

    Function: xmlNodeListGetRawString

    xmlChar *	xmlNodeListGetRawString	(const xmlDoc * doc, 
    const xmlNode * list,
    int inLine)
    +

    Builds the string equivalent to the text contained in the Node list made of TEXTs and ENTITY_REFs, contrary to xmlNodeListGetString() this function doesn't do any character encoding handling.

    +
    doc:the document
    list:a Node list
    inLine:should we replace entity contents or show their external form
    Returns:a pointer to the string copy, the caller must free it with xmlFree().

    Function: xmlNodeListGetString

    xmlChar *	xmlNodeListGetString	(xmlDocPtr doc, 
    const xmlNode * list,
    int inLine)
    +

    Build the string equivalent to the text contained in the Node list made of TEXTs and ENTITY_REFs

    +
    doc:the document
    list:a Node list
    inLine:should we replace entity contents or show their external form
    Returns:a pointer to the string copy, the caller must free it with xmlFree().

    Function: xmlNodeSetBase

    void	xmlNodeSetBase			(xmlNodePtr cur, 
    const xmlChar * uri)
    +

    Set (or reset) the base URI of a node, i.e. the value of the xml:base attribute.

    +
    cur:the node being changed
    uri:the new base URI

    Function: xmlNodeSetContent

    void	xmlNodeSetContent		(xmlNodePtr cur, 
    const xmlChar * content)
    +

    Replace the content of a node. NOTE: @content is supposed to be a piece of XML CDATA, so it allows entity references, but XML special chars need to be escaped first by using xmlEncodeEntitiesReentrant() resp. xmlEncodeSpecialChars().

    +
    cur:the node being modified
    content:the new value of the content

    Function: xmlNodeSetContentLen

    void	xmlNodeSetContentLen		(xmlNodePtr cur, 
    const xmlChar * content,
    int len)
    +

    Replace the content of a node. NOTE: @content is supposed to be a piece of XML CDATA, so it allows entity references, but XML special chars need to be escaped first by using xmlEncodeEntitiesReentrant() resp. xmlEncodeSpecialChars().

    +
    cur:the node being modified
    content:the new value of the content
    len:the size of @content

    Function: xmlNodeSetLang

    void	xmlNodeSetLang			(xmlNodePtr cur, 
    const xmlChar * lang)
    +

    Set the language of a node, i.e. the values of the xml:lang attribute.

    +
    cur:the node being changed
    lang:the language description

    Function: xmlNodeSetName

    void	xmlNodeSetName			(xmlNodePtr cur, 
    const xmlChar * name)
    +

    Set (or reset) the name of a node.

    +
    cur:the node being changed
    name:the new tag name

    Function: xmlNodeSetSpacePreserve

    void	xmlNodeSetSpacePreserve		(xmlNodePtr cur, 
    int val)
    +

    Set (or reset) the space preserving behaviour of a node, i.e. the value of the xml:space attribute.

    +
    cur:the node being changed
    val:the xml:space value ("0": default, 1: "preserve")

    Function: xmlPreviousElementSibling

    xmlNodePtr	xmlPreviousElementSibling	(xmlNodePtr node)
    +

    Finds the first closest previous sibling of the node which is an element node. Note the handling of entities references is different than in the W3C DOM element traversal spec since we don't have back reference from entities content to entities references.

    +
    node:the current node
    Returns:the previous element sibling or NULL if not available

    Function: xmlReconciliateNs

    int	xmlReconciliateNs		(xmlDocPtr doc, 
    xmlNodePtr tree)
    +

    This function checks that all the namespaces declared within the given tree are properly declared. This is needed for example after Copy or Cut and then paste operations. The subtree may still hold pointers to namespace declarations outside the subtree or invalid/masked. As much as possible the function try to reuse the existing namespaces found in the new environment. If not possible the new namespaces are redeclared on @tree at the top of the given subtree.

    +
    doc:the document
    tree:a node defining the subtree to reconciliate
    Returns:the number of namespace declarations created or -1 in case of error.

    Function: xmlRemoveProp

    int	xmlRemoveProp			(xmlAttrPtr cur)
    +

    Unlink and free one attribute, all the content is freed too Note this doesn't work for namespace definition attributes

    +
    cur:an attribute
    Returns:0 if success and -1 in case of error.

    Function: xmlReplaceNode

    xmlNodePtr	xmlReplaceNode		(xmlNodePtr old, 
    xmlNodePtr cur)
    +

    Unlink the old node from its current context, prune the new one at the same place. If @cur was already inserted in a document it is first unlinked from its existing context.

    +
    old:the old node
    cur:the node
    Returns:the @old node

    Function: xmlSaveFile

    int	xmlSaveFile			(const char * filename, 
    xmlDocPtr cur)
    +

    Dump an XML document to a file. Will use compression if compiled in and enabled. If @filename is "-" the stdout file is used.

    +
    filename:the filename (or URL)
    cur:the document
    Returns:the number of bytes written or -1 in case of failure.

    Function: xmlSaveFileEnc

    int	xmlSaveFileEnc			(const char * filename, 
    xmlDocPtr cur,
    const char * encoding)
    +

    Dump an XML document, converting it to the given encoding

    +
    filename:the filename (or URL)
    cur:the document
    encoding:the name of an encoding (or NULL)
    Returns:the number of bytes written or -1 in case of failure.

    Function: xmlSaveFileTo

    int	xmlSaveFileTo			(xmlOutputBufferPtr buf, 
    xmlDocPtr cur,
    const char * encoding)
    +

    Dump an XML document to an I/O buffer. Warning ! This call xmlOutputBufferClose() on buf which is not available after this call.

    +
    buf:an output I/O buffer
    cur:the document
    encoding:the encoding if any assuming the I/O layer handles the trancoding
    Returns:the number of bytes written or -1 in case of failure.

    Function: xmlSaveFormatFile

    int	xmlSaveFormatFile		(const char * filename, 
    xmlDocPtr cur,
    int format)
    +

    Dump an XML document to a file. Will use compression if compiled in and enabled. If @filename is "-" the stdout file is used. If @format is set then the document will be indented on output. Note that @format = 1 provide node indenting only if xmlIndentTreeOutput = 1 or xmlKeepBlanksDefault(0) was called

    +
    filename:the filename (or URL)
    cur:the document
    format:should formatting spaces been added
    Returns:the number of bytes written or -1 in case of failure.

    Function: xmlSaveFormatFileEnc

    int	xmlSaveFormatFileEnc		(const char * filename, 
    xmlDocPtr cur,
    const char * encoding,
    int format)
    +

    Dump an XML document to a file or an URL.

    +
    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.
    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

    Function: xmlSaveFormatFileTo

    int	xmlSaveFormatFileTo		(xmlOutputBufferPtr buf, 
    xmlDocPtr cur,
    const char * encoding,
    int format)
    +

    Dump an XML document to an I/O buffer. Warning ! This call xmlOutputBufferClose() on buf which is not available after this call.

    +
    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
    Returns:the number of bytes written or -1 in case of failure.

    Function: xmlSearchNs

    xmlNsPtr	xmlSearchNs		(xmlDocPtr doc, 
    xmlNodePtr node,
    const xmlChar * nameSpace)
    +

    Search a Ns registered under a given name space for a document. recurse on the parents until it finds the defined namespace or return 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.

    +
    doc:the document
    node:the current node
    nameSpace:the namespace prefix
    Returns:the namespace pointer or NULL.

    Function: xmlSearchNsByHref

    xmlNsPtr	xmlSearchNsByHref	(xmlDocPtr doc, 
    xmlNodePtr node,
    const xmlChar * href)
    +

    Search a Ns aliasing a given URI. Recurse on the parents until it finds the defined namespace or return NULL otherwise.

    +
    doc:the document
    node:the current node
    href:the namespace value
    Returns:the namespace pointer or NULL.

    Function: xmlSetBufferAllocationScheme

    void	xmlSetBufferAllocationScheme	(xmlBufferAllocationScheme scheme)
    +

    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

    +
    scheme:allocation method to use

    Function: xmlSetCompressMode

    void	xmlSetCompressMode		(int mode)
    +

    set the default compression mode used, ZLIB based Correct values: 0 (uncompressed) to 9 (max compression)

    +
    mode:the compression ratio

    Function: xmlSetDocCompressMode

    void	xmlSetDocCompressMode		(xmlDocPtr doc, 
    int mode)
    +

    set the compression ratio for a document, ZLIB based Correct values: 0 (uncompressed) to 9 (max compression)

    +
    doc:the document
    mode:the compression ratio

    Function: xmlSetListDoc

    void	xmlSetListDoc			(xmlNodePtr list, 
    xmlDocPtr doc)
    +

    update all nodes in the list to point to the right document

    +
    list:the first element
    doc:the document

    Function: xmlSetNs

    void	xmlSetNs			(xmlNodePtr node, 
    xmlNsPtr ns)
    +

    Associate a namespace to a node, a posteriori.

    +
    node:a node in the document
    ns:a namespace pointer

    Function: xmlSetNsProp

    xmlAttrPtr	xmlSetNsProp		(xmlNodePtr node, 
    xmlNsPtr ns,
    const xmlChar * name,
    const xmlChar * value)
    +

    Set (or reset) an attribute carried by a node. The ns structure must be in scope, this is not checked

    +
    node:the node
    ns:the namespace definition
    name:the attribute name
    value:the attribute value
    Returns:the attribute pointer.

    Function: xmlSetProp

    xmlAttrPtr	xmlSetProp		(xmlNodePtr node, 
    const xmlChar * name,
    const xmlChar * value)
    +

    Set (or reset) an attribute carried by a node. If @name has a prefix, then the corresponding namespace-binding will be used, if in scope; it is an error it there's no such ns-binding for the prefix in scope.

    +
    node:the node
    name:the attribute name (a QName)
    value:the attribute value
    Returns:the attribute pointer.

    Function: xmlSetTreeDoc

    void	xmlSetTreeDoc			(xmlNodePtr tree, 
    xmlDocPtr doc)
    +

    update all nodes under the tree to point to the right document

    +
    tree:the top element
    doc:the document

    Function: xmlSplitQName2

    xmlChar *	xmlSplitQName2		(const xmlChar * name, 
    xmlChar ** prefix)
    +

    parse an XML qualified name string [NS 5] QName ::= (Prefix ':')? LocalPart [NS 6] Prefix ::= NCName [NS 7] LocalPart ::= NCName

    +
    name:the full QName
    prefix:a xmlChar **
    Returns:NULL if not a QName, otherwise the local part, and prefix is updated to get the Prefix if any.

    Function: xmlSplitQName3

    const xmlChar *	xmlSplitQName3		(const xmlChar * name, 
    int * len)
    +

    parse an XML qualified name string,i

    +
    name:the full QName
    len:an int *
    Returns:NULL if it is not a Qualified Name, otherwise, update len with the length in byte of the prefix and return a pointer to the start of the name without the prefix

    Function: xmlStringGetNodeList

    xmlNodePtr	xmlStringGetNodeList	(const xmlDoc * doc, 
    const xmlChar * value)
    +

    Parse the value string and build the node list associated. Should produce a flat tree with only TEXTs and ENTITY_REFs.

    +
    doc:the document
    value:the value of the attribute
    Returns:a pointer to the first child

    Function: xmlStringLenGetNodeList

    xmlNodePtr	xmlStringLenGetNodeList	(const xmlDoc * doc, 
    const xmlChar * value,
    int len)
    +

    Parse the value string and build the node list associated. Should produce a flat tree with only TEXTs and ENTITY_REFs.

    +
    doc:the document
    value:the value of the text
    len:the length of the string value
    Returns:a pointer to the first child

    Function: xmlTextConcat

    int	xmlTextConcat			(xmlNodePtr node, 
    const xmlChar * content,
    int len)
    +

    Concat the given string at the end of the existing node content

    +
    node:the node
    content:the content
    len:@content length
    Returns:-1 in case of error, 0 otherwise

    Function: xmlTextMerge

    xmlNodePtr	xmlTextMerge		(xmlNodePtr first, 
    xmlNodePtr second)
    +

    Merge two text nodes into one

    +
    first:the first text node
    second:the second text node being merged
    Returns:the first text node augmented

    Function: xmlUnlinkNode

    void	xmlUnlinkNode			(xmlNodePtr cur)
    +

    Unlink a node from it's current context, the node is not freed If one need to free the node, use xmlFreeNode() routine after the unlink to discard it. Note that namespace nodes can't be unlinked as they do not have pointer to their parent.

    +
    cur:the node

    Function: xmlUnsetNsProp

    int	xmlUnsetNsProp			(xmlNodePtr node, 
    xmlNsPtr ns,
    const xmlChar * name)
    +

    Remove an attribute carried by a node.

    +
    node:the node
    ns:the namespace definition
    name:the attribute name
    Returns:0 if successful, -1 if not found

    Function: xmlUnsetProp

    int	xmlUnsetProp			(xmlNodePtr node, 
    const xmlChar * name)
    +

    Remove an attribute carried by a node. This handles only attributes in no namespace.

    +
    node:the node
    name:the attribute name
    Returns:0 if successful, -1 if not found

    Function: xmlValidateNCName

    int	xmlValidateNCName		(const xmlChar * value, 
    int space)
    +

    Check that a value conforms to the lexical space of NCName

    +
    value:the value to check
    space:allow spaces in front and end of the string
    Returns:0 if this validates, a positive error code number otherwise and -1 in case of internal or API error.

    Function: xmlValidateNMToken

    int	xmlValidateNMToken		(const xmlChar * value, 
    int space)
    +

    Check that a value conforms to the lexical space of NMToken

    +
    value:the value to check
    space:allow spaces in front and end of the string
    Returns:0 if this validates, a positive error code number otherwise and -1 in case of internal or API error.

    Function: xmlValidateName

    int	xmlValidateName			(const xmlChar * value, 
    int space)
    +

    Check that a value conforms to the lexical space of Name

    +
    value:the value to check
    space:allow spaces in front and end of the string
    Returns:0 if this validates, a positive error code number otherwise and -1 in case of internal or API error.

    Function: xmlValidateQName

    int	xmlValidateQName		(const xmlChar * value, 
    int space)
    +

    Check that a value conforms to the lexical space of QName

    +
    value:the value to check
    space:allow spaces in front and end of the string
    Returns:0 if this validates, a positive error code number otherwise and -1 in case of internal or API error.

    Daniel Veillard

    diff --git a/doc/html/libxml-uri.html b/doc/html/libxml-uri.html new file mode 100644 index 0000000..6ced67a --- /dev/null +++ b/doc/html/libxml-uri.html @@ -0,0 +1,73 @@ + + +Module uri from libxml2
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    Module uri from libxml2

    API Menu
    API Indexes
    Related links

    library of generic URI related routines Implements RFC 2396

    Table of Contents

    Structure xmlURI
    struct _xmlURI +
    Typedef xmlURI * xmlURIPtr
    +
    xmlChar *	xmlBuildRelativeURI	(const xmlChar * URI, 
    const xmlChar * base)
    +
    xmlChar *	xmlBuildURI		(const xmlChar * URI, 
    const xmlChar * base)
    +
    xmlChar *	xmlCanonicPath		(const xmlChar * path)
    +
    xmlURIPtr	xmlCreateURI		(void)
    +
    void	xmlFreeURI			(xmlURIPtr uri)
    +
    int	xmlNormalizeURIPath		(char * path)
    +
    xmlURIPtr	xmlParseURI		(const char * str)
    +
    xmlURIPtr	xmlParseURIRaw		(const char * str, 
    int raw)
    +
    int	xmlParseURIReference		(xmlURIPtr uri, 
    const char * str)
    +
    xmlChar *	xmlPathToURI		(const xmlChar * path)
    +
    void	xmlPrintURI			(FILE * stream, 
    xmlURIPtr uri)
    +
    xmlChar *	xmlSaveUri		(xmlURIPtr uri)
    +
    xmlChar *	xmlURIEscape		(const xmlChar * str)
    +
    xmlChar *	xmlURIEscapeStr		(const xmlChar * str, 
    const xmlChar * list)
    +
    char *	xmlURIUnescapeString		(const char * str, 
    int len,
    char * target)
    +

    Description

    +

    Structure xmlURI

    Structure xmlURI
    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 (deprecated - use with + char * fragment : the fragment identifier + int cleanup : parsing potentially unclean URI + char * query_raw : the query string (as it appears in the +}

    Function: xmlBuildRelativeURI

    xmlChar *	xmlBuildRelativeURI	(const xmlChar * URI, 
    const xmlChar * base)
    +

    Expresses the URI of the reference in terms relative to the base. Some examples of this operation include: base = "http://site1.com/docs/book1.html" URI input URI returned docs/pic1.gif pic1.gif docs/img/pic1.gif img/pic1.gif img/pic1.gif ../img/pic1.gif http://site1.com/docs/pic1.gif pic1.gif http://site2.com/docs/pic1.gif http://site2.com/docs/pic1.gif base = "docs/book1.html" URI input URI returned docs/pic1.gif pic1.gif docs/img/pic1.gif img/pic1.gif img/pic1.gif ../img/pic1.gif http://site1.com/docs/pic1.gif http://site1.com/docs/pic1.gif Note: if the URI reference is really wierd or complicated, it may be worthwhile to first convert it into a "nice" one by calling xmlBuildURI (using 'base') before calling this routine, since this routine (for reasonable efficiency) assumes URI has already been through some validation.

    +
    URI:the URI reference under consideration
    base:the base value
    Returns:a new URI string (to be freed by the caller) or NULL in case error.

    Function: xmlBuildURI

    xmlChar *	xmlBuildURI		(const xmlChar * URI, 
    const xmlChar * base)
    +

    Computes he final URI of the reference done by checking that the given URI is valid, and building the final URI using the base URI. This is processed according to section 5.2 of the RFC 2396 5.2. Resolving Relative References to Absolute Form

    +
    URI:the URI instance found in the document
    base:the base value
    Returns:a new URI string (to be freed by the caller) or NULL in case of error.

    Function: xmlCanonicPath

    xmlChar *	xmlCanonicPath		(const xmlChar * path)
    +

    Constructs a canonic path from the specified path.

    +
    path:the resource locator in a filesystem notation
    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.

    Function: xmlCreateURI

    xmlURIPtr	xmlCreateURI		(void)
    +

    Simply creates an empty xmlURI

    +
    Returns:the new structure or NULL in case of error

    Function: xmlFreeURI

    void	xmlFreeURI			(xmlURIPtr uri)
    +

    Free up the xmlURI struct

    +
    uri:pointer to an xmlURI

    Function: xmlNormalizeURIPath

    int	xmlNormalizeURIPath		(char * path)
    +

    Applies the 5 normalization steps to a path string--that is, RFC 2396 Section 5.2, steps 6.c through 6.g. Normalization occurs directly on the string, no new allocation is done

    +
    path:pointer to the path string
    Returns:0 or an error code

    Function: xmlParseURI

    xmlURIPtr	xmlParseURI		(const char * str)
    +

    Parse an URI based on RFC 3986 URI-reference = [ absoluteURI | relativeURI ] [ "#" fragment ]

    +
    str:the URI string to analyze
    Returns:a newly built xmlURIPtr or NULL in case of error

    Function: xmlParseURIRaw

    xmlURIPtr	xmlParseURIRaw		(const char * str, 
    int raw)
    +

    Parse an URI but allows to keep intact the original fragments. URI-reference = URI / relative-ref

    +
    str:the URI string to analyze
    raw:if 1 unescaping of URI pieces are disabled
    Returns:a newly built xmlURIPtr or NULL in case of error

    Function: xmlParseURIReference

    int	xmlParseURIReference		(xmlURIPtr uri, 
    const char * str)
    +

    Parse an URI reference string based on RFC 3986 and fills in the appropriate fields of the @uri structure URI-reference = URI / relative-ref

    +
    uri:pointer to an URI structure
    str:the string to analyze
    Returns:0 or the error code

    Function: xmlPathToURI

    xmlChar *	xmlPathToURI		(const xmlChar * path)
    +

    Constructs an URI expressing the existing path

    +
    path:the resource locator in a filesystem notation
    Returns:a new URI, or a duplicate of the path parameter if the construction fails. The caller is responsible for freeing the memory occupied by the returned string. If there is insufficient memory available, or the argument is NULL, the function returns NULL.

    Function: xmlPrintURI

    void	xmlPrintURI			(FILE * stream, 
    xmlURIPtr uri)
    +

    Prints the URI in the stream @stream.

    +
    stream:a FILE* for the output
    uri:pointer to an xmlURI

    Function: xmlSaveUri

    xmlChar *	xmlSaveUri		(xmlURIPtr uri)
    +

    Save the URI as an escaped string

    +
    uri:pointer to an xmlURI
    Returns:a new string (to be deallocated by caller)

    Function: xmlURIEscape

    xmlChar *	xmlURIEscape		(const xmlChar * str)
    +

    Escaping routine, does not do validity checks ! It will try to escape the chars needing this, but this is heuristic based it's impossible to be sure.

    +
    str:the string of the URI to escape
    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

    Function: xmlURIEscapeStr

    xmlChar *	xmlURIEscapeStr		(const xmlChar * str, 
    const xmlChar * list)
    +

    This routine escapes a string to hex, ignoring reserved characters (a-z) and the characters in the exception list.

    +
    str:string to escape
    list:exception list string of chars not to escape
    Returns:a new escaped string or NULL in case of error.

    Function: xmlURIUnescapeString

    char *	xmlURIUnescapeString		(const char * str, 
    int len,
    char * target)
    +

    Unescaping routine, but does not check that the string is an URI. The output is a direct unsigned char translation of %XX values (no encoding) Note that the length of the result can only be smaller or same size as the input string.

    +
    str:the string to unescape
    len:the length in bytes to unescape (or <= 0 to indicate full string)
    target:optional destination buffer
    Returns:a copy of the string, but unescaped, will return NULL only in case of error

    Daniel Veillard

    diff --git a/doc/html/libxml-valid.html b/doc/html/libxml-valid.html new file mode 100644 index 0000000..94df436 --- /dev/null +++ b/doc/html/libxml-valid.html @@ -0,0 +1,289 @@ + + +Module valid from libxml2
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    Module valid from libxml2

    API Menu
    API Indexes
    Related links

    API for the DTD handling and the validity checking

    Table of Contents

    #define XML_CTXT_FINISH_DTD_0
    #define XML_CTXT_FINISH_DTD_1
    Structure xmlAttributeTable
    struct _xmlHashTable +The content of this structure is not made public by the API. +
    Typedef xmlAttributeTable * xmlAttributeTablePtr
    +
    Structure xmlElementTable
    struct _xmlHashTable +The content of this structure is not made public by the API. +
    Typedef xmlElementTable * xmlElementTablePtr
    +
    Structure xmlIDTable
    struct _xmlHashTable +The content of this structure is not made public by the API. +
    Typedef xmlIDTable * xmlIDTablePtr
    +
    Structure xmlNotationTable
    struct _xmlHashTable +The content of this structure is not made public by the API. +
    Typedef xmlNotationTable * xmlNotationTablePtr
    +
    Structure xmlRefTable
    struct _xmlHashTable +The content of this structure is not made public by the API. +
    Typedef xmlRefTable * xmlRefTablePtr
    +
    Structure xmlValidCtxt
    struct _xmlValidCtxt +
    Typedef xmlValidCtxt * xmlValidCtxtPtr
    +
    Structure xmlValidState
    struct _xmlValidState +The content of this structure is not made public by the API. +
    Typedef xmlValidState * xmlValidStatePtr
    +
    xmlAttributePtr	xmlAddAttributeDecl	(xmlValidCtxtPtr ctxt, 
    xmlDtdPtr dtd,
    const xmlChar * elem,
    const xmlChar * name,
    const xmlChar * ns,
    xmlAttributeType type,
    xmlAttributeDefault def,
    const xmlChar * defaultValue,
    xmlEnumerationPtr tree)
    +
    xmlElementPtr	xmlAddElementDecl	(xmlValidCtxtPtr ctxt, 
    xmlDtdPtr dtd,
    const xmlChar * name,
    xmlElementTypeVal type,
    xmlElementContentPtr content)
    +
    xmlIDPtr	xmlAddID		(xmlValidCtxtPtr ctxt, 
    xmlDocPtr doc,
    const xmlChar * value,
    xmlAttrPtr attr)
    +
    xmlNotationPtr	xmlAddNotationDecl	(xmlValidCtxtPtr ctxt, 
    xmlDtdPtr dtd,
    const xmlChar * name,
    const xmlChar * PublicID,
    const xmlChar * SystemID)
    +
    xmlRefPtr	xmlAddRef		(xmlValidCtxtPtr ctxt, 
    xmlDocPtr doc,
    const xmlChar * value,
    xmlAttrPtr attr)
    +
    xmlAttributeTablePtr	xmlCopyAttributeTable	(xmlAttributeTablePtr table)
    +
    xmlElementContentPtr	xmlCopyDocElementContent	(xmlDocPtr doc, 
    xmlElementContentPtr cur)
    +
    xmlElementContentPtr	xmlCopyElementContent	(xmlElementContentPtr cur)
    +
    xmlElementTablePtr	xmlCopyElementTable	(xmlElementTablePtr table)
    +
    xmlEnumerationPtr	xmlCopyEnumeration	(xmlEnumerationPtr cur)
    +
    xmlNotationTablePtr	xmlCopyNotationTable	(xmlNotationTablePtr table)
    +
    xmlEnumerationPtr	xmlCreateEnumeration	(const xmlChar * name)
    +
    void	xmlDumpAttributeDecl		(xmlBufferPtr buf, 
    xmlAttributePtr attr)
    +
    void	xmlDumpAttributeTable		(xmlBufferPtr buf, 
    xmlAttributeTablePtr table)
    +
    void	xmlDumpElementDecl		(xmlBufferPtr buf, 
    xmlElementPtr elem)
    +
    void	xmlDumpElementTable		(xmlBufferPtr buf, 
    xmlElementTablePtr table)
    +
    void	xmlDumpNotationDecl		(xmlBufferPtr buf, 
    xmlNotationPtr nota)
    +
    void	xmlDumpNotationTable		(xmlBufferPtr buf, 
    xmlNotationTablePtr table)
    +
    void	xmlFreeAttributeTable		(xmlAttributeTablePtr table)
    +
    void	xmlFreeDocElementContent	(xmlDocPtr doc, 
    xmlElementContentPtr cur)
    +
    void	xmlFreeElementContent		(xmlElementContentPtr cur)
    +
    void	xmlFreeElementTable		(xmlElementTablePtr table)
    +
    void	xmlFreeEnumeration		(xmlEnumerationPtr cur)
    +
    void	xmlFreeIDTable			(xmlIDTablePtr table)
    +
    void	xmlFreeNotationTable		(xmlNotationTablePtr table)
    +
    void	xmlFreeRefTable			(xmlRefTablePtr table)
    +
    void	xmlFreeValidCtxt		(xmlValidCtxtPtr cur)
    +
    xmlAttributePtr	xmlGetDtdAttrDesc	(xmlDtdPtr dtd, 
    const xmlChar * elem,
    const xmlChar * name)
    +
    xmlElementPtr	xmlGetDtdElementDesc	(xmlDtdPtr dtd, 
    const xmlChar * name)
    +
    xmlNotationPtr	xmlGetDtdNotationDesc	(xmlDtdPtr dtd, 
    const xmlChar * name)
    +
    xmlAttributePtr	xmlGetDtdQAttrDesc	(xmlDtdPtr dtd, 
    const xmlChar * elem,
    const xmlChar * name,
    const xmlChar * prefix)
    +
    xmlElementPtr	xmlGetDtdQElementDesc	(xmlDtdPtr dtd, 
    const xmlChar * name,
    const xmlChar * prefix)
    +
    xmlAttrPtr	xmlGetID		(xmlDocPtr doc, 
    const xmlChar * ID)
    +
    xmlListPtr	xmlGetRefs		(xmlDocPtr doc, 
    const xmlChar * ID)
    +
    int	xmlIsID			(xmlDocPtr doc, 
    xmlNodePtr elem,
    xmlAttrPtr attr)
    +
    int	xmlIsMixedElement		(xmlDocPtr doc, 
    const xmlChar * name)
    +
    int	xmlIsRef			(xmlDocPtr doc, 
    xmlNodePtr elem,
    xmlAttrPtr attr)
    +
    xmlElementContentPtr	xmlNewDocElementContent	(xmlDocPtr doc, 
    const xmlChar * name,
    xmlElementContentType type)
    +
    xmlElementContentPtr	xmlNewElementContent	(const xmlChar * name, 
    xmlElementContentType type)
    +
    xmlValidCtxtPtr	xmlNewValidCtxt		(void)
    +
    int	xmlRemoveID			(xmlDocPtr doc, 
    xmlAttrPtr attr)
    +
    int	xmlRemoveRef			(xmlDocPtr doc, 
    xmlAttrPtr attr)
    +
    void	xmlSnprintfElementContent	(char * buf, 
    int size,
    xmlElementContentPtr content,
    int englob)
    +
    void	xmlSprintfElementContent	(char * buf, 
    xmlElementContentPtr content,
    int englob)
    +
    int	xmlValidBuildContentModel	(xmlValidCtxtPtr ctxt, 
    xmlElementPtr elem)
    +
    xmlChar *	xmlValidCtxtNormalizeAttributeValue	(xmlValidCtxtPtr ctxt, 
    xmlDocPtr doc,
    xmlNodePtr elem,
    const xmlChar * name,
    const xmlChar * value)
    +
    int	xmlValidGetPotentialChildren	(xmlElementContent * ctree, 
    const xmlChar ** names,
    int * len,
    int max)
    +
    int	xmlValidGetValidElements	(xmlNode * prev, 
    xmlNode * next,
    const xmlChar ** names,
    int max)
    +
    xmlChar *	xmlValidNormalizeAttributeValue	(xmlDocPtr doc, 
    xmlNodePtr elem,
    const xmlChar * name,
    const xmlChar * value)
    +
    int	xmlValidateAttributeDecl	(xmlValidCtxtPtr ctxt, 
    xmlDocPtr doc,
    xmlAttributePtr attr)
    +
    int	xmlValidateAttributeValue	(xmlAttributeType type, 
    const xmlChar * value)
    +
    int	xmlValidateDocument		(xmlValidCtxtPtr ctxt, 
    xmlDocPtr doc)
    +
    int	xmlValidateDocumentFinal	(xmlValidCtxtPtr ctxt, 
    xmlDocPtr doc)
    +
    int	xmlValidateDtd			(xmlValidCtxtPtr ctxt, 
    xmlDocPtr doc,
    xmlDtdPtr dtd)
    +
    int	xmlValidateDtdFinal		(xmlValidCtxtPtr ctxt, 
    xmlDocPtr doc)
    +
    int	xmlValidateElement		(xmlValidCtxtPtr ctxt, 
    xmlDocPtr doc,
    xmlNodePtr elem)
    +
    int	xmlValidateElementDecl		(xmlValidCtxtPtr ctxt, 
    xmlDocPtr doc,
    xmlElementPtr elem)
    +
    int	xmlValidateNameValue		(const xmlChar * value)
    +
    int	xmlValidateNamesValue		(const xmlChar * value)
    +
    int	xmlValidateNmtokenValue		(const xmlChar * value)
    +
    int	xmlValidateNmtokensValue	(const xmlChar * value)
    +
    int	xmlValidateNotationDecl		(xmlValidCtxtPtr ctxt, 
    xmlDocPtr doc,
    xmlNotationPtr nota)
    +
    int	xmlValidateNotationUse		(xmlValidCtxtPtr ctxt, 
    xmlDocPtr doc,
    const xmlChar * notationName)
    +
    int	xmlValidateOneAttribute		(xmlValidCtxtPtr ctxt, 
    xmlDocPtr doc,
    xmlNodePtr elem,
    xmlAttrPtr attr,
    const xmlChar * value)
    +
    int	xmlValidateOneElement		(xmlValidCtxtPtr ctxt, 
    xmlDocPtr doc,
    xmlNodePtr elem)
    +
    int	xmlValidateOneNamespace		(xmlValidCtxtPtr ctxt, 
    xmlDocPtr doc,
    xmlNodePtr elem,
    const xmlChar * prefix,
    xmlNsPtr ns,
    const xmlChar * value)
    +
    int	xmlValidatePopElement		(xmlValidCtxtPtr ctxt, 
    xmlDocPtr doc,
    xmlNodePtr elem,
    const xmlChar * qname)
    +
    int	xmlValidatePushCData		(xmlValidCtxtPtr ctxt, 
    const xmlChar * data,
    int len)
    +
    int	xmlValidatePushElement		(xmlValidCtxtPtr ctxt, 
    xmlDocPtr doc,
    xmlNodePtr elem,
    const xmlChar * qname)
    +
    int	xmlValidateRoot			(xmlValidCtxtPtr ctxt, 
    xmlDocPtr doc)
    +
    Function type: xmlValidityErrorFunc
    +void	xmlValidityErrorFunc		(void * ctx, 
    const char * msg,
    ... ...) +
    +
    Function type: xmlValidityWarningFunc
    +void	xmlValidityWarningFunc		(void * ctx, 
    const char * msg,
    ... ...) +
    +

    Description

    +

    Macro: XML_CTXT_FINISH_DTD_0

    #define XML_CTXT_FINISH_DTD_0

    Special value for finishDtd field when embedded in an xmlParserCtxt

    +

    Macro: XML_CTXT_FINISH_DTD_1

    #define XML_CTXT_FINISH_DTD_1

    Special value for finishDtd field when embedded in an xmlParserCtxt

    +

    Structure xmlAttributeTable

    Structure xmlAttributeTable
    struct _xmlHashTable { +The content of this structure is not made public by the API. +}

    Structure xmlElementTable

    Structure xmlElementTable
    struct _xmlHashTable { +The content of this structure is not made public by the API. +}

    Structure xmlIDTable

    Structure xmlIDTable
    struct _xmlHashTable { +The content of this structure is not made public by the API. +}

    Structure xmlNotationTable

    Structure xmlNotationTable
    struct _xmlHashTable { +The content of this structure is not made public by the API. +}

    Structure xmlRefTable

    Structure xmlRefTable
    struct _xmlHashTable { +The content of this structure is not made public by the API. +}

    Structure xmlValidCtxt

    Structure xmlValidCtxt
    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 an + 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 + unsigned int finishDtd : finished validating the Dtd ? + xmlDocPtr doc : the document + int valid : temporary validity check result state s + 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 + xmlAutomataPtr am : the automata + xmlAutomataStatePtr state : used to build the automata + void * am + void * state +}

    Structure xmlValidState

    Structure xmlValidState
    struct _xmlValidState { +The content of this structure is not made public by the API. +}

    Function: xmlAddAttributeDecl

    xmlAttributePtr	xmlAddAttributeDecl	(xmlValidCtxtPtr ctxt, 
    xmlDtdPtr dtd,
    const xmlChar * elem,
    const xmlChar * name,
    const xmlChar * ns,
    xmlAttributeType type,
    xmlAttributeDefault def,
    const xmlChar * defaultValue,
    xmlEnumerationPtr tree)
    +

    Register a new attribute declaration Note that @tree becomes the ownership of the DTD

    +
    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
    Returns:NULL if not new, otherwise the attribute decl

    Function: xmlAddElementDecl

    xmlElementPtr	xmlAddElementDecl	(xmlValidCtxtPtr ctxt, 
    xmlDtdPtr dtd,
    const xmlChar * name,
    xmlElementTypeVal type,
    xmlElementContentPtr content)
    +

    Register a new element declaration

    +
    ctxt:the validation context
    dtd:pointer to the DTD
    name:the entity name
    type:the element type
    content:the element content tree or NULL
    Returns:NULL if not, otherwise the entity

    Function: xmlAddID

    xmlIDPtr	xmlAddID		(xmlValidCtxtPtr ctxt, 
    xmlDocPtr doc,
    const xmlChar * value,
    xmlAttrPtr attr)
    +

    Register a new id declaration

    +
    ctxt:the validation context
    doc:pointer to the document
    value:the value name
    attr:the attribute holding the ID
    Returns:NULL if not, otherwise the new xmlIDPtr

    Function: xmlAddNotationDecl

    xmlNotationPtr	xmlAddNotationDecl	(xmlValidCtxtPtr ctxt, 
    xmlDtdPtr dtd,
    const xmlChar * name,
    const xmlChar * PublicID,
    const xmlChar * SystemID)
    +

    Register a new notation declaration

    +
    ctxt:the validation context
    dtd:pointer to the DTD
    name:the entity name
    PublicID:the public identifier or NULL
    SystemID:the system identifier or NULL
    Returns:NULL if not, otherwise the entity

    Function: xmlAddRef

    xmlRefPtr	xmlAddRef		(xmlValidCtxtPtr ctxt, 
    xmlDocPtr doc,
    const xmlChar * value,
    xmlAttrPtr attr)
    +

    Register a new ref declaration

    +
    ctxt:the validation context
    doc:pointer to the document
    value:the value name
    attr:the attribute holding the Ref
    Returns:NULL if not, otherwise the new xmlRefPtr

    Function: xmlCopyAttributeTable

    xmlAttributeTablePtr	xmlCopyAttributeTable	(xmlAttributeTablePtr table)
    +

    Build a copy of an attribute table.

    +
    table:An attribute table
    Returns:the new xmlAttributeTablePtr or NULL in case of error.

    Function: xmlCopyDocElementContent

    xmlElementContentPtr	xmlCopyDocElementContent	(xmlDocPtr doc, 
    xmlElementContentPtr cur)
    +

    Build a copy of an element content description.

    +
    doc:the document owning the element declaration
    cur:An element content pointer.
    Returns:the new xmlElementContentPtr or NULL in case of error.

    Function: xmlCopyElementContent

    xmlElementContentPtr	xmlCopyElementContent	(xmlElementContentPtr cur)
    +

    Build a copy of an element content description. Deprecated, use xmlCopyDocElementContent instead

    +
    cur:An element content pointer.
    Returns:the new xmlElementContentPtr or NULL in case of error.

    Function: xmlCopyElementTable

    xmlElementTablePtr	xmlCopyElementTable	(xmlElementTablePtr table)
    +

    Build a copy of an element table.

    +
    table:An element table
    Returns:the new xmlElementTablePtr or NULL in case of error.

    Function: xmlCopyEnumeration

    xmlEnumerationPtr	xmlCopyEnumeration	(xmlEnumerationPtr cur)
    +

    Copy an enumeration attribute node (recursive).

    +
    cur:the tree to copy.
    Returns:the xmlEnumerationPtr just created or NULL in case of error.

    Function: xmlCopyNotationTable

    xmlNotationTablePtr	xmlCopyNotationTable	(xmlNotationTablePtr table)
    +

    Build a copy of a notation table.

    +
    table:A notation table
    Returns:the new xmlNotationTablePtr or NULL in case of error.

    Function: xmlCreateEnumeration

    xmlEnumerationPtr	xmlCreateEnumeration	(const xmlChar * name)
    +

    create and initialize an enumeration attribute node.

    +
    name:the enumeration name or NULL
    Returns:the xmlEnumerationPtr just created or NULL in case of error.

    Function: xmlDumpAttributeDecl

    void	xmlDumpAttributeDecl		(xmlBufferPtr buf, 
    xmlAttributePtr attr)
    +

    This will dump the content of the attribute declaration as an XML DTD definition

    +
    buf:the XML buffer output
    attr:An attribute declaration

    Function: xmlDumpAttributeTable

    void	xmlDumpAttributeTable		(xmlBufferPtr buf, 
    xmlAttributeTablePtr table)
    +

    This will dump the content of the attribute table as an XML DTD definition

    +
    buf:the XML buffer output
    table:An attribute table

    Function: xmlDumpElementDecl

    void	xmlDumpElementDecl		(xmlBufferPtr buf, 
    xmlElementPtr elem)
    +

    This will dump the content of the element declaration as an XML DTD definition

    +
    buf:the XML buffer output
    elem:An element table

    Function: xmlDumpElementTable

    void	xmlDumpElementTable		(xmlBufferPtr buf, 
    xmlElementTablePtr table)
    +

    This will dump the content of the element table as an XML DTD definition

    +
    buf:the XML buffer output
    table:An element table

    Function: xmlDumpNotationDecl

    void	xmlDumpNotationDecl		(xmlBufferPtr buf, 
    xmlNotationPtr nota)
    +

    This will dump the content the notation declaration as an XML DTD definition

    +
    buf:the XML buffer output
    nota:A notation declaration

    Function: xmlDumpNotationTable

    void	xmlDumpNotationTable		(xmlBufferPtr buf, 
    xmlNotationTablePtr table)
    +

    This will dump the content of the notation table as an XML DTD definition

    +
    buf:the XML buffer output
    table:A notation table

    Function: xmlFreeAttributeTable

    void	xmlFreeAttributeTable		(xmlAttributeTablePtr table)
    +

    Deallocate the memory used by an entities hash table.

    +
    table:An attribute table

    Function: xmlFreeDocElementContent

    void	xmlFreeDocElementContent	(xmlDocPtr doc, 
    xmlElementContentPtr cur)
    +

    Free an element content structure. The whole subtree is removed.

    +
    doc:the document owning the element declaration
    cur:the element content tree to free

    Function: xmlFreeElementContent

    void	xmlFreeElementContent		(xmlElementContentPtr cur)
    +

    Free an element content structure. The whole subtree is removed. Deprecated, use xmlFreeDocElementContent instead

    +
    cur:the element content tree to free

    Function: xmlFreeElementTable

    void	xmlFreeElementTable		(xmlElementTablePtr table)
    +

    Deallocate the memory used by an element hash table.

    +
    table:An element table

    Function: xmlFreeEnumeration

    void	xmlFreeEnumeration		(xmlEnumerationPtr cur)
    +

    free an enumeration attribute node (recursive).

    +
    cur:the tree to free.

    Function: xmlFreeIDTable

    void	xmlFreeIDTable			(xmlIDTablePtr table)
    +

    Deallocate the memory used by an ID hash table.

    +
    table:An id table

    Function: xmlFreeNotationTable

    void	xmlFreeNotationTable		(xmlNotationTablePtr table)
    +

    Deallocate the memory used by an entities hash table.

    +
    table:An notation table

    Function: xmlFreeRefTable

    void	xmlFreeRefTable			(xmlRefTablePtr table)
    +

    Deallocate the memory used by an Ref hash table.

    +
    table:An ref table

    Function: xmlFreeValidCtxt

    void	xmlFreeValidCtxt		(xmlValidCtxtPtr cur)
    +

    Free a validation context structure.

    +
    cur:the validation context to free

    Function: xmlGetDtdAttrDesc

    xmlAttributePtr	xmlGetDtdAttrDesc	(xmlDtdPtr dtd, 
    const xmlChar * elem,
    const xmlChar * name)
    +

    Search the DTD for the description of this attribute on this element.

    +
    dtd:a pointer to the DtD to search
    elem:the element name
    name:the attribute name
    Returns:the xmlAttributePtr if found or NULL

    Function: xmlGetDtdElementDesc

    xmlElementPtr	xmlGetDtdElementDesc	(xmlDtdPtr dtd, 
    const xmlChar * name)
    +

    Search the DTD for the description of this element

    +
    dtd:a pointer to the DtD to search
    name:the element name
    Returns:the xmlElementPtr if found or NULL

    Function: xmlGetDtdNotationDesc

    xmlNotationPtr	xmlGetDtdNotationDesc	(xmlDtdPtr dtd, 
    const xmlChar * name)
    +

    Search the DTD for the description of this notation

    +
    dtd:a pointer to the DtD to search
    name:the notation name
    Returns:the xmlNotationPtr if found or NULL

    Function: xmlGetDtdQAttrDesc

    xmlAttributePtr	xmlGetDtdQAttrDesc	(xmlDtdPtr dtd, 
    const xmlChar * elem,
    const xmlChar * name,
    const xmlChar * prefix)
    +

    Search the DTD for the description of this qualified attribute on this element.

    +
    dtd:a pointer to the DtD to search
    elem:the element name
    name:the attribute name
    prefix:the attribute namespace prefix
    Returns:the xmlAttributePtr if found or NULL

    Function: xmlGetDtdQElementDesc

    xmlElementPtr	xmlGetDtdQElementDesc	(xmlDtdPtr dtd, 
    const xmlChar * name,
    const xmlChar * prefix)
    +

    Search the DTD for the description of this element

    +
    dtd:a pointer to the DtD to search
    name:the element name
    prefix:the element namespace prefix
    Returns:the xmlElementPtr if found or NULL

    Function: xmlGetID

    xmlAttrPtr	xmlGetID		(xmlDocPtr doc, 
    const xmlChar * ID)
    +

    Search the attribute declaring the given ID

    +
    doc:pointer to the document
    ID:the ID value
    Returns:NULL if not found, otherwise the xmlAttrPtr defining the ID

    Function: xmlGetRefs

    xmlListPtr	xmlGetRefs		(xmlDocPtr doc, 
    const xmlChar * ID)
    +

    Find the set of references for the supplied ID.

    +
    doc:pointer to the document
    ID:the ID value
    Returns:NULL if not found, otherwise node set for the ID.

    Function: xmlIsID

    int	xmlIsID			(xmlDocPtr doc, 
    xmlNodePtr elem,
    xmlAttrPtr attr)
    +

    Determine whether an attribute is of type ID. In case we have DTD(s) then this is done if DTD loading has been requested. In the case of HTML documents parsed with the HTML parser, then ID detection is done systematically.

    +
    doc:the document
    elem:the element carrying the attribute
    attr:the attribute
    Returns:0 or 1 depending on the lookup result

    Function: xmlIsMixedElement

    int	xmlIsMixedElement		(xmlDocPtr doc, 
    const xmlChar * name)
    +

    Search in the DtDs whether an element accept Mixed content (or ANY) basically if it is supposed to accept text childs

    +
    doc:the document
    name:the element name
    Returns:0 if no, 1 if yes, and -1 if no element description is available

    Function: xmlIsRef

    int	xmlIsRef			(xmlDocPtr doc, 
    xmlNodePtr elem,
    xmlAttrPtr attr)
    +

    Determine whether an attribute is of type Ref. In case we have DTD(s) then this is simple, otherwise we use an heuristic: name Ref (upper or lowercase).

    +
    doc:the document
    elem:the element carrying the attribute
    attr:the attribute
    Returns:0 or 1 depending on the lookup result

    Function: xmlNewDocElementContent

    xmlElementContentPtr	xmlNewDocElementContent	(xmlDocPtr doc, 
    const xmlChar * name,
    xmlElementContentType type)
    +

    Allocate an element content structure for the document.

    +
    doc:the document
    name:the subelement name or NULL
    type:the type of element content decl
    Returns:NULL if not, otherwise the new element content structure

    Function: xmlNewElementContent

    xmlElementContentPtr	xmlNewElementContent	(const xmlChar * name, 
    xmlElementContentType type)
    +

    Allocate an element content structure. Deprecated in favor of xmlNewDocElementContent

    +
    name:the subelement name or NULL
    type:the type of element content decl
    Returns:NULL if not, otherwise the new element content structure

    Function: xmlNewValidCtxt

    xmlValidCtxtPtr	xmlNewValidCtxt		(void)
    +

    Allocate a validation context structure.

    +
    Returns:NULL if not, otherwise the new validation context structure

    Function: xmlRemoveID

    int	xmlRemoveID			(xmlDocPtr doc, 
    xmlAttrPtr attr)
    +

    Remove the given attribute from the ID table maintained internally.

    +
    doc:the document
    attr:the attribute
    Returns:-1 if the lookup failed and 0 otherwise

    Function: xmlRemoveRef

    int	xmlRemoveRef			(xmlDocPtr doc, 
    xmlAttrPtr attr)
    +

    Remove the given attribute from the Ref table maintained internally.

    +
    doc:the document
    attr:the attribute
    Returns:-1 if the lookup failed and 0 otherwise

    Function: xmlSnprintfElementContent

    void	xmlSnprintfElementContent	(char * buf, 
    int size,
    xmlElementContentPtr content,
    int englob)
    +

    This will dump the content of the element content definition Intended just for the debug routine

    +
    buf:an output buffer
    size:the buffer size
    content:An element table
    englob:1 if one must print the englobing parenthesis, 0 otherwise

    Function: xmlSprintfElementContent

    void	xmlSprintfElementContent	(char * buf, 
    xmlElementContentPtr content,
    int englob)
    +

    Deprecated, unsafe, use xmlSnprintfElementContent

    +
    buf:an output buffer
    content:An element table
    englob:1 if one must print the englobing parenthesis, 0 otherwise

    Function: xmlValidBuildContentModel

    int	xmlValidBuildContentModel	(xmlValidCtxtPtr ctxt, 
    xmlElementPtr elem)
    +

    (Re)Build the automata associated to the content model of this element

    +
    ctxt:a validation context
    elem:an element declaration node
    Returns:1 in case of success, 0 in case of error

    Function: xmlValidCtxtNormalizeAttributeValue

    xmlChar *	xmlValidCtxtNormalizeAttributeValue	(xmlValidCtxtPtr ctxt, 
    xmlDocPtr doc,
    xmlNodePtr elem,
    const xmlChar * name,
    const xmlChar * value)
    +

    Does the validation related extra step of the normalization of attribute values: If the declared value is not CDATA, then the XML processor must further process the normalized attribute value by discarding any leading and trailing space (#x20) characters, and by replacing sequences of space (#x20) characters by single space (#x20) character. Also check VC: Standalone Document Declaration in P32, and update ctxt->valid accordingly

    +
    ctxt:the validation context or NULL
    doc:the document
    elem:the parent
    name:the attribute name
    value:the attribute value
    Returns:a new normalized string if normalization is needed, NULL otherwise the caller must free the returned value.

    Function: xmlValidGetPotentialChildren

    int	xmlValidGetPotentialChildren	(xmlElementContent * ctree, 
    const xmlChar ** names,
    int * len,
    int max)
    +

    Build/extend a list of potential children allowed by the content tree

    +
    ctree:an element content tree
    names: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
    Returns:the number of element in the list, or -1 in case of error.

    Function: xmlValidGetValidElements

    int	xmlValidGetValidElements	(xmlNode * prev, 
    xmlNode * next,
    const xmlChar ** names,
    int max)
    +

    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.

    +
    prev:an element to insert after
    next:an element to insert next
    names:an array to store the list of child names
    max:the size of the array
    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.

    Function: xmlValidNormalizeAttributeValue

    xmlChar *	xmlValidNormalizeAttributeValue	(xmlDocPtr doc, 
    xmlNodePtr elem,
    const xmlChar * name,
    const xmlChar * 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.

    +
    doc:the document
    elem:the parent
    name:the attribute name
    value:the attribute value
    Returns:a new normalized string if normalization is needed, NULL otherwise the caller must free the returned value.

    Function: xmlValidateAttributeDecl

    int	xmlValidateAttributeDecl	(xmlValidCtxtPtr ctxt, 
    xmlDocPtr doc,
    xmlAttributePtr attr)
    +

    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

    +
    ctxt:the validation context
    doc:a document instance
    attr:an attribute definition
    Returns:1 if valid or 0 otherwise

    Function: xmlValidateAttributeValue

    int	xmlValidateAttributeValue	(xmlAttributeType type, 
    const xmlChar * 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.

    +
    type:an attribute type
    value:an attribute value
    Returns:1 if valid or 0 otherwise

    Function: xmlValidateDocument

    int	xmlValidateDocument		(xmlValidCtxtPtr ctxt, 
    xmlDocPtr doc)
    +

    Try to validate the document instance basically it does the all the checks described by the XML Rec i.e. validates the internal and external subset (if present) and validate the document tree.

    +
    ctxt:the validation context
    doc:a document instance
    Returns:1 if valid or 0 otherwise

    Function: xmlValidateDocumentFinal

    int	xmlValidateDocumentFinal	(xmlValidCtxtPtr ctxt, 
    xmlDocPtr doc)
    +

    Does the final step for the document validation once all the incremental validation steps have been completed basically it does the following checks described by the XML Rec Check all the IDREF/IDREFS attributes definition for validity

    +
    ctxt:the validation context
    doc:a document instance
    Returns:1 if valid or 0 otherwise

    Function: xmlValidateDtd

    int	xmlValidateDtd			(xmlValidCtxtPtr ctxt, 
    xmlDocPtr doc,
    xmlDtdPtr dtd)
    +

    Try to validate the document against the dtd instance Basically it does check all the definitions in the DtD. Note the the internal subset (if present) is de-coupled (i.e. not used), which could give problems if ID or IDREF is present.

    +
    ctxt:the validation context
    doc:a document instance
    dtd:a dtd instance
    Returns:1 if valid or 0 otherwise

    Function: xmlValidateDtdFinal

    int	xmlValidateDtdFinal		(xmlValidCtxtPtr ctxt, 
    xmlDocPtr doc)
    +

    Does the final step for the dtds validation once all the subsets have been parsed basically it does the following checks described by the XML Rec - check that ENTITY and ENTITIES type attributes default or possible values matches one of the defined entities. - check that NOTATION type attributes default or possible values matches one of the defined notations.

    +
    ctxt:the validation context
    doc:a document instance
    Returns:1 if valid or 0 if invalid and -1 if not well-formed

    Function: xmlValidateElement

    int	xmlValidateElement		(xmlValidCtxtPtr ctxt, 
    xmlDocPtr doc,
    xmlNodePtr elem)
    +

    Try to validate the subtree under an element

    +
    ctxt:the validation context
    doc:a document instance
    elem:an element instance
    Returns:1 if valid or 0 otherwise

    Function: xmlValidateElementDecl

    int	xmlValidateElementDecl		(xmlValidCtxtPtr ctxt, 
    xmlDocPtr doc,
    xmlElementPtr elem)
    +

    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 ]

    +
    ctxt:the validation context
    doc:a document instance
    elem:an element definition
    Returns:1 if valid or 0 otherwise

    Function: xmlValidateNameValue

    int	xmlValidateNameValue		(const xmlChar * value)
    +

    Validate that the given value match Name production

    +
    value:an Name value
    Returns:1 if valid or 0 otherwise

    Function: xmlValidateNamesValue

    int	xmlValidateNamesValue		(const xmlChar * value)
    +

    Validate that the given value match Names production

    +
    value:an Names value
    Returns:1 if valid or 0 otherwise

    Function: xmlValidateNmtokenValue

    int	xmlValidateNmtokenValue		(const xmlChar * value)
    +

    Validate that the given value match Nmtoken production [ VC: Name Token ]

    +
    value:an Nmtoken value
    Returns:1 if valid or 0 otherwise

    Function: xmlValidateNmtokensValue

    int	xmlValidateNmtokensValue	(const xmlChar * value)
    +

    Validate that the given value match Nmtokens production [ VC: Name Token ]

    +
    value:an Nmtokens value
    Returns:1 if valid or 0 otherwise

    Function: xmlValidateNotationDecl

    int	xmlValidateNotationDecl		(xmlValidCtxtPtr ctxt, 
    xmlDocPtr doc,
    xmlNotationPtr nota)
    +

    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 ...

    +
    ctxt:the validation context
    doc:a document instance
    nota:a notation definition
    Returns:1 if valid or 0 otherwise

    Function: xmlValidateNotationUse

    int	xmlValidateNotationUse		(xmlValidCtxtPtr ctxt, 
    xmlDocPtr doc,
    const xmlChar * notationName)
    +

    Validate that the given name match a notation declaration. - [ VC: Notation Declared ]

    +
    ctxt:the validation context
    doc:the document
    notationName:the notation name to check
    Returns:1 if valid or 0 otherwise

    Function: xmlValidateOneAttribute

    int	xmlValidateOneAttribute		(xmlValidCtxtPtr ctxt, 
    xmlDocPtr doc,
    xmlNodePtr elem,
    xmlAttrPtr attr,
    const xmlChar * value)
    +

    Try to validate a single attribute for an element basically it does the following checks as described by the XML-1.0 recommendation: - [ VC: Attribute Value Type ] - [ VC: Fixed Attribute Default ] - [ VC: Entity Name ] - [ VC: Name Token ] - [ VC: ID ] - [ VC: IDREF ] - [ VC: Entity Name ] - [ VC: Notation Attributes ] The ID/IDREF uniqueness and matching are done separately

    +
    ctxt:the validation context
    doc:a document instance
    elem:an element instance
    attr:an attribute instance
    value:the attribute value (without entities processing)
    Returns:1 if valid or 0 otherwise

    Function: xmlValidateOneElement

    int	xmlValidateOneElement		(xmlValidCtxtPtr ctxt, 
    xmlDocPtr doc,
    xmlNodePtr elem)
    +

    Try to validate a single element and it's attributes, basically it does the following checks as described by the XML-1.0 recommendation: - [ VC: Element Valid ] - [ VC: Required Attribute ] Then call xmlValidateOneAttribute() for each attribute present. The ID/IDREF checkings are done separately

    +
    ctxt:the validation context
    doc:a document instance
    elem:an element instance
    Returns:1 if valid or 0 otherwise

    Function: xmlValidateOneNamespace

    int	xmlValidateOneNamespace		(xmlValidCtxtPtr ctxt, 
    xmlDocPtr doc,
    xmlNodePtr elem,
    const xmlChar * prefix,
    xmlNsPtr ns,
    const xmlChar * value)
    +

    Try to validate a single namespace declaration for an element basically it does the following checks as described by the XML-1.0 recommendation: - [ VC: Attribute Value Type ] - [ VC: Fixed Attribute Default ] - [ VC: Entity Name ] - [ VC: Name Token ] - [ VC: ID ] - [ VC: IDREF ] - [ VC: Entity Name ] - [ VC: Notation Attributes ] The ID/IDREF uniqueness and matching are done separately

    +
    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)
    Returns:1 if valid or 0 otherwise

    Function: xmlValidatePopElement

    int	xmlValidatePopElement		(xmlValidCtxtPtr ctxt, 
    xmlDocPtr doc,
    xmlNodePtr elem,
    const xmlChar * qname)
    +

    Pop the element end from the validation stack.

    +
    ctxt:the validation context
    doc:a document instance
    elem:an element instance
    qname:the qualified name as appearing in the serialization
    Returns:1 if no validation problem was found or 0 otherwise

    Function: xmlValidatePushCData

    int	xmlValidatePushCData		(xmlValidCtxtPtr ctxt, 
    const xmlChar * data,
    int len)
    +

    check the CData parsed for validation in the current stack

    +
    ctxt:the validation context
    data:some character data read
    len:the length of the data
    Returns:1 if no validation problem was found or 0 otherwise

    Function: xmlValidatePushElement

    int	xmlValidatePushElement		(xmlValidCtxtPtr ctxt, 
    xmlDocPtr doc,
    xmlNodePtr elem,
    const xmlChar * qname)
    +

    Push a new element start on the validation stack.

    +
    ctxt:the validation context
    doc:a document instance
    elem:an element instance
    qname:the qualified name as appearing in the serialization
    Returns:1 if no validation problem was found or 0 otherwise

    Function: xmlValidateRoot

    int	xmlValidateRoot			(xmlValidCtxtPtr ctxt, 
    xmlDocPtr doc)
    +

    Try to validate a the root element basically it does the following check as described by the XML-1.0 recommendation: - [ VC: Root Element Type ] it doesn't try to recurse or apply other check to the element

    +
    ctxt:the validation context
    doc:a document instance
    Returns:1 if valid or 0 otherwise

    Function type: xmlValidityErrorFunc

    Function type: xmlValidityErrorFunc
    +void	xmlValidityErrorFunc		(void * ctx, 
    const char * msg,
    ... ...) +

    Callback called when a validity error is found. This is a message oriented function similar to an *printf function.

    ctx:usually an xmlValidCtxtPtr to a validity error context, but comes from ctxt->userData (which normally contains such a pointer); ctxt->userData can be changed by the user.
    msg:the string to format *printf like vararg
    ...:remaining arguments to the format

    +

    Function type: xmlValidityWarningFunc

    Function type: xmlValidityWarningFunc
    +void	xmlValidityWarningFunc		(void * ctx, 
    const char * msg,
    ... ...) +

    Callback called when a validity warning is found. This is a message oriented function similar to an *printf function.

    ctx:usually an xmlValidCtxtPtr to a validity error context, but comes from ctxt->userData (which normally contains such a pointer); ctxt->userData can be changed by the user.
    msg:the string to format *printf like vararg
    ...:remaining arguments to the format

    +

    Daniel Veillard

    diff --git a/doc/html/libxml-xinclude.html b/doc/html/libxml-xinclude.html new file mode 100644 index 0000000..c799f10 --- /dev/null +++ b/doc/html/libxml-xinclude.html @@ -0,0 +1,59 @@ + + +Module xinclude from libxml2
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    Module xinclude from libxml2

    API Menu
    API Indexes
    Related links

    API to handle XInclude processing, implements the World Wide Web Consortium Last Call Working Draft 10 November 2003

    Table of Contents

    #define XINCLUDE_FALLBACK
    #define XINCLUDE_HREF
    #define XINCLUDE_NODE
    #define XINCLUDE_NS
    #define XINCLUDE_OLD_NS
    #define XINCLUDE_PARSE
    #define XINCLUDE_PARSE_ENCODING
    #define XINCLUDE_PARSE_TEXT
    #define XINCLUDE_PARSE_XML
    #define XINCLUDE_PARSE_XPOINTER
    Structure xmlXIncludeCtxt
    struct _xmlXIncludeCtxt +The content of this structure is not made public by the API. +
    Typedef xmlXIncludeCtxt * xmlXIncludeCtxtPtr
    +
    void	xmlXIncludeFreeContext		(xmlXIncludeCtxtPtr ctxt)
    +
    xmlXIncludeCtxtPtr	xmlXIncludeNewContext	(xmlDocPtr doc)
    +
    int	xmlXIncludeProcess		(xmlDocPtr doc)
    +
    int	xmlXIncludeProcessFlags		(xmlDocPtr doc, 
    int flags)
    +
    int	xmlXIncludeProcessFlagsData	(xmlDocPtr doc, 
    int flags,
    void * data)
    +
    int	xmlXIncludeProcessNode		(xmlXIncludeCtxtPtr ctxt, 
    xmlNodePtr node)
    +
    int	xmlXIncludeProcessTree		(xmlNodePtr tree)
    +
    int	xmlXIncludeProcessTreeFlags	(xmlNodePtr tree, 
    int flags)
    +
    int	xmlXIncludeProcessTreeFlagsData	(xmlNodePtr tree, 
    int flags,
    void * data)
    +
    int	xmlXIncludeSetFlags		(xmlXIncludeCtxtPtr ctxt, 
    int flags)
    +

    Description

    +

    Macro: XINCLUDE_FALLBACK

    #define XINCLUDE_FALLBACK

    Macro defining "fallback"

    +

    Macro: XINCLUDE_HREF

    #define XINCLUDE_HREF

    Macro defining "href"

    +

    Macro: XINCLUDE_NODE

    #define XINCLUDE_NODE

    Macro defining "include"

    +

    Macro: XINCLUDE_NS

    #define XINCLUDE_NS

    Macro defining the Xinclude namespace: http://www.w3.org/2003/XInclude

    +

    Macro: XINCLUDE_OLD_NS

    #define XINCLUDE_OLD_NS

    Macro defining the draft Xinclude namespace: http://www.w3.org/2001/XInclude

    +

    Macro: XINCLUDE_PARSE

    #define XINCLUDE_PARSE

    Macro defining "parse"

    +

    Macro: XINCLUDE_PARSE_ENCODING

    #define XINCLUDE_PARSE_ENCODING

    Macro defining "encoding"

    +

    Macro: XINCLUDE_PARSE_TEXT

    #define XINCLUDE_PARSE_TEXT

    Macro defining "text"

    +

    Macro: XINCLUDE_PARSE_XML

    #define XINCLUDE_PARSE_XML

    Macro defining "xml"

    +

    Macro: XINCLUDE_PARSE_XPOINTER

    #define XINCLUDE_PARSE_XPOINTER

    Macro defining "xpointer"

    +

    Structure xmlXIncludeCtxt

    Structure xmlXIncludeCtxt
    struct _xmlXIncludeCtxt { +The content of this structure is not made public by the API. +}

    Function: xmlXIncludeFreeContext

    void	xmlXIncludeFreeContext		(xmlXIncludeCtxtPtr ctxt)
    +

    Free an XInclude context

    +
    ctxt:the XInclude context

    Function: xmlXIncludeNewContext

    xmlXIncludeCtxtPtr	xmlXIncludeNewContext	(xmlDocPtr doc)
    +

    Creates a new XInclude context

    +
    doc:an XML Document
    Returns:the new set

    Function: xmlXIncludeProcess

    int	xmlXIncludeProcess		(xmlDocPtr doc)
    +

    Implement the XInclude substitution on the XML document @doc

    +
    doc:an XML document
    Returns:0 if no substitution were done, -1 if some processing failed or the number of substitutions done.

    Function: xmlXIncludeProcessFlags

    int	xmlXIncludeProcessFlags		(xmlDocPtr doc, 
    int flags)
    +

    Implement the XInclude substitution on the XML document @doc

    +
    doc:an XML document
    flags:a set of xmlParserOption used for parsing XML includes
    Returns:0 if no substitution were done, -1 if some processing failed or the number of substitutions done.

    Function: xmlXIncludeProcessFlagsData

    int	xmlXIncludeProcessFlagsData	(xmlDocPtr doc, 
    int flags,
    void * data)
    +

    Implement the XInclude substitution on the XML document @doc

    +
    doc:an XML document
    flags:a set of xmlParserOption used for parsing XML includes
    data:application data that will be passed to the parser context in the _private field of the parser context(s)
    Returns:0 if no substitution were done, -1 if some processing failed or the number of substitutions done.

    Function: xmlXIncludeProcessNode

    int	xmlXIncludeProcessNode		(xmlXIncludeCtxtPtr ctxt, 
    xmlNodePtr node)
    +

    Implement the XInclude substitution for the given subtree reusing the informations and data coming from the given context.

    +
    ctxt:an existing XInclude context
    node:a node in an XML document
    Returns:0 if no substitution were done, -1 if some processing failed or the number of substitutions done.

    Function: xmlXIncludeProcessTree

    int	xmlXIncludeProcessTree		(xmlNodePtr tree)
    +

    Implement the XInclude substitution for the given subtree

    +
    tree:a node in an XML document
    Returns:0 if no substitution were done, -1 if some processing failed or the number of substitutions done.

    Function: xmlXIncludeProcessTreeFlags

    int	xmlXIncludeProcessTreeFlags	(xmlNodePtr tree, 
    int flags)
    +

    Implement the XInclude substitution for the given subtree

    +
    tree:a node in an XML document
    flags:a set of xmlParserOption used for parsing XML includes
    Returns:0 if no substitution were done, -1 if some processing failed or the number of substitutions done.

    Function: xmlXIncludeProcessTreeFlagsData

    int	xmlXIncludeProcessTreeFlagsData	(xmlNodePtr tree, 
    int flags,
    void * data)
    +

    Implement the XInclude substitution on the XML node @tree

    +
    tree:an XML node
    flags:a set of xmlParserOption used for parsing XML includes
    data:application data that will be passed to the parser context in the _private field of the parser context(s)
    Returns:0 if no substitution were done, -1 if some processing failed or the number of substitutions done.

    Function: xmlXIncludeSetFlags

    int	xmlXIncludeSetFlags		(xmlXIncludeCtxtPtr ctxt, 
    int flags)
    +

    Set the flags used for further processing of XML resources.

    +
    ctxt:an XInclude processing context
    flags:a set of xmlParserOption used for parsing XML includes
    Returns:0 in case of success and -1 in case of error.

    Daniel Veillard

    diff --git a/doc/html/libxml-xlink.html b/doc/html/libxml-xlink.html new file mode 100644 index 0000000..5e94b98 --- /dev/null +++ b/doc/html/libxml-xlink.html @@ -0,0 +1,82 @@ + + +Module xlink from libxml2
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    Module xlink from libxml2

    API Menu
    API Indexes
    Related links

    unfinished XLink detection module

    Table of Contents

    Enum xlinkActuate
    +
    Typedef xmlChar * xlinkHRef
    +
    Structure xlinkHandler
    struct _xlinkHandler +
    Typedef xlinkHandler * xlinkHandlerPtr
    +
    Typedef xmlChar * xlinkRole
    +
    Enum xlinkShow
    +
    Typedef xmlChar * xlinkTitle
    +
    Enum xlinkType
    +
    Function type: xlinkExtendedLinkFunk
    +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) +
    +
    Function type: xlinkExtendedLinkSetFunk
    +void	xlinkExtendedLinkSetFunk	(void * ctx, 
    xmlNodePtr node,
    int nbLocators,
    const xlinkHRef * hrefs,
    const xlinkRole * roles,
    int nbTitles,
    const xlinkTitle * titles,
    const xmlChar ** langs) +
    +
    xlinkNodeDetectFunc	xlinkGetDefaultDetect	(void)
    +
    xlinkHandlerPtr	xlinkGetDefaultHandler	(void)
    +
    xlinkType	xlinkIsLink		(xmlDocPtr doc, 
    xmlNodePtr node)
    +
    Function type: xlinkNodeDetectFunc
    +void	xlinkNodeDetectFunc		(void * ctx, 
    xmlNodePtr node) +
    +
    void	xlinkSetDefaultDetect		(xlinkNodeDetectFunc func)
    +
    void	xlinkSetDefaultHandler		(xlinkHandlerPtr handler)
    +
    Function type: xlinkSimpleLinkFunk
    +void	xlinkSimpleLinkFunk		(void * ctx, 
    xmlNodePtr node,
    const xlinkHRef href,
    const xlinkRole role,
    const xlinkTitle title) +
    +

    Description

    +

    Enum xlinkActuate

    Enum xlinkActuate {
    +    XLINK_ACTUATE_NONE = 0
    +    XLINK_ACTUATE_AUTO = 1
    +    XLINK_ACTUATE_ONREQUEST = 2
    +}
    +

    Structure xlinkHandler

    Structure xlinkHandler
    struct _xlinkHandler { + xlinkSimpleLinkFunk simple + xlinkExtendedLinkFunk extended + xlinkExtendedLinkSetFunk set +}

    Enum xlinkShow

    Enum xlinkShow {
    +    XLINK_SHOW_NONE = 0
    +    XLINK_SHOW_NEW = 1
    +    XLINK_SHOW_EMBED = 2
    +    XLINK_SHOW_REPLACE = 3
    +}
    +

    Enum xlinkType

    Enum xlinkType {
    +    XLINK_TYPE_NONE = 0
    +    XLINK_TYPE_SIMPLE = 1
    +    XLINK_TYPE_EXTENDED = 2
    +    XLINK_TYPE_EXTENDED_SET = 3
    +}
    +

    Function type: xlinkExtendedLinkFunk

    Function type: xlinkExtendedLinkFunk
    +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) +

    This is the prototype for a extended link detection callback.

    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
    titles:
    langs:array of xml:lang values for the titles

    +

    Function type: xlinkExtendedLinkSetFunk

    Function type: xlinkExtendedLinkSetFunk
    +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 prototype for a extended link set detection callback.

    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
    titles:
    langs:array of xml:lang values for the titles

    +

    Function: xlinkGetDefaultDetect

    xlinkNodeDetectFunc	xlinkGetDefaultDetect	(void)
    +

    Get the default xlink detection routine

    +
    Returns:the current function or NULL;

    Function: xlinkGetDefaultHandler

    xlinkHandlerPtr	xlinkGetDefaultHandler	(void)
    +

    Get the default xlink handler.

    +
    Returns:the current xlinkHandlerPtr value.

    Function: xlinkIsLink

    xlinkType	xlinkIsLink		(xmlDocPtr doc, 
    xmlNodePtr node)
    +

    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.

    +
    doc:the document containing the node
    node:the node pointer itself
    Returns:the xlinkType of the node (XLINK_TYPE_NONE if there is no link detected.

    Function type: xlinkNodeDetectFunc

    Function type: xlinkNodeDetectFunc
    +void	xlinkNodeDetectFunc		(void * ctx, 
    xmlNodePtr node) +

    This is the prototype for the link detection routine. It calls the default link detection callbacks upon link detection.

    ctx:user data pointer
    node:the node to check

    +

    Function: xlinkSetDefaultDetect

    void	xlinkSetDefaultDetect		(xlinkNodeDetectFunc func)
    +

    Set the default xlink detection routine

    +
    func:pointer to the new detection routine.

    Function: xlinkSetDefaultHandler

    void	xlinkSetDefaultHandler		(xlinkHandlerPtr handler)
    +

    Set the default xlink handlers

    +
    handler:the new value for the xlink handler block

    Function type: xlinkSimpleLinkFunk

    Function type: xlinkSimpleLinkFunk
    +void	xlinkSimpleLinkFunk		(void * ctx, 
    xmlNodePtr node,
    const xlinkHRef href,
    const xlinkRole role,
    const xlinkTitle title) +

    This is the prototype for a simple link detection callback.

    ctx:user data pointer
    node:the node carrying the link
    href:the target of the link
    role:the role string
    title:the link title

    +

    Daniel Veillard

    diff --git a/doc/html/libxml-xmlIO.html b/doc/html/libxml-xmlIO.html new file mode 100644 index 0000000..2d2724c --- /dev/null +++ b/doc/html/libxml-xmlIO.html @@ -0,0 +1,212 @@ + + +Module xmlIO from libxml2
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    Module xmlIO from libxml2

    API Menu
    API Indexes
    Related links

    interface for the I/O interfaces used by the parser

    Table of Contents

    xmlOutputBufferPtr	xmlAllocOutputBuffer	(xmlCharEncodingHandlerPtr encoder)
    +
    xmlParserInputBufferPtr	xmlAllocParserInputBuffer	(xmlCharEncoding enc)
    +
    int	xmlCheckFilename		(const char * path)
    +
    xmlParserInputPtr	xmlCheckHTTPInput	(xmlParserCtxtPtr ctxt, 
    xmlParserInputPtr ret)
    +
    void	xmlCleanupInputCallbacks	(void)
    +
    void	xmlCleanupOutputCallbacks	(void)
    +
    int	xmlFileClose			(void * context)
    +
    int	xmlFileMatch			(const char * filename)
    +
    void *	xmlFileOpen			(const char * filename)
    +
    int	xmlFileRead			(void * context, 
    char * buffer,
    int len)
    +
    void	xmlFreeParserInputBuffer	(xmlParserInputBufferPtr in)
    +
    int	xmlIOFTPClose			(void * context)
    +
    int	xmlIOFTPMatch			(const char * filename)
    +
    void *	xmlIOFTPOpen			(const char * filename)
    +
    int	xmlIOFTPRead			(void * context, 
    char * buffer,
    int len)
    +
    int	xmlIOHTTPClose			(void * context)
    +
    int	xmlIOHTTPMatch			(const char * filename)
    +
    void *	xmlIOHTTPOpen			(const char * filename)
    +
    void *	xmlIOHTTPOpenW			(const char * post_uri, 
    int compression)
    +
    int	xmlIOHTTPRead			(void * context, 
    char * buffer,
    int len)
    +
    Function type: xmlInputCloseCallback
    +int	xmlInputCloseCallback		(void * context)
    +
    +
    Function type: xmlInputMatchCallback
    +int	xmlInputMatchCallback		(char const * filename)
    +
    +
    Function type: xmlInputOpenCallback
    +void *	xmlInputOpenCallback		(char const * filename)
    +
    +
    Function type: xmlInputReadCallback
    +int	xmlInputReadCallback		(void * context, 
    char * buffer,
    int len) +
    +
    xmlParserInputPtr	xmlNoNetExternalEntityLoader	(const char * URL, 
    const char * ID,
    xmlParserCtxtPtr ctxt)
    +
    xmlChar *	xmlNormalizeWindowsPath	(const xmlChar * path)
    +
    int	xmlOutputBufferClose		(xmlOutputBufferPtr out)
    +
    xmlOutputBufferPtr	xmlOutputBufferCreateBuffer	(xmlBufferPtr buffer, 
    xmlCharEncodingHandlerPtr encoder)
    +
    xmlOutputBufferPtr	xmlOutputBufferCreateFd	(int fd, 
    xmlCharEncodingHandlerPtr encoder)
    +
    xmlOutputBufferPtr	xmlOutputBufferCreateFile	(FILE * file, 
    xmlCharEncodingHandlerPtr encoder)
    +
    xmlOutputBufferPtr	xmlOutputBufferCreateFilename	(const char * URI, 
    xmlCharEncodingHandlerPtr encoder,
    int compression)
    +
    xmlOutputBufferPtr	xmlOutputBufferCreateIO	(xmlOutputWriteCallback iowrite, 
    xmlOutputCloseCallback ioclose,
    void * ioctx,
    xmlCharEncodingHandlerPtr encoder)
    +
    int	xmlOutputBufferFlush		(xmlOutputBufferPtr out)
    +
    const xmlChar *	xmlOutputBufferGetContent	(xmlOutputBufferPtr out)
    +
    size_t	xmlOutputBufferGetSize		(xmlOutputBufferPtr out)
    +
    int	xmlOutputBufferWrite		(xmlOutputBufferPtr out, 
    int len,
    const char * buf)
    +
    int	xmlOutputBufferWriteEscape	(xmlOutputBufferPtr out, 
    const xmlChar * str,
    xmlCharEncodingOutputFunc escaping)
    +
    int	xmlOutputBufferWriteString	(xmlOutputBufferPtr out, 
    const char * str)
    +
    Function type: xmlOutputCloseCallback
    +int	xmlOutputCloseCallback		(void * context)
    +
    +
    Function type: xmlOutputMatchCallback
    +int	xmlOutputMatchCallback		(char const * filename)
    +
    +
    Function type: xmlOutputOpenCallback
    +void *	xmlOutputOpenCallback		(char const * filename)
    +
    +
    Function type: xmlOutputWriteCallback
    +int	xmlOutputWriteCallback		(void * context, 
    const char * buffer,
    int len) +
    +
    char *	xmlParserGetDirectory		(const char * filename)
    +
    xmlParserInputBufferPtr	xmlParserInputBufferCreateFd	(int fd, 
    xmlCharEncoding enc)
    +
    xmlParserInputBufferPtr	xmlParserInputBufferCreateFile	(FILE * file, 
    xmlCharEncoding enc)
    +
    xmlParserInputBufferPtr	xmlParserInputBufferCreateFilename	(const char * URI, 
    xmlCharEncoding enc)
    +
    xmlParserInputBufferPtr	xmlParserInputBufferCreateIO	(xmlInputReadCallback ioread, 
    xmlInputCloseCallback ioclose,
    void * ioctx,
    xmlCharEncoding enc)
    +
    xmlParserInputBufferPtr	xmlParserInputBufferCreateMem	(const char * mem, 
    int size,
    xmlCharEncoding enc)
    +
    xmlParserInputBufferPtr	xmlParserInputBufferCreateStatic	(const char * mem, 
    int size,
    xmlCharEncoding enc)
    +
    int	xmlParserInputBufferGrow	(xmlParserInputBufferPtr in, 
    int len)
    +
    int	xmlParserInputBufferPush	(xmlParserInputBufferPtr in, 
    int len,
    const char * buf)
    +
    int	xmlParserInputBufferRead	(xmlParserInputBufferPtr in, 
    int len)
    +
    int	xmlPopInputCallbacks		(void)
    +
    void	xmlRegisterDefaultInputCallbacks	(void)
    +
    void	xmlRegisterDefaultOutputCallbacks	(void)
    +
    void	xmlRegisterHTTPPostCallbacks	(void)
    +
    int	xmlRegisterInputCallbacks	(xmlInputMatchCallback matchFunc, 
    xmlInputOpenCallback openFunc,
    xmlInputReadCallback readFunc,
    xmlInputCloseCallback closeFunc)
    +
    int	xmlRegisterOutputCallbacks	(xmlOutputMatchCallback matchFunc, 
    xmlOutputOpenCallback openFunc,
    xmlOutputWriteCallback writeFunc,
    xmlOutputCloseCallback closeFunc)
    +

    Description

    +

    Function: xmlAllocOutputBuffer

    xmlOutputBufferPtr	xmlAllocOutputBuffer	(xmlCharEncodingHandlerPtr encoder)
    +

    Create a buffered parser output

    +
    encoder:the encoding converter or NULL
    Returns:the new parser output or NULL

    Function: xmlAllocParserInputBuffer

    xmlParserInputBufferPtr	xmlAllocParserInputBuffer	(xmlCharEncoding enc)
    +

    Create a buffered parser input for progressive parsing

    +
    enc:the charset encoding if known
    Returns:the new parser input or NULL

    Function: xmlCheckFilename

    int	xmlCheckFilename		(const char * path)
    +

    function checks to see if @path is a valid source (file, socket...) for XML. if stat is not available on the target machine,

    +
    path:the path to check
    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.

    Function: xmlCheckHTTPInput

    xmlParserInputPtr	xmlCheckHTTPInput	(xmlParserCtxtPtr ctxt, 
    xmlParserInputPtr ret)
    +

    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

    +
    ctxt:an XML parser context
    ret:an XML parser input
    Returns:the input or NULL in case of HTTP error.

    Function: xmlCleanupInputCallbacks

    void	xmlCleanupInputCallbacks	(void)
    +

    clears the entire input callback table. this includes the compiled-in I/O.

    +

    Function: xmlCleanupOutputCallbacks

    void	xmlCleanupOutputCallbacks	(void)
    +

    clears the entire output callback table. this includes the compiled-in I/O callbacks.

    +

    Function: xmlFileClose

    int	xmlFileClose			(void * context)
    +

    Close an I/O channel

    +
    context:the I/O context
    Returns:0 or -1 in case of error

    Function: xmlFileMatch

    int	xmlFileMatch			(const char * filename)
    +

    input from FILE *

    +
    filename:the URI for matching
    Returns:1 if matches, 0 otherwise

    Function: xmlFileOpen

    void *	xmlFileOpen			(const char * filename)
    +

    Wrapper around xmlFileOpen_real that try it with an unescaped version of @filename, if this fails fallback to @filename

    +
    filename:the URI for matching
    Returns:a handler or NULL in case or failure

    Function: xmlFileRead

    int	xmlFileRead			(void * context, 
    char * buffer,
    int len)
    +

    Read @len bytes to @buffer from the I/O channel.

    +
    context:the I/O context
    buffer:where to drop data
    len:number of bytes to write
    Returns:the number of bytes written or < 0 in case of failure

    Function: xmlFreeParserInputBuffer

    void	xmlFreeParserInputBuffer	(xmlParserInputBufferPtr in)
    +

    Free up the memory used by a buffered parser input

    +
    in:a buffered parser input

    Function: xmlIOFTPClose

    int	xmlIOFTPClose			(void * context)
    +

    Close an FTP I/O channel

    +
    context:the I/O context
    Returns:0

    Function: xmlIOFTPMatch

    int	xmlIOFTPMatch			(const char * filename)
    +

    check if the URI matches an FTP one

    +
    filename:the URI for matching
    Returns:1 if matches, 0 otherwise

    Function: xmlIOFTPOpen

    void *	xmlIOFTPOpen			(const char * filename)
    +

    open an FTP I/O channel

    +
    filename:the URI for matching
    Returns:an I/O context or NULL in case of error

    Function: xmlIOFTPRead

    int	xmlIOFTPRead			(void * context, 
    char * buffer,
    int len)
    +

    Read @len bytes to @buffer from the I/O channel.

    +
    context:the I/O context
    buffer:where to drop data
    len:number of bytes to write
    Returns:the number of bytes written

    Function: xmlIOHTTPClose

    int	xmlIOHTTPClose			(void * context)
    +

    Close an HTTP I/O channel

    +
    context:the I/O context
    Returns:0

    Function: xmlIOHTTPMatch

    int	xmlIOHTTPMatch			(const char * filename)
    +

    check if the URI matches an HTTP one

    +
    filename:the URI for matching
    Returns:1 if matches, 0 otherwise

    Function: xmlIOHTTPOpen

    void *	xmlIOHTTPOpen			(const char * filename)
    +

    open an HTTP I/O channel

    +
    filename:the URI for matching
    Returns:an I/O context or NULL in case of error

    Function: xmlIOHTTPOpenW

    void *	xmlIOHTTPOpenW			(const char * post_uri, 
    int compression)
    +

    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.

    +
    post_uri:The destination URI for the document
    compression:The compression desired for the document.
    Returns:an I/O context or NULL in case of error.

    Function: xmlIOHTTPRead

    int	xmlIOHTTPRead			(void * context, 
    char * buffer,
    int len)
    +

    Read @len bytes to @buffer from the I/O channel.

    +
    context:the I/O context
    buffer:where to drop data
    len:number of bytes to write
    Returns:the number of bytes written

    Function type: xmlInputCloseCallback

    Function type: xmlInputCloseCallback
    +int	xmlInputCloseCallback		(void * context)
    +

    Callback used in the I/O Input API to close the resource

    context:an Input context
    Returns:0 or -1 in case of error

    +

    Function type: xmlInputMatchCallback

    Function type: xmlInputMatchCallback
    +int	xmlInputMatchCallback		(char const * filename)
    +

    Callback used in the I/O Input API to detect if the current handler can provide input fonctionnalities for this resource.

    filename:the filename or URI
    Returns:1 if yes and 0 if another Input module should be used

    +

    Function type: xmlInputOpenCallback

    Function type: xmlInputOpenCallback
    +void *	xmlInputOpenCallback		(char const * filename)
    +

    Callback used in the I/O Input API to open the resource

    filename:the filename or URI
    Returns:an Input context or NULL in case or error

    +

    Function type: xmlInputReadCallback

    Function type: xmlInputReadCallback
    +int	xmlInputReadCallback		(void * context, 
    char * buffer,
    int len) +

    Callback used in the I/O Input API to read the resource

    context:an Input context
    buffer:the buffer to store data read
    len:the length of the buffer in bytes
    Returns:the number of bytes read or -1 in case of error

    +

    Function: xmlNoNetExternalEntityLoader

    xmlParserInputPtr	xmlNoNetExternalEntityLoader	(const char * URL, 
    const char * ID,
    xmlParserCtxtPtr ctxt)
    +

    A specific entity loader disabling network accesses, though still allowing local catalog accesses for resolution.

    +
    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
    Returns:a new allocated xmlParserInputPtr, or NULL.

    Function: xmlNormalizeWindowsPath

    xmlChar *	xmlNormalizeWindowsPath	(const xmlChar * path)
    +

    This function is obsolete. Please see xmlURIFromPath in uri.c for a better solution.

    +
    path:the input file path
    Returns:a canonicalized version of the path

    Function: xmlOutputBufferClose

    int	xmlOutputBufferClose		(xmlOutputBufferPtr out)
    +

    flushes and close the output I/O channel and free up all the associated resources

    +
    out:a buffered output
    Returns:the number of byte written or -1 in case of error.

    Function: xmlOutputBufferCreateBuffer

    xmlOutputBufferPtr	xmlOutputBufferCreateBuffer	(xmlBufferPtr buffer, 
    xmlCharEncodingHandlerPtr encoder)
    +

    Create a buffered output for the progressive saving to a xmlBuffer

    +
    buffer:a xmlBufferPtr
    encoder:the encoding converter or NULL
    Returns:the new parser output or NULL

    Function: xmlOutputBufferCreateFd

    xmlOutputBufferPtr	xmlOutputBufferCreateFd	(int fd, 
    xmlCharEncodingHandlerPtr encoder)
    +

    Create a buffered output for the progressive saving to a file descriptor

    +
    fd:a file descriptor number
    encoder:the encoding converter or NULL
    Returns:the new parser output or NULL

    Function: xmlOutputBufferCreateFile

    xmlOutputBufferPtr	xmlOutputBufferCreateFile	(FILE * file, 
    xmlCharEncodingHandlerPtr encoder)
    +

    Create a buffered output for the progressive saving to a FILE * buffered C I/O

    +
    file:a FILE*
    encoder:the encoding converter or NULL
    Returns:the new parser output or NULL

    Function: xmlOutputBufferCreateFilename

    xmlOutputBufferPtr	xmlOutputBufferCreateFilename	(const char * URI, 
    xmlCharEncodingHandlerPtr encoder,
    int compression)
    +

    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.

    +
    URI:a C string containing the URI or filename
    encoder:the encoding converter or NULL
    compression:the compression ration (0 none, 9 max).
    Returns:the new output or NULL

    Function: xmlOutputBufferCreateIO

    xmlOutputBufferPtr	xmlOutputBufferCreateIO	(xmlOutputWriteCallback iowrite, 
    xmlOutputCloseCallback ioclose,
    void * ioctx,
    xmlCharEncodingHandlerPtr encoder)
    +

    Create a buffered output for the progressive saving to an I/O handler

    +
    iowrite:an I/O write function
    ioclose:an I/O close function
    ioctx:an I/O handler
    encoder:the charset encoding if known
    Returns:the new parser output or NULL

    Function: xmlOutputBufferFlush

    int	xmlOutputBufferFlush		(xmlOutputBufferPtr out)
    +

    flushes the output I/O channel

    +
    out:a buffered output
    Returns:the number of byte written or -1 in case of error.

    Function: xmlOutputBufferGetContent

    const xmlChar *	xmlOutputBufferGetContent	(xmlOutputBufferPtr out)
    +

    Gives a pointer to the data currently held in the output buffer

    +
    out:an xmlOutputBufferPtr
    Returns:a pointer to the data or NULL in case of error

    Function: xmlOutputBufferGetSize

    size_t	xmlOutputBufferGetSize		(xmlOutputBufferPtr out)
    +

    Gives the length of the data currently held in the output buffer

    +
    out:an xmlOutputBufferPtr
    Returns:0 in case or error or no data is held, the size otherwise

    Function: xmlOutputBufferWrite

    int	xmlOutputBufferWrite		(xmlOutputBufferPtr out, 
    int len,
    const char * buf)
    +

    Write the content of the array in the output I/O buffer This routine handle the I18N transcoding from internal UTF-8 The buffer is lossless, i.e. will store in case of partial or delayed writes.

    +
    out:a buffered parser output
    len:the size in bytes of the array.
    buf:an char array
    Returns:the number of chars immediately written, or -1 in case of error.

    Function: xmlOutputBufferWriteEscape

    int	xmlOutputBufferWriteEscape	(xmlOutputBufferPtr out, 
    const xmlChar * str,
    xmlCharEncodingOutputFunc escaping)
    +

    Write the content of the string in the output I/O buffer This routine escapes the caracters and then handle the I18N transcoding from internal UTF-8 The buffer is lossless, i.e. will store in case of partial or delayed writes.

    +
    out:a buffered parser output
    str:a zero terminated UTF-8 string
    escaping:an optional escaping function (or NULL)
    Returns:the number of chars immediately written, or -1 in case of error.

    Function: xmlOutputBufferWriteString

    int	xmlOutputBufferWriteString	(xmlOutputBufferPtr out, 
    const char * str)
    +

    Write the content of the string in the output I/O buffer This routine handle the I18N transcoding from internal UTF-8 The buffer is lossless, i.e. will store in case of partial or delayed writes.

    +
    out:a buffered parser output
    str:a zero terminated C string
    Returns:the number of chars immediately written, or -1 in case of error.

    Function type: xmlOutputCloseCallback

    Function type: xmlOutputCloseCallback
    +int	xmlOutputCloseCallback		(void * context)
    +

    Callback used in the I/O Output API to close the resource

    context:an Output context
    Returns:0 or -1 in case of error

    +

    Function type: xmlOutputMatchCallback

    Function type: xmlOutputMatchCallback
    +int	xmlOutputMatchCallback		(char const * filename)
    +

    Callback used in the I/O Output API to detect if the current handler can provide output fonctionnalities for this resource.

    filename:the filename or URI
    Returns:1 if yes and 0 if another Output module should be used

    +

    Function type: xmlOutputOpenCallback

    Function type: xmlOutputOpenCallback
    +void *	xmlOutputOpenCallback		(char const * filename)
    +

    Callback used in the I/O Output API to open the resource

    filename:the filename or URI
    Returns:an Output context or NULL in case or error

    +

    Function type: xmlOutputWriteCallback

    Function type: xmlOutputWriteCallback
    +int	xmlOutputWriteCallback		(void * context, 
    const char * buffer,
    int len) +

    Callback used in the I/O Output API to write to the resource

    context:an Output context
    buffer:the buffer of data to write
    len:the length of the buffer in bytes
    Returns:the number of bytes written or -1 in case of error

    +

    Function: xmlParserGetDirectory

    char *	xmlParserGetDirectory		(const char * filename)
    +

    lookup the directory for that file

    +
    filename:the path to a file
    Returns:a new allocated string containing the directory, or NULL.

    Function: xmlParserInputBufferCreateFd

    xmlParserInputBufferPtr	xmlParserInputBufferCreateFd	(int fd, 
    xmlCharEncoding enc)
    +

    Create a buffered parser input for the progressive parsing for the input from a file descriptor

    +
    fd:a file descriptor number
    enc:the charset encoding if known
    Returns:the new parser input or NULL

    Function: xmlParserInputBufferCreateFile

    xmlParserInputBufferPtr	xmlParserInputBufferCreateFile	(FILE * file, 
    xmlCharEncoding enc)
    +

    Create a buffered parser input for the progressive parsing of a FILE * buffered C I/O

    +
    file:a FILE*
    enc:the charset encoding if known
    Returns:the new parser input or NULL

    Function: xmlParserInputBufferCreateFilename

    xmlParserInputBufferPtr	xmlParserInputBufferCreateFilename	(const char * URI, 
    xmlCharEncoding enc)
    +

    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

    +
    URI:a C string containing the URI or filename
    enc:the charset encoding if known
    Returns:the new parser input or NULL

    Function: xmlParserInputBufferCreateIO

    xmlParserInputBufferPtr	xmlParserInputBufferCreateIO	(xmlInputReadCallback ioread, 
    xmlInputCloseCallback ioclose,
    void * ioctx,
    xmlCharEncoding enc)
    +

    Create a buffered parser input for the progressive parsing for the input from an I/O handler

    +
    ioread:an I/O read function
    ioclose:an I/O close function
    ioctx:an I/O handler
    enc:the charset encoding if known
    Returns:the new parser input or NULL

    Function: xmlParserInputBufferCreateMem

    xmlParserInputBufferPtr	xmlParserInputBufferCreateMem	(const char * mem, 
    int size,
    xmlCharEncoding enc)
    +

    Create a buffered parser input for the progressive parsing for the input from a memory area.

    +
    mem:the memory input
    size:the length of the memory block
    enc:the charset encoding if known
    Returns:the new parser input or NULL

    Function: xmlParserInputBufferCreateStatic

    xmlParserInputBufferPtr	xmlParserInputBufferCreateStatic	(const char * mem, 
    int size,
    xmlCharEncoding enc)
    +

    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.

    +
    mem:the memory input
    size:the length of the memory block
    enc:the charset encoding if known
    Returns:the new parser input or NULL

    Function: xmlParserInputBufferGrow

    int	xmlParserInputBufferGrow	(xmlParserInputBufferPtr in, 
    int len)
    +

    Grow up the content of the input buffer, the old data are preserved This routine handle the I18N transcoding to internal UTF-8 This routine is used when operating the parser in normal (pull) mode TODO: one should be able to remove one extra copy by copying directly onto in->buffer or in->raw

    +
    in:a buffered parser input
    len:indicative value of the amount of chars to read
    Returns:the number of chars read and stored in the buffer, or -1 in case of error.

    Function: xmlParserInputBufferPush

    int	xmlParserInputBufferPush	(xmlParserInputBufferPtr in, 
    int len,
    const char * buf)
    +

    Push the content of the arry in the input buffer This routine handle the I18N transcoding to internal UTF-8 This is used when operating the parser in progressive (push) mode.

    +
    in:a buffered parser input
    len:the size in bytes of the array.
    buf:an char array
    Returns:the number of chars read and stored in the buffer, or -1 in case of error.

    Function: xmlParserInputBufferRead

    int	xmlParserInputBufferRead	(xmlParserInputBufferPtr in, 
    int len)
    +

    Refresh the content of the input buffer, the old data are considered consumed This routine handle the I18N transcoding to internal UTF-8

    +
    in:a buffered parser input
    len:indicative value of the amount of chars to read
    Returns:the number of chars read and stored in the buffer, or -1 in case of error.

    Function: xmlPopInputCallbacks

    int	xmlPopInputCallbacks		(void)
    +

    Clear the top input callback from the input stack. this includes the compiled-in I/O.

    +
    Returns:the number of input callback registered or -1 in case of error.

    Function: xmlRegisterDefaultInputCallbacks

    void	xmlRegisterDefaultInputCallbacks	(void)
    +

    Registers the default compiled-in I/O handlers.

    +

    Function: xmlRegisterDefaultOutputCallbacks

    void	xmlRegisterDefaultOutputCallbacks	(void)
    +

    Registers the default compiled-in I/O handlers.

    +

    Function: xmlRegisterHTTPPostCallbacks

    void	xmlRegisterHTTPPostCallbacks	(void)
    +

    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.

    +

    Function: xmlRegisterInputCallbacks

    int	xmlRegisterInputCallbacks	(xmlInputMatchCallback matchFunc, 
    xmlInputOpenCallback openFunc,
    xmlInputReadCallback readFunc,
    xmlInputCloseCallback closeFunc)
    +

    Register a new set of I/O callback for handling parser input.

    +
    matchFunc:the xmlInputMatchCallback
    openFunc:the xmlInputOpenCallback
    readFunc:the xmlInputReadCallback
    closeFunc:the xmlInputCloseCallback
    Returns:the registered handler number or -1 in case of error

    Function: xmlRegisterOutputCallbacks

    int	xmlRegisterOutputCallbacks	(xmlOutputMatchCallback matchFunc, 
    xmlOutputOpenCallback openFunc,
    xmlOutputWriteCallback writeFunc,
    xmlOutputCloseCallback closeFunc)
    +

    Register a new set of I/O callback for handling output.

    +
    matchFunc:the xmlOutputMatchCallback
    openFunc:the xmlOutputOpenCallback
    writeFunc:the xmlOutputWriteCallback
    closeFunc:the xmlOutputCloseCallback
    Returns:the registered handler number or -1 in case of error

    Daniel Veillard

    diff --git a/doc/html/libxml-xmlautomata.html b/doc/html/libxml-xmlautomata.html new file mode 100644 index 0000000..a07f7c0 --- /dev/null +++ b/doc/html/libxml-xmlautomata.html @@ -0,0 +1,85 @@ + + +Module xmlautomata from libxml2
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    Module xmlautomata from libxml2

    API Menu
    API Indexes
    Related links

    the API to build regexp automata

    Table of Contents

    Structure xmlAutomata
    struct _xmlAutomata +The content of this structure is not made public by the API. +
    Typedef xmlAutomata * xmlAutomataPtr
    +
    Structure xmlAutomataState
    struct _xmlAutomataState +The content of this structure is not made public by the API. +
    Typedef xmlAutomataState * xmlAutomataStatePtr
    +
    xmlRegexpPtr	xmlAutomataCompile	(xmlAutomataPtr am)
    +
    xmlAutomataStatePtr	xmlAutomataGetInitState	(xmlAutomataPtr am)
    +
    int	xmlAutomataIsDeterminist	(xmlAutomataPtr am)
    +
    xmlAutomataStatePtr	xmlAutomataNewAllTrans	(xmlAutomataPtr am, 
    xmlAutomataStatePtr from,
    xmlAutomataStatePtr to,
    int lax)
    +
    xmlAutomataStatePtr	xmlAutomataNewCountTrans	(xmlAutomataPtr am, 
    xmlAutomataStatePtr from,
    xmlAutomataStatePtr to,
    const xmlChar * token,
    int min,
    int max,
    void * data)
    +
    xmlAutomataStatePtr	xmlAutomataNewCountTrans2	(xmlAutomataPtr am, 
    xmlAutomataStatePtr from,
    xmlAutomataStatePtr to,
    const xmlChar * token,
    const xmlChar * token2,
    int min,
    int max,
    void * data)
    +
    xmlAutomataStatePtr	xmlAutomataNewCountedTrans	(xmlAutomataPtr am, 
    xmlAutomataStatePtr from,
    xmlAutomataStatePtr to,
    int counter)
    +
    int	xmlAutomataNewCounter		(xmlAutomataPtr am, 
    int min,
    int max)
    +
    xmlAutomataStatePtr	xmlAutomataNewCounterTrans	(xmlAutomataPtr am, 
    xmlAutomataStatePtr from,
    xmlAutomataStatePtr to,
    int counter)
    +
    xmlAutomataStatePtr	xmlAutomataNewEpsilon	(xmlAutomataPtr am, 
    xmlAutomataStatePtr from,
    xmlAutomataStatePtr to)
    +
    xmlAutomataStatePtr	xmlAutomataNewNegTrans	(xmlAutomataPtr am, 
    xmlAutomataStatePtr from,
    xmlAutomataStatePtr to,
    const xmlChar * token,
    const xmlChar * token2,
    void * data)
    +
    xmlAutomataStatePtr	xmlAutomataNewOnceTrans	(xmlAutomataPtr am, 
    xmlAutomataStatePtr from,
    xmlAutomataStatePtr to,
    const xmlChar * token,
    int min,
    int max,
    void * data)
    +
    xmlAutomataStatePtr	xmlAutomataNewOnceTrans2	(xmlAutomataPtr am, 
    xmlAutomataStatePtr from,
    xmlAutomataStatePtr to,
    const xmlChar * token,
    const xmlChar * token2,
    int min,
    int max,
    void * data)
    +
    xmlAutomataStatePtr	xmlAutomataNewState	(xmlAutomataPtr am)
    +
    xmlAutomataStatePtr	xmlAutomataNewTransition	(xmlAutomataPtr am, 
    xmlAutomataStatePtr from,
    xmlAutomataStatePtr to,
    const xmlChar * token,
    void * data)
    +
    xmlAutomataStatePtr	xmlAutomataNewTransition2	(xmlAutomataPtr am, 
    xmlAutomataStatePtr from,
    xmlAutomataStatePtr to,
    const xmlChar * token,
    const xmlChar * token2,
    void * data)
    +
    int	xmlAutomataSetFinalState	(xmlAutomataPtr am, 
    xmlAutomataStatePtr state)
    +
    void	xmlFreeAutomata			(xmlAutomataPtr am)
    +
    xmlAutomataPtr	xmlNewAutomata		(void)
    +

    Description

    +

    Structure xmlAutomata

    Structure xmlAutomata
    struct _xmlAutomata { +The content of this structure is not made public by the API. +}
    + A libxml automata description, It can be compiled into a regexp +

    Structure xmlAutomataState

    Structure xmlAutomataState
    struct _xmlAutomataState { +The content of this structure is not made public by the API. +}
    + A state int the automata description, +

    Function: xmlAutomataCompile

    xmlRegexpPtr	xmlAutomataCompile	(xmlAutomataPtr am)
    +

    Compile the automata into a Reg Exp ready for being executed. The automata should be free after this point.

    +
    am:an automata
    Returns:the compiled regexp or NULL in case of error

    Function: xmlAutomataGetInitState

    xmlAutomataStatePtr	xmlAutomataGetInitState	(xmlAutomataPtr am)
    +

    Initial state lookup

    +
    am:an automata
    Returns:the initial state of the automata

    Function: xmlAutomataIsDeterminist

    int	xmlAutomataIsDeterminist	(xmlAutomataPtr am)
    +

    Checks if an automata is determinist.

    +
    am:an automata
    Returns:1 if true, 0 if not, and -1 in case of error

    Function: xmlAutomataNewAllTrans

    xmlAutomataStatePtr	xmlAutomataNewAllTrans	(xmlAutomataPtr am, 
    xmlAutomataStatePtr from,
    xmlAutomataStatePtr to,
    int lax)
    +

    If @to is NULL, this creates 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.

    +
    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
    Returns:the target state or NULL in case of error

    Function: xmlAutomataNewCountTrans

    xmlAutomataStatePtr	xmlAutomataNewCountTrans	(xmlAutomataPtr am, 
    xmlAutomataStatePtr from,
    xmlAutomataStatePtr to,
    const xmlChar * token,
    int min,
    int max,
    void * data)
    +

    If @to is NULL, this creates first a new target state in the automata and then adds a transition from the @from state to the target state activated by a succession of input of value @token and whose number is between @min and @max

    +
    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
    Returns:the target state or NULL in case of error

    Function: xmlAutomataNewCountTrans2

    xmlAutomataStatePtr	xmlAutomataNewCountTrans2	(xmlAutomataPtr am, 
    xmlAutomataStatePtr from,
    xmlAutomataStatePtr to,
    const xmlChar * token,
    const xmlChar * token2,
    int min,
    int max,
    void * data)
    +

    If @to is NULL, this creates first a new target state in the automata and then adds a transition from the @from state to the target state activated by a succession of input of value @token and @token2 and whose number is between @min and @max

    +
    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
    token2:the second 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
    Returns:the target state or NULL in case of error

    Function: xmlAutomataNewCountedTrans

    xmlAutomataStatePtr	xmlAutomataNewCountedTrans	(xmlAutomataPtr am, 
    xmlAutomataStatePtr from,
    xmlAutomataStatePtr to,
    int counter)
    +

    If @to is NULL, this creates first a new target state in the automata and then adds an epsilon transition from the @from state to the target state which will increment the counter provided

    +
    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
    Returns:the target state or NULL in case of error

    Function: xmlAutomataNewCounter

    int	xmlAutomataNewCounter		(xmlAutomataPtr am, 
    int min,
    int max)
    +

    Create a new counter

    +
    am:an automata
    min:the minimal value on the counter
    max:the maximal value on the counter
    Returns:the counter number or -1 in case of error

    Function: xmlAutomataNewCounterTrans

    xmlAutomataStatePtr	xmlAutomataNewCounterTrans	(xmlAutomataPtr am, 
    xmlAutomataStatePtr from,
    xmlAutomataStatePtr to,
    int counter)
    +

    If @to is NULL, this creates first a new target state in the automata and then adds an epsilon transition from the @from state to the target state which will be allowed only if the counter is within the right range.

    +
    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
    Returns:the target state or NULL in case of error

    Function: xmlAutomataNewEpsilon

    xmlAutomataStatePtr	xmlAutomataNewEpsilon	(xmlAutomataPtr am, 
    xmlAutomataStatePtr from,
    xmlAutomataStatePtr to)
    +

    If @to is NULL, this creates first a new target state in the automata and then adds an epsilon transition from the @from state to the target state

    +
    am:an automata
    from:the starting point of the transition
    to:the target point of the transition or NULL
    Returns:the target state or NULL in case of error

    Function: xmlAutomataNewNegTrans

    xmlAutomataStatePtr	xmlAutomataNewNegTrans	(xmlAutomataPtr am, 
    xmlAutomataStatePtr from,
    xmlAutomataStatePtr to,
    const xmlChar * token,
    const xmlChar * token2,
    void * data)
    +

    If @to is NULL, this creates first a new target state in the automata and then adds a transition from the @from state to the target state activated by any value except (@token,@token2) Note that if @token2 is not NULL, then (X, NULL) won't match to follow # the semantic of XSD ##other

    +
    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
    Returns:the target state or NULL in case of error

    Function: xmlAutomataNewOnceTrans

    xmlAutomataStatePtr	xmlAutomataNewOnceTrans	(xmlAutomataPtr am, 
    xmlAutomataStatePtr from,
    xmlAutomataStatePtr to,
    const xmlChar * token,
    int min,
    int max,
    void * data)
    +

    If @to is NULL, this creates first a new target state in the automata and then adds a transition from the @from state to the target state activated by a succession of input of value @token and whose number is between @min and @max, moreover that transition can only be crossed once.

    +
    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
    Returns:the target state or NULL in case of error

    Function: xmlAutomataNewOnceTrans2

    xmlAutomataStatePtr	xmlAutomataNewOnceTrans2	(xmlAutomataPtr am, 
    xmlAutomataStatePtr from,
    xmlAutomataStatePtr to,
    const xmlChar * token,
    const xmlChar * token2,
    int min,
    int max,
    void * data)
    +

    If @to is NULL, this creates first a new target state in the automata and then adds a transition from the @from state to the target state activated by a succession of input of value @token and @token2 and whose number is between @min and @max, moreover that transition can only be crossed once.

    +
    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
    token2:the second 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
    Returns:the target state or NULL in case of error

    Function: xmlAutomataNewState

    xmlAutomataStatePtr	xmlAutomataNewState	(xmlAutomataPtr am)
    +

    Create a new disconnected state in the automata

    +
    am:an automata
    Returns:the new state or NULL in case of error

    Function: xmlAutomataNewTransition

    xmlAutomataStatePtr	xmlAutomataNewTransition	(xmlAutomataPtr am, 
    xmlAutomataStatePtr from,
    xmlAutomataStatePtr to,
    const xmlChar * token,
    void * data)
    +

    If @to is NULL, this creates first a new target state in the automata and then adds a transition from the @from state to the target state activated by the value of @token

    +
    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
    Returns:the target state or NULL in case of error

    Function: xmlAutomataNewTransition2

    xmlAutomataStatePtr	xmlAutomataNewTransition2	(xmlAutomataPtr am, 
    xmlAutomataStatePtr from,
    xmlAutomataStatePtr to,
    const xmlChar * token,
    const xmlChar * token2,
    void * data)
    +

    If @to is NULL, this creates first a new target state in the automata and then adds a transition from the @from state to the target state activated by the value of @token

    +
    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
    Returns:the target state or NULL in case of error

    Function: xmlAutomataSetFinalState

    int	xmlAutomataSetFinalState	(xmlAutomataPtr am, 
    xmlAutomataStatePtr state)
    +

    Makes that state a final state

    +
    am:an automata
    state:a state in this automata
    Returns:0 or -1 in case of error

    Function: xmlFreeAutomata

    void	xmlFreeAutomata			(xmlAutomataPtr am)
    +

    Free an automata

    +
    am:an automata

    Function: xmlNewAutomata

    xmlAutomataPtr	xmlNewAutomata		(void)
    +

    Create a new automata

    +
    Returns:the new object or NULL in case of failure

    Daniel Veillard

    diff --git a/doc/html/libxml-xmlerror.html b/doc/html/libxml-xmlerror.html new file mode 100644 index 0000000..5c3a104 --- /dev/null +++ b/doc/html/libxml-xmlerror.html @@ -0,0 +1,865 @@ + + +Module xmlerror from libxml2
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    Module xmlerror from libxml2

    API Menu
    API Indexes
    Related links

    the API used to report errors

    Table of Contents

    Structure xmlError
    struct _xmlError +
    Enum xmlErrorDomain
    +
    Enum xmlErrorLevel
    +
    Typedef xmlError * xmlErrorPtr
    +
    Enum xmlParserErrors
    +
    void	initGenericErrorDefaultFunc	(xmlGenericErrorFunc * handler)
    +
    int	xmlCopyError			(xmlErrorPtr from, 
    xmlErrorPtr to)
    +
    xmlErrorPtr	xmlCtxtGetLastError	(void * ctx)
    +
    void	xmlCtxtResetLastError		(void * ctx)
    +
    Function type: xmlGenericErrorFunc
    +void	xmlGenericErrorFunc		(void * ctx, 
    const char * msg,
    ... ...) +
    +
    xmlErrorPtr	xmlGetLastError		(void)
    +
    void	xmlParserError			(void * ctx, 
    const char * msg,
    ... ...)
    +
    void	xmlParserPrintFileContext	(xmlParserInputPtr input)
    +
    void	xmlParserPrintFileInfo		(xmlParserInputPtr input)
    +
    void	xmlParserValidityError		(void * ctx, 
    const char * msg,
    ... ...)
    +
    void	xmlParserValidityWarning	(void * ctx, 
    const char * msg,
    ... ...)
    +
    void	xmlParserWarning		(void * ctx, 
    const char * msg,
    ... ...)
    +
    void	xmlResetError			(xmlErrorPtr err)
    +
    void	xmlResetLastError		(void)
    +
    void	xmlSetGenericErrorFunc		(void * ctx, 
    xmlGenericErrorFunc handler)
    +
    void	xmlSetStructuredErrorFunc	(void * ctx, 
    xmlStructuredErrorFunc handler)
    +
    Function type: xmlStructuredErrorFunc
    +void	xmlStructuredErrorFunc		(void * userData, 
    xmlErrorPtr error) +
    +

    Description

    +

    Structure xmlError

    Structure xmlError
    struct _xmlError { + int domain : What part of the library raised this er + int code : The error code, e.g. an xmlParserError + char * message : human-readable informative error messag + 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 : error column # or 0 if N/A (todo: renam + void * ctxt : the parser context if available + void * node : the node in the tree +}

    Enum xmlErrorDomain

    Enum xmlErrorDomain {
    +    XML_FROM_NONE = 0
    +    XML_FROM_PARSER = 1 : The XML parser
    +    XML_FROM_TREE = 2 : The tree module
    +    XML_FROM_NAMESPACE = 3 : The XML Namespace module
    +    XML_FROM_DTD = 4 : The XML DTD validation with parser contex
    +    XML_FROM_HTML = 5 : The HTML parser
    +    XML_FROM_MEMORY = 6 : The memory allocator
    +    XML_FROM_OUTPUT = 7 : The serialization code
    +    XML_FROM_IO = 8 : The Input/Output stack
    +    XML_FROM_FTP = 9 : The FTP module
    +    XML_FROM_HTTP = 10 : The HTTP module
    +    XML_FROM_XINCLUDE = 11 : The XInclude processing
    +    XML_FROM_XPATH = 12 : The XPath module
    +    XML_FROM_XPOINTER = 13 : The XPointer module
    +    XML_FROM_REGEXP = 14 : The regular expressions module
    +    XML_FROM_DATATYPE = 15 : The W3C XML Schemas Datatype module
    +    XML_FROM_SCHEMASP = 16 : The W3C XML Schemas parser module
    +    XML_FROM_SCHEMASV = 17 : The W3C XML Schemas validation module
    +    XML_FROM_RELAXNGP = 18 : The Relax-NG parser module
    +    XML_FROM_RELAXNGV = 19 : The Relax-NG validator module
    +    XML_FROM_CATALOG = 20 : The Catalog module
    +    XML_FROM_C14N = 21 : The Canonicalization module
    +    XML_FROM_XSLT = 22 : The XSLT engine from libxslt
    +    XML_FROM_VALID = 23 : The XML DTD validation with valid context
    +    XML_FROM_CHECK = 24 : The error checking module
    +    XML_FROM_WRITER = 25 : The xmlwriter module
    +    XML_FROM_MODULE = 26 : The dynamically loaded module modul
    +    XML_FROM_I18N = 27 : The module handling character conversion
    +    XML_FROM_SCHEMATRONV = 28 : The Schematron validator module
    +    XML_FROM_BUFFER = 29 : The buffers module
    +    XML_FROM_URI = 30 : The URI module
    +}
    +

    Enum xmlErrorLevel

    Enum xmlErrorLevel {
    +    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
    +}
    +

    Enum xmlParserErrors

    Enum xmlParserErrors {
    +    XML_ERR_OK = 0
    +    XML_ERR_INTERNAL_ERROR = 1 : 1
    +    XML_ERR_NO_MEMORY = 2 : 2
    +    XML_ERR_DOCUMENT_START = 3 : 3
    +    XML_ERR_DOCUMENT_EMPTY = 4 : 4
    +    XML_ERR_DOCUMENT_END = 5 : 5
    +    XML_ERR_INVALID_HEX_CHARREF = 6 : 6
    +    XML_ERR_INVALID_DEC_CHARREF = 7 : 7
    +    XML_ERR_INVALID_CHARREF = 8 : 8
    +    XML_ERR_INVALID_CHAR = 9 : 9
    +    XML_ERR_CHARREF_AT_EOF = 10 : 10
    +    XML_ERR_CHARREF_IN_PROLOG = 11 : 11
    +    XML_ERR_CHARREF_IN_EPILOG = 12 : 12
    +    XML_ERR_CHARREF_IN_DTD = 13 : 13
    +    XML_ERR_ENTITYREF_AT_EOF = 14 : 14
    +    XML_ERR_ENTITYREF_IN_PROLOG = 15 : 15
    +    XML_ERR_ENTITYREF_IN_EPILOG = 16 : 16
    +    XML_ERR_ENTITYREF_IN_DTD = 17 : 17
    +    XML_ERR_PEREF_AT_EOF = 18 : 18
    +    XML_ERR_PEREF_IN_PROLOG = 19 : 19
    +    XML_ERR_PEREF_IN_EPILOG = 20 : 20
    +    XML_ERR_PEREF_IN_INT_SUBSET = 21 : 21
    +    XML_ERR_ENTITYREF_NO_NAME = 22 : 22
    +    XML_ERR_ENTITYREF_SEMICOL_MISSING = 23 : 23
    +    XML_ERR_PEREF_NO_NAME = 24 : 24
    +    XML_ERR_PEREF_SEMICOL_MISSING = 25 : 25
    +    XML_ERR_UNDECLARED_ENTITY = 26 : 26
    +    XML_WAR_UNDECLARED_ENTITY = 27 : 27
    +    XML_ERR_UNPARSED_ENTITY = 28 : 28
    +    XML_ERR_ENTITY_IS_EXTERNAL = 29 : 29
    +    XML_ERR_ENTITY_IS_PARAMETER = 30 : 30
    +    XML_ERR_UNKNOWN_ENCODING = 31 : 31
    +    XML_ERR_UNSUPPORTED_ENCODING = 32 : 32
    +    XML_ERR_STRING_NOT_STARTED = 33 : 33
    +    XML_ERR_STRING_NOT_CLOSED = 34 : 34
    +    XML_ERR_NS_DECL_ERROR = 35 : 35
    +    XML_ERR_ENTITY_NOT_STARTED = 36 : 36
    +    XML_ERR_ENTITY_NOT_FINISHED = 37 : 37
    +    XML_ERR_LT_IN_ATTRIBUTE = 38 : 38
    +    XML_ERR_ATTRIBUTE_NOT_STARTED = 39 : 39
    +    XML_ERR_ATTRIBUTE_NOT_FINISHED = 40 : 40
    +    XML_ERR_ATTRIBUTE_WITHOUT_VALUE = 41 : 41
    +    XML_ERR_ATTRIBUTE_REDEFINED = 42 : 42
    +    XML_ERR_LITERAL_NOT_STARTED = 43 : 43
    +    XML_ERR_LITERAL_NOT_FINISHED = 44 : 44
    +    XML_ERR_COMMENT_NOT_FINISHED = 45 : 45
    +    XML_ERR_PI_NOT_STARTED = 46 : 46
    +    XML_ERR_PI_NOT_FINISHED = 47 : 47
    +    XML_ERR_NOTATION_NOT_STARTED = 48 : 48
    +    XML_ERR_NOTATION_NOT_FINISHED = 49 : 49
    +    XML_ERR_ATTLIST_NOT_STARTED = 50 : 50
    +    XML_ERR_ATTLIST_NOT_FINISHED = 51 : 51
    +    XML_ERR_MIXED_NOT_STARTED = 52 : 52
    +    XML_ERR_MIXED_NOT_FINISHED = 53 : 53
    +    XML_ERR_ELEMCONTENT_NOT_STARTED = 54 : 54
    +    XML_ERR_ELEMCONTENT_NOT_FINISHED = 55 : 55
    +    XML_ERR_XMLDECL_NOT_STARTED = 56 : 56
    +    XML_ERR_XMLDECL_NOT_FINISHED = 57 : 57
    +    XML_ERR_CONDSEC_NOT_STARTED = 58 : 58
    +    XML_ERR_CONDSEC_NOT_FINISHED = 59 : 59
    +    XML_ERR_EXT_SUBSET_NOT_FINISHED = 60 : 60
    +    XML_ERR_DOCTYPE_NOT_FINISHED = 61 : 61
    +    XML_ERR_MISPLACED_CDATA_END = 62 : 62
    +    XML_ERR_CDATA_NOT_FINISHED = 63 : 63
    +    XML_ERR_RESERVED_XML_NAME = 64 : 64
    +    XML_ERR_SPACE_REQUIRED = 65 : 65
    +    XML_ERR_SEPARATOR_REQUIRED = 66 : 66
    +    XML_ERR_NMTOKEN_REQUIRED = 67 : 67
    +    XML_ERR_NAME_REQUIRED = 68 : 68
    +    XML_ERR_PCDATA_REQUIRED = 69 : 69
    +    XML_ERR_URI_REQUIRED = 70 : 70
    +    XML_ERR_PUBID_REQUIRED = 71 : 71
    +    XML_ERR_LT_REQUIRED = 72 : 72
    +    XML_ERR_GT_REQUIRED = 73 : 73
    +    XML_ERR_LTSLASH_REQUIRED = 74 : 74
    +    XML_ERR_EQUAL_REQUIRED = 75 : 75
    +    XML_ERR_TAG_NAME_MISMATCH = 76 : 76
    +    XML_ERR_TAG_NOT_FINISHED = 77 : 77
    +    XML_ERR_STANDALONE_VALUE = 78 : 78
    +    XML_ERR_ENCODING_NAME = 79 : 79
    +    XML_ERR_HYPHEN_IN_COMMENT = 80 : 80
    +    XML_ERR_INVALID_ENCODING = 81 : 81
    +    XML_ERR_EXT_ENTITY_STANDALONE = 82 : 82
    +    XML_ERR_CONDSEC_INVALID = 83 : 83
    +    XML_ERR_VALUE_REQUIRED = 84 : 84
    +    XML_ERR_NOT_WELL_BALANCED = 85 : 85
    +    XML_ERR_EXTRA_CONTENT = 86 : 86
    +    XML_ERR_ENTITY_CHAR_ERROR = 87 : 87
    +    XML_ERR_ENTITY_PE_INTERNAL = 88 : 88
    +    XML_ERR_ENTITY_LOOP = 89 : 89
    +    XML_ERR_ENTITY_BOUNDARY = 90 : 90
    +    XML_ERR_INVALID_URI = 91 : 91
    +    XML_ERR_URI_FRAGMENT = 92 : 92
    +    XML_WAR_CATALOG_PI = 93 : 93
    +    XML_ERR_NO_DTD = 94 : 94
    +    XML_ERR_CONDSEC_INVALID_KEYWORD = 95 : 95
    +    XML_ERR_VERSION_MISSING = 96 : 96
    +    XML_WAR_UNKNOWN_VERSION = 97 : 97
    +    XML_WAR_LANG_VALUE = 98 : 98
    +    XML_WAR_NS_URI = 99 : 99
    +    XML_WAR_NS_URI_RELATIVE = 100 : 100
    +    XML_ERR_MISSING_ENCODING = 101 : 101
    +    XML_WAR_SPACE_VALUE = 102 : 102
    +    XML_ERR_NOT_STANDALONE = 103 : 103
    +    XML_ERR_ENTITY_PROCESSING = 104 : 104
    +    XML_ERR_NOTATION_PROCESSING = 105 : 105
    +    XML_WAR_NS_COLUMN = 106 : 106
    +    XML_WAR_ENTITY_REDEFINED = 107 : 107
    +    XML_ERR_UNKNOWN_VERSION = 108 : 108
    +    XML_ERR_VERSION_MISMATCH = 109 : 109
    +    XML_ERR_NAME_TOO_LONG = 110 : 110
    +    XML_ERR_USER_STOP = 111 : 111
    +    XML_NS_ERR_XML_NAMESPACE = 200
    +    XML_NS_ERR_UNDEFINED_NAMESPACE = 201 : 201
    +    XML_NS_ERR_QNAME = 202 : 202
    +    XML_NS_ERR_ATTRIBUTE_REDEFINED = 203 : 203
    +    XML_NS_ERR_EMPTY = 204 : 204
    +    XML_NS_ERR_COLON = 205 : 205
    +    XML_DTD_ATTRIBUTE_DEFAULT = 500
    +    XML_DTD_ATTRIBUTE_REDEFINED = 501 : 501
    +    XML_DTD_ATTRIBUTE_VALUE = 502 : 502
    +    XML_DTD_CONTENT_ERROR = 503 : 503
    +    XML_DTD_CONTENT_MODEL = 504 : 504
    +    XML_DTD_CONTENT_NOT_DETERMINIST = 505 : 505
    +    XML_DTD_DIFFERENT_PREFIX = 506 : 506
    +    XML_DTD_ELEM_DEFAULT_NAMESPACE = 507 : 507
    +    XML_DTD_ELEM_NAMESPACE = 508 : 508
    +    XML_DTD_ELEM_REDEFINED = 509 : 509
    +    XML_DTD_EMPTY_NOTATION = 510 : 510
    +    XML_DTD_ENTITY_TYPE = 511 : 511
    +    XML_DTD_ID_FIXED = 512 : 512
    +    XML_DTD_ID_REDEFINED = 513 : 513
    +    XML_DTD_ID_SUBSET = 514 : 514
    +    XML_DTD_INVALID_CHILD = 515 : 515
    +    XML_DTD_INVALID_DEFAULT = 516 : 516
    +    XML_DTD_LOAD_ERROR = 517 : 517
    +    XML_DTD_MISSING_ATTRIBUTE = 518 : 518
    +    XML_DTD_MIXED_CORRUPT = 519 : 519
    +    XML_DTD_MULTIPLE_ID = 520 : 520
    +    XML_DTD_NO_DOC = 521 : 521
    +    XML_DTD_NO_DTD = 522 : 522
    +    XML_DTD_NO_ELEM_NAME = 523 : 523
    +    XML_DTD_NO_PREFIX = 524 : 524
    +    XML_DTD_NO_ROOT = 525 : 525
    +    XML_DTD_NOTATION_REDEFINED = 526 : 526
    +    XML_DTD_NOTATION_VALUE = 527 : 527
    +    XML_DTD_NOT_EMPTY = 528 : 528
    +    XML_DTD_NOT_PCDATA = 529 : 529
    +    XML_DTD_NOT_STANDALONE = 530 : 530
    +    XML_DTD_ROOT_NAME = 531 : 531
    +    XML_DTD_STANDALONE_WHITE_SPACE = 532 : 532
    +    XML_DTD_UNKNOWN_ATTRIBUTE = 533 : 533
    +    XML_DTD_UNKNOWN_ELEM = 534 : 534
    +    XML_DTD_UNKNOWN_ENTITY = 535 : 535
    +    XML_DTD_UNKNOWN_ID = 536 : 536
    +    XML_DTD_UNKNOWN_NOTATION = 537 : 537
    +    XML_DTD_STANDALONE_DEFAULTED = 538 : 538
    +    XML_DTD_XMLID_VALUE = 539 : 539
    +    XML_DTD_XMLID_TYPE = 540 : 540
    +    XML_DTD_DUP_TOKEN = 541 : 541
    +    XML_HTML_STRUCURE_ERROR = 800
    +    XML_HTML_UNKNOWN_TAG = 801 : 801
    +    XML_RNGP_ANYNAME_ATTR_ANCESTOR = 1000
    +    XML_RNGP_ATTR_CONFLICT = 1001 : 1001
    +    XML_RNGP_ATTRIBUTE_CHILDREN = 1002 : 1002
    +    XML_RNGP_ATTRIBUTE_CONTENT = 1003 : 1003
    +    XML_RNGP_ATTRIBUTE_EMPTY = 1004 : 1004
    +    XML_RNGP_ATTRIBUTE_NOOP = 1005 : 1005
    +    XML_RNGP_CHOICE_CONTENT = 1006 : 1006
    +    XML_RNGP_CHOICE_EMPTY = 1007 : 1007
    +    XML_RNGP_CREATE_FAILURE = 1008 : 1008
    +    XML_RNGP_DATA_CONTENT = 1009 : 1009
    +    XML_RNGP_DEF_CHOICE_AND_INTERLEAVE = 1010 : 1010
    +    XML_RNGP_DEFINE_CREATE_FAILED = 1011 : 1011
    +    XML_RNGP_DEFINE_EMPTY = 1012 : 1012
    +    XML_RNGP_DEFINE_MISSING = 1013 : 1013
    +    XML_RNGP_DEFINE_NAME_MISSING = 1014 : 1014
    +    XML_RNGP_ELEM_CONTENT_EMPTY = 1015 : 1015
    +    XML_RNGP_ELEM_CONTENT_ERROR = 1016 : 1016
    +    XML_RNGP_ELEMENT_EMPTY = 1017 : 1017
    +    XML_RNGP_ELEMENT_CONTENT = 1018 : 1018
    +    XML_RNGP_ELEMENT_NAME = 1019 : 1019
    +    XML_RNGP_ELEMENT_NO_CONTENT = 1020 : 1020
    +    XML_RNGP_ELEM_TEXT_CONFLICT = 1021 : 1021
    +    XML_RNGP_EMPTY = 1022 : 1022
    +    XML_RNGP_EMPTY_CONSTRUCT = 1023 : 1023
    +    XML_RNGP_EMPTY_CONTENT = 1024 : 1024
    +    XML_RNGP_EMPTY_NOT_EMPTY = 1025 : 1025
    +    XML_RNGP_ERROR_TYPE_LIB = 1026 : 1026
    +    XML_RNGP_EXCEPT_EMPTY = 1027 : 1027
    +    XML_RNGP_EXCEPT_MISSING = 1028 : 1028
    +    XML_RNGP_EXCEPT_MULTIPLE = 1029 : 1029
    +    XML_RNGP_EXCEPT_NO_CONTENT = 1030 : 1030
    +    XML_RNGP_EXTERNALREF_EMTPY = 1031 : 1031
    +    XML_RNGP_EXTERNAL_REF_FAILURE = 1032 : 1032
    +    XML_RNGP_EXTERNALREF_RECURSE = 1033 : 1033
    +    XML_RNGP_FORBIDDEN_ATTRIBUTE = 1034 : 1034
    +    XML_RNGP_FOREIGN_ELEMENT = 1035 : 1035
    +    XML_RNGP_GRAMMAR_CONTENT = 1036 : 1036
    +    XML_RNGP_GRAMMAR_EMPTY = 1037 : 1037
    +    XML_RNGP_GRAMMAR_MISSING = 1038 : 1038
    +    XML_RNGP_GRAMMAR_NO_START = 1039 : 1039
    +    XML_RNGP_GROUP_ATTR_CONFLICT = 1040 : 1040
    +    XML_RNGP_HREF_ERROR = 1041 : 1041
    +    XML_RNGP_INCLUDE_EMPTY = 1042 : 1042
    +    XML_RNGP_INCLUDE_FAILURE = 1043 : 1043
    +    XML_RNGP_INCLUDE_RECURSE = 1044 : 1044
    +    XML_RNGP_INTERLEAVE_ADD = 1045 : 1045
    +    XML_RNGP_INTERLEAVE_CREATE_FAILED = 1046 : 1046
    +    XML_RNGP_INTERLEAVE_EMPTY = 1047 : 1047
    +    XML_RNGP_INTERLEAVE_NO_CONTENT = 1048 : 1048
    +    XML_RNGP_INVALID_DEFINE_NAME = 1049 : 1049
    +    XML_RNGP_INVALID_URI = 1050 : 1050
    +    XML_RNGP_INVALID_VALUE = 1051 : 1051
    +    XML_RNGP_MISSING_HREF = 1052 : 1052
    +    XML_RNGP_NAME_MISSING = 1053 : 1053
    +    XML_RNGP_NEED_COMBINE = 1054 : 1054
    +    XML_RNGP_NOTALLOWED_NOT_EMPTY = 1055 : 1055
    +    XML_RNGP_NSNAME_ATTR_ANCESTOR = 1056 : 1056
    +    XML_RNGP_NSNAME_NO_NS = 1057 : 1057
    +    XML_RNGP_PARAM_FORBIDDEN = 1058 : 1058
    +    XML_RNGP_PARAM_NAME_MISSING = 1059 : 1059
    +    XML_RNGP_PARENTREF_CREATE_FAILED = 1060 : 1060
    +    XML_RNGP_PARENTREF_NAME_INVALID = 1061 : 1061
    +    XML_RNGP_PARENTREF_NO_NAME = 1062 : 1062
    +    XML_RNGP_PARENTREF_NO_PARENT = 1063 : 1063
    +    XML_RNGP_PARENTREF_NOT_EMPTY = 1064 : 1064
    +    XML_RNGP_PARSE_ERROR = 1065 : 1065
    +    XML_RNGP_PAT_ANYNAME_EXCEPT_ANYNAME = 1066 : 1066
    +    XML_RNGP_PAT_ATTR_ATTR = 1067 : 1067
    +    XML_RNGP_PAT_ATTR_ELEM = 1068 : 1068
    +    XML_RNGP_PAT_DATA_EXCEPT_ATTR = 1069 : 1069
    +    XML_RNGP_PAT_DATA_EXCEPT_ELEM = 1070 : 1070
    +    XML_RNGP_PAT_DATA_EXCEPT_EMPTY = 1071 : 1071
    +    XML_RNGP_PAT_DATA_EXCEPT_GROUP = 1072 : 1072
    +    XML_RNGP_PAT_DATA_EXCEPT_INTERLEAVE = 1073 : 1073
    +    XML_RNGP_PAT_DATA_EXCEPT_LIST = 1074 : 1074
    +    XML_RNGP_PAT_DATA_EXCEPT_ONEMORE = 1075 : 1075
    +    XML_RNGP_PAT_DATA_EXCEPT_REF = 1076 : 1076
    +    XML_RNGP_PAT_DATA_EXCEPT_TEXT = 1077 : 1077
    +    XML_RNGP_PAT_LIST_ATTR = 1078 : 1078
    +    XML_RNGP_PAT_LIST_ELEM = 1079 : 1079
    +    XML_RNGP_PAT_LIST_INTERLEAVE = 1080 : 1080
    +    XML_RNGP_PAT_LIST_LIST = 1081 : 1081
    +    XML_RNGP_PAT_LIST_REF = 1082 : 1082
    +    XML_RNGP_PAT_LIST_TEXT = 1083 : 1083
    +    XML_RNGP_PAT_NSNAME_EXCEPT_ANYNAME = 1084 : 1084
    +    XML_RNGP_PAT_NSNAME_EXCEPT_NSNAME = 1085 : 1085
    +    XML_RNGP_PAT_ONEMORE_GROUP_ATTR = 1086 : 1086
    +    XML_RNGP_PAT_ONEMORE_INTERLEAVE_ATTR = 1087 : 1087
    +    XML_RNGP_PAT_START_ATTR = 1088 : 1088
    +    XML_RNGP_PAT_START_DATA = 1089 : 1089
    +    XML_RNGP_PAT_START_EMPTY = 1090 : 1090
    +    XML_RNGP_PAT_START_GROUP = 1091 : 1091
    +    XML_RNGP_PAT_START_INTERLEAVE = 1092 : 1092
    +    XML_RNGP_PAT_START_LIST = 1093 : 1093
    +    XML_RNGP_PAT_START_ONEMORE = 1094 : 1094
    +    XML_RNGP_PAT_START_TEXT = 1095 : 1095
    +    XML_RNGP_PAT_START_VALUE = 1096 : 1096
    +    XML_RNGP_PREFIX_UNDEFINED = 1097 : 1097
    +    XML_RNGP_REF_CREATE_FAILED = 1098 : 1098
    +    XML_RNGP_REF_CYCLE = 1099 : 1099
    +    XML_RNGP_REF_NAME_INVALID = 1100 : 1100
    +    XML_RNGP_REF_NO_DEF = 1101 : 1101
    +    XML_RNGP_REF_NO_NAME = 1102 : 1102
    +    XML_RNGP_REF_NOT_EMPTY = 1103 : 1103
    +    XML_RNGP_START_CHOICE_AND_INTERLEAVE = 1104 : 1104
    +    XML_RNGP_START_CONTENT = 1105 : 1105
    +    XML_RNGP_START_EMPTY = 1106 : 1106
    +    XML_RNGP_START_MISSING = 1107 : 1107
    +    XML_RNGP_TEXT_EXPECTED = 1108 : 1108
    +    XML_RNGP_TEXT_HAS_CHILD = 1109 : 1109
    +    XML_RNGP_TYPE_MISSING = 1110 : 1110
    +    XML_RNGP_TYPE_NOT_FOUND = 1111 : 1111
    +    XML_RNGP_TYPE_VALUE = 1112 : 1112
    +    XML_RNGP_UNKNOWN_ATTRIBUTE = 1113 : 1113
    +    XML_RNGP_UNKNOWN_COMBINE = 1114 : 1114
    +    XML_RNGP_UNKNOWN_CONSTRUCT = 1115 : 1115
    +    XML_RNGP_UNKNOWN_TYPE_LIB = 1116 : 1116
    +    XML_RNGP_URI_FRAGMENT = 1117 : 1117
    +    XML_RNGP_URI_NOT_ABSOLUTE = 1118 : 1118
    +    XML_RNGP_VALUE_EMPTY = 1119 : 1119
    +    XML_RNGP_VALUE_NO_CONTENT = 1120 : 1120
    +    XML_RNGP_XMLNS_NAME = 1121 : 1121
    +    XML_RNGP_XML_NS = 1122 : 1122
    +    XML_XPATH_EXPRESSION_OK = 1200
    +    XML_XPATH_NUMBER_ERROR = 1201 : 1201
    +    XML_XPATH_UNFINISHED_LITERAL_ERROR = 1202 : 1202
    +    XML_XPATH_START_LITERAL_ERROR = 1203 : 1203
    +    XML_XPATH_VARIABLE_REF_ERROR = 1204 : 1204
    +    XML_XPATH_UNDEF_VARIABLE_ERROR = 1205 : 1205
    +    XML_XPATH_INVALID_PREDICATE_ERROR = 1206 : 1206
    +    XML_XPATH_EXPR_ERROR = 1207 : 1207
    +    XML_XPATH_UNCLOSED_ERROR = 1208 : 1208
    +    XML_XPATH_UNKNOWN_FUNC_ERROR = 1209 : 1209
    +    XML_XPATH_INVALID_OPERAND = 1210 : 1210
    +    XML_XPATH_INVALID_TYPE = 1211 : 1211
    +    XML_XPATH_INVALID_ARITY = 1212 : 1212
    +    XML_XPATH_INVALID_CTXT_SIZE = 1213 : 1213
    +    XML_XPATH_INVALID_CTXT_POSITION = 1214 : 1214
    +    XML_XPATH_MEMORY_ERROR = 1215 : 1215
    +    XML_XPTR_SYNTAX_ERROR = 1216 : 1216
    +    XML_XPTR_RESOURCE_ERROR = 1217 : 1217
    +    XML_XPTR_SUB_RESOURCE_ERROR = 1218 : 1218
    +    XML_XPATH_UNDEF_PREFIX_ERROR = 1219 : 1219
    +    XML_XPATH_ENCODING_ERROR = 1220 : 1220
    +    XML_XPATH_INVALID_CHAR_ERROR = 1221 : 1221
    +    XML_TREE_INVALID_HEX = 1300
    +    XML_TREE_INVALID_DEC = 1301 : 1301
    +    XML_TREE_UNTERMINATED_ENTITY = 1302 : 1302
    +    XML_TREE_NOT_UTF8 = 1303 : 1303
    +    XML_SAVE_NOT_UTF8 = 1400
    +    XML_SAVE_CHAR_INVALID = 1401 : 1401
    +    XML_SAVE_NO_DOCTYPE = 1402 : 1402
    +    XML_SAVE_UNKNOWN_ENCODING = 1403 : 1403
    +    XML_REGEXP_COMPILE_ERROR = 1450
    +    XML_IO_UNKNOWN = 1500
    +    XML_IO_EACCES = 1501 : 1501
    +    XML_IO_EAGAIN = 1502 : 1502
    +    XML_IO_EBADF = 1503 : 1503
    +    XML_IO_EBADMSG = 1504 : 1504
    +    XML_IO_EBUSY = 1505 : 1505
    +    XML_IO_ECANCELED = 1506 : 1506
    +    XML_IO_ECHILD = 1507 : 1507
    +    XML_IO_EDEADLK = 1508 : 1508
    +    XML_IO_EDOM = 1509 : 1509
    +    XML_IO_EEXIST = 1510 : 1510
    +    XML_IO_EFAULT = 1511 : 1511
    +    XML_IO_EFBIG = 1512 : 1512
    +    XML_IO_EINPROGRESS = 1513 : 1513
    +    XML_IO_EINTR = 1514 : 1514
    +    XML_IO_EINVAL = 1515 : 1515
    +    XML_IO_EIO = 1516 : 1516
    +    XML_IO_EISDIR = 1517 : 1517
    +    XML_IO_EMFILE = 1518 : 1518
    +    XML_IO_EMLINK = 1519 : 1519
    +    XML_IO_EMSGSIZE = 1520 : 1520
    +    XML_IO_ENAMETOOLONG = 1521 : 1521
    +    XML_IO_ENFILE = 1522 : 1522
    +    XML_IO_ENODEV = 1523 : 1523
    +    XML_IO_ENOENT = 1524 : 1524
    +    XML_IO_ENOEXEC = 1525 : 1525
    +    XML_IO_ENOLCK = 1526 : 1526
    +    XML_IO_ENOMEM = 1527 : 1527
    +    XML_IO_ENOSPC = 1528 : 1528
    +    XML_IO_ENOSYS = 1529 : 1529
    +    XML_IO_ENOTDIR = 1530 : 1530
    +    XML_IO_ENOTEMPTY = 1531 : 1531
    +    XML_IO_ENOTSUP = 1532 : 1532
    +    XML_IO_ENOTTY = 1533 : 1533
    +    XML_IO_ENXIO = 1534 : 1534
    +    XML_IO_EPERM = 1535 : 1535
    +    XML_IO_EPIPE = 1536 : 1536
    +    XML_IO_ERANGE = 1537 : 1537
    +    XML_IO_EROFS = 1538 : 1538
    +    XML_IO_ESPIPE = 1539 : 1539
    +    XML_IO_ESRCH = 1540 : 1540
    +    XML_IO_ETIMEDOUT = 1541 : 1541
    +    XML_IO_EXDEV = 1542 : 1542
    +    XML_IO_NETWORK_ATTEMPT = 1543 : 1543
    +    XML_IO_ENCODER = 1544 : 1544
    +    XML_IO_FLUSH = 1545 : 1545
    +    XML_IO_WRITE = 1546 : 1546
    +    XML_IO_NO_INPUT = 1547 : 1547
    +    XML_IO_BUFFER_FULL = 1548 : 1548
    +    XML_IO_LOAD_ERROR = 1549 : 1549
    +    XML_IO_ENOTSOCK = 1550 : 1550
    +    XML_IO_EISCONN = 1551 : 1551
    +    XML_IO_ECONNREFUSED = 1552 : 1552
    +    XML_IO_ENETUNREACH = 1553 : 1553
    +    XML_IO_EADDRINUSE = 1554 : 1554
    +    XML_IO_EALREADY = 1555 : 1555
    +    XML_IO_EAFNOSUPPORT = 1556 : 1556
    +    XML_XINCLUDE_RECURSION = 1600
    +    XML_XINCLUDE_PARSE_VALUE = 1601 : 1601
    +    XML_XINCLUDE_ENTITY_DEF_MISMATCH = 1602 : 1602
    +    XML_XINCLUDE_NO_HREF = 1603 : 1603
    +    XML_XINCLUDE_NO_FALLBACK = 1604 : 1604
    +    XML_XINCLUDE_HREF_URI = 1605 : 1605
    +    XML_XINCLUDE_TEXT_FRAGMENT = 1606 : 1606
    +    XML_XINCLUDE_TEXT_DOCUMENT = 1607 : 1607
    +    XML_XINCLUDE_INVALID_CHAR = 1608 : 1608
    +    XML_XINCLUDE_BUILD_FAILED = 1609 : 1609
    +    XML_XINCLUDE_UNKNOWN_ENCODING = 1610 : 1610
    +    XML_XINCLUDE_MULTIPLE_ROOT = 1611 : 1611
    +    XML_XINCLUDE_XPTR_FAILED = 1612 : 1612
    +    XML_XINCLUDE_XPTR_RESULT = 1613 : 1613
    +    XML_XINCLUDE_INCLUDE_IN_INCLUDE = 1614 : 1614
    +    XML_XINCLUDE_FALLBACKS_IN_INCLUDE = 1615 : 1615
    +    XML_XINCLUDE_FALLBACK_NOT_IN_INCLUDE = 1616 : 1616
    +    XML_XINCLUDE_DEPRECATED_NS = 1617 : 1617
    +    XML_XINCLUDE_FRAGMENT_ID = 1618 : 1618
    +    XML_CATALOG_MISSING_ATTR = 1650
    +    XML_CATALOG_ENTRY_BROKEN = 1651 : 1651
    +    XML_CATALOG_PREFER_VALUE = 1652 : 1652
    +    XML_CATALOG_NOT_CATALOG = 1653 : 1653
    +    XML_CATALOG_RECURSION = 1654 : 1654
    +    XML_SCHEMAP_PREFIX_UNDEFINED = 1700
    +    XML_SCHEMAP_ATTRFORMDEFAULT_VALUE = 1701 : 1701
    +    XML_SCHEMAP_ATTRGRP_NONAME_NOREF = 1702 : 1702
    +    XML_SCHEMAP_ATTR_NONAME_NOREF = 1703 : 1703
    +    XML_SCHEMAP_COMPLEXTYPE_NONAME_NOREF = 1704 : 1704
    +    XML_SCHEMAP_ELEMFORMDEFAULT_VALUE = 1705 : 1705
    +    XML_SCHEMAP_ELEM_NONAME_NOREF = 1706 : 1706
    +    XML_SCHEMAP_EXTENSION_NO_BASE = 1707 : 1707
    +    XML_SCHEMAP_FACET_NO_VALUE = 1708 : 1708
    +    XML_SCHEMAP_FAILED_BUILD_IMPORT = 1709 : 1709
    +    XML_SCHEMAP_GROUP_NONAME_NOREF = 1710 : 1710
    +    XML_SCHEMAP_IMPORT_NAMESPACE_NOT_URI = 1711 : 1711
    +    XML_SCHEMAP_IMPORT_REDEFINE_NSNAME = 1712 : 1712
    +    XML_SCHEMAP_IMPORT_SCHEMA_NOT_URI = 1713 : 1713
    +    XML_SCHEMAP_INVALID_BOOLEAN = 1714 : 1714
    +    XML_SCHEMAP_INVALID_ENUM = 1715 : 1715
    +    XML_SCHEMAP_INVALID_FACET = 1716 : 1716
    +    XML_SCHEMAP_INVALID_FACET_VALUE = 1717 : 1717
    +    XML_SCHEMAP_INVALID_MAXOCCURS = 1718 : 1718
    +    XML_SCHEMAP_INVALID_MINOCCURS = 1719 : 1719
    +    XML_SCHEMAP_INVALID_REF_AND_SUBTYPE = 1720 : 1720
    +    XML_SCHEMAP_INVALID_WHITE_SPACE = 1721 : 1721
    +    XML_SCHEMAP_NOATTR_NOREF = 1722 : 1722
    +    XML_SCHEMAP_NOTATION_NO_NAME = 1723 : 1723
    +    XML_SCHEMAP_NOTYPE_NOREF = 1724 : 1724
    +    XML_SCHEMAP_REF_AND_SUBTYPE = 1725 : 1725
    +    XML_SCHEMAP_RESTRICTION_NONAME_NOREF = 1726 : 1726
    +    XML_SCHEMAP_SIMPLETYPE_NONAME = 1727 : 1727
    +    XML_SCHEMAP_TYPE_AND_SUBTYPE = 1728 : 1728
    +    XML_SCHEMAP_UNKNOWN_ALL_CHILD = 1729 : 1729
    +    XML_SCHEMAP_UNKNOWN_ANYATTRIBUTE_CHILD = 1730 : 1730
    +    XML_SCHEMAP_UNKNOWN_ATTR_CHILD = 1731 : 1731
    +    XML_SCHEMAP_UNKNOWN_ATTRGRP_CHILD = 1732 : 1732
    +    XML_SCHEMAP_UNKNOWN_ATTRIBUTE_GROUP = 1733 : 1733
    +    XML_SCHEMAP_UNKNOWN_BASE_TYPE = 1734 : 1734
    +    XML_SCHEMAP_UNKNOWN_CHOICE_CHILD = 1735 : 1735
    +    XML_SCHEMAP_UNKNOWN_COMPLEXCONTENT_CHILD = 1736 : 1736
    +    XML_SCHEMAP_UNKNOWN_COMPLEXTYPE_CHILD = 1737 : 1737
    +    XML_SCHEMAP_UNKNOWN_ELEM_CHILD = 1738 : 1738
    +    XML_SCHEMAP_UNKNOWN_EXTENSION_CHILD = 1739 : 1739
    +    XML_SCHEMAP_UNKNOWN_FACET_CHILD = 1740 : 1740
    +    XML_SCHEMAP_UNKNOWN_FACET_TYPE = 1741 : 1741
    +    XML_SCHEMAP_UNKNOWN_GROUP_CHILD = 1742 : 1742
    +    XML_SCHEMAP_UNKNOWN_IMPORT_CHILD = 1743 : 1743
    +    XML_SCHEMAP_UNKNOWN_LIST_CHILD = 1744 : 1744
    +    XML_SCHEMAP_UNKNOWN_NOTATION_CHILD = 1745 : 1745
    +    XML_SCHEMAP_UNKNOWN_PROCESSCONTENT_CHILD = 1746 : 1746
    +    XML_SCHEMAP_UNKNOWN_REF = 1747 : 1747
    +    XML_SCHEMAP_UNKNOWN_RESTRICTION_CHILD = 1748 : 1748
    +    XML_SCHEMAP_UNKNOWN_SCHEMAS_CHILD = 1749 : 1749
    +    XML_SCHEMAP_UNKNOWN_SEQUENCE_CHILD = 1750 : 1750
    +    XML_SCHEMAP_UNKNOWN_SIMPLECONTENT_CHILD = 1751 : 1751
    +    XML_SCHEMAP_UNKNOWN_SIMPLETYPE_CHILD = 1752 : 1752
    +    XML_SCHEMAP_UNKNOWN_TYPE = 1753 : 1753
    +    XML_SCHEMAP_UNKNOWN_UNION_CHILD = 1754 : 1754
    +    XML_SCHEMAP_ELEM_DEFAULT_FIXED = 1755 : 1755
    +    XML_SCHEMAP_REGEXP_INVALID = 1756 : 1756
    +    XML_SCHEMAP_FAILED_LOAD = 1757 : 1757
    +    XML_SCHEMAP_NOTHING_TO_PARSE = 1758 : 1758
    +    XML_SCHEMAP_NOROOT = 1759 : 1759
    +    XML_SCHEMAP_REDEFINED_GROUP = 1760 : 1760
    +    XML_SCHEMAP_REDEFINED_TYPE = 1761 : 1761
    +    XML_SCHEMAP_REDEFINED_ELEMENT = 1762 : 1762
    +    XML_SCHEMAP_REDEFINED_ATTRGROUP = 1763 : 1763
    +    XML_SCHEMAP_REDEFINED_ATTR = 1764 : 1764
    +    XML_SCHEMAP_REDEFINED_NOTATION = 1765 : 1765
    +    XML_SCHEMAP_FAILED_PARSE = 1766 : 1766
    +    XML_SCHEMAP_UNKNOWN_PREFIX = 1767 : 1767
    +    XML_SCHEMAP_DEF_AND_PREFIX = 1768 : 1768
    +    XML_SCHEMAP_UNKNOWN_INCLUDE_CHILD = 1769 : 1769
    +    XML_SCHEMAP_INCLUDE_SCHEMA_NOT_URI = 1770 : 1770
    +    XML_SCHEMAP_INCLUDE_SCHEMA_NO_URI = 1771 : 1771
    +    XML_SCHEMAP_NOT_SCHEMA = 1772 : 1772
    +    XML_SCHEMAP_UNKNOWN_MEMBER_TYPE = 1773 : 1773
    +    XML_SCHEMAP_INVALID_ATTR_USE = 1774 : 1774
    +    XML_SCHEMAP_RECURSIVE = 1775 : 1775
    +    XML_SCHEMAP_SUPERNUMEROUS_LIST_ITEM_TYPE = 1776 : 1776
    +    XML_SCHEMAP_INVALID_ATTR_COMBINATION = 1777 : 1777
    +    XML_SCHEMAP_INVALID_ATTR_INLINE_COMBINATION = 1778 : 1778
    +    XML_SCHEMAP_MISSING_SIMPLETYPE_CHILD = 1779 : 1779
    +    XML_SCHEMAP_INVALID_ATTR_NAME = 1780 : 1780
    +    XML_SCHEMAP_REF_AND_CONTENT = 1781 : 1781
    +    XML_SCHEMAP_CT_PROPS_CORRECT_1 = 1782 : 1782
    +    XML_SCHEMAP_CT_PROPS_CORRECT_2 = 1783 : 1783
    +    XML_SCHEMAP_CT_PROPS_CORRECT_3 = 1784 : 1784
    +    XML_SCHEMAP_CT_PROPS_CORRECT_4 = 1785 : 1785
    +    XML_SCHEMAP_CT_PROPS_CORRECT_5 = 1786 : 1786
    +    XML_SCHEMAP_DERIVATION_OK_RESTRICTION_1 = 1787 : 1787
    +    XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_1 = 1788 : 1788
    +    XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_2 = 1789 : 1789
    +    XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_2 = 1790 : 1790
    +    XML_SCHEMAP_DERIVATION_OK_RESTRICTION_3 = 1791 : 1791
    +    XML_SCHEMAP_WILDCARD_INVALID_NS_MEMBER = 1792 : 1792
    +    XML_SCHEMAP_INTERSECTION_NOT_EXPRESSIBLE = 1793 : 1793
    +    XML_SCHEMAP_UNION_NOT_EXPRESSIBLE = 1794 : 1794
    +    XML_SCHEMAP_SRC_IMPORT_3_1 = 1795 : 1795
    +    XML_SCHEMAP_SRC_IMPORT_3_2 = 1796 : 1796
    +    XML_SCHEMAP_DERIVATION_OK_RESTRICTION_4_1 = 1797 : 1797
    +    XML_SCHEMAP_DERIVATION_OK_RESTRICTION_4_2 = 1798 : 1798
    +    XML_SCHEMAP_DERIVATION_OK_RESTRICTION_4_3 = 1799 : 1799
    +    XML_SCHEMAP_COS_CT_EXTENDS_1_3 = 1800 : 1800
    +    XML_SCHEMAV_NOROOT = 1801
    +    XML_SCHEMAV_UNDECLAREDELEM = 1802 : 1802
    +    XML_SCHEMAV_NOTTOPLEVEL = 1803 : 1803
    +    XML_SCHEMAV_MISSING = 1804 : 1804
    +    XML_SCHEMAV_WRONGELEM = 1805 : 1805
    +    XML_SCHEMAV_NOTYPE = 1806 : 1806
    +    XML_SCHEMAV_NOROLLBACK = 1807 : 1807
    +    XML_SCHEMAV_ISABSTRACT = 1808 : 1808
    +    XML_SCHEMAV_NOTEMPTY = 1809 : 1809
    +    XML_SCHEMAV_ELEMCONT = 1810 : 1810
    +    XML_SCHEMAV_HAVEDEFAULT = 1811 : 1811
    +    XML_SCHEMAV_NOTNILLABLE = 1812 : 1812
    +    XML_SCHEMAV_EXTRACONTENT = 1813 : 1813
    +    XML_SCHEMAV_INVALIDATTR = 1814 : 1814
    +    XML_SCHEMAV_INVALIDELEM = 1815 : 1815
    +    XML_SCHEMAV_NOTDETERMINIST = 1816 : 1816
    +    XML_SCHEMAV_CONSTRUCT = 1817 : 1817
    +    XML_SCHEMAV_INTERNAL = 1818 : 1818
    +    XML_SCHEMAV_NOTSIMPLE = 1819 : 1819
    +    XML_SCHEMAV_ATTRUNKNOWN = 1820 : 1820
    +    XML_SCHEMAV_ATTRINVALID = 1821 : 1821
    +    XML_SCHEMAV_VALUE = 1822 : 1822
    +    XML_SCHEMAV_FACET = 1823 : 1823
    +    XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_1 = 1824 : 1824
    +    XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_2 = 1825 : 1825
    +    XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_3 = 1826 : 1826
    +    XML_SCHEMAV_CVC_TYPE_3_1_1 = 1827 : 1827
    +    XML_SCHEMAV_CVC_TYPE_3_1_2 = 1828 : 1828
    +    XML_SCHEMAV_CVC_FACET_VALID = 1829 : 1829
    +    XML_SCHEMAV_CVC_LENGTH_VALID = 1830 : 1830
    +    XML_SCHEMAV_CVC_MINLENGTH_VALID = 1831 : 1831
    +    XML_SCHEMAV_CVC_MAXLENGTH_VALID = 1832 : 1832
    +    XML_SCHEMAV_CVC_MININCLUSIVE_VALID = 1833 : 1833
    +    XML_SCHEMAV_CVC_MAXINCLUSIVE_VALID = 1834 : 1834
    +    XML_SCHEMAV_CVC_MINEXCLUSIVE_VALID = 1835 : 1835
    +    XML_SCHEMAV_CVC_MAXEXCLUSIVE_VALID = 1836 : 1836
    +    XML_SCHEMAV_CVC_TOTALDIGITS_VALID = 1837 : 1837
    +    XML_SCHEMAV_CVC_FRACTIONDIGITS_VALID = 1838 : 1838
    +    XML_SCHEMAV_CVC_PATTERN_VALID = 1839 : 1839
    +    XML_SCHEMAV_CVC_ENUMERATION_VALID = 1840 : 1840
    +    XML_SCHEMAV_CVC_COMPLEX_TYPE_2_1 = 1841 : 1841
    +    XML_SCHEMAV_CVC_COMPLEX_TYPE_2_2 = 1842 : 1842
    +    XML_SCHEMAV_CVC_COMPLEX_TYPE_2_3 = 1843 : 1843
    +    XML_SCHEMAV_CVC_COMPLEX_TYPE_2_4 = 1844 : 1844
    +    XML_SCHEMAV_CVC_ELT_1 = 1845 : 1845
    +    XML_SCHEMAV_CVC_ELT_2 = 1846 : 1846
    +    XML_SCHEMAV_CVC_ELT_3_1 = 1847 : 1847
    +    XML_SCHEMAV_CVC_ELT_3_2_1 = 1848 : 1848
    +    XML_SCHEMAV_CVC_ELT_3_2_2 = 1849 : 1849
    +    XML_SCHEMAV_CVC_ELT_4_1 = 1850 : 1850
    +    XML_SCHEMAV_CVC_ELT_4_2 = 1851 : 1851
    +    XML_SCHEMAV_CVC_ELT_4_3 = 1852 : 1852
    +    XML_SCHEMAV_CVC_ELT_5_1_1 = 1853 : 1853
    +    XML_SCHEMAV_CVC_ELT_5_1_2 = 1854 : 1854
    +    XML_SCHEMAV_CVC_ELT_5_2_1 = 1855 : 1855
    +    XML_SCHEMAV_CVC_ELT_5_2_2_1 = 1856 : 1856
    +    XML_SCHEMAV_CVC_ELT_5_2_2_2_1 = 1857 : 1857
    +    XML_SCHEMAV_CVC_ELT_5_2_2_2_2 = 1858 : 1858
    +    XML_SCHEMAV_CVC_ELT_6 = 1859 : 1859
    +    XML_SCHEMAV_CVC_ELT_7 = 1860 : 1860
    +    XML_SCHEMAV_CVC_ATTRIBUTE_1 = 1861 : 1861
    +    XML_SCHEMAV_CVC_ATTRIBUTE_2 = 1862 : 1862
    +    XML_SCHEMAV_CVC_ATTRIBUTE_3 = 1863 : 1863
    +    XML_SCHEMAV_CVC_ATTRIBUTE_4 = 1864 : 1864
    +    XML_SCHEMAV_CVC_COMPLEX_TYPE_3_1 = 1865 : 1865
    +    XML_SCHEMAV_CVC_COMPLEX_TYPE_3_2_1 = 1866 : 1866
    +    XML_SCHEMAV_CVC_COMPLEX_TYPE_3_2_2 = 1867 : 1867
    +    XML_SCHEMAV_CVC_COMPLEX_TYPE_4 = 1868 : 1868
    +    XML_SCHEMAV_CVC_COMPLEX_TYPE_5_1 = 1869 : 1869
    +    XML_SCHEMAV_CVC_COMPLEX_TYPE_5_2 = 1870 : 1870
    +    XML_SCHEMAV_ELEMENT_CONTENT = 1871 : 1871
    +    XML_SCHEMAV_DOCUMENT_ELEMENT_MISSING = 1872 : 1872
    +    XML_SCHEMAV_CVC_COMPLEX_TYPE_1 = 1873 : 1873
    +    XML_SCHEMAV_CVC_AU = 1874 : 1874
    +    XML_SCHEMAV_CVC_TYPE_1 = 1875 : 1875
    +    XML_SCHEMAV_CVC_TYPE_2 = 1876 : 1876
    +    XML_SCHEMAV_CVC_IDC = 1877 : 1877
    +    XML_SCHEMAV_CVC_WILDCARD = 1878 : 1878
    +    XML_SCHEMAV_MISC = 1879 : 1879
    +    XML_XPTR_UNKNOWN_SCHEME = 1900
    +    XML_XPTR_CHILDSEQ_START = 1901 : 1901
    +    XML_XPTR_EVAL_FAILED = 1902 : 1902
    +    XML_XPTR_EXTRA_OBJECTS = 1903 : 1903
    +    XML_C14N_CREATE_CTXT = 1950
    +    XML_C14N_REQUIRES_UTF8 = 1951 : 1951
    +    XML_C14N_CREATE_STACK = 1952 : 1952
    +    XML_C14N_INVALID_NODE = 1953 : 1953
    +    XML_C14N_UNKNOW_NODE = 1954 : 1954
    +    XML_C14N_RELATIVE_NAMESPACE = 1955 : 1955
    +    XML_FTP_PASV_ANSWER = 2000
    +    XML_FTP_EPSV_ANSWER = 2001 : 2001
    +    XML_FTP_ACCNT = 2002 : 2002
    +    XML_FTP_URL_SYNTAX = 2003 : 2003
    +    XML_HTTP_URL_SYNTAX = 2020
    +    XML_HTTP_USE_IP = 2021 : 2021
    +    XML_HTTP_UNKNOWN_HOST = 2022 : 2022
    +    XML_SCHEMAP_SRC_SIMPLE_TYPE_1 = 3000
    +    XML_SCHEMAP_SRC_SIMPLE_TYPE_2 = 3001 : 3001
    +    XML_SCHEMAP_SRC_SIMPLE_TYPE_3 = 3002 : 3002
    +    XML_SCHEMAP_SRC_SIMPLE_TYPE_4 = 3003 : 3003
    +    XML_SCHEMAP_SRC_RESOLVE = 3004 : 3004
    +    XML_SCHEMAP_SRC_RESTRICTION_BASE_OR_SIMPLETYPE = 3005 : 3005
    +    XML_SCHEMAP_SRC_LIST_ITEMTYPE_OR_SIMPLETYPE = 3006 : 3006
    +    XML_SCHEMAP_SRC_UNION_MEMBERTYPES_OR_SIMPLETYPES = 3007 : 3007
    +    XML_SCHEMAP_ST_PROPS_CORRECT_1 = 3008 : 3008
    +    XML_SCHEMAP_ST_PROPS_CORRECT_2 = 3009 : 3009
    +    XML_SCHEMAP_ST_PROPS_CORRECT_3 = 3010 : 3010
    +    XML_SCHEMAP_COS_ST_RESTRICTS_1_1 = 3011 : 3011
    +    XML_SCHEMAP_COS_ST_RESTRICTS_1_2 = 3012 : 3012
    +    XML_SCHEMAP_COS_ST_RESTRICTS_1_3_1 = 3013 : 3013
    +    XML_SCHEMAP_COS_ST_RESTRICTS_1_3_2 = 3014 : 3014
    +    XML_SCHEMAP_COS_ST_RESTRICTS_2_1 = 3015 : 3015
    +    XML_SCHEMAP_COS_ST_RESTRICTS_2_3_1_1 = 3016 : 3016
    +    XML_SCHEMAP_COS_ST_RESTRICTS_2_3_1_2 = 3017 : 3017
    +    XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_1 = 3018 : 3018
    +    XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_2 = 3019 : 3019
    +    XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_3 = 3020 : 3020
    +    XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_4 = 3021 : 3021
    +    XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_5 = 3022 : 3022
    +    XML_SCHEMAP_COS_ST_RESTRICTS_3_1 = 3023 : 3023
    +    XML_SCHEMAP_COS_ST_RESTRICTS_3_3_1 = 3024 : 3024
    +    XML_SCHEMAP_COS_ST_RESTRICTS_3_3_1_2 = 3025 : 3025
    +    XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_2 = 3026 : 3026
    +    XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_1 = 3027 : 3027
    +    XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_3 = 3028 : 3028
    +    XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_4 = 3029 : 3029
    +    XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_5 = 3030 : 3030
    +    XML_SCHEMAP_COS_ST_DERIVED_OK_2_1 = 3031 : 3031
    +    XML_SCHEMAP_COS_ST_DERIVED_OK_2_2 = 3032 : 3032
    +    XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED = 3033 : 3033
    +    XML_SCHEMAP_S4S_ELEM_MISSING = 3034 : 3034
    +    XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED = 3035 : 3035
    +    XML_SCHEMAP_S4S_ATTR_MISSING = 3036 : 3036
    +    XML_SCHEMAP_S4S_ATTR_INVALID_VALUE = 3037 : 3037
    +    XML_SCHEMAP_SRC_ELEMENT_1 = 3038 : 3038
    +    XML_SCHEMAP_SRC_ELEMENT_2_1 = 3039 : 3039
    +    XML_SCHEMAP_SRC_ELEMENT_2_2 = 3040 : 3040
    +    XML_SCHEMAP_SRC_ELEMENT_3 = 3041 : 3041
    +    XML_SCHEMAP_P_PROPS_CORRECT_1 = 3042 : 3042
    +    XML_SCHEMAP_P_PROPS_CORRECT_2_1 = 3043 : 3043
    +    XML_SCHEMAP_P_PROPS_CORRECT_2_2 = 3044 : 3044
    +    XML_SCHEMAP_E_PROPS_CORRECT_2 = 3045 : 3045
    +    XML_SCHEMAP_E_PROPS_CORRECT_3 = 3046 : 3046
    +    XML_SCHEMAP_E_PROPS_CORRECT_4 = 3047 : 3047
    +    XML_SCHEMAP_E_PROPS_CORRECT_5 = 3048 : 3048
    +    XML_SCHEMAP_E_PROPS_CORRECT_6 = 3049 : 3049
    +    XML_SCHEMAP_SRC_INCLUDE = 3050 : 3050
    +    XML_SCHEMAP_SRC_ATTRIBUTE_1 = 3051 : 3051
    +    XML_SCHEMAP_SRC_ATTRIBUTE_2 = 3052 : 3052
    +    XML_SCHEMAP_SRC_ATTRIBUTE_3_1 = 3053 : 3053
    +    XML_SCHEMAP_SRC_ATTRIBUTE_3_2 = 3054 : 3054
    +    XML_SCHEMAP_SRC_ATTRIBUTE_4 = 3055 : 3055
    +    XML_SCHEMAP_NO_XMLNS = 3056 : 3056
    +    XML_SCHEMAP_NO_XSI = 3057 : 3057
    +    XML_SCHEMAP_COS_VALID_DEFAULT_1 = 3058 : 3058
    +    XML_SCHEMAP_COS_VALID_DEFAULT_2_1 = 3059 : 3059
    +    XML_SCHEMAP_COS_VALID_DEFAULT_2_2_1 = 3060 : 3060
    +    XML_SCHEMAP_COS_VALID_DEFAULT_2_2_2 = 3061 : 3061
    +    XML_SCHEMAP_CVC_SIMPLE_TYPE = 3062 : 3062
    +    XML_SCHEMAP_COS_CT_EXTENDS_1_1 = 3063 : 3063
    +    XML_SCHEMAP_SRC_IMPORT_1_1 = 3064 : 3064
    +    XML_SCHEMAP_SRC_IMPORT_1_2 = 3065 : 3065
    +    XML_SCHEMAP_SRC_IMPORT_2 = 3066 : 3066
    +    XML_SCHEMAP_SRC_IMPORT_2_1 = 3067 : 3067
    +    XML_SCHEMAP_SRC_IMPORT_2_2 = 3068 : 3068
    +    XML_SCHEMAP_INTERNAL = 3069 : 3069 non-W3C
    +    XML_SCHEMAP_NOT_DETERMINISTIC = 3070 : 3070 non-W3C
    +    XML_SCHEMAP_SRC_ATTRIBUTE_GROUP_1 = 3071 : 3071
    +    XML_SCHEMAP_SRC_ATTRIBUTE_GROUP_2 = 3072 : 3072
    +    XML_SCHEMAP_SRC_ATTRIBUTE_GROUP_3 = 3073 : 3073
    +    XML_SCHEMAP_MG_PROPS_CORRECT_1 = 3074 : 3074
    +    XML_SCHEMAP_MG_PROPS_CORRECT_2 = 3075 : 3075
    +    XML_SCHEMAP_SRC_CT_1 = 3076 : 3076
    +    XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_3 = 3077 : 3077
    +    XML_SCHEMAP_AU_PROPS_CORRECT_2 = 3078 : 3078
    +    XML_SCHEMAP_A_PROPS_CORRECT_2 = 3079 : 3079
    +    XML_SCHEMAP_C_PROPS_CORRECT = 3080 : 3080
    +    XML_SCHEMAP_SRC_REDEFINE = 3081 : 3081
    +    XML_SCHEMAP_SRC_IMPORT = 3082 : 3082
    +    XML_SCHEMAP_WARN_SKIP_SCHEMA = 3083 : 3083
    +    XML_SCHEMAP_WARN_UNLOCATED_SCHEMA = 3084 : 3084
    +    XML_SCHEMAP_WARN_ATTR_REDECL_PROH = 3085 : 3085
    +    XML_SCHEMAP_WARN_ATTR_POINTLESS_PROH = 3086 : 3085
    +    XML_SCHEMAP_AG_PROPS_CORRECT = 3087 : 3086
    +    XML_SCHEMAP_COS_CT_EXTENDS_1_2 = 3088 : 3087
    +    XML_SCHEMAP_AU_PROPS_CORRECT = 3089 : 3088
    +    XML_SCHEMAP_A_PROPS_CORRECT_3 = 3090 : 3089
    +    XML_SCHEMAP_COS_ALL_LIMITED = 3091 : 3090
    +    XML_SCHEMATRONV_ASSERT = 4000 : 4000
    +    XML_SCHEMATRONV_REPORT = 4001
    +    XML_MODULE_OPEN = 4900 : 4900
    +    XML_MODULE_CLOSE = 4901 : 4901
    +    XML_CHECK_FOUND_ELEMENT = 5000
    +    XML_CHECK_FOUND_ATTRIBUTE = 5001 : 5001
    +    XML_CHECK_FOUND_TEXT = 5002 : 5002
    +    XML_CHECK_FOUND_CDATA = 5003 : 5003
    +    XML_CHECK_FOUND_ENTITYREF = 5004 : 5004
    +    XML_CHECK_FOUND_ENTITY = 5005 : 5005
    +    XML_CHECK_FOUND_PI = 5006 : 5006
    +    XML_CHECK_FOUND_COMMENT = 5007 : 5007
    +    XML_CHECK_FOUND_DOCTYPE = 5008 : 5008
    +    XML_CHECK_FOUND_FRAGMENT = 5009 : 5009
    +    XML_CHECK_FOUND_NOTATION = 5010 : 5010
    +    XML_CHECK_UNKNOWN_NODE = 5011 : 5011
    +    XML_CHECK_ENTITY_TYPE = 5012 : 5012
    +    XML_CHECK_NO_PARENT = 5013 : 5013
    +    XML_CHECK_NO_DOC = 5014 : 5014
    +    XML_CHECK_NO_NAME = 5015 : 5015
    +    XML_CHECK_NO_ELEM = 5016 : 5016
    +    XML_CHECK_WRONG_DOC = 5017 : 5017
    +    XML_CHECK_NO_PREV = 5018 : 5018
    +    XML_CHECK_WRONG_PREV = 5019 : 5019
    +    XML_CHECK_NO_NEXT = 5020 : 5020
    +    XML_CHECK_WRONG_NEXT = 5021 : 5021
    +    XML_CHECK_NOT_DTD = 5022 : 5022
    +    XML_CHECK_NOT_ATTR = 5023 : 5023
    +    XML_CHECK_NOT_ATTR_DECL = 5024 : 5024
    +    XML_CHECK_NOT_ELEM_DECL = 5025 : 5025
    +    XML_CHECK_NOT_ENTITY_DECL = 5026 : 5026
    +    XML_CHECK_NOT_NS_DECL = 5027 : 5027
    +    XML_CHECK_NO_HREF = 5028 : 5028
    +    XML_CHECK_WRONG_PARENT = 5029 : 5029
    +    XML_CHECK_NS_SCOPE = 5030 : 5030
    +    XML_CHECK_NS_ANCESTOR = 5031 : 5031
    +    XML_CHECK_NOT_UTF8 = 5032 : 5032
    +    XML_CHECK_NO_DICT = 5033 : 5033
    +    XML_CHECK_NOT_NCNAME = 5034 : 5034
    +    XML_CHECK_OUTSIDE_DICT = 5035 : 5035
    +    XML_CHECK_WRONG_NAME = 5036 : 5036
    +    XML_CHECK_NAME_NOT_NULL = 5037 : 5037
    +    XML_I18N_NO_NAME = 6000
    +    XML_I18N_NO_HANDLER = 6001 : 6001
    +    XML_I18N_EXCESS_HANDLER = 6002 : 6002
    +    XML_I18N_CONV_FAILED = 6003 : 6003
    +    XML_I18N_NO_OUTPUT = 6004 : 6004
    +    XML_BUF_OVERFLOW = 7000
    +}
    +

    Function: initGenericErrorDefaultFunc

    void	initGenericErrorDefaultFunc	(xmlGenericErrorFunc * handler)
    +

    Set or reset (if NULL) the default handler for generic errors to the builtin error function.

    +
    handler:the handler

    Function: xmlCopyError

    int	xmlCopyError			(xmlErrorPtr from, 
    xmlErrorPtr to)
    +

    Save the original error to the new place.

    +
    from:a source error
    to:a target error
    Returns:0 in case of success and -1 in case of error.

    Function: xmlCtxtGetLastError

    xmlErrorPtr	xmlCtxtGetLastError	(void * ctx)
    +

    Get the last parsing error registered.

    +
    ctx:an XML parser context
    Returns:NULL if no error occured or a pointer to the error

    Function: xmlCtxtResetLastError

    void	xmlCtxtResetLastError		(void * ctx)
    +

    Cleanup the last global error registered. For parsing error this does not change the well-formedness result.

    +
    ctx:an XML parser context

    Function type: xmlGenericErrorFunc

    Function type: xmlGenericErrorFunc
    +void	xmlGenericErrorFunc		(void * ctx, 
    const char * msg,
    ... ...) +

    Signature of the function to use when there is an error and no parsing or validity context available .

    ctx:a parsing context
    msg:the message
    ...:the extra arguments of the varags to format the message

    +

    Function: xmlGetLastError

    xmlErrorPtr	xmlGetLastError		(void)
    +

    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

    Function: xmlParserError

    void	xmlParserError			(void * ctx, 
    const char * msg,
    ... ...)
    +

    Display and format an error messages, gives file, line, position and extra parameters.

    +
    ctx:an XML parser context
    msg:the message to display/transmit
    ...:extra parameters for the message display

    Function: xmlParserPrintFileContext

    void	xmlParserPrintFileContext	(xmlParserInputPtr input)
    +

    Displays current context within the input content for error tracking

    +
    input:an xmlParserInputPtr input

    Function: xmlParserPrintFileInfo

    void	xmlParserPrintFileInfo		(xmlParserInputPtr input)
    +

    Displays the associated file and line informations for the current input

    +
    input:an xmlParserInputPtr input

    Function: xmlParserValidityError

    void	xmlParserValidityError		(void * ctx, 
    const char * msg,
    ... ...)
    +

    Display and format an validity error messages, gives file, line, position and extra parameters.

    +
    ctx:an XML parser context
    msg:the message to display/transmit
    ...:extra parameters for the message display

    Function: xmlParserValidityWarning

    void	xmlParserValidityWarning	(void * ctx, 
    const char * msg,
    ... ...)
    +

    Display and format a validity warning messages, gives file, line, position and extra parameters.

    +
    ctx:an XML parser context
    msg:the message to display/transmit
    ...:extra parameters for the message display

    Function: xmlParserWarning

    void	xmlParserWarning		(void * ctx, 
    const char * msg,
    ... ...)
    +

    Display and format a warning messages, gives file, line, position and extra parameters.

    +
    ctx:an XML parser context
    msg:the message to display/transmit
    ...:extra parameters for the message display

    Function: xmlResetError

    void	xmlResetError			(xmlErrorPtr err)
    +

    Cleanup the error.

    +
    err:pointer to the error.

    Function: xmlResetLastError

    void	xmlResetLastError		(void)
    +

    Cleanup the last global error registered. For parsing error this does not change the well-formedness result.

    +

    Function: xmlSetGenericErrorFunc

    void	xmlSetGenericErrorFunc		(void * ctx, 
    xmlGenericErrorFunc handler)
    +

    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. For multi-threaded applications, this must be set separately for each thread.

    +
    ctx:the new error handling context
    handler:the new handler function

    Function: xmlSetStructuredErrorFunc

    void	xmlSetStructuredErrorFunc	(void * ctx, 
    xmlStructuredErrorFunc handler)
    +

    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 For multi-threaded applications, this must be set separately for each thread.

    +
    ctx:the new error handling context
    handler:the new handler function

    Function type: xmlStructuredErrorFunc

    Function type: xmlStructuredErrorFunc
    +void	xmlStructuredErrorFunc		(void * userData, 
    xmlErrorPtr error) +

    Signature of the function to use when there is an error and the module handles the new error reporting mechanism.

    userData:user provided data for the error callback
    error:the error being raised.

    +

    Daniel Veillard

    diff --git a/doc/html/libxml-xmlexports.html b/doc/html/libxml-xmlexports.html new file mode 100644 index 0000000..152995a --- /dev/null +++ b/doc/html/libxml-xmlexports.html @@ -0,0 +1,20 @@ + + +Module xmlexports from libxml2
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    Module xmlexports from libxml2

    API Menu
    API Indexes
    Related links

    macros for marking symbols as exportable/importable.

    Table of Contents

    #define LIBXML_DLL_IMPORT
    #define XMLCALL
    #define XMLCDECL
    #define XMLPUBFUN
    #define XMLPUBVAR
    #define _REENTRANT

    Description

    +

    Macro: LIBXML_DLL_IMPORT

    #define LIBXML_DLL_IMPORT

    +

    Macro: XMLCALL

    #define XMLCALL

    +

    Macro: XMLCDECL

    #define XMLCDECL

    +

    Macro: XMLPUBFUN

    #define XMLPUBFUN

    +

    Macro: XMLPUBVAR

    #define XMLPUBVAR

    +

    Macro: _REENTRANT

    #define _REENTRANT

    +

    Daniel Veillard

    diff --git a/doc/html/libxml-xmlmemory.html b/doc/html/libxml-xmlmemory.html new file mode 100644 index 0000000..3406e09 --- /dev/null +++ b/doc/html/libxml-xmlmemory.html @@ -0,0 +1,107 @@ + + +Module xmlmemory from libxml2
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    Module xmlmemory from libxml2

    API Menu
    API Indexes
    Related links

    provides interfaces for the memory allocator, including debugging capabilities.

    Table of Contents

    #define DEBUG_MEMORY
    Variable xmlMallocFunc xmlMalloc
    +
    +
    Variable xmlMallocFunc xmlMallocAtomic
    +
    +
    Variable xmlStrdupFunc xmlMemStrdup
    +
    +
    Variable xmlReallocFunc xmlRealloc
    +
    +
    void	xmlCleanupMemory		(void)
    +
    Function type: xmlFreeFunc
    +void	xmlFreeFunc			(void * mem)
    +
    +
    int	xmlGcMemGet			(xmlFreeFunc * freeFunc, 
    xmlMallocFunc * mallocFunc,
    xmlMallocFunc * mallocAtomicFunc,
    xmlReallocFunc * reallocFunc,
    xmlStrdupFunc * strdupFunc)
    +
    int	xmlGcMemSetup			(xmlFreeFunc freeFunc, 
    xmlMallocFunc mallocFunc,
    xmlMallocFunc mallocAtomicFunc,
    xmlReallocFunc reallocFunc,
    xmlStrdupFunc strdupFunc)
    +
    int	xmlInitMemory			(void)
    +
    void *	xmlMallocAtomicLoc		(size_t size, 
    const char * file,
    int line)
    +
    Function type: xmlMallocFunc
    +void *	xmlMallocFunc			(size_t size)
    +
    +
    void *	xmlMallocLoc			(size_t size, 
    const char * file,
    int line)
    +
    int	xmlMemBlocks			(void)
    +
    void	xmlMemDisplay			(FILE * fp)
    +
    void	xmlMemDisplayLast		(FILE * fp, 
    long nbBytes)
    +
    void	xmlMemFree			(void * ptr)
    +
    int	xmlMemGet			(xmlFreeFunc * freeFunc, 
    xmlMallocFunc * mallocFunc,
    xmlReallocFunc * reallocFunc,
    xmlStrdupFunc * strdupFunc)
    +
    void *	xmlMemMalloc			(size_t size)
    +
    void *	xmlMemRealloc			(void * ptr, 
    size_t size)
    +
    int	xmlMemSetup			(xmlFreeFunc freeFunc, 
    xmlMallocFunc mallocFunc,
    xmlReallocFunc reallocFunc,
    xmlStrdupFunc strdupFunc)
    +
    void	xmlMemShow			(FILE * fp, 
    int nr)
    +
    char *	xmlMemStrdupLoc			(const char * str, 
    const char * file,
    int line)
    +
    int	xmlMemUsed			(void)
    +
    void	xmlMemoryDump			(void)
    +
    char *	xmlMemoryStrdup			(const char * str)
    +
    Function type: xmlReallocFunc
    +void *	xmlReallocFunc			(void * mem, 
    size_t size) +
    +
    void *	xmlReallocLoc			(void * ptr, 
    size_t size,
    const char * file,
    int line)
    +
    Function type: xmlStrdupFunc
    +char *	xmlStrdupFunc			(const char * str)
    +
    +

    Description

    +

    Macro: DEBUG_MEMORY

    #define 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

    +

    Function: xmlCleanupMemory

    void	xmlCleanupMemory		(void)
    +

    Free up all the memory allocated by the library for its own use. This should not be called by user level code.

    +

    Function type: xmlFreeFunc

    Function type: xmlFreeFunc
    +void	xmlFreeFunc			(void * mem)
    +

    Signature for a free() implementation.

    mem:an already allocated block of memory

    +

    Function: xmlGcMemGet

    int	xmlGcMemGet			(xmlFreeFunc * freeFunc, 
    xmlMallocFunc * mallocFunc,
    xmlMallocFunc * mallocAtomicFunc,
    xmlReallocFunc * reallocFunc,
    xmlStrdupFunc * strdupFunc)
    +

    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

    +
    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
    Returns:0 on success

    Function: xmlGcMemSetup

    int	xmlGcMemSetup			(xmlFreeFunc freeFunc, 
    xmlMallocFunc mallocFunc,
    xmlMallocFunc mallocAtomicFunc,
    xmlReallocFunc reallocFunc,
    xmlStrdupFunc strdupFunc)
    +

    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 ?

    +
    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
    Returns:0 on success

    Function: xmlInitMemory

    int	xmlInitMemory			(void)
    +

    Initialize the memory layer.

    +
    Returns:0 on success

    Function: xmlMallocAtomicLoc

    void *	xmlMallocAtomicLoc		(size_t size, 
    const char * file,
    int line)
    +

    a malloc() equivalent, with logging of the allocation info.

    +
    size:an unsigned int specifying the size in byte to allocate.
    file:the file name or NULL
    line:the line number
    Returns:a pointer to the allocated area or NULL in case of lack of memory.

    Function type: xmlMallocFunc

    Function type: xmlMallocFunc
    +void *	xmlMallocFunc			(size_t size)
    +

    Signature for a malloc() implementation.

    size:the size requested in bytes
    Returns:a pointer to the newly allocated block or NULL in case of error.

    +

    Function: xmlMallocLoc

    void *	xmlMallocLoc			(size_t size, 
    const char * file,
    int line)
    +

    a malloc() equivalent, with logging of the allocation info.

    +
    size:an int specifying the size in byte to allocate.
    file:the file name or NULL
    line:the line number
    Returns:a pointer to the allocated area or NULL in case of lack of memory.

    Function: xmlMemBlocks

    int	xmlMemBlocks			(void)
    +

    Provides the number of memory areas currently allocated

    +
    Returns:an int representing the number of blocks

    Function: xmlMemDisplay

    void	xmlMemDisplay			(FILE * fp)
    +

    show in-extenso the memory blocks allocated

    +
    fp:a FILE descriptor used as the output file, if NULL, the result is written to the file .memorylist

    Function: xmlMemDisplayLast

    void	xmlMemDisplayLast		(FILE * fp, 
    long nbBytes)
    +

    the last nbBytes of memory allocated and not freed, useful for dumping the memory left allocated between two places at runtime.

    +
    fp:a FILE descriptor used as the output file, if NULL, the result is written to the file .memorylist
    nbBytes:the amount of memory to dump

    Function: xmlMemFree

    void	xmlMemFree			(void * ptr)
    +

    a free() equivalent, with error checking.

    +
    ptr:the memory block pointer

    Function: xmlMemGet

    int	xmlMemGet			(xmlFreeFunc * freeFunc, 
    xmlMallocFunc * mallocFunc,
    xmlReallocFunc * reallocFunc,
    xmlStrdupFunc * strdupFunc)
    +

    Provides the memory access functions set currently in use

    +
    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
    Returns:0 on success

    Function: xmlMemMalloc

    void *	xmlMemMalloc			(size_t size)
    +

    a malloc() equivalent, with logging of the allocation info.

    +
    size:an int specifying the size in byte to allocate.
    Returns:a pointer to the allocated area or NULL in case of lack of memory.

    Function: xmlMemRealloc

    void *	xmlMemRealloc			(void * ptr, 
    size_t size)
    +

    a realloc() equivalent, with logging of the allocation info.

    +
    ptr:the initial memory block pointer
    size:an int specifying the size in byte to allocate.
    Returns:a pointer to the allocated area or NULL in case of lack of memory.

    Function: xmlMemSetup

    int	xmlMemSetup			(xmlFreeFunc freeFunc, 
    xmlMallocFunc mallocFunc,
    xmlReallocFunc reallocFunc,
    xmlStrdupFunc strdupFunc)
    +

    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 ?

    +
    freeFunc:the free() function to use
    mallocFunc:the malloc() function to use
    reallocFunc:the realloc() function to use
    strdupFunc:the strdup() function to use
    Returns:0 on success

    Function: xmlMemShow

    void	xmlMemShow			(FILE * fp, 
    int nr)
    +

    show a show display of the memory allocated, and dump the @nr last allocated areas which were not freed

    +
    fp:a FILE descriptor used as the output file
    nr:number of entries to dump

    Function: xmlMemStrdupLoc

    char *	xmlMemStrdupLoc			(const char * str, 
    const char * file,
    int line)
    +

    a strdup() equivalent, with logging of the allocation info.

    +
    str:the initial string pointer
    file:the file name or NULL
    line:the line number
    Returns:a pointer to the new string or NULL if allocation error occurred.

    Function: xmlMemUsed

    int	xmlMemUsed			(void)
    +

    Provides the amount of memory currently allocated

    +
    Returns:an int representing the amount of memory allocated.

    Function: xmlMemoryDump

    void	xmlMemoryDump			(void)
    +

    Dump in-extenso the memory blocks allocated to the file .memorylist

    +

    Function: xmlMemoryStrdup

    char *	xmlMemoryStrdup			(const char * str)
    +

    a strdup() equivalent, with logging of the allocation info.

    +
    str:the initial string pointer
    Returns:a pointer to the new string or NULL if allocation error occurred.

    Function type: xmlReallocFunc

    Function type: xmlReallocFunc
    +void *	xmlReallocFunc			(void * mem, 
    size_t size) +

    Signature for a realloc() implementation.

    mem:an already allocated block of memory
    size:the new size requested in bytes
    Returns:a pointer to the newly reallocated block or NULL in case of error.

    +

    Function: xmlReallocLoc

    void *	xmlReallocLoc			(void * ptr, 
    size_t size,
    const char * file,
    int line)
    +

    a realloc() equivalent, with logging of the allocation info.

    +
    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
    Returns:a pointer to the allocated area or NULL in case of lack of memory.

    Function type: xmlStrdupFunc

    Function type: xmlStrdupFunc
    +char *	xmlStrdupFunc			(const char * str)
    +

    Signature for an strdup() implementation.

    str:a zero terminated string
    Returns:the copy of the string or NULL in case of error.

    +

    Daniel Veillard

    diff --git a/doc/html/libxml-xmlmodule.html b/doc/html/libxml-xmlmodule.html new file mode 100644 index 0000000..1e25a92 --- /dev/null +++ b/doc/html/libxml-xmlmodule.html @@ -0,0 +1,38 @@ + + +Module xmlmodule from libxml2
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    Module xmlmodule from libxml2

    API Menu
    API Indexes
    Related links

    basic API for dynamic module loading, used by libexslt added in 2.6.17

    Table of Contents

    Structure xmlModule
    struct _xmlModule +The content of this structure is not made public by the API. +
    Enum xmlModuleOption
    +
    Typedef xmlModule * xmlModulePtr
    +
    int	xmlModuleClose			(xmlModulePtr module)
    +
    int	xmlModuleFree			(xmlModulePtr module)
    +
    xmlModulePtr	xmlModuleOpen		(const char * name, 
    int options)
    +
    int	xmlModuleSymbol			(xmlModulePtr module, 
    const char * name,
    void ** symbol)
    +

    Description

    +

    Structure xmlModule

    Structure xmlModule
    struct _xmlModule { +The content of this structure is not made public by the API. +}

    Enum xmlModuleOption

    Enum xmlModuleOption {
    +    XML_MODULE_LAZY = 1 : lazy binding
    +    XML_MODULE_LOCAL = 2 : local binding
    +}
    +
    + A handle to a dynamically loaded module +

    Function: xmlModuleClose

    int	xmlModuleClose			(xmlModulePtr module)
    +

    The close operations unload the associated module and free the data associated to the module.

    +
    module:the module handle
    Returns:0 in case of success, -1 in case of argument error and -2 if the module could not be closed/unloaded.

    Function: xmlModuleFree

    int	xmlModuleFree			(xmlModulePtr module)
    +

    The free operations free the data associated to the module but does not unload the associated shared library which may still be in use.

    +
    module:the module handle
    Returns:0 in case of success, -1 in case of argument error

    Function: xmlModuleOpen

    xmlModulePtr	xmlModuleOpen		(const char * name, 
    int options)
    +

    Opens a module/shared library given its name or path NOTE: that due to portability issues, behaviour can only be guaranteed with @name using ASCII. We canot guarantee that an UTF-8 string would work, which is why name is a const char * and not a const xmlChar * . TODO: options are not yet implemented.

    +
    name:the module name
    options:a set of xmlModuleOption
    Returns:a handle for the module or NULL in case of error

    Function: xmlModuleSymbol

    int	xmlModuleSymbol			(xmlModulePtr module, 
    const char * name,
    void ** symbol)
    +

    Lookup for a symbol address in the given module NOTE: that due to portability issues, behaviour can only be guaranteed with @name using ASCII. We canot guarantee that an UTF-8 string would work, which is why name is a const char * and not a const xmlChar * .

    +
    module:the module
    name:the name of the symbol
    symbol:the resulting symbol address
    Returns:0 if the symbol was found, or -1 in case of error

    Daniel Veillard

    diff --git a/doc/html/libxml-xmlreader.html b/doc/html/libxml-xmlreader.html new file mode 100644 index 0000000..f7e00fb --- /dev/null +++ b/doc/html/libxml-xmlreader.html @@ -0,0 +1,330 @@ + + +Module xmlreader from libxml2
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    Module xmlreader from libxml2

    API Menu
    API Indexes
    Related links

    API of the XML streaming API based on C# interfaces.

    Table of Contents

    Enum xmlParserProperties
    +
    Enum xmlParserSeverities
    +
    Enum xmlReaderTypes
    +
    Structure xmlTextReader
    struct _xmlTextReader +The content of this structure is not made public by the API. +
    Typedef void * xmlTextReaderLocatorPtr
    +
    Enum xmlTextReaderMode
    +
    Typedef xmlTextReader * xmlTextReaderPtr
    +
    void	xmlFreeTextReader		(xmlTextReaderPtr reader)
    +
    xmlTextReaderPtr	xmlNewTextReader	(xmlParserInputBufferPtr input, 
    const char * URI)
    +
    xmlTextReaderPtr	xmlNewTextReaderFilename	(const char * URI)
    +
    xmlTextReaderPtr	xmlReaderForDoc	(const xmlChar * cur, 
    const char * URL,
    const char * encoding,
    int options)
    +
    xmlTextReaderPtr	xmlReaderForFd	(int fd, 
    const char * URL,
    const char * encoding,
    int options)
    +
    xmlTextReaderPtr	xmlReaderForFile	(const char * filename, 
    const char * encoding,
    int options)
    +
    xmlTextReaderPtr	xmlReaderForIO	(xmlInputReadCallback ioread, 
    xmlInputCloseCallback ioclose,
    void * ioctx,
    const char * URL,
    const char * encoding,
    int options)
    +
    xmlTextReaderPtr	xmlReaderForMemory	(const char * buffer, 
    int size,
    const char * URL,
    const char * encoding,
    int options)
    +
    int	xmlReaderNewDoc			(xmlTextReaderPtr reader, 
    const xmlChar * cur,
    const char * URL,
    const char * encoding,
    int options)
    +
    int	xmlReaderNewFd			(xmlTextReaderPtr reader, 
    int fd,
    const char * URL,
    const char * encoding,
    int options)
    +
    int	xmlReaderNewFile		(xmlTextReaderPtr reader, 
    const char * filename,
    const char * encoding,
    int options)
    +
    int	xmlReaderNewIO			(xmlTextReaderPtr reader, 
    xmlInputReadCallback ioread,
    xmlInputCloseCallback ioclose,
    void * ioctx,
    const char * URL,
    const char * encoding,
    int options)
    +
    int	xmlReaderNewMemory		(xmlTextReaderPtr reader, 
    const char * buffer,
    int size,
    const char * URL,
    const char * encoding,
    int options)
    +
    int	xmlReaderNewWalker		(xmlTextReaderPtr reader, 
    xmlDocPtr doc)
    +
    xmlTextReaderPtr	xmlReaderWalker	(xmlDocPtr doc)
    +
    int	xmlTextReaderAttributeCount	(xmlTextReaderPtr reader)
    +
    xmlChar *	xmlTextReaderBaseUri	(xmlTextReaderPtr reader)
    +
    long	xmlTextReaderByteConsumed	(xmlTextReaderPtr reader)
    +
    int	xmlTextReaderClose		(xmlTextReaderPtr reader)
    +
    const xmlChar *	xmlTextReaderConstBaseUri	(xmlTextReaderPtr reader)
    +
    const xmlChar *	xmlTextReaderConstEncoding	(xmlTextReaderPtr reader)
    +
    const xmlChar *	xmlTextReaderConstLocalName	(xmlTextReaderPtr reader)
    +
    const xmlChar *	xmlTextReaderConstName	(xmlTextReaderPtr reader)
    +
    const xmlChar *	xmlTextReaderConstNamespaceUri	(xmlTextReaderPtr reader)
    +
    const xmlChar *	xmlTextReaderConstPrefix	(xmlTextReaderPtr reader)
    +
    const xmlChar *	xmlTextReaderConstString	(xmlTextReaderPtr reader, 
    const xmlChar * str)
    +
    const xmlChar *	xmlTextReaderConstValue	(xmlTextReaderPtr reader)
    +
    const xmlChar *	xmlTextReaderConstXmlLang	(xmlTextReaderPtr reader)
    +
    const xmlChar *	xmlTextReaderConstXmlVersion	(xmlTextReaderPtr reader)
    +
    xmlDocPtr	xmlTextReaderCurrentDoc	(xmlTextReaderPtr reader)
    +
    xmlNodePtr	xmlTextReaderCurrentNode	(xmlTextReaderPtr reader)
    +
    int	xmlTextReaderDepth		(xmlTextReaderPtr reader)
    +
    Function type: xmlTextReaderErrorFunc
    +void	xmlTextReaderErrorFunc		(void * arg, 
    const char * msg,
    xmlParserSeverities severity,
    xmlTextReaderLocatorPtr locator) +
    +
    xmlNodePtr	xmlTextReaderExpand	(xmlTextReaderPtr reader)
    +
    xmlChar *	xmlTextReaderGetAttribute	(xmlTextReaderPtr reader, 
    const xmlChar * name)
    +
    xmlChar *	xmlTextReaderGetAttributeNo	(xmlTextReaderPtr reader, 
    int no)
    +
    xmlChar *	xmlTextReaderGetAttributeNs	(xmlTextReaderPtr reader, 
    const xmlChar * localName,
    const xmlChar * namespaceURI)
    +
    void	xmlTextReaderGetErrorHandler	(xmlTextReaderPtr reader, 
    xmlTextReaderErrorFunc * f,
    void ** arg)
    +
    int	xmlTextReaderGetParserColumnNumber	(xmlTextReaderPtr reader)
    +
    int	xmlTextReaderGetParserLineNumber	(xmlTextReaderPtr reader)
    +
    int	xmlTextReaderGetParserProp	(xmlTextReaderPtr reader, 
    int prop)
    +
    xmlParserInputBufferPtr	xmlTextReaderGetRemainder	(xmlTextReaderPtr reader)
    +
    int	xmlTextReaderHasAttributes	(xmlTextReaderPtr reader)
    +
    int	xmlTextReaderHasValue		(xmlTextReaderPtr reader)
    +
    int	xmlTextReaderIsDefault		(xmlTextReaderPtr reader)
    +
    int	xmlTextReaderIsEmptyElement	(xmlTextReaderPtr reader)
    +
    int	xmlTextReaderIsNamespaceDecl	(xmlTextReaderPtr reader)
    +
    int	xmlTextReaderIsValid		(xmlTextReaderPtr reader)
    +
    xmlChar *	xmlTextReaderLocalName	(xmlTextReaderPtr reader)
    +
    xmlChar *	xmlTextReaderLocatorBaseURI	(xmlTextReaderLocatorPtr locator)
    +
    int	xmlTextReaderLocatorLineNumber	(xmlTextReaderLocatorPtr locator)
    +
    xmlChar *	xmlTextReaderLookupNamespace	(xmlTextReaderPtr reader, 
    const xmlChar * prefix)
    +
    int	xmlTextReaderMoveToAttribute	(xmlTextReaderPtr reader, 
    const xmlChar * name)
    +
    int	xmlTextReaderMoveToAttributeNo	(xmlTextReaderPtr reader, 
    int no)
    +
    int	xmlTextReaderMoveToAttributeNs	(xmlTextReaderPtr reader, 
    const xmlChar * localName,
    const xmlChar * namespaceURI)
    +
    int	xmlTextReaderMoveToElement	(xmlTextReaderPtr reader)
    +
    int	xmlTextReaderMoveToFirstAttribute	(xmlTextReaderPtr reader)
    +
    int	xmlTextReaderMoveToNextAttribute	(xmlTextReaderPtr reader)
    +
    xmlChar *	xmlTextReaderName	(xmlTextReaderPtr reader)
    +
    xmlChar *	xmlTextReaderNamespaceUri	(xmlTextReaderPtr reader)
    +
    int	xmlTextReaderNext		(xmlTextReaderPtr reader)
    +
    int	xmlTextReaderNextSibling	(xmlTextReaderPtr reader)
    +
    int	xmlTextReaderNodeType		(xmlTextReaderPtr reader)
    +
    int	xmlTextReaderNormalization	(xmlTextReaderPtr reader)
    +
    xmlChar *	xmlTextReaderPrefix	(xmlTextReaderPtr reader)
    +
    xmlNodePtr	xmlTextReaderPreserve	(xmlTextReaderPtr reader)
    +
    int	xmlTextReaderPreservePattern	(xmlTextReaderPtr reader, 
    const xmlChar * pattern,
    const xmlChar ** namespaces)
    +
    int	xmlTextReaderQuoteChar		(xmlTextReaderPtr reader)
    +
    int	xmlTextReaderRead		(xmlTextReaderPtr reader)
    +
    int	xmlTextReaderReadAttributeValue	(xmlTextReaderPtr reader)
    +
    xmlChar *	xmlTextReaderReadInnerXml	(xmlTextReaderPtr reader)
    +
    xmlChar *	xmlTextReaderReadOuterXml	(xmlTextReaderPtr reader)
    +
    int	xmlTextReaderReadState		(xmlTextReaderPtr reader)
    +
    xmlChar *	xmlTextReaderReadString	(xmlTextReaderPtr reader)
    +
    int	xmlTextReaderRelaxNGSetSchema	(xmlTextReaderPtr reader, 
    xmlRelaxNGPtr schema)
    +
    int	xmlTextReaderRelaxNGValidate	(xmlTextReaderPtr reader, 
    const char * rng)
    +
    int	xmlTextReaderRelaxNGValidateCtxt	(xmlTextReaderPtr reader, 
    xmlRelaxNGValidCtxtPtr ctxt,
    int options)
    +
    int	xmlTextReaderSchemaValidate	(xmlTextReaderPtr reader, 
    const char * xsd)
    +
    int	xmlTextReaderSchemaValidateCtxt	(xmlTextReaderPtr reader, 
    xmlSchemaValidCtxtPtr ctxt,
    int options)
    +
    void	xmlTextReaderSetErrorHandler	(xmlTextReaderPtr reader, 
    xmlTextReaderErrorFunc f,
    void * arg)
    +
    int	xmlTextReaderSetParserProp	(xmlTextReaderPtr reader, 
    int prop,
    int value)
    +
    int	xmlTextReaderSetSchema		(xmlTextReaderPtr reader, 
    xmlSchemaPtr schema)
    +
    void	xmlTextReaderSetStructuredErrorHandler	(xmlTextReaderPtr reader, 
    xmlStructuredErrorFunc f,
    void * arg)
    +
    int	xmlTextReaderSetup		(xmlTextReaderPtr reader, 
    xmlParserInputBufferPtr input,
    const char * URL,
    const char * encoding,
    int options)
    +
    int	xmlTextReaderStandalone		(xmlTextReaderPtr reader)
    +
    xmlChar *	xmlTextReaderValue	(xmlTextReaderPtr reader)
    +
    xmlChar *	xmlTextReaderXmlLang	(xmlTextReaderPtr reader)
    +

    Description

    +

    Enum xmlParserProperties

    Enum xmlParserProperties {
    +    XML_PARSER_LOADDTD = 1
    +    XML_PARSER_DEFAULTATTRS = 2
    +    XML_PARSER_VALIDATE = 3
    +    XML_PARSER_SUBST_ENTITIES = 4
    +}
    +

    Enum xmlParserSeverities

    Enum xmlParserSeverities {
    +    XML_PARSER_SEVERITY_VALIDITY_WARNING = 1
    +    XML_PARSER_SEVERITY_VALIDITY_ERROR = 2
    +    XML_PARSER_SEVERITY_WARNING = 3
    +    XML_PARSER_SEVERITY_ERROR = 4
    +}
    +

    Enum xmlReaderTypes

    Enum xmlReaderTypes {
    +    XML_READER_TYPE_NONE = 0
    +    XML_READER_TYPE_ELEMENT = 1
    +    XML_READER_TYPE_ATTRIBUTE = 2
    +    XML_READER_TYPE_TEXT = 3
    +    XML_READER_TYPE_CDATA = 4
    +    XML_READER_TYPE_ENTITY_REFERENCE = 5
    +    XML_READER_TYPE_ENTITY = 6
    +    XML_READER_TYPE_PROCESSING_INSTRUCTION = 7
    +    XML_READER_TYPE_COMMENT = 8
    +    XML_READER_TYPE_DOCUMENT = 9
    +    XML_READER_TYPE_DOCUMENT_TYPE = 10
    +    XML_READER_TYPE_DOCUMENT_FRAGMENT = 11
    +    XML_READER_TYPE_NOTATION = 12
    +    XML_READER_TYPE_WHITESPACE = 13
    +    XML_READER_TYPE_SIGNIFICANT_WHITESPACE = 14
    +    XML_READER_TYPE_END_ELEMENT = 15
    +    XML_READER_TYPE_END_ENTITY = 16
    +    XML_READER_TYPE_XML_DECLARATION = 17
    +}
    +

    Structure xmlTextReader

    Structure xmlTextReader
    struct _xmlTextReader { +The content of this structure is not made public by the API. +}

    Enum xmlTextReaderMode

    Enum xmlTextReaderMode {
    +    XML_TEXTREADER_MODE_INITIAL = 0
    +    XML_TEXTREADER_MODE_INTERACTIVE = 1
    +    XML_TEXTREADER_MODE_ERROR = 2
    +    XML_TEXTREADER_MODE_EOF = 3
    +    XML_TEXTREADER_MODE_CLOSED = 4
    +    XML_TEXTREADER_MODE_READING = 5
    +}
    +
    + Pointer to an xmlReader context. +

    Function: xmlFreeTextReader

    void	xmlFreeTextReader		(xmlTextReaderPtr reader)
    +

    Deallocate all the resources associated to the reader

    +
    reader:the xmlTextReaderPtr

    Function: xmlNewTextReader

    xmlTextReaderPtr	xmlNewTextReader	(xmlParserInputBufferPtr input, 
    const char * URI)
    +

    Create an xmlTextReader structure fed with @input

    +
    input:the xmlParserInputBufferPtr used to read data
    URI:the URI information for the source if available
    Returns:the new xmlTextReaderPtr or NULL in case of error

    Function: xmlNewTextReaderFilename

    xmlTextReaderPtr	xmlNewTextReaderFilename	(const char * URI)
    +

    Create an xmlTextReader structure fed with the resource at @URI

    +
    URI:the URI of the resource to process
    Returns:the new xmlTextReaderPtr or NULL in case of error

    Function: xmlReaderForDoc

    xmlTextReaderPtr	xmlReaderForDoc	(const xmlChar * cur, 
    const char * URL,
    const char * encoding,
    int options)
    +

    Create an xmltextReader for an XML in-memory document. The parsing flags @options are a combination of xmlParserOption.

    +
    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
    Returns:the new reader or NULL in case of error.

    Function: xmlReaderForFd

    xmlTextReaderPtr	xmlReaderForFd	(int fd, 
    const char * URL,
    const char * encoding,
    int options)
    +

    Create an xmltextReader for an XML from a file descriptor. The parsing flags @options are a combination of xmlParserOption. NOTE that the file descriptor will not be closed when the reader is closed or reset.

    +
    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
    Returns:the new reader or NULL in case of error.

    Function: xmlReaderForFile

    xmlTextReaderPtr	xmlReaderForFile	(const char * filename, 
    const char * encoding,
    int options)
    +

    parse an XML file from the filesystem or the network. The parsing flags @options are a combination of xmlParserOption.

    +
    filename:a file or URL
    encoding:the document encoding, or NULL
    options:a combination of xmlParserOption
    Returns:the new reader or NULL in case of error.

    Function: xmlReaderForIO

    xmlTextReaderPtr	xmlReaderForIO	(xmlInputReadCallback ioread, 
    xmlInputCloseCallback ioclose,
    void * ioctx,
    const char * URL,
    const char * encoding,
    int options)
    +

    Create an xmltextReader for an XML document from I/O functions and source. The parsing flags @options are a combination of xmlParserOption.

    +
    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
    Returns:the new reader or NULL in case of error.

    Function: xmlReaderForMemory

    xmlTextReaderPtr	xmlReaderForMemory	(const char * buffer, 
    int size,
    const char * URL,
    const char * encoding,
    int options)
    +

    Create an xmltextReader for an XML in-memory document. The parsing flags @options are a combination of xmlParserOption.

    +
    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
    Returns:the new reader or NULL in case of error.

    Function: xmlReaderNewDoc

    int	xmlReaderNewDoc			(xmlTextReaderPtr reader, 
    const xmlChar * cur,
    const char * URL,
    const char * encoding,
    int options)
    +

    Setup an xmltextReader to parse an XML in-memory document. The parsing flags @options are a combination of xmlParserOption. This reuses the existing @reader xmlTextReader.

    +
    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
    Returns:0 in case of success and -1 in case of error

    Function: xmlReaderNewFd

    int	xmlReaderNewFd			(xmlTextReaderPtr reader, 
    int fd,
    const char * URL,
    const char * encoding,
    int options)
    +

    Setup an xmltextReader to parse an XML from a file descriptor. NOTE that the file descriptor will not be closed when the reader is closed or reset. The parsing flags @options are a combination of xmlParserOption. This reuses the existing @reader xmlTextReader.

    +
    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
    Returns:0 in case of success and -1 in case of error

    Function: xmlReaderNewFile

    int	xmlReaderNewFile		(xmlTextReaderPtr reader, 
    const char * filename,
    const char * encoding,
    int options)
    +

    parse an XML file from the filesystem or the network. The parsing flags @options are a combination of xmlParserOption. This reuses the existing @reader xmlTextReader.

    +
    reader:an XML reader
    filename:a file or URL
    encoding:the document encoding, or NULL
    options:a combination of xmlParserOption
    Returns:0 in case of success and -1 in case of error

    Function: xmlReaderNewIO

    int	xmlReaderNewIO			(xmlTextReaderPtr reader, 
    xmlInputReadCallback ioread,
    xmlInputCloseCallback ioclose,
    void * ioctx,
    const char * URL,
    const char * encoding,
    int options)
    +

    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.

    +
    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
    Returns:0 in case of success and -1 in case of error

    Function: xmlReaderNewMemory

    int	xmlReaderNewMemory		(xmlTextReaderPtr reader, 
    const char * buffer,
    int size,
    const char * URL,
    const char * encoding,
    int options)
    +

    Setup an xmltextReader to parse an XML in-memory document. The parsing flags @options are a combination of xmlParserOption. This reuses the existing @reader xmlTextReader.

    +
    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
    Returns:0 in case of success and -1 in case of error

    Function: xmlReaderNewWalker

    int	xmlReaderNewWalker		(xmlTextReaderPtr reader, 
    xmlDocPtr doc)
    +

    Setup an xmltextReader to parse a preparsed XML document. This reuses the existing @reader xmlTextReader.

    +
    reader:an XML reader
    doc:a preparsed document
    Returns:0 in case of success and -1 in case of error

    Function: xmlReaderWalker

    xmlTextReaderPtr	xmlReaderWalker	(xmlDocPtr doc)
    +

    Create an xmltextReader for a preparsed document.

    +
    doc:a preparsed document
    Returns:the new reader or NULL in case of error.

    Function: xmlTextReaderAttributeCount

    int	xmlTextReaderAttributeCount	(xmlTextReaderPtr reader)
    +

    Provides the number of attributes of the current node

    +
    reader:the xmlTextReaderPtr used
    Returns:0 i no attributes, -1 in case of error or the attribute count

    Function: xmlTextReaderBaseUri

    xmlChar *	xmlTextReaderBaseUri	(xmlTextReaderPtr reader)
    +

    The base URI of the node.

    +
    reader:the xmlTextReaderPtr used
    Returns:the base URI or NULL if not available, if non NULL it need to be freed by the caller.

    Function: xmlTextReaderByteConsumed

    long	xmlTextReaderByteConsumed	(xmlTextReaderPtr reader)
    +

    This function provides the current index of the parser used by the reader, relative to the start of the current entity. This function actually just wraps a call to xmlBytesConsumed() for the parser context associated with the reader. See xmlBytesConsumed() for more information.

    +
    reader:an XML reader
    Returns:the index in bytes from the beginning of the entity or -1 in case the index could not be computed.

    Function: xmlTextReaderClose

    int	xmlTextReaderClose		(xmlTextReaderPtr reader)
    +

    This method releases any resources allocated by the current instance changes the state to Closed and close any underlying input.

    +
    reader:the xmlTextReaderPtr used
    Returns:0 or -1 in case of error

    Function: xmlTextReaderConstBaseUri

    const xmlChar *	xmlTextReaderConstBaseUri	(xmlTextReaderPtr reader)
    +

    The base URI of the node.

    +
    reader:the xmlTextReaderPtr used
    Returns:the base URI or NULL if not available, the string will be deallocated with the reader

    Function: xmlTextReaderConstEncoding

    const xmlChar *	xmlTextReaderConstEncoding	(xmlTextReaderPtr reader)
    +

    Determine the encoding of the document being read.

    +
    reader:the xmlTextReaderPtr used
    Returns:a string containing the encoding of the document or NULL in case of error. The string is deallocated with the reader.

    Function: xmlTextReaderConstLocalName

    const xmlChar *	xmlTextReaderConstLocalName	(xmlTextReaderPtr reader)
    +

    The local name of the node.

    +
    reader:the xmlTextReaderPtr used
    Returns:the local name or NULL if not available, the string will be deallocated with the reader.

    Function: xmlTextReaderConstName

    const xmlChar *	xmlTextReaderConstName	(xmlTextReaderPtr reader)
    +

    The qualified name of the node, equal to Prefix :LocalName.

    +
    reader:the xmlTextReaderPtr used
    Returns:the local name or NULL if not available, the string is deallocated with the reader.

    Function: xmlTextReaderConstNamespaceUri

    const xmlChar *	xmlTextReaderConstNamespaceUri	(xmlTextReaderPtr reader)
    +

    The URI defining the namespace associated with the node.

    +
    reader:the xmlTextReaderPtr used
    Returns:the namespace URI or NULL if not available, the string will be deallocated with the reader

    Function: xmlTextReaderConstPrefix

    const xmlChar *	xmlTextReaderConstPrefix	(xmlTextReaderPtr reader)
    +

    A shorthand reference to the namespace associated with the node.

    +
    reader:the xmlTextReaderPtr used
    Returns:the prefix or NULL if not available, the string is deallocated with the reader.

    Function: xmlTextReaderConstString

    const xmlChar *	xmlTextReaderConstString	(xmlTextReaderPtr reader, 
    const xmlChar * str)
    +

    Get an interned string from the reader, allows for example to speedup string name comparisons

    +
    reader:the xmlTextReaderPtr used
    str:the string to intern.
    Returns:an interned copy of the string or NULL in case of error. The string will be deallocated with the reader.

    Function: xmlTextReaderConstValue

    const xmlChar *	xmlTextReaderConstValue	(xmlTextReaderPtr reader)
    +

    Provides the text value of the node if present

    +
    reader:the xmlTextReaderPtr used
    Returns:the string or NULL if not available. The result will be deallocated on the next Read() operation.

    Function: xmlTextReaderConstXmlLang

    const xmlChar *	xmlTextReaderConstXmlLang	(xmlTextReaderPtr reader)
    +

    The xml:lang scope within which the node resides.

    +
    reader:the xmlTextReaderPtr used
    Returns:the xml:lang value or NULL if none exists.

    Function: xmlTextReaderConstXmlVersion

    const xmlChar *	xmlTextReaderConstXmlVersion	(xmlTextReaderPtr reader)
    +

    Determine the XML version of the document being read.

    +
    reader:the xmlTextReaderPtr used
    Returns:a string containing the XML version of the document or NULL in case of error. The string is deallocated with the reader.

    Function: xmlTextReaderCurrentDoc

    xmlDocPtr	xmlTextReaderCurrentDoc	(xmlTextReaderPtr reader)
    +

    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.

    +
    reader:the xmlTextReaderPtr used
    Returns:the xmlDocPtr or NULL in case of error.

    Function: xmlTextReaderCurrentNode

    xmlNodePtr	xmlTextReaderCurrentNode	(xmlTextReaderPtr reader)
    +

    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.

    +
    reader:the xmlTextReaderPtr used
    Returns:the xmlNodePtr or NULL in case of error.

    Function: xmlTextReaderDepth

    int	xmlTextReaderDepth		(xmlTextReaderPtr reader)
    +

    The depth of the node in the tree.

    +
    reader:the xmlTextReaderPtr used
    Returns:the depth or -1 in case of error

    Function type: xmlTextReaderErrorFunc

    Function type: xmlTextReaderErrorFunc
    +void	xmlTextReaderErrorFunc		(void * arg, 
    const char * msg,
    xmlParserSeverities severity,
    xmlTextReaderLocatorPtr locator) +

    Signature of an error callback from a reader parser

    arg:the user argument
    msg:the message
    severity:the severity of the error
    locator:a locator indicating where the error occured

    +

    Function: xmlTextReaderExpand

    xmlNodePtr	xmlTextReaderExpand	(xmlTextReaderPtr reader)
    +

    Reads the contents of the current node and the full subtree. It then makes the subtree available until the next xmlTextReaderRead() call

    +
    reader:the xmlTextReaderPtr used
    Returns:a node pointer valid until the next xmlTextReaderRead() call or NULL in case of error.

    Function: xmlTextReaderGetAttribute

    xmlChar *	xmlTextReaderGetAttribute	(xmlTextReaderPtr reader, 
    const xmlChar * name)
    +

    Provides the value of the attribute with the specified qualified name.

    +
    reader:the xmlTextReaderPtr used
    name:the qualified name of the 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.

    Function: xmlTextReaderGetAttributeNo

    xmlChar *	xmlTextReaderGetAttributeNo	(xmlTextReaderPtr reader, 
    int no)
    +

    Provides the value of the attribute with the specified index relative to the containing element.

    +
    reader:the xmlTextReaderPtr used
    no:the zero-based index of the attribute 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.

    Function: xmlTextReaderGetAttributeNs

    xmlChar *	xmlTextReaderGetAttributeNs	(xmlTextReaderPtr reader, 
    const xmlChar * localName,
    const xmlChar * namespaceURI)
    +

    Provides the value of the specified attribute

    +
    reader:the xmlTextReaderPtr used
    localName:the local name of the attribute.
    namespaceURI:the namespace URI of the 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.

    Function: xmlTextReaderGetErrorHandler

    void	xmlTextReaderGetErrorHandler	(xmlTextReaderPtr reader, 
    xmlTextReaderErrorFunc * f,
    void ** arg)
    +

    Retrieve the error callback function and user argument.

    +
    reader:the xmlTextReaderPtr used
    f:the callback function or NULL is no callback has been registered
    arg:a user argument

    Function: xmlTextReaderGetParserColumnNumber

    int	xmlTextReaderGetParserColumnNumber	(xmlTextReaderPtr reader)
    +

    Provide the column number of the current parsing point.

    +
    reader:the user data (XML reader context)
    Returns:an int or 0 if not available

    Function: xmlTextReaderGetParserLineNumber

    int	xmlTextReaderGetParserLineNumber	(xmlTextReaderPtr reader)
    +

    Provide the line number of the current parsing point.

    +
    reader:the user data (XML reader context)
    Returns:an int or 0 if not available

    Function: xmlTextReaderGetParserProp

    int	xmlTextReaderGetParserProp	(xmlTextReaderPtr reader, 
    int prop)
    +

    Read the parser internal property.

    +
    reader:the xmlTextReaderPtr used
    prop:the xmlParserProperties to get
    Returns:the value, usually 0 or 1, or -1 in case of error.

    Function: xmlTextReaderGetRemainder

    xmlParserInputBufferPtr	xmlTextReaderGetRemainder	(xmlTextReaderPtr reader)
    +

    Method to get the remainder of the buffered XML. this method stops the parser, set its state to End Of File and return the input stream with what is left that the parser did not use. The implementation is not good, the parser certainly procgressed past what's left in reader->input, and there is an allocation problem. Best would be to rewrite it differently.

    +
    reader:the xmlTextReaderPtr used
    Returns:the xmlParserInputBufferPtr attached to the XML or NULL in case of error.

    Function: xmlTextReaderHasAttributes

    int	xmlTextReaderHasAttributes	(xmlTextReaderPtr reader)
    +

    Whether the node has attributes.

    +
    reader:the xmlTextReaderPtr used
    Returns:1 if true, 0 if false, and -1 in case or error

    Function: xmlTextReaderHasValue

    int	xmlTextReaderHasValue		(xmlTextReaderPtr reader)
    +

    Whether the node can have a text value.

    +
    reader:the xmlTextReaderPtr used
    Returns:1 if true, 0 if false, and -1 in case or error

    Function: xmlTextReaderIsDefault

    int	xmlTextReaderIsDefault		(xmlTextReaderPtr reader)
    +

    Whether an Attribute node was generated from the default value defined in the DTD or schema.

    +
    reader:the xmlTextReaderPtr used
    Returns:0 if not defaulted, 1 if defaulted, and -1 in case of error

    Function: xmlTextReaderIsEmptyElement

    int	xmlTextReaderIsEmptyElement	(xmlTextReaderPtr reader)
    +

    Check if the current node is empty

    +
    reader:the xmlTextReaderPtr used
    Returns:1 if empty, 0 if not and -1 in case of error

    Function: xmlTextReaderIsNamespaceDecl

    int	xmlTextReaderIsNamespaceDecl	(xmlTextReaderPtr reader)
    +

    Determine whether the current node is a namespace declaration rather than a regular attribute.

    +
    reader:the xmlTextReaderPtr used
    Returns:1 if the current node is a namespace declaration, 0 if it is a regular attribute or other type of node, or -1 in case of error.

    Function: xmlTextReaderIsValid

    int	xmlTextReaderIsValid		(xmlTextReaderPtr reader)
    +

    Retrieve the validity status from the parser context

    +
    reader:the xmlTextReaderPtr used
    Returns:the flag value 1 if valid, 0 if no, and -1 in case of error

    Function: xmlTextReaderLocalName

    xmlChar *	xmlTextReaderLocalName	(xmlTextReaderPtr reader)
    +

    The local name of the node.

    +
    reader:the xmlTextReaderPtr used
    Returns:the local name or NULL if not available, if non NULL it need to be freed by the caller.

    Function: xmlTextReaderLocatorBaseURI

    xmlChar *	xmlTextReaderLocatorBaseURI	(xmlTextReaderLocatorPtr locator)
    +

    Obtain the base URI for the given locator.

    +
    locator:the xmlTextReaderLocatorPtr used
    Returns:the base URI or NULL in case of error, if non NULL it need to be freed by the caller.

    Function: xmlTextReaderLocatorLineNumber

    int	xmlTextReaderLocatorLineNumber	(xmlTextReaderLocatorPtr locator)
    +

    Obtain the line number for the given locator.

    +
    locator:the xmlTextReaderLocatorPtr used
    Returns:the line number or -1 in case of error.

    Function: xmlTextReaderLookupNamespace

    xmlChar *	xmlTextReaderLookupNamespace	(xmlTextReaderPtr reader, 
    const xmlChar * prefix)
    +

    Resolves a namespace prefix in the scope of the current element.

    +
    reader:the xmlTextReaderPtr used
    prefix:the prefix whose namespace URI is to be resolved. To return the default namespace, specify NULL
    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.

    Function: xmlTextReaderMoveToAttribute

    int	xmlTextReaderMoveToAttribute	(xmlTextReaderPtr reader, 
    const xmlChar * name)
    +

    Moves the position of the current instance to the attribute with the specified qualified name.

    +
    reader:the xmlTextReaderPtr used
    name:the qualified name of the attribute.
    Returns:1 in case of success, -1 in case of error, 0 if not found

    Function: xmlTextReaderMoveToAttributeNo

    int	xmlTextReaderMoveToAttributeNo	(xmlTextReaderPtr reader, 
    int no)
    +

    Moves the position of the current instance to the attribute with the specified index relative to the containing element.

    +
    reader:the xmlTextReaderPtr used
    no:the zero-based index of the attribute relative to the containing element.
    Returns:1 in case of success, -1 in case of error, 0 if not found

    Function: xmlTextReaderMoveToAttributeNs

    int	xmlTextReaderMoveToAttributeNs	(xmlTextReaderPtr reader, 
    const xmlChar * localName,
    const xmlChar * namespaceURI)
    +

    Moves the position of the current instance to the attribute with the specified local name and namespace URI.

    +
    reader:the xmlTextReaderPtr used
    localName:the local name of the attribute.
    namespaceURI:the namespace URI of the attribute.
    Returns:1 in case of success, -1 in case of error, 0 if not found

    Function: xmlTextReaderMoveToElement

    int	xmlTextReaderMoveToElement	(xmlTextReaderPtr reader)
    +

    Moves the position of the current instance to the node that contains the current Attribute node.

    +
    reader:the xmlTextReaderPtr used
    Returns:1 in case of success, -1 in case of error, 0 if not moved

    Function: xmlTextReaderMoveToFirstAttribute

    int	xmlTextReaderMoveToFirstAttribute	(xmlTextReaderPtr reader)
    +

    Moves the position of the current instance to the first attribute associated with the current node.

    +
    reader:the xmlTextReaderPtr used
    Returns:1 in case of success, -1 in case of error, 0 if not found

    Function: xmlTextReaderMoveToNextAttribute

    int	xmlTextReaderMoveToNextAttribute	(xmlTextReaderPtr reader)
    +

    Moves the position of the current instance to the next attribute associated with the current node.

    +
    reader:the xmlTextReaderPtr used
    Returns:1 in case of success, -1 in case of error, 0 if not found

    Function: xmlTextReaderName

    xmlChar *	xmlTextReaderName	(xmlTextReaderPtr reader)
    +

    The qualified name of the node, equal to Prefix :LocalName.

    +
    reader:the xmlTextReaderPtr used
    Returns:the local name or NULL if not available, if non NULL it need to be freed by the caller.

    Function: xmlTextReaderNamespaceUri

    xmlChar *	xmlTextReaderNamespaceUri	(xmlTextReaderPtr reader)
    +

    The URI defining the namespace associated with the node.

    +
    reader:the xmlTextReaderPtr used
    Returns:the namespace URI or NULL if not available, if non NULL it need to be freed by the caller.

    Function: xmlTextReaderNext

    int	xmlTextReaderNext		(xmlTextReaderPtr reader)
    +

    Skip to the node following the current one in document order while avoiding the subtree if any.

    +
    reader:the xmlTextReaderPtr used
    Returns:1 if the node was read successfully, 0 if there is no more nodes to read, or -1 in case of error

    Function: xmlTextReaderNextSibling

    int	xmlTextReaderNextSibling	(xmlTextReaderPtr reader)
    +

    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

    +
    reader:the xmlTextReaderPtr used
    Returns:1 if the node was read successfully, 0 if there is no more nodes to read, or -1 in case of error

    Function: xmlTextReaderNodeType

    int	xmlTextReaderNodeType		(xmlTextReaderPtr reader)
    +

    Get the node type of the current node Reference: http://www.gnu.org/software/dotgnu/pnetlib-doc/System/Xml/XmlNodeType.html

    +
    reader:the xmlTextReaderPtr used
    Returns:the xmlNodeType of the current node or -1 in case of error

    Function: xmlTextReaderNormalization

    int	xmlTextReaderNormalization	(xmlTextReaderPtr reader)
    +

    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.

    +
    reader:the xmlTextReaderPtr used
    Returns:1 or -1 in case of error.

    Function: xmlTextReaderPrefix

    xmlChar *	xmlTextReaderPrefix	(xmlTextReaderPtr reader)
    +

    A shorthand reference to the namespace associated with the node.

    +
    reader:the xmlTextReaderPtr used
    Returns:the prefix or NULL if not available, if non NULL it need to be freed by the caller.

    Function: xmlTextReaderPreserve

    xmlNodePtr	xmlTextReaderPreserve	(xmlTextReaderPtr reader)
    +

    This tells the XML Reader to preserve the current node. The caller must also use xmlTextReaderCurrentDoc() to keep an handle on the resulting document once parsing has finished

    +
    reader:the xmlTextReaderPtr used
    Returns:the xmlNodePtr or NULL in case of error.

    Function: xmlTextReaderPreservePattern

    int	xmlTextReaderPreservePattern	(xmlTextReaderPtr reader, 
    const xmlChar * pattern,
    const xmlChar ** namespaces)
    +

    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

    +
    reader:the xmlTextReaderPtr used
    pattern:an XPath subset pattern
    namespaces:the prefix definitions, array of [URI, prefix] or NULL
    Returns:a positive number in case of success and -1 in case of error

    Function: xmlTextReaderQuoteChar

    int	xmlTextReaderQuoteChar		(xmlTextReaderPtr reader)
    +

    The quotation mark character used to enclose the value of an attribute.

    +
    reader:the xmlTextReaderPtr used
    Returns:" or ' and -1 in case of error

    Function: xmlTextReaderRead

    int	xmlTextReaderRead		(xmlTextReaderPtr reader)
    +

    Moves the position of the current instance to the next node in the stream, exposing its properties.

    +
    reader:the xmlTextReaderPtr used
    Returns:1 if the node was read successfully, 0 if there is no more nodes to read, or -1 in case of error

    Function: xmlTextReaderReadAttributeValue

    int	xmlTextReaderReadAttributeValue	(xmlTextReaderPtr reader)
    +

    Parses an attribute value into one or more Text and EntityReference nodes.

    +
    reader:the xmlTextReaderPtr used
    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.

    Function: xmlTextReaderReadInnerXml

    xmlChar *	xmlTextReaderReadInnerXml	(xmlTextReaderPtr reader)
    +

    Reads the contents of the current node, including child nodes and markup.

    +
    reader:the xmlTextReaderPtr used
    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.

    Function: xmlTextReaderReadOuterXml

    xmlChar *	xmlTextReaderReadOuterXml	(xmlTextReaderPtr reader)
    +

    Reads the contents of the current node, including child nodes and markup.

    +
    reader:the xmlTextReaderPtr used
    Returns:a string containing the node and any XML content, or NULL if the current node cannot be serialized. The string must be deallocated by the caller.

    Function: xmlTextReaderReadState

    int	xmlTextReaderReadState		(xmlTextReaderPtr reader)
    +

    Gets the read state of the reader.

    +
    reader:the xmlTextReaderPtr used
    Returns:the state value, or -1 in case of error

    Function: xmlTextReaderReadString

    xmlChar *	xmlTextReaderReadString	(xmlTextReaderPtr reader)
    +

    Reads the contents of an element or a text node as a string.

    +
    reader:the xmlTextReaderPtr used
    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.

    Function: xmlTextReaderRelaxNGSetSchema

    int	xmlTextReaderRelaxNGSetSchema	(xmlTextReaderPtr reader, 
    xmlRelaxNGPtr 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.

    +
    reader:the xmlTextReaderPtr used
    schema:a precompiled RelaxNG schema
    Returns:0 in case the RelaxNG validation could be (des)activated and -1 in case of error.

    Function: xmlTextReaderRelaxNGValidate

    int	xmlTextReaderRelaxNGValidate	(xmlTextReaderPtr reader, 
    const char * rng)
    +

    Use RelaxNG schema to validate the document as it is processed. Activation is only possible before the first Read(). If @rng is NULL, then RelaxNG schema validation is deactivated.

    +
    reader:the xmlTextReaderPtr used
    rng:the path to a RelaxNG schema or NULL
    Returns:0 in case the schemas validation could be (de)activated and -1 in case of error.

    Function: xmlTextReaderRelaxNGValidateCtxt

    int	xmlTextReaderRelaxNGValidateCtxt	(xmlTextReaderPtr reader, 
    xmlRelaxNGValidCtxtPtr ctxt,
    int options)
    +

    Use RelaxNG schema context to validate the document as it is processed. Activation is only possible before the first Read(). If @ctxt is NULL, then RelaxNG schema validation is deactivated.

    +
    reader:the xmlTextReaderPtr used
    ctxt:the RelaxNG schema validation context or NULL
    options:options (not used yet)
    Returns:0 in case the schemas validation could be (de)activated and -1 in case of error.

    Function: xmlTextReaderSchemaValidate

    int	xmlTextReaderSchemaValidate	(xmlTextReaderPtr reader, 
    const char * xsd)
    +

    Use W3C XSD schema to validate the document as it is processed. Activation is only possible before the first Read(). If @xsd is NULL, then XML Schema validation is deactivated.

    +
    reader:the xmlTextReaderPtr used
    xsd:the path to a W3C XSD schema or NULL
    Returns:0 in case the schemas validation could be (de)activated and -1 in case of error.

    Function: xmlTextReaderSchemaValidateCtxt

    int	xmlTextReaderSchemaValidateCtxt	(xmlTextReaderPtr reader, 
    xmlSchemaValidCtxtPtr ctxt,
    int options)
    +

    Use W3C XSD schema context to validate the document as it is processed. Activation is only possible before the first Read(). If @ctxt is NULL, then XML Schema validation is deactivated.

    +
    reader:the xmlTextReaderPtr used
    ctxt:the XML Schema validation context or NULL
    options:options (not used yet)
    Returns:0 in case the schemas validation could be (de)activated and -1 in case of error.

    Function: xmlTextReaderSetErrorHandler

    void	xmlTextReaderSetErrorHandler	(xmlTextReaderPtr reader, 
    xmlTextReaderErrorFunc f,
    void * arg)
    +

    Register a callback function that will be called on error and warnings. If @f is NULL, the default error and warning handlers are restored.

    +
    reader:the xmlTextReaderPtr used
    f:the callback function to call on error and warnings
    arg:a user argument to pass to the callback function

    Function: xmlTextReaderSetParserProp

    int	xmlTextReaderSetParserProp	(xmlTextReaderPtr reader, 
    int prop,
    int value)
    +

    Change the parser processing behaviour by changing some of its internal properties. Note that some properties can only be changed before any read has been done.

    +
    reader:the xmlTextReaderPtr used
    prop:the xmlParserProperties to set
    value:usually 0 or 1 to (de)activate it
    Returns:0 if the call was successful, or -1 in case of error

    Function: xmlTextReaderSetSchema

    int	xmlTextReaderSetSchema		(xmlTextReaderPtr reader, 
    xmlSchemaPtr schema)
    +

    Use XSD Schema to validate the document as it is processed. Activation is only possible before the first Read(). if @schema is NULL, then Schema validation is desactivated. @ The @schema should not be freed until the reader is deallocated or its use has been deactivated.

    +
    reader:the xmlTextReaderPtr used
    schema:a precompiled Schema schema
    Returns:0 in case the Schema validation could be (des)activated and -1 in case of error.

    Function: xmlTextReaderSetStructuredErrorHandler

    void	xmlTextReaderSetStructuredErrorHandler	(xmlTextReaderPtr reader, 
    xmlStructuredErrorFunc f,
    void * arg)
    +

    Register a callback function that will be called on error and warnings. If @f is NULL, the default error and warning handlers are restored.

    +
    reader:the xmlTextReaderPtr used
    f:the callback function to call on error and warnings
    arg:a user argument to pass to the callback function

    Function: xmlTextReaderSetup

    int	xmlTextReaderSetup		(xmlTextReaderPtr reader, 
    xmlParserInputBufferPtr input,
    const char * URL,
    const char * encoding,
    int options)
    +

    Setup an XML reader with new options

    +
    reader:an XML reader
    input:xmlParserInputBufferPtr used to feed the reader, will be destroyed with it.
    URL:the base URL to use for the document
    encoding:the document encoding, or NULL
    options:a combination of xmlParserOption
    Returns:0 in case of success and -1 in case of error.

    Function: xmlTextReaderStandalone

    int	xmlTextReaderStandalone		(xmlTextReaderPtr reader)
    +

    Determine the standalone status of the document being read.

    +
    reader:the xmlTextReaderPtr used
    Returns:1 if the document was declared to be standalone, 0 if it was declared to be not standalone, or -1 if the document did not specify its standalone status or in case of error.

    Function: xmlTextReaderValue

    xmlChar *	xmlTextReaderValue	(xmlTextReaderPtr reader)
    +

    Provides the text value of the node if present

    +
    reader:the xmlTextReaderPtr used
    Returns:the string or NULL if not available. The result must be deallocated with xmlFree()

    Function: xmlTextReaderXmlLang

    xmlChar *	xmlTextReaderXmlLang	(xmlTextReaderPtr reader)
    +

    The xml:lang scope within which the node resides.

    +
    reader:the xmlTextReaderPtr used
    Returns:the xml:lang value or NULL if none exists., if non NULL it need to be freed by the caller.

    Daniel Veillard

    diff --git a/doc/html/libxml-xmlregexp.html b/doc/html/libxml-xmlregexp.html new file mode 100644 index 0000000..564f65e --- /dev/null +++ b/doc/html/libxml-xmlregexp.html @@ -0,0 +1,143 @@ + + +Module xmlregexp from libxml2
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    Module xmlregexp from libxml2

    API Menu
    API Indexes
    Related links

    basic API for libxml regular expressions handling used for XML Schemas and validation.

    Table of Contents

    Structure xmlExpCtxt
    struct _xmlExpCtxt +The content of this structure is not made public by the API. +
    Typedef xmlExpCtxt * xmlExpCtxtPtr
    +
    Structure xmlExpNode
    struct _xmlExpNode +The content of this structure is not made public by the API. +
    Typedef xmlExpNode * xmlExpNodePtr
    +
    Enum xmlExpNodeType
    +
    Structure xmlRegExecCtxt
    struct _xmlRegExecCtxt +The content of this structure is not made public by the API. +
    Typedef xmlRegExecCtxt * xmlRegExecCtxtPtr
    +
    Structure xmlRegexp
    struct _xmlRegexp +The content of this structure is not made public by the API. +
    Typedef xmlRegexp * xmlRegexpPtr
    +
    int	xmlExpCtxtNbCons		(xmlExpCtxtPtr ctxt)
    +
    int	xmlExpCtxtNbNodes		(xmlExpCtxtPtr ctxt)
    +
    void	xmlExpDump			(xmlBufferPtr buf, 
    xmlExpNodePtr expr)
    +
    xmlExpNodePtr	xmlExpExpDerive		(xmlExpCtxtPtr ctxt, 
    xmlExpNodePtr exp,
    xmlExpNodePtr sub)
    +
    void	xmlExpFree			(xmlExpCtxtPtr ctxt, 
    xmlExpNodePtr exp)
    +
    void	xmlExpFreeCtxt			(xmlExpCtxtPtr ctxt)
    +
    int	xmlExpGetLanguage		(xmlExpCtxtPtr ctxt, 
    xmlExpNodePtr exp,
    const xmlChar ** langList,
    int len)
    +
    int	xmlExpGetStart			(xmlExpCtxtPtr ctxt, 
    xmlExpNodePtr exp,
    const xmlChar ** tokList,
    int len)
    +
    int	xmlExpIsNillable		(xmlExpNodePtr exp)
    +
    int	xmlExpMaxToken			(xmlExpNodePtr expr)
    +
    xmlExpNodePtr	xmlExpNewAtom		(xmlExpCtxtPtr ctxt, 
    const xmlChar * name,
    int len)
    +
    xmlExpCtxtPtr	xmlExpNewCtxt		(int maxNodes, 
    xmlDictPtr dict)
    +
    xmlExpNodePtr	xmlExpNewOr		(xmlExpCtxtPtr ctxt, 
    xmlExpNodePtr left,
    xmlExpNodePtr right)
    +
    xmlExpNodePtr	xmlExpNewRange		(xmlExpCtxtPtr ctxt, 
    xmlExpNodePtr subset,
    int min,
    int max)
    +
    xmlExpNodePtr	xmlExpNewSeq		(xmlExpCtxtPtr ctxt, 
    xmlExpNodePtr left,
    xmlExpNodePtr right)
    +
    xmlExpNodePtr	xmlExpParse		(xmlExpCtxtPtr ctxt, 
    const char * expr)
    +
    void	xmlExpRef			(xmlExpNodePtr exp)
    +
    xmlExpNodePtr	xmlExpStringDerive	(xmlExpCtxtPtr ctxt, 
    xmlExpNodePtr exp,
    const xmlChar * str,
    int len)
    +
    int	xmlExpSubsume			(xmlExpCtxtPtr ctxt, 
    xmlExpNodePtr exp,
    xmlExpNodePtr sub)
    +
    Function type: xmlRegExecCallbacks
    +void	xmlRegExecCallbacks		(xmlRegExecCtxtPtr exec, 
    const xmlChar * token,
    void * transdata,
    void * inputdata) +
    +
    int	xmlRegExecErrInfo		(xmlRegExecCtxtPtr exec, 
    const xmlChar ** string,
    int * nbval,
    int * nbneg,
    xmlChar ** values,
    int * terminal)
    +
    int	xmlRegExecNextValues		(xmlRegExecCtxtPtr exec, 
    int * nbval,
    int * nbneg,
    xmlChar ** values,
    int * terminal)
    +
    int	xmlRegExecPushString		(xmlRegExecCtxtPtr exec, 
    const xmlChar * value,
    void * data)
    +
    int	xmlRegExecPushString2		(xmlRegExecCtxtPtr exec, 
    const xmlChar * value,
    const xmlChar * value2,
    void * data)
    +
    void	xmlRegFreeExecCtxt		(xmlRegExecCtxtPtr exec)
    +
    void	xmlRegFreeRegexp		(xmlRegexpPtr regexp)
    +
    xmlRegExecCtxtPtr	xmlRegNewExecCtxt	(xmlRegexpPtr comp, 
    xmlRegExecCallbacks callback,
    void * data)
    +
    xmlRegexpPtr	xmlRegexpCompile	(const xmlChar * regexp)
    +
    int	xmlRegexpExec			(xmlRegexpPtr comp, 
    const xmlChar * content)
    +
    int	xmlRegexpIsDeterminist		(xmlRegexpPtr comp)
    +
    void	xmlRegexpPrint			(FILE * output, 
    xmlRegexpPtr regexp)
    +

    Description

    +

    Structure xmlExpCtxt

    Structure xmlExpCtxt
    struct _xmlExpCtxt { +The content of this structure is not made public by the API. +}

    Structure xmlExpNode

    Structure xmlExpNode
    struct _xmlExpNode { +The content of this structure is not made public by the API. +}

    Enum xmlExpNodeType

    Enum xmlExpNodeType {
    +    XML_EXP_EMPTY = 0
    +    XML_EXP_FORBID = 1
    +    XML_EXP_ATOM = 2
    +    XML_EXP_SEQ = 3
    +    XML_EXP_OR = 4
    +    XML_EXP_COUNT = 5
    +}
    +

    Structure xmlRegExecCtxt

    Structure xmlRegExecCtxt
    struct _xmlRegExecCtxt { +The content of this structure is not made public by the API. +}
    + A libxml progressive regular expression evaluation context +

    Structure xmlRegexp

    Structure xmlRegexp
    struct _xmlRegexp { +The content of this structure is not made public by the API. +}
    + A libxml regular expression, they can actually be far more complex thank the POSIX regex expressions. +

    Function: xmlExpCtxtNbCons

    int	xmlExpCtxtNbCons		(xmlExpCtxtPtr ctxt)
    +

    Debugging facility provides the number of allocated nodes over lifetime

    +
    ctxt:an expression context
    Returns:the number of nodes ever allocated or -1 in case of error

    Function: xmlExpCtxtNbNodes

    int	xmlExpCtxtNbNodes		(xmlExpCtxtPtr ctxt)
    +

    Debugging facility provides the number of allocated nodes at a that point

    +
    ctxt:an expression context
    Returns:the number of nodes in use or -1 in case of error

    Function: xmlExpDump

    void	xmlExpDump			(xmlBufferPtr buf, 
    xmlExpNodePtr expr)
    +

    Serialize the expression as compiled to the buffer

    +
    buf:a buffer to receive the output
    expr:the compiled expression

    Function: xmlExpExpDerive

    xmlExpNodePtr	xmlExpExpDerive		(xmlExpCtxtPtr ctxt, 
    xmlExpNodePtr exp,
    xmlExpNodePtr sub)
    +

    Evaluates the expression resulting from @exp consuming a sub expression @sub Based on algebraic derivation and sometimes direct Brzozowski derivation it usually tatkes less than linear time and can handle expressions generating infinite languages.

    +
    ctxt:the expressions context
    exp:the englobing expression
    sub:the subexpression
    Returns:the resulting expression or NULL in case of internal error, the result must be freed

    Function: xmlExpFree

    void	xmlExpFree			(xmlExpCtxtPtr ctxt, 
    xmlExpNodePtr exp)
    +

    Dereference the expression

    +
    ctxt:the expression context
    exp:the expression

    Function: xmlExpFreeCtxt

    void	xmlExpFreeCtxt			(xmlExpCtxtPtr ctxt)
    +

    Free an expression context

    +
    ctxt:an expression context

    Function: xmlExpGetLanguage

    int	xmlExpGetLanguage		(xmlExpCtxtPtr ctxt, 
    xmlExpNodePtr exp,
    const xmlChar ** langList,
    int len)
    +

    Find all the strings used in @exp and store them in @list

    +
    ctxt:the expression context
    exp:the expression
    langList:where to store the tokens
    len:the allocated length of @list
    Returns:the number of unique strings found, -1 in case of errors and -2 if there is more than @len strings

    Function: xmlExpGetStart

    int	xmlExpGetStart			(xmlExpCtxtPtr ctxt, 
    xmlExpNodePtr exp,
    const xmlChar ** tokList,
    int len)
    +

    Find all the strings that appears at the start of the languages accepted by @exp and store them in @list. E.g. for (a, b) | c it will return the list [a, c]

    +
    ctxt:the expression context
    exp:the expression
    tokList:where to store the tokens
    len:the allocated length of @list
    Returns:the number of unique strings found, -1 in case of errors and -2 if there is more than @len strings

    Function: xmlExpIsNillable

    int	xmlExpIsNillable		(xmlExpNodePtr exp)
    +

    Finds if the expression is nillable, i.e. if it accepts the empty sequqnce

    +
    exp:the expression
    Returns:1 if nillable, 0 if not and -1 in case of error

    Function: xmlExpMaxToken

    int	xmlExpMaxToken			(xmlExpNodePtr expr)
    +

    Indicate the maximum number of input a expression can accept

    +
    expr:a compiled expression
    Returns:the maximum length or -1 in case of error

    Function: xmlExpNewAtom

    xmlExpNodePtr	xmlExpNewAtom		(xmlExpCtxtPtr ctxt, 
    const xmlChar * name,
    int len)
    +

    Get the atom associated to this name from that context

    +
    ctxt:the expression context
    name:the atom name
    len:the atom name length in byte (or -1);
    Returns:the node or NULL in case of error

    Function: xmlExpNewCtxt

    xmlExpCtxtPtr	xmlExpNewCtxt		(int maxNodes, 
    xmlDictPtr dict)
    +

    Creates a new context for manipulating expressions

    +
    maxNodes:the maximum number of nodes
    dict:optional dictionary to use internally
    Returns:the context or NULL in case of error

    Function: xmlExpNewOr

    xmlExpNodePtr	xmlExpNewOr		(xmlExpCtxtPtr ctxt, 
    xmlExpNodePtr left,
    xmlExpNodePtr right)
    +

    Get the atom associated to the choice @left | @right Note that @left and @right are consumed in the operation, to keep an handle on them use xmlExpRef() and use xmlExpFree() to release them, this is true even in case of failure (unless ctxt == NULL).

    +
    ctxt:the expression context
    left:left expression
    right:right expression
    Returns:the node or NULL in case of error

    Function: xmlExpNewRange

    xmlExpNodePtr	xmlExpNewRange		(xmlExpCtxtPtr ctxt, 
    xmlExpNodePtr subset,
    int min,
    int max)
    +

    Get the atom associated to the range (@subset){@min, @max} Note that @subset is consumed in the operation, to keep an handle on it use xmlExpRef() and use xmlExpFree() to release it, this is true even in case of failure (unless ctxt == NULL).

    +
    ctxt:the expression context
    subset:the expression to be repeated
    min:the lower bound for the repetition
    max:the upper bound for the repetition, -1 means infinite
    Returns:the node or NULL in case of error

    Function: xmlExpNewSeq

    xmlExpNodePtr	xmlExpNewSeq		(xmlExpCtxtPtr ctxt, 
    xmlExpNodePtr left,
    xmlExpNodePtr right)
    +

    Get the atom associated to the sequence @left , @right Note that @left and @right are consumed in the operation, to keep an handle on them use xmlExpRef() and use xmlExpFree() to release them, this is true even in case of failure (unless ctxt == NULL).

    +
    ctxt:the expression context
    left:left expression
    right:right expression
    Returns:the node or NULL in case of error

    Function: xmlExpParse

    xmlExpNodePtr	xmlExpParse		(xmlExpCtxtPtr ctxt, 
    const char * expr)
    +

    Minimal parser for regexps, it understand the following constructs - string terminals - choice operator | - sequence operator , - subexpressions (...) - usual cardinality operators + * and ? - finite sequences { min, max } - infinite sequences { min, * } There is minimal checkings made especially no checking on strings values

    +
    ctxt:the expressions context
    expr:the 0 terminated string
    Returns:a new expression or NULL in case of failure

    Function: xmlExpRef

    void	xmlExpRef			(xmlExpNodePtr exp)
    +

    Increase the reference count of the expression

    +
    exp:the expression

    Function: xmlExpStringDerive

    xmlExpNodePtr	xmlExpStringDerive	(xmlExpCtxtPtr ctxt, 
    xmlExpNodePtr exp,
    const xmlChar * str,
    int len)
    +

    Do one step of Brzozowski derivation of the expression @exp with respect to the input string

    +
    ctxt:the expression context
    exp:the expression
    str:the string
    len:the string len in bytes if available
    Returns:the resulting expression or NULL in case of internal error

    Function: xmlExpSubsume

    int	xmlExpSubsume			(xmlExpCtxtPtr ctxt, 
    xmlExpNodePtr exp,
    xmlExpNodePtr sub)
    +

    Check whether @exp accepts all the languages accexpted by @sub the input being a subexpression.

    +
    ctxt:the expressions context
    exp:the englobing expression
    sub:the subexpression
    Returns:1 if true 0 if false and -1 in case of failure.

    Function type: xmlRegExecCallbacks

    Function type: xmlRegExecCallbacks
    +void	xmlRegExecCallbacks		(xmlRegExecCtxtPtr exec, 
    const xmlChar * token,
    void * transdata,
    void * inputdata) +

    Callback function when doing a transition in the automata

    exec:the regular expression context
    token:the current token string
    transdata:transition data
    inputdata:input data

    +

    Function: xmlRegExecErrInfo

    int	xmlRegExecErrInfo		(xmlRegExecCtxtPtr exec, 
    const xmlChar ** string,
    int * nbval,
    int * nbneg,
    xmlChar ** values,
    int * terminal)
    +

    Extract error informations from the regexp execution, the parameter @string will be updated with the value pushed and not accepted, the parameter @values must point to an array of @nbval string pointers on return nbval will contain the number of possible strings in that state and the @values array will be updated with them. The string values

    +
    exec:a regexp execution context generating an error
    string:return value for the error string
    nbval:pointer to the number of accepted values IN/OUT
    nbneg:return number of negative transitions
    values:pointer to the array of acceptable values
    terminal:return value if this was a terminal state
    Returns:will be freed with the @exec context and don't need to be deallocated. Returns: 0 in case of success or -1 in case of error.

    Function: xmlRegExecNextValues

    int	xmlRegExecNextValues		(xmlRegExecCtxtPtr exec, 
    int * nbval,
    int * nbneg,
    xmlChar ** values,
    int * terminal)
    +

    Extract informations from the regexp execution, the parameter @values must point to an array of @nbval string pointers on return nbval will contain the number of possible strings in that state and the @values array will be updated with them. The string values

    +
    exec:a regexp execution context
    nbval:pointer to the number of accepted values IN/OUT
    nbneg:return number of negative transitions
    values:pointer to the array of acceptable values
    terminal:return value if this was a terminal state
    Returns:will be freed with the @exec context and don't need to be deallocated. Returns: 0 in case of success or -1 in case of error.

    Function: xmlRegExecPushString

    int	xmlRegExecPushString		(xmlRegExecCtxtPtr exec, 
    const xmlChar * value,
    void * data)
    +

    Push one input token in the execution context

    +
    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
    Returns:1 if the regexp reached a final state, 0 if non-final, and a negative value in case of error.

    Function: xmlRegExecPushString2

    int	xmlRegExecPushString2		(xmlRegExecCtxtPtr exec, 
    const xmlChar * value,
    const xmlChar * value2,
    void * data)
    +

    Push one input token in the execution context

    +
    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
    Returns:1 if the regexp reached a final state, 0 if non-final, and a negative value in case of error.

    Function: xmlRegFreeExecCtxt

    void	xmlRegFreeExecCtxt		(xmlRegExecCtxtPtr exec)
    +

    Free the structures associated to a regular expression evaulation context.

    +
    exec:a regular expression evaulation context

    Function: xmlRegFreeRegexp

    void	xmlRegFreeRegexp		(xmlRegexpPtr regexp)
    +

    Free a regexp

    +
    regexp:the regexp

    Function: xmlRegNewExecCtxt

    xmlRegExecCtxtPtr	xmlRegNewExecCtxt	(xmlRegexpPtr comp, 
    xmlRegExecCallbacks callback,
    void * data)
    +

    Build a context used for progressive evaluation of a regexp.

    +
    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
    Returns:the new context

    Function: xmlRegexpCompile

    xmlRegexpPtr	xmlRegexpCompile	(const xmlChar * regexp)
    +

    Parses a regular expression conforming to XML Schemas Part 2 Datatype Appendix F and builds an automata suitable for testing strings against that regular expression

    +
    regexp:a regular expression string
    Returns:the compiled expression or NULL in case of error

    Function: xmlRegexpExec

    int	xmlRegexpExec			(xmlRegexpPtr comp, 
    const xmlChar * content)
    +

    Check if the regular expression generates the value

    +
    comp:the compiled regular expression
    content:the value to check against the regular expression
    Returns:1 if it matches, 0 if not and a negative value in case of error

    Function: xmlRegexpIsDeterminist

    int	xmlRegexpIsDeterminist		(xmlRegexpPtr comp)
    +

    Check if the regular expression is determinist

    +
    comp:the compiled regular expression
    Returns:1 if it yes, 0 if not and a negative value in case of error

    Function: xmlRegexpPrint

    void	xmlRegexpPrint			(FILE * output, 
    xmlRegexpPtr regexp)
    +

    Print the content of the compiled regular expression

    +
    output:the file for the output debug
    regexp:the compiled regexp

    Daniel Veillard

    diff --git a/doc/html/libxml-xmlsave.html b/doc/html/libxml-xmlsave.html new file mode 100644 index 0000000..a27e6dc --- /dev/null +++ b/doc/html/libxml-xmlsave.html @@ -0,0 +1,60 @@ + + +Module xmlsave from libxml2
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    Module xmlsave from libxml2

    API Menu
    API Indexes
    Related links

    API to save document or subtree of document

    Table of Contents

    Structure xmlSaveCtxt
    struct _xmlSaveCtxt +The content of this structure is not made public by the API. +
    Typedef xmlSaveCtxt * xmlSaveCtxtPtr
    +
    Enum xmlSaveOption
    +
    int	xmlSaveClose			(xmlSaveCtxtPtr ctxt)
    +
    long	xmlSaveDoc			(xmlSaveCtxtPtr ctxt, 
    xmlDocPtr doc)
    +
    int	xmlSaveFlush			(xmlSaveCtxtPtr ctxt)
    +
    int	xmlSaveSetAttrEscape		(xmlSaveCtxtPtr ctxt, 
    xmlCharEncodingOutputFunc escape)
    +
    int	xmlSaveSetEscape		(xmlSaveCtxtPtr ctxt, 
    xmlCharEncodingOutputFunc escape)
    +
    xmlSaveCtxtPtr	xmlSaveToBuffer		(xmlBufferPtr buffer, 
    const char * encoding,
    int options)
    +
    xmlSaveCtxtPtr	xmlSaveToFd		(int fd, 
    const char * encoding,
    int options)
    +
    xmlSaveCtxtPtr	xmlSaveToFilename	(const char * filename, 
    const char * encoding,
    int options)
    +
    xmlSaveCtxtPtr	xmlSaveToIO		(xmlOutputWriteCallback iowrite, 
    xmlOutputCloseCallback ioclose,
    void * ioctx,
    const char * encoding,
    int options)
    +
    long	xmlSaveTree			(xmlSaveCtxtPtr ctxt, 
    xmlNodePtr node)
    +

    Description

    +

    Structure xmlSaveCtxt

    Structure xmlSaveCtxt
    struct _xmlSaveCtxt { +The content of this structure is not made public by the API. +}

    Enum xmlSaveOption

    Enum xmlSaveOption {
    +    XML_SAVE_FORMAT = 1 : format save output
    +    XML_SAVE_NO_DECL = 2 : drop the xml declaration
    +    XML_SAVE_NO_EMPTY = 4 : no empty tags
    +    XML_SAVE_NO_XHTML = 8 : disable XHTML1 specific rules
    +    XML_SAVE_XHTML = 16 : force XHTML1 specific rules
    +    XML_SAVE_AS_XML = 32 : force XML serialization on HTML doc
    +    XML_SAVE_AS_HTML = 64 : force HTML serialization on XML doc
    +    XML_SAVE_WSNONSIG = 128 : format with non-significant whitespace
    +}
    +

    Function: xmlSaveClose

    int	xmlSaveClose			(xmlSaveCtxtPtr ctxt)
    +

    Close a document saving context, i.e. make sure that all bytes have been output and free the associated data.

    +
    ctxt:a document saving context
    Returns:the number of byte written or -1 in case of error.

    Function: xmlSaveDoc

    long	xmlSaveDoc			(xmlSaveCtxtPtr ctxt, 
    xmlDocPtr doc)
    +

    Save a full document to a saving context TODO: The function is not fully implemented yet as it does not return the byte count but 0 instead

    +
    ctxt:a document saving context
    doc:a document
    Returns:the number of byte written or -1 in case of error

    Function: xmlSaveFlush

    int	xmlSaveFlush			(xmlSaveCtxtPtr ctxt)
    +

    Flush a document saving context, i.e. make sure that all bytes have been output.

    +
    ctxt:a document saving context
    Returns:the number of byte written or -1 in case of error.

    Function: xmlSaveSetAttrEscape

    int	xmlSaveSetAttrEscape		(xmlSaveCtxtPtr ctxt, 
    xmlCharEncodingOutputFunc escape)
    +

    Set a custom escaping function to be used for text in attribute content

    +
    ctxt:a document saving context
    escape:the escaping function
    Returns:0 if successful or -1 in case of error.

    Function: xmlSaveSetEscape

    int	xmlSaveSetEscape		(xmlSaveCtxtPtr ctxt, 
    xmlCharEncodingOutputFunc escape)
    +

    Set a custom escaping function to be used for text in element content

    +
    ctxt:a document saving context
    escape:the escaping function
    Returns:0 if successful or -1 in case of error.

    Function: xmlSaveToBuffer

    xmlSaveCtxtPtr	xmlSaveToBuffer		(xmlBufferPtr buffer, 
    const char * encoding,
    int options)
    +

    Create a document saving context serializing to a buffer with the encoding and the options given

    +
    buffer:a buffer
    encoding:the encoding name to use or NULL
    options:a set of xmlSaveOptions
    Returns:a new serialization context or NULL in case of error.

    Function: xmlSaveToFd

    xmlSaveCtxtPtr	xmlSaveToFd		(int fd, 
    const char * encoding,
    int options)
    +

    Create a document saving context serializing to a file descriptor with the encoding and the options given.

    +
    fd:a file descriptor number
    encoding:the encoding name to use or NULL
    options:a set of xmlSaveOptions
    Returns:a new serialization context or NULL in case of error.

    Function: xmlSaveToFilename

    xmlSaveCtxtPtr	xmlSaveToFilename	(const char * filename, 
    const char * encoding,
    int options)
    +

    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.

    +
    filename:a file name or an URL
    encoding:the encoding name to use or NULL
    options:a set of xmlSaveOptions
    Returns:a new serialization context or NULL in case of error.

    Function: xmlSaveToIO

    xmlSaveCtxtPtr	xmlSaveToIO		(xmlOutputWriteCallback iowrite, 
    xmlOutputCloseCallback ioclose,
    void * ioctx,
    const char * encoding,
    int options)
    +

    Create a document saving context serializing to a file descriptor with the encoding and the options given

    +
    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
    Returns:a new serialization context or NULL in case of error.

    Function: xmlSaveTree

    long	xmlSaveTree			(xmlSaveCtxtPtr ctxt, 
    xmlNodePtr node)
    +

    Save a subtree starting at the node parameter to a saving context TODO: The function is not fully implemented yet as it does not return the byte count but 0 instead

    +
    ctxt:a document saving context
    node:the top node of the subtree to save
    Returns:the number of byte written or -1 in case of error

    Daniel Veillard

    diff --git a/doc/html/libxml-xmlschemas.html b/doc/html/libxml-xmlschemas.html new file mode 100644 index 0000000..8cb42a1 --- /dev/null +++ b/doc/html/libxml-xmlschemas.html @@ -0,0 +1,185 @@ + + +Module xmlschemas from libxml2
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    Module xmlschemas from libxml2

    API Menu
    API Indexes
    Related links

    interface to the XML Schemas handling and schema validity checking, it is incomplete right now.

    Table of Contents

    Structure xmlSchema
    struct _xmlSchema +
    Structure xmlSchemaParserCtxt
    struct _xmlSchemaParserCtxt +The content of this structure is not made public by the API. +
    Typedef xmlSchemaParserCtxt * xmlSchemaParserCtxtPtr
    +
    Typedef xmlSchema * xmlSchemaPtr
    +
    Typedef xmlSchemaSAXPlugStruct * xmlSchemaSAXPlugPtr
    +
    Structure xmlSchemaSAXPlugStruct
    struct _xmlSchemaSAXPlug +The content of this structure is not made public by the API. +
    Structure xmlSchemaValidCtxt
    struct _xmlSchemaValidCtxt +The content of this structure is not made public by the API. +
    Typedef xmlSchemaValidCtxt * xmlSchemaValidCtxtPtr
    +
    Enum xmlSchemaValidError
    +
    Enum xmlSchemaValidOption
    +
    void	xmlSchemaDump			(FILE * output, 
    xmlSchemaPtr schema)
    +
    void	xmlSchemaFree			(xmlSchemaPtr schema)
    +
    void	xmlSchemaFreeParserCtxt		(xmlSchemaParserCtxtPtr ctxt)
    +
    void	xmlSchemaFreeValidCtxt		(xmlSchemaValidCtxtPtr ctxt)
    +
    int	xmlSchemaGetParserErrors	(xmlSchemaParserCtxtPtr ctxt, 
    xmlSchemaValidityErrorFunc * err,
    xmlSchemaValidityWarningFunc * warn,
    void ** ctx)
    +
    int	xmlSchemaGetValidErrors		(xmlSchemaValidCtxtPtr ctxt, 
    xmlSchemaValidityErrorFunc * err,
    xmlSchemaValidityWarningFunc * warn,
    void ** ctx)
    +
    int	xmlSchemaIsValid		(xmlSchemaValidCtxtPtr ctxt)
    +
    xmlSchemaParserCtxtPtr	xmlSchemaNewDocParserCtxt	(xmlDocPtr doc)
    +
    xmlSchemaParserCtxtPtr	xmlSchemaNewMemParserCtxt	(const char * buffer, 
    int size)
    +
    xmlSchemaParserCtxtPtr	xmlSchemaNewParserCtxt	(const char * URL)
    +
    xmlSchemaValidCtxtPtr	xmlSchemaNewValidCtxt	(xmlSchemaPtr schema)
    +
    xmlSchemaPtr	xmlSchemaParse		(xmlSchemaParserCtxtPtr ctxt)
    +
    xmlSchemaSAXPlugPtr	xmlSchemaSAXPlug	(xmlSchemaValidCtxtPtr ctxt, 
    xmlSAXHandlerPtr * sax,
    void ** user_data)
    +
    int	xmlSchemaSAXUnplug		(xmlSchemaSAXPlugPtr plug)
    +
    void	xmlSchemaSetParserErrors	(xmlSchemaParserCtxtPtr ctxt, 
    xmlSchemaValidityErrorFunc err,
    xmlSchemaValidityWarningFunc warn,
    void * ctx)
    +
    void	xmlSchemaSetParserStructuredErrors	(xmlSchemaParserCtxtPtr ctxt, 
    xmlStructuredErrorFunc serror,
    void * ctx)
    +
    void	xmlSchemaSetValidErrors		(xmlSchemaValidCtxtPtr ctxt, 
    xmlSchemaValidityErrorFunc err,
    xmlSchemaValidityWarningFunc warn,
    void * ctx)
    +
    int	xmlSchemaSetValidOptions	(xmlSchemaValidCtxtPtr ctxt, 
    int options)
    +
    void	xmlSchemaSetValidStructuredErrors	(xmlSchemaValidCtxtPtr ctxt, 
    xmlStructuredErrorFunc serror,
    void * ctx)
    +
    int	xmlSchemaValidCtxtGetOptions	(xmlSchemaValidCtxtPtr ctxt)
    +
    xmlParserCtxtPtr	xmlSchemaValidCtxtGetParserCtxt	(xmlSchemaValidCtxtPtr ctxt)
    +
    int	xmlSchemaValidateDoc		(xmlSchemaValidCtxtPtr ctxt, 
    xmlDocPtr doc)
    +
    int	xmlSchemaValidateFile		(xmlSchemaValidCtxtPtr ctxt, 
    const char * filename,
    int options)
    +
    int	xmlSchemaValidateOneElement	(xmlSchemaValidCtxtPtr ctxt, 
    xmlNodePtr elem)
    +
    void	xmlSchemaValidateSetFilename	(xmlSchemaValidCtxtPtr vctxt, 
    const char * filename)
    +
    void	xmlSchemaValidateSetLocator	(xmlSchemaValidCtxtPtr vctxt, 
    xmlSchemaValidityLocatorFunc f,
    void * ctxt)
    +
    int	xmlSchemaValidateStream		(xmlSchemaValidCtxtPtr ctxt, 
    xmlParserInputBufferPtr input,
    xmlCharEncoding enc,
    xmlSAXHandlerPtr sax,
    void * user_data)
    +
    Function type: xmlSchemaValidityErrorFunc
    +void	xmlSchemaValidityErrorFunc	(void * ctx, 
    const char * msg,
    ... ...) +
    +
    Function type: xmlSchemaValidityLocatorFunc
    +int	xmlSchemaValidityLocatorFunc	(void * ctx, 
    const char ** file,
    unsigned long * line) +
    +
    Function type: xmlSchemaValidityWarningFunc
    +void	xmlSchemaValidityWarningFunc	(void * ctx, 
    const char * msg,
    ... ...) +
    +

    Description

    +

    Structure xmlSchema

    Structure xmlSchema
    struct _xmlSchema { + const xmlChar * name : schema name + const xmlChar * targetNamespace : the target namespace + const xmlChar * version + const xmlChar * id : Obsolete + 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 bind + xmlHashTablePtr groupDecl + xmlDictPtr dict + void * includes : the includes, this is opaque for now + int preserve : whether to free the document + int counter : used to give ononymous components uniqu + xmlHashTablePtr idcDef : All identity-constraint defs. + void * volatiles : Obsolete +}

    Structure xmlSchemaParserCtxt

    Structure xmlSchemaParserCtxt
    struct _xmlSchemaParserCtxt { +The content of this structure is not made public by the API. +}

    Structure xmlSchemaSAXPlugStruct

    Structure xmlSchemaSAXPlugStruct
    struct _xmlSchemaSAXPlug { +The content of this structure is not made public by the API. +}

    Structure xmlSchemaValidCtxt

    Structure xmlSchemaValidCtxt
    struct _xmlSchemaValidCtxt { +The content of this structure is not made public by the API. +}

    Enum xmlSchemaValidError

    Enum xmlSchemaValidError {
    +    XML_SCHEMAS_ERR_OK = 0
    +    XML_SCHEMAS_ERR_NOROOT = 1
    +    XML_SCHEMAS_ERR_UNDECLAREDELEM = 2
    +    XML_SCHEMAS_ERR_NOTTOPLEVEL = 3
    +    XML_SCHEMAS_ERR_MISSING = 4
    +    XML_SCHEMAS_ERR_WRONGELEM = 5
    +    XML_SCHEMAS_ERR_NOTYPE = 6
    +    XML_SCHEMAS_ERR_NOROLLBACK = 7
    +    XML_SCHEMAS_ERR_ISABSTRACT = 8
    +    XML_SCHEMAS_ERR_NOTEMPTY = 9
    +    XML_SCHEMAS_ERR_ELEMCONT = 10
    +    XML_SCHEMAS_ERR_HAVEDEFAULT = 11
    +    XML_SCHEMAS_ERR_NOTNILLABLE = 12
    +    XML_SCHEMAS_ERR_EXTRACONTENT = 13
    +    XML_SCHEMAS_ERR_INVALIDATTR = 14
    +    XML_SCHEMAS_ERR_INVALIDELEM = 15
    +    XML_SCHEMAS_ERR_NOTDETERMINIST = 16
    +    XML_SCHEMAS_ERR_CONSTRUCT = 17
    +    XML_SCHEMAS_ERR_INTERNAL = 18
    +    XML_SCHEMAS_ERR_NOTSIMPLE = 19
    +    XML_SCHEMAS_ERR_ATTRUNKNOWN = 20
    +    XML_SCHEMAS_ERR_ATTRINVALID = 21
    +    XML_SCHEMAS_ERR_VALUE = 22
    +    XML_SCHEMAS_ERR_FACET = 23
    +    XML_SCHEMAS_ERR_ = 24
    +    XML_SCHEMAS_ERR_XXX = 25
    +}
    +

    Enum xmlSchemaValidOption

    Enum xmlSchemaValidOption {
    +    XML_SCHEMA_VAL_VC_I_CREATE = 1 : Default/fixed: create an attribute node * or an element's text node on the instance. *
    +}
    +

    Function: xmlSchemaDump

    void	xmlSchemaDump			(FILE * output, 
    xmlSchemaPtr schema)
    +

    Dump a Schema structure.

    +
    output:the file output
    schema:a schema structure

    Function: xmlSchemaFree

    void	xmlSchemaFree			(xmlSchemaPtr schema)
    +

    Deallocate a Schema structure.

    +
    schema:a schema structure

    Function: xmlSchemaFreeParserCtxt

    void	xmlSchemaFreeParserCtxt		(xmlSchemaParserCtxtPtr ctxt)
    +

    Free the resources associated to the schema parser context

    +
    ctxt:the schema parser context

    Function: xmlSchemaFreeValidCtxt

    void	xmlSchemaFreeValidCtxt		(xmlSchemaValidCtxtPtr ctxt)
    +

    Free the resources associated to the schema validation context

    +
    ctxt:the schema validation context

    Function: xmlSchemaGetParserErrors

    int	xmlSchemaGetParserErrors	(xmlSchemaParserCtxtPtr ctxt, 
    xmlSchemaValidityErrorFunc * err,
    xmlSchemaValidityWarningFunc * warn,
    void ** ctx)
    +

    Get the callback information used to handle errors for a parser context

    +
    ctxt:a XMl-Schema parser context
    err:the error callback result
    warn:the warning callback result
    ctx:contextual data for the callbacks result
    Returns:-1 in case of failure, 0 otherwise

    Function: xmlSchemaGetValidErrors

    int	xmlSchemaGetValidErrors		(xmlSchemaValidCtxtPtr ctxt, 
    xmlSchemaValidityErrorFunc * err,
    xmlSchemaValidityWarningFunc * warn,
    void ** ctx)
    +

    Get the error and warning callback informations

    +
    ctxt:a XML-Schema validation context
    err:the error function result
    warn:the warning function result
    ctx:the functions context result
    Returns:-1 in case of error and 0 otherwise

    Function: xmlSchemaIsValid

    int	xmlSchemaIsValid		(xmlSchemaValidCtxtPtr ctxt)
    +

    Check if any error was detected during validation.

    +
    ctxt:the schema validation context
    Returns:1 if valid so far, 0 if errors were detected, and -1 in case of internal error.

    Function: xmlSchemaNewDocParserCtxt

    xmlSchemaParserCtxtPtr	xmlSchemaNewDocParserCtxt	(xmlDocPtr doc)
    +

    Create an XML Schemas parse context for that document. NB. The document may be modified during the parsing process.

    +
    doc:a preparsed document tree
    Returns:the parser context or NULL in case of error

    Function: xmlSchemaNewMemParserCtxt

    xmlSchemaParserCtxtPtr	xmlSchemaNewMemParserCtxt	(const char * buffer, 
    int size)
    +

    Create an XML Schemas parse context for that memory buffer expected to contain an XML Schemas file.

    +
    buffer:a pointer to a char array containing the schemas
    size:the size of the array
    Returns:the parser context or NULL in case of error

    Function: xmlSchemaNewParserCtxt

    xmlSchemaParserCtxtPtr	xmlSchemaNewParserCtxt	(const char * URL)
    +

    Create an XML Schemas parse context for that file/resource expected to contain an XML Schemas file.

    +
    URL:the location of the schema
    Returns:the parser context or NULL in case of error

    Function: xmlSchemaNewValidCtxt

    xmlSchemaValidCtxtPtr	xmlSchemaNewValidCtxt	(xmlSchemaPtr schema)
    +

    Create an XML Schemas validation context based on the given schema.

    +
    schema:a precompiled XML Schemas
    Returns:the validation context or NULL in case of error

    Function: xmlSchemaParse

    xmlSchemaPtr	xmlSchemaParse		(xmlSchemaParserCtxtPtr ctxt)
    +

    parse a schema definition resource and build an internal XML Shema struture which can be used to validate instances.

    +
    ctxt:a schema validation context
    Returns:the internal XML Schema structure built from the resource or NULL in case of error

    Function: xmlSchemaSAXPlug

    xmlSchemaSAXPlugPtr	xmlSchemaSAXPlug	(xmlSchemaValidCtxtPtr ctxt, 
    xmlSAXHandlerPtr * sax,
    void ** user_data)
    +

    Plug a SAX based validation layer in a SAX parsing event flow. The original @saxptr and @dataptr data are replaced by new pointers but the calls to the original will be maintained.

    +
    ctxt:a schema validation context
    sax:a pointer to the original xmlSAXHandlerPtr
    user_data:a pointer to the original SAX user data pointer
    Returns:a pointer to a data structure needed to unplug the validation layer or NULL in case of errors.

    Function: xmlSchemaSAXUnplug

    int	xmlSchemaSAXUnplug		(xmlSchemaSAXPlugPtr plug)
    +

    Unplug a SAX based validation layer in a SAX parsing event flow. The original pointers used in the call are restored.

    +
    plug:a data structure returned by xmlSchemaSAXPlug
    Returns:0 in case of success and -1 in case of failure.

    Function: xmlSchemaSetParserErrors

    void	xmlSchemaSetParserErrors	(xmlSchemaParserCtxtPtr ctxt, 
    xmlSchemaValidityErrorFunc err,
    xmlSchemaValidityWarningFunc warn,
    void * ctx)
    +

    Set the callback functions used to handle errors for a validation context

    +
    ctxt:a schema validation context
    err:the error callback
    warn:the warning callback
    ctx:contextual data for the callbacks

    Function: xmlSchemaSetParserStructuredErrors

    void	xmlSchemaSetParserStructuredErrors	(xmlSchemaParserCtxtPtr ctxt, 
    xmlStructuredErrorFunc serror,
    void * ctx)
    +

    Set the structured error callback

    +
    ctxt:a schema parser context
    serror:the structured error function
    ctx:the functions context

    Function: xmlSchemaSetValidErrors

    void	xmlSchemaSetValidErrors		(xmlSchemaValidCtxtPtr ctxt, 
    xmlSchemaValidityErrorFunc err,
    xmlSchemaValidityWarningFunc warn,
    void * ctx)
    +

    Set the error and warning callback informations

    +
    ctxt:a schema validation context
    err:the error function
    warn:the warning function
    ctx:the functions context

    Function: xmlSchemaSetValidOptions

    int	xmlSchemaSetValidOptions	(xmlSchemaValidCtxtPtr ctxt, 
    int options)
    +

    Sets the options to be used during the validation.

    +
    ctxt:a schema validation context
    options:a combination of xmlSchemaValidOption
    Returns:0 in case of success, -1 in case of an API error.

    Function: xmlSchemaSetValidStructuredErrors

    void	xmlSchemaSetValidStructuredErrors	(xmlSchemaValidCtxtPtr ctxt, 
    xmlStructuredErrorFunc serror,
    void * ctx)
    +

    Set the structured error callback

    +
    ctxt:a schema validation context
    serror:the structured error function
    ctx:the functions context

    Function: xmlSchemaValidCtxtGetOptions

    int	xmlSchemaValidCtxtGetOptions	(xmlSchemaValidCtxtPtr ctxt)
    +

    Get the validation context options.

    +
    ctxt:a schema validation context
    Returns:the option combination or -1 on error.

    Function: xmlSchemaValidCtxtGetParserCtxt

    xmlParserCtxtPtr	xmlSchemaValidCtxtGetParserCtxt	(xmlSchemaValidCtxtPtr ctxt)
    +

    allow access to the parser context of the schema validation context

    +
    ctxt:a schema validation context
    Returns:the parser context of the schema validation context or NULL in case of error.

    Function: xmlSchemaValidateDoc

    int	xmlSchemaValidateDoc		(xmlSchemaValidCtxtPtr ctxt, 
    xmlDocPtr doc)
    +

    Validate a document tree in memory.

    +
    ctxt:a schema validation context
    doc:a parsed document tree
    Returns:0 if the document is schemas valid, a positive error code number otherwise and -1 in case of internal or API error.

    Function: xmlSchemaValidateFile

    int	xmlSchemaValidateFile		(xmlSchemaValidCtxtPtr ctxt, 
    const char * filename,
    int options)
    +

    Do a schemas validation of the given resource, it will use the SAX streamable validation internally.

    +
    ctxt:a schema validation context
    filename:the URI of the instance
    options:a future set of options, currently unused
    Returns:0 if the document is valid, a positive error code number otherwise and -1 in case of an internal or API error.

    Function: xmlSchemaValidateOneElement

    int	xmlSchemaValidateOneElement	(xmlSchemaValidCtxtPtr ctxt, 
    xmlNodePtr elem)
    +

    Validate a branch of a tree, starting with the given @elem.

    +
    ctxt:a schema validation context
    elem:an element node
    Returns:0 if the element and its subtree is valid, a positive error code number otherwise and -1 in case of an internal or API error.

    Function: xmlSchemaValidateSetFilename

    void	xmlSchemaValidateSetFilename	(xmlSchemaValidCtxtPtr vctxt, 
    const char * filename)
    +

    Workaround to provide file error reporting information when this is not provided by current APIs

    +
    vctxt:the schema validation context
    filename:the file name

    Function: xmlSchemaValidateSetLocator

    void	xmlSchemaValidateSetLocator	(xmlSchemaValidCtxtPtr vctxt, 
    xmlSchemaValidityLocatorFunc f,
    void * ctxt)
    +

    Allows to set a locator function to the validation context, which will be used to provide file and line information since those are not provided as part of the SAX validation flow Setting @f to NULL disable the locator.

    +
    vctxt:a schema validation context
    f:the locator function pointer
    ctxt:the locator context

    Function: xmlSchemaValidateStream

    int	xmlSchemaValidateStream		(xmlSchemaValidCtxtPtr ctxt, 
    xmlParserInputBufferPtr input,
    xmlCharEncoding enc,
    xmlSAXHandlerPtr sax,
    void * user_data)
    +

    Validate an input based on a flow of SAX event from the parser and forward the events to the @sax handler with the provided @user_data the user provided @sax handler must be a SAX2 one.

    +
    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.
    Returns:0 if the document is schemas valid, a positive error code number otherwise and -1 in case of internal or API error.

    Function type: xmlSchemaValidityErrorFunc

    Function type: xmlSchemaValidityErrorFunc
    +void	xmlSchemaValidityErrorFunc	(void * ctx, 
    const char * msg,
    ... ...) +

    Signature of an error callback from an XSD validation

    ctx:the validation context
    msg:the message
    ...:extra arguments

    +

    Function type: xmlSchemaValidityLocatorFunc

    Function type: xmlSchemaValidityLocatorFunc
    +int	xmlSchemaValidityLocatorFunc	(void * ctx, 
    const char ** file,
    unsigned long * line) +

    A schemas validation locator, a callback called by the validator. This is used when file or node informations are not available to find out what file and line number are affected

    ctx:user provided context
    file:returned file information
    line:returned line information
    Returns:0 in case of success and -1 in case of error

    +

    Function type: xmlSchemaValidityWarningFunc

    Function type: xmlSchemaValidityWarningFunc
    +void	xmlSchemaValidityWarningFunc	(void * ctx, 
    const char * msg,
    ... ...) +

    Signature of a warning callback from an XSD validation

    ctx:the validation context
    msg:the message
    ...:extra arguments

    +

    Daniel Veillard

    diff --git a/doc/html/libxml-xmlschemastypes.html b/doc/html/libxml-xmlschemastypes.html new file mode 100644 index 0000000..6925cfa --- /dev/null +++ b/doc/html/libxml-xmlschemastypes.html @@ -0,0 +1,123 @@ + + +Module xmlschemastypes from libxml2
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    Module xmlschemastypes from libxml2

    API Menu
    API Indexes
    Related links

    module providing the XML Schema Datatypes implementation both definition and validity checking

    Table of Contents

    Enum xmlSchemaWhitespaceValueType
    +
    int	xmlSchemaCheckFacet		(xmlSchemaFacetPtr facet, 
    xmlSchemaTypePtr typeDecl,
    xmlSchemaParserCtxtPtr pctxt,
    const xmlChar * name)
    +
    void	xmlSchemaCleanupTypes		(void)
    +
    xmlChar *	xmlSchemaCollapseString	(const xmlChar * value)
    +
    int	xmlSchemaCompareValues		(xmlSchemaValPtr x, 
    xmlSchemaValPtr y)
    +
    int	xmlSchemaCompareValuesWhtsp	(xmlSchemaValPtr x, 
    xmlSchemaWhitespaceValueType xws,
    xmlSchemaValPtr y,
    xmlSchemaWhitespaceValueType yws)
    +
    xmlSchemaValPtr	xmlSchemaCopyValue	(xmlSchemaValPtr val)
    +
    void	xmlSchemaFreeFacet		(xmlSchemaFacetPtr facet)
    +
    void	xmlSchemaFreeValue		(xmlSchemaValPtr value)
    +
    xmlSchemaTypePtr	xmlSchemaGetBuiltInListSimpleTypeItemType	(xmlSchemaTypePtr type)
    +
    xmlSchemaTypePtr	xmlSchemaGetBuiltInType	(xmlSchemaValType type)
    +
    int	xmlSchemaGetCanonValue		(xmlSchemaValPtr val, 
    const xmlChar ** retValue)
    +
    int	xmlSchemaGetCanonValueWhtsp	(xmlSchemaValPtr val, 
    const xmlChar ** retValue,
    xmlSchemaWhitespaceValueType ws)
    +
    unsigned long	xmlSchemaGetFacetValueAsULong	(xmlSchemaFacetPtr facet)
    +
    xmlSchemaTypePtr	xmlSchemaGetPredefinedType	(const xmlChar * name, 
    const xmlChar * ns)
    +
    xmlSchemaValType	xmlSchemaGetValType	(xmlSchemaValPtr val)
    +
    void	xmlSchemaInitTypes		(void)
    +
    int	xmlSchemaIsBuiltInTypeFacet	(xmlSchemaTypePtr type, 
    int facetType)
    +
    xmlSchemaFacetPtr	xmlSchemaNewFacet	(void)
    +
    xmlSchemaValPtr	xmlSchemaNewNOTATIONValue	(const xmlChar * name, 
    const xmlChar * ns)
    +
    xmlSchemaValPtr	xmlSchemaNewQNameValue	(const xmlChar * namespaceName, 
    const xmlChar * localName)
    +
    xmlSchemaValPtr	xmlSchemaNewStringValue	(xmlSchemaValType type, 
    const xmlChar * value)
    +
    int	xmlSchemaValPredefTypeNode	(xmlSchemaTypePtr type, 
    const xmlChar * value,
    xmlSchemaValPtr * val,
    xmlNodePtr node)
    +
    int	xmlSchemaValPredefTypeNodeNoNorm	(xmlSchemaTypePtr type, 
    const xmlChar * value,
    xmlSchemaValPtr * val,
    xmlNodePtr node)
    +
    int	xmlSchemaValidateFacet		(xmlSchemaTypePtr base, 
    xmlSchemaFacetPtr facet,
    const xmlChar * value,
    xmlSchemaValPtr val)
    +
    int	xmlSchemaValidateFacetWhtsp	(xmlSchemaFacetPtr facet, 
    xmlSchemaWhitespaceValueType fws,
    xmlSchemaValType valType,
    const xmlChar * value,
    xmlSchemaValPtr val,
    xmlSchemaWhitespaceValueType ws)
    +
    int	xmlSchemaValidateLengthFacet	(xmlSchemaTypePtr type, 
    xmlSchemaFacetPtr facet,
    const xmlChar * value,
    xmlSchemaValPtr val,
    unsigned long * length)
    +
    int	xmlSchemaValidateLengthFacetWhtsp	(xmlSchemaFacetPtr facet, 
    xmlSchemaValType valType,
    const xmlChar * value,
    xmlSchemaValPtr val,
    unsigned long * length,
    xmlSchemaWhitespaceValueType ws)
    +
    int	xmlSchemaValidateListSimpleTypeFacet	(xmlSchemaFacetPtr facet, 
    const xmlChar * value,
    unsigned long actualLen,
    unsigned long * expectedLen)
    +
    int	xmlSchemaValidatePredefinedType	(xmlSchemaTypePtr type, 
    const xmlChar * value,
    xmlSchemaValPtr * val)
    +
    int	xmlSchemaValueAppend		(xmlSchemaValPtr prev, 
    xmlSchemaValPtr cur)
    +
    int	xmlSchemaValueGetAsBoolean	(xmlSchemaValPtr val)
    +
    const xmlChar *	xmlSchemaValueGetAsString	(xmlSchemaValPtr val)
    +
    xmlSchemaValPtr	xmlSchemaValueGetNext	(xmlSchemaValPtr cur)
    +
    xmlChar *	xmlSchemaWhiteSpaceReplace	(const xmlChar * value)
    +

    Description

    +

    Enum xmlSchemaWhitespaceValueType

    Enum xmlSchemaWhitespaceValueType {
    +    XML_SCHEMA_WHITESPACE_UNKNOWN = 0
    +    XML_SCHEMA_WHITESPACE_PRESERVE = 1
    +    XML_SCHEMA_WHITESPACE_REPLACE = 2
    +    XML_SCHEMA_WHITESPACE_COLLAPSE = 3
    +}
    +

    Function: xmlSchemaCheckFacet

    int	xmlSchemaCheckFacet		(xmlSchemaFacetPtr facet, 
    xmlSchemaTypePtr typeDecl,
    xmlSchemaParserCtxtPtr pctxt,
    const xmlChar * name)
    +

    Checks and computes the values of facets.

    +
    facet:the facet
    typeDecl:the schema type definition
    pctxt:the schema parser context or NULL
    name:the optional name of the type
    Returns:0 if valid, a positive error code if not valid and -1 in case of an internal or API error.

    Function: xmlSchemaCleanupTypes

    void	xmlSchemaCleanupTypes		(void)
    +

    Cleanup the default XML Schemas type library

    +

    Function: xmlSchemaCollapseString

    xmlChar *	xmlSchemaCollapseString	(const xmlChar * value)
    +

    Removes and normalize white spaces in the string

    +
    value:a value
    Returns:the new string or NULL if no change was required.

    Function: xmlSchemaCompareValues

    int	xmlSchemaCompareValues		(xmlSchemaValPtr x, 
    xmlSchemaValPtr y)
    +

    Compare 2 values

    +
    x:a first value
    y:a second value
    Returns:-1 if x < y, 0 if x == y, 1 if x > y, 2 if x <> y, and -2 in case of error

    Function: xmlSchemaCompareValuesWhtsp

    int	xmlSchemaCompareValuesWhtsp	(xmlSchemaValPtr x, 
    xmlSchemaWhitespaceValueType xws,
    xmlSchemaValPtr y,
    xmlSchemaWhitespaceValueType yws)
    +

    Compare 2 values

    +
    x:a first value
    xws:the whitespace value of x
    y:a second value
    yws:the whitespace value of y
    Returns:-1 if x < y, 0 if x == y, 1 if x > y, 2 if x <> y, and -2 in case of error

    Function: xmlSchemaCopyValue

    xmlSchemaValPtr	xmlSchemaCopyValue	(xmlSchemaValPtr val)
    +

    Copies the precomputed value. This duplicates any string within.

    +
    val:the precomputed value to be copied
    Returns:the copy or NULL if a copy for a data-type is not implemented.

    Function: xmlSchemaFreeFacet

    void	xmlSchemaFreeFacet		(xmlSchemaFacetPtr facet)
    +

    Deallocate a Schema Facet structure.

    +
    facet:a schema facet structure

    Function: xmlSchemaFreeValue

    void	xmlSchemaFreeValue		(xmlSchemaValPtr value)
    +

    Cleanup the default XML Schemas type library

    +
    value:the value to free

    Function: xmlSchemaGetBuiltInListSimpleTypeItemType

    xmlSchemaTypePtr	xmlSchemaGetBuiltInListSimpleTypeItemType	(xmlSchemaTypePtr type)
    +

    Lookup function

    +
    type:the built-in simple type.
    Returns:the item type of @type as defined by the built-in datatype hierarchy of XML Schema Part 2: Datatypes, or NULL in case of an error.

    Function: xmlSchemaGetBuiltInType

    xmlSchemaTypePtr	xmlSchemaGetBuiltInType	(xmlSchemaValType type)
    +

    Gives you the type struct for a built-in type by its type id.

    +
    type:the type of the built in type
    Returns:the type if found, NULL otherwise.

    Function: xmlSchemaGetCanonValue

    int	xmlSchemaGetCanonValue		(xmlSchemaValPtr val, 
    const xmlChar ** retValue)
    +

    Get the canonical lexical representation of the value. The caller has to FREE the returned retValue. WARNING: Some value types are not supported yet, resulting in a @retValue of "???". TODO: XML Schema 1.0 does not define canonical representations for: duration, gYearMonth, gYear, gMonthDay, gMonth, gDay, anyURI, QName, NOTATION. This will be fixed in XML Schema 1.1.

    +
    val:the precomputed value
    retValue:the returned value
    Returns:0 if the value could be built, 1 if the value type is not supported yet and -1 in case of API errors.

    Function: xmlSchemaGetCanonValueWhtsp

    int	xmlSchemaGetCanonValueWhtsp	(xmlSchemaValPtr val, 
    const xmlChar ** retValue,
    xmlSchemaWhitespaceValueType ws)
    +

    Get the canonical representation of the value. The caller has to free the returned @retValue.

    +
    val:the precomputed value
    retValue:the returned value
    ws:the whitespace type of the value
    Returns:0 if the value could be built, 1 if the value type is not supported yet and -1 in case of API errors.

    Function: xmlSchemaGetFacetValueAsULong

    unsigned long	xmlSchemaGetFacetValueAsULong	(xmlSchemaFacetPtr facet)
    +

    Extract the value of a facet

    +
    facet:an schemas type facet
    Returns:the value as a long

    Function: xmlSchemaGetPredefinedType

    xmlSchemaTypePtr	xmlSchemaGetPredefinedType	(const xmlChar * name, 
    const xmlChar * ns)
    +

    Lookup a type in the default XML Schemas type library

    +
    name:the type name
    ns:the URI of the namespace usually "http://www.w3.org/2001/XMLSchema"
    Returns:the type if found, NULL otherwise

    Function: xmlSchemaGetValType

    xmlSchemaValType	xmlSchemaGetValType	(xmlSchemaValPtr val)
    +

    Accessor for the type of a value

    +
    val:a schemas value
    Returns:the xmlSchemaValType of the value

    Function: xmlSchemaInitTypes

    void	xmlSchemaInitTypes		(void)
    +

    Initialize the default XML Schemas type library

    +

    Function: xmlSchemaIsBuiltInTypeFacet

    int	xmlSchemaIsBuiltInTypeFacet	(xmlSchemaTypePtr type, 
    int facetType)
    +

    Evaluates if a specific facet can be used in conjunction with a type.

    +
    type:the built-in type
    facetType:the facet type
    Returns:1 if the facet can be used with the given built-in type, 0 otherwise and -1 in case the type is not a built-in type.

    Function: xmlSchemaNewFacet

    xmlSchemaFacetPtr	xmlSchemaNewFacet	(void)
    +

    Allocate a new Facet structure.

    +
    Returns:the newly allocated structure or NULL in case or error

    Function: xmlSchemaNewNOTATIONValue

    xmlSchemaValPtr	xmlSchemaNewNOTATIONValue	(const xmlChar * name, 
    const xmlChar * ns)
    +

    Allocate a new NOTATION value. The given values are consumed and freed with the struct.

    +
    name:the notation name
    ns:the notation namespace name or NULL
    Returns:a pointer to the new value or NULL in case of error

    Function: xmlSchemaNewQNameValue

    xmlSchemaValPtr	xmlSchemaNewQNameValue	(const xmlChar * namespaceName, 
    const xmlChar * localName)
    +

    Allocate a new QName value. The given values are consumed and freed with the struct.

    +
    namespaceName:the namespace name
    localName:the local name
    Returns:a pointer to the new value or NULL in case of an error.

    Function: xmlSchemaNewStringValue

    xmlSchemaValPtr	xmlSchemaNewStringValue	(xmlSchemaValType type, 
    const xmlChar * value)
    +

    Allocate a new simple type value. The type can be of XML_SCHEMAS_STRING. WARNING: This one is intended to be expanded for other string based types. We need this for anySimpleType as well. The given value is consumed and freed with the struct.

    +
    type:the value type
    value:the value
    Returns:a pointer to the new value or NULL in case of error

    Function: xmlSchemaValPredefTypeNode

    int	xmlSchemaValPredefTypeNode	(xmlSchemaTypePtr type, 
    const xmlChar * value,
    xmlSchemaValPtr * val,
    xmlNodePtr node)
    +

    Check that a value conforms to the lexical space of the predefined type. if true a value is computed and returned in @val.

    +
    type:the predefined type
    value:the value to check
    val:the return computed value
    node:the node containing the value
    Returns:0 if this validates, a positive error code number otherwise and -1 in case of internal or API error.

    Function: xmlSchemaValPredefTypeNodeNoNorm

    int	xmlSchemaValPredefTypeNodeNoNorm	(xmlSchemaTypePtr type, 
    const xmlChar * value,
    xmlSchemaValPtr * val,
    xmlNodePtr node)
    +

    Check that a value conforms to the lexical space of the predefined type. if true a value is computed and returned in @val. This one does apply any normalization to the value.

    +
    type:the predefined type
    value:the value to check
    val:the return computed value
    node:the node containing the value
    Returns:0 if this validates, a positive error code number otherwise and -1 in case of internal or API error.

    Function: xmlSchemaValidateFacet

    int	xmlSchemaValidateFacet		(xmlSchemaTypePtr base, 
    xmlSchemaFacetPtr facet,
    const xmlChar * value,
    xmlSchemaValPtr val)
    +

    Check a value against a facet condition

    +
    base:the base type
    facet:the facet to check
    value:the lexical repr of the value to validate
    val:the precomputed value
    Returns:0 if the element is schemas valid, a positive error code number otherwise and -1 in case of internal or API error.

    Function: xmlSchemaValidateFacetWhtsp

    int	xmlSchemaValidateFacetWhtsp	(xmlSchemaFacetPtr facet, 
    xmlSchemaWhitespaceValueType fws,
    xmlSchemaValType valType,
    const xmlChar * value,
    xmlSchemaValPtr val,
    xmlSchemaWhitespaceValueType ws)
    +

    Check a value against a facet condition. This takes value normalization according to the specified whitespace types into account. Note that @value needs to be the *normalized* value if the facet is of type "pattern".

    +
    facet:the facet to check
    fws:the whitespace type of the facet's value
    valType:the built-in type of the value
    value:the lexical (or normalized for pattern) repr of the value to validate
    val:the precomputed value
    ws:the whitespace type of the value
    Returns:0 if the element is schemas valid, a positive error code number otherwise and -1 in case of internal or API error.

    Function: xmlSchemaValidateLengthFacet

    int	xmlSchemaValidateLengthFacet	(xmlSchemaTypePtr type, 
    xmlSchemaFacetPtr facet,
    const xmlChar * value,
    xmlSchemaValPtr val,
    unsigned long * length)
    +

    Checka a value against a "length", "minLength" and "maxLength" facet; sets @length to the computed length of @value.

    +
    type:the built-in type
    facet:the facet to check
    value:the lexical repr. of the value to be validated
    val:the precomputed value
    length:the actual length of the value
    Returns:0 if the value is valid, a positive error code otherwise and -1 in case of an internal or API error.

    Function: xmlSchemaValidateLengthFacetWhtsp

    int	xmlSchemaValidateLengthFacetWhtsp	(xmlSchemaFacetPtr facet, 
    xmlSchemaValType valType,
    const xmlChar * value,
    xmlSchemaValPtr val,
    unsigned long * length,
    xmlSchemaWhitespaceValueType ws)
    +

    Checka a value against a "length", "minLength" and "maxLength" facet; sets @length to the computed length of @value.

    +
    facet:the facet to check
    valType:the built-in type
    value:the lexical repr. of the value to be validated
    val:the precomputed value
    length:the actual length of the value
    ws:the whitespace type of the value
    Returns:0 if the value is valid, a positive error code otherwise and -1 in case of an internal or API error.

    Function: xmlSchemaValidateListSimpleTypeFacet

    int	xmlSchemaValidateListSimpleTypeFacet	(xmlSchemaFacetPtr facet, 
    const xmlChar * value,
    unsigned long actualLen,
    unsigned long * expectedLen)
    +

    Checks the value of a list simple type against a facet.

    +
    facet:the facet to check
    value:the lexical repr of the value to validate
    actualLen:the number of list items
    expectedLen:the resulting expected number of list items
    Returns:0 if the value is valid, a positive error code number otherwise and -1 in case of an internal error.

    Function: xmlSchemaValidatePredefinedType

    int	xmlSchemaValidatePredefinedType	(xmlSchemaTypePtr type, 
    const xmlChar * value,
    xmlSchemaValPtr * val)
    +

    Check that a value conforms to the lexical space of the predefined type. if true a value is computed and returned in @val.

    +
    type:the predefined type
    value:the value to check
    val:the return computed value
    Returns:0 if this validates, a positive error code number otherwise and -1 in case of internal or API error.

    Function: xmlSchemaValueAppend

    int	xmlSchemaValueAppend		(xmlSchemaValPtr prev, 
    xmlSchemaValPtr cur)
    +

    Appends a next sibling to a list of computed values.

    +
    prev:the value
    cur:the value to be appended
    Returns:0 if succeeded and -1 on API errors.

    Function: xmlSchemaValueGetAsBoolean

    int	xmlSchemaValueGetAsBoolean	(xmlSchemaValPtr val)
    +

    Accessor for the boolean value of a computed value.

    +
    val:the value
    Returns:1 if true and 0 if false, or in case of an error. Hmm.

    Function: xmlSchemaValueGetAsString

    const xmlChar *	xmlSchemaValueGetAsString	(xmlSchemaValPtr val)
    +

    Accessor for the string value of a computed value.

    +
    val:the value
    Returns:the string value or NULL if there was none, or on API errors.

    Function: xmlSchemaValueGetNext

    xmlSchemaValPtr	xmlSchemaValueGetNext	(xmlSchemaValPtr cur)
    +

    Accessor for the next sibling of a list of computed values.

    +
    cur:the value
    Returns:the next value or NULL if there was none, or on API errors.

    Function: xmlSchemaWhiteSpaceReplace

    xmlChar *	xmlSchemaWhiteSpaceReplace	(const xmlChar * value)
    +

    Replaces 0xd, 0x9 and 0xa with a space.

    +
    value:a value
    Returns:the new string or NULL if no change was required.

    Daniel Veillard

    diff --git a/doc/html/libxml-xmlstring.html b/doc/html/libxml-xmlstring.html new file mode 100644 index 0000000..89e9809 --- /dev/null +++ b/doc/html/libxml-xmlstring.html @@ -0,0 +1,108 @@ + + +Module xmlstring from libxml2
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    Module xmlstring from libxml2

    API Menu
    API Indexes
    Related links

    type and interfaces needed for the internal string handling of the library, especially UTF8 processing.

    Table of Contents

    #define BAD_CAST
    Typedef unsigned char xmlChar
    +
    xmlChar *	xmlCharStrdup		(const char * cur)
    +
    xmlChar *	xmlCharStrndup		(const char * cur, 
    int len)
    +
    int	xmlCheckUTF8			(const unsigned char * utf)
    +
    int	xmlGetUTF8Char			(const unsigned char * utf, 
    int * len)
    +
    int	xmlStrEqual			(const xmlChar * str1, 
    const xmlChar * str2)
    +
    int	xmlStrPrintf			(xmlChar * buf, 
    int len,
    const char * msg,
    ... ...)
    +
    int	xmlStrQEqual			(const xmlChar * pref, 
    const xmlChar * name,
    const xmlChar * str)
    +
    int	xmlStrVPrintf			(xmlChar * buf, 
    int len,
    const char * msg,
    va_list ap)
    +
    int	xmlStrcasecmp			(const xmlChar * str1, 
    const xmlChar * str2)
    +
    const xmlChar *	xmlStrcasestr		(const xmlChar * str, 
    const xmlChar * val)
    +
    xmlChar *	xmlStrcat		(xmlChar * cur, 
    const xmlChar * add)
    +
    const xmlChar *	xmlStrchr		(const xmlChar * str, 
    xmlChar val)
    +
    int	xmlStrcmp			(const xmlChar * str1, 
    const xmlChar * str2)
    +
    xmlChar *	xmlStrdup		(const xmlChar * cur)
    +
    int	xmlStrlen			(const xmlChar * str)
    +
    int	xmlStrncasecmp			(const xmlChar * str1, 
    const xmlChar * str2,
    int len)
    +
    xmlChar *	xmlStrncat		(xmlChar * cur, 
    const xmlChar * add,
    int len)
    +
    xmlChar *	xmlStrncatNew		(const xmlChar * str1, 
    const xmlChar * str2,
    int len)
    +
    int	xmlStrncmp			(const xmlChar * str1, 
    const xmlChar * str2,
    int len)
    +
    xmlChar *	xmlStrndup		(const xmlChar * cur, 
    int len)
    +
    const xmlChar *	xmlStrstr		(const xmlChar * str, 
    const xmlChar * val)
    +
    xmlChar *	xmlStrsub		(const xmlChar * str, 
    int start,
    int len)
    +
    int	xmlUTF8Charcmp			(const xmlChar * utf1, 
    const xmlChar * utf2)
    +
    int	xmlUTF8Size			(const xmlChar * utf)
    +
    int	xmlUTF8Strlen			(const xmlChar * utf)
    +
    int	xmlUTF8Strloc			(const xmlChar * utf, 
    const xmlChar * utfchar)
    +
    xmlChar *	xmlUTF8Strndup		(const xmlChar * utf, 
    int len)
    +
    const xmlChar *	xmlUTF8Strpos		(const xmlChar * utf, 
    int pos)
    +
    int	xmlUTF8Strsize			(const xmlChar * utf, 
    int len)
    +
    xmlChar *	xmlUTF8Strsub		(const xmlChar * utf, 
    int start,
    int len)
    +

    Description

    +

    Macro: BAD_CAST

    #define BAD_CAST

    Macro to cast a string to an xmlChar * when one know its safe.

    + + 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). +

    Function: xmlCharStrdup

    xmlChar *	xmlCharStrdup		(const char * cur)
    +

    a strdup for char's to xmlChar's

    +
    cur:the input char *
    Returns:a new xmlChar * or NULL

    Function: xmlCharStrndup

    xmlChar *	xmlCharStrndup		(const char * cur, 
    int len)
    +

    a strndup for char's to xmlChar's

    +
    cur:the input char *
    len:the len of @cur
    Returns:a new xmlChar * or NULL

    Function: xmlCheckUTF8

    int	xmlCheckUTF8			(const unsigned char * utf)
    +

    Checks @utf for being valid UTF-8. @utf is assumed to be null-terminated. This function is not super-strict, as it will allow longer UTF-8 sequences than necessary. Note that Java is capable of producing these sequences if provoked. Also note, this routine checks for the 4-byte maximum size, but does not check for 0x10ffff maximum value.

    +
    utf:Pointer to putative UTF-8 encoded string.
    Returns:value: true if @utf is valid.

    Function: xmlGetUTF8Char

    int	xmlGetUTF8Char			(const unsigned char * utf, 
    int * len)
    +

    Read the first UTF8 character from @utf

    +
    utf:a sequence of UTF-8 encoded bytes
    len:a pointer to the minimum number of bytes present in the sequence. This is used to assure the next character is completely contained within the sequence.
    Returns:the char value or -1 in case of error, and sets *len to the actual number of bytes consumed (0 in case of error)

    Function: xmlStrEqual

    int	xmlStrEqual			(const xmlChar * str1, 
    const xmlChar * str2)
    +

    Check if both strings are equal of have same content. Should be a bit more readable and faster than xmlStrcmp()

    +
    str1:the first xmlChar *
    str2:the second xmlChar *
    Returns:1 if they are equal, 0 if they are different

    Function: xmlStrPrintf

    int	xmlStrPrintf			(xmlChar * buf, 
    int len,
    const char * msg,
    ... ...)
    +

    Formats @msg and places result into @buf.

    +
    buf:the result buffer.
    len:the result buffer length.
    msg:the message with printf formatting.
    ...:extra parameters for the message.
    Returns:the number of characters written to @buf or -1 if an error occurs.

    Function: xmlStrQEqual

    int	xmlStrQEqual			(const xmlChar * pref, 
    const xmlChar * name,
    const xmlChar * str)
    +

    Check if a QName is Equal to a given string

    +
    pref:the prefix of the QName
    name:the localname of the QName
    str:the second xmlChar *
    Returns:1 if they are equal, 0 if they are different

    Function: xmlStrVPrintf

    int	xmlStrVPrintf			(xmlChar * buf, 
    int len,
    const char * msg,
    va_list ap)
    +

    Formats @msg and places result into @buf.

    +
    buf:the result buffer.
    len:the result buffer length.
    msg:the message with printf formatting.
    ap:extra parameters for the message.
    Returns:the number of characters written to @buf or -1 if an error occurs.

    Function: xmlStrcasecmp

    int	xmlStrcasecmp			(const xmlChar * str1, 
    const xmlChar * str2)
    +

    a strcasecmp for xmlChar's

    +
    str1:the first xmlChar *
    str2:the second xmlChar *
    Returns:the integer result of the comparison

    Function: xmlStrcasestr

    const xmlChar *	xmlStrcasestr		(const xmlChar * str, 
    const xmlChar * val)
    +

    a case-ignoring strstr for xmlChar's

    +
    str:the xmlChar * array (haystack)
    val:the xmlChar to search (needle)
    Returns:the xmlChar * for the first occurrence or NULL.

    Function: xmlStrcat

    xmlChar *	xmlStrcat		(xmlChar * cur, 
    const xmlChar * add)
    +

    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'.

    +
    cur:the original xmlChar * array
    add:the xmlChar * array added
    Returns:a new xmlChar * containing the concatenated string.

    Function: xmlStrchr

    const xmlChar *	xmlStrchr		(const xmlChar * str, 
    xmlChar val)
    +

    a strchr for xmlChar's

    +
    str:the xmlChar * array
    val:the xmlChar to search
    Returns:the xmlChar * for the first occurrence or NULL.

    Function: xmlStrcmp

    int	xmlStrcmp			(const xmlChar * str1, 
    const xmlChar * str2)
    +

    a strcmp for xmlChar's

    +
    str1:the first xmlChar *
    str2:the second xmlChar *
    Returns:the integer result of the comparison

    Function: xmlStrdup

    xmlChar *	xmlStrdup		(const xmlChar * cur)
    +

    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'.

    +
    cur:the input xmlChar *
    Returns:a new xmlChar * or NULL

    Function: xmlStrlen

    int	xmlStrlen			(const xmlChar * str)
    +

    length of a xmlChar's string

    +
    str:the xmlChar * array
    Returns:the number of xmlChar contained in the ARRAY.

    Function: xmlStrncasecmp

    int	xmlStrncasecmp			(const xmlChar * str1, 
    const xmlChar * str2,
    int len)
    +

    a strncasecmp for xmlChar's

    +
    str1:the first xmlChar *
    str2:the second xmlChar *
    len:the max comparison length
    Returns:the integer result of the comparison

    Function: xmlStrncat

    xmlChar *	xmlStrncat		(xmlChar * cur, 
    const xmlChar * add,
    int len)
    +

    a strncat for array of xmlChar's, it will extend @cur with the len first bytes of @add. Note that if @len < 0 then this is an API error and NULL will be returned.

    +
    cur:the original xmlChar * array
    add:the xmlChar * array added
    len:the length of @add
    Returns:a new xmlChar *, the original @cur is reallocated if needed and should not be freed

    Function: xmlStrncatNew

    xmlChar *	xmlStrncatNew		(const xmlChar * str1, 
    const xmlChar * str2,
    int len)
    +

    same as xmlStrncat, but creates a new string. The original two strings are not freed. If @len is < 0 then the length will be calculated automatically.

    +
    str1:first xmlChar string
    str2:second xmlChar string
    len:the len of @str2 or < 0
    Returns:a new xmlChar * or NULL

    Function: xmlStrncmp

    int	xmlStrncmp			(const xmlChar * str1, 
    const xmlChar * str2,
    int len)
    +

    a strncmp for xmlChar's

    +
    str1:the first xmlChar *
    str2:the second xmlChar *
    len:the max comparison length
    Returns:the integer result of the comparison

    Function: xmlStrndup

    xmlChar *	xmlStrndup		(const xmlChar * cur, 
    int len)
    +

    a strndup for array of xmlChar's

    +
    cur:the input xmlChar *
    len:the len of @cur
    Returns:a new xmlChar * or NULL

    Function: xmlStrstr

    const xmlChar *	xmlStrstr		(const xmlChar * str, 
    const xmlChar * val)
    +

    a strstr for xmlChar's

    +
    str:the xmlChar * array (haystack)
    val:the xmlChar to search (needle)
    Returns:the xmlChar * for the first occurrence or NULL.

    Function: xmlStrsub

    xmlChar *	xmlStrsub		(const xmlChar * str, 
    int start,
    int len)
    +

    Extract a substring of a given string

    +
    str:the xmlChar * array (haystack)
    start:the index of the first char (zero based)
    len:the length of the substring
    Returns:the xmlChar * for the first occurrence or NULL.

    Function: xmlUTF8Charcmp

    int	xmlUTF8Charcmp			(const xmlChar * utf1, 
    const xmlChar * utf2)
    +

    compares the two UCS4 values

    +
    utf1:pointer to first UTF8 char
    utf2:pointer to second UTF8 char
    Returns:result of the compare as with xmlStrncmp

    Function: xmlUTF8Size

    int	xmlUTF8Size			(const xmlChar * utf)
    +

    calculates the internal size of a UTF8 character

    +
    utf:pointer to the UTF8 character
    Returns:the numbers of bytes in the character, -1 on format error

    Function: xmlUTF8Strlen

    int	xmlUTF8Strlen			(const xmlChar * utf)
    +

    compute the length of an UTF8 string, it doesn't do a full UTF8 checking of the content of the string.

    +
    utf:a sequence of UTF-8 encoded bytes
    Returns:the number of characters in the string or -1 in case of error

    Function: xmlUTF8Strloc

    int	xmlUTF8Strloc			(const xmlChar * utf, 
    const xmlChar * utfchar)
    +

    a function to provide the relative location of a UTF8 char

    +
    utf:the input UTF8 *
    utfchar:the UTF8 character to be found
    Returns:the relative character position of the desired char or -1 if not found

    Function: xmlUTF8Strndup

    xmlChar *	xmlUTF8Strndup		(const xmlChar * utf, 
    int len)
    +

    a strndup for array of UTF8's

    +
    utf:the input UTF8 *
    len:the len of @utf (in chars)
    Returns:a new UTF8 * or NULL

    Function: xmlUTF8Strpos

    const xmlChar *	xmlUTF8Strpos		(const xmlChar * utf, 
    int pos)
    +

    a function to provide the equivalent of fetching a character from a string array

    +
    utf:the input UTF8 *
    pos:the position of the desired UTF8 char (in chars)
    Returns:a pointer to the UTF8 character or NULL

    Function: xmlUTF8Strsize

    int	xmlUTF8Strsize			(const xmlChar * utf, 
    int len)
    +

    storage size of an UTF8 string the behaviour is not garanteed if the input string is not UTF-8

    +
    utf:a sequence of UTF-8 encoded bytes
    len:the number of characters in the array
    Returns:the storage size of the first 'len' characters of ARRAY

    Function: xmlUTF8Strsub

    xmlChar *	xmlUTF8Strsub		(const xmlChar * utf, 
    int start,
    int len)
    +

    Create a substring from a given UTF-8 string Note: positions are given in units of UTF-8 chars

    +
    utf:a sequence of UTF-8 encoded bytes
    start:relative pos of first char
    len:total number to copy
    Returns:a pointer to a newly created string or NULL if any problem

    Daniel Veillard

    diff --git a/doc/html/libxml-xmlunicode.html b/doc/html/libxml-xmlunicode.html new file mode 100644 index 0000000..87094ee --- /dev/null +++ b/doc/html/libxml-xmlunicode.html @@ -0,0 +1,512 @@ + + +Module xmlunicode from libxml2
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    Module xmlunicode from libxml2

    API Menu
    API Indexes
    Related links

    API for the Unicode character APIs This file is automatically generated from the UCS description files of the Unicode Character Database

    Table of Contents

    int	xmlUCSIsAegeanNumbers		(int code)
    +
    int	xmlUCSIsAlphabeticPresentationForms	(int code)
    +
    int	xmlUCSIsArabic			(int code)
    +
    int	xmlUCSIsArabicPresentationFormsA	(int code)
    +
    int	xmlUCSIsArabicPresentationFormsB	(int code)
    +
    int	xmlUCSIsArmenian		(int code)
    +
    int	xmlUCSIsArrows			(int code)
    +
    int	xmlUCSIsBasicLatin		(int code)
    +
    int	xmlUCSIsBengali			(int code)
    +
    int	xmlUCSIsBlock			(int code, 
    const char * block)
    +
    int	xmlUCSIsBlockElements		(int code)
    +
    int	xmlUCSIsBopomofo		(int code)
    +
    int	xmlUCSIsBopomofoExtended	(int code)
    +
    int	xmlUCSIsBoxDrawing		(int code)
    +
    int	xmlUCSIsBraillePatterns		(int code)
    +
    int	xmlUCSIsBuhid			(int code)
    +
    int	xmlUCSIsByzantineMusicalSymbols	(int code)
    +
    int	xmlUCSIsCJKCompatibility	(int code)
    +
    int	xmlUCSIsCJKCompatibilityForms	(int code)
    +
    int	xmlUCSIsCJKCompatibilityIdeographs	(int code)
    +
    int	xmlUCSIsCJKCompatibilityIdeographsSupplement	(int code)
    +
    int	xmlUCSIsCJKRadicalsSupplement	(int code)
    +
    int	xmlUCSIsCJKSymbolsandPunctuation	(int code)
    +
    int	xmlUCSIsCJKUnifiedIdeographs	(int code)
    +
    int	xmlUCSIsCJKUnifiedIdeographsExtensionA	(int code)
    +
    int	xmlUCSIsCJKUnifiedIdeographsExtensionB	(int code)
    +
    int	xmlUCSIsCat			(int code, 
    const char * cat)
    +
    int	xmlUCSIsCatC			(int code)
    +
    int	xmlUCSIsCatCc			(int code)
    +
    int	xmlUCSIsCatCf			(int code)
    +
    int	xmlUCSIsCatCo			(int code)
    +
    int	xmlUCSIsCatCs			(int code)
    +
    int	xmlUCSIsCatL			(int code)
    +
    int	xmlUCSIsCatLl			(int code)
    +
    int	xmlUCSIsCatLm			(int code)
    +
    int	xmlUCSIsCatLo			(int code)
    +
    int	xmlUCSIsCatLt			(int code)
    +
    int	xmlUCSIsCatLu			(int code)
    +
    int	xmlUCSIsCatM			(int code)
    +
    int	xmlUCSIsCatMc			(int code)
    +
    int	xmlUCSIsCatMe			(int code)
    +
    int	xmlUCSIsCatMn			(int code)
    +
    int	xmlUCSIsCatN			(int code)
    +
    int	xmlUCSIsCatNd			(int code)
    +
    int	xmlUCSIsCatNl			(int code)
    +
    int	xmlUCSIsCatNo			(int code)
    +
    int	xmlUCSIsCatP			(int code)
    +
    int	xmlUCSIsCatPc			(int code)
    +
    int	xmlUCSIsCatPd			(int code)
    +
    int	xmlUCSIsCatPe			(int code)
    +
    int	xmlUCSIsCatPf			(int code)
    +
    int	xmlUCSIsCatPi			(int code)
    +
    int	xmlUCSIsCatPo			(int code)
    +
    int	xmlUCSIsCatPs			(int code)
    +
    int	xmlUCSIsCatS			(int code)
    +
    int	xmlUCSIsCatSc			(int code)
    +
    int	xmlUCSIsCatSk			(int code)
    +
    int	xmlUCSIsCatSm			(int code)
    +
    int	xmlUCSIsCatSo			(int code)
    +
    int	xmlUCSIsCatZ			(int code)
    +
    int	xmlUCSIsCatZl			(int code)
    +
    int	xmlUCSIsCatZp			(int code)
    +
    int	xmlUCSIsCatZs			(int code)
    +
    int	xmlUCSIsCherokee		(int code)
    +
    int	xmlUCSIsCombiningDiacriticalMarks	(int code)
    +
    int	xmlUCSIsCombiningDiacriticalMarksforSymbols	(int code)
    +
    int	xmlUCSIsCombiningHalfMarks	(int code)
    +
    int	xmlUCSIsCombiningMarksforSymbols	(int code)
    +
    int	xmlUCSIsControlPictures		(int code)
    +
    int	xmlUCSIsCurrencySymbols		(int code)
    +
    int	xmlUCSIsCypriotSyllabary	(int code)
    +
    int	xmlUCSIsCyrillic		(int code)
    +
    int	xmlUCSIsCyrillicSupplement	(int code)
    +
    int	xmlUCSIsDeseret			(int code)
    +
    int	xmlUCSIsDevanagari		(int code)
    +
    int	xmlUCSIsDingbats		(int code)
    +
    int	xmlUCSIsEnclosedAlphanumerics	(int code)
    +
    int	xmlUCSIsEnclosedCJKLettersandMonths	(int code)
    +
    int	xmlUCSIsEthiopic		(int code)
    +
    int	xmlUCSIsGeneralPunctuation	(int code)
    +
    int	xmlUCSIsGeometricShapes		(int code)
    +
    int	xmlUCSIsGeorgian		(int code)
    +
    int	xmlUCSIsGothic			(int code)
    +
    int	xmlUCSIsGreek			(int code)
    +
    int	xmlUCSIsGreekExtended		(int code)
    +
    int	xmlUCSIsGreekandCoptic		(int code)
    +
    int	xmlUCSIsGujarati		(int code)
    +
    int	xmlUCSIsGurmukhi		(int code)
    +
    int	xmlUCSIsHalfwidthandFullwidthForms	(int code)
    +
    int	xmlUCSIsHangulCompatibilityJamo	(int code)
    +
    int	xmlUCSIsHangulJamo		(int code)
    +
    int	xmlUCSIsHangulSyllables		(int code)
    +
    int	xmlUCSIsHanunoo			(int code)
    +
    int	xmlUCSIsHebrew			(int code)
    +
    int	xmlUCSIsHighPrivateUseSurrogates	(int code)
    +
    int	xmlUCSIsHighSurrogates		(int code)
    +
    int	xmlUCSIsHiragana		(int code)
    +
    int	xmlUCSIsIPAExtensions		(int code)
    +
    int	xmlUCSIsIdeographicDescriptionCharacters	(int code)
    +
    int	xmlUCSIsKanbun			(int code)
    +
    int	xmlUCSIsKangxiRadicals		(int code)
    +
    int	xmlUCSIsKannada			(int code)
    +
    int	xmlUCSIsKatakana		(int code)
    +
    int	xmlUCSIsKatakanaPhoneticExtensions	(int code)
    +
    int	xmlUCSIsKhmer			(int code)
    +
    int	xmlUCSIsKhmerSymbols		(int code)
    +
    int	xmlUCSIsLao			(int code)
    +
    int	xmlUCSIsLatin1Supplement	(int code)
    +
    int	xmlUCSIsLatinExtendedA		(int code)
    +
    int	xmlUCSIsLatinExtendedAdditional	(int code)
    +
    int	xmlUCSIsLatinExtendedB		(int code)
    +
    int	xmlUCSIsLetterlikeSymbols	(int code)
    +
    int	xmlUCSIsLimbu			(int code)
    +
    int	xmlUCSIsLinearBIdeograms	(int code)
    +
    int	xmlUCSIsLinearBSyllabary	(int code)
    +
    int	xmlUCSIsLowSurrogates		(int code)
    +
    int	xmlUCSIsMalayalam		(int code)
    +
    int	xmlUCSIsMathematicalAlphanumericSymbols	(int code)
    +
    int	xmlUCSIsMathematicalOperators	(int code)
    +
    int	xmlUCSIsMiscellaneousMathematicalSymbolsA	(int code)
    +
    int	xmlUCSIsMiscellaneousMathematicalSymbolsB	(int code)
    +
    int	xmlUCSIsMiscellaneousSymbols	(int code)
    +
    int	xmlUCSIsMiscellaneousSymbolsandArrows	(int code)
    +
    int	xmlUCSIsMiscellaneousTechnical	(int code)
    +
    int	xmlUCSIsMongolian		(int code)
    +
    int	xmlUCSIsMusicalSymbols		(int code)
    +
    int	xmlUCSIsMyanmar			(int code)
    +
    int	xmlUCSIsNumberForms		(int code)
    +
    int	xmlUCSIsOgham			(int code)
    +
    int	xmlUCSIsOldItalic		(int code)
    +
    int	xmlUCSIsOpticalCharacterRecognition	(int code)
    +
    int	xmlUCSIsOriya			(int code)
    +
    int	xmlUCSIsOsmanya			(int code)
    +
    int	xmlUCSIsPhoneticExtensions	(int code)
    +
    int	xmlUCSIsPrivateUse		(int code)
    +
    int	xmlUCSIsPrivateUseArea		(int code)
    +
    int	xmlUCSIsRunic			(int code)
    +
    int	xmlUCSIsShavian			(int code)
    +
    int	xmlUCSIsSinhala			(int code)
    +
    int	xmlUCSIsSmallFormVariants	(int code)
    +
    int	xmlUCSIsSpacingModifierLetters	(int code)
    +
    int	xmlUCSIsSpecials		(int code)
    +
    int	xmlUCSIsSuperscriptsandSubscripts	(int code)
    +
    int	xmlUCSIsSupplementalArrowsA	(int code)
    +
    int	xmlUCSIsSupplementalArrowsB	(int code)
    +
    int	xmlUCSIsSupplementalMathematicalOperators	(int code)
    +
    int	xmlUCSIsSupplementaryPrivateUseAreaA	(int code)
    +
    int	xmlUCSIsSupplementaryPrivateUseAreaB	(int code)
    +
    int	xmlUCSIsSyriac			(int code)
    +
    int	xmlUCSIsTagalog			(int code)
    +
    int	xmlUCSIsTagbanwa		(int code)
    +
    int	xmlUCSIsTags			(int code)
    +
    int	xmlUCSIsTaiLe			(int code)
    +
    int	xmlUCSIsTaiXuanJingSymbols	(int code)
    +
    int	xmlUCSIsTamil			(int code)
    +
    int	xmlUCSIsTelugu			(int code)
    +
    int	xmlUCSIsThaana			(int code)
    +
    int	xmlUCSIsThai			(int code)
    +
    int	xmlUCSIsTibetan			(int code)
    +
    int	xmlUCSIsUgaritic		(int code)
    +
    int	xmlUCSIsUnifiedCanadianAboriginalSyllabics	(int code)
    +
    int	xmlUCSIsVariationSelectors	(int code)
    +
    int	xmlUCSIsVariationSelectorsSupplement	(int code)
    +
    int	xmlUCSIsYiRadicals		(int code)
    +
    int	xmlUCSIsYiSyllables		(int code)
    +
    int	xmlUCSIsYijingHexagramSymbols	(int code)
    +

    Description

    +

    Function: xmlUCSIsAegeanNumbers

    int	xmlUCSIsAegeanNumbers		(int code)
    +

    Check whether the character is part of AegeanNumbers UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsAlphabeticPresentationForms

    int	xmlUCSIsAlphabeticPresentationForms	(int code)
    +

    Check whether the character is part of AlphabeticPresentationForms UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsArabic

    int	xmlUCSIsArabic			(int code)
    +

    Check whether the character is part of Arabic UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsArabicPresentationFormsA

    int	xmlUCSIsArabicPresentationFormsA	(int code)
    +

    Check whether the character is part of ArabicPresentationForms-A UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsArabicPresentationFormsB

    int	xmlUCSIsArabicPresentationFormsB	(int code)
    +

    Check whether the character is part of ArabicPresentationForms-B UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsArmenian

    int	xmlUCSIsArmenian		(int code)
    +

    Check whether the character is part of Armenian UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsArrows

    int	xmlUCSIsArrows			(int code)
    +

    Check whether the character is part of Arrows UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsBasicLatin

    int	xmlUCSIsBasicLatin		(int code)
    +

    Check whether the character is part of BasicLatin UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsBengali

    int	xmlUCSIsBengali			(int code)
    +

    Check whether the character is part of Bengali UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsBlock

    int	xmlUCSIsBlock			(int code, 
    const char * block)
    +

    Check whether the character is part of the UCS Block

    +
    code:UCS code point
    block:UCS block name
    Returns:1 if true, 0 if false and -1 on unknown block

    Function: xmlUCSIsBlockElements

    int	xmlUCSIsBlockElements		(int code)
    +

    Check whether the character is part of BlockElements UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsBopomofo

    int	xmlUCSIsBopomofo		(int code)
    +

    Check whether the character is part of Bopomofo UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsBopomofoExtended

    int	xmlUCSIsBopomofoExtended	(int code)
    +

    Check whether the character is part of BopomofoExtended UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsBoxDrawing

    int	xmlUCSIsBoxDrawing		(int code)
    +

    Check whether the character is part of BoxDrawing UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsBraillePatterns

    int	xmlUCSIsBraillePatterns		(int code)
    +

    Check whether the character is part of BraillePatterns UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsBuhid

    int	xmlUCSIsBuhid			(int code)
    +

    Check whether the character is part of Buhid UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsByzantineMusicalSymbols

    int	xmlUCSIsByzantineMusicalSymbols	(int code)
    +

    Check whether the character is part of ByzantineMusicalSymbols UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsCJKCompatibility

    int	xmlUCSIsCJKCompatibility	(int code)
    +

    Check whether the character is part of CJKCompatibility UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsCJKCompatibilityForms

    int	xmlUCSIsCJKCompatibilityForms	(int code)
    +

    Check whether the character is part of CJKCompatibilityForms UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsCJKCompatibilityIdeographs

    int	xmlUCSIsCJKCompatibilityIdeographs	(int code)
    +

    Check whether the character is part of CJKCompatibilityIdeographs UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsCJKCompatibilityIdeographsSupplement

    int	xmlUCSIsCJKCompatibilityIdeographsSupplement	(int code)
    +

    Check whether the character is part of CJKCompatibilityIdeographsSupplement UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsCJKRadicalsSupplement

    int	xmlUCSIsCJKRadicalsSupplement	(int code)
    +

    Check whether the character is part of CJKRadicalsSupplement UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsCJKSymbolsandPunctuation

    int	xmlUCSIsCJKSymbolsandPunctuation	(int code)
    +

    Check whether the character is part of CJKSymbolsandPunctuation UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsCJKUnifiedIdeographs

    int	xmlUCSIsCJKUnifiedIdeographs	(int code)
    +

    Check whether the character is part of CJKUnifiedIdeographs UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsCJKUnifiedIdeographsExtensionA

    int	xmlUCSIsCJKUnifiedIdeographsExtensionA	(int code)
    +

    Check whether the character is part of CJKUnifiedIdeographsExtensionA UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsCJKUnifiedIdeographsExtensionB

    int	xmlUCSIsCJKUnifiedIdeographsExtensionB	(int code)
    +

    Check whether the character is part of CJKUnifiedIdeographsExtensionB UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsCat

    int	xmlUCSIsCat			(int code, 
    const char * cat)
    +

    Check whether the character is part of the UCS Category

    +
    code:UCS code point
    cat:UCS Category name
    Returns:1 if true, 0 if false and -1 on unknown category

    Function: xmlUCSIsCatC

    int	xmlUCSIsCatC			(int code)
    +

    Check whether the character is part of C UCS Category

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsCatCc

    int	xmlUCSIsCatCc			(int code)
    +

    Check whether the character is part of Cc UCS Category

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsCatCf

    int	xmlUCSIsCatCf			(int code)
    +

    Check whether the character is part of Cf UCS Category

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsCatCo

    int	xmlUCSIsCatCo			(int code)
    +

    Check whether the character is part of Co UCS Category

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsCatCs

    int	xmlUCSIsCatCs			(int code)
    +

    Check whether the character is part of Cs UCS Category

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsCatL

    int	xmlUCSIsCatL			(int code)
    +

    Check whether the character is part of L UCS Category

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsCatLl

    int	xmlUCSIsCatLl			(int code)
    +

    Check whether the character is part of Ll UCS Category

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsCatLm

    int	xmlUCSIsCatLm			(int code)
    +

    Check whether the character is part of Lm UCS Category

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsCatLo

    int	xmlUCSIsCatLo			(int code)
    +

    Check whether the character is part of Lo UCS Category

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsCatLt

    int	xmlUCSIsCatLt			(int code)
    +

    Check whether the character is part of Lt UCS Category

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsCatLu

    int	xmlUCSIsCatLu			(int code)
    +

    Check whether the character is part of Lu UCS Category

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsCatM

    int	xmlUCSIsCatM			(int code)
    +

    Check whether the character is part of M UCS Category

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsCatMc

    int	xmlUCSIsCatMc			(int code)
    +

    Check whether the character is part of Mc UCS Category

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsCatMe

    int	xmlUCSIsCatMe			(int code)
    +

    Check whether the character is part of Me UCS Category

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsCatMn

    int	xmlUCSIsCatMn			(int code)
    +

    Check whether the character is part of Mn UCS Category

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsCatN

    int	xmlUCSIsCatN			(int code)
    +

    Check whether the character is part of N UCS Category

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsCatNd

    int	xmlUCSIsCatNd			(int code)
    +

    Check whether the character is part of Nd UCS Category

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsCatNl

    int	xmlUCSIsCatNl			(int code)
    +

    Check whether the character is part of Nl UCS Category

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsCatNo

    int	xmlUCSIsCatNo			(int code)
    +

    Check whether the character is part of No UCS Category

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsCatP

    int	xmlUCSIsCatP			(int code)
    +

    Check whether the character is part of P UCS Category

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsCatPc

    int	xmlUCSIsCatPc			(int code)
    +

    Check whether the character is part of Pc UCS Category

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsCatPd

    int	xmlUCSIsCatPd			(int code)
    +

    Check whether the character is part of Pd UCS Category

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsCatPe

    int	xmlUCSIsCatPe			(int code)
    +

    Check whether the character is part of Pe UCS Category

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsCatPf

    int	xmlUCSIsCatPf			(int code)
    +

    Check whether the character is part of Pf UCS Category

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsCatPi

    int	xmlUCSIsCatPi			(int code)
    +

    Check whether the character is part of Pi UCS Category

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsCatPo

    int	xmlUCSIsCatPo			(int code)
    +

    Check whether the character is part of Po UCS Category

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsCatPs

    int	xmlUCSIsCatPs			(int code)
    +

    Check whether the character is part of Ps UCS Category

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsCatS

    int	xmlUCSIsCatS			(int code)
    +

    Check whether the character is part of S UCS Category

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsCatSc

    int	xmlUCSIsCatSc			(int code)
    +

    Check whether the character is part of Sc UCS Category

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsCatSk

    int	xmlUCSIsCatSk			(int code)
    +

    Check whether the character is part of Sk UCS Category

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsCatSm

    int	xmlUCSIsCatSm			(int code)
    +

    Check whether the character is part of Sm UCS Category

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsCatSo

    int	xmlUCSIsCatSo			(int code)
    +

    Check whether the character is part of So UCS Category

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsCatZ

    int	xmlUCSIsCatZ			(int code)
    +

    Check whether the character is part of Z UCS Category

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsCatZl

    int	xmlUCSIsCatZl			(int code)
    +

    Check whether the character is part of Zl UCS Category

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsCatZp

    int	xmlUCSIsCatZp			(int code)
    +

    Check whether the character is part of Zp UCS Category

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsCatZs

    int	xmlUCSIsCatZs			(int code)
    +

    Check whether the character is part of Zs UCS Category

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsCherokee

    int	xmlUCSIsCherokee		(int code)
    +

    Check whether the character is part of Cherokee UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsCombiningDiacriticalMarks

    int	xmlUCSIsCombiningDiacriticalMarks	(int code)
    +

    Check whether the character is part of CombiningDiacriticalMarks UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsCombiningDiacriticalMarksforSymbols

    int	xmlUCSIsCombiningDiacriticalMarksforSymbols	(int code)
    +

    Check whether the character is part of CombiningDiacriticalMarksforSymbols UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsCombiningHalfMarks

    int	xmlUCSIsCombiningHalfMarks	(int code)
    +

    Check whether the character is part of CombiningHalfMarks UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsCombiningMarksforSymbols

    int	xmlUCSIsCombiningMarksforSymbols	(int code)
    +

    Check whether the character is part of CombiningMarksforSymbols UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsControlPictures

    int	xmlUCSIsControlPictures		(int code)
    +

    Check whether the character is part of ControlPictures UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsCurrencySymbols

    int	xmlUCSIsCurrencySymbols		(int code)
    +

    Check whether the character is part of CurrencySymbols UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsCypriotSyllabary

    int	xmlUCSIsCypriotSyllabary	(int code)
    +

    Check whether the character is part of CypriotSyllabary UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsCyrillic

    int	xmlUCSIsCyrillic		(int code)
    +

    Check whether the character is part of Cyrillic UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsCyrillicSupplement

    int	xmlUCSIsCyrillicSupplement	(int code)
    +

    Check whether the character is part of CyrillicSupplement UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsDeseret

    int	xmlUCSIsDeseret			(int code)
    +

    Check whether the character is part of Deseret UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsDevanagari

    int	xmlUCSIsDevanagari		(int code)
    +

    Check whether the character is part of Devanagari UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsDingbats

    int	xmlUCSIsDingbats		(int code)
    +

    Check whether the character is part of Dingbats UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsEnclosedAlphanumerics

    int	xmlUCSIsEnclosedAlphanumerics	(int code)
    +

    Check whether the character is part of EnclosedAlphanumerics UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsEnclosedCJKLettersandMonths

    int	xmlUCSIsEnclosedCJKLettersandMonths	(int code)
    +

    Check whether the character is part of EnclosedCJKLettersandMonths UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsEthiopic

    int	xmlUCSIsEthiopic		(int code)
    +

    Check whether the character is part of Ethiopic UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsGeneralPunctuation

    int	xmlUCSIsGeneralPunctuation	(int code)
    +

    Check whether the character is part of GeneralPunctuation UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsGeometricShapes

    int	xmlUCSIsGeometricShapes		(int code)
    +

    Check whether the character is part of GeometricShapes UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsGeorgian

    int	xmlUCSIsGeorgian		(int code)
    +

    Check whether the character is part of Georgian UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsGothic

    int	xmlUCSIsGothic			(int code)
    +

    Check whether the character is part of Gothic UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsGreek

    int	xmlUCSIsGreek			(int code)
    +

    Check whether the character is part of Greek UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsGreekExtended

    int	xmlUCSIsGreekExtended		(int code)
    +

    Check whether the character is part of GreekExtended UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsGreekandCoptic

    int	xmlUCSIsGreekandCoptic		(int code)
    +

    Check whether the character is part of GreekandCoptic UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsGujarati

    int	xmlUCSIsGujarati		(int code)
    +

    Check whether the character is part of Gujarati UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsGurmukhi

    int	xmlUCSIsGurmukhi		(int code)
    +

    Check whether the character is part of Gurmukhi UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsHalfwidthandFullwidthForms

    int	xmlUCSIsHalfwidthandFullwidthForms	(int code)
    +

    Check whether the character is part of HalfwidthandFullwidthForms UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsHangulCompatibilityJamo

    int	xmlUCSIsHangulCompatibilityJamo	(int code)
    +

    Check whether the character is part of HangulCompatibilityJamo UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsHangulJamo

    int	xmlUCSIsHangulJamo		(int code)
    +

    Check whether the character is part of HangulJamo UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsHangulSyllables

    int	xmlUCSIsHangulSyllables		(int code)
    +

    Check whether the character is part of HangulSyllables UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsHanunoo

    int	xmlUCSIsHanunoo			(int code)
    +

    Check whether the character is part of Hanunoo UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsHebrew

    int	xmlUCSIsHebrew			(int code)
    +

    Check whether the character is part of Hebrew UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsHighPrivateUseSurrogates

    int	xmlUCSIsHighPrivateUseSurrogates	(int code)
    +

    Check whether the character is part of HighPrivateUseSurrogates UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsHighSurrogates

    int	xmlUCSIsHighSurrogates		(int code)
    +

    Check whether the character is part of HighSurrogates UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsHiragana

    int	xmlUCSIsHiragana		(int code)
    +

    Check whether the character is part of Hiragana UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsIPAExtensions

    int	xmlUCSIsIPAExtensions		(int code)
    +

    Check whether the character is part of IPAExtensions UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsIdeographicDescriptionCharacters

    int	xmlUCSIsIdeographicDescriptionCharacters	(int code)
    +

    Check whether the character is part of IdeographicDescriptionCharacters UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsKanbun

    int	xmlUCSIsKanbun			(int code)
    +

    Check whether the character is part of Kanbun UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsKangxiRadicals

    int	xmlUCSIsKangxiRadicals		(int code)
    +

    Check whether the character is part of KangxiRadicals UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsKannada

    int	xmlUCSIsKannada			(int code)
    +

    Check whether the character is part of Kannada UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsKatakana

    int	xmlUCSIsKatakana		(int code)
    +

    Check whether the character is part of Katakana UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsKatakanaPhoneticExtensions

    int	xmlUCSIsKatakanaPhoneticExtensions	(int code)
    +

    Check whether the character is part of KatakanaPhoneticExtensions UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsKhmer

    int	xmlUCSIsKhmer			(int code)
    +

    Check whether the character is part of Khmer UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsKhmerSymbols

    int	xmlUCSIsKhmerSymbols		(int code)
    +

    Check whether the character is part of KhmerSymbols UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsLao

    int	xmlUCSIsLao			(int code)
    +

    Check whether the character is part of Lao UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsLatin1Supplement

    int	xmlUCSIsLatin1Supplement	(int code)
    +

    Check whether the character is part of Latin-1Supplement UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsLatinExtendedA

    int	xmlUCSIsLatinExtendedA		(int code)
    +

    Check whether the character is part of LatinExtended-A UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsLatinExtendedAdditional

    int	xmlUCSIsLatinExtendedAdditional	(int code)
    +

    Check whether the character is part of LatinExtendedAdditional UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsLatinExtendedB

    int	xmlUCSIsLatinExtendedB		(int code)
    +

    Check whether the character is part of LatinExtended-B UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsLetterlikeSymbols

    int	xmlUCSIsLetterlikeSymbols	(int code)
    +

    Check whether the character is part of LetterlikeSymbols UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsLimbu

    int	xmlUCSIsLimbu			(int code)
    +

    Check whether the character is part of Limbu UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsLinearBIdeograms

    int	xmlUCSIsLinearBIdeograms	(int code)
    +

    Check whether the character is part of LinearBIdeograms UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsLinearBSyllabary

    int	xmlUCSIsLinearBSyllabary	(int code)
    +

    Check whether the character is part of LinearBSyllabary UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsLowSurrogates

    int	xmlUCSIsLowSurrogates		(int code)
    +

    Check whether the character is part of LowSurrogates UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsMalayalam

    int	xmlUCSIsMalayalam		(int code)
    +

    Check whether the character is part of Malayalam UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsMathematicalAlphanumericSymbols

    int	xmlUCSIsMathematicalAlphanumericSymbols	(int code)
    +

    Check whether the character is part of MathematicalAlphanumericSymbols UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsMathematicalOperators

    int	xmlUCSIsMathematicalOperators	(int code)
    +

    Check whether the character is part of MathematicalOperators UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsMiscellaneousMathematicalSymbolsA

    int	xmlUCSIsMiscellaneousMathematicalSymbolsA	(int code)
    +

    Check whether the character is part of MiscellaneousMathematicalSymbols-A UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsMiscellaneousMathematicalSymbolsB

    int	xmlUCSIsMiscellaneousMathematicalSymbolsB	(int code)
    +

    Check whether the character is part of MiscellaneousMathematicalSymbols-B UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsMiscellaneousSymbols

    int	xmlUCSIsMiscellaneousSymbols	(int code)
    +

    Check whether the character is part of MiscellaneousSymbols UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsMiscellaneousSymbolsandArrows

    int	xmlUCSIsMiscellaneousSymbolsandArrows	(int code)
    +

    Check whether the character is part of MiscellaneousSymbolsandArrows UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsMiscellaneousTechnical

    int	xmlUCSIsMiscellaneousTechnical	(int code)
    +

    Check whether the character is part of MiscellaneousTechnical UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsMongolian

    int	xmlUCSIsMongolian		(int code)
    +

    Check whether the character is part of Mongolian UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsMusicalSymbols

    int	xmlUCSIsMusicalSymbols		(int code)
    +

    Check whether the character is part of MusicalSymbols UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsMyanmar

    int	xmlUCSIsMyanmar			(int code)
    +

    Check whether the character is part of Myanmar UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsNumberForms

    int	xmlUCSIsNumberForms		(int code)
    +

    Check whether the character is part of NumberForms UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsOgham

    int	xmlUCSIsOgham			(int code)
    +

    Check whether the character is part of Ogham UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsOldItalic

    int	xmlUCSIsOldItalic		(int code)
    +

    Check whether the character is part of OldItalic UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsOpticalCharacterRecognition

    int	xmlUCSIsOpticalCharacterRecognition	(int code)
    +

    Check whether the character is part of OpticalCharacterRecognition UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsOriya

    int	xmlUCSIsOriya			(int code)
    +

    Check whether the character is part of Oriya UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsOsmanya

    int	xmlUCSIsOsmanya			(int code)
    +

    Check whether the character is part of Osmanya UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsPhoneticExtensions

    int	xmlUCSIsPhoneticExtensions	(int code)
    +

    Check whether the character is part of PhoneticExtensions UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsPrivateUse

    int	xmlUCSIsPrivateUse		(int code)
    +

    Check whether the character is part of PrivateUse UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsPrivateUseArea

    int	xmlUCSIsPrivateUseArea		(int code)
    +

    Check whether the character is part of PrivateUseArea UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsRunic

    int	xmlUCSIsRunic			(int code)
    +

    Check whether the character is part of Runic UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsShavian

    int	xmlUCSIsShavian			(int code)
    +

    Check whether the character is part of Shavian UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsSinhala

    int	xmlUCSIsSinhala			(int code)
    +

    Check whether the character is part of Sinhala UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsSmallFormVariants

    int	xmlUCSIsSmallFormVariants	(int code)
    +

    Check whether the character is part of SmallFormVariants UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsSpacingModifierLetters

    int	xmlUCSIsSpacingModifierLetters	(int code)
    +

    Check whether the character is part of SpacingModifierLetters UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsSpecials

    int	xmlUCSIsSpecials		(int code)
    +

    Check whether the character is part of Specials UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsSuperscriptsandSubscripts

    int	xmlUCSIsSuperscriptsandSubscripts	(int code)
    +

    Check whether the character is part of SuperscriptsandSubscripts UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsSupplementalArrowsA

    int	xmlUCSIsSupplementalArrowsA	(int code)
    +

    Check whether the character is part of SupplementalArrows-A UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsSupplementalArrowsB

    int	xmlUCSIsSupplementalArrowsB	(int code)
    +

    Check whether the character is part of SupplementalArrows-B UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsSupplementalMathematicalOperators

    int	xmlUCSIsSupplementalMathematicalOperators	(int code)
    +

    Check whether the character is part of SupplementalMathematicalOperators UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsSupplementaryPrivateUseAreaA

    int	xmlUCSIsSupplementaryPrivateUseAreaA	(int code)
    +

    Check whether the character is part of SupplementaryPrivateUseArea-A UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsSupplementaryPrivateUseAreaB

    int	xmlUCSIsSupplementaryPrivateUseAreaB	(int code)
    +

    Check whether the character is part of SupplementaryPrivateUseArea-B UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsSyriac

    int	xmlUCSIsSyriac			(int code)
    +

    Check whether the character is part of Syriac UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsTagalog

    int	xmlUCSIsTagalog			(int code)
    +

    Check whether the character is part of Tagalog UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsTagbanwa

    int	xmlUCSIsTagbanwa		(int code)
    +

    Check whether the character is part of Tagbanwa UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsTags

    int	xmlUCSIsTags			(int code)
    +

    Check whether the character is part of Tags UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsTaiLe

    int	xmlUCSIsTaiLe			(int code)
    +

    Check whether the character is part of TaiLe UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsTaiXuanJingSymbols

    int	xmlUCSIsTaiXuanJingSymbols	(int code)
    +

    Check whether the character is part of TaiXuanJingSymbols UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsTamil

    int	xmlUCSIsTamil			(int code)
    +

    Check whether the character is part of Tamil UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsTelugu

    int	xmlUCSIsTelugu			(int code)
    +

    Check whether the character is part of Telugu UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsThaana

    int	xmlUCSIsThaana			(int code)
    +

    Check whether the character is part of Thaana UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsThai

    int	xmlUCSIsThai			(int code)
    +

    Check whether the character is part of Thai UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsTibetan

    int	xmlUCSIsTibetan			(int code)
    +

    Check whether the character is part of Tibetan UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsUgaritic

    int	xmlUCSIsUgaritic		(int code)
    +

    Check whether the character is part of Ugaritic UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsUnifiedCanadianAboriginalSyllabics

    int	xmlUCSIsUnifiedCanadianAboriginalSyllabics	(int code)
    +

    Check whether the character is part of UnifiedCanadianAboriginalSyllabics UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsVariationSelectors

    int	xmlUCSIsVariationSelectors	(int code)
    +

    Check whether the character is part of VariationSelectors UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsVariationSelectorsSupplement

    int	xmlUCSIsVariationSelectorsSupplement	(int code)
    +

    Check whether the character is part of VariationSelectorsSupplement UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsYiRadicals

    int	xmlUCSIsYiRadicals		(int code)
    +

    Check whether the character is part of YiRadicals UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsYiSyllables

    int	xmlUCSIsYiSyllables		(int code)
    +

    Check whether the character is part of YiSyllables UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Function: xmlUCSIsYijingHexagramSymbols

    int	xmlUCSIsYijingHexagramSymbols	(int code)
    +

    Check whether the character is part of YijingHexagramSymbols UCS Block

    +
    code:UCS code point
    Returns:1 if true 0 otherwise

    Daniel Veillard

    diff --git a/doc/html/libxml-xmlversion.html b/doc/html/libxml-xmlversion.html new file mode 100644 index 0000000..30e9f0e --- /dev/null +++ b/doc/html/libxml-xmlversion.html @@ -0,0 +1,63 @@ + + +Module xmlversion from libxml2
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    Module xmlversion from libxml2

    API Menu
    API Indexes
    Related links

    compile-time version informations for the XML library

    Table of Contents

    #define ATTRIBUTE_UNUSED
    #define DEBUG_MEMORY_LOCATION
    #define LIBXML_ATTR_ALLOC_SIZE
    #define LIBXML_ATTR_FORMAT
    #define LIBXML_AUTOMATA_ENABLED
    #define LIBXML_C14N_ENABLED
    #define LIBXML_CATALOG_ENABLED
    #define LIBXML_DEBUG_ENABLED
    #define LIBXML_DEBUG_RUNTIME
    #define LIBXML_DOCB_ENABLED
    #define LIBXML_DOTTED_VERSION
    #define LIBXML_EXPR_ENABLED
    #define LIBXML_FTP_ENABLED
    #define LIBXML_HTML_ENABLED
    #define LIBXML_HTTP_ENABLED
    #define LIBXML_ICONV_ENABLED
    #define LIBXML_ICU_ENABLED
    #define LIBXML_ISO8859X_ENABLED
    #define LIBXML_LEGACY_ENABLED
    #define LIBXML_LZMA_ENABLED
    #define LIBXML_MODULES_ENABLED
    #define LIBXML_MODULE_EXTENSION
    #define LIBXML_OUTPUT_ENABLED
    #define LIBXML_PATTERN_ENABLED
    #define LIBXML_PUSH_ENABLED
    #define LIBXML_READER_ENABLED
    #define LIBXML_REGEXP_ENABLED
    #define LIBXML_SAX1_ENABLED
    #define LIBXML_SCHEMAS_ENABLED
    #define LIBXML_SCHEMATRON_ENABLED
    #define LIBXML_TEST_VERSION
    #define LIBXML_THREAD_ALLOC_ENABLED
    #define LIBXML_THREAD_ENABLED
    #define LIBXML_TREE_ENABLED
    #define LIBXML_UNICODE_ENABLED
    #define LIBXML_VALID_ENABLED
    #define LIBXML_VERSION
    #define LIBXML_VERSION_EXTRA
    #define LIBXML_VERSION_STRING
    #define LIBXML_WRITER_ENABLED
    #define LIBXML_XINCLUDE_ENABLED
    #define LIBXML_XPATH_ENABLED
    #define LIBXML_XPTR_ENABLED
    #define LIBXML_ZLIB_ENABLED
    #define WITHOUT_TRIO
    #define WITH_TRIO
    void	xmlCheckVersion			(int version)
    +

    Description

    +

    Macro: ATTRIBUTE_UNUSED

    #define ATTRIBUTE_UNUSED

    Macro used to signal to GCC unused function parameters

    +

    Macro: DEBUG_MEMORY_LOCATION

    #define DEBUG_MEMORY_LOCATION

    Whether the memory debugging is configured in

    +

    Macro: LIBXML_ATTR_ALLOC_SIZE

    #define LIBXML_ATTR_ALLOC_SIZE

    Macro used to indicate to GCC this is an allocator function

    +

    Macro: LIBXML_ATTR_FORMAT

    #define LIBXML_ATTR_FORMAT

    Macro used to indicate to GCC the parameter are printf like

    +

    Macro: LIBXML_AUTOMATA_ENABLED

    #define LIBXML_AUTOMATA_ENABLED

    Whether the automata interfaces are compiled in

    +

    Macro: LIBXML_C14N_ENABLED

    #define LIBXML_C14N_ENABLED

    Whether the Canonicalization support is configured in

    +

    Macro: LIBXML_CATALOG_ENABLED

    #define LIBXML_CATALOG_ENABLED

    Whether the Catalog support is configured in

    +

    Macro: LIBXML_DEBUG_ENABLED

    #define LIBXML_DEBUG_ENABLED

    Whether Debugging module is configured in

    +

    Macro: LIBXML_DEBUG_RUNTIME

    #define LIBXML_DEBUG_RUNTIME

    Whether the runtime debugging is configured in

    +

    Macro: LIBXML_DOCB_ENABLED

    #define LIBXML_DOCB_ENABLED

    Whether the SGML Docbook support is configured in

    +

    Macro: LIBXML_DOTTED_VERSION

    #define LIBXML_DOTTED_VERSION

    the version string like "1.2.3"

    +

    Macro: LIBXML_EXPR_ENABLED

    #define LIBXML_EXPR_ENABLED

    Whether the formal expressions interfaces are compiled in

    +

    Macro: LIBXML_FTP_ENABLED

    #define LIBXML_FTP_ENABLED

    Whether the FTP support is configured in

    +

    Macro: LIBXML_HTML_ENABLED

    #define LIBXML_HTML_ENABLED

    Whether the HTML support is configured in

    +

    Macro: LIBXML_HTTP_ENABLED

    #define LIBXML_HTTP_ENABLED

    Whether the HTTP support is configured in

    +

    Macro: LIBXML_ICONV_ENABLED

    #define LIBXML_ICONV_ENABLED

    Whether iconv support is available

    +

    Macro: LIBXML_ICU_ENABLED

    #define LIBXML_ICU_ENABLED

    Whether icu support is available

    +

    Macro: LIBXML_ISO8859X_ENABLED

    #define LIBXML_ISO8859X_ENABLED

    Whether ISO-8859-* support is made available in case iconv is not

    +

    Macro: LIBXML_LEGACY_ENABLED

    #define LIBXML_LEGACY_ENABLED

    Whether the deprecated APIs are compiled in for compatibility

    +

    Macro: LIBXML_LZMA_ENABLED

    #define LIBXML_LZMA_ENABLED

    Whether the Lzma support is compiled in

    +

    Macro: LIBXML_MODULES_ENABLED

    #define LIBXML_MODULES_ENABLED

    Whether the module interfaces are compiled in

    +

    Macro: LIBXML_MODULE_EXTENSION

    #define LIBXML_MODULE_EXTENSION

    the string suffix used by dynamic modules (usually shared libraries)

    +

    Macro: LIBXML_OUTPUT_ENABLED

    #define LIBXML_OUTPUT_ENABLED

    Whether the serialization/saving support is configured in

    +

    Macro: LIBXML_PATTERN_ENABLED

    #define LIBXML_PATTERN_ENABLED

    Whether the xmlPattern node selection interface is configured in

    +

    Macro: LIBXML_PUSH_ENABLED

    #define LIBXML_PUSH_ENABLED

    Whether the push parsing interfaces are configured in

    +

    Macro: LIBXML_READER_ENABLED

    #define LIBXML_READER_ENABLED

    Whether the xmlReader parsing interface is configured in

    +

    Macro: LIBXML_REGEXP_ENABLED

    #define LIBXML_REGEXP_ENABLED

    Whether the regular expressions interfaces are compiled in

    +

    Macro: LIBXML_SAX1_ENABLED

    #define LIBXML_SAX1_ENABLED

    Whether the older SAX1 interface is configured in

    +

    Macro: LIBXML_SCHEMAS_ENABLED

    #define LIBXML_SCHEMAS_ENABLED

    Whether the Schemas validation interfaces are compiled in

    +

    Macro: LIBXML_SCHEMATRON_ENABLED

    #define LIBXML_SCHEMATRON_ENABLED

    Whether the Schematron validation interfaces are compiled in

    +

    Macro: LIBXML_TEST_VERSION

    #define LIBXML_TEST_VERSION

    Macro to check that the libxml version in use is compatible with the version the software has been compiled against

    +

    Macro: LIBXML_THREAD_ALLOC_ENABLED

    #define LIBXML_THREAD_ALLOC_ENABLED

    Whether the allocation hooks are per-thread

    +

    Macro: LIBXML_THREAD_ENABLED

    #define LIBXML_THREAD_ENABLED

    Whether the thread support is configured in

    +

    Macro: LIBXML_TREE_ENABLED

    #define LIBXML_TREE_ENABLED

    Whether the DOM like tree manipulation API support is configured in

    +

    Macro: LIBXML_UNICODE_ENABLED

    #define LIBXML_UNICODE_ENABLED

    Whether the Unicode related interfaces are compiled in

    +

    Macro: LIBXML_VALID_ENABLED

    #define LIBXML_VALID_ENABLED

    Whether the DTD validation support is configured in

    +

    Macro: LIBXML_VERSION

    #define LIBXML_VERSION

    the version number: 1.2.3 value is 10203

    +

    Macro: LIBXML_VERSION_EXTRA

    #define LIBXML_VERSION_EXTRA

    extra version information, used to show a CVS compilation

    +

    Macro: LIBXML_VERSION_STRING

    #define LIBXML_VERSION_STRING

    the version number string, 1.2.3 value is "10203"

    +

    Macro: LIBXML_WRITER_ENABLED

    #define LIBXML_WRITER_ENABLED

    Whether the xmlWriter saving interface is configured in

    +

    Macro: LIBXML_XINCLUDE_ENABLED

    #define LIBXML_XINCLUDE_ENABLED

    Whether XInclude is configured in

    +

    Macro: LIBXML_XPATH_ENABLED

    #define LIBXML_XPATH_ENABLED

    Whether XPath is configured in

    +

    Macro: LIBXML_XPTR_ENABLED

    #define LIBXML_XPTR_ENABLED

    Whether XPointer is configured in

    +

    Macro: LIBXML_ZLIB_ENABLED

    #define LIBXML_ZLIB_ENABLED

    Whether the Zlib support is compiled in

    +

    Macro: WITHOUT_TRIO

    #define WITHOUT_TRIO

    defined if the trio support should not be configured in

    +

    Macro: WITH_TRIO

    #define WITH_TRIO

    defined if the trio support need to be configured in

    +

    Function: xmlCheckVersion

    void	xmlCheckVersion			(int version)
    +

    check the compiled lib version against the include one. This can warn or immediately kill the application

    +
    version:the include version number

    Daniel Veillard

    diff --git a/doc/html/libxml-xmlwriter.html b/doc/html/libxml-xmlwriter.html new file mode 100644 index 0000000..e09ff59 --- /dev/null +++ b/doc/html/libxml-xmlwriter.html @@ -0,0 +1,261 @@ + + +Module xmlwriter from libxml2
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    Module xmlwriter from libxml2

    API Menu
    API Indexes
    Related links

    text writing API for XML

    Table of Contents

    #define xmlTextWriterWriteDocType
    #define xmlTextWriterWriteProcessingInstruction
    Structure xmlTextWriter
    struct _xmlTextWriter +The content of this structure is not made public by the API. +
    Typedef xmlTextWriter * xmlTextWriterPtr
    +
    void	xmlFreeTextWriter		(xmlTextWriterPtr writer)
    +
    xmlTextWriterPtr	xmlNewTextWriter	(xmlOutputBufferPtr out)
    +
    xmlTextWriterPtr	xmlNewTextWriterDoc	(xmlDocPtr * doc, 
    int compression)
    +
    xmlTextWriterPtr	xmlNewTextWriterFilename	(const char * uri, 
    int compression)
    +
    xmlTextWriterPtr	xmlNewTextWriterMemory	(xmlBufferPtr buf, 
    int compression)
    +
    xmlTextWriterPtr	xmlNewTextWriterPushParser	(xmlParserCtxtPtr ctxt, 
    int compression)
    +
    xmlTextWriterPtr	xmlNewTextWriterTree	(xmlDocPtr doc, 
    xmlNodePtr node,
    int compression)
    +
    int	xmlTextWriterEndAttribute	(xmlTextWriterPtr writer)
    +
    int	xmlTextWriterEndCDATA		(xmlTextWriterPtr writer)
    +
    int	xmlTextWriterEndComment		(xmlTextWriterPtr writer)
    +
    int	xmlTextWriterEndDTD		(xmlTextWriterPtr writer)
    +
    int	xmlTextWriterEndDTDAttlist	(xmlTextWriterPtr writer)
    +
    int	xmlTextWriterEndDTDElement	(xmlTextWriterPtr writer)
    +
    int	xmlTextWriterEndDTDEntity	(xmlTextWriterPtr writer)
    +
    int	xmlTextWriterEndDocument	(xmlTextWriterPtr writer)
    +
    int	xmlTextWriterEndElement		(xmlTextWriterPtr writer)
    +
    int	xmlTextWriterEndPI		(xmlTextWriterPtr writer)
    +
    int	xmlTextWriterFlush		(xmlTextWriterPtr writer)
    +
    int	xmlTextWriterFullEndElement	(xmlTextWriterPtr writer)
    +
    int	xmlTextWriterSetIndent		(xmlTextWriterPtr writer, 
    int indent)
    +
    int	xmlTextWriterSetIndentString	(xmlTextWriterPtr writer, 
    const xmlChar * str)
    +
    int	xmlTextWriterSetQuoteChar	(xmlTextWriterPtr writer, 
    xmlChar quotechar)
    +
    int	xmlTextWriterStartAttribute	(xmlTextWriterPtr writer, 
    const xmlChar * name)
    +
    int	xmlTextWriterStartAttributeNS	(xmlTextWriterPtr writer, 
    const xmlChar * prefix,
    const xmlChar * name,
    const xmlChar * namespaceURI)
    +
    int	xmlTextWriterStartCDATA		(xmlTextWriterPtr writer)
    +
    int	xmlTextWriterStartComment	(xmlTextWriterPtr writer)
    +
    int	xmlTextWriterStartDTD		(xmlTextWriterPtr writer, 
    const xmlChar * name,
    const xmlChar * pubid,
    const xmlChar * sysid)
    +
    int	xmlTextWriterStartDTDAttlist	(xmlTextWriterPtr writer, 
    const xmlChar * name)
    +
    int	xmlTextWriterStartDTDElement	(xmlTextWriterPtr writer, 
    const xmlChar * name)
    +
    int	xmlTextWriterStartDTDEntity	(xmlTextWriterPtr writer, 
    int pe,
    const xmlChar * name)
    +
    int	xmlTextWriterStartDocument	(xmlTextWriterPtr writer, 
    const char * version,
    const char * encoding,
    const char * standalone)
    +
    int	xmlTextWriterStartElement	(xmlTextWriterPtr writer, 
    const xmlChar * name)
    +
    int	xmlTextWriterStartElementNS	(xmlTextWriterPtr writer, 
    const xmlChar * prefix,
    const xmlChar * name,
    const xmlChar * namespaceURI)
    +
    int	xmlTextWriterStartPI		(xmlTextWriterPtr writer, 
    const xmlChar * target)
    +
    int	xmlTextWriterWriteAttribute	(xmlTextWriterPtr writer, 
    const xmlChar * name,
    const xmlChar * content)
    +
    int	xmlTextWriterWriteAttributeNS	(xmlTextWriterPtr writer, 
    const xmlChar * prefix,
    const xmlChar * name,
    const xmlChar * namespaceURI,
    const xmlChar * content)
    +
    int	xmlTextWriterWriteBase64	(xmlTextWriterPtr writer, 
    const char * data,
    int start,
    int len)
    +
    int	xmlTextWriterWriteBinHex	(xmlTextWriterPtr writer, 
    const char * data,
    int start,
    int len)
    +
    int	xmlTextWriterWriteCDATA		(xmlTextWriterPtr writer, 
    const xmlChar * content)
    +
    int	xmlTextWriterWriteComment	(xmlTextWriterPtr writer, 
    const xmlChar * content)
    +
    int	xmlTextWriterWriteDTD		(xmlTextWriterPtr writer, 
    const xmlChar * name,
    const xmlChar * pubid,
    const xmlChar * sysid,
    const xmlChar * subset)
    +
    int	xmlTextWriterWriteDTDAttlist	(xmlTextWriterPtr writer, 
    const xmlChar * name,
    const xmlChar * content)
    +
    int	xmlTextWriterWriteDTDElement	(xmlTextWriterPtr writer, 
    const xmlChar * name,
    const xmlChar * content)
    +
    int	xmlTextWriterWriteDTDEntity	(xmlTextWriterPtr writer, 
    int pe,
    const xmlChar * name,
    const xmlChar * pubid,
    const xmlChar * sysid,
    const xmlChar * ndataid,
    const xmlChar * content)
    +
    int	xmlTextWriterWriteDTDExternalEntity	(xmlTextWriterPtr writer, 
    int pe,
    const xmlChar * name,
    const xmlChar * pubid,
    const xmlChar * sysid,
    const xmlChar * ndataid)
    +
    int	xmlTextWriterWriteDTDExternalEntityContents	(xmlTextWriterPtr writer, 
    const xmlChar * pubid,
    const xmlChar * sysid,
    const xmlChar * ndataid)
    +
    int	xmlTextWriterWriteDTDInternalEntity	(xmlTextWriterPtr writer, 
    int pe,
    const xmlChar * name,
    const xmlChar * content)
    +
    int	xmlTextWriterWriteDTDNotation	(xmlTextWriterPtr writer, 
    const xmlChar * name,
    const xmlChar * pubid,
    const xmlChar * sysid)
    +
    int	xmlTextWriterWriteElement	(xmlTextWriterPtr writer, 
    const xmlChar * name,
    const xmlChar * content)
    +
    int	xmlTextWriterWriteElementNS	(xmlTextWriterPtr writer, 
    const xmlChar * prefix,
    const xmlChar * name,
    const xmlChar * namespaceURI,
    const xmlChar * content)
    +
    int	xmlTextWriterWriteFormatAttribute	(xmlTextWriterPtr writer, 
    const xmlChar * name,
    const char * format,
    ... ...)
    +
    int	xmlTextWriterWriteFormatAttributeNS	(xmlTextWriterPtr writer, 
    const xmlChar * prefix,
    const xmlChar * name,
    const xmlChar * namespaceURI,
    const char * format,
    ... ...)
    +
    int	xmlTextWriterWriteFormatCDATA	(xmlTextWriterPtr writer, 
    const char * format,
    ... ...)
    +
    int	xmlTextWriterWriteFormatComment	(xmlTextWriterPtr writer, 
    const char * format,
    ... ...)
    +
    int	xmlTextWriterWriteFormatDTD	(xmlTextWriterPtr writer, 
    const xmlChar * name,
    const xmlChar * pubid,
    const xmlChar * sysid,
    const char * format,
    ... ...)
    +
    int	xmlTextWriterWriteFormatDTDAttlist	(xmlTextWriterPtr writer, 
    const xmlChar * name,
    const char * format,
    ... ...)
    +
    int	xmlTextWriterWriteFormatDTDElement	(xmlTextWriterPtr writer, 
    const xmlChar * name,
    const char * format,
    ... ...)
    +
    int	xmlTextWriterWriteFormatDTDInternalEntity	(xmlTextWriterPtr writer, 
    int pe,
    const xmlChar * name,
    const char * format,
    ... ...)
    +
    int	xmlTextWriterWriteFormatElement	(xmlTextWriterPtr writer, 
    const xmlChar * name,
    const char * format,
    ... ...)
    +
    int	xmlTextWriterWriteFormatElementNS	(xmlTextWriterPtr writer, 
    const xmlChar * prefix,
    const xmlChar * name,
    const xmlChar * namespaceURI,
    const char * format,
    ... ...)
    +
    int	xmlTextWriterWriteFormatPI	(xmlTextWriterPtr writer, 
    const xmlChar * target,
    const char * format,
    ... ...)
    +
    int	xmlTextWriterWriteFormatRaw	(xmlTextWriterPtr writer, 
    const char * format,
    ... ...)
    +
    int	xmlTextWriterWriteFormatString	(xmlTextWriterPtr writer, 
    const char * format,
    ... ...)
    +
    int	xmlTextWriterWritePI		(xmlTextWriterPtr writer, 
    const xmlChar * target,
    const xmlChar * content)
    +
    int	xmlTextWriterWriteRaw		(xmlTextWriterPtr writer, 
    const xmlChar * content)
    +
    int	xmlTextWriterWriteRawLen	(xmlTextWriterPtr writer, 
    const xmlChar * content,
    int len)
    +
    int	xmlTextWriterWriteString	(xmlTextWriterPtr writer, 
    const xmlChar * content)
    +
    int	xmlTextWriterWriteVFormatAttribute	(xmlTextWriterPtr writer, 
    const xmlChar * name,
    const char * format,
    va_list argptr)
    +
    int	xmlTextWriterWriteVFormatAttributeNS	(xmlTextWriterPtr writer, 
    const xmlChar * prefix,
    const xmlChar * name,
    const xmlChar * namespaceURI,
    const char * format,
    va_list argptr)
    +
    int	xmlTextWriterWriteVFormatCDATA	(xmlTextWriterPtr writer, 
    const char * format,
    va_list argptr)
    +
    int	xmlTextWriterWriteVFormatComment	(xmlTextWriterPtr writer, 
    const char * format,
    va_list argptr)
    +
    int	xmlTextWriterWriteVFormatDTD	(xmlTextWriterPtr writer, 
    const xmlChar * name,
    const xmlChar * pubid,
    const xmlChar * sysid,
    const char * format,
    va_list argptr)
    +
    int	xmlTextWriterWriteVFormatDTDAttlist	(xmlTextWriterPtr writer, 
    const xmlChar * name,
    const char * format,
    va_list argptr)
    +
    int	xmlTextWriterWriteVFormatDTDElement	(xmlTextWriterPtr writer, 
    const xmlChar * name,
    const char * format,
    va_list argptr)
    +
    int	xmlTextWriterWriteVFormatDTDInternalEntity	(xmlTextWriterPtr writer, 
    int pe,
    const xmlChar * name,
    const char * format,
    va_list argptr)
    +
    int	xmlTextWriterWriteVFormatElement	(xmlTextWriterPtr writer, 
    const xmlChar * name,
    const char * format,
    va_list argptr)
    +
    int	xmlTextWriterWriteVFormatElementNS	(xmlTextWriterPtr writer, 
    const xmlChar * prefix,
    const xmlChar * name,
    const xmlChar * namespaceURI,
    const char * format,
    va_list argptr)
    +
    int	xmlTextWriterWriteVFormatPI	(xmlTextWriterPtr writer, 
    const xmlChar * target,
    const char * format,
    va_list argptr)
    +
    int	xmlTextWriterWriteVFormatRaw	(xmlTextWriterPtr writer, 
    const char * format,
    va_list argptr)
    +
    int	xmlTextWriterWriteVFormatString	(xmlTextWriterPtr writer, 
    const char * format,
    va_list argptr)
    +

    Description

    +

    Macro: xmlTextWriterWriteDocType

    #define xmlTextWriterWriteDocType

    this macro maps to xmlTextWriterWriteDTD

    +

    Macro: xmlTextWriterWriteProcessingInstruction

    #define xmlTextWriterWriteProcessingInstruction

    This macro maps to xmlTextWriterWritePI

    +

    Structure xmlTextWriter

    Structure xmlTextWriter
    struct _xmlTextWriter { +The content of this structure is not made public by the API. +}

    Function: xmlFreeTextWriter

    void	xmlFreeTextWriter		(xmlTextWriterPtr writer)
    +

    Deallocate all the resources associated to the writer

    +
    writer:the xmlTextWriterPtr

    Function: xmlNewTextWriter

    xmlTextWriterPtr	xmlNewTextWriter	(xmlOutputBufferPtr out)
    +

    Create a new xmlNewTextWriter structure using an xmlOutputBufferPtr NOTE: the @out parameter will be deallocated when the writer is closed (if the call succeed.)

    +
    out:an xmlOutputBufferPtr
    Returns:the new xmlTextWriterPtr or NULL in case of error

    Function: xmlNewTextWriterDoc

    xmlTextWriterPtr	xmlNewTextWriterDoc	(xmlDocPtr * doc, 
    int compression)
    +

    Create a new xmlNewTextWriter structure with @*doc as output

    +
    doc:address of a xmlDocPtr to hold the new XML document tree
    compression:compress the output?
    Returns:the new xmlTextWriterPtr or NULL in case of error

    Function: xmlNewTextWriterFilename

    xmlTextWriterPtr	xmlNewTextWriterFilename	(const char * uri, 
    int compression)
    +

    Create a new xmlNewTextWriter structure with @uri as output

    +
    uri:the URI of the resource for the output
    compression:compress the output?
    Returns:the new xmlTextWriterPtr or NULL in case of error

    Function: xmlNewTextWriterMemory

    xmlTextWriterPtr	xmlNewTextWriterMemory	(xmlBufferPtr buf, 
    int compression)
    +

    Create a new xmlNewTextWriter structure with @buf as output TODO: handle compression

    +
    buf:xmlBufferPtr
    compression:compress the output?
    Returns:the new xmlTextWriterPtr or NULL in case of error

    Function: xmlNewTextWriterPushParser

    xmlTextWriterPtr	xmlNewTextWriterPushParser	(xmlParserCtxtPtr ctxt, 
    int compression)
    +

    Create a new xmlNewTextWriter structure with @ctxt as output NOTE: the @ctxt context will be freed with the resulting writer (if the call succeeds). TODO: handle compression

    +
    ctxt:xmlParserCtxtPtr to hold the new XML document tree
    compression:compress the output?
    Returns:the new xmlTextWriterPtr or NULL in case of error

    Function: xmlNewTextWriterTree

    xmlTextWriterPtr	xmlNewTextWriterTree	(xmlDocPtr doc, 
    xmlNodePtr node,
    int compression)
    +

    Create a new xmlNewTextWriter structure with @doc as output starting at @node

    +
    doc:xmlDocPtr
    node:xmlNodePtr or NULL for doc->children
    compression:compress the output?
    Returns:the new xmlTextWriterPtr or NULL in case of error

    Function: xmlTextWriterEndAttribute

    int	xmlTextWriterEndAttribute	(xmlTextWriterPtr writer)
    +

    End the current xml element.

    +
    writer:the xmlTextWriterPtr
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterEndCDATA

    int	xmlTextWriterEndCDATA		(xmlTextWriterPtr writer)
    +

    End an xml CDATA section.

    +
    writer:the xmlTextWriterPtr
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterEndComment

    int	xmlTextWriterEndComment		(xmlTextWriterPtr writer)
    +

    End the current xml coment.

    +
    writer:the xmlTextWriterPtr
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterEndDTD

    int	xmlTextWriterEndDTD		(xmlTextWriterPtr writer)
    +

    End an xml DTD.

    +
    writer:the xmlTextWriterPtr
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterEndDTDAttlist

    int	xmlTextWriterEndDTDAttlist	(xmlTextWriterPtr writer)
    +

    End an xml DTD attribute list.

    +
    writer:the xmlTextWriterPtr
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterEndDTDElement

    int	xmlTextWriterEndDTDElement	(xmlTextWriterPtr writer)
    +

    End an xml DTD element.

    +
    writer:the xmlTextWriterPtr
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterEndDTDEntity

    int	xmlTextWriterEndDTDEntity	(xmlTextWriterPtr writer)
    +

    End an xml DTD entity.

    +
    writer:the xmlTextWriterPtr
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterEndDocument

    int	xmlTextWriterEndDocument	(xmlTextWriterPtr writer)
    +

    End an xml document. All open elements are closed, and the content is flushed to the output.

    +
    writer:the xmlTextWriterPtr
    Returns:the bytes written or -1 in case of error

    Function: xmlTextWriterEndElement

    int	xmlTextWriterEndElement		(xmlTextWriterPtr writer)
    +

    End the current xml element.

    +
    writer:the xmlTextWriterPtr
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterEndPI

    int	xmlTextWriterEndPI		(xmlTextWriterPtr writer)
    +

    End the current xml PI.

    +
    writer:the xmlTextWriterPtr
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterFlush

    int	xmlTextWriterFlush		(xmlTextWriterPtr writer)
    +

    Flush the output buffer.

    +
    writer:the xmlTextWriterPtr
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterFullEndElement

    int	xmlTextWriterFullEndElement	(xmlTextWriterPtr writer)
    +

    End the current xml element. Writes an end tag even if the element is empty

    +
    writer:the xmlTextWriterPtr
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterSetIndent

    int	xmlTextWriterSetIndent		(xmlTextWriterPtr writer, 
    int indent)
    +

    Set indentation output. indent = 0 do not indentation. indent > 0 do indentation.

    +
    writer:the xmlTextWriterPtr
    indent:do indentation?
    Returns:-1 on error or 0 otherwise.

    Function: xmlTextWriterSetIndentString

    int	xmlTextWriterSetIndentString	(xmlTextWriterPtr writer, 
    const xmlChar * str)
    +

    Set string indentation.

    +
    writer:the xmlTextWriterPtr
    str:the xmlChar string
    Returns:-1 on error or 0 otherwise.

    Function: xmlTextWriterSetQuoteChar

    int	xmlTextWriterSetQuoteChar	(xmlTextWriterPtr writer, 
    xmlChar quotechar)
    +

    Set the character used for quoting attributes.

    +
    writer:the xmlTextWriterPtr
    quotechar:the quote character
    Returns:-1 on error or 0 otherwise.

    Function: xmlTextWriterStartAttribute

    int	xmlTextWriterStartAttribute	(xmlTextWriterPtr writer, 
    const xmlChar * name)
    +

    Start an xml attribute.

    +
    writer:the xmlTextWriterPtr
    name:element name
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterStartAttributeNS

    int	xmlTextWriterStartAttributeNS	(xmlTextWriterPtr writer, 
    const xmlChar * prefix,
    const xmlChar * name,
    const xmlChar * namespaceURI)
    +

    Start an xml attribute with namespace support.

    +
    writer:the xmlTextWriterPtr
    prefix:namespace prefix or NULL
    name:element local name
    namespaceURI:namespace URI or NULL
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterStartCDATA

    int	xmlTextWriterStartCDATA		(xmlTextWriterPtr writer)
    +

    Start an xml CDATA section.

    +
    writer:the xmlTextWriterPtr
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterStartComment

    int	xmlTextWriterStartComment	(xmlTextWriterPtr writer)
    +

    Start an xml comment.

    +
    writer:the xmlTextWriterPtr
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterStartDTD

    int	xmlTextWriterStartDTD		(xmlTextWriterPtr writer, 
    const xmlChar * name,
    const xmlChar * pubid,
    const xmlChar * sysid)
    +

    Start an xml DTD.

    +
    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
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterStartDTDAttlist

    int	xmlTextWriterStartDTDAttlist	(xmlTextWriterPtr writer, 
    const xmlChar * name)
    +

    Start an xml DTD ATTLIST.

    +
    writer:the xmlTextWriterPtr
    name:the name of the DTD ATTLIST
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterStartDTDElement

    int	xmlTextWriterStartDTDElement	(xmlTextWriterPtr writer, 
    const xmlChar * name)
    +

    Start an xml DTD element.

    +
    writer:the xmlTextWriterPtr
    name:the name of the DTD element
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterStartDTDEntity

    int	xmlTextWriterStartDTDEntity	(xmlTextWriterPtr writer, 
    int pe,
    const xmlChar * name)
    +

    Start an xml DTD ATTLIST.

    +
    writer:the xmlTextWriterPtr
    pe:TRUE if this is a parameter entity, FALSE if not
    name:the name of the DTD ATTLIST
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterStartDocument

    int	xmlTextWriterStartDocument	(xmlTextWriterPtr writer, 
    const char * version,
    const char * encoding,
    const char * standalone)
    +

    Start a new xml document

    +
    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
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterStartElement

    int	xmlTextWriterStartElement	(xmlTextWriterPtr writer, 
    const xmlChar * name)
    +

    Start an xml element.

    +
    writer:the xmlTextWriterPtr
    name:element name
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterStartElementNS

    int	xmlTextWriterStartElementNS	(xmlTextWriterPtr writer, 
    const xmlChar * prefix,
    const xmlChar * name,
    const xmlChar * namespaceURI)
    +

    Start an xml element with namespace support.

    +
    writer:the xmlTextWriterPtr
    prefix:namespace prefix or NULL
    name:element local name
    namespaceURI:namespace URI or NULL
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterStartPI

    int	xmlTextWriterStartPI		(xmlTextWriterPtr writer, 
    const xmlChar * target)
    +

    Start an xml PI.

    +
    writer:the xmlTextWriterPtr
    target:PI target
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterWriteAttribute

    int	xmlTextWriterWriteAttribute	(xmlTextWriterPtr writer, 
    const xmlChar * name,
    const xmlChar * content)
    +

    Write an xml attribute.

    +
    writer:the xmlTextWriterPtr
    name:attribute name
    content:attribute content
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterWriteAttributeNS

    int	xmlTextWriterWriteAttributeNS	(xmlTextWriterPtr writer, 
    const xmlChar * prefix,
    const xmlChar * name,
    const xmlChar * namespaceURI,
    const xmlChar * content)
    +

    Write an xml attribute.

    +
    writer:the xmlTextWriterPtr
    prefix:namespace prefix
    name:attribute local name
    namespaceURI:namespace URI
    content:attribute content
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterWriteBase64

    int	xmlTextWriterWriteBase64	(xmlTextWriterPtr writer, 
    const char * data,
    int start,
    int len)
    +

    Write an base64 encoded xml text.

    +
    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
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterWriteBinHex

    int	xmlTextWriterWriteBinHex	(xmlTextWriterPtr writer, 
    const char * data,
    int start,
    int len)
    +

    Write a BinHex encoded xml text.

    +
    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
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterWriteCDATA

    int	xmlTextWriterWriteCDATA		(xmlTextWriterPtr writer, 
    const xmlChar * content)
    +

    Write an xml CDATA.

    +
    writer:the xmlTextWriterPtr
    content:CDATA content
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterWriteComment

    int	xmlTextWriterWriteComment	(xmlTextWriterPtr writer, 
    const xmlChar * content)
    +

    Write an xml comment.

    +
    writer:the xmlTextWriterPtr
    content:comment string
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterWriteDTD

    int	xmlTextWriterWriteDTD		(xmlTextWriterPtr writer, 
    const xmlChar * name,
    const xmlChar * pubid,
    const xmlChar * sysid,
    const xmlChar * subset)
    +

    Write a DTD.

    +
    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
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterWriteDTDAttlist

    int	xmlTextWriterWriteDTDAttlist	(xmlTextWriterPtr writer, 
    const xmlChar * name,
    const xmlChar * content)
    +

    Write a DTD ATTLIST.

    +
    writer:the xmlTextWriterPtr
    name:the name of the DTD ATTLIST
    content:content of the ATTLIST
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterWriteDTDElement

    int	xmlTextWriterWriteDTDElement	(xmlTextWriterPtr writer, 
    const xmlChar * name,
    const xmlChar * content)
    +

    Write a DTD element.

    +
    writer:the xmlTextWriterPtr
    name:the name of the DTD element
    content:content of the element
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterWriteDTDEntity

    int	xmlTextWriterWriteDTDEntity	(xmlTextWriterPtr writer, 
    int pe,
    const xmlChar * name,
    const xmlChar * pubid,
    const xmlChar * sysid,
    const xmlChar * ndataid,
    const xmlChar * content)
    +

    Write a DTD entity.

    +
    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
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterWriteDTDExternalEntity

    int	xmlTextWriterWriteDTDExternalEntity	(xmlTextWriterPtr writer, 
    int pe,
    const xmlChar * name,
    const xmlChar * pubid,
    const xmlChar * sysid,
    const xmlChar * ndataid)
    +

    Write a DTD external entity. The entity must have been started with xmlTextWriterStartDTDEntity

    +
    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.
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterWriteDTDExternalEntityContents

    int	xmlTextWriterWriteDTDExternalEntityContents	(xmlTextWriterPtr writer, 
    const xmlChar * pubid,
    const xmlChar * sysid,
    const xmlChar * ndataid)
    +

    Write the contents of a DTD external entity.

    +
    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.
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterWriteDTDInternalEntity

    int	xmlTextWriterWriteDTDInternalEntity	(xmlTextWriterPtr writer, 
    int pe,
    const xmlChar * name,
    const xmlChar * content)
    +

    Write a DTD internal entity.

    +
    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
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterWriteDTDNotation

    int	xmlTextWriterWriteDTDNotation	(xmlTextWriterPtr writer, 
    const xmlChar * name,
    const xmlChar * pubid,
    const xmlChar * sysid)
    +

    Write a DTD entity.

    +
    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
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterWriteElement

    int	xmlTextWriterWriteElement	(xmlTextWriterPtr writer, 
    const xmlChar * name,
    const xmlChar * content)
    +

    Write an xml element.

    +
    writer:the xmlTextWriterPtr
    name:element name
    content:element content
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterWriteElementNS

    int	xmlTextWriterWriteElementNS	(xmlTextWriterPtr writer, 
    const xmlChar * prefix,
    const xmlChar * name,
    const xmlChar * namespaceURI,
    const xmlChar * content)
    +

    Write an xml element with namespace support.

    +
    writer:the xmlTextWriterPtr
    prefix:namespace prefix
    name:element local name
    namespaceURI:namespace URI
    content:element content
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterWriteFormatAttribute

    int	xmlTextWriterWriteFormatAttribute	(xmlTextWriterPtr writer, 
    const xmlChar * name,
    const char * format,
    ... ...)
    +

    Write a formatted xml attribute.

    +
    writer:the xmlTextWriterPtr
    name:attribute name
    format:format string (see printf)
    ...:extra parameters for the format
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterWriteFormatAttributeNS

    int	xmlTextWriterWriteFormatAttributeNS	(xmlTextWriterPtr writer, 
    const xmlChar * prefix,
    const xmlChar * name,
    const xmlChar * namespaceURI,
    const char * format,
    ... ...)
    +

    Write a formatted xml attribute.with namespace support

    +
    writer:the xmlTextWriterPtr
    prefix:namespace prefix
    name:attribute local name
    namespaceURI:namespace URI
    format:format string (see printf)
    ...:extra parameters for the format
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterWriteFormatCDATA

    int	xmlTextWriterWriteFormatCDATA	(xmlTextWriterPtr writer, 
    const char * format,
    ... ...)
    +

    Write a formatted xml CDATA.

    +
    writer:the xmlTextWriterPtr
    format:format string (see printf)
    ...:extra parameters for the format
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterWriteFormatComment

    int	xmlTextWriterWriteFormatComment	(xmlTextWriterPtr writer, 
    const char * format,
    ... ...)
    +

    Write an xml comment.

    +
    writer:the xmlTextWriterPtr
    format:format string (see printf)
    ...:extra parameters for the format
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterWriteFormatDTD

    int	xmlTextWriterWriteFormatDTD	(xmlTextWriterPtr writer, 
    const xmlChar * name,
    const xmlChar * pubid,
    const xmlChar * sysid,
    const char * format,
    ... ...)
    +

    Write a DTD with a formatted markup declarations part.

    +
    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
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterWriteFormatDTDAttlist

    int	xmlTextWriterWriteFormatDTDAttlist	(xmlTextWriterPtr writer, 
    const xmlChar * name,
    const char * format,
    ... ...)
    +

    Write a formatted DTD ATTLIST.

    +
    writer:the xmlTextWriterPtr
    name:the name of the DTD ATTLIST
    format:format string (see printf)
    ...:extra parameters for the format
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterWriteFormatDTDElement

    int	xmlTextWriterWriteFormatDTDElement	(xmlTextWriterPtr writer, 
    const xmlChar * name,
    const char * format,
    ... ...)
    +

    Write a formatted DTD element.

    +
    writer:the xmlTextWriterPtr
    name:the name of the DTD element
    format:format string (see printf)
    ...:extra parameters for the format
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterWriteFormatDTDInternalEntity

    int	xmlTextWriterWriteFormatDTDInternalEntity	(xmlTextWriterPtr writer, 
    int pe,
    const xmlChar * name,
    const char * format,
    ... ...)
    +

    Write a formatted DTD internal entity.

    +
    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
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterWriteFormatElement

    int	xmlTextWriterWriteFormatElement	(xmlTextWriterPtr writer, 
    const xmlChar * name,
    const char * format,
    ... ...)
    +

    Write a formatted xml element.

    +
    writer:the xmlTextWriterPtr
    name:element name
    format:format string (see printf)
    ...:extra parameters for the format
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterWriteFormatElementNS

    int	xmlTextWriterWriteFormatElementNS	(xmlTextWriterPtr writer, 
    const xmlChar * prefix,
    const xmlChar * name,
    const xmlChar * namespaceURI,
    const char * format,
    ... ...)
    +

    Write a formatted xml element with namespace support.

    +
    writer:the xmlTextWriterPtr
    prefix:namespace prefix
    name:element local name
    namespaceURI:namespace URI
    format:format string (see printf)
    ...:extra parameters for the format
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterWriteFormatPI

    int	xmlTextWriterWriteFormatPI	(xmlTextWriterPtr writer, 
    const xmlChar * target,
    const char * format,
    ... ...)
    +

    Write a formatted PI.

    +
    writer:the xmlTextWriterPtr
    target:PI target
    format:format string (see printf)
    ...:extra parameters for the format
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterWriteFormatRaw

    int	xmlTextWriterWriteFormatRaw	(xmlTextWriterPtr writer, 
    const char * format,
    ... ...)
    +

    Write a formatted raw xml text.

    +
    writer:the xmlTextWriterPtr
    format:format string (see printf)
    ...:extra parameters for the format
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterWriteFormatString

    int	xmlTextWriterWriteFormatString	(xmlTextWriterPtr writer, 
    const char * format,
    ... ...)
    +

    Write a formatted xml text.

    +
    writer:the xmlTextWriterPtr
    format:format string (see printf)
    ...:extra parameters for the format
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterWritePI

    int	xmlTextWriterWritePI		(xmlTextWriterPtr writer, 
    const xmlChar * target,
    const xmlChar * content)
    +

    Write an xml PI.

    +
    writer:the xmlTextWriterPtr
    target:PI target
    content:PI content
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterWriteRaw

    int	xmlTextWriterWriteRaw		(xmlTextWriterPtr writer, 
    const xmlChar * content)
    +

    Write a raw xml text.

    +
    writer:the xmlTextWriterPtr
    content:text string
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterWriteRawLen

    int	xmlTextWriterWriteRawLen	(xmlTextWriterPtr writer, 
    const xmlChar * content,
    int len)
    +

    Write an xml text. TODO: what about entities and special chars??

    +
    writer:the xmlTextWriterPtr
    content:text string
    len:length of the text string
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterWriteString

    int	xmlTextWriterWriteString	(xmlTextWriterPtr writer, 
    const xmlChar * content)
    +

    Write an xml text.

    +
    writer:the xmlTextWriterPtr
    content:text string
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterWriteVFormatAttribute

    int	xmlTextWriterWriteVFormatAttribute	(xmlTextWriterPtr writer, 
    const xmlChar * name,
    const char * format,
    va_list argptr)
    +

    Write a formatted xml attribute.

    +
    writer:the xmlTextWriterPtr
    name:attribute name
    format:format string (see printf)
    argptr:pointer to the first member of the variable argument list.
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterWriteVFormatAttributeNS

    int	xmlTextWriterWriteVFormatAttributeNS	(xmlTextWriterPtr writer, 
    const xmlChar * prefix,
    const xmlChar * name,
    const xmlChar * namespaceURI,
    const char * format,
    va_list argptr)
    +

    Write a formatted xml attribute.with namespace support

    +
    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.
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterWriteVFormatCDATA

    int	xmlTextWriterWriteVFormatCDATA	(xmlTextWriterPtr writer, 
    const char * format,
    va_list argptr)
    +

    Write a formatted xml CDATA.

    +
    writer:the xmlTextWriterPtr
    format:format string (see printf)
    argptr:pointer to the first member of the variable argument list.
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterWriteVFormatComment

    int	xmlTextWriterWriteVFormatComment	(xmlTextWriterPtr writer, 
    const char * format,
    va_list argptr)
    +

    Write an xml comment.

    +
    writer:the xmlTextWriterPtr
    format:format string (see printf)
    argptr:pointer to the first member of the variable argument list.
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterWriteVFormatDTD

    int	xmlTextWriterWriteVFormatDTD	(xmlTextWriterPtr writer, 
    const xmlChar * name,
    const xmlChar * pubid,
    const xmlChar * sysid,
    const char * format,
    va_list argptr)
    +

    Write a DTD with a formatted markup declarations part.

    +
    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.
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterWriteVFormatDTDAttlist

    int	xmlTextWriterWriteVFormatDTDAttlist	(xmlTextWriterPtr writer, 
    const xmlChar * name,
    const char * format,
    va_list argptr)
    +

    Write a formatted DTD ATTLIST.

    +
    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.
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterWriteVFormatDTDElement

    int	xmlTextWriterWriteVFormatDTDElement	(xmlTextWriterPtr writer, 
    const xmlChar * name,
    const char * format,
    va_list argptr)
    +

    Write a formatted DTD element.

    +
    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.
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterWriteVFormatDTDInternalEntity

    int	xmlTextWriterWriteVFormatDTDInternalEntity	(xmlTextWriterPtr writer, 
    int pe,
    const xmlChar * name,
    const char * format,
    va_list argptr)
    +

    Write a formatted DTD internal entity.

    +
    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.
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterWriteVFormatElement

    int	xmlTextWriterWriteVFormatElement	(xmlTextWriterPtr writer, 
    const xmlChar * name,
    const char * format,
    va_list argptr)
    +

    Write a formatted xml element.

    +
    writer:the xmlTextWriterPtr
    name:element name
    format:format string (see printf)
    argptr:pointer to the first member of the variable argument list.
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterWriteVFormatElementNS

    int	xmlTextWriterWriteVFormatElementNS	(xmlTextWriterPtr writer, 
    const xmlChar * prefix,
    const xmlChar * name,
    const xmlChar * namespaceURI,
    const char * format,
    va_list argptr)
    +

    Write a formatted xml element with namespace support.

    +
    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.
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterWriteVFormatPI

    int	xmlTextWriterWriteVFormatPI	(xmlTextWriterPtr writer, 
    const xmlChar * target,
    const char * format,
    va_list argptr)
    +

    Write a formatted xml PI.

    +
    writer:the xmlTextWriterPtr
    target:PI target
    format:format string (see printf)
    argptr:pointer to the first member of the variable argument list.
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterWriteVFormatRaw

    int	xmlTextWriterWriteVFormatRaw	(xmlTextWriterPtr writer, 
    const char * format,
    va_list argptr)
    +

    Write a formatted raw xml text.

    +
    writer:the xmlTextWriterPtr
    format:format string (see printf)
    argptr:pointer to the first member of the variable argument list.
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Function: xmlTextWriterWriteVFormatString

    int	xmlTextWriterWriteVFormatString	(xmlTextWriterPtr writer, 
    const char * format,
    va_list argptr)
    +

    Write a formatted xml text.

    +
    writer:the xmlTextWriterPtr
    format:format string (see printf)
    argptr:pointer to the first member of the variable argument list.
    Returns:the bytes written (may be 0 because of buffering) or -1 in case of error

    Daniel Veillard

    diff --git a/doc/html/libxml-xpath.html b/doc/html/libxml-xpath.html new file mode 100644 index 0000000..e47e600 --- /dev/null +++ b/doc/html/libxml-xpath.html @@ -0,0 +1,316 @@ + + +Module xpath from libxml2
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    Module xpath from libxml2

    API Menu
    API Indexes
    Related links

    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

    Table of Contents

    #define XML_XPATH_CHECKNS
    #define XML_XPATH_NOVAR
    #define xmlXPathNodeSetGetLength
    #define xmlXPathNodeSetIsEmpty
    #define xmlXPathNodeSetItem
    Structure xmlNodeSet
    struct _xmlNodeSet +
    Typedef xmlNodeSet * xmlNodeSetPtr
    +
    Structure xmlXPathAxis
    struct _xmlXPathAxis +
    Typedef xmlXPathAxis * xmlXPathAxisPtr
    +
    Structure xmlXPathCompExpr
    struct _xmlXPathCompExpr +The content of this structure is not made public by the API. +
    Typedef xmlXPathCompExpr * xmlXPathCompExprPtr
    +
    Structure xmlXPathContext
    struct _xmlXPathContext +
    Typedef xmlXPathContext * xmlXPathContextPtr
    +
    Enum xmlXPathError
    +
    Typedef xmlXPathFunct * xmlXPathFuncPtr
    +
    Structure xmlXPathFunct
    struct _xmlXPathFunct +
    Structure xmlXPathObject
    struct _xmlXPathObject +
    Typedef xmlXPathObject * xmlXPathObjectPtr
    +
    Enum xmlXPathObjectType
    +
    Structure xmlXPathParserContext
    struct _xmlXPathParserContext +
    Typedef xmlXPathParserContext * xmlXPathParserContextPtr
    +
    Structure xmlXPathType
    struct _xmlXPathType +
    Typedef xmlXPathType * xmlXPathTypePtr
    +
    Structure xmlXPathVariable
    struct _xmlXPathVariable +
    Typedef xmlXPathVariable * xmlXPathVariablePtr
    +
    Function type: xmlXPathAxisFunc
    +xmlXPathObjectPtr	xmlXPathAxisFunc	(xmlXPathParserContextPtr ctxt, 
    xmlXPathObjectPtr cur) +
    +
    double	xmlXPathCastBooleanToNumber	(int val)
    +
    xmlChar *	xmlXPathCastBooleanToString	(int val)
    +
    int	xmlXPathCastNodeSetToBoolean	(xmlNodeSetPtr ns)
    +
    double	xmlXPathCastNodeSetToNumber	(xmlNodeSetPtr ns)
    +
    xmlChar *	xmlXPathCastNodeSetToString	(xmlNodeSetPtr ns)
    +
    double	xmlXPathCastNodeToNumber	(xmlNodePtr node)
    +
    xmlChar *	xmlXPathCastNodeToString	(xmlNodePtr node)
    +
    int	xmlXPathCastNumberToBoolean	(double val)
    +
    xmlChar *	xmlXPathCastNumberToString	(double val)
    +
    int	xmlXPathCastStringToBoolean	(const xmlChar * val)
    +
    double	xmlXPathCastStringToNumber	(const xmlChar * val)
    +
    int	xmlXPathCastToBoolean		(xmlXPathObjectPtr val)
    +
    double	xmlXPathCastToNumber		(xmlXPathObjectPtr val)
    +
    xmlChar *	xmlXPathCastToString	(xmlXPathObjectPtr val)
    +
    int	xmlXPathCmpNodes		(xmlNodePtr node1, 
    xmlNodePtr node2)
    +
    xmlXPathCompExprPtr	xmlXPathCompile	(const xmlChar * str)
    +
    xmlXPathObjectPtr	xmlXPathCompiledEval	(xmlXPathCompExprPtr comp, 
    xmlXPathContextPtr ctx)
    +
    int	xmlXPathCompiledEvalToBoolean	(xmlXPathCompExprPtr comp, 
    xmlXPathContextPtr ctxt)
    +
    int	xmlXPathContextSetCache		(xmlXPathContextPtr ctxt, 
    int active,
    int value,
    int options)
    +
    xmlXPathObjectPtr	xmlXPathConvertBoolean	(xmlXPathObjectPtr val)
    +
    Function type: xmlXPathConvertFunc
    +int	xmlXPathConvertFunc		(xmlXPathObjectPtr obj, 
    int type) +
    +
    xmlXPathObjectPtr	xmlXPathConvertNumber	(xmlXPathObjectPtr val)
    +
    xmlXPathObjectPtr	xmlXPathConvertString	(xmlXPathObjectPtr val)
    +
    xmlXPathCompExprPtr	xmlXPathCtxtCompile	(xmlXPathContextPtr ctxt, 
    const xmlChar * str)
    +
    xmlXPathObjectPtr	xmlXPathEval	(const xmlChar * str, 
    xmlXPathContextPtr ctx)
    +
    xmlXPathObjectPtr	xmlXPathEvalExpression	(const xmlChar * str, 
    xmlXPathContextPtr ctxt)
    +
    Function type: xmlXPathEvalFunc
    +void	xmlXPathEvalFunc		(xmlXPathParserContextPtr ctxt, 
    int nargs) +
    +
    int	xmlXPathEvalPredicate		(xmlXPathContextPtr ctxt, 
    xmlXPathObjectPtr res)
    +
    void	xmlXPathFreeCompExpr		(xmlXPathCompExprPtr comp)
    +
    void	xmlXPathFreeContext		(xmlXPathContextPtr ctxt)
    +
    void	xmlXPathFreeNodeSet		(xmlNodeSetPtr obj)
    +
    void	xmlXPathFreeNodeSetList		(xmlXPathObjectPtr obj)
    +
    void	xmlXPathFreeObject		(xmlXPathObjectPtr obj)
    +
    Function type: xmlXPathFuncLookupFunc
    +xmlXPathFunction	xmlXPathFuncLookupFunc	(void * ctxt, 
    const xmlChar * name,
    const xmlChar * ns_uri) +
    +
    Function type: xmlXPathFunction
    +void	xmlXPathFunction		(xmlXPathParserContextPtr ctxt, 
    int nargs) +
    +
    void	xmlXPathInit			(void)
    +
    int	xmlXPathIsInf			(double val)
    +
    int	xmlXPathIsNaN			(double val)
    +
    xmlXPathContextPtr	xmlXPathNewContext	(xmlDocPtr doc)
    +
    xmlXPathObjectPtr	xmlXPathNodeEval	(xmlNodePtr node, 
    const xmlChar * str,
    xmlXPathContextPtr ctx)
    +
    xmlNodeSetPtr	xmlXPathNodeSetCreate	(xmlNodePtr val)
    +
    xmlXPathObjectPtr	xmlXPathObjectCopy	(xmlXPathObjectPtr val)
    +
    long	xmlXPathOrderDocElems		(xmlDocPtr doc)
    +
    int	xmlXPathSetContextNode		(xmlNodePtr node, 
    xmlXPathContextPtr ctx)
    +
    Function type: xmlXPathVariableLookupFunc
    +xmlXPathObjectPtr	xmlXPathVariableLookupFunc	(void * ctxt, 
    const xmlChar * name,
    const xmlChar * ns_uri) +
    +

    Description

    +

    Macro: XML_XPATH_CHECKNS

    #define XML_XPATH_CHECKNS

    check namespaces at compilation

    +

    Macro: XML_XPATH_NOVAR

    #define XML_XPATH_NOVAR

    forbid variables in expression

    +

    Macro: xmlXPathNodeSetGetLength

    #define xmlXPathNodeSetGetLength

    Implement a functionality similar to the DOM NodeList.length. Returns the number of nodes in the node-set.

    +

    Macro: xmlXPathNodeSetIsEmpty

    #define xmlXPathNodeSetIsEmpty

    Checks whether @ns is empty or not. Returns %TRUE if @ns is an empty node-set.

    +

    Macro: xmlXPathNodeSetItem

    #define xmlXPathNodeSetItem

    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)

    +

    Structure xmlNodeSet

    Structure xmlNodeSet
    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 @ +}

    Structure xmlXPathAxis

    Structure xmlXPathAxis
    struct _xmlXPathAxis { + const xmlChar * name : the axis name + xmlXPathAxisFunc func : the search function +}

    Structure xmlXPathCompExpr

    Structure xmlXPathCompExpr
    struct _xmlXPathCompExpr { +The content of this structure is not made public by the API. +}

    Structure xmlXPathContext

    Structure xmlXPathContext
    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 nod + 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 + int xptr : is this an XPointer context? + xmlNodePtr here : for here() + xmlNodePtr origin : for origin() the set of namespace decla + xmlHashTablePtr nsHash : The namespaces hash table + xmlXPathVariableLookupFunc varLookupFunc : variable lookup func + void * varLookupData : variable lookup data Possibility to lin + void * extra : needed for XSLT The function name and U + const xmlChar * function + const xmlChar * functionURI : function lookup function and data + xmlXPathFuncLookupFunc funcLookupFunc : function lookup func + void * funcLookupData : function lookup data temporary namespac + xmlNsPtr * tmpNsList : Array of namespaces + int tmpNsNr : number of namespaces in scope error rep + 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 dictionary + xmlDictPtr dict : dictionary if any + int flags : flags to control compilation Cache for + void * cache +}

    Enum xmlXPathError

    Enum xmlXPathError {
    +    XPATH_EXPRESSION_OK = 0
    +    XPATH_NUMBER_ERROR = 1
    +    XPATH_UNFINISHED_LITERAL_ERROR = 2
    +    XPATH_START_LITERAL_ERROR = 3
    +    XPATH_VARIABLE_REF_ERROR = 4
    +    XPATH_UNDEF_VARIABLE_ERROR = 5
    +    XPATH_INVALID_PREDICATE_ERROR = 6
    +    XPATH_EXPR_ERROR = 7
    +    XPATH_UNCLOSED_ERROR = 8
    +    XPATH_UNKNOWN_FUNC_ERROR = 9
    +    XPATH_INVALID_OPERAND = 10
    +    XPATH_INVALID_TYPE = 11
    +    XPATH_INVALID_ARITY = 12
    +    XPATH_INVALID_CTXT_SIZE = 13
    +    XPATH_INVALID_CTXT_POSITION = 14
    +    XPATH_MEMORY_ERROR = 15
    +    XPTR_SYNTAX_ERROR = 16
    +    XPTR_RESOURCE_ERROR = 17
    +    XPTR_SUB_RESOURCE_ERROR = 18
    +    XPATH_UNDEF_PREFIX_ERROR = 19
    +    XPATH_ENCODING_ERROR = 20
    +    XPATH_INVALID_CHAR_ERROR = 21
    +    XPATH_INVALID_CTXT = 22
    +    XPATH_STACK_ERROR = 23
    +    XPATH_FORBID_VARIABLE_ERROR = 24
    +}
    +

    Structure xmlXPathFunct

    Structure xmlXPathFunct
    struct _xmlXPathFunct { + const xmlChar * name : the function name + xmlXPathEvalFunc func : the evaluation function +}

    Structure xmlXPathObject

    Structure xmlXPathObject
    struct _xmlXPathObject { + xmlXPathObjectType type + xmlNodeSetPtr nodesetval + int boolval + double floatval + xmlChar * stringval + void * user + int index + void * user2 + int index2 +}

    Enum xmlXPathObjectType

    Enum xmlXPathObjectType {
    +    XPATH_UNDEFINED = 0
    +    XPATH_NODESET = 1
    +    XPATH_BOOLEAN = 2
    +    XPATH_NUMBER = 3
    +    XPATH_STRING = 4
    +    XPATH_POINT = 5
    +    XPATH_RANGE = 6
    +    XPATH_LOCATIONSET = 7
    +    XPATH_USERS = 8
    +    XPATH_XSLT_TREE = 9 : An XSLT value tree, non modifiable
    +}
    +

    Structure xmlXPathParserContext

    Structure xmlXPathParserContext
    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 + int valueFrame : used to limit Pop on the stack +}

    Structure xmlXPathType

    Structure xmlXPathType
    struct _xmlXPathType { + const xmlChar * name : the type name + xmlXPathConvertFunc func : the conversion function +}

    Structure xmlXPathVariable

    Structure xmlXPathVariable
    struct _xmlXPathVariable { + const xmlChar * name : the variable name + xmlXPathObjectPtr value : the value +}

    Function type: xmlXPathAxisFunc

    Function type: xmlXPathAxisFunc
    +xmlXPathObjectPtr	xmlXPathAxisFunc	(xmlXPathParserContextPtr ctxt, 
    xmlXPathObjectPtr cur) +

    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.

    ctxt:the XPath interpreter context
    cur:the previous node being explored on that axis
    Returns:the next node in that axis or NULL if at the end of the axis.

    +

    Function: xmlXPathCastBooleanToNumber

    double	xmlXPathCastBooleanToNumber	(int val)
    +

    Converts a boolean to its number value

    +
    val:a boolean
    Returns:the number value

    Function: xmlXPathCastBooleanToString

    xmlChar *	xmlXPathCastBooleanToString	(int val)
    +

    Converts a boolean to its string value.

    +
    val:a boolean
    Returns:a newly allocated string.

    Function: xmlXPathCastNodeSetToBoolean

    int	xmlXPathCastNodeSetToBoolean	(xmlNodeSetPtr ns)
    +

    Converts a node-set to its boolean value

    +
    ns:a node-set
    Returns:the boolean value

    Function: xmlXPathCastNodeSetToNumber

    double	xmlXPathCastNodeSetToNumber	(xmlNodeSetPtr ns)
    +

    Converts a node-set to its number value

    +
    ns:a node-set
    Returns:the number value

    Function: xmlXPathCastNodeSetToString

    xmlChar *	xmlXPathCastNodeSetToString	(xmlNodeSetPtr ns)
    +

    Converts a node-set to its string value.

    +
    ns:a node-set
    Returns:a newly allocated string.

    Function: xmlXPathCastNodeToNumber

    double	xmlXPathCastNodeToNumber	(xmlNodePtr node)
    +

    Converts a node to its number value

    +
    node:a node
    Returns:the number value

    Function: xmlXPathCastNodeToString

    xmlChar *	xmlXPathCastNodeToString	(xmlNodePtr node)
    +

    Converts a node to its string value.

    +
    node:a node
    Returns:a newly allocated string.

    Function: xmlXPathCastNumberToBoolean

    int	xmlXPathCastNumberToBoolean	(double val)
    +

    Converts a number to its boolean value

    +
    val:a number
    Returns:the boolean value

    Function: xmlXPathCastNumberToString

    xmlChar *	xmlXPathCastNumberToString	(double val)
    +

    Converts a number to its string value.

    +
    val:a number
    Returns:a newly allocated string.

    Function: xmlXPathCastStringToBoolean

    int	xmlXPathCastStringToBoolean	(const xmlChar * val)
    +

    Converts a string to its boolean value

    +
    val:a string
    Returns:the boolean value

    Function: xmlXPathCastStringToNumber

    double	xmlXPathCastStringToNumber	(const xmlChar * val)
    +

    Converts a string to its number value

    +
    val:a string
    Returns:the number value

    Function: xmlXPathCastToBoolean

    int	xmlXPathCastToBoolean		(xmlXPathObjectPtr val)
    +

    Converts an XPath object to its boolean value

    +
    val:an XPath object
    Returns:the boolean value

    Function: xmlXPathCastToNumber

    double	xmlXPathCastToNumber		(xmlXPathObjectPtr val)
    +

    Converts an XPath object to its number value

    +
    val:an XPath object
    Returns:the number value

    Function: xmlXPathCastToString

    xmlChar *	xmlXPathCastToString	(xmlXPathObjectPtr val)
    +

    Converts an existing object to its string() equivalent

    +
    val:an XPath object
    Returns:the allocated string value of the object, NULL in case of error. It's up to the caller to free the string memory with xmlFree().

    Function: xmlXPathCmpNodes

    int	xmlXPathCmpNodes		(xmlNodePtr node1, 
    xmlNodePtr node2)
    +

    Compare two nodes w.r.t document order

    +
    node1:the first node
    node2:the second node
    Returns:-2 in case of error 1 if first point < second point, 0 if it's the same node, -1 otherwise

    Function: xmlXPathCompile

    xmlXPathCompExprPtr	xmlXPathCompile	(const xmlChar * str)
    +

    Compile an XPath expression

    +
    str:the XPath expression
    Returns:the xmlXPathCompExprPtr resulting from the compilation or NULL. the caller has to free the object.

    Function: xmlXPathCompiledEval

    xmlXPathObjectPtr	xmlXPathCompiledEval	(xmlXPathCompExprPtr comp, 
    xmlXPathContextPtr ctx)
    +

    Evaluate the Precompiled XPath expression in the given context.

    +
    comp:the compiled XPath expression
    ctx:the XPath context
    Returns:the xmlXPathObjectPtr resulting from the evaluation or NULL. the caller has to free the object.

    Function: xmlXPathCompiledEvalToBoolean

    int	xmlXPathCompiledEvalToBoolean	(xmlXPathCompExprPtr comp, 
    xmlXPathContextPtr ctxt)
    +

    Applies the XPath boolean() function on the result of the given compiled expression.

    +
    comp:the compiled XPath expression
    ctxt:the XPath context
    Returns:1 if the expression evaluated to true, 0 if to false and -1 in API and internal errors.

    Function: xmlXPathContextSetCache

    int	xmlXPathContextSetCache		(xmlXPathContextPtr ctxt, 
    int active,
    int value,
    int options)
    +

    Creates/frees an object cache on the XPath context. If activates XPath objects (xmlXPathObject) will be cached internally to be reused. @options: 0: This will set the XPath object caching: @value: This will set the maximum number of XPath objects to be cached per slot There are 5 slots for: node-set, string, number, boolean, and misc objects. Use <0 for the default number (100). Other values for @options have currently no effect.

    +
    ctxt:the XPath context
    active:enables/disables (creates/frees) the cache
    value:a value with semantics dependant on @options
    options:options (currently only the value 0 is used)
    Returns:0 if the setting succeeded, and -1 on API or internal errors.

    Function: xmlXPathConvertBoolean

    xmlXPathObjectPtr	xmlXPathConvertBoolean	(xmlXPathObjectPtr val)
    +

    Converts an existing object to its boolean() equivalent

    +
    val:an XPath object
    Returns:the new object, the old one is freed (or the operation is done directly on @val)

    Function type: xmlXPathConvertFunc

    Function type: xmlXPathConvertFunc
    +int	xmlXPathConvertFunc		(xmlXPathObjectPtr obj, 
    int type) +

    A conversion function is associated to a type and used to cast the new type to primitive values.

    obj:an XPath object
    type:the number of the target type
    Returns:-1 in case of error, 0 otherwise

    +

    Function: xmlXPathConvertNumber

    xmlXPathObjectPtr	xmlXPathConvertNumber	(xmlXPathObjectPtr val)
    +

    Converts an existing object to its number() equivalent

    +
    val:an XPath object
    Returns:the new object, the old one is freed (or the operation is done directly on @val)

    Function: xmlXPathConvertString

    xmlXPathObjectPtr	xmlXPathConvertString	(xmlXPathObjectPtr val)
    +

    Converts an existing object to its string() equivalent

    +
    val:an XPath object
    Returns:the new object, the old one is freed (or the operation is done directly on @val)

    Function: xmlXPathCtxtCompile

    xmlXPathCompExprPtr	xmlXPathCtxtCompile	(xmlXPathContextPtr ctxt, 
    const xmlChar * str)
    +

    Compile an XPath expression

    +
    ctxt:an XPath context
    str:the XPath expression
    Returns:the xmlXPathCompExprPtr resulting from the compilation or NULL. the caller has to free the object.

    Function: xmlXPathEval

    xmlXPathObjectPtr	xmlXPathEval	(const xmlChar * str, 
    xmlXPathContextPtr ctx)
    +

    Evaluate the XPath Location Path in the given context.

    +
    str:the XPath expression
    ctx:the XPath context
    Returns:the xmlXPathObjectPtr resulting from the evaluation or NULL. the caller has to free the object.

    Function: xmlXPathEvalExpression

    xmlXPathObjectPtr	xmlXPathEvalExpression	(const xmlChar * str, 
    xmlXPathContextPtr ctxt)
    +

    Evaluate the XPath expression in the given context.

    +
    str:the XPath expression
    ctxt:the XPath context
    Returns:the xmlXPathObjectPtr resulting from the evaluation or NULL. the caller has to free the object.

    Function type: xmlXPathEvalFunc

    Function type: xmlXPathEvalFunc
    +void	xmlXPathEvalFunc		(xmlXPathParserContextPtr ctxt, 
    int nargs) +

    An XPath evaluation function, the parameters are on the XPath context stack.

    ctxt:an XPath parser context
    nargs:the number of arguments passed to the function

    +

    Function: xmlXPathEvalPredicate

    int	xmlXPathEvalPredicate		(xmlXPathContextPtr ctxt, 
    xmlXPathObjectPtr res)
    +

    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.

    +
    ctxt:the XPath context
    res:the Predicate Expression evaluation result
    Returns:1 if predicate is true, 0 otherwise

    Function: xmlXPathFreeCompExpr

    void	xmlXPathFreeCompExpr		(xmlXPathCompExprPtr comp)
    +

    Free up the memory allocated by @comp

    +
    comp:an XPATH comp

    Function: xmlXPathFreeContext

    void	xmlXPathFreeContext		(xmlXPathContextPtr ctxt)
    +

    Free up an xmlXPathContext

    +
    ctxt:the context to free

    Function: xmlXPathFreeNodeSet

    void	xmlXPathFreeNodeSet		(xmlNodeSetPtr obj)
    +

    Free the NodeSet compound (not the actual nodes !).

    +
    obj:the xmlNodeSetPtr to free

    Function: xmlXPathFreeNodeSetList

    void	xmlXPathFreeNodeSetList		(xmlXPathObjectPtr obj)
    +

    Free up the xmlXPathObjectPtr @obj but don't deallocate the objects in the list contrary to xmlXPathFreeObject().

    +
    obj:an existing NodeSetList object

    Function: xmlXPathFreeObject

    void	xmlXPathFreeObject		(xmlXPathObjectPtr obj)
    +

    Free up an xmlXPathObjectPtr object.

    +
    obj:the object to free

    Function type: xmlXPathFuncLookupFunc

    Function type: xmlXPathFuncLookupFunc
    +xmlXPathFunction	xmlXPathFuncLookupFunc	(void * ctxt, 
    const xmlChar * name,
    const xmlChar * ns_uri) +

    Prototype for callbacks used to plug function lookup in the XPath engine.

    ctxt:an XPath context
    name:name of the function
    ns_uri:the namespace name hosting this function
    Returns:the XPath function or NULL if not found.

    +

    Function type: xmlXPathFunction

    Function type: xmlXPathFunction
    +void	xmlXPathFunction		(xmlXPathParserContextPtr ctxt, 
    int nargs) +

    An XPath function. The arguments (if any) are popped out from the context stack and the result is pushed on the stack.

    ctxt:the XPath interprestation context
    nargs:the number of arguments

    +

    Function: xmlXPathInit

    void	xmlXPathInit			(void)
    +

    Initialize the XPath environment

    +

    Function: xmlXPathIsInf

    int	xmlXPathIsInf			(double val)
    +

    Provides a portable isinf() function to detect whether a double is a +Infinite or -Infinite. Based on trio code http://sourceforge.net/projects/ctrio/

    +
    val:a double value
    Returns:1 vi the value is +Infinite, -1 if -Infinite, 0 otherwise

    Function: xmlXPathIsNaN

    int	xmlXPathIsNaN			(double val)
    +

    Provides a portable isnan() function to detect whether a double is a NotaNumber. Based on trio code http://sourceforge.net/projects/ctrio/

    +
    val:a double value
    Returns:1 if the value is a NaN, 0 otherwise

    Function: xmlXPathNewContext

    xmlXPathContextPtr	xmlXPathNewContext	(xmlDocPtr doc)
    +

    Create a new xmlXPathContext

    +
    doc:the XML document
    Returns:the xmlXPathContext just allocated. The caller will need to free it.

    Function: xmlXPathNodeEval

    xmlXPathObjectPtr	xmlXPathNodeEval	(xmlNodePtr node, 
    const xmlChar * str,
    xmlXPathContextPtr ctx)
    +

    Evaluate the XPath Location Path in the given context. The node 'node' is set as the context node. The context node is not restored.

    +
    node:the node to to use as the context node
    str:the XPath expression
    ctx:the XPath context
    Returns:the xmlXPathObjectPtr resulting from the evaluation or NULL. the caller has to free the object.

    Function: xmlXPathNodeSetCreate

    xmlNodeSetPtr	xmlXPathNodeSetCreate	(xmlNodePtr val)
    +

    Create a new xmlNodeSetPtr of type double and of value @val

    +
    val:an initial xmlNodePtr, or NULL
    Returns:the newly created object.

    Function: xmlXPathObjectCopy

    xmlXPathObjectPtr	xmlXPathObjectCopy	(xmlXPathObjectPtr val)
    +

    allocate a new copy of a given object

    +
    val:the original object
    Returns:the newly created object.

    Function: xmlXPathOrderDocElems

    long	xmlXPathOrderDocElems		(xmlDocPtr doc)
    +

    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.

    +
    doc:an input document
    Returns:the number of elements found in the document or -1 in case of error.

    Function: xmlXPathSetContextNode

    int	xmlXPathSetContextNode		(xmlNodePtr node, 
    xmlXPathContextPtr ctx)
    +

    Sets 'node' as the context node. The node must be in the same document as that associated with the context.

    +
    node:the node to to use as the context node
    ctx:the XPath context
    Returns:-1 in case of error or 0 if successful

    Function type: xmlXPathVariableLookupFunc

    Function type: xmlXPathVariableLookupFunc
    +xmlXPathObjectPtr	xmlXPathVariableLookupFunc	(void * ctxt, 
    const xmlChar * name,
    const xmlChar * ns_uri) +

    Prototype for callbacks used to plug variable lookup in the XPath engine.

    ctxt:an XPath context
    name:name of the variable
    ns_uri:the namespace name hosting this variable
    Returns:the XPath object value or NULL if not found.

    +

    Daniel Veillard

    diff --git a/doc/html/libxml-xpathInternals.html b/doc/html/libxml-xpathInternals.html new file mode 100644 index 0000000..f12d808 --- /dev/null +++ b/doc/html/libxml-xpathInternals.html @@ -0,0 +1,394 @@ + + +Module xpathInternals from libxml2
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    Module xpathInternals from libxml2

    API Menu
    API Indexes
    Related links

    internal interfaces for XML Path Language implementation used to build new modules on top of XPath like XPointer and XSLT

    Table of Contents

    #define CAST_TO_BOOLEAN
    #define CAST_TO_NUMBER
    #define CAST_TO_STRING
    #define CHECK_ARITY
    #define CHECK_ERROR
    #define CHECK_ERROR0
    #define CHECK_TYPE
    #define CHECK_TYPE0
    #define XP_ERROR
    #define XP_ERROR0
    #define xmlXPathCheckError
    #define xmlXPathEmptyNodeSet
    #define xmlXPathGetContextNode
    #define xmlXPathGetDocument
    #define xmlXPathGetError
    #define xmlXPathReturnBoolean
    #define xmlXPathReturnEmptyNodeSet
    #define xmlXPathReturnEmptyString
    #define xmlXPathReturnExternal
    #define xmlXPathReturnFalse
    #define xmlXPathReturnNodeSet
    #define xmlXPathReturnNumber
    #define xmlXPathReturnString
    #define xmlXPathReturnTrue
    #define xmlXPathSetArityError
    #define xmlXPathSetError
    #define xmlXPathSetTypeError
    #define xmlXPathStackIsExternal
    #define xmlXPathStackIsNodeSet
    xmlXPathObjectPtr	valuePop	(xmlXPathParserContextPtr ctxt)
    +
    int	valuePush			(xmlXPathParserContextPtr ctxt, 
    xmlXPathObjectPtr value)
    +
    void	xmlXPathAddValues		(xmlXPathParserContextPtr ctxt)
    +
    void	xmlXPathBooleanFunction		(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +
    void	xmlXPathCeilingFunction		(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +
    int	xmlXPathCompareValues		(xmlXPathParserContextPtr ctxt, 
    int inf,
    int strict)
    +
    void	xmlXPathConcatFunction		(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +
    void	xmlXPathContainsFunction	(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +
    void	xmlXPathCountFunction		(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +
    void	xmlXPathDebugDumpCompExpr	(FILE * output, 
    xmlXPathCompExprPtr comp,
    int depth)
    +
    void	xmlXPathDebugDumpObject		(FILE * output, 
    xmlXPathObjectPtr cur,
    int depth)
    +
    xmlNodeSetPtr	xmlXPathDifference	(xmlNodeSetPtr nodes1, 
    xmlNodeSetPtr nodes2)
    +
    xmlNodeSetPtr	xmlXPathDistinct	(xmlNodeSetPtr nodes)
    +
    xmlNodeSetPtr	xmlXPathDistinctSorted	(xmlNodeSetPtr nodes)
    +
    void	xmlXPathDivValues		(xmlXPathParserContextPtr ctxt)
    +
    int	xmlXPathEqualValues		(xmlXPathParserContextPtr ctxt)
    +
    void	xmlXPathErr			(xmlXPathParserContextPtr ctxt, 
    int error)
    +
    void	xmlXPathEvalExpr		(xmlXPathParserContextPtr ctxt)
    +
    int	xmlXPathEvaluatePredicateResult	(xmlXPathParserContextPtr ctxt, 
    xmlXPathObjectPtr res)
    +
    void	xmlXPathFalseFunction		(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +
    void	xmlXPathFloorFunction		(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +
    void	xmlXPathFreeParserContext	(xmlXPathParserContextPtr ctxt)
    +
    xmlXPathFunction	xmlXPathFunctionLookup	(xmlXPathContextPtr ctxt, 
    const xmlChar * name)
    +
    xmlXPathFunction	xmlXPathFunctionLookupNS	(xmlXPathContextPtr ctxt, 
    const xmlChar * name,
    const xmlChar * ns_uri)
    +
    int	xmlXPathHasSameNodes		(xmlNodeSetPtr nodes1, 
    xmlNodeSetPtr nodes2)
    +
    void	xmlXPathIdFunction		(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +
    xmlNodeSetPtr	xmlXPathIntersection	(xmlNodeSetPtr nodes1, 
    xmlNodeSetPtr nodes2)
    +
    int	xmlXPathIsNodeType		(const xmlChar * name)
    +
    void	xmlXPathLangFunction		(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +
    void	xmlXPathLastFunction		(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +
    xmlNodeSetPtr	xmlXPathLeading		(xmlNodeSetPtr nodes1, 
    xmlNodeSetPtr nodes2)
    +
    xmlNodeSetPtr	xmlXPathLeadingSorted	(xmlNodeSetPtr nodes1, 
    xmlNodeSetPtr nodes2)
    +
    void	xmlXPathLocalNameFunction	(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +
    void	xmlXPathModValues		(xmlXPathParserContextPtr ctxt)
    +
    void	xmlXPathMultValues		(xmlXPathParserContextPtr ctxt)
    +
    void	xmlXPathNamespaceURIFunction	(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +
    xmlXPathObjectPtr	xmlXPathNewBoolean	(int val)
    +
    xmlXPathObjectPtr	xmlXPathNewCString	(const char * val)
    +
    xmlXPathObjectPtr	xmlXPathNewFloat	(double val)
    +
    xmlXPathObjectPtr	xmlXPathNewNodeSet	(xmlNodePtr val)
    +
    xmlXPathObjectPtr	xmlXPathNewNodeSetList	(xmlNodeSetPtr val)
    +
    xmlXPathParserContextPtr	xmlXPathNewParserContext	(const xmlChar * str, 
    xmlXPathContextPtr ctxt)
    +
    xmlXPathObjectPtr	xmlXPathNewString	(const xmlChar * val)
    +
    xmlXPathObjectPtr	xmlXPathNewValueTree	(xmlNodePtr val)
    +
    xmlNodePtr	xmlXPathNextAncestor	(xmlXPathParserContextPtr ctxt, 
    xmlNodePtr cur)
    +
    xmlNodePtr	xmlXPathNextAncestorOrSelf	(xmlXPathParserContextPtr ctxt, 
    xmlNodePtr cur)
    +
    xmlNodePtr	xmlXPathNextAttribute	(xmlXPathParserContextPtr ctxt, 
    xmlNodePtr cur)
    +
    xmlNodePtr	xmlXPathNextChild	(xmlXPathParserContextPtr ctxt, 
    xmlNodePtr cur)
    +
    xmlNodePtr	xmlXPathNextDescendant	(xmlXPathParserContextPtr ctxt, 
    xmlNodePtr cur)
    +
    xmlNodePtr	xmlXPathNextDescendantOrSelf	(xmlXPathParserContextPtr ctxt, 
    xmlNodePtr cur)
    +
    xmlNodePtr	xmlXPathNextFollowing	(xmlXPathParserContextPtr ctxt, 
    xmlNodePtr cur)
    +
    xmlNodePtr	xmlXPathNextFollowingSibling	(xmlXPathParserContextPtr ctxt, 
    xmlNodePtr cur)
    +
    xmlNodePtr	xmlXPathNextNamespace	(xmlXPathParserContextPtr ctxt, 
    xmlNodePtr cur)
    +
    xmlNodePtr	xmlXPathNextParent	(xmlXPathParserContextPtr ctxt, 
    xmlNodePtr cur)
    +
    xmlNodePtr	xmlXPathNextPreceding	(xmlXPathParserContextPtr ctxt, 
    xmlNodePtr cur)
    +
    xmlNodePtr	xmlXPathNextPrecedingSibling	(xmlXPathParserContextPtr ctxt, 
    xmlNodePtr cur)
    +
    xmlNodePtr	xmlXPathNextSelf	(xmlXPathParserContextPtr ctxt, 
    xmlNodePtr cur)
    +
    xmlNodeSetPtr	xmlXPathNodeLeading	(xmlNodeSetPtr nodes, 
    xmlNodePtr node)
    +
    xmlNodeSetPtr	xmlXPathNodeLeadingSorted	(xmlNodeSetPtr nodes, 
    xmlNodePtr node)
    +
    int	xmlXPathNodeSetAdd		(xmlNodeSetPtr cur, 
    xmlNodePtr val)
    +
    int	xmlXPathNodeSetAddNs		(xmlNodeSetPtr cur, 
    xmlNodePtr node,
    xmlNsPtr ns)
    +
    int	xmlXPathNodeSetAddUnique	(xmlNodeSetPtr cur, 
    xmlNodePtr val)
    +
    int	xmlXPathNodeSetContains		(xmlNodeSetPtr cur, 
    xmlNodePtr val)
    +
    void	xmlXPathNodeSetDel		(xmlNodeSetPtr cur, 
    xmlNodePtr val)
    +
    void	xmlXPathNodeSetFreeNs		(xmlNsPtr ns)
    +
    xmlNodeSetPtr	xmlXPathNodeSetMerge	(xmlNodeSetPtr val1, 
    xmlNodeSetPtr val2)
    +
    void	xmlXPathNodeSetRemove		(xmlNodeSetPtr cur, 
    int val)
    +
    void	xmlXPathNodeSetSort		(xmlNodeSetPtr set)
    +
    xmlNodeSetPtr	xmlXPathNodeTrailing	(xmlNodeSetPtr nodes, 
    xmlNodePtr node)
    +
    xmlNodeSetPtr	xmlXPathNodeTrailingSorted	(xmlNodeSetPtr nodes, 
    xmlNodePtr node)
    +
    void	xmlXPathNormalizeFunction	(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +
    int	xmlXPathNotEqualValues		(xmlXPathParserContextPtr ctxt)
    +
    void	xmlXPathNotFunction		(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +
    const xmlChar *	xmlXPathNsLookup	(xmlXPathContextPtr ctxt, 
    const xmlChar * prefix)
    +
    void	xmlXPathNumberFunction		(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +
    xmlChar *	xmlXPathParseNCName	(xmlXPathParserContextPtr ctxt)
    +
    xmlChar *	xmlXPathParseName	(xmlXPathParserContextPtr ctxt)
    +
    int	xmlXPathPopBoolean		(xmlXPathParserContextPtr ctxt)
    +
    void *	xmlXPathPopExternal		(xmlXPathParserContextPtr ctxt)
    +
    xmlNodeSetPtr	xmlXPathPopNodeSet	(xmlXPathParserContextPtr ctxt)
    +
    double	xmlXPathPopNumber		(xmlXPathParserContextPtr ctxt)
    +
    xmlChar *	xmlXPathPopString	(xmlXPathParserContextPtr ctxt)
    +
    void	xmlXPathPositionFunction	(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +
    void	xmlXPathRegisterAllFunctions	(xmlXPathContextPtr ctxt)
    +
    int	xmlXPathRegisterFunc		(xmlXPathContextPtr ctxt, 
    const xmlChar * name,
    xmlXPathFunction f)
    +
    void	xmlXPathRegisterFuncLookup	(xmlXPathContextPtr ctxt, 
    xmlXPathFuncLookupFunc f,
    void * funcCtxt)
    +
    int	xmlXPathRegisterFuncNS		(xmlXPathContextPtr ctxt, 
    const xmlChar * name,
    const xmlChar * ns_uri,
    xmlXPathFunction f)
    +
    int	xmlXPathRegisterNs		(xmlXPathContextPtr ctxt, 
    const xmlChar * prefix,
    const xmlChar * ns_uri)
    +
    int	xmlXPathRegisterVariable	(xmlXPathContextPtr ctxt, 
    const xmlChar * name,
    xmlXPathObjectPtr value)
    +
    void	xmlXPathRegisterVariableLookup	(xmlXPathContextPtr ctxt, 
    xmlXPathVariableLookupFunc f,
    void * data)
    +
    int	xmlXPathRegisterVariableNS	(xmlXPathContextPtr ctxt, 
    const xmlChar * name,
    const xmlChar * ns_uri,
    xmlXPathObjectPtr value)
    +
    void	xmlXPathRegisteredFuncsCleanup	(xmlXPathContextPtr ctxt)
    +
    void	xmlXPathRegisteredNsCleanup	(xmlXPathContextPtr ctxt)
    +
    void	xmlXPathRegisteredVariablesCleanup	(xmlXPathContextPtr ctxt)
    +
    void	xmlXPathRoot			(xmlXPathParserContextPtr ctxt)
    +
    void	xmlXPathRoundFunction		(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +
    void	xmlXPathStartsWithFunction	(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +
    double	xmlXPathStringEvalNumber	(const xmlChar * str)
    +
    void	xmlXPathStringFunction		(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +
    void	xmlXPathStringLengthFunction	(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +
    void	xmlXPathSubValues		(xmlXPathParserContextPtr ctxt)
    +
    void	xmlXPathSubstringAfterFunction	(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +
    void	xmlXPathSubstringBeforeFunction	(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +
    void	xmlXPathSubstringFunction	(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +
    void	xmlXPathSumFunction		(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +
    xmlNodeSetPtr	xmlXPathTrailing	(xmlNodeSetPtr nodes1, 
    xmlNodeSetPtr nodes2)
    +
    xmlNodeSetPtr	xmlXPathTrailingSorted	(xmlNodeSetPtr nodes1, 
    xmlNodeSetPtr nodes2)
    +
    void	xmlXPathTranslateFunction	(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +
    void	xmlXPathTrueFunction		(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +
    void	xmlXPathValueFlipSign		(xmlXPathParserContextPtr ctxt)
    +
    xmlXPathObjectPtr	xmlXPathVariableLookup	(xmlXPathContextPtr ctxt, 
    const xmlChar * name)
    +
    xmlXPathObjectPtr	xmlXPathVariableLookupNS	(xmlXPathContextPtr ctxt, 
    const xmlChar * name,
    const xmlChar * ns_uri)
    +
    xmlXPathObjectPtr	xmlXPathWrapCString	(char * val)
    +
    xmlXPathObjectPtr	xmlXPathWrapExternal	(void * val)
    +
    xmlXPathObjectPtr	xmlXPathWrapNodeSet	(xmlNodeSetPtr val)
    +
    xmlXPathObjectPtr	xmlXPathWrapString	(xmlChar * val)
    +
    void	xmlXPatherror			(xmlXPathParserContextPtr ctxt, 
    const char * file,
    int line,
    int no)
    +

    Description

    +

    Macro: CAST_TO_BOOLEAN

    #define CAST_TO_BOOLEAN

    Macro to try to cast the value on the top of the XPath stack to a boolean.

    +

    Macro: CAST_TO_NUMBER

    #define CAST_TO_NUMBER

    Macro to try to cast the value on the top of the XPath stack to a number.

    +

    Macro: CAST_TO_STRING

    #define CAST_TO_STRING

    Macro to try to cast the value on the top of the XPath stack to a string.

    +

    Macro: CHECK_ARITY

    #define CHECK_ARITY

    Macro to check that the number of args passed to an XPath function matches.

    +

    Macro: CHECK_ERROR

    #define CHECK_ERROR

    Macro to return from the function if an XPath error was detected.

    +

    Macro: CHECK_ERROR0

    #define CHECK_ERROR0

    Macro to return 0 from the function if an XPath error was detected.

    +

    Macro: CHECK_TYPE

    #define CHECK_TYPE

    Macro to check that the value on top of the XPath stack is of a given type.

    +

    Macro: CHECK_TYPE0

    #define CHECK_TYPE0

    Macro to check that the value on top of the XPath stack is of a given type. Return(0) in case of failure

    +

    Macro: XP_ERROR

    #define XP_ERROR

    Macro to raise an XPath error and return.

    +

    Macro: XP_ERROR0

    #define XP_ERROR0

    Macro to raise an XPath error and return 0.

    +

    Macro: xmlXPathCheckError

    #define xmlXPathCheckError

    Check if an XPath error was raised. Returns true if an error has been raised, false otherwise.

    +

    Macro: xmlXPathEmptyNodeSet

    #define xmlXPathEmptyNodeSet

    Empties a node-set.

    +

    Macro: xmlXPathGetContextNode

    #define xmlXPathGetContextNode

    Get the context node of an XPath context. Returns the context node.

    +

    Macro: xmlXPathGetDocument

    #define xmlXPathGetDocument

    Get the document of an XPath context. Returns the context document.

    +

    Macro: xmlXPathGetError

    #define xmlXPathGetError

    Get the error code of an XPath context. Returns the context error.

    +

    Macro: xmlXPathReturnBoolean

    #define xmlXPathReturnBoolean

    Pushes the boolean @val on the context stack.

    +

    Macro: xmlXPathReturnEmptyNodeSet

    #define xmlXPathReturnEmptyNodeSet

    Pushes an empty node-set on the context stack.

    +

    Macro: xmlXPathReturnEmptyString

    #define xmlXPathReturnEmptyString

    Pushes an empty string on the stack.

    +

    Macro: xmlXPathReturnExternal

    #define xmlXPathReturnExternal

    Pushes user data on the context stack.

    +

    Macro: xmlXPathReturnFalse

    #define xmlXPathReturnFalse

    Pushes false on the context stack.

    +

    Macro: xmlXPathReturnNodeSet

    #define xmlXPathReturnNodeSet

    Pushes the node-set @ns on the context stack.

    +

    Macro: xmlXPathReturnNumber

    #define xmlXPathReturnNumber

    Pushes the double @val on the context stack.

    +

    Macro: xmlXPathReturnString

    #define xmlXPathReturnString

    Pushes the string @str on the context stack.

    +

    Macro: xmlXPathReturnTrue

    #define xmlXPathReturnTrue

    Pushes true on the context stack.

    +

    Macro: xmlXPathSetArityError

    #define xmlXPathSetArityError

    Raises an XPATH_INVALID_ARITY error.

    +

    Macro: xmlXPathSetError

    #define xmlXPathSetError

    Raises an error.

    +

    Macro: xmlXPathSetTypeError

    #define xmlXPathSetTypeError

    Raises an XPATH_INVALID_TYPE error.

    +

    Macro: xmlXPathStackIsExternal

    #define xmlXPathStackIsExternal

    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.

    +

    Macro: xmlXPathStackIsNodeSet

    #define xmlXPathStackIsNodeSet

    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.

    +

    Function: valuePop

    xmlXPathObjectPtr	valuePop	(xmlXPathParserContextPtr ctxt)
    +

    Pops the top XPath object from the value stack

    +
    ctxt:an XPath evaluation context
    Returns:the XPath object just removed

    Function: valuePush

    int	valuePush			(xmlXPathParserContextPtr ctxt, 
    xmlXPathObjectPtr value)
    +

    Pushes a new XPath object on top of the value stack

    +
    ctxt:an XPath evaluation context
    value:the XPath object
    Returns:the number of items on the value stack

    Function: xmlXPathAddValues

    void	xmlXPathAddValues		(xmlXPathParserContextPtr ctxt)
    +

    Implement the add operation on XPath objects: The numeric operators convert their operands to numbers as if by calling the number function.

    +
    ctxt:the XPath Parser context

    Function: xmlXPathBooleanFunction

    void	xmlXPathBooleanFunction		(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +

    Implement the boolean() XPath function boolean boolean(object) The boolean function converts its argument to a boolean as follows: - a number is true if and only if it is neither positive or negative zero nor NaN - a node-set is true if and only if it is non-empty - a string is true if and only if its length is non-zero

    +
    ctxt:the XPath Parser context
    nargs:the number of arguments

    Function: xmlXPathCeilingFunction

    void	xmlXPathCeilingFunction		(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +

    Implement the ceiling() XPath function number ceiling(number) The ceiling function returns the smallest (closest to negative infinity) number that is not less than the argument and that is an integer.

    +
    ctxt:the XPath Parser context
    nargs:the number of arguments

    Function: xmlXPathCompareValues

    int	xmlXPathCompareValues		(xmlXPathParserContextPtr ctxt, 
    int inf,
    int 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.

    +
    ctxt:the XPath Parser context
    inf:less than (1) or greater than (0)
    strict:is the comparison strict
    Returns:1 if the comparison succeeded, 0 if it failed

    Function: xmlXPathConcatFunction

    void	xmlXPathConcatFunction		(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +

    Implement the concat() XPath function string concat(string, string, string*) The concat function returns the concatenation of its arguments.

    +
    ctxt:the XPath Parser context
    nargs:the number of arguments

    Function: xmlXPathContainsFunction

    void	xmlXPathContainsFunction	(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +

    Implement the contains() XPath function boolean contains(string, string) The contains function returns true if the first argument string contains the second argument string, and otherwise returns false.

    +
    ctxt:the XPath Parser context
    nargs:the number of arguments

    Function: xmlXPathCountFunction

    void	xmlXPathCountFunction		(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +

    Implement the count() XPath function number count(node-set)

    +
    ctxt:the XPath Parser context
    nargs:the number of arguments

    Function: xmlXPathDebugDumpCompExpr

    void	xmlXPathDebugDumpCompExpr	(FILE * output, 
    xmlXPathCompExprPtr comp,
    int depth)
    +

    Dumps the tree of the compiled XPath expression.

    +
    output:the FILE * for the output
    comp:the precompiled XPath expression
    depth:the indentation level.

    Function: xmlXPathDebugDumpObject

    void	xmlXPathDebugDumpObject		(FILE * output, 
    xmlXPathObjectPtr cur,
    int depth)
    +

    Dump the content of the object for debugging purposes

    +
    output:the FILE * to dump the output
    cur:the object to inspect
    depth:indentation level

    Function: xmlXPathDifference

    xmlNodeSetPtr	xmlXPathDifference	(xmlNodeSetPtr nodes1, 
    xmlNodeSetPtr nodes2)
    +

    Implements the EXSLT - Sets difference() function: node-set set:difference (node-set, node-set)

    +
    nodes1:a node-set
    nodes2:a node-set
    Returns:the difference between the two node sets, or nodes1 if nodes2 is empty

    Function: xmlXPathDistinct

    xmlNodeSetPtr	xmlXPathDistinct	(xmlNodeSetPtr nodes)
    +

    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

    +
    nodes:a node-set
    Returns:a subset of the nodes contained in @nodes, or @nodes if it is empty

    Function: xmlXPathDistinctSorted

    xmlNodeSetPtr	xmlXPathDistinctSorted	(xmlNodeSetPtr nodes)
    +

    Implements the EXSLT - Sets distinct() function: node-set set:distinct (node-set)

    +
    nodes:a node-set, sorted by document order
    Returns:a subset of the nodes contained in @nodes, or @nodes if it is empty

    Function: xmlXPathDivValues

    void	xmlXPathDivValues		(xmlXPathParserContextPtr ctxt)
    +

    Implement the div operation on XPath objects @arg1 / @arg2: The numeric operators convert their operands to numbers as if by calling the number function.

    +
    ctxt:the XPath Parser context

    Function: xmlXPathEqualValues

    int	xmlXPathEqualValues		(xmlXPathParserContextPtr ctxt)
    +

    Implement the equal operation on XPath objects content: @arg1 == @arg2

    +
    ctxt:the XPath Parser context
    Returns:0 or 1 depending on the results of the test.

    Function: xmlXPathErr

    void	xmlXPathErr			(xmlXPathParserContextPtr ctxt, 
    int error)
    +

    Handle an XPath error

    +
    ctxt:a XPath parser context
    error:the error code

    Function: xmlXPathEvalExpr

    void	xmlXPathEvalExpr		(xmlXPathParserContextPtr ctxt)
    +

    Parse and evaluate an XPath expression in the given context, then push the result on the context stack

    +
    ctxt:the XPath Parser context

    Function: xmlXPathEvaluatePredicateResult

    int	xmlXPathEvaluatePredicateResult	(xmlXPathParserContextPtr ctxt, 
    xmlXPathObjectPtr res)
    +

    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.

    +
    ctxt:the XPath Parser context
    res:the Predicate Expression evaluation result
    Returns:1 if predicate is true, 0 otherwise

    Function: xmlXPathFalseFunction

    void	xmlXPathFalseFunction		(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +

    Implement the false() XPath function boolean false()

    +
    ctxt:the XPath Parser context
    nargs:the number of arguments

    Function: xmlXPathFloorFunction

    void	xmlXPathFloorFunction		(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +

    Implement the floor() XPath function number floor(number) The floor function returns the largest (closest to positive infinity) number that is not greater than the argument and that is an integer.

    +
    ctxt:the XPath Parser context
    nargs:the number of arguments

    Function: xmlXPathFreeParserContext

    void	xmlXPathFreeParserContext	(xmlXPathParserContextPtr ctxt)
    +

    Free up an xmlXPathParserContext

    +
    ctxt:the context to free

    Function: xmlXPathFunctionLookup

    xmlXPathFunction	xmlXPathFunctionLookup	(xmlXPathContextPtr ctxt, 
    const xmlChar * name)
    +

    Search in the Function array of the context for the given function.

    +
    ctxt:the XPath context
    name:the function name
    Returns:the xmlXPathFunction or NULL if not found

    Function: xmlXPathFunctionLookupNS

    xmlXPathFunction	xmlXPathFunctionLookupNS	(xmlXPathContextPtr ctxt, 
    const xmlChar * name,
    const xmlChar * ns_uri)
    +

    Search in the Function array of the context for the given function.

    +
    ctxt:the XPath context
    name:the function name
    ns_uri:the function namespace URI
    Returns:the xmlXPathFunction or NULL if not found

    Function: xmlXPathHasSameNodes

    int	xmlXPathHasSameNodes		(xmlNodeSetPtr nodes1, 
    xmlNodeSetPtr nodes2)
    +

    Implements the EXSLT - Sets has-same-nodes function: boolean set:has-same-node(node-set, node-set)

    +
    nodes1:a node-set
    nodes2:a node-set
    Returns:true (1) if @nodes1 shares any node with @nodes2, false (0) otherwise

    Function: xmlXPathIdFunction

    void	xmlXPathIdFunction		(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +

    Implement the id() XPath function node-set id(object) The id function selects elements by their unique ID (see [5.2.1 Unique IDs]). When the argument to id is of type node-set, then the result is the union of the result of applying id to the string value of each of the nodes in the argument node-set. When the argument to id is of any other type, the argument is converted to a string as if by a call to the string function; the string is split into a whitespace-separated list of tokens (whitespace is any sequence of characters matching the production S); the result is a node-set containing the elements in the same document as the context node that have a unique ID equal to any of the tokens in the list.

    +
    ctxt:the XPath Parser context
    nargs:the number of arguments

    Function: xmlXPathIntersection

    xmlNodeSetPtr	xmlXPathIntersection	(xmlNodeSetPtr nodes1, 
    xmlNodeSetPtr nodes2)
    +

    Implements the EXSLT - Sets intersection() function: node-set set:intersection (node-set, node-set)

    +
    nodes1:a node-set
    nodes2:a node-set
    Returns:a node set comprising the nodes that are within both the node sets passed as arguments

    Function: xmlXPathIsNodeType

    int	xmlXPathIsNodeType		(const xmlChar * name)
    +

    Is the name given a NodeType one. [38] NodeType ::= 'comment' | 'text' | 'processing-instruction' | 'node'

    +
    name:a name string
    Returns:1 if true 0 otherwise

    Function: xmlXPathLangFunction

    void	xmlXPathLangFunction		(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +

    Implement the lang() XPath function boolean lang(string) The lang function returns true or false depending on whether the language of the context node as specified by xml:lang attributes is the same as or is a sublanguage of the language specified by the argument string. The language of the context node is determined by the value of the xml:lang attribute on the context node, or, if the context node has no xml:lang attribute, by the value of the xml:lang attribute on the nearest ancestor of the context node that has an xml:lang attribute. If there is no such attribute, then lang

    +
    ctxt:the XPath Parser context
    nargs:the number of arguments

    Function: xmlXPathLastFunction

    void	xmlXPathLastFunction		(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +

    Implement the last() XPath function number last() The last function returns the number of nodes in the context node list.

    +
    ctxt:the XPath Parser context
    nargs:the number of arguments

    Function: xmlXPathLeading

    xmlNodeSetPtr	xmlXPathLeading		(xmlNodeSetPtr nodes1, 
    xmlNodeSetPtr nodes2)
    +

    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.

    +
    nodes1:a node-set
    nodes2:a 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

    Function: xmlXPathLeadingSorted

    xmlNodeSetPtr	xmlXPathLeadingSorted	(xmlNodeSetPtr nodes1, 
    xmlNodeSetPtr nodes2)
    +

    Implements the EXSLT - Sets leading() function: node-set set:leading (node-set, node-set)

    +
    nodes1:a node-set, sorted by document order
    nodes2:a node-set, sorted by document order
    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

    Function: xmlXPathLocalNameFunction

    void	xmlXPathLocalNameFunction	(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +

    Implement the local-name() XPath function string local-name(node-set?) The local-name function returns a string containing the local part of the name of the node in the argument node-set that is first in document order. If the node-set is empty or the first node has no name, an empty string is returned. If the argument is omitted it defaults to the context node.

    +
    ctxt:the XPath Parser context
    nargs:the number of arguments

    Function: xmlXPathModValues

    void	xmlXPathModValues		(xmlXPathParserContextPtr ctxt)
    +

    Implement the mod operation on XPath objects: @arg1 / @arg2 The numeric operators convert their operands to numbers as if by calling the number function.

    +
    ctxt:the XPath Parser context

    Function: xmlXPathMultValues

    void	xmlXPathMultValues		(xmlXPathParserContextPtr ctxt)
    +

    Implement the multiply operation on XPath objects: The numeric operators convert their operands to numbers as if by calling the number function.

    +
    ctxt:the XPath Parser context

    Function: xmlXPathNamespaceURIFunction

    void	xmlXPathNamespaceURIFunction	(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +

    Implement the namespace-uri() XPath function string namespace-uri(node-set?) The namespace-uri function returns a string containing the namespace URI of the expanded name of the node in the argument node-set that is first in document order. If the node-set is empty, the first node has no name, or the expanded name has no namespace URI, an empty string is returned. If the argument is omitted it defaults to the context node.

    +
    ctxt:the XPath Parser context
    nargs:the number of arguments

    Function: xmlXPathNewBoolean

    xmlXPathObjectPtr	xmlXPathNewBoolean	(int val)
    +

    Create a new xmlXPathObjectPtr of type boolean and of value @val

    +
    val:the boolean value
    Returns:the newly created object.

    Function: xmlXPathNewCString

    xmlXPathObjectPtr	xmlXPathNewCString	(const char * val)
    +

    Create a new xmlXPathObjectPtr of type string and of value @val

    +
    val:the char * value
    Returns:the newly created object.

    Function: xmlXPathNewFloat

    xmlXPathObjectPtr	xmlXPathNewFloat	(double val)
    +

    Create a new xmlXPathObjectPtr of type double and of value @val

    +
    val:the double value
    Returns:the newly created object.

    Function: xmlXPathNewNodeSet

    xmlXPathObjectPtr	xmlXPathNewNodeSet	(xmlNodePtr val)
    +

    Create a new xmlXPathObjectPtr of type NodeSet and initialize it with the single Node @val

    +
    val:the NodePtr value
    Returns:the newly created object.

    Function: xmlXPathNewNodeSetList

    xmlXPathObjectPtr	xmlXPathNewNodeSetList	(xmlNodeSetPtr val)
    +

    Create a new xmlXPathObjectPtr of type NodeSet and initialize it with the Nodeset @val

    +
    val:an existing NodeSet
    Returns:the newly created object.

    Function: xmlXPathNewParserContext

    xmlXPathParserContextPtr	xmlXPathNewParserContext	(const xmlChar * str, 
    xmlXPathContextPtr ctxt)
    +

    Create a new xmlXPathParserContext

    +
    str:the XPath expression
    ctxt:the XPath context
    Returns:the xmlXPathParserContext just allocated.

    Function: xmlXPathNewString

    xmlXPathObjectPtr	xmlXPathNewString	(const xmlChar * val)
    +

    Create a new xmlXPathObjectPtr of type string and of value @val

    +
    val:the xmlChar * value
    Returns:the newly created object.

    Function: xmlXPathNewValueTree

    xmlXPathObjectPtr	xmlXPathNewValueTree	(xmlNodePtr val)
    +

    Create a new xmlXPathObjectPtr of type Value Tree (XSLT) and initialize it with the tree root @val

    +
    val:the NodePtr value
    Returns:the newly created object.

    Function: xmlXPathNextAncestor

    xmlNodePtr	xmlXPathNextAncestor	(xmlXPathParserContextPtr ctxt, 
    xmlNodePtr cur)
    +

    Traversal function for the "ancestor" direction the ancestor axis contains the ancestors of the context node; the ancestors of the context node consist of the parent of context node and the parent's parent and so on; the nodes are ordered in reverse document order; thus the parent is the first node on the axis, and the parent's parent is the second node on the axis

    +
    ctxt:the XPath Parser context
    cur:the current node in the traversal
    Returns:the next element following that axis

    Function: xmlXPathNextAncestorOrSelf

    xmlNodePtr	xmlXPathNextAncestorOrSelf	(xmlXPathParserContextPtr ctxt, 
    xmlNodePtr cur)
    +

    Traversal function for the "ancestor-or-self" direction he ancestor-or-self axis contains the context node and ancestors of the context node in reverse document order; thus the context node is the first node on the axis, and the context node's parent the second; parent here is defined the same as with the parent axis.

    +
    ctxt:the XPath Parser context
    cur:the current node in the traversal
    Returns:the next element following that axis

    Function: xmlXPathNextAttribute

    xmlNodePtr	xmlXPathNextAttribute	(xmlXPathParserContextPtr ctxt, 
    xmlNodePtr cur)
    +

    Traversal function for the "attribute" direction TODO: support DTD inherited default attributes

    +
    ctxt:the XPath Parser context
    cur:the current attribute in the traversal
    Returns:the next element following that axis

    Function: xmlXPathNextChild

    xmlNodePtr	xmlXPathNextChild	(xmlXPathParserContextPtr ctxt, 
    xmlNodePtr cur)
    +

    Traversal function for the "child" direction The child axis contains the children of the context node in document order.

    +
    ctxt:the XPath Parser context
    cur:the current node in the traversal
    Returns:the next element following that axis

    Function: xmlXPathNextDescendant

    xmlNodePtr	xmlXPathNextDescendant	(xmlXPathParserContextPtr ctxt, 
    xmlNodePtr cur)
    +

    Traversal function for the "descendant" direction the descendant axis contains the descendants of the context node in document order; a descendant is a child or a child of a child and so on.

    +
    ctxt:the XPath Parser context
    cur:the current node in the traversal
    Returns:the next element following that axis

    Function: xmlXPathNextDescendantOrSelf

    xmlNodePtr	xmlXPathNextDescendantOrSelf	(xmlXPathParserContextPtr ctxt, 
    xmlNodePtr cur)
    +

    Traversal function for the "descendant-or-self" direction the descendant-or-self axis contains the context node and the descendants of the context node in document order; thus the context node is the first node on the axis, and the first child of the context node is the second node on the axis

    +
    ctxt:the XPath Parser context
    cur:the current node in the traversal
    Returns:the next element following that axis

    Function: xmlXPathNextFollowing

    xmlNodePtr	xmlXPathNextFollowing	(xmlXPathParserContextPtr ctxt, 
    xmlNodePtr cur)
    +

    Traversal function for the "following" direction The following axis contains all nodes in the same document as the context node that are after the context node in document order, excluding any descendants and excluding attribute nodes and namespace nodes; the nodes are ordered in document order

    +
    ctxt:the XPath Parser context
    cur:the current node in the traversal
    Returns:the next element following that axis

    Function: xmlXPathNextFollowingSibling

    xmlNodePtr	xmlXPathNextFollowingSibling	(xmlXPathParserContextPtr ctxt, 
    xmlNodePtr cur)
    +

    Traversal function for the "following-sibling" direction The following-sibling axis contains the following siblings of the context node in document order.

    +
    ctxt:the XPath Parser context
    cur:the current node in the traversal
    Returns:the next element following that axis

    Function: xmlXPathNextNamespace

    xmlNodePtr	xmlXPathNextNamespace	(xmlXPathParserContextPtr ctxt, 
    xmlNodePtr cur)
    +

    Traversal function for the "namespace" direction the namespace axis contains the namespace nodes of the context node; the order of nodes on this axis is implementation-defined; the axis will be empty unless the context node is an element We keep the XML namespace node at the end of the list.

    +
    ctxt:the XPath Parser context
    cur:the current attribute in the traversal
    Returns:the next element following that axis

    Function: xmlXPathNextParent

    xmlNodePtr	xmlXPathNextParent	(xmlXPathParserContextPtr ctxt, 
    xmlNodePtr cur)
    +

    Traversal function for the "parent" direction The parent axis contains the parent of the context node, if there is one.

    +
    ctxt:the XPath Parser context
    cur:the current node in the traversal
    Returns:the next element following that axis

    Function: xmlXPathNextPreceding

    xmlNodePtr	xmlXPathNextPreceding	(xmlXPathParserContextPtr ctxt, 
    xmlNodePtr cur)
    +

    Traversal function for the "preceding" direction the preceding axis contains all nodes in the same document as the context node that are before the context node in document order, excluding any ancestors and excluding attribute nodes and namespace nodes; the nodes are ordered in reverse document order

    +
    ctxt:the XPath Parser context
    cur:the current node in the traversal
    Returns:the next element following that axis

    Function: xmlXPathNextPrecedingSibling

    xmlNodePtr	xmlXPathNextPrecedingSibling	(xmlXPathParserContextPtr ctxt, 
    xmlNodePtr cur)
    +

    Traversal function for the "preceding-sibling" direction The preceding-sibling axis contains the preceding siblings of the context node in reverse document order; the first preceding sibling is first on the axis; the sibling preceding that node is the second on the axis and so on.

    +
    ctxt:the XPath Parser context
    cur:the current node in the traversal
    Returns:the next element following that axis

    Function: xmlXPathNextSelf

    xmlNodePtr	xmlXPathNextSelf	(xmlXPathParserContextPtr ctxt, 
    xmlNodePtr cur)
    +

    Traversal function for the "self" direction The self axis contains just the context node itself

    +
    ctxt:the XPath Parser context
    cur:the current node in the traversal
    Returns:the next element following that axis

    Function: xmlXPathNodeLeading

    xmlNodeSetPtr	xmlXPathNodeLeading	(xmlNodeSetPtr nodes, 
    xmlNodePtr 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.

    +
    nodes:a node-set
    node:a node
    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

    Function: xmlXPathNodeLeadingSorted

    xmlNodeSetPtr	xmlXPathNodeLeadingSorted	(xmlNodeSetPtr nodes, 
    xmlNodePtr node)
    +

    Implements the EXSLT - Sets leading() function: node-set set:leading (node-set, node-set)

    +
    nodes:a node-set, sorted by document order
    node:a node
    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

    Function: xmlXPathNodeSetAdd

    int	xmlXPathNodeSetAdd		(xmlNodeSetPtr cur, 
    xmlNodePtr val)
    +

    add a new xmlNodePtr to an existing NodeSet

    +
    cur:the initial node set
    val:a new xmlNodePtr
    Returns:0 in case of success, and -1 in case of error

    Function: xmlXPathNodeSetAddNs

    int	xmlXPathNodeSetAddNs		(xmlNodeSetPtr cur, 
    xmlNodePtr node,
    xmlNsPtr ns)
    +

    add a new namespace node to an existing NodeSet

    +
    cur:the initial node set
    node:the hosting node
    ns:a the namespace node
    Returns:0 in case of success and -1 in case of error

    Function: xmlXPathNodeSetAddUnique

    int	xmlXPathNodeSetAddUnique	(xmlNodeSetPtr cur, 
    xmlNodePtr val)
    +

    add a new xmlNodePtr to an existing NodeSet, optimized version when we are sure the node is not already in the set.

    +
    cur:the initial node set
    val:a new xmlNodePtr
    Returns:0 in case of success and -1 in case of failure

    Function: xmlXPathNodeSetContains

    int	xmlXPathNodeSetContains		(xmlNodeSetPtr cur, 
    xmlNodePtr val)
    +

    checks whether @cur contains @val

    +
    cur:the node-set
    val:the node
    Returns:true (1) if @cur contains @val, false (0) otherwise

    Function: xmlXPathNodeSetDel

    void	xmlXPathNodeSetDel		(xmlNodeSetPtr cur, 
    xmlNodePtr val)
    +

    Removes an xmlNodePtr from an existing NodeSet

    +
    cur:the initial node set
    val:an xmlNodePtr

    Function: xmlXPathNodeSetFreeNs

    void	xmlXPathNodeSetFreeNs		(xmlNsPtr ns)
    +

    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

    +
    ns:the XPath namespace node found in a nodeset.

    Function: xmlXPathNodeSetMerge

    xmlNodeSetPtr	xmlXPathNodeSetMerge	(xmlNodeSetPtr val1, 
    xmlNodeSetPtr val2)
    +

    Merges two nodesets, all nodes from @val2 are added to @val1 if @val1 is NULL, a new set is created and copied from @val2

    +
    val1:the first NodeSet or NULL
    val2:the second NodeSet
    Returns:@val1 once extended or NULL in case of error.

    Function: xmlXPathNodeSetRemove

    void	xmlXPathNodeSetRemove		(xmlNodeSetPtr cur, 
    int val)
    +

    Removes an entry from an existing NodeSet list.

    +
    cur:the initial node set
    val:the index to remove

    Function: xmlXPathNodeSetSort

    void	xmlXPathNodeSetSort		(xmlNodeSetPtr set)
    +

    Sort the node set in document order

    +
    set:the node set

    Function: xmlXPathNodeTrailing

    xmlNodeSetPtr	xmlXPathNodeTrailing	(xmlNodeSetPtr nodes, 
    xmlNodePtr 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.

    +
    nodes:a node-set
    node:a node
    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

    Function: xmlXPathNodeTrailingSorted

    xmlNodeSetPtr	xmlXPathNodeTrailingSorted	(xmlNodeSetPtr nodes, 
    xmlNodePtr node)
    +

    Implements the EXSLT - Sets trailing() function: node-set set:trailing (node-set, node-set)

    +
    nodes:a node-set, sorted by document order
    node:a node
    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

    Function: xmlXPathNormalizeFunction

    void	xmlXPathNormalizeFunction	(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +

    Implement the normalize-space() XPath function string normalize-space(string?) The normalize-space function returns the argument string with white space normalized by stripping leading and trailing whitespace and replacing sequences of whitespace characters by a single space. Whitespace characters are the same allowed by the S production in XML. If the argument is omitted, it defaults to the context node converted to a string, in other words the value of the context node.

    +
    ctxt:the XPath Parser context
    nargs:the number of arguments

    Function: xmlXPathNotEqualValues

    int	xmlXPathNotEqualValues		(xmlXPathParserContextPtr ctxt)
    +

    Implement the equal operation on XPath objects content: @arg1 == @arg2

    +
    ctxt:the XPath Parser context
    Returns:0 or 1 depending on the results of the test.

    Function: xmlXPathNotFunction

    void	xmlXPathNotFunction		(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +

    Implement the not() XPath function boolean not(boolean) The not function returns true if its argument is false, and false otherwise.

    +
    ctxt:the XPath Parser context
    nargs:the number of arguments

    Function: xmlXPathNsLookup

    const xmlChar *	xmlXPathNsLookup	(xmlXPathContextPtr ctxt, 
    const xmlChar * prefix)
    +

    Search in the namespace declaration array of the context for the given namespace name associated to the given prefix

    +
    ctxt:the XPath context
    prefix:the namespace prefix value
    Returns:the value or NULL if not found

    Function: xmlXPathNumberFunction

    void	xmlXPathNumberFunction		(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +

    Implement the number() XPath function number number(object?)

    +
    ctxt:the XPath Parser context
    nargs:the number of arguments

    Function: xmlXPathParseNCName

    xmlChar *	xmlXPathParseNCName	(xmlXPathParserContextPtr ctxt)
    +

    parse an XML namespace non qualified name. [NS 3] NCName ::= (Letter | '_') (NCNameChar)* [NS 4] NCNameChar ::= Letter | Digit | '.' | '-' | '_' | CombiningChar | Extender

    +
    ctxt:the XPath Parser context
    Returns:the namespace name or NULL

    Function: xmlXPathParseName

    xmlChar *	xmlXPathParseName	(xmlXPathParserContextPtr ctxt)
    +

    parse an XML name [4] NameChar ::= Letter | Digit | '.' | '-' | '_' | ':' | CombiningChar | Extender [5] Name ::= (Letter | '_' | ':') (NameChar)*

    +
    ctxt:the XPath Parser context
    Returns:the namespace name or NULL

    Function: xmlXPathPopBoolean

    int	xmlXPathPopBoolean		(xmlXPathParserContextPtr ctxt)
    +

    Pops a boolean from the stack, handling conversion if needed. Check error with #xmlXPathCheckError.

    +
    ctxt:an XPath parser context
    Returns:the boolean

    Function: xmlXPathPopExternal

    void *	xmlXPathPopExternal		(xmlXPathParserContextPtr ctxt)
    +

    Pops an external object from the stack, handling conversion if needed. Check error with #xmlXPathCheckError.

    +
    ctxt:an XPath parser context
    Returns:the object

    Function: xmlXPathPopNodeSet

    xmlNodeSetPtr	xmlXPathPopNodeSet	(xmlXPathParserContextPtr ctxt)
    +

    Pops a node-set from the stack, handling conversion if needed. Check error with #xmlXPathCheckError.

    +
    ctxt:an XPath parser context
    Returns:the node-set

    Function: xmlXPathPopNumber

    double	xmlXPathPopNumber		(xmlXPathParserContextPtr ctxt)
    +

    Pops a number from the stack, handling conversion if needed. Check error with #xmlXPathCheckError.

    +
    ctxt:an XPath parser context
    Returns:the number

    Function: xmlXPathPopString

    xmlChar *	xmlXPathPopString	(xmlXPathParserContextPtr ctxt)
    +

    Pops a string from the stack, handling conversion if needed. Check error with #xmlXPathCheckError.

    +
    ctxt:an XPath parser context
    Returns:the string

    Function: xmlXPathPositionFunction

    void	xmlXPathPositionFunction	(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +

    Implement the position() XPath function number position() The position function returns the position of the context node in the context node list. The first position is 1, and so the last position will be equal to last().

    +
    ctxt:the XPath Parser context
    nargs:the number of arguments

    Function: xmlXPathRegisterAllFunctions

    void	xmlXPathRegisterAllFunctions	(xmlXPathContextPtr ctxt)
    +

    Registers all default XPath functions in this context

    +
    ctxt:the XPath context

    Function: xmlXPathRegisterFunc

    int	xmlXPathRegisterFunc		(xmlXPathContextPtr ctxt, 
    const xmlChar * name,
    xmlXPathFunction f)
    +

    Register a new function. If @f is NULL it unregisters the function

    +
    ctxt:the XPath context
    name:the function name
    f:the function implementation or NULL
    Returns:0 in case of success, -1 in case of error

    Function: xmlXPathRegisterFuncLookup

    void	xmlXPathRegisterFuncLookup	(xmlXPathContextPtr ctxt, 
    xmlXPathFuncLookupFunc f,
    void * funcCtxt)
    +

    Registers an external mechanism to do function lookup.

    +
    ctxt:the XPath context
    f:the lookup function
    funcCtxt:the lookup data

    Function: xmlXPathRegisterFuncNS

    int	xmlXPathRegisterFuncNS		(xmlXPathContextPtr ctxt, 
    const xmlChar * name,
    const xmlChar * ns_uri,
    xmlXPathFunction f)
    +

    Register a new function. If @f is NULL it unregisters the function

    +
    ctxt:the XPath context
    name:the function name
    ns_uri:the function namespace URI
    f:the function implementation or NULL
    Returns:0 in case of success, -1 in case of error

    Function: xmlXPathRegisterNs

    int	xmlXPathRegisterNs		(xmlXPathContextPtr ctxt, 
    const xmlChar * prefix,
    const xmlChar * ns_uri)
    +

    Register a new namespace. If @ns_uri is NULL it unregisters the namespace

    +
    ctxt:the XPath context
    prefix:the namespace prefix cannot be NULL or empty string
    ns_uri:the namespace name
    Returns:0 in case of success, -1 in case of error

    Function: xmlXPathRegisterVariable

    int	xmlXPathRegisterVariable	(xmlXPathContextPtr ctxt, 
    const xmlChar * name,
    xmlXPathObjectPtr value)
    +

    Register a new variable value. If @value is NULL it unregisters the variable

    +
    ctxt:the XPath context
    name:the variable name
    value:the variable value or NULL
    Returns:0 in case of success, -1 in case of error

    Function: xmlXPathRegisterVariableLookup

    void	xmlXPathRegisterVariableLookup	(xmlXPathContextPtr ctxt, 
    xmlXPathVariableLookupFunc f,
    void * data)
    +

    register an external mechanism to do variable lookup

    +
    ctxt:the XPath context
    f:the lookup function
    data:the lookup data

    Function: xmlXPathRegisterVariableNS

    int	xmlXPathRegisterVariableNS	(xmlXPathContextPtr ctxt, 
    const xmlChar * name,
    const xmlChar * ns_uri,
    xmlXPathObjectPtr value)
    +

    Register a new variable value. If @value is NULL it unregisters the variable

    +
    ctxt:the XPath context
    name:the variable name
    ns_uri:the variable namespace URI
    value:the variable value or NULL
    Returns:0 in case of success, -1 in case of error

    Function: xmlXPathRegisteredFuncsCleanup

    void	xmlXPathRegisteredFuncsCleanup	(xmlXPathContextPtr ctxt)
    +

    Cleanup the XPath context data associated to registered functions

    +
    ctxt:the XPath context

    Function: xmlXPathRegisteredNsCleanup

    void	xmlXPathRegisteredNsCleanup	(xmlXPathContextPtr ctxt)
    +

    Cleanup the XPath context data associated to registered variables

    +
    ctxt:the XPath context

    Function: xmlXPathRegisteredVariablesCleanup

    void	xmlXPathRegisteredVariablesCleanup	(xmlXPathContextPtr ctxt)
    +

    Cleanup the XPath context data associated to registered variables

    +
    ctxt:the XPath context

    Function: xmlXPathRoot

    void	xmlXPathRoot			(xmlXPathParserContextPtr ctxt)
    +

    Initialize the context to the root of the document

    +
    ctxt:the XPath Parser context

    Function: xmlXPathRoundFunction

    void	xmlXPathRoundFunction		(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +

    Implement the round() XPath function number round(number) The round function returns the number that is closest to the argument and that is an integer. If there are two such numbers, then the one that is even is returned.

    +
    ctxt:the XPath Parser context
    nargs:the number of arguments

    Function: xmlXPathStartsWithFunction

    void	xmlXPathStartsWithFunction	(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +

    Implement the starts-with() XPath function boolean starts-with(string, string) The starts-with function returns true if the first argument string starts with the second argument string, and otherwise returns false.

    +
    ctxt:the XPath Parser context
    nargs:the number of arguments

    Function: xmlXPathStringEvalNumber

    double	xmlXPathStringEvalNumber	(const xmlChar * str)
    +

    [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.

    +
    str:A string to scan
    Returns:the double value.

    Function: xmlXPathStringFunction

    void	xmlXPathStringFunction		(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +

    Implement the string() XPath function string string(object?) The string function converts an object to a string as follows: - A node-set is converted to a string by returning the value of the node in the node-set that is first in document order. If the node-set is empty, an empty string is returned. - A number is converted to a string as follows + NaN is converted to the string NaN + positive zero is converted to the string 0 + negative zero is converted to the string 0 + positive infinity is converted to the string Infinity + negative infinity is converted to the string -Infinity + if the number is an integer, the number is represented in decimal form as a Number with no decimal point and no leading zeros, preceded by a minus sign (-) if the number is negative + otherwise, the number is represented in decimal form as a Number including a decimal point with at least one digit before the decimal point and at least one digit after the decimal point, preceded by a minus sign (-) if the number is negative; there must be no leading zeros before the decimal point apart possibly from the one required digit immediately before the decimal point; beyond the one required digit after the decimal point there must be as many, but only as many, more digits as are needed to uniquely distinguish the number from all other IEEE 754 numeric values. - The boolean false value is converted to the string false. The boolean true value is converted to the string true. If the argument is omitted, it defaults to a node-set with the context node as its only member.

    +
    ctxt:the XPath Parser context
    nargs:the number of arguments

    Function: xmlXPathStringLengthFunction

    void	xmlXPathStringLengthFunction	(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +

    Implement the string-length() XPath function number string-length(string?) The string-length returns the number of characters in the string (see [3.6 Strings]). If the argument is omitted, it defaults to the context node converted to a string, in other words the value of the context node.

    +
    ctxt:the XPath Parser context
    nargs:the number of arguments

    Function: xmlXPathSubValues

    void	xmlXPathSubValues		(xmlXPathParserContextPtr ctxt)
    +

    Implement the subtraction operation on XPath objects: The numeric operators convert their operands to numbers as if by calling the number function.

    +
    ctxt:the XPath Parser context

    Function: xmlXPathSubstringAfterFunction

    void	xmlXPathSubstringAfterFunction	(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +

    Implement the substring-after() XPath function string substring-after(string, string) The substring-after function returns the substring of the first argument string that follows the first occurrence of the second argument string in the first argument string, or the empty stringi if the first argument string does not contain the second argument string. For example, substring-after("1999/04/01","/") returns 04/01, and substring-after("1999/04/01","19") returns 99/04/01.

    +
    ctxt:the XPath Parser context
    nargs:the number of arguments

    Function: xmlXPathSubstringBeforeFunction

    void	xmlXPathSubstringBeforeFunction	(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +

    Implement the substring-before() XPath function string substring-before(string, string) The substring-before function returns the substring of the first argument string that precedes the first occurrence of the second argument string in the first argument string, or the empty string if the first argument string does not contain the second argument string. For example, substring-before("1999/04/01","/") returns 1999.

    +
    ctxt:the XPath Parser context
    nargs:the number of arguments

    Function: xmlXPathSubstringFunction

    void	xmlXPathSubstringFunction	(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +

    Implement the substring() XPath function string substring(string, number, number?) The substring function returns the substring of the first argument starting at the position specified in the second argument with length specified in the third argument. For example, substring("12345",2,3) returns "234". If the third argument is not specified, it returns the substring starting at the position specified in the second argument and continuing to the end of the string. For example, substring("12345",2) returns "2345". More precisely, each character in the string (see [3.6 Strings]) is considered to have a numeric position: the position of the first character is 1, the position of the second character is 2 and so on. The returned substring contains those characters for which the position of the character is greater than or equal to the second argument and, if the third argument is specified, less than the sum of the second and third arguments; the comparisons and addition used for the above follow the standard IEEE 754 rules. Thus: - substring("12345", 1.5, 2.6) returns "234" - substring("12345", 0, 3) returns "12" - substring("12345", 0 div 0, 3) returns "" - substring("12345", 1, 0 div 0) returns "" - substring("12345", -42, 1 div 0) returns "12345" - substring("12345", -1 div 0, 1 div 0) returns ""

    +
    ctxt:the XPath Parser context
    nargs:the number of arguments

    Function: xmlXPathSumFunction

    void	xmlXPathSumFunction		(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +

    Implement the sum() XPath function number sum(node-set) The sum function returns the sum of the values of the nodes in the argument node-set.

    +
    ctxt:the XPath Parser context
    nargs:the number of arguments

    Function: xmlXPathTrailing

    xmlNodeSetPtr	xmlXPathTrailing	(xmlNodeSetPtr nodes1, 
    xmlNodeSetPtr nodes2)
    +

    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.

    +
    nodes1:a node-set
    nodes2:a 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

    Function: xmlXPathTrailingSorted

    xmlNodeSetPtr	xmlXPathTrailingSorted	(xmlNodeSetPtr nodes1, 
    xmlNodeSetPtr nodes2)
    +

    Implements the EXSLT - Sets trailing() function: node-set set:trailing (node-set, node-set)

    +
    nodes1:a node-set, sorted by document order
    nodes2:a node-set, sorted by document order
    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

    Function: xmlXPathTranslateFunction

    void	xmlXPathTranslateFunction	(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +

    Implement the translate() XPath function string translate(string, string, string) The translate function returns the first argument string with occurrences of characters in the second argument string replaced by the character at the corresponding position in the third argument string. For example, translate("bar","abc","ABC") returns the string BAr. If there is a character in the second argument string with no character at a corresponding position in the third argument string (because the second argument string is longer than the third argument string), then occurrences of that character in the first argument string are removed. For example, translate("--aaa--","abc-","ABC")

    +
    ctxt:the XPath Parser context
    nargs:the number of arguments

    Function: xmlXPathTrueFunction

    void	xmlXPathTrueFunction		(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +

    Implement the true() XPath function boolean true()

    +
    ctxt:the XPath Parser context
    nargs:the number of arguments

    Function: xmlXPathValueFlipSign

    void	xmlXPathValueFlipSign		(xmlXPathParserContextPtr ctxt)
    +

    Implement the unary - operation on an XPath object The numeric operators convert their operands to numbers as if by calling the number function.

    +
    ctxt:the XPath Parser context

    Function: xmlXPathVariableLookup

    xmlXPathObjectPtr	xmlXPathVariableLookup	(xmlXPathContextPtr ctxt, 
    const xmlChar * name)
    +

    Search in the Variable array of the context for the given variable value.

    +
    ctxt:the XPath context
    name:the variable name
    Returns:a copy of the value or NULL if not found

    Function: xmlXPathVariableLookupNS

    xmlXPathObjectPtr	xmlXPathVariableLookupNS	(xmlXPathContextPtr ctxt, 
    const xmlChar * name,
    const xmlChar * ns_uri)
    +

    Search in the Variable array of the context for the given variable value.

    +
    ctxt:the XPath context
    name:the variable name
    ns_uri:the variable namespace URI
    Returns:the a copy of the value or NULL if not found

    Function: xmlXPathWrapCString

    xmlXPathObjectPtr	xmlXPathWrapCString	(char * val)
    +

    Wraps a string into an XPath object.

    +
    val:the char * value
    Returns:the newly created object.

    Function: xmlXPathWrapExternal

    xmlXPathObjectPtr	xmlXPathWrapExternal	(void * val)
    +

    Wraps the @val data into an XPath object.

    +
    val:the user data
    Returns:the newly created object.

    Function: xmlXPathWrapNodeSet

    xmlXPathObjectPtr	xmlXPathWrapNodeSet	(xmlNodeSetPtr val)
    +

    Wrap the Nodeset @val in a new xmlXPathObjectPtr

    +
    val:the NodePtr value
    Returns:the newly created object.

    Function: xmlXPathWrapString

    xmlXPathObjectPtr	xmlXPathWrapString	(xmlChar * val)
    +

    Wraps the @val string into an XPath object.

    +
    val:the xmlChar * value
    Returns:the newly created object.

    Function: xmlXPatherror

    void	xmlXPatherror			(xmlXPathParserContextPtr ctxt, 
    const char * file,
    int line,
    int no)
    +

    Formats an error message.

    +
    ctxt:the XPath Parser context
    file:the file name
    line:the line number
    no:the error number

    Daniel Veillard

    diff --git a/doc/html/libxml-xpointer.html b/doc/html/libxml-xpointer.html new file mode 100644 index 0000000..45526de --- /dev/null +++ b/doc/html/libxml-xpointer.html @@ -0,0 +1,83 @@ + + +Module xpointer from libxml2
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    Module xpointer from libxml2

    API Menu
    API Indexes
    Related links

    API to handle XML Pointers Base implementation was made accordingly to W3C Candidate Recommendation 7 June 2000

    Table of Contents

    Structure xmlLocationSet
    struct _xmlLocationSet +
    Typedef xmlLocationSet * xmlLocationSetPtr
    +
    xmlNodePtr	xmlXPtrBuildNodeList	(xmlXPathObjectPtr obj)
    +
    xmlXPathObjectPtr	xmlXPtrEval	(const xmlChar * str, 
    xmlXPathContextPtr ctx)
    +
    void	xmlXPtrEvalRangePredicate	(xmlXPathParserContextPtr ctxt)
    +
    void	xmlXPtrFreeLocationSet		(xmlLocationSetPtr obj)
    +
    void	xmlXPtrLocationSetAdd		(xmlLocationSetPtr cur, 
    xmlXPathObjectPtr val)
    +
    xmlLocationSetPtr	xmlXPtrLocationSetCreate	(xmlXPathObjectPtr val)
    +
    void	xmlXPtrLocationSetDel		(xmlLocationSetPtr cur, 
    xmlXPathObjectPtr val)
    +
    xmlLocationSetPtr	xmlXPtrLocationSetMerge	(xmlLocationSetPtr val1, 
    xmlLocationSetPtr val2)
    +
    void	xmlXPtrLocationSetRemove	(xmlLocationSetPtr cur, 
    int val)
    +
    xmlXPathObjectPtr	xmlXPtrNewCollapsedRange	(xmlNodePtr start)
    +
    xmlXPathContextPtr	xmlXPtrNewContext	(xmlDocPtr doc, 
    xmlNodePtr here,
    xmlNodePtr origin)
    +
    xmlXPathObjectPtr	xmlXPtrNewLocationSetNodeSet	(xmlNodeSetPtr set)
    +
    xmlXPathObjectPtr	xmlXPtrNewLocationSetNodes	(xmlNodePtr start, 
    xmlNodePtr end)
    +
    xmlXPathObjectPtr	xmlXPtrNewRange	(xmlNodePtr start, 
    int startindex,
    xmlNodePtr end,
    int endindex)
    +
    xmlXPathObjectPtr	xmlXPtrNewRangeNodeObject	(xmlNodePtr start, 
    xmlXPathObjectPtr end)
    +
    xmlXPathObjectPtr	xmlXPtrNewRangeNodePoint	(xmlNodePtr start, 
    xmlXPathObjectPtr end)
    +
    xmlXPathObjectPtr	xmlXPtrNewRangeNodes	(xmlNodePtr start, 
    xmlNodePtr end)
    +
    xmlXPathObjectPtr	xmlXPtrNewRangePointNode	(xmlXPathObjectPtr start, 
    xmlNodePtr end)
    +
    xmlXPathObjectPtr	xmlXPtrNewRangePoints	(xmlXPathObjectPtr start, 
    xmlXPathObjectPtr end)
    +
    void	xmlXPtrRangeToFunction		(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +
    xmlXPathObjectPtr	xmlXPtrWrapLocationSet	(xmlLocationSetPtr val)
    +

    Description

    +

    Structure xmlLocationSet

    Structure xmlLocationSet
    struct _xmlLocationSet { + int locNr : number of locations in the set + int locMax : size of the array as allocated + xmlXPathObjectPtr * locTab : array of locations +}

    Function: xmlXPtrBuildNodeList

    xmlNodePtr	xmlXPtrBuildNodeList	(xmlXPathObjectPtr obj)
    +

    Build a node list tree copy of the XPointer result. This will drop Attributes and Namespace declarations.

    +
    obj:the XPointer result from the evaluation.
    Returns:an xmlNodePtr list or NULL. the caller has to free the node tree.

    Function: xmlXPtrEval

    xmlXPathObjectPtr	xmlXPtrEval	(const xmlChar * str, 
    xmlXPathContextPtr ctx)
    +

    Evaluate the XPath Location Path in the given context.

    +
    str:the XPointer expression
    ctx:the XPointer context
    Returns:the xmlXPathObjectPtr resulting from the evaluation or NULL. the caller has to free the object.

    Function: xmlXPtrEvalRangePredicate

    void	xmlXPtrEvalRangePredicate	(xmlXPathParserContextPtr ctxt)
    +

    [8] Predicate ::= '[' PredicateExpr ']' [9] PredicateExpr ::= Expr Evaluate a predicate as in xmlXPathEvalPredicate() but for a Location Set instead of a node set

    +
    ctxt:the XPointer Parser context

    Function: xmlXPtrFreeLocationSet

    void	xmlXPtrFreeLocationSet		(xmlLocationSetPtr obj)
    +

    Free the LocationSet compound (not the actual ranges !).

    +
    obj:the xmlLocationSetPtr to free

    Function: xmlXPtrLocationSetAdd

    void	xmlXPtrLocationSetAdd		(xmlLocationSetPtr cur, 
    xmlXPathObjectPtr val)
    +

    add a new xmlXPathObjectPtr to an existing LocationSet If the location already exist in the set @val is freed.

    +
    cur:the initial range set
    val:a new xmlXPathObjectPtr

    Function: xmlXPtrLocationSetCreate

    xmlLocationSetPtr	xmlXPtrLocationSetCreate	(xmlXPathObjectPtr val)
    +

    Create a new xmlLocationSetPtr of type double and of value @val

    +
    val:an initial xmlXPathObjectPtr, or NULL
    Returns:the newly created object.

    Function: xmlXPtrLocationSetDel

    void	xmlXPtrLocationSetDel		(xmlLocationSetPtr cur, 
    xmlXPathObjectPtr val)
    +

    Removes an xmlXPathObjectPtr from an existing LocationSet

    +
    cur:the initial range set
    val:an xmlXPathObjectPtr

    Function: xmlXPtrLocationSetMerge

    xmlLocationSetPtr	xmlXPtrLocationSetMerge	(xmlLocationSetPtr val1, 
    xmlLocationSetPtr val2)
    +

    Merges two rangesets, all ranges from @val2 are added to @val1

    +
    val1:the first LocationSet
    val2:the second LocationSet
    Returns:val1 once extended or NULL in case of error.

    Function: xmlXPtrLocationSetRemove

    void	xmlXPtrLocationSetRemove	(xmlLocationSetPtr cur, 
    int val)
    +

    Removes an entry from an existing LocationSet list.

    +
    cur:the initial range set
    val:the index to remove

    Function: xmlXPtrNewCollapsedRange

    xmlXPathObjectPtr	xmlXPtrNewCollapsedRange	(xmlNodePtr start)
    +

    Create a new xmlXPathObjectPtr of type range using a single nodes

    +
    start:the starting and ending node
    Returns:the newly created object.

    Function: xmlXPtrNewContext

    xmlXPathContextPtr	xmlXPtrNewContext	(xmlDocPtr doc, 
    xmlNodePtr here,
    xmlNodePtr origin)
    +

    Create a new XPointer context

    +
    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.
    Returns:the xmlXPathContext just allocated.

    Function: xmlXPtrNewLocationSetNodeSet

    xmlXPathObjectPtr	xmlXPtrNewLocationSetNodeSet	(xmlNodeSetPtr set)
    +

    Create a new xmlXPathObjectPtr of type LocationSet and initialize it with all the nodes from @set

    +
    set:a node set
    Returns:the newly created object.

    Function: xmlXPtrNewLocationSetNodes

    xmlXPathObjectPtr	xmlXPtrNewLocationSetNodes	(xmlNodePtr start, 
    xmlNodePtr end)
    +

    Create a new xmlXPathObjectPtr of type LocationSet and initialize it with the single range made of the two nodes @start and @end

    +
    start:the start NodePtr value
    end:the end NodePtr value or NULL
    Returns:the newly created object.

    Function: xmlXPtrNewRange

    xmlXPathObjectPtr	xmlXPtrNewRange	(xmlNodePtr start, 
    int startindex,
    xmlNodePtr end,
    int endindex)
    +

    Create a new xmlXPathObjectPtr of type range

    +
    start:the starting node
    startindex:the start index
    end:the ending point
    endindex:the ending index
    Returns:the newly created object.

    Function: xmlXPtrNewRangeNodeObject

    xmlXPathObjectPtr	xmlXPtrNewRangeNodeObject	(xmlNodePtr start, 
    xmlXPathObjectPtr end)
    +

    Create a new xmlXPathObjectPtr of type range from a not to an object

    +
    start:the starting node
    end:the ending object
    Returns:the newly created object.

    Function: xmlXPtrNewRangeNodePoint

    xmlXPathObjectPtr	xmlXPtrNewRangeNodePoint	(xmlNodePtr start, 
    xmlXPathObjectPtr end)
    +

    Create a new xmlXPathObjectPtr of type range from a node to a point

    +
    start:the starting node
    end:the ending point
    Returns:the newly created object.

    Function: xmlXPtrNewRangeNodes

    xmlXPathObjectPtr	xmlXPtrNewRangeNodes	(xmlNodePtr start, 
    xmlNodePtr end)
    +

    Create a new xmlXPathObjectPtr of type range using 2 nodes

    +
    start:the starting node
    end:the ending node
    Returns:the newly created object.

    Function: xmlXPtrNewRangePointNode

    xmlXPathObjectPtr	xmlXPtrNewRangePointNode	(xmlXPathObjectPtr start, 
    xmlNodePtr end)
    +

    Create a new xmlXPathObjectPtr of type range from a point to a node

    +
    start:the starting point
    end:the ending node
    Returns:the newly created object.

    Function: xmlXPtrNewRangePoints

    xmlXPathObjectPtr	xmlXPtrNewRangePoints	(xmlXPathObjectPtr start, 
    xmlXPathObjectPtr end)
    +

    Create a new xmlXPathObjectPtr of type range using 2 Points

    +
    start:the starting point
    end:the ending point
    Returns:the newly created object.

    Function: xmlXPtrRangeToFunction

    void	xmlXPtrRangeToFunction		(xmlXPathParserContextPtr ctxt, 
    int nargs)
    +

    Implement the range-to() XPointer function

    +
    ctxt:the XPointer Parser context
    nargs:the number of args

    Function: xmlXPtrWrapLocationSet

    xmlXPathObjectPtr	xmlXPtrWrapLocationSet	(xmlLocationSetPtr val)
    +

    Wrap the LocationSet @val in a new xmlXPathObjectPtr

    +
    val:the LocationSet value
    Returns:the newly created object.

    Daniel Veillard

    diff --git a/doc/html/libxml-xzlib.html b/doc/html/libxml-xzlib.html new file mode 100644 index 0000000..c4dfdc3 --- /dev/null +++ b/doc/html/libxml-xzlib.html @@ -0,0 +1,16 @@ + + +Module xzlib from libxml2
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    Module xzlib from libxml2

    API Menu
    API Indexes
    Related links

    Table of Contents

    #define LIBXML2_XZLIB_H
    Typedef void * xzFile
    +

    Description

    +

    Macro: LIBXML2_XZLIB_H

    #define LIBXML2_XZLIB_H

    +

    Daniel Veillard

    diff --git a/doc/html/libxml.devhelp b/doc/html/libxml.devhelp new file mode 100644 index 0000000..006b4bf --- /dev/null +++ b/doc/html/libxml.devhelp @@ -0,0 +1,618 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/html/right.png b/doc/html/right.png new file mode 100644 index 0000000..92832e3 Binary files /dev/null and b/doc/html/right.png differ diff --git a/doc/html/up.png b/doc/html/up.png new file mode 100644 index 0000000..85b3e2a Binary files /dev/null and b/doc/html/up.png differ diff --git a/doc/index.html b/doc/index.html new file mode 100644 index 0000000..803b795 --- /dev/null +++ b/doc/index.html @@ -0,0 +1,77 @@ + + + + + The XML C parser and toolkit of Gnome + + +
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    The XML C parser and toolkit of Gnome

    libxml

    Main Menu
    Related links

    "Programming +with libxml2 is like the thrilling embrace of an exotic stranger." Mark +Pilgrim

    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 MIT +License. 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 variety of language bindings make it available in +other environments.

    Libxml2 is known to be very portable, the library should build and work +without serious troubles on a variety of systems (Linux, Unix, Windows, +CygWin, MacOS, MacOS X, RISC Os, OS/2, VMS, QNX, MVS, VxWorks, ...)

    Libxml2 implements a number of existing standards related to markup +languages:

    In most cases libxml2 tries to implement the specifications in a +relatively strictly compliant way. As of release 2.4.16, libxml2 passed all +1800+ tests from the OASIS XML Tests +Suite.

    To some extent libxml2 provides support for the following additional +specifications but doesn't claim to implement them completely:

      +
    • Document Object Model (DOM) http://www.w3.org/TR/DOM-Level-2-Core/ + the document model, but it doesn't implement the API itself, gdome2 does + this on top of libxml2
    • +
    • RFC 959 : + libxml2 implements a basic FTP client code
    • +
    • RFC 1945 : + HTTP/1.0, again a basic HTTP client code
    • +
    • SAX: a SAX2 like interface and a minimal SAX1 implementation compatible + with early expat versions
    • +

    A partial implementation of XML Schemas Part +1: Structure is being worked on but it would be far too early to make any +conformance statement about it at the moment.

    Separate documents:

    Hosting sponsored by Open Source CMS services from AOE media.

    Logo designed by Marc Liyanage.

    Daniel Veillard

    + diff --git a/doc/index.py b/doc/index.py new file mode 100755 index 0000000..1895d84 --- /dev/null +++ b/doc/index.py @@ -0,0 +1,1258 @@ +#!/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 dictionary 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))""", + "AllQueries" : """CREATE TABLE AllQueries ( + 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, verbose = 1): + global TABLES + + if db == None: + return -1 + c = db.cursor() + nbtables = c.execute("show tables") + if verbose: + 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() + if verbose: + 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]) + if verbose: + 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, verbose = 1): + 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, verbose) + 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 dictionary 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 " % (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 " % (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 " % (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 " % (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 " % (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 # +# # +######################################################################### +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(): + try: + openMySQL() + except: + print "Failed to open the database" + print sys.exc_type, sys.exc_value + sys.exit(1) + + 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..ce1caf3 --- /dev/null +++ b/doc/interface.html @@ -0,0 +1,59 @@ + + +The SAX interface
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    The XML C parser and toolkit of Gnome

    The SAX interface

    Developer Menu
    API Indexes
    Related links

    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 callback-based interface 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.

    To get more detailed step-by-step guidance on using the SAX interface of +libxml, see the nice +documentation.written by James +Henstridge.

    You can debug the SAX behaviour by using the testSAX +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:

    SAX.setDocumentLocator()
    +SAX.startDocument()
    +SAX.getEntity(amp)
    +SAX.startElement(EXAMPLE, prop1='gnome is great', prop2='&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()

    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.

    Daniel Veillard

    diff --git a/doc/intro.html b/doc/intro.html new file mode 100644 index 0000000..551bea4 --- /dev/null +++ b/doc/intro.html @@ -0,0 +1,32 @@ + + +Introduction
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    The XML C parser and toolkit of Gnome

    Introduction

    Main Menu
    Related links

    This document describes libxml, the XML C parser and toolkit developed for the +Gnome project. XML is a standard for building tag-based +structured documents/data.

    Here are some key points about libxml:

      +
    • Libxml2 exports Push (progressive) and Pull (blocking) type parser + interfaces for both XML and HTML.
    • +
    • Libxml2 can do DTD validation at parse time, using a parsed document + instance, or with an arbitrary DTD.
    • +
    • Libxml2 includes complete XPath, XPointer and XInclude implementations.
    • +
    • 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.
    • +
    • Basic support for HTTP and FTP client allowing applications to fetch + remote resources.
    • +
    • The design is modular, most of the extensions can be compiled out.
    • +
    • The internal document representation is as close as possible to the DOM interfaces.
    • +
    • Libxml2 also has a SAX like interface; + the interface is designed to be compatible with Expat.
    • +
    • This library is released under the MIT + License. See the Copyright file in the distribution for the precise + wording.
    • +

    Warning: unless you are forced to because your application links with a +Gnome-1.X library requiring it, Do Not Use libxml1, use +libxml2

    Daniel Veillard

    diff --git a/doc/library.html b/doc/library.html new file mode 100644 index 0000000..e51139a --- /dev/null +++ b/doc/library.html @@ -0,0 +1,158 @@ + + +The parser interfaces
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    The XML C parser and toolkit of Gnome

    The parser interfaces

    Developer Menu
    API Indexes
    Related links

    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 look at DOM.

    The parser interfaces for XML are +separated from the HTML parser +interfaces. Let's have a look at how the XML parser can be called:

    Invoking the parser : the pull method

    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":

    +
    xmlDocPtr xmlParseMemory(char *buffer, int size);
    +

    Parse a null-terminated string containing the document.

    +
    +
    +
    xmlDocPtr xmlParseFile(const char *filename);
    +

    Parse an XML document contained in a (possibly compressed) + file.

    +
    +

    The parser returns a pointer to the document structure (or NULL in case of +failure).

    Invoking the parser: the push method

    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:

    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);

    and here is a simple example showing how to use the interface:

                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 > 0) {
    +                    ctxt = xmlCreatePushParserCtxt(NULL, NULL,
    +                                chars, res, filename);
    +                    while ((res = fread(chars, 1, size, f)) > 0) {
    +                        xmlParseChunk(ctxt, chars, res, 0);
    +                    }
    +                    xmlParseChunk(ctxt, chars, 0, 1);
    +                    doc = ctxt->myDoc;
    +                    xmlFreeParserCtxt(ctxt);
    +                }
    +            }

    The HTML parser embedded into libxml2 also has a push interface; the +functions are just prefixed by "html" rather than "xml".

    Invoking the parser: the SAX interface

    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 +James +Henstridge's documentation). Note also that the push interface can be +limited to SAX: just use the two first arguments of +xmlCreatePushParserCtxt().

    Building a tree from scratch

    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 <libxml/tree.h>.) For example, here is a piece of +code that produces the XML document used in the previous examples:

        #include <libxml/tree.h>
    +    xmlDocPtr doc;
    +    xmlNodePtr tree, subtree;
    +
    +    doc = xmlNewDoc("1.0");
    +    doc->children = xmlNewDocNode(doc, NULL, "EXAMPLE", NULL);
    +    xmlSetProp(doc->children, "prop1", "gnome is great");
    +    xmlSetProp(doc->children, "prop2", "& linux too");
    +    tree = xmlNewChild(doc->children, NULL, "head", NULL);
    +    subtree = xmlNewChild(tree, NULL, "title", "Welcome to Gnome");
    +    tree = xmlNewChild(doc->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");

    Not really rocket science ...

    Traversing the tree

    Basically by including "tree.h" your +code has access to the internal structure of all the elements of the tree. +The names should be somewhat simple like parent, +children, next, prev, +properties, etc... For example, still with the previous +example:

    doc->children->children->children

    points to the title element,

    doc->children->children->next->children->children

    points to the text node containing the chapter title "The Linux +adventure".

    NOTE: XML allows PIs and comments to be +present before the document root, so doc->children may point +to an element which is not the document Root Element; a function +xmlDocGetRootElement() was added for this purpose.

    Modifying the tree

    Functions are provided for reading and writing the document content. Here +is an excerpt from the tree API:

    +
    xmlAttrPtr xmlSetProp(xmlNodePtr node, const xmlChar *name, const + xmlChar *value);
    +

    This sets (or changes) an attribute carried by an ELEMENT node. + The value can be NULL.

    +
    +
    +
    const xmlChar *xmlGetProp(xmlNodePtr node, const xmlChar + *name);
    +

    This function returns a pointer to new copy of the property + content. Note that the user must deallocate the result.

    +
    +

    Two functions are provided for reading and writing the text associated +with elements:

    +
    xmlNodePtr xmlStringGetNodeList(xmlDocPtr doc, const xmlChar + *value);
    +

    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 &Gnome; will be stored + internally as entity nodes, hence the result of the function may not be + a single node.

    +
    +
    +
    xmlChar *xmlNodeListGetString(xmlDocPtr doc, xmlNodePtr list, int + inLine);
    +

    This function is the inverse of + xmlStringGetNodeList(). 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 &Gnome; + XML encoding in the string, it will substitute it with its value (say, + "GNU Network Object Model Environment").

    +
    +

    Saving a tree

    Basically 3 options are possible:

    +
    void xmlDocDumpMemory(xmlDocPtr cur, xmlChar**mem, int + *size);
    +

    Returns a buffer into which the document has been saved.

    +
    +
    +
    extern void xmlDocDump(FILE *f, xmlDocPtr doc);
    +

    Dumps a document to an open file descriptor.

    +
    +
    +
    int xmlSaveFile(const char *filename, xmlDocPtr cur);
    +

    Saves the document to a file. In this case, the compression + interface is triggered if it has been turned on.

    +
    +

    Compression

    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:

    +
    int xmlGetDocCompressMode (xmlDocPtr doc);
    +

    Gets the document compression ratio (0-9).

    +
    +
    +
    void xmlSetDocCompressMode (xmlDocPtr doc, int mode);
    +

    Sets the document compression ratio.

    +
    +
    +
    int xmlGetCompressMode(void);
    +

    Gets the default compression ratio.

    +
    +
    +
    void xmlSetCompressMode(int mode);
    +

    Sets the default compression ratio.

    +
    +

    Daniel Veillard

    diff --git a/doc/libxml-doc.el b/doc/libxml-doc.el new file mode 100644 index 0000000..43d9688 --- /dev/null +++ b/doc/libxml-doc.el @@ -0,0 +1,222 @@ +;;; libxml-doc.el - look up libxml-symbols and start browser on documentation + +;; Author: Felix Natter , Geert Kloosterman +;; Created: Jun 21 2000 +;; Keywords: libxml documentation + +;; 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., 675 Mass Ave, Cambridge, MA 02139, USA. + + ;;; Commentary / README + +;; these functions allow you to browse the libxml documentation +;; (using lynx within emacs by default) +;; +;; ----- Installing +;; 1. add the following to ~/.emacs (adapt path and remove comments !) +;; (autoload 'libxmldoc-lookup-symbol "~/elisp/libxml-doc" +;; "Look up libxml-symbols and start browser on documentation." t) +;; or put this file in load-path and use this: +;; (autoload 'libxmldoc-lookup-symbol "libxml-doc" +;; "Look up libxml-symbols and start browser on documentation." t) +;; +;; 2. adapt libxmldoc-root: +;; i.e. (setq libxmldoc-root "~/libxml2-2.0.0/doc/html") +;; +;; 3. change the filter-regex: by default, cpp-defines, callbacks and +;; html-functions are excluded (C-h v libxmldoc-filter-regexp) +;; +;; 4. consider customizing libxmldoc-browse-url (lynx by default); +;; cannot use Emacs/W3 4.0pre46 because it has problems with the html +;; +;; ----- Using +;; call M-x libxmldoc-lookup-symbol: this will prompt with completion and +;; then open the browser showing the documentation. If the word around the +;; point matches a symbol, that is used instead. You can also call +;; libxmldoc-lookup-symbol noninteractively and pass the symbol. + +;; Note: +;; an alternative to libxml-doc is emacs tags: +;; $ cd libxml2-2.3.8 +;; $ make TAGS +;; $ emacs +;; M-. (M-x find-tag) ... or +;; M-x tags-search ... RET M-, M-, ... +;; (for more information: info emacs RET m Tags RET) + + + ;;; ChangeLog: +;; Wed Jun 21 01:07:12 2000: initial release +;; Wed Jun 21 01:45:29 2000: added libxmldoc-lookup-symbol-at-point +;; Wed Jun 21 23:37:58 2000: libxmldoc-lookup-symbol now uses +;; (thing-at-point 'word) if it matches a symbol +;; Thu Jun 22 02:37:46 2000: filtering is only done for completion +;; Thu Jun 22 21:03:41 2000: libxmldoc-browse-url can be customized +;; Thu May 31 2001 (Geert): +;; - Changed the `gnome-xml-' html file prefix into `libxml-'. +;; - Changed the 'word match from thing-at-point into 'symbol. +;; With 'word, identifiers with an underscore (e.g. BAD_CAST) +;; don't get matched. +;; Fri Jun 8 16:29:18 2001, Sat Jun 23 16:19:47 2001: +;; complete rewrite of libxmldoc-lookup-symbol +;; by Felix Natter , Geert Kloosterman : +;; - Now keeps the list of symbols between calls to speed things up. +;; - filtering is only used when no symbol is passed and +;; thing-at-point does not match a symbol and "*" + thing-at-point +;; does not match a symbol (this is used to catch callbacks) and +;; libxmldoc-filter-regexp is non-nil. +;; Sat Jun 23 16:20:34 2001: update the docstrings +;; Sat Jun 23 16:22:54 2001 (Geert Kloosterman ): +;; update README: use autoload instead of load+c-mode-hook +;; Sat Jul 7 19:00:31 2001: fixed a problem with XEmacs: the +;; string-match of XEmacs when used in completing-read used the +;; minibuffer's value of case-fold-search, and not the one in the +;; c-mode buffer that we had set => so there's a new *-string-match-cs +;; (case sensitive) function which binds case-fold-search and runs string-match +;; Wed Sep 1 20:26:29 2004: adapted for libxml2-2.6.9: handle +;; document-relative (#XXX) links + +;;; TODO: +;; - use command-execute for libxmldoc-browse-url +;; - keep (match-string 1) in a variable (libxmldoc-get-list-of-symbols) +;; (only if it improves performance) +;; - check the (require ..)-statements + + ;;; Code: + +(require 'browse-url) +(require 'term) + +(defvar libxmldoc-root "~/src/libxml2-2.3.8/doc/html" + "The root-directory of the libxml2-documentation (~ will be expanded).") +(defvar libxmldoc-filter-regexp "^html\\|^\\*\\|^[A-Z_]+" + "Symbols that match this regular expression will be excluded when doing +completion and no symbol is specified. + For example: + callbacks: \"^\\\\*\" + cpp-defines: \"[A-Z_]+\" + xml-functions \"^xml\" + html-functions \"^html\" + sax-functions \".*SAX\" +By default, callbacks, cpp-defines and html* are excluded. +Set this to nil if you don't want filtering.") +(defvar libxmldoc-browse-url 'browse-url-lynx-emacs + "Browser used for browsing documentation. Emacs/W3 4.0pre46 cannot handle +the html (and would be too slow), so lynx-emacs is used by default.") +(defvar libxmldoc-symbol-history nil + "History for looking up libxml-symbols.") +(defvar libxmldoc-symbols nil + "The list of libxml-symbols.") + + ;;;; public functions + +(defun libxmldoc-lookup-symbol(&optional symbol) + "Look up xml-symbol." (interactive) + ;; setting case-fold-search is now done in libxmldoc-string-match-cs + + ;; Build up a symbol list if necessary + (if (null libxmldoc-symbols) + (setq libxmldoc-symbols (libxmldoc-get-list-of-symbols))) + + (cond + (symbol ;; symbol is specified as argument + (if (not (assoc symbol libxmldoc-symbols)) + (setq symbol nil))) + ((assoc (thing-at-point 'symbol) libxmldoc-symbols) + (setq symbol (thing-at-point 'symbol))) + ;; this is needed to catch callbacks + ;; note: this could be rewritten to use (thing-at-point 'word) + ((assoc (concat "*" (thing-at-point 'symbol)) libxmldoc-symbols) + (setq symbol (concat "*" (thing-at-point 'symbol)))) + ) + + ;; omit "" t) from call to completing-read for the sake of xemacs + (setq symbol (completing-read + "Libxml: " libxmldoc-symbols + (if (or symbol (null libxmldoc-filter-regexp)) + nil + '(lambda(key,value) + (not (libxmldoc-string-match-cs libxmldoc-filter-regexp + (car key,value))))) + t symbol + 'libxmldoc-symbol-history)) + + + ;; start browser + (apply libxmldoc-browse-url + (list (cdr (assoc symbol libxmldoc-symbols))))) + +;; (if (or symbol +;; (null libxmldoc-filter-regexp)) +;; libxmldoc-symbols +;; (mapcar +;; '(lambda(key,value) +;; (if (null (string-match +;; libxmldoc-filter-regexp +;; (car key,value))) +;; key,value)) +;; libxmldoc-symbols)) + + +;;;; internal + +(defun libxmldoc-string-match-cs(regexp str) + "This is needed because string-match in XEmacs uses the current- +buffer's value of case-fold-search (different from GNU Emacs)." + (let ((case-fold-search nil)) + (string-match regexp str))) + +(defun libxmldoc-get-list-of-symbols() + "Get the list of html-links in the libxml-documentation." + (let ((files + (directory-files + libxmldoc-root t + (concat "^" (if (file-exists-p (concat libxmldoc-root + "/libxml-parser.html")) + "libxml-" + "gnome-xml-") + ".*\\.html$") t)) + (symbols ()) + (case-fold-search t) + (uri)) + (message "collecting libxml-symbols...") + (while (car files) + (message "processing %s" (car files)) + (with-temp-buffer + (insert-file-contents (car files)) + (goto-char (point-min)) + (while (re-search-forward + "]*href[ \t\n]*=[ \t\n]*\"\\([^=>]*\\)\"[^>]*>" nil t nil) + ;; is it a relative link (#XXX)? + (if (char-equal (elt (match-string 1) 0) ?#) + (setq uri (concat "file://" (car files) (match-string 1))) + (setq uri (concat "file://" (expand-file-name libxmldoc-root) + "/" (match-string 1)))) + (if (not (re-search-forward "\\([^<]*\\)<" nil t nil)) + (error "regexp error while getting libxml-symbols..")) + ;; this needs add-to-list because i.e. xmlChar appears often + (if (not (string-equal "" (match-string 1))) + (add-to-list 'symbols (cons (match-string 1) uri)))) + ;; (setq symbols (cons (cons (match-string 1) uri) symbols))) + ) + (setq files (cdr files))) + symbols)) + +(provide 'libxmldoc) + +;;; libxml-doc.el ends here + +;;; Local Variables: +;;; indent-tabs-mode: nil +;;; End: diff --git a/doc/libxml.fig b/doc/libxml.fig new file mode 100644 index 0000000..e721dd2 --- /dev/null +++ b/doc/libxml.fig @@ -0,0 +1,72 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +2 3 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 7 + 4050 2925 3225 2925 3225 3750 2250 3750 2250 2325 4050 2325 + 4050 2925 +2 3 0 1 0 11 50 0 20 0.000 0 0 7 0 0 7 + 3300 3000 3300 3750 6075 3750 6075 4200 8625 4200 8625 3000 + 3300 3000 +2 2 0 1 0 11 50 0 20 0.000 0 0 7 0 0 5 + 975 3825 6000 3825 6000 4200 975 4200 975 3825 +2 2 0 1 0 11 50 0 20 0.000 0 0 7 0 0 5 + 975 4275 4125 4275 4125 5100 975 5100 975 4275 +2 2 0 1 0 11 50 0 20 0.000 0 0 7 0 0 5 + 4125 4275 6000 4275 6000 5100 4125 5100 4125 4275 +2 2 0 1 0 11 50 0 20 0.000 0 0 7 0 0 5 + 6000 4275 8100 4275 8100 5100 6000 5100 6000 4275 +2 2 0 1 0 11 50 0 20 0.000 0 0 7 0 0 5 + 1725 5175 6450 5175 6450 5775 1725 5775 1725 5175 +2 2 0 1 0 11 50 0 20 0.000 0 0 7 0 0 5 + 2625 5850 6450 5850 6450 6300 2625 6300 2625 5850 +2 2 0 1 0 11 50 0 20 0.000 0 0 7 0 0 5 + 6525 5175 8100 5175 8100 5925 6525 5925 6525 5175 +2 2 0 1 0 11 50 0 20 0.000 0 0 7 0 0 5 + 4275 2325 7050 2325 7050 2925 4275 2925 4275 2325 +2 2 0 1 0 16 50 0 -1 0.000 0 0 -1 0 0 5 + 6525 1125 7650 1125 7650 1575 6525 1575 6525 1125 +2 2 0 1 0 11 50 0 33 0.000 0 0 7 0 0 5 + 8835 3975 10335 3975 10335 4425 8835 4425 8835 3975 +2 1 0 2 0 16 50 0 20 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 8880 4245 3630 4245 +2 2 0 1 0 16 50 0 -1 0.000 0 0 -1 0 0 5 + 7575 2340 8880 2340 8880 2925 7575 2925 7575 2340 +2 2 0 1 0 11 50 0 20 0.000 0 0 -1 0 0 5 + 4860 6435 6255 6435 6255 6825 4860 6825 4860 6435 +2 2 0 1 0 11 50 0 20 0.000 0 0 -1 0 0 5 + 6630 6060 8025 6060 8025 6450 6630 6450 6630 6060 +2 2 0 1 0 11 50 0 20 0.000 0 0 -1 0 0 5 + 3750 1650 5025 1650 5025 2175 3750 2175 3750 1650 +2 2 0 1 0 11 50 0 20 0.000 0 0 -1 0 0 5 + 5400 1125 6375 1125 6375 1575 5400 1575 5400 1125 +2 2 0 1 0 11 50 0 20 0.000 0 0 -1 0 0 5 + 5100 1650 6450 1650 6450 2175 5100 2175 5100 1650 +2 3 0 1 0 11 50 0 20 0.000 0 0 -1 0 0 7 + 6525 2175 6525 1650 7500 1650 7500 2925 7200 2925 7200 2175 + 6525 2175 +4 0 0 50 0 0 18 0.0000 4 255 1335 1800 4800 XML parser\001 +4 0 0 50 0 0 18 0.0000 4 255 1530 4275 4800 HTML parser\001 +4 0 0 50 0 0 18 0.0000 4 195 555 3600 4125 SAX\001 +4 0 0 50 0 0 18 0.0000 4 255 765 6525 4800 Export\001 +4 0 0 50 0 0 18 0.0000 4 195 525 5700 3525 Tree\001 +4 0 0 50 0 0 18 0.0000 4 195 1155 2550 2700 GtkHtml2\001 +4 0 0 50 0 0 18 0.0000 4 195 555 3750 5550 I18N\001 +4 0 0 50 0 0 18 0.0000 4 255 2775 3300 6150 I/O layer (FTP/HTTP/...)\001 +4 0 0 50 0 0 18 0.0000 4 195 465 7050 5625 URI\001 +4 0 0 50 0 0 18 0.0000 4 195 690 5025 2700 XPath\001 +4 0 0 50 0 0 18 0.0000 4 195 1005 3900 2025 XPointer\001 +4 0 0 50 0 0 18 0.0000 4 195 645 6675 2025 C14N\001 +4 0 0 50 0 0 18 0.0000 4 195 675 5325 2025 XSLT\001 +4 0 0 50 0 0 18 0.0000 4 195 840 5475 1425 EXSLT\001 +4 0 0 50 0 0 18 0.0000 4 255 930 6600 1425 XMLSig\001 +4 0 0 50 0 0 18 0.0000 4 195 990 9015 4275 Schemas\001 +4 0 0 50 0 0 18 0.0000 4 195 960 7680 2730 Gdome2\001 +4 0 0 50 0 0 18 0.0000 4 195 915 5130 6720 Threads\001 +4 0 0 50 0 0 18 0.0000 4 255 945 6825 6300 Catalogs\001 diff --git a/doc/libxml.gif b/doc/libxml.gif new file mode 100644 index 0000000..e24adf8 Binary files /dev/null and b/doc/libxml.gif differ diff --git a/doc/libxml2-api.xml b/doc/libxml2-api.xml new file mode 100644 index 0000000..a0a0117 --- /dev/null +++ b/doc/libxml2-api.xml @@ -0,0 +1,18510 @@ + + + + + old DocBook SGML parser + interface for a DocBook SGML non-verifying parser This code is DEPRECATED, and should not be used anymore. + Daniel Veillard + + + + + + + + + + + + + + + + + + + + + interface for an HTML 4.0 non-verifying parser + 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. + Daniel Veillard + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + specific APIs to process HTML tree, especially serialization + this module implements a few function needed to process tree in an HTML specific way. + Daniel Veillard + + + + + + + + + + + + + + + + + + + + + + + + + + Old SAX version 1 handler, deprecated + DEPRECATED set of SAX version 1 interfaces used to build the DOM tree. + Daniel Veillard + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SAX2 parser interface used to build the DOM tree + those are the default SAX2 interfaces used by the library when building DOM tree. + Daniel Veillard + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Provide Canonical XML and Exclusive XML Canonicalization + the c14n modules provides a "Canonical XML" implementation + Aleksey Sanin <aleksey@aleksey.com> + + + + + + + + + + + + interfaces to the Catalog handling system + the catalog module implements the support for XML Catalogs and SGML catalogs + Daniel Veillard + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Unicode character range checking + 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 + William Brack <wbrack@mmm.com.hk> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tree debugging APIs + Interfaces to a set of routines used for debugging the tree produced by the XML parser. + Daniel Veillard + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + string dictionary + dictionary of reusable strings, just used to avoid allocation and freeing operations. + Daniel Veillard + + + + + + + + + + + + + + + + + + interface for the encoding conversion functions + 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. + Daniel Veillard + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + interface for the XML entities handling + this module provides some of the entity API needed for the parser and applications. + Daniel Veillard + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + interface for all global variables of the library + 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 + Gary Pennington <Gary.Pennington@uk.sun.com>, Daniel Veillard + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Chained hash tables + This module implements the hash table support used in various places in the library. + Bjorn Reese <bjorn.reese@systematic.dk> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + lists interfaces + this module implement the list support used in various place in the library. + Gary Pennington <Gary.Pennington@uk.sun.com> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + minimal FTP implementation + minimal FTP implementation allowing to fetch resources like external subset. + Daniel Veillard + + + + + + + + + + + + + + + + + + + + + + + + + + + + + minimal HTTP implementation + minimal HTTP implementation allowing to fetch resources like external subset. + Daniel Veillard + + + + + + + + + + + + + + + + + + + + the core parser module + Interfaces, constants and types related to the XML parser + Daniel Veillard + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + internals routines and limits exported by the parser. + 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. + Daniel Veillard + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + pattern expression handling + allows to compile and test pattern expressions for nodes either in a tree or based on a parser state. + Daniel Veillard + + + + + + + + + + + + + + + + + + + + + + + + + + + implementation of the Relax-NG validation + implementation of the Relax-NG validation + Daniel Veillard + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + internal interfaces for XML Schemas + internal interfaces for the XML Schemas handling and schema validity checking The Schemas development is a Work In Progress. Some of those interfaces are not garanteed to be API or ABI stable ! + Daniel Veillard + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + XML Schemastron implementation + interface to the XML Schematron validity checking. + Daniel Veillard + + + + + + + + + + + + + + + + + + + + + + + + + + + + + interfaces for thread handling + set of generic threading related routines should work with pthreads, Windows native or TLS threads + Daniel Veillard + + + + + + + + + + + + + + + + + + + + + + + interfaces for tree manipulation + 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 + Daniel Veillard + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + library of generic URI related routines + library of generic URI related routines Implements RFC 2396 + Daniel Veillard + + + + + + + + + + + + + + + + + + + + + The DTD validation + API for the DTD handling and the validity checking + Daniel Veillard + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + implementation of XInclude + API to handle XInclude processing, implements the World Wide Web Consortium Last Call Working Draft 10 November 2003 + Daniel Veillard + + + + + + + + + + + + + + + + + + + + + + + + + unfinished XLink detection module + unfinished XLink detection module + Daniel Veillard + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + interface for the I/O interfaces used by the parser + interface for the I/O interfaces used by the parser + Daniel Veillard + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + API to build regexp automata + the API to build regexp automata + Daniel Veillard + + + + + + + + + + + + + + + + + + + + + + + + + + error handling + the API used to report errors + Daniel Veillard + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + macros for marking symbols as exportable/importable. + macros for marking symbols as exportable/importable. + Igor Zlatovic <igor@zlatkovic.com> + + + + + + + + + interface for the memory allocator + provides interfaces for the memory allocator, including debugging capabilities. + Daniel Veillard + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + dynamic module loading + basic API for dynamic module loading, used by libexslt added in 2.6.17 + Joel W. Reed + + + + + + + + + + + + the XMLReader implementation + API of the XML streaming API based on C# interfaces. + Daniel Veillard + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + regular expressions handling + basic API for libxml regular expressions handling used for XML Schemas and validation. + Daniel Veillard + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + the XML document serializer + API to save document or subtree of document + Daniel Veillard + + + + + + + + + + + + + + + + + + + + + + + + incomplete XML Schemas structure implementation + interface to the XML Schemas handling and schema validity checking, it is incomplete right now. + Daniel Veillard + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + implementation of XML Schema Datatypes + module providing the XML Schema Datatypes implementation both definition and validity checking + Daniel Veillard + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + set of routines to process strings + type and interfaces needed for the internal string handling of the library, especially UTF8 processing. + Daniel Veillard + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Unicode character APIs + API for the Unicode character APIs This file is automatically generated from the UCS description files of the Unicode Character Database + Daniel Veillard + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + compile-time version informations + compile-time version informations for the XML library + Daniel Veillard + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text writing API for XML + text writing API for XML + Alfred Mickautsch <alfred@mickautsch.de> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + XML Path Language implementation + 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 + Daniel Veillard + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + internal interfaces for XML Path Language implementation + internal interfaces for XML Path Language implementation used to build new modules on top of XPath like XPointer and XSLT + Daniel Veillard + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + API to handle XML Pointers + API to handle XML Pointers Base implementation was made accordingly to W3C Candidate Recommendation 7 June 2000 + Daniel Veillard + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Macro used to signal to GCC unused function parameters + + + Macro to cast a string to an xmlChar * when one know its safe. + + + default buffer size 4000. + + + Macro to try to cast the value on the top of the XPath stack to a boolean. + + + Macro to try to cast the value on the top of the XPath stack to a number. + + + Macro to try to cast the value on the top of the XPath stack to a string. + + + Macro to check that the number of args passed to an XPath function matches. + + + + Macro to return from the function if an XPath error was detected. + + + Macro to return 0 from the function if an XPath error was detected. + + + Macro to check that the value on top of the XPath stack is of a given type. + + + + Macro to check that the value on top of the XPath stack is of a given type. Return(0) in case of failure + + + + 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 + + + Whether the memory debugging is configured in + + + Macro. A comment in a HTML document is really implemented the same way as a comment in an XML document. + + + Macro. An entity reference in a HTML document is really implemented the same way as an entity reference in an XML document. + + + Macro. A processing instruction in a HTML document is really implemented the same way as a processing instruction in an XML document. + + + Macro. A preserved node in a HTML document is really implemented the same way as a CDATA section in an XML document. + + + Macro. A text node in a HTML document is really implemented the same way as a text node in an XML document. + + + The parser tries to always have that amount of input ready. One of the point is providing context when reporting errors. + + + macro used to provide portability of code to windows sockets the value to be used when the socket is not valid + + + Macro to check [0-9] + + + + Macro to check [a-zA-Z] + + + + Macro to check the following production in the XML spec: [85] BaseChar ::= ... long list see REC ... + + + + Macro to check the following production in the XML spec: [3] S ::= (#x20 | #x9 | #xD | #xA)+ + + + + Behaviour same as IS_BLANK + + + + Macro to check the following production in the XML spec: [2] Char ::= #x9 | #xA | #xD | [#x20...] any byte character in the accepted range + + + + 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. + + + + Behaves like IS_CHAR on single-byte value + + + + Macro to check the following production in the XML spec: [87] CombiningChar ::= ... long list see REC ... + + + + Always false (all combining chars > 0xff) + + + + Macro to check the following production in the XML spec: [88] Digit ::= ... long list see REC ... + + + + Behaves like IS_DIGIT but with a single byte argument + + + + 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] + + + + Behaves like IS_EXTENDER but with a single-byte argument + + + + Macro to check the following production in the XML spec: [86] Ideographic ::= [#x4E00-#x9FA5] | #x3007 | [#x3021-#x3029] + + + + Macro to check the following production in the XML spec: [84] Letter ::= BaseChar | Ideographic + + + + Macro behaves like IS_LETTER, but only check base chars + + + + Macro to check the following production in the XML spec: [13] PubidChar ::= #x20 | #xD | #xA | [a-zA-Z0-9] | [-'()+,./:=?;!*#@$_%] + + + + Same as IS_PUBIDCHAR but for single-byte value + + + + Macro used to express that the API use the new buffers for xmlParserInputBuffer and xmlOutputBuffer. The change was introduced in 2.9.0. + + + Macro used to indicate to GCC this is an allocator function + + + Macro used to indicate to GCC the parameter are printf like + + + Whether the automata interfaces are compiled in + + + Whether the Canonicalization support is configured in + + + Whether the Catalog support is configured in + + + Whether Debugging module is configured in + + + Whether the runtime debugging is configured in + + + + + Whether the SGML Docbook support is configured in + + + the version string like "1.2.3" + + + Whether the formal expressions interfaces are compiled in + + + Whether the FTP support is configured in + + + Whether the HTML support is configured in + + + Whether the HTTP support is configured in + + + Whether iconv support is available + + + Whether icu support is available + + + Whether ISO-8859-* support is made available in case iconv is not + + + Whether the deprecated APIs are compiled in for compatibility + + + Whether the Lzma support is compiled in + + + Whether the module interfaces are compiled in + + + the string suffix used by dynamic modules (usually shared libraries) + + + Whether the serialization/saving support is configured in + + + Whether the xmlPattern node selection interface is configured in + + + Whether the push parsing interfaces are configured in + + + Whether the xmlReader parsing interface is configured in + + + Whether the regular expressions interfaces are compiled in + + + Whether the older SAX1 interface is configured in + + + Whether the Schemas validation interfaces are compiled in + + + Whether the Schematron validation interfaces are compiled in + + + Macro to check that the libxml version in use is compatible with the version the software has been compiled against + + + Whether the allocation hooks are per-thread + + + Whether the thread support is configured in + + + Whether the DOM like tree manipulation API support is configured in + + + Whether the Unicode related interfaces are compiled in + + + Whether the DTD validation support is configured in + + + the version number: 1.2.3 value is 10203 + + + extra version information, used to show a CVS compilation + + + the version number string, 1.2.3 value is "10203" + + + Whether the xmlWriter saving interface is configured in + + + Whether XInclude is configured in + + + Whether XPath is configured in + + + Whether XPointer is configured in + + + Whether the Zlib support is compiled in + + + Skips to the next '>' char. + + + + Skips to the next '<' char. + + + + Skips the end of line chars. + + + + macro used to provide portability of code to windows sockets + + + defined if the trio support should not be configured in + + + defined if the trio support need to be configured in + + + Macro defining "fallback" + + + Macro defining "href" + + + Macro defining "include" + + + Macro defining the Xinclude namespace: http://www.w3.org/2003/XInclude + + + Macro defining the draft Xinclude namespace: http://www.w3.org/2001/XInclude + + + Macro defining "parse" + + + Macro defining "encoding" + + + Macro defining "text" + + + Macro defining "xml" + + + Macro defining "xpointer" + + + + + + + + + + + Macro to do a casting from an object pointer to a function pointer without encountering a warning from gcc #define XML_CAST_FPTR(fptr) (*(void **)(&fptr)) This macro violated ISO C aliasing rules (gcc4 on s390 broke) so it is disabled now + + + + The namespace for the XML Catalogs elements. + + + The specific XML Catalog Processing Instuction name. + + + 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. + + + Special value for finishDtd field when embedded in an xmlParserCtxt + + + Special value for finishDtd field when embedded in an xmlParserCtxt + + + The default version of XML used: 1.0 + + + Bit in the loadsubset context field to tell to do ID/REFs lookups. Use it to initialize xmlLoadExtDtdDefaultValue. + + + Macro to extract the content pointer of a node. + + + Macro to extract the line number of an element node. + + + A namespace declaration node. + + + Maximum size allowed by the parser for a dictionary by default This is not a limitation of the parser but a safety boundary feature, use XML_PARSE_HUGE option to override it. Introduced in 2.9.0 + + + Maximum size allowed by the parser for ahead lookup This is an upper boundary enforced by the parser to avoid bad behaviour on "unfriendly' content Introduced in 2.9.0 + + + Identifiers can be longer, but this will be more costly at runtime. + + + Maximum size allowed for a markup identitier This is not a limitation of the parser but a safety boundary feature, use XML_PARSE_HUGE option to override it. Note that with the use of parsing dictionaries overriding the limit may result in more runtime memory usage in face of "unfriendly' content Introduced in 2.9.0 + + + Maximum size allowed for a single text node when building a tree. This is not a limitation of the parser but a safety boundary feature, use XML_PARSE_HUGE option to override it. Introduced in 2.9.0 + + + Special constant found in SAX2 blocks initialized fields + + + Ignore validation non definition on attributes Obsolete, not used anymore. + + + Skip unknown attribute from validation Obsolete, not used anymore. + + + Apply strict validation rules on attributes Obsolete, not used anymore. + + + Used by wildcards. Validate if type found, don't worry if not found + + + Skip unknown attribute from validation + + + Used by wildcards. Apply strict validation rules + + + The attribute wildcard has been already builded. + + + Whether this attr. group contains attr. group references. + + + Marks the attr group as marked; used for circular checks. + + + The attr group was redefined. + + + The attribute wildcard has been already builded. + + + the attribute has a fixed value + + + allow elements in no namespace + + + this is set when the "type" and "ref" references have been resolved. + + + allow elements in no namespace + + + The attribute is optional. + + + Used by wildcards. The attribute is prohibited. + + + The attribute is required. + + + the schema has "extension" in the set of blockDefault. + + + the schema has "restriction" in the set of blockDefault. + + + the schema has "substitution" in the set of blockDefault. + + + the element is abstract + + + the "block" attribute is absent + + + disallowed substitutions are absent + + + disallowed substitutions: "restriction" + + + disallowed substitutions: "substituion" + + + a helper flag for the search of circular references. + + + the element has a default value + + + substitution group exclusions are absent + + + substitution group exclusions: "extension" + + + substitution group exclusions: "restriction" + + + the element has a fixed value + + + the element is global + + + this is set when the elem decl has been checked against all constraints + + + this is set when "type", "ref", "substitutionGroup" references have been resolved. + + + the element is nillable + + + allow elements in no namespace Obsolete, not used anymore. + + + the element is a reference to a type + + + the declaration is a substitution group head + + + the element is top level obsolete: use XML_SCHEMAS_ELEM_GLOBAL instead + + + collapse the types of the facet + + + preserve the type of the facet + + + replace the type of the facet + + + unknown facet handling + + + the schema has "extension" in the set of finalDefault. + + + the cshema has "list" in the set of finalDefault. + + + the schema has "restriction" in the set of finalDefault. + + + the schema has "union" in the set of finalDefault. + + + the schema is currently including an other schema with no target namespace. + + + Reflects attributeFormDefault == qualified in an XML schema document. + + + Reflects elementFormDefault == qualified in an XML schema document. + + + the simple/complexType is abstract. + + + the complexType did not specify 'block' so use the default of the <schema> item. + + + the complexType has a 'block' of "extension". + + + the complexType has a 'block' of "restriction". + + + Marks the item as a builtin primitive. + + + the simple or complex type has a derivation method of "extension". + + + the simple or complex type has a derivation method of "restriction". + + + indicates if the facets need a computed value + + + the simpleType has a final of "default". + + + the complexType has a final of "extension". + + + the simpleType has a final of "list". + + + the simpleType/complexType has a final of "restriction". + + + the simpleType has a final of "union". + + + First stage of fixup was done. + + + the type is global + + + has facets + + + indicates that the type is invalid + + + indicates that the type was typefixed + + + Marks the item as marked; used for circular checks. + + + the element content type is mixed + + + indicates if the facets (pattern) need a normalized value + + + the complexType owns an attribute wildcard, i.e. it can be freed by the complexType + + + The type was redefined. + + + the simpleType has a variety of "absent". TODO: Actually not necessary :-/, since if none of the variety flags occur then it's automatically absent. + + + the simpleType has a variety of "union". + + + the simpleType has a variety of "list". + + + the simpleType has a variety of "union". + + + a whitespace-facet value of "collapse" + + + a whitespace-facet value of "preserve" + + + a whitespace-facet value of "replace" + + + If the wildcard is complete. + + + Bit in the loadsubset context field to tell to not do ID/REFs registration. Used to initialize xmlLoadExtDtdDefaultValue in some special cases. + + + Both general and parameter entities need to be substituted. + + + If no entities need to be substituted. + + + Whether parameter entities need to be substituted. + + + Whether general entities need to be substituted. + + + This is the name for the special xml:id attribute + + + This is the namespace for the special xml: prefix predefined in the XML Namespace specification. + + + check namespaces at compilation + + + forbid variables in expression + + + Macro to raise an XPath error and return. + + + + Macro to raise an XPath error and return 0. + + + + + + Returns the default subelement for this element + + + + Checks whether an HTML element description may be a direct child of the specified element. Returns 1 if allowed; 0 otherwise. + + + + + Returns the attributes required for the specified element. + + + + Macro for compatibility naming layer with libxml1. Maps to "children." + + + Automatically generated by genChRanges.py + + + + Automatically generated by genChRanges.py + + + + Automatically generated by genChRanges.py + + + + Automatically generated by genChRanges.py + + + + Automatically generated by genChRanges.py + + + + Automatically generated by genChRanges.py + + + + Automatically generated by genChRanges.py + + + + Automatically generated by genChRanges.py + + + + Automatically generated by genChRanges.py + + + + Automatically generated by genChRanges.py + + + + Automatically generated by genChRanges.py + + + + Automatically generated by genChRanges.py + + + + Automatically generated by genChRanges.py + + + + Automatically generated by genChRanges.py + + + + Macro for compatibility naming layer with libxml1. Maps to "children". + + + this macro maps to xmlTextWriterWriteDTD + + + This macro maps to xmlTextWriterWritePI + + + Check if an XPath error was raised. Returns true if an error has been raised, false otherwise. + + + + Empties a node-set. + + + + Get the context node of an XPath context. Returns the context node. + + + + Get the document of an XPath context. Returns the context document. + + + + Get the error code of an XPath context. Returns the context error. + + + + Implement a functionality similar to the DOM NodeList.length. Returns the number of nodes in the node-set. + + + + Checks whether @ns is empty or not. Returns %TRUE if @ns is an empty node-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) + + + + + Pushes the boolean @val on the context stack. + + + + + Pushes an empty node-set on the context stack. + + + + Pushes an empty string on the stack. + + + + Pushes user data on the context stack. + + + + + Pushes false on the context stack. + + + + Pushes the node-set @ns on the context stack. + + + + + Pushes the double @val on the context stack. + + + + + Pushes the string @str on the context stack. + + + + + Pushes true on the context stack. + + + + Raises an XPATH_INVALID_ARITY error. + + + + Raises an error. + + + + + Raises an XPATH_INVALID_TYPE error. + + + + 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. + + + + 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. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A libxml automata description, It can be compiled into a regexp + + + + A state int the automata description, + + + + A pointer to a buffer structure, the actual structure internals are not public + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A handle to a dynamically loaded module + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A libxml progressive regular expression evaluation context + + + + A libxml regular expression, they can actually be far more complex thank the POSIX regex expressions. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Pointer to an xmlReader context. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + defined(LIBXML_HTML_ENABLED) + Take a block of UTF-8 chars in and try to convert it to an ASCII plus HTML entities block of chars out. + + + + + + + + defined(LIBXML_OUTPUT_ENABLED) + Take a block of UTF-8 chars in and try to convert it to an ISO Latin 1 block of chars out. + + + + + + + + defined(LIBXML_LEGACY_ENABLED) + 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() + + + + + + + defined(LIBXML_LEGACY_ENABLED) + An attribute definition has been parsed DEPRECATED: use xmlSAX2AttributeDecl() + + + + + + + + + + + An attribute definition has been parsed. + + + + + + + + + + + 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. + + + + + + + defined(LIBXML_LEGACY_ENABLED) + called when a pcdata block has been parsed DEPRECATED: use xmlSAX2CDataBlock() + + + + + + + Called when a pcdata block has been parsed. + + + + + + + defined(LIBXML_LEGACY_ENABLED) + receiving some chars from the parser. DEPRECATED: use xmlSAX2Characters() + + + + + + + Receiving some chars from the parser. + + + + + + + defined(LIBXML_LEGACY_ENABLED) + Check that the current element namespace is the same as the one read upon parsing. DEPRECATED + + + + + + defined(LIBXML_LEGACY_ENABLED) + A comment has been parsed. DEPRECATED: use xmlSAX2Comment() + + + + + + A comment has been parsed. + + + + + + defined(LIBXML_DOCB_ENABLED) + Create a parser context for a file content. Automatic support for ZLIB/Compress compressed document is provided by default if found at compile-time. + + + + + + defined(LIBXML_DOCB_ENABLED) + 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. + + + + + + + + + + defined(LIBXML_DOCB_ENABLED) + Initialize the default SAX handler + + + + defined(LIBXML_DOCB_ENABLED) + Take a block of UTF-8 chars in and try to convert it to an ASCII plus SGML entities block of chars out. + + + + + + + + + defined(LIBXML_DOCB_ENABLED) + Free all the memory used by a parser context. However the parsed document in ctxt->myDoc is not freed. + + + + + defined(LIBXML_DOCB_ENABLED) + Parse a Chunk of memory + + + + + + + + defined(LIBXML_DOCB_ENABLED) + parse an SGML in-memory document and build a tree. + + + + + + defined(LIBXML_DOCB_ENABLED) + parse an SGML document (and build a tree if using the standard SAX interface). + + + + + defined(LIBXML_DOCB_ENABLED) + 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. + + + + + + defined(LIBXML_DOCB_ENABLED) + 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. + + + + + + + + defined(LIBXML_DOCB_ENABLED) + 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. + + + + + + + + defined(LIBXML_LEGACY_ENABLED) + An element definition has been parsed DEPRECATED: use xmlSAX2ElementDecl() + + + + + + + + An element definition has been parsed. + + + + + + + + defined(LIBXML_LEGACY_ENABLED) + called when the document end has been detected. DEPRECATED: use xmlSAX2EndDocument() + + + + + Called when the document end has been detected. + + + + + defined(LIBXML_LEGACY_ENABLED) + called when the end of an element has been detected. DEPRECATED: use xmlSAX2EndElement() + + + + + + SAX2 callback when an element end has been detected by the parser. It provides the namespace informations for the element. + + + + + + + + Called when the end of an element has been detected. + + + + + + defined(LIBXML_LEGACY_ENABLED) + An entity definition has been parsed DEPRECATED: use xmlSAX2EntityDecl() + + + + + + + + + + An entity definition has been parsed. + + + + + + + + + + Display and format an error messages, callback. + + + + + + + defined(LIBXML_LEGACY_ENABLED) + Callback on external subset declaration. DEPRECATED: use xmlSAX2ExternalSubset() + + + + + + + + Callback on external subset declaration. + + + + + + + + Display and format fatal error messages, callback. Note: so far fatalError() SAX callbacks are not used, error() get all the callbacks for errors. + + + + + + + defined(LIBXML_FTP_ENABLED) + A callback for the xmlNanoFTPGet command. + + + + + + + defined(LIBXML_FTP_ENABLED) + A callback for the xmlNanoFTPList command. Note that only one of year and day:minute are specified. + + + + + + + + + + + + + + + + defined(LIBXML_LEGACY_ENABLED) + Provide the column number of the current parsing point. DEPRECATED: use xmlSAX2GetColumnNumber() + + + + + defined(LIBXML_LEGACY_ENABLED) + Get an entity by name DEPRECATED: use xmlSAX2GetEntity() + + + + + + Get an entity by name. + + + + + + defined(LIBXML_LEGACY_ENABLED) + Provide the line number of the current parsing point. DEPRECATED: use xmlSAX2GetLineNumber() + + + + + defined(LIBXML_LEGACY_ENABLED) + Get the current element namespace. DEPRECATED + + + + + defined(LIBXML_LEGACY_ENABLED) + Get a parameter entity by name DEPRECATED: use xmlSAX2GetParameterEntity() + + + + + + Get a parameter entity by name. + + + + + + defined(LIBXML_LEGACY_ENABLED) + Provides the public ID e.g. "-//SGMLSOURCE//DTD DEMO//EN" DEPRECATED: use xmlSAX2GetPublicId() + + + + + defined(LIBXML_LEGACY_ENABLED) + Provides the system ID, basically URL or filename e.g. http://www.sgmlsource.com/dtds/memo.dtd DEPRECATED: use xmlSAX2GetSystemId() + + + + + defined(LIBXML_LEGACY_ENABLED) + An old global namespace has been parsed. DEPRECATED + + + + + + + defined(LIBXML_LEGACY_ENABLED) + Does this document has an external subset DEPRECATED: use xmlSAX2HasExternalSubset() + + + + + Does this document has an external subset? + + + + + defined(LIBXML_LEGACY_ENABLED) + Does this document has an internal subset DEPRECATED: use xmlSAX2HasInternalSubset() + + + + + Does this document has an internal subset. + + + + + defined(LIBXML_HTML_ENABLED) + Checks whether an attribute is valid for an element Has full knowledge of Required and Deprecated attributes + + + + + + + defined(LIBXML_HTML_ENABLED) + 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. + + + + + + + defined(LIBXML_HTML_ENABLED) + Create a parser context for a file content. Automatic support for ZLIB/Compress compressed document is provided by default if found at compile-time. + + + + + + defined(LIBXML_HTML_ENABLED) + Create a parser context for an HTML in-memory document. + + + + + + defined(LIBXML_HTML_ENABLED) && defined(LIBXML_PUSH_ENABLED) + 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. + + + + + + + + + + defined(LIBXML_HTML_ENABLED) + parse an XML in-memory document and build a tree. This reuses the existing @ctxt parser context + + + + + + + + + defined(LIBXML_HTML_ENABLED) + parse an XML from a file descriptor and build a tree. This reuses the existing @ctxt parser context + + + + + + + + + defined(LIBXML_HTML_ENABLED) + parse an XML file from the filesystem or the network. This reuses the existing @ctxt parser context + + + + + + + + defined(LIBXML_HTML_ENABLED) + parse an HTML document from I/O functions and source and build a tree. This reuses the existing @ctxt parser context + + + + + + + + + + + defined(LIBXML_HTML_ENABLED) + parse an XML in-memory document and build a tree. This reuses the existing @ctxt parser context + + + + + + + + + + defined(LIBXML_HTML_ENABLED) + Reset a parser context + + + + + defined(LIBXML_HTML_ENABLED) + Applies the options to the parser context + + + + + + defined(LIBXML_HTML_ENABLED) + Initialize the default SAX handler + + + + defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) + Dump an HTML document. + + + + + + + + defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) + Dump an HTML document. Formating return/spaces are added. + + + + + + + defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) + Dump an HTML document to an open FILE. + + + + + + defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) + Dump an HTML document in memory and return the xmlChar * and it's size. It's up to the caller to free the memory. + + + + + + + defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) + Dump an HTML document in memory and return the xmlChar * and it's size. It's up to the caller to free the memory. + + + + + + + + defined(LIBXML_HTML_ENABLED) + Checks whether an HTML element may be a direct child of a parent element. Note - doesn't check for deprecated elements + + + + + + defined(LIBXML_HTML_ENABLED) + Checks whether an HTML element may be a direct child of a parent element. and if so whether it is valid or deprecated. + + + + + + defined(LIBXML_HTML_ENABLED) + Take a block of UTF-8 chars in and try to convert it to an ASCII plus HTML entities block of chars out. + + + + + + + + + defined(LIBXML_HTML_ENABLED) + Lookup the given entity in EntitiesTable TODO: the linear scan is really ugly, an hash table is really needed. + + + + + defined(LIBXML_HTML_ENABLED) + Lookup the given entity in EntitiesTable TODO: the linear scan is really ugly, an hash table is really needed. + + + + + defined(LIBXML_HTML_ENABLED) + Free all the memory used by a parser context. However the parsed document in ctxt->myDoc is not freed. + + + + + defined(LIBXML_HTML_ENABLED) + Encoding definition lookup in the Meta tags + + + + + defined(LIBXML_HTML_ENABLED) + Set and return the previous value for handling HTML omitted tags. + + + + + defined(LIBXML_HTML_ENABLED) + 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. + + + + defined(LIBXML_HTML_ENABLED) + 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 + + + + + + defined(LIBXML_HTML_ENABLED) + Determine if a given attribute is a boolean attribute. + + + + + defined(LIBXML_HTML_ENABLED) + Check if an attribute is of content type Script + + + + + defined(LIBXML_HTML_ENABLED) + Creates a new HTML document + + + + + + defined(LIBXML_HTML_ENABLED) + Creates a new HTML document without a DTD node if @URI and @ExternalID are NULL + + + + + + defined(LIBXML_HTML_ENABLED) + Allocate and initialize a new parser context. + + + + defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) + Dump an HTML node, recursive behaviour,children are printed too, and formatting returns are added. + + + + + + + defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) + Dump an HTML node, recursive behaviour,children are printed too, and formatting returns are added. + + + + + + + defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) + Dump an HTML node, recursive behaviour,children are printed too. TODO: if encoding == NULL try to save in the doc encoding + + + + + + + + + defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) + Dump an HTML node, recursive behaviour,children are printed too. + + + + + + + + + defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) + Dump an HTML node, recursive behaviour,children are printed too, and formatting returns/spaces are added. + + + + + + + + defined(LIBXML_HTML_ENABLED) + Checks whether the tree node is valid. Experimental (the author only uses the HTML enhancements in a SAX parser) + + + + + + defined(LIBXML_HTML_ENABLED) + parse Reference declarations [66] CharRef ::= '&#' [0-9]+ ';' | '&#x' [0-9a-fA-F]+ ';' + + + + + defined(LIBXML_HTML_ENABLED) && defined(LIBXML_PUSH_ENABLED) + Parse a Chunk of memory + + + + + + + + defined(LIBXML_HTML_ENABLED) + parse an HTML in-memory document and build a tree. + + + + + + defined(LIBXML_HTML_ENABLED) + parse an HTML document (and build a tree if using the standard SAX interface). + + + + + defined(LIBXML_HTML_ENABLED) + parse an HTML element, this is highly recursive this is kept for compatibility with previous code versions [39] element ::= EmptyElemTag | STag content ETag [41] Attribute ::= Name Eq AttValue + + + + + defined(LIBXML_HTML_ENABLED) + parse an HTML ENTITY references [68] EntityRef ::= '&' Name ';' + + + + + + defined(LIBXML_HTML_ENABLED) + parse an HTML file and build a tree. Automatic support for ZLIB/Compress compressed document is provided by default if found at compile-time. + + + + + + defined(LIBXML_HTML_ENABLED) + parse an XML in-memory document and build a tree. + + + + + + + + defined(LIBXML_HTML_ENABLED) + parse an XML from a file descriptor and build a tree. + + + + + + + + defined(LIBXML_HTML_ENABLED) + parse an XML file from the filesystem or the network. + + + + + + + defined(LIBXML_HTML_ENABLED) + parse an HTML document from I/O functions and source and build a tree. + + + + + + + + + + defined(LIBXML_HTML_ENABLED) + parse an XML in-memory document and build a tree. + + + + + + + + + defined(LIBXML_HTML_ENABLED) + 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. + + + + + + + + defined(LIBXML_HTML_ENABLED) + 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. + + + + + + + + defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) + Dump an HTML document to a file. If @filename is "-" the stdout file is used. + + + + + + defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) + Dump an HTML document to a file using a given encoding and formatting returns/spaces are added. + + + + + + + defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) + Dump an HTML document to a file using a given encoding. + + + + + + + + defined(LIBXML_HTML_ENABLED) + Sets the current encoding in the Meta tags NOTE: this will not change the document content encoding, just the META flag associated. + + + + + + defined(LIBXML_HTML_ENABLED) + Lookup the HTML tag in the ElementTable + + + + + defined(LIBXML_LEGACY_ENABLED) + receiving some ignorable whitespaces from the parser. UNUSED: by default the DOM building will use characters DEPRECATED: use xmlSAX2IgnorableWhitespace() + + + + + + + Receiving some ignorable whitespaces from the parser. UNUSED: by default the DOM building will use characters. + + + + + + + Set or reset (if NULL) the default handler for generic errors to the builtin error function. + + + + + defined(LIBXML_LEGACY_ENABLED) && defined(LIBXML_SAX1_ENABLED) && defined(LIBXML_DOCB_ENABLED) + Initialize the default DocBook SAX version 1 handler DEPRECATED: use xmlSAX2InitDocbDefaultSAXHandler() for the new SAX2 blocks + + + + + defined(LIBXML_LEGACY_ENABLED) && defined(LIBXML_SAX1_ENABLED) && defined(LIBXML_HTML_ENABLED) + Initialize the default HTML SAX version 1 handler DEPRECATED: use xmlSAX2InitHtmlDefaultSAXHandler() for the new SAX2 blocks + + + + + defined(LIBXML_LEGACY_ENABLED) && defined(LIBXML_SAX1_ENABLED) + Initialize the default XML SAX version 1 handler DEPRECATED: use xmlSAX2InitDefaultSAXHandler() for the new SAX2 blocks + + + + + + Pops the top parser input from the input stack + + + + + Pushes a new parser input on top of the input stack + + + + + + defined(LIBXML_LEGACY_ENABLED) + Callback on internal subset declaration. DEPRECATED: use xmlSAX2InternalSubset() + + + + + + + + Callback on internal subset declaration. + + + + + + + + defined(LIBXML_LEGACY_ENABLED) + Is this document tagged standalone ? DEPRECATED: use xmlSAX2IsStandalone() + + + + + Is this document tagged standalone? + + + + + Take a block of ISO Latin 1 chars in and try to convert it to an UTF-8 block of chars out. + + + + + + + + Pops the top element name from the name stack + + + + + Pushes a new element name on top of the name stack + + + + + + defined(LIBXML_LEGACY_ENABLED) + A namespace has been parsed. DEPRECATED + + + + + + + Pops the top element node from the node stack + + + + + Pushes a new element node on top of the node stack + + + + + + defined(LIBXML_LEGACY_ENABLED) + What to do when a notation declaration has been parsed. DEPRECATED: use xmlSAX2NotationDecl() + + + + + + + + What to do when a notation declaration has been parsed. + + + + + + + + defined(LIBXML_LEGACY_ENABLED) + A processing instruction has been parsed. DEPRECATED: use xmlSAX2ProcessingInstruction() + + + + + + + A processing instruction has been parsed. + + + + + + + defined(LIBXML_LEGACY_ENABLED) + called when an entity reference is detected. DEPRECATED: use xmlSAX2Reference() + + + + + + Called when an entity reference is detected. + + + + + + defined(LIBXML_LEGACY_ENABLED) + 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() + + + + + + + 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 + + + + + + + defined(LIBXML_LEGACY_ENABLED) + Receive the document locator at startup, actually xmlDefaultSAXLocator Everything is available on the context, so this is useless in our case. DEPRECATED + + + + + + Receive the document locator at startup, actually xmlDefaultSAXLocator. Everything is available on the context, so this is useless in our case. + + + + + + defined(LIBXML_LEGACY_ENABLED) + Set the current element namespace. DEPRECATED + + + + + + defined(LIBXML_LEGACY_ENABLED) + called when the document start being processed. DEPRECATED: use xmlSAX2StartDocument() + + + + + Called when the document start being processed. + + + + + defined(LIBXML_LEGACY_ENABLED) + called when an opening tag has been processed. DEPRECATED: use xmlSAX2StartElement() + + + + + + + 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. + + + + + + + + + + + + + Called when an opening tag has been processed. + + + + + + + defined(LIBXML_LEGACY_ENABLED) + What to do when an unparsed entity declaration is parsed DEPRECATED: use xmlSAX2UnparsedEntityDecl() + + + + + + + + + What to do when an unparsed entity declaration is parsed. + + + + + + + + + defined(LIBXML_XPATH_ENABLED) + Pops the top XPath object from the value stack + + + + + defined(LIBXML_XPATH_ENABLED) + Pushes a new XPath object on top of the value stack + + + + + + Display and format a warning messages, callback. + + + + + + + defined(LIBXML_XPTR_ENABLED) + This is the prototype for a extended link detection callback. + + + + + + + + + + + + + + + + + defined(LIBXML_XPTR_ENABLED) + This is the prototype for a extended link set detection callback. + + + + + + + + + + + + defined(LIBXML_XPTR_ENABLED) + Get the default xlink detection routine + + + + defined(LIBXML_XPTR_ENABLED) + Get the default xlink handler. + + + + defined(LIBXML_XPTR_ENABLED) + 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. + + + + + + defined(LIBXML_XPTR_ENABLED) + This is the prototype for the link detection routine. It calls the default link detection callbacks upon link detection. + + + + + + defined(LIBXML_XPTR_ENABLED) + Set the default xlink detection routine + + + + + defined(LIBXML_XPTR_ENABLED) + Set the default xlink handlers + + + + + defined(LIBXML_XPTR_ENABLED) + This is the prototype for a simple link detection callback. + + + + + + + + + defined(LIBXML_CATALOG_ENABLED) + Add an entry in the catalog, it may overwrite existing but different entries. + + + + + + + + defined(LIBXML_CATALOG_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) + Dump the given catalog to the given file. + + + + + + defined(LIBXML_CATALOG_ENABLED) + Remove an entry from the catalog + + + + + + defined(LIBXML_CATALOG_ENABLED) + Do a complete resolution lookup of an External Identifier + + + + + + + defined(LIBXML_CATALOG_ENABLED) + Try to lookup the catalog local reference associated to a public ID in that catalog + + + + + + defined(LIBXML_CATALOG_ENABLED) + Try to lookup the catalog resource for a system ID + + + + + + defined(LIBXML_CATALOG_ENABLED) + Do a complete resolution lookup of an URI + + + + + + Register a new attribute declaration Note that @tree becomes the ownership of the DTD + + + + + + + + + + + + + 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. + + + + + + Add a list of node at the end of the child list of the parent merging adjacent TEXT nodes (@cur may be freed) + + + + + + Register a new entity for this document. + + + + + + + + + + Register a new entity for this document DTD external subset. + + + + + + + + + + Register a new element declaration + + + + + + + + + Registers an alias @alias for an encoding named @name. Existing alias will be overwritten. + + + + + + Register a new id declaration + + + + + + + + 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. + + + + + + Register a new notation declaration + + + + + + + + + defined(LIBXML_TREE_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) + 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. + + + + + + Register a new ref declaration + + + + + + + + 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. + + + + + + defined(LIBXML_OUTPUT_ENABLED) + Create a buffered parser output + + + + + Create a buffered parser input for progressive parsing + + + + + defined(LIBXML_OUTPUT_ENABLED) + Serialize text attribute values to an xml simple buffer + + + + + + + + defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED) + Compile the automata into a Reg Exp ready for being executed. The automata should be free after this point. + + + + + defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED) + Initial state lookup + + + + + defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED) + Checks if an automata is determinist. + + + + + defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED) + If @to is NULL, this creates 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. + + + + + + + + defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED) + If @to is NULL, this creates first a new target state in the automata and then adds a transition from the @from state to the target state activated by a succession of input of value @token and whose number is between @min and @max + + + + + + + + + + + defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED) + If @to is NULL, this creates first a new target state in the automata and then adds a transition from the @from state to the target state activated by a succession of input of value @token and @token2 and whose number is between @min and @max + + + + + + + + + + + + defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED) + If @to is NULL, this creates first a new target state in the automata and then adds an epsilon transition from the @from state to the target state which will increment the counter provided + + + + + + + + defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED) + Create a new counter + + + + + + + defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED) + If @to is NULL, this creates first a new target state in the automata and then adds an epsilon transition from the @from state to the target state which will be allowed only if the counter is within the right range. + + + + + + + + defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED) + If @to is NULL, this creates first a new target state in the automata and then adds an epsilon transition from the @from state to the target state + + + + + + + defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED) + If @to is NULL, this creates first a new target state in the automata and then adds a transition from the @from state to the target state activated by any value except (@token,@token2) Note that if @token2 is not NULL, then (X, NULL) won't match to follow # the semantic of XSD ##other + + + + + + + + + + defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED) + If @to is NULL, this creates first a new target state in the automata and then adds a transition from the @from state to the target state activated by a succession of input of value @token and whose number is between @min and @max, moreover that transition can only be crossed once. + + + + + + + + + + + defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED) + If @to is NULL, this creates first a new target state in the automata and then adds a transition from the @from state to the target state activated by a succession of input of value @token and @token2 and whose number is between @min and @max, moreover that transition can only be crossed once. + + + + + + + + + + + + defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED) + Create a new disconnected state in the automata + + + + + defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED) + If @to is NULL, this creates first a new target state in the automata and then adds a transition from the @from state to the target state activated by the value of @token + + + + + + + + + defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED) + If @to is NULL, this creates first a new target state in the automata and then adds a transition from the @from state to the target state activated by the value of @token + + + + + + + + + + defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED) + Makes that state a final state + + + + + + defined(LIBXML_DEBUG_ENABLED) + Convenient way to turn bool into text + + + + + Function to extract the content of a buffer + + + + + Function to extract the end of the content of a buffer + + + + + Read the value of a node @cur, this can be either the text carried directly by this node if it's a TEXT node or the aggregate string of the values carried by this node child's (TEXT and ENTITY_REF). Entity references are substituted. Fills up the buffer @buf with this value + + + + + + defined(LIBXML_OUTPUT_ENABLED) + 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 + + + + + + + + + Remove the beginning of an XML buffer. NOTE that this routine behaviour differs from xmlBufferShrink() as it will return 0 on error instead of -1 due to size_t being used as the return type. + + + + + + Function to get the length of a buffer + + + + + Add a string range to an XML buffer. if len == -1, the length of str is recomputed. + + + + + + + Add a string range to the beginning of an XML buffer. if len == -1, the length of @str is recomputed. + + + + + + + Append a zero terminated C string to an XML buffer. + + + + + + Append a zero terminated string to an XML buffer. + + + + + + Function to extract the content of a buffer + + + + + routine to create an XML buffer. + + + + routine to create an XML buffer. + + + + + 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. + + + + + + Remove the string contained in a buffer and gie it back to the caller. The buffer is reset to an empty content. This doesn't work with immutable buffers as they can't be reset. + + + + + Dumps an XML buffer to a FILE *. + + + + + + empty a buffer. + + + + + Frees an XML buffer. It frees both the content and the structure which encapsulate it. + + + + + Grow the available space of an XML buffer. + + + + + + Function to get the length of a buffer + + + + + Resize a buffer to accommodate minimum size of @size. + + + + + + Sets the allocation scheme for this buffer + + + + + + Remove the beginning of an XML buffer. + + + + + + routine which manages and grows an output buffer. This one adds xmlChars at the end of the buffer. + + + + + + routine which manage and grows an output buffer. This one add C chars at the end of the array. + + + + + + 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 + + + + + + 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. + + + + + + + + Expresses the URI of the reference in terms relative to the base. Some examples of this operation include: base = "http://site1.com/docs/book1.html" URI input URI returned docs/pic1.gif pic1.gif docs/img/pic1.gif img/pic1.gif img/pic1.gif ../img/pic1.gif http://site1.com/docs/pic1.gif pic1.gif http://site2.com/docs/pic1.gif http://site2.com/docs/pic1.gif base = "docs/book1.html" URI input URI returned docs/pic1.gif pic1.gif docs/img/pic1.gif img/pic1.gif img/pic1.gif ../img/pic1.gif http://site1.com/docs/pic1.gif http://site1.com/docs/pic1.gif Note: if the URI reference is really wierd or complicated, it may be worthwhile to first convert it into a "nice" one by calling xmlBuildURI (using 'base') before calling this routine, since this routine (for reasonable efficiency) assumes URI has already been through some validation. + + + + + + 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 + + + + + + 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. + + + + + defined(LIBXML_C14N_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) + 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) + + + + + + + + + + defined(LIBXML_C14N_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) + 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) + + + + + + + + + + + defined(LIBXML_C14N_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) + 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) + + + + + + + + + + defined(LIBXML_C14N_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) + 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) + + + + + + + + + + + defined(LIBXML_C14N_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) + Signature for a C14N callback on visible nodes + + + + + + + Constructs a canonic path from the specified path. + + + + + defined(LIBXML_CATALOG_ENABLED) + 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(); + + + + + + + defined(LIBXML_CATALOG_ENABLED) + Add the new entry to the catalog list + + + + + + defined(LIBXML_CATALOG_ENABLED) + Free up all the memory associated with catalogs + + + + defined(LIBXML_CATALOG_ENABLED) + Convert all the SGML catalog entries as XML ones + + + + defined(LIBXML_CATALOG_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) + Dump all the global catalog content to the given file. + + + + + defined(LIBXML_CATALOG_ENABLED) + Free up the memory associated to the catalog list + + + + + defined(LIBXML_CATALOG_ENABLED) + Used to get the user preference w.r.t. to what catalogs should be accepted + + + + defined(LIBXML_CATALOG_ENABLED) + Try to lookup the catalog reference associated to a public ID DEPRECATED, use xmlCatalogResolvePublic() + + + + + defined(LIBXML_CATALOG_ENABLED) + Try to lookup the catalog reference associated to a system ID DEPRECATED, use xmlCatalogResolveSystem() + + + + + defined(LIBXML_CATALOG_ENABLED) + Check is a catalog is empty + + + + + defined(LIBXML_CATALOG_ENABLED) + Do a complete resolution lookup of an External Identifier using a document's private catalog list + + + + + + + defined(LIBXML_CATALOG_ENABLED) + Do a complete resolution lookup of an URI using a document's private catalog list + + + + + + defined(LIBXML_CATALOG_ENABLED) + Remove an entry from the catalog + + + + + defined(LIBXML_CATALOG_ENABLED) + Do a complete resolution lookup of an External Identifier + + + + + + defined(LIBXML_CATALOG_ENABLED) + Try to lookup the catalog reference associated to a public ID + + + + + defined(LIBXML_CATALOG_ENABLED) + Try to lookup the catalog resource for a system ID + + + + + defined(LIBXML_CATALOG_ENABLED) + Do a complete resolution lookup of an URI + + + + + defined(LIBXML_CATALOG_ENABLED) + Used to set the debug level for catalog operation, 0 disable debugging, 1 enable it + + + + + defined(LIBXML_CATALOG_ENABLED) + 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 + + + + + defined(LIBXML_CATALOG_ENABLED) + Used to set the user preference w.r.t. to what catalogs should be accepted + + + + + Generic front-end for encoding handler close function + + + + + Front-end for the encoding handler input function, but handle only the very first line, i.e. limit itself to 45 chars. + + + + + + + Generic front-end for the encoding handler input function + + + + + + + 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. + + + + + + + Take a block of chars in the original encoding and try to convert it to an UTF-8 block of chars out. + + + + + + + + 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. + + + + + + + + Does a binary search of the range table to determine if char is valid + + + + + + a strdup for char's to xmlChar's + + + + + a strndup for char's to xmlChar's + + + + + + function checks to see if @path is a valid source (file, socket...) for XML. if stat is not available on the target machine, + + + + + 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 + + + + + + Checks that the value conforms to the LanguageID production: NOTE: this is somewhat deprecated, those productions were removed from the XML Second edition. [33] LanguageID ::= Langcode ('-' Subcode)* [34] Langcode ::= ISO639Code | IanaCode | UserCode [35] ISO639Code ::= ([a-z] | [A-Z]) ([a-z] | [A-Z]) [36] IanaCode ::= ('i' | 'I') '-' ([a-z] | [A-Z])+ [37] UserCode ::= ('x' | 'X') '-' ([a-z] | [A-Z])+ [38] Subcode ::= ([a-z] | [A-Z])+ The current REC reference the sucessors of RFC 1766, currently 5646 http://www.rfc-editor.org/rfc/rfc5646.txt langtag = language ["-" script] ["-" region] *("-" variant) *("-" extension) ["-" privateuse] language = 2*3ALPHA ; shortest ISO 639 code ["-" extlang] ; sometimes followed by ; extended language subtags / 4ALPHA ; or reserved for future use / 5*8ALPHA ; or registered language subtag extlang = 3ALPHA ; selected ISO 639 codes *2("-" 3ALPHA) ; permanently reserved script = 4ALPHA ; ISO 15924 code region = 2ALPHA ; ISO 3166-1 code / 3DIGIT ; UN M.49 code variant = 5*8alphanum ; registered variants / (DIGIT 3alphanum) extension = singleton 1*("-" (2*8alphanum)) ; Single alphanumerics ; "x" reserved for private use singleton = DIGIT ; 0 - 9 / %x41-57 ; A - W / %x59-5A ; Y - Z / %x61-77 ; a - w / %x79-7A ; y - z it sounds right to still allow Irregular i-xxx IANA and user codes too The parser below doesn't try to cope with extension or privateuse that could be added but that's not interoperable anyway + + + + + 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. + + + + + check the compiled lib version against the include one. This can warn or immediately kill the application + + + + + defined(LIBXML_TREE_ENABLED) + Finds the current number of child nodes of that element which are element nodes. Note the handling of entities references is different than in the W3C DOM element traversal spec since we don't have back reference from entities content to entities references. + + + + + Cleanup the memory allocated for the char encoding support, it unregisters all the encoding handlers and the aliases. + + + + Unregisters all aliases + + + + Additional cleanup for multi-threading + + + + clears the entire input callback table. this includes the compiled-in I/O. + + + + Free up all the memory allocated by the library for its own use. This should not be called by user level code. + + + + defined(LIBXML_OUTPUT_ENABLED) + clears the entire output callback table. this includes the compiled-in I/O callbacks. + + + + This function name is somewhat misleading. It does not clean up parser state, it cleans up memory allocated by the library itself. It is a cleanup function for the XML library. It tries to reclaim all related global memory allocated for the library processing. It doesn't deallocate any document related memory. One should call xmlCleanupParser() only when the process has finished using the library and all XML/HTML documents built with it. See also xmlInitParser() which has the opposite function of preparing the library for operations. WARNING: if your application is multithreaded or has plugin support calling this may crash the application if another thread or a plugin is still using libxml2. It's sometimes very hard to guess if libxml2 is in use in the application, some libraries or plugins may use it without notice. In case of doubt abstain from calling this function or do it just before calling exit() to avoid leak reports from valgrind ! + + + + defined(LIBXML_LEGACY_ENABLED) + Cleanup up the predefined entities table. Deprecated call + + + + xmlCleanupThreads() is used to to cleanup all the thread related data of the libxml2 library once processing has ended. WARNING: if your application is multithreaded or has plugin support calling this may crash the application if another thread or a plugin is still using libxml2. It's sometimes very hard to guess if libxml2 is in use in the application, some libraries or plugins may use it without notice. In case of doubt abstain from calling this function or do it just before calling exit() to avoid leak reports from valgrind ! + + + + -- Clear (release memory and reinitialize) node info sequence + + + + + Clear (release owned resources) and reinitialize a parser context + + + + + defined(LIBXML_CATALOG_ENABLED) + Convert all the SGML catalog entries as XML ones + + + + + defined(LIBXML_TREE_ENABLED) + Build a copy of an attribute table. + + + + + append the char value in the array + + + + + + + append the char value in the array + + + + + + defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) + Do a copy of the document info. If recursive, the content tree will be copied too as well as DTD, namespaces and entities. + + + + + + Build a copy of an element content description. + + + + + + defined(LIBXML_TREE_ENABLED) + Do a copy of the dtd. + + + + + Build a copy of an element content description. Deprecated, use xmlCopyDocElementContent instead + + + + + defined(LIBXML_TREE_ENABLED) + Build a copy of an element table. + + + + + defined(LIBXML_TREE_ENABLED) + Build a copy of an entity table. + + + + + defined(LIBXML_TREE_ENABLED) + Copy an enumeration attribute node (recursive). + + + + + Save the original error to the new place. + + + + + + Do a copy of the namespace. + + + + + Do a copy of an namespace list. + + + + + Do a copy of the node. + + + + + + Do a recursive copy of the node list. Use xmlDocCopyNodeList() if possible to ensure string interning. + + + + + defined(LIBXML_TREE_ENABLED) + Build a copy of a notation table. + + + + + Do a copy of the attribute. + + + + + + Do a copy of an attribute list. + + + + + + Creates a parser context for an XML in-memory document. + + + + + create and initialize an empty entities hash table. This really doesn't make sense and should be deprecated + + + + Create a parser context for an external entity Automatic support for ZLIB/Compress compressed document is provided by default if found at compile-time. + + + + + + + create and initialize an enumeration attribute node. + + + + + Create a parser context for a file content. Automatic support for ZLIB/Compress compressed document is provided by default if found at compile-time. + + + + + Create a parser context for using the XML parser with an existing I/O stream + + + + + + + + + + Create the internal subset of a document + + + + + + + + Create a parser context for an XML in-memory document. + + + + + + defined(LIBXML_PUSH_ENABLED) + 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. + + + + + + + + + Simply creates an empty xmlURI + + + + 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 + + + + + + Get the last parsing error registered. + + + + + parse an XML in-memory document and build a tree. This reuses the existing @ctxt parser context + + + + + + + + + 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. + + + + + + + + + parse an XML file from the filesystem or the network. This reuses the existing @ctxt parser context + + + + + + + + parse an XML document from I/O functions and source and build a tree. This reuses the existing @ctxt parser context + + + + + + + + + + + parse an XML in-memory document and build a tree. This reuses the existing @ctxt parser context + + + + + + + + + + Reset a parser context + + + + + Cleanup the last global error registered. For parsing error this does not change the well-formedness result. + + + + + Reset a push parser context + + + + + + + + + Applies the options to the parser context + + + + + + 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.) + + + + + + A function called to acquire namespaces (xmlNs) from the wrapper. + + + + + + + + References of out-of scope ns-decls are remapped to point to @destDoc: 1) If @destParent is given, then nsDef entries on element-nodes are used 2) If *no* @destParent is given, then @destDoc->oldNs entries are used This is the case when you have an unlinked node and just want to move it to the context of If @destParent is given, it ensures that the tree is namespace wellformed by creating additional ns-decls where needed. Note that, since prefixes of already existent ns-decls can be shadowed by this process, it could break QNames in attribute values or element content. NOTE: This function was not intensively tested. + + + + + + + + + + References of out-of scope ns-decls are remapped to point to @destDoc: 1) If @destParent is given, then nsDef entries on element-nodes are used 2) If *no* @destParent is given, then @destDoc->oldNs entries are used. This is the case when you don't know already where the cloned branch will be added to. If @destParent is given, it ensures that the tree is namespace wellformed by creating additional ns-decls where needed. Note that, since prefixes of already existent ns-decls can be shadowed by this process, it could break QNames in attribute values or element content. TODO: 1) What to do with XInclude? Currently this returns an error for XInclude. + + + + + + + + + + + + Frees the DOM-wrapper context. + + + + + Allocates and initializes a new DOM-wrapper context. + + + + Ensures that ns-references point to ns-decls hold on element-nodes. Ensures that the tree is namespace wellformed by creating additional ns-decls where needed. Note that, since prefixes of already existent ns-decls can be shadowed by this process, it could break QNames in attribute values or element content. NOTE: This function was not intensively tested. + + + + + + + Unlinks the given node from its owner. This will substitute ns-references to node->nsDef for ns-references to doc->oldNs, thus ensuring the removed branch to be autark wrt ns-references. NOTE: This function was not intensively tested. + + + + + + + + defined(LIBXML_DEBUG_ENABLED) + Check the document for potential content problems, and output the errors to @output + + + + + + defined(LIBXML_DEBUG_ENABLED) + Dumps debug information for the attribute + + + + + + + defined(LIBXML_DEBUG_ENABLED) + Dumps debug information for the attribute list + + + + + + + defined(LIBXML_DEBUG_ENABLED) + Dumps debug information for the DTD + + + + + + defined(LIBXML_DEBUG_ENABLED) + Dumps debug information for the document, it's recursive + + + + + + defined(LIBXML_DEBUG_ENABLED) + Dumps debug information cncerning the document, not recursive + + + + + + defined(LIBXML_DEBUG_ENABLED) + Dumps debug information for all the entities in use by the document + + + + + + defined(LIBXML_DEBUG_ENABLED) + Dumps debug information for the element node, it is recursive + + + + + + + defined(LIBXML_DEBUG_ENABLED) + Dumps debug information for the list of element node, it is recursive + + + + + + + defined(LIBXML_DEBUG_ENABLED) + Dumps debug information for the element node, it is not recursive + + + + + + + defined(LIBXML_DEBUG_ENABLED) + Dumps informations about the string, shorten it if necessary + + + + + + defined(LIBXML_LEGACY_ENABLED) + 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 ';' + + + + + + + + + + Initialize the default SAX2 handler + + + + Unregisters an encoding alias @alias + + + + + Registers a callback for node destruction + + + + + Signature for the deregistration callback of a discarded node + + + + + 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. + + + + + + Free the dictionary mutex. Do not call unless sure the library is not in use anymore ! + + + + Create a new dictionary + + + + Create a new dictionary, inheriting strings from the read-only dictionary @sub. On lookup, strings are first searched in the new dictionary, then in @sub, and if not found are created in the new dictionary. + + + + + Check if the @name exists in the dictionary @dict. + + + + + + + Free the hash @dict and its contents. The userdata is deallocated with @f if provided. + + + + + Get how much memory is used by a dictionary for strings Added in 2.9.0 + + + + + Add the @name to the dictionary @dict if not present. + + + + + + + check if a string is owned by the disctionary + + + + + + Add the QName @prefix:@name to the hash @dict if not present. + + + + + + + Increment the reference counter of a dictionary + + + + + Set a size limit for the dictionary Added in 2.9.0 + + + + + + Query the number of elements installed in the hash @dict. + + + + + + + + + + + + Do a copy of the node to a given document. + + + + + + + Do a recursive copy of the node list. + + + + + + defined(LIBXML_OUTPUT_ENABLED) + Dump an XML document to an open FILE. + + + + + + defined(LIBXML_OUTPUT_ENABLED) + 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 + + + + + + + + defined(LIBXML_OUTPUT_ENABLED) + 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 + + + + + + + + + defined(LIBXML_OUTPUT_ENABLED) + 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. + + + + + + + defined(LIBXML_OUTPUT_ENABLED) + 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(). + + + + + + + + defined(LIBXML_OUTPUT_ENABLED) + Dump an XML document to an open FILE. + + + + + + + Get the root element of the document (doc->children is a list containing possibly comments, PIs, etc ...). + + + + + defined(LIBXML_TREE_ENABLED) || defined(LIBXML_WRITER_ENABLED) + Set the root element of the document (doc->children is a list containing possibly comments, PIs, etc ...). + + + + + + defined(LIBXML_OUTPUT_ENABLED) + This will dump the content of the attribute declaration as an XML DTD definition + + + + + + defined(LIBXML_OUTPUT_ENABLED) + This will dump the content of the attribute table as an XML DTD definition + + + + + + defined(LIBXML_OUTPUT_ENABLED) + This will dump the content of the element declaration as an XML DTD definition + + + + + + defined(LIBXML_OUTPUT_ENABLED) + This will dump the content of the element table as an XML DTD definition + + + + + + defined(LIBXML_OUTPUT_ENABLED) + This will dump the content of the entity table as an XML DTD definition + + + + + + defined(LIBXML_OUTPUT_ENABLED) + This will dump the content of the entity table as an XML DTD definition + + + + + + defined(LIBXML_OUTPUT_ENABLED) + This will dump the content the notation declaration as an XML DTD definition + + + + + + defined(LIBXML_OUTPUT_ENABLED) + This will dump the content of the notation table as an XML DTD definition + + + + + + defined(LIBXML_OUTPUT_ENABLED) + Dump an XML/HTML node, recursive behaviour, children are printed too. + + + + + + + defined(LIBXML_LEGACY_ENABLED) + 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. + + + + + + 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. + + + + + + Do a global encoding of a string, replacing the predefined entities this routine is reentrant, and result must be deallocated. + + + + + + defined(LIBXML_LEGACY_ENABLED) + Callback function used when one needs to be able to track back the provenance of a chunk of nodes inherited from an entity replacement. + + + + + + + Handle a redefinition of attribute error + + + + + + defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED) + Debugging facility provides the number of allocated nodes over lifetime + + + + + defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED) + Debugging facility provides the number of allocated nodes at a that point + + + + + defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED) + Serialize the expression as compiled to the buffer + + + + + + defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED) + Evaluates the expression resulting from @exp consuming a sub expression @sub Based on algebraic derivation and sometimes direct Brzozowski derivation it usually tatkes less than linear time and can handle expressions generating infinite languages. + + + + + + + defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED) + Dereference the expression + + + + + + defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED) + Free an expression context + + + + + defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED) + Find all the strings used in @exp and store them in @list + + + + + + + + defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED) + Find all the strings that appears at the start of the languages accepted by @exp and store them in @list. E.g. for (a, b) | c it will return the list [a, c] + + + + + + + + defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED) + Finds if the expression is nillable, i.e. if it accepts the empty sequqnce + + + + + defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED) + Indicate the maximum number of input a expression can accept + + + + + defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED) + Get the atom associated to this name from that context + + + + + + + defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED) + Creates a new context for manipulating expressions + + + + + + defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED) + Get the atom associated to the choice @left | @right Note that @left and @right are consumed in the operation, to keep an handle on them use xmlExpRef() and use xmlExpFree() to release them, this is true even in case of failure (unless ctxt == NULL). + + + + + + + defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED) + Get the atom associated to the range (@subset){@min, @max} Note that @subset is consumed in the operation, to keep an handle on it use xmlExpRef() and use xmlExpFree() to release it, this is true even in case of failure (unless ctxt == NULL). + + + + + + + + defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED) + Get the atom associated to the sequence @left , @right Note that @left and @right are consumed in the operation, to keep an handle on them use xmlExpRef() and use xmlExpFree() to release them, this is true even in case of failure (unless ctxt == NULL). + + + + + + + defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED) + Minimal parser for regexps, it understand the following constructs - string terminals - choice operator | - sequence operator , - subexpressions (...) - usual cardinality operators + * and ? - finite sequences { min, max } - infinite sequences { min, * } There is minimal checkings made especially no checking on strings values + + + + + + defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED) + Increase the reference count of the expression + + + + + defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED) + Do one step of Brzozowski derivation of the expression @exp with respect to the input string + + + + + + + + defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED) + Check whether @exp accepts all the languages accexpted by @sub the input being a subexpression. + + + + + + + External entity loaders types. + + + + + + + Close an I/O channel + + + + + input from FILE * + + + + + Wrapper around xmlFileOpen_real that try it with an unescaped version of @filename, if this fails fallback to @filename + + + + + Read @len bytes to @buffer from the I/O channel. + + + + + + + Search in the registered set the handler able to read/write that encoding. + + + + + defined(LIBXML_TREE_ENABLED) + Finds the first child node of that element which is a Element node Note the handling of entities references is different than in the W3C DOM element traversal spec since we don't have back reference from entities content to entities references. + + + + + Deallocate the memory used by an entities hash table. + + + + + defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED) + Free an automata + + + + + defined(LIBXML_CATALOG_ENABLED) + Free the memory allocated to a Catalog + + + + + Free up all the structures used by a document, tree included. + + + + + Free an element content structure. The whole subtree is removed. + + + + + + Free a DTD structure. + + + + + Free an element content structure. The whole subtree is removed. Deprecated, use xmlFreeDocElementContent instead + + + + + Deallocate the memory used by an element hash table. + + + + + Deallocate the memory used by an entities hash table. + + + + + free an enumeration attribute node (recursive). + + + + + Signature for a free() implementation. + + + + + Deallocate the memory used by an ID hash table. + + + + + Free up an input stream. + + + + + xmlFreeMutex() is used to reclaim resources associated with a libxml2 token struct. + + + + + 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. + + + + + Free a node and all its siblings, this is a recursive behaviour, all the children are freed too. + + + + + Deallocate the memory used by an entities hash table. + + + + + Free up the structures associated to a namespace + + + + + Free up all the structures associated to the chained namespaces. + + + + + Free all the memory used by a parser context. However the parsed document in ctxt->myDoc is not freed. + + + + + Free up the memory used by a buffered parser input + + + + + defined(LIBXML_PATTERN_ENABLED) + Free up the memory allocated by @comp + + + + + defined(LIBXML_PATTERN_ENABLED) + Free up the memory allocated by all the elements of @comp + + + + + Free one attribute, all the content is freed too + + + + + Free a property and all its siblings, all the children are freed too. + + + + + xmlRFreeMutex() is used to reclaim resources associated with a reentrant mutex. + + + + + Deallocate the memory used by an Ref hash table. + + + + + defined(LIBXML_PATTERN_ENABLED) + Free the stream context + + + + + defined(LIBXML_READER_ENABLED) + Deallocate all the resources associated to the reader + + + + + defined(LIBXML_WRITER_ENABLED) + Deallocate all the resources associated to the writer + + + + + Free up the xmlURI struct + + + + + defined(LIBXML_VALID_ENABLED) + Free a validation context structure. + + + + + 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 + + + + + + + + + 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 ? + + + + + + + + + Signature of the function to use when there is an error and no parsing or validity context available . + + + + + + + Types are XML_BUFFER_ALLOC_EXACT - use exact sizes, keeps memory usage down XML_BUFFER_ALLOC_DOUBLEIT - double buffer when extra needed, improves performance XML_BUFFER_ALLOC_HYBRID - use exact sizes on small strings to keep memory usage tight in normal usage, and doubleit on large strings to avoid pathological performance. + + + + Search in the registered set the handler able to read/write that 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 + + + + + get the default compression mode used, ZLIB based. + + + + get the compression ratio for a document, ZLIB based + + + + + Do an entity lookup in the document entity hash table and + + + + + + Search the DTD for the description of this attribute on this element. + + + + + + + Search the DTD for the description of this element + + + + + + Do an entity lookup in the DTD entity hash table and + + + + + + Search the DTD for the description of this notation + + + + + + Search the DTD for the description of this qualified attribute on this element. + + + + + + + + Search the DTD for the description of this element + + + + + + + Lookup an encoding name for the given alias. + + + + + Get the default external entity resolver function for the application + + + + defined(LIBXML_LEGACY_ENABLED) + Read the current value of one feature of this parser instance + + + + + + + defined(LIBXML_LEGACY_ENABLED) + Copy at most *@len feature names into the @result array + + + + + + xmlGetGlobalState() is called to retrieve the global state for a thread. + + + + Search the attribute declaring the given ID + + + + + + Get the internal subset of a document + + + + + Search the last child of a node. + + + + + Get the last global error registered. This is per thread if compiled with thread support. + + + + Get line number of @node. Try to override the limitation of lines being store in 16 bits ints if XML_PARSE_BIG_LINES parser option was used + + + + + 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. + + + + + + defined(LIBXML_TREE_ENABLED) || defined(LIBXML_DEBUG_ENABLED) + Build a structure based Path for the given node + + + + + defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) + Search all the namespace applying to a given element. + + + + + + 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. + + + + + + + Do an entity lookup in the internal and external subsets and + + + + + + Check whether this name is an predefined entity. + + + + + 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. + + + + + + Find the set of references for the supplied ID. + + + + + + xmlGetThreadId() find the current thread ID number Note that this is likely to be broken on some platforms using pthreads as the specification doesn't mandate pthread_t to be an integer type + + + + Read the first UTF8 character from @utf + + + + + + defined(LIBXML_LEGACY_ENABLED) + 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. + + + + + + Examines if the library has been compiled with a given feature. + + + + + Search for an attribute associated to a node This attribute has to be anchored in the namespace specified. This does the entity substitution. This function looks in DTD attribute declaration for #FIXED or default declaration values unless DTD use has been turned off. Note that a namespace of NULL indicates to use the default namespace. + + + + + + + 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. + + + + + + Add the @userdata to the hash @table. This can later be retrieved by using the @name. Duplicate names generate errors. + + + + + + + Add the @userdata to the hash @table. This can later be retrieved by using the (@name, @name2) tuple. Duplicate tuples generate errors. + + + + + + + + Add the @userdata to the hash @table. This can later be retrieved by using the tuple (@name, @name2, @name3). Duplicate entries generate errors. + + + + + + + + + Callback to copy data from a hash. + + + + + + Scan the hash @table and applied @f to each value. + + + + + + Create a new xmlHashTablePtr. + + + + + Create a new xmlHashTablePtr which will use @dict as the internal dictionary + + + + + + Callback to free data from a hash. + + + + + + Free the hash @table and its contents. The userdata is deallocated with @f if provided. + + + + + + Find the userdata specified by the @name. + + + + + + Find the userdata specified by the (@name, @name2) tuple. + + + + + + + Find the userdata specified by the (@name, @name2, @name3) tuple. + + + + + + + + Find the userdata specified by the QName @prefix:@name/@name. + + + + + + + Find the userdata specified by the QNames tuple + + + + + + + + + Find the userdata specified by the (@name, @name2, @name3) tuple. + + + + + + + + + + + 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. + + + + + + + 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. + + + + + + + + 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. + + + + + + + + + Scan the hash @table and applied @f to each value. + + + + + + + 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. + + + + + + + + + + Scan the hash @table and applied @f to each value. + + + + + + + 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. + + + + + + + + + + Callback when scanning data in a hash with the simple scanner. + + + + + + + Callback when scanning data in a hash with the full scanner. + + + + + + + + + Query the number of elements installed in the hash @table. + + + + + 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. + + + + + + + + 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. + + + + + + + + + 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. + + + + + + + + + + defined(LIBXML_FTP_ENABLED) + Close an FTP I/O channel + + + + + defined(LIBXML_FTP_ENABLED) + check if the URI matches an FTP one + + + + + defined(LIBXML_FTP_ENABLED) + open an FTP I/O channel + + + + + defined(LIBXML_FTP_ENABLED) + Read @len bytes to @buffer from the I/O channel. + + + + + + + defined(LIBXML_HTTP_ENABLED) + Close an HTTP I/O channel + + + + + defined(LIBXML_HTTP_ENABLED) + check if the URI matches an HTTP one + + + + + defined(LIBXML_HTTP_ENABLED) + open an HTTP I/O channel + + + + + defined(LIBXML_HTTP_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) + 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. + + + + + + defined(LIBXML_HTTP_ENABLED) + Read @len bytes to @buffer from the I/O channel. + + + + + + + defined(LIBXML_VALID_ENABLED) + Load and parse a DTD + + + + + + + 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. + + + + Additional initialisation for multi-threading + + + + Initialize the memory layer. + + + + -- Initialize (set to initial state) node info sequence + + + + + Initialization function for the XML parser. This is not reentrant. Call once before processing in case of use in multithreaded programs. + + + + Initialize a parser context + + + + + xmlInitThreads() is used to to initialize all the thread related data of the libxml2 library. + + + + defined(LIBXML_CATALOG_ENABLED) + Do the catalog initialization. this function is not thread safe, catalog initialization should preferably be done once at startup + + + + Do the dictionary mutex initialization. this function is deprecated + + + + xmlInitializeGlobalState() initialize a global state with all the default values of the library. + + + + + defined(LIBXML_LEGACY_ENABLED) + Set up the predefined entities. Deprecated call + + + + Callback used in the I/O Input API to close the resource + + + + + Callback used in the I/O Input API to detect if the current handler can provide input fonctionnalities for this resource. + + + + + Callback used in the I/O Input API to open the resource + + + + + Callback used in the I/O Input API to read the resource + + + + + + + This function is DEPRECATED. Use xmlIsBaseChar_ch or xmlIsBaseCharQ instead + + + + + This function is DEPRECATED. Use xmlIsBlank_ch or xmlIsBlankQ instead + + + + + Checks whether this node is an empty or whitespace only (and possibly ignorable) text-node. + + + + + This function is DEPRECATED. Use xmlIsChar_ch or xmlIsCharQ instead + + + + + This function is DEPRECATED. Use xmlIsCombiningQ instead + + + + + This function is DEPRECATED. Use xmlIsDigit_ch or xmlIsDigitQ instead + + + + + This function is DEPRECATED. Use xmlIsExtender_ch or xmlIsExtenderQ instead + + + + + 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. + + + + + + + This function is DEPRECATED. Use xmlIsIdeographicQ instead + + + + + Check whether the character is allowed by the production [84] Letter ::= BaseChar | Ideographic + + + + + xmlIsMainThread() check whether the current thread is the main thread. + + + + Search in the DtDs whether an element accept Mixed content (or ANY) basically if it is supposed to accept text childs + + + + + + This function is DEPRECATED. Use xmlIsPubidChar_ch or xmlIsPubidCharQ instead + + + + + 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). + + + + + + + Try to find if the document correspond to an XHTML DTD + + + + + + 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. + + + + + defined(LIBXML_TREE_ENABLED) + Finds the last child node of that element which is a Element node Note the handling of entities references is different than in the W3C DOM element traversal spec since we don't have back reference from entities content to entities references. + + + + + 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. + + + + + See Returns. + + + + + Insert data in the ordered list at the end for this value + + + + + + Remove the all data in the list + + + + + Move all the element from the old list in the new list + + + + + + Create a new list + + + + + + Callback function used to compare 2 data. + + + + + + Callback function used to free data from a list. + + + + + Deletes the list and its associated data + + + + + Duplicate the list + + + + + Is the list empty ? + + + + + Get the last element in the list + + + + + Get the first element in the list + + + + + Insert data in the ordered list at the beginning for this value + + + + + + include all the elements of the second list in the first one and clear the second list + + + + + + Removes the last element in the list + + + + + Removes the first element in the list + + + + + add the new data at the end of the list + + + + + + add the new data at the beginning of the list + + + + + + Remove the all instance associated to data in the list + + + + + + Remove the first instance associated to data in the list + + + + + + Remove the last instance associated to data in the list + + + + + + Reverse the order of the elements in the list + + + + + Search the list in reverse order for an existing value of @data + + + + + + Walk all the element of the list in reverse order and apply the walker function to it + + + + + + + Search the list for an existing value of @data + + + + + + Get the number of elements in the list + + + + + Sort all the elements in the list + + + + + Walk all the element of the first from first to last and apply the walker function to it + + + + + + + Callback function used when walking a list with xmlListWalk(). + + + + + + defined(LIBXML_CATALOG_ENABLED) + 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. + + + + + defined(LIBXML_CATALOG_ENABLED) + 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 + + + + + defined(LIBXML_CATALOG_ENABLED) + 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 + + + + + Load an external entity, note that the use of this function for unparsed entities may generate problems + + + + + + + defined(LIBXML_CATALOG_ENABLED) + 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. + + + + + xmlLockLibrary() is used to take out a re-entrant lock on the libxml2 library. + + + + defined(LIBXML_DEBUG_ENABLED) + Count the children of @node. + + + + + defined(LIBXML_DEBUG_ENABLED) + Dump to @output the type and name of @node. + + + + + + a malloc() equivalent, with logging of the allocation info. + + + + + + + Signature for a malloc() implementation. + + + + + a malloc() equivalent, with logging of the allocation info. + + + + + + + Provides the number of memory areas currently allocated + + + + show in-extenso the memory blocks allocated + + + + + the last nbBytes of memory allocated and not freed, useful for dumping the memory left allocated between two places at runtime. + + + + + + a free() equivalent, with error checking. + + + + + Provides the memory access functions set currently in use + + + + + + + + a malloc() equivalent, with logging of the allocation info. + + + + + a realloc() equivalent, with logging of the allocation 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 ? + + + + + + + + show a show display of the memory allocated, and dump the @nr last allocated areas which were not freed + + + + + + a strdup() equivalent, with logging of the allocation info. + + + + + + + Provides the amount of memory currently allocated + + + + Dump in-extenso the memory blocks allocated to the file .memorylist + + + + a strdup() equivalent, with logging of the allocation info. + + + + + defined(LIBXML_MODULES_ENABLED) + The close operations unload the associated module and free the data associated to the module. + + + + + defined(LIBXML_MODULES_ENABLED) + The free operations free the data associated to the module but does not unload the associated shared library which may still be in use. + + + + + defined(LIBXML_MODULES_ENABLED) + Opens a module/shared library given its name or path NOTE: that due to portability issues, behaviour can only be guaranteed with @name using ASCII. We canot guarantee that an UTF-8 string would work, which is why name is a const char * and not a const xmlChar * . TODO: options are not yet implemented. + + + + + + defined(LIBXML_MODULES_ENABLED) + Lookup for a symbol address in the given module NOTE: that due to portability issues, behaviour can only be guaranteed with @name using ASCII. We canot guarantee that an UTF-8 string would work, which is why name is a const char * and not a const xmlChar * . + + + + + + + xmlMutexLock() is used to lock a libxml2 token. + + + + + xmlMutexUnlock() is used to unlock a libxml2 token. + + + + + defined(LIBXML_LEGACY_ENABLED) + 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 + + + + + defined(LIBXML_LEGACY_ENABLED) + 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)? + + + + + defined(LIBXML_LEGACY_ENABLED) + 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 + + + + + + defined(LIBXML_FTP_ENABLED) + Check if there is a response from the FTP server after a command. + + + + + defined(LIBXML_FTP_ENABLED) + Cleanup the FTP protocol layer. This cleanup proxy informations. + + + + defined(LIBXML_FTP_ENABLED) + Close the connection and both control and transport + + + + + defined(LIBXML_FTP_ENABLED) + Close the data connection from the server + + + + + defined(LIBXML_FTP_ENABLED) + Tries to open a control connection + + + + + defined(LIBXML_FTP_ENABLED) + Tries to open a control connection to the given server/port + + + + + + defined(LIBXML_FTP_ENABLED) + Tries to change the remote directory + + + + + + defined(LIBXML_FTP_ENABLED) + Tries to delete an item (file or directory) from server + + + + + + defined(LIBXML_FTP_ENABLED) + Frees the context after closing the connection. + + + + + defined(LIBXML_FTP_ENABLED) + Fetch the given file from the server. All data are passed back in the callbacks. The last callback has a size of 0 block. + + + + + + + + defined(LIBXML_FTP_ENABLED) + Try to open a data connection to the server. Currently only passive mode is supported. + + + + + defined(LIBXML_FTP_ENABLED) + Get the response from the FTP server after a command. + + + + + defined(LIBXML_FTP_ENABLED) + Initiate fetch of the given file from the server. + + + + + + defined(LIBXML_FTP_ENABLED) + Initialize the FTP protocol layer. Currently it just checks for proxy informations, and get the hostname + + + + defined(LIBXML_FTP_ENABLED) + Do a listing on the server. All files info are passed back in the callbacks. + + + + + + + + defined(LIBXML_FTP_ENABLED) + Allocate and initialize a new FTP context. + + + + + defined(LIBXML_FTP_ENABLED) + Start to fetch the given ftp:// resource + + + + + defined(LIBXML_FTP_ENABLED) + Setup the FTP proxy informations. This can also be done by using ftp_proxy ftp_proxy_user and ftp_proxy_password environment variables. + + + + + + + + + defined(LIBXML_FTP_ENABLED) + Send a QUIT command to the server + + + + + defined(LIBXML_FTP_ENABLED) + This function tries to read @len bytes from the existing FTP connection and saves them in @dest. This is a blocking call. + + + + + + + defined(LIBXML_FTP_ENABLED) + (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. + + + + + defined(LIBXML_FTP_ENABLED) + 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. + + + + + + defined(LIBXML_HTTP_ENABLED) + Get the authentication header of an HTTP context + + + + + defined(LIBXML_HTTP_ENABLED) + Cleanup the HTTP protocol layer. + + + + defined(LIBXML_HTTP_ENABLED) + This function closes an HTTP context, it ends up the connection and free all data related to it. + + + + + defined(LIBXML_HTTP_ENABLED) + Provides the specified content length from the HTTP header. + + + + + defined(LIBXML_HTTP_ENABLED) + Provides the specified encoding if specified in the HTTP headers. + + + + + defined(LIBXML_HTTP_ENABLED) + This function try to fetch the indicated resource via HTTP GET and save it's content in the file. + + + + + + + defined(LIBXML_HTTP_ENABLED) + Initialize the HTTP protocol layer. Currently it just checks for proxy informations + + + + defined(LIBXML_HTTP_ENABLED) + 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. + + + + + + + + + + defined(LIBXML_HTTP_ENABLED) + 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. + + + + + + + + + + + defined(LIBXML_HTTP_ENABLED) + Provides the specified Mime-Type if specified in the HTTP headers. + + + + + defined(LIBXML_HTTP_ENABLED) + This function try to open a connection to the indicated resource via HTTP GET. + + + + + + defined(LIBXML_HTTP_ENABLED) + This function try to open a connection to the indicated resource via HTTP GET. + + + + + + + defined(LIBXML_HTTP_ENABLED) + This function tries to read @len bytes from the existing HTTP connection and saves them in @dest. This is a blocking call. + + + + + + + defined(LIBXML_HTTP_ENABLED) + Provides the specified redirection URL if available from the HTTP header. + + + + + defined(LIBXML_HTTP_ENABLED) + Get the latest HTTP return code received + + + + + defined(LIBXML_HTTP_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) + This function saves the output of the HTTP transaction to a file It closes and free the context at the end + + + + + + defined(LIBXML_HTTP_ENABLED) + (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. + + + + + defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED) + Create a new automata + + + + Creation of a new node containing a CDATA block. + + + + + + + defined(LIBXML_CATALOG_ENABLED) + create a new Catalog. + + + + + Create and registers an xmlCharEncodingHandler. + + + + + + + Creation of a new character reference node. + + + + + + defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) + 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. + + + + + + + + Creation of a new node containing a comment. + + + + + Creates a new XML document + + + + + Creation of a new node containing a comment within a document. + + + + + + Allocate an element content structure for the document. + + + + + + + defined(LIBXML_TREE_ENABLED) + Creation of a new Fragment node. + + + + + 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. + + + + + + + + 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. + + + + + + + + Creation of a processing instruction element. + + + + + + + Create a new property carried by a document. + + + + + + + defined(LIBXML_TREE_ENABLED) + Creation of a new node element within a document. @ns and @content are optional (NULL). + + + + + + + + Creation of a new text node within a document. + + + + + + Creation of a new text node with an extra content length parameter. The text node pertain to a given document. + + + + + + + Creation of a new DTD for the external subset. To create an internal subset, use xmlCreateIntSubset(). + + + + + + + + Allocate an element content structure. Deprecated in favor of xmlNewDocElementContent + + + + + + Create a new entity, this differs from xmlAddDocEntity() that if the document is NULL or has no internal subset defined, then an unlinked entity structure will be returned, it is then the responsability of the caller to link it to the document later or free it when not needed anymore. + + + + + + + + + + Create a new input stream based on an xmlEntityPtr + + + + + + defined(LIBXML_LEGACY_ENABLED) + Creation of a Namespace, the old way using PI and without scoping DEPRECATED !!! + + + + + + + Create a new input stream structure encapsulating the @input into a stream suitable for the parser. + + + + + + + Create a new input stream based on a file or an URL. + + + + + + Create a new input stream structure. + + + + + xmlNewMutex() is used to allocate a libxml2 token struct for use in synchronizing access to data. + + + + Creation of a new node element. @ns is optional (NULL). + + + + + + Creation of a new node element. @ns is optional (NULL). + + + + + + Creation of a new Namespace. This function will refuse to create a namespace with a similar prefix than an existing one present on this node. Note that for a default namespace, @prefix should be NULL. We use href==NULL in the case of an element creation where the namespace was not defined. + + + + + + + Create a new property tagged with a namespace and carried by a node. + + + + + + + + Create a new property tagged with a namespace and carried by a node. + + + + + + + + Creation of a processing instruction element. Use xmlDocNewPI preferably to get string interning + + + + + + Allocate and initialize a new parser context. + + + + defined(LIBXML_TREE_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) + Create a new property carried by a node. + + + + + + + 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. + + + + Creation of a new reference node. + + + + + + Create a new input stream based on a memory buffer. + + + + + + Creation of a new text node. + + + + + defined(LIBXML_TREE_ENABLED) + 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. + + + + + + + + Creation of a new text node with an extra parameter for the content's length + + + + + + defined(LIBXML_READER_ENABLED) + Create an xmlTextReader structure fed with @input + + + + + + defined(LIBXML_READER_ENABLED) + Create an xmlTextReader structure fed with the resource at @URI + + + + + defined(LIBXML_WRITER_ENABLED) + Create a new xmlNewTextWriter structure using an xmlOutputBufferPtr NOTE: the @out parameter will be deallocated when the writer is closed (if the call succeed.) + + + + + defined(LIBXML_WRITER_ENABLED) + Create a new xmlNewTextWriter structure with @*doc as output + + + + + + defined(LIBXML_WRITER_ENABLED) + Create a new xmlNewTextWriter structure with @uri as output + + + + + + defined(LIBXML_WRITER_ENABLED) + Create a new xmlNewTextWriter structure with @buf as output TODO: handle compression + + + + + + defined(LIBXML_WRITER_ENABLED) + Create a new xmlNewTextWriter structure with @ctxt as output NOTE: the @ctxt context will be freed with the resulting writer (if the call succeeds). TODO: handle compression + + + + + + defined(LIBXML_WRITER_ENABLED) + Create a new xmlNewTextWriter structure with @doc as output starting at @node + + + + + + + defined(LIBXML_VALID_ENABLED) + Allocate a validation context structure. + + + + Skip to the next char input char. + + + + + defined(LIBXML_TREE_ENABLED) + Finds the first closest next sibling of the node which is an element node. Note the handling of entities references is different than in the W3C DOM element traversal spec since we don't have back reference from entities content to entities references. + + + + + A specific entity loader disabling network accesses, though still allowing local catalog accesses for resolution. + + + + + + + Append the extra substring to the node content. NOTE: In contrast to xmlNodeSetContent(), @content is supposed to be raw text, so unescaped XML special chars are allowed, entity references are not supported. + + + + + + Append the extra substring to the node content. NOTE: In contrast to xmlNodeSetContentLen(), @content is supposed to be raw text, so unescaped XML special chars are allowed, entity references are not supported. + + + + + + + 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 + + + + + + defined(LIBXML_OUTPUT_ENABLED) + Dump an XML node, recursive behaviour,children are printed too. Note that @format = 1 provide node indenting only if xmlIndentTreeOutput = 1 or xmlKeepBlanksDefault(0) was called Since this is using xmlBuffer structures it is limited to 2GB and somehow deprecated, use xmlBufNodeDump() instead. + + + + + + + + + defined(LIBXML_OUTPUT_ENABLED) + 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 + + + + + + + + + + Searches for the BASE URL. The code should work on both XML and HTML document even if base mechanisms are completely different. It returns the base as defined in RFC 2396 sections 5.1.1. Base URI within Document Content and 5.1.2. Base URI from the Encapsulating Entity However it does not return the document base (5.1.3), use doc->URL in this case + + + + + + 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. + + + + + Searches the language of a node, i.e. the values of the xml:lang attribute or the one carried by the nearest ancestor. + + + + + 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. + + + + + Is this node a Text node ? + + + + + defined(LIBXML_TREE_ENABLED) + 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. + + + + + + + Build the string equivalent to the text contained in the Node list made of TEXTs and ENTITY_REFs + + + + + + + defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) + Set (or reset) the base URI of a node, i.e. the value of the xml:base attribute. + + + + + + Replace the content of a node. NOTE: @content is supposed to be a piece of XML CDATA, so it allows entity references, but XML special chars need to be escaped first by using xmlEncodeEntitiesReentrant() resp. xmlEncodeSpecialChars(). + + + + + + defined(LIBXML_TREE_ENABLED) + Replace the content of a node. NOTE: @content is supposed to be a piece of XML CDATA, so it allows entity references, but XML special chars need to be escaped first by using xmlEncodeEntitiesReentrant() resp. xmlEncodeSpecialChars(). + + + + + + + defined(LIBXML_TREE_ENABLED) + Set the language of a node, i.e. the values of the xml:lang attribute. + + + + + + defined(LIBXML_TREE_ENABLED) + Set (or reset) the name of a node. + + + + + + defined(LIBXML_TREE_ENABLED) + Set (or reset) the space preserving behaviour of a node, i.e. the value of the xml:space attribute. + + + + + + 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 + + + + + This function is obsolete. Please see xmlURIFromPath in uri.c for a better solution. + + + + + defined(LIBXML_OUTPUT_ENABLED) + flushes and close the output I/O channel and free up all the associated resources + + + + + defined(LIBXML_OUTPUT_ENABLED) + Create a buffered output for the progressive saving to a xmlBuffer + + + + + + defined(LIBXML_OUTPUT_ENABLED) + Create a buffered output for the progressive saving to a file descriptor + + + + + + defined(LIBXML_OUTPUT_ENABLED) + Create a buffered output for the progressive saving to a FILE * buffered C I/O + + + + + + defined(LIBXML_OUTPUT_ENABLED) + 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. + + + + + + + Registers a callback for URI output file handling + + + + + Signature for the function doing the lookup for a suitable output method corresponding to an URI. + + + + + + + defined(LIBXML_OUTPUT_ENABLED) + Create a buffered output for the progressive saving to an I/O handler + + + + + + + + defined(LIBXML_OUTPUT_ENABLED) + flushes the output I/O channel + + + + + defined(LIBXML_OUTPUT_ENABLED) + Gives a pointer to the data currently held in the output buffer + + + + + defined(LIBXML_OUTPUT_ENABLED) + Gives the length of the data currently held in the output buffer + + + + + defined(LIBXML_OUTPUT_ENABLED) + 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. + + + + + + + defined(LIBXML_OUTPUT_ENABLED) + Write the content of the string in the output I/O buffer This routine escapes the caracters and then handle the I18N transcoding from internal UTF-8 The buffer is lossless, i.e. will store in case of partial or delayed writes. + + + + + + + defined(LIBXML_OUTPUT_ENABLED) + 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. + + + + + + defined(LIBXML_OUTPUT_ENABLED) + Callback used in the I/O Output API to close the resource + + + + + defined(LIBXML_OUTPUT_ENABLED) + Callback used in the I/O Output API to detect if the current handler can provide output fonctionnalities for this resource. + + + + + defined(LIBXML_OUTPUT_ENABLED) + Callback used in the I/O Output API to open the resource + + + + + defined(LIBXML_OUTPUT_ENABLED) + Callback used in the I/O Output API to write to the resource + + + + + + + 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. + + + + + defined(LIBXML_SAX1_ENABLED) + 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. + + + + + + : parse the Attribute list def for an element [52] AttlistDecl ::= '<!ATTLIST' S Name AttDef* S? '>' [53] AttDef ::= S Name S AttType S DefaultDecl + + + + + 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. + + + + + + defined(LIBXML_SAX1_ENABLED) + 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)* + + + + + + + + + + defined(LIBXML_SAX1_ENABLED) + 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)* + + + + + + + + + + + Parse escaped pure raw content. [18] CDSect ::= CDStart CData CDEnd [19] CDStart ::= '<![CDATA[' [20] Data ::= (Char* - (Char* ']]>' Char*)) [21] CDEnd ::= ']]>' + + + + + defined(LIBXML_CATALOG_ENABLED) + parse an XML file and build a tree. It's like xmlParseFile() except it bypass all catalog lookups. + + + + + 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 ::= [^<&]* - ([^<&]* ']]>' [^<&]*) + + + + + + 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. + + + + + 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. + + + + + defined(LIBXML_PUSH_ENABLED) + Parse a Chunk of memory + + + + + + + + Skip an XML (SGML) comment <!-- .... --> The spec says that "For compatibility, the string "--" (double-hyphen) must not occur within comments. " [15] Comment ::= '<!--' ((Char - '-') | ('-' (Char - '-')))* '-->' + + + + + Parse a content: [43] content ::= (element | CharData | Reference | CDSect | PI | Comment)* + + + + + 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 + + + + + + + + defined(LIBXML_VALID_ENABLED) + Load and parse an external subset. + + + + + + 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() + + + + + + defined(LIBXML_SAX1_ENABLED) + parse an XML in-memory document and build a tree. + + + + + 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. + + + + + 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*)? + + + + + 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. + + + + + 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 ,). + + + + + + 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 + + + + + + + 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 + + + + + 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. + + + + + + parse the XML encoding name [81] EncName ::= [A-Za-z] ([A-Za-z0-9._] | '-')* + + + + + parse the XML encoding declaration [80] EncodingDecl ::= S 'encoding' Eq ('"' EncName '"' | "'" EncName "'") this setups the conversion filters. + + + + + defined(LIBXML_SAX1_ENABLED) + parse an end of tag [42] ETag ::= '</' Name S? '>' With namespace [NS 9] ETag ::= '</' QName S? '>' + + + + + defined(LIBXML_SAX1_ENABLED) + parse an XML external entity out of context and build a tree. [78] extParsedEnt ::= TextDecl? content This correspond to a "Well Balanced" chunk + + + + + 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. + + + + + 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 + + + + + parse a value for ENTITY declarations [9] EntityValue ::= '"' ([^%&"] | PEReference | Reference)* '"' | "'" ([^%&'] | PEReference | Reference)* "'" + + + + + + parse an Enumerated attribute type. [57] EnumeratedType ::= NotationType | Enumeration [58] NotationType ::= 'NOTATION' S '(' S? Name (S? '|' S? Name)* S? ')' + + + + + + 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 + + + + + parse a general parsed entity An external general parsed entity is well-formed if it matches the production labeled extParsedEnt. [78] extParsedEnt ::= TextDecl? content + + + + + defined(LIBXML_SAX1_ENABLED) + Parse an external general entity An external general parsed entity is well-formed if it matches the production labeled extParsedEnt. [78] extParsedEnt ::= TextDecl? content + + + + + + + + + + + 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 + + + + + + + parse Markup declarations from an external subset [30] extSubset ::= textDecl? extSubsetDecl [31] extSubsetDecl ::= (markupdecl | conditionalSect | PEReference | S) * + + + + + + + defined(LIBXML_SAX1_ENABLED) + parse an XML file and build a tree. Automatic support for ZLIB/Compress compressed document is provided by default if found at compile-time. + + + + + Parse a well-balanced chunk of an XML document within the context (DTD, namespaces, etc ...) of the given node. The allowed sequence for the data is a Well Balanced Chunk defined by the content production in the XML grammar: [43] content ::= (element | CharData | Reference | CDSect | PI | Comment)* + + + + + + + + + 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.) + + + + + defined(LIBXML_SAX1_ENABLED) + parse an XML in-memory block and build a tree. + + + + + + parse an XML Misc* optional field. [27] Misc ::= Comment | PI | S + + + + + parse an XML name. [4] NameChar ::= Letter | Digit | '.' | '-' | '_' | ':' | CombiningChar | Extender [5] Name ::= (Letter | '_' | ':') (NameChar)* [6] Names ::= Name (#x20 Name)* + + + + + defined(LIBXML_LEGACY_ENABLED) + 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 + + + + + parse an XML Nmtoken. [7] Nmtoken ::= (NameChar)+ [8] Nmtokens ::= Nmtoken (#x20 Nmtoken)* + + + + + 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(). + + + + + 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. + + + + + 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. + + + + + parse an XML Processing Instruction. [16] PI ::= '<?' PITarget (S (Char* - (Char* '?>' Char*)))? '?>' The processing is transfered to SAX once parsed. + + + + + parse the name of a PI [17] PITarget ::= Name - (('X' | 'x') ('M' | 'm') ('L' | 'l')) + + + + + parse an XML public literal [12] PubidLiteral ::= '"' PubidChar* '"' | "'" (PubidChar - "'")* "'" + + + + + defined(LIBXML_LEGACY_ENABLED) + Parse and return a string between quotes or doublequotes TODO: Deprecated, to be removed at next drop of binary compatibility + + + + + 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 + + + + + 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. + + + + + defined(LIBXML_SAX1_ENABLED) + 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? '/>' + + + + + parse an XML Literal [11] SystemLiteral ::= ('"' [^"]* '"') | ("'" [^']* "'") + + + + + parse an XML declaration header for external entities [77] TextDecl ::= '<?xml' VersionInfo? EncodingDecl S? '?>' + + + + + Parse an URI based on RFC 3986 URI-reference = [ absoluteURI | relativeURI ] [ "#" fragment ] + + + + + Parse an URI but allows to keep intact the original fragments. URI-reference = URI / relative-ref + + + + + + Parse an URI reference string based on RFC 3986 and fills in the appropriate fields of the @uri structure URI-reference = URI / relative-ref + + + + + + parse the XML version. [24] VersionInfo ::= S 'version' Eq (' VersionNum ' | " VersionNum ") [25] Eq ::= S? '=' S? + + + + + parse the XML version value. [26] VersionNum ::= '1.' [0-9]+ In practice allow [0-9].[0-9]+ at that level + + + + + parse an XML declaration header [23] XMLDecl ::= '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>' + + + + + Insert node info record into the sorted sequence + + + + + + Display and format an error messages, gives file, line, position and extra parameters. + + + + + + + Find the parser node info struct for a given node + + + + + + xmlParserFindNodeInfoIndex : Find the index that the info record for the given node is or should be at in a sorted sequence + + + + + + lookup the directory for that file + + + + + [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 + + + + + defined(LIBXML_LEGACY_ENABLED) + 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 + + + + + Create a buffered parser input for the progressive parsing for the input from a file descriptor + + + + + + Create a buffered parser input for the progressive parsing of a FILE * buffered C I/O + + + + + + 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 + + + + + + Registers a callback for URI input file handling + + + + + Signature for the function doing the lookup for a suitable input method corresponding to an URI. + + + + + + Create a buffered parser input for the progressive parsing for the input from an I/O handler + + + + + + + + Create a buffered parser input for the progressive parsing for the input from a memory area. + + + + + + + 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. + + + + + + + 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 + + + + + + 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. + + + + + + + Refresh the content of the input buffer, the old data are considered consumed This routine handle the I18N transcoding to internal UTF-8 + + + + + + Callback for freeing some parser input allocations. + + + + + This function increase the input for the parser. It tries to preserve pointers to the input buffer, and keep already read data + + + + + + This function was internal and is deprecated. + + + + + + This function removes used input for the parser. + + + + + Displays current context within the input content for error tracking + + + + + Displays the associated file and line informations for the current input + + + + + Display and format an validity error messages, gives file, line, position and extra parameters. + + + + + + + Display and format a validity warning messages, gives file, line, position and extra parameters. + + + + + + + Display and format a warning messages, gives file, line, position and extra parameters. + + + + + + + Constructs an URI expressing the existing path + + + + + defined(LIBXML_PATTERN_ENABLED) + Check if the pattern must be looked at from the root. + + + + + defined(LIBXML_PATTERN_ENABLED) + Get a streaming context for that pattern Use xmlFreeStreamCtxt to free the context. + + + + + defined(LIBXML_PATTERN_ENABLED) + Test whether the node matches the pattern + + + + + + defined(LIBXML_PATTERN_ENABLED) + Check the maximum depth reachable by a pattern + + + + + defined(LIBXML_PATTERN_ENABLED) + Check the minimum depth reachable by a pattern, 0 mean the / or . are part of the set. + + + + + defined(LIBXML_PATTERN_ENABLED) + Check if the pattern is streamable i.e. xmlPatternGetStreamCtxt() should work. + + + + + defined(LIBXML_PATTERN_ENABLED) + Compile a pattern. + + + + + + + + Set and return the previous value for enabling pedantic warnings. + + + + + xmlPopInput: the current input pointed by ctxt->input came to an end pop it and return the next char. + + + + + Clear the top input callback from the input stack. this includes the compiled-in I/O. + + + + defined(LIBXML_TREE_ENABLED) + Finds the first closest previous sibling of the node which is an element node. Note the handling of entities references is different than in the W3C DOM element traversal spec since we don't have back reference from entities content to entities references. + + + + + Prints the URI in the stream @stream. + + + + + + xmlPushInput: switch to a new input stream which is stacked on top of the previous one(s). + + + + + + xmlRMutexLock() is used to lock a libxml2 token_r. + + + + + xmlRMutexUnlock() is used to unlock a libxml2 token_r. + + + + + parse an XML in-memory document and build a tree. + + + + + + + + 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. + + + + + + + + parse an XML file from the filesystem or the network. + + + + + + + parse an XML document from I/O functions and source and build a tree. + + + + + + + + + + parse an XML in-memory document and build a tree. + + + + + + + + + defined(LIBXML_READER_ENABLED) + Create an xmltextReader for an XML in-memory document. The parsing flags @options are a combination of xmlParserOption. + + + + + + + + defined(LIBXML_READER_ENABLED) + 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. + + + + + + + + defined(LIBXML_READER_ENABLED) + parse an XML file from the filesystem or the network. The parsing flags @options are a combination of xmlParserOption. + + + + + + + defined(LIBXML_READER_ENABLED) + Create an xmltextReader for an XML document from I/O functions and source. The parsing flags @options are a combination of xmlParserOption. + + + + + + + + + + defined(LIBXML_READER_ENABLED) + Create an xmltextReader for an XML in-memory document. The parsing flags @options are a combination of xmlParserOption. + + + + + + + + + defined(LIBXML_READER_ENABLED) + 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. + + + + + + + + + defined(LIBXML_READER_ENABLED) + 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. + + + + + + + + + defined(LIBXML_READER_ENABLED) + 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. + + + + + + + + defined(LIBXML_READER_ENABLED) + 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. + + + + + + + + + + + defined(LIBXML_READER_ENABLED) + 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. + + + + + + + + + + defined(LIBXML_READER_ENABLED) + Setup an xmltextReader to parse a preparsed XML document. This reuses the existing @reader xmlTextReader. + + + + + + defined(LIBXML_READER_ENABLED) + Create an xmltextReader for a preparsed document. + + + + + Signature for a realloc() implementation. + + + + + + a realloc() equivalent, with logging of the allocation info. + + + + + + + + defined(LIBXML_TREE_ENABLED) + 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. + + + + + + defined(LIBXML_SAX1_ENABLED) + parse an XML in-memory document and build a tree. In the case the document is not Well Formed, a attempt to build a tree is tried anyway + + + + + defined(LIBXML_SAX1_ENABLED) + parse an XML file and build a tree. Automatic support for ZLIB/Compress compressed document is provided by default if found at compile-time. In the case the document is not Well Formed, it attempts to build a tree anyway + + + + + defined(LIBXML_SAX1_ENABLED) + parse an XML in-memory block and build a tree. In the case the document is not Well Formed, an attempt to build a tree is tried anyway + + + + + + defined(LIBXML_REGEXP_ENABLED) + Callback function when doing a transition in the automata + + + + + + + + defined(LIBXML_REGEXP_ENABLED) + Extract error informations from the regexp execution, the parameter @string will be updated with the value pushed and not accepted, the parameter @values must point to an array of @nbval string pointers on return nbval will contain the number of possible strings in that state and the @values array will be updated with them. The string values + + + + + + + + + + defined(LIBXML_REGEXP_ENABLED) + Extract informations from the regexp execution, the parameter @values must point to an array of @nbval string pointers on return nbval will contain the number of possible strings in that state and the @values array will be updated with them. The string values + + + + + + + + + defined(LIBXML_REGEXP_ENABLED) + Push one input token in the execution context + + + + + + + defined(LIBXML_REGEXP_ENABLED) + Push one input token in the execution context + + + + + + + + defined(LIBXML_REGEXP_ENABLED) + Free the structures associated to a regular expression evaulation context. + + + + + defined(LIBXML_REGEXP_ENABLED) + Free a regexp + + + + + defined(LIBXML_REGEXP_ENABLED) + Build a context used for progressive evaluation of a regexp. + + + + + + + defined(LIBXML_REGEXP_ENABLED) + Parses a regular expression conforming to XML Schemas Part 2 Datatype Appendix F and builds an automata suitable for testing strings against that regular expression + + + + + defined(LIBXML_REGEXP_ENABLED) + Check if the regular expression generates the value + + + + + + defined(LIBXML_REGEXP_ENABLED) + Check if the regular expression is determinist + + + + + defined(LIBXML_REGEXP_ENABLED) + Print the content of the compiled regular expression + + + + + + Register the char encoding handler, surprising, isn't it ? + + + + + Registers the default compiled-in I/O handlers. + + + + defined(LIBXML_OUTPUT_ENABLED) + Registers the default compiled-in I/O handlers. + + + + defined(LIBXML_OUTPUT_ENABLED) && defined(LIBXML_HTTP_ENABLED) + 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. + + + + Register a new set of I/O callback for handling parser input. + + + + + + + + Registers a callback for node creation + + + + + Signature for the registration callback of a created node + + + + + defined(LIBXML_OUTPUT_ENABLED) + Register a new set of I/O callback for handling output. + + + + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Cleanup the default Schemas type library associated to RelaxNG + + + + defined(LIBXML_SCHEMAS_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) + Dump a RelaxNG structure back + + + + + + defined(LIBXML_SCHEMAS_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) + Dump the transformed RelaxNG tree. + + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Deallocate a RelaxNG structure. + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Free the resources associated to the schema parser context + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Free the resources associated to the schema validation context + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Get the callback information used to handle errors for a validation context + + + + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Get the error and warning callback informations + + + + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Initilize the default type libraries. + + + + defined(LIBXML_SCHEMAS_ENABLED) + 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. + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Create an XML RelaxNGs parse context for that memory buffer expected to contain an XML RelaxNGs file. + + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Create an XML RelaxNGs parse context for that file/resource expected to contain an XML RelaxNGs file. + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Create an XML RelaxNGs validation context based on the given schema + + + + + defined(LIBXML_SCHEMAS_ENABLED) + parse a schema definition resource and build an internal XML Shema struture which can be used to validate instances. + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Set the callback functions used to handle errors for a validation context + + + + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Set the callback functions used to handle errors for a parsing context + + + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Set the error and warning callback informations + + + + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Set the structured error callback + + + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Validate a document tree in memory. + + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Validate a full subtree when xmlRelaxNGValidatePushElement() returned 0 and the content of the node has been expanded. + + + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Pop the element end from the RelaxNG validation stack. + + + + + + + defined(LIBXML_SCHEMAS_ENABLED) + check the CData parsed for validation in the current stack + + + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Push a new element start on the RelaxNG validation stack. + + + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Signature of an error callback from a Relax-NG validation + + + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Signature of a warning callback from a Relax-NG validation + + + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Semi private function used to pass informations to a parser context which are a combination of xmlRelaxNGParserFlag . + + + + + + Remove the given attribute from the ID table maintained internally. + + + + + + Unlink and free one attribute, all the content is freed too Note this doesn't work for namespace definition attributes + + + + + Remove the given attribute from the Ref table maintained internally. + + + + + + defined(LIBXML_TREE_ENABLED) || defined(LIBXML_WRITER_ENABLED) + 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. + + + + + + Cleanup the error. + + + + + Cleanup the last global error registered. For parsing error this does not change the well-formedness result. + + + + An attribute definition has been parsed + + + + + + + + + + + called when a pcdata block has been parsed + + + + + + + receiving some chars from the parser. + + + + + + + A xmlSAX2Comment has been parsed. + + + + + + An element definition has been parsed + + + + + + + + called when the document end has been detected. + + + + + defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED) || defined(LIBXML_LEGACY_ENABLED) + called when the end of an element has been detected. + + + + + + SAX2 callback when an element end has been detected by the parser. It provides the namespace informations for the element. + + + + + + + + An entity definition has been parsed + + + + + + + + + + Callback on external subset declaration. + + + + + + + + Provide the column number of the current parsing point. + + + + + Get an entity by name + + + + + + Provide the line number of the current parsing point. + + + + + Get a parameter entity by name + + + + + + Provides the public ID e.g. "-//SGMLSOURCE//DTD DEMO//EN" + + + + + Provides the system ID, basically URL or filename e.g. http://www.sgmlsource.com/dtds/memo.dtd + + + + + Does this document has an external subset + + + + + Does this document has an internal subset + + + + + receiving some ignorable whitespaces from the parser. UNUSED: by default the DOM building will use xmlSAX2Characters + + + + + + + Initialize the default XML SAX2 handler + + + + + + defined(LIBXML_DOCB_ENABLED) + Initialize the default DocBook SAX2 handler + + + + + defined(LIBXML_HTML_ENABLED) + Initialize the default HTML SAX2 handler + + + + + Callback on internal subset declaration. + + + + + + + + Is this document tagged standalone ? + + + + + What to do when a notation declaration has been parsed. + + + + + + + + A processing instruction has been parsed. + + + + + + + called when an entity xmlSAX2Reference is detected. + + + + + + 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 + + + + + + + Receive the document locator at startup, actually xmlDefaultSAXLocator Everything is available on the context, so this is useless in our case. + + + + + + called when the document start being processed. + + + + + defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED) || defined(LIBXML_LEGACY_ENABLED) + called when an opening tag has been processed. + + + + + + + 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. + + + + + + + + + + + + + What to do when an unparsed entity declaration is parsed + + + + + + + + + defined(LIBXML_SAX1_ENABLED) + Set the default version of SAX used globally by the library. By default, during initialization the default is set to 2. Note that it is generally a better coding style to use xmlSAXVersion() to set up the version explicitly for a given parsing context. + + + + + defined(LIBXML_VALID_ENABLED) + Load and parse an external subset. + + + + + + + defined(LIBXML_SAX1_ENABLED) + 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. + + + + + + + defined(LIBXML_SAX1_ENABLED) + 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 + + + + + + defined(LIBXML_SAX1_ENABLED) + 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. + + + + + + + defined(LIBXML_SAX1_ENABLED) + 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 + + + + + + + + defined(LIBXML_SAX1_ENABLED) + 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. + + + + + + + + defined(LIBXML_SAX1_ENABLED) + 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 + + + + + + + + + defined(LIBXML_SAX1_ENABLED) + parse an XML file and call the given SAX handler routines. Automatic support for ZLIB/Compress compressed document is provided + + + + + + + defined(LIBXML_SAX1_ENABLED) + A better SAX parsing routine. parse an XML in-memory buffer and call the given SAX handler routines. + + + + + + + + Initialize the default XML SAX handler according to the version + + + + + + defined(LIBXML_OUTPUT_ENABLED) + Close a document saving context, i.e. make sure that all bytes have been output and free the associated data. + + + + + defined(LIBXML_OUTPUT_ENABLED) + Save a full document to a saving context TODO: The function is not fully implemented yet as it does not return the byte count but 0 instead + + + + + + defined(LIBXML_OUTPUT_ENABLED) + Dump an XML document to a file. Will use compression if compiled in and enabled. If @filename is "-" the stdout file is used. + + + + + + defined(LIBXML_OUTPUT_ENABLED) + Dump an XML document, converting it to the given encoding + + + + + + + defined(LIBXML_OUTPUT_ENABLED) + Dump an XML document to an I/O buffer. Warning ! This call xmlOutputBufferClose() on buf which is not available after this call. + + + + + + + defined(LIBXML_OUTPUT_ENABLED) + Flush a document saving context, i.e. make sure that all bytes have been output. + + + + + defined(LIBXML_OUTPUT_ENABLED) + 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 + + + + + + + defined(LIBXML_OUTPUT_ENABLED) + Dump an XML document to a file or an URL. + + + + + + + + defined(LIBXML_OUTPUT_ENABLED) + Dump an XML document to an I/O buffer. Warning ! This call xmlOutputBufferClose() on buf which is not available after this call. + + + + + + + + defined(LIBXML_OUTPUT_ENABLED) + Set a custom escaping function to be used for text in attribute content + + + + + + defined(LIBXML_OUTPUT_ENABLED) + Set a custom escaping function to be used for text in element content + + + + + + defined(LIBXML_OUTPUT_ENABLED) + Create a document saving context serializing to a buffer with the encoding and the options given + + + + + + + defined(LIBXML_OUTPUT_ENABLED) + Create a document saving context serializing to a file descriptor with the encoding and the options given. + + + + + + + defined(LIBXML_OUTPUT_ENABLED) + 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. + + + + + + + defined(LIBXML_OUTPUT_ENABLED) + Create a document saving context serializing to a file descriptor with the encoding and the options given + + + + + + + + + defined(LIBXML_OUTPUT_ENABLED) + Save a subtree starting at the node parameter to a saving context TODO: The function is not fully implemented yet as it does not return the byte count but 0 instead + + + + + + Save the URI as an escaped string + + + + + defined(LIBXML_LEGACY_ENABLED) + 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)* + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Checks and computes the values of facets. + + + + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Cleanup the default XML Schemas type library + + + + defined(LIBXML_SCHEMAS_ENABLED) + Removes and normalize white spaces in the string + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Compare 2 values + + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Compare 2 values + + + + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Copies the precomputed value. This duplicates any string within. + + + + + defined(LIBXML_SCHEMAS_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) + Dump a Schema structure. + + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Deallocate a Schema structure. + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Deallocate a Schema Facet structure. + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Free the resources associated to the schema parser context + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Deallocate a Schema Type structure. + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Free the resources associated to the schema validation context + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Cleanup the default XML Schemas type library + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Deallocates a wildcard structure. + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Lookup function + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Gives you the type struct for a built-in type by its type id. + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Get the canonical lexical representation of the value. The caller has to FREE the returned retValue. WARNING: Some value types are not supported yet, resulting in a @retValue of "???". TODO: XML Schema 1.0 does not define canonical representations for: duration, gYearMonth, gYear, gMonthDay, gMonth, gDay, anyURI, QName, NOTATION. This will be fixed in XML Schema 1.1. + + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Get the canonical representation of the value. The caller has to free the returned @retValue. + + + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Extract the value of a facet + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Get the callback information used to handle errors for a parser context + + + + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Lookup a type in the default XML Schemas type library + + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Accessor for the type of a value + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Get the error and warning callback informations + + + + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Initialize the default XML Schemas type library + + + + defined(LIBXML_SCHEMAS_ENABLED) + Evaluates if a specific facet can be used in conjunction with a type. + + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Check if any error was detected during validation. + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Create an XML Schemas parse context for that document. NB. The document may be modified during the parsing process. + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Allocate a new Facet structure. + + + + defined(LIBXML_SCHEMAS_ENABLED) + Create an XML Schemas parse context for that memory buffer expected to contain an XML Schemas file. + + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Allocate a new NOTATION value. The given values are consumed and freed with the struct. + + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Create an XML Schemas parse context for that file/resource expected to contain an XML Schemas file. + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Allocate a new QName value. The given values are consumed and freed with the struct. + + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Allocate a new simple type value. The type can be of XML_SCHEMAS_STRING. WARNING: This one is intended to be expanded for other string based types. We need this for anySimpleType as well. The given value is consumed and freed with the struct. + + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Create an XML Schemas validation context based on the given schema. + + + + + defined(LIBXML_SCHEMAS_ENABLED) + parse a schema definition resource and build an internal XML Shema struture which can be used to validate instances. + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Plug a SAX based validation layer in a SAX parsing event flow. The original @saxptr and @dataptr data are replaced by new pointers but the calls to the original will be maintained. + + + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Unplug a SAX based validation layer in a SAX parsing event flow. The original pointers used in the call are restored. + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Set the callback functions used to handle errors for a validation context + + + + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Set the structured error callback + + + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Set the error and warning callback informations + + + + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Sets the options to be used during the validation. + + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Set the structured error callback + + + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Check that a value conforms to the lexical space of the predefined type. if true a value is computed and returned in @val. + + + + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Check that a value conforms to the lexical space of the predefined type. if true a value is computed and returned in @val. This one does apply any normalization to the value. + + + + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Get the validation context options. + + + + + defined(LIBXML_SCHEMAS_ENABLED) + allow access to the parser context of the schema validation context + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Validate a document tree in memory. + + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Check a value against a facet condition + + + + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Check a value against a facet condition. This takes value normalization according to the specified whitespace types into account. Note that @value needs to be the *normalized* value if the facet is of type "pattern". + + + + + + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Do a schemas validation of the given resource, it will use the SAX streamable validation internally. + + + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Checka a value against a "length", "minLength" and "maxLength" facet; sets @length to the computed length of @value. + + + + + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Checka a value against a "length", "minLength" and "maxLength" facet; sets @length to the computed length of @value. + + + + + + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Checks the value of a list simple type against a facet. + + + + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Validate a branch of a tree, starting with the given @elem. + + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Check that a value conforms to the lexical space of the predefined type. if true a value is computed and returned in @val. + + + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Workaround to provide file error reporting information when this is not provided by current APIs + + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Allows to set a locator function to the validation context, which will be used to provide file and line information since those are not provided as part of the SAX validation flow Setting @f to NULL disable the locator. + + + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Validate an input based on a flow of SAX event from the parser and forward the events to the @sax handler with the provided @user_data the user provided @sax handler must be a SAX2 one. + + + + + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Signature of an error callback from an XSD validation + + + + + + + defined(LIBXML_SCHEMAS_ENABLED) + A schemas validation locator, a callback called by the validator. This is used when file or node informations are not available to find out what file and line number are affected + + + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Signature of a warning callback from an XSD validation + + + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Appends a next sibling to a list of computed values. + + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Accessor for the boolean value of a computed value. + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Accessor for the string value of a computed value. + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Accessor for the next sibling of a list of computed values. + + + + + defined(LIBXML_SCHEMAS_ENABLED) + Replaces 0xd, 0x9 and 0xa with a space. + + + + + defined(LIBXML_SCHEMATRON_ENABLED) + Deallocate a Schematron structure. + + + + + defined(LIBXML_SCHEMATRON_ENABLED) + Free the resources associated to the schema parser context + + + + + defined(LIBXML_SCHEMATRON_ENABLED) + Free the resources associated to the schema validation context + + + + + defined(LIBXML_SCHEMATRON_ENABLED) + Create an XML Schematrons parse context for that document. NB. The document may be modified during the parsing process. + + + + + defined(LIBXML_SCHEMATRON_ENABLED) + Create an XML Schematrons parse context for that memory buffer expected to contain an XML Schematrons file. + + + + + + defined(LIBXML_SCHEMATRON_ENABLED) + Create an XML Schematrons parse context for that file/resource expected to contain an XML Schematrons file. + + + + + defined(LIBXML_SCHEMATRON_ENABLED) + Create an XML Schematrons validation context based on the given schema. + + + + + + defined(LIBXML_SCHEMATRON_ENABLED) + parse a schema definition resource and build an internal XML Shema struture which can be used to validate instances. + + + + + defined(LIBXML_SCHEMATRON_ENABLED) + Set the structured error callback + + + + + + + defined(LIBXML_SCHEMATRON_ENABLED) + Validate a tree instance against the schematron + + + + + + defined(LIBXML_SCHEMATRON_ENABLED) + Signature of an error callback from a Schematron validation + + + + + + + defined(LIBXML_SCHEMATRON_ENABLED) + Signature of a warning callback from a Schematron validation + + + + + + + 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. + + + + + + + Search a Ns aliasing a given URI. Recurse on the parents until it finds the defined namespace or return NULL otherwise. + + + + + + + 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 + + + + + set the default compression mode used, ZLIB based Correct values: 0 (uncompressed) to 9 (max compression) + + + + + set the compression ratio for a document, ZLIB based Correct values: 0 (uncompressed) to 9 (max compression) + + + + + + defined(LIBXML_LEGACY_ENABLED) + Set the function to call call back when a xml reference has been made + + + + + Changes the defaultexternal entity resolver function for the application + + + + + defined(LIBXML_LEGACY_ENABLED) + Change the current value of one feature of this parser instance + + + + + + + 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. For multi-threaded applications, this must be set separately for each thread. + + + + + + update all nodes in the list to point to the right document + + + + + + Associate a namespace to a node, a posteriori. + + + + + + defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_HTML_ENABLED) + Set (or reset) an attribute carried by a node. The ns structure must be in scope, this is not checked + + + + + + + + defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_HTML_ENABLED) + Set (or reset) an attribute carried by a node. If @name has a prefix, then the corresponding namespace-binding will be used, if in scope; it is an error it there's no such ns-binding for the prefix in scope. + + + + + + + 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 For multi-threaded applications, this must be set separately for each thread. + + + + + + update all nodes under the tree to point to the right document + + + + + + defined(LIBXML_SAX1_ENABLED) + 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 + + + + + + + defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED) + Implements the XML shell This allow to load, validate, view, modify and save a document using a environment similar to a UNIX commandline. + + + + + + + + defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED) + Implements the XML shell function "base" dumps the current XML base of the node + + + + + + + + defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) + Implements the XML shell function "cat" dumps the serialization node content (XML or HTML). + + + + + + + + defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED) + This is a generic signature for the XML shell functions. + + + + + + + + defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED) + Implements the XML shell function "dir" dumps informations about the node (namespace, attributes, content). + + + + + + + + defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED) + 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. + + + + + + + + defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED) + Implements the XML shell function "ls" Does an Unix like listing of the given node (like a directory) + + + + + + + + defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED) + Implements the XML shell function "load" loads a new document specified by the filename + + + + + + + + defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) + Print node to the output FILE + + + + + defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED) + Print the xpath error to libxml default error channel + + + + + + defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED) + Prints result to the output FILE + + + + + defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED) + 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. + + + + + + + + defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED) + This is a generic signature for the XML shell input function. + + + + + defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) + Implements the XML shell function "save" Write the current document to the filename, or it's original name + + + + + + + + defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED) && defined(LIBXML_VALID_ENABLED) + Implements the XML shell function "validate" Validate the document, if a DTD path is provided, then the validation is done against the given DTD. + + + + + + + + defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) + Implements the XML shell function "write" Write the current node to the filename, it saves the serialization of the subtree under the @node specified + + + + + + + + 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. + + + + + This will dump the content of the element content definition Intended just for the debug routine + + + + + + + + parse an UTF8 encoded XML qualified name string [NS 5] QName ::= (Prefix ':')? LocalPart [NS 6] Prefix ::= NCName [NS 7] LocalPart ::= NCName + + + + + + + parse an XML qualified name string [NS 5] QName ::= (Prefix ':')? LocalPart [NS 6] Prefix ::= NCName [NS 7] LocalPart ::= NCName + + + + + + parse an XML qualified name string,i + + + + + + defined(LIBXML_OUTPUT_ENABLED) + Deprecated, unsafe, use xmlSnprintfElementContent + + + + + + + Blocks further parser processing + + + + + Check if both strings are equal of have same content. Should be a bit more readable and faster than xmlStrcmp() + + + + + + Formats @msg and places result into @buf. + + + + + + + + Check if a QName is Equal to a given string + + + + + + + Formats @msg and places result into @buf. + + + + + + + + a strcasecmp for xmlChar's + + + + + + a case-ignoring strstr for xmlChar's + + + + + + 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'. + + + + + + a strchr for xmlChar's + + + + + + a strcmp for xmlChar's + + + + + + 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'. + + + + + Signature for an strdup() implementation. + + + + + defined(LIBXML_PATTERN_ENABLED) + push one level from the stream. + + + + + defined(LIBXML_PATTERN_ENABLED) + Push new data onto the stream. NOTE: if the call xmlPatterncompile() indicated a dictionary, then strings for name and ns will be expected to come from the dictionary. Both @name and @ns being NULL means the / i.e. the root of the document. This can also act as a reset. Otherwise the function will act as if it has been given an element-node. + + + + + + + defined(LIBXML_PATTERN_ENABLED) + Push new attribute data onto the stream. NOTE: if the call xmlPatterncompile() indicated a dictionary, then strings for name and ns will be expected to come from the dictionary. Both @name and @ns being NULL means the / i.e. the root of the document. This can also act as a reset. Otherwise the function will act as if it has been given an attribute-node. + + + + + + + defined(LIBXML_PATTERN_ENABLED) + Push new data onto the stream. NOTE: if the call xmlPatterncompile() indicated a dictionary, then strings for name and ns will be expected to come from the dictionary. Both @name and @ns being NULL means the / i.e. the root of the document. This can also act as a reset. Different from xmlStreamPush() this function can be fed with nodes of type: element-, attribute-, text-, cdata-section-, comment- and processing-instruction-node. + + + + + + + + defined(LIBXML_PATTERN_ENABLED) + Query if the streaming pattern additionally needs to be fed with text-, cdata-section-, comment- and processing-instruction-nodes. If the result is 0 then only element-nodes and attribute-nodes need to be pushed. + + + + + The current char value, if using UTF-8 this may actually span multiple bytes in the input buffer. + + + + + + + Takes a entity string content and process to do the adequate substitutions. [67] Reference ::= EntityRef | CharRef [69] PEReference ::= '%' Name ';' + + + + + + + + + + Parse the value string and build the node list associated. Should produce a flat tree with only TEXTs and ENTITY_REFs. + + + + + + Takes a entity string content and process to do the adequate substitutions. [67] Reference ::= EntityRef | CharRef [69] PEReference ::= '%' Name ';' + + + + + + + + + + + Parse the value string and build the node list associated. Should produce a flat tree with only TEXTs and ENTITY_REFs. + + + + + + + length of a xmlChar's string + + + + + a strncasecmp for xmlChar's + + + + + + + a strncat for array of xmlChar's, it will extend @cur with the len first bytes of @add. Note that if @len < 0 then this is an API error and NULL will be returned. + + + + + + + same as xmlStrncat, but creates a new string. The original two strings are not freed. If @len is < 0 then the length will be calculated automatically. + + + + + + + a strncmp for xmlChar's + + + + + + + a strndup for array of xmlChar's + + + + + + a strstr for xmlChar's + + + + + + Extract a substring of a given string + + + + + + + Signature of the function to use when there is an error and the module handles the new error reporting mechanism. + + + + + + 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. + + + + + change the input functions when discovering the character encoding of a given entity. + + + + + + change the input functions when discovering the character encoding of a given entity. + + + + + + + change the input functions when discovering the character encoding of a given entity. + + + + + + Concat the given string at the end of the existing node content + + + + + + + Merge two text nodes into one + + + + + + defined(LIBXML_READER_ENABLED) + Provides the number of attributes of the current node + + + + + defined(LIBXML_READER_ENABLED) + The base URI of the node. + + + + + defined(LIBXML_READER_ENABLED) + This function provides the current index of the parser used by the reader, relative to the start of the current entity. This function actually just wraps a call to xmlBytesConsumed() for the parser context associated with the reader. See xmlBytesConsumed() for more information. + + + + + defined(LIBXML_READER_ENABLED) + This method releases any resources allocated by the current instance changes the state to Closed and close any underlying input. + + + + + defined(LIBXML_READER_ENABLED) + The base URI of the node. + + + + + defined(LIBXML_READER_ENABLED) + Determine the encoding of the document being read. + + + + + defined(LIBXML_READER_ENABLED) + The local name of the node. + + + + + defined(LIBXML_READER_ENABLED) + The qualified name of the node, equal to Prefix :LocalName. + + + + + defined(LIBXML_READER_ENABLED) + The URI defining the namespace associated with the node. + + + + + defined(LIBXML_READER_ENABLED) + A shorthand reference to the namespace associated with the node. + + + + + defined(LIBXML_READER_ENABLED) + Get an interned string from the reader, allows for example to speedup string name comparisons + + + + + + defined(LIBXML_READER_ENABLED) + Provides the text value of the node if present + + + + + defined(LIBXML_READER_ENABLED) + The xml:lang scope within which the node resides. + + + + + defined(LIBXML_READER_ENABLED) + Determine the XML version of the document being read. + + + + + defined(LIBXML_READER_ENABLED) + 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. + + + + + defined(LIBXML_READER_ENABLED) + 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. + + + + + defined(LIBXML_READER_ENABLED) + The depth of the node in the tree. + + + + + defined(LIBXML_READER_ENABLED) + Signature of an error callback from a reader parser + + + + + + + + defined(LIBXML_READER_ENABLED) + Reads the contents of the current node and the full subtree. It then makes the subtree available until the next xmlTextReaderRead() call + + + + + defined(LIBXML_READER_ENABLED) + Provides the value of the attribute with the specified qualified name. + + + + + + defined(LIBXML_READER_ENABLED) + Provides the value of the attribute with the specified index relative to the containing element. + + + + + + defined(LIBXML_READER_ENABLED) + Provides the value of the specified attribute + + + + + + + defined(LIBXML_READER_ENABLED) + Retrieve the error callback function and user argument. + + + + + + + defined(LIBXML_READER_ENABLED) + Provide the column number of the current parsing point. + + + + + defined(LIBXML_READER_ENABLED) + Provide the line number of the current parsing point. + + + + + defined(LIBXML_READER_ENABLED) + Read the parser internal property. + + + + + + defined(LIBXML_READER_ENABLED) + Method to get the remainder of the buffered XML. this method stops the parser, set its state to End Of File and return the input stream with what is left that the parser did not use. The implementation is not good, the parser certainly procgressed past what's left in reader->input, and there is an allocation problem. Best would be to rewrite it differently. + + + + + defined(LIBXML_READER_ENABLED) + Whether the node has attributes. + + + + + defined(LIBXML_READER_ENABLED) + Whether the node can have a text value. + + + + + defined(LIBXML_READER_ENABLED) + Whether an Attribute node was generated from the default value defined in the DTD or schema. + + + + + defined(LIBXML_READER_ENABLED) + Check if the current node is empty + + + + + defined(LIBXML_READER_ENABLED) + Determine whether the current node is a namespace declaration rather than a regular attribute. + + + + + defined(LIBXML_READER_ENABLED) + Retrieve the validity status from the parser context + + + + + defined(LIBXML_READER_ENABLED) + The local name of the node. + + + + + defined(LIBXML_READER_ENABLED) + Obtain the base URI for the given locator. + + + + + defined(LIBXML_READER_ENABLED) + Obtain the line number for the given locator. + + + + + defined(LIBXML_READER_ENABLED) + Resolves a namespace prefix in the scope of the current element. + + + + + + defined(LIBXML_READER_ENABLED) + Moves the position of the current instance to the attribute with the specified qualified name. + + + + + + defined(LIBXML_READER_ENABLED) + Moves the position of the current instance to the attribute with the specified index relative to the containing element. + + + + + + defined(LIBXML_READER_ENABLED) + Moves the position of the current instance to the attribute with the specified local name and namespace URI. + + + + + + + defined(LIBXML_READER_ENABLED) + Moves the position of the current instance to the node that contains the current Attribute node. + + + + + defined(LIBXML_READER_ENABLED) + Moves the position of the current instance to the first attribute associated with the current node. + + + + + defined(LIBXML_READER_ENABLED) + Moves the position of the current instance to the next attribute associated with the current node. + + + + + defined(LIBXML_READER_ENABLED) + The qualified name of the node, equal to Prefix :LocalName. + + + + + defined(LIBXML_READER_ENABLED) + The URI defining the namespace associated with the node. + + + + + defined(LIBXML_READER_ENABLED) + Skip to the node following the current one in document order while avoiding the subtree if any. + + + + + defined(LIBXML_READER_ENABLED) + 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 + + + + + defined(LIBXML_READER_ENABLED) + Get the node type of the current node Reference: http://www.gnu.org/software/dotgnu/pnetlib-doc/System/Xml/XmlNodeType.html + + + + + defined(LIBXML_READER_ENABLED) + 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. + + + + + defined(LIBXML_READER_ENABLED) + A shorthand reference to the namespace associated with the node. + + + + + defined(LIBXML_READER_ENABLED) + This tells the XML Reader to preserve the current node. The caller must also use xmlTextReaderCurrentDoc() to keep an handle on the resulting document once parsing has finished + + + + + defined(LIBXML_READER_ENABLED) && defined(LIBXML_PATTERN_ENABLED) + 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 + + + + + + + defined(LIBXML_READER_ENABLED) + The quotation mark character used to enclose the value of an attribute. + + + + + defined(LIBXML_READER_ENABLED) + Moves the position of the current instance to the next node in the stream, exposing its properties. + + + + + defined(LIBXML_READER_ENABLED) + Parses an attribute value into one or more Text and EntityReference nodes. + + + + + defined(LIBXML_READER_ENABLED) && defined(LIBXML_WRITER_ENABLED) + Reads the contents of the current node, including child nodes and markup. + + + + + defined(LIBXML_READER_ENABLED) && defined(LIBXML_WRITER_ENABLED) + Reads the contents of the current node, including child nodes and markup. + + + + + defined(LIBXML_READER_ENABLED) + Gets the read state of the reader. + + + + + defined(LIBXML_READER_ENABLED) + Reads the contents of an element or a text node as a string. + + + + + defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED) + 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. + + + + + + defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED) + Use RelaxNG schema to validate the document as it is processed. Activation is only possible before the first Read(). If @rng is NULL, then RelaxNG schema validation is deactivated. + + + + + + defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED) + Use RelaxNG schema context to validate the document as it is processed. Activation is only possible before the first Read(). If @ctxt is NULL, then RelaxNG schema validation is deactivated. + + + + + + + defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED) + Use W3C XSD schema to validate the document as it is processed. Activation is only possible before the first Read(). If @xsd is NULL, then XML Schema validation is deactivated. + + + + + + defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED) + Use W3C XSD schema context to validate the document as it is processed. Activation is only possible before the first Read(). If @ctxt is NULL, then XML Schema validation is deactivated. + + + + + + + defined(LIBXML_READER_ENABLED) + Register a callback function that will be called on error and warnings. If @f is NULL, the default error and warning handlers are restored. + + + + + + + defined(LIBXML_READER_ENABLED) + 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. + + + + + + + defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED) + Use XSD Schema to validate the document as it is processed. Activation is only possible before the first Read(). if @schema is NULL, then Schema validation is desactivated. @ The @schema should not be freed until the reader is deallocated or its use has been deactivated. + + + + + + defined(LIBXML_READER_ENABLED) + Register a callback function that will be called on error and warnings. If @f is NULL, the default error and warning handlers are restored. + + + + + + + defined(LIBXML_READER_ENABLED) + Setup an XML reader with new options + + + + + + + + + defined(LIBXML_READER_ENABLED) + Determine the standalone status of the document being read. + + + + + defined(LIBXML_READER_ENABLED) + Provides the text value of the node if present + + + + + defined(LIBXML_READER_ENABLED) + The xml:lang scope within which the node resides. + + + + + defined(LIBXML_WRITER_ENABLED) + End the current xml element. + + + + + defined(LIBXML_WRITER_ENABLED) + End an xml CDATA section. + + + + + defined(LIBXML_WRITER_ENABLED) + End the current xml coment. + + + + + defined(LIBXML_WRITER_ENABLED) + End an xml DTD. + + + + + defined(LIBXML_WRITER_ENABLED) + End an xml DTD attribute list. + + + + + defined(LIBXML_WRITER_ENABLED) + End an xml DTD element. + + + + + defined(LIBXML_WRITER_ENABLED) + End an xml DTD entity. + + + + + defined(LIBXML_WRITER_ENABLED) + End an xml document. All open elements are closed, and the content is flushed to the output. + + + + + defined(LIBXML_WRITER_ENABLED) + End the current xml element. + + + + + defined(LIBXML_WRITER_ENABLED) + End the current xml PI. + + + + + defined(LIBXML_WRITER_ENABLED) + Flush the output buffer. + + + + + defined(LIBXML_WRITER_ENABLED) + End the current xml element. Writes an end tag even if the element is empty + + + + + defined(LIBXML_WRITER_ENABLED) + Set indentation output. indent = 0 do not indentation. indent > 0 do indentation. + + + + + + defined(LIBXML_WRITER_ENABLED) + Set string indentation. + + + + + + defined(LIBXML_WRITER_ENABLED) + Set the character used for quoting attributes. + + + + + + defined(LIBXML_WRITER_ENABLED) + Start an xml attribute. + + + + + + defined(LIBXML_WRITER_ENABLED) + Start an xml attribute with namespace support. + + + + + + + + defined(LIBXML_WRITER_ENABLED) + Start an xml CDATA section. + + + + + defined(LIBXML_WRITER_ENABLED) + Start an xml comment. + + + + + defined(LIBXML_WRITER_ENABLED) + Start an xml DTD. + + + + + + + + defined(LIBXML_WRITER_ENABLED) + Start an xml DTD ATTLIST. + + + + + + defined(LIBXML_WRITER_ENABLED) + Start an xml DTD element. + + + + + + defined(LIBXML_WRITER_ENABLED) + Start an xml DTD ATTLIST. + + + + + + + defined(LIBXML_WRITER_ENABLED) + Start a new xml document + + + + + + + + defined(LIBXML_WRITER_ENABLED) + Start an xml element. + + + + + + defined(LIBXML_WRITER_ENABLED) + Start an xml element with namespace support. + + + + + + + + defined(LIBXML_WRITER_ENABLED) + Start an xml PI. + + + + + + defined(LIBXML_WRITER_ENABLED) + Write an xml attribute. + + + + + + + defined(LIBXML_WRITER_ENABLED) + Write an xml attribute. + + + + + + + + + defined(LIBXML_WRITER_ENABLED) + Write an base64 encoded xml text. + + + + + + + + defined(LIBXML_WRITER_ENABLED) + Write a BinHex encoded xml text. + + + + + + + + defined(LIBXML_WRITER_ENABLED) + Write an xml CDATA. + + + + + + defined(LIBXML_WRITER_ENABLED) + Write an xml comment. + + + + + + defined(LIBXML_WRITER_ENABLED) + Write a DTD. + + + + + + + + + defined(LIBXML_WRITER_ENABLED) + Write a DTD ATTLIST. + + + + + + + defined(LIBXML_WRITER_ENABLED) + Write a DTD element. + + + + + + + defined(LIBXML_WRITER_ENABLED) + Write a DTD entity. + + + + + + + + + + + defined(LIBXML_WRITER_ENABLED) + Write a DTD external entity. The entity must have been started with xmlTextWriterStartDTDEntity + + + + + + + + + + defined(LIBXML_WRITER_ENABLED) + Write the contents of a DTD external entity. + + + + + + + + defined(LIBXML_WRITER_ENABLED) + Write a DTD internal entity. + + + + + + + + defined(LIBXML_WRITER_ENABLED) + Write a DTD entity. + + + + + + + + defined(LIBXML_WRITER_ENABLED) + Write an xml element. + + + + + + + defined(LIBXML_WRITER_ENABLED) + Write an xml element with namespace support. + + + + + + + + + defined(LIBXML_WRITER_ENABLED) + Write a formatted xml attribute. + + + + + + + + defined(LIBXML_WRITER_ENABLED) + Write a formatted xml attribute.with namespace support + + + + + + + + + + defined(LIBXML_WRITER_ENABLED) + Write a formatted xml CDATA. + + + + + + + defined(LIBXML_WRITER_ENABLED) + Write an xml comment. + + + + + + + defined(LIBXML_WRITER_ENABLED) + Write a DTD with a formatted markup declarations part. + + + + + + + + + + defined(LIBXML_WRITER_ENABLED) + Write a formatted DTD ATTLIST. + + + + + + + + defined(LIBXML_WRITER_ENABLED) + Write a formatted DTD element. + + + + + + + + defined(LIBXML_WRITER_ENABLED) + Write a formatted DTD internal entity. + + + + + + + + + defined(LIBXML_WRITER_ENABLED) + Write a formatted xml element. + + + + + + + + defined(LIBXML_WRITER_ENABLED) + Write a formatted xml element with namespace support. + + + + + + + + + + defined(LIBXML_WRITER_ENABLED) + Write a formatted PI. + + + + + + + + defined(LIBXML_WRITER_ENABLED) + Write a formatted raw xml text. + + + + + + + defined(LIBXML_WRITER_ENABLED) + Write a formatted xml text. + + + + + + + defined(LIBXML_WRITER_ENABLED) + Write an xml PI. + + + + + + + defined(LIBXML_WRITER_ENABLED) + Write a raw xml text. + + + + + + defined(LIBXML_WRITER_ENABLED) + Write an xml text. TODO: what about entities and special chars?? + + + + + + + defined(LIBXML_WRITER_ENABLED) + Write an xml text. + + + + + + defined(LIBXML_WRITER_ENABLED) + Write a formatted xml attribute. + + + + + + + + defined(LIBXML_WRITER_ENABLED) + Write a formatted xml attribute.with namespace support + + + + + + + + + + defined(LIBXML_WRITER_ENABLED) + Write a formatted xml CDATA. + + + + + + + defined(LIBXML_WRITER_ENABLED) + Write an xml comment. + + + + + + + defined(LIBXML_WRITER_ENABLED) + Write a DTD with a formatted markup declarations part. + + + + + + + + + + defined(LIBXML_WRITER_ENABLED) + Write a formatted DTD ATTLIST. + + + + + + + + defined(LIBXML_WRITER_ENABLED) + Write a formatted DTD element. + + + + + + + + defined(LIBXML_WRITER_ENABLED) + Write a formatted DTD internal entity. + + + + + + + + + defined(LIBXML_WRITER_ENABLED) + Write a formatted xml element. + + + + + + + + defined(LIBXML_WRITER_ENABLED) + Write a formatted xml element with namespace support. + + + + + + + + + + defined(LIBXML_WRITER_ENABLED) + Write a formatted xml PI. + + + + + + + + defined(LIBXML_WRITER_ENABLED) + Write a formatted raw xml text. + + + + + + + defined(LIBXML_WRITER_ENABLED) + Write a formatted xml text. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of AegeanNumbers UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of AlphabeticPresentationForms UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Arabic UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of ArabicPresentationForms-A UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of ArabicPresentationForms-B UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Armenian UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Arrows UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of BasicLatin UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Bengali UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of the UCS Block + + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of BlockElements UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Bopomofo UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of BopomofoExtended UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of BoxDrawing UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of BraillePatterns UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Buhid UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of ByzantineMusicalSymbols UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of CJKCompatibility UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of CJKCompatibilityForms UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of CJKCompatibilityIdeographs UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of CJKCompatibilityIdeographsSupplement UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of CJKRadicalsSupplement UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of CJKSymbolsandPunctuation UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of CJKUnifiedIdeographs UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of CJKUnifiedIdeographsExtensionA UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of CJKUnifiedIdeographsExtensionB UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of the UCS Category + + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of C UCS Category + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Cc UCS Category + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Cf UCS Category + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Co UCS Category + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Cs UCS Category + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of L UCS Category + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Ll UCS Category + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Lm UCS Category + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Lo UCS Category + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Lt UCS Category + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Lu UCS Category + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of M UCS Category + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Mc UCS Category + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Me UCS Category + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Mn UCS Category + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of N UCS Category + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Nd UCS Category + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Nl UCS Category + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of No UCS Category + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of P UCS Category + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Pc UCS Category + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Pd UCS Category + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Pe UCS Category + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Pf UCS Category + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Pi UCS Category + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Po UCS Category + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Ps UCS Category + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of S UCS Category + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Sc UCS Category + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Sk UCS Category + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Sm UCS Category + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of So UCS Category + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Z UCS Category + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Zl UCS Category + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Zp UCS Category + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Zs UCS Category + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Cherokee UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of CombiningDiacriticalMarks UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of CombiningDiacriticalMarksforSymbols UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of CombiningHalfMarks UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of CombiningMarksforSymbols UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of ControlPictures UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of CurrencySymbols UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of CypriotSyllabary UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Cyrillic UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of CyrillicSupplement UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Deseret UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Devanagari UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Dingbats UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of EnclosedAlphanumerics UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of EnclosedCJKLettersandMonths UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Ethiopic UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of GeneralPunctuation UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of GeometricShapes UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Georgian UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Gothic UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Greek UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of GreekExtended UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of GreekandCoptic UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Gujarati UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Gurmukhi UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of HalfwidthandFullwidthForms UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of HangulCompatibilityJamo UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of HangulJamo UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of HangulSyllables UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Hanunoo UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Hebrew UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of HighPrivateUseSurrogates UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of HighSurrogates UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Hiragana UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of IPAExtensions UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of IdeographicDescriptionCharacters UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Kanbun UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of KangxiRadicals UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Kannada UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Katakana UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of KatakanaPhoneticExtensions UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Khmer UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of KhmerSymbols UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Lao UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Latin-1Supplement UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of LatinExtended-A UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of LatinExtendedAdditional UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of LatinExtended-B UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of LetterlikeSymbols UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Limbu UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of LinearBIdeograms UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of LinearBSyllabary UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of LowSurrogates UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Malayalam UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of MathematicalAlphanumericSymbols UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of MathematicalOperators UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of MiscellaneousMathematicalSymbols-A UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of MiscellaneousMathematicalSymbols-B UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of MiscellaneousSymbols UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of MiscellaneousSymbolsandArrows UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of MiscellaneousTechnical UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Mongolian UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of MusicalSymbols UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Myanmar UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of NumberForms UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Ogham UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of OldItalic UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of OpticalCharacterRecognition UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Oriya UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Osmanya UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of PhoneticExtensions UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of PrivateUse UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of PrivateUseArea UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Runic UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Shavian UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Sinhala UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of SmallFormVariants UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of SpacingModifierLetters UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Specials UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of SuperscriptsandSubscripts UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of SupplementalArrows-A UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of SupplementalArrows-B UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of SupplementalMathematicalOperators UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of SupplementaryPrivateUseArea-A UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of SupplementaryPrivateUseArea-B UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Syriac UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Tagalog UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Tagbanwa UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Tags UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of TaiLe UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of TaiXuanJingSymbols UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Tamil UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Telugu UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Thaana UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Thai UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Tibetan UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of Ugaritic UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of UnifiedCanadianAboriginalSyllabics UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of VariationSelectors UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of VariationSelectorsSupplement UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of YiRadicals UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of YiSyllables UCS Block + + + + + defined(LIBXML_UNICODE_ENABLED) + Check whether the character is part of YijingHexagramSymbols UCS Block + + + + + 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. + + + + + This routine escapes a string to hex, ignoring reserved characters (a-z) and the characters in the exception list. + + + + + + Unescaping routine, but does not check that the string is an URI. The output is a direct unsigned char translation of %XX values (no encoding) Note that the length of the result can only be smaller or same size as the input string. + + + + + + + compares the two UCS4 values + + + + + + calculates the internal size of a UTF8 character + + + + + compute the length of an UTF8 string, it doesn't do a full UTF8 checking of the content of the string. + + + + + a function to provide the relative location of a UTF8 char + + + + + + a strndup for array of UTF8's + + + + + + a function to provide the equivalent of fetching a character from a string array + + + + + + storage size of an UTF8 string the behaviour is not garanteed if the input string is not UTF-8 + + + + + + Create a substring from a given UTF-8 string Note: positions are given in units of UTF-8 chars + + + + + + + Unlink a node from it's current context, the node is not freed If one need to free the node, use xmlFreeNode() routine after the unlink to discard it. Note that namespace nodes can't be unlinked as they do not have pointer to their parent. + + + + + xmlUnlockLibrary() is used to release a re-entrant lock on the libxml2 library. + + + + defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) + Remove an attribute carried by a node. + + + + + + + defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) + Remove an attribute carried by a node. This handles only attributes in no namespace. + + + + + + defined(LIBXML_VALID_ENABLED) && defined(LIBXML_REGEXP_ENABLED) + (Re)Build the automata associated to the content model of this element + + + + + + defined(LIBXML_VALID_ENABLED) + 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 + + + + + + + + + defined(LIBXML_VALID_ENABLED) + Build/extend a list of potential children allowed by the content tree + + + + + + + + defined(LIBXML_VALID_ENABLED) + 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. + + + + + + + + defined(LIBXML_VALID_ENABLED) + 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. + + + + + + + + defined(LIBXML_VALID_ENABLED) + 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 + + + + + + + defined(LIBXML_VALID_ENABLED) + 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. + + + + + + defined(LIBXML_VALID_ENABLED) + 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. + + + + + + defined(LIBXML_VALID_ENABLED) + 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 + + + + + + defined(LIBXML_VALID_ENABLED) + Try to validate the document against the dtd instance Basically it does check all the definitions in the DtD. Note the the internal subset (if present) is de-coupled (i.e. not used), which could give problems if ID or IDREF is present. + + + + + + + defined(LIBXML_VALID_ENABLED) + 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. + + + + + + defined(LIBXML_VALID_ENABLED) + Try to validate the subtree under an element + + + + + + + defined(LIBXML_VALID_ENABLED) + 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 ] + + + + + + + defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_DEBUG_ENABLED) || defined (LIBXML_HTML_ENABLED) || defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED) || defined(LIBXML_LEGACY_ENABLED) + Check that a value conforms to the lexical space of NCName + + + + + + defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) + Check that a value conforms to the lexical space of NMToken + + + + + + defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) + Check that a value conforms to the lexical space of Name + + + + + + defined(LIBXML_VALID_ENABLED) + Validate that the given value match Name production + + + + + defined(LIBXML_VALID_ENABLED) + Validate that the given value match Names production + + + + + defined(LIBXML_VALID_ENABLED) + Validate that the given value match Nmtoken production [ VC: Name Token ] + + + + + defined(LIBXML_VALID_ENABLED) + Validate that the given value match Nmtokens production [ VC: Name Token ] + + + + + defined(LIBXML_VALID_ENABLED) + 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 ... + + + + + + + defined(LIBXML_VALID_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) + Validate that the given name match a notation declaration. - [ VC: Notation Declared ] + + + + + + + defined(LIBXML_VALID_ENABLED) + 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 + + + + + + + + + defined(LIBXML_VALID_ENABLED) + 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 + + + + + + + defined(LIBXML_VALID_ENABLED) + 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 + + + + + + + + + + defined(LIBXML_VALID_ENABLED) && defined(LIBXML_REGEXP_ENABLED) + Pop the element end from the validation stack. + + + + + + + + defined(LIBXML_VALID_ENABLED) && defined(LIBXML_REGEXP_ENABLED) + check the CData parsed for validation in the current stack + + + + + + + defined(LIBXML_VALID_ENABLED) && defined(LIBXML_REGEXP_ENABLED) + Push a new element start on the validation stack. + + + + + + + + defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) + Check that a value conforms to the lexical space of QName + + + + + + defined(LIBXML_VALID_ENABLED) + 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 + + + + + + Callback called when a validity error is found. This is a message oriented function similar to an *printf function. + + + + + + + Callback called when a validity warning is found. This is a message oriented function similar to an *printf function. + + + + + + + defined(LIBXML_XINCLUDE_ENABLED) + Free an XInclude context + + + + + defined(LIBXML_XINCLUDE_ENABLED) + Creates a new XInclude context + + + + + defined(LIBXML_XINCLUDE_ENABLED) + Implement the XInclude substitution on the XML document @doc + + + + + defined(LIBXML_XINCLUDE_ENABLED) + Implement the XInclude substitution on the XML document @doc + + + + + + defined(LIBXML_XINCLUDE_ENABLED) + Implement the XInclude substitution on the XML document @doc + + + + + + + defined(LIBXML_XINCLUDE_ENABLED) + Implement the XInclude substitution for the given subtree reusing the informations and data coming from the given context. + + + + + + defined(LIBXML_XINCLUDE_ENABLED) + Implement the XInclude substitution for the given subtree + + + + + defined(LIBXML_XINCLUDE_ENABLED) + Implement the XInclude substitution for the given subtree + + + + + + defined(LIBXML_XINCLUDE_ENABLED) + Implement the XInclude substitution on the XML node @tree + + + + + + + defined(LIBXML_XINCLUDE_ENABLED) + Set the flags used for further processing of XML resources. + + + + + + defined(LIBXML_XPATH_ENABLED) + Implement the add operation on XPath objects: The numeric operators convert their operands to numbers as if by calling the number function. + + + + + defined(LIBXML_XPATH_ENABLED) + 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. + + + + + + defined(LIBXML_XPATH_ENABLED) + 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 + + + + + + defined(LIBXML_XPATH_ENABLED) + Converts a boolean to its number value + + + + + defined(LIBXML_XPATH_ENABLED) + Converts a boolean to its string value. + + + + + defined(LIBXML_XPATH_ENABLED) + Converts a node-set to its boolean value + + + + + defined(LIBXML_XPATH_ENABLED) + Converts a node-set to its number value + + + + + defined(LIBXML_XPATH_ENABLED) + Converts a node-set to its string value. + + + + + defined(LIBXML_XPATH_ENABLED) + Converts a node to its number value + + + + + defined(LIBXML_XPATH_ENABLED) + Converts a node to its string value. + + + + + defined(LIBXML_XPATH_ENABLED) + Converts a number to its boolean value + + + + + defined(LIBXML_XPATH_ENABLED) + Converts a number to its string value. + + + + + defined(LIBXML_XPATH_ENABLED) + Converts a string to its boolean value + + + + + defined(LIBXML_XPATH_ENABLED) + Converts a string to its number value + + + + + defined(LIBXML_XPATH_ENABLED) + Converts an XPath object to its boolean value + + + + + defined(LIBXML_XPATH_ENABLED) + Converts an XPath object to its number value + + + + + defined(LIBXML_XPATH_ENABLED) + Converts an existing object to its string() equivalent + + + + + defined(LIBXML_XPATH_ENABLED) + 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. + + + + + + defined(LIBXML_XPATH_ENABLED) + Compare two nodes w.r.t document order + + + + + + defined(LIBXML_XPATH_ENABLED) + 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. + + + + + + + defined(LIBXML_XPATH_ENABLED) + Compile an XPath expression + + + + + defined(LIBXML_XPATH_ENABLED) + Evaluate the Precompiled XPath expression in the given context. + + + + + + defined(LIBXML_XPATH_ENABLED) + Applies the XPath boolean() function on the result of the given compiled expression. + + + + + + defined(LIBXML_XPATH_ENABLED) + Implement the concat() XPath function string concat(string, string, string*) The concat function returns the concatenation of its arguments. + + + + + + defined(LIBXML_XPATH_ENABLED) + 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. + + + + + + defined(LIBXML_XPATH_ENABLED) + Creates/frees an object cache on the XPath context. If activates XPath objects (xmlXPathObject) will be cached internally to be reused. @options: 0: This will set the XPath object caching: @value: This will set the maximum number of XPath objects to be cached per slot There are 5 slots for: node-set, string, number, boolean, and misc objects. Use <0 for the default number (100). Other values for @options have currently no effect. + + + + + + + + defined(LIBXML_XPATH_ENABLED) + Converts an existing object to its boolean() equivalent + + + + + defined(LIBXML_XPATH_ENABLED) + A conversion function is associated to a type and used to cast the new type to primitive values. + + + + + + defined(LIBXML_XPATH_ENABLED) + Converts an existing object to its number() equivalent + + + + + defined(LIBXML_XPATH_ENABLED) + Converts an existing object to its string() equivalent + + + + + defined(LIBXML_XPATH_ENABLED) + Implement the count() XPath function number count(node-set) + + + + + + defined(LIBXML_XPATH_ENABLED) + Compile an XPath expression + + + + + + defined(LIBXML_XPATH_ENABLED) && defined(LIBXML_DEBUG_ENABLED) + Dumps the tree of the compiled XPath expression. + + + + + + + defined(LIBXML_XPATH_ENABLED) && defined(LIBXML_DEBUG_ENABLED) + Dump the content of the object for debugging purposes + + + + + + + defined(LIBXML_XPATH_ENABLED) + Implements the EXSLT - Sets difference() function: node-set set:difference (node-set, node-set) + + + + + + defined(LIBXML_XPATH_ENABLED) + 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 + + + + + defined(LIBXML_XPATH_ENABLED) + Implements the EXSLT - Sets distinct() function: node-set set:distinct (node-set) + + + + + defined(LIBXML_XPATH_ENABLED) + Implement the div operation on XPath objects @arg1 / @arg2: The numeric operators convert their operands to numbers as if by calling the number function. + + + + + defined(LIBXML_XPATH_ENABLED) + Implement the equal operation on XPath objects content: @arg1 == @arg2 + + + + + defined(LIBXML_XPATH_ENABLED) + Handle an XPath error + + + + + + defined(LIBXML_XPATH_ENABLED) + Evaluate the XPath Location Path in the given context. + + + + + + defined(LIBXML_XPATH_ENABLED) + Parse and evaluate an XPath expression in the given context, then push the result on the context stack + + + + + defined(LIBXML_XPATH_ENABLED) + Evaluate the XPath expression in the given context. + + + + + + defined(LIBXML_XPATH_ENABLED) + An XPath evaluation function, the parameters are on the XPath context stack. + + + + + + defined(LIBXML_XPATH_ENABLED) + 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. + + + + + + defined(LIBXML_XPATH_ENABLED) + 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. + + + + + + defined(LIBXML_XPATH_ENABLED) + Implement the false() XPath function boolean false() + + + + + + defined(LIBXML_XPATH_ENABLED) + 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. + + + + + + defined(LIBXML_XPATH_ENABLED) + Free up the memory allocated by @comp + + + + + defined(LIBXML_XPATH_ENABLED) + Free up an xmlXPathContext + + + + + defined(LIBXML_XPATH_ENABLED) + Free the NodeSet compound (not the actual nodes !). + + + + + defined(LIBXML_XPATH_ENABLED) + Free up the xmlXPathObjectPtr @obj but don't deallocate the objects in the list contrary to xmlXPathFreeObject(). + + + + + defined(LIBXML_XPATH_ENABLED) + Free up an xmlXPathObjectPtr object. + + + + + defined(LIBXML_XPATH_ENABLED) + Free up an xmlXPathParserContext + + + + + defined(LIBXML_XPATH_ENABLED) + Prototype for callbacks used to plug function lookup in the XPath engine. + + + + + + + defined(LIBXML_XPATH_ENABLED) + An XPath function. The arguments (if any) are popped out from the context stack and the result is pushed on the stack. + + + + + + defined(LIBXML_XPATH_ENABLED) + Search in the Function array of the context for the given function. + + + + + + defined(LIBXML_XPATH_ENABLED) + Search in the Function array of the context for the given function. + + + + + + + defined(LIBXML_XPATH_ENABLED) + Implements the EXSLT - Sets has-same-nodes function: boolean set:has-same-node(node-set, node-set) + + + + + + defined(LIBXML_XPATH_ENABLED) + 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. + + + + + + defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) + Initialize the XPath environment + + + + defined(LIBXML_XPATH_ENABLED) + Implements the EXSLT - Sets intersection() function: node-set set:intersection (node-set, node-set) + + + + + + defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) + Provides a portable isinf() function to detect whether a double is a +Infinite or -Infinite. Based on trio code http://sourceforge.net/projects/ctrio/ + + + + + defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) + Provides a portable isnan() function to detect whether a double is a NotaNumber. Based on trio code http://sourceforge.net/projects/ctrio/ + + + + + defined(LIBXML_XPATH_ENABLED) + Is the name given a NodeType one. [38] NodeType ::= 'comment' | 'text' | 'processing-instruction' | 'node' + + + + + defined(LIBXML_XPATH_ENABLED) + 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 + + + + + + defined(LIBXML_XPATH_ENABLED) + Implement the last() XPath function number last() The last function returns the number of nodes in the context node list. + + + + + + defined(LIBXML_XPATH_ENABLED) + 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. + + + + + + defined(LIBXML_XPATH_ENABLED) + Implements the EXSLT - Sets leading() function: node-set set:leading (node-set, node-set) + + + + + + defined(LIBXML_XPATH_ENABLED) + 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. + + + + + + defined(LIBXML_XPATH_ENABLED) + Implement the mod operation on XPath objects: @arg1 / @arg2 The numeric operators convert their operands to numbers as if by calling the number function. + + + + + defined(LIBXML_XPATH_ENABLED) + Implement the multiply operation on XPath objects: The numeric operators convert their operands to numbers as if by calling the number function. + + + + + defined(LIBXML_XPATH_ENABLED) + 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. + + + + + + defined(LIBXML_XPATH_ENABLED) + Create a new xmlXPathObjectPtr of type boolean and of value @val + + + + + defined(LIBXML_XPATH_ENABLED) + Create a new xmlXPathObjectPtr of type string and of value @val + + + + + defined(LIBXML_XPATH_ENABLED) + Create a new xmlXPathContext + + + + + defined(LIBXML_XPATH_ENABLED) + Create a new xmlXPathObjectPtr of type double and of value @val + + + + + defined(LIBXML_XPATH_ENABLED) + Create a new xmlXPathObjectPtr of type NodeSet and initialize it with the single Node @val + + + + + defined(LIBXML_XPATH_ENABLED) + Create a new xmlXPathObjectPtr of type NodeSet and initialize it with the Nodeset @val + + + + + defined(LIBXML_XPATH_ENABLED) + Create a new xmlXPathParserContext + + + + + + defined(LIBXML_XPATH_ENABLED) + Create a new xmlXPathObjectPtr of type string and of value @val + + + + + defined(LIBXML_XPATH_ENABLED) + Create a new xmlXPathObjectPtr of type Value Tree (XSLT) and initialize it with the tree root @val + + + + + defined(LIBXML_XPATH_ENABLED) + 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 + + + + + + defined(LIBXML_XPATH_ENABLED) + 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. + + + + + + defined(LIBXML_XPATH_ENABLED) + Traversal function for the "attribute" direction TODO: support DTD inherited default attributes + + + + + + defined(LIBXML_XPATH_ENABLED) + Traversal function for the "child" direction The child axis contains the children of the context node in document order. + + + + + + defined(LIBXML_XPATH_ENABLED) + 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. + + + + + + defined(LIBXML_XPATH_ENABLED) + 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 + + + + + + defined(LIBXML_XPATH_ENABLED) + 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 + + + + + + defined(LIBXML_XPATH_ENABLED) + Traversal function for the "following-sibling" direction The following-sibling axis contains the following siblings of the context node in document order. + + + + + + defined(LIBXML_XPATH_ENABLED) + 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. + + + + + + defined(LIBXML_XPATH_ENABLED) + Traversal function for the "parent" direction The parent axis contains the parent of the context node, if there is one. + + + + + + defined(LIBXML_XPATH_ENABLED) + 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 + + + + + + defined(LIBXML_XPATH_ENABLED) + 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. + + + + + + defined(LIBXML_XPATH_ENABLED) + Traversal function for the "self" direction The self axis contains just the context node itself + + + + + + defined(LIBXML_XPATH_ENABLED) + Evaluate the XPath Location Path in the given context. The node 'node' is set as the context node. The context node is not restored. + + + + + + + defined(LIBXML_XPATH_ENABLED) + Implements the EXSLT - Sets leading() function: node-set set:leading (node-set, node-set) @nodes is sorted by document order, then #exslSetsNodeLeadingSorted is called. + + + + + + defined(LIBXML_XPATH_ENABLED) + Implements the EXSLT - Sets leading() function: node-set set:leading (node-set, node-set) + + + + + + defined(LIBXML_XPATH_ENABLED) + add a new xmlNodePtr to an existing NodeSet + + + + + + defined(LIBXML_XPATH_ENABLED) + add a new namespace node to an existing NodeSet + + + + + + + defined(LIBXML_XPATH_ENABLED) + add a new xmlNodePtr to an existing NodeSet, optimized version when we are sure the node is not already in the set. + + + + + + defined(LIBXML_XPATH_ENABLED) + checks whether @cur contains @val + + + + + + defined(LIBXML_XPATH_ENABLED) + Create a new xmlNodeSetPtr of type double and of value @val + + + + + defined(LIBXML_XPATH_ENABLED) + Removes an xmlNodePtr from an existing NodeSet + + + + + + defined(LIBXML_XPATH_ENABLED) + 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 + + + + + defined(LIBXML_XPATH_ENABLED) + Merges two nodesets, all nodes from @val2 are added to @val1 if @val1 is NULL, a new set is created and copied from @val2 + + + + + + defined(LIBXML_XPATH_ENABLED) + Removes an entry from an existing NodeSet list. + + + + + + defined(LIBXML_XPATH_ENABLED) + Sort the node set in document order + + + + + defined(LIBXML_XPATH_ENABLED) + Implements the EXSLT - Sets trailing() function: node-set set:trailing (node-set, node-set) @nodes is sorted by document order, then #xmlXPathNodeTrailingSorted is called. + + + + + + defined(LIBXML_XPATH_ENABLED) + Implements the EXSLT - Sets trailing() function: node-set set:trailing (node-set, node-set) + + + + + + defined(LIBXML_XPATH_ENABLED) + 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. + + + + + + defined(LIBXML_XPATH_ENABLED) + Implement the equal operation on XPath objects content: @arg1 == @arg2 + + + + + defined(LIBXML_XPATH_ENABLED) + Implement the not() XPath function boolean not(boolean) The not function returns true if its argument is false, and false otherwise. + + + + + + defined(LIBXML_XPATH_ENABLED) + Search in the namespace declaration array of the context for the given namespace name associated to the given prefix + + + + + + defined(LIBXML_XPATH_ENABLED) + Implement the number() XPath function number number(object?) + + + + + + defined(LIBXML_XPATH_ENABLED) + allocate a new copy of a given object + + + + + defined(LIBXML_XPATH_ENABLED) + 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. + + + + + defined(LIBXML_XPATH_ENABLED) + parse an XML namespace non qualified name. [NS 3] NCName ::= (Letter | '_') (NCNameChar)* [NS 4] NCNameChar ::= Letter | Digit | '.' | '-' | '_' | CombiningChar | Extender + + + + + defined(LIBXML_XPATH_ENABLED) + parse an XML name [4] NameChar ::= Letter | Digit | '.' | '-' | '_' | ':' | CombiningChar | Extender [5] Name ::= (Letter | '_' | ':') (NameChar)* + + + + + defined(LIBXML_XPATH_ENABLED) + Pops a boolean from the stack, handling conversion if needed. Check error with #xmlXPathCheckError. + + + + + defined(LIBXML_XPATH_ENABLED) + Pops an external object from the stack, handling conversion if needed. Check error with #xmlXPathCheckError. + + + + + defined(LIBXML_XPATH_ENABLED) + Pops a node-set from the stack, handling conversion if needed. Check error with #xmlXPathCheckError. + + + + + defined(LIBXML_XPATH_ENABLED) + Pops a number from the stack, handling conversion if needed. Check error with #xmlXPathCheckError. + + + + + defined(LIBXML_XPATH_ENABLED) + Pops a string from the stack, handling conversion if needed. Check error with #xmlXPathCheckError. + + + + + defined(LIBXML_XPATH_ENABLED) + 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(). + + + + + + defined(LIBXML_XPATH_ENABLED) + Registers all default XPath functions in this context + + + + + defined(LIBXML_XPATH_ENABLED) + Register a new function. If @f is NULL it unregisters the function + + + + + + + defined(LIBXML_XPATH_ENABLED) + Registers an external mechanism to do function lookup. + + + + + + + defined(LIBXML_XPATH_ENABLED) + Register a new function. If @f is NULL it unregisters the function + + + + + + + + defined(LIBXML_XPATH_ENABLED) + Register a new namespace. If @ns_uri is NULL it unregisters the namespace + + + + + + + defined(LIBXML_XPATH_ENABLED) + Register a new variable value. If @value is NULL it unregisters the variable + + + + + + + defined(LIBXML_XPATH_ENABLED) + register an external mechanism to do variable lookup + + + + + + + defined(LIBXML_XPATH_ENABLED) + Register a new variable value. If @value is NULL it unregisters the variable + + + + + + + + defined(LIBXML_XPATH_ENABLED) + Cleanup the XPath context data associated to registered functions + + + + + defined(LIBXML_XPATH_ENABLED) + Cleanup the XPath context data associated to registered variables + + + + + defined(LIBXML_XPATH_ENABLED) + Cleanup the XPath context data associated to registered variables + + + + + defined(LIBXML_XPATH_ENABLED) + Initialize the context to the root of the document + + + + + defined(LIBXML_XPATH_ENABLED) + 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. + + + + + + defined(LIBXML_XPATH_ENABLED) + Sets 'node' as the context node. The node must be in the same document as that associated with the context. + + + + + + defined(LIBXML_XPATH_ENABLED) + 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. + + + + + + defined(LIBXML_XPATH_ENABLED) + [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. + + + + + defined(LIBXML_XPATH_ENABLED) + 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. + + + + + + defined(LIBXML_XPATH_ENABLED) + 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. + + + + + + defined(LIBXML_XPATH_ENABLED) + Implement the subtraction operation on XPath objects: The numeric operators convert their operands to numbers as if by calling the number function. + + + + + defined(LIBXML_XPATH_ENABLED) + 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. + + + + + + defined(LIBXML_XPATH_ENABLED) + 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. + + + + + + defined(LIBXML_XPATH_ENABLED) + 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 "" + + + + + + defined(LIBXML_XPATH_ENABLED) + 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. + + + + + + defined(LIBXML_XPATH_ENABLED) + 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. + + + + + + defined(LIBXML_XPATH_ENABLED) + Implements the EXSLT - Sets trailing() function: node-set set:trailing (node-set, node-set) + + + + + + defined(LIBXML_XPATH_ENABLED) + 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") + + + + + + defined(LIBXML_XPATH_ENABLED) + Implement the true() XPath function boolean true() + + + + + + defined(LIBXML_XPATH_ENABLED) + Implement the unary - operation on an XPath object The numeric operators convert their operands to numbers as if by calling the number function. + + + + + defined(LIBXML_XPATH_ENABLED) + Search in the Variable array of the context for the given variable value. + + + + + + defined(LIBXML_XPATH_ENABLED) + Prototype for callbacks used to plug variable lookup in the XPath engine. + + + + + + + defined(LIBXML_XPATH_ENABLED) + Search in the Variable array of the context for the given variable value. + + + + + + + defined(LIBXML_XPATH_ENABLED) + Wraps a string into an XPath object. + + + + + defined(LIBXML_XPATH_ENABLED) + Wraps the @val data into an XPath object. + + + + + defined(LIBXML_XPATH_ENABLED) + Wrap the Nodeset @val in a new xmlXPathObjectPtr + + + + + defined(LIBXML_XPATH_ENABLED) + Wraps the @val string into an XPath object. + + + + + defined(LIBXML_XPATH_ENABLED) + Formats an error message. + + + + + + + + defined(LIBXML_XPTR_ENABLED) + Build a node list tree copy of the XPointer result. This will drop Attributes and Namespace declarations. + + + + + defined(LIBXML_XPTR_ENABLED) + Evaluate the XPath Location Path in the given context. + + + + + + defined(LIBXML_XPTR_ENABLED) + [8] Predicate ::= '[' PredicateExpr ']' [9] PredicateExpr ::= Expr Evaluate a predicate as in xmlXPathEvalPredicate() but for a Location Set instead of a node set + + + + + defined(LIBXML_XPTR_ENABLED) + Free the LocationSet compound (not the actual ranges !). + + + + + defined(LIBXML_XPTR_ENABLED) + add a new xmlXPathObjectPtr to an existing LocationSet If the location already exist in the set @val is freed. + + + + + + defined(LIBXML_XPTR_ENABLED) + Create a new xmlLocationSetPtr of type double and of value @val + + + + + defined(LIBXML_XPTR_ENABLED) + Removes an xmlXPathObjectPtr from an existing LocationSet + + + + + + defined(LIBXML_XPTR_ENABLED) + Merges two rangesets, all ranges from @val2 are added to @val1 + + + + + + defined(LIBXML_XPTR_ENABLED) + Removes an entry from an existing LocationSet list. + + + + + + defined(LIBXML_XPTR_ENABLED) + Create a new xmlXPathObjectPtr of type range using a single nodes + + + + + defined(LIBXML_XPTR_ENABLED) + Create a new XPointer context + + + + + + + defined(LIBXML_XPTR_ENABLED) + Create a new xmlXPathObjectPtr of type LocationSet and initialize it with all the nodes from @set + + + + + defined(LIBXML_XPTR_ENABLED) + Create a new xmlXPathObjectPtr of type LocationSet and initialize it with the single range made of the two nodes @start and @end + + + + + + defined(LIBXML_XPTR_ENABLED) + Create a new xmlXPathObjectPtr of type range + + + + + + + + defined(LIBXML_XPTR_ENABLED) + Create a new xmlXPathObjectPtr of type range from a not to an object + + + + + + defined(LIBXML_XPTR_ENABLED) + Create a new xmlXPathObjectPtr of type range from a node to a point + + + + + + defined(LIBXML_XPTR_ENABLED) + Create a new xmlXPathObjectPtr of type range using 2 nodes + + + + + + defined(LIBXML_XPTR_ENABLED) + Create a new xmlXPathObjectPtr of type range from a point to a node + + + + + + defined(LIBXML_XPTR_ENABLED) + Create a new xmlXPathObjectPtr of type range using 2 Points + + + + + + defined(LIBXML_XPTR_ENABLED) + Implement the range-to() XPointer function + + + + + + defined(LIBXML_XPTR_ENABLED) + Wrap the LocationSet @val in a new xmlXPathObjectPtr + + + + + diff --git a/doc/libxml2-refs.xml b/doc/libxml2-refs.xml new file mode 100644 index 0000000..6dce37f --- /dev/null +++ b/doc/libxml2-refs.xml @@ -0,0 +1,32142 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/libxml2.xsa b/doc/libxml2.xsa new file mode 100644 index 0000000..0d4b8fe --- /dev/null +++ b/doc/libxml2.xsa @@ -0,0 +1,82 @@ + + + + + Daniel Veillard + daniel@veillard.com + http://veillard.com/ + + + libxml2 + v2.9.3 + Nov 20 2015 + http://xmlsoft.org/ + - Security: + CVE-2015-8242 Buffer overead with HTML parser in push mode (Hugh Davenport), + CVE-2015-7500 Fix memory access error due to incorrect entities boundaries (Daniel Veillard), + CVE-2015-7499-2 Detect incoherency on GROW (Daniel Veillard), + CVE-2015-7499-1 Add xmlHaltParser() to stop the parser (Daniel Veillard), + CVE-2015-5312 Another entity expansion issue (David Drysdale), + CVE-2015-7497 Avoid an heap buffer overflow in xmlDictComputeFastQKey (David Drysdale), + CVE-2015-7498 Avoid processing entities after encoding conversion failures (Daniel Veillard), + CVE-2015-8035 Fix XZ compression support loop (Daniel Veillard), + CVE-2015-7942-2 Fix an error in previous Conditional section patch (Daniel Veillard), + CVE-2015-7942 Another variation of overflow in Conditional sections (Daniel Veillard), + CVE-2015-1819 Enforce the reader to run in constant memory (Daniel Veillard) + CVE-2015-7941_2 Cleanup conditional section error handling (Daniel Veillard), + CVE-2015-7941_1 Stop parsing on entities boundaries errors (Daniel Veillard), + + - Documentation: + Correct spelling of "calling" (Alex Henrie), + Fix a small error in xmllint --format description (Fabien Degomme), + Avoid XSS on the search of xmlsoft.org (Daniel Veillard) + + - Portability: + threads: use forward declarations only for glibc (Michael Heimpold), + Update Win32 configure.js to search for configure.ac (Daniel Veillard) + + - Bug Fixes: + Bug on creating new stream from entity (Daniel Veillard), + Fix some loop issues embedding NEXT (Daniel Veillard), + Do not print error context when there is none (Daniel Veillard), + Avoid extra processing of MarkupDecl when EOF (Hugh Davenport), + Fix parsing short unclosed comment uninitialized access (Daniel Veillard), + Add missing Null check in xmlParseExternalEntityPrivate (Gaurav Gupta), + Fix a bug in CData error handling in the push parser (Daniel Veillard), + Fix a bug on name parsing at the end of current input buffer (Daniel Veillard), + Fix the spurious ID already defined error (Daniel Veillard), + Fix previous change to node sort order (Nick Wellnhofer), + Fix a self assignment issue raised by clang (Scott Graham), + Fail parsing early on if encoding conversion failed (Daniel Veillard), + Do not process encoding values if the declaration if broken (Daniel Veillard), + Silence clang's -Wunknown-attribute (Michael Catanzaro), + xmlMemUsed is not thread-safe (Martin von Gagern), + Fix support for except in nameclasses (Daniel Veillard), + Fix order of root nodes (Nick Wellnhofer), + Allow attributes on descendant-or-self axis (Nick Wellnhofer), + Fix the fix to Windows locking (Steve Nairn), + Fix timsort invariant loop re: Envisage article (Christopher Swenson), + Don't add IDs in xmlSetTreeDoc (Nick Wellnhofer), + Account for ID attributes in xmlSetTreeDoc (Nick Wellnhofer), + Remove various unused value assignments (Philip Withnall), + Fix missing entities after CVE-2014-3660 fix (Daniel Veillard), + Revert "Missing initialization for the catalog module" (Daniel Veillard) + + - Improvements: + Reuse xmlHaltParser() where it makes sense (Daniel Veillard), + xmlStopParser reset errNo (Daniel Veillard), + Reenable xz support by default (Daniel Veillard), + Recover unescaped less-than character in HTML recovery parsing (Daniel Veillard), + Allow HTML serializer to output HTML5 DOCTYPE (Shaun McCance), + Regression test for bug #695699 (Nick Wellnhofer), + Add a couple of XPath tests (Nick Wellnhofer), + Add Python 3 rpm subpackage (Tomas Radej), + libxml2-config.cmake.in: update include directories (Samuel Martin), + Adding example from bugs 738805 to regression tests (Daniel Veillard) + + - Cleanups: + + + + + diff --git a/doc/namespaces.html b/doc/namespaces.html new file mode 100644 index 0000000..878f7fe --- /dev/null +++ b/doc/namespaces.html @@ -0,0 +1,50 @@ + + +Namespaces
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    The XML C parser and toolkit of Gnome

    Namespaces

    Main Menu
    Related links

    The libxml2 library implements XML namespaces 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.

    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:

    <mydoc xmlns="http://mydoc.example.org/schemas/">
    +   <elem1>...</elem1>
    +   <elem2>...</elem2>
    +</mydoc>

    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, "http://www.gnome.org/gnumeric/1.0/" is a +good namespace scheme.

    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. <foo:text> may be exactly the +same as <bar:text> 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 +ns field pointing to an xmlNs structure detailing the namespace +prefix and its URI.

    @@Interfaces@@

    xmlNodePtr node;
    +if(!strncmp(node->name,"mytag",5)
    +  && node->ns
    +  && !strcmp(node->ns->href,"http://www.mysite.com/myns/1.0")) {
    +  ...
    +}

    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 +xmlns="http://...." 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 relagx-ng and w3c-schema.

    Daniel Veillard

    diff --git a/doc/newapi.xsl b/doc/newapi.xsl new file mode 100644 index 0000000..b809382 --- /dev/null +++ b/doc/newapi.xsl @@ -0,0 +1,766 @@ + + + + + + + + + + + + + + + html + ../ + + + API Menu + +
    + + +
    + +
    + + + + + +
    + + + + + + + +
    +
    + +
    +
    + +
    + + + + + + + +
    +
    + API Indexes +
    +
    + +
    + + + + + + + +
    +
    + Related links +
    +
    + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +    #define 
    +    
    +
    + + +
    +    Variable 
    +    
    +      
    +    
    +     
    +    
    +    
    +    
    +
    +
    +    
    +
    + + + +
    +    
    +      
    +	Enum 
    +	
    +	
    +
    +      
    +      
    +	Typedef 
    +	
    +	  
    +	
    +	 
    +	
    +	
    +
    +      
    +    
    +    
    +
    + + + +

    Enum

    +
    +      Enum 
    +      
    +       {
    +
    +      
    +        
    +            
    +        
    +         = 
    +        
    +        
    +	   : 
    +	  
    +	    
    +	  
    +        
    +        
    +
    +      
    +      }
    +
    +    
    +
    + + +
    +    Structure 
    + + + + The content of this structure is not made public by the API. + + +
    +
    + + +

    Structure

    +
    +    Structure 
    + { + + + The content of this structure is not made public by the API. + + + + + + + + + + + : + + + + + + + + } +
    +
    + + + +

    Macro:

    +
    #define 
    +

    + + + +

    + +
    + + + + + + +
    +    
    +      
    +    
    +    	
    +    
    +    
    +      	
    +    
    +    
    +      	
    +    
    +    	(
    +    
    +      void
    +    
    +    
    +      
    +        
    +      
    +       
    +      
    +      
    +        , 
    + + + + + + + +
    +
    + ) +
    + +
    + + + + + + +
    +    Function type: 
    +    
    +    
    +
    +    
    +      
    +    
    +    	
    +    
    +    
    +      	
    +    
    +    
    +      	
    +    
    +    	(
    +    
    +      void
    +    
    +    
    +      
    +        
    +      
    +       
    +      
    +      
    +        , 
    + + + + + + + +
    +
    + ) + +
    + + +
    + + + + + + +

    + + Function type: + +

    +
    +    Function type: 
    +    
    +    
    +
    +    
    +      
    +    
    +    	
    +    
    +    
    +      	
    +    
    +    
    +      	
    +    
    +    	(
    +    
    +      void
    +    
    +    
    +      
    +        
    +      
    +       
    +      
    +      
    +        , 
    + + + + + + + +
    +
    + ) + +
    +

    + + + +

    + +
    + + + + + + + + + + + + +
    : + + + +
    Returns: + + + +
    +
    +
    + + +
    + + + + + + +

    Function:

    +
    +    
    +      
    +    
    +    	
    +    
    +    
    +      	
    +    
    +    
    +      	
    +    
    +    	(
    +    
    +      void
    +    
    +    
    +      
    +        
    +      
    +       
    +      
    +      
    +        , 
    + + + + + + + +
    +
    + )
    + + +
    +

    + + + +

    + + +
    + + + + + + + + + + + + +
    : + + + +
    Returns: + + + +
    +
    +
    + + + + + + + + + + + +

    This module is deprecated

    +
    + +

    +
    +
    + + + + + + Module from + + + + + + <xsl:value-of select="$title"/> + + + + + + + + + +
    + + + + + +
    + + + + + + +
    + + + + +
    + + + + +
    + + + + +
    +

    Table of Contents

    + +

    Description

    + + + +
    +
    + +

    Table of Contents

    + + + + + + + + + + + + + + + +

    Description

    + + + + + + + + + + + + + + + + + +
    +
    +

    Daniel Veillard

    +
    +
    +
    +
    +
    + + +
    +
    + + + +
  • + + : + +
  • +
    + + + + Reference Manual for + + + + + + <xsl:value-of select="$title"/> + + + + + + + + + +
    + + + + + +
    + + + + + + +
    + + + + +
    + + + + +
    +

    Table of Contents

    +
      + +
    +

    Daniel Veillard

    +
    +
    +
    +
    +
    + + +
    +
    + + + + + + + + + + + + + + +
    diff --git a/doc/news.html b/doc/news.html new file mode 100644 index 0000000..0c692c8 --- /dev/null +++ b/doc/news.html @@ -0,0 +1,2529 @@ + + +Releases
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    The XML C parser and toolkit of Gnome

    Releases

    Main Menu
    Related links

    The change log describes the recents commits +to the GIT code base.

    Here is the list of public releases:

    2.9.4: May 23 2016

      +
    • Security:
      + More format string warnings with possible format string vulnerability (David Kilzer),
      + Avoid building recursive entities (Daniel Veillard),
      + Heap-based buffer overread in htmlCurrentChar (Pranjal Jumde),
      + Heap-based buffer-underreads due to xmlParseName (David Kilzer),
      + Heap use-after-free in xmlSAX2AttributeNs (Pranjal Jumde),
      + Heap use-after-free in htmlParsePubidLiteral and htmlParseSystemiteral (Pranjal Jumde),
      + Fix some format string warnings with possible format string vulnerability (David Kilzer),
      + Detect change of encoding when parsing HTML names (Hugh Davenport),
      + Fix inappropriate fetch of entities content (Daniel Veillard),
      + Bug 759398: Heap use-after-free in xmlDictComputeFastKey <https://bugzilla.gnome.org/show_bug.cgi?id=759398> (Pranjal Jumde),
      + Bug 758605: Heap-based buffer overread in xmlDictAddString <https://bugzilla.gnome.org/show_bug.cgi?id=758605> (Pranjal Jumde),
      + Bug 758588: Heap-based buffer overread in xmlParserPrintFileContextInternal <https://bugzilla.gnome.org/show_bug.cgi?id=758588> (David Kilzer),
      + Bug 757711: heap-buffer-overflow in xmlFAParsePosCharGroup <https://bugzilla.gnome.org/show_bug.cgi?id=757711> (Pranjal Jumde),
      + Add missing increments of recursion depth counter to XML parser. (Peter Simons)
      +
    • + +
    • Documentation:
      + Fix typo: s{ ec -> cr }cipt (Jan Pokorný),
      + Fix typos: dictio{ nn -> n }ar{y,ies} (Jan Pokorný),
      + Fix typos: PATH_{ SEAPARATOR -> SEPARATOR } (Jan Pokorný),
      + Correct a typo. (Shlomi Fish)
      +
    • + +
    • Portability:
      + Correct the usage of LDFLAGS (Mattias Hansson),
      + Revert the use of SAVE_LDFLAGS in configure.ac (Mattias Hansson),
      + libxml2 hardcodes -L/lib in zlib/lzma tests which breaks cross-compiles (Mike Frysinger),
      + Fix apibuild for a recently added construct (Daniel Veillard),
      + Use pkg-config to locate zlib when possible (Stewart Brodie),
      + Use pkg-config to locate ICU when possible (Stewart Brodie),
      + Portability to non C99 compliant compilers (Patrick Monnerat),
      + dict.h: Move xmlDictPtr definition before includes to allow direct inclusion. (Patrick Monnerat),
      + os400: tell about xmllint and xmlcatalog in README400. (Patrick Monnerat),
      + os400: properly process SGML add in XMLCATALOG command. (Patrick Monnerat),
      + os400: implement CL command XMLCATALOG. (Patrick Monnerat),
      + os400: compile and install program xmlcatalog (qshell-only). (Patrick Monnerat),
      + os400: expand tabs in sources, strip trailing blanks. (Patrick Monnerat),
      + os400: implement CL command XMLLINT. (Patrick Monnerat),
      + os400: compile and install program xmllint (qshell-only). (Patrick Monnerat),
      + os400: initscript make_module(): Use options instead of positional parameters. (Patrick Monnerat),
      + os400: c14n.rpgle: allow *omit for nullable reference parameters. (Patrick Monnerat),
      + os400: use like() for double type. (Patrick Monnerat),
      + os400: use like() for int type. (Patrick Monnerat),
      + os400: use like() for unsigned int type. (Patrick Monnerat),
      + os400: use like() for enum types. (Patrick Monnerat),
      + Add xz to xml2-config --libs output (Baruch Siach),
      + Bug 760190: configure.ac should be able to build --with-icu without icu-config tool <https://bugzilla.gnome.org/show_bug.cgi?id=760190> (David Kilzer),
      + win32\VC10\config.h and VS 2015 (Bruce Dawson),
      + Add configure maintainer mode (orzen)
      +
    • + +
    • Bug Fixes:
      + Avoid an out of bound access when serializing malformed strings (Daniel Veillard),
      + Unsigned addition may overflow in xmlMallocAtomicLoc() (David Kilzer),
      + Integer signed/unsigned type mismatch in xmlParserInputGrow() (David Kilzer),
      + Bug 763071: heap-buffer-overflow in xmlStrncat <https://bugzilla.gnome.org/show_bug.cgi?id=763071> (Pranjal Jumde),
      + Integer overflow parsing port number in URI (Michael Paddon),
      + Fix an error with regexp on nullable counted char transition (Daniel Veillard),
      + Fix memory leak with XPath namespace nodes (Nick Wellnhofer),
      + Fix namespace axis traversal (Nick Wellnhofer),
      + Fix null pointer deref in docs with no root element (Hugh Davenport),
      + Fix XSD validation of URIs with ampersands (Alex Henrie),
      + xmlschemastypes.c: accept endOfDayFrag Times set to "24:00:00" mean "end of day" and should not cause an error. (Patrick Monnerat),
      + xmlcatalog: flush stdout before interactive shell input. (Patrick Monnerat),
      + xmllint: flush stdout before interactive shell input. (Patrick Monnerat),
      + Don't recurse into OP_VALUEs in xmlXPathOptimizeExpression (Nick Wellnhofer),
      + Fix namespace::node() XPath expression (Nick Wellnhofer),
      + Fix OOB write in xmlXPathEmptyNodeSet (Nick Wellnhofer),
      + Fix parsing of NCNames in XPath (Nick Wellnhofer),
      + Fix OOB read with invalid UTF-8 in xmlUTF8Strsize (Nick Wellnhofer),
      + Do normalize string-based datatype value in RelaxNG facet checking (Audric Schiltknecht),
      + Bug 760921: REGRESSION (8eb55d78): doc/examples/io1 test fails after fix for "xmlSaveUri() incorrectly recomposes URIs with rootless paths" <https://bugzilla.gnome.org/show_bug.cgi?id=760921> (David Kilzer),
      + Bug 760861: REGRESSION (bf9c1dad): Missing results for test/schemas/regexp-char-ref_[01].xsd <https://bugzilla.gnome.org/show_bug.cgi?id=760861> (David Kilzer),
      + error.c: *input->cur == 0 does not mean no error (Pavel Raiskup),
      + Add missing RNG test files (David Kilzer),
      + Bug 760183: REGRESSION (v2.9.3): XML push parser fails with bogus UTF-8 encoding error when multi-byte character in large CDATA section is split across buffer <https://bugzilla.gnome.org/show_bug.cgi?id=760183> (David Kilzer),
      + Bug 758572: ASAN crash in make check <https://bugzilla.gnome.org/show_bug.cgi?id=758572> (David Kilzer),
      + Bug 721158: Missing ICU string when doing --version on xmllint <https://bugzilla.gnome.org/show_bug.cgi?id=721158> (David Kilzer),
      + python 3: libxml2.c wrappers create Unicode str already (Michael Stahl),
      + Add autogen.sh to distrib (orzen),
      + Heap-based buffer overread in xmlNextChar (Daniel Veillard)
      +
    • + +
    • Improvements:
      + Add more debugging info to runtest (Daniel Veillard),
      + Implement "runtest -u" mode (David Kilzer),
      + Add a make rule to rebuild for ASAN (Daniel Veillard)
      +
    • +

    v2.9.3: Nov 20 2015

      +
    • Security:
      + CVE-2015-8242 Buffer overead with HTML parser in push mode (Hugh Davenport),
      + CVE-2015-7500 Fix memory access error due to incorrect entities boundaries (Daniel Veillard),
      + CVE-2015-7499-2 Detect incoherency on GROW (Daniel Veillard),
      + CVE-2015-7499-1 Add xmlHaltParser() to stop the parser (Daniel Veillard),
      + CVE-2015-5312 Another entity expansion issue (David Drysdale),
      + CVE-2015-7497 Avoid an heap buffer overflow in xmlDictComputeFastQKey (David Drysdale),
      + CVE-2015-7498 Avoid processing entities after encoding conversion failures (Daniel Veillard),
      + CVE-2015-8035 Fix XZ compression support loop (Daniel Veillard),
      + CVE-2015-7942-2 Fix an error in previous Conditional section patch (Daniel Veillard),
      + CVE-2015-7942 Another variation of overflow in Conditional sections (Daniel Veillard),
      + CVE-2015-1819 Enforce the reader to run in constant memory (Daniel Veillard)
      + CVE-2015-7941_2 Cleanup conditional section error handling (Daniel Veillard),
      + CVE-2015-7941_1 Stop parsing on entities boundaries errors (Daniel Veillard),
      +
    • + +
    • Documentation:
      + Correct spelling of "calling" (Alex Henrie),
      + Fix a small error in xmllint --format description (Fabien Degomme),
      + Avoid XSS on the search of xmlsoft.org (Daniel Veillard)
      +
    • + +
    • Portability:
      + threads: use forward declarations only for glibc (Michael Heimpold),
      + Update Win32 configure.js to search for configure.ac (Daniel Veillard)
      +
    • + +
    • Bug Fixes:
      + Bug on creating new stream from entity (Daniel Veillard),
      + Fix some loop issues embedding NEXT (Daniel Veillard),
      + Do not print error context when there is none (Daniel Veillard),
      + Avoid extra processing of MarkupDecl when EOF (Hugh Davenport),
      + Fix parsing short unclosed comment uninitialized access (Daniel Veillard),
      + Add missing Null check in xmlParseExternalEntityPrivate (Gaurav Gupta),
      + Fix a bug in CData error handling in the push parser (Daniel Veillard),
      + Fix a bug on name parsing at the end of current input buffer (Daniel Veillard),
      + Fix the spurious ID already defined error (Daniel Veillard),
      + Fix previous change to node sort order (Nick Wellnhofer),
      + Fix a self assignment issue raised by clang (Scott Graham),
      + Fail parsing early on if encoding conversion failed (Daniel Veillard),
      + Do not process encoding values if the declaration if broken (Daniel Veillard),
      + Silence clang's -Wunknown-attribute (Michael Catanzaro),
      + xmlMemUsed is not thread-safe (Martin von Gagern),
      + Fix support for except in nameclasses (Daniel Veillard),
      + Fix order of root nodes (Nick Wellnhofer),
      + Allow attributes on descendant-or-self axis (Nick Wellnhofer),
      + Fix the fix to Windows locking (Steve Nairn),
      + Fix timsort invariant loop re: Envisage article (Christopher Swenson),
      + Don't add IDs in xmlSetTreeDoc (Nick Wellnhofer),
      + Account for ID attributes in xmlSetTreeDoc (Nick Wellnhofer),
      + Remove various unused value assignments (Philip Withnall),
      + Fix missing entities after CVE-2014-3660 fix (Daniel Veillard),
      + Revert "Missing initialization for the catalog module" (Daniel Veillard)
      +
    • + +
    • Improvements:
      + Reuse xmlHaltParser() where it makes sense (Daniel Veillard),
      + xmlStopParser reset errNo (Daniel Veillard),
      + Reenable xz support by default (Daniel Veillard),
      + Recover unescaped less-than character in HTML recovery parsing (Daniel Veillard),
      + Allow HTML serializer to output HTML5 DOCTYPE (Shaun McCance),
      + Regression test for bug #695699 (Nick Wellnhofer),
      + Add a couple of XPath tests (Nick Wellnhofer),
      + Add Python 3 rpm subpackage (Tomas Radej),
      + libxml2-config.cmake.in: update include directories (Samuel Martin),
      + Adding example from bugs 738805 to regression tests (Daniel Veillard)
      +
    • + +
    • Cleanups:
      +
    • +

    2.9.2: Oct 16 2014

      +
    • Security:
      + Fix for CVE-2014-3660 billion laugh variant (Daniel Veillard),
      + CVE-2014-0191 Do not fetch external parameter entities (Daniel Veillard)
      +
    • + +
    • Bug Fixes:
      + fix memory leak xml header encoding field with XML_PARSE_IGNORE_ENC (Bart De Schuymer),
      + xmlmemory: handle realloc properly (Yegor Yefremov),
      + Python generator bug raised by the const change (Daniel Veillard),
      + Windows Critical sections not released correctly (Daniel Veillard),
      + Parser error on repeated recursive entity expansion containing &lt; (Daniel Veillard),
      + xpointer : fixing Null Pointers (Gaurav Gupta),
      + Remove Unnecessary Null check in xpointer.c (Gaurav Gupta),
      + parser bug on misformed namespace attributes (Dennis Filder),
      + Pointer dereferenced before null check (Daniel Veillard),
      + Leak of struct addrinfo in xmlNanoFTPConnect() (Gaurav Gupta),
      + Possible overflow in HTMLParser.c (Daniel Veillard),
      + python/tests/sync.py assumes Python dictionaries are ordered (John Beck),
      + Fix Enum check and missing break (Gaurav Gupta),
      + xmlIO: Handle error returns from dup() (Philip Withnall),
      + Fix a problem properly saving URIs (Daniel Veillard),
      + wrong error column in structured error when parsing attribute values (Juergen Keil),
      + wrong error column in structured error when skipping whitespace in xml decl (Juergen Keil),
      + no error column in structured error handler for xml schema validation errors (Juergen Keil),
      + Couple of Missing Null checks (Gaurav Gupta),
      + Add couple of missing Null checks (Daniel Veillard),
      + xmlschemastypes: Fix potential array overflow (Philip Withnall),
      + runtest: Fix a memory leak on parse failure (Philip Withnall),
      + xmlIO: Fix an FD leak on gzdopen() failure (Philip Withnall),
      + xmlcatalog: Fix a memory leak on quit (Philip Withnall),
      + HTMLparser: Correctly initialise a stack allocated structure (Philip Withnall),
      + Check for tmon in _xmlSchemaDateAdd() is incorrect (David Kilzer),
      + Avoid Possible Null Pointer in trio.c (Gaurav Gupta),
      + Fix processing in SAX2 in case of an allocation failure (Daniel Veillard),
      + XML Shell command "cd" does not handle "/" at end of path (Daniel Veillard),
      + Fix various Missing Null checks (Gaurav Gupta),
      + Fix a potential NULL dereference (Daniel Veillard),
      + Add a couple of misisng check in xmlRelaxNGCleanupTree (Gaurav Gupta),
      + Add a missing argument check (Gaurav Gupta),
      + Adding a check in case of allocation error (Gaurav Gupta),
      + xmlSaveUri() incorrectly recomposes URIs with rootless paths (Dennis Filder),
      + Adding some missing NULL checks (Gaurav),
      + Fixes for xmlInitParserCtxt (Daniel Veillard),
      + Fix regressions introduced by CVE-2014-0191 patch (Daniel Veillard),
      + erroneously ignores a validation error if no error callback set (Daniel Veillard),
      + xmllint was not parsing the --c14n11 flag (Sérgio Batista),
      + Avoid Possible null pointer dereference in memory debug mode (Gaurav),
      + Avoid Double Null Check (Gaurav),
      + Restore context size and position after XPATH_OP_ARG (Nick Wellnhofer),
      + Fix xmlParseInNodeContext() if node is not element (Daniel Veillard),
      + Avoid a possible NULL pointer dereference (Gaurav),
      + Fix xmlTextWriterWriteElement when a null content is given (Daniel Veillard),
      + Fix an typo 'onrest' in htmlScriptAttributes (Daniel Veillard),
      + fixing a ptotential uninitialized access (Daniel Veillard),
      + Fix an fd leak in an error case (Daniel Veillard),
      + Missing initialization for the catalog module (Daniel Veillard),
      + Handling of XPath function arguments in error case (Nick Wellnhofer),
      + Fix a couple of missing NULL checks (Gaurav),
      + Avoid a possibility of dangling encoding handler (Gaurav),
      + Fix HTML push parser to accept HTML_PARSE_NODEFDTD (Arnold Hendriks),
      + Fix a bug loading some compressed files (Mike Alexander),
      + Fix XPath node comparison bug (Gaurav),
      + Type mismatch in xmlschemas.c (Gaurav),
      + Type mismatch in xmlschemastypes.c (Gaurav),
      + Avoid a deadcode in catalog.c (Daniel Veillard),
      + run close socket on Solaris, same as we do on other platforms (Denis Pauk),
      + Fix pointer dereferenced before null check (Gaurav),
      + Fix a potential NULL dereference in tree code (Daniel Veillard),
      + Fix potential NULL pointer dereferences in regexp code (Gaurav),
      + xmllint --pretty crashed without following numeric argument (Tim Galeckas),
      + Fix XPath expressions of the form '@ns:*' (Nick Wellnhofer),
      + Fix XPath '//' optimization with predicates (Nick Wellnhofer),
      + Clear up a potential NULL dereference (Daniel Veillard),
      + Fix a possible NULL dereference (Gaurav),
      + Avoid crash if allocation fails (Daniel Veillard),
      + Remove occasional leading space in XPath number formatting (Daniel Veillard),
      + Fix handling of mmap errors (Daniel Veillard),
      + Catch malloc error and exit accordingly (Daniel Veillard),
      + missing else in xlink.c (Ami Fischman),
      + Fix a parsing bug on non-ascii element and CR/LF usage (Daniel Veillard),
      + Fix a regression in xmlGetDocCompressMode() (Daniel Veillard),
      + properly quote the namespace uris written out during c14n (Aleksey Sanin),
      + Remove premature XInclude check on URI being relative (Alexey Neyman),
      + Fix missing break on last() function for attributes (dcb),
      + Do not URI escape in server side includes (Romain Bondue),
      + Fix an error in xmlCleanupParser (Alexander Pastukhov)
      +
    • + +
    • Documentation:
      + typo in error messages "colon are forbidden from..." (Daniel Veillard),
      + Fix a link to James SAX documentation old page (Daniel Veillard),
      + Fix typos in relaxng.c (Jan Pokorný),
      + Fix a doc typo (Daniel Veillard),
      + Fix typos in {tree,xpath}.c (errror) (Jan Pokorný),
      + Add limitations about encoding conversion (Daniel Veillard),
      + Fix typos in xmlschemas{,types}.c (Jan Pokorný),
      + Fix incorrect spelling entites->entities (Jan Pokorný),
      + Forgot to document 2.9.1 release, regenerate docs (Daniel Veillard)
      +
    • + +
    • Portability:
      + AC_CONFIG_FILES and executable bit (Roumen Petrov),
      + remove HAVE_CONFIG_H dependency in testlimits.c (Roumen Petrov),
      + fix some tabs mixing incompatible with python3 (Roumen Petrov),
      + Visual Studio 14 CTP defines snprintf() (Francis Dupont),
      + OS400: do not try to copy unexisting doc files (Patrick Monnerat),
      + OS400: use either configure.ac or configure.in. (Patrick Monnerat),
      + os400: make-src.sh: create physical file with target CCSID (Patrick Monnerat),
      + OS400: Add some more C macros equivalent procedures. (Patrick Monnerat),
      + OS400: use C macros to implement equivalent RPG support procedures. (Patrick Monnerat),
      + OS400: implement XPath macros as procedures for ILE/RPG support. (Patrick Monnerat),
      + OS400: include in distribution tarball. (Patrick Monnerat),
      + OS400: Add README: compilation directives and OS/400 specific stuff. (Patrick Monnerat),
      + OS400: Add compilation scripts. (Patrick Monnerat),
      + OS400: ILE RPG language header files. (Patrick Monnerat),
      + OS400: implement some macros as functions for ILE/RPG language support (that as no macros). (Patrick Monnerat),
      + OS400: UTF8<-->EBCDIC wrappers for system and external library calls (Patrick Monnerat),
      + OS400: Easy character transcoding support (Patrick Monnerat),
      + OS400: iconv functions compatibility wrappers and table builder. (Patrick Monnerat),
      + OS400: create architecture directory. Implement dlfcn emulation. (Patrick Monnerat),
      + Fix building when configuring without xpath and xptr (Daniel Veillard),
      + configure: Add --with-python-install-dir (Jonas Eriksson),
      + Fix compilation with minimum and xinclude. (Nicolas Le Cam),
      + Compile out use of xmlValidateNCName() when not available. (Nicolas Le Cam),
      + Fix compilation with minimum and schematron. (Nicolas Le Cam),
      + Legacy needs xmlSAX2StartElement() and xmlSAX2EndElement(). (Nicolas Le Cam),
      + Don't use xmlValidateName() when not available. (Nicolas Le Cam),
      + Fix a portability issue on Windows (Longstreth Jon),
      + Various portability patches for OpenVMS (Jacob (Jouk) Jansen),
      + Use specific macros for portability to OS/400 (Patrick Monnerat),
      + Add macros needed for OS/400 portability (Patrick Monnerat),
      + Portability patch for fopen on OS/400 (Patrick Monnerat),
      + Portability fixes for OS/400 (Patrick Monnerat),
      + Improve va_list portability (Patrick Monnerat),
      + Portability fix (Patrick Monnerat),
      + Portability fix (Patrick Monnerat),
      + Generic portability fix (Patrick Monnerat),
      + Shortening lines in headers (Patrick Monnerat),
      + build: Use pkg-config to find liblzma in preference to AC_CHECK_LIB (Philip Withnall),
      + build: Add @LZMA_LIBS@ to libxml’s pkg-config files (Philip Withnall),
      + fix some tabs mixing incompatible with python3 (Daniel Veillard),
      + add additional defines checks for support "./configure --with-minimum" (Denis Pauk),
      + Another round of fixes for older versions of Python (Arfrever Frehtes Taifersar Arahesis),
      + python: fix drv_libxml2.py for python3 compatibility (Alexandre Rostovtsev),
      + python: Fix compiler warnings when building python3 bindings (Armin K),
      + Fix for compilation with python 2.6.8 (Petr Sumbera)
      +
    • + +
    • Improvements:
      + win32/libxml2.def.src after rebuild in doc (Roumen Petrov),
      + elfgcchack.h: more legacy needs xmlSAX2StartElement() and xmlSAX2EndElement() (Roumen Petrov),
      + elfgcchack.h: add xmlXPathNodeEval and xmlXPathSetContextNode (Roumen Petrov),
      + Provide cmake module (Samuel Martin),
      + Fix a couple of issues raised by make dist (Daniel Veillard),
      + Fix and add const qualifiers (Kurt Roeckx),
      + Preparing for upcoming release of 2.9.2 (Daniel Veillard),
      + Fix zlib and lzma libraries check via command line (Dmitriy),
      + wrong error column in structured error when parsing end tag (Juergen Keil),
      + doc/news.html: small update to avoid line join while generating NEWS. (Patrick Monnerat),
      + Add methods for python3 iterator (Ron Angeles),
      + Support element node traversal in document fragments. (Kyle VanderBeek),
      + xmlNodeSetName: Allow setting the name to a substring of the currently set name (Tristan Van Berkom),
      + Added macros for argument casts (Eric Zurcher),
      + adding init calls to xml and html Read parsing entry points (Daniel Veillard),
      + Get rid of 'REPLACEMENT CHARACTER' Unicode chars in xmlschemas.c (Jan Pokorný),
      + Implement choice for name classes on attributes (Shaun McCance),
      + Two small namespace tweaks (Daniel Veillard),
      + xmllint --memory should fail on empty files (Daniel Veillard),
      + Cast encoding name to char pointer to match arg type (Nikolay Sivov)
      +
    • + +
    • Cleanups:
      + Removal of old configure.in (Daniel Veillard),
      + Unreachable code in tree.c (Gaurav Gupta),
      + Remove a couple of dead conditions (Gaurav Gupta),
      + Avoid some dead code and cleanup in relaxng.c (Gaurav),
      + Drop not needed checks (Denis Pauk),
      + Fix a wrong test (Daniel Veillard)
      +
    • +

    2.9.1: Apr 19 2013

      +
    • Features:
      + Support for Python3 (Daniel Veillard),
      + Add xmlXPathSetContextNode and xmlXPathNodeEval (Alex Bligh)
      +
    • + +
    • Documentation:
      + Add documentation for xmllint --xpath (Daniel Veillard),
      + Fix the URL of the SAX documentation from James (Daniel Veillard),
      + Fix spelling of "length". (Michael Wood)
      +
    • + +
    • Portability:
      + Fix python bindings with versions older than 2.7 (Daniel Veillard),
      + rebuild docs:Makefile.am (Roumen Petrov),
      + elfgcchack.h after rebuild in doc (Roumen Petrov),
      + elfgcchack for buf module (Roumen Petrov),
      + Fix a uneeded and wrong extra link parameter (Daniel Veillard),
      + Few cleanup patches for Windows (Denis Pauk),
      + Fix rpmbuild --nocheck (Mark Salter),
      + Fix for win32/configure.js and WITH_THREAD_ALLOC (Daniel Richard),
      + Fix Broken multi-arch support in xml2-config (Daniel Veillard),
      + Fix a portability issue for GCC < 3.4.0 (Daniel Veillard),
      + Windows build fixes (Daniel Richard),
      + Fix a thread portability problem (Friedrich Haubensak),
      + Downgrade autoconf requirement to 2.63 (Daniel Veillard)
      +
    • + +
    • Bug Fixes:
      + Fix a linking error for python bindings (Daniel Veillard),
      + Fix a couple of return without value (Jüri Aedla),
      + Improve the hashing functions (Daniel Franke),
      + Improve handling of xmlStopParser() (Daniel Veillard),
      + Remove risk of lockup in dictionary initialization (Daniel Veillard),
      + Activate detection of encoding in external subset (Daniel Veillard),
      + Fix an output buffer flushing conversion bug (Mikhail Titov),
      + Fix an old bug in xmlSchemaValidateOneElement (Csaba László),
      + Fix configure cannot remove messages (Gilles Espinasse),
      + fix schema validation in combination with xsi:nil (Daniel Veillard),
      + xmlCtxtReadFile doesn't work with literal IPv6 URLs (Steve Wolf),
      + Fix a few problems with setEntityLoader (Alexey Neyman),
      + Detect excessive entities expansion upon replacement (Daniel Veillard),
      + Fix the flushing out of raw buffers on encoding conversions (Daniel,
      +Veillard),
      + Fix some buffer conversion issues (Daniel Veillard),
      + When calling xmlNodeDump make sure we grow the buffer quickly (Daniel,
      +Veillard),
      + Fix an error in the progressive DTD parsing code (Dan Winship),
      + xmllint should not load DTD by default when using the reader (Daniel,
      +Veillard),
      + Try IBM-037 when looking for EBCDIC handlers (Petr Sumbera),
      + Fix potential out of bound access (Daniel Veillard),
      + Fix large parse of file from memory (Daniel Veillard),
      + Fix a bug in the nsclean option of the parser (Daniel Veillard),
      + Fix a regression in 2.9.0 breaking validation while streaming (Daniel,
      +Veillard),
      + Remove potential calls to exit() (Daniel Veillard)
      +
    • + +
    • Improvements:
      + Regenerated API, and testapi, rebuild documentation (Daniel Veillard),
      + Fix tree iterators broken by 2to3 script (Daniel Veillard),
      + update all tests for Python3 and Python2 (Daniel Veillard),
      + A few more fixes for python 3 affecting libxml2.py (Daniel Veillard),
      + Fix compilation on Python3 (Daniel Veillard),
      + Converting apibuild.py to python3 (Daniel Veillard),
      + First pass at starting porting to python3 (Daniel Veillard),
      + updated configure.in for python3 (Daniel Veillard),
      + Add support for xpathRegisterVariable in Python (Shaun McCance),
      + Added a regression tests from bug 694228 data (Daniel Veillard),
      + Cache presence of '<' in entities content (Daniel Veillard),
      + Avoid extra processing on entities (Daniel Veillard),
      + Python binding for xmlRegisterInputCallback (Alexey Neyman),
      + Python bindings: DOM casts everything to xmlNode (Alexey Neyman),
      + Define LIBXML_THREAD_ALLOC_ENABLED via xmlversion.h (Tim Starling),
      + Adding streaming validation to runtest checks (Daniel Veillard),
      + Add a --pushsmall option to xmllint (Daniel Veillard)
      +
    • + +
    • Cleanups:
      + Switched comment in file to UTF-8 encoding (Daniel Veillard),
      + Extend gitignore (Daniel Veillard),
      + Silent the new python test on input (Alexey Neyman),
      + Cleanup of a duplicate test (Daniel Veillard),
      + Cleanup on duplicate test expressions (Daniel Veillard),
      + Fix compiler warning after 153cf15905cf4ec080612ada6703757d10caba1e (Patrick,
      +Gansterer),
      + Spec cleanups and a fix for multiarch support (Daniel Veillard),
      + Silence a clang warning (Daniel Veillard),
      + Cleanup the Copyright to be pure MIT Licence wording (Daniel Veillard),
      + rand_seed should be static in dict.c (Wouter Van Rooy),
      + Fix typos in parser comments (Jan Pokorný)
      +
    • +

    2.9.0: Sep 11 2012

      +
    • Features:
      + A few new API entry points,
      + More resilient push parser mode,
      + A lot of portability improvement,
      + Faster XPath evaluation
      +
    • + +
    • Documentation:
      + xml2-config.1 markup error (Christian Weisgerber),
      + libxml(3) manpage typo fix (John Bradshaw),
      + More cleanups to the documentation part of libxml2 (Daniel Richard G)
      +
    • + +
    • Portability:
      + Bug 676544 - fails to build with --without-sax1 (Akira TAGOH),
      + fix builds not having stdint.h (Rob Richards),
      + GetProcAddressA is available only on WinCE (Daniel Veillard),
      + More updates and cleanups on autotools and Makefiles (Daniel Richard G),
      + More changes for Win32 compilation (Eric Zurcher),
      + Basic changes for Win32 builds of release 2.9.0: compile buf.c (Eric Zurcher),
      + Bundles all generated files for python into the distribution (Daniel Richard G),
      + Fix compiler warnings of wincecompat.c (Patrick Gansterer),
      + Fix non __GNUC__ build (Patrick Gansterer),
      + Fix windows unicode build (Patrick Gansterer),
      + clean redefinition of {v}snprintf in C-source (Roumen Petrov),
      + use xmlBuf... if DEBUG_INPUT is defined (Roumen Petrov),
      + fix runtests to use pthreads support for various Unix platforms (Daniel Richard G),
      + Various "make distcheck" and portability fixups 2nd part (Daniel Richard G),
      + Various "make distcheck" and portability fixups (Daniel Richard G),
      + Fix compilation on older Visual Studio (Daniel Veillard)
      +
    • + +
    • Bug Fixes:
      + Change the XPath code to percolate allocation errors (Daniel Veillard),
      + Fix reuse of xmlInitParser (Daniel Veillard),
      + Fix potential crash on entities errors (Daniel Veillard),
      + initialize var (Rob Richards),
      + Fix the XPath arity check to also check the XPath stack limits (Daniel Veillard),
      + Fix problem with specific and generic error handlers (Pietro Cerutti),
      + Avoid a potential infinite recursion (Daniel Veillard),
      + Fix an XSD error when generating internal automata (Daniel Veillard),
      + Patch for xinclude of text using multibyte characters (Vitaly Ostanin),
      + Fix a segfault on XSD validation on pattern error (Daniel Veillard),
      + Fix missing xmlsave.h module which was ignored in recent builds (Daniel Veillard),
      + Add a missing element check (Daniel Veillard),
      + Adding various checks on node type though the API (Daniel Veillard),
      + Namespace nodes can't be unlinked with xmlUnlinkNode (Daniel Veillard),
      + Fix make dist to include new private header files (Daniel Veillard),
      + More fixups on the push parser behaviour (Daniel Veillard),
      + Strengthen behaviour of the push parser in problematic situations (Daniel Veillard),
      + Enforce XML_PARSER_EOF state handling through the parser (Daniel Veillard),
      + Fixup limits parser (Daniel Veillard),
      + Do not fetch external parsed entities (Daniel Veillard),
      + Fix an error in previous commit (Aron Xu),
      + Fix entities local buffers size problems (Daniel Veillard),
      + Fix parser local buffers size problems (Daniel Veillard),
      + Fix a failure to report xmlreader parsing failures (Daniel Veillard)
      +
    • + +
    • Improvements:
      + Keep libxml2.syms when running "make distclean" (Daniel Veillard),
      + Allow to set the quoting character of an xmlWriter (Csaba Raduly),
      + Keep non-significant blanks node in HTML parser (Daniel Veillard),
      + Add a forbidden variable error number and message to XPath (Daniel Veillard),
      + Support long path names on WNT (Michael Stahl),
      + Improve HTML escaping of attribute on output (Daniel Veillard),
      + Handle ICU_LIBS as LIBADD, not LDFLAGS to prevent linking errors (Arfrever Frehtes Taifersar Arahesis),
      + Switching XPath node sorting to Timsort (Vojtech Fried),
      + Optimizing '//' in XPath expressions (Nick Wellnhofer),
      + Expose xmlBufShrink in the public tree API (Daniel Veillard),
      + Visible HTML elements close the head tag (Conrad Irwin),
      + Fix file and line report for XSD SAX and reader streaming validation (Daniel Veillard),
      + Fix const qualifyer to definition of xmlBufferDetach (Daniel Veillard),
      + minimize use of HAVE_CONFIG_H (Roumen Petrov),
      + fixup regression in Various "make distcheck" and portability fixups (Roumen Petrov),
      + Add support for big line numbers in error reporting (Daniel Veillard),
      + Avoid using xmlBuffer for serialization (Daniel Veillard),
      + Improve compatibility between xmlBuf and xmlBuffer (Daniel Veillard),
      + Provide new accessors for xmlOutputBuffer (Daniel Veillard),
      + Improvements for old buffer compatibility (Daniel Veillard),
      + Expand the limit test program (Daniel Veillard),
      + Improve error reporting on parser errors (Daniel Veillard),
      + Implement some default limits in the XPath module (Daniel Veillard),
      + Introduce some default parser limits (Daniel Veillard),
      + Cleanups and new limit APIs for dictionaries (Daniel Veillard),
      + Fixup for buf.c (Daniel Veillard),
      + Cleanup URI module memory allocation code (Daniel Veillard),
      + Extend testlimits (Daniel Veillard),
      + More avoid quadratic behaviour (Daniel Veillard),
      + Impose a reasonable limit on PI size (Daniel Veillard),
      + first version of testlimits new test (Daniel Veillard),
      + Avoid quadratic behaviour in some push parsing cases (Daniel Veillard),
      + Impose a reasonable limit on comment size (Daniel Veillard),
      + Impose a reasonable limit on attribute size (Daniel Veillard),
      + Harden the buffer code and make it more compatible (Daniel Veillard),
      + More cleanups for input/buffers code (Daniel Veillard),
      + Cleanup function xmlBufResetInput(),
      to set input from Buffer (Daniel Veillard) + Swicth the test program for characters to new input buffers (Daniel Veillard),
      + Convert the HTML tree module to the new buffers (Daniel Veillard),
      + Convert of the HTML parser to new input buffers (Daniel Veillard),
      + Convert the writer to new output buffer and save APIs (Daniel Veillard),
      + Convert XMLReader to the new input buffers (Daniel Veillard),
      + New saving functions using xmlBuf and conversion (Daniel Veillard),
      + Provide new xmlBuf based saving functions (Daniel Veillard),
      + Convert XInclude to the new input buffers (Daniel Veillard),
      + Convert catalog code to the new input buffers (Daniel Veillard),
      + Convert C14N to the new Input buffer (Daniel Veillard),
      + Convert xmlIO.c to the new input and output buffers (Daniel Veillard),
      + Convert XML parser to the new input buffers (Daniel Veillard),
      + Incompatible change to the Input and Output buffers (Daniel Veillard),
      + Adding new encoding function to deal with the new structures (Daniel Veillard),
      + Convert XPath to xmlBuf (Daniel Veillard),
      + Adding a new buf module for buffers (Daniel Veillard),
      + Memory error within SAX2 reuse common framework (Daniel Veillard),
      + Fix xmllint --xpath node initialization (Daniel Veillard)
      +
    • + +
    • Cleanups:
      + Various cleanups to avoid compiler warnings (Daniel Veillard),
      + Big space and tab cleanup (Daniel Veillard),
      + Followup to LibXML2 docs/examples cleanup patch (Daniel Veillard),
      + Second round of cleanups for LibXML2 docs/examples (Daniel Richard),
      + Remove all .cvsignore as they are not used anymore (Daniel Veillard),
      + Fix a Timsort function helper comment (Daniel Veillard),
      + Small cleanup for valgrind target (Daniel Veillard),
      + Patch for portability of latin characters in C files (Daniel Veillard),
      + Cleanup some of the parser code (Daniel Veillard),
      + Fix a variable name in comment (Daniel Veillard),
      + Regenerated testapi.c (Daniel Veillard),
      + Regenerating docs and API files (Daniel Veillard),
      + Small cleanup of unused variables in test (Daniel Veillard),
      + Expand .gitignore with more files (Daniel Veillard)
      +
    • +

    2.8.0: May 23 2012

      +
    • Features: + add lzma compression support (Anders F Bjorklund) +
    • + +
    • Documentation: + xmlcatalog: Add uri and delegateURI to possible add types in man page. (Ville Skyttä), + Update README.tests (Daniel Veillard), + URI handling code is not OOM resilient (Daniel Veillard), + Fix an error in comment (Daniel Veillard), + Fixed bug #617016 (Daniel Mustieles), + Fixed two typos in the README document (Daniel Neel), + add generated html files (Anders F Bjorklund), + Clarify the need to use xmlFreeNode after xmlUnlinkNode (Daniel Veillard), + Improve documentation a bit (Daniel Veillard), + Updated URL for lxml python bindings (Daniel Veillard) +
    • + +
    • Portability: + Restore code for Windows compilation (Daniel Veillard), + Remove git error message during configure (Christian Dywan), + xmllint: Build fix for endTimer if !defined(HAVE_GETTIMEOFDAY) (Patrick R. Gansterer), + remove a bashism in confgure.in (John Hein), + undef ERROR if already defined (Patrick R. Gansterer), + Fix library problems with mingw-w64 (Michael Cronenworth), + fix windows build. ifdef addition from bug 666491 makes no sense (Rob Richards), + prefer native threads on win32 (Sam Thursfield), + Allow to compile with Visual Studio 2010 (Thomas Lemm), + Fix mingw's snprintf configure check (Andoni Morales), + fixed a 64bit big endian issue (Marcus Meissner), + Fix portability failure if netdb.h lacks NO_ADDRESS (Daniel Veillard), + Fix windows build from lzma addition (Rob Richards), + autogen: Only check for libtoolize (Colin Walters), + Fix the Windows build files (Patrick von Reth), + 634846 Remove a linking option breaking Windows VC10 (Daniel Veillard), + 599241 fix an initialization problem on Win64 (Andrew W. Nosenko), + fix win build (Rob Richards) +
    • + +
    • Bug fixes: + Part for rand_r checking missing (Daniel Veillard), + Cleanup on randomization (Daniel Veillard), + Fix undefined reference in python module (Pacho Ramos), + Fix a race in xmlNewInputStream (Daniel Veillard), + Fix weird streaming RelaxNG errors (Noam), + Fix various bugs in new code raised by the API checking (Daniel Veillard), + Fix various problems with "make dist" (Daniel Veillard), + Fix a memory leak in the xzlib code (Daniel Veillard), + HTML parser error with <noscript> in the <head> (Denis Pauk), + XSD: optional element in complex type extension (Remi Gacogne), + Fix html serialization error and htmlSetMetaEncoding() (Daniel Veillard), + Fix a wrong return value in previous patch (Daniel Veillard), + Fix an uninitialized variable use (Daniel Veillard), + Fix a compilation problem with --minimum (Brandon Slack), + Remove redundant and ungarded include of resolv.h (Daniel Veillard), + xinclude with parse="text" does not use the entity loader (Shaun McCance), + Allow to parse 1 byte HTML files (Denis Pauk), + Patch that fixes the skipping of the HTML_PARSE_NOIMPLIED flag (Martin Schröder), + Avoid memory leak if xmlParserInputBufferCreateIO fails (Lin Yi-Li), + Prevent an infinite loop when dumping a node with encoding problems (Timothy Elliott), + xmlParseNodeInContext problems with an empty document (Tim Elliott), + HTML element position is not detected propperly (Pavel Andrejs), + Fix an off by one pointer access (Jüri Aedla), + Try to fix a problem with entities in SAX mode (Daniel Veillard), + Fix a crash with xmllint --path on empty results (Daniel Veillard), + Fixed bug #667946 (Daniel Mustieles), + Fix a logic error in Schemas Component Constraints (Ryan Sleevi), + Fix a wrong enum type use in Schemas Types (Nico Weber), + Fix SAX2 builder in case of undefined attributes namespace (Daniel Veillard), + Fix SAX2 builder in case of undefined element namespaces (Daniel Veillard), + fix reference to STDOUT_FILENO on MSVC (Tay Ray Chuan), + fix a pair of possible out of array char references (Daniel Veillard), + Fix an allocation error when copying entities (Daniel Veillard), + Make sure the parser returns when getting a Stop order (Chris Evans), + Fix some potential problems on reallocation failures(parser.c) (Xia Xinfeng), + Fix a schema type duration comparison overflow (Daniel Veillard), + Fix an unimplemented part in RNG value validation (Daniel Veillard), + Fix missing error status in XPath evaluation (Daniel Veillard), + Hardening of XPath evaluation (Daniel Veillard), + Fix an off by one error in encoding (Daniel Veillard), + Fix RELAX NG include bug #655288 (Shaun McCance), + Fix XSD validation bug #630130 (Toyoda Eizi), + Fix some potential problems on reallocation failures (Chris Evans), + __xmlRaiseError: fix use of the structured callback channel (Dmitry V. Levin), + __xmlRaiseError: fix the structured callback channel's data initialization (Dmitry V. Levin), + Fix memory corruption when xmlParseBalancedChunkMemoryInternal is called from xmlParseBalancedChunk (Rob Richards), + Small fix for previous commit (Daniel Veillard), + Fix a potential freeing error in XPath (Daniel Veillard), + Fix a potential memory access error (Daniel Veillard), + Reactivate the shared library versionning script (Daniel Veillard) +
    • + +
    • Improvements: + use mingw C99 compatible functions {v}snprintf instead those from MSVC runtime (Roumen Petrov), + New symbols added for the next release (Daniel Veillard), + xmlTextReader bails too quickly on error (Andy Lutomirski), + Use a hybrid allocation scheme in xmlNodeSetContent (Conrad Irwin), + Use buffers when constructing string node lists. (Conrad Irwin), + Add HTML parser support for HTML5 meta charset encoding declaration (Denis Pauk), + wrong message for double hyphen in comment XML error (Bryan Henderson), + Fix "make tst" to grab lzma lib too (Daniel Veillard), + Add "whereis" command to xmllint shell (Ryan), + Improve xmllint shell (Ryan), + add function xmlTextReaderRelaxNGValidateCtxt() (Noam Postavsky), + Add --system support to autogen.sh (Daniel Veillard), + Add hash randomization to hash and dict structures (Daniel Veillard), + included xzlib in dist (Anders F Bjorklund), + move xz/lzma helpers to separate included files (Anders F Bjorklund), + add generated devhelp files (Anders F Bjorklund), + add XML_WITH_LZMA to api (Anders F Bjorklund), + autogen.sh: Honor NOCONFIGURE environment variable (Colin Walters), + Improve the error report on undefined REFs (Daniel Veillard), + Add exception for new W3C PI xml-model (Daniel Veillard), + Add options to ignore the internal encoding (Daniel Veillard), + testapi: use the right type for the check (Stefan Kost), + various: handle return values of write calls (Stefan Kost), + testWriter: xmlTextWriterWriteFormatElement wants an int instead of a long int (Stefan Kost), + runxmlconf: update to latest testsuite version (Stefan Kost), + configure: add -Wno-long-long to CFLAGS (Stefan Kost), + configure: support silent automake rules if possible (Stefan Kost), + xmlmemory: add a cast as size_t has no portable printf modifier (Stefan Kost), + __xmlRaiseError: remove redundant schannel initialization (Dmitry V. Levin), + __xmlRaiseError: do cheap code check early (Dmitry V. Levin) +
    • + +
    • Cleanups: + Cleanups before 2.8.0-rc2 (Daniel Veillard), + Avoid an extra operation (Daniel Veillard), + Remove vestigial de-ANSI-fication support. (Javier Jardón), + autogen.sh: Fix typo (Javier Jardón), + Do not use unsigned but unsigned int (Daniel Veillard), + Remove two references to u_short (Daniel Veillard), + Fix -Wempty-body warning from clang (Nico Weber), + Cleanups of lzma support (Daniel Veillard), + Augment the list of ignored files (Daniel Veillard), + python: remove unused variable (Stefan Kost), + python: flag two unused args (Stefan Kost), + configure: acconfig.h is deprecated since autoconf-2.50 (Stefan Kost), + xpath: remove unused variable (Stefan Kost) +
    • +

    2.7.8: Nov 4 2010

      +
    • Features: + 480323 add code to plug in ICU converters by default (Giuseppe Iuculano), + Add xmlSaveOption XML_SAVE_WSNONSIG (Adam Spragg) +
    • +
    • Documentation: + Fix devhelp documentation installation (Mike Hommey), + Fix web site encoding problems (Daniel Veillard), + Fix a couple of typo in HTML parser error messages (Michael Day), + Forgot to update the news page for 0.7.7 (Daniel Veillard) +
    • +
    • Portability: + 607273 Fix python detection on MSys/Windows (LRN), + 614087 Fix Socket API usage to allow Windows64 compilation (Ozkan Sezer), + Fix compilation with Clang (Koop Mast), + Fix Win32 build (Rob Richards) +
    • +
    • Bug Fixes: + 595789 fix a remaining potential Solaris problem (Daniel Veillard), + 617468 fix progressive HTML parsing with style using "'" (Denis Pauk), + 616478 Fix xmllint shell write command (Gwenn Kahz), + 614005 Possible erroneous HTML parsing on unterminated script (Pierre Belzile), + 627987 Fix XSD IDC errors in imported schemas (Jim Panetta), + 629325 XPath rounding errors first cleanup (Phil Shafer), + 630140 fix iso995x encoding error (Daniel Veillard), + make sure htmlCtxtReset do reset the disableSAX field (Daniel Veillard), + Fix a change of semantic on XPath preceding and following axis (Daniel Veillard), + Fix a potential segfault due to weak symbols on pthreads (Mike Hommey), + Fix a leak in XPath compilation (Daniel Veillard), + Fix the semantic of XPath axis for namespace/attribute context nodes (Daniel Veillard), + Avoid a descriptor leak in catalog loading code (Carlo Bramini), + Fix a small bug in XPath evaluation code (Marius Wachtler), + Fix handling of XML-1.0 XML namespace declaration (Daniel Veillard), + Fix errors in XSD double validation check (Csaba Raduly), + Fix handling of apos in URIs (Daniel Veillard), + xmlTextReaderReadOuterXml should handle DTD (Rob Richards), + Autogen.sh needs to create m4 directory (Rob Richards) +
    • +
    • Improvements: + 606592 update language ID parser to RFC 5646 (Daniel Veillard), + Sort python generated stubs (Mike Hommey), + Add an HTML parser option to avoid a default doctype (Daniel Veillard) +
    • +
    • Cleanups: + 618831 don't ship generated files in git (Adrian Bunk), + Switch from the obsolete mkinstalldirs to AC_PROG_MKDIR_P (Adrian Bunk), + Various cleanups on encoding handling (Daniel Veillard), + Fix xmllint to use format=1 for default formatting (Adam Spragg), + Force _xmlSaveCtxt.format to be 0 or 1 (Adam Spragg), + Cleanup encoding pointer comparison (Nikolay Sivov), + Small code cleanup on previous patch (Daniel Veillard) +
    • +

    2.7.7: Mar 15 2010

      +
    • Improvements: + Adding a --xpath option to xmllint (Daniel Veillard), + Make HTML parser non-recursive (Eugene Pimenov) +
    • +
    • Portability: + relaxng.c: cast to allow compilation with sun studio 11 (Ben Walton), + Fix build failure on Sparc solaris (Roumen Petrov), + use autoreconf in autogen.sh (Daniel Veillard), + Fix build with mingw (Roumen Petrov), + Upgrade some of the configure and autogen (Daniel Veillard), + Fix relaxNG tests in runtest for Windows runtest.c: initialize ret (Rob Richards), + Fix a const warning in xmlNodeSetBase (Martin Trappel), + Fix python generator to not use deprecated xmllib (Daniel Veillard), + Update some automake files (Daniel Veillard), + 598785 Fix nanohttp on Windows (spadix) +
    • +
    • Bug Fixes: + libxml violates the zlib interface and crashes (Mark Adler), + Fix broken escape behaviour in regexp ranges (Daniel Veillard), + Fix missing win32 libraries in libxml-2.0.pc (Volker Grabsch), + Fix detection of python linker flags (Daniel Macks), + fix build error in libxml2/python (Paul Smith), + ChunkParser: Incorrect decoding of small xml files (Raul Hudea), + htmlCheckEncoding doesn't update input-end after shrink (Eugene Pimenov), + Fix a missing #ifdef (Daniel Veillard), + Fix encoding selection for xmlParseInNodeContext (Daniel Veillard), + xmlPreviousElementSibling mistake (François Delyon), + 608773 add a missing check in xmlGROW (Daniel Veillard), + Fix xmlParseInNodeContext for HTML content (Daniel Veillard), + Fix lost namespace when copying node * tree.c: reconcile namespace if not found (Rob Richards), + Fix some missing commas in HTML element lists (Eugene Pimenov), + Correct variable type to unsigned (Nikolay Sivov), + Recognize ID attribute in HTML without DOCTYPE (Daniel Veillard), + Fix memory leak in xmlXPathEvalExpression() (Martin), + Fix an init bug in global.c (Kai Henning), + Fix xmlNodeSetBase() comment (Daniel Veillard), + Fix broken escape behaviour in regexp ranges (Daniel Veillard), + Don't give default HTML boolean attribute values in parser (Daniel Veillard), + xmlCtxtResetLastError should reset ctxt-errNo (Daniel Veillard) +
    • +
    • Cleanups: + Cleanup a couple of weirdness in HTML parser (Eugene Pimenov) +
    • +

    2.7.6: Oct 6 2009

      +
    • Bug Fixes: + Restore thread support in default configuration (Andrew W. Nosenko), + URI with no path parsing problem (Daniel Veillard), + Minor patch for conditional defines in threads.c (Eric Zurcher) +
    • +

    2.7.5: Sep 24 2009

      +
    • Bug Fixes: + Restore behavior of --with-threads without argument (Andrew W. Nosenko), + Fix memory leak when doc is NULL (Rob Richards), + 595792 fixing a RelaxNG bug introduced in 2.7.4 (Daniel Veillard), + Fix a Relaxng bug raised by libvirt test suite (Daniel Veillard), + Fix a parsing problem with little data at startup (Daniel Veillard), + link python module with python library (Frederic Crozat), + 594874 Forgot an fclose in xmllint (Daniel Veillard) +
    • +
    • Cleanup: + Adding symbols.xml to EXTRA_DIST (Daniel Veillard) +
    • +

    2.7.4: Sep 10 2009

      +
    • Improvements: + Switch to GIT (GNOME), + Add symbol versioning to libxml2 shared libs (Daniel Veillard) +
    • +
    • Portability: + 593857 try to work around thread pbm MinGW 4.4 (Daniel Veillard), + 594250 rename ATTRIBUTE_ALLOC_SIZE to avoid clashes (Daniel Veillard), + Fix Windows build * relaxng.c: fix windows build (Rob Richards), + Fix the globals.h to use XMLPUBFUN (Paul Smith), + Problem with extern extern in header (Daniel Veillard), + Add -lnetwork for compiling on Haiku (Scott McCreary), + Runtest portability patch for Solaris (Tim Rice), + Small patch to accomodate the Haiku OS (Scott McCreary), + 584605 package VxWorks folder in the distribution (Daniel Veillard), + 574017 Realloc too expensive on most platform (Daniel Veillard), + Fix windows build (Rob Richards), + 545579 doesn't compile without schema support (Daniel Veillard), + xmllint use xmlGetNodePath when not compiled in (Daniel Veillard), + Try to avoid __imp__xmlFree link trouble on msys (Daniel Veillard), + Allow to select the threading system on Windows (LRN), + Fix Solaris binary links, cleanups (Daniel Veillard), + Bug 571059 – MSVC doesn't work with the bakefile (Intron), + fix ATTRIBUTE_PRINTF header clash (Belgabor and Mike Hommey), + fixes for Borland/CodeGear/Embarcadero compilers (Eric Zurcher) +
    • +
    • Documentation: + 544910 typo: "renciliateNs" (Leonid Evdokimov), + Add VxWorks to list of OSes (Daniel Veillard), + Regenerate the documentation and update for git (Daniel Veillard), + 560524 ¿ xmlTextReaderLocalName description (Daniel Veillard), + Added sponsoring by AOE media for the server (Daniel Veillard), + updated URLs for GNOME (Vincent Lefevre), + more warnings about xmlCleanupThreads and xmlCleanupParser (Daniel Veillard) +
    • +
    • Bug fixes: + 594514 memory leaks - duplicate initialization (MOD), + Wrong block opening in htmlNodeDumpOutputInternal (Daniel Veillard), + 492317 Fix Relax-NG validation problems (Daniel Veillard), + 558452 fight with reg test and error report (Daniel Veillard), + 558452 RNG compilation of optional multiple child (Daniel Veillard), + 579746 XSD validation not correct / nilable groups (Daniel Veillard), + 502960 provide namespace stack when parsing entity (Daniel Veillard), + 566012 part 2 fix regresion tests and push mode (Daniel Veillard), + 566012 autodetected encoding and encoding conflict (Daniel Veillard), + 584220 xpointer(/) and xinclude problems (Daniel Veillard), + 587663 Incorrect Attribute-Value Normalization (Daniel Veillard), + 444994 HTML chunked failure for attribute with <> (Daniel Veillard), + Fix end of buffer char being split in XML parser (Daniel Veillard), + Non ASCII character may be split at buffer end (Adiel Mittmann), + 440226 Add xmlXIncludeProcessTreeFlagsData API (Stefan Behnel), + 572129 speed up parsing of large HTML text nodes (Markus Kull), + Fix HTML parsing with 0 character in CDATA (Daniel Veillard), + Fix SetGenericErrorFunc and SetStructured clash (Wang Lam), + 566012 Incomplete EBCDIC parsing support (Martin Kogler), + 541335 HTML avoid creating 2 head or 2 body element (Daniel Veillard), + 541237 error correcting missing end tags in HTML (Daniel Veillard), + 583439 missing line numbers in push mode (Daniel Veillard), + 587867 xmllint --html --xmlout serializing as HTML (Daniel Veillard), + 559501 avoid select and use poll for nanohttp (Raphael Prevost), + 559410 - Regexp bug on (...)? constructs (Daniel Veillard), + Fix a small problem on previous HTML parser patch (Daniel Veillard), + 592430 - HTML parser runs into endless loop (Daniel Veillard), + 447899 potential double free in xmlFreeTextReader (Daniel Veillard), + 446613 small validation bug mixed content with NS (Daniel Veillard), + Fix the problem of revalidating a doc with RNG (Daniel Veillard), + Fix xmlKeepBlanksDefault to not break indent (Nick Wellnhofer), + 512131 refs from externalRef part need to be added (Daniel Veillard), + 512131 crash in xmlRelaxNGValidateFullElement (Daniel Veillard), + 588441 allow '.' in HTML Names even if invalid (Daniel Veillard), + 582913 Fix htmlSetMetaEncoding() to be nicer (Daniel Veillard), + 579317 Try to find the HTML encoding information (Daniel Veillard), + 575875 don't output charset=html (Daniel Veillard), + 571271 fix semantic of xsd:all with minOccurs=0 (Daniel Veillard), + 570702 fix a bug in regexp determinism checking (Daniel Veillard), + 567619 xmlValidateNotationUse missing param test (Daniel Veillard), + 574393 ¿ utf-8 filename magic for compressed files (Hans Breuer), + Fix a couple of problems in the parser (Daniel Veillard), + 585505 ¿ Document ids and refs populated by XSD (Wayne Jensen), + 582906 XSD validating multiple imports of the same schema (Jason Childs), + Bug 582887 ¿ problems validating complex schemas (Jason Childs), + Bug 579729 ¿ fix XSD schemas parsing crash (Miroslav Bajtos), + 576368 ¿ htmlChunkParser with special attributes (Jiri Netolicky), + Bug 565747 ¿ relax anyURI data character checking (Vincent Lefevre), + Preserve attributes of include start on tree copy (Petr Pajas), + Skip silently unrecognized XPointer schemes (Jakub Wilk), + Fix leak on SAX1, xmllint --sax1 option and debug (Daniel Veillard), + potential NULL dereference on non-glibc (Jim Meyering), + Fix an XSD validation crash (Daniel Veillard), + Fix a regression in streaming entities support (Daniel Veillard), + Fix a couple of ABI issues with C14N 1.1 (Aleksey Sanin), + Aleksey Sanin support for c14n 1.1 (Aleksey Sanin), + reader bug fix with entities (Daniel Veillard), + use options from current parser ctxt for external entities (Rob Richards), + 581612 use %s to printf strings (Christian Persch), + 584605 change the threading initialization sequence (Igor Novoseltsev), + 580705 keep line numbers in HTML parser (Aaron Patterson), + 581803 broken HTML table attributes init (Roland Steiner), + do not set error code in xmlNsWarn (Rob Richards), + 564217 fix structured error handling problems, + reuse options from current parser for entities (Rob Richards), + xmlXPathRegisterNs should not allow enpty prefixes (Daniel Veillard), + add a missing check in xmlAddSibling (Kris Breuker), + avoid leaks on errors (Jinmei Tatuya) +
    • +
    • Cleanup: + Chasing dead assignments reported by clang-scan (Daniel Veillard), + A few more safety cleanup raised by scan (Daniel Veillard), + Fixing assorted potential problems raised by scan (Daniel Veillard), + Potential uninitialized arguments raised by scan (Daniel Veillard), + Fix a bunch of scan 'dead increments' and cleanup (Daniel Veillard), + Remove a pedantic warning (Daniel Veillard), + 555833 always use rm -f in uninstall-local (Daniel Veillard), + 542394 xmlRegisterOutputCallbacks MAX_INPUT_CALLBACK (Daniel Veillard), + Autoregenerate libxml2.syms automated checkings (Daniel Veillard), + Make xmlRecoverDoc const (Martin Trappel) (Daniel Veillard), + Both args of xmlStrcasestr are const (Daniel Veillard), + hide the nbParse* variables used for debugging (Mike Hommey), + 570806 changed include of config.h (William M. Brack), + cleanups and error reports when xmlTextWriterVSprintf fails (Jinmei Tatuya) +
    • +

    2.7.3: Jan 18 2009

      +
    • Build fix: fix build when HTML support is not included.
    • +
    • Bug fixes: avoid memory overflow in gigantic text nodes, + indentation problem on the writed (Rob Richards), + xmlAddChildList pointer problem (Rob Richards and Kevin Milburn), + xmlAddChild problem with attribute (Rob Richards and Kris Breuker), + avoid a memory leak in an edge case (Daniel Zimmermann), + deallocate some pthread data (Alex Ott).
    • +
    • Improvements: configure option to avoid rebuilding docs (Adrian Bunk), + limit text nodes to 10MB max by default, add element traversal + APIs, add a parser option to enable pre 2.7 SAX behavior (Rob Richards), + add gcc malloc checking (Marcus Meissner), add gcc printf like functions + parameters checking (Marcus Meissner).
    • +

    2.7.2: Oct 3 2008

      +
    • Portability fix: fix solaris compilation problem, fix compilation + if XPath is not configured in
    • +
    • Bug fixes: nasty entity bug introduced in 2.7.0, restore old behaviour + when saving an HTML doc with an xml dump function, HTML UTF-8 parsing + bug, fix reader custom error handlers (Riccardo Scussat) +
    • Improvement: xmlSave options for more flexibility to save as + XML/HTML/XHTML, handle leading BOM in HTML documents
    • +

    2.7.1: Sep 1 2008

      +
    • Portability fix: Borland C fix (Moritz Both)
    • +
    • Bug fixes: python serialization wrappers, XPath QName corner + case handking and leaks (Martin)
    • +
    • Improvement: extend the xmlSave to handle HTML documents and trees
    • +
    • Cleanup: python serialization wrappers
    • +

    2.7.0: Aug 30 2008

      +
    • Documentation: switch ChangeLog to UTF-8, improve mutithreads and + xmlParserCleanup docs
    • +
    • Portability fixes: Older Win32 platforms (Rob Richards), MSVC + porting fix (Rob Richards), Mac OS X regression tests (Sven Herzberg), + non GNUCC builds (Rob Richards), compilation on Haiku (Andreas Färber) +
    • +
    • Bug fixes: various realloc problems (Ashwin), potential double-free + (Ashwin), regexp crash, icrash with invalid whitespace facets (Rob + Richards), pattern fix when streaming (William Brack), various XML + parsing and validation fixes based on the W3C regression tests, reader + tree skipping function fix (Ashwin), Schemas regexps escaping fix + (Volker Grabsch), handling of entity push errors (Ashwin), fix a slowdown + when encoder cant serialize characters on output
    • +
    • Code cleanup: compilation fix without the reader, without the output + (Robert Schwebel), python whitespace (Martin), many space/tabs cleanups, + serious cleanup of the entity handling code
    • +
    • Improvement: switch parser to XML-1.0 5th edition, add parsing flags + for old versions, switch URI parsing to RFC 3986, + add xmlSchemaValidCtxtGetParserCtxt (Holger Kaelberer), + new hashing functions for dictionnaries (based on Stefan Behnel work), + improve handling of misplaced html/head/body in HTML parser, better + regression test tools and code coverage display, better algorithms + to detect various versions of the billion laughts attacks, make + arbitrary parser limits avoidable as a parser option
    • +

    2.6.32: Apr 8 2008

      +
    • Documentation: returning heap memory to kernel (Wolfram Sang), + trying to clarify xmlCleanupParser() use, xmlXPathContext improvement + (Jack Jansen), improve the *Recover* functions documentation, + XmlNodeType doc link fix (Martijn Arts)
    • +
    • Bug fixes: internal subset memory leak (Ashwin), avoid problem with + paths starting with // (Petr Sumbera), streaming XSD validation callback + patches (Ashwin), fix redirection on port other than 80 (William Brack), + SAX2 leak (Ashwin), XInclude fragment of own document (Chris Ryan), + regexp bug with '.' (Andrew Tosh), flush the writer at the end of the + document (Alfred Mickautsch), output I/O bug fix (William Brack), + writer CDATA output after a text node (Alex Khesin), UTF-16 encoding + detection (William Brack), fix handling of empty CDATA nodes for Safari + team, python binding problem with namespace nodes, improve HTML parsing + (Arnold Hendriks), regexp automata build bug, memory leak fix (Vasily + Chekalkin), XSD test crash, weird system parameter entity parsing problem, + allow save to file:///X:/ windows paths, various attribute normalisation + problems, externalSubsetSplit fix (Ashwin), attribute redefinition in + the DTD (Ashwin), fix in char ref parsing check (Alex Khesin), many + out of memory handling fixes (Ashwin), XPath out of memory handling fixes + (Alvaro Herrera), various realloc problems (Ashwin), UCS4 encoding + conversion buffer size (Christian Fruth), problems with EatName + functions on memory errors, BOM handling in external parsed entities + (Mark Rowe)
    • +
    • Code cleanup: fix build under VS 2008 (David Wimsey), remove useless + mutex in xmlDict (Florent Guilian), Mingw32 compilation fix (Carlo + Bramini), Win and MacOS EOL cleanups (Florent Guiliani), iconv need + a const detection (Roumen Petrov), simplify xmlSetProp (Julien Charbon), + cross compilation fixes for Mingw (Roumen Petrov), SCO Openserver build + fix (Florent Guiliani), iconv uses const on Win32 (Rob Richards), + duplicate code removal (Ashwin), missing malloc test and error reports + (Ashwin), VMS makefile fix (Tycho Hilhorst)
    • +
    • improvements: better plug of schematron in the normal error handling + (Tobias Minich)
    • +

    2.6.31: Jan 11 2008

      +
    • Security fix: missing of checks in UTF-8 parsing
    • +
    • Bug fixes: regexp bug, dump attribute from XHTML document, fix + xmlFree(NULL) to not crash in debug mode, Schematron parsing crash + (Rob Richards), global lock free on Windows (Marc-Antoine Ruel), + XSD crash due to double free (Rob Richards), indentation fix in + xmlTextWriterFullEndElement (Felipe Pena), error in attribute type + parsing if attribute redeclared, avoid crash in hash list scanner if + deleting elements, column counter bug fix (Christian Schmidt), + HTML embed element saving fix (Stefan Behnel), avoid -L/usr/lib + output from xml2-config (Fred Crozat), avoid an xmllint crash + (Stefan Kost), don't stop HTML parsing on out of range chars. +
    • +
    • Code cleanup: fix open() call third argument, regexp cut'n paste + copy error, unused variable in __xmlGlobalInitMutexLock (Hannes Eder), + some make distcheck realted fixes (John Carr)
    • +
    • Improvements: HTTP Header: includes port number (William Brack), + testURI --debug option,
    • +

    2.6.30: Aug 23 2007

      +
    • Portability: Solaris crash on error handling, windows path fixes + (Roland Schwarz and Rob Richards), mingw build (Roland Schwarz)
    • +
    • Bugfixes: xmlXPathNodeSetSort problem (William Brack), leak when + reusing a writer for a new document (Dodji Seketeli), Schemas + xsi:nil handling patch (Frank Gross), relative URI build problem + (Patrik Fimml), crash in xmlDocFormatDump, invalid char in comment + detection bug, fix disparity with xmlSAXUserParseMemory, automata + generation for complex regexp counts problems, Schemas IDC import + problems (Frank Gross), xpath predicate evailation error handling + (William Brack)
    • +

    2.6.29: Jun 12 2007

      +
    • Portability: patches from Andreas Stricke for WinCEi, + fix compilation warnings (William Brack), avoid warnings on Apple OS/X + (Wendy Doyle and Mark Rowe), Windows compilation and threading + improvements (Rob Richards), compilation against old Python versions, + new GNU tar changes (Ryan Hill)
    • +
    • Documentation: xmlURIUnescapeString comment,
    • +
    • Bugfixes: xmlBufferAdd problem (Richard Jones), 'make valgrind' + flag fix (Richard Jones), regexp interpretation of \, + htmlCreateDocParserCtxt (Jean-Daniel Dupas), configure.in + typo (Bjorn Reese), entity content failure, xmlListAppend() fix + (Georges-André Silber), XPath number serialization (William Brack), + nanohttp gzipped stream fix (William Brack and Alex Cornejo), + xmlCharEncFirstLine typo (Mark Rowe), uri bug (François Delyon), + XPath string value of PI nodes (William Brack), XPath node set + sorting bugs (William Brack), avoid outputting namespace decl + dups in the writer (Rob Richards), xmlCtxtReset bug, UTF-8 encoding + error handling, recustion on next in catalogs, fix a Relax-NG crash, + workaround wrong file: URIs, htmlNodeDumpFormatOutput on attributes, + invalid character in attribute detection bug, big comments before + internal subset streaming bug, HTML parsing of attributes with : in + the name, IDness of name in HTML (Dagfinn I. MannsÃ¥ker)
    • +
    • Improvement: keep URI query parts in raw form (Richard Jones), + embed tag support in HTML (Michael Day)
    • +

    2.6.28: Apr 17 2007

      +
    • Documentation: comment fixes (Markus Keim), xpath comments fixes too + (James Dennett)
    • +
    • Bug fixes: XPath bug (William Brack), HTML parser autoclose stack usage + (Usamah Malik), various regexp bug fixes (DV and William), path conversion + on Windows (Igor Zlatkovic), htmlCtxtReset fix (Michael Day), XPath + principal node of axis bug, HTML serialization of some codepoint + (Steven Rainwater), user data propagation in XInclude (Michael Day), + standalone and XML decl detection (Michael Day), Python id ouptut + for some id, fix the big python string memory leak, URI parsing fixes + (Stéphane Bidoul and William), long comments parsing bug (William), + concurrent threads initialization (Ted Phelps), invalid char + in text XInclude (William), XPath memory leak (William), tab in + python problems (Andreas Hanke), XPath node comparison error + (Oleg Paraschenko), cleanup patch for reader (Julien Reichel), + XML Schemas attribute group (William), HTML parsing problem (William), + fix char 0x2d in regexps (William), regexp quantifier range with + min occurs of 0 (William), HTML script/style parsing (Mike Day)
    • +
    • Improvement: make xmlTextReaderSetup() public
    • +
    • Compilation and postability: fix a missing include problem (William), + __ss_familly on AIX again (Björn Wiberg), compilation without zlib + (Michael Day), catalog patch for Win32 (Christian Ehrlicher), + Windows CE fixes (Andreas Stricke)
    • +
    • Various CVS to SVN infrastructure changes
    • +

    2.6.27: Oct 25 2006

      +
    • Portability fixes: file names on windows (Roland Schwingel, + Emelyanov Alexey), windows compile fixup (Rob Richards), + AIX iconv() is apparently case sensitive
    • +
    • improvements: Python XPath types mapping (Nic Ferrier), XPath optimization + (Kasimier), add xmlXPathCompiledEvalToBoolean (Kasimier), Python node + equality and comparison (Andreas Pakulat), xmlXPathCollectAndTest + improvememt (Kasimier), expose if library was compiled with zlib + support (Andrew Nosenko), cache for xmlSchemaIDCMatcher structs + (Kasimier), xmlTextConcat should work with comments and PIs (Rob + Richards), export htmlNewParserCtxt needed by Michael Day, refactoring + of catalog entity loaders (Michael Day), add XPointer support to + python bindings (Ross Reedstrom, Brian West and Stefan Anca), + try to sort out most file path to URI conversions and xmlPathToUri, + add --html --memory case to xmllint
    • +
    • building fix: fix --with-minimum (Felipe Contreras), VMS fix, + const'ification of HTML parser structures (Matthias Clasen), + portability fix (Emelyanov Alexey), wget autodetection (Peter + Breitenlohner), remove the build path recorded in the python + shared module, separate library flags for shared and static builds + (Mikhail Zabaluev), fix --with-minimum --with-sax1 builds, fix + --with-minimum --with-schemas builds
    • +
    • bug fix: xmlGetNodePath fix (Kasimier), xmlDOMWrapAdoptNode and + attribute (Kasimier), crash when using the recover mode, + xmlXPathEvalExpr problem (Kasimier), xmlXPathCompExprAdd bug (Kasimier), + missing destry in xmlFreeRMutex (Andrew Nosenko), XML Schemas fixes + (Kasimier), warning on entities processing, XHTML script and style + serialization (Kasimier), python generator for long types, bug in + xmlSchemaClearValidCtxt (Bertrand Fritsch), xmlSchemaXPathEvaluate + allocation bug (Marton Illes), error message end of line (Rob Richards), + fix attribute serialization in writer (Rob Richards), PHP4 DTD validation + crasher, parser safety patch (Ben Darnell), _private context propagation + when parsing entities (with Michael Day), fix entities behaviour when + using SAX, URI to file path fix (Mikhail Zabaluev), disapearing validity + context, arg error in SAX callback (Mike Hommey), fix mixed-content + autodetect when using --noblanks, fix xmlIOParseDTD error handling, + fix bug in xmlSplitQName on special Names, fix Relax-NG element content + validation bug, fix xmlReconciliateNs bug, fix potential attribute + XML parsing bug, fix line/column accounting in XML parser, chunking bug + in the HTML parser on script, try to detect obviously buggy HTML + meta encoding indications, bugs with encoding BOM and xmlSaveDoc, + HTML entities in attributes parsing, HTML minimized attribute values, + htmlReadDoc and htmlReadIO were broken, error handling bug in + xmlXPathEvalExpression (Olaf Walkowiak), fix a problem in + htmlCtxtUseOptions, xmlNewInputFromFile could leak (Marius Konitzer), + bug on misformed SSD regexps (Christopher Boumenot) +
    • +
    • documentation: warning about XML_PARSE_COMPACT (Kasimier Buchcik), + fix xmlXPathCastToString documentation, improve man pages for + xmllitn and xmlcatalog (Daniel Leidert), fixed comments of a few + functions
    • +

    2.6.26: Jun 6 2006

      +
    • portability fixes: Python detection (Joseph Sacco), compilation + error(William Brack and Graham Bennett), LynxOS patch (Olli Savia)
    • +
    • bug fixes: encoding buffer problem, mix of code and data in + xmlIO.c(Kjartan Maraas), entities in XSD validation (Kasimier Buchcik), + variousXSD validation fixes (Kasimier), memory leak in pattern (Rob + Richards andKasimier), attribute with colon in name (Rob Richards), XPath + leak inerror reporting (Aleksey Sanin), XInclude text include of + selfdocument.
    • +
    • improvements: Xpath optimizations (Kasimier), XPath object + cache(Kasimier)
    • +

    2.6.25: Jun 6 2006:

    Do not use or package 2.6.25

    2.6.24: Apr 28 2006

      +
    • Portability fixes: configure on Windows, testapi compile on windows + (Kasimier Buchcik, venkat naidu), Borland C++ 6 compile (Eric Zurcher), + HP-UX compiler workaround (Rick Jones), xml2-config bugfix, gcc-4.1 + cleanups, Python detection scheme (Joseph Sacco), UTF-8 file paths on + Windows (Roland Schwingel). +
    • +
    • Improvements: xmlDOMWrapReconcileNamespaces xmlDOMWrapCloneNode (Kasimier + Buchcik), XML catalog debugging (Rick Jones), update to Unicode 4.01.
    • +
    • Bug fixes: xmlParseChunk() problem in 2.6.23, xmlParseInNodeContext() + on HTML docs, URI behaviour on Windows (Rob Richards), comment streaming + bug, xmlParseComment (with William Brack), regexp bug fixes (DV & + Youri Golovanov), xmlGetNodePath on text/CDATA (Kasimier), + one Relax-NG interleave bug, xmllint --path and --valid, + XSD bugfixes (Kasimier), remove debug + left in Python bindings (Nic Ferrier), xmlCatalogAdd bug (Martin Cole), + xmlSetProp fixes (Rob Richards), HTML IDness (Rob Richards), a large + number of cleanups and small fixes based on Coverity reports, bug + in character ranges, Unicode tables const (Aivars Kalvans), schemas + fix (Stefan Kost), xmlRelaxNGParse error deallocation, + xmlSchemaAddSchemaDoc error deallocation, error handling on unallowed + code point, ixmllint --nonet to never reach the net (Gary Coady), + line break in writer after end PI (Jason Viers).
    • +
    • Documentation: man pages updates and cleanups (Daniel Leidert).
    • +
    • New features: Relax NG structure error handlers.
    • +

    2.6.23: Jan 5 2006

      +
    • portability fixes: Windows (Rob Richards), getaddrinfo on Windows + (Kolja Nowak, Rob Richards), icc warnings (Kjartan Maraas), + --with-minimum compilation fixes (William Brack), error case handling fix + on Solaris (Albert Chin), don't use 'list' as parameter name reported by + Samuel Diaz Garcia, more old Unices portability fixes (Albert Chin), + MinGW compilation (Mark Junker), HP-UX compiler warnings (Rick + Jones),
    • +
    • code cleanup: xmlReportError (Adrian Mouat), remove xmlBufferClose + (Geert Jansen), unreachable code (Oleksandr Kononenko), refactoring + parsing code (Bjorn Reese)
    • +
    • bug fixes: xmlBuildRelativeURI and empty path (William Brack), + combinatory explosion and performances in regexp code, leak in + xmlTextReaderReadString(), xmlStringLenDecodeEntities problem (Massimo + Morara), Identity Constraints bugs and a segfault (Kasimier Buchcik), + XPath pattern based evaluation bugs (DV & Kasimier), + xmlSchemaContentModelDump() memory leak (Kasimier), potential leak in + xmlSchemaCheckCSelectorXPath(), xmlTextWriterVSprintf() misuse of + vsnprintf (William Brack), XHTML serialization fix (Rob Richards), CRLF + split problem (William), issues with non-namespaced attributes in + xmlAddChild() xmlAddNextSibling() and xmlAddPrevSibling() (Rob Richards), + HTML parsing of script, Python must not output to stdout (Nic Ferrier), + exclusive C14N namespace visibility (Aleksey Sanin), XSD dataype + totalDigits bug (Kasimier Buchcik), error handling when writing to an + xmlBuffer (Rob Richards), runtest schemas error not reported (Hisashi + Fujinaka), signed/unsigned problem in date/time code (Albert Chin), fix + XSI driven XSD validation (Kasimier), parsing of xs:decimal (Kasimier), + fix DTD writer output (Rob Richards), leak in xmlTextReaderReadInnerXml + (Gary Coady), regexp bug affecting schemas (Kasimier), configuration of + runtime debugging (Kasimier), xmlNodeBufGetContent bug on entity refs + (Oleksandr Kononenko), xmlRegExecPushString2 bug (Sreeni Nair), + compilation and build fixes (Michael Day), removed dependancies on + xmlSchemaValidError (Kasimier), bug with <xml:foo/>, more XPath + pattern based evaluation fixes (Kasimier)
    • +
    • improvements: XSD Schemas redefinitions/restrictions (Kasimier + Buchcik), node copy checks and fix for attribute (Rob Richards), counted + transition bug in regexps, ctxt->standalone = -2 to indicate no + standalone attribute was found, add xmlSchemaSetParserStructuredErrors() + (Kasimier Buchcik), add xmlTextReaderSchemaValidateCtxt() to API + (Kasimier), handle gzipped HTTP resources (Gary Coady), add + htmlDocDumpMemoryFormat. (Rob Richards),
    • +
    • documentation: typo (Michael Day), libxml man page (Albert Chin), save + function to XML buffer (Geert Jansen), small doc fix (Aron Stansvik),
    • +

    2.6.22: Sep 12 2005

      +
    • build fixes: compile without schematron (Stéphane Bidoul)
    • +
    • bug fixes: xmlDebugDumpNode on namespace node (Oleg Paraschenko)i, + CDATA push parser bug, xmlElemDump problem with XHTML1 doc, + XML_FEATURE_xxx clash with expat headers renamed XML_WITH_xxx, fix some + output formatting for meta element (Rob Richards), script and style + XHTML1 serialization (David Madore), Attribute derivation fixups in XSD + (Kasimier Buchcik), better IDC error reports (Kasimier Buchcik)
    • +
    • improvements: add XML_SAVE_NO_EMPTY xmlSaveOption (Rob Richards), add + XML_SAVE_NO_XHTML xmlSaveOption, XML Schemas improvements preparing for + derive (Kasimier Buchcik).
    • +
    • documentation: generation of gtk-doc like docs, integration with + devhelp.
    • +

    2.6.21: Sep 4 2005

      +
    • build fixes: Cygwin portability fixes (Gerrit P. Haase), calling + convention problems on Windows (Marcus Boerger), cleanups based on Linus' + sparse tool, update of win32/configure.js (Rob Richards), remove warnings + on Windows(Marcus Boerger), compilation without SAX1, detection of the + Python binary, use $GCC inestad of $CC = 'gcc' (Andrew W. Nosenko), + compilation/link with threads and old gcc, compile problem by C370 on + Z/OS,
    • +
    • bug fixes: http_proxy environments (Peter Breitenlohner), HTML UTF-8 + bug (Jiri Netolicky), XPath NaN compare bug (William Brack), + htmlParseScript potential bug, Schemas regexp handling of spaces, Base64 + Schemas comparisons NIST passes, automata build error xsd:all, + xmlGetNodePath for namespaced attributes (Alexander Pohoyda), xmlSchemas + foreign namespaces handling, XML Schemas facet comparison (Kupriyanov + Anatolij), xmlSchemaPSimpleTypeErr error report (Kasimier Buchcik), xml: + namespace ahndling in Schemas (Kasimier), empty model group in Schemas + (Kasimier), wilcard in Schemas (Kasimier), URI composition (William), + xs:anyType in Schemas (Kasimier), Python resolver emmitting error + messages directly, Python xmlAttr.parent (Jakub Piotr Clapa), trying to + fix the file path/URI conversion, xmlTextReaderGetAttribute fix (Rob + Richards), xmlSchemaFreeAnnot memleak (Kasimier), HTML UTF-8 + serialization, streaming XPath, Schemas determinism detection problem, + XInclude bug, Schemas context type (Dean Hill), validation fix (Derek + Poon), xmlTextReaderGetAttribute[Ns] namespaces (Rob Richards), Schemas + type fix (Kuba Nowakowski), UTF-8 parser bug, error in encoding handling, + xmlGetLineNo fixes, bug on entities handling, entity name extraction in + error handling with XInclude, text nodes in HTML body tags (Gary Coady), + xml:id and IDness at the treee level fixes, XPath streaming patterns + bugs.
    • +
    • improvements: structured interfaces for schemas and RNG error reports + (Marcus Boerger), optimization of the char data inner loop parsing + (thanks to Behdad Esfahbod for the idea), schematron validation though + not finished yet, xmlSaveOption to omit XML declaration, keyref match + error reports (Kasimier), formal expression handling code not plugged + yet, more lax mode for the HTML parser, parser XML_PARSE_COMPACT option + for text nodes allocation.
    • +
    • documentation: xmllint man page had --nonet duplicated
    • +

    2.6.20: Jul 10 2005

      +
    • build fixes: Windows build (Rob Richards), Mingw compilation (Igor + Zlatkovic), Windows Makefile (Igor), gcc warnings (Kasimier and + andriy@google.com), use gcc weak references to pthread to avoid the + pthread dependancy on Linux, compilation problem (Steve Nairn), compiling + of subset (Morten Welinder), IPv6/ss_family compilation (William Brack), + compilation when disabling parts of the library, standalone test + distribution.
    • +
    • bug fixes: bug in lang(), memory cleanup on errors (William Brack), + HTTP query strings (Aron Stansvik), memory leak in DTD (William), integer + overflow in XPath (William), nanoftp buffer size, pattern "." apth fixup + (Kasimier), leak in tree reported by Malcolm Rowe, replaceNode patch + (Brent Hendricks), CDATA with NULL content (Mark Vakoc), xml:base fixup + on XInclude (William), pattern fixes (William), attribute bug in + exclusive c14n (Aleksey Sanin), xml:space and xml:lang with SAX2 (Rob + Richards), namespace trouble in complex parsing (Malcolm Rowe), XSD type + QNames fixes (Kasimier), XPath streaming fixups (William), RelaxNG bug + (Rob Richards), Schemas for Schemas fixes (Kasimier), removal of ID (Rob + Richards), a small RelaxNG leak, HTML parsing in push mode bug (James + Bursa), failure to detect UTF-8 parsing bugs in CDATA sections, + areBlanks() heuristic failure, duplicate attributes in DTD bug + (William).
    • +
    • improvements: lot of work on Schemas by Kasimier Buchcik both on + conformance and streaming, Schemas validation messages (Kasimier Buchcik, + Matthew Burgess), namespace removal at the python level (Brent + Hendricks), Update to new Schemas regression tests from W3C/Nist + (Kasimier), xmlSchemaValidateFile() (Kasimier), implementation of + xmlTextReaderReadInnerXml and xmlTextReaderReadOuterXml (James Wert), + standalone test framework and programs, new DOM import APIs + xmlDOMWrapReconcileNamespaces() xmlDOMWrapAdoptNode() and + xmlDOMWrapRemoveNode(), extension of xmllint capabilities for SAX and + Schemas regression tests, xmlStopParser() available in pull mode too, + ienhancement to xmllint --shell namespaces support, Windows port of the + standalone testing tools (Kasimier and William), + xmlSchemaValidateStream() xmlSchemaSAXPlug() and xmlSchemaSAXUnplug() SAX + Schemas APIs, Schemas xmlReader support.
    • +

    2.6.19: Apr 02 2005

      +
    • build fixes: drop .la from RPMs, --with-minimum build fix (William + Brack), use XML_SOCKLEN_T instead of SOCKLEN_T because it breaks with AIX + 5.3 compiler, fixed elfgcchack.h generation and PLT reduction code on + Linux/ELF/gcc4
    • +
    • bug fixes: schemas type decimal fixups (William Brack), xmmlint return + code (Gerry Murphy), small schemas fixes (Matthew Burgess and GUY + Fabrice), workaround "DAV:" namespace brokeness in c14n (Aleksey Sanin), + segfault in Schemas (Kasimier Buchcik), Schemas attribute validation + (Kasimier), Prop related functions and xmlNewNodeEatName (Rob Richards), + HTML serialization of name attribute on a elements, Python error handlers + leaks and improvement (Brent Hendricks), uninitialized variable in + encoding code, Relax-NG validation bug, potential crash if + gnorableWhitespace is NULL, xmlSAXParseDoc and xmlParseDoc signatures, + switched back to assuming UTF-8 in case no encoding is given at + serialization time
    • +
    • improvements: lot of work on Schemas by Kasimier Buchcik on facets + checking and also mixed handling.
    • +
    • +

    2.6.18: Mar 13 2005

      +
    • build fixes: warnings (Peter Breitenlohner), testapi.c generation, + Bakefile support (Francesco Montorsi), Windows compilation (Joel Reed), + some gcc4 fixes, HP-UX portability fixes (Rick Jones).
    • +
    • bug fixes: xmlSchemaElementDump namespace (Kasimier Buchcik), push and + xmlreader stopping on non-fatal errors, thread support for dictionnaries + reference counting (Gary Coady), internal subset and push problem, URL + saved in xmlCopyDoc, various schemas bug fixes (Kasimier), Python paths + fixup (Stephane Bidoul), xmlGetNodePath and namespaces, xmlSetNsProp fix + (Mike Hommey), warning should not count as error (William Brack), + xmlCreatePushParser empty chunk, XInclude parser flags (William), cleanup + FTP and HTTP code to reuse the uri parsing and IPv6 (William), + xmlTextWriterStartAttributeNS fix (Rob Richards), XMLLINT_INDENT being + empty (William), xmlWriter bugs (Rob Richards), multithreading on Windows + (Rich Salz), xmlSearchNsByHref fix (Kasimier), Python binding leak (Brent + Hendricks), aliasing bug exposed by gcc4 on s390, xmlTextReaderNext bug + (Rob Richards), Schemas decimal type fixes (William Brack), + xmlByteConsumed static buffer (Ben Maurer).
    • +
    • improvement: speedup parsing comments and DTDs, dictionnary support for + hash tables, Schemas Identity constraints (Kasimier), streaming XPath + subset, xmlTextReaderReadString added (Bjorn Reese), Schemas canonical + values handling (Kasimier), add xmlTextReaderByteConsumed (Aron + Stansvik),
    • +
    • Documentation: Wiki support (Joel Reed)
    • +

    2.6.17: Jan 16 2005

      +
    • build fixes: Windows, warnings removal (William Brack), + maintainer-clean dependency(William), build in a different directory + (William), fixing --with-minimum configure build (William), BeOS build + (Marcin Konicki), Python-2.4 detection (William), compilation on AIX (Dan + McNichol)
    • +
    • bug fixes: xmlTextReaderHasAttributes (Rob Richards), xmlCtxtReadFile() + to use the catalog(s), loop on output (William Brack), XPath memory leak, + ID deallocation problem (Steve Shepard), debugDumpNode crash (William), + warning not using error callback (William), xmlStopParser bug (William), + UTF-16 with BOM on DTDs (William), namespace bug on empty elements in + push mode (Rob Richards), line and col computations fixups (Aleksey + Sanin), xmlURIEscape fix (William), xmlXPathErr on bad range (William), + patterns with too many steps, bug in RNG choice optimization, line number + sometimes missing.
    • +
    • improvements: XSD Schemas (Kasimier Buchcik), python generator + (William), xmlUTF8Strpos speedup (William), unicode Python strings + (William), XSD error reports (Kasimier Buchcik), Python __str__ call + serialize().
    • +
    • new APIs: added xmlDictExists(), GetLineNumber and GetColumnNumber for + the xmlReader (Aleksey Sanin), Dynamic Shared Libraries APIs (mostly Joel + Reed), error extraction API from regexps, new XMLSave option for format + (Phil Shafer)
    • +
    • documentation: site improvement (John Fleck), FAQ entries + (William).
    • +

    2.6.16: Nov 10 2004

      +
    • general hardening and bug fixing crossing all the API based on new + automated regression testing
    • +
    • build fix: IPv6 build and test on AIX (Dodji Seketeli)
    • +
    • bug fixes: problem with XML::Libxml reported by Petr Pajas, encoding + conversion functions return values, UTF-8 bug affecting XPath reported by + Markus Bertheau, catalog problem with NULL entries (William Brack)
    • +
    • documentation: fix to xmllint man page, some API function descritpion + were updated.
    • +
    • improvements: DTD validation APIs provided at the Python level (Brent + Hendricks)
    • +

    2.6.15: Oct 27 2004

      +
    • security fixes on the nanoftp and nanohttp modules
    • +
    • build fixes: xmllint detection bug in configure, building outside the + source tree (Thomas Fitzsimmons)
    • +
    • bug fixes: HTML parser on broken ASCII chars in names (William), Python + paths (Malcolm Tredinnick), xmlHasNsProp and default namespace (William), + saving to python file objects (Malcolm Tredinnick), DTD lookup fix + (Malcolm), save back <group> in catalogs (William), tree build + fixes (DV and Rob Richards), Schemas memory bug, structured error handler + on Python 64bits, thread local memory deallocation, memory leak reported + by Volker Roth, xmlValidateDtd in the presence of an internal subset, + entities and _private problem (William), xmlBuildRelativeURI error + (William).
    • +
    • improvements: better XInclude error reports (William), tree debugging + module and tests, convenience functions at the Reader API (Graham + Bennett), add support for PI in the HTML parser.
    • +

    2.6.14: Sep 29 2004

      +
    • build fixes: configure paths for xmllint and xsltproc, compilation + without HTML parser, compilation warning cleanups (William Brack & + Malcolm Tredinnick), VMS makefile update (Craig Berry),
    • +
    • bug fixes: xmlGetUTF8Char (William Brack), QName properties (Kasimier + Buchcik), XInclude testing, Notation serialization, UTF8ToISO8859x + transcoding (Mark Itzcovitz), lots of XML Schemas cleanup and fixes + (Kasimier), ChangeLog cleanup (Stepan Kasal), memory fixes (Mark Vakoc), + handling of failed realloc(), out of bound array adressing in Schemas + date handling, Python space/tabs cleanups (Malcolm Tredinnick), NMTOKENS + E20 validation fix (Malcolm),
    • +
    • improvements: added W3C XML Schemas testsuite (Kasimier Buchcik), add + xmlSchemaValidateOneElement (Kasimier), Python exception hierearchy + (Malcolm Tredinnick), Python libxml2 driver improvement (Malcolm + Tredinnick), Schemas support for xsi:schemaLocation, + xsi:noNamespaceSchemaLocation, xsi:type (Kasimier Buchcik)
    • +

    2.6.13: Aug 31 2004

      +
    • build fixes: Windows and zlib (Igor Zlatkovic), -O flag with gcc, + Solaris compiler warning, fixing RPM BuildRequires,
    • +
    • fixes: DTD loading on Windows (Igor), Schemas error reports APIs + (Kasimier Buchcik), Schemas validation crash, xmlCheckUTF8 (William Brack + and Julius Mittenzwei), Schemas facet check (Kasimier), default namespace + problem (William), Schemas hexbinary empty values, encoding error could + genrate a serialization loop.
    • +
    • Improvements: Schemas validity improvements (Kasimier), added --path + and --load-trace options to xmllint
    • +
    • documentation: tutorial update (John Fleck)
    • +

    2.6.12: Aug 22 2004

      +
    • build fixes: fix --with-minimum, elfgcchack.h fixes (Peter + Breitenlohner), perl path lookup (William), diff on Solaris (Albert + Chin), some 64bits cleanups.
    • +
    • Python: avoid a warning with 2.3 (William Brack), tab and space mixes + (William), wrapper generator fixes (William), Cygwin support (Gerrit P. + Haase), node wrapper fix (Marc-Antoine Parent), XML Schemas support + (Torkel Lyng)
    • +
    • Schemas: a lot of bug fixes and improvements from Kasimier Buchcik
    • +
    • fixes: RVT fixes (William), XPath context resets bug (William), memory + debug (Steve Hay), catalog white space handling (Peter Breitenlohner), + xmlReader state after attribute reading (William), structured error + handler (William), XInclude generated xml:base fixup (William), Windows + memory reallocation problem (Steve Hay), Out of Memory conditions + handling (William and Olivier Andrieu), htmlNewDoc() charset bug, + htmlReadMemory init (William), a posteriori validation DTD base + (William), notations serialization missing, xmlGetNodePath (Dodji), + xmlCheckUTF8 (Diego Tartara), missing line numbers on entity + (William)
    • +
    • improvements: DocBook catalog build scrip (William), xmlcatalog tool + (Albert Chin), xmllint --c14n option, no_proxy environment (Mike Hommey), + xmlParseInNodeContext() addition, extend xmllint --shell, allow XInclude + to not generate start/end nodes, extend xmllint --version to include CVS + tag (William)
    • +
    • documentation: web pages fixes, validity API docs fixes (William) + schemas API fix (Eric Haszlakiewicz), xmllint man page (John Fleck)
    • +

    2.6.11: July 5 2004

      +
    • Schemas: a lot of changes and improvements by Kasimier Buchcik for + attributes, namespaces and simple types.
    • +
    • build fixes: --with-minimum (William Brack), some gcc cleanup + (William), --with-thread-alloc (William)
    • +
    • portability: Windows binary package change (Igor Zlatkovic), Catalog + path on Windows
    • +
    • documentation: update to the tutorial (John Fleck), xmllint return code + (John Fleck), man pages (Ville Skytta),
    • +
    • bug fixes: C14N bug serializing namespaces (Aleksey Sanin), testSAX + properly initialize the library (William), empty node set in XPath + (William), xmlSchemas errors (William), invalid charref problem pointed + by Morus Walter, XInclude xml:base generation (William), Relax-NG bug + with div processing (William), XPointer and xml:base problem(William), + Reader and entities, xmllint return code for schemas (William), reader + streaming problem (Steve Ball), DTD serialization problem (William), + libxml.m4 fixes (Mike Hommey), do not provide destructors as methods on + Python classes, xmlReader buffer bug, Python bindings memory interfaces + improvement (with Stéphane Bidoul), Fixed the push parser to be back to + synchronous behaviour.
    • +
    • improvement: custom per-thread I/O enhancement (Rob Richards), register + namespace in debug shell (Stefano Debenedetti), Python based regression + test for non-Unix users (William), dynamically increase the number of + XPath extension functions in Python and fix a memory leak (Marc-Antoine + Parent and William)
    • +
    • performance: hack done with Arjan van de Ven to reduce ELF footprint + and generated code on Linux, plus use gcc runtime profiling to optimize + the code generated in the RPM packages.
    • +

    2.6.10: May 17 2004

      +
    • Web page generated for ChangeLog
    • +
    • build fixes: --without-html problems, make check without make all
    • +
    • portability: problem with xpath.c on Windows (MSC and Borland), memcmp + vs. strncmp on Solaris, XPath tests on Windows (Mark Vakoc), C++ do not + use "list" as parameter name, make tests work with Python 1.5 (Ed + Davis),
    • +
    • improvements: made xmlTextReaderMode public, small buffers resizing + (Morten Welinder), add --maxmem option to xmllint, add + xmlPopInputCallback() for Matt Sergeant, refactoring of serialization + escaping, added escaping customization
    • +
    • bugfixes: xsd:extension (Taihei Goi), assorted regexp bugs (William + Brack), xmlReader end of stream problem, node deregistration with reader, + URI escaping and filemanes, XHTML1 formatting (Nick Wellnhofer), regexp + transition reduction (William), various XSD Schemas fixes (Kasimier + Buchcik), XInclude fallback problem (William), weird problems with DTD + (William), structured error handler callback context (William), reverse + xmlEncodeSpecialChars() behaviour back to escaping '"'
    • +

    2.6.9: Apr 18 2004

      +
    • implement xml:id Working Draft, relaxed XPath id() checking
    • +
    • bugfixes: xmlCtxtReset (Brent Hendricks), line number and CDATA (Dave + Beckett), Relax-NG compilation (William Brack), Regexp patches (with + William), xmlUriEscape (Mark Vakoc), a Relax-NG notAllowed problem (with + William), Relax-NG name classes compares (William), XInclude duplicate + fallback (William), external DTD encoding detection (William), a DTD + validation bug (William), xmlReader Close() fix, recusive extention + schemas
    • +
    • improvements: use xmlRead* APIs in test tools (Mark Vakoc), indenting + save optimization, better handle IIS broken HTTP redirect behaviour (Ian + Hummel), HTML parser frameset (James Bursa), libxml2-python RPM + dependancy, XML Schemas union support (Kasimier Buchcik), warning removal + clanup (William), keep ChangeLog compressed when installing from RPMs
    • +
    • documentation: examples and xmlDocDumpMemory docs (John Fleck), new + example (load, xpath, modify, save), xmlCatalogDump() comments,
    • +
    • Windows: Borland C++ builder (Eric Zurcher), work around Microsoft + compiler NaN handling bug (Mark Vakoc)
    • +

    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 information 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 information 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 and datatypes 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 Borgstrom
    • +
    • 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
      • +
      +
    • +

    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
      • +
      +
    • +
    • 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

    diff --git a/doc/news.xsl b/doc/news.xsl new file mode 100644 index 0000000..50089eb --- /dev/null +++ b/doc/news.xsl @@ -0,0 +1,44 @@ + + + + + + + NEWS file for libxml2 + + Note that this is automatically generated from the news webpage at: + http://xmlsoft.org/news.html + + + + + + + + + : + + + + + + + + + - + + + + + + + at + + + + + + + diff --git a/doc/python.html b/doc/python.html new file mode 100644 index 0000000..bd52649 --- /dev/null +++ b/doc/python.html @@ -0,0 +1,254 @@ + + +Python and bindings
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    The XML C parser and toolkit of Gnome

    Python and bindings

    Developer Menu
    API Indexes
    Related links

    There are a number of language bindings and wrappers available for +libxml2, the list below is not exhaustive. Please contact the xml-bindings@gnome.org +(archives) in +order to get updates to this list or to discuss the specific topic of libxml2 +or libxslt wrappers or bindings:

      +
    • Libxml++ seems the + most up-to-date C++ bindings for libxml2, check the documentation + and the examples.
    • +
    • There is another C++ wrapper + based on the gdome2 bindings maintained by Tobias Peters.
    • +
    • and a third C++ wrapper by Peter Jones <pjones@pmade.org> +

      Website: http://pmade.org/pjones/software/xmlwrapp/

      +
    • +
    • XML::LibXML Perl + bindings are available on CPAN, as well as XML::LibXSLT + Perl libxslt + bindings.
    • +
    • If you're interested into scripting XML processing, have a look at XSH an XML editing shell based on + Libxml2 Perl bindings.
    • +
    • Dave Kuhlman provides an + earlier version of the libxml/libxslt wrappers for Python.
    • +
    • Gopal.V and Peter Minten develop libxml#, a set of + C# libxml2 bindings.
    • +
    • Petr Kozelka provides Pascal units to glue + libxml2 with Kylix, Delphi and other Pascal compilers.
    • +
    • Uwe Fechner also provides idom2, a DOM2 + implementation for Kylix2/D5/D6 from Borland.
    • +
    • There is bindings for Ruby + and libxml2 bindings are also available in Ruby through the libgdome-ruby module + maintained by Tobias Peters.
    • +
    • Steve Ball and contributors maintains libxml2 and libxslt bindings for + Tcl.
    • +
    • libxml2 and libxslt are the default XML libraries for PHP5.
    • +
    • LibxmlJ is + an effort to create a 100% JAXP-compatible Java wrapper for libxml2 and + libxslt as part of GNU ClasspathX project.
    • +
    • Patrick McPhee provides Rexx bindings fof libxml2 and libxslt, look for + RexxXML.
    • +
    • Satimage + provides XMLLib + osax. This is an osax for Mac OS X with a set of commands to + implement in AppleScript the XML DOM, XPATH and XSLT. Also includes + commands for Property-lists (Apple's fast lookup table XML format.)
    • +
    • Francesco Montorsi developped wxXml2 + wrappers that interface libxml2, allowing wxWidgets applications to + load/save/edit XML instances.
    • +

    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.

    Note that some of the Python purist dislike the default set of Python +bindings, rather than complaining I suggest they have a look at lxml the more pythonic bindings for libxml2 +and libxslt and check the mailing-list.

    Stéphane Bidoul +maintains a Windows port +of the Python bindings.

    Note to people interested in building bindings, the API is formalized as +an XML API description file 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.

    To install the Python bindings there are 2 options:

      +
    • If you use an RPM based distribution, simply install the libxml2-python + RPM (and if needed the libxslt-python + RPM).
    • +
    • Otherwise use the libxml2-python + module distribution 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.
    • +

    The distribution includes a set of examples and regression tests for the +python bindings in the python/tests directory. Here are some +excerpts from those tests:

    tst.py:

    This is a basic test of the file interface and DOM navigation:

    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()

    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:

      +
    • name : returns the node name
    • +
    • type : returns a string indicating the node type
    • +
    • content : returns the content of the node, it is based on + xmlNodeGetContent() and hence is recursive.
    • +
    • parent , children, last, + next, prev, doc, + properties: pointing to the associated element in the tree, + those may return None in case no such link exists.
    • +

    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.

    validate.py:

    This test check the validation interfaces and redirection of error +messages:

    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"

    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.

    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 information resulting from the parsing phase +is also available using context methods.

    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.

    push.py:

    This test show how to activate the push parser interface:

    import libxml2
    +
    +ctxt = libxml2.createPushParser(None, "<foo", 4, "test.xml")
    +ctxt.parseChunk("/>", 2, 1)
    +doc = ctxt.doc()
    +
    +doc.freeDoc()

    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.

    Then the data are pushed using the parseChunk() method, the last call +setting the third argument terminate to 1.

    pushSAX.py:

    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:

    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, "<foo", 4, "test.xml")
    +chunk = " url='tst'>b"
    +ctxt.parseChunk(chunk, len(chunk), 0)
    +chunk = "ar</foo>"
    +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

    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.

    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()

    xpath.py:

    This is a basic test of XPath wrappers support

    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()

    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.

    xpathext.py:

    This test shows how to extend the XPath engine with functions written in +python:

    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()

    Note how the extension function is registered with the context (but that +part is not yet finalized, this may change slightly in the future).

    tstxpath.py:

    This test is similar to the previous one but shows how the extension +function can access the XPath evaluation context:

    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

    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.

    Memory debugging:

    last but not least, all tests starts with the following prologue:

    #memory debug specific
    +libxml2.debugMemory(1)

    and ends with the following epilogue:

    #memory debug specific
    +libxml2.cleanupParser()
    +if libxml2.debugMemory(1) == 0:
    +    print "OK"
    +else:
    +    print "Memory leak %d bytes" % (libxml2.debugMemory(1))
    +    libxml2.dumpMemory()

    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 .memdump file.

    Daniel Veillard

    diff --git a/doc/queries.py b/doc/queries.py new file mode 100755 index 0000000..0f019ec --- /dev/null +++ b/doc/queries.py @@ -0,0 +1,119 @@ +#!/usr/bin/python -u +# +# Processing of the queries results +# +import sys +import index +import time +import traceback +import string + +if index.openMySQL(verbose = 0) < 0: + print "Failed to connect to the MySQL database" + sys.exit(1) + +DB = index.DB + +def getTopQueriesDB(base = "Queries", number = 50): + global DB + + try: + import os + os.mkdir("searches") + except: + pass + + date = time.strftime("%Y%m%d") + f = open("searches/%s-%s.xml" % (base, date), "w") + c = DB.cursor() + try: + ret = c.execute("""select sum(Count) from %s""" % (base)) + row = c.fetchone() + total = int(row[0]) + ret = c.execute("""select count(*) from %s""" % (base)) + row = c.fetchone() + uniq = int(row[0]) + ret = c.execute( + """select * from %s ORDER BY Count DESC LIMIT %d""" % (base, number)) + i = 0; + f.write("\n" % ( + total, uniq, number, date)) + while i < ret: + row = c.fetchone() + f.write(" %s\n" % (int(row[2]), row[1])) + i = i + 1 + f.write("\n") + except: + print "getTopQueries %s %d failed\n" % (base, number) + print sys.exc_type, sys.exc_value + return -1 + f.close() + +def getTopQueries(number = 50): + return getTopQueriesDB(base = "Queries", number = number) + +def getAllTopQueries(number = 50): + return getTopQueriesDB(base = "AllQueries", number = number) + +def increaseTotalCount(Value, count): + global DB + + c = DB.cursor() + try: + ret = c.execute("""select ID,Count from AllQueries where Value='%s'""" % + (Value)) + row = c.fetchone() + id = row[0] + cnt = int(row[1]) + count + ret = c.execute("""UPDATE AllQueries SET Count = %d where ID = %d""" % + (cnt, id)) + except: + ret = c.execute( + """INSERT INTO AllQueries (Value, Count) VALUES ('%s', %d)""" % + (Value, count)) + + +def checkString(str): + if string.find(str, "'") != -1 or \ + string.find(str, '"') != -1 or \ + string.find(str, "\\") != -1 or \ + string.find(str, " ") != -1 or \ + string.find(str, "\t") != -1 or \ + string.find(str, "\n") != -1 or \ + string.find(str, "\r") != -1: + return 0 + return 1 +def addCounts(frmtable): + global DB + + i = 0 + c = DB.cursor() + entries=[] + try: + ret = c.execute("""select Value,Count from %s""" % (frmtable)) + while i < ret: + i = i + 1 + row = c.fetchone() + if checkString(row[0]): + entries.append((row[0], int(row[1]))) + else: + entries.append((None, int(row[1]))) + + for row in entries: + if row[0] != None: + increaseTotalCount(row[0], row[1]) + except: + print "addCounts %s failed" % (frmtable) + print sys.exc_type, sys.exc_value + traceback.print_exc(file=sys.stdout) + + try: + c.execute("""DELETE from %s""" % (frmtable)) + except: + pass + + + +getTopQueries() +addCounts('Queries') +getAllTopQueries() diff --git a/doc/redhat.gif b/doc/redhat.gif new file mode 100644 index 0000000..eff3d73 Binary files /dev/null and b/doc/redhat.gif differ diff --git a/doc/search.php b/doc/search.php new file mode 100644 index 0000000..c94e87e --- /dev/null +++ b/doc/search.php @@ -0,0 +1,477 @@ + + + + + + +Search the documentation on XMLSoft.org + + + + + +
    +Gnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo
    +
    +

    The XML C library for Gnome

    +

    Search engine

    +
    +
    + + +
    + + + +
    Main Menu
    + + + +
    API Indexes
    + + + +
    Related links
    +
    +Search the documentation on XMLSoft.org"; + } + if ($scope == NULL) + $scope = "any"; + $scope = ltrim ($scope); + if ($scope == "") + $scope = "any"; + $querystr = htmlspecialchars($query, ENT_QUOTES, 'UTF-8'); + +?> +

    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: +

    +

    + + + +
    + $rb) ? -1 : 1; + } + if (($query) && (strlen($query) <= 50)) { + $link = mysql_connect ("localhost", "nobody"); + if (!$link) { + echo "

    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); + if (strncmp($module, "libxml-", 7) == 0) + $url = "html/$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); + } + } + } + if ((count($results) == 0) && (count($list) == 1)) { + $word = $list[0]; + if (($scope == 'any') || ($scope == 'XML') || + ($scope == 'API') || ($scope == 'XMLAPI')) { + list($result, $j) = queryWord("xml$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("xslt$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); + } + } + } + mysql_close($link); + $nb = count($results); + echo "

    Found $nb results for query $querystr

    \n"; + usort($results, "resSort"); + + if ($nb > 0) { + printf("\n"); + printf("\n"); + $i = 0; + while (list ($name, $val) = each ($results)) { + list($r,$t,$m,$d,$s,$u) = $val; + $m = str_replace("<", "<", $m); + $s = str_replace("<", "<", $s); + $d = str_replace("<", "<", $d); + echo ""; + $i = $i + 1; + if ($i > 75) + break; + } + printf("
    QualitySymbolTypemoduleDescription
    $r$s$t$m$d
    \n"); + } + } + } +?> + +
    + + + diff --git a/doc/searches.html b/doc/searches.html new file mode 100644 index 0000000..c22b8d6 --- /dev/null +++ b/doc/searches.html @@ -0,0 +1,61 @@ + + +Search statistics for 20040408
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    Search statistics for 20040408

    Main Menu
    Related links

    weekly statistics:

    416435 total words, + 9875 uniq words.

    Top 50 queries:


    libxml2 11812 times. +
    libxml 10170 times. +
    xpath 6172 times. +
    schema 5798 times. +
    xmllint 5472 times. +
    XML 5435 times. +
    xmlParseFile 4219 times. +
    php 3935 times. +
    DTD 3270 times. +
    encoding 3101 times. +
    xmlGetProp 3084 times. +
    xsltproc 3074 times. +
    download 2971 times. +
    xmlNodeListGetString 2917 times. +
    python 2789 times. +
    SAX 2621 times. +
    xmlParseMemory 2472 times. +
    perl 2385 times. +
    iconv 2318 times. +
    error 2298 times. +
    html 2255 times. +
    xmlChar 2136 times. +
    libxslt 2055 times. +
    c++ 2020 times. +
    xmlNodePtr 1928 times. +
    windows 1918 times. +
    to 1891 times. +
    node 1860 times. +
    xmlFree 1854 times. +
    example 1784 times. +
    install 1763 times. +
    parser 1715 times. +
    xmlNewDoc 1695 times. +
    namespace 1693 times. +
    xmlStrcmp 1564 times. +
    xmlnode 1558 times. +
    parse 1517 times. +
    memory 1484 times. +
    dom 1457 times. +
    XInclude 1444 times. +
    entity 1423 times. +
    xmlSaveFormatFile 1390 times. +
    xslt 1361 times. +
    attribute 1360 times. +
    xmlDocPtr 1350 times. +
    xsd 1319 times. +
    xmlDocGetRootElement 1285 times. +
    validate 1270 times. +
    validation 1234 times. +
    tutorial 1140 times. +

    Daniel Veillard

    diff --git a/doc/searches.xsl b/doc/searches.xsl new file mode 100644 index 0000000..57ff5c8 --- /dev/null +++ b/doc/searches.xsl @@ -0,0 +1,97 @@ + + + + + + + + + + + + + +

    weekly statistics:

    +

    total words, + uniq words.

    +

    Top queries:

    +
    + + +
    + times. +
    + + + + Search statistics for + + + + + + + + + + + + + + + + +
    + + + + + +
    + + + + + + +
    + + + + +
    + + + + +
    + +

    + +

    +

    Daniel Veillard

    +
    +
    +
    +
    +
    + + +
    +
    + + + + + +
    diff --git a/doc/searches/AllQueries-20040408.xml b/doc/searches/AllQueries-20040408.xml new file mode 100644 index 0000000..c2d2ec7 --- /dev/null +++ b/doc/searches/AllQueries-20040408.xml @@ -0,0 +1,52 @@ + + libxml2 + libxml + xpath + schema + xmllint + XML + xmlParseFile + php + DTD + encoding + xmlGetProp + xsltproc + download + xmlNodeListGetString + python + SAX + xmlParseMemory + perl + iconv + error + html + xmlChar + libxslt + c++ + xmlNodePtr + windows + to + node + xmlFree + example + install + parser + namespace + xmlNewDoc + xmlnode + xmlStrcmp + parse + memory + dom + XInclude + entity + xmlSaveFormatFile + attribute + xslt + xsd + xmlDocPtr + xmlDocGetRootElement + validate + validation + tutorial + diff --git a/doc/searches/Queries-20040408.xml b/doc/searches/Queries-20040408.xml new file mode 100644 index 0000000..62e6759 --- /dev/null +++ b/doc/searches/Queries-20040408.xml @@ -0,0 +1,52 @@ + + libxml2 + libxml + xpath + schema + xmllint + XML + xmlParseFile + php + DTD + encoding + xmlGetProp + xsltproc + download + xmlNodeListGetString + python + SAX + xmlParseMemory + perl + iconv + error + html + xmlChar + libxslt + c++ + xmlNodePtr + windows + to + node + xmlFree + example + install + parser + namespace + xmlNewDoc + xmlnode + xmlStrcmp + parse + memory + dom + XInclude + entity + xmlSaveFormatFile + attribute + xslt + xsd + xmlDocPtr + xmlDocGetRootElement + validate + validation + tutorial + diff --git a/doc/site.xsl b/doc/site.xsl new file mode 100644 index 0000000..11aaee2 --- /dev/null +++ b/doc/site.xsl @@ -0,0 +1,741 @@ + + + + + + Main Menu + + + + + + intro.html + + + docs.html + + + bugs.html + + + help.html + + + help.html + + + downloads.html + + + news.html + + + contribs.html + + + xsltproc2.html + + + + + + XSLT.html + + + XMLinfo.html + + + xmldtd.html + + + + + + + + + + + + + + + + + + + + + namespaces.html + + + + + + catalog.html + + + + + + encoding.html + + + + + + + + + + + + FAQ.html + + + + + + unknown.html + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + xsltproc2.html + + + API.html + + + XSLT.html + + + + + + + + + tree.html + + + library.html + + + interface.html + + + example.html + + + entities.html + + + architecture.html + + + namespaces.html + + + DOM.html + + + + + + upgrade.html + + + + + + xmlio.html + + + xmlmem.html + + + threads.html + + + + + + python.html + + + unknown.html + + + + + + + + + + + intro.html + + + docs.html + + + bugs.html + + + help.html + + + help.html + + + downloads.html + + + news.html + + + contribs.html + + + xsltproc2.html + + + API.html + + + XSLT.html + + + XMLinfo.html + + + xmldtd.html + + + tree.html + + + library.html + + + interface.html + + + example.html + + + entities.html + + + architecture.html + + + namespaces.html + + + DOM.html + + + catalog.html + + + upgrade.html + + + encoding.html + + + xmlio.html + + + xmlmem.html + + + threads.html + + + FAQ.html + + + python.html + + + unknown.html + + + + + + + + + + +
    + + +
    + +
    + +
    + + +
    + +
    + + + + + + + + + + + +
    + + + + + + + +
    +
    + +
    +
    + +
    + + + + + + + +
    +
    + Related links +
    +
    + +
    +
    +
    + + + + + +
    + + + + + + + +
    +
    + Developer Menu +
    +
    + +
    + + + + + + + +
    +
    + API Indexes +
    +
    + +
    + + + + + + + +
    +
    + Related links +
    +
    + +
    +
    +
    + + + <xsl:apply-templates/> + + + + + + + + + + + + + + + + + + +
    + Action against software patents + + Gnome2 Logo + W3C Logo + Red Hat Logo +
    + Made with Libxml2 Logo +
    +
    + + + + +
    + + + + +
    + + + + + + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + +
    + + + + + + + + + + + + + + + + +
    + + + + +
    + + + + +
    + +

    Daniel Veillard

    +
    +
    +
    +
    +
    + + +
    +
    + + + + + + + + + + + + + + + + + +
    + + + + + +
    + + + + + + +
    + + + + +
    + + + + +
    + + + + + + +

    Daniel Veillard

    +
    +
    +
    +
    +
    + +
    + + + + + + + + Generating the Web pages + + + + +
    diff --git a/doc/smallfootonly.gif b/doc/smallfootonly.gif new file mode 100644 index 0000000..ddbb9ee Binary files /dev/null and b/doc/smallfootonly.gif differ diff --git a/doc/structure.fig b/doc/structure.fig new file mode 100644 index 0000000..1d27b44 --- /dev/null +++ b/doc/structure.fig @@ -0,0 +1,242 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +6 1125 2325 1200 2850 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 + 1200 2325 1200 2850 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 + 1200 2775 1125 2850 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 + 1200 2700 1125 2775 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 + 1200 2550 1125 2625 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 + 1200 2625 1125 2700 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 + 1200 2400 1125 2475 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 + 1200 2475 1125 2550 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 + 1200 2325 1125 2400 +-6 +6 6000 4200 6075 4725 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 + 6075 4200 6075 4725 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 + 6075 4650 6000 4725 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 + 6075 4575 6000 4650 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 + 6075 4425 6000 4500 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 + 6075 4500 6000 4575 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 + 6075 4275 6000 4350 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 + 6075 4350 6000 4425 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 + 6075 4200 6000 4275 +-6 +6 9000 2100 9075 2625 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 + 9000 2625 9000 2100 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 + 9000 2175 9075 2100 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 + 9000 2250 9075 2175 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 + 9000 2400 9075 2325 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 + 9000 2325 9075 2250 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 + 9000 2550 9075 2475 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 + 9000 2475 9075 2400 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 + 9000 2625 9075 2550 +-6 +6 11850 4050 11925 4575 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 + 11850 4575 11850 4050 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 + 11850 4125 11925 4050 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 + 11850 4200 11925 4125 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 + 11850 4350 11925 4275 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 + 11850 4275 11925 4200 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 + 11850 4500 11925 4425 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 + 11850 4425 11925 4350 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 + 11850 4575 11925 4500 +-6 +6 1950 4275 2025 4800 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 + 2025 4275 2025 4800 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 + 2025 4725 1950 4800 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 + 2025 4650 1950 4725 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 + 2025 4500 1950 4575 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 + 2025 4575 1950 4650 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 + 2025 4350 1950 4425 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 + 2025 4425 1950 4500 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 + 2025 4275 1950 4350 +-6 +6 5175 4050 5250 4575 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 + 5175 4575 5175 4050 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 + 5175 4125 5250 4050 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 + 5175 4200 5250 4125 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 + 5175 4350 5250 4275 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 + 5175 4275 5250 4200 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 + 5175 4500 5250 4425 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 + 5175 4425 5250 4350 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2 + 5175 4575 5250 4500 +-6 +2 2 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 5 + 3150 375 4425 375 4425 1275 3150 1275 3150 375 +2 4 0 1 0 7 0 0 -1 0.000 0 0 7 0 0 5 + 2850 2775 2850 2100 1875 2100 1875 2775 2850 2775 +2 4 0 1 0 7 0 0 -1 0.000 0 0 7 0 0 5 + 5550 2775 5550 2100 4575 2100 4575 2775 5550 2775 +2 4 0 1 0 7 0 0 -1 0.000 0 0 7 0 0 5 + 8175 2775 8175 2100 7200 2100 7200 2775 8175 2775 +2 4 0 1 0 7 0 0 -1 0.000 0 0 7 0 0 5 + 7650 4725 7650 4050 6675 4050 6675 4725 7650 4725 +2 4 0 1 0 7 0 0 -1 0.000 0 0 7 0 0 5 + 9675 4725 9675 4050 8700 4050 8700 4725 9675 4725 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 3750 1275 2400 2100 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 2850 2325 4575 2325 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 5550 2325 7200 2325 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 8175 2325 9000 2325 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 7200 2550 5550 2550 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 4575 2550 2850 2550 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 1875 2550 1200 2550 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 2250 2100 3525 1275 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 5100 2100 4050 1275 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 7725 2100 4125 1275 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 7725 2775 7125 4050 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 7650 4275 8700 4275 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 8700 4425 7650 4425 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 9675 4275 10275 4275 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 6675 4500 6075 4500 +2 4 0 1 0 7 0 0 -1 0.000 0 0 7 0 0 5 + 11250 4725 11250 4050 10275 4050 10275 4725 11250 4725 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 11250 4275 11850 4275 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 10275 4425 9675 4425 +2 2 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 5 + 6450 5250 8025 5250 8025 5475 6450 5475 6450 5250 +2 2 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 5 + 10125 5250 11700 5250 11700 5475 10125 5475 10125 5250 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 7050 4725 7050 5250 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 10650 4725 10650 5250 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 5100 2775 3375 3225 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 2850 3600 2850 4050 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 3375 4275 3900 4275 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 4875 4275 5175 4275 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 3900 4500 3375 4500 +2 2 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 5 + 3600 5250 5175 5250 5175 5475 3600 5475 3600 5250 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 4275 4725 4275 5250 +2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 2400 4500 2025 4500 +2 4 0 1 0 7 0 0 -1 0.000 0 0 7 0 0 5 + 3375 4725 3375 4050 2400 4050 2400 4725 3375 4725 +2 4 0 1 0 7 0 0 -1 0.000 0 0 7 0 0 5 + 4875 4725 4875 4050 3900 4050 3900 4725 4875 4725 +2 4 0 1 0 7 0 0 -1 0.000 0 0 7 0 0 5 + 3375 3600 3375 2925 2400 2925 2400 3600 3375 3600 +4 0 0 0 0 0 16 0.0000 4 150 420 3000 2250 next\001 +4 0 0 0 0 0 16 0.0000 4 180 435 3975 2775 prev\001 +4 0 0 0 0 14 15 0.0000 4 135 945 7200 2475 ELEMENT\001 +4 0 0 0 0 14 15 0.0000 4 135 945 4575 2475 ELEMENT\001 +4 0 0 0 0 14 15 0.0000 4 135 945 1875 2475 ELEMENT\001 +4 0 0 0 0 14 16 0.0000 4 135 450 8775 4590 REF\001 +4 0 0 0 0 14 16 0.0000 4 135 900 8775 4350 ENTITY\001 +4 0 0 0 0 14 16 0.0000 4 135 600 10350 4425 TEXT\001 +4 0 0 0 0 14 16 0.0000 4 135 600 6750 4425 TEXT\001 +4 0 0 0 0 14 16 0.0000 4 150 1050 1275 2025 xmlNode\001 +4 0 0 0 0 14 16 0.0000 4 150 900 2175 675 xmlDoc\001 +4 0 0 0 0 14 16 0.0000 4 135 1200 3225 825 DOCUMENT\001 +4 0 0 0 0 -1 20 0.0000 4 255 4665 5175 825 A DOM tree as built by the XML parser\001 +4 0 0 0 0 0 16 0.0000 4 165 810 3375 1650 children\001 +4 0 0 0 0 14 16 0.0000 4 135 900 2475 4275 ENTITY\001 +4 0 0 0 0 14 16 0.0000 4 135 450 2475 4575 REF\001 +4 0 0 0 0 14 16 0.0000 4 135 600 4050 4425 TEXT\001 +4 0 0 0 0 -1 16 0.0000 4 225 990 3975 3225 properties\001 +4 0 0 50 0 0 16 0.0000 4 150 720 4350 5025 content\001 +4 0 0 0 0 14 16 0.0000 4 135 600 2625 3300 ATTR\001 +4 0 0 0 0 0 16 0.0000 4 210 615 4950 1800 parent\001 diff --git a/doc/structure.gif b/doc/structure.gif new file mode 100644 index 0000000..4b9a3e6 Binary files /dev/null and b/doc/structure.gif differ diff --git a/doc/symbols.xml b/doc/symbols.xml new file mode 100644 index 0000000..ec275e7 --- /dev/null +++ b/doc/symbols.xml @@ -0,0 +1,1768 @@ + + + + xmlBoolToText + xmlDebugDumpAttr + xmlDebugDumpAttrList + xmlDebugDumpDTD + xmlDebugDumpDocument + xmlDebugDumpDocumentHead + xmlDebugDumpEntities + xmlDebugDumpNode + xmlDebugDumpNodeList + xmlDebugDumpOneNode + xmlDebugDumpString + xmlLsCountNode + xmlLsOneNode + xmlShell + xmlShellBase + xmlShellCat + xmlShellDir + xmlShellDu + xmlShellList + xmlShellLoad + xmlShellPrintNode + xmlShellPrintXPathError + xmlShellPrintXPathResult + xmlShellPwd + xmlShellSave + xmlShellValidate + xmlShellWrite + xmlXPtrBuildNodeList + xmlXPtrEval + xmlXPtrEvalRangePredicate + xmlXPtrFreeLocationSet + xmlXPtrLocationSetAdd + xmlXPtrLocationSetCreate + xmlXPtrLocationSetDel + xmlXPtrLocationSetMerge + xmlXPtrLocationSetRemove + xmlXPtrNewCollapsedRange + xmlXPtrNewContext + xmlXPtrNewLocationSetNodeSet + xmlXPtrNewLocationSetNodes + xmlXPtrNewRange + xmlXPtrNewRangeNodeObject + xmlXPtrNewRangeNodePoint + xmlXPtrNewRangeNodes + xmlXPtrNewRangePointNode + xmlXPtrNewRangePoints + xmlXPtrRangeToFunction + xmlXPtrWrapLocationSet + attribute + attributeDecl + cdataBlock + characters + checkNamespace + comment + docbDefaultSAXHandlerInit + elementDecl + endDocument + endElement + entityDecl + externalSubset + getColumnNumber + getEntity + getLineNumber + getNamespace + getParameterEntity + getPublicId + getSystemId + globalNamespace + hasExternalSubset + hasInternalSubset + htmlDefaultSAXHandlerInit + ignorableWhitespace + initdocbDefaultSAXHandler + inithtmlDefaultSAXHandler + initxmlDefaultSAXHandler + internalSubset + isStandalone + namespaceDecl + notationDecl + processingInstruction + reference + resolveEntity + setDocumentLocator + setNamespace + startDocument + startElement + unparsedEntityDecl + xmlDefaultSAXHandlerInit + htmlCreateFileParserCtxt + htmlInitAutoClose + inputPop + inputPush + namePop + namePush + nodePop + nodePush + xmlCheckLanguageID + xmlCopyChar + xmlCopyCharMultiByte + xmlCreateEntityParserCtxt + xmlCreateFileParserCtxt + xmlCreateMemoryParserCtxt + xmlCurrentChar + xmlDecodeEntities + xmlFreeInputStream + xmlHandleEntity + xmlIsBaseChar + xmlIsBlank + xmlIsChar + xmlIsCombining + xmlIsDigit + xmlIsExtender + xmlIsIdeographic + xmlIsLetter + xmlIsPubidChar + xmlNamespaceParseNCName + xmlNamespaceParseNSDef + xmlNamespaceParseQName + xmlNewEntityInputStream + xmlNewInputFromFile + xmlNewInputStream + xmlNewParserCtxt + xmlNewStringInputStream + xmlNextChar + xmlParseAttValue + xmlParseAttribute + xmlParseAttributeListDecl + xmlParseAttributeType + xmlParseCDSect + xmlParseCharData + xmlParseCharRef + xmlParseComment + xmlParseContent + xmlParseDefaultDecl + xmlParseDocTypeDecl + xmlParseElement + xmlParseElementChildrenContentDecl + xmlParseElementContentDecl + xmlParseElementDecl + xmlParseElementMixedContentDecl + xmlParseEncName + xmlParseEncodingDecl + xmlParseEndTag + xmlParseEntityDecl + xmlParseEntityRef + xmlParseEntityValue + xmlParseEnumeratedType + xmlParseEnumerationType + xmlParseExternalID + xmlParseExternalSubset + xmlParseMarkupDecl + xmlParseMisc + xmlParseName + xmlParseNamespace + xmlParseNmtoken + xmlParseNotationDecl + xmlParseNotationType + xmlParsePEReference + xmlParsePI + xmlParsePITarget + xmlParsePubidLiteral + xmlParseQuotedString + xmlParseReference + xmlParseSDDecl + xmlParseStartTag + xmlParseSystemLiteral + xmlParseTextDecl + xmlParseVersionInfo + xmlParseVersionNum + xmlParseXMLDecl + xmlParserHandlePEReference + xmlParserHandleReference + xmlParserInputShrink + xmlPopInput + xmlPushInput + xmlScanName + xmlSetEntityReferenceFunc + xmlSkipBlankChars + xmlSplitQName + xmlStringComment + xmlStringCurrentChar + xmlStringDecodeEntities + xmlStringText + xmlStringTextNoenc + xmlSwitchEncoding + xmlSwitchToEncoding + xmlC14NDocDumpMemory + xmlC14NDocSave + xmlC14NDocSaveTo + xmlC14NExecute + xmlACatalogAdd + xmlACatalogDump + xmlACatalogRemove + xmlACatalogResolve + xmlACatalogResolvePublic + xmlACatalogResolveSystem + xmlACatalogResolveURI + xmlCatalogAdd + xmlCatalogAddLocal + xmlCatalogCleanup + xmlCatalogConvert + xmlCatalogDump + xmlCatalogFreeLocal + xmlCatalogGetDefaults + xmlCatalogGetPublic + xmlCatalogGetSystem + xmlCatalogIsEmpty + xmlCatalogLocalResolve + xmlCatalogLocalResolveURI + xmlCatalogRemove + xmlCatalogResolve + xmlCatalogResolvePublic + xmlCatalogResolveSystem + xmlCatalogResolveURI + xmlCatalogSetDebug + xmlCatalogSetDefaultPrefer + xmlCatalogSetDefaults + xmlConvertSGMLCatalog + xmlFreeCatalog + xmlInitializeCatalog + xmlLoadACatalog + xmlLoadCatalog + xmlLoadCatalogs + xmlLoadSGMLSuperCatalog + xmlNewCatalog + xmlParseCatalogFile + valuePop + valuePush + xmlXPathAddValues + xmlXPathBooleanFunction + xmlXPathCeilingFunction + xmlXPathCompareValues + xmlXPathConcatFunction + xmlXPathContainsFunction + xmlXPathCountFunction + xmlXPathDebugDumpCompExpr + xmlXPathDebugDumpObject + xmlXPathDifference + xmlXPathDistinct + xmlXPathDistinctSorted + xmlXPathDivValues + xmlXPathEqualValues + xmlXPathEvalExpr + xmlXPathEvaluatePredicateResult + xmlXPathFalseFunction + xmlXPathFloorFunction + xmlXPathFreeParserContext + xmlXPathFunctionLookup + xmlXPathFunctionLookupNS + xmlXPathHasSameNodes + xmlXPathIdFunction + xmlXPathIntersection + xmlXPathIsNodeType + xmlXPathLangFunction + xmlXPathLastFunction + xmlXPathLeading + xmlXPathLeadingSorted + xmlXPathLocalNameFunction + xmlXPathModValues + xmlXPathMultValues + xmlXPathNamespaceURIFunction + xmlXPathNewBoolean + xmlXPathNewCString + xmlXPathNewFloat + xmlXPathNewNodeSet + xmlXPathNewNodeSetList + xmlXPathNewParserContext + xmlXPathNewString + xmlXPathNewValueTree + xmlXPathNextAncestor + xmlXPathNextAncestorOrSelf + xmlXPathNextAttribute + xmlXPathNextChild + xmlXPathNextDescendant + xmlXPathNextDescendantOrSelf + xmlXPathNextFollowing + xmlXPathNextFollowingSibling + xmlXPathNextNamespace + xmlXPathNextParent + xmlXPathNextPreceding + xmlXPathNextPrecedingSibling + xmlXPathNextSelf + xmlXPathNodeLeading + xmlXPathNodeLeadingSorted + xmlXPathNodeSetAdd + xmlXPathNodeSetAddNs + xmlXPathNodeSetAddUnique + xmlXPathNodeSetContains + xmlXPathNodeSetDel + xmlXPathNodeSetFreeNs + xmlXPathNodeSetMerge + xmlXPathNodeSetRemove + xmlXPathNodeSetSort + xmlXPathNodeTrailing + xmlXPathNodeTrailingSorted + xmlXPathNormalizeFunction + xmlXPathNotEqualValues + xmlXPathNotFunction + xmlXPathNsLookup + xmlXPathNumberFunction + xmlXPathParseNCName + xmlXPathParseName + xmlXPathPopBoolean + xmlXPathPopExternal + xmlXPathPopNodeSet + xmlXPathPopNumber + xmlXPathPopString + xmlXPathPositionFunction + xmlXPathRegisterAllFunctions + xmlXPathRegisterFunc + xmlXPathRegisterFuncLookup + xmlXPathRegisterFuncNS + xmlXPathRegisterNs + xmlXPathRegisterVariable + xmlXPathRegisterVariableLookup + xmlXPathRegisterVariableNS + xmlXPathRegisteredFuncsCleanup + xmlXPathRegisteredNsCleanup + xmlXPathRegisteredVariablesCleanup + xmlXPathRoot + xmlXPathRoundFunction + xmlXPathStartsWithFunction + xmlXPathStringEvalNumber + xmlXPathStringFunction + xmlXPathStringLengthFunction + xmlXPathSubValues + xmlXPathSubstringAfterFunction + xmlXPathSubstringBeforeFunction + xmlXPathSubstringFunction + xmlXPathSumFunction + xmlXPathTrailing + xmlXPathTrailingSorted + xmlXPathTranslateFunction + xmlXPathTrueFunction + xmlXPathValueFlipSign + xmlXPathVariableLookup + xmlXPathVariableLookupNS + xmlXPathWrapCString + xmlXPathWrapExternal + xmlXPathWrapNodeSet + xmlXPathWrapString + xmlXPatherror + xmlAutomataCompile + xmlAutomataGetInitState + xmlAutomataIsDeterminist + xmlAutomataNewAllTrans + xmlAutomataNewCountTrans + xmlAutomataNewCountedTrans + xmlAutomataNewCounter + xmlAutomataNewCounterTrans + xmlAutomataNewEpsilon + xmlAutomataNewOnceTrans + xmlAutomataNewState + xmlAutomataNewTransition + xmlAutomataSetFinalState + xmlFreeAutomata + xmlNewAutomata + htmlDocContentDumpFormatOutput + htmlDocContentDumpOutput + htmlDocDump + htmlDocDumpMemory + htmlGetMetaEncoding + htmlIsBooleanAttr + htmlNewDoc + htmlNewDocNoDtD + htmlNodeDump + htmlNodeDumpFile + htmlNodeDumpFileFormat + htmlNodeDumpFormatOutput + htmlNodeDumpOutput + htmlSaveFile + htmlSaveFileEnc + htmlSaveFileFormat + htmlSetMetaEncoding + xmlNanoFTPCheckResponse + xmlNanoFTPCleanup + xmlNanoFTPClose + xmlNanoFTPCloseConnection + xmlNanoFTPConnect + xmlNanoFTPConnectTo + xmlNanoFTPCwd + xmlNanoFTPFreeCtxt + xmlNanoFTPGet + xmlNanoFTPGetConnection + xmlNanoFTPGetResponse + xmlNanoFTPGetSocket + xmlNanoFTPInit + xmlNanoFTPList + xmlNanoFTPNewCtxt + xmlNanoFTPOpen + xmlNanoFTPProxy + xmlNanoFTPQuit + xmlNanoFTPRead + xmlNanoFTPScanProxy + xmlNanoFTPUpdateURL + docbCreateFileParserCtxt + docbCreatePushParserCtxt + docbEncodeEntities + docbFreeParserCtxt + docbParseChunk + docbParseDoc + docbParseDocument + docbParseFile + docbSAXParseDoc + docbSAXParseFile + xmlXPathCastBooleanToNumber + xmlXPathCastBooleanToString + xmlXPathCastNodeSetToBoolean + xmlXPathCastNodeSetToNumber + xmlXPathCastNodeSetToString + xmlXPathCastNodeToNumber + xmlXPathCastNodeToString + xmlXPathCastNumberToBoolean + xmlXPathCastNumberToString + xmlXPathCastStringToBoolean + xmlXPathCastStringToNumber + xmlXPathCastToBoolean + xmlXPathCastToNumber + xmlXPathCastToString + xmlXPathCmpNodes + xmlXPathCompile + xmlXPathCompiledEval + xmlXPathConvertBoolean + xmlXPathConvertNumber + xmlXPathConvertString + xmlXPathEval + xmlXPathEvalExpression + xmlXPathEvalPredicate + xmlXPathFreeCompExpr + xmlXPathFreeContext + xmlXPathFreeNodeSet + xmlXPathFreeNodeSetList + xmlXPathFreeObject + xmlXPathInit + xmlXPathIsInf + xmlXPathIsNaN + xmlXPathNAN + xmlXPathNINF + xmlXPathNewContext + xmlXPathNodeSetCreate + xmlXPathObjectCopy + xmlXPathPINF + xlinkGetDefaultDetect + xlinkGetDefaultHandler + xlinkIsLink + xlinkSetDefaultDetect + xlinkSetDefaultHandler + xmlAddDocEntity + xmlAddDtdEntity + xmlCleanupPredefinedEntities + xmlCopyEntitiesTable + xmlCreateEntitiesTable + xmlDumpEntitiesTable + xmlDumpEntityDecl + xmlEncodeEntities + xmlEncodeEntitiesReentrant + xmlEncodeSpecialChars + xmlFreeEntitiesTable + xmlGetDocEntity + xmlGetDtdEntity + xmlGetParameterEntity + xmlGetPredefinedEntity + xmlInitializePredefinedEntities + xmlXIncludeProcess + 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 + xmlInitMemory + xmlMallocLoc + xmlMemDisplay + xmlMemFree + xmlMemGet + xmlMemMalloc + xmlMemRealloc + xmlMemSetup + xmlMemShow + xmlMemStrdupLoc + xmlMemUsed + xmlMemoryDump + xmlMemoryStrdup + xmlReallocLoc + xmlAllocOutputBuffer + xmlAllocParserInputBuffer + xmlCheckFilename + xmlCleanupInputCallbacks + xmlCleanupOutputCallbacks + xmlFileClose + xmlFileMatch + xmlFileOpen + xmlFileRead + xmlFreeParserInputBuffer + xmlIOFTPClose + xmlIOFTPMatch + xmlIOFTPOpen + xmlIOFTPRead + xmlIOHTTPClose + xmlIOHTTPMatch + xmlIOHTTPOpen + xmlIOHTTPOpenW + xmlIOHTTPRead + xmlNoNetExternalEntityLoader + xmlNormalizeWindowsPath + xmlOutputBufferClose + xmlOutputBufferCreateFd + xmlOutputBufferCreateFile + xmlOutputBufferCreateFilename + xmlOutputBufferCreateIO + xmlOutputBufferFlush + xmlOutputBufferWrite + xmlOutputBufferWriteString + xmlParserGetDirectory + xmlParserInputBufferCreateFd + xmlParserInputBufferCreateFile + xmlParserInputBufferCreateFilename + xmlParserInputBufferCreateIO + xmlParserInputBufferCreateMem + xmlParserInputBufferGrow + xmlParserInputBufferPush + xmlParserInputBufferRead + xmlRegisterDefaultInputCallbacks + xmlRegisterDefaultOutputCallbacks + xmlRegisterHTTPPostCallbacks + xmlRegisterInputCallbacks + xmlRegisterOutputCallbacks + xmlCheckVersion + xmlAddAttributeDecl + xmlAddElementDecl + xmlAddID + xmlAddNotationDecl + xmlAddRef + xmlCopyAttributeTable + xmlCopyElementContent + xmlCopyElementTable + xmlCopyEnumeration + xmlCopyNotationTable + xmlCreateEnumeration + xmlDumpAttributeDecl + xmlDumpAttributeTable + xmlDumpElementDecl + xmlDumpElementTable + xmlDumpNotationDecl + xmlDumpNotationTable + xmlFreeAttributeTable + xmlFreeElementContent + xmlFreeElementTable + xmlFreeEnumeration + xmlFreeIDTable + xmlFreeNotationTable + xmlFreeRefTable + xmlGetDtdAttrDesc + xmlGetDtdElementDesc + xmlGetDtdNotationDesc + xmlGetDtdQAttrDesc + xmlGetDtdQElementDesc + xmlGetID + xmlGetRefs + xmlIsID + xmlIsMixedElement + xmlIsRef + xmlNewElementContent + xmlRemoveID + xmlRemoveRef + xmlSnprintfElementContent + xmlSplitQName2 + xmlSprintfElementContent + xmlValidBuildContentModel + xmlValidCtxtNormalizeAttributeValue + xmlValidGetPotentialChildren + xmlValidGetValidElements + xmlValidNormalizeAttributeValue + xmlValidateAttributeDecl + xmlValidateAttributeValue + xmlValidateDocument + xmlValidateDocumentFinal + xmlValidateDtd + xmlValidateDtdFinal + xmlValidateElement + xmlValidateElementDecl + xmlValidateNameValue + xmlValidateNamesValue + xmlValidateNmtokenValue + xmlValidateNmtokensValue + xmlValidateNotationDecl + xmlValidateNotationUse + xmlValidateOneAttribute + xmlValidateOneElement + xmlValidateOneNamespace + xmlValidateRoot + UTF8ToHtml + htmlAutoCloseTag + htmlCreatePushParserCtxt + htmlEncodeEntities + htmlEntityLookup + htmlEntityValueLookup + htmlFreeParserCtxt + htmlHandleOmittedElem + htmlIsAutoClosed + htmlIsScriptAttribute + htmlParseCharRef + htmlParseChunk + htmlParseDoc + htmlParseDocument + htmlParseElement + htmlParseEntityRef + htmlParseFile + htmlSAXParseDoc + htmlSAXParseFile + htmlTagLookup + xmlCharStrdup + xmlCharStrndup + xmlCleanupParser + xmlClearNodeInfoSeq + xmlClearParserCtxt + xmlCreateDocParserCtxt + xmlCreateIOParserCtxt + xmlCreatePushParserCtxt + xmlFreeParserCtxt + xmlGetExternalEntityLoader + xmlGetFeature + xmlGetFeaturesList + xmlGetWarningsDefaultValue + xmlIOParseDTD + xmlInitNodeInfoSeq + xmlInitParser + xmlInitParserCtxt + xmlKeepBlanksDefault + xmlLineNumbersDefault + xmlLoadExternalEntity + xmlNewIOInputStream + xmlParseBalancedChunkMemory + xmlParseBalancedChunkMemoryRecover + xmlParseChunk + xmlParseCtxtExternalEntity + xmlParseDTD + xmlParseDoc + xmlParseDocument + xmlParseEntity + xmlParseExtParsedEnt + xmlParseExternalEntity + xmlParseFile + xmlParseMemory + xmlParserAddNodeInfo + xmlParserFindNodeInfo + xmlParserFindNodeInfoIndex + xmlParserInputGrow + xmlParserInputRead + xmlPedanticParserDefault + xmlRecoverDoc + xmlRecoverFile + xmlRecoverMemory + xmlSAXParseDTD + xmlSAXParseDoc + xmlSAXParseEntity + xmlSAXParseFile + xmlSAXParseFileWithData + xmlSAXParseMemory + xmlSAXParseMemoryWithData + xmlSAXUserParseFile + xmlSAXUserParseMemory + xmlSetExternalEntityLoader + xmlSetFeature + xmlSetupParserForBuffer + xmlStopParser + xmlStrEqual + xmlStrcasecmp + xmlStrcasestr + xmlStrcat + xmlStrchr + xmlStrcmp + xmlStrdup + xmlStrlen + xmlStrncasecmp + xmlStrncat + xmlStrncmp + xmlStrndup + xmlStrstr + xmlStrsub + xmlSubstituteEntitiesDefault + xmlFreeTextReader + xmlNewTextReader + xmlNewTextReaderFilename + xmlTextReaderAttributeCount + xmlTextReaderBaseUri + xmlTextReaderDepth + xmlTextReaderHasAttributes + xmlTextReaderHasValue + xmlTextReaderIsDefault + xmlTextReaderIsEmptyElement + xmlTextReaderLocalName + xmlTextReaderName + xmlTextReaderNamespaceUri + xmlTextReaderNodeType + xmlTextReaderPrefix + xmlTextReaderQuoteChar + xmlTextReaderRead + xmlTextReaderValue + xmlTextReaderXmlLang + docbDefaultSAXHandler + htmlDefaultSAXHandler + xmlDefaultSAXHandler + xmlDefaultSAXLocator + xmlDoValidityCheckingDefaultValue + xmlFree + xmlGenericError + xmlGenericErrorContext + xmlInitializeGlobalState + xmlKeepBlanksDefaultValue + xmlLineNumbersDefaultValue + xmlLoadExtDtdDefaultValue + xmlMalloc + xmlMemStrdup + xmlParserDebugEntities + xmlParserVersion + xmlPedanticParserDefaultValue + xmlRealloc + xmlSaveNoEmptyTags + xmlSubstituteEntitiesDefaultValue + xmlTreeIndentString + xmlCleanupThreads + xmlFreeMutex + xmlFreeRMutex + xmlGetGlobalState + xmlGetThreadId + xmlInitThreads + xmlIsMainThread + xmlLockLibrary + xmlMutexLock + xmlMutexUnlock + xmlNewMutex + xmlNewRMutex + xmlRMutexLock + xmlRMutexUnlock + xmlUnlockLibrary + xmlHashAddEntry + xmlHashAddEntry2 + xmlHashAddEntry3 + xmlHashCopy + xmlHashCreate + xmlHashFree + xmlHashLookup + xmlHashLookup2 + xmlHashLookup3 + xmlHashRemoveEntry + xmlHashRemoveEntry2 + xmlHashRemoveEntry3 + xmlHashScan + xmlHashScan3 + xmlHashScanFull + xmlHashScanFull3 + xmlHashSize + xmlHashUpdateEntry + xmlHashUpdateEntry2 + xmlHashUpdateEntry3 + initGenericErrorDefaultFunc + xmlParserError + xmlParserPrintFileContext + xmlParserPrintFileInfo + xmlParserValidityError + xmlParserValidityWarning + xmlParserWarning + xmlSetGenericErrorFunc + oldXMLWDcompatibility + xmlAddChild + xmlAddChildList + xmlAddNextSibling + xmlAddPrevSibling + xmlAddSibling + xmlBufferAdd + xmlBufferAddHead + xmlBufferAllocScheme + xmlBufferCCat + xmlBufferCat + xmlBufferContent + xmlBufferCreate + xmlBufferCreateSize + xmlBufferDump + xmlBufferEmpty + xmlBufferFree + xmlBufferGrow + xmlBufferLength + xmlBufferResize + xmlBufferSetAllocationScheme + xmlBufferShrink + xmlBufferWriteCHAR + xmlBufferWriteChar + xmlBufferWriteQuotedString + xmlCopyDoc + xmlCopyDtd + xmlCopyNamespace + xmlCopyNamespaceList + xmlCopyNode + xmlCopyNodeList + xmlCopyProp + xmlCopyPropList + xmlCreateIntSubset + xmlDefaultBufferSize + xmlDocCopyNode + xmlDocDump + xmlDocDumpFormatMemory + xmlDocDumpFormatMemoryEnc + xmlDocDumpMemory + xmlDocDumpMemoryEnc + xmlDocFormatDump + xmlDocGetRootElement + xmlDocSetRootElement + xmlElemDump + xmlFreeDoc + xmlFreeDtd + xmlFreeNode + xmlFreeNodeList + xmlFreeNs + xmlFreeNsList + xmlFreeProp + xmlFreePropList + xmlGetBufferAllocationScheme + xmlGetCompressMode + xmlGetDocCompressMode + xmlGetIntSubset + xmlGetLastChild + xmlGetLineNo + xmlGetNodePath + xmlGetNsList + xmlGetNsProp + xmlGetProp + xmlHasNsProp + xmlHasProp + xmlIndentTreeOutput + xmlIsBlankNode + xmlIsXHTML + xmlNewCDataBlock + xmlNewCharRef + xmlNewChild + xmlNewComment + xmlNewDoc + xmlNewDocComment + xmlNewDocFragment + xmlNewDocNode + xmlNewDocNodeEatName + xmlNewDocProp + xmlNewDocRawNode + xmlNewDocText + xmlNewDocTextLen + xmlNewDtd + xmlNewGlobalNs + xmlNewNode + xmlNewNodeEatName + xmlNewNs + xmlNewNsProp + xmlNewNsPropEatName + xmlNewPI + xmlNewProp + xmlNewReference + xmlNewText + xmlNewTextChild + xmlNewTextLen + xmlNodeAddContent + xmlNodeAddContentLen + xmlNodeDump + xmlNodeDumpOutput + xmlNodeGetBase + xmlNodeGetContent + xmlNodeGetLang + xmlNodeGetSpacePreserve + xmlNodeIsText + xmlNodeListGetRawString + xmlNodeListGetString + xmlNodeSetBase + xmlNodeSetContent + xmlNodeSetContentLen + xmlNodeSetLang + xmlNodeSetName + xmlNodeSetSpacePreserve + xmlReconciliateNs + xmlRemoveProp + xmlReplaceNode + xmlSaveFile + xmlSaveFileEnc + xmlSaveFileTo + xmlSaveFormatFile + xmlSaveFormatFileEnc + xmlSaveFormatFileTo + xmlSearchNs + xmlSearchNsByHref + xmlSetBufferAllocationScheme + xmlSetCompressMode + xmlSetDocCompressMode + xmlSetListDoc + xmlSetNs + xmlSetNsProp + xmlSetProp + xmlSetTreeDoc + xmlStringGetNodeList + xmlStringLenGetNodeList + xmlTextConcat + xmlTextMerge + xmlUnlinkNode + xmlUnsetNsProp + xmlUnsetProp + xmlRegExecPushString + xmlRegFreeExecCtxt + xmlRegFreeRegexp + xmlRegNewExecCtxt + xmlRegexpCompile + xmlRegexpExec + xmlRegexpIsDeterminist + xmlRegexpPrint + xmlNanoHTTPAuthHeader + xmlNanoHTTPCleanup + xmlNanoHTTPClose + xmlNanoHTTPFetch + xmlNanoHTTPInit + xmlNanoHTTPMethod + xmlNanoHTTPMethodRedir + xmlNanoHTTPOpen + xmlNanoHTTPOpenRedir + xmlNanoHTTPRead + xmlNanoHTTPReturnCode + xmlNanoHTTPSave + xmlNanoHTTPScanProxy + xmlUCSIsAlphabeticPresentationForms + xmlUCSIsArabic + xmlUCSIsArabicPresentationFormsA + xmlUCSIsArabicPresentationFormsB + xmlUCSIsArmenian + xmlUCSIsArrows + xmlUCSIsBasicLatin + xmlUCSIsBengali + xmlUCSIsBlock + xmlUCSIsBlockElements + xmlUCSIsBopomofo + xmlUCSIsBopomofoExtended + xmlUCSIsBoxDrawing + xmlUCSIsBraillePatterns + xmlUCSIsByzantineMusicalSymbols + xmlUCSIsCJKCompatibility + xmlUCSIsCJKCompatibilityForms + xmlUCSIsCJKCompatibilityIdeographs + xmlUCSIsCJKCompatibilityIdeographsSupplement + xmlUCSIsCJKRadicalsSupplement + xmlUCSIsCJKSymbolsandPunctuation + xmlUCSIsCJKUnifiedIdeographs + xmlUCSIsCJKUnifiedIdeographsExtensionA + xmlUCSIsCJKUnifiedIdeographsExtensionB + xmlUCSIsCat + xmlUCSIsCatC + xmlUCSIsCatCc + xmlUCSIsCatCf + xmlUCSIsCatCo + xmlUCSIsCatCs + xmlUCSIsCatL + xmlUCSIsCatLl + xmlUCSIsCatLm + xmlUCSIsCatLo + xmlUCSIsCatLt + xmlUCSIsCatLu + xmlUCSIsCatM + xmlUCSIsCatMc + xmlUCSIsCatMe + xmlUCSIsCatMn + xmlUCSIsCatN + xmlUCSIsCatNd + xmlUCSIsCatNl + xmlUCSIsCatNo + xmlUCSIsCatP + xmlUCSIsCatPc + xmlUCSIsCatPd + xmlUCSIsCatPe + xmlUCSIsCatPf + xmlUCSIsCatPi + xmlUCSIsCatPo + xmlUCSIsCatPs + xmlUCSIsCatS + xmlUCSIsCatSc + xmlUCSIsCatSk + xmlUCSIsCatSm + xmlUCSIsCatSo + xmlUCSIsCatZ + xmlUCSIsCatZl + xmlUCSIsCatZp + xmlUCSIsCatZs + xmlUCSIsCherokee + xmlUCSIsCombiningDiacriticalMarks + xmlUCSIsCombiningHalfMarks + xmlUCSIsCombiningMarksforSymbols + xmlUCSIsControlPictures + xmlUCSIsCurrencySymbols + xmlUCSIsCyrillic + xmlUCSIsDeseret + xmlUCSIsDevanagari + xmlUCSIsDingbats + xmlUCSIsEnclosedAlphanumerics + xmlUCSIsEnclosedCJKLettersandMonths + xmlUCSIsEthiopic + xmlUCSIsGeneralPunctuation + xmlUCSIsGeometricShapes + xmlUCSIsGeorgian + xmlUCSIsGothic + xmlUCSIsGreek + xmlUCSIsGreekExtended + xmlUCSIsGujarati + xmlUCSIsGurmukhi + xmlUCSIsHalfwidthandFullwidthForms + xmlUCSIsHangulCompatibilityJamo + xmlUCSIsHangulJamo + xmlUCSIsHangulSyllables + xmlUCSIsHebrew + xmlUCSIsHighPrivateUseSurrogates + xmlUCSIsHighSurrogates + xmlUCSIsHiragana + xmlUCSIsIPAExtensions + xmlUCSIsIdeographicDescriptionCharacters + xmlUCSIsKanbun + xmlUCSIsKangxiRadicals + xmlUCSIsKannada + xmlUCSIsKatakana + xmlUCSIsKhmer + xmlUCSIsLao + xmlUCSIsLatin1Supplement + xmlUCSIsLatinExtendedA + xmlUCSIsLatinExtendedAdditional + xmlUCSIsLatinExtendedB + xmlUCSIsLetterlikeSymbols + xmlUCSIsLowSurrogates + xmlUCSIsMalayalam + xmlUCSIsMathematicalAlphanumericSymbols + xmlUCSIsMathematicalOperators + xmlUCSIsMiscellaneousSymbols + xmlUCSIsMiscellaneousTechnical + xmlUCSIsMongolian + xmlUCSIsMusicalSymbols + xmlUCSIsMyanmar + xmlUCSIsNumberForms + xmlUCSIsOgham + xmlUCSIsOldItalic + xmlUCSIsOpticalCharacterRecognition + xmlUCSIsOriya + xmlUCSIsPrivateUse + xmlUCSIsRunic + xmlUCSIsSinhala + xmlUCSIsSmallFormVariants + xmlUCSIsSpacingModifierLetters + xmlUCSIsSpecials + xmlUCSIsSuperscriptsandSubscripts + xmlUCSIsSyriac + xmlUCSIsTags + xmlUCSIsTamil + xmlUCSIsTelugu + xmlUCSIsThaana + xmlUCSIsThai + xmlUCSIsTibetan + xmlUCSIsUnifiedCanadianAboriginalSyllabics + xmlUCSIsYiRadicals + xmlUCSIsYiSyllables + xmlBuildURI + xmlCreateURI + xmlFreeURI + xmlNormalizeURIPath + xmlParseURI + xmlParseURIReference + xmlPrintURI + xmlSaveUri + xmlURIEscape + xmlURIEscapeStr + xmlURIUnescapeString + UTF8Toisolat1 + isolat1ToUTF8 + xmlAddEncodingAlias + xmlCharEncCloseFunc + xmlCharEncFirstLine + xmlCharEncInFunc + xmlCharEncOutFunc + xmlCheckUTF8 + xmlCleanupCharEncodingHandlers + xmlCleanupEncodingAliases + xmlDelEncodingAlias + xmlDetectCharEncoding + xmlFindCharEncodingHandler + xmlGetCharEncodingHandler + xmlGetCharEncodingName + xmlGetEncodingAlias + xmlGetUTF8Char + xmlInitCharEncodingHandlers + xmlNewCharEncodingHandler + xmlParseCharEncoding + xmlRegisterCharEncodingHandler + xmlUTF8Strlen + xmlUTF8Strloc + xmlUTF8Strndup + xmlUTF8Strpos + xmlUTF8Strsize + xmlUTF8Strsub + + + xmlDeregisterNodeDefault + xmlDeregisterNodeDefaultValue + xmlRegisterNodeDefault + xmlRegisterNodeDefaultValue + xmlTextReaderClose + xmlTextReaderCurrentDoc + xmlTextReaderCurrentNode + xmlTextReaderGetAttributeNo + xmlTextReaderGetAttributeNs + xmlTextReaderGetAttribute + xmlTextReaderGetParserProp + xmlTextReaderGetRemainder + xmlTextReaderLookupNamespace + xmlTextReaderMoveToAttributeNo + xmlTextReaderMoveToAttributeNs + xmlTextReaderMoveToAttribute + xmlTextReaderMoveToElement + xmlTextReaderMoveToFirstAttribute + xmlTextReaderMoveToNextAttribute + xmlTextReaderNormalization + xmlTextReaderReadAttributeValue + xmlTextReaderReadInnerXml + xmlTextReaderReadOuterXml + xmlTextReaderReadState + xmlTextReaderReadString + xmlTextReaderSetParserProp + xmlValidatePopElement + xmlValidatePushCData + xmlValidatePushElement + + + xmlGetNoNsProp + htmlAttrAllowed + htmlElementAllowedHere + htmlElementStatusHere + htmlNodeStatus + xmlRelaxNGCleanupTypes + xmlRelaxNGDump + xmlRelaxNGFreeParserCtxt + xmlRelaxNGFree + xmlRelaxNGFreeValidCtxt + xmlRelaxNGNewMemParserCtxt + xmlRelaxNGNewParserCtxt + xmlRelaxNGNewValidCtxt + xmlRelaxNGParse + xmlRelaxNGSetParserErrors + xmlRelaxNGSetValidErrors + xmlRelaxNGValidateDoc + xmlTextReaderGetErrorHandler + xmlTextReaderLocatorBaseURI + xmlTextReaderLocatorLineNumber + xmlTextReaderSetErrorHandler + xmlRelaxNGValidateStream + + + xmlCanonicPath + xmlRelaxNGDumpTree + xmlValidateName + xmlValidateNCName + xmlValidateNMToken + xmlValidateQName + + + xmlNanoFTPDele + + + xmlXPathOrderDocElems + + + htmlCreateMemoryParserCtxt + xmlAutomataNewTransition2 + xmlBuildQName + xmlGcMemGet + xmlGcMemSetup + xmlMallocAtomic + xmlRegExecPushString2 + xmlRelaxNGNewDocParserCtxt + xmlRelaxNGValidateFullElement + xmlRelaxNGValidatePopElement + xmlRelaxNGValidatePushCData + xmlRelaxNGValidatePushElement + xmlTextReaderExpand + xmlTextReaderIsValid + xmlTextReaderNext + xmlTextReaderRelaxNGSetSchema + xmlTextReaderRelaxNGValidate + + + xmlCleanupGlobals + xmlInitGlobals + xmlFreeValidCtxt + xmlNewValidCtxt + xmlSchemaFreeType + xmlSchemaDump + xmlSchemaFreeParserCtxt + xmlSchemaFreeValidCtxt + xmlSchemaFree + xmlSchemaNewMemParserCtxt + xmlSchemaNewParserCtxt + xmlSchemaNewValidCtxt + xmlSchemaParse + xmlSchemaSetParserErrors + xmlSchemaSetValidErrors + xmlSchemaValidateDoc + xmlSchemaValidateStream + xmlSchemaCheckFacet + xmlSchemaCleanupTypes + xmlSchemaCompareValues + xmlSchemaFreeFacet + xmlSchemaFreeValue + xmlSchemaGetPredefinedType + xmlSchemaInitTypes + xmlSchemaNewFacet + xmlSchemaValidateFacet + xmlSchemaValidatePredefinedType + xmlSchemaValPredefTypeNode + xmlThrDefBufferAllocScheme + xmlThrDefDefaultBufferSize + xmlThrDefDeregisterNodeDefault + xmlThrDefDoValidityCheckingDefaultValue + xmlThrDefGetWarningsDefaultValue + xmlThrDefIndentTreeOutput + xmlThrDefKeepBlanksDefaultValue + xmlThrDefLineNumbersDefaultValue + xmlThrDefLoadExtDtdDefaultValue + xmlThrDefParserDebugEntities + xmlThrDefPedanticParserDefaultValue + xmlThrDefRegisterNodeDefault + xmlThrDefSaveNoEmptyTags + xmlThrDefSetGenericErrorFunc + xmlThrDefSubstituteEntitiesDefaultValue + xmlThrDefTreeIndentString + + + xmlMallocAtomicLoc + xmlRelaxNGGetParserErrors + xmlRelaxNGGetValidErrors + xmlSplitQName3 + xmlUTF8Charcmp + xmlUTF8Size + xmlXIncludeProcessTree + + + xmlSAX2AttributeDecl + xmlSAX2CDataBlock + xmlSAX2Characters + xmlSAX2Comment + xmlSAX2ElementDecl + xmlSAX2EndDocument + xmlSAX2EndElementNs + xmlSAX2EndElement + xmlSAX2EntityDecl + xmlSAX2ExternalSubset + xmlSAX2GetColumnNumber + xmlSAX2GetEntity + xmlSAX2GetLineNumber + xmlSAX2GetParameterEntity + xmlSAX2GetPublicId + xmlSAX2GetSystemId + xmlSAX2HasExternalSubset + xmlSAX2HasInternalSubset + xmlSAX2IgnorableWhitespace + xmlSAX2InitDefaultSAXHandler + xmlSAX2InitDocbDefaultSAXHandler + xmlSAX2InitHtmlDefaultSAXHandler + xmlSAX2InternalSubset + xmlSAX2IsStandalone + xmlSAX2NotationDecl + xmlSAX2ProcessingInstruction + xmlSAX2Reference + xmlSAX2ResolveEntity + xmlSAX2SetDocumentLocator + xmlSAX2StartDocument + xmlSAX2StartElementNs + xmlSAX2StartElement + xmlSAX2UnparsedEntityDecl + xmlSAXDefaultVersion + xmlSAXVersion + htmlCtxtReadDoc + htmlCtxtReadFd + htmlCtxtReadFile + htmlCtxtReadIO + htmlCtxtReadMemory + htmlCtxtReset + htmlCtxtUseOptions + htmlReadDoc + htmlReadFd + htmlReadFile + htmlReadIO + htmlReadMemory + xmlBufferCreateStatic + xmlCharInRange + xmlCheckHTTPInput + xmlCopyError + xmlCtxtGetLastError + xmlGetLastError + xmlResetError + xmlResetLastError + xmlSetStructuredErrorFunc + xmlCtxtReadDoc + xmlCtxtReadFd + xmlCtxtReadFile + xmlCtxtReadIO + xmlCtxtReadMemory + xmlCtxtResetLastError + xmlCtxtReset + xmlCtxtUseOptions + xmlReadDoc + xmlReadFd + xmlReadFile + xmlReadIO + xmlReadMemory + xmlStrPrintf + xmlStrQEqual + xmlDictCreate + xmlDictFree + xmlDictLookup + xmlDictOwns + xmlDictQLookup + xmlDictReference + xmlDictSize + xmlErrMemory + xmlParserMaxDepth + xmlStringLenDecodeEntities + xmlSwitchInputEncoding + xmlFreeTextWriter + xmlNewTextWriterFilename + xmlNewTextWriterMemory + xmlNewTextWriter + xmlTextWriterEndAttribute + xmlTextWriterEndCDATA + xmlTextWriterEndDocument + xmlTextWriterEndDTD + xmlTextWriterEndElement + xmlTextWriterEndPI + xmlTextWriterFlush + xmlTextWriterFullEndElement + xmlTextWriterStartAttributeNS + xmlTextWriterStartAttribute + xmlTextWriterStartCDATA + xmlTextWriterStartDocument + xmlTextWriterStartDTDAttlist + xmlTextWriterStartDTDElement + xmlTextWriterStartDTDEntity + xmlTextWriterStartDTD + xmlTextWriterStartElementNS + xmlTextWriterStartElement + xmlTextWriterStartPI + xmlTextWriterWriteAttributeNS + xmlTextWriterWriteAttribute + xmlTextWriterWriteBase64 + xmlTextWriterWriteBinHex + xmlTextWriterWriteCDATA + xmlTextWriterWriteComment + xmlTextWriterWriteDTDAttlist + xmlTextWriterWriteDTDElement + xmlTextWriterWriteDTDEntity + xmlTextWriterWriteDTDExternalEntity + xmlTextWriterWriteDTDInternalEntity + xmlTextWriterWriteDTDNotation + xmlTextWriterWriteDTD + xmlTextWriterWriteElementNS + xmlTextWriterWriteElement + xmlTextWriterWriteFormatAttributeNS + xmlTextWriterWriteFormatAttribute + xmlTextWriterWriteFormatCDATA + xmlTextWriterWriteFormatComment + xmlTextWriterWriteFormatDTDAttlist + xmlTextWriterWriteFormatDTDElement + xmlTextWriterWriteFormatDTDInternalEntity + xmlTextWriterWriteFormatDTD + xmlTextWriterWriteFormatElementNS + xmlTextWriterWriteFormatElement + xmlTextWriterWriteFormatPI + xmlTextWriterWriteFormatRaw + xmlTextWriterWriteFormatString + xmlTextWriterWritePI + xmlTextWriterWriteRawLen + xmlTextWriterWriteRaw + xmlTextWriterWriteString + xmlTextWriterWriteVFormatAttributeNS + xmlTextWriterWriteVFormatAttribute + xmlTextWriterWriteVFormatCDATA + xmlTextWriterWriteVFormatComment + xmlTextWriterWriteVFormatDTDAttlist + xmlTextWriterWriteVFormatDTDElement + xmlTextWriterWriteVFormatDTDInternalEntity + xmlTextWriterWriteVFormatDTD + xmlTextWriterWriteVFormatElementNS + xmlTextWriterWriteVFormatElement + xmlTextWriterWriteVFormatPI + xmlTextWriterWriteVFormatRaw + xmlTextWriterWriteVFormatString + xmlHashQLookup2 + xmlHashQLookup3 + xmlHashQLookup + xmlIsBaseCharGroup + xmlIsCharGroup + xmlIsCombiningGroup + xmlIsDigitGroup + xmlIsExtenderGroup + xmlIsIdeographicGroup + xmlIsPubidChar_tab + xmlLastError + xmlNanoHTTPEncoding + xmlNanoHTTPMimeType + xmlNanoHTTPRedir + xmlNodeBufGetContent + xmlParserInputBufferCreateStatic + xmlReaderForDoc + xmlReaderForFd + xmlReaderForFile + xmlReaderForIO + xmlReaderForMemory + xmlReaderNewDoc + xmlReaderNewFd + xmlReaderNewFile + xmlReaderNewIO + xmlReaderNewMemory + xmlReaderNewWalker + xmlReaderWalker + xmlTextReaderConstBaseUri + xmlTextReaderConstLocalName + xmlTextReaderConstNamespaceUri + xmlTextReaderConstName + xmlTextReaderConstPrefix + xmlTextReaderConstString + xmlTextReaderConstValue + xmlTextReaderConstXmlLang + xmlTextReaderNextSibling + xmlTextReaderPreserve + xmlStructuredError + xmlThrDefSetStructuredErrorFunc + xmlXPathErr + xmlSAX2CheckNamespace + xmlSAX2GetNamespace + xmlSAX2GlobalNamespace + xmlSAX2NamespaceDecl + xmlSAX2SetNamespace + + + xmlCtxtResetPush + + + xmlCreateURLParserCtxt + xmlSchemaNewDocParserCtxt + xmlStrVPrintf + xmlXIncludeFreeContext + xmlXIncludeNewContext + xmlXIncludeProcessNode + + + xmlFreePatternList + xmlFreePattern + xmlPatterncompile + xmlPatternMatch + xmlNewTextWriterDoc + xmlNewTextWriterPushParser + xmlNewTextWriterTree + xmlTextReaderPreservePattern + xmlUCSIsAegeanNumbers + xmlUCSIsBuhid + xmlUCSIsCombiningDiacriticalMarksforSymbols + xmlUCSIsCypriotSyllabary + xmlUCSIsCyrillicSupplement + xmlUCSIsGreekandCoptic + xmlUCSIsHanunoo + xmlUCSIsKatakanaPhoneticExtensions + xmlUCSIsKhmerSymbols + xmlUCSIsLimbu + xmlUCSIsLinearBIdeograms + xmlUCSIsLinearBSyllabary + xmlUCSIsMiscellaneousMathematicalSymbolsA + xmlUCSIsMiscellaneousMathematicalSymbolsB + xmlUCSIsMiscellaneousSymbolsandArrows + xmlUCSIsOsmanya + xmlUCSIsPhoneticExtensions + xmlUCSIsPrivateUseArea + xmlUCSIsShavian + xmlUCSIsSupplementalArrowsA + xmlUCSIsSupplementalArrowsB + xmlUCSIsSupplementalMathematicalOperators + xmlUCSIsSupplementaryPrivateUseAreaA + xmlUCSIsSupplementaryPrivateUseAreaB + xmlUCSIsTagalog + xmlUCSIsTagbanwa + xmlUCSIsTaiLe + xmlUCSIsTaiXuanJingSymbols + xmlUCSIsUgaritic + xmlUCSIsVariationSelectorsSupplement + xmlUCSIsVariationSelectors + xmlUCSIsYijingHexagramSymbols + xmlXIncludeProcessFlags + xmlXIncludeProcessTreeFlags + xmlXIncludeSetFlags + + + xmlCleanupMemory + xmlDictCreateSub + xmlRelaxParserSetFlag + xmlStrncatNew + xmlTextWriterSetIndentString + xmlTextWriterSetIndent + xmlXPathCtxtCompile + + + xmlAttrSerializeTxtContent + xmlByteConsumed + xmlTextReaderSetStructuredErrorHandler + + + xmlTextWriterEndComment + xmlTextWriterStartComment + + + xmlSaveClose + xmlSaveDoc + xmlSaveFlush + xmlSaveToFd + xmlSaveToFilename + xmlSaveToIO + xmlSaveTree + xmlTextWriterEndDTDAttlist + xmlTextWriterEndDTDElement + xmlTextWriterEndDTDEntity + xmlTextWriterWriteDTDExternalEntityContents + + + xmlOutputBufferWriteEscape + xmlPopInputCallbacks + xmlSaveSetAttrEscape + xmlSaveSetEscape + + + xmlBuildRelativeURI + xmlOutputBufferCreateFilenameDefault + xmlOutputBufferCreateFilenameValue + xmlParserInputBufferCreateFilenameDefault + xmlParserInputBufferCreateFilenameValue + xmlThrDefOutputBufferCreateFilenameDefault + xmlThrDefParserInputBufferCreateFilenameDefault + xmlSchemaFreeWildcard + xmlSchemaCollapseString + xmlSchemaGetBuiltInListSimpleTypeItemType + xmlSchemaGetBuiltInType + xmlSchemaIsBuiltInTypeFacet + xmlSchemaValidateListSimpleTypeFacet + + + xmlParseInNodeContext + xmlSchemaGetFacetValueAsULong + xmlSchemaValidateLengthFacet + xmlSchemaValPredefTypeNodeNoNorm + xmlSchemaGetParserErrors + xmlSchemaGetValidErrors + + + xmlAutomataNewCountTrans2 + xmlAutomataNewOnceTrans2 + xmlNanoHTTPContentLength + xmlSchemaSetValidOptions + xmlSchemaValidateOneElement + xmlSchemaValidCtxtGetOptions + + + xmlDebugCheckDocument + xmlDocCopyNodeList + xmlNewDocPI + xmlTextReaderConstEncoding + xmlTextReaderConstXmlVersion + xmlTextReaderIsNamespaceDecl + xmlTextReaderStandalone + + + xmlMemBlocks + xmlRelaxNGInitTypes + + + xmlDictExists + xmlModuleClose + xmlModuleFree + xmlModuleOpen + xmlModuleSymbol + xmlRegExecErrInfo + xmlRegExecNextValues + xmlSchemaWhiteSpaceReplace + xmlTextReaderGetParserColumnNumber + xmlTextReaderGetParserLineNumber + + + xmlCopyDocElementContent + xmlFreeDocElementContent + xmlNewDocElementContent + xmlDictCleanup + xmlHashCreateDict + xmlFreeStreamCtxt + xmlPatternFromRoot + xmlPatternGetStreamCtxt + xmlPatternMaxDepth + xmlPatternStreamable + xmlStreamPop + xmlStreamPushAttr + xmlStreamPush + xmlSchemaCompareValuesWhtsp + xmlSchemaCopyValue + xmlSchemaGetCanonValue + xmlSchemaNewNOTATIONValue + xmlSchemaNewStringValue + xmlTextReaderByteConsumed + + + xmlSchemaGetValType + xmlSchemaValidateFacetWhtsp + xmlSchemaValidateLengthFacetWhtsp + + + xmlDOMWrapAdoptNode + xmlDOMWrapFreeCtxt + xmlDOMWrapNewCtxt + xmlDOMWrapReconcileNamespaces + xmlDOMWrapRemoveNode + xmlSchemaGetCanonValueWhtsp + xmlSchemaNewQNameValue + xmlSchemaValueAppend + xmlSchemaValueGetAsBoolean + xmlSchemaValueGetAsString + xmlSchemaValueGetNext + xmlSchemaIsValid + xmlSchemaSAXPlug + xmlSchemaSAXUnplug + xmlSchemaValidateFile + xmlTextReaderSchemaValidate + xmlTextReaderSetSchema + + + xmlAutomataNewNegTrans + emptyExp + forbiddenExp + xmlExpCtxtNbCons + xmlExpCtxtNbNodes + xmlExpDump + xmlExpExpDerive + xmlExpFreeCtxt + xmlExpFree + xmlExpGetLanguage + xmlExpGetStart + xmlExpIsNillable + xmlExpMaxToken + xmlExpNewAtom + xmlExpNewCtxt + xmlExpNewOr + xmlExpNewRange + xmlExpNewSeq + xmlExpParse + xmlExpRef + xmlExpStringDerive + xmlExpSubsume + xmlHasFeature + xmlParseURIRaw + xmlPatternMinDepth + xmlRelaxNGSetValidStructuredErrors + xmlSchemaSetValidStructuredErrors + xmlSchematronFreeParserCtxt + xmlSchematronFree + xmlSchematronFreeValidCtxt + xmlSchematronNewDocParserCtxt + xmlSchematronNewMemParserCtxt + xmlSchematronNewParserCtxt + xmlSchematronNewValidCtxt + xmlSchematronParse + xmlSchematronValidateDoc + + + htmlDocDumpMemoryFormat + xmlOutputBufferCreateBuffer + xmlSaveToBuffer + xmlSchemaSetParserStructuredErrors + xmlStreamPushNode + xmlStreamWantsAnyNode + xmlTextReaderSchemaValidateCtxt + + + xmlDOMWrapCloneNode + xmlRelaxNGSetParserStructuredErrors + + + xmlXPathContextSetCache + + + htmlNewParserCtxt + xmlPathToURI + xmlXIncludeProcessFlagsData + xmlXPathCompiledEvalToBoolean + + + xmlTextReaderSetup + + + xmlDllMain + + + xmlSchematronSetValidStructuredErrors + + + xmlMemDisplayLast + xmlNewEntity + xmlSchemaValidCtxtGetParserCtxt + + + xmlChildElementCount + xmlFirstElementChild + xmlLastElementChild + xmlNextElementSibling + xmlPreviousElementSibling + + + xmlStructuredErrorContext + xmlXIncludeProcessTreeFlagsData + + + xmlTextReaderRelaxNGValidateCtxt + xmlBufferDetach + xmlInitializeDict + + + xmlBufContent + xmlBufEnd + xmlBufGetNodeContent + xmlBufNodeDump + xmlBufShrink + xmlBufUse + xmlDictGetUsage + xmlDictSetLimit + xmlSchemaValidateSetFilename + xmlSchemaValidateSetLocator + xmlOutputBufferGetContent + xmlOutputBufferGetSize + xmlTextWriterSetQuoteChar + + + xmlXPathNodeEval + xmlXPathSetContextNode + + diff --git a/doc/syms.xsl b/doc/syms.xsl new file mode 100644 index 0000000..ebca88f --- /dev/null +++ b/doc/syms.xsl @@ -0,0 +1,99 @@ + + + + + + + + # +# Officially exported symbols, for which header +# file definitions are installed in /usr/include/libxml2 +# +# Automatically generated from symbols.xml and syms.xsl +# +# Versions here are *fixed* to match the libxml2 version +# at which the symbol was introduced. This ensures that +# a new client app requiring symbol foo() can't accidentally +# run with old libxml2.so not providing foo() - the global +# soname version info can't enforce this since we never +# change the soname +# + + + + + + + + LIBXML2_ + + { + global: + + + + +# + + + + + + + + + } + + LIBXML2_ + + + ; + + + + + + + + + + # + + ; removed in + + + + + + + + + + Failed to find definition in libxml2-api.xml: + + + + + + + ; + + # variable + + + # + + + + + + + + + + + + diff --git a/doc/threads.html b/doc/threads.html new file mode 100644 index 0000000..f7ac957 --- /dev/null +++ b/doc/threads.html @@ -0,0 +1,30 @@ + + +Thread safety
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    The XML C parser and toolkit of Gnome

    Thread safety

    Developer Menu
    API Indexes
    Related links

    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:

      +
    • configure the library accordingly using the --with-threads options
    • +
    • call xmlInitParser() in the "main" thread before using any of the + libxml2 API (except possibly selecting a different memory allocator)
    • +

    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 <libxml/threads.h>. +The parts of the library checked for thread safety are:

      +
    • concurrent loading
    • +
    • file access resolution
    • +
    • catalog access
    • +
    • catalog building
    • +
    • entities lookup/accesses
    • +
    • validation
    • +
    • global variables per-thread override
    • +
    • memory handling
    • +

    XPath has been tested for threaded usage on non-modified document + for example when using libxslt, but make 100% sure the documents + are accessed read-only !

    Daniel Veillard

    diff --git a/doc/tree.html b/doc/tree.html new file mode 100644 index 0000000..3d289d8 --- /dev/null +++ b/doc/tree.html @@ -0,0 +1,53 @@ + + +The tree output
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    The XML C parser and toolkit of Gnome

    The tree output

    Developer Menu
    API Indexes
    Related links

    The parser returns a tree built during the document analysis. The value +returned is an xmlDocPtr (i.e., a pointer to an +xmlDoc structure). This structure contains information such +as the file name, the document type, and a children 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 xmlNodes, +chained in double-linked lists of siblings and with a children<->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.

    Here is an example (erroneous with respect to the XML spec since there +should be only one ELEMENT under the root):

     structure.gif

    In the source package there is a small program (not installed by default) +called xmllint 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 --debug +which prints the actual in-memory structure of the document; here is the +result with the example given before:

    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=...

    This should be useful for learning the internal representation model.

    Daniel Veillard

    diff --git a/doc/tutorial/apa.html b/doc/tutorial/apa.html new file mode 100644 index 0000000..964e15f --- /dev/null +++ b/doc/tutorial/apa.html @@ -0,0 +1,8 @@ +A. Compilation

    A. Compilation

    + Libxml includes a script, + xml2-config, that can be used to generate + flags for compilation and linking of programs written with the + library. For pre-processor and compiler flags, use xml2-config + --cflags. For library linking flags, use xml2-config + --libs. Other options are available using xml2-config + --help.

    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 @@ +B. Sample Document

    B. Sample Document

    +<?xml version="1.0"?>
    +<story>
    +  <storyinfo>
    +    <author>John Fleck</author>
    +    <datewritten>June 2, 2002</datewritten>
    +    <keyword>example keyword</keyword>
    +  </storyinfo>
    +  <body>
    +    <headline>This is the headline</headline>
    +    <para>This is the body text.</para>
    +  </body>
    +</story>
    +
    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 @@ +C. Code for Keyword Example

    C. Code for Keyword Example

    +

    +#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/apd.html b/doc/tutorial/apd.html new file mode 100644 index 0000000..8f9618d --- /dev/null +++ b/doc/tutorial/apd.html @@ -0,0 +1,76 @@ +D. Code for XPath Example

    D. Code for XPath Example

    +

    +#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);
    +	if (context == NULL) {
    +		printf("Error in xmlXPathNewContext\n");
    +		return NULL;
    +	}
    +	result = xmlXPathEvalExpression(xpath, context);
    +	xmlXPathFreeContext(context);
    +	if (result == NULL) {
    +		printf("Error in xmlXPathEvalExpression\n");
    +		return NULL;
    +	}
    +	if(xmlXPathNodeSetIsEmpty(result->nodesetval)){
    +		xmlXPathFreeObject(result);
    +                printf("No result\n");
    +		return NULL;
    +	}
    +	return result;
    +}
    +int
    +main(int argc, char **argv) {
    +
    +	char *docname;
    +	xmlDocPtr doc;
    +	xmlChar *xpath = (xmlChar*) "//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/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 @@ +E. Code for Add Keyword Example

    E. Code for Add Keyword Example

    +

    +#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/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 @@ +F. Code for Add Attribute Example

    F. Code for Add Attribute Example

    +

    +#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/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 @@ +G. Code for Retrieving Attribute Value Example

    G. Code for Retrieving Attribute Value Example

    +

    +#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/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 @@ +H. Code for Encoding Conversion Example

    H. Code for Encoding Conversion Example

    +

    +#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/api.html b/doc/tutorial/api.html new file mode 100644 index 0000000..16e7981 --- /dev/null +++ b/doc/tutorial/api.html @@ -0,0 +1,4 @@ +I. Acknowledgements

    I. Acknowledgements

    A number of people have generously offered feedback, code and + suggested improvements to this tutorial. In no particular order: + Daniel Veillard, Marcus Labib Iskander, Christopher R. Harris, Igor Zlatkovic, Niraj Tolia, David Turover +

    diff --git a/doc/tutorial/ar01s02.html b/doc/tutorial/ar01s02.html new file mode 100644 index 0000000..1e30a98 --- /dev/null +++ b/doc/tutorial/ar01s02.html @@ -0,0 +1,14 @@ +Data Types

    Data Types

    Libxml 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.

    +

    +xmlChar

    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 libxml's + functions. More information on encoding is available on the libxml encoding support web page.

    + xmlDoc

    A structure containing the tree created by a parsed doc. xmlDocPtr + is a pointer to the structure.

    +xmlNodePtr + and xmlNode

    A structure containing a single node. xmlNodePtr + is a pointer to the structure, and is used in traversing the document tree.

    +

    diff --git a/doc/tutorial/ar01s03.html b/doc/tutorial/ar01s03.html new file mode 100644 index 0000000..cd28fff --- /dev/null +++ b/doc/tutorial/ar01s03.html @@ -0,0 +1,47 @@ +Parsing the file

    Parsing the file

    +Parsing the file requires only the name of the file and a single + function call, plus error checking. Full code: Appendix C, Code for Keyword Example

    +

    +        1 xmlDocPtr doc;
    +	2 xmlNodePtr cur;
    +
    +	3 doc = xmlParseFile(docname);
    +	
    +	4 if (doc == NULL ) {
    +		fprintf(stderr,"Document not parsed successfully. \n");
    +		return;
    +	}
    +
    +	5 cur = xmlDocGetRootElement(doc);
    +	
    +	6 if (cur == NULL) {
    +		fprintf(stderr,"empty document\n");
    +		xmlFreeDoc(doc);
    +		return;
    +	}
    +	
    +	7 if (xmlStrcmp(cur->name, (const xmlChar *) "story")) {
    +		fprintf(stderr,"document of the wrong type, root node != story");
    +		xmlFreeDoc(doc);
    +		return;
    +	}
    +
    +    

    +

    1

    Declare the pointer that will point to your parsed document.

    2

    Declare a node pointer (you'll need this in order to + interact with individual nodes).

    4

    Check to see that the document was successfully parsed. If it + was not, libxml will at this point + register an error and stop. +

    [Note]Note

    +One common example of an error at this point is improper + handling of encoding. The XML 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, libxml will + automatically perform the necessary conversion to UTF-8 for + you. More information on XML's encoding + requirements is contained in the standard.

    +

    5

    Retrieve the document's root element.

    6

    Check to make sure the document actually contains something.

    7

    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.

    + +

    diff --git a/doc/tutorial/ar01s04.html b/doc/tutorial/ar01s04.html new file mode 100644 index 0000000..11492eb --- /dev/null +++ b/doc/tutorial/ar01s04.html @@ -0,0 +1,54 @@ +Retrieving Element Content

    Retrieving Element Content

    +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 doc + and an xmlNodPtr called cur.

    +

    +	1cur = cur->xmlChildrenNode;
    +	2while (cur != NULL) {
    +		if ((!xmlStrcmp(cur->name, (const xmlChar *)"storyinfo"))){
    +			parseStory (doc, cur);
    +		}
    +		 
    +	cur = cur->next;
    +	}
    +      

    + +

    1

    Get the first child node of cur. At this + point, cur points at the document root, which is + the element "story".

    2

    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 libxml string + comparison + function, xmlStrcmp. If there is a match, it calls the function parseStory.

    +

    +

    +void
    +parseStory (xmlDocPtr doc, xmlNodePtr cur) {
    +
    +	xmlChar *key;
    +	1 cur = cur->xmlChildrenNode;
    +	2 while (cur != NULL) {
    +	    if ((!xmlStrcmp(cur->name, (const xmlChar *)"keyword"))) {
    +	3	    key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
    +		    printf("keyword: %s\n", key);
    +		    xmlFree(key);
    + 	    }
    +	cur = cur->next;
    +	}
    +    return;
    +}
    +      

    +

    1

    Again we get the first child node.

    2

    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".

    3

    When we find the "keyword" element, we need to print + its contents. Remember that in XML, the text + contained within an element is a child node of that element, so we + turn to cur->xmlChildrenNode. To retrieve it, we + use the function xmlNodeListGetString, which also takes the doc pointer as an argument. In this case, we just print it out.

    [Note]Note

    Because xmlNodeListGetString allocates + memory for the string it returns, you must use + xmlFree to free it.

    +

    diff --git a/doc/tutorial/ar01s05.html b/doc/tutorial/ar01s05.html new file mode 100644 index 0000000..1c40925 --- /dev/null +++ b/doc/tutorial/ar01s05.html @@ -0,0 +1,55 @@ +Using XPath to Retrieve Element Content

    Using XPath to Retrieve Element Content

    In addition to walking the document tree to find an element, + Libxml2 includes support for + use of XPath expressions to retrieve sets of + nodes that match a specified criteria. Full documentation of the + XPath API is here. +

    XPath 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 keyword + elements. +

    [Note]Note

    A full discussion of XPath is beyond + the scope of this document. For details on its use, see the XPath specification.

    + Full code for this example is at Appendix D, Code for XPath Example. +

    Using XPath requires setting up an + xmlXPathContext and then supplying the XPath + expression and the context to the + xmlXPathEvalExpression function. The function returns + an xmlXPathObjectPtr, which includes the set of nodes satisfying the + XPath expression.

    +

    +	xmlXPathObjectPtr
    +	getnodeset (xmlDocPtr doc, xmlChar *xpath){
    +	
    +	1xmlXPathContextPtr context;
    +	xmlXPathObjectPtr result;
    +
    +	2context = xmlXPathNewContext(doc);
    +	3result = xmlXPathEvalExpression(xpath, context);
    +	4if(xmlXPathNodeSetIsEmpty(result->nodesetval)){
    +		xmlXPathFreeObject(result);
    +                printf("No result\n");
    +		return NULL;
    +      

    +

    1

    First we declare our variables.

    2

    Initialize the context variable.

    3

    Apply the XPath expression.

    4

    Check the result and free the memory allocated to + result if no result is found.

    +

    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 + xmlXPathObjectPtr. We use it to print the contents of + keyword nodes in our document. The node set object + includes the number of elements in the set (nodeNr) and + an array of nodes (nodeTab): +

    +	1for (i=0; i < nodeset->nodeNr; i++) {
    +	2keyword = xmlNodeListGetString(doc, nodeset->nodeTab[i]->xmlChildrenNode, 1);
    +		printf("keyword: %s\n", keyword);
    +	        xmlFree(keyword);
    +	}
    +      

    +

    1

    The value of nodeset->Nr holds the number of + elements in the node set. Here we use it to iterate through the array.

    2

    Here we print the contents of each of the nodes returned. +

    [Note]Note

    Note that we are printing the child node of the node that is + returned, because the contents of the keyword + element are a child text node.

    +

    +

    diff --git a/doc/tutorial/ar01s06.html b/doc/tutorial/ar01s06.html new file mode 100644 index 0000000..c09e6ef --- /dev/null +++ b/doc/tutorial/ar01s06.html @@ -0,0 +1,35 @@ +Writing element content

    Writing element content

    + Writing element content uses many of the same steps we used above + — 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: + Appendix E, Code for Add Keyword Example

    + The main difference in this example is in + parseStory: + +

    +void
    +parseStory (xmlDocPtr doc, xmlNodePtr cur, char *keyword) {
    +
    +	1 xmlNewTextChild (cur, NULL, "keyword", keyword);
    +    return;
    +}
    +      

    +

    1

    The xmlNewTextChild + function adds a new child element at the + current node pointer's location in the + tree, specified by cur.

    +

    + + 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. +

    +	xmlSaveFormatFile (docname, doc, 1);
    +      

    + 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. +

    diff --git a/doc/tutorial/ar01s07.html b/doc/tutorial/ar01s07.html new file mode 100644 index 0000000..fd5c4dd --- /dev/null +++ b/doc/tutorial/ar01s07.html @@ -0,0 +1,30 @@ +Writing Attribute

    Writing Attribute

    +Writing an attribute is similar to writing text to a new element. In + this case, we'll add a reference URI to our + document. Full code:Appendix F, Code for Add Attribute Example.

    + A reference is a child of the story + 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 + parseDoc, 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: +

    +	xmlAttrPtr newattr;
    +      

    + We also need an extra xmlNodePtr: +

    +	xmlNodePtr newnode;
    +      

    +

    + The rest of parseDoc is the same as before until we + check to see if our root element is story. If it is, + then we know we are at the right spot to add our element: + +

    +	1 newnode = xmlNewTextChild (cur, NULL, "reference", NULL);
    +	2 newattr = xmlNewProp (newnode, "uri", uri);	
    +      

    +

    1

    First we add a new node at the location of the current node + pointer, cur. using the xmlNewTextChild function.

    +

    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.

    diff --git a/doc/tutorial/ar01s08.html b/doc/tutorial/ar01s08.html new file mode 100644 index 0000000..758f811 --- /dev/null +++ b/doc/tutorial/ar01s08.html @@ -0,0 +1,38 @@ +Retrieving Attributes

    Retrieving Attributes

    +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 URI we added in the previous + section. Full code: Appendix G, Code for Retrieving Attribute Value Example.

    + 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 + getReference: +

    +void
    +getReference (xmlDocPtr doc, xmlNodePtr cur) {
    +
    +	xmlChar *uri;
    +	cur = cur->xmlChildrenNode;
    +	while (cur != NULL) {
    +	    if ((!xmlStrcmp(cur->name, (const xmlChar *)"reference"))) {
    +		   1 uri = xmlGetProp(cur, "uri");
    +		    printf("uri: %s\n", uri);
    +		    xmlFree(uri);
    +	    }
    +	    cur = cur->next;
    +	}
    +	return;
    +}
    +      

    + +

    1

    + The key function is xmlGetProp, which returns an + xmlChar containing the attribute's value. In this case, + we just print it out. +

    [Note]Note

    + If you are using a DTD that declares a fixed or + default value for the attribute, this function will retrieve it. +

    +

    + +

    diff --git a/doc/tutorial/ar01s09.html b/doc/tutorial/ar01s09.html new file mode 100644 index 0000000..2987add --- /dev/null +++ b/doc/tutorial/ar01s09.html @@ -0,0 +1,63 @@ +Encoding Conversion

    Encoding Conversion

    +Data encoding compatibility problems are one of the most common + difficulties encountered by programmers new to XML in + general and libxml in particular. Thinking + through the design of your application in light of this issue will help + avoid difficulties later. Internally, libxml + 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 libxml + functions. If you want your program's output in an encoding other than + UTF-8, you also must convert it.

    Libxml uses + iconv if it is available to convert + data. Without iconv, only UTF-8, UTF-16 and + ISO-8859-1 can be used as external formats. With + iconv, any format can be used provided + iconv is able to convert it to and from + UTF-8. Currently iconv 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 + iconv implementation is almost guaranteed to + support every format anyone has ever heard of.

    [Warning]Warning

    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 + libxml, 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. +

    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 stdout 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: Appendix H, Code for Encoding Conversion Example

    The conversion, encapsulated in the example code in the + convert function, uses + libxml's + xmlFindCharEncodingHandler function: +

    +	1xmlCharEncodingHandlerPtr handler;
    +        2size = (int)strlen(in)+1; 
    +        out_size = size*2-1; 
    +        out = malloc((size_t)out_size); 
    +
    +…
    +	3handler = xmlFindCharEncodingHandler(encoding);
    +…
    +	4handler->input(out, &out_size, in, &temp);
    +…	
    +	5xmlSaveFormatFileEnc("-", doc, encoding, 1);
    +      

    +

    1

    handler is declared as a pointer to an + xmlCharEncodingHandler function.

    2

    The xmlCharEncodingHandler function needs + to be given the size of the input and output strings, which are + calculated here for strings in and + out.

    3

    xmlFindCharEncodingHandler takes as its + argument the data's initial encoding and searches + libxml's built-in set of conversion + handlers, returning a pointer to the function or NULL if none is + found.

    4

    The conversion function identified by handler + 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.

    5

    To output in a specified encoding rather than UTF-8, we use + xmlSaveFormatFileEnc, specifying the + encoding.

    +

    diff --git a/doc/tutorial/customfo.xsl b/doc/tutorial/customfo.xsl new file mode 100644 index 0000000..1ea8247 --- /dev/null +++ b/doc/tutorial/customfo.xsl @@ -0,0 +1,22 @@ + + + + + + +0 + + +1 +0 + + +2in +2in + + +1 + + + \ No newline at end of file diff --git a/doc/tutorial/customhtml.xsl b/doc/tutorial/customhtml.xsl new file mode 100644 index 0000000..4837468 --- /dev/null +++ b/doc/tutorial/customhtml.xsl @@ -0,0 +1,18 @@ + + + + + + +1 + + +1 + + + + + + + \ No newline at end of file diff --git a/doc/tutorial/images/blank.png b/doc/tutorial/images/blank.png new file mode 100644 index 0000000..764bf4f Binary files /dev/null and b/doc/tutorial/images/blank.png differ diff --git a/doc/tutorial/images/callouts/1.png b/doc/tutorial/images/callouts/1.png new file mode 100644 index 0000000..7d47343 Binary files /dev/null and b/doc/tutorial/images/callouts/1.png differ diff --git a/doc/tutorial/images/callouts/10.png b/doc/tutorial/images/callouts/10.png new file mode 100644 index 0000000..997bbc8 Binary files /dev/null and b/doc/tutorial/images/callouts/10.png differ diff --git a/doc/tutorial/images/callouts/2.png b/doc/tutorial/images/callouts/2.png new file mode 100644 index 0000000..5d09341 Binary files /dev/null and b/doc/tutorial/images/callouts/2.png differ diff --git a/doc/tutorial/images/callouts/3.png b/doc/tutorial/images/callouts/3.png new file mode 100644 index 0000000..ef7b700 Binary files /dev/null and b/doc/tutorial/images/callouts/3.png differ diff --git a/doc/tutorial/images/callouts/4.png b/doc/tutorial/images/callouts/4.png new file mode 100644 index 0000000..adb8364 Binary files /dev/null and b/doc/tutorial/images/callouts/4.png differ diff --git a/doc/tutorial/images/callouts/5.png b/doc/tutorial/images/callouts/5.png new file mode 100644 index 0000000..4d7eb46 Binary files /dev/null and b/doc/tutorial/images/callouts/5.png differ diff --git a/doc/tutorial/images/callouts/6.png b/doc/tutorial/images/callouts/6.png new file mode 100644 index 0000000..0ba694a Binary files /dev/null and b/doc/tutorial/images/callouts/6.png differ diff --git a/doc/tutorial/images/callouts/7.png b/doc/tutorial/images/callouts/7.png new file mode 100644 index 0000000..472e96f Binary files /dev/null and b/doc/tutorial/images/callouts/7.png differ diff --git a/doc/tutorial/images/callouts/8.png b/doc/tutorial/images/callouts/8.png new file mode 100644 index 0000000..5e60973 Binary files /dev/null and b/doc/tutorial/images/callouts/8.png differ diff --git a/doc/tutorial/images/callouts/9.png b/doc/tutorial/images/callouts/9.png new file mode 100644 index 0000000..a0676d2 Binary files /dev/null and b/doc/tutorial/images/callouts/9.png differ diff --git a/doc/tutorial/images/caution.png b/doc/tutorial/images/caution.png new file mode 100644 index 0000000..5b7809c Binary files /dev/null and b/doc/tutorial/images/caution.png differ diff --git a/doc/tutorial/images/draft.png b/doc/tutorial/images/draft.png new file mode 100644 index 0000000..0084708 Binary files /dev/null and b/doc/tutorial/images/draft.png differ diff --git a/doc/tutorial/images/home.png b/doc/tutorial/images/home.png new file mode 100644 index 0000000..cbb711d Binary files /dev/null and b/doc/tutorial/images/home.png differ diff --git a/doc/tutorial/images/important.png b/doc/tutorial/images/important.png new file mode 100644 index 0000000..12c90f6 Binary files /dev/null and b/doc/tutorial/images/important.png differ diff --git a/doc/tutorial/images/next.png b/doc/tutorial/images/next.png new file mode 100644 index 0000000..45835bf Binary files /dev/null and b/doc/tutorial/images/next.png differ diff --git a/doc/tutorial/images/note.png b/doc/tutorial/images/note.png new file mode 100644 index 0000000..d0c3c64 Binary files /dev/null and b/doc/tutorial/images/note.png differ diff --git a/doc/tutorial/images/prev.png b/doc/tutorial/images/prev.png new file mode 100644 index 0000000..cf24654 Binary files /dev/null and b/doc/tutorial/images/prev.png differ diff --git a/doc/tutorial/images/tip.png b/doc/tutorial/images/tip.png new file mode 100644 index 0000000..5c4aab3 Binary files /dev/null and b/doc/tutorial/images/tip.png differ diff --git a/doc/tutorial/images/toc-blank.png b/doc/tutorial/images/toc-blank.png new file mode 100644 index 0000000..6ffad17 Binary files /dev/null and b/doc/tutorial/images/toc-blank.png differ diff --git a/doc/tutorial/images/toc-minus.png b/doc/tutorial/images/toc-minus.png new file mode 100644 index 0000000..abbb020 Binary files /dev/null and b/doc/tutorial/images/toc-minus.png differ diff --git a/doc/tutorial/images/toc-plus.png b/doc/tutorial/images/toc-plus.png new file mode 100644 index 0000000..941312c Binary files /dev/null and b/doc/tutorial/images/toc-plus.png differ diff --git a/doc/tutorial/images/up.png b/doc/tutorial/images/up.png new file mode 100644 index 0000000..07634de Binary files /dev/null and b/doc/tutorial/images/up.png differ diff --git a/doc/tutorial/images/warning.png b/doc/tutorial/images/warning.png new file mode 100644 index 0000000..1c33db8 Binary files /dev/null and b/doc/tutorial/images/warning.png 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 @@ + +#include +#include +#include +#include + + +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 @@ + +#include +#include +#include +#include + +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 @@ + +#include + + +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 @@ + +#include +#include +#include +#include + +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 @@ + +#include +#include +#include +#include + +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/includestory.xml b/doc/tutorial/includestory.xml new file mode 100644 index 0000000..2a22c89 --- /dev/null +++ b/doc/tutorial/includestory.xml @@ -0,0 +1,14 @@ + + + + John Fleck + June 2, 2002 + example keyword + + + This is the headline + This is the body text. + + +]]> \ No newline at end of file diff --git a/doc/tutorial/includexpath.c b/doc/tutorial/includexpath.c new file mode 100644 index 0000000..6b66e60 --- /dev/null +++ b/doc/tutorial/includexpath.c @@ -0,0 +1,74 @@ + +#include + +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); + if (context == NULL) { + printf("Error in xmlXPathNewContext\n"); + return NULL; + } + result = xmlXPathEvalExpression(xpath, context); + xmlXPathFreeContext(context); + if (result == NULL) { + printf("Error in xmlXPathEvalExpression\n"); + return NULL; + } + if(xmlXPathNodeSetIsEmpty(result->nodesetval)){ + xmlXPathFreeObject(result); + printf("No result\n"); + return NULL; + } + return result; +} +int +main(int argc, char **argv) { + + char *docname; + xmlDocPtr doc; + xmlChar *xpath = (xmlChar*) "//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); +} +]]> \ No newline at end of file diff --git a/doc/tutorial/index.html b/doc/tutorial/index.html new file mode 100644 index 0000000..51fd481 --- /dev/null +++ b/doc/tutorial/index.html @@ -0,0 +1,14 @@ +Libxml Tutorial

    Libxml Tutorial

    John Fleck

    Revision History
    Revision 1June 4, 2002
    Initial draft
    Revision 2June 12, 2002
    retrieving attribute value added
    Revision 3Aug. 31, 2002
    freeing memory fix
    Revision 4Nov. 10, 2002
    encoding discussion added
    Revision 5Dec. 15, 2002
    more memory freeing changes
    Revision 6Jan. 26. 2003
    add index
    Revision 7April 25, 2003
    add compilation appendix
    Revision 8July 24, 2003
    add XPath example
    Revision 9Feb. 14, 2004
    Fix bug in XPath example
    Revision 7Aug. 24, 2004
    Fix another bug in XPath example

    Abstract

    Libxml is a freely licensed C language library for handling + XML, portable across a large number of platforms. This + tutorial provides examples of its basic functions.

    Introduction

    Libxml is a C language library implementing functions for reading, + creating and manipulating XML data. This tutorial + provides example code and explanations of its basic functionality.

    Libxml and more details about its use are available on the project home page. Included there is complete + API documentation. 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. + +

    The tutorial is based on a simple XML application I + use for articles I write. The format includes metadata and the body + of the article.

    The example code in this tutorial demonstrates how to: +

    • Parse the document.

    • Extract the text within a specified element.

    • Add an element and its content.

    • Add an attribute.

    • Extract the value of an attribute.

    +

    Full code for the examples is included in the appendices.

    diff --git a/doc/tutorial/ix01.html b/doc/tutorial/ix01.html new file mode 100644 index 0000000..fca9d42 --- /dev/null +++ b/doc/tutorial/ix01.html @@ -0,0 +1 @@ +Index

    Index

    A

    attribute
    retrieving value, Retrieving Attributes
    writing, Writing Attribute

    C

    compiler flags, Compilation

    E

    element
    retrieving content, Retrieving Element Content
    writing content, Writing element content
    encoding, Parsing the file, Encoding Conversion

    X

    xmlChar, Data Types
    xmlDoc, Data Types
    xmlNodePtr, Data Types
    diff --git a/doc/tutorial/xmltutorial.pdf b/doc/tutorial/xmltutorial.pdf new file mode 100644 index 0000000..967d445 --- /dev/null +++ b/doc/tutorial/xmltutorial.pdf @@ -0,0 +1,1336 @@ +%PDF-1.3 +%ª«¬­ +4 0 obj +<< /Type /Info +/Producer (FOP 0.20.5) >> +endobj +5 0 obj +<< /Length 1748 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +Gb"/*>Edeu'RnB3cso,c'tRV<@2QG"Te1sI,sZ*n#KKlNVMQ<5BAq5!'k+!#c"8(NNgbpHe&;a;1aP(M@rJfk-$BS+$?JcRY,(_A6k,SUN`TO7efXhh3i=3:BXHM%E2OW]0H+sk$H[O\XG#u0mW@.r"s`W.g99!tcR*(\/("@>q@BW^Q2G*D>/#n3]_.il=X.o?OD#U^04dS]Ss+,a%^lQgnf/]&ceW@ko*%B0QokTBn:$jairCK+PLS%Cdch@t;kIOGu!8)fQ]DhR/U#>#9%l:;J>aO=nBdX8N?;VToPUM@?BfP;2DbSCG8.#;H:nr:@X[RoUP5#8V!2XYms3+,Pg+L(An4XOouF2iL@.s#m5[\'e,fq`PS,Y"o@$je=#b?gu9;/r=qMt:mb%%G5$FjcsdUbn".i6X#Km]hZSOE(i@A:'C!]#YQVN-&c&_nu&jGD2gg2I,X>Af/QL5%8n)7XSCb0W0Z8*)+\&9B^bTmkJ.5_$RWeH_2p2XZM9@ot$UX[_53q*&3VO&J)5%86Y$AZWkI@N:&FKcs%p6WMQCcUFbh8)(40P\*ZA"bb8R+Uti6J;Fdmlr'!#08-$\rUW.S*`0l$l7lOkfeCu3KUG37:dV;6?`SiLnX36m\Ar>kEqpnE4+,0ZZ3>mbtc]/Ye]ERO8`($8oE>X;g2g1^GaWe,."f\E*6Km3M;^8S1^,jb5M4kL$muHb\#!ZDs2A'bm;94ZWTnMuE=%!9!G)bJEiSMujhEeJoj\[m_?-@s8c*.C1268G+TV1+An"dq!66BOQ/uWk*6"Zr]hpdqsAYX6mH:4q,p%/mN/clgm6_*Vk"=D&P?A)R&GV[-;l5h5dH^[E8!6^O+q)a!Ngs^]Q]QTYaG>BGrFu +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 336.111 193.44 326.111 ] +/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 325.111 189.82 315.111 ] +/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 314.111 204.55 304.111 ] +/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 303.111 256.22 293.111 ] +/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 292.111 312.05 282.111 ] +/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 281.111 241.21 271.111 ] +/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 270.111 213.72 260.111 ] +/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 259.111 228.72 249.111 ] +/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 248.111 230.94 238.111 ] +/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 237.111 206.23 227.111 ] +/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 226.111 229.83 216.111 ] +/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 215.111 268.7 205.111 ] +/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 204.111 257.04 194.111 ] +/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 193.111 287.86 183.111 ] +/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 182.111 286.21 172.111 ] +/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 171.111 339.25 161.111 ] +/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 160.111 318.98 150.111 ] +/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 149.111 231.76 139.111 ] +/C [ 0 0 0 ] +/Border [ 0 0 0 ] +/A 43 0 R +/H /I +>> +endobj +44 0 obj +<< /Length 1970 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +Gat=,=c_>r%"@)@iO:/L`pnKL/_:&.,f(7`!X7:ABPbqR$=B([4oTk@OWIA+4)'QU(?B+bQUm"&pP5fY2lRStIc)5A=+PRF'mbH1$b\5c1meN1+6MFRp&93T.bTmCC[Xt;`dSL&60,^g0&&(*cX!K=g*;q:et62rBUCjRZ5n?05Ff\bT:/_4"`%09AcElf^08^P=?A?TFKJcGeUf"b7J5C3b<,X-$:\'NQXH>\Y#;"_As:Kf[l:Q."b%M*F!R*3AN'##69g9!fQc."g"2G@I+`7q@&5U'r$"^?k@\d^C1kkf4S(@Gq.OJSaUa\R=EctaF!:u9NfqLs,%M0\b<%#]H])4C,>^$F,<;gtL22]H)KKDnY251JPZj\_eqmgMQE@Du&XI!2GcuSro%=1]VO6g=97Burk(cB>ITR8R9JdtsHgE+k=Y'S]VNL4U<"+-#;V85td%%r\Xj6![NqhME,!+"t90\oA1k+o'>"$rlgTG:gRa:t%=mj>_$I7F/7j+`9b?+Xi^hU:Bh;,1@e9s4!-,?0#(UN<#4[8>'Q@NK56"R\7)dp;4j$:,H[&4!7)rI?Y68=RN#]qkrdkK@JH&pq:D`NOOr+d=Y[c]gWC-oViQH)!;CLs;hDhq)GuRnlk89ZK>+-C0.HtfRmQ5LA[Kn^hXV3ei2*!;C1nA4A`m2C'q29lVD77t>J8P9p3`RP`$hQgfWHkO#_dki3GO?PeZMhFM?]pW-r6Hc`op.:b4a0TfB(JojgKl7A\h!I&P;]dG4)u'c,+fp1G+Abf*8ZAaTcL,fGt;[+lkrH>\r;ljeq11PAF>FXedJZ;>Z&l)EkXRIf\Ha:#=XgB)1-Z]&q+"bP*.A&V'C_X"L7PlNNX?lVp91%H1n=Yn]oa#3@,Ib&J[LZUmFMg?jPEDa2sgp0db=,c^&1/*9LC9rV/n?;UW_\>iXRc"`1qPj8u)8'H'Dq?7ZQ\j`KtH<>V9O@M`ZPm(VaoFUW4Y&A;KK>o#o*Rsd0gnWrK?R;#r`((7;dH8YnLcA1=o[9G:t*4EBVooVn0Ia'=2/(T5?Q`5l'GhY +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 +] +endobj +47 0 obj +<< /Type /Annot +/Subtype /Link +/Rect [ 384.46 600.674 473.05 590.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 589.674 331.744 579.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 251.348 179.0 241.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 207.348 469.722 197.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 196.348 282.88 186.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 175.348 176.22 165.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 164.348 327.33 154.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 143.348 192.89 133.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 143.348 231.22 133.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 132.348 165.66 122.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 143.348 473.402 133.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 +<< /Length 2255 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +Gat$:CN%rcn9]V)f)7lYMf=BOaGonl2NeL#u91a,^@K1brQZuE0=@IajGN?FZ4NajnBA_M>$dU!$+"`eJ1M:]Ojt7YKEu/OYS42f>`:;^:<_db'E9`C7D86c>iM!V?%pq(j]8(TmjVJ@/hO"p#j@3$Cj)4QYlBcgmo5=D]d<8.JRsJY8>L4/XA88AID>np@tONC8KI)bAGC3$m"!ol?'^:h?4-6L<"E#a5rAX2ShL+&_V,VqYEtn>0Fj43E%+&Ekf?Li<4)g$teS2lhk6>sg2KSjV/BMUnok;DSIBKIbUhDRqs.9s]Bp3=r"*W]mmU)T`L'&is2[VesK?nNlQW+Uahq#nVnFM-VB)JSoeo1rq&7<6]P/6JJ0/D,$3%QY<05[,$Bu^Ae]k+F4_O=l2g^<#2LmSAW:Dg?r!I#$;1'RT^-d;:$PNM0SfjJc!"cQZR?[dCCA/snB&hh'4#.+2d?roNc-)'@gK;cN$J7'="QakeCFunHn=1U3USH&9&$/,lqM)"Y'4*H3g)qD<)kXPS;]okLL`JWqWMRlE%3`n0@O6tXU$U;4<#MC&G$?d=.VcSME<\3sIPJl.7[CM!ZS1#ahHq'0`Oa78ENU_Er5@;9oP[b`k;X'n*oo_28P_AZ;d>63&TeE_^UH_:)bSM4b*=#7>H"2PAtLr:%D#t"8/uEm0)SGaq+.A4rZ_<:#;WB`mk28O`#XYBYHe(CXl;7[=Zmnf>CFp_Qk&EE2=-\/)BUG5CgE:$^ea!Vce4,h-eulDr1h9jd6+g2s43i!`Z.X^b9(aAqnjcQ@#)-c0&?Xo*d_B%7i[ujL\pI$,cZci6BNbt0l'I+Bi.ml?R'^Z`)<2DCRJKmENilV[D6AmL%9&fp=rSnhn:Er+E!o"Oe/%nf]X^Y]=[(V],=KW>)Qr9^.hEfHP[P0--L4i9JHYLN4q+nC%k"+67D6+u7]g3=L*SSkBV;5s=(V;;;%S/O/rCA\tC;K[g]Og43!D]U)&(IYu4,t5,Q"4p=_kW]Kf37`!Q/i=UI(]S\AY3NrUr9n?lPpei&m6CoL!F`f1+bJ$84s'f0tU@=jQIjTU("RUJle@h7c`d.fuADeA4tVEWS[5H-"W0_a^lq5DI(Z2_DWJIGhSjqc(nY"rdP.V*G7.LOF'0]?;ZgSME\LiNLcOJ+n?Na8g7&Y@WgLo39FL'PQ9aFr##"lo'oaIMH0MX/E.nHkg4Ja0!6:N$p!WhL5inlikLtQKUXVR8#9Lh=1YEJL(oo\t'U@@iK;.=#g=V3+>Aj=?H/_SNohk*67B;HjI&#_:l42+^]%"B)M<=5DK%T79CZ_=P(W3NMU6`#oPccelH<4)5@*IX4oI:AR5OYQ=li?mjlg"1":[Y00-:\@)_A>F8"AAX!RU?Ocn3'i?Sh%Z1?T8k[CjJ%Hk6[#]Abe7DpY5@:0R%J)<$X+,\`)9`~> +endstream +endobj +59 0 obj +<< /Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 612 792 ] +/Resources 3 0 R +/Contents 58 0 R +/Annots 60 0 R +>> +endobj +60 0 obj +[ +61 0 R +62 0 R +] +endobj +61 0 obj +<< /Type /Annot +/Subtype /Link +/Rect [ 249.81 674.674 414.8 664.674 ] +/C [ 0 0 0 ] +/Border [ 0 0 0 ] +/A 31 0 R +/H /I +>> +endobj +62 0 obj +<< /Type /Annot +/Subtype /Link +/Rect [ 361.83 222.18 395.71 212.18 ] +/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 2246 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +Gau0ED/\/e&H88.i?T1`KZ:@;DYDi(6aa\!>qr$"?Y%npAuc0WfOT1=I4j@Nj)4aBQ+q3Pa3(aUU75?9EhY]l!(_GIo\i/[M"`c&W]oL@>WG])@66`>;!2H^Tuf2u+>EkCXSYS$Jd,P;E2f]]etge+?UA!d^F52EY@d6K^eU5Ao`BTU$H"J%tJ);S?DXeUbSelaNNpNBJ:qjS%,84V;iGk6&C/X=k"Ec0X*j/C,d`ch#rca=9PGr$LkQM(\i=)+LfKG,7,5mV3ukqfp2#4k[g+o[g^=T[UHJ0EXb!&7_2]id]cpVh;;n>n+oX=-TgO"HeIrM%V&aG9Ym?8^oG@Nk%=e4V_YOgd_#ac6BF,E@*'](*M^fsd4%&6;Ho*r8-JYbRJc!Rr?YK0@8i]-$F+&X!">e:>m3Q243PU53n6(SnKNAVS]:$7i93u=TieI'rtbdbTmc6Skbif(hQsKIh3RO-bUDoE'B:EbR#3YQp`RO"5j0%IfboC=\KHS'!Pks:fn&tHtHb&d[6ii,[f4aK-WW*YbPsnK`Suho`#&;[P_2iGNd@@W-FaZ(iMbV#?.=*)?XIU0Kbd_>Dh$$dfO'+X8CHRDEPulqFjCEAYaJV#F*BC4U[/%os/M]h`1EbRcUh;7g`\I;3`m.H.m1e(U]LN,P.<5>*P+>9]9/-&eb4'>g($8@JE,4OBmN$\u[*!=YS#46d`GNnr*CJK6<2jMm^m*B$8jq*qg5qR$LQ?#-q-foc\)T7G;Uo<`^Vdra4PYor"Nb/t3r*ki*!SV^2ZK$)$+&4@u&XOYemi9M?Aj3AuPS3;^gfV$47i(4oA-`?*'oFB!ogXt:2?o<-;^ckYV(R@!(pI\H^S+=*bkTe^Y31&$6j,=d7p.ffdV;nY"lp3Yb0UujM)F"[M+DKmK+2Ot^LO>)]O.5?Rm8?]gr^%Z;IDLZji1m;=uketLoR=IZQpk@B:]K@8(&(g$k?8KB7>E%K_AXend`36oJc5)8Do0cObfGJL;Md\*+:U;M%e5gK8VjQ4PaL;o]49r5f;Bfcs=I>R;I(u3bPc0]'j%aO$dLm"A4"se*j%-VW,kPmgToCI:i7pJ_F((hrse=HpsIi@ee1K[Br0lq!dSBrQ(8#g:+6N`R*\#939.tKt9rlACg=OC8VEc8jEVQ3f0aicZH-[4CpkX"l'pke7rA*TO?jHJ.#MFgW'`J!2Rk=a"k+@9:I`]'"7BMU;8/]l\"3aNSo%"bgW5lGYe)r0/(d?@=ZrXohAR73#)Y-6q.8-I0Of'7Z4lVE7sDnnK9Q&.&8FpPttORU@,_l?"4F2!]:RGLkj@1?YAcGB5*9[IcG_`i]cg7[hiI_1SBC/McQI/-s=8@5`p8@_-a=IcI$)hi$FI$&9dD8 +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 +] +endobj +66 0 obj +<< /Type /Annot +/Subtype /Link +/Rect [ 186.56 514.4 240.56 504.4 ] +/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 229.78 382.18 219.78 ] +/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 +<< /Length 2448 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +Gat^W'uNY0_Xf9KZ+sN+]f\Y0XhlN`OXShJ0_co2^'JFQL?"Y%SXR1@]`YPL]N6qYe(mO2n-Z(TS>Q&1"=J?.2uMn!F9ISR)9h0'@QhZA2r5\uol7c6@ODf.H$"aZ^nd*TPs4n%.1-b\!IloaWu8OPh*54L,b>X$9YN+%PJ5))^OljfW,u+S$c9T(A[.3GZg.=O_J#<>O:H7=S]&cT)hTd=]/Jc1fE`g+`q^p$ReCb0I0aX9GV48Z&mj4JT=WFuC1C=Z'ad&aEstoX%'i'X,=8^f93::pC)9og[0ZJf+-+kWH-0'[nm7Cm-U>l+aLEu.5n6Gh9Y/L^Y!BO%f7D'VMp&d2+Etg#SN<[44`Del8(gVW"&f;/C0@N??3!7V3o??'8&33a/QAs)Qh4#Y[INpQ]=lcL3:$A'#?CoI.#2,UZ]G8SkCVa^7+N*q['QpWCjB3.oJp.=0C/`0o"'nP7F=P=Pp0Wo[7`L_t.0QVS+N1j(r0(cEKLH@i_qUtfgg]-*Jj@JiiDFZAs4NABV72_)m7lck-C;U*`&KpX!@8N)Til]s7C,FY%.BgeO>K^)N![Um]LY>9&)EFo7fPNR),'Q<9"Q[)U14`7fBj2RuG8J7AJ8\\EUIN1VlE2g44VcX6WG;bkEZW:Om=/(':s&[4Q>$g-c7A!Wh;nUtni\/\Wpdct?R*)+1eYYlFf.o6OG@63'I7/02kX'pG&@H1]ju\nT,eg=V!#;"2.*rb]h4^0dck22HQ7jY4YFIj(`#bd;?9cZ8`PWZPN0-\j8u`$dWHAtfHX;DNVX?aVkGPK(\MeFW8VRUe6r0oR?^Y3C-US'%*,4'Xol)QZ.6hiMOH/UJXW@or4nUJ8#`r>KbMr=V'Hb=+l:3IpI1[F:Q8MR6D_9n[2+Ws*CB`4.0NO8B6H*Rs">%I7+pp-l,)ZY34E39q@l]IV7M?Kj1"#+b]gpRV%%qatk)\!BNJ=Q(V*g<,Qp+MrS_l%0[)!EUc,Ilh)dAaW,Yk3tZ.[.J+d"E+Ah#=Gp:dnQBpW2[V>iC%LV"&sIFdF+e5Whj,;_T(-/IP_H`oBZP:3JKt$)r8YaT_rOs$gQpBA!SU<3RVE0e/;qN-\^KoBAajC]>'%VZD40K)Vo1qklK/c=edgY6chpU]L/C8:mr"H3qTFBi*mGorIE6OE4MAM=j1nN$]#US0'U*L[[i].Z!O;P+iX'l'eb9'A%t4G/D0Fe.c@?W8]uN7[HPWM\hHKo,@]Pd(l_oIP%.r;#R_'?lqV0&Hucn:)5f=%HZaVnY2b7^Z@mWnQI5p"9TGYGD(T1)-q_iZT15JQ9lo]dHcJ4`=^PX/9IH+UOH',T5Mb(^1WRa>3T&E\d:i~> +endstream +endobj +69 0 obj +<< /Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 612 792 ] +/Resources 3 0 R +/Contents 68 0 R +/Annots 70 0 R +>> +endobj +70 0 obj +[ +71 0 R +72 0 R +73 0 R +] +endobj +71 0 obj +<< /Type /Annot +/Subtype /Link +/Rect [ 363.98 698.0 381.19 688.0 ] +/C [ 0 0 0 ] +/Border [ 0 0 0 ] +/A << /URI (http://xmlsoft.org/html/libxml-xpath.html) +/S /URI >> +/H /I +>> +endobj +72 0 obj +<< /Type /Annot +/Subtype /Link +/Rect [ 263.38 597.866 341.98 587.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 586.866 424.81 576.866 ] +/C [ 0 0 0 ] +/Border [ 0 0 0 ] +/A 33 0 R +/H /I +>> +endobj +74 0 obj +<< /Length 2451 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +Gasar99\,?&\cSp;#.ERe/0A(k2nMWXK.k63=fn@.i%6_Tcf72M9pjMjf)5YHU)b,h%2$\Q7i+ndHGI1q>n:chYltM[ZRg#2V\19Yk`;e2hCqLND)^_9T)6Y.,A]8Rt&-NW&s\Nk22Zq?`[54OTA!Y8S"4pI#0djP)3Z>\iZ,sTaU`q)@"KaDS!FT_?JWUl;/RH"<5$a+8,VfPX!C$Ui)#IWp5UnP;s`GAC=X"'IMXs`mid:Tkn'iC'LkXnGfe]Cu\MVY!/@-12l%/-Z=9P@Nu0klY+@3DjA"6hGd@;V`,'L;ehIl4Xg:O>'Y/4d)V2i!d1;JV%=*mSLMV9%_6p-OYlRi*'lXH$_uW[2a:RqG'l2*g1S!bfaj8"D]I3A/IDI7L5`e6gnLcXE1Q3gZ]aD>0)-p_X-tO'kMC9-H6tGIm(e60+9TNkhJR5/DOf_\;Hs)YVLn?eM?n(j/3il+Hc)2gjKQX.%3bpm'nDq.6ZG,\/[e8knrl#+tD.JIO[_bDO+DVb:-Xq0[>6.`9!bh@RI9,Dbqd)m4UJ&8q!HnoR'qq_\bIgs0q\HSit'dGa)5.I2_]o,A8;%H(7@C%GRgHi8hhFP,Ds^-#MXW'7KNBLPaZ8.72(3*Y0S5Ss+Ln[RpsRS@*pm)?UP')2']J'paRlLmd\I+Jmt.$F#J%g4!"B@ZA6DoDJ9IYo014=Z)BLiUh]+'i%MX2\FhPODTbr7QeZ8J.JE(F)omVj"DnB@V7o57L+u/YQ]2\K=l%T^OWN;$!H,l?]pe@Y.Q)dG0sF6i=:YI")%]FSrJJrmhrrg2M.0a:@uYpX'pWonJI)%OM#G#<^n9^F.lf-Z[fXZ+XZs%B1rH6oe$X`@sD#[%k5`,*8-C("llc/[TChY0apeTqX-Bfst6]3WSkOc?p`E5`>S(1'jud28EOYW)//EEi[:(n=UG/&3&Vpme`DH^4De?0.ia8p"Ms-L_R]1[.'=p8k9??Rlns*hV'D65GD+oPCXa%!aoWfE12-5V*t^W/.>`ItdY57BqZHjTC$KJ`oq="M1c3M5c>J!4)4Oj'7D:DZCrS,NNGh-ZRq"$MUos9IME-aU:7ktce_UEdpKYq![CX[G0D'lU#luaWj<+8+:>dT(%!n#YM/.KL[aaMT*5;N4WZ>HomM"=EuO4Ds[:3Uj",jK9d`hhK#jKo&l1HhFA"10jInOua:6kTBi*`m2H7[6el!edoBk,[2%mSpkZj)iZLg/cGQYYddK+G6(*gD`ct('-"@Z>J_@DU[tK"<\'^G<0#<2\H0V0q]L]=bo@4\)S/:Y*@,\+Q^aQA-6dM^*Y\T%H3+b_MKP6=GIror,rWc\urD!MCn*U@t)D=stWd*g;6#`\^>a;:M$Wl^*+6-\-(-8@u;kj-`jX$em[0fZmdsEc15Y03;]$*Y$ErD!"QAYF-gMgp`&C#fbEeB"9=Q\YLAZCH4#P_e&6DYRS-[Me1u#(f(^gLqVA"ShhLe#=!b.!XA9)O-@$"Lsmk#m7XQl@)Ilh,s(ArJWdWe7>@WQu#O/[KVH$+TOb.EGl@Wr.S2QeJl4%"48C9-^`lK`US@it7[TbFp05Si&l;.Dp70if4#V&HMgQ#Fr7dS)dH"LnU,O*&_8?-0(L!N'l:'9)$11?,[a;ShNt%e++a]:/s3A>]kOElQo=j]^-L#T$M0)''pj?#*a8*/[SZ:SlN8r^baQu;VGstii2\od]Wb-%"!(LdW6P>0mrr]ZFG+Ln;96\9Zp?hWb,fdrr_0@G\I~> +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 574.54 455.37 564.54 ] +/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 433.66 276.348 423.66 ] +/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 220.754 470.014 210.754 ] +/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 209.754 208.16 199.754 ] +/C [ 0 0 0 ] +/Border [ 0 0 0 ] +/A 37 0 R +/H /I +>> +endobj +81 0 obj +<< /Length 2156 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +GatU4=`<(R&:XAW:]hF%()p9JiLg?p3H,S?BtEP%[h"@^o!4S#NC:_qMZ3>[77oAa9'ZJ2!J<2fI,pfffpA27+"pR9F_o+P'PEGKF66X9r4/,_HGGKtIhGqS46t5aLV*+\m+?YfYH2B!UL_Y#G$b:=q9&QWgAD"[i;bb9"b?^^4Zc=pct:T(_%1oTYg.%88>JX.+Jm+LE1+f=7TbGIDV/`eT=BEL/eCJs1#CiVP$Y'.mKf)?D4aoRC@\L/,VP:m-_KrmbAYK'K&AGjNu(4U[O+HU65kh1AdmH\#?J,l<[m'S8RNoHVpr$BP/MOVBS=`';1C`?3VQXq`q->?Eq\]fG!&9Ofm#eM)ig;(k/pqh)=4%VmS-BU!gI_qpR4EeJJ&+\8BQTP,L4jVl/NV)naGOGh5Uh0e2=d?<@P>0f^o>_RQ;o]C'6)"'nKr>,&PY#%.NYHeHMZ_MKR"-[5esp%eaN&2TGqTRHgC7e#0iOX;BHhE;CL*&B#l6`goi_Su:Z)k':'g7,IM[PjKgl`Pa>:q,KcEr@C]u3<3mhT$3!`h^VW)"2567"61``P%T_@Dhn^BdsD0U2u;CCgY@8\gbLf!]:BWGBPC!UBo#kb$LrtWCMa[JBZf7[#Q:gNZ2.t0NiHn;+C_98Rj-*Xn*?jmeg!6=n?;c&AV57Gejf[n#<339o!1R(gjSSSZm4]+Pk_&df#`VD#O8Vh=*L4B(b54n]6-7UBu-`p?9<6]o7/JiZWi]FtepGHIP*%g.]NX*@o%(b)rS2dY"GZb':M&O`aZdc$N2Ro;j+UhQs+kM'Tmf=Y?[)g"^qqOI^UXp3ljX26T,)]49t$+R'e!'Cpn-k1&_2IHq1('$Y,m?\!IJAQtHkj^>S+,[VN$XP31LjLiIK)BFO(SWQnZeRRSQ9W6_I3V?ldFKW[o!56g_&jI9"LR;[L:oe);Ek=`(P-FdVsg+6(CE?%d-RnK?<@qHt=Tc(2DZ@pUq(32)l#d\IE&:6r=$7;Y.'.I+1OXhp4>YI&UWSnGnS]KFSVFk;SV%h/colS3/ElIQ02bZd15,g!3(<'mZa4P+uA.-opVha"G\;[Ou_]^>mmQ3kj2TP99YHpI'&sEH!1LEGC*R('l&C*OG^&i4F7rq2l[$ZhM:j(V1r\>Y"Cm%Q`;k:FC&DgU8UXs-Xqc[I1aJfkIW'TY/uk"QB[MUS#lU5r7Lg_9a@.k.5cp5PqtnKiS_K\gBWAN8_E+[_:NunDoiZogef7OTY6/ZE0haWh..]2"Z,.GE_ZL]KQ9)me=>po=Mn@hm\3JIQ]_t<*a-lVOeW=]-?jqG,>1uY;A=oG[[?7#G"_R"Q)*K`ic>j,8"nCXSLhPDjaSBdrbNR`[)Ud#4P/P,ReX8e;(u9L5JoG4,F=JpqGF!X2TX*JeuFM*+=Y/er4G^"LPoFkS3o%pih1F%u(J+-2]7V6Pa.VK:*od36#ccZ,?$)!Gth@=%?@u(4-P(gEfJ*L;i)j/nJYr:rd21V-a)h@ajIMi")]=kt'84)S%&-9*-ro$:^7tm[FfJ09:DkXg"f17Ub?+ooe'C!qh2N)/DpTU5(8aYhhlg2J8ZT:ZG`Da6L]A$gItu*E^k9.aEK)Hat +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 545.98 279.89 535.98 ] +/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 437.654 471.934 427.654 ] +/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 426.654 242.88 416.654 ] +/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 175.034 306.998 165.034 ] +/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 3062 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +Gat=.D/\LD&cV3*Z,h^W?#-KeIn@ugaYcPj8C84+iX41(5k!--,$J\2;>.Q8^*I?i)9Q.;.IIS9a5h2O3#p4Wn%7u+n#s&l)Fme.DROa*n`Kfpfu3#[Z>%H0hGeJ1`EBP#*]O+Fs*_BBpStk*YdmB,.VbunX>]N3p>(?@7b)])2ZMWMs(k(=Rj9nMNBf-Ja`Bh6%ZnRZK[#*5UHV(N*g%ECLd-=Z>8jC4:"Xd`7RABsnA\mOqLo#gm\G])`CqZA2kJ\<&RI7G-%%caI9)@22KWDu$$Uck3MfXOrU#JD`]+4S@INT7rVGZ8NQkTJX/\s[h0Ar;@M=nh%.b)q%Z($8UC_Op0LGG8rH0%hN=H,QKG#;-.>$,KJ\l82YSCrRN6![?e>*'6s"R?HZBb!3>d=1,HNbjB-%otsYjL^8LX!)4]V.3OFF)#Mb`KMbAFS.pp/UY)g+EkEZ0S9>-(@\b^_%fg\BY1=%U1G[<^cIV9KQ:[=]ELb:Cecr8*_!!!9c68%"6&&Qdf#t;dpfQi&Ve7+ZR!jC@5'E.+%3U+RQ+FQ^,spj`cOR5ZsunQ+#b<)=sB2;c\t:5drmt$So8AUaMd"-86MVphQa=tA%"cf#h9:RRLo_$%:c7]&2m67)W4!#gKg&>!9!W;Qpc9KOVJ)HVG*fI>>('-\+n/5H$_Xk/0VIdb(06+?2U@NQr'$l1Knk@0CdAIjF(b/L(+4)V,R6OgC3]OI^PbT@nDimj=L=W,XkhqE^/c.rHN/(mPeT8D**'g0I$kG7]DZBm:PP`j6,r7l]@5j13Ya&kXCW7GjYU5fSZuoQsmj;2.,^>8cHFL_F[,E'b6oT+B'b2ICQ.&B=]@Zm"$qa'7^@`jtAh@6=t/?g'ZMNfai]3*2Oa.4]FVV1+XAhX*)@9Fr1>VKOl\k,L+_Yh`Z^ES2"pkbD^+*TKX.Mq1t[JF=j!%&RFLEl2nJ`G8'nXIMRH:ic90+f%bjM8"=gU*&pA,oX4XrCMlT:U%Tlk*Di!W[q5TR3&j/f(>D*l`N"luAPpDgS]ms?Y5:j;4jois'^e0d9>952;TVuH5KXi:L$!-i&P>\*8j%d#^/35S<4N2a:dKD,Zh8>^2!B>pr:@UHMSU@&/@/RN?5-e!^M>E\-T-13UJ'RG[tNIq]S8N\nl"prl^1"-pVeCPoe^!Q@rjDNCX^PFjk*!"35#R245@$\"'!SV>1rciW^2<_6qN/LVX4(QBHnP8:^n=?j<_U[l*I2XBShl's<#KqEBT%1rqf+u+*'WHGj^'OTu&RjP!;%M,NZUob'UC*pfqqYf?[S*?r0l66+56fQD:U?'hje?+T"&\CX<:Odcc!=ES(.FHTC2F^"C,5r.OQ")dK!tl/2<'D*f-)Bt3=j5E.R9%R^9T7og?#DbIO:OscXcI,0DE8\pTEe/jTAsm1mA-u?)\M6W.;[R`sKU&YjXUtU9=BE08?N^ZQYbiM0WX;iRpZ(aS=pVgN)E:RIW5YCDIDo8T#1@d,OFd_AA[R-K:XL;B<406j`gL*#=H#qH.:&a5o)M[=i5Nbn(OLN@D/>)J0je'%@=UZFHL]GJC\fhoi20IX?)aq?o#B>gDk>5)ZVOb+b[?[ekkPE%X3Yn1Wb9n?:dA/>&;9Ms@*KWQf!$e$cNaK4RP+F>%!'GP9HsFVuKJ'kf\<\7[D#=$6j+q6*fah]f@n.Mi&<"l'FWbId9J*>A=L,7A%L-.f0OIl+:,5IDS,I()"$SCKYNb,>U-Gce`PQR2IMr\h$X<>#&a9Q&:aHr8iLWp=&H;0YO_^M+X9AW/4$j1]ek.V3#tnZ#Q,:kc"geUJn4q?IqqfXg>0K?6-Uln#[Bn@RbNj`uF^k"R6SOCqJhcY$hC5Q!FQ3[_pr]ME,oWtLGihWT/B7QW-dB;;-WnE.VEW@liO[#F#?UuLAC%Q/g-c46u92`R&(3;CR!dJeNdhTW1G=Z^*A?<=n]NheBAT$2@'YM6lpTH.*`F>(jt4crCCj>Yr_N)LahT]P]ccBcE0RBlTf[T"TabbnR>Dm4qt0Rj$n4NMJrq;5D#0BAb;Le0H2%rKS_L"q%"%L:FX._].JPV[T'ps-5e1HGsII^`_,he%/1EYQ,m@s!3j0842/.%^)-WpHgr3QcR7$#._!)hQJ-=p7YBLO?2XZ\].Kkj]SW)Q0JdKK?7p]!K6hN!l$cI'?/NOFY3b7%WlFQ%QD"/E"T8ic:i;a~> +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 344.54 435.37 334.54 ] +/C [ 0 0 0 ] +/Border [ 0 0 0 ] +/A 41 0 R +/H /I +>> +endobj +92 0 obj +<< /Length 2048 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +Gat=,D/\/e&H88.Tk5.-$o'>kHJR!`l\c!i6+8$*Vg0?uM7/,\P"SYDK44e.-^#*6>B5=hBZiL-T&[NTkdSaAq''d^Md0o*5'*:>)0T9[K,kqd^l5LQE9&QocJlZ$F(Y-OfVH%Li)OdsJ9,j@)(AH^0jUVUOqmIpKXJcU@\BUu(2P&CK"(b2(*sccC0I;+VZIt2^/tKbJji9`0?*):f=X@qVK$HRsWF##YU>hDO#-X$ZQ>0mbt,f=_!Y6#1M:Q$=A@Lo".+lblXl(a1Pg/La0([KVlj-2".T]&;]U[V9r)c=Sp2@?_1n.`B3o#skAJZ!,J\Rr6$P!@TQMQ[Yi\`IEGG_b9oZs=Bf?ume::TV-V*R,^"a\9O7,_e27Ap?'klu7Zo%%&HRM3qhq=MRr%dT)_tR&c$$"qi.J.F"U:#T,28X6bJc$HZ?_M\VV?is-l3sQ-qQPE\(5jbok/+0+[\4$DhX6h8BU\8]WTeJ,,6pC>Up-4YcVNCQ"8-0J;/9,RHPlb&O[$Ip(F&o`[BFKc^l=H0a@aD57"%9g?oX]1M0t7ceY,P+5<=trle/De_)a^r=DeMSO3mjI?R;Rs>X_W(s5A=Vj:=2O,g)kXU68G1j;f]$HWG&e\na.cOVOBb"&(Qn7EN%Ld.])&:IoOBiYEKKkmS8:ZtZC2M24&YSiUihY#.d&7/\NonBR;rc)QRh&iN$>nSAY(,W3k`Q79jM?S2KPh@"-RU`lPaMGR&&)1;MaQR0dQTf6P<.^I_91nV(jK@5W>)[U6Shc7;Ra,te:;oUDN1:(m`Ul]`nV86mc@H=4),`%TO]uZ9e/b^V$nKAm$FC`I6XX,*OQ!Pm5^U7:h?+Sc`@g:N]3YNaSM:S_H@>%1eYla[rNU/Kq.r8)SdHbk4h"*H`UIF+YeVnK$hsd't*Gl4r`pLeLAfPSr;6B/Zc#B#eB#mu8oUFk*86\C%lYS70o.;-n&ebM."+6;pPqTG"GMK_^9=0*VES82q]4_"nHk'X+3pd4,Bje&61/sSfD2\hjUjY3ceu\m9lm7EHF)Ca\Q^*$>g)Q6LjoBsI#o?"Jpj#1HS+(CoMQ.Sac0*g)b8M$!AJD7f5:eRcU[@<)+bG_"UEnsH+q'"9H^U@k(@l5GB[qkf35n4#5U7r?AnQO:PNL3Ye+gE5c!E.eEsCZ"/V.s2;1eBlU"fH:'l-.q385kF%/\qWeRrE.36c$G2,S\9h>V"+f[7o2J8!Mh_7(q44IPeNqj.*,L#BX33kSWrkUS+FVc6JBZWGMr'8^1r/k1C/pfDLp1G'1Q7D;kY,/68llZ-?5IYkbq8-hrpON(?pB6oj<[r06)u&&/I]t>31<_imL/Bt^V)]Gm=(*W_@i]&@Go&>'UIC7^eE=O\Dcq9aGee`WWg +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 1148 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +Gatm:>AMtc&:XAW:f7XD8LJjlD/Tr%P/8B,SCWB\Pm>iG-N[Fk=)sd,c@8'jP&*^ueo%/aJp'1$Ml2.!baf&08=$@S283c\,$][Y?I@usVs9a8_62%o;Dn(@[0q>.ZI3,--WmC4:_>mj,Q2p![Q-HXD!1bQq]2WjAU6FL4cXDEl,H0;DPM9O^qZ(B3^;(U:4q?WW7U?ltd_o=j9+B7abk]1Mq%haO^fKf>kYQSEc)m!k0I,NbDhWs`BSsPeCG.CUTq?k#*##l$HT^Q?f!68O2Oo_I%f_'8b55'e9VH_0bLnD@[E[3b>GK%QK_RP!S2!k<&G2K3+ERl8)p5),ba,::YifpEg!=suk#kRT$MZgCh1KN>n!0hP$2[8`oq;-N(#A]l843_lYDgjGq.`[7!p$Cn/O:*_[9\;f4G/TpU;FA\2ad\ASc64amQ*j^-A'`jl`3tL.cUQ;MIK\emF&I8mehqH=98fbI^p\@2`%b%^Mq@+Yt_#RB#47Jr=61NMqmsM?Z+lo^3=Yo&2.+&=uLia[ +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 1343 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +GatU3>ArLj'Ro4H=@e]"929(]2c$p9LYX:WX!g]MXAgXoK*)5A(2R`TCnds0^#KL70k6*@8-GD,d?/8*X,='P%2+#T7KH6lgY_+CT0*QA^?t[2r*[b`g/`Xh"\`>0*TD4Vhf-"e!0D)GFYZ:\0H2%'_H#i&^1g6`V?ZZ21Yu9oRG4T4VGfX'G[%@$SF.Nb;QKL<3>W6#t^5!h&eSVfnrhO_ZU6$%-7B%tG[6s8[Ds>%:Ed-+J*/N.Aq.n7]cmj[K>nTW[b+GK_;C0G$Xq:%k(lV?4-Ve5QV7_uuJ+$[_AVI$ThO[])kS7/:cQcpB35t@ZtrPk_OA`-UO=12q(.+I.TDj?dq]PX0HQiSp^in-e_(T5s%&-GtpmQcNs9p3GsR)(V\Cacr,N$hM+/Kq_4266XPRQ*(E1ldg)S-nJ)6>"D+DP$U%C1)npoLcne!o_WHTU5-=/mP:6'j0$+pFWg0(7gaq1k,%49>6DA.]u8$mpmO!S#QR/M3r8`e4ZVK+4DK!MTo^bQjb3L'[:KW4#!j)&0MLA<j.ee:9PcCH[r.&c"i7aGK9m7Pl*bL0!=hs2Z;JhDi?iu5=f.g@iA][rMeYf`Q<.:1$>Q3Hj_.Y\"om_S/X%HKVa0rA9h;Kt[Z_(4j3R]rppClG(AKEruL/4-X$BBk1AYPo(_5p!U91E/c?Q*ZG+IBCk&jV-92Gm7\rR@-UBKZ$A>O_2%kn7BV9L[49J_9U;QoN-=i0(7FlM`AZ"^M.aUrqV#)4&*CmWhP1<'PnQ`:cBSC\0X.^irY"6hJ7t,DV-bJ\&?@^D-C9.T6@`Mt(f`d\arVlo?Y'!\UmGT1;f_/l"*8rZi\U]`**dgJpLo9n6qrJ^I]N%:6`@"2?6uSRg8U(`f,U3;5W(hQCR5gmoA=X-iWp#>MK6>RY_Rp,]^$#MOE*LV?o-0L]GP/4G+$Y!p6<4/();o@?+7H-;K'&1?(12tnRA)N:LcN>O('5hphg'NN]0*F#0)$!X[Q>#;3O:6cA)_Gq3s#:/;j!ReMc@%X,c-r,?6BL>oQ;DHik91egU-`TsIJ(mr5cMJR#1Jap>EX=MpV1!Ja"GPlZH086n00?&'*M$\FrtUflpL7M%u&M^%@dic@,s"CYgB5\u<+tT:S"dm6s\mKp1u`Gg`-O\s%[=RQlHCKfC1cUP=BuWSU`i!='8K<%J/,>jm?#&9Sr)YIR\t!l;u]H9JH"'PZag`7AL\N$RetRk58[RCF!E0Xj^TR.2.&gWCBhjtk*Hd+^BYdZX +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 1188 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +Gat=+?#S1_'Re<2n.r-jY2In&jmfR*Zp97s.`Cb0-ense32sO$@a5'@OD@g=p`[XINq4i9U>Ro4sr%\I_6_BC^8nYuq4l>&U:)Wg9BA^^Q\/\&W:(q%Pb4@nujEB=<:`O/d7?`tl#dkQ?3A>T5ACSCIe4';hr%XSseO#.T*!@3rLn8ahpHc2&cdQend>O-)Oj2:]ZfK*G*5_7LZ%`KFn5Yp'k@\QpW,q^QsiXG4,1a]1jCU5SmBlN/V^gr[M9o]nLU3Hd@2DSe^?:al2[,B\Ju$^ss,9`F*1E],l35de,NoA4&07JWt=76Er&Dn<:k+Y4ksY^'BNXB]j?g[+0to^_f'FjKYgl!cR+:cZ!9[)TFcSCoDG2FU4&abbtXncGOsI:,$Kh?Zj/.fT\O0<+u`gotb2Qa=P'OE,?RhPn-9+kdn6YkRc>sB^#U8A6Ln=lMI%C>),l<@hT8#I#r/d@.rsuo[2=dTMe[J@aO8MDT=+_J#r>'$S5GG``["PO;e^c"u6BV;+4>e'^KMGh1H:CN`DR/;Pq6H&&>a<*Tc-E%okku_T)hF\dE]*+EiaH-CEtc\GR`#bNj"M-Tij=`)e)'BO1HuIX5lDWUM6IX%&WIb'iaV*/ZO@0C]`_nU>RT[29^`GJ@)i,$^d]Z6Y+6GZu+5YFa7?Nmca7a!WME)MG/:K#4UV]8p(#Xm3XHSg+k(j#?b66&341W.b#[WGYD54@3=D-k[/lj85~> +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 1250 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +Gat%#>E@5m'RoMS#_Q/m&Y-*H4-!H/=pBkk)Bfk'04Z+jlZOI08_6[LB!p@m^*gDPK&$p:>/edtIQmbVl.a2XeIX)n,i-=r(?f+;YDWbAR@a'V3M0*8/o?6,m3rks<-u%4!(`bYj")W(u1O>B@5P7e`rRpj3aMDf1:Y,J#/Ks?/YBi(A:8Q6\\Lf'3dA4K4#jj[A?@:SL)u['@rG=b)YQSK90i?N*Tb@%ejQ>XBBRC"(!]d>,i[Qu43/#dY7C@e%J2G>(d91BU'c"E%\7#G@K**I]2S`Q%VuU0GUTbZh`Fc=2oj:/u4C)>+!J9$_@,UUtlS4`r.g)pW"QEOK?fF.1cV5;oo44mtLPn7-'m1NX%g>LHoIr587)DA8:bDgK-%Z-%4HkKo5r`W2;31^.0KRY\XFeEM=T6%6>R2?#V,VnA+dq=*7$s2V,DVX?Z$f,l0.82M:B]OLLDqLLR4[/`%PU2.U&+?mM[\GlJ>Q]<+7dhK?&b&sj^EX-K8'flDH'pTIZq@[6"nqo8'OQOp/qb"*d/.=hO5htJCat=u-ODViR?$pN/HbUclK\sC*A_4qZ)G&cdEP@,]Tn'MgrW33jcSj)A4*6#qH?o<=7(pgZ1Zm4GB-?%(W4Q<8f;:9uh!jtY[Xo2O,jG:O;W-g0,7;e95C\NT1k$-X^>tA*-CVUndP]rGm#FmCoV#~> +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 1203 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +Gat%"gMYb8&:N/3YV$8RXutPk05[/5,^+dT.+2.A$B7BK<\a]5<0sC"-cj&8QDDHq]Tc\=0M#r]B?jag/LHh9O[f]hDm>lFD_n(._*@54LuCiGs+f$,CqWWn"VKp1O#-.X9+HQ^m^9'0SW=m:362T`Df,m$+mcF*C-;bbVY!nhIhkIqPpqo$KB6bIL]C%Q"W4g1._sN;b=DVs,I"69Y'T:`XL]mO_GQ$hGgtHb/?cHZR-@.ZSOt"inu&1J^&UAW"hbTO,3_E#6i!e2a`c89G4F"BI6N1daNJ_[g%m)k%>nhqJ=BV(W=Ie$a4]2P4JarbA4">ddc_qkH+R,lZM,6Oc!O]b`:hun-SuADm@jR+g*,??&8;Nk,8Z1SF5YbsDlp<_s!uoFZQ/Fi^/sFd!f-S=^n@J\0b;>8aaaIns]bt?AUuFE6I".$">t2bfW/L;h69">g8FS;5)S*H#K[miPY_Y`?mK=R6^q5j*NH"Tr>]/%E^$8DT@,*S#$)c$q!6tHiE]Z`]mKXj=AW3NtXQEali1FO+k5g7`@?[.)S--H]MVaB'@3L_\k%7W,Z'XU:bEnD(pg>u4b1*-9:lIgdLnd[eH-JJj!"7'-E$R%bK_qP'S_9IK-eLhO?*4*N2!?2]3<8HVt(f@=`]lJXQAT+J$'LZqEtDbfdil$U*u#A%#@i+-/[^S7mdgng7ph867%GZ\+KR[<7T2+QK;Rth?sN=d[oifV(foA$G04ltNPo2V[[LWYM;Y5RK@(/he'3a9V-Z_*_4*7'^3R;.It4StQ7m9M:js0c!QK4Z7Q+uZuW7P]3lH0`QoP?6m=Q]INW"EKf#e-^bMKBf=B)L?&%n\1rA:T)C[m17McmW +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 1326 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +GatU3>Ar7S'Roe[cjX`s^%d6p8PrZX!G`XL*J3VjpF-FV9r;3)16kFO13D?%+)+Rg4/C>7#S>&kcZa9a\`i-qFM1lT`0_JK\LPW13i7%;N?>O^bF;T(WEh*/XPl*sVfIT/YaO'"Q.RBf58GD8+*PlICZc]Td-8b2h\ZF$6*#F7@[IUOs1eb\#j97cd3'_bahS!^Y=DX@j^qHVY>6Q[JoY3?@AMG?7iUF"r6eK]HKebRk#;:YfCj"lJV9B4ZdN'Su:f(>J]oc%)_)17(!)B"T^Lh-1QUq2^rV>j=ikEWI]oFK#[#bfmXKk1dif?YW^E".rmF"s5eU!QL*6YUFClC&5;+H@A>3(rnehj"M:]?u#rF$pQMq.S#g"0C,>bnd+X1^0!NdN_p@0XZdIrb]H@/)O9O[]b2BA/rh(hq'AIqa"a@a6*BV@/X*1gF;tD&$_^3d_65g3s19Y]1`;Llr82&MEUTiK@5;I!KKg8>QNf7mH],0BZ^@`LciSbR.\`T@,,!ZB$N[MnJ(I!fYT.F1'O+<[$(ji>]h-5U%*,8;,>XbapAe)bCVp'4#C(398,DZc5("li]i3dfW4aa<)Nr_7f"qFM>U:*`X%BTpVCC:?TlPX\#e>_6(l2tJ.S^-6Z==Y79g>6oigGnKlhkoCN7/a`\^WaYt;s)/Yep\tf6f"oGn8=BoYpdb3;D5=\W6JJ!C-FKA&A??7fg.VX1b"Tr)tDB@CD5Is7ncag)n/3u?P!qXn3d0QF*LtBU4,2;hs+djk?P,fR!OsgdQ_=5R#BL,+0!D5>qSWs2'5\B!)>7&e_'N#$B8*oDa!r6oMU0\Z0nBfY<56= +endstream +endobj +107 0 obj +<< /Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 612 792 ] +/Resources 3 0 R +/Contents 106 0 R +>> +endobj +108 0 obj +<< /Length 817 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +Gat%!?#uMY'RekG_.,6a&.hh->Os^H-ge8]Vpf@X&$1[A%4bZ\B_q1Ud3r*9VrNDM4Qfu;"YQ/+k2J9%(dS;QI"O\h_#W-n"&,Zt@h_0JKCf/XS\.,ik6)$O,(p#:;Ds<40Ku@TIs_t,W.^6!GrnA#;$s(f9)Y?njhchE&*?4F[QJmroANC3B!/e:.BB\)JOQ]!C$4[(gs)X_6\-S26U;)p&ieiOdM[QSYB]2mpjJ`JopoZP2JdO'V?T$KYciKiD*c47hETggnZGLA-'G\'#LoBWT!TojA.W9Q/SNQ]nJ`O]ANEHXS8j':ceoE+9cGii^Wf=[A1kBGCWM]!jkED&P^+_.>&bKm.5;3qTK?ppVcZ$AGm)GD=Q>Cg9$OE':kjQWVe.YT9E=O6,PD&>4CZYags^t'3erVnTh.?YQ\q9sZF44TY%64A7?c+qhj7TB`T'>Gd$])l4-[KR2YPVSJ_4/jW9$HYfU'(JV5&]0_?P<=eaf<-5s2DgkGad1Gs8n@;)91d-5CJ!F%[/#D(20lr6&ha,YfIo"9%b_Y4gXf9u5h@OGJ1VCRqSC_V!>M\+e+%H7@E>](t%:T`*,,0an'h\o2,oMu`\9j5r*;!sCH3#nAPNNG\AqDJ]ro_tDX%Ef>f@noBOGmLBeZcb0k0PLCUR)UIp~> +endstream +endobj +109 0 obj +<< /Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 612 792 ] +/Resources 3 0 R +/Contents 108 0 R +/Annots 110 0 R +>> +endobj +110 0 obj +[ +] +endobj +113 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 111 0 R + /Next 115 0 R + /A 112 0 R +>> endobj +115 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 111 0 R + /Prev 113 0 R + /Next 116 0 R + /A 114 0 R +>> endobj +116 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 111 0 R + /Prev 115 0 R + /Next 117 0 R + /A 9 0 R +>> endobj +117 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 111 0 R + /Prev 116 0 R + /Next 118 0 R + /A 11 0 R +>> endobj +118 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 111 0 R + /Prev 117 0 R + /Next 119 0 R + /A 13 0 R +>> endobj +119 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 111 0 R + /Prev 118 0 R + /Next 120 0 R + /A 15 0 R +>> endobj +120 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 111 0 R + /Prev 119 0 R + /Next 121 0 R + /A 17 0 R +>> endobj +121 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 111 0 R + /Prev 120 0 R + /Next 122 0 R + /A 19 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\101\0\164\0\164\0\162\0\151\0\142\0\165\0\164\0\145) + /Parent 111 0 R + /Prev 121 0 R + /Next 123 0 R + /A 21 0 R +>> endobj +123 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 111 0 R + /Prev 122 0 R + /Next 124 0 R + /A 23 0 R +>> endobj +124 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 111 0 R + /Prev 123 0 R + /Next 125 0 R + /A 25 0 R +>> endobj +125 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 111 0 R + /Prev 124 0 R + /Next 126 0 R + /A 27 0 R +>> endobj +126 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 111 0 R + /Prev 125 0 R + /Next 127 0 R + /A 29 0 R +>> endobj +127 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 111 0 R + /Prev 126 0 R + /Next 128 0 R + /A 31 0 R +>> endobj +128 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 111 0 R + /Prev 127 0 R + /Next 129 0 R + /A 33 0 R +>> endobj +129 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 111 0 R + /Prev 128 0 R + /Next 130 0 R + /A 35 0 R +>> endobj +130 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 111 0 R + /Prev 129 0 R + /Next 131 0 R + /A 37 0 R +>> endobj +131 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 111 0 R + /Prev 130 0 R + /Next 132 0 R + /A 39 0 R +>> endobj +132 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 111 0 R + /Prev 131 0 R + /Next 133 0 R + /A 41 0 R +>> endobj +133 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 111 0 R + /Prev 132 0 R + /Next 135 0 R + /A 43 0 R +>> endobj +135 0 obj +<< + /Title (\376\377\0\111\0\156\0\144\0\145\0\170) + /Parent 111 0 R + /Prev 133 0 R + /A 134 0 R +>> endobj +136 0 obj +<< /Type /Font +/Subtype /Type1 +/Name /F3 +/BaseFont /Helvetica-Bold +/Encoding /WinAnsiEncoding >> +endobj +137 0 obj +<< /Type /Font +/Subtype /Type1 +/Name /F14 +/BaseFont /ZapfDingbats >> +endobj +138 0 obj +<< /Type /Font +/Subtype /Type1 +/Name /F5 +/BaseFont /Times-Roman +/Encoding /WinAnsiEncoding >> +endobj +139 0 obj +<< /Type /Font +/Subtype /Type1 +/Name /F6 +/BaseFont /Times-Italic +/Encoding /WinAnsiEncoding >> +endobj +140 0 obj +<< /Type /Font +/Subtype /Type1 +/Name /F1 +/BaseFont /Helvetica +/Encoding /WinAnsiEncoding >> +endobj +141 0 obj +<< /Type /Font +/Subtype /Type1 +/Name /F9 +/BaseFont /Courier +/Encoding /WinAnsiEncoding >> +endobj +142 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 59 0 R 64 0 R 69 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 109 0 R ] >> +endobj +2 0 obj +<< /Type /Catalog +/Pages 1 0 R + /Outlines 111 0 R + /PageMode /UseOutlines + >> +endobj +3 0 obj +<< +/Font << /F3 136 0 R /F5 138 0 R /F14 137 0 R /F1 140 0 R /F6 139 0 R /F9 141 0 R /F7 142 0 R >> +/ProcSet [ /PDF /ImageC /Text ] >> +endobj +9 0 obj +<< +/S /GoTo +/D [45 0 R /XYZ 139.0 693.0 null] +>> +endobj +11 0 obj +<< +/S /GoTo +/D [45 0 R /XYZ 139.0 363.674 null] +>> +endobj +13 0 obj +<< +/S /GoTo +/D [59 0 R /XYZ 139.0 725.0 null] +>> +endobj +15 0 obj +<< +/S /GoTo +/D [59 0 R /XYZ 139.0 173.18 null] +>> +endobj +17 0 obj +<< +/S /GoTo +/D [64 0 R /XYZ 139.0 156.646 null] +>> +endobj +19 0 obj +<< +/S /GoTo +/D [75 0 R /XYZ 139.0 667.866 null] +>> +endobj +21 0 obj +<< +/S /GoTo +/D [75 0 R /XYZ 139.0 281.08 null] +>> +endobj +23 0 obj +<< +/S /GoTo +/D [82 0 R /XYZ 139.0 508.98 null] +>> +endobj +25 0 obj +<< +/S /GoTo +/D [89 0 R /XYZ 139.0 725.0 null] +>> +endobj +27 0 obj +<< +/S /GoTo +/D [93 0 R /XYZ 139.0 648.0 null] +>> +endobj +29 0 obj +<< +/S /GoTo +/D [93 0 R /XYZ 139.0 564.561 null] +>> +endobj +31 0 obj +<< +/S /GoTo +/D [93 0 R /XYZ 139.0 386.942 null] +>> +endobj +33 0 obj +<< +/S /GoTo +/D [95 0 R /XYZ 139.0 182.42 null] +>> +endobj +35 0 obj +<< +/S /GoTo +/D [99 0 R /XYZ 139.0 665.56 null] +>> +endobj +37 0 obj +<< +/S /GoTo +/D [101 0 R /XYZ 139.0 497.94 null] +>> +endobj +39 0 obj +<< +/S /GoTo +/D [103 0 R /XYZ 139.0 438.78 null] +>> +endobj +41 0 obj +<< +/S /GoTo +/D [105 0 R /XYZ 139.0 281.02 null] +>> +endobj +43 0 obj +<< +/S /GoTo +/D [107 0 R /XYZ 139.0 113.4 null] +>> +endobj +111 0 obj +<< + /First 113 0 R + /Last 135 0 R +>> endobj +112 0 obj +<< +/S /GoTo +/D [6 0 R /XYZ 139.0 725.0 null] +>> +endobj +114 0 obj +<< +/S /GoTo +/D [6 0 R /XYZ 139.0 396.11 null] +>> +endobj +134 0 obj +<< +/S /GoTo +/D [109 0 R /XYZ 139.0 682.0 null] +>> +endobj +xref +0 143 +0000000000 65535 f +0000046903 00000 n +0000047079 00000 n +0000047172 00000 n +0000000015 00000 n +0000000071 00000 n +0000001911 00000 n +0000002031 00000 n +0000002175 00000 n +0000047325 00000 n +0000002309 00000 n +0000047389 00000 n +0000002445 00000 n +0000047456 00000 n +0000002581 00000 n +0000047521 00000 n +0000002717 00000 n +0000047587 00000 n +0000002853 00000 n +0000047654 00000 n +0000002989 00000 n +0000047721 00000 n +0000003125 00000 n +0000047787 00000 n +0000003261 00000 n +0000047853 00000 n +0000003397 00000 n +0000047918 00000 n +0000003533 00000 n +0000047983 00000 n +0000003669 00000 n +0000048050 00000 n +0000003804 00000 n +0000048117 00000 n +0000003940 00000 n +0000048183 00000 n +0000004076 00000 n +0000048249 00000 n +0000004212 00000 n +0000048316 00000 n +0000004348 00000 n +0000048383 00000 n +0000004484 00000 n +0000048450 00000 n +0000004620 00000 n +0000006683 00000 n +0000006806 00000 n +0000006903 00000 n +0000007078 00000 n +0000007271 00000 n +0000007469 00000 n +0000007659 00000 n +0000007846 00000 n +0000008044 00000 n +0000008246 00000 n +0000008448 00000 n +0000008648 00000 n +0000008847 00000 n +0000009052 00000 n +0000011400 00000 n +0000011523 00000 n +0000011557 00000 n +0000011693 00000 n +0000011884 00000 n +0000014223 00000 n +0000014346 00000 n +0000014380 00000 n +0000014580 00000 n +0000014791 00000 n +0000017332 00000 n +0000017455 00000 n +0000017496 00000 n +0000017685 00000 n +0000017863 00000 n +0000018000 00000 n +0000020544 00000 n +0000020667 00000 n +0000020715 00000 n +0000020850 00000 n +0000021058 00000 n +0000021197 00000 n +0000021333 00000 n +0000023582 00000 n +0000023705 00000 n +0000023753 00000 n +0000023959 00000 n +0000024098 00000 n +0000024234 00000 n +0000024439 00000 n +0000027594 00000 n +0000027717 00000 n +0000027744 00000 n +0000027878 00000 n +0000030019 00000 n +0000030127 00000 n +0000031368 00000 n +0000031476 00000 n +0000032912 00000 n +0000033020 00000 n +0000034353 00000 n +0000034461 00000 n +0000035743 00000 n +0000035853 00000 n +0000037197 00000 n +0000037307 00000 n +0000038604 00000 n +0000038714 00000 n +0000040134 00000 n +0000040244 00000 n +0000041154 00000 n +0000041280 00000 n +0000048516 00000 n +0000048570 00000 n +0000041301 00000 n +0000048635 00000 n +0000041476 00000 n +0000041677 00000 n +0000041848 00000 n +0000042007 00000 n +0000042201 00000 n +0000042455 00000 n +0000042784 00000 n +0000043020 00000 n +0000043221 00000 n +0000043446 00000 n +0000043659 00000 n +0000043842 00000 n +0000044048 00000 n +0000044306 00000 n +0000044552 00000 n +0000044833 00000 n +0000045126 00000 n +0000045496 00000 n +0000045825 00000 n +0000048701 00000 n +0000046038 00000 n +0000046154 00000 n +0000046268 00000 n +0000046354 00000 n +0000046465 00000 n +0000046577 00000 n +0000046686 00000 n +0000046793 00000 n +trailer +<< +/Size 143 +/Root 2 0 R +/Info 4 0 R +>> +startxref +48768 +%%EOF diff --git a/doc/tutorial/xmltutorial.xml b/doc/tutorial/xmltutorial.xml new file mode 100644 index 0000000..c8edecb --- /dev/null +++ b/doc/tutorial/xmltutorial.xml @@ -0,0 +1,747 @@ + + + + + + + + +]> +
    + + Libxml Tutorial + + John + Fleck + jfleck@inkstain.net + + + 2002, 2003 + John Fleck + + + + 1 + June 4, 2002 + Initial draft + + + 2 + June 12, 2002 + retrieving attribute value added + + + 3 + Aug. 31, 2002 + freeing memory fix + + + 4 + Nov. 10, 2002 + encoding discussion added + + + 5 + Dec. 15, 2002 + more memory freeing changes + + + 6 + Jan. 26. 2003 + add index + + + 7 + April 25, 2003 + add compilation appendix + + + 8 + July 24, 2003 + add XPath example + + + 9 + Feb. 14, 2004 + Fix bug in XPath example + + + 7 + Aug. 24, 2004 + Fix another bug in XPath example + + + + + Libxml is a freely licensed C language library for handling + XML, portable across a large number of platforms. This + tutorial provides examples of its basic functions. + + + Introduction + Libxml is a C language library implementing functions for reading, + creating and manipulating XML data. This tutorial + provides example code and explanations of its basic functionality. + Libxml and more details about its use are available on the project home page. Included there is complete + API documentation. 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. + + + The tutorial is based on a simple XML application I + use for articles I write. The format includes metadata and the body + of the article. + The example code in this tutorial demonstrates how to: + + + Parse the document. + + + Extract the text within a specified element. + + + Add an element and its content. + + + Add an attribute. + + + Extract the value of an attribute. + + + + Full code for the examples is included in the appendices. + + + + + Data Types + Libxml 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. + + + + + xmlChar + +xmlChar + + 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 libxml's + functions. More information on encoding is available on the libxml encoding support web page. + + + + + xmlDoc + + xmlDoc + + A structure containing the tree created by a parsed doc. xmlDocPtr + is a pointer to the structure. + + + + + xmlNodePtr + +xmlNodePtr + and xmlNode + + A structure containing a single node. xmlNodePtr + is a pointer to the structure, and is used in traversing the document tree. + + + + + + + + + Parsing the file + + file + parsing + +Parsing the file requires only the name of the file and a single + function call, plus error checking. Full code: + + + 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; + } + + + + + Declare the pointer that will point to your parsed document. + + + Declare a node pointer (you'll need this in order to + interact with individual nodes). + + + Check to see that the document was successfully parsed. If it + was not, libxml will at this point + register an error and stop. + + + encoding + +One common example of an error at this point is improper + handling of encoding. The XML 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, libxml will + automatically perform the necessary conversion to UTF-8 for + you. More information on XML's encoding + requirements is contained in the standard. + + + + + Retrieve the document's root element. + + + Check to make sure the document actually contains something. + + + 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. + + + + + + + + Retrieving Element Content + + element + retrieving content + +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 doc + and an xmlNodPtr called cur. + + + + cur = cur->xmlChildrenNode; + while (cur != NULL) { + if ((!xmlStrcmp(cur->name, (const xmlChar *)"storyinfo"))){ + parseStory (doc, cur); + } + + cur = cur->next; + } + + + + + Get the first child node of cur. At this + point, cur points at the document root, which is + the element "story". + + + 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 libxml string + comparison + function, xmlStrcmp. If there is a match, it calls the function parseStory. + + + + + + +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; +} + + + + Again we get the first child node. + + + 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". + + + When we find the "keyword" element, we need to print + its contents. Remember that in XML, the text + contained within an element is a child node of that element, so we + turn to cur->xmlChildrenNode. To retrieve it, we + use the function xmlNodeListGetString, which also takes the doc pointer as an argument. In this case, we just print it out. + + Because xmlNodeListGetString allocates + memory for the string it returns, you must use + xmlFree to free it. + + + + + + + + Using XPath to Retrieve Element Content + In addition to walking the document tree to find an element, + Libxml2 includes support for + use of XPath expressions to retrieve sets of + nodes that match a specified criteria. Full documentation of the + XPath API is here. + + XPath 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 keyword + elements. + + A full discussion of XPath is beyond + the scope of this document. For details on its use, see the XPath specification. + + Full code for this example is at . + + Using XPath requires setting up an + xmlXPathContext and then supplying the XPath + expression and the context to the + xmlXPathEvalExpression function. The function returns + an xmlXPathObjectPtr, which includes the set of nodes satisfying the + XPath expression. + + + xmlXPathObjectPtr + getnodeset (xmlDocPtr doc, xmlChar *xpath){ + + xmlXPathContextPtr context; + xmlXPathObjectPtr result; + + context = xmlXPathNewContext(doc); + result = xmlXPathEvalExpression(xpath, context); + if(xmlXPathNodeSetIsEmpty(result->nodesetval)){ + xmlXPathFreeObject(result); + printf("No result\n"); + return NULL; + + + + First we declare our variables. + + + Initialize the context variable. + + + Apply the XPath expression. + + + Check the result and free the memory allocated to + result if no result is found. + + + + 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 + xmlXPathObjectPtr. We use it to print the contents of + keyword nodes in our document. The node set object + includes the number of elements in the set (nodeNr) and + an array of nodes (nodeTab): + + for (i=0; i < nodeset->nodeNr; i++) { + keyword = xmlNodeListGetString(doc, nodeset->nodeTab[i]->xmlChildrenNode, 1); + printf("keyword: %s\n", keyword); + xmlFree(keyword); + } + + + + The value of nodeset->Nr holds the number of + elements in the node set. Here we use it to iterate through the array. + + + Here we print the contents of each of the nodes returned. + + Note that we are printing the child node of the node that is + returned, because the contents of the keyword + element are a child text node. + + + + + + + + Writing element content + + element + writing content + + Writing element content uses many of the same steps we used above + — 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: + + + The main difference in this example is in + parseStory: + + +void +parseStory (xmlDocPtr doc, xmlNodePtr cur, char *keyword) { + + xmlNewTextChild (cur, NULL, "keyword", keyword); + return; +} + + + + The xmlNewTextChild + function adds a new child element at the + current node pointer's location in the + tree, specified by cur. + + + + + + + file + saving + + 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. + + xmlSaveFormatFile (docname, doc, 1); + + 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. + + + + + Writing Attribute + + attribute + writing + +Writing an attribute is similar to writing text to a new element. In + this case, we'll add a reference URI to our + document. Full code:. + + A reference is a child of the story + 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 + parseDoc, 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: + + xmlAttrPtr newattr; + + We also need an extra xmlNodePtr: + + xmlNodePtr newnode; + + + + The rest of parseDoc is the same as before until we + check to see if our root element is story. If it is, + then we know we are at the right spot to add our element: + + + newnode = xmlNewTextChild (cur, NULL, "reference", NULL); + newattr = xmlNewProp (newnode, "uri", uri); + + + + First we add a new node at the location of the current node + pointer, cur. using the xmlNewTextChild function. + + + + + 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. + + + + + Retrieving Attributes + + attribute + retrieving value + +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 URI we added in the previous + section. Full code: . + + 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 + getReference: + +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; +} + + + + + + The key function is xmlGetProp, which returns an + xmlChar containing the attribute's value. In this case, + we just print it out. + + + If you are using a DTD that declares a fixed or + default value for the attribute, this function will retrieve it. + + + + + + + + + + + Encoding Conversion + + + encoding + +Data encoding compatibility problems are one of the most common + difficulties encountered by programmers new to XML in + general and libxml in particular. Thinking + through the design of your application in light of this issue will help + avoid difficulties later. Internally, libxml + 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 libxml + functions. If you want your program's output in an encoding other than + UTF-8, you also must convert it. + + Libxml uses + iconv if it is available to convert + data. Without iconv, only UTF-8, UTF-16 and + ISO-8859-1 can be used as external formats. With + iconv, any format can be used provided + iconv is able to convert it to and from + UTF-8. Currently iconv 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 + iconv implementation is almost guaranteed to + support every format anyone has ever heard of. + + + 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 + libxml, 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. + + + + 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 stdout 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: + + The conversion, encapsulated in the example code in the + convert function, uses + libxml's + xmlFindCharEncodingHandler function: + + xmlCharEncodingHandlerPtr handler; + size = (int)strlen(in)+1; + out_size = size*2-1; + out = malloc((size_t)out_size); + +… + handler = xmlFindCharEncodingHandler(encoding); +… + handler->input(out, &out_size, in, &temp); +… + xmlSaveFormatFileEnc("-", doc, encoding, 1); + + + + handler is declared as a pointer to an + xmlCharEncodingHandler function. + + + The xmlCharEncodingHandler function needs + to be given the size of the input and output strings, which are + calculated here for strings in and + out. + + + xmlFindCharEncodingHandler takes as its + argument the data's initial encoding and searches + libxml's built-in set of conversion + handlers, returning a pointer to the function or NULL if none is + found. + + + The conversion function identified by handler + 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. + + + To output in a specified encoding rather than UTF-8, we use + xmlSaveFormatFileEnc, specifying the + encoding. + + + + + + + Compilation + + compiler flags + + Libxml includes a script, + xml2-config, that can be used to generate + flags for compilation and linking of programs written with the + library. For pre-processor and compiler flags, use xml2-config + --cflags. For library linking flags, use xml2-config + --libs. Other options are available using xml2-config + --help. + + + + Sample Document + &STORY; + + + Code for Keyword Example + + &KEYWORD; + + + + Code for XPath Example + + &XPATH; + + + + Code for Add Keyword Example + + &ADDKEYWORD; + + + + Code for Add Attribute Example + + &ADDATTRIBUTE; + + + + Code for Retrieving Attribute Value Example + + &GETATTRIBUTE; + + + + Code for Encoding Conversion Example + + &CONVERT; + + + + Acknowledgements + A number of people have generously offered feedback, code and + suggested improvements to this tutorial. In no particular order: + + Daniel Veillard + Marcus Labib Iskander + Christopher R. Harris + Igor Zlatkovic + Niraj Tolia + David Turover + + + + +
    diff --git a/doc/upgrade.html b/doc/upgrade.html new file mode 100644 index 0000000..569c3c1 --- /dev/null +++ b/doc/upgrade.html @@ -0,0 +1,112 @@ + + +Upgrading 1.x code
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    The XML C parser and toolkit of Gnome

    Upgrading 1.x code

    Developer Menu
    API Indexes
    Related links

    Incompatible changes:

    Version 2 of libxml2 is the first version introducing serious backward +incompatible changes. The main goals were:

      +
    • 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.
    • +
    • 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.
    • +
    • 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.
    • +

    How to fix libxml-1.x code:

    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, drop me a +mail:

      +
    1. 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
    2. +
    3. Node childs field has been renamed + children so s/childs/children/g should be applied + (probability of having "childs" anywhere else is close to 0+
    4. +
    5. The document don't have anymore a root element it has + been replaced by children 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 xmlDocGetRootElement(doc) 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/->root/->children/g will probably do it.
    6. +
    7. 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: +
        +
      1. lazy one, use the compatibility call + xmlKeepBlanksDefault(0) 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.
      2. +
      3. 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 + xmlIsBlankNode(node) returning 1 for such blank + nodes.
      4. +
      +

      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.

      +
    8. +
    9. 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 +
      xml2-config --cflags
      +

      output to generate you compile commands this will probably work out of + the box

      +
    10. +
    11. xmlDetectCharEncoding takes an extra argument indicating the length in + byte of the head of the document available for character detection.
    12. +

    Ensuring both libxml-1.x and libxml-2.x compatibility

    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:

      +
    1. similar include naming, one should use + #include<libxml/...> in both cases.
    2. +
    3. similar identifiers defined via macros for the child and root fields: + respectively xmlChildrenNode and + xmlRootNode
    4. +
    5. a new macro LIBXML_TEST_VERSION which should be + inserted once in the client code
    6. +

    So the roadmap to upgrade your existing libxml applications is the +following:

      +
    1. install the libxml-1.8.8 (and libxml-devel-1.8.8) packages
    2. +
    3. find all occurrences where the xmlDoc root field is + used and change it to xmlRootNode
    4. +
    5. similarly find all occurrences where the xmlNode + childs field is used and change it to + xmlChildrenNode
    6. +
    7. add a LIBXML_TEST_VERSION macro somewhere in your + main() or in the library init entry point
    8. +
    9. Recompile, check compatibility, it should still work
    10. +
    11. 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.
    12. +
    13. 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)
    14. +
    15. remove your config.cache, relaunch your configuration mechanism, and + recompile, if steps 2 and 3 were done right it should compile as-is
    16. +
    17. 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 + LIBXML_TEST_VERSION is a fine place).
    18. +

    Following those steps should work. It worked for some of my own code.

    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 ...

    Daniel Veillard

    diff --git a/doc/w3c.png b/doc/w3c.png new file mode 100644 index 0000000..c541c20 Binary files /dev/null and b/doc/w3c.png differ diff --git a/doc/wiki.xsl b/doc/wiki.xsl new file mode 100644 index 0000000..c072d20 --- /dev/null +++ b/doc/wiki.xsl @@ -0,0 +1,589 @@ + + + + + + + + + + + + wiki + ../ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +    #define 
    +    
    +
    + + +
    +    Variable 
    +    
    +      
    +    
    +     
    +    
    +    
    +    
    +
    +
    +    
    +
    + + + +
    +    
    +      
    +	Enum 
    +	
    +	
    +
    +      
    +      
    +	Typedef 
    +	
    +	  
    +	
    +	 
    +	
    +	
    +
    +      
    +    
    +    
    +
    + + + +

    Enum

    +
    +      Enum 
    +      
    +       {
    +
    +      
    +        
    +            
    +        
    +         = 
    +        
    +        
    +	   : 
    +	  
    +	    
    +	  
    +        
    +        
    +
    +      
    +      }
    +
    +    
    +
    + + +
    +    Structure 
    + + + + The content of this structure is not made public by the API. + + +
    +
    + + +

    Structure

    +
    +    Structure 
    + { + + + The content of this structure is not made public by the API. + + + + + + + + + + + : + + + + + + + + } +
    +
    + + + +

    Macro:

    +
    #define 
    +

    + + + +

    + +
    + + + + + + +
    +    
    +      
    +    
    +    	
    +    
    +    
    +      	
    +    
    +    
    +      	
    +    
    +    	(
    +    
    +      void
    +    
    +    
    +      
    +        
    +      
    +       
    +      
    +      
    +        , 
    + + + + + + + +
    +
    + ) +
    + +
    + + + + + + +
    +    Function type: 
    +    
    +    
    +
    +    
    +      
    +    
    +    	
    +    
    +    
    +      	
    +    
    +    
    +      	
    +    
    +    	(
    +    
    +      void
    +    
    +    
    +      
    +        
    +      
    +       
    +      
    +      
    +        , 
    + + + + + + + +
    +
    + ) + +
    + + +
    + + + + + + +

    + + Function type: + +

    +
    +    Function type: 
    +    
    +    
    +
    +    
    +      
    +    
    +    	
    +    
    +    
    +      	
    +    
    +    
    +      	
    +    
    +    	(
    +    
    +      void
    +    
    +    
    +      
    +        
    +      
    +       
    +      
    +      
    +        , 
    + + + + + + + +
    +
    + ) + +
    +

    + + + +

    + +
    + + + + + + + + + + + + +
    : + + + +
    Returns: + + + +
    +
    +
    + + +
    + + + + + + +

    Function:

    +
    +    
    +      
    +    
    +    	
    +    
    +    
    +      	
    +    
    +    
    +      	
    +    
    +    	(
    +    
    +      void
    +    
    +    
    +      
    +        
    +      
    +       
    +      
    +      
    +        , 
    + + + + + + + +
    +
    + )
    + + +
    +

    + + + +

    + + +
    + + + + + + + + + + + + +
    : + + + +
    Returns: + + + +
    +
    +
    + + + + + + + + + + + +

    This module is deprecated

    +
    + +

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + Module from + + + + + + + +
    + + + +
    +

    Table of Contents

    + +

    Description

    + + + +
    +
    + +

    Table of Contents

    + + + + + + + + + + + + + + + +

    Description

    + + + + + + + + + + + + + + + + + +
    +
    +
    +
    +
    + + + +
    + +

    +
    + + + + Reference Manual for + + + + + + + +
    + +
    +
    +
    + + + + + + + + +
    diff --git a/doc/xml.html b/doc/xml.html new file mode 100644 index 0000000..d035934 --- /dev/null +++ b/doc/xml.html @@ -0,0 +1,6160 @@ + + + + The XML C parser and toolkit of Gnome + + + +

    The XML C parser and toolkit of Gnome

    + +

    Note: this is the flat content of the web +site

    + +

    libxml, a.k.a. gnome-xml

    + +

    + +

    "Programming +with libxml2 is like the thrilling embrace of an exotic stranger." Mark +Pilgrim

    + +

    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 MIT +License. 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 variety of language bindings make it available in +other environments.

    + +

    Libxml2 is known to be very portable, the library should build and work +without serious troubles on a variety of systems (Linux, Unix, Windows, +CygWin, MacOS, MacOS X, RISC Os, OS/2, VMS, QNX, MVS, VxWorks, ...)

    + +

    Libxml2 implements a number of existing standards related to markup +languages:

    + + +

    In most cases libxml2 tries to implement the specifications in a +relatively strictly compliant way. As of release 2.4.16, libxml2 passed all +1800+ tests from the OASIS XML Tests +Suite.

    + +

    To some extent libxml2 provides support for the following additional +specifications but doesn't claim to implement them completely:

    +
      +
    • Document Object Model (DOM) http://www.w3.org/TR/DOM-Level-2-Core/ + the document model, but it doesn't implement the API itself, gdome2 does + this on top of libxml2
    • +
    • RFC 959 : + libxml2 implements a basic FTP client code
    • +
    • RFC 1945 : + HTTP/1.0, again a basic HTTP client code
    • +
    • SAX: a SAX2 like interface and a minimal SAX1 implementation compatible + with early expat versions
    • +
    + +

    A partial implementation of XML Schemas Part +1: Structure is being worked on but it would be far too early to make any +conformance statement about it at the moment.

    + +

    Separate documents:

    + +

    Hosting sponsored by Open Source CMS services from AOE media.

    + +

    Logo designed by Marc Liyanage.

    + +

    Introduction

    + +

    This document describes libxml, the XML C parser and toolkit developed for the +Gnome project. XML is a standard for building tag-based +structured documents/data.

    + +

    Here are some key points about libxml:

    +
      +
    • Libxml2 exports Push (progressive) and Pull (blocking) type parser + interfaces for both XML and HTML.
    • +
    • Libxml2 can do DTD validation at parse time, using a parsed document + instance, or with an arbitrary DTD.
    • +
    • Libxml2 includes complete XPath, XPointer and XInclude implementations.
    • +
    • 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.
    • +
    • Basic support for HTTP and FTP client allowing applications to fetch + remote resources.
    • +
    • The design is modular, most of the extensions can be compiled out.
    • +
    • The internal document representation is as close as possible to the DOM interfaces.
    • +
    • Libxml2 also has a SAX like interface; + the interface is designed to be compatible with Expat.
    • +
    • This library is released under the MIT + License. See the Copyright file in the distribution for the precise + wording.
    • +
    + +

    Warning: unless you are forced to because your application links with a +Gnome-1.X library requiring it, Do Not Use libxml1, use +libxml2

    + +

    FAQ

    + +

    Table of Contents:

    + + +

    License(s)

    +
      +
    1. Licensing Terms for libxml +

      libxml2 is released under the MIT + License; see the file Copyright in the distribution for the precise + wording

      +
    2. +
    3. Can I embed libxml2 in a proprietary application ? +

      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.

      +
    4. +
    + +

    Installation

    +
      +
    1. Do Not Use + libxml1, use libxml2
    2. +

      +
    3. Where can I get libxml ? +

      The original distribution comes from xmlsoft.org or gnome.org

      +

      Most Linux and BSD distributions include libxml, this is probably the + safer way for end-users to use libxml.

      +

      David Doolin provides precompiled Windows versions at http://www.ce.berkeley.edu/~doolin/code/libxmlwin32/

      +
    4. +

      +
    5. I see libxml and libxml2 releases, which one should I install ? +
        +
      • If you are not constrained by backward compatibility issues with + existing applications, install libxml2 only
      • +
      • If you are not doing development, you can safely install both. + Usually the packages libxml and libxml2 are + compatible (this is not the case for development packages).
      • +
      • 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 libxml-devel + and libxml2-devel + too for libxml2 >= 2.3.0
      • +
      • If you are developing a new application, please develop against + libxml2(-devel)
      • +
      +
    6. +
    7. I can't install the libxml package, it conflicts with libxml0 +

      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 xmlsoft.org provide + libxml.so.0

      +
    8. +
    9. I can't install the libxml(2) RPM package due to failed + dependencies +

      The most generic solution is to re-fetch the latest src.rpm , and + rebuild it locally with

      +

      rpm --rebuild libxml(2)-xxx.src.rpm.

      +

      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.

      +
    10. +
    + +

    Compilation

    +
      +
    1. What is the process to compile libxml2 ? +

      As most UNIX libraries libxml2 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 a similar utility to + update your list of installed shared libs.

      +
    2. +
    3. What other libraries are needed to compile/install libxml2 ? +

      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).

      +

      However if found at configuration time libxml2 will detect and use the + following libs:

      +
        +
      • libz : a + highly portable and available widely compression library.
      • +
      • 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 part + of the official UNIX specification. Here is one implementation of the + library which source can be found here.
      • +
      +
    4. +

      +
    5. Make check fails on some platforms +

      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.

      +

      Sometimes (especially on Solaris) make checks fail due to limitations + in make. Try using GNU-make instead.

      +
    6. +
    7. I use the SVN version and there is no configure script +

      The configure script (and other Makefiles) are generated. Use the + autogen.sh script to regenerate the configure script and Makefiles, + like:

      +

      ./autogen.sh --prefix=/usr --disable-shared

      +
    8. +
    9. I have troubles when running make tests with gcc-3.0 +

      It seems the initial release of gcc-3.0 has a problem with the + optimizer which miscompiles the URI module. Please use another + compiler.

      +
    10. +
    + +

    Developer corner

    +
      +
    1. Troubles compiling or linking programs using libxml2 +

      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 + xml2-config which is installed as part of libxml2 usual + install process which provides those flags. Use

      +

      xml2-config --cflags

      +

      to get the compilation flags and

      +

      xml2-config --libs

      +

      to get the linker flags. Usually this is done directly from the + Makefile as:

      +

      CFLAGS=`xml2-config --cflags`

      +

      LIBS=`xml2-config --libs`

      +
    2. +
    3. I want to install my own copy of libxml2 in my home directory and + link my programs against it, but it doesn't work +

      There are many different ways to accomplish this. Here is one way to + do this under Linux. Suppose your home directory is /home/user. + Then:

      +
        +
      • Create a subdirectory, let's call it myxml
      • +
      • unpack the libxml2 distribution into that subdirectory
      • +
      • chdir into the unpacked distribution + (/home/user/myxml/libxml2 )
      • +
      • configure the library using the "--prefix" switch, + specifying an installation subdirectory in + /home/user/myxml, e.g. +

        ./configure --prefix /home/user/myxml/xmlinst {other + configuration options}

        +
      • +
      • now run make followed by make install
      • +
      • At this point, the installation subdirectory contains the complete + "private" include files, library files and binary program files (e.g. + xmllint), located in +

        /home/user/myxml/xmlinst/lib, + /home/user/myxml/xmlinst/include and + /home/user/myxml/xmlinst/bin

        + respectively.
      • +
      • In order to use this "private" library, you should first add it to + the beginning of your default PATH (so that your own private program + files such as xmllint will be used instead of the normal system + ones). To do this, the Bash command would be +

        export PATH=/home/user/myxml/xmlinst/bin:$PATH

        +
      • +
      • Now suppose you have a program test1.c that you would + like to compile with your "private" library. Simply compile it using + the command +

        gcc `xml2-config --cflags --libs` -o test test.c

        + Note that, because your PATH has been set with + /home/user/myxml/xmlinst/bin at the beginning, the xml2-config + program which you just installed will be used instead of the system + default one, and this will automatically get the correct + libraries linked with your program.
      • +
      +
    4. + +

      +
    5. xmlDocDump() generates output on one line. +

      Libxml2 will not invent spaces in the content of a + document since all spaces in the content of a document are + significant. If you build a tree from the API and want + indentation:

      +
        +
      1. the correct way is to generate those yourself too.
      2. +
      3. the dangerous way is to ask libxml2 to add those blanks to your + content modifying the content of your document in the + process. The result may not be what you expect. There is + NO way to guarantee that such a modification won't + affect other parts of the content of your document. See xmlKeepBlanksDefault + () and xmlSaveFormatFile + ()
      4. +
      +
    6. +

      +
    7. Extra nodes in the document: +

      For an XML file as below:

      +
      <?xml version="1.0"?>
      +<PLAN xmlns="http://www.argus.ca/autotest/1.0/">
      +<NODE CommFlag="0"/>
      +<NODE CommFlag="1"/>
      +</PLAN>
      +

      after parsing it with the function + pxmlDoc=xmlParseFile(...);

      +

      I want to the get the content of the first node (node with the + CommFlag="0")

      +

      so I did it as following;

      +
      xmlNodePtr pnode;
      +pnode=pxmlDoc->children->children;
      +

      but it does not work. If I change it to

      +
      pnode=pxmlDoc->children->children->next;
      +

      then it works. Can someone explain it to me.

      +

      +

      In XML all characters in the content of the document are significant + including blanks and formatting line breaks.

      +

      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 xmlKeepBlanksDefault + () 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.

      +
    8. +
    9. I get compilation errors of existing code like when accessing + root or child fields of nodes. +

      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 following the instructions.

      +
    10. +
    11. I get compilation errors about non existing + xmlRootNode or xmlChildrenNode + fields. +

      The source code you are using has been upgraded to be able to compile with both libxml + and libxml2, but you need to install a more recent version: + libxml(-devel) >= 1.8.8 or libxml2(-devel) >= 2.1.0

      +
    12. +
    13. Random crashes in threaded applications +

      Read and follow all advices on the thread + safety page, and make 100% sure you never call xmlCleanupParser() + while the library or an XML document might still be in use by another + thread.

      +
    14. +
    15. The example provided in the web page does not compile. +

      It's hard to maintain the documentation in sync with the code + <grin/> ...

      +

      Check the previous points 1/ and 2/ raised before, and please send + patches.

      +
    16. +
    17. Where can I get more examples and information than provided on the + web page? +

      Ideally a libxml2 book would be nice. I have no such plan ... But you + can:

      +
        +
      • check more deeply the existing + generated doc
      • +
      • have a look at the set of + examples.
      • +
      • look for examples of use for libxml2 function using the Gnome code + or by asking on Google.
      • +
      • Browse + the libxml2 source , 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.
      • +
      +
    18. +

      +
    19. What about C++ ? +

      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++.

      +

      There is however a C++ wrapper which may fulfill your needs:

      + +
    20. +
    21. How to validate a document a posteriori ? +

      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 xmlValidateDtd() + function. It is also possible to simply add a DTD to an existing + document:

      +
      xmlDocPtr doc; /* your existing document */
      +xmlDtdPtr dtd = xmlParseDTD(NULL, filename_of_dtd); /* parse the DTD */
      +
      +        dtd->name = xmlStrDup((xmlChar*)"root_name"); /* use the given root */
      +
      +        doc->intSubset = dtd;
      +        if (doc->children == NULL) xmlAddChild((xmlNodePtr)doc, (xmlNodePtr)dtd);
      +        else xmlAddPrevSibling(doc->children, (xmlNodePtr)dtd);
      +          
      +
    22. +
    23. So what is this funky "xmlChar" used all the time? +

      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.

      +
    24. +
    25. etc ...
    26. +
    + +

    + +

    Developer Menu

    + +

    There are several on-line resources related to using libxml:

    +
      +
    1. Use the search engine to look up + information.
    2. +
    3. Check the FAQ.
    4. +
    5. Check the extensive + documentation automatically extracted from code comments.
    6. +
    7. Look at the documentation about libxml + internationalization support.
    8. +
    9. This page provides a global overview and some + examples on how to use libxml.
    10. +
    11. Code examples
    12. +
    13. John Fleck's libxml2 tutorial: html + or pdf.
    14. +
    15. If you need to parse large files, check the xmlReader API tutorial
    16. +
    17. James Henstridge wrote some nice + documentation explaining how to use the libxml SAX interface.
    18. +
    19. George Lebl wrote an article + for IBM developerWorks about using libxml.
    20. +
    21. Check the TODO + file.
    22. +
    23. Read the 1.x to 2.x upgrade path + description. If you are starting a new project using libxml you should + really use the 2.x version.
    24. +
    25. And don't forget to look at the mailing-list archive.
    26. +
    + +

    Reporting bugs and getting help

    + +

    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 Gnome +bug tracking database (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.

    + +

    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 guarantee and if a real issue is raised it should go on the +mailing-list for archival).

    + +

    There is also a mailing-list xml@gnome.org for libxml, with an on-line archive (old). To subscribe to this list, +please visit the associated Web page and +follow the instructions. Do not send code, I won't debug it +(but patches are really appreciated!).

    + +

    Please note that with the current amount of virus and SPAM, sending mail +to the list without being subscribed won't work. There is *far too many +bounces* (in the order of a thousand a day !) I cannot approve them manually +anymore. If your mail to the list bounced waiting for administrator approval, +it is LOST ! Repost it and fix the problem triggering the error. Also please +note that emails with +a legal warning asking to not copy or redistribute freely the information +they contain are NOT acceptable for the mailing-list, +such mail will as much as possible be discarded automatically, and are less +likely to be answered if they made it to the list, DO NOT +post to the list from an email address where such legal requirements are +automatically added, get private paying support if you can't share +information.

    + +

    Check the following before +posting:

    +
      +
    • Read the FAQ and use the + search engine to get information related to your problem.
    • +
    • Make sure you are using a recent + version, and that the problem still shows up in a recent version.
    • +
    • Check the list + archives to see if the problem was reported already. In this case + there is probably a fix available, similarly check the registered + open bugs.
    • +
    • Make sure you can reproduce the bug with xmllint or one of the test + programs found in source in the distribution.
    • +
    • Please send the command showing the error as well as the input (as an + attachment)
    • +
    + +

    Then send the bug with associated information to reproduce it to the xml@gnome.org 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.

    + +

    To be really clear about support:

    +
      +
    • Support or help requests MUST be sent to + the list or on bugzilla 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.
    • +
    • There is no guarantee of support. If + your question remains unanswered after a week, repost it, making sure you + gave all the detail needed and the information requested.
    • +
    • 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.
    • +
    + +

    Of course, bugs reported with a suggested patch for fixing them will +probably be processed faster than those without.

    + +

    If you're looking for help, a quick look at the list archive may actually +provide the answer. I usually send source samples when answering libxml2 +usage questions. The auto-generated documentation is +not as polished as I would like (i need to learn more about DocBook), but +it's a good starting point.

    + +

    How to help

    + +

    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 archives and the Gnome bug +database:

    +
      +
    1. Provide patches when you find problems.
    2. +
    3. 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
    4. +
    5. Provide documentation fixes (either as patches to the code comments or + as HTML diffs).
    6. +
    7. Provide new documentations pieces (translations, examples, etc + ...).
    8. +
    9. Check the TODO file and try to close one of the items.
    10. +
    11. Take one of the points raised in the archive or the bug database and + provide a fix. Get in touch with me + before to avoid synchronization problems and check that the suggested + fix will fit in nicely :-)
    12. +
    + +

    Downloads

    + +

    The latest versions of libxml2 can be found on the xmlsoft.org server ( FTP and rsync are available), there are also +mirrors (France and +Antonin Sprinzl also provide a +mirror in Austria). (NOTE that you need both the libxml(2) and libxml(2)-devel +packages installed to compile applications using libxml if using RPMs.)

    + +

    You can find all the history of libxml(2) and libxslt releases in the old directory. The precompiled +Windows binaries made by Igor Zlatovic are available in the win32 directory.

    + +

    Binary ports:

    + + +

    If you know other supported binary ports, please contact me.

    + +

    Snapshot:

    + + +

    Contributions:

    + +

    I do accept external contributions, especially if compiling on another +platform, get in touch with the list to upload the package, wrappers for +various languages have been provided, and can be found in the bindings section

    + +

    Libxml2 is also available from GIT:

    +
      +
    • See libxml2 Git web. + To checkout a local tree use:

      +
      git clone git://git.gnome.org/libxml2
      +
    • +
    • The libxslt module is also present + there.
    • +
    + +

    Releases

    + +

    The change log describes the recents commits +to the GIT code base.

    + +

    Here is the list of public releases:

    + +

    2.9.4: May 23 2016

    +
      +
    • Security:
      + More format string warnings with possible format string vulnerability (David Kilzer),
      + Avoid building recursive entities (Daniel Veillard),
      + Heap-based buffer overread in htmlCurrentChar (Pranjal Jumde),
      + Heap-based buffer-underreads due to xmlParseName (David Kilzer),
      + Heap use-after-free in xmlSAX2AttributeNs (Pranjal Jumde),
      + Heap use-after-free in htmlParsePubidLiteral and htmlParseSystemiteral (Pranjal Jumde),
      + Fix some format string warnings with possible format string vulnerability (David Kilzer),
      + Detect change of encoding when parsing HTML names (Hugh Davenport),
      + Fix inappropriate fetch of entities content (Daniel Veillard),
      + Bug 759398: Heap use-after-free in xmlDictComputeFastKey <https://bugzilla.gnome.org/show_bug.cgi?id=759398> (Pranjal Jumde),
      + Bug 758605: Heap-based buffer overread in xmlDictAddString <https://bugzilla.gnome.org/show_bug.cgi?id=758605> (Pranjal Jumde),
      + Bug 758588: Heap-based buffer overread in xmlParserPrintFileContextInternal <https://bugzilla.gnome.org/show_bug.cgi?id=758588> (David Kilzer),
      + Bug 757711: heap-buffer-overflow in xmlFAParsePosCharGroup <https://bugzilla.gnome.org/show_bug.cgi?id=757711> (Pranjal Jumde),
      + Add missing increments of recursion depth counter to XML parser. (Peter Simons)
      +
    • + +
    • Documentation:
      + Fix typo: s{ ec -> cr }cipt (Jan Pokorný),
      + Fix typos: dictio{ nn -> n }ar{y,ies} (Jan Pokorný),
      + Fix typos: PATH_{ SEAPARATOR -> SEPARATOR } (Jan Pokorný),
      + Correct a typo. (Shlomi Fish)
      +
    • + +
    • Portability:
      + Correct the usage of LDFLAGS (Mattias Hansson),
      + Revert the use of SAVE_LDFLAGS in configure.ac (Mattias Hansson),
      + libxml2 hardcodes -L/lib in zlib/lzma tests which breaks cross-compiles (Mike Frysinger),
      + Fix apibuild for a recently added construct (Daniel Veillard),
      + Use pkg-config to locate zlib when possible (Stewart Brodie),
      + Use pkg-config to locate ICU when possible (Stewart Brodie),
      + Portability to non C99 compliant compilers (Patrick Monnerat),
      + dict.h: Move xmlDictPtr definition before includes to allow direct inclusion. (Patrick Monnerat),
      + os400: tell about xmllint and xmlcatalog in README400. (Patrick Monnerat),
      + os400: properly process SGML add in XMLCATALOG command. (Patrick Monnerat),
      + os400: implement CL command XMLCATALOG. (Patrick Monnerat),
      + os400: compile and install program xmlcatalog (qshell-only). (Patrick Monnerat),
      + os400: expand tabs in sources, strip trailing blanks. (Patrick Monnerat),
      + os400: implement CL command XMLLINT. (Patrick Monnerat),
      + os400: compile and install program xmllint (qshell-only). (Patrick Monnerat),
      + os400: initscript make_module(): Use options instead of positional parameters. (Patrick Monnerat),
      + os400: c14n.rpgle: allow *omit for nullable reference parameters. (Patrick Monnerat),
      + os400: use like() for double type. (Patrick Monnerat),
      + os400: use like() for int type. (Patrick Monnerat),
      + os400: use like() for unsigned int type. (Patrick Monnerat),
      + os400: use like() for enum types. (Patrick Monnerat),
      + Add xz to xml2-config --libs output (Baruch Siach),
      + Bug 760190: configure.ac should be able to build --with-icu without icu-config tool <https://bugzilla.gnome.org/show_bug.cgi?id=760190> (David Kilzer),
      + win32\VC10\config.h and VS 2015 (Bruce Dawson),
      + Add configure maintainer mode (orzen)
      +
    • + +
    • Bug Fixes:
      + Avoid an out of bound access when serializing malformed strings (Daniel Veillard),
      + Unsigned addition may overflow in xmlMallocAtomicLoc() (David Kilzer),
      + Integer signed/unsigned type mismatch in xmlParserInputGrow() (David Kilzer),
      + Bug 763071: heap-buffer-overflow in xmlStrncat <https://bugzilla.gnome.org/show_bug.cgi?id=763071> (Pranjal Jumde),
      + Integer overflow parsing port number in URI (Michael Paddon),
      + Fix an error with regexp on nullable counted char transition (Daniel Veillard),
      + Fix memory leak with XPath namespace nodes (Nick Wellnhofer),
      + Fix namespace axis traversal (Nick Wellnhofer),
      + Fix null pointer deref in docs with no root element (Hugh Davenport),
      + Fix XSD validation of URIs with ampersands (Alex Henrie),
      + xmlschemastypes.c: accept endOfDayFrag Times set to "24:00:00" mean "end of day" and should not cause an error. (Patrick Monnerat),
      + xmlcatalog: flush stdout before interactive shell input. (Patrick Monnerat),
      + xmllint: flush stdout before interactive shell input. (Patrick Monnerat),
      + Don't recurse into OP_VALUEs in xmlXPathOptimizeExpression (Nick Wellnhofer),
      + Fix namespace::node() XPath expression (Nick Wellnhofer),
      + Fix OOB write in xmlXPathEmptyNodeSet (Nick Wellnhofer),
      + Fix parsing of NCNames in XPath (Nick Wellnhofer),
      + Fix OOB read with invalid UTF-8 in xmlUTF8Strsize (Nick Wellnhofer),
      + Do normalize string-based datatype value in RelaxNG facet checking (Audric Schiltknecht),
      + Bug 760921: REGRESSION (8eb55d78): doc/examples/io1 test fails after fix for "xmlSaveUri() incorrectly recomposes URIs with rootless paths" <https://bugzilla.gnome.org/show_bug.cgi?id=760921> (David Kilzer),
      + Bug 760861: REGRESSION (bf9c1dad): Missing results for test/schemas/regexp-char-ref_[01].xsd <https://bugzilla.gnome.org/show_bug.cgi?id=760861> (David Kilzer),
      + error.c: *input->cur == 0 does not mean no error (Pavel Raiskup),
      + Add missing RNG test files (David Kilzer),
      + Bug 760183: REGRESSION (v2.9.3): XML push parser fails with bogus UTF-8 encoding error when multi-byte character in large CDATA section is split across buffer <https://bugzilla.gnome.org/show_bug.cgi?id=760183> (David Kilzer),
      + Bug 758572: ASAN crash in make check <https://bugzilla.gnome.org/show_bug.cgi?id=758572> (David Kilzer),
      + Bug 721158: Missing ICU string when doing --version on xmllint <https://bugzilla.gnome.org/show_bug.cgi?id=721158> (David Kilzer),
      + python 3: libxml2.c wrappers create Unicode str already (Michael Stahl),
      + Add autogen.sh to distrib (orzen),
      + Heap-based buffer overread in xmlNextChar (Daniel Veillard)
      +
    • + +
    • Improvements:
      + Add more debugging info to runtest (Daniel Veillard),
      + Implement "runtest -u" mode (David Kilzer),
      + Add a make rule to rebuild for ASAN (Daniel Veillard)
      +
    • +
    +

    v2.9.3: Nov 20 2015

    +
      +
    • Security:
      + CVE-2015-8242 Buffer overead with HTML parser in push mode (Hugh Davenport),
      + CVE-2015-7500 Fix memory access error due to incorrect entities boundaries (Daniel Veillard),
      + CVE-2015-7499-2 Detect incoherency on GROW (Daniel Veillard),
      + CVE-2015-7499-1 Add xmlHaltParser() to stop the parser (Daniel Veillard),
      + CVE-2015-5312 Another entity expansion issue (David Drysdale),
      + CVE-2015-7497 Avoid an heap buffer overflow in xmlDictComputeFastQKey (David Drysdale),
      + CVE-2015-7498 Avoid processing entities after encoding conversion failures (Daniel Veillard),
      + CVE-2015-8035 Fix XZ compression support loop (Daniel Veillard),
      + CVE-2015-7942-2 Fix an error in previous Conditional section patch (Daniel Veillard),
      + CVE-2015-7942 Another variation of overflow in Conditional sections (Daniel Veillard),
      + CVE-2015-1819 Enforce the reader to run in constant memory (Daniel Veillard)
      + CVE-2015-7941_2 Cleanup conditional section error handling (Daniel Veillard),
      + CVE-2015-7941_1 Stop parsing on entities boundaries errors (Daniel Veillard),
      +
    • + +
    • Documentation:
      + Correct spelling of "calling" (Alex Henrie),
      + Fix a small error in xmllint --format description (Fabien Degomme),
      + Avoid XSS on the search of xmlsoft.org (Daniel Veillard)
      +
    • + +
    • Portability:
      + threads: use forward declarations only for glibc (Michael Heimpold),
      + Update Win32 configure.js to search for configure.ac (Daniel Veillard)
      +
    • + +
    • Bug Fixes:
      + Bug on creating new stream from entity (Daniel Veillard),
      + Fix some loop issues embedding NEXT (Daniel Veillard),
      + Do not print error context when there is none (Daniel Veillard),
      + Avoid extra processing of MarkupDecl when EOF (Hugh Davenport),
      + Fix parsing short unclosed comment uninitialized access (Daniel Veillard),
      + Add missing Null check in xmlParseExternalEntityPrivate (Gaurav Gupta),
      + Fix a bug in CData error handling in the push parser (Daniel Veillard),
      + Fix a bug on name parsing at the end of current input buffer (Daniel Veillard),
      + Fix the spurious ID already defined error (Daniel Veillard),
      + Fix previous change to node sort order (Nick Wellnhofer),
      + Fix a self assignment issue raised by clang (Scott Graham),
      + Fail parsing early on if encoding conversion failed (Daniel Veillard),
      + Do not process encoding values if the declaration if broken (Daniel Veillard),
      + Silence clang's -Wunknown-attribute (Michael Catanzaro),
      + xmlMemUsed is not thread-safe (Martin von Gagern),
      + Fix support for except in nameclasses (Daniel Veillard),
      + Fix order of root nodes (Nick Wellnhofer),
      + Allow attributes on descendant-or-self axis (Nick Wellnhofer),
      + Fix the fix to Windows locking (Steve Nairn),
      + Fix timsort invariant loop re: Envisage article (Christopher Swenson),
      + Don't add IDs in xmlSetTreeDoc (Nick Wellnhofer),
      + Account for ID attributes in xmlSetTreeDoc (Nick Wellnhofer),
      + Remove various unused value assignments (Philip Withnall),
      + Fix missing entities after CVE-2014-3660 fix (Daniel Veillard),
      + Revert "Missing initialization for the catalog module" (Daniel Veillard)
      +
    • + +
    • Improvements:
      + Reuse xmlHaltParser() where it makes sense (Daniel Veillard),
      + xmlStopParser reset errNo (Daniel Veillard),
      + Reenable xz support by default (Daniel Veillard),
      + Recover unescaped less-than character in HTML recovery parsing (Daniel Veillard),
      + Allow HTML serializer to output HTML5 DOCTYPE (Shaun McCance),
      + Regression test for bug #695699 (Nick Wellnhofer),
      + Add a couple of XPath tests (Nick Wellnhofer),
      + Add Python 3 rpm subpackage (Tomas Radej),
      + libxml2-config.cmake.in: update include directories (Samuel Martin),
      + Adding example from bugs 738805 to regression tests (Daniel Veillard)
      +
    • + +
    • Cleanups:
      +
    • +
    +

    2.9.2: Oct 16 2014

    +
      +
    • Security:
      + Fix for CVE-2014-3660 billion laugh variant (Daniel Veillard),
      + CVE-2014-0191 Do not fetch external parameter entities (Daniel Veillard)
      +
    • + +
    • Bug Fixes:
      + fix memory leak xml header encoding field with XML_PARSE_IGNORE_ENC (Bart De Schuymer),
      + xmlmemory: handle realloc properly (Yegor Yefremov),
      + Python generator bug raised by the const change (Daniel Veillard),
      + Windows Critical sections not released correctly (Daniel Veillard),
      + Parser error on repeated recursive entity expansion containing &lt; (Daniel Veillard),
      + xpointer : fixing Null Pointers (Gaurav Gupta),
      + Remove Unnecessary Null check in xpointer.c (Gaurav Gupta),
      + parser bug on misformed namespace attributes (Dennis Filder),
      + Pointer dereferenced before null check (Daniel Veillard),
      + Leak of struct addrinfo in xmlNanoFTPConnect() (Gaurav Gupta),
      + Possible overflow in HTMLParser.c (Daniel Veillard),
      + python/tests/sync.py assumes Python dictionaries are ordered (John Beck),
      + Fix Enum check and missing break (Gaurav Gupta),
      + xmlIO: Handle error returns from dup() (Philip Withnall),
      + Fix a problem properly saving URIs (Daniel Veillard),
      + wrong error column in structured error when parsing attribute values (Juergen Keil),
      + wrong error column in structured error when skipping whitespace in xml decl (Juergen Keil),
      + no error column in structured error handler for xml schema validation errors (Juergen Keil),
      + Couple of Missing Null checks (Gaurav Gupta),
      + Add couple of missing Null checks (Daniel Veillard),
      + xmlschemastypes: Fix potential array overflow (Philip Withnall),
      + runtest: Fix a memory leak on parse failure (Philip Withnall),
      + xmlIO: Fix an FD leak on gzdopen() failure (Philip Withnall),
      + xmlcatalog: Fix a memory leak on quit (Philip Withnall),
      + HTMLparser: Correctly initialise a stack allocated structure (Philip Withnall),
      + Check for tmon in _xmlSchemaDateAdd() is incorrect (David Kilzer),
      + Avoid Possible Null Pointer in trio.c (Gaurav Gupta),
      + Fix processing in SAX2 in case of an allocation failure (Daniel Veillard),
      + XML Shell command "cd" does not handle "/" at end of path (Daniel Veillard),
      + Fix various Missing Null checks (Gaurav Gupta),
      + Fix a potential NULL dereference (Daniel Veillard),
      + Add a couple of misisng check in xmlRelaxNGCleanupTree (Gaurav Gupta),
      + Add a missing argument check (Gaurav Gupta),
      + Adding a check in case of allocation error (Gaurav Gupta),
      + xmlSaveUri() incorrectly recomposes URIs with rootless paths (Dennis Filder),
      + Adding some missing NULL checks (Gaurav),
      + Fixes for xmlInitParserCtxt (Daniel Veillard),
      + Fix regressions introduced by CVE-2014-0191 patch (Daniel Veillard),
      + erroneously ignores a validation error if no error callback set (Daniel Veillard),
      + xmllint was not parsing the --c14n11 flag (Sérgio Batista),
      + Avoid Possible null pointer dereference in memory debug mode (Gaurav),
      + Avoid Double Null Check (Gaurav),
      + Restore context size and position after XPATH_OP_ARG (Nick Wellnhofer),
      + Fix xmlParseInNodeContext() if node is not element (Daniel Veillard),
      + Avoid a possible NULL pointer dereference (Gaurav),
      + Fix xmlTextWriterWriteElement when a null content is given (Daniel Veillard),
      + Fix an typo 'onrest' in htmlScriptAttributes (Daniel Veillard),
      + fixing a ptotential uninitialized access (Daniel Veillard),
      + Fix an fd leak in an error case (Daniel Veillard),
      + Missing initialization for the catalog module (Daniel Veillard),
      + Handling of XPath function arguments in error case (Nick Wellnhofer),
      + Fix a couple of missing NULL checks (Gaurav),
      + Avoid a possibility of dangling encoding handler (Gaurav),
      + Fix HTML push parser to accept HTML_PARSE_NODEFDTD (Arnold Hendriks),
      + Fix a bug loading some compressed files (Mike Alexander),
      + Fix XPath node comparison bug (Gaurav),
      + Type mismatch in xmlschemas.c (Gaurav),
      + Type mismatch in xmlschemastypes.c (Gaurav),
      + Avoid a deadcode in catalog.c (Daniel Veillard),
      + run close socket on Solaris, same as we do on other platforms (Denis Pauk),
      + Fix pointer dereferenced before null check (Gaurav),
      + Fix a potential NULL dereference in tree code (Daniel Veillard),
      + Fix potential NULL pointer dereferences in regexp code (Gaurav),
      + xmllint --pretty crashed without following numeric argument (Tim Galeckas),
      + Fix XPath expressions of the form '@ns:*' (Nick Wellnhofer),
      + Fix XPath '//' optimization with predicates (Nick Wellnhofer),
      + Clear up a potential NULL dereference (Daniel Veillard),
      + Fix a possible NULL dereference (Gaurav),
      + Avoid crash if allocation fails (Daniel Veillard),
      + Remove occasional leading space in XPath number formatting (Daniel Veillard),
      + Fix handling of mmap errors (Daniel Veillard),
      + Catch malloc error and exit accordingly (Daniel Veillard),
      + missing else in xlink.c (Ami Fischman),
      + Fix a parsing bug on non-ascii element and CR/LF usage (Daniel Veillard),
      + Fix a regression in xmlGetDocCompressMode() (Daniel Veillard),
      + properly quote the namespace uris written out during c14n (Aleksey Sanin),
      + Remove premature XInclude check on URI being relative (Alexey Neyman),
      + Fix missing break on last() function for attributes (dcb),
      + Do not URI escape in server side includes (Romain Bondue),
      + Fix an error in xmlCleanupParser (Alexander Pastukhov)
      +
    • + +
    • Documentation:
      + typo in error messages "colon are forbidden from..." (Daniel Veillard),
      + Fix a link to James SAX documentation old page (Daniel Veillard),
      + Fix typos in relaxng.c (Jan Pokorný),
      + Fix a doc typo (Daniel Veillard),
      + Fix typos in {tree,xpath}.c (errror) (Jan Pokorný),
      + Add limitations about encoding conversion (Daniel Veillard),
      + Fix typos in xmlschemas{,types}.c (Jan Pokorný),
      + Fix incorrect spelling entites->entities (Jan Pokorný),
      + Forgot to document 2.9.1 release, regenerate docs (Daniel Veillard)
      +
    • + +
    • Portability:
      + AC_CONFIG_FILES and executable bit (Roumen Petrov),
      + remove HAVE_CONFIG_H dependency in testlimits.c (Roumen Petrov),
      + fix some tabs mixing incompatible with python3 (Roumen Petrov),
      + Visual Studio 14 CTP defines snprintf() (Francis Dupont),
      + OS400: do not try to copy unexisting doc files (Patrick Monnerat),
      + OS400: use either configure.ac or configure.in. (Patrick Monnerat),
      + os400: make-src.sh: create physical file with target CCSID (Patrick Monnerat),
      + OS400: Add some more C macros equivalent procedures. (Patrick Monnerat),
      + OS400: use C macros to implement equivalent RPG support procedures. (Patrick Monnerat),
      + OS400: implement XPath macros as procedures for ILE/RPG support. (Patrick Monnerat),
      + OS400: include in distribution tarball. (Patrick Monnerat),
      + OS400: Add README: compilation directives and OS/400 specific stuff. (Patrick Monnerat),
      + OS400: Add compilation scripts. (Patrick Monnerat),
      + OS400: ILE RPG language header files. (Patrick Monnerat),
      + OS400: implement some macros as functions for ILE/RPG language support (that as no macros). (Patrick Monnerat),
      + OS400: UTF8<-->EBCDIC wrappers for system and external library calls (Patrick Monnerat),
      + OS400: Easy character transcoding support (Patrick Monnerat),
      + OS400: iconv functions compatibility wrappers and table builder. (Patrick Monnerat),
      + OS400: create architecture directory. Implement dlfcn emulation. (Patrick Monnerat),
      + Fix building when configuring without xpath and xptr (Daniel Veillard),
      + configure: Add --with-python-install-dir (Jonas Eriksson),
      + Fix compilation with minimum and xinclude. (Nicolas Le Cam),
      + Compile out use of xmlValidateNCName() when not available. (Nicolas Le Cam),
      + Fix compilation with minimum and schematron. (Nicolas Le Cam),
      + Legacy needs xmlSAX2StartElement() and xmlSAX2EndElement(). (Nicolas Le Cam),
      + Don't use xmlValidateName() when not available. (Nicolas Le Cam),
      + Fix a portability issue on Windows (Longstreth Jon),
      + Various portability patches for OpenVMS (Jacob (Jouk) Jansen),
      + Use specific macros for portability to OS/400 (Patrick Monnerat),
      + Add macros needed for OS/400 portability (Patrick Monnerat),
      + Portability patch for fopen on OS/400 (Patrick Monnerat),
      + Portability fixes for OS/400 (Patrick Monnerat),
      + Improve va_list portability (Patrick Monnerat),
      + Portability fix (Patrick Monnerat),
      + Portability fix (Patrick Monnerat),
      + Generic portability fix (Patrick Monnerat),
      + Shortening lines in headers (Patrick Monnerat),
      + build: Use pkg-config to find liblzma in preference to AC_CHECK_LIB (Philip Withnall),
      + build: Add @LZMA_LIBS@ to libxml’s pkg-config files (Philip Withnall),
      + fix some tabs mixing incompatible with python3 (Daniel Veillard),
      + add additional defines checks for support "./configure --with-minimum" (Denis Pauk),
      + Another round of fixes for older versions of Python (Arfrever Frehtes Taifersar Arahesis),
      + python: fix drv_libxml2.py for python3 compatibility (Alexandre Rostovtsev),
      + python: Fix compiler warnings when building python3 bindings (Armin K),
      + Fix for compilation with python 2.6.8 (Petr Sumbera)
      +
    • + +
    • Improvements:
      + win32/libxml2.def.src after rebuild in doc (Roumen Petrov),
      + elfgcchack.h: more legacy needs xmlSAX2StartElement() and xmlSAX2EndElement() (Roumen Petrov),
      + elfgcchack.h: add xmlXPathNodeEval and xmlXPathSetContextNode (Roumen Petrov),
      + Provide cmake module (Samuel Martin),
      + Fix a couple of issues raised by make dist (Daniel Veillard),
      + Fix and add const qualifiers (Kurt Roeckx),
      + Preparing for upcoming release of 2.9.2 (Daniel Veillard),
      + Fix zlib and lzma libraries check via command line (Dmitriy),
      + wrong error column in structured error when parsing end tag (Juergen Keil),
      + doc/news.html: small update to avoid line join while generating NEWS. (Patrick Monnerat),
      + Add methods for python3 iterator (Ron Angeles),
      + Support element node traversal in document fragments. (Kyle VanderBeek),
      + xmlNodeSetName: Allow setting the name to a substring of the currently set name (Tristan Van Berkom),
      + Added macros for argument casts (Eric Zurcher),
      + adding init calls to xml and html Read parsing entry points (Daniel Veillard),
      + Get rid of 'REPLACEMENT CHARACTER' Unicode chars in xmlschemas.c (Jan Pokorný),
      + Implement choice for name classes on attributes (Shaun McCance),
      + Two small namespace tweaks (Daniel Veillard),
      + xmllint --memory should fail on empty files (Daniel Veillard),
      + Cast encoding name to char pointer to match arg type (Nikolay Sivov)
      +
    • + +
    • Cleanups:
      + Removal of old configure.in (Daniel Veillard),
      + Unreachable code in tree.c (Gaurav Gupta),
      + Remove a couple of dead conditions (Gaurav Gupta),
      + Avoid some dead code and cleanup in relaxng.c (Gaurav),
      + Drop not needed checks (Denis Pauk),
      + Fix a wrong test (Daniel Veillard)
      +
    • +
    +

    2.9.1: Apr 19 2013

    +
      +
    • Features:
      + Support for Python3 (Daniel Veillard),
      + Add xmlXPathSetContextNode and xmlXPathNodeEval (Alex Bligh)
      +
    • + +
    • Documentation:
      + Add documentation for xmllint --xpath (Daniel Veillard),
      + Fix the URL of the SAX documentation from James (Daniel Veillard),
      + Fix spelling of "length". (Michael Wood)
      +
    • + +
    • Portability:
      + Fix python bindings with versions older than 2.7 (Daniel Veillard),
      + rebuild docs:Makefile.am (Roumen Petrov),
      + elfgcchack.h after rebuild in doc (Roumen Petrov),
      + elfgcchack for buf module (Roumen Petrov),
      + Fix a uneeded and wrong extra link parameter (Daniel Veillard),
      + Few cleanup patches for Windows (Denis Pauk),
      + Fix rpmbuild --nocheck (Mark Salter),
      + Fix for win32/configure.js and WITH_THREAD_ALLOC (Daniel Richard),
      + Fix Broken multi-arch support in xml2-config (Daniel Veillard),
      + Fix a portability issue for GCC < 3.4.0 (Daniel Veillard),
      + Windows build fixes (Daniel Richard),
      + Fix a thread portability problem (Friedrich Haubensak),
      + Downgrade autoconf requirement to 2.63 (Daniel Veillard)
      +
    • + +
    • Bug Fixes:
      + Fix a linking error for python bindings (Daniel Veillard),
      + Fix a couple of return without value (Jüri Aedla),
      + Improve the hashing functions (Daniel Franke),
      + Improve handling of xmlStopParser() (Daniel Veillard),
      + Remove risk of lockup in dictionary initialization (Daniel Veillard),
      + Activate detection of encoding in external subset (Daniel Veillard),
      + Fix an output buffer flushing conversion bug (Mikhail Titov),
      + Fix an old bug in xmlSchemaValidateOneElement (Csaba László),
      + Fix configure cannot remove messages (Gilles Espinasse),
      + fix schema validation in combination with xsi:nil (Daniel Veillard),
      + xmlCtxtReadFile doesn't work with literal IPv6 URLs (Steve Wolf),
      + Fix a few problems with setEntityLoader (Alexey Neyman),
      + Detect excessive entities expansion upon replacement (Daniel Veillard),
      + Fix the flushing out of raw buffers on encoding conversions (Daniel,
      +Veillard),
      + Fix some buffer conversion issues (Daniel Veillard),
      + When calling xmlNodeDump make sure we grow the buffer quickly (Daniel,
      +Veillard),
      + Fix an error in the progressive DTD parsing code (Dan Winship),
      + xmllint should not load DTD by default when using the reader (Daniel,
      +Veillard),
      + Try IBM-037 when looking for EBCDIC handlers (Petr Sumbera),
      + Fix potential out of bound access (Daniel Veillard),
      + Fix large parse of file from memory (Daniel Veillard),
      + Fix a bug in the nsclean option of the parser (Daniel Veillard),
      + Fix a regression in 2.9.0 breaking validation while streaming (Daniel,
      +Veillard),
      + Remove potential calls to exit() (Daniel Veillard)
      +
    • + +
    • Improvements:
      + Regenerated API, and testapi, rebuild documentation (Daniel Veillard),
      + Fix tree iterators broken by 2to3 script (Daniel Veillard),
      + update all tests for Python3 and Python2 (Daniel Veillard),
      + A few more fixes for python 3 affecting libxml2.py (Daniel Veillard),
      + Fix compilation on Python3 (Daniel Veillard),
      + Converting apibuild.py to python3 (Daniel Veillard),
      + First pass at starting porting to python3 (Daniel Veillard),
      + updated configure.in for python3 (Daniel Veillard),
      + Add support for xpathRegisterVariable in Python (Shaun McCance),
      + Added a regression tests from bug 694228 data (Daniel Veillard),
      + Cache presence of '<' in entities content (Daniel Veillard),
      + Avoid extra processing on entities (Daniel Veillard),
      + Python binding for xmlRegisterInputCallback (Alexey Neyman),
      + Python bindings: DOM casts everything to xmlNode (Alexey Neyman),
      + Define LIBXML_THREAD_ALLOC_ENABLED via xmlversion.h (Tim Starling),
      + Adding streaming validation to runtest checks (Daniel Veillard),
      + Add a --pushsmall option to xmllint (Daniel Veillard)
      +
    • + +
    • Cleanups:
      + Switched comment in file to UTF-8 encoding (Daniel Veillard),
      + Extend gitignore (Daniel Veillard),
      + Silent the new python test on input (Alexey Neyman),
      + Cleanup of a duplicate test (Daniel Veillard),
      + Cleanup on duplicate test expressions (Daniel Veillard),
      + Fix compiler warning after 153cf15905cf4ec080612ada6703757d10caba1e (Patrick,
      +Gansterer),
      + Spec cleanups and a fix for multiarch support (Daniel Veillard),
      + Silence a clang warning (Daniel Veillard),
      + Cleanup the Copyright to be pure MIT Licence wording (Daniel Veillard),
      + rand_seed should be static in dict.c (Wouter Van Rooy),
      + Fix typos in parser comments (Jan Pokorný)
      +
    • +
    +

    2.9.0: Sep 11 2012

    +
      +
    • Features:
      + A few new API entry points,
      + More resilient push parser mode,
      + A lot of portability improvement,
      + Faster XPath evaluation
      +
    • + +
    • Documentation:
      + xml2-config.1 markup error (Christian Weisgerber),
      + libxml(3) manpage typo fix (John Bradshaw),
      + More cleanups to the documentation part of libxml2 (Daniel Richard G)
      +
    • + +
    • Portability:
      + Bug 676544 - fails to build with --without-sax1 (Akira TAGOH),
      + fix builds not having stdint.h (Rob Richards),
      + GetProcAddressA is available only on WinCE (Daniel Veillard),
      + More updates and cleanups on autotools and Makefiles (Daniel Richard G),
      + More changes for Win32 compilation (Eric Zurcher),
      + Basic changes for Win32 builds of release 2.9.0: compile buf.c (Eric Zurcher),
      + Bundles all generated files for python into the distribution (Daniel Richard G),
      + Fix compiler warnings of wincecompat.c (Patrick Gansterer),
      + Fix non __GNUC__ build (Patrick Gansterer),
      + Fix windows unicode build (Patrick Gansterer),
      + clean redefinition of {v}snprintf in C-source (Roumen Petrov),
      + use xmlBuf... if DEBUG_INPUT is defined (Roumen Petrov),
      + fix runtests to use pthreads support for various Unix platforms (Daniel Richard G),
      + Various "make distcheck" and portability fixups 2nd part (Daniel Richard G),
      + Various "make distcheck" and portability fixups (Daniel Richard G),
      + Fix compilation on older Visual Studio (Daniel Veillard)
      +
    • + +
    • Bug Fixes:
      + Change the XPath code to percolate allocation errors (Daniel Veillard),
      + Fix reuse of xmlInitParser (Daniel Veillard),
      + Fix potential crash on entities errors (Daniel Veillard),
      + initialize var (Rob Richards),
      + Fix the XPath arity check to also check the XPath stack limits (Daniel Veillard),
      + Fix problem with specific and generic error handlers (Pietro Cerutti),
      + Avoid a potential infinite recursion (Daniel Veillard),
      + Fix an XSD error when generating internal automata (Daniel Veillard),
      + Patch for xinclude of text using multibyte characters (Vitaly Ostanin),
      + Fix a segfault on XSD validation on pattern error (Daniel Veillard),
      + Fix missing xmlsave.h module which was ignored in recent builds (Daniel Veillard),
      + Add a missing element check (Daniel Veillard),
      + Adding various checks on node type though the API (Daniel Veillard),
      + Namespace nodes can't be unlinked with xmlUnlinkNode (Daniel Veillard),
      + Fix make dist to include new private header files (Daniel Veillard),
      + More fixups on the push parser behaviour (Daniel Veillard),
      + Strengthen behaviour of the push parser in problematic situations (Daniel Veillard),
      + Enforce XML_PARSER_EOF state handling through the parser (Daniel Veillard),
      + Fixup limits parser (Daniel Veillard),
      + Do not fetch external parsed entities (Daniel Veillard),
      + Fix an error in previous commit (Aron Xu),
      + Fix entities local buffers size problems (Daniel Veillard),
      + Fix parser local buffers size problems (Daniel Veillard),
      + Fix a failure to report xmlreader parsing failures (Daniel Veillard)
      +
    • + +
    • Improvements:
      + Keep libxml2.syms when running "make distclean" (Daniel Veillard),
      + Allow to set the quoting character of an xmlWriter (Csaba Raduly),
      + Keep non-significant blanks node in HTML parser (Daniel Veillard),
      + Add a forbidden variable error number and message to XPath (Daniel Veillard),
      + Support long path names on WNT (Michael Stahl),
      + Improve HTML escaping of attribute on output (Daniel Veillard),
      + Handle ICU_LIBS as LIBADD, not LDFLAGS to prevent linking errors (Arfrever Frehtes Taifersar Arahesis),
      + Switching XPath node sorting to Timsort (Vojtech Fried),
      + Optimizing '//' in XPath expressions (Nick Wellnhofer),
      + Expose xmlBufShrink in the public tree API (Daniel Veillard),
      + Visible HTML elements close the head tag (Conrad Irwin),
      + Fix file and line report for XSD SAX and reader streaming validation (Daniel Veillard),
      + Fix const qualifyer to definition of xmlBufferDetach (Daniel Veillard),
      + minimize use of HAVE_CONFIG_H (Roumen Petrov),
      + fixup regression in Various "make distcheck" and portability fixups (Roumen Petrov),
      + Add support for big line numbers in error reporting (Daniel Veillard),
      + Avoid using xmlBuffer for serialization (Daniel Veillard),
      + Improve compatibility between xmlBuf and xmlBuffer (Daniel Veillard),
      + Provide new accessors for xmlOutputBuffer (Daniel Veillard),
      + Improvements for old buffer compatibility (Daniel Veillard),
      + Expand the limit test program (Daniel Veillard),
      + Improve error reporting on parser errors (Daniel Veillard),
      + Implement some default limits in the XPath module (Daniel Veillard),
      + Introduce some default parser limits (Daniel Veillard),
      + Cleanups and new limit APIs for dictionaries (Daniel Veillard),
      + Fixup for buf.c (Daniel Veillard),
      + Cleanup URI module memory allocation code (Daniel Veillard),
      + Extend testlimits (Daniel Veillard),
      + More avoid quadratic behaviour (Daniel Veillard),
      + Impose a reasonable limit on PI size (Daniel Veillard),
      + first version of testlimits new test (Daniel Veillard),
      + Avoid quadratic behaviour in some push parsing cases (Daniel Veillard),
      + Impose a reasonable limit on comment size (Daniel Veillard),
      + Impose a reasonable limit on attribute size (Daniel Veillard),
      + Harden the buffer code and make it more compatible (Daniel Veillard),
      + More cleanups for input/buffers code (Daniel Veillard),
      + Cleanup function xmlBufResetInput(),
      to set input from Buffer (Daniel Veillard) + Swicth the test program for characters to new input buffers (Daniel Veillard),
      + Convert the HTML tree module to the new buffers (Daniel Veillard),
      + Convert of the HTML parser to new input buffers (Daniel Veillard),
      + Convert the writer to new output buffer and save APIs (Daniel Veillard),
      + Convert XMLReader to the new input buffers (Daniel Veillard),
      + New saving functions using xmlBuf and conversion (Daniel Veillard),
      + Provide new xmlBuf based saving functions (Daniel Veillard),
      + Convert XInclude to the new input buffers (Daniel Veillard),
      + Convert catalog code to the new input buffers (Daniel Veillard),
      + Convert C14N to the new Input buffer (Daniel Veillard),
      + Convert xmlIO.c to the new input and output buffers (Daniel Veillard),
      + Convert XML parser to the new input buffers (Daniel Veillard),
      + Incompatible change to the Input and Output buffers (Daniel Veillard),
      + Adding new encoding function to deal with the new structures (Daniel Veillard),
      + Convert XPath to xmlBuf (Daniel Veillard),
      + Adding a new buf module for buffers (Daniel Veillard),
      + Memory error within SAX2 reuse common framework (Daniel Veillard),
      + Fix xmllint --xpath node initialization (Daniel Veillard)
      +
    • + +
    • Cleanups:
      + Various cleanups to avoid compiler warnings (Daniel Veillard),
      + Big space and tab cleanup (Daniel Veillard),
      + Followup to LibXML2 docs/examples cleanup patch (Daniel Veillard),
      + Second round of cleanups for LibXML2 docs/examples (Daniel Richard),
      + Remove all .cvsignore as they are not used anymore (Daniel Veillard),
      + Fix a Timsort function helper comment (Daniel Veillard),
      + Small cleanup for valgrind target (Daniel Veillard),
      + Patch for portability of latin characters in C files (Daniel Veillard),
      + Cleanup some of the parser code (Daniel Veillard),
      + Fix a variable name in comment (Daniel Veillard),
      + Regenerated testapi.c (Daniel Veillard),
      + Regenerating docs and API files (Daniel Veillard),
      + Small cleanup of unused variables in test (Daniel Veillard),
      + Expand .gitignore with more files (Daniel Veillard)
      +
    • +
    +

    2.8.0: May 23 2012

    +
      +
    • Features: + add lzma compression support (Anders F Bjorklund) +
    • + +
    • Documentation: + xmlcatalog: Add uri and delegateURI to possible add types in man page. (Ville Skyttä), + Update README.tests (Daniel Veillard), + URI handling code is not OOM resilient (Daniel Veillard), + Fix an error in comment (Daniel Veillard), + Fixed bug #617016 (Daniel Mustieles), + Fixed two typos in the README document (Daniel Neel), + add generated html files (Anders F Bjorklund), + Clarify the need to use xmlFreeNode after xmlUnlinkNode (Daniel Veillard), + Improve documentation a bit (Daniel Veillard), + Updated URL for lxml python bindings (Daniel Veillard) +
    • + +
    • Portability: + Restore code for Windows compilation (Daniel Veillard), + Remove git error message during configure (Christian Dywan), + xmllint: Build fix for endTimer if !defined(HAVE_GETTIMEOFDAY) (Patrick R. Gansterer), + remove a bashism in confgure.in (John Hein), + undef ERROR if already defined (Patrick R. Gansterer), + Fix library problems with mingw-w64 (Michael Cronenworth), + fix windows build. ifdef addition from bug 666491 makes no sense (Rob Richards), + prefer native threads on win32 (Sam Thursfield), + Allow to compile with Visual Studio 2010 (Thomas Lemm), + Fix mingw's snprintf configure check (Andoni Morales), + fixed a 64bit big endian issue (Marcus Meissner), + Fix portability failure if netdb.h lacks NO_ADDRESS (Daniel Veillard), + Fix windows build from lzma addition (Rob Richards), + autogen: Only check for libtoolize (Colin Walters), + Fix the Windows build files (Patrick von Reth), + 634846 Remove a linking option breaking Windows VC10 (Daniel Veillard), + 599241 fix an initialization problem on Win64 (Andrew W. Nosenko), + fix win build (Rob Richards) +
    • + +
    • Bug fixes: + Part for rand_r checking missing (Daniel Veillard), + Cleanup on randomization (Daniel Veillard), + Fix undefined reference in python module (Pacho Ramos), + Fix a race in xmlNewInputStream (Daniel Veillard), + Fix weird streaming RelaxNG errors (Noam), + Fix various bugs in new code raised by the API checking (Daniel Veillard), + Fix various problems with "make dist" (Daniel Veillard), + Fix a memory leak in the xzlib code (Daniel Veillard), + HTML parser error with <noscript> in the <head> (Denis Pauk), + XSD: optional element in complex type extension (Remi Gacogne), + Fix html serialization error and htmlSetMetaEncoding() (Daniel Veillard), + Fix a wrong return value in previous patch (Daniel Veillard), + Fix an uninitialized variable use (Daniel Veillard), + Fix a compilation problem with --minimum (Brandon Slack), + Remove redundant and ungarded include of resolv.h (Daniel Veillard), + xinclude with parse="text" does not use the entity loader (Shaun McCance), + Allow to parse 1 byte HTML files (Denis Pauk), + Patch that fixes the skipping of the HTML_PARSE_NOIMPLIED flag (Martin Schröder), + Avoid memory leak if xmlParserInputBufferCreateIO fails (Lin Yi-Li), + Prevent an infinite loop when dumping a node with encoding problems (Timothy Elliott), + xmlParseNodeInContext problems with an empty document (Tim Elliott), + HTML element position is not detected propperly (Pavel Andrejs), + Fix an off by one pointer access (Jüri Aedla), + Try to fix a problem with entities in SAX mode (Daniel Veillard), + Fix a crash with xmllint --path on empty results (Daniel Veillard), + Fixed bug #667946 (Daniel Mustieles), + Fix a logic error in Schemas Component Constraints (Ryan Sleevi), + Fix a wrong enum type use in Schemas Types (Nico Weber), + Fix SAX2 builder in case of undefined attributes namespace (Daniel Veillard), + Fix SAX2 builder in case of undefined element namespaces (Daniel Veillard), + fix reference to STDOUT_FILENO on MSVC (Tay Ray Chuan), + fix a pair of possible out of array char references (Daniel Veillard), + Fix an allocation error when copying entities (Daniel Veillard), + Make sure the parser returns when getting a Stop order (Chris Evans), + Fix some potential problems on reallocation failures(parser.c) (Xia Xinfeng), + Fix a schema type duration comparison overflow (Daniel Veillard), + Fix an unimplemented part in RNG value validation (Daniel Veillard), + Fix missing error status in XPath evaluation (Daniel Veillard), + Hardening of XPath evaluation (Daniel Veillard), + Fix an off by one error in encoding (Daniel Veillard), + Fix RELAX NG include bug #655288 (Shaun McCance), + Fix XSD validation bug #630130 (Toyoda Eizi), + Fix some potential problems on reallocation failures (Chris Evans), + __xmlRaiseError: fix use of the structured callback channel (Dmitry V. Levin), + __xmlRaiseError: fix the structured callback channel's data initialization (Dmitry V. Levin), + Fix memory corruption when xmlParseBalancedChunkMemoryInternal is called from xmlParseBalancedChunk (Rob Richards), + Small fix for previous commit (Daniel Veillard), + Fix a potential freeing error in XPath (Daniel Veillard), + Fix a potential memory access error (Daniel Veillard), + Reactivate the shared library versionning script (Daniel Veillard) +
    • + +
    • Improvements: + use mingw C99 compatible functions {v}snprintf instead those from MSVC runtime (Roumen Petrov), + New symbols added for the next release (Daniel Veillard), + xmlTextReader bails too quickly on error (Andy Lutomirski), + Use a hybrid allocation scheme in xmlNodeSetContent (Conrad Irwin), + Use buffers when constructing string node lists. (Conrad Irwin), + Add HTML parser support for HTML5 meta charset encoding declaration (Denis Pauk), + wrong message for double hyphen in comment XML error (Bryan Henderson), + Fix "make tst" to grab lzma lib too (Daniel Veillard), + Add "whereis" command to xmllint shell (Ryan), + Improve xmllint shell (Ryan), + add function xmlTextReaderRelaxNGValidateCtxt() (Noam Postavsky), + Add --system support to autogen.sh (Daniel Veillard), + Add hash randomization to hash and dict structures (Daniel Veillard), + included xzlib in dist (Anders F Bjorklund), + move xz/lzma helpers to separate included files (Anders F Bjorklund), + add generated devhelp files (Anders F Bjorklund), + add XML_WITH_LZMA to api (Anders F Bjorklund), + autogen.sh: Honor NOCONFIGURE environment variable (Colin Walters), + Improve the error report on undefined REFs (Daniel Veillard), + Add exception for new W3C PI xml-model (Daniel Veillard), + Add options to ignore the internal encoding (Daniel Veillard), + testapi: use the right type for the check (Stefan Kost), + various: handle return values of write calls (Stefan Kost), + testWriter: xmlTextWriterWriteFormatElement wants an int instead of a long int (Stefan Kost), + runxmlconf: update to latest testsuite version (Stefan Kost), + configure: add -Wno-long-long to CFLAGS (Stefan Kost), + configure: support silent automake rules if possible (Stefan Kost), + xmlmemory: add a cast as size_t has no portable printf modifier (Stefan Kost), + __xmlRaiseError: remove redundant schannel initialization (Dmitry V. Levin), + __xmlRaiseError: do cheap code check early (Dmitry V. Levin) +
    • + +
    • Cleanups: + Cleanups before 2.8.0-rc2 (Daniel Veillard), + Avoid an extra operation (Daniel Veillard), + Remove vestigial de-ANSI-fication support. (Javier Jardón), + autogen.sh: Fix typo (Javier Jardón), + Do not use unsigned but unsigned int (Daniel Veillard), + Remove two references to u_short (Daniel Veillard), + Fix -Wempty-body warning from clang (Nico Weber), + Cleanups of lzma support (Daniel Veillard), + Augment the list of ignored files (Daniel Veillard), + python: remove unused variable (Stefan Kost), + python: flag two unused args (Stefan Kost), + configure: acconfig.h is deprecated since autoconf-2.50 (Stefan Kost), + xpath: remove unused variable (Stefan Kost) +
    • +
    +

    2.7.8: Nov 4 2010

    +
      +
    • Features: + 480323 add code to plug in ICU converters by default (Giuseppe Iuculano), + Add xmlSaveOption XML_SAVE_WSNONSIG (Adam Spragg) +
    • +
    • Documentation: + Fix devhelp documentation installation (Mike Hommey), + Fix web site encoding problems (Daniel Veillard), + Fix a couple of typo in HTML parser error messages (Michael Day), + Forgot to update the news page for 0.7.7 (Daniel Veillard) +
    • +
    • Portability: + 607273 Fix python detection on MSys/Windows (LRN), + 614087 Fix Socket API usage to allow Windows64 compilation (Ozkan Sezer), + Fix compilation with Clang (Koop Mast), + Fix Win32 build (Rob Richards) +
    • +
    • Bug Fixes: + 595789 fix a remaining potential Solaris problem (Daniel Veillard), + 617468 fix progressive HTML parsing with style using "'" (Denis Pauk), + 616478 Fix xmllint shell write command (Gwenn Kahz), + 614005 Possible erroneous HTML parsing on unterminated script (Pierre Belzile), + 627987 Fix XSD IDC errors in imported schemas (Jim Panetta), + 629325 XPath rounding errors first cleanup (Phil Shafer), + 630140 fix iso995x encoding error (Daniel Veillard), + make sure htmlCtxtReset do reset the disableSAX field (Daniel Veillard), + Fix a change of semantic on XPath preceding and following axis (Daniel Veillard), + Fix a potential segfault due to weak symbols on pthreads (Mike Hommey), + Fix a leak in XPath compilation (Daniel Veillard), + Fix the semantic of XPath axis for namespace/attribute context nodes (Daniel Veillard), + Avoid a descriptor leak in catalog loading code (Carlo Bramini), + Fix a small bug in XPath evaluation code (Marius Wachtler), + Fix handling of XML-1.0 XML namespace declaration (Daniel Veillard), + Fix errors in XSD double validation check (Csaba Raduly), + Fix handling of apos in URIs (Daniel Veillard), + xmlTextReaderReadOuterXml should handle DTD (Rob Richards), + Autogen.sh needs to create m4 directory (Rob Richards) +
    • +
    • Improvements: + 606592 update language ID parser to RFC 5646 (Daniel Veillard), + Sort python generated stubs (Mike Hommey), + Add an HTML parser option to avoid a default doctype (Daniel Veillard) +
    • +
    • Cleanups: + 618831 don't ship generated files in git (Adrian Bunk), + Switch from the obsolete mkinstalldirs to AC_PROG_MKDIR_P (Adrian Bunk), + Various cleanups on encoding handling (Daniel Veillard), + Fix xmllint to use format=1 for default formatting (Adam Spragg), + Force _xmlSaveCtxt.format to be 0 or 1 (Adam Spragg), + Cleanup encoding pointer comparison (Nikolay Sivov), + Small code cleanup on previous patch (Daniel Veillard) +
    • +
    +

    2.7.7: Mar 15 2010

    +
      +
    • Improvements: + Adding a --xpath option to xmllint (Daniel Veillard), + Make HTML parser non-recursive (Eugene Pimenov) +
    • +
    • Portability: + relaxng.c: cast to allow compilation with sun studio 11 (Ben Walton), + Fix build failure on Sparc solaris (Roumen Petrov), + use autoreconf in autogen.sh (Daniel Veillard), + Fix build with mingw (Roumen Petrov), + Upgrade some of the configure and autogen (Daniel Veillard), + Fix relaxNG tests in runtest for Windows runtest.c: initialize ret (Rob Richards), + Fix a const warning in xmlNodeSetBase (Martin Trappel), + Fix python generator to not use deprecated xmllib (Daniel Veillard), + Update some automake files (Daniel Veillard), + 598785 Fix nanohttp on Windows (spadix) +
    • +
    • Bug Fixes: + libxml violates the zlib interface and crashes (Mark Adler), + Fix broken escape behaviour in regexp ranges (Daniel Veillard), + Fix missing win32 libraries in libxml-2.0.pc (Volker Grabsch), + Fix detection of python linker flags (Daniel Macks), + fix build error in libxml2/python (Paul Smith), + ChunkParser: Incorrect decoding of small xml files (Raul Hudea), + htmlCheckEncoding doesn't update input-end after shrink (Eugene Pimenov), + Fix a missing #ifdef (Daniel Veillard), + Fix encoding selection for xmlParseInNodeContext (Daniel Veillard), + xmlPreviousElementSibling mistake (François Delyon), + 608773 add a missing check in xmlGROW (Daniel Veillard), + Fix xmlParseInNodeContext for HTML content (Daniel Veillard), + Fix lost namespace when copying node * tree.c: reconcile namespace if not found (Rob Richards), + Fix some missing commas in HTML element lists (Eugene Pimenov), + Correct variable type to unsigned (Nikolay Sivov), + Recognize ID attribute in HTML without DOCTYPE (Daniel Veillard), + Fix memory leak in xmlXPathEvalExpression() (Martin), + Fix an init bug in global.c (Kai Henning), + Fix xmlNodeSetBase() comment (Daniel Veillard), + Fix broken escape behaviour in regexp ranges (Daniel Veillard), + Don't give default HTML boolean attribute values in parser (Daniel Veillard), + xmlCtxtResetLastError should reset ctxt-errNo (Daniel Veillard) +
    • +
    • Cleanups: + Cleanup a couple of weirdness in HTML parser (Eugene Pimenov) +
    • +
    +

    2.7.6: Oct 6 2009

    +
      +
    • Bug Fixes: + Restore thread support in default configuration (Andrew W. Nosenko), + URI with no path parsing problem (Daniel Veillard), + Minor patch for conditional defines in threads.c (Eric Zurcher) +
    • +
    +

    2.7.5: Sep 24 2009

    +
      +
    • Bug Fixes: + Restore behavior of --with-threads without argument (Andrew W. Nosenko), + Fix memory leak when doc is NULL (Rob Richards), + 595792 fixing a RelaxNG bug introduced in 2.7.4 (Daniel Veillard), + Fix a Relaxng bug raised by libvirt test suite (Daniel Veillard), + Fix a parsing problem with little data at startup (Daniel Veillard), + link python module with python library (Frederic Crozat), + 594874 Forgot an fclose in xmllint (Daniel Veillard) +
    • +
    • Cleanup: + Adding symbols.xml to EXTRA_DIST (Daniel Veillard) +
    • +
    +

    2.7.4: Sep 10 2009

    +
      +
    • Improvements: + Switch to GIT (GNOME), + Add symbol versioning to libxml2 shared libs (Daniel Veillard) +
    • +
    • Portability: + 593857 try to work around thread pbm MinGW 4.4 (Daniel Veillard), + 594250 rename ATTRIBUTE_ALLOC_SIZE to avoid clashes (Daniel Veillard), + Fix Windows build * relaxng.c: fix windows build (Rob Richards), + Fix the globals.h to use XMLPUBFUN (Paul Smith), + Problem with extern extern in header (Daniel Veillard), + Add -lnetwork for compiling on Haiku (Scott McCreary), + Runtest portability patch for Solaris (Tim Rice), + Small patch to accomodate the Haiku OS (Scott McCreary), + 584605 package VxWorks folder in the distribution (Daniel Veillard), + 574017 Realloc too expensive on most platform (Daniel Veillard), + Fix windows build (Rob Richards), + 545579 doesn't compile without schema support (Daniel Veillard), + xmllint use xmlGetNodePath when not compiled in (Daniel Veillard), + Try to avoid __imp__xmlFree link trouble on msys (Daniel Veillard), + Allow to select the threading system on Windows (LRN), + Fix Solaris binary links, cleanups (Daniel Veillard), + Bug 571059 – MSVC doesn't work with the bakefile (Intron), + fix ATTRIBUTE_PRINTF header clash (Belgabor and Mike Hommey), + fixes for Borland/CodeGear/Embarcadero compilers (Eric Zurcher) +
    • +
    • Documentation: + 544910 typo: "renciliateNs" (Leonid Evdokimov), + Add VxWorks to list of OSes (Daniel Veillard), + Regenerate the documentation and update for git (Daniel Veillard), + 560524 ¿ xmlTextReaderLocalName description (Daniel Veillard), + Added sponsoring by AOE media for the server (Daniel Veillard), + updated URLs for GNOME (Vincent Lefevre), + more warnings about xmlCleanupThreads and xmlCleanupParser (Daniel Veillard) +
    • +
    • Bug fixes: + 594514 memory leaks - duplicate initialization (MOD), + Wrong block opening in htmlNodeDumpOutputInternal (Daniel Veillard), + 492317 Fix Relax-NG validation problems (Daniel Veillard), + 558452 fight with reg test and error report (Daniel Veillard), + 558452 RNG compilation of optional multiple child (Daniel Veillard), + 579746 XSD validation not correct / nilable groups (Daniel Veillard), + 502960 provide namespace stack when parsing entity (Daniel Veillard), + 566012 part 2 fix regresion tests and push mode (Daniel Veillard), + 566012 autodetected encoding and encoding conflict (Daniel Veillard), + 584220 xpointer(/) and xinclude problems (Daniel Veillard), + 587663 Incorrect Attribute-Value Normalization (Daniel Veillard), + 444994 HTML chunked failure for attribute with <> (Daniel Veillard), + Fix end of buffer char being split in XML parser (Daniel Veillard), + Non ASCII character may be split at buffer end (Adiel Mittmann), + 440226 Add xmlXIncludeProcessTreeFlagsData API (Stefan Behnel), + 572129 speed up parsing of large HTML text nodes (Markus Kull), + Fix HTML parsing with 0 character in CDATA (Daniel Veillard), + Fix SetGenericErrorFunc and SetStructured clash (Wang Lam), + 566012 Incomplete EBCDIC parsing support (Martin Kogler), + 541335 HTML avoid creating 2 head or 2 body element (Daniel Veillard), + 541237 error correcting missing end tags in HTML (Daniel Veillard), + 583439 missing line numbers in push mode (Daniel Veillard), + 587867 xmllint --html --xmlout serializing as HTML (Daniel Veillard), + 559501 avoid select and use poll for nanohttp (Raphael Prevost), + 559410 - Regexp bug on (...)? constructs (Daniel Veillard), + Fix a small problem on previous HTML parser patch (Daniel Veillard), + 592430 - HTML parser runs into endless loop (Daniel Veillard), + 447899 potential double free in xmlFreeTextReader (Daniel Veillard), + 446613 small validation bug mixed content with NS (Daniel Veillard), + Fix the problem of revalidating a doc with RNG (Daniel Veillard), + Fix xmlKeepBlanksDefault to not break indent (Nick Wellnhofer), + 512131 refs from externalRef part need to be added (Daniel Veillard), + 512131 crash in xmlRelaxNGValidateFullElement (Daniel Veillard), + 588441 allow '.' in HTML Names even if invalid (Daniel Veillard), + 582913 Fix htmlSetMetaEncoding() to be nicer (Daniel Veillard), + 579317 Try to find the HTML encoding information (Daniel Veillard), + 575875 don't output charset=html (Daniel Veillard), + 571271 fix semantic of xsd:all with minOccurs=0 (Daniel Veillard), + 570702 fix a bug in regexp determinism checking (Daniel Veillard), + 567619 xmlValidateNotationUse missing param test (Daniel Veillard), + 574393 ¿ utf-8 filename magic for compressed files (Hans Breuer), + Fix a couple of problems in the parser (Daniel Veillard), + 585505 ¿ Document ids and refs populated by XSD (Wayne Jensen), + 582906 XSD validating multiple imports of the same schema (Jason Childs), + Bug 582887 ¿ problems validating complex schemas (Jason Childs), + Bug 579729 ¿ fix XSD schemas parsing crash (Miroslav Bajtos), + 576368 ¿ htmlChunkParser with special attributes (Jiri Netolicky), + Bug 565747 ¿ relax anyURI data character checking (Vincent Lefevre), + Preserve attributes of include start on tree copy (Petr Pajas), + Skip silently unrecognized XPointer schemes (Jakub Wilk), + Fix leak on SAX1, xmllint --sax1 option and debug (Daniel Veillard), + potential NULL dereference on non-glibc (Jim Meyering), + Fix an XSD validation crash (Daniel Veillard), + Fix a regression in streaming entities support (Daniel Veillard), + Fix a couple of ABI issues with C14N 1.1 (Aleksey Sanin), + Aleksey Sanin support for c14n 1.1 (Aleksey Sanin), + reader bug fix with entities (Daniel Veillard), + use options from current parser ctxt for external entities (Rob Richards), + 581612 use %s to printf strings (Christian Persch), + 584605 change the threading initialization sequence (Igor Novoseltsev), + 580705 keep line numbers in HTML parser (Aaron Patterson), + 581803 broken HTML table attributes init (Roland Steiner), + do not set error code in xmlNsWarn (Rob Richards), + 564217 fix structured error handling problems, + reuse options from current parser for entities (Rob Richards), + xmlXPathRegisterNs should not allow enpty prefixes (Daniel Veillard), + add a missing check in xmlAddSibling (Kris Breuker), + avoid leaks on errors (Jinmei Tatuya) +
    • +
    • Cleanup: + Chasing dead assignments reported by clang-scan (Daniel Veillard), + A few more safety cleanup raised by scan (Daniel Veillard), + Fixing assorted potential problems raised by scan (Daniel Veillard), + Potential uninitialized arguments raised by scan (Daniel Veillard), + Fix a bunch of scan 'dead increments' and cleanup (Daniel Veillard), + Remove a pedantic warning (Daniel Veillard), + 555833 always use rm -f in uninstall-local (Daniel Veillard), + 542394 xmlRegisterOutputCallbacks MAX_INPUT_CALLBACK (Daniel Veillard), + Autoregenerate libxml2.syms automated checkings (Daniel Veillard), + Make xmlRecoverDoc const (Martin Trappel) (Daniel Veillard), + Both args of xmlStrcasestr are const (Daniel Veillard), + hide the nbParse* variables used for debugging (Mike Hommey), + 570806 changed include of config.h (William M. Brack), + cleanups and error reports when xmlTextWriterVSprintf fails (Jinmei Tatuya) +
    • +
    +

    2.7.3: Jan 18 2009

    +
      +
    • Build fix: fix build when HTML support is not included.
    • +
    • Bug fixes: avoid memory overflow in gigantic text nodes, + indentation problem on the writed (Rob Richards), + xmlAddChildList pointer problem (Rob Richards and Kevin Milburn), + xmlAddChild problem with attribute (Rob Richards and Kris Breuker), + avoid a memory leak in an edge case (Daniel Zimmermann), + deallocate some pthread data (Alex Ott).
    • +
    • Improvements: configure option to avoid rebuilding docs (Adrian Bunk), + limit text nodes to 10MB max by default, add element traversal + APIs, add a parser option to enable pre 2.7 SAX behavior (Rob Richards), + add gcc malloc checking (Marcus Meissner), add gcc printf like functions + parameters checking (Marcus Meissner).
    • +
    +

    2.7.2: Oct 3 2008

    +
      +
    • Portability fix: fix solaris compilation problem, fix compilation + if XPath is not configured in
    • +
    • Bug fixes: nasty entity bug introduced in 2.7.0, restore old behaviour + when saving an HTML doc with an xml dump function, HTML UTF-8 parsing + bug, fix reader custom error handlers (Riccardo Scussat) +
    • Improvement: xmlSave options for more flexibility to save as + XML/HTML/XHTML, handle leading BOM in HTML documents
    • +
    + +

    2.7.1: Sep 1 2008

    +
      +
    • Portability fix: Borland C fix (Moritz Both)
    • +
    • Bug fixes: python serialization wrappers, XPath QName corner + case handking and leaks (Martin)
    • +
    • Improvement: extend the xmlSave to handle HTML documents and trees
    • +
    • Cleanup: python serialization wrappers
    • +
    + +

    2.7.0: Aug 30 2008

    +
      +
    • Documentation: switch ChangeLog to UTF-8, improve mutithreads and + xmlParserCleanup docs
    • +
    • Portability fixes: Older Win32 platforms (Rob Richards), MSVC + porting fix (Rob Richards), Mac OS X regression tests (Sven Herzberg), + non GNUCC builds (Rob Richards), compilation on Haiku (Andreas Färber) +
    • +
    • Bug fixes: various realloc problems (Ashwin), potential double-free + (Ashwin), regexp crash, icrash with invalid whitespace facets (Rob + Richards), pattern fix when streaming (William Brack), various XML + parsing and validation fixes based on the W3C regression tests, reader + tree skipping function fix (Ashwin), Schemas regexps escaping fix + (Volker Grabsch), handling of entity push errors (Ashwin), fix a slowdown + when encoder cant serialize characters on output
    • +
    • Code cleanup: compilation fix without the reader, without the output + (Robert Schwebel), python whitespace (Martin), many space/tabs cleanups, + serious cleanup of the entity handling code
    • +
    • Improvement: switch parser to XML-1.0 5th edition, add parsing flags + for old versions, switch URI parsing to RFC 3986, + add xmlSchemaValidCtxtGetParserCtxt (Holger Kaelberer), + new hashing functions for dictionnaries (based on Stefan Behnel work), + improve handling of misplaced html/head/body in HTML parser, better + regression test tools and code coverage display, better algorithms + to detect various versions of the billion laughts attacks, make + arbitrary parser limits avoidable as a parser option
    • +
    +

    2.6.32: Apr 8 2008

    +
      +
    • Documentation: returning heap memory to kernel (Wolfram Sang), + trying to clarify xmlCleanupParser() use, xmlXPathContext improvement + (Jack Jansen), improve the *Recover* functions documentation, + XmlNodeType doc link fix (Martijn Arts)
    • +
    • Bug fixes: internal subset memory leak (Ashwin), avoid problem with + paths starting with // (Petr Sumbera), streaming XSD validation callback + patches (Ashwin), fix redirection on port other than 80 (William Brack), + SAX2 leak (Ashwin), XInclude fragment of own document (Chris Ryan), + regexp bug with '.' (Andrew Tosh), flush the writer at the end of the + document (Alfred Mickautsch), output I/O bug fix (William Brack), + writer CDATA output after a text node (Alex Khesin), UTF-16 encoding + detection (William Brack), fix handling of empty CDATA nodes for Safari + team, python binding problem with namespace nodes, improve HTML parsing + (Arnold Hendriks), regexp automata build bug, memory leak fix (Vasily + Chekalkin), XSD test crash, weird system parameter entity parsing problem, + allow save to file:///X:/ windows paths, various attribute normalisation + problems, externalSubsetSplit fix (Ashwin), attribute redefinition in + the DTD (Ashwin), fix in char ref parsing check (Alex Khesin), many + out of memory handling fixes (Ashwin), XPath out of memory handling fixes + (Alvaro Herrera), various realloc problems (Ashwin), UCS4 encoding + conversion buffer size (Christian Fruth), problems with EatName + functions on memory errors, BOM handling in external parsed entities + (Mark Rowe)
    • +
    • Code cleanup: fix build under VS 2008 (David Wimsey), remove useless + mutex in xmlDict (Florent Guilian), Mingw32 compilation fix (Carlo + Bramini), Win and MacOS EOL cleanups (Florent Guiliani), iconv need + a const detection (Roumen Petrov), simplify xmlSetProp (Julien Charbon), + cross compilation fixes for Mingw (Roumen Petrov), SCO Openserver build + fix (Florent Guiliani), iconv uses const on Win32 (Rob Richards), + duplicate code removal (Ashwin), missing malloc test and error reports + (Ashwin), VMS makefile fix (Tycho Hilhorst)
    • +
    • improvements: better plug of schematron in the normal error handling + (Tobias Minich)
    • +
    + +

    2.6.31: Jan 11 2008

    +
      +
    • Security fix: missing of checks in UTF-8 parsing
    • +
    • Bug fixes: regexp bug, dump attribute from XHTML document, fix + xmlFree(NULL) to not crash in debug mode, Schematron parsing crash + (Rob Richards), global lock free on Windows (Marc-Antoine Ruel), + XSD crash due to double free (Rob Richards), indentation fix in + xmlTextWriterFullEndElement (Felipe Pena), error in attribute type + parsing if attribute redeclared, avoid crash in hash list scanner if + deleting elements, column counter bug fix (Christian Schmidt), + HTML embed element saving fix (Stefan Behnel), avoid -L/usr/lib + output from xml2-config (Fred Crozat), avoid an xmllint crash + (Stefan Kost), don't stop HTML parsing on out of range chars. +
    • +
    • Code cleanup: fix open() call third argument, regexp cut'n paste + copy error, unused variable in __xmlGlobalInitMutexLock (Hannes Eder), + some make distcheck realted fixes (John Carr)
    • +
    • Improvements: HTTP Header: includes port number (William Brack), + testURI --debug option,
    • +
    +

    2.6.30: Aug 23 2007

    +
      +
    • Portability: Solaris crash on error handling, windows path fixes + (Roland Schwarz and Rob Richards), mingw build (Roland Schwarz)
    • +
    • Bugfixes: xmlXPathNodeSetSort problem (William Brack), leak when + reusing a writer for a new document (Dodji Seketeli), Schemas + xsi:nil handling patch (Frank Gross), relative URI build problem + (Patrik Fimml), crash in xmlDocFormatDump, invalid char in comment + detection bug, fix disparity with xmlSAXUserParseMemory, automata + generation for complex regexp counts problems, Schemas IDC import + problems (Frank Gross), xpath predicate evailation error handling + (William Brack)
    • +
    +

    2.6.29: Jun 12 2007

    +
      +
    • Portability: patches from Andreas Stricke for WinCEi, + fix compilation warnings (William Brack), avoid warnings on Apple OS/X + (Wendy Doyle and Mark Rowe), Windows compilation and threading + improvements (Rob Richards), compilation against old Python versions, + new GNU tar changes (Ryan Hill)
    • +
    • Documentation: xmlURIUnescapeString comment,
    • +
    • Bugfixes: xmlBufferAdd problem (Richard Jones), 'make valgrind' + flag fix (Richard Jones), regexp interpretation of \, + htmlCreateDocParserCtxt (Jean-Daniel Dupas), configure.in + typo (Bjorn Reese), entity content failure, xmlListAppend() fix + (Georges-André Silber), XPath number serialization (William Brack), + nanohttp gzipped stream fix (William Brack and Alex Cornejo), + xmlCharEncFirstLine typo (Mark Rowe), uri bug (François Delyon), + XPath string value of PI nodes (William Brack), XPath node set + sorting bugs (William Brack), avoid outputting namespace decl + dups in the writer (Rob Richards), xmlCtxtReset bug, UTF-8 encoding + error handling, recustion on next in catalogs, fix a Relax-NG crash, + workaround wrong file: URIs, htmlNodeDumpFormatOutput on attributes, + invalid character in attribute detection bug, big comments before + internal subset streaming bug, HTML parsing of attributes with : in + the name, IDness of name in HTML (Dagfinn I. MannsÃ¥ker)
    • +
    • Improvement: keep URI query parts in raw form (Richard Jones), + embed tag support in HTML (Michael Day)
    • +
    + +

    2.6.28: Apr 17 2007

    +
      +
    • Documentation: comment fixes (Markus Keim), xpath comments fixes too + (James Dennett)
    • +
    • Bug fixes: XPath bug (William Brack), HTML parser autoclose stack usage + (Usamah Malik), various regexp bug fixes (DV and William), path conversion + on Windows (Igor Zlatkovic), htmlCtxtReset fix (Michael Day), XPath + principal node of axis bug, HTML serialization of some codepoint + (Steven Rainwater), user data propagation in XInclude (Michael Day), + standalone and XML decl detection (Michael Day), Python id ouptut + for some id, fix the big python string memory leak, URI parsing fixes + (Stéphane Bidoul and William), long comments parsing bug (William), + concurrent threads initialization (Ted Phelps), invalid char + in text XInclude (William), XPath memory leak (William), tab in + python problems (Andreas Hanke), XPath node comparison error + (Oleg Paraschenko), cleanup patch for reader (Julien Reichel), + XML Schemas attribute group (William), HTML parsing problem (William), + fix char 0x2d in regexps (William), regexp quantifier range with + min occurs of 0 (William), HTML script/style parsing (Mike Day)
    • +
    • Improvement: make xmlTextReaderSetup() public
    • +
    • Compilation and postability: fix a missing include problem (William), + __ss_familly on AIX again (Björn Wiberg), compilation without zlib + (Michael Day), catalog patch for Win32 (Christian Ehrlicher), + Windows CE fixes (Andreas Stricke)
    • +
    • Various CVS to SVN infrastructure changes
    • +
    +

    2.6.27: Oct 25 2006

    +
      +
    • Portability fixes: file names on windows (Roland Schwingel, + Emelyanov Alexey), windows compile fixup (Rob Richards), + AIX iconv() is apparently case sensitive
    • +
    • improvements: Python XPath types mapping (Nic Ferrier), XPath optimization + (Kasimier), add xmlXPathCompiledEvalToBoolean (Kasimier), Python node + equality and comparison (Andreas Pakulat), xmlXPathCollectAndTest + improvememt (Kasimier), expose if library was compiled with zlib + support (Andrew Nosenko), cache for xmlSchemaIDCMatcher structs + (Kasimier), xmlTextConcat should work with comments and PIs (Rob + Richards), export htmlNewParserCtxt needed by Michael Day, refactoring + of catalog entity loaders (Michael Day), add XPointer support to + python bindings (Ross Reedstrom, Brian West and Stefan Anca), + try to sort out most file path to URI conversions and xmlPathToUri, + add --html --memory case to xmllint
    • +
    • building fix: fix --with-minimum (Felipe Contreras), VMS fix, + const'ification of HTML parser structures (Matthias Clasen), + portability fix (Emelyanov Alexey), wget autodetection (Peter + Breitenlohner), remove the build path recorded in the python + shared module, separate library flags for shared and static builds + (Mikhail Zabaluev), fix --with-minimum --with-sax1 builds, fix + --with-minimum --with-schemas builds
    • +
    • bug fix: xmlGetNodePath fix (Kasimier), xmlDOMWrapAdoptNode and + attribute (Kasimier), crash when using the recover mode, + xmlXPathEvalExpr problem (Kasimier), xmlXPathCompExprAdd bug (Kasimier), + missing destry in xmlFreeRMutex (Andrew Nosenko), XML Schemas fixes + (Kasimier), warning on entities processing, XHTML script and style + serialization (Kasimier), python generator for long types, bug in + xmlSchemaClearValidCtxt (Bertrand Fritsch), xmlSchemaXPathEvaluate + allocation bug (Marton Illes), error message end of line (Rob Richards), + fix attribute serialization in writer (Rob Richards), PHP4 DTD validation + crasher, parser safety patch (Ben Darnell), _private context propagation + when parsing entities (with Michael Day), fix entities behaviour when + using SAX, URI to file path fix (Mikhail Zabaluev), disapearing validity + context, arg error in SAX callback (Mike Hommey), fix mixed-content + autodetect when using --noblanks, fix xmlIOParseDTD error handling, + fix bug in xmlSplitQName on special Names, fix Relax-NG element content + validation bug, fix xmlReconciliateNs bug, fix potential attribute + XML parsing bug, fix line/column accounting in XML parser, chunking bug + in the HTML parser on script, try to detect obviously buggy HTML + meta encoding indications, bugs with encoding BOM and xmlSaveDoc, + HTML entities in attributes parsing, HTML minimized attribute values, + htmlReadDoc and htmlReadIO were broken, error handling bug in + xmlXPathEvalExpression (Olaf Walkowiak), fix a problem in + htmlCtxtUseOptions, xmlNewInputFromFile could leak (Marius Konitzer), + bug on misformed SSD regexps (Christopher Boumenot) +
    • +
    • documentation: warning about XML_PARSE_COMPACT (Kasimier Buchcik), + fix xmlXPathCastToString documentation, improve man pages for + xmllitn and xmlcatalog (Daniel Leidert), fixed comments of a few + functions
    • +
    +

    2.6.26: Jun 6 2006

    +
      +
    • portability fixes: Python detection (Joseph Sacco), compilation + error(William Brack and Graham Bennett), LynxOS patch (Olli Savia)
    • +
    • bug fixes: encoding buffer problem, mix of code and data in + xmlIO.c(Kjartan Maraas), entities in XSD validation (Kasimier Buchcik), + variousXSD validation fixes (Kasimier), memory leak in pattern (Rob + Richards andKasimier), attribute with colon in name (Rob Richards), XPath + leak inerror reporting (Aleksey Sanin), XInclude text include of + selfdocument.
    • +
    • improvements: Xpath optimizations (Kasimier), XPath object + cache(Kasimier)
    • +
    + +

    2.6.25: Jun 6 2006:

    + +

    Do not use or package 2.6.25

    + +

    2.6.24: Apr 28 2006

    +
      +
    • Portability fixes: configure on Windows, testapi compile on windows + (Kasimier Buchcik, venkat naidu), Borland C++ 6 compile (Eric Zurcher), + HP-UX compiler workaround (Rick Jones), xml2-config bugfix, gcc-4.1 + cleanups, Python detection scheme (Joseph Sacco), UTF-8 file paths on + Windows (Roland Schwingel). +
    • +
    • Improvements: xmlDOMWrapReconcileNamespaces xmlDOMWrapCloneNode (Kasimier + Buchcik), XML catalog debugging (Rick Jones), update to Unicode 4.01.
    • +
    • Bug fixes: xmlParseChunk() problem in 2.6.23, xmlParseInNodeContext() + on HTML docs, URI behaviour on Windows (Rob Richards), comment streaming + bug, xmlParseComment (with William Brack), regexp bug fixes (DV & + Youri Golovanov), xmlGetNodePath on text/CDATA (Kasimier), + one Relax-NG interleave bug, xmllint --path and --valid, + XSD bugfixes (Kasimier), remove debug + left in Python bindings (Nic Ferrier), xmlCatalogAdd bug (Martin Cole), + xmlSetProp fixes (Rob Richards), HTML IDness (Rob Richards), a large + number of cleanups and small fixes based on Coverity reports, bug + in character ranges, Unicode tables const (Aivars Kalvans), schemas + fix (Stefan Kost), xmlRelaxNGParse error deallocation, + xmlSchemaAddSchemaDoc error deallocation, error handling on unallowed + code point, ixmllint --nonet to never reach the net (Gary Coady), + line break in writer after end PI (Jason Viers).
    • +
    • Documentation: man pages updates and cleanups (Daniel Leidert).
    • +
    • New features: Relax NG structure error handlers.
    • +
    + +

    2.6.23: Jan 5 2006

    +
      +
    • portability fixes: Windows (Rob Richards), getaddrinfo on Windows + (Kolja Nowak, Rob Richards), icc warnings (Kjartan Maraas), + --with-minimum compilation fixes (William Brack), error case handling fix + on Solaris (Albert Chin), don't use 'list' as parameter name reported by + Samuel Diaz Garcia, more old Unices portability fixes (Albert Chin), + MinGW compilation (Mark Junker), HP-UX compiler warnings (Rick + Jones),
    • +
    • code cleanup: xmlReportError (Adrian Mouat), remove xmlBufferClose + (Geert Jansen), unreachable code (Oleksandr Kononenko), refactoring + parsing code (Bjorn Reese)
    • +
    • bug fixes: xmlBuildRelativeURI and empty path (William Brack), + combinatory explosion and performances in regexp code, leak in + xmlTextReaderReadString(), xmlStringLenDecodeEntities problem (Massimo + Morara), Identity Constraints bugs and a segfault (Kasimier Buchcik), + XPath pattern based evaluation bugs (DV & Kasimier), + xmlSchemaContentModelDump() memory leak (Kasimier), potential leak in + xmlSchemaCheckCSelectorXPath(), xmlTextWriterVSprintf() misuse of + vsnprintf (William Brack), XHTML serialization fix (Rob Richards), CRLF + split problem (William), issues with non-namespaced attributes in + xmlAddChild() xmlAddNextSibling() and xmlAddPrevSibling() (Rob Richards), + HTML parsing of script, Python must not output to stdout (Nic Ferrier), + exclusive C14N namespace visibility (Aleksey Sanin), XSD dataype + totalDigits bug (Kasimier Buchcik), error handling when writing to an + xmlBuffer (Rob Richards), runtest schemas error not reported (Hisashi + Fujinaka), signed/unsigned problem in date/time code (Albert Chin), fix + XSI driven XSD validation (Kasimier), parsing of xs:decimal (Kasimier), + fix DTD writer output (Rob Richards), leak in xmlTextReaderReadInnerXml + (Gary Coady), regexp bug affecting schemas (Kasimier), configuration of + runtime debugging (Kasimier), xmlNodeBufGetContent bug on entity refs + (Oleksandr Kononenko), xmlRegExecPushString2 bug (Sreeni Nair), + compilation and build fixes (Michael Day), removed dependancies on + xmlSchemaValidError (Kasimier), bug with <xml:foo/>, more XPath + pattern based evaluation fixes (Kasimier)
    • +
    • improvements: XSD Schemas redefinitions/restrictions (Kasimier + Buchcik), node copy checks and fix for attribute (Rob Richards), counted + transition bug in regexps, ctxt->standalone = -2 to indicate no + standalone attribute was found, add xmlSchemaSetParserStructuredErrors() + (Kasimier Buchcik), add xmlTextReaderSchemaValidateCtxt() to API + (Kasimier), handle gzipped HTTP resources (Gary Coady), add + htmlDocDumpMemoryFormat. (Rob Richards),
    • +
    • documentation: typo (Michael Day), libxml man page (Albert Chin), save + function to XML buffer (Geert Jansen), small doc fix (Aron Stansvik),
    • +
    + +

    2.6.22: Sep 12 2005

    +
      +
    • build fixes: compile without schematron (Stéphane Bidoul)
    • +
    • bug fixes: xmlDebugDumpNode on namespace node (Oleg Paraschenko)i, + CDATA push parser bug, xmlElemDump problem with XHTML1 doc, + XML_FEATURE_xxx clash with expat headers renamed XML_WITH_xxx, fix some + output formatting for meta element (Rob Richards), script and style + XHTML1 serialization (David Madore), Attribute derivation fixups in XSD + (Kasimier Buchcik), better IDC error reports (Kasimier Buchcik)
    • +
    • improvements: add XML_SAVE_NO_EMPTY xmlSaveOption (Rob Richards), add + XML_SAVE_NO_XHTML xmlSaveOption, XML Schemas improvements preparing for + derive (Kasimier Buchcik).
    • +
    • documentation: generation of gtk-doc like docs, integration with + devhelp.
    • +
    + +

    2.6.21: Sep 4 2005

    +
      +
    • build fixes: Cygwin portability fixes (Gerrit P. Haase), calling + convention problems on Windows (Marcus Boerger), cleanups based on Linus' + sparse tool, update of win32/configure.js (Rob Richards), remove warnings + on Windows(Marcus Boerger), compilation without SAX1, detection of the + Python binary, use $GCC inestad of $CC = 'gcc' (Andrew W. Nosenko), + compilation/link with threads and old gcc, compile problem by C370 on + Z/OS,
    • +
    • bug fixes: http_proxy environments (Peter Breitenlohner), HTML UTF-8 + bug (Jiri Netolicky), XPath NaN compare bug (William Brack), + htmlParseScript potential bug, Schemas regexp handling of spaces, Base64 + Schemas comparisons NIST passes, automata build error xsd:all, + xmlGetNodePath for namespaced attributes (Alexander Pohoyda), xmlSchemas + foreign namespaces handling, XML Schemas facet comparison (Kupriyanov + Anatolij), xmlSchemaPSimpleTypeErr error report (Kasimier Buchcik), xml: + namespace ahndling in Schemas (Kasimier), empty model group in Schemas + (Kasimier), wilcard in Schemas (Kasimier), URI composition (William), + xs:anyType in Schemas (Kasimier), Python resolver emmitting error + messages directly, Python xmlAttr.parent (Jakub Piotr Clapa), trying to + fix the file path/URI conversion, xmlTextReaderGetAttribute fix (Rob + Richards), xmlSchemaFreeAnnot memleak (Kasimier), HTML UTF-8 + serialization, streaming XPath, Schemas determinism detection problem, + XInclude bug, Schemas context type (Dean Hill), validation fix (Derek + Poon), xmlTextReaderGetAttribute[Ns] namespaces (Rob Richards), Schemas + type fix (Kuba Nowakowski), UTF-8 parser bug, error in encoding handling, + xmlGetLineNo fixes, bug on entities handling, entity name extraction in + error handling with XInclude, text nodes in HTML body tags (Gary Coady), + xml:id and IDness at the treee level fixes, XPath streaming patterns + bugs.
    • +
    • improvements: structured interfaces for schemas and RNG error reports + (Marcus Boerger), optimization of the char data inner loop parsing + (thanks to Behdad Esfahbod for the idea), schematron validation though + not finished yet, xmlSaveOption to omit XML declaration, keyref match + error reports (Kasimier), formal expression handling code not plugged + yet, more lax mode for the HTML parser, parser XML_PARSE_COMPACT option + for text nodes allocation.
    • +
    • documentation: xmllint man page had --nonet duplicated
    • +
    + +

    2.6.20: Jul 10 2005

    +
      +
    • build fixes: Windows build (Rob Richards), Mingw compilation (Igor + Zlatkovic), Windows Makefile (Igor), gcc warnings (Kasimier and + andriy@google.com), use gcc weak references to pthread to avoid the + pthread dependancy on Linux, compilation problem (Steve Nairn), compiling + of subset (Morten Welinder), IPv6/ss_family compilation (William Brack), + compilation when disabling parts of the library, standalone test + distribution.
    • +
    • bug fixes: bug in lang(), memory cleanup on errors (William Brack), + HTTP query strings (Aron Stansvik), memory leak in DTD (William), integer + overflow in XPath (William), nanoftp buffer size, pattern "." apth fixup + (Kasimier), leak in tree reported by Malcolm Rowe, replaceNode patch + (Brent Hendricks), CDATA with NULL content (Mark Vakoc), xml:base fixup + on XInclude (William), pattern fixes (William), attribute bug in + exclusive c14n (Aleksey Sanin), xml:space and xml:lang with SAX2 (Rob + Richards), namespace trouble in complex parsing (Malcolm Rowe), XSD type + QNames fixes (Kasimier), XPath streaming fixups (William), RelaxNG bug + (Rob Richards), Schemas for Schemas fixes (Kasimier), removal of ID (Rob + Richards), a small RelaxNG leak, HTML parsing in push mode bug (James + Bursa), failure to detect UTF-8 parsing bugs in CDATA sections, + areBlanks() heuristic failure, duplicate attributes in DTD bug + (William).
    • +
    • improvements: lot of work on Schemas by Kasimier Buchcik both on + conformance and streaming, Schemas validation messages (Kasimier Buchcik, + Matthew Burgess), namespace removal at the python level (Brent + Hendricks), Update to new Schemas regression tests from W3C/Nist + (Kasimier), xmlSchemaValidateFile() (Kasimier), implementation of + xmlTextReaderReadInnerXml and xmlTextReaderReadOuterXml (James Wert), + standalone test framework and programs, new DOM import APIs + xmlDOMWrapReconcileNamespaces() xmlDOMWrapAdoptNode() and + xmlDOMWrapRemoveNode(), extension of xmllint capabilities for SAX and + Schemas regression tests, xmlStopParser() available in pull mode too, + ienhancement to xmllint --shell namespaces support, Windows port of the + standalone testing tools (Kasimier and William), + xmlSchemaValidateStream() xmlSchemaSAXPlug() and xmlSchemaSAXUnplug() SAX + Schemas APIs, Schemas xmlReader support.
    • +
    + +

    2.6.19: Apr 02 2005

    +
      +
    • build fixes: drop .la from RPMs, --with-minimum build fix (William + Brack), use XML_SOCKLEN_T instead of SOCKLEN_T because it breaks with AIX + 5.3 compiler, fixed elfgcchack.h generation and PLT reduction code on + Linux/ELF/gcc4
    • +
    • bug fixes: schemas type decimal fixups (William Brack), xmmlint return + code (Gerry Murphy), small schemas fixes (Matthew Burgess and GUY + Fabrice), workaround "DAV:" namespace brokeness in c14n (Aleksey Sanin), + segfault in Schemas (Kasimier Buchcik), Schemas attribute validation + (Kasimier), Prop related functions and xmlNewNodeEatName (Rob Richards), + HTML serialization of name attribute on a elements, Python error handlers + leaks and improvement (Brent Hendricks), uninitialized variable in + encoding code, Relax-NG validation bug, potential crash if + gnorableWhitespace is NULL, xmlSAXParseDoc and xmlParseDoc signatures, + switched back to assuming UTF-8 in case no encoding is given at + serialization time
    • +
    • improvements: lot of work on Schemas by Kasimier Buchcik on facets + checking and also mixed handling.
    • +
    • +
    + +

    2.6.18: Mar 13 2005

    +
      +
    • build fixes: warnings (Peter Breitenlohner), testapi.c generation, + Bakefile support (Francesco Montorsi), Windows compilation (Joel Reed), + some gcc4 fixes, HP-UX portability fixes (Rick Jones).
    • +
    • bug fixes: xmlSchemaElementDump namespace (Kasimier Buchcik), push and + xmlreader stopping on non-fatal errors, thread support for dictionnaries + reference counting (Gary Coady), internal subset and push problem, URL + saved in xmlCopyDoc, various schemas bug fixes (Kasimier), Python paths + fixup (Stephane Bidoul), xmlGetNodePath and namespaces, xmlSetNsProp fix + (Mike Hommey), warning should not count as error (William Brack), + xmlCreatePushParser empty chunk, XInclude parser flags (William), cleanup + FTP and HTTP code to reuse the uri parsing and IPv6 (William), + xmlTextWriterStartAttributeNS fix (Rob Richards), XMLLINT_INDENT being + empty (William), xmlWriter bugs (Rob Richards), multithreading on Windows + (Rich Salz), xmlSearchNsByHref fix (Kasimier), Python binding leak (Brent + Hendricks), aliasing bug exposed by gcc4 on s390, xmlTextReaderNext bug + (Rob Richards), Schemas decimal type fixes (William Brack), + xmlByteConsumed static buffer (Ben Maurer).
    • +
    • improvement: speedup parsing comments and DTDs, dictionnary support for + hash tables, Schemas Identity constraints (Kasimier), streaming XPath + subset, xmlTextReaderReadString added (Bjorn Reese), Schemas canonical + values handling (Kasimier), add xmlTextReaderByteConsumed (Aron + Stansvik),
    • +
    • Documentation: Wiki support (Joel Reed)
    • +
    + +

    2.6.17: Jan 16 2005

    +
      +
    • build fixes: Windows, warnings removal (William Brack), + maintainer-clean dependency(William), build in a different directory + (William), fixing --with-minimum configure build (William), BeOS build + (Marcin Konicki), Python-2.4 detection (William), compilation on AIX (Dan + McNichol)
    • +
    • bug fixes: xmlTextReaderHasAttributes (Rob Richards), xmlCtxtReadFile() + to use the catalog(s), loop on output (William Brack), XPath memory leak, + ID deallocation problem (Steve Shepard), debugDumpNode crash (William), + warning not using error callback (William), xmlStopParser bug (William), + UTF-16 with BOM on DTDs (William), namespace bug on empty elements in + push mode (Rob Richards), line and col computations fixups (Aleksey + Sanin), xmlURIEscape fix (William), xmlXPathErr on bad range (William), + patterns with too many steps, bug in RNG choice optimization, line number + sometimes missing.
    • +
    • improvements: XSD Schemas (Kasimier Buchcik), python generator + (William), xmlUTF8Strpos speedup (William), unicode Python strings + (William), XSD error reports (Kasimier Buchcik), Python __str__ call + serialize().
    • +
    • new APIs: added xmlDictExists(), GetLineNumber and GetColumnNumber for + the xmlReader (Aleksey Sanin), Dynamic Shared Libraries APIs (mostly Joel + Reed), error extraction API from regexps, new XMLSave option for format + (Phil Shafer)
    • +
    • documentation: site improvement (John Fleck), FAQ entries + (William).
    • +
    + +

    2.6.16: Nov 10 2004

    +
      +
    • general hardening and bug fixing crossing all the API based on new + automated regression testing
    • +
    • build fix: IPv6 build and test on AIX (Dodji Seketeli)
    • +
    • bug fixes: problem with XML::Libxml reported by Petr Pajas, encoding + conversion functions return values, UTF-8 bug affecting XPath reported by + Markus Bertheau, catalog problem with NULL entries (William Brack)
    • +
    • documentation: fix to xmllint man page, some API function descritpion + were updated.
    • +
    • improvements: DTD validation APIs provided at the Python level (Brent + Hendricks)
    • +
    + +

    2.6.15: Oct 27 2004

    +
      +
    • security fixes on the nanoftp and nanohttp modules
    • +
    • build fixes: xmllint detection bug in configure, building outside the + source tree (Thomas Fitzsimmons)
    • +
    • bug fixes: HTML parser on broken ASCII chars in names (William), Python + paths (Malcolm Tredinnick), xmlHasNsProp and default namespace (William), + saving to python file objects (Malcolm Tredinnick), DTD lookup fix + (Malcolm), save back <group> in catalogs (William), tree build + fixes (DV and Rob Richards), Schemas memory bug, structured error handler + on Python 64bits, thread local memory deallocation, memory leak reported + by Volker Roth, xmlValidateDtd in the presence of an internal subset, + entities and _private problem (William), xmlBuildRelativeURI error + (William).
    • +
    • improvements: better XInclude error reports (William), tree debugging + module and tests, convenience functions at the Reader API (Graham + Bennett), add support for PI in the HTML parser.
    • +
    + +

    2.6.14: Sep 29 2004

    +
      +
    • build fixes: configure paths for xmllint and xsltproc, compilation + without HTML parser, compilation warning cleanups (William Brack & + Malcolm Tredinnick), VMS makefile update (Craig Berry),
    • +
    • bug fixes: xmlGetUTF8Char (William Brack), QName properties (Kasimier + Buchcik), XInclude testing, Notation serialization, UTF8ToISO8859x + transcoding (Mark Itzcovitz), lots of XML Schemas cleanup and fixes + (Kasimier), ChangeLog cleanup (Stepan Kasal), memory fixes (Mark Vakoc), + handling of failed realloc(), out of bound array adressing in Schemas + date handling, Python space/tabs cleanups (Malcolm Tredinnick), NMTOKENS + E20 validation fix (Malcolm),
    • +
    • improvements: added W3C XML Schemas testsuite (Kasimier Buchcik), add + xmlSchemaValidateOneElement (Kasimier), Python exception hierearchy + (Malcolm Tredinnick), Python libxml2 driver improvement (Malcolm + Tredinnick), Schemas support for xsi:schemaLocation, + xsi:noNamespaceSchemaLocation, xsi:type (Kasimier Buchcik)
    • +
    + +

    2.6.13: Aug 31 2004

    +
      +
    • build fixes: Windows and zlib (Igor Zlatkovic), -O flag with gcc, + Solaris compiler warning, fixing RPM BuildRequires,
    • +
    • fixes: DTD loading on Windows (Igor), Schemas error reports APIs + (Kasimier Buchcik), Schemas validation crash, xmlCheckUTF8 (William Brack + and Julius Mittenzwei), Schemas facet check (Kasimier), default namespace + problem (William), Schemas hexbinary empty values, encoding error could + genrate a serialization loop.
    • +
    • Improvements: Schemas validity improvements (Kasimier), added --path + and --load-trace options to xmllint
    • +
    • documentation: tutorial update (John Fleck)
    • +
    + +

    2.6.12: Aug 22 2004

    +
      +
    • build fixes: fix --with-minimum, elfgcchack.h fixes (Peter + Breitenlohner), perl path lookup (William), diff on Solaris (Albert + Chin), some 64bits cleanups.
    • +
    • Python: avoid a warning with 2.3 (William Brack), tab and space mixes + (William), wrapper generator fixes (William), Cygwin support (Gerrit P. + Haase), node wrapper fix (Marc-Antoine Parent), XML Schemas support + (Torkel Lyng)
    • +
    • Schemas: a lot of bug fixes and improvements from Kasimier Buchcik
    • +
    • fixes: RVT fixes (William), XPath context resets bug (William), memory + debug (Steve Hay), catalog white space handling (Peter Breitenlohner), + xmlReader state after attribute reading (William), structured error + handler (William), XInclude generated xml:base fixup (William), Windows + memory reallocation problem (Steve Hay), Out of Memory conditions + handling (William and Olivier Andrieu), htmlNewDoc() charset bug, + htmlReadMemory init (William), a posteriori validation DTD base + (William), notations serialization missing, xmlGetNodePath (Dodji), + xmlCheckUTF8 (Diego Tartara), missing line numbers on entity + (William)
    • +
    • improvements: DocBook catalog build scrip (William), xmlcatalog tool + (Albert Chin), xmllint --c14n option, no_proxy environment (Mike Hommey), + xmlParseInNodeContext() addition, extend xmllint --shell, allow XInclude + to not generate start/end nodes, extend xmllint --version to include CVS + tag (William)
    • +
    • documentation: web pages fixes, validity API docs fixes (William) + schemas API fix (Eric Haszlakiewicz), xmllint man page (John Fleck)
    • +
    + +

    2.6.11: July 5 2004

    +
      +
    • Schemas: a lot of changes and improvements by Kasimier Buchcik for + attributes, namespaces and simple types.
    • +
    • build fixes: --with-minimum (William Brack), some gcc cleanup + (William), --with-thread-alloc (William)
    • +
    • portability: Windows binary package change (Igor Zlatkovic), Catalog + path on Windows
    • +
    • documentation: update to the tutorial (John Fleck), xmllint return code + (John Fleck), man pages (Ville Skytta),
    • +
    • bug fixes: C14N bug serializing namespaces (Aleksey Sanin), testSAX + properly initialize the library (William), empty node set in XPath + (William), xmlSchemas errors (William), invalid charref problem pointed + by Morus Walter, XInclude xml:base generation (William), Relax-NG bug + with div processing (William), XPointer and xml:base problem(William), + Reader and entities, xmllint return code for schemas (William), reader + streaming problem (Steve Ball), DTD serialization problem (William), + libxml.m4 fixes (Mike Hommey), do not provide destructors as methods on + Python classes, xmlReader buffer bug, Python bindings memory interfaces + improvement (with Stéphane Bidoul), Fixed the push parser to be back to + synchronous behaviour.
    • +
    • improvement: custom per-thread I/O enhancement (Rob Richards), register + namespace in debug shell (Stefano Debenedetti), Python based regression + test for non-Unix users (William), dynamically increase the number of + XPath extension functions in Python and fix a memory leak (Marc-Antoine + Parent and William)
    • +
    • performance: hack done with Arjan van de Ven to reduce ELF footprint + and generated code on Linux, plus use gcc runtime profiling to optimize + the code generated in the RPM packages.
    • +
    + +

    2.6.10: May 17 2004

    +
      +
    • Web page generated for ChangeLog
    • +
    • build fixes: --without-html problems, make check without make all
    • +
    • portability: problem with xpath.c on Windows (MSC and Borland), memcmp + vs. strncmp on Solaris, XPath tests on Windows (Mark Vakoc), C++ do not + use "list" as parameter name, make tests work with Python 1.5 (Ed + Davis),
    • +
    • improvements: made xmlTextReaderMode public, small buffers resizing + (Morten Welinder), add --maxmem option to xmllint, add + xmlPopInputCallback() for Matt Sergeant, refactoring of serialization + escaping, added escaping customization
    • +
    • bugfixes: xsd:extension (Taihei Goi), assorted regexp bugs (William + Brack), xmlReader end of stream problem, node deregistration with reader, + URI escaping and filemanes, XHTML1 formatting (Nick Wellnhofer), regexp + transition reduction (William), various XSD Schemas fixes (Kasimier + Buchcik), XInclude fallback problem (William), weird problems with DTD + (William), structured error handler callback context (William), reverse + xmlEncodeSpecialChars() behaviour back to escaping '"'
    • +
    + +

    2.6.9: Apr 18 2004

    +
      +
    • implement xml:id Working Draft, relaxed XPath id() checking
    • +
    • bugfixes: xmlCtxtReset (Brent Hendricks), line number and CDATA (Dave + Beckett), Relax-NG compilation (William Brack), Regexp patches (with + William), xmlUriEscape (Mark Vakoc), a Relax-NG notAllowed problem (with + William), Relax-NG name classes compares (William), XInclude duplicate + fallback (William), external DTD encoding detection (William), a DTD + validation bug (William), xmlReader Close() fix, recusive extention + schemas
    • +
    • improvements: use xmlRead* APIs in test tools (Mark Vakoc), indenting + save optimization, better handle IIS broken HTTP redirect behaviour (Ian + Hummel), HTML parser frameset (James Bursa), libxml2-python RPM + dependancy, XML Schemas union support (Kasimier Buchcik), warning removal + clanup (William), keep ChangeLog compressed when installing from RPMs
    • +
    • documentation: examples and xmlDocDumpMemory docs (John Fleck), new + example (load, xpath, modify, save), xmlCatalogDump() comments,
    • +
    • Windows: Borland C++ builder (Eric Zurcher), work around Microsoft + compiler NaN handling bug (Mark Vakoc)
    • +
    + +

    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 information 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 information 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 and datatypes 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 Borgstrom
    • +
    • 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
      • +
      +
    • +
    + +

    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
      • +
      +
    • +
    • 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
    • +
    + +

    XML

    + +

    XML is a standard for +markup-based structured documents. Here is an example XML +document:

    +
    <?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>
    + +

    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. Each +tag opened has to be closed. 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 /> rather than with +>. Note that, for example, the image tag has no content (just +an attribute) and is closed by ending the tag with />.

    + +

    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.

    + +

    XSLT

    + +

    Check the separate libxslt page

    + +

    XSL Transformations, is a +language for transforming XML documents into other XML documents (or +HTML/textual output).

    + +

    A separate library called libxslt is available implementing XSLT-1.0 for +libxml2. This module "libxslt" too can be found in the Gnome SVN base.

    + +

    You can check the progresses on the libxslt Changelog.

    + +

    Python and bindings

    + +

    There are a number of language bindings and wrappers available for +libxml2, the list below is not exhaustive. Please contact the xml-bindings@gnome.org +(archives) in +order to get updates to this list or to discuss the specific topic of libxml2 +or libxslt wrappers or bindings:

    +
      +
    • Libxml++ seems the + most up-to-date C++ bindings for libxml2, check the documentation + and the examples.
    • +
    • There is another C++ wrapper + based on the gdome2 bindings maintained by Tobias Peters.
    • +
    • and a third C++ wrapper by Peter Jones <pjones@pmade.org> +

      Website: http://pmade.org/pjones/software/xmlwrapp/

      +
    • +
    • XML::LibXML Perl + bindings are available on CPAN, as well as XML::LibXSLT + Perl libxslt + bindings.
    • +
    • If you're interested into scripting XML processing, have a look at XSH an XML editing shell based on + Libxml2 Perl bindings.
    • +
    • Dave Kuhlman provides an + earlier version of the libxml/libxslt wrappers for Python.
    • +
    • Gopal.V and Peter Minten develop libxml#, a set of + C# libxml2 bindings.
    • +
    • Petr Kozelka provides Pascal units to glue + libxml2 with Kylix, Delphi and other Pascal compilers.
    • +
    • Uwe Fechner also provides idom2, a DOM2 + implementation for Kylix2/D5/D6 from Borland.
    • +
    • There is bindings for Ruby + and libxml2 bindings are also available in Ruby through the libgdome-ruby module + maintained by Tobias Peters.
    • +
    • Steve Ball and contributors maintains libxml2 and libxslt bindings for + Tcl.
    • +
    • libxml2 and libxslt are the default XML libraries for PHP5.
    • +
    • LibxmlJ is + an effort to create a 100% JAXP-compatible Java wrapper for libxml2 and + libxslt as part of GNU ClasspathX project.
    • +
    • Patrick McPhee provides Rexx bindings fof libxml2 and libxslt, look for + RexxXML.
    • +
    • Satimage + provides XMLLib + osax. This is an osax for Mac OS X with a set of commands to + implement in AppleScript the XML DOM, XPATH and XSLT. Also includes + commands for Property-lists (Apple's fast lookup table XML format.)
    • +
    • Francesco Montorsi developped wxXml2 + wrappers that interface libxml2, allowing wxWidgets applications to + load/save/edit XML instances.
    • +
    + +

    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.

    + +

    Note that some of the Python purist dislike the default set of Python +bindings, rather than complaining I suggest they have a look at lxml the more pythonic bindings for libxml2 +and libxslt and check the mailing-list.

    + +

    Stéphane Bidoul +maintains a Windows port +of the Python bindings.

    + +

    Note to people interested in building bindings, the API is formalized as +an XML API description file 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.

    + +

    To install the Python bindings there are 2 options:

    +
      +
    • If you use an RPM based distribution, simply install the libxml2-python + RPM (and if needed the libxslt-python + RPM).
    • +
    • Otherwise use the libxml2-python + module distribution 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.
    • +
    + +

    The distribution includes a set of examples and regression tests for the +python bindings in the python/tests directory. Here are some +excerpts from those tests:

    + +

    tst.py:

    + +

    This is a basic test of the file interface and DOM navigation:

    +
    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()
    + +

    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:

    +
      +
    • name : returns the node name
    • +
    • type : returns a string indicating the node type
    • +
    • content : returns the content of the node, it is based on + xmlNodeGetContent() and hence is recursive.
    • +
    • parent , children, last, + next, prev, doc, + properties: pointing to the associated element in the tree, + those may return None in case no such link exists.
    • +
    + +

    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.

    + +

    validate.py:

    + +

    This test check the validation interfaces and redirection of error +messages:

    +
    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"
    + +

    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.

    + +

    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 information resulting from the parsing phase +is also available using context methods.

    + +

    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.

    + +

    push.py:

    + +

    This test show how to activate the push parser interface:

    +
    import libxml2
    +
    +ctxt = libxml2.createPushParser(None, "<foo", 4, "test.xml")
    +ctxt.parseChunk("/>", 2, 1)
    +doc = ctxt.doc()
    +
    +doc.freeDoc()
    + +

    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.

    + +

    Then the data are pushed using the parseChunk() method, the last call +setting the third argument terminate to 1.

    + +

    pushSAX.py:

    + +

    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:

    +
    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, "<foo", 4, "test.xml")
    +chunk = " url='tst'>b"
    +ctxt.parseChunk(chunk, len(chunk), 0)
    +chunk = "ar</foo>"
    +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
    + +

    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.

    + +

    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()

    + +

    xpath.py:

    + +

    This is a basic test of XPath wrappers support

    +
    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()
    + +

    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.

    + +

    xpathext.py:

    + +

    This test shows how to extend the XPath engine with functions written in +python:

    +
    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()
    + +

    Note how the extension function is registered with the context (but that +part is not yet finalized, this may change slightly in the future).

    + +

    tstxpath.py:

    + +

    This test is similar to the previous one but shows how the extension +function can access the XPath evaluation context:

    +
    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
    + +

    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.

    + +

    Memory debugging:

    + +

    last but not least, all tests starts with the following prologue:

    +
    #memory debug specific
    +libxml2.debugMemory(1)
    + +

    and ends with the following epilogue:

    +
    #memory debug specific
    +libxml2.cleanupParser()
    +if libxml2.debugMemory(1) == 0:
    +    print "OK"
    +else:
    +    print "Memory leak %d bytes" % (libxml2.debugMemory(1))
    +    libxml2.dumpMemory()
    + +

    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 .memdump file.

    + +

    libxml2 architecture

    + +

    Libxml2 is made of multiple components; some of them are optional, and +most of the block interfaces are public. The main components are:

    +
      +
    • an Input/Output layer
    • +
    • FTP and HTTP client layers (optional)
    • +
    • an Internationalization layer managing the encodings support
    • +
    • a URI module
    • +
    • the XML parser and its basic SAX interface
    • +
    • an HTML parser using the same SAX interface (optional)
    • +
    • a SAX tree module to build an in-memory DOM representation
    • +
    • a tree module to manipulate the DOM representation
    • +
    • a validation module using the DOM representation (optional)
    • +
    • an XPath module for global lookup in a DOM representation + (optional)
    • +
    • a debug module (optional)
    • +
    + +

    Graphically this gives the following:

    + +

    a graphical view of the various

    + +

    + +

    The tree output

    + +

    The parser returns a tree built during the document analysis. The value +returned is an xmlDocPtr (i.e., a pointer to an +xmlDoc structure). This structure contains information such +as the file name, the document type, and a children 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 xmlNodes, +chained in double-linked lists of siblings and with a children<->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.

    + +

    Here is an example (erroneous with respect to the XML spec since there +should be only one ELEMENT under the root):

    + +

     structure.gif

    + +

    In the source package there is a small program (not installed by default) +called xmllint 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 --debug +which prints the actual in-memory structure of the document; here is the +result with the example given before:

    +
    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=...
    + +

    This should be useful for learning the internal representation model.

    + +

    The SAX interface

    + +

    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 callback-based interface 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.

    + +

    To get more detailed step-by-step guidance on using the SAX interface of +libxml, see the nice +documentation.written by James +Henstridge.

    + +

    You can debug the SAX behaviour by using the testSAX +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:

    +
    SAX.setDocumentLocator()
    +SAX.startDocument()
    +SAX.getEntity(amp)
    +SAX.startElement(EXAMPLE, prop1='gnome is great', prop2='&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()
    + +

    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.

    + +

    Validation & DTDs

    + +

    Table of Content:

    +
      +
    1. General overview
    2. +
    3. The definition
    4. +
    5. Simple rules +
        +
      1. How to reference a DTD from a document
      2. +
      3. Declaring elements
      4. +
      5. Declaring attributes
      6. +
      +
    6. +
    7. Some examples
    8. +
    9. How to validate
    10. +
    11. Other resources
    12. +
    + +

    General overview

    + +

    Well what is validation and what is a DTD ?

    + +

    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.

    + +

    Validation is the process of checking a document against a DTD (more +generally against a set of construction rules).

    + +

    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.

    + +

    The definition

    + +

    The W3C XML Recommendation (Tim Bray's annotated version of +Rev1):

    + + +

    (unfortunately) all this is inherited from the SGML world, the syntax is +ancient...

    + +

    Simple rules

    + +

    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.

    + +

    How to reference a DTD from a document:

    + +

    Assuming the top element of the document is spec and the dtd +is placed in the file mydtd in the subdirectory +dtds of the directory from where the document were loaded:

    + +

    <!DOCTYPE spec SYSTEM "dtds/mydtd">

    + +

    Notes:

    +
      +
    • The system string is actually an URI-Reference (as defined in RFC 2396) 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.
    • +
    • It is also possible to associate a PUBLIC 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.
    • +
    • 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 + DOCTYPE declaration.
    • +
    + +

    Declaring elements:

    + +

    The following declares an element spec:

    + +

    <!ELEMENT spec (front, body, back?)>

    + +

    It also expresses that the spec element contains one front, +one body and one optional back 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 +div1 elements:

    + +

    <!ELEMENT div1 (head, (p | list | note)*, div2?)>

    + +

    which means div1 contains one head then a series of optional +p, lists and notes and then an +optional div2. And last but not least an element can contain +text:

    + +

    <!ELEMENT b (#PCDATA)>

    + +

    b contains text or being of mixed content (text and elements +in no particular order):

    + +

    <!ELEMENT p (#PCDATA|a|ul|b|i|em)*>

    + +

    p can contain text or a, ul, +b, i or em elements in no particular +order.

    + +

    Declaring attributes:

    + +

    Again the attributes declaration includes their content definition:

    + +

    <!ATTLIST termdef name CDATA #IMPLIED>

    + +

    means that the element termdef can have a name +attribute containing text (CDATA) and which is optional +(#IMPLIED). The attribute value can also be defined within a +set:

    + +

    <!ATTLIST list type (bullets|ordered|glossary) +"ordered">

    + +

    means list element have a type attribute with 3 +allowed values "bullets", "ordered" or "glossary" and which default to +"ordered" if the attribute is not explicitly specified.

    + +

    The content type of an attribute can be text (CDATA), +anchor/reference/references +(ID/IDREF/IDREFS), entity(ies) +(ENTITY/ENTITIES) or name(s) +(NMTOKEN/NMTOKENS). The following defines that a +chapter element can have an optional id attribute +of type ID, usable for reference from attribute of type +IDREF:

    + +

    <!ATTLIST chapter id ID #IMPLIED>

    + +

    The last value of an attribute definition can be #REQUIRED +meaning that the attribute has to be given, #IMPLIED +meaning that it is optional, or the default value (possibly prefixed by +#FIXED if it is the only allowed).

    + +

    Notes:

    +
      +
    • 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: +
      <!ATTLIST termdef
      +          id      ID      #REQUIRED
      +          name    CDATA   #IMPLIED>
      +

      The previous construct defines both id and + name attributes for the element termdef.

      +
    • +
    + +

    Some examples

    + +

    The directory test/valid/dtds/ in the libxml2 distribution +contains some complex DTD examples. The example in the file +test/valid/dia.xml shows an XML file where the simple DTD is +directly included within the document.

    + +

    How to validate

    + +

    The simplest way is to use the xmllint program included with libxml. The +--valid 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:

    + +

    xmllint --valid --noout test/valid/REC-xml-19980210.xml

    + +

    the -- noout is used to disable output of the resulting tree.

    + +

    The --dtdvalid dtd allows validation of the document(s) +against a given DTD.

    + +

    Libxml2 exports an API to handle DTDs and validation, check the associated +description.

    + +

    Other resources

    + +

    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:

    + + +

    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.

    + +

    + +

    Memory Management

    + +

    Table of Content:

    +
      +
    1. General overview
    2. +
    3. Setting libxml2 set of memory routines
    4. +
    5. Cleaning up after using the library
    6. +
    7. Debugging routines
    8. +
    9. General memory requirements
    10. +
    11. Returning memory to the kernel
    12. +
    + +

    General overview

    + +

    The module xmlmemory.h +provides the interfaces to the libxml2 memory system:

    +
      +
    • libxml2 does not use the libc memory allocator directly but xmlFree(), + xmlMalloc() and xmlRealloc()
    • +
    • those routines can be reallocated to a specific set of routine, by + default the libc ones i.e. free(), malloc() and realloc()
    • +
    • the xmlmemory.c module includes a set of debugging routine
    • +
    + +

    Setting libxml2 set of memory routines

    + +

    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:

    +
      +
    • xmlMemGet + () which return the current set of functions in use by the parser
    • +
    • xmlMemSetup() + which allow to set up a new set of memory allocation functions
    • +
    + +

    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).

    + +

    Cleaning up after using the library

    + +

    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 library or any document built with it:

    +
      +
    • xmlCleanupParser + () is a centralized routine to free the library state and data. Note + that it won't deallocate any produced tree if any (use the xmlFreeDoc() + and related routines for this). This should be called only when the library + is not used anymore.
    • +
    • xmlInitParser + () 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
    • +
    + +

    Generally xmlCleanupParser() is safe assuming no parsing is ongoing and +no document is still being used, if needed the state will be rebuild at the +next invocation of parser routines (or by xmlInitParser()), but be careful +of the consequences in multithreaded applications.

    + +

    Debugging routines

    + +

    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:

    + + +

    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!).

    + +

    If the .memdump reports a leak, it displays the allocation function and +also tries to give some information about the content and structure of the +allocated blocks left. This is sufficient in most cases to find the culprit, +but not always. Assuming the allocation problem is reproducible, it is +possible to find more easily:

    +
      +
    1. write down the block number xxxx not allocated
    2. +
    3. export the environment variable XML_MEM_BREAKPOINT=xxxx , the easiest + when using GDB is to simply give the command +

      set environment XML_MEM_BREAKPOINT xxxx

      +

      before running the program.

      +
    4. +
    5. run the program under a debugger and set a breakpoint on + xmlMallocBreakpoint() a specific function called when this precise block + is allocated
    6. +
    7. 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.
    8. +
    + +

    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 valgrind 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.

    + +

    General memory requirements

    + +

    How much libxml2 memory require ? It's hard to tell in average it depends +of a number of things:

    +
      +
    • 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).
    • +
    • 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
    • +
    • If you need to work with fixed memory requirements or don't need the + full DOM tree then using the xmlReader + interface is probably the best way to proceed, it still allows to + validate or operate on subset of the tree if needed.
    • +
    • 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.
    • +
    + +

    +

    Returning memory to the kernel

    + +

    You may encounter that your process using libxml2 does not have a +reduced memory usage although you freed the trees. This is because +libxml2 allocates memory in a number of small chunks. When freeing one +of those chunks, the OS may decide that giving this little memory back +to the kernel will cause too much overhead and delay the operation. As +all chunks are this small, they get actually freed but not returned to +the kernel. On systems using glibc, there is a function call +"malloc_trim" from malloc.h which does this missing operation (note that +it is allowed to fail). Thus, after freeing your tree you may simply try +"malloc_trim(0);" to really get the memory back. If your OS does not +provide malloc_trim, try searching for a similar function.

    +

    + +

    Encodings support

    + +

    If you are not really familiar with Internationalization (usual shortcut +is I18N) , Unicode, characters and glyphs, I suggest you read a presentation +by Tim Bray on Unicode and why you should care about it.

    + +

    If you don't understand why it does not make sense to have a string +without knowing what encoding it uses, then as Joel Spolsky said please do not +write another line of code until you finish reading that article.. It is +a prerequisite to understand this page, and avoid a lot of problems with +libxml2, XML or text processing in general.

    + +

    Table of Content:

    +
      +
    1. What does internationalization support + mean ?
    2. +
    3. The internal encoding, how and + why
    4. +
    5. How is it implemented ?
    6. +
    7. Default supported encodings
    8. +
    9. How to extend the existing + support
    10. +
    + +

    What does internationalization support mean ?

    + +

    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:

    +
    <?xml version="1.0" encoding="ISO-8859-1"?>
    +<très>là </très>
    + +

    Having internationalization support in libxml2 means the following:

    +
      +
    • the document is properly parsed
    • +
    • information about it's encoding is saved
    • +
    • it can be modified
    • +
    • it can be saved in its original encoding
    • +
    • it can also be saved in another encoding supported by libxml2 (for + example straight UTF8 or even an ASCII form)
    • +
    + +

    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.

    + +

    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:

    +
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
    +                      "http://www.w3.org/TR/REC-html40/loose.dtd">
    +<html lang="fr">
    +<head>
    +  <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
    +</head>
    +<body>
    +<p>W3C crée des standards pour le Web.</body>
    +</html>
    + +

    The internal encoding, how and why

    + +

    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:

    +
      +
    • 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.
    • +
    • 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: +
        +
      • 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
      • +
      • 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.
      • +
      • UTF-8 is being used as the de-facto internal encoding standard for + related code like the pango + 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)
      • +
      +
    • +
    + +

    What does this mean in practice for the libxml2 user:

    +
      +
    • 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.
    • +
    • One just need to make sure that when using chars outside the ASCII set, + the values has been properly converted to UTF-8
    • +
    + +

    How is it implemented ?

    + +

    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:

    +
      +
    1. 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
    2. +
    3. 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.
    4. +
    5. 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: +
      ~/XML -> ./xmllint err.xml 
      +err.xml:1: error: Input is not proper UTF-8, indicate encoding !
      +<très>là </très>
      +   ^
      +err.xml:1: error: Bytes: 0xE8 0x73 0x3E 0x6C
      +<très>là </très>
      +   ^
      +
    6. +
    7. 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: +
      ~/XML -> ./xmllint err2.xml 
      +err2.xml:1: error: Unsupported encoding UnsupportedEnc
      +<?xml version="1.0" encoding="UnsupportedEnc"?>
      +                                             ^
      +
    8. +
    9. 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).
    10. +
    11. The result (when using DOM) is an internal form completely in UTF-8 + with just an encoding information on the document node.
    12. +
    + +

    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:

    +
      +
    1. 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, +

      otherwise everything is written in the internal form, i.e. UTF-8

      +
    2. +
    3. 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
    4. +
    5. 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.
    6. +
    7. 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 &#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
    8. +
    + +

    Here are a few examples based on the same test document and assumin a +terminal using ISO-8859-1 as the text encoding:

    +
    ~/XML -> ./xmllint isolat1 
    +<?xml version="1.0" encoding="ISO-8859-1"?>
    +<très>là</très>
    +~/XML -> ./xmllint --encode UTF-8 isolat1 
    +<?xml version="1.0" encoding="UTF-8"?>
    +<très>là  </très>
    +~/XML -> 
    + +

    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 <meta> tag under the <head>, +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).

    + +

    Default supported encodings

    + +

    libxml2 has a set of default converters for the following encodings +(located in encoding.c):

    +
      +
    1. UTF-8 is supported by default (null handlers)
    2. +
    3. UTF-16, both little and big endian
    4. +
    5. ISO-Latin-1 (ISO-8859-1) covering most western languages
    6. +
    7. ASCII, useful mostly for saving
    8. +
    9. HTML, a specific handler for the conversion of UTF-8 to ASCII with HTML + predefined entities like &copy; for the Copyright sign.
    10. +
    + +

    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.

    + +

    To convert from the UTF-8 values returned from the API to another encoding +then it is possible to use the function provided from the encoding module like UTF8Toisolat1, or use the +POSIX iconv() +API directly.

    + +

    Encoding aliases

    + +

    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:

    +
      +
    • int xmlAddEncodingAlias(const char *name, const char *alias);
    • +
    • int xmlDelEncodingAlias(const char *alias);
    • +
    • const char * xmlGetEncodingAlias(const char *alias);
    • +
    • void xmlCleanupEncodingAliases(void);
    • +
    + +

    How to extend the existing support

    + +

    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.

    + +

    I/O Interfaces

    + +

    Table of Content:

    +
      +
    1. General overview
    2. +
    3. The basic buffer type
    4. +
    5. Input I/O handlers
    6. +
    7. Output I/O handlers
    8. +
    9. The entities loader
    10. +
    11. Example of customized I/O
    12. +
    + +

    General overview

    + +

    The module xmlIO.h provides +the interfaces to the libxml2 I/O system. This consists of 4 main parts:

    +
      +
    • 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 + xmlGetExternalEntityLoader() and + xmlSetExternalEntityLoader(). Check the + example.
    • +
    • Input I/O buffers which are a commodity structure used by the parser(s) + input layer to handle fetching the information to feed the parser. This + provides buffering and is also a placeholder where the encoding + converters to UTF8 are piggy-backed.
    • +
    • Output I/O buffers are similar to the Input ones and fulfill similar + task but when generating a serialization from a tree.
    • +
    • A mechanism to register sets of I/O callbacks and associate them with + specific naming schemes like the protocol part of the URIs. +

      This affect the default I/O operations and allows to use specific I/O + handlers for certain names.

      +
    • +
    + +

    The general mechanism used when loading http://rpmfind.net/xml.html for +example in the HTML parser is the following:

    +
      +
    1. The default entity loader calls xmlNewInputFromFile() with + the parsing context and the URI string.
    2. +
    3. 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
    4. +
    5. the open() function of the handler is called and if successful will + return an I/O Input buffer
    6. +
    7. 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
    8. +
    9. if an encoding change is detected it will be installed on the input + buffer, providing buffering and efficient use of the conversion + routines
    10. +
    11. once the parser has finished, the close() function of the handler is + called once and the Input buffer and associated resources are + deallocated.
    12. +
    + +

    The user defined callbacks are checked first to allow overriding of the +default libxml2 I/O routines.

    + +

    The basic buffer type

    + +

    All the buffer manipulation handling is done using the +xmlBuffer type define in tree.h 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 XML_BUFFER_ALLOC_EXACT and +XML_BUFFER_ALLOC_DOUBLEIT, and can be set individually or on a +system wide basis using xmlBufferSetAllocationScheme(). A number +of functions allows to manipulate buffers with names starting with the +xmlBuffer... prefix.

    + +

    Input I/O handlers

    + +

    An Input I/O handler is a simple structure +xmlParserInputBuffer 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.

    + +

    Output I/O handlers

    + +

    An Output handler xmlOutputBuffer is completely similar to an +Input one except the callbacks are write() and close().

    + +

    The entities loader

    + +

    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).

    + +

    If you want to hook up a catalog mechanism then you simply need to +override the default entity loader, here is an example:

    +
    #include <libxml/xmlIO.h>
    +
    +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);
    +
    +    ...
    +}
    + +

    Example of customized I/O

    + +

    This example come from a +real use case, xmlDocDump() closes the FILE * passed by the application +and this was a problem. The solution was to redefine a +new output handler with the closing call deactivated:

    +
      +
    1. First define a new I/O output allocator where the output don't close + the file: +
      xmlOutputBufferPtr
      +xmlOutputBufferCreateOwn(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 = NULL;  /* No close callback */
      +    }
      +    return(ret);
      +} 
      +
    2. +
    3. And then use it to save the document: +
      FILE *f;
      +xmlOutputBufferPtr output;
      +xmlDocPtr doc;
      +int res;
      +
      +f = ...
      +doc = ....
      +
      +output = xmlOutputBufferCreateOwn(f, NULL);
      +res = xmlSaveFileTo(output, doc, NULL);
      +    
      +
    4. +
    + +

    Catalog support

    + +

    Table of Content:

    +
      +
    1. General overview
    2. +
    3. The definition
    4. +
    5. Using catalogs
    6. +
    7. Some examples
    8. +
    9. How to tune catalog usage
    10. +
    11. How to debug catalog processing
    12. +
    13. How to create and maintain catalogs
    14. +
    15. The implementor corner quick review of the + API
    16. +
    17. Other resources
    18. +
    + +

    General overview

    + +

    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.

    + +

    It is basically used for 3 things:

    +
      +
    • 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 +

      "-//OASIS//DTD DocBook XML V4.1.2//EN"

      +

      of the DocBook 4.1.2 XML DTD with the actual URL where it can be + downloaded

      +

      http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd

      +
    • +
    • remapping from a given URL to another one, like an HTTP indirection + saying that +

      "http://www.oasis-open.org/committes/tr.xsl"

      +

      should really be looked at

      +

      "http://www.oasis-open.org/committes/entity/stylesheets/base/tr.xsl"

      +
    • +
    • 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.
    • +
    + +

    The definitions

    + +

    Libxml, as of 2.4.3 implements 2 kind of catalogs:

    +
      +
    • the older SGML catalogs, the official spec is SGML Open Technical + Resolution TR9401:1997, but is better understood by reading the SP Catalog page from + James Clark. This is relatively old and not the preferred mode of + operation of libxml.
    • +
    • XML + Catalogs is far more flexible, more recent, uses an XML syntax and + should scale quite better. This is the default option of libxml.
    • +
    + +

    + +

    Using catalog

    + +

    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:

    +
    <?xml version='1.0'?>
    +<!DOCTYPE book PUBLIC "-//Norman Walsh//DTD DocBk XML V3.1.4//EN"
    +          "http://nwalsh.com/docbook/xml/3.1.4/db3xml.dtd">
    + +

    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.

    + +

    Note: Really don't use this +DOCTYPE example it's a really old version, but is fine as an example.

    + +

    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.

    + +

    Some examples:

    + +

    Here is a couple of fragments from XML Catalogs used in libxml2 early +regression tests in test/catalogs :

    +
    <?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"/>
    +...
    + +

    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 public mapping it allows to associate a Public +Identifier with an URI.

    +
    ...
    +    <rewriteSystem systemIdStartString="http://www.oasis-open.org/docbook/"
    +                   rewritePrefix="file:///usr/share/xml/docbook/"/>
    +...
    + +

    A rewriteSystem 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.

    +
    ...
    +<delegatePublic publicIdStartString="-//OASIS//DTD XML Catalog //"
    +                catalog="file:///usr/share/xml/docbook.xml"/>
    +<delegatePublic publicIdStartString="-//OASIS//ENTITIES DocBook XML"
    +                catalog="file:///usr/share/xml/docbook.xml"/>
    +<delegatePublic publicIdStartString="-//OASIS//DTD DocBook XML"
    +                catalog="file:///usr/share/xml/docbook.xml"/>
    +<delegateSystem systemIdStartString="http://www.oasis-open.org/docbook/"
    +                catalog="file:///usr/share/xml/docbook.xml"/>
    +<delegateURI uriStartString="http://www.oasis-open.org/docbook/"
    +                catalog="file:///usr/share/xml/docbook.xml"/>
    +...
    + +

    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 +/usr/share/xml/docbook.xml 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.

    + +

    How to tune catalog usage:

    + +

    The user can change the default catalog behaviour by redirecting queries +to its own set of catalogs, this can be done by setting the +XML_CATALOG_FILES environment variable to a list of catalogs, an +empty one should deactivate loading the default /etc/xml/catalog +default catalog

    + +

    How to debug catalog processing:

    + +

    Setting up the XML_DEBUG_CATALOG environment variable will +make libxml2 output debugging information for each catalog operations, for +example:

    +
    orchis:~/XML -> xmllint --memory --noout test/ent2
    +warning: failed to load external entity "title.xml"
    +orchis:~/XML -> export XML_DEBUG_CATALOG=
    +orchis:~/XML -> 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 -> 
    + +

    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 /etc/xml/catalog but since it's not present the +resolution fails.

    + +

    But the most advanced way to debug XML catalog processing is to use the +xmlcatalog 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:

    +
    orchis:~/XML -> ./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 -> 
    + +

    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):

    +
    orchis:~/XML -> ./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 -> 
    + +

    A shell interface is also available to debug and process multiple queries +(and for regression tests):

    +
    orchis:~/XML -> ./xmlcatalog -shell test/catalogs/docbook.xml \
    +                   "-//OASIS//DTD DocBook XML V4.1.2//EN"
    +> 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
    +> public "-//OASIS//DTD DocBook XML V4.1.2//EN"
    +http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd
    +> quit
    +orchis:~/XML -> 
    + +

    This should be sufficient for most debugging purpose, this was actually +used heavily to debug the XML Catalog implementation itself.

    + +

    How to create and maintain catalogs:

    + +

    Basically XML Catalogs are XML files, you can either use XML tools to +manage them or use xmlcatalog for this. The basic step is +to create a catalog the -create option provide this facility:

    +
    orchis:~/XML -> ./xmlcatalog --create tst.xml
    +<?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"/>
    +orchis:~/XML -> 
    + +

    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 -add command allows to add entries in the +catalog:

    +
    orchis:~/XML -> ./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 -> cat tst.xml
    +<?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"/>
    +</catalog>
    +orchis:~/XML -> 
    + +

    The -add 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.

    + +

    Similarly the -del option remove matching entries from the +catalog:

    +
    orchis:~/XML -> ./xmlcatalog --del \
    +  "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" tst.xml
    +<?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"/>
    +orchis:~/XML -> 
    + +

    The catalog is now empty. Note that the matching of -del is +exact and would have worked in a similar fashion with the Public ID +string.

    + +

    This is rudimentary but should be sufficient to manage a not too complex +catalog tree of resources.

    + +

    The implementor corner quick review of the +API:

    + +

    First, and like for every other module of libxml, there is an +automatically generated API page for +catalog support.

    + +

    The header for the catalog interfaces should be included as:

    +
    #include <libxml/catalog.h>
    + +

    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 xmlSetExternalEntityLoader to +plug an application specific resolver).

    + +

    Basically libxml2 support 2 catalog lists:

    +
      +
    • the default one, global shared by all the application
    • +
    • a per-document catalog, this one is built if the document uses the + oasis-xml-catalog PIs to specify its own catalog list, it is + associated to the parser context and destroyed when the parsing context + is destroyed.
    • +
    + +

    the document one will be used first if it exists.

    + +

    Initialization routines:

    + +

    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.

    + +

    The xmlCatalogAddLocal() call is used by the parser to grow the document +own catalog list if needed.

    + +

    Preferences setup:

    + +

    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.

    + +

    And of course xmlCatalogSetDebug() allows to generate debug messages +(through the xmlGenericError() mechanism).

    + +

    Querying routines:

    + +

    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.

    + +

    xmlCatalogLocalResolve() and xmlCatalogLocalResolveURI() are the same but +operate on the document catalog list

    + +

    Cleanup and Miscellaneous:

    + +

    xmlCatalogCleanup() free-up the global catalog, xmlCatalogFreeLocal() is +the per-document equivalent.

    + +

    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.

    + +

    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.

    + +

    threaded environments:

    + +

    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.

    + +

    + +

    Other resources

    + +

    The XML Catalog specification is relatively recent so there isn't much +literature to point at:

    +
      +
    • You can find a good rant from Norm Walsh about the + need for catalogs, it provides a lot of context information even if + I don't agree with everything presented. Norm also wrote a more recent + article XML + entities and URI resolvers describing them.
    • +
    • An old XML + catalog proposal from John Cowan
    • +
    • The Resource Directory Description + Language (RDDL) another catalog system but more oriented toward + providing metadata for XML namespaces.
    • +
    • the page from the OASIS Technical Committee on Entity + Resolution who maintains XML Catalog, you will find pointers to the + specification update, some background and pointers to others tools + providing XML Catalog support
    • +
    • There is a shell script 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: +

      export XML_CATALOG_FILES=$HOME/xmlcatalog

      +

      should allow to process DocBook documentations without requiring + network accesses for the DTD or stylesheets

      +
    • +
    • I have uploaded a + small tarball containing XML Catalogs for DocBook 4.1.2 which seems + to work fine for me too
    • +
    • The xmlcatalog + manual page
    • +
    + +

    If you have suggestions for corrections or additions, simply contact +me:

    + +

    The parser interfaces

    + +

    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 look at DOM.

    + +

    The parser interfaces for XML are +separated from the HTML parser +interfaces. Let's have a look at how the XML parser can be called:

    + +

    Invoking the parser : the pull method

    + +

    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":

    +
    +
    xmlDocPtr xmlParseMemory(char *buffer, int size);
    +

    Parse a null-terminated string containing the document.

    +
    +
    +
    +
    xmlDocPtr xmlParseFile(const char *filename);
    +

    Parse an XML document contained in a (possibly compressed) + file.

    +
    +
    + +

    The parser returns a pointer to the document structure (or NULL in case of +failure).

    + +

    Invoking the parser: the push method

    + +

    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:

    +
    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);
    + +

    and here is a simple example showing how to use the interface:

    +
                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 > 0) {
    +                    ctxt = xmlCreatePushParserCtxt(NULL, NULL,
    +                                chars, res, filename);
    +                    while ((res = fread(chars, 1, size, f)) > 0) {
    +                        xmlParseChunk(ctxt, chars, res, 0);
    +                    }
    +                    xmlParseChunk(ctxt, chars, 0, 1);
    +                    doc = ctxt->myDoc;
    +                    xmlFreeParserCtxt(ctxt);
    +                }
    +            }
    + +

    The HTML parser embedded into libxml2 also has a push interface; the +functions are just prefixed by "html" rather than "xml".

    + +

    Invoking the parser: the SAX interface

    + +

    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 +James +Henstridge's documentation). Note also that the push interface can be +limited to SAX: just use the two first arguments of +xmlCreatePushParserCtxt().

    + +

    Building a tree from scratch

    + +

    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 <libxml/tree.h>.) For example, here is a piece of +code that produces the XML document used in the previous examples:

    +
        #include <libxml/tree.h>
    +    xmlDocPtr doc;
    +    xmlNodePtr tree, subtree;
    +
    +    doc = xmlNewDoc("1.0");
    +    doc->children = xmlNewDocNode(doc, NULL, "EXAMPLE", NULL);
    +    xmlSetProp(doc->children, "prop1", "gnome is great");
    +    xmlSetProp(doc->children, "prop2", "& linux too");
    +    tree = xmlNewChild(doc->children, NULL, "head", NULL);
    +    subtree = xmlNewChild(tree, NULL, "title", "Welcome to Gnome");
    +    tree = xmlNewChild(doc->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");
    + +

    Not really rocket science ...

    + +

    Traversing the tree

    + +

    Basically by including "tree.h" your +code has access to the internal structure of all the elements of the tree. +The names should be somewhat simple like parent, +children, next, prev, +properties, etc... For example, still with the previous +example:

    +
    doc->children->children->children
    + +

    points to the title element,

    +
    doc->children->children->next->children->children
    + +

    points to the text node containing the chapter title "The Linux +adventure".

    + +

    NOTE: XML allows PIs and comments to be +present before the document root, so doc->children may point +to an element which is not the document Root Element; a function +xmlDocGetRootElement() was added for this purpose.

    + +

    Modifying the tree

    + +

    Functions are provided for reading and writing the document content. Here +is an excerpt from the tree API:

    +
    +
    xmlAttrPtr xmlSetProp(xmlNodePtr node, const xmlChar *name, const + xmlChar *value);
    +

    This sets (or changes) an attribute carried by an ELEMENT node. + The value can be NULL.

    +
    +
    +
    +
    const xmlChar *xmlGetProp(xmlNodePtr node, const xmlChar + *name);
    +

    This function returns a pointer to new copy of the property + content. Note that the user must deallocate the result.

    +
    +
    + +

    Two functions are provided for reading and writing the text associated +with elements:

    +
    +
    xmlNodePtr xmlStringGetNodeList(xmlDocPtr doc, const xmlChar + *value);
    +

    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 &Gnome; will be stored + internally as entity nodes, hence the result of the function may not be + a single node.

    +
    +
    +
    +
    xmlChar *xmlNodeListGetString(xmlDocPtr doc, xmlNodePtr list, int + inLine);
    +

    This function is the inverse of + xmlStringGetNodeList(). 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 &Gnome; + XML encoding in the string, it will substitute it with its value (say, + "GNU Network Object Model Environment").

    +
    +
    + +

    Saving a tree

    + +

    Basically 3 options are possible:

    +
    +
    void xmlDocDumpMemory(xmlDocPtr cur, xmlChar**mem, int + *size);
    +

    Returns a buffer into which the document has been saved.

    +
    +
    +
    +
    extern void xmlDocDump(FILE *f, xmlDocPtr doc);
    +

    Dumps a document to an open file descriptor.

    +
    +
    +
    +
    int xmlSaveFile(const char *filename, xmlDocPtr cur);
    +

    Saves the document to a file. In this case, the compression + interface is triggered if it has been turned on.

    +
    +
    + +

    Compression

    + +

    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:

    +
    +
    int xmlGetDocCompressMode (xmlDocPtr doc);
    +

    Gets the document compression ratio (0-9).

    +
    +
    +
    +
    void xmlSetDocCompressMode (xmlDocPtr doc, int mode);
    +

    Sets the document compression ratio.

    +
    +
    +
    +
    int xmlGetCompressMode(void);
    +

    Gets the default compression ratio.

    +
    +
    +
    +
    void xmlSetCompressMode(int mode);
    +

    Sets the default compression ratio.

    +
    +
    + +

    Entities or no entities

    + +

    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:

    +
    1 <?xml version="1.0"?>
    +2 <!DOCTYPE EXAMPLE SYSTEM "example.dtd" [
    +3 <!ENTITY xml "Extensible Markup Language">
    +4 ]>
    +5 <EXAMPLE>
    +6    &xml;
    +7 </EXAMPLE>
    + +

    Line 3 declares the xml entity. Line 6 uses the xml entity, by prefixing +its name with '&' 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: +&lt; for the character '<', &gt; +for the character '>', &apos; for the character ''', +&quot; for the character '"', and +&amp; for the character '&'.

    + +

    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 xmlSubstituteEntitiesDefault() +function allows you to check and change the behaviour, which is to not +substitute entities by default.

    + +

    Here is the DOM tree built by libxml2 for the previous document in the +default case:

    +
    /gnome/src/gnome-xml -> ./xmllint --debug test/ent1
    +DOCUMENT
    +version=1.0
    +   ELEMENT EXAMPLE
    +     TEXT
    +     content=
    +     ENTITY_REF
    +       INTERNAL_GENERAL_ENTITY xml
    +       content=Extensible Markup Language
    +     TEXT
    +     content=
    + +

    And here is the result when substituting entities:

    +
    /gnome/src/gnome-xml -> ./tester --debug --noent test/ent1
    +DOCUMENT
    +version=1.0
    +   ELEMENT EXAMPLE
    +     TEXT
    +     content=     Extensible Markup Language
    + +

    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.

    + +

    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).

    + +

    WARNING: 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.

    + +

    Namespaces

    + +

    The libxml2 library implements XML namespaces 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.

    + +

    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:

    +
    <mydoc xmlns="http://mydoc.example.org/schemas/">
    +   <elem1>...</elem1>
    +   <elem2>...</elem2>
    +</mydoc>
    + +

    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, "http://www.gnome.org/gnumeric/1.0/" is a +good namespace scheme.

    + +

    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. <foo:text> may be exactly the +same as <bar:text> 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 +ns field pointing to an xmlNs structure detailing the namespace +prefix and its URI.

    + +

    @@Interfaces@@

    +
    xmlNodePtr node;
    +if(!strncmp(node->name,"mytag",5)
    +  && node->ns
    +  && !strcmp(node->ns->href,"http://www.mysite.com/myns/1.0")) {
    +  ...
    +}
    + +

    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 +xmlns="http://...." 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 relagx-ng and w3c-schema.

    + +

    Upgrading 1.x code

    + +

    Incompatible changes:

    + +

    Version 2 of libxml2 is the first version introducing serious backward +incompatible changes. The main goals were:

    +
      +
    • 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.
    • +
    • 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.
    • +
    • 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.
    • +
    + +

    How to fix libxml-1.x code:

    + +

    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, drop me a +mail:

    +
      +
    1. 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
    2. +
    3. Node childs field has been renamed + children so s/childs/children/g should be applied + (probability of having "childs" anywhere else is close to 0+
    4. +
    5. The document don't have anymore a root element it has + been replaced by children 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 xmlDocGetRootElement(doc) 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/->root/->children/g will probably do it.
    6. +
    7. 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: +
        +
      1. lazy one, use the compatibility call + xmlKeepBlanksDefault(0) 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.
      2. +
      3. 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 + xmlIsBlankNode(node) returning 1 for such blank + nodes.
      4. +
      +

      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.

      +
    8. +
    9. 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 +
      xml2-config --cflags
      +

      output to generate you compile commands this will probably work out of + the box

      +
    10. +
    11. xmlDetectCharEncoding takes an extra argument indicating the length in + byte of the head of the document available for character detection.
    12. +
    + +

    Ensuring both libxml-1.x and libxml-2.x compatibility

    + +

    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:

    +
      +
    1. similar include naming, one should use + #include<libxml/...> in both cases.
    2. +
    3. similar identifiers defined via macros for the child and root fields: + respectively xmlChildrenNode and + xmlRootNode
    4. +
    5. a new macro LIBXML_TEST_VERSION which should be + inserted once in the client code
    6. +
    + +

    So the roadmap to upgrade your existing libxml applications is the +following:

    +
      +
    1. install the libxml-1.8.8 (and libxml-devel-1.8.8) packages
    2. +
    3. find all occurrences where the xmlDoc root field is + used and change it to xmlRootNode
    4. +
    5. similarly find all occurrences where the xmlNode + childs field is used and change it to + xmlChildrenNode
    6. +
    7. add a LIBXML_TEST_VERSION macro somewhere in your + main() or in the library init entry point
    8. +
    9. Recompile, check compatibility, it should still work
    10. +
    11. 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.
    12. +
    13. 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)
    14. +
    15. remove your config.cache, relaunch your configuration mechanism, and + recompile, if steps 2 and 3 were done right it should compile as-is
    16. +
    17. 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 + LIBXML_TEST_VERSION is a fine place).
    18. +
    + +

    Following those steps should work. It worked for some of my own code.

    + +

    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 ...

    + +

    Thread safety

    + +

    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:

    +
      +
    • configure the library accordingly using the --with-threads options
    • +
    • call xmlInitParser() in the "main" thread before using any of the + libxml2 API (except possibly selecting a different memory allocator)
    • +
    + +

    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 <libxml/threads.h>. +The parts of the library checked for thread safety are:

    +
      +
    • concurrent loading
    • +
    • file access resolution
    • +
    • catalog access
    • +
    • catalog building
    • +
    • entities lookup/accesses
    • +
    • validation
    • +
    • global variables per-thread override
    • +
    • memory handling
    • +
    + +

    XPath has been tested for threaded usage on non-modified document + for example when using libxslt, but make 100% sure the documents + are accessed read-only !

    + +

    DOM Principles

    + +

    DOM stands for the Document +Object Model; 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.

    + +

    The current DOM implementation on top of libxml2 is the gdome2 Gnome module, this +is a full DOM interface, thanks to Paolo Casarini, check the Gdome2 homepage for more +information.

    + +

    A real example

    + +

    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 XML encoded jobs +base:

    +
    <?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>
    + +

    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.

    + +

    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:

    +
    /*
    + * 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->xmlChildrenNode;
    +    while (cur != NULL) {
    +        if ((!strcmp(cur->name, "Person")) && (cur->ns == ns))
    +            ret->name = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
    +        if ((!strcmp(cur->name, "Email")) && (cur->ns == ns))
    +            ret->email = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
    +        cur = cur->next;
    +    }
    +
    +    return(ret);
    +}
    + +

    Here are a couple of things to notice:

    +
      +
    • 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.
    • +
    • The two arguments of type xmlDocPtr and xmlNsPtr, + 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->ns == ns).
    • +
    • To retrieve text and attributes value, you can use the function + xmlNodeListGetString to gather all the text and entity reference + nodes generated by the DOM output and produce an single text string.
    • +
    + +

    Here is another piece of code used to parse another level of the +structure:

    +
    #include <libxml/tree.h>
    +/*
    + * 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->xmlChildrenNode;
    +    while (cur != NULL) {
    +        
    +        if ((!strcmp(cur->name, "Project")) && (cur->ns == ns)) {
    +            ret->projectID = xmlGetProp(cur, "ID");
    +            if (ret->projectID == NULL) {
    +                fprintf(stderr, "Project has no ID\n");
    +            }
    +        }
    +        if ((!strcmp(cur->name, "Application")) && (cur->ns == ns))
    +            ret->application = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
    +        if ((!strcmp(cur->name, "Category")) && (cur->ns == ns))
    +            ret->category = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
    +        if ((!strcmp(cur->name, "Contact")) && (cur->ns == ns))
    +            ret->contact = parsePerson(doc, ns, cur);
    +        cur = cur->next;
    +    }
    +
    +    return(ret);
    +}
    + +

    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 :-)

    + +

    Feel free to use the code for the full C +parsing example as a template, it is also available with Makefile in the +Gnome SVN base under libxml2/example

    + +

    Contributions

    + + +

    + + diff --git a/doc/xmlcatalog.1 b/doc/xmlcatalog.1 new file mode 100644 index 0000000..b4a6b22 --- /dev/null +++ b/doc/xmlcatalog.1 @@ -0,0 +1,340 @@ +'\" t +.\" Title: xmlcatalog +.\" Author: John Fleck +.\" Generator: DocBook XSL Stylesheets v1.76.1 +.\" Date: $Date$ +.\" Manual: xmlcatalog Manual +.\" Source: libxml2 +.\" Language: English +.\" +.TH "XMLCATALOG" "1" "$Date$" "libxml2" "xmlcatalog Manual" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +xmlcatalog \- Command line tool to parse and manipulate XML or SGML catalog files\&. +.SH "SYNOPSIS" +.HP \w'\fBxmlcatalog\fR\ 'u +\fBxmlcatalog\fR [\fB\-\-sgml\fR | \fB\-\-shell\fR | \fB\-\-create\fR | \fB\-\-del\ \fR\fB\fIVALUE(S)\fR\fR | [\ \fB\-\-add\ \fR\fB\fITYPE\fR\fR\fB\ \fR\fB\fIORIG\fR\fR\fB\ \fR\fB\fIREPLACE\fR\fR\fB\ \fR\ |\ \fB\-\-add\ \fR\fB\fIFILENAME\fR\fR] | \fB\-\-noout\fR | \fB\-\-no\-super\-update\fR | [\fB\-v\fR\ |\ \fB\-\-verbose\fR]] {\fICATALOGFILE\fR} {\fIENTITIES\fR...} +.SH "DESCRIPTION" +.PP + +\fBxmlcatalog\fR +is a command line application allowing users to monitor and manipulate +XML +and +SGML +catalogs\&. It is included in +\fBlibxml\fR(3)\&. +.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 "OPTIONS" +.PP + +\fBxmlcatalog\fR +accepts the following options (in alphabetical order): +.PP +\fB\-\-add \fR\fB\fITYPE\fR\fR\fB \fR\fB\fIORIG\fR\fR\fB \fR\fB\fIREPLACE\fR\fR\fB \fR +.RS 4 +Add an entry to +CATALOGFILE\&. +\fITYPE\fR +indicates the type of entry\&. Possible types are: +\fIpublic\fR, \fIsystem\fR, \fIuri\fR, \fIrewriteSystem\fR, \fIrewriteURI\fR, \fIdelegatePublic\fR, \fIdelegateSystem\fR, \fIdelegateURI\fR, \fInextCatalog\fR\&. +\fIORIG\fR +is the original reference to be replaced, and +\fIREPLACE\fR +is the +URI +of the replacement entity to be used\&. The +\fB\-\-add\fR +option will not overwrite +CATALOGFILE, outputting 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\&. +.RE +.PP +\fB\-\-add \fR\fB\fIFILENAME\fR\fR +.RS 4 +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\&. +.RE +.PP +\fB\-\-create\fR +.RS 4 +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\&. +.RE +.PP +\fB\-\-del \fR\fB\fIVALUE(S)\fR\fR +.RS 4 +Remove entries from +\fICATALOGFILE\fR +matching +\fIVALUE(S)\fR\&. The +\fB\-\-del\fR +option will not overwrite +\fICATALOGFILE\fR, outputting to +stdout, unless +\fB\-\-noout\fR +is used\&. +.RE +.PP +\fB\-\-noout\fR +.RS 4 +Save output to the named file rather than outputting to +stdout\&. +.RE +.PP +\fB\-\-no\-super\-update\fR +.RS 4 +Do not update the +SGML +super catalog\&. +.RE +.PP +\fB\-\-shell\fR +.RS 4 +Run a shell allowing interactive queries on catalog file +\fICATALOGFILE\fR\&. For the set of available commands see +the section called \(lqSHELL COMMANDS\(rq\&. +.RE +.PP +\fB\-\-sgml\fR +.RS 4 +Uses +SGML +super catalogs for +\fB\-\-add\fR +and +\fB\-\-del\fR +options\&. +.RE +.PP +\fB\-v\fR, \fB\-\-verbose\fR +.RS 4 +Output debugging information\&. +.RE +.SH "SHELL COMMANDS" +.PP +Invoking +\fBxmlcatalog\fR +with the +\fB\-\-shell \fR\fB\fICATALOGFILE\fR\fR +option opens a command line shell allowing interactive access to the catalog file identified by +\fICATALOGFILE\fR\&. Invoking the shell provides a command line prompt after which the following commands (described in alphabetical order) can be entered\&. +.PP +\fBadd \fR\fB\fITYPE\fR\fR\fB \fR\fB\fIORIG\fR\fR\fB \fR\fB\fIREPLACE\fR\fR\fB \fR +.RS 4 +Add an entry to the catalog file\&. +\fITYPE\fR +indicates the type of entry\&. Possible types are: +\fIpublic\fR, \fIsystem\fR, \fIuri\fR, \fIrewriteSystem\fR, \fIrewriteURI\fR, \fIdelegatePublic\fR, \fIdelegateSystem\fR, \fIdelegateURI\fR, \fInextCatalog\fR\&. +\fIORIG\fR +is the original reference to be replaced, and +\fIREPLACE\fR +is the +URI +of the replacement entity to be used\&. The +\fB\-\-add\fR +option will not overwrite +CATALOGFILE, outputting 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\&. +.RE +.PP +\fBdebug\fR +.RS 4 +Print debugging statements showing the steps +\fBxmlcatalog\fR +is executing\&. +.RE +.PP +\fBdel \fR\fB\fIVALUE(S)\fR\fR +.RS 4 +Remove the catalog entry corresponding to +\fIVALUE(S)\fR\&. +.RE +.PP +\fBdump\fR +.RS 4 +Print the current catalog\&. +.RE +.PP +\fBexit\fR +.RS 4 +Quit the shell\&. +.RE +.PP +\fBpublic \fR\fB\fIPUBLIC\-ID\fR\fR +.RS 4 +Execute a Formal Public Identifier look\-up of the catalog entry for +\fIPUBLIC\-ID\fR\&. The corresponding entry will be output to the command line\&. +.RE +.PP +\fBquiet\fR +.RS 4 +Stop printing debugging statements\&. +.RE +.PP +\fBsystem \fR\fB\fISYSTEM\-ID\fR\fR +.RS 4 +Execute a Formal Public Identifier look\-up of the catalog entry for +\fISYSTEM\-ID\fR\&. The corresponding entry will be output to the command line\&. +.RE +.SH "ENVIRONMENT" +.PP +\fBXML_CATALOG_FILES\fR +.RS 4 +XML +catalog behavior can be changed by redirecting queries to the user\*(Aqs own set of catalogs\&. This can be done by setting the +\fBXML_CATALOG_FILES\fR +environment variable to a list of catalogs\&. An empty one should deactivate loading the default +/etc/xml/catalog +catalog\&. +.RE +.SH "DIAGNOSTICS" +.PP + +\fBxmlcatalog\fR +return codes provide information that can be used when calling it from scripts\&. +.PP +\fB0\fR +.RS 4 +No error +.RE +.PP +\fB1\fR +.RS 4 +Failed to remove an entry from the catalog +.RE +.PP +\fB2\fR +.RS 4 +Failed to save to the catalog, check file permissions +.RE +.PP +\fB3\fR +.RS 4 +Failed to add an entry to the catalog +.RE +.PP +\fB4\fR +.RS 4 +Failed to look up an entry in the catalog +.RE +.SH "SEE ALSO" +.PP +\fBlibxml\fR(3) +.PP +More information can be found at +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fBlibxml\fR(3) +web page +\m[blue]\fB\%http://www.xmlsoft.org/\fR\m[] +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fBlibxml\fR(3) +catalog support web page at +\m[blue]\fB\%http://www.xmlsoft.org/catalog.html\fR\m[] +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +James Clark\*(Aqs +SGML +catalog page +\m[blue]\fB\%http://www.jclark.com/sp/catalog.htm\fR\m[] +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +OASIS +XML +catalog specification +\m[blue]\fB\%http://www.oasis-open.org/committees/entity/spec.html\fR\m[] +.RE +.sp +.SH "AUTHOR" +.PP +\fBJohn Fleck\fR <\&jfleck@inkstain\&.net\&> +.RS 4 +Author. +.RE +.SH "COPYRIGHT" +.br +Copyright \(co 2001, 2004 +.br diff --git a/doc/xmlcatalog_man.html b/doc/xmlcatalog_man.html new file mode 100644 index 0000000..d7b02ba --- /dev/null +++ b/doc/xmlcatalog_man.html @@ -0,0 +1,101 @@ +xmlcatalog

    Name

    xmlcatalog — Command line tool to parse and manipulate XML or + SGML catalog files.

    Synopsis

    xmlcatalog [[--shell] | [--create] | [--add type + orig replace] | [--del values] | [--noout] | [--verbose]] [catalogfile] [entities]

    Introduction

    + xmlcatalog is a command line application + allowing users to monitor and manipulate XML and + SGML catalogs. It is included in + libxml2. +

    + 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. +

    Command Line Options

    --shell filename
    + Run a shell + allowing interactive queries on catalog file + filename. +
    --create filename
    + Create a new + XML catalog. Outputs to stdout, ignoring + filename unless --noout is + used, in which case it creates a new catalog file + filename. +
    --add 'type' 'orig' 'replace' filename

    + Add an entry to catalog file + filename. type + indicates the type of entry. Possible types are 'public', 'system', 'uri', + 'rewriteSystem', 'rewriteURI', 'delegatePublic', 'delegateSystem', + 'delegateURI' and 'nextCatalog'. 'orig' is the original + reference to be replaced, and 'replace' + is the URI of the replacement entity to be + used. The --add option will not overwrite + filename, outputing to stdout, unless + --noout is used. The --add will + always take three parameters even if some of the + XML catalog constructs will have only a single + argument. + +

    + If the --add option is used following the + --sgml option, only a single argument, a + filename, 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. +

    --del 'values' filename
    + Remove entries from the catalog file + filename matching + 'values'. The --del option + will not overwrite filename, outputing to + stdout, unless --noout is used. +
    --noout
    + Save output to the named file rather than + outputing to stdout. +
    --sgml
    + Uses SGML Super catalogs for --add and --del options +
    -v or --verbose
    + output debugging + information. +

    Shell Commands

    Invoking xmlcatalog with the + --shell filename option opens + a command line shell allowing interactive access to the catalog file + identified by filename. Invoking the shell + provides a command line prompt after which commands can be entered. +

    public 'PublicID'
    + Execute a + public identifier lookup of the catalog entry for + 'PublicID'. The corresponding entry will be + output to the command line. +
    system 'SystemID'
    + Execute a + public identifier lookup of the catalog entry for + 'SystemID'. The corresponding entry will be + output to the command line. +
    add 'type' 'orig' 'replace'
    + Add an entry to the catalog + file. type indicates the type of + entry. Possible types are 'public', 'system', 'uri', 'rewriteSystem', 'rewriteURI', + 'delegatePublic', 'delegateSystem', 'delegateURI' and 'nextCatalog'. 'orig' + is the original reference to be replaced, and + 'replace' is the URI of the + replacement entity to be used. +
    del 'values'
    + Remove the + catalog entry corresponding to 'values'. +
    dump
    + Print the current catalog. +
    debug
    + Print debugging statements showing the steps + xmlcatalog is executing. +
    quiet
    + Stop printing debugging statements. +
    exit
    + Quit the shell. +

    Return values

    xmlcatalog's return codes provide + information that can be used when calling it from scripts.

    0: normal

    1: Failed to remove an entry from the catalog

    2: Failed to save to the catalog, check file permissions

    3: Failed to add an entry to the catalog

    4: Failed to lookup and entry in the catalog

    Catalogs

    Catalog behavior can be changed by redirecting + queries to the user's own set of catalogs. This can be done by setting the + XML_CATALOG_FILES environment variable to a list of + catalogs. An empty one should deactivate loading the default + /etc/xml/catalog default catalog.

    diff --git a/doc/xmlcatalog_man.xml b/doc/xmlcatalog_man.xml new file mode 100644 index 0000000..049ed8f --- /dev/null +++ b/doc/xmlcatalog_man.xml @@ -0,0 +1,450 @@ + + +xmlcatalog"> +]> + + + + + xmlcatalog Manual + libxml2 + + 2001 + 2004 + + + John + Fleck + +
    + jfleck@inkstain.net +
    +
    +
    + + $Date$ + + + +
    + + + xmlcatalog + 1 + + + + xmlcatalog + + Command line tool to parse and manipulate XML + or SGML catalog files. + + + + + + xmlcatalog + + + + + + + + + + + + + + + + + + + + + + + CATALOGFILE + ENTITIES + + + + + DESCRIPTION + + &xmlcatalog; is a command line application allowing users to monitor and + manipulate XML and SGML catalogs. It + is included in + libxml + 3 + . + + + 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. + + + + + OPTIONS + + &xmlcatalog; accepts the following options (in alphabetical order): + + + + + + + + + + + Add an entry to CATALOGFILE. TYPE + indicates the type of entry. Possible types are: + public + system + uri + rewriteSystem + rewriteURI + delegatePublic + delegateSystem + delegateURI + nextCatalog + . ORIG is the original + reference to be replaced, and REPLACE + is the URI of the replacement entity to be + used. The option will not overwrite + CATALOGFILE, outputting + to stdout, unless + is used. The will + always take three parameters even if some of the XML + catalog constructs will have only a single argument. + + + + + + + + + + If the option is used following + the option, only a single argument, + a FILENAME, 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. + + + + + + + + + Create a new XML catalog. Outputs + to stdout, + ignoring filename unless is + used, in which case it creates a new catalog + file filename. + + + + + + + + + Remove entries from CATALOGFILE + matching VALUE(S). The + option will not overwrite CATALOGFILE, + outputting to stdout, + unless is used. + + + + + + + + + Save output to the named file rather than outputting + to stdout. + + + + + + + + + Do not update the SGML super catalog. + + + + + + + + + Run a shell allowing interactive queries on catalog + file CATALOGFILE. For the set of available + commands see . + + + + + + + + + Uses SGML super catalogs for + and options. + + + + + + + + + Output debugging information. + + + + + + + + SHELL COMMANDS + + Invoking &xmlcatalog; with + the option opens + a command line shell allowing interactive access to the catalog file + identified by CATALOGFILE. Invoking the shell + provides a command line prompt after which the following commands (described in + alphabetical order) can be entered. + + + + + + + + + + + Add an entry to the catalog file. TYPE + indicates the type of entry. Possible types are: + public + system + uri + rewriteSystem + rewriteURI + delegatePublic + delegateSystem + delegateURI + nextCatalog + . ORIG is the original + reference to be replaced, and REPLACE + is the URI of the replacement entity to be + used. The option will not overwrite + CATALOGFILE, outputting + to stdout, unless + is used. The will + always take three parameters even if some of the XML + catalog constructs will have only a single argument. + + + + + + + + + Print debugging statements showing the steps &xmlcatalog; is executing. + + + + + + + + + Remove the catalog entry corresponding to VALUE(S). + + + + + + + + Print the current catalog. + + + + + + + Quit the shell. + + + + + + + + Execute a Formal Public Identifier look-up of the catalog entry + for PUBLIC-ID. The corresponding entry will be + output to the command line. + + + + + + + + Stop printing debugging statements. + + + + + + + + Execute a Formal Public Identifier look-up of the catalog entry + for SYSTEM-ID. The corresponding entry will be + output to the command line. + + + + + + + + + ENVIRONMENT + + + + XML_CATALOG_FILES + + XML catalog behavior can be changed by redirecting + queries to the user's own set of catalogs. This can be done by setting + the XML_CATALOG_FILES environment variable to a list + of catalogs. An empty one should deactivate loading the + default /etc/xml/catalog catalog. + + + + + + + + + DIAGNOSTICS + + &xmlcatalog; return codes provide information that can be used when + calling it from scripts. + + + + + 0 + + No error + + + + + 1 + + Failed to remove an entry from the catalog + + + + + 2 + + Failed to save to the catalog, check file permissions + + + + + 3 + + Failed to add an entry to the catalog + + + + + 4 + + Failed to look up an entry in the catalog + + + + + + + + SEE ALSO + + libxml + 3 + + + + More information can be found at + + + + libxml + 3 + web page + + + + + libxml + 3 + catalog support web page + at + + + + James Clark's SGML catalog + page + + + + OASIS XML catalog specification + + + + + + + +
    diff --git a/doc/xmldtd.html b/doc/xmldtd.html new file mode 100644 index 0000000..36333f0 --- /dev/null +++ b/doc/xmldtd.html @@ -0,0 +1,107 @@ + + +Validation & DTDs
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    The XML C parser and toolkit of Gnome

    Validation & DTDs

    Main Menu
    Related links

    Table of Content:

      +
    1. General overview
    2. +
    3. The definition
    4. +
    5. Simple rules +
        +
      1. How to reference a DTD from a document
      2. +
      3. Declaring elements
      4. +
      5. Declaring attributes
      6. +
      +
    6. +
    7. Some examples
    8. +
    9. How to validate
    10. +
    11. Other resources
    12. +

    General overview

    Well what is validation and what is a DTD ?

    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.

    Validation is the process of checking a document against a DTD (more +generally against a set of construction rules).

    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.

    The definition

    The W3C XML Recommendation (Tim Bray's annotated version of +Rev1):

    (unfortunately) all this is inherited from the SGML world, the syntax is +ancient...

    Simple rules

    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.

    How to reference a DTD from a document:

    Assuming the top element of the document is spec and the dtd +is placed in the file mydtd in the subdirectory +dtds of the directory from where the document were loaded:

    <!DOCTYPE spec SYSTEM "dtds/mydtd">

    Notes:

      +
    • The system string is actually an URI-Reference (as defined in RFC 2396) 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.
    • +
    • It is also possible to associate a PUBLIC 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.
    • +
    • 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 + DOCTYPE declaration.
    • +

    Declaring elements:

    The following declares an element spec:

    <!ELEMENT spec (front, body, back?)>

    It also expresses that the spec element contains one front, +one body and one optional back 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 +div1 elements:

    <!ELEMENT div1 (head, (p | list | note)*, div2?)>

    which means div1 contains one head then a series of optional +p, lists and notes and then an +optional div2. And last but not least an element can contain +text:

    <!ELEMENT b (#PCDATA)>

    b contains text or being of mixed content (text and elements +in no particular order):

    <!ELEMENT p (#PCDATA|a|ul|b|i|em)*>

    p can contain text or a, ul, +b, i or em elements in no particular +order.

    Declaring attributes:

    Again the attributes declaration includes their content definition:

    <!ATTLIST termdef name CDATA #IMPLIED>

    means that the element termdef can have a name +attribute containing text (CDATA) and which is optional +(#IMPLIED). The attribute value can also be defined within a +set:

    <!ATTLIST list type (bullets|ordered|glossary) +"ordered">

    means list element have a type attribute with 3 +allowed values "bullets", "ordered" or "glossary" and which default to +"ordered" if the attribute is not explicitly specified.

    The content type of an attribute can be text (CDATA), +anchor/reference/references +(ID/IDREF/IDREFS), entity(ies) +(ENTITY/ENTITIES) or name(s) +(NMTOKEN/NMTOKENS). The following defines that a +chapter element can have an optional id attribute +of type ID, usable for reference from attribute of type +IDREF:

    <!ATTLIST chapter id ID #IMPLIED>

    The last value of an attribute definition can be #REQUIRED +meaning that the attribute has to be given, #IMPLIED +meaning that it is optional, or the default value (possibly prefixed by +#FIXED if it is the only allowed).

    Notes:

      +
    • 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: +
      <!ATTLIST termdef
      +          id      ID      #REQUIRED
      +          name    CDATA   #IMPLIED>
      +

      The previous construct defines both id and + name attributes for the element termdef.

      +
    • +

    Some examples

    The directory test/valid/dtds/ in the libxml2 distribution +contains some complex DTD examples. The example in the file +test/valid/dia.xml shows an XML file where the simple DTD is +directly included within the document.

    How to validate

    The simplest way is to use the xmllint program included with libxml. The +--valid 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:

    xmllint --valid --noout test/valid/REC-xml-19980210.xml

    the -- noout is used to disable output of the resulting tree.

    The --dtdvalid dtd allows validation of the document(s) +against a given DTD.

    Libxml2 exports an API to handle DTDs and validation, check the associated +description.

    Other resources

    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:

    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.

    Daniel Veillard

    diff --git a/doc/xmlio.html b/doc/xmlio.html new file mode 100644 index 0000000..51bb646 --- /dev/null +++ b/doc/xmlio.html @@ -0,0 +1,141 @@ + + +I/O Interfaces
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    The XML C parser and toolkit of Gnome

    I/O Interfaces

    Developer Menu
    API Indexes
    Related links

    Table of Content:

      +
    1. General overview
    2. +
    3. The basic buffer type
    4. +
    5. Input I/O handlers
    6. +
    7. Output I/O handlers
    8. +
    9. The entities loader
    10. +
    11. Example of customized I/O
    12. +

    General overview

    The module xmlIO.h provides +the interfaces to the libxml2 I/O system. This consists of 4 main parts:

      +
    • 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 + xmlGetExternalEntityLoader() and + xmlSetExternalEntityLoader(). Check the + example.
    • +
    • Input I/O buffers which are a commodity structure used by the parser(s) + input layer to handle fetching the information to feed the parser. This + provides buffering and is also a placeholder where the encoding + converters to UTF8 are piggy-backed.
    • +
    • Output I/O buffers are similar to the Input ones and fulfill similar + task but when generating a serialization from a tree.
    • +
    • A mechanism to register sets of I/O callbacks and associate them with + specific naming schemes like the protocol part of the URIs. +

      This affect the default I/O operations and allows to use specific I/O + handlers for certain names.

      +
    • +

    The general mechanism used when loading http://rpmfind.net/xml.html for +example in the HTML parser is the following:

      +
    1. The default entity loader calls xmlNewInputFromFile() with + the parsing context and the URI string.
    2. +
    3. 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
    4. +
    5. the open() function of the handler is called and if successful will + return an I/O Input buffer
    6. +
    7. 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
    8. +
    9. if an encoding change is detected it will be installed on the input + buffer, providing buffering and efficient use of the conversion + routines
    10. +
    11. once the parser has finished, the close() function of the handler is + called once and the Input buffer and associated resources are + deallocated.
    12. +

    The user defined callbacks are checked first to allow overriding of the +default libxml2 I/O routines.

    The basic buffer type

    All the buffer manipulation handling is done using the +xmlBuffer type define in tree.h 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 XML_BUFFER_ALLOC_EXACT and +XML_BUFFER_ALLOC_DOUBLEIT, and can be set individually or on a +system wide basis using xmlBufferSetAllocationScheme(). A number +of functions allows to manipulate buffers with names starting with the +xmlBuffer... prefix.

    Input I/O handlers

    An Input I/O handler is a simple structure +xmlParserInputBuffer 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.

    Output I/O handlers

    An Output handler xmlOutputBuffer is completely similar to an +Input one except the callbacks are write() and close().

    The entities loader

    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).

    If you want to hook up a catalog mechanism then you simply need to +override the default entity loader, here is an example:

    #include <libxml/xmlIO.h>
    +
    +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);
    +
    +    ...
    +}

    Example of customized I/O

    This example come from a +real use case, xmlDocDump() closes the FILE * passed by the application +and this was a problem. The solution was to redefine a +new output handler with the closing call deactivated:

      +
    1. First define a new I/O output allocator where the output don't close + the file: +
      xmlOutputBufferPtr
      +xmlOutputBufferCreateOwn(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 = NULL;  /* No close callback */
      +    }
      +    return(ret);
      +} 
      +
    2. +
    3. And then use it to save the document: +
      FILE *f;
      +xmlOutputBufferPtr output;
      +xmlDocPtr doc;
      +int res;
      +
      +f = ...
      +doc = ....
      +
      +output = xmlOutputBufferCreateOwn(f, NULL);
      +res = xmlSaveFileTo(output, doc, NULL);
      +    
      +
    4. +

    Daniel Veillard

    diff --git a/doc/xmllint.1 b/doc/xmllint.1 new file mode 100644 index 0000000..540a114 --- /dev/null +++ b/doc/xmllint.1 @@ -0,0 +1,647 @@ +'\" t +.\" Title: xmllint +.\" Author: John Fleck +.\" Generator: DocBook XSL Stylesheets v1.78.1 +.\" Date: $Date$ +.\" Manual: xmllint Manual +.\" Source: libxml2 +.\" Language: English +.\" +.TH "XMLLINT" "1" "$Date$" "libxml2" "xmllint Manual" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +xmllint \- command line XML tool +.SH "SYNOPSIS" +.HP \w'\fBxmllint\fR\ 'u +\fBxmllint\fR [\fB\-\-version\fR | \fB\-\-debug\fR | \fB\-\-shell\fR | \fB\-\-xpath\ "\fR\fB\fIXPath_expression\fR\fR\fB"\fR | \fB\-\-debugent\fR | \fB\-\-copy\fR | \fB\-\-recover\fR | \fB\-\-noent\fR | \fB\-\-noout\fR | \fB\-\-nonet\fR | \fB\-\-path\ "\fR\fB\fIPATH(S)\fR\fR\fB"\fR | \fB\-\-load\-trace\fR | \fB\-\-htmlout\fR | \fB\-\-nowrap\fR | \fB\-\-valid\fR | \fB\-\-postvalid\fR | \fB\-\-dtdvalid\ \fR\fB\fIURL\fR\fR | \fB\-\-dtdvalidfpi\ \fR\fB\fIFPI\fR\fR | \fB\-\-timing\fR | \fB\-\-output\ \fR\fB\fIFILE\fR\fR | \fB\-\-repeat\fR | \fB\-\-insert\fR | \fB\-\-compress\fR | \fB\-\-html\fR | \fB\-\-xmlout\fR | \fB\-\-push\fR | \fB\-\-memory\fR | \fB\-\-maxmem\ \fR\fB\fINBBYTES\fR\fR | \fB\-\-nowarning\fR | \fB\-\-noblanks\fR | \fB\-\-nocdata\fR | \fB\-\-format\fR | \fB\-\-encode\ \fR\fB\fIENCODING\fR\fR | \fB\-\-dropdtd\fR | \fB\-\-nsclean\fR | \fB\-\-testIO\fR | \fB\-\-catalogs\fR | \fB\-\-nocatalogs\fR | \fB\-\-auto\fR | \fB\-\-xinclude\fR | \fB\-\-noxincludenode\fR | \fB\-\-loaddtd\fR | \fB\-\-dtdattr\fR | \fB\-\-stream\fR | \fB\-\-walker\fR | \fB\-\-pattern\ \fR\fB\fIPATTERNVALUE\fR\fR | \fB\-\-chkregister\fR | \fB\-\-relaxng\ \fR\fB\fISCHEMA\fR\fR | \fB\-\-schema\ \fR\fB\fISCHEMA\fR\fR | \fB\-\-c14n\fR] {\fIXML\-FILE(S)\fR... | \-} +.HP \w'\fBxmllint\fR\ 'u +\fBxmllint\fR \fB\-\-help\fR +.SH "DESCRIPTION" +.PP +The +\fBxmllint\fR +program parses one or more +XML +files, specified on the command line as +\fIXML\-FILE\fR +(or the standard input if the filename provided is +\fB\-\fR +)\&. It prints various types of output, depending upon the options selected\&. It is useful for detecting errors both in +XML +code and in the +XML +parser itself\&. +.PP +\fBxmllint\fR +is included in +\fBlibxml\fR(3)\&. +.SH "OPTIONS" +.PP +\fBxmllint\fR +accepts the following options (in alphabetical order): +.PP +\fB\-\-auto\fR +.RS 4 +Generate a small document for testing purposes\&. +.RE +.PP +\fB\-\-catalogs\fR +.RS 4 +Use the +SGML +catalog(s) from +\fBSGML_CATALOG_FILES\fR\&. Otherwise +XML +catalogs starting from +/etc/xml/catalog +are used by default\&. +.RE +.PP +\fB\-\-chkregister\fR +.RS 4 +Turn on node registration\&. Useful for developers testing +\fBlibxml\fR(3) +node tracking code\&. +.RE +.PP +\fB\-\-compress\fR +.RS 4 +Turn on +\fBgzip\fR(1) +compression of output\&. +.RE +.PP +\fB\-\-copy\fR +.RS 4 +Test the internal copy implementation\&. +.RE +.PP +\fB\-\-c14n\fR +.RS 4 +Use the W3C +XML +Canonicalisation (C14N) to serialize the result of parsing to +stdout\&. It keeps comments in the result\&. +.RE +.PP +\fB\-\-dtdvalid \fR\fB\fIURL\fR\fR +.RS 4 +Use the +DTD +specified by an +\fIURL\fR +for validation\&. +.RE +.PP +\fB\-\-dtdvalidfpi \fR\fB\fIFPI\fR\fR +.RS 4 +Use the +DTD +specified by a Formal Public Identifier +\fIFPI\fR +for validation, note that this will require a catalog exporting that Formal Public Identifier to work\&. +.RE +.PP +\fB\-\-debug\fR +.RS 4 +Parse a file and output an annotated tree of the in\-memory version of the document\&. +.RE +.PP +\fB\-\-debugent\fR +.RS 4 +Debug the entities defined in the document\&. +.RE +.PP +\fB\-\-dropdtd\fR +.RS 4 +Remove +DTD +from output\&. +.RE +.PP +\fB\-\-dtdattr\fR +.RS 4 +Fetch external +DTD +and populate the tree with inherited attributes\&. +.RE +.PP +\fB\-\-encode \fR\fB\fIENCODING\fR\fR +.RS 4 +Output in the given encoding\&. Note that this works for full document not fragments or result from XPath queries\&. +.RE +.PP +\fB\-\-format\fR +.RS 4 +Reformat and reindent the output\&. The +\fBXMLLINT_INDENT\fR +environment variable controls the indentation\&. The default value is two spaces " ")\&. +.RE +.PP +\fB\-\-help\fR +.RS 4 +Print out a short usage summary for +\fBxmllint\fR\&. +.RE +.PP +\fB\-\-html\fR +.RS 4 +Use the +HTML +parser\&. +.RE +.PP +\fB\-\-htmlout\fR +.RS 4 +Output results as an +HTML +file\&. This causes +\fBxmllint\fR +to output the necessary +HTML +tags surrounding the result tree output so the results can be displayed/viewed in a browser\&. +.RE +.PP +\fB\-\-insert\fR +.RS 4 +Test for valid insertions\&. +.RE +.PP +\fB\-\-loaddtd\fR +.RS 4 +Fetch an external +DTD\&. +.RE +.PP +\fB\-\-load\-trace\fR +.RS 4 +Display all the documents loaded during the processing to +stderr\&. +.RE +.PP +\fB\-\-maxmem \fR\fB\fINNBYTES\fR\fR +.RS 4 +Test the parser memory support\&. +\fINNBYTES\fR +is the maximum number of bytes the library is allowed to allocate\&. This can also be used to make sure batch processing of +XML +files will not exhaust the virtual memory of the server running them\&. +.RE +.PP +\fB\-\-memory\fR +.RS 4 +Parse from memory\&. +.RE +.PP +\fB\-\-noblanks\fR +.RS 4 +Drop ignorable blank spaces\&. +.RE +.PP +\fB\-\-nocatalogs\fR +.RS 4 +Do not use any catalogs\&. +.RE +.PP +\fB\-\-nocdata\fR +.RS 4 +Substitute CDATA section by equivalent text nodes\&. +.RE +.PP +\fB\-\-noent\fR +.RS 4 +Substitute entity values for entity references\&. By default, +\fBxmllint\fR +leaves entity references in place\&. +.RE +.PP +\fB\-\-nonet\fR +.RS 4 +Do not use the Internet to fetch +DTDs or entities\&. +.RE +.PP +\fB\-\-noout\fR +.RS 4 +Suppress output\&. By default, +\fBxmllint\fR +outputs the result tree\&. +.RE +.PP +\fB\-\-nowarning\fR +.RS 4 +Do not emit warnings from the parser and/or validator\&. +.RE +.PP +\fB\-\-nowrap\fR +.RS 4 +Do not output +HTML +doc wrapper\&. +.RE +.PP +\fB\-\-noxincludenode\fR +.RS 4 +Do XInclude processing but do not generate XInclude start and end nodes\&. +.RE +.PP +\fB\-\-nsclean\fR +.RS 4 +Remove redundant namespace declarations\&. +.RE +.PP +\fB\-\-output \fR\fB\fIFILE\fR\fR +.RS 4 +Define a file path where +\fBxmllint\fR +will save the result of parsing\&. Usually the programs build a tree and save it on +stdout, with this option the result +XML +instance will be saved onto a file\&. +.RE +.PP +\fB\-\-path "\fR\fB\fIPATH(S)\fR\fR\fB"\fR +.RS 4 +Use the (space\- or colon\-separated) list of filesystem paths specified by +\fIPATHS\fR +to load +DTDs or entities\&. Enclose space\-separated lists by quotation marks\&. +.RE +.PP +\fB\-\-pattern \fR\fB\fIPATTERNVALUE\fR\fR +.RS 4 +Used to exercise the pattern recognition engine, which can be used with the reader interface to the parser\&. It allows to select some nodes in the document based on an XPath (subset) expression\&. Used for debugging\&. +.RE +.PP +\fB\-\-postvalid\fR +.RS 4 +Validate after parsing has completed\&. +.RE +.PP +\fB\-\-push\fR +.RS 4 +Use the push mode of the parser\&. +.RE +.PP +\fB\-\-recover\fR +.RS 4 +Output any parsable portions of an invalid document\&. +.RE +.PP +\fB\-\-relaxng \fR\fB\fISCHEMA\fR\fR +.RS 4 +Use RelaxNG file named +\fISCHEMA\fR +for validation\&. +.RE +.PP +\fB\-\-repeat\fR +.RS 4 +Repeat 100 times, for timing or profiling\&. +.RE +.PP +\fB\-\-schema \fR\fB\fISCHEMA\fR\fR +.RS 4 +Use a W3C +XML +Schema file named +\fISCHEMA\fR +for validation\&. +.RE +.PP +\fB\-\-shell\fR +.RS 4 +Run a navigating shell\&. Details on available commands in shell mode are below (see +the section called \(lqSHELL COMMANDS\(rq)\&. +.RE +.PP +\fB\-\-xpath "\fR\fB\fIXPath_expression\fR\fR\fB"\fR +.RS 4 +Run an XPath expression given as argument and print the result\&. In case of a nodeset result, each node in the node set is serialized in full in the output\&. In case of an empty node set the "XPath set is empty" result will be shown and an error exit code will be returned\&. +.RE +.PP +\fB\-\-stream\fR +.RS 4 +Use streaming +API +\- useful when used in combination with +\fB\-\-relaxng\fR +or +\fB\-\-valid\fR +options for validation of files that are too large to be held in memory\&. +.RE +.PP +\fB\-\-testIO\fR +.RS 4 +Test user input/output support\&. +.RE +.PP +\fB\-\-timing\fR +.RS 4 +Output information about the time it takes +\fBxmllint\fR +to perform the various steps\&. +.RE +.PP +\fB\-\-valid\fR +.RS 4 +Determine if the document is a valid instance of the included Document Type Definition (DTD)\&. A +DTD +to be validated against also can be specified at the command line using the +\fB\-\-dtdvalid\fR +option\&. By default, +\fBxmllint\fR +also checks to determine if the document is well\-formed\&. +.RE +.PP +\fB\-\-version\fR +.RS 4 +Display the version of +\fBlibxml\fR(3) +used\&. +.RE +.PP +\fB\-\-walker\fR +.RS 4 +Test the walker module, which is a reader interface but for a document tree, instead of using the reader +API +on an unparsed document it works on an existing in\-memory tree\&. Used for debugging\&. +.RE +.PP +\fB\-\-xinclude\fR +.RS 4 +Do XInclude processing\&. +.RE +.PP +\fB\-\-xmlout\fR +.RS 4 +Used in conjunction with +\fB\-\-html\fR\&. Usually when +HTML +is parsed the document is saved with the +HTML +serializer\&. But with this option the resulting document is saved with the +XML +serializer\&. This is primarily used to generate +XHTML +from +HTML +input\&. +.RE +.SH "SHELL COMMANDS" +.PP +\fBxmllint\fR +offers an interactive shell mode invoked with the +\fB\-\-shell\fR +command\&. Available commands in shell mode include (in alphabetical order): +.PP +\fBbase\fR +.RS 4 +Display +XML +base of the node\&. +.RE +.PP +\fBbye\fR +.RS 4 +Leave the shell\&. +.RE +.PP +\fBcat \fR\fB\fINODE\fR\fR +.RS 4 +Display the given node or the current one\&. +.RE +.PP +\fBcd \fR\fB\fIPATH\fR\fR +.RS 4 +Change the current node to the given path (if unique) or root if no argument is given\&. +.RE +.PP +\fBdir \fR\fB\fIPATH\fR\fR +.RS 4 +Dumps information about the node (namespace, attributes, content)\&. +.RE +.PP +\fBdu \fR\fB\fIPATH\fR\fR +.RS 4 +Show the structure of the subtree under the given path or the current node\&. +.RE +.PP +\fBexit\fR +.RS 4 +Leave the shell\&. +.RE +.PP +\fBhelp\fR +.RS 4 +Show this help\&. +.RE +.PP +\fBfree\fR +.RS 4 +Display memory usage\&. +.RE +.PP +\fBload \fR\fB\fIFILENAME\fR\fR +.RS 4 +Load a new document with the given filename\&. +.RE +.PP +\fBls \fR\fB\fIPATH\fR\fR +.RS 4 +List contents of the given path or the current directory\&. +.RE +.PP +\fBpwd\fR +.RS 4 +Display the path to the current node\&. +.RE +.PP +\fBquit\fR +.RS 4 +Leave the shell\&. +.RE +.PP +\fBsave \fR\fB\fIFILENAME\fR\fR +.RS 4 +Save the current document to the given filename or to the original name\&. +.RE +.PP +\fBvalidate\fR +.RS 4 +Check the document for errors\&. +.RE +.PP +\fBwrite \fR\fB\fIFILENAME\fR\fR +.RS 4 +Write the current node to the given filename\&. +.RE +.SH "ENVIRONMENT" +.PP +\fBSGML_CATALOG_FILES\fR +.RS 4 +SGML +catalog behavior can be changed by redirecting queries to the user\*(Aqs own set of catalogs\&. This can be done by setting the +\fBSGML_CATALOG_FILES\fR +environment variable to a list of catalogs\&. An empty one should deactivate loading the default +/etc/sgml/catalog +catalog\&. +.RE +.PP +\fBXML_CATALOG_FILES\fR +.RS 4 +XML +catalog behavior can be changed by redirecting queries to the user\*(Aqs own set of catalogs\&. This can be done by setting the +\fBXML_CATALOG_FILES\fR +environment variable to a list of catalogs\&. An empty one should deactivate loading the default +/etc/xml/catalog +catalog\&. +.RE +.PP +\fBXML_DEBUG_CATALOG\fR +.RS 4 +Setting the environment variable +\fBXML_DEBUG_CATALOG\fR +to +\fInon\-zero\fR +using the +\fBexport\fR +command outputs debugging information related to catalog operations\&. +.RE +.PP +\fBXMLLINT_INDENT\fR +.RS 4 +Setting the environment variable +\fBXMLLINT_INDENT\fR +controls the indentation\&. The default value is two spaces " "\&. +.RE +.SH "DIAGNOSTICS" +.PP +\fBxmllint\fR +return codes provide information that can be used when calling it from scripts\&. +.PP +\fB0\fR +.RS 4 +No error +.RE +.PP +\fB1\fR +.RS 4 +Unclassified +.RE +.PP +\fB2\fR +.RS 4 +Error in +DTD +.RE +.PP +\fB3\fR +.RS 4 +Validation error +.RE +.PP +\fB4\fR +.RS 4 +Validation error +.RE +.PP +\fB5\fR +.RS 4 +Error in schema compilation +.RE +.PP +\fB6\fR +.RS 4 +Error writing output +.RE +.PP +\fB7\fR +.RS 4 +Error in pattern (generated when +\fB\-\-pattern\fR +option is used) +.RE +.PP +\fB8\fR +.RS 4 +Error in Reader registration (generated when +\fB\-\-chkregister\fR +option is used) +.RE +.PP +\fB9\fR +.RS 4 +Out of memory error +.RE +.SH "SEE ALSO" +.PP +\fBlibxml\fR(3) +.PP +More information can be found at +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fBlibxml\fR(3) +web page +\m[blue]\fB\%http://www.xmlsoft.org/\fR\m[] +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +W3C +XSLT +page +\m[blue]\fB\%http://www.w3.org/TR/xslt\fR\m[] +.RE +.sp +.SH "AUTHORS" +.PP +\fBJohn Fleck\fR <\&jfleck@inkstain\&.net\&> +.RS 4 +Author. +.RE +.PP +\fBZiying Sherwin\fR <\&sherwin@nlm\&.nih\&.gov\&> +.RS 4 +Author. +.RE +.PP +\fBHeiko Rupp\fR <\&hwr@pilhuhn\&.de\&> +.RS 4 +Author. +.RE +.SH "COPYRIGHT" +.br +Copyright \(co 2001, 2004 +.br diff --git a/doc/xmllint.html b/doc/xmllint.html new file mode 100644 index 0000000..0a55877 --- /dev/null +++ b/doc/xmllint.html @@ -0,0 +1,175 @@ +xmllint

    Name

    xmllint — command line XML tool

    Synopsis

    xmllint [[--version] | [--debug] | [--shell] | [--debugent] | [--copy] | [--recover] | [--noent] | [--noout] | [--nonet] | [--htmlout] | [--nowrap] | [--valid] | [--postvalid] | [--dtdvalid URL] | [--dtdvalidfpi FPI] | [--timing] | [--output file] | [--repeat] | [--insert] | [--compress] | [--html] | [--xmlout] | [--push] | [--memory] | [--maxmem nbbytes] | [--nowarning] | [--noblanks] | [--nocdata] | [--format] | [--encode encoding] | [--dropdtd] | [--nsclean] | [--testIO] | [--catalogs] | [--nocatalogs] | [--auto] | [--xinclude] | [--noxincludenode] | [--loaddtd] | [--dtdattr] | [--stream] | [--walker] | [--pattern patternvalue] | [--chkregister] | [--relaxng] | [--schema] | [--c14n]] [xmlfile]

    Introduction

    + The xmllint program parses one or more XML files, specified on the + command line as xmlfile. 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. +

    + It is included in libxml2. +

    Options

    --version
    + Display the version of + libxml2 used. +
    --debug
    + Parse a file and output an annotated tree of the + in-memory version of the document. +
    --shell
    + Run a navigating shell. Details on available commands in shell mode + are below. +
    --debugent
    + Debug the entities defined in the document. +
    --copy
    + Test the internal copy implementation. +
    --recover
    + Output any parsable portions of an invalid + document. +
    --noent
    + Substitute entity values for entity + references. By default, xmllint leaves entity + references in place. +
    --nocdata
    + Substitute CDATA section by equivalent text nodes. +
    --nsclean
    + Remove redundant namespace declarations. +
    --noout
    + Suppress output. By default, + xmllint outputs the result tree. +
    --htmlout
    + 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. +
    --nowrap
    + Do not output HTML doc wrapper. +
    --valid
    + 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 --dtdvalid option. By default, + xmllint also checks to determine if the + document is well-formed. +
    --postvalid
    + Validate after parsing is completed. +
    --dtdvalid URL
    + Use the + DTD specified by URL for + validation. +
    --dtdvalidfpi FPI
    + Use the + DTD specified by the Public Identifier + FPI for validation, note that this + will require a Catalog exporting that Public Identifier to work. +
    --timing
    + Output information about the time it takes + xmllint to perform the various steps. +
    --output file
    Define a file path where xmllint will save the result of + parsing. Usually the programs build a tree and save it on stdout, with + this option the result XML instance will be saved onto a file.
    --repeat
    + Repeat 100 times, for timing or profiling. +
    --insert
    + Test for valid insertions. +
    --compress
    + Turn on gzip compression of output. +
    --html
    + Use the HTML parser. +
    --xmlout
    Used in conjunction with --html. Usually + when HTML is parsed the document is saved with the HTML serializer, but with + this option the resulting document is saved with the XML serializer. This is + primarily used to generate XHTML from HTML input.
    --push
    + Use the push mode of the parser. +
    --memory
    + Parse from memory. +
    --maxmem nnbytes
    Test the parser memory + support. nnbytes is the maximum number of bytes the + library is allowed to allocate. This can also be used to make sure batch + processing of XML files will not exhaust the virtual memory of the server + running them.
    --nowarning
    + Do not emit warnings from the parser and/or validator. +
    --noblanks
    + Drop ignorable blank spaces. +
    --format
    + Reformat and reindent the output. The $XMLLINT_INDENT + environment variable controls the indentation (default + value is two spaces " "). +
    --testIO
    + Test user input/output support. +
    --encode encoding
    + Output in the given encoding. +
    --catalogs
    + Use the catalogs from $SGML_CATALOG_FILES. Otherwise /etc/xml/catalog + is used by default. +
    --nocatalogs
    + Do not use any catalogs. +
    --auto
    + Generate a small document for testing purposes. +
    --xinclude
    + Do XInclude processing. +
    --noxincludenode
    + Do XInclude processing but do not generate XInclude start and end + nodes. +
    --loaddtd
    + Fetch external DTD. +
    --dtdattr
    + Fetch external DTD and populate the tree with inherited attributes. +
    --dropdtd
    + Remove DTD from output. +
    --stream
    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.
    --walker
    Test the walker module, which is a reader interface but for a + document tree, instead of using the reader API on an unparsed document it + works on a existing in-memory tree. Used in debugging.
    --chkregister
    Turn on node registration. Useful for developers testing + libxml2 node tracking code.
    --pattern patternvalue
    Used to exercise the pattern recognition engine, which can be + used with the reader interface to the parser. It allows to select some + nodes in the document based on an XPath (subset) expression. Used for + debugging.
    --relaxng schema
    Use RelaxNG file named schema for + validation.
    --schema schema
    Use a W3C XML Schema file named schema for validation.
    + --c14n
    Use the W3C XML Canonicalisation (C14N) to +serialize the result of parsing to stdout. It keeps comments in +the result.

    Shell

    + xmllint offers an interactive shell mode + invoked with the --shell command. Available commands in + shell mode include: +

    base
    + display XML base of the node +
    bye
    + leave shell +
    cat node
    + Display node if given or current node. +
    cd path
    + Change the current node to path (if given + and unique) or root if no argument given. +
    dir path
    + Dumps information about the node (namespace, attributes, content). +
    du path
    + Show the structure of the subtree under path or the current node. +
    exit
    + Leave the shell. +
    help
    + Show this help. +
    free
    + Display memory usage. +
    load name
    + Load a new document with the given name. +
    ls path
    + List contents of path (if given) or the + current directory. +
    pwd
    + Display the path to the current node. +
    quit
    + Leave the shell. +
    save name
    + Saves the current document to name if + given or to the original name. +
    validate
    + Check the document for error. +
    write name
    + Write the current node to the given filename. +

    Catalogs

    Catalog behavior can be changed by redirecting + queries to the user's own set of catalogs. This can be done by setting the + XML_CATALOG_FILES environment variable to a list of + catalogs. An empty one should deactivate loading the default + /etc/xml/catalog default catalog.

    Debugging Catalogs

    Setting the environment variable XML_DEBUG_CATALOG + using the command "export XML_DEBUG_CATALOG=" + outputs debugging information related to catalog operations.

    Error Return Codes

    On the completion of execution, Xmllint + returns the following error codes:

    0
    No error
    1
    Unclassified
    2
    Error in DTD
    3
    Validation error
    4
    Validation error
    5
    Error in schema compilation
    6
    Error writing output
    7
    Error in pattern (generated when + [--pattern] option is used)
    8
    Error in Reader registration (generated when + [--chkregister] option is used)
    9
    Out of memory error
    diff --git a/doc/xmllint.xml b/doc/xmllint.xml new file mode 100644 index 0000000..1008179 --- /dev/null +++ b/doc/xmllint.xml @@ -0,0 +1,930 @@ + + +xmllint"> +]> + + + + + xmllint Manual + libxml2 + + 2001 + 2004 + + + + John + Fleck + +
    + jfleck@inkstain.net +
    +
    +
    + + Ziying + Sherwin + +
    + sherwin@nlm.nih.gov +
    +
    +
    + + Heiko + Rupp + +
    + hwr@pilhuhn.de +
    +
    +
    +
    + + $Date$ + + + +
    + + + xmllint + 1 + + + + xmllint + command line XML tool + + + + + xmllint + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + XML-FILE(S) + - + + + + xmllint + + + + + + DESCRIPTION + + The &xmllint; program parses one or more XML files, + specified on the command line as XML-FILE + (or the standard input if the filename provided + is - ). 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. + + &xmllint; is included in + libxml + 3 + . + + + + OPTIONS + + &xmllint; accepts the following options (in alphabetical order): + + + + + + + + Generate a small document for testing purposes. + + + + + + + + Use the SGML catalog(s) from SGML_CATALOG_FILES. + Otherwise XML catalogs starting + from /etc/xml/catalog are used by default. + + + + + + + + + Turn on node registration. Useful for developers testing + libxml + 3 + node tracking code. + + + + + + + + + Turn on + gzip + 1 + compression of output. + + + + + + + + Test the internal copy implementation. + + + + + + + + Use the W3C XML Canonicalisation (C14N) to + serialize the result of parsing to stdout. + It keeps comments in the result. + + + + + + + + + Use the DTD specified by + an URL for validation. + + + + + + + + + Use the DTD specified by a Formal Public + Identifier FPI for validation, note that this + will require a catalog exporting that Formal Public Identifier to work. + + + + + + + + + Parse a file and output an annotated tree of the + in-memory version of the document. + + + + + + + + Debug the entities defined in the document. + + + + + + + Remove DTD from output. + + + + + + + + Fetch external DTD and populate the tree with + inherited attributes. + + + + + + + + Output in the given encoding. Note that this works for full document not fragments or result from XPath queries. + + + + + + + + Reformat and reindent the output. The XMLLINT_INDENT + environment variable controls the indentation. The default value is two + spaces " "). + + + + + + + + Print out a short usage summary for &xmllint;. + + + + + + + Use the HTML parser. + + + + + + + + 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/viewed in a browser. + + + + + + + + Test for valid insertions. + + + + + + + Fetch an external DTD. + + + + + + + + Display all the documents loaded during the processing + to stderr. + + + + + + + + + Test the parser memory support. NNBYTES + is the maximum number of bytes the library is allowed to allocate. + This can also be used to make sure batch processing + of XML files will not exhaust the virtual memory + of the server running them. + + + + + + + + Parse from memory. + + + + + + + Drop ignorable blank spaces. + + + + + + + Do not use any catalogs. + + + + + + + Substitute CDATA section by equivalent text nodes. + + + + + + + + Substitute entity values for entity references. By default, &xmllint; + leaves entity references in place. + + + + + + + + + Do not use the Internet to fetch DTDs or entities. + + + + + + + + + Suppress output. By default, &xmllint; outputs the result tree. + + + + + + + + Do not emit warnings from the parser and/or validator. + + + + + + + Do not output HTML doc wrapper. + + + + + + + + Do XInclude processing but do not generate XInclude start and end nodes. + + + + + + + + Remove redundant namespace declarations. + + + + + + + + Define a file path where &xmllint; will save the result of parsing. + Usually the programs build a tree and save it + on stdout, with this option + the result XML instance will be saved onto a file. + + + + + + + + + Use the (space- or colon-separated) list of filesystem paths specified + by PATHS to load DTDs or + entities. Enclose space-separated lists by quotation marks. + + + + + + + + + Used to exercise the pattern recognition engine, which can be used + with the reader interface to the parser. It allows to select some + nodes in the document based on an XPath (subset) expression. Used + for debugging. + + + + + + + + Validate after parsing has completed. + + + + + + + Use the push mode of the parser. + + + + + + + Output any parsable portions of an invalid document. + + + + + + + + Use RelaxNG file named SCHEMA + for validation. + + + + + + + + Repeat 100 times, for timing or profiling. + + + + + + + + Use a W3C XML Schema file + named SCHEMA for validation. + + + + + + + + + Run a navigating shell. Details on available commands in shell mode + are below (see ). + + + + + + + + + Run an XPath expression given as argument and print the + result. In case of a nodeset result, each node in the + node set is serialized in full in the output. In case + of an empty node set the "XPath set is empty" result + will be shown and an error exit code will be returned. + + + + + + + + + Use streaming API - useful when used in combination + with or options + for validation of files that are too large to be held in memory. + + + + + + + + Test user input/output support. + + + + + + + + Output information about the time it takes &xmllint; to perform the + various steps. + + + + + + + + + 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 + option. By default, &xmllint; also checks to determine if the + document is well-formed. + + + + + + + + + Display the version of + libxml + 3 + used. + + + + + + + + + Test the walker module, which is a reader interface but for a + document tree, instead of using the reader API on + an unparsed document it works on an existing in-memory tree. Used for + debugging. + + + + + + + + Do XInclude processing. + + + + + + + + Used in conjunction with . Usually + when HTML is parsed the document is saved with + the HTML serializer. But with this option the + resulting document is saved with the XML + serializer. This is primarily used to + generate XHTML from HTML input. + + + + + + + + + SHELL COMMANDS + + &xmllint; offers an interactive shell mode invoked with + the command. Available commands in shell mode + include (in alphabetical order): + + + + + base + + Display XML base of the node. + + + + + bye + + Leave the shell. + + + + + cat NODE + + Display the given node or the current one. + + + + + cd PATH + + + Change the current node to the given path (if unique) or root if no + argument is given. + + + + + + dir PATH + + + Dumps information about the node (namespace, attributes, content). + + + + + + du PATH + + + Show the structure of the subtree under the given path or the current node. + + + + + + exit + + Leave the shell. + + + + + help + + Show this help. + + + + + free + + Display memory usage. + + + + + load FILENAME + + Load a new document with the given filename. + + + + + ls PATH + + List contents of the given path or the current directory. + + + + + pwd + + Display the path to the current node. + + + + + quit + + Leave the shell. + + + + + save FILENAME + + + Save the current document to the given filename or to the original name. + + + + + + + + Check the document for errors. + + + + + write FILENAME + + Write the current node to the given filename. + + + + + + + + ENVIRONMENT + + + + SGML_CATALOG_FILES + + SGML catalog behavior can be changed by redirecting + queries to the user's own set of catalogs. This can be done by setting + the SGML_CATALOG_FILES environment variable to a list + of catalogs. An empty one should deactivate loading the + default /etc/sgml/catalog catalog. + + + + + + XML_CATALOG_FILES + + XML catalog behavior can be changed by redirecting + queries to the user's own set of catalogs. This can be done by setting + the XML_CATALOG_FILES environment variable to a list + of catalogs. An empty one should deactivate loading the + default /etc/xml/catalog catalog. + + + + + + XML_DEBUG_CATALOG + + Setting the environment variable XML_DEBUG_CATALOG + to non-zero using the export + command outputs debugging information related to catalog operations. + + + + + + XMLLINT_INDENT + + Setting the environment variable XMLLINT_INDENT + controls the indentation. The default value is two spaces " ". + + + + + + + + + DIAGNOSTICS + + &xmllint; return codes provide information that can be used when + calling it from scripts. + + + + + + 0 + + No error + + + + + 1 + + Unclassified + + + + + 2 + + Error in DTD + + + + + 3 + + Validation error + + + + + 4 + + Validation error + + + + + 5 + + Error in schema compilation + + + + + 6 + + Error writing output + + + + + 7 + + + Error in pattern (generated when option is used) + + + + + + 8 + + + Error in Reader registration (generated + when option is used) + + + + + + 9 + + Out of memory error + + + + + + + + SEE ALSO + + libxml + 3 + + + + More information can be found at + + + + libxml + 3 + web page + + + + W3C XSLT page + + + + + + +
    diff --git a/doc/xmlmem.html b/doc/xmlmem.html new file mode 100644 index 0000000..ba9e517 --- /dev/null +++ b/doc/xmlmem.html @@ -0,0 +1,122 @@ + + +Memory Management
    Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
    Made with Libxml2 Logo

    The XML C parser and toolkit of Gnome

    Memory Management

    Developer Menu
    API Indexes
    Related links

    Table of Content:

      +
    1. General overview
    2. +
    3. Setting libxml2 set of memory routines
    4. +
    5. Cleaning up after using the library
    6. +
    7. Debugging routines
    8. +
    9. General memory requirements
    10. +
    11. Returning memory to the kernel
    12. +

    General overview

    The module xmlmemory.h +provides the interfaces to the libxml2 memory system:

      +
    • libxml2 does not use the libc memory allocator directly but xmlFree(), + xmlMalloc() and xmlRealloc()
    • +
    • those routines can be reallocated to a specific set of routine, by + default the libc ones i.e. free(), malloc() and realloc()
    • +
    • the xmlmemory.c module includes a set of debugging routine
    • +

    Setting libxml2 set of memory routines

    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:

      +
    • xmlMemGet + () which return the current set of functions in use by the parser
    • +
    • xmlMemSetup() + which allow to set up a new set of memory allocation functions
    • +

    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).

    Cleaning up after using the library

    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 library or any document built with it:

      +
    • xmlCleanupParser + () is a centralized routine to free the library state and data. Note + that it won't deallocate any produced tree if any (use the xmlFreeDoc() + and related routines for this). This should be called only when the library + is not used anymore.
    • +
    • xmlInitParser + () 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
    • +

    Generally xmlCleanupParser() is safe assuming no parsing is ongoing and +no document is still being used, if needed the state will be rebuild at the +next invocation of parser routines (or by xmlInitParser()), but be careful +of the consequences in multithreaded applications.

    Debugging routines

    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:

    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!).

    If the .memdump reports a leak, it displays the allocation function and +also tries to give some information about the content and structure of the +allocated blocks left. This is sufficient in most cases to find the culprit, +but not always. Assuming the allocation problem is reproducible, it is +possible to find more easily:

      +
    1. write down the block number xxxx not allocated
    2. +
    3. export the environment variable XML_MEM_BREAKPOINT=xxxx , the easiest + when using GDB is to simply give the command +

      set environment XML_MEM_BREAKPOINT xxxx

      +

      before running the program.

      +
    4. +
    5. run the program under a debugger and set a breakpoint on + xmlMallocBreakpoint() a specific function called when this precise block + is allocated
    6. +
    7. 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.
    8. +

    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 valgrind 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.

    General memory requirements

    How much libxml2 memory require ? It's hard to tell in average it depends +of a number of things:

      +
    • 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).
    • +
    • 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
    • +
    • If you need to work with fixed memory requirements or don't need the + full DOM tree then using the xmlReader + interface is probably the best way to proceed, it still allows to + validate or operate on subset of the tree if needed.
    • +
    • 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.
    • +

    Returning memory to the kernel

    You may encounter that your process using libxml2 does not have a +reduced memory usage although you freed the trees. This is because +libxml2 allocates memory in a number of small chunks. When freeing one +of those chunks, the OS may decide that giving this little memory back +to the kernel will cause too much overhead and delay the operation. As +all chunks are this small, they get actually freed but not returned to +the kernel. On systems using glibc, there is a function call +"malloc_trim" from malloc.h which does this missing operation (note that +it is allowed to fail). Thus, after freeing your tree you may simply try +"malloc_trim(0);" to really get the memory back. If your OS does not +provide malloc_trim, try searching for a similar function.

    Daniel Veillard

    diff --git a/doc/xmlreader.html b/doc/xmlreader.html new file mode 100644 index 0000000..38608c1 --- /dev/null +++ b/doc/xmlreader.html @@ -0,0 +1,475 @@ + + + + + + + Libxml2 XmlTextReader Interface tutorial + + + +

    Libxml2 XmlTextReader Interface tutorial

    + +

    + +

    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 XmlTextReader +and XmlReader +classes of the C# language.

    + +

    This tutorial will present the key points of this API, and working +examples using both C and the Python bindings:

    + +

    Table of content:

    + + +

    + +

    Introduction: why a new API

    + +

    Libxml2 main API is +tree based, 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 SAX based API, but that version was +designed upon one of the early expat 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.

    + +

    The XmlTextReader +API from C# 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 DOM Core +specification 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.

    + +

    In a nutshell the XmlTextReader API provides a simpler, more standard and +more extensible interface to handle large documents than the existing SAX +version.

    + +

    Walking a simple tree

    + +

    Basically the XmlTextReader API is a forward only tree walking interface. +The basic steps are:

    +
      +
    1. prepare a reader context operating on some input
    2. +
    3. run a loop iterating over all nodes in the document
    4. +
    5. free up the reader context
    6. +
    + +

    Here is a basic C sample doing this:

    +
    #include <libxml/xmlreader.h>
    +
    +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);
    +    }
    +}
    + +

    A few things to notice:

    +
      +
    • the include file needed : libxml/xmlreader.h
    • +
    • the creation of the reader using a filename
    • +
    • the repeated call to xmlTextReaderRead() and how any return value + different from 1 should stop the loop
    • +
    • that a negative return means a parsing error
    • +
    • how xmlFreeTextReader() should be used to free up the resources used by + the reader.
    • +
    + +

    Here is similar code in python for exactly the same processing:

    +
    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)
    + +

    The only things worth adding are that the xmlTextReader +is abstracted as a class like in C# 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.

    + +

    Extracting information for the current node

    + +

    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 +Property is available at the C level as a function taking a single +xmlTextReaderPtr argument whose name is +xmlTextReaderProperty , if the return type is an +xmlChar * string then it must be deallocated with +xmlFree() to avoid leaks. For the Python interface, there is a +Property method to the reader class that can be called on the +instance. The list of the properties is based on the C# +XmlTextReader class set of properties and methods:

    +
      +
    • NodeType: 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.
    • +
    • Name: the qualified + name of the node, equal to (Prefix:)LocalName.
    • +
    • LocalName: the local name of + the node.
    • +
    • Prefix: a shorthand reference to the namespace associated with + the node.
    • +
    • NamespaceUri: the URI defining the namespace associated with + the node.
    • +
    • BaseUri: the base URI of the node. See the XML Base W3C specification.
    • +
    • Depth: the depth of the node in the tree, starts at 0 for the + root node.
    • +
    • HasAttributes: whether the node has attributes.
    • +
    • HasValue: whether the node can have a text value.
    • +
    • Value: provides the text value of the node if present.
    • +
    • IsDefault: whether an Attribute node was generated from the + default value defined in the DTD or schema (unsupported + yet).
    • +
    • XmlLang: the xml:lang scope + within which the node resides.
    • +
    • IsEmptyElement: check if the current node is empty, this is a + bit bizarre in the sense that <a/> will be considered + empty while <a></a> will not.
    • +
    • AttributeCount: provides the number of attributes of the + current node.
    • +
    + +

    Let's look first at a small example to get this in practice by redefining +the processNode() function in the Python example:

    +
    def processNode(reader):
    +    print "%d %d %s %d" % (reader.Depth(), reader.NodeType(),
    +                           reader.Name(), reader.IsEmptyElement())
    + +

    and look at the result of calling streamFile("tst.xml") for various +content of the XML test file.

    + +

    For the minimal document "<doc/>" we get:

    +
    0 1 doc 1
    + +

    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 +"<doc></doc>" instead leads to:

    +
    0 1 doc 0
    +0 15 doc 0
    + +

    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:

    +
    <doc><a/><b>some text</b>
    +<c/></doc>
    + +

    We modifying the processNode() function to also report the node Value:

    +
    def processNode(reader):
    +    print "%d %d %s %d %s" % (reader.Depth(), reader.NodeType(),
    +                              reader.Name(), reader.IsEmptyElement(),
    +                              reader.Value())
    + +

    The result of the test is:

    +
    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
    + +

    There are a few things to note:

    +
      +
    • the increase of the depth value (first row) as children nodes are + explored
    • +
    • the text node child of the b element, of type 3 and its content
    • +
    • the text node containing the line return between elements b and c
    • +
    • that elements have the Value None (or NULL in C)
    • +
    + +

    The equivalent routine for processNode() as used by +xmllint --stream --debug is the following and can be found in +the xmllint.c module in the source distribution:

    +
    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);
    +    }
    +}
    + +

    Extracting information for the attributes

    + +

    The previous examples don't indicate how attributes are processed. The +simple test "<doc a="b"/>" provides the following +result:

    +
    0 1 doc 1 None
    + +

    This proves that attribute nodes are not traversed by default. The +HasAttributes property allow to detect their presence. To check +their content the API has special instructions. Basically two kinds of operations +are possible:

    +
      +
    1. to move the reader to the attribute nodes of the current element, in + that case the cursor is positionned on the attribute node
    2. +
    3. to directly query the element node for the attribute value
    4. +
    + +

    In both case the attribute can be designed either by its position in the +list of attribute (MoveToAttributeNo or GetAttributeNo) or +by their name (and namespace):

    +
      +
    • GetAttributeNo(no): provides the value of the attribute with + the specified index no relative to the containing element.
    • +
    • GetAttribute(name): provides the value of the attribute with + the specified qualified name.
    • +
    • GetAttributeNs(localName, namespaceURI): provides the value of the + attribute with the specified local name and namespace URI.
    • +
    • MoveToAttributeNo(no): moves the position of the current + instance to the attribute with the specified index relative to the + containing element.
    • +
    • MoveToAttribute(name): moves the position of the current + instance to the attribute with the specified qualified name.
    • +
    • MoveToAttributeNs(localName, namespaceURI): moves the position + of the current instance to the attribute with the specified local name + and namespace URI.
    • +
    • MoveToFirstAttribute: moves the position of the current + instance to the first attribute associated with the current node.
    • +
    • MoveToNextAttribute: moves the position of the current + instance to the next attribute associated with the current node.
    • +
    • MoveToElement: moves the position of the current instance to + the node that contains the current Attribute node.
    • +
    + +

    After modifying the processNode() function to show attributes:

    +
    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())
    + +

    The output for the same input document reflects the attribute:

    +
    0 1 doc 1 None
    +-- 1 2 (a) [b]
    + +

    There are a couple of things to note on the attribute processing:

    +
      +
    • Their depth is the one of the carrying element plus one.
    • +
    • Namespace declarations are seen as attributes, as in DOM.
    • +
    + +

    Validating a document

    + +

    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:

    +
      +
    • XML_PARSER_LOADDTD: force loading the DTD (without validating)
    • +
    • XML_PARSER_DEFAULTATTRS: force attribute defaulting (this also imply + loading the DTD)
    • +
    • XML_PARSER_VALIDATE: activate DTD validation (this also imply loading + the DTD)
    • +
    • XML_PARSER_SUBST_ENTITIES: substitute entities on the fly, entity + reference nodes are not generated and are replaced by their expanded + content.
    • +
    • more settings might be added, those were the one available at the 2.5.0 + release...
    • +
    + +

    The GetParserProp() and SetParserProp() methods can then be used to get +and set the values of those parser properties of the reader. For example

    +
    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)
    + +

    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:

    +
    ret = xmlTextReaderSetParserProp(reader, XML_PARSER_VALIDATE, 1)
    + +

    and a return value of 0 indicates success.

    + +

    Entities substitution

    + +

    By default the xmlReader will report entities as such and not replace them +with their content. This default behaviour can however be overriden using:

    + +

    reader.SetParserProp(libxml2.PARSER_SUBST_ENTITIES,1)

    + +

    Relax-NG Validation

    + +

    Introduced in version 2.5.7

    + +

    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.

    + +

    The steps to do so are:

    +
      +
    • create a reader working on a document as usual
    • +
    • before any call to read associate it to a Relax NG schemas, either the + preparsed schemas or the URL to the schemas to use
    • +
    • errors will be reported the usual way, and the validity status can be + obtained using the IsValid() interface of the reader like for DTDs.
    • +
    + +

    Example, assuming the reader has already being created and that the schema +string contains the Relax-NG schemas:

    +
    rngp = libxml2.relaxNGNewMemParserCtxt(schema, len(schema))
    +rngs = rngp.relaxNGParse()
    +reader.RelaxNGSetSchema(rngs)
    +ret = reader.Read()
    +while ret == 1:
    + ret = reader.Read()
    +if ret != 0:
    + print "Error parsing the document"
    +if reader.IsValid() != 1:
    + print "Document failed to validate"

    +
    + +

    See reader6.py in the sources or documentation for a complete +example.

    + +

    Mixing the reader and tree or XPath operations

    + +

    Introduced in version 2.5.7

    + +

    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:

    +
    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;
    + +

    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.

    + +

    Daniel Veillard

    + +

    $Id$

    + +

    + + 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 @@ + + + + + + + + + Daniel Veillard + daniel@veillard.com + http://veillard.com/ + + + libxml2 + + + http://xmlsoft.org/ + + + + + + + + + + + + + + + - + + + + + + + at + + + + + + + diff --git a/elfgcchack.h b/elfgcchack.h new file mode 100644 index 0000000..8c52884 --- /dev/null +++ b/elfgcchack.h @@ -0,0 +1,17808 @@ +/* + * elfgcchack.h: hack by Arjan van de Ven to speed + * up the code when using gcc for call within the library. + * + * Based on the analysis http://people.redhat.com/drepper/dsohowto.pdf + * from Ulrich drepper. Rewritten to be generated from the XML description + * file for libxml2 API + * autogenerated with xsltproc doc/elfgcchack.xsl doc/libxml2-api.xml + */ + +#ifdef IN_LIBXML +#ifdef __GNUC__ +#ifdef PIC +#ifdef linux +#if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || (__GNUC__ > 3) + +#include "libxml/c14n.h" +#include "libxml/catalog.h" +#include "libxml/chvalid.h" +#include "libxml/debugXML.h" +#include "libxml/dict.h" +#include "libxml/DOCBparser.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/nanoftp.h" +#include "libxml/nanohttp.h" +#include "libxml/parser.h" +#include "libxml/parserInternals.h" +#include "libxml/pattern.h" +#include "libxml/relaxng.h" +#include "libxml/SAX2.h" +#include "libxml/SAX.h" +#include "libxml/schemasInternals.h" +#include "libxml/schematron.h" +#include "libxml/threads.h" +#include "libxml/tree.h" +#include "libxml/uri.h" +#include "libxml/valid.h" +#include "libxml/xinclude.h" +#include "libxml/xlink.h" +#include "libxml/xmlautomata.h" +#include "libxml/xmlerror.h" +#include "libxml/xmlexports.h" +#include "libxml/xmlIO.h" +#include "libxml/xmlmemory.h" +#include "libxml/xmlreader.h" +#include "libxml/xmlregexp.h" +#include "libxml/xmlsave.h" +#include "libxml/xmlschemas.h" +#include "libxml/xmlschemastypes.h" +#include "libxml/xmlstring.h" +#include "libxml/xmlunicode.h" +#include "libxml/xmlversion.h" +#include "libxml/xmlwriter.h" +#include "libxml/xpath.h" +#include "libxml/xpathInternals.h" +#include "libxml/xpointer.h" +#include "libxml/xmlmodule.h" + +/* special hot spot not exported ones */ + +#ifdef bottom_globals +#undef __xmlGenericError +extern __typeof (__xmlGenericError) __xmlGenericError __attribute((alias("__xmlGenericError__internal_alias"))); +#else +#ifndef __xmlGenericError +extern __typeof (__xmlGenericError) __xmlGenericError__internal_alias __attribute((visibility("hidden"))); +#define __xmlGenericError __xmlGenericError__internal_alias +#endif +#endif + +#ifdef bottom_globals +#undef __xmlGenericErrorContext +extern __typeof (__xmlGenericErrorContext) __xmlGenericErrorContext __attribute((alias("__xmlGenericErrorContext__internal_alias"))); +#else +#ifndef __xmlGenericErrorContext +extern __typeof (__xmlGenericErrorContext) __xmlGenericErrorContext__internal_alias __attribute((visibility("hidden"))); +#define __xmlGenericErrorContext __xmlGenericErrorContext__internal_alias +#endif +#endif + +/* list generated from libxml2-api.xml */ +#if defined(LIBXML_DOCB_ENABLED) +#ifdef bottom_DOCBparser +#undef docbCreatePushParserCtxt +extern __typeof (docbCreatePushParserCtxt) docbCreatePushParserCtxt __attribute((alias("docbCreatePushParserCtxt__internal_alias"))); +#else +#ifndef docbCreatePushParserCtxt +extern __typeof (docbCreatePushParserCtxt) docbCreatePushParserCtxt__internal_alias __attribute((visibility("hidden"))); +#define docbCreatePushParserCtxt docbCreatePushParserCtxt__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTML_ENABLED) +#ifdef bottom_HTMLparser +#undef htmlAttrAllowed +extern __typeof (htmlAttrAllowed) htmlAttrAllowed __attribute((alias("htmlAttrAllowed__internal_alias"))); +#else +#ifndef htmlAttrAllowed +extern __typeof (htmlAttrAllowed) htmlAttrAllowed__internal_alias __attribute((visibility("hidden"))); +#define htmlAttrAllowed htmlAttrAllowed__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTML_ENABLED) +#ifdef bottom_HTMLparser +#undef htmlAutoCloseTag +extern __typeof (htmlAutoCloseTag) htmlAutoCloseTag __attribute((alias("htmlAutoCloseTag__internal_alias"))); +#else +#ifndef htmlAutoCloseTag +extern __typeof (htmlAutoCloseTag) htmlAutoCloseTag__internal_alias __attribute((visibility("hidden"))); +#define htmlAutoCloseTag htmlAutoCloseTag__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTML_ENABLED) +#ifdef bottom_HTMLparser +#undef htmlCreateFileParserCtxt +extern __typeof (htmlCreateFileParserCtxt) htmlCreateFileParserCtxt __attribute((alias("htmlCreateFileParserCtxt__internal_alias"))); +#else +#ifndef htmlCreateFileParserCtxt +extern __typeof (htmlCreateFileParserCtxt) htmlCreateFileParserCtxt__internal_alias __attribute((visibility("hidden"))); +#define htmlCreateFileParserCtxt htmlCreateFileParserCtxt__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTML_ENABLED) +#ifdef bottom_HTMLparser +#undef htmlCreateMemoryParserCtxt +extern __typeof (htmlCreateMemoryParserCtxt) htmlCreateMemoryParserCtxt __attribute((alias("htmlCreateMemoryParserCtxt__internal_alias"))); +#else +#ifndef htmlCreateMemoryParserCtxt +extern __typeof (htmlCreateMemoryParserCtxt) htmlCreateMemoryParserCtxt__internal_alias __attribute((visibility("hidden"))); +#define htmlCreateMemoryParserCtxt htmlCreateMemoryParserCtxt__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_PUSH_ENABLED) +#ifdef bottom_HTMLparser +#undef htmlCreatePushParserCtxt +extern __typeof (htmlCreatePushParserCtxt) htmlCreatePushParserCtxt __attribute((alias("htmlCreatePushParserCtxt__internal_alias"))); +#else +#ifndef htmlCreatePushParserCtxt +extern __typeof (htmlCreatePushParserCtxt) htmlCreatePushParserCtxt__internal_alias __attribute((visibility("hidden"))); +#define htmlCreatePushParserCtxt htmlCreatePushParserCtxt__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTML_ENABLED) +#ifdef bottom_HTMLparser +#undef htmlCtxtReadDoc +extern __typeof (htmlCtxtReadDoc) htmlCtxtReadDoc __attribute((alias("htmlCtxtReadDoc__internal_alias"))); +#else +#ifndef htmlCtxtReadDoc +extern __typeof (htmlCtxtReadDoc) htmlCtxtReadDoc__internal_alias __attribute((visibility("hidden"))); +#define htmlCtxtReadDoc htmlCtxtReadDoc__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTML_ENABLED) +#ifdef bottom_HTMLparser +#undef htmlCtxtReadFd +extern __typeof (htmlCtxtReadFd) htmlCtxtReadFd __attribute((alias("htmlCtxtReadFd__internal_alias"))); +#else +#ifndef htmlCtxtReadFd +extern __typeof (htmlCtxtReadFd) htmlCtxtReadFd__internal_alias __attribute((visibility("hidden"))); +#define htmlCtxtReadFd htmlCtxtReadFd__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTML_ENABLED) +#ifdef bottom_HTMLparser +#undef htmlCtxtReadFile +extern __typeof (htmlCtxtReadFile) htmlCtxtReadFile __attribute((alias("htmlCtxtReadFile__internal_alias"))); +#else +#ifndef htmlCtxtReadFile +extern __typeof (htmlCtxtReadFile) htmlCtxtReadFile__internal_alias __attribute((visibility("hidden"))); +#define htmlCtxtReadFile htmlCtxtReadFile__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTML_ENABLED) +#ifdef bottom_HTMLparser +#undef htmlCtxtReadIO +extern __typeof (htmlCtxtReadIO) htmlCtxtReadIO __attribute((alias("htmlCtxtReadIO__internal_alias"))); +#else +#ifndef htmlCtxtReadIO +extern __typeof (htmlCtxtReadIO) htmlCtxtReadIO__internal_alias __attribute((visibility("hidden"))); +#define htmlCtxtReadIO htmlCtxtReadIO__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTML_ENABLED) +#ifdef bottom_HTMLparser +#undef htmlCtxtReadMemory +extern __typeof (htmlCtxtReadMemory) htmlCtxtReadMemory __attribute((alias("htmlCtxtReadMemory__internal_alias"))); +#else +#ifndef htmlCtxtReadMemory +extern __typeof (htmlCtxtReadMemory) htmlCtxtReadMemory__internal_alias __attribute((visibility("hidden"))); +#define htmlCtxtReadMemory htmlCtxtReadMemory__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTML_ENABLED) +#ifdef bottom_HTMLparser +#undef htmlCtxtReset +extern __typeof (htmlCtxtReset) htmlCtxtReset __attribute((alias("htmlCtxtReset__internal_alias"))); +#else +#ifndef htmlCtxtReset +extern __typeof (htmlCtxtReset) htmlCtxtReset__internal_alias __attribute((visibility("hidden"))); +#define htmlCtxtReset htmlCtxtReset__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTML_ENABLED) +#ifdef bottom_HTMLparser +#undef htmlCtxtUseOptions +extern __typeof (htmlCtxtUseOptions) htmlCtxtUseOptions __attribute((alias("htmlCtxtUseOptions__internal_alias"))); +#else +#ifndef htmlCtxtUseOptions +extern __typeof (htmlCtxtUseOptions) htmlCtxtUseOptions__internal_alias __attribute((visibility("hidden"))); +#define htmlCtxtUseOptions htmlCtxtUseOptions__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTML_ENABLED) +#ifdef bottom_SAX2 +#undef htmlDefaultSAXHandlerInit +extern __typeof (htmlDefaultSAXHandlerInit) htmlDefaultSAXHandlerInit __attribute((alias("htmlDefaultSAXHandlerInit__internal_alias"))); +#else +#ifndef htmlDefaultSAXHandlerInit +extern __typeof (htmlDefaultSAXHandlerInit) htmlDefaultSAXHandlerInit__internal_alias __attribute((visibility("hidden"))); +#define htmlDefaultSAXHandlerInit htmlDefaultSAXHandlerInit__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_HTMLtree +#undef htmlDocContentDumpFormatOutput +extern __typeof (htmlDocContentDumpFormatOutput) htmlDocContentDumpFormatOutput __attribute((alias("htmlDocContentDumpFormatOutput__internal_alias"))); +#else +#ifndef htmlDocContentDumpFormatOutput +extern __typeof (htmlDocContentDumpFormatOutput) htmlDocContentDumpFormatOutput__internal_alias __attribute((visibility("hidden"))); +#define htmlDocContentDumpFormatOutput htmlDocContentDumpFormatOutput__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_HTMLtree +#undef htmlDocContentDumpOutput +extern __typeof (htmlDocContentDumpOutput) htmlDocContentDumpOutput __attribute((alias("htmlDocContentDumpOutput__internal_alias"))); +#else +#ifndef htmlDocContentDumpOutput +extern __typeof (htmlDocContentDumpOutput) htmlDocContentDumpOutput__internal_alias __attribute((visibility("hidden"))); +#define htmlDocContentDumpOutput htmlDocContentDumpOutput__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_HTMLtree +#undef htmlDocDump +extern __typeof (htmlDocDump) htmlDocDump __attribute((alias("htmlDocDump__internal_alias"))); +#else +#ifndef htmlDocDump +extern __typeof (htmlDocDump) htmlDocDump__internal_alias __attribute((visibility("hidden"))); +#define htmlDocDump htmlDocDump__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_HTMLtree +#undef htmlDocDumpMemory +extern __typeof (htmlDocDumpMemory) htmlDocDumpMemory __attribute((alias("htmlDocDumpMemory__internal_alias"))); +#else +#ifndef htmlDocDumpMemory +extern __typeof (htmlDocDumpMemory) htmlDocDumpMemory__internal_alias __attribute((visibility("hidden"))); +#define htmlDocDumpMemory htmlDocDumpMemory__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_HTMLtree +#undef htmlDocDumpMemoryFormat +extern __typeof (htmlDocDumpMemoryFormat) htmlDocDumpMemoryFormat __attribute((alias("htmlDocDumpMemoryFormat__internal_alias"))); +#else +#ifndef htmlDocDumpMemoryFormat +extern __typeof (htmlDocDumpMemoryFormat) htmlDocDumpMemoryFormat__internal_alias __attribute((visibility("hidden"))); +#define htmlDocDumpMemoryFormat htmlDocDumpMemoryFormat__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTML_ENABLED) +#ifdef bottom_HTMLparser +#undef htmlElementAllowedHere +extern __typeof (htmlElementAllowedHere) htmlElementAllowedHere __attribute((alias("htmlElementAllowedHere__internal_alias"))); +#else +#ifndef htmlElementAllowedHere +extern __typeof (htmlElementAllowedHere) htmlElementAllowedHere__internal_alias __attribute((visibility("hidden"))); +#define htmlElementAllowedHere htmlElementAllowedHere__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTML_ENABLED) +#ifdef bottom_HTMLparser +#undef htmlElementStatusHere +extern __typeof (htmlElementStatusHere) htmlElementStatusHere __attribute((alias("htmlElementStatusHere__internal_alias"))); +#else +#ifndef htmlElementStatusHere +extern __typeof (htmlElementStatusHere) htmlElementStatusHere__internal_alias __attribute((visibility("hidden"))); +#define htmlElementStatusHere htmlElementStatusHere__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTML_ENABLED) +#ifdef bottom_HTMLparser +#undef htmlEncodeEntities +extern __typeof (htmlEncodeEntities) htmlEncodeEntities __attribute((alias("htmlEncodeEntities__internal_alias"))); +#else +#ifndef htmlEncodeEntities +extern __typeof (htmlEncodeEntities) htmlEncodeEntities__internal_alias __attribute((visibility("hidden"))); +#define htmlEncodeEntities htmlEncodeEntities__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTML_ENABLED) +#ifdef bottom_HTMLparser +#undef htmlEntityLookup +extern __typeof (htmlEntityLookup) htmlEntityLookup __attribute((alias("htmlEntityLookup__internal_alias"))); +#else +#ifndef htmlEntityLookup +extern __typeof (htmlEntityLookup) htmlEntityLookup__internal_alias __attribute((visibility("hidden"))); +#define htmlEntityLookup htmlEntityLookup__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTML_ENABLED) +#ifdef bottom_HTMLparser +#undef htmlEntityValueLookup +extern __typeof (htmlEntityValueLookup) htmlEntityValueLookup __attribute((alias("htmlEntityValueLookup__internal_alias"))); +#else +#ifndef htmlEntityValueLookup +extern __typeof (htmlEntityValueLookup) htmlEntityValueLookup__internal_alias __attribute((visibility("hidden"))); +#define htmlEntityValueLookup htmlEntityValueLookup__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTML_ENABLED) +#ifdef bottom_HTMLparser +#undef htmlFreeParserCtxt +extern __typeof (htmlFreeParserCtxt) htmlFreeParserCtxt __attribute((alias("htmlFreeParserCtxt__internal_alias"))); +#else +#ifndef htmlFreeParserCtxt +extern __typeof (htmlFreeParserCtxt) htmlFreeParserCtxt__internal_alias __attribute((visibility("hidden"))); +#define htmlFreeParserCtxt htmlFreeParserCtxt__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTML_ENABLED) +#ifdef bottom_HTMLtree +#undef htmlGetMetaEncoding +extern __typeof (htmlGetMetaEncoding) htmlGetMetaEncoding __attribute((alias("htmlGetMetaEncoding__internal_alias"))); +#else +#ifndef htmlGetMetaEncoding +extern __typeof (htmlGetMetaEncoding) htmlGetMetaEncoding__internal_alias __attribute((visibility("hidden"))); +#define htmlGetMetaEncoding htmlGetMetaEncoding__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTML_ENABLED) +#ifdef bottom_HTMLparser +#undef htmlHandleOmittedElem +extern __typeof (htmlHandleOmittedElem) htmlHandleOmittedElem __attribute((alias("htmlHandleOmittedElem__internal_alias"))); +#else +#ifndef htmlHandleOmittedElem +extern __typeof (htmlHandleOmittedElem) htmlHandleOmittedElem__internal_alias __attribute((visibility("hidden"))); +#define htmlHandleOmittedElem htmlHandleOmittedElem__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTML_ENABLED) +#ifdef bottom_HTMLparser +#undef htmlInitAutoClose +extern __typeof (htmlInitAutoClose) htmlInitAutoClose __attribute((alias("htmlInitAutoClose__internal_alias"))); +#else +#ifndef htmlInitAutoClose +extern __typeof (htmlInitAutoClose) htmlInitAutoClose__internal_alias __attribute((visibility("hidden"))); +#define htmlInitAutoClose htmlInitAutoClose__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTML_ENABLED) +#ifdef bottom_HTMLparser +#undef htmlIsAutoClosed +extern __typeof (htmlIsAutoClosed) htmlIsAutoClosed __attribute((alias("htmlIsAutoClosed__internal_alias"))); +#else +#ifndef htmlIsAutoClosed +extern __typeof (htmlIsAutoClosed) htmlIsAutoClosed__internal_alias __attribute((visibility("hidden"))); +#define htmlIsAutoClosed htmlIsAutoClosed__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTML_ENABLED) +#ifdef bottom_HTMLtree +#undef htmlIsBooleanAttr +extern __typeof (htmlIsBooleanAttr) htmlIsBooleanAttr __attribute((alias("htmlIsBooleanAttr__internal_alias"))); +#else +#ifndef htmlIsBooleanAttr +extern __typeof (htmlIsBooleanAttr) htmlIsBooleanAttr__internal_alias __attribute((visibility("hidden"))); +#define htmlIsBooleanAttr htmlIsBooleanAttr__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTML_ENABLED) +#ifdef bottom_HTMLparser +#undef htmlIsScriptAttribute +extern __typeof (htmlIsScriptAttribute) htmlIsScriptAttribute __attribute((alias("htmlIsScriptAttribute__internal_alias"))); +#else +#ifndef htmlIsScriptAttribute +extern __typeof (htmlIsScriptAttribute) htmlIsScriptAttribute__internal_alias __attribute((visibility("hidden"))); +#define htmlIsScriptAttribute htmlIsScriptAttribute__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTML_ENABLED) +#ifdef bottom_HTMLparser +#undef htmlNewDoc +extern __typeof (htmlNewDoc) htmlNewDoc __attribute((alias("htmlNewDoc__internal_alias"))); +#else +#ifndef htmlNewDoc +extern __typeof (htmlNewDoc) htmlNewDoc__internal_alias __attribute((visibility("hidden"))); +#define htmlNewDoc htmlNewDoc__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTML_ENABLED) +#ifdef bottom_HTMLparser +#undef htmlNewDocNoDtD +extern __typeof (htmlNewDocNoDtD) htmlNewDocNoDtD __attribute((alias("htmlNewDocNoDtD__internal_alias"))); +#else +#ifndef htmlNewDocNoDtD +extern __typeof (htmlNewDocNoDtD) htmlNewDocNoDtD__internal_alias __attribute((visibility("hidden"))); +#define htmlNewDocNoDtD htmlNewDocNoDtD__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTML_ENABLED) +#ifdef bottom_HTMLparser +#undef htmlNewParserCtxt +extern __typeof (htmlNewParserCtxt) htmlNewParserCtxt __attribute((alias("htmlNewParserCtxt__internal_alias"))); +#else +#ifndef htmlNewParserCtxt +extern __typeof (htmlNewParserCtxt) htmlNewParserCtxt__internal_alias __attribute((visibility("hidden"))); +#define htmlNewParserCtxt htmlNewParserCtxt__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_HTMLtree +#undef htmlNodeDump +extern __typeof (htmlNodeDump) htmlNodeDump __attribute((alias("htmlNodeDump__internal_alias"))); +#else +#ifndef htmlNodeDump +extern __typeof (htmlNodeDump) htmlNodeDump__internal_alias __attribute((visibility("hidden"))); +#define htmlNodeDump htmlNodeDump__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_HTMLtree +#undef htmlNodeDumpFile +extern __typeof (htmlNodeDumpFile) htmlNodeDumpFile __attribute((alias("htmlNodeDumpFile__internal_alias"))); +#else +#ifndef htmlNodeDumpFile +extern __typeof (htmlNodeDumpFile) htmlNodeDumpFile__internal_alias __attribute((visibility("hidden"))); +#define htmlNodeDumpFile htmlNodeDumpFile__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_HTMLtree +#undef htmlNodeDumpFileFormat +extern __typeof (htmlNodeDumpFileFormat) htmlNodeDumpFileFormat __attribute((alias("htmlNodeDumpFileFormat__internal_alias"))); +#else +#ifndef htmlNodeDumpFileFormat +extern __typeof (htmlNodeDumpFileFormat) htmlNodeDumpFileFormat__internal_alias __attribute((visibility("hidden"))); +#define htmlNodeDumpFileFormat htmlNodeDumpFileFormat__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_HTMLtree +#undef htmlNodeDumpFormatOutput +extern __typeof (htmlNodeDumpFormatOutput) htmlNodeDumpFormatOutput __attribute((alias("htmlNodeDumpFormatOutput__internal_alias"))); +#else +#ifndef htmlNodeDumpFormatOutput +extern __typeof (htmlNodeDumpFormatOutput) htmlNodeDumpFormatOutput__internal_alias __attribute((visibility("hidden"))); +#define htmlNodeDumpFormatOutput htmlNodeDumpFormatOutput__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_HTMLtree +#undef htmlNodeDumpOutput +extern __typeof (htmlNodeDumpOutput) htmlNodeDumpOutput __attribute((alias("htmlNodeDumpOutput__internal_alias"))); +#else +#ifndef htmlNodeDumpOutput +extern __typeof (htmlNodeDumpOutput) htmlNodeDumpOutput__internal_alias __attribute((visibility("hidden"))); +#define htmlNodeDumpOutput htmlNodeDumpOutput__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTML_ENABLED) +#ifdef bottom_HTMLparser +#undef htmlNodeStatus +extern __typeof (htmlNodeStatus) htmlNodeStatus __attribute((alias("htmlNodeStatus__internal_alias"))); +#else +#ifndef htmlNodeStatus +extern __typeof (htmlNodeStatus) htmlNodeStatus__internal_alias __attribute((visibility("hidden"))); +#define htmlNodeStatus htmlNodeStatus__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTML_ENABLED) +#ifdef bottom_HTMLparser +#undef htmlParseCharRef +extern __typeof (htmlParseCharRef) htmlParseCharRef __attribute((alias("htmlParseCharRef__internal_alias"))); +#else +#ifndef htmlParseCharRef +extern __typeof (htmlParseCharRef) htmlParseCharRef__internal_alias __attribute((visibility("hidden"))); +#define htmlParseCharRef htmlParseCharRef__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_PUSH_ENABLED) +#ifdef bottom_HTMLparser +#undef htmlParseChunk +extern __typeof (htmlParseChunk) htmlParseChunk __attribute((alias("htmlParseChunk__internal_alias"))); +#else +#ifndef htmlParseChunk +extern __typeof (htmlParseChunk) htmlParseChunk__internal_alias __attribute((visibility("hidden"))); +#define htmlParseChunk htmlParseChunk__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTML_ENABLED) +#ifdef bottom_HTMLparser +#undef htmlParseDoc +extern __typeof (htmlParseDoc) htmlParseDoc __attribute((alias("htmlParseDoc__internal_alias"))); +#else +#ifndef htmlParseDoc +extern __typeof (htmlParseDoc) htmlParseDoc__internal_alias __attribute((visibility("hidden"))); +#define htmlParseDoc htmlParseDoc__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTML_ENABLED) +#ifdef bottom_HTMLparser +#undef htmlParseDocument +extern __typeof (htmlParseDocument) htmlParseDocument __attribute((alias("htmlParseDocument__internal_alias"))); +#else +#ifndef htmlParseDocument +extern __typeof (htmlParseDocument) htmlParseDocument__internal_alias __attribute((visibility("hidden"))); +#define htmlParseDocument htmlParseDocument__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTML_ENABLED) +#ifdef bottom_HTMLparser +#undef htmlParseElement +extern __typeof (htmlParseElement) htmlParseElement __attribute((alias("htmlParseElement__internal_alias"))); +#else +#ifndef htmlParseElement +extern __typeof (htmlParseElement) htmlParseElement__internal_alias __attribute((visibility("hidden"))); +#define htmlParseElement htmlParseElement__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTML_ENABLED) +#ifdef bottom_HTMLparser +#undef htmlParseEntityRef +extern __typeof (htmlParseEntityRef) htmlParseEntityRef __attribute((alias("htmlParseEntityRef__internal_alias"))); +#else +#ifndef htmlParseEntityRef +extern __typeof (htmlParseEntityRef) htmlParseEntityRef__internal_alias __attribute((visibility("hidden"))); +#define htmlParseEntityRef htmlParseEntityRef__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTML_ENABLED) +#ifdef bottom_HTMLparser +#undef htmlParseFile +extern __typeof (htmlParseFile) htmlParseFile __attribute((alias("htmlParseFile__internal_alias"))); +#else +#ifndef htmlParseFile +extern __typeof (htmlParseFile) htmlParseFile__internal_alias __attribute((visibility("hidden"))); +#define htmlParseFile htmlParseFile__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTML_ENABLED) +#ifdef bottom_HTMLparser +#undef htmlReadDoc +extern __typeof (htmlReadDoc) htmlReadDoc __attribute((alias("htmlReadDoc__internal_alias"))); +#else +#ifndef htmlReadDoc +extern __typeof (htmlReadDoc) htmlReadDoc__internal_alias __attribute((visibility("hidden"))); +#define htmlReadDoc htmlReadDoc__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTML_ENABLED) +#ifdef bottom_HTMLparser +#undef htmlReadFd +extern __typeof (htmlReadFd) htmlReadFd __attribute((alias("htmlReadFd__internal_alias"))); +#else +#ifndef htmlReadFd +extern __typeof (htmlReadFd) htmlReadFd__internal_alias __attribute((visibility("hidden"))); +#define htmlReadFd htmlReadFd__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTML_ENABLED) +#ifdef bottom_HTMLparser +#undef htmlReadFile +extern __typeof (htmlReadFile) htmlReadFile __attribute((alias("htmlReadFile__internal_alias"))); +#else +#ifndef htmlReadFile +extern __typeof (htmlReadFile) htmlReadFile__internal_alias __attribute((visibility("hidden"))); +#define htmlReadFile htmlReadFile__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTML_ENABLED) +#ifdef bottom_HTMLparser +#undef htmlReadIO +extern __typeof (htmlReadIO) htmlReadIO __attribute((alias("htmlReadIO__internal_alias"))); +#else +#ifndef htmlReadIO +extern __typeof (htmlReadIO) htmlReadIO__internal_alias __attribute((visibility("hidden"))); +#define htmlReadIO htmlReadIO__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTML_ENABLED) +#ifdef bottom_HTMLparser +#undef htmlReadMemory +extern __typeof (htmlReadMemory) htmlReadMemory __attribute((alias("htmlReadMemory__internal_alias"))); +#else +#ifndef htmlReadMemory +extern __typeof (htmlReadMemory) htmlReadMemory__internal_alias __attribute((visibility("hidden"))); +#define htmlReadMemory htmlReadMemory__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTML_ENABLED) +#ifdef bottom_HTMLparser +#undef htmlSAXParseDoc +extern __typeof (htmlSAXParseDoc) htmlSAXParseDoc __attribute((alias("htmlSAXParseDoc__internal_alias"))); +#else +#ifndef htmlSAXParseDoc +extern __typeof (htmlSAXParseDoc) htmlSAXParseDoc__internal_alias __attribute((visibility("hidden"))); +#define htmlSAXParseDoc htmlSAXParseDoc__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTML_ENABLED) +#ifdef bottom_HTMLparser +#undef htmlSAXParseFile +extern __typeof (htmlSAXParseFile) htmlSAXParseFile __attribute((alias("htmlSAXParseFile__internal_alias"))); +#else +#ifndef htmlSAXParseFile +extern __typeof (htmlSAXParseFile) htmlSAXParseFile__internal_alias __attribute((visibility("hidden"))); +#define htmlSAXParseFile htmlSAXParseFile__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_HTMLtree +#undef htmlSaveFile +extern __typeof (htmlSaveFile) htmlSaveFile __attribute((alias("htmlSaveFile__internal_alias"))); +#else +#ifndef htmlSaveFile +extern __typeof (htmlSaveFile) htmlSaveFile__internal_alias __attribute((visibility("hidden"))); +#define htmlSaveFile htmlSaveFile__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_HTMLtree +#undef htmlSaveFileEnc +extern __typeof (htmlSaveFileEnc) htmlSaveFileEnc __attribute((alias("htmlSaveFileEnc__internal_alias"))); +#else +#ifndef htmlSaveFileEnc +extern __typeof (htmlSaveFileEnc) htmlSaveFileEnc__internal_alias __attribute((visibility("hidden"))); +#define htmlSaveFileEnc htmlSaveFileEnc__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_HTMLtree +#undef htmlSaveFileFormat +extern __typeof (htmlSaveFileFormat) htmlSaveFileFormat __attribute((alias("htmlSaveFileFormat__internal_alias"))); +#else +#ifndef htmlSaveFileFormat +extern __typeof (htmlSaveFileFormat) htmlSaveFileFormat__internal_alias __attribute((visibility("hidden"))); +#define htmlSaveFileFormat htmlSaveFileFormat__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTML_ENABLED) +#ifdef bottom_HTMLtree +#undef htmlSetMetaEncoding +extern __typeof (htmlSetMetaEncoding) htmlSetMetaEncoding __attribute((alias("htmlSetMetaEncoding__internal_alias"))); +#else +#ifndef htmlSetMetaEncoding +extern __typeof (htmlSetMetaEncoding) htmlSetMetaEncoding__internal_alias __attribute((visibility("hidden"))); +#define htmlSetMetaEncoding htmlSetMetaEncoding__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTML_ENABLED) +#ifdef bottom_HTMLparser +#undef htmlTagLookup +extern __typeof (htmlTagLookup) htmlTagLookup __attribute((alias("htmlTagLookup__internal_alias"))); +#else +#ifndef htmlTagLookup +extern __typeof (htmlTagLookup) htmlTagLookup__internal_alias __attribute((visibility("hidden"))); +#define htmlTagLookup htmlTagLookup__internal_alias +#endif +#endif +#endif + +#ifdef bottom_parser +#undef inputPop +extern __typeof (inputPop) inputPop __attribute((alias("inputPop__internal_alias"))); +#else +#ifndef inputPop +extern __typeof (inputPop) inputPop__internal_alias __attribute((visibility("hidden"))); +#define inputPop inputPop__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef inputPush +extern __typeof (inputPush) inputPush __attribute((alias("inputPush__internal_alias"))); +#else +#ifndef inputPush +extern __typeof (inputPush) inputPush__internal_alias __attribute((visibility("hidden"))); +#define inputPush inputPush__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef namePop +extern __typeof (namePop) namePop __attribute((alias("namePop__internal_alias"))); +#else +#ifndef namePop +extern __typeof (namePop) namePop__internal_alias __attribute((visibility("hidden"))); +#define namePop namePop__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef namePush +extern __typeof (namePush) namePush __attribute((alias("namePush__internal_alias"))); +#else +#ifndef namePush +extern __typeof (namePush) namePush__internal_alias __attribute((visibility("hidden"))); +#define namePush namePush__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef nodePop +extern __typeof (nodePop) nodePop __attribute((alias("nodePop__internal_alias"))); +#else +#ifndef nodePop +extern __typeof (nodePop) nodePop__internal_alias __attribute((visibility("hidden"))); +#define nodePop nodePop__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef nodePush +extern __typeof (nodePush) nodePush __attribute((alias("nodePush__internal_alias"))); +#else +#ifndef nodePush +extern __typeof (nodePush) nodePush__internal_alias __attribute((visibility("hidden"))); +#define nodePush nodePush__internal_alias +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef valuePop +extern __typeof (valuePop) valuePop __attribute((alias("valuePop__internal_alias"))); +#else +#ifndef valuePop +extern __typeof (valuePop) valuePop__internal_alias __attribute((visibility("hidden"))); +#define valuePop valuePop__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef valuePush +extern __typeof (valuePush) valuePush __attribute((alias("valuePush__internal_alias"))); +#else +#ifndef valuePush +extern __typeof (valuePush) valuePush__internal_alias __attribute((visibility("hidden"))); +#define valuePush valuePush__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_CATALOG_ENABLED) +#ifdef bottom_catalog +#undef xmlACatalogAdd +extern __typeof (xmlACatalogAdd) xmlACatalogAdd __attribute((alias("xmlACatalogAdd__internal_alias"))); +#else +#ifndef xmlACatalogAdd +extern __typeof (xmlACatalogAdd) xmlACatalogAdd__internal_alias __attribute((visibility("hidden"))); +#define xmlACatalogAdd xmlACatalogAdd__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_CATALOG_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_catalog +#undef xmlACatalogDump +extern __typeof (xmlACatalogDump) xmlACatalogDump __attribute((alias("xmlACatalogDump__internal_alias"))); +#else +#ifndef xmlACatalogDump +extern __typeof (xmlACatalogDump) xmlACatalogDump__internal_alias __attribute((visibility("hidden"))); +#define xmlACatalogDump xmlACatalogDump__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_CATALOG_ENABLED) +#ifdef bottom_catalog +#undef xmlACatalogRemove +extern __typeof (xmlACatalogRemove) xmlACatalogRemove __attribute((alias("xmlACatalogRemove__internal_alias"))); +#else +#ifndef xmlACatalogRemove +extern __typeof (xmlACatalogRemove) xmlACatalogRemove__internal_alias __attribute((visibility("hidden"))); +#define xmlACatalogRemove xmlACatalogRemove__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_CATALOG_ENABLED) +#ifdef bottom_catalog +#undef xmlACatalogResolve +extern __typeof (xmlACatalogResolve) xmlACatalogResolve __attribute((alias("xmlACatalogResolve__internal_alias"))); +#else +#ifndef xmlACatalogResolve +extern __typeof (xmlACatalogResolve) xmlACatalogResolve__internal_alias __attribute((visibility("hidden"))); +#define xmlACatalogResolve xmlACatalogResolve__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_CATALOG_ENABLED) +#ifdef bottom_catalog +#undef xmlACatalogResolvePublic +extern __typeof (xmlACatalogResolvePublic) xmlACatalogResolvePublic __attribute((alias("xmlACatalogResolvePublic__internal_alias"))); +#else +#ifndef xmlACatalogResolvePublic +extern __typeof (xmlACatalogResolvePublic) xmlACatalogResolvePublic__internal_alias __attribute((visibility("hidden"))); +#define xmlACatalogResolvePublic xmlACatalogResolvePublic__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_CATALOG_ENABLED) +#ifdef bottom_catalog +#undef xmlACatalogResolveSystem +extern __typeof (xmlACatalogResolveSystem) xmlACatalogResolveSystem __attribute((alias("xmlACatalogResolveSystem__internal_alias"))); +#else +#ifndef xmlACatalogResolveSystem +extern __typeof (xmlACatalogResolveSystem) xmlACatalogResolveSystem__internal_alias __attribute((visibility("hidden"))); +#define xmlACatalogResolveSystem xmlACatalogResolveSystem__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_CATALOG_ENABLED) +#ifdef bottom_catalog +#undef xmlACatalogResolveURI +extern __typeof (xmlACatalogResolveURI) xmlACatalogResolveURI __attribute((alias("xmlACatalogResolveURI__internal_alias"))); +#else +#ifndef xmlACatalogResolveURI +extern __typeof (xmlACatalogResolveURI) xmlACatalogResolveURI__internal_alias __attribute((visibility("hidden"))); +#define xmlACatalogResolveURI xmlACatalogResolveURI__internal_alias +#endif +#endif +#endif + +#ifdef bottom_valid +#undef xmlAddAttributeDecl +extern __typeof (xmlAddAttributeDecl) xmlAddAttributeDecl __attribute((alias("xmlAddAttributeDecl__internal_alias"))); +#else +#ifndef xmlAddAttributeDecl +extern __typeof (xmlAddAttributeDecl) xmlAddAttributeDecl__internal_alias __attribute((visibility("hidden"))); +#define xmlAddAttributeDecl xmlAddAttributeDecl__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlAddChild +extern __typeof (xmlAddChild) xmlAddChild __attribute((alias("xmlAddChild__internal_alias"))); +#else +#ifndef xmlAddChild +extern __typeof (xmlAddChild) xmlAddChild__internal_alias __attribute((visibility("hidden"))); +#define xmlAddChild xmlAddChild__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlAddChildList +extern __typeof (xmlAddChildList) xmlAddChildList __attribute((alias("xmlAddChildList__internal_alias"))); +#else +#ifndef xmlAddChildList +extern __typeof (xmlAddChildList) xmlAddChildList__internal_alias __attribute((visibility("hidden"))); +#define xmlAddChildList xmlAddChildList__internal_alias +#endif +#endif + +#ifdef bottom_entities +#undef xmlAddDocEntity +extern __typeof (xmlAddDocEntity) xmlAddDocEntity __attribute((alias("xmlAddDocEntity__internal_alias"))); +#else +#ifndef xmlAddDocEntity +extern __typeof (xmlAddDocEntity) xmlAddDocEntity__internal_alias __attribute((visibility("hidden"))); +#define xmlAddDocEntity xmlAddDocEntity__internal_alias +#endif +#endif + +#ifdef bottom_entities +#undef xmlAddDtdEntity +extern __typeof (xmlAddDtdEntity) xmlAddDtdEntity __attribute((alias("xmlAddDtdEntity__internal_alias"))); +#else +#ifndef xmlAddDtdEntity +extern __typeof (xmlAddDtdEntity) xmlAddDtdEntity__internal_alias __attribute((visibility("hidden"))); +#define xmlAddDtdEntity xmlAddDtdEntity__internal_alias +#endif +#endif + +#ifdef bottom_valid +#undef xmlAddElementDecl +extern __typeof (xmlAddElementDecl) xmlAddElementDecl __attribute((alias("xmlAddElementDecl__internal_alias"))); +#else +#ifndef xmlAddElementDecl +extern __typeof (xmlAddElementDecl) xmlAddElementDecl__internal_alias __attribute((visibility("hidden"))); +#define xmlAddElementDecl xmlAddElementDecl__internal_alias +#endif +#endif + +#ifdef bottom_encoding +#undef xmlAddEncodingAlias +extern __typeof (xmlAddEncodingAlias) xmlAddEncodingAlias __attribute((alias("xmlAddEncodingAlias__internal_alias"))); +#else +#ifndef xmlAddEncodingAlias +extern __typeof (xmlAddEncodingAlias) xmlAddEncodingAlias__internal_alias __attribute((visibility("hidden"))); +#define xmlAddEncodingAlias xmlAddEncodingAlias__internal_alias +#endif +#endif + +#ifdef bottom_valid +#undef xmlAddID +extern __typeof (xmlAddID) xmlAddID __attribute((alias("xmlAddID__internal_alias"))); +#else +#ifndef xmlAddID +extern __typeof (xmlAddID) xmlAddID__internal_alias __attribute((visibility("hidden"))); +#define xmlAddID xmlAddID__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlAddNextSibling +extern __typeof (xmlAddNextSibling) xmlAddNextSibling __attribute((alias("xmlAddNextSibling__internal_alias"))); +#else +#ifndef xmlAddNextSibling +extern __typeof (xmlAddNextSibling) xmlAddNextSibling__internal_alias __attribute((visibility("hidden"))); +#define xmlAddNextSibling xmlAddNextSibling__internal_alias +#endif +#endif + +#ifdef bottom_valid +#undef xmlAddNotationDecl +extern __typeof (xmlAddNotationDecl) xmlAddNotationDecl __attribute((alias("xmlAddNotationDecl__internal_alias"))); +#else +#ifndef xmlAddNotationDecl +extern __typeof (xmlAddNotationDecl) xmlAddNotationDecl__internal_alias __attribute((visibility("hidden"))); +#define xmlAddNotationDecl xmlAddNotationDecl__internal_alias +#endif +#endif + +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) +#ifdef bottom_tree +#undef xmlAddPrevSibling +extern __typeof (xmlAddPrevSibling) xmlAddPrevSibling __attribute((alias("xmlAddPrevSibling__internal_alias"))); +#else +#ifndef xmlAddPrevSibling +extern __typeof (xmlAddPrevSibling) xmlAddPrevSibling__internal_alias __attribute((visibility("hidden"))); +#define xmlAddPrevSibling xmlAddPrevSibling__internal_alias +#endif +#endif +#endif + +#ifdef bottom_valid +#undef xmlAddRef +extern __typeof (xmlAddRef) xmlAddRef __attribute((alias("xmlAddRef__internal_alias"))); +#else +#ifndef xmlAddRef +extern __typeof (xmlAddRef) xmlAddRef__internal_alias __attribute((visibility("hidden"))); +#define xmlAddRef xmlAddRef__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlAddSibling +extern __typeof (xmlAddSibling) xmlAddSibling __attribute((alias("xmlAddSibling__internal_alias"))); +#else +#ifndef xmlAddSibling +extern __typeof (xmlAddSibling) xmlAddSibling__internal_alias __attribute((visibility("hidden"))); +#define xmlAddSibling xmlAddSibling__internal_alias +#endif +#endif + +#if defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_xmlIO +#undef xmlAllocOutputBuffer +extern __typeof (xmlAllocOutputBuffer) xmlAllocOutputBuffer __attribute((alias("xmlAllocOutputBuffer__internal_alias"))); +#else +#ifndef xmlAllocOutputBuffer +extern __typeof (xmlAllocOutputBuffer) xmlAllocOutputBuffer__internal_alias __attribute((visibility("hidden"))); +#define xmlAllocOutputBuffer xmlAllocOutputBuffer__internal_alias +#endif +#endif +#endif + +#ifdef bottom_xmlIO +#undef xmlAllocParserInputBuffer +extern __typeof (xmlAllocParserInputBuffer) xmlAllocParserInputBuffer __attribute((alias("xmlAllocParserInputBuffer__internal_alias"))); +#else +#ifndef xmlAllocParserInputBuffer +extern __typeof (xmlAllocParserInputBuffer) xmlAllocParserInputBuffer__internal_alias __attribute((visibility("hidden"))); +#define xmlAllocParserInputBuffer xmlAllocParserInputBuffer__internal_alias +#endif +#endif + +#if defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_xmlsave +#undef xmlAttrSerializeTxtContent +extern __typeof (xmlAttrSerializeTxtContent) xmlAttrSerializeTxtContent __attribute((alias("xmlAttrSerializeTxtContent__internal_alias"))); +#else +#ifndef xmlAttrSerializeTxtContent +extern __typeof (xmlAttrSerializeTxtContent) xmlAttrSerializeTxtContent__internal_alias __attribute((visibility("hidden"))); +#define xmlAttrSerializeTxtContent xmlAttrSerializeTxtContent__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED) +#ifdef bottom_xmlregexp +#undef xmlAutomataCompile +extern __typeof (xmlAutomataCompile) xmlAutomataCompile __attribute((alias("xmlAutomataCompile__internal_alias"))); +#else +#ifndef xmlAutomataCompile +extern __typeof (xmlAutomataCompile) xmlAutomataCompile__internal_alias __attribute((visibility("hidden"))); +#define xmlAutomataCompile xmlAutomataCompile__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED) +#ifdef bottom_xmlregexp +#undef xmlAutomataGetInitState +extern __typeof (xmlAutomataGetInitState) xmlAutomataGetInitState __attribute((alias("xmlAutomataGetInitState__internal_alias"))); +#else +#ifndef xmlAutomataGetInitState +extern __typeof (xmlAutomataGetInitState) xmlAutomataGetInitState__internal_alias __attribute((visibility("hidden"))); +#define xmlAutomataGetInitState xmlAutomataGetInitState__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED) +#ifdef bottom_xmlregexp +#undef xmlAutomataIsDeterminist +extern __typeof (xmlAutomataIsDeterminist) xmlAutomataIsDeterminist __attribute((alias("xmlAutomataIsDeterminist__internal_alias"))); +#else +#ifndef xmlAutomataIsDeterminist +extern __typeof (xmlAutomataIsDeterminist) xmlAutomataIsDeterminist__internal_alias __attribute((visibility("hidden"))); +#define xmlAutomataIsDeterminist xmlAutomataIsDeterminist__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED) +#ifdef bottom_xmlregexp +#undef xmlAutomataNewAllTrans +extern __typeof (xmlAutomataNewAllTrans) xmlAutomataNewAllTrans __attribute((alias("xmlAutomataNewAllTrans__internal_alias"))); +#else +#ifndef xmlAutomataNewAllTrans +extern __typeof (xmlAutomataNewAllTrans) xmlAutomataNewAllTrans__internal_alias __attribute((visibility("hidden"))); +#define xmlAutomataNewAllTrans xmlAutomataNewAllTrans__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED) +#ifdef bottom_xmlregexp +#undef xmlAutomataNewCountTrans +extern __typeof (xmlAutomataNewCountTrans) xmlAutomataNewCountTrans __attribute((alias("xmlAutomataNewCountTrans__internal_alias"))); +#else +#ifndef xmlAutomataNewCountTrans +extern __typeof (xmlAutomataNewCountTrans) xmlAutomataNewCountTrans__internal_alias __attribute((visibility("hidden"))); +#define xmlAutomataNewCountTrans xmlAutomataNewCountTrans__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED) +#ifdef bottom_xmlregexp +#undef xmlAutomataNewCountTrans2 +extern __typeof (xmlAutomataNewCountTrans2) xmlAutomataNewCountTrans2 __attribute((alias("xmlAutomataNewCountTrans2__internal_alias"))); +#else +#ifndef xmlAutomataNewCountTrans2 +extern __typeof (xmlAutomataNewCountTrans2) xmlAutomataNewCountTrans2__internal_alias __attribute((visibility("hidden"))); +#define xmlAutomataNewCountTrans2 xmlAutomataNewCountTrans2__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED) +#ifdef bottom_xmlregexp +#undef xmlAutomataNewCountedTrans +extern __typeof (xmlAutomataNewCountedTrans) xmlAutomataNewCountedTrans __attribute((alias("xmlAutomataNewCountedTrans__internal_alias"))); +#else +#ifndef xmlAutomataNewCountedTrans +extern __typeof (xmlAutomataNewCountedTrans) xmlAutomataNewCountedTrans__internal_alias __attribute((visibility("hidden"))); +#define xmlAutomataNewCountedTrans xmlAutomataNewCountedTrans__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED) +#ifdef bottom_xmlregexp +#undef xmlAutomataNewCounter +extern __typeof (xmlAutomataNewCounter) xmlAutomataNewCounter __attribute((alias("xmlAutomataNewCounter__internal_alias"))); +#else +#ifndef xmlAutomataNewCounter +extern __typeof (xmlAutomataNewCounter) xmlAutomataNewCounter__internal_alias __attribute((visibility("hidden"))); +#define xmlAutomataNewCounter xmlAutomataNewCounter__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED) +#ifdef bottom_xmlregexp +#undef xmlAutomataNewCounterTrans +extern __typeof (xmlAutomataNewCounterTrans) xmlAutomataNewCounterTrans __attribute((alias("xmlAutomataNewCounterTrans__internal_alias"))); +#else +#ifndef xmlAutomataNewCounterTrans +extern __typeof (xmlAutomataNewCounterTrans) xmlAutomataNewCounterTrans__internal_alias __attribute((visibility("hidden"))); +#define xmlAutomataNewCounterTrans xmlAutomataNewCounterTrans__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED) +#ifdef bottom_xmlregexp +#undef xmlAutomataNewEpsilon +extern __typeof (xmlAutomataNewEpsilon) xmlAutomataNewEpsilon __attribute((alias("xmlAutomataNewEpsilon__internal_alias"))); +#else +#ifndef xmlAutomataNewEpsilon +extern __typeof (xmlAutomataNewEpsilon) xmlAutomataNewEpsilon__internal_alias __attribute((visibility("hidden"))); +#define xmlAutomataNewEpsilon xmlAutomataNewEpsilon__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED) +#ifdef bottom_xmlregexp +#undef xmlAutomataNewNegTrans +extern __typeof (xmlAutomataNewNegTrans) xmlAutomataNewNegTrans __attribute((alias("xmlAutomataNewNegTrans__internal_alias"))); +#else +#ifndef xmlAutomataNewNegTrans +extern __typeof (xmlAutomataNewNegTrans) xmlAutomataNewNegTrans__internal_alias __attribute((visibility("hidden"))); +#define xmlAutomataNewNegTrans xmlAutomataNewNegTrans__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED) +#ifdef bottom_xmlregexp +#undef xmlAutomataNewOnceTrans +extern __typeof (xmlAutomataNewOnceTrans) xmlAutomataNewOnceTrans __attribute((alias("xmlAutomataNewOnceTrans__internal_alias"))); +#else +#ifndef xmlAutomataNewOnceTrans +extern __typeof (xmlAutomataNewOnceTrans) xmlAutomataNewOnceTrans__internal_alias __attribute((visibility("hidden"))); +#define xmlAutomataNewOnceTrans xmlAutomataNewOnceTrans__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED) +#ifdef bottom_xmlregexp +#undef xmlAutomataNewOnceTrans2 +extern __typeof (xmlAutomataNewOnceTrans2) xmlAutomataNewOnceTrans2 __attribute((alias("xmlAutomataNewOnceTrans2__internal_alias"))); +#else +#ifndef xmlAutomataNewOnceTrans2 +extern __typeof (xmlAutomataNewOnceTrans2) xmlAutomataNewOnceTrans2__internal_alias __attribute((visibility("hidden"))); +#define xmlAutomataNewOnceTrans2 xmlAutomataNewOnceTrans2__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED) +#ifdef bottom_xmlregexp +#undef xmlAutomataNewState +extern __typeof (xmlAutomataNewState) xmlAutomataNewState __attribute((alias("xmlAutomataNewState__internal_alias"))); +#else +#ifndef xmlAutomataNewState +extern __typeof (xmlAutomataNewState) xmlAutomataNewState__internal_alias __attribute((visibility("hidden"))); +#define xmlAutomataNewState xmlAutomataNewState__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED) +#ifdef bottom_xmlregexp +#undef xmlAutomataNewTransition +extern __typeof (xmlAutomataNewTransition) xmlAutomataNewTransition __attribute((alias("xmlAutomataNewTransition__internal_alias"))); +#else +#ifndef xmlAutomataNewTransition +extern __typeof (xmlAutomataNewTransition) xmlAutomataNewTransition__internal_alias __attribute((visibility("hidden"))); +#define xmlAutomataNewTransition xmlAutomataNewTransition__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED) +#ifdef bottom_xmlregexp +#undef xmlAutomataNewTransition2 +extern __typeof (xmlAutomataNewTransition2) xmlAutomataNewTransition2 __attribute((alias("xmlAutomataNewTransition2__internal_alias"))); +#else +#ifndef xmlAutomataNewTransition2 +extern __typeof (xmlAutomataNewTransition2) xmlAutomataNewTransition2__internal_alias __attribute((visibility("hidden"))); +#define xmlAutomataNewTransition2 xmlAutomataNewTransition2__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED) +#ifdef bottom_xmlregexp +#undef xmlAutomataSetFinalState +extern __typeof (xmlAutomataSetFinalState) xmlAutomataSetFinalState __attribute((alias("xmlAutomataSetFinalState__internal_alias"))); +#else +#ifndef xmlAutomataSetFinalState +extern __typeof (xmlAutomataSetFinalState) xmlAutomataSetFinalState__internal_alias __attribute((visibility("hidden"))); +#define xmlAutomataSetFinalState xmlAutomataSetFinalState__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_DEBUG_ENABLED) +#ifdef bottom_debugXML +#undef xmlBoolToText +extern __typeof (xmlBoolToText) xmlBoolToText __attribute((alias("xmlBoolToText__internal_alias"))); +#else +#ifndef xmlBoolToText +extern __typeof (xmlBoolToText) xmlBoolToText__internal_alias __attribute((visibility("hidden"))); +#define xmlBoolToText xmlBoolToText__internal_alias +#endif +#endif +#endif + +#ifdef bottom_buf +#undef xmlBufContent +extern __typeof (xmlBufContent) xmlBufContent __attribute((alias("xmlBufContent__internal_alias"))); +#else +#ifndef xmlBufContent +extern __typeof (xmlBufContent) xmlBufContent__internal_alias __attribute((visibility("hidden"))); +#define xmlBufContent xmlBufContent__internal_alias +#endif +#endif + +#ifdef bottom_buf +#undef xmlBufEnd +extern __typeof (xmlBufEnd) xmlBufEnd __attribute((alias("xmlBufEnd__internal_alias"))); +#else +#ifndef xmlBufEnd +extern __typeof (xmlBufEnd) xmlBufEnd__internal_alias __attribute((visibility("hidden"))); +#define xmlBufEnd xmlBufEnd__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlBufGetNodeContent +extern __typeof (xmlBufGetNodeContent) xmlBufGetNodeContent __attribute((alias("xmlBufGetNodeContent__internal_alias"))); +#else +#ifndef xmlBufGetNodeContent +extern __typeof (xmlBufGetNodeContent) xmlBufGetNodeContent__internal_alias __attribute((visibility("hidden"))); +#define xmlBufGetNodeContent xmlBufGetNodeContent__internal_alias +#endif +#endif + +#if defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_xmlsave +#undef xmlBufNodeDump +extern __typeof (xmlBufNodeDump) xmlBufNodeDump __attribute((alias("xmlBufNodeDump__internal_alias"))); +#else +#ifndef xmlBufNodeDump +extern __typeof (xmlBufNodeDump) xmlBufNodeDump__internal_alias __attribute((visibility("hidden"))); +#define xmlBufNodeDump xmlBufNodeDump__internal_alias +#endif +#endif +#endif + +#ifdef bottom_buf +#undef xmlBufShrink +extern __typeof (xmlBufShrink) xmlBufShrink __attribute((alias("xmlBufShrink__internal_alias"))); +#else +#ifndef xmlBufShrink +extern __typeof (xmlBufShrink) xmlBufShrink__internal_alias __attribute((visibility("hidden"))); +#define xmlBufShrink xmlBufShrink__internal_alias +#endif +#endif + +#ifdef bottom_buf +#undef xmlBufUse +extern __typeof (xmlBufUse) xmlBufUse __attribute((alias("xmlBufUse__internal_alias"))); +#else +#ifndef xmlBufUse +extern __typeof (xmlBufUse) xmlBufUse__internal_alias __attribute((visibility("hidden"))); +#define xmlBufUse xmlBufUse__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlBufferAdd +extern __typeof (xmlBufferAdd) xmlBufferAdd __attribute((alias("xmlBufferAdd__internal_alias"))); +#else +#ifndef xmlBufferAdd +extern __typeof (xmlBufferAdd) xmlBufferAdd__internal_alias __attribute((visibility("hidden"))); +#define xmlBufferAdd xmlBufferAdd__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlBufferAddHead +extern __typeof (xmlBufferAddHead) xmlBufferAddHead __attribute((alias("xmlBufferAddHead__internal_alias"))); +#else +#ifndef xmlBufferAddHead +extern __typeof (xmlBufferAddHead) xmlBufferAddHead__internal_alias __attribute((visibility("hidden"))); +#define xmlBufferAddHead xmlBufferAddHead__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlBufferCCat +extern __typeof (xmlBufferCCat) xmlBufferCCat __attribute((alias("xmlBufferCCat__internal_alias"))); +#else +#ifndef xmlBufferCCat +extern __typeof (xmlBufferCCat) xmlBufferCCat__internal_alias __attribute((visibility("hidden"))); +#define xmlBufferCCat xmlBufferCCat__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlBufferCat +extern __typeof (xmlBufferCat) xmlBufferCat __attribute((alias("xmlBufferCat__internal_alias"))); +#else +#ifndef xmlBufferCat +extern __typeof (xmlBufferCat) xmlBufferCat__internal_alias __attribute((visibility("hidden"))); +#define xmlBufferCat xmlBufferCat__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlBufferContent +extern __typeof (xmlBufferContent) xmlBufferContent __attribute((alias("xmlBufferContent__internal_alias"))); +#else +#ifndef xmlBufferContent +extern __typeof (xmlBufferContent) xmlBufferContent__internal_alias __attribute((visibility("hidden"))); +#define xmlBufferContent xmlBufferContent__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlBufferCreate +extern __typeof (xmlBufferCreate) xmlBufferCreate __attribute((alias("xmlBufferCreate__internal_alias"))); +#else +#ifndef xmlBufferCreate +extern __typeof (xmlBufferCreate) xmlBufferCreate__internal_alias __attribute((visibility("hidden"))); +#define xmlBufferCreate xmlBufferCreate__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlBufferCreateSize +extern __typeof (xmlBufferCreateSize) xmlBufferCreateSize __attribute((alias("xmlBufferCreateSize__internal_alias"))); +#else +#ifndef xmlBufferCreateSize +extern __typeof (xmlBufferCreateSize) xmlBufferCreateSize__internal_alias __attribute((visibility("hidden"))); +#define xmlBufferCreateSize xmlBufferCreateSize__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlBufferCreateStatic +extern __typeof (xmlBufferCreateStatic) xmlBufferCreateStatic __attribute((alias("xmlBufferCreateStatic__internal_alias"))); +#else +#ifndef xmlBufferCreateStatic +extern __typeof (xmlBufferCreateStatic) xmlBufferCreateStatic__internal_alias __attribute((visibility("hidden"))); +#define xmlBufferCreateStatic xmlBufferCreateStatic__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlBufferDetach +extern __typeof (xmlBufferDetach) xmlBufferDetach __attribute((alias("xmlBufferDetach__internal_alias"))); +#else +#ifndef xmlBufferDetach +extern __typeof (xmlBufferDetach) xmlBufferDetach__internal_alias __attribute((visibility("hidden"))); +#define xmlBufferDetach xmlBufferDetach__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlBufferDump +extern __typeof (xmlBufferDump) xmlBufferDump __attribute((alias("xmlBufferDump__internal_alias"))); +#else +#ifndef xmlBufferDump +extern __typeof (xmlBufferDump) xmlBufferDump__internal_alias __attribute((visibility("hidden"))); +#define xmlBufferDump xmlBufferDump__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlBufferEmpty +extern __typeof (xmlBufferEmpty) xmlBufferEmpty __attribute((alias("xmlBufferEmpty__internal_alias"))); +#else +#ifndef xmlBufferEmpty +extern __typeof (xmlBufferEmpty) xmlBufferEmpty__internal_alias __attribute((visibility("hidden"))); +#define xmlBufferEmpty xmlBufferEmpty__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlBufferFree +extern __typeof (xmlBufferFree) xmlBufferFree __attribute((alias("xmlBufferFree__internal_alias"))); +#else +#ifndef xmlBufferFree +extern __typeof (xmlBufferFree) xmlBufferFree__internal_alias __attribute((visibility("hidden"))); +#define xmlBufferFree xmlBufferFree__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlBufferGrow +extern __typeof (xmlBufferGrow) xmlBufferGrow __attribute((alias("xmlBufferGrow__internal_alias"))); +#else +#ifndef xmlBufferGrow +extern __typeof (xmlBufferGrow) xmlBufferGrow__internal_alias __attribute((visibility("hidden"))); +#define xmlBufferGrow xmlBufferGrow__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlBufferLength +extern __typeof (xmlBufferLength) xmlBufferLength __attribute((alias("xmlBufferLength__internal_alias"))); +#else +#ifndef xmlBufferLength +extern __typeof (xmlBufferLength) xmlBufferLength__internal_alias __attribute((visibility("hidden"))); +#define xmlBufferLength xmlBufferLength__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlBufferResize +extern __typeof (xmlBufferResize) xmlBufferResize __attribute((alias("xmlBufferResize__internal_alias"))); +#else +#ifndef xmlBufferResize +extern __typeof (xmlBufferResize) xmlBufferResize__internal_alias __attribute((visibility("hidden"))); +#define xmlBufferResize xmlBufferResize__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlBufferSetAllocationScheme +extern __typeof (xmlBufferSetAllocationScheme) xmlBufferSetAllocationScheme __attribute((alias("xmlBufferSetAllocationScheme__internal_alias"))); +#else +#ifndef xmlBufferSetAllocationScheme +extern __typeof (xmlBufferSetAllocationScheme) xmlBufferSetAllocationScheme__internal_alias __attribute((visibility("hidden"))); +#define xmlBufferSetAllocationScheme xmlBufferSetAllocationScheme__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlBufferShrink +extern __typeof (xmlBufferShrink) xmlBufferShrink __attribute((alias("xmlBufferShrink__internal_alias"))); +#else +#ifndef xmlBufferShrink +extern __typeof (xmlBufferShrink) xmlBufferShrink__internal_alias __attribute((visibility("hidden"))); +#define xmlBufferShrink xmlBufferShrink__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlBufferWriteCHAR +extern __typeof (xmlBufferWriteCHAR) xmlBufferWriteCHAR __attribute((alias("xmlBufferWriteCHAR__internal_alias"))); +#else +#ifndef xmlBufferWriteCHAR +extern __typeof (xmlBufferWriteCHAR) xmlBufferWriteCHAR__internal_alias __attribute((visibility("hidden"))); +#define xmlBufferWriteCHAR xmlBufferWriteCHAR__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlBufferWriteChar +extern __typeof (xmlBufferWriteChar) xmlBufferWriteChar __attribute((alias("xmlBufferWriteChar__internal_alias"))); +#else +#ifndef xmlBufferWriteChar +extern __typeof (xmlBufferWriteChar) xmlBufferWriteChar__internal_alias __attribute((visibility("hidden"))); +#define xmlBufferWriteChar xmlBufferWriteChar__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlBufferWriteQuotedString +extern __typeof (xmlBufferWriteQuotedString) xmlBufferWriteQuotedString __attribute((alias("xmlBufferWriteQuotedString__internal_alias"))); +#else +#ifndef xmlBufferWriteQuotedString +extern __typeof (xmlBufferWriteQuotedString) xmlBufferWriteQuotedString__internal_alias __attribute((visibility("hidden"))); +#define xmlBufferWriteQuotedString xmlBufferWriteQuotedString__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlBuildQName +extern __typeof (xmlBuildQName) xmlBuildQName __attribute((alias("xmlBuildQName__internal_alias"))); +#else +#ifndef xmlBuildQName +extern __typeof (xmlBuildQName) xmlBuildQName__internal_alias __attribute((visibility("hidden"))); +#define xmlBuildQName xmlBuildQName__internal_alias +#endif +#endif + +#ifdef bottom_uri +#undef xmlBuildRelativeURI +extern __typeof (xmlBuildRelativeURI) xmlBuildRelativeURI __attribute((alias("xmlBuildRelativeURI__internal_alias"))); +#else +#ifndef xmlBuildRelativeURI +extern __typeof (xmlBuildRelativeURI) xmlBuildRelativeURI__internal_alias __attribute((visibility("hidden"))); +#define xmlBuildRelativeURI xmlBuildRelativeURI__internal_alias +#endif +#endif + +#ifdef bottom_uri +#undef xmlBuildURI +extern __typeof (xmlBuildURI) xmlBuildURI __attribute((alias("xmlBuildURI__internal_alias"))); +#else +#ifndef xmlBuildURI +extern __typeof (xmlBuildURI) xmlBuildURI__internal_alias __attribute((visibility("hidden"))); +#define xmlBuildURI xmlBuildURI__internal_alias +#endif +#endif + +#ifdef bottom_encoding +#undef xmlByteConsumed +extern __typeof (xmlByteConsumed) xmlByteConsumed __attribute((alias("xmlByteConsumed__internal_alias"))); +#else +#ifndef xmlByteConsumed +extern __typeof (xmlByteConsumed) xmlByteConsumed__internal_alias __attribute((visibility("hidden"))); +#define xmlByteConsumed xmlByteConsumed__internal_alias +#endif +#endif + +#if defined(LIBXML_C14N_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_c14n +#undef xmlC14NDocDumpMemory +extern __typeof (xmlC14NDocDumpMemory) xmlC14NDocDumpMemory __attribute((alias("xmlC14NDocDumpMemory__internal_alias"))); +#else +#ifndef xmlC14NDocDumpMemory +extern __typeof (xmlC14NDocDumpMemory) xmlC14NDocDumpMemory__internal_alias __attribute((visibility("hidden"))); +#define xmlC14NDocDumpMemory xmlC14NDocDumpMemory__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_C14N_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_c14n +#undef xmlC14NDocSave +extern __typeof (xmlC14NDocSave) xmlC14NDocSave __attribute((alias("xmlC14NDocSave__internal_alias"))); +#else +#ifndef xmlC14NDocSave +extern __typeof (xmlC14NDocSave) xmlC14NDocSave__internal_alias __attribute((visibility("hidden"))); +#define xmlC14NDocSave xmlC14NDocSave__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_C14N_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_c14n +#undef xmlC14NDocSaveTo +extern __typeof (xmlC14NDocSaveTo) xmlC14NDocSaveTo __attribute((alias("xmlC14NDocSaveTo__internal_alias"))); +#else +#ifndef xmlC14NDocSaveTo +extern __typeof (xmlC14NDocSaveTo) xmlC14NDocSaveTo__internal_alias __attribute((visibility("hidden"))); +#define xmlC14NDocSaveTo xmlC14NDocSaveTo__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_C14N_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_c14n +#undef xmlC14NExecute +extern __typeof (xmlC14NExecute) xmlC14NExecute __attribute((alias("xmlC14NExecute__internal_alias"))); +#else +#ifndef xmlC14NExecute +extern __typeof (xmlC14NExecute) xmlC14NExecute__internal_alias __attribute((visibility("hidden"))); +#define xmlC14NExecute xmlC14NExecute__internal_alias +#endif +#endif +#endif + +#ifdef bottom_uri +#undef xmlCanonicPath +extern __typeof (xmlCanonicPath) xmlCanonicPath __attribute((alias("xmlCanonicPath__internal_alias"))); +#else +#ifndef xmlCanonicPath +extern __typeof (xmlCanonicPath) xmlCanonicPath__internal_alias __attribute((visibility("hidden"))); +#define xmlCanonicPath xmlCanonicPath__internal_alias +#endif +#endif + +#if defined(LIBXML_CATALOG_ENABLED) +#ifdef bottom_catalog +#undef xmlCatalogAdd +extern __typeof (xmlCatalogAdd) xmlCatalogAdd __attribute((alias("xmlCatalogAdd__internal_alias"))); +#else +#ifndef xmlCatalogAdd +extern __typeof (xmlCatalogAdd) xmlCatalogAdd__internal_alias __attribute((visibility("hidden"))); +#define xmlCatalogAdd xmlCatalogAdd__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_CATALOG_ENABLED) +#ifdef bottom_catalog +#undef xmlCatalogAddLocal +extern __typeof (xmlCatalogAddLocal) xmlCatalogAddLocal __attribute((alias("xmlCatalogAddLocal__internal_alias"))); +#else +#ifndef xmlCatalogAddLocal +extern __typeof (xmlCatalogAddLocal) xmlCatalogAddLocal__internal_alias __attribute((visibility("hidden"))); +#define xmlCatalogAddLocal xmlCatalogAddLocal__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_CATALOG_ENABLED) +#ifdef bottom_catalog +#undef xmlCatalogCleanup +extern __typeof (xmlCatalogCleanup) xmlCatalogCleanup __attribute((alias("xmlCatalogCleanup__internal_alias"))); +#else +#ifndef xmlCatalogCleanup +extern __typeof (xmlCatalogCleanup) xmlCatalogCleanup__internal_alias __attribute((visibility("hidden"))); +#define xmlCatalogCleanup xmlCatalogCleanup__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_CATALOG_ENABLED) +#ifdef bottom_catalog +#undef xmlCatalogConvert +extern __typeof (xmlCatalogConvert) xmlCatalogConvert __attribute((alias("xmlCatalogConvert__internal_alias"))); +#else +#ifndef xmlCatalogConvert +extern __typeof (xmlCatalogConvert) xmlCatalogConvert__internal_alias __attribute((visibility("hidden"))); +#define xmlCatalogConvert xmlCatalogConvert__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_CATALOG_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_catalog +#undef xmlCatalogDump +extern __typeof (xmlCatalogDump) xmlCatalogDump __attribute((alias("xmlCatalogDump__internal_alias"))); +#else +#ifndef xmlCatalogDump +extern __typeof (xmlCatalogDump) xmlCatalogDump__internal_alias __attribute((visibility("hidden"))); +#define xmlCatalogDump xmlCatalogDump__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_CATALOG_ENABLED) +#ifdef bottom_catalog +#undef xmlCatalogFreeLocal +extern __typeof (xmlCatalogFreeLocal) xmlCatalogFreeLocal __attribute((alias("xmlCatalogFreeLocal__internal_alias"))); +#else +#ifndef xmlCatalogFreeLocal +extern __typeof (xmlCatalogFreeLocal) xmlCatalogFreeLocal__internal_alias __attribute((visibility("hidden"))); +#define xmlCatalogFreeLocal xmlCatalogFreeLocal__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_CATALOG_ENABLED) +#ifdef bottom_catalog +#undef xmlCatalogGetDefaults +extern __typeof (xmlCatalogGetDefaults) xmlCatalogGetDefaults __attribute((alias("xmlCatalogGetDefaults__internal_alias"))); +#else +#ifndef xmlCatalogGetDefaults +extern __typeof (xmlCatalogGetDefaults) xmlCatalogGetDefaults__internal_alias __attribute((visibility("hidden"))); +#define xmlCatalogGetDefaults xmlCatalogGetDefaults__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_CATALOG_ENABLED) +#ifdef bottom_catalog +#undef xmlCatalogGetPublic +extern __typeof (xmlCatalogGetPublic) xmlCatalogGetPublic __attribute((alias("xmlCatalogGetPublic__internal_alias"))); +#else +#ifndef xmlCatalogGetPublic +extern __typeof (xmlCatalogGetPublic) xmlCatalogGetPublic__internal_alias __attribute((visibility("hidden"))); +#define xmlCatalogGetPublic xmlCatalogGetPublic__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_CATALOG_ENABLED) +#ifdef bottom_catalog +#undef xmlCatalogGetSystem +extern __typeof (xmlCatalogGetSystem) xmlCatalogGetSystem __attribute((alias("xmlCatalogGetSystem__internal_alias"))); +#else +#ifndef xmlCatalogGetSystem +extern __typeof (xmlCatalogGetSystem) xmlCatalogGetSystem__internal_alias __attribute((visibility("hidden"))); +#define xmlCatalogGetSystem xmlCatalogGetSystem__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_CATALOG_ENABLED) +#ifdef bottom_catalog +#undef xmlCatalogIsEmpty +extern __typeof (xmlCatalogIsEmpty) xmlCatalogIsEmpty __attribute((alias("xmlCatalogIsEmpty__internal_alias"))); +#else +#ifndef xmlCatalogIsEmpty +extern __typeof (xmlCatalogIsEmpty) xmlCatalogIsEmpty__internal_alias __attribute((visibility("hidden"))); +#define xmlCatalogIsEmpty xmlCatalogIsEmpty__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_CATALOG_ENABLED) +#ifdef bottom_catalog +#undef xmlCatalogLocalResolve +extern __typeof (xmlCatalogLocalResolve) xmlCatalogLocalResolve __attribute((alias("xmlCatalogLocalResolve__internal_alias"))); +#else +#ifndef xmlCatalogLocalResolve +extern __typeof (xmlCatalogLocalResolve) xmlCatalogLocalResolve__internal_alias __attribute((visibility("hidden"))); +#define xmlCatalogLocalResolve xmlCatalogLocalResolve__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_CATALOG_ENABLED) +#ifdef bottom_catalog +#undef xmlCatalogLocalResolveURI +extern __typeof (xmlCatalogLocalResolveURI) xmlCatalogLocalResolveURI __attribute((alias("xmlCatalogLocalResolveURI__internal_alias"))); +#else +#ifndef xmlCatalogLocalResolveURI +extern __typeof (xmlCatalogLocalResolveURI) xmlCatalogLocalResolveURI__internal_alias __attribute((visibility("hidden"))); +#define xmlCatalogLocalResolveURI xmlCatalogLocalResolveURI__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_CATALOG_ENABLED) +#ifdef bottom_catalog +#undef xmlCatalogRemove +extern __typeof (xmlCatalogRemove) xmlCatalogRemove __attribute((alias("xmlCatalogRemove__internal_alias"))); +#else +#ifndef xmlCatalogRemove +extern __typeof (xmlCatalogRemove) xmlCatalogRemove__internal_alias __attribute((visibility("hidden"))); +#define xmlCatalogRemove xmlCatalogRemove__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_CATALOG_ENABLED) +#ifdef bottom_catalog +#undef xmlCatalogResolve +extern __typeof (xmlCatalogResolve) xmlCatalogResolve __attribute((alias("xmlCatalogResolve__internal_alias"))); +#else +#ifndef xmlCatalogResolve +extern __typeof (xmlCatalogResolve) xmlCatalogResolve__internal_alias __attribute((visibility("hidden"))); +#define xmlCatalogResolve xmlCatalogResolve__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_CATALOG_ENABLED) +#ifdef bottom_catalog +#undef xmlCatalogResolvePublic +extern __typeof (xmlCatalogResolvePublic) xmlCatalogResolvePublic __attribute((alias("xmlCatalogResolvePublic__internal_alias"))); +#else +#ifndef xmlCatalogResolvePublic +extern __typeof (xmlCatalogResolvePublic) xmlCatalogResolvePublic__internal_alias __attribute((visibility("hidden"))); +#define xmlCatalogResolvePublic xmlCatalogResolvePublic__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_CATALOG_ENABLED) +#ifdef bottom_catalog +#undef xmlCatalogResolveSystem +extern __typeof (xmlCatalogResolveSystem) xmlCatalogResolveSystem __attribute((alias("xmlCatalogResolveSystem__internal_alias"))); +#else +#ifndef xmlCatalogResolveSystem +extern __typeof (xmlCatalogResolveSystem) xmlCatalogResolveSystem__internal_alias __attribute((visibility("hidden"))); +#define xmlCatalogResolveSystem xmlCatalogResolveSystem__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_CATALOG_ENABLED) +#ifdef bottom_catalog +#undef xmlCatalogResolveURI +extern __typeof (xmlCatalogResolveURI) xmlCatalogResolveURI __attribute((alias("xmlCatalogResolveURI__internal_alias"))); +#else +#ifndef xmlCatalogResolveURI +extern __typeof (xmlCatalogResolveURI) xmlCatalogResolveURI__internal_alias __attribute((visibility("hidden"))); +#define xmlCatalogResolveURI xmlCatalogResolveURI__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_CATALOG_ENABLED) +#ifdef bottom_catalog +#undef xmlCatalogSetDebug +extern __typeof (xmlCatalogSetDebug) xmlCatalogSetDebug __attribute((alias("xmlCatalogSetDebug__internal_alias"))); +#else +#ifndef xmlCatalogSetDebug +extern __typeof (xmlCatalogSetDebug) xmlCatalogSetDebug__internal_alias __attribute((visibility("hidden"))); +#define xmlCatalogSetDebug xmlCatalogSetDebug__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_CATALOG_ENABLED) +#ifdef bottom_catalog +#undef xmlCatalogSetDefaultPrefer +extern __typeof (xmlCatalogSetDefaultPrefer) xmlCatalogSetDefaultPrefer __attribute((alias("xmlCatalogSetDefaultPrefer__internal_alias"))); +#else +#ifndef xmlCatalogSetDefaultPrefer +extern __typeof (xmlCatalogSetDefaultPrefer) xmlCatalogSetDefaultPrefer__internal_alias __attribute((visibility("hidden"))); +#define xmlCatalogSetDefaultPrefer xmlCatalogSetDefaultPrefer__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_CATALOG_ENABLED) +#ifdef bottom_catalog +#undef xmlCatalogSetDefaults +extern __typeof (xmlCatalogSetDefaults) xmlCatalogSetDefaults __attribute((alias("xmlCatalogSetDefaults__internal_alias"))); +#else +#ifndef xmlCatalogSetDefaults +extern __typeof (xmlCatalogSetDefaults) xmlCatalogSetDefaults__internal_alias __attribute((visibility("hidden"))); +#define xmlCatalogSetDefaults xmlCatalogSetDefaults__internal_alias +#endif +#endif +#endif + +#ifdef bottom_encoding +#undef xmlCharEncCloseFunc +extern __typeof (xmlCharEncCloseFunc) xmlCharEncCloseFunc __attribute((alias("xmlCharEncCloseFunc__internal_alias"))); +#else +#ifndef xmlCharEncCloseFunc +extern __typeof (xmlCharEncCloseFunc) xmlCharEncCloseFunc__internal_alias __attribute((visibility("hidden"))); +#define xmlCharEncCloseFunc xmlCharEncCloseFunc__internal_alias +#endif +#endif + +#ifdef bottom_encoding +#undef xmlCharEncFirstLine +extern __typeof (xmlCharEncFirstLine) xmlCharEncFirstLine __attribute((alias("xmlCharEncFirstLine__internal_alias"))); +#else +#ifndef xmlCharEncFirstLine +extern __typeof (xmlCharEncFirstLine) xmlCharEncFirstLine__internal_alias __attribute((visibility("hidden"))); +#define xmlCharEncFirstLine xmlCharEncFirstLine__internal_alias +#endif +#endif + +#ifdef bottom_encoding +#undef xmlCharEncInFunc +extern __typeof (xmlCharEncInFunc) xmlCharEncInFunc __attribute((alias("xmlCharEncInFunc__internal_alias"))); +#else +#ifndef xmlCharEncInFunc +extern __typeof (xmlCharEncInFunc) xmlCharEncInFunc__internal_alias __attribute((visibility("hidden"))); +#define xmlCharEncInFunc xmlCharEncInFunc__internal_alias +#endif +#endif + +#ifdef bottom_encoding +#undef xmlCharEncOutFunc +extern __typeof (xmlCharEncOutFunc) xmlCharEncOutFunc __attribute((alias("xmlCharEncOutFunc__internal_alias"))); +#else +#ifndef xmlCharEncOutFunc +extern __typeof (xmlCharEncOutFunc) xmlCharEncOutFunc__internal_alias __attribute((visibility("hidden"))); +#define xmlCharEncOutFunc xmlCharEncOutFunc__internal_alias +#endif +#endif + +#ifdef bottom_chvalid +#undef xmlCharInRange +extern __typeof (xmlCharInRange) xmlCharInRange __attribute((alias("xmlCharInRange__internal_alias"))); +#else +#ifndef xmlCharInRange +extern __typeof (xmlCharInRange) xmlCharInRange__internal_alias __attribute((visibility("hidden"))); +#define xmlCharInRange xmlCharInRange__internal_alias +#endif +#endif + +#ifdef bottom_xmlstring +#undef xmlCharStrdup +extern __typeof (xmlCharStrdup) xmlCharStrdup __attribute((alias("xmlCharStrdup__internal_alias"))); +#else +#ifndef xmlCharStrdup +extern __typeof (xmlCharStrdup) xmlCharStrdup__internal_alias __attribute((visibility("hidden"))); +#define xmlCharStrdup xmlCharStrdup__internal_alias +#endif +#endif + +#ifdef bottom_xmlstring +#undef xmlCharStrndup +extern __typeof (xmlCharStrndup) xmlCharStrndup __attribute((alias("xmlCharStrndup__internal_alias"))); +#else +#ifndef xmlCharStrndup +extern __typeof (xmlCharStrndup) xmlCharStrndup__internal_alias __attribute((visibility("hidden"))); +#define xmlCharStrndup xmlCharStrndup__internal_alias +#endif +#endif + +#ifdef bottom_xmlIO +#undef xmlCheckFilename +extern __typeof (xmlCheckFilename) xmlCheckFilename __attribute((alias("xmlCheckFilename__internal_alias"))); +#else +#ifndef xmlCheckFilename +extern __typeof (xmlCheckFilename) xmlCheckFilename__internal_alias __attribute((visibility("hidden"))); +#define xmlCheckFilename xmlCheckFilename__internal_alias +#endif +#endif + +#ifdef bottom_xmlIO +#undef xmlCheckHTTPInput +extern __typeof (xmlCheckHTTPInput) xmlCheckHTTPInput __attribute((alias("xmlCheckHTTPInput__internal_alias"))); +#else +#ifndef xmlCheckHTTPInput +extern __typeof (xmlCheckHTTPInput) xmlCheckHTTPInput__internal_alias __attribute((visibility("hidden"))); +#define xmlCheckHTTPInput xmlCheckHTTPInput__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef xmlCheckLanguageID +extern __typeof (xmlCheckLanguageID) xmlCheckLanguageID __attribute((alias("xmlCheckLanguageID__internal_alias"))); +#else +#ifndef xmlCheckLanguageID +extern __typeof (xmlCheckLanguageID) xmlCheckLanguageID__internal_alias __attribute((visibility("hidden"))); +#define xmlCheckLanguageID xmlCheckLanguageID__internal_alias +#endif +#endif + +#ifdef bottom_xmlstring +#undef xmlCheckUTF8 +extern __typeof (xmlCheckUTF8) xmlCheckUTF8 __attribute((alias("xmlCheckUTF8__internal_alias"))); +#else +#ifndef xmlCheckUTF8 +extern __typeof (xmlCheckUTF8) xmlCheckUTF8__internal_alias __attribute((visibility("hidden"))); +#define xmlCheckUTF8 xmlCheckUTF8__internal_alias +#endif +#endif + +#ifdef bottom_parserInternals +#undef xmlCheckVersion +extern __typeof (xmlCheckVersion) xmlCheckVersion __attribute((alias("xmlCheckVersion__internal_alias"))); +#else +#ifndef xmlCheckVersion +extern __typeof (xmlCheckVersion) xmlCheckVersion__internal_alias __attribute((visibility("hidden"))); +#define xmlCheckVersion xmlCheckVersion__internal_alias +#endif +#endif + +#if defined(LIBXML_TREE_ENABLED) +#ifdef bottom_tree +#undef xmlChildElementCount +extern __typeof (xmlChildElementCount) xmlChildElementCount __attribute((alias("xmlChildElementCount__internal_alias"))); +#else +#ifndef xmlChildElementCount +extern __typeof (xmlChildElementCount) xmlChildElementCount__internal_alias __attribute((visibility("hidden"))); +#define xmlChildElementCount xmlChildElementCount__internal_alias +#endif +#endif +#endif + +#ifdef bottom_encoding +#undef xmlCleanupCharEncodingHandlers +extern __typeof (xmlCleanupCharEncodingHandlers) xmlCleanupCharEncodingHandlers __attribute((alias("xmlCleanupCharEncodingHandlers__internal_alias"))); +#else +#ifndef xmlCleanupCharEncodingHandlers +extern __typeof (xmlCleanupCharEncodingHandlers) xmlCleanupCharEncodingHandlers__internal_alias __attribute((visibility("hidden"))); +#define xmlCleanupCharEncodingHandlers xmlCleanupCharEncodingHandlers__internal_alias +#endif +#endif + +#ifdef bottom_encoding +#undef xmlCleanupEncodingAliases +extern __typeof (xmlCleanupEncodingAliases) xmlCleanupEncodingAliases __attribute((alias("xmlCleanupEncodingAliases__internal_alias"))); +#else +#ifndef xmlCleanupEncodingAliases +extern __typeof (xmlCleanupEncodingAliases) xmlCleanupEncodingAliases__internal_alias __attribute((visibility("hidden"))); +#define xmlCleanupEncodingAliases xmlCleanupEncodingAliases__internal_alias +#endif +#endif + +#ifdef bottom_globals +#undef xmlCleanupGlobals +extern __typeof (xmlCleanupGlobals) xmlCleanupGlobals __attribute((alias("xmlCleanupGlobals__internal_alias"))); +#else +#ifndef xmlCleanupGlobals +extern __typeof (xmlCleanupGlobals) xmlCleanupGlobals__internal_alias __attribute((visibility("hidden"))); +#define xmlCleanupGlobals xmlCleanupGlobals__internal_alias +#endif +#endif + +#ifdef bottom_xmlIO +#undef xmlCleanupInputCallbacks +extern __typeof (xmlCleanupInputCallbacks) xmlCleanupInputCallbacks __attribute((alias("xmlCleanupInputCallbacks__internal_alias"))); +#else +#ifndef xmlCleanupInputCallbacks +extern __typeof (xmlCleanupInputCallbacks) xmlCleanupInputCallbacks__internal_alias __attribute((visibility("hidden"))); +#define xmlCleanupInputCallbacks xmlCleanupInputCallbacks__internal_alias +#endif +#endif + +#ifdef bottom_xmlmemory +#undef xmlCleanupMemory +extern __typeof (xmlCleanupMemory) xmlCleanupMemory __attribute((alias("xmlCleanupMemory__internal_alias"))); +#else +#ifndef xmlCleanupMemory +extern __typeof (xmlCleanupMemory) xmlCleanupMemory__internal_alias __attribute((visibility("hidden"))); +#define xmlCleanupMemory xmlCleanupMemory__internal_alias +#endif +#endif + +#if defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_xmlIO +#undef xmlCleanupOutputCallbacks +extern __typeof (xmlCleanupOutputCallbacks) xmlCleanupOutputCallbacks __attribute((alias("xmlCleanupOutputCallbacks__internal_alias"))); +#else +#ifndef xmlCleanupOutputCallbacks +extern __typeof (xmlCleanupOutputCallbacks) xmlCleanupOutputCallbacks__internal_alias __attribute((visibility("hidden"))); +#define xmlCleanupOutputCallbacks xmlCleanupOutputCallbacks__internal_alias +#endif +#endif +#endif + +#ifdef bottom_parser +#undef xmlCleanupParser +extern __typeof (xmlCleanupParser) xmlCleanupParser __attribute((alias("xmlCleanupParser__internal_alias"))); +#else +#ifndef xmlCleanupParser +extern __typeof (xmlCleanupParser) xmlCleanupParser__internal_alias __attribute((visibility("hidden"))); +#define xmlCleanupParser xmlCleanupParser__internal_alias +#endif +#endif + +#if defined(LIBXML_LEGACY_ENABLED) +#ifdef bottom_legacy +#undef xmlCleanupPredefinedEntities +extern __typeof (xmlCleanupPredefinedEntities) xmlCleanupPredefinedEntities __attribute((alias("xmlCleanupPredefinedEntities__internal_alias"))); +#else +#ifndef xmlCleanupPredefinedEntities +extern __typeof (xmlCleanupPredefinedEntities) xmlCleanupPredefinedEntities__internal_alias __attribute((visibility("hidden"))); +#define xmlCleanupPredefinedEntities xmlCleanupPredefinedEntities__internal_alias +#endif +#endif +#endif + +#ifdef bottom_threads +#undef xmlCleanupThreads +extern __typeof (xmlCleanupThreads) xmlCleanupThreads __attribute((alias("xmlCleanupThreads__internal_alias"))); +#else +#ifndef xmlCleanupThreads +extern __typeof (xmlCleanupThreads) xmlCleanupThreads__internal_alias __attribute((visibility("hidden"))); +#define xmlCleanupThreads xmlCleanupThreads__internal_alias +#endif +#endif + +#ifdef bottom_parserInternals +#undef xmlClearNodeInfoSeq +extern __typeof (xmlClearNodeInfoSeq) xmlClearNodeInfoSeq __attribute((alias("xmlClearNodeInfoSeq__internal_alias"))); +#else +#ifndef xmlClearNodeInfoSeq +extern __typeof (xmlClearNodeInfoSeq) xmlClearNodeInfoSeq__internal_alias __attribute((visibility("hidden"))); +#define xmlClearNodeInfoSeq xmlClearNodeInfoSeq__internal_alias +#endif +#endif + +#ifdef bottom_parserInternals +#undef xmlClearParserCtxt +extern __typeof (xmlClearParserCtxt) xmlClearParserCtxt __attribute((alias("xmlClearParserCtxt__internal_alias"))); +#else +#ifndef xmlClearParserCtxt +extern __typeof (xmlClearParserCtxt) xmlClearParserCtxt__internal_alias __attribute((visibility("hidden"))); +#define xmlClearParserCtxt xmlClearParserCtxt__internal_alias +#endif +#endif + +#if defined(LIBXML_CATALOG_ENABLED) +#ifdef bottom_catalog +#undef xmlConvertSGMLCatalog +extern __typeof (xmlConvertSGMLCatalog) xmlConvertSGMLCatalog __attribute((alias("xmlConvertSGMLCatalog__internal_alias"))); +#else +#ifndef xmlConvertSGMLCatalog +extern __typeof (xmlConvertSGMLCatalog) xmlConvertSGMLCatalog__internal_alias __attribute((visibility("hidden"))); +#define xmlConvertSGMLCatalog xmlConvertSGMLCatalog__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_TREE_ENABLED) +#ifdef bottom_valid +#undef xmlCopyAttributeTable +extern __typeof (xmlCopyAttributeTable) xmlCopyAttributeTable __attribute((alias("xmlCopyAttributeTable__internal_alias"))); +#else +#ifndef xmlCopyAttributeTable +extern __typeof (xmlCopyAttributeTable) xmlCopyAttributeTable__internal_alias __attribute((visibility("hidden"))); +#define xmlCopyAttributeTable xmlCopyAttributeTable__internal_alias +#endif +#endif +#endif + +#ifdef bottom_parserInternals +#undef xmlCopyChar +extern __typeof (xmlCopyChar) xmlCopyChar __attribute((alias("xmlCopyChar__internal_alias"))); +#else +#ifndef xmlCopyChar +extern __typeof (xmlCopyChar) xmlCopyChar__internal_alias __attribute((visibility("hidden"))); +#define xmlCopyChar xmlCopyChar__internal_alias +#endif +#endif + +#ifdef bottom_parserInternals +#undef xmlCopyCharMultiByte +extern __typeof (xmlCopyCharMultiByte) xmlCopyCharMultiByte __attribute((alias("xmlCopyCharMultiByte__internal_alias"))); +#else +#ifndef xmlCopyCharMultiByte +extern __typeof (xmlCopyCharMultiByte) xmlCopyCharMultiByte__internal_alias __attribute((visibility("hidden"))); +#define xmlCopyCharMultiByte xmlCopyCharMultiByte__internal_alias +#endif +#endif + +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_tree +#undef xmlCopyDoc +extern __typeof (xmlCopyDoc) xmlCopyDoc __attribute((alias("xmlCopyDoc__internal_alias"))); +#else +#ifndef xmlCopyDoc +extern __typeof (xmlCopyDoc) xmlCopyDoc__internal_alias __attribute((visibility("hidden"))); +#define xmlCopyDoc xmlCopyDoc__internal_alias +#endif +#endif +#endif + +#ifdef bottom_valid +#undef xmlCopyDocElementContent +extern __typeof (xmlCopyDocElementContent) xmlCopyDocElementContent __attribute((alias("xmlCopyDocElementContent__internal_alias"))); +#else +#ifndef xmlCopyDocElementContent +extern __typeof (xmlCopyDocElementContent) xmlCopyDocElementContent__internal_alias __attribute((visibility("hidden"))); +#define xmlCopyDocElementContent xmlCopyDocElementContent__internal_alias +#endif +#endif + +#if defined(LIBXML_TREE_ENABLED) +#ifdef bottom_tree +#undef xmlCopyDtd +extern __typeof (xmlCopyDtd) xmlCopyDtd __attribute((alias("xmlCopyDtd__internal_alias"))); +#else +#ifndef xmlCopyDtd +extern __typeof (xmlCopyDtd) xmlCopyDtd__internal_alias __attribute((visibility("hidden"))); +#define xmlCopyDtd xmlCopyDtd__internal_alias +#endif +#endif +#endif + +#ifdef bottom_valid +#undef xmlCopyElementContent +extern __typeof (xmlCopyElementContent) xmlCopyElementContent __attribute((alias("xmlCopyElementContent__internal_alias"))); +#else +#ifndef xmlCopyElementContent +extern __typeof (xmlCopyElementContent) xmlCopyElementContent__internal_alias __attribute((visibility("hidden"))); +#define xmlCopyElementContent xmlCopyElementContent__internal_alias +#endif +#endif + +#if defined(LIBXML_TREE_ENABLED) +#ifdef bottom_valid +#undef xmlCopyElementTable +extern __typeof (xmlCopyElementTable) xmlCopyElementTable __attribute((alias("xmlCopyElementTable__internal_alias"))); +#else +#ifndef xmlCopyElementTable +extern __typeof (xmlCopyElementTable) xmlCopyElementTable__internal_alias __attribute((visibility("hidden"))); +#define xmlCopyElementTable xmlCopyElementTable__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_TREE_ENABLED) +#ifdef bottom_entities +#undef xmlCopyEntitiesTable +extern __typeof (xmlCopyEntitiesTable) xmlCopyEntitiesTable __attribute((alias("xmlCopyEntitiesTable__internal_alias"))); +#else +#ifndef xmlCopyEntitiesTable +extern __typeof (xmlCopyEntitiesTable) xmlCopyEntitiesTable__internal_alias __attribute((visibility("hidden"))); +#define xmlCopyEntitiesTable xmlCopyEntitiesTable__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_TREE_ENABLED) +#ifdef bottom_valid +#undef xmlCopyEnumeration +extern __typeof (xmlCopyEnumeration) xmlCopyEnumeration __attribute((alias("xmlCopyEnumeration__internal_alias"))); +#else +#ifndef xmlCopyEnumeration +extern __typeof (xmlCopyEnumeration) xmlCopyEnumeration__internal_alias __attribute((visibility("hidden"))); +#define xmlCopyEnumeration xmlCopyEnumeration__internal_alias +#endif +#endif +#endif + +#ifdef bottom_error +#undef xmlCopyError +extern __typeof (xmlCopyError) xmlCopyError __attribute((alias("xmlCopyError__internal_alias"))); +#else +#ifndef xmlCopyError +extern __typeof (xmlCopyError) xmlCopyError__internal_alias __attribute((visibility("hidden"))); +#define xmlCopyError xmlCopyError__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlCopyNamespace +extern __typeof (xmlCopyNamespace) xmlCopyNamespace __attribute((alias("xmlCopyNamespace__internal_alias"))); +#else +#ifndef xmlCopyNamespace +extern __typeof (xmlCopyNamespace) xmlCopyNamespace__internal_alias __attribute((visibility("hidden"))); +#define xmlCopyNamespace xmlCopyNamespace__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlCopyNamespaceList +extern __typeof (xmlCopyNamespaceList) xmlCopyNamespaceList __attribute((alias("xmlCopyNamespaceList__internal_alias"))); +#else +#ifndef xmlCopyNamespaceList +extern __typeof (xmlCopyNamespaceList) xmlCopyNamespaceList__internal_alias __attribute((visibility("hidden"))); +#define xmlCopyNamespaceList xmlCopyNamespaceList__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlCopyNode +extern __typeof (xmlCopyNode) xmlCopyNode __attribute((alias("xmlCopyNode__internal_alias"))); +#else +#ifndef xmlCopyNode +extern __typeof (xmlCopyNode) xmlCopyNode__internal_alias __attribute((visibility("hidden"))); +#define xmlCopyNode xmlCopyNode__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlCopyNodeList +extern __typeof (xmlCopyNodeList) xmlCopyNodeList __attribute((alias("xmlCopyNodeList__internal_alias"))); +#else +#ifndef xmlCopyNodeList +extern __typeof (xmlCopyNodeList) xmlCopyNodeList__internal_alias __attribute((visibility("hidden"))); +#define xmlCopyNodeList xmlCopyNodeList__internal_alias +#endif +#endif + +#if defined(LIBXML_TREE_ENABLED) +#ifdef bottom_valid +#undef xmlCopyNotationTable +extern __typeof (xmlCopyNotationTable) xmlCopyNotationTable __attribute((alias("xmlCopyNotationTable__internal_alias"))); +#else +#ifndef xmlCopyNotationTable +extern __typeof (xmlCopyNotationTable) xmlCopyNotationTable__internal_alias __attribute((visibility("hidden"))); +#define xmlCopyNotationTable xmlCopyNotationTable__internal_alias +#endif +#endif +#endif + +#ifdef bottom_tree +#undef xmlCopyProp +extern __typeof (xmlCopyProp) xmlCopyProp __attribute((alias("xmlCopyProp__internal_alias"))); +#else +#ifndef xmlCopyProp +extern __typeof (xmlCopyProp) xmlCopyProp__internal_alias __attribute((visibility("hidden"))); +#define xmlCopyProp xmlCopyProp__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlCopyPropList +extern __typeof (xmlCopyPropList) xmlCopyPropList __attribute((alias("xmlCopyPropList__internal_alias"))); +#else +#ifndef xmlCopyPropList +extern __typeof (xmlCopyPropList) xmlCopyPropList__internal_alias __attribute((visibility("hidden"))); +#define xmlCopyPropList xmlCopyPropList__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef xmlCreateDocParserCtxt +extern __typeof (xmlCreateDocParserCtxt) xmlCreateDocParserCtxt __attribute((alias("xmlCreateDocParserCtxt__internal_alias"))); +#else +#ifndef xmlCreateDocParserCtxt +extern __typeof (xmlCreateDocParserCtxt) xmlCreateDocParserCtxt__internal_alias __attribute((visibility("hidden"))); +#define xmlCreateDocParserCtxt xmlCreateDocParserCtxt__internal_alias +#endif +#endif + +#ifdef bottom_entities +#undef xmlCreateEntitiesTable +extern __typeof (xmlCreateEntitiesTable) xmlCreateEntitiesTable __attribute((alias("xmlCreateEntitiesTable__internal_alias"))); +#else +#ifndef xmlCreateEntitiesTable +extern __typeof (xmlCreateEntitiesTable) xmlCreateEntitiesTable__internal_alias __attribute((visibility("hidden"))); +#define xmlCreateEntitiesTable xmlCreateEntitiesTable__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef xmlCreateEntityParserCtxt +extern __typeof (xmlCreateEntityParserCtxt) xmlCreateEntityParserCtxt __attribute((alias("xmlCreateEntityParserCtxt__internal_alias"))); +#else +#ifndef xmlCreateEntityParserCtxt +extern __typeof (xmlCreateEntityParserCtxt) xmlCreateEntityParserCtxt__internal_alias __attribute((visibility("hidden"))); +#define xmlCreateEntityParserCtxt xmlCreateEntityParserCtxt__internal_alias +#endif +#endif + +#ifdef bottom_valid +#undef xmlCreateEnumeration +extern __typeof (xmlCreateEnumeration) xmlCreateEnumeration __attribute((alias("xmlCreateEnumeration__internal_alias"))); +#else +#ifndef xmlCreateEnumeration +extern __typeof (xmlCreateEnumeration) xmlCreateEnumeration__internal_alias __attribute((visibility("hidden"))); +#define xmlCreateEnumeration xmlCreateEnumeration__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef xmlCreateFileParserCtxt +extern __typeof (xmlCreateFileParserCtxt) xmlCreateFileParserCtxt __attribute((alias("xmlCreateFileParserCtxt__internal_alias"))); +#else +#ifndef xmlCreateFileParserCtxt +extern __typeof (xmlCreateFileParserCtxt) xmlCreateFileParserCtxt__internal_alias __attribute((visibility("hidden"))); +#define xmlCreateFileParserCtxt xmlCreateFileParserCtxt__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef xmlCreateIOParserCtxt +extern __typeof (xmlCreateIOParserCtxt) xmlCreateIOParserCtxt __attribute((alias("xmlCreateIOParserCtxt__internal_alias"))); +#else +#ifndef xmlCreateIOParserCtxt +extern __typeof (xmlCreateIOParserCtxt) xmlCreateIOParserCtxt__internal_alias __attribute((visibility("hidden"))); +#define xmlCreateIOParserCtxt xmlCreateIOParserCtxt__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlCreateIntSubset +extern __typeof (xmlCreateIntSubset) xmlCreateIntSubset __attribute((alias("xmlCreateIntSubset__internal_alias"))); +#else +#ifndef xmlCreateIntSubset +extern __typeof (xmlCreateIntSubset) xmlCreateIntSubset__internal_alias __attribute((visibility("hidden"))); +#define xmlCreateIntSubset xmlCreateIntSubset__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef xmlCreateMemoryParserCtxt +extern __typeof (xmlCreateMemoryParserCtxt) xmlCreateMemoryParserCtxt __attribute((alias("xmlCreateMemoryParserCtxt__internal_alias"))); +#else +#ifndef xmlCreateMemoryParserCtxt +extern __typeof (xmlCreateMemoryParserCtxt) xmlCreateMemoryParserCtxt__internal_alias __attribute((visibility("hidden"))); +#define xmlCreateMemoryParserCtxt xmlCreateMemoryParserCtxt__internal_alias +#endif +#endif + +#if defined(LIBXML_PUSH_ENABLED) +#ifdef bottom_parser +#undef xmlCreatePushParserCtxt +extern __typeof (xmlCreatePushParserCtxt) xmlCreatePushParserCtxt __attribute((alias("xmlCreatePushParserCtxt__internal_alias"))); +#else +#ifndef xmlCreatePushParserCtxt +extern __typeof (xmlCreatePushParserCtxt) xmlCreatePushParserCtxt__internal_alias __attribute((visibility("hidden"))); +#define xmlCreatePushParserCtxt xmlCreatePushParserCtxt__internal_alias +#endif +#endif +#endif + +#ifdef bottom_uri +#undef xmlCreateURI +extern __typeof (xmlCreateURI) xmlCreateURI __attribute((alias("xmlCreateURI__internal_alias"))); +#else +#ifndef xmlCreateURI +extern __typeof (xmlCreateURI) xmlCreateURI__internal_alias __attribute((visibility("hidden"))); +#define xmlCreateURI xmlCreateURI__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef xmlCreateURLParserCtxt +extern __typeof (xmlCreateURLParserCtxt) xmlCreateURLParserCtxt __attribute((alias("xmlCreateURLParserCtxt__internal_alias"))); +#else +#ifndef xmlCreateURLParserCtxt +extern __typeof (xmlCreateURLParserCtxt) xmlCreateURLParserCtxt__internal_alias __attribute((visibility("hidden"))); +#define xmlCreateURLParserCtxt xmlCreateURLParserCtxt__internal_alias +#endif +#endif + +#ifdef bottom_error +#undef xmlCtxtGetLastError +extern __typeof (xmlCtxtGetLastError) xmlCtxtGetLastError __attribute((alias("xmlCtxtGetLastError__internal_alias"))); +#else +#ifndef xmlCtxtGetLastError +extern __typeof (xmlCtxtGetLastError) xmlCtxtGetLastError__internal_alias __attribute((visibility("hidden"))); +#define xmlCtxtGetLastError xmlCtxtGetLastError__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef xmlCtxtReadDoc +extern __typeof (xmlCtxtReadDoc) xmlCtxtReadDoc __attribute((alias("xmlCtxtReadDoc__internal_alias"))); +#else +#ifndef xmlCtxtReadDoc +extern __typeof (xmlCtxtReadDoc) xmlCtxtReadDoc__internal_alias __attribute((visibility("hidden"))); +#define xmlCtxtReadDoc xmlCtxtReadDoc__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef xmlCtxtReadFd +extern __typeof (xmlCtxtReadFd) xmlCtxtReadFd __attribute((alias("xmlCtxtReadFd__internal_alias"))); +#else +#ifndef xmlCtxtReadFd +extern __typeof (xmlCtxtReadFd) xmlCtxtReadFd__internal_alias __attribute((visibility("hidden"))); +#define xmlCtxtReadFd xmlCtxtReadFd__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef xmlCtxtReadFile +extern __typeof (xmlCtxtReadFile) xmlCtxtReadFile __attribute((alias("xmlCtxtReadFile__internal_alias"))); +#else +#ifndef xmlCtxtReadFile +extern __typeof (xmlCtxtReadFile) xmlCtxtReadFile__internal_alias __attribute((visibility("hidden"))); +#define xmlCtxtReadFile xmlCtxtReadFile__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef xmlCtxtReadIO +extern __typeof (xmlCtxtReadIO) xmlCtxtReadIO __attribute((alias("xmlCtxtReadIO__internal_alias"))); +#else +#ifndef xmlCtxtReadIO +extern __typeof (xmlCtxtReadIO) xmlCtxtReadIO__internal_alias __attribute((visibility("hidden"))); +#define xmlCtxtReadIO xmlCtxtReadIO__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef xmlCtxtReadMemory +extern __typeof (xmlCtxtReadMemory) xmlCtxtReadMemory __attribute((alias("xmlCtxtReadMemory__internal_alias"))); +#else +#ifndef xmlCtxtReadMemory +extern __typeof (xmlCtxtReadMemory) xmlCtxtReadMemory__internal_alias __attribute((visibility("hidden"))); +#define xmlCtxtReadMemory xmlCtxtReadMemory__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef xmlCtxtReset +extern __typeof (xmlCtxtReset) xmlCtxtReset __attribute((alias("xmlCtxtReset__internal_alias"))); +#else +#ifndef xmlCtxtReset +extern __typeof (xmlCtxtReset) xmlCtxtReset__internal_alias __attribute((visibility("hidden"))); +#define xmlCtxtReset xmlCtxtReset__internal_alias +#endif +#endif + +#ifdef bottom_error +#undef xmlCtxtResetLastError +extern __typeof (xmlCtxtResetLastError) xmlCtxtResetLastError __attribute((alias("xmlCtxtResetLastError__internal_alias"))); +#else +#ifndef xmlCtxtResetLastError +extern __typeof (xmlCtxtResetLastError) xmlCtxtResetLastError__internal_alias __attribute((visibility("hidden"))); +#define xmlCtxtResetLastError xmlCtxtResetLastError__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef xmlCtxtResetPush +extern __typeof (xmlCtxtResetPush) xmlCtxtResetPush __attribute((alias("xmlCtxtResetPush__internal_alias"))); +#else +#ifndef xmlCtxtResetPush +extern __typeof (xmlCtxtResetPush) xmlCtxtResetPush__internal_alias __attribute((visibility("hidden"))); +#define xmlCtxtResetPush xmlCtxtResetPush__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef xmlCtxtUseOptions +extern __typeof (xmlCtxtUseOptions) xmlCtxtUseOptions __attribute((alias("xmlCtxtUseOptions__internal_alias"))); +#else +#ifndef xmlCtxtUseOptions +extern __typeof (xmlCtxtUseOptions) xmlCtxtUseOptions__internal_alias __attribute((visibility("hidden"))); +#define xmlCtxtUseOptions xmlCtxtUseOptions__internal_alias +#endif +#endif + +#ifdef bottom_parserInternals +#undef xmlCurrentChar +extern __typeof (xmlCurrentChar) xmlCurrentChar __attribute((alias("xmlCurrentChar__internal_alias"))); +#else +#ifndef xmlCurrentChar +extern __typeof (xmlCurrentChar) xmlCurrentChar__internal_alias __attribute((visibility("hidden"))); +#define xmlCurrentChar xmlCurrentChar__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlDOMWrapAdoptNode +extern __typeof (xmlDOMWrapAdoptNode) xmlDOMWrapAdoptNode __attribute((alias("xmlDOMWrapAdoptNode__internal_alias"))); +#else +#ifndef xmlDOMWrapAdoptNode +extern __typeof (xmlDOMWrapAdoptNode) xmlDOMWrapAdoptNode__internal_alias __attribute((visibility("hidden"))); +#define xmlDOMWrapAdoptNode xmlDOMWrapAdoptNode__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlDOMWrapCloneNode +extern __typeof (xmlDOMWrapCloneNode) xmlDOMWrapCloneNode __attribute((alias("xmlDOMWrapCloneNode__internal_alias"))); +#else +#ifndef xmlDOMWrapCloneNode +extern __typeof (xmlDOMWrapCloneNode) xmlDOMWrapCloneNode__internal_alias __attribute((visibility("hidden"))); +#define xmlDOMWrapCloneNode xmlDOMWrapCloneNode__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlDOMWrapFreeCtxt +extern __typeof (xmlDOMWrapFreeCtxt) xmlDOMWrapFreeCtxt __attribute((alias("xmlDOMWrapFreeCtxt__internal_alias"))); +#else +#ifndef xmlDOMWrapFreeCtxt +extern __typeof (xmlDOMWrapFreeCtxt) xmlDOMWrapFreeCtxt__internal_alias __attribute((visibility("hidden"))); +#define xmlDOMWrapFreeCtxt xmlDOMWrapFreeCtxt__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlDOMWrapNewCtxt +extern __typeof (xmlDOMWrapNewCtxt) xmlDOMWrapNewCtxt __attribute((alias("xmlDOMWrapNewCtxt__internal_alias"))); +#else +#ifndef xmlDOMWrapNewCtxt +extern __typeof (xmlDOMWrapNewCtxt) xmlDOMWrapNewCtxt__internal_alias __attribute((visibility("hidden"))); +#define xmlDOMWrapNewCtxt xmlDOMWrapNewCtxt__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlDOMWrapReconcileNamespaces +extern __typeof (xmlDOMWrapReconcileNamespaces) xmlDOMWrapReconcileNamespaces __attribute((alias("xmlDOMWrapReconcileNamespaces__internal_alias"))); +#else +#ifndef xmlDOMWrapReconcileNamespaces +extern __typeof (xmlDOMWrapReconcileNamespaces) xmlDOMWrapReconcileNamespaces__internal_alias __attribute((visibility("hidden"))); +#define xmlDOMWrapReconcileNamespaces xmlDOMWrapReconcileNamespaces__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlDOMWrapRemoveNode +extern __typeof (xmlDOMWrapRemoveNode) xmlDOMWrapRemoveNode __attribute((alias("xmlDOMWrapRemoveNode__internal_alias"))); +#else +#ifndef xmlDOMWrapRemoveNode +extern __typeof (xmlDOMWrapRemoveNode) xmlDOMWrapRemoveNode__internal_alias __attribute((visibility("hidden"))); +#define xmlDOMWrapRemoveNode xmlDOMWrapRemoveNode__internal_alias +#endif +#endif + +#if defined(LIBXML_DEBUG_ENABLED) +#ifdef bottom_debugXML +#undef xmlDebugCheckDocument +extern __typeof (xmlDebugCheckDocument) xmlDebugCheckDocument __attribute((alias("xmlDebugCheckDocument__internal_alias"))); +#else +#ifndef xmlDebugCheckDocument +extern __typeof (xmlDebugCheckDocument) xmlDebugCheckDocument__internal_alias __attribute((visibility("hidden"))); +#define xmlDebugCheckDocument xmlDebugCheckDocument__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_DEBUG_ENABLED) +#ifdef bottom_debugXML +#undef xmlDebugDumpAttr +extern __typeof (xmlDebugDumpAttr) xmlDebugDumpAttr __attribute((alias("xmlDebugDumpAttr__internal_alias"))); +#else +#ifndef xmlDebugDumpAttr +extern __typeof (xmlDebugDumpAttr) xmlDebugDumpAttr__internal_alias __attribute((visibility("hidden"))); +#define xmlDebugDumpAttr xmlDebugDumpAttr__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_DEBUG_ENABLED) +#ifdef bottom_debugXML +#undef xmlDebugDumpAttrList +extern __typeof (xmlDebugDumpAttrList) xmlDebugDumpAttrList __attribute((alias("xmlDebugDumpAttrList__internal_alias"))); +#else +#ifndef xmlDebugDumpAttrList +extern __typeof (xmlDebugDumpAttrList) xmlDebugDumpAttrList__internal_alias __attribute((visibility("hidden"))); +#define xmlDebugDumpAttrList xmlDebugDumpAttrList__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_DEBUG_ENABLED) +#ifdef bottom_debugXML +#undef xmlDebugDumpDTD +extern __typeof (xmlDebugDumpDTD) xmlDebugDumpDTD __attribute((alias("xmlDebugDumpDTD__internal_alias"))); +#else +#ifndef xmlDebugDumpDTD +extern __typeof (xmlDebugDumpDTD) xmlDebugDumpDTD__internal_alias __attribute((visibility("hidden"))); +#define xmlDebugDumpDTD xmlDebugDumpDTD__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_DEBUG_ENABLED) +#ifdef bottom_debugXML +#undef xmlDebugDumpDocument +extern __typeof (xmlDebugDumpDocument) xmlDebugDumpDocument __attribute((alias("xmlDebugDumpDocument__internal_alias"))); +#else +#ifndef xmlDebugDumpDocument +extern __typeof (xmlDebugDumpDocument) xmlDebugDumpDocument__internal_alias __attribute((visibility("hidden"))); +#define xmlDebugDumpDocument xmlDebugDumpDocument__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_DEBUG_ENABLED) +#ifdef bottom_debugXML +#undef xmlDebugDumpDocumentHead +extern __typeof (xmlDebugDumpDocumentHead) xmlDebugDumpDocumentHead __attribute((alias("xmlDebugDumpDocumentHead__internal_alias"))); +#else +#ifndef xmlDebugDumpDocumentHead +extern __typeof (xmlDebugDumpDocumentHead) xmlDebugDumpDocumentHead__internal_alias __attribute((visibility("hidden"))); +#define xmlDebugDumpDocumentHead xmlDebugDumpDocumentHead__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_DEBUG_ENABLED) +#ifdef bottom_debugXML +#undef xmlDebugDumpEntities +extern __typeof (xmlDebugDumpEntities) xmlDebugDumpEntities __attribute((alias("xmlDebugDumpEntities__internal_alias"))); +#else +#ifndef xmlDebugDumpEntities +extern __typeof (xmlDebugDumpEntities) xmlDebugDumpEntities__internal_alias __attribute((visibility("hidden"))); +#define xmlDebugDumpEntities xmlDebugDumpEntities__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_DEBUG_ENABLED) +#ifdef bottom_debugXML +#undef xmlDebugDumpNode +extern __typeof (xmlDebugDumpNode) xmlDebugDumpNode __attribute((alias("xmlDebugDumpNode__internal_alias"))); +#else +#ifndef xmlDebugDumpNode +extern __typeof (xmlDebugDumpNode) xmlDebugDumpNode__internal_alias __attribute((visibility("hidden"))); +#define xmlDebugDumpNode xmlDebugDumpNode__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_DEBUG_ENABLED) +#ifdef bottom_debugXML +#undef xmlDebugDumpNodeList +extern __typeof (xmlDebugDumpNodeList) xmlDebugDumpNodeList __attribute((alias("xmlDebugDumpNodeList__internal_alias"))); +#else +#ifndef xmlDebugDumpNodeList +extern __typeof (xmlDebugDumpNodeList) xmlDebugDumpNodeList__internal_alias __attribute((visibility("hidden"))); +#define xmlDebugDumpNodeList xmlDebugDumpNodeList__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_DEBUG_ENABLED) +#ifdef bottom_debugXML +#undef xmlDebugDumpOneNode +extern __typeof (xmlDebugDumpOneNode) xmlDebugDumpOneNode __attribute((alias("xmlDebugDumpOneNode__internal_alias"))); +#else +#ifndef xmlDebugDumpOneNode +extern __typeof (xmlDebugDumpOneNode) xmlDebugDumpOneNode__internal_alias __attribute((visibility("hidden"))); +#define xmlDebugDumpOneNode xmlDebugDumpOneNode__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_DEBUG_ENABLED) +#ifdef bottom_debugXML +#undef xmlDebugDumpString +extern __typeof (xmlDebugDumpString) xmlDebugDumpString __attribute((alias("xmlDebugDumpString__internal_alias"))); +#else +#ifndef xmlDebugDumpString +extern __typeof (xmlDebugDumpString) xmlDebugDumpString__internal_alias __attribute((visibility("hidden"))); +#define xmlDebugDumpString xmlDebugDumpString__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_LEGACY_ENABLED) +#ifdef bottom_legacy +#undef xmlDecodeEntities +extern __typeof (xmlDecodeEntities) xmlDecodeEntities __attribute((alias("xmlDecodeEntities__internal_alias"))); +#else +#ifndef xmlDecodeEntities +extern __typeof (xmlDecodeEntities) xmlDecodeEntities__internal_alias __attribute((visibility("hidden"))); +#define xmlDecodeEntities xmlDecodeEntities__internal_alias +#endif +#endif +#endif + +#ifdef bottom_SAX2 +#undef xmlDefaultSAXHandlerInit +extern __typeof (xmlDefaultSAXHandlerInit) xmlDefaultSAXHandlerInit __attribute((alias("xmlDefaultSAXHandlerInit__internal_alias"))); +#else +#ifndef xmlDefaultSAXHandlerInit +extern __typeof (xmlDefaultSAXHandlerInit) xmlDefaultSAXHandlerInit__internal_alias __attribute((visibility("hidden"))); +#define xmlDefaultSAXHandlerInit xmlDefaultSAXHandlerInit__internal_alias +#endif +#endif + +#ifdef bottom_encoding +#undef xmlDelEncodingAlias +extern __typeof (xmlDelEncodingAlias) xmlDelEncodingAlias __attribute((alias("xmlDelEncodingAlias__internal_alias"))); +#else +#ifndef xmlDelEncodingAlias +extern __typeof (xmlDelEncodingAlias) xmlDelEncodingAlias__internal_alias __attribute((visibility("hidden"))); +#define xmlDelEncodingAlias xmlDelEncodingAlias__internal_alias +#endif +#endif + +#ifdef bottom_globals +#undef xmlDeregisterNodeDefault +extern __typeof (xmlDeregisterNodeDefault) xmlDeregisterNodeDefault __attribute((alias("xmlDeregisterNodeDefault__internal_alias"))); +#else +#ifndef xmlDeregisterNodeDefault +extern __typeof (xmlDeregisterNodeDefault) xmlDeregisterNodeDefault__internal_alias __attribute((visibility("hidden"))); +#define xmlDeregisterNodeDefault xmlDeregisterNodeDefault__internal_alias +#endif +#endif + +#ifdef bottom_encoding +#undef xmlDetectCharEncoding +extern __typeof (xmlDetectCharEncoding) xmlDetectCharEncoding __attribute((alias("xmlDetectCharEncoding__internal_alias"))); +#else +#ifndef xmlDetectCharEncoding +extern __typeof (xmlDetectCharEncoding) xmlDetectCharEncoding__internal_alias __attribute((visibility("hidden"))); +#define xmlDetectCharEncoding xmlDetectCharEncoding__internal_alias +#endif +#endif + +#ifdef bottom_dict +#undef xmlDictCleanup +extern __typeof (xmlDictCleanup) xmlDictCleanup __attribute((alias("xmlDictCleanup__internal_alias"))); +#else +#ifndef xmlDictCleanup +extern __typeof (xmlDictCleanup) xmlDictCleanup__internal_alias __attribute((visibility("hidden"))); +#define xmlDictCleanup xmlDictCleanup__internal_alias +#endif +#endif + +#ifdef bottom_dict +#undef xmlDictCreate +extern __typeof (xmlDictCreate) xmlDictCreate __attribute((alias("xmlDictCreate__internal_alias"))); +#else +#ifndef xmlDictCreate +extern __typeof (xmlDictCreate) xmlDictCreate__internal_alias __attribute((visibility("hidden"))); +#define xmlDictCreate xmlDictCreate__internal_alias +#endif +#endif + +#ifdef bottom_dict +#undef xmlDictCreateSub +extern __typeof (xmlDictCreateSub) xmlDictCreateSub __attribute((alias("xmlDictCreateSub__internal_alias"))); +#else +#ifndef xmlDictCreateSub +extern __typeof (xmlDictCreateSub) xmlDictCreateSub__internal_alias __attribute((visibility("hidden"))); +#define xmlDictCreateSub xmlDictCreateSub__internal_alias +#endif +#endif + +#ifdef bottom_dict +#undef xmlDictExists +extern __typeof (xmlDictExists) xmlDictExists __attribute((alias("xmlDictExists__internal_alias"))); +#else +#ifndef xmlDictExists +extern __typeof (xmlDictExists) xmlDictExists__internal_alias __attribute((visibility("hidden"))); +#define xmlDictExists xmlDictExists__internal_alias +#endif +#endif + +#ifdef bottom_dict +#undef xmlDictFree +extern __typeof (xmlDictFree) xmlDictFree __attribute((alias("xmlDictFree__internal_alias"))); +#else +#ifndef xmlDictFree +extern __typeof (xmlDictFree) xmlDictFree__internal_alias __attribute((visibility("hidden"))); +#define xmlDictFree xmlDictFree__internal_alias +#endif +#endif + +#ifdef bottom_dict +#undef xmlDictGetUsage +extern __typeof (xmlDictGetUsage) xmlDictGetUsage __attribute((alias("xmlDictGetUsage__internal_alias"))); +#else +#ifndef xmlDictGetUsage +extern __typeof (xmlDictGetUsage) xmlDictGetUsage__internal_alias __attribute((visibility("hidden"))); +#define xmlDictGetUsage xmlDictGetUsage__internal_alias +#endif +#endif + +#ifdef bottom_dict +#undef xmlDictLookup +extern __typeof (xmlDictLookup) xmlDictLookup __attribute((alias("xmlDictLookup__internal_alias"))); +#else +#ifndef xmlDictLookup +extern __typeof (xmlDictLookup) xmlDictLookup__internal_alias __attribute((visibility("hidden"))); +#define xmlDictLookup xmlDictLookup__internal_alias +#endif +#endif + +#ifdef bottom_dict +#undef xmlDictOwns +extern __typeof (xmlDictOwns) xmlDictOwns __attribute((alias("xmlDictOwns__internal_alias"))); +#else +#ifndef xmlDictOwns +extern __typeof (xmlDictOwns) xmlDictOwns__internal_alias __attribute((visibility("hidden"))); +#define xmlDictOwns xmlDictOwns__internal_alias +#endif +#endif + +#ifdef bottom_dict +#undef xmlDictQLookup +extern __typeof (xmlDictQLookup) xmlDictQLookup __attribute((alias("xmlDictQLookup__internal_alias"))); +#else +#ifndef xmlDictQLookup +extern __typeof (xmlDictQLookup) xmlDictQLookup__internal_alias __attribute((visibility("hidden"))); +#define xmlDictQLookup xmlDictQLookup__internal_alias +#endif +#endif + +#ifdef bottom_dict +#undef xmlDictReference +extern __typeof (xmlDictReference) xmlDictReference __attribute((alias("xmlDictReference__internal_alias"))); +#else +#ifndef xmlDictReference +extern __typeof (xmlDictReference) xmlDictReference__internal_alias __attribute((visibility("hidden"))); +#define xmlDictReference xmlDictReference__internal_alias +#endif +#endif + +#ifdef bottom_dict +#undef xmlDictSetLimit +extern __typeof (xmlDictSetLimit) xmlDictSetLimit __attribute((alias("xmlDictSetLimit__internal_alias"))); +#else +#ifndef xmlDictSetLimit +extern __typeof (xmlDictSetLimit) xmlDictSetLimit__internal_alias __attribute((visibility("hidden"))); +#define xmlDictSetLimit xmlDictSetLimit__internal_alias +#endif +#endif + +#ifdef bottom_dict +#undef xmlDictSize +extern __typeof (xmlDictSize) xmlDictSize __attribute((alias("xmlDictSize__internal_alias"))); +#else +#ifndef xmlDictSize +extern __typeof (xmlDictSize) xmlDictSize__internal_alias __attribute((visibility("hidden"))); +#define xmlDictSize xmlDictSize__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlDocCopyNode +extern __typeof (xmlDocCopyNode) xmlDocCopyNode __attribute((alias("xmlDocCopyNode__internal_alias"))); +#else +#ifndef xmlDocCopyNode +extern __typeof (xmlDocCopyNode) xmlDocCopyNode__internal_alias __attribute((visibility("hidden"))); +#define xmlDocCopyNode xmlDocCopyNode__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlDocCopyNodeList +extern __typeof (xmlDocCopyNodeList) xmlDocCopyNodeList __attribute((alias("xmlDocCopyNodeList__internal_alias"))); +#else +#ifndef xmlDocCopyNodeList +extern __typeof (xmlDocCopyNodeList) xmlDocCopyNodeList__internal_alias __attribute((visibility("hidden"))); +#define xmlDocCopyNodeList xmlDocCopyNodeList__internal_alias +#endif +#endif + +#if defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_xmlsave +#undef xmlDocDump +extern __typeof (xmlDocDump) xmlDocDump __attribute((alias("xmlDocDump__internal_alias"))); +#else +#ifndef xmlDocDump +extern __typeof (xmlDocDump) xmlDocDump__internal_alias __attribute((visibility("hidden"))); +#define xmlDocDump xmlDocDump__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_xmlsave +#undef xmlDocDumpFormatMemory +extern __typeof (xmlDocDumpFormatMemory) xmlDocDumpFormatMemory __attribute((alias("xmlDocDumpFormatMemory__internal_alias"))); +#else +#ifndef xmlDocDumpFormatMemory +extern __typeof (xmlDocDumpFormatMemory) xmlDocDumpFormatMemory__internal_alias __attribute((visibility("hidden"))); +#define xmlDocDumpFormatMemory xmlDocDumpFormatMemory__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_xmlsave +#undef xmlDocDumpFormatMemoryEnc +extern __typeof (xmlDocDumpFormatMemoryEnc) xmlDocDumpFormatMemoryEnc __attribute((alias("xmlDocDumpFormatMemoryEnc__internal_alias"))); +#else +#ifndef xmlDocDumpFormatMemoryEnc +extern __typeof (xmlDocDumpFormatMemoryEnc) xmlDocDumpFormatMemoryEnc__internal_alias __attribute((visibility("hidden"))); +#define xmlDocDumpFormatMemoryEnc xmlDocDumpFormatMemoryEnc__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_xmlsave +#undef xmlDocDumpMemory +extern __typeof (xmlDocDumpMemory) xmlDocDumpMemory __attribute((alias("xmlDocDumpMemory__internal_alias"))); +#else +#ifndef xmlDocDumpMemory +extern __typeof (xmlDocDumpMemory) xmlDocDumpMemory__internal_alias __attribute((visibility("hidden"))); +#define xmlDocDumpMemory xmlDocDumpMemory__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_xmlsave +#undef xmlDocDumpMemoryEnc +extern __typeof (xmlDocDumpMemoryEnc) xmlDocDumpMemoryEnc __attribute((alias("xmlDocDumpMemoryEnc__internal_alias"))); +#else +#ifndef xmlDocDumpMemoryEnc +extern __typeof (xmlDocDumpMemoryEnc) xmlDocDumpMemoryEnc__internal_alias __attribute((visibility("hidden"))); +#define xmlDocDumpMemoryEnc xmlDocDumpMemoryEnc__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_xmlsave +#undef xmlDocFormatDump +extern __typeof (xmlDocFormatDump) xmlDocFormatDump __attribute((alias("xmlDocFormatDump__internal_alias"))); +#else +#ifndef xmlDocFormatDump +extern __typeof (xmlDocFormatDump) xmlDocFormatDump__internal_alias __attribute((visibility("hidden"))); +#define xmlDocFormatDump xmlDocFormatDump__internal_alias +#endif +#endif +#endif + +#ifdef bottom_tree +#undef xmlDocGetRootElement +extern __typeof (xmlDocGetRootElement) xmlDocGetRootElement __attribute((alias("xmlDocGetRootElement__internal_alias"))); +#else +#ifndef xmlDocGetRootElement +extern __typeof (xmlDocGetRootElement) xmlDocGetRootElement__internal_alias __attribute((visibility("hidden"))); +#define xmlDocGetRootElement xmlDocGetRootElement__internal_alias +#endif +#endif + +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_tree +#undef xmlDocSetRootElement +extern __typeof (xmlDocSetRootElement) xmlDocSetRootElement __attribute((alias("xmlDocSetRootElement__internal_alias"))); +#else +#ifndef xmlDocSetRootElement +extern __typeof (xmlDocSetRootElement) xmlDocSetRootElement__internal_alias __attribute((visibility("hidden"))); +#define xmlDocSetRootElement xmlDocSetRootElement__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_valid +#undef xmlDumpAttributeDecl +extern __typeof (xmlDumpAttributeDecl) xmlDumpAttributeDecl __attribute((alias("xmlDumpAttributeDecl__internal_alias"))); +#else +#ifndef xmlDumpAttributeDecl +extern __typeof (xmlDumpAttributeDecl) xmlDumpAttributeDecl__internal_alias __attribute((visibility("hidden"))); +#define xmlDumpAttributeDecl xmlDumpAttributeDecl__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_valid +#undef xmlDumpAttributeTable +extern __typeof (xmlDumpAttributeTable) xmlDumpAttributeTable __attribute((alias("xmlDumpAttributeTable__internal_alias"))); +#else +#ifndef xmlDumpAttributeTable +extern __typeof (xmlDumpAttributeTable) xmlDumpAttributeTable__internal_alias __attribute((visibility("hidden"))); +#define xmlDumpAttributeTable xmlDumpAttributeTable__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_valid +#undef xmlDumpElementDecl +extern __typeof (xmlDumpElementDecl) xmlDumpElementDecl __attribute((alias("xmlDumpElementDecl__internal_alias"))); +#else +#ifndef xmlDumpElementDecl +extern __typeof (xmlDumpElementDecl) xmlDumpElementDecl__internal_alias __attribute((visibility("hidden"))); +#define xmlDumpElementDecl xmlDumpElementDecl__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_valid +#undef xmlDumpElementTable +extern __typeof (xmlDumpElementTable) xmlDumpElementTable __attribute((alias("xmlDumpElementTable__internal_alias"))); +#else +#ifndef xmlDumpElementTable +extern __typeof (xmlDumpElementTable) xmlDumpElementTable__internal_alias __attribute((visibility("hidden"))); +#define xmlDumpElementTable xmlDumpElementTable__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_entities +#undef xmlDumpEntitiesTable +extern __typeof (xmlDumpEntitiesTable) xmlDumpEntitiesTable __attribute((alias("xmlDumpEntitiesTable__internal_alias"))); +#else +#ifndef xmlDumpEntitiesTable +extern __typeof (xmlDumpEntitiesTable) xmlDumpEntitiesTable__internal_alias __attribute((visibility("hidden"))); +#define xmlDumpEntitiesTable xmlDumpEntitiesTable__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_entities +#undef xmlDumpEntityDecl +extern __typeof (xmlDumpEntityDecl) xmlDumpEntityDecl __attribute((alias("xmlDumpEntityDecl__internal_alias"))); +#else +#ifndef xmlDumpEntityDecl +extern __typeof (xmlDumpEntityDecl) xmlDumpEntityDecl__internal_alias __attribute((visibility("hidden"))); +#define xmlDumpEntityDecl xmlDumpEntityDecl__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_valid +#undef xmlDumpNotationDecl +extern __typeof (xmlDumpNotationDecl) xmlDumpNotationDecl __attribute((alias("xmlDumpNotationDecl__internal_alias"))); +#else +#ifndef xmlDumpNotationDecl +extern __typeof (xmlDumpNotationDecl) xmlDumpNotationDecl__internal_alias __attribute((visibility("hidden"))); +#define xmlDumpNotationDecl xmlDumpNotationDecl__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_valid +#undef xmlDumpNotationTable +extern __typeof (xmlDumpNotationTable) xmlDumpNotationTable __attribute((alias("xmlDumpNotationTable__internal_alias"))); +#else +#ifndef xmlDumpNotationTable +extern __typeof (xmlDumpNotationTable) xmlDumpNotationTable__internal_alias __attribute((visibility("hidden"))); +#define xmlDumpNotationTable xmlDumpNotationTable__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_xmlsave +#undef xmlElemDump +extern __typeof (xmlElemDump) xmlElemDump __attribute((alias("xmlElemDump__internal_alias"))); +#else +#ifndef xmlElemDump +extern __typeof (xmlElemDump) xmlElemDump__internal_alias __attribute((visibility("hidden"))); +#define xmlElemDump xmlElemDump__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_LEGACY_ENABLED) +#ifdef bottom_legacy +#undef xmlEncodeEntities +extern __typeof (xmlEncodeEntities) xmlEncodeEntities __attribute((alias("xmlEncodeEntities__internal_alias"))); +#else +#ifndef xmlEncodeEntities +extern __typeof (xmlEncodeEntities) xmlEncodeEntities__internal_alias __attribute((visibility("hidden"))); +#define xmlEncodeEntities xmlEncodeEntities__internal_alias +#endif +#endif +#endif + +#ifdef bottom_entities +#undef xmlEncodeEntitiesReentrant +extern __typeof (xmlEncodeEntitiesReentrant) xmlEncodeEntitiesReentrant __attribute((alias("xmlEncodeEntitiesReentrant__internal_alias"))); +#else +#ifndef xmlEncodeEntitiesReentrant +extern __typeof (xmlEncodeEntitiesReentrant) xmlEncodeEntitiesReentrant__internal_alias __attribute((visibility("hidden"))); +#define xmlEncodeEntitiesReentrant xmlEncodeEntitiesReentrant__internal_alias +#endif +#endif + +#ifdef bottom_entities +#undef xmlEncodeSpecialChars +extern __typeof (xmlEncodeSpecialChars) xmlEncodeSpecialChars __attribute((alias("xmlEncodeSpecialChars__internal_alias"))); +#else +#ifndef xmlEncodeSpecialChars +extern __typeof (xmlEncodeSpecialChars) xmlEncodeSpecialChars__internal_alias __attribute((visibility("hidden"))); +#define xmlEncodeSpecialChars xmlEncodeSpecialChars__internal_alias +#endif +#endif + +#ifdef bottom_parserInternals +#undef xmlErrMemory +extern __typeof (xmlErrMemory) xmlErrMemory __attribute((alias("xmlErrMemory__internal_alias"))); +#else +#ifndef xmlErrMemory +extern __typeof (xmlErrMemory) xmlErrMemory__internal_alias __attribute((visibility("hidden"))); +#define xmlErrMemory xmlErrMemory__internal_alias +#endif +#endif + +#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED) +#ifdef bottom_xmlregexp +#undef xmlExpCtxtNbCons +extern __typeof (xmlExpCtxtNbCons) xmlExpCtxtNbCons __attribute((alias("xmlExpCtxtNbCons__internal_alias"))); +#else +#ifndef xmlExpCtxtNbCons +extern __typeof (xmlExpCtxtNbCons) xmlExpCtxtNbCons__internal_alias __attribute((visibility("hidden"))); +#define xmlExpCtxtNbCons xmlExpCtxtNbCons__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED) +#ifdef bottom_xmlregexp +#undef xmlExpCtxtNbNodes +extern __typeof (xmlExpCtxtNbNodes) xmlExpCtxtNbNodes __attribute((alias("xmlExpCtxtNbNodes__internal_alias"))); +#else +#ifndef xmlExpCtxtNbNodes +extern __typeof (xmlExpCtxtNbNodes) xmlExpCtxtNbNodes__internal_alias __attribute((visibility("hidden"))); +#define xmlExpCtxtNbNodes xmlExpCtxtNbNodes__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED) +#ifdef bottom_xmlregexp +#undef xmlExpDump +extern __typeof (xmlExpDump) xmlExpDump __attribute((alias("xmlExpDump__internal_alias"))); +#else +#ifndef xmlExpDump +extern __typeof (xmlExpDump) xmlExpDump__internal_alias __attribute((visibility("hidden"))); +#define xmlExpDump xmlExpDump__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED) +#ifdef bottom_xmlregexp +#undef xmlExpExpDerive +extern __typeof (xmlExpExpDerive) xmlExpExpDerive __attribute((alias("xmlExpExpDerive__internal_alias"))); +#else +#ifndef xmlExpExpDerive +extern __typeof (xmlExpExpDerive) xmlExpExpDerive__internal_alias __attribute((visibility("hidden"))); +#define xmlExpExpDerive xmlExpExpDerive__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED) +#ifdef bottom_xmlregexp +#undef xmlExpFree +extern __typeof (xmlExpFree) xmlExpFree __attribute((alias("xmlExpFree__internal_alias"))); +#else +#ifndef xmlExpFree +extern __typeof (xmlExpFree) xmlExpFree__internal_alias __attribute((visibility("hidden"))); +#define xmlExpFree xmlExpFree__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED) +#ifdef bottom_xmlregexp +#undef xmlExpFreeCtxt +extern __typeof (xmlExpFreeCtxt) xmlExpFreeCtxt __attribute((alias("xmlExpFreeCtxt__internal_alias"))); +#else +#ifndef xmlExpFreeCtxt +extern __typeof (xmlExpFreeCtxt) xmlExpFreeCtxt__internal_alias __attribute((visibility("hidden"))); +#define xmlExpFreeCtxt xmlExpFreeCtxt__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED) +#ifdef bottom_xmlregexp +#undef xmlExpGetLanguage +extern __typeof (xmlExpGetLanguage) xmlExpGetLanguage __attribute((alias("xmlExpGetLanguage__internal_alias"))); +#else +#ifndef xmlExpGetLanguage +extern __typeof (xmlExpGetLanguage) xmlExpGetLanguage__internal_alias __attribute((visibility("hidden"))); +#define xmlExpGetLanguage xmlExpGetLanguage__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED) +#ifdef bottom_xmlregexp +#undef xmlExpGetStart +extern __typeof (xmlExpGetStart) xmlExpGetStart __attribute((alias("xmlExpGetStart__internal_alias"))); +#else +#ifndef xmlExpGetStart +extern __typeof (xmlExpGetStart) xmlExpGetStart__internal_alias __attribute((visibility("hidden"))); +#define xmlExpGetStart xmlExpGetStart__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED) +#ifdef bottom_xmlregexp +#undef xmlExpIsNillable +extern __typeof (xmlExpIsNillable) xmlExpIsNillable __attribute((alias("xmlExpIsNillable__internal_alias"))); +#else +#ifndef xmlExpIsNillable +extern __typeof (xmlExpIsNillable) xmlExpIsNillable__internal_alias __attribute((visibility("hidden"))); +#define xmlExpIsNillable xmlExpIsNillable__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED) +#ifdef bottom_xmlregexp +#undef xmlExpMaxToken +extern __typeof (xmlExpMaxToken) xmlExpMaxToken __attribute((alias("xmlExpMaxToken__internal_alias"))); +#else +#ifndef xmlExpMaxToken +extern __typeof (xmlExpMaxToken) xmlExpMaxToken__internal_alias __attribute((visibility("hidden"))); +#define xmlExpMaxToken xmlExpMaxToken__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED) +#ifdef bottom_xmlregexp +#undef xmlExpNewAtom +extern __typeof (xmlExpNewAtom) xmlExpNewAtom __attribute((alias("xmlExpNewAtom__internal_alias"))); +#else +#ifndef xmlExpNewAtom +extern __typeof (xmlExpNewAtom) xmlExpNewAtom__internal_alias __attribute((visibility("hidden"))); +#define xmlExpNewAtom xmlExpNewAtom__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED) +#ifdef bottom_xmlregexp +#undef xmlExpNewCtxt +extern __typeof (xmlExpNewCtxt) xmlExpNewCtxt __attribute((alias("xmlExpNewCtxt__internal_alias"))); +#else +#ifndef xmlExpNewCtxt +extern __typeof (xmlExpNewCtxt) xmlExpNewCtxt__internal_alias __attribute((visibility("hidden"))); +#define xmlExpNewCtxt xmlExpNewCtxt__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED) +#ifdef bottom_xmlregexp +#undef xmlExpNewOr +extern __typeof (xmlExpNewOr) xmlExpNewOr __attribute((alias("xmlExpNewOr__internal_alias"))); +#else +#ifndef xmlExpNewOr +extern __typeof (xmlExpNewOr) xmlExpNewOr__internal_alias __attribute((visibility("hidden"))); +#define xmlExpNewOr xmlExpNewOr__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED) +#ifdef bottom_xmlregexp +#undef xmlExpNewRange +extern __typeof (xmlExpNewRange) xmlExpNewRange __attribute((alias("xmlExpNewRange__internal_alias"))); +#else +#ifndef xmlExpNewRange +extern __typeof (xmlExpNewRange) xmlExpNewRange__internal_alias __attribute((visibility("hidden"))); +#define xmlExpNewRange xmlExpNewRange__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED) +#ifdef bottom_xmlregexp +#undef xmlExpNewSeq +extern __typeof (xmlExpNewSeq) xmlExpNewSeq __attribute((alias("xmlExpNewSeq__internal_alias"))); +#else +#ifndef xmlExpNewSeq +extern __typeof (xmlExpNewSeq) xmlExpNewSeq__internal_alias __attribute((visibility("hidden"))); +#define xmlExpNewSeq xmlExpNewSeq__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED) +#ifdef bottom_xmlregexp +#undef xmlExpParse +extern __typeof (xmlExpParse) xmlExpParse __attribute((alias("xmlExpParse__internal_alias"))); +#else +#ifndef xmlExpParse +extern __typeof (xmlExpParse) xmlExpParse__internal_alias __attribute((visibility("hidden"))); +#define xmlExpParse xmlExpParse__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED) +#ifdef bottom_xmlregexp +#undef xmlExpRef +extern __typeof (xmlExpRef) xmlExpRef __attribute((alias("xmlExpRef__internal_alias"))); +#else +#ifndef xmlExpRef +extern __typeof (xmlExpRef) xmlExpRef__internal_alias __attribute((visibility("hidden"))); +#define xmlExpRef xmlExpRef__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED) +#ifdef bottom_xmlregexp +#undef xmlExpStringDerive +extern __typeof (xmlExpStringDerive) xmlExpStringDerive __attribute((alias("xmlExpStringDerive__internal_alias"))); +#else +#ifndef xmlExpStringDerive +extern __typeof (xmlExpStringDerive) xmlExpStringDerive__internal_alias __attribute((visibility("hidden"))); +#define xmlExpStringDerive xmlExpStringDerive__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED) +#ifdef bottom_xmlregexp +#undef xmlExpSubsume +extern __typeof (xmlExpSubsume) xmlExpSubsume __attribute((alias("xmlExpSubsume__internal_alias"))); +#else +#ifndef xmlExpSubsume +extern __typeof (xmlExpSubsume) xmlExpSubsume__internal_alias __attribute((visibility("hidden"))); +#define xmlExpSubsume xmlExpSubsume__internal_alias +#endif +#endif +#endif + +#ifdef bottom_xmlIO +#undef xmlFileClose +extern __typeof (xmlFileClose) xmlFileClose __attribute((alias("xmlFileClose__internal_alias"))); +#else +#ifndef xmlFileClose +extern __typeof (xmlFileClose) xmlFileClose__internal_alias __attribute((visibility("hidden"))); +#define xmlFileClose xmlFileClose__internal_alias +#endif +#endif + +#ifdef bottom_xmlIO +#undef xmlFileMatch +extern __typeof (xmlFileMatch) xmlFileMatch __attribute((alias("xmlFileMatch__internal_alias"))); +#else +#ifndef xmlFileMatch +extern __typeof (xmlFileMatch) xmlFileMatch__internal_alias __attribute((visibility("hidden"))); +#define xmlFileMatch xmlFileMatch__internal_alias +#endif +#endif + +#ifdef bottom_xmlIO +#undef xmlFileOpen +extern __typeof (xmlFileOpen) xmlFileOpen __attribute((alias("xmlFileOpen__internal_alias"))); +#else +#ifndef xmlFileOpen +extern __typeof (xmlFileOpen) xmlFileOpen__internal_alias __attribute((visibility("hidden"))); +#define xmlFileOpen xmlFileOpen__internal_alias +#endif +#endif + +#ifdef bottom_xmlIO +#undef xmlFileRead +extern __typeof (xmlFileRead) xmlFileRead __attribute((alias("xmlFileRead__internal_alias"))); +#else +#ifndef xmlFileRead +extern __typeof (xmlFileRead) xmlFileRead__internal_alias __attribute((visibility("hidden"))); +#define xmlFileRead xmlFileRead__internal_alias +#endif +#endif + +#ifdef bottom_encoding +#undef xmlFindCharEncodingHandler +extern __typeof (xmlFindCharEncodingHandler) xmlFindCharEncodingHandler __attribute((alias("xmlFindCharEncodingHandler__internal_alias"))); +#else +#ifndef xmlFindCharEncodingHandler +extern __typeof (xmlFindCharEncodingHandler) xmlFindCharEncodingHandler__internal_alias __attribute((visibility("hidden"))); +#define xmlFindCharEncodingHandler xmlFindCharEncodingHandler__internal_alias +#endif +#endif + +#if defined(LIBXML_TREE_ENABLED) +#ifdef bottom_tree +#undef xmlFirstElementChild +extern __typeof (xmlFirstElementChild) xmlFirstElementChild __attribute((alias("xmlFirstElementChild__internal_alias"))); +#else +#ifndef xmlFirstElementChild +extern __typeof (xmlFirstElementChild) xmlFirstElementChild__internal_alias __attribute((visibility("hidden"))); +#define xmlFirstElementChild xmlFirstElementChild__internal_alias +#endif +#endif +#endif + +#ifdef bottom_valid +#undef xmlFreeAttributeTable +extern __typeof (xmlFreeAttributeTable) xmlFreeAttributeTable __attribute((alias("xmlFreeAttributeTable__internal_alias"))); +#else +#ifndef xmlFreeAttributeTable +extern __typeof (xmlFreeAttributeTable) xmlFreeAttributeTable__internal_alias __attribute((visibility("hidden"))); +#define xmlFreeAttributeTable xmlFreeAttributeTable__internal_alias +#endif +#endif + +#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED) +#ifdef bottom_xmlregexp +#undef xmlFreeAutomata +extern __typeof (xmlFreeAutomata) xmlFreeAutomata __attribute((alias("xmlFreeAutomata__internal_alias"))); +#else +#ifndef xmlFreeAutomata +extern __typeof (xmlFreeAutomata) xmlFreeAutomata__internal_alias __attribute((visibility("hidden"))); +#define xmlFreeAutomata xmlFreeAutomata__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_CATALOG_ENABLED) +#ifdef bottom_catalog +#undef xmlFreeCatalog +extern __typeof (xmlFreeCatalog) xmlFreeCatalog __attribute((alias("xmlFreeCatalog__internal_alias"))); +#else +#ifndef xmlFreeCatalog +extern __typeof (xmlFreeCatalog) xmlFreeCatalog__internal_alias __attribute((visibility("hidden"))); +#define xmlFreeCatalog xmlFreeCatalog__internal_alias +#endif +#endif +#endif + +#ifdef bottom_tree +#undef xmlFreeDoc +extern __typeof (xmlFreeDoc) xmlFreeDoc __attribute((alias("xmlFreeDoc__internal_alias"))); +#else +#ifndef xmlFreeDoc +extern __typeof (xmlFreeDoc) xmlFreeDoc__internal_alias __attribute((visibility("hidden"))); +#define xmlFreeDoc xmlFreeDoc__internal_alias +#endif +#endif + +#ifdef bottom_valid +#undef xmlFreeDocElementContent +extern __typeof (xmlFreeDocElementContent) xmlFreeDocElementContent __attribute((alias("xmlFreeDocElementContent__internal_alias"))); +#else +#ifndef xmlFreeDocElementContent +extern __typeof (xmlFreeDocElementContent) xmlFreeDocElementContent__internal_alias __attribute((visibility("hidden"))); +#define xmlFreeDocElementContent xmlFreeDocElementContent__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlFreeDtd +extern __typeof (xmlFreeDtd) xmlFreeDtd __attribute((alias("xmlFreeDtd__internal_alias"))); +#else +#ifndef xmlFreeDtd +extern __typeof (xmlFreeDtd) xmlFreeDtd__internal_alias __attribute((visibility("hidden"))); +#define xmlFreeDtd xmlFreeDtd__internal_alias +#endif +#endif + +#ifdef bottom_valid +#undef xmlFreeElementContent +extern __typeof (xmlFreeElementContent) xmlFreeElementContent __attribute((alias("xmlFreeElementContent__internal_alias"))); +#else +#ifndef xmlFreeElementContent +extern __typeof (xmlFreeElementContent) xmlFreeElementContent__internal_alias __attribute((visibility("hidden"))); +#define xmlFreeElementContent xmlFreeElementContent__internal_alias +#endif +#endif + +#ifdef bottom_valid +#undef xmlFreeElementTable +extern __typeof (xmlFreeElementTable) xmlFreeElementTable __attribute((alias("xmlFreeElementTable__internal_alias"))); +#else +#ifndef xmlFreeElementTable +extern __typeof (xmlFreeElementTable) xmlFreeElementTable__internal_alias __attribute((visibility("hidden"))); +#define xmlFreeElementTable xmlFreeElementTable__internal_alias +#endif +#endif + +#ifdef bottom_entities +#undef xmlFreeEntitiesTable +extern __typeof (xmlFreeEntitiesTable) xmlFreeEntitiesTable __attribute((alias("xmlFreeEntitiesTable__internal_alias"))); +#else +#ifndef xmlFreeEntitiesTable +extern __typeof (xmlFreeEntitiesTable) xmlFreeEntitiesTable__internal_alias __attribute((visibility("hidden"))); +#define xmlFreeEntitiesTable xmlFreeEntitiesTable__internal_alias +#endif +#endif + +#ifdef bottom_valid +#undef xmlFreeEnumeration +extern __typeof (xmlFreeEnumeration) xmlFreeEnumeration __attribute((alias("xmlFreeEnumeration__internal_alias"))); +#else +#ifndef xmlFreeEnumeration +extern __typeof (xmlFreeEnumeration) xmlFreeEnumeration__internal_alias __attribute((visibility("hidden"))); +#define xmlFreeEnumeration xmlFreeEnumeration__internal_alias +#endif +#endif + +#ifdef bottom_valid +#undef xmlFreeIDTable +extern __typeof (xmlFreeIDTable) xmlFreeIDTable __attribute((alias("xmlFreeIDTable__internal_alias"))); +#else +#ifndef xmlFreeIDTable +extern __typeof (xmlFreeIDTable) xmlFreeIDTable__internal_alias __attribute((visibility("hidden"))); +#define xmlFreeIDTable xmlFreeIDTable__internal_alias +#endif +#endif + +#ifdef bottom_parserInternals +#undef xmlFreeInputStream +extern __typeof (xmlFreeInputStream) xmlFreeInputStream __attribute((alias("xmlFreeInputStream__internal_alias"))); +#else +#ifndef xmlFreeInputStream +extern __typeof (xmlFreeInputStream) xmlFreeInputStream__internal_alias __attribute((visibility("hidden"))); +#define xmlFreeInputStream xmlFreeInputStream__internal_alias +#endif +#endif + +#ifdef bottom_threads +#undef xmlFreeMutex +extern __typeof (xmlFreeMutex) xmlFreeMutex __attribute((alias("xmlFreeMutex__internal_alias"))); +#else +#ifndef xmlFreeMutex +extern __typeof (xmlFreeMutex) xmlFreeMutex__internal_alias __attribute((visibility("hidden"))); +#define xmlFreeMutex xmlFreeMutex__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlFreeNode +extern __typeof (xmlFreeNode) xmlFreeNode __attribute((alias("xmlFreeNode__internal_alias"))); +#else +#ifndef xmlFreeNode +extern __typeof (xmlFreeNode) xmlFreeNode__internal_alias __attribute((visibility("hidden"))); +#define xmlFreeNode xmlFreeNode__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlFreeNodeList +extern __typeof (xmlFreeNodeList) xmlFreeNodeList __attribute((alias("xmlFreeNodeList__internal_alias"))); +#else +#ifndef xmlFreeNodeList +extern __typeof (xmlFreeNodeList) xmlFreeNodeList__internal_alias __attribute((visibility("hidden"))); +#define xmlFreeNodeList xmlFreeNodeList__internal_alias +#endif +#endif + +#ifdef bottom_valid +#undef xmlFreeNotationTable +extern __typeof (xmlFreeNotationTable) xmlFreeNotationTable __attribute((alias("xmlFreeNotationTable__internal_alias"))); +#else +#ifndef xmlFreeNotationTable +extern __typeof (xmlFreeNotationTable) xmlFreeNotationTable__internal_alias __attribute((visibility("hidden"))); +#define xmlFreeNotationTable xmlFreeNotationTable__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlFreeNs +extern __typeof (xmlFreeNs) xmlFreeNs __attribute((alias("xmlFreeNs__internal_alias"))); +#else +#ifndef xmlFreeNs +extern __typeof (xmlFreeNs) xmlFreeNs__internal_alias __attribute((visibility("hidden"))); +#define xmlFreeNs xmlFreeNs__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlFreeNsList +extern __typeof (xmlFreeNsList) xmlFreeNsList __attribute((alias("xmlFreeNsList__internal_alias"))); +#else +#ifndef xmlFreeNsList +extern __typeof (xmlFreeNsList) xmlFreeNsList__internal_alias __attribute((visibility("hidden"))); +#define xmlFreeNsList xmlFreeNsList__internal_alias +#endif +#endif + +#ifdef bottom_parserInternals +#undef xmlFreeParserCtxt +extern __typeof (xmlFreeParserCtxt) xmlFreeParserCtxt __attribute((alias("xmlFreeParserCtxt__internal_alias"))); +#else +#ifndef xmlFreeParserCtxt +extern __typeof (xmlFreeParserCtxt) xmlFreeParserCtxt__internal_alias __attribute((visibility("hidden"))); +#define xmlFreeParserCtxt xmlFreeParserCtxt__internal_alias +#endif +#endif + +#ifdef bottom_xmlIO +#undef xmlFreeParserInputBuffer +extern __typeof (xmlFreeParserInputBuffer) xmlFreeParserInputBuffer __attribute((alias("xmlFreeParserInputBuffer__internal_alias"))); +#else +#ifndef xmlFreeParserInputBuffer +extern __typeof (xmlFreeParserInputBuffer) xmlFreeParserInputBuffer__internal_alias __attribute((visibility("hidden"))); +#define xmlFreeParserInputBuffer xmlFreeParserInputBuffer__internal_alias +#endif +#endif + +#if defined(LIBXML_PATTERN_ENABLED) +#ifdef bottom_pattern +#undef xmlFreePattern +extern __typeof (xmlFreePattern) xmlFreePattern __attribute((alias("xmlFreePattern__internal_alias"))); +#else +#ifndef xmlFreePattern +extern __typeof (xmlFreePattern) xmlFreePattern__internal_alias __attribute((visibility("hidden"))); +#define xmlFreePattern xmlFreePattern__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_PATTERN_ENABLED) +#ifdef bottom_pattern +#undef xmlFreePatternList +extern __typeof (xmlFreePatternList) xmlFreePatternList __attribute((alias("xmlFreePatternList__internal_alias"))); +#else +#ifndef xmlFreePatternList +extern __typeof (xmlFreePatternList) xmlFreePatternList__internal_alias __attribute((visibility("hidden"))); +#define xmlFreePatternList xmlFreePatternList__internal_alias +#endif +#endif +#endif + +#ifdef bottom_tree +#undef xmlFreeProp +extern __typeof (xmlFreeProp) xmlFreeProp __attribute((alias("xmlFreeProp__internal_alias"))); +#else +#ifndef xmlFreeProp +extern __typeof (xmlFreeProp) xmlFreeProp__internal_alias __attribute((visibility("hidden"))); +#define xmlFreeProp xmlFreeProp__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlFreePropList +extern __typeof (xmlFreePropList) xmlFreePropList __attribute((alias("xmlFreePropList__internal_alias"))); +#else +#ifndef xmlFreePropList +extern __typeof (xmlFreePropList) xmlFreePropList__internal_alias __attribute((visibility("hidden"))); +#define xmlFreePropList xmlFreePropList__internal_alias +#endif +#endif + +#ifdef bottom_threads +#undef xmlFreeRMutex +extern __typeof (xmlFreeRMutex) xmlFreeRMutex __attribute((alias("xmlFreeRMutex__internal_alias"))); +#else +#ifndef xmlFreeRMutex +extern __typeof (xmlFreeRMutex) xmlFreeRMutex__internal_alias __attribute((visibility("hidden"))); +#define xmlFreeRMutex xmlFreeRMutex__internal_alias +#endif +#endif + +#ifdef bottom_valid +#undef xmlFreeRefTable +extern __typeof (xmlFreeRefTable) xmlFreeRefTable __attribute((alias("xmlFreeRefTable__internal_alias"))); +#else +#ifndef xmlFreeRefTable +extern __typeof (xmlFreeRefTable) xmlFreeRefTable__internal_alias __attribute((visibility("hidden"))); +#define xmlFreeRefTable xmlFreeRefTable__internal_alias +#endif +#endif + +#if defined(LIBXML_PATTERN_ENABLED) +#ifdef bottom_pattern +#undef xmlFreeStreamCtxt +extern __typeof (xmlFreeStreamCtxt) xmlFreeStreamCtxt __attribute((alias("xmlFreeStreamCtxt__internal_alias"))); +#else +#ifndef xmlFreeStreamCtxt +extern __typeof (xmlFreeStreamCtxt) xmlFreeStreamCtxt__internal_alias __attribute((visibility("hidden"))); +#define xmlFreeStreamCtxt xmlFreeStreamCtxt__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlFreeTextReader +extern __typeof (xmlFreeTextReader) xmlFreeTextReader __attribute((alias("xmlFreeTextReader__internal_alias"))); +#else +#ifndef xmlFreeTextReader +extern __typeof (xmlFreeTextReader) xmlFreeTextReader__internal_alias __attribute((visibility("hidden"))); +#define xmlFreeTextReader xmlFreeTextReader__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlFreeTextWriter +extern __typeof (xmlFreeTextWriter) xmlFreeTextWriter __attribute((alias("xmlFreeTextWriter__internal_alias"))); +#else +#ifndef xmlFreeTextWriter +extern __typeof (xmlFreeTextWriter) xmlFreeTextWriter__internal_alias __attribute((visibility("hidden"))); +#define xmlFreeTextWriter xmlFreeTextWriter__internal_alias +#endif +#endif +#endif + +#ifdef bottom_uri +#undef xmlFreeURI +extern __typeof (xmlFreeURI) xmlFreeURI __attribute((alias("xmlFreeURI__internal_alias"))); +#else +#ifndef xmlFreeURI +extern __typeof (xmlFreeURI) xmlFreeURI__internal_alias __attribute((visibility("hidden"))); +#define xmlFreeURI xmlFreeURI__internal_alias +#endif +#endif + +#if defined(LIBXML_VALID_ENABLED) +#ifdef bottom_valid +#undef xmlFreeValidCtxt +extern __typeof (xmlFreeValidCtxt) xmlFreeValidCtxt __attribute((alias("xmlFreeValidCtxt__internal_alias"))); +#else +#ifndef xmlFreeValidCtxt +extern __typeof (xmlFreeValidCtxt) xmlFreeValidCtxt__internal_alias __attribute((visibility("hidden"))); +#define xmlFreeValidCtxt xmlFreeValidCtxt__internal_alias +#endif +#endif +#endif + +#ifdef bottom_xmlmemory +#undef xmlGcMemGet +extern __typeof (xmlGcMemGet) xmlGcMemGet __attribute((alias("xmlGcMemGet__internal_alias"))); +#else +#ifndef xmlGcMemGet +extern __typeof (xmlGcMemGet) xmlGcMemGet__internal_alias __attribute((visibility("hidden"))); +#define xmlGcMemGet xmlGcMemGet__internal_alias +#endif +#endif + +#ifdef bottom_xmlmemory +#undef xmlGcMemSetup +extern __typeof (xmlGcMemSetup) xmlGcMemSetup __attribute((alias("xmlGcMemSetup__internal_alias"))); +#else +#ifndef xmlGcMemSetup +extern __typeof (xmlGcMemSetup) xmlGcMemSetup__internal_alias __attribute((visibility("hidden"))); +#define xmlGcMemSetup xmlGcMemSetup__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlGetBufferAllocationScheme +extern __typeof (xmlGetBufferAllocationScheme) xmlGetBufferAllocationScheme __attribute((alias("xmlGetBufferAllocationScheme__internal_alias"))); +#else +#ifndef xmlGetBufferAllocationScheme +extern __typeof (xmlGetBufferAllocationScheme) xmlGetBufferAllocationScheme__internal_alias __attribute((visibility("hidden"))); +#define xmlGetBufferAllocationScheme xmlGetBufferAllocationScheme__internal_alias +#endif +#endif + +#ifdef bottom_encoding +#undef xmlGetCharEncodingHandler +extern __typeof (xmlGetCharEncodingHandler) xmlGetCharEncodingHandler __attribute((alias("xmlGetCharEncodingHandler__internal_alias"))); +#else +#ifndef xmlGetCharEncodingHandler +extern __typeof (xmlGetCharEncodingHandler) xmlGetCharEncodingHandler__internal_alias __attribute((visibility("hidden"))); +#define xmlGetCharEncodingHandler xmlGetCharEncodingHandler__internal_alias +#endif +#endif + +#ifdef bottom_encoding +#undef xmlGetCharEncodingName +extern __typeof (xmlGetCharEncodingName) xmlGetCharEncodingName __attribute((alias("xmlGetCharEncodingName__internal_alias"))); +#else +#ifndef xmlGetCharEncodingName +extern __typeof (xmlGetCharEncodingName) xmlGetCharEncodingName__internal_alias __attribute((visibility("hidden"))); +#define xmlGetCharEncodingName xmlGetCharEncodingName__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlGetCompressMode +extern __typeof (xmlGetCompressMode) xmlGetCompressMode __attribute((alias("xmlGetCompressMode__internal_alias"))); +#else +#ifndef xmlGetCompressMode +extern __typeof (xmlGetCompressMode) xmlGetCompressMode__internal_alias __attribute((visibility("hidden"))); +#define xmlGetCompressMode xmlGetCompressMode__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlGetDocCompressMode +extern __typeof (xmlGetDocCompressMode) xmlGetDocCompressMode __attribute((alias("xmlGetDocCompressMode__internal_alias"))); +#else +#ifndef xmlGetDocCompressMode +extern __typeof (xmlGetDocCompressMode) xmlGetDocCompressMode__internal_alias __attribute((visibility("hidden"))); +#define xmlGetDocCompressMode xmlGetDocCompressMode__internal_alias +#endif +#endif + +#ifdef bottom_entities +#undef xmlGetDocEntity +extern __typeof (xmlGetDocEntity) xmlGetDocEntity __attribute((alias("xmlGetDocEntity__internal_alias"))); +#else +#ifndef xmlGetDocEntity +extern __typeof (xmlGetDocEntity) xmlGetDocEntity__internal_alias __attribute((visibility("hidden"))); +#define xmlGetDocEntity xmlGetDocEntity__internal_alias +#endif +#endif + +#ifdef bottom_valid +#undef xmlGetDtdAttrDesc +extern __typeof (xmlGetDtdAttrDesc) xmlGetDtdAttrDesc __attribute((alias("xmlGetDtdAttrDesc__internal_alias"))); +#else +#ifndef xmlGetDtdAttrDesc +extern __typeof (xmlGetDtdAttrDesc) xmlGetDtdAttrDesc__internal_alias __attribute((visibility("hidden"))); +#define xmlGetDtdAttrDesc xmlGetDtdAttrDesc__internal_alias +#endif +#endif + +#ifdef bottom_valid +#undef xmlGetDtdElementDesc +extern __typeof (xmlGetDtdElementDesc) xmlGetDtdElementDesc __attribute((alias("xmlGetDtdElementDesc__internal_alias"))); +#else +#ifndef xmlGetDtdElementDesc +extern __typeof (xmlGetDtdElementDesc) xmlGetDtdElementDesc__internal_alias __attribute((visibility("hidden"))); +#define xmlGetDtdElementDesc xmlGetDtdElementDesc__internal_alias +#endif +#endif + +#ifdef bottom_entities +#undef xmlGetDtdEntity +extern __typeof (xmlGetDtdEntity) xmlGetDtdEntity __attribute((alias("xmlGetDtdEntity__internal_alias"))); +#else +#ifndef xmlGetDtdEntity +extern __typeof (xmlGetDtdEntity) xmlGetDtdEntity__internal_alias __attribute((visibility("hidden"))); +#define xmlGetDtdEntity xmlGetDtdEntity__internal_alias +#endif +#endif + +#ifdef bottom_valid +#undef xmlGetDtdNotationDesc +extern __typeof (xmlGetDtdNotationDesc) xmlGetDtdNotationDesc __attribute((alias("xmlGetDtdNotationDesc__internal_alias"))); +#else +#ifndef xmlGetDtdNotationDesc +extern __typeof (xmlGetDtdNotationDesc) xmlGetDtdNotationDesc__internal_alias __attribute((visibility("hidden"))); +#define xmlGetDtdNotationDesc xmlGetDtdNotationDesc__internal_alias +#endif +#endif + +#ifdef bottom_valid +#undef xmlGetDtdQAttrDesc +extern __typeof (xmlGetDtdQAttrDesc) xmlGetDtdQAttrDesc __attribute((alias("xmlGetDtdQAttrDesc__internal_alias"))); +#else +#ifndef xmlGetDtdQAttrDesc +extern __typeof (xmlGetDtdQAttrDesc) xmlGetDtdQAttrDesc__internal_alias __attribute((visibility("hidden"))); +#define xmlGetDtdQAttrDesc xmlGetDtdQAttrDesc__internal_alias +#endif +#endif + +#ifdef bottom_valid +#undef xmlGetDtdQElementDesc +extern __typeof (xmlGetDtdQElementDesc) xmlGetDtdQElementDesc __attribute((alias("xmlGetDtdQElementDesc__internal_alias"))); +#else +#ifndef xmlGetDtdQElementDesc +extern __typeof (xmlGetDtdQElementDesc) xmlGetDtdQElementDesc__internal_alias __attribute((visibility("hidden"))); +#define xmlGetDtdQElementDesc xmlGetDtdQElementDesc__internal_alias +#endif +#endif + +#ifdef bottom_encoding +#undef xmlGetEncodingAlias +extern __typeof (xmlGetEncodingAlias) xmlGetEncodingAlias __attribute((alias("xmlGetEncodingAlias__internal_alias"))); +#else +#ifndef xmlGetEncodingAlias +extern __typeof (xmlGetEncodingAlias) xmlGetEncodingAlias__internal_alias __attribute((visibility("hidden"))); +#define xmlGetEncodingAlias xmlGetEncodingAlias__internal_alias +#endif +#endif + +#ifdef bottom_xmlIO +#undef xmlGetExternalEntityLoader +extern __typeof (xmlGetExternalEntityLoader) xmlGetExternalEntityLoader __attribute((alias("xmlGetExternalEntityLoader__internal_alias"))); +#else +#ifndef xmlGetExternalEntityLoader +extern __typeof (xmlGetExternalEntityLoader) xmlGetExternalEntityLoader__internal_alias __attribute((visibility("hidden"))); +#define xmlGetExternalEntityLoader xmlGetExternalEntityLoader__internal_alias +#endif +#endif + +#if defined(LIBXML_LEGACY_ENABLED) +#ifdef bottom_legacy +#undef xmlGetFeature +extern __typeof (xmlGetFeature) xmlGetFeature __attribute((alias("xmlGetFeature__internal_alias"))); +#else +#ifndef xmlGetFeature +extern __typeof (xmlGetFeature) xmlGetFeature__internal_alias __attribute((visibility("hidden"))); +#define xmlGetFeature xmlGetFeature__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_LEGACY_ENABLED) +#ifdef bottom_legacy +#undef xmlGetFeaturesList +extern __typeof (xmlGetFeaturesList) xmlGetFeaturesList __attribute((alias("xmlGetFeaturesList__internal_alias"))); +#else +#ifndef xmlGetFeaturesList +extern __typeof (xmlGetFeaturesList) xmlGetFeaturesList__internal_alias __attribute((visibility("hidden"))); +#define xmlGetFeaturesList xmlGetFeaturesList__internal_alias +#endif +#endif +#endif + +#ifdef bottom_threads +#undef xmlGetGlobalState +extern __typeof (xmlGetGlobalState) xmlGetGlobalState __attribute((alias("xmlGetGlobalState__internal_alias"))); +#else +#ifndef xmlGetGlobalState +extern __typeof (xmlGetGlobalState) xmlGetGlobalState__internal_alias __attribute((visibility("hidden"))); +#define xmlGetGlobalState xmlGetGlobalState__internal_alias +#endif +#endif + +#ifdef bottom_valid +#undef xmlGetID +extern __typeof (xmlGetID) xmlGetID __attribute((alias("xmlGetID__internal_alias"))); +#else +#ifndef xmlGetID +extern __typeof (xmlGetID) xmlGetID__internal_alias __attribute((visibility("hidden"))); +#define xmlGetID xmlGetID__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlGetIntSubset +extern __typeof (xmlGetIntSubset) xmlGetIntSubset __attribute((alias("xmlGetIntSubset__internal_alias"))); +#else +#ifndef xmlGetIntSubset +extern __typeof (xmlGetIntSubset) xmlGetIntSubset__internal_alias __attribute((visibility("hidden"))); +#define xmlGetIntSubset xmlGetIntSubset__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlGetLastChild +extern __typeof (xmlGetLastChild) xmlGetLastChild __attribute((alias("xmlGetLastChild__internal_alias"))); +#else +#ifndef xmlGetLastChild +extern __typeof (xmlGetLastChild) xmlGetLastChild__internal_alias __attribute((visibility("hidden"))); +#define xmlGetLastChild xmlGetLastChild__internal_alias +#endif +#endif + +#ifdef bottom_error +#undef xmlGetLastError +extern __typeof (xmlGetLastError) xmlGetLastError __attribute((alias("xmlGetLastError__internal_alias"))); +#else +#ifndef xmlGetLastError +extern __typeof (xmlGetLastError) xmlGetLastError__internal_alias __attribute((visibility("hidden"))); +#define xmlGetLastError xmlGetLastError__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlGetLineNo +extern __typeof (xmlGetLineNo) xmlGetLineNo __attribute((alias("xmlGetLineNo__internal_alias"))); +#else +#ifndef xmlGetLineNo +extern __typeof (xmlGetLineNo) xmlGetLineNo__internal_alias __attribute((visibility("hidden"))); +#define xmlGetLineNo xmlGetLineNo__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlGetNoNsProp +extern __typeof (xmlGetNoNsProp) xmlGetNoNsProp __attribute((alias("xmlGetNoNsProp__internal_alias"))); +#else +#ifndef xmlGetNoNsProp +extern __typeof (xmlGetNoNsProp) xmlGetNoNsProp__internal_alias __attribute((visibility("hidden"))); +#define xmlGetNoNsProp xmlGetNoNsProp__internal_alias +#endif +#endif + +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_DEBUG_ENABLED) +#ifdef bottom_tree +#undef xmlGetNodePath +extern __typeof (xmlGetNodePath) xmlGetNodePath __attribute((alias("xmlGetNodePath__internal_alias"))); +#else +#ifndef xmlGetNodePath +extern __typeof (xmlGetNodePath) xmlGetNodePath__internal_alias __attribute((visibility("hidden"))); +#define xmlGetNodePath xmlGetNodePath__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_tree +#undef xmlGetNsList +extern __typeof (xmlGetNsList) xmlGetNsList __attribute((alias("xmlGetNsList__internal_alias"))); +#else +#ifndef xmlGetNsList +extern __typeof (xmlGetNsList) xmlGetNsList__internal_alias __attribute((visibility("hidden"))); +#define xmlGetNsList xmlGetNsList__internal_alias +#endif +#endif +#endif + +#ifdef bottom_tree +#undef xmlGetNsProp +extern __typeof (xmlGetNsProp) xmlGetNsProp __attribute((alias("xmlGetNsProp__internal_alias"))); +#else +#ifndef xmlGetNsProp +extern __typeof (xmlGetNsProp) xmlGetNsProp__internal_alias __attribute((visibility("hidden"))); +#define xmlGetNsProp xmlGetNsProp__internal_alias +#endif +#endif + +#ifdef bottom_entities +#undef xmlGetParameterEntity +extern __typeof (xmlGetParameterEntity) xmlGetParameterEntity __attribute((alias("xmlGetParameterEntity__internal_alias"))); +#else +#ifndef xmlGetParameterEntity +extern __typeof (xmlGetParameterEntity) xmlGetParameterEntity__internal_alias __attribute((visibility("hidden"))); +#define xmlGetParameterEntity xmlGetParameterEntity__internal_alias +#endif +#endif + +#ifdef bottom_entities +#undef xmlGetPredefinedEntity +extern __typeof (xmlGetPredefinedEntity) xmlGetPredefinedEntity __attribute((alias("xmlGetPredefinedEntity__internal_alias"))); +#else +#ifndef xmlGetPredefinedEntity +extern __typeof (xmlGetPredefinedEntity) xmlGetPredefinedEntity__internal_alias __attribute((visibility("hidden"))); +#define xmlGetPredefinedEntity xmlGetPredefinedEntity__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlGetProp +extern __typeof (xmlGetProp) xmlGetProp __attribute((alias("xmlGetProp__internal_alias"))); +#else +#ifndef xmlGetProp +extern __typeof (xmlGetProp) xmlGetProp__internal_alias __attribute((visibility("hidden"))); +#define xmlGetProp xmlGetProp__internal_alias +#endif +#endif + +#ifdef bottom_valid +#undef xmlGetRefs +extern __typeof (xmlGetRefs) xmlGetRefs __attribute((alias("xmlGetRefs__internal_alias"))); +#else +#ifndef xmlGetRefs +extern __typeof (xmlGetRefs) xmlGetRefs__internal_alias __attribute((visibility("hidden"))); +#define xmlGetRefs xmlGetRefs__internal_alias +#endif +#endif + +#ifdef bottom_threads +#undef xmlGetThreadId +extern __typeof (xmlGetThreadId) xmlGetThreadId __attribute((alias("xmlGetThreadId__internal_alias"))); +#else +#ifndef xmlGetThreadId +extern __typeof (xmlGetThreadId) xmlGetThreadId__internal_alias __attribute((visibility("hidden"))); +#define xmlGetThreadId xmlGetThreadId__internal_alias +#endif +#endif + +#ifdef bottom_xmlstring +#undef xmlGetUTF8Char +extern __typeof (xmlGetUTF8Char) xmlGetUTF8Char __attribute((alias("xmlGetUTF8Char__internal_alias"))); +#else +#ifndef xmlGetUTF8Char +extern __typeof (xmlGetUTF8Char) xmlGetUTF8Char__internal_alias __attribute((visibility("hidden"))); +#define xmlGetUTF8Char xmlGetUTF8Char__internal_alias +#endif +#endif + +#if defined(LIBXML_LEGACY_ENABLED) +#ifdef bottom_legacy +#undef xmlHandleEntity +extern __typeof (xmlHandleEntity) xmlHandleEntity __attribute((alias("xmlHandleEntity__internal_alias"))); +#else +#ifndef xmlHandleEntity +extern __typeof (xmlHandleEntity) xmlHandleEntity__internal_alias __attribute((visibility("hidden"))); +#define xmlHandleEntity xmlHandleEntity__internal_alias +#endif +#endif +#endif + +#ifdef bottom_parser +#undef xmlHasFeature +extern __typeof (xmlHasFeature) xmlHasFeature __attribute((alias("xmlHasFeature__internal_alias"))); +#else +#ifndef xmlHasFeature +extern __typeof (xmlHasFeature) xmlHasFeature__internal_alias __attribute((visibility("hidden"))); +#define xmlHasFeature xmlHasFeature__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlHasNsProp +extern __typeof (xmlHasNsProp) xmlHasNsProp __attribute((alias("xmlHasNsProp__internal_alias"))); +#else +#ifndef xmlHasNsProp +extern __typeof (xmlHasNsProp) xmlHasNsProp__internal_alias __attribute((visibility("hidden"))); +#define xmlHasNsProp xmlHasNsProp__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlHasProp +extern __typeof (xmlHasProp) xmlHasProp __attribute((alias("xmlHasProp__internal_alias"))); +#else +#ifndef xmlHasProp +extern __typeof (xmlHasProp) xmlHasProp__internal_alias __attribute((visibility("hidden"))); +#define xmlHasProp xmlHasProp__internal_alias +#endif +#endif + +#ifdef bottom_hash +#undef xmlHashAddEntry +extern __typeof (xmlHashAddEntry) xmlHashAddEntry __attribute((alias("xmlHashAddEntry__internal_alias"))); +#else +#ifndef xmlHashAddEntry +extern __typeof (xmlHashAddEntry) xmlHashAddEntry__internal_alias __attribute((visibility("hidden"))); +#define xmlHashAddEntry xmlHashAddEntry__internal_alias +#endif +#endif + +#ifdef bottom_hash +#undef xmlHashAddEntry2 +extern __typeof (xmlHashAddEntry2) xmlHashAddEntry2 __attribute((alias("xmlHashAddEntry2__internal_alias"))); +#else +#ifndef xmlHashAddEntry2 +extern __typeof (xmlHashAddEntry2) xmlHashAddEntry2__internal_alias __attribute((visibility("hidden"))); +#define xmlHashAddEntry2 xmlHashAddEntry2__internal_alias +#endif +#endif + +#ifdef bottom_hash +#undef xmlHashAddEntry3 +extern __typeof (xmlHashAddEntry3) xmlHashAddEntry3 __attribute((alias("xmlHashAddEntry3__internal_alias"))); +#else +#ifndef xmlHashAddEntry3 +extern __typeof (xmlHashAddEntry3) xmlHashAddEntry3__internal_alias __attribute((visibility("hidden"))); +#define xmlHashAddEntry3 xmlHashAddEntry3__internal_alias +#endif +#endif + +#ifdef bottom_hash +#undef xmlHashCopy +extern __typeof (xmlHashCopy) xmlHashCopy __attribute((alias("xmlHashCopy__internal_alias"))); +#else +#ifndef xmlHashCopy +extern __typeof (xmlHashCopy) xmlHashCopy__internal_alias __attribute((visibility("hidden"))); +#define xmlHashCopy xmlHashCopy__internal_alias +#endif +#endif + +#ifdef bottom_hash +#undef xmlHashCreate +extern __typeof (xmlHashCreate) xmlHashCreate __attribute((alias("xmlHashCreate__internal_alias"))); +#else +#ifndef xmlHashCreate +extern __typeof (xmlHashCreate) xmlHashCreate__internal_alias __attribute((visibility("hidden"))); +#define xmlHashCreate xmlHashCreate__internal_alias +#endif +#endif + +#ifdef bottom_hash +#undef xmlHashCreateDict +extern __typeof (xmlHashCreateDict) xmlHashCreateDict __attribute((alias("xmlHashCreateDict__internal_alias"))); +#else +#ifndef xmlHashCreateDict +extern __typeof (xmlHashCreateDict) xmlHashCreateDict__internal_alias __attribute((visibility("hidden"))); +#define xmlHashCreateDict xmlHashCreateDict__internal_alias +#endif +#endif + +#ifdef bottom_hash +#undef xmlHashFree +extern __typeof (xmlHashFree) xmlHashFree __attribute((alias("xmlHashFree__internal_alias"))); +#else +#ifndef xmlHashFree +extern __typeof (xmlHashFree) xmlHashFree__internal_alias __attribute((visibility("hidden"))); +#define xmlHashFree xmlHashFree__internal_alias +#endif +#endif + +#ifdef bottom_hash +#undef xmlHashLookup +extern __typeof (xmlHashLookup) xmlHashLookup __attribute((alias("xmlHashLookup__internal_alias"))); +#else +#ifndef xmlHashLookup +extern __typeof (xmlHashLookup) xmlHashLookup__internal_alias __attribute((visibility("hidden"))); +#define xmlHashLookup xmlHashLookup__internal_alias +#endif +#endif + +#ifdef bottom_hash +#undef xmlHashLookup2 +extern __typeof (xmlHashLookup2) xmlHashLookup2 __attribute((alias("xmlHashLookup2__internal_alias"))); +#else +#ifndef xmlHashLookup2 +extern __typeof (xmlHashLookup2) xmlHashLookup2__internal_alias __attribute((visibility("hidden"))); +#define xmlHashLookup2 xmlHashLookup2__internal_alias +#endif +#endif + +#ifdef bottom_hash +#undef xmlHashLookup3 +extern __typeof (xmlHashLookup3) xmlHashLookup3 __attribute((alias("xmlHashLookup3__internal_alias"))); +#else +#ifndef xmlHashLookup3 +extern __typeof (xmlHashLookup3) xmlHashLookup3__internal_alias __attribute((visibility("hidden"))); +#define xmlHashLookup3 xmlHashLookup3__internal_alias +#endif +#endif + +#ifdef bottom_hash +#undef xmlHashQLookup +extern __typeof (xmlHashQLookup) xmlHashQLookup __attribute((alias("xmlHashQLookup__internal_alias"))); +#else +#ifndef xmlHashQLookup +extern __typeof (xmlHashQLookup) xmlHashQLookup__internal_alias __attribute((visibility("hidden"))); +#define xmlHashQLookup xmlHashQLookup__internal_alias +#endif +#endif + +#ifdef bottom_hash +#undef xmlHashQLookup2 +extern __typeof (xmlHashQLookup2) xmlHashQLookup2 __attribute((alias("xmlHashQLookup2__internal_alias"))); +#else +#ifndef xmlHashQLookup2 +extern __typeof (xmlHashQLookup2) xmlHashQLookup2__internal_alias __attribute((visibility("hidden"))); +#define xmlHashQLookup2 xmlHashQLookup2__internal_alias +#endif +#endif + +#ifdef bottom_hash +#undef xmlHashQLookup3 +extern __typeof (xmlHashQLookup3) xmlHashQLookup3 __attribute((alias("xmlHashQLookup3__internal_alias"))); +#else +#ifndef xmlHashQLookup3 +extern __typeof (xmlHashQLookup3) xmlHashQLookup3__internal_alias __attribute((visibility("hidden"))); +#define xmlHashQLookup3 xmlHashQLookup3__internal_alias +#endif +#endif + +#ifdef bottom_hash +#undef xmlHashRemoveEntry +extern __typeof (xmlHashRemoveEntry) xmlHashRemoveEntry __attribute((alias("xmlHashRemoveEntry__internal_alias"))); +#else +#ifndef xmlHashRemoveEntry +extern __typeof (xmlHashRemoveEntry) xmlHashRemoveEntry__internal_alias __attribute((visibility("hidden"))); +#define xmlHashRemoveEntry xmlHashRemoveEntry__internal_alias +#endif +#endif + +#ifdef bottom_hash +#undef xmlHashRemoveEntry2 +extern __typeof (xmlHashRemoveEntry2) xmlHashRemoveEntry2 __attribute((alias("xmlHashRemoveEntry2__internal_alias"))); +#else +#ifndef xmlHashRemoveEntry2 +extern __typeof (xmlHashRemoveEntry2) xmlHashRemoveEntry2__internal_alias __attribute((visibility("hidden"))); +#define xmlHashRemoveEntry2 xmlHashRemoveEntry2__internal_alias +#endif +#endif + +#ifdef bottom_hash +#undef xmlHashRemoveEntry3 +extern __typeof (xmlHashRemoveEntry3) xmlHashRemoveEntry3 __attribute((alias("xmlHashRemoveEntry3__internal_alias"))); +#else +#ifndef xmlHashRemoveEntry3 +extern __typeof (xmlHashRemoveEntry3) xmlHashRemoveEntry3__internal_alias __attribute((visibility("hidden"))); +#define xmlHashRemoveEntry3 xmlHashRemoveEntry3__internal_alias +#endif +#endif + +#ifdef bottom_hash +#undef xmlHashScan +extern __typeof (xmlHashScan) xmlHashScan __attribute((alias("xmlHashScan__internal_alias"))); +#else +#ifndef xmlHashScan +extern __typeof (xmlHashScan) xmlHashScan__internal_alias __attribute((visibility("hidden"))); +#define xmlHashScan xmlHashScan__internal_alias +#endif +#endif + +#ifdef bottom_hash +#undef xmlHashScan3 +extern __typeof (xmlHashScan3) xmlHashScan3 __attribute((alias("xmlHashScan3__internal_alias"))); +#else +#ifndef xmlHashScan3 +extern __typeof (xmlHashScan3) xmlHashScan3__internal_alias __attribute((visibility("hidden"))); +#define xmlHashScan3 xmlHashScan3__internal_alias +#endif +#endif + +#ifdef bottom_hash +#undef xmlHashScanFull +extern __typeof (xmlHashScanFull) xmlHashScanFull __attribute((alias("xmlHashScanFull__internal_alias"))); +#else +#ifndef xmlHashScanFull +extern __typeof (xmlHashScanFull) xmlHashScanFull__internal_alias __attribute((visibility("hidden"))); +#define xmlHashScanFull xmlHashScanFull__internal_alias +#endif +#endif + +#ifdef bottom_hash +#undef xmlHashScanFull3 +extern __typeof (xmlHashScanFull3) xmlHashScanFull3 __attribute((alias("xmlHashScanFull3__internal_alias"))); +#else +#ifndef xmlHashScanFull3 +extern __typeof (xmlHashScanFull3) xmlHashScanFull3__internal_alias __attribute((visibility("hidden"))); +#define xmlHashScanFull3 xmlHashScanFull3__internal_alias +#endif +#endif + +#ifdef bottom_hash +#undef xmlHashSize +extern __typeof (xmlHashSize) xmlHashSize __attribute((alias("xmlHashSize__internal_alias"))); +#else +#ifndef xmlHashSize +extern __typeof (xmlHashSize) xmlHashSize__internal_alias __attribute((visibility("hidden"))); +#define xmlHashSize xmlHashSize__internal_alias +#endif +#endif + +#ifdef bottom_hash +#undef xmlHashUpdateEntry +extern __typeof (xmlHashUpdateEntry) xmlHashUpdateEntry __attribute((alias("xmlHashUpdateEntry__internal_alias"))); +#else +#ifndef xmlHashUpdateEntry +extern __typeof (xmlHashUpdateEntry) xmlHashUpdateEntry__internal_alias __attribute((visibility("hidden"))); +#define xmlHashUpdateEntry xmlHashUpdateEntry__internal_alias +#endif +#endif + +#ifdef bottom_hash +#undef xmlHashUpdateEntry2 +extern __typeof (xmlHashUpdateEntry2) xmlHashUpdateEntry2 __attribute((alias("xmlHashUpdateEntry2__internal_alias"))); +#else +#ifndef xmlHashUpdateEntry2 +extern __typeof (xmlHashUpdateEntry2) xmlHashUpdateEntry2__internal_alias __attribute((visibility("hidden"))); +#define xmlHashUpdateEntry2 xmlHashUpdateEntry2__internal_alias +#endif +#endif + +#ifdef bottom_hash +#undef xmlHashUpdateEntry3 +extern __typeof (xmlHashUpdateEntry3) xmlHashUpdateEntry3 __attribute((alias("xmlHashUpdateEntry3__internal_alias"))); +#else +#ifndef xmlHashUpdateEntry3 +extern __typeof (xmlHashUpdateEntry3) xmlHashUpdateEntry3__internal_alias __attribute((visibility("hidden"))); +#define xmlHashUpdateEntry3 xmlHashUpdateEntry3__internal_alias +#endif +#endif + +#if defined(LIBXML_FTP_ENABLED) +#ifdef bottom_xmlIO +#undef xmlIOFTPClose +extern __typeof (xmlIOFTPClose) xmlIOFTPClose __attribute((alias("xmlIOFTPClose__internal_alias"))); +#else +#ifndef xmlIOFTPClose +extern __typeof (xmlIOFTPClose) xmlIOFTPClose__internal_alias __attribute((visibility("hidden"))); +#define xmlIOFTPClose xmlIOFTPClose__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_FTP_ENABLED) +#ifdef bottom_xmlIO +#undef xmlIOFTPMatch +extern __typeof (xmlIOFTPMatch) xmlIOFTPMatch __attribute((alias("xmlIOFTPMatch__internal_alias"))); +#else +#ifndef xmlIOFTPMatch +extern __typeof (xmlIOFTPMatch) xmlIOFTPMatch__internal_alias __attribute((visibility("hidden"))); +#define xmlIOFTPMatch xmlIOFTPMatch__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_FTP_ENABLED) +#ifdef bottom_xmlIO +#undef xmlIOFTPOpen +extern __typeof (xmlIOFTPOpen) xmlIOFTPOpen __attribute((alias("xmlIOFTPOpen__internal_alias"))); +#else +#ifndef xmlIOFTPOpen +extern __typeof (xmlIOFTPOpen) xmlIOFTPOpen__internal_alias __attribute((visibility("hidden"))); +#define xmlIOFTPOpen xmlIOFTPOpen__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_FTP_ENABLED) +#ifdef bottom_xmlIO +#undef xmlIOFTPRead +extern __typeof (xmlIOFTPRead) xmlIOFTPRead __attribute((alias("xmlIOFTPRead__internal_alias"))); +#else +#ifndef xmlIOFTPRead +extern __typeof (xmlIOFTPRead) xmlIOFTPRead__internal_alias __attribute((visibility("hidden"))); +#define xmlIOFTPRead xmlIOFTPRead__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTTP_ENABLED) +#ifdef bottom_xmlIO +#undef xmlIOHTTPClose +extern __typeof (xmlIOHTTPClose) xmlIOHTTPClose __attribute((alias("xmlIOHTTPClose__internal_alias"))); +#else +#ifndef xmlIOHTTPClose +extern __typeof (xmlIOHTTPClose) xmlIOHTTPClose__internal_alias __attribute((visibility("hidden"))); +#define xmlIOHTTPClose xmlIOHTTPClose__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTTP_ENABLED) +#ifdef bottom_xmlIO +#undef xmlIOHTTPMatch +extern __typeof (xmlIOHTTPMatch) xmlIOHTTPMatch __attribute((alias("xmlIOHTTPMatch__internal_alias"))); +#else +#ifndef xmlIOHTTPMatch +extern __typeof (xmlIOHTTPMatch) xmlIOHTTPMatch__internal_alias __attribute((visibility("hidden"))); +#define xmlIOHTTPMatch xmlIOHTTPMatch__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTTP_ENABLED) +#ifdef bottom_xmlIO +#undef xmlIOHTTPOpen +extern __typeof (xmlIOHTTPOpen) xmlIOHTTPOpen __attribute((alias("xmlIOHTTPOpen__internal_alias"))); +#else +#ifndef xmlIOHTTPOpen +extern __typeof (xmlIOHTTPOpen) xmlIOHTTPOpen__internal_alias __attribute((visibility("hidden"))); +#define xmlIOHTTPOpen xmlIOHTTPOpen__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTTP_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_xmlIO +#undef xmlIOHTTPOpenW +extern __typeof (xmlIOHTTPOpenW) xmlIOHTTPOpenW __attribute((alias("xmlIOHTTPOpenW__internal_alias"))); +#else +#ifndef xmlIOHTTPOpenW +extern __typeof (xmlIOHTTPOpenW) xmlIOHTTPOpenW__internal_alias __attribute((visibility("hidden"))); +#define xmlIOHTTPOpenW xmlIOHTTPOpenW__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTTP_ENABLED) +#ifdef bottom_xmlIO +#undef xmlIOHTTPRead +extern __typeof (xmlIOHTTPRead) xmlIOHTTPRead __attribute((alias("xmlIOHTTPRead__internal_alias"))); +#else +#ifndef xmlIOHTTPRead +extern __typeof (xmlIOHTTPRead) xmlIOHTTPRead__internal_alias __attribute((visibility("hidden"))); +#define xmlIOHTTPRead xmlIOHTTPRead__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_VALID_ENABLED) +#ifdef bottom_parser +#undef xmlIOParseDTD +extern __typeof (xmlIOParseDTD) xmlIOParseDTD __attribute((alias("xmlIOParseDTD__internal_alias"))); +#else +#ifndef xmlIOParseDTD +extern __typeof (xmlIOParseDTD) xmlIOParseDTD__internal_alias __attribute((visibility("hidden"))); +#define xmlIOParseDTD xmlIOParseDTD__internal_alias +#endif +#endif +#endif + +#ifdef bottom_encoding +#undef xmlInitCharEncodingHandlers +extern __typeof (xmlInitCharEncodingHandlers) xmlInitCharEncodingHandlers __attribute((alias("xmlInitCharEncodingHandlers__internal_alias"))); +#else +#ifndef xmlInitCharEncodingHandlers +extern __typeof (xmlInitCharEncodingHandlers) xmlInitCharEncodingHandlers__internal_alias __attribute((visibility("hidden"))); +#define xmlInitCharEncodingHandlers xmlInitCharEncodingHandlers__internal_alias +#endif +#endif + +#ifdef bottom_globals +#undef xmlInitGlobals +extern __typeof (xmlInitGlobals) xmlInitGlobals __attribute((alias("xmlInitGlobals__internal_alias"))); +#else +#ifndef xmlInitGlobals +extern __typeof (xmlInitGlobals) xmlInitGlobals__internal_alias __attribute((visibility("hidden"))); +#define xmlInitGlobals xmlInitGlobals__internal_alias +#endif +#endif + +#ifdef bottom_xmlmemory +#undef xmlInitMemory +extern __typeof (xmlInitMemory) xmlInitMemory __attribute((alias("xmlInitMemory__internal_alias"))); +#else +#ifndef xmlInitMemory +extern __typeof (xmlInitMemory) xmlInitMemory__internal_alias __attribute((visibility("hidden"))); +#define xmlInitMemory xmlInitMemory__internal_alias +#endif +#endif + +#ifdef bottom_parserInternals +#undef xmlInitNodeInfoSeq +extern __typeof (xmlInitNodeInfoSeq) xmlInitNodeInfoSeq __attribute((alias("xmlInitNodeInfoSeq__internal_alias"))); +#else +#ifndef xmlInitNodeInfoSeq +extern __typeof (xmlInitNodeInfoSeq) xmlInitNodeInfoSeq__internal_alias __attribute((visibility("hidden"))); +#define xmlInitNodeInfoSeq xmlInitNodeInfoSeq__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef xmlInitParser +extern __typeof (xmlInitParser) xmlInitParser __attribute((alias("xmlInitParser__internal_alias"))); +#else +#ifndef xmlInitParser +extern __typeof (xmlInitParser) xmlInitParser__internal_alias __attribute((visibility("hidden"))); +#define xmlInitParser xmlInitParser__internal_alias +#endif +#endif + +#ifdef bottom_parserInternals +#undef xmlInitParserCtxt +extern __typeof (xmlInitParserCtxt) xmlInitParserCtxt __attribute((alias("xmlInitParserCtxt__internal_alias"))); +#else +#ifndef xmlInitParserCtxt +extern __typeof (xmlInitParserCtxt) xmlInitParserCtxt__internal_alias __attribute((visibility("hidden"))); +#define xmlInitParserCtxt xmlInitParserCtxt__internal_alias +#endif +#endif + +#ifdef bottom_threads +#undef xmlInitThreads +extern __typeof (xmlInitThreads) xmlInitThreads __attribute((alias("xmlInitThreads__internal_alias"))); +#else +#ifndef xmlInitThreads +extern __typeof (xmlInitThreads) xmlInitThreads__internal_alias __attribute((visibility("hidden"))); +#define xmlInitThreads xmlInitThreads__internal_alias +#endif +#endif + +#if defined(LIBXML_CATALOG_ENABLED) +#ifdef bottom_catalog +#undef xmlInitializeCatalog +extern __typeof (xmlInitializeCatalog) xmlInitializeCatalog __attribute((alias("xmlInitializeCatalog__internal_alias"))); +#else +#ifndef xmlInitializeCatalog +extern __typeof (xmlInitializeCatalog) xmlInitializeCatalog__internal_alias __attribute((visibility("hidden"))); +#define xmlInitializeCatalog xmlInitializeCatalog__internal_alias +#endif +#endif +#endif + +#ifdef bottom_dict +#undef xmlInitializeDict +extern __typeof (xmlInitializeDict) xmlInitializeDict __attribute((alias("xmlInitializeDict__internal_alias"))); +#else +#ifndef xmlInitializeDict +extern __typeof (xmlInitializeDict) xmlInitializeDict__internal_alias __attribute((visibility("hidden"))); +#define xmlInitializeDict xmlInitializeDict__internal_alias +#endif +#endif + +#ifdef bottom_globals +#undef xmlInitializeGlobalState +extern __typeof (xmlInitializeGlobalState) xmlInitializeGlobalState __attribute((alias("xmlInitializeGlobalState__internal_alias"))); +#else +#ifndef xmlInitializeGlobalState +extern __typeof (xmlInitializeGlobalState) xmlInitializeGlobalState__internal_alias __attribute((visibility("hidden"))); +#define xmlInitializeGlobalState xmlInitializeGlobalState__internal_alias +#endif +#endif + +#if defined(LIBXML_LEGACY_ENABLED) +#ifdef bottom_legacy +#undef xmlInitializePredefinedEntities +extern __typeof (xmlInitializePredefinedEntities) xmlInitializePredefinedEntities __attribute((alias("xmlInitializePredefinedEntities__internal_alias"))); +#else +#ifndef xmlInitializePredefinedEntities +extern __typeof (xmlInitializePredefinedEntities) xmlInitializePredefinedEntities__internal_alias __attribute((visibility("hidden"))); +#define xmlInitializePredefinedEntities xmlInitializePredefinedEntities__internal_alias +#endif +#endif +#endif + +#ifdef bottom_chvalid +#undef xmlIsBaseChar +extern __typeof (xmlIsBaseChar) xmlIsBaseChar __attribute((alias("xmlIsBaseChar__internal_alias"))); +#else +#ifndef xmlIsBaseChar +extern __typeof (xmlIsBaseChar) xmlIsBaseChar__internal_alias __attribute((visibility("hidden"))); +#define xmlIsBaseChar xmlIsBaseChar__internal_alias +#endif +#endif + +#ifdef bottom_chvalid +#undef xmlIsBlank +extern __typeof (xmlIsBlank) xmlIsBlank __attribute((alias("xmlIsBlank__internal_alias"))); +#else +#ifndef xmlIsBlank +extern __typeof (xmlIsBlank) xmlIsBlank__internal_alias __attribute((visibility("hidden"))); +#define xmlIsBlank xmlIsBlank__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlIsBlankNode +extern __typeof (xmlIsBlankNode) xmlIsBlankNode __attribute((alias("xmlIsBlankNode__internal_alias"))); +#else +#ifndef xmlIsBlankNode +extern __typeof (xmlIsBlankNode) xmlIsBlankNode__internal_alias __attribute((visibility("hidden"))); +#define xmlIsBlankNode xmlIsBlankNode__internal_alias +#endif +#endif + +#ifdef bottom_chvalid +#undef xmlIsChar +extern __typeof (xmlIsChar) xmlIsChar __attribute((alias("xmlIsChar__internal_alias"))); +#else +#ifndef xmlIsChar +extern __typeof (xmlIsChar) xmlIsChar__internal_alias __attribute((visibility("hidden"))); +#define xmlIsChar xmlIsChar__internal_alias +#endif +#endif + +#ifdef bottom_chvalid +#undef xmlIsCombining +extern __typeof (xmlIsCombining) xmlIsCombining __attribute((alias("xmlIsCombining__internal_alias"))); +#else +#ifndef xmlIsCombining +extern __typeof (xmlIsCombining) xmlIsCombining__internal_alias __attribute((visibility("hidden"))); +#define xmlIsCombining xmlIsCombining__internal_alias +#endif +#endif + +#ifdef bottom_chvalid +#undef xmlIsDigit +extern __typeof (xmlIsDigit) xmlIsDigit __attribute((alias("xmlIsDigit__internal_alias"))); +#else +#ifndef xmlIsDigit +extern __typeof (xmlIsDigit) xmlIsDigit__internal_alias __attribute((visibility("hidden"))); +#define xmlIsDigit xmlIsDigit__internal_alias +#endif +#endif + +#ifdef bottom_chvalid +#undef xmlIsExtender +extern __typeof (xmlIsExtender) xmlIsExtender __attribute((alias("xmlIsExtender__internal_alias"))); +#else +#ifndef xmlIsExtender +extern __typeof (xmlIsExtender) xmlIsExtender__internal_alias __attribute((visibility("hidden"))); +#define xmlIsExtender xmlIsExtender__internal_alias +#endif +#endif + +#ifdef bottom_valid +#undef xmlIsID +extern __typeof (xmlIsID) xmlIsID __attribute((alias("xmlIsID__internal_alias"))); +#else +#ifndef xmlIsID +extern __typeof (xmlIsID) xmlIsID__internal_alias __attribute((visibility("hidden"))); +#define xmlIsID xmlIsID__internal_alias +#endif +#endif + +#ifdef bottom_chvalid +#undef xmlIsIdeographic +extern __typeof (xmlIsIdeographic) xmlIsIdeographic __attribute((alias("xmlIsIdeographic__internal_alias"))); +#else +#ifndef xmlIsIdeographic +extern __typeof (xmlIsIdeographic) xmlIsIdeographic__internal_alias __attribute((visibility("hidden"))); +#define xmlIsIdeographic xmlIsIdeographic__internal_alias +#endif +#endif + +#ifdef bottom_parserInternals +#undef xmlIsLetter +extern __typeof (xmlIsLetter) xmlIsLetter __attribute((alias("xmlIsLetter__internal_alias"))); +#else +#ifndef xmlIsLetter +extern __typeof (xmlIsLetter) xmlIsLetter__internal_alias __attribute((visibility("hidden"))); +#define xmlIsLetter xmlIsLetter__internal_alias +#endif +#endif + +#ifdef bottom_threads +#undef xmlIsMainThread +extern __typeof (xmlIsMainThread) xmlIsMainThread __attribute((alias("xmlIsMainThread__internal_alias"))); +#else +#ifndef xmlIsMainThread +extern __typeof (xmlIsMainThread) xmlIsMainThread__internal_alias __attribute((visibility("hidden"))); +#define xmlIsMainThread xmlIsMainThread__internal_alias +#endif +#endif + +#ifdef bottom_valid +#undef xmlIsMixedElement +extern __typeof (xmlIsMixedElement) xmlIsMixedElement __attribute((alias("xmlIsMixedElement__internal_alias"))); +#else +#ifndef xmlIsMixedElement +extern __typeof (xmlIsMixedElement) xmlIsMixedElement__internal_alias __attribute((visibility("hidden"))); +#define xmlIsMixedElement xmlIsMixedElement__internal_alias +#endif +#endif + +#ifdef bottom_chvalid +#undef xmlIsPubidChar +extern __typeof (xmlIsPubidChar) xmlIsPubidChar __attribute((alias("xmlIsPubidChar__internal_alias"))); +#else +#ifndef xmlIsPubidChar +extern __typeof (xmlIsPubidChar) xmlIsPubidChar__internal_alias __attribute((visibility("hidden"))); +#define xmlIsPubidChar xmlIsPubidChar__internal_alias +#endif +#endif + +#ifdef bottom_valid +#undef xmlIsRef +extern __typeof (xmlIsRef) xmlIsRef __attribute((alias("xmlIsRef__internal_alias"))); +#else +#ifndef xmlIsRef +extern __typeof (xmlIsRef) xmlIsRef__internal_alias __attribute((visibility("hidden"))); +#define xmlIsRef xmlIsRef__internal_alias +#endif +#endif + +#ifdef bottom_xmlsave +#undef xmlIsXHTML +extern __typeof (xmlIsXHTML) xmlIsXHTML __attribute((alias("xmlIsXHTML__internal_alias"))); +#else +#ifndef xmlIsXHTML +extern __typeof (xmlIsXHTML) xmlIsXHTML__internal_alias __attribute((visibility("hidden"))); +#define xmlIsXHTML xmlIsXHTML__internal_alias +#endif +#endif + +#ifdef bottom_parserInternals +#undef xmlKeepBlanksDefault +extern __typeof (xmlKeepBlanksDefault) xmlKeepBlanksDefault __attribute((alias("xmlKeepBlanksDefault__internal_alias"))); +#else +#ifndef xmlKeepBlanksDefault +extern __typeof (xmlKeepBlanksDefault) xmlKeepBlanksDefault__internal_alias __attribute((visibility("hidden"))); +#define xmlKeepBlanksDefault xmlKeepBlanksDefault__internal_alias +#endif +#endif + +#if defined(LIBXML_TREE_ENABLED) +#ifdef bottom_tree +#undef xmlLastElementChild +extern __typeof (xmlLastElementChild) xmlLastElementChild __attribute((alias("xmlLastElementChild__internal_alias"))); +#else +#ifndef xmlLastElementChild +extern __typeof (xmlLastElementChild) xmlLastElementChild__internal_alias __attribute((visibility("hidden"))); +#define xmlLastElementChild xmlLastElementChild__internal_alias +#endif +#endif +#endif + +#ifdef bottom_parserInternals +#undef xmlLineNumbersDefault +extern __typeof (xmlLineNumbersDefault) xmlLineNumbersDefault __attribute((alias("xmlLineNumbersDefault__internal_alias"))); +#else +#ifndef xmlLineNumbersDefault +extern __typeof (xmlLineNumbersDefault) xmlLineNumbersDefault__internal_alias __attribute((visibility("hidden"))); +#define xmlLineNumbersDefault xmlLineNumbersDefault__internal_alias +#endif +#endif + +#ifdef bottom_list +#undef xmlLinkGetData +extern __typeof (xmlLinkGetData) xmlLinkGetData __attribute((alias("xmlLinkGetData__internal_alias"))); +#else +#ifndef xmlLinkGetData +extern __typeof (xmlLinkGetData) xmlLinkGetData__internal_alias __attribute((visibility("hidden"))); +#define xmlLinkGetData xmlLinkGetData__internal_alias +#endif +#endif + +#ifdef bottom_list +#undef xmlListAppend +extern __typeof (xmlListAppend) xmlListAppend __attribute((alias("xmlListAppend__internal_alias"))); +#else +#ifndef xmlListAppend +extern __typeof (xmlListAppend) xmlListAppend__internal_alias __attribute((visibility("hidden"))); +#define xmlListAppend xmlListAppend__internal_alias +#endif +#endif + +#ifdef bottom_list +#undef xmlListClear +extern __typeof (xmlListClear) xmlListClear __attribute((alias("xmlListClear__internal_alias"))); +#else +#ifndef xmlListClear +extern __typeof (xmlListClear) xmlListClear__internal_alias __attribute((visibility("hidden"))); +#define xmlListClear xmlListClear__internal_alias +#endif +#endif + +#ifdef bottom_list +#undef xmlListCopy +extern __typeof (xmlListCopy) xmlListCopy __attribute((alias("xmlListCopy__internal_alias"))); +#else +#ifndef xmlListCopy +extern __typeof (xmlListCopy) xmlListCopy__internal_alias __attribute((visibility("hidden"))); +#define xmlListCopy xmlListCopy__internal_alias +#endif +#endif + +#ifdef bottom_list +#undef xmlListCreate +extern __typeof (xmlListCreate) xmlListCreate __attribute((alias("xmlListCreate__internal_alias"))); +#else +#ifndef xmlListCreate +extern __typeof (xmlListCreate) xmlListCreate__internal_alias __attribute((visibility("hidden"))); +#define xmlListCreate xmlListCreate__internal_alias +#endif +#endif + +#ifdef bottom_list +#undef xmlListDelete +extern __typeof (xmlListDelete) xmlListDelete __attribute((alias("xmlListDelete__internal_alias"))); +#else +#ifndef xmlListDelete +extern __typeof (xmlListDelete) xmlListDelete__internal_alias __attribute((visibility("hidden"))); +#define xmlListDelete xmlListDelete__internal_alias +#endif +#endif + +#ifdef bottom_list +#undef xmlListDup +extern __typeof (xmlListDup) xmlListDup __attribute((alias("xmlListDup__internal_alias"))); +#else +#ifndef xmlListDup +extern __typeof (xmlListDup) xmlListDup__internal_alias __attribute((visibility("hidden"))); +#define xmlListDup xmlListDup__internal_alias +#endif +#endif + +#ifdef bottom_list +#undef xmlListEmpty +extern __typeof (xmlListEmpty) xmlListEmpty __attribute((alias("xmlListEmpty__internal_alias"))); +#else +#ifndef xmlListEmpty +extern __typeof (xmlListEmpty) xmlListEmpty__internal_alias __attribute((visibility("hidden"))); +#define xmlListEmpty xmlListEmpty__internal_alias +#endif +#endif + +#ifdef bottom_list +#undef xmlListEnd +extern __typeof (xmlListEnd) xmlListEnd __attribute((alias("xmlListEnd__internal_alias"))); +#else +#ifndef xmlListEnd +extern __typeof (xmlListEnd) xmlListEnd__internal_alias __attribute((visibility("hidden"))); +#define xmlListEnd xmlListEnd__internal_alias +#endif +#endif + +#ifdef bottom_list +#undef xmlListFront +extern __typeof (xmlListFront) xmlListFront __attribute((alias("xmlListFront__internal_alias"))); +#else +#ifndef xmlListFront +extern __typeof (xmlListFront) xmlListFront__internal_alias __attribute((visibility("hidden"))); +#define xmlListFront xmlListFront__internal_alias +#endif +#endif + +#ifdef bottom_list +#undef xmlListInsert +extern __typeof (xmlListInsert) xmlListInsert __attribute((alias("xmlListInsert__internal_alias"))); +#else +#ifndef xmlListInsert +extern __typeof (xmlListInsert) xmlListInsert__internal_alias __attribute((visibility("hidden"))); +#define xmlListInsert xmlListInsert__internal_alias +#endif +#endif + +#ifdef bottom_list +#undef xmlListMerge +extern __typeof (xmlListMerge) xmlListMerge __attribute((alias("xmlListMerge__internal_alias"))); +#else +#ifndef xmlListMerge +extern __typeof (xmlListMerge) xmlListMerge__internal_alias __attribute((visibility("hidden"))); +#define xmlListMerge xmlListMerge__internal_alias +#endif +#endif + +#ifdef bottom_list +#undef xmlListPopBack +extern __typeof (xmlListPopBack) xmlListPopBack __attribute((alias("xmlListPopBack__internal_alias"))); +#else +#ifndef xmlListPopBack +extern __typeof (xmlListPopBack) xmlListPopBack__internal_alias __attribute((visibility("hidden"))); +#define xmlListPopBack xmlListPopBack__internal_alias +#endif +#endif + +#ifdef bottom_list +#undef xmlListPopFront +extern __typeof (xmlListPopFront) xmlListPopFront __attribute((alias("xmlListPopFront__internal_alias"))); +#else +#ifndef xmlListPopFront +extern __typeof (xmlListPopFront) xmlListPopFront__internal_alias __attribute((visibility("hidden"))); +#define xmlListPopFront xmlListPopFront__internal_alias +#endif +#endif + +#ifdef bottom_list +#undef xmlListPushBack +extern __typeof (xmlListPushBack) xmlListPushBack __attribute((alias("xmlListPushBack__internal_alias"))); +#else +#ifndef xmlListPushBack +extern __typeof (xmlListPushBack) xmlListPushBack__internal_alias __attribute((visibility("hidden"))); +#define xmlListPushBack xmlListPushBack__internal_alias +#endif +#endif + +#ifdef bottom_list +#undef xmlListPushFront +extern __typeof (xmlListPushFront) xmlListPushFront __attribute((alias("xmlListPushFront__internal_alias"))); +#else +#ifndef xmlListPushFront +extern __typeof (xmlListPushFront) xmlListPushFront__internal_alias __attribute((visibility("hidden"))); +#define xmlListPushFront xmlListPushFront__internal_alias +#endif +#endif + +#ifdef bottom_list +#undef xmlListRemoveAll +extern __typeof (xmlListRemoveAll) xmlListRemoveAll __attribute((alias("xmlListRemoveAll__internal_alias"))); +#else +#ifndef xmlListRemoveAll +extern __typeof (xmlListRemoveAll) xmlListRemoveAll__internal_alias __attribute((visibility("hidden"))); +#define xmlListRemoveAll xmlListRemoveAll__internal_alias +#endif +#endif + +#ifdef bottom_list +#undef xmlListRemoveFirst +extern __typeof (xmlListRemoveFirst) xmlListRemoveFirst __attribute((alias("xmlListRemoveFirst__internal_alias"))); +#else +#ifndef xmlListRemoveFirst +extern __typeof (xmlListRemoveFirst) xmlListRemoveFirst__internal_alias __attribute((visibility("hidden"))); +#define xmlListRemoveFirst xmlListRemoveFirst__internal_alias +#endif +#endif + +#ifdef bottom_list +#undef xmlListRemoveLast +extern __typeof (xmlListRemoveLast) xmlListRemoveLast __attribute((alias("xmlListRemoveLast__internal_alias"))); +#else +#ifndef xmlListRemoveLast +extern __typeof (xmlListRemoveLast) xmlListRemoveLast__internal_alias __attribute((visibility("hidden"))); +#define xmlListRemoveLast xmlListRemoveLast__internal_alias +#endif +#endif + +#ifdef bottom_list +#undef xmlListReverse +extern __typeof (xmlListReverse) xmlListReverse __attribute((alias("xmlListReverse__internal_alias"))); +#else +#ifndef xmlListReverse +extern __typeof (xmlListReverse) xmlListReverse__internal_alias __attribute((visibility("hidden"))); +#define xmlListReverse xmlListReverse__internal_alias +#endif +#endif + +#ifdef bottom_list +#undef xmlListReverseSearch +extern __typeof (xmlListReverseSearch) xmlListReverseSearch __attribute((alias("xmlListReverseSearch__internal_alias"))); +#else +#ifndef xmlListReverseSearch +extern __typeof (xmlListReverseSearch) xmlListReverseSearch__internal_alias __attribute((visibility("hidden"))); +#define xmlListReverseSearch xmlListReverseSearch__internal_alias +#endif +#endif + +#ifdef bottom_list +#undef xmlListReverseWalk +extern __typeof (xmlListReverseWalk) xmlListReverseWalk __attribute((alias("xmlListReverseWalk__internal_alias"))); +#else +#ifndef xmlListReverseWalk +extern __typeof (xmlListReverseWalk) xmlListReverseWalk__internal_alias __attribute((visibility("hidden"))); +#define xmlListReverseWalk xmlListReverseWalk__internal_alias +#endif +#endif + +#ifdef bottom_list +#undef xmlListSearch +extern __typeof (xmlListSearch) xmlListSearch __attribute((alias("xmlListSearch__internal_alias"))); +#else +#ifndef xmlListSearch +extern __typeof (xmlListSearch) xmlListSearch__internal_alias __attribute((visibility("hidden"))); +#define xmlListSearch xmlListSearch__internal_alias +#endif +#endif + +#ifdef bottom_list +#undef xmlListSize +extern __typeof (xmlListSize) xmlListSize __attribute((alias("xmlListSize__internal_alias"))); +#else +#ifndef xmlListSize +extern __typeof (xmlListSize) xmlListSize__internal_alias __attribute((visibility("hidden"))); +#define xmlListSize xmlListSize__internal_alias +#endif +#endif + +#ifdef bottom_list +#undef xmlListSort +extern __typeof (xmlListSort) xmlListSort __attribute((alias("xmlListSort__internal_alias"))); +#else +#ifndef xmlListSort +extern __typeof (xmlListSort) xmlListSort__internal_alias __attribute((visibility("hidden"))); +#define xmlListSort xmlListSort__internal_alias +#endif +#endif + +#ifdef bottom_list +#undef xmlListWalk +extern __typeof (xmlListWalk) xmlListWalk __attribute((alias("xmlListWalk__internal_alias"))); +#else +#ifndef xmlListWalk +extern __typeof (xmlListWalk) xmlListWalk__internal_alias __attribute((visibility("hidden"))); +#define xmlListWalk xmlListWalk__internal_alias +#endif +#endif + +#if defined(LIBXML_CATALOG_ENABLED) +#ifdef bottom_catalog +#undef xmlLoadACatalog +extern __typeof (xmlLoadACatalog) xmlLoadACatalog __attribute((alias("xmlLoadACatalog__internal_alias"))); +#else +#ifndef xmlLoadACatalog +extern __typeof (xmlLoadACatalog) xmlLoadACatalog__internal_alias __attribute((visibility("hidden"))); +#define xmlLoadACatalog xmlLoadACatalog__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_CATALOG_ENABLED) +#ifdef bottom_catalog +#undef xmlLoadCatalog +extern __typeof (xmlLoadCatalog) xmlLoadCatalog __attribute((alias("xmlLoadCatalog__internal_alias"))); +#else +#ifndef xmlLoadCatalog +extern __typeof (xmlLoadCatalog) xmlLoadCatalog__internal_alias __attribute((visibility("hidden"))); +#define xmlLoadCatalog xmlLoadCatalog__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_CATALOG_ENABLED) +#ifdef bottom_catalog +#undef xmlLoadCatalogs +extern __typeof (xmlLoadCatalogs) xmlLoadCatalogs __attribute((alias("xmlLoadCatalogs__internal_alias"))); +#else +#ifndef xmlLoadCatalogs +extern __typeof (xmlLoadCatalogs) xmlLoadCatalogs__internal_alias __attribute((visibility("hidden"))); +#define xmlLoadCatalogs xmlLoadCatalogs__internal_alias +#endif +#endif +#endif + +#ifdef bottom_xmlIO +#undef xmlLoadExternalEntity +extern __typeof (xmlLoadExternalEntity) xmlLoadExternalEntity __attribute((alias("xmlLoadExternalEntity__internal_alias"))); +#else +#ifndef xmlLoadExternalEntity +extern __typeof (xmlLoadExternalEntity) xmlLoadExternalEntity__internal_alias __attribute((visibility("hidden"))); +#define xmlLoadExternalEntity xmlLoadExternalEntity__internal_alias +#endif +#endif + +#if defined(LIBXML_CATALOG_ENABLED) +#ifdef bottom_catalog +#undef xmlLoadSGMLSuperCatalog +extern __typeof (xmlLoadSGMLSuperCatalog) xmlLoadSGMLSuperCatalog __attribute((alias("xmlLoadSGMLSuperCatalog__internal_alias"))); +#else +#ifndef xmlLoadSGMLSuperCatalog +extern __typeof (xmlLoadSGMLSuperCatalog) xmlLoadSGMLSuperCatalog__internal_alias __attribute((visibility("hidden"))); +#define xmlLoadSGMLSuperCatalog xmlLoadSGMLSuperCatalog__internal_alias +#endif +#endif +#endif + +#ifdef bottom_threads +#undef xmlLockLibrary +extern __typeof (xmlLockLibrary) xmlLockLibrary __attribute((alias("xmlLockLibrary__internal_alias"))); +#else +#ifndef xmlLockLibrary +extern __typeof (xmlLockLibrary) xmlLockLibrary__internal_alias __attribute((visibility("hidden"))); +#define xmlLockLibrary xmlLockLibrary__internal_alias +#endif +#endif + +#if defined(LIBXML_DEBUG_ENABLED) +#ifdef bottom_debugXML +#undef xmlLsCountNode +extern __typeof (xmlLsCountNode) xmlLsCountNode __attribute((alias("xmlLsCountNode__internal_alias"))); +#else +#ifndef xmlLsCountNode +extern __typeof (xmlLsCountNode) xmlLsCountNode__internal_alias __attribute((visibility("hidden"))); +#define xmlLsCountNode xmlLsCountNode__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_DEBUG_ENABLED) +#ifdef bottom_debugXML +#undef xmlLsOneNode +extern __typeof (xmlLsOneNode) xmlLsOneNode __attribute((alias("xmlLsOneNode__internal_alias"))); +#else +#ifndef xmlLsOneNode +extern __typeof (xmlLsOneNode) xmlLsOneNode__internal_alias __attribute((visibility("hidden"))); +#define xmlLsOneNode xmlLsOneNode__internal_alias +#endif +#endif +#endif + +#ifdef bottom_xmlmemory +#undef xmlMallocAtomicLoc +extern __typeof (xmlMallocAtomicLoc) xmlMallocAtomicLoc __attribute((alias("xmlMallocAtomicLoc__internal_alias"))); +#else +#ifndef xmlMallocAtomicLoc +extern __typeof (xmlMallocAtomicLoc) xmlMallocAtomicLoc__internal_alias __attribute((visibility("hidden"))); +#define xmlMallocAtomicLoc xmlMallocAtomicLoc__internal_alias +#endif +#endif + +#ifdef bottom_xmlmemory +#undef xmlMallocLoc +extern __typeof (xmlMallocLoc) xmlMallocLoc __attribute((alias("xmlMallocLoc__internal_alias"))); +#else +#ifndef xmlMallocLoc +extern __typeof (xmlMallocLoc) xmlMallocLoc__internal_alias __attribute((visibility("hidden"))); +#define xmlMallocLoc xmlMallocLoc__internal_alias +#endif +#endif + +#ifdef bottom_xmlmemory +#undef xmlMemBlocks +extern __typeof (xmlMemBlocks) xmlMemBlocks __attribute((alias("xmlMemBlocks__internal_alias"))); +#else +#ifndef xmlMemBlocks +extern __typeof (xmlMemBlocks) xmlMemBlocks__internal_alias __attribute((visibility("hidden"))); +#define xmlMemBlocks xmlMemBlocks__internal_alias +#endif +#endif + +#ifdef bottom_xmlmemory +#undef xmlMemDisplay +extern __typeof (xmlMemDisplay) xmlMemDisplay __attribute((alias("xmlMemDisplay__internal_alias"))); +#else +#ifndef xmlMemDisplay +extern __typeof (xmlMemDisplay) xmlMemDisplay__internal_alias __attribute((visibility("hidden"))); +#define xmlMemDisplay xmlMemDisplay__internal_alias +#endif +#endif + +#ifdef bottom_xmlmemory +#undef xmlMemDisplayLast +extern __typeof (xmlMemDisplayLast) xmlMemDisplayLast __attribute((alias("xmlMemDisplayLast__internal_alias"))); +#else +#ifndef xmlMemDisplayLast +extern __typeof (xmlMemDisplayLast) xmlMemDisplayLast__internal_alias __attribute((visibility("hidden"))); +#define xmlMemDisplayLast xmlMemDisplayLast__internal_alias +#endif +#endif + +#ifdef bottom_xmlmemory +#undef xmlMemFree +extern __typeof (xmlMemFree) xmlMemFree __attribute((alias("xmlMemFree__internal_alias"))); +#else +#ifndef xmlMemFree +extern __typeof (xmlMemFree) xmlMemFree__internal_alias __attribute((visibility("hidden"))); +#define xmlMemFree xmlMemFree__internal_alias +#endif +#endif + +#ifdef bottom_xmlmemory +#undef xmlMemGet +extern __typeof (xmlMemGet) xmlMemGet __attribute((alias("xmlMemGet__internal_alias"))); +#else +#ifndef xmlMemGet +extern __typeof (xmlMemGet) xmlMemGet__internal_alias __attribute((visibility("hidden"))); +#define xmlMemGet xmlMemGet__internal_alias +#endif +#endif + +#ifdef bottom_xmlmemory +#undef xmlMemMalloc +extern __typeof (xmlMemMalloc) xmlMemMalloc __attribute((alias("xmlMemMalloc__internal_alias"))); +#else +#ifndef xmlMemMalloc +extern __typeof (xmlMemMalloc) xmlMemMalloc__internal_alias __attribute((visibility("hidden"))); +#define xmlMemMalloc xmlMemMalloc__internal_alias +#endif +#endif + +#ifdef bottom_xmlmemory +#undef xmlMemRealloc +extern __typeof (xmlMemRealloc) xmlMemRealloc __attribute((alias("xmlMemRealloc__internal_alias"))); +#else +#ifndef xmlMemRealloc +extern __typeof (xmlMemRealloc) xmlMemRealloc__internal_alias __attribute((visibility("hidden"))); +#define xmlMemRealloc xmlMemRealloc__internal_alias +#endif +#endif + +#ifdef bottom_xmlmemory +#undef xmlMemSetup +extern __typeof (xmlMemSetup) xmlMemSetup __attribute((alias("xmlMemSetup__internal_alias"))); +#else +#ifndef xmlMemSetup +extern __typeof (xmlMemSetup) xmlMemSetup__internal_alias __attribute((visibility("hidden"))); +#define xmlMemSetup xmlMemSetup__internal_alias +#endif +#endif + +#ifdef bottom_xmlmemory +#undef xmlMemShow +extern __typeof (xmlMemShow) xmlMemShow __attribute((alias("xmlMemShow__internal_alias"))); +#else +#ifndef xmlMemShow +extern __typeof (xmlMemShow) xmlMemShow__internal_alias __attribute((visibility("hidden"))); +#define xmlMemShow xmlMemShow__internal_alias +#endif +#endif + +#ifdef bottom_xmlmemory +#undef xmlMemStrdupLoc +extern __typeof (xmlMemStrdupLoc) xmlMemStrdupLoc __attribute((alias("xmlMemStrdupLoc__internal_alias"))); +#else +#ifndef xmlMemStrdupLoc +extern __typeof (xmlMemStrdupLoc) xmlMemStrdupLoc__internal_alias __attribute((visibility("hidden"))); +#define xmlMemStrdupLoc xmlMemStrdupLoc__internal_alias +#endif +#endif + +#ifdef bottom_xmlmemory +#undef xmlMemUsed +extern __typeof (xmlMemUsed) xmlMemUsed __attribute((alias("xmlMemUsed__internal_alias"))); +#else +#ifndef xmlMemUsed +extern __typeof (xmlMemUsed) xmlMemUsed__internal_alias __attribute((visibility("hidden"))); +#define xmlMemUsed xmlMemUsed__internal_alias +#endif +#endif + +#ifdef bottom_xmlmemory +#undef xmlMemoryDump +extern __typeof (xmlMemoryDump) xmlMemoryDump __attribute((alias("xmlMemoryDump__internal_alias"))); +#else +#ifndef xmlMemoryDump +extern __typeof (xmlMemoryDump) xmlMemoryDump__internal_alias __attribute((visibility("hidden"))); +#define xmlMemoryDump xmlMemoryDump__internal_alias +#endif +#endif + +#ifdef bottom_xmlmemory +#undef xmlMemoryStrdup +extern __typeof (xmlMemoryStrdup) xmlMemoryStrdup __attribute((alias("xmlMemoryStrdup__internal_alias"))); +#else +#ifndef xmlMemoryStrdup +extern __typeof (xmlMemoryStrdup) xmlMemoryStrdup__internal_alias __attribute((visibility("hidden"))); +#define xmlMemoryStrdup xmlMemoryStrdup__internal_alias +#endif +#endif + +#if defined(LIBXML_MODULES_ENABLED) +#ifdef bottom_xmlmodule +#undef xmlModuleClose +extern __typeof (xmlModuleClose) xmlModuleClose __attribute((alias("xmlModuleClose__internal_alias"))); +#else +#ifndef xmlModuleClose +extern __typeof (xmlModuleClose) xmlModuleClose__internal_alias __attribute((visibility("hidden"))); +#define xmlModuleClose xmlModuleClose__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_MODULES_ENABLED) +#ifdef bottom_xmlmodule +#undef xmlModuleFree +extern __typeof (xmlModuleFree) xmlModuleFree __attribute((alias("xmlModuleFree__internal_alias"))); +#else +#ifndef xmlModuleFree +extern __typeof (xmlModuleFree) xmlModuleFree__internal_alias __attribute((visibility("hidden"))); +#define xmlModuleFree xmlModuleFree__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_MODULES_ENABLED) +#ifdef bottom_xmlmodule +#undef xmlModuleOpen +extern __typeof (xmlModuleOpen) xmlModuleOpen __attribute((alias("xmlModuleOpen__internal_alias"))); +#else +#ifndef xmlModuleOpen +extern __typeof (xmlModuleOpen) xmlModuleOpen__internal_alias __attribute((visibility("hidden"))); +#define xmlModuleOpen xmlModuleOpen__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_MODULES_ENABLED) +#ifdef bottom_xmlmodule +#undef xmlModuleSymbol +extern __typeof (xmlModuleSymbol) xmlModuleSymbol __attribute((alias("xmlModuleSymbol__internal_alias"))); +#else +#ifndef xmlModuleSymbol +extern __typeof (xmlModuleSymbol) xmlModuleSymbol__internal_alias __attribute((visibility("hidden"))); +#define xmlModuleSymbol xmlModuleSymbol__internal_alias +#endif +#endif +#endif + +#ifdef bottom_threads +#undef xmlMutexLock +extern __typeof (xmlMutexLock) xmlMutexLock __attribute((alias("xmlMutexLock__internal_alias"))); +#else +#ifndef xmlMutexLock +extern __typeof (xmlMutexLock) xmlMutexLock__internal_alias __attribute((visibility("hidden"))); +#define xmlMutexLock xmlMutexLock__internal_alias +#endif +#endif + +#ifdef bottom_threads +#undef xmlMutexUnlock +extern __typeof (xmlMutexUnlock) xmlMutexUnlock __attribute((alias("xmlMutexUnlock__internal_alias"))); +#else +#ifndef xmlMutexUnlock +extern __typeof (xmlMutexUnlock) xmlMutexUnlock__internal_alias __attribute((visibility("hidden"))); +#define xmlMutexUnlock xmlMutexUnlock__internal_alias +#endif +#endif + +#if defined(LIBXML_LEGACY_ENABLED) +#ifdef bottom_legacy +#undef xmlNamespaceParseNCName +extern __typeof (xmlNamespaceParseNCName) xmlNamespaceParseNCName __attribute((alias("xmlNamespaceParseNCName__internal_alias"))); +#else +#ifndef xmlNamespaceParseNCName +extern __typeof (xmlNamespaceParseNCName) xmlNamespaceParseNCName__internal_alias __attribute((visibility("hidden"))); +#define xmlNamespaceParseNCName xmlNamespaceParseNCName__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_LEGACY_ENABLED) +#ifdef bottom_legacy +#undef xmlNamespaceParseNSDef +extern __typeof (xmlNamespaceParseNSDef) xmlNamespaceParseNSDef __attribute((alias("xmlNamespaceParseNSDef__internal_alias"))); +#else +#ifndef xmlNamespaceParseNSDef +extern __typeof (xmlNamespaceParseNSDef) xmlNamespaceParseNSDef__internal_alias __attribute((visibility("hidden"))); +#define xmlNamespaceParseNSDef xmlNamespaceParseNSDef__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_LEGACY_ENABLED) +#ifdef bottom_legacy +#undef xmlNamespaceParseQName +extern __typeof (xmlNamespaceParseQName) xmlNamespaceParseQName __attribute((alias("xmlNamespaceParseQName__internal_alias"))); +#else +#ifndef xmlNamespaceParseQName +extern __typeof (xmlNamespaceParseQName) xmlNamespaceParseQName__internal_alias __attribute((visibility("hidden"))); +#define xmlNamespaceParseQName xmlNamespaceParseQName__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_FTP_ENABLED) +#ifdef bottom_nanoftp +#undef xmlNanoFTPCheckResponse +extern __typeof (xmlNanoFTPCheckResponse) xmlNanoFTPCheckResponse __attribute((alias("xmlNanoFTPCheckResponse__internal_alias"))); +#else +#ifndef xmlNanoFTPCheckResponse +extern __typeof (xmlNanoFTPCheckResponse) xmlNanoFTPCheckResponse__internal_alias __attribute((visibility("hidden"))); +#define xmlNanoFTPCheckResponse xmlNanoFTPCheckResponse__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_FTP_ENABLED) +#ifdef bottom_nanoftp +#undef xmlNanoFTPCleanup +extern __typeof (xmlNanoFTPCleanup) xmlNanoFTPCleanup __attribute((alias("xmlNanoFTPCleanup__internal_alias"))); +#else +#ifndef xmlNanoFTPCleanup +extern __typeof (xmlNanoFTPCleanup) xmlNanoFTPCleanup__internal_alias __attribute((visibility("hidden"))); +#define xmlNanoFTPCleanup xmlNanoFTPCleanup__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_FTP_ENABLED) +#ifdef bottom_nanoftp +#undef xmlNanoFTPClose +extern __typeof (xmlNanoFTPClose) xmlNanoFTPClose __attribute((alias("xmlNanoFTPClose__internal_alias"))); +#else +#ifndef xmlNanoFTPClose +extern __typeof (xmlNanoFTPClose) xmlNanoFTPClose__internal_alias __attribute((visibility("hidden"))); +#define xmlNanoFTPClose xmlNanoFTPClose__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_FTP_ENABLED) +#ifdef bottom_nanoftp +#undef xmlNanoFTPCloseConnection +extern __typeof (xmlNanoFTPCloseConnection) xmlNanoFTPCloseConnection __attribute((alias("xmlNanoFTPCloseConnection__internal_alias"))); +#else +#ifndef xmlNanoFTPCloseConnection +extern __typeof (xmlNanoFTPCloseConnection) xmlNanoFTPCloseConnection__internal_alias __attribute((visibility("hidden"))); +#define xmlNanoFTPCloseConnection xmlNanoFTPCloseConnection__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_FTP_ENABLED) +#ifdef bottom_nanoftp +#undef xmlNanoFTPConnect +extern __typeof (xmlNanoFTPConnect) xmlNanoFTPConnect __attribute((alias("xmlNanoFTPConnect__internal_alias"))); +#else +#ifndef xmlNanoFTPConnect +extern __typeof (xmlNanoFTPConnect) xmlNanoFTPConnect__internal_alias __attribute((visibility("hidden"))); +#define xmlNanoFTPConnect xmlNanoFTPConnect__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_FTP_ENABLED) +#ifdef bottom_nanoftp +#undef xmlNanoFTPConnectTo +extern __typeof (xmlNanoFTPConnectTo) xmlNanoFTPConnectTo __attribute((alias("xmlNanoFTPConnectTo__internal_alias"))); +#else +#ifndef xmlNanoFTPConnectTo +extern __typeof (xmlNanoFTPConnectTo) xmlNanoFTPConnectTo__internal_alias __attribute((visibility("hidden"))); +#define xmlNanoFTPConnectTo xmlNanoFTPConnectTo__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_FTP_ENABLED) +#ifdef bottom_nanoftp +#undef xmlNanoFTPCwd +extern __typeof (xmlNanoFTPCwd) xmlNanoFTPCwd __attribute((alias("xmlNanoFTPCwd__internal_alias"))); +#else +#ifndef xmlNanoFTPCwd +extern __typeof (xmlNanoFTPCwd) xmlNanoFTPCwd__internal_alias __attribute((visibility("hidden"))); +#define xmlNanoFTPCwd xmlNanoFTPCwd__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_FTP_ENABLED) +#ifdef bottom_nanoftp +#undef xmlNanoFTPDele +extern __typeof (xmlNanoFTPDele) xmlNanoFTPDele __attribute((alias("xmlNanoFTPDele__internal_alias"))); +#else +#ifndef xmlNanoFTPDele +extern __typeof (xmlNanoFTPDele) xmlNanoFTPDele__internal_alias __attribute((visibility("hidden"))); +#define xmlNanoFTPDele xmlNanoFTPDele__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_FTP_ENABLED) +#ifdef bottom_nanoftp +#undef xmlNanoFTPFreeCtxt +extern __typeof (xmlNanoFTPFreeCtxt) xmlNanoFTPFreeCtxt __attribute((alias("xmlNanoFTPFreeCtxt__internal_alias"))); +#else +#ifndef xmlNanoFTPFreeCtxt +extern __typeof (xmlNanoFTPFreeCtxt) xmlNanoFTPFreeCtxt__internal_alias __attribute((visibility("hidden"))); +#define xmlNanoFTPFreeCtxt xmlNanoFTPFreeCtxt__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_FTP_ENABLED) +#ifdef bottom_nanoftp +#undef xmlNanoFTPGet +extern __typeof (xmlNanoFTPGet) xmlNanoFTPGet __attribute((alias("xmlNanoFTPGet__internal_alias"))); +#else +#ifndef xmlNanoFTPGet +extern __typeof (xmlNanoFTPGet) xmlNanoFTPGet__internal_alias __attribute((visibility("hidden"))); +#define xmlNanoFTPGet xmlNanoFTPGet__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_FTP_ENABLED) +#ifdef bottom_nanoftp +#undef xmlNanoFTPGetConnection +extern __typeof (xmlNanoFTPGetConnection) xmlNanoFTPGetConnection __attribute((alias("xmlNanoFTPGetConnection__internal_alias"))); +#else +#ifndef xmlNanoFTPGetConnection +extern __typeof (xmlNanoFTPGetConnection) xmlNanoFTPGetConnection__internal_alias __attribute((visibility("hidden"))); +#define xmlNanoFTPGetConnection xmlNanoFTPGetConnection__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_FTP_ENABLED) +#ifdef bottom_nanoftp +#undef xmlNanoFTPGetResponse +extern __typeof (xmlNanoFTPGetResponse) xmlNanoFTPGetResponse __attribute((alias("xmlNanoFTPGetResponse__internal_alias"))); +#else +#ifndef xmlNanoFTPGetResponse +extern __typeof (xmlNanoFTPGetResponse) xmlNanoFTPGetResponse__internal_alias __attribute((visibility("hidden"))); +#define xmlNanoFTPGetResponse xmlNanoFTPGetResponse__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_FTP_ENABLED) +#ifdef bottom_nanoftp +#undef xmlNanoFTPGetSocket +extern __typeof (xmlNanoFTPGetSocket) xmlNanoFTPGetSocket __attribute((alias("xmlNanoFTPGetSocket__internal_alias"))); +#else +#ifndef xmlNanoFTPGetSocket +extern __typeof (xmlNanoFTPGetSocket) xmlNanoFTPGetSocket__internal_alias __attribute((visibility("hidden"))); +#define xmlNanoFTPGetSocket xmlNanoFTPGetSocket__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_FTP_ENABLED) +#ifdef bottom_nanoftp +#undef xmlNanoFTPInit +extern __typeof (xmlNanoFTPInit) xmlNanoFTPInit __attribute((alias("xmlNanoFTPInit__internal_alias"))); +#else +#ifndef xmlNanoFTPInit +extern __typeof (xmlNanoFTPInit) xmlNanoFTPInit__internal_alias __attribute((visibility("hidden"))); +#define xmlNanoFTPInit xmlNanoFTPInit__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_FTP_ENABLED) +#ifdef bottom_nanoftp +#undef xmlNanoFTPList +extern __typeof (xmlNanoFTPList) xmlNanoFTPList __attribute((alias("xmlNanoFTPList__internal_alias"))); +#else +#ifndef xmlNanoFTPList +extern __typeof (xmlNanoFTPList) xmlNanoFTPList__internal_alias __attribute((visibility("hidden"))); +#define xmlNanoFTPList xmlNanoFTPList__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_FTP_ENABLED) +#ifdef bottom_nanoftp +#undef xmlNanoFTPNewCtxt +extern __typeof (xmlNanoFTPNewCtxt) xmlNanoFTPNewCtxt __attribute((alias("xmlNanoFTPNewCtxt__internal_alias"))); +#else +#ifndef xmlNanoFTPNewCtxt +extern __typeof (xmlNanoFTPNewCtxt) xmlNanoFTPNewCtxt__internal_alias __attribute((visibility("hidden"))); +#define xmlNanoFTPNewCtxt xmlNanoFTPNewCtxt__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_FTP_ENABLED) +#ifdef bottom_nanoftp +#undef xmlNanoFTPOpen +extern __typeof (xmlNanoFTPOpen) xmlNanoFTPOpen __attribute((alias("xmlNanoFTPOpen__internal_alias"))); +#else +#ifndef xmlNanoFTPOpen +extern __typeof (xmlNanoFTPOpen) xmlNanoFTPOpen__internal_alias __attribute((visibility("hidden"))); +#define xmlNanoFTPOpen xmlNanoFTPOpen__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_FTP_ENABLED) +#ifdef bottom_nanoftp +#undef xmlNanoFTPProxy +extern __typeof (xmlNanoFTPProxy) xmlNanoFTPProxy __attribute((alias("xmlNanoFTPProxy__internal_alias"))); +#else +#ifndef xmlNanoFTPProxy +extern __typeof (xmlNanoFTPProxy) xmlNanoFTPProxy__internal_alias __attribute((visibility("hidden"))); +#define xmlNanoFTPProxy xmlNanoFTPProxy__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_FTP_ENABLED) +#ifdef bottom_nanoftp +#undef xmlNanoFTPQuit +extern __typeof (xmlNanoFTPQuit) xmlNanoFTPQuit __attribute((alias("xmlNanoFTPQuit__internal_alias"))); +#else +#ifndef xmlNanoFTPQuit +extern __typeof (xmlNanoFTPQuit) xmlNanoFTPQuit__internal_alias __attribute((visibility("hidden"))); +#define xmlNanoFTPQuit xmlNanoFTPQuit__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_FTP_ENABLED) +#ifdef bottom_nanoftp +#undef xmlNanoFTPRead +extern __typeof (xmlNanoFTPRead) xmlNanoFTPRead __attribute((alias("xmlNanoFTPRead__internal_alias"))); +#else +#ifndef xmlNanoFTPRead +extern __typeof (xmlNanoFTPRead) xmlNanoFTPRead__internal_alias __attribute((visibility("hidden"))); +#define xmlNanoFTPRead xmlNanoFTPRead__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_FTP_ENABLED) +#ifdef bottom_nanoftp +#undef xmlNanoFTPScanProxy +extern __typeof (xmlNanoFTPScanProxy) xmlNanoFTPScanProxy __attribute((alias("xmlNanoFTPScanProxy__internal_alias"))); +#else +#ifndef xmlNanoFTPScanProxy +extern __typeof (xmlNanoFTPScanProxy) xmlNanoFTPScanProxy__internal_alias __attribute((visibility("hidden"))); +#define xmlNanoFTPScanProxy xmlNanoFTPScanProxy__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_FTP_ENABLED) +#ifdef bottom_nanoftp +#undef xmlNanoFTPUpdateURL +extern __typeof (xmlNanoFTPUpdateURL) xmlNanoFTPUpdateURL __attribute((alias("xmlNanoFTPUpdateURL__internal_alias"))); +#else +#ifndef xmlNanoFTPUpdateURL +extern __typeof (xmlNanoFTPUpdateURL) xmlNanoFTPUpdateURL__internal_alias __attribute((visibility("hidden"))); +#define xmlNanoFTPUpdateURL xmlNanoFTPUpdateURL__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTTP_ENABLED) +#ifdef bottom_nanohttp +#undef xmlNanoHTTPAuthHeader +extern __typeof (xmlNanoHTTPAuthHeader) xmlNanoHTTPAuthHeader __attribute((alias("xmlNanoHTTPAuthHeader__internal_alias"))); +#else +#ifndef xmlNanoHTTPAuthHeader +extern __typeof (xmlNanoHTTPAuthHeader) xmlNanoHTTPAuthHeader__internal_alias __attribute((visibility("hidden"))); +#define xmlNanoHTTPAuthHeader xmlNanoHTTPAuthHeader__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTTP_ENABLED) +#ifdef bottom_nanohttp +#undef xmlNanoHTTPCleanup +extern __typeof (xmlNanoHTTPCleanup) xmlNanoHTTPCleanup __attribute((alias("xmlNanoHTTPCleanup__internal_alias"))); +#else +#ifndef xmlNanoHTTPCleanup +extern __typeof (xmlNanoHTTPCleanup) xmlNanoHTTPCleanup__internal_alias __attribute((visibility("hidden"))); +#define xmlNanoHTTPCleanup xmlNanoHTTPCleanup__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTTP_ENABLED) +#ifdef bottom_nanohttp +#undef xmlNanoHTTPClose +extern __typeof (xmlNanoHTTPClose) xmlNanoHTTPClose __attribute((alias("xmlNanoHTTPClose__internal_alias"))); +#else +#ifndef xmlNanoHTTPClose +extern __typeof (xmlNanoHTTPClose) xmlNanoHTTPClose__internal_alias __attribute((visibility("hidden"))); +#define xmlNanoHTTPClose xmlNanoHTTPClose__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTTP_ENABLED) +#ifdef bottom_nanohttp +#undef xmlNanoHTTPContentLength +extern __typeof (xmlNanoHTTPContentLength) xmlNanoHTTPContentLength __attribute((alias("xmlNanoHTTPContentLength__internal_alias"))); +#else +#ifndef xmlNanoHTTPContentLength +extern __typeof (xmlNanoHTTPContentLength) xmlNanoHTTPContentLength__internal_alias __attribute((visibility("hidden"))); +#define xmlNanoHTTPContentLength xmlNanoHTTPContentLength__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTTP_ENABLED) +#ifdef bottom_nanohttp +#undef xmlNanoHTTPEncoding +extern __typeof (xmlNanoHTTPEncoding) xmlNanoHTTPEncoding __attribute((alias("xmlNanoHTTPEncoding__internal_alias"))); +#else +#ifndef xmlNanoHTTPEncoding +extern __typeof (xmlNanoHTTPEncoding) xmlNanoHTTPEncoding__internal_alias __attribute((visibility("hidden"))); +#define xmlNanoHTTPEncoding xmlNanoHTTPEncoding__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTTP_ENABLED) +#ifdef bottom_nanohttp +#undef xmlNanoHTTPFetch +extern __typeof (xmlNanoHTTPFetch) xmlNanoHTTPFetch __attribute((alias("xmlNanoHTTPFetch__internal_alias"))); +#else +#ifndef xmlNanoHTTPFetch +extern __typeof (xmlNanoHTTPFetch) xmlNanoHTTPFetch__internal_alias __attribute((visibility("hidden"))); +#define xmlNanoHTTPFetch xmlNanoHTTPFetch__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTTP_ENABLED) +#ifdef bottom_nanohttp +#undef xmlNanoHTTPInit +extern __typeof (xmlNanoHTTPInit) xmlNanoHTTPInit __attribute((alias("xmlNanoHTTPInit__internal_alias"))); +#else +#ifndef xmlNanoHTTPInit +extern __typeof (xmlNanoHTTPInit) xmlNanoHTTPInit__internal_alias __attribute((visibility("hidden"))); +#define xmlNanoHTTPInit xmlNanoHTTPInit__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTTP_ENABLED) +#ifdef bottom_nanohttp +#undef xmlNanoHTTPMethod +extern __typeof (xmlNanoHTTPMethod) xmlNanoHTTPMethod __attribute((alias("xmlNanoHTTPMethod__internal_alias"))); +#else +#ifndef xmlNanoHTTPMethod +extern __typeof (xmlNanoHTTPMethod) xmlNanoHTTPMethod__internal_alias __attribute((visibility("hidden"))); +#define xmlNanoHTTPMethod xmlNanoHTTPMethod__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTTP_ENABLED) +#ifdef bottom_nanohttp +#undef xmlNanoHTTPMethodRedir +extern __typeof (xmlNanoHTTPMethodRedir) xmlNanoHTTPMethodRedir __attribute((alias("xmlNanoHTTPMethodRedir__internal_alias"))); +#else +#ifndef xmlNanoHTTPMethodRedir +extern __typeof (xmlNanoHTTPMethodRedir) xmlNanoHTTPMethodRedir__internal_alias __attribute((visibility("hidden"))); +#define xmlNanoHTTPMethodRedir xmlNanoHTTPMethodRedir__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTTP_ENABLED) +#ifdef bottom_nanohttp +#undef xmlNanoHTTPMimeType +extern __typeof (xmlNanoHTTPMimeType) xmlNanoHTTPMimeType __attribute((alias("xmlNanoHTTPMimeType__internal_alias"))); +#else +#ifndef xmlNanoHTTPMimeType +extern __typeof (xmlNanoHTTPMimeType) xmlNanoHTTPMimeType__internal_alias __attribute((visibility("hidden"))); +#define xmlNanoHTTPMimeType xmlNanoHTTPMimeType__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTTP_ENABLED) +#ifdef bottom_nanohttp +#undef xmlNanoHTTPOpen +extern __typeof (xmlNanoHTTPOpen) xmlNanoHTTPOpen __attribute((alias("xmlNanoHTTPOpen__internal_alias"))); +#else +#ifndef xmlNanoHTTPOpen +extern __typeof (xmlNanoHTTPOpen) xmlNanoHTTPOpen__internal_alias __attribute((visibility("hidden"))); +#define xmlNanoHTTPOpen xmlNanoHTTPOpen__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTTP_ENABLED) +#ifdef bottom_nanohttp +#undef xmlNanoHTTPOpenRedir +extern __typeof (xmlNanoHTTPOpenRedir) xmlNanoHTTPOpenRedir __attribute((alias("xmlNanoHTTPOpenRedir__internal_alias"))); +#else +#ifndef xmlNanoHTTPOpenRedir +extern __typeof (xmlNanoHTTPOpenRedir) xmlNanoHTTPOpenRedir__internal_alias __attribute((visibility("hidden"))); +#define xmlNanoHTTPOpenRedir xmlNanoHTTPOpenRedir__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTTP_ENABLED) +#ifdef bottom_nanohttp +#undef xmlNanoHTTPRead +extern __typeof (xmlNanoHTTPRead) xmlNanoHTTPRead __attribute((alias("xmlNanoHTTPRead__internal_alias"))); +#else +#ifndef xmlNanoHTTPRead +extern __typeof (xmlNanoHTTPRead) xmlNanoHTTPRead__internal_alias __attribute((visibility("hidden"))); +#define xmlNanoHTTPRead xmlNanoHTTPRead__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTTP_ENABLED) +#ifdef bottom_nanohttp +#undef xmlNanoHTTPRedir +extern __typeof (xmlNanoHTTPRedir) xmlNanoHTTPRedir __attribute((alias("xmlNanoHTTPRedir__internal_alias"))); +#else +#ifndef xmlNanoHTTPRedir +extern __typeof (xmlNanoHTTPRedir) xmlNanoHTTPRedir__internal_alias __attribute((visibility("hidden"))); +#define xmlNanoHTTPRedir xmlNanoHTTPRedir__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTTP_ENABLED) +#ifdef bottom_nanohttp +#undef xmlNanoHTTPReturnCode +extern __typeof (xmlNanoHTTPReturnCode) xmlNanoHTTPReturnCode __attribute((alias("xmlNanoHTTPReturnCode__internal_alias"))); +#else +#ifndef xmlNanoHTTPReturnCode +extern __typeof (xmlNanoHTTPReturnCode) xmlNanoHTTPReturnCode__internal_alias __attribute((visibility("hidden"))); +#define xmlNanoHTTPReturnCode xmlNanoHTTPReturnCode__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTTP_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_nanohttp +#undef xmlNanoHTTPSave +extern __typeof (xmlNanoHTTPSave) xmlNanoHTTPSave __attribute((alias("xmlNanoHTTPSave__internal_alias"))); +#else +#ifndef xmlNanoHTTPSave +extern __typeof (xmlNanoHTTPSave) xmlNanoHTTPSave__internal_alias __attribute((visibility("hidden"))); +#define xmlNanoHTTPSave xmlNanoHTTPSave__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTTP_ENABLED) +#ifdef bottom_nanohttp +#undef xmlNanoHTTPScanProxy +extern __typeof (xmlNanoHTTPScanProxy) xmlNanoHTTPScanProxy __attribute((alias("xmlNanoHTTPScanProxy__internal_alias"))); +#else +#ifndef xmlNanoHTTPScanProxy +extern __typeof (xmlNanoHTTPScanProxy) xmlNanoHTTPScanProxy__internal_alias __attribute((visibility("hidden"))); +#define xmlNanoHTTPScanProxy xmlNanoHTTPScanProxy__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED) +#ifdef bottom_xmlregexp +#undef xmlNewAutomata +extern __typeof (xmlNewAutomata) xmlNewAutomata __attribute((alias("xmlNewAutomata__internal_alias"))); +#else +#ifndef xmlNewAutomata +extern __typeof (xmlNewAutomata) xmlNewAutomata__internal_alias __attribute((visibility("hidden"))); +#define xmlNewAutomata xmlNewAutomata__internal_alias +#endif +#endif +#endif + +#ifdef bottom_tree +#undef xmlNewCDataBlock +extern __typeof (xmlNewCDataBlock) xmlNewCDataBlock __attribute((alias("xmlNewCDataBlock__internal_alias"))); +#else +#ifndef xmlNewCDataBlock +extern __typeof (xmlNewCDataBlock) xmlNewCDataBlock__internal_alias __attribute((visibility("hidden"))); +#define xmlNewCDataBlock xmlNewCDataBlock__internal_alias +#endif +#endif + +#if defined(LIBXML_CATALOG_ENABLED) +#ifdef bottom_catalog +#undef xmlNewCatalog +extern __typeof (xmlNewCatalog) xmlNewCatalog __attribute((alias("xmlNewCatalog__internal_alias"))); +#else +#ifndef xmlNewCatalog +extern __typeof (xmlNewCatalog) xmlNewCatalog__internal_alias __attribute((visibility("hidden"))); +#define xmlNewCatalog xmlNewCatalog__internal_alias +#endif +#endif +#endif + +#ifdef bottom_encoding +#undef xmlNewCharEncodingHandler +extern __typeof (xmlNewCharEncodingHandler) xmlNewCharEncodingHandler __attribute((alias("xmlNewCharEncodingHandler__internal_alias"))); +#else +#ifndef xmlNewCharEncodingHandler +extern __typeof (xmlNewCharEncodingHandler) xmlNewCharEncodingHandler__internal_alias __attribute((visibility("hidden"))); +#define xmlNewCharEncodingHandler xmlNewCharEncodingHandler__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlNewCharRef +extern __typeof (xmlNewCharRef) xmlNewCharRef __attribute((alias("xmlNewCharRef__internal_alias"))); +#else +#ifndef xmlNewCharRef +extern __typeof (xmlNewCharRef) xmlNewCharRef__internal_alias __attribute((visibility("hidden"))); +#define xmlNewCharRef xmlNewCharRef__internal_alias +#endif +#endif + +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_tree +#undef xmlNewChild +extern __typeof (xmlNewChild) xmlNewChild __attribute((alias("xmlNewChild__internal_alias"))); +#else +#ifndef xmlNewChild +extern __typeof (xmlNewChild) xmlNewChild__internal_alias __attribute((visibility("hidden"))); +#define xmlNewChild xmlNewChild__internal_alias +#endif +#endif +#endif + +#ifdef bottom_tree +#undef xmlNewComment +extern __typeof (xmlNewComment) xmlNewComment __attribute((alias("xmlNewComment__internal_alias"))); +#else +#ifndef xmlNewComment +extern __typeof (xmlNewComment) xmlNewComment__internal_alias __attribute((visibility("hidden"))); +#define xmlNewComment xmlNewComment__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlNewDoc +extern __typeof (xmlNewDoc) xmlNewDoc __attribute((alias("xmlNewDoc__internal_alias"))); +#else +#ifndef xmlNewDoc +extern __typeof (xmlNewDoc) xmlNewDoc__internal_alias __attribute((visibility("hidden"))); +#define xmlNewDoc xmlNewDoc__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlNewDocComment +extern __typeof (xmlNewDocComment) xmlNewDocComment __attribute((alias("xmlNewDocComment__internal_alias"))); +#else +#ifndef xmlNewDocComment +extern __typeof (xmlNewDocComment) xmlNewDocComment__internal_alias __attribute((visibility("hidden"))); +#define xmlNewDocComment xmlNewDocComment__internal_alias +#endif +#endif + +#ifdef bottom_valid +#undef xmlNewDocElementContent +extern __typeof (xmlNewDocElementContent) xmlNewDocElementContent __attribute((alias("xmlNewDocElementContent__internal_alias"))); +#else +#ifndef xmlNewDocElementContent +extern __typeof (xmlNewDocElementContent) xmlNewDocElementContent__internal_alias __attribute((visibility("hidden"))); +#define xmlNewDocElementContent xmlNewDocElementContent__internal_alias +#endif +#endif + +#if defined(LIBXML_TREE_ENABLED) +#ifdef bottom_tree +#undef xmlNewDocFragment +extern __typeof (xmlNewDocFragment) xmlNewDocFragment __attribute((alias("xmlNewDocFragment__internal_alias"))); +#else +#ifndef xmlNewDocFragment +extern __typeof (xmlNewDocFragment) xmlNewDocFragment__internal_alias __attribute((visibility("hidden"))); +#define xmlNewDocFragment xmlNewDocFragment__internal_alias +#endif +#endif +#endif + +#ifdef bottom_tree +#undef xmlNewDocNode +extern __typeof (xmlNewDocNode) xmlNewDocNode __attribute((alias("xmlNewDocNode__internal_alias"))); +#else +#ifndef xmlNewDocNode +extern __typeof (xmlNewDocNode) xmlNewDocNode__internal_alias __attribute((visibility("hidden"))); +#define xmlNewDocNode xmlNewDocNode__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlNewDocNodeEatName +extern __typeof (xmlNewDocNodeEatName) xmlNewDocNodeEatName __attribute((alias("xmlNewDocNodeEatName__internal_alias"))); +#else +#ifndef xmlNewDocNodeEatName +extern __typeof (xmlNewDocNodeEatName) xmlNewDocNodeEatName__internal_alias __attribute((visibility("hidden"))); +#define xmlNewDocNodeEatName xmlNewDocNodeEatName__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlNewDocPI +extern __typeof (xmlNewDocPI) xmlNewDocPI __attribute((alias("xmlNewDocPI__internal_alias"))); +#else +#ifndef xmlNewDocPI +extern __typeof (xmlNewDocPI) xmlNewDocPI__internal_alias __attribute((visibility("hidden"))); +#define xmlNewDocPI xmlNewDocPI__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlNewDocProp +extern __typeof (xmlNewDocProp) xmlNewDocProp __attribute((alias("xmlNewDocProp__internal_alias"))); +#else +#ifndef xmlNewDocProp +extern __typeof (xmlNewDocProp) xmlNewDocProp__internal_alias __attribute((visibility("hidden"))); +#define xmlNewDocProp xmlNewDocProp__internal_alias +#endif +#endif + +#if defined(LIBXML_TREE_ENABLED) +#ifdef bottom_tree +#undef xmlNewDocRawNode +extern __typeof (xmlNewDocRawNode) xmlNewDocRawNode __attribute((alias("xmlNewDocRawNode__internal_alias"))); +#else +#ifndef xmlNewDocRawNode +extern __typeof (xmlNewDocRawNode) xmlNewDocRawNode__internal_alias __attribute((visibility("hidden"))); +#define xmlNewDocRawNode xmlNewDocRawNode__internal_alias +#endif +#endif +#endif + +#ifdef bottom_tree +#undef xmlNewDocText +extern __typeof (xmlNewDocText) xmlNewDocText __attribute((alias("xmlNewDocText__internal_alias"))); +#else +#ifndef xmlNewDocText +extern __typeof (xmlNewDocText) xmlNewDocText__internal_alias __attribute((visibility("hidden"))); +#define xmlNewDocText xmlNewDocText__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlNewDocTextLen +extern __typeof (xmlNewDocTextLen) xmlNewDocTextLen __attribute((alias("xmlNewDocTextLen__internal_alias"))); +#else +#ifndef xmlNewDocTextLen +extern __typeof (xmlNewDocTextLen) xmlNewDocTextLen__internal_alias __attribute((visibility("hidden"))); +#define xmlNewDocTextLen xmlNewDocTextLen__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlNewDtd +extern __typeof (xmlNewDtd) xmlNewDtd __attribute((alias("xmlNewDtd__internal_alias"))); +#else +#ifndef xmlNewDtd +extern __typeof (xmlNewDtd) xmlNewDtd__internal_alias __attribute((visibility("hidden"))); +#define xmlNewDtd xmlNewDtd__internal_alias +#endif +#endif + +#ifdef bottom_valid +#undef xmlNewElementContent +extern __typeof (xmlNewElementContent) xmlNewElementContent __attribute((alias("xmlNewElementContent__internal_alias"))); +#else +#ifndef xmlNewElementContent +extern __typeof (xmlNewElementContent) xmlNewElementContent__internal_alias __attribute((visibility("hidden"))); +#define xmlNewElementContent xmlNewElementContent__internal_alias +#endif +#endif + +#ifdef bottom_entities +#undef xmlNewEntity +extern __typeof (xmlNewEntity) xmlNewEntity __attribute((alias("xmlNewEntity__internal_alias"))); +#else +#ifndef xmlNewEntity +extern __typeof (xmlNewEntity) xmlNewEntity__internal_alias __attribute((visibility("hidden"))); +#define xmlNewEntity xmlNewEntity__internal_alias +#endif +#endif + +#ifdef bottom_parserInternals +#undef xmlNewEntityInputStream +extern __typeof (xmlNewEntityInputStream) xmlNewEntityInputStream __attribute((alias("xmlNewEntityInputStream__internal_alias"))); +#else +#ifndef xmlNewEntityInputStream +extern __typeof (xmlNewEntityInputStream) xmlNewEntityInputStream__internal_alias __attribute((visibility("hidden"))); +#define xmlNewEntityInputStream xmlNewEntityInputStream__internal_alias +#endif +#endif + +#if defined(LIBXML_LEGACY_ENABLED) +#ifdef bottom_legacy +#undef xmlNewGlobalNs +extern __typeof (xmlNewGlobalNs) xmlNewGlobalNs __attribute((alias("xmlNewGlobalNs__internal_alias"))); +#else +#ifndef xmlNewGlobalNs +extern __typeof (xmlNewGlobalNs) xmlNewGlobalNs__internal_alias __attribute((visibility("hidden"))); +#define xmlNewGlobalNs xmlNewGlobalNs__internal_alias +#endif +#endif +#endif + +#ifdef bottom_parserInternals +#undef xmlNewIOInputStream +extern __typeof (xmlNewIOInputStream) xmlNewIOInputStream __attribute((alias("xmlNewIOInputStream__internal_alias"))); +#else +#ifndef xmlNewIOInputStream +extern __typeof (xmlNewIOInputStream) xmlNewIOInputStream__internal_alias __attribute((visibility("hidden"))); +#define xmlNewIOInputStream xmlNewIOInputStream__internal_alias +#endif +#endif + +#ifdef bottom_parserInternals +#undef xmlNewInputFromFile +extern __typeof (xmlNewInputFromFile) xmlNewInputFromFile __attribute((alias("xmlNewInputFromFile__internal_alias"))); +#else +#ifndef xmlNewInputFromFile +extern __typeof (xmlNewInputFromFile) xmlNewInputFromFile__internal_alias __attribute((visibility("hidden"))); +#define xmlNewInputFromFile xmlNewInputFromFile__internal_alias +#endif +#endif + +#ifdef bottom_parserInternals +#undef xmlNewInputStream +extern __typeof (xmlNewInputStream) xmlNewInputStream __attribute((alias("xmlNewInputStream__internal_alias"))); +#else +#ifndef xmlNewInputStream +extern __typeof (xmlNewInputStream) xmlNewInputStream__internal_alias __attribute((visibility("hidden"))); +#define xmlNewInputStream xmlNewInputStream__internal_alias +#endif +#endif + +#ifdef bottom_threads +#undef xmlNewMutex +extern __typeof (xmlNewMutex) xmlNewMutex __attribute((alias("xmlNewMutex__internal_alias"))); +#else +#ifndef xmlNewMutex +extern __typeof (xmlNewMutex) xmlNewMutex__internal_alias __attribute((visibility("hidden"))); +#define xmlNewMutex xmlNewMutex__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlNewNode +extern __typeof (xmlNewNode) xmlNewNode __attribute((alias("xmlNewNode__internal_alias"))); +#else +#ifndef xmlNewNode +extern __typeof (xmlNewNode) xmlNewNode__internal_alias __attribute((visibility("hidden"))); +#define xmlNewNode xmlNewNode__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlNewNodeEatName +extern __typeof (xmlNewNodeEatName) xmlNewNodeEatName __attribute((alias("xmlNewNodeEatName__internal_alias"))); +#else +#ifndef xmlNewNodeEatName +extern __typeof (xmlNewNodeEatName) xmlNewNodeEatName__internal_alias __attribute((visibility("hidden"))); +#define xmlNewNodeEatName xmlNewNodeEatName__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlNewNs +extern __typeof (xmlNewNs) xmlNewNs __attribute((alias("xmlNewNs__internal_alias"))); +#else +#ifndef xmlNewNs +extern __typeof (xmlNewNs) xmlNewNs__internal_alias __attribute((visibility("hidden"))); +#define xmlNewNs xmlNewNs__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlNewNsProp +extern __typeof (xmlNewNsProp) xmlNewNsProp __attribute((alias("xmlNewNsProp__internal_alias"))); +#else +#ifndef xmlNewNsProp +extern __typeof (xmlNewNsProp) xmlNewNsProp__internal_alias __attribute((visibility("hidden"))); +#define xmlNewNsProp xmlNewNsProp__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlNewNsPropEatName +extern __typeof (xmlNewNsPropEatName) xmlNewNsPropEatName __attribute((alias("xmlNewNsPropEatName__internal_alias"))); +#else +#ifndef xmlNewNsPropEatName +extern __typeof (xmlNewNsPropEatName) xmlNewNsPropEatName__internal_alias __attribute((visibility("hidden"))); +#define xmlNewNsPropEatName xmlNewNsPropEatName__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlNewPI +extern __typeof (xmlNewPI) xmlNewPI __attribute((alias("xmlNewPI__internal_alias"))); +#else +#ifndef xmlNewPI +extern __typeof (xmlNewPI) xmlNewPI__internal_alias __attribute((visibility("hidden"))); +#define xmlNewPI xmlNewPI__internal_alias +#endif +#endif + +#ifdef bottom_parserInternals +#undef xmlNewParserCtxt +extern __typeof (xmlNewParserCtxt) xmlNewParserCtxt __attribute((alias("xmlNewParserCtxt__internal_alias"))); +#else +#ifndef xmlNewParserCtxt +extern __typeof (xmlNewParserCtxt) xmlNewParserCtxt__internal_alias __attribute((visibility("hidden"))); +#define xmlNewParserCtxt xmlNewParserCtxt__internal_alias +#endif +#endif + +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_tree +#undef xmlNewProp +extern __typeof (xmlNewProp) xmlNewProp __attribute((alias("xmlNewProp__internal_alias"))); +#else +#ifndef xmlNewProp +extern __typeof (xmlNewProp) xmlNewProp__internal_alias __attribute((visibility("hidden"))); +#define xmlNewProp xmlNewProp__internal_alias +#endif +#endif +#endif + +#ifdef bottom_threads +#undef xmlNewRMutex +extern __typeof (xmlNewRMutex) xmlNewRMutex __attribute((alias("xmlNewRMutex__internal_alias"))); +#else +#ifndef xmlNewRMutex +extern __typeof (xmlNewRMutex) xmlNewRMutex__internal_alias __attribute((visibility("hidden"))); +#define xmlNewRMutex xmlNewRMutex__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlNewReference +extern __typeof (xmlNewReference) xmlNewReference __attribute((alias("xmlNewReference__internal_alias"))); +#else +#ifndef xmlNewReference +extern __typeof (xmlNewReference) xmlNewReference__internal_alias __attribute((visibility("hidden"))); +#define xmlNewReference xmlNewReference__internal_alias +#endif +#endif + +#ifdef bottom_parserInternals +#undef xmlNewStringInputStream +extern __typeof (xmlNewStringInputStream) xmlNewStringInputStream __attribute((alias("xmlNewStringInputStream__internal_alias"))); +#else +#ifndef xmlNewStringInputStream +extern __typeof (xmlNewStringInputStream) xmlNewStringInputStream__internal_alias __attribute((visibility("hidden"))); +#define xmlNewStringInputStream xmlNewStringInputStream__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlNewText +extern __typeof (xmlNewText) xmlNewText __attribute((alias("xmlNewText__internal_alias"))); +#else +#ifndef xmlNewText +extern __typeof (xmlNewText) xmlNewText__internal_alias __attribute((visibility("hidden"))); +#define xmlNewText xmlNewText__internal_alias +#endif +#endif + +#if defined(LIBXML_TREE_ENABLED) +#ifdef bottom_tree +#undef xmlNewTextChild +extern __typeof (xmlNewTextChild) xmlNewTextChild __attribute((alias("xmlNewTextChild__internal_alias"))); +#else +#ifndef xmlNewTextChild +extern __typeof (xmlNewTextChild) xmlNewTextChild__internal_alias __attribute((visibility("hidden"))); +#define xmlNewTextChild xmlNewTextChild__internal_alias +#endif +#endif +#endif + +#ifdef bottom_tree +#undef xmlNewTextLen +extern __typeof (xmlNewTextLen) xmlNewTextLen __attribute((alias("xmlNewTextLen__internal_alias"))); +#else +#ifndef xmlNewTextLen +extern __typeof (xmlNewTextLen) xmlNewTextLen__internal_alias __attribute((visibility("hidden"))); +#define xmlNewTextLen xmlNewTextLen__internal_alias +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlNewTextReader +extern __typeof (xmlNewTextReader) xmlNewTextReader __attribute((alias("xmlNewTextReader__internal_alias"))); +#else +#ifndef xmlNewTextReader +extern __typeof (xmlNewTextReader) xmlNewTextReader__internal_alias __attribute((visibility("hidden"))); +#define xmlNewTextReader xmlNewTextReader__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlNewTextReaderFilename +extern __typeof (xmlNewTextReaderFilename) xmlNewTextReaderFilename __attribute((alias("xmlNewTextReaderFilename__internal_alias"))); +#else +#ifndef xmlNewTextReaderFilename +extern __typeof (xmlNewTextReaderFilename) xmlNewTextReaderFilename__internal_alias __attribute((visibility("hidden"))); +#define xmlNewTextReaderFilename xmlNewTextReaderFilename__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlNewTextWriter +extern __typeof (xmlNewTextWriter) xmlNewTextWriter __attribute((alias("xmlNewTextWriter__internal_alias"))); +#else +#ifndef xmlNewTextWriter +extern __typeof (xmlNewTextWriter) xmlNewTextWriter__internal_alias __attribute((visibility("hidden"))); +#define xmlNewTextWriter xmlNewTextWriter__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlNewTextWriterDoc +extern __typeof (xmlNewTextWriterDoc) xmlNewTextWriterDoc __attribute((alias("xmlNewTextWriterDoc__internal_alias"))); +#else +#ifndef xmlNewTextWriterDoc +extern __typeof (xmlNewTextWriterDoc) xmlNewTextWriterDoc__internal_alias __attribute((visibility("hidden"))); +#define xmlNewTextWriterDoc xmlNewTextWriterDoc__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlNewTextWriterFilename +extern __typeof (xmlNewTextWriterFilename) xmlNewTextWriterFilename __attribute((alias("xmlNewTextWriterFilename__internal_alias"))); +#else +#ifndef xmlNewTextWriterFilename +extern __typeof (xmlNewTextWriterFilename) xmlNewTextWriterFilename__internal_alias __attribute((visibility("hidden"))); +#define xmlNewTextWriterFilename xmlNewTextWriterFilename__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlNewTextWriterMemory +extern __typeof (xmlNewTextWriterMemory) xmlNewTextWriterMemory __attribute((alias("xmlNewTextWriterMemory__internal_alias"))); +#else +#ifndef xmlNewTextWriterMemory +extern __typeof (xmlNewTextWriterMemory) xmlNewTextWriterMemory__internal_alias __attribute((visibility("hidden"))); +#define xmlNewTextWriterMemory xmlNewTextWriterMemory__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlNewTextWriterPushParser +extern __typeof (xmlNewTextWriterPushParser) xmlNewTextWriterPushParser __attribute((alias("xmlNewTextWriterPushParser__internal_alias"))); +#else +#ifndef xmlNewTextWriterPushParser +extern __typeof (xmlNewTextWriterPushParser) xmlNewTextWriterPushParser__internal_alias __attribute((visibility("hidden"))); +#define xmlNewTextWriterPushParser xmlNewTextWriterPushParser__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlNewTextWriterTree +extern __typeof (xmlNewTextWriterTree) xmlNewTextWriterTree __attribute((alias("xmlNewTextWriterTree__internal_alias"))); +#else +#ifndef xmlNewTextWriterTree +extern __typeof (xmlNewTextWriterTree) xmlNewTextWriterTree__internal_alias __attribute((visibility("hidden"))); +#define xmlNewTextWriterTree xmlNewTextWriterTree__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_VALID_ENABLED) +#ifdef bottom_valid +#undef xmlNewValidCtxt +extern __typeof (xmlNewValidCtxt) xmlNewValidCtxt __attribute((alias("xmlNewValidCtxt__internal_alias"))); +#else +#ifndef xmlNewValidCtxt +extern __typeof (xmlNewValidCtxt) xmlNewValidCtxt__internal_alias __attribute((visibility("hidden"))); +#define xmlNewValidCtxt xmlNewValidCtxt__internal_alias +#endif +#endif +#endif + +#ifdef bottom_parserInternals +#undef xmlNextChar +extern __typeof (xmlNextChar) xmlNextChar __attribute((alias("xmlNextChar__internal_alias"))); +#else +#ifndef xmlNextChar +extern __typeof (xmlNextChar) xmlNextChar__internal_alias __attribute((visibility("hidden"))); +#define xmlNextChar xmlNextChar__internal_alias +#endif +#endif + +#if defined(LIBXML_TREE_ENABLED) +#ifdef bottom_tree +#undef xmlNextElementSibling +extern __typeof (xmlNextElementSibling) xmlNextElementSibling __attribute((alias("xmlNextElementSibling__internal_alias"))); +#else +#ifndef xmlNextElementSibling +extern __typeof (xmlNextElementSibling) xmlNextElementSibling__internal_alias __attribute((visibility("hidden"))); +#define xmlNextElementSibling xmlNextElementSibling__internal_alias +#endif +#endif +#endif + +#ifdef bottom_xmlIO +#undef xmlNoNetExternalEntityLoader +extern __typeof (xmlNoNetExternalEntityLoader) xmlNoNetExternalEntityLoader __attribute((alias("xmlNoNetExternalEntityLoader__internal_alias"))); +#else +#ifndef xmlNoNetExternalEntityLoader +extern __typeof (xmlNoNetExternalEntityLoader) xmlNoNetExternalEntityLoader__internal_alias __attribute((visibility("hidden"))); +#define xmlNoNetExternalEntityLoader xmlNoNetExternalEntityLoader__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlNodeAddContent +extern __typeof (xmlNodeAddContent) xmlNodeAddContent __attribute((alias("xmlNodeAddContent__internal_alias"))); +#else +#ifndef xmlNodeAddContent +extern __typeof (xmlNodeAddContent) xmlNodeAddContent__internal_alias __attribute((visibility("hidden"))); +#define xmlNodeAddContent xmlNodeAddContent__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlNodeAddContentLen +extern __typeof (xmlNodeAddContentLen) xmlNodeAddContentLen __attribute((alias("xmlNodeAddContentLen__internal_alias"))); +#else +#ifndef xmlNodeAddContentLen +extern __typeof (xmlNodeAddContentLen) xmlNodeAddContentLen__internal_alias __attribute((visibility("hidden"))); +#define xmlNodeAddContentLen xmlNodeAddContentLen__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlNodeBufGetContent +extern __typeof (xmlNodeBufGetContent) xmlNodeBufGetContent __attribute((alias("xmlNodeBufGetContent__internal_alias"))); +#else +#ifndef xmlNodeBufGetContent +extern __typeof (xmlNodeBufGetContent) xmlNodeBufGetContent__internal_alias __attribute((visibility("hidden"))); +#define xmlNodeBufGetContent xmlNodeBufGetContent__internal_alias +#endif +#endif + +#if defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_xmlsave +#undef xmlNodeDump +extern __typeof (xmlNodeDump) xmlNodeDump __attribute((alias("xmlNodeDump__internal_alias"))); +#else +#ifndef xmlNodeDump +extern __typeof (xmlNodeDump) xmlNodeDump__internal_alias __attribute((visibility("hidden"))); +#define xmlNodeDump xmlNodeDump__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_xmlsave +#undef xmlNodeDumpOutput +extern __typeof (xmlNodeDumpOutput) xmlNodeDumpOutput __attribute((alias("xmlNodeDumpOutput__internal_alias"))); +#else +#ifndef xmlNodeDumpOutput +extern __typeof (xmlNodeDumpOutput) xmlNodeDumpOutput__internal_alias __attribute((visibility("hidden"))); +#define xmlNodeDumpOutput xmlNodeDumpOutput__internal_alias +#endif +#endif +#endif + +#ifdef bottom_tree +#undef xmlNodeGetBase +extern __typeof (xmlNodeGetBase) xmlNodeGetBase __attribute((alias("xmlNodeGetBase__internal_alias"))); +#else +#ifndef xmlNodeGetBase +extern __typeof (xmlNodeGetBase) xmlNodeGetBase__internal_alias __attribute((visibility("hidden"))); +#define xmlNodeGetBase xmlNodeGetBase__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlNodeGetContent +extern __typeof (xmlNodeGetContent) xmlNodeGetContent __attribute((alias("xmlNodeGetContent__internal_alias"))); +#else +#ifndef xmlNodeGetContent +extern __typeof (xmlNodeGetContent) xmlNodeGetContent__internal_alias __attribute((visibility("hidden"))); +#define xmlNodeGetContent xmlNodeGetContent__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlNodeGetLang +extern __typeof (xmlNodeGetLang) xmlNodeGetLang __attribute((alias("xmlNodeGetLang__internal_alias"))); +#else +#ifndef xmlNodeGetLang +extern __typeof (xmlNodeGetLang) xmlNodeGetLang__internal_alias __attribute((visibility("hidden"))); +#define xmlNodeGetLang xmlNodeGetLang__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlNodeGetSpacePreserve +extern __typeof (xmlNodeGetSpacePreserve) xmlNodeGetSpacePreserve __attribute((alias("xmlNodeGetSpacePreserve__internal_alias"))); +#else +#ifndef xmlNodeGetSpacePreserve +extern __typeof (xmlNodeGetSpacePreserve) xmlNodeGetSpacePreserve__internal_alias __attribute((visibility("hidden"))); +#define xmlNodeGetSpacePreserve xmlNodeGetSpacePreserve__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlNodeIsText +extern __typeof (xmlNodeIsText) xmlNodeIsText __attribute((alias("xmlNodeIsText__internal_alias"))); +#else +#ifndef xmlNodeIsText +extern __typeof (xmlNodeIsText) xmlNodeIsText__internal_alias __attribute((visibility("hidden"))); +#define xmlNodeIsText xmlNodeIsText__internal_alias +#endif +#endif + +#if defined(LIBXML_TREE_ENABLED) +#ifdef bottom_tree +#undef xmlNodeListGetRawString +extern __typeof (xmlNodeListGetRawString) xmlNodeListGetRawString __attribute((alias("xmlNodeListGetRawString__internal_alias"))); +#else +#ifndef xmlNodeListGetRawString +extern __typeof (xmlNodeListGetRawString) xmlNodeListGetRawString__internal_alias __attribute((visibility("hidden"))); +#define xmlNodeListGetRawString xmlNodeListGetRawString__internal_alias +#endif +#endif +#endif + +#ifdef bottom_tree +#undef xmlNodeListGetString +extern __typeof (xmlNodeListGetString) xmlNodeListGetString __attribute((alias("xmlNodeListGetString__internal_alias"))); +#else +#ifndef xmlNodeListGetString +extern __typeof (xmlNodeListGetString) xmlNodeListGetString__internal_alias __attribute((visibility("hidden"))); +#define xmlNodeListGetString xmlNodeListGetString__internal_alias +#endif +#endif + +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) +#ifdef bottom_tree +#undef xmlNodeSetBase +extern __typeof (xmlNodeSetBase) xmlNodeSetBase __attribute((alias("xmlNodeSetBase__internal_alias"))); +#else +#ifndef xmlNodeSetBase +extern __typeof (xmlNodeSetBase) xmlNodeSetBase__internal_alias __attribute((visibility("hidden"))); +#define xmlNodeSetBase xmlNodeSetBase__internal_alias +#endif +#endif +#endif + +#ifdef bottom_tree +#undef xmlNodeSetContent +extern __typeof (xmlNodeSetContent) xmlNodeSetContent __attribute((alias("xmlNodeSetContent__internal_alias"))); +#else +#ifndef xmlNodeSetContent +extern __typeof (xmlNodeSetContent) xmlNodeSetContent__internal_alias __attribute((visibility("hidden"))); +#define xmlNodeSetContent xmlNodeSetContent__internal_alias +#endif +#endif + +#if defined(LIBXML_TREE_ENABLED) +#ifdef bottom_tree +#undef xmlNodeSetContentLen +extern __typeof (xmlNodeSetContentLen) xmlNodeSetContentLen __attribute((alias("xmlNodeSetContentLen__internal_alias"))); +#else +#ifndef xmlNodeSetContentLen +extern __typeof (xmlNodeSetContentLen) xmlNodeSetContentLen__internal_alias __attribute((visibility("hidden"))); +#define xmlNodeSetContentLen xmlNodeSetContentLen__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_TREE_ENABLED) +#ifdef bottom_tree +#undef xmlNodeSetLang +extern __typeof (xmlNodeSetLang) xmlNodeSetLang __attribute((alias("xmlNodeSetLang__internal_alias"))); +#else +#ifndef xmlNodeSetLang +extern __typeof (xmlNodeSetLang) xmlNodeSetLang__internal_alias __attribute((visibility("hidden"))); +#define xmlNodeSetLang xmlNodeSetLang__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_TREE_ENABLED) +#ifdef bottom_tree +#undef xmlNodeSetName +extern __typeof (xmlNodeSetName) xmlNodeSetName __attribute((alias("xmlNodeSetName__internal_alias"))); +#else +#ifndef xmlNodeSetName +extern __typeof (xmlNodeSetName) xmlNodeSetName__internal_alias __attribute((visibility("hidden"))); +#define xmlNodeSetName xmlNodeSetName__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_TREE_ENABLED) +#ifdef bottom_tree +#undef xmlNodeSetSpacePreserve +extern __typeof (xmlNodeSetSpacePreserve) xmlNodeSetSpacePreserve __attribute((alias("xmlNodeSetSpacePreserve__internal_alias"))); +#else +#ifndef xmlNodeSetSpacePreserve +extern __typeof (xmlNodeSetSpacePreserve) xmlNodeSetSpacePreserve__internal_alias __attribute((visibility("hidden"))); +#define xmlNodeSetSpacePreserve xmlNodeSetSpacePreserve__internal_alias +#endif +#endif +#endif + +#ifdef bottom_uri +#undef xmlNormalizeURIPath +extern __typeof (xmlNormalizeURIPath) xmlNormalizeURIPath __attribute((alias("xmlNormalizeURIPath__internal_alias"))); +#else +#ifndef xmlNormalizeURIPath +extern __typeof (xmlNormalizeURIPath) xmlNormalizeURIPath__internal_alias __attribute((visibility("hidden"))); +#define xmlNormalizeURIPath xmlNormalizeURIPath__internal_alias +#endif +#endif + +#ifdef bottom_xmlIO +#undef xmlNormalizeWindowsPath +extern __typeof (xmlNormalizeWindowsPath) xmlNormalizeWindowsPath __attribute((alias("xmlNormalizeWindowsPath__internal_alias"))); +#else +#ifndef xmlNormalizeWindowsPath +extern __typeof (xmlNormalizeWindowsPath) xmlNormalizeWindowsPath__internal_alias __attribute((visibility("hidden"))); +#define xmlNormalizeWindowsPath xmlNormalizeWindowsPath__internal_alias +#endif +#endif + +#if defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_xmlIO +#undef xmlOutputBufferClose +extern __typeof (xmlOutputBufferClose) xmlOutputBufferClose __attribute((alias("xmlOutputBufferClose__internal_alias"))); +#else +#ifndef xmlOutputBufferClose +extern __typeof (xmlOutputBufferClose) xmlOutputBufferClose__internal_alias __attribute((visibility("hidden"))); +#define xmlOutputBufferClose xmlOutputBufferClose__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_xmlIO +#undef xmlOutputBufferCreateBuffer +extern __typeof (xmlOutputBufferCreateBuffer) xmlOutputBufferCreateBuffer __attribute((alias("xmlOutputBufferCreateBuffer__internal_alias"))); +#else +#ifndef xmlOutputBufferCreateBuffer +extern __typeof (xmlOutputBufferCreateBuffer) xmlOutputBufferCreateBuffer__internal_alias __attribute((visibility("hidden"))); +#define xmlOutputBufferCreateBuffer xmlOutputBufferCreateBuffer__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_xmlIO +#undef xmlOutputBufferCreateFd +extern __typeof (xmlOutputBufferCreateFd) xmlOutputBufferCreateFd __attribute((alias("xmlOutputBufferCreateFd__internal_alias"))); +#else +#ifndef xmlOutputBufferCreateFd +extern __typeof (xmlOutputBufferCreateFd) xmlOutputBufferCreateFd__internal_alias __attribute((visibility("hidden"))); +#define xmlOutputBufferCreateFd xmlOutputBufferCreateFd__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_xmlIO +#undef xmlOutputBufferCreateFile +extern __typeof (xmlOutputBufferCreateFile) xmlOutputBufferCreateFile __attribute((alias("xmlOutputBufferCreateFile__internal_alias"))); +#else +#ifndef xmlOutputBufferCreateFile +extern __typeof (xmlOutputBufferCreateFile) xmlOutputBufferCreateFile__internal_alias __attribute((visibility("hidden"))); +#define xmlOutputBufferCreateFile xmlOutputBufferCreateFile__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_xmlIO +#undef xmlOutputBufferCreateFilename +extern __typeof (xmlOutputBufferCreateFilename) xmlOutputBufferCreateFilename __attribute((alias("xmlOutputBufferCreateFilename__internal_alias"))); +#else +#ifndef xmlOutputBufferCreateFilename +extern __typeof (xmlOutputBufferCreateFilename) xmlOutputBufferCreateFilename__internal_alias __attribute((visibility("hidden"))); +#define xmlOutputBufferCreateFilename xmlOutputBufferCreateFilename__internal_alias +#endif +#endif +#endif + +#ifdef bottom_xmlIO +#undef xmlOutputBufferCreateFilenameDefault +extern __typeof (xmlOutputBufferCreateFilenameDefault) xmlOutputBufferCreateFilenameDefault __attribute((alias("xmlOutputBufferCreateFilenameDefault__internal_alias"))); +#else +#ifndef xmlOutputBufferCreateFilenameDefault +extern __typeof (xmlOutputBufferCreateFilenameDefault) xmlOutputBufferCreateFilenameDefault__internal_alias __attribute((visibility("hidden"))); +#define xmlOutputBufferCreateFilenameDefault xmlOutputBufferCreateFilenameDefault__internal_alias +#endif +#endif + +#if defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_xmlIO +#undef xmlOutputBufferCreateIO +extern __typeof (xmlOutputBufferCreateIO) xmlOutputBufferCreateIO __attribute((alias("xmlOutputBufferCreateIO__internal_alias"))); +#else +#ifndef xmlOutputBufferCreateIO +extern __typeof (xmlOutputBufferCreateIO) xmlOutputBufferCreateIO__internal_alias __attribute((visibility("hidden"))); +#define xmlOutputBufferCreateIO xmlOutputBufferCreateIO__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_xmlIO +#undef xmlOutputBufferFlush +extern __typeof (xmlOutputBufferFlush) xmlOutputBufferFlush __attribute((alias("xmlOutputBufferFlush__internal_alias"))); +#else +#ifndef xmlOutputBufferFlush +extern __typeof (xmlOutputBufferFlush) xmlOutputBufferFlush__internal_alias __attribute((visibility("hidden"))); +#define xmlOutputBufferFlush xmlOutputBufferFlush__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_xmlIO +#undef xmlOutputBufferGetContent +extern __typeof (xmlOutputBufferGetContent) xmlOutputBufferGetContent __attribute((alias("xmlOutputBufferGetContent__internal_alias"))); +#else +#ifndef xmlOutputBufferGetContent +extern __typeof (xmlOutputBufferGetContent) xmlOutputBufferGetContent__internal_alias __attribute((visibility("hidden"))); +#define xmlOutputBufferGetContent xmlOutputBufferGetContent__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_xmlIO +#undef xmlOutputBufferGetSize +extern __typeof (xmlOutputBufferGetSize) xmlOutputBufferGetSize __attribute((alias("xmlOutputBufferGetSize__internal_alias"))); +#else +#ifndef xmlOutputBufferGetSize +extern __typeof (xmlOutputBufferGetSize) xmlOutputBufferGetSize__internal_alias __attribute((visibility("hidden"))); +#define xmlOutputBufferGetSize xmlOutputBufferGetSize__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_xmlIO +#undef xmlOutputBufferWrite +extern __typeof (xmlOutputBufferWrite) xmlOutputBufferWrite __attribute((alias("xmlOutputBufferWrite__internal_alias"))); +#else +#ifndef xmlOutputBufferWrite +extern __typeof (xmlOutputBufferWrite) xmlOutputBufferWrite__internal_alias __attribute((visibility("hidden"))); +#define xmlOutputBufferWrite xmlOutputBufferWrite__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_xmlIO +#undef xmlOutputBufferWriteEscape +extern __typeof (xmlOutputBufferWriteEscape) xmlOutputBufferWriteEscape __attribute((alias("xmlOutputBufferWriteEscape__internal_alias"))); +#else +#ifndef xmlOutputBufferWriteEscape +extern __typeof (xmlOutputBufferWriteEscape) xmlOutputBufferWriteEscape__internal_alias __attribute((visibility("hidden"))); +#define xmlOutputBufferWriteEscape xmlOutputBufferWriteEscape__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_xmlIO +#undef xmlOutputBufferWriteString +extern __typeof (xmlOutputBufferWriteString) xmlOutputBufferWriteString __attribute((alias("xmlOutputBufferWriteString__internal_alias"))); +#else +#ifndef xmlOutputBufferWriteString +extern __typeof (xmlOutputBufferWriteString) xmlOutputBufferWriteString__internal_alias __attribute((visibility("hidden"))); +#define xmlOutputBufferWriteString xmlOutputBufferWriteString__internal_alias +#endif +#endif +#endif + +#ifdef bottom_parser +#undef xmlParseAttValue +extern __typeof (xmlParseAttValue) xmlParseAttValue __attribute((alias("xmlParseAttValue__internal_alias"))); +#else +#ifndef xmlParseAttValue +extern __typeof (xmlParseAttValue) xmlParseAttValue__internal_alias __attribute((visibility("hidden"))); +#define xmlParseAttValue xmlParseAttValue__internal_alias +#endif +#endif + +#if defined(LIBXML_SAX1_ENABLED) +#ifdef bottom_parser +#undef xmlParseAttribute +extern __typeof (xmlParseAttribute) xmlParseAttribute __attribute((alias("xmlParseAttribute__internal_alias"))); +#else +#ifndef xmlParseAttribute +extern __typeof (xmlParseAttribute) xmlParseAttribute__internal_alias __attribute((visibility("hidden"))); +#define xmlParseAttribute xmlParseAttribute__internal_alias +#endif +#endif +#endif + +#ifdef bottom_parser +#undef xmlParseAttributeListDecl +extern __typeof (xmlParseAttributeListDecl) xmlParseAttributeListDecl __attribute((alias("xmlParseAttributeListDecl__internal_alias"))); +#else +#ifndef xmlParseAttributeListDecl +extern __typeof (xmlParseAttributeListDecl) xmlParseAttributeListDecl__internal_alias __attribute((visibility("hidden"))); +#define xmlParseAttributeListDecl xmlParseAttributeListDecl__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef xmlParseAttributeType +extern __typeof (xmlParseAttributeType) xmlParseAttributeType __attribute((alias("xmlParseAttributeType__internal_alias"))); +#else +#ifndef xmlParseAttributeType +extern __typeof (xmlParseAttributeType) xmlParseAttributeType__internal_alias __attribute((visibility("hidden"))); +#define xmlParseAttributeType xmlParseAttributeType__internal_alias +#endif +#endif + +#if defined(LIBXML_SAX1_ENABLED) +#ifdef bottom_parser +#undef xmlParseBalancedChunkMemory +extern __typeof (xmlParseBalancedChunkMemory) xmlParseBalancedChunkMemory __attribute((alias("xmlParseBalancedChunkMemory__internal_alias"))); +#else +#ifndef xmlParseBalancedChunkMemory +extern __typeof (xmlParseBalancedChunkMemory) xmlParseBalancedChunkMemory__internal_alias __attribute((visibility("hidden"))); +#define xmlParseBalancedChunkMemory xmlParseBalancedChunkMemory__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SAX1_ENABLED) +#ifdef bottom_parser +#undef xmlParseBalancedChunkMemoryRecover +extern __typeof (xmlParseBalancedChunkMemoryRecover) xmlParseBalancedChunkMemoryRecover __attribute((alias("xmlParseBalancedChunkMemoryRecover__internal_alias"))); +#else +#ifndef xmlParseBalancedChunkMemoryRecover +extern __typeof (xmlParseBalancedChunkMemoryRecover) xmlParseBalancedChunkMemoryRecover__internal_alias __attribute((visibility("hidden"))); +#define xmlParseBalancedChunkMemoryRecover xmlParseBalancedChunkMemoryRecover__internal_alias +#endif +#endif +#endif + +#ifdef bottom_parser +#undef xmlParseCDSect +extern __typeof (xmlParseCDSect) xmlParseCDSect __attribute((alias("xmlParseCDSect__internal_alias"))); +#else +#ifndef xmlParseCDSect +extern __typeof (xmlParseCDSect) xmlParseCDSect__internal_alias __attribute((visibility("hidden"))); +#define xmlParseCDSect xmlParseCDSect__internal_alias +#endif +#endif + +#if defined(LIBXML_CATALOG_ENABLED) +#ifdef bottom_catalog +#undef xmlParseCatalogFile +extern __typeof (xmlParseCatalogFile) xmlParseCatalogFile __attribute((alias("xmlParseCatalogFile__internal_alias"))); +#else +#ifndef xmlParseCatalogFile +extern __typeof (xmlParseCatalogFile) xmlParseCatalogFile__internal_alias __attribute((visibility("hidden"))); +#define xmlParseCatalogFile xmlParseCatalogFile__internal_alias +#endif +#endif +#endif + +#ifdef bottom_parser +#undef xmlParseCharData +extern __typeof (xmlParseCharData) xmlParseCharData __attribute((alias("xmlParseCharData__internal_alias"))); +#else +#ifndef xmlParseCharData +extern __typeof (xmlParseCharData) xmlParseCharData__internal_alias __attribute((visibility("hidden"))); +#define xmlParseCharData xmlParseCharData__internal_alias +#endif +#endif + +#ifdef bottom_encoding +#undef xmlParseCharEncoding +extern __typeof (xmlParseCharEncoding) xmlParseCharEncoding __attribute((alias("xmlParseCharEncoding__internal_alias"))); +#else +#ifndef xmlParseCharEncoding +extern __typeof (xmlParseCharEncoding) xmlParseCharEncoding__internal_alias __attribute((visibility("hidden"))); +#define xmlParseCharEncoding xmlParseCharEncoding__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef xmlParseCharRef +extern __typeof (xmlParseCharRef) xmlParseCharRef __attribute((alias("xmlParseCharRef__internal_alias"))); +#else +#ifndef xmlParseCharRef +extern __typeof (xmlParseCharRef) xmlParseCharRef__internal_alias __attribute((visibility("hidden"))); +#define xmlParseCharRef xmlParseCharRef__internal_alias +#endif +#endif + +#if defined(LIBXML_PUSH_ENABLED) +#ifdef bottom_parser +#undef xmlParseChunk +extern __typeof (xmlParseChunk) xmlParseChunk __attribute((alias("xmlParseChunk__internal_alias"))); +#else +#ifndef xmlParseChunk +extern __typeof (xmlParseChunk) xmlParseChunk__internal_alias __attribute((visibility("hidden"))); +#define xmlParseChunk xmlParseChunk__internal_alias +#endif +#endif +#endif + +#ifdef bottom_parser +#undef xmlParseComment +extern __typeof (xmlParseComment) xmlParseComment __attribute((alias("xmlParseComment__internal_alias"))); +#else +#ifndef xmlParseComment +extern __typeof (xmlParseComment) xmlParseComment__internal_alias __attribute((visibility("hidden"))); +#define xmlParseComment xmlParseComment__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef xmlParseContent +extern __typeof (xmlParseContent) xmlParseContent __attribute((alias("xmlParseContent__internal_alias"))); +#else +#ifndef xmlParseContent +extern __typeof (xmlParseContent) xmlParseContent__internal_alias __attribute((visibility("hidden"))); +#define xmlParseContent xmlParseContent__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef xmlParseCtxtExternalEntity +extern __typeof (xmlParseCtxtExternalEntity) xmlParseCtxtExternalEntity __attribute((alias("xmlParseCtxtExternalEntity__internal_alias"))); +#else +#ifndef xmlParseCtxtExternalEntity +extern __typeof (xmlParseCtxtExternalEntity) xmlParseCtxtExternalEntity__internal_alias __attribute((visibility("hidden"))); +#define xmlParseCtxtExternalEntity xmlParseCtxtExternalEntity__internal_alias +#endif +#endif + +#if defined(LIBXML_VALID_ENABLED) +#ifdef bottom_parser +#undef xmlParseDTD +extern __typeof (xmlParseDTD) xmlParseDTD __attribute((alias("xmlParseDTD__internal_alias"))); +#else +#ifndef xmlParseDTD +extern __typeof (xmlParseDTD) xmlParseDTD__internal_alias __attribute((visibility("hidden"))); +#define xmlParseDTD xmlParseDTD__internal_alias +#endif +#endif +#endif + +#ifdef bottom_parser +#undef xmlParseDefaultDecl +extern __typeof (xmlParseDefaultDecl) xmlParseDefaultDecl __attribute((alias("xmlParseDefaultDecl__internal_alias"))); +#else +#ifndef xmlParseDefaultDecl +extern __typeof (xmlParseDefaultDecl) xmlParseDefaultDecl__internal_alias __attribute((visibility("hidden"))); +#define xmlParseDefaultDecl xmlParseDefaultDecl__internal_alias +#endif +#endif + +#if defined(LIBXML_SAX1_ENABLED) +#ifdef bottom_parser +#undef xmlParseDoc +extern __typeof (xmlParseDoc) xmlParseDoc __attribute((alias("xmlParseDoc__internal_alias"))); +#else +#ifndef xmlParseDoc +extern __typeof (xmlParseDoc) xmlParseDoc__internal_alias __attribute((visibility("hidden"))); +#define xmlParseDoc xmlParseDoc__internal_alias +#endif +#endif +#endif + +#ifdef bottom_parser +#undef xmlParseDocTypeDecl +extern __typeof (xmlParseDocTypeDecl) xmlParseDocTypeDecl __attribute((alias("xmlParseDocTypeDecl__internal_alias"))); +#else +#ifndef xmlParseDocTypeDecl +extern __typeof (xmlParseDocTypeDecl) xmlParseDocTypeDecl__internal_alias __attribute((visibility("hidden"))); +#define xmlParseDocTypeDecl xmlParseDocTypeDecl__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef xmlParseDocument +extern __typeof (xmlParseDocument) xmlParseDocument __attribute((alias("xmlParseDocument__internal_alias"))); +#else +#ifndef xmlParseDocument +extern __typeof (xmlParseDocument) xmlParseDocument__internal_alias __attribute((visibility("hidden"))); +#define xmlParseDocument xmlParseDocument__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef xmlParseElement +extern __typeof (xmlParseElement) xmlParseElement __attribute((alias("xmlParseElement__internal_alias"))); +#else +#ifndef xmlParseElement +extern __typeof (xmlParseElement) xmlParseElement__internal_alias __attribute((visibility("hidden"))); +#define xmlParseElement xmlParseElement__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef xmlParseElementChildrenContentDecl +extern __typeof (xmlParseElementChildrenContentDecl) xmlParseElementChildrenContentDecl __attribute((alias("xmlParseElementChildrenContentDecl__internal_alias"))); +#else +#ifndef xmlParseElementChildrenContentDecl +extern __typeof (xmlParseElementChildrenContentDecl) xmlParseElementChildrenContentDecl__internal_alias __attribute((visibility("hidden"))); +#define xmlParseElementChildrenContentDecl xmlParseElementChildrenContentDecl__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef xmlParseElementContentDecl +extern __typeof (xmlParseElementContentDecl) xmlParseElementContentDecl __attribute((alias("xmlParseElementContentDecl__internal_alias"))); +#else +#ifndef xmlParseElementContentDecl +extern __typeof (xmlParseElementContentDecl) xmlParseElementContentDecl__internal_alias __attribute((visibility("hidden"))); +#define xmlParseElementContentDecl xmlParseElementContentDecl__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef xmlParseElementDecl +extern __typeof (xmlParseElementDecl) xmlParseElementDecl __attribute((alias("xmlParseElementDecl__internal_alias"))); +#else +#ifndef xmlParseElementDecl +extern __typeof (xmlParseElementDecl) xmlParseElementDecl__internal_alias __attribute((visibility("hidden"))); +#define xmlParseElementDecl xmlParseElementDecl__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef xmlParseElementMixedContentDecl +extern __typeof (xmlParseElementMixedContentDecl) xmlParseElementMixedContentDecl __attribute((alias("xmlParseElementMixedContentDecl__internal_alias"))); +#else +#ifndef xmlParseElementMixedContentDecl +extern __typeof (xmlParseElementMixedContentDecl) xmlParseElementMixedContentDecl__internal_alias __attribute((visibility("hidden"))); +#define xmlParseElementMixedContentDecl xmlParseElementMixedContentDecl__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef xmlParseEncName +extern __typeof (xmlParseEncName) xmlParseEncName __attribute((alias("xmlParseEncName__internal_alias"))); +#else +#ifndef xmlParseEncName +extern __typeof (xmlParseEncName) xmlParseEncName__internal_alias __attribute((visibility("hidden"))); +#define xmlParseEncName xmlParseEncName__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef xmlParseEncodingDecl +extern __typeof (xmlParseEncodingDecl) xmlParseEncodingDecl __attribute((alias("xmlParseEncodingDecl__internal_alias"))); +#else +#ifndef xmlParseEncodingDecl +extern __typeof (xmlParseEncodingDecl) xmlParseEncodingDecl__internal_alias __attribute((visibility("hidden"))); +#define xmlParseEncodingDecl xmlParseEncodingDecl__internal_alias +#endif +#endif + +#if defined(LIBXML_SAX1_ENABLED) +#ifdef bottom_parser +#undef xmlParseEndTag +extern __typeof (xmlParseEndTag) xmlParseEndTag __attribute((alias("xmlParseEndTag__internal_alias"))); +#else +#ifndef xmlParseEndTag +extern __typeof (xmlParseEndTag) xmlParseEndTag__internal_alias __attribute((visibility("hidden"))); +#define xmlParseEndTag xmlParseEndTag__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SAX1_ENABLED) +#ifdef bottom_parser +#undef xmlParseEntity +extern __typeof (xmlParseEntity) xmlParseEntity __attribute((alias("xmlParseEntity__internal_alias"))); +#else +#ifndef xmlParseEntity +extern __typeof (xmlParseEntity) xmlParseEntity__internal_alias __attribute((visibility("hidden"))); +#define xmlParseEntity xmlParseEntity__internal_alias +#endif +#endif +#endif + +#ifdef bottom_parser +#undef xmlParseEntityDecl +extern __typeof (xmlParseEntityDecl) xmlParseEntityDecl __attribute((alias("xmlParseEntityDecl__internal_alias"))); +#else +#ifndef xmlParseEntityDecl +extern __typeof (xmlParseEntityDecl) xmlParseEntityDecl__internal_alias __attribute((visibility("hidden"))); +#define xmlParseEntityDecl xmlParseEntityDecl__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef xmlParseEntityRef +extern __typeof (xmlParseEntityRef) xmlParseEntityRef __attribute((alias("xmlParseEntityRef__internal_alias"))); +#else +#ifndef xmlParseEntityRef +extern __typeof (xmlParseEntityRef) xmlParseEntityRef__internal_alias __attribute((visibility("hidden"))); +#define xmlParseEntityRef xmlParseEntityRef__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef xmlParseEntityValue +extern __typeof (xmlParseEntityValue) xmlParseEntityValue __attribute((alias("xmlParseEntityValue__internal_alias"))); +#else +#ifndef xmlParseEntityValue +extern __typeof (xmlParseEntityValue) xmlParseEntityValue__internal_alias __attribute((visibility("hidden"))); +#define xmlParseEntityValue xmlParseEntityValue__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef xmlParseEnumeratedType +extern __typeof (xmlParseEnumeratedType) xmlParseEnumeratedType __attribute((alias("xmlParseEnumeratedType__internal_alias"))); +#else +#ifndef xmlParseEnumeratedType +extern __typeof (xmlParseEnumeratedType) xmlParseEnumeratedType__internal_alias __attribute((visibility("hidden"))); +#define xmlParseEnumeratedType xmlParseEnumeratedType__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef xmlParseEnumerationType +extern __typeof (xmlParseEnumerationType) xmlParseEnumerationType __attribute((alias("xmlParseEnumerationType__internal_alias"))); +#else +#ifndef xmlParseEnumerationType +extern __typeof (xmlParseEnumerationType) xmlParseEnumerationType__internal_alias __attribute((visibility("hidden"))); +#define xmlParseEnumerationType xmlParseEnumerationType__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef xmlParseExtParsedEnt +extern __typeof (xmlParseExtParsedEnt) xmlParseExtParsedEnt __attribute((alias("xmlParseExtParsedEnt__internal_alias"))); +#else +#ifndef xmlParseExtParsedEnt +extern __typeof (xmlParseExtParsedEnt) xmlParseExtParsedEnt__internal_alias __attribute((visibility("hidden"))); +#define xmlParseExtParsedEnt xmlParseExtParsedEnt__internal_alias +#endif +#endif + +#if defined(LIBXML_SAX1_ENABLED) +#ifdef bottom_parser +#undef xmlParseExternalEntity +extern __typeof (xmlParseExternalEntity) xmlParseExternalEntity __attribute((alias("xmlParseExternalEntity__internal_alias"))); +#else +#ifndef xmlParseExternalEntity +extern __typeof (xmlParseExternalEntity) xmlParseExternalEntity__internal_alias __attribute((visibility("hidden"))); +#define xmlParseExternalEntity xmlParseExternalEntity__internal_alias +#endif +#endif +#endif + +#ifdef bottom_parser +#undef xmlParseExternalID +extern __typeof (xmlParseExternalID) xmlParseExternalID __attribute((alias("xmlParseExternalID__internal_alias"))); +#else +#ifndef xmlParseExternalID +extern __typeof (xmlParseExternalID) xmlParseExternalID__internal_alias __attribute((visibility("hidden"))); +#define xmlParseExternalID xmlParseExternalID__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef xmlParseExternalSubset +extern __typeof (xmlParseExternalSubset) xmlParseExternalSubset __attribute((alias("xmlParseExternalSubset__internal_alias"))); +#else +#ifndef xmlParseExternalSubset +extern __typeof (xmlParseExternalSubset) xmlParseExternalSubset__internal_alias __attribute((visibility("hidden"))); +#define xmlParseExternalSubset xmlParseExternalSubset__internal_alias +#endif +#endif + +#if defined(LIBXML_SAX1_ENABLED) +#ifdef bottom_parser +#undef xmlParseFile +extern __typeof (xmlParseFile) xmlParseFile __attribute((alias("xmlParseFile__internal_alias"))); +#else +#ifndef xmlParseFile +extern __typeof (xmlParseFile) xmlParseFile__internal_alias __attribute((visibility("hidden"))); +#define xmlParseFile xmlParseFile__internal_alias +#endif +#endif +#endif + +#ifdef bottom_parser +#undef xmlParseInNodeContext +extern __typeof (xmlParseInNodeContext) xmlParseInNodeContext __attribute((alias("xmlParseInNodeContext__internal_alias"))); +#else +#ifndef xmlParseInNodeContext +extern __typeof (xmlParseInNodeContext) xmlParseInNodeContext__internal_alias __attribute((visibility("hidden"))); +#define xmlParseInNodeContext xmlParseInNodeContext__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef xmlParseMarkupDecl +extern __typeof (xmlParseMarkupDecl) xmlParseMarkupDecl __attribute((alias("xmlParseMarkupDecl__internal_alias"))); +#else +#ifndef xmlParseMarkupDecl +extern __typeof (xmlParseMarkupDecl) xmlParseMarkupDecl__internal_alias __attribute((visibility("hidden"))); +#define xmlParseMarkupDecl xmlParseMarkupDecl__internal_alias +#endif +#endif + +#if defined(LIBXML_SAX1_ENABLED) +#ifdef bottom_parser +#undef xmlParseMemory +extern __typeof (xmlParseMemory) xmlParseMemory __attribute((alias("xmlParseMemory__internal_alias"))); +#else +#ifndef xmlParseMemory +extern __typeof (xmlParseMemory) xmlParseMemory__internal_alias __attribute((visibility("hidden"))); +#define xmlParseMemory xmlParseMemory__internal_alias +#endif +#endif +#endif + +#ifdef bottom_parser +#undef xmlParseMisc +extern __typeof (xmlParseMisc) xmlParseMisc __attribute((alias("xmlParseMisc__internal_alias"))); +#else +#ifndef xmlParseMisc +extern __typeof (xmlParseMisc) xmlParseMisc__internal_alias __attribute((visibility("hidden"))); +#define xmlParseMisc xmlParseMisc__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef xmlParseName +extern __typeof (xmlParseName) xmlParseName __attribute((alias("xmlParseName__internal_alias"))); +#else +#ifndef xmlParseName +extern __typeof (xmlParseName) xmlParseName__internal_alias __attribute((visibility("hidden"))); +#define xmlParseName xmlParseName__internal_alias +#endif +#endif + +#if defined(LIBXML_LEGACY_ENABLED) +#ifdef bottom_legacy +#undef xmlParseNamespace +extern __typeof (xmlParseNamespace) xmlParseNamespace __attribute((alias("xmlParseNamespace__internal_alias"))); +#else +#ifndef xmlParseNamespace +extern __typeof (xmlParseNamespace) xmlParseNamespace__internal_alias __attribute((visibility("hidden"))); +#define xmlParseNamespace xmlParseNamespace__internal_alias +#endif +#endif +#endif + +#ifdef bottom_parser +#undef xmlParseNmtoken +extern __typeof (xmlParseNmtoken) xmlParseNmtoken __attribute((alias("xmlParseNmtoken__internal_alias"))); +#else +#ifndef xmlParseNmtoken +extern __typeof (xmlParseNmtoken) xmlParseNmtoken__internal_alias __attribute((visibility("hidden"))); +#define xmlParseNmtoken xmlParseNmtoken__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef xmlParseNotationDecl +extern __typeof (xmlParseNotationDecl) xmlParseNotationDecl __attribute((alias("xmlParseNotationDecl__internal_alias"))); +#else +#ifndef xmlParseNotationDecl +extern __typeof (xmlParseNotationDecl) xmlParseNotationDecl__internal_alias __attribute((visibility("hidden"))); +#define xmlParseNotationDecl xmlParseNotationDecl__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef xmlParseNotationType +extern __typeof (xmlParseNotationType) xmlParseNotationType __attribute((alias("xmlParseNotationType__internal_alias"))); +#else +#ifndef xmlParseNotationType +extern __typeof (xmlParseNotationType) xmlParseNotationType__internal_alias __attribute((visibility("hidden"))); +#define xmlParseNotationType xmlParseNotationType__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef xmlParsePEReference +extern __typeof (xmlParsePEReference) xmlParsePEReference __attribute((alias("xmlParsePEReference__internal_alias"))); +#else +#ifndef xmlParsePEReference +extern __typeof (xmlParsePEReference) xmlParsePEReference__internal_alias __attribute((visibility("hidden"))); +#define xmlParsePEReference xmlParsePEReference__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef xmlParsePI +extern __typeof (xmlParsePI) xmlParsePI __attribute((alias("xmlParsePI__internal_alias"))); +#else +#ifndef xmlParsePI +extern __typeof (xmlParsePI) xmlParsePI__internal_alias __attribute((visibility("hidden"))); +#define xmlParsePI xmlParsePI__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef xmlParsePITarget +extern __typeof (xmlParsePITarget) xmlParsePITarget __attribute((alias("xmlParsePITarget__internal_alias"))); +#else +#ifndef xmlParsePITarget +extern __typeof (xmlParsePITarget) xmlParsePITarget__internal_alias __attribute((visibility("hidden"))); +#define xmlParsePITarget xmlParsePITarget__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef xmlParsePubidLiteral +extern __typeof (xmlParsePubidLiteral) xmlParsePubidLiteral __attribute((alias("xmlParsePubidLiteral__internal_alias"))); +#else +#ifndef xmlParsePubidLiteral +extern __typeof (xmlParsePubidLiteral) xmlParsePubidLiteral__internal_alias __attribute((visibility("hidden"))); +#define xmlParsePubidLiteral xmlParsePubidLiteral__internal_alias +#endif +#endif + +#if defined(LIBXML_LEGACY_ENABLED) +#ifdef bottom_legacy +#undef xmlParseQuotedString +extern __typeof (xmlParseQuotedString) xmlParseQuotedString __attribute((alias("xmlParseQuotedString__internal_alias"))); +#else +#ifndef xmlParseQuotedString +extern __typeof (xmlParseQuotedString) xmlParseQuotedString__internal_alias __attribute((visibility("hidden"))); +#define xmlParseQuotedString xmlParseQuotedString__internal_alias +#endif +#endif +#endif + +#ifdef bottom_parser +#undef xmlParseReference +extern __typeof (xmlParseReference) xmlParseReference __attribute((alias("xmlParseReference__internal_alias"))); +#else +#ifndef xmlParseReference +extern __typeof (xmlParseReference) xmlParseReference__internal_alias __attribute((visibility("hidden"))); +#define xmlParseReference xmlParseReference__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef xmlParseSDDecl +extern __typeof (xmlParseSDDecl) xmlParseSDDecl __attribute((alias("xmlParseSDDecl__internal_alias"))); +#else +#ifndef xmlParseSDDecl +extern __typeof (xmlParseSDDecl) xmlParseSDDecl__internal_alias __attribute((visibility("hidden"))); +#define xmlParseSDDecl xmlParseSDDecl__internal_alias +#endif +#endif + +#if defined(LIBXML_SAX1_ENABLED) +#ifdef bottom_parser +#undef xmlParseStartTag +extern __typeof (xmlParseStartTag) xmlParseStartTag __attribute((alias("xmlParseStartTag__internal_alias"))); +#else +#ifndef xmlParseStartTag +extern __typeof (xmlParseStartTag) xmlParseStartTag__internal_alias __attribute((visibility("hidden"))); +#define xmlParseStartTag xmlParseStartTag__internal_alias +#endif +#endif +#endif + +#ifdef bottom_parser +#undef xmlParseSystemLiteral +extern __typeof (xmlParseSystemLiteral) xmlParseSystemLiteral __attribute((alias("xmlParseSystemLiteral__internal_alias"))); +#else +#ifndef xmlParseSystemLiteral +extern __typeof (xmlParseSystemLiteral) xmlParseSystemLiteral__internal_alias __attribute((visibility("hidden"))); +#define xmlParseSystemLiteral xmlParseSystemLiteral__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef xmlParseTextDecl +extern __typeof (xmlParseTextDecl) xmlParseTextDecl __attribute((alias("xmlParseTextDecl__internal_alias"))); +#else +#ifndef xmlParseTextDecl +extern __typeof (xmlParseTextDecl) xmlParseTextDecl__internal_alias __attribute((visibility("hidden"))); +#define xmlParseTextDecl xmlParseTextDecl__internal_alias +#endif +#endif + +#ifdef bottom_uri +#undef xmlParseURI +extern __typeof (xmlParseURI) xmlParseURI __attribute((alias("xmlParseURI__internal_alias"))); +#else +#ifndef xmlParseURI +extern __typeof (xmlParseURI) xmlParseURI__internal_alias __attribute((visibility("hidden"))); +#define xmlParseURI xmlParseURI__internal_alias +#endif +#endif + +#ifdef bottom_uri +#undef xmlParseURIRaw +extern __typeof (xmlParseURIRaw) xmlParseURIRaw __attribute((alias("xmlParseURIRaw__internal_alias"))); +#else +#ifndef xmlParseURIRaw +extern __typeof (xmlParseURIRaw) xmlParseURIRaw__internal_alias __attribute((visibility("hidden"))); +#define xmlParseURIRaw xmlParseURIRaw__internal_alias +#endif +#endif + +#ifdef bottom_uri +#undef xmlParseURIReference +extern __typeof (xmlParseURIReference) xmlParseURIReference __attribute((alias("xmlParseURIReference__internal_alias"))); +#else +#ifndef xmlParseURIReference +extern __typeof (xmlParseURIReference) xmlParseURIReference__internal_alias __attribute((visibility("hidden"))); +#define xmlParseURIReference xmlParseURIReference__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef xmlParseVersionInfo +extern __typeof (xmlParseVersionInfo) xmlParseVersionInfo __attribute((alias("xmlParseVersionInfo__internal_alias"))); +#else +#ifndef xmlParseVersionInfo +extern __typeof (xmlParseVersionInfo) xmlParseVersionInfo__internal_alias __attribute((visibility("hidden"))); +#define xmlParseVersionInfo xmlParseVersionInfo__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef xmlParseVersionNum +extern __typeof (xmlParseVersionNum) xmlParseVersionNum __attribute((alias("xmlParseVersionNum__internal_alias"))); +#else +#ifndef xmlParseVersionNum +extern __typeof (xmlParseVersionNum) xmlParseVersionNum__internal_alias __attribute((visibility("hidden"))); +#define xmlParseVersionNum xmlParseVersionNum__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef xmlParseXMLDecl +extern __typeof (xmlParseXMLDecl) xmlParseXMLDecl __attribute((alias("xmlParseXMLDecl__internal_alias"))); +#else +#ifndef xmlParseXMLDecl +extern __typeof (xmlParseXMLDecl) xmlParseXMLDecl__internal_alias __attribute((visibility("hidden"))); +#define xmlParseXMLDecl xmlParseXMLDecl__internal_alias +#endif +#endif + +#ifdef bottom_parserInternals +#undef xmlParserAddNodeInfo +extern __typeof (xmlParserAddNodeInfo) xmlParserAddNodeInfo __attribute((alias("xmlParserAddNodeInfo__internal_alias"))); +#else +#ifndef xmlParserAddNodeInfo +extern __typeof (xmlParserAddNodeInfo) xmlParserAddNodeInfo__internal_alias __attribute((visibility("hidden"))); +#define xmlParserAddNodeInfo xmlParserAddNodeInfo__internal_alias +#endif +#endif + +#ifdef bottom_error +#undef xmlParserError +extern __typeof (xmlParserError) xmlParserError __attribute((alias("xmlParserError__internal_alias"))); +#else +#ifndef xmlParserError +extern __typeof (xmlParserError) xmlParserError__internal_alias __attribute((visibility("hidden"))); +#define xmlParserError xmlParserError__internal_alias +#endif +#endif + +#ifdef bottom_parserInternals +#undef xmlParserFindNodeInfo +extern __typeof (xmlParserFindNodeInfo) xmlParserFindNodeInfo __attribute((alias("xmlParserFindNodeInfo__internal_alias"))); +#else +#ifndef xmlParserFindNodeInfo +extern __typeof (xmlParserFindNodeInfo) xmlParserFindNodeInfo__internal_alias __attribute((visibility("hidden"))); +#define xmlParserFindNodeInfo xmlParserFindNodeInfo__internal_alias +#endif +#endif + +#ifdef bottom_parserInternals +#undef xmlParserFindNodeInfoIndex +extern __typeof (xmlParserFindNodeInfoIndex) xmlParserFindNodeInfoIndex __attribute((alias("xmlParserFindNodeInfoIndex__internal_alias"))); +#else +#ifndef xmlParserFindNodeInfoIndex +extern __typeof (xmlParserFindNodeInfoIndex) xmlParserFindNodeInfoIndex__internal_alias __attribute((visibility("hidden"))); +#define xmlParserFindNodeInfoIndex xmlParserFindNodeInfoIndex__internal_alias +#endif +#endif + +#ifdef bottom_xmlIO +#undef xmlParserGetDirectory +extern __typeof (xmlParserGetDirectory) xmlParserGetDirectory __attribute((alias("xmlParserGetDirectory__internal_alias"))); +#else +#ifndef xmlParserGetDirectory +extern __typeof (xmlParserGetDirectory) xmlParserGetDirectory__internal_alias __attribute((visibility("hidden"))); +#define xmlParserGetDirectory xmlParserGetDirectory__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef xmlParserHandlePEReference +extern __typeof (xmlParserHandlePEReference) xmlParserHandlePEReference __attribute((alias("xmlParserHandlePEReference__internal_alias"))); +#else +#ifndef xmlParserHandlePEReference +extern __typeof (xmlParserHandlePEReference) xmlParserHandlePEReference__internal_alias __attribute((visibility("hidden"))); +#define xmlParserHandlePEReference xmlParserHandlePEReference__internal_alias +#endif +#endif + +#if defined(LIBXML_LEGACY_ENABLED) +#ifdef bottom_legacy +#undef xmlParserHandleReference +extern __typeof (xmlParserHandleReference) xmlParserHandleReference __attribute((alias("xmlParserHandleReference__internal_alias"))); +#else +#ifndef xmlParserHandleReference +extern __typeof (xmlParserHandleReference) xmlParserHandleReference__internal_alias __attribute((visibility("hidden"))); +#define xmlParserHandleReference xmlParserHandleReference__internal_alias +#endif +#endif +#endif + +#ifdef bottom_xmlIO +#undef xmlParserInputBufferCreateFd +extern __typeof (xmlParserInputBufferCreateFd) xmlParserInputBufferCreateFd __attribute((alias("xmlParserInputBufferCreateFd__internal_alias"))); +#else +#ifndef xmlParserInputBufferCreateFd +extern __typeof (xmlParserInputBufferCreateFd) xmlParserInputBufferCreateFd__internal_alias __attribute((visibility("hidden"))); +#define xmlParserInputBufferCreateFd xmlParserInputBufferCreateFd__internal_alias +#endif +#endif + +#ifdef bottom_xmlIO +#undef xmlParserInputBufferCreateFile +extern __typeof (xmlParserInputBufferCreateFile) xmlParserInputBufferCreateFile __attribute((alias("xmlParserInputBufferCreateFile__internal_alias"))); +#else +#ifndef xmlParserInputBufferCreateFile +extern __typeof (xmlParserInputBufferCreateFile) xmlParserInputBufferCreateFile__internal_alias __attribute((visibility("hidden"))); +#define xmlParserInputBufferCreateFile xmlParserInputBufferCreateFile__internal_alias +#endif +#endif + +#ifdef bottom_xmlIO +#undef xmlParserInputBufferCreateFilename +extern __typeof (xmlParserInputBufferCreateFilename) xmlParserInputBufferCreateFilename __attribute((alias("xmlParserInputBufferCreateFilename__internal_alias"))); +#else +#ifndef xmlParserInputBufferCreateFilename +extern __typeof (xmlParserInputBufferCreateFilename) xmlParserInputBufferCreateFilename__internal_alias __attribute((visibility("hidden"))); +#define xmlParserInputBufferCreateFilename xmlParserInputBufferCreateFilename__internal_alias +#endif +#endif + +#ifdef bottom_xmlIO +#undef xmlParserInputBufferCreateFilenameDefault +extern __typeof (xmlParserInputBufferCreateFilenameDefault) xmlParserInputBufferCreateFilenameDefault __attribute((alias("xmlParserInputBufferCreateFilenameDefault__internal_alias"))); +#else +#ifndef xmlParserInputBufferCreateFilenameDefault +extern __typeof (xmlParserInputBufferCreateFilenameDefault) xmlParserInputBufferCreateFilenameDefault__internal_alias __attribute((visibility("hidden"))); +#define xmlParserInputBufferCreateFilenameDefault xmlParserInputBufferCreateFilenameDefault__internal_alias +#endif +#endif + +#ifdef bottom_xmlIO +#undef xmlParserInputBufferCreateIO +extern __typeof (xmlParserInputBufferCreateIO) xmlParserInputBufferCreateIO __attribute((alias("xmlParserInputBufferCreateIO__internal_alias"))); +#else +#ifndef xmlParserInputBufferCreateIO +extern __typeof (xmlParserInputBufferCreateIO) xmlParserInputBufferCreateIO__internal_alias __attribute((visibility("hidden"))); +#define xmlParserInputBufferCreateIO xmlParserInputBufferCreateIO__internal_alias +#endif +#endif + +#ifdef bottom_xmlIO +#undef xmlParserInputBufferCreateMem +extern __typeof (xmlParserInputBufferCreateMem) xmlParserInputBufferCreateMem __attribute((alias("xmlParserInputBufferCreateMem__internal_alias"))); +#else +#ifndef xmlParserInputBufferCreateMem +extern __typeof (xmlParserInputBufferCreateMem) xmlParserInputBufferCreateMem__internal_alias __attribute((visibility("hidden"))); +#define xmlParserInputBufferCreateMem xmlParserInputBufferCreateMem__internal_alias +#endif +#endif + +#ifdef bottom_xmlIO +#undef xmlParserInputBufferCreateStatic +extern __typeof (xmlParserInputBufferCreateStatic) xmlParserInputBufferCreateStatic __attribute((alias("xmlParserInputBufferCreateStatic__internal_alias"))); +#else +#ifndef xmlParserInputBufferCreateStatic +extern __typeof (xmlParserInputBufferCreateStatic) xmlParserInputBufferCreateStatic__internal_alias __attribute((visibility("hidden"))); +#define xmlParserInputBufferCreateStatic xmlParserInputBufferCreateStatic__internal_alias +#endif +#endif + +#ifdef bottom_xmlIO +#undef xmlParserInputBufferGrow +extern __typeof (xmlParserInputBufferGrow) xmlParserInputBufferGrow __attribute((alias("xmlParserInputBufferGrow__internal_alias"))); +#else +#ifndef xmlParserInputBufferGrow +extern __typeof (xmlParserInputBufferGrow) xmlParserInputBufferGrow__internal_alias __attribute((visibility("hidden"))); +#define xmlParserInputBufferGrow xmlParserInputBufferGrow__internal_alias +#endif +#endif + +#ifdef bottom_xmlIO +#undef xmlParserInputBufferPush +extern __typeof (xmlParserInputBufferPush) xmlParserInputBufferPush __attribute((alias("xmlParserInputBufferPush__internal_alias"))); +#else +#ifndef xmlParserInputBufferPush +extern __typeof (xmlParserInputBufferPush) xmlParserInputBufferPush__internal_alias __attribute((visibility("hidden"))); +#define xmlParserInputBufferPush xmlParserInputBufferPush__internal_alias +#endif +#endif + +#ifdef bottom_xmlIO +#undef xmlParserInputBufferRead +extern __typeof (xmlParserInputBufferRead) xmlParserInputBufferRead __attribute((alias("xmlParserInputBufferRead__internal_alias"))); +#else +#ifndef xmlParserInputBufferRead +extern __typeof (xmlParserInputBufferRead) xmlParserInputBufferRead__internal_alias __attribute((visibility("hidden"))); +#define xmlParserInputBufferRead xmlParserInputBufferRead__internal_alias +#endif +#endif + +#ifdef bottom_parserInternals +#undef xmlParserInputGrow +extern __typeof (xmlParserInputGrow) xmlParserInputGrow __attribute((alias("xmlParserInputGrow__internal_alias"))); +#else +#ifndef xmlParserInputGrow +extern __typeof (xmlParserInputGrow) xmlParserInputGrow__internal_alias __attribute((visibility("hidden"))); +#define xmlParserInputGrow xmlParserInputGrow__internal_alias +#endif +#endif + +#ifdef bottom_parserInternals +#undef xmlParserInputRead +extern __typeof (xmlParserInputRead) xmlParserInputRead __attribute((alias("xmlParserInputRead__internal_alias"))); +#else +#ifndef xmlParserInputRead +extern __typeof (xmlParserInputRead) xmlParserInputRead__internal_alias __attribute((visibility("hidden"))); +#define xmlParserInputRead xmlParserInputRead__internal_alias +#endif +#endif + +#ifdef bottom_parserInternals +#undef xmlParserInputShrink +extern __typeof (xmlParserInputShrink) xmlParserInputShrink __attribute((alias("xmlParserInputShrink__internal_alias"))); +#else +#ifndef xmlParserInputShrink +extern __typeof (xmlParserInputShrink) xmlParserInputShrink__internal_alias __attribute((visibility("hidden"))); +#define xmlParserInputShrink xmlParserInputShrink__internal_alias +#endif +#endif + +#ifdef bottom_error +#undef xmlParserPrintFileContext +extern __typeof (xmlParserPrintFileContext) xmlParserPrintFileContext __attribute((alias("xmlParserPrintFileContext__internal_alias"))); +#else +#ifndef xmlParserPrintFileContext +extern __typeof (xmlParserPrintFileContext) xmlParserPrintFileContext__internal_alias __attribute((visibility("hidden"))); +#define xmlParserPrintFileContext xmlParserPrintFileContext__internal_alias +#endif +#endif + +#ifdef bottom_error +#undef xmlParserPrintFileInfo +extern __typeof (xmlParserPrintFileInfo) xmlParserPrintFileInfo __attribute((alias("xmlParserPrintFileInfo__internal_alias"))); +#else +#ifndef xmlParserPrintFileInfo +extern __typeof (xmlParserPrintFileInfo) xmlParserPrintFileInfo__internal_alias __attribute((visibility("hidden"))); +#define xmlParserPrintFileInfo xmlParserPrintFileInfo__internal_alias +#endif +#endif + +#ifdef bottom_error +#undef xmlParserValidityError +extern __typeof (xmlParserValidityError) xmlParserValidityError __attribute((alias("xmlParserValidityError__internal_alias"))); +#else +#ifndef xmlParserValidityError +extern __typeof (xmlParserValidityError) xmlParserValidityError__internal_alias __attribute((visibility("hidden"))); +#define xmlParserValidityError xmlParserValidityError__internal_alias +#endif +#endif + +#ifdef bottom_error +#undef xmlParserValidityWarning +extern __typeof (xmlParserValidityWarning) xmlParserValidityWarning __attribute((alias("xmlParserValidityWarning__internal_alias"))); +#else +#ifndef xmlParserValidityWarning +extern __typeof (xmlParserValidityWarning) xmlParserValidityWarning__internal_alias __attribute((visibility("hidden"))); +#define xmlParserValidityWarning xmlParserValidityWarning__internal_alias +#endif +#endif + +#ifdef bottom_error +#undef xmlParserWarning +extern __typeof (xmlParserWarning) xmlParserWarning __attribute((alias("xmlParserWarning__internal_alias"))); +#else +#ifndef xmlParserWarning +extern __typeof (xmlParserWarning) xmlParserWarning__internal_alias __attribute((visibility("hidden"))); +#define xmlParserWarning xmlParserWarning__internal_alias +#endif +#endif + +#ifdef bottom_uri +#undef xmlPathToURI +extern __typeof (xmlPathToURI) xmlPathToURI __attribute((alias("xmlPathToURI__internal_alias"))); +#else +#ifndef xmlPathToURI +extern __typeof (xmlPathToURI) xmlPathToURI__internal_alias __attribute((visibility("hidden"))); +#define xmlPathToURI xmlPathToURI__internal_alias +#endif +#endif + +#if defined(LIBXML_PATTERN_ENABLED) +#ifdef bottom_pattern +#undef xmlPatternFromRoot +extern __typeof (xmlPatternFromRoot) xmlPatternFromRoot __attribute((alias("xmlPatternFromRoot__internal_alias"))); +#else +#ifndef xmlPatternFromRoot +extern __typeof (xmlPatternFromRoot) xmlPatternFromRoot__internal_alias __attribute((visibility("hidden"))); +#define xmlPatternFromRoot xmlPatternFromRoot__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_PATTERN_ENABLED) +#ifdef bottom_pattern +#undef xmlPatternGetStreamCtxt +extern __typeof (xmlPatternGetStreamCtxt) xmlPatternGetStreamCtxt __attribute((alias("xmlPatternGetStreamCtxt__internal_alias"))); +#else +#ifndef xmlPatternGetStreamCtxt +extern __typeof (xmlPatternGetStreamCtxt) xmlPatternGetStreamCtxt__internal_alias __attribute((visibility("hidden"))); +#define xmlPatternGetStreamCtxt xmlPatternGetStreamCtxt__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_PATTERN_ENABLED) +#ifdef bottom_pattern +#undef xmlPatternMatch +extern __typeof (xmlPatternMatch) xmlPatternMatch __attribute((alias("xmlPatternMatch__internal_alias"))); +#else +#ifndef xmlPatternMatch +extern __typeof (xmlPatternMatch) xmlPatternMatch__internal_alias __attribute((visibility("hidden"))); +#define xmlPatternMatch xmlPatternMatch__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_PATTERN_ENABLED) +#ifdef bottom_pattern +#undef xmlPatternMaxDepth +extern __typeof (xmlPatternMaxDepth) xmlPatternMaxDepth __attribute((alias("xmlPatternMaxDepth__internal_alias"))); +#else +#ifndef xmlPatternMaxDepth +extern __typeof (xmlPatternMaxDepth) xmlPatternMaxDepth__internal_alias __attribute((visibility("hidden"))); +#define xmlPatternMaxDepth xmlPatternMaxDepth__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_PATTERN_ENABLED) +#ifdef bottom_pattern +#undef xmlPatternMinDepth +extern __typeof (xmlPatternMinDepth) xmlPatternMinDepth __attribute((alias("xmlPatternMinDepth__internal_alias"))); +#else +#ifndef xmlPatternMinDepth +extern __typeof (xmlPatternMinDepth) xmlPatternMinDepth__internal_alias __attribute((visibility("hidden"))); +#define xmlPatternMinDepth xmlPatternMinDepth__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_PATTERN_ENABLED) +#ifdef bottom_pattern +#undef xmlPatternStreamable +extern __typeof (xmlPatternStreamable) xmlPatternStreamable __attribute((alias("xmlPatternStreamable__internal_alias"))); +#else +#ifndef xmlPatternStreamable +extern __typeof (xmlPatternStreamable) xmlPatternStreamable__internal_alias __attribute((visibility("hidden"))); +#define xmlPatternStreamable xmlPatternStreamable__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_PATTERN_ENABLED) +#ifdef bottom_pattern +#undef xmlPatterncompile +extern __typeof (xmlPatterncompile) xmlPatterncompile __attribute((alias("xmlPatterncompile__internal_alias"))); +#else +#ifndef xmlPatterncompile +extern __typeof (xmlPatterncompile) xmlPatterncompile__internal_alias __attribute((visibility("hidden"))); +#define xmlPatterncompile xmlPatterncompile__internal_alias +#endif +#endif +#endif + +#ifdef bottom_parserInternals +#undef xmlPedanticParserDefault +extern __typeof (xmlPedanticParserDefault) xmlPedanticParserDefault __attribute((alias("xmlPedanticParserDefault__internal_alias"))); +#else +#ifndef xmlPedanticParserDefault +extern __typeof (xmlPedanticParserDefault) xmlPedanticParserDefault__internal_alias __attribute((visibility("hidden"))); +#define xmlPedanticParserDefault xmlPedanticParserDefault__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef xmlPopInput +extern __typeof (xmlPopInput) xmlPopInput __attribute((alias("xmlPopInput__internal_alias"))); +#else +#ifndef xmlPopInput +extern __typeof (xmlPopInput) xmlPopInput__internal_alias __attribute((visibility("hidden"))); +#define xmlPopInput xmlPopInput__internal_alias +#endif +#endif + +#ifdef bottom_xmlIO +#undef xmlPopInputCallbacks +extern __typeof (xmlPopInputCallbacks) xmlPopInputCallbacks __attribute((alias("xmlPopInputCallbacks__internal_alias"))); +#else +#ifndef xmlPopInputCallbacks +extern __typeof (xmlPopInputCallbacks) xmlPopInputCallbacks__internal_alias __attribute((visibility("hidden"))); +#define xmlPopInputCallbacks xmlPopInputCallbacks__internal_alias +#endif +#endif + +#if defined(LIBXML_TREE_ENABLED) +#ifdef bottom_tree +#undef xmlPreviousElementSibling +extern __typeof (xmlPreviousElementSibling) xmlPreviousElementSibling __attribute((alias("xmlPreviousElementSibling__internal_alias"))); +#else +#ifndef xmlPreviousElementSibling +extern __typeof (xmlPreviousElementSibling) xmlPreviousElementSibling__internal_alias __attribute((visibility("hidden"))); +#define xmlPreviousElementSibling xmlPreviousElementSibling__internal_alias +#endif +#endif +#endif + +#ifdef bottom_uri +#undef xmlPrintURI +extern __typeof (xmlPrintURI) xmlPrintURI __attribute((alias("xmlPrintURI__internal_alias"))); +#else +#ifndef xmlPrintURI +extern __typeof (xmlPrintURI) xmlPrintURI__internal_alias __attribute((visibility("hidden"))); +#define xmlPrintURI xmlPrintURI__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef xmlPushInput +extern __typeof (xmlPushInput) xmlPushInput __attribute((alias("xmlPushInput__internal_alias"))); +#else +#ifndef xmlPushInput +extern __typeof (xmlPushInput) xmlPushInput__internal_alias __attribute((visibility("hidden"))); +#define xmlPushInput xmlPushInput__internal_alias +#endif +#endif + +#ifdef bottom_threads +#undef xmlRMutexLock +extern __typeof (xmlRMutexLock) xmlRMutexLock __attribute((alias("xmlRMutexLock__internal_alias"))); +#else +#ifndef xmlRMutexLock +extern __typeof (xmlRMutexLock) xmlRMutexLock__internal_alias __attribute((visibility("hidden"))); +#define xmlRMutexLock xmlRMutexLock__internal_alias +#endif +#endif + +#ifdef bottom_threads +#undef xmlRMutexUnlock +extern __typeof (xmlRMutexUnlock) xmlRMutexUnlock __attribute((alias("xmlRMutexUnlock__internal_alias"))); +#else +#ifndef xmlRMutexUnlock +extern __typeof (xmlRMutexUnlock) xmlRMutexUnlock__internal_alias __attribute((visibility("hidden"))); +#define xmlRMutexUnlock xmlRMutexUnlock__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef xmlReadDoc +extern __typeof (xmlReadDoc) xmlReadDoc __attribute((alias("xmlReadDoc__internal_alias"))); +#else +#ifndef xmlReadDoc +extern __typeof (xmlReadDoc) xmlReadDoc__internal_alias __attribute((visibility("hidden"))); +#define xmlReadDoc xmlReadDoc__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef xmlReadFd +extern __typeof (xmlReadFd) xmlReadFd __attribute((alias("xmlReadFd__internal_alias"))); +#else +#ifndef xmlReadFd +extern __typeof (xmlReadFd) xmlReadFd__internal_alias __attribute((visibility("hidden"))); +#define xmlReadFd xmlReadFd__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef xmlReadFile +extern __typeof (xmlReadFile) xmlReadFile __attribute((alias("xmlReadFile__internal_alias"))); +#else +#ifndef xmlReadFile +extern __typeof (xmlReadFile) xmlReadFile__internal_alias __attribute((visibility("hidden"))); +#define xmlReadFile xmlReadFile__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef xmlReadIO +extern __typeof (xmlReadIO) xmlReadIO __attribute((alias("xmlReadIO__internal_alias"))); +#else +#ifndef xmlReadIO +extern __typeof (xmlReadIO) xmlReadIO__internal_alias __attribute((visibility("hidden"))); +#define xmlReadIO xmlReadIO__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef xmlReadMemory +extern __typeof (xmlReadMemory) xmlReadMemory __attribute((alias("xmlReadMemory__internal_alias"))); +#else +#ifndef xmlReadMemory +extern __typeof (xmlReadMemory) xmlReadMemory__internal_alias __attribute((visibility("hidden"))); +#define xmlReadMemory xmlReadMemory__internal_alias +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlReaderForDoc +extern __typeof (xmlReaderForDoc) xmlReaderForDoc __attribute((alias("xmlReaderForDoc__internal_alias"))); +#else +#ifndef xmlReaderForDoc +extern __typeof (xmlReaderForDoc) xmlReaderForDoc__internal_alias __attribute((visibility("hidden"))); +#define xmlReaderForDoc xmlReaderForDoc__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlReaderForFd +extern __typeof (xmlReaderForFd) xmlReaderForFd __attribute((alias("xmlReaderForFd__internal_alias"))); +#else +#ifndef xmlReaderForFd +extern __typeof (xmlReaderForFd) xmlReaderForFd__internal_alias __attribute((visibility("hidden"))); +#define xmlReaderForFd xmlReaderForFd__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlReaderForFile +extern __typeof (xmlReaderForFile) xmlReaderForFile __attribute((alias("xmlReaderForFile__internal_alias"))); +#else +#ifndef xmlReaderForFile +extern __typeof (xmlReaderForFile) xmlReaderForFile__internal_alias __attribute((visibility("hidden"))); +#define xmlReaderForFile xmlReaderForFile__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlReaderForIO +extern __typeof (xmlReaderForIO) xmlReaderForIO __attribute((alias("xmlReaderForIO__internal_alias"))); +#else +#ifndef xmlReaderForIO +extern __typeof (xmlReaderForIO) xmlReaderForIO__internal_alias __attribute((visibility("hidden"))); +#define xmlReaderForIO xmlReaderForIO__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlReaderForMemory +extern __typeof (xmlReaderForMemory) xmlReaderForMemory __attribute((alias("xmlReaderForMemory__internal_alias"))); +#else +#ifndef xmlReaderForMemory +extern __typeof (xmlReaderForMemory) xmlReaderForMemory__internal_alias __attribute((visibility("hidden"))); +#define xmlReaderForMemory xmlReaderForMemory__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlReaderNewDoc +extern __typeof (xmlReaderNewDoc) xmlReaderNewDoc __attribute((alias("xmlReaderNewDoc__internal_alias"))); +#else +#ifndef xmlReaderNewDoc +extern __typeof (xmlReaderNewDoc) xmlReaderNewDoc__internal_alias __attribute((visibility("hidden"))); +#define xmlReaderNewDoc xmlReaderNewDoc__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlReaderNewFd +extern __typeof (xmlReaderNewFd) xmlReaderNewFd __attribute((alias("xmlReaderNewFd__internal_alias"))); +#else +#ifndef xmlReaderNewFd +extern __typeof (xmlReaderNewFd) xmlReaderNewFd__internal_alias __attribute((visibility("hidden"))); +#define xmlReaderNewFd xmlReaderNewFd__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlReaderNewFile +extern __typeof (xmlReaderNewFile) xmlReaderNewFile __attribute((alias("xmlReaderNewFile__internal_alias"))); +#else +#ifndef xmlReaderNewFile +extern __typeof (xmlReaderNewFile) xmlReaderNewFile__internal_alias __attribute((visibility("hidden"))); +#define xmlReaderNewFile xmlReaderNewFile__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlReaderNewIO +extern __typeof (xmlReaderNewIO) xmlReaderNewIO __attribute((alias("xmlReaderNewIO__internal_alias"))); +#else +#ifndef xmlReaderNewIO +extern __typeof (xmlReaderNewIO) xmlReaderNewIO__internal_alias __attribute((visibility("hidden"))); +#define xmlReaderNewIO xmlReaderNewIO__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlReaderNewMemory +extern __typeof (xmlReaderNewMemory) xmlReaderNewMemory __attribute((alias("xmlReaderNewMemory__internal_alias"))); +#else +#ifndef xmlReaderNewMemory +extern __typeof (xmlReaderNewMemory) xmlReaderNewMemory__internal_alias __attribute((visibility("hidden"))); +#define xmlReaderNewMemory xmlReaderNewMemory__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlReaderNewWalker +extern __typeof (xmlReaderNewWalker) xmlReaderNewWalker __attribute((alias("xmlReaderNewWalker__internal_alias"))); +#else +#ifndef xmlReaderNewWalker +extern __typeof (xmlReaderNewWalker) xmlReaderNewWalker__internal_alias __attribute((visibility("hidden"))); +#define xmlReaderNewWalker xmlReaderNewWalker__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlReaderWalker +extern __typeof (xmlReaderWalker) xmlReaderWalker __attribute((alias("xmlReaderWalker__internal_alias"))); +#else +#ifndef xmlReaderWalker +extern __typeof (xmlReaderWalker) xmlReaderWalker__internal_alias __attribute((visibility("hidden"))); +#define xmlReaderWalker xmlReaderWalker__internal_alias +#endif +#endif +#endif + +#ifdef bottom_xmlmemory +#undef xmlReallocLoc +extern __typeof (xmlReallocLoc) xmlReallocLoc __attribute((alias("xmlReallocLoc__internal_alias"))); +#else +#ifndef xmlReallocLoc +extern __typeof (xmlReallocLoc) xmlReallocLoc__internal_alias __attribute((visibility("hidden"))); +#define xmlReallocLoc xmlReallocLoc__internal_alias +#endif +#endif + +#if defined(LIBXML_TREE_ENABLED) +#ifdef bottom_tree +#undef xmlReconciliateNs +extern __typeof (xmlReconciliateNs) xmlReconciliateNs __attribute((alias("xmlReconciliateNs__internal_alias"))); +#else +#ifndef xmlReconciliateNs +extern __typeof (xmlReconciliateNs) xmlReconciliateNs__internal_alias __attribute((visibility("hidden"))); +#define xmlReconciliateNs xmlReconciliateNs__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SAX1_ENABLED) +#ifdef bottom_parser +#undef xmlRecoverDoc +extern __typeof (xmlRecoverDoc) xmlRecoverDoc __attribute((alias("xmlRecoverDoc__internal_alias"))); +#else +#ifndef xmlRecoverDoc +extern __typeof (xmlRecoverDoc) xmlRecoverDoc__internal_alias __attribute((visibility("hidden"))); +#define xmlRecoverDoc xmlRecoverDoc__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SAX1_ENABLED) +#ifdef bottom_parser +#undef xmlRecoverFile +extern __typeof (xmlRecoverFile) xmlRecoverFile __attribute((alias("xmlRecoverFile__internal_alias"))); +#else +#ifndef xmlRecoverFile +extern __typeof (xmlRecoverFile) xmlRecoverFile__internal_alias __attribute((visibility("hidden"))); +#define xmlRecoverFile xmlRecoverFile__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SAX1_ENABLED) +#ifdef bottom_parser +#undef xmlRecoverMemory +extern __typeof (xmlRecoverMemory) xmlRecoverMemory __attribute((alias("xmlRecoverMemory__internal_alias"))); +#else +#ifndef xmlRecoverMemory +extern __typeof (xmlRecoverMemory) xmlRecoverMemory__internal_alias __attribute((visibility("hidden"))); +#define xmlRecoverMemory xmlRecoverMemory__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_REGEXP_ENABLED) +#ifdef bottom_xmlregexp +#undef xmlRegExecErrInfo +extern __typeof (xmlRegExecErrInfo) xmlRegExecErrInfo __attribute((alias("xmlRegExecErrInfo__internal_alias"))); +#else +#ifndef xmlRegExecErrInfo +extern __typeof (xmlRegExecErrInfo) xmlRegExecErrInfo__internal_alias __attribute((visibility("hidden"))); +#define xmlRegExecErrInfo xmlRegExecErrInfo__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_REGEXP_ENABLED) +#ifdef bottom_xmlregexp +#undef xmlRegExecNextValues +extern __typeof (xmlRegExecNextValues) xmlRegExecNextValues __attribute((alias("xmlRegExecNextValues__internal_alias"))); +#else +#ifndef xmlRegExecNextValues +extern __typeof (xmlRegExecNextValues) xmlRegExecNextValues__internal_alias __attribute((visibility("hidden"))); +#define xmlRegExecNextValues xmlRegExecNextValues__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_REGEXP_ENABLED) +#ifdef bottom_xmlregexp +#undef xmlRegExecPushString +extern __typeof (xmlRegExecPushString) xmlRegExecPushString __attribute((alias("xmlRegExecPushString__internal_alias"))); +#else +#ifndef xmlRegExecPushString +extern __typeof (xmlRegExecPushString) xmlRegExecPushString__internal_alias __attribute((visibility("hidden"))); +#define xmlRegExecPushString xmlRegExecPushString__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_REGEXP_ENABLED) +#ifdef bottom_xmlregexp +#undef xmlRegExecPushString2 +extern __typeof (xmlRegExecPushString2) xmlRegExecPushString2 __attribute((alias("xmlRegExecPushString2__internal_alias"))); +#else +#ifndef xmlRegExecPushString2 +extern __typeof (xmlRegExecPushString2) xmlRegExecPushString2__internal_alias __attribute((visibility("hidden"))); +#define xmlRegExecPushString2 xmlRegExecPushString2__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_REGEXP_ENABLED) +#ifdef bottom_xmlregexp +#undef xmlRegFreeExecCtxt +extern __typeof (xmlRegFreeExecCtxt) xmlRegFreeExecCtxt __attribute((alias("xmlRegFreeExecCtxt__internal_alias"))); +#else +#ifndef xmlRegFreeExecCtxt +extern __typeof (xmlRegFreeExecCtxt) xmlRegFreeExecCtxt__internal_alias __attribute((visibility("hidden"))); +#define xmlRegFreeExecCtxt xmlRegFreeExecCtxt__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_REGEXP_ENABLED) +#ifdef bottom_xmlregexp +#undef xmlRegFreeRegexp +extern __typeof (xmlRegFreeRegexp) xmlRegFreeRegexp __attribute((alias("xmlRegFreeRegexp__internal_alias"))); +#else +#ifndef xmlRegFreeRegexp +extern __typeof (xmlRegFreeRegexp) xmlRegFreeRegexp__internal_alias __attribute((visibility("hidden"))); +#define xmlRegFreeRegexp xmlRegFreeRegexp__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_REGEXP_ENABLED) +#ifdef bottom_xmlregexp +#undef xmlRegNewExecCtxt +extern __typeof (xmlRegNewExecCtxt) xmlRegNewExecCtxt __attribute((alias("xmlRegNewExecCtxt__internal_alias"))); +#else +#ifndef xmlRegNewExecCtxt +extern __typeof (xmlRegNewExecCtxt) xmlRegNewExecCtxt__internal_alias __attribute((visibility("hidden"))); +#define xmlRegNewExecCtxt xmlRegNewExecCtxt__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_REGEXP_ENABLED) +#ifdef bottom_xmlregexp +#undef xmlRegexpCompile +extern __typeof (xmlRegexpCompile) xmlRegexpCompile __attribute((alias("xmlRegexpCompile__internal_alias"))); +#else +#ifndef xmlRegexpCompile +extern __typeof (xmlRegexpCompile) xmlRegexpCompile__internal_alias __attribute((visibility("hidden"))); +#define xmlRegexpCompile xmlRegexpCompile__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_REGEXP_ENABLED) +#ifdef bottom_xmlregexp +#undef xmlRegexpExec +extern __typeof (xmlRegexpExec) xmlRegexpExec __attribute((alias("xmlRegexpExec__internal_alias"))); +#else +#ifndef xmlRegexpExec +extern __typeof (xmlRegexpExec) xmlRegexpExec__internal_alias __attribute((visibility("hidden"))); +#define xmlRegexpExec xmlRegexpExec__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_REGEXP_ENABLED) +#ifdef bottom_xmlregexp +#undef xmlRegexpIsDeterminist +extern __typeof (xmlRegexpIsDeterminist) xmlRegexpIsDeterminist __attribute((alias("xmlRegexpIsDeterminist__internal_alias"))); +#else +#ifndef xmlRegexpIsDeterminist +extern __typeof (xmlRegexpIsDeterminist) xmlRegexpIsDeterminist__internal_alias __attribute((visibility("hidden"))); +#define xmlRegexpIsDeterminist xmlRegexpIsDeterminist__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_REGEXP_ENABLED) +#ifdef bottom_xmlregexp +#undef xmlRegexpPrint +extern __typeof (xmlRegexpPrint) xmlRegexpPrint __attribute((alias("xmlRegexpPrint__internal_alias"))); +#else +#ifndef xmlRegexpPrint +extern __typeof (xmlRegexpPrint) xmlRegexpPrint__internal_alias __attribute((visibility("hidden"))); +#define xmlRegexpPrint xmlRegexpPrint__internal_alias +#endif +#endif +#endif + +#ifdef bottom_encoding +#undef xmlRegisterCharEncodingHandler +extern __typeof (xmlRegisterCharEncodingHandler) xmlRegisterCharEncodingHandler __attribute((alias("xmlRegisterCharEncodingHandler__internal_alias"))); +#else +#ifndef xmlRegisterCharEncodingHandler +extern __typeof (xmlRegisterCharEncodingHandler) xmlRegisterCharEncodingHandler__internal_alias __attribute((visibility("hidden"))); +#define xmlRegisterCharEncodingHandler xmlRegisterCharEncodingHandler__internal_alias +#endif +#endif + +#ifdef bottom_xmlIO +#undef xmlRegisterDefaultInputCallbacks +extern __typeof (xmlRegisterDefaultInputCallbacks) xmlRegisterDefaultInputCallbacks __attribute((alias("xmlRegisterDefaultInputCallbacks__internal_alias"))); +#else +#ifndef xmlRegisterDefaultInputCallbacks +extern __typeof (xmlRegisterDefaultInputCallbacks) xmlRegisterDefaultInputCallbacks__internal_alias __attribute((visibility("hidden"))); +#define xmlRegisterDefaultInputCallbacks xmlRegisterDefaultInputCallbacks__internal_alias +#endif +#endif + +#if defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_xmlIO +#undef xmlRegisterDefaultOutputCallbacks +extern __typeof (xmlRegisterDefaultOutputCallbacks) xmlRegisterDefaultOutputCallbacks __attribute((alias("xmlRegisterDefaultOutputCallbacks__internal_alias"))); +#else +#ifndef xmlRegisterDefaultOutputCallbacks +extern __typeof (xmlRegisterDefaultOutputCallbacks) xmlRegisterDefaultOutputCallbacks__internal_alias __attribute((visibility("hidden"))); +#define xmlRegisterDefaultOutputCallbacks xmlRegisterDefaultOutputCallbacks__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_OUTPUT_ENABLED) && defined(LIBXML_HTTP_ENABLED) +#ifdef bottom_xmlIO +#undef xmlRegisterHTTPPostCallbacks +extern __typeof (xmlRegisterHTTPPostCallbacks) xmlRegisterHTTPPostCallbacks __attribute((alias("xmlRegisterHTTPPostCallbacks__internal_alias"))); +#else +#ifndef xmlRegisterHTTPPostCallbacks +extern __typeof (xmlRegisterHTTPPostCallbacks) xmlRegisterHTTPPostCallbacks__internal_alias __attribute((visibility("hidden"))); +#define xmlRegisterHTTPPostCallbacks xmlRegisterHTTPPostCallbacks__internal_alias +#endif +#endif +#endif + +#ifdef bottom_xmlIO +#undef xmlRegisterInputCallbacks +extern __typeof (xmlRegisterInputCallbacks) xmlRegisterInputCallbacks __attribute((alias("xmlRegisterInputCallbacks__internal_alias"))); +#else +#ifndef xmlRegisterInputCallbacks +extern __typeof (xmlRegisterInputCallbacks) xmlRegisterInputCallbacks__internal_alias __attribute((visibility("hidden"))); +#define xmlRegisterInputCallbacks xmlRegisterInputCallbacks__internal_alias +#endif +#endif + +#ifdef bottom_globals +#undef xmlRegisterNodeDefault +extern __typeof (xmlRegisterNodeDefault) xmlRegisterNodeDefault __attribute((alias("xmlRegisterNodeDefault__internal_alias"))); +#else +#ifndef xmlRegisterNodeDefault +extern __typeof (xmlRegisterNodeDefault) xmlRegisterNodeDefault__internal_alias __attribute((visibility("hidden"))); +#define xmlRegisterNodeDefault xmlRegisterNodeDefault__internal_alias +#endif +#endif + +#if defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_xmlIO +#undef xmlRegisterOutputCallbacks +extern __typeof (xmlRegisterOutputCallbacks) xmlRegisterOutputCallbacks __attribute((alias("xmlRegisterOutputCallbacks__internal_alias"))); +#else +#ifndef xmlRegisterOutputCallbacks +extern __typeof (xmlRegisterOutputCallbacks) xmlRegisterOutputCallbacks__internal_alias __attribute((visibility("hidden"))); +#define xmlRegisterOutputCallbacks xmlRegisterOutputCallbacks__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_relaxng +#undef xmlRelaxNGCleanupTypes +extern __typeof (xmlRelaxNGCleanupTypes) xmlRelaxNGCleanupTypes __attribute((alias("xmlRelaxNGCleanupTypes__internal_alias"))); +#else +#ifndef xmlRelaxNGCleanupTypes +extern __typeof (xmlRelaxNGCleanupTypes) xmlRelaxNGCleanupTypes__internal_alias __attribute((visibility("hidden"))); +#define xmlRelaxNGCleanupTypes xmlRelaxNGCleanupTypes__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_relaxng +#undef xmlRelaxNGDump +extern __typeof (xmlRelaxNGDump) xmlRelaxNGDump __attribute((alias("xmlRelaxNGDump__internal_alias"))); +#else +#ifndef xmlRelaxNGDump +extern __typeof (xmlRelaxNGDump) xmlRelaxNGDump__internal_alias __attribute((visibility("hidden"))); +#define xmlRelaxNGDump xmlRelaxNGDump__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_relaxng +#undef xmlRelaxNGDumpTree +extern __typeof (xmlRelaxNGDumpTree) xmlRelaxNGDumpTree __attribute((alias("xmlRelaxNGDumpTree__internal_alias"))); +#else +#ifndef xmlRelaxNGDumpTree +extern __typeof (xmlRelaxNGDumpTree) xmlRelaxNGDumpTree__internal_alias __attribute((visibility("hidden"))); +#define xmlRelaxNGDumpTree xmlRelaxNGDumpTree__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_relaxng +#undef xmlRelaxNGFree +extern __typeof (xmlRelaxNGFree) xmlRelaxNGFree __attribute((alias("xmlRelaxNGFree__internal_alias"))); +#else +#ifndef xmlRelaxNGFree +extern __typeof (xmlRelaxNGFree) xmlRelaxNGFree__internal_alias __attribute((visibility("hidden"))); +#define xmlRelaxNGFree xmlRelaxNGFree__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_relaxng +#undef xmlRelaxNGFreeParserCtxt +extern __typeof (xmlRelaxNGFreeParserCtxt) xmlRelaxNGFreeParserCtxt __attribute((alias("xmlRelaxNGFreeParserCtxt__internal_alias"))); +#else +#ifndef xmlRelaxNGFreeParserCtxt +extern __typeof (xmlRelaxNGFreeParserCtxt) xmlRelaxNGFreeParserCtxt__internal_alias __attribute((visibility("hidden"))); +#define xmlRelaxNGFreeParserCtxt xmlRelaxNGFreeParserCtxt__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_relaxng +#undef xmlRelaxNGFreeValidCtxt +extern __typeof (xmlRelaxNGFreeValidCtxt) xmlRelaxNGFreeValidCtxt __attribute((alias("xmlRelaxNGFreeValidCtxt__internal_alias"))); +#else +#ifndef xmlRelaxNGFreeValidCtxt +extern __typeof (xmlRelaxNGFreeValidCtxt) xmlRelaxNGFreeValidCtxt__internal_alias __attribute((visibility("hidden"))); +#define xmlRelaxNGFreeValidCtxt xmlRelaxNGFreeValidCtxt__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_relaxng +#undef xmlRelaxNGGetParserErrors +extern __typeof (xmlRelaxNGGetParserErrors) xmlRelaxNGGetParserErrors __attribute((alias("xmlRelaxNGGetParserErrors__internal_alias"))); +#else +#ifndef xmlRelaxNGGetParserErrors +extern __typeof (xmlRelaxNGGetParserErrors) xmlRelaxNGGetParserErrors__internal_alias __attribute((visibility("hidden"))); +#define xmlRelaxNGGetParserErrors xmlRelaxNGGetParserErrors__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_relaxng +#undef xmlRelaxNGGetValidErrors +extern __typeof (xmlRelaxNGGetValidErrors) xmlRelaxNGGetValidErrors __attribute((alias("xmlRelaxNGGetValidErrors__internal_alias"))); +#else +#ifndef xmlRelaxNGGetValidErrors +extern __typeof (xmlRelaxNGGetValidErrors) xmlRelaxNGGetValidErrors__internal_alias __attribute((visibility("hidden"))); +#define xmlRelaxNGGetValidErrors xmlRelaxNGGetValidErrors__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_relaxng +#undef xmlRelaxNGInitTypes +extern __typeof (xmlRelaxNGInitTypes) xmlRelaxNGInitTypes __attribute((alias("xmlRelaxNGInitTypes__internal_alias"))); +#else +#ifndef xmlRelaxNGInitTypes +extern __typeof (xmlRelaxNGInitTypes) xmlRelaxNGInitTypes__internal_alias __attribute((visibility("hidden"))); +#define xmlRelaxNGInitTypes xmlRelaxNGInitTypes__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_relaxng +#undef xmlRelaxNGNewDocParserCtxt +extern __typeof (xmlRelaxNGNewDocParserCtxt) xmlRelaxNGNewDocParserCtxt __attribute((alias("xmlRelaxNGNewDocParserCtxt__internal_alias"))); +#else +#ifndef xmlRelaxNGNewDocParserCtxt +extern __typeof (xmlRelaxNGNewDocParserCtxt) xmlRelaxNGNewDocParserCtxt__internal_alias __attribute((visibility("hidden"))); +#define xmlRelaxNGNewDocParserCtxt xmlRelaxNGNewDocParserCtxt__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_relaxng +#undef xmlRelaxNGNewMemParserCtxt +extern __typeof (xmlRelaxNGNewMemParserCtxt) xmlRelaxNGNewMemParserCtxt __attribute((alias("xmlRelaxNGNewMemParserCtxt__internal_alias"))); +#else +#ifndef xmlRelaxNGNewMemParserCtxt +extern __typeof (xmlRelaxNGNewMemParserCtxt) xmlRelaxNGNewMemParserCtxt__internal_alias __attribute((visibility("hidden"))); +#define xmlRelaxNGNewMemParserCtxt xmlRelaxNGNewMemParserCtxt__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_relaxng +#undef xmlRelaxNGNewParserCtxt +extern __typeof (xmlRelaxNGNewParserCtxt) xmlRelaxNGNewParserCtxt __attribute((alias("xmlRelaxNGNewParserCtxt__internal_alias"))); +#else +#ifndef xmlRelaxNGNewParserCtxt +extern __typeof (xmlRelaxNGNewParserCtxt) xmlRelaxNGNewParserCtxt__internal_alias __attribute((visibility("hidden"))); +#define xmlRelaxNGNewParserCtxt xmlRelaxNGNewParserCtxt__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_relaxng +#undef xmlRelaxNGNewValidCtxt +extern __typeof (xmlRelaxNGNewValidCtxt) xmlRelaxNGNewValidCtxt __attribute((alias("xmlRelaxNGNewValidCtxt__internal_alias"))); +#else +#ifndef xmlRelaxNGNewValidCtxt +extern __typeof (xmlRelaxNGNewValidCtxt) xmlRelaxNGNewValidCtxt__internal_alias __attribute((visibility("hidden"))); +#define xmlRelaxNGNewValidCtxt xmlRelaxNGNewValidCtxt__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_relaxng +#undef xmlRelaxNGParse +extern __typeof (xmlRelaxNGParse) xmlRelaxNGParse __attribute((alias("xmlRelaxNGParse__internal_alias"))); +#else +#ifndef xmlRelaxNGParse +extern __typeof (xmlRelaxNGParse) xmlRelaxNGParse__internal_alias __attribute((visibility("hidden"))); +#define xmlRelaxNGParse xmlRelaxNGParse__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_relaxng +#undef xmlRelaxNGSetParserErrors +extern __typeof (xmlRelaxNGSetParserErrors) xmlRelaxNGSetParserErrors __attribute((alias("xmlRelaxNGSetParserErrors__internal_alias"))); +#else +#ifndef xmlRelaxNGSetParserErrors +extern __typeof (xmlRelaxNGSetParserErrors) xmlRelaxNGSetParserErrors__internal_alias __attribute((visibility("hidden"))); +#define xmlRelaxNGSetParserErrors xmlRelaxNGSetParserErrors__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_relaxng +#undef xmlRelaxNGSetParserStructuredErrors +extern __typeof (xmlRelaxNGSetParserStructuredErrors) xmlRelaxNGSetParserStructuredErrors __attribute((alias("xmlRelaxNGSetParserStructuredErrors__internal_alias"))); +#else +#ifndef xmlRelaxNGSetParserStructuredErrors +extern __typeof (xmlRelaxNGSetParserStructuredErrors) xmlRelaxNGSetParserStructuredErrors__internal_alias __attribute((visibility("hidden"))); +#define xmlRelaxNGSetParserStructuredErrors xmlRelaxNGSetParserStructuredErrors__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_relaxng +#undef xmlRelaxNGSetValidErrors +extern __typeof (xmlRelaxNGSetValidErrors) xmlRelaxNGSetValidErrors __attribute((alias("xmlRelaxNGSetValidErrors__internal_alias"))); +#else +#ifndef xmlRelaxNGSetValidErrors +extern __typeof (xmlRelaxNGSetValidErrors) xmlRelaxNGSetValidErrors__internal_alias __attribute((visibility("hidden"))); +#define xmlRelaxNGSetValidErrors xmlRelaxNGSetValidErrors__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_relaxng +#undef xmlRelaxNGSetValidStructuredErrors +extern __typeof (xmlRelaxNGSetValidStructuredErrors) xmlRelaxNGSetValidStructuredErrors __attribute((alias("xmlRelaxNGSetValidStructuredErrors__internal_alias"))); +#else +#ifndef xmlRelaxNGSetValidStructuredErrors +extern __typeof (xmlRelaxNGSetValidStructuredErrors) xmlRelaxNGSetValidStructuredErrors__internal_alias __attribute((visibility("hidden"))); +#define xmlRelaxNGSetValidStructuredErrors xmlRelaxNGSetValidStructuredErrors__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_relaxng +#undef xmlRelaxNGValidateDoc +extern __typeof (xmlRelaxNGValidateDoc) xmlRelaxNGValidateDoc __attribute((alias("xmlRelaxNGValidateDoc__internal_alias"))); +#else +#ifndef xmlRelaxNGValidateDoc +extern __typeof (xmlRelaxNGValidateDoc) xmlRelaxNGValidateDoc__internal_alias __attribute((visibility("hidden"))); +#define xmlRelaxNGValidateDoc xmlRelaxNGValidateDoc__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_relaxng +#undef xmlRelaxNGValidateFullElement +extern __typeof (xmlRelaxNGValidateFullElement) xmlRelaxNGValidateFullElement __attribute((alias("xmlRelaxNGValidateFullElement__internal_alias"))); +#else +#ifndef xmlRelaxNGValidateFullElement +extern __typeof (xmlRelaxNGValidateFullElement) xmlRelaxNGValidateFullElement__internal_alias __attribute((visibility("hidden"))); +#define xmlRelaxNGValidateFullElement xmlRelaxNGValidateFullElement__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_relaxng +#undef xmlRelaxNGValidatePopElement +extern __typeof (xmlRelaxNGValidatePopElement) xmlRelaxNGValidatePopElement __attribute((alias("xmlRelaxNGValidatePopElement__internal_alias"))); +#else +#ifndef xmlRelaxNGValidatePopElement +extern __typeof (xmlRelaxNGValidatePopElement) xmlRelaxNGValidatePopElement__internal_alias __attribute((visibility("hidden"))); +#define xmlRelaxNGValidatePopElement xmlRelaxNGValidatePopElement__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_relaxng +#undef xmlRelaxNGValidatePushCData +extern __typeof (xmlRelaxNGValidatePushCData) xmlRelaxNGValidatePushCData __attribute((alias("xmlRelaxNGValidatePushCData__internal_alias"))); +#else +#ifndef xmlRelaxNGValidatePushCData +extern __typeof (xmlRelaxNGValidatePushCData) xmlRelaxNGValidatePushCData__internal_alias __attribute((visibility("hidden"))); +#define xmlRelaxNGValidatePushCData xmlRelaxNGValidatePushCData__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_relaxng +#undef xmlRelaxNGValidatePushElement +extern __typeof (xmlRelaxNGValidatePushElement) xmlRelaxNGValidatePushElement __attribute((alias("xmlRelaxNGValidatePushElement__internal_alias"))); +#else +#ifndef xmlRelaxNGValidatePushElement +extern __typeof (xmlRelaxNGValidatePushElement) xmlRelaxNGValidatePushElement__internal_alias __attribute((visibility("hidden"))); +#define xmlRelaxNGValidatePushElement xmlRelaxNGValidatePushElement__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_relaxng +#undef xmlRelaxParserSetFlag +extern __typeof (xmlRelaxParserSetFlag) xmlRelaxParserSetFlag __attribute((alias("xmlRelaxParserSetFlag__internal_alias"))); +#else +#ifndef xmlRelaxParserSetFlag +extern __typeof (xmlRelaxParserSetFlag) xmlRelaxParserSetFlag__internal_alias __attribute((visibility("hidden"))); +#define xmlRelaxParserSetFlag xmlRelaxParserSetFlag__internal_alias +#endif +#endif +#endif + +#ifdef bottom_valid +#undef xmlRemoveID +extern __typeof (xmlRemoveID) xmlRemoveID __attribute((alias("xmlRemoveID__internal_alias"))); +#else +#ifndef xmlRemoveID +extern __typeof (xmlRemoveID) xmlRemoveID__internal_alias __attribute((visibility("hidden"))); +#define xmlRemoveID xmlRemoveID__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlRemoveProp +extern __typeof (xmlRemoveProp) xmlRemoveProp __attribute((alias("xmlRemoveProp__internal_alias"))); +#else +#ifndef xmlRemoveProp +extern __typeof (xmlRemoveProp) xmlRemoveProp__internal_alias __attribute((visibility("hidden"))); +#define xmlRemoveProp xmlRemoveProp__internal_alias +#endif +#endif + +#ifdef bottom_valid +#undef xmlRemoveRef +extern __typeof (xmlRemoveRef) xmlRemoveRef __attribute((alias("xmlRemoveRef__internal_alias"))); +#else +#ifndef xmlRemoveRef +extern __typeof (xmlRemoveRef) xmlRemoveRef__internal_alias __attribute((visibility("hidden"))); +#define xmlRemoveRef xmlRemoveRef__internal_alias +#endif +#endif + +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_tree +#undef xmlReplaceNode +extern __typeof (xmlReplaceNode) xmlReplaceNode __attribute((alias("xmlReplaceNode__internal_alias"))); +#else +#ifndef xmlReplaceNode +extern __typeof (xmlReplaceNode) xmlReplaceNode__internal_alias __attribute((visibility("hidden"))); +#define xmlReplaceNode xmlReplaceNode__internal_alias +#endif +#endif +#endif + +#ifdef bottom_error +#undef xmlResetError +extern __typeof (xmlResetError) xmlResetError __attribute((alias("xmlResetError__internal_alias"))); +#else +#ifndef xmlResetError +extern __typeof (xmlResetError) xmlResetError__internal_alias __attribute((visibility("hidden"))); +#define xmlResetError xmlResetError__internal_alias +#endif +#endif + +#ifdef bottom_error +#undef xmlResetLastError +extern __typeof (xmlResetLastError) xmlResetLastError __attribute((alias("xmlResetLastError__internal_alias"))); +#else +#ifndef xmlResetLastError +extern __typeof (xmlResetLastError) xmlResetLastError__internal_alias __attribute((visibility("hidden"))); +#define xmlResetLastError xmlResetLastError__internal_alias +#endif +#endif + +#ifdef bottom_SAX2 +#undef xmlSAX2AttributeDecl +extern __typeof (xmlSAX2AttributeDecl) xmlSAX2AttributeDecl __attribute((alias("xmlSAX2AttributeDecl__internal_alias"))); +#else +#ifndef xmlSAX2AttributeDecl +extern __typeof (xmlSAX2AttributeDecl) xmlSAX2AttributeDecl__internal_alias __attribute((visibility("hidden"))); +#define xmlSAX2AttributeDecl xmlSAX2AttributeDecl__internal_alias +#endif +#endif + +#ifdef bottom_SAX2 +#undef xmlSAX2CDataBlock +extern __typeof (xmlSAX2CDataBlock) xmlSAX2CDataBlock __attribute((alias("xmlSAX2CDataBlock__internal_alias"))); +#else +#ifndef xmlSAX2CDataBlock +extern __typeof (xmlSAX2CDataBlock) xmlSAX2CDataBlock__internal_alias __attribute((visibility("hidden"))); +#define xmlSAX2CDataBlock xmlSAX2CDataBlock__internal_alias +#endif +#endif + +#ifdef bottom_SAX2 +#undef xmlSAX2Characters +extern __typeof (xmlSAX2Characters) xmlSAX2Characters __attribute((alias("xmlSAX2Characters__internal_alias"))); +#else +#ifndef xmlSAX2Characters +extern __typeof (xmlSAX2Characters) xmlSAX2Characters__internal_alias __attribute((visibility("hidden"))); +#define xmlSAX2Characters xmlSAX2Characters__internal_alias +#endif +#endif + +#ifdef bottom_SAX2 +#undef xmlSAX2Comment +extern __typeof (xmlSAX2Comment) xmlSAX2Comment __attribute((alias("xmlSAX2Comment__internal_alias"))); +#else +#ifndef xmlSAX2Comment +extern __typeof (xmlSAX2Comment) xmlSAX2Comment__internal_alias __attribute((visibility("hidden"))); +#define xmlSAX2Comment xmlSAX2Comment__internal_alias +#endif +#endif + +#ifdef bottom_SAX2 +#undef xmlSAX2ElementDecl +extern __typeof (xmlSAX2ElementDecl) xmlSAX2ElementDecl __attribute((alias("xmlSAX2ElementDecl__internal_alias"))); +#else +#ifndef xmlSAX2ElementDecl +extern __typeof (xmlSAX2ElementDecl) xmlSAX2ElementDecl__internal_alias __attribute((visibility("hidden"))); +#define xmlSAX2ElementDecl xmlSAX2ElementDecl__internal_alias +#endif +#endif + +#ifdef bottom_SAX2 +#undef xmlSAX2EndDocument +extern __typeof (xmlSAX2EndDocument) xmlSAX2EndDocument __attribute((alias("xmlSAX2EndDocument__internal_alias"))); +#else +#ifndef xmlSAX2EndDocument +extern __typeof (xmlSAX2EndDocument) xmlSAX2EndDocument__internal_alias __attribute((visibility("hidden"))); +#define xmlSAX2EndDocument xmlSAX2EndDocument__internal_alias +#endif +#endif + +#if defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED) || defined(LIBXML_LEGACY_ENABLED) +#ifdef bottom_SAX2 +#undef xmlSAX2EndElement +extern __typeof (xmlSAX2EndElement) xmlSAX2EndElement __attribute((alias("xmlSAX2EndElement__internal_alias"))); +#else +#ifndef xmlSAX2EndElement +extern __typeof (xmlSAX2EndElement) xmlSAX2EndElement__internal_alias __attribute((visibility("hidden"))); +#define xmlSAX2EndElement xmlSAX2EndElement__internal_alias +#endif +#endif +#endif + +#ifdef bottom_SAX2 +#undef xmlSAX2EndElementNs +extern __typeof (xmlSAX2EndElementNs) xmlSAX2EndElementNs __attribute((alias("xmlSAX2EndElementNs__internal_alias"))); +#else +#ifndef xmlSAX2EndElementNs +extern __typeof (xmlSAX2EndElementNs) xmlSAX2EndElementNs__internal_alias __attribute((visibility("hidden"))); +#define xmlSAX2EndElementNs xmlSAX2EndElementNs__internal_alias +#endif +#endif + +#ifdef bottom_SAX2 +#undef xmlSAX2EntityDecl +extern __typeof (xmlSAX2EntityDecl) xmlSAX2EntityDecl __attribute((alias("xmlSAX2EntityDecl__internal_alias"))); +#else +#ifndef xmlSAX2EntityDecl +extern __typeof (xmlSAX2EntityDecl) xmlSAX2EntityDecl__internal_alias __attribute((visibility("hidden"))); +#define xmlSAX2EntityDecl xmlSAX2EntityDecl__internal_alias +#endif +#endif + +#ifdef bottom_SAX2 +#undef xmlSAX2ExternalSubset +extern __typeof (xmlSAX2ExternalSubset) xmlSAX2ExternalSubset __attribute((alias("xmlSAX2ExternalSubset__internal_alias"))); +#else +#ifndef xmlSAX2ExternalSubset +extern __typeof (xmlSAX2ExternalSubset) xmlSAX2ExternalSubset__internal_alias __attribute((visibility("hidden"))); +#define xmlSAX2ExternalSubset xmlSAX2ExternalSubset__internal_alias +#endif +#endif + +#ifdef bottom_SAX2 +#undef xmlSAX2GetColumnNumber +extern __typeof (xmlSAX2GetColumnNumber) xmlSAX2GetColumnNumber __attribute((alias("xmlSAX2GetColumnNumber__internal_alias"))); +#else +#ifndef xmlSAX2GetColumnNumber +extern __typeof (xmlSAX2GetColumnNumber) xmlSAX2GetColumnNumber__internal_alias __attribute((visibility("hidden"))); +#define xmlSAX2GetColumnNumber xmlSAX2GetColumnNumber__internal_alias +#endif +#endif + +#ifdef bottom_SAX2 +#undef xmlSAX2GetEntity +extern __typeof (xmlSAX2GetEntity) xmlSAX2GetEntity __attribute((alias("xmlSAX2GetEntity__internal_alias"))); +#else +#ifndef xmlSAX2GetEntity +extern __typeof (xmlSAX2GetEntity) xmlSAX2GetEntity__internal_alias __attribute((visibility("hidden"))); +#define xmlSAX2GetEntity xmlSAX2GetEntity__internal_alias +#endif +#endif + +#ifdef bottom_SAX2 +#undef xmlSAX2GetLineNumber +extern __typeof (xmlSAX2GetLineNumber) xmlSAX2GetLineNumber __attribute((alias("xmlSAX2GetLineNumber__internal_alias"))); +#else +#ifndef xmlSAX2GetLineNumber +extern __typeof (xmlSAX2GetLineNumber) xmlSAX2GetLineNumber__internal_alias __attribute((visibility("hidden"))); +#define xmlSAX2GetLineNumber xmlSAX2GetLineNumber__internal_alias +#endif +#endif + +#ifdef bottom_SAX2 +#undef xmlSAX2GetParameterEntity +extern __typeof (xmlSAX2GetParameterEntity) xmlSAX2GetParameterEntity __attribute((alias("xmlSAX2GetParameterEntity__internal_alias"))); +#else +#ifndef xmlSAX2GetParameterEntity +extern __typeof (xmlSAX2GetParameterEntity) xmlSAX2GetParameterEntity__internal_alias __attribute((visibility("hidden"))); +#define xmlSAX2GetParameterEntity xmlSAX2GetParameterEntity__internal_alias +#endif +#endif + +#ifdef bottom_SAX2 +#undef xmlSAX2GetPublicId +extern __typeof (xmlSAX2GetPublicId) xmlSAX2GetPublicId __attribute((alias("xmlSAX2GetPublicId__internal_alias"))); +#else +#ifndef xmlSAX2GetPublicId +extern __typeof (xmlSAX2GetPublicId) xmlSAX2GetPublicId__internal_alias __attribute((visibility("hidden"))); +#define xmlSAX2GetPublicId xmlSAX2GetPublicId__internal_alias +#endif +#endif + +#ifdef bottom_SAX2 +#undef xmlSAX2GetSystemId +extern __typeof (xmlSAX2GetSystemId) xmlSAX2GetSystemId __attribute((alias("xmlSAX2GetSystemId__internal_alias"))); +#else +#ifndef xmlSAX2GetSystemId +extern __typeof (xmlSAX2GetSystemId) xmlSAX2GetSystemId__internal_alias __attribute((visibility("hidden"))); +#define xmlSAX2GetSystemId xmlSAX2GetSystemId__internal_alias +#endif +#endif + +#ifdef bottom_SAX2 +#undef xmlSAX2HasExternalSubset +extern __typeof (xmlSAX2HasExternalSubset) xmlSAX2HasExternalSubset __attribute((alias("xmlSAX2HasExternalSubset__internal_alias"))); +#else +#ifndef xmlSAX2HasExternalSubset +extern __typeof (xmlSAX2HasExternalSubset) xmlSAX2HasExternalSubset__internal_alias __attribute((visibility("hidden"))); +#define xmlSAX2HasExternalSubset xmlSAX2HasExternalSubset__internal_alias +#endif +#endif + +#ifdef bottom_SAX2 +#undef xmlSAX2HasInternalSubset +extern __typeof (xmlSAX2HasInternalSubset) xmlSAX2HasInternalSubset __attribute((alias("xmlSAX2HasInternalSubset__internal_alias"))); +#else +#ifndef xmlSAX2HasInternalSubset +extern __typeof (xmlSAX2HasInternalSubset) xmlSAX2HasInternalSubset__internal_alias __attribute((visibility("hidden"))); +#define xmlSAX2HasInternalSubset xmlSAX2HasInternalSubset__internal_alias +#endif +#endif + +#ifdef bottom_SAX2 +#undef xmlSAX2IgnorableWhitespace +extern __typeof (xmlSAX2IgnorableWhitespace) xmlSAX2IgnorableWhitespace __attribute((alias("xmlSAX2IgnorableWhitespace__internal_alias"))); +#else +#ifndef xmlSAX2IgnorableWhitespace +extern __typeof (xmlSAX2IgnorableWhitespace) xmlSAX2IgnorableWhitespace__internal_alias __attribute((visibility("hidden"))); +#define xmlSAX2IgnorableWhitespace xmlSAX2IgnorableWhitespace__internal_alias +#endif +#endif + +#ifdef bottom_SAX2 +#undef xmlSAX2InitDefaultSAXHandler +extern __typeof (xmlSAX2InitDefaultSAXHandler) xmlSAX2InitDefaultSAXHandler __attribute((alias("xmlSAX2InitDefaultSAXHandler__internal_alias"))); +#else +#ifndef xmlSAX2InitDefaultSAXHandler +extern __typeof (xmlSAX2InitDefaultSAXHandler) xmlSAX2InitDefaultSAXHandler__internal_alias __attribute((visibility("hidden"))); +#define xmlSAX2InitDefaultSAXHandler xmlSAX2InitDefaultSAXHandler__internal_alias +#endif +#endif + +#if defined(LIBXML_DOCB_ENABLED) +#ifdef bottom_SAX2 +#undef xmlSAX2InitDocbDefaultSAXHandler +extern __typeof (xmlSAX2InitDocbDefaultSAXHandler) xmlSAX2InitDocbDefaultSAXHandler __attribute((alias("xmlSAX2InitDocbDefaultSAXHandler__internal_alias"))); +#else +#ifndef xmlSAX2InitDocbDefaultSAXHandler +extern __typeof (xmlSAX2InitDocbDefaultSAXHandler) xmlSAX2InitDocbDefaultSAXHandler__internal_alias __attribute((visibility("hidden"))); +#define xmlSAX2InitDocbDefaultSAXHandler xmlSAX2InitDocbDefaultSAXHandler__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_HTML_ENABLED) +#ifdef bottom_SAX2 +#undef xmlSAX2InitHtmlDefaultSAXHandler +extern __typeof (xmlSAX2InitHtmlDefaultSAXHandler) xmlSAX2InitHtmlDefaultSAXHandler __attribute((alias("xmlSAX2InitHtmlDefaultSAXHandler__internal_alias"))); +#else +#ifndef xmlSAX2InitHtmlDefaultSAXHandler +extern __typeof (xmlSAX2InitHtmlDefaultSAXHandler) xmlSAX2InitHtmlDefaultSAXHandler__internal_alias __attribute((visibility("hidden"))); +#define xmlSAX2InitHtmlDefaultSAXHandler xmlSAX2InitHtmlDefaultSAXHandler__internal_alias +#endif +#endif +#endif + +#ifdef bottom_SAX2 +#undef xmlSAX2InternalSubset +extern __typeof (xmlSAX2InternalSubset) xmlSAX2InternalSubset __attribute((alias("xmlSAX2InternalSubset__internal_alias"))); +#else +#ifndef xmlSAX2InternalSubset +extern __typeof (xmlSAX2InternalSubset) xmlSAX2InternalSubset__internal_alias __attribute((visibility("hidden"))); +#define xmlSAX2InternalSubset xmlSAX2InternalSubset__internal_alias +#endif +#endif + +#ifdef bottom_SAX2 +#undef xmlSAX2IsStandalone +extern __typeof (xmlSAX2IsStandalone) xmlSAX2IsStandalone __attribute((alias("xmlSAX2IsStandalone__internal_alias"))); +#else +#ifndef xmlSAX2IsStandalone +extern __typeof (xmlSAX2IsStandalone) xmlSAX2IsStandalone__internal_alias __attribute((visibility("hidden"))); +#define xmlSAX2IsStandalone xmlSAX2IsStandalone__internal_alias +#endif +#endif + +#ifdef bottom_SAX2 +#undef xmlSAX2NotationDecl +extern __typeof (xmlSAX2NotationDecl) xmlSAX2NotationDecl __attribute((alias("xmlSAX2NotationDecl__internal_alias"))); +#else +#ifndef xmlSAX2NotationDecl +extern __typeof (xmlSAX2NotationDecl) xmlSAX2NotationDecl__internal_alias __attribute((visibility("hidden"))); +#define xmlSAX2NotationDecl xmlSAX2NotationDecl__internal_alias +#endif +#endif + +#ifdef bottom_SAX2 +#undef xmlSAX2ProcessingInstruction +extern __typeof (xmlSAX2ProcessingInstruction) xmlSAX2ProcessingInstruction __attribute((alias("xmlSAX2ProcessingInstruction__internal_alias"))); +#else +#ifndef xmlSAX2ProcessingInstruction +extern __typeof (xmlSAX2ProcessingInstruction) xmlSAX2ProcessingInstruction__internal_alias __attribute((visibility("hidden"))); +#define xmlSAX2ProcessingInstruction xmlSAX2ProcessingInstruction__internal_alias +#endif +#endif + +#ifdef bottom_SAX2 +#undef xmlSAX2Reference +extern __typeof (xmlSAX2Reference) xmlSAX2Reference __attribute((alias("xmlSAX2Reference__internal_alias"))); +#else +#ifndef xmlSAX2Reference +extern __typeof (xmlSAX2Reference) xmlSAX2Reference__internal_alias __attribute((visibility("hidden"))); +#define xmlSAX2Reference xmlSAX2Reference__internal_alias +#endif +#endif + +#ifdef bottom_SAX2 +#undef xmlSAX2ResolveEntity +extern __typeof (xmlSAX2ResolveEntity) xmlSAX2ResolveEntity __attribute((alias("xmlSAX2ResolveEntity__internal_alias"))); +#else +#ifndef xmlSAX2ResolveEntity +extern __typeof (xmlSAX2ResolveEntity) xmlSAX2ResolveEntity__internal_alias __attribute((visibility("hidden"))); +#define xmlSAX2ResolveEntity xmlSAX2ResolveEntity__internal_alias +#endif +#endif + +#ifdef bottom_SAX2 +#undef xmlSAX2SetDocumentLocator +extern __typeof (xmlSAX2SetDocumentLocator) xmlSAX2SetDocumentLocator __attribute((alias("xmlSAX2SetDocumentLocator__internal_alias"))); +#else +#ifndef xmlSAX2SetDocumentLocator +extern __typeof (xmlSAX2SetDocumentLocator) xmlSAX2SetDocumentLocator__internal_alias __attribute((visibility("hidden"))); +#define xmlSAX2SetDocumentLocator xmlSAX2SetDocumentLocator__internal_alias +#endif +#endif + +#ifdef bottom_SAX2 +#undef xmlSAX2StartDocument +extern __typeof (xmlSAX2StartDocument) xmlSAX2StartDocument __attribute((alias("xmlSAX2StartDocument__internal_alias"))); +#else +#ifndef xmlSAX2StartDocument +extern __typeof (xmlSAX2StartDocument) xmlSAX2StartDocument__internal_alias __attribute((visibility("hidden"))); +#define xmlSAX2StartDocument xmlSAX2StartDocument__internal_alias +#endif +#endif + +#if defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED) || defined(LIBXML_LEGACY_ENABLED) +#ifdef bottom_SAX2 +#undef xmlSAX2StartElement +extern __typeof (xmlSAX2StartElement) xmlSAX2StartElement __attribute((alias("xmlSAX2StartElement__internal_alias"))); +#else +#ifndef xmlSAX2StartElement +extern __typeof (xmlSAX2StartElement) xmlSAX2StartElement__internal_alias __attribute((visibility("hidden"))); +#define xmlSAX2StartElement xmlSAX2StartElement__internal_alias +#endif +#endif +#endif + +#ifdef bottom_SAX2 +#undef xmlSAX2StartElementNs +extern __typeof (xmlSAX2StartElementNs) xmlSAX2StartElementNs __attribute((alias("xmlSAX2StartElementNs__internal_alias"))); +#else +#ifndef xmlSAX2StartElementNs +extern __typeof (xmlSAX2StartElementNs) xmlSAX2StartElementNs__internal_alias __attribute((visibility("hidden"))); +#define xmlSAX2StartElementNs xmlSAX2StartElementNs__internal_alias +#endif +#endif + +#ifdef bottom_SAX2 +#undef xmlSAX2UnparsedEntityDecl +extern __typeof (xmlSAX2UnparsedEntityDecl) xmlSAX2UnparsedEntityDecl __attribute((alias("xmlSAX2UnparsedEntityDecl__internal_alias"))); +#else +#ifndef xmlSAX2UnparsedEntityDecl +extern __typeof (xmlSAX2UnparsedEntityDecl) xmlSAX2UnparsedEntityDecl__internal_alias __attribute((visibility("hidden"))); +#define xmlSAX2UnparsedEntityDecl xmlSAX2UnparsedEntityDecl__internal_alias +#endif +#endif + +#if defined(LIBXML_SAX1_ENABLED) +#ifdef bottom_SAX2 +#undef xmlSAXDefaultVersion +extern __typeof (xmlSAXDefaultVersion) xmlSAXDefaultVersion __attribute((alias("xmlSAXDefaultVersion__internal_alias"))); +#else +#ifndef xmlSAXDefaultVersion +extern __typeof (xmlSAXDefaultVersion) xmlSAXDefaultVersion__internal_alias __attribute((visibility("hidden"))); +#define xmlSAXDefaultVersion xmlSAXDefaultVersion__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_VALID_ENABLED) +#ifdef bottom_parser +#undef xmlSAXParseDTD +extern __typeof (xmlSAXParseDTD) xmlSAXParseDTD __attribute((alias("xmlSAXParseDTD__internal_alias"))); +#else +#ifndef xmlSAXParseDTD +extern __typeof (xmlSAXParseDTD) xmlSAXParseDTD__internal_alias __attribute((visibility("hidden"))); +#define xmlSAXParseDTD xmlSAXParseDTD__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SAX1_ENABLED) +#ifdef bottom_parser +#undef xmlSAXParseDoc +extern __typeof (xmlSAXParseDoc) xmlSAXParseDoc __attribute((alias("xmlSAXParseDoc__internal_alias"))); +#else +#ifndef xmlSAXParseDoc +extern __typeof (xmlSAXParseDoc) xmlSAXParseDoc__internal_alias __attribute((visibility("hidden"))); +#define xmlSAXParseDoc xmlSAXParseDoc__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SAX1_ENABLED) +#ifdef bottom_parser +#undef xmlSAXParseEntity +extern __typeof (xmlSAXParseEntity) xmlSAXParseEntity __attribute((alias("xmlSAXParseEntity__internal_alias"))); +#else +#ifndef xmlSAXParseEntity +extern __typeof (xmlSAXParseEntity) xmlSAXParseEntity__internal_alias __attribute((visibility("hidden"))); +#define xmlSAXParseEntity xmlSAXParseEntity__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SAX1_ENABLED) +#ifdef bottom_parser +#undef xmlSAXParseFile +extern __typeof (xmlSAXParseFile) xmlSAXParseFile __attribute((alias("xmlSAXParseFile__internal_alias"))); +#else +#ifndef xmlSAXParseFile +extern __typeof (xmlSAXParseFile) xmlSAXParseFile__internal_alias __attribute((visibility("hidden"))); +#define xmlSAXParseFile xmlSAXParseFile__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SAX1_ENABLED) +#ifdef bottom_parser +#undef xmlSAXParseFileWithData +extern __typeof (xmlSAXParseFileWithData) xmlSAXParseFileWithData __attribute((alias("xmlSAXParseFileWithData__internal_alias"))); +#else +#ifndef xmlSAXParseFileWithData +extern __typeof (xmlSAXParseFileWithData) xmlSAXParseFileWithData__internal_alias __attribute((visibility("hidden"))); +#define xmlSAXParseFileWithData xmlSAXParseFileWithData__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SAX1_ENABLED) +#ifdef bottom_parser +#undef xmlSAXParseMemory +extern __typeof (xmlSAXParseMemory) xmlSAXParseMemory __attribute((alias("xmlSAXParseMemory__internal_alias"))); +#else +#ifndef xmlSAXParseMemory +extern __typeof (xmlSAXParseMemory) xmlSAXParseMemory__internal_alias __attribute((visibility("hidden"))); +#define xmlSAXParseMemory xmlSAXParseMemory__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SAX1_ENABLED) +#ifdef bottom_parser +#undef xmlSAXParseMemoryWithData +extern __typeof (xmlSAXParseMemoryWithData) xmlSAXParseMemoryWithData __attribute((alias("xmlSAXParseMemoryWithData__internal_alias"))); +#else +#ifndef xmlSAXParseMemoryWithData +extern __typeof (xmlSAXParseMemoryWithData) xmlSAXParseMemoryWithData__internal_alias __attribute((visibility("hidden"))); +#define xmlSAXParseMemoryWithData xmlSAXParseMemoryWithData__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SAX1_ENABLED) +#ifdef bottom_parser +#undef xmlSAXUserParseFile +extern __typeof (xmlSAXUserParseFile) xmlSAXUserParseFile __attribute((alias("xmlSAXUserParseFile__internal_alias"))); +#else +#ifndef xmlSAXUserParseFile +extern __typeof (xmlSAXUserParseFile) xmlSAXUserParseFile__internal_alias __attribute((visibility("hidden"))); +#define xmlSAXUserParseFile xmlSAXUserParseFile__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SAX1_ENABLED) +#ifdef bottom_parser +#undef xmlSAXUserParseMemory +extern __typeof (xmlSAXUserParseMemory) xmlSAXUserParseMemory __attribute((alias("xmlSAXUserParseMemory__internal_alias"))); +#else +#ifndef xmlSAXUserParseMemory +extern __typeof (xmlSAXUserParseMemory) xmlSAXUserParseMemory__internal_alias __attribute((visibility("hidden"))); +#define xmlSAXUserParseMemory xmlSAXUserParseMemory__internal_alias +#endif +#endif +#endif + +#ifdef bottom_SAX2 +#undef xmlSAXVersion +extern __typeof (xmlSAXVersion) xmlSAXVersion __attribute((alias("xmlSAXVersion__internal_alias"))); +#else +#ifndef xmlSAXVersion +extern __typeof (xmlSAXVersion) xmlSAXVersion__internal_alias __attribute((visibility("hidden"))); +#define xmlSAXVersion xmlSAXVersion__internal_alias +#endif +#endif + +#if defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_xmlsave +#undef xmlSaveClose +extern __typeof (xmlSaveClose) xmlSaveClose __attribute((alias("xmlSaveClose__internal_alias"))); +#else +#ifndef xmlSaveClose +extern __typeof (xmlSaveClose) xmlSaveClose__internal_alias __attribute((visibility("hidden"))); +#define xmlSaveClose xmlSaveClose__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_xmlsave +#undef xmlSaveDoc +extern __typeof (xmlSaveDoc) xmlSaveDoc __attribute((alias("xmlSaveDoc__internal_alias"))); +#else +#ifndef xmlSaveDoc +extern __typeof (xmlSaveDoc) xmlSaveDoc__internal_alias __attribute((visibility("hidden"))); +#define xmlSaveDoc xmlSaveDoc__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_xmlsave +#undef xmlSaveFile +extern __typeof (xmlSaveFile) xmlSaveFile __attribute((alias("xmlSaveFile__internal_alias"))); +#else +#ifndef xmlSaveFile +extern __typeof (xmlSaveFile) xmlSaveFile__internal_alias __attribute((visibility("hidden"))); +#define xmlSaveFile xmlSaveFile__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_xmlsave +#undef xmlSaveFileEnc +extern __typeof (xmlSaveFileEnc) xmlSaveFileEnc __attribute((alias("xmlSaveFileEnc__internal_alias"))); +#else +#ifndef xmlSaveFileEnc +extern __typeof (xmlSaveFileEnc) xmlSaveFileEnc__internal_alias __attribute((visibility("hidden"))); +#define xmlSaveFileEnc xmlSaveFileEnc__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_xmlsave +#undef xmlSaveFileTo +extern __typeof (xmlSaveFileTo) xmlSaveFileTo __attribute((alias("xmlSaveFileTo__internal_alias"))); +#else +#ifndef xmlSaveFileTo +extern __typeof (xmlSaveFileTo) xmlSaveFileTo__internal_alias __attribute((visibility("hidden"))); +#define xmlSaveFileTo xmlSaveFileTo__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_xmlsave +#undef xmlSaveFlush +extern __typeof (xmlSaveFlush) xmlSaveFlush __attribute((alias("xmlSaveFlush__internal_alias"))); +#else +#ifndef xmlSaveFlush +extern __typeof (xmlSaveFlush) xmlSaveFlush__internal_alias __attribute((visibility("hidden"))); +#define xmlSaveFlush xmlSaveFlush__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_xmlsave +#undef xmlSaveFormatFile +extern __typeof (xmlSaveFormatFile) xmlSaveFormatFile __attribute((alias("xmlSaveFormatFile__internal_alias"))); +#else +#ifndef xmlSaveFormatFile +extern __typeof (xmlSaveFormatFile) xmlSaveFormatFile__internal_alias __attribute((visibility("hidden"))); +#define xmlSaveFormatFile xmlSaveFormatFile__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_xmlsave +#undef xmlSaveFormatFileEnc +extern __typeof (xmlSaveFormatFileEnc) xmlSaveFormatFileEnc __attribute((alias("xmlSaveFormatFileEnc__internal_alias"))); +#else +#ifndef xmlSaveFormatFileEnc +extern __typeof (xmlSaveFormatFileEnc) xmlSaveFormatFileEnc__internal_alias __attribute((visibility("hidden"))); +#define xmlSaveFormatFileEnc xmlSaveFormatFileEnc__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_xmlsave +#undef xmlSaveFormatFileTo +extern __typeof (xmlSaveFormatFileTo) xmlSaveFormatFileTo __attribute((alias("xmlSaveFormatFileTo__internal_alias"))); +#else +#ifndef xmlSaveFormatFileTo +extern __typeof (xmlSaveFormatFileTo) xmlSaveFormatFileTo__internal_alias __attribute((visibility("hidden"))); +#define xmlSaveFormatFileTo xmlSaveFormatFileTo__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_xmlsave +#undef xmlSaveSetAttrEscape +extern __typeof (xmlSaveSetAttrEscape) xmlSaveSetAttrEscape __attribute((alias("xmlSaveSetAttrEscape__internal_alias"))); +#else +#ifndef xmlSaveSetAttrEscape +extern __typeof (xmlSaveSetAttrEscape) xmlSaveSetAttrEscape__internal_alias __attribute((visibility("hidden"))); +#define xmlSaveSetAttrEscape xmlSaveSetAttrEscape__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_xmlsave +#undef xmlSaveSetEscape +extern __typeof (xmlSaveSetEscape) xmlSaveSetEscape __attribute((alias("xmlSaveSetEscape__internal_alias"))); +#else +#ifndef xmlSaveSetEscape +extern __typeof (xmlSaveSetEscape) xmlSaveSetEscape__internal_alias __attribute((visibility("hidden"))); +#define xmlSaveSetEscape xmlSaveSetEscape__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_xmlsave +#undef xmlSaveToBuffer +extern __typeof (xmlSaveToBuffer) xmlSaveToBuffer __attribute((alias("xmlSaveToBuffer__internal_alias"))); +#else +#ifndef xmlSaveToBuffer +extern __typeof (xmlSaveToBuffer) xmlSaveToBuffer__internal_alias __attribute((visibility("hidden"))); +#define xmlSaveToBuffer xmlSaveToBuffer__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_xmlsave +#undef xmlSaveToFd +extern __typeof (xmlSaveToFd) xmlSaveToFd __attribute((alias("xmlSaveToFd__internal_alias"))); +#else +#ifndef xmlSaveToFd +extern __typeof (xmlSaveToFd) xmlSaveToFd__internal_alias __attribute((visibility("hidden"))); +#define xmlSaveToFd xmlSaveToFd__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_xmlsave +#undef xmlSaveToFilename +extern __typeof (xmlSaveToFilename) xmlSaveToFilename __attribute((alias("xmlSaveToFilename__internal_alias"))); +#else +#ifndef xmlSaveToFilename +extern __typeof (xmlSaveToFilename) xmlSaveToFilename__internal_alias __attribute((visibility("hidden"))); +#define xmlSaveToFilename xmlSaveToFilename__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_xmlsave +#undef xmlSaveToIO +extern __typeof (xmlSaveToIO) xmlSaveToIO __attribute((alias("xmlSaveToIO__internal_alias"))); +#else +#ifndef xmlSaveToIO +extern __typeof (xmlSaveToIO) xmlSaveToIO__internal_alias __attribute((visibility("hidden"))); +#define xmlSaveToIO xmlSaveToIO__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_xmlsave +#undef xmlSaveTree +extern __typeof (xmlSaveTree) xmlSaveTree __attribute((alias("xmlSaveTree__internal_alias"))); +#else +#ifndef xmlSaveTree +extern __typeof (xmlSaveTree) xmlSaveTree__internal_alias __attribute((visibility("hidden"))); +#define xmlSaveTree xmlSaveTree__internal_alias +#endif +#endif +#endif + +#ifdef bottom_uri +#undef xmlSaveUri +extern __typeof (xmlSaveUri) xmlSaveUri __attribute((alias("xmlSaveUri__internal_alias"))); +#else +#ifndef xmlSaveUri +extern __typeof (xmlSaveUri) xmlSaveUri__internal_alias __attribute((visibility("hidden"))); +#define xmlSaveUri xmlSaveUri__internal_alias +#endif +#endif + +#if defined(LIBXML_LEGACY_ENABLED) +#ifdef bottom_legacy +#undef xmlScanName +extern __typeof (xmlScanName) xmlScanName __attribute((alias("xmlScanName__internal_alias"))); +#else +#ifndef xmlScanName +extern __typeof (xmlScanName) xmlScanName__internal_alias __attribute((visibility("hidden"))); +#define xmlScanName xmlScanName__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemas +#undef xmlSchemaCheckFacet +extern __typeof (xmlSchemaCheckFacet) xmlSchemaCheckFacet __attribute((alias("xmlSchemaCheckFacet__internal_alias"))); +#else +#ifndef xmlSchemaCheckFacet +extern __typeof (xmlSchemaCheckFacet) xmlSchemaCheckFacet__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaCheckFacet xmlSchemaCheckFacet__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemastypes +#undef xmlSchemaCleanupTypes +extern __typeof (xmlSchemaCleanupTypes) xmlSchemaCleanupTypes __attribute((alias("xmlSchemaCleanupTypes__internal_alias"))); +#else +#ifndef xmlSchemaCleanupTypes +extern __typeof (xmlSchemaCleanupTypes) xmlSchemaCleanupTypes__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaCleanupTypes xmlSchemaCleanupTypes__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemastypes +#undef xmlSchemaCollapseString +extern __typeof (xmlSchemaCollapseString) xmlSchemaCollapseString __attribute((alias("xmlSchemaCollapseString__internal_alias"))); +#else +#ifndef xmlSchemaCollapseString +extern __typeof (xmlSchemaCollapseString) xmlSchemaCollapseString__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaCollapseString xmlSchemaCollapseString__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemastypes +#undef xmlSchemaCompareValues +extern __typeof (xmlSchemaCompareValues) xmlSchemaCompareValues __attribute((alias("xmlSchemaCompareValues__internal_alias"))); +#else +#ifndef xmlSchemaCompareValues +extern __typeof (xmlSchemaCompareValues) xmlSchemaCompareValues__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaCompareValues xmlSchemaCompareValues__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemastypes +#undef xmlSchemaCompareValuesWhtsp +extern __typeof (xmlSchemaCompareValuesWhtsp) xmlSchemaCompareValuesWhtsp __attribute((alias("xmlSchemaCompareValuesWhtsp__internal_alias"))); +#else +#ifndef xmlSchemaCompareValuesWhtsp +extern __typeof (xmlSchemaCompareValuesWhtsp) xmlSchemaCompareValuesWhtsp__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaCompareValuesWhtsp xmlSchemaCompareValuesWhtsp__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemastypes +#undef xmlSchemaCopyValue +extern __typeof (xmlSchemaCopyValue) xmlSchemaCopyValue __attribute((alias("xmlSchemaCopyValue__internal_alias"))); +#else +#ifndef xmlSchemaCopyValue +extern __typeof (xmlSchemaCopyValue) xmlSchemaCopyValue__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaCopyValue xmlSchemaCopyValue__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_xmlschemas +#undef xmlSchemaDump +extern __typeof (xmlSchemaDump) xmlSchemaDump __attribute((alias("xmlSchemaDump__internal_alias"))); +#else +#ifndef xmlSchemaDump +extern __typeof (xmlSchemaDump) xmlSchemaDump__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaDump xmlSchemaDump__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemas +#undef xmlSchemaFree +extern __typeof (xmlSchemaFree) xmlSchemaFree __attribute((alias("xmlSchemaFree__internal_alias"))); +#else +#ifndef xmlSchemaFree +extern __typeof (xmlSchemaFree) xmlSchemaFree__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaFree xmlSchemaFree__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemas +#undef xmlSchemaFreeFacet +extern __typeof (xmlSchemaFreeFacet) xmlSchemaFreeFacet __attribute((alias("xmlSchemaFreeFacet__internal_alias"))); +#else +#ifndef xmlSchemaFreeFacet +extern __typeof (xmlSchemaFreeFacet) xmlSchemaFreeFacet__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaFreeFacet xmlSchemaFreeFacet__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemas +#undef xmlSchemaFreeParserCtxt +extern __typeof (xmlSchemaFreeParserCtxt) xmlSchemaFreeParserCtxt __attribute((alias("xmlSchemaFreeParserCtxt__internal_alias"))); +#else +#ifndef xmlSchemaFreeParserCtxt +extern __typeof (xmlSchemaFreeParserCtxt) xmlSchemaFreeParserCtxt__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaFreeParserCtxt xmlSchemaFreeParserCtxt__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemas +#undef xmlSchemaFreeType +extern __typeof (xmlSchemaFreeType) xmlSchemaFreeType __attribute((alias("xmlSchemaFreeType__internal_alias"))); +#else +#ifndef xmlSchemaFreeType +extern __typeof (xmlSchemaFreeType) xmlSchemaFreeType__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaFreeType xmlSchemaFreeType__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemas +#undef xmlSchemaFreeValidCtxt +extern __typeof (xmlSchemaFreeValidCtxt) xmlSchemaFreeValidCtxt __attribute((alias("xmlSchemaFreeValidCtxt__internal_alias"))); +#else +#ifndef xmlSchemaFreeValidCtxt +extern __typeof (xmlSchemaFreeValidCtxt) xmlSchemaFreeValidCtxt__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaFreeValidCtxt xmlSchemaFreeValidCtxt__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemastypes +#undef xmlSchemaFreeValue +extern __typeof (xmlSchemaFreeValue) xmlSchemaFreeValue __attribute((alias("xmlSchemaFreeValue__internal_alias"))); +#else +#ifndef xmlSchemaFreeValue +extern __typeof (xmlSchemaFreeValue) xmlSchemaFreeValue__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaFreeValue xmlSchemaFreeValue__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemas +#undef xmlSchemaFreeWildcard +extern __typeof (xmlSchemaFreeWildcard) xmlSchemaFreeWildcard __attribute((alias("xmlSchemaFreeWildcard__internal_alias"))); +#else +#ifndef xmlSchemaFreeWildcard +extern __typeof (xmlSchemaFreeWildcard) xmlSchemaFreeWildcard__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaFreeWildcard xmlSchemaFreeWildcard__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemastypes +#undef xmlSchemaGetBuiltInListSimpleTypeItemType +extern __typeof (xmlSchemaGetBuiltInListSimpleTypeItemType) xmlSchemaGetBuiltInListSimpleTypeItemType __attribute((alias("xmlSchemaGetBuiltInListSimpleTypeItemType__internal_alias"))); +#else +#ifndef xmlSchemaGetBuiltInListSimpleTypeItemType +extern __typeof (xmlSchemaGetBuiltInListSimpleTypeItemType) xmlSchemaGetBuiltInListSimpleTypeItemType__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaGetBuiltInListSimpleTypeItemType xmlSchemaGetBuiltInListSimpleTypeItemType__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemastypes +#undef xmlSchemaGetBuiltInType +extern __typeof (xmlSchemaGetBuiltInType) xmlSchemaGetBuiltInType __attribute((alias("xmlSchemaGetBuiltInType__internal_alias"))); +#else +#ifndef xmlSchemaGetBuiltInType +extern __typeof (xmlSchemaGetBuiltInType) xmlSchemaGetBuiltInType__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaGetBuiltInType xmlSchemaGetBuiltInType__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemastypes +#undef xmlSchemaGetCanonValue +extern __typeof (xmlSchemaGetCanonValue) xmlSchemaGetCanonValue __attribute((alias("xmlSchemaGetCanonValue__internal_alias"))); +#else +#ifndef xmlSchemaGetCanonValue +extern __typeof (xmlSchemaGetCanonValue) xmlSchemaGetCanonValue__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaGetCanonValue xmlSchemaGetCanonValue__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemastypes +#undef xmlSchemaGetCanonValueWhtsp +extern __typeof (xmlSchemaGetCanonValueWhtsp) xmlSchemaGetCanonValueWhtsp __attribute((alias("xmlSchemaGetCanonValueWhtsp__internal_alias"))); +#else +#ifndef xmlSchemaGetCanonValueWhtsp +extern __typeof (xmlSchemaGetCanonValueWhtsp) xmlSchemaGetCanonValueWhtsp__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaGetCanonValueWhtsp xmlSchemaGetCanonValueWhtsp__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemastypes +#undef xmlSchemaGetFacetValueAsULong +extern __typeof (xmlSchemaGetFacetValueAsULong) xmlSchemaGetFacetValueAsULong __attribute((alias("xmlSchemaGetFacetValueAsULong__internal_alias"))); +#else +#ifndef xmlSchemaGetFacetValueAsULong +extern __typeof (xmlSchemaGetFacetValueAsULong) xmlSchemaGetFacetValueAsULong__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaGetFacetValueAsULong xmlSchemaGetFacetValueAsULong__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemas +#undef xmlSchemaGetParserErrors +extern __typeof (xmlSchemaGetParserErrors) xmlSchemaGetParserErrors __attribute((alias("xmlSchemaGetParserErrors__internal_alias"))); +#else +#ifndef xmlSchemaGetParserErrors +extern __typeof (xmlSchemaGetParserErrors) xmlSchemaGetParserErrors__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaGetParserErrors xmlSchemaGetParserErrors__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemastypes +#undef xmlSchemaGetPredefinedType +extern __typeof (xmlSchemaGetPredefinedType) xmlSchemaGetPredefinedType __attribute((alias("xmlSchemaGetPredefinedType__internal_alias"))); +#else +#ifndef xmlSchemaGetPredefinedType +extern __typeof (xmlSchemaGetPredefinedType) xmlSchemaGetPredefinedType__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaGetPredefinedType xmlSchemaGetPredefinedType__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemastypes +#undef xmlSchemaGetValType +extern __typeof (xmlSchemaGetValType) xmlSchemaGetValType __attribute((alias("xmlSchemaGetValType__internal_alias"))); +#else +#ifndef xmlSchemaGetValType +extern __typeof (xmlSchemaGetValType) xmlSchemaGetValType__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaGetValType xmlSchemaGetValType__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemas +#undef xmlSchemaGetValidErrors +extern __typeof (xmlSchemaGetValidErrors) xmlSchemaGetValidErrors __attribute((alias("xmlSchemaGetValidErrors__internal_alias"))); +#else +#ifndef xmlSchemaGetValidErrors +extern __typeof (xmlSchemaGetValidErrors) xmlSchemaGetValidErrors__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaGetValidErrors xmlSchemaGetValidErrors__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemastypes +#undef xmlSchemaInitTypes +extern __typeof (xmlSchemaInitTypes) xmlSchemaInitTypes __attribute((alias("xmlSchemaInitTypes__internal_alias"))); +#else +#ifndef xmlSchemaInitTypes +extern __typeof (xmlSchemaInitTypes) xmlSchemaInitTypes__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaInitTypes xmlSchemaInitTypes__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemastypes +#undef xmlSchemaIsBuiltInTypeFacet +extern __typeof (xmlSchemaIsBuiltInTypeFacet) xmlSchemaIsBuiltInTypeFacet __attribute((alias("xmlSchemaIsBuiltInTypeFacet__internal_alias"))); +#else +#ifndef xmlSchemaIsBuiltInTypeFacet +extern __typeof (xmlSchemaIsBuiltInTypeFacet) xmlSchemaIsBuiltInTypeFacet__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaIsBuiltInTypeFacet xmlSchemaIsBuiltInTypeFacet__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemas +#undef xmlSchemaIsValid +extern __typeof (xmlSchemaIsValid) xmlSchemaIsValid __attribute((alias("xmlSchemaIsValid__internal_alias"))); +#else +#ifndef xmlSchemaIsValid +extern __typeof (xmlSchemaIsValid) xmlSchemaIsValid__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaIsValid xmlSchemaIsValid__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemas +#undef xmlSchemaNewDocParserCtxt +extern __typeof (xmlSchemaNewDocParserCtxt) xmlSchemaNewDocParserCtxt __attribute((alias("xmlSchemaNewDocParserCtxt__internal_alias"))); +#else +#ifndef xmlSchemaNewDocParserCtxt +extern __typeof (xmlSchemaNewDocParserCtxt) xmlSchemaNewDocParserCtxt__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaNewDocParserCtxt xmlSchemaNewDocParserCtxt__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemas +#undef xmlSchemaNewFacet +extern __typeof (xmlSchemaNewFacet) xmlSchemaNewFacet __attribute((alias("xmlSchemaNewFacet__internal_alias"))); +#else +#ifndef xmlSchemaNewFacet +extern __typeof (xmlSchemaNewFacet) xmlSchemaNewFacet__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaNewFacet xmlSchemaNewFacet__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemas +#undef xmlSchemaNewMemParserCtxt +extern __typeof (xmlSchemaNewMemParserCtxt) xmlSchemaNewMemParserCtxt __attribute((alias("xmlSchemaNewMemParserCtxt__internal_alias"))); +#else +#ifndef xmlSchemaNewMemParserCtxt +extern __typeof (xmlSchemaNewMemParserCtxt) xmlSchemaNewMemParserCtxt__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaNewMemParserCtxt xmlSchemaNewMemParserCtxt__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemastypes +#undef xmlSchemaNewNOTATIONValue +extern __typeof (xmlSchemaNewNOTATIONValue) xmlSchemaNewNOTATIONValue __attribute((alias("xmlSchemaNewNOTATIONValue__internal_alias"))); +#else +#ifndef xmlSchemaNewNOTATIONValue +extern __typeof (xmlSchemaNewNOTATIONValue) xmlSchemaNewNOTATIONValue__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaNewNOTATIONValue xmlSchemaNewNOTATIONValue__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemas +#undef xmlSchemaNewParserCtxt +extern __typeof (xmlSchemaNewParserCtxt) xmlSchemaNewParserCtxt __attribute((alias("xmlSchemaNewParserCtxt__internal_alias"))); +#else +#ifndef xmlSchemaNewParserCtxt +extern __typeof (xmlSchemaNewParserCtxt) xmlSchemaNewParserCtxt__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaNewParserCtxt xmlSchemaNewParserCtxt__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemastypes +#undef xmlSchemaNewQNameValue +extern __typeof (xmlSchemaNewQNameValue) xmlSchemaNewQNameValue __attribute((alias("xmlSchemaNewQNameValue__internal_alias"))); +#else +#ifndef xmlSchemaNewQNameValue +extern __typeof (xmlSchemaNewQNameValue) xmlSchemaNewQNameValue__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaNewQNameValue xmlSchemaNewQNameValue__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemastypes +#undef xmlSchemaNewStringValue +extern __typeof (xmlSchemaNewStringValue) xmlSchemaNewStringValue __attribute((alias("xmlSchemaNewStringValue__internal_alias"))); +#else +#ifndef xmlSchemaNewStringValue +extern __typeof (xmlSchemaNewStringValue) xmlSchemaNewStringValue__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaNewStringValue xmlSchemaNewStringValue__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemas +#undef xmlSchemaNewValidCtxt +extern __typeof (xmlSchemaNewValidCtxt) xmlSchemaNewValidCtxt __attribute((alias("xmlSchemaNewValidCtxt__internal_alias"))); +#else +#ifndef xmlSchemaNewValidCtxt +extern __typeof (xmlSchemaNewValidCtxt) xmlSchemaNewValidCtxt__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaNewValidCtxt xmlSchemaNewValidCtxt__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemas +#undef xmlSchemaParse +extern __typeof (xmlSchemaParse) xmlSchemaParse __attribute((alias("xmlSchemaParse__internal_alias"))); +#else +#ifndef xmlSchemaParse +extern __typeof (xmlSchemaParse) xmlSchemaParse__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaParse xmlSchemaParse__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemas +#undef xmlSchemaSAXPlug +extern __typeof (xmlSchemaSAXPlug) xmlSchemaSAXPlug __attribute((alias("xmlSchemaSAXPlug__internal_alias"))); +#else +#ifndef xmlSchemaSAXPlug +extern __typeof (xmlSchemaSAXPlug) xmlSchemaSAXPlug__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaSAXPlug xmlSchemaSAXPlug__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemas +#undef xmlSchemaSAXUnplug +extern __typeof (xmlSchemaSAXUnplug) xmlSchemaSAXUnplug __attribute((alias("xmlSchemaSAXUnplug__internal_alias"))); +#else +#ifndef xmlSchemaSAXUnplug +extern __typeof (xmlSchemaSAXUnplug) xmlSchemaSAXUnplug__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaSAXUnplug xmlSchemaSAXUnplug__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemas +#undef xmlSchemaSetParserErrors +extern __typeof (xmlSchemaSetParserErrors) xmlSchemaSetParserErrors __attribute((alias("xmlSchemaSetParserErrors__internal_alias"))); +#else +#ifndef xmlSchemaSetParserErrors +extern __typeof (xmlSchemaSetParserErrors) xmlSchemaSetParserErrors__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaSetParserErrors xmlSchemaSetParserErrors__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemas +#undef xmlSchemaSetParserStructuredErrors +extern __typeof (xmlSchemaSetParserStructuredErrors) xmlSchemaSetParserStructuredErrors __attribute((alias("xmlSchemaSetParserStructuredErrors__internal_alias"))); +#else +#ifndef xmlSchemaSetParserStructuredErrors +extern __typeof (xmlSchemaSetParserStructuredErrors) xmlSchemaSetParserStructuredErrors__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaSetParserStructuredErrors xmlSchemaSetParserStructuredErrors__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemas +#undef xmlSchemaSetValidErrors +extern __typeof (xmlSchemaSetValidErrors) xmlSchemaSetValidErrors __attribute((alias("xmlSchemaSetValidErrors__internal_alias"))); +#else +#ifndef xmlSchemaSetValidErrors +extern __typeof (xmlSchemaSetValidErrors) xmlSchemaSetValidErrors__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaSetValidErrors xmlSchemaSetValidErrors__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemas +#undef xmlSchemaSetValidOptions +extern __typeof (xmlSchemaSetValidOptions) xmlSchemaSetValidOptions __attribute((alias("xmlSchemaSetValidOptions__internal_alias"))); +#else +#ifndef xmlSchemaSetValidOptions +extern __typeof (xmlSchemaSetValidOptions) xmlSchemaSetValidOptions__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaSetValidOptions xmlSchemaSetValidOptions__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemas +#undef xmlSchemaSetValidStructuredErrors +extern __typeof (xmlSchemaSetValidStructuredErrors) xmlSchemaSetValidStructuredErrors __attribute((alias("xmlSchemaSetValidStructuredErrors__internal_alias"))); +#else +#ifndef xmlSchemaSetValidStructuredErrors +extern __typeof (xmlSchemaSetValidStructuredErrors) xmlSchemaSetValidStructuredErrors__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaSetValidStructuredErrors xmlSchemaSetValidStructuredErrors__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemastypes +#undef xmlSchemaValPredefTypeNode +extern __typeof (xmlSchemaValPredefTypeNode) xmlSchemaValPredefTypeNode __attribute((alias("xmlSchemaValPredefTypeNode__internal_alias"))); +#else +#ifndef xmlSchemaValPredefTypeNode +extern __typeof (xmlSchemaValPredefTypeNode) xmlSchemaValPredefTypeNode__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaValPredefTypeNode xmlSchemaValPredefTypeNode__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemastypes +#undef xmlSchemaValPredefTypeNodeNoNorm +extern __typeof (xmlSchemaValPredefTypeNodeNoNorm) xmlSchemaValPredefTypeNodeNoNorm __attribute((alias("xmlSchemaValPredefTypeNodeNoNorm__internal_alias"))); +#else +#ifndef xmlSchemaValPredefTypeNodeNoNorm +extern __typeof (xmlSchemaValPredefTypeNodeNoNorm) xmlSchemaValPredefTypeNodeNoNorm__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaValPredefTypeNodeNoNorm xmlSchemaValPredefTypeNodeNoNorm__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemas +#undef xmlSchemaValidCtxtGetOptions +extern __typeof (xmlSchemaValidCtxtGetOptions) xmlSchemaValidCtxtGetOptions __attribute((alias("xmlSchemaValidCtxtGetOptions__internal_alias"))); +#else +#ifndef xmlSchemaValidCtxtGetOptions +extern __typeof (xmlSchemaValidCtxtGetOptions) xmlSchemaValidCtxtGetOptions__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaValidCtxtGetOptions xmlSchemaValidCtxtGetOptions__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemas +#undef xmlSchemaValidCtxtGetParserCtxt +extern __typeof (xmlSchemaValidCtxtGetParserCtxt) xmlSchemaValidCtxtGetParserCtxt __attribute((alias("xmlSchemaValidCtxtGetParserCtxt__internal_alias"))); +#else +#ifndef xmlSchemaValidCtxtGetParserCtxt +extern __typeof (xmlSchemaValidCtxtGetParserCtxt) xmlSchemaValidCtxtGetParserCtxt__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaValidCtxtGetParserCtxt xmlSchemaValidCtxtGetParserCtxt__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemas +#undef xmlSchemaValidateDoc +extern __typeof (xmlSchemaValidateDoc) xmlSchemaValidateDoc __attribute((alias("xmlSchemaValidateDoc__internal_alias"))); +#else +#ifndef xmlSchemaValidateDoc +extern __typeof (xmlSchemaValidateDoc) xmlSchemaValidateDoc__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaValidateDoc xmlSchemaValidateDoc__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemastypes +#undef xmlSchemaValidateFacet +extern __typeof (xmlSchemaValidateFacet) xmlSchemaValidateFacet __attribute((alias("xmlSchemaValidateFacet__internal_alias"))); +#else +#ifndef xmlSchemaValidateFacet +extern __typeof (xmlSchemaValidateFacet) xmlSchemaValidateFacet__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaValidateFacet xmlSchemaValidateFacet__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemastypes +#undef xmlSchemaValidateFacetWhtsp +extern __typeof (xmlSchemaValidateFacetWhtsp) xmlSchemaValidateFacetWhtsp __attribute((alias("xmlSchemaValidateFacetWhtsp__internal_alias"))); +#else +#ifndef xmlSchemaValidateFacetWhtsp +extern __typeof (xmlSchemaValidateFacetWhtsp) xmlSchemaValidateFacetWhtsp__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaValidateFacetWhtsp xmlSchemaValidateFacetWhtsp__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemas +#undef xmlSchemaValidateFile +extern __typeof (xmlSchemaValidateFile) xmlSchemaValidateFile __attribute((alias("xmlSchemaValidateFile__internal_alias"))); +#else +#ifndef xmlSchemaValidateFile +extern __typeof (xmlSchemaValidateFile) xmlSchemaValidateFile__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaValidateFile xmlSchemaValidateFile__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemastypes +#undef xmlSchemaValidateLengthFacet +extern __typeof (xmlSchemaValidateLengthFacet) xmlSchemaValidateLengthFacet __attribute((alias("xmlSchemaValidateLengthFacet__internal_alias"))); +#else +#ifndef xmlSchemaValidateLengthFacet +extern __typeof (xmlSchemaValidateLengthFacet) xmlSchemaValidateLengthFacet__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaValidateLengthFacet xmlSchemaValidateLengthFacet__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemastypes +#undef xmlSchemaValidateLengthFacetWhtsp +extern __typeof (xmlSchemaValidateLengthFacetWhtsp) xmlSchemaValidateLengthFacetWhtsp __attribute((alias("xmlSchemaValidateLengthFacetWhtsp__internal_alias"))); +#else +#ifndef xmlSchemaValidateLengthFacetWhtsp +extern __typeof (xmlSchemaValidateLengthFacetWhtsp) xmlSchemaValidateLengthFacetWhtsp__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaValidateLengthFacetWhtsp xmlSchemaValidateLengthFacetWhtsp__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemastypes +#undef xmlSchemaValidateListSimpleTypeFacet +extern __typeof (xmlSchemaValidateListSimpleTypeFacet) xmlSchemaValidateListSimpleTypeFacet __attribute((alias("xmlSchemaValidateListSimpleTypeFacet__internal_alias"))); +#else +#ifndef xmlSchemaValidateListSimpleTypeFacet +extern __typeof (xmlSchemaValidateListSimpleTypeFacet) xmlSchemaValidateListSimpleTypeFacet__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaValidateListSimpleTypeFacet xmlSchemaValidateListSimpleTypeFacet__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemas +#undef xmlSchemaValidateOneElement +extern __typeof (xmlSchemaValidateOneElement) xmlSchemaValidateOneElement __attribute((alias("xmlSchemaValidateOneElement__internal_alias"))); +#else +#ifndef xmlSchemaValidateOneElement +extern __typeof (xmlSchemaValidateOneElement) xmlSchemaValidateOneElement__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaValidateOneElement xmlSchemaValidateOneElement__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemastypes +#undef xmlSchemaValidatePredefinedType +extern __typeof (xmlSchemaValidatePredefinedType) xmlSchemaValidatePredefinedType __attribute((alias("xmlSchemaValidatePredefinedType__internal_alias"))); +#else +#ifndef xmlSchemaValidatePredefinedType +extern __typeof (xmlSchemaValidatePredefinedType) xmlSchemaValidatePredefinedType__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaValidatePredefinedType xmlSchemaValidatePredefinedType__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemas +#undef xmlSchemaValidateSetFilename +extern __typeof (xmlSchemaValidateSetFilename) xmlSchemaValidateSetFilename __attribute((alias("xmlSchemaValidateSetFilename__internal_alias"))); +#else +#ifndef xmlSchemaValidateSetFilename +extern __typeof (xmlSchemaValidateSetFilename) xmlSchemaValidateSetFilename__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaValidateSetFilename xmlSchemaValidateSetFilename__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemas +#undef xmlSchemaValidateSetLocator +extern __typeof (xmlSchemaValidateSetLocator) xmlSchemaValidateSetLocator __attribute((alias("xmlSchemaValidateSetLocator__internal_alias"))); +#else +#ifndef xmlSchemaValidateSetLocator +extern __typeof (xmlSchemaValidateSetLocator) xmlSchemaValidateSetLocator__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaValidateSetLocator xmlSchemaValidateSetLocator__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemas +#undef xmlSchemaValidateStream +extern __typeof (xmlSchemaValidateStream) xmlSchemaValidateStream __attribute((alias("xmlSchemaValidateStream__internal_alias"))); +#else +#ifndef xmlSchemaValidateStream +extern __typeof (xmlSchemaValidateStream) xmlSchemaValidateStream__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaValidateStream xmlSchemaValidateStream__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemastypes +#undef xmlSchemaValueAppend +extern __typeof (xmlSchemaValueAppend) xmlSchemaValueAppend __attribute((alias("xmlSchemaValueAppend__internal_alias"))); +#else +#ifndef xmlSchemaValueAppend +extern __typeof (xmlSchemaValueAppend) xmlSchemaValueAppend__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaValueAppend xmlSchemaValueAppend__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemastypes +#undef xmlSchemaValueGetAsBoolean +extern __typeof (xmlSchemaValueGetAsBoolean) xmlSchemaValueGetAsBoolean __attribute((alias("xmlSchemaValueGetAsBoolean__internal_alias"))); +#else +#ifndef xmlSchemaValueGetAsBoolean +extern __typeof (xmlSchemaValueGetAsBoolean) xmlSchemaValueGetAsBoolean__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaValueGetAsBoolean xmlSchemaValueGetAsBoolean__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemastypes +#undef xmlSchemaValueGetAsString +extern __typeof (xmlSchemaValueGetAsString) xmlSchemaValueGetAsString __attribute((alias("xmlSchemaValueGetAsString__internal_alias"))); +#else +#ifndef xmlSchemaValueGetAsString +extern __typeof (xmlSchemaValueGetAsString) xmlSchemaValueGetAsString__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaValueGetAsString xmlSchemaValueGetAsString__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemastypes +#undef xmlSchemaValueGetNext +extern __typeof (xmlSchemaValueGetNext) xmlSchemaValueGetNext __attribute((alias("xmlSchemaValueGetNext__internal_alias"))); +#else +#ifndef xmlSchemaValueGetNext +extern __typeof (xmlSchemaValueGetNext) xmlSchemaValueGetNext__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaValueGetNext xmlSchemaValueGetNext__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlschemastypes +#undef xmlSchemaWhiteSpaceReplace +extern __typeof (xmlSchemaWhiteSpaceReplace) xmlSchemaWhiteSpaceReplace __attribute((alias("xmlSchemaWhiteSpaceReplace__internal_alias"))); +#else +#ifndef xmlSchemaWhiteSpaceReplace +extern __typeof (xmlSchemaWhiteSpaceReplace) xmlSchemaWhiteSpaceReplace__internal_alias __attribute((visibility("hidden"))); +#define xmlSchemaWhiteSpaceReplace xmlSchemaWhiteSpaceReplace__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMATRON_ENABLED) +#ifdef bottom_schematron +#undef xmlSchematronFree +extern __typeof (xmlSchematronFree) xmlSchematronFree __attribute((alias("xmlSchematronFree__internal_alias"))); +#else +#ifndef xmlSchematronFree +extern __typeof (xmlSchematronFree) xmlSchematronFree__internal_alias __attribute((visibility("hidden"))); +#define xmlSchematronFree xmlSchematronFree__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMATRON_ENABLED) +#ifdef bottom_schematron +#undef xmlSchematronFreeParserCtxt +extern __typeof (xmlSchematronFreeParserCtxt) xmlSchematronFreeParserCtxt __attribute((alias("xmlSchematronFreeParserCtxt__internal_alias"))); +#else +#ifndef xmlSchematronFreeParserCtxt +extern __typeof (xmlSchematronFreeParserCtxt) xmlSchematronFreeParserCtxt__internal_alias __attribute((visibility("hidden"))); +#define xmlSchematronFreeParserCtxt xmlSchematronFreeParserCtxt__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMATRON_ENABLED) +#ifdef bottom_schematron +#undef xmlSchematronFreeValidCtxt +extern __typeof (xmlSchematronFreeValidCtxt) xmlSchematronFreeValidCtxt __attribute((alias("xmlSchematronFreeValidCtxt__internal_alias"))); +#else +#ifndef xmlSchematronFreeValidCtxt +extern __typeof (xmlSchematronFreeValidCtxt) xmlSchematronFreeValidCtxt__internal_alias __attribute((visibility("hidden"))); +#define xmlSchematronFreeValidCtxt xmlSchematronFreeValidCtxt__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMATRON_ENABLED) +#ifdef bottom_schematron +#undef xmlSchematronNewDocParserCtxt +extern __typeof (xmlSchematronNewDocParserCtxt) xmlSchematronNewDocParserCtxt __attribute((alias("xmlSchematronNewDocParserCtxt__internal_alias"))); +#else +#ifndef xmlSchematronNewDocParserCtxt +extern __typeof (xmlSchematronNewDocParserCtxt) xmlSchematronNewDocParserCtxt__internal_alias __attribute((visibility("hidden"))); +#define xmlSchematronNewDocParserCtxt xmlSchematronNewDocParserCtxt__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMATRON_ENABLED) +#ifdef bottom_schematron +#undef xmlSchematronNewMemParserCtxt +extern __typeof (xmlSchematronNewMemParserCtxt) xmlSchematronNewMemParserCtxt __attribute((alias("xmlSchematronNewMemParserCtxt__internal_alias"))); +#else +#ifndef xmlSchematronNewMemParserCtxt +extern __typeof (xmlSchematronNewMemParserCtxt) xmlSchematronNewMemParserCtxt__internal_alias __attribute((visibility("hidden"))); +#define xmlSchematronNewMemParserCtxt xmlSchematronNewMemParserCtxt__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMATRON_ENABLED) +#ifdef bottom_schematron +#undef xmlSchematronNewParserCtxt +extern __typeof (xmlSchematronNewParserCtxt) xmlSchematronNewParserCtxt __attribute((alias("xmlSchematronNewParserCtxt__internal_alias"))); +#else +#ifndef xmlSchematronNewParserCtxt +extern __typeof (xmlSchematronNewParserCtxt) xmlSchematronNewParserCtxt__internal_alias __attribute((visibility("hidden"))); +#define xmlSchematronNewParserCtxt xmlSchematronNewParserCtxt__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMATRON_ENABLED) +#ifdef bottom_schematron +#undef xmlSchematronNewValidCtxt +extern __typeof (xmlSchematronNewValidCtxt) xmlSchematronNewValidCtxt __attribute((alias("xmlSchematronNewValidCtxt__internal_alias"))); +#else +#ifndef xmlSchematronNewValidCtxt +extern __typeof (xmlSchematronNewValidCtxt) xmlSchematronNewValidCtxt__internal_alias __attribute((visibility("hidden"))); +#define xmlSchematronNewValidCtxt xmlSchematronNewValidCtxt__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMATRON_ENABLED) +#ifdef bottom_schematron +#undef xmlSchematronParse +extern __typeof (xmlSchematronParse) xmlSchematronParse __attribute((alias("xmlSchematronParse__internal_alias"))); +#else +#ifndef xmlSchematronParse +extern __typeof (xmlSchematronParse) xmlSchematronParse__internal_alias __attribute((visibility("hidden"))); +#define xmlSchematronParse xmlSchematronParse__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMATRON_ENABLED) +#ifdef bottom_schematron +#undef xmlSchematronSetValidStructuredErrors +extern __typeof (xmlSchematronSetValidStructuredErrors) xmlSchematronSetValidStructuredErrors __attribute((alias("xmlSchematronSetValidStructuredErrors__internal_alias"))); +#else +#ifndef xmlSchematronSetValidStructuredErrors +extern __typeof (xmlSchematronSetValidStructuredErrors) xmlSchematronSetValidStructuredErrors__internal_alias __attribute((visibility("hidden"))); +#define xmlSchematronSetValidStructuredErrors xmlSchematronSetValidStructuredErrors__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_SCHEMATRON_ENABLED) +#ifdef bottom_schematron +#undef xmlSchematronValidateDoc +extern __typeof (xmlSchematronValidateDoc) xmlSchematronValidateDoc __attribute((alias("xmlSchematronValidateDoc__internal_alias"))); +#else +#ifndef xmlSchematronValidateDoc +extern __typeof (xmlSchematronValidateDoc) xmlSchematronValidateDoc__internal_alias __attribute((visibility("hidden"))); +#define xmlSchematronValidateDoc xmlSchematronValidateDoc__internal_alias +#endif +#endif +#endif + +#ifdef bottom_tree +#undef xmlSearchNs +extern __typeof (xmlSearchNs) xmlSearchNs __attribute((alias("xmlSearchNs__internal_alias"))); +#else +#ifndef xmlSearchNs +extern __typeof (xmlSearchNs) xmlSearchNs__internal_alias __attribute((visibility("hidden"))); +#define xmlSearchNs xmlSearchNs__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlSearchNsByHref +extern __typeof (xmlSearchNsByHref) xmlSearchNsByHref __attribute((alias("xmlSearchNsByHref__internal_alias"))); +#else +#ifndef xmlSearchNsByHref +extern __typeof (xmlSearchNsByHref) xmlSearchNsByHref__internal_alias __attribute((visibility("hidden"))); +#define xmlSearchNsByHref xmlSearchNsByHref__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlSetBufferAllocationScheme +extern __typeof (xmlSetBufferAllocationScheme) xmlSetBufferAllocationScheme __attribute((alias("xmlSetBufferAllocationScheme__internal_alias"))); +#else +#ifndef xmlSetBufferAllocationScheme +extern __typeof (xmlSetBufferAllocationScheme) xmlSetBufferAllocationScheme__internal_alias __attribute((visibility("hidden"))); +#define xmlSetBufferAllocationScheme xmlSetBufferAllocationScheme__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlSetCompressMode +extern __typeof (xmlSetCompressMode) xmlSetCompressMode __attribute((alias("xmlSetCompressMode__internal_alias"))); +#else +#ifndef xmlSetCompressMode +extern __typeof (xmlSetCompressMode) xmlSetCompressMode__internal_alias __attribute((visibility("hidden"))); +#define xmlSetCompressMode xmlSetCompressMode__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlSetDocCompressMode +extern __typeof (xmlSetDocCompressMode) xmlSetDocCompressMode __attribute((alias("xmlSetDocCompressMode__internal_alias"))); +#else +#ifndef xmlSetDocCompressMode +extern __typeof (xmlSetDocCompressMode) xmlSetDocCompressMode__internal_alias __attribute((visibility("hidden"))); +#define xmlSetDocCompressMode xmlSetDocCompressMode__internal_alias +#endif +#endif + +#if defined(LIBXML_LEGACY_ENABLED) +#ifdef bottom_parser +#undef xmlSetEntityReferenceFunc +extern __typeof (xmlSetEntityReferenceFunc) xmlSetEntityReferenceFunc __attribute((alias("xmlSetEntityReferenceFunc__internal_alias"))); +#else +#ifndef xmlSetEntityReferenceFunc +extern __typeof (xmlSetEntityReferenceFunc) xmlSetEntityReferenceFunc__internal_alias __attribute((visibility("hidden"))); +#define xmlSetEntityReferenceFunc xmlSetEntityReferenceFunc__internal_alias +#endif +#endif +#endif + +#ifdef bottom_xmlIO +#undef xmlSetExternalEntityLoader +extern __typeof (xmlSetExternalEntityLoader) xmlSetExternalEntityLoader __attribute((alias("xmlSetExternalEntityLoader__internal_alias"))); +#else +#ifndef xmlSetExternalEntityLoader +extern __typeof (xmlSetExternalEntityLoader) xmlSetExternalEntityLoader__internal_alias __attribute((visibility("hidden"))); +#define xmlSetExternalEntityLoader xmlSetExternalEntityLoader__internal_alias +#endif +#endif + +#if defined(LIBXML_LEGACY_ENABLED) +#ifdef bottom_legacy +#undef xmlSetFeature +extern __typeof (xmlSetFeature) xmlSetFeature __attribute((alias("xmlSetFeature__internal_alias"))); +#else +#ifndef xmlSetFeature +extern __typeof (xmlSetFeature) xmlSetFeature__internal_alias __attribute((visibility("hidden"))); +#define xmlSetFeature xmlSetFeature__internal_alias +#endif +#endif +#endif + +#ifdef bottom_error +#undef xmlSetGenericErrorFunc +extern __typeof (xmlSetGenericErrorFunc) xmlSetGenericErrorFunc __attribute((alias("xmlSetGenericErrorFunc__internal_alias"))); +#else +#ifndef xmlSetGenericErrorFunc +extern __typeof (xmlSetGenericErrorFunc) xmlSetGenericErrorFunc__internal_alias __attribute((visibility("hidden"))); +#define xmlSetGenericErrorFunc xmlSetGenericErrorFunc__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlSetListDoc +extern __typeof (xmlSetListDoc) xmlSetListDoc __attribute((alias("xmlSetListDoc__internal_alias"))); +#else +#ifndef xmlSetListDoc +extern __typeof (xmlSetListDoc) xmlSetListDoc__internal_alias __attribute((visibility("hidden"))); +#define xmlSetListDoc xmlSetListDoc__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlSetNs +extern __typeof (xmlSetNs) xmlSetNs __attribute((alias("xmlSetNs__internal_alias"))); +#else +#ifndef xmlSetNs +extern __typeof (xmlSetNs) xmlSetNs__internal_alias __attribute((visibility("hidden"))); +#define xmlSetNs xmlSetNs__internal_alias +#endif +#endif + +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_HTML_ENABLED) +#ifdef bottom_tree +#undef xmlSetNsProp +extern __typeof (xmlSetNsProp) xmlSetNsProp __attribute((alias("xmlSetNsProp__internal_alias"))); +#else +#ifndef xmlSetNsProp +extern __typeof (xmlSetNsProp) xmlSetNsProp__internal_alias __attribute((visibility("hidden"))); +#define xmlSetNsProp xmlSetNsProp__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_HTML_ENABLED) +#ifdef bottom_tree +#undef xmlSetProp +extern __typeof (xmlSetProp) xmlSetProp __attribute((alias("xmlSetProp__internal_alias"))); +#else +#ifndef xmlSetProp +extern __typeof (xmlSetProp) xmlSetProp__internal_alias __attribute((visibility("hidden"))); +#define xmlSetProp xmlSetProp__internal_alias +#endif +#endif +#endif + +#ifdef bottom_error +#undef xmlSetStructuredErrorFunc +extern __typeof (xmlSetStructuredErrorFunc) xmlSetStructuredErrorFunc __attribute((alias("xmlSetStructuredErrorFunc__internal_alias"))); +#else +#ifndef xmlSetStructuredErrorFunc +extern __typeof (xmlSetStructuredErrorFunc) xmlSetStructuredErrorFunc__internal_alias __attribute((visibility("hidden"))); +#define xmlSetStructuredErrorFunc xmlSetStructuredErrorFunc__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlSetTreeDoc +extern __typeof (xmlSetTreeDoc) xmlSetTreeDoc __attribute((alias("xmlSetTreeDoc__internal_alias"))); +#else +#ifndef xmlSetTreeDoc +extern __typeof (xmlSetTreeDoc) xmlSetTreeDoc__internal_alias __attribute((visibility("hidden"))); +#define xmlSetTreeDoc xmlSetTreeDoc__internal_alias +#endif +#endif + +#if defined(LIBXML_SAX1_ENABLED) +#ifdef bottom_parser +#undef xmlSetupParserForBuffer +extern __typeof (xmlSetupParserForBuffer) xmlSetupParserForBuffer __attribute((alias("xmlSetupParserForBuffer__internal_alias"))); +#else +#ifndef xmlSetupParserForBuffer +extern __typeof (xmlSetupParserForBuffer) xmlSetupParserForBuffer__internal_alias __attribute((visibility("hidden"))); +#define xmlSetupParserForBuffer xmlSetupParserForBuffer__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_debugXML +#undef xmlShell +extern __typeof (xmlShell) xmlShell __attribute((alias("xmlShell__internal_alias"))); +#else +#ifndef xmlShell +extern __typeof (xmlShell) xmlShell__internal_alias __attribute((visibility("hidden"))); +#define xmlShell xmlShell__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_debugXML +#undef xmlShellBase +extern __typeof (xmlShellBase) xmlShellBase __attribute((alias("xmlShellBase__internal_alias"))); +#else +#ifndef xmlShellBase +extern __typeof (xmlShellBase) xmlShellBase__internal_alias __attribute((visibility("hidden"))); +#define xmlShellBase xmlShellBase__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_debugXML +#undef xmlShellCat +extern __typeof (xmlShellCat) xmlShellCat __attribute((alias("xmlShellCat__internal_alias"))); +#else +#ifndef xmlShellCat +extern __typeof (xmlShellCat) xmlShellCat__internal_alias __attribute((visibility("hidden"))); +#define xmlShellCat xmlShellCat__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_debugXML +#undef xmlShellDir +extern __typeof (xmlShellDir) xmlShellDir __attribute((alias("xmlShellDir__internal_alias"))); +#else +#ifndef xmlShellDir +extern __typeof (xmlShellDir) xmlShellDir__internal_alias __attribute((visibility("hidden"))); +#define xmlShellDir xmlShellDir__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_debugXML +#undef xmlShellDu +extern __typeof (xmlShellDu) xmlShellDu __attribute((alias("xmlShellDu__internal_alias"))); +#else +#ifndef xmlShellDu +extern __typeof (xmlShellDu) xmlShellDu__internal_alias __attribute((visibility("hidden"))); +#define xmlShellDu xmlShellDu__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_debugXML +#undef xmlShellList +extern __typeof (xmlShellList) xmlShellList __attribute((alias("xmlShellList__internal_alias"))); +#else +#ifndef xmlShellList +extern __typeof (xmlShellList) xmlShellList__internal_alias __attribute((visibility("hidden"))); +#define xmlShellList xmlShellList__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_debugXML +#undef xmlShellLoad +extern __typeof (xmlShellLoad) xmlShellLoad __attribute((alias("xmlShellLoad__internal_alias"))); +#else +#ifndef xmlShellLoad +extern __typeof (xmlShellLoad) xmlShellLoad__internal_alias __attribute((visibility("hidden"))); +#define xmlShellLoad xmlShellLoad__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_debugXML +#undef xmlShellPrintNode +extern __typeof (xmlShellPrintNode) xmlShellPrintNode __attribute((alias("xmlShellPrintNode__internal_alias"))); +#else +#ifndef xmlShellPrintNode +extern __typeof (xmlShellPrintNode) xmlShellPrintNode__internal_alias __attribute((visibility("hidden"))); +#define xmlShellPrintNode xmlShellPrintNode__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_debugXML +#undef xmlShellPrintXPathError +extern __typeof (xmlShellPrintXPathError) xmlShellPrintXPathError __attribute((alias("xmlShellPrintXPathError__internal_alias"))); +#else +#ifndef xmlShellPrintXPathError +extern __typeof (xmlShellPrintXPathError) xmlShellPrintXPathError__internal_alias __attribute((visibility("hidden"))); +#define xmlShellPrintXPathError xmlShellPrintXPathError__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_debugXML +#undef xmlShellPrintXPathResult +extern __typeof (xmlShellPrintXPathResult) xmlShellPrintXPathResult __attribute((alias("xmlShellPrintXPathResult__internal_alias"))); +#else +#ifndef xmlShellPrintXPathResult +extern __typeof (xmlShellPrintXPathResult) xmlShellPrintXPathResult__internal_alias __attribute((visibility("hidden"))); +#define xmlShellPrintXPathResult xmlShellPrintXPathResult__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_debugXML +#undef xmlShellPwd +extern __typeof (xmlShellPwd) xmlShellPwd __attribute((alias("xmlShellPwd__internal_alias"))); +#else +#ifndef xmlShellPwd +extern __typeof (xmlShellPwd) xmlShellPwd__internal_alias __attribute((visibility("hidden"))); +#define xmlShellPwd xmlShellPwd__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_debugXML +#undef xmlShellSave +extern __typeof (xmlShellSave) xmlShellSave __attribute((alias("xmlShellSave__internal_alias"))); +#else +#ifndef xmlShellSave +extern __typeof (xmlShellSave) xmlShellSave__internal_alias __attribute((visibility("hidden"))); +#define xmlShellSave xmlShellSave__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED) && defined(LIBXML_VALID_ENABLED) +#ifdef bottom_debugXML +#undef xmlShellValidate +extern __typeof (xmlShellValidate) xmlShellValidate __attribute((alias("xmlShellValidate__internal_alias"))); +#else +#ifndef xmlShellValidate +extern __typeof (xmlShellValidate) xmlShellValidate__internal_alias __attribute((visibility("hidden"))); +#define xmlShellValidate xmlShellValidate__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_debugXML +#undef xmlShellWrite +extern __typeof (xmlShellWrite) xmlShellWrite __attribute((alias("xmlShellWrite__internal_alias"))); +#else +#ifndef xmlShellWrite +extern __typeof (xmlShellWrite) xmlShellWrite__internal_alias __attribute((visibility("hidden"))); +#define xmlShellWrite xmlShellWrite__internal_alias +#endif +#endif +#endif + +#ifdef bottom_parser +#undef xmlSkipBlankChars +extern __typeof (xmlSkipBlankChars) xmlSkipBlankChars __attribute((alias("xmlSkipBlankChars__internal_alias"))); +#else +#ifndef xmlSkipBlankChars +extern __typeof (xmlSkipBlankChars) xmlSkipBlankChars__internal_alias __attribute((visibility("hidden"))); +#define xmlSkipBlankChars xmlSkipBlankChars__internal_alias +#endif +#endif + +#ifdef bottom_valid +#undef xmlSnprintfElementContent +extern __typeof (xmlSnprintfElementContent) xmlSnprintfElementContent __attribute((alias("xmlSnprintfElementContent__internal_alias"))); +#else +#ifndef xmlSnprintfElementContent +extern __typeof (xmlSnprintfElementContent) xmlSnprintfElementContent__internal_alias __attribute((visibility("hidden"))); +#define xmlSnprintfElementContent xmlSnprintfElementContent__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef xmlSplitQName +extern __typeof (xmlSplitQName) xmlSplitQName __attribute((alias("xmlSplitQName__internal_alias"))); +#else +#ifndef xmlSplitQName +extern __typeof (xmlSplitQName) xmlSplitQName__internal_alias __attribute((visibility("hidden"))); +#define xmlSplitQName xmlSplitQName__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlSplitQName2 +extern __typeof (xmlSplitQName2) xmlSplitQName2 __attribute((alias("xmlSplitQName2__internal_alias"))); +#else +#ifndef xmlSplitQName2 +extern __typeof (xmlSplitQName2) xmlSplitQName2__internal_alias __attribute((visibility("hidden"))); +#define xmlSplitQName2 xmlSplitQName2__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlSplitQName3 +extern __typeof (xmlSplitQName3) xmlSplitQName3 __attribute((alias("xmlSplitQName3__internal_alias"))); +#else +#ifndef xmlSplitQName3 +extern __typeof (xmlSplitQName3) xmlSplitQName3__internal_alias __attribute((visibility("hidden"))); +#define xmlSplitQName3 xmlSplitQName3__internal_alias +#endif +#endif + +#if defined(LIBXML_OUTPUT_ENABLED) +#ifdef bottom_valid +#undef xmlSprintfElementContent +extern __typeof (xmlSprintfElementContent) xmlSprintfElementContent __attribute((alias("xmlSprintfElementContent__internal_alias"))); +#else +#ifndef xmlSprintfElementContent +extern __typeof (xmlSprintfElementContent) xmlSprintfElementContent__internal_alias __attribute((visibility("hidden"))); +#define xmlSprintfElementContent xmlSprintfElementContent__internal_alias +#endif +#endif +#endif + +#ifdef bottom_parser +#undef xmlStopParser +extern __typeof (xmlStopParser) xmlStopParser __attribute((alias("xmlStopParser__internal_alias"))); +#else +#ifndef xmlStopParser +extern __typeof (xmlStopParser) xmlStopParser__internal_alias __attribute((visibility("hidden"))); +#define xmlStopParser xmlStopParser__internal_alias +#endif +#endif + +#ifdef bottom_xmlstring +#undef xmlStrEqual +extern __typeof (xmlStrEqual) xmlStrEqual __attribute((alias("xmlStrEqual__internal_alias"))); +#else +#ifndef xmlStrEqual +extern __typeof (xmlStrEqual) xmlStrEqual__internal_alias __attribute((visibility("hidden"))); +#define xmlStrEqual xmlStrEqual__internal_alias +#endif +#endif + +#ifdef bottom_xmlstring +#undef xmlStrPrintf +extern __typeof (xmlStrPrintf) xmlStrPrintf __attribute((alias("xmlStrPrintf__internal_alias"))); +#else +#ifndef xmlStrPrintf +extern __typeof (xmlStrPrintf) xmlStrPrintf__internal_alias __attribute((visibility("hidden"))); +#define xmlStrPrintf xmlStrPrintf__internal_alias +#endif +#endif + +#ifdef bottom_xmlstring +#undef xmlStrQEqual +extern __typeof (xmlStrQEqual) xmlStrQEqual __attribute((alias("xmlStrQEqual__internal_alias"))); +#else +#ifndef xmlStrQEqual +extern __typeof (xmlStrQEqual) xmlStrQEqual__internal_alias __attribute((visibility("hidden"))); +#define xmlStrQEqual xmlStrQEqual__internal_alias +#endif +#endif + +#ifdef bottom_xmlstring +#undef xmlStrVPrintf +extern __typeof (xmlStrVPrintf) xmlStrVPrintf __attribute((alias("xmlStrVPrintf__internal_alias"))); +#else +#ifndef xmlStrVPrintf +extern __typeof (xmlStrVPrintf) xmlStrVPrintf__internal_alias __attribute((visibility("hidden"))); +#define xmlStrVPrintf xmlStrVPrintf__internal_alias +#endif +#endif + +#ifdef bottom_xmlstring +#undef xmlStrcasecmp +extern __typeof (xmlStrcasecmp) xmlStrcasecmp __attribute((alias("xmlStrcasecmp__internal_alias"))); +#else +#ifndef xmlStrcasecmp +extern __typeof (xmlStrcasecmp) xmlStrcasecmp__internal_alias __attribute((visibility("hidden"))); +#define xmlStrcasecmp xmlStrcasecmp__internal_alias +#endif +#endif + +#ifdef bottom_xmlstring +#undef xmlStrcasestr +extern __typeof (xmlStrcasestr) xmlStrcasestr __attribute((alias("xmlStrcasestr__internal_alias"))); +#else +#ifndef xmlStrcasestr +extern __typeof (xmlStrcasestr) xmlStrcasestr__internal_alias __attribute((visibility("hidden"))); +#define xmlStrcasestr xmlStrcasestr__internal_alias +#endif +#endif + +#ifdef bottom_xmlstring +#undef xmlStrcat +extern __typeof (xmlStrcat) xmlStrcat __attribute((alias("xmlStrcat__internal_alias"))); +#else +#ifndef xmlStrcat +extern __typeof (xmlStrcat) xmlStrcat__internal_alias __attribute((visibility("hidden"))); +#define xmlStrcat xmlStrcat__internal_alias +#endif +#endif + +#ifdef bottom_xmlstring +#undef xmlStrchr +extern __typeof (xmlStrchr) xmlStrchr __attribute((alias("xmlStrchr__internal_alias"))); +#else +#ifndef xmlStrchr +extern __typeof (xmlStrchr) xmlStrchr__internal_alias __attribute((visibility("hidden"))); +#define xmlStrchr xmlStrchr__internal_alias +#endif +#endif + +#ifdef bottom_xmlstring +#undef xmlStrcmp +extern __typeof (xmlStrcmp) xmlStrcmp __attribute((alias("xmlStrcmp__internal_alias"))); +#else +#ifndef xmlStrcmp +extern __typeof (xmlStrcmp) xmlStrcmp__internal_alias __attribute((visibility("hidden"))); +#define xmlStrcmp xmlStrcmp__internal_alias +#endif +#endif + +#ifdef bottom_xmlstring +#undef xmlStrdup +extern __typeof (xmlStrdup) xmlStrdup __attribute((alias("xmlStrdup__internal_alias"))); +#else +#ifndef xmlStrdup +extern __typeof (xmlStrdup) xmlStrdup__internal_alias __attribute((visibility("hidden"))); +#define xmlStrdup xmlStrdup__internal_alias +#endif +#endif + +#if defined(LIBXML_PATTERN_ENABLED) +#ifdef bottom_pattern +#undef xmlStreamPop +extern __typeof (xmlStreamPop) xmlStreamPop __attribute((alias("xmlStreamPop__internal_alias"))); +#else +#ifndef xmlStreamPop +extern __typeof (xmlStreamPop) xmlStreamPop__internal_alias __attribute((visibility("hidden"))); +#define xmlStreamPop xmlStreamPop__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_PATTERN_ENABLED) +#ifdef bottom_pattern +#undef xmlStreamPush +extern __typeof (xmlStreamPush) xmlStreamPush __attribute((alias("xmlStreamPush__internal_alias"))); +#else +#ifndef xmlStreamPush +extern __typeof (xmlStreamPush) xmlStreamPush__internal_alias __attribute((visibility("hidden"))); +#define xmlStreamPush xmlStreamPush__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_PATTERN_ENABLED) +#ifdef bottom_pattern +#undef xmlStreamPushAttr +extern __typeof (xmlStreamPushAttr) xmlStreamPushAttr __attribute((alias("xmlStreamPushAttr__internal_alias"))); +#else +#ifndef xmlStreamPushAttr +extern __typeof (xmlStreamPushAttr) xmlStreamPushAttr__internal_alias __attribute((visibility("hidden"))); +#define xmlStreamPushAttr xmlStreamPushAttr__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_PATTERN_ENABLED) +#ifdef bottom_pattern +#undef xmlStreamPushNode +extern __typeof (xmlStreamPushNode) xmlStreamPushNode __attribute((alias("xmlStreamPushNode__internal_alias"))); +#else +#ifndef xmlStreamPushNode +extern __typeof (xmlStreamPushNode) xmlStreamPushNode__internal_alias __attribute((visibility("hidden"))); +#define xmlStreamPushNode xmlStreamPushNode__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_PATTERN_ENABLED) +#ifdef bottom_pattern +#undef xmlStreamWantsAnyNode +extern __typeof (xmlStreamWantsAnyNode) xmlStreamWantsAnyNode __attribute((alias("xmlStreamWantsAnyNode__internal_alias"))); +#else +#ifndef xmlStreamWantsAnyNode +extern __typeof (xmlStreamWantsAnyNode) xmlStreamWantsAnyNode__internal_alias __attribute((visibility("hidden"))); +#define xmlStreamWantsAnyNode xmlStreamWantsAnyNode__internal_alias +#endif +#endif +#endif + +#ifdef bottom_parserInternals +#undef xmlStringCurrentChar +extern __typeof (xmlStringCurrentChar) xmlStringCurrentChar __attribute((alias("xmlStringCurrentChar__internal_alias"))); +#else +#ifndef xmlStringCurrentChar +extern __typeof (xmlStringCurrentChar) xmlStringCurrentChar__internal_alias __attribute((visibility("hidden"))); +#define xmlStringCurrentChar xmlStringCurrentChar__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef xmlStringDecodeEntities +extern __typeof (xmlStringDecodeEntities) xmlStringDecodeEntities __attribute((alias("xmlStringDecodeEntities__internal_alias"))); +#else +#ifndef xmlStringDecodeEntities +extern __typeof (xmlStringDecodeEntities) xmlStringDecodeEntities__internal_alias __attribute((visibility("hidden"))); +#define xmlStringDecodeEntities xmlStringDecodeEntities__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlStringGetNodeList +extern __typeof (xmlStringGetNodeList) xmlStringGetNodeList __attribute((alias("xmlStringGetNodeList__internal_alias"))); +#else +#ifndef xmlStringGetNodeList +extern __typeof (xmlStringGetNodeList) xmlStringGetNodeList__internal_alias __attribute((visibility("hidden"))); +#define xmlStringGetNodeList xmlStringGetNodeList__internal_alias +#endif +#endif + +#ifdef bottom_parser +#undef xmlStringLenDecodeEntities +extern __typeof (xmlStringLenDecodeEntities) xmlStringLenDecodeEntities __attribute((alias("xmlStringLenDecodeEntities__internal_alias"))); +#else +#ifndef xmlStringLenDecodeEntities +extern __typeof (xmlStringLenDecodeEntities) xmlStringLenDecodeEntities__internal_alias __attribute((visibility("hidden"))); +#define xmlStringLenDecodeEntities xmlStringLenDecodeEntities__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlStringLenGetNodeList +extern __typeof (xmlStringLenGetNodeList) xmlStringLenGetNodeList __attribute((alias("xmlStringLenGetNodeList__internal_alias"))); +#else +#ifndef xmlStringLenGetNodeList +extern __typeof (xmlStringLenGetNodeList) xmlStringLenGetNodeList__internal_alias __attribute((visibility("hidden"))); +#define xmlStringLenGetNodeList xmlStringLenGetNodeList__internal_alias +#endif +#endif + +#ifdef bottom_xmlstring +#undef xmlStrlen +extern __typeof (xmlStrlen) xmlStrlen __attribute((alias("xmlStrlen__internal_alias"))); +#else +#ifndef xmlStrlen +extern __typeof (xmlStrlen) xmlStrlen__internal_alias __attribute((visibility("hidden"))); +#define xmlStrlen xmlStrlen__internal_alias +#endif +#endif + +#ifdef bottom_xmlstring +#undef xmlStrncasecmp +extern __typeof (xmlStrncasecmp) xmlStrncasecmp __attribute((alias("xmlStrncasecmp__internal_alias"))); +#else +#ifndef xmlStrncasecmp +extern __typeof (xmlStrncasecmp) xmlStrncasecmp__internal_alias __attribute((visibility("hidden"))); +#define xmlStrncasecmp xmlStrncasecmp__internal_alias +#endif +#endif + +#ifdef bottom_xmlstring +#undef xmlStrncat +extern __typeof (xmlStrncat) xmlStrncat __attribute((alias("xmlStrncat__internal_alias"))); +#else +#ifndef xmlStrncat +extern __typeof (xmlStrncat) xmlStrncat__internal_alias __attribute((visibility("hidden"))); +#define xmlStrncat xmlStrncat__internal_alias +#endif +#endif + +#ifdef bottom_xmlstring +#undef xmlStrncatNew +extern __typeof (xmlStrncatNew) xmlStrncatNew __attribute((alias("xmlStrncatNew__internal_alias"))); +#else +#ifndef xmlStrncatNew +extern __typeof (xmlStrncatNew) xmlStrncatNew__internal_alias __attribute((visibility("hidden"))); +#define xmlStrncatNew xmlStrncatNew__internal_alias +#endif +#endif + +#ifdef bottom_xmlstring +#undef xmlStrncmp +extern __typeof (xmlStrncmp) xmlStrncmp __attribute((alias("xmlStrncmp__internal_alias"))); +#else +#ifndef xmlStrncmp +extern __typeof (xmlStrncmp) xmlStrncmp__internal_alias __attribute((visibility("hidden"))); +#define xmlStrncmp xmlStrncmp__internal_alias +#endif +#endif + +#ifdef bottom_xmlstring +#undef xmlStrndup +extern __typeof (xmlStrndup) xmlStrndup __attribute((alias("xmlStrndup__internal_alias"))); +#else +#ifndef xmlStrndup +extern __typeof (xmlStrndup) xmlStrndup__internal_alias __attribute((visibility("hidden"))); +#define xmlStrndup xmlStrndup__internal_alias +#endif +#endif + +#ifdef bottom_xmlstring +#undef xmlStrstr +extern __typeof (xmlStrstr) xmlStrstr __attribute((alias("xmlStrstr__internal_alias"))); +#else +#ifndef xmlStrstr +extern __typeof (xmlStrstr) xmlStrstr__internal_alias __attribute((visibility("hidden"))); +#define xmlStrstr xmlStrstr__internal_alias +#endif +#endif + +#ifdef bottom_xmlstring +#undef xmlStrsub +extern __typeof (xmlStrsub) xmlStrsub __attribute((alias("xmlStrsub__internal_alias"))); +#else +#ifndef xmlStrsub +extern __typeof (xmlStrsub) xmlStrsub__internal_alias __attribute((visibility("hidden"))); +#define xmlStrsub xmlStrsub__internal_alias +#endif +#endif + +#ifdef bottom_parserInternals +#undef xmlSubstituteEntitiesDefault +extern __typeof (xmlSubstituteEntitiesDefault) xmlSubstituteEntitiesDefault __attribute((alias("xmlSubstituteEntitiesDefault__internal_alias"))); +#else +#ifndef xmlSubstituteEntitiesDefault +extern __typeof (xmlSubstituteEntitiesDefault) xmlSubstituteEntitiesDefault__internal_alias __attribute((visibility("hidden"))); +#define xmlSubstituteEntitiesDefault xmlSubstituteEntitiesDefault__internal_alias +#endif +#endif + +#ifdef bottom_parserInternals +#undef xmlSwitchEncoding +extern __typeof (xmlSwitchEncoding) xmlSwitchEncoding __attribute((alias("xmlSwitchEncoding__internal_alias"))); +#else +#ifndef xmlSwitchEncoding +extern __typeof (xmlSwitchEncoding) xmlSwitchEncoding__internal_alias __attribute((visibility("hidden"))); +#define xmlSwitchEncoding xmlSwitchEncoding__internal_alias +#endif +#endif + +#ifdef bottom_parserInternals +#undef xmlSwitchInputEncoding +extern __typeof (xmlSwitchInputEncoding) xmlSwitchInputEncoding __attribute((alias("xmlSwitchInputEncoding__internal_alias"))); +#else +#ifndef xmlSwitchInputEncoding +extern __typeof (xmlSwitchInputEncoding) xmlSwitchInputEncoding__internal_alias __attribute((visibility("hidden"))); +#define xmlSwitchInputEncoding xmlSwitchInputEncoding__internal_alias +#endif +#endif + +#ifdef bottom_parserInternals +#undef xmlSwitchToEncoding +extern __typeof (xmlSwitchToEncoding) xmlSwitchToEncoding __attribute((alias("xmlSwitchToEncoding__internal_alias"))); +#else +#ifndef xmlSwitchToEncoding +extern __typeof (xmlSwitchToEncoding) xmlSwitchToEncoding__internal_alias __attribute((visibility("hidden"))); +#define xmlSwitchToEncoding xmlSwitchToEncoding__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlTextConcat +extern __typeof (xmlTextConcat) xmlTextConcat __attribute((alias("xmlTextConcat__internal_alias"))); +#else +#ifndef xmlTextConcat +extern __typeof (xmlTextConcat) xmlTextConcat__internal_alias __attribute((visibility("hidden"))); +#define xmlTextConcat xmlTextConcat__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlTextMerge +extern __typeof (xmlTextMerge) xmlTextMerge __attribute((alias("xmlTextMerge__internal_alias"))); +#else +#ifndef xmlTextMerge +extern __typeof (xmlTextMerge) xmlTextMerge__internal_alias __attribute((visibility("hidden"))); +#define xmlTextMerge xmlTextMerge__internal_alias +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderAttributeCount +extern __typeof (xmlTextReaderAttributeCount) xmlTextReaderAttributeCount __attribute((alias("xmlTextReaderAttributeCount__internal_alias"))); +#else +#ifndef xmlTextReaderAttributeCount +extern __typeof (xmlTextReaderAttributeCount) xmlTextReaderAttributeCount__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderAttributeCount xmlTextReaderAttributeCount__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderBaseUri +extern __typeof (xmlTextReaderBaseUri) xmlTextReaderBaseUri __attribute((alias("xmlTextReaderBaseUri__internal_alias"))); +#else +#ifndef xmlTextReaderBaseUri +extern __typeof (xmlTextReaderBaseUri) xmlTextReaderBaseUri__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderBaseUri xmlTextReaderBaseUri__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderByteConsumed +extern __typeof (xmlTextReaderByteConsumed) xmlTextReaderByteConsumed __attribute((alias("xmlTextReaderByteConsumed__internal_alias"))); +#else +#ifndef xmlTextReaderByteConsumed +extern __typeof (xmlTextReaderByteConsumed) xmlTextReaderByteConsumed__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderByteConsumed xmlTextReaderByteConsumed__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderClose +extern __typeof (xmlTextReaderClose) xmlTextReaderClose __attribute((alias("xmlTextReaderClose__internal_alias"))); +#else +#ifndef xmlTextReaderClose +extern __typeof (xmlTextReaderClose) xmlTextReaderClose__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderClose xmlTextReaderClose__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderConstBaseUri +extern __typeof (xmlTextReaderConstBaseUri) xmlTextReaderConstBaseUri __attribute((alias("xmlTextReaderConstBaseUri__internal_alias"))); +#else +#ifndef xmlTextReaderConstBaseUri +extern __typeof (xmlTextReaderConstBaseUri) xmlTextReaderConstBaseUri__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderConstBaseUri xmlTextReaderConstBaseUri__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderConstEncoding +extern __typeof (xmlTextReaderConstEncoding) xmlTextReaderConstEncoding __attribute((alias("xmlTextReaderConstEncoding__internal_alias"))); +#else +#ifndef xmlTextReaderConstEncoding +extern __typeof (xmlTextReaderConstEncoding) xmlTextReaderConstEncoding__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderConstEncoding xmlTextReaderConstEncoding__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderConstLocalName +extern __typeof (xmlTextReaderConstLocalName) xmlTextReaderConstLocalName __attribute((alias("xmlTextReaderConstLocalName__internal_alias"))); +#else +#ifndef xmlTextReaderConstLocalName +extern __typeof (xmlTextReaderConstLocalName) xmlTextReaderConstLocalName__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderConstLocalName xmlTextReaderConstLocalName__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderConstName +extern __typeof (xmlTextReaderConstName) xmlTextReaderConstName __attribute((alias("xmlTextReaderConstName__internal_alias"))); +#else +#ifndef xmlTextReaderConstName +extern __typeof (xmlTextReaderConstName) xmlTextReaderConstName__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderConstName xmlTextReaderConstName__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderConstNamespaceUri +extern __typeof (xmlTextReaderConstNamespaceUri) xmlTextReaderConstNamespaceUri __attribute((alias("xmlTextReaderConstNamespaceUri__internal_alias"))); +#else +#ifndef xmlTextReaderConstNamespaceUri +extern __typeof (xmlTextReaderConstNamespaceUri) xmlTextReaderConstNamespaceUri__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderConstNamespaceUri xmlTextReaderConstNamespaceUri__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderConstPrefix +extern __typeof (xmlTextReaderConstPrefix) xmlTextReaderConstPrefix __attribute((alias("xmlTextReaderConstPrefix__internal_alias"))); +#else +#ifndef xmlTextReaderConstPrefix +extern __typeof (xmlTextReaderConstPrefix) xmlTextReaderConstPrefix__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderConstPrefix xmlTextReaderConstPrefix__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderConstString +extern __typeof (xmlTextReaderConstString) xmlTextReaderConstString __attribute((alias("xmlTextReaderConstString__internal_alias"))); +#else +#ifndef xmlTextReaderConstString +extern __typeof (xmlTextReaderConstString) xmlTextReaderConstString__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderConstString xmlTextReaderConstString__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderConstValue +extern __typeof (xmlTextReaderConstValue) xmlTextReaderConstValue __attribute((alias("xmlTextReaderConstValue__internal_alias"))); +#else +#ifndef xmlTextReaderConstValue +extern __typeof (xmlTextReaderConstValue) xmlTextReaderConstValue__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderConstValue xmlTextReaderConstValue__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderConstXmlLang +extern __typeof (xmlTextReaderConstXmlLang) xmlTextReaderConstXmlLang __attribute((alias("xmlTextReaderConstXmlLang__internal_alias"))); +#else +#ifndef xmlTextReaderConstXmlLang +extern __typeof (xmlTextReaderConstXmlLang) xmlTextReaderConstXmlLang__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderConstXmlLang xmlTextReaderConstXmlLang__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderConstXmlVersion +extern __typeof (xmlTextReaderConstXmlVersion) xmlTextReaderConstXmlVersion __attribute((alias("xmlTextReaderConstXmlVersion__internal_alias"))); +#else +#ifndef xmlTextReaderConstXmlVersion +extern __typeof (xmlTextReaderConstXmlVersion) xmlTextReaderConstXmlVersion__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderConstXmlVersion xmlTextReaderConstXmlVersion__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderCurrentDoc +extern __typeof (xmlTextReaderCurrentDoc) xmlTextReaderCurrentDoc __attribute((alias("xmlTextReaderCurrentDoc__internal_alias"))); +#else +#ifndef xmlTextReaderCurrentDoc +extern __typeof (xmlTextReaderCurrentDoc) xmlTextReaderCurrentDoc__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderCurrentDoc xmlTextReaderCurrentDoc__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderCurrentNode +extern __typeof (xmlTextReaderCurrentNode) xmlTextReaderCurrentNode __attribute((alias("xmlTextReaderCurrentNode__internal_alias"))); +#else +#ifndef xmlTextReaderCurrentNode +extern __typeof (xmlTextReaderCurrentNode) xmlTextReaderCurrentNode__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderCurrentNode xmlTextReaderCurrentNode__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderDepth +extern __typeof (xmlTextReaderDepth) xmlTextReaderDepth __attribute((alias("xmlTextReaderDepth__internal_alias"))); +#else +#ifndef xmlTextReaderDepth +extern __typeof (xmlTextReaderDepth) xmlTextReaderDepth__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderDepth xmlTextReaderDepth__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderExpand +extern __typeof (xmlTextReaderExpand) xmlTextReaderExpand __attribute((alias("xmlTextReaderExpand__internal_alias"))); +#else +#ifndef xmlTextReaderExpand +extern __typeof (xmlTextReaderExpand) xmlTextReaderExpand__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderExpand xmlTextReaderExpand__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderGetAttribute +extern __typeof (xmlTextReaderGetAttribute) xmlTextReaderGetAttribute __attribute((alias("xmlTextReaderGetAttribute__internal_alias"))); +#else +#ifndef xmlTextReaderGetAttribute +extern __typeof (xmlTextReaderGetAttribute) xmlTextReaderGetAttribute__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderGetAttribute xmlTextReaderGetAttribute__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderGetAttributeNo +extern __typeof (xmlTextReaderGetAttributeNo) xmlTextReaderGetAttributeNo __attribute((alias("xmlTextReaderGetAttributeNo__internal_alias"))); +#else +#ifndef xmlTextReaderGetAttributeNo +extern __typeof (xmlTextReaderGetAttributeNo) xmlTextReaderGetAttributeNo__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderGetAttributeNo xmlTextReaderGetAttributeNo__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderGetAttributeNs +extern __typeof (xmlTextReaderGetAttributeNs) xmlTextReaderGetAttributeNs __attribute((alias("xmlTextReaderGetAttributeNs__internal_alias"))); +#else +#ifndef xmlTextReaderGetAttributeNs +extern __typeof (xmlTextReaderGetAttributeNs) xmlTextReaderGetAttributeNs__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderGetAttributeNs xmlTextReaderGetAttributeNs__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderGetErrorHandler +extern __typeof (xmlTextReaderGetErrorHandler) xmlTextReaderGetErrorHandler __attribute((alias("xmlTextReaderGetErrorHandler__internal_alias"))); +#else +#ifndef xmlTextReaderGetErrorHandler +extern __typeof (xmlTextReaderGetErrorHandler) xmlTextReaderGetErrorHandler__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderGetErrorHandler xmlTextReaderGetErrorHandler__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderGetParserColumnNumber +extern __typeof (xmlTextReaderGetParserColumnNumber) xmlTextReaderGetParserColumnNumber __attribute((alias("xmlTextReaderGetParserColumnNumber__internal_alias"))); +#else +#ifndef xmlTextReaderGetParserColumnNumber +extern __typeof (xmlTextReaderGetParserColumnNumber) xmlTextReaderGetParserColumnNumber__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderGetParserColumnNumber xmlTextReaderGetParserColumnNumber__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderGetParserLineNumber +extern __typeof (xmlTextReaderGetParserLineNumber) xmlTextReaderGetParserLineNumber __attribute((alias("xmlTextReaderGetParserLineNumber__internal_alias"))); +#else +#ifndef xmlTextReaderGetParserLineNumber +extern __typeof (xmlTextReaderGetParserLineNumber) xmlTextReaderGetParserLineNumber__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderGetParserLineNumber xmlTextReaderGetParserLineNumber__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderGetParserProp +extern __typeof (xmlTextReaderGetParserProp) xmlTextReaderGetParserProp __attribute((alias("xmlTextReaderGetParserProp__internal_alias"))); +#else +#ifndef xmlTextReaderGetParserProp +extern __typeof (xmlTextReaderGetParserProp) xmlTextReaderGetParserProp__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderGetParserProp xmlTextReaderGetParserProp__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderGetRemainder +extern __typeof (xmlTextReaderGetRemainder) xmlTextReaderGetRemainder __attribute((alias("xmlTextReaderGetRemainder__internal_alias"))); +#else +#ifndef xmlTextReaderGetRemainder +extern __typeof (xmlTextReaderGetRemainder) xmlTextReaderGetRemainder__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderGetRemainder xmlTextReaderGetRemainder__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderHasAttributes +extern __typeof (xmlTextReaderHasAttributes) xmlTextReaderHasAttributes __attribute((alias("xmlTextReaderHasAttributes__internal_alias"))); +#else +#ifndef xmlTextReaderHasAttributes +extern __typeof (xmlTextReaderHasAttributes) xmlTextReaderHasAttributes__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderHasAttributes xmlTextReaderHasAttributes__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderHasValue +extern __typeof (xmlTextReaderHasValue) xmlTextReaderHasValue __attribute((alias("xmlTextReaderHasValue__internal_alias"))); +#else +#ifndef xmlTextReaderHasValue +extern __typeof (xmlTextReaderHasValue) xmlTextReaderHasValue__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderHasValue xmlTextReaderHasValue__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderIsDefault +extern __typeof (xmlTextReaderIsDefault) xmlTextReaderIsDefault __attribute((alias("xmlTextReaderIsDefault__internal_alias"))); +#else +#ifndef xmlTextReaderIsDefault +extern __typeof (xmlTextReaderIsDefault) xmlTextReaderIsDefault__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderIsDefault xmlTextReaderIsDefault__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderIsEmptyElement +extern __typeof (xmlTextReaderIsEmptyElement) xmlTextReaderIsEmptyElement __attribute((alias("xmlTextReaderIsEmptyElement__internal_alias"))); +#else +#ifndef xmlTextReaderIsEmptyElement +extern __typeof (xmlTextReaderIsEmptyElement) xmlTextReaderIsEmptyElement__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderIsEmptyElement xmlTextReaderIsEmptyElement__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderIsNamespaceDecl +extern __typeof (xmlTextReaderIsNamespaceDecl) xmlTextReaderIsNamespaceDecl __attribute((alias("xmlTextReaderIsNamespaceDecl__internal_alias"))); +#else +#ifndef xmlTextReaderIsNamespaceDecl +extern __typeof (xmlTextReaderIsNamespaceDecl) xmlTextReaderIsNamespaceDecl__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderIsNamespaceDecl xmlTextReaderIsNamespaceDecl__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderIsValid +extern __typeof (xmlTextReaderIsValid) xmlTextReaderIsValid __attribute((alias("xmlTextReaderIsValid__internal_alias"))); +#else +#ifndef xmlTextReaderIsValid +extern __typeof (xmlTextReaderIsValid) xmlTextReaderIsValid__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderIsValid xmlTextReaderIsValid__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderLocalName +extern __typeof (xmlTextReaderLocalName) xmlTextReaderLocalName __attribute((alias("xmlTextReaderLocalName__internal_alias"))); +#else +#ifndef xmlTextReaderLocalName +extern __typeof (xmlTextReaderLocalName) xmlTextReaderLocalName__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderLocalName xmlTextReaderLocalName__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderLocatorBaseURI +extern __typeof (xmlTextReaderLocatorBaseURI) xmlTextReaderLocatorBaseURI __attribute((alias("xmlTextReaderLocatorBaseURI__internal_alias"))); +#else +#ifndef xmlTextReaderLocatorBaseURI +extern __typeof (xmlTextReaderLocatorBaseURI) xmlTextReaderLocatorBaseURI__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderLocatorBaseURI xmlTextReaderLocatorBaseURI__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderLocatorLineNumber +extern __typeof (xmlTextReaderLocatorLineNumber) xmlTextReaderLocatorLineNumber __attribute((alias("xmlTextReaderLocatorLineNumber__internal_alias"))); +#else +#ifndef xmlTextReaderLocatorLineNumber +extern __typeof (xmlTextReaderLocatorLineNumber) xmlTextReaderLocatorLineNumber__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderLocatorLineNumber xmlTextReaderLocatorLineNumber__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderLookupNamespace +extern __typeof (xmlTextReaderLookupNamespace) xmlTextReaderLookupNamespace __attribute((alias("xmlTextReaderLookupNamespace__internal_alias"))); +#else +#ifndef xmlTextReaderLookupNamespace +extern __typeof (xmlTextReaderLookupNamespace) xmlTextReaderLookupNamespace__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderLookupNamespace xmlTextReaderLookupNamespace__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderMoveToAttribute +extern __typeof (xmlTextReaderMoveToAttribute) xmlTextReaderMoveToAttribute __attribute((alias("xmlTextReaderMoveToAttribute__internal_alias"))); +#else +#ifndef xmlTextReaderMoveToAttribute +extern __typeof (xmlTextReaderMoveToAttribute) xmlTextReaderMoveToAttribute__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderMoveToAttribute xmlTextReaderMoveToAttribute__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderMoveToAttributeNo +extern __typeof (xmlTextReaderMoveToAttributeNo) xmlTextReaderMoveToAttributeNo __attribute((alias("xmlTextReaderMoveToAttributeNo__internal_alias"))); +#else +#ifndef xmlTextReaderMoveToAttributeNo +extern __typeof (xmlTextReaderMoveToAttributeNo) xmlTextReaderMoveToAttributeNo__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderMoveToAttributeNo xmlTextReaderMoveToAttributeNo__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderMoveToAttributeNs +extern __typeof (xmlTextReaderMoveToAttributeNs) xmlTextReaderMoveToAttributeNs __attribute((alias("xmlTextReaderMoveToAttributeNs__internal_alias"))); +#else +#ifndef xmlTextReaderMoveToAttributeNs +extern __typeof (xmlTextReaderMoveToAttributeNs) xmlTextReaderMoveToAttributeNs__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderMoveToAttributeNs xmlTextReaderMoveToAttributeNs__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderMoveToElement +extern __typeof (xmlTextReaderMoveToElement) xmlTextReaderMoveToElement __attribute((alias("xmlTextReaderMoveToElement__internal_alias"))); +#else +#ifndef xmlTextReaderMoveToElement +extern __typeof (xmlTextReaderMoveToElement) xmlTextReaderMoveToElement__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderMoveToElement xmlTextReaderMoveToElement__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderMoveToFirstAttribute +extern __typeof (xmlTextReaderMoveToFirstAttribute) xmlTextReaderMoveToFirstAttribute __attribute((alias("xmlTextReaderMoveToFirstAttribute__internal_alias"))); +#else +#ifndef xmlTextReaderMoveToFirstAttribute +extern __typeof (xmlTextReaderMoveToFirstAttribute) xmlTextReaderMoveToFirstAttribute__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderMoveToFirstAttribute xmlTextReaderMoveToFirstAttribute__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderMoveToNextAttribute +extern __typeof (xmlTextReaderMoveToNextAttribute) xmlTextReaderMoveToNextAttribute __attribute((alias("xmlTextReaderMoveToNextAttribute__internal_alias"))); +#else +#ifndef xmlTextReaderMoveToNextAttribute +extern __typeof (xmlTextReaderMoveToNextAttribute) xmlTextReaderMoveToNextAttribute__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderMoveToNextAttribute xmlTextReaderMoveToNextAttribute__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderName +extern __typeof (xmlTextReaderName) xmlTextReaderName __attribute((alias("xmlTextReaderName__internal_alias"))); +#else +#ifndef xmlTextReaderName +extern __typeof (xmlTextReaderName) xmlTextReaderName__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderName xmlTextReaderName__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderNamespaceUri +extern __typeof (xmlTextReaderNamespaceUri) xmlTextReaderNamespaceUri __attribute((alias("xmlTextReaderNamespaceUri__internal_alias"))); +#else +#ifndef xmlTextReaderNamespaceUri +extern __typeof (xmlTextReaderNamespaceUri) xmlTextReaderNamespaceUri__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderNamespaceUri xmlTextReaderNamespaceUri__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderNext +extern __typeof (xmlTextReaderNext) xmlTextReaderNext __attribute((alias("xmlTextReaderNext__internal_alias"))); +#else +#ifndef xmlTextReaderNext +extern __typeof (xmlTextReaderNext) xmlTextReaderNext__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderNext xmlTextReaderNext__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderNextSibling +extern __typeof (xmlTextReaderNextSibling) xmlTextReaderNextSibling __attribute((alias("xmlTextReaderNextSibling__internal_alias"))); +#else +#ifndef xmlTextReaderNextSibling +extern __typeof (xmlTextReaderNextSibling) xmlTextReaderNextSibling__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderNextSibling xmlTextReaderNextSibling__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderNodeType +extern __typeof (xmlTextReaderNodeType) xmlTextReaderNodeType __attribute((alias("xmlTextReaderNodeType__internal_alias"))); +#else +#ifndef xmlTextReaderNodeType +extern __typeof (xmlTextReaderNodeType) xmlTextReaderNodeType__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderNodeType xmlTextReaderNodeType__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderNormalization +extern __typeof (xmlTextReaderNormalization) xmlTextReaderNormalization __attribute((alias("xmlTextReaderNormalization__internal_alias"))); +#else +#ifndef xmlTextReaderNormalization +extern __typeof (xmlTextReaderNormalization) xmlTextReaderNormalization__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderNormalization xmlTextReaderNormalization__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderPrefix +extern __typeof (xmlTextReaderPrefix) xmlTextReaderPrefix __attribute((alias("xmlTextReaderPrefix__internal_alias"))); +#else +#ifndef xmlTextReaderPrefix +extern __typeof (xmlTextReaderPrefix) xmlTextReaderPrefix__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderPrefix xmlTextReaderPrefix__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderPreserve +extern __typeof (xmlTextReaderPreserve) xmlTextReaderPreserve __attribute((alias("xmlTextReaderPreserve__internal_alias"))); +#else +#ifndef xmlTextReaderPreserve +extern __typeof (xmlTextReaderPreserve) xmlTextReaderPreserve__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderPreserve xmlTextReaderPreserve__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_PATTERN_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderPreservePattern +extern __typeof (xmlTextReaderPreservePattern) xmlTextReaderPreservePattern __attribute((alias("xmlTextReaderPreservePattern__internal_alias"))); +#else +#ifndef xmlTextReaderPreservePattern +extern __typeof (xmlTextReaderPreservePattern) xmlTextReaderPreservePattern__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderPreservePattern xmlTextReaderPreservePattern__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderQuoteChar +extern __typeof (xmlTextReaderQuoteChar) xmlTextReaderQuoteChar __attribute((alias("xmlTextReaderQuoteChar__internal_alias"))); +#else +#ifndef xmlTextReaderQuoteChar +extern __typeof (xmlTextReaderQuoteChar) xmlTextReaderQuoteChar__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderQuoteChar xmlTextReaderQuoteChar__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderRead +extern __typeof (xmlTextReaderRead) xmlTextReaderRead __attribute((alias("xmlTextReaderRead__internal_alias"))); +#else +#ifndef xmlTextReaderRead +extern __typeof (xmlTextReaderRead) xmlTextReaderRead__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderRead xmlTextReaderRead__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderReadAttributeValue +extern __typeof (xmlTextReaderReadAttributeValue) xmlTextReaderReadAttributeValue __attribute((alias("xmlTextReaderReadAttributeValue__internal_alias"))); +#else +#ifndef xmlTextReaderReadAttributeValue +extern __typeof (xmlTextReaderReadAttributeValue) xmlTextReaderReadAttributeValue__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderReadAttributeValue xmlTextReaderReadAttributeValue__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderReadInnerXml +extern __typeof (xmlTextReaderReadInnerXml) xmlTextReaderReadInnerXml __attribute((alias("xmlTextReaderReadInnerXml__internal_alias"))); +#else +#ifndef xmlTextReaderReadInnerXml +extern __typeof (xmlTextReaderReadInnerXml) xmlTextReaderReadInnerXml__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderReadInnerXml xmlTextReaderReadInnerXml__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderReadOuterXml +extern __typeof (xmlTextReaderReadOuterXml) xmlTextReaderReadOuterXml __attribute((alias("xmlTextReaderReadOuterXml__internal_alias"))); +#else +#ifndef xmlTextReaderReadOuterXml +extern __typeof (xmlTextReaderReadOuterXml) xmlTextReaderReadOuterXml__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderReadOuterXml xmlTextReaderReadOuterXml__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderReadState +extern __typeof (xmlTextReaderReadState) xmlTextReaderReadState __attribute((alias("xmlTextReaderReadState__internal_alias"))); +#else +#ifndef xmlTextReaderReadState +extern __typeof (xmlTextReaderReadState) xmlTextReaderReadState__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderReadState xmlTextReaderReadState__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderReadString +extern __typeof (xmlTextReaderReadString) xmlTextReaderReadString __attribute((alias("xmlTextReaderReadString__internal_alias"))); +#else +#ifndef xmlTextReaderReadString +extern __typeof (xmlTextReaderReadString) xmlTextReaderReadString__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderReadString xmlTextReaderReadString__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderRelaxNGSetSchema +extern __typeof (xmlTextReaderRelaxNGSetSchema) xmlTextReaderRelaxNGSetSchema __attribute((alias("xmlTextReaderRelaxNGSetSchema__internal_alias"))); +#else +#ifndef xmlTextReaderRelaxNGSetSchema +extern __typeof (xmlTextReaderRelaxNGSetSchema) xmlTextReaderRelaxNGSetSchema__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderRelaxNGSetSchema xmlTextReaderRelaxNGSetSchema__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderRelaxNGValidate +extern __typeof (xmlTextReaderRelaxNGValidate) xmlTextReaderRelaxNGValidate __attribute((alias("xmlTextReaderRelaxNGValidate__internal_alias"))); +#else +#ifndef xmlTextReaderRelaxNGValidate +extern __typeof (xmlTextReaderRelaxNGValidate) xmlTextReaderRelaxNGValidate__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderRelaxNGValidate xmlTextReaderRelaxNGValidate__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderRelaxNGValidateCtxt +extern __typeof (xmlTextReaderRelaxNGValidateCtxt) xmlTextReaderRelaxNGValidateCtxt __attribute((alias("xmlTextReaderRelaxNGValidateCtxt__internal_alias"))); +#else +#ifndef xmlTextReaderRelaxNGValidateCtxt +extern __typeof (xmlTextReaderRelaxNGValidateCtxt) xmlTextReaderRelaxNGValidateCtxt__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderRelaxNGValidateCtxt xmlTextReaderRelaxNGValidateCtxt__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderSchemaValidate +extern __typeof (xmlTextReaderSchemaValidate) xmlTextReaderSchemaValidate __attribute((alias("xmlTextReaderSchemaValidate__internal_alias"))); +#else +#ifndef xmlTextReaderSchemaValidate +extern __typeof (xmlTextReaderSchemaValidate) xmlTextReaderSchemaValidate__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderSchemaValidate xmlTextReaderSchemaValidate__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderSchemaValidateCtxt +extern __typeof (xmlTextReaderSchemaValidateCtxt) xmlTextReaderSchemaValidateCtxt __attribute((alias("xmlTextReaderSchemaValidateCtxt__internal_alias"))); +#else +#ifndef xmlTextReaderSchemaValidateCtxt +extern __typeof (xmlTextReaderSchemaValidateCtxt) xmlTextReaderSchemaValidateCtxt__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderSchemaValidateCtxt xmlTextReaderSchemaValidateCtxt__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderSetErrorHandler +extern __typeof (xmlTextReaderSetErrorHandler) xmlTextReaderSetErrorHandler __attribute((alias("xmlTextReaderSetErrorHandler__internal_alias"))); +#else +#ifndef xmlTextReaderSetErrorHandler +extern __typeof (xmlTextReaderSetErrorHandler) xmlTextReaderSetErrorHandler__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderSetErrorHandler xmlTextReaderSetErrorHandler__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderSetParserProp +extern __typeof (xmlTextReaderSetParserProp) xmlTextReaderSetParserProp __attribute((alias("xmlTextReaderSetParserProp__internal_alias"))); +#else +#ifndef xmlTextReaderSetParserProp +extern __typeof (xmlTextReaderSetParserProp) xmlTextReaderSetParserProp__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderSetParserProp xmlTextReaderSetParserProp__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderSetSchema +extern __typeof (xmlTextReaderSetSchema) xmlTextReaderSetSchema __attribute((alias("xmlTextReaderSetSchema__internal_alias"))); +#else +#ifndef xmlTextReaderSetSchema +extern __typeof (xmlTextReaderSetSchema) xmlTextReaderSetSchema__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderSetSchema xmlTextReaderSetSchema__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderSetStructuredErrorHandler +extern __typeof (xmlTextReaderSetStructuredErrorHandler) xmlTextReaderSetStructuredErrorHandler __attribute((alias("xmlTextReaderSetStructuredErrorHandler__internal_alias"))); +#else +#ifndef xmlTextReaderSetStructuredErrorHandler +extern __typeof (xmlTextReaderSetStructuredErrorHandler) xmlTextReaderSetStructuredErrorHandler__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderSetStructuredErrorHandler xmlTextReaderSetStructuredErrorHandler__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderSetup +extern __typeof (xmlTextReaderSetup) xmlTextReaderSetup __attribute((alias("xmlTextReaderSetup__internal_alias"))); +#else +#ifndef xmlTextReaderSetup +extern __typeof (xmlTextReaderSetup) xmlTextReaderSetup__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderSetup xmlTextReaderSetup__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderStandalone +extern __typeof (xmlTextReaderStandalone) xmlTextReaderStandalone __attribute((alias("xmlTextReaderStandalone__internal_alias"))); +#else +#ifndef xmlTextReaderStandalone +extern __typeof (xmlTextReaderStandalone) xmlTextReaderStandalone__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderStandalone xmlTextReaderStandalone__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderValue +extern __typeof (xmlTextReaderValue) xmlTextReaderValue __attribute((alias("xmlTextReaderValue__internal_alias"))); +#else +#ifndef xmlTextReaderValue +extern __typeof (xmlTextReaderValue) xmlTextReaderValue__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderValue xmlTextReaderValue__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_READER_ENABLED) +#ifdef bottom_xmlreader +#undef xmlTextReaderXmlLang +extern __typeof (xmlTextReaderXmlLang) xmlTextReaderXmlLang __attribute((alias("xmlTextReaderXmlLang__internal_alias"))); +#else +#ifndef xmlTextReaderXmlLang +extern __typeof (xmlTextReaderXmlLang) xmlTextReaderXmlLang__internal_alias __attribute((visibility("hidden"))); +#define xmlTextReaderXmlLang xmlTextReaderXmlLang__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterEndAttribute +extern __typeof (xmlTextWriterEndAttribute) xmlTextWriterEndAttribute __attribute((alias("xmlTextWriterEndAttribute__internal_alias"))); +#else +#ifndef xmlTextWriterEndAttribute +extern __typeof (xmlTextWriterEndAttribute) xmlTextWriterEndAttribute__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterEndAttribute xmlTextWriterEndAttribute__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterEndCDATA +extern __typeof (xmlTextWriterEndCDATA) xmlTextWriterEndCDATA __attribute((alias("xmlTextWriterEndCDATA__internal_alias"))); +#else +#ifndef xmlTextWriterEndCDATA +extern __typeof (xmlTextWriterEndCDATA) xmlTextWriterEndCDATA__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterEndCDATA xmlTextWriterEndCDATA__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterEndComment +extern __typeof (xmlTextWriterEndComment) xmlTextWriterEndComment __attribute((alias("xmlTextWriterEndComment__internal_alias"))); +#else +#ifndef xmlTextWriterEndComment +extern __typeof (xmlTextWriterEndComment) xmlTextWriterEndComment__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterEndComment xmlTextWriterEndComment__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterEndDTD +extern __typeof (xmlTextWriterEndDTD) xmlTextWriterEndDTD __attribute((alias("xmlTextWriterEndDTD__internal_alias"))); +#else +#ifndef xmlTextWriterEndDTD +extern __typeof (xmlTextWriterEndDTD) xmlTextWriterEndDTD__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterEndDTD xmlTextWriterEndDTD__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterEndDTDAttlist +extern __typeof (xmlTextWriterEndDTDAttlist) xmlTextWriterEndDTDAttlist __attribute((alias("xmlTextWriterEndDTDAttlist__internal_alias"))); +#else +#ifndef xmlTextWriterEndDTDAttlist +extern __typeof (xmlTextWriterEndDTDAttlist) xmlTextWriterEndDTDAttlist__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterEndDTDAttlist xmlTextWriterEndDTDAttlist__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterEndDTDElement +extern __typeof (xmlTextWriterEndDTDElement) xmlTextWriterEndDTDElement __attribute((alias("xmlTextWriterEndDTDElement__internal_alias"))); +#else +#ifndef xmlTextWriterEndDTDElement +extern __typeof (xmlTextWriterEndDTDElement) xmlTextWriterEndDTDElement__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterEndDTDElement xmlTextWriterEndDTDElement__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterEndDTDEntity +extern __typeof (xmlTextWriterEndDTDEntity) xmlTextWriterEndDTDEntity __attribute((alias("xmlTextWriterEndDTDEntity__internal_alias"))); +#else +#ifndef xmlTextWriterEndDTDEntity +extern __typeof (xmlTextWriterEndDTDEntity) xmlTextWriterEndDTDEntity__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterEndDTDEntity xmlTextWriterEndDTDEntity__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterEndDocument +extern __typeof (xmlTextWriterEndDocument) xmlTextWriterEndDocument __attribute((alias("xmlTextWriterEndDocument__internal_alias"))); +#else +#ifndef xmlTextWriterEndDocument +extern __typeof (xmlTextWriterEndDocument) xmlTextWriterEndDocument__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterEndDocument xmlTextWriterEndDocument__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterEndElement +extern __typeof (xmlTextWriterEndElement) xmlTextWriterEndElement __attribute((alias("xmlTextWriterEndElement__internal_alias"))); +#else +#ifndef xmlTextWriterEndElement +extern __typeof (xmlTextWriterEndElement) xmlTextWriterEndElement__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterEndElement xmlTextWriterEndElement__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterEndPI +extern __typeof (xmlTextWriterEndPI) xmlTextWriterEndPI __attribute((alias("xmlTextWriterEndPI__internal_alias"))); +#else +#ifndef xmlTextWriterEndPI +extern __typeof (xmlTextWriterEndPI) xmlTextWriterEndPI__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterEndPI xmlTextWriterEndPI__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterFlush +extern __typeof (xmlTextWriterFlush) xmlTextWriterFlush __attribute((alias("xmlTextWriterFlush__internal_alias"))); +#else +#ifndef xmlTextWriterFlush +extern __typeof (xmlTextWriterFlush) xmlTextWriterFlush__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterFlush xmlTextWriterFlush__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterFullEndElement +extern __typeof (xmlTextWriterFullEndElement) xmlTextWriterFullEndElement __attribute((alias("xmlTextWriterFullEndElement__internal_alias"))); +#else +#ifndef xmlTextWriterFullEndElement +extern __typeof (xmlTextWriterFullEndElement) xmlTextWriterFullEndElement__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterFullEndElement xmlTextWriterFullEndElement__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterSetIndent +extern __typeof (xmlTextWriterSetIndent) xmlTextWriterSetIndent __attribute((alias("xmlTextWriterSetIndent__internal_alias"))); +#else +#ifndef xmlTextWriterSetIndent +extern __typeof (xmlTextWriterSetIndent) xmlTextWriterSetIndent__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterSetIndent xmlTextWriterSetIndent__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterSetIndentString +extern __typeof (xmlTextWriterSetIndentString) xmlTextWriterSetIndentString __attribute((alias("xmlTextWriterSetIndentString__internal_alias"))); +#else +#ifndef xmlTextWriterSetIndentString +extern __typeof (xmlTextWriterSetIndentString) xmlTextWriterSetIndentString__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterSetIndentString xmlTextWriterSetIndentString__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterSetQuoteChar +extern __typeof (xmlTextWriterSetQuoteChar) xmlTextWriterSetQuoteChar __attribute((alias("xmlTextWriterSetQuoteChar__internal_alias"))); +#else +#ifndef xmlTextWriterSetQuoteChar +extern __typeof (xmlTextWriterSetQuoteChar) xmlTextWriterSetQuoteChar__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterSetQuoteChar xmlTextWriterSetQuoteChar__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterStartAttribute +extern __typeof (xmlTextWriterStartAttribute) xmlTextWriterStartAttribute __attribute((alias("xmlTextWriterStartAttribute__internal_alias"))); +#else +#ifndef xmlTextWriterStartAttribute +extern __typeof (xmlTextWriterStartAttribute) xmlTextWriterStartAttribute__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterStartAttribute xmlTextWriterStartAttribute__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterStartAttributeNS +extern __typeof (xmlTextWriterStartAttributeNS) xmlTextWriterStartAttributeNS __attribute((alias("xmlTextWriterStartAttributeNS__internal_alias"))); +#else +#ifndef xmlTextWriterStartAttributeNS +extern __typeof (xmlTextWriterStartAttributeNS) xmlTextWriterStartAttributeNS__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterStartAttributeNS xmlTextWriterStartAttributeNS__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterStartCDATA +extern __typeof (xmlTextWriterStartCDATA) xmlTextWriterStartCDATA __attribute((alias("xmlTextWriterStartCDATA__internal_alias"))); +#else +#ifndef xmlTextWriterStartCDATA +extern __typeof (xmlTextWriterStartCDATA) xmlTextWriterStartCDATA__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterStartCDATA xmlTextWriterStartCDATA__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterStartComment +extern __typeof (xmlTextWriterStartComment) xmlTextWriterStartComment __attribute((alias("xmlTextWriterStartComment__internal_alias"))); +#else +#ifndef xmlTextWriterStartComment +extern __typeof (xmlTextWriterStartComment) xmlTextWriterStartComment__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterStartComment xmlTextWriterStartComment__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterStartDTD +extern __typeof (xmlTextWriterStartDTD) xmlTextWriterStartDTD __attribute((alias("xmlTextWriterStartDTD__internal_alias"))); +#else +#ifndef xmlTextWriterStartDTD +extern __typeof (xmlTextWriterStartDTD) xmlTextWriterStartDTD__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterStartDTD xmlTextWriterStartDTD__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterStartDTDAttlist +extern __typeof (xmlTextWriterStartDTDAttlist) xmlTextWriterStartDTDAttlist __attribute((alias("xmlTextWriterStartDTDAttlist__internal_alias"))); +#else +#ifndef xmlTextWriterStartDTDAttlist +extern __typeof (xmlTextWriterStartDTDAttlist) xmlTextWriterStartDTDAttlist__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterStartDTDAttlist xmlTextWriterStartDTDAttlist__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterStartDTDElement +extern __typeof (xmlTextWriterStartDTDElement) xmlTextWriterStartDTDElement __attribute((alias("xmlTextWriterStartDTDElement__internal_alias"))); +#else +#ifndef xmlTextWriterStartDTDElement +extern __typeof (xmlTextWriterStartDTDElement) xmlTextWriterStartDTDElement__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterStartDTDElement xmlTextWriterStartDTDElement__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterStartDTDEntity +extern __typeof (xmlTextWriterStartDTDEntity) xmlTextWriterStartDTDEntity __attribute((alias("xmlTextWriterStartDTDEntity__internal_alias"))); +#else +#ifndef xmlTextWriterStartDTDEntity +extern __typeof (xmlTextWriterStartDTDEntity) xmlTextWriterStartDTDEntity__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterStartDTDEntity xmlTextWriterStartDTDEntity__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterStartDocument +extern __typeof (xmlTextWriterStartDocument) xmlTextWriterStartDocument __attribute((alias("xmlTextWriterStartDocument__internal_alias"))); +#else +#ifndef xmlTextWriterStartDocument +extern __typeof (xmlTextWriterStartDocument) xmlTextWriterStartDocument__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterStartDocument xmlTextWriterStartDocument__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterStartElement +extern __typeof (xmlTextWriterStartElement) xmlTextWriterStartElement __attribute((alias("xmlTextWriterStartElement__internal_alias"))); +#else +#ifndef xmlTextWriterStartElement +extern __typeof (xmlTextWriterStartElement) xmlTextWriterStartElement__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterStartElement xmlTextWriterStartElement__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterStartElementNS +extern __typeof (xmlTextWriterStartElementNS) xmlTextWriterStartElementNS __attribute((alias("xmlTextWriterStartElementNS__internal_alias"))); +#else +#ifndef xmlTextWriterStartElementNS +extern __typeof (xmlTextWriterStartElementNS) xmlTextWriterStartElementNS__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterStartElementNS xmlTextWriterStartElementNS__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterStartPI +extern __typeof (xmlTextWriterStartPI) xmlTextWriterStartPI __attribute((alias("xmlTextWriterStartPI__internal_alias"))); +#else +#ifndef xmlTextWriterStartPI +extern __typeof (xmlTextWriterStartPI) xmlTextWriterStartPI__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterStartPI xmlTextWriterStartPI__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterWriteAttribute +extern __typeof (xmlTextWriterWriteAttribute) xmlTextWriterWriteAttribute __attribute((alias("xmlTextWriterWriteAttribute__internal_alias"))); +#else +#ifndef xmlTextWriterWriteAttribute +extern __typeof (xmlTextWriterWriteAttribute) xmlTextWriterWriteAttribute__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterWriteAttribute xmlTextWriterWriteAttribute__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterWriteAttributeNS +extern __typeof (xmlTextWriterWriteAttributeNS) xmlTextWriterWriteAttributeNS __attribute((alias("xmlTextWriterWriteAttributeNS__internal_alias"))); +#else +#ifndef xmlTextWriterWriteAttributeNS +extern __typeof (xmlTextWriterWriteAttributeNS) xmlTextWriterWriteAttributeNS__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterWriteAttributeNS xmlTextWriterWriteAttributeNS__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterWriteBase64 +extern __typeof (xmlTextWriterWriteBase64) xmlTextWriterWriteBase64 __attribute((alias("xmlTextWriterWriteBase64__internal_alias"))); +#else +#ifndef xmlTextWriterWriteBase64 +extern __typeof (xmlTextWriterWriteBase64) xmlTextWriterWriteBase64__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterWriteBase64 xmlTextWriterWriteBase64__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterWriteBinHex +extern __typeof (xmlTextWriterWriteBinHex) xmlTextWriterWriteBinHex __attribute((alias("xmlTextWriterWriteBinHex__internal_alias"))); +#else +#ifndef xmlTextWriterWriteBinHex +extern __typeof (xmlTextWriterWriteBinHex) xmlTextWriterWriteBinHex__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterWriteBinHex xmlTextWriterWriteBinHex__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterWriteCDATA +extern __typeof (xmlTextWriterWriteCDATA) xmlTextWriterWriteCDATA __attribute((alias("xmlTextWriterWriteCDATA__internal_alias"))); +#else +#ifndef xmlTextWriterWriteCDATA +extern __typeof (xmlTextWriterWriteCDATA) xmlTextWriterWriteCDATA__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterWriteCDATA xmlTextWriterWriteCDATA__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterWriteComment +extern __typeof (xmlTextWriterWriteComment) xmlTextWriterWriteComment __attribute((alias("xmlTextWriterWriteComment__internal_alias"))); +#else +#ifndef xmlTextWriterWriteComment +extern __typeof (xmlTextWriterWriteComment) xmlTextWriterWriteComment__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterWriteComment xmlTextWriterWriteComment__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterWriteDTD +extern __typeof (xmlTextWriterWriteDTD) xmlTextWriterWriteDTD __attribute((alias("xmlTextWriterWriteDTD__internal_alias"))); +#else +#ifndef xmlTextWriterWriteDTD +extern __typeof (xmlTextWriterWriteDTD) xmlTextWriterWriteDTD__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterWriteDTD xmlTextWriterWriteDTD__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterWriteDTDAttlist +extern __typeof (xmlTextWriterWriteDTDAttlist) xmlTextWriterWriteDTDAttlist __attribute((alias("xmlTextWriterWriteDTDAttlist__internal_alias"))); +#else +#ifndef xmlTextWriterWriteDTDAttlist +extern __typeof (xmlTextWriterWriteDTDAttlist) xmlTextWriterWriteDTDAttlist__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterWriteDTDAttlist xmlTextWriterWriteDTDAttlist__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterWriteDTDElement +extern __typeof (xmlTextWriterWriteDTDElement) xmlTextWriterWriteDTDElement __attribute((alias("xmlTextWriterWriteDTDElement__internal_alias"))); +#else +#ifndef xmlTextWriterWriteDTDElement +extern __typeof (xmlTextWriterWriteDTDElement) xmlTextWriterWriteDTDElement__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterWriteDTDElement xmlTextWriterWriteDTDElement__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterWriteDTDEntity +extern __typeof (xmlTextWriterWriteDTDEntity) xmlTextWriterWriteDTDEntity __attribute((alias("xmlTextWriterWriteDTDEntity__internal_alias"))); +#else +#ifndef xmlTextWriterWriteDTDEntity +extern __typeof (xmlTextWriterWriteDTDEntity) xmlTextWriterWriteDTDEntity__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterWriteDTDEntity xmlTextWriterWriteDTDEntity__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterWriteDTDExternalEntity +extern __typeof (xmlTextWriterWriteDTDExternalEntity) xmlTextWriterWriteDTDExternalEntity __attribute((alias("xmlTextWriterWriteDTDExternalEntity__internal_alias"))); +#else +#ifndef xmlTextWriterWriteDTDExternalEntity +extern __typeof (xmlTextWriterWriteDTDExternalEntity) xmlTextWriterWriteDTDExternalEntity__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterWriteDTDExternalEntity xmlTextWriterWriteDTDExternalEntity__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterWriteDTDExternalEntityContents +extern __typeof (xmlTextWriterWriteDTDExternalEntityContents) xmlTextWriterWriteDTDExternalEntityContents __attribute((alias("xmlTextWriterWriteDTDExternalEntityContents__internal_alias"))); +#else +#ifndef xmlTextWriterWriteDTDExternalEntityContents +extern __typeof (xmlTextWriterWriteDTDExternalEntityContents) xmlTextWriterWriteDTDExternalEntityContents__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterWriteDTDExternalEntityContents xmlTextWriterWriteDTDExternalEntityContents__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterWriteDTDInternalEntity +extern __typeof (xmlTextWriterWriteDTDInternalEntity) xmlTextWriterWriteDTDInternalEntity __attribute((alias("xmlTextWriterWriteDTDInternalEntity__internal_alias"))); +#else +#ifndef xmlTextWriterWriteDTDInternalEntity +extern __typeof (xmlTextWriterWriteDTDInternalEntity) xmlTextWriterWriteDTDInternalEntity__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterWriteDTDInternalEntity xmlTextWriterWriteDTDInternalEntity__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterWriteDTDNotation +extern __typeof (xmlTextWriterWriteDTDNotation) xmlTextWriterWriteDTDNotation __attribute((alias("xmlTextWriterWriteDTDNotation__internal_alias"))); +#else +#ifndef xmlTextWriterWriteDTDNotation +extern __typeof (xmlTextWriterWriteDTDNotation) xmlTextWriterWriteDTDNotation__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterWriteDTDNotation xmlTextWriterWriteDTDNotation__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterWriteElement +extern __typeof (xmlTextWriterWriteElement) xmlTextWriterWriteElement __attribute((alias("xmlTextWriterWriteElement__internal_alias"))); +#else +#ifndef xmlTextWriterWriteElement +extern __typeof (xmlTextWriterWriteElement) xmlTextWriterWriteElement__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterWriteElement xmlTextWriterWriteElement__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterWriteElementNS +extern __typeof (xmlTextWriterWriteElementNS) xmlTextWriterWriteElementNS __attribute((alias("xmlTextWriterWriteElementNS__internal_alias"))); +#else +#ifndef xmlTextWriterWriteElementNS +extern __typeof (xmlTextWriterWriteElementNS) xmlTextWriterWriteElementNS__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterWriteElementNS xmlTextWriterWriteElementNS__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterWriteFormatAttribute +extern __typeof (xmlTextWriterWriteFormatAttribute) xmlTextWriterWriteFormatAttribute __attribute((alias("xmlTextWriterWriteFormatAttribute__internal_alias"))); +#else +#ifndef xmlTextWriterWriteFormatAttribute +extern __typeof (xmlTextWriterWriteFormatAttribute) xmlTextWriterWriteFormatAttribute__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterWriteFormatAttribute xmlTextWriterWriteFormatAttribute__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterWriteFormatAttributeNS +extern __typeof (xmlTextWriterWriteFormatAttributeNS) xmlTextWriterWriteFormatAttributeNS __attribute((alias("xmlTextWriterWriteFormatAttributeNS__internal_alias"))); +#else +#ifndef xmlTextWriterWriteFormatAttributeNS +extern __typeof (xmlTextWriterWriteFormatAttributeNS) xmlTextWriterWriteFormatAttributeNS__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterWriteFormatAttributeNS xmlTextWriterWriteFormatAttributeNS__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterWriteFormatCDATA +extern __typeof (xmlTextWriterWriteFormatCDATA) xmlTextWriterWriteFormatCDATA __attribute((alias("xmlTextWriterWriteFormatCDATA__internal_alias"))); +#else +#ifndef xmlTextWriterWriteFormatCDATA +extern __typeof (xmlTextWriterWriteFormatCDATA) xmlTextWriterWriteFormatCDATA__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterWriteFormatCDATA xmlTextWriterWriteFormatCDATA__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterWriteFormatComment +extern __typeof (xmlTextWriterWriteFormatComment) xmlTextWriterWriteFormatComment __attribute((alias("xmlTextWriterWriteFormatComment__internal_alias"))); +#else +#ifndef xmlTextWriterWriteFormatComment +extern __typeof (xmlTextWriterWriteFormatComment) xmlTextWriterWriteFormatComment__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterWriteFormatComment xmlTextWriterWriteFormatComment__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterWriteFormatDTD +extern __typeof (xmlTextWriterWriteFormatDTD) xmlTextWriterWriteFormatDTD __attribute((alias("xmlTextWriterWriteFormatDTD__internal_alias"))); +#else +#ifndef xmlTextWriterWriteFormatDTD +extern __typeof (xmlTextWriterWriteFormatDTD) xmlTextWriterWriteFormatDTD__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterWriteFormatDTD xmlTextWriterWriteFormatDTD__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterWriteFormatDTDAttlist +extern __typeof (xmlTextWriterWriteFormatDTDAttlist) xmlTextWriterWriteFormatDTDAttlist __attribute((alias("xmlTextWriterWriteFormatDTDAttlist__internal_alias"))); +#else +#ifndef xmlTextWriterWriteFormatDTDAttlist +extern __typeof (xmlTextWriterWriteFormatDTDAttlist) xmlTextWriterWriteFormatDTDAttlist__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterWriteFormatDTDAttlist xmlTextWriterWriteFormatDTDAttlist__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterWriteFormatDTDElement +extern __typeof (xmlTextWriterWriteFormatDTDElement) xmlTextWriterWriteFormatDTDElement __attribute((alias("xmlTextWriterWriteFormatDTDElement__internal_alias"))); +#else +#ifndef xmlTextWriterWriteFormatDTDElement +extern __typeof (xmlTextWriterWriteFormatDTDElement) xmlTextWriterWriteFormatDTDElement__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterWriteFormatDTDElement xmlTextWriterWriteFormatDTDElement__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterWriteFormatDTDInternalEntity +extern __typeof (xmlTextWriterWriteFormatDTDInternalEntity) xmlTextWriterWriteFormatDTDInternalEntity __attribute((alias("xmlTextWriterWriteFormatDTDInternalEntity__internal_alias"))); +#else +#ifndef xmlTextWriterWriteFormatDTDInternalEntity +extern __typeof (xmlTextWriterWriteFormatDTDInternalEntity) xmlTextWriterWriteFormatDTDInternalEntity__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterWriteFormatDTDInternalEntity xmlTextWriterWriteFormatDTDInternalEntity__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterWriteFormatElement +extern __typeof (xmlTextWriterWriteFormatElement) xmlTextWriterWriteFormatElement __attribute((alias("xmlTextWriterWriteFormatElement__internal_alias"))); +#else +#ifndef xmlTextWriterWriteFormatElement +extern __typeof (xmlTextWriterWriteFormatElement) xmlTextWriterWriteFormatElement__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterWriteFormatElement xmlTextWriterWriteFormatElement__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterWriteFormatElementNS +extern __typeof (xmlTextWriterWriteFormatElementNS) xmlTextWriterWriteFormatElementNS __attribute((alias("xmlTextWriterWriteFormatElementNS__internal_alias"))); +#else +#ifndef xmlTextWriterWriteFormatElementNS +extern __typeof (xmlTextWriterWriteFormatElementNS) xmlTextWriterWriteFormatElementNS__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterWriteFormatElementNS xmlTextWriterWriteFormatElementNS__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterWriteFormatPI +extern __typeof (xmlTextWriterWriteFormatPI) xmlTextWriterWriteFormatPI __attribute((alias("xmlTextWriterWriteFormatPI__internal_alias"))); +#else +#ifndef xmlTextWriterWriteFormatPI +extern __typeof (xmlTextWriterWriteFormatPI) xmlTextWriterWriteFormatPI__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterWriteFormatPI xmlTextWriterWriteFormatPI__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterWriteFormatRaw +extern __typeof (xmlTextWriterWriteFormatRaw) xmlTextWriterWriteFormatRaw __attribute((alias("xmlTextWriterWriteFormatRaw__internal_alias"))); +#else +#ifndef xmlTextWriterWriteFormatRaw +extern __typeof (xmlTextWriterWriteFormatRaw) xmlTextWriterWriteFormatRaw__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterWriteFormatRaw xmlTextWriterWriteFormatRaw__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterWriteFormatString +extern __typeof (xmlTextWriterWriteFormatString) xmlTextWriterWriteFormatString __attribute((alias("xmlTextWriterWriteFormatString__internal_alias"))); +#else +#ifndef xmlTextWriterWriteFormatString +extern __typeof (xmlTextWriterWriteFormatString) xmlTextWriterWriteFormatString__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterWriteFormatString xmlTextWriterWriteFormatString__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterWritePI +extern __typeof (xmlTextWriterWritePI) xmlTextWriterWritePI __attribute((alias("xmlTextWriterWritePI__internal_alias"))); +#else +#ifndef xmlTextWriterWritePI +extern __typeof (xmlTextWriterWritePI) xmlTextWriterWritePI__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterWritePI xmlTextWriterWritePI__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterWriteRaw +extern __typeof (xmlTextWriterWriteRaw) xmlTextWriterWriteRaw __attribute((alias("xmlTextWriterWriteRaw__internal_alias"))); +#else +#ifndef xmlTextWriterWriteRaw +extern __typeof (xmlTextWriterWriteRaw) xmlTextWriterWriteRaw__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterWriteRaw xmlTextWriterWriteRaw__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterWriteRawLen +extern __typeof (xmlTextWriterWriteRawLen) xmlTextWriterWriteRawLen __attribute((alias("xmlTextWriterWriteRawLen__internal_alias"))); +#else +#ifndef xmlTextWriterWriteRawLen +extern __typeof (xmlTextWriterWriteRawLen) xmlTextWriterWriteRawLen__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterWriteRawLen xmlTextWriterWriteRawLen__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterWriteString +extern __typeof (xmlTextWriterWriteString) xmlTextWriterWriteString __attribute((alias("xmlTextWriterWriteString__internal_alias"))); +#else +#ifndef xmlTextWriterWriteString +extern __typeof (xmlTextWriterWriteString) xmlTextWriterWriteString__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterWriteString xmlTextWriterWriteString__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterWriteVFormatAttribute +extern __typeof (xmlTextWriterWriteVFormatAttribute) xmlTextWriterWriteVFormatAttribute __attribute((alias("xmlTextWriterWriteVFormatAttribute__internal_alias"))); +#else +#ifndef xmlTextWriterWriteVFormatAttribute +extern __typeof (xmlTextWriterWriteVFormatAttribute) xmlTextWriterWriteVFormatAttribute__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterWriteVFormatAttribute xmlTextWriterWriteVFormatAttribute__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterWriteVFormatAttributeNS +extern __typeof (xmlTextWriterWriteVFormatAttributeNS) xmlTextWriterWriteVFormatAttributeNS __attribute((alias("xmlTextWriterWriteVFormatAttributeNS__internal_alias"))); +#else +#ifndef xmlTextWriterWriteVFormatAttributeNS +extern __typeof (xmlTextWriterWriteVFormatAttributeNS) xmlTextWriterWriteVFormatAttributeNS__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterWriteVFormatAttributeNS xmlTextWriterWriteVFormatAttributeNS__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterWriteVFormatCDATA +extern __typeof (xmlTextWriterWriteVFormatCDATA) xmlTextWriterWriteVFormatCDATA __attribute((alias("xmlTextWriterWriteVFormatCDATA__internal_alias"))); +#else +#ifndef xmlTextWriterWriteVFormatCDATA +extern __typeof (xmlTextWriterWriteVFormatCDATA) xmlTextWriterWriteVFormatCDATA__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterWriteVFormatCDATA xmlTextWriterWriteVFormatCDATA__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterWriteVFormatComment +extern __typeof (xmlTextWriterWriteVFormatComment) xmlTextWriterWriteVFormatComment __attribute((alias("xmlTextWriterWriteVFormatComment__internal_alias"))); +#else +#ifndef xmlTextWriterWriteVFormatComment +extern __typeof (xmlTextWriterWriteVFormatComment) xmlTextWriterWriteVFormatComment__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterWriteVFormatComment xmlTextWriterWriteVFormatComment__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterWriteVFormatDTD +extern __typeof (xmlTextWriterWriteVFormatDTD) xmlTextWriterWriteVFormatDTD __attribute((alias("xmlTextWriterWriteVFormatDTD__internal_alias"))); +#else +#ifndef xmlTextWriterWriteVFormatDTD +extern __typeof (xmlTextWriterWriteVFormatDTD) xmlTextWriterWriteVFormatDTD__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterWriteVFormatDTD xmlTextWriterWriteVFormatDTD__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterWriteVFormatDTDAttlist +extern __typeof (xmlTextWriterWriteVFormatDTDAttlist) xmlTextWriterWriteVFormatDTDAttlist __attribute((alias("xmlTextWriterWriteVFormatDTDAttlist__internal_alias"))); +#else +#ifndef xmlTextWriterWriteVFormatDTDAttlist +extern __typeof (xmlTextWriterWriteVFormatDTDAttlist) xmlTextWriterWriteVFormatDTDAttlist__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterWriteVFormatDTDAttlist xmlTextWriterWriteVFormatDTDAttlist__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterWriteVFormatDTDElement +extern __typeof (xmlTextWriterWriteVFormatDTDElement) xmlTextWriterWriteVFormatDTDElement __attribute((alias("xmlTextWriterWriteVFormatDTDElement__internal_alias"))); +#else +#ifndef xmlTextWriterWriteVFormatDTDElement +extern __typeof (xmlTextWriterWriteVFormatDTDElement) xmlTextWriterWriteVFormatDTDElement__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterWriteVFormatDTDElement xmlTextWriterWriteVFormatDTDElement__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterWriteVFormatDTDInternalEntity +extern __typeof (xmlTextWriterWriteVFormatDTDInternalEntity) xmlTextWriterWriteVFormatDTDInternalEntity __attribute((alias("xmlTextWriterWriteVFormatDTDInternalEntity__internal_alias"))); +#else +#ifndef xmlTextWriterWriteVFormatDTDInternalEntity +extern __typeof (xmlTextWriterWriteVFormatDTDInternalEntity) xmlTextWriterWriteVFormatDTDInternalEntity__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterWriteVFormatDTDInternalEntity xmlTextWriterWriteVFormatDTDInternalEntity__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterWriteVFormatElement +extern __typeof (xmlTextWriterWriteVFormatElement) xmlTextWriterWriteVFormatElement __attribute((alias("xmlTextWriterWriteVFormatElement__internal_alias"))); +#else +#ifndef xmlTextWriterWriteVFormatElement +extern __typeof (xmlTextWriterWriteVFormatElement) xmlTextWriterWriteVFormatElement__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterWriteVFormatElement xmlTextWriterWriteVFormatElement__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterWriteVFormatElementNS +extern __typeof (xmlTextWriterWriteVFormatElementNS) xmlTextWriterWriteVFormatElementNS __attribute((alias("xmlTextWriterWriteVFormatElementNS__internal_alias"))); +#else +#ifndef xmlTextWriterWriteVFormatElementNS +extern __typeof (xmlTextWriterWriteVFormatElementNS) xmlTextWriterWriteVFormatElementNS__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterWriteVFormatElementNS xmlTextWriterWriteVFormatElementNS__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterWriteVFormatPI +extern __typeof (xmlTextWriterWriteVFormatPI) xmlTextWriterWriteVFormatPI __attribute((alias("xmlTextWriterWriteVFormatPI__internal_alias"))); +#else +#ifndef xmlTextWriterWriteVFormatPI +extern __typeof (xmlTextWriterWriteVFormatPI) xmlTextWriterWriteVFormatPI__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterWriteVFormatPI xmlTextWriterWriteVFormatPI__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterWriteVFormatRaw +extern __typeof (xmlTextWriterWriteVFormatRaw) xmlTextWriterWriteVFormatRaw __attribute((alias("xmlTextWriterWriteVFormatRaw__internal_alias"))); +#else +#ifndef xmlTextWriterWriteVFormatRaw +extern __typeof (xmlTextWriterWriteVFormatRaw) xmlTextWriterWriteVFormatRaw__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterWriteVFormatRaw xmlTextWriterWriteVFormatRaw__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_WRITER_ENABLED) +#ifdef bottom_xmlwriter +#undef xmlTextWriterWriteVFormatString +extern __typeof (xmlTextWriterWriteVFormatString) xmlTextWriterWriteVFormatString __attribute((alias("xmlTextWriterWriteVFormatString__internal_alias"))); +#else +#ifndef xmlTextWriterWriteVFormatString +extern __typeof (xmlTextWriterWriteVFormatString) xmlTextWriterWriteVFormatString__internal_alias __attribute((visibility("hidden"))); +#define xmlTextWriterWriteVFormatString xmlTextWriterWriteVFormatString__internal_alias +#endif +#endif +#endif + +#ifdef bottom_globals +#undef xmlThrDefBufferAllocScheme +extern __typeof (xmlThrDefBufferAllocScheme) xmlThrDefBufferAllocScheme __attribute((alias("xmlThrDefBufferAllocScheme__internal_alias"))); +#else +#ifndef xmlThrDefBufferAllocScheme +extern __typeof (xmlThrDefBufferAllocScheme) xmlThrDefBufferAllocScheme__internal_alias __attribute((visibility("hidden"))); +#define xmlThrDefBufferAllocScheme xmlThrDefBufferAllocScheme__internal_alias +#endif +#endif + +#ifdef bottom_globals +#undef xmlThrDefDefaultBufferSize +extern __typeof (xmlThrDefDefaultBufferSize) xmlThrDefDefaultBufferSize __attribute((alias("xmlThrDefDefaultBufferSize__internal_alias"))); +#else +#ifndef xmlThrDefDefaultBufferSize +extern __typeof (xmlThrDefDefaultBufferSize) xmlThrDefDefaultBufferSize__internal_alias __attribute((visibility("hidden"))); +#define xmlThrDefDefaultBufferSize xmlThrDefDefaultBufferSize__internal_alias +#endif +#endif + +#ifdef bottom_globals +#undef xmlThrDefDeregisterNodeDefault +extern __typeof (xmlThrDefDeregisterNodeDefault) xmlThrDefDeregisterNodeDefault __attribute((alias("xmlThrDefDeregisterNodeDefault__internal_alias"))); +#else +#ifndef xmlThrDefDeregisterNodeDefault +extern __typeof (xmlThrDefDeregisterNodeDefault) xmlThrDefDeregisterNodeDefault__internal_alias __attribute((visibility("hidden"))); +#define xmlThrDefDeregisterNodeDefault xmlThrDefDeregisterNodeDefault__internal_alias +#endif +#endif + +#ifdef bottom_globals +#undef xmlThrDefDoValidityCheckingDefaultValue +extern __typeof (xmlThrDefDoValidityCheckingDefaultValue) xmlThrDefDoValidityCheckingDefaultValue __attribute((alias("xmlThrDefDoValidityCheckingDefaultValue__internal_alias"))); +#else +#ifndef xmlThrDefDoValidityCheckingDefaultValue +extern __typeof (xmlThrDefDoValidityCheckingDefaultValue) xmlThrDefDoValidityCheckingDefaultValue__internal_alias __attribute((visibility("hidden"))); +#define xmlThrDefDoValidityCheckingDefaultValue xmlThrDefDoValidityCheckingDefaultValue__internal_alias +#endif +#endif + +#ifdef bottom_globals +#undef xmlThrDefGetWarningsDefaultValue +extern __typeof (xmlThrDefGetWarningsDefaultValue) xmlThrDefGetWarningsDefaultValue __attribute((alias("xmlThrDefGetWarningsDefaultValue__internal_alias"))); +#else +#ifndef xmlThrDefGetWarningsDefaultValue +extern __typeof (xmlThrDefGetWarningsDefaultValue) xmlThrDefGetWarningsDefaultValue__internal_alias __attribute((visibility("hidden"))); +#define xmlThrDefGetWarningsDefaultValue xmlThrDefGetWarningsDefaultValue__internal_alias +#endif +#endif + +#ifdef bottom_globals +#undef xmlThrDefIndentTreeOutput +extern __typeof (xmlThrDefIndentTreeOutput) xmlThrDefIndentTreeOutput __attribute((alias("xmlThrDefIndentTreeOutput__internal_alias"))); +#else +#ifndef xmlThrDefIndentTreeOutput +extern __typeof (xmlThrDefIndentTreeOutput) xmlThrDefIndentTreeOutput__internal_alias __attribute((visibility("hidden"))); +#define xmlThrDefIndentTreeOutput xmlThrDefIndentTreeOutput__internal_alias +#endif +#endif + +#ifdef bottom_globals +#undef xmlThrDefKeepBlanksDefaultValue +extern __typeof (xmlThrDefKeepBlanksDefaultValue) xmlThrDefKeepBlanksDefaultValue __attribute((alias("xmlThrDefKeepBlanksDefaultValue__internal_alias"))); +#else +#ifndef xmlThrDefKeepBlanksDefaultValue +extern __typeof (xmlThrDefKeepBlanksDefaultValue) xmlThrDefKeepBlanksDefaultValue__internal_alias __attribute((visibility("hidden"))); +#define xmlThrDefKeepBlanksDefaultValue xmlThrDefKeepBlanksDefaultValue__internal_alias +#endif +#endif + +#ifdef bottom_globals +#undef xmlThrDefLineNumbersDefaultValue +extern __typeof (xmlThrDefLineNumbersDefaultValue) xmlThrDefLineNumbersDefaultValue __attribute((alias("xmlThrDefLineNumbersDefaultValue__internal_alias"))); +#else +#ifndef xmlThrDefLineNumbersDefaultValue +extern __typeof (xmlThrDefLineNumbersDefaultValue) xmlThrDefLineNumbersDefaultValue__internal_alias __attribute((visibility("hidden"))); +#define xmlThrDefLineNumbersDefaultValue xmlThrDefLineNumbersDefaultValue__internal_alias +#endif +#endif + +#ifdef bottom_globals +#undef xmlThrDefLoadExtDtdDefaultValue +extern __typeof (xmlThrDefLoadExtDtdDefaultValue) xmlThrDefLoadExtDtdDefaultValue __attribute((alias("xmlThrDefLoadExtDtdDefaultValue__internal_alias"))); +#else +#ifndef xmlThrDefLoadExtDtdDefaultValue +extern __typeof (xmlThrDefLoadExtDtdDefaultValue) xmlThrDefLoadExtDtdDefaultValue__internal_alias __attribute((visibility("hidden"))); +#define xmlThrDefLoadExtDtdDefaultValue xmlThrDefLoadExtDtdDefaultValue__internal_alias +#endif +#endif + +#ifdef bottom_globals +#undef xmlThrDefOutputBufferCreateFilenameDefault +extern __typeof (xmlThrDefOutputBufferCreateFilenameDefault) xmlThrDefOutputBufferCreateFilenameDefault __attribute((alias("xmlThrDefOutputBufferCreateFilenameDefault__internal_alias"))); +#else +#ifndef xmlThrDefOutputBufferCreateFilenameDefault +extern __typeof (xmlThrDefOutputBufferCreateFilenameDefault) xmlThrDefOutputBufferCreateFilenameDefault__internal_alias __attribute((visibility("hidden"))); +#define xmlThrDefOutputBufferCreateFilenameDefault xmlThrDefOutputBufferCreateFilenameDefault__internal_alias +#endif +#endif + +#ifdef bottom_globals +#undef xmlThrDefParserDebugEntities +extern __typeof (xmlThrDefParserDebugEntities) xmlThrDefParserDebugEntities __attribute((alias("xmlThrDefParserDebugEntities__internal_alias"))); +#else +#ifndef xmlThrDefParserDebugEntities +extern __typeof (xmlThrDefParserDebugEntities) xmlThrDefParserDebugEntities__internal_alias __attribute((visibility("hidden"))); +#define xmlThrDefParserDebugEntities xmlThrDefParserDebugEntities__internal_alias +#endif +#endif + +#ifdef bottom_globals +#undef xmlThrDefParserInputBufferCreateFilenameDefault +extern __typeof (xmlThrDefParserInputBufferCreateFilenameDefault) xmlThrDefParserInputBufferCreateFilenameDefault __attribute((alias("xmlThrDefParserInputBufferCreateFilenameDefault__internal_alias"))); +#else +#ifndef xmlThrDefParserInputBufferCreateFilenameDefault +extern __typeof (xmlThrDefParserInputBufferCreateFilenameDefault) xmlThrDefParserInputBufferCreateFilenameDefault__internal_alias __attribute((visibility("hidden"))); +#define xmlThrDefParserInputBufferCreateFilenameDefault xmlThrDefParserInputBufferCreateFilenameDefault__internal_alias +#endif +#endif + +#ifdef bottom_globals +#undef xmlThrDefPedanticParserDefaultValue +extern __typeof (xmlThrDefPedanticParserDefaultValue) xmlThrDefPedanticParserDefaultValue __attribute((alias("xmlThrDefPedanticParserDefaultValue__internal_alias"))); +#else +#ifndef xmlThrDefPedanticParserDefaultValue +extern __typeof (xmlThrDefPedanticParserDefaultValue) xmlThrDefPedanticParserDefaultValue__internal_alias __attribute((visibility("hidden"))); +#define xmlThrDefPedanticParserDefaultValue xmlThrDefPedanticParserDefaultValue__internal_alias +#endif +#endif + +#ifdef bottom_globals +#undef xmlThrDefRegisterNodeDefault +extern __typeof (xmlThrDefRegisterNodeDefault) xmlThrDefRegisterNodeDefault __attribute((alias("xmlThrDefRegisterNodeDefault__internal_alias"))); +#else +#ifndef xmlThrDefRegisterNodeDefault +extern __typeof (xmlThrDefRegisterNodeDefault) xmlThrDefRegisterNodeDefault__internal_alias __attribute((visibility("hidden"))); +#define xmlThrDefRegisterNodeDefault xmlThrDefRegisterNodeDefault__internal_alias +#endif +#endif + +#ifdef bottom_globals +#undef xmlThrDefSaveNoEmptyTags +extern __typeof (xmlThrDefSaveNoEmptyTags) xmlThrDefSaveNoEmptyTags __attribute((alias("xmlThrDefSaveNoEmptyTags__internal_alias"))); +#else +#ifndef xmlThrDefSaveNoEmptyTags +extern __typeof (xmlThrDefSaveNoEmptyTags) xmlThrDefSaveNoEmptyTags__internal_alias __attribute((visibility("hidden"))); +#define xmlThrDefSaveNoEmptyTags xmlThrDefSaveNoEmptyTags__internal_alias +#endif +#endif + +#ifdef bottom_globals +#undef xmlThrDefSetGenericErrorFunc +extern __typeof (xmlThrDefSetGenericErrorFunc) xmlThrDefSetGenericErrorFunc __attribute((alias("xmlThrDefSetGenericErrorFunc__internal_alias"))); +#else +#ifndef xmlThrDefSetGenericErrorFunc +extern __typeof (xmlThrDefSetGenericErrorFunc) xmlThrDefSetGenericErrorFunc__internal_alias __attribute((visibility("hidden"))); +#define xmlThrDefSetGenericErrorFunc xmlThrDefSetGenericErrorFunc__internal_alias +#endif +#endif + +#ifdef bottom_globals +#undef xmlThrDefSetStructuredErrorFunc +extern __typeof (xmlThrDefSetStructuredErrorFunc) xmlThrDefSetStructuredErrorFunc __attribute((alias("xmlThrDefSetStructuredErrorFunc__internal_alias"))); +#else +#ifndef xmlThrDefSetStructuredErrorFunc +extern __typeof (xmlThrDefSetStructuredErrorFunc) xmlThrDefSetStructuredErrorFunc__internal_alias __attribute((visibility("hidden"))); +#define xmlThrDefSetStructuredErrorFunc xmlThrDefSetStructuredErrorFunc__internal_alias +#endif +#endif + +#ifdef bottom_globals +#undef xmlThrDefSubstituteEntitiesDefaultValue +extern __typeof (xmlThrDefSubstituteEntitiesDefaultValue) xmlThrDefSubstituteEntitiesDefaultValue __attribute((alias("xmlThrDefSubstituteEntitiesDefaultValue__internal_alias"))); +#else +#ifndef xmlThrDefSubstituteEntitiesDefaultValue +extern __typeof (xmlThrDefSubstituteEntitiesDefaultValue) xmlThrDefSubstituteEntitiesDefaultValue__internal_alias __attribute((visibility("hidden"))); +#define xmlThrDefSubstituteEntitiesDefaultValue xmlThrDefSubstituteEntitiesDefaultValue__internal_alias +#endif +#endif + +#ifdef bottom_globals +#undef xmlThrDefTreeIndentString +extern __typeof (xmlThrDefTreeIndentString) xmlThrDefTreeIndentString __attribute((alias("xmlThrDefTreeIndentString__internal_alias"))); +#else +#ifndef xmlThrDefTreeIndentString +extern __typeof (xmlThrDefTreeIndentString) xmlThrDefTreeIndentString__internal_alias __attribute((visibility("hidden"))); +#define xmlThrDefTreeIndentString xmlThrDefTreeIndentString__internal_alias +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsAegeanNumbers +extern __typeof (xmlUCSIsAegeanNumbers) xmlUCSIsAegeanNumbers __attribute((alias("xmlUCSIsAegeanNumbers__internal_alias"))); +#else +#ifndef xmlUCSIsAegeanNumbers +extern __typeof (xmlUCSIsAegeanNumbers) xmlUCSIsAegeanNumbers__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsAegeanNumbers xmlUCSIsAegeanNumbers__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsAlphabeticPresentationForms +extern __typeof (xmlUCSIsAlphabeticPresentationForms) xmlUCSIsAlphabeticPresentationForms __attribute((alias("xmlUCSIsAlphabeticPresentationForms__internal_alias"))); +#else +#ifndef xmlUCSIsAlphabeticPresentationForms +extern __typeof (xmlUCSIsAlphabeticPresentationForms) xmlUCSIsAlphabeticPresentationForms__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsAlphabeticPresentationForms xmlUCSIsAlphabeticPresentationForms__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsArabic +extern __typeof (xmlUCSIsArabic) xmlUCSIsArabic __attribute((alias("xmlUCSIsArabic__internal_alias"))); +#else +#ifndef xmlUCSIsArabic +extern __typeof (xmlUCSIsArabic) xmlUCSIsArabic__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsArabic xmlUCSIsArabic__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsArabicPresentationFormsA +extern __typeof (xmlUCSIsArabicPresentationFormsA) xmlUCSIsArabicPresentationFormsA __attribute((alias("xmlUCSIsArabicPresentationFormsA__internal_alias"))); +#else +#ifndef xmlUCSIsArabicPresentationFormsA +extern __typeof (xmlUCSIsArabicPresentationFormsA) xmlUCSIsArabicPresentationFormsA__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsArabicPresentationFormsA xmlUCSIsArabicPresentationFormsA__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsArabicPresentationFormsB +extern __typeof (xmlUCSIsArabicPresentationFormsB) xmlUCSIsArabicPresentationFormsB __attribute((alias("xmlUCSIsArabicPresentationFormsB__internal_alias"))); +#else +#ifndef xmlUCSIsArabicPresentationFormsB +extern __typeof (xmlUCSIsArabicPresentationFormsB) xmlUCSIsArabicPresentationFormsB__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsArabicPresentationFormsB xmlUCSIsArabicPresentationFormsB__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsArmenian +extern __typeof (xmlUCSIsArmenian) xmlUCSIsArmenian __attribute((alias("xmlUCSIsArmenian__internal_alias"))); +#else +#ifndef xmlUCSIsArmenian +extern __typeof (xmlUCSIsArmenian) xmlUCSIsArmenian__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsArmenian xmlUCSIsArmenian__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsArrows +extern __typeof (xmlUCSIsArrows) xmlUCSIsArrows __attribute((alias("xmlUCSIsArrows__internal_alias"))); +#else +#ifndef xmlUCSIsArrows +extern __typeof (xmlUCSIsArrows) xmlUCSIsArrows__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsArrows xmlUCSIsArrows__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsBasicLatin +extern __typeof (xmlUCSIsBasicLatin) xmlUCSIsBasicLatin __attribute((alias("xmlUCSIsBasicLatin__internal_alias"))); +#else +#ifndef xmlUCSIsBasicLatin +extern __typeof (xmlUCSIsBasicLatin) xmlUCSIsBasicLatin__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsBasicLatin xmlUCSIsBasicLatin__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsBengali +extern __typeof (xmlUCSIsBengali) xmlUCSIsBengali __attribute((alias("xmlUCSIsBengali__internal_alias"))); +#else +#ifndef xmlUCSIsBengali +extern __typeof (xmlUCSIsBengali) xmlUCSIsBengali__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsBengali xmlUCSIsBengali__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsBlock +extern __typeof (xmlUCSIsBlock) xmlUCSIsBlock __attribute((alias("xmlUCSIsBlock__internal_alias"))); +#else +#ifndef xmlUCSIsBlock +extern __typeof (xmlUCSIsBlock) xmlUCSIsBlock__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsBlock xmlUCSIsBlock__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsBlockElements +extern __typeof (xmlUCSIsBlockElements) xmlUCSIsBlockElements __attribute((alias("xmlUCSIsBlockElements__internal_alias"))); +#else +#ifndef xmlUCSIsBlockElements +extern __typeof (xmlUCSIsBlockElements) xmlUCSIsBlockElements__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsBlockElements xmlUCSIsBlockElements__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsBopomofo +extern __typeof (xmlUCSIsBopomofo) xmlUCSIsBopomofo __attribute((alias("xmlUCSIsBopomofo__internal_alias"))); +#else +#ifndef xmlUCSIsBopomofo +extern __typeof (xmlUCSIsBopomofo) xmlUCSIsBopomofo__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsBopomofo xmlUCSIsBopomofo__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsBopomofoExtended +extern __typeof (xmlUCSIsBopomofoExtended) xmlUCSIsBopomofoExtended __attribute((alias("xmlUCSIsBopomofoExtended__internal_alias"))); +#else +#ifndef xmlUCSIsBopomofoExtended +extern __typeof (xmlUCSIsBopomofoExtended) xmlUCSIsBopomofoExtended__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsBopomofoExtended xmlUCSIsBopomofoExtended__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsBoxDrawing +extern __typeof (xmlUCSIsBoxDrawing) xmlUCSIsBoxDrawing __attribute((alias("xmlUCSIsBoxDrawing__internal_alias"))); +#else +#ifndef xmlUCSIsBoxDrawing +extern __typeof (xmlUCSIsBoxDrawing) xmlUCSIsBoxDrawing__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsBoxDrawing xmlUCSIsBoxDrawing__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsBraillePatterns +extern __typeof (xmlUCSIsBraillePatterns) xmlUCSIsBraillePatterns __attribute((alias("xmlUCSIsBraillePatterns__internal_alias"))); +#else +#ifndef xmlUCSIsBraillePatterns +extern __typeof (xmlUCSIsBraillePatterns) xmlUCSIsBraillePatterns__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsBraillePatterns xmlUCSIsBraillePatterns__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsBuhid +extern __typeof (xmlUCSIsBuhid) xmlUCSIsBuhid __attribute((alias("xmlUCSIsBuhid__internal_alias"))); +#else +#ifndef xmlUCSIsBuhid +extern __typeof (xmlUCSIsBuhid) xmlUCSIsBuhid__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsBuhid xmlUCSIsBuhid__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsByzantineMusicalSymbols +extern __typeof (xmlUCSIsByzantineMusicalSymbols) xmlUCSIsByzantineMusicalSymbols __attribute((alias("xmlUCSIsByzantineMusicalSymbols__internal_alias"))); +#else +#ifndef xmlUCSIsByzantineMusicalSymbols +extern __typeof (xmlUCSIsByzantineMusicalSymbols) xmlUCSIsByzantineMusicalSymbols__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsByzantineMusicalSymbols xmlUCSIsByzantineMusicalSymbols__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsCJKCompatibility +extern __typeof (xmlUCSIsCJKCompatibility) xmlUCSIsCJKCompatibility __attribute((alias("xmlUCSIsCJKCompatibility__internal_alias"))); +#else +#ifndef xmlUCSIsCJKCompatibility +extern __typeof (xmlUCSIsCJKCompatibility) xmlUCSIsCJKCompatibility__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsCJKCompatibility xmlUCSIsCJKCompatibility__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsCJKCompatibilityForms +extern __typeof (xmlUCSIsCJKCompatibilityForms) xmlUCSIsCJKCompatibilityForms __attribute((alias("xmlUCSIsCJKCompatibilityForms__internal_alias"))); +#else +#ifndef xmlUCSIsCJKCompatibilityForms +extern __typeof (xmlUCSIsCJKCompatibilityForms) xmlUCSIsCJKCompatibilityForms__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsCJKCompatibilityForms xmlUCSIsCJKCompatibilityForms__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsCJKCompatibilityIdeographs +extern __typeof (xmlUCSIsCJKCompatibilityIdeographs) xmlUCSIsCJKCompatibilityIdeographs __attribute((alias("xmlUCSIsCJKCompatibilityIdeographs__internal_alias"))); +#else +#ifndef xmlUCSIsCJKCompatibilityIdeographs +extern __typeof (xmlUCSIsCJKCompatibilityIdeographs) xmlUCSIsCJKCompatibilityIdeographs__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsCJKCompatibilityIdeographs xmlUCSIsCJKCompatibilityIdeographs__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsCJKCompatibilityIdeographsSupplement +extern __typeof (xmlUCSIsCJKCompatibilityIdeographsSupplement) xmlUCSIsCJKCompatibilityIdeographsSupplement __attribute((alias("xmlUCSIsCJKCompatibilityIdeographsSupplement__internal_alias"))); +#else +#ifndef xmlUCSIsCJKCompatibilityIdeographsSupplement +extern __typeof (xmlUCSIsCJKCompatibilityIdeographsSupplement) xmlUCSIsCJKCompatibilityIdeographsSupplement__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsCJKCompatibilityIdeographsSupplement xmlUCSIsCJKCompatibilityIdeographsSupplement__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsCJKRadicalsSupplement +extern __typeof (xmlUCSIsCJKRadicalsSupplement) xmlUCSIsCJKRadicalsSupplement __attribute((alias("xmlUCSIsCJKRadicalsSupplement__internal_alias"))); +#else +#ifndef xmlUCSIsCJKRadicalsSupplement +extern __typeof (xmlUCSIsCJKRadicalsSupplement) xmlUCSIsCJKRadicalsSupplement__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsCJKRadicalsSupplement xmlUCSIsCJKRadicalsSupplement__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsCJKSymbolsandPunctuation +extern __typeof (xmlUCSIsCJKSymbolsandPunctuation) xmlUCSIsCJKSymbolsandPunctuation __attribute((alias("xmlUCSIsCJKSymbolsandPunctuation__internal_alias"))); +#else +#ifndef xmlUCSIsCJKSymbolsandPunctuation +extern __typeof (xmlUCSIsCJKSymbolsandPunctuation) xmlUCSIsCJKSymbolsandPunctuation__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsCJKSymbolsandPunctuation xmlUCSIsCJKSymbolsandPunctuation__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsCJKUnifiedIdeographs +extern __typeof (xmlUCSIsCJKUnifiedIdeographs) xmlUCSIsCJKUnifiedIdeographs __attribute((alias("xmlUCSIsCJKUnifiedIdeographs__internal_alias"))); +#else +#ifndef xmlUCSIsCJKUnifiedIdeographs +extern __typeof (xmlUCSIsCJKUnifiedIdeographs) xmlUCSIsCJKUnifiedIdeographs__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsCJKUnifiedIdeographs xmlUCSIsCJKUnifiedIdeographs__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsCJKUnifiedIdeographsExtensionA +extern __typeof (xmlUCSIsCJKUnifiedIdeographsExtensionA) xmlUCSIsCJKUnifiedIdeographsExtensionA __attribute((alias("xmlUCSIsCJKUnifiedIdeographsExtensionA__internal_alias"))); +#else +#ifndef xmlUCSIsCJKUnifiedIdeographsExtensionA +extern __typeof (xmlUCSIsCJKUnifiedIdeographsExtensionA) xmlUCSIsCJKUnifiedIdeographsExtensionA__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsCJKUnifiedIdeographsExtensionA xmlUCSIsCJKUnifiedIdeographsExtensionA__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsCJKUnifiedIdeographsExtensionB +extern __typeof (xmlUCSIsCJKUnifiedIdeographsExtensionB) xmlUCSIsCJKUnifiedIdeographsExtensionB __attribute((alias("xmlUCSIsCJKUnifiedIdeographsExtensionB__internal_alias"))); +#else +#ifndef xmlUCSIsCJKUnifiedIdeographsExtensionB +extern __typeof (xmlUCSIsCJKUnifiedIdeographsExtensionB) xmlUCSIsCJKUnifiedIdeographsExtensionB__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsCJKUnifiedIdeographsExtensionB xmlUCSIsCJKUnifiedIdeographsExtensionB__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsCat +extern __typeof (xmlUCSIsCat) xmlUCSIsCat __attribute((alias("xmlUCSIsCat__internal_alias"))); +#else +#ifndef xmlUCSIsCat +extern __typeof (xmlUCSIsCat) xmlUCSIsCat__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsCat xmlUCSIsCat__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsCatC +extern __typeof (xmlUCSIsCatC) xmlUCSIsCatC __attribute((alias("xmlUCSIsCatC__internal_alias"))); +#else +#ifndef xmlUCSIsCatC +extern __typeof (xmlUCSIsCatC) xmlUCSIsCatC__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsCatC xmlUCSIsCatC__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsCatCc +extern __typeof (xmlUCSIsCatCc) xmlUCSIsCatCc __attribute((alias("xmlUCSIsCatCc__internal_alias"))); +#else +#ifndef xmlUCSIsCatCc +extern __typeof (xmlUCSIsCatCc) xmlUCSIsCatCc__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsCatCc xmlUCSIsCatCc__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsCatCf +extern __typeof (xmlUCSIsCatCf) xmlUCSIsCatCf __attribute((alias("xmlUCSIsCatCf__internal_alias"))); +#else +#ifndef xmlUCSIsCatCf +extern __typeof (xmlUCSIsCatCf) xmlUCSIsCatCf__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsCatCf xmlUCSIsCatCf__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsCatCo +extern __typeof (xmlUCSIsCatCo) xmlUCSIsCatCo __attribute((alias("xmlUCSIsCatCo__internal_alias"))); +#else +#ifndef xmlUCSIsCatCo +extern __typeof (xmlUCSIsCatCo) xmlUCSIsCatCo__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsCatCo xmlUCSIsCatCo__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsCatCs +extern __typeof (xmlUCSIsCatCs) xmlUCSIsCatCs __attribute((alias("xmlUCSIsCatCs__internal_alias"))); +#else +#ifndef xmlUCSIsCatCs +extern __typeof (xmlUCSIsCatCs) xmlUCSIsCatCs__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsCatCs xmlUCSIsCatCs__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsCatL +extern __typeof (xmlUCSIsCatL) xmlUCSIsCatL __attribute((alias("xmlUCSIsCatL__internal_alias"))); +#else +#ifndef xmlUCSIsCatL +extern __typeof (xmlUCSIsCatL) xmlUCSIsCatL__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsCatL xmlUCSIsCatL__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsCatLl +extern __typeof (xmlUCSIsCatLl) xmlUCSIsCatLl __attribute((alias("xmlUCSIsCatLl__internal_alias"))); +#else +#ifndef xmlUCSIsCatLl +extern __typeof (xmlUCSIsCatLl) xmlUCSIsCatLl__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsCatLl xmlUCSIsCatLl__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsCatLm +extern __typeof (xmlUCSIsCatLm) xmlUCSIsCatLm __attribute((alias("xmlUCSIsCatLm__internal_alias"))); +#else +#ifndef xmlUCSIsCatLm +extern __typeof (xmlUCSIsCatLm) xmlUCSIsCatLm__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsCatLm xmlUCSIsCatLm__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsCatLo +extern __typeof (xmlUCSIsCatLo) xmlUCSIsCatLo __attribute((alias("xmlUCSIsCatLo__internal_alias"))); +#else +#ifndef xmlUCSIsCatLo +extern __typeof (xmlUCSIsCatLo) xmlUCSIsCatLo__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsCatLo xmlUCSIsCatLo__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsCatLt +extern __typeof (xmlUCSIsCatLt) xmlUCSIsCatLt __attribute((alias("xmlUCSIsCatLt__internal_alias"))); +#else +#ifndef xmlUCSIsCatLt +extern __typeof (xmlUCSIsCatLt) xmlUCSIsCatLt__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsCatLt xmlUCSIsCatLt__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsCatLu +extern __typeof (xmlUCSIsCatLu) xmlUCSIsCatLu __attribute((alias("xmlUCSIsCatLu__internal_alias"))); +#else +#ifndef xmlUCSIsCatLu +extern __typeof (xmlUCSIsCatLu) xmlUCSIsCatLu__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsCatLu xmlUCSIsCatLu__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsCatM +extern __typeof (xmlUCSIsCatM) xmlUCSIsCatM __attribute((alias("xmlUCSIsCatM__internal_alias"))); +#else +#ifndef xmlUCSIsCatM +extern __typeof (xmlUCSIsCatM) xmlUCSIsCatM__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsCatM xmlUCSIsCatM__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsCatMc +extern __typeof (xmlUCSIsCatMc) xmlUCSIsCatMc __attribute((alias("xmlUCSIsCatMc__internal_alias"))); +#else +#ifndef xmlUCSIsCatMc +extern __typeof (xmlUCSIsCatMc) xmlUCSIsCatMc__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsCatMc xmlUCSIsCatMc__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsCatMe +extern __typeof (xmlUCSIsCatMe) xmlUCSIsCatMe __attribute((alias("xmlUCSIsCatMe__internal_alias"))); +#else +#ifndef xmlUCSIsCatMe +extern __typeof (xmlUCSIsCatMe) xmlUCSIsCatMe__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsCatMe xmlUCSIsCatMe__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsCatMn +extern __typeof (xmlUCSIsCatMn) xmlUCSIsCatMn __attribute((alias("xmlUCSIsCatMn__internal_alias"))); +#else +#ifndef xmlUCSIsCatMn +extern __typeof (xmlUCSIsCatMn) xmlUCSIsCatMn__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsCatMn xmlUCSIsCatMn__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsCatN +extern __typeof (xmlUCSIsCatN) xmlUCSIsCatN __attribute((alias("xmlUCSIsCatN__internal_alias"))); +#else +#ifndef xmlUCSIsCatN +extern __typeof (xmlUCSIsCatN) xmlUCSIsCatN__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsCatN xmlUCSIsCatN__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsCatNd +extern __typeof (xmlUCSIsCatNd) xmlUCSIsCatNd __attribute((alias("xmlUCSIsCatNd__internal_alias"))); +#else +#ifndef xmlUCSIsCatNd +extern __typeof (xmlUCSIsCatNd) xmlUCSIsCatNd__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsCatNd xmlUCSIsCatNd__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsCatNl +extern __typeof (xmlUCSIsCatNl) xmlUCSIsCatNl __attribute((alias("xmlUCSIsCatNl__internal_alias"))); +#else +#ifndef xmlUCSIsCatNl +extern __typeof (xmlUCSIsCatNl) xmlUCSIsCatNl__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsCatNl xmlUCSIsCatNl__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsCatNo +extern __typeof (xmlUCSIsCatNo) xmlUCSIsCatNo __attribute((alias("xmlUCSIsCatNo__internal_alias"))); +#else +#ifndef xmlUCSIsCatNo +extern __typeof (xmlUCSIsCatNo) xmlUCSIsCatNo__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsCatNo xmlUCSIsCatNo__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsCatP +extern __typeof (xmlUCSIsCatP) xmlUCSIsCatP __attribute((alias("xmlUCSIsCatP__internal_alias"))); +#else +#ifndef xmlUCSIsCatP +extern __typeof (xmlUCSIsCatP) xmlUCSIsCatP__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsCatP xmlUCSIsCatP__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsCatPc +extern __typeof (xmlUCSIsCatPc) xmlUCSIsCatPc __attribute((alias("xmlUCSIsCatPc__internal_alias"))); +#else +#ifndef xmlUCSIsCatPc +extern __typeof (xmlUCSIsCatPc) xmlUCSIsCatPc__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsCatPc xmlUCSIsCatPc__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsCatPd +extern __typeof (xmlUCSIsCatPd) xmlUCSIsCatPd __attribute((alias("xmlUCSIsCatPd__internal_alias"))); +#else +#ifndef xmlUCSIsCatPd +extern __typeof (xmlUCSIsCatPd) xmlUCSIsCatPd__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsCatPd xmlUCSIsCatPd__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsCatPe +extern __typeof (xmlUCSIsCatPe) xmlUCSIsCatPe __attribute((alias("xmlUCSIsCatPe__internal_alias"))); +#else +#ifndef xmlUCSIsCatPe +extern __typeof (xmlUCSIsCatPe) xmlUCSIsCatPe__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsCatPe xmlUCSIsCatPe__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsCatPf +extern __typeof (xmlUCSIsCatPf) xmlUCSIsCatPf __attribute((alias("xmlUCSIsCatPf__internal_alias"))); +#else +#ifndef xmlUCSIsCatPf +extern __typeof (xmlUCSIsCatPf) xmlUCSIsCatPf__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsCatPf xmlUCSIsCatPf__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsCatPi +extern __typeof (xmlUCSIsCatPi) xmlUCSIsCatPi __attribute((alias("xmlUCSIsCatPi__internal_alias"))); +#else +#ifndef xmlUCSIsCatPi +extern __typeof (xmlUCSIsCatPi) xmlUCSIsCatPi__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsCatPi xmlUCSIsCatPi__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsCatPo +extern __typeof (xmlUCSIsCatPo) xmlUCSIsCatPo __attribute((alias("xmlUCSIsCatPo__internal_alias"))); +#else +#ifndef xmlUCSIsCatPo +extern __typeof (xmlUCSIsCatPo) xmlUCSIsCatPo__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsCatPo xmlUCSIsCatPo__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsCatPs +extern __typeof (xmlUCSIsCatPs) xmlUCSIsCatPs __attribute((alias("xmlUCSIsCatPs__internal_alias"))); +#else +#ifndef xmlUCSIsCatPs +extern __typeof (xmlUCSIsCatPs) xmlUCSIsCatPs__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsCatPs xmlUCSIsCatPs__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsCatS +extern __typeof (xmlUCSIsCatS) xmlUCSIsCatS __attribute((alias("xmlUCSIsCatS__internal_alias"))); +#else +#ifndef xmlUCSIsCatS +extern __typeof (xmlUCSIsCatS) xmlUCSIsCatS__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsCatS xmlUCSIsCatS__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsCatSc +extern __typeof (xmlUCSIsCatSc) xmlUCSIsCatSc __attribute((alias("xmlUCSIsCatSc__internal_alias"))); +#else +#ifndef xmlUCSIsCatSc +extern __typeof (xmlUCSIsCatSc) xmlUCSIsCatSc__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsCatSc xmlUCSIsCatSc__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsCatSk +extern __typeof (xmlUCSIsCatSk) xmlUCSIsCatSk __attribute((alias("xmlUCSIsCatSk__internal_alias"))); +#else +#ifndef xmlUCSIsCatSk +extern __typeof (xmlUCSIsCatSk) xmlUCSIsCatSk__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsCatSk xmlUCSIsCatSk__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsCatSm +extern __typeof (xmlUCSIsCatSm) xmlUCSIsCatSm __attribute((alias("xmlUCSIsCatSm__internal_alias"))); +#else +#ifndef xmlUCSIsCatSm +extern __typeof (xmlUCSIsCatSm) xmlUCSIsCatSm__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsCatSm xmlUCSIsCatSm__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsCatSo +extern __typeof (xmlUCSIsCatSo) xmlUCSIsCatSo __attribute((alias("xmlUCSIsCatSo__internal_alias"))); +#else +#ifndef xmlUCSIsCatSo +extern __typeof (xmlUCSIsCatSo) xmlUCSIsCatSo__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsCatSo xmlUCSIsCatSo__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsCatZ +extern __typeof (xmlUCSIsCatZ) xmlUCSIsCatZ __attribute((alias("xmlUCSIsCatZ__internal_alias"))); +#else +#ifndef xmlUCSIsCatZ +extern __typeof (xmlUCSIsCatZ) xmlUCSIsCatZ__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsCatZ xmlUCSIsCatZ__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsCatZl +extern __typeof (xmlUCSIsCatZl) xmlUCSIsCatZl __attribute((alias("xmlUCSIsCatZl__internal_alias"))); +#else +#ifndef xmlUCSIsCatZl +extern __typeof (xmlUCSIsCatZl) xmlUCSIsCatZl__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsCatZl xmlUCSIsCatZl__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsCatZp +extern __typeof (xmlUCSIsCatZp) xmlUCSIsCatZp __attribute((alias("xmlUCSIsCatZp__internal_alias"))); +#else +#ifndef xmlUCSIsCatZp +extern __typeof (xmlUCSIsCatZp) xmlUCSIsCatZp__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsCatZp xmlUCSIsCatZp__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsCatZs +extern __typeof (xmlUCSIsCatZs) xmlUCSIsCatZs __attribute((alias("xmlUCSIsCatZs__internal_alias"))); +#else +#ifndef xmlUCSIsCatZs +extern __typeof (xmlUCSIsCatZs) xmlUCSIsCatZs__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsCatZs xmlUCSIsCatZs__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsCherokee +extern __typeof (xmlUCSIsCherokee) xmlUCSIsCherokee __attribute((alias("xmlUCSIsCherokee__internal_alias"))); +#else +#ifndef xmlUCSIsCherokee +extern __typeof (xmlUCSIsCherokee) xmlUCSIsCherokee__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsCherokee xmlUCSIsCherokee__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsCombiningDiacriticalMarks +extern __typeof (xmlUCSIsCombiningDiacriticalMarks) xmlUCSIsCombiningDiacriticalMarks __attribute((alias("xmlUCSIsCombiningDiacriticalMarks__internal_alias"))); +#else +#ifndef xmlUCSIsCombiningDiacriticalMarks +extern __typeof (xmlUCSIsCombiningDiacriticalMarks) xmlUCSIsCombiningDiacriticalMarks__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsCombiningDiacriticalMarks xmlUCSIsCombiningDiacriticalMarks__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsCombiningDiacriticalMarksforSymbols +extern __typeof (xmlUCSIsCombiningDiacriticalMarksforSymbols) xmlUCSIsCombiningDiacriticalMarksforSymbols __attribute((alias("xmlUCSIsCombiningDiacriticalMarksforSymbols__internal_alias"))); +#else +#ifndef xmlUCSIsCombiningDiacriticalMarksforSymbols +extern __typeof (xmlUCSIsCombiningDiacriticalMarksforSymbols) xmlUCSIsCombiningDiacriticalMarksforSymbols__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsCombiningDiacriticalMarksforSymbols xmlUCSIsCombiningDiacriticalMarksforSymbols__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsCombiningHalfMarks +extern __typeof (xmlUCSIsCombiningHalfMarks) xmlUCSIsCombiningHalfMarks __attribute((alias("xmlUCSIsCombiningHalfMarks__internal_alias"))); +#else +#ifndef xmlUCSIsCombiningHalfMarks +extern __typeof (xmlUCSIsCombiningHalfMarks) xmlUCSIsCombiningHalfMarks__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsCombiningHalfMarks xmlUCSIsCombiningHalfMarks__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsCombiningMarksforSymbols +extern __typeof (xmlUCSIsCombiningMarksforSymbols) xmlUCSIsCombiningMarksforSymbols __attribute((alias("xmlUCSIsCombiningMarksforSymbols__internal_alias"))); +#else +#ifndef xmlUCSIsCombiningMarksforSymbols +extern __typeof (xmlUCSIsCombiningMarksforSymbols) xmlUCSIsCombiningMarksforSymbols__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsCombiningMarksforSymbols xmlUCSIsCombiningMarksforSymbols__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsControlPictures +extern __typeof (xmlUCSIsControlPictures) xmlUCSIsControlPictures __attribute((alias("xmlUCSIsControlPictures__internal_alias"))); +#else +#ifndef xmlUCSIsControlPictures +extern __typeof (xmlUCSIsControlPictures) xmlUCSIsControlPictures__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsControlPictures xmlUCSIsControlPictures__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsCurrencySymbols +extern __typeof (xmlUCSIsCurrencySymbols) xmlUCSIsCurrencySymbols __attribute((alias("xmlUCSIsCurrencySymbols__internal_alias"))); +#else +#ifndef xmlUCSIsCurrencySymbols +extern __typeof (xmlUCSIsCurrencySymbols) xmlUCSIsCurrencySymbols__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsCurrencySymbols xmlUCSIsCurrencySymbols__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsCypriotSyllabary +extern __typeof (xmlUCSIsCypriotSyllabary) xmlUCSIsCypriotSyllabary __attribute((alias("xmlUCSIsCypriotSyllabary__internal_alias"))); +#else +#ifndef xmlUCSIsCypriotSyllabary +extern __typeof (xmlUCSIsCypriotSyllabary) xmlUCSIsCypriotSyllabary__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsCypriotSyllabary xmlUCSIsCypriotSyllabary__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsCyrillic +extern __typeof (xmlUCSIsCyrillic) xmlUCSIsCyrillic __attribute((alias("xmlUCSIsCyrillic__internal_alias"))); +#else +#ifndef xmlUCSIsCyrillic +extern __typeof (xmlUCSIsCyrillic) xmlUCSIsCyrillic__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsCyrillic xmlUCSIsCyrillic__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsCyrillicSupplement +extern __typeof (xmlUCSIsCyrillicSupplement) xmlUCSIsCyrillicSupplement __attribute((alias("xmlUCSIsCyrillicSupplement__internal_alias"))); +#else +#ifndef xmlUCSIsCyrillicSupplement +extern __typeof (xmlUCSIsCyrillicSupplement) xmlUCSIsCyrillicSupplement__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsCyrillicSupplement xmlUCSIsCyrillicSupplement__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsDeseret +extern __typeof (xmlUCSIsDeseret) xmlUCSIsDeseret __attribute((alias("xmlUCSIsDeseret__internal_alias"))); +#else +#ifndef xmlUCSIsDeseret +extern __typeof (xmlUCSIsDeseret) xmlUCSIsDeseret__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsDeseret xmlUCSIsDeseret__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsDevanagari +extern __typeof (xmlUCSIsDevanagari) xmlUCSIsDevanagari __attribute((alias("xmlUCSIsDevanagari__internal_alias"))); +#else +#ifndef xmlUCSIsDevanagari +extern __typeof (xmlUCSIsDevanagari) xmlUCSIsDevanagari__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsDevanagari xmlUCSIsDevanagari__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsDingbats +extern __typeof (xmlUCSIsDingbats) xmlUCSIsDingbats __attribute((alias("xmlUCSIsDingbats__internal_alias"))); +#else +#ifndef xmlUCSIsDingbats +extern __typeof (xmlUCSIsDingbats) xmlUCSIsDingbats__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsDingbats xmlUCSIsDingbats__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsEnclosedAlphanumerics +extern __typeof (xmlUCSIsEnclosedAlphanumerics) xmlUCSIsEnclosedAlphanumerics __attribute((alias("xmlUCSIsEnclosedAlphanumerics__internal_alias"))); +#else +#ifndef xmlUCSIsEnclosedAlphanumerics +extern __typeof (xmlUCSIsEnclosedAlphanumerics) xmlUCSIsEnclosedAlphanumerics__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsEnclosedAlphanumerics xmlUCSIsEnclosedAlphanumerics__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsEnclosedCJKLettersandMonths +extern __typeof (xmlUCSIsEnclosedCJKLettersandMonths) xmlUCSIsEnclosedCJKLettersandMonths __attribute((alias("xmlUCSIsEnclosedCJKLettersandMonths__internal_alias"))); +#else +#ifndef xmlUCSIsEnclosedCJKLettersandMonths +extern __typeof (xmlUCSIsEnclosedCJKLettersandMonths) xmlUCSIsEnclosedCJKLettersandMonths__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsEnclosedCJKLettersandMonths xmlUCSIsEnclosedCJKLettersandMonths__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsEthiopic +extern __typeof (xmlUCSIsEthiopic) xmlUCSIsEthiopic __attribute((alias("xmlUCSIsEthiopic__internal_alias"))); +#else +#ifndef xmlUCSIsEthiopic +extern __typeof (xmlUCSIsEthiopic) xmlUCSIsEthiopic__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsEthiopic xmlUCSIsEthiopic__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsGeneralPunctuation +extern __typeof (xmlUCSIsGeneralPunctuation) xmlUCSIsGeneralPunctuation __attribute((alias("xmlUCSIsGeneralPunctuation__internal_alias"))); +#else +#ifndef xmlUCSIsGeneralPunctuation +extern __typeof (xmlUCSIsGeneralPunctuation) xmlUCSIsGeneralPunctuation__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsGeneralPunctuation xmlUCSIsGeneralPunctuation__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsGeometricShapes +extern __typeof (xmlUCSIsGeometricShapes) xmlUCSIsGeometricShapes __attribute((alias("xmlUCSIsGeometricShapes__internal_alias"))); +#else +#ifndef xmlUCSIsGeometricShapes +extern __typeof (xmlUCSIsGeometricShapes) xmlUCSIsGeometricShapes__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsGeometricShapes xmlUCSIsGeometricShapes__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsGeorgian +extern __typeof (xmlUCSIsGeorgian) xmlUCSIsGeorgian __attribute((alias("xmlUCSIsGeorgian__internal_alias"))); +#else +#ifndef xmlUCSIsGeorgian +extern __typeof (xmlUCSIsGeorgian) xmlUCSIsGeorgian__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsGeorgian xmlUCSIsGeorgian__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsGothic +extern __typeof (xmlUCSIsGothic) xmlUCSIsGothic __attribute((alias("xmlUCSIsGothic__internal_alias"))); +#else +#ifndef xmlUCSIsGothic +extern __typeof (xmlUCSIsGothic) xmlUCSIsGothic__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsGothic xmlUCSIsGothic__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsGreek +extern __typeof (xmlUCSIsGreek) xmlUCSIsGreek __attribute((alias("xmlUCSIsGreek__internal_alias"))); +#else +#ifndef xmlUCSIsGreek +extern __typeof (xmlUCSIsGreek) xmlUCSIsGreek__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsGreek xmlUCSIsGreek__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsGreekExtended +extern __typeof (xmlUCSIsGreekExtended) xmlUCSIsGreekExtended __attribute((alias("xmlUCSIsGreekExtended__internal_alias"))); +#else +#ifndef xmlUCSIsGreekExtended +extern __typeof (xmlUCSIsGreekExtended) xmlUCSIsGreekExtended__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsGreekExtended xmlUCSIsGreekExtended__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsGreekandCoptic +extern __typeof (xmlUCSIsGreekandCoptic) xmlUCSIsGreekandCoptic __attribute((alias("xmlUCSIsGreekandCoptic__internal_alias"))); +#else +#ifndef xmlUCSIsGreekandCoptic +extern __typeof (xmlUCSIsGreekandCoptic) xmlUCSIsGreekandCoptic__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsGreekandCoptic xmlUCSIsGreekandCoptic__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsGujarati +extern __typeof (xmlUCSIsGujarati) xmlUCSIsGujarati __attribute((alias("xmlUCSIsGujarati__internal_alias"))); +#else +#ifndef xmlUCSIsGujarati +extern __typeof (xmlUCSIsGujarati) xmlUCSIsGujarati__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsGujarati xmlUCSIsGujarati__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsGurmukhi +extern __typeof (xmlUCSIsGurmukhi) xmlUCSIsGurmukhi __attribute((alias("xmlUCSIsGurmukhi__internal_alias"))); +#else +#ifndef xmlUCSIsGurmukhi +extern __typeof (xmlUCSIsGurmukhi) xmlUCSIsGurmukhi__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsGurmukhi xmlUCSIsGurmukhi__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsHalfwidthandFullwidthForms +extern __typeof (xmlUCSIsHalfwidthandFullwidthForms) xmlUCSIsHalfwidthandFullwidthForms __attribute((alias("xmlUCSIsHalfwidthandFullwidthForms__internal_alias"))); +#else +#ifndef xmlUCSIsHalfwidthandFullwidthForms +extern __typeof (xmlUCSIsHalfwidthandFullwidthForms) xmlUCSIsHalfwidthandFullwidthForms__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsHalfwidthandFullwidthForms xmlUCSIsHalfwidthandFullwidthForms__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsHangulCompatibilityJamo +extern __typeof (xmlUCSIsHangulCompatibilityJamo) xmlUCSIsHangulCompatibilityJamo __attribute((alias("xmlUCSIsHangulCompatibilityJamo__internal_alias"))); +#else +#ifndef xmlUCSIsHangulCompatibilityJamo +extern __typeof (xmlUCSIsHangulCompatibilityJamo) xmlUCSIsHangulCompatibilityJamo__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsHangulCompatibilityJamo xmlUCSIsHangulCompatibilityJamo__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsHangulJamo +extern __typeof (xmlUCSIsHangulJamo) xmlUCSIsHangulJamo __attribute((alias("xmlUCSIsHangulJamo__internal_alias"))); +#else +#ifndef xmlUCSIsHangulJamo +extern __typeof (xmlUCSIsHangulJamo) xmlUCSIsHangulJamo__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsHangulJamo xmlUCSIsHangulJamo__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsHangulSyllables +extern __typeof (xmlUCSIsHangulSyllables) xmlUCSIsHangulSyllables __attribute((alias("xmlUCSIsHangulSyllables__internal_alias"))); +#else +#ifndef xmlUCSIsHangulSyllables +extern __typeof (xmlUCSIsHangulSyllables) xmlUCSIsHangulSyllables__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsHangulSyllables xmlUCSIsHangulSyllables__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsHanunoo +extern __typeof (xmlUCSIsHanunoo) xmlUCSIsHanunoo __attribute((alias("xmlUCSIsHanunoo__internal_alias"))); +#else +#ifndef xmlUCSIsHanunoo +extern __typeof (xmlUCSIsHanunoo) xmlUCSIsHanunoo__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsHanunoo xmlUCSIsHanunoo__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsHebrew +extern __typeof (xmlUCSIsHebrew) xmlUCSIsHebrew __attribute((alias("xmlUCSIsHebrew__internal_alias"))); +#else +#ifndef xmlUCSIsHebrew +extern __typeof (xmlUCSIsHebrew) xmlUCSIsHebrew__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsHebrew xmlUCSIsHebrew__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsHighPrivateUseSurrogates +extern __typeof (xmlUCSIsHighPrivateUseSurrogates) xmlUCSIsHighPrivateUseSurrogates __attribute((alias("xmlUCSIsHighPrivateUseSurrogates__internal_alias"))); +#else +#ifndef xmlUCSIsHighPrivateUseSurrogates +extern __typeof (xmlUCSIsHighPrivateUseSurrogates) xmlUCSIsHighPrivateUseSurrogates__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsHighPrivateUseSurrogates xmlUCSIsHighPrivateUseSurrogates__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsHighSurrogates +extern __typeof (xmlUCSIsHighSurrogates) xmlUCSIsHighSurrogates __attribute((alias("xmlUCSIsHighSurrogates__internal_alias"))); +#else +#ifndef xmlUCSIsHighSurrogates +extern __typeof (xmlUCSIsHighSurrogates) xmlUCSIsHighSurrogates__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsHighSurrogates xmlUCSIsHighSurrogates__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsHiragana +extern __typeof (xmlUCSIsHiragana) xmlUCSIsHiragana __attribute((alias("xmlUCSIsHiragana__internal_alias"))); +#else +#ifndef xmlUCSIsHiragana +extern __typeof (xmlUCSIsHiragana) xmlUCSIsHiragana__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsHiragana xmlUCSIsHiragana__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsIPAExtensions +extern __typeof (xmlUCSIsIPAExtensions) xmlUCSIsIPAExtensions __attribute((alias("xmlUCSIsIPAExtensions__internal_alias"))); +#else +#ifndef xmlUCSIsIPAExtensions +extern __typeof (xmlUCSIsIPAExtensions) xmlUCSIsIPAExtensions__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsIPAExtensions xmlUCSIsIPAExtensions__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsIdeographicDescriptionCharacters +extern __typeof (xmlUCSIsIdeographicDescriptionCharacters) xmlUCSIsIdeographicDescriptionCharacters __attribute((alias("xmlUCSIsIdeographicDescriptionCharacters__internal_alias"))); +#else +#ifndef xmlUCSIsIdeographicDescriptionCharacters +extern __typeof (xmlUCSIsIdeographicDescriptionCharacters) xmlUCSIsIdeographicDescriptionCharacters__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsIdeographicDescriptionCharacters xmlUCSIsIdeographicDescriptionCharacters__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsKanbun +extern __typeof (xmlUCSIsKanbun) xmlUCSIsKanbun __attribute((alias("xmlUCSIsKanbun__internal_alias"))); +#else +#ifndef xmlUCSIsKanbun +extern __typeof (xmlUCSIsKanbun) xmlUCSIsKanbun__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsKanbun xmlUCSIsKanbun__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsKangxiRadicals +extern __typeof (xmlUCSIsKangxiRadicals) xmlUCSIsKangxiRadicals __attribute((alias("xmlUCSIsKangxiRadicals__internal_alias"))); +#else +#ifndef xmlUCSIsKangxiRadicals +extern __typeof (xmlUCSIsKangxiRadicals) xmlUCSIsKangxiRadicals__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsKangxiRadicals xmlUCSIsKangxiRadicals__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsKannada +extern __typeof (xmlUCSIsKannada) xmlUCSIsKannada __attribute((alias("xmlUCSIsKannada__internal_alias"))); +#else +#ifndef xmlUCSIsKannada +extern __typeof (xmlUCSIsKannada) xmlUCSIsKannada__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsKannada xmlUCSIsKannada__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsKatakana +extern __typeof (xmlUCSIsKatakana) xmlUCSIsKatakana __attribute((alias("xmlUCSIsKatakana__internal_alias"))); +#else +#ifndef xmlUCSIsKatakana +extern __typeof (xmlUCSIsKatakana) xmlUCSIsKatakana__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsKatakana xmlUCSIsKatakana__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsKatakanaPhoneticExtensions +extern __typeof (xmlUCSIsKatakanaPhoneticExtensions) xmlUCSIsKatakanaPhoneticExtensions __attribute((alias("xmlUCSIsKatakanaPhoneticExtensions__internal_alias"))); +#else +#ifndef xmlUCSIsKatakanaPhoneticExtensions +extern __typeof (xmlUCSIsKatakanaPhoneticExtensions) xmlUCSIsKatakanaPhoneticExtensions__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsKatakanaPhoneticExtensions xmlUCSIsKatakanaPhoneticExtensions__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsKhmer +extern __typeof (xmlUCSIsKhmer) xmlUCSIsKhmer __attribute((alias("xmlUCSIsKhmer__internal_alias"))); +#else +#ifndef xmlUCSIsKhmer +extern __typeof (xmlUCSIsKhmer) xmlUCSIsKhmer__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsKhmer xmlUCSIsKhmer__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsKhmerSymbols +extern __typeof (xmlUCSIsKhmerSymbols) xmlUCSIsKhmerSymbols __attribute((alias("xmlUCSIsKhmerSymbols__internal_alias"))); +#else +#ifndef xmlUCSIsKhmerSymbols +extern __typeof (xmlUCSIsKhmerSymbols) xmlUCSIsKhmerSymbols__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsKhmerSymbols xmlUCSIsKhmerSymbols__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsLao +extern __typeof (xmlUCSIsLao) xmlUCSIsLao __attribute((alias("xmlUCSIsLao__internal_alias"))); +#else +#ifndef xmlUCSIsLao +extern __typeof (xmlUCSIsLao) xmlUCSIsLao__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsLao xmlUCSIsLao__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsLatin1Supplement +extern __typeof (xmlUCSIsLatin1Supplement) xmlUCSIsLatin1Supplement __attribute((alias("xmlUCSIsLatin1Supplement__internal_alias"))); +#else +#ifndef xmlUCSIsLatin1Supplement +extern __typeof (xmlUCSIsLatin1Supplement) xmlUCSIsLatin1Supplement__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsLatin1Supplement xmlUCSIsLatin1Supplement__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsLatinExtendedA +extern __typeof (xmlUCSIsLatinExtendedA) xmlUCSIsLatinExtendedA __attribute((alias("xmlUCSIsLatinExtendedA__internal_alias"))); +#else +#ifndef xmlUCSIsLatinExtendedA +extern __typeof (xmlUCSIsLatinExtendedA) xmlUCSIsLatinExtendedA__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsLatinExtendedA xmlUCSIsLatinExtendedA__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsLatinExtendedAdditional +extern __typeof (xmlUCSIsLatinExtendedAdditional) xmlUCSIsLatinExtendedAdditional __attribute((alias("xmlUCSIsLatinExtendedAdditional__internal_alias"))); +#else +#ifndef xmlUCSIsLatinExtendedAdditional +extern __typeof (xmlUCSIsLatinExtendedAdditional) xmlUCSIsLatinExtendedAdditional__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsLatinExtendedAdditional xmlUCSIsLatinExtendedAdditional__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsLatinExtendedB +extern __typeof (xmlUCSIsLatinExtendedB) xmlUCSIsLatinExtendedB __attribute((alias("xmlUCSIsLatinExtendedB__internal_alias"))); +#else +#ifndef xmlUCSIsLatinExtendedB +extern __typeof (xmlUCSIsLatinExtendedB) xmlUCSIsLatinExtendedB__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsLatinExtendedB xmlUCSIsLatinExtendedB__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsLetterlikeSymbols +extern __typeof (xmlUCSIsLetterlikeSymbols) xmlUCSIsLetterlikeSymbols __attribute((alias("xmlUCSIsLetterlikeSymbols__internal_alias"))); +#else +#ifndef xmlUCSIsLetterlikeSymbols +extern __typeof (xmlUCSIsLetterlikeSymbols) xmlUCSIsLetterlikeSymbols__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsLetterlikeSymbols xmlUCSIsLetterlikeSymbols__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsLimbu +extern __typeof (xmlUCSIsLimbu) xmlUCSIsLimbu __attribute((alias("xmlUCSIsLimbu__internal_alias"))); +#else +#ifndef xmlUCSIsLimbu +extern __typeof (xmlUCSIsLimbu) xmlUCSIsLimbu__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsLimbu xmlUCSIsLimbu__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsLinearBIdeograms +extern __typeof (xmlUCSIsLinearBIdeograms) xmlUCSIsLinearBIdeograms __attribute((alias("xmlUCSIsLinearBIdeograms__internal_alias"))); +#else +#ifndef xmlUCSIsLinearBIdeograms +extern __typeof (xmlUCSIsLinearBIdeograms) xmlUCSIsLinearBIdeograms__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsLinearBIdeograms xmlUCSIsLinearBIdeograms__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsLinearBSyllabary +extern __typeof (xmlUCSIsLinearBSyllabary) xmlUCSIsLinearBSyllabary __attribute((alias("xmlUCSIsLinearBSyllabary__internal_alias"))); +#else +#ifndef xmlUCSIsLinearBSyllabary +extern __typeof (xmlUCSIsLinearBSyllabary) xmlUCSIsLinearBSyllabary__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsLinearBSyllabary xmlUCSIsLinearBSyllabary__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsLowSurrogates +extern __typeof (xmlUCSIsLowSurrogates) xmlUCSIsLowSurrogates __attribute((alias("xmlUCSIsLowSurrogates__internal_alias"))); +#else +#ifndef xmlUCSIsLowSurrogates +extern __typeof (xmlUCSIsLowSurrogates) xmlUCSIsLowSurrogates__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsLowSurrogates xmlUCSIsLowSurrogates__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsMalayalam +extern __typeof (xmlUCSIsMalayalam) xmlUCSIsMalayalam __attribute((alias("xmlUCSIsMalayalam__internal_alias"))); +#else +#ifndef xmlUCSIsMalayalam +extern __typeof (xmlUCSIsMalayalam) xmlUCSIsMalayalam__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsMalayalam xmlUCSIsMalayalam__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsMathematicalAlphanumericSymbols +extern __typeof (xmlUCSIsMathematicalAlphanumericSymbols) xmlUCSIsMathematicalAlphanumericSymbols __attribute((alias("xmlUCSIsMathematicalAlphanumericSymbols__internal_alias"))); +#else +#ifndef xmlUCSIsMathematicalAlphanumericSymbols +extern __typeof (xmlUCSIsMathematicalAlphanumericSymbols) xmlUCSIsMathematicalAlphanumericSymbols__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsMathematicalAlphanumericSymbols xmlUCSIsMathematicalAlphanumericSymbols__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsMathematicalOperators +extern __typeof (xmlUCSIsMathematicalOperators) xmlUCSIsMathematicalOperators __attribute((alias("xmlUCSIsMathematicalOperators__internal_alias"))); +#else +#ifndef xmlUCSIsMathematicalOperators +extern __typeof (xmlUCSIsMathematicalOperators) xmlUCSIsMathematicalOperators__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsMathematicalOperators xmlUCSIsMathematicalOperators__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsMiscellaneousMathematicalSymbolsA +extern __typeof (xmlUCSIsMiscellaneousMathematicalSymbolsA) xmlUCSIsMiscellaneousMathematicalSymbolsA __attribute((alias("xmlUCSIsMiscellaneousMathematicalSymbolsA__internal_alias"))); +#else +#ifndef xmlUCSIsMiscellaneousMathematicalSymbolsA +extern __typeof (xmlUCSIsMiscellaneousMathematicalSymbolsA) xmlUCSIsMiscellaneousMathematicalSymbolsA__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsMiscellaneousMathematicalSymbolsA xmlUCSIsMiscellaneousMathematicalSymbolsA__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsMiscellaneousMathematicalSymbolsB +extern __typeof (xmlUCSIsMiscellaneousMathematicalSymbolsB) xmlUCSIsMiscellaneousMathematicalSymbolsB __attribute((alias("xmlUCSIsMiscellaneousMathematicalSymbolsB__internal_alias"))); +#else +#ifndef xmlUCSIsMiscellaneousMathematicalSymbolsB +extern __typeof (xmlUCSIsMiscellaneousMathematicalSymbolsB) xmlUCSIsMiscellaneousMathematicalSymbolsB__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsMiscellaneousMathematicalSymbolsB xmlUCSIsMiscellaneousMathematicalSymbolsB__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsMiscellaneousSymbols +extern __typeof (xmlUCSIsMiscellaneousSymbols) xmlUCSIsMiscellaneousSymbols __attribute((alias("xmlUCSIsMiscellaneousSymbols__internal_alias"))); +#else +#ifndef xmlUCSIsMiscellaneousSymbols +extern __typeof (xmlUCSIsMiscellaneousSymbols) xmlUCSIsMiscellaneousSymbols__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsMiscellaneousSymbols xmlUCSIsMiscellaneousSymbols__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsMiscellaneousSymbolsandArrows +extern __typeof (xmlUCSIsMiscellaneousSymbolsandArrows) xmlUCSIsMiscellaneousSymbolsandArrows __attribute((alias("xmlUCSIsMiscellaneousSymbolsandArrows__internal_alias"))); +#else +#ifndef xmlUCSIsMiscellaneousSymbolsandArrows +extern __typeof (xmlUCSIsMiscellaneousSymbolsandArrows) xmlUCSIsMiscellaneousSymbolsandArrows__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsMiscellaneousSymbolsandArrows xmlUCSIsMiscellaneousSymbolsandArrows__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsMiscellaneousTechnical +extern __typeof (xmlUCSIsMiscellaneousTechnical) xmlUCSIsMiscellaneousTechnical __attribute((alias("xmlUCSIsMiscellaneousTechnical__internal_alias"))); +#else +#ifndef xmlUCSIsMiscellaneousTechnical +extern __typeof (xmlUCSIsMiscellaneousTechnical) xmlUCSIsMiscellaneousTechnical__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsMiscellaneousTechnical xmlUCSIsMiscellaneousTechnical__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsMongolian +extern __typeof (xmlUCSIsMongolian) xmlUCSIsMongolian __attribute((alias("xmlUCSIsMongolian__internal_alias"))); +#else +#ifndef xmlUCSIsMongolian +extern __typeof (xmlUCSIsMongolian) xmlUCSIsMongolian__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsMongolian xmlUCSIsMongolian__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsMusicalSymbols +extern __typeof (xmlUCSIsMusicalSymbols) xmlUCSIsMusicalSymbols __attribute((alias("xmlUCSIsMusicalSymbols__internal_alias"))); +#else +#ifndef xmlUCSIsMusicalSymbols +extern __typeof (xmlUCSIsMusicalSymbols) xmlUCSIsMusicalSymbols__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsMusicalSymbols xmlUCSIsMusicalSymbols__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsMyanmar +extern __typeof (xmlUCSIsMyanmar) xmlUCSIsMyanmar __attribute((alias("xmlUCSIsMyanmar__internal_alias"))); +#else +#ifndef xmlUCSIsMyanmar +extern __typeof (xmlUCSIsMyanmar) xmlUCSIsMyanmar__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsMyanmar xmlUCSIsMyanmar__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsNumberForms +extern __typeof (xmlUCSIsNumberForms) xmlUCSIsNumberForms __attribute((alias("xmlUCSIsNumberForms__internal_alias"))); +#else +#ifndef xmlUCSIsNumberForms +extern __typeof (xmlUCSIsNumberForms) xmlUCSIsNumberForms__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsNumberForms xmlUCSIsNumberForms__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsOgham +extern __typeof (xmlUCSIsOgham) xmlUCSIsOgham __attribute((alias("xmlUCSIsOgham__internal_alias"))); +#else +#ifndef xmlUCSIsOgham +extern __typeof (xmlUCSIsOgham) xmlUCSIsOgham__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsOgham xmlUCSIsOgham__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsOldItalic +extern __typeof (xmlUCSIsOldItalic) xmlUCSIsOldItalic __attribute((alias("xmlUCSIsOldItalic__internal_alias"))); +#else +#ifndef xmlUCSIsOldItalic +extern __typeof (xmlUCSIsOldItalic) xmlUCSIsOldItalic__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsOldItalic xmlUCSIsOldItalic__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsOpticalCharacterRecognition +extern __typeof (xmlUCSIsOpticalCharacterRecognition) xmlUCSIsOpticalCharacterRecognition __attribute((alias("xmlUCSIsOpticalCharacterRecognition__internal_alias"))); +#else +#ifndef xmlUCSIsOpticalCharacterRecognition +extern __typeof (xmlUCSIsOpticalCharacterRecognition) xmlUCSIsOpticalCharacterRecognition__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsOpticalCharacterRecognition xmlUCSIsOpticalCharacterRecognition__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsOriya +extern __typeof (xmlUCSIsOriya) xmlUCSIsOriya __attribute((alias("xmlUCSIsOriya__internal_alias"))); +#else +#ifndef xmlUCSIsOriya +extern __typeof (xmlUCSIsOriya) xmlUCSIsOriya__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsOriya xmlUCSIsOriya__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsOsmanya +extern __typeof (xmlUCSIsOsmanya) xmlUCSIsOsmanya __attribute((alias("xmlUCSIsOsmanya__internal_alias"))); +#else +#ifndef xmlUCSIsOsmanya +extern __typeof (xmlUCSIsOsmanya) xmlUCSIsOsmanya__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsOsmanya xmlUCSIsOsmanya__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsPhoneticExtensions +extern __typeof (xmlUCSIsPhoneticExtensions) xmlUCSIsPhoneticExtensions __attribute((alias("xmlUCSIsPhoneticExtensions__internal_alias"))); +#else +#ifndef xmlUCSIsPhoneticExtensions +extern __typeof (xmlUCSIsPhoneticExtensions) xmlUCSIsPhoneticExtensions__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsPhoneticExtensions xmlUCSIsPhoneticExtensions__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsPrivateUse +extern __typeof (xmlUCSIsPrivateUse) xmlUCSIsPrivateUse __attribute((alias("xmlUCSIsPrivateUse__internal_alias"))); +#else +#ifndef xmlUCSIsPrivateUse +extern __typeof (xmlUCSIsPrivateUse) xmlUCSIsPrivateUse__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsPrivateUse xmlUCSIsPrivateUse__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsPrivateUseArea +extern __typeof (xmlUCSIsPrivateUseArea) xmlUCSIsPrivateUseArea __attribute((alias("xmlUCSIsPrivateUseArea__internal_alias"))); +#else +#ifndef xmlUCSIsPrivateUseArea +extern __typeof (xmlUCSIsPrivateUseArea) xmlUCSIsPrivateUseArea__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsPrivateUseArea xmlUCSIsPrivateUseArea__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsRunic +extern __typeof (xmlUCSIsRunic) xmlUCSIsRunic __attribute((alias("xmlUCSIsRunic__internal_alias"))); +#else +#ifndef xmlUCSIsRunic +extern __typeof (xmlUCSIsRunic) xmlUCSIsRunic__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsRunic xmlUCSIsRunic__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsShavian +extern __typeof (xmlUCSIsShavian) xmlUCSIsShavian __attribute((alias("xmlUCSIsShavian__internal_alias"))); +#else +#ifndef xmlUCSIsShavian +extern __typeof (xmlUCSIsShavian) xmlUCSIsShavian__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsShavian xmlUCSIsShavian__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsSinhala +extern __typeof (xmlUCSIsSinhala) xmlUCSIsSinhala __attribute((alias("xmlUCSIsSinhala__internal_alias"))); +#else +#ifndef xmlUCSIsSinhala +extern __typeof (xmlUCSIsSinhala) xmlUCSIsSinhala__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsSinhala xmlUCSIsSinhala__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsSmallFormVariants +extern __typeof (xmlUCSIsSmallFormVariants) xmlUCSIsSmallFormVariants __attribute((alias("xmlUCSIsSmallFormVariants__internal_alias"))); +#else +#ifndef xmlUCSIsSmallFormVariants +extern __typeof (xmlUCSIsSmallFormVariants) xmlUCSIsSmallFormVariants__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsSmallFormVariants xmlUCSIsSmallFormVariants__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsSpacingModifierLetters +extern __typeof (xmlUCSIsSpacingModifierLetters) xmlUCSIsSpacingModifierLetters __attribute((alias("xmlUCSIsSpacingModifierLetters__internal_alias"))); +#else +#ifndef xmlUCSIsSpacingModifierLetters +extern __typeof (xmlUCSIsSpacingModifierLetters) xmlUCSIsSpacingModifierLetters__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsSpacingModifierLetters xmlUCSIsSpacingModifierLetters__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsSpecials +extern __typeof (xmlUCSIsSpecials) xmlUCSIsSpecials __attribute((alias("xmlUCSIsSpecials__internal_alias"))); +#else +#ifndef xmlUCSIsSpecials +extern __typeof (xmlUCSIsSpecials) xmlUCSIsSpecials__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsSpecials xmlUCSIsSpecials__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsSuperscriptsandSubscripts +extern __typeof (xmlUCSIsSuperscriptsandSubscripts) xmlUCSIsSuperscriptsandSubscripts __attribute((alias("xmlUCSIsSuperscriptsandSubscripts__internal_alias"))); +#else +#ifndef xmlUCSIsSuperscriptsandSubscripts +extern __typeof (xmlUCSIsSuperscriptsandSubscripts) xmlUCSIsSuperscriptsandSubscripts__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsSuperscriptsandSubscripts xmlUCSIsSuperscriptsandSubscripts__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsSupplementalArrowsA +extern __typeof (xmlUCSIsSupplementalArrowsA) xmlUCSIsSupplementalArrowsA __attribute((alias("xmlUCSIsSupplementalArrowsA__internal_alias"))); +#else +#ifndef xmlUCSIsSupplementalArrowsA +extern __typeof (xmlUCSIsSupplementalArrowsA) xmlUCSIsSupplementalArrowsA__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsSupplementalArrowsA xmlUCSIsSupplementalArrowsA__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsSupplementalArrowsB +extern __typeof (xmlUCSIsSupplementalArrowsB) xmlUCSIsSupplementalArrowsB __attribute((alias("xmlUCSIsSupplementalArrowsB__internal_alias"))); +#else +#ifndef xmlUCSIsSupplementalArrowsB +extern __typeof (xmlUCSIsSupplementalArrowsB) xmlUCSIsSupplementalArrowsB__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsSupplementalArrowsB xmlUCSIsSupplementalArrowsB__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsSupplementalMathematicalOperators +extern __typeof (xmlUCSIsSupplementalMathematicalOperators) xmlUCSIsSupplementalMathematicalOperators __attribute((alias("xmlUCSIsSupplementalMathematicalOperators__internal_alias"))); +#else +#ifndef xmlUCSIsSupplementalMathematicalOperators +extern __typeof (xmlUCSIsSupplementalMathematicalOperators) xmlUCSIsSupplementalMathematicalOperators__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsSupplementalMathematicalOperators xmlUCSIsSupplementalMathematicalOperators__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsSupplementaryPrivateUseAreaA +extern __typeof (xmlUCSIsSupplementaryPrivateUseAreaA) xmlUCSIsSupplementaryPrivateUseAreaA __attribute((alias("xmlUCSIsSupplementaryPrivateUseAreaA__internal_alias"))); +#else +#ifndef xmlUCSIsSupplementaryPrivateUseAreaA +extern __typeof (xmlUCSIsSupplementaryPrivateUseAreaA) xmlUCSIsSupplementaryPrivateUseAreaA__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsSupplementaryPrivateUseAreaA xmlUCSIsSupplementaryPrivateUseAreaA__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsSupplementaryPrivateUseAreaB +extern __typeof (xmlUCSIsSupplementaryPrivateUseAreaB) xmlUCSIsSupplementaryPrivateUseAreaB __attribute((alias("xmlUCSIsSupplementaryPrivateUseAreaB__internal_alias"))); +#else +#ifndef xmlUCSIsSupplementaryPrivateUseAreaB +extern __typeof (xmlUCSIsSupplementaryPrivateUseAreaB) xmlUCSIsSupplementaryPrivateUseAreaB__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsSupplementaryPrivateUseAreaB xmlUCSIsSupplementaryPrivateUseAreaB__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsSyriac +extern __typeof (xmlUCSIsSyriac) xmlUCSIsSyriac __attribute((alias("xmlUCSIsSyriac__internal_alias"))); +#else +#ifndef xmlUCSIsSyriac +extern __typeof (xmlUCSIsSyriac) xmlUCSIsSyriac__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsSyriac xmlUCSIsSyriac__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsTagalog +extern __typeof (xmlUCSIsTagalog) xmlUCSIsTagalog __attribute((alias("xmlUCSIsTagalog__internal_alias"))); +#else +#ifndef xmlUCSIsTagalog +extern __typeof (xmlUCSIsTagalog) xmlUCSIsTagalog__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsTagalog xmlUCSIsTagalog__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsTagbanwa +extern __typeof (xmlUCSIsTagbanwa) xmlUCSIsTagbanwa __attribute((alias("xmlUCSIsTagbanwa__internal_alias"))); +#else +#ifndef xmlUCSIsTagbanwa +extern __typeof (xmlUCSIsTagbanwa) xmlUCSIsTagbanwa__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsTagbanwa xmlUCSIsTagbanwa__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsTags +extern __typeof (xmlUCSIsTags) xmlUCSIsTags __attribute((alias("xmlUCSIsTags__internal_alias"))); +#else +#ifndef xmlUCSIsTags +extern __typeof (xmlUCSIsTags) xmlUCSIsTags__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsTags xmlUCSIsTags__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsTaiLe +extern __typeof (xmlUCSIsTaiLe) xmlUCSIsTaiLe __attribute((alias("xmlUCSIsTaiLe__internal_alias"))); +#else +#ifndef xmlUCSIsTaiLe +extern __typeof (xmlUCSIsTaiLe) xmlUCSIsTaiLe__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsTaiLe xmlUCSIsTaiLe__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsTaiXuanJingSymbols +extern __typeof (xmlUCSIsTaiXuanJingSymbols) xmlUCSIsTaiXuanJingSymbols __attribute((alias("xmlUCSIsTaiXuanJingSymbols__internal_alias"))); +#else +#ifndef xmlUCSIsTaiXuanJingSymbols +extern __typeof (xmlUCSIsTaiXuanJingSymbols) xmlUCSIsTaiXuanJingSymbols__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsTaiXuanJingSymbols xmlUCSIsTaiXuanJingSymbols__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsTamil +extern __typeof (xmlUCSIsTamil) xmlUCSIsTamil __attribute((alias("xmlUCSIsTamil__internal_alias"))); +#else +#ifndef xmlUCSIsTamil +extern __typeof (xmlUCSIsTamil) xmlUCSIsTamil__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsTamil xmlUCSIsTamil__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsTelugu +extern __typeof (xmlUCSIsTelugu) xmlUCSIsTelugu __attribute((alias("xmlUCSIsTelugu__internal_alias"))); +#else +#ifndef xmlUCSIsTelugu +extern __typeof (xmlUCSIsTelugu) xmlUCSIsTelugu__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsTelugu xmlUCSIsTelugu__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsThaana +extern __typeof (xmlUCSIsThaana) xmlUCSIsThaana __attribute((alias("xmlUCSIsThaana__internal_alias"))); +#else +#ifndef xmlUCSIsThaana +extern __typeof (xmlUCSIsThaana) xmlUCSIsThaana__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsThaana xmlUCSIsThaana__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsThai +extern __typeof (xmlUCSIsThai) xmlUCSIsThai __attribute((alias("xmlUCSIsThai__internal_alias"))); +#else +#ifndef xmlUCSIsThai +extern __typeof (xmlUCSIsThai) xmlUCSIsThai__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsThai xmlUCSIsThai__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsTibetan +extern __typeof (xmlUCSIsTibetan) xmlUCSIsTibetan __attribute((alias("xmlUCSIsTibetan__internal_alias"))); +#else +#ifndef xmlUCSIsTibetan +extern __typeof (xmlUCSIsTibetan) xmlUCSIsTibetan__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsTibetan xmlUCSIsTibetan__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsUgaritic +extern __typeof (xmlUCSIsUgaritic) xmlUCSIsUgaritic __attribute((alias("xmlUCSIsUgaritic__internal_alias"))); +#else +#ifndef xmlUCSIsUgaritic +extern __typeof (xmlUCSIsUgaritic) xmlUCSIsUgaritic__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsUgaritic xmlUCSIsUgaritic__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsUnifiedCanadianAboriginalSyllabics +extern __typeof (xmlUCSIsUnifiedCanadianAboriginalSyllabics) xmlUCSIsUnifiedCanadianAboriginalSyllabics __attribute((alias("xmlUCSIsUnifiedCanadianAboriginalSyllabics__internal_alias"))); +#else +#ifndef xmlUCSIsUnifiedCanadianAboriginalSyllabics +extern __typeof (xmlUCSIsUnifiedCanadianAboriginalSyllabics) xmlUCSIsUnifiedCanadianAboriginalSyllabics__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsUnifiedCanadianAboriginalSyllabics xmlUCSIsUnifiedCanadianAboriginalSyllabics__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsVariationSelectors +extern __typeof (xmlUCSIsVariationSelectors) xmlUCSIsVariationSelectors __attribute((alias("xmlUCSIsVariationSelectors__internal_alias"))); +#else +#ifndef xmlUCSIsVariationSelectors +extern __typeof (xmlUCSIsVariationSelectors) xmlUCSIsVariationSelectors__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsVariationSelectors xmlUCSIsVariationSelectors__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsVariationSelectorsSupplement +extern __typeof (xmlUCSIsVariationSelectorsSupplement) xmlUCSIsVariationSelectorsSupplement __attribute((alias("xmlUCSIsVariationSelectorsSupplement__internal_alias"))); +#else +#ifndef xmlUCSIsVariationSelectorsSupplement +extern __typeof (xmlUCSIsVariationSelectorsSupplement) xmlUCSIsVariationSelectorsSupplement__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsVariationSelectorsSupplement xmlUCSIsVariationSelectorsSupplement__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsYiRadicals +extern __typeof (xmlUCSIsYiRadicals) xmlUCSIsYiRadicals __attribute((alias("xmlUCSIsYiRadicals__internal_alias"))); +#else +#ifndef xmlUCSIsYiRadicals +extern __typeof (xmlUCSIsYiRadicals) xmlUCSIsYiRadicals__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsYiRadicals xmlUCSIsYiRadicals__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsYiSyllables +extern __typeof (xmlUCSIsYiSyllables) xmlUCSIsYiSyllables __attribute((alias("xmlUCSIsYiSyllables__internal_alias"))); +#else +#ifndef xmlUCSIsYiSyllables +extern __typeof (xmlUCSIsYiSyllables) xmlUCSIsYiSyllables__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsYiSyllables xmlUCSIsYiSyllables__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_UNICODE_ENABLED) +#ifdef bottom_xmlunicode +#undef xmlUCSIsYijingHexagramSymbols +extern __typeof (xmlUCSIsYijingHexagramSymbols) xmlUCSIsYijingHexagramSymbols __attribute((alias("xmlUCSIsYijingHexagramSymbols__internal_alias"))); +#else +#ifndef xmlUCSIsYijingHexagramSymbols +extern __typeof (xmlUCSIsYijingHexagramSymbols) xmlUCSIsYijingHexagramSymbols__internal_alias __attribute((visibility("hidden"))); +#define xmlUCSIsYijingHexagramSymbols xmlUCSIsYijingHexagramSymbols__internal_alias +#endif +#endif +#endif + +#ifdef bottom_uri +#undef xmlURIEscape +extern __typeof (xmlURIEscape) xmlURIEscape __attribute((alias("xmlURIEscape__internal_alias"))); +#else +#ifndef xmlURIEscape +extern __typeof (xmlURIEscape) xmlURIEscape__internal_alias __attribute((visibility("hidden"))); +#define xmlURIEscape xmlURIEscape__internal_alias +#endif +#endif + +#ifdef bottom_uri +#undef xmlURIEscapeStr +extern __typeof (xmlURIEscapeStr) xmlURIEscapeStr __attribute((alias("xmlURIEscapeStr__internal_alias"))); +#else +#ifndef xmlURIEscapeStr +extern __typeof (xmlURIEscapeStr) xmlURIEscapeStr__internal_alias __attribute((visibility("hidden"))); +#define xmlURIEscapeStr xmlURIEscapeStr__internal_alias +#endif +#endif + +#ifdef bottom_uri +#undef xmlURIUnescapeString +extern __typeof (xmlURIUnescapeString) xmlURIUnescapeString __attribute((alias("xmlURIUnescapeString__internal_alias"))); +#else +#ifndef xmlURIUnescapeString +extern __typeof (xmlURIUnescapeString) xmlURIUnescapeString__internal_alias __attribute((visibility("hidden"))); +#define xmlURIUnescapeString xmlURIUnescapeString__internal_alias +#endif +#endif + +#ifdef bottom_xmlstring +#undef xmlUTF8Charcmp +extern __typeof (xmlUTF8Charcmp) xmlUTF8Charcmp __attribute((alias("xmlUTF8Charcmp__internal_alias"))); +#else +#ifndef xmlUTF8Charcmp +extern __typeof (xmlUTF8Charcmp) xmlUTF8Charcmp__internal_alias __attribute((visibility("hidden"))); +#define xmlUTF8Charcmp xmlUTF8Charcmp__internal_alias +#endif +#endif + +#ifdef bottom_xmlstring +#undef xmlUTF8Size +extern __typeof (xmlUTF8Size) xmlUTF8Size __attribute((alias("xmlUTF8Size__internal_alias"))); +#else +#ifndef xmlUTF8Size +extern __typeof (xmlUTF8Size) xmlUTF8Size__internal_alias __attribute((visibility("hidden"))); +#define xmlUTF8Size xmlUTF8Size__internal_alias +#endif +#endif + +#ifdef bottom_xmlstring +#undef xmlUTF8Strlen +extern __typeof (xmlUTF8Strlen) xmlUTF8Strlen __attribute((alias("xmlUTF8Strlen__internal_alias"))); +#else +#ifndef xmlUTF8Strlen +extern __typeof (xmlUTF8Strlen) xmlUTF8Strlen__internal_alias __attribute((visibility("hidden"))); +#define xmlUTF8Strlen xmlUTF8Strlen__internal_alias +#endif +#endif + +#ifdef bottom_xmlstring +#undef xmlUTF8Strloc +extern __typeof (xmlUTF8Strloc) xmlUTF8Strloc __attribute((alias("xmlUTF8Strloc__internal_alias"))); +#else +#ifndef xmlUTF8Strloc +extern __typeof (xmlUTF8Strloc) xmlUTF8Strloc__internal_alias __attribute((visibility("hidden"))); +#define xmlUTF8Strloc xmlUTF8Strloc__internal_alias +#endif +#endif + +#ifdef bottom_xmlstring +#undef xmlUTF8Strndup +extern __typeof (xmlUTF8Strndup) xmlUTF8Strndup __attribute((alias("xmlUTF8Strndup__internal_alias"))); +#else +#ifndef xmlUTF8Strndup +extern __typeof (xmlUTF8Strndup) xmlUTF8Strndup__internal_alias __attribute((visibility("hidden"))); +#define xmlUTF8Strndup xmlUTF8Strndup__internal_alias +#endif +#endif + +#ifdef bottom_xmlstring +#undef xmlUTF8Strpos +extern __typeof (xmlUTF8Strpos) xmlUTF8Strpos __attribute((alias("xmlUTF8Strpos__internal_alias"))); +#else +#ifndef xmlUTF8Strpos +extern __typeof (xmlUTF8Strpos) xmlUTF8Strpos__internal_alias __attribute((visibility("hidden"))); +#define xmlUTF8Strpos xmlUTF8Strpos__internal_alias +#endif +#endif + +#ifdef bottom_xmlstring +#undef xmlUTF8Strsize +extern __typeof (xmlUTF8Strsize) xmlUTF8Strsize __attribute((alias("xmlUTF8Strsize__internal_alias"))); +#else +#ifndef xmlUTF8Strsize +extern __typeof (xmlUTF8Strsize) xmlUTF8Strsize__internal_alias __attribute((visibility("hidden"))); +#define xmlUTF8Strsize xmlUTF8Strsize__internal_alias +#endif +#endif + +#ifdef bottom_xmlstring +#undef xmlUTF8Strsub +extern __typeof (xmlUTF8Strsub) xmlUTF8Strsub __attribute((alias("xmlUTF8Strsub__internal_alias"))); +#else +#ifndef xmlUTF8Strsub +extern __typeof (xmlUTF8Strsub) xmlUTF8Strsub__internal_alias __attribute((visibility("hidden"))); +#define xmlUTF8Strsub xmlUTF8Strsub__internal_alias +#endif +#endif + +#ifdef bottom_tree +#undef xmlUnlinkNode +extern __typeof (xmlUnlinkNode) xmlUnlinkNode __attribute((alias("xmlUnlinkNode__internal_alias"))); +#else +#ifndef xmlUnlinkNode +extern __typeof (xmlUnlinkNode) xmlUnlinkNode__internal_alias __attribute((visibility("hidden"))); +#define xmlUnlinkNode xmlUnlinkNode__internal_alias +#endif +#endif + +#ifdef bottom_threads +#undef xmlUnlockLibrary +extern __typeof (xmlUnlockLibrary) xmlUnlockLibrary __attribute((alias("xmlUnlockLibrary__internal_alias"))); +#else +#ifndef xmlUnlockLibrary +extern __typeof (xmlUnlockLibrary) xmlUnlockLibrary__internal_alias __attribute((visibility("hidden"))); +#define xmlUnlockLibrary xmlUnlockLibrary__internal_alias +#endif +#endif + +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_tree +#undef xmlUnsetNsProp +extern __typeof (xmlUnsetNsProp) xmlUnsetNsProp __attribute((alias("xmlUnsetNsProp__internal_alias"))); +#else +#ifndef xmlUnsetNsProp +extern __typeof (xmlUnsetNsProp) xmlUnsetNsProp__internal_alias __attribute((visibility("hidden"))); +#define xmlUnsetNsProp xmlUnsetNsProp__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_tree +#undef xmlUnsetProp +extern __typeof (xmlUnsetProp) xmlUnsetProp __attribute((alias("xmlUnsetProp__internal_alias"))); +#else +#ifndef xmlUnsetProp +extern __typeof (xmlUnsetProp) xmlUnsetProp__internal_alias __attribute((visibility("hidden"))); +#define xmlUnsetProp xmlUnsetProp__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_VALID_ENABLED) && defined(LIBXML_REGEXP_ENABLED) +#ifdef bottom_valid +#undef xmlValidBuildContentModel +extern __typeof (xmlValidBuildContentModel) xmlValidBuildContentModel __attribute((alias("xmlValidBuildContentModel__internal_alias"))); +#else +#ifndef xmlValidBuildContentModel +extern __typeof (xmlValidBuildContentModel) xmlValidBuildContentModel__internal_alias __attribute((visibility("hidden"))); +#define xmlValidBuildContentModel xmlValidBuildContentModel__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_VALID_ENABLED) +#ifdef bottom_valid +#undef xmlValidCtxtNormalizeAttributeValue +extern __typeof (xmlValidCtxtNormalizeAttributeValue) xmlValidCtxtNormalizeAttributeValue __attribute((alias("xmlValidCtxtNormalizeAttributeValue__internal_alias"))); +#else +#ifndef xmlValidCtxtNormalizeAttributeValue +extern __typeof (xmlValidCtxtNormalizeAttributeValue) xmlValidCtxtNormalizeAttributeValue__internal_alias __attribute((visibility("hidden"))); +#define xmlValidCtxtNormalizeAttributeValue xmlValidCtxtNormalizeAttributeValue__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_VALID_ENABLED) +#ifdef bottom_valid +#undef xmlValidGetPotentialChildren +extern __typeof (xmlValidGetPotentialChildren) xmlValidGetPotentialChildren __attribute((alias("xmlValidGetPotentialChildren__internal_alias"))); +#else +#ifndef xmlValidGetPotentialChildren +extern __typeof (xmlValidGetPotentialChildren) xmlValidGetPotentialChildren__internal_alias __attribute((visibility("hidden"))); +#define xmlValidGetPotentialChildren xmlValidGetPotentialChildren__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_VALID_ENABLED) +#ifdef bottom_valid +#undef xmlValidGetValidElements +extern __typeof (xmlValidGetValidElements) xmlValidGetValidElements __attribute((alias("xmlValidGetValidElements__internal_alias"))); +#else +#ifndef xmlValidGetValidElements +extern __typeof (xmlValidGetValidElements) xmlValidGetValidElements__internal_alias __attribute((visibility("hidden"))); +#define xmlValidGetValidElements xmlValidGetValidElements__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_VALID_ENABLED) +#ifdef bottom_valid +#undef xmlValidNormalizeAttributeValue +extern __typeof (xmlValidNormalizeAttributeValue) xmlValidNormalizeAttributeValue __attribute((alias("xmlValidNormalizeAttributeValue__internal_alias"))); +#else +#ifndef xmlValidNormalizeAttributeValue +extern __typeof (xmlValidNormalizeAttributeValue) xmlValidNormalizeAttributeValue__internal_alias __attribute((visibility("hidden"))); +#define xmlValidNormalizeAttributeValue xmlValidNormalizeAttributeValue__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_VALID_ENABLED) +#ifdef bottom_valid +#undef xmlValidateAttributeDecl +extern __typeof (xmlValidateAttributeDecl) xmlValidateAttributeDecl __attribute((alias("xmlValidateAttributeDecl__internal_alias"))); +#else +#ifndef xmlValidateAttributeDecl +extern __typeof (xmlValidateAttributeDecl) xmlValidateAttributeDecl__internal_alias __attribute((visibility("hidden"))); +#define xmlValidateAttributeDecl xmlValidateAttributeDecl__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_VALID_ENABLED) +#ifdef bottom_valid +#undef xmlValidateAttributeValue +extern __typeof (xmlValidateAttributeValue) xmlValidateAttributeValue __attribute((alias("xmlValidateAttributeValue__internal_alias"))); +#else +#ifndef xmlValidateAttributeValue +extern __typeof (xmlValidateAttributeValue) xmlValidateAttributeValue__internal_alias __attribute((visibility("hidden"))); +#define xmlValidateAttributeValue xmlValidateAttributeValue__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_VALID_ENABLED) +#ifdef bottom_valid +#undef xmlValidateDocument +extern __typeof (xmlValidateDocument) xmlValidateDocument __attribute((alias("xmlValidateDocument__internal_alias"))); +#else +#ifndef xmlValidateDocument +extern __typeof (xmlValidateDocument) xmlValidateDocument__internal_alias __attribute((visibility("hidden"))); +#define xmlValidateDocument xmlValidateDocument__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_VALID_ENABLED) +#ifdef bottom_valid +#undef xmlValidateDocumentFinal +extern __typeof (xmlValidateDocumentFinal) xmlValidateDocumentFinal __attribute((alias("xmlValidateDocumentFinal__internal_alias"))); +#else +#ifndef xmlValidateDocumentFinal +extern __typeof (xmlValidateDocumentFinal) xmlValidateDocumentFinal__internal_alias __attribute((visibility("hidden"))); +#define xmlValidateDocumentFinal xmlValidateDocumentFinal__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_VALID_ENABLED) +#ifdef bottom_valid +#undef xmlValidateDtd +extern __typeof (xmlValidateDtd) xmlValidateDtd __attribute((alias("xmlValidateDtd__internal_alias"))); +#else +#ifndef xmlValidateDtd +extern __typeof (xmlValidateDtd) xmlValidateDtd__internal_alias __attribute((visibility("hidden"))); +#define xmlValidateDtd xmlValidateDtd__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_VALID_ENABLED) +#ifdef bottom_valid +#undef xmlValidateDtdFinal +extern __typeof (xmlValidateDtdFinal) xmlValidateDtdFinal __attribute((alias("xmlValidateDtdFinal__internal_alias"))); +#else +#ifndef xmlValidateDtdFinal +extern __typeof (xmlValidateDtdFinal) xmlValidateDtdFinal__internal_alias __attribute((visibility("hidden"))); +#define xmlValidateDtdFinal xmlValidateDtdFinal__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_VALID_ENABLED) +#ifdef bottom_valid +#undef xmlValidateElement +extern __typeof (xmlValidateElement) xmlValidateElement __attribute((alias("xmlValidateElement__internal_alias"))); +#else +#ifndef xmlValidateElement +extern __typeof (xmlValidateElement) xmlValidateElement__internal_alias __attribute((visibility("hidden"))); +#define xmlValidateElement xmlValidateElement__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_VALID_ENABLED) +#ifdef bottom_valid +#undef xmlValidateElementDecl +extern __typeof (xmlValidateElementDecl) xmlValidateElementDecl __attribute((alias("xmlValidateElementDecl__internal_alias"))); +#else +#ifndef xmlValidateElementDecl +extern __typeof (xmlValidateElementDecl) xmlValidateElementDecl__internal_alias __attribute((visibility("hidden"))); +#define xmlValidateElementDecl xmlValidateElementDecl__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_DEBUG_ENABLED) || defined (LIBXML_HTML_ENABLED) || defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED) || defined(LIBXML_LEGACY_ENABLED) +#ifdef bottom_tree +#undef xmlValidateNCName +extern __typeof (xmlValidateNCName) xmlValidateNCName __attribute((alias("xmlValidateNCName__internal_alias"))); +#else +#ifndef xmlValidateNCName +extern __typeof (xmlValidateNCName) xmlValidateNCName__internal_alias __attribute((visibility("hidden"))); +#define xmlValidateNCName xmlValidateNCName__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_tree +#undef xmlValidateNMToken +extern __typeof (xmlValidateNMToken) xmlValidateNMToken __attribute((alias("xmlValidateNMToken__internal_alias"))); +#else +#ifndef xmlValidateNMToken +extern __typeof (xmlValidateNMToken) xmlValidateNMToken__internal_alias __attribute((visibility("hidden"))); +#define xmlValidateNMToken xmlValidateNMToken__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_tree +#undef xmlValidateName +extern __typeof (xmlValidateName) xmlValidateName __attribute((alias("xmlValidateName__internal_alias"))); +#else +#ifndef xmlValidateName +extern __typeof (xmlValidateName) xmlValidateName__internal_alias __attribute((visibility("hidden"))); +#define xmlValidateName xmlValidateName__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_VALID_ENABLED) +#ifdef bottom_valid +#undef xmlValidateNameValue +extern __typeof (xmlValidateNameValue) xmlValidateNameValue __attribute((alias("xmlValidateNameValue__internal_alias"))); +#else +#ifndef xmlValidateNameValue +extern __typeof (xmlValidateNameValue) xmlValidateNameValue__internal_alias __attribute((visibility("hidden"))); +#define xmlValidateNameValue xmlValidateNameValue__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_VALID_ENABLED) +#ifdef bottom_valid +#undef xmlValidateNamesValue +extern __typeof (xmlValidateNamesValue) xmlValidateNamesValue __attribute((alias("xmlValidateNamesValue__internal_alias"))); +#else +#ifndef xmlValidateNamesValue +extern __typeof (xmlValidateNamesValue) xmlValidateNamesValue__internal_alias __attribute((visibility("hidden"))); +#define xmlValidateNamesValue xmlValidateNamesValue__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_VALID_ENABLED) +#ifdef bottom_valid +#undef xmlValidateNmtokenValue +extern __typeof (xmlValidateNmtokenValue) xmlValidateNmtokenValue __attribute((alias("xmlValidateNmtokenValue__internal_alias"))); +#else +#ifndef xmlValidateNmtokenValue +extern __typeof (xmlValidateNmtokenValue) xmlValidateNmtokenValue__internal_alias __attribute((visibility("hidden"))); +#define xmlValidateNmtokenValue xmlValidateNmtokenValue__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_VALID_ENABLED) +#ifdef bottom_valid +#undef xmlValidateNmtokensValue +extern __typeof (xmlValidateNmtokensValue) xmlValidateNmtokensValue __attribute((alias("xmlValidateNmtokensValue__internal_alias"))); +#else +#ifndef xmlValidateNmtokensValue +extern __typeof (xmlValidateNmtokensValue) xmlValidateNmtokensValue__internal_alias __attribute((visibility("hidden"))); +#define xmlValidateNmtokensValue xmlValidateNmtokensValue__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_VALID_ENABLED) +#ifdef bottom_valid +#undef xmlValidateNotationDecl +extern __typeof (xmlValidateNotationDecl) xmlValidateNotationDecl __attribute((alias("xmlValidateNotationDecl__internal_alias"))); +#else +#ifndef xmlValidateNotationDecl +extern __typeof (xmlValidateNotationDecl) xmlValidateNotationDecl__internal_alias __attribute((visibility("hidden"))); +#define xmlValidateNotationDecl xmlValidateNotationDecl__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_VALID_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_valid +#undef xmlValidateNotationUse +extern __typeof (xmlValidateNotationUse) xmlValidateNotationUse __attribute((alias("xmlValidateNotationUse__internal_alias"))); +#else +#ifndef xmlValidateNotationUse +extern __typeof (xmlValidateNotationUse) xmlValidateNotationUse__internal_alias __attribute((visibility("hidden"))); +#define xmlValidateNotationUse xmlValidateNotationUse__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_VALID_ENABLED) +#ifdef bottom_valid +#undef xmlValidateOneAttribute +extern __typeof (xmlValidateOneAttribute) xmlValidateOneAttribute __attribute((alias("xmlValidateOneAttribute__internal_alias"))); +#else +#ifndef xmlValidateOneAttribute +extern __typeof (xmlValidateOneAttribute) xmlValidateOneAttribute__internal_alias __attribute((visibility("hidden"))); +#define xmlValidateOneAttribute xmlValidateOneAttribute__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_VALID_ENABLED) +#ifdef bottom_valid +#undef xmlValidateOneElement +extern __typeof (xmlValidateOneElement) xmlValidateOneElement __attribute((alias("xmlValidateOneElement__internal_alias"))); +#else +#ifndef xmlValidateOneElement +extern __typeof (xmlValidateOneElement) xmlValidateOneElement__internal_alias __attribute((visibility("hidden"))); +#define xmlValidateOneElement xmlValidateOneElement__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_VALID_ENABLED) +#ifdef bottom_valid +#undef xmlValidateOneNamespace +extern __typeof (xmlValidateOneNamespace) xmlValidateOneNamespace __attribute((alias("xmlValidateOneNamespace__internal_alias"))); +#else +#ifndef xmlValidateOneNamespace +extern __typeof (xmlValidateOneNamespace) xmlValidateOneNamespace__internal_alias __attribute((visibility("hidden"))); +#define xmlValidateOneNamespace xmlValidateOneNamespace__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_VALID_ENABLED) && defined(LIBXML_REGEXP_ENABLED) +#ifdef bottom_valid +#undef xmlValidatePopElement +extern __typeof (xmlValidatePopElement) xmlValidatePopElement __attribute((alias("xmlValidatePopElement__internal_alias"))); +#else +#ifndef xmlValidatePopElement +extern __typeof (xmlValidatePopElement) xmlValidatePopElement__internal_alias __attribute((visibility("hidden"))); +#define xmlValidatePopElement xmlValidatePopElement__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_VALID_ENABLED) && defined(LIBXML_REGEXP_ENABLED) +#ifdef bottom_valid +#undef xmlValidatePushCData +extern __typeof (xmlValidatePushCData) xmlValidatePushCData __attribute((alias("xmlValidatePushCData__internal_alias"))); +#else +#ifndef xmlValidatePushCData +extern __typeof (xmlValidatePushCData) xmlValidatePushCData__internal_alias __attribute((visibility("hidden"))); +#define xmlValidatePushCData xmlValidatePushCData__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_VALID_ENABLED) && defined(LIBXML_REGEXP_ENABLED) +#ifdef bottom_valid +#undef xmlValidatePushElement +extern __typeof (xmlValidatePushElement) xmlValidatePushElement __attribute((alias("xmlValidatePushElement__internal_alias"))); +#else +#ifndef xmlValidatePushElement +extern __typeof (xmlValidatePushElement) xmlValidatePushElement__internal_alias __attribute((visibility("hidden"))); +#define xmlValidatePushElement xmlValidatePushElement__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_tree +#undef xmlValidateQName +extern __typeof (xmlValidateQName) xmlValidateQName __attribute((alias("xmlValidateQName__internal_alias"))); +#else +#ifndef xmlValidateQName +extern __typeof (xmlValidateQName) xmlValidateQName__internal_alias __attribute((visibility("hidden"))); +#define xmlValidateQName xmlValidateQName__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_VALID_ENABLED) +#ifdef bottom_valid +#undef xmlValidateRoot +extern __typeof (xmlValidateRoot) xmlValidateRoot __attribute((alias("xmlValidateRoot__internal_alias"))); +#else +#ifndef xmlValidateRoot +extern __typeof (xmlValidateRoot) xmlValidateRoot__internal_alias __attribute((visibility("hidden"))); +#define xmlValidateRoot xmlValidateRoot__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XINCLUDE_ENABLED) +#ifdef bottom_xinclude +#undef xmlXIncludeFreeContext +extern __typeof (xmlXIncludeFreeContext) xmlXIncludeFreeContext __attribute((alias("xmlXIncludeFreeContext__internal_alias"))); +#else +#ifndef xmlXIncludeFreeContext +extern __typeof (xmlXIncludeFreeContext) xmlXIncludeFreeContext__internal_alias __attribute((visibility("hidden"))); +#define xmlXIncludeFreeContext xmlXIncludeFreeContext__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XINCLUDE_ENABLED) +#ifdef bottom_xinclude +#undef xmlXIncludeNewContext +extern __typeof (xmlXIncludeNewContext) xmlXIncludeNewContext __attribute((alias("xmlXIncludeNewContext__internal_alias"))); +#else +#ifndef xmlXIncludeNewContext +extern __typeof (xmlXIncludeNewContext) xmlXIncludeNewContext__internal_alias __attribute((visibility("hidden"))); +#define xmlXIncludeNewContext xmlXIncludeNewContext__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XINCLUDE_ENABLED) +#ifdef bottom_xinclude +#undef xmlXIncludeProcess +extern __typeof (xmlXIncludeProcess) xmlXIncludeProcess __attribute((alias("xmlXIncludeProcess__internal_alias"))); +#else +#ifndef xmlXIncludeProcess +extern __typeof (xmlXIncludeProcess) xmlXIncludeProcess__internal_alias __attribute((visibility("hidden"))); +#define xmlXIncludeProcess xmlXIncludeProcess__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XINCLUDE_ENABLED) +#ifdef bottom_xinclude +#undef xmlXIncludeProcessFlags +extern __typeof (xmlXIncludeProcessFlags) xmlXIncludeProcessFlags __attribute((alias("xmlXIncludeProcessFlags__internal_alias"))); +#else +#ifndef xmlXIncludeProcessFlags +extern __typeof (xmlXIncludeProcessFlags) xmlXIncludeProcessFlags__internal_alias __attribute((visibility("hidden"))); +#define xmlXIncludeProcessFlags xmlXIncludeProcessFlags__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XINCLUDE_ENABLED) +#ifdef bottom_xinclude +#undef xmlXIncludeProcessFlagsData +extern __typeof (xmlXIncludeProcessFlagsData) xmlXIncludeProcessFlagsData __attribute((alias("xmlXIncludeProcessFlagsData__internal_alias"))); +#else +#ifndef xmlXIncludeProcessFlagsData +extern __typeof (xmlXIncludeProcessFlagsData) xmlXIncludeProcessFlagsData__internal_alias __attribute((visibility("hidden"))); +#define xmlXIncludeProcessFlagsData xmlXIncludeProcessFlagsData__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XINCLUDE_ENABLED) +#ifdef bottom_xinclude +#undef xmlXIncludeProcessNode +extern __typeof (xmlXIncludeProcessNode) xmlXIncludeProcessNode __attribute((alias("xmlXIncludeProcessNode__internal_alias"))); +#else +#ifndef xmlXIncludeProcessNode +extern __typeof (xmlXIncludeProcessNode) xmlXIncludeProcessNode__internal_alias __attribute((visibility("hidden"))); +#define xmlXIncludeProcessNode xmlXIncludeProcessNode__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XINCLUDE_ENABLED) +#ifdef bottom_xinclude +#undef xmlXIncludeProcessTree +extern __typeof (xmlXIncludeProcessTree) xmlXIncludeProcessTree __attribute((alias("xmlXIncludeProcessTree__internal_alias"))); +#else +#ifndef xmlXIncludeProcessTree +extern __typeof (xmlXIncludeProcessTree) xmlXIncludeProcessTree__internal_alias __attribute((visibility("hidden"))); +#define xmlXIncludeProcessTree xmlXIncludeProcessTree__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XINCLUDE_ENABLED) +#ifdef bottom_xinclude +#undef xmlXIncludeProcessTreeFlags +extern __typeof (xmlXIncludeProcessTreeFlags) xmlXIncludeProcessTreeFlags __attribute((alias("xmlXIncludeProcessTreeFlags__internal_alias"))); +#else +#ifndef xmlXIncludeProcessTreeFlags +extern __typeof (xmlXIncludeProcessTreeFlags) xmlXIncludeProcessTreeFlags__internal_alias __attribute((visibility("hidden"))); +#define xmlXIncludeProcessTreeFlags xmlXIncludeProcessTreeFlags__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XINCLUDE_ENABLED) +#ifdef bottom_xinclude +#undef xmlXIncludeProcessTreeFlagsData +extern __typeof (xmlXIncludeProcessTreeFlagsData) xmlXIncludeProcessTreeFlagsData __attribute((alias("xmlXIncludeProcessTreeFlagsData__internal_alias"))); +#else +#ifndef xmlXIncludeProcessTreeFlagsData +extern __typeof (xmlXIncludeProcessTreeFlagsData) xmlXIncludeProcessTreeFlagsData__internal_alias __attribute((visibility("hidden"))); +#define xmlXIncludeProcessTreeFlagsData xmlXIncludeProcessTreeFlagsData__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XINCLUDE_ENABLED) +#ifdef bottom_xinclude +#undef xmlXIncludeSetFlags +extern __typeof (xmlXIncludeSetFlags) xmlXIncludeSetFlags __attribute((alias("xmlXIncludeSetFlags__internal_alias"))); +#else +#ifndef xmlXIncludeSetFlags +extern __typeof (xmlXIncludeSetFlags) xmlXIncludeSetFlags__internal_alias __attribute((visibility("hidden"))); +#define xmlXIncludeSetFlags xmlXIncludeSetFlags__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathAddValues +extern __typeof (xmlXPathAddValues) xmlXPathAddValues __attribute((alias("xmlXPathAddValues__internal_alias"))); +#else +#ifndef xmlXPathAddValues +extern __typeof (xmlXPathAddValues) xmlXPathAddValues__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathAddValues xmlXPathAddValues__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathBooleanFunction +extern __typeof (xmlXPathBooleanFunction) xmlXPathBooleanFunction __attribute((alias("xmlXPathBooleanFunction__internal_alias"))); +#else +#ifndef xmlXPathBooleanFunction +extern __typeof (xmlXPathBooleanFunction) xmlXPathBooleanFunction__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathBooleanFunction xmlXPathBooleanFunction__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathCastBooleanToNumber +extern __typeof (xmlXPathCastBooleanToNumber) xmlXPathCastBooleanToNumber __attribute((alias("xmlXPathCastBooleanToNumber__internal_alias"))); +#else +#ifndef xmlXPathCastBooleanToNumber +extern __typeof (xmlXPathCastBooleanToNumber) xmlXPathCastBooleanToNumber__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathCastBooleanToNumber xmlXPathCastBooleanToNumber__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathCastBooleanToString +extern __typeof (xmlXPathCastBooleanToString) xmlXPathCastBooleanToString __attribute((alias("xmlXPathCastBooleanToString__internal_alias"))); +#else +#ifndef xmlXPathCastBooleanToString +extern __typeof (xmlXPathCastBooleanToString) xmlXPathCastBooleanToString__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathCastBooleanToString xmlXPathCastBooleanToString__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathCastNodeSetToBoolean +extern __typeof (xmlXPathCastNodeSetToBoolean) xmlXPathCastNodeSetToBoolean __attribute((alias("xmlXPathCastNodeSetToBoolean__internal_alias"))); +#else +#ifndef xmlXPathCastNodeSetToBoolean +extern __typeof (xmlXPathCastNodeSetToBoolean) xmlXPathCastNodeSetToBoolean__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathCastNodeSetToBoolean xmlXPathCastNodeSetToBoolean__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathCastNodeSetToNumber +extern __typeof (xmlXPathCastNodeSetToNumber) xmlXPathCastNodeSetToNumber __attribute((alias("xmlXPathCastNodeSetToNumber__internal_alias"))); +#else +#ifndef xmlXPathCastNodeSetToNumber +extern __typeof (xmlXPathCastNodeSetToNumber) xmlXPathCastNodeSetToNumber__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathCastNodeSetToNumber xmlXPathCastNodeSetToNumber__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathCastNodeSetToString +extern __typeof (xmlXPathCastNodeSetToString) xmlXPathCastNodeSetToString __attribute((alias("xmlXPathCastNodeSetToString__internal_alias"))); +#else +#ifndef xmlXPathCastNodeSetToString +extern __typeof (xmlXPathCastNodeSetToString) xmlXPathCastNodeSetToString__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathCastNodeSetToString xmlXPathCastNodeSetToString__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathCastNodeToNumber +extern __typeof (xmlXPathCastNodeToNumber) xmlXPathCastNodeToNumber __attribute((alias("xmlXPathCastNodeToNumber__internal_alias"))); +#else +#ifndef xmlXPathCastNodeToNumber +extern __typeof (xmlXPathCastNodeToNumber) xmlXPathCastNodeToNumber__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathCastNodeToNumber xmlXPathCastNodeToNumber__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathCastNodeToString +extern __typeof (xmlXPathCastNodeToString) xmlXPathCastNodeToString __attribute((alias("xmlXPathCastNodeToString__internal_alias"))); +#else +#ifndef xmlXPathCastNodeToString +extern __typeof (xmlXPathCastNodeToString) xmlXPathCastNodeToString__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathCastNodeToString xmlXPathCastNodeToString__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathCastNumberToBoolean +extern __typeof (xmlXPathCastNumberToBoolean) xmlXPathCastNumberToBoolean __attribute((alias("xmlXPathCastNumberToBoolean__internal_alias"))); +#else +#ifndef xmlXPathCastNumberToBoolean +extern __typeof (xmlXPathCastNumberToBoolean) xmlXPathCastNumberToBoolean__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathCastNumberToBoolean xmlXPathCastNumberToBoolean__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathCastNumberToString +extern __typeof (xmlXPathCastNumberToString) xmlXPathCastNumberToString __attribute((alias("xmlXPathCastNumberToString__internal_alias"))); +#else +#ifndef xmlXPathCastNumberToString +extern __typeof (xmlXPathCastNumberToString) xmlXPathCastNumberToString__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathCastNumberToString xmlXPathCastNumberToString__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathCastStringToBoolean +extern __typeof (xmlXPathCastStringToBoolean) xmlXPathCastStringToBoolean __attribute((alias("xmlXPathCastStringToBoolean__internal_alias"))); +#else +#ifndef xmlXPathCastStringToBoolean +extern __typeof (xmlXPathCastStringToBoolean) xmlXPathCastStringToBoolean__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathCastStringToBoolean xmlXPathCastStringToBoolean__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathCastStringToNumber +extern __typeof (xmlXPathCastStringToNumber) xmlXPathCastStringToNumber __attribute((alias("xmlXPathCastStringToNumber__internal_alias"))); +#else +#ifndef xmlXPathCastStringToNumber +extern __typeof (xmlXPathCastStringToNumber) xmlXPathCastStringToNumber__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathCastStringToNumber xmlXPathCastStringToNumber__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathCastToBoolean +extern __typeof (xmlXPathCastToBoolean) xmlXPathCastToBoolean __attribute((alias("xmlXPathCastToBoolean__internal_alias"))); +#else +#ifndef xmlXPathCastToBoolean +extern __typeof (xmlXPathCastToBoolean) xmlXPathCastToBoolean__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathCastToBoolean xmlXPathCastToBoolean__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathCastToNumber +extern __typeof (xmlXPathCastToNumber) xmlXPathCastToNumber __attribute((alias("xmlXPathCastToNumber__internal_alias"))); +#else +#ifndef xmlXPathCastToNumber +extern __typeof (xmlXPathCastToNumber) xmlXPathCastToNumber__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathCastToNumber xmlXPathCastToNumber__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathCastToString +extern __typeof (xmlXPathCastToString) xmlXPathCastToString __attribute((alias("xmlXPathCastToString__internal_alias"))); +#else +#ifndef xmlXPathCastToString +extern __typeof (xmlXPathCastToString) xmlXPathCastToString__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathCastToString xmlXPathCastToString__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathCeilingFunction +extern __typeof (xmlXPathCeilingFunction) xmlXPathCeilingFunction __attribute((alias("xmlXPathCeilingFunction__internal_alias"))); +#else +#ifndef xmlXPathCeilingFunction +extern __typeof (xmlXPathCeilingFunction) xmlXPathCeilingFunction__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathCeilingFunction xmlXPathCeilingFunction__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathCmpNodes +extern __typeof (xmlXPathCmpNodes) xmlXPathCmpNodes __attribute((alias("xmlXPathCmpNodes__internal_alias"))); +#else +#ifndef xmlXPathCmpNodes +extern __typeof (xmlXPathCmpNodes) xmlXPathCmpNodes__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathCmpNodes xmlXPathCmpNodes__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathCompareValues +extern __typeof (xmlXPathCompareValues) xmlXPathCompareValues __attribute((alias("xmlXPathCompareValues__internal_alias"))); +#else +#ifndef xmlXPathCompareValues +extern __typeof (xmlXPathCompareValues) xmlXPathCompareValues__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathCompareValues xmlXPathCompareValues__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathCompile +extern __typeof (xmlXPathCompile) xmlXPathCompile __attribute((alias("xmlXPathCompile__internal_alias"))); +#else +#ifndef xmlXPathCompile +extern __typeof (xmlXPathCompile) xmlXPathCompile__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathCompile xmlXPathCompile__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathCompiledEval +extern __typeof (xmlXPathCompiledEval) xmlXPathCompiledEval __attribute((alias("xmlXPathCompiledEval__internal_alias"))); +#else +#ifndef xmlXPathCompiledEval +extern __typeof (xmlXPathCompiledEval) xmlXPathCompiledEval__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathCompiledEval xmlXPathCompiledEval__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathCompiledEvalToBoolean +extern __typeof (xmlXPathCompiledEvalToBoolean) xmlXPathCompiledEvalToBoolean __attribute((alias("xmlXPathCompiledEvalToBoolean__internal_alias"))); +#else +#ifndef xmlXPathCompiledEvalToBoolean +extern __typeof (xmlXPathCompiledEvalToBoolean) xmlXPathCompiledEvalToBoolean__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathCompiledEvalToBoolean xmlXPathCompiledEvalToBoolean__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathConcatFunction +extern __typeof (xmlXPathConcatFunction) xmlXPathConcatFunction __attribute((alias("xmlXPathConcatFunction__internal_alias"))); +#else +#ifndef xmlXPathConcatFunction +extern __typeof (xmlXPathConcatFunction) xmlXPathConcatFunction__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathConcatFunction xmlXPathConcatFunction__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathContainsFunction +extern __typeof (xmlXPathContainsFunction) xmlXPathContainsFunction __attribute((alias("xmlXPathContainsFunction__internal_alias"))); +#else +#ifndef xmlXPathContainsFunction +extern __typeof (xmlXPathContainsFunction) xmlXPathContainsFunction__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathContainsFunction xmlXPathContainsFunction__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathContextSetCache +extern __typeof (xmlXPathContextSetCache) xmlXPathContextSetCache __attribute((alias("xmlXPathContextSetCache__internal_alias"))); +#else +#ifndef xmlXPathContextSetCache +extern __typeof (xmlXPathContextSetCache) xmlXPathContextSetCache__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathContextSetCache xmlXPathContextSetCache__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathConvertBoolean +extern __typeof (xmlXPathConvertBoolean) xmlXPathConvertBoolean __attribute((alias("xmlXPathConvertBoolean__internal_alias"))); +#else +#ifndef xmlXPathConvertBoolean +extern __typeof (xmlXPathConvertBoolean) xmlXPathConvertBoolean__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathConvertBoolean xmlXPathConvertBoolean__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathConvertNumber +extern __typeof (xmlXPathConvertNumber) xmlXPathConvertNumber __attribute((alias("xmlXPathConvertNumber__internal_alias"))); +#else +#ifndef xmlXPathConvertNumber +extern __typeof (xmlXPathConvertNumber) xmlXPathConvertNumber__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathConvertNumber xmlXPathConvertNumber__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathConvertString +extern __typeof (xmlXPathConvertString) xmlXPathConvertString __attribute((alias("xmlXPathConvertString__internal_alias"))); +#else +#ifndef xmlXPathConvertString +extern __typeof (xmlXPathConvertString) xmlXPathConvertString__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathConvertString xmlXPathConvertString__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathCountFunction +extern __typeof (xmlXPathCountFunction) xmlXPathCountFunction __attribute((alias("xmlXPathCountFunction__internal_alias"))); +#else +#ifndef xmlXPathCountFunction +extern __typeof (xmlXPathCountFunction) xmlXPathCountFunction__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathCountFunction xmlXPathCountFunction__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathCtxtCompile +extern __typeof (xmlXPathCtxtCompile) xmlXPathCtxtCompile __attribute((alias("xmlXPathCtxtCompile__internal_alias"))); +#else +#ifndef xmlXPathCtxtCompile +extern __typeof (xmlXPathCtxtCompile) xmlXPathCtxtCompile__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathCtxtCompile xmlXPathCtxtCompile__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) && defined(LIBXML_DEBUG_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathDebugDumpCompExpr +extern __typeof (xmlXPathDebugDumpCompExpr) xmlXPathDebugDumpCompExpr __attribute((alias("xmlXPathDebugDumpCompExpr__internal_alias"))); +#else +#ifndef xmlXPathDebugDumpCompExpr +extern __typeof (xmlXPathDebugDumpCompExpr) xmlXPathDebugDumpCompExpr__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathDebugDumpCompExpr xmlXPathDebugDumpCompExpr__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) && defined(LIBXML_DEBUG_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathDebugDumpObject +extern __typeof (xmlXPathDebugDumpObject) xmlXPathDebugDumpObject __attribute((alias("xmlXPathDebugDumpObject__internal_alias"))); +#else +#ifndef xmlXPathDebugDumpObject +extern __typeof (xmlXPathDebugDumpObject) xmlXPathDebugDumpObject__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathDebugDumpObject xmlXPathDebugDumpObject__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathDifference +extern __typeof (xmlXPathDifference) xmlXPathDifference __attribute((alias("xmlXPathDifference__internal_alias"))); +#else +#ifndef xmlXPathDifference +extern __typeof (xmlXPathDifference) xmlXPathDifference__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathDifference xmlXPathDifference__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathDistinct +extern __typeof (xmlXPathDistinct) xmlXPathDistinct __attribute((alias("xmlXPathDistinct__internal_alias"))); +#else +#ifndef xmlXPathDistinct +extern __typeof (xmlXPathDistinct) xmlXPathDistinct__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathDistinct xmlXPathDistinct__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathDistinctSorted +extern __typeof (xmlXPathDistinctSorted) xmlXPathDistinctSorted __attribute((alias("xmlXPathDistinctSorted__internal_alias"))); +#else +#ifndef xmlXPathDistinctSorted +extern __typeof (xmlXPathDistinctSorted) xmlXPathDistinctSorted__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathDistinctSorted xmlXPathDistinctSorted__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathDivValues +extern __typeof (xmlXPathDivValues) xmlXPathDivValues __attribute((alias("xmlXPathDivValues__internal_alias"))); +#else +#ifndef xmlXPathDivValues +extern __typeof (xmlXPathDivValues) xmlXPathDivValues__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathDivValues xmlXPathDivValues__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathEqualValues +extern __typeof (xmlXPathEqualValues) xmlXPathEqualValues __attribute((alias("xmlXPathEqualValues__internal_alias"))); +#else +#ifndef xmlXPathEqualValues +extern __typeof (xmlXPathEqualValues) xmlXPathEqualValues__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathEqualValues xmlXPathEqualValues__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathErr +extern __typeof (xmlXPathErr) xmlXPathErr __attribute((alias("xmlXPathErr__internal_alias"))); +#else +#ifndef xmlXPathErr +extern __typeof (xmlXPathErr) xmlXPathErr__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathErr xmlXPathErr__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathEval +extern __typeof (xmlXPathEval) xmlXPathEval __attribute((alias("xmlXPathEval__internal_alias"))); +#else +#ifndef xmlXPathEval +extern __typeof (xmlXPathEval) xmlXPathEval__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathEval xmlXPathEval__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathEvalExpr +extern __typeof (xmlXPathEvalExpr) xmlXPathEvalExpr __attribute((alias("xmlXPathEvalExpr__internal_alias"))); +#else +#ifndef xmlXPathEvalExpr +extern __typeof (xmlXPathEvalExpr) xmlXPathEvalExpr__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathEvalExpr xmlXPathEvalExpr__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathEvalExpression +extern __typeof (xmlXPathEvalExpression) xmlXPathEvalExpression __attribute((alias("xmlXPathEvalExpression__internal_alias"))); +#else +#ifndef xmlXPathEvalExpression +extern __typeof (xmlXPathEvalExpression) xmlXPathEvalExpression__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathEvalExpression xmlXPathEvalExpression__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathEvalPredicate +extern __typeof (xmlXPathEvalPredicate) xmlXPathEvalPredicate __attribute((alias("xmlXPathEvalPredicate__internal_alias"))); +#else +#ifndef xmlXPathEvalPredicate +extern __typeof (xmlXPathEvalPredicate) xmlXPathEvalPredicate__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathEvalPredicate xmlXPathEvalPredicate__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathEvaluatePredicateResult +extern __typeof (xmlXPathEvaluatePredicateResult) xmlXPathEvaluatePredicateResult __attribute((alias("xmlXPathEvaluatePredicateResult__internal_alias"))); +#else +#ifndef xmlXPathEvaluatePredicateResult +extern __typeof (xmlXPathEvaluatePredicateResult) xmlXPathEvaluatePredicateResult__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathEvaluatePredicateResult xmlXPathEvaluatePredicateResult__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathFalseFunction +extern __typeof (xmlXPathFalseFunction) xmlXPathFalseFunction __attribute((alias("xmlXPathFalseFunction__internal_alias"))); +#else +#ifndef xmlXPathFalseFunction +extern __typeof (xmlXPathFalseFunction) xmlXPathFalseFunction__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathFalseFunction xmlXPathFalseFunction__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathFloorFunction +extern __typeof (xmlXPathFloorFunction) xmlXPathFloorFunction __attribute((alias("xmlXPathFloorFunction__internal_alias"))); +#else +#ifndef xmlXPathFloorFunction +extern __typeof (xmlXPathFloorFunction) xmlXPathFloorFunction__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathFloorFunction xmlXPathFloorFunction__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathFreeCompExpr +extern __typeof (xmlXPathFreeCompExpr) xmlXPathFreeCompExpr __attribute((alias("xmlXPathFreeCompExpr__internal_alias"))); +#else +#ifndef xmlXPathFreeCompExpr +extern __typeof (xmlXPathFreeCompExpr) xmlXPathFreeCompExpr__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathFreeCompExpr xmlXPathFreeCompExpr__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathFreeContext +extern __typeof (xmlXPathFreeContext) xmlXPathFreeContext __attribute((alias("xmlXPathFreeContext__internal_alias"))); +#else +#ifndef xmlXPathFreeContext +extern __typeof (xmlXPathFreeContext) xmlXPathFreeContext__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathFreeContext xmlXPathFreeContext__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathFreeNodeSet +extern __typeof (xmlXPathFreeNodeSet) xmlXPathFreeNodeSet __attribute((alias("xmlXPathFreeNodeSet__internal_alias"))); +#else +#ifndef xmlXPathFreeNodeSet +extern __typeof (xmlXPathFreeNodeSet) xmlXPathFreeNodeSet__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathFreeNodeSet xmlXPathFreeNodeSet__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathFreeNodeSetList +extern __typeof (xmlXPathFreeNodeSetList) xmlXPathFreeNodeSetList __attribute((alias("xmlXPathFreeNodeSetList__internal_alias"))); +#else +#ifndef xmlXPathFreeNodeSetList +extern __typeof (xmlXPathFreeNodeSetList) xmlXPathFreeNodeSetList__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathFreeNodeSetList xmlXPathFreeNodeSetList__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathFreeObject +extern __typeof (xmlXPathFreeObject) xmlXPathFreeObject __attribute((alias("xmlXPathFreeObject__internal_alias"))); +#else +#ifndef xmlXPathFreeObject +extern __typeof (xmlXPathFreeObject) xmlXPathFreeObject__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathFreeObject xmlXPathFreeObject__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathFreeParserContext +extern __typeof (xmlXPathFreeParserContext) xmlXPathFreeParserContext __attribute((alias("xmlXPathFreeParserContext__internal_alias"))); +#else +#ifndef xmlXPathFreeParserContext +extern __typeof (xmlXPathFreeParserContext) xmlXPathFreeParserContext__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathFreeParserContext xmlXPathFreeParserContext__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathFunctionLookup +extern __typeof (xmlXPathFunctionLookup) xmlXPathFunctionLookup __attribute((alias("xmlXPathFunctionLookup__internal_alias"))); +#else +#ifndef xmlXPathFunctionLookup +extern __typeof (xmlXPathFunctionLookup) xmlXPathFunctionLookup__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathFunctionLookup xmlXPathFunctionLookup__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathFunctionLookupNS +extern __typeof (xmlXPathFunctionLookupNS) xmlXPathFunctionLookupNS __attribute((alias("xmlXPathFunctionLookupNS__internal_alias"))); +#else +#ifndef xmlXPathFunctionLookupNS +extern __typeof (xmlXPathFunctionLookupNS) xmlXPathFunctionLookupNS__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathFunctionLookupNS xmlXPathFunctionLookupNS__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathHasSameNodes +extern __typeof (xmlXPathHasSameNodes) xmlXPathHasSameNodes __attribute((alias("xmlXPathHasSameNodes__internal_alias"))); +#else +#ifndef xmlXPathHasSameNodes +extern __typeof (xmlXPathHasSameNodes) xmlXPathHasSameNodes__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathHasSameNodes xmlXPathHasSameNodes__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathIdFunction +extern __typeof (xmlXPathIdFunction) xmlXPathIdFunction __attribute((alias("xmlXPathIdFunction__internal_alias"))); +#else +#ifndef xmlXPathIdFunction +extern __typeof (xmlXPathIdFunction) xmlXPathIdFunction__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathIdFunction xmlXPathIdFunction__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathInit +extern __typeof (xmlXPathInit) xmlXPathInit __attribute((alias("xmlXPathInit__internal_alias"))); +#else +#ifndef xmlXPathInit +extern __typeof (xmlXPathInit) xmlXPathInit__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathInit xmlXPathInit__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathIntersection +extern __typeof (xmlXPathIntersection) xmlXPathIntersection __attribute((alias("xmlXPathIntersection__internal_alias"))); +#else +#ifndef xmlXPathIntersection +extern __typeof (xmlXPathIntersection) xmlXPathIntersection__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathIntersection xmlXPathIntersection__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathIsInf +extern __typeof (xmlXPathIsInf) xmlXPathIsInf __attribute((alias("xmlXPathIsInf__internal_alias"))); +#else +#ifndef xmlXPathIsInf +extern __typeof (xmlXPathIsInf) xmlXPathIsInf__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathIsInf xmlXPathIsInf__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathIsNaN +extern __typeof (xmlXPathIsNaN) xmlXPathIsNaN __attribute((alias("xmlXPathIsNaN__internal_alias"))); +#else +#ifndef xmlXPathIsNaN +extern __typeof (xmlXPathIsNaN) xmlXPathIsNaN__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathIsNaN xmlXPathIsNaN__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathIsNodeType +extern __typeof (xmlXPathIsNodeType) xmlXPathIsNodeType __attribute((alias("xmlXPathIsNodeType__internal_alias"))); +#else +#ifndef xmlXPathIsNodeType +extern __typeof (xmlXPathIsNodeType) xmlXPathIsNodeType__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathIsNodeType xmlXPathIsNodeType__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathLangFunction +extern __typeof (xmlXPathLangFunction) xmlXPathLangFunction __attribute((alias("xmlXPathLangFunction__internal_alias"))); +#else +#ifndef xmlXPathLangFunction +extern __typeof (xmlXPathLangFunction) xmlXPathLangFunction__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathLangFunction xmlXPathLangFunction__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathLastFunction +extern __typeof (xmlXPathLastFunction) xmlXPathLastFunction __attribute((alias("xmlXPathLastFunction__internal_alias"))); +#else +#ifndef xmlXPathLastFunction +extern __typeof (xmlXPathLastFunction) xmlXPathLastFunction__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathLastFunction xmlXPathLastFunction__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathLeading +extern __typeof (xmlXPathLeading) xmlXPathLeading __attribute((alias("xmlXPathLeading__internal_alias"))); +#else +#ifndef xmlXPathLeading +extern __typeof (xmlXPathLeading) xmlXPathLeading__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathLeading xmlXPathLeading__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathLeadingSorted +extern __typeof (xmlXPathLeadingSorted) xmlXPathLeadingSorted __attribute((alias("xmlXPathLeadingSorted__internal_alias"))); +#else +#ifndef xmlXPathLeadingSorted +extern __typeof (xmlXPathLeadingSorted) xmlXPathLeadingSorted__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathLeadingSorted xmlXPathLeadingSorted__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathLocalNameFunction +extern __typeof (xmlXPathLocalNameFunction) xmlXPathLocalNameFunction __attribute((alias("xmlXPathLocalNameFunction__internal_alias"))); +#else +#ifndef xmlXPathLocalNameFunction +extern __typeof (xmlXPathLocalNameFunction) xmlXPathLocalNameFunction__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathLocalNameFunction xmlXPathLocalNameFunction__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathModValues +extern __typeof (xmlXPathModValues) xmlXPathModValues __attribute((alias("xmlXPathModValues__internal_alias"))); +#else +#ifndef xmlXPathModValues +extern __typeof (xmlXPathModValues) xmlXPathModValues__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathModValues xmlXPathModValues__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathMultValues +extern __typeof (xmlXPathMultValues) xmlXPathMultValues __attribute((alias("xmlXPathMultValues__internal_alias"))); +#else +#ifndef xmlXPathMultValues +extern __typeof (xmlXPathMultValues) xmlXPathMultValues__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathMultValues xmlXPathMultValues__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathNamespaceURIFunction +extern __typeof (xmlXPathNamespaceURIFunction) xmlXPathNamespaceURIFunction __attribute((alias("xmlXPathNamespaceURIFunction__internal_alias"))); +#else +#ifndef xmlXPathNamespaceURIFunction +extern __typeof (xmlXPathNamespaceURIFunction) xmlXPathNamespaceURIFunction__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathNamespaceURIFunction xmlXPathNamespaceURIFunction__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathNewBoolean +extern __typeof (xmlXPathNewBoolean) xmlXPathNewBoolean __attribute((alias("xmlXPathNewBoolean__internal_alias"))); +#else +#ifndef xmlXPathNewBoolean +extern __typeof (xmlXPathNewBoolean) xmlXPathNewBoolean__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathNewBoolean xmlXPathNewBoolean__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathNewCString +extern __typeof (xmlXPathNewCString) xmlXPathNewCString __attribute((alias("xmlXPathNewCString__internal_alias"))); +#else +#ifndef xmlXPathNewCString +extern __typeof (xmlXPathNewCString) xmlXPathNewCString__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathNewCString xmlXPathNewCString__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathNewContext +extern __typeof (xmlXPathNewContext) xmlXPathNewContext __attribute((alias("xmlXPathNewContext__internal_alias"))); +#else +#ifndef xmlXPathNewContext +extern __typeof (xmlXPathNewContext) xmlXPathNewContext__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathNewContext xmlXPathNewContext__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathNewFloat +extern __typeof (xmlXPathNewFloat) xmlXPathNewFloat __attribute((alias("xmlXPathNewFloat__internal_alias"))); +#else +#ifndef xmlXPathNewFloat +extern __typeof (xmlXPathNewFloat) xmlXPathNewFloat__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathNewFloat xmlXPathNewFloat__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathNewNodeSet +extern __typeof (xmlXPathNewNodeSet) xmlXPathNewNodeSet __attribute((alias("xmlXPathNewNodeSet__internal_alias"))); +#else +#ifndef xmlXPathNewNodeSet +extern __typeof (xmlXPathNewNodeSet) xmlXPathNewNodeSet__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathNewNodeSet xmlXPathNewNodeSet__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathNewNodeSetList +extern __typeof (xmlXPathNewNodeSetList) xmlXPathNewNodeSetList __attribute((alias("xmlXPathNewNodeSetList__internal_alias"))); +#else +#ifndef xmlXPathNewNodeSetList +extern __typeof (xmlXPathNewNodeSetList) xmlXPathNewNodeSetList__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathNewNodeSetList xmlXPathNewNodeSetList__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathNewParserContext +extern __typeof (xmlXPathNewParserContext) xmlXPathNewParserContext __attribute((alias("xmlXPathNewParserContext__internal_alias"))); +#else +#ifndef xmlXPathNewParserContext +extern __typeof (xmlXPathNewParserContext) xmlXPathNewParserContext__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathNewParserContext xmlXPathNewParserContext__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathNewString +extern __typeof (xmlXPathNewString) xmlXPathNewString __attribute((alias("xmlXPathNewString__internal_alias"))); +#else +#ifndef xmlXPathNewString +extern __typeof (xmlXPathNewString) xmlXPathNewString__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathNewString xmlXPathNewString__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathNewValueTree +extern __typeof (xmlXPathNewValueTree) xmlXPathNewValueTree __attribute((alias("xmlXPathNewValueTree__internal_alias"))); +#else +#ifndef xmlXPathNewValueTree +extern __typeof (xmlXPathNewValueTree) xmlXPathNewValueTree__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathNewValueTree xmlXPathNewValueTree__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathNextAncestor +extern __typeof (xmlXPathNextAncestor) xmlXPathNextAncestor __attribute((alias("xmlXPathNextAncestor__internal_alias"))); +#else +#ifndef xmlXPathNextAncestor +extern __typeof (xmlXPathNextAncestor) xmlXPathNextAncestor__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathNextAncestor xmlXPathNextAncestor__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathNextAncestorOrSelf +extern __typeof (xmlXPathNextAncestorOrSelf) xmlXPathNextAncestorOrSelf __attribute((alias("xmlXPathNextAncestorOrSelf__internal_alias"))); +#else +#ifndef xmlXPathNextAncestorOrSelf +extern __typeof (xmlXPathNextAncestorOrSelf) xmlXPathNextAncestorOrSelf__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathNextAncestorOrSelf xmlXPathNextAncestorOrSelf__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathNextAttribute +extern __typeof (xmlXPathNextAttribute) xmlXPathNextAttribute __attribute((alias("xmlXPathNextAttribute__internal_alias"))); +#else +#ifndef xmlXPathNextAttribute +extern __typeof (xmlXPathNextAttribute) xmlXPathNextAttribute__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathNextAttribute xmlXPathNextAttribute__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathNextChild +extern __typeof (xmlXPathNextChild) xmlXPathNextChild __attribute((alias("xmlXPathNextChild__internal_alias"))); +#else +#ifndef xmlXPathNextChild +extern __typeof (xmlXPathNextChild) xmlXPathNextChild__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathNextChild xmlXPathNextChild__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathNextDescendant +extern __typeof (xmlXPathNextDescendant) xmlXPathNextDescendant __attribute((alias("xmlXPathNextDescendant__internal_alias"))); +#else +#ifndef xmlXPathNextDescendant +extern __typeof (xmlXPathNextDescendant) xmlXPathNextDescendant__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathNextDescendant xmlXPathNextDescendant__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathNextDescendantOrSelf +extern __typeof (xmlXPathNextDescendantOrSelf) xmlXPathNextDescendantOrSelf __attribute((alias("xmlXPathNextDescendantOrSelf__internal_alias"))); +#else +#ifndef xmlXPathNextDescendantOrSelf +extern __typeof (xmlXPathNextDescendantOrSelf) xmlXPathNextDescendantOrSelf__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathNextDescendantOrSelf xmlXPathNextDescendantOrSelf__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathNextFollowing +extern __typeof (xmlXPathNextFollowing) xmlXPathNextFollowing __attribute((alias("xmlXPathNextFollowing__internal_alias"))); +#else +#ifndef xmlXPathNextFollowing +extern __typeof (xmlXPathNextFollowing) xmlXPathNextFollowing__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathNextFollowing xmlXPathNextFollowing__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathNextFollowingSibling +extern __typeof (xmlXPathNextFollowingSibling) xmlXPathNextFollowingSibling __attribute((alias("xmlXPathNextFollowingSibling__internal_alias"))); +#else +#ifndef xmlXPathNextFollowingSibling +extern __typeof (xmlXPathNextFollowingSibling) xmlXPathNextFollowingSibling__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathNextFollowingSibling xmlXPathNextFollowingSibling__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathNextNamespace +extern __typeof (xmlXPathNextNamespace) xmlXPathNextNamespace __attribute((alias("xmlXPathNextNamespace__internal_alias"))); +#else +#ifndef xmlXPathNextNamespace +extern __typeof (xmlXPathNextNamespace) xmlXPathNextNamespace__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathNextNamespace xmlXPathNextNamespace__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathNextParent +extern __typeof (xmlXPathNextParent) xmlXPathNextParent __attribute((alias("xmlXPathNextParent__internal_alias"))); +#else +#ifndef xmlXPathNextParent +extern __typeof (xmlXPathNextParent) xmlXPathNextParent__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathNextParent xmlXPathNextParent__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathNextPreceding +extern __typeof (xmlXPathNextPreceding) xmlXPathNextPreceding __attribute((alias("xmlXPathNextPreceding__internal_alias"))); +#else +#ifndef xmlXPathNextPreceding +extern __typeof (xmlXPathNextPreceding) xmlXPathNextPreceding__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathNextPreceding xmlXPathNextPreceding__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathNextPrecedingSibling +extern __typeof (xmlXPathNextPrecedingSibling) xmlXPathNextPrecedingSibling __attribute((alias("xmlXPathNextPrecedingSibling__internal_alias"))); +#else +#ifndef xmlXPathNextPrecedingSibling +extern __typeof (xmlXPathNextPrecedingSibling) xmlXPathNextPrecedingSibling__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathNextPrecedingSibling xmlXPathNextPrecedingSibling__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathNextSelf +extern __typeof (xmlXPathNextSelf) xmlXPathNextSelf __attribute((alias("xmlXPathNextSelf__internal_alias"))); +#else +#ifndef xmlXPathNextSelf +extern __typeof (xmlXPathNextSelf) xmlXPathNextSelf__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathNextSelf xmlXPathNextSelf__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathNodeEval +extern __typeof (xmlXPathNodeEval) xmlXPathNodeEval __attribute((alias("xmlXPathNodeEval__internal_alias"))); +#else +#ifndef xmlXPathNodeEval +extern __typeof (xmlXPathNodeEval) xmlXPathNodeEval__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathNodeEval xmlXPathNodeEval__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathNodeLeading +extern __typeof (xmlXPathNodeLeading) xmlXPathNodeLeading __attribute((alias("xmlXPathNodeLeading__internal_alias"))); +#else +#ifndef xmlXPathNodeLeading +extern __typeof (xmlXPathNodeLeading) xmlXPathNodeLeading__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathNodeLeading xmlXPathNodeLeading__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathNodeLeadingSorted +extern __typeof (xmlXPathNodeLeadingSorted) xmlXPathNodeLeadingSorted __attribute((alias("xmlXPathNodeLeadingSorted__internal_alias"))); +#else +#ifndef xmlXPathNodeLeadingSorted +extern __typeof (xmlXPathNodeLeadingSorted) xmlXPathNodeLeadingSorted__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathNodeLeadingSorted xmlXPathNodeLeadingSorted__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathNodeSetAdd +extern __typeof (xmlXPathNodeSetAdd) xmlXPathNodeSetAdd __attribute((alias("xmlXPathNodeSetAdd__internal_alias"))); +#else +#ifndef xmlXPathNodeSetAdd +extern __typeof (xmlXPathNodeSetAdd) xmlXPathNodeSetAdd__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathNodeSetAdd xmlXPathNodeSetAdd__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathNodeSetAddNs +extern __typeof (xmlXPathNodeSetAddNs) xmlXPathNodeSetAddNs __attribute((alias("xmlXPathNodeSetAddNs__internal_alias"))); +#else +#ifndef xmlXPathNodeSetAddNs +extern __typeof (xmlXPathNodeSetAddNs) xmlXPathNodeSetAddNs__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathNodeSetAddNs xmlXPathNodeSetAddNs__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathNodeSetAddUnique +extern __typeof (xmlXPathNodeSetAddUnique) xmlXPathNodeSetAddUnique __attribute((alias("xmlXPathNodeSetAddUnique__internal_alias"))); +#else +#ifndef xmlXPathNodeSetAddUnique +extern __typeof (xmlXPathNodeSetAddUnique) xmlXPathNodeSetAddUnique__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathNodeSetAddUnique xmlXPathNodeSetAddUnique__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathNodeSetContains +extern __typeof (xmlXPathNodeSetContains) xmlXPathNodeSetContains __attribute((alias("xmlXPathNodeSetContains__internal_alias"))); +#else +#ifndef xmlXPathNodeSetContains +extern __typeof (xmlXPathNodeSetContains) xmlXPathNodeSetContains__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathNodeSetContains xmlXPathNodeSetContains__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathNodeSetCreate +extern __typeof (xmlXPathNodeSetCreate) xmlXPathNodeSetCreate __attribute((alias("xmlXPathNodeSetCreate__internal_alias"))); +#else +#ifndef xmlXPathNodeSetCreate +extern __typeof (xmlXPathNodeSetCreate) xmlXPathNodeSetCreate__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathNodeSetCreate xmlXPathNodeSetCreate__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathNodeSetDel +extern __typeof (xmlXPathNodeSetDel) xmlXPathNodeSetDel __attribute((alias("xmlXPathNodeSetDel__internal_alias"))); +#else +#ifndef xmlXPathNodeSetDel +extern __typeof (xmlXPathNodeSetDel) xmlXPathNodeSetDel__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathNodeSetDel xmlXPathNodeSetDel__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathNodeSetFreeNs +extern __typeof (xmlXPathNodeSetFreeNs) xmlXPathNodeSetFreeNs __attribute((alias("xmlXPathNodeSetFreeNs__internal_alias"))); +#else +#ifndef xmlXPathNodeSetFreeNs +extern __typeof (xmlXPathNodeSetFreeNs) xmlXPathNodeSetFreeNs__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathNodeSetFreeNs xmlXPathNodeSetFreeNs__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathNodeSetMerge +extern __typeof (xmlXPathNodeSetMerge) xmlXPathNodeSetMerge __attribute((alias("xmlXPathNodeSetMerge__internal_alias"))); +#else +#ifndef xmlXPathNodeSetMerge +extern __typeof (xmlXPathNodeSetMerge) xmlXPathNodeSetMerge__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathNodeSetMerge xmlXPathNodeSetMerge__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathNodeSetRemove +extern __typeof (xmlXPathNodeSetRemove) xmlXPathNodeSetRemove __attribute((alias("xmlXPathNodeSetRemove__internal_alias"))); +#else +#ifndef xmlXPathNodeSetRemove +extern __typeof (xmlXPathNodeSetRemove) xmlXPathNodeSetRemove__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathNodeSetRemove xmlXPathNodeSetRemove__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathNodeSetSort +extern __typeof (xmlXPathNodeSetSort) xmlXPathNodeSetSort __attribute((alias("xmlXPathNodeSetSort__internal_alias"))); +#else +#ifndef xmlXPathNodeSetSort +extern __typeof (xmlXPathNodeSetSort) xmlXPathNodeSetSort__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathNodeSetSort xmlXPathNodeSetSort__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathNodeTrailing +extern __typeof (xmlXPathNodeTrailing) xmlXPathNodeTrailing __attribute((alias("xmlXPathNodeTrailing__internal_alias"))); +#else +#ifndef xmlXPathNodeTrailing +extern __typeof (xmlXPathNodeTrailing) xmlXPathNodeTrailing__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathNodeTrailing xmlXPathNodeTrailing__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathNodeTrailingSorted +extern __typeof (xmlXPathNodeTrailingSorted) xmlXPathNodeTrailingSorted __attribute((alias("xmlXPathNodeTrailingSorted__internal_alias"))); +#else +#ifndef xmlXPathNodeTrailingSorted +extern __typeof (xmlXPathNodeTrailingSorted) xmlXPathNodeTrailingSorted__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathNodeTrailingSorted xmlXPathNodeTrailingSorted__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathNormalizeFunction +extern __typeof (xmlXPathNormalizeFunction) xmlXPathNormalizeFunction __attribute((alias("xmlXPathNormalizeFunction__internal_alias"))); +#else +#ifndef xmlXPathNormalizeFunction +extern __typeof (xmlXPathNormalizeFunction) xmlXPathNormalizeFunction__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathNormalizeFunction xmlXPathNormalizeFunction__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathNotEqualValues +extern __typeof (xmlXPathNotEqualValues) xmlXPathNotEqualValues __attribute((alias("xmlXPathNotEqualValues__internal_alias"))); +#else +#ifndef xmlXPathNotEqualValues +extern __typeof (xmlXPathNotEqualValues) xmlXPathNotEqualValues__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathNotEqualValues xmlXPathNotEqualValues__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathNotFunction +extern __typeof (xmlXPathNotFunction) xmlXPathNotFunction __attribute((alias("xmlXPathNotFunction__internal_alias"))); +#else +#ifndef xmlXPathNotFunction +extern __typeof (xmlXPathNotFunction) xmlXPathNotFunction__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathNotFunction xmlXPathNotFunction__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathNsLookup +extern __typeof (xmlXPathNsLookup) xmlXPathNsLookup __attribute((alias("xmlXPathNsLookup__internal_alias"))); +#else +#ifndef xmlXPathNsLookup +extern __typeof (xmlXPathNsLookup) xmlXPathNsLookup__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathNsLookup xmlXPathNsLookup__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathNumberFunction +extern __typeof (xmlXPathNumberFunction) xmlXPathNumberFunction __attribute((alias("xmlXPathNumberFunction__internal_alias"))); +#else +#ifndef xmlXPathNumberFunction +extern __typeof (xmlXPathNumberFunction) xmlXPathNumberFunction__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathNumberFunction xmlXPathNumberFunction__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathObjectCopy +extern __typeof (xmlXPathObjectCopy) xmlXPathObjectCopy __attribute((alias("xmlXPathObjectCopy__internal_alias"))); +#else +#ifndef xmlXPathObjectCopy +extern __typeof (xmlXPathObjectCopy) xmlXPathObjectCopy__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathObjectCopy xmlXPathObjectCopy__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathOrderDocElems +extern __typeof (xmlXPathOrderDocElems) xmlXPathOrderDocElems __attribute((alias("xmlXPathOrderDocElems__internal_alias"))); +#else +#ifndef xmlXPathOrderDocElems +extern __typeof (xmlXPathOrderDocElems) xmlXPathOrderDocElems__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathOrderDocElems xmlXPathOrderDocElems__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathParseNCName +extern __typeof (xmlXPathParseNCName) xmlXPathParseNCName __attribute((alias("xmlXPathParseNCName__internal_alias"))); +#else +#ifndef xmlXPathParseNCName +extern __typeof (xmlXPathParseNCName) xmlXPathParseNCName__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathParseNCName xmlXPathParseNCName__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathParseName +extern __typeof (xmlXPathParseName) xmlXPathParseName __attribute((alias("xmlXPathParseName__internal_alias"))); +#else +#ifndef xmlXPathParseName +extern __typeof (xmlXPathParseName) xmlXPathParseName__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathParseName xmlXPathParseName__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathPopBoolean +extern __typeof (xmlXPathPopBoolean) xmlXPathPopBoolean __attribute((alias("xmlXPathPopBoolean__internal_alias"))); +#else +#ifndef xmlXPathPopBoolean +extern __typeof (xmlXPathPopBoolean) xmlXPathPopBoolean__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathPopBoolean xmlXPathPopBoolean__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathPopExternal +extern __typeof (xmlXPathPopExternal) xmlXPathPopExternal __attribute((alias("xmlXPathPopExternal__internal_alias"))); +#else +#ifndef xmlXPathPopExternal +extern __typeof (xmlXPathPopExternal) xmlXPathPopExternal__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathPopExternal xmlXPathPopExternal__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathPopNodeSet +extern __typeof (xmlXPathPopNodeSet) xmlXPathPopNodeSet __attribute((alias("xmlXPathPopNodeSet__internal_alias"))); +#else +#ifndef xmlXPathPopNodeSet +extern __typeof (xmlXPathPopNodeSet) xmlXPathPopNodeSet__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathPopNodeSet xmlXPathPopNodeSet__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathPopNumber +extern __typeof (xmlXPathPopNumber) xmlXPathPopNumber __attribute((alias("xmlXPathPopNumber__internal_alias"))); +#else +#ifndef xmlXPathPopNumber +extern __typeof (xmlXPathPopNumber) xmlXPathPopNumber__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathPopNumber xmlXPathPopNumber__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathPopString +extern __typeof (xmlXPathPopString) xmlXPathPopString __attribute((alias("xmlXPathPopString__internal_alias"))); +#else +#ifndef xmlXPathPopString +extern __typeof (xmlXPathPopString) xmlXPathPopString__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathPopString xmlXPathPopString__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathPositionFunction +extern __typeof (xmlXPathPositionFunction) xmlXPathPositionFunction __attribute((alias("xmlXPathPositionFunction__internal_alias"))); +#else +#ifndef xmlXPathPositionFunction +extern __typeof (xmlXPathPositionFunction) xmlXPathPositionFunction__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathPositionFunction xmlXPathPositionFunction__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathRegisterAllFunctions +extern __typeof (xmlXPathRegisterAllFunctions) xmlXPathRegisterAllFunctions __attribute((alias("xmlXPathRegisterAllFunctions__internal_alias"))); +#else +#ifndef xmlXPathRegisterAllFunctions +extern __typeof (xmlXPathRegisterAllFunctions) xmlXPathRegisterAllFunctions__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathRegisterAllFunctions xmlXPathRegisterAllFunctions__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathRegisterFunc +extern __typeof (xmlXPathRegisterFunc) xmlXPathRegisterFunc __attribute((alias("xmlXPathRegisterFunc__internal_alias"))); +#else +#ifndef xmlXPathRegisterFunc +extern __typeof (xmlXPathRegisterFunc) xmlXPathRegisterFunc__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathRegisterFunc xmlXPathRegisterFunc__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathRegisterFuncLookup +extern __typeof (xmlXPathRegisterFuncLookup) xmlXPathRegisterFuncLookup __attribute((alias("xmlXPathRegisterFuncLookup__internal_alias"))); +#else +#ifndef xmlXPathRegisterFuncLookup +extern __typeof (xmlXPathRegisterFuncLookup) xmlXPathRegisterFuncLookup__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathRegisterFuncLookup xmlXPathRegisterFuncLookup__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathRegisterFuncNS +extern __typeof (xmlXPathRegisterFuncNS) xmlXPathRegisterFuncNS __attribute((alias("xmlXPathRegisterFuncNS__internal_alias"))); +#else +#ifndef xmlXPathRegisterFuncNS +extern __typeof (xmlXPathRegisterFuncNS) xmlXPathRegisterFuncNS__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathRegisterFuncNS xmlXPathRegisterFuncNS__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathRegisterNs +extern __typeof (xmlXPathRegisterNs) xmlXPathRegisterNs __attribute((alias("xmlXPathRegisterNs__internal_alias"))); +#else +#ifndef xmlXPathRegisterNs +extern __typeof (xmlXPathRegisterNs) xmlXPathRegisterNs__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathRegisterNs xmlXPathRegisterNs__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathRegisterVariable +extern __typeof (xmlXPathRegisterVariable) xmlXPathRegisterVariable __attribute((alias("xmlXPathRegisterVariable__internal_alias"))); +#else +#ifndef xmlXPathRegisterVariable +extern __typeof (xmlXPathRegisterVariable) xmlXPathRegisterVariable__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathRegisterVariable xmlXPathRegisterVariable__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathRegisterVariableLookup +extern __typeof (xmlXPathRegisterVariableLookup) xmlXPathRegisterVariableLookup __attribute((alias("xmlXPathRegisterVariableLookup__internal_alias"))); +#else +#ifndef xmlXPathRegisterVariableLookup +extern __typeof (xmlXPathRegisterVariableLookup) xmlXPathRegisterVariableLookup__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathRegisterVariableLookup xmlXPathRegisterVariableLookup__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathRegisterVariableNS +extern __typeof (xmlXPathRegisterVariableNS) xmlXPathRegisterVariableNS __attribute((alias("xmlXPathRegisterVariableNS__internal_alias"))); +#else +#ifndef xmlXPathRegisterVariableNS +extern __typeof (xmlXPathRegisterVariableNS) xmlXPathRegisterVariableNS__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathRegisterVariableNS xmlXPathRegisterVariableNS__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathRegisteredFuncsCleanup +extern __typeof (xmlXPathRegisteredFuncsCleanup) xmlXPathRegisteredFuncsCleanup __attribute((alias("xmlXPathRegisteredFuncsCleanup__internal_alias"))); +#else +#ifndef xmlXPathRegisteredFuncsCleanup +extern __typeof (xmlXPathRegisteredFuncsCleanup) xmlXPathRegisteredFuncsCleanup__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathRegisteredFuncsCleanup xmlXPathRegisteredFuncsCleanup__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathRegisteredNsCleanup +extern __typeof (xmlXPathRegisteredNsCleanup) xmlXPathRegisteredNsCleanup __attribute((alias("xmlXPathRegisteredNsCleanup__internal_alias"))); +#else +#ifndef xmlXPathRegisteredNsCleanup +extern __typeof (xmlXPathRegisteredNsCleanup) xmlXPathRegisteredNsCleanup__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathRegisteredNsCleanup xmlXPathRegisteredNsCleanup__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathRegisteredVariablesCleanup +extern __typeof (xmlXPathRegisteredVariablesCleanup) xmlXPathRegisteredVariablesCleanup __attribute((alias("xmlXPathRegisteredVariablesCleanup__internal_alias"))); +#else +#ifndef xmlXPathRegisteredVariablesCleanup +extern __typeof (xmlXPathRegisteredVariablesCleanup) xmlXPathRegisteredVariablesCleanup__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathRegisteredVariablesCleanup xmlXPathRegisteredVariablesCleanup__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathRoot +extern __typeof (xmlXPathRoot) xmlXPathRoot __attribute((alias("xmlXPathRoot__internal_alias"))); +#else +#ifndef xmlXPathRoot +extern __typeof (xmlXPathRoot) xmlXPathRoot__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathRoot xmlXPathRoot__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathRoundFunction +extern __typeof (xmlXPathRoundFunction) xmlXPathRoundFunction __attribute((alias("xmlXPathRoundFunction__internal_alias"))); +#else +#ifndef xmlXPathRoundFunction +extern __typeof (xmlXPathRoundFunction) xmlXPathRoundFunction__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathRoundFunction xmlXPathRoundFunction__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathSetContextNode +extern __typeof (xmlXPathSetContextNode) xmlXPathSetContextNode __attribute((alias("xmlXPathSetContextNode__internal_alias"))); +#else +#ifndef xmlXPathSetContextNode +extern __typeof (xmlXPathSetContextNode) xmlXPathSetContextNode__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathSetContextNode xmlXPathSetContextNode__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathStartsWithFunction +extern __typeof (xmlXPathStartsWithFunction) xmlXPathStartsWithFunction __attribute((alias("xmlXPathStartsWithFunction__internal_alias"))); +#else +#ifndef xmlXPathStartsWithFunction +extern __typeof (xmlXPathStartsWithFunction) xmlXPathStartsWithFunction__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathStartsWithFunction xmlXPathStartsWithFunction__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathStringEvalNumber +extern __typeof (xmlXPathStringEvalNumber) xmlXPathStringEvalNumber __attribute((alias("xmlXPathStringEvalNumber__internal_alias"))); +#else +#ifndef xmlXPathStringEvalNumber +extern __typeof (xmlXPathStringEvalNumber) xmlXPathStringEvalNumber__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathStringEvalNumber xmlXPathStringEvalNumber__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathStringFunction +extern __typeof (xmlXPathStringFunction) xmlXPathStringFunction __attribute((alias("xmlXPathStringFunction__internal_alias"))); +#else +#ifndef xmlXPathStringFunction +extern __typeof (xmlXPathStringFunction) xmlXPathStringFunction__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathStringFunction xmlXPathStringFunction__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathStringLengthFunction +extern __typeof (xmlXPathStringLengthFunction) xmlXPathStringLengthFunction __attribute((alias("xmlXPathStringLengthFunction__internal_alias"))); +#else +#ifndef xmlXPathStringLengthFunction +extern __typeof (xmlXPathStringLengthFunction) xmlXPathStringLengthFunction__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathStringLengthFunction xmlXPathStringLengthFunction__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathSubValues +extern __typeof (xmlXPathSubValues) xmlXPathSubValues __attribute((alias("xmlXPathSubValues__internal_alias"))); +#else +#ifndef xmlXPathSubValues +extern __typeof (xmlXPathSubValues) xmlXPathSubValues__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathSubValues xmlXPathSubValues__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathSubstringAfterFunction +extern __typeof (xmlXPathSubstringAfterFunction) xmlXPathSubstringAfterFunction __attribute((alias("xmlXPathSubstringAfterFunction__internal_alias"))); +#else +#ifndef xmlXPathSubstringAfterFunction +extern __typeof (xmlXPathSubstringAfterFunction) xmlXPathSubstringAfterFunction__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathSubstringAfterFunction xmlXPathSubstringAfterFunction__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathSubstringBeforeFunction +extern __typeof (xmlXPathSubstringBeforeFunction) xmlXPathSubstringBeforeFunction __attribute((alias("xmlXPathSubstringBeforeFunction__internal_alias"))); +#else +#ifndef xmlXPathSubstringBeforeFunction +extern __typeof (xmlXPathSubstringBeforeFunction) xmlXPathSubstringBeforeFunction__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathSubstringBeforeFunction xmlXPathSubstringBeforeFunction__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathSubstringFunction +extern __typeof (xmlXPathSubstringFunction) xmlXPathSubstringFunction __attribute((alias("xmlXPathSubstringFunction__internal_alias"))); +#else +#ifndef xmlXPathSubstringFunction +extern __typeof (xmlXPathSubstringFunction) xmlXPathSubstringFunction__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathSubstringFunction xmlXPathSubstringFunction__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathSumFunction +extern __typeof (xmlXPathSumFunction) xmlXPathSumFunction __attribute((alias("xmlXPathSumFunction__internal_alias"))); +#else +#ifndef xmlXPathSumFunction +extern __typeof (xmlXPathSumFunction) xmlXPathSumFunction__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathSumFunction xmlXPathSumFunction__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathTrailing +extern __typeof (xmlXPathTrailing) xmlXPathTrailing __attribute((alias("xmlXPathTrailing__internal_alias"))); +#else +#ifndef xmlXPathTrailing +extern __typeof (xmlXPathTrailing) xmlXPathTrailing__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathTrailing xmlXPathTrailing__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathTrailingSorted +extern __typeof (xmlXPathTrailingSorted) xmlXPathTrailingSorted __attribute((alias("xmlXPathTrailingSorted__internal_alias"))); +#else +#ifndef xmlXPathTrailingSorted +extern __typeof (xmlXPathTrailingSorted) xmlXPathTrailingSorted__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathTrailingSorted xmlXPathTrailingSorted__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathTranslateFunction +extern __typeof (xmlXPathTranslateFunction) xmlXPathTranslateFunction __attribute((alias("xmlXPathTranslateFunction__internal_alias"))); +#else +#ifndef xmlXPathTranslateFunction +extern __typeof (xmlXPathTranslateFunction) xmlXPathTranslateFunction__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathTranslateFunction xmlXPathTranslateFunction__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathTrueFunction +extern __typeof (xmlXPathTrueFunction) xmlXPathTrueFunction __attribute((alias("xmlXPathTrueFunction__internal_alias"))); +#else +#ifndef xmlXPathTrueFunction +extern __typeof (xmlXPathTrueFunction) xmlXPathTrueFunction__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathTrueFunction xmlXPathTrueFunction__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathValueFlipSign +extern __typeof (xmlXPathValueFlipSign) xmlXPathValueFlipSign __attribute((alias("xmlXPathValueFlipSign__internal_alias"))); +#else +#ifndef xmlXPathValueFlipSign +extern __typeof (xmlXPathValueFlipSign) xmlXPathValueFlipSign__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathValueFlipSign xmlXPathValueFlipSign__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathVariableLookup +extern __typeof (xmlXPathVariableLookup) xmlXPathVariableLookup __attribute((alias("xmlXPathVariableLookup__internal_alias"))); +#else +#ifndef xmlXPathVariableLookup +extern __typeof (xmlXPathVariableLookup) xmlXPathVariableLookup__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathVariableLookup xmlXPathVariableLookup__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathVariableLookupNS +extern __typeof (xmlXPathVariableLookupNS) xmlXPathVariableLookupNS __attribute((alias("xmlXPathVariableLookupNS__internal_alias"))); +#else +#ifndef xmlXPathVariableLookupNS +extern __typeof (xmlXPathVariableLookupNS) xmlXPathVariableLookupNS__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathVariableLookupNS xmlXPathVariableLookupNS__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathWrapCString +extern __typeof (xmlXPathWrapCString) xmlXPathWrapCString __attribute((alias("xmlXPathWrapCString__internal_alias"))); +#else +#ifndef xmlXPathWrapCString +extern __typeof (xmlXPathWrapCString) xmlXPathWrapCString__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathWrapCString xmlXPathWrapCString__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathWrapExternal +extern __typeof (xmlXPathWrapExternal) xmlXPathWrapExternal __attribute((alias("xmlXPathWrapExternal__internal_alias"))); +#else +#ifndef xmlXPathWrapExternal +extern __typeof (xmlXPathWrapExternal) xmlXPathWrapExternal__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathWrapExternal xmlXPathWrapExternal__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathWrapNodeSet +extern __typeof (xmlXPathWrapNodeSet) xmlXPathWrapNodeSet __attribute((alias("xmlXPathWrapNodeSet__internal_alias"))); +#else +#ifndef xmlXPathWrapNodeSet +extern __typeof (xmlXPathWrapNodeSet) xmlXPathWrapNodeSet__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathWrapNodeSet xmlXPathWrapNodeSet__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPathWrapString +extern __typeof (xmlXPathWrapString) xmlXPathWrapString __attribute((alias("xmlXPathWrapString__internal_alias"))); +#else +#ifndef xmlXPathWrapString +extern __typeof (xmlXPathWrapString) xmlXPathWrapString__internal_alias __attribute((visibility("hidden"))); +#define xmlXPathWrapString xmlXPathWrapString__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPATH_ENABLED) +#ifdef bottom_xpath +#undef xmlXPatherror +extern __typeof (xmlXPatherror) xmlXPatherror __attribute((alias("xmlXPatherror__internal_alias"))); +#else +#ifndef xmlXPatherror +extern __typeof (xmlXPatherror) xmlXPatherror__internal_alias __attribute((visibility("hidden"))); +#define xmlXPatherror xmlXPatherror__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPTR_ENABLED) +#ifdef bottom_xpointer +#undef xmlXPtrBuildNodeList +extern __typeof (xmlXPtrBuildNodeList) xmlXPtrBuildNodeList __attribute((alias("xmlXPtrBuildNodeList__internal_alias"))); +#else +#ifndef xmlXPtrBuildNodeList +extern __typeof (xmlXPtrBuildNodeList) xmlXPtrBuildNodeList__internal_alias __attribute((visibility("hidden"))); +#define xmlXPtrBuildNodeList xmlXPtrBuildNodeList__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPTR_ENABLED) +#ifdef bottom_xpointer +#undef xmlXPtrEval +extern __typeof (xmlXPtrEval) xmlXPtrEval __attribute((alias("xmlXPtrEval__internal_alias"))); +#else +#ifndef xmlXPtrEval +extern __typeof (xmlXPtrEval) xmlXPtrEval__internal_alias __attribute((visibility("hidden"))); +#define xmlXPtrEval xmlXPtrEval__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPTR_ENABLED) +#ifdef bottom_xpointer +#undef xmlXPtrEvalRangePredicate +extern __typeof (xmlXPtrEvalRangePredicate) xmlXPtrEvalRangePredicate __attribute((alias("xmlXPtrEvalRangePredicate__internal_alias"))); +#else +#ifndef xmlXPtrEvalRangePredicate +extern __typeof (xmlXPtrEvalRangePredicate) xmlXPtrEvalRangePredicate__internal_alias __attribute((visibility("hidden"))); +#define xmlXPtrEvalRangePredicate xmlXPtrEvalRangePredicate__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPTR_ENABLED) +#ifdef bottom_xpointer +#undef xmlXPtrFreeLocationSet +extern __typeof (xmlXPtrFreeLocationSet) xmlXPtrFreeLocationSet __attribute((alias("xmlXPtrFreeLocationSet__internal_alias"))); +#else +#ifndef xmlXPtrFreeLocationSet +extern __typeof (xmlXPtrFreeLocationSet) xmlXPtrFreeLocationSet__internal_alias __attribute((visibility("hidden"))); +#define xmlXPtrFreeLocationSet xmlXPtrFreeLocationSet__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPTR_ENABLED) +#ifdef bottom_xpointer +#undef xmlXPtrLocationSetAdd +extern __typeof (xmlXPtrLocationSetAdd) xmlXPtrLocationSetAdd __attribute((alias("xmlXPtrLocationSetAdd__internal_alias"))); +#else +#ifndef xmlXPtrLocationSetAdd +extern __typeof (xmlXPtrLocationSetAdd) xmlXPtrLocationSetAdd__internal_alias __attribute((visibility("hidden"))); +#define xmlXPtrLocationSetAdd xmlXPtrLocationSetAdd__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPTR_ENABLED) +#ifdef bottom_xpointer +#undef xmlXPtrLocationSetCreate +extern __typeof (xmlXPtrLocationSetCreate) xmlXPtrLocationSetCreate __attribute((alias("xmlXPtrLocationSetCreate__internal_alias"))); +#else +#ifndef xmlXPtrLocationSetCreate +extern __typeof (xmlXPtrLocationSetCreate) xmlXPtrLocationSetCreate__internal_alias __attribute((visibility("hidden"))); +#define xmlXPtrLocationSetCreate xmlXPtrLocationSetCreate__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPTR_ENABLED) +#ifdef bottom_xpointer +#undef xmlXPtrLocationSetDel +extern __typeof (xmlXPtrLocationSetDel) xmlXPtrLocationSetDel __attribute((alias("xmlXPtrLocationSetDel__internal_alias"))); +#else +#ifndef xmlXPtrLocationSetDel +extern __typeof (xmlXPtrLocationSetDel) xmlXPtrLocationSetDel__internal_alias __attribute((visibility("hidden"))); +#define xmlXPtrLocationSetDel xmlXPtrLocationSetDel__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPTR_ENABLED) +#ifdef bottom_xpointer +#undef xmlXPtrLocationSetMerge +extern __typeof (xmlXPtrLocationSetMerge) xmlXPtrLocationSetMerge __attribute((alias("xmlXPtrLocationSetMerge__internal_alias"))); +#else +#ifndef xmlXPtrLocationSetMerge +extern __typeof (xmlXPtrLocationSetMerge) xmlXPtrLocationSetMerge__internal_alias __attribute((visibility("hidden"))); +#define xmlXPtrLocationSetMerge xmlXPtrLocationSetMerge__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPTR_ENABLED) +#ifdef bottom_xpointer +#undef xmlXPtrLocationSetRemove +extern __typeof (xmlXPtrLocationSetRemove) xmlXPtrLocationSetRemove __attribute((alias("xmlXPtrLocationSetRemove__internal_alias"))); +#else +#ifndef xmlXPtrLocationSetRemove +extern __typeof (xmlXPtrLocationSetRemove) xmlXPtrLocationSetRemove__internal_alias __attribute((visibility("hidden"))); +#define xmlXPtrLocationSetRemove xmlXPtrLocationSetRemove__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPTR_ENABLED) +#ifdef bottom_xpointer +#undef xmlXPtrNewCollapsedRange +extern __typeof (xmlXPtrNewCollapsedRange) xmlXPtrNewCollapsedRange __attribute((alias("xmlXPtrNewCollapsedRange__internal_alias"))); +#else +#ifndef xmlXPtrNewCollapsedRange +extern __typeof (xmlXPtrNewCollapsedRange) xmlXPtrNewCollapsedRange__internal_alias __attribute((visibility("hidden"))); +#define xmlXPtrNewCollapsedRange xmlXPtrNewCollapsedRange__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPTR_ENABLED) +#ifdef bottom_xpointer +#undef xmlXPtrNewContext +extern __typeof (xmlXPtrNewContext) xmlXPtrNewContext __attribute((alias("xmlXPtrNewContext__internal_alias"))); +#else +#ifndef xmlXPtrNewContext +extern __typeof (xmlXPtrNewContext) xmlXPtrNewContext__internal_alias __attribute((visibility("hidden"))); +#define xmlXPtrNewContext xmlXPtrNewContext__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPTR_ENABLED) +#ifdef bottom_xpointer +#undef xmlXPtrNewLocationSetNodeSet +extern __typeof (xmlXPtrNewLocationSetNodeSet) xmlXPtrNewLocationSetNodeSet __attribute((alias("xmlXPtrNewLocationSetNodeSet__internal_alias"))); +#else +#ifndef xmlXPtrNewLocationSetNodeSet +extern __typeof (xmlXPtrNewLocationSetNodeSet) xmlXPtrNewLocationSetNodeSet__internal_alias __attribute((visibility("hidden"))); +#define xmlXPtrNewLocationSetNodeSet xmlXPtrNewLocationSetNodeSet__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPTR_ENABLED) +#ifdef bottom_xpointer +#undef xmlXPtrNewLocationSetNodes +extern __typeof (xmlXPtrNewLocationSetNodes) xmlXPtrNewLocationSetNodes __attribute((alias("xmlXPtrNewLocationSetNodes__internal_alias"))); +#else +#ifndef xmlXPtrNewLocationSetNodes +extern __typeof (xmlXPtrNewLocationSetNodes) xmlXPtrNewLocationSetNodes__internal_alias __attribute((visibility("hidden"))); +#define xmlXPtrNewLocationSetNodes xmlXPtrNewLocationSetNodes__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPTR_ENABLED) +#ifdef bottom_xpointer +#undef xmlXPtrNewRange +extern __typeof (xmlXPtrNewRange) xmlXPtrNewRange __attribute((alias("xmlXPtrNewRange__internal_alias"))); +#else +#ifndef xmlXPtrNewRange +extern __typeof (xmlXPtrNewRange) xmlXPtrNewRange__internal_alias __attribute((visibility("hidden"))); +#define xmlXPtrNewRange xmlXPtrNewRange__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPTR_ENABLED) +#ifdef bottom_xpointer +#undef xmlXPtrNewRangeNodeObject +extern __typeof (xmlXPtrNewRangeNodeObject) xmlXPtrNewRangeNodeObject __attribute((alias("xmlXPtrNewRangeNodeObject__internal_alias"))); +#else +#ifndef xmlXPtrNewRangeNodeObject +extern __typeof (xmlXPtrNewRangeNodeObject) xmlXPtrNewRangeNodeObject__internal_alias __attribute((visibility("hidden"))); +#define xmlXPtrNewRangeNodeObject xmlXPtrNewRangeNodeObject__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPTR_ENABLED) +#ifdef bottom_xpointer +#undef xmlXPtrNewRangeNodePoint +extern __typeof (xmlXPtrNewRangeNodePoint) xmlXPtrNewRangeNodePoint __attribute((alias("xmlXPtrNewRangeNodePoint__internal_alias"))); +#else +#ifndef xmlXPtrNewRangeNodePoint +extern __typeof (xmlXPtrNewRangeNodePoint) xmlXPtrNewRangeNodePoint__internal_alias __attribute((visibility("hidden"))); +#define xmlXPtrNewRangeNodePoint xmlXPtrNewRangeNodePoint__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPTR_ENABLED) +#ifdef bottom_xpointer +#undef xmlXPtrNewRangeNodes +extern __typeof (xmlXPtrNewRangeNodes) xmlXPtrNewRangeNodes __attribute((alias("xmlXPtrNewRangeNodes__internal_alias"))); +#else +#ifndef xmlXPtrNewRangeNodes +extern __typeof (xmlXPtrNewRangeNodes) xmlXPtrNewRangeNodes__internal_alias __attribute((visibility("hidden"))); +#define xmlXPtrNewRangeNodes xmlXPtrNewRangeNodes__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPTR_ENABLED) +#ifdef bottom_xpointer +#undef xmlXPtrNewRangePointNode +extern __typeof (xmlXPtrNewRangePointNode) xmlXPtrNewRangePointNode __attribute((alias("xmlXPtrNewRangePointNode__internal_alias"))); +#else +#ifndef xmlXPtrNewRangePointNode +extern __typeof (xmlXPtrNewRangePointNode) xmlXPtrNewRangePointNode__internal_alias __attribute((visibility("hidden"))); +#define xmlXPtrNewRangePointNode xmlXPtrNewRangePointNode__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPTR_ENABLED) +#ifdef bottom_xpointer +#undef xmlXPtrNewRangePoints +extern __typeof (xmlXPtrNewRangePoints) xmlXPtrNewRangePoints __attribute((alias("xmlXPtrNewRangePoints__internal_alias"))); +#else +#ifndef xmlXPtrNewRangePoints +extern __typeof (xmlXPtrNewRangePoints) xmlXPtrNewRangePoints__internal_alias __attribute((visibility("hidden"))); +#define xmlXPtrNewRangePoints xmlXPtrNewRangePoints__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPTR_ENABLED) +#ifdef bottom_xpointer +#undef xmlXPtrRangeToFunction +extern __typeof (xmlXPtrRangeToFunction) xmlXPtrRangeToFunction __attribute((alias("xmlXPtrRangeToFunction__internal_alias"))); +#else +#ifndef xmlXPtrRangeToFunction +extern __typeof (xmlXPtrRangeToFunction) xmlXPtrRangeToFunction__internal_alias __attribute((visibility("hidden"))); +#define xmlXPtrRangeToFunction xmlXPtrRangeToFunction__internal_alias +#endif +#endif +#endif + +#if defined(LIBXML_XPTR_ENABLED) +#ifdef bottom_xpointer +#undef xmlXPtrWrapLocationSet +extern __typeof (xmlXPtrWrapLocationSet) xmlXPtrWrapLocationSet __attribute((alias("xmlXPtrWrapLocationSet__internal_alias"))); +#else +#ifndef xmlXPtrWrapLocationSet +extern __typeof (xmlXPtrWrapLocationSet) xmlXPtrWrapLocationSet__internal_alias __attribute((visibility("hidden"))); +#define xmlXPtrWrapLocationSet xmlXPtrWrapLocationSet__internal_alias +#endif +#endif +#endif + + +#endif +#endif +#endif +#endif +#endif + diff --git a/enc.h b/enc.h new file mode 100644 index 0000000..057d206 --- /dev/null +++ b/enc.h @@ -0,0 +1,32 @@ +/* + * Summary: Internal Interfaces for encoding in libxml2 + * Description: this module describes a few interfaces which were + * addded along with the API changes in 2.9.0 + * those are private routines at this point + * + * Copy: See Copyright for the status of this software. + * + * Author: Daniel Veillard + */ + +#ifndef __XML_ENC_H__ +#define __XML_ENC_H__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +int xmlCharEncFirstLineInt(xmlCharEncodingHandler *handler, xmlBufferPtr out, + xmlBufferPtr in, int len); +int xmlCharEncFirstLineInput(xmlParserInputBufferPtr input, int len); +int xmlCharEncInput(xmlParserInputBufferPtr input, int flush); +int xmlCharEncOutput(xmlOutputBufferPtr output, int init); + +#ifdef __cplusplus +} +#endif +#endif /* __XML_ENC_H__ */ + + diff --git a/encoding.c b/encoding.c new file mode 100644 index 0000000..e49c7f8 --- /dev/null +++ b/encoding.c @@ -0,0 +1,4085 @@ +/* + * 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" + */ + +#define IN_LIBXML +#include "libxml.h" + +#include +#include + +#ifdef HAVE_CTYPE_H +#include +#endif +#ifdef HAVE_STDLIB_H +#include +#endif +#ifdef LIBXML_ICONV_ENABLED +#ifdef HAVE_ERRNO_H +#include +#endif +#endif +#include +#include +#ifdef LIBXML_HTML_ENABLED +#include +#endif +#include +#include + +#include "buf.h" +#include "enc.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; + +#if defined(LIBXML_ICONV_ENABLED) || defined(LIBXML_ICU_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; + +/** + * xmlEncodingErrMemory: + * @extra: extra informations + * + * Handle an out of memory condition + */ +static void +xmlEncodingErrMemory(const char *extra) +{ + __xmlSimpleError(XML_FROM_I18N, XML_ERR_NO_MEMORY, NULL, NULL, extra); +} + +/** + * xmlErrEncoding: + * @error: the error number + * @msg: the error message + * + * n encoding error + */ +static void LIBXML_ATTR_FORMAT(2,0) +xmlEncodingErr(xmlParserErrors error, const char *msg, const char *val) +{ + __xmlRaiseError(NULL, NULL, NULL, NULL, NULL, + XML_FROM_I18N, error, XML_ERR_FATAL, + NULL, 0, val, NULL, NULL, 0, 0, msg, val); +} + +#ifdef LIBXML_ICU_ENABLED +static uconv_t* +openIcuConverter(const char* name, int toUnicode) +{ + UErrorCode status = U_ZERO_ERROR; + uconv_t *conv = (uconv_t *) xmlMalloc(sizeof(uconv_t)); + if (conv == NULL) + return NULL; + + conv->uconv = ucnv_open(name, &status); + if (U_FAILURE(status)) + goto error; + + status = U_ZERO_ERROR; + if (toUnicode) { + ucnv_setToUCallBack(conv->uconv, UCNV_TO_U_CALLBACK_STOP, + NULL, NULL, NULL, &status); + } + else { + ucnv_setFromUCallBack(conv->uconv, UCNV_FROM_U_CALLBACK_STOP, + NULL, NULL, NULL, &status); + } + if (U_FAILURE(status)) + goto error; + + status = U_ZERO_ERROR; + conv->utf8 = ucnv_open("UTF-8", &status); + if (U_SUCCESS(status)) + return conv; + +error: + if (conv->uconv) + ucnv_close(conv->uconv); + xmlFree(conv); + return NULL; +} + +static void +closeIcuConverter(uconv_t *conv) +{ + if (conv != NULL) { + ucnv_close(conv->uconv); + ucnv_close(conv->utf8); + xmlFree(conv); + } +} +#endif /* LIBXML_ICU_ENABLED */ + +/************************************************************************ + * * + * 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; + + inend = in + (*inlen); + while ((in < inend) && (out - outstart + 5 < *outlen)) { + c= *in++; + + if (out >= outend) + break; + if (c < 0x80) { + *out++ = c; + } else { + *outlen = out - outstart; + *inlen = processed - base; + return(-1); + } + + processed = (const unsigned char*) in; + } + *outlen = out - outstart; + *inlen = processed - base; + return(*outlen); +} + +#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 ((out == NULL) || (outlen == NULL) || (inlen == NULL)) return(-1); + 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(*outlen); +} +#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 the number of bytes written 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; + const unsigned char* inend; + const unsigned char* instop; + + if ((out == NULL) || (in == NULL) || (outlen == NULL) || (inlen == NULL)) + return(-1); + + outend = out + *outlen; + 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(*outlen); +} + +/** + * 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(*outlen); +} + + +#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 the number of bytes written 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 ((out == NULL) || (outlen == NULL) || (inlen == NULL)) return(-1); + 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(*outlen); +} +#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(*outlen); +} + +#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; + unsigned int c, d; + int trailing; + unsigned char *tmp; + unsigned short tmp1, tmp2; + + /* UTF16LE encoding has no BOM */ + if ((out == NULL) || (outlen == NULL) || (inlen == NULL)) return(-1); + if (in == NULL) { + *outlen = 0; + *inlen = 0; + return(0); + } + inend= in + *inlen; + 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(*outlen); +} + +/** + * 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(*outlen); +} + +#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; + unsigned int c, d; + int trailing; + unsigned char *tmp; + unsigned short tmp1, tmp2; + + /* UTF-16BE has no BOM */ + if ((outb == NULL) || (outlen == NULL) || (inlen == NULL)) return(-1); + if (in == NULL) { + *outlen = 0; + *inlen = 0; + return(0); + } + inend= in + *inlen; + 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(*outlen); +} +#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 (in == NULL) + return(XML_CHAR_ENCODING_NONE); + 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 = NULL; + + /* + * Do the alias resolution + */ + alias = xmlGetEncodingAlias(name); + if (alias != NULL) + name = alias; + + /* + * Keep only the uppercase version of the encoding. + */ + if (name == NULL) { + xmlEncodingErr(XML_I18N_NO_NAME, + "xmlNewCharEncodingHandler : no name !\n", NULL); + 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) { + xmlEncodingErrMemory("xmlNewCharEncodingHandler : out of memory !\n"); + return(NULL); + } + + /* + * allocate and fill-up an handler block. + */ + handler = (xmlCharEncodingHandlerPtr) + xmlMalloc(sizeof(xmlCharEncodingHandler)); + if (handler == NULL) { + xmlFree(up); + xmlEncodingErrMemory("xmlNewCharEncodingHandler : out of memory !\n"); + return(NULL); + } + memset(handler, 0, sizeof(xmlCharEncodingHandler)); + handler->input = input; + handler->output = output; + handler->name = up; + +#ifdef LIBXML_ICONV_ENABLED + handler->iconv_in = NULL; + handler->iconv_out = NULL; +#endif +#ifdef LIBXML_ICU_ENABLED + handler->uconv_in = NULL; + handler->uconv_out = NULL; +#endif + + /* + * 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 { + xmlEncodingErr(XML_ERR_INTERNAL_ERROR, + "Odd problem at endianness detection\n", NULL); + } + + if (handlers == NULL) { + xmlEncodingErrMemory("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 */ +#if !defined(LIBXML_ICONV_ENABLED) && !defined(LIBXML_ICU_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) || (handlers == NULL)) { + xmlEncodingErr(XML_I18N_NO_HANDLER, + "xmlRegisterCharEncodingHandler: NULL handler !\n", NULL); + return; + } + + if (nbCharEncodingHandler >= MAX_ENCODING_HANDLERS) { + xmlEncodingErr(XML_I18N_EXCESS_HANDLER, + "xmlRegisterCharEncodingHandler: Too many handler registered, see %s\n", + "MAX_ENCODING_HANDLERS"); + 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); + handler = xmlFindCharEncodingHandler("EBCDIC-US"); + if (handler != NULL) return(handler); + handler = xmlFindCharEncodingHandler("IBM-037"); + if (handler != NULL) return(handler); + break; + case XML_CHAR_ENCODING_UCS4BE: + handler = xmlFindCharEncodingHandler("ISO-10646-UCS-4"); + 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 */ +#ifdef LIBXML_ICU_ENABLED + xmlCharEncodingHandlerPtr encu; + uconv_t *ucv_in, *ucv_out; +#endif /* LIBXML_ICU_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; + + if (handlers != NULL) { + 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_in = iconv_open("UTF-8", upper); + } + if (icv_out == (iconv_t) -1) { + icv_out = iconv_open(upper, "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); + } + memset(enc, 0, sizeof(xmlCharEncodingHandler)); + 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) { + xmlEncodingErr(XML_ERR_INTERNAL_ERROR, + "iconv : problems with filters for '%s'\n", name); + } +#endif /* LIBXML_ICONV_ENABLED */ +#ifdef LIBXML_ICU_ENABLED + /* check whether icu can handle this */ + ucv_in = openIcuConverter(name, 1); + ucv_out = openIcuConverter(name, 0); + if (ucv_in != NULL && ucv_out != NULL) { + encu = (xmlCharEncodingHandlerPtr) + xmlMalloc(sizeof(xmlCharEncodingHandler)); + if (encu == NULL) { + closeIcuConverter(ucv_in); + closeIcuConverter(ucv_out); + return(NULL); + } + memset(encu, 0, sizeof(xmlCharEncodingHandler)); + encu->name = xmlMemStrdup(name); + encu->input = NULL; + encu->output = NULL; + encu->uconv_in = ucv_in; + encu->uconv_out = ucv_out; +#ifdef DEBUG_ENCODING + xmlGenericError(xmlGenericErrorContext, + "Found ICU converter handler for encoding %s\n", name); +#endif + return encu; + } else if (ucv_in != NULL || ucv_out != NULL) { + closeIcuConverter(ucv_in); + closeIcuConverter(ucv_out); + xmlEncodingErr(XML_ERR_INTERNAL_ERROR, + "ICU converter : problems with filters for '%s'\n", name); + } +#endif /* LIBXML_ICU_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, icv_outlen; + const char *icv_in = (const char *) in; + char *icv_out = (char *) out; + int ret; + + if ((out == NULL) || (outlen == NULL) || (inlen == NULL) || (in == NULL)) { + if (outlen != NULL) *outlen = 0; + return(-1); + } + icv_inlen = *inlen; + icv_outlen = *outlen; + ret = iconv(cd, (ICONV_CONST char **) &icv_in, &icv_inlen, &icv_out, &icv_outlen); + *inlen -= icv_inlen; + *outlen -= icv_outlen; + 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 */ + +/************************************************************************ + * * + * ICU based generic conversion functions * + * * + ************************************************************************/ + +#ifdef LIBXML_ICU_ENABLED +/** + * xmlUconvWrapper: + * @cd: ICU uconverter data structure + * @toUnicode : non-zero if toUnicode. 0 otherwise. + * @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 +xmlUconvWrapper(uconv_t *cd, int toUnicode, unsigned char *out, int *outlen, + const unsigned char *in, int *inlen) { + const char *ucv_in = (const char *) in; + char *ucv_out = (char *) out; + UErrorCode err = U_ZERO_ERROR; + + if ((out == NULL) || (outlen == NULL) || (inlen == NULL) || (in == NULL)) { + if (outlen != NULL) *outlen = 0; + return(-1); + } + + /* + * TODO(jungshik) + * 1. is ucnv_convert(To|From)Algorithmic better? + * 2. had we better use an explicit pivot buffer? + * 3. error returned comes from 'fromUnicode' only even + * when toUnicode is true ! + */ + if (toUnicode) { + /* encoding => UTF-16 => UTF-8 */ + ucnv_convertEx(cd->utf8, cd->uconv, &ucv_out, ucv_out + *outlen, + &ucv_in, ucv_in + *inlen, NULL, NULL, NULL, NULL, + 0, TRUE, &err); + } else { + /* UTF-8 => UTF-16 => encoding */ + ucnv_convertEx(cd->uconv, cd->utf8, &ucv_out, ucv_out + *outlen, + &ucv_in, ucv_in + *inlen, NULL, NULL, NULL, NULL, + 0, TRUE, &err); + } + *inlen = ucv_in - (const char*) in; + *outlen = ucv_out - (char *) out; + if (U_SUCCESS(err)) + return 0; + if (err == U_BUFFER_OVERFLOW_ERROR) + return -1; + if (err == U_INVALID_CHAR_FOUND || err == U_ILLEGAL_CHAR_FOUND) + return -2; + /* if (err == U_TRUNCATED_CHAR_FOUND) */ + return -3; +} +#endif /* LIBXML_ICU_ENABLED */ + +/************************************************************************ + * * + * The real API used by libxml for on-the-fly conversion * + * * + ************************************************************************/ + +/** + * xmlCharEncFirstLineInt: + * @handler: char enconding transformation data structure + * @out: an xmlBuffer for the output. + * @in: an xmlBuffer for the input + * @len: number of bytes to convert for the first line, or -1 + * + * Front-end for the encoding handler input function, but handle only + * the very first line, 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 +xmlCharEncFirstLineInt(xmlCharEncodingHandler *handler, xmlBufferPtr out, + xmlBufferPtr in, int len) { + int ret = -2; + int written; + int toconv; + + if (handler == NULL) return(-1); + if (out == NULL) return(-1); + if (in == NULL) return(-1); + + /* calculate space available */ + written = out->size - out->use - 1; /* count '\0' */ + toconv = in->use; + /* + * echo '' | wc -c => 38 + * 45 chars should be sufficient to reach the end of the encoding + * declaration without going too far inside the document content. + * on UTF-16 this means 90bytes, on UCS4 this means 180 + * The actual value depending on guessed encoding is passed as @len + * if provided + */ + if (len >= 0) { + if (toconv > len) + toconv = len; + } else { + if (toconv > 180) + toconv = 180; + } + if (toconv * 2 >= written) { + xmlBufferGrow(out, 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 */ +#ifdef LIBXML_ICU_ENABLED + else if (handler->uconv_in != NULL) { + ret = xmlUconvWrapper(handler->uconv_in, 1, &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_ICU_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); +} + +/** + * 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) { + return(xmlCharEncFirstLineInt(handler, out, in, -1)); +} + +/** + * xmlCharEncFirstLineInput: + * @input: a parser input buffer + * @len: number of bytes to convert for the first line, or -1 + * + * Front-end for the encoding handler input function, but handle only + * the very first line. Point is that this is based on autodetection + * of the encoding and once that first line is converted we may find + * out that a different decoder is needed to process the input. + * + * Returns the number of byte written if success, or + * -1 general error + * -2 if the transcoding fails (for *in is not valid utf8 string or + * the result of transformation can't fit into the encoding we want), or + */ +int +xmlCharEncFirstLineInput(xmlParserInputBufferPtr input, int len) +{ + int ret = -2; + size_t written; + size_t toconv; + int c_in; + int c_out; + xmlBufPtr in; + xmlBufPtr out; + + if ((input == NULL) || (input->encoder == NULL) || + (input->buffer == NULL) || (input->raw == NULL)) + return (-1); + out = input->buffer; + in = input->raw; + + toconv = xmlBufUse(in); + if (toconv == 0) + return (0); + written = xmlBufAvail(out) - 1; /* count '\0' */ + /* + * echo '' | wc -c => 38 + * 45 chars should be sufficient to reach the end of the encoding + * declaration without going too far inside the document content. + * on UTF-16 this means 90bytes, on UCS4 this means 180 + * The actual value depending on guessed encoding is passed as @len + * if provided + */ + if (len >= 0) { + if (toconv > (unsigned int) len) + toconv = len; + } else { + if (toconv > 180) + toconv = 180; + } + if (toconv * 2 >= written) { + xmlBufGrow(out, toconv * 2); + written = xmlBufAvail(out) - 1; + } + if (written > 360) + written = 360; + + c_in = toconv; + c_out = written; + if (input->encoder->input != NULL) { + ret = input->encoder->input(xmlBufEnd(out), &c_out, + xmlBufContent(in), &c_in); + xmlBufShrink(in, c_in); + xmlBufAddLen(out, c_out); + } +#ifdef LIBXML_ICONV_ENABLED + else if (input->encoder->iconv_in != NULL) { + ret = xmlIconvWrapper(input->encoder->iconv_in, xmlBufEnd(out), + &c_out, xmlBufContent(in), &c_in); + xmlBufShrink(in, c_in); + xmlBufAddLen(out, c_out); + if (ret == -1) + ret = -3; + } +#endif /* LIBXML_ICONV_ENABLED */ +#ifdef LIBXML_ICU_ENABLED + else if (input->encoder->uconv_in != NULL) { + ret = xmlUconvWrapper(input->encoder->uconv_in, 1, xmlBufEnd(out), + &c_out, xmlBufContent(in), &c_in); + xmlBufShrink(in, c_in); + xmlBufAddLen(out, c_out); + if (ret == -1) + ret = -3; + } +#endif /* LIBXML_ICU_ENABLED */ + switch (ret) { + case 0: +#ifdef DEBUG_ENCODING + xmlGenericError(xmlGenericErrorContext, + "converted %d bytes to %d bytes of input\n", + c_in, c_out); +#endif + break; + case -1: +#ifdef DEBUG_ENCODING + xmlGenericError(xmlGenericErrorContext, + "converted %d bytes to %d bytes of input, %d left\n", + c_in, c_out, (int)xmlBufUse(in)); +#endif + break; + case -3: +#ifdef DEBUG_ENCODING + xmlGenericError(xmlGenericErrorContext, + "converted %d bytes to %d bytes of input, %d left\n", + c_in, c_out, (int)xmlBufUse(in)); +#endif + break; + case -2: { + char buf[50]; + const xmlChar *content = xmlBufContent(in); + + snprintf(&buf[0], 49, "0x%02X 0x%02X 0x%02X 0x%02X", + content[0], content[1], + content[2], content[3]); + buf[49] = 0; + xmlEncodingErr(XML_I18N_CONV_FAILED, + "input conversion failed due to input error, bytes %s\n", + buf); + } + } + /* + * Ignore when input buffer is not on a boundary + */ + if (ret == -3) ret = 0; + if (ret == -1) ret = 0; + return(ret); +} + +/** + * xmlCharEncInput: + * @input: a parser input buffer + * @flush: try to flush all the raw buffer + * + * Generic front-end for the encoding handler on parser input + * + * Returns the number of byte written if success, or + * -1 general error + * -2 if the transcoding fails (for *in is not valid utf8 string or + * the result of transformation can't fit into the encoding we want), or + */ +int +xmlCharEncInput(xmlParserInputBufferPtr input, int flush) +{ + int ret = -2; + size_t written; + size_t toconv; + int c_in; + int c_out; + xmlBufPtr in; + xmlBufPtr out; + + if ((input == NULL) || (input->encoder == NULL) || + (input->buffer == NULL) || (input->raw == NULL)) + return (-1); + out = input->buffer; + in = input->raw; + + toconv = xmlBufUse(in); + if (toconv == 0) + return (0); + if ((toconv > 64 * 1024) && (flush == 0)) + toconv = 64 * 1024; + written = xmlBufAvail(out); + if (written > 0) + written--; /* count '\0' */ + if (toconv * 2 >= written) { + xmlBufGrow(out, toconv * 2); + written = xmlBufAvail(out); + if (written > 0) + written--; /* count '\0' */ + } + if ((written > 128 * 1024) && (flush == 0)) + written = 128 * 1024; + + c_in = toconv; + c_out = written; + if (input->encoder->input != NULL) { + ret = input->encoder->input(xmlBufEnd(out), &c_out, + xmlBufContent(in), &c_in); + xmlBufShrink(in, c_in); + xmlBufAddLen(out, c_out); + } +#ifdef LIBXML_ICONV_ENABLED + else if (input->encoder->iconv_in != NULL) { + ret = xmlIconvWrapper(input->encoder->iconv_in, xmlBufEnd(out), + &c_out, xmlBufContent(in), &c_in); + xmlBufShrink(in, c_in); + xmlBufAddLen(out, c_out); + if (ret == -1) + ret = -3; + } +#endif /* LIBXML_ICONV_ENABLED */ +#ifdef LIBXML_ICU_ENABLED + else if (input->encoder->uconv_in != NULL) { + ret = xmlUconvWrapper(input->encoder->uconv_in, 1, xmlBufEnd(out), + &c_out, xmlBufContent(in), &c_in); + xmlBufShrink(in, c_in); + xmlBufAddLen(out, c_out); + if (ret == -1) + ret = -3; + } +#endif /* LIBXML_ICU_ENABLED */ + switch (ret) { + case 0: +#ifdef DEBUG_ENCODING + xmlGenericError(xmlGenericErrorContext, + "converted %d bytes to %d bytes of input\n", + c_in, c_out); +#endif + break; + case -1: +#ifdef DEBUG_ENCODING + xmlGenericError(xmlGenericErrorContext, + "converted %d bytes to %d bytes of input, %d left\n", + c_in, c_out, (int)xmlBufUse(in)); +#endif + break; + case -3: +#ifdef DEBUG_ENCODING + xmlGenericError(xmlGenericErrorContext, + "converted %d bytes to %d bytes of input, %d left\n", + c_in, c_out, (int)xmlBufUse(in)); +#endif + break; + case -2: { + char buf[50]; + const xmlChar *content = xmlBufContent(in); + + snprintf(&buf[0], 49, "0x%02X 0x%02X 0x%02X 0x%02X", + content[0], content[1], + content[2], content[3]); + buf[49] = 0; + xmlEncodingErr(XML_I18N_CONV_FAILED, + "input conversion failed due to input error, bytes %s\n", + buf); + } + } + /* + * Ignore when input buffer is not on a boundary + */ + if (ret == -3) + ret = 0; + return (c_out? c_out : ret); +} + +/** + * xmlCharEncInFunc: + * @handler: char encoding transformation data structure + * @out: an xmlBuffer for the output. + * @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 -1; /* count '\0' */ + 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 */ +#ifdef LIBXML_ICU_ENABLED + else if (handler->uconv_in != NULL) { + ret = xmlUconvWrapper(handler->uconv_in, 1, &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_ICU_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: { + char buf[50]; + + snprintf(&buf[0], 49, "0x%02X 0x%02X 0x%02X 0x%02X", + in->content[0], in->content[1], + in->content[2], in->content[3]); + buf[49] = 0; + xmlEncodingErr(XML_I18N_CONV_FAILED, + "input conversion failed due to input error, bytes %s\n", + buf); + } + } + /* + * Ignore when input buffer is not on a boundary + */ + if (ret == -3) + ret = 0; + return (written? written : ret); +} + +#ifdef LIBXML_OUTPUT_ENABLED +/** + * xmlCharEncOutput: + * @output: a parser output buffer + * @init: is this an initialization call without data + * + * Generic front-end for the encoding handler on parser output + * a first call with @init == 1 has to be made first to initiate the + * output in case of non-stateless encoding needing to initiate their + * state or the output (like the BOM in UTF16). + * In case of UTF8 sequence conversion errors for the given encoder, + * the content will be automatically remapped to a CharRef sequence. + * + * Returns the number of byte written if success, or + * -1 general error + * -2 if the transcoding fails (for *in is not valid utf8 string or + * the result of transformation can't fit into the encoding we want), or + */ +int +xmlCharEncOutput(xmlOutputBufferPtr output, int init) +{ + int ret = -2; + size_t written; + size_t writtentot = 0; + size_t toconv; + int c_in; + int c_out; + xmlBufPtr in; + xmlBufPtr out; + int charref_len = 0; + + if ((output == NULL) || (output->encoder == NULL) || + (output->buffer == NULL) || (output->conv == NULL)) + return (-1); + out = output->conv; + in = output->buffer; + +retry: + + written = xmlBufAvail(out); + if (written > 0) + written--; /* count '\0' */ + + /* + * First specific handling of the initialization call + */ + if (init) { + c_in = 0; + c_out = written; + if (output->encoder->output != NULL) { + ret = output->encoder->output(xmlBufEnd(out), &c_out, + NULL, &c_in); + if (ret > 0) /* Gennady: check return value */ + xmlBufAddLen(out, c_out); + } +#ifdef LIBXML_ICONV_ENABLED + else if (output->encoder->iconv_out != NULL) { + ret = xmlIconvWrapper(output->encoder->iconv_out, xmlBufEnd(out), + &c_out, NULL, &c_in); + xmlBufAddLen(out, c_out); + } +#endif /* LIBXML_ICONV_ENABLED */ +#ifdef LIBXML_ICU_ENABLED + else if (output->encoder->uconv_out != NULL) { + ret = xmlUconvWrapper(output->encoder->uconv_out, 0, xmlBufEnd(out), + &c_out, NULL, &c_in); + xmlBufAddLen(out, c_out); + } +#endif /* LIBXML_ICU_ENABLED */ +#ifdef DEBUG_ENCODING + xmlGenericError(xmlGenericErrorContext, + "initialized encoder\n"); +#endif + return(0); + } + + /* + * Conversion itself. + */ + toconv = xmlBufUse(in); + if (toconv == 0) + return (0); + if (toconv > 64 * 1024) + toconv = 64 * 1024; + if (toconv * 4 >= written) { + xmlBufGrow(out, toconv * 4); + written = xmlBufAvail(out) - 1; + } + if (written > 256 * 1024) + written = 256 * 1024; + + c_in = toconv; + c_out = written; + if (output->encoder->output != NULL) { + ret = output->encoder->output(xmlBufEnd(out), &c_out, + xmlBufContent(in), &c_in); + if (c_out > 0) { + xmlBufShrink(in, c_in); + xmlBufAddLen(out, c_out); + writtentot += c_out; + } + } +#ifdef LIBXML_ICONV_ENABLED + else if (output->encoder->iconv_out != NULL) { + ret = xmlIconvWrapper(output->encoder->iconv_out, xmlBufEnd(out), + &c_out, xmlBufContent(in), &c_in); + xmlBufShrink(in, c_in); + xmlBufAddLen(out, c_out); + writtentot += c_out; + if (ret == -1) { + if (c_out > 0) { + /* + * Can be a limitation of iconv + */ + charref_len = 0; + goto retry; + } + ret = -3; + } + } +#endif /* LIBXML_ICONV_ENABLED */ +#ifdef LIBXML_ICU_ENABLED + else if (output->encoder->uconv_out != NULL) { + ret = xmlUconvWrapper(output->encoder->uconv_out, 0, xmlBufEnd(out), + &c_out, xmlBufContent(in), &c_in); + xmlBufShrink(in, c_in); + xmlBufAddLen(out, c_out); + writtentot += c_out; + if (ret == -1) { + if (c_out > 0) { + /* + * Can be a limitation of uconv + */ + charref_len = 0; + goto retry; + } + ret = -3; + } + } +#endif /* LIBXML_ICU_ENABLED */ + else { + xmlEncodingErr(XML_I18N_NO_OUTPUT, + "xmlCharEncOutFunc: no output function !\n", NULL); + return(-1); + } + + if (ret >= 0) output += ret; + + /* + * Attempt to handle error cases + */ + switch (ret) { + case 0: +#ifdef DEBUG_ENCODING + xmlGenericError(xmlGenericErrorContext, + "converted %d bytes to %d bytes of output\n", + c_in, c_out); +#endif + break; + case -1: +#ifdef DEBUG_ENCODING + xmlGenericError(xmlGenericErrorContext, + "output conversion failed by lack of space\n"); +#endif + break; + case -3: +#ifdef DEBUG_ENCODING + xmlGenericError(xmlGenericErrorContext,"converted %d bytes to %d bytes of output %d left\n", + c_in, c_out, (int) xmlBufUse(in)); +#endif + break; + case -2: { + int len = (int) xmlBufUse(in); + xmlChar *content = xmlBufContent(in); + int cur; + + cur = xmlGetUTF8Char(content, &len); + if ((charref_len != 0) && (c_out < charref_len)) { + /* + * We attempted to insert a character reference and failed. + * Undo what was written and skip the remaining charref. + */ + xmlBufErase(out, c_out); + writtentot -= c_out; + xmlBufShrink(in, charref_len - c_out); + charref_len = 0; + + ret = -1; + break; + } else if (cur > 0) { + xmlChar charref[20]; + +#ifdef DEBUG_ENCODING + xmlGenericError(xmlGenericErrorContext, + "handling output conversion error\n"); + xmlGenericError(xmlGenericErrorContext, + "Bytes: 0x%02X 0x%02X 0x%02X 0x%02X\n", + content[0], content[1], + content[2], content[3]); +#endif + /* + * Removes the UTF8 sequence, and replace it by a charref + * and continue the transcoding phase, hoping the error + * did not mangle the encoder state. + */ + charref_len = snprintf((char *) &charref[0], sizeof(charref), + "&#%d;", cur); + xmlBufShrink(in, len); + xmlBufAddHead(in, charref, -1); + + goto retry; + } else { + char buf[50]; + + snprintf(&buf[0], 49, "0x%02X 0x%02X 0x%02X 0x%02X", + content[0], content[1], + content[2], content[3]); + buf[49] = 0; + xmlEncodingErr(XML_I18N_CONV_FAILED, + "output conversion failed due to conv error, bytes %s\n", + buf); + if (xmlBufGetAllocationScheme(in) != XML_BUFFER_ALLOC_IMMUTABLE) + content[0] = ' '; + } + break; + } + } + return(ret); +} +#endif + +/** + * xmlCharEncOutFunc: + * @handler: char enconding transformation data structure + * @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; + int charref_len = 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 LIBXML_ICU_ENABLED + else if (handler->uconv_out != NULL) { + ret = xmlUconvWrapper(handler->uconv_out, 0, + &out->content[out->use], + &written, NULL, &toconv); + out->use += written; + out->content[out->use] = 0; + } +#endif /* LIBXML_ICU_ENABLED */ +#ifdef DEBUG_ENCODING + xmlGenericError(xmlGenericErrorContext, + "initialized encoder\n"); +#endif + return(0); + } + + /* + * Conversion itself. + */ + toconv = in->use; + if (toconv == 0) + return(0); + if (toconv * 4 >= written) { + xmlBufferGrow(out, toconv * 4); + written = out->size - out->use - 1; + } + if (handler->output != NULL) { + ret = handler->output(&out->content[out->use], &written, + in->content, &toconv); + if (written > 0) { + 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 + */ + charref_len = 0; + goto retry; + } + ret = -3; + } + } +#endif /* LIBXML_ICONV_ENABLED */ +#ifdef LIBXML_ICU_ENABLED + else if (handler->uconv_out != NULL) { + ret = xmlUconvWrapper(handler->uconv_out, 0, + &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 + */ + charref_len = 0; + goto retry; + } + ret = -3; + } + } +#endif /* LIBXML_ICU_ENABLED */ + else { + xmlEncodingErr(XML_I18N_NO_OUTPUT, + "xmlCharEncOutFunc: no output function !\n", NULL); + return(-1); + } + + if (ret >= 0) output += ret; + + /* + * Attempt to handle error cases + */ + switch (ret) { + case 0: +#ifdef DEBUG_ENCODING + xmlGenericError(xmlGenericErrorContext, + "converted %d bytes to %d bytes of output\n", + 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 ((charref_len != 0) && (written < charref_len)) { + /* + * We attempted to insert a character reference and failed. + * Undo what was written and skip the remaining charref. + */ + out->use -= written; + writtentot -= written; + xmlBufferShrink(in, charref_len - written); + charref_len = 0; + + ret = -1; + break; + } else if (cur > 0) { + xmlChar charref[20]; + +#ifdef DEBUG_ENCODING + xmlGenericError(xmlGenericErrorContext, + "handling output conversion error\n"); + xmlGenericError(xmlGenericErrorContext, + "Bytes: 0x%02X 0x%02X 0x%02X 0x%02X\n", + 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. + */ + charref_len = snprintf((char *) &charref[0], sizeof(charref), + "&#%d;", cur); + xmlBufferShrink(in, len); + xmlBufferAddHead(in, charref, -1); + + goto retry; + } else { + char buf[50]; + + snprintf(&buf[0], 49, "0x%02X 0x%02X 0x%02X 0x%02X", + in->content[0], in->content[1], + in->content[2], in->content[3]); + buf[49] = 0; + xmlEncodingErr(XML_I18N_CONV_FAILED, + "output conversion failed due to conv error, bytes %s\n", + buf); + if (in->alloc != XML_BUFFER_ALLOC_IMMUTABLE) + 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; + int tofree = 0; + int i, handler_in_list = 0; + + if (handler == NULL) return(-1); + if (handler->name == NULL) return(-1); + if (handlers != NULL) { + for (i = 0;i < nbCharEncodingHandler; i++) { + if (handler == handlers[i]) { + handler_in_list = 1; + break; + } + } + } +#ifdef LIBXML_ICONV_ENABLED + /* + * Iconv handlers can be used only once, free the whole block. + * and the associated icon resources. + */ + if ((handler_in_list == 0) && + ((handler->iconv_out != NULL) || (handler->iconv_in != NULL))) { + tofree = 1; + 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; + } + } +#endif /* LIBXML_ICONV_ENABLED */ +#ifdef LIBXML_ICU_ENABLED + if ((handler_in_list == 0) && + ((handler->uconv_out != NULL) || (handler->uconv_in != NULL))) { + tofree = 1; + if (handler->uconv_out != NULL) { + closeIcuConverter(handler->uconv_out); + handler->uconv_out = NULL; + } + if (handler->uconv_in != NULL) { + closeIcuConverter(handler->uconv_in); + handler->uconv_in = NULL; + } + } +#endif + if (tofree) { + /* free up only dynamic handlers iconv/uconv */ + if (handler->name != NULL) + xmlFree(handler->name); + handler->name = NULL; + xmlFree(handler); + } +#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) { + unsigned char convbuf[32000]; + const unsigned char *cur = (const unsigned 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 < 0) { + if (written > 0) + ret = -2; + else + return(-1); + } + unused += written; + cur += toconv; + } while (ret == -2); +#endif +#ifdef LIBXML_ICU_ENABLED + } else if (handler->uconv_out != NULL) { + do { + toconv = in->end - cur; + written = 32000; + ret = xmlUconvWrapper(handler->uconv_out, 0, &convbuf[0], + &written, cur, &toconv); + if (ret < 0) { + 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)); +} + +#if !defined(LIBXML_ICONV_ENABLED) && !defined(LIBXML_ICU_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; + const unsigned char* processed = in; + + if ((out == NULL) || (outlen == NULL) || (inlen == NULL) || + (xlattable == NULL)) + return(-1); + 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 = processed - instart; + return(-2); + } else if (d < 0xE0) { + unsigned char c; + if (!(in < inend)) { + /* trailing byte not in input buffer */ + *outlen = out - outstart; + *inlen = processed - instart; + return(-3); + } + c = *in++; + if ((c & 0xC0) != 0x80) { + /* not a trailing byte */ + *outlen = out - outstart; + *inlen = processed - instart; + 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 = processed - instart; + 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 = processed - instart; + return(-3); + } + c1 = *in++; + if ((c1 & 0xC0) != 0x80) { + /* not a trailing byte (c1) */ + *outlen = out - outstart; + *inlen = processed - instart; + return(-2); + } + c2 = *in++; + if ((c2 & 0xC0) != 0x80) { + /* not a trailing byte (c2) */ + *outlen = out - outstart; + *inlen = processed - instart; + 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 = processed - instart; + return(-2); + } + *out++ = d; + } else { + /* cannot transcode >= U+010000 */ + *outlen = out - outstart; + *inlen = processed - instart; + return(-2); + } + processed = in; + } + *outlen = out - outstart; + *inlen = processed - instart; + return(*outlen); +} + +/** + * 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; + const unsigned char* instart = in; + const unsigned char* inend; + const unsigned char* instop; + unsigned int c; + + if ((out == NULL) || (outlen == NULL) || (inlen == NULL) || + (in == NULL) || (unicodetable == NULL)) + return(-1); + outend = out + *outlen; + inend = in + *inlen; + instop = inend; + + while ((in < inend) && (out < outend - 2)) { + if (*in >= 0x80) { + c = unicodetable [*in - 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; + } + if (instop - in > outend - out) instop = in + (outend - out); + while ((*in < 0x80) && (in < instop)) { + *out++ = *in++; + } + } + if ((in < inend) && (out < outend) && (*in < 0x80)) { + *out++ = *in++; + } + if ((in < inend) && (out < outend) && (*in < 0x80)) { + *out++ = *in++; + } + *outlen = out - outstart; + *inlen = in - instart; + return (*outlen); +} + + +/************************************************************************ + * 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 + +#define bottom_encoding +#include "elfgcchack.h" diff --git a/entities.c b/entities.c new file mode 100644 index 0000000..64808ff --- /dev/null +++ b/entities.c @@ -0,0 +1,1105 @@ +/* + * 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 +#ifdef HAVE_STDLIB_H +#include +#endif +#include +#include +#include +#include +#include +#include +#include +#include + +#include "save.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, 1 +}; +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, 1 +}; +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, 1 +}; +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, 1 +}; +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, 1 +}; + +/** + * xmlEntitiesErrMemory: + * @extra: extra informations + * + * Handle an out of memory condition + */ +static void +xmlEntitiesErrMemory(const char *extra) +{ + __xmlSimpleError(XML_FROM_TREE, XML_ERR_NO_MEMORY, NULL, NULL, extra); +} + +/** + * xmlEntitiesErr: + * @code: the error code + * @msg: the message + * + * Handle an out of memory condition + */ +static void LIBXML_ATTR_FORMAT(2,0) +xmlEntitiesErr(xmlParserErrors code, const char *msg) +{ + __xmlSimpleError(XML_FROM_TREE, code, NULL, msg, NULL); +} + +/* + * xmlFreeEntity : clean-up an entity record. + */ +static void +xmlFreeEntity(xmlEntityPtr entity) +{ + xmlDictPtr dict = NULL; + + if (entity == NULL) + return; + + if (entity->doc != NULL) + dict = entity->doc->dict; + + + if ((entity->children) && (entity->owner == 1) && + (entity == (xmlEntityPtr) entity->children->parent)) + xmlFreeNodeList(entity->children); + if (dict != NULL) { + if ((entity->name != NULL) && (!xmlDictOwns(dict, entity->name))) + xmlFree((char *) entity->name); + if ((entity->ExternalID != NULL) && + (!xmlDictOwns(dict, entity->ExternalID))) + xmlFree((char *) entity->ExternalID); + if ((entity->SystemID != NULL) && + (!xmlDictOwns(dict, entity->SystemID))) + xmlFree((char *) entity->SystemID); + if ((entity->URI != NULL) && (!xmlDictOwns(dict, entity->URI))) + xmlFree((char *) entity->URI); + if ((entity->content != NULL) + && (!xmlDictOwns(dict, entity->content))) + xmlFree((char *) entity->content); + if ((entity->orig != NULL) && (!xmlDictOwns(dict, entity->orig))) + xmlFree((char *) entity->orig); + } else { + 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); +} + +/* + * xmlCreateEntity: + * + * internal routine doing the entity node strutures allocations + */ +static xmlEntityPtr +xmlCreateEntity(xmlDictPtr dict, const xmlChar *name, int type, + const xmlChar *ExternalID, const xmlChar *SystemID, + const xmlChar *content) { + xmlEntityPtr ret; + + ret = (xmlEntityPtr) xmlMalloc(sizeof(xmlEntity)); + if (ret == NULL) { + xmlEntitiesErrMemory("xmlCreateEntity: malloc failed"); + return(NULL); + } + memset(ret, 0, sizeof(xmlEntity)); + ret->type = XML_ENTITY_DECL; + ret->checked = 0; + + /* + * fill the structure. + */ + ret->etype = (xmlEntityType) type; + if (dict == NULL) { + ret->name = xmlStrdup(name); + if (ExternalID != NULL) + ret->ExternalID = xmlStrdup(ExternalID); + if (SystemID != NULL) + ret->SystemID = xmlStrdup(SystemID); + } else { + ret->name = xmlDictLookup(dict, name, -1); + if (ExternalID != NULL) + ret->ExternalID = xmlDictLookup(dict, ExternalID, -1); + if (SystemID != NULL) + ret->SystemID = xmlDictLookup(dict, SystemID, -1); + } + if (content != NULL) { + ret->length = xmlStrlen(content); + if ((dict != NULL) && (ret->length < 5)) + ret->content = (xmlChar *) + xmlDictLookup(dict, content, ret->length); + else + 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; + + return(ret); +} + +/* + * 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) { + xmlDictPtr dict = NULL; + xmlEntitiesTablePtr table = NULL; + xmlEntityPtr ret; + + if (name == NULL) + return(NULL); + if (dtd == NULL) + return(NULL); + if (dtd->doc != NULL) + dict = dtd->doc->dict; + + 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 = xmlHashCreateDict(0, dict); + table = dtd->entities; + break; + case XML_INTERNAL_PARAMETER_ENTITY: + case XML_EXTERNAL_PARAMETER_ENTITY: + if (dtd->pentities == NULL) + dtd->pentities = xmlHashCreateDict(0, dict); + table = dtd->pentities; + break; + case XML_INTERNAL_PREDEFINED_ENTITY: + return(NULL); + } + if (table == NULL) + return(NULL); + ret = xmlCreateEntity(dict, name, type, ExternalID, SystemID, content); + if (ret == NULL) + return(NULL); + ret->doc = dtd->doc; + + 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) { + xmlEntitiesErr(XML_DTD_NO_DOC, + "xmlAddDtdEntity: document is NULL"); + return(NULL); + } + if (doc->extSubset == NULL) { + xmlEntitiesErr(XML_DTD_NO_DTD, + "xmlAddDtdEntity: document without external subset"); + 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) { + xmlEntitiesErr(XML_DTD_NO_DOC, + "xmlAddDocEntity: document is NULL"); + return(NULL); + } + if (doc->intSubset == NULL) { + xmlEntitiesErr(XML_DTD_NO_DTD, + "xmlAddDocEntity: document without internal subset"); + 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); +} + +/** + * xmlNewEntity: + * @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 + * + * Create a new entity, this differs from xmlAddDocEntity() that if + * the document is NULL or has no internal subset defined, then an + * unlinked entity structure will be returned, it is then the responsability + * of the caller to link it to the document later or free it when not needed + * anymore. + * + * Returns a pointer to the entity or NULL in case of error + */ +xmlEntityPtr +xmlNewEntity(xmlDocPtr doc, const xmlChar *name, int type, + const xmlChar *ExternalID, const xmlChar *SystemID, + const xmlChar *content) { + xmlEntityPtr ret; + xmlDictPtr dict; + + if ((doc != NULL) && (doc->intSubset != NULL)) { + return(xmlAddDocEntity(doc, name, type, ExternalID, SystemID, content)); + } + if (doc != NULL) + dict = doc->dict; + else + dict = NULL; + ret = xmlCreateEntity(dict, name, type, ExternalID, SystemID, content); + if (ret == NULL) + return(NULL); + ret->doc = doc; + 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(const xmlDoc *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() { \ + xmlChar *tmp; \ + size_t new_size = buffer_size * 2; \ + if (new_size < buffer_size) goto mem_error; \ + tmp = (xmlChar *) xmlRealloc(buffer, new_size); \ + if (tmp == NULL) goto mem_error; \ + buffer = tmp; \ + buffer_size = new_size; \ +} + +/** + * xmlEncodeEntitiesInternal: + * @doc: the document containing the string + * @input: A string to convert to XML. + * @attr: are we handling an atrbute value + * + * Do a global encoding of a string, replacing the predefined entities + * and non ASCII values with their entities and CharRef counterparts. + * Contrary to xmlEncodeEntities, this routine is reentrant, and result + * must be deallocated. + * + * Returns A newly allocated string with the substitution done. + */ +static xmlChar * +xmlEncodeEntitiesInternal(xmlDocPtr doc, const xmlChar *input, int attr) { + const xmlChar *cur = input; + xmlChar *buffer = NULL; + xmlChar *out = NULL; + size_t 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) { + xmlEntitiesErrMemory("xmlEncodeEntities: malloc failed"); + return(NULL); + } + out = buffer; + + while (*cur != '\0') { + size_t indx = out - buffer; + if (indx + 100 > buffer_size) { + + growBufferReentrant(); + out = &buffer[indx]; + } + + /* + * By default one have to encode at least '<', '>', '"' and '&' ! + */ + if (*cur == '<') { + const xmlChar *end; + + /* + * Special handling of server side include in HTML attributes + */ + if (html && attr && + (cur[1] == '!') && (cur[2] == '-') && (cur[3] == '-') && + ((end = xmlStrstr(cur, BAD_CAST "-->")) != NULL)) { + while (cur != end) { + *out++ = *cur++; + indx = out - buffer; + if (indx + 100 > buffer_size) { + growBufferReentrant(); + out = &buffer[indx]; + } + } + *out++ = *cur++; + *out++ = *cur++; + *out++ = *cur++; + continue; + } + *out++ = '&'; + *out++ = 'l'; + *out++ = 't'; + *out++ = ';'; + } else if (*cur == '>') { + *out++ = '&'; + *out++ = 'g'; + *out++ = 't'; + *out++ = ';'; + } else if (*cur == '&') { + /* + * Special handling of &{...} construct from HTML 4, see + * http://www.w3.org/TR/html401/appendix/notes.html#h-B.7.1 + */ + if (html && attr && (cur[1] == '{') && + (strchr((const char *) cur, '}'))) { + while (*cur != '}') { + *out++ = *cur++; + indx = out - buffer; + if (indx + 100 > buffer_size) { + growBufferReentrant(); + out = &buffer[indx]; + } + } + *out++ = *cur++; + continue; + } + *out++ = '&'; + *out++ = 'a'; + *out++ = 'm'; + *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 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) { + xmlEntitiesErr(XML_CHECK_NOT_UTF8, + "xmlEncodeEntities: input not UTF-8"); + 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))) { + xmlEntitiesErr(XML_ERR_INVALID_CHAR, + "xmlEncodeEntities: 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 + */ + 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); + +mem_error: + xmlEntitiesErrMemory("xmlEncodeEntities: realloc failed"); + xmlFree(buffer); + return(NULL); +} + +/** + * xmlEncodeAttributeEntities: + * @doc: the document containing the string + * @input: A string to convert to XML. + * + * Do a global encoding of a string, replacing the predefined entities + * and non ASCII values with their entities and CharRef counterparts for + * attribute values. + * + * Returns A newly allocated string with the substitution done. + */ +xmlChar * +xmlEncodeAttributeEntities(xmlDocPtr doc, const xmlChar *input) { + return xmlEncodeEntitiesInternal(doc, input, 1); +} + +/** + * xmlEncodeEntitiesReentrant: + * @doc: the document containing the string + * @input: A string to convert to XML. + * + * Do a global encoding of a string, replacing the predefined entities + * and non ASCII values with their entities and CharRef counterparts. + * Contrary to xmlEncodeEntities, this routine is reentrant, and result + * must be deallocated. + * + * Returns A newly allocated string with the substitution done. + */ +xmlChar * +xmlEncodeEntitiesReentrant(xmlDocPtr doc, const xmlChar *input) { + return xmlEncodeEntitiesInternal(doc, input, 0); +} + +/** + * 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(const xmlDoc *doc ATTRIBUTE_UNUSED, const xmlChar *input) { + const xmlChar *cur = input; + xmlChar *buffer = NULL; + xmlChar *out = NULL; + size_t 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) { + xmlEntitiesErrMemory("xmlEncodeSpecialChars: malloc failed"); + return(NULL); + } + out = buffer; + + while (*cur != '\0') { + size_t indx = out - buffer; + if (indx + 10 > buffer_size) { + + 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 == '"') { + *out++ = '&'; + *out++ = 'q'; + *out++ = 'u'; + *out++ = 'o'; + *out++ = 't'; + *out++ = ';'; + } 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); + +mem_error: + xmlEntitiesErrMemory("xmlEncodeSpecialChars: realloc failed"); + xmlFree(buffer); + return(NULL); +} + +/** + * xmlCreateEntitiesTable: + * + * create and initialize an empty entities hash table. + * This really doesn't make sense and should be deprecated + * + * 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) { + xmlEntitiesErrMemory("xmlCopyEntity:: malloc failed"); + 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 """, 6); + cur++; + base = cur; + } else if (*cur == '%') { + if (base != cur) + xmlBufferAdd(buf, base, cur - base); + xmlBufferAdd(buf, BAD_CAST "%", 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) { + if ((buf == NULL) || (ent == NULL)) return; + switch (ent->etype) { + case XML_INTERNAL_GENERAL_ENTITY: + xmlBufferWriteChar(buf, "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, "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, "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, "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, "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: + xmlEntitiesErr(XML_DTD_UNKNOWN_ENTITY, + "xmlDumpEntitiesDecl: internal: unknown type entity type"); + } +} + +/** + * 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 */ +#define bottom_entities +#include "elfgcchack.h" diff --git a/error.c b/error.c new file mode 100644 index 0000000..9606f13 --- /dev/null +++ b/error.c @@ -0,0 +1,998 @@ +/* + * error.c: module displaying/handling XML parser errors + * + * See Copyright for the status of this software. + * + * Daniel Veillard + */ + +#define IN_LIBXML +#include "libxml.h" + +#include +#include +#include +#include +#include +#include + +void XMLCDECL xmlGenericErrorDefaultFunc (void *ctx ATTRIBUTE_UNUSED, + const char *msg, + ...) LIBXML_ATTR_FORMAT(2,3); + +#define XML_GET_VAR_STR(msg, str) { \ + int size, prev_size = -1; \ + int chars; \ + char *larger; \ + va_list ap; \ + \ + str = (char *) xmlMalloc(150); \ + if (str != NULL) { \ + \ + size = 150; \ + \ + while (size < 64000) { \ + va_start(ap, msg); \ + chars = vsnprintf(str, size, msg, ap); \ + va_end(ap); \ + if ((chars > -1) && (chars < size)) { \ + if (prev_size == chars) { \ + break; \ + } else { \ + prev_size = chars; \ + } \ + } \ + 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 XMLCDECL +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 + xmlGenericError = (*handler); +} + +/** + * 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. + * For multi-threaded applications, this must be set separately for each thread. + */ +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 + * For multi-threaded applications, this must be set separately for each thread. + */ +void +xmlSetStructuredErrorFunc(void *ctx, xmlStructuredErrorFunc handler) { + xmlStructuredErrorContext = 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) || (input->cur == 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 ((nfile; + 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) || (domain == XML_FROM_SCHEMASV)|| + (domain == XML_FROM_SCHEMASP)||(domain == XML_FROM_DTD) || + (domain == XML_FROM_RELAXNGP)||(domain == XML_FROM_RELAXNGV))) + channel(data, "Entity: line %d: ", line); + } + if (name != NULL) { + channel(data, "element %s: ", name); + } + switch (domain) { + case XML_FROM_PARSER: + channel(data, "parser "); + break; + case XML_FROM_NAMESPACE: + channel(data, "namespace "); + break; + case XML_FROM_DTD: + case XML_FROM_VALID: + channel(data, "validity "); + break; + case XML_FROM_HTML: + channel(data, "HTML parser "); + break; + case XML_FROM_MEMORY: + channel(data, "memory "); + break; + case XML_FROM_OUTPUT: + channel(data, "output "); + break; + case XML_FROM_IO: + channel(data, "I/O "); + break; + case XML_FROM_XINCLUDE: + channel(data, "XInclude "); + break; + case XML_FROM_XPATH: + channel(data, "XPath "); + break; + case XML_FROM_XPOINTER: + channel(data, "parser "); + break; + case XML_FROM_REGEXP: + channel(data, "regexp "); + break; + case XML_FROM_MODULE: + channel(data, "module "); + break; + case XML_FROM_SCHEMASV: + channel(data, "Schemas validity "); + break; + case XML_FROM_SCHEMASP: + channel(data, "Schemas parser "); + break; + case XML_FROM_RELAXNGP: + channel(data, "Relax-NG parser "); + break; + case XML_FROM_RELAXNGV: + channel(data, "Relax-NG validity "); + break; + case XML_FROM_CATALOG: + channel(data, "Catalog "); + break; + case XML_FROM_C14N: + channel(data, "C14N "); + break; + case XML_FROM_XSLT: + channel(data, "XSLT "); + break; + case XML_FROM_I18N: + channel(data, "encoding "); + break; + case XML_FROM_SCHEMATRONV: + channel(data, "schematron "); + break; + case XML_FROM_BUFFER: + channel(data, "internal buffer "); + break; + case XML_FROM_URI: + channel(data, "URI "); + break; + default: + break; + } + 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 (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 (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: + * @schannel: 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 + * @col: column number of the error or 0 if N/A + * @msg: the message to display/transmit + * @...: extra parameters for the message display + * + * Update the appropriate global or contextual error structure, + * then forward the error message down the parser or generic + * error callback handler + */ +void XMLCDECL +__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 col, + const char *msg, ...) +{ + xmlParserCtxtPtr ctxt = NULL; + xmlNodePtr node = (xmlNodePtr) nod; + char *str = NULL; + xmlParserInputPtr input = NULL; + xmlErrorPtr to = &xmlLastError; + xmlNodePtr baseptr = NULL; + + if (code == XML_ERR_OK) + return; + 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) || (domain == XML_FROM_VALID)) { + ctxt = (xmlParserCtxtPtr) ctx; + if ((schannel == NULL) && (ctxt != NULL) && (ctxt->sax != NULL) && + (ctxt->sax->initialized == XML_SAX2_MAGIC) && + (ctxt->sax->serror != NULL)) { + schannel = ctxt->sax->serror; + data = ctxt->userData; + } + } + /* + * Check if structured error handler set + */ + if (schannel == NULL) { + schannel = xmlStructuredError; + /* + * if user has defined handler, change data ptr to user's choice + */ + if (schannel != NULL) + data = xmlStructuredErrorContext; + } + /* + * 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; + col = input->col; + } + } + to = &ctxt->lastError; + } else if ((node != NULL) && (file == NULL)) { + int i; + + if ((node->doc != NULL) && (node->doc->URL != NULL)) { + baseptr = node; +/* file = (const char *) node->doc->URL; */ + } + for (i = 0; + ((i < 10) && (node != NULL) && (node->type != XML_ELEMENT_NODE)); + i++) + node = node->parent; + if ((baseptr == NULL) && (node != NULL) && + (node->doc != NULL) && (node->doc->URL != NULL)) + baseptr = node; + + if ((node != NULL) && (node->type == XML_ELEMENT_NODE)) + line = node->line; + if ((line == 0) || (line == 65535)) + line = xmlGetLineNo(node); + } + + /* + * Save the information 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 (baseptr != NULL) { +#ifdef LIBXML_XINCLUDE_ENABLED + /* + * We check if the error is within an XInclude section and, + * if so, attempt to print out the href of the XInclude instead + * of the usual "base" (doc->URL) for the node (bug 152623). + */ + xmlNodePtr prev = baseptr; + int inclcount = 0; + while (prev != NULL) { + if (prev->prev == NULL) + prev = prev->parent; + else { + prev = prev->prev; + if (prev->type == XML_XINCLUDE_START) { + if (--inclcount < 0) + break; + } else if (prev->type == XML_XINCLUDE_END) + inclcount++; + } + } + if (prev != NULL) { + if (prev->type == XML_XINCLUDE_START) { + prev->type = XML_ELEMENT_NODE; + to->file = (char *) xmlGetProp(prev, BAD_CAST "href"); + prev->type = XML_XINCLUDE_START; + } else { + to->file = (char *) xmlGetProp(prev, BAD_CAST "href"); + } + } else +#endif + to->file = (char *) xmlStrdup(baseptr->doc->URL); + if ((to->file == NULL) && (node != NULL) && (node->doc != NULL)) { + to->file = (char *) xmlStrdup(node->doc->URL); + } + } + 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 = col; + to->node = node; + to->ctxt = ctx; + + if (to != &xmlLastError) + xmlCopyError(to,&xmlLastError); + + if (schannel != NULL) { + schannel(data, to); + return; + } + + /* + * Find the callback channel if channel param is NULL + */ + if ((ctxt != NULL) && (channel == NULL) && + (xmlStructuredError == NULL) && (ctxt->sax != NULL)) { + if (level == XML_ERR_WARNING) + channel = ctxt->sax->warning; + else + channel = ctxt->sax->error; + data = ctxt->userData; + } else if (channel == NULL) { + channel = xmlGenericError; + if (ctxt != NULL) { + data = ctxt; + } else { + data = xmlGenericErrorContext; + } + } + 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 XMLCDECL +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 XMLCDECL +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 XMLCDECL +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 XMLCDECL +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; + ctxt->errNo = XML_ERR_OK; + 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) { + char *message, *file, *str1, *str2, *str3; + + if ((from == NULL) || (to == NULL)) + return(-1); + + message = (char *) xmlStrdup((xmlChar *) from->message); + file = (char *) xmlStrdup ((xmlChar *) from->file); + str1 = (char *) xmlStrdup ((xmlChar *) from->str1); + str2 = (char *) xmlStrdup ((xmlChar *) from->str2); + str3 = (char *) xmlStrdup ((xmlChar *) from->str3); + + 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; + to->message = message; + to->file = file; + to->str1 = str1; + to->str2 = str2; + to->str3 = str3; + + return 0; +} + +#define bottom_error +#include "elfgcchack.h" diff --git a/example/Makefile.am b/example/Makefile.am new file mode 100644 index 0000000..488ee6e --- /dev/null +++ b/example/Makefile.am @@ -0,0 +1,7 @@ +noinst_PROGRAMS = gjobread + +AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include -I$(srcdir)/include +AM_CFLAGS = $(THREAD_CFLAGS) $(Z_CFLAGS) +LDADD = $(RDL_LIBS) $(STATIC_BINARIES) $(top_builddir)/libxml2.la $(THREAD_LIBS) $(Z_LIBS) $(ICONV_LIBS) -lm $(WIN32_EXTRA_LIBADD) + +gjobread_SOURCES=gjobread.c diff --git a/example/gjobread.c b/example/gjobread.c new file mode 100644 index 0000000..d3f6d57 --- /dev/null +++ b/example/gjobread.c @@ -0,0 +1,309 @@ +/* + * gjobread.c : a small test program for gnome jobs XML format + * + * See Copyright for the status of this software. + * + * Daniel.Veillard@w3.org + */ + +#include +#include +#include + +/* + * 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 +#include + +#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 ) { + xmlFreeDoc(doc); + free(ret); + 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 @@ + + + + + + + GBackup + Development + + + Open + Mon, 07 Jun 1999 20:27:45 -0400 MET DST + USD 0.00 + + + + + + + + + Nathan Clemons + nathan@windsofstorm.net + + + + + + + + + + + + + + The program should be released as free software, under the GPL. + + + + + + + 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. + + + + + + + diff --git a/genChRanges.py b/genChRanges.py new file mode 100755 index 0000000..c138319 --- /dev/null +++ b/genChRanges.py @@ -0,0 +1,578 @@ +#!/usr/bin/python -u +# +# Portions of this script have been (shamelessly) stolen from the +# prior work of Daniel Veillard (genUnicode.py) +# +# I, however, take full credit for any bugs, errors or difficulties :-) +# +# William Brack +# October 2003 +# +# 18 October 2003 +# Modified to maintain binary compatibility with previous library versions +# by adding a suffix 'Q' ('quick') to the macro generated for the original, +# function, and adding generation of a function (with the original name) which +# instantiates the macro. +# + +import sys +import string +import time + +# +# A routine to take a list of yes/no (1, 0) values and turn it +# into a list of ranges. This will later be used to determine whether +# to generate single-byte lookup tables, or inline comparisons +# +def makeRange(lst): + ret = [] + pos = 0 + while pos < len(lst): + try: # index generates exception if not present + s = lst[pos:].index(1) # look for start of next range + except: + break # if no more, finished + pos += s # pointer to start of possible range + try: + e = lst[pos:].index(0) # look for end of range + e += pos + except: # if no end, set to end of list + e = len(lst) + ret.append((pos, e-1)) # append range tuple to list + pos = e + 1 # ready to check for next range + return ret + +sources = "chvalid.def" # input filename + +# minTableSize gives the minimum number of ranges which must be present +# before a 256-byte lookup table is produced. If there are less than this +# number, a macro with inline comparisons is generated +minTableSize = 6 + +# dictionary of functions, key=name, element contains char-map and range-list +Functs = {} + +state = 0 + +try: + defines = open("chvalid.def", "r") +except: + print "Missing chvalid.def, aborting ..." + sys.exit(1) + +# +# The lines in the .def file have three types:- +# name: Defines a new function block +# ur: Defines individual or ranges of unicode values +# end: Indicates the end of the function block +# +# These lines are processed below. +# +for line in defines.readlines(): + # ignore blank lines, or lines beginning with '#' + if line[0] == '#': + continue + line = string.strip(line) + if line == '': + continue + # split line into space-separated fields, then split on type + try: + fields = string.split(line, ' ') + # + # name line: + # validate any previous function block already ended + # validate this function not already defined + # initialize an entry in the function dicitonary + # including a mask table with no values yet defined + # + if fields[0] == 'name': + name = fields[1] + if state != 0: + print "'name' %s found before previous name" \ + "completed" % (fields[1]) + continue + state = 1 + if Functs.has_key(name): + print "name '%s' already present - may give" \ + " wrong results" % (name) + else: + # dict entry with two list elements (chdata, rangedata) + Functs[name] = [ [], [] ] + for v in range(256): + Functs[name][0].append(0) + # + # end line: + # validate there was a preceding function name line + # set state to show no current function active + # + elif fields[0] == 'end': + if state == 0: + print "'end' found outside of function block" + continue + state = 0 + + # + # ur line: + # validate function has been defined + # process remaining fields on the line, which may be either + # individual unicode values or ranges of values + # + elif fields[0] == 'ur': + if state != 1: + raise ValidationError, "'ur' found outside of 'name' block" + for el in fields[1:]: + pos = string.find(el, '..') + # pos <=0 means not a range, so must be individual value + if pos <= 0: + # cheap handling of hex or decimal values + if el[0:2] == '0x': + value = int(el[2:],16) + elif el[0] == "'": + value = ord(el[1]) + else: + value = int(el) + if ((value < 0) | (value > 0x1fffff)): + raise ValidationError, 'Illegal value (%s) in ch for'\ + ' name %s' % (el,name) + # for ur we have only ranges (makes things simpler), + # so convert val to range + currange = (value, value) + # pos > 0 means this is a range, so isolate/validate + # the interval + else: + # split the range into it's first-val, last-val + (first, last) = string.split(el, "..") + # convert values from text into binary + if first[0:2] == '0x': + start = int(first[2:],16) + elif first[0] == "'": + start = ord(first[1]) + else: + start = int(first) + if last[0:2] == '0x': + end = int(last[2:],16) + elif last[0] == "'": + end = ord(last[1]) + else: + end = int(last) + if (start < 0) | (end > 0x1fffff) | (start > end): + raise ValidationError, "Invalid range '%s'" % el + currange = (start, end) + # common path - 'currange' has the range, now take care of it + # We split on single-byte values vs. multibyte + if currange[1] < 0x100: # single-byte + for ch in range(currange[0],currange[1]+1): + # validate that value not previously defined + if Functs[name][0][ch]: + msg = "Duplicate ch value '%s' for name '%s'" % (el, name) + raise ValidationError, msg + Functs[name][0][ch] = 1 + else: # multi-byte + if currange in Functs[name][1]: + raise ValidationError, "range already defined in" \ + " function" + else: + Functs[name][1].append(currange) + + except: + print "Failed to process line: %s" % (line) + raise +# +# At this point, the entire definition file has been processed. Now we +# enter the output phase, where we generate the two files chvalid.c and' +# chvalid.h +# +# To do this, we first output the 'static' data (heading, fixed +# definitions, etc.), then output the 'dynamic' data (the results +# of the above processing), and finally output closing 'static' data +# (e.g. the subroutine to process the ranges) +# + +# +# Generate the headings: +# +try: + header = open("include/libxml/chvalid.h", "w") +except: + print "Failed to open include/libxml/chvalid.h" + sys.exit(1) + +try: + output = open("chvalid.c", "w") +except: + print "Failed to open chvalid.c" + sys.exit(1) + +date = time.asctime(time.localtime(time.time())) + +header.write( +"""/* + * 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: %s + * Sources: %s + * Author: William Brack + */ + +#ifndef __XML_CHVALID_H__ +#define __XML_CHVALID_H__ + +#include +#include + +#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; + const xmlChSRange *shortRange; /* points to an array of ranges */ + const xmlChLRange *longRange; +}; + +/** + * Range checking routine + */ +XMLPUBFUN int XMLCALL + xmlCharInRange(unsigned int val, const xmlChRangeGroup *group); + +""" % (date, sources)); +output.write( +"""/* + * 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: %s + * Sources: %s + * William Brack + */ + +#define IN_LIBXML +#include "libxml.h" +#include + +/* + * 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. + * + */ +""" % (date, sources)); + +# +# Now output the generated data. +# We try to produce the best execution times. Tests have shown that validation +# with direct table lookup is, when there are a "small" number of valid items, +# still not as fast as a sequence of inline compares. So, if the single-byte +# portion of a range has a "small" number of ranges, we output a macro for inline +# compares, otherwise we output a 256-byte table and a macro to use it. +# + +fkeys = Functs.keys() # Dictionary of all defined functions +fkeys.sort() # Put some order to our output + +for f in fkeys: + +# First we convert the specified single-byte values into a group of ranges. +# If the total number of such ranges is less than minTableSize, we generate +# an inline macro for direct comparisons; if greater, we generate a lookup +# table. + if max(Functs[f][0]) > 0: # only check if at least one entry + rangeTable = makeRange(Functs[f][0]) + numRanges = len(rangeTable) + if numRanges >= minTableSize: # table is worthwhile + header.write("XMLPUBVAR const unsigned char %s_tab[256];\n" % f) + header.write(""" +/** + * %s_ch: + * @c: char to validate + * + * Automatically generated by genChRanges.py + */ +""" % f) + header.write("#define %s_ch(c)\t(%s_tab[(c)])\n" % (f, f)) + + # write the constant data to the code file + output.write("const unsigned char %s_tab[256] = {\n" % f) + pline = " " + for n in range(255): + pline += " 0x%02x," % Functs[f][0][n] + if len(pline) > 72: + output.write(pline + "\n") + pline = " " + output.write(pline + " 0x%02x };\n\n" % Functs[f][0][255]) + + else: # inline check is used + # first another little optimisation - if space is present, + # put it at the front of the list so it is checked first + try: + ix = rangeTable.remove((0x20, 0x20)) + rangeTable.insert(0, (0x20, 0x20)) + except: + pass + firstFlag = 1 + + header.write(""" +/** + * %s_ch: + * @c: char to validate + * + * Automatically generated by genChRanges.py + */ +""" % f) + # okay, I'm tired of the messy lineup - let's automate it! + pline = "#define %s_ch(c)" % f + # 'ntab' is number of tabs needed to position to col. 33 from name end + ntab = 4 - (len(pline)) / 8 + if ntab < 0: + ntab = 0 + just = "" + for i in range(ntab): + just += "\t" + pline = pline + just + "(" + for rg in rangeTable: + if not firstFlag: + pline += " || \\\n\t\t\t\t " + else: + firstFlag = 0 + if rg[0] == rg[1]: # single value - check equal + pline += "((c) == 0x%x)" % rg[0] + else: # value range + # since we are doing char, also change range ending in 0xff + if rg[1] != 0xff: + pline += "((0x%x <= (c)) &&" % rg[0] + pline += " ((c) <= 0x%x))" % rg[1] + else: + pline += " (0x%x <= (c))" % rg[0] + pline += ")\n" + header.write(pline) + + header.write(""" +/** + * %sQ: + * @c: char to validate + * + * Automatically generated by genChRanges.py + */ +""" % f) + pline = "#define %sQ(c)" % f + ntab = 4 - (len(pline)) / 8 + if ntab < 0: + ntab = 0 + just = "" + for i in range(ntab): + just += "\t" + header.write(pline + just + "(((c) < 0x100) ? \\\n\t\t\t\t ") + if max(Functs[f][0]) > 0: + header.write("%s_ch((c)) :" % f) + else: + header.write("0 :") + + # if no ranges defined, value invalid if >= 0x100 + numRanges = len(Functs[f][1]) + if numRanges == 0: + header.write(" 0)\n\n") + else: + if numRanges >= minTableSize: + header.write(" \\\n\t\t\t\t xmlCharInRange((c), &%sGroup))\n\n" % f) + else: # if < minTableSize, generate inline code + firstFlag = 1 + for rg in Functs[f][1]: + if not firstFlag: + pline += " || \\\n\t\t\t\t " + else: + firstFlag = 0 + pline = "\\\n\t\t\t\t(" + if rg[0] == rg[1]: # single value - check equal + pline += "((c) == 0x%x)" % rg[0] + else: # value range + pline += "((0x%x <= (c)) &&" % rg[0] + pline += " ((c) <= 0x%x))" % rg[1] + pline += "))\n\n" + header.write(pline) + + + if len(Functs[f][1]) > 0: + header.write("XMLPUBVAR const xmlChRangeGroup %sGroup;\n" % f) + + +# +# Next we do the unicode ranges +# + +for f in fkeys: + if len(Functs[f][1]) > 0: # only generate if unicode ranges present + rangeTable = Functs[f][1] + rangeTable.sort() # ascending tuple sequence + numShort = 0 + numLong = 0 + for rg in rangeTable: + if rg[1] < 0x10000: # if short value + if numShort == 0: # first occurence + pline = "static const xmlChSRange %s_srng[] = { " % f + else: + pline += ", " + numShort += 1 + if len(pline) > 60: + output.write(pline + "\n") + pline = " " + pline += "{0x%x, 0x%x}" % (rg[0], rg[1]) + else: # if long value + if numLong == 0: # first occurence + if numShort > 0: # if there were shorts, finish them off + output.write(pline + "};\n") + pline = "static const xmlChLRange %s_lrng[] = { " % f + else: + pline += ", " + numLong += 1 + if len(pline) > 60: + output.write(pline + "\n") + pline = " " + pline += "{0x%x, 0x%x}" % (rg[0], rg[1]) + output.write(pline + "};\n") # finish off last group + + pline = "const xmlChRangeGroup %sGroup =\n\t{%d, %d, " % (f, numShort, numLong) + if numShort > 0: + pline += "%s_srng" % f + else: + pline += "(xmlChSRangePtr)0" + if numLong > 0: + pline += ", %s_lrng" % f + else: + pline += ", (xmlChLRangePtr)0" + + output.write(pline + "};\n\n") + +output.write( +""" +/** + * 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 xmlChRangeGroup *rptr) { + int low, high, mid; + const xmlChSRange *sptr; + const xmlChLRange *lptr; + + if (rptr == NULL) return(0); + 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; +} + +"""); + +# +# finally, generate the ABI compatibility functions +# +for f in fkeys: + output.write(""" +/** + * %s: + * @ch: character to validate + * + * This function is DEPRECATED. +""" % f); + if max(Functs[f][0]) > 0: + output.write(" * Use %s_ch or %sQ instead" % (f, f)) + else: + output.write(" * Use %sQ instead" % f) + output.write(""" + * + * Returns true if argument valid, false otherwise + */ +""") + output.write("int\n%s(unsigned int ch) {\n return(%sQ(ch));\n}\n\n" % (f,f)) + header.write("XMLPUBFUN int XMLCALL\n\t\t%s(unsigned int ch);\n" % f); +# +# Run complete - write trailers and close the output files +# + +header.write(""" +#ifdef __cplusplus +} +#endif +#endif /* __XML_CHVALID_H__ */ +""") + +header.close() + +output.write("""#define bottom_chvalid +#include "elfgcchack.h" +""") +output.close() + diff --git a/genUnicode.py b/genUnicode.py new file mode 100755 index 0000000..56e4e9b --- /dev/null +++ b/genUnicode.py @@ -0,0 +1,478 @@ +#!/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.1.html" +sources = "Blocks-4.0.1.txt UnicodeData-4.0.1.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 + +#ifdef LIBXML_UNICODE_ENABLED + +#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 + */ + +#define IN_LIBXML +#include "libxml.h" + +#ifdef LIBXML_UNICODE_ENABLED + +#include +#include +#include +#include + +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 const 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 const 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( +"""static xmlUnicodeNameTable xmlUnicodeBlockTbl = {xmlUnicodeBlocks, %s}; +static 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; + + if ((tptr == NULL) || (tname == NULL)) return(NULL); + + 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)); +} + +#define bottom_xmlunicode +#include "elfgcchack.h" +#endif /* LIBXML_UNICODE_ENABLED */ +""") + +header.write(""" +#ifdef __cplusplus +} +#endif + +#endif /* LIBXML_UNICODE_ENABLED */ + +#endif /* __XML_UNICODE_H__ */ +"""); + +header.close() +output.close() diff --git a/gentest.py b/gentest.py new file mode 100755 index 0000000..f178620 --- /dev/null +++ b/gentest.py @@ -0,0 +1,963 @@ +#!/usr/bin/python -u +# +# generate a tester program for the API +# +import sys +import os +import string +try: + import libxml2 +except: + print "libxml2 python bindings not available, skipping testapi.c generation" + sys.exit(0) + +if len(sys.argv) > 1: + srcPref = sys.argv[1] + '/' +else: + srcPref = '' + +# +# Modules we want to skip in API test +# +skipped_modules = [ "SAX", "xlink", "threads", "globals", + "xmlmemory", "xmlversion", "xmlexports", + #deprecated + "DOCBparser", +] + +# +# defines for each module +# +modules_defines = { + "HTMLparser": "LIBXML_HTML_ENABLED", + "catalog": "LIBXML_CATALOG_ENABLED", + "xmlreader": "LIBXML_READER_ENABLED", + "relaxng": "LIBXML_SCHEMAS_ENABLED", + "schemasInternals": "LIBXML_SCHEMAS_ENABLED", + "xmlschemas": "LIBXML_SCHEMAS_ENABLED", + "xmlschemastypes": "LIBXML_SCHEMAS_ENABLED", + "xpath": "LIBXML_XPATH_ENABLED", + "xpathInternals": "LIBXML_XPATH_ENABLED", + "xinclude": "LIBXML_XINCLUDE_ENABLED", + "xpointer": "LIBXML_XPTR_ENABLED", + "xmlregexp" : "LIBXML_REGEXP_ENABLED", + "xmlautomata" : "LIBXML_AUTOMATA_ENABLED", + "xmlsave" : "LIBXML_OUTPUT_ENABLED", + "DOCBparser" : "LIBXML_DOCB_ENABLED", + "xmlmodule" : "LIBXML_MODULES_ENABLED", + "pattern" : "LIBXML_PATTERN_ENABLED", + "schematron" : "LIBXML_SCHEMATRON_ENABLED", +} + +# +# defines for specific functions +# +function_defines = { + "htmlDefaultSAXHandlerInit": "LIBXML_HTML_ENABLED", + "xmlSAX2EndElement" : "LIBXML_SAX1_ENABLED", + "xmlSAX2StartElement" : "LIBXML_SAX1_ENABLED", + "xmlSAXDefaultVersion" : "LIBXML_SAX1_ENABLED", + "UTF8Toisolat1" : "LIBXML_OUTPUT_ENABLED", + "xmlCleanupPredefinedEntities": "LIBXML_LEGACY_ENABLED", + "xmlInitializePredefinedEntities": "LIBXML_LEGACY_ENABLED", + "xmlSetFeature": "LIBXML_LEGACY_ENABLED", + "xmlGetFeature": "LIBXML_LEGACY_ENABLED", + "xmlGetFeaturesList": "LIBXML_LEGACY_ENABLED", + "xmlIOParseDTD": "LIBXML_VALID_ENABLED", + "xmlParseDTD": "LIBXML_VALID_ENABLED", + "xmlParseDoc": "LIBXML_SAX1_ENABLED", + "xmlParseMemory": "LIBXML_SAX1_ENABLED", + "xmlRecoverDoc": "LIBXML_SAX1_ENABLED", + "xmlParseFile": "LIBXML_SAX1_ENABLED", + "xmlRecoverFile": "LIBXML_SAX1_ENABLED", + "xmlRecoverMemory": "LIBXML_SAX1_ENABLED", + "xmlSAXParseFileWithData": "LIBXML_SAX1_ENABLED", + "xmlSAXParseMemory": "LIBXML_SAX1_ENABLED", + "xmlSAXUserParseMemory": "LIBXML_SAX1_ENABLED", + "xmlSAXParseDoc": "LIBXML_SAX1_ENABLED", + "xmlSAXParseDTD": "LIBXML_SAX1_ENABLED", + "xmlSAXUserParseFile": "LIBXML_SAX1_ENABLED", + "xmlParseEntity": "LIBXML_SAX1_ENABLED", + "xmlParseExternalEntity": "LIBXML_SAX1_ENABLED", + "xmlSAXParseMemoryWithData": "LIBXML_SAX1_ENABLED", + "xmlParseBalancedChunkMemory": "LIBXML_SAX1_ENABLED", + "xmlParseBalancedChunkMemoryRecover": "LIBXML_SAX1_ENABLED", + "xmlSetupParserForBuffer": "LIBXML_SAX1_ENABLED", + "xmlStopParser": "LIBXML_PUSH_ENABLED", + "xmlAttrSerializeTxtContent": "LIBXML_OUTPUT_ENABLED", + "xmlSAXParseFile": "LIBXML_SAX1_ENABLED", + "xmlSAXParseEntity": "LIBXML_SAX1_ENABLED", + "xmlNewTextChild": "LIBXML_TREE_ENABLED", + "xmlNewDocRawNode": "LIBXML_TREE_ENABLED", + "xmlNewProp": "LIBXML_TREE_ENABLED", + "xmlReconciliateNs": "LIBXML_TREE_ENABLED", + "xmlValidateNCName": "LIBXML_TREE_ENABLED", + "xmlValidateNMToken": "LIBXML_TREE_ENABLED", + "xmlValidateName": "LIBXML_TREE_ENABLED", + "xmlNewChild": "LIBXML_TREE_ENABLED", + "xmlValidateQName": "LIBXML_TREE_ENABLED", + "xmlSprintfElementContent": "LIBXML_OUTPUT_ENABLED", + "xmlValidGetPotentialChildren" : "LIBXML_VALID_ENABLED", + "xmlValidGetValidElements" : "LIBXML_VALID_ENABLED", + "docbDefaultSAXHandlerInit" : "LIBXML_DOCB_ENABLED", + "xmlTextReaderPreservePattern" : "LIBXML_PATTERN_ENABLED", +} + +# +# Some functions really need to be skipped for the tests. +# +skipped_functions = [ +# block on I/O +"xmlFdRead", "xmlReadFd", "xmlCtxtReadFd", +"htmlFdRead", "htmlReadFd", "htmlCtxtReadFd", +"xmlReaderNewFd", "xmlReaderForFd", +"xmlIORead", "xmlReadIO", "xmlCtxtReadIO", +"htmlIORead", "htmlReadIO", "htmlCtxtReadIO", +"xmlReaderNewIO", "xmlBufferDump", "xmlNanoFTPConnect", +"xmlNanoFTPConnectTo", "xmlNanoHTTPMethod", "xmlNanoHTTPMethodRedir", +# Complex I/O APIs +"xmlCreateIOParserCtxt", "xmlParserInputBufferCreateIO", +"xmlRegisterInputCallbacks", "xmlReaderForIO", +"xmlOutputBufferCreateIO", "xmlRegisterOutputCallbacks", +"xmlSaveToIO", "xmlIOHTTPOpenW", +# library state cleanup, generate false leak informations and other +# troubles, heavillyb tested otherwise. +"xmlCleanupParser", "xmlRelaxNGCleanupTypes", "xmlSetListDoc", +"xmlSetTreeDoc", "xmlUnlinkNode", +# hard to avoid leaks in the tests +"xmlStrcat", "xmlStrncat", "xmlCatalogAddLocal", "xmlNewTextWriterDoc", +"xmlXPathNewValueTree", "xmlXPathWrapString", +# unimplemented +"xmlTextReaderReadInnerXml", "xmlTextReaderReadOuterXml", +"xmlTextReaderReadString", +# destructor +"xmlListDelete", "xmlOutputBufferClose", "xmlNanoFTPClose", "xmlNanoHTTPClose", +# deprecated +"xmlCatalogGetPublic", "xmlCatalogGetSystem", "xmlEncodeEntities", +"xmlNewGlobalNs", "xmlHandleEntity", "xmlNamespaceParseNCName", +"xmlNamespaceParseNSDef", "xmlNamespaceParseQName", +"xmlParseNamespace", "xmlParseQuotedString", "xmlParserHandleReference", +"xmlScanName", +"xmlDecodeEntities", +# allocators +"xmlMemFree", +# verbosity +"xmlCatalogSetDebug", "xmlShellPrintXPathError", "xmlShellPrintNode", +# Internal functions, no user space should really call them +"xmlParseAttribute", "xmlParseAttributeListDecl", "xmlParseName", +"xmlParseNmtoken", "xmlParseEntityValue", "xmlParseAttValue", +"xmlParseSystemLiteral", "xmlParsePubidLiteral", "xmlParseCharData", +"xmlParseExternalID", "xmlParseComment", "xmlParsePITarget", "xmlParsePI", +"xmlParseNotationDecl", "xmlParseEntityDecl", "xmlParseDefaultDecl", +"xmlParseNotationType", "xmlParseEnumerationType", "xmlParseEnumeratedType", +"xmlParseAttributeType", "xmlParseAttributeListDecl", +"xmlParseElementMixedContentDecl", "xmlParseElementChildrenContentDecl", +"xmlParseElementContentDecl", "xmlParseElementDecl", "xmlParseMarkupDecl", +"xmlParseCharRef", "xmlParseEntityRef", "xmlParseReference", +"xmlParsePEReference", "xmlParseDocTypeDecl", "xmlParseAttribute", +"xmlParseStartTag", "xmlParseEndTag", "xmlParseCDSect", "xmlParseContent", +"xmlParseElement", "xmlParseVersionNum", "xmlParseVersionInfo", +"xmlParseEncName", "xmlParseEncodingDecl", "xmlParseSDDecl", +"xmlParseXMLDecl", "xmlParseTextDecl", "xmlParseMisc", +"xmlParseExternalSubset", "xmlParserHandlePEReference", +"xmlSkipBlankChars", +] + +# +# These functions have side effects on the global state +# and hence generate errors on memory allocation tests +# +skipped_memcheck = [ "xmlLoadCatalog", "xmlAddEncodingAlias", + "xmlSchemaInitTypes", "xmlNanoFTPProxy", "xmlNanoFTPScanProxy", + "xmlNanoHTTPScanProxy", "xmlResetLastError", "xmlCatalogConvert", + "xmlCatalogRemove", "xmlLoadCatalogs", "xmlCleanupCharEncodingHandlers", + "xmlInitCharEncodingHandlers", "xmlCatalogCleanup", + "xmlSchemaGetBuiltInType", + "htmlParseFile", "htmlCtxtReadFile", # loads the catalogs + "xmlTextReaderSchemaValidate", "xmlSchemaCleanupTypes", # initialize the schemas type system + "xmlCatalogResolve", "xmlIOParseDTD" # loads the catalogs +] + +# +# Extra code needed for some test cases +# +extra_pre_call = { + "xmlSAXUserParseFile": """ +#ifdef LIBXML_SAX1_ENABLED + if (sax == (xmlSAXHandlerPtr)&xmlDefaultSAXHandler) user_data = NULL; +#endif +""", + "xmlSAXUserParseMemory": """ +#ifdef LIBXML_SAX1_ENABLED + if (sax == (xmlSAXHandlerPtr)&xmlDefaultSAXHandler) user_data = NULL; +#endif +""", + "xmlParseBalancedChunkMemory": """ +#ifdef LIBXML_SAX1_ENABLED + if (sax == (xmlSAXHandlerPtr)&xmlDefaultSAXHandler) user_data = NULL; +#endif +""", + "xmlParseBalancedChunkMemoryRecover": """ +#ifdef LIBXML_SAX1_ENABLED + if (sax == (xmlSAXHandlerPtr)&xmlDefaultSAXHandler) user_data = NULL; +#endif +""", + "xmlParserInputBufferCreateFd": + "if (fd >= 0) fd = -1;", +} +extra_post_call = { + "xmlAddChild": + "if (ret_val == NULL) { xmlFreeNode(cur) ; cur = NULL ; }", + "xmlAddEntity": + "if (ret_val != NULL) { xmlFreeNode(ret_val) ; ret_val = NULL; }", + "xmlAddChildList": + "if (ret_val == NULL) { xmlFreeNodeList(cur) ; cur = NULL ; }", + "xmlAddSibling": + "if (ret_val == NULL) { xmlFreeNode(elem) ; elem = NULL ; }", + "xmlAddNextSibling": + "if (ret_val == NULL) { xmlFreeNode(elem) ; elem = NULL ; }", + "xmlAddPrevSibling": + "if (ret_val == NULL) { xmlFreeNode(elem) ; elem = NULL ; }", + "xmlDocSetRootElement": + "if (doc == NULL) { xmlFreeNode(root) ; root = NULL ; }", + "xmlReplaceNode": + """if (cur != NULL) { + xmlUnlinkNode(cur); + xmlFreeNode(cur) ; cur = NULL ; } + if (old != NULL) { + xmlUnlinkNode(old); + xmlFreeNode(old) ; old = NULL ; } + ret_val = NULL;""", + "xmlTextMerge": + """if ((first != NULL) && (first->type != XML_TEXT_NODE)) { + xmlUnlinkNode(second); + xmlFreeNode(second) ; second = NULL ; }""", + "xmlBuildQName": + """if ((ret_val != NULL) && (ret_val != ncname) && + (ret_val != prefix) && (ret_val != memory)) + xmlFree(ret_val); + ret_val = NULL;""", + "xmlNewDocElementContent": + """xmlFreeDocElementContent(doc, ret_val); ret_val = NULL;""", + "xmlDictReference": "xmlDictFree(dict);", + # Functions which deallocates one of their parameters + "xmlXPathConvertBoolean": """val = NULL;""", + "xmlXPathConvertNumber": """val = NULL;""", + "xmlXPathConvertString": """val = NULL;""", + "xmlSaveFileTo": """buf = NULL;""", + "xmlSaveFormatFileTo": """buf = NULL;""", + "xmlIOParseDTD": "input = NULL;", + "xmlRemoveProp": "cur = NULL;", + "xmlNewNs": "if ((node == NULL) && (ret_val != NULL)) xmlFreeNs(ret_val);", + "xmlCopyNamespace": "if (ret_val != NULL) xmlFreeNs(ret_val);", + "xmlCopyNamespaceList": "if (ret_val != NULL) xmlFreeNsList(ret_val);", + "xmlNewTextWriter": "if (ret_val != NULL) out = NULL;", + "xmlNewTextWriterPushParser": "if (ctxt != NULL) {xmlFreeDoc(ctxt->myDoc); ctxt->myDoc = NULL;} if (ret_val != NULL) ctxt = NULL;", + "xmlNewIOInputStream": "if (ret_val != NULL) input = NULL;", + "htmlParseChunk": "if (ctxt != NULL) {xmlFreeDoc(ctxt->myDoc); ctxt->myDoc = NULL;}", + "htmlParseDocument": "if (ctxt != NULL) {xmlFreeDoc(ctxt->myDoc); ctxt->myDoc = NULL;}", + "xmlParseDocument": "if (ctxt != NULL) {xmlFreeDoc(ctxt->myDoc); ctxt->myDoc = NULL;}", + "xmlParseChunk": "if (ctxt != NULL) {xmlFreeDoc(ctxt->myDoc); ctxt->myDoc = NULL;}", + "xmlParseExtParsedEnt": "if (ctxt != NULL) {xmlFreeDoc(ctxt->myDoc); ctxt->myDoc = NULL;}", + "xmlDOMWrapAdoptNode": "if ((node != NULL) && (node->parent == NULL)) {xmlUnlinkNode(node);xmlFreeNode(node);node = NULL;}", + "xmlBufferSetAllocationScheme": "if ((buf != NULL) && (scheme == XML_BUFFER_ALLOC_IMMUTABLE) && (buf->content != NULL) && (buf->content != static_buf_content)) { xmlFree(buf->content); buf->content = NULL;}" +} + +modules = [] + +def is_skipped_module(name): + for mod in skipped_modules: + if mod == name: + return 1 + return 0 + +def is_skipped_function(name): + for fun in skipped_functions: + if fun == name: + return 1 + # Do not test destructors + if string.find(name, 'Free') != -1: + return 1 + return 0 + +def is_skipped_memcheck(name): + for fun in skipped_memcheck: + if fun == name: + return 1 + return 0 + +missing_types = {} +def add_missing_type(name, func): + try: + list = missing_types[name] + list.append(func) + except: + missing_types[name] = [func] + +generated_param_types = [] +def add_generated_param_type(name): + generated_param_types.append(name) + +generated_return_types = [] +def add_generated_return_type(name): + generated_return_types.append(name) + +missing_functions = {} +missing_functions_nr = 0 +def add_missing_functions(name, module): + global missing_functions_nr + + missing_functions_nr = missing_functions_nr + 1 + try: + list = missing_functions[module] + list.append(name) + except: + missing_functions[module] = [name] + +# +# Provide the type generators and destructors for the parameters +# + +def type_convert(str, name, info, module, function, pos): +# res = string.replace(str, " ", " ") +# res = string.replace(str, " ", " ") +# res = string.replace(str, " ", " ") + res = string.replace(str, " *", "_ptr") +# res = string.replace(str, "*", "_ptr") + res = string.replace(res, " ", "_") + if res == 'const_char_ptr': + if string.find(name, "file") != -1 or \ + string.find(name, "uri") != -1 or \ + string.find(name, "URI") != -1 or \ + string.find(info, "filename") != -1 or \ + string.find(info, "URI") != -1 or \ + string.find(info, "URL") != -1: + if string.find(function, "Save") != -1 or \ + string.find(function, "Create") != -1 or \ + string.find(function, "Write") != -1 or \ + string.find(function, "Fetch") != -1: + return('fileoutput') + return('filepath') + if res == 'void_ptr': + if module == 'nanoftp' and name == 'ctx': + return('xmlNanoFTPCtxtPtr') + if function == 'xmlNanoFTPNewCtxt' or \ + function == 'xmlNanoFTPConnectTo' or \ + function == 'xmlNanoFTPOpen': + return('xmlNanoFTPCtxtPtr') + if module == 'nanohttp' and name == 'ctx': + return('xmlNanoHTTPCtxtPtr') + if function == 'xmlNanoHTTPMethod' or \ + function == 'xmlNanoHTTPMethodRedir' or \ + function == 'xmlNanoHTTPOpen' or \ + function == 'xmlNanoHTTPOpenRedir': + return('xmlNanoHTTPCtxtPtr'); + if function == 'xmlIOHTTPOpen': + return('xmlNanoHTTPCtxtPtr') + if string.find(name, "data") != -1: + return('userdata') + if string.find(name, "user") != -1: + return('userdata') + if res == 'xmlDoc_ptr': + res = 'xmlDocPtr' + if res == 'xmlNode_ptr': + res = 'xmlNodePtr' + if res == 'xmlDict_ptr': + res = 'xmlDictPtr' + if res == 'xmlNodePtr' and pos != 0: + if (function == 'xmlAddChild' and pos == 2) or \ + (function == 'xmlAddChildList' and pos == 2) or \ + (function == 'xmlAddNextSibling' and pos == 2) or \ + (function == 'xmlAddSibling' and pos == 2) or \ + (function == 'xmlDocSetRootElement' and pos == 2) or \ + (function == 'xmlReplaceNode' and pos == 2) or \ + (function == 'xmlTextMerge') or \ + (function == 'xmlAddPrevSibling' and pos == 2): + return('xmlNodePtr_in'); + if res == 'const xmlBufferPtr': + res = 'xmlBufferPtr' + if res == 'xmlChar_ptr' and name == 'name' and \ + string.find(function, "EatName") != -1: + return('eaten_name') + if res == 'void_ptr*': + res = 'void_ptr_ptr' + if res == 'char_ptr*': + res = 'char_ptr_ptr' + if res == 'xmlChar_ptr*': + res = 'xmlChar_ptr_ptr' + if res == 'const_xmlChar_ptr*': + res = 'const_xmlChar_ptr_ptr' + if res == 'const_char_ptr*': + res = 'const_char_ptr_ptr' + if res == 'FILE_ptr' and module == 'debugXML': + res = 'debug_FILE_ptr'; + if res == 'int' and name == 'options': + if module == 'parser' or module == 'xmlreader': + res = 'parseroptions' + + return res + +known_param_types = [] + +def is_known_param_type(name, rtype): + global test + for type in known_param_types: + if type == name: + return 1 + for type in generated_param_types: + if type == name: + return 1 + + if name[-3:] == 'Ptr' or name[-4:] == '_ptr': + if rtype[0:6] == 'const ': + crtype = rtype[6:] + else: + crtype = rtype + + define = 0 + if modules_defines.has_key(module): + test.write("#ifdef %s\n" % (modules_defines[module])) + define = 1 + test.write(""" +#define gen_nb_%s 1 +static %s gen_%s(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_%s(int no ATTRIBUTE_UNUSED, %s val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} +""" % (name, crtype, name, name, rtype)) + if define == 1: + test.write("#endif\n\n") + add_generated_param_type(name) + return 1 + + return 0 + +# +# Provide the type destructors for the return values +# + +known_return_types = [] + +def is_known_return_type(name): + for type in known_return_types: + if type == name: + return 1 + return 0 + +# +# Copy the beginning of the C test program result +# + +try: + input = open("testapi.c", "r") +except: + input = open(srcPref + "testapi.c", "r") +test = open('testapi.c.new', 'w') + +def compare_and_save(): + global test + + test.close() + try: + input = open("testapi.c", "r").read() + except: + input = '' + test = open('testapi.c.new', "r").read() + if input != test: + try: + os.system("rm testapi.c; mv testapi.c.new testapi.c") + except: + os.system("mv testapi.c.new testapi.c") + print("Updated testapi.c") + else: + print("Generated testapi.c is identical") + +line = input.readline() +while line != "": + if line == "/* CUT HERE: everything below that line is generated */\n": + break; + if line[0:15] == "#define gen_nb_": + type = string.split(line[15:])[0] + known_param_types.append(type) + if line[0:19] == "static void desret_": + type = string.split(line[19:], '(')[0] + known_return_types.append(type) + test.write(line) + line = input.readline() +input.close() + +if line == "": + print "Could not find the CUT marker in testapi.c skipping generation" + test.close() + sys.exit(0) + +print("Scanned testapi.c: found %d parameters types and %d return types\n" % ( + len(known_param_types), len(known_return_types))) +test.write("/* CUT HERE: everything below that line is generated */\n") + + +# +# Open the input API description +# +doc = libxml2.readFile(srcPref + 'doc/libxml2-api.xml', None, 0) +if doc == None: + print "Failed to load doc/libxml2-api.xml" + sys.exit(1) +ctxt = doc.xpathNewContext() + +# +# Generate a list of all function parameters and select only +# those used in the api tests +# +argtypes = {} +args = ctxt.xpathEval("/api/symbols/function/arg") +for arg in args: + mod = arg.xpathEval('string(../@file)') + func = arg.xpathEval('string(../@name)') + if (mod not in skipped_modules) and (func not in skipped_functions): + type = arg.xpathEval('string(@type)') + if not argtypes.has_key(type): + argtypes[type] = func + +# similarly for return types +rettypes = {} +rets = ctxt.xpathEval("/api/symbols/function/return") +for ret in rets: + mod = ret.xpathEval('string(../@file)') + func = ret.xpathEval('string(../@name)') + if (mod not in skipped_modules) and (func not in skipped_functions): + type = ret.xpathEval('string(@type)') + if not rettypes.has_key(type): + rettypes[type] = func + +# +# Generate constructors and return type handling for all enums +# which are used as function parameters +# +enums = ctxt.xpathEval("/api/symbols/typedef[@type='enum']") +for enum in enums: + module = enum.xpathEval('string(@file)') + name = enum.xpathEval('string(@name)') + # + # Skip any enums which are not in our filtered lists + # + if (name == None) or ((name not in argtypes) and (name not in rettypes)): + continue; + define = 0 + + if argtypes.has_key(name) and is_known_param_type(name, name) == 0: + values = ctxt.xpathEval("/api/symbols/enum[@type='%s']" % name) + i = 0 + vals = [] + for value in values: + vname = value.xpathEval('string(@name)') + if vname == None: + continue; + i = i + 1 + if i >= 5: + break; + vals.append(vname) + if vals == []: + print "Didn't find any value for enum %s" % (name) + continue + if modules_defines.has_key(module): + test.write("#ifdef %s\n" % (modules_defines[module])) + define = 1 + test.write("#define gen_nb_%s %d\n" % (name, len(vals))) + test.write("""static %s gen_%s(int no, int nr ATTRIBUTE_UNUSED) {\n""" % + (name, name)) + i = 1 + for value in vals: + test.write(" if (no == %d) return(%s);\n" % (i, value)) + i = i + 1 + test.write(""" return(0); +} + +static void des_%s(int no ATTRIBUTE_UNUSED, %s val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +""" % (name, name)); + known_param_types.append(name) + + if (is_known_return_type(name) == 0) and (name in rettypes): + if define == 0 and modules_defines.has_key(module): + test.write("#ifdef %s\n" % (modules_defines[module])) + define = 1 + test.write("""static void desret_%s(%s val ATTRIBUTE_UNUSED) { +} + +""" % (name, name)) + known_return_types.append(name) + if define == 1: + test.write("#endif\n\n") + +# +# Load the interfaces +# +headers = ctxt.xpathEval("/api/files/file") +for file in headers: + name = file.xpathEval('string(@name)') + if (name == None) or (name == ''): + continue + + # + # Some module may be skipped because they don't really consists + # of user callable APIs + # + if is_skipped_module(name): + continue + + # + # do not test deprecated APIs + # + desc = file.xpathEval('string(description)') + if string.find(desc, 'DEPRECATED') != -1: + print "Skipping deprecated interface %s" % name + continue; + + test.write("#include \n" % name) + modules.append(name) + +# +# Generate the callers signatures +# +for module in modules: + test.write("static int test_%s(void);\n" % module); + +# +# Generate the top caller +# + +test.write(""" +/** + * testlibxml2: + * + * Main entry point of the tester for the full libxml2 module, + * it calls all the tester entry point for each module. + * + * Returns the number of error found + */ +static int +testlibxml2(void) +{ + int test_ret = 0; + +""") + +for module in modules: + test.write(" test_ret += test_%s();\n" % module) + +test.write(""" + printf("Total: %d functions, %d tests, %d errors\\n", + function_tests, call_tests, test_ret); + return(test_ret); +} + +""") + +# +# How to handle a function +# +nb_tests = 0 + +def generate_test(module, node): + global test + global nb_tests + nb_cond = 0 + no_gen = 0 + + name = node.xpathEval('string(@name)') + if is_skipped_function(name): + return + + # + # check we know how to handle the args and return values + # and store the informations for the generation + # + try: + args = node.xpathEval("arg") + except: + args = [] + t_args = [] + n = 0 + for arg in args: + n = n + 1 + rtype = arg.xpathEval("string(@type)") + if rtype == 'void': + break; + info = arg.xpathEval("string(@info)") + nam = arg.xpathEval("string(@name)") + type = type_convert(rtype, nam, info, module, name, n) + if is_known_param_type(type, rtype) == 0: + add_missing_type(type, name); + no_gen = 1 + if (type[-3:] == 'Ptr' or type[-4:] == '_ptr') and \ + rtype[0:6] == 'const ': + crtype = rtype[6:] + else: + crtype = rtype + t_args.append((nam, type, rtype, crtype, info)) + + try: + rets = node.xpathEval("return") + except: + rets = [] + t_ret = None + for ret in rets: + rtype = ret.xpathEval("string(@type)") + info = ret.xpathEval("string(@info)") + type = type_convert(rtype, 'return', info, module, name, 0) + if rtype == 'void': + break + if is_known_return_type(type) == 0: + add_missing_type(type, name); + no_gen = 1 + t_ret = (type, rtype, info) + break + + test.write(""" +static int +test_%s(void) { + int test_ret = 0; + +""" % (name)) + + if no_gen == 1: + add_missing_functions(name, module) + test.write(""" + /* missing type support */ + return(test_ret); +} + +""") + return + + try: + conds = node.xpathEval("cond") + for cond in conds: + test.write("#if %s\n" % (cond.get_content())) + nb_cond = nb_cond + 1 + except: + pass + + define = 0 + if function_defines.has_key(name): + test.write("#ifdef %s\n" % (function_defines[name])) + define = 1 + + # Declare the memory usage counter + no_mem = is_skipped_memcheck(name) + if no_mem == 0: + test.write(" int mem_base;\n"); + + # Declare the return value + if t_ret != None: + test.write(" %s ret_val;\n" % (t_ret[1])) + + # Declare the arguments + for arg in t_args: + (nam, type, rtype, crtype, info) = arg; + # add declaration + test.write(" %s %s; /* %s */\n" % (crtype, nam, info)) + test.write(" int n_%s;\n" % (nam)) + test.write("\n") + + # Cascade loop on of each argument list of values + for arg in t_args: + (nam, type, rtype, crtype, info) = arg; + # + test.write(" for (n_%s = 0;n_%s < gen_nb_%s;n_%s++) {\n" % ( + nam, nam, type, nam)) + + # log the memory usage + if no_mem == 0: + test.write(" mem_base = xmlMemBlocks();\n"); + + # prepare the call + i = 0; + for arg in t_args: + (nam, type, rtype, crtype, info) = arg; + # + test.write(" %s = gen_%s(n_%s, %d);\n" % (nam, type, nam, i)) + i = i + 1; + + # do the call, and clanup the result + if extra_pre_call.has_key(name): + test.write(" %s\n"% (extra_pre_call[name])) + if t_ret != None: + test.write("\n ret_val = %s(" % (name)) + need = 0 + for arg in t_args: + (nam, type, rtype, crtype, info) = arg + if need: + test.write(", ") + else: + need = 1 + if rtype != crtype: + test.write("(%s)" % rtype) + test.write("%s" % nam); + test.write(");\n") + if extra_post_call.has_key(name): + test.write(" %s\n"% (extra_post_call[name])) + test.write(" desret_%s(ret_val);\n" % t_ret[0]) + else: + test.write("\n %s(" % (name)); + need = 0; + for arg in t_args: + (nam, type, rtype, crtype, info) = arg; + if need: + test.write(", ") + else: + need = 1 + if rtype != crtype: + test.write("(%s)" % rtype) + test.write("%s" % nam) + test.write(");\n") + if extra_post_call.has_key(name): + test.write(" %s\n"% (extra_post_call[name])) + + test.write(" call_tests++;\n"); + + # Free the arguments + i = 0; + for arg in t_args: + (nam, type, rtype, crtype, info) = arg; + # This is a hack to prevent generating a destructor for the + # 'input' argument in xmlTextReaderSetup. There should be + # a better, more generic way to do this! + if string.find(info, 'destroy') == -1: + test.write(" des_%s(n_%s, " % (type, nam)) + if rtype != crtype: + test.write("(%s)" % rtype) + test.write("%s, %d);\n" % (nam, i)) + i = i + 1; + + test.write(" xmlResetLastError();\n"); + # Check the memory usage + if no_mem == 0: + test.write(""" if (mem_base != xmlMemBlocks()) { + printf("Leak of %%d blocks found in %s", + xmlMemBlocks() - mem_base); + test_ret++; +""" % (name)); + for arg in t_args: + (nam, type, rtype, crtype, info) = arg; + test.write(""" printf(" %%d", n_%s);\n""" % (nam)) + test.write(""" printf("\\n");\n""") + test.write(" }\n") + + for arg in t_args: + test.write(" }\n") + + test.write(" function_tests++;\n") + # + # end of conditional + # + while nb_cond > 0: + test.write("#endif\n") + nb_cond = nb_cond -1 + if define == 1: + test.write("#endif\n") + + nb_tests = nb_tests + 1; + + test.write(""" + return(test_ret); +} + +""") + +# +# Generate all module callers +# +for module in modules: + # gather all the functions exported by that module + try: + functions = ctxt.xpathEval("/api/symbols/function[@file='%s']" % (module)) + except: + print "Failed to gather functions from module %s" % (module) + continue; + + # iterate over all functions in the module generating the test + i = 0 + nb_tests_old = nb_tests + for function in functions: + i = i + 1 + generate_test(module, function); + + # header + test.write("""static int +test_%s(void) { + int test_ret = 0; + + if (quiet == 0) printf("Testing %s : %d of %d functions ...\\n"); +""" % (module, module, nb_tests - nb_tests_old, i)) + + # iterate over all functions in the module generating the call + for function in functions: + name = function.xpathEval('string(@name)') + if is_skipped_function(name): + continue + test.write(" test_ret += test_%s();\n" % (name)) + + # footer + test.write(""" + if (test_ret != 0) + printf("Module %s: %%d errors\\n", test_ret); + return(test_ret); +} +""" % (module)) + +# +# Generate direct module caller +# +test.write("""static int +test_module(const char *module) { +"""); +for module in modules: + test.write(""" if (!strcmp(module, "%s")) return(test_%s());\n""" % ( + module, module)) +test.write(""" return(0); +} +"""); + +print "Generated test for %d modules and %d functions" %(len(modules), nb_tests) + +compare_and_save() + +missing_list = [] +for missing in missing_types.keys(): + if missing == 'va_list' or missing == '...': + continue; + + n = len(missing_types[missing]) + missing_list.append((n, missing)) + +def compare_missing(a, b): + return b[0] - a[0] + +missing_list.sort(compare_missing) +print "Missing support for %d functions and %d types see missing.lst" % (missing_functions_nr, len(missing_list)) +lst = open("missing.lst", "w") +lst.write("Missing support for %d types" % (len(missing_list))) +lst.write("\n") +for miss in missing_list: + lst.write("%s: %d :" % (miss[1], miss[0])) + i = 0 + for n in missing_types[miss[1]]: + i = i + 1 + if i > 5: + lst.write(" ...") + break + lst.write(" %s" % (n)) + lst.write("\n") +lst.write("\n") +lst.write("\n") +lst.write("Missing support per module"); +for module in missing_functions.keys(): + lst.write("module %s:\n %s\n" % (module, missing_functions[module])) + +lst.close() + + diff --git a/global.data b/global.data new file mode 100644 index 0000000..519519a --- /dev/null +++ b/global.data @@ -0,0 +1,29 @@ +#type,name,array?,threadGlobalDefault accessor? +int,oldXMLWDcompatibility,, +xmlBufferAllocationScheme,xmlBufferAllocScheme,,1 +int,xmlDefaultBufferSize,,1 +xmlSAXHandlerV1,xmlDefaultSAXHandler,, +xmlSAXLocator,xmlDefaultSAXLocator,, +int,xmlDoValidityCheckingDefaultValue,,1 +xmlGenericErrorFunc,xmlGenericError,, +xmlStructuredErrorFunc,xmlStructuredError,, +void *,xmlGenericErrorContext,, +void *,xmlStructuredErrorContext,, +int,xmlGetWarningsDefaultValue,,1 +int,xmlIndentTreeOutput,,1 +const char *,xmlTreeIndentString,,1 +int,xmlKeepBlanksDefaultValue,,1 +int,xmlLineNumbersDefaultValue,,1 +int,xmlLoadExtDtdDefaultValue,,1 +int,xmlParserDebugEntities,,1 +const char *,xmlParserVersion,, +int,xmlPedanticParserDefaultValue,,1 +int,xmlSaveNoEmptyTags,,1 +#const xmlChar,xmlStringComment,[],1 +#const xmlChar,xmlStringText,[],1 +#const xmlChar,xmlStringTextNoenc,[],1 +int,xmlSubstituteEntitiesDefaultValue,,1 +xmlRegisterNodeFunc,xmlRegisterNodeDefaultValue,, +xmlDeregisterNodeFunc,xmlDeregisterNodeDefaultValue,, +xmlParserInputBufferCreateFilenameFunc,xmlParserInputBufferCreateFilenameValue,, +xmlOutputBufferCreateFilenameFunc,xmlOutputBufferCreateFilenameValue,, diff --git a/globals.c b/globals.c new file mode 100644 index 0000000..e351b03 --- /dev/null +++ b/globals.c @@ -0,0 +1,1114 @@ +/* + * 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 + * daniel@veillard.com + */ + +#define IN_LIBXML +#include "libxml.h" + +#ifdef HAVE_STDLIB_H +#include +#endif +#include + +#include +#include +#include + +/* #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(void) +{ + if (xmlThrDefMutex == NULL) + xmlThrDefMutex = xmlNewMutex(); +} + +/** + * xmlCleanupGlobals: + * + * Additional cleanup for multi-threading + */ +void xmlCleanupGlobals(void) +{ + if (xmlThrDefMutex != NULL) { + xmlFreeMutex(xmlThrDefMutex); + xmlThrDefMutex = NULL; + } + __xmlGlobalInitMutexDestroy(); +} + +/************************************************************************ + * * + * All the user accessible global variables of the library * + * * + ************************************************************************/ + +/* + * Memory allocation routines + */ +#undef xmlFree +#undef xmlMalloc +#undef xmlMallocAtomic +#undef xmlMemStrdup +#undef xmlRealloc + +#if defined(DEBUG_MEMORY_LOCATION) || defined(DEBUG_MEMORY) +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 +#include +#include + +#undef docbDefaultSAXHandler +#undef htmlDefaultSAXHandler +#undef oldXMLWDcompatibility +#undef xmlBufferAllocScheme +#undef xmlDefaultBufferSize +#undef xmlDefaultSAXHandler +#undef xmlDefaultSAXLocator +#undef xmlDoValidityCheckingDefaultValue +#undef xmlGenericError +#undef xmlStructuredError +#undef xmlGenericErrorContext +#undef xmlStructuredErrorContext +#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 xmlParserInputBufferCreateFilenameValue +#undef xmlOutputBufferCreateFilenameValue +/** + * xmlParserVersion: + * + * Constant string describing the internal version of the library + */ +const char *xmlParserVersion = LIBXML_VERSION_STRING LIBXML_VERSION_EXTRA; + +/** + * 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; + +xmlParserInputBufferCreateFilenameFunc xmlParserInputBufferCreateFilenameValue = NULL; +static xmlParserInputBufferCreateFilenameFunc xmlParserInputBufferCreateFilenameValueThrDef = NULL; + +xmlOutputBufferCreateFilenameFunc xmlOutputBufferCreateFilenameValue = NULL; +static xmlOutputBufferCreateFilenameFunc xmlOutputBufferCreateFilenameValueThrDef = NULL; + +/* + * Error handling + */ + +/* xmlGenericErrorFunc xmlGenericError = xmlGenericErrorDefaultFunc; */ +/* Must initialize xmlGenericError in xmlInitParser */ +void XMLCDECL 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; +/** + * xmlStructuredErrorContext: + * + * Global setting passed to structured error callbacks + */ +void *xmlStructuredErrorContext = NULL; +static void *xmlStructuredErrorContextThrDef = 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 but . those two forms are undistinguishable + * once parsed. + * Disabled by default + */ +int xmlSaveNoEmptyTags = 0; +static 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, + xmlSAX2ProcessingInstruction, + 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); + +#if defined(LIBXML_DOCB_ENABLED) && defined(LIBXML_LEGACY_ENABLED) && defined(LIBXML_SAX1_ENABLED) + initdocbDefaultSAXHandler(&gs->docbDefaultSAXHandler); +#endif +#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_LEGACY_ENABLED) && defined(LIBXML_SAX1_ENABLED) + inithtmlDefaultSAXHandler(&gs->htmlDefaultSAXHandler); +#endif + + gs->oldXMLWDcompatibility = 0; + gs->xmlBufferAllocScheme = xmlBufferAllocSchemeThrDef; + gs->xmlDefaultBufferSize = xmlDefaultBufferSizeThrDef; +#if defined(LIBXML_SAX1_ENABLED) && defined(LIBXML_LEGACY_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->xmlStructuredErrorContext = xmlStructuredErrorContextThrDef; + gs->xmlRegisterNodeDefaultValue = xmlRegisterNodeDefaultValueThrDef; + gs->xmlDeregisterNodeDefaultValue = xmlDeregisterNodeDefaultValueThrDef; + + gs->xmlParserInputBufferCreateFilenameValue = xmlParserInputBufferCreateFilenameValueThrDef; + gs->xmlOutputBufferCreateFilenameValue = xmlOutputBufferCreateFilenameValueThrDef; + 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); + xmlStructuredErrorContextThrDef = 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); +} + +xmlParserInputBufferCreateFilenameFunc +xmlThrDefParserInputBufferCreateFilenameDefault(xmlParserInputBufferCreateFilenameFunc func) +{ + xmlParserInputBufferCreateFilenameFunc old; + + xmlMutexLock(xmlThrDefMutex); + old = xmlParserInputBufferCreateFilenameValueThrDef; + if (old == NULL) { + old = __xmlParserInputBufferCreateFilename; + } + + xmlParserInputBufferCreateFilenameValueThrDef = func; + xmlMutexUnlock(xmlThrDefMutex); + + return(old); +} + +xmlOutputBufferCreateFilenameFunc +xmlThrDefOutputBufferCreateFilenameDefault(xmlOutputBufferCreateFilenameFunc func) +{ + xmlOutputBufferCreateFilenameFunc old; + + xmlMutexLock(xmlThrDefMutex); + old = xmlOutputBufferCreateFilenameValueThrDef; +#ifdef LIBXML_OUTPUT_ENABLED + if (old == NULL) { + old = __xmlOutputBufferCreateFilename; + } +#endif + xmlOutputBufferCreateFilenameValueThrDef = 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); +} + +/* + * The following memory routines were apparently lost at some point, + * and were re-inserted at this point on June 10, 2004. Hope it's + * the right place for them :-) + */ +#if defined(LIBXML_THREAD_ALLOC_ENABLED) && defined(LIBXML_THREAD_ENABLED) +#undef xmlMalloc +xmlMallocFunc * +__xmlMalloc(void){ + if (IS_MAIN_THREAD) + return (&xmlMalloc); + else + return (&xmlGetGlobalState()->xmlMalloc); +} + +#undef xmlMallocAtomic +xmlMallocFunc * +__xmlMallocAtomic(void){ + if (IS_MAIN_THREAD) + return (&xmlMallocAtomic); + else + return (&xmlGetGlobalState()->xmlMallocAtomic); +} + +#undef xmlRealloc +xmlReallocFunc * +__xmlRealloc(void){ + if (IS_MAIN_THREAD) + return (&xmlRealloc); + else + return (&xmlGetGlobalState()->xmlRealloc); +} + +#undef xmlFree +xmlFreeFunc * +__xmlFree(void){ + if (IS_MAIN_THREAD) + return (&xmlFree); + else + return (&xmlGetGlobalState()->xmlFree); +} + +xmlStrdupFunc * +__xmlMemStrdup(void){ + if (IS_MAIN_THREAD) + return (&xmlMemStrdup); + else + return (&xmlGetGlobalState()->xmlMemStrdup); +} + +#endif + +/* + * 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 xmlStructuredErrorContext +void * * +__xmlStructuredErrorContext(void) { + if (IS_MAIN_THREAD) + return (&xmlStructuredErrorContext); + else + return (&xmlGetGlobalState()->xmlStructuredErrorContext); +} + +#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); +} + +#undef xmlParserInputBufferCreateFilenameValue +xmlParserInputBufferCreateFilenameFunc * +__xmlParserInputBufferCreateFilenameValue(void) { + if (IS_MAIN_THREAD) + return (&xmlParserInputBufferCreateFilenameValue); + else + return (&xmlGetGlobalState()->xmlParserInputBufferCreateFilenameValue); +} + +#undef xmlOutputBufferCreateFilenameValue +xmlOutputBufferCreateFilenameFunc * +__xmlOutputBufferCreateFilenameValue(void) { + if (IS_MAIN_THREAD) + return (&xmlOutputBufferCreateFilenameValue); + else + return (&xmlGetGlobalState()->xmlOutputBufferCreateFilenameValue); +} + +#define bottom_globals +#include "elfgcchack.h" diff --git a/hash.c b/hash.c new file mode 100644 index 0000000..f9a2017 --- /dev/null +++ b/hash.c @@ -0,0 +1,1124 @@ +/* + * hash.c: chained hash tables + * + * Reference: Your favorite introductory book on algorithms + * + * Copyright (C) 2000,2012 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 +#ifdef HAVE_STDLIB_H +#include +#endif +#ifdef HAVE_TIME_H +#include +#endif + +/* + * Following http://www.ocert.org/advisories/ocert-2011-003.html + * it seems that having hash randomization might be a good idea + * when using XML with untrusted data + */ +#if defined(HAVE_RAND) && defined(HAVE_SRAND) && defined(HAVE_TIME) +#define HASH_RANDOMIZATION +#endif + +#include +#include +#include +#include +#include + +#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; + xmlDictPtr dict; +#ifdef HASH_RANDOMIZATION + int random_seed; +#endif +}; + +/* + * 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; + +#ifdef HASH_RANDOMIZATION + value = table->random_seed; +#endif + if (name != NULL) { + value += 30 * (*name); + while ((ch = *name++) != 0) { + value = value ^ ((value << 5) + (value >> 3) + (unsigned long)ch); + } + } + value = value ^ ((value << 5) + (value >> 3)); + if (name2 != NULL) { + while ((ch = *name2++) != 0) { + value = value ^ ((value << 5) + (value >> 3) + (unsigned long)ch); + } + } + value = value ^ ((value << 5) + (value >> 3)); + if (name3 != NULL) { + while ((ch = *name3++) != 0) { + value = value ^ ((value << 5) + (value >> 3) + (unsigned long)ch); + } + } + 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; + +#ifdef HASH_RANDOMIZATION + value = table->random_seed; +#endif + 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); + } + } + value = value ^ ((value << 5) + (value >> 3)); + 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); + } + } + value = value ^ ((value << 5) + (value >> 3)); + 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->dict = NULL; + table->size = size; + table->nbElems = 0; + table->table = xmlMalloc(size * sizeof(xmlHashEntry)); + if (table->table) { + memset(table->table, 0, size * sizeof(xmlHashEntry)); +#ifdef HASH_RANDOMIZATION + table->random_seed = __xmlRandom(); +#endif + return(table); + } + xmlFree(table); + } + return(NULL); +} + +/** + * xmlHashCreateDict: + * @size: the size of the hash table + * @dict: a dictionary to use for the hash + * + * Create a new xmlHashTablePtr which will use @dict as the internal dictionary + * + * Returns the newly created object, or NULL if an error occured. + */ +xmlHashTablePtr +xmlHashCreateDict(int size, xmlDictPtr dict) { + xmlHashTablePtr table; + + table = xmlHashCreate(size); + if (table != NULL) { + table->dict = dict; + xmlDictReference(dict); + } + return(table); +} + +/** + * 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 (table->dict == NULL) { + 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; + } + } + xmlFree(table->table); + } + if (table->dict) + xmlDictFree(table->dict); + 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); + + /* + * If using a dict internalize if needed + */ + if (table->dict) { + if (!xmlDictOwns(table->dict, name)) { + name = xmlDictLookup(table->dict, name, -1); + if (name == NULL) + return(-1); + } + if ((name2 != NULL) && (!xmlDictOwns(table->dict, name2))) { + name2 = xmlDictLookup(table->dict, name2, -1); + if (name2 == NULL) + return(-1); + } + if ((name3 != NULL) && (!xmlDictOwns(table->dict, name3))) { + name3 = xmlDictLookup(table->dict, name3, -1); + if (name3 == NULL) + return(-1); + } + } + + /* + * Check for duplicate and insertion location. + */ + key = xmlHashComputeKey(table, name, name2, name3); + if (table->table[key].valid == 0) { + insert = NULL; + } else { + if (table->dict) { + for (insert = &(table->table[key]); insert->next != NULL; + insert = insert->next) { + if ((insert->name == name) && + (insert->name2 == name2) && + (insert->name3 == name3)) + return(-1); + len++; + } + if ((insert->name == name) && + (insert->name2 == name2) && + (insert->name3 == name3)) + return(-1); + } 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); + } + + if (table->dict != NULL) { + entry->name = (xmlChar *) name; + entry->name2 = (xmlChar *) name2; + entry->name3 = (xmlChar *) name3; + } else { + 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); + + /* + * If using a dict internalize if needed + */ + if (table->dict) { + if (!xmlDictOwns(table->dict, name)) { + name = xmlDictLookup(table->dict, name, -1); + if (name == NULL) + return(-1); + } + if ((name2 != NULL) && (!xmlDictOwns(table->dict, name2))) { + name2 = xmlDictLookup(table->dict, name2, -1); + if (name2 == NULL) + return(-1); + } + if ((name3 != NULL) && (!xmlDictOwns(table->dict, name3))) { + name3 = xmlDictLookup(table->dict, name3, -1); + if (name3 == NULL) + return(-1); + } + } + + /* + * Check for duplicate and insertion location. + */ + key = xmlHashComputeKey(table, name, name2, name3); + if (table->table[key].valid == 0) { + insert = NULL; + } else { + if (table ->dict) { + for (insert = &(table->table[key]); insert->next != NULL; + insert = insert->next) { + if ((insert->name == name) && + (insert->name2 == name2) && + (insert->name3 == name3)) { + if (f) + f(insert->payload, insert->name); + insert->payload = userdata; + return(0); + } + } + if ((insert->name == name) && + (insert->name2 == name2) && + (insert->name3 == name3)) { + if (f) + f(insert->payload, insert->name); + insert->payload = userdata; + return(0); + } + } 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); + } + + if (table->dict != NULL) { + entry->name = (xmlChar *) name; + entry->name2 = (xmlChar *) name2; + entry->name3 = (xmlChar *) name3; + } else { + 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); + if (table->dict) { + for (entry = &(table->table[key]); entry != NULL; entry = entry->next) { + if ((entry->name == name) && + (entry->name2 == name2) && + (entry->name3 == name3)) + return(entry->payload); + } + } + 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, nb; + 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; + nb = table->nbElems; + if ((f != NULL) && (iter->payload != NULL)) + f(iter->payload, data, iter->name, + iter->name2, iter->name3); + if (nb != table->nbElems) { + /* table was modified by the callback, be careful */ + if (iter == &(table->table[i])) { + if (table->table[i].valid == 0) + iter = NULL; + if (table->table[i].next != next) + iter = &(table->table[i]); + } else + iter = next; + } else + 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 (ret == NULL) + return(NULL); + + 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 (table->dict == 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); + } +} + +#define bottom_hash +#include "elfgcchack.h" 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/libxml/DOCBparser.h b/include/libxml/DOCBparser.h new file mode 100644 index 0000000..9394fa7 --- /dev/null +++ b/include/libxml/DOCBparser.h @@ -0,0 +1,96 @@ +/* + * 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 + +#ifdef LIBXML_DOCB_ENABLED + +#include +#include + +#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 /* LIBXML_DOCB_ENABLED */ + +#endif /* __DOCB_PARSER_H__ */ diff --git a/include/libxml/HTMLparser.h b/include/libxml/HTMLparser.h new file mode 100644 index 0000000..551186c --- /dev/null +++ b/include/libxml/HTMLparser.h @@ -0,0 +1,306 @@ +/* + * 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 +#include + +#ifdef LIBXML_HTML_ENABLED + +#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 + htmlNewParserCtxt(void); + +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_RECOVER = 1<<0, /* Relaxed parsing */ + HTML_PARSE_NODEFDTD = 1<<2, /* do not default a doctype if not found */ + HTML_PARSE_NOERROR = 1<<5, /* suppress error reports */ + HTML_PARSE_NOWARNING= 1<<6, /* suppress warning reports */ + HTML_PARSE_PEDANTIC = 1<<7, /* pedantic error reporting */ + HTML_PARSE_NOBLANKS = 1<<8, /* remove blank nodes */ + HTML_PARSE_NONET = 1<<11,/* Forbid network access */ + HTML_PARSE_NOIMPLIED= 1<<13,/* Do not add implied html/body... elements */ + HTML_PARSE_COMPACT = 1<<16,/* compact small text nodes */ + HTML_PARSE_IGNORE_ENC=1<<21 /* ignore internal document encoding hint */ +} 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 /* LIBXML_HTML_ENABLED */ +#endif /* __HTML_PARSER_H__ */ diff --git a/include/libxml/HTMLtree.h b/include/libxml/HTMLtree.h new file mode 100644 index 0000000..c0e1103 --- /dev/null +++ b/include/libxml/HTMLtree.h @@ -0,0 +1,147 @@ +/* + * 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 +#include +#include +#include + +#ifdef LIBXML_HTML_ENABLED + +#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 void XMLCALL + htmlDocDumpMemoryFormat (xmlDocPtr cur, + xmlChar **mem, + int *size, + int format); +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 /* LIBXML_HTML_ENABLED */ + +#endif /* __HTML_TREE_H__ */ + diff --git a/include/libxml/Makefile.am b/include/libxml/Makefile.am new file mode 100644 index 0000000..cf9297a --- /dev/null +++ b/include/libxml/Makefile.am @@ -0,0 +1,54 @@ +## 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 \ + xmlmodule.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 \ + schematron.h + +EXTRA_DIST = xmlversion.h.in diff --git a/include/libxml/SAX.h b/include/libxml/SAX.h new file mode 100644 index 0000000..20093ce --- /dev/null +++ b/include/libxml/SAX.h @@ -0,0 +1,173 @@ +/* + * 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 +#include +#include +#include +#include + +#ifdef LIBXML_LEGACY_ENABLED + +#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); + +#ifdef LIBXML_SAX1_ENABLED +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 +#endif /* LIBXML_SAX1_ENABLED */ + +#ifdef __cplusplus +} +#endif + +#endif /* LIBXML_LEGACY_ENABLED */ + +#endif /* __XML_SAX_H__ */ diff --git a/include/libxml/SAX2.h b/include/libxml/SAX2.h new file mode 100644 index 0000000..a55212e --- /dev/null +++ b/include/libxml/SAX2.h @@ -0,0 +1,178 @@ +/* + * 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 +#include +#include +#include +#include + +#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); +#if defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || \ + defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED) || \ + defined(LIBXML_LEGACY_ENABLED) +XMLPUBFUN void XMLCALL + xmlSAX2StartElement (void *ctx, + const xmlChar *fullname, + const xmlChar **atts); +XMLPUBFUN void XMLCALL + xmlSAX2EndElement (void *ctx, + const xmlChar *name); +#endif /* LIBXML_SAX1_ENABLED or LIBXML_HTML_ENABLED or LIBXML_LEGACY_ENABLED */ +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 + xmlSAX2Comment (void *ctx, + const xmlChar *value); +XMLPUBFUN void XMLCALL + xmlSAX2CDataBlock (void *ctx, + const xmlChar *value, + int len); + +#ifdef LIBXML_SAX1_ENABLED +XMLPUBFUN int XMLCALL + xmlSAXDefaultVersion (int version); +#endif /* LIBXML_SAX1_ENABLED */ + +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); +XMLPUBFUN void XMLCALL + htmlDefaultSAXHandlerInit (void); +#endif +#ifdef LIBXML_DOCB_ENABLED +XMLPUBFUN void XMLCALL + xmlSAX2InitDocbDefaultSAXHandler(xmlSAXHandler *hdlr); +XMLPUBFUN void XMLCALL + docbDefaultSAXHandlerInit (void); +#endif +XMLPUBFUN void XMLCALL + xmlDefaultSAXHandlerInit (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..b8971d9 --- /dev/null +++ b/include/libxml/c14n.h @@ -0,0 +1,126 @@ +/* + * 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 + */ +#ifndef __XML_C14N_H__ +#define __XML_C14N_H__ +#ifdef LIBXML_C14N_ENABLED +#ifdef LIBXML_OUTPUT_ENABLED + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +#include +#include +#include + +/* + * XML Canonicazation + * http://www.w3.org/TR/xml-c14n + * + * Exclusive XML Canonicazation + * http://www.w3.org/TR/xml-exc-c14n + * + * Canonical form of an XML document could be created if and only if + * a) default attributes (if any) are added to all nodes + * b) all character and parsed entity references are resolved + * In order to achive this in libxml2 the document MUST be loaded with + * following global setings: + * + * xmlLoadExtDtdDefaultValue = XML_DETECT_IDS | XML_COMPLETE_ATTRS; + * xmlSubstituteEntitiesDefault(1); + * + * or corresponding parser context setting: + * xmlParserCtxtPtr ctxt; + * + * ... + * ctxt->loadsubset = XML_DETECT_IDS | XML_COMPLETE_ATTRS; + * ctxt->replaceEntities = 1; + * ... + */ + +/* + * xmlC14NMode: + * + * Predefined values for C14N modes + * + */ +typedef enum { + XML_C14N_1_0 = 0, /* Origianal C14N 1.0 spec */ + XML_C14N_EXCLUSIVE_1_0 = 1, /* Exclusive C14N 1.0 spec */ + XML_C14N_1_1 = 2 /* C14N 1.1 spec */ +} xmlC14NMode; + +XMLPUBFUN int XMLCALL + xmlC14NDocSaveTo (xmlDocPtr doc, + xmlNodeSetPtr nodes, + int mode, /* a xmlC14NMode */ + xmlChar **inclusive_ns_prefixes, + int with_comments, + xmlOutputBufferPtr buf); + +XMLPUBFUN int XMLCALL + xmlC14NDocDumpMemory (xmlDocPtr doc, + xmlNodeSetPtr nodes, + int mode, /* a xmlC14NMode */ + xmlChar **inclusive_ns_prefixes, + int with_comments, + xmlChar **doc_txt_ptr); + +XMLPUBFUN int XMLCALL + xmlC14NDocSave (xmlDocPtr doc, + xmlNodeSetPtr nodes, + int mode, /* a xmlC14NMode */ + xmlChar **inclusive_ns_prefixes, + int with_comments, + const char* filename, + int compression); + + +/** + * This is the core C14N function + */ +/** + * xmlC14NIsVisibleCallback: + * @user_data: user data + * @node: the curent node + * @parent: the parent node + * + * Signature for a C14N callback on visible nodes + * + * Returns 1 if the node should be included + */ +typedef int (*xmlC14NIsVisibleCallback) (void* user_data, + xmlNodePtr node, + xmlNodePtr parent); + +XMLPUBFUN int XMLCALL + xmlC14NExecute (xmlDocPtr doc, + xmlC14NIsVisibleCallback is_visible_callback, + void* user_data, + int mode, /* a xmlC14NMode */ + xmlChar **inclusive_ns_prefixes, + int with_comments, + xmlOutputBufferPtr buf); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* LIBXML_OUTPUT_ENABLED */ +#endif /* LIBXML_C14N_ENABLED */ +#endif /* __XML_C14N_H__ */ + diff --git a/include/libxml/catalog.h b/include/libxml/catalog.h new file mode 100644 index 0000000..5a13f51 --- /dev/null +++ b/include/libxml/catalog.h @@ -0,0 +1,182 @@ +/** + * 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 + +#include +#include +#include + +#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..fb43016 --- /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: Mon Mar 27 11:09:48 2006 + * Sources: chvalid.def + * Author: William Brack + */ + +#ifndef __XML_CHVALID_H__ +#define __XML_CHVALID_H__ + +#include +#include + +#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; + const xmlChSRange *shortRange; /* points to an array of ranges */ + const xmlChLRange *longRange; +}; + +/** + * Range checking routine + */ +XMLPUBFUN int XMLCALL + xmlCharInRange(unsigned int val, const xmlChRangeGroup *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 const 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 const xmlChRangeGroup xmlIsCharGroup; + +/** + * xmlIsCombiningQ: + * @c: char to validate + * + * Automatically generated by genChRanges.py + */ +#define xmlIsCombiningQ(c) (((c) < 0x100) ? \ + 0 : \ + xmlCharInRange((c), &xmlIsCombiningGroup)) + +XMLPUBVAR const 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 const 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 const 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 const xmlChRangeGroup xmlIsIdeographicGroup; +XMLPUBVAR const 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..5b3be13 --- /dev/null +++ b/include/libxml/debugXML.h @@ -0,0 +1,217 @@ +/* + * 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 +#include +#include + +#ifdef LIBXML_DEBUG_ENABLED + +#include + +#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); + +/**************************************************************** + * * + * Checking routines * + * * + ****************************************************************/ + +XMLPUBFUN int XMLCALL + xmlDebugCheckDocument (FILE * output, + xmlDocPtr doc); + +/**************************************************************** + * * + * XML shell helpers * + * * + ****************************************************************/ + +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 * + * * + ****************************************************************/ + +#ifdef LIBXML_XPATH_ENABLED +/** + * xmlShellReadlineFunc: + * @prompt: a string prompt + * + * This is a generic signature for the XML shell input function. + * + * Returns a string which will be freed by the Shell. + */ +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 + 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 + xmlShellLoad (xmlShellCtxtPtr ctxt, + char *filename, + xmlNodePtr node, + xmlNodePtr node2); +#ifdef LIBXML_OUTPUT_ENABLED +XMLPUBFUN void XMLCALL + xmlShellPrintNode (xmlNodePtr node); +XMLPUBFUN int XMLCALL + xmlShellCat (xmlShellCtxtPtr ctxt, + char *arg, + xmlNodePtr node, + xmlNodePtr node2); +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 */ +#ifdef LIBXML_VALID_ENABLED +XMLPUBFUN int XMLCALL + xmlShellValidate (xmlShellCtxtPtr ctxt, + char *dtd, + xmlNodePtr node, + xmlNodePtr node2); +#endif /* LIBXML_VALID_ENABLED */ +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); + +#endif /* LIBXML_XPATH_ENABLED */ + +#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..b83db59 --- /dev/null +++ b/include/libxml/dict.h @@ -0,0 +1,86 @@ +/* + * Summary: string dictionary + * Description: dictionary of reusable strings, just used to avoid allocation + * and freeing operations. + * + * Copy: See Copyright for the status of this software. + * + * Author: Daniel Veillard + */ + +#ifndef __XML_DICT_H__ +#define __XML_DICT_H__ + +#ifdef __cplusplus +#define __XML_EXTERNC extern "C" +#else +#define __XML_EXTERNC +#endif + +/* + * The dictionary. + */ +__XML_EXTERNC typedef struct _xmlDict xmlDict; +__XML_EXTERNC typedef xmlDict *xmlDictPtr; + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Initializer + */ +XMLPUBFUN int XMLCALL xmlInitializeDict(void); + +/* + * Constructor and destructor. + */ +XMLPUBFUN xmlDictPtr XMLCALL + xmlDictCreate (void); +XMLPUBFUN size_t XMLCALL + xmlDictSetLimit (xmlDictPtr dict, + size_t limit); +XMLPUBFUN size_t XMLCALL + xmlDictGetUsage (xmlDictPtr dict); +XMLPUBFUN xmlDictPtr XMLCALL + xmlDictCreateSub(xmlDictPtr sub); +XMLPUBFUN int XMLCALL + xmlDictReference(xmlDictPtr dict); +XMLPUBFUN void XMLCALL + xmlDictFree (xmlDictPtr dict); + +/* + * Lookup of entry in the dictionary. + */ +XMLPUBFUN const xmlChar * XMLCALL + xmlDictLookup (xmlDictPtr dict, + const xmlChar *name, + int len); +XMLPUBFUN const xmlChar * XMLCALL + xmlDictExists (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); + +/* + * Cleanup function + */ +XMLPUBFUN void XMLCALL + xmlDictCleanup (void); + +#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..7967cc6 --- /dev/null +++ b/include/libxml/encoding.h @@ -0,0 +1,240 @@ +/* + * 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 + +#ifdef LIBXML_ICONV_ENABLED +#include +#endif +#ifdef LIBXML_ICU_ENABLED +#include +#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. + */ +#ifdef LIBXML_ICU_ENABLED +struct _uconv_t { + UConverter *uconv; /* for conversion between an encoding and UTF-16 */ + UConverter *utf8; /* for conversion between UTF-8 and UTF-16 */ +}; +typedef struct _uconv_t uconv_t; +#endif + +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 LIBXML_ICU_ENABLED + uconv_t *uconv_in; + uconv_t *uconv_out; +#endif /* LIBXML_ICU_ENABLED */ +}; + +#ifdef __cplusplus +} +#endif +#include +#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 + */ +#ifdef LIBXML_OUTPUT_ENABLED +XMLPUBFUN int XMLCALL + UTF8Toisolat1 (unsigned char *out, + int *outlen, + const unsigned char *in, + int *inlen); +#endif /* LIBXML_OUTPUT_ENABLED */ +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..47b4573 --- /dev/null +++ b/include/libxml/entities.h @@ -0,0 +1,151 @@ +/* + * 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 +#include + +#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 */ + int checked; /* was the entity content checked */ + /* this is also used to count entities + * references done from that entity + * and if it contains '<' */ +}; + +/* + * 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: + */ + +#ifdef LIBXML_LEGACY_ENABLED +XMLPUBFUN void XMLCALL + xmlInitializePredefinedEntities (void); +#endif /* LIBXML_LEGACY_ENABLED */ + +XMLPUBFUN xmlEntityPtr XMLCALL + xmlNewEntity (xmlDocPtr doc, + const xmlChar *name, + int type, + const xmlChar *ExternalID, + const xmlChar *SystemID, + const xmlChar *content); +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 (const xmlDoc *doc, + const xmlChar *name); +XMLPUBFUN xmlEntityPtr XMLCALL + xmlGetDtdEntity (xmlDocPtr doc, + const xmlChar *name); +XMLPUBFUN xmlEntityPtr XMLCALL + xmlGetParameterEntity (xmlDocPtr doc, + const xmlChar *name); +#ifdef LIBXML_LEGACY_ENABLED +XMLPUBFUN const xmlChar * XMLCALL + xmlEncodeEntities (xmlDocPtr doc, + const xmlChar *input); +#endif /* LIBXML_LEGACY_ENABLED */ +XMLPUBFUN xmlChar * XMLCALL + xmlEncodeEntitiesReentrant(xmlDocPtr doc, + const xmlChar *input); +XMLPUBFUN xmlChar * XMLCALL + xmlEncodeSpecialChars (const xmlDoc *doc, + const xmlChar *input); +XMLPUBFUN xmlEntitiesTablePtr XMLCALL + xmlCreateEntitiesTable (void); +#ifdef LIBXML_TREE_ENABLED +XMLPUBFUN xmlEntitiesTablePtr XMLCALL + xmlCopyEntitiesTable (xmlEntitiesTablePtr table); +#endif /* LIBXML_TREE_ENABLED */ +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 */ +#ifdef LIBXML_LEGACY_ENABLED +XMLPUBFUN void XMLCALL + xmlCleanupPredefinedEntities(void); +#endif /* LIBXML_LEGACY_ENABLED */ + + +#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..a9305aa --- /dev/null +++ b/include/libxml/globals.h @@ -0,0 +1,509 @@ +/* + * 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 , Daniel Veillard + */ + +#ifndef __XML_GLOBALS_H +#define __XML_GLOBALS_H + +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +XMLPUBFUN void XMLCALL xmlInitGlobals(void); +XMLPUBFUN void XMLCALL xmlCleanupGlobals(void); + +/** + * xmlParserInputBufferCreateFilenameFunc: + * @URI: the URI to read from + * @enc: the requested source encoding + * + * Signature for the function doing the lookup for a suitable input method + * corresponding to an URI. + * + * Returns the new xmlParserInputBufferPtr in case of success or NULL if no + * method was found. + */ +typedef xmlParserInputBufferPtr (*xmlParserInputBufferCreateFilenameFunc) (const char *URI, + xmlCharEncoding enc); + + +/** + * xmlOutputBufferCreateFilenameFunc: + * @URI: the URI to write to + * @enc: the requested target encoding + * + * Signature for the function doing the lookup for a suitable output method + * corresponding to an URI. + * + * Returns the new xmlOutputBufferPtr in case of success or NULL if no + * method was found. + */ +typedef xmlOutputBufferPtr (*xmlOutputBufferCreateFilenameFunc) (const char *URI, + xmlCharEncodingHandlerPtr encoder, + int compression); + +XMLPUBFUN xmlParserInputBufferCreateFilenameFunc +XMLCALL xmlParserInputBufferCreateFilenameDefault (xmlParserInputBufferCreateFilenameFunc func); +XMLPUBFUN xmlOutputBufferCreateFilenameFunc +XMLCALL xmlOutputBufferCreateFilenameDefault (xmlOutputBufferCreateFilenameFunc func); + +/* + * 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 xmlStructuredErrorContext +#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 +#undef xmlParserInputBufferCreateFilenameValue +#undef xmlOutputBufferCreateFilenameValue + +/** + * xmlRegisterNodeFunc: + * @node: the current node + * + * Signature for the registration callback of a created node + */ +typedef void (*xmlRegisterNodeFunc) (xmlNodePtr node); +/** + * xmlDeregisterNodeFunc: + * @node: the current node + * + * Signature for the deregistration callback of a discarded 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; + + xmlParserInputBufferCreateFilenameFunc xmlParserInputBufferCreateFilenameValue; + xmlOutputBufferCreateFilenameFunc xmlOutputBufferCreateFilenameValue; + + void *xmlStructuredErrorContext; +}; + +#ifdef __cplusplus +} +#endif +#include +#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); + +XMLPUBFUN xmlOutputBufferCreateFilenameFunc XMLCALL + xmlThrDefOutputBufferCreateFilenameDefault(xmlOutputBufferCreateFilenameFunc func); +XMLPUBFUN xmlParserInputBufferCreateFilenameFunc XMLCALL + xmlThrDefParserInputBufferCreateFilenameDefault( + xmlParserInputBufferCreateFilenameFunc 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 void * * XMLCALL __xmlStructuredErrorContext(void); +#ifdef LIBXML_THREAD_ENABLED +#define xmlStructuredErrorContext \ +(*(__xmlStructuredErrorContext())) +#else +XMLPUBVAR void * xmlStructuredErrorContext; +#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 + +XMLPUBFUN xmlParserInputBufferCreateFilenameFunc * XMLCALL \ + __xmlParserInputBufferCreateFilenameValue(void); +#ifdef LIBXML_THREAD_ENABLED +#define xmlParserInputBufferCreateFilenameValue \ +(*(__xmlParserInputBufferCreateFilenameValue())) +#else +XMLPUBVAR xmlParserInputBufferCreateFilenameFunc xmlParserInputBufferCreateFilenameValue; +#endif + +XMLPUBFUN xmlOutputBufferCreateFilenameFunc * XMLCALL __xmlOutputBufferCreateFilenameValue(void); +#ifdef LIBXML_THREAD_ENABLED +#define xmlOutputBufferCreateFilenameValue \ +(*(__xmlOutputBufferCreateFilenameValue())) +#else +XMLPUBVAR xmlOutputBufferCreateFilenameFunc xmlOutputBufferCreateFilenameValue; +#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..dc8ab7e --- /dev/null +++ b/include/libxml/hash.h @@ -0,0 +1,233 @@ +/* + * Summary: Chained hash tables + * Description: This module implements the hash table support used in + * various places in the library. + * + * Copy: See Copyright for the status of this software. + * + * Author: Bjorn Reese + */ + +#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 +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Recent version of gcc produce a warning when a function pointer is assigned + * to an object pointer, or vice versa. The following macro is a dirty hack + * to allow suppression of the warning. If your architecture has function + * pointers which are a different size than a void pointer, there may be some + * serious trouble within the library. + */ +/** + * XML_CAST_FPTR: + * @fptr: pointer to a function + * + * Macro to do a casting from an object pointer to a + * function pointer without encountering a warning from + * gcc + * + * #define XML_CAST_FPTR(fptr) (*(void **)(&fptr)) + * This macro violated ISO C aliasing rules (gcc4 on s390 broke) + * so it is disabled now + */ + +#define XML_CAST_FPTR(fptr) fptr + + +/* + * 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 xmlHashTablePtr XMLCALL + xmlHashCreateDict(int size, + xmlDictPtr dict); +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..0504e0c --- /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 + */ + +#ifndef __XML_LINK_INCLUDE__ +#define __XML_LINK_INCLUDE__ + +#include + +#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..abb4bf7 --- /dev/null +++ b/include/libxml/nanoftp.h @@ -0,0 +1,163 @@ +/* + * 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 + +#ifdef LIBXML_FTP_ENABLED + +/* Needed for portability to Windows 64 bits */ +#if defined(__MINGW32__) || defined(_WIN32_WCE) +#include +#else +/** + * SOCKET: + * + * macro used to provide portability of code to windows sockets + */ +#define SOCKET int +/** + * INVALID_SOCKET: + * + * macro used to provide portability of code to windows sockets + * the value to be used when the socket is not valid + */ +#undef INVALID_SOCKET +#define INVALID_SOCKET (-1) +#endif + +#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, + const char *directory); +XMLPUBFUN int XMLCALL + xmlNanoFTPDele (void *ctx, + const char *file); + +XMLPUBFUN SOCKET XMLCALL + xmlNanoFTPGetConnection (void *ctx); +XMLPUBFUN int XMLCALL + xmlNanoFTPCloseConnection(void *ctx); +XMLPUBFUN int XMLCALL + xmlNanoFTPList (void *ctx, + ftpListCallback callback, + void *userData, + const char *filename); +XMLPUBFUN SOCKET 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 +#endif /* LIBXML_FTP_ENABLED */ +#endif /* __NANO_FTP_H__ */ diff --git a/include/libxml/nanohttp.h b/include/libxml/nanohttp.h new file mode 100644 index 0000000..22b8fb4 --- /dev/null +++ b/include/libxml/nanohttp.h @@ -0,0 +1,81 @@ +/* + * 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 + +#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 int XMLCALL + xmlNanoHTTPContentLength( 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..47fbec0 --- /dev/null +++ b/include/libxml/parser.h @@ -0,0 +1,1241 @@ +/* + * 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 + +#include +#include +#include +#include +#include +#include +#include +#include + +#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 + +/** + * xmlParserMode: + * + * A parser can operate in various modes + */ +typedef enum { + XML_PARSE_UNKNOWN = 0, + XML_PARSE_DOM = 1, + XML_PARSE_SAX = 2, + XML_PARSE_PUSH_DOM = 3, + XML_PARSE_PUSH_SAX = 4, + XML_PARSE_READER = 5 +} xmlParserMode; + +/** + * 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 + * 3 is HTML after + * 10 is HTML after + */ + + /* 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; /* dictionary 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; + xmlParserMode parseMode; /* the parser mode */ + unsigned long nbentities; /* number of entities references */ + unsigned long sizeentities; /* size of parsed entities */ + + /* for use by HTML non-recursive parser */ + xmlParserNodeInfo *nodeInfo; /* Current NodeInfo */ + int nodeInfoNr; /* Depth of the parsing stack */ + int nodeInfoMax; /* Max depth of the parsing stack */ + xmlParserNodeInfo *nodeInfoTab; /* array of nodeInfos */ + + int input_id; /* we need to label inputs */ + unsigned long sizeentcopy; /* volume of entity copy */ +}; + +/** + * 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 (XMLCDECL *warningSAXFunc) (void *ctx, + const char *msg, ...) LIBXML_ATTR_FORMAT(2,3); +/** + * 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 (XMLCDECL *errorSAXFunc) (void *ctx, + const char *msg, ...) LIBXML_ATTR_FORMAT(2,3); +/** + * 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 (XMLCDECL *fatalErrorSAXFunc) (void *ctx, + const char *msg, ...) LIBXML_ATTR_FORMAT(2,3); +/** + * 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 +#include +#include + +#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 + */ +#ifdef LIBXML_SAX1_ENABLED +XMLPUBFUN xmlDocPtr XMLCALL + xmlParseDoc (const xmlChar *cur); +XMLPUBFUN xmlDocPtr XMLCALL + xmlParseFile (const char *filename); +XMLPUBFUN xmlDocPtr XMLCALL + xmlParseMemory (const char *buffer, + int size); +#endif /* LIBXML_SAX1_ENABLED */ +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); + +#ifdef LIBXML_SAX1_ENABLED +/* + * Recovery mode + */ +XMLPUBFUN xmlDocPtr XMLCALL + xmlRecoverDoc (const xmlChar *cur); +XMLPUBFUN xmlDocPtr XMLCALL + xmlRecoverMemory (const char *buffer, + int size); +XMLPUBFUN xmlDocPtr XMLCALL + xmlRecoverFile (const char *filename); +#endif /* LIBXML_SAX1_ENABLED */ + +/* + * Less common routines and SAX interfaces + */ +XMLPUBFUN int XMLCALL + xmlParseDocument (xmlParserCtxtPtr ctxt); +XMLPUBFUN int XMLCALL + xmlParseExtParsedEnt (xmlParserCtxtPtr ctxt); +#ifdef LIBXML_SAX1_ENABLED +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 + xmlSAXParseDoc (xmlSAXHandlerPtr sax, + const xmlChar *cur, + int recovery); +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); +#endif /* LIBXML_SAX1_ENABLED */ + +#ifdef LIBXML_VALID_ENABLED +XMLPUBFUN xmlDtdPtr XMLCALL + xmlSAXParseDTD (xmlSAXHandlerPtr sax, + const xmlChar *ExternalID, + const xmlChar *SystemID); +XMLPUBFUN xmlDtdPtr XMLCALL + xmlParseDTD (const xmlChar *ExternalID, + const xmlChar *SystemID); +XMLPUBFUN xmlDtdPtr XMLCALL + xmlIOParseDTD (xmlSAXHandlerPtr sax, + xmlParserInputBufferPtr input, + xmlCharEncoding enc); +#endif /* LIBXML_VALID_ENABLE */ +#ifdef LIBXML_SAX1_ENABLED +XMLPUBFUN int XMLCALL + xmlParseBalancedChunkMemory(xmlDocPtr doc, + xmlSAXHandlerPtr sax, + void *user_data, + int depth, + const xmlChar *string, + xmlNodePtr *lst); +#endif /* LIBXML_SAX1_ENABLED */ +XMLPUBFUN xmlParserErrors XMLCALL + xmlParseInNodeContext (xmlNodePtr node, + const char *data, + int datalen, + int options, + xmlNodePtr *lst); +#ifdef LIBXML_SAX1_ENABLED +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); +#endif /* LIBXML_SAX1_ENABLED */ +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); +#ifdef LIBXML_SAX1_ENABLED +XMLPUBFUN void XMLCALL + xmlSetupParserForBuffer (xmlParserCtxtPtr ctxt, + const xmlChar* buffer, + const char *filename); +#endif /* LIBXML_SAX1_ENABLED */ +XMLPUBFUN xmlParserCtxtPtr XMLCALL + xmlCreateDocParserCtxt (const xmlChar *cur); + +#ifdef LIBXML_LEGACY_ENABLED +/* + * 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); +#endif /* LIBXML_LEGACY_ENABLED */ + +#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 dictionary */ + XML_PARSE_NSCLEAN = 1<<13,/* remove redundant namespaces declarations */ + XML_PARSE_NOCDATA = 1<<14,/* merge CDATA as text nodes */ + XML_PARSE_NOXINCNODE= 1<<15,/* do not generate XINCLUDE START/END nodes */ + XML_PARSE_COMPACT = 1<<16,/* compact small text nodes; no modification of + the tree allowed afterwards (will possibly + crash if you try to modify the tree) */ + XML_PARSE_OLD10 = 1<<17,/* parse using XML-1.0 before update 5 */ + XML_PARSE_NOBASEFIX = 1<<18,/* do not fixup XINCLUDE xml:base uris */ + XML_PARSE_HUGE = 1<<19,/* relax any hardcoded limit from the parser */ + XML_PARSE_OLDSAX = 1<<20,/* parse using SAX2 interface before 2.7.0 */ + XML_PARSE_IGNORE_ENC= 1<<21,/* ignore internal document encoding hint */ + XML_PARSE_BIG_LINES = 1<<22 /* Store big lines numbers in text PSVI field */ +} 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); + +/* + * Library wide options + */ +/** + * xmlFeature: + * + * Used to examine the existance of features that can be enabled + * or disabled at compile-time. + * They used to be called XML_FEATURE_xxx but this clashed with Expat + */ +typedef enum { + XML_WITH_THREAD = 1, + XML_WITH_TREE = 2, + XML_WITH_OUTPUT = 3, + XML_WITH_PUSH = 4, + XML_WITH_READER = 5, + XML_WITH_PATTERN = 6, + XML_WITH_WRITER = 7, + XML_WITH_SAX1 = 8, + XML_WITH_FTP = 9, + XML_WITH_HTTP = 10, + XML_WITH_VALID = 11, + XML_WITH_HTML = 12, + XML_WITH_LEGACY = 13, + XML_WITH_C14N = 14, + XML_WITH_CATALOG = 15, + XML_WITH_XPATH = 16, + XML_WITH_XPTR = 17, + XML_WITH_XINCLUDE = 18, + XML_WITH_ICONV = 19, + XML_WITH_ISO8859X = 20, + XML_WITH_UNICODE = 21, + XML_WITH_REGEXP = 22, + XML_WITH_AUTOMATA = 23, + XML_WITH_EXPR = 24, + XML_WITH_SCHEMAS = 25, + XML_WITH_SCHEMATRON = 26, + XML_WITH_MODULES = 27, + XML_WITH_DEBUG = 28, + XML_WITH_DEBUG_MEM = 29, + XML_WITH_DEBUG_RUN = 30, + XML_WITH_ZLIB = 31, + XML_WITH_ICU = 32, + XML_WITH_LZMA = 33, + XML_WITH_NONE = 99999 /* just to be sure of allocation size */ +} xmlFeature; + +XMLPUBFUN int XMLCALL + xmlHasFeature (xmlFeature feature); + +#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..f30fc68 --- /dev/null +++ b/include/libxml/parserInternals.h @@ -0,0 +1,644 @@ +/* + * Summary: internals routines and limits exported by the parser. + * Description: this module exports a number of internal parsing routines + * they are not really all intended for applications but + * can prove useful doing low level processing. + * + * Copy: See Copyright for the status of this software. + * + * Author: Daniel Veillard + */ + +#ifndef __XML_PARSER_INTERNALS_H__ +#define __XML_PARSER_INTERNALS_H__ + +#include +#include +#include +#include + +#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, use XML_PARSE_HUGE option to override it. + */ +XMLPUBVAR unsigned int xmlParserMaxDepth; + +/** + * XML_MAX_TEXT_LENGTH: + * + * Maximum size allowed for a single text node when building a tree. + * This is not a limitation of the parser but a safety boundary feature, + * use XML_PARSE_HUGE option to override it. + * Introduced in 2.9.0 + */ +#define XML_MAX_TEXT_LENGTH 10000000 + +/** + * XML_MAX_NAME_LENGTH: + * + * Maximum size allowed for a markup identitier + * This is not a limitation of the parser but a safety boundary feature, + * use XML_PARSE_HUGE option to override it. + * Note that with the use of parsing dictionaries overriding the limit + * may result in more runtime memory usage in face of "unfriendly' content + * Introduced in 2.9.0 + */ +#define XML_MAX_NAME_LENGTH 50000 + +/** + * XML_MAX_DICTIONARY_LIMIT: + * + * Maximum size allowed by the parser for a dictionary by default + * This is not a limitation of the parser but a safety boundary feature, + * use XML_PARSE_HUGE option to override it. + * Introduced in 2.9.0 + */ +#define XML_MAX_DICTIONARY_LIMIT 10000000 + +/** + * XML_MAX_LOOKUP_LIMIT: + * + * Maximum size allowed by the parser for ahead lookup + * This is an upper boundary enforced by the parser to avoid bad + * behaviour on "unfriendly' content + * Introduced in 2.9.0 + */ +#define XML_MAX_LOOKUP_LIMIT 10000000 + +/** + * XML_MAX_NAMELEN: + * + * Identifiers can be longer, but this will be more costly + * 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_ASCII_LETTER: + * @c: an xmlChar value + * + * Macro to check [a-zA-Z] + * + */ +#define IS_ASCII_LETTER(c) (((0x41 <= (c)) && ((c) <= 0x5a)) || \ + ((0x61 <= (c)) && ((c) <= 0x7a))) + +/** + * IS_ASCII_DIGIT: + * @c: an xmlChar value + * + * Macro to check [0-9] + * + */ +#define IS_ASCII_DIGIT(c) ((0x30 <= (c)) && ((c) <= 0x39)) + +/** + * 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 xmlerr, + const char *msg, + const xmlChar * str1, + const xmlChar * str2) LIBXML_ATTR_FORMAT(3,0); +#endif + +/** + * Input Streams. + */ +XMLPUBFUN xmlParserInputPtr XMLCALL + xmlNewStringInputStream (xmlParserCtxtPtr ctxt, + const xmlChar *buffer); +XMLPUBFUN xmlParserInputPtr XMLCALL + xmlNewEntityInputStream (xmlParserCtxtPtr ctxt, + xmlEntityPtr entity); +XMLPUBFUN int 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); + +/** + * Generic production rules. + */ +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); +#ifdef LIBXML_SAX1_ENABLED +XMLPUBFUN const xmlChar * XMLCALL + xmlParseAttribute (xmlParserCtxtPtr ctxt, + xmlChar **value); +XMLPUBFUN const xmlChar * XMLCALL + xmlParseStartTag (xmlParserCtxtPtr ctxt); +XMLPUBFUN void XMLCALL + xmlParseEndTag (xmlParserCtxtPtr ctxt); +#endif /* LIBXML_SAX1_ENABLED */ +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 + 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 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. + */ +#ifdef LIBXML_LEGACY_ENABLED +/** + * xmlEntityReferenceFunc: + * @ent: the entity + * @firstNode: the fist node in the chunk + * @lastNode: the last nod in the chunk + * + * Callback function used when one needs to be able to track back the + * provenance of a chunk of nodes inherited from an entity replacement. + */ +typedef void (*xmlEntityReferenceFunc) (xmlEntityPtr ent, + xmlNodePtr firstNode, + xmlNodePtr lastNode); + +XMLPUBFUN void XMLCALL xmlSetEntityReferenceFunc (xmlEntityReferenceFunc func); + +XMLPUBFUN xmlChar * XMLCALL + xmlParseQuotedString (xmlParserCtxtPtr ctxt); +XMLPUBFUN void XMLCALL + xmlParseNamespace (xmlParserCtxtPtr ctxt); +XMLPUBFUN xmlChar * XMLCALL + xmlNamespaceParseNSDef (xmlParserCtxtPtr ctxt); +XMLPUBFUN xmlChar * XMLCALL + xmlScanName (xmlParserCtxtPtr ctxt); +XMLPUBFUN xmlChar * XMLCALL + xmlNamespaceParseNCName (xmlParserCtxtPtr ctxt); +XMLPUBFUN void XMLCALL xmlParserHandleReference(xmlParserCtxtPtr ctxt); +XMLPUBFUN xmlChar * XMLCALL + xmlNamespaceParseQName (xmlParserCtxtPtr ctxt, + xmlChar **prefix); +/** + * Entities + */ +XMLPUBFUN xmlChar * XMLCALL + xmlDecodeEntities (xmlParserCtxtPtr ctxt, + int len, + int what, + xmlChar end, + xmlChar end2, + xmlChar end3); +XMLPUBFUN void XMLCALL + xmlHandleEntity (xmlParserCtxtPtr ctxt, + xmlEntityPtr entity); + +#endif /* LIBXML_LEGACY_ENABLED */ + +#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..97d2cd2 --- /dev/null +++ b/include/libxml/pattern.h @@ -0,0 +1,100 @@ +/* + * 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 +#include +#include + +#ifdef LIBXML_PATTERN_ENABLED + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * xmlPattern: + * + * A compiled (XPath based) pattern to select nodes + */ +typedef struct _xmlPattern xmlPattern; +typedef xmlPattern *xmlPatternPtr; + +/** + * xmlPatternFlags: + * + * This is the set of options affecting the behaviour of pattern + * matching with this module + * + */ +typedef enum { + XML_PATTERN_DEFAULT = 0, /* simple pattern match */ + XML_PATTERN_XPATH = 1<<0, /* standard XPath pattern */ + XML_PATTERN_XSSEL = 1<<1, /* XPath subset for schema selector */ + XML_PATTERN_XSFIELD = 1<<2 /* XPath subset for schema field */ +} xmlPatternFlags; + +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); + +/* streaming interfaces */ +typedef struct _xmlStreamCtxt xmlStreamCtxt; +typedef xmlStreamCtxt *xmlStreamCtxtPtr; + +XMLPUBFUN int XMLCALL + xmlPatternStreamable (xmlPatternPtr comp); +XMLPUBFUN int XMLCALL + xmlPatternMaxDepth (xmlPatternPtr comp); +XMLPUBFUN int XMLCALL + xmlPatternMinDepth (xmlPatternPtr comp); +XMLPUBFUN int XMLCALL + xmlPatternFromRoot (xmlPatternPtr comp); +XMLPUBFUN xmlStreamCtxtPtr XMLCALL + xmlPatternGetStreamCtxt (xmlPatternPtr comp); +XMLPUBFUN void XMLCALL + xmlFreeStreamCtxt (xmlStreamCtxtPtr stream); +XMLPUBFUN int XMLCALL + xmlStreamPushNode (xmlStreamCtxtPtr stream, + const xmlChar *name, + const xmlChar *ns, + int nodeType); +XMLPUBFUN int XMLCALL + xmlStreamPush (xmlStreamCtxtPtr stream, + const xmlChar *name, + const xmlChar *ns); +XMLPUBFUN int XMLCALL + xmlStreamPushAttr (xmlStreamCtxtPtr stream, + const xmlChar *name, + const xmlChar *ns); +XMLPUBFUN int XMLCALL + xmlStreamPop (xmlStreamCtxtPtr stream); +XMLPUBFUN int XMLCALL + xmlStreamWantsAnyNode (xmlStreamCtxtPtr stream); +#ifdef __cplusplus +} +#endif + +#endif /* LIBXML_PATTERN_ENABLED */ + +#endif /* __XML_PATTERN_H__ */ diff --git a/include/libxml/relaxng.h b/include/libxml/relaxng.h new file mode 100644 index 0000000..f269c9e --- /dev/null +++ b/include/libxml/relaxng.h @@ -0,0 +1,217 @@ +/* + * 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 +#include +#include + +#ifdef LIBXML_SCHEMAS_ENABLED + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct _xmlRelaxNG xmlRelaxNG; +typedef xmlRelaxNG *xmlRelaxNGPtr; + + +/** + * xmlRelaxNGValidityErrorFunc: + * @ctx: the validation context + * @msg: the message + * @...: extra arguments + * + * Signature of an error callback from a Relax-NG validation + */ +typedef void (XMLCDECL *xmlRelaxNGValidityErrorFunc) (void *ctx, + const char *msg, + ...) LIBXML_ATTR_FORMAT(2,3); + +/** + * xmlRelaxNGValidityWarningFunc: + * @ctx: the validation context + * @msg: the message + * @...: extra arguments + * + * Signature of a warning callback from a Relax-NG validation + */ +typedef void (XMLCDECL *xmlRelaxNGValidityWarningFunc) (void *ctx, + const char *msg, + ...) LIBXML_ATTR_FORMAT(2,3); + +/** + * A schemas validation context + */ +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; + +XMLPUBFUN int XMLCALL + xmlRelaxNGInitTypes (void); +XMLPUBFUN void XMLCALL + xmlRelaxNGCleanupTypes (void); + +/* + * 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 void XMLCALL + xmlRelaxNGSetParserStructuredErrors( + xmlRelaxNGParserCtxtPtr ctxt, + xmlStructuredErrorFunc serror, + 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 void XMLCALL + xmlRelaxNGSetValidStructuredErrors(xmlRelaxNGValidCtxtPtr ctxt, + xmlStructuredErrorFunc serror, void *ctx); +XMLPUBFUN xmlRelaxNGValidCtxtPtr XMLCALL + xmlRelaxNGNewValidCtxt (xmlRelaxNGPtr schema); +XMLPUBFUN void XMLCALL + xmlRelaxNGFreeValidCtxt (xmlRelaxNGValidCtxtPtr ctxt); +XMLPUBFUN int XMLCALL + xmlRelaxNGValidateDoc (xmlRelaxNGValidCtxtPtr ctxt, + xmlDocPtr doc); +/* + * 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 /* LIBXML_SCHEMAS_ENABLED */ + +#endif /* __XML_RELAX_NG__ */ diff --git a/include/libxml/schemasInternals.h b/include/libxml/schemasInternals.h new file mode 100644 index 0000000..c7cf552 --- /dev/null +++ b/include/libxml/schemasInternals.h @@ -0,0 +1,958 @@ +/* + * Summary: internal interfaces for XML Schemas + * Description: internal interfaces for the XML Schemas handling + * and schema validity checking + * The Schemas development is a Work In Progress. + * Some of those interfaces are not garanteed to be API or ABI stable ! + * + * Copy: See Copyright for the status of this software. + * + * Author: Daniel Veillard + */ + + +#ifndef __XML_SCHEMA_INTERNALS_H__ +#define __XML_SCHEMA_INTERNALS_H__ + +#include + +#ifdef LIBXML_SCHEMAS_ENABLED + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + XML_SCHEMAS_UNKNOWN = 0, + XML_SCHEMAS_STRING = 1, + XML_SCHEMAS_NORMSTRING = 2, + XML_SCHEMAS_DECIMAL = 3, + XML_SCHEMAS_TIME = 4, + XML_SCHEMAS_GDAY = 5, + XML_SCHEMAS_GMONTH = 6, + XML_SCHEMAS_GMONTHDAY = 7, + XML_SCHEMAS_GYEAR = 8, + XML_SCHEMAS_GYEARMONTH = 9, + XML_SCHEMAS_DATE = 10, + XML_SCHEMAS_DATETIME = 11, + XML_SCHEMAS_DURATION = 12, + XML_SCHEMAS_FLOAT = 13, + XML_SCHEMAS_DOUBLE = 14, + XML_SCHEMAS_BOOLEAN = 15, + XML_SCHEMAS_TOKEN = 16, + XML_SCHEMAS_LANGUAGE = 17, + XML_SCHEMAS_NMTOKEN = 18, + XML_SCHEMAS_NMTOKENS = 19, + XML_SCHEMAS_NAME = 20, + XML_SCHEMAS_QNAME = 21, + XML_SCHEMAS_NCNAME = 22, + XML_SCHEMAS_ID = 23, + XML_SCHEMAS_IDREF = 24, + XML_SCHEMAS_IDREFS = 25, + XML_SCHEMAS_ENTITY = 26, + XML_SCHEMAS_ENTITIES = 27, + XML_SCHEMAS_NOTATION = 28, + XML_SCHEMAS_ANYURI = 29, + XML_SCHEMAS_INTEGER = 30, + XML_SCHEMAS_NPINTEGER = 31, + XML_SCHEMAS_NINTEGER = 32, + XML_SCHEMAS_NNINTEGER = 33, + XML_SCHEMAS_PINTEGER = 34, + XML_SCHEMAS_INT = 35, + XML_SCHEMAS_UINT = 36, + XML_SCHEMAS_LONG = 37, + XML_SCHEMAS_ULONG = 38, + XML_SCHEMAS_SHORT = 39, + XML_SCHEMAS_USHORT = 40, + XML_SCHEMAS_BYTE = 41, + XML_SCHEMAS_UBYTE = 42, + XML_SCHEMAS_HEXBINARY = 43, + XML_SCHEMAS_BASE64BINARY = 44, + XML_SCHEMAS_ANYTYPE = 45, + XML_SCHEMAS_ANYSIMPLETYPE = 46 +} xmlSchemaValType; + +/* + * XML Schemas defines multiple type of types. + */ +typedef enum { + XML_SCHEMA_TYPE_BASIC = 1, /* A built-in datatype */ + XML_SCHEMA_TYPE_ANY, + XML_SCHEMA_TYPE_FACET, + XML_SCHEMA_TYPE_SIMPLE, + XML_SCHEMA_TYPE_COMPLEX, + XML_SCHEMA_TYPE_SEQUENCE = 6, + 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_TYPE_ANY_ATTRIBUTE, + XML_SCHEMA_TYPE_IDC_UNIQUE, + XML_SCHEMA_TYPE_IDC_KEY, + XML_SCHEMA_TYPE_IDC_KEYREF, + XML_SCHEMA_TYPE_PARTICLE = 25, + XML_SCHEMA_TYPE_ATTRIBUTE_USE, + XML_SCHEMA_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, + XML_SCHEMA_EXTRA_QNAMEREF = 2000, + XML_SCHEMA_EXTRA_ATTR_USE_PROHIB +} 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, /* Obsolete */ + 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 + * Obsolete, not used anymore. + */ +#define XML_SCHEMAS_ANYATTR_SKIP 1 +/** + * XML_SCHEMAS_ANYATTR_LAX: + * + * Ignore validation non definition on attributes + * Obsolete, not used anymore. + */ +#define XML_SCHEMAS_ANYATTR_LAX 2 +/** + * XML_SCHEMAS_ANYATTR_STRICT: + * + * Apply strict validation rules on attributes + * Obsolete, not used anymore. + */ +#define XML_SCHEMAS_ANYATTR_STRICT 3 +/** + * XML_SCHEMAS_ANY_SKIP: + * + * Skip unknown attribute from validation + */ +#define XML_SCHEMAS_ANY_SKIP 1 +/** + * XML_SCHEMAS_ANY_LAX: + * + * Used by wildcards. + * Validate if type found, don't worry if not found + */ +#define XML_SCHEMAS_ANY_LAX 2 +/** + * XML_SCHEMAS_ANY_STRICT: + * + * Used by wildcards. + * Apply strict validation rules + */ +#define XML_SCHEMAS_ANY_STRICT 3 +/** + * XML_SCHEMAS_ATTR_USE_PROHIBITED: + * + * Used by wildcards. + * The attribute is prohibited. + */ +#define XML_SCHEMAS_ATTR_USE_PROHIBITED 0 +/** + * XML_SCHEMAS_ATTR_USE_REQUIRED: + * + * The attribute is required. + */ +#define XML_SCHEMAS_ATTR_USE_REQUIRED 1 +/** + * XML_SCHEMAS_ATTR_USE_OPTIONAL: + * + * The attribute is optional. + */ +#define XML_SCHEMAS_ATTR_USE_OPTIONAL 2 +/** + * XML_SCHEMAS_ATTR_GLOBAL: + * + * allow elements in no namespace + */ +#define XML_SCHEMAS_ATTR_GLOBAL 1 << 0 +/** + * XML_SCHEMAS_ATTR_NSDEFAULT: + * + * allow elements in no namespace + */ +#define XML_SCHEMAS_ATTR_NSDEFAULT 1 << 7 +/** + * XML_SCHEMAS_ATTR_INTERNAL_RESOLVED: + * + * this is set when the "type" and "ref" references + * have been resolved. + */ +#define XML_SCHEMAS_ATTR_INTERNAL_RESOLVED 1 << 8 +/** + * XML_SCHEMAS_ATTR_FIXED: + * + * the attribute has a fixed value + */ +#define XML_SCHEMAS_ATTR_FIXED 1 << 9 + +/** + * xmlSchemaAttribute: + * An attribute definition. + */ + +typedef struct _xmlSchemaAttribute xmlSchemaAttribute; +typedef xmlSchemaAttribute *xmlSchemaAttributePtr; +struct _xmlSchemaAttribute { + xmlSchemaTypeType type; + struct _xmlSchemaAttribute *next; /* the next attribute (not used?) */ + const xmlChar *name; /* the name of the declaration */ + const xmlChar *id; /* Deprecated; not used */ + const xmlChar *ref; /* Deprecated; not used */ + const xmlChar *refNs; /* Deprecated; not used */ + const xmlChar *typeName; /* the local name of the type definition */ + const xmlChar *typeNs; /* the ns URI of the type definition */ + xmlSchemaAnnotPtr annot; + + xmlSchemaTypePtr base; /* Deprecated; not used */ + int occurs; /* Deprecated; not used */ + const xmlChar *defValue; /* The initial value of the value constraint */ + xmlSchemaTypePtr subtypes; /* the type definition */ + xmlNodePtr node; + const xmlChar *targetNamespace; + int flags; + const xmlChar *refPrefix; /* Deprecated; not used */ + xmlSchemaValPtr defVal; /* The compiled value constraint */ + xmlSchemaAttributePtr refDecl; /* Deprecated; not used */ +}; + +/** + * xmlSchemaAttributeLink: + * Used to build a list of attribute uses on complexType definitions. + * WARNING: Deprecated; not used. + */ +typedef struct _xmlSchemaAttributeLink xmlSchemaAttributeLink; +typedef xmlSchemaAttributeLink *xmlSchemaAttributeLinkPtr; +struct _xmlSchemaAttributeLink { + struct _xmlSchemaAttributeLink *next;/* the next attribute link ... */ + struct _xmlSchemaAttribute *attr;/* the linked attribute */ +}; + +/** + * XML_SCHEMAS_WILDCARD_COMPLETE: + * + * If the wildcard is complete. + */ +#define XML_SCHEMAS_WILDCARD_COMPLETE 1 << 0 + +/** + * xmlSchemaCharValueLink: + * Used to build a list of namespaces on wildcards. + */ +typedef struct _xmlSchemaWildcardNs xmlSchemaWildcardNs; +typedef xmlSchemaWildcardNs *xmlSchemaWildcardNsPtr; +struct _xmlSchemaWildcardNs { + struct _xmlSchemaWildcardNs *next;/* the next constraint link ... */ + const xmlChar *value;/* the value */ +}; + +/** + * xmlSchemaWildcard. + * A wildcard. + */ +typedef struct _xmlSchemaWildcard xmlSchemaWildcard; +typedef xmlSchemaWildcard *xmlSchemaWildcardPtr; +struct _xmlSchemaWildcard { + xmlSchemaTypeType type; /* The kind of type */ + const xmlChar *id; /* Deprecated; not used */ + xmlSchemaAnnotPtr annot; + xmlNodePtr node; + int minOccurs; /* Deprecated; not used */ + int maxOccurs; /* Deprecated; not used */ + int processContents; + int any; /* Indicates if the ns constraint is of ##any */ + xmlSchemaWildcardNsPtr nsSet; /* The list of allowed namespaces */ + xmlSchemaWildcardNsPtr negNsSet; /* The negated namespace */ + int flags; +}; + +/** + * XML_SCHEMAS_ATTRGROUP_WILDCARD_BUILDED: + * + * The attribute wildcard has been already builded. + */ +#define XML_SCHEMAS_ATTRGROUP_WILDCARD_BUILDED 1 << 0 +/** + * XML_SCHEMAS_ATTRGROUP_GLOBAL: + * + * The attribute wildcard has been already builded. + */ +#define XML_SCHEMAS_ATTRGROUP_GLOBAL 1 << 1 +/** + * XML_SCHEMAS_ATTRGROUP_MARKED: + * + * Marks the attr group as marked; used for circular checks. + */ +#define XML_SCHEMAS_ATTRGROUP_MARKED 1 << 2 + +/** + * XML_SCHEMAS_ATTRGROUP_REDEFINED: + * + * The attr group was redefined. + */ +#define XML_SCHEMAS_ATTRGROUP_REDEFINED 1 << 3 +/** + * XML_SCHEMAS_ATTRGROUP_HAS_REFS: + * + * Whether this attr. group contains attr. group references. + */ +#define XML_SCHEMAS_ATTRGROUP_HAS_REFS 1 << 4 + +/** + * 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; /* Deprecated; not used */ + const xmlChar *refNs; /* Deprecated; not used */ + xmlSchemaAnnotPtr annot; + + xmlSchemaAttributePtr attributes; /* Deprecated; not used */ + xmlNodePtr node; + int flags; + xmlSchemaWildcardPtr attributeWildcard; + const xmlChar *refPrefix; /* Deprecated; not used */ + xmlSchemaAttributeGroupPtr refItem; /* Deprecated; not used */ + const xmlChar *targetNamespace; + void *attrUses; +}; + +/** + * xmlSchemaTypeLink: + * Used to build a list of types (e.g. member types of + * simpleType with variety "union"). + */ +typedef struct _xmlSchemaTypeLink xmlSchemaTypeLink; +typedef xmlSchemaTypeLink *xmlSchemaTypeLinkPtr; +struct _xmlSchemaTypeLink { + struct _xmlSchemaTypeLink *next;/* the next type link ... */ + xmlSchemaTypePtr type;/* the linked type */ +}; + +/** + * xmlSchemaFacetLink: + * Used to build a list of facets. + */ +typedef struct _xmlSchemaFacetLink xmlSchemaFacetLink; +typedef xmlSchemaFacetLink *xmlSchemaFacetLinkPtr; +struct _xmlSchemaFacetLink { + struct _xmlSchemaFacetLink *next;/* the next facet link ... */ + xmlSchemaFacetPtr facet;/* the linked facet */ +}; + +/** + * XML_SCHEMAS_TYPE_MIXED: + * + * the element content type is mixed + */ +#define XML_SCHEMAS_TYPE_MIXED 1 << 0 +/** + * XML_SCHEMAS_TYPE_DERIVATION_METHOD_EXTENSION: + * + * the simple or complex type has a derivation method of "extension". + */ +#define XML_SCHEMAS_TYPE_DERIVATION_METHOD_EXTENSION 1 << 1 +/** + * XML_SCHEMAS_TYPE_DERIVATION_METHOD_RESTRICTION: + * + * the simple or complex type has a derivation method of "restriction". + */ +#define XML_SCHEMAS_TYPE_DERIVATION_METHOD_RESTRICTION 1 << 2 +/** + * XML_SCHEMAS_TYPE_GLOBAL: + * + * the type is global + */ +#define XML_SCHEMAS_TYPE_GLOBAL 1 << 3 +/** + * XML_SCHEMAS_TYPE_OWNED_ATTR_WILDCARD: + * + * the complexType owns an attribute wildcard, i.e. + * it can be freed by the complexType + */ +#define XML_SCHEMAS_TYPE_OWNED_ATTR_WILDCARD 1 << 4 /* Obsolete. */ +/** + * XML_SCHEMAS_TYPE_VARIETY_ABSENT: + * + * the simpleType has a variety of "absent". + * TODO: Actually not necessary :-/, since if + * none of the variety flags occur then it's + * automatically absent. + */ +#define XML_SCHEMAS_TYPE_VARIETY_ABSENT 1 << 5 +/** + * XML_SCHEMAS_TYPE_VARIETY_LIST: + * + * the simpleType has a variety of "list". + */ +#define XML_SCHEMAS_TYPE_VARIETY_LIST 1 << 6 +/** + * XML_SCHEMAS_TYPE_VARIETY_UNION: + * + * the simpleType has a variety of "union". + */ +#define XML_SCHEMAS_TYPE_VARIETY_UNION 1 << 7 +/** + * XML_SCHEMAS_TYPE_VARIETY_ATOMIC: + * + * the simpleType has a variety of "union". + */ +#define XML_SCHEMAS_TYPE_VARIETY_ATOMIC 1 << 8 +/** + * XML_SCHEMAS_TYPE_FINAL_EXTENSION: + * + * the complexType has a final of "extension". + */ +#define XML_SCHEMAS_TYPE_FINAL_EXTENSION 1 << 9 +/** + * XML_SCHEMAS_TYPE_FINAL_RESTRICTION: + * + * the simpleType/complexType has a final of "restriction". + */ +#define XML_SCHEMAS_TYPE_FINAL_RESTRICTION 1 << 10 +/** + * XML_SCHEMAS_TYPE_FINAL_LIST: + * + * the simpleType has a final of "list". + */ +#define XML_SCHEMAS_TYPE_FINAL_LIST 1 << 11 +/** + * XML_SCHEMAS_TYPE_FINAL_UNION: + * + * the simpleType has a final of "union". + */ +#define XML_SCHEMAS_TYPE_FINAL_UNION 1 << 12 +/** + * XML_SCHEMAS_TYPE_FINAL_DEFAULT: + * + * the simpleType has a final of "default". + */ +#define XML_SCHEMAS_TYPE_FINAL_DEFAULT 1 << 13 +/** + * XML_SCHEMAS_TYPE_BUILTIN_PRIMITIVE: + * + * Marks the item as a builtin primitive. + */ +#define XML_SCHEMAS_TYPE_BUILTIN_PRIMITIVE 1 << 14 +/** + * XML_SCHEMAS_TYPE_MARKED: + * + * Marks the item as marked; used for circular checks. + */ +#define XML_SCHEMAS_TYPE_MARKED 1 << 16 +/** + * XML_SCHEMAS_TYPE_BLOCK_DEFAULT: + * + * the complexType did not specify 'block' so use the default of the + * item. + */ +#define XML_SCHEMAS_TYPE_BLOCK_DEFAULT 1 << 17 +/** + * XML_SCHEMAS_TYPE_BLOCK_EXTENSION: + * + * the complexType has a 'block' of "extension". + */ +#define XML_SCHEMAS_TYPE_BLOCK_EXTENSION 1 << 18 +/** + * XML_SCHEMAS_TYPE_BLOCK_RESTRICTION: + * + * the complexType has a 'block' of "restriction". + */ +#define XML_SCHEMAS_TYPE_BLOCK_RESTRICTION 1 << 19 +/** + * XML_SCHEMAS_TYPE_ABSTRACT: + * + * the simple/complexType is abstract. + */ +#define XML_SCHEMAS_TYPE_ABSTRACT 1 << 20 +/** + * XML_SCHEMAS_TYPE_FACETSNEEDVALUE: + * + * indicates if the facets need a computed value + */ +#define XML_SCHEMAS_TYPE_FACETSNEEDVALUE 1 << 21 +/** + * XML_SCHEMAS_TYPE_INTERNAL_RESOLVED: + * + * indicates that the type was typefixed + */ +#define XML_SCHEMAS_TYPE_INTERNAL_RESOLVED 1 << 22 +/** + * XML_SCHEMAS_TYPE_INTERNAL_INVALID: + * + * indicates that the type is invalid + */ +#define XML_SCHEMAS_TYPE_INTERNAL_INVALID 1 << 23 +/** + * XML_SCHEMAS_TYPE_WHITESPACE_PRESERVE: + * + * a whitespace-facet value of "preserve" + */ +#define XML_SCHEMAS_TYPE_WHITESPACE_PRESERVE 1 << 24 +/** + * XML_SCHEMAS_TYPE_WHITESPACE_REPLACE: + * + * a whitespace-facet value of "replace" + */ +#define XML_SCHEMAS_TYPE_WHITESPACE_REPLACE 1 << 25 +/** + * XML_SCHEMAS_TYPE_WHITESPACE_COLLAPSE: + * + * a whitespace-facet value of "collapse" + */ +#define XML_SCHEMAS_TYPE_WHITESPACE_COLLAPSE 1 << 26 +/** + * XML_SCHEMAS_TYPE_HAS_FACETS: + * + * has facets + */ +#define XML_SCHEMAS_TYPE_HAS_FACETS 1 << 27 +/** + * XML_SCHEMAS_TYPE_NORMVALUENEEDED: + * + * indicates if the facets (pattern) need a normalized value + */ +#define XML_SCHEMAS_TYPE_NORMVALUENEEDED 1 << 28 + +/** + * XML_SCHEMAS_TYPE_FIXUP_1: + * + * First stage of fixup was done. + */ +#define XML_SCHEMAS_TYPE_FIXUP_1 1 << 29 + +/** + * XML_SCHEMAS_TYPE_REDEFINED: + * + * The type was redefined. + */ +#define XML_SCHEMAS_TYPE_REDEFINED 1 << 30 +/** + * XML_SCHEMAS_TYPE_REDEFINING: + * + * The type redefines an other type. + */ +/* #define XML_SCHEMAS_TYPE_REDEFINING 1 << 31 */ + +/** + * _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 ; /* Deprecated; not used */ + const xmlChar *ref; /* Deprecated; not used */ + const xmlChar *refNs; /* Deprecated; not used */ + xmlSchemaAnnotPtr annot; + xmlSchemaTypePtr subtypes; + xmlSchemaAttributePtr attributes; /* Deprecated; not used */ + xmlNodePtr node; + int minOccurs; /* Deprecated; not used */ + int maxOccurs; /* Deprecated; not used */ + + int flags; + xmlSchemaContentType contentType; + const xmlChar *base; /* Base type's local name */ + const xmlChar *baseNs; /* Base type's target namespace */ + xmlSchemaTypePtr baseType; /* The base type component */ + xmlSchemaFacetPtr facets; /* Local facets */ + struct _xmlSchemaType *redef; /* Deprecated; not used */ + int recurse; /* Obsolete */ + xmlSchemaAttributeLinkPtr *attributeUses; /* Deprecated; not used */ + xmlSchemaWildcardPtr attributeWildcard; + int builtInType; /* Type of built-in types. */ + xmlSchemaTypeLinkPtr memberTypes; /* member-types if a union type. */ + xmlSchemaFacetLinkPtr facetSet; /* All facets (incl. inherited) */ + const xmlChar *refPrefix; /* Deprecated; not used */ + xmlSchemaTypePtr contentTypeDef; /* Used for the simple content of complex types. + Could we use @subtypes for this? */ + xmlRegexpPtr contModel; /* Holds the automaton of the content model */ + const xmlChar *targetNamespace; + void *attrUses; +}; + +/* + * 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 + * obsolete: use XML_SCHEMAS_ELEM_GLOBAL instead + */ +#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 + * Obsolete, not used anymore. + */ +#define XML_SCHEMAS_ELEM_NSDEFAULT 1 << 7 +/** + * XML_SCHEMAS_ELEM_INTERNAL_RESOLVED: + * + * this is set when "type", "ref", "substitutionGroup" + * references have been resolved. + */ +#define XML_SCHEMAS_ELEM_INTERNAL_RESOLVED 1 << 8 + /** + * XML_SCHEMAS_ELEM_CIRCULAR: + * + * a helper flag for the search of circular references. + */ +#define XML_SCHEMAS_ELEM_CIRCULAR 1 << 9 +/** + * XML_SCHEMAS_ELEM_BLOCK_ABSENT: + * + * the "block" attribute is absent + */ +#define XML_SCHEMAS_ELEM_BLOCK_ABSENT 1 << 10 +/** + * XML_SCHEMAS_ELEM_BLOCK_EXTENSION: + * + * disallowed substitutions are absent + */ +#define XML_SCHEMAS_ELEM_BLOCK_EXTENSION 1 << 11 +/** + * XML_SCHEMAS_ELEM_BLOCK_RESTRICTION: + * + * disallowed substitutions: "restriction" + */ +#define XML_SCHEMAS_ELEM_BLOCK_RESTRICTION 1 << 12 +/** + * XML_SCHEMAS_ELEM_BLOCK_SUBSTITUTION: + * + * disallowed substitutions: "substituion" + */ +#define XML_SCHEMAS_ELEM_BLOCK_SUBSTITUTION 1 << 13 +/** + * XML_SCHEMAS_ELEM_FINAL_ABSENT: + * + * substitution group exclusions are absent + */ +#define XML_SCHEMAS_ELEM_FINAL_ABSENT 1 << 14 +/** + * XML_SCHEMAS_ELEM_FINAL_EXTENSION: + * + * substitution group exclusions: "extension" + */ +#define XML_SCHEMAS_ELEM_FINAL_EXTENSION 1 << 15 +/** + * XML_SCHEMAS_ELEM_FINAL_RESTRICTION: + * + * substitution group exclusions: "restriction" + */ +#define XML_SCHEMAS_ELEM_FINAL_RESTRICTION 1 << 16 +/** + * XML_SCHEMAS_ELEM_SUBST_GROUP_HEAD: + * + * the declaration is a substitution group head + */ +#define XML_SCHEMAS_ELEM_SUBST_GROUP_HEAD 1 << 17 +/** + * XML_SCHEMAS_ELEM_INTERNAL_CHECKED: + * + * this is set when the elem decl has been checked against + * all constraints + */ +#define XML_SCHEMAS_ELEM_INTERNAL_CHECKED 1 << 18 + +typedef struct _xmlSchemaElement xmlSchemaElement; +typedef xmlSchemaElement *xmlSchemaElementPtr; +struct _xmlSchemaElement { + xmlSchemaTypeType type; /* The kind of type */ + struct _xmlSchemaType *next; /* Not used? */ + const xmlChar *name; + const xmlChar *id; /* Deprecated; not used */ + const xmlChar *ref; /* Deprecated; not used */ + const xmlChar *refNs; /* Deprecated; not used */ + xmlSchemaAnnotPtr annot; + xmlSchemaTypePtr subtypes; /* the type definition */ + xmlSchemaAttributePtr attributes; + xmlNodePtr node; + int minOccurs; /* Deprecated; not used */ + int maxOccurs; /* Deprecated; not used */ + + int flags; + const xmlChar *targetNamespace; + const xmlChar *namedType; + const xmlChar *namedTypeNs; + const xmlChar *substGroup; + const xmlChar *substGroupNs; + const xmlChar *scope; + const xmlChar *value; /* The original value of the value constraint. */ + struct _xmlSchemaElement *refDecl; /* This will now be used for the + substitution group affiliation */ + xmlRegexpPtr contModel; /* Obsolete for WXS, maybe used for RelaxNG */ + xmlSchemaContentType contentType; + const xmlChar *refPrefix; /* Deprecated; not used */ + xmlSchemaValPtr defVal; /* The compiled value contraint. */ + void *idcs; /* The identity-constraint defs */ +}; + +/* + * 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; /* The original value */ + const xmlChar *id; /* Obsolete */ + xmlSchemaAnnotPtr annot; + xmlNodePtr node; + int fixed; /* XML_SCHEMAS_FACET_PRESERVE, etc. */ + int whitespace; + xmlSchemaValPtr val; /* The compiled value */ + xmlRegexpPtr regexp; /* The regex for patterns */ +}; + +/** + * 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; + const xmlChar *targetNamespace; +}; + +/* +* TODO: Actually all those flags used for the schema should sit +* on the schema parser context, since they are used only +* during parsing an XML schema document, and not available +* on the component level as per spec. +*/ +/** + * XML_SCHEMAS_QUALIF_ELEM: + * + * Reflects elementFormDefault == qualified in + * an XML schema document. + */ +#define XML_SCHEMAS_QUALIF_ELEM 1 << 0 +/** + * XML_SCHEMAS_QUALIF_ATTR: + * + * Reflects attributeFormDefault == qualified in + * an XML schema document. + */ +#define XML_SCHEMAS_QUALIF_ATTR 1 << 1 +/** + * XML_SCHEMAS_FINAL_DEFAULT_EXTENSION: + * + * the schema has "extension" in the set of finalDefault. + */ +#define XML_SCHEMAS_FINAL_DEFAULT_EXTENSION 1 << 2 +/** + * XML_SCHEMAS_FINAL_DEFAULT_RESTRICTION: + * + * the schema has "restriction" in the set of finalDefault. + */ +#define XML_SCHEMAS_FINAL_DEFAULT_RESTRICTION 1 << 3 +/** + * XML_SCHEMAS_FINAL_DEFAULT_LIST: + * + * the cshema has "list" in the set of finalDefault. + */ +#define XML_SCHEMAS_FINAL_DEFAULT_LIST 1 << 4 +/** + * XML_SCHEMAS_FINAL_DEFAULT_UNION: + * + * the schema has "union" in the set of finalDefault. + */ +#define XML_SCHEMAS_FINAL_DEFAULT_UNION 1 << 5 +/** + * XML_SCHEMAS_BLOCK_DEFAULT_EXTENSION: + * + * the schema has "extension" in the set of blockDefault. + */ +#define XML_SCHEMAS_BLOCK_DEFAULT_EXTENSION 1 << 6 +/** + * XML_SCHEMAS_BLOCK_DEFAULT_RESTRICTION: + * + * the schema has "restriction" in the set of blockDefault. + */ +#define XML_SCHEMAS_BLOCK_DEFAULT_RESTRICTION 1 << 7 +/** + * XML_SCHEMAS_BLOCK_DEFAULT_SUBSTITUTION: + * + * the schema has "substitution" in the set of blockDefault. + */ +#define XML_SCHEMAS_BLOCK_DEFAULT_SUBSTITUTION 1 << 8 +/** + * XML_SCHEMAS_INCLUDING_CONVERT_NS: + * + * the schema is currently including an other schema with + * no target namespace. + */ +#define XML_SCHEMAS_INCLUDING_CONVERT_NS 1 << 9 +/** + * _xmlSchema: + * + * A Schemas definition + */ +struct _xmlSchema { + const xmlChar *name; /* schema name */ + const xmlChar *targetNamespace; /* the target namespace */ + const xmlChar *version; + const xmlChar *id; /* Obsolete */ + 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 */ + int counter; /* used to give ononymous components unique names */ + xmlHashTablePtr idcDef; /* All identity-constraint defs. */ + void *volatiles; /* Obsolete */ +}; + +XMLPUBFUN void XMLCALL xmlSchemaFreeType (xmlSchemaTypePtr type); +XMLPUBFUN void XMLCALL xmlSchemaFreeWildcard(xmlSchemaWildcardPtr wildcard); + +#ifdef __cplusplus +} +#endif + +#endif /* LIBXML_SCHEMAS_ENABLED */ +#endif /* __XML_SCHEMA_INTERNALS_H__ */ diff --git a/include/libxml/schematron.h b/include/libxml/schematron.h new file mode 100644 index 0000000..364eaec --- /dev/null +++ b/include/libxml/schematron.h @@ -0,0 +1,142 @@ +/* + * Summary: XML Schemastron implementation + * Description: interface to the XML Schematron validity checking. + * + * Copy: See Copyright for the status of this software. + * + * Author: Daniel Veillard + */ + + +#ifndef __XML_SCHEMATRON_H__ +#define __XML_SCHEMATRON_H__ + +#include + +#ifdef LIBXML_SCHEMATRON_ENABLED + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + XML_SCHEMATRON_OUT_QUIET = 1 << 0, /* quiet no report */ + XML_SCHEMATRON_OUT_TEXT = 1 << 1, /* build a textual report */ + XML_SCHEMATRON_OUT_XML = 1 << 2, /* output SVRL */ + XML_SCHEMATRON_OUT_ERROR = 1 << 3, /* output via xmlStructuredErrorFunc */ + XML_SCHEMATRON_OUT_FILE = 1 << 8, /* output to a file descriptor */ + XML_SCHEMATRON_OUT_BUFFER = 1 << 9, /* output to a buffer */ + XML_SCHEMATRON_OUT_IO = 1 << 10 /* output to I/O mechanism */ +} xmlSchematronValidOptions; + +/** + * The schemas related types are kept internal + */ +typedef struct _xmlSchematron xmlSchematron; +typedef xmlSchematron *xmlSchematronPtr; + +/** + * xmlSchematronValidityErrorFunc: + * @ctx: the validation context + * @msg: the message + * @...: extra arguments + * + * Signature of an error callback from a Schematron validation + */ +typedef void (*xmlSchematronValidityErrorFunc) (void *ctx, const char *msg, ...); + +/** + * xmlSchematronValidityWarningFunc: + * @ctx: the validation context + * @msg: the message + * @...: extra arguments + * + * Signature of a warning callback from a Schematron validation + */ +typedef void (*xmlSchematronValidityWarningFunc) (void *ctx, const char *msg, ...); + +/** + * A schemas validation context + */ +typedef struct _xmlSchematronParserCtxt xmlSchematronParserCtxt; +typedef xmlSchematronParserCtxt *xmlSchematronParserCtxtPtr; + +typedef struct _xmlSchematronValidCtxt xmlSchematronValidCtxt; +typedef xmlSchematronValidCtxt *xmlSchematronValidCtxtPtr; + +/* + * Interfaces for parsing. + */ +XMLPUBFUN xmlSchematronParserCtxtPtr XMLCALL + xmlSchematronNewParserCtxt (const char *URL); +XMLPUBFUN xmlSchematronParserCtxtPtr XMLCALL + xmlSchematronNewMemParserCtxt(const char *buffer, + int size); +XMLPUBFUN xmlSchematronParserCtxtPtr XMLCALL + xmlSchematronNewDocParserCtxt(xmlDocPtr doc); +XMLPUBFUN void XMLCALL + xmlSchematronFreeParserCtxt (xmlSchematronParserCtxtPtr ctxt); +/***** +XMLPUBFUN void XMLCALL + xmlSchematronSetParserErrors(xmlSchematronParserCtxtPtr ctxt, + xmlSchematronValidityErrorFunc err, + xmlSchematronValidityWarningFunc warn, + void *ctx); +XMLPUBFUN int XMLCALL + xmlSchematronGetParserErrors(xmlSchematronParserCtxtPtr ctxt, + xmlSchematronValidityErrorFunc * err, + xmlSchematronValidityWarningFunc * warn, + void **ctx); +XMLPUBFUN int XMLCALL + xmlSchematronIsValid (xmlSchematronValidCtxtPtr ctxt); + *****/ +XMLPUBFUN xmlSchematronPtr XMLCALL + xmlSchematronParse (xmlSchematronParserCtxtPtr ctxt); +XMLPUBFUN void XMLCALL + xmlSchematronFree (xmlSchematronPtr schema); +/* + * Interfaces for validating + */ +XMLPUBFUN void XMLCALL + xmlSchematronSetValidStructuredErrors( + xmlSchematronValidCtxtPtr ctxt, + xmlStructuredErrorFunc serror, + void *ctx); +/****** +XMLPUBFUN void XMLCALL + xmlSchematronSetValidErrors (xmlSchematronValidCtxtPtr ctxt, + xmlSchematronValidityErrorFunc err, + xmlSchematronValidityWarningFunc warn, + void *ctx); +XMLPUBFUN int XMLCALL + xmlSchematronGetValidErrors (xmlSchematronValidCtxtPtr ctxt, + xmlSchematronValidityErrorFunc *err, + xmlSchematronValidityWarningFunc *warn, + void **ctx); +XMLPUBFUN int XMLCALL + xmlSchematronSetValidOptions(xmlSchematronValidCtxtPtr ctxt, + int options); +XMLPUBFUN int XMLCALL + xmlSchematronValidCtxtGetOptions(xmlSchematronValidCtxtPtr ctxt); +XMLPUBFUN int XMLCALL + xmlSchematronValidateOneElement (xmlSchematronValidCtxtPtr ctxt, + xmlNodePtr elem); + *******/ + +XMLPUBFUN xmlSchematronValidCtxtPtr XMLCALL + xmlSchematronNewValidCtxt (xmlSchematronPtr schema, + int options); +XMLPUBFUN void XMLCALL + xmlSchematronFreeValidCtxt (xmlSchematronValidCtxtPtr ctxt); +XMLPUBFUN int XMLCALL + xmlSchematronValidateDoc (xmlSchematronValidCtxtPtr ctxt, + xmlDocPtr instance); + +#ifdef __cplusplus +} +#endif + +#endif /* LIBXML_SCHEMATRON_ENABLED */ +#endif /* __XML_SCHEMATRON_H__ */ diff --git a/include/libxml/threads.h b/include/libxml/threads.h new file mode 100644 index 0000000..d31f16a --- /dev/null +++ b/include/libxml/threads.h @@ -0,0 +1,84 @@ +/** + * 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 + +#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 +#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); + +#if defined(HAVE_WIN32_THREADS) && !defined(HAVE_COMPILER_TLS) && defined(LIBXML_STATIC_FOR_DLL) +int XMLCALL xmlDllMain(void *hinstDLL, unsigned long fdwReason, void *lpvReserved); +#endif + +#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..4a9b3bc --- /dev/null +++ b/include/libxml/tree.h @@ -0,0 +1,1311 @@ +/* + * 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 +#include +#include +#include + +#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 + +/** + * LIBXML_NAMESPACE_DICT: + * + * Defines experimental behaviour: + * 1) xmlNs gets an additional field @context (a xmlDoc) + * 2) when creating a tree, xmlNs->href is stored in the dict of xmlDoc. + */ +/* #define LIBXML_NAMESPACE_DICT */ + +/** + * 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, /* double each time one need to grow */ + XML_BUFFER_ALLOC_EXACT, /* grow only to the minimal size */ + XML_BUFFER_ALLOC_IMMUTABLE, /* immutable buffer */ + XML_BUFFER_ALLOC_IO, /* special allocation scheme used for I/O */ + XML_BUFFER_ALLOC_HYBRID, /* exact up to a threshold, and doubleit thereafter */ + XML_BUFFER_ALLOC_BOUNDED /* limit the upper size of the buffer */ +} xmlBufferAllocationScheme; + +/** + * xmlBuffer: + * + * A buffer structure, this old construct is limited to 2GB and + * is being deprecated, use API with xmlBuf instead + */ +typedef struct _xmlBuffer xmlBuffer; +typedef xmlBuffer *xmlBufferPtr; +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 */ + xmlChar *contentIO; /* in IO mode we may have a different base */ +}; + +/** + * xmlBuf: + * + * A buffer structure, new one, the actual structure internals are not public + */ + +typedef struct _xmlBuf xmlBuf; + +/** + * xmlBufPtr: + * + * A pointer to a buffer structure, the actual structure internals are not + * public + */ + +typedef xmlBuf *xmlBufPtr; + +/* + * A few public routines for xmlBuf. As those are expected to be used + * mostly internally the bulk of the routines are internal in buf.h + */ +XMLPUBFUN xmlChar* XMLCALL xmlBufContent (const xmlBuf* buf); +XMLPUBFUN xmlChar* XMLCALL xmlBufEnd (xmlBufPtr buf); +XMLPUBFUN size_t XMLCALL xmlBufUse (const xmlBufPtr buf); +XMLPUBFUN size_t XMLCALL xmlBufShrink (xmlBufPtr buf, size_t len); + +/* + * LIBXML2_NEW_BUFFER: + * + * Macro used to express that the API use the new buffers for + * xmlParserInputBuffer and xmlOutputBuffer. The change was + * introduced in 2.9.0. + */ +#define LIBXML2_NEW_BUFFER + +/** + * XML_XML_NAMESPACE: + * + * This is the namespace for the special xml: prefix predefined in the + * XML Namespace specification. + */ +#define XML_XML_NAMESPACE \ + (const xmlChar *) "http://www.w3.org/XML/1998/namespace" + +/** + * XML_XML_ID: + * + * This is the name for the special xml:id attribute + */ +#define XML_XML_ID (const xmlChar *) "xml:id" + +/* + * The different element types carried by an XML tree. + * + * NOTE: This is synchronized with DOM Level1 values + * See http://www.w3.org/TR/REC-DOM-Level-1/ + * + * Actually this had diverged a bit, and now XML_DOCUMENT_TYPE_NODE should + * be deprecated to use an XML_DTD_NODE. + */ +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 +#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 */ + struct _xmlDoc *context; /* normally an xmlDoc */ +}; + +/** + * xmlDtd: + * + * An XML DTD, as defined by 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 */ +}; + +/** + * 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)) + +/** + * xmlDocProperty + * + * Set of properties of the document as found by the parser + * Some of them are linked to similary named xmlParserOption + */ +typedef enum { + XML_DOC_WELLFORMED = 1<<0, /* document is XML well formed */ + XML_DOC_NSVALID = 1<<1, /* document is Namespace valid */ + XML_DOC_OLD10 = 1<<2, /* parsed with old XML-1.0 parser */ + XML_DOC_DTDVALID = 1<<3, /* DTD validation was successful */ + XML_DOC_XINCLUDE = 1<<4, /* XInclude substitution was done */ + XML_DOC_USERBUILT = 1<<5, /* Document was built using the API + and not by parsing an instance */ + XML_DOC_INTERNAL = 1<<6, /* built for internal processing */ + XML_DOC_HTML = 1<<7 /* parsed or built HTML document */ +} xmlDocProperties; + +/** + * 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) + 1 if standalone="yes" + 0 if standalone="no" + -1 if there is no XML declaration + -2 if there is an XML declaration, but no + standalone attribute was specified */ + 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 */ + int parseFlags; /* set of xmlParserOption used to parse the + document */ + int properties; /* set of xmlDocProperties for this document + set at the end of parsing */ +}; + + +typedef struct _xmlDOMWrapCtxt xmlDOMWrapCtxt; +typedef xmlDOMWrapCtxt *xmlDOMWrapCtxtPtr; + +/** + * xmlDOMWrapAcquireNsFunction: + * @ctxt: a DOM wrapper context + * @node: the context node (element or attribute) + * @nsName: the requested namespace name + * @nsPrefix: the requested namespace prefix + * + * A function called to acquire namespaces (xmlNs) from the wrapper. + * + * Returns an xmlNsPtr or NULL in case of an error. + */ +typedef xmlNsPtr (*xmlDOMWrapAcquireNsFunction) (xmlDOMWrapCtxtPtr ctxt, + xmlNodePtr node, + const xmlChar *nsName, + const xmlChar *nsPrefix); + +/** + * xmlDOMWrapCtxt: + * + * Context for DOM wrapper-operations. + */ +struct _xmlDOMWrapCtxt { + void * _private; + /* + * The type of this context, just in case we need specialized + * contexts in the future. + */ + int type; + /* + * Internal namespace map used for various operations. + */ + void * namespaceMap; + /* + * Use this one to acquire an xmlNsPtr intended for node->ns. + * (Note that this is not intended for elem->nsDef). + */ + xmlDOMWrapAcquireNsFunction getNsForNodeFunc; +}; + +/** + * 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 + */ +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XPATH_ENABLED) || \ + defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_DEBUG_ENABLED) || \ + defined (LIBXML_HTML_ENABLED) || defined(LIBXML_SAX1_ENABLED) || \ + defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || \ + defined(LIBXML_DOCB_ENABLED) || defined(LIBXML_LEGACY_ENABLED) +XMLPUBFUN int XMLCALL + xmlValidateNCName (const xmlChar *value, + int space); +#endif + +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) +XMLPUBFUN int XMLCALL + xmlValidateQName (const xmlChar *value, + int space); +XMLPUBFUN int XMLCALL + xmlValidateName (const xmlChar *value, + int space); +XMLPUBFUN int XMLCALL + xmlValidateNMToken (const xmlChar *value, + int space); +#endif + +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, the old ones see @xmlBuf for the new ones. + */ + +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 int XMLCALL + xmlBufferAdd (xmlBufferPtr buf, + const xmlChar *str, + int len); +XMLPUBFUN int XMLCALL + xmlBufferAddHead (xmlBufferPtr buf, + const xmlChar *str, + int len); +XMLPUBFUN int XMLCALL + xmlBufferCat (xmlBufferPtr buf, + const xmlChar *str); +XMLPUBFUN int 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 xmlBuffer *buf); +XMLPUBFUN xmlChar* XMLCALL + xmlBufferDetach (xmlBufferPtr buf); +XMLPUBFUN void XMLCALL + xmlBufferSetAllocationScheme(xmlBufferPtr buf, + xmlBufferAllocationScheme scheme); +XMLPUBFUN int XMLCALL + xmlBufferLength (const xmlBuffer *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 (const xmlDoc *doc); +XMLPUBFUN void XMLCALL + xmlFreeDtd (xmlDtdPtr cur); +#ifdef LIBXML_LEGACY_ENABLED +XMLPUBFUN xmlNsPtr XMLCALL + xmlNewGlobalNs (xmlDocPtr doc, + const xmlChar *href, + const xmlChar *prefix); +#endif /* LIBXML_LEGACY_ENABLED */ +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); +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_HTML_ENABLED) || \ + defined(LIBXML_SCHEMAS_ENABLED) +XMLPUBFUN xmlAttrPtr XMLCALL + xmlNewProp (xmlNodePtr node, + const xmlChar *name, + const xmlChar *value); +#endif +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); +#endif /* LIBXML_TREE_ENABLED */ +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) +XMLPUBFUN xmlDocPtr XMLCALL + xmlCopyDoc (xmlDocPtr doc, + int recursive); +#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_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 + xmlNewNode (xmlNsPtr ns, + const xmlChar *name); +XMLPUBFUN xmlNodePtr XMLCALL + xmlNewNodeEatName (xmlNsPtr ns, + xmlChar *name); +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) +XMLPUBFUN xmlNodePtr XMLCALL + xmlNewChild (xmlNodePtr parent, + xmlNsPtr ns, + const xmlChar *name, + const xmlChar *content); +#endif +XMLPUBFUN xmlNodePtr XMLCALL + xmlNewDocText (const xmlDoc *doc, + const xmlChar *content); +XMLPUBFUN xmlNodePtr XMLCALL + xmlNewText (const xmlChar *content); +XMLPUBFUN xmlNodePtr XMLCALL + xmlNewDocPI (xmlDocPtr doc, + const xmlChar *name, + 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 (const xmlDoc *doc, + const xmlChar *name); +XMLPUBFUN xmlNodePtr XMLCALL + xmlCopyNode (xmlNodePtr node, + int recursive); +XMLPUBFUN xmlNodePtr XMLCALL + xmlDocCopyNode (xmlNodePtr node, + xmlDocPtr doc, + int recursive); +XMLPUBFUN xmlNodePtr XMLCALL + xmlDocCopyNodeList (xmlDocPtr doc, + xmlNodePtr node); +XMLPUBFUN xmlNodePtr XMLCALL + xmlCopyNodeList (xmlNodePtr node); +#ifdef LIBXML_TREE_ENABLED +XMLPUBFUN xmlNodePtr XMLCALL + xmlNewTextChild (xmlNodePtr parent, + xmlNsPtr ns, + const xmlChar *name, + const xmlChar *content); +XMLPUBFUN xmlNodePtr XMLCALL + xmlNewDocRawNode (xmlDocPtr doc, + xmlNsPtr ns, + const xmlChar *name, + const xmlChar *content); +XMLPUBFUN xmlNodePtr XMLCALL + xmlNewDocFragment (xmlDocPtr doc); +#endif /* LIBXML_TREE_ENABLED */ + +/* + * Navigating. + */ +XMLPUBFUN long XMLCALL + xmlGetLineNo (const xmlNode *node); +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_DEBUG_ENABLED) +XMLPUBFUN xmlChar * XMLCALL + xmlGetNodePath (const xmlNode *node); +#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_DEBUG_ENABLED) */ +XMLPUBFUN xmlNodePtr XMLCALL + xmlDocGetRootElement (const xmlDoc *doc); +XMLPUBFUN xmlNodePtr XMLCALL + xmlGetLastChild (const xmlNode *parent); +XMLPUBFUN int XMLCALL + xmlNodeIsText (const xmlNode *node); +XMLPUBFUN int XMLCALL + xmlIsBlankNode (const xmlNode *node); + +/* + * Changing the structure. + */ +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_WRITER_ENABLED) +XMLPUBFUN xmlNodePtr XMLCALL + xmlDocSetRootElement (xmlDocPtr doc, + xmlNodePtr root); +#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_WRITER_ENABLED) */ +#ifdef LIBXML_TREE_ENABLED +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); +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_WRITER_ENABLED) +XMLPUBFUN xmlNodePtr XMLCALL + xmlReplaceNode (xmlNodePtr old, + xmlNodePtr cur); +#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_WRITER_ENABLED) */ +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_HTML_ENABLED) || \ + defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) +XMLPUBFUN xmlNodePtr XMLCALL + xmlAddPrevSibling (xmlNodePtr cur, + xmlNodePtr elem); +#endif /* LIBXML_TREE_ENABLED || LIBXML_HTML_ENABLED || LIBXML_SCHEMAS_ENABLED */ +XMLPUBFUN xmlNodePtr XMLCALL + 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); +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XPATH_ENABLED) || \ + defined(LIBXML_SCHEMAS_ENABLED) +XMLPUBFUN xmlNsPtr * XMLCALL + xmlGetNsList (const xmlDoc *doc, + const xmlNode *node); +#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XPATH_ENABLED) */ + +XMLPUBFUN void XMLCALL + xmlSetNs (xmlNodePtr node, + xmlNsPtr ns); +XMLPUBFUN xmlNsPtr XMLCALL + xmlCopyNamespace (xmlNsPtr cur); +XMLPUBFUN xmlNsPtr XMLCALL + xmlCopyNamespaceList (xmlNsPtr cur); + +/* + * Changing the content. + */ +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) || \ + defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_HTML_ENABLED) +XMLPUBFUN xmlAttrPtr XMLCALL + xmlSetProp (xmlNodePtr node, + const xmlChar *name, + const xmlChar *value); +XMLPUBFUN xmlAttrPtr XMLCALL + xmlSetNsProp (xmlNodePtr node, + xmlNsPtr ns, + const xmlChar *name, + const xmlChar *value); +#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) || \ + defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_HTML_ENABLED) */ +XMLPUBFUN xmlChar * XMLCALL + xmlGetNoNsProp (const xmlNode *node, + const xmlChar *name); +XMLPUBFUN xmlChar * XMLCALL + xmlGetProp (const xmlNode *node, + const xmlChar *name); +XMLPUBFUN xmlAttrPtr XMLCALL + xmlHasProp (const xmlNode *node, + const xmlChar *name); +XMLPUBFUN xmlAttrPtr XMLCALL + xmlHasNsProp (const xmlNode *node, + const xmlChar *name, + const xmlChar *nameSpace); +XMLPUBFUN xmlChar * XMLCALL + xmlGetNsProp (const xmlNode *node, + const xmlChar *name, + const xmlChar *nameSpace); +XMLPUBFUN xmlNodePtr XMLCALL + xmlStringGetNodeList (const xmlDoc *doc, + const xmlChar *value); +XMLPUBFUN xmlNodePtr XMLCALL + xmlStringLenGetNodeList (const xmlDoc *doc, + const xmlChar *value, + int len); +XMLPUBFUN xmlChar * XMLCALL + xmlNodeListGetString (xmlDocPtr doc, + const xmlNode *list, + int inLine); +#ifdef LIBXML_TREE_ENABLED +XMLPUBFUN xmlChar * XMLCALL + xmlNodeListGetRawString (const xmlDoc *doc, + const xmlNode *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 (const xmlNode *cur); + +XMLPUBFUN int XMLCALL + xmlNodeBufGetContent (xmlBufferPtr buffer, + const xmlNode *cur); +XMLPUBFUN int XMLCALL + xmlBufGetNodeContent (xmlBufPtr buf, + const xmlNode *cur); + +XMLPUBFUN xmlChar * XMLCALL + xmlNodeGetLang (const xmlNode *cur); +XMLPUBFUN int XMLCALL + xmlNodeGetSpacePreserve (const xmlNode *cur); +#ifdef LIBXML_TREE_ENABLED +XMLPUBFUN void XMLCALL + xmlNodeSetLang (xmlNodePtr cur, + const xmlChar *lang); +XMLPUBFUN void XMLCALL + xmlNodeSetSpacePreserve (xmlNodePtr cur, + int val); +#endif /* LIBXML_TREE_ENABLED */ +XMLPUBFUN xmlChar * XMLCALL + xmlNodeGetBase (const xmlDoc *doc, + const xmlNode *cur); +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) +XMLPUBFUN void XMLCALL + xmlNodeSetBase (xmlNodePtr cur, + const xmlChar *uri); +#endif + +/* + * Removing content. + */ +XMLPUBFUN int XMLCALL + xmlRemoveProp (xmlAttrPtr cur); +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) +XMLPUBFUN int XMLCALL + xmlUnsetNsProp (xmlNodePtr node, + xmlNsPtr ns, + const xmlChar *name); +XMLPUBFUN int XMLCALL + xmlUnsetProp (xmlNodePtr node, + const xmlChar *name); +#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_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); + +#ifdef LIBXML_OUTPUT_ENABLED +XMLPUBFUN void xmlAttrSerializeTxtContent(xmlBufferPtr buf, + xmlDocPtr doc, + xmlAttrPtr attr, + const xmlChar *string); +#endif /* LIBXML_OUTPUT_ENABLED */ + +#ifdef LIBXML_TREE_ENABLED +/* + * Namespace handling. + */ +XMLPUBFUN int XMLCALL + xmlReconciliateNs (xmlDocPtr doc, + xmlNodePtr tree); +#endif + +#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 size_t XMLCALL + xmlBufNodeDump (xmlBufPtr buf, + xmlDocPtr doc, + xmlNodePtr cur, + int level, + int format); +XMLPUBFUN int XMLCALL + xmlNodeDump (xmlBufferPtr buf, + xmlDocPtr doc, + xmlNodePtr cur, + int level, + int format); + +XMLPUBFUN int XMLCALL + 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 (const xmlDoc *doc); +XMLPUBFUN void XMLCALL + xmlSetDocCompressMode (xmlDocPtr doc, + int mode); +XMLPUBFUN int XMLCALL + xmlGetCompressMode (void); +XMLPUBFUN void XMLCALL + xmlSetCompressMode (int mode); + +/* +* DOM-wrapper helper functions. +*/ +XMLPUBFUN xmlDOMWrapCtxtPtr XMLCALL + xmlDOMWrapNewCtxt (void); +XMLPUBFUN void XMLCALL + xmlDOMWrapFreeCtxt (xmlDOMWrapCtxtPtr ctxt); +XMLPUBFUN int XMLCALL + xmlDOMWrapReconcileNamespaces(xmlDOMWrapCtxtPtr ctxt, + xmlNodePtr elem, + int options); +XMLPUBFUN int XMLCALL + xmlDOMWrapAdoptNode (xmlDOMWrapCtxtPtr ctxt, + xmlDocPtr sourceDoc, + xmlNodePtr node, + xmlDocPtr destDoc, + xmlNodePtr destParent, + int options); +XMLPUBFUN int XMLCALL + xmlDOMWrapRemoveNode (xmlDOMWrapCtxtPtr ctxt, + xmlDocPtr doc, + xmlNodePtr node, + int options); +XMLPUBFUN int XMLCALL + xmlDOMWrapCloneNode (xmlDOMWrapCtxtPtr ctxt, + xmlDocPtr sourceDoc, + xmlNodePtr node, + xmlNodePtr *clonedNode, + xmlDocPtr destDoc, + xmlNodePtr destParent, + int deep, + int options); + +#ifdef LIBXML_TREE_ENABLED +/* + * 5 interfaces from DOM ElementTraversal, but different in entities + * traversal. + */ +XMLPUBFUN unsigned long XMLCALL + xmlChildElementCount (xmlNodePtr parent); +XMLPUBFUN xmlNodePtr XMLCALL + xmlNextElementSibling (xmlNodePtr node); +XMLPUBFUN xmlNodePtr XMLCALL + xmlFirstElementChild (xmlNodePtr parent); +XMLPUBFUN xmlNodePtr XMLCALL + xmlLastElementChild (xmlNodePtr parent); +XMLPUBFUN xmlNodePtr XMLCALL + xmlPreviousElementSibling (xmlNodePtr node); +#endif +#ifdef __cplusplus +} +#endif +#ifndef __XML_PARSER_H__ +#include +#endif + +#endif /* __XML_TREE_H__ */ + diff --git a/include/libxml/uri.h b/include/libxml/uri.h new file mode 100644 index 0000000..db48262 --- /dev/null +++ b/include/libxml/uri.h @@ -0,0 +1,94 @@ +/** + * 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 +#include + +#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. + * + * Note: query is a deprecated field which is incorrectly unescaped. + * query_raw takes precedence over query if the former is set. + * See: http://mail.gnome.org/archives/xml/2007-April/thread.html#00127 + */ +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 (deprecated - use with caution) */ + char *fragment; /* the fragment identifier */ + int cleanup; /* parsing potentially unclean URI */ + char *query_raw; /* the query string (as it appears in the 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 xmlChar * XMLCALL + xmlBuildRelativeURI (const xmlChar *URI, + const xmlChar *base); +XMLPUBFUN xmlURIPtr XMLCALL + xmlParseURI (const char *str); +XMLPUBFUN xmlURIPtr XMLCALL + xmlParseURIRaw (const char *str, + int raw); +XMLPUBFUN int XMLCALL + xmlParseURIReference (xmlURIPtr uri, + const char *str); +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); +XMLPUBFUN xmlChar* XMLCALL + xmlPathToURI (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..2bc7b38 --- /dev/null +++ b/include/libxml/valid.h @@ -0,0 +1,458 @@ +/* + * 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 +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Validation state added for non-determinist content model. + */ +typedef struct _xmlValidState xmlValidState; +typedef xmlValidState *xmlValidStatePtr; + +/** + * xmlValidityErrorFunc: + * @ctx: usually an xmlValidCtxtPtr to a validity error context, + * but comes from ctxt->userData (which normally contains such + * a pointer); ctxt->userData can be changed by the user. + * @msg: the string to format *printf like vararg + * @...: remaining arguments to the format + * + * Callback called when a validity error is found. This is a message + * oriented function similar to an *printf function. + */ +typedef void (XMLCDECL *xmlValidityErrorFunc) (void *ctx, + const char *msg, + ...) LIBXML_ATTR_FORMAT(2,3); + +/** + * xmlValidityWarningFunc: + * @ctx: usually an xmlValidCtxtPtr to a validity error context, + * but comes from ctxt->userData (which normally contains such + * a pointer); ctxt->userData can be changed by the user. + * @msg: the string to format *printf like vararg + * @...: remaining arguments to the format + * + * Callback called when a validity warning is found. This is a message + * oriented function similar to an *printf function. + */ +typedef void (XMLCDECL *xmlValidityWarningFunc) (void *ctx, + const char *msg, + ...) LIBXML_ATTR_FORMAT(2,3); + +#ifdef IN_LIBXML +/** + * XML_CTXT_FINISH_DTD_0: + * + * Special value for finishDtd field when embedded in an xmlParserCtxt + */ +#define XML_CTXT_FINISH_DTD_0 0xabcd1234 +/** + * XML_CTXT_FINISH_DTD_1: + * + * Special value for finishDtd field when embedded in an xmlParserCtxt + */ +#define XML_CTXT_FINISH_DTD_1 0xabcd1235 +#endif + +/* + * 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 */ + + unsigned 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; + +/* Notation */ +XMLPUBFUN xmlNotationPtr XMLCALL + xmlAddNotationDecl (xmlValidCtxtPtr ctxt, + xmlDtdPtr dtd, + const xmlChar *name, + const xmlChar *PublicID, + const xmlChar *SystemID); +#ifdef LIBXML_TREE_ENABLED +XMLPUBFUN xmlNotationTablePtr XMLCALL + xmlCopyNotationTable (xmlNotationTablePtr table); +#endif /* LIBXML_TREE_ENABLED */ +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 */ +/* the non Doc version are being deprecated */ +XMLPUBFUN xmlElementContentPtr XMLCALL + xmlNewElementContent (const xmlChar *name, + xmlElementContentType type); +XMLPUBFUN xmlElementContentPtr XMLCALL + xmlCopyElementContent (xmlElementContentPtr content); +XMLPUBFUN void XMLCALL + xmlFreeElementContent (xmlElementContentPtr cur); +/* the new versions with doc argument */ +XMLPUBFUN xmlElementContentPtr XMLCALL + xmlNewDocElementContent (xmlDocPtr doc, + const xmlChar *name, + xmlElementContentType type); +XMLPUBFUN xmlElementContentPtr XMLCALL + xmlCopyDocElementContent(xmlDocPtr doc, + xmlElementContentPtr content); +XMLPUBFUN void XMLCALL + xmlFreeDocElementContent(xmlDocPtr doc, + xmlElementContentPtr cur); +XMLPUBFUN void XMLCALL + xmlSnprintfElementContent(char *buf, + int size, + xmlElementContentPtr content, + int englob); +#ifdef LIBXML_OUTPUT_ENABLED +/* DEPRECATED */ +XMLPUBFUN void XMLCALL + xmlSprintfElementContent(char *buf, + xmlElementContentPtr content, + int englob); +#endif /* LIBXML_OUTPUT_ENABLED */ +/* DEPRECATED */ + +/* Element */ +XMLPUBFUN xmlElementPtr XMLCALL + xmlAddElementDecl (xmlValidCtxtPtr ctxt, + xmlDtdPtr dtd, + const xmlChar *name, + xmlElementTypeVal type, + xmlElementContentPtr content); +#ifdef LIBXML_TREE_ENABLED +XMLPUBFUN xmlElementTablePtr XMLCALL + xmlCopyElementTable (xmlElementTablePtr table); +#endif /* LIBXML_TREE_ENABLED */ +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); +#ifdef LIBXML_TREE_ENABLED +XMLPUBFUN xmlEnumerationPtr XMLCALL + xmlCopyEnumeration (xmlEnumerationPtr cur); +#endif /* LIBXML_TREE_ENABLED */ + +/* 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); +#ifdef LIBXML_TREE_ENABLED +XMLPUBFUN xmlAttributeTablePtr XMLCALL + xmlCopyAttributeTable (xmlAttributeTablePtr table); +#endif /* LIBXML_TREE_ENABLED */ +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. + */ +#ifdef LIBXML_VALID_ENABLED +/* Allocate/Release Validation Contexts */ +XMLPUBFUN xmlValidCtxtPtr XMLCALL + xmlNewValidCtxt(void); +XMLPUBFUN void XMLCALL + xmlFreeValidCtxt(xmlValidCtxtPtr); + +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); +#endif /* LIBXML_VALID_ENABLED */ + +#if defined(LIBXML_VALID_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) +XMLPUBFUN int XMLCALL + xmlValidateNotationUse (xmlValidCtxtPtr ctxt, + xmlDocPtr doc, + const xmlChar *notationName); +#endif /* LIBXML_VALID_ENABLED or LIBXML_SCHEMAS_ENABLED */ + +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); + +#ifdef LIBXML_VALID_ENABLED + +XMLPUBFUN int XMLCALL + xmlValidGetPotentialChildren(xmlElementContent *ctree, + const xmlChar **names, + int *len, + int max); + +XMLPUBFUN int XMLCALL + xmlValidGetValidElements(xmlNode *prev, + xmlNode *next, + const xmlChar **names, + 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 */ +#endif /* LIBXML_VALID_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..863ab25 --- /dev/null +++ b/include/libxml/xinclude.h @@ -0,0 +1,129 @@ +/* + * 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 +#include + +#ifdef LIBXML_XINCLUDE_ENABLED + +#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 + xmlXIncludeProcessFlagsData(xmlDocPtr doc, + int flags, + void *data); +XMLPUBFUN int XMLCALL + xmlXIncludeProcessTreeFlagsData(xmlNodePtr tree, + int flags, + void *data); +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 /* LIBXML_XINCLUDE_ENABLED */ + +#endif /* __XML_XINCLUDE_H__ */ diff --git a/include/libxml/xlink.h b/include/libxml/xlink.h new file mode 100644 index 0000000..a209a99 --- /dev/null +++ b/include/libxml/xlink.h @@ -0,0 +1,189 @@ +/* + * 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 +#include + +#ifdef LIBXML_XPTR_ENABLED + +#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 /* LIBXML_XPTR_ENABLED */ + +#endif /* __XML_XLINK_H__ */ diff --git a/include/libxml/xmlIO.h b/include/libxml/xmlIO.h new file mode 100644 index 0000000..3e41744 --- /dev/null +++ b/include/libxml/xmlIO.h @@ -0,0 +1,366 @@ +/* + * 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 +#include + +#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 (XMLCALL *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 * (XMLCALL *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 (XMLCALL *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 (XMLCALL *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 (XMLCALL *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 * (XMLCALL *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 (XMLCALL *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 (XMLCALL *xmlOutputCloseCallback) (void * context); +#endif /* LIBXML_OUTPUT_ENABLED */ + +#ifdef __cplusplus +} +#endif + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif +struct _xmlParserInputBuffer { + void* context; + xmlInputReadCallback readcallback; + xmlInputCloseCallback closecallback; + + xmlCharEncodingHandlerPtr encoder; /* I18N conversions to UTF-8 */ + + xmlBufPtr buffer; /* Local buffer encoded in UTF-8 */ + xmlBufPtr raw; /* if encoder != NULL buffer for raw input */ + int compressed; /* -1=unknown, 0=not compressed, 1=compressed */ + int error; + unsigned long rawconsumed;/* amount consumed from raw */ +}; + + +#ifdef LIBXML_OUTPUT_ENABLED +struct _xmlOutputBuffer { + void* context; + xmlOutputWriteCallback writecallback; + xmlOutputCloseCallback closecallback; + + xmlCharEncodingHandlerPtr encoder; /* I18N conversions to UTF-8 */ + + xmlBufPtr buffer; /* Local buffer encoded in UTF-8 or ISOLatin */ + xmlBufPtr conv; /* if encoder != NULL buffer for output */ + int written; /* total number of byte written */ + int error; +}; +#endif /* LIBXML_OUTPUT_ENABLED */ + +/* + * Interfaces for input + */ +XMLPUBFUN void XMLCALL + xmlCleanupInputCallbacks (void); + +XMLPUBFUN int XMLCALL + xmlPopInputCallbacks (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); + +xmlParserInputBufferPtr + __xmlParserInputBufferCreateFilename(const char *URI, + xmlCharEncoding enc); + +#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 + xmlOutputBufferCreateBuffer (xmlBufferPtr buffer, + xmlCharEncodingHandlerPtr encoder); + +XMLPUBFUN xmlOutputBufferPtr XMLCALL + xmlOutputBufferCreateFd (int fd, + xmlCharEncodingHandlerPtr encoder); + +XMLPUBFUN xmlOutputBufferPtr XMLCALL + xmlOutputBufferCreateIO (xmlOutputWriteCallback iowrite, + xmlOutputCloseCallback ioclose, + void *ioctx, + xmlCharEncodingHandlerPtr encoder); + +/* Couple of APIs to get the output without digging into the buffers */ +XMLPUBFUN const xmlChar * XMLCALL + xmlOutputBufferGetContent (xmlOutputBufferPtr out); +XMLPUBFUN size_t XMLCALL + xmlOutputBufferGetSize (xmlOutputBufferPtr out); + +XMLPUBFUN int XMLCALL + xmlOutputBufferWrite (xmlOutputBufferPtr out, + int len, + const char *buf); +XMLPUBFUN int XMLCALL + xmlOutputBufferWriteString (xmlOutputBufferPtr out, + const char *str); +XMLPUBFUN int XMLCALL + xmlOutputBufferWriteEscape (xmlOutputBufferPtr out, + const xmlChar *str, + xmlCharEncodingOutputFunc escaping); + +XMLPUBFUN int XMLCALL + xmlOutputBufferFlush (xmlOutputBufferPtr out); +XMLPUBFUN int XMLCALL + xmlOutputBufferClose (xmlOutputBufferPtr out); + +XMLPUBFUN int XMLCALL + xmlRegisterOutputCallbacks (xmlOutputMatchCallback matchFunc, + xmlOutputOpenCallback openFunc, + xmlOutputWriteCallback writeFunc, + xmlOutputCloseCallback closeFunc); + +xmlOutputBufferPtr + __xmlOutputBufferCreateFilename(const char *URI, + xmlCharEncodingHandlerPtr encoder, + int compression); + +#ifdef LIBXML_HTTP_ENABLED +/* This function only exists if HTTP support built into the library */ +XMLPUBFUN void XMLCALL + xmlRegisterHTTPPostCallbacks (void ); +#endif /* LIBXML_HTTP_ENABLED */ + +#endif /* LIBXML_OUTPUT_ENABLED */ + +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); +#ifdef LIBXML_OUTPUT_ENABLED +XMLPUBFUN void * XMLCALL + xmlIOHTTPOpenW (const char * post_uri, + int compression ); +#endif /* LIBXML_OUTPUT_ENABLED */ +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..bf1b131 --- /dev/null +++ b/include/libxml/xmlautomata.h @@ -0,0 +1,146 @@ +/* + * 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 +#include + +#ifdef LIBXML_REGEXP_ENABLED +#ifdef LIBXML_AUTOMATA_ENABLED +#include + +#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 + xmlAutomataNewNegTrans (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 + xmlAutomataNewCountTrans2 (xmlAutomataPtr am, + xmlAutomataStatePtr from, + xmlAutomataStatePtr to, + const xmlChar *token, + const xmlChar *token2, + 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 + xmlAutomataNewOnceTrans2 (xmlAutomataPtr am, + xmlAutomataStatePtr from, + xmlAutomataStatePtr to, + const xmlChar *token, + const xmlChar *token2, + 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 /* LIBXML_REGEXP_ENABLED */ + +#endif /* __XML_AUTOMATA_H__ */ diff --git a/include/libxml/xmlerror.h b/include/libxml/xmlerror.h new file mode 100644 index 0000000..037c16d --- /dev/null +++ b/include/libxml/xmlerror.h @@ -0,0 +1,945 @@ +/* + * Summary: error handling + * Description: the API used to report errors + * + * Copy: See Copyright for the status of this software. + * + * Author: Daniel Veillard + */ + +#include + +#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 HTTP 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 */ + XML_FROM_CHECK, /* The error checking module */ + XML_FROM_WRITER, /* The xmlwriter module */ + XML_FROM_MODULE, /* The dynamically loaded module module*/ + XML_FROM_I18N, /* The module handling character conversion */ + XML_FROM_SCHEMATRONV,/* The Schematron validator module */ + XML_FROM_BUFFER, /* The buffers module */ + XML_FROM_URI /* The URI module */ +} 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; /* error column # or 0 if N/A (todo: rename field when we would brk ABI) */ + void *ctxt; /* the parser context if available */ + void *node; /* the node in the tree */ +}; + +/** + * 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_WAR_SPACE_VALUE, /* 102 */ + XML_ERR_NOT_STANDALONE, /* 103 */ + XML_ERR_ENTITY_PROCESSING, /* 104 */ + XML_ERR_NOTATION_PROCESSING, /* 105 */ + XML_WAR_NS_COLUMN, /* 106 */ + XML_WAR_ENTITY_REDEFINED, /* 107 */ + XML_ERR_UNKNOWN_VERSION, /* 108 */ + XML_ERR_VERSION_MISMATCH, /* 109 */ + XML_ERR_NAME_TOO_LONG, /* 110 */ + XML_ERR_USER_STOP, /* 111 */ + XML_NS_ERR_XML_NAMESPACE = 200, + XML_NS_ERR_UNDEFINED_NAMESPACE, /* 201 */ + XML_NS_ERR_QNAME, /* 202 */ + XML_NS_ERR_ATTRIBUTE_REDEFINED, /* 203 */ + XML_NS_ERR_EMPTY, /* 204 */ + XML_NS_ERR_COLON, /* 205 */ + XML_DTD_ATTRIBUTE_DEFAULT = 500, + XML_DTD_ATTRIBUTE_REDEFINED, /* 501 */ + XML_DTD_ATTRIBUTE_VALUE, /* 502 */ + XML_DTD_CONTENT_ERROR, /* 503 */ + XML_DTD_CONTENT_MODEL, /* 504 */ + XML_DTD_CONTENT_NOT_DETERMINIST, /* 505 */ + XML_DTD_DIFFERENT_PREFIX, /* 506 */ + XML_DTD_ELEM_DEFAULT_NAMESPACE, /* 507 */ + XML_DTD_ELEM_NAMESPACE, /* 508 */ + XML_DTD_ELEM_REDEFINED, /* 509 */ + XML_DTD_EMPTY_NOTATION, /* 510 */ + XML_DTD_ENTITY_TYPE, /* 511 */ + XML_DTD_ID_FIXED, /* 512 */ + XML_DTD_ID_REDEFINED, /* 513 */ + XML_DTD_ID_SUBSET, /* 514 */ + XML_DTD_INVALID_CHILD, /* 515 */ + XML_DTD_INVALID_DEFAULT, /* 516 */ + XML_DTD_LOAD_ERROR, /* 517 */ + XML_DTD_MISSING_ATTRIBUTE, /* 518 */ + XML_DTD_MIXED_CORRUPT, /* 519 */ + XML_DTD_MULTIPLE_ID, /* 520 */ + XML_DTD_NO_DOC, /* 521 */ + XML_DTD_NO_DTD, /* 522 */ + XML_DTD_NO_ELEM_NAME, /* 523 */ + XML_DTD_NO_PREFIX, /* 524 */ + XML_DTD_NO_ROOT, /* 525 */ + XML_DTD_NOTATION_REDEFINED, /* 526 */ + XML_DTD_NOTATION_VALUE, /* 527 */ + XML_DTD_NOT_EMPTY, /* 528 */ + XML_DTD_NOT_PCDATA, /* 529 */ + XML_DTD_NOT_STANDALONE, /* 530 */ + XML_DTD_ROOT_NAME, /* 531 */ + XML_DTD_STANDALONE_WHITE_SPACE, /* 532 */ + XML_DTD_UNKNOWN_ATTRIBUTE, /* 533 */ + XML_DTD_UNKNOWN_ELEM, /* 534 */ + XML_DTD_UNKNOWN_ENTITY, /* 535 */ + XML_DTD_UNKNOWN_ID, /* 536 */ + XML_DTD_UNKNOWN_NOTATION, /* 537 */ + XML_DTD_STANDALONE_DEFAULTED, /* 538 */ + XML_DTD_XMLID_VALUE, /* 539 */ + XML_DTD_XMLID_TYPE, /* 540 */ + XML_DTD_DUP_TOKEN, /* 541 */ + XML_HTML_STRUCURE_ERROR = 800, + XML_HTML_UNKNOWN_TAG, /* 801 */ + XML_RNGP_ANYNAME_ATTR_ANCESTOR = 1000, + XML_RNGP_ATTR_CONFLICT, /* 1001 */ + XML_RNGP_ATTRIBUTE_CHILDREN, /* 1002 */ + XML_RNGP_ATTRIBUTE_CONTENT, /* 1003 */ + XML_RNGP_ATTRIBUTE_EMPTY, /* 1004 */ + XML_RNGP_ATTRIBUTE_NOOP, /* 1005 */ + XML_RNGP_CHOICE_CONTENT, /* 1006 */ + XML_RNGP_CHOICE_EMPTY, /* 1007 */ + XML_RNGP_CREATE_FAILURE, /* 1008 */ + XML_RNGP_DATA_CONTENT, /* 1009 */ + XML_RNGP_DEF_CHOICE_AND_INTERLEAVE, /* 1010 */ + XML_RNGP_DEFINE_CREATE_FAILED, /* 1011 */ + XML_RNGP_DEFINE_EMPTY, /* 1012 */ + XML_RNGP_DEFINE_MISSING, /* 1013 */ + XML_RNGP_DEFINE_NAME_MISSING, /* 1014 */ + XML_RNGP_ELEM_CONTENT_EMPTY, /* 1015 */ + XML_RNGP_ELEM_CONTENT_ERROR, /* 1016 */ + XML_RNGP_ELEMENT_EMPTY, /* 1017 */ + XML_RNGP_ELEMENT_CONTENT, /* 1018 */ + XML_RNGP_ELEMENT_NAME, /* 1019 */ + XML_RNGP_ELEMENT_NO_CONTENT, /* 1020 */ + XML_RNGP_ELEM_TEXT_CONFLICT, /* 1021 */ + XML_RNGP_EMPTY, /* 1022 */ + XML_RNGP_EMPTY_CONSTRUCT, /* 1023 */ + XML_RNGP_EMPTY_CONTENT, /* 1024 */ + XML_RNGP_EMPTY_NOT_EMPTY, /* 1025 */ + XML_RNGP_ERROR_TYPE_LIB, /* 1026 */ + XML_RNGP_EXCEPT_EMPTY, /* 1027 */ + XML_RNGP_EXCEPT_MISSING, /* 1028 */ + XML_RNGP_EXCEPT_MULTIPLE, /* 1029 */ + XML_RNGP_EXCEPT_NO_CONTENT, /* 1030 */ + XML_RNGP_EXTERNALREF_EMTPY, /* 1031 */ + XML_RNGP_EXTERNAL_REF_FAILURE, /* 1032 */ + XML_RNGP_EXTERNALREF_RECURSE, /* 1033 */ + XML_RNGP_FORBIDDEN_ATTRIBUTE, /* 1034 */ + XML_RNGP_FOREIGN_ELEMENT, /* 1035 */ + XML_RNGP_GRAMMAR_CONTENT, /* 1036 */ + XML_RNGP_GRAMMAR_EMPTY, /* 1037 */ + XML_RNGP_GRAMMAR_MISSING, /* 1038 */ + XML_RNGP_GRAMMAR_NO_START, /* 1039 */ + XML_RNGP_GROUP_ATTR_CONFLICT, /* 1040 */ + XML_RNGP_HREF_ERROR, /* 1041 */ + XML_RNGP_INCLUDE_EMPTY, /* 1042 */ + XML_RNGP_INCLUDE_FAILURE, /* 1043 */ + XML_RNGP_INCLUDE_RECURSE, /* 1044 */ + XML_RNGP_INTERLEAVE_ADD, /* 1045 */ + XML_RNGP_INTERLEAVE_CREATE_FAILED, /* 1046 */ + XML_RNGP_INTERLEAVE_EMPTY, /* 1047 */ + XML_RNGP_INTERLEAVE_NO_CONTENT, /* 1048 */ + XML_RNGP_INVALID_DEFINE_NAME, /* 1049 */ + XML_RNGP_INVALID_URI, /* 1050 */ + XML_RNGP_INVALID_VALUE, /* 1051 */ + XML_RNGP_MISSING_HREF, /* 1052 */ + XML_RNGP_NAME_MISSING, /* 1053 */ + XML_RNGP_NEED_COMBINE, /* 1054 */ + XML_RNGP_NOTALLOWED_NOT_EMPTY, /* 1055 */ + XML_RNGP_NSNAME_ATTR_ANCESTOR, /* 1056 */ + XML_RNGP_NSNAME_NO_NS, /* 1057 */ + XML_RNGP_PARAM_FORBIDDEN, /* 1058 */ + XML_RNGP_PARAM_NAME_MISSING, /* 1059 */ + XML_RNGP_PARENTREF_CREATE_FAILED, /* 1060 */ + XML_RNGP_PARENTREF_NAME_INVALID, /* 1061 */ + XML_RNGP_PARENTREF_NO_NAME, /* 1062 */ + XML_RNGP_PARENTREF_NO_PARENT, /* 1063 */ + XML_RNGP_PARENTREF_NOT_EMPTY, /* 1064 */ + XML_RNGP_PARSE_ERROR, /* 1065 */ + XML_RNGP_PAT_ANYNAME_EXCEPT_ANYNAME, /* 1066 */ + XML_RNGP_PAT_ATTR_ATTR, /* 1067 */ + XML_RNGP_PAT_ATTR_ELEM, /* 1068 */ + XML_RNGP_PAT_DATA_EXCEPT_ATTR, /* 1069 */ + XML_RNGP_PAT_DATA_EXCEPT_ELEM, /* 1070 */ + XML_RNGP_PAT_DATA_EXCEPT_EMPTY, /* 1071 */ + XML_RNGP_PAT_DATA_EXCEPT_GROUP, /* 1072 */ + XML_RNGP_PAT_DATA_EXCEPT_INTERLEAVE, /* 1073 */ + XML_RNGP_PAT_DATA_EXCEPT_LIST, /* 1074 */ + XML_RNGP_PAT_DATA_EXCEPT_ONEMORE, /* 1075 */ + XML_RNGP_PAT_DATA_EXCEPT_REF, /* 1076 */ + XML_RNGP_PAT_DATA_EXCEPT_TEXT, /* 1077 */ + XML_RNGP_PAT_LIST_ATTR, /* 1078 */ + XML_RNGP_PAT_LIST_ELEM, /* 1079 */ + XML_RNGP_PAT_LIST_INTERLEAVE, /* 1080 */ + XML_RNGP_PAT_LIST_LIST, /* 1081 */ + XML_RNGP_PAT_LIST_REF, /* 1082 */ + XML_RNGP_PAT_LIST_TEXT, /* 1083 */ + XML_RNGP_PAT_NSNAME_EXCEPT_ANYNAME, /* 1084 */ + XML_RNGP_PAT_NSNAME_EXCEPT_NSNAME, /* 1085 */ + XML_RNGP_PAT_ONEMORE_GROUP_ATTR, /* 1086 */ + XML_RNGP_PAT_ONEMORE_INTERLEAVE_ATTR, /* 1087 */ + XML_RNGP_PAT_START_ATTR, /* 1088 */ + XML_RNGP_PAT_START_DATA, /* 1089 */ + XML_RNGP_PAT_START_EMPTY, /* 1090 */ + XML_RNGP_PAT_START_GROUP, /* 1091 */ + XML_RNGP_PAT_START_INTERLEAVE, /* 1092 */ + XML_RNGP_PAT_START_LIST, /* 1093 */ + XML_RNGP_PAT_START_ONEMORE, /* 1094 */ + XML_RNGP_PAT_START_TEXT, /* 1095 */ + XML_RNGP_PAT_START_VALUE, /* 1096 */ + XML_RNGP_PREFIX_UNDEFINED, /* 1097 */ + XML_RNGP_REF_CREATE_FAILED, /* 1098 */ + XML_RNGP_REF_CYCLE, /* 1099 */ + XML_RNGP_REF_NAME_INVALID, /* 1100 */ + XML_RNGP_REF_NO_DEF, /* 1101 */ + XML_RNGP_REF_NO_NAME, /* 1102 */ + XML_RNGP_REF_NOT_EMPTY, /* 1103 */ + XML_RNGP_START_CHOICE_AND_INTERLEAVE, /* 1104 */ + XML_RNGP_START_CONTENT, /* 1105 */ + XML_RNGP_START_EMPTY, /* 1106 */ + XML_RNGP_START_MISSING, /* 1107 */ + XML_RNGP_TEXT_EXPECTED, /* 1108 */ + XML_RNGP_TEXT_HAS_CHILD, /* 1109 */ + XML_RNGP_TYPE_MISSING, /* 1110 */ + XML_RNGP_TYPE_NOT_FOUND, /* 1111 */ + XML_RNGP_TYPE_VALUE, /* 1112 */ + XML_RNGP_UNKNOWN_ATTRIBUTE, /* 1113 */ + XML_RNGP_UNKNOWN_COMBINE, /* 1114 */ + XML_RNGP_UNKNOWN_CONSTRUCT, /* 1115 */ + XML_RNGP_UNKNOWN_TYPE_LIB, /* 1116 */ + XML_RNGP_URI_FRAGMENT, /* 1117 */ + XML_RNGP_URI_NOT_ABSOLUTE, /* 1118 */ + XML_RNGP_VALUE_EMPTY, /* 1119 */ + XML_RNGP_VALUE_NO_CONTENT, /* 1120 */ + XML_RNGP_XMLNS_NAME, /* 1121 */ + XML_RNGP_XML_NS, /* 1122 */ + XML_XPATH_EXPRESSION_OK = 1200, + XML_XPATH_NUMBER_ERROR, /* 1201 */ + XML_XPATH_UNFINISHED_LITERAL_ERROR, /* 1202 */ + XML_XPATH_START_LITERAL_ERROR, /* 1203 */ + XML_XPATH_VARIABLE_REF_ERROR, /* 1204 */ + XML_XPATH_UNDEF_VARIABLE_ERROR, /* 1205 */ + XML_XPATH_INVALID_PREDICATE_ERROR, /* 1206 */ + XML_XPATH_EXPR_ERROR, /* 1207 */ + XML_XPATH_UNCLOSED_ERROR, /* 1208 */ + XML_XPATH_UNKNOWN_FUNC_ERROR, /* 1209 */ + XML_XPATH_INVALID_OPERAND, /* 1210 */ + XML_XPATH_INVALID_TYPE, /* 1211 */ + XML_XPATH_INVALID_ARITY, /* 1212 */ + XML_XPATH_INVALID_CTXT_SIZE, /* 1213 */ + XML_XPATH_INVALID_CTXT_POSITION, /* 1214 */ + XML_XPATH_MEMORY_ERROR, /* 1215 */ + XML_XPTR_SYNTAX_ERROR, /* 1216 */ + XML_XPTR_RESOURCE_ERROR, /* 1217 */ + XML_XPTR_SUB_RESOURCE_ERROR, /* 1218 */ + XML_XPATH_UNDEF_PREFIX_ERROR, /* 1219 */ + XML_XPATH_ENCODING_ERROR, /* 1220 */ + XML_XPATH_INVALID_CHAR_ERROR, /* 1221 */ + XML_TREE_INVALID_HEX = 1300, + XML_TREE_INVALID_DEC, /* 1301 */ + XML_TREE_UNTERMINATED_ENTITY, /* 1302 */ + XML_TREE_NOT_UTF8, /* 1303 */ + XML_SAVE_NOT_UTF8 = 1400, + XML_SAVE_CHAR_INVALID, /* 1401 */ + XML_SAVE_NO_DOCTYPE, /* 1402 */ + XML_SAVE_UNKNOWN_ENCODING, /* 1403 */ + XML_REGEXP_COMPILE_ERROR = 1450, + XML_IO_UNKNOWN = 1500, + XML_IO_EACCES, /* 1501 */ + XML_IO_EAGAIN, /* 1502 */ + XML_IO_EBADF, /* 1503 */ + XML_IO_EBADMSG, /* 1504 */ + XML_IO_EBUSY, /* 1505 */ + XML_IO_ECANCELED, /* 1506 */ + XML_IO_ECHILD, /* 1507 */ + XML_IO_EDEADLK, /* 1508 */ + XML_IO_EDOM, /* 1509 */ + XML_IO_EEXIST, /* 1510 */ + XML_IO_EFAULT, /* 1511 */ + XML_IO_EFBIG, /* 1512 */ + XML_IO_EINPROGRESS, /* 1513 */ + XML_IO_EINTR, /* 1514 */ + XML_IO_EINVAL, /* 1515 */ + XML_IO_EIO, /* 1516 */ + XML_IO_EISDIR, /* 1517 */ + XML_IO_EMFILE, /* 1518 */ + XML_IO_EMLINK, /* 1519 */ + XML_IO_EMSGSIZE, /* 1520 */ + XML_IO_ENAMETOOLONG, /* 1521 */ + XML_IO_ENFILE, /* 1522 */ + XML_IO_ENODEV, /* 1523 */ + XML_IO_ENOENT, /* 1524 */ + XML_IO_ENOEXEC, /* 1525 */ + XML_IO_ENOLCK, /* 1526 */ + XML_IO_ENOMEM, /* 1527 */ + XML_IO_ENOSPC, /* 1528 */ + XML_IO_ENOSYS, /* 1529 */ + XML_IO_ENOTDIR, /* 1530 */ + XML_IO_ENOTEMPTY, /* 1531 */ + XML_IO_ENOTSUP, /* 1532 */ + XML_IO_ENOTTY, /* 1533 */ + XML_IO_ENXIO, /* 1534 */ + XML_IO_EPERM, /* 1535 */ + XML_IO_EPIPE, /* 1536 */ + XML_IO_ERANGE, /* 1537 */ + XML_IO_EROFS, /* 1538 */ + XML_IO_ESPIPE, /* 1539 */ + XML_IO_ESRCH, /* 1540 */ + XML_IO_ETIMEDOUT, /* 1541 */ + XML_IO_EXDEV, /* 1542 */ + XML_IO_NETWORK_ATTEMPT, /* 1543 */ + XML_IO_ENCODER, /* 1544 */ + XML_IO_FLUSH, /* 1545 */ + XML_IO_WRITE, /* 1546 */ + XML_IO_NO_INPUT, /* 1547 */ + XML_IO_BUFFER_FULL, /* 1548 */ + XML_IO_LOAD_ERROR, /* 1549 */ + XML_IO_ENOTSOCK, /* 1550 */ + XML_IO_EISCONN, /* 1551 */ + XML_IO_ECONNREFUSED, /* 1552 */ + XML_IO_ENETUNREACH, /* 1553 */ + XML_IO_EADDRINUSE, /* 1554 */ + XML_IO_EALREADY, /* 1555 */ + XML_IO_EAFNOSUPPORT, /* 1556 */ + XML_XINCLUDE_RECURSION=1600, + XML_XINCLUDE_PARSE_VALUE, /* 1601 */ + XML_XINCLUDE_ENTITY_DEF_MISMATCH, /* 1602 */ + XML_XINCLUDE_NO_HREF, /* 1603 */ + XML_XINCLUDE_NO_FALLBACK, /* 1604 */ + XML_XINCLUDE_HREF_URI, /* 1605 */ + XML_XINCLUDE_TEXT_FRAGMENT, /* 1606 */ + XML_XINCLUDE_TEXT_DOCUMENT, /* 1607 */ + XML_XINCLUDE_INVALID_CHAR, /* 1608 */ + XML_XINCLUDE_BUILD_FAILED, /* 1609 */ + XML_XINCLUDE_UNKNOWN_ENCODING, /* 1610 */ + XML_XINCLUDE_MULTIPLE_ROOT, /* 1611 */ + XML_XINCLUDE_XPTR_FAILED, /* 1612 */ + XML_XINCLUDE_XPTR_RESULT, /* 1613 */ + XML_XINCLUDE_INCLUDE_IN_INCLUDE, /* 1614 */ + XML_XINCLUDE_FALLBACKS_IN_INCLUDE, /* 1615 */ + XML_XINCLUDE_FALLBACK_NOT_IN_INCLUDE, /* 1616 */ + XML_XINCLUDE_DEPRECATED_NS, /* 1617 */ + XML_XINCLUDE_FRAGMENT_ID, /* 1618 */ + XML_CATALOG_MISSING_ATTR = 1650, + XML_CATALOG_ENTRY_BROKEN, /* 1651 */ + XML_CATALOG_PREFER_VALUE, /* 1652 */ + XML_CATALOG_NOT_CATALOG, /* 1653 */ + XML_CATALOG_RECURSION, /* 1654 */ + XML_SCHEMAP_PREFIX_UNDEFINED = 1700, + XML_SCHEMAP_ATTRFORMDEFAULT_VALUE, /* 1701 */ + XML_SCHEMAP_ATTRGRP_NONAME_NOREF, /* 1702 */ + XML_SCHEMAP_ATTR_NONAME_NOREF, /* 1703 */ + XML_SCHEMAP_COMPLEXTYPE_NONAME_NOREF, /* 1704 */ + XML_SCHEMAP_ELEMFORMDEFAULT_VALUE, /* 1705 */ + XML_SCHEMAP_ELEM_NONAME_NOREF, /* 1706 */ + XML_SCHEMAP_EXTENSION_NO_BASE, /* 1707 */ + XML_SCHEMAP_FACET_NO_VALUE, /* 1708 */ + XML_SCHEMAP_FAILED_BUILD_IMPORT, /* 1709 */ + XML_SCHEMAP_GROUP_NONAME_NOREF, /* 1710 */ + XML_SCHEMAP_IMPORT_NAMESPACE_NOT_URI, /* 1711 */ + XML_SCHEMAP_IMPORT_REDEFINE_NSNAME, /* 1712 */ + XML_SCHEMAP_IMPORT_SCHEMA_NOT_URI, /* 1713 */ + XML_SCHEMAP_INVALID_BOOLEAN, /* 1714 */ + XML_SCHEMAP_INVALID_ENUM, /* 1715 */ + XML_SCHEMAP_INVALID_FACET, /* 1716 */ + XML_SCHEMAP_INVALID_FACET_VALUE, /* 1717 */ + XML_SCHEMAP_INVALID_MAXOCCURS, /* 1718 */ + XML_SCHEMAP_INVALID_MINOCCURS, /* 1719 */ + XML_SCHEMAP_INVALID_REF_AND_SUBTYPE, /* 1720 */ + XML_SCHEMAP_INVALID_WHITE_SPACE, /* 1721 */ + XML_SCHEMAP_NOATTR_NOREF, /* 1722 */ + XML_SCHEMAP_NOTATION_NO_NAME, /* 1723 */ + XML_SCHEMAP_NOTYPE_NOREF, /* 1724 */ + XML_SCHEMAP_REF_AND_SUBTYPE, /* 1725 */ + XML_SCHEMAP_RESTRICTION_NONAME_NOREF, /* 1726 */ + XML_SCHEMAP_SIMPLETYPE_NONAME, /* 1727 */ + XML_SCHEMAP_TYPE_AND_SUBTYPE, /* 1728 */ + XML_SCHEMAP_UNKNOWN_ALL_CHILD, /* 1729 */ + XML_SCHEMAP_UNKNOWN_ANYATTRIBUTE_CHILD, /* 1730 */ + XML_SCHEMAP_UNKNOWN_ATTR_CHILD, /* 1731 */ + XML_SCHEMAP_UNKNOWN_ATTRGRP_CHILD, /* 1732 */ + XML_SCHEMAP_UNKNOWN_ATTRIBUTE_GROUP, /* 1733 */ + XML_SCHEMAP_UNKNOWN_BASE_TYPE, /* 1734 */ + XML_SCHEMAP_UNKNOWN_CHOICE_CHILD, /* 1735 */ + XML_SCHEMAP_UNKNOWN_COMPLEXCONTENT_CHILD, /* 1736 */ + XML_SCHEMAP_UNKNOWN_COMPLEXTYPE_CHILD, /* 1737 */ + XML_SCHEMAP_UNKNOWN_ELEM_CHILD, /* 1738 */ + XML_SCHEMAP_UNKNOWN_EXTENSION_CHILD, /* 1739 */ + XML_SCHEMAP_UNKNOWN_FACET_CHILD, /* 1740 */ + XML_SCHEMAP_UNKNOWN_FACET_TYPE, /* 1741 */ + XML_SCHEMAP_UNKNOWN_GROUP_CHILD, /* 1742 */ + XML_SCHEMAP_UNKNOWN_IMPORT_CHILD, /* 1743 */ + XML_SCHEMAP_UNKNOWN_LIST_CHILD, /* 1744 */ + XML_SCHEMAP_UNKNOWN_NOTATION_CHILD, /* 1745 */ + XML_SCHEMAP_UNKNOWN_PROCESSCONTENT_CHILD, /* 1746 */ + XML_SCHEMAP_UNKNOWN_REF, /* 1747 */ + XML_SCHEMAP_UNKNOWN_RESTRICTION_CHILD, /* 1748 */ + XML_SCHEMAP_UNKNOWN_SCHEMAS_CHILD, /* 1749 */ + XML_SCHEMAP_UNKNOWN_SEQUENCE_CHILD, /* 1750 */ + XML_SCHEMAP_UNKNOWN_SIMPLECONTENT_CHILD, /* 1751 */ + XML_SCHEMAP_UNKNOWN_SIMPLETYPE_CHILD, /* 1752 */ + XML_SCHEMAP_UNKNOWN_TYPE, /* 1753 */ + XML_SCHEMAP_UNKNOWN_UNION_CHILD, /* 1754 */ + XML_SCHEMAP_ELEM_DEFAULT_FIXED, /* 1755 */ + XML_SCHEMAP_REGEXP_INVALID, /* 1756 */ + XML_SCHEMAP_FAILED_LOAD, /* 1757 */ + XML_SCHEMAP_NOTHING_TO_PARSE, /* 1758 */ + XML_SCHEMAP_NOROOT, /* 1759 */ + XML_SCHEMAP_REDEFINED_GROUP, /* 1760 */ + XML_SCHEMAP_REDEFINED_TYPE, /* 1761 */ + XML_SCHEMAP_REDEFINED_ELEMENT, /* 1762 */ + XML_SCHEMAP_REDEFINED_ATTRGROUP, /* 1763 */ + XML_SCHEMAP_REDEFINED_ATTR, /* 1764 */ + XML_SCHEMAP_REDEFINED_NOTATION, /* 1765 */ + XML_SCHEMAP_FAILED_PARSE, /* 1766 */ + XML_SCHEMAP_UNKNOWN_PREFIX, /* 1767 */ + XML_SCHEMAP_DEF_AND_PREFIX, /* 1768 */ + XML_SCHEMAP_UNKNOWN_INCLUDE_CHILD, /* 1769 */ + XML_SCHEMAP_INCLUDE_SCHEMA_NOT_URI, /* 1770 */ + XML_SCHEMAP_INCLUDE_SCHEMA_NO_URI, /* 1771 */ + XML_SCHEMAP_NOT_SCHEMA, /* 1772 */ + XML_SCHEMAP_UNKNOWN_MEMBER_TYPE, /* 1773 */ + XML_SCHEMAP_INVALID_ATTR_USE, /* 1774 */ + XML_SCHEMAP_RECURSIVE, /* 1775 */ + XML_SCHEMAP_SUPERNUMEROUS_LIST_ITEM_TYPE, /* 1776 */ + XML_SCHEMAP_INVALID_ATTR_COMBINATION, /* 1777 */ + XML_SCHEMAP_INVALID_ATTR_INLINE_COMBINATION, /* 1778 */ + XML_SCHEMAP_MISSING_SIMPLETYPE_CHILD, /* 1779 */ + XML_SCHEMAP_INVALID_ATTR_NAME, /* 1780 */ + XML_SCHEMAP_REF_AND_CONTENT, /* 1781 */ + XML_SCHEMAP_CT_PROPS_CORRECT_1, /* 1782 */ + XML_SCHEMAP_CT_PROPS_CORRECT_2, /* 1783 */ + XML_SCHEMAP_CT_PROPS_CORRECT_3, /* 1784 */ + XML_SCHEMAP_CT_PROPS_CORRECT_4, /* 1785 */ + XML_SCHEMAP_CT_PROPS_CORRECT_5, /* 1786 */ + XML_SCHEMAP_DERIVATION_OK_RESTRICTION_1, /* 1787 */ + XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_1, /* 1788 */ + XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_2, /* 1789 */ + XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_2, /* 1790 */ + XML_SCHEMAP_DERIVATION_OK_RESTRICTION_3, /* 1791 */ + XML_SCHEMAP_WILDCARD_INVALID_NS_MEMBER, /* 1792 */ + XML_SCHEMAP_INTERSECTION_NOT_EXPRESSIBLE, /* 1793 */ + XML_SCHEMAP_UNION_NOT_EXPRESSIBLE, /* 1794 */ + XML_SCHEMAP_SRC_IMPORT_3_1, /* 1795 */ + XML_SCHEMAP_SRC_IMPORT_3_2, /* 1796 */ + XML_SCHEMAP_DERIVATION_OK_RESTRICTION_4_1, /* 1797 */ + XML_SCHEMAP_DERIVATION_OK_RESTRICTION_4_2, /* 1798 */ + XML_SCHEMAP_DERIVATION_OK_RESTRICTION_4_3, /* 1799 */ + XML_SCHEMAP_COS_CT_EXTENDS_1_3, /* 1800 */ + XML_SCHEMAV_NOROOT = 1801, + XML_SCHEMAV_UNDECLAREDELEM, /* 1802 */ + XML_SCHEMAV_NOTTOPLEVEL, /* 1803 */ + XML_SCHEMAV_MISSING, /* 1804 */ + XML_SCHEMAV_WRONGELEM, /* 1805 */ + XML_SCHEMAV_NOTYPE, /* 1806 */ + XML_SCHEMAV_NOROLLBACK, /* 1807 */ + XML_SCHEMAV_ISABSTRACT, /* 1808 */ + XML_SCHEMAV_NOTEMPTY, /* 1809 */ + XML_SCHEMAV_ELEMCONT, /* 1810 */ + XML_SCHEMAV_HAVEDEFAULT, /* 1811 */ + XML_SCHEMAV_NOTNILLABLE, /* 1812 */ + XML_SCHEMAV_EXTRACONTENT, /* 1813 */ + XML_SCHEMAV_INVALIDATTR, /* 1814 */ + XML_SCHEMAV_INVALIDELEM, /* 1815 */ + XML_SCHEMAV_NOTDETERMINIST, /* 1816 */ + XML_SCHEMAV_CONSTRUCT, /* 1817 */ + XML_SCHEMAV_INTERNAL, /* 1818 */ + XML_SCHEMAV_NOTSIMPLE, /* 1819 */ + XML_SCHEMAV_ATTRUNKNOWN, /* 1820 */ + XML_SCHEMAV_ATTRINVALID, /* 1821 */ + XML_SCHEMAV_VALUE, /* 1822 */ + XML_SCHEMAV_FACET, /* 1823 */ + XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_1, /* 1824 */ + XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_2, /* 1825 */ + XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_3, /* 1826 */ + XML_SCHEMAV_CVC_TYPE_3_1_1, /* 1827 */ + XML_SCHEMAV_CVC_TYPE_3_1_2, /* 1828 */ + XML_SCHEMAV_CVC_FACET_VALID, /* 1829 */ + XML_SCHEMAV_CVC_LENGTH_VALID, /* 1830 */ + XML_SCHEMAV_CVC_MINLENGTH_VALID, /* 1831 */ + XML_SCHEMAV_CVC_MAXLENGTH_VALID, /* 1832 */ + XML_SCHEMAV_CVC_MININCLUSIVE_VALID, /* 1833 */ + XML_SCHEMAV_CVC_MAXINCLUSIVE_VALID, /* 1834 */ + XML_SCHEMAV_CVC_MINEXCLUSIVE_VALID, /* 1835 */ + XML_SCHEMAV_CVC_MAXEXCLUSIVE_VALID, /* 1836 */ + XML_SCHEMAV_CVC_TOTALDIGITS_VALID, /* 1837 */ + XML_SCHEMAV_CVC_FRACTIONDIGITS_VALID, /* 1838 */ + XML_SCHEMAV_CVC_PATTERN_VALID, /* 1839 */ + XML_SCHEMAV_CVC_ENUMERATION_VALID, /* 1840 */ + XML_SCHEMAV_CVC_COMPLEX_TYPE_2_1, /* 1841 */ + XML_SCHEMAV_CVC_COMPLEX_TYPE_2_2, /* 1842 */ + XML_SCHEMAV_CVC_COMPLEX_TYPE_2_3, /* 1843 */ + XML_SCHEMAV_CVC_COMPLEX_TYPE_2_4, /* 1844 */ + XML_SCHEMAV_CVC_ELT_1, /* 1845 */ + XML_SCHEMAV_CVC_ELT_2, /* 1846 */ + XML_SCHEMAV_CVC_ELT_3_1, /* 1847 */ + XML_SCHEMAV_CVC_ELT_3_2_1, /* 1848 */ + XML_SCHEMAV_CVC_ELT_3_2_2, /* 1849 */ + XML_SCHEMAV_CVC_ELT_4_1, /* 1850 */ + XML_SCHEMAV_CVC_ELT_4_2, /* 1851 */ + XML_SCHEMAV_CVC_ELT_4_3, /* 1852 */ + XML_SCHEMAV_CVC_ELT_5_1_1, /* 1853 */ + XML_SCHEMAV_CVC_ELT_5_1_2, /* 1854 */ + XML_SCHEMAV_CVC_ELT_5_2_1, /* 1855 */ + XML_SCHEMAV_CVC_ELT_5_2_2_1, /* 1856 */ + XML_SCHEMAV_CVC_ELT_5_2_2_2_1, /* 1857 */ + XML_SCHEMAV_CVC_ELT_5_2_2_2_2, /* 1858 */ + XML_SCHEMAV_CVC_ELT_6, /* 1859 */ + XML_SCHEMAV_CVC_ELT_7, /* 1860 */ + XML_SCHEMAV_CVC_ATTRIBUTE_1, /* 1861 */ + XML_SCHEMAV_CVC_ATTRIBUTE_2, /* 1862 */ + XML_SCHEMAV_CVC_ATTRIBUTE_3, /* 1863 */ + XML_SCHEMAV_CVC_ATTRIBUTE_4, /* 1864 */ + XML_SCHEMAV_CVC_COMPLEX_TYPE_3_1, /* 1865 */ + XML_SCHEMAV_CVC_COMPLEX_TYPE_3_2_1, /* 1866 */ + XML_SCHEMAV_CVC_COMPLEX_TYPE_3_2_2, /* 1867 */ + XML_SCHEMAV_CVC_COMPLEX_TYPE_4, /* 1868 */ + XML_SCHEMAV_CVC_COMPLEX_TYPE_5_1, /* 1869 */ + XML_SCHEMAV_CVC_COMPLEX_TYPE_5_2, /* 1870 */ + XML_SCHEMAV_ELEMENT_CONTENT, /* 1871 */ + XML_SCHEMAV_DOCUMENT_ELEMENT_MISSING, /* 1872 */ + XML_SCHEMAV_CVC_COMPLEX_TYPE_1, /* 1873 */ + XML_SCHEMAV_CVC_AU, /* 1874 */ + XML_SCHEMAV_CVC_TYPE_1, /* 1875 */ + XML_SCHEMAV_CVC_TYPE_2, /* 1876 */ + XML_SCHEMAV_CVC_IDC, /* 1877 */ + XML_SCHEMAV_CVC_WILDCARD, /* 1878 */ + XML_SCHEMAV_MISC, /* 1879 */ + XML_XPTR_UNKNOWN_SCHEME = 1900, + XML_XPTR_CHILDSEQ_START, /* 1901 */ + XML_XPTR_EVAL_FAILED, /* 1902 */ + XML_XPTR_EXTRA_OBJECTS, /* 1903 */ + XML_C14N_CREATE_CTXT = 1950, + XML_C14N_REQUIRES_UTF8, /* 1951 */ + XML_C14N_CREATE_STACK, /* 1952 */ + XML_C14N_INVALID_NODE, /* 1953 */ + XML_C14N_UNKNOW_NODE, /* 1954 */ + XML_C14N_RELATIVE_NAMESPACE, /* 1955 */ + XML_FTP_PASV_ANSWER = 2000, + XML_FTP_EPSV_ANSWER, /* 2001 */ + XML_FTP_ACCNT, /* 2002 */ + XML_FTP_URL_SYNTAX, /* 2003 */ + XML_HTTP_URL_SYNTAX = 2020, + XML_HTTP_USE_IP, /* 2021 */ + XML_HTTP_UNKNOWN_HOST, /* 2022 */ + XML_SCHEMAP_SRC_SIMPLE_TYPE_1 = 3000, + XML_SCHEMAP_SRC_SIMPLE_TYPE_2, /* 3001 */ + XML_SCHEMAP_SRC_SIMPLE_TYPE_3, /* 3002 */ + XML_SCHEMAP_SRC_SIMPLE_TYPE_4, /* 3003 */ + XML_SCHEMAP_SRC_RESOLVE, /* 3004 */ + XML_SCHEMAP_SRC_RESTRICTION_BASE_OR_SIMPLETYPE, /* 3005 */ + XML_SCHEMAP_SRC_LIST_ITEMTYPE_OR_SIMPLETYPE, /* 3006 */ + XML_SCHEMAP_SRC_UNION_MEMBERTYPES_OR_SIMPLETYPES, /* 3007 */ + XML_SCHEMAP_ST_PROPS_CORRECT_1, /* 3008 */ + XML_SCHEMAP_ST_PROPS_CORRECT_2, /* 3009 */ + XML_SCHEMAP_ST_PROPS_CORRECT_3, /* 3010 */ + XML_SCHEMAP_COS_ST_RESTRICTS_1_1, /* 3011 */ + XML_SCHEMAP_COS_ST_RESTRICTS_1_2, /* 3012 */ + XML_SCHEMAP_COS_ST_RESTRICTS_1_3_1, /* 3013 */ + XML_SCHEMAP_COS_ST_RESTRICTS_1_3_2, /* 3014 */ + XML_SCHEMAP_COS_ST_RESTRICTS_2_1, /* 3015 */ + XML_SCHEMAP_COS_ST_RESTRICTS_2_3_1_1, /* 3016 */ + XML_SCHEMAP_COS_ST_RESTRICTS_2_3_1_2, /* 3017 */ + XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_1, /* 3018 */ + XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_2, /* 3019 */ + XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_3, /* 3020 */ + XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_4, /* 3021 */ + XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_5, /* 3022 */ + XML_SCHEMAP_COS_ST_RESTRICTS_3_1, /* 3023 */ + XML_SCHEMAP_COS_ST_RESTRICTS_3_3_1, /* 3024 */ + XML_SCHEMAP_COS_ST_RESTRICTS_3_3_1_2, /* 3025 */ + XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_2, /* 3026 */ + XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_1, /* 3027 */ + XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_3, /* 3028 */ + XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_4, /* 3029 */ + XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_5, /* 3030 */ + XML_SCHEMAP_COS_ST_DERIVED_OK_2_1, /* 3031 */ + XML_SCHEMAP_COS_ST_DERIVED_OK_2_2, /* 3032 */ + XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED, /* 3033 */ + XML_SCHEMAP_S4S_ELEM_MISSING, /* 3034 */ + XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, /* 3035 */ + XML_SCHEMAP_S4S_ATTR_MISSING, /* 3036 */ + XML_SCHEMAP_S4S_ATTR_INVALID_VALUE, /* 3037 */ + XML_SCHEMAP_SRC_ELEMENT_1, /* 3038 */ + XML_SCHEMAP_SRC_ELEMENT_2_1, /* 3039 */ + XML_SCHEMAP_SRC_ELEMENT_2_2, /* 3040 */ + XML_SCHEMAP_SRC_ELEMENT_3, /* 3041 */ + XML_SCHEMAP_P_PROPS_CORRECT_1, /* 3042 */ + XML_SCHEMAP_P_PROPS_CORRECT_2_1, /* 3043 */ + XML_SCHEMAP_P_PROPS_CORRECT_2_2, /* 3044 */ + XML_SCHEMAP_E_PROPS_CORRECT_2, /* 3045 */ + XML_SCHEMAP_E_PROPS_CORRECT_3, /* 3046 */ + XML_SCHEMAP_E_PROPS_CORRECT_4, /* 3047 */ + XML_SCHEMAP_E_PROPS_CORRECT_5, /* 3048 */ + XML_SCHEMAP_E_PROPS_CORRECT_6, /* 3049 */ + XML_SCHEMAP_SRC_INCLUDE, /* 3050 */ + XML_SCHEMAP_SRC_ATTRIBUTE_1, /* 3051 */ + XML_SCHEMAP_SRC_ATTRIBUTE_2, /* 3052 */ + XML_SCHEMAP_SRC_ATTRIBUTE_3_1, /* 3053 */ + XML_SCHEMAP_SRC_ATTRIBUTE_3_2, /* 3054 */ + XML_SCHEMAP_SRC_ATTRIBUTE_4, /* 3055 */ + XML_SCHEMAP_NO_XMLNS, /* 3056 */ + XML_SCHEMAP_NO_XSI, /* 3057 */ + XML_SCHEMAP_COS_VALID_DEFAULT_1, /* 3058 */ + XML_SCHEMAP_COS_VALID_DEFAULT_2_1, /* 3059 */ + XML_SCHEMAP_COS_VALID_DEFAULT_2_2_1, /* 3060 */ + XML_SCHEMAP_COS_VALID_DEFAULT_2_2_2, /* 3061 */ + XML_SCHEMAP_CVC_SIMPLE_TYPE, /* 3062 */ + XML_SCHEMAP_COS_CT_EXTENDS_1_1, /* 3063 */ + XML_SCHEMAP_SRC_IMPORT_1_1, /* 3064 */ + XML_SCHEMAP_SRC_IMPORT_1_2, /* 3065 */ + XML_SCHEMAP_SRC_IMPORT_2, /* 3066 */ + XML_SCHEMAP_SRC_IMPORT_2_1, /* 3067 */ + XML_SCHEMAP_SRC_IMPORT_2_2, /* 3068 */ + XML_SCHEMAP_INTERNAL, /* 3069 non-W3C */ + XML_SCHEMAP_NOT_DETERMINISTIC, /* 3070 non-W3C */ + XML_SCHEMAP_SRC_ATTRIBUTE_GROUP_1, /* 3071 */ + XML_SCHEMAP_SRC_ATTRIBUTE_GROUP_2, /* 3072 */ + XML_SCHEMAP_SRC_ATTRIBUTE_GROUP_3, /* 3073 */ + XML_SCHEMAP_MG_PROPS_CORRECT_1, /* 3074 */ + XML_SCHEMAP_MG_PROPS_CORRECT_2, /* 3075 */ + XML_SCHEMAP_SRC_CT_1, /* 3076 */ + XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_3, /* 3077 */ + XML_SCHEMAP_AU_PROPS_CORRECT_2, /* 3078 */ + XML_SCHEMAP_A_PROPS_CORRECT_2, /* 3079 */ + XML_SCHEMAP_C_PROPS_CORRECT, /* 3080 */ + XML_SCHEMAP_SRC_REDEFINE, /* 3081 */ + XML_SCHEMAP_SRC_IMPORT, /* 3082 */ + XML_SCHEMAP_WARN_SKIP_SCHEMA, /* 3083 */ + XML_SCHEMAP_WARN_UNLOCATED_SCHEMA, /* 3084 */ + XML_SCHEMAP_WARN_ATTR_REDECL_PROH, /* 3085 */ + XML_SCHEMAP_WARN_ATTR_POINTLESS_PROH, /* 3085 */ + XML_SCHEMAP_AG_PROPS_CORRECT, /* 3086 */ + XML_SCHEMAP_COS_CT_EXTENDS_1_2, /* 3087 */ + XML_SCHEMAP_AU_PROPS_CORRECT, /* 3088 */ + XML_SCHEMAP_A_PROPS_CORRECT_3, /* 3089 */ + XML_SCHEMAP_COS_ALL_LIMITED, /* 3090 */ + XML_SCHEMATRONV_ASSERT = 4000, /* 4000 */ + XML_SCHEMATRONV_REPORT, + XML_MODULE_OPEN = 4900, /* 4900 */ + XML_MODULE_CLOSE, /* 4901 */ + XML_CHECK_FOUND_ELEMENT = 5000, + XML_CHECK_FOUND_ATTRIBUTE, /* 5001 */ + XML_CHECK_FOUND_TEXT, /* 5002 */ + XML_CHECK_FOUND_CDATA, /* 5003 */ + XML_CHECK_FOUND_ENTITYREF, /* 5004 */ + XML_CHECK_FOUND_ENTITY, /* 5005 */ + XML_CHECK_FOUND_PI, /* 5006 */ + XML_CHECK_FOUND_COMMENT, /* 5007 */ + XML_CHECK_FOUND_DOCTYPE, /* 5008 */ + XML_CHECK_FOUND_FRAGMENT, /* 5009 */ + XML_CHECK_FOUND_NOTATION, /* 5010 */ + XML_CHECK_UNKNOWN_NODE, /* 5011 */ + XML_CHECK_ENTITY_TYPE, /* 5012 */ + XML_CHECK_NO_PARENT, /* 5013 */ + XML_CHECK_NO_DOC, /* 5014 */ + XML_CHECK_NO_NAME, /* 5015 */ + XML_CHECK_NO_ELEM, /* 5016 */ + XML_CHECK_WRONG_DOC, /* 5017 */ + XML_CHECK_NO_PREV, /* 5018 */ + XML_CHECK_WRONG_PREV, /* 5019 */ + XML_CHECK_NO_NEXT, /* 5020 */ + XML_CHECK_WRONG_NEXT, /* 5021 */ + XML_CHECK_NOT_DTD, /* 5022 */ + XML_CHECK_NOT_ATTR, /* 5023 */ + XML_CHECK_NOT_ATTR_DECL, /* 5024 */ + XML_CHECK_NOT_ELEM_DECL, /* 5025 */ + XML_CHECK_NOT_ENTITY_DECL, /* 5026 */ + XML_CHECK_NOT_NS_DECL, /* 5027 */ + XML_CHECK_NO_HREF, /* 5028 */ + XML_CHECK_WRONG_PARENT,/* 5029 */ + XML_CHECK_NS_SCOPE, /* 5030 */ + XML_CHECK_NS_ANCESTOR, /* 5031 */ + XML_CHECK_NOT_UTF8, /* 5032 */ + XML_CHECK_NO_DICT, /* 5033 */ + XML_CHECK_NOT_NCNAME, /* 5034 */ + XML_CHECK_OUTSIDE_DICT, /* 5035 */ + XML_CHECK_WRONG_NAME, /* 5036 */ + XML_CHECK_NAME_NOT_NULL, /* 5037 */ + XML_I18N_NO_NAME = 6000, + XML_I18N_NO_HANDLER, /* 6001 */ + XML_I18N_EXCESS_HANDLER, /* 6002 */ + XML_I18N_CONV_FAILED, /* 6003 */ + XML_I18N_NO_OUTPUT, /* 6004 */ + XML_BUF_OVERFLOW = 7000 +} 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 (XMLCDECL *xmlGenericErrorFunc) (void *ctx, + const char *msg, + ...) LIBXML_ATTR_FORMAT(2,3); +/** + * 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 (XMLCALL *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 XMLCDECL + xmlParserError (void *ctx, + const char *msg, + ...) LIBXML_ATTR_FORMAT(2,3); +XMLPUBFUN void XMLCDECL + xmlParserWarning (void *ctx, + const char *msg, + ...) LIBXML_ATTR_FORMAT(2,3); +XMLPUBFUN void XMLCDECL + xmlParserValidityError (void *ctx, + const char *msg, + ...) LIBXML_ATTR_FORMAT(2,3); +XMLPUBFUN void XMLCDECL + xmlParserValidityWarning (void *ctx, + const char *msg, + ...) LIBXML_ATTR_FORMAT(2,3); +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 col, + const char *msg, + ...) LIBXML_ATTR_FORMAT(16,17); +XMLPUBFUN void XMLCALL + __xmlSimpleError (int domain, + int code, + xmlNodePtr node, + const char *msg, + const char *extra) LIBXML_ATTR_FORMAT(4,0); +#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..2c79f81 --- /dev/null +++ b/include/libxml/xmlexports.h @@ -0,0 +1,162 @@ +/* + * 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 + */ + +#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 +/** + * XMLCDECL: + * + * Macro which declares the calling convention for exported functions that + * use '...'. + */ +#define XMLCDECL + +/** DOC_DISABLE */ + +/* Windows platform with MS compiler */ +#if defined(_WIN32) && defined(_MSC_VER) + #undef XMLPUBFUN + #undef XMLPUBVAR + #undef XMLCALL + #undef XMLCDECL + #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 + #if defined(LIBXML_FASTCALL) + #define XMLCALL __fastcall + #else + #define XMLCALL __cdecl + #endif + #define XMLCDECL __cdecl + #if !defined _REENTRANT + #define _REENTRANT + #endif +#endif + +/* Windows platform with Borland compiler */ +#if defined(_WIN32) && defined(__BORLANDC__) + #undef XMLPUBFUN + #undef XMLPUBVAR + #undef XMLCALL + #undef XMLCDECL + #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 + #define XMLCDECL __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 + #undef XMLCDECL + /* + * if defined(IN_LIBXML) this raises problems on mingw with msys + * _imp__xmlFree listed as missing. Try to workaround the problem + * by also making that declaration when compiling client code. + */ + #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 + #define XMLCDECL __cdecl + #if !defined _REENTRANT + #define _REENTRANT + #endif +#endif + +/* Cygwin platform, GNU compiler */ +#if defined(_WIN32) && defined(__CYGWIN__) + #undef XMLPUBFUN + #undef XMLPUBVAR + #undef XMLCALL + #undef XMLCDECL + #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 + #define XMLCDECL __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..17e375a --- /dev/null +++ b/include/libxml/xmlmemory.h @@ -0,0 +1,224 @@ +/* + * 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 +#include + +/** + * 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 *(LIBXML_ATTR_ALLOC_SIZE(1) 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 xmlFreeFunc xmlFree; +LIBXML_DLL_IMPORT xmlMallocFunc xmlMalloc; +LIBXML_DLL_IMPORT xmlMallocFunc xmlMallocAtomic; +LIBXML_DLL_IMPORT xmlReallocFunc xmlRealloc; +LIBXML_DLL_IMPORT 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 int XMLCALL + xmlMemBlocks (void); +XMLPUBFUN void XMLCALL + xmlMemDisplay (FILE *fp); +XMLPUBFUN void XMLCALL + xmlMemDisplayLast(FILE *fp, long nbBytes); +XMLPUBFUN void XMLCALL + xmlMemShow (FILE *fp, int nr); +XMLPUBFUN void XMLCALL + xmlMemoryDump (void); +XMLPUBFUN void * XMLCALL + xmlMemMalloc (size_t size) LIBXML_ATTR_ALLOC_SIZE(1); +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) LIBXML_ATTR_ALLOC_SIZE(1); +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) LIBXML_ATTR_ALLOC_SIZE(1); +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 +#include +#endif +#endif + +#endif /* __DEBUG_MEMORY_ALLOC__ */ + diff --git a/include/libxml/xmlmodule.h b/include/libxml/xmlmodule.h new file mode 100644 index 0000000..9667820 --- /dev/null +++ b/include/libxml/xmlmodule.h @@ -0,0 +1,57 @@ +/* + * Summary: dynamic module loading + * Description: basic API for dynamic module loading, used by + * libexslt added in 2.6.17 + * + * Copy: See Copyright for the status of this software. + * + * Author: Joel W. Reed + */ + +#ifndef __XML_MODULE_H__ +#define __XML_MODULE_H__ + +#include + +#ifdef LIBXML_MODULES_ENABLED + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * xmlModulePtr: + * + * A handle to a dynamically loaded module + */ +typedef struct _xmlModule xmlModule; +typedef xmlModule *xmlModulePtr; + +/** + * xmlModuleOption: + * + * enumeration of options that can be passed down to xmlModuleOpen() + */ +typedef enum { + XML_MODULE_LAZY = 1, /* lazy binding */ + XML_MODULE_LOCAL= 2 /* local binding */ +} xmlModuleOption; + +XMLPUBFUN xmlModulePtr XMLCALL xmlModuleOpen (const char *filename, + int options); + +XMLPUBFUN int XMLCALL xmlModuleSymbol (xmlModulePtr module, + const char* name, + void **result); + +XMLPUBFUN int XMLCALL xmlModuleClose (xmlModulePtr module); + +XMLPUBFUN int XMLCALL xmlModuleFree (xmlModulePtr module); + +#ifdef __cplusplus +} +#endif + +#endif /* LIBXML_MODULES_ENABLED */ + +#endif /*__XML_MODULE_H__ */ diff --git a/include/libxml/xmlreader.h b/include/libxml/xmlreader.h new file mode 100644 index 0000000..2c99e3a --- /dev/null +++ b/include/libxml/xmlreader.h @@ -0,0 +1,428 @@ +/* + * 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 +#include +#include +#ifdef LIBXML_SCHEMAS_ENABLED +#include +#include +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * xmlParserSeverities: + * + * How severe an error callback is when the per-reader error callback API + * is used. + */ +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; + +#ifdef LIBXML_READER_ENABLED + +/** + * xmlTextReaderMode: + * + * Internal state values for the reader. + */ +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; + +/** + * xmlParserProperties: + * + * Some common options to use with xmlTextReaderSetParserProp, but it + * is better to use xmlParserOption and the xmlReaderNewxxx and + * xmlReaderForxxx APIs now. + */ +typedef enum { + XML_PARSER_LOADDTD = 1, + XML_PARSER_DEFAULTATTRS = 2, + XML_PARSER_VALIDATE = 3, + XML_PARSER_SUBST_ENTITIES = 4 +} xmlParserProperties; + +/** + * xmlReaderTypes: + * + * Predefined constants for the different types of nodes. + */ +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; + +/** + * xmlTextReader: + * + * Structure for an xmlReader context. + */ +typedef struct _xmlTextReader xmlTextReader; + +/** + * xmlTextReaderPtr: + * + * Pointer to an xmlReader context. + */ +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); + +XMLPUBFUN int XMLCALL + xmlTextReaderSetup(xmlTextReaderPtr reader, + xmlParserInputBufferPtr input, const char *URL, + const char *encoding, int options); + +/* + * Iterators + */ +XMLPUBFUN int XMLCALL + xmlTextReaderRead (xmlTextReaderPtr reader); + +#ifdef LIBXML_WRITER_ENABLED +XMLPUBFUN xmlChar * XMLCALL + xmlTextReaderReadInnerXml(xmlTextReaderPtr reader); + +XMLPUBFUN xmlChar * XMLCALL + xmlTextReaderReadOuterXml(xmlTextReaderPtr reader); +#endif + +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 int XMLCALL + xmlTextReaderIsNamespaceDecl(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); +XMLPUBFUN const xmlChar * XMLCALL + xmlTextReaderConstEncoding (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 int XMLCALL + xmlTextReaderGetParserLineNumber(xmlTextReaderPtr reader); + +XMLPUBFUN int XMLCALL + xmlTextReaderGetParserColumnNumber(xmlTextReaderPtr reader); + +XMLPUBFUN xmlNodePtr XMLCALL + xmlTextReaderPreserve (xmlTextReaderPtr reader); +#ifdef LIBXML_PATTERN_ENABLED +XMLPUBFUN int XMLCALL + xmlTextReaderPreservePattern(xmlTextReaderPtr reader, + const xmlChar *pattern, + const xmlChar **namespaces); +#endif /* LIBXML_PATTERN_ENABLED */ +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 + xmlTextReaderRelaxNGValidateCtxt(xmlTextReaderPtr reader, + xmlRelaxNGValidCtxtPtr ctxt, + int options); + +XMLPUBFUN int XMLCALL + xmlTextReaderRelaxNGSetSchema(xmlTextReaderPtr reader, + xmlRelaxNGPtr schema); +XMLPUBFUN int XMLCALL + xmlTextReaderSchemaValidate (xmlTextReaderPtr reader, + const char *xsd); +XMLPUBFUN int XMLCALL + xmlTextReaderSchemaValidateCtxt(xmlTextReaderPtr reader, + xmlSchemaValidCtxtPtr ctxt, + int options); +XMLPUBFUN int XMLCALL + xmlTextReaderSetSchema (xmlTextReaderPtr reader, + xmlSchemaPtr schema); +#endif +XMLPUBFUN const xmlChar * XMLCALL + xmlTextReaderConstXmlVersion(xmlTextReaderPtr reader); +XMLPUBFUN int XMLCALL + xmlTextReaderStandalone (xmlTextReaderPtr reader); + + +/* + * Index lookup + */ +XMLPUBFUN long XMLCALL + xmlTextReaderByteConsumed (xmlTextReaderPtr reader); + +/* + * 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; + +/** + * xmlTextReaderErrorFunc: + * @arg: the user argument + * @msg: the message + * @severity: the severity of the error + * @locator: a locator indicating where the error occured + * + * Signature of an error callback from a reader parser + */ +typedef void (XMLCALL *xmlTextReaderErrorFunc)(void *arg, + const char *msg, + xmlParserSeverities severity, + xmlTextReaderLocatorPtr locator); +XMLPUBFUN int XMLCALL + xmlTextReaderLocatorLineNumber(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); + +#endif /* LIBXML_READER_ENABLED */ + +#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..7009645 --- /dev/null +++ b/include/libxml/xmlregexp.h @@ -0,0 +1,222 @@ +/* + * 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 + +#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 +#include +#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); + +/** + * xmlRegExecCallbacks: + * @exec: the regular expression context + * @token: the current token string + * @transdata: transition data + * @inputdata: input data + * + * Callback function when doing a transition in the automata + */ +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); + +XMLPUBFUN int XMLCALL + xmlRegExecNextValues(xmlRegExecCtxtPtr exec, + int *nbval, + int *nbneg, + xmlChar **values, + int *terminal); +XMLPUBFUN int XMLCALL + xmlRegExecErrInfo (xmlRegExecCtxtPtr exec, + const xmlChar **string, + int *nbval, + int *nbneg, + xmlChar **values, + int *terminal); +#ifdef LIBXML_EXPR_ENABLED +/* + * Formal regular expression handling + * Its goal is to do some formal work on content models + */ + +/* expressions are used within a context */ +typedef struct _xmlExpCtxt xmlExpCtxt; +typedef xmlExpCtxt *xmlExpCtxtPtr; + +XMLPUBFUN void XMLCALL + xmlExpFreeCtxt (xmlExpCtxtPtr ctxt); +XMLPUBFUN xmlExpCtxtPtr XMLCALL + xmlExpNewCtxt (int maxNodes, + xmlDictPtr dict); + +XMLPUBFUN int XMLCALL + xmlExpCtxtNbNodes(xmlExpCtxtPtr ctxt); +XMLPUBFUN int XMLCALL + xmlExpCtxtNbCons(xmlExpCtxtPtr ctxt); + +/* Expressions are trees but the tree is opaque */ +typedef struct _xmlExpNode xmlExpNode; +typedef xmlExpNode *xmlExpNodePtr; + +typedef enum { + XML_EXP_EMPTY = 0, + XML_EXP_FORBID = 1, + XML_EXP_ATOM = 2, + XML_EXP_SEQ = 3, + XML_EXP_OR = 4, + XML_EXP_COUNT = 5 +} xmlExpNodeType; + +/* + * 2 core expressions shared by all for the empty language set + * and for the set with just the empty token + */ +XMLPUBVAR xmlExpNodePtr forbiddenExp; +XMLPUBVAR xmlExpNodePtr emptyExp; + +/* + * Expressions are reference counted internally + */ +XMLPUBFUN void XMLCALL + xmlExpFree (xmlExpCtxtPtr ctxt, + xmlExpNodePtr expr); +XMLPUBFUN void XMLCALL + xmlExpRef (xmlExpNodePtr expr); + +/* + * constructors can be either manual or from a string + */ +XMLPUBFUN xmlExpNodePtr XMLCALL + xmlExpParse (xmlExpCtxtPtr ctxt, + const char *expr); +XMLPUBFUN xmlExpNodePtr XMLCALL + xmlExpNewAtom (xmlExpCtxtPtr ctxt, + const xmlChar *name, + int len); +XMLPUBFUN xmlExpNodePtr XMLCALL + xmlExpNewOr (xmlExpCtxtPtr ctxt, + xmlExpNodePtr left, + xmlExpNodePtr right); +XMLPUBFUN xmlExpNodePtr XMLCALL + xmlExpNewSeq (xmlExpCtxtPtr ctxt, + xmlExpNodePtr left, + xmlExpNodePtr right); +XMLPUBFUN xmlExpNodePtr XMLCALL + xmlExpNewRange (xmlExpCtxtPtr ctxt, + xmlExpNodePtr subset, + int min, + int max); +/* + * The really interesting APIs + */ +XMLPUBFUN int XMLCALL + xmlExpIsNillable(xmlExpNodePtr expr); +XMLPUBFUN int XMLCALL + xmlExpMaxToken (xmlExpNodePtr expr); +XMLPUBFUN int XMLCALL + xmlExpGetLanguage(xmlExpCtxtPtr ctxt, + xmlExpNodePtr expr, + const xmlChar**langList, + int len); +XMLPUBFUN int XMLCALL + xmlExpGetStart (xmlExpCtxtPtr ctxt, + xmlExpNodePtr expr, + const xmlChar**tokList, + int len); +XMLPUBFUN xmlExpNodePtr XMLCALL + xmlExpStringDerive(xmlExpCtxtPtr ctxt, + xmlExpNodePtr expr, + const xmlChar *str, + int len); +XMLPUBFUN xmlExpNodePtr XMLCALL + xmlExpExpDerive (xmlExpCtxtPtr ctxt, + xmlExpNodePtr expr, + xmlExpNodePtr sub); +XMLPUBFUN int XMLCALL + xmlExpSubsume (xmlExpCtxtPtr ctxt, + xmlExpNodePtr expr, + xmlExpNodePtr sub); +XMLPUBFUN void XMLCALL + xmlExpDump (xmlBufferPtr buf, + xmlExpNodePtr expr); +#endif /* LIBXML_EXPR_ENABLED */ +#ifdef __cplusplus +} +#endif + +#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..fb329b2 --- /dev/null +++ b/include/libxml/xmlsave.h @@ -0,0 +1,88 @@ +/* + * 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 +#include +#include +#include + +#ifdef LIBXML_OUTPUT_ENABLED +#ifdef __cplusplus +extern "C" { +#endif + +/** + * xmlSaveOption: + * + * This is the set of XML save options that can be passed down + * to the xmlSaveToFd() and similar calls. + */ +typedef enum { + XML_SAVE_FORMAT = 1<<0, /* format save output */ + XML_SAVE_NO_DECL = 1<<1, /* drop the xml declaration */ + XML_SAVE_NO_EMPTY = 1<<2, /* no empty tags */ + XML_SAVE_NO_XHTML = 1<<3, /* disable XHTML1 specific rules */ + XML_SAVE_XHTML = 1<<4, /* force XHTML1 specific rules */ + XML_SAVE_AS_XML = 1<<5, /* force XML serialization on HTML doc */ + XML_SAVE_AS_HTML = 1<<6, /* force HTML serialization on XML doc */ + XML_SAVE_WSNONSIG = 1<<7 /* format with non-significant whitespace */ +} xmlSaveOption; + + +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); +XMLPUBFUN int XMLCALL + xmlSaveSetEscape (xmlSaveCtxtPtr ctxt, + xmlCharEncodingOutputFunc escape); +XMLPUBFUN int XMLCALL + xmlSaveSetAttrEscape (xmlSaveCtxtPtr ctxt, + xmlCharEncodingOutputFunc escape); +#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..97930c7 --- /dev/null +++ b/include/libxml/xmlschemas.h @@ -0,0 +1,246 @@ +/* + * 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 + +#ifdef LIBXML_SCHEMAS_ENABLED + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * This error codes are obsolete; not used any more. + */ +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; + +/* +* ATTENTION: Change xmlSchemaSetValidOptions's check +* for invalid values, if adding to the validation +* options below. +*/ +/** + * xmlSchemaValidOption: + * + * This is the set of XML Schema validation options. + */ +typedef enum { + XML_SCHEMA_VAL_VC_I_CREATE = 1<<0 + /* Default/fixed: create an attribute node + * or an element's text node on the instance. + */ +} xmlSchemaValidOption; + +/* + XML_SCHEMA_VAL_XSI_ASSEMBLE = 1<<1, + * assemble schemata using + * xsi:schemaLocation and + * xsi:noNamespaceSchemaLocation +*/ + +/** + * The schemas related types are kept internal + */ +typedef struct _xmlSchema xmlSchema; +typedef xmlSchema *xmlSchemaPtr; + +/** + * xmlSchemaValidityErrorFunc: + * @ctx: the validation context + * @msg: the message + * @...: extra arguments + * + * Signature of an error callback from an XSD validation + */ +typedef void (XMLCDECL *xmlSchemaValidityErrorFunc) + (void *ctx, const char *msg, ...) LIBXML_ATTR_FORMAT(2,3); + +/** + * xmlSchemaValidityWarningFunc: + * @ctx: the validation context + * @msg: the message + * @...: extra arguments + * + * Signature of a warning callback from an XSD validation + */ +typedef void (XMLCDECL *xmlSchemaValidityWarningFunc) + (void *ctx, const char *msg, ...) LIBXML_ATTR_FORMAT(2,3); + +/** + * A schemas validation context + */ +typedef struct _xmlSchemaParserCtxt xmlSchemaParserCtxt; +typedef xmlSchemaParserCtxt *xmlSchemaParserCtxtPtr; + +typedef struct _xmlSchemaValidCtxt xmlSchemaValidCtxt; +typedef xmlSchemaValidCtxt *xmlSchemaValidCtxtPtr; + +/** + * xmlSchemaValidityLocatorFunc: + * @ctx: user provided context + * @file: returned file information + * @line: returned line information + * + * A schemas validation locator, a callback called by the validator. + * This is used when file or node informations are not available + * to find out what file and line number are affected + * + * Returns: 0 in case of success and -1 in case of error + */ + +typedef int (XMLCDECL *xmlSchemaValidityLocatorFunc) (void *ctx, + const char **file, unsigned long *line); + +/* + * Interfaces for parsing. + */ +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 void XMLCALL + xmlSchemaSetParserStructuredErrors(xmlSchemaParserCtxtPtr ctxt, + xmlStructuredErrorFunc serror, + void *ctx); +XMLPUBFUN int XMLCALL + xmlSchemaGetParserErrors(xmlSchemaParserCtxtPtr ctxt, + xmlSchemaValidityErrorFunc * err, + xmlSchemaValidityWarningFunc * warn, + void **ctx); +XMLPUBFUN int XMLCALL + xmlSchemaIsValid (xmlSchemaValidCtxtPtr ctxt); + +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 void XMLCALL + xmlSchemaSetValidStructuredErrors(xmlSchemaValidCtxtPtr ctxt, + xmlStructuredErrorFunc serror, + void *ctx); +XMLPUBFUN int XMLCALL + xmlSchemaGetValidErrors (xmlSchemaValidCtxtPtr ctxt, + xmlSchemaValidityErrorFunc *err, + xmlSchemaValidityWarningFunc *warn, + void **ctx); +XMLPUBFUN int XMLCALL + xmlSchemaSetValidOptions (xmlSchemaValidCtxtPtr ctxt, + int options); +XMLPUBFUN void XMLCALL + xmlSchemaValidateSetFilename(xmlSchemaValidCtxtPtr vctxt, + const char *filename); +XMLPUBFUN int XMLCALL + xmlSchemaValidCtxtGetOptions(xmlSchemaValidCtxtPtr ctxt); + +XMLPUBFUN xmlSchemaValidCtxtPtr XMLCALL + xmlSchemaNewValidCtxt (xmlSchemaPtr schema); +XMLPUBFUN void XMLCALL + xmlSchemaFreeValidCtxt (xmlSchemaValidCtxtPtr ctxt); +XMLPUBFUN int XMLCALL + xmlSchemaValidateDoc (xmlSchemaValidCtxtPtr ctxt, + xmlDocPtr instance); +XMLPUBFUN int XMLCALL + xmlSchemaValidateOneElement (xmlSchemaValidCtxtPtr ctxt, + xmlNodePtr elem); +XMLPUBFUN int XMLCALL + xmlSchemaValidateStream (xmlSchemaValidCtxtPtr ctxt, + xmlParserInputBufferPtr input, + xmlCharEncoding enc, + xmlSAXHandlerPtr sax, + void *user_data); +XMLPUBFUN int XMLCALL + xmlSchemaValidateFile (xmlSchemaValidCtxtPtr ctxt, + const char * filename, + int options); + +XMLPUBFUN xmlParserCtxtPtr XMLCALL + xmlSchemaValidCtxtGetParserCtxt(xmlSchemaValidCtxtPtr ctxt); + +/* + * Interface to insert Schemas SAX validation in a SAX stream + */ +typedef struct _xmlSchemaSAXPlug xmlSchemaSAXPlugStruct; +typedef xmlSchemaSAXPlugStruct *xmlSchemaSAXPlugPtr; + +XMLPUBFUN xmlSchemaSAXPlugPtr XMLCALL + xmlSchemaSAXPlug (xmlSchemaValidCtxtPtr ctxt, + xmlSAXHandlerPtr *sax, + void **user_data); +XMLPUBFUN int XMLCALL + xmlSchemaSAXUnplug (xmlSchemaSAXPlugPtr plug); + + +XMLPUBFUN void XMLCALL + xmlSchemaValidateSetLocator (xmlSchemaValidCtxtPtr vctxt, + xmlSchemaValidityLocatorFunc f, + void *ctxt); + +#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..35d48d4 --- /dev/null +++ b/include/libxml/xmlschemastypes.h @@ -0,0 +1,151 @@ +/* + * 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 + +#ifdef LIBXML_SCHEMAS_ENABLED + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + XML_SCHEMA_WHITESPACE_UNKNOWN = 0, + XML_SCHEMA_WHITESPACE_PRESERVE = 1, + XML_SCHEMA_WHITESPACE_REPLACE = 2, + XML_SCHEMA_WHITESPACE_COLLAPSE = 3 +} xmlSchemaWhitespaceValueType; + +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 int XMLCALL + xmlSchemaValidateFacetWhtsp (xmlSchemaFacetPtr facet, + xmlSchemaWhitespaceValueType fws, + xmlSchemaValType valType, + const xmlChar *value, + xmlSchemaValPtr val, + xmlSchemaWhitespaceValueType ws); +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); +XMLPUBFUN xmlSchemaTypePtr XMLCALL + xmlSchemaGetBuiltInListSimpleTypeItemType (xmlSchemaTypePtr type); +XMLPUBFUN int XMLCALL + xmlSchemaValidateListSimpleTypeFacet (xmlSchemaFacetPtr facet, + const xmlChar *value, + unsigned long actualLen, + unsigned long *expectedLen); +XMLPUBFUN xmlSchemaTypePtr XMLCALL + xmlSchemaGetBuiltInType (xmlSchemaValType type); +XMLPUBFUN int XMLCALL + xmlSchemaIsBuiltInTypeFacet (xmlSchemaTypePtr type, + int facetType); +XMLPUBFUN xmlChar * XMLCALL + xmlSchemaCollapseString (const xmlChar *value); +XMLPUBFUN xmlChar * XMLCALL + xmlSchemaWhiteSpaceReplace (const xmlChar *value); +XMLPUBFUN unsigned long XMLCALL + xmlSchemaGetFacetValueAsULong (xmlSchemaFacetPtr facet); +XMLPUBFUN int XMLCALL + xmlSchemaValidateLengthFacet (xmlSchemaTypePtr type, + xmlSchemaFacetPtr facet, + const xmlChar *value, + xmlSchemaValPtr val, + unsigned long *length); +XMLPUBFUN int XMLCALL + xmlSchemaValidateLengthFacetWhtsp(xmlSchemaFacetPtr facet, + xmlSchemaValType valType, + const xmlChar *value, + xmlSchemaValPtr val, + unsigned long *length, + xmlSchemaWhitespaceValueType ws); +XMLPUBFUN int XMLCALL + xmlSchemaValPredefTypeNodeNoNorm(xmlSchemaTypePtr type, + const xmlChar *value, + xmlSchemaValPtr *val, + xmlNodePtr node); +XMLPUBFUN int XMLCALL + xmlSchemaGetCanonValue (xmlSchemaValPtr val, + const xmlChar **retValue); +XMLPUBFUN int XMLCALL + xmlSchemaGetCanonValueWhtsp (xmlSchemaValPtr val, + const xmlChar **retValue, + xmlSchemaWhitespaceValueType ws); +XMLPUBFUN int XMLCALL + xmlSchemaValueAppend (xmlSchemaValPtr prev, + xmlSchemaValPtr cur); +XMLPUBFUN xmlSchemaValPtr XMLCALL + xmlSchemaValueGetNext (xmlSchemaValPtr cur); +XMLPUBFUN const xmlChar * XMLCALL + xmlSchemaValueGetAsString (xmlSchemaValPtr val); +XMLPUBFUN int XMLCALL + xmlSchemaValueGetAsBoolean (xmlSchemaValPtr val); +XMLPUBFUN xmlSchemaValPtr XMLCALL + xmlSchemaNewStringValue (xmlSchemaValType type, + const xmlChar *value); +XMLPUBFUN xmlSchemaValPtr XMLCALL + xmlSchemaNewNOTATIONValue (const xmlChar *name, + const xmlChar *ns); +XMLPUBFUN xmlSchemaValPtr XMLCALL + xmlSchemaNewQNameValue (const xmlChar *namespaceName, + const xmlChar *localName); +XMLPUBFUN int XMLCALL + xmlSchemaCompareValuesWhtsp (xmlSchemaValPtr x, + xmlSchemaWhitespaceValueType xws, + xmlSchemaValPtr y, + xmlSchemaWhitespaceValueType yws); +XMLPUBFUN xmlSchemaValPtr XMLCALL + xmlSchemaCopyValue (xmlSchemaValPtr val); +XMLPUBFUN xmlSchemaValType XMLCALL + xmlSchemaGetValType (xmlSchemaValPtr val); + +#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..2d0b2d1 --- /dev/null +++ b/include/libxml/xmlstring.h @@ -0,0 +1,140 @@ +/* + * 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 +#include + +#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, + const 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 char *msg, + ...) LIBXML_ATTR_FORMAT(3,4); +XMLPUBFUN int XMLCALL + xmlStrVPrintf (xmlChar *buf, + int len, + const char *msg, + va_list ap) LIBXML_ATTR_FORMAT(3,0); + +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 const 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..01ac8b6 --- /dev/null +++ b/include/libxml/xmlunicode.h @@ -0,0 +1,202 @@ +/* + * 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.1.html + * using the genUnicode.py Python script. + * + * Generation date: Mon Mar 27 11:09:52 2006 + * Sources: Blocks-4.0.1.txt UnicodeData-4.0.1.txt + * Author: Daniel Veillard + */ + +#ifndef __XML_UNICODE_H__ +#define __XML_UNICODE_H__ + +#include + +#ifdef LIBXML_UNICODE_ENABLED + +#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 /* LIBXML_UNICODE_ENABLED */ + +#endif /* __XML_UNICODE_H__ */ diff --git a/include/libxml/xmlversion.h.in b/include/libxml/xmlversion.h.in new file mode 100644 index 0000000..b173be9 --- /dev/null +++ b/include/libxml/xmlversion.h.in @@ -0,0 +1,489 @@ +/* + * 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 + +#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 10203 + */ +#define LIBXML_VERSION @LIBXML_VERSION_NUMBER@ + +/** + * LIBXML_VERSION_STRING: + * + * the version number string, 1.2.3 value is "10203" + */ +#define LIBXML_VERSION_STRING "@LIBXML_VERSION_NUMBER@" + +/** + * LIBXML_VERSION_EXTRA: + * + * extra version information, used to show a CVS compilation + */ +#define LIBXML_VERSION_EXTRA "@LIBXML_VERSION_EXTRA@" + +/** + * 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__) || \ + (defined(_POSIX_C_SOURCE) && (_POSIX_C_SOURCE - 0 >= 199506L)) +#define LIBXML_THREAD_ENABLED +#endif +#endif + +/** + * LIBXML_THREAD_ALLOC_ENABLED: + * + * Whether the allocation hooks are per-thread + */ +#if @WITH_THREAD_ALLOC@ +#define LIBXML_THREAD_ALLOC_ENABLED +#endif + +/** + * LIBXML_TREE_ENABLED: + * + * Whether the DOM like tree manipulation API support is configured in + */ +#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_ICU_ENABLED: + * + * Whether icu support is available + */ +#if @WITH_ICU@ +#define LIBXML_ICU_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_DEBUG_RUNTIME: + * + * Whether the runtime debugging is configured in + */ +#if @WITH_RUN_DEBUG@ +#define LIBXML_DEBUG_RUNTIME +#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_EXPR_ENABLED: + * + * Whether the formal expressions interfaces are compiled in + */ +#if @WITH_SCHEMAS@ +#define LIBXML_EXPR_ENABLED +#endif + +/** + * LIBXML_SCHEMAS_ENABLED: + * + * Whether the Schemas validation interfaces are compiled in + */ +#if @WITH_SCHEMAS@ +#define LIBXML_SCHEMAS_ENABLED +#endif + +/** + * LIBXML_SCHEMATRON_ENABLED: + * + * Whether the Schematron validation interfaces are compiled in + */ +#if @WITH_SCHEMATRON@ +#define LIBXML_SCHEMATRON_ENABLED +#endif + +/** + * LIBXML_MODULES_ENABLED: + * + * Whether the module interfaces are compiled in + */ +#if @WITH_MODULES@ +#define LIBXML_MODULES_ENABLED +/** + * LIBXML_MODULE_EXTENSION: + * + * the string suffix used by dynamic modules (usually shared libraries) + */ +#define LIBXML_MODULE_EXTENSION "@MODULE_EXTENSION@" +#endif + +/** + * LIBXML_ZLIB_ENABLED: + * + * Whether the Zlib support is compiled in + */ +#if @WITH_ZLIB@ +#define LIBXML_ZLIB_ENABLED +#endif + +/** + * LIBXML_LZMA_ENABLED: + * + * Whether the Lzma support is compiled in + */ +#if @WITH_LZMA@ +#define LIBXML_LZMA_ENABLED +#endif + +#ifdef __GNUC__ +#ifdef HAVE_ANSIDECL_H +#include +#endif + +/** + * ATTRIBUTE_UNUSED: + * + * Macro used to signal to GCC unused function parameters + */ + +#ifndef ATTRIBUTE_UNUSED +# if ((__GNUC__ > 2) || ((__GNUC__ == 2) && (__GNUC_MINOR__ >= 7))) +# define ATTRIBUTE_UNUSED __attribute__((unused)) +# else +# define ATTRIBUTE_UNUSED +# endif +#endif + +/** + * LIBXML_ATTR_ALLOC_SIZE: + * + * Macro used to indicate to GCC this is an allocator function + */ + +#ifndef LIBXML_ATTR_ALLOC_SIZE +# if (!defined(__clang__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3)))) +# define LIBXML_ATTR_ALLOC_SIZE(x) __attribute__((alloc_size(x))) +# else +# define LIBXML_ATTR_ALLOC_SIZE(x) +# endif +#else +# define LIBXML_ATTR_ALLOC_SIZE(x) +#endif + +/** + * LIBXML_ATTR_FORMAT: + * + * Macro used to indicate to GCC the parameter are printf like + */ + +#ifndef LIBXML_ATTR_FORMAT +# if ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3))) +# define LIBXML_ATTR_FORMAT(fmt,args) __attribute__((__format__(__printf__,fmt,args))) +# else +# define LIBXML_ATTR_FORMAT(fmt,args) +# endif +#else +# define LIBXML_ATTR_FORMAT(fmt,args) +#endif + +#else /* ! __GNUC__ */ +/** + * ATTRIBUTE_UNUSED: + * + * Macro used to signal to GCC unused function parameters + */ +#define ATTRIBUTE_UNUSED +/** + * LIBXML_ATTR_ALLOC_SIZE: + * + * Macro used to indicate to GCC this is an allocator function + */ +#define LIBXML_ATTR_ALLOC_SIZE(x) +/** + * LIBXML_ATTR_FORMAT: + * + * Macro used to indicate to GCC the parameter are printf like + */ +#define LIBXML_ATTR_FORMAT(fmt,args) +#endif /* __GNUC__ */ + +#ifdef __cplusplus +} +#endif /* __cplusplus */ +#endif + + diff --git a/include/libxml/xmlwin32version.h b/include/libxml/xmlwin32version.h new file mode 100644 index 0000000..9641241 --- /dev/null +++ b/include/libxml/xmlwin32version.h @@ -0,0 +1,242 @@ +/* + * Summary: compile-time version informations on Windows + * Description: compile-time version informations for the XML library + * when compiled on the Windows platform + * + * Copy: See Copyright for the status of this software. + * + * Author: Daniel Veillard + */ + +#ifndef __XML_VERSION_H__ +#define __XML_VERSION_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 +extern void xmlCheckVersion(int version); +#endif /* LIBXML2_COMPILING_MSCCDEF */ + +/** + * LIBXML_DOTTED_VERSION: + * + * the version string like "1.2.3" + */ +#define LIBXML_DOTTED_VERSION "2.4.26" + +/** + * LIBXML_VERSION: + * + * the version number: 1.2.3 value is 1002003 + */ +#define LIBXML_VERSION 20426 + +/** + * LIBXML_VERSION_STRING: + * + * the version number string, 1.2.3 value is "1002003" + */ +#define LIBXML_VERSION_STRING "20426" + +/** + * 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(20426); + +#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 + +/** + * LIBXML_THREAD_ENABLED: + * + * Whether the thread support is configured in + */ +#if 0 +#define LIBXML_THREAD_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_HTML_ENABLED: + * + * Whether the HTML support is configured in + */ +#if 1 +#define LIBXML_HTML_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_C14N_ENABLED: + * + * Whether the Canonicalization support is configured in + */ +#if 0 +#define LIBXML_C14N_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 0 +#define LIBXML_ICONV_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 0 +#define DEBUG_MEMORY_LOCATION +#endif + +/** + * LIBXML_DLL_IMPORT: + * + * Used on Windows (MS C compiler only) to declare a variable as + * imported from the library. This macro should be empty when compiling + * libxml itself. It should expand to __declspec(dllimport) + * when the client code includes this header, and that only if the client + * links dynamically against libxml. + * For this to work, we need three macros. One tells us which compiler is + * being used and luckily the compiler defines such a thing: _MSC_VER. The + * second macro tells us if we are compiling libxml or the client code and + * we define the macro IN_LIBXML on the compiler's command line for this + * purpose. The third macro, LIBXML_STATIC, must be defined by any client + * code which links against libxml statically. + */ +#ifndef LIBXML_DLL_IMPORT +#if defined(_MSC_VER) && !defined(IN_LIBXML) && !defined(LIBXML_STATIC) +#define LIBXML_DLL_IMPORT __declspec(dllimport) +#else +#define LIBXML_DLL_IMPORT +#endif +#endif + +/** + * ATTRIBUTE_UNUSED: + * + * Macro used to signal to GCC unused function parameters + */ +#ifdef __GNUC__ +#ifdef HAVE_ANSIDECL_H +#include +#endif +#ifndef ATTRIBUTE_UNUSED +#define ATTRIBUTE_UNUSED +#endif +#else +#define ATTRIBUTE_UNUSED +#endif + +/* + * #pragma comment(lib, "iconv.lib") + * + * pragma understood my MS compiler which enables a conditional link with + * iconv. + */ +#ifdef _MSC_VER +#if defined LIBXML_ICONV_ENABLED && !defined LIBXML2_COMPILING_MSCCDEF +#pragma comment(lib, "iconv.lib") +#endif +#endif + +#ifdef __cplusplus +} +#endif /* __cplusplus */ +#endif diff --git a/include/libxml/xmlwin32version.h.in b/include/libxml/xmlwin32version.h.in new file mode 100644 index 0000000..375f3a4 --- /dev/null +++ b/include/libxml/xmlwin32version.h.in @@ -0,0 +1,325 @@ +/* + * Summary: compile-time version informations on Windows + * Description: compile-time version informations for the XML library + * when compiled on the Windows platform + * + * Copy: See Copyright for the status of this software. + * + * Author: Daniel Veillard + */ + +#ifndef __XML_VERSION_H__ +#define __XML_VERSION_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 +extern void 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_VERSION_EXTRA: + * + * extra version information, used to show a CVS compilation + */ +#define LIBXML_VERSION_EXTRA "-win32" + +/** + * 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@); + +#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 + +/** + * LIBXML_THREAD_ENABLED: + * + * Whether the thread support is configured in + */ +#if 0 +#define LIBXML_THREAD_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_HTML_ENABLED: + * + * Whether the HTML support is configured in + */ +#if 1 +#define LIBXML_HTML_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_C14N_ENABLED: + * + * Whether the Canonicalization support is configured in + */ +#if 0 +#define LIBXML_C14N_ENABLED +#endif + +/** + * LIBXML_XINCLUDE_ENABLED: + * + * Whether XInclude is configured in + */ +#if 1 +#define LIBXML_XINCLUDE_ENABLED +#endif + +/** + * LIBXML_SCHEMATRON_ENABLED: + * + * Whether the Schematron validation interfaces are compiled in + */ +#if 1 +#define LIBXML_SCHEMATRON_ENABLED +#endif + +/** + * LIBXML_ICONV_ENABLED: + * + * Whether iconv support is available + */ +#if 0 +#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 0 +#define DEBUG_MEMORY_LOCATION +#endif + +/** + * LIBXML_DEBUG_RUNTIME: + * + * Whether the runtime debugging is configured in + */ +#if 0 +#define LIBXML_DEBUG_RUNTIME +#endif + +/** + * LIBXML_DLL_IMPORT: + * + * Used on Windows (MS C compiler only) to declare a variable as + * imported from the library. This macro should be empty when compiling + * libxml itself. It should expand to __declspec(dllimport) + * when the client code includes this header, and that only if the client + * links dynamically against libxml. + * For this to work, we need three macros. One tells us which compiler is + * being used and luckily the compiler defines such a thing: _MSC_VER. The + * second macro tells us if we are compiling libxml or the client code and + * we define the macro IN_LIBXML on the compiler's command line for this + * purpose. The third macro, LIBXML_STATIC, must be defined by any client + * code which links against libxml statically. + */ +#ifndef LIBXML_DLL_IMPORT +#if defined(_MSC_VER) && !defined(IN_LIBXML) && !defined(LIBXML_STATIC) +#define LIBXML_DLL_IMPORT __declspec(dllimport) +#else +#define LIBXML_DLL_IMPORT +#endif +#endif + +#ifdef __GNUC__ +#ifdef HAVE_ANSIDECL_H +#include +#endif + +/** + * ATTRIBUTE_UNUSED: + * + * Macro used to signal to GCC unused function parameters + */ + +#ifndef ATTRIBUTE_UNUSED +#define ATTRIBUTE_UNUSED +#endif + +/** + * ATTRIBUTE_ALLOC_SIZE: + * + * Macro used to indicate to GCC this is an allocator function + */ + +#ifndef ATTRIBUTE_ALLOC_SIZE +# if ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3))) +# define ATTRIBUTE_ALLOC_SIZE(x) __attribute__((alloc_size(x))) +# else +# define ATTRIBUTE_ALLOC_SIZE(x) +# endif +#else +# define ATTRIBUTE_ALLOC_SIZE(x) +#endif + +/** + * LIBXML_ATTR_FORMAT: + * + * Macro used to indicate to GCC the parameter are printf like + */ + +#ifndef LIBXML_ATTR_FORMAT +# if ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3))) +# define LIBXML_ATTR_FORMAT(fmt,args) __attribute__((__format__(__printf__,fmt,args))) +# else +# define LIBXML_ATTR_FORMAT(fmt,args) +# endif +#else +# define LIBXML_ATTR_FORMAT(fmt,args) +#endif + +#else /* !__GNUC__ */ +#define ATTRIBUTE_UNUSED +#define LIBXML_ATTR_FORMAT(fmt,args) +#define ATTRIBUTE_ALLOC_SIZE(x) +#endif /* __GNUC__ */ + +/* + * #pragma comment(lib, "iconv.lib") + * + * pragma understood my MS compiler which enables a conditional link with + * iconv. + */ +#ifdef _MSC_VER +#if defined LIBXML_ICONV_ENABLED && !defined LIBXML2_COMPILING_MSCCDEF +#pragma comment(lib, "iconv.lib") +#endif +#endif + +/* + * #pragma comment(lib, "kernel32.lib") + * + * pragma understood my MS compiler which enables a conditional link with + * kernel32. + */ +#ifdef _MSC_VER +#if defined LIBXML_MODULES_ENABLED +#pragma comment(lib, "kernel32.lib") +#endif +#endif + +#ifdef __cplusplus +} +#endif /* __cplusplus */ +#endif diff --git a/include/libxml/xmlwriter.h b/include/libxml/xmlwriter.h new file mode 100644 index 0000000..dd5add3 --- /dev/null +++ b/include/libxml/xmlwriter.h @@ -0,0 +1,488 @@ +/* + * Summary: text writing API for XML + * Description: text writing API for XML + * + * Copy: See Copyright for the status of this software. + * + * Author: Alfred Mickautsch + */ + +#ifndef __XML_XMLWRITER_H__ +#define __XML_XMLWRITER_H__ + +#include + +#ifdef LIBXML_WRITER_ENABLED + +#include +#include +#include +#include + +#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, ...) + LIBXML_ATTR_FORMAT(2,3); + XMLPUBFUN int XMLCALL + xmlTextWriterWriteVFormatComment(xmlTextWriterPtr writer, + const char *format, + va_list argptr) + LIBXML_ATTR_FORMAT(2,0); + 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, ...) + LIBXML_ATTR_FORMAT(3,4); + XMLPUBFUN int XMLCALL + xmlTextWriterWriteVFormatElement(xmlTextWriterPtr writer, + const xmlChar * name, + const char *format, + va_list argptr) + LIBXML_ATTR_FORMAT(3,0); + 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, ...) + LIBXML_ATTR_FORMAT(5,6); + XMLPUBFUN int XMLCALL + xmlTextWriterWriteVFormatElementNS(xmlTextWriterPtr writer, + const xmlChar * prefix, + const xmlChar * name, + const xmlChar * namespaceURI, + const char *format, + va_list argptr) + LIBXML_ATTR_FORMAT(5,0); + 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, ...) + LIBXML_ATTR_FORMAT(2,3); + XMLPUBFUN int XMLCALL + xmlTextWriterWriteVFormatRaw(xmlTextWriterPtr writer, + const char *format, va_list argptr) + LIBXML_ATTR_FORMAT(2,0); + 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, ...) + LIBXML_ATTR_FORMAT(2,3); + XMLPUBFUN int XMLCALL xmlTextWriterWriteVFormatString(xmlTextWriterPtr + writer, + const char + *format, + va_list argptr) + LIBXML_ATTR_FORMAT(2,0); + 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, ...) + LIBXML_ATTR_FORMAT(3,4); + XMLPUBFUN int XMLCALL + xmlTextWriterWriteVFormatAttribute(xmlTextWriterPtr writer, + const xmlChar * name, + const char *format, + va_list argptr) + LIBXML_ATTR_FORMAT(3,0); + 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, ...) + LIBXML_ATTR_FORMAT(5,6); + XMLPUBFUN int XMLCALL + xmlTextWriterWriteVFormatAttributeNS(xmlTextWriterPtr writer, + const xmlChar * prefix, + const xmlChar * name, + const xmlChar * namespaceURI, + const char *format, + va_list argptr) + LIBXML_ATTR_FORMAT(5,0); + 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, ...) + LIBXML_ATTR_FORMAT(3,4); + XMLPUBFUN int XMLCALL + xmlTextWriterWriteVFormatPI(xmlTextWriterPtr writer, + const xmlChar * target, + const char *format, va_list argptr) + LIBXML_ATTR_FORMAT(3,0); + 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, ...) + LIBXML_ATTR_FORMAT(2,3); + XMLPUBFUN int XMLCALL + xmlTextWriterWriteVFormatCDATA(xmlTextWriterPtr writer, + const char *format, va_list argptr) + LIBXML_ATTR_FORMAT(2,0); + 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, ...) + LIBXML_ATTR_FORMAT(5,6); + XMLPUBFUN int XMLCALL + xmlTextWriterWriteVFormatDTD(xmlTextWriterPtr writer, + const xmlChar * name, + const xmlChar * pubid, + const xmlChar * sysid, + const char *format, va_list argptr) + LIBXML_ATTR_FORMAT(5,0); + 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, ...) + LIBXML_ATTR_FORMAT(3,4); + XMLPUBFUN int XMLCALL + xmlTextWriterWriteVFormatDTDElement(xmlTextWriterPtr writer, + const xmlChar * name, + const char *format, + va_list argptr) + LIBXML_ATTR_FORMAT(3,0); + 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, ...) + LIBXML_ATTR_FORMAT(3,4); + XMLPUBFUN int XMLCALL + xmlTextWriterWriteVFormatDTDAttlist(xmlTextWriterPtr writer, + const xmlChar * name, + const char *format, + va_list argptr) + LIBXML_ATTR_FORMAT(3,0); + 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, ...) + LIBXML_ATTR_FORMAT(4,5); + XMLPUBFUN int XMLCALL + xmlTextWriterWriteVFormatDTDInternalEntity(xmlTextWriterPtr writer, + int pe, + const xmlChar * name, + const char *format, + va_list argptr) + LIBXML_ATTR_FORMAT(4,0); + 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); + + XMLPUBFUN int XMLCALL + xmlTextWriterSetQuoteChar(xmlTextWriterPtr writer, xmlChar quotechar); + + +/* + * misc + */ + XMLPUBFUN int XMLCALL xmlTextWriterFlush(xmlTextWriterPtr writer); + +#ifdef __cplusplus +} +#endif + +#endif /* LIBXML_WRITER_ENABLED */ + +#endif /* __XML_XMLWRITER_H__ */ diff --git a/include/libxml/xpath.h b/include/libxml/xpath.h new file mode 100644 index 0000000..d96776c --- /dev/null +++ b/include/libxml/xpath.h @@ -0,0 +1,557 @@ +/* + * 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 + +#ifdef LIBXML_XPATH_ENABLED + +#include +#include +#include +#endif /* LIBXML_XPATH_ENABLED */ + +#if defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) +#ifdef __cplusplus +extern "C" { +#endif +#endif /* LIBXML_XPATH_ENABLED or LIBXML_SCHEMAS_ENABLED */ + +#ifdef LIBXML_XPATH_ENABLED + +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, + XPATH_INVALID_CTXT, + XPATH_STACK_ERROR, + XPATH_FORBID_VARIABLE_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 */ +}; + +/** + * 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); + +/* + * Function and Variable Lookup. + */ + +/** + * xmlXPathVariableLookupFunc: + * @ctxt: an XPath context + * @name: name of the variable + * @ns_uri: the namespace name hosting this variable + * + * Prototype for callbacks used to plug variable lookup in the XPath + * engine. + * + * Returns the XPath object value or NULL if not found. + */ +typedef xmlXPathObjectPtr (*xmlXPathVariableLookupFunc) (void *ctxt, + const xmlChar *name, + const xmlChar *ns_uri); + +/** + * 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); + +/** + * xmlXPathFlags: + * Flags for XPath engine compilation and runtime + */ +/** + * XML_XPATH_CHECKNS: + * + * check namespaces at compilation + */ +#define XML_XPATH_CHECKNS (1<<0) +/** + * XML_XPATH_NOVAR: + * + * forbid variables in expression + */ +#define XML_XPATH_NOVAR (1<<1) + +/** + * xmlXPathContext: + * + * Expression evaluation occurs with respect to a context. + * he context consists of: + * - a node (the context node) + * - a node list (the context node list) + * - a set of variable bindings + * - a function library + * - the set of namespace declarations in scope for the expression + * Following the switch to hash tables, this need to be trimmed up at + * the next binary incompatible release. + * The node may be modified when the context is passed to libxml2 + * for an XPath evaluation so you may need to initialize it again + * before the next call. + */ + +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; /* is 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 */ + xmlXPathVariableLookupFunc 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 */ + xmlXPathFuncLookupFunc 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 namespaces 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 */ + + /* dictionary */ + xmlDictPtr dict; /* dictionary if any */ + + int flags; /* flags to control compilation */ + + /* Cache for reusal of XPath objects */ + void *cache; +}; + +/* + * 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 */ + + int valueFrame; /* used to limit Pop on the stack */ +}; + +/************************************************************************ + * * + * Public API * + * * + ************************************************************************/ + +/** + * Objects and Nodesets handling + */ + +XMLPUBVAR double xmlXPathNAN; +XMLPUBVAR double xmlXPathPINF; +XMLPUBVAR double xmlXPathNINF; + +/* 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 xmlXPathContextPtr XMLCALL + xmlXPathNewContext (xmlDocPtr doc); +XMLPUBFUN void XMLCALL + xmlXPathFreeContext (xmlXPathContextPtr ctxt); +XMLPUBFUN int XMLCALL + xmlXPathContextSetCache(xmlXPathContextPtr ctxt, + int active, + int value, + int options); +/** + * Evaluation functions. + */ +XMLPUBFUN long XMLCALL + xmlXPathOrderDocElems (xmlDocPtr doc); +XMLPUBFUN int XMLCALL + xmlXPathSetContextNode (xmlNodePtr node, + xmlXPathContextPtr ctx); +XMLPUBFUN xmlXPathObjectPtr XMLCALL + xmlXPathNodeEval (xmlNodePtr node, + const xmlChar *str, + xmlXPathContextPtr ctx); +XMLPUBFUN xmlXPathObjectPtr XMLCALL + xmlXPathEval (const xmlChar *str, + xmlXPathContextPtr ctx); +XMLPUBFUN xmlXPathObjectPtr XMLCALL + 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 int XMLCALL + xmlXPathCompiledEvalToBoolean(xmlXPathCompExprPtr comp, + xmlXPathContextPtr ctxt); +XMLPUBFUN void XMLCALL + xmlXPathFreeCompExpr (xmlXPathCompExprPtr comp); +#endif /* LIBXML_XPATH_ENABLED */ +#if defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) +XMLPUBFUN void XMLCALL + xmlXPathInit (void); +XMLPUBFUN int XMLCALL + xmlXPathIsNaN (double val); +XMLPUBFUN int XMLCALL + xmlXPathIsInf (double val); + +#ifdef __cplusplus +} +#endif + +#endif /* LIBXML_XPATH_ENABLED or LIBXML_SCHEMAS_ENABLED*/ +#endif /* ! __XML_XPATH_H__ */ diff --git a/include/libxml/xpathInternals.h b/include/libxml/xpathInternals.h new file mode 100644 index 0000000..76a6b48 --- /dev/null +++ b/include/libxml/xpathInternals.h @@ -0,0 +1,632 @@ +/* + * 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 +#include + +#ifdef LIBXML_XPATH_ENABLED + +#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)); \ + if ((ctxt) != NULL) (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 (ctxt == NULL) return; \ + if (nargs != (x)) \ + XP_ERROR(XPATH_INVALID_ARITY); \ + if (ctxt->valueNr < ctxt->valueFrame + (x)) \ + XP_ERROR(XPATH_STACK_ERROR); + +/** + * 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. + */ + +XMLPUBFUN void XMLCALL + xmlXPathRegisterVariableLookup (xmlXPathContextPtr ctxt, + xmlXPathVariableLookupFunc f, + void *data); + +/* + * Function Lookup forwarding. + */ + +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 int XMLCALL + xmlXPathNodeSetAdd (xmlNodeSetPtr cur, + xmlNodePtr val); +XMLPUBFUN int XMLCALL + xmlXPathNodeSetAddUnique (xmlNodeSetPtr cur, + xmlNodePtr val); +XMLPUBFUN int 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 /* LIBXML_XPATH_ENABLED */ +#endif /* ! __XML_XPATH_INTERNALS_H__ */ diff --git a/include/libxml/xpointer.h b/include/libxml/xpointer.h new file mode 100644 index 0000000..b99112b --- /dev/null +++ b/include/libxml/xpointer.h @@ -0,0 +1,114 @@ +/* + * 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 + +#ifdef LIBXML_XPTR_ENABLED + +#include +#include + +#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 /* LIBXML_XPTR_ENABLED */ +#endif /* __XML_XPTR_H__ */ diff --git a/include/win32config.h b/include/win32config.h new file mode 100644 index 0000000..40cf7df --- /dev/null +++ b/include/win32config.h @@ -0,0 +1,128 @@ +#ifndef __LIBXML_WIN32_CONFIG__ +#define __LIBXML_WIN32_CONFIG__ + +#define HAVE_CTYPE_H +#define HAVE_STDARG_H +#define HAVE_MALLOC_H +#define HAVE_ERRNO_H +#define SEND_ARG2_CAST +#define GETHOSTBYNAME_ARG_CAST + +#if defined(_WIN32_WCE) +#undef HAVE_ERRNO_H +#include +#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 +#include +#endif + +#include + +#ifndef ICONV_CONST +#define ICONV_CONST const +#endif + +#ifdef NEED_SOCKETS +#include +#endif + +/* + * Windows platforms may define except + */ +#undef except + +#define HAVE_ISINF +#define HAVE_ISNAN +#include +#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 +/* 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) +#define mkdir(p,m) _mkdir(p) +#if _MSC_VER < 1900 +#define snprintf _snprintf +#endif +#if _MSC_VER < 1500 +#define vsnprintf(b,c,f,a) _vsnprintf(b,c,f,a) +#endif +#elif defined(__MINGW32__) +#define mkdir(p,m) _mkdir(p) +#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) && !defined(_WIN32_WCE) +#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..e6a1a99 --- /dev/null +++ b/include/wsockcompat.h @@ -0,0 +1,86 @@ +/* include/wsockcompat.h + * Windows -> Berkeley Sockets compatibility things. + */ + +#if !defined __XML_WSOCKCOMPAT_H__ +#define __XML_WSOCKCOMPAT_H__ + +#ifdef _WIN32_WCE +#include +#else +#undef HAVE_ERRNO_H +#include + +/* the following is a workaround a problem for 'inline' keyword in said + header when compiled with Borland C++ 6 */ +#if defined(__BORLANDC__) && !defined(__cplusplus) +#define inline __inline +#define _inline __inline +#endif + +#include + +/* Check if ws2tcpip.h is a recent version which provides getaddrinfo() */ +#if defined(GetAddrInfo) +#include +#define HAVE_GETADDRINFO +#endif +#endif + +#if defined( __MINGW32__ ) || defined( _MSC_VER ) +/* Include here to ensure that it doesn't get included later + * (e.g. by iconv.h) and overwrites the definition of EWOULDBLOCK. */ +#include +#undef EWOULDBLOCK +#endif + +#if !defined SOCKLEN_T +#define SOCKLEN_T int +#endif + +#define EWOULDBLOCK WSAEWOULDBLOCK +#define ESHUTDOWN WSAESHUTDOWN + +#if (!defined(_MSC_VER) || (_MSC_VER < 1600)) +#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 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 /* _MSC_VER */ + +#endif /* __XML_WSOCKCOMPAT_H__ */ diff --git a/legacy.c b/legacy.c new file mode 100644 index 0000000..86362bf --- /dev/null +++ b/legacy.c @@ -0,0 +1,1343 @@ +/* + * 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 + +#include +#include +#include +#include +#include + +void xmlUpgradeOldNs(xmlDocPtr doc); + +/************************************************************************ + * * + * Deprecated functions kept for compatibility * + * * + ************************************************************************/ + +#ifdef LIBXML_HTML_ENABLED +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); +} +#endif + +/** + * 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 ' + +#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" +#elif defined(_WIN32_WCE) +/* + * Windows CE compatibility definitions and functions + * This is needed to compile libxml2 for Windows CE. + * At least I tested it with WinCE 5.0 for Emulator and WinCE 4.2/SH4 target + */ +#include +#include +#else +/* + * Currently supported platforms use either autoconf or + * copy to config.h own "preset" configuration file. + * As result ifdef HAVE_CONFIG_H is omited here. + */ +#include "config.h" +#include +#endif + +#if defined(__Lynx__) +#include /* pull definition of size_t */ +#include +int snprintf(char *, size_t, const char *, ...); +int vfprintf(FILE *, const char *, va_list); +#endif + +#ifndef WITH_TRIO +#include +#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) LIBXML_ATTR_FORMAT(2,0); +#ifdef LIBXML_HTML_ENABLED +/* + * internal function of HTML parser needed for xmlParseInNodeContext + * but not part of the API + */ +void __htmlParseContent(void *ctx); +#endif + +/* + * internal global initialization critical section routines. + */ +void __xmlGlobalInitMutexLock(void); +void __xmlGlobalInitMutexUnlock(void); +void __xmlGlobalInitMutexDestroy(void); + +int __xmlInitializeDict(void); + +#if defined(HAVE_RAND) && defined(HAVE_SRAND) && defined(HAVE_TIME) +/* + * internal thread safe random function + */ +int __xmlRandom(void); +#endif + +XMLPUBFUN xmlChar * XMLCALL xmlEscapeFormatString(xmlChar **msg); +int xmlNop(void); + +#ifdef IN_LIBXML +#ifdef __GNUC__ +#ifdef PIC +#ifdef linux +#if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || (__GNUC__ > 3) +#include "elfgcchack.h" +#endif +#endif +#endif +#endif +#endif +#if !defined(PIC) && !defined(NOLIBTOOL) +# define LIBXML_STATIC +#endif +#endif /* ! __XML_LIBXML_H__ */ diff --git a/libxml.m4 b/libxml.m4 new file mode 100644 index 0000000..68cd824 --- /dev/null +++ b/libxml.m4 @@ -0,0 +1,188 @@ +# Configure paths for LIBXML2 +# Mike Hommey 2004-06-19 +# use CPPFLAGS instead of CFLAGS +# 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_CPPFLAGS 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_CPPFLAGS=`$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_CPPFLAGS="$CPPFLAGS" + ac_save_LIBS="$LIBS" + CPPFLAGS="$CPPFLAGS $XML_CPPFLAGS" + 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 +#include +#include +#include + +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, µ) != 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"]) + CPPFLAGS="$ac_save_CPPFLAGS" + 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..." + CPPFLAGS="$CPPFLAGS $XML_CPPFLAGS" + LIBS="$LIBS $XML_LIBS" + AC_TRY_LINK([ +#include +#include +], [ 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" ]) + CPPFLAGS="$ac_save_CPPFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + + XML_CPPFLAGS="" + XML_LIBS="" + ifelse([$3], , :, [$3]) + fi + AC_SUBST(XML_CPPFLAGS) + AC_SUBST(XML_LIBS) + rm -f conf.xmltest +]) diff --git a/libxml.spec.in b/libxml.spec.in new file mode 100644 index 0000000..9029a18 --- /dev/null +++ b/libxml.spec.in @@ -0,0 +1,199 @@ +%global with_python3 1 + +Summary: Library providing XML and HTML support +Name: libxml2 +Version: @VERSION@ +Release: 1%{?dist}%{?extra_release} +License: MIT +Group: Development/Libraries +Source: ftp://xmlsoft.org/libxml2/libxml2-%{version}.tar.gz +BuildRoot: %{_tmppath}/%{name}-%{version}-root +BuildRequires: python-devel +%if 0%{?with_python3} +BuildRequires: python3-devel +%endif # with_python3 +BuildRequires: zlib-devel +BuildRequires: pkgconfig +BuildRequires: xz-devel +URL: http://xmlsoft.org/ + +%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 sub nodes 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}-%{release} +Requires: zlib-devel +Requires: xz-devel +Requires: pkgconfig + +%description devel +Libraries, include files, etc you can use to develop XML applications. +This library allows to manipulate XML files. It includes support +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 sub nodes or ranges. A flexible Input/Output mechanism is +available, with existing HTTP and FTP modules and combined to an +URI library. + +%package static +Summary: Static library for libxml2 +Group: Development/Libraries +Requires: libxml2 = %{version}-%{release} + +%description static +Static library for libxml2 provided for specific uses or shaving a few +microseconds when parsing, do not link to them for generic purpose packages. + +%package python +Summary: Python bindings for the libxml2 library +Group: Development/Libraries +Requires: libxml2 = %{version}-%{release} + +%description python +The libxml2-python package contains a Python 2 module that permits applications +written in the Python programming language, version 2, 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. + +%if 0%{?with_python3} +%package python3 +Summary: Python 3 bindings for the libxml2 library +Group: Development/Libraries +Requires: libxml2 = %{version}-%{release} + +%description python3 +The libxml2-python3 package contains a Python 3 module that permits +applications written in the Python programming language, version 3, 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. +%endif # with_python3 + +%prep +%setup -q + +%build +%configure +make %{_smp_mflags} + +%install +rm -fr %{buildroot} + +make install DESTDIR=%{buildroot} + +%if 0%{?with_python3} +make clean +%configure --with-python=%{__python3} +make install DESTDIR=%{buildroot} +%endif # with_python3 + + +rm -f $RPM_BUILD_ROOT%{_libdir}/*.la +rm -f $RPM_BUILD_ROOT%{_libdir}/python*/site-packages/*.a +rm -f $RPM_BUILD_ROOT%{_libdir}/python*/site-packages/*.la +rm -rf $RPM_BUILD_ROOT%{_datadir}/doc/libxml2-%{version}/* +rm -rf $RPM_BUILD_ROOT%{_datadir}/doc/libxml2-python-%{version}/* +(cd doc/examples ; make clean ; rm -rf .deps Makefile) +gzip -9 -c doc/libxml2-api.xml > doc/libxml2-api.xml.gz + +%check +make runtests + +%clean +rm -fr %{buildroot} + +%post -p /sbin/ldconfig + +%postun -p /sbin/ldconfig + +%files +%defattr(-, root, root) + +%doc AUTHORS NEWS README Copyright TODO +%doc %{_mandir}/man1/xmllint.1* +%doc %{_mandir}/man1/xmlcatalog.1* +%doc %{_mandir}/man3/libxml.3* + +%{_libdir}/lib*.so.* +%{_bindir}/xmllint +%{_bindir}/xmlcatalog + +%files devel +%defattr(-, root, root) + +%doc %{_mandir}/man1/xml2-config.1* +%doc AUTHORS NEWS README Copyright +%doc doc/*.html doc/html doc/*.gif doc/*.png +%doc doc/tutorial doc/libxml2-api.xml.gz +%doc doc/examples +%doc %dir %{_datadir}/gtk-doc/html/libxml2 +%doc %{_datadir}/gtk-doc/html/libxml2/*.devhelp +%doc %{_datadir}/gtk-doc/html/libxml2/*.html +%doc %{_datadir}/gtk-doc/html/libxml2/*.png +%doc %{_datadir}/gtk-doc/html/libxml2/*.css + +%{_libdir}/lib*.so +%{_libdir}/*.sh +%{_includedir}/* +%{_bindir}/xml2-config +%{_datadir}/aclocal/libxml.m4 +%{_libdir}/pkgconfig/libxml-2.0.pc +%{_libdir}/cmake/libxml2/libxml2-config.cmake + +%files static +%defattr(-, root, root) + +%{_libdir}/*a + +%files python +%defattr(-, root, root) + +%{_libdir}/python2*/site-packages/libxml2.py* +%{_libdir}/python2*/site-packages/drv_libxml2.py* +%{_libdir}/python2*/site-packages/libxml2mod* +%doc python/TODO +%doc python/libxml2class.txt +%doc python/tests/*.py +%doc doc/*.py +%doc doc/python.html + +%if 0%{?with_python3} +%files python3 +%defattr(-, root, root) + +%{_libdir}/python3*/site-packages/libxml2.py* +%{_libdir}/python3*/site-packages/drv_libxml2.py* +%{_libdir}/python3*/site-packages/__pycache__/libxml2.cpython-34.py* +%{_libdir}/python3*/site-packages/__pycache__/drv_libxml2.cpython-34.py* +%{_libdir}/python3*/site-packages/libxml2mod* +%doc python/TODO +%doc python/libxml2class.txt +%doc python/tests/*.py +%doc doc/*.py +%doc doc/python.html +%endif # with_python3 + +%changelog +* @RELDATE@ Daniel Veillard +- upstream release @VERSION@ see http://xmlsoft.org/news.html + diff --git a/libxml2-config.cmake.in b/libxml2-config.cmake.in new file mode 100644 index 0000000..6b16fc2 --- /dev/null +++ b/libxml2-config.cmake.in @@ -0,0 +1,50 @@ +# libxml2-config.cmake +# -------------------- +# +# Libxml2 cmake module. +# THis module sets the following variables: +# +# :: +# +# LIBXML2_INCLUDE_DIRS - Directory where libxml2 headers are located. +# LIBXML2_LIBRARIES - xml2 libraries to link against. +# LIBXML2_VERSION_MAJOR - The major version of libxml2. +# LIBXML2_VERSION_MINOR - The minor version of libxml2. +# LIBXML2_VERSION_PATCH - The patch version of libxml2. +# LIBXML2_VERSION_STRING - version number as a string (ex: "2.3.4") +# LIBXML2_MODULES - whether libxml2 as dso support + +get_filename_component(_libxml2_rootdir ${CMAKE_CURRENT_LIST_DIR}/../../../ ABSOLUTE) + +set(LIBXML2_VERSION_MAJOR @LIBXML_MAJOR_VERSION@) +set(LIBXML2_VERSION_MINOR @LIBXML_MINOR_VERSION@) +set(LIBXML2_VERSION_MICRO @LIBXML_MICRO_VERSION@) +set(LIBXML2_VERSION_STRING "@VERSION@") +set(LIBXML2_INSTALL_PREFIX ${_libxml2_rootdir}) +set(LIBXML2_INCLUDE_DIRS ${_libxml2_rootdir}/include ${_libxml2_rootdir}/include/libxml2) +set(LIBXML2_LIBRARY_DIR ${_libxml2_rootdir}/lib) +set(LIBXML2_LIBRARIES -L${LIBXML2_LIBRARY_DIR} -lxml2) + +if(@WITH_THREADS@) + find_package(Threads REQUIRED) + list(APPEND LIBXML2_LIBRARIES ${CMAKE_THREAD_LIBS_INIT}) +endif() + +if(@WITH_LZMA@) + find_package(LibLZMA REQUIRED) + list(APPEND LIBXML2_LIBRARIES ${LIBLZMA_LIBRARIES}) + list(APPEND LIBXML2_INCLUDE_DIRS ${LIBLZMA_INCLUDE_DIRS}) +endif() + +if(@WITH_ZLIB@) + find_package(ZLIB REQUIRED) + list(APPEND LIBXML2_LIBRARIES ${ZLIB_LIBRARIES}) + list(APPEND LIBXML2_INCLUDE_DIRS ${ZLIB_INCLUDE_DIRS}) +endif() + +list(APPEND LIBXML2_LIBRARIES @ICU_LIBS@ @ICONV_LIBS@ @M_LIBS@ @WIN32_EXTRA_LIBADD@ @LIBS@) + +# whether libxml2 has dso support +set(LIBXML2_MODULES @WITH_MODULES@) + +mark_as_advanced( LIBXML2_INCLUDE_DIRS LIBXML2_LIBRARIES ) diff --git a/libxml2.doap b/libxml2.doap new file mode 100644 index 0000000..7b24b33 --- /dev/null +++ b/libxml2.doap @@ -0,0 +1,19 @@ + + + libxml2 + XML parser and markup toolkit + + + + + + + Daniel Veillard + veillard + + + diff --git a/libxml2.syms b/libxml2.syms new file mode 100644 index 0000000..370dcf1 --- /dev/null +++ b/libxml2.syms @@ -0,0 +1,2281 @@ +# +# Officially exported symbols, for which header +# file definitions are installed in /usr/include/libxml2 +# +# Automatically generated from symbols.xml and syms.xsl +# +# Versions here are *fixed* to match the libxml2 version +# at which the symbol was introduced. This ensures that +# a new client app requiring symbol foo() can't accidentally +# run with old libxml2.so not providing foo() - the global +# soname version info can't enforce this since we never +# change the soname +# + +LIBXML2_2.4.30 { + global: + +# debugXML + xmlBoolToText; + xmlDebugDumpAttr; + xmlDebugDumpAttrList; + xmlDebugDumpDTD; + xmlDebugDumpDocument; + xmlDebugDumpDocumentHead; + xmlDebugDumpEntities; + xmlDebugDumpNode; + xmlDebugDumpNodeList; + xmlDebugDumpOneNode; + xmlDebugDumpString; + xmlLsCountNode; + xmlLsOneNode; + xmlShell; + xmlShellBase; + xmlShellCat; + xmlShellDir; + xmlShellDu; + xmlShellList; + xmlShellLoad; + xmlShellPrintNode; + xmlShellPrintXPathError; + xmlShellPrintXPathResult; + xmlShellPwd; + xmlShellSave; + xmlShellValidate; + xmlShellWrite; + +# xpointer + xmlXPtrBuildNodeList; + xmlXPtrEval; + xmlXPtrEvalRangePredicate; + xmlXPtrFreeLocationSet; + xmlXPtrLocationSetAdd; + xmlXPtrLocationSetCreate; + xmlXPtrLocationSetDel; + xmlXPtrLocationSetMerge; + xmlXPtrLocationSetRemove; + xmlXPtrNewCollapsedRange; + xmlXPtrNewContext; + xmlXPtrNewLocationSetNodeSet; + xmlXPtrNewLocationSetNodes; + xmlXPtrNewRange; + xmlXPtrNewRangeNodeObject; + xmlXPtrNewRangeNodePoint; + xmlXPtrNewRangeNodes; + xmlXPtrNewRangePointNode; + xmlXPtrNewRangePoints; + xmlXPtrRangeToFunction; + xmlXPtrWrapLocationSet; + +# SAX + attribute; + attributeDecl; + cdataBlock; + characters; + checkNamespace; + comment; + +# SAX2 + docbDefaultSAXHandlerInit; + +# SAX + elementDecl; + endDocument; + endElement; + entityDecl; + externalSubset; + getColumnNumber; + getEntity; + getLineNumber; + getNamespace; + getParameterEntity; + getPublicId; + getSystemId; + globalNamespace; + hasExternalSubset; + hasInternalSubset; + +# SAX2 + htmlDefaultSAXHandlerInit; + +# SAX + ignorableWhitespace; + initdocbDefaultSAXHandler; + inithtmlDefaultSAXHandler; + initxmlDefaultSAXHandler; + internalSubset; + isStandalone; + namespaceDecl; + notationDecl; + processingInstruction; + reference; + resolveEntity; + setDocumentLocator; + setNamespace; + startDocument; + startElement; + unparsedEntityDecl; + +# SAX2 + xmlDefaultSAXHandlerInit; + +# parserInternals + htmlCreateFileParserCtxt; + htmlInitAutoClose; + inputPop; + inputPush; + namePop; + namePush; + nodePop; + nodePush; + xmlCheckLanguageID; + xmlCopyChar; + xmlCopyCharMultiByte; + xmlCreateEntityParserCtxt; + xmlCreateFileParserCtxt; + xmlCreateMemoryParserCtxt; + xmlCurrentChar; + xmlDecodeEntities; + xmlFreeInputStream; + xmlHandleEntity; + +# chvalid + xmlIsBaseChar; + xmlIsBlank; + xmlIsChar; + xmlIsCombining; + xmlIsDigit; + xmlIsExtender; + xmlIsIdeographic; + +# parserInternals + xmlIsLetter; + +# chvalid + xmlIsPubidChar; + +# parserInternals + xmlNamespaceParseNCName; + xmlNamespaceParseNSDef; + xmlNamespaceParseQName; + xmlNewEntityInputStream; + xmlNewInputFromFile; + xmlNewInputStream; + +# parser + xmlNewParserCtxt; + +# parserInternals + xmlNewStringInputStream; + xmlNextChar; + xmlParseAttValue; + xmlParseAttribute; + xmlParseAttributeListDecl; + xmlParseAttributeType; + xmlParseCDSect; + xmlParseCharData; + xmlParseCharRef; + xmlParseComment; + xmlParseContent; + xmlParseDefaultDecl; + xmlParseDocTypeDecl; + xmlParseElement; + xmlParseElementChildrenContentDecl; + xmlParseElementContentDecl; + xmlParseElementDecl; + xmlParseElementMixedContentDecl; + xmlParseEncName; + xmlParseEncodingDecl; + xmlParseEndTag; + xmlParseEntityDecl; + xmlParseEntityRef; + xmlParseEntityValue; + xmlParseEnumeratedType; + xmlParseEnumerationType; + xmlParseExternalID; + xmlParseExternalSubset; + xmlParseMarkupDecl; + xmlParseMisc; + xmlParseName; + xmlParseNamespace; + xmlParseNmtoken; + xmlParseNotationDecl; + xmlParseNotationType; + xmlParsePEReference; + xmlParsePI; + xmlParsePITarget; + xmlParsePubidLiteral; + xmlParseQuotedString; + xmlParseReference; + xmlParseSDDecl; + xmlParseStartTag; + xmlParseSystemLiteral; + xmlParseTextDecl; + xmlParseVersionInfo; + xmlParseVersionNum; + xmlParseXMLDecl; + xmlParserHandlePEReference; + xmlParserHandleReference; + xmlParserInputShrink; + xmlPopInput; + xmlPushInput; + xmlScanName; + xmlSetEntityReferenceFunc; + xmlSkipBlankChars; + xmlSplitQName; + xmlStringComment; # variable + xmlStringCurrentChar; + xmlStringDecodeEntities; + xmlStringText; # variable + xmlStringTextNoenc; # variable + xmlSwitchEncoding; + xmlSwitchToEncoding; + +# c14n + xmlC14NDocDumpMemory; + xmlC14NDocSave; + xmlC14NDocSaveTo; + xmlC14NExecute; + +# catalog + xmlACatalogAdd; + xmlACatalogDump; + xmlACatalogRemove; + xmlACatalogResolve; + xmlACatalogResolvePublic; + xmlACatalogResolveSystem; + xmlACatalogResolveURI; + xmlCatalogAdd; + xmlCatalogAddLocal; + xmlCatalogCleanup; + xmlCatalogConvert; + xmlCatalogDump; + xmlCatalogFreeLocal; + xmlCatalogGetDefaults; + xmlCatalogGetPublic; + xmlCatalogGetSystem; + xmlCatalogIsEmpty; + xmlCatalogLocalResolve; + xmlCatalogLocalResolveURI; + xmlCatalogRemove; + xmlCatalogResolve; + xmlCatalogResolvePublic; + xmlCatalogResolveSystem; + xmlCatalogResolveURI; + xmlCatalogSetDebug; + xmlCatalogSetDefaultPrefer; + xmlCatalogSetDefaults; + xmlConvertSGMLCatalog; + xmlFreeCatalog; + xmlInitializeCatalog; + xmlLoadACatalog; + xmlLoadCatalog; + xmlLoadCatalogs; + xmlLoadSGMLSuperCatalog; + xmlNewCatalog; + xmlParseCatalogFile; + +# xpathInternals + valuePop; + valuePush; + xmlXPathAddValues; + xmlXPathBooleanFunction; + xmlXPathCeilingFunction; + xmlXPathCompareValues; + xmlXPathConcatFunction; + xmlXPathContainsFunction; + xmlXPathCountFunction; + xmlXPathDebugDumpCompExpr; + xmlXPathDebugDumpObject; + xmlXPathDifference; + xmlXPathDistinct; + xmlXPathDistinctSorted; + xmlXPathDivValues; + xmlXPathEqualValues; + xmlXPathEvalExpr; + xmlXPathEvaluatePredicateResult; + xmlXPathFalseFunction; + xmlXPathFloorFunction; + xmlXPathFreeParserContext; + xmlXPathFunctionLookup; + xmlXPathFunctionLookupNS; + xmlXPathHasSameNodes; + xmlXPathIdFunction; + xmlXPathIntersection; + xmlXPathIsNodeType; + xmlXPathLangFunction; + xmlXPathLastFunction; + xmlXPathLeading; + xmlXPathLeadingSorted; + xmlXPathLocalNameFunction; + xmlXPathModValues; + xmlXPathMultValues; + xmlXPathNamespaceURIFunction; + xmlXPathNewBoolean; + xmlXPathNewCString; + xmlXPathNewFloat; + xmlXPathNewNodeSet; + xmlXPathNewNodeSetList; + xmlXPathNewParserContext; + xmlXPathNewString; + xmlXPathNewValueTree; + xmlXPathNextAncestor; + xmlXPathNextAncestorOrSelf; + xmlXPathNextAttribute; + xmlXPathNextChild; + xmlXPathNextDescendant; + xmlXPathNextDescendantOrSelf; + xmlXPathNextFollowing; + xmlXPathNextFollowingSibling; + xmlXPathNextNamespace; + xmlXPathNextParent; + xmlXPathNextPreceding; + xmlXPathNextPrecedingSibling; + xmlXPathNextSelf; + xmlXPathNodeLeading; + xmlXPathNodeLeadingSorted; + xmlXPathNodeSetAdd; + xmlXPathNodeSetAddNs; + xmlXPathNodeSetAddUnique; + xmlXPathNodeSetContains; + xmlXPathNodeSetDel; + xmlXPathNodeSetFreeNs; + xmlXPathNodeSetMerge; + xmlXPathNodeSetRemove; + xmlXPathNodeSetSort; + xmlXPathNodeTrailing; + xmlXPathNodeTrailingSorted; + xmlXPathNormalizeFunction; + xmlXPathNotEqualValues; + xmlXPathNotFunction; + xmlXPathNsLookup; + xmlXPathNumberFunction; + xmlXPathParseNCName; + xmlXPathParseName; + xmlXPathPopBoolean; + xmlXPathPopExternal; + xmlXPathPopNodeSet; + xmlXPathPopNumber; + xmlXPathPopString; + xmlXPathPositionFunction; + xmlXPathRegisterAllFunctions; + xmlXPathRegisterFunc; + xmlXPathRegisterFuncLookup; + xmlXPathRegisterFuncNS; + xmlXPathRegisterNs; + xmlXPathRegisterVariable; + xmlXPathRegisterVariableLookup; + xmlXPathRegisterVariableNS; + xmlXPathRegisteredFuncsCleanup; + xmlXPathRegisteredNsCleanup; + xmlXPathRegisteredVariablesCleanup; + xmlXPathRoot; + xmlXPathRoundFunction; + xmlXPathStartsWithFunction; + xmlXPathStringEvalNumber; + xmlXPathStringFunction; + xmlXPathStringLengthFunction; + xmlXPathSubValues; + xmlXPathSubstringAfterFunction; + xmlXPathSubstringBeforeFunction; + xmlXPathSubstringFunction; + xmlXPathSumFunction; + xmlXPathTrailing; + xmlXPathTrailingSorted; + xmlXPathTranslateFunction; + xmlXPathTrueFunction; + xmlXPathValueFlipSign; + xmlXPathVariableLookup; + xmlXPathVariableLookupNS; + xmlXPathWrapCString; + xmlXPathWrapExternal; + xmlXPathWrapNodeSet; + xmlXPathWrapString; + xmlXPatherror; + +# xmlautomata + xmlAutomataCompile; + xmlAutomataGetInitState; + xmlAutomataIsDeterminist; + xmlAutomataNewAllTrans; + xmlAutomataNewCountTrans; + xmlAutomataNewCountedTrans; + xmlAutomataNewCounter; + xmlAutomataNewCounterTrans; + xmlAutomataNewEpsilon; + xmlAutomataNewOnceTrans; + xmlAutomataNewState; + xmlAutomataNewTransition; + xmlAutomataSetFinalState; + xmlFreeAutomata; + xmlNewAutomata; + +# HTMLtree + htmlDocContentDumpFormatOutput; + htmlDocContentDumpOutput; + htmlDocDump; + htmlDocDumpMemory; + htmlGetMetaEncoding; + htmlIsBooleanAttr; + htmlNewDoc; + htmlNewDocNoDtD; + htmlNodeDump; + htmlNodeDumpFile; + htmlNodeDumpFileFormat; + htmlNodeDumpFormatOutput; + htmlNodeDumpOutput; + htmlSaveFile; + htmlSaveFileEnc; + htmlSaveFileFormat; + htmlSetMetaEncoding; + +# nanoftp + xmlNanoFTPCheckResponse; + xmlNanoFTPCleanup; + xmlNanoFTPClose; + xmlNanoFTPCloseConnection; + xmlNanoFTPConnect; + xmlNanoFTPConnectTo; + xmlNanoFTPCwd; + xmlNanoFTPFreeCtxt; + xmlNanoFTPGet; + xmlNanoFTPGetConnection; + xmlNanoFTPGetResponse; + xmlNanoFTPGetSocket; + xmlNanoFTPInit; + xmlNanoFTPList; + xmlNanoFTPNewCtxt; + xmlNanoFTPOpen; + xmlNanoFTPProxy; + xmlNanoFTPQuit; + xmlNanoFTPRead; + xmlNanoFTPScanProxy; + xmlNanoFTPUpdateURL; + +# DOCBparser + docbCreateFileParserCtxt; + docbCreatePushParserCtxt; + docbEncodeEntities; + docbFreeParserCtxt; + docbParseChunk; + docbParseDoc; + docbParseDocument; + docbParseFile; + docbSAXParseDoc; + docbSAXParseFile; + +# xpath + xmlXPathCastBooleanToNumber; + xmlXPathCastBooleanToString; + xmlXPathCastNodeSetToBoolean; + xmlXPathCastNodeSetToNumber; + xmlXPathCastNodeSetToString; + xmlXPathCastNodeToNumber; + xmlXPathCastNodeToString; + xmlXPathCastNumberToBoolean; + xmlXPathCastNumberToString; + xmlXPathCastStringToBoolean; + xmlXPathCastStringToNumber; + xmlXPathCastToBoolean; + xmlXPathCastToNumber; + xmlXPathCastToString; + xmlXPathCmpNodes; + xmlXPathCompile; + xmlXPathCompiledEval; + xmlXPathConvertBoolean; + xmlXPathConvertNumber; + xmlXPathConvertString; + xmlXPathEval; + xmlXPathEvalExpression; + xmlXPathEvalPredicate; + xmlXPathFreeCompExpr; + xmlXPathFreeContext; + xmlXPathFreeNodeSet; + xmlXPathFreeNodeSetList; + xmlXPathFreeObject; + xmlXPathInit; + xmlXPathIsInf; + xmlXPathIsNaN; + xmlXPathNAN; # variable + xmlXPathNINF; # variable + xmlXPathNewContext; + xmlXPathNodeSetCreate; + xmlXPathObjectCopy; + xmlXPathPINF; # variable + +# xlink + xlinkGetDefaultDetect; + xlinkGetDefaultHandler; + xlinkIsLink; + xlinkSetDefaultDetect; + xlinkSetDefaultHandler; + +# entities + xmlAddDocEntity; + xmlAddDtdEntity; + xmlCleanupPredefinedEntities; + xmlCopyEntitiesTable; + xmlCreateEntitiesTable; + xmlDumpEntitiesTable; + xmlDumpEntityDecl; + xmlEncodeEntities; + xmlEncodeEntitiesReentrant; + xmlEncodeSpecialChars; + xmlFreeEntitiesTable; + xmlGetDocEntity; + xmlGetDtdEntity; + xmlGetParameterEntity; + xmlGetPredefinedEntity; + xmlInitializePredefinedEntities; + +# xinclude + xmlXIncludeProcess; + +# list + 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; + +# xmlmemory + xmlInitMemory; + xmlMallocLoc; + xmlMemDisplay; + xmlMemFree; + xmlMemGet; + xmlMemMalloc; + xmlMemRealloc; + xmlMemSetup; + xmlMemShow; + xmlMemStrdupLoc; + xmlMemUsed; + xmlMemoryDump; + xmlMemoryStrdup; + xmlReallocLoc; + +# xmlIO + xmlAllocOutputBuffer; + xmlAllocParserInputBuffer; + xmlCheckFilename; + xmlCleanupInputCallbacks; + xmlCleanupOutputCallbacks; + xmlFileClose; + xmlFileMatch; + xmlFileOpen; + xmlFileRead; + xmlFreeParserInputBuffer; + xmlIOFTPClose; + xmlIOFTPMatch; + xmlIOFTPOpen; + xmlIOFTPRead; + xmlIOHTTPClose; + xmlIOHTTPMatch; + xmlIOHTTPOpen; + xmlIOHTTPOpenW; + xmlIOHTTPRead; + xmlNoNetExternalEntityLoader; + xmlNormalizeWindowsPath; + xmlOutputBufferClose; + xmlOutputBufferCreateFd; + xmlOutputBufferCreateFile; + xmlOutputBufferCreateFilename; + xmlOutputBufferCreateIO; + xmlOutputBufferFlush; + xmlOutputBufferWrite; + xmlOutputBufferWriteString; + xmlParserGetDirectory; + xmlParserInputBufferCreateFd; + xmlParserInputBufferCreateFile; + xmlParserInputBufferCreateFilename; + xmlParserInputBufferCreateIO; + xmlParserInputBufferCreateMem; + xmlParserInputBufferGrow; + xmlParserInputBufferPush; + xmlParserInputBufferRead; + xmlRegisterDefaultInputCallbacks; + xmlRegisterDefaultOutputCallbacks; + xmlRegisterHTTPPostCallbacks; + xmlRegisterInputCallbacks; + xmlRegisterOutputCallbacks; + +# xmlversion + xmlCheckVersion; + +# valid + xmlAddAttributeDecl; + xmlAddElementDecl; + xmlAddID; + xmlAddNotationDecl; + xmlAddRef; + xmlCopyAttributeTable; + xmlCopyElementContent; + xmlCopyElementTable; + xmlCopyEnumeration; + xmlCopyNotationTable; + xmlCreateEnumeration; + xmlDumpAttributeDecl; + xmlDumpAttributeTable; + xmlDumpElementDecl; + xmlDumpElementTable; + xmlDumpNotationDecl; + xmlDumpNotationTable; + xmlFreeAttributeTable; + xmlFreeElementContent; + xmlFreeElementTable; + xmlFreeEnumeration; + xmlFreeIDTable; + xmlFreeNotationTable; + xmlFreeRefTable; + xmlGetDtdAttrDesc; + xmlGetDtdElementDesc; + xmlGetDtdNotationDesc; + xmlGetDtdQAttrDesc; + xmlGetDtdQElementDesc; + xmlGetID; + xmlGetRefs; + xmlIsID; + xmlIsMixedElement; + xmlIsRef; + xmlNewElementContent; + xmlRemoveID; + xmlRemoveRef; + xmlSnprintfElementContent; + +# tree + xmlSplitQName2; + +# valid + xmlSprintfElementContent; + xmlValidBuildContentModel; + xmlValidCtxtNormalizeAttributeValue; + xmlValidGetPotentialChildren; + xmlValidGetValidElements; + xmlValidNormalizeAttributeValue; + xmlValidateAttributeDecl; + xmlValidateAttributeValue; + xmlValidateDocument; + xmlValidateDocumentFinal; + xmlValidateDtd; + xmlValidateDtdFinal; + xmlValidateElement; + xmlValidateElementDecl; + xmlValidateNameValue; + xmlValidateNamesValue; + xmlValidateNmtokenValue; + xmlValidateNmtokensValue; + xmlValidateNotationDecl; + xmlValidateNotationUse; + xmlValidateOneAttribute; + xmlValidateOneElement; + xmlValidateOneNamespace; + xmlValidateRoot; + +# HTMLparser + UTF8ToHtml; + htmlAutoCloseTag; + htmlCreatePushParserCtxt; + htmlEncodeEntities; + htmlEntityLookup; + htmlEntityValueLookup; + htmlFreeParserCtxt; + htmlHandleOmittedElem; + htmlIsAutoClosed; + htmlIsScriptAttribute; + htmlParseCharRef; + htmlParseChunk; + htmlParseDoc; + htmlParseDocument; + htmlParseElement; + htmlParseEntityRef; + htmlParseFile; + htmlSAXParseDoc; + htmlSAXParseFile; + htmlTagLookup; + +# xmlstring + xmlCharStrdup; + xmlCharStrndup; + +# parser + xmlCleanupParser; + xmlClearNodeInfoSeq; + xmlClearParserCtxt; + xmlCreateDocParserCtxt; + xmlCreateIOParserCtxt; + xmlCreatePushParserCtxt; + xmlFreeParserCtxt; + xmlGetExternalEntityLoader; + xmlGetFeature; + xmlGetFeaturesList; + +# globals + xmlGetWarningsDefaultValue; # variable + +# parser + xmlIOParseDTD; + xmlInitNodeInfoSeq; + xmlInitParser; + xmlInitParserCtxt; + xmlKeepBlanksDefault; + xmlLineNumbersDefault; + xmlLoadExternalEntity; + xmlNewIOInputStream; + xmlParseBalancedChunkMemory; + xmlParseBalancedChunkMemoryRecover; + xmlParseChunk; + xmlParseCtxtExternalEntity; + xmlParseDTD; + xmlParseDoc; + xmlParseDocument; + xmlParseEntity; + xmlParseExtParsedEnt; + xmlParseExternalEntity; + xmlParseFile; + xmlParseMemory; + xmlParserAddNodeInfo; + xmlParserFindNodeInfo; + xmlParserFindNodeInfoIndex; + xmlParserInputGrow; + xmlParserInputRead; + xmlPedanticParserDefault; + xmlRecoverDoc; + xmlRecoverFile; + xmlRecoverMemory; + xmlSAXParseDTD; + xmlSAXParseDoc; + xmlSAXParseEntity; + xmlSAXParseFile; + xmlSAXParseFileWithData; + xmlSAXParseMemory; + xmlSAXParseMemoryWithData; + xmlSAXUserParseFile; + xmlSAXUserParseMemory; + xmlSetExternalEntityLoader; + xmlSetFeature; + xmlSetupParserForBuffer; + xmlStopParser; + +# xmlstring + xmlStrEqual; + xmlStrcasecmp; + xmlStrcasestr; + xmlStrcat; + xmlStrchr; + xmlStrcmp; + xmlStrdup; + xmlStrlen; + xmlStrncasecmp; + xmlStrncat; + xmlStrncmp; + xmlStrndup; + xmlStrstr; + xmlStrsub; + +# parser + xmlSubstituteEntitiesDefault; + +# xmlreader + xmlFreeTextReader; + xmlNewTextReader; + xmlNewTextReaderFilename; + xmlTextReaderAttributeCount; + xmlTextReaderBaseUri; + xmlTextReaderDepth; + xmlTextReaderHasAttributes; + xmlTextReaderHasValue; + xmlTextReaderIsDefault; + xmlTextReaderIsEmptyElement; + xmlTextReaderLocalName; + xmlTextReaderName; + xmlTextReaderNamespaceUri; + xmlTextReaderNodeType; + xmlTextReaderPrefix; + xmlTextReaderQuoteChar; + xmlTextReaderRead; + xmlTextReaderValue; + xmlTextReaderXmlLang; + +# globals + docbDefaultSAXHandler; # variable + htmlDefaultSAXHandler; # variable + xmlDefaultSAXHandler; # variable + xmlDefaultSAXLocator; # variable + xmlDoValidityCheckingDefaultValue; # variable + xmlFree; # variable + xmlGenericError; # variable + xmlGenericErrorContext; # variable + xmlInitializeGlobalState; + xmlKeepBlanksDefaultValue; # variable + xmlLineNumbersDefaultValue; # variable + xmlLoadExtDtdDefaultValue; # variable + xmlMalloc; # variable + xmlMemStrdup; # variable + xmlParserDebugEntities; # variable + xmlParserVersion; # variable + xmlPedanticParserDefaultValue; # variable + xmlRealloc; # variable + xmlSaveNoEmptyTags; # variable + xmlSubstituteEntitiesDefaultValue; # variable + xmlTreeIndentString; # variable + +# threads + xmlCleanupThreads; + xmlFreeMutex; + xmlFreeRMutex; + xmlGetGlobalState; + xmlGetThreadId; + xmlInitThreads; + xmlIsMainThread; + xmlLockLibrary; + xmlMutexLock; + xmlMutexUnlock; + xmlNewMutex; + xmlNewRMutex; + xmlRMutexLock; + xmlRMutexUnlock; + xmlUnlockLibrary; + +# hash + xmlHashAddEntry; + xmlHashAddEntry2; + xmlHashAddEntry3; + xmlHashCopy; + xmlHashCreate; + xmlHashFree; + xmlHashLookup; + xmlHashLookup2; + xmlHashLookup3; + xmlHashRemoveEntry; + xmlHashRemoveEntry2; + xmlHashRemoveEntry3; + xmlHashScan; + xmlHashScan3; + xmlHashScanFull; + xmlHashScanFull3; + xmlHashSize; + xmlHashUpdateEntry; + xmlHashUpdateEntry2; + xmlHashUpdateEntry3; + +# xmlerror + initGenericErrorDefaultFunc; + xmlParserError; + xmlParserPrintFileContext; + xmlParserPrintFileInfo; + xmlParserValidityError; + xmlParserValidityWarning; + xmlParserWarning; + xmlSetGenericErrorFunc; + +# globals + oldXMLWDcompatibility; # variable + +# tree + xmlAddChild; + xmlAddChildList; + xmlAddNextSibling; + xmlAddPrevSibling; + xmlAddSibling; + xmlBufferAdd; + xmlBufferAddHead; + +# globals + xmlBufferAllocScheme; # variable + +# tree + xmlBufferCCat; + xmlBufferCat; + xmlBufferContent; + xmlBufferCreate; + xmlBufferCreateSize; + xmlBufferDump; + xmlBufferEmpty; + xmlBufferFree; + xmlBufferGrow; + xmlBufferLength; + xmlBufferResize; + xmlBufferSetAllocationScheme; + xmlBufferShrink; + xmlBufferWriteCHAR; + xmlBufferWriteChar; + xmlBufferWriteQuotedString; + xmlCopyDoc; + xmlCopyDtd; + xmlCopyNamespace; + xmlCopyNamespaceList; + xmlCopyNode; + xmlCopyNodeList; + xmlCopyProp; + xmlCopyPropList; + xmlCreateIntSubset; + +# globals + xmlDefaultBufferSize; # variable + +# tree + xmlDocCopyNode; + xmlDocDump; + xmlDocDumpFormatMemory; + xmlDocDumpFormatMemoryEnc; + xmlDocDumpMemory; + xmlDocDumpMemoryEnc; + xmlDocFormatDump; + xmlDocGetRootElement; + xmlDocSetRootElement; + xmlElemDump; + xmlFreeDoc; + xmlFreeDtd; + xmlFreeNode; + xmlFreeNodeList; + xmlFreeNs; + xmlFreeNsList; + xmlFreeProp; + xmlFreePropList; + xmlGetBufferAllocationScheme; + xmlGetCompressMode; + xmlGetDocCompressMode; + xmlGetIntSubset; + xmlGetLastChild; + xmlGetLineNo; + xmlGetNodePath; + xmlGetNsList; + xmlGetNsProp; + xmlGetProp; + xmlHasNsProp; + xmlHasProp; + +# globals + xmlIndentTreeOutput; # variable + +# tree + xmlIsBlankNode; + xmlIsXHTML; + xmlNewCDataBlock; + xmlNewCharRef; + xmlNewChild; + xmlNewComment; + xmlNewDoc; + xmlNewDocComment; + xmlNewDocFragment; + xmlNewDocNode; + xmlNewDocNodeEatName; + xmlNewDocProp; + xmlNewDocRawNode; + xmlNewDocText; + xmlNewDocTextLen; + xmlNewDtd; + xmlNewGlobalNs; + xmlNewNode; + xmlNewNodeEatName; + xmlNewNs; + xmlNewNsProp; + xmlNewNsPropEatName; + xmlNewPI; + xmlNewProp; + xmlNewReference; + xmlNewText; + xmlNewTextChild; + xmlNewTextLen; + xmlNodeAddContent; + xmlNodeAddContentLen; + xmlNodeDump; + xmlNodeDumpOutput; + xmlNodeGetBase; + xmlNodeGetContent; + xmlNodeGetLang; + xmlNodeGetSpacePreserve; + xmlNodeIsText; + xmlNodeListGetRawString; + xmlNodeListGetString; + xmlNodeSetBase; + xmlNodeSetContent; + xmlNodeSetContentLen; + xmlNodeSetLang; + xmlNodeSetName; + xmlNodeSetSpacePreserve; + xmlReconciliateNs; + xmlRemoveProp; + xmlReplaceNode; + xmlSaveFile; + xmlSaveFileEnc; + xmlSaveFileTo; + xmlSaveFormatFile; + xmlSaveFormatFileEnc; + xmlSaveFormatFileTo; + xmlSearchNs; + xmlSearchNsByHref; + xmlSetBufferAllocationScheme; + xmlSetCompressMode; + xmlSetDocCompressMode; + xmlSetListDoc; + xmlSetNs; + xmlSetNsProp; + xmlSetProp; + xmlSetTreeDoc; + xmlStringGetNodeList; + xmlStringLenGetNodeList; + xmlTextConcat; + xmlTextMerge; + xmlUnlinkNode; + xmlUnsetNsProp; + xmlUnsetProp; + +# xmlregexp + xmlRegExecPushString; + xmlRegFreeExecCtxt; + xmlRegFreeRegexp; + xmlRegNewExecCtxt; + xmlRegexpCompile; + xmlRegexpExec; + xmlRegexpIsDeterminist; + xmlRegexpPrint; + +# nanohttp + xmlNanoHTTPAuthHeader; + xmlNanoHTTPCleanup; + xmlNanoHTTPClose; + xmlNanoHTTPFetch; + xmlNanoHTTPInit; + xmlNanoHTTPMethod; + xmlNanoHTTPMethodRedir; + xmlNanoHTTPOpen; + xmlNanoHTTPOpenRedir; + xmlNanoHTTPRead; + xmlNanoHTTPReturnCode; + xmlNanoHTTPSave; + xmlNanoHTTPScanProxy; + +# xmlunicode + xmlUCSIsAlphabeticPresentationForms; + xmlUCSIsArabic; + xmlUCSIsArabicPresentationFormsA; + xmlUCSIsArabicPresentationFormsB; + xmlUCSIsArmenian; + xmlUCSIsArrows; + xmlUCSIsBasicLatin; + xmlUCSIsBengali; + xmlUCSIsBlock; + xmlUCSIsBlockElements; + xmlUCSIsBopomofo; + xmlUCSIsBopomofoExtended; + xmlUCSIsBoxDrawing; + xmlUCSIsBraillePatterns; + xmlUCSIsByzantineMusicalSymbols; + xmlUCSIsCJKCompatibility; + xmlUCSIsCJKCompatibilityForms; + xmlUCSIsCJKCompatibilityIdeographs; + xmlUCSIsCJKCompatibilityIdeographsSupplement; + xmlUCSIsCJKRadicalsSupplement; + xmlUCSIsCJKSymbolsandPunctuation; + xmlUCSIsCJKUnifiedIdeographs; + xmlUCSIsCJKUnifiedIdeographsExtensionA; + xmlUCSIsCJKUnifiedIdeographsExtensionB; + xmlUCSIsCat; + xmlUCSIsCatC; + xmlUCSIsCatCc; + xmlUCSIsCatCf; + xmlUCSIsCatCo; + xmlUCSIsCatCs; + xmlUCSIsCatL; + xmlUCSIsCatLl; + xmlUCSIsCatLm; + xmlUCSIsCatLo; + xmlUCSIsCatLt; + xmlUCSIsCatLu; + xmlUCSIsCatM; + xmlUCSIsCatMc; + xmlUCSIsCatMe; + xmlUCSIsCatMn; + xmlUCSIsCatN; + xmlUCSIsCatNd; + xmlUCSIsCatNl; + xmlUCSIsCatNo; + xmlUCSIsCatP; + xmlUCSIsCatPc; + xmlUCSIsCatPd; + xmlUCSIsCatPe; + xmlUCSIsCatPf; + xmlUCSIsCatPi; + xmlUCSIsCatPo; + xmlUCSIsCatPs; + xmlUCSIsCatS; + xmlUCSIsCatSc; + xmlUCSIsCatSk; + xmlUCSIsCatSm; + xmlUCSIsCatSo; + xmlUCSIsCatZ; + xmlUCSIsCatZl; + xmlUCSIsCatZp; + xmlUCSIsCatZs; + xmlUCSIsCherokee; + xmlUCSIsCombiningDiacriticalMarks; + xmlUCSIsCombiningHalfMarks; + xmlUCSIsCombiningMarksforSymbols; + xmlUCSIsControlPictures; + xmlUCSIsCurrencySymbols; + xmlUCSIsCyrillic; + xmlUCSIsDeseret; + xmlUCSIsDevanagari; + xmlUCSIsDingbats; + xmlUCSIsEnclosedAlphanumerics; + xmlUCSIsEnclosedCJKLettersandMonths; + xmlUCSIsEthiopic; + xmlUCSIsGeneralPunctuation; + xmlUCSIsGeometricShapes; + xmlUCSIsGeorgian; + xmlUCSIsGothic; + xmlUCSIsGreek; + xmlUCSIsGreekExtended; + xmlUCSIsGujarati; + xmlUCSIsGurmukhi; + xmlUCSIsHalfwidthandFullwidthForms; + xmlUCSIsHangulCompatibilityJamo; + xmlUCSIsHangulJamo; + xmlUCSIsHangulSyllables; + xmlUCSIsHebrew; + xmlUCSIsHighPrivateUseSurrogates; + xmlUCSIsHighSurrogates; + xmlUCSIsHiragana; + xmlUCSIsIPAExtensions; + xmlUCSIsIdeographicDescriptionCharacters; + xmlUCSIsKanbun; + xmlUCSIsKangxiRadicals; + xmlUCSIsKannada; + xmlUCSIsKatakana; + xmlUCSIsKhmer; + xmlUCSIsLao; + xmlUCSIsLatin1Supplement; + xmlUCSIsLatinExtendedA; + xmlUCSIsLatinExtendedAdditional; + xmlUCSIsLatinExtendedB; + xmlUCSIsLetterlikeSymbols; + xmlUCSIsLowSurrogates; + xmlUCSIsMalayalam; + xmlUCSIsMathematicalAlphanumericSymbols; + xmlUCSIsMathematicalOperators; + xmlUCSIsMiscellaneousSymbols; + xmlUCSIsMiscellaneousTechnical; + xmlUCSIsMongolian; + xmlUCSIsMusicalSymbols; + xmlUCSIsMyanmar; + xmlUCSIsNumberForms; + xmlUCSIsOgham; + xmlUCSIsOldItalic; + xmlUCSIsOpticalCharacterRecognition; + xmlUCSIsOriya; + xmlUCSIsPrivateUse; + xmlUCSIsRunic; + xmlUCSIsSinhala; + xmlUCSIsSmallFormVariants; + xmlUCSIsSpacingModifierLetters; + xmlUCSIsSpecials; + xmlUCSIsSuperscriptsandSubscripts; + xmlUCSIsSyriac; + xmlUCSIsTags; + xmlUCSIsTamil; + xmlUCSIsTelugu; + xmlUCSIsThaana; + xmlUCSIsThai; + xmlUCSIsTibetan; + xmlUCSIsUnifiedCanadianAboriginalSyllabics; + xmlUCSIsYiRadicals; + xmlUCSIsYiSyllables; + +# uri + xmlBuildURI; + xmlCreateURI; + xmlFreeURI; + xmlNormalizeURIPath; + xmlParseURI; + xmlParseURIReference; + xmlPrintURI; + xmlSaveUri; + xmlURIEscape; + xmlURIEscapeStr; + xmlURIUnescapeString; + +# encoding + UTF8Toisolat1; + isolat1ToUTF8; + xmlAddEncodingAlias; + xmlCharEncCloseFunc; + xmlCharEncFirstLine; + xmlCharEncInFunc; + xmlCharEncOutFunc; + +# xmlstring + xmlCheckUTF8; + +# encoding + xmlCleanupCharEncodingHandlers; + xmlCleanupEncodingAliases; + xmlDelEncodingAlias; + xmlDetectCharEncoding; + xmlFindCharEncodingHandler; + xmlGetCharEncodingHandler; + xmlGetCharEncodingName; + xmlGetEncodingAlias; + +# xmlstring + xmlGetUTF8Char; + +# encoding + xmlInitCharEncodingHandlers; + xmlNewCharEncodingHandler; + xmlParseCharEncoding; + xmlRegisterCharEncodingHandler; + +# xmlstring + xmlUTF8Strlen; + xmlUTF8Strloc; + xmlUTF8Strndup; + xmlUTF8Strpos; + xmlUTF8Strsize; + xmlUTF8Strsub; +} ; + +LIBXML2_2.5.0 { + global: + +# globals + xmlDeregisterNodeDefault; + xmlDeregisterNodeDefaultValue; # variable + xmlRegisterNodeDefault; + xmlRegisterNodeDefaultValue; # variable + +# xmlreader + xmlTextReaderClose; + xmlTextReaderCurrentDoc; + xmlTextReaderCurrentNode; + xmlTextReaderGetAttributeNo; + xmlTextReaderGetAttributeNs; + xmlTextReaderGetAttribute; + xmlTextReaderGetParserProp; + xmlTextReaderGetRemainder; + xmlTextReaderLookupNamespace; + xmlTextReaderMoveToAttributeNo; + xmlTextReaderMoveToAttributeNs; + xmlTextReaderMoveToAttribute; + xmlTextReaderMoveToElement; + xmlTextReaderMoveToFirstAttribute; + xmlTextReaderMoveToNextAttribute; + xmlTextReaderNormalization; + xmlTextReaderReadAttributeValue; + xmlTextReaderReadInnerXml; + xmlTextReaderReadOuterXml; + xmlTextReaderReadState; + xmlTextReaderReadString; + xmlTextReaderSetParserProp; + +# valid + xmlValidatePopElement; + xmlValidatePushCData; + xmlValidatePushElement; +} LIBXML2_2.4.30; + +LIBXML2_2.5.2 { + global: + +# tree + xmlGetNoNsProp; + +# HTMLparser + htmlAttrAllowed; + htmlElementAllowedHere; + htmlElementStatusHere; + htmlNodeStatus; + +# relaxng + xmlRelaxNGCleanupTypes; + xmlRelaxNGDump; + xmlRelaxNGFreeParserCtxt; + xmlRelaxNGFree; + xmlRelaxNGFreeValidCtxt; + xmlRelaxNGNewMemParserCtxt; + xmlRelaxNGNewParserCtxt; + xmlRelaxNGNewValidCtxt; + xmlRelaxNGParse; + xmlRelaxNGSetParserErrors; + xmlRelaxNGSetValidErrors; + xmlRelaxNGValidateDoc; + +# xmlreader + xmlTextReaderGetErrorHandler; + xmlTextReaderLocatorBaseURI; + xmlTextReaderLocatorLineNumber; + xmlTextReaderSetErrorHandler; + +# relaxng +# xmlRelaxNGValidateStream; removed in 2.5.5 +} LIBXML2_2.5.0; + +LIBXML2_2.5.4 { + global: + +# uri + xmlCanonicPath; + +# relaxng + xmlRelaxNGDumpTree; + +# tree + xmlValidateName; + xmlValidateNCName; + xmlValidateNMToken; + xmlValidateQName; +} LIBXML2_2.5.2; + +LIBXML2_2.5.5 { + global: + +# nanoftp + xmlNanoFTPDele; +} LIBXML2_2.5.4; + +LIBXML2_2.5.6 { + global: + +# xpath + xmlXPathOrderDocElems; +} LIBXML2_2.5.5; + +LIBXML2_2.5.7 { + global: + +# HTMLparser + htmlCreateMemoryParserCtxt; + +# xmlautomata + xmlAutomataNewTransition2; + +# tree + xmlBuildQName; + +# xmlmemory + xmlGcMemGet; + xmlGcMemSetup; + +# globals + xmlMallocAtomic; # variable + +# xmlregexp + xmlRegExecPushString2; + +# relaxng + xmlRelaxNGNewDocParserCtxt; + xmlRelaxNGValidateFullElement; + xmlRelaxNGValidatePopElement; + xmlRelaxNGValidatePushCData; + xmlRelaxNGValidatePushElement; + +# xmlreader + xmlTextReaderExpand; + xmlTextReaderIsValid; + xmlTextReaderNext; + xmlTextReaderRelaxNGSetSchema; + xmlTextReaderRelaxNGValidate; +} LIBXML2_2.5.6; + +LIBXML2_2.5.8 { + global: + +# globals + xmlCleanupGlobals; + xmlInitGlobals; + +# valid + xmlFreeValidCtxt; + xmlNewValidCtxt; + +# schemasInternals + xmlSchemaFreeType; + +# xmlschemas + xmlSchemaDump; + xmlSchemaFreeParserCtxt; + xmlSchemaFreeValidCtxt; + xmlSchemaFree; + xmlSchemaNewMemParserCtxt; + xmlSchemaNewParserCtxt; + xmlSchemaNewValidCtxt; + xmlSchemaParse; + xmlSchemaSetParserErrors; + xmlSchemaSetValidErrors; + xmlSchemaValidateDoc; + xmlSchemaValidateStream; + +# xmlschemastypes + xmlSchemaCheckFacet; + xmlSchemaCleanupTypes; + xmlSchemaCompareValues; + xmlSchemaFreeFacet; + xmlSchemaFreeValue; + xmlSchemaGetPredefinedType; + xmlSchemaInitTypes; + xmlSchemaNewFacet; + xmlSchemaValidateFacet; + xmlSchemaValidatePredefinedType; + xmlSchemaValPredefTypeNode; + +# globals + xmlThrDefBufferAllocScheme; + xmlThrDefDefaultBufferSize; + xmlThrDefDeregisterNodeDefault; + xmlThrDefDoValidityCheckingDefaultValue; + xmlThrDefGetWarningsDefaultValue; + xmlThrDefIndentTreeOutput; + xmlThrDefKeepBlanksDefaultValue; + xmlThrDefLineNumbersDefaultValue; + xmlThrDefLoadExtDtdDefaultValue; + xmlThrDefParserDebugEntities; + xmlThrDefPedanticParserDefaultValue; + xmlThrDefRegisterNodeDefault; + xmlThrDefSaveNoEmptyTags; + xmlThrDefSetGenericErrorFunc; + xmlThrDefSubstituteEntitiesDefaultValue; + xmlThrDefTreeIndentString; +} LIBXML2_2.5.7; + +LIBXML2_2.5.9 { + global: + +# xmlmemory + xmlMallocAtomicLoc; + +# relaxng + xmlRelaxNGGetParserErrors; + xmlRelaxNGGetValidErrors; + +# tree + xmlSplitQName3; + +# xmlstring + xmlUTF8Charcmp; + xmlUTF8Size; + +# xinclude + xmlXIncludeProcessTree; +} LIBXML2_2.5.8; + +LIBXML2_2.6.0 { + global: + +# SAX2 + xmlSAX2AttributeDecl; + xmlSAX2CDataBlock; + xmlSAX2Characters; + xmlSAX2Comment; + xmlSAX2ElementDecl; + xmlSAX2EndDocument; + xmlSAX2EndElementNs; + xmlSAX2EndElement; + xmlSAX2EntityDecl; + xmlSAX2ExternalSubset; + xmlSAX2GetColumnNumber; + xmlSAX2GetEntity; + xmlSAX2GetLineNumber; + xmlSAX2GetParameterEntity; + xmlSAX2GetPublicId; + xmlSAX2GetSystemId; + xmlSAX2HasExternalSubset; + xmlSAX2HasInternalSubset; + xmlSAX2IgnorableWhitespace; + xmlSAX2InitDefaultSAXHandler; + xmlSAX2InitDocbDefaultSAXHandler; + xmlSAX2InitHtmlDefaultSAXHandler; + xmlSAX2InternalSubset; + xmlSAX2IsStandalone; + xmlSAX2NotationDecl; + xmlSAX2ProcessingInstruction; + xmlSAX2Reference; + xmlSAX2ResolveEntity; + xmlSAX2SetDocumentLocator; + xmlSAX2StartDocument; + xmlSAX2StartElementNs; + xmlSAX2StartElement; + xmlSAX2UnparsedEntityDecl; + xmlSAXDefaultVersion; + xmlSAXVersion; + +# HTMLparser + htmlCtxtReadDoc; + htmlCtxtReadFd; + htmlCtxtReadFile; + htmlCtxtReadIO; + htmlCtxtReadMemory; + htmlCtxtReset; + htmlCtxtUseOptions; + htmlReadDoc; + htmlReadFd; + htmlReadFile; + htmlReadIO; + htmlReadMemory; + +# tree + xmlBufferCreateStatic; + +# chvalid + xmlCharInRange; + +# xmlIO + xmlCheckHTTPInput; + +# xmlerror + xmlCopyError; + xmlCtxtGetLastError; + xmlGetLastError; + xmlResetError; + xmlResetLastError; + xmlSetStructuredErrorFunc; + +# parser + xmlCtxtReadDoc; + xmlCtxtReadFd; + xmlCtxtReadFile; + xmlCtxtReadIO; + xmlCtxtReadMemory; + +# xmlerror + xmlCtxtResetLastError; + +# parser + xmlCtxtReset; + xmlCtxtUseOptions; + xmlReadDoc; + xmlReadFd; + xmlReadFile; + xmlReadIO; + xmlReadMemory; + +# xmlstring + xmlStrPrintf; + xmlStrQEqual; + +# dict + xmlDictCreate; + xmlDictFree; + xmlDictLookup; + xmlDictOwns; + xmlDictQLookup; + xmlDictReference; + xmlDictSize; + +# parserInternals + xmlErrMemory; + xmlParserMaxDepth; # variable + xmlStringLenDecodeEntities; + xmlSwitchInputEncoding; + +# xmlwriter + xmlFreeTextWriter; + xmlNewTextWriterFilename; + xmlNewTextWriterMemory; + xmlNewTextWriter; + xmlTextWriterEndAttribute; + xmlTextWriterEndCDATA; + xmlTextWriterEndDocument; + xmlTextWriterEndDTD; + xmlTextWriterEndElement; + xmlTextWriterEndPI; + xmlTextWriterFlush; + xmlTextWriterFullEndElement; + xmlTextWriterStartAttributeNS; + xmlTextWriterStartAttribute; + xmlTextWriterStartCDATA; + xmlTextWriterStartDocument; + xmlTextWriterStartDTDAttlist; + xmlTextWriterStartDTDElement; + xmlTextWriterStartDTDEntity; + xmlTextWriterStartDTD; + xmlTextWriterStartElementNS; + xmlTextWriterStartElement; + xmlTextWriterStartPI; + xmlTextWriterWriteAttributeNS; + xmlTextWriterWriteAttribute; + xmlTextWriterWriteBase64; + xmlTextWriterWriteBinHex; + xmlTextWriterWriteCDATA; + xmlTextWriterWriteComment; + xmlTextWriterWriteDTDAttlist; + xmlTextWriterWriteDTDElement; + xmlTextWriterWriteDTDEntity; + xmlTextWriterWriteDTDExternalEntity; + xmlTextWriterWriteDTDInternalEntity; + xmlTextWriterWriteDTDNotation; + xmlTextWriterWriteDTD; + xmlTextWriterWriteElementNS; + xmlTextWriterWriteElement; + xmlTextWriterWriteFormatAttributeNS; + xmlTextWriterWriteFormatAttribute; + xmlTextWriterWriteFormatCDATA; + xmlTextWriterWriteFormatComment; + xmlTextWriterWriteFormatDTDAttlist; + xmlTextWriterWriteFormatDTDElement; + xmlTextWriterWriteFormatDTDInternalEntity; + xmlTextWriterWriteFormatDTD; + xmlTextWriterWriteFormatElementNS; + xmlTextWriterWriteFormatElement; + xmlTextWriterWriteFormatPI; + xmlTextWriterWriteFormatRaw; + xmlTextWriterWriteFormatString; + xmlTextWriterWritePI; + xmlTextWriterWriteRawLen; + xmlTextWriterWriteRaw; + xmlTextWriterWriteString; + xmlTextWriterWriteVFormatAttributeNS; + xmlTextWriterWriteVFormatAttribute; + xmlTextWriterWriteVFormatCDATA; + xmlTextWriterWriteVFormatComment; + xmlTextWriterWriteVFormatDTDAttlist; + xmlTextWriterWriteVFormatDTDElement; + xmlTextWriterWriteVFormatDTDInternalEntity; + xmlTextWriterWriteVFormatDTD; + xmlTextWriterWriteVFormatElementNS; + xmlTextWriterWriteVFormatElement; + xmlTextWriterWriteVFormatPI; + xmlTextWriterWriteVFormatRaw; + xmlTextWriterWriteVFormatString; + +# hash + xmlHashQLookup2; + xmlHashQLookup3; + xmlHashQLookup; + +# chvalid + xmlIsBaseCharGroup; # variable + xmlIsCharGroup; # variable + xmlIsCombiningGroup; # variable + xmlIsDigitGroup; # variable + xmlIsExtenderGroup; # variable + xmlIsIdeographicGroup; # variable + xmlIsPubidChar_tab; # variable + +# globals + xmlLastError; # variable + +# nanohttp + xmlNanoHTTPEncoding; + xmlNanoHTTPMimeType; + xmlNanoHTTPRedir; + +# tree + xmlNodeBufGetContent; + +# xmlIO + xmlParserInputBufferCreateStatic; + +# xmlreader + xmlReaderForDoc; + xmlReaderForFd; + xmlReaderForFile; + xmlReaderForIO; + xmlReaderForMemory; + xmlReaderNewDoc; + xmlReaderNewFd; + xmlReaderNewFile; + xmlReaderNewIO; + xmlReaderNewMemory; + xmlReaderNewWalker; + xmlReaderWalker; + xmlTextReaderConstBaseUri; + xmlTextReaderConstLocalName; + xmlTextReaderConstNamespaceUri; + xmlTextReaderConstName; + xmlTextReaderConstPrefix; + xmlTextReaderConstString; + xmlTextReaderConstValue; + xmlTextReaderConstXmlLang; + xmlTextReaderNextSibling; + xmlTextReaderPreserve; + +# globals + xmlStructuredError; # variable + xmlThrDefSetStructuredErrorFunc; + +# xpathInternals + xmlXPathErr; + +# SAX2 +# xmlSAX2CheckNamespace; removed in 2.6.10 +# xmlSAX2GetNamespace; removed in 2.6.10 +# xmlSAX2GlobalNamespace; removed in 2.6.10 +# xmlSAX2NamespaceDecl; removed in 2.6.10 +# xmlSAX2SetNamespace; removed in 2.6.10 +} LIBXML2_2.5.9; + +LIBXML2_2.6.1 { + global: + +# parser + xmlCtxtResetPush; +} LIBXML2_2.6.0; + +LIBXML2_2.6.2 { + global: + +# parserInternals + xmlCreateURLParserCtxt; + +# xmlschemas + xmlSchemaNewDocParserCtxt; + +# xmlstring + xmlStrVPrintf; + +# xinclude + xmlXIncludeFreeContext; + xmlXIncludeNewContext; + xmlXIncludeProcessNode; +} LIBXML2_2.6.1; + +LIBXML2_2.6.3 { + global: + +# pattern + xmlFreePatternList; + xmlFreePattern; + xmlPatterncompile; + xmlPatternMatch; + +# xmlwriter + xmlNewTextWriterDoc; + xmlNewTextWriterPushParser; + xmlNewTextWriterTree; + +# xmlreader + xmlTextReaderPreservePattern; + +# xmlunicode + xmlUCSIsAegeanNumbers; + xmlUCSIsBuhid; + xmlUCSIsCombiningDiacriticalMarksforSymbols; + xmlUCSIsCypriotSyllabary; + xmlUCSIsCyrillicSupplement; + xmlUCSIsGreekandCoptic; + xmlUCSIsHanunoo; + xmlUCSIsKatakanaPhoneticExtensions; + xmlUCSIsKhmerSymbols; + xmlUCSIsLimbu; + xmlUCSIsLinearBIdeograms; + xmlUCSIsLinearBSyllabary; + xmlUCSIsMiscellaneousMathematicalSymbolsA; + xmlUCSIsMiscellaneousMathematicalSymbolsB; + xmlUCSIsMiscellaneousSymbolsandArrows; + xmlUCSIsOsmanya; + xmlUCSIsPhoneticExtensions; + xmlUCSIsPrivateUseArea; + xmlUCSIsShavian; + xmlUCSIsSupplementalArrowsA; + xmlUCSIsSupplementalArrowsB; + xmlUCSIsSupplementalMathematicalOperators; + xmlUCSIsSupplementaryPrivateUseAreaA; + xmlUCSIsSupplementaryPrivateUseAreaB; + xmlUCSIsTagalog; + xmlUCSIsTagbanwa; + xmlUCSIsTaiLe; + xmlUCSIsTaiXuanJingSymbols; + xmlUCSIsUgaritic; + xmlUCSIsVariationSelectorsSupplement; + xmlUCSIsVariationSelectors; + xmlUCSIsYijingHexagramSymbols; + +# xinclude + xmlXIncludeProcessFlags; + xmlXIncludeProcessTreeFlags; + xmlXIncludeSetFlags; +} LIBXML2_2.6.2; + +LIBXML2_2.6.5 { + global: + +# xmlmemory + xmlCleanupMemory; + +# dict + xmlDictCreateSub; + +# relaxng + xmlRelaxParserSetFlag; + +# xmlstring + xmlStrncatNew; + +# xmlwriter + xmlTextWriterSetIndentString; + xmlTextWriterSetIndent; + +# xpath + xmlXPathCtxtCompile; +} LIBXML2_2.6.3; + +LIBXML2_2.6.6 { + global: + +# tree + xmlAttrSerializeTxtContent; + +# parser + xmlByteConsumed; + +# xmlreader + xmlTextReaderSetStructuredErrorHandler; +} LIBXML2_2.6.5; + +LIBXML2_2.6.7 { + global: + +# xmlwriter + xmlTextWriterEndComment; + xmlTextWriterStartComment; +} LIBXML2_2.6.6; + +LIBXML2_2.6.8 { + global: + +# xmlsave + xmlSaveClose; + xmlSaveDoc; + xmlSaveFlush; + xmlSaveToFd; + xmlSaveToFilename; + xmlSaveToIO; + xmlSaveTree; + +# xmlwriter + xmlTextWriterEndDTDAttlist; + xmlTextWriterEndDTDElement; + xmlTextWriterEndDTDEntity; + xmlTextWriterWriteDTDExternalEntityContents; +} LIBXML2_2.6.7; + +LIBXML2_2.6.10 { + global: + +# xmlIO + xmlOutputBufferWriteEscape; + xmlPopInputCallbacks; + +# xmlsave + xmlSaveSetAttrEscape; + xmlSaveSetEscape; +} LIBXML2_2.6.8; + +LIBXML2_2.6.11 { + global: + +# uri + xmlBuildRelativeURI; + +# globals + xmlOutputBufferCreateFilenameDefault; + xmlOutputBufferCreateFilenameValue; # variable + xmlParserInputBufferCreateFilenameDefault; + xmlParserInputBufferCreateFilenameValue; # variable + xmlThrDefOutputBufferCreateFilenameDefault; + xmlThrDefParserInputBufferCreateFilenameDefault; + +# schemasInternals + xmlSchemaFreeWildcard; + +# xmlschemastypes + xmlSchemaCollapseString; + xmlSchemaGetBuiltInListSimpleTypeItemType; + xmlSchemaGetBuiltInType; + xmlSchemaIsBuiltInTypeFacet; + xmlSchemaValidateListSimpleTypeFacet; +} LIBXML2_2.6.10; + +LIBXML2_2.6.12 { + global: + +# parser + xmlParseInNodeContext; + +# xmlschemastypes + xmlSchemaGetFacetValueAsULong; + xmlSchemaValidateLengthFacet; + xmlSchemaValPredefTypeNodeNoNorm; + +# xmlschemas + xmlSchemaGetParserErrors; + xmlSchemaGetValidErrors; +} LIBXML2_2.6.11; + +LIBXML2_2.6.14 { + global: + +# xmlautomata + xmlAutomataNewCountTrans2; + xmlAutomataNewOnceTrans2; + +# nanohttp + xmlNanoHTTPContentLength; + +# xmlschemas + xmlSchemaSetValidOptions; + xmlSchemaValidateOneElement; + xmlSchemaValidCtxtGetOptions; +} LIBXML2_2.6.12; + +LIBXML2_2.6.15 { + global: + +# debugXML + xmlDebugCheckDocument; + +# tree + xmlDocCopyNodeList; + xmlNewDocPI; + +# xmlreader + xmlTextReaderConstEncoding; + xmlTextReaderConstXmlVersion; + xmlTextReaderIsNamespaceDecl; + xmlTextReaderStandalone; +} LIBXML2_2.6.14; + +LIBXML2_2.6.16 { + global: + +# xmlmemory + xmlMemBlocks; + +# relaxng + xmlRelaxNGInitTypes; +} LIBXML2_2.6.15; + +LIBXML2_2.6.17 { + global: + +# dict + xmlDictExists; + +# xmlmodule + xmlModuleClose; + xmlModuleFree; + xmlModuleOpen; + xmlModuleSymbol; + +# xmlregexp + xmlRegExecErrInfo; + xmlRegExecNextValues; + +# xmlschemastypes + xmlSchemaWhiteSpaceReplace; + +# xmlreader + xmlTextReaderGetParserColumnNumber; + xmlTextReaderGetParserLineNumber; +} LIBXML2_2.6.16; + +LIBXML2_2.6.18 { + global: + +# valid + xmlCopyDocElementContent; + xmlFreeDocElementContent; + xmlNewDocElementContent; + +# dict + xmlDictCleanup; + +# hash + xmlHashCreateDict; + +# pattern + xmlFreeStreamCtxt; + xmlPatternFromRoot; + xmlPatternGetStreamCtxt; + xmlPatternMaxDepth; + xmlPatternStreamable; + xmlStreamPop; + xmlStreamPushAttr; + xmlStreamPush; + +# xmlschemastypes + xmlSchemaCompareValuesWhtsp; + xmlSchemaCopyValue; + xmlSchemaGetCanonValue; + xmlSchemaNewNOTATIONValue; + xmlSchemaNewStringValue; + +# xmlreader + xmlTextReaderByteConsumed; +} LIBXML2_2.6.17; + +LIBXML2_2.6.19 { + global: + +# xmlschemastypes + xmlSchemaGetValType; + xmlSchemaValidateFacetWhtsp; + xmlSchemaValidateLengthFacetWhtsp; +} LIBXML2_2.6.18; + +LIBXML2_2.6.20 { + global: + +# tree + xmlDOMWrapAdoptNode; + xmlDOMWrapFreeCtxt; + xmlDOMWrapNewCtxt; + xmlDOMWrapReconcileNamespaces; + xmlDOMWrapRemoveNode; + +# xmlschemastypes + xmlSchemaGetCanonValueWhtsp; + xmlSchemaNewQNameValue; + xmlSchemaValueAppend; + xmlSchemaValueGetAsBoolean; + xmlSchemaValueGetAsString; + xmlSchemaValueGetNext; + +# xmlschemas + xmlSchemaIsValid; + xmlSchemaSAXPlug; + xmlSchemaSAXUnplug; + xmlSchemaValidateFile; + +# xmlreader + xmlTextReaderSchemaValidate; + xmlTextReaderSetSchema; +} LIBXML2_2.6.19; + +LIBXML2_2.6.21 { + global: + +# xmlautomata + xmlAutomataNewNegTrans; + +# xmlregexp + emptyExp; # variable + forbiddenExp; # variable + xmlExpCtxtNbCons; + xmlExpCtxtNbNodes; + xmlExpDump; + xmlExpExpDerive; + xmlExpFreeCtxt; + xmlExpFree; + xmlExpGetLanguage; + xmlExpGetStart; + xmlExpIsNillable; + xmlExpMaxToken; + xmlExpNewAtom; + xmlExpNewCtxt; + xmlExpNewOr; + xmlExpNewRange; + xmlExpNewSeq; + xmlExpParse; + xmlExpRef; + xmlExpStringDerive; + xmlExpSubsume; + +# parser + xmlHasFeature; + +# uri + xmlParseURIRaw; + +# pattern + xmlPatternMinDepth; + +# relaxng + xmlRelaxNGSetValidStructuredErrors; + +# xmlschemas + xmlSchemaSetValidStructuredErrors; + +# schematron + xmlSchematronFreeParserCtxt; + xmlSchematronFree; + xmlSchematronFreeValidCtxt; + xmlSchematronNewDocParserCtxt; + xmlSchematronNewMemParserCtxt; + xmlSchematronNewParserCtxt; + xmlSchematronNewValidCtxt; + xmlSchematronParse; + xmlSchematronValidateDoc; +} LIBXML2_2.6.20; + +LIBXML2_2.6.23 { + global: + +# HTMLtree + htmlDocDumpMemoryFormat; + +# xmlIO + xmlOutputBufferCreateBuffer; + +# xmlsave + xmlSaveToBuffer;# suppressed in 2.6.11, readded in 2.6.23 + + +# xmlschemas + xmlSchemaSetParserStructuredErrors; + +# pattern + xmlStreamPushNode; + xmlStreamWantsAnyNode; + +# xmlreader + xmlTextReaderSchemaValidateCtxt; +} LIBXML2_2.6.21; + +LIBXML2_2.6.24 { + global: + +# tree + xmlDOMWrapCloneNode; + +# relaxng + xmlRelaxNGSetParserStructuredErrors; +} LIBXML2_2.6.23; + +LIBXML2_2.6.25 { + global: + +# xpath + xmlXPathContextSetCache; +} LIBXML2_2.6.24; + +LIBXML2_2.6.27 { + global: + +# HTMLparser + htmlNewParserCtxt; + +# uri + xmlPathToURI; + +# xinclude + xmlXIncludeProcessFlagsData; + +# xpath + xmlXPathCompiledEvalToBoolean; +} LIBXML2_2.6.25; + +LIBXML2_2.6.28 { + global: + +# xmlreader + xmlTextReaderSetup; +} LIBXML2_2.6.27; + +LIBXML2_2.6.29 { + global: + +# threads + xmlDllMain; +} LIBXML2_2.6.28; + +LIBXML2_2.6.32 { + global: + +# schematron + xmlSchematronSetValidStructuredErrors; +} LIBXML2_2.6.29; + +LIBXML2_2.7.0 { + global: + +# xmlmemory + xmlMemDisplayLast; + +# entities + xmlNewEntity; + +# xmlschemas + xmlSchemaValidCtxtGetParserCtxt; +} LIBXML2_2.6.32; + +LIBXML2_2.7.3 { + global: + +# tree + xmlChildElementCount; + xmlFirstElementChild; + xmlLastElementChild; + xmlNextElementSibling; + xmlPreviousElementSibling; +} LIBXML2_2.7.0; + +LIBXML2_2.7.4 { + global: + +# globals + xmlStructuredErrorContext; # variable + +# xinclude + xmlXIncludeProcessTreeFlagsData; +} LIBXML2_2.7.3; + +LIBXML2_2.8.0 { + global: + +# xmlreader + xmlTextReaderRelaxNGValidateCtxt; + +# tree + xmlBufferDetach; + +# dict + xmlInitializeDict; +} LIBXML2_2.7.4; + +LIBXML2_2.9.0 { + global: + +# tree + xmlBufContent; + xmlBufEnd; + xmlBufGetNodeContent; + xmlBufNodeDump; + xmlBufShrink; + xmlBufUse; + +# dict + xmlDictGetUsage; + xmlDictSetLimit; + +# xmlschemas + xmlSchemaValidateSetFilename; + xmlSchemaValidateSetLocator; + +# xmlIO + xmlOutputBufferGetContent; + xmlOutputBufferGetSize; + +# xmlwriter + xmlTextWriterSetQuoteChar; +} LIBXML2_2.8.0; + +LIBXML2_2.9.1 { + global: + +# xpath + xmlXPathNodeEval; + xmlXPathSetContextNode; +} LIBXML2_2.9.0; + diff --git a/list.c b/list.c new file mode 100644 index 0000000..d33d928 --- /dev/null +++ b/list.c @@ -0,0 +1,779 @@ +/* + * 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 +#include +#include +#include +#include + +/* + * 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; + + if (l == NULL) + return(NULL); + 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; + + if (l == NULL) + return(NULL); + 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; + if (l == NULL) + return(NULL); + 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; + if (l == NULL) + return(NULL); + 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; + if (l == NULL) + return(NULL); + 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; + if (l == NULL) + return(NULL); + 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; + + if (l == NULL) + return(1); + 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; + + if (l == NULL) + return(1); + 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 (1); + } + lkNew->data = data; + lkNew->next = lkPlace->next; + (lkPlace->next)->prev = lkNew; + lkPlace->next = lkNew; + lkNew->prev = lkPlace; + return 0; +} + +/** + * xmlListDelete: + * @l: a list + * + * Deletes the list and its associated data + */ +void xmlListDelete(xmlListPtr l) +{ + if (l == NULL) + return; + + 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; + + if (l == NULL) + return(0); + /*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; + + if (l == NULL) + return(0); + /*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; + + if (l == NULL) + return(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; + + if (l == NULL) + return; + 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 if not empty and -1 in case of error + */ +int +xmlListEmpty(xmlListPtr l) +{ + if (l == NULL) + return(-1); + 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) +{ + if (l == NULL) + return(NULL); + 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) +{ + if (l == NULL) + return(NULL); + return (l->sentinel->prev); +} + +/** + * xmlListSize: + * @l: a list + * + * Get the number of elements in the list + * + * Returns the number of elements in the list or -1 in case of error + */ +int +xmlListSize(xmlListPtr l) +{ + xmlLinkPtr lk; + int count=0; + + if (l == NULL) + return(-1); + /* 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; + + if (l == NULL) + return(0); + 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; + + if (l == NULL) + return(0); + 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) +{ + if (lk == NULL) + return(NULL); + return lk->data; +} + +/** + * xmlListReverse: + * @l: a list + * + * Reverse the order of the elements in the list + */ +void +xmlListReverse(xmlListPtr l) +{ + xmlLinkPtr lk; + xmlLinkPtr lkPrev; + + if (l == NULL) + return; + 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 (l == NULL) + return; + 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; + + if ((l == NULL) || (walker == NULL)) + return; + 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; + + if ((l == NULL) || (walker == NULL)) + return; + 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; + + if (old == NULL) + return(NULL); + /* 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; + + if ((old == NULL) || (cur == NULL)) + return(1); + 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 */ +#define bottom_list +#include "elfgcchack.h" 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 + + 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..e9a8f9d --- /dev/null +++ b/macos/src/config-mac.h @@ -0,0 +1,192 @@ +/* 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 XML_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 header file. */ +#define HAVE_ANSIDECL_H + +/* Define if you have the header file. */ +#define HAVE_ARPA_INET_H + +/* Define if you have the header file. */ +#define HAVE_CTYPE_H + +/* Define if you have the header file. */ +#define HAVE_DIRENT_H + +/* Define if you have the header file. */ +#define HAVE_DLFCN_H + +/* Define if you have the header file. */ +#define HAVE_ERRNO_H + +/* Define if you have the header file. */ +#define HAVE_FCNTL_H + +/* Define if you have the header file. */ +#define HAVE_FLOAT_H + +/* Define if you have the header file. */ +#define HAVE_FP_CLASS_H + +/* Define if you have the header file. */ +#define HAVE_IEEEFP_H + +/* Define if you have the header file. */ +#undef HAVE_MALLOC_H + +/* Define if you have the header file. */ +#define HAVE_MATH_H + +/* Define if you have the header file. */ +#define HAVE_NAN_H + +/* Define if you have the header file. */ +#define HAVE_NDIR_H + +/* Define if you have the header file. */ +#define HAVE_NETDB_H + +/* Define if you have the header file. */ +#define HAVE_NETINET_IN_H + +/* Define if you have the header file. */ +#define HAVE_SIGNAL_H + +/* Define if you have the header file. */ +#define HAVE_STDARG_H + +/* Define if you have the header file. */ +#define HAVE_STDLIB_H + +/* Define if you have the header file. */ +#define HAVE_STRING_H + +/* Define if you have the header file. */ +#define HAVE_SYS_DIR_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_MMAN_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_NDIR_H + +/* Define if you have the header file. */ +#define HAVE_SYS_SELECT_H + +/* Define if you have the header file. */ +#define HAVE_SYS_SOCKET_H + +/* Define if you have the header file. */ +#define HAVE_SYS_STAT_H + +/* Define if you have the header file. */ +#define HAVE_SYS_TIME_H + +/* Define if you have the header file. */ +#define HAVE_SYS_TYPES_H + +/* Define if you have the header file. */ +#define HAVE_TIME_H + +/* Define if you have the header file. */ +#define HAVE_UNISTD_H + +/* Define if you have the header file. */ +#undef HAVE_ZLIB_H + +/* Name of package */ +#define PACKAGE + +/* Version number of package */ +#define VERSION + +/* Define if compiler has function prototypes */ +#define PROTOTYPES + +#include +#include +#include +#include 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 #include /* 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 #include #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/nanoftp.c b/nanoftp.c new file mode 100644 index 0000000..2135ab9 --- /dev/null +++ b/nanoftp.c @@ -0,0 +1,2121 @@ +/* + * 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 + +#ifdef HAVE_STDLIB_H +#include +#endif +#ifdef HAVE_UNISTD_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_NETINET_IN_H +#include +#endif +#ifdef HAVE_ARPA_INET_H +#include +#endif +#ifdef HAVE_NETDB_H +#include +#endif +#ifdef HAVE_FCNTL_H +#include +#endif +#ifdef HAVE_ERRNO_H +#include +#endif +#ifdef HAVE_SYS_TIME_H +#include +#endif +#ifdef HAVE_SYS_SELECT_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_STRINGS_H +#include +#endif + +#include +#include +#include +#include +#include +#include + +/* #define DEBUG_FTP 1 */ +#ifdef STANDALONE +#ifndef DEBUG_FTP +#define DEBUG_FTP 1 +#endif +#endif + + +#if defined(__MINGW32__) || defined(_WIN32_WCE) +#ifndef _WINSOCKAPI_ +#define _WINSOCKAPI_ +#endif +#include +#include +#undef XML_SOCKLEN_T +#define XML_SOCKLEN_T unsigned int +#endif + +/** + * A couple portability macros + */ +#ifndef _WINSOCKAPI_ +#if !defined(__BEOS__) || defined(__HAIKU__) +#define closesocket(s) close(s) +#endif +#endif + +#ifdef __BEOS__ +#ifndef PF_INET +#define PF_INET AF_INET +#endif +#endif + +#ifdef _AIX +#ifdef HAVE_BROKEN_SS_FAMILY +#define ss_family __ss_family +#endif +#endif + +#ifndef XML_SOCKLEN_T +#define XML_SOCKLEN_T unsigned int +#endif + +#define FTP_COMMAND_OK 200 +#define FTP_SYNTAX_ERROR 500 +#define FTP_GET_PASSWD 331 +#define FTP_BUF_SIZE 1024 + +#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 && ((env[0] == '*' ) && (env[1] == 0))) + 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); + proxy = NULL; + } + if (proxyUser != NULL) { + xmlFree(proxyUser); + proxyUser = NULL; + } + if (proxyPasswd != NULL) { + xmlFree(proxyPasswd); + proxyPasswd = NULL; + } + 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; + xmlURIPtr uri; + + /* + * Clear any existing data from the context + */ + 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; + + uri = xmlParseURIRaw(URL, 1); + if (uri == NULL) + return; + + if ((uri->scheme == NULL) || (uri->server == NULL)) { + xmlFreeURI(uri); + return; + } + + ctxt->protocol = xmlMemStrdup(uri->scheme); + ctxt->hostname = xmlMemStrdup(uri->server); + if (uri->path != NULL) + ctxt->path = xmlMemStrdup(uri->path); + else + ctxt->path = xmlMemStrdup("/"); + if (uri->port != 0) + ctxt->port = uri->port; + + if (uri->user != NULL) { + char *cptr; + if ((cptr=strchr(uri->user, ':')) == NULL) + ctxt->user = xmlMemStrdup(uri->user); + else { + ctxt->user = (char *)xmlStrndup((xmlChar *)uri->user, + (cptr - uri->user)); + ctxt->passwd = xmlMemStrdup(cptr+1); + } + } + + xmlFreeURI(uri); + +} + +/** + * 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; + xmlURIPtr uri; + + if (URL == NULL) + return(-1); + if (ctxt == NULL) + return(-1); + if (ctxt->protocol == NULL) + return(-1); + if (ctxt->hostname == NULL) + return(-1); + + uri = xmlParseURIRaw(URL, 1); + if (uri == NULL) + return(-1); + + if ((uri->scheme == NULL) || (uri->server == NULL)) { + xmlFreeURI(uri); + return(-1); + } + if ((strcmp(ctxt->protocol, uri->scheme)) || + (strcmp(ctxt->hostname, uri->server)) || + ((uri->port != 0) && (ctxt->port != uri->port))) { + xmlFreeURI(uri); + return(-1); + } + + if (uri->port != 0) + ctxt->port = uri->port; + + if (ctxt->path != NULL) { + xmlFree(ctxt->path); + ctxt->path = NULL; + } + + if (uri->path == NULL) + ctxt->path = xmlMemStrdup("/"); + else + ctxt->path = xmlMemStrdup(uri->path); + + xmlFreeURI(uri); + + 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) { + xmlURIPtr uri; + + if (proxy != NULL) { + xmlFree(proxy); + proxy = NULL; + } + 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; + + uri = xmlParseURIRaw(URL, 1); + if ((uri == NULL) || (uri->scheme == NULL) || + (strcmp(uri->scheme, "ftp")) || (uri->server == NULL)) { + __xmlIOErr(XML_FROM_FTP, XML_FTP_URL_SYNTAX, "Syntax Error\n"); + if (uri != NULL) + xmlFreeURI(uri); + return; + } + + proxy = xmlMemStrdup(uri->server); + if (uri->port != 0) + proxyPort = uri->port; + + xmlFreeURI(uri); +} + +/** + * 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 = INVALID_SOCKET; + + unescaped = xmlURIUnescapeString(URL, 0, NULL); + if (unescaped != NULL) { + xmlNanoFTPScanURL(ret, unescaped); + xmlFree(unescaped); + } else if (URL != NULL) + xmlNanoFTPScanURL(ret, URL); + + 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 != INVALID_SOCKET) closesocket(ctxt->controlFd); + ctxt->controlFd = INVALID_SOCKET; + 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 == NULL) || (ctxt->controlFd == INVALID_SOCKET)) return(-1); + + 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 = INVALID_SOCKET; + ctxt->controlFd = INVALID_SOCKET; + 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; + + if ((ctxt == NULL) || (ctxt->controlFd == INVALID_SOCKET)) return(-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; + + if ((ctxt == NULL) || (ctxt->controlFd == INVALID_SOCKET)) return(-1); + 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, SEND_ARG2_CAST 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, SEND_ARG2_CAST 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; + + if ((ctxt == NULL) || (ctxt->controlFd == INVALID_SOCKET)) return(-1); + + 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, SEND_ARG2_CAST 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); + __xmlIOErr(XML_FROM_FTP, 0, "getaddrinfo failed"); + return (-1); + } + if (tmp->ai_addrlen > sizeof(ctxt->ftpAddr)) { + if (result) + freeaddrinfo (result); + __xmlIOErr(XML_FROM_FTP, 0, "gethostbyname address mismatch"); + return (-1); + } + 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 (GETHOSTBYNAME_ARG_CAST proxy); + else + hp = gethostbyname (GETHOSTBYNAME_ARG_CAST ctxt->hostname); + if (hp == NULL) { + __xmlIOErr(XML_FROM_FTP, 0, "gethostbyname failed"); + return (-1); + } + if ((unsigned int) hp->h_length > + sizeof(((struct sockaddr_in *)&ctxt->ftpAddr)->sin_addr)) { + __xmlIOErr(XML_FROM_FTP, 0, "gethostbyname address mismatch"); + 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 = + (unsigned short)htons ((unsigned short)port); + ctxt->controlFd = socket (AF_INET, SOCK_STREAM, 0); + addrlen = sizeof (struct sockaddr_in); + } + + if (ctxt->controlFd == INVALID_SOCKET) { + __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 = INVALID_SOCKET; + ctxt->controlFd = INVALID_SOCKET; + return(-1); + } + + /* + * Wait for the HELLO from the server. + */ + res = xmlNanoFTPGetResponse(ctxt); + if (res != 2) { + closesocket(ctxt->controlFd); ctxt->controlFd = INVALID_SOCKET; + ctxt->controlFd = INVALID_SOCKET; + 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, SEND_ARG2_CAST buf, len, 0); + if (res < 0) { + __xmlIOErr(XML_FROM_FTP, 0, "send failed"); + closesocket(ctxt->controlFd); + ctxt->controlFd = INVALID_SOCKET; + 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, SEND_ARG2_CAST buf, len, 0); + if (res < 0) { + __xmlIOErr(XML_FROM_FTP, 0, "send failed"); + closesocket(ctxt->controlFd); + ctxt->controlFd = INVALID_SOCKET; + return(res); + } + res = xmlNanoFTPGetResponse(ctxt); + if (res > 3) { + closesocket(ctxt->controlFd); + ctxt->controlFd = INVALID_SOCKET; + return(-1); + } + break; + case 1: + break; + case 4: + case 5: + case -1: + default: + closesocket(ctxt->controlFd); + ctxt->controlFd = INVALID_SOCKET; + 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, SEND_ARG2_CAST buf, len, 0); + if (res < 0) { + __xmlIOErr(XML_FROM_FTP, 0, "send failed"); + closesocket(ctxt->controlFd); ctxt->controlFd = INVALID_SOCKET; + ctxt->controlFd = INVALID_SOCKET; + 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 = INVALID_SOCKET; + ctxt->controlFd = INVALID_SOCKET; + 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, SEND_ARG2_CAST buf, len, 0); + if (res < 0) { + __xmlIOErr(XML_FROM_FTP, 0, "send failed"); + closesocket(ctxt->controlFd); ctxt->controlFd = INVALID_SOCKET; + ctxt->controlFd = INVALID_SOCKET; + 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, SEND_ARG2_CAST buf, len, 0); + if (res < 0) { + __xmlIOErr(XML_FROM_FTP, 0, "send failed"); + closesocket(ctxt->controlFd); ctxt->controlFd = INVALID_SOCKET; + ctxt->controlFd = INVALID_SOCKET; + 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 = INVALID_SOCKET; + ctxt->controlFd = INVALID_SOCKET; + 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 = INVALID_SOCKET; + ctxt->controlFd = INVALID_SOCKET; + return(-1); + } + } + /* + * Non-proxy handling. + */ + res = xmlNanoFTPSendUser(ctxt); + if (res < 0) { + closesocket(ctxt->controlFd); ctxt->controlFd = INVALID_SOCKET; + ctxt->controlFd = INVALID_SOCKET; + 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 = INVALID_SOCKET; + ctxt->controlFd = INVALID_SOCKET; + return(-1); + } + res = xmlNanoFTPSendPasswd(ctxt); + if (res < 0) { + closesocket(ctxt->controlFd); ctxt->controlFd = INVALID_SOCKET; + ctxt->controlFd = INVALID_SOCKET; + 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 = INVALID_SOCKET; + ctxt->controlFd = INVALID_SOCKET; + 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); + if (port <= 0) + return(NULL); + ctxt = (xmlNanoFTPCtxtPtr) xmlNanoFTPNewCtxt(NULL); + if (ctxt == NULL) + return(NULL); + ctxt->hostname = xmlMemStrdup(server); + if (ctxt->hostname == NULL) { + xmlNanoFTPFreeCtxt(ctxt); + return(NULL); + } + if (port != 0) + ctxt->port = port; + res = xmlNanoFTPConnect(ctxt); + 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, const char *directory) { + xmlNanoFTPCtxtPtr ctxt = (xmlNanoFTPCtxtPtr) ctx; + char buf[400]; + int len; + int res; + + if ((ctxt == NULL) || (ctxt->controlFd == INVALID_SOCKET)) return(-1); + if (directory == NULL) return 0; + + /* + * 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, SEND_ARG2_CAST 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, const char *file) { + xmlNanoFTPCtxtPtr ctxt = (xmlNanoFTPCtxtPtr) ctx; + char buf[400]; + int len; + int res; + + if ((ctxt == NULL) || (ctxt->controlFd == INVALID_SOCKET) || + (file == NULL)) return(-1); + + /* + * 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, SEND_ARG2_CAST 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 + */ + +SOCKET +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 + XML_SOCKLEN_T dataAddrLen; + + if (ctxt == NULL) return INVALID_SOCKET; + + 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 == INVALID_SOCKET) { + __xmlIOErr(XML_FROM_FTP, 0, "socket failed"); + return INVALID_SOCKET; + } + + 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, SEND_ARG2_CAST buf, len, 0); + if (res < 0) { + __xmlIOErr(XML_FROM_FTP, 0, "send failed"); + closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET; + return INVALID_SOCKET; + } + res = xmlNanoFTPReadResponse(ctx); + if (res != 2) { + if (res == 5) { + closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET; + return INVALID_SOCKET; + } else { + /* + * retry with an active connection + */ + closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET; + 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 != INVALID_SOCKET) { + closesocket (ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET; + } + return INVALID_SOCKET; + } + 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 != INVALID_SOCKET) { + closesocket (ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET; + } + return INVALID_SOCKET; + } + 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 = INVALID_SOCKET; + return INVALID_SOCKET; + } + } 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 = INVALID_SOCKET; + return INVALID_SOCKET; + } + 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 = INVALID_SOCKET; + return INVALID_SOCKET; + } +#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, SEND_ARG2_CAST buf, len, 0); + if (res < 0) { + __xmlIOErr(XML_FROM_FTP, 0, "send failed"); + closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET; + return INVALID_SOCKET; + } + res = xmlNanoFTPGetResponse(ctxt); + if (res != 2) { + closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET; + return INVALID_SOCKET; + } + } + 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; + + if ((ctxt == NULL) || (ctxt->controlFd == INVALID_SOCKET)) return(-1); + + closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET; + 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 = INVALID_SOCKET; + return(-1); + } + if (res == 0) { +#ifdef DEBUG_FTP + xmlGenericError(xmlGenericErrorContext, + "xmlNanoFTPCloseConnection: timeout\n"); +#endif + closesocket(ctxt->controlFd); ctxt->controlFd = INVALID_SOCKET; + } else { + res = xmlNanoFTPGetResponse(ctxt); + if (res != 2) { + closesocket(ctxt->controlFd); ctxt->controlFd = INVALID_SOCKET; + 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, + const 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 (ctxt == NULL) return (-1); + if (filename == NULL) { + if (xmlNanoFTPCwd(ctxt, ctxt->path) < 1) + return(-1); + ctxt->dataFd = xmlNanoFTPGetConnection(ctxt); + if (ctxt->dataFd == INVALID_SOCKET) + 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 == INVALID_SOCKET) + 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, SEND_ARG2_CAST buf, len, 0); + if (res < 0) { + __xmlIOErr(XML_FROM_FTP, 0, "send failed"); + closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET; + return(res); + } + res = xmlNanoFTPReadResponse(ctxt); + if (res != 1) { + closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET; + 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 = INVALID_SOCKET; + return(-1); + } + if (res == 0) { + res = xmlNanoFTPCheckResponse(ctxt); + if (res < 0) { + closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET; + ctxt->dataFd = INVALID_SOCKET; + return(-1); + } + if (res == 2) { + closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET; + 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 = INVALID_SOCKET; + ctxt->dataFd = INVALID_SOCKET; + 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 + */ + + +SOCKET +xmlNanoFTPGetSocket(void *ctx, const char *filename) { + xmlNanoFTPCtxtPtr ctxt = (xmlNanoFTPCtxtPtr) ctx; + char buf[300]; + int res, len; + if (ctx == NULL) + return INVALID_SOCKET; + if ((filename == NULL) && (ctxt->path == NULL)) + return INVALID_SOCKET; + ctxt->dataFd = xmlNanoFTPGetConnection(ctxt); + if (ctxt->dataFd == INVALID_SOCKET) + return INVALID_SOCKET; + + snprintf(buf, sizeof(buf), "TYPE I\r\n"); + len = strlen(buf); +#ifdef DEBUG_FTP + xmlGenericError(xmlGenericErrorContext, "%s", buf); +#endif + res = send(ctxt->controlFd, SEND_ARG2_CAST buf, len, 0); + if (res < 0) { + __xmlIOErr(XML_FROM_FTP, 0, "send failed"); + closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET; + return INVALID_SOCKET; + } + res = xmlNanoFTPReadResponse(ctxt); + if (res != 2) { + closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET; + return INVALID_SOCKET; + } + 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, SEND_ARG2_CAST buf, len, 0); + if (res < 0) { + __xmlIOErr(XML_FROM_FTP, 0, "send failed"); + closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET; + return INVALID_SOCKET; + } + res = xmlNanoFTPReadResponse(ctxt); + if (res != 1) { + closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET; + return INVALID_SOCKET; + } + 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 (ctxt == NULL) return(-1); + if ((filename == NULL) && (ctxt->path == NULL)) + return(-1); + if (callback == NULL) + return(-1); + if (xmlNanoFTPGetSocket(ctxt, filename) == INVALID_SOCKET) + 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 = INVALID_SOCKET; + return(-1); + } + if (res == 0) { + res = xmlNanoFTPCheckResponse(ctxt); + if (res < 0) { + closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET; + ctxt->dataFd = INVALID_SOCKET; + return(-1); + } + if (res == 2) { + closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET; + 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 = INVALID_SOCKET; + 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 == INVALID_SOCKET) return(0); + if (dest == NULL) return(-1); + if (len <= 0) return(0); + + len = recv(ctxt->dataFd, dest, len, 0); + if (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; + SOCKET 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 == INVALID_SOCKET) { + 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 != INVALID_SOCKET) { + closesocket(ctxt->dataFd); + ctxt->dataFd = INVALID_SOCKET; + } + if (ctxt->controlFd != INVALID_SOCKET) { + xmlNanoFTPQuit(ctxt); + closesocket(ctxt->controlFd); + ctxt->controlFd = INVALID_SOCKET; + } + 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 +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 */ +#define bottom_nanoftp +#include "elfgcchack.h" diff --git a/nanohttp.c b/nanohttp.c new file mode 100644 index 0000000..e109ad7 --- /dev/null +++ b/nanohttp.c @@ -0,0 +1,1890 @@ +/* + * 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 + */ + +#define NEED_SOCKETS +#define IN_LIBXML +#include "libxml.h" + +#ifdef LIBXML_HTTP_ENABLED +#include + +#ifdef HAVE_STDLIB_H +#include +#endif +#ifdef HAVE_UNISTD_H +#include +#endif +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_NETINET_IN_H +#include +#endif +#ifdef HAVE_ARPA_INET_H +#include +#endif +#ifdef HAVE_NETDB_H +#include +#endif +#ifdef HAVE_RESOLV_H +#ifdef HAVE_ARPA_NAMESER_H +#include +#endif +#include +#endif +#ifdef HAVE_FCNTL_H +#include +#endif +#ifdef HAVE_ERRNO_H +#include +#endif +#ifdef HAVE_SYS_TIME_H +#include +#endif +#ifndef HAVE_POLL_H +#ifdef HAVE_SYS_SELECT_H +#include +#endif +#else +#include +#endif +#ifdef HAVE_STRINGS_H +#include +#endif +#ifdef HAVE_ZLIB_H +#include +#endif + + +#ifdef VMS +#include +#define XML_SOCKLEN_T unsigned int +#endif + +#if defined(__MINGW32__) || defined(_WIN32_WCE) +#ifndef _WINSOCKAPI_ +#define _WINSOCKAPI_ +#endif +#include +#include +#undef XML_SOCKLEN_T +#define XML_SOCKLEN_T unsigned int +#endif + +#include +#include +#include +#include /* for xmlStr(n)casecmp() */ +#include +#include +#include + +/** + * A couple portability macros + */ +#ifndef _WINSOCKAPI_ +#if !defined(__BEOS__) || defined(__HAIKU__) +#define closesocket(s) close(s) +#endif +#define SOCKET int +#define INVALID_SOCKET (-1) +#endif + +#ifdef __BEOS__ +#ifndef PF_INET +#define PF_INET AF_INET +#endif +#endif + +#ifndef XML_SOCKLEN_T +#define XML_SOCKLEN_T unsigned 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 */ + char *query; /* the query string */ + 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 version; /* the protocol version */ + 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 */ +#ifdef HAVE_ZLIB_H + z_stream *strm; /* Zlib stream object */ + int usesGzip; /* "Content-Encoding: gzip" was detected */ +#endif +} 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 */ + +static int xmlNanoHTTPFetchContent( void * ctx, char ** ptr, int * len ); + +/** + * 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) { + SOCKET s; + + s = socket (AF_INET6, SOCK_STREAM, 0); + if (s != INVALID_SOCKET) { + 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 && ((env[0] == '*') && (env[1] == 0))) + 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); + proxy = NULL; + } +#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) { + xmlURIPtr uri; + int len; + + /* + * Clear any existing data from the context + */ + 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 (ctxt->query != NULL) { + xmlFree(ctxt->query); + ctxt->query = NULL; + } + if (URL == NULL) return; + + uri = xmlParseURIRaw(URL, 1); + if (uri == NULL) + return; + + if ((uri->scheme == NULL) || (uri->server == NULL)) { + xmlFreeURI(uri); + return; + } + + ctxt->protocol = xmlMemStrdup(uri->scheme); + /* special case of IPv6 addresses, the [] need to be removed */ + if ((uri->server != NULL) && (*uri->server == '[')) { + len = strlen(uri->server); + if ((len > 2) && (uri->server[len - 1] == ']')) { + ctxt->hostname = (char *) xmlCharStrndup(uri->server + 1, len -2); + } else + ctxt->hostname = xmlMemStrdup(uri->server); + } else + ctxt->hostname = xmlMemStrdup(uri->server); + if (uri->path != NULL) + ctxt->path = xmlMemStrdup(uri->path); + else + ctxt->path = xmlMemStrdup("/"); + if (uri->query != NULL) + ctxt->query = xmlMemStrdup(uri->query); + if (uri->port != 0) + ctxt->port = uri->port; + + xmlFreeURI(uri); +} + +/** + * 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) { + xmlURIPtr uri; + + if (proxy != NULL) { + xmlFree(proxy); + proxy = NULL; + } + 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; + + uri = xmlParseURIRaw(URL, 1); + if ((uri == NULL) || (uri->scheme == NULL) || + (strcmp(uri->scheme, "http")) || (uri->server == NULL)) { + __xmlIOErr(XML_FROM_HTTP, XML_HTTP_URL_SYNTAX, "Syntax Error\n"); + if (uri != NULL) + xmlFreeURI(uri); + return; + } + + proxy = xmlMemStrdup(uri->server); + if (uri->port != 0) + proxyPort = uri->port; + + xmlFreeURI(uri); +} + +/** + * 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 = INVALID_SOCKET; + 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->query != NULL) xmlFree(ctxt->query); + 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); +#ifdef HAVE_ZLIB_H + if (ctxt->strm != NULL) { + inflateEnd(ctxt->strm); + xmlFree(ctxt->strm); + } +#endif + + ctxt->state = XML_NANO_HTTP_NONE; + if (ctxt->fd != INVALID_SOCKET) closesocket(ctxt->fd); + ctxt->fd = INVALID_SOCKET; + 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; +#ifdef HAVE_POLL_H + struct pollfd p; +#else + struct timeval tv; + fd_set wfd; +#endif + + if ((ctxt->state & XML_NANO_HTTP_WRITE) && (xmt_ptr != NULL)) { + while (total_sent < outlen) { + int nsent = send(ctxt->fd, SEND_ARG2_CAST (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. + */ +#ifndef HAVE_POLL_H +#ifndef _WINSOCKAPI_ + if (ctxt->fd > FD_SETSIZE) + return -1; +#endif + + tv.tv_sec = timeout; + tv.tv_usec = 0; + FD_ZERO(&wfd); +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable: 4018) +#endif + FD_SET(ctxt->fd, &wfd); +#ifdef _MSC_VER +#pragma warning(pop) +#endif + (void) select(ctxt->fd + 1, NULL, &wfd, NULL, &tv); +#else + p.fd = ctxt->fd; + p.events = POLLOUT; + (void) poll(&p, 1, timeout * 1000); +#endif /* !HAVE_POLL_H */ + } + } + } + + 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) +{ +#ifdef HAVE_POLL_H + struct pollfd p; +#else + fd_set rfd; + struct timeval tv; +#endif + + + 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); + } + } +#ifdef HAVE_POLL_H + p.fd = ctxt->fd; + p.events = POLLIN; + if ((poll(&p, 1, timeout * 1000) < 1) +#if defined(EINTR) + && (errno != EINTR) +#endif + ) + return (0); +#else /* !HAVE_POLL_H */ +#ifndef _WINSOCKAPI_ + if (ctxt->fd > FD_SETSIZE) + return 0; +#endif + + tv.tv_sec = timeout; + tv.tv_usec = 0; + FD_ZERO(&rfd); + +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable: 4018) +#endif + + FD_SET(ctxt->fd, &rfd); + +#ifdef _MSC_VER +#pragma warning(pop) +#endif + + if ((select(ctxt->fd + 1, &rfd, NULL, NULL, &tv) < 1) +#if defined(EINTR) + && (errno != EINTR) +#endif + ) + return (0); +#endif /* !HAVE_POLL_H */ + } + 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; + ctxt->version = version; + } 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); + if (*cur == '/') { + xmlChar *tmp_http = xmlStrdup(BAD_CAST "http://"); + xmlChar *tmp_loc = + xmlStrcat(tmp_http, (const xmlChar *) ctxt->hostname); + ctxt->location = + (char *) xmlStrcat (tmp_loc, (const xmlChar *) cur); + } else { + 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); +#ifdef HAVE_ZLIB_H + } else if ( !xmlStrncasecmp( BAD_CAST line, BAD_CAST"Content-Encoding:", 17) ) { + cur += 17; + while ((*cur == ' ') || (*cur == '\t')) cur++; + if ( !xmlStrncasecmp( BAD_CAST cur, BAD_CAST"gzip", 4) ) { + ctxt->usesGzip = 1; + + ctxt->strm = xmlMalloc(sizeof(z_stream)); + + if (ctxt->strm != NULL) { + ctxt->strm->zalloc = Z_NULL; + ctxt->strm->zfree = Z_NULL; + ctxt->strm->opaque = Z_NULL; + ctxt->strm->avail_in = 0; + ctxt->strm->next_in = Z_NULL; + + inflateInit2( ctxt->strm, 31 ); + } + } +#endif + } 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 SOCKET +xmlNanoHTTPConnectAttempt(struct sockaddr *addr) +{ +#ifndef HAVE_POLL_H + fd_set wfd; +#ifdef _WINSOCKAPI_ + fd_set xfd; +#endif + struct timeval tv; +#else /* !HAVE_POLL_H */ + struct pollfd p; +#endif /* !HAVE_POLL_H */ + 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 == INVALID_SOCKET) { +#ifdef DEBUG_HTTP + perror("socket"); +#endif + __xmlIOErr(XML_FROM_HTTP, 0, "socket failed\n"); + return INVALID_SOCKET; + } +#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__) && !defined(__HAIKU__) + { + 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 INVALID_SOCKET; + } +#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 INVALID_SOCKET; + } + } +#ifndef HAVE_POLL_H + tv.tv_sec = timeout; + tv.tv_usec = 0; + +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable: 4018) +#endif +#ifndef _WINSOCKAPI_ + if (s > FD_SETSIZE) + return INVALID_SOCKET; +#endif + 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 +#ifdef _MSC_VER +#pragma warning(pop) +#endif + +#else /* !HAVE_POLL_H */ + p.fd = s; + p.events = POLLOUT; + switch (poll(&p, 1, timeout * 1000)) +#endif /* !HAVE_POLL_H */ + + { + case 0: + /* Time out */ + __xmlIOErr(XML_FROM_HTTP, 0, "Connect attempt timed out"); + closesocket(s); + return INVALID_SOCKET; + case -1: + /* Ermm.. ?? */ + __xmlIOErr(XML_FROM_HTTP, 0, "Connect failed"); + closesocket(s); + return INVALID_SOCKET; + } + +#ifndef HAVE_POLL_H + if (FD_ISSET(s, &wfd) +#ifdef _WINSOCKAPI_ + || FD_ISSET(s, &xfd) +#endif + ) +#else /* !HAVE_POLL_H */ + if (p.revents == POLLOUT) +#endif /* !HAVE_POLL_H */ + { + XML_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"); + closesocket(s); + return INVALID_SOCKET; + } +#endif + if (status) { + __xmlIOErr(XML_FROM_HTTP, 0, + "Error connecting to remote host"); + closesocket(s); + errno = status; + return INVALID_SOCKET; + } + } else { + /* pbm */ + __xmlIOErr(XML_FROM_HTTP, 0, "select failed\n"); + closesocket(s); + return INVALID_SOCKET; + } + + 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 SOCKET +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; + SOCKET s; + + memset (&sockin, 0, sizeof(sockin)); +#ifdef SUPPORT_IP6 + memset (&sockin6, 0, sizeof(sockin6)); +#endif + +#if !defined(HAVE_GETADDRINFO) && defined(SUPPORT_IP6) && defined(RES_USE_INET6) + if (have_ipv6 ()) + { + if (!(_res.options & RES_INIT)) + res_init(); + _res.options |= RES_USE_INET6; + } +#endif + +#if defined(HAVE_GETADDRINFO) && defined(SUPPORT_IP6) && !defined(_WIN32) + if (have_ipv6 ()) +#endif +#if defined(HAVE_GETADDRINFO) && (defined(SUPPORT_IP6) || defined(_WIN32)) + { + 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 INVALID_SOCKET; + } + + for (res = result; res; res = res->ai_next) { + if (res->ai_family == AF_INET) { + if (res->ai_addrlen > sizeof(sockin)) { + __xmlIOErr(XML_FROM_HTTP, 0, "address size mismatch\n"); + freeaddrinfo (result); + return INVALID_SOCKET; + } + memcpy (&sockin, res->ai_addr, res->ai_addrlen); + sockin.sin_port = htons (port); + addr = (struct sockaddr *)&sockin; +#ifdef SUPPORT_IP6 + } else if (have_ipv6 () && (res->ai_family == AF_INET6)) { + if (res->ai_addrlen > sizeof(sockin6)) { + __xmlIOErr(XML_FROM_HTTP, 0, "address size mismatch\n"); + freeaddrinfo (result); + return INVALID_SOCKET; + } + memcpy (&sockin6, res->ai_addr, res->ai_addrlen); + sockin6.sin6_port = htons (port); + addr = (struct sockaddr *)&sockin6; +#endif + } else + continue; /* for */ + + s = xmlNanoHTTPConnectAttempt (addr); + if (s != INVALID_SOCKET) { + freeaddrinfo (result); + return (s); + } + } + + if (result) + freeaddrinfo (result); + } +#endif +#if defined(HAVE_GETADDRINFO) && defined(SUPPORT_IP6) && !defined(_WIN32) + else +#endif +#if !defined(HAVE_GETADDRINFO) || !defined(_WIN32) + { + h = gethostbyname (GETHOSTBYNAME_ARG_CAST 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; + +#ifdef NO_ADDRESS + case NO_ADDRESS: + h_err_txt = + "Valid name, no data record of requested type."; + break; +#endif + + 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 INVALID_SOCKET; + } + + for (i = 0; h->h_addr_list[i]; i++) { + if (h->h_addrtype == AF_INET) { + /* A records (IPv4) */ + if ((unsigned int) h->h_length > sizeof(ia)) { + __xmlIOErr(XML_FROM_HTTP, 0, "address size mismatch\n"); + return INVALID_SOCKET; + } + memcpy (&ia, h->h_addr_list[i], h->h_length); + sockin.sin_family = h->h_addrtype; + sockin.sin_addr = ia; + sockin.sin_port = (unsigned short)htons ((unsigned short)port); + addr = (struct sockaddr *) &sockin; +#ifdef SUPPORT_IP6 + } else if (have_ipv6 () && (h->h_addrtype == AF_INET6)) { + /* AAAA records (IPv6) */ + if ((unsigned int) h->h_length > sizeof(ia6)) { + __xmlIOErr(XML_FROM_HTTP, 0, "address size mismatch\n"); + return INVALID_SOCKET; + } + 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 != INVALID_SOCKET) + return (s); + } + } +#endif + +#ifdef DEBUG_HTTP + xmlGenericError(xmlGenericErrorContext, + "xmlNanoHTTPConnectHost: unable to connect to '%s'.\n", + host); +#endif + return INVALID_SOCKET; +} + + +/** + * 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; +#ifdef HAVE_ZLIB_H + int bytes_read = 0; + int orig_avail_in; + int z_ret; +#endif + + if (ctx == NULL) return(-1); + if (dest == NULL) return(-1); + if (len <= 0) return(0); + +#ifdef HAVE_ZLIB_H + if (ctxt->usesGzip == 1) { + if (ctxt->strm == NULL) return(0); + + ctxt->strm->next_out = dest; + ctxt->strm->avail_out = len; + ctxt->strm->avail_in = ctxt->inptr - ctxt->inrptr; + + while (ctxt->strm->avail_out > 0 && + (ctxt->strm->avail_in > 0 || xmlNanoHTTPRecv(ctxt) > 0)) { + orig_avail_in = ctxt->strm->avail_in = + ctxt->inptr - ctxt->inrptr - bytes_read; + ctxt->strm->next_in = BAD_CAST (ctxt->inrptr + bytes_read); + + z_ret = inflate(ctxt->strm, Z_NO_FLUSH); + bytes_read += orig_avail_in - ctxt->strm->avail_in; + + if (z_ret != Z_OK) break; + } + + ctxt->inrptr += bytes_read; + return(len - ctxt->strm->avail_out); + } +#endif + + 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; + SOCKET ret; + 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); + if (ctxt == NULL) + return(NULL); + } else { + ctxt = xmlNanoHTTPNewCtxt(redirURL); + if (ctxt == NULL) + return(NULL); + ctxt->location = xmlMemStrdup(redirURL); + } + + 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 == INVALID_SOCKET) { + 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) + /* reserve for string plus 'Content-Type: \r\n" */ + blen += strlen(*contentType) + 16; + if (ctxt->query != NULL) + /* 1 for '?' */ + blen += strlen(ctxt->query) + 1; + blen += strlen(method) + strlen(ctxt->path) + 24; +#ifdef HAVE_ZLIB_H + /* reserve for possible 'Accept-Encoding: gzip' string */ + blen += 23; +#endif + if (ctxt->port != 80) { + /* reserve space for ':xxxxx', incl. potential proxy */ + if (proxy) + blen += 12; + else + blen += 6; + } + 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); + + if (ctxt->query != NULL) + p += snprintf( p, blen - (p - bp), "?%s", ctxt->query); + + if (ctxt->port == 80) { + p += snprintf( p, blen - (p - bp), " HTTP/1.0\r\nHost: %s\r\n", + ctxt->hostname); + } else { + p += snprintf( p, blen - (p - bp), " HTTP/1.0\r\nHost: %s:%d\r\n", + ctxt->hostname, ctxt->port); + } + +#ifdef HAVE_ZLIB_H + p += snprintf(p, blen - (p - bp), "Accept-Encoding: gzip\r\n"); +#endif + + 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; + + while ((p = xmlNanoHTTPReadLine(ctxt)) != NULL) { + if (*p == 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; + int ret = 0; + + if (filename == NULL) return(-1); + 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 ) { + if (write(fd, buf, len) == -1) { + ret = -1; + } + } + + xmlNanoHTTPClose(ctxt); + close(fd); + return(ret); +} + +#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; + int ret = 0; + + if ((ctxt == NULL) || (filename == NULL)) return(-1); + + if (!strcmp(filename, "-")) + fd = 0; + else { + fd = open(filename, O_CREAT | O_WRONLY, 0666); + if (fd < 0) { + xmlNanoHTTPClose(ctxt); + return(-1); + } + } + + xmlNanoHTTPFetchContent( ctxt, &buf, &len ); + if ( len > 0 ) { + if (write(fd, buf, len) == -1) { + ret = -1; + } + } + + xmlNanoHTTPClose(ctxt); + close(fd); + return(ret); +} +#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. + */ +static 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 +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 */ +#define bottom_nanohttp +#include "elfgcchack.h" diff --git a/optim/TOTRY b/optim/TOTRY new file mode 100644 index 0000000..6e11f7e --- /dev/null +++ b/optim/TOTRY @@ -0,0 +1,23 @@ +XML: +==== + - I/O avoid copies when parsing mmap'ed files, need to use + unmutable buffers except for the last 4K to make it 0 terminated + (or get rid of 0 termination check in the whole parser, hard !) + - recheck > 4Gb instances for parsing, and RNG validation. + + +XSLT: +===== + - global variable access + for each expr in stylesheet : allocate index + for each transformation context + create an index table + cache values in the transformation + - context evaluation + - cache + - constants at the XPAth level + - provide more info on compiled expressions + - dependances w.r.t. variables (which ones) + - dependancy on the current node + - dependancy on the current document + - do not use _private but other fields in the node structures. diff --git a/optim/hash_dict.patch b/optim/hash_dict.patch new file mode 100644 index 0000000..6c50abc --- /dev/null +++ b/optim/hash_dict.patch @@ -0,0 +1,257 @@ +Index: hash.c +=================================================================== +RCS file: /cvs/gnome/gnome-xml/hash.c,v +retrieving revision 1.30 +diff -u -r1.30 hash.c +--- hash.c 29 Oct 2003 11:18:37 -0000 1.30 ++++ hash.c 24 Feb 2004 17:18:42 -0000 +@@ -26,6 +26,7 @@ + #include + #include + #include ++#include + + #define MAX_HASH_LEN 8 + +@@ -38,9 +39,9 @@ + typedef xmlHashEntry *xmlHashEntryPtr; + struct _xmlHashEntry { + struct _xmlHashEntry *next; +- xmlChar *name; +- xmlChar *name2; +- xmlChar *name3; ++ const xmlChar *name; ++ const xmlChar *name2; ++ const xmlChar *name3; + void *payload; + int valid; + }; +@@ -52,6 +53,7 @@ + struct _xmlHashEntry *table; + int size; + int nbElems; ++ xmlDictPtr dict; + }; + + /* +@@ -143,12 +145,16 @@ + xmlHashTablePtr + xmlHashCreate(int size) { + xmlHashTablePtr table; ++ xmlDictPtr dict; + + if (size <= 0) + size = 256; + ++ dict = xmlDictCreate(); ++ if (dict == NULL) return(NULL); + table = xmlMalloc(sizeof(xmlHashTable)); + if (table) { ++ table->dict = dict; + table->size = size; + table->nbElems = 0; + table->table = xmlMalloc(size * sizeof(xmlHashEntry)); +@@ -158,6 +164,7 @@ + } + xmlFree(table); + } ++ xmlDictFree(dict); + return(NULL); + } + +@@ -282,12 +289,6 @@ + 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); +@@ -299,6 +300,7 @@ + } + xmlFree(table->table); + } ++ xmlDictFree(table->dict); + xmlFree(table); + } + +@@ -465,6 +467,9 @@ + + if ((table == NULL) || name == NULL) + return(-1); ++ if (name) name = xmlDictLookup(table->dict, name, -1); ++ if (name2) name2 = xmlDictLookup(table->dict, name2, -1); ++ if (name3) name3 = xmlDictLookup(table->dict, name3, -1); + + /* + * Check for duplicate and insertion location. +@@ -475,15 +480,15 @@ + } 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 ((insert->name == name) && ++ (insert->name2 == name2) && ++ (insert->name3 == name3)) + return(-1); + len++; + } +- if ((xmlStrEqual(insert->name, name)) && +- (xmlStrEqual(insert->name2, name2)) && +- (xmlStrEqual(insert->name3, name3))) ++ if ((insert->name == name) && ++ (insert->name2 == name2) && ++ (insert->name3 == name3)) + return(-1); + } + +@@ -495,9 +500,9 @@ + return(-1); + } + +- entry->name = xmlStrdup(name); +- entry->name2 = xmlStrdup(name2); +- entry->name3 = xmlStrdup(name3); ++ entry->name = name; ++ entry->name2 = name2; ++ entry->name3 = name3; + entry->payload = userdata; + entry->next = NULL; + entry->valid = 1; +@@ -539,6 +544,9 @@ + + if ((table == NULL) || name == NULL) + return(-1); ++ if (name) name = xmlDictLookup(table->dict, name, -1); ++ if (name2) name2 = xmlDictLookup(table->dict, name2, -1); ++ if (name3) name3 = xmlDictLookup(table->dict, name3, -1); + + /* + * Check for duplicate and insertion location. +@@ -549,18 +557,18 @@ + } 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 ((insert->name == name) && ++ (insert->name2 == name2) && ++ (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 ((insert->name == name) && ++ (insert->name2 == name2) && ++ (insert->name3 == name3)) { + if (f) + f(insert->payload, insert->name); + insert->payload = userdata; +@@ -576,9 +584,9 @@ + return(-1); + } + +- entry->name = xmlStrdup(name); +- entry->name2 = xmlStrdup(name2); +- entry->name3 = xmlStrdup(name3); ++ entry->name = name; ++ entry->name2 = name2; ++ entry->name3 = name3; + entry->payload = userdata; + entry->next = NULL; + entry->valid = 1; +@@ -615,10 +623,13 @@ + key = xmlHashComputeKey(table, name, name2, name3); + if (table->table[key].valid == 0) + return(NULL); ++ if (name) name = xmlDictLookup(table->dict, name, -1); ++ if (name2) name2 = xmlDictLookup(table->dict, name2, -1); ++ if (name3) name3 = xmlDictLookup(table->dict, name3, -1); + for (entry = &(table->table[key]); entry != NULL; entry = entry->next) { +- if ((xmlStrEqual(entry->name, name)) && +- (xmlStrEqual(entry->name2, name2)) && +- (xmlStrEqual(entry->name3, name3))) ++ if ((entry->name == name) && ++ (entry->name2 == name2) && ++ (entry->name3 == name3)) + return(entry->payload); + } + return(NULL); +@@ -774,6 +785,9 @@ + if (f == NULL) + return; + ++ if (name) name = xmlDictLookup(table->dict, name, -1); ++ if (name2) name2 = xmlDictLookup(table->dict, name2, -1); ++ if (name3) name3 = xmlDictLookup(table->dict, name3, -1); + if (table->table) { + for(i = 0; i < table->size; i++) { + if (table->table[i].valid == 0) +@@ -781,9 +795,9 @@ + 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))) && ++ if (((name == NULL) || (name == iter->name)) && ++ ((name2 == NULL) || (name2 == iter->name2)) && ++ ((name3 == NULL) || (name3 == iter->name3)) && + (iter->payload != NULL)) { + f(iter->payload, data, iter->name, + iter->name2, iter->name3); +@@ -913,19 +927,16 @@ + if (table->table[key].valid == 0) { + return(-1); + } else { ++ if (name) name = xmlDictLookup(table->dict, name, -1); ++ if (name2) name2 = xmlDictLookup(table->dict, name2, -1); ++ if (name3) name3 = xmlDictLookup(table->dict, name3, -1); + for (entry = &(table->table[key]); entry != NULL; entry = entry->next) { +- if (xmlStrEqual(entry->name, name) && +- xmlStrEqual(entry->name2, name2) && +- xmlStrEqual(entry->name3, name3)) { ++ if ((entry->name == name) && ++ (entry->name2 == name2) && ++ (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); +Index: include/libxml/hash.h +=================================================================== +RCS file: /cvs/gnome/gnome-xml/include/libxml/hash.h,v +retrieving revision 1.15 +diff -u -r1.15 hash.h +--- include/libxml/hash.h 20 Nov 2003 11:59:07 -0000 1.15 ++++ include/libxml/hash.h 24 Feb 2004 17:18:42 -0000 +@@ -42,7 +42,7 @@ + * + * Callback to free data from a hash. + */ +-typedef void (*xmlHashDeallocator)(void *payload, xmlChar *name); ++typedef void (*xmlHashDeallocator)(void *payload, const xmlChar *name); + /** + * xmlHashCopier: + * @payload: the data in the hash diff --git a/optim/hash_dict.txt b/optim/hash_dict.txt new file mode 100644 index 0000000..a447b7e --- /dev/null +++ b/optim/hash_dict.txt @@ -0,0 +1,11 @@ +Reuses a dictionary for the hash table to reduce the string compare +costs. Not worth it unless validating big DTDs + + without with +db10000 tree 175/79 179/81 +db100000 stream 1222 1217 +dba100000stream 593 601 +REC validation 1986 2098 +Docbook valid 10808 10649 + +Tue Feb 24 19:09:49 CET 2004 diff --git a/os400/README400 b/os400/README400 new file mode 100644 index 0000000..fff923c --- /dev/null +++ b/os400/README400 @@ -0,0 +1,226 @@ + +Implementation notes: + + This is a true OS/400 implementation, not a PASE implementation (for PASE, +use an AIX implementation). + + The biggest problem with OS/400 is EBCDIC. The current libxml2 implementation +uses UTF-8 internally. To ease encoding conversion between the calling +applications and libxml2, supplementary "convert and latch" functions are +provided (See below). To bind the EBCDIC OS/400 system calls and libxml2, +an ASCII run-time environment (QADRT) has been used and wrapper functions have +been designed. + +Other problems are: +- Source code line length: to be stored in DB2 members, source files may not + have lines longer than 100 characters. Some header and documentation files + have been modified accordingly. +- va_list dereferencing: the OS/400 implementation of va_list type is an array + but the compiler forbids explicit array dereferencing. Source files have + been updated accordingly. +- Depending on the compilation/execution environment, it is possible that + stdin/stdout/stderr are not associated with a file descriptor; as a side + effect, open() may return a file descriptor value 0, 1 or 2 that is NOT + a C standard file. Thus using such a number may be inaccurate. +- iconv_open() arguments: OS/400 uses non-standard encoding names and does not + support standard names. For this reason, a name wrapper has been designed. +- dlopen() (support for xmodule): the function and its corollaries are not + provided by the OS/400 library. However a local implementation is provided. + + +Compiling on OS/400: + +_ As a prerequisite, QADRT development environment must be installed. +_ Install the libxml2 source directory in IFS. +_ Enter shell (QSH) +_ Change current directory to the libxml2 installation directory +_ Change current directory to ./os400 +_ Edit file iniscript.sh. You may want to change tunable configuration + parameters, like debug info generation, optimisation level, listing option, + target library, zlib availability, etc. +_ Copy any file in the current directory to makelog (i.e.: + cp initscript.sh makelog): this is intended to create the makelog file with + an ASCII CCSID! +_ Enter the command "sh make.sh >makelog 2>&1' +_ Examine the makelog file to check for compilation errors. + + Leaving file initscript.sh unchanged, this will produce the following +OS/400 objects: +_ Library LIBXML2. All other objects will be stored in this library. +_ Modules for all libxml2 units, with full debug info and no code optimization. +_ Binding directory LIBXML2_A, to be used at calling program link time for + statically binding the modules (specify BNDSRVPGM(QADRTTS QGLDCLNT QGLDBRDR) + when creating a program using LIBXML2_A). +_ Service program LIBXML2. To be used at calling program run-time + when this program has dynamically bound libxml2 at link time. +_ Binding directory LIBXML2. To be used to dynamically bind libxml2 when + linking a calling program. +_ Source file LIBXML. It contains all the header members needed to compile a + C/C++ module using libxml2. +_ Standard and additional C/C++ libxml2 header members (possibly renamed) in + file LIBXML. +_ IFS directory /libxml2 with subdirectory include/libxml containing all + C/C++ header files for IFS-based compilation. +_ Source file LIBXMLRPG. It contains all the include members needed to compile a + ILE/RPG module/program using libxml2 (ILE/RPG binding). +_ ILE/RPG binding include members (possibly renamed) in file LIBXMLRPG. +_ IFS subdirectory /libxml2/include/libxmlrpg containing all ILE/RPG include + files for IFS-based compilation. + + +Renamed header files in DB2 members: + DB2 member names are limited to 10 characters, thus the following C/C++ +header members are renamed as: + parserInternals.h --> PARSERINTE + schemasInternals.h --> SCHEMASINT + xmlautomata.h --> XMLAUTOMAT + xmlschemastype.h --> SCHMTYPES + xpathInternals.h --> XPATHINTER +IFS header files are NOT renamed. +ILE/RPG headers are processed likewise. + + +Special programming consideration: + +QADRT being used, the following points must be considered: +_ If static binding is used, service program QADRTTS must be linked too. +_ The EBCDIC CCSID used by QADRT is 37 by default, NOT THE JOB'S CCSID. If + another EBCDIC CCSID is required, it must be set via a locale through a call + to setlocale_a (QADRT's setlocale() ASCII wrapper) with category LC_ALL or + LC_CTYPE, or by setting environment variable QADRT_ENV_LOCALE to the locale + object path before executing the program. +_ Always use *IFSIO or *IFS64IO to compile calling programs. + + + +Supplementary (non libxml2 standard) support procedures for OS/400. + + As cited above, there are some procedures to ease encoding conversion of +libxml2 function arguments and results: the mechanism is based on +dictionaries. The functions convert a string, latch the result in a dictionary +to ensure its persistence and return its address. It is the caller's +responsibility to clean the dictionary when it becomes too big or disappears. + +The procedures are: + +#include + +const char * xmlTranscodeResult(const xmlChar * s, + const char * encoding, + xmlDictPtr * dict, + void (*freeproc)(const void *)); + +const xmlChar * xmlTranscodeString(const char * s, + const char * encoding, + xmlDictPtr * dict); + +const xmlChar * xmlTranscodeWString(const char * s, + const char * encoding, + xmlDictPtr * dict); + +const xmlChar * xmlTranscodeWString(const char * s, + const char * encoding, + xmlDictPtr * dict); + +where: +s is the string to translate. +encoding is the alternate character encoding. If null, the current job's + encoding (CCSID) is used. +dict is the address of the latching directory. If NULL, the procedure + functions as a simple non-latching encoding converter and + its result value should be freed by the caller. +freeproc is a procedure to release the original string, or NULL. + +xmlTranscodeResult() converts from UTF-8 to the given alternate encoding. +xmlTranscodeString() converts from the given 8-bit encoding to UTF-8 (note that + UTF-8 itself is considered as a 8-bit encoding). +xmlTranscodeWString() converts from the given 16-bit encoding to UTF-8. +xmlTranscodeHString() converts from the given 32-bit encoding to UTF-8. + + +To shorten statements using these functions, shorthands are defined: + +xmlTR for xmlTranscodeResult +xmlTS for xmlTranscodeString +xmlTW for xmlTranscodeWString +xmlTH for xmlTranscodeHstring + +These shorthands may be disabled by defining XML_NO_SHORT_NAMES before +libxml/transcode.h inclusion. + +A directory pointer must be preset to NULL before the first call using it to +one of the above procedure. + +To release a latching directory, use function + +void xmlZapDict(xmlDictPtr * dict); + + +Example: + +#include +#include + +xmlDocPtr mySimpleXMLDoc(char * element, char * text) +{ + xmlDocPtr doc; + xmlNodePtr node; + xmlDictPtr dict = NULL; + + /* element and text are encoded in the current job's encoding. */ + + doc = xmlNewDoc(); + xmlNewTextChild((xmlNodePtr) doc, NULL, xmlTS(element, NULL, + &dict), xmlTS(text, NULL, &dict)); + xmlZapDict(&dict); + return doc; +} + + +Additionally, a formatter into latched/dynamic storage is provided: + +const char * xmlVasprintf(xmlDictPtr * dict, + const char * encoding, + const xmlChar * fmt, + va_list args); + + +xmllint and xmlcatalog programs: + + These programs are fully implemented at the qshell level, with standard +command line options. Links to these are installed in sub-directory bin of +the IFS installation directory. + CL command interfaces to these programs are also provided with limited +support. In particular, interactive mode is not supported and argument count +and lengths are limited by the CL command syntax. + + +ILE/RPG binding: + + All standard types and procedures are provided. Since ILE/RPG does not +support macros, they have not been ported. However some of them are emulated +as functions: these are the more useful ones (xmlXPathNodeSetGetLength, +xmlXPathNodeSetItem, xmlXPathNodeSetIsEmpty, htmlDefaultSubelement, +htmlElementAllowedHereDesc, htmlRequiredAttrs) and the global/threaded +variables access macros. These variables can be read with function +get_xxx(void), where xxxx is the name of the variable; they may be set by +calling function set_xxxx(value), where value is of the same type as the +variable. + + The C va_list is not implemented as such in ILE/RPG. Functions implementing +va_list and associated methods are provided: + + /include "libxmlrpg/xmlstdarg" + + d xmlVaStart pr + d list like(xmlVaList) + d lastargaddr * value + d lastargsize 10u 0 value + + d xmlVaArg pr + d list like(xmlVaList) + d dest * value + d argsize 10i 0 value + + d xmlVaEnd pr + d list like(xmlVaList) diff --git a/os400/dlfcn/dlfcn.c b/os400/dlfcn/dlfcn.c new file mode 100644 index 0000000..77190b3 --- /dev/null +++ b/os400/dlfcn/dlfcn.c @@ -0,0 +1,1213 @@ +/** +*** dlopen(), dlclose() dlsym(), dlerror() emulation for OS/400. +*** +*** See Copyright for the status of this software. +*** +*** Author: Patrick Monnerat , DATASPHERE S.A. +**/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include /* AS400 exceptions. */ +#include /* MI pointers support. */ +#include /* Error structures. */ +#include /* Path to QSYS object name. */ +#include /* For Qp0zInitEnv(). */ +#include /* For QleActBndPgmLong() definitions. */ +#include /* Qualified name structure. */ +#include /* Retrieve message from message file. */ + +#include +#include + +#include "libxml/hash.h" +#include "dlfcn.h" + + +/** +*** Maximum internal path length. +**/ + +#define MAXPATHLEN 5120 + + +/** +*** Maximum error string length. +**/ + +#define MAX_ERR_STR 511 + + +/** +*** Field address macro. +**/ + +#define offset_by(t, b, o) ((t *) ((char *) (b) + (unsigned int) (o))) + + +/** +*** Global flags. +**/ + +#define INITED 000001 /* Package has been initialized. */ +#define THREADS 000002 /* Multithreaded job. */ +#define MULTIBUF 000004 /* One error buffer per thread. */ + + +/** +*** DLL handle private structure. +**/ + +typedef struct { + Qle_ABP_Info_Long_t actinfo; /* Activation information. */ + _SYSPTR pointer; /* Pointer to DLL object. */ + unsigned int actcount; /* Activation count. */ +} dlinfo; + + +/** +*** Per-thread structure. +**/ + +typedef struct { + unsigned int lockcount; /* Mutex lock count. */ + unsigned int iserror; /* Flag error present. */ + char str[MAX_ERR_STR + 1]; /* Error string buffer. */ +} dlts_t; + + +static pthread_mutex_t dlmutex = PTHREAD_MUTEX_INITIALIZER; +static xmlHashTablePtr dldir = (xmlHashTablePtr) NULL; /* DLL directory. */ +static unsigned int dlflags = 0; /* Package flags. */ +static pthread_key_t dlkey; +static dlts_t static_buf; /* Static error buffer. */ + + + +static void +dlthreadterm(void * mem) + +{ + free(mem); + pthread_setspecific(dlkey, NULL); +} + + +static void +dlterm(void) + +{ + void * p; + + if (dlflags & MULTIBUF) { + p = pthread_getspecific(dlkey); + + if (p) + dlthreadterm(p); + } + + if (dlflags & THREADS) + pthread_mutex_lock(&dlmutex); + + if (dldir) { + xmlHashFree(dldir, (xmlHashDeallocator) NULL); + dldir = NULL; + } + + if (dlflags & MULTIBUF) + pthread_key_delete(dlkey); + + dlflags |= ~(INITED | MULTIBUF); + pthread_mutex_unlock(&dlmutex); + pthread_mutex_destroy(&dlmutex); +} + + +static void +dlinit(void) + +{ + int locked; + + /** + *** Initialize the package. + *** Should be call once per process. + **/ + + locked = !pthread_mutex_lock(&dlmutex); + + if (!(dlflags & INITED)) { + dlflags &= ~THREADS; + + if (locked) + dlflags |= THREADS; + + Qp0zInitEnv(); + dldir = xmlHashCreate(16); + dlflags &= ~MULTIBUF; + + if (dlflags & THREADS) + if (!pthread_key_create(&dlkey, dlthreadterm)) + dlflags |= MULTIBUF; + + atexit(dlterm); + dlflags |= INITED; + } + + if (locked) + pthread_mutex_unlock(&dlmutex); +} + + +static void +dlthreadinit(void) + +{ + dlts_t * p; + + if (!(dlflags & INITED)) + dlinit(); + + if (dlflags & MULTIBUF) { + p = pthread_getspecific(dlkey); + + if (!p) { + p = (dlts_t *) malloc(sizeof *p); + + if (p) { + p->lockcount = 0; + p->iserror = 0; + + if (pthread_setspecific(dlkey, p)) + free(p); + } + } + } +} + + +static void +dllock(void) + +{ + dlts_t * p; + + if (!(dlflags & THREADS)) + return; + + if (dlflags & MULTIBUF) { + p = pthread_getspecific(dlkey); + + if (p && p->lockcount) { + p->lockcount++; + return; + } + } + else + p = (dlts_t *) NULL; + + if (pthread_mutex_lock(&dlmutex)) + return; + + if (p) + p->lockcount++; +} + + +static void +dlunlock(void) + +{ + dlts_t * p; + + if (!(dlflags & THREADS)) + return; + + if (dlflags & MULTIBUF) { + p = pthread_getspecific(dlkey); + + if (p && p->lockcount > 1) { + p->lockcount--; + return; + } + } + else + p = (dlts_t *) NULL; + + if (pthread_mutex_unlock(&dlmutex)) + return; + + if (p) + p->lockcount--; +} + + +const char * +dlerror(void) + +{ + dlts_t * p; + + dlthreadinit(); + + if (!(dlflags & MULTIBUF)) + p = &static_buf; + else if (!(p = (dlts_t *) pthread_getspecific(dlkey))) + p = &static_buf; + + if (!p->iserror) + return (const char *) NULL; + + p->iserror = 0; + return p->str; +} + + +static void +dlseterror_from_errno(unsigned int err_no) + +{ + dlts_t * p; + + if (!(dlflags & MULTIBUF)) + p = &static_buf; + else if (!(p = (dlts_t *) pthread_getspecific(dlkey))) + p = &static_buf; + + strcpy(p->str, strerror(err_no)); + p->iserror = 1; +} + + +static void +dlseterror_from_exception(volatile _INTRPT_Hndlr_Parms_T * excp) + +{ + int i; + Qmh_Rtvm_RTVM0300_t * imp; + char * cp; + _INTRPT_Hndlr_Parms_T * p; + dlts_t * q; + char rtvmbuf[30000]; + Qus_EC_t errinfo; + + p = (_INTRPT_Hndlr_Parms_T *) excp; + errinfo.Bytes_Provided = 0; /* Exception on error. */ + QMHRTVM(rtvmbuf, sizeof rtvmbuf, "RTVM0300", p->Msg_Id, + "QCPFMSG QSYS ", p->Ex_Data, p->Msg_Data_Len, + "*YES ", "*NO ", &errinfo); + imp = offset_by(Qmh_Rtvm_RTVM0300_t, rtvmbuf, 0); + + if (!(dlflags & MULTIBUF)) + q = &static_buf; + else if (!(q = (dlts_t *) pthread_getspecific(dlkey))) + q = &static_buf; + + if (i = imp->Length_Message_Returned) + cp = offset_by(char, imp, imp->Offset_Message_Returned); + else if (i = imp->Length_Help_Returned) + cp = offset_by(char, imp, imp->Offset_Help_Returned); + else { + q->iserror = 0; + return; + } + + q->iserror = 1; + + if (i > sizeof q->str - 1) + i = sizeof q->str - 1; + + memcpy(q->str, cp, i); + q->str[i] = '\0'; +} + + +static int +dlparentpath(const char * path, size_t len) + +{ + if (len <= 1) + return len; + + while (path[--len] != '/') + ; + + return len? len: 1; +} + + +static int +dlmakepath(char * path, size_t pathlen, const char * tail, size_t taillen) + +{ + int i; + + if (taillen && tail[0] == '/') + pathlen = 0; + + for (;;) { + while (taillen && *tail == '/') { + tail++; + taillen--; + } + + if (!taillen) + break; + + for (i = 0; i < taillen; i++) + if (tail[i] == '/') + break; + + if (*tail == '.') + switch (i) { + + case 2: + if (tail[1] != '.') + break; + + pathlen = dlparentpath(path, pathlen); + + case 1: + tail += i; + taillen -= i; + continue; + } + + if (pathlen + i + 1 >= MAXPATHLEN) { + errno = ENAMETOOLONG; + return -1; + } + + path[pathlen++] = '/'; + memcpy(path + pathlen, tail, i); + pathlen += i; + } + + if (!pathlen) + path[pathlen++] = '/'; + + path[pathlen] = '\0'; + return pathlen; +} + + +static int +dlresolveLink(const char * path, char * buf, size_t bufsiz) + +{ + int n; + int l1; + int l2; + struct stat sbuf; + char buf1[MAXPATHLEN + 1]; + char buf2[MAXPATHLEN + 1]; + + /** + *** Resolve symbolic link to IFS object name. + **/ + + if (!buf) { + errno = EFAULT; + return -1; + } + + if (!path || !*path || !bufsiz) { + errno = EINVAL; + return -1; + } + + if (*path != '/') { + if (!getcwd(buf1, sizeof buf1)) + return -1; + + l1 = strlen(buf1); + } + else + l1 = 0; + + l1 = dlmakepath(buf1, l1, path, strlen(path)); + n = 0; + + for (;;) { + if (l1 < 0) + return -1; + + if (n++ >= 256) { + errno = ELOOP; + return -1; + } + + if (lstat(buf1, &sbuf)) { + if (errno == ENOENT) + break; + + return -1; + } + + if (!S_ISLNK(sbuf.st_mode)) + break; + + if (sbuf.st_size > MAXPATHLEN) { + errno = ENAMETOOLONG; + return -1; + } + + l2 = readlink(buf1, buf2, MAXPATHLEN + 1); + + if (l2 < 0) + return -1; + + if (buf2[0] != '/') + l1 = dlparentpath(buf1, l1); + + l1 = dlmakepath(buf1, l1, buf2, l2); + } + + if (l1 >= bufsiz) { + errno = ENAMETOOLONG; + return -1; + } + + memcpy(buf, buf1, l1 + 1); + return l1; +} + + +static int +dlGetObjectName(Qp0l_QSYS_Info_t * qsysinfo, const char * dir, + int dirlen, const char * link) + +{ + int n; + char * namebuf; + Qlg_Path_Name_T * qptp; + char pathbuf[sizeof(Qlg_Path_Name_T) + _QP0L_DIR_NAME_LG + 4]; + Qus_EC_t errinfo; + struct stat sbuf; + + /** + *** Get QSYS object library/name/member and type corresponding to + *** the symbolic `link' in directory `dir'. + **/ + + if (!qsysinfo) { + errno = EFAULT; + return -1; + } + + if (!dir && !link) { + errno = EINVAL; + return -1; + } + + qptp = (Qlg_Path_Name_T *) pathbuf; + namebuf = pathbuf + sizeof(Qlg_Path_Name_T); + n = 0; + + /** + *** Build full path. + **/ + + if (dir) { + if (dirlen < 0 || dirlen > _QP0L_DIR_NAME_LG + 4) + dirlen = _QP0L_DIR_NAME_LG + 4; + + while (*dir && n < dirlen) + namebuf[n++] = *dir++; + } + + if (n && namebuf[n - 1] == '/') + n--; + + if (link) { + if (*link && *link != '/' && n < _QP0L_DIR_NAME_LG + 4) + namebuf[n++] = '/'; + + while (*link && n < _QP0L_DIR_NAME_LG + 4) + namebuf[n++] = *link++; + } + + if (!n || n > _QP0L_DIR_NAME_LG) { + errno = ENAMETOOLONG; + return -1; + } + + namebuf[n] = '\0'; + n = dlresolveLink(namebuf, namebuf, _QP0L_DIR_NAME_LG + 1); + + if (n == -1) + return -1; + + if (stat(namebuf, &sbuf)) + return -1; + + memset((char *) qptp, 0, sizeof *qptp); + qptp->Path_Length = n; + qptp->Path_Name_Delimiter[0] = '/'; + errinfo.Bytes_Provided = sizeof errinfo; + Qp0lCvtPathToQSYSObjName(qptp, qsysinfo, "QSYS0100", sizeof *qsysinfo, + 0, &errinfo); + return errinfo.Bytes_Available? -1: 0; +} + + +static const char * +getcomponent(char * dst, const char * src) + +{ + int i; + + /** + *** Get a path component of at most 10 characters and + *** map it to upper case. + *** Return the address of the next delimiter in source. + **/ + + for (i = 0;; src++) { + if (!*src || *src == ' ' || *src == '/') { + *dst = '\0'; + return src; + } + + if (i < 10) { + *dst++ = toupper(*src); + i++; + } + } +} + + +static int +dlpath2QSYS(Qp0l_QSYS_Info_t * qsysinfo, const char * path, const char * dftlib) + +{ + unsigned int flags; + char * cp; + + /** + *** Convert the given path to a QSYS object name. + *** Syntax rules for paths are: + *** + *** '/'+ [ [ '/'+ [ '/'+ ] ] '/'* ] + *** '/'+ [ '/'+ ] '/'* + *** '/'* + *** + *** If default library is not given, *LIBL is assumed. + *** Components may no contain spaces. They are translated to + *** uppercase. Only the first 10 characters are significant. + *** There is no check for the validity of the given components and + *** for the object existence. + *** Component types are not in the path, but generated internally. + *** CCSID is not processed. + *** + *** Return 0 upon success, else -1. + **/ + + if (!qsysinfo || !path) { + errno = EFAULT; + return -1; + } + + /** + *** Strip leading spaces. + **/ + + while (*path == ' ') + path++; + + /** + *** Check for null path. + **/ + + if (!*path) { + errno = EINVAL; + return -1; + } + + /** + *** Preset the result structure. + **/ + + memset((char *) qsysinfo, 0, sizeof *qsysinfo); + + /** + *** Determine the format. + **/ + + if (*path == '/') { + /** + *** Library component present. + **/ + + while (*++path == '/') + ; + + if (!*path || *path == ' ') + strcpy(qsysinfo->Lib_Name, "QSYS"); + else + path = getcomponent(qsysinfo->Lib_Name, path); + + /** + *** Check for file component and get it. + **/ + + if (*path == '/') { + while (*++path == '/') + ; + + if (*path && *path != ' ') + path = getcomponent(qsysinfo->Obj_Name, path); + } + } + else { + /** + *** The mandatory component is the . + **/ + + path = getcomponent(qsysinfo->Obj_Name, path); + + while (*path == '/') + path++; + + /** + *** If there is a second component, move the first to + *** the library name and parse the file name. + **/ + + if (*path && *path != ' ') { + strcpy(qsysinfo->Lib_Name, qsysinfo->Obj_Name); + memset(qsysinfo->Obj_Name, 0, + sizeof qsysinfo->Obj_Name); + path = getcomponent(qsysinfo->Obj_Name, path); + } + else + strcpy(qsysinfo->Lib_Name, dftlib? dftlib: "*LIBL"); + } + + /** + *** Check and set-up member. + **/ + + while (*path == '/') + path++; + + if (*path && *path != ' ') { + path = getcomponent(qsysinfo->Mbr_Name, path); + strcpy(qsysinfo->Mbr_Type, "*MBR"); + + while (*path == '/') + path++; + } + + strcpy(qsysinfo->Lib_Type, "*LIB"); + + if (qsysinfo->Obj_Name[0]) + strcpy(qsysinfo->Obj_Type, "*FILE"); + + qsysinfo->Bytes_Returned = sizeof *qsysinfo; + qsysinfo->Bytes_Available = sizeof *qsysinfo; + + /** + *** Strip trailing spaces. + **/ + + while (*path == ' ') + path++; + + if (*path) { + errno = EINVAL; + return -1; + } + + return 0; +} + + +static int +dl_ifs_link(Qp0l_QSYS_Info_t * qsysinfo, const char * pathname) + +{ + /** + *** If `pathname' is a link found in IFS, set `qsysinfo' to its + *** DB2 name. + *** Return 0 if OK, else -1. + **/ + + return dlGetObjectName(qsysinfo, (const char *) NULL, 0, pathname); +} + + +static int +dl_path_link(Qp0l_QSYS_Info_t * qsysinfo, const char * pathvar, + const char * filename, int (* testproc)(const Qp0l_QSYS_Info_t *)) + +{ + const char * p; + const char * q; + unsigned int i; + const char * path; + + /** + *** If `filename' is not a path and is a link found in one of the + *** colon-separated paths in environment variable `pathvar', + *** set `qsysinfo' to its DB2 name. + *** Return 0 if OK, else -1. + **/ + + i = _QP0L_DIR_NAME_LG; + + for (p = filename; *p; p++) + if (*p == '/' || !--i) + return -1; /* Too long or a path. */ + + /** + *** Make sure we have the LD_LIBRARY_PATH environment + *** variable value. + **/ + + path = getenv(pathvar); + + if (!path) + return -1; /* No path list. */ + + /** + *** Try in each path listed. + **/ + + q = path; + + if (!*q) + return -1; /* No path list. */ + + for (;;) { + for (p = q; *p && *p != ':'; p++) + ; + + if (p > q) /* Ignore null path. */ + if (!dlGetObjectName(qsysinfo, q, p - q, filename)) + if (!testproc || (*testproc)(qsysinfo)) + return 0; /* Found: return. */ + + if (!*p) + break; + + q = p + 1; + } + + errno = ENOENT; + return -1; +} + + +static int +dl_DB2_path(Qp0l_QSYS_Info_t * qsysinfo, const char * pathname) + +{ + if (dlpath2QSYS(qsysinfo, pathname, (const char *) NULL)) + return -1; + + if (qsysinfo->Mbr_Type[0]) + return -1; /* Service program may not have members. */ + + if (!qsysinfo->Obj_Type[0]) + return -1; /* Object must be specified. */ + + strcpy(qsysinfo->Obj_Type, "*SRVPGM"); /* Set our object type. */ + return 0; +} + + +static int +dl_DB2_name(char * dst, const char * name) + +{ + int i; + + for (i = 0; i < 10; i++) { + switch (*name) { + + default: + if (!islower(*name)) + break; + + case '\0': + case '/': + case ' ': + return -1; + } + + *dst++ = *name++; + } + + if (!i) + return -1; + + *dst = '\0'; + return 0; +} + + +static int +dl_qualified_object(Qp0l_QSYS_Info_t * qsysinfo, const char * pathname) + +{ + memset((char *) qsysinfo, 0, sizeof *qsysinfo); + + if (dl_DB2_name(qsysinfo->Obj_Name, pathname) || + dl_DB2_name(qsysinfo->Lib_Name, pathname + 10)) + return -1; + + strcpy(qsysinfo->Lib_Type, "*LIB"); + strcpy(qsysinfo->Obj_Type, "*SRVPGM"); + return 0; +} + + +static int +dl_lib_object(Qp0l_QSYS_Info_t * qsysinfo, + const char * libname, const char * pathname) + +{ + int i; + char * cp; + + strcpy(qsysinfo->Lib_Name, libname); + strcpy(qsysinfo->Lib_Type, "*LIB"); + strcpy(qsysinfo->Obj_Type, "*SRVPGM"); + cp = qsysinfo->Obj_Name; + + while (*pathname == ' ') + pathname++; + + for (i = 0;; pathname++) { + switch (*pathname) { + + case '\0': + case ' ': + break; + + case '/': + return -1; + + default: + if (i < 10) + *cp++ = toupper(*pathname); + + i++; + continue; + } + + break; + } + + while (*pathname == ' ') + pathname++; + + if (!i || *pathname) + return -1; + + *cp = '\0'; + return 0; +} + + +static int +dl_is_srvpgm(const Qp0l_QSYS_Info_t * qsysinfo) + +{ + struct stat sbuf; + char namebuf[100]; + + if (!qsysinfo->Lib_Name[0] || strcmp(qsysinfo->Lib_Type, "*LIB") || + !qsysinfo->Obj_Name[0] || strcmp(qsysinfo->Obj_Type, "*SRVPGM") || + qsysinfo->Mbr_Name[0] || qsysinfo->Mbr_Type[0]) + return 0; + + /** + *** Build the IFS path name for the DB2 object. + **/ + + sprintf(namebuf, "%s/%s.LIB/%s.SRVPGM", + strcmp(qsysinfo->Lib_Name, "QSYS")? "/QSYS.LIB": "", + qsysinfo->Lib_Name, qsysinfo->Obj_Name); + + return stat(namebuf, &sbuf) == 0; +} + + +static int +dlreinit(dlinfo * dlip) + +{ + RINZ_TEMPL_T t; + RINZ_TEMPL_T * p; + volatile _INTRPT_Hndlr_Parms_T excbuf; + + if (dlip->actinfo.Flags & QLE_ABP_WAS_ACTIVE) + return 0; + + /** + *** Attempt to reinitialize the service program that was loaded. + *** The service program must be created to allow re-initialization: + *** ALWRINZ(*YES) for this to work. The default is + *** ALWRINZ(*NO). + **/ + +#pragma exception_handler(err, excbuf, 0, _C2_MH_ESCAPE, _CTLA_HANDLE_NO_MSG) + p = &t; + t.rinz_pgm = dlip->pointer; + t.rinz_agpmk = dlip->actinfo.Act_Grp_Mark; + _RINZSTAT(p); +#pragma disable_handler + + return 0; + +err: + if (!memcmp((char *) excbuf.Msg_Id, "MCH4421", 7)) + return 0; /* Program cannot be reinitialized. */ + + dlseterror_from_exception(&excbuf); + return -1; +} + + +void * +dlsym(void * handle, const char * symbol) + +{ + dlinfo * dlip; + void * p; + int export_type; + Qus_EC_t errinfo; + volatile _INTRPT_Hndlr_Parms_T excbuf; + static int zero = 0; + + dlthreadinit(); + + if (!handle || !symbol) { + dlseterror_from_errno(EFAULT); + return (void *) NULL; + } + + dlip = (dlinfo *) handle; + +#pragma exception_handler(error, excbuf, 0, _C2_MH_ESCAPE, _CTLA_HANDLE_NO_MSG) + errinfo.Bytes_Provided = 0; + QleGetExpLong(&dlip->actinfo.Act_Mark, &zero, &zero, + (char *) symbol, &p, &export_type, &errinfo); + return p; +#pragma disable_handler + +error: + dlseterror_from_exception(&excbuf); + return (void *) NULL; +} + + +int +dlclose(void * handle) + +{ + dlinfo * dlip; + void (* _fini)(void); + + dlthreadinit(); + + if (!handle) { + dlseterror_from_errno(EFAULT); + return -1; + } + + dlip = (dlinfo *) handle; + + if (dlip->actcount) { + if (--(dlip->actcount)) + return 0; + + if (_fini = dlsym(handle, "_fini")) + (*_fini)(); + } + + return dlreinit(dlip); +} + + +static void * +dlopenqsys(const Qp0l_QSYS_Info_t * dllinfo) + +{ + dlinfo * dlip; + dlinfo * dlip2; + void (* _init)(void); + unsigned int i; + _SYSPTR pgmptr; + unsigned long long actmark; + Qus_EC_t errinfo; + char actmarkstr[2 * sizeof actmark + 1]; + static int actinfo_size = sizeof dlip->actinfo; + volatile _INTRPT_Hndlr_Parms_T excbuf; + + /** + *** Capture any type of error and if any occurs, + *** return not found. + **/ + +#pragma exception_handler(error1, excbuf, 0, _C2_MH_ESCAPE, _CTLA_HANDLE_NO_MSG) + pgmptr = rslvsp(WLI_SRVPGM, (char *) dllinfo->Obj_Name, + (char *) dllinfo->Lib_Name ,_AUTH_NONE); + + if (!pgmptr) { + errno = ENOENT; + return (void *) NULL; + } + + /** + *** Create a new DLL info block. + **/ + + dlip = (dlinfo *) malloc(sizeof *dlip); + + if (!dlip) + return (void *) NULL; /* Cannot create block. */ +#pragma disable_handler + + dllock(); + +#pragma exception_handler(error2, excbuf, 0, _C2_MH_ESCAPE, _CTLA_HANDLE_NO_MSG) + memset((char *) dlip, 0, sizeof *dlip); + dlip->pointer = pgmptr; + + /** + *** Activate the DLL. + **/ + + errinfo.Bytes_Provided = 0; + QleActBndPgmLong(&pgmptr, &actmark, + &dlip->actinfo, &actinfo_size, &errinfo); + dlip->actinfo.Act_Mark = actmark; + + /** + *** Dummy string encoding activation mark to use as hash table key. + **/ + + for (i = 0; actmark; actmark >>= 6) + actmarkstr[i++] = 0x40 + (actmark & 0x3F); + + actmarkstr[i] = '\0'; + + /** + *** Check if already activated. + **/ + + dlip2 = (dlinfo *) xmlHashLookup(dldir, actmarkstr); + + if (dlip2) { + free((char *) dlip); + dlip = dlip2; + } + else if (xmlHashAddEntry(dldir, (const xmlChar *) actmarkstr, dlip)) { + dlreinit(dlip); + free((char *) dlip); + dlunlock(); + return (void *) NULL; + } +#pragma disable_handler + +#pragma exception_handler(error2, excbuf, 0, _C2_MH_ESCAPE, _CTLA_HANDLE_NO_MSG) + + /** + *** Bump activation counter. + **/ + + if (!(dlip->actcount++) && (_init = dlsym(dlip, "_init"))) + (*_init)(); + + dlunlock(); + + /** + *** Return the handle. + **/ + + return (void *) dlip; +#pragma disable_handler + +error2: + free((char *) dlip); + dlunlock(); + +error1: + dlseterror_from_exception(&excbuf); + return (void *) NULL; +} + + +void * +dlopen(const char * filename, int flag) + +{ + void * dlhandle; + int sverrno; + Qp0l_QSYS_Info_t dllinfo; + + sverrno = errno; + errno = 0; + + dlthreadinit(); + + if (!filename) { + dlseterror_from_errno(EFAULT); + errno = sverrno; + return NULL; + } + + /** + *** Try to locate the object in the following order: + *** _ `filename' is an IFS path. + *** _ `filename' is not a path and resides in one of + *** LD_LIBRARY_PATH colon-separated paths. + *** _ `filename' is not a path and resides in one of + *** PATH colon-separated paths. + *** _ `filename' is a DB2 path (as /library/object). + *** _ `filename' is a qualified object name. + *** _ `filename' is an object in *CURLIB. + *** _ `filename' is an object in *LIBL. + **/ + + if (!dl_ifs_link(&dllinfo, filename) && dl_is_srvpgm(&dllinfo)) + dlhandle = dlopenqsys(&dllinfo); + else if (!dl_path_link(&dllinfo, + "LD_LIBRARY_PATH", filename, dl_is_srvpgm)) + dlhandle = dlopenqsys(&dllinfo); + else if (!dl_path_link(&dllinfo, "PATH", filename, dl_is_srvpgm)) + dlhandle = dlopenqsys(&dllinfo); + else if (!dl_DB2_path(&dllinfo, filename) && dl_is_srvpgm(&dllinfo)) + dlhandle = dlopenqsys(&dllinfo); + else if (!dl_qualified_object(&dllinfo, filename) && + dl_is_srvpgm(&dllinfo)) + dlhandle = dlopenqsys(&dllinfo); + else if (!dl_lib_object(&dllinfo, "*CURLIB", filename) && + dl_is_srvpgm(&dllinfo)) + dlhandle = dlopenqsys(&dllinfo); + else if (!dl_lib_object(&dllinfo, "*LIBL", filename) && + dl_is_srvpgm(&dllinfo)) + dlhandle = dlopenqsys(&dllinfo); + else + dlhandle = NULL; + + if (!dlhandle && errno) + dlseterror_from_errno(errno); + + errno = sverrno; + return dlhandle; +} diff --git a/os400/dlfcn/dlfcn.h b/os400/dlfcn/dlfcn.h new file mode 100644 index 0000000..0cf691e --- /dev/null +++ b/os400/dlfcn/dlfcn.h @@ -0,0 +1,32 @@ +/** +*** dlopen(), dlclose() dlsym(), dlerror() emulation for OS/400. +*** +*** See Copyright for the status of this software. +*** +*** Author: Patrick Monnerat , DATASPHERE S.A. +**/ + +#ifndef _DLFCN_H_ +#define _DLFCN_H_ + + +/** +*** Flags for dlopen(). +*** Ignored for OS400. +**/ + +#define RTLD_LAZY 000 +#define RTLD_NOW 001 +#define RTLD_GLOBAL 010 + + +/** +*** Prototypes. +**/ + +extern void * dlopen(const char * filename, int flag); +extern void * dlsym(void * handle, const char * symbol); +extern const char * dlerror(void); +extern int dlclose(void * handle); + +#endif diff --git a/os400/iconv/README.iconv b/os400/iconv/README.iconv new file mode 100644 index 0000000..4950d59 --- /dev/null +++ b/os400/iconv/README.iconv @@ -0,0 +1,47 @@ +IBM OS/400 implements iconv in an odd way: +- Type iconv_t is a structure: therefore objects of this type cannot be + compared to (iconv_t) -1. +- Supported character sets names are all of the form IBMCCSIDccsid..., where + ccsid is a decimal 5-digit integer identifying an IBM coded character set. + In addition, character set names have to be given in EBCDIC. + Standard character set names like "UTF-8" are NOT recognized. +- The prototype of iconv_open() does not declare parameters as const, although + they are not altered. + + Since libiconv does not support EBCDIC, use of this package here as a +replacement is not a solution. + + For these reasons, the code in this directory implements a wrapper to the +OS/400 iconv implementation. The wrapper performs the following transformations: +- Type iconv_t is an pointer. Although OS/400 pointers are odd, comparing + with (iconv_t) -1 is OK. +- All IANA character set names are recognized in a coding- and case-insensitive + way, providing an equivalent CCSID exists. see + http://www.iana.org/assignments/character-sets/character-sets.xhtml +- All CCSIDs from the association file can be expressed as IBMCCSIDxxxxx where + xxxxx is the 5 digit CCSID; no null terminator is required. Alternate codes + are of the form ibm-xxx (null-terminated), where xxx is the integer CCSID with + leading zeroes stripped. +- If a IANA BIBenum is defined for a CCSID, the name iana-xxx can be used, + where xxx is the integer MIBenum without leading zeroes. +- In addition, some aliases are also taken from the association file. Examples + are: ASCII, EBCDIC, UTF8. +- Prototype of iconv_open() has const parameters. +- Character code names can be given in any code. + +Character set names to CCSID conversion. +- http://www.iana.org/assignments/character-sets/character-sets.xhtml provides + all IANA registered character set names and aliases associated with a + MIBenum, that is a unique character set identifier. +- A hand-maintained file ccsid_mibenum.xml associates IBM CCSIDs to + IANA MBenums. +- An OS/400 C program (in subdirectory bldcsndfa) generates a deterministic + finite automaton from the files mentioned above into a C file for all + possible character set name and associating each of them with its + corresponding CCSID. This program can only be run on OS/400 since it uses + the native iconv support for EBCDIC. +- Since these operations are tedious and the table generation needs bootstraping + with libxml2, the generated automaton is stored within sources and need not + be rebuilt at each compilation. However, source is provided here to allow + new table generation with conversion tables that were not available at the + time of original generation. diff --git a/os400/iconv/bldcsndfa/bldcsndfa.c b/os400/iconv/bldcsndfa/bldcsndfa.c new file mode 100644 index 0000000..48afd54 --- /dev/null +++ b/os400/iconv/bldcsndfa/bldcsndfa.c @@ -0,0 +1,1953 @@ +/** +*** Build a deterministic finite automaton to associate CCSIDs with +*** character set names. +*** +*** Compile on OS/400 with options SYSIFCOPT(*IFSIO). +*** +*** See Copyright for the status of this software. +*** +*** Author: Patrick Monnerat , DATASPHERE S.A. +**/ + +#include +#include +#include +#include +#include +#include + +#include + + +#ifdef OLDXML +#include "xml.h" +#else +#include +#include +#include +#include +#endif + + +#ifdef __OS400__ +#define iconv_open_error(cd) ((cd).return_value == -1) +#define set_iconv_open_error(cd) ((cd).return_value = -1) +#else +#define iconv_open_error(cd) ((cd) == (iconv_t) -1) +#define set_iconv_open_error(cd) ((cd) = (iconv_t) -1) +#endif + + +#define C_SOURCE_CCSID 500 +#define C_UTF8_CCSID 1208 + + +#define UTF8_SPACE 0x20 +#define UTF8_HT 0x09 +#define UTF8_0 0x30 +#define UTF8_9 0x39 +#define UTF8_A 0x41 +#define UTF8_Z 0x5A +#define UTF8_a 0x61 +#define UTF8_z 0x7A + + +#define GRANULE 128 /* Memory allocation granule. */ + +#define EPSILON 0x100 /* Token for empty transition. */ + + +#ifndef OFFSETOF +#define OFFSETOF(t, f) ((unsigned int) ((char *) &((t *) 0)->f - (char *) 0)) +#endif + +#ifndef OFFSETBY +#define OFFSETBY(t, p, o) ((t *) ((char *) (p) + (unsigned int) (o))) +#endif + + +typedef struct t_transition t_transition; /* NFA/DFA transition. */ +typedef struct t_state t_state; /* NFA/DFA state node. */ +typedef struct t_symlist t_symlist; /* Symbol (i.e.: name) list. */ +typedef struct t_chset t_chset; /* Character set. */ +typedef struct t_stategroup t_stategroup; /* Optimization group. */ +typedef unsigned char utf8char; /* UTF-8 character byte. */ +typedef unsigned char byte; /* Untyped data byte. */ + + +typedef struct { /* Set of pointers. */ + unsigned int p_size; /* Current allocated size. */ + unsigned int p_card; /* Current element count. */ + void * p_set[1]; /* Element array. */ +} t_powerset; + + +struct t_transition { + t_transition * t_forwprev; /* Head of forward transition list. */ + t_transition * t_forwnext; /* Tail of forward transition list. */ + t_transition * t_backprev; /* Head of backward transition list. */ + t_transition * t_backnext; /* Tail of backward transition list. */ + t_state * t_from; /* Incoming state. */ + t_state * t_to; /* Destination state. */ + unsigned short t_token; /* Transition token. */ + unsigned int t_index; /* Transition array index. */ +}; + + +struct t_state { + t_state * s_next; /* Next state (for DFA construction). */ + t_state * s_stack; /* Unprocessed DFA states stack. */ + t_transition * s_forward; /* Forward transitions. */ + t_transition * s_backward; /* Backward transitions. */ + t_chset * s_final; /* Recognized character set. */ + t_powerset * s_nfastates; /* Corresponding NFA states. */ + unsigned int s_index; /* State index. */ +}; + + +struct t_symlist { + t_symlist * l_next; /* Next name in list. */ + utf8char l_symbol[1]; /* Name bytes. */ +}; + + +struct t_chset { + t_chset * c_next; /* Next character set. */ + t_symlist * c_names; /* Character set name list. */ + iconv_t c_fromUTF8; /* Conversion from UTF-8. */ + unsigned int c_ccsid; /* IBM character set code. */ + unsigned int c_mibenum; /* IANA character code. */ +}; + + +struct t_stategroup { + t_stategroup * g_next; /* Next group. */ + t_state * g_member; /* Group member (s_stack) list. */ + unsigned int g_id; /* Group ident. */ +}; + + + +t_chset * chset_list; /* Character set list. */ +t_state * initial_state; /* Initial NFA state. */ +iconv_t job2utf8; /* Job CCSID to UTF-8 conversion. */ +iconv_t utf82job; /* UTF-8 to job CCSID conversion. */ +t_state * dfa_states; /* List of DFA states. */ +unsigned int groupid; /* Group ident counter. */ + + +/** +*** UTF-8 strings. +**/ + +#pragma convert(819) + +static const utf8char utf8_MIBenum[] = "MIBenum"; +static const utf8char utf8_mibenum[] = "mibenum"; +static const utf8char utf8_ibm_[] = "ibm-"; +static const utf8char utf8_IBMCCSID[] = "IBMCCSID"; +static const utf8char utf8_iana_[] = "iana-"; +static const utf8char utf8_Name[] = "Name"; +static const utf8char utf8_Pref_MIME_Name[] = "Preferred MIME Name"; +static const utf8char utf8_Aliases[] = "Aliases"; +static const utf8char utf8_html[] = "html"; +static const utf8char utf8_htmluri[] = "http://www.w3.org/1999/xhtml"; +static const utf8char utf8_A[] = "A"; +static const utf8char utf8_C[] = "C"; +static const utf8char utf8_M[] = "M"; +static const utf8char utf8_N[] = "N"; +static const utf8char utf8_P[] = "P"; +static const utf8char utf8_T[] = "T"; +static const utf8char utf8_ccsid[] = "ccsid"; +static const utf8char utf8_EBCDIC[] = "EBCDIC"; +static const utf8char utf8_ASCII[] = "ASCII"; +static const utf8char utf8_assocnodes[] = "/ccsid_mibenum/assoc[@ccsid]"; +static const utf8char utf8_aliastext[] = + "/ccsid_mibenum/assoc[@ccsid=$C]/alias/text()"; +#ifdef OLDXML +static const utf8char utf8_tablerows[] = + "//table[@id='table-character-sets-1']/*/tr"; +static const utf8char utf8_headerpos[] = + "count(th[text()=$T]/preceding-sibling::th)+1"; +static const utf8char utf8_getmibenum[] = "number(td[$M])"; +static const utf8char utf8_getprefname[] = "string(td[$P])"; +static const utf8char utf8_getname[] = "string(td[$N])"; +static const utf8char utf8_getaliases[] = "td[$A]/text()"; +#else +static const utf8char utf8_tablerows[] = + "//html:table[@id='table-character-sets-1']/*/html:tr"; +static const utf8char utf8_headerpos[] = + "count(html:th[text()=$T]/preceding-sibling::html:th)+1"; +static const utf8char utf8_getmibenum[] = "number(html:td[$M])"; +static const utf8char utf8_getprefname[] = "string(html:td[$P])"; +static const utf8char utf8_getname[] = "string(html:td[$N])"; +static const utf8char utf8_getaliases[] = "html:td[$A]/text()"; +#endif + +#pragma convert(0) + + +/** +*** UTF-8 character length table. +*** +*** Index is first character byte, value is the character byte count. +**/ + +static signed char utf8_chlen[] = { +/* 00-07 */ 1, 1, 1, 1, 1, 1, 1, 1, +/* 08-0F */ 1, 1, 1, 1, 1, 1, 1, 1, +/* 10-17 */ 1, 1, 1, 1, 1, 1, 1, 1, +/* 18-1F */ 1, 1, 1, 1, 1, 1, 1, 1, +/* 20-27 */ 1, 1, 1, 1, 1, 1, 1, 1, +/* 28-2F */ 1, 1, 1, 1, 1, 1, 1, 1, +/* 30-37 */ 1, 1, 1, 1, 1, 1, 1, 1, +/* 38-3F */ 1, 1, 1, 1, 1, 1, 1, 1, +/* 40-47 */ 1, 1, 1, 1, 1, 1, 1, 1, +/* 48-4F */ 1, 1, 1, 1, 1, 1, 1, 1, +/* 50-57 */ 1, 1, 1, 1, 1, 1, 1, 1, +/* 58-5F */ 1, 1, 1, 1, 1, 1, 1, 1, +/* 60-67 */ 1, 1, 1, 1, 1, 1, 1, 1, +/* 68-6F */ 1, 1, 1, 1, 1, 1, 1, 1, +/* 70-77 */ 1, 1, 1, 1, 1, 1, 1, 1, +/* 78-7F */ 1, 1, 1, 1, 1, 1, 1, 1, +/* 80-87 */ -1, -1, -1, -1, -1, -1, -1, -1, +/* 88-8F */ -1, -1, -1, -1, -1, -1, -1, -1, +/* 90-97 */ -1, -1, -1, -1, -1, -1, -1, -1, +/* 98-9F */ -1, -1, -1, -1, -1, -1, -1, -1, +/* A0-A7 */ -1, -1, -1, -1, -1, -1, -1, -1, +/* A8-AF */ -1, -1, -1, -1, -1, -1, -1, -1, +/* B0-B7 */ -1, -1, -1, -1, -1, -1, -1, -1, +/* B8-BF */ -1, -1, -1, -1, -1, -1, -1, -1, +/* C0-C7 */ 2, 2, 2, 2, 2, 2, 2, 2, +/* C8-CF */ 2, 2, 2, 2, 2, 2, 2, 2, +/* D0-D7 */ 2, 2, 2, 2, 2, 2, 2, 2, +/* D8-DF */ 2, 2, 2, 2, 2, 2, 2, 2, +/* E0-E7 */ 3, 3, 3, 3, 3, 3, 3, 3, +/* E8-EF */ 3, 3, 3, 3, 3, 3, 3, 3, +/* F0-F7 */ 4, 4, 4, 4, 4, 4, 4, 4, +/* F8-FF */ 5, 5, 5, 5, 6, 6, -1, -1 +}; + + + +void +chknull(void * p) + +{ + if (p) + return; + + fprintf(stderr, "Not enough memory\n"); + exit(1); +} + + +void +makecode(char * buf, unsigned int ccsid) + +{ + ccsid &= 0xFFFF; + memset(buf, 0, 32); + sprintf(buf, "IBMCCSID%05u0000000", ccsid); +} + + +iconv_t +iconv_open_ccsid(unsigned int ccsidout, + unsigned int ccsidin, unsigned int nullflag) + +{ + char fromcode[33]; + char tocode[33]; + + makecode(fromcode, ccsidin); + makecode(tocode, ccsidout); + memset(tocode + 13, 0, sizeof tocode - 13); + + if (nullflag) + fromcode[18] = '1'; + + return iconv_open(tocode, fromcode); +} + + +unsigned int +getnum(char * * cpp) + +{ + unsigned int n; + char * cp; + + cp = *cpp; + n = 0; + + while (isdigit(*cp)) + n = 10 * n + *cp++ - '0'; + + *cpp = cp; + return n; +} + + +const utf8char * +hashBinaryKey(const byte * bytes, unsigned int len) + +{ + const byte * bp; + utf8char * key; + utf8char * cp; + unsigned int n; + unsigned int n4; + unsigned int i; + + /** + *** Encode binary data in character form to be used as hash + *** table key. + **/ + + n = (4 * len + 2) / 3; + key = (utf8char *) malloc(n + 1); + chknull(key); + bp = bytes; + cp = key; + + for (n4 = n >> 2; n4; n4--) { + i = (bp[0] << 16) | (bp[1] << 8) | bp[2]; + *cp++ = 0x21 + ((i >> 18) & 0x3F); + *cp++ = 0x21 + ((i >> 12) & 0x3F); + *cp++ = 0x21 + ((i >> 6) & 0x3F); + *cp++ = 0x21 + (i & 0x3F); + bp += 3; + } + + switch (n & 0x3) { + + case 2: + *cp++ = 0x21 + ((*bp >> 2) & 0x3F); + *cp++ = 0x21 + ((*bp << 4) & 0x3F); + break; + + case 3: + i = (bp[0] << 8) | bp[1]; + *cp++ = 0x21 + ((i >> 10) & 0x3F); + *cp++ = 0x21 + ((i >> 4) & 0x3F); + *cp++ = 0x21 + ((i << 2) & 0x3F); + break; + } + + *cp = '\0'; + return key; +} + + +void * +hash_get(xmlHashTablePtr h, const void * binkey, unsigned int len) + +{ + const utf8char * key; + void * result; + + key = hashBinaryKey((const byte *) binkey, len); + result = xmlHashLookup(h, key); + free((char *) key); + return result; +} + + +int +hash_add(xmlHashTablePtr h, const void * binkey, unsigned int len, void * data) + +{ + const utf8char * key; + int result; + + key = hashBinaryKey((const byte *) binkey, len); + result = xmlHashAddEntry(h, key, data); + free((char *) key); + return result; +} + + +xmlDocPtr +loadXMLFile(const char * filename) + +{ + struct stat sbuf; + byte * databuf; + int fd; + int i; + xmlDocPtr doc; + + if (stat(filename, &sbuf)) + return (xmlDocPtr) NULL; + + databuf = malloc(sbuf.st_size + 4); + + if (!databuf) + return (xmlDocPtr) NULL; + + fd = open(filename, O_RDONLY +#ifdef O_BINARY + | O_BINARY +#endif + ); + + if (fd < 0) { + free((char *) databuf); + return (xmlDocPtr) NULL; + } + + i = read(fd, (char *) databuf, sbuf.st_size); + close(fd); + + if (i != sbuf.st_size) { + free((char *) databuf); + return (xmlDocPtr) NULL; + } + + databuf[i] = databuf[i + 1] = databuf[i + 2] = databuf[i + 3] = 0; + doc = xmlParseMemory((xmlChar *) databuf, i); + free((char *) databuf); + return doc; +} + + +int +match(char * * cpp, char * s) + +{ + char * cp; + int c1; + int c2; + + cp = *cpp; + + for (cp = *cpp; c2 = *s++; cp++) { + c1 = *cp; + + if (c1 != c2) { + if (isupper(c1)) + c1 = tolower(c1); + + if (isupper(c2)) + c2 = tolower(c2); + } + + if (c1 != c2) + return 0; + } + + c1 = *cp; + + while (c1 == ' ' || c1 == '\t') + c1 = *++cp; + + *cpp = cp; + return 1; +} + + +t_state * +newstate(void) + +{ + t_state * s; + + s = (t_state *) malloc(sizeof *s); + chknull(s); + memset((char *) s, 0, sizeof *s); + return s; +} + + +void +unlink_transition(t_transition * t) + +{ + if (t->t_backnext) + t->t_backnext->t_backprev = t->t_backprev; + + if (t->t_backprev) + t->t_backprev->t_backnext = t->t_backnext; + else if (t->t_to) + t->t_to->s_backward = t->t_backnext; + + if (t->t_forwnext) + t->t_forwnext->t_forwprev = t->t_forwprev; + + if (t->t_forwprev) + t->t_forwprev->t_forwnext = t->t_forwnext; + else if (t->t_from) + t->t_from->s_forward = t->t_forwnext; + + t->t_backprev = (t_transition *) NULL; + t->t_backnext = (t_transition *) NULL; + t->t_forwprev = (t_transition *) NULL; + t->t_forwnext = (t_transition *) NULL; + t->t_from = (t_state *) NULL; + t->t_to = (t_state *) NULL; +} + + +void +link_transition(t_transition * t, t_state * from, t_state * to) + +{ + if (!from) + from = t->t_from; + + if (!to) + to = t->t_to; + + unlink_transition(t); + + if ((t->t_from = from)) { + if ((t->t_forwnext = from->s_forward)) + t->t_forwnext->t_forwprev = t; + + from->s_forward = t; + } + + if ((t->t_to = to)) { + if ((t->t_backnext = to->s_backward)) + t->t_backnext->t_backprev = t; + + to->s_backward = t; + } +} + + +t_transition * +newtransition(unsigned int token, t_state * from, t_state * to) + +{ + t_transition * t; + + t = (t_transition *) malloc(sizeof *t); + chknull(t); + memset((char *) t, 0, sizeof *t); + t->t_token = token; + link_transition(t, from, to); + return t; +} + + +t_transition * +uniquetransition(unsigned int token, t_state * from, t_state * to) + +{ + t_transition * t; + + for (t = from->s_forward; t; t = t->t_forwnext) + if (t->t_token == token && (t->t_to == to || !to)) + return t; + + return to? newtransition(token, from, to): (t_transition *) NULL; +} + + +int +set_position(t_powerset * s, void * e) + +{ + unsigned int l; + unsigned int h; + unsigned int m; + int i; + + l = 0; + h = s->p_card; + + while (l < h) { + m = (l + h) >> 1; + + /** + *** If both pointers belong to different allocation arenas, + *** native comparison may find them neither + *** equal, nor greater, nor smaller. + *** We thus compare using memcmp() to get an orthogonal + *** result. + **/ + + i = memcmp(&e, s->p_set + m, sizeof e); + + if (i < 0) + h = m; + else if (!i) + return m; + else + l = m + 1; + } + + return l; +} + + +t_powerset * +set_include(t_powerset * s, void * e) + +{ + unsigned int pos; + unsigned int n; + + if (!s) { + s = (t_powerset *) malloc(sizeof *s + + GRANULE * sizeof s->p_set); + chknull(s); + s->p_size = GRANULE; + s->p_set[GRANULE] = (t_state *) NULL; + s->p_set[0] = e; + s->p_card = 1; + return s; + } + + pos = set_position(s, e); + + if (pos < s->p_card && s->p_set[pos] == e) + return s; + + if (s->p_card >= s->p_size) { + s->p_size += GRANULE; + s = (t_powerset *) realloc(s, + sizeof *s + s->p_size * sizeof s->p_set); + chknull(s); + s->p_set[s->p_size] = (t_state *) NULL; + } + + n = s->p_card - pos; + + if (n) + memmove((char *) (s->p_set + pos + 1), + (char *) (s->p_set + pos), n * sizeof s->p_set[0]); + + s->p_set[pos] = e; + s->p_card++; + return s; +} + + +t_state * +nfatransition(t_state * to, byte token) + +{ + t_state * from; + + from = newstate(); + newtransition(token, from, to); + return from; +} + + +static t_state * nfadevelop(t_state * from, t_state * final, iconv_t icc, + const utf8char * name, unsigned int len); + + +void +nfaslice(t_state * * from, t_state * * to, iconv_t icc, + const utf8char * chr, unsigned int chlen, + const utf8char * name, unsigned int len, t_state * final) + +{ + char * srcp; + char * dstp; + size_t srcc; + size_t dstc; + unsigned int cnt; + t_state * f; + t_state * t; + t_transition * tp; + byte bytebuf[8]; + + srcp = (char *) chr; + srcc = chlen; + dstp = (char *) bytebuf; + dstc = sizeof bytebuf; + iconv(icc, &srcp, &srcc, &dstp, &dstc); + dstp = (char *) bytebuf; + cnt = sizeof bytebuf - dstc; + t = *to; + f = *from; + + /** + *** Check for end of string. + **/ + + if (!len) + if (t && t != final) + uniquetransition(EPSILON, t, final); + else + t = final; + + if (f) + while (cnt) { + tp = uniquetransition(*dstp, f, (t_state *) NULL); + + if (!tp) + break; + + f = tp->t_to; + dstp++; + cnt--; + } + + if (!cnt) { + if (!t) + t = nfadevelop(f, final, icc, name, len); + + *to = t; + return; + } + + if (!t) { + t = nfadevelop((t_state *) NULL, final, icc, name, len); + *to = t; + } + + if (!f) + *from = f = newstate(); + + while (cnt > 1) + t = nfatransition(t, dstp[--cnt]); + + newtransition(*dstp, f, t); +} + + +t_state * +nfadevelop(t_state * from, t_state * final, iconv_t icc, + const utf8char * name, unsigned int len) + +{ + int chlen; + int i; + t_state * to; + int uccnt; + int lccnt; + utf8char chr; + + chlen = utf8_chlen[*name]; + + for (i = 1; i < chlen; i++) + if ((name[i] & 0xC0) != 0x80) + break; + + if (i != chlen) { + fprintf(stderr, + "Invalid UTF8 character in character set name\n"); + return (t_state *) NULL; + } + + to = (t_state *) NULL; + nfaslice(&from, &to, + icc, name, chlen, name + chlen, len - chlen, final); + + if (*name >= UTF8_a && *name <= UTF8_z) + chr = *name - UTF8_a + UTF8_A; + else if (*name >= UTF8_A && *name <= UTF8_Z) + chr = *name - UTF8_A + UTF8_a; + else + return from; + + nfaslice(&from, &to, icc, &chr, 1, name + chlen, len - chlen, final); + return from; +} + + + +void +nfaenter(const utf8char * name, int len, t_chset * charset) + +{ + t_chset * s; + t_state * final; + t_state * sp; + t_symlist * lp; + + /** + *** Enter case-insensitive `name' in NFA in all known + *** character codes. + *** Redundant shift state changes as well as shift state + *** differences between uppercase and lowercase are + *** not handled. + **/ + + if (len < 0) + len = strlen(name) + 1; + + for (lp = charset->c_names; lp; lp = lp->l_next) + if (!memcmp(name, lp->l_symbol, len)) + return; /* Already entered. */ + + lp = (t_symlist *) malloc(sizeof *lp + len); + chknull(lp); + memcpy(lp->l_symbol, name, len); + lp->l_symbol[len] = '\0'; + lp->l_next = charset->c_names; + charset->c_names = lp; + final = newstate(); + final->s_final = charset; + + for (s = chset_list; s; s = s->c_next) + if (!iconv_open_error(s->c_fromUTF8)) + sp = nfadevelop(initial_state, final, + s->c_fromUTF8, name, len); +} + + +unsigned int +utf8_utostr(utf8char * s, unsigned int v) + +{ + unsigned int d; + unsigned int i; + + d = v / 10; + v -= d * 10; + i = d? utf8_utostr(s, d): 0; + s[i++] = v + UTF8_0; + s[i] = '\0'; + return i; +} + + +unsigned int +utf8_utostrpad(utf8char * s, unsigned int v, int digits) + +{ + unsigned int i = utf8_utostr(s, v); + utf8char pad = UTF8_SPACE; + + if (digits < 0) { + pad = UTF8_0; + digits = -digits; + } + + if (i >= digits) + return i; + + memmove(s + digits - i, s, i + 1); + memset(s, pad, digits - i); + return digits; +} + + +unsigned int +utf8_strtou(const utf8char * s) + +{ + unsigned int v; + + while (*s == UTF8_SPACE || *s == UTF8_HT) + s++; + + for (v = 0; *s >= UTF8_0 && *s <= UTF8_9;) + v = 10 * v + *s++ - UTF8_0; + + return v; +} + + +unsigned int +getNumAttr(xmlNodePtr node, const xmlChar * name) + +{ + const xmlChar * s; + unsigned int val; + + s = xmlGetProp(node, name); + + if (!s) + return 0; + + val = utf8_strtou(s); + xmlFree((xmlChar *) s); + return val; +} + + +void +read_assocs(const char * filename) + +{ + xmlDocPtr doc; + xmlXPathContextPtr ctxt; + xmlXPathObjectPtr obj; + xmlNodePtr node; + t_chset * sp; + int i; + unsigned int ccsid; + unsigned int mibenum; + utf8char symbuf[32]; + + doc = loadXMLFile(filename); + + if (!doc) { + fprintf(stderr, "Cannot load file %s\n", filename); + exit(1); + } + + ctxt = xmlXPathNewContext(doc); + obj = xmlXPathEval(utf8_assocnodes, ctxt); + + if (!obj || obj->type != XPATH_NODESET || !obj->nodesetval || + !obj->nodesetval->nodeTab || !obj->nodesetval->nodeNr) { + fprintf(stderr, "No association found in %s\n", filename); + exit(1); + } + + for (i = 0; i < obj->nodesetval->nodeNr; i++) { + node = obj->nodesetval->nodeTab[i]; + ccsid = getNumAttr(node, utf8_ccsid); + mibenum = getNumAttr(node, utf8_mibenum); + + /** + *** Check for duplicate. + **/ + + for (sp = chset_list; sp; sp = sp->c_next) + if (ccsid && ccsid == sp->c_ccsid || + mibenum && mibenum == sp->c_mibenum) { + fprintf(stderr, "Duplicate character set: "); + fprintf(stderr, "CCSID = %u/%u, ", + ccsid, sp->c_ccsid); + fprintf(stderr, "MIBenum = %u/%u\n", + mibenum, sp->c_mibenum); + break; + } + + if (sp) + continue; + + /** + *** Allocate the new character set. + **/ + + sp = (t_chset *) malloc(sizeof *sp); + chknull(sp); + memset(sp, 0, sizeof *sp); + + if (!ccsid) /* Do not attempt with current job CCSID. */ + set_iconv_open_error(sp->c_fromUTF8); + else { + sp->c_fromUTF8 = + iconv_open_ccsid(ccsid, C_UTF8_CCSID, 0); + + if (iconv_open_error(sp->c_fromUTF8) == -1) + fprintf(stderr, + "Cannot convert into CCSID %u: ignored\n", + ccsid); + } + + sp->c_ccsid = ccsid; + sp->c_mibenum = mibenum; + sp->c_next = chset_list; + chset_list = sp; + } + + xmlXPathFreeObject(obj); + + /** + *** Enter aliases. + **/ + + for (sp = chset_list; sp; sp = sp->c_next) { + strcpy(symbuf, utf8_ibm_); + utf8_utostr(symbuf + 4, sp->c_ccsid); + nfaenter(symbuf, -1, sp); + strcpy(symbuf, utf8_IBMCCSID); + utf8_utostrpad(symbuf + 8, sp->c_ccsid, -5); + nfaenter(symbuf, 13, sp); /* Not null-terminated. */ + + if (sp->c_mibenum) { + strcpy(symbuf, utf8_iana_); + utf8_utostr(symbuf + 5, sp->c_mibenum); + nfaenter(symbuf, -1, sp); + } + + xmlXPathRegisterVariable(ctxt, utf8_C, + xmlXPathNewFloat((double) sp->c_ccsid)); + obj = xmlXPathEval(utf8_aliastext, ctxt); + + if (!obj || obj->type != XPATH_NODESET) { + fprintf(stderr, "getAlias failed in %s\n", filename); + exit(1); + } + + if (obj->nodesetval && + obj->nodesetval->nodeTab && obj->nodesetval->nodeNr) { + for (i = 0; i < obj->nodesetval->nodeNr; i++) { + node = obj->nodesetval->nodeTab[i]; + nfaenter(node->content, -1, sp); + } + } + + xmlXPathFreeObject(obj); + } + + xmlXPathFreeContext(ctxt); + xmlFreeDoc(doc); +} + + +unsigned int +columnPosition(xmlXPathContextPtr ctxt, const xmlChar * header) + +{ + xmlXPathObjectPtr obj; + unsigned int res = 0; + + xmlXPathRegisterVariable(ctxt, utf8_T, xmlXPathNewString(header)); + obj = xmlXPathEval(utf8_headerpos, ctxt); + + if (obj) { + if (obj->type == XPATH_NUMBER) + res = (unsigned int) obj->floatval; + + xmlXPathFreeObject(obj); + } + + return res; +} + + +void +read_iana(const char * filename) + +{ + xmlDocPtr doc; + xmlXPathContextPtr ctxt; + xmlXPathObjectPtr obj1; + xmlXPathObjectPtr obj2; + xmlNodePtr node; + int prefnamecol; + int namecol; + int mibenumcol; + int aliascol; + int mibenum; + t_chset * sp; + int n; + int i; + + doc = loadXMLFile(filename); + + if (!doc) { + fprintf(stderr, "Cannot load file %s\n", filename); + exit(1); + } + + ctxt = xmlXPathNewContext(doc); + +#ifndef OLDXML + xmlXPathRegisterNs(ctxt, utf8_html, utf8_htmluri); +#endif + + obj1 = xmlXPathEval(utf8_tablerows, ctxt); + + if (!obj1 || obj1->type != XPATH_NODESET || !obj1->nodesetval || + !obj1->nodesetval->nodeTab || obj1->nodesetval->nodeNr <= 1) { + fprintf(stderr, "No data in %s\n", filename); + exit(1); + } + + /** + *** Identify columns. + **/ + + xmlXPathSetContextNode(obj1->nodesetval->nodeTab[0], ctxt); + prefnamecol = columnPosition(ctxt, utf8_Pref_MIME_Name); + namecol = columnPosition(ctxt, utf8_Name); + mibenumcol = columnPosition(ctxt, utf8_MIBenum); + aliascol = columnPosition(ctxt, utf8_Aliases); + + if (!prefnamecol || !namecol || !mibenumcol || !aliascol) { + fprintf(stderr, "Key column(s) missing in %s\n", filename); + exit(1); + } + + xmlXPathRegisterVariable(ctxt, utf8_P, + xmlXPathNewFloat((double) prefnamecol)); + xmlXPathRegisterVariable(ctxt, utf8_N, + xmlXPathNewFloat((double) namecol)); + xmlXPathRegisterVariable(ctxt, utf8_M, + xmlXPathNewFloat((double) mibenumcol)); + xmlXPathRegisterVariable(ctxt, utf8_A, + xmlXPathNewFloat((double) aliascol)); + + /** + *** Process each row. + **/ + + for (n = 1; n < obj1->nodesetval->nodeNr; n++) { + xmlXPathSetContextNode(obj1->nodesetval->nodeTab[n], ctxt); + + /** + *** Get the MIBenum from current row. + */ + + obj2 = xmlXPathEval(utf8_getmibenum, ctxt); + + if (!obj2 || obj2->type != XPATH_NUMBER) { + fprintf(stderr, "get MIBenum failed at row %u\n", n); + exit(1); + } + + if (xmlXPathIsNaN(obj2->floatval) || + obj2->floatval < 1.0 || obj2->floatval > 65535.0 || + ((unsigned int) obj2->floatval) != obj2->floatval) { + fprintf(stderr, "invalid MIBenum at row %u\n", n); + xmlXPathFreeObject(obj2); + continue; + } + + mibenum = obj2->floatval; + xmlXPathFreeObject(obj2); + + /** + *** Search the associations for a corresponding CCSID. + **/ + + for (sp = chset_list; sp; sp = sp->c_next) + if (sp->c_mibenum == mibenum) + break; + + if (!sp) + continue; /* No CCSID for this MIBenum. */ + + /** + *** Process preferred MIME name. + **/ + + obj2 = xmlXPathEval(utf8_getprefname, ctxt); + + if (!obj2 || obj2->type != XPATH_STRING) { + fprintf(stderr, + "get Preferred_MIME_Name failed at row %u\n", n); + exit(1); + } + + if (obj2->stringval && obj2->stringval[0]) + nfaenter(obj2->stringval, -1, sp); + + xmlXPathFreeObject(obj2); + + /** + *** Process name. + **/ + + obj2 = xmlXPathEval(utf8_getname, ctxt); + + if (!obj2 || obj2->type != XPATH_STRING) { + fprintf(stderr, "get name failed at row %u\n", n); + exit(1); + } + + if (obj2->stringval && obj2->stringval[0]) + nfaenter(obj2->stringval, -1, sp); + + xmlXPathFreeObject(obj2); + + /** + *** Process aliases. + **/ + + obj2 = xmlXPathEval(utf8_getaliases, ctxt); + + if (!obj2 || obj2->type != XPATH_NODESET) { + fprintf(stderr, "get aliases failed at row %u\n", n); + exit(1); + } + + if (obj2->nodesetval && obj2->nodesetval->nodeTab) + for (i = 0; i < obj2->nodesetval->nodeNr; i++) { + node = obj2->nodesetval->nodeTab[i]; + + if (node && node->content && node->content[0]) + nfaenter(node->content, -1, sp); + } + + xmlXPathFreeObject(obj2); + } + + xmlXPathFreeObject(obj1); + xmlXPathFreeContext(ctxt); + xmlFreeDoc(doc); +} + + +t_powerset * closureset(t_powerset * dst, t_powerset * src); + + +t_powerset * +closure(t_powerset * dst, t_state * src) + +{ + t_transition * t; + unsigned int oldcard; + + if (src->s_nfastates) { + /** + *** Is a DFA state: return closure of set of equivalent + *** NFA states. + **/ + + return closureset(dst, src->s_nfastates); + } + + /** + *** Compute closure of NFA state. + **/ + + dst = set_include(dst, src); + + for (t = src->s_forward; t; t = t->t_forwnext) + if (t->t_token == EPSILON) { + oldcard = dst->p_card; + dst = set_include(dst, t->t_to); + + if (oldcard != dst->p_card) + dst = closure(dst, t->t_to); + } + + return dst; +} + + +t_powerset * +closureset(t_powerset * dst, t_powerset * src) + +{ + unsigned int i; + + for (i = 0; i < src->p_card; i++) + dst = closure(dst, (t_state *) src->p_set[i]); + + return dst; +} + + +t_state * +get_dfa_state(t_state * * stack, + t_powerset * nfastates, xmlHashTablePtr sethash) + +{ + t_state * s; + + if (s = hash_get(sethash, nfastates->p_set, + nfastates->p_card * sizeof nfastates->p_set[0])) { + /** + *** DFA state already present. + *** Release the NFA state set and return + *** the address of the old DFA state. + **/ + + free((char *) nfastates); + return s; + } + + /** + *** Build the new state. + **/ + + s = newstate(); + s->s_nfastates = nfastates; + s->s_next = dfa_states; + dfa_states = s; + s->s_stack = *stack; + *stack = s; + + /** + *** Enter it in hash. + **/ + + if (hash_add(sethash, nfastates->p_set, + nfastates->p_card * sizeof nfastates->p_set[0], s)) + chknull(NULL); /* Memory allocation error. */ + + return s; +} + + +int +transcmp(const void * p1, const void * p2) + +{ + t_transition * t1; + t_transition * t2; + + t1 = *(t_transition * *) p1; + t2 = *(t_transition * *) p2; + return ((int) t1->t_token) - ((int) t2->t_token); +} + + +void +builddfa(void) + +{ + t_powerset * transset; + t_powerset * stateset; + t_state * s; + t_state * s2; + unsigned int n; + unsigned int i; + unsigned int token; + t_transition * t; + t_state * stack; + xmlHashTablePtr sethash; + unsigned int nst; + + transset = set_include(NULL, NULL); + chknull(transset); + stateset = set_include(NULL, NULL); + chknull(stateset); + sethash = xmlHashCreate(1); + chknull(sethash); + dfa_states = (t_state *) NULL; + stack = (t_state *) NULL; + nst = 0; + + /** + *** Build the DFA initial state. + **/ + + get_dfa_state(&stack, closure(NULL, initial_state), sethash); + + /** + *** Build the other DFA states by looking at each + *** possible transition from stacked DFA states. + **/ + + do { + if (!(++nst % 100)) + fprintf(stderr, "%u DFA states\n", nst); + + s = stack; + stack = s->s_stack; + s->s_stack = (t_state *) NULL; + + /** + *** Build a set of all non-epsilon transitions from this + *** state. + **/ + + transset->p_card = 0; + + for (n = 0; n < s->s_nfastates->p_card; n++) { + s2 = s->s_nfastates->p_set[n]; + + for (t = s2->s_forward; t; t = t->t_forwnext) + if (t->t_token != EPSILON) { + transset = set_include(transset, t); + chknull(transset); + } + } + + /** + *** Sort transitions by token. + **/ + + qsort(transset->p_set, transset->p_card, + sizeof transset->p_set[0], transcmp); + + /** + *** Process all transitions, grouping them by token. + **/ + + stateset->p_card = 0; + token = EPSILON; + + for (i = 0; i < transset->p_card; i++) { + t = transset->p_set[i]; + + if (token != t->t_token) { + if (stateset->p_card) { + /** + *** Get the equivalent DFA state + *** and create transition. + **/ + + newtransition(token, s, + get_dfa_state(&stack, + closureset(NULL, stateset), + sethash)); + stateset->p_card = 0; + } + + token = t->t_token; + } + + stateset = set_include(stateset, t->t_to); + } + + if (stateset->p_card) + newtransition(token, s, get_dfa_state(&stack, + closureset(NULL, stateset), sethash)); + } while (stack); + + free((char *) transset); + free((char *) stateset); + xmlHashFree(sethash, NULL); + + /** + *** Reverse the state list to get the initial state first, + *** check for ambiguous prefixes, determine final states, + *** destroy NFA state sets. + **/ + + while (s = dfa_states) { + dfa_states = s->s_next; + s->s_next = stack; + stack = s; + stateset = s->s_nfastates; + s->s_nfastates = (t_powerset *) NULL; + + for (n = 0; n < stateset->p_card; n++) { + s2 = (t_state *) stateset->p_set[n]; + + if (s2->s_final) { + if (s->s_final && s->s_final != s2->s_final) + fprintf(stderr, + "Ambiguous name for CCSIDs %u/%u\n", + s->s_final->c_ccsid, + s2->s_final->c_ccsid); + + s->s_final = s2->s_final; + } + } + + free((char *) stateset); + } + + dfa_states = stack; +} + + +void +deletenfa(void) + +{ + t_transition * t; + t_state * s; + t_state * u; + t_state * stack; + + stack = initial_state; + stack->s_stack = (t_state *) NULL; + + while ((s = stack)) { + stack = s->s_stack; + + while ((t = s->s_forward)) { + u = t->t_to; + unlink_transition(t); + free((char *) t); + + if (!u->s_backward) { + u->s_stack = stack; + stack = u; + } + } + + free((char *) s); + } +} + + +t_stategroup * +newgroup(void) + +{ + t_stategroup * g; + + g = (t_stategroup *) malloc(sizeof *g); + chknull(g); + memset((char *) g, 0, sizeof *g); + g->g_id = groupid++; + return g; +} + + +void +optimizedfa(void) + +{ + unsigned int i; + xmlHashTablePtr h; + t_state * s1; + t_state * s2; + t_state * finstates; + t_state * * sp; + t_stategroup * g1; + t_stategroup * g2; + t_stategroup * ghead; + t_transition * t1; + t_transition * t2; + unsigned int done; + unsigned int startgroup; + unsigned int gtrans[1 << (8 * sizeof(unsigned char))]; + + /** + *** Reduce DFA state count. + **/ + + groupid = 0; + ghead = (t_stategroup *) NULL; + + /** + *** First split: non-final and each distinct final states. + **/ + + h = xmlHashCreate(4); + chknull(h); + + for (s1 = dfa_states; s1; s1 = s1->s_next) { + if (!(g1 = hash_get(h, &s1->s_final, sizeof s1->s_final))) { + g1 = newgroup(); + g1->g_next = ghead; + ghead = g1; + + if (hash_add(h, &s1->s_final, sizeof s1->s_final, g1)) + chknull(NULL); /* Memory allocation error. */ + } + + s1->s_index = g1->g_id; + s1->s_stack = g1->g_member; + g1->g_member = s1; + } + + xmlHashFree(h, NULL); + + /** + *** Subsequent splits: states that have the same forward + *** transition tokens to states in the same group. + **/ + + do { + done = 1; + + for (g2 = ghead; g2; g2 = g2->g_next) { + s1 = g2->g_member; + + if (!s1->s_stack) + continue; + + h = xmlHashCreate(1); + chknull(h); + + /** + *** Build the group transition map. + **/ + + memset((char *) gtrans, ~0, sizeof gtrans); + + for (t1 = s1->s_forward; t1; t1 = t1->t_forwnext) + gtrans[t1->t_token] = t1->t_to->s_index; + + if (hash_add(h, gtrans, sizeof gtrans, g2)) + chknull(NULL); + + /** + *** Process other states in group. + **/ + + sp = &s1->s_stack; + s1 = *sp; + + do { + *sp = s1->s_stack; + + /** + *** Build the transition map. + **/ + + memset((char *) gtrans, ~0, sizeof gtrans); + + for (t1 = s1->s_forward; + t1; t1 = t1->t_forwnext) + gtrans[t1->t_token] = t1->t_to->s_index; + + g1 = hash_get(h, gtrans, sizeof gtrans); + + if (g1 == g2) { + *sp = s1; + sp = &s1->s_stack; + } + else { + if (!g1) { + g1 = newgroup(); + g1->g_next = ghead; + ghead = g1; + + if (hash_add(h, gtrans, + sizeof gtrans, g1)) + chknull(NULL); + } + + s1->s_index = g1->g_id; + s1->s_stack = g1->g_member; + g1->g_member = s1; + done = 0; + } + } while (s1 = *sp); + + xmlHashFree(h, NULL); + } + } while (!done); + + /** + *** Establish group leaders and remap transitions. + **/ + + startgroup = dfa_states->s_index; + + for (g1 = ghead; g1; g1 = g1->g_next) + for (s1 = g1->g_member->s_stack; s1; s1 = s1->s_stack) + for (t1 = s1->s_backward; t1; t1 = t2) { + t2 = t1->t_backnext; + link_transition(t1, NULL, g1->g_member); + } + + /** + *** Remove redundant states and transitions. + **/ + + for (g1 = ghead; g1; g1 = g1->g_next) { + g1->g_member->s_next = (t_state *) NULL; + + while ((s1 = g1->g_member->s_stack)) { + g1->g_member->s_stack = s1->s_stack; + + for (t1 = s1->s_forward; t1; t1 = t2) { + t2 = t1->t_forwnext; + unlink_transition(t1); + free((char *) t1); + } + + free((char *) s1); + } + } + + /** + *** Remove group support and relink DFA states. + **/ + + dfa_states = (t_state *) NULL; + s2 = (t_state *) NULL; + finstates = (t_state *) NULL; + + while (g1 = ghead) { + ghead = g1->g_next; + s1 = g1->g_member; + + if (g1->g_id == startgroup) + dfa_states = s1; /* Keep start state first. */ + else if (s1->s_final) { /* Then final states. */ + s1->s_next = finstates; + finstates = s1; + } + else { /* Finish with non-final states. */ + s1->s_next = s2; + s2 = s1; + } + + free((char *) g1); + } + + for (dfa_states->s_next = finstates; finstates->s_next;) + finstates = finstates->s_next; + + finstates->s_next = s2; +} + + +const char * +inttype(unsigned long max) + +{ + int i; + + for (i = 0; max; i++) + max >>= 1; + + if (i > 8 * sizeof(unsigned int)) + return "unsigned long"; + + if (i > 8 * sizeof(unsigned short)) + return "unsigned int"; + + if (i > 8 * sizeof(unsigned char)) + return "unsigned short"; + + return "unsigned char"; +} + + +listids(FILE * fp) + +{ + unsigned int pos; + t_chset * cp; + t_symlist * lp; + char * srcp; + char * dstp; + size_t srcc; + size_t dstc; + char buf[80]; + + fprintf(fp, "/**\n*** CCSID For arg Recognized name.\n"); + pos = 0; + + for (cp = chset_list; cp; cp = cp->c_next) { + if (pos) { + fprintf(fp, "\n"); + pos = 0; + } + + if (!cp->c_names) + continue; + + pos = fprintf(fp, "*** %5u %c ", cp->c_ccsid, + iconv_open_error(cp->c_fromUTF8)? ' ': 'X'); + + for (lp = cp->c_names; lp; lp = lp->l_next) { + srcp = (char *) lp->l_symbol; + srcc = strlen(srcp); + dstp = buf; + dstc = sizeof buf; + iconv(utf82job, &srcp, &srcc, &dstp, &dstc); + srcc = dstp - buf; + + if (pos + srcc > 79) { + fprintf(fp, "\n***%22c", ' '); + pos = 25; + } + + pos += fprintf(fp, " %.*s", srcc, buf); + } + } + + if (pos) + fprintf(fp, "\n"); + + fprintf(fp, "**/\n\n"); +} + + +void +generate(FILE * fp) + +{ + unsigned int nstates; + unsigned int ntrans; + unsigned int maxfinal; + t_state * s; + t_transition * t; + unsigned int i; + unsigned int pos; + char * ns; + + /** + *** Assign indexes to states and transitions. + **/ + + nstates = 0; + ntrans = 0; + maxfinal = 0; + + for (s = dfa_states; s; s = s->s_next) { + s->s_index = nstates++; + + if (s->s_final) + maxfinal = nstates; + + for (t = s->s_forward; t; t = t->t_forwnext) + t->t_index = ntrans++; + } + + fprintf(fp, + "/**\n*** %u states, %u finals, %u transitions.\n**/\n\n", + nstates, maxfinal, ntrans); + fprintf(stderr, "%u states, %u finals, %u transitions.\n", + nstates, maxfinal, ntrans); + + /** + *** Generate types. + **/ + + fprintf(fp, "typedef unsigned short t_ccsid;\n"); + fprintf(fp, "typedef %-23s t_staterange;\n", inttype(nstates)); + fprintf(fp, "typedef %-23s t_transrange;\n\n", inttype(ntrans)); + + /** + *** Generate first transition index for each state. + **/ + + fprintf(fp, "static t_transrange trans_array[] = {\n"); + pos = 0; + ntrans = 0; + + for (s = dfa_states; s; s = s->s_next) { + pos += fprintf(fp, " %u,", ntrans); + + if (pos > 72) { + fprintf(fp, "\n"); + pos = 0; + } + + for (t = s->s_forward; t; t = t->t_forwnext) + ntrans++; + } + + fprintf(fp, " %u\n};\n\n", ntrans); + + /** + *** Generate final state info. + **/ + + fprintf(fp, "static t_ccsid final_array[] = {\n"); + pos = 0; + ns =""; + i = 0; + + for (s = dfa_states; s && i++ < maxfinal; s = s->s_next) { + pos += fprintf(fp, "%s", ns); + ns = ","; + + if (pos > 72) { + fprintf(fp, "\n"); + pos = 0; + } + + pos += fprintf(fp, " %u", + s->s_final? s->s_final->c_ccsid + 1: 0); + } + + fprintf(fp, "\n};\n\n"); + + /** + *** Generate goto table. + **/ + + fprintf(fp, "static t_staterange goto_array[] = {\n"); + pos = 0; + + for (s = dfa_states; s; s = s->s_next) + for (t = s->s_forward; t; t = t->t_forwnext) { + pos += fprintf(fp, " %u,", t->t_to->s_index); + + if (pos > 72) { + fprintf(fp, "\n"); + pos = 0; + } + } + + fprintf(fp, " %u\n};\n\n", nstates); + + /** + *** Generate transition label table. + **/ + + fprintf(fp, "static unsigned char label_array[] = {\n"); + pos = 0; + ns =""; + + for (s = dfa_states; s; s = s->s_next) + for (t = s->s_forward; t; t = t->t_forwnext) { + pos += fprintf(fp, "%s", ns); + ns = ","; + + if (pos > 72) { + fprintf(fp, "\n"); + pos = 0; + } + + pos += fprintf(fp, " 0x%02X", t->t_token); + } + + fprintf(fp, "\n};\n", nstates); +} + + +main(argc, argv) +int argc; +char * * argv; + +{ + FILE * fp; + t_chset * csp; + char symbuf[20]; + + chset_list = (t_chset *) NULL; + initial_state = newstate(); + job2utf8 = iconv_open_ccsid(C_UTF8_CCSID, C_SOURCE_CCSID, 0); + utf82job = iconv_open_ccsid(C_SOURCE_CCSID, C_UTF8_CCSID, 0); + + if (argc != 4) { + fprintf(stderr, "Usage: %s ", *argv); + fprintf(stderr, " \n"); + exit(1); + } + + /** + *** Read CCSID/MIBenum associations. Define special names. + **/ + + read_assocs(argv[1]); + + /** + *** Read character set names and establish the case-independent + *** name DFA in all possible CCSIDs. + **/ + + read_iana(argv[2]); + + /** + *** Build DFA from NFA. + **/ + + builddfa(); + + /** + *** Delete NFA. + **/ + + deletenfa(); + + /** + *** Minimize the DFA state count. + **/ + + optimizedfa(); + + /** + *** Generate the table. + **/ + + fp = fopen(argv[3], "w+"); + + if (!fp) { + perror(argv[3]); + exit(1); + } + + fprintf(fp, "/**\n"); + fprintf(fp, "*** Character set names table.\n"); + fprintf(fp, "*** Generated by program BLDCSNDFA from"); + fprintf(fp, " IANA character set assignment file\n"); + fprintf(fp, "*** and CCSID/MIBenum equivalence file.\n"); + fprintf(fp, "*** *** Do not edit by hand ***\n"); + fprintf(fp, "**/\n\n"); + listids(fp); + generate(fp); + + if (ferror(fp)) { + perror(argv[3]); + fclose(fp); + exit(1); + } + + fclose(fp); + iconv_close(job2utf8); + iconv_close(utf82job); + exit(0); +} diff --git a/os400/iconv/bldcsndfa/ccsid_mibenum.dtd b/os400/iconv/bldcsndfa/ccsid_mibenum.dtd new file mode 100644 index 0000000..0c834ec --- /dev/null +++ b/os400/iconv/bldcsndfa/ccsid_mibenum.dtd @@ -0,0 +1,15 @@ + + + + + + diff --git a/os400/iconv/bldcsndfa/ccsid_mibenum.xml b/os400/iconv/bldcsndfa/ccsid_mibenum.xml new file mode 100644 index 0000000..8af38b4 --- /dev/null +++ b/os400/iconv/bldcsndfa/ccsid_mibenum.xml @@ -0,0 +1,270 @@ + + + + + + + EBCDIC + + + + + + + + + + + + + + ASCII + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + EUC-TH> + eucTH + csEUCTH + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + UTF16-BE + UTF16BE + UTF-16-BE + + + UTF16-LE + UTF16LE + UTF-16-LE + + + UTF8 + + + UTF32-BE + UTF32BE + UTF-32-BE + + + UTF32-LE + UTF32LE + UTF-32-LE + + + + + + + + + + + + + + + + + + korean + + + + + + + + EUC-CN + + + + + + + + + + + + + + + + + + + + + + + + + + + + + chinese + + + + + + + + + + + + + UCS-2 + UCS2 + + + + + + + + + + + + + diff --git a/os400/iconv/bldcsndfa/character-sets.xhtml b/os400/iconv/bldcsndfa/character-sets.xhtml new file mode 100644 index 0000000..e1d5a3b --- /dev/null +++ b/os400/iconv/bldcsndfa/character-sets.xhtml @@ -0,0 +1,3077 @@ + + + + + + + + Character Sets + + +

    Character Sets

    +
    +
    Last Updated
    +
    2013-01-23
    +
    Registration Procedure(s)
    +
    +
    Expert Review
    +
    +
    Expert(s)
    +
    +
    Primary Expert Ned Freed and Secondary Expert Martin Dürst
    +
    +
    Reference
    +
    [RFC2978]
    +
    Note
    +
    +
    These are the official names for character sets that may be used in
    +the Internet and may be referred to in Internet documentation.  These
    +names are expressed in ANSI_X3.4-1968 which is commonly called
    +US-ASCII or simply ASCII.  The character set most commonly use in the
    +Internet and used especially in protocol standards is US-ASCII, this
    +is strongly encouraged.  The use of the name US-ASCII is also
    +encouraged.
    +
    +The character set names may be up to 40 characters taken from the
    +printable characters of US-ASCII.  However, no distinction is made
    +between use of upper and lower case letters.
    +
    +The MIBenum value is a unique value for use in MIBs to identify coded
    +character sets.
    +
    +The value space for MIBenum values has been divided into three
    +regions. The first region (3-999) consists of coded character sets
    +that have been standardized by some standard setting organization.
    +This region is intended for standards that do not have subset
    +implementations. The second region (1000-1999) is for the Unicode and
    +ISO/IEC 10646 coded character sets together with a specification of a
    +(set of) sub-repertoires that may occur.  The third region (>1999) is
    +intended for vendor specific coded character sets.
    +
    +        Assigned MIB enum Numbers
    +        -------------------------
    +        0-2             Reserved
    +        3-999           Set By Standards Organizations
    +        1000-1999       Unicode / 10646
    +        2000-2999       Vendor
    +
    +The aliases that start with "cs" have been added for use with the
    +IANA-CHARSET-MIB as originally defined in [RFC3808], and as currently
    +maintained by IANA at [IANA registry ianacharset-mib].
    +Note that the ianacharset-mib needs to be kept in sync with this
    +registry.  These aliases that start with "cs" contain the standard
    +numbers along with suggestive names in order to facilitate applications
    +that want to display the names in user interfaces.  The "cs" stands
    +for character set and is provided for applications that need a lower
    +case first letter but want to use mixed case thereafter that cannot
    +contain any special characters, such as underbar ("_") and dash ("-").
    +
    +If the character set is from an ISO standard, its cs alias is the ISO
    +standard number or name.  If the character set is not from an ISO
    +standard, but is registered with ISO (IPSJ/ITSCJ is the current ISO
    +Registration Authority), the ISO Registry number is specified as
    +ISOnnn followed by letters suggestive of the name or standards number
    +of the code set.  When a national or international standard is
    +revised, the year of revision is added to the cs alias of the new
    +character set entry in the IANA Registry in order to distinguish the
    +revised character set from the original character set.
    +
    +
    Alternative Formats
    +
    +
    Plain text
    +
    +
    +
    +
    Alternative Formats
    +
    +
    CSV
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Preferred MIME NameNameMIBenumSourceReferenceAliasesNote
    US-ASCIIUS-ASCII3ANSI X3.4-1986[RFC2046]iso-ir-6
    ANSI_X3.4-1968
    ANSI_X3.4-1986
    ISO_646.irv:1991
    ISO646-US
    US-ASCII
    us
    IBM367
    cp367
    csASCII
    ISO-8859-1ISO_8859-1:19874 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-100
    ISO_8859-1
    ISO-8859-1
    latin1
    l1
    IBM819
    CP819
    csISOLatin1
    ISO-8859-2ISO_8859-2:19875 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-101
    ISO_8859-2
    ISO-8859-2
    latin2
    l2
    csISOLatin2
    ISO-8859-3ISO_8859-3:19886 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-109
    ISO_8859-3
    ISO-8859-3
    latin3
    l3
    csISOLatin3
    ISO-8859-4ISO_8859-4:19887 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-110
    ISO_8859-4
    ISO-8859-4
    latin4
    l4
    csISOLatin4
    ISO-8859-5ISO_8859-5:19888 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-144
    ISO_8859-5
    ISO-8859-5
    cyrillic
    csISOLatinCyrillic
    ISO-8859-6ISO_8859-6:19879 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-127
    ISO_8859-6
    ISO-8859-6
    ECMA-114
    ASMO-708
    arabic
    csISOLatinArabic
    ISO-8859-7ISO_8859-7:198710 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1947][RFC1345][Keld_Simonsen]iso-ir-126
    ISO_8859-7
    ISO-8859-7
    ELOT_928
    ECMA-118
    greek
    greek8
    csISOLatinGreek
    ISO-8859-8ISO_8859-8:198811 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-138
    ISO_8859-8
    ISO-8859-8
    hebrew
    csISOLatinHebrew
    ISO-8859-9ISO_8859-9:198912 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-148
    ISO_8859-9
    ISO-8859-9
    latin5
    l5
    csISOLatin5
    ISO-8859-10ISO-8859-1013 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-157
    l6
    ISO_8859-10:1992
    csISOLatin6
    latin6
    ISO_6937-2-add14 + [ISO-IR: International Register of Escape Sequences] and ISO 6937-2:1983
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-142
    csISOTextComm
    JIS_X020115JIS X 0201-1976. One byte only, this is equivalent to +JIS/Roman (similar to ASCII) plus eight-bit half-width +Katakana[RFC1345][Keld_Simonsen]X0201
    csHalfWidthKatakana
    JIS_Encoding16JIS X 0202-1991. Uses ISO 2022 escape sequences to +shift code sets as documented in JIS X 0202-1991.csJISEncoding
    Shift_JISShift_JIS17This charset is an extension of csHalfWidthKatakana by +adding graphic characters in JIS X 0208. The CCS's are +JIS X0201:1997 and JIS X0208:1997. The +complete definition is shown in Appendix 1 of JIS +X0208:1997. +This charset can be used for the top-level media type "text".MS_Kanji
    csShiftJIS
    EUC-JPExtended_UNIX_Code_Packed_Format_for_Japanese18Standardized by OSF, UNIX International, and UNIX Systems +Laboratories Pacific. Uses ISO 2022 rules to select +code set 0: US-ASCII (a single 7-bit byte set) +code set 1: JIS X0208-1990 (a double 8-bit byte set) +restricted to A0-FF in both bytes +code set 2: Half Width Katakana (a single 7-bit byte set) +requiring SS2 as the character prefix +code set 3: JIS X0212-1990 (a double 7-bit byte set) +restricted to A0-FF in both bytes +requiring SS3 as the character prefixcsEUCPkdFmtJapanese
    EUC-JP
    Extended_UNIX_Code_Fixed_Width_for_Japanese19Used in Japan. Each character is 2 octets. +code set 0: US-ASCII (a single 7-bit byte set) +1st byte = 00 +2nd byte = 20-7E +code set 1: JIS X0208-1990 (a double 7-bit byte set) +restricted to A0-FF in both bytes +code set 2: Half Width Katakana (a single 7-bit byte set) +1st byte = 00 +2nd byte = A0-FF +code set 3: JIS X0212-1990 (a double 7-bit byte set) +restricted to A0-FF in +the first byte +and 21-7E in the second bytecsEUCFixWidJapanese
    BS_473020 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-4
    ISO646-GB
    gb
    uk
    csISO4UnitedKingdom
    SEN_850200_C21 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-11
    ISO646-SE2
    se2
    csISO11SwedishForNames
    IT22 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-15
    ISO646-IT
    csISO15Italian
    ES23 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-17
    ISO646-ES
    csISO17Spanish
    DIN_6600324 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-21
    de
    ISO646-DE
    csISO21German
    NS_4551-125 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-60
    ISO646-NO
    no
    csISO60DanishNorwegian
    csISO60Norwegian1
    NF_Z_62-01026 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-69
    ISO646-FR
    fr
    csISO69French
    ISO-10646-UTF-127Universal Transfer Format (1), this is the multibyte +encoding, that subsets ASCII-7. It does not have byte +ordering issues.csISO10646UTF1
    ISO_646.basic:198328 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]ref
    csISO646basic1983
    INVARIANT29[RFC1345][Keld_Simonsen]csINVARIANT
    ISO_646.irv:198330 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-2
    irv
    csISO2IntlRefVersion
    NATS-SEFI31 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-8-1
    csNATSSEFI
    NATS-SEFI-ADD32 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-8-2
    csNATSSEFIADD
    NATS-DANO33 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-9-1
    csNATSDANO
    NATS-DANO-ADD34 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-9-2
    csNATSDANOADD
    SEN_850200_B35 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-10
    FI
    ISO646-FI
    ISO646-SE
    se
    csISO10Swedish
    KS_C_5601-198736 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-149
    KS_C_5601-1989
    KSC_5601
    korean
    csKSC56011987
    ISO-2022-KRISO-2022-KR37[RFC1557] (see also KS_C_5601-1987)[RFC1557][Woohyong_Choi]csISO2022KR
    EUC-KREUC-KR38[RFC1557] (see also KS_C_5861-1992)[RFC1557][Woohyong_Choi]csEUCKR
    ISO-2022-JPISO-2022-JP39[RFC1468] (see also [RFC2237])[RFC1468][Jun_Murai]csISO2022JP
    ISO-2022-JP-2ISO-2022-JP-240 + [RFC1554] + [RFC1554][Masataka_Ohta]csISO2022JP2
    JIS_C6220-1969-jp41 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]JIS_C6220-1969
    iso-ir-13
    katakana
    x0201-7
    csISO13JISC6220jp
    JIS_C6220-1969-ro42 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-14
    jp
    ISO646-JP
    csISO14JISC6220ro
    PT43 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-16
    ISO646-PT
    csISO16Portuguese
    greek7-old44 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-18
    csISO18Greek7Old
    latin-greek45 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-19
    csISO19LatinGreek
    NF_Z_62-010_(1973)46 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-25
    ISO646-FR1
    csISO25French
    Latin-greek-147 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-27
    csISO27LatinGreek1
    ISO_542748 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-37
    csISO5427Cyrillic
    JIS_C6226-197849 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-42
    csISO42JISC62261978
    BS_viewdata50 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-47
    csISO47BSViewdata
    INIS51 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-49
    csISO49INIS
    INIS-852 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-50
    csISO50INIS8
    INIS-cyrillic53 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-51
    csISO51INISCyrillic
    ISO_5427:198154 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-54
    ISO5427Cyrillic1981
    csISO54271981
    ISO_5428:198055 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-55
    csISO5428Greek
    GB_1988-8056 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-57
    cn
    ISO646-CN
    csISO57GB1988
    GB_2312-8057 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-58
    chinese
    csISO58GB231280
    NS_4551-258 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]ISO646-NO2
    iso-ir-61
    no2
    csISO61Norwegian2
    videotex-suppl59 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-70
    csISO70VideotexSupp1
    PT260 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-84
    ISO646-PT2
    csISO84Portuguese2
    ES261 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-85
    ISO646-ES2
    csISO85Spanish2
    MSZ_7795.362 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-86
    ISO646-HU
    hu
    csISO86Hungarian
    JIS_C6226-198363 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-87
    x0208
    JIS_X0208-1983
    csISO87JISX0208
    greek764 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-88
    csISO88Greek7
    ASMO_44965 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]ISO_9036
    arabic7
    iso-ir-89
    csISO89ASMO449
    iso-ir-9066 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]csISO90
    JIS_C6229-1984-a67 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-91
    jp-ocr-a
    csISO91JISC62291984a
    JIS_C6229-1984-b68 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-92
    ISO646-JP-OCR-B
    jp-ocr-b
    csISO92JISC62991984b
    JIS_C6229-1984-b-add69 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-93
    jp-ocr-b-add
    csISO93JIS62291984badd
    JIS_C6229-1984-hand70 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-94
    jp-ocr-hand
    csISO94JIS62291984hand
    JIS_C6229-1984-hand-add71 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-95
    jp-ocr-hand-add
    csISO95JIS62291984handadd
    JIS_C6229-1984-kana72 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-96
    csISO96JISC62291984kana
    ISO_2033-198373 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-98
    e13b
    csISO2033
    ANSI_X3.110-198374 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-99
    CSA_T500-1983
    NAPLPS
    csISO99NAPLPS
    T.61-7bit75 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-102
    csISO102T617bit
    T.61-8bit76 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]T.61
    iso-ir-103
    csISO103T618bit
    ECMA-cyrillic77[ISO registry] + (formerly [ECMA + registry])iso-ir-111
    KOI8-E
    csISO111ECMACyrillic
    CSA_Z243.4-1985-178 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-121
    ISO646-CA
    csa7-1
    csa71
    ca
    csISO121Canadian1
    CSA_Z243.4-1985-279 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-122
    ISO646-CA2
    csa7-2
    csa72
    csISO122Canadian2
    CSA_Z243.4-1985-gr80 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-123
    csISO123CSAZ24341985gr
    ISO-8859-6-EISO_8859-6-E81 + [RFC1556] + [RFC1556][IANA]csISO88596E
    ISO-8859-6-E
    ISO-8859-6-IISO_8859-6-I82 + [RFC1556] + [RFC1556][IANA]csISO88596I
    ISO-8859-6-I
    T.101-G283 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-128
    csISO128T101G2
    ISO-8859-8-EISO_8859-8-E84 + [RFC1556] + [RFC1556][Hank_Nussbacher]csISO88598E
    ISO-8859-8-E
    ISO-8859-8-IISO_8859-8-I85 + [RFC1556] + [RFC1556][Hank_Nussbacher]csISO88598I
    ISO-8859-8-I
    CSN_36910386 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-139
    csISO139CSN369103
    JUS_I.B1.00287 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-141
    ISO646-YU
    js
    yu
    csISO141JUSIB1002
    IEC_P27-188 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-143
    csISO143IECP271
    JUS_I.B1.003-serb89 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-146
    serbian
    csISO146Serbian
    JUS_I.B1.003-mac90 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]macedonian
    iso-ir-147
    csISO147Macedonian
    greek-ccitt91 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-150
    csISO150
    csISO150GreekCCITT
    NC_NC00-10:8192 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]cuba
    iso-ir-151
    ISO646-CU
    csISO151Cuba
    ISO_6937-2-2593 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-152
    csISO6937Add
    GOST_19768-7494 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]ST_SEV_358-88
    iso-ir-153
    csISO153GOST1976874
    ISO_8859-supp95 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-154
    latin1-2-5
    csISO8859Supp
    ISO_10367-box96 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]iso-ir-155
    csISO10367Box
    latin-lap97 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]lap
    iso-ir-158
    csISO158Lap
    JIS_X0212-199098 + [ISO-IR: International Register of Escape Sequences]
    + Note: The current registration authority is IPSJ/ITSCJ, Japan. +
    [RFC1345][Keld_Simonsen]x0212
    iso-ir-159
    csISO159JISX02121990
    DS_208999Danish Standard, DS 2089, February 1974[RFC1345][Keld_Simonsen]DS2089
    ISO646-DK
    dk
    csISO646Danish
    us-dk100[RFC1345][Keld_Simonsen]csUSDK
    dk-us101[RFC1345][Keld_Simonsen]csDKUS
    KSC5636102[RFC1345][Keld_Simonsen]ISO646-KR
    csKSC5636
    UNICODE-1-1-UTF-7103 + [RFC1642] + [RFC1642]csUnicode11UTF7
    ISO-2022-CN104 + [RFC1922] + [RFC1922]csISO2022CN
    ISO-2022-CN-EXT105 + [RFC1922] + [RFC1922]csISO2022CNEXT
    UTF-8106 + [RFC3629] + [RFC3629]csUTF8
    ISO-8859-13109ISO See [http://www.iana.org/assignments/charset-reg/ISO-8859-13][Vladas_Tumasonis]csISO885913
    ISO-8859-14110ISO See [http://www.iana.org/assignments/charset-reg/ISO-8859-14] [Keld_Simonsen_2]iso-ir-199
    ISO_8859-14:1998
    ISO_8859-14
    latin8
    iso-celtic
    l8
    csISO885914
    ISO-8859-15111ISO +Please see: [http://www.iana.org/assignments/charset-reg/ISO-8859-15]ISO_8859-15
    Latin-9
    csISO885915
    ISO-8859-16112ISOiso-ir-226
    ISO_8859-16:2001
    ISO_8859-16
    latin10
    l10
    csISO885916
    GBK113Chinese IT Standardization Technical Committee +Please see: [http://www.iana.org/assignments/charset-reg/GBK]CP936
    MS936
    windows-936
    csGBK
    GB18030114Chinese IT Standardization Technical Committee +Please see: [http://www.iana.org/assignments/charset-reg/GB18030]csGB18030
    OSD_EBCDIC_DF04_15115Fujitsu-Siemens standard mainframe EBCDIC encoding +Please see: [http://www.iana.org/assignments/charset-reg/OSD-EBCDIC-DF04-15]csOSDEBCDICDF0415
    OSD_EBCDIC_DF03_IRV116Fujitsu-Siemens standard mainframe EBCDIC encoding +Please see: [http://www.iana.org/assignments/charset-reg/OSD-EBCDIC-DF03-IRV]csOSDEBCDICDF03IRV
    OSD_EBCDIC_DF04_1117Fujitsu-Siemens standard mainframe EBCDIC encoding +Please see: [http://www.iana.org/assignments/charset-reg/OSD-EBCDIC-DF04-1]csOSDEBCDICDF041
    ISO-11548-1118See [http://www.iana.org/assignments/charset-reg/ISO-11548-1] [Samuel_Thibault]ISO_11548-1
    ISO_TR_11548-1
    csISO115481
    KZ-1048119See [http://www.iana.org/assignments/charset-reg/KZ-1048] [Sairan_M_Kikkarin][Alexei_Veremeev]STRK1048-2002
    RK1048
    csKZ1048
    ISO-10646-UCS-21000the 2-octet Basic Multilingual Plane, aka Unicode +this needs to specify network byte order: the standard +does not specify (it is a 16-bit integer space)csUnicode
    ISO-10646-UCS-41001the full code space. (same comment about byte order, +these are 31-bit numbers.csUCS4
    ISO-10646-UCS-Basic1002ASCII subset of Unicode. Basic Latin = collection 1 +See ISO 10646, Appendix AcsUnicodeASCII
    ISO-10646-Unicode-Latin11003ISO Latin-1 subset of Unicode. Basic Latin and Latin-1 +Supplement = collections 1 and 2. See ISO 10646, +Appendix A. See [RFC1815].csUnicodeLatin1
    ISO-10646
    ISO-10646-J-11004ISO 10646 Japanese, see [RFC1815].csUnicodeJapanese
    ISO-Unicode-IBM-12611005IBM Latin-2, -3, -5, Extended Presentation Set, GCSGID: 1261csUnicodeIBM1261
    ISO-Unicode-IBM-12681006IBM Latin-4 Extended Presentation Set, GCSGID: 1268csUnicodeIBM1268
    ISO-Unicode-IBM-12761007IBM Cyrillic Greek Extended Presentation Set, GCSGID: 1276csUnicodeIBM1276
    ISO-Unicode-IBM-12641008IBM Arabic Presentation Set, GCSGID: 1264csUnicodeIBM1264
    ISO-Unicode-IBM-12651009IBM Hebrew Presentation Set, GCSGID: 1265csUnicodeIBM1265
    UNICODE-1-11010 + [RFC1641] + [RFC1641]csUnicode11
    SCSU1011SCSU See [http://www.iana.org/assignments/charset-reg/SCSU] [Markus_Scherer]csSCSU
    UTF-71012 + [RFC2152] + [RFC2152]csUTF7
    UTF-16BE1013 + [RFC2781] + [RFC2781]csUTF16BE
    UTF-16LE1014 + [RFC2781] + [RFC2781]csUTF16LE
    UTF-161015 + [RFC2781] + [RFC2781]csUTF16
    CESU-81016 + [http://www.unicode.org/unicode/reports/tr26] + [Toby_Phipps]csCESU8
    csCESU-8
    UTF-321017 + [http://www.unicode.org/unicode/reports/tr19/] + [Mark_Davis]csUTF32
    UTF-32BE1018 + [http://www.unicode.org/unicode/reports/tr19/] + [Mark_Davis]csUTF32BE
    UTF-32LE1019 + [http://www.unicode.org/unicode/reports/tr19/] + [Mark_Davis]csUTF32LE
    BOCU-11020 + [http://www.unicode.org/notes/tn6/] + [Markus_Scherer]csBOCU1
    csBOCU-1
    ISO-8859-1-Windows-3.0-Latin-12000Extended ISO 8859-1 Latin-1 for Windows 3.0. +PCL Symbol Set id: 9U[Hewlett-Packard Company, "HP PCL 5 Comparison Guide", +(P/N 5021-0329) pp B-13, 1996.]csWindows30Latin1
    ISO-8859-1-Windows-3.1-Latin-12001Extended ISO 8859-1 Latin-1 for Windows 3.1. +PCL Symbol Set id: 19U[Hewlett-Packard Company, "HP PCL 5 Comparison Guide", +(P/N 5021-0329) pp B-13, 1996.]csWindows31Latin1
    ISO-8859-2-Windows-Latin-22002Extended ISO 8859-2. Latin-2 for Windows 3.1. +PCL Symbol Set id: 9E[Hewlett-Packard Company, "HP PCL 5 Comparison Guide", +(P/N 5021-0329) pp B-13, 1996.]csWindows31Latin2
    ISO-8859-9-Windows-Latin-52003Extended ISO 8859-9. Latin-5 for Windows 3.1 +PCL Symbol Set id: 5T[Hewlett-Packard Company, "HP PCL 5 Comparison Guide", +(P/N 5021-0329) pp B-13, 1996.]csWindows31Latin5
    hp-roman82004LaserJet IIP Printer User's Manual, +HP part no 33471-90901, Hewlet-Packard, June 1989.[Hewlett-Packard Company, "HP PCL 5 Comparison Guide", +(P/N 5021-0329) pp B-13, 1996.][RFC1345][Keld_Simonsen]roman8
    r8
    csHPRoman8
    Adobe-Standard-Encoding2005PostScript Language Reference Manual +PCL Symbol Set id: 10J[Adobe Systems Incorporated, PostScript Language Reference +Manual, second edition, Addison-Wesley Publishing Company, +Inc., 1990.]csAdobeStandardEncoding
    Ventura-US2006Ventura US. ASCII plus characters typically used in +publishing, like pilcrow, copyright, registered, trade mark, +section, dagger, and double dagger in the range A0 (hex) +to FF (hex). +PCL Symbol Set id: 14J[Hewlett-Packard Company, "HP PCL 5 Comparison Guide", +(P/N 5021-0329) pp B-13, 1996.]csVenturaUS
    Ventura-International2007Ventura International. ASCII plus coded characters similar +to Roman8. +PCL Symbol Set id: 13J[Hewlett-Packard Company, "HP PCL 5 Comparison Guide", +(P/N 5021-0329) pp B-13, 1996.]csVenturaInternational
    DEC-MCS2008VAX/VMS User's Manual, +Order Number: AI-Y517A-TE, April 1986.[RFC1345][Keld_Simonsen]dec
    csDECMCS
    IBM8502009IBM NLS RM Vol2 SE09-8002-01, March 1990[RFC1345][Keld_Simonsen]cp850
    850
    csPC850Multilingual
    PC8-Danish-Norwegian2012PC Danish Norwegian +8-bit PC set for Danish Norwegian +PCL Symbol Set id: 11U[Hewlett-Packard Company, "HP PCL 5 Comparison Guide", +(P/N 5021-0329) pp B-13, 1996.]csPC8DanishNorwegian
    IBM8622013IBM NLS RM Vol2 SE09-8002-01, March 1990[RFC1345][Keld_Simonsen]cp862
    862
    csPC862LatinHebrew
    PC8-Turkish2014PC Latin Turkish. PCL Symbol Set id: 9T[Hewlett-Packard Company, "HP PCL 5 Comparison Guide", +(P/N 5021-0329) pp B-13, 1996.]csPC8Turkish
    IBM-Symbols2015Presentation Set, CPGID: 259[IBM Corporation, "ABOUT TYPE: IBM's Technical Reference +for Core Interchange Digitized Type", Publication number +S544-3708-01]csIBMSymbols
    IBM-Thai2016Presentation Set, CPGID: 838[IBM Corporation, "ABOUT TYPE: IBM's Technical Reference +for Core Interchange Digitized Type", Publication number +S544-3708-01]csIBMThai
    HP-Legal2017PCL 5 Comparison Guide, Hewlett-Packard, +HP part number 5961-0510, October 1992 +PCL Symbol Set id: 1U[Hewlett-Packard Company, "HP PCL 5 Comparison Guide", +(P/N 5021-0329) pp B-13, 1996.]csHPLegal
    HP-Pi-font2018PCL 5 Comparison Guide, Hewlett-Packard, +HP part number 5961-0510, October 1992 +PCL Symbol Set id: 15U[Hewlett-Packard Company, "HP PCL 5 Comparison Guide", +(P/N 5021-0329) pp B-13, 1996.]csHPPiFont
    HP-Math82019PCL 5 Comparison Guide, Hewlett-Packard, +HP part number 5961-0510, October 1992 +PCL Symbol Set id: 8M[Hewlett-Packard Company, "HP PCL 5 Comparison Guide", +(P/N 5021-0329) pp B-13, 1996.]csHPMath8
    Adobe-Symbol-Encoding2020PostScript Language Reference Manual +PCL Symbol Set id: 5M[Adobe Systems Incorporated, PostScript Language Reference +Manual, second edition, Addison-Wesley Publishing Company, +Inc., 1990.]csHPPSMath
    HP-DeskTop2021PCL 5 Comparison Guide, Hewlett-Packard, +HP part number 5961-0510, October 1992 +PCL Symbol Set id: 7J[Hewlett-Packard Company, "HP PCL 5 Comparison Guide", +(P/N 5021-0329) pp B-13, 1996.]csHPDesktop
    Ventura-Math2022PCL 5 Comparison Guide, Hewlett-Packard, +HP part number 5961-0510, October 1992 +PCL Symbol Set id: 6M[Hewlett-Packard Company, "HP PCL 5 Comparison Guide", +(P/N 5021-0329) pp B-13, 1996.]csVenturaMath
    Microsoft-Publishing2023PCL 5 Comparison Guide, Hewlett-Packard, +HP part number 5961-0510, October 1992 +PCL Symbol Set id: 6J[Hewlett-Packard Company, "HP PCL 5 Comparison Guide", +(P/N 5021-0329) pp B-13, 1996.]csMicrosoftPublishing
    Windows-31J2024Windows Japanese. A further extension of Shift_JIS +to include NEC special characters (Row 13), NEC +selection of IBM extensions (Rows 89 to 92), and IBM +extensions (Rows 115 to 119). The CCS's are +JIS X0201:1997, JIS X0208:1997, and these extensions. +This charset can be used for the top-level media type "text", +but it is of limited or specialized use (see [RFC2278]). +PCL Symbol Set id: 19KcsWindows31J
    GB2312GB23122025Chinese for People's Republic of China (PRC) mixed one byte, +two byte set: +20-7E = one byte ASCII +A1-FE = two byte PRC Kanji +See GB 2312-80 +PCL Symbol Set Id: 18CcsGB2312
    Big5Big52026Chinese for Taiwan Multi-byte set. +PCL Symbol Set Id: 18TcsBig5
    macintosh2027The Unicode Standard ver1.0, ISBN 0-201-56788-1, Oct 1991[RFC1345][Keld_Simonsen]mac
    csMacintosh
    IBM0372028IBM NLS RM Vol2 SE09-8002-01, March 1990[RFC1345][Keld_Simonsen]cp037
    ebcdic-cp-us
    ebcdic-cp-ca
    ebcdic-cp-wt
    ebcdic-cp-nl
    csIBM037
    IBM0382029IBM 3174 Character Set Ref, GA27-3831-02, March 1990[RFC1345][Keld_Simonsen]EBCDIC-INT
    cp038
    csIBM038
    IBM2732030IBM NLS RM Vol2 SE09-8002-01, March 1990[RFC1345][Keld_Simonsen]CP273
    csIBM273
    IBM2742031IBM 3174 Character Set Ref, GA27-3831-02, March 1990[RFC1345][Keld_Simonsen]EBCDIC-BE
    CP274
    csIBM274
    IBM2752032IBM NLS RM Vol2 SE09-8002-01, March 1990[RFC1345][Keld_Simonsen]EBCDIC-BR
    cp275
    csIBM275
    IBM2772033IBM NLS RM Vol2 SE09-8002-01, March 1990[RFC1345][Keld_Simonsen]EBCDIC-CP-DK
    EBCDIC-CP-NO
    csIBM277
    IBM2782034IBM NLS RM Vol2 SE09-8002-01, March 1990[RFC1345][Keld_Simonsen]CP278
    ebcdic-cp-fi
    ebcdic-cp-se
    csIBM278
    IBM2802035IBM NLS RM Vol2 SE09-8002-01, March 1990[RFC1345][Keld_Simonsen]CP280
    ebcdic-cp-it
    csIBM280
    IBM2812036IBM 3174 Character Set Ref, GA27-3831-02, March 1990[RFC1345][Keld_Simonsen]EBCDIC-JP-E
    cp281
    csIBM281
    IBM2842037IBM NLS RM Vol2 SE09-8002-01, March 1990[RFC1345][Keld_Simonsen]CP284
    ebcdic-cp-es
    csIBM284
    IBM2852038IBM NLS RM Vol2 SE09-8002-01, March 1990[RFC1345][Keld_Simonsen]CP285
    ebcdic-cp-gb
    csIBM285
    IBM2902039IBM 3174 Character Set Ref, GA27-3831-02, March 1990[RFC1345][Keld_Simonsen]cp290
    EBCDIC-JP-kana
    csIBM290
    IBM2972040IBM NLS RM Vol2 SE09-8002-01, March 1990[RFC1345][Keld_Simonsen]cp297
    ebcdic-cp-fr
    csIBM297
    IBM4202041IBM NLS RM Vol2 SE09-8002-01, March 1990, +IBM NLS RM p 11-11[RFC1345][Keld_Simonsen]cp420
    ebcdic-cp-ar1
    csIBM420
    IBM4232042IBM NLS RM Vol2 SE09-8002-01, March 1990[RFC1345][Keld_Simonsen]cp423
    ebcdic-cp-gr
    csIBM423
    IBM4242043IBM NLS RM Vol2 SE09-8002-01, March 1990[RFC1345][Keld_Simonsen]cp424
    ebcdic-cp-he
    csIBM424
    IBM4372011IBM NLS RM Vol2 SE09-8002-01, March 1990[RFC1345][Keld_Simonsen]cp437
    437
    csPC8CodePage437
    IBM5002044IBM NLS RM Vol2 SE09-8002-01, March 1990[RFC1345][Keld_Simonsen]CP500
    ebcdic-cp-be
    ebcdic-cp-ch
    csIBM500
    IBM8512045IBM NLS RM Vol2 SE09-8002-01, March 1990[RFC1345][Keld_Simonsen]cp851
    851
    csIBM851
    IBM8522010IBM NLS RM Vol2 SE09-8002-01, March 1990[RFC1345][Keld_Simonsen]cp852
    852
    csPCp852
    IBM8552046IBM NLS RM Vol2 SE09-8002-01, March 1990[RFC1345][Keld_Simonsen]cp855
    855
    csIBM855
    IBM8572047IBM NLS RM Vol2 SE09-8002-01, March 1990[RFC1345][Keld_Simonsen]cp857
    857
    csIBM857
    IBM8602048IBM NLS RM Vol2 SE09-8002-01, March 1990[RFC1345][Keld_Simonsen]cp860
    860
    csIBM860
    IBM8612049IBM NLS RM Vol2 SE09-8002-01, March 1990[RFC1345][Keld_Simonsen]cp861
    861
    cp-is
    csIBM861
    IBM8632050IBM Keyboard layouts and code pages, PN 07G4586 June 1991[RFC1345][Keld_Simonsen]cp863
    863
    csIBM863
    IBM8642051IBM Keyboard layouts and code pages, PN 07G4586 June 1991[RFC1345][Keld_Simonsen]cp864
    csIBM864
    IBM8652052IBM DOS 3.3 Ref (Abridged), 94X9575 (Feb 1987)[RFC1345][Keld_Simonsen]cp865
    865
    csIBM865
    IBM8682053IBM NLS RM Vol2 SE09-8002-01, March 1990[RFC1345][Keld_Simonsen]CP868
    cp-ar
    csIBM868
    IBM8692054IBM Keyboard layouts and code pages, PN 07G4586 June 1991[RFC1345][Keld_Simonsen]cp869
    869
    cp-gr
    csIBM869
    IBM8702055IBM NLS RM Vol2 SE09-8002-01, March 1990[RFC1345][Keld_Simonsen]CP870
    ebcdic-cp-roece
    ebcdic-cp-yu
    csIBM870
    IBM8712056IBM NLS RM Vol2 SE09-8002-01, March 1990[RFC1345][Keld_Simonsen]CP871
    ebcdic-cp-is
    csIBM871
    IBM8802057IBM NLS RM Vol2 SE09-8002-01, March 1990[RFC1345][Keld_Simonsen]cp880
    EBCDIC-Cyrillic
    csIBM880
    IBM8912058IBM NLS RM Vol2 SE09-8002-01, March 1990[RFC1345][Keld_Simonsen]cp891
    csIBM891
    IBM9032059IBM NLS RM Vol2 SE09-8002-01, March 1990[RFC1345][Keld_Simonsen]cp903
    csIBM903
    IBM9042060IBM NLS RM Vol2 SE09-8002-01, March 1990[RFC1345][Keld_Simonsen]cp904
    904
    csIBBM904
    IBM9052061IBM 3174 Character Set Ref, GA27-3831-02, March 1990[RFC1345][Keld_Simonsen]CP905
    ebcdic-cp-tr
    csIBM905
    IBM9182062IBM NLS RM Vol2 SE09-8002-01, March 1990[RFC1345][Keld_Simonsen]CP918
    ebcdic-cp-ar2
    csIBM918
    IBM10262063IBM NLS RM Vol2 SE09-8002-01, March 1990[RFC1345][Keld_Simonsen]CP1026
    csIBM1026
    EBCDIC-AT-DE2064IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987[RFC1345][Keld_Simonsen]csIBMEBCDICATDE
    EBCDIC-AT-DE-A2065IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987[RFC1345][Keld_Simonsen]csEBCDICATDEA
    EBCDIC-CA-FR2066IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987[RFC1345][Keld_Simonsen]csEBCDICCAFR
    EBCDIC-DK-NO2067IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987[RFC1345][Keld_Simonsen]csEBCDICDKNO
    EBCDIC-DK-NO-A2068IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987[RFC1345][Keld_Simonsen]csEBCDICDKNOA
    EBCDIC-FI-SE2069IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987[RFC1345][Keld_Simonsen]csEBCDICFISE
    EBCDIC-FI-SE-A2070IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987[RFC1345][Keld_Simonsen]csEBCDICFISEA
    EBCDIC-FR2071IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987[RFC1345][Keld_Simonsen]csEBCDICFR
    EBCDIC-IT2072IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987[RFC1345][Keld_Simonsen]csEBCDICIT
    EBCDIC-PT2073IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987[RFC1345][Keld_Simonsen]csEBCDICPT
    EBCDIC-ES2074IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987[RFC1345][Keld_Simonsen]csEBCDICES
    EBCDIC-ES-A2075IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987[RFC1345][Keld_Simonsen]csEBCDICESA
    EBCDIC-ES-S2076IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987[RFC1345][Keld_Simonsen]csEBCDICESS
    EBCDIC-UK2077IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987[RFC1345][Keld_Simonsen]csEBCDICUK
    EBCDIC-US2078IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987[RFC1345][Keld_Simonsen]csEBCDICUS
    UNKNOWN-8BIT2079[RFC1428]csUnknown8BiT
    MNEMONIC2080[RFC1345], also known as "mnemonic+ascii+38"[RFC1345][Keld_Simonsen]csMnemonic
    MNEM2081[RFC1345], also known as "mnemonic+ascii+8200"[RFC1345][Keld_Simonsen]csMnem
    VISCII2082 + [RFC1456] + [RFC1456]csVISCII
    VIQR2083 + [RFC1456] + [RFC1456]csVIQR
    KOI8-RKOI8-R2084[RFC1489], based on GOST-19768-74, ISO-6937/8, +INIS-Cyrillic, ISO-5427.[RFC1489]csKOI8R
    HZ-GB-23122085[RFC1842], [RFC1843][RFC1843][RFC1842]
    IBM8662086IBM NLDG Volume 2 (SE09-8002-03) August 1994[Rick_Pond]cp866
    866
    csIBM866
    IBM7752087HP PCL 5 Comparison Guide (P/N 5021-0329) pp B-13, 1996[Hewlett-Packard Company, "HP PCL 5 Comparison Guide", +(P/N 5021-0329) pp B-13, 1996.]cp775
    csPC775Baltic
    KOI8-U2088 + [RFC2319] + [RFC2319]csKOI8U
    IBM008582089IBM See [http://www.iana.org/assignments/charset-reg/IBM00858] [Tamer_Mahdi]CCSID00858
    CP00858
    PC-Multilingual-850+euro
    csIBM00858
    IBM009242090IBM See [http://www.iana.org/assignments/charset-reg/IBM00924] [Tamer_Mahdi]CCSID00924
    CP00924
    ebcdic-Latin9--euro
    csIBM00924
    IBM011402091IBM See [http://www.iana.org/assignments/charset-reg/IBM01140] [Tamer_Mahdi]CCSID01140
    CP01140
    ebcdic-us-37+euro
    csIBM01140
    IBM011412092IBM See [http://www.iana.org/assignments/charset-reg/IBM01141] [Tamer_Mahdi]CCSID01141
    CP01141
    ebcdic-de-273+euro
    csIBM01141
    IBM011422093IBM See [http://www.iana.org/assignments/charset-reg/IBM01142] [Tamer_Mahdi]CCSID01142
    CP01142
    ebcdic-dk-277+euro
    ebcdic-no-277+euro
    csIBM01142
    IBM011432094IBM See [http://www.iana.org/assignments/charset-reg/IBM01143] [Tamer_Mahdi]CCSID01143
    CP01143
    ebcdic-fi-278+euro
    ebcdic-se-278+euro
    csIBM01143
    IBM011442095IBM See [http://www.iana.org/assignments/charset-reg/IBM01144] [Tamer_Mahdi]CCSID01144
    CP01144
    ebcdic-it-280+euro
    csIBM01144
    IBM011452096IBM See [http://www.iana.org/assignments/charset-reg/IBM01145] [Tamer_Mahdi]CCSID01145
    CP01145
    ebcdic-es-284+euro
    csIBM01145
    IBM011462097IBM See [http://www.iana.org/assignments/charset-reg/IBM01146] [Tamer_Mahdi]CCSID01146
    CP01146
    ebcdic-gb-285+euro
    csIBM01146
    IBM011472098IBM See [http://www.iana.org/assignments/charset-reg/IBM01147] [Tamer_Mahdi]CCSID01147
    CP01147
    ebcdic-fr-297+euro
    csIBM01147
    IBM011482099IBM See [http://www.iana.org/assignments/charset-reg/IBM01148] [Tamer_Mahdi]CCSID01148
    CP01148
    ebcdic-international-500+euro
    csIBM01148
    IBM011492100IBM See [http://www.iana.org/assignments/charset-reg/IBM01149] [Tamer_Mahdi]CCSID01149
    CP01149
    ebcdic-is-871+euro
    csIBM01149
    Big5-HKSCS2101See [http://www.iana.org/assignments/charset-reg/Big5-HKSCS][Nicky_Yick]csBig5HKSCS
    IBM10472102IBM1047 (EBCDIC Latin 1/Open Systems) +[http://www-1.ibm.com/servers/eserver/iseries/software/globalization/pdf/cp01047z.pdf][Reuel_Robrigado]IBM-1047
    csIBM1047
    PTCP1542103See [http://www.iana.org/assignments/charset-reg/PTCP154][Alexander_Uskov]csPTCP154
    PT154
    CP154
    Cyrillic-Asian
    csPTCP154
    Amiga-12512104See [http://www.amiga.ultranet.ru/Amiga-1251.html]Ami1251
    Amiga1251
    Ami-1251
    csAmiga1251 +(Aliases are provided for historical reasons and should not be used) [Malyshev]
    KOI7-switched2105See [http://www.iana.org/assignments/charset-reg/KOI7-switched]csKOI7switched
    BRF2106See [http://www.iana.org/assignments/charset-reg/BRF] [Samuel_Thibault]csBRF
    TSCII2107See [http://www.iana.org/assignments/charset-reg/TSCII] [Kuppuswamy_Kalyanasu]csTSCII
    CP519322108See [http://www.iana.org/assignments/charset-reg/CP51932] [Yui_Naruse]csCP51932
    windows-8742109See [http://www.iana.org/assignments/charset-reg/windows-874] [Shawn_Steele]cswindows874
    windows-12502250Microsoft [http://www.iana.org/assignments/charset-reg/windows-1250] [Katya_Lazhintseva]cswindows1250
    windows-12512251Microsoft [http://www.iana.org/assignments/charset-reg/windows-1251] [Katya_Lazhintseva]cswindows1251
    windows-12522252Microsoft [http://www.iana.org/assignments/charset-reg/windows-1252] [Chris_Wendt]cswindows1252
    windows-12532253Microsoft [http://www.iana.org/assignments/charset-reg/windows-1253] [Katya_Lazhintseva]cswindows1253
    windows-12542254Microsoft [http://www.iana.org/assignments/charset-reg/windows-1254] [Katya_Lazhintseva]cswindows1254
    windows-12552255Microsoft [http://www.iana.org/assignments/charset-reg/windows-1255] [Katya_Lazhintseva]cswindows1255
    windows-12562256Microsoft [http://www.iana.org/assignments/charset-reg/windows-1256] [Katya_Lazhintseva]cswindows1256
    windows-12572257Microsoft [http://www.iana.org/assignments/charset-reg/windows-1257] [Katya_Lazhintseva]cswindows1257
    windows-12582258Microsoft [http://www.iana.org/assignments/charset-reg/windows-1258] [Katya_Lazhintseva]cswindows1258
    TIS-6202259Thai Industrial Standards Institute (TISI) [Trin_Tantsetthi]csTIS620
    CP502202260See [http://www.iana.org/assignments/charset-reg/CP50220] [Yui_Naruse]csCP50220
    +

    People

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    IDNameContact URILast Updated
    + [Alexander_Uskov] + Alexander Uskov + mailto:auskov&idc.kz + 2002-09
    + [Alexei_Veremeev] + Alexei Veremeev + mailto:Alexey.Veremeev&oracle.com + 2006-12-07
    + [Chris_Wendt] + Chris Wendt + mailto:christw&microsoft.com + 1999-12
    + [Hank_Nussbacher] + Hank Nussbacher + mailto:hank&vm.tau.ac.il +
    + [IANA] + Internet Assigned Numbers Authority + mailto:iana&iana.org +
    + [Jun_Murai] + Jun Murai + mailto:jun&wide.ad.jp +
    + [Katya_Lazhintseva] + Katya Lazhintseva + mailto:katyal&microsoft.com + 1996-05
    + [Keld_Simonsen] + Keld Simonsen + mailto:Keld.Simonsen&dkuug.dk +
    + [Keld_Simonsen_2] + Keld Simonsen + mailto:Keld.Simonsen&rap.dk + 2000-08
    + [Kuppuswamy_Kalyanasu] + Kuppuswamy Kalyanasundaram + mailto:kalyan.geo&yahoo.com + 2007-05-14
    + [Mark_Davis] + Mark Davis + mailto:mark&unicode.org + 2002-04
    + [Markus_Scherer] + Markus Scherer + mailto:markus.scherer&jtcsv.com + 2002-09
    + [Masataka_Ohta] + Masataka Ohta + mailto:mohta&cc.titech.ac.jp + 1995-07
    + [Nicky_Yick] + Nicky Yick + mailto:cliac&itsd.gcn.gov.hk + 2000-10
    + [Reuel_Robrigado] + Reuel Robrigado + mailto:reuelr&ca.ibm.com + 2002-09
    + [Rick_Pond] + Rick Pond + mailto:rickpond&vnet.ibm.com + 1997-03
    + [Sairan_M_Kikkarin] + Sairan M. Kikkarin + mailto:sairan&sci.kz + 2006-12-07
    + [Samuel_Thibault] + Samuel Thibault + mailto:samuel.thibault&ens-lyon.org + 2006-12-07
    + [Shawn_Steele] + Shawn Steele + mailto:Shawn.Steele&microsoft.com + 2010-11-04
    + [Tamer_Mahdi] + Tamer Mahdi + mailto:tamer&ca.ibm.com + 2000-08
    + [Toby_Phipps] + Toby Phipps + mailto:tphipps&peoplesoft.com + 2002-03
    + [Trin_Tantsetthi] + Trin Tantsetthi + mailto:trin&mozart.inet.co.th + 1998-09
    + [Vladas_Tumasonis] + Vladas Tumasonis + mailto:vladas.tumasonis&maf.vu.lt + 2000-08
    + [Woohyong_Choi] + Woohyong Choi + mailto:whchoi&cosmos.kaist.ac.kr +
    + [Yui_Naruse] + Yui Naruse + mailto:naruse&airemix.jp + 2011-09-23
    + + diff --git a/os400/iconv/ianatables.c b/os400/iconv/ianatables.c new file mode 100644 index 0000000..44b29c6 --- /dev/null +++ b/os400/iconv/ianatables.c @@ -0,0 +1,4609 @@ +/** +*** Character set names table. +*** Generated by program BLDCSNDFA from IANA character set assignment file +*** and CCSID/MIBenum equivalence file. +*** *** Do not edit by hand *** +**/ + +/** +*** CCSID For arg Recognized name. +*** 62245 X IBMCCSID62245 ibm-62245 +*** 62235 X IBMCCSID62235 ibm-62235 +*** 62224 X IBMCCSID62224 ibm-62224 +*** 62211 X IBMCCSID62211 ibm-62211 +*** 61952 X IBMCCSID61952 ibm-61952 +*** 57345 IBMCCSID57345 ibm-57345 +*** 33722 X csEUCPkdFmtJapanese +*** Extended_UNIX_Code_Packed_Format_for_Japanese EUC-JP +*** iana-18 IBMCCSID33722 ibm-33722 +*** 28709 X IBMCCSID28709 ibm-28709 +*** 25546 IBMCCSID25546 ibm-25546 +*** 17354 X IBMCCSID17354 ibm-17354 +*** 13488 X csUnicode ISO-10646-UCS-2 UCS2 UCS-2 iana-1000 +*** IBMCCSID13488 ibm-13488 +*** 13124 X IBMCCSID13124 ibm-13124 +*** 13121 X IBMCCSID13121 ibm-13121 +*** 12708 X IBMCCSID12708 ibm-12708 +*** 9449 cswindows1257 windows-1257 iana-2257 IBMCCSID09449 +*** ibm-9449 +*** 9448 cswindows1256 windows-1256 iana-2256 IBMCCSID09448 +*** ibm-9448 +*** 9447 cswindows1255 windows-1255 iana-2255 IBMCCSID09447 +*** ibm-9447 +*** 9066 X IBMCCSID09066 ibm-9066 +*** 9056 X IBMCCSID09056 ibm-9056 +*** 9030 X IBMCCSID09030 ibm-9030 +*** 8612 X IBMCCSID08612 ibm-8612 +*** 5478 csISO58GB231280 iso-ir-58 GB_2312-80 chinese iana-57 +*** IBMCCSID05478 ibm-5478 +*** 5123 X IBMCCSID05123 ibm-5123 +*** 5350 X cswindows1254 windows-1254 iana-2254 IBMCCSID05350 +*** ibm-5350 +*** 5349 X cswindows1253 windows-1253 iana-2253 IBMCCSID05349 +*** ibm-5349 +*** 5348 X cswindows1252 windows-1252 iana-2252 IBMCCSID05348 +*** ibm-5348 +*** 5347 X cswindows1251 windows-1251 iana-2251 IBMCCSID05347 +*** ibm-5347 +*** 5346 X cswindows1250 windows-1250 iana-2250 IBMCCSID05346 +*** ibm-5346 +*** 5354 cswindows1258 windows-1258 iana-2258 IBMCCSID05354 +*** ibm-5354 +*** 5055 X IBMCCSID05055 ibm-5055 +*** 5054 X IBMCCSID05054 ibm-5054 +*** 5053 X IBMCCSID05053 ibm-5053 +*** 5052 X IBMCCSID05052 ibm-5052 +*** 5050 X IBMCCSID05050 ibm-5050 +*** 5035 X IBMCCSID05035 ibm-5035 +*** 5026 X IBMCCSID05026 ibm-5026 +*** 4971 X IBMCCSID04971 ibm-4971 +*** 4965 IBMCCSID04965 ibm-4965 +*** 4960 X IBMCCSID04960 ibm-4960 +*** 4953 IBMCCSID04953 ibm-4953 +*** 4952 X IBMCCSID04952 ibm-4952 +*** 4951 X IBMCCSID04951 ibm-4951 +*** 4948 X IBMCCSID04948 ibm-4948 +*** 4396 X IBMCCSID04396 ibm-4396 +*** 1399 X IBMCCSID01399 ibm-1399 +*** 1392 X IBMCCSID01392 ibm-1392 +*** 1388 X IBMCCSID01388 ibm-1388 +*** 1386 X csGBK windows-936 MS936 CP936 GBK iana-113 +*** IBMCCSID01386 ibm-1386 +*** 1383 X csGB2312 GB2312 EUC-CN iana-2025 IBMCCSID01383 +*** ibm-1383 +*** 1381 X IBMCCSID01381 ibm-1381 +*** 1380 X IBMCCSID01380 ibm-1380 +*** 1375 csBig5HKSCS Big5-HKSCS iana-2101 IBMCCSID01375 +*** ibm-1375 +*** 1373 IBMCCSID01373 ibm-1373 +*** 1364 X IBMCCSID01364 ibm-1364 +*** 1363 X csKSC56011987 KSC_5601 KS_C_5601-1989 iso-ir-149 +*** KS_C_5601-1987 korean iana-36 IBMCCSID01363 ibm-1363 +*** 1283 X IBMCCSID01283 ibm-1283 +*** 1282 X IBMCCSID01282 ibm-1282 +*** 1281 X IBMCCSID01281 ibm-1281 +*** 1280 X IBMCCSID01280 ibm-1280 +*** 1276 csAdobeStandardEncoding Adobe-Standard-Encoding +*** iana-2005 IBMCCSID01276 ibm-1276 +*** 1275 X IBMCCSID01275 ibm-1275 +*** 1258 X IBMCCSID01258 ibm-1258 +*** 1257 X IBMCCSID01257 ibm-1257 +*** 1256 X IBMCCSID01256 ibm-1256 +*** 1255 X IBMCCSID01255 ibm-1255 +*** 1254 X IBMCCSID01254 ibm-1254 +*** 1253 X IBMCCSID01253 ibm-1253 +*** 1252 X csWindows31Latin1 ISO-8859-1-Windows-3.1-Latin-1 +*** iana-2001 IBMCCSID01252 ibm-1252 +*** 1251 X IBMCCSID01251 ibm-1251 +*** 1250 X csWindows31Latin2 ISO-8859-2-Windows-Latin-2 iana-2002 +*** IBMCCSID01250 ibm-1250 +*** 1235 csUTF32LE UTF-32LE UTF-32-LE UTF32LE UTF32-LE +*** iana-1019 IBMCCSID01235 ibm-1235 +*** 1233 csUTF32BE UTF-32BE UTF-32-BE UTF32BE UTF32-BE +*** iana-1018 IBMCCSID01233 ibm-1233 +*** 1208 X csUTF8 UTF-8 UTF8 iana-106 IBMCCSID01208 ibm-1208 +*** 1203 csUTF16LE UTF-16LE UTF-16-LE UTF16LE UTF16-LE +*** iana-1014 IBMCCSID01203 ibm-1203 +*** 1201 csUTF16BE UTF-16BE UTF-16-BE UTF16BE UTF16-BE +*** iana-1013 IBMCCSID01201 ibm-1201 +*** 1164 X IBMCCSID01164 ibm-1164 +*** 1160 X IBMCCSID01160 ibm-1160 +*** 1158 X IBMCCSID01158 ibm-1158 +*** 1157 X IBMCCSID01157 ibm-1157 +*** 1156 X IBMCCSID01156 ibm-1156 +*** 1155 X IBMCCSID01155 ibm-1155 +*** 1154 X IBMCCSID01154 ibm-1154 +*** 1153 X IBMCCSID01153 ibm-1153 +*** 1149 X csIBM01149 ebcdic-is-871+euro CP01149 CCSID01149 +*** IBM01149 iana-2100 IBMCCSID01149 ibm-1149 +*** 1148 X csIBM01148 ebcdic-international-500+euro CP01148 +*** CCSID01148 IBM01148 iana-2099 IBMCCSID01148 ibm-1148 +*** 1147 X csIBM01147 ebcdic-fr-297+euro CP01147 CCSID01147 +*** IBM01147 iana-2098 IBMCCSID01147 ibm-1147 +*** 1146 X csIBM01146 ebcdic-gb-285+euro CP01146 CCSID01146 +*** IBM01146 iana-2097 IBMCCSID01146 ibm-1146 +*** 1145 X csIBM01145 ebcdic-es-284+euro CP01145 CCSID01145 +*** IBM01145 iana-2096 IBMCCSID01145 ibm-1145 +*** 1144 X csIBM01144 ebcdic-it-280+euro CP01144 CCSID01144 +*** IBM01144 iana-2095 IBMCCSID01144 ibm-1144 +*** 1143 X csIBM01143 ebcdic-se-278+euro ebcdic-fi-278+euro +*** CP01143 CCSID01143 IBM01143 iana-2094 IBMCCSID01143 +*** ibm-1143 +*** 1142 X csIBM01142 ebcdic-no-277+euro ebcdic-dk-277+euro +*** CP01142 CCSID01142 IBM01142 iana-2093 IBMCCSID01142 +*** ibm-1142 +*** 1141 X csIBM01141 ebcdic-de-273+euro CP01141 CCSID01141 +*** IBM01141 iana-2092 IBMCCSID01141 ibm-1141 +*** 1140 X csIBM01140 ebcdic-us-37+euro CP01140 CCSID01140 +*** IBM01140 iana-2091 IBMCCSID01140 ibm-1140 +*** 1137 X IBMCCSID01137 ibm-1137 +*** 1133 IBMCCSID01133 ibm-1133 +*** 1132 X IBMCCSID01132 ibm-1132 +*** 1130 X IBMCCSID01130 ibm-1130 +*** 1129 X IBMCCSID01129 ibm-1129 +*** 1123 X IBMCCSID01123 ibm-1123 +*** 1122 X IBMCCSID01122 ibm-1122 +*** 1115 IBMCCSID01115 ibm-1115 +*** 1114 IBMCCSID01114 ibm-1114 +*** 1112 X IBMCCSID01112 ibm-1112 +*** 1098 X IBMCCSID01098 ibm-1098 +*** 1097 X IBMCCSID01097 ibm-1097 +*** 1089 X csISOLatinArabic arabic ASMO-708 ECMA-114 ISO_8859-6 +*** iso-ir-127 ISO_8859-6:1987 ISO-8859-6 iana-9 +*** IBMCCSID01089 ibm-1089 +*** 1088 IBMCCSID01088 ibm-1088 +*** 1051 X csHPRoman8 r8 roman8 hp-roman8 iana-2004 IBMCCSID01051 +*** ibm-1051 +*** 1047 X csIBM1047 IBM-1047 IBM1047 iana-2102 IBMCCSID01047 +*** ibm-1047 +*** 1046 X IBMCCSID01046 ibm-1046 +*** 1043 IBMCCSID01043 ibm-1043 +*** 1042 IBMCCSID01042 ibm-1042 +*** 1041 IBMCCSID01041 ibm-1041 +*** 1040 IBMCCSID01040 ibm-1040 +*** 1027 X IBMCCSID01027 ibm-1027 +*** 1026 X csIBM1026 CP1026 IBM1026 iana-2063 IBMCCSID01026 +*** ibm-1026 +*** 1025 X IBMCCSID01025 ibm-1025 +*** 1019 X IBMCCSID01019 ibm-1019 +*** 1018 X IBMCCSID01018 ibm-1018 +*** 1017 X IBMCCSID01017 ibm-1017 +*** 1016 X IBMCCSID01016 ibm-1016 +*** 1015 X IBMCCSID01015 ibm-1015 +*** 1014 X IBMCCSID01014 ibm-1014 +*** 1013 X IBMCCSID01013 ibm-1013 +*** 1012 X IBMCCSID01012 ibm-1012 +*** 1011 X IBMCCSID01011 ibm-1011 +*** 1010 X IBMCCSID01010 ibm-1010 +*** 1009 X IBMCCSID01009 ibm-1009 +*** 1008 IBMCCSID01008 ibm-1008 +*** 970 X csEUCKR EUC-KR iana-38 IBMCCSID00970 ibm-970 +*** 965 X IBMCCSID00965 ibm-965 +*** 964 X IBMCCSID00964 ibm-964 +*** 959 X IBMCCSID00959 ibm-959 +*** 958 X IBMCCSID00958 ibm-958 +*** 957 X IBMCCSID00957 ibm-957 +*** 956 X IBMCCSID00956 ibm-956 +*** 951 X IBMCCSID00951 ibm-951 +*** 950 X IBMCCSID00950 ibm-950 +*** 949 X IBMCCSID00949 ibm-949 +*** 947 X IBMCCSID00947 ibm-947 +*** 946 X IBMCCSID00946 ibm-946 +*** 944 X IBMCCSID00944 ibm-944 +*** 943 X csShiftJIS MS_Kanji Shift_JIS iana-17 IBMCCSID00943 +*** ibm-943 +*** 942 X IBMCCSID00942 ibm-942 +*** 939 X IBMCCSID00939 ibm-939 +*** 938 X IBMCCSID00938 ibm-938 +*** 937 X IBMCCSID00937 ibm-937 +*** 936 IBMCCSID00936 ibm-936 +*** 935 X IBMCCSID00935 ibm-935 +*** 934 X IBMCCSID00934 ibm-934 +*** 933 X IBMCCSID00933 ibm-933 +*** 932 X IBMCCSID00932 ibm-932 +*** 930 X IBMCCSID00930 ibm-930 +*** 928 X IBMCCSID00928 ibm-928 +*** 927 X IBMCCSID00927 ibm-927 +*** 926 X IBMCCSID00926 ibm-926 +*** 924 X csIBM00924 ebcdic-Latin9--euro CP00924 CCSID00924 +*** IBM00924 iana-2090 IBMCCSID00924 ibm-924 +*** 923 X csISO885915 Latin-9 ISO_8859-15 ISO-8859-15 iana-111 +*** IBMCCSID00923 ibm-923 +*** 922 X IBMCCSID00922 ibm-922 +*** 921 X csISO885913 ISO-8859-13 iana-109 IBMCCSID00921 ibm-921 +*** 920 X csISOLatin5 l5 latin5 ISO_8859-9 iso-ir-148 +*** ISO_8859-9:1989 ISO-8859-9 iana-12 IBMCCSID00920 +*** ibm-920 +*** 918 X csIBM918 ebcdic-cp-ar2 CP918 IBM918 iana-2062 +*** IBMCCSID00918 ibm-918 +*** 916 X csISOLatinHebrew hebrew ISO_8859-8 iso-ir-138 +*** ISO_8859-8:1988 ISO-8859-8 iana-11 IBMCCSID00916 +*** ibm-916 +*** 915 X csISOLatinCyrillic cyrillic ISO_8859-5 iso-ir-144 +*** ISO_8859-5:1988 ISO-8859-5 iana-8 IBMCCSID00915 +*** ibm-915 +*** 914 X csISOLatin4 l4 latin4 ISO_8859-4 iso-ir-110 +*** ISO_8859-4:1988 ISO-8859-4 iana-7 IBMCCSID00914 +*** ibm-914 +*** 913 csISOLatin3 l3 latin3 ISO_8859-3 iso-ir-109 +*** ISO_8859-3:1988 ISO-8859-3 iana-6 IBMCCSID00913 +*** ibm-913 +*** 912 X csISOLatin2 l2 latin2 ISO_8859-2 iso-ir-101 +*** ISO_8859-2:1987 ISO-8859-2 iana-5 IBMCCSID00912 +*** ibm-912 +*** 905 X csIBM905 ebcdic-cp-tr CP905 IBM905 iana-2061 +*** IBMCCSID00905 ibm-905 +*** 904 csIBBM904 904 cp904 IBM904 iana-2060 IBMCCSID00904 +*** ibm-904 +*** 903 csIBM903 cp903 IBM903 iana-2059 IBMCCSID00903 ibm-903 +*** 897 X csHalfWidthKatakana X0201 JIS_X0201 iana-15 +*** IBMCCSID00897 ibm-897 +*** 896 IBMCCSID00896 ibm-896 +*** 891 X csIBM891 cp891 IBM891 iana-2058 IBMCCSID00891 ibm-891 +*** 880 X csIBM880 EBCDIC-Cyrillic cp880 IBM880 iana-2057 +*** IBMCCSID00880 ibm-880 +*** 878 X csKOI8R KOI8-R iana-2084 IBMCCSID00878 ibm-878 +*** 875 X IBMCCSID00875 ibm-875 +*** 874 X csTIS620 TIS-620 csEUCTH eucTH EUC-TH> iana-2259 +*** IBMCCSID00874 ibm-874 +*** 871 X csIBM871 ebcdic-cp-is CP871 IBM871 iana-2056 +*** IBMCCSID00871 ibm-871 +*** 870 X csIBM870 ebcdic-cp-yu ebcdic-cp-roece CP870 IBM870 +*** iana-2055 IBMCCSID00870 ibm-870 +*** 869 X csIBM869 cp-gr 869 cp869 IBM869 iana-2054 +*** IBMCCSID00869 ibm-869 +*** 868 X csIBM868 cp-ar CP868 IBM868 iana-2053 IBMCCSID00868 +*** ibm-868 +*** 866 X csIBM866 866 cp866 IBM866 iana-2086 IBMCCSID00866 +*** ibm-866 +*** 865 X csIBM865 865 cp865 IBM865 iana-2052 IBMCCSID00865 +*** ibm-865 +*** 864 X csIBM864 cp864 IBM864 iana-2051 IBMCCSID00864 ibm-864 +*** 863 X csIBM863 863 cp863 IBM863 iana-2050 IBMCCSID00863 +*** ibm-863 +*** 862 X csPC862LatinHebrew 862 cp862 IBM862 iana-2013 +*** IBMCCSID00862 ibm-862 +*** 861 X csIBM861 cp-is 861 cp861 IBM861 iana-2049 +*** IBMCCSID00861 ibm-861 +*** 860 X csIBM860 860 cp860 IBM860 iana-2048 IBMCCSID00860 +*** ibm-860 +*** 858 csIBM00858 PC-Multilingual-850+euro CP00858 CCSID00858 +*** IBM00858 iana-2089 IBMCCSID00858 ibm-858 +*** 857 X csIBM857 857 cp857 IBM857 iana-2047 IBMCCSID00857 +*** ibm-857 +*** 855 X csIBM855 855 cp855 IBM855 iana-2046 IBMCCSID00855 +*** ibm-855 +*** 852 X csPCp852 852 cp852 IBM852 iana-2010 IBMCCSID00852 +*** ibm-852 +*** 851 X csIBM851 851 cp851 IBM851 iana-2045 IBMCCSID00851 +*** ibm-851 +*** 850 X csPC850Multilingual 850 cp850 IBM850 iana-2009 +*** IBMCCSID00850 ibm-850 +*** 838 X csIBMThai IBM-Thai iana-2016 IBMCCSID00838 ibm-838 +*** 837 X IBMCCSID00837 ibm-837 +*** 836 X IBMCCSID00836 ibm-836 +*** 835 X IBMCCSID00835 ibm-835 +*** 833 X IBMCCSID00833 ibm-833 +*** 819 X csISOLatin1 CP819 IBM819 l1 latin1 ISO_8859-1 +*** iso-ir-100 ISO_8859-1:1987 ISO-8859-1 iana-4 +*** IBMCCSID00819 ibm-819 +*** 813 X csISOLatinGreek greek8 greek ECMA-118 ELOT_928 +*** ISO_8859-7 iso-ir-126 ISO_8859-7:1987 ISO-8859-7 +*** iana-10 IBMCCSID00813 ibm-813 +*** 775 X csPC775Baltic cp775 IBM775 iana-2087 IBMCCSID00775 +*** ibm-775 +*** 737 X IBMCCSID00737 ibm-737 +*** 720 X IBMCCSID00720 ibm-720 +*** 500 X csIBM500 ebcdic-cp-ch ebcdic-cp-be CP500 IBM500 +*** iana-2044 IBMCCSID00500 ibm-500 +*** 437 X csPC8CodePage437 437 cp437 IBM437 iana-2011 +*** IBMCCSID00437 ibm-437 +*** 424 X csIBM424 ebcdic-cp-he cp424 IBM424 iana-2043 +*** IBMCCSID00424 ibm-424 +*** 423 X csIBM423 ebcdic-cp-gr cp423 IBM423 iana-2042 +*** IBMCCSID00423 ibm-423 +*** 420 X csIBM420 ebcdic-cp-ar1 cp420 IBM420 iana-2041 +*** IBMCCSID00420 ibm-420 +*** 367 X csASCII cp367 IBM367 us ISO646-US ISO_646.irv:1991 +*** ANSI_X3.4-1986 ANSI_X3.4-1968 iso-ir-6 US-ASCII ASCII +*** iana-3 IBMCCSID00367 ibm-367 +*** 301 X IBMCCSID00301 ibm-301 +*** 300 X IBMCCSID00300 ibm-300 +*** 297 X csIBM297 ebcdic-cp-fr cp297 IBM297 iana-2040 +*** IBMCCSID00297 ibm-297 +*** 290 X csIBM290 EBCDIC-JP-kana cp290 IBM290 iana-2039 +*** IBMCCSID00290 ibm-290 +*** 285 X csIBM285 ebcdic-cp-gb CP285 IBM285 iana-2038 +*** IBMCCSID00285 ibm-285 +*** 284 X csIBM284 ebcdic-cp-es CP284 IBM284 iana-2037 +*** IBMCCSID00284 ibm-284 +*** 280 X csIBM280 ebcdic-cp-it CP280 IBM280 iana-2035 +*** IBMCCSID00280 ibm-280 +*** 278 X csIBM278 ebcdic-cp-se ebcdic-cp-fi CP278 IBM278 +*** iana-2034 IBMCCSID00278 ibm-278 +*** 277 X csIBM277 EBCDIC-CP-NO EBCDIC-CP-DK IBM277 iana-2033 +*** IBMCCSID00277 ibm-277 +*** 273 X csIBM273 CP273 IBM273 iana-2030 IBMCCSID00273 ibm-273 +*** 256 X IBMCCSID00256 ibm-256 +*** 37 X csIBM037 ebcdic-cp-nl ebcdic-cp-wt ebcdic-cp-ca +*** ebcdic-cp-us cp037 IBM037 EBCDIC iana-2028 +*** IBMCCSID00037 ibm-37 +*** 0 IBMCCSID00000 ibm-0 +**/ + +/** +*** 13499 states, 229 finals, 20020 transitions. +**/ + +typedef unsigned short t_ccsid; +typedef unsigned short t_staterange; +typedef unsigned short t_transrange; + +static t_transrange trans_array[] = { + 0, 90, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 92, 93, 94, + 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, + 111, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, + 130, 137, 138, 139, 141, 142, 143, 144, 145, 146, 147, 148, 150, 151, 153, + 154, 156, 157, 159, 160, 162, 163, 165, 166, 168, 169, 171, 172, 173, 174, + 176, 177, 179, 180, 182, 183, 185, 186, 188, 189, 191, 192, 194, 195, 197, + 198, 199, 200, 202, 203, 205, 206, 208, 209, 210, 211, 212, 213, 214, 215, + 216, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 233, 234, 235, 236, 238, 239, 241, 242, 243, 245, 246, 248, 249, 251, 252, + 254, 256, 257, 259, 260, 261, 262, 263, 264, 265, 266, 267, 269, 270, 271, + 275, 276, 277, 278, 279, 287, 288, 289, 291, 292, 294, 295, 297, 298, 300, + 301, 303, 304, 305, 306, 307, 308, 310, 311, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 357, 358, + 359, 360, 361, 362, 363, 365, 366, 367, 368, 370, 371, 373, 374, 376, 377, + 378, 380, 381, 383, 384, 386, 387, 389, 390, 392, 393, 394, 396, 398, 400, + 401, 402, 403, 409, 410, 411, 412, 413, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 429, 430, 431, 432, 433, 434, 435, 438, 439, 440, + 441, 442, 444, 445, 446, 447, 450, 451, 452, 453, 454, 455, 456, 457, 458, + 459, 462, 463, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 477, 478, 479, 480, 489, 490, 491, 492, 493, 495, 496, 497, 498, 499, 500, + 501, 502, 503, 504, 505, 506, 512, 513, 514, 515, 516, 519, 520, 521, 522, + 523, 524, 525, 526, 527, 528, 531, 532, 533, 534, 535, 536, 537, 538, 539, + 540, 541, 551, 553, 554, 556, 557, 559, 560, 562, 563, 565, 566, 568, 569, + 571, 572, 574, 575, 577, 578, 580, 581, 583, 585, 586, 587, 591, 592, 593, + 595, 596, 598, 599, 600, 602, 603, 604, 606, 607, 609, 610, 612, 613, 615, + 616, 618, 619, 621, 622, 624, 625, 627, 628, 630, 631, 633, 634, 636, 637, + 639, 640, 642, 643, 644, 646, 647, 648, 649, 655, 656, 658, 659, 661, 662, + 663, 664, 665, 666, 667, 668, 669, 672, 673, 675, 676, 677, 679, 680, 682, + 683, 685, 686, 688, 689, 691, 692, 694, 695, 697, 698, 700, 701, 703, 704, + 706, 707, 709, 710, 712, 713, 715, 716, 718, 719, 721, 722, 723, 724, 725, + 727, 728, 730, 731, 733, 734, 736, 737, 739, 740, 741, 745, 746, 747, 748, + 750, 751, 752, 753, 754, 756, 757, 758, 759, 760, 763, 764, 767, 768, 771, + 779, 780, 781, 786, 788, 789, 791, 792, 793, 795, 796, 798, 799, 801, 802, + 803, 804, 805, 806, 807, 816, 817, 818, 822, 823, 824, 825, 826, 827, 828, + 829, 830, 831, 832, 833, 834, 836, 837, 839, 840, 841, 842, 843, 844, 845, + 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 861, 862, + 863, 865, 866, 868, 869, 871, 872, 874, 875, 877, 878, 880, 881, 883, 884, + 885, 887, 888, 890, 891, 893, 894, 896, 897, 898, 900, 901, 903, 904, 906, + 907, 909, 910, 912, 913, 914, 915, 916, 917, 918, 919, 920, 933, 934, 936, + 937, 939, 940, 942, 943, 945, 946, 947, 948, 952, 953, 955, 956, 957, 961, + 962, 963, 965, 966, 967, 968, 970, 971, 972, 973, 974, 975, 976, 977, 978, + 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 990, 991, 992, 996, 998, + 999, 1001, 1002, 1004, 1005, 1007, 1008, 1010, 1011, 1013, 1014, 1015, 1016, + 1017, 1019, 1020, 1022, 1023, 1025, 1026, 1028, 1029, 1031, 1032, 1034, 1035, + 1037, 1038, 1040, 1041, 1043, 1044, 1046, 1047, 1049, 1050, 1052, 1053, 1054, + 1056, 1057, 1059, 1060, 1062, 1063, 1065, 1066, 1068, 1069, 1071, 1072, 1074, + 1075, 1077, 1078, 1080, 1081, 1083, 1084, 1086, 1087, 1088, 1089, 1090, 1091, + 1093, 1094, 1096, 1097, 1099, 1100, 1102, 1103, 1105, 1106, 1108, 1109, 1111, + 1112, 1113, 1114, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1130, + 1131, 1133, 1134, 1135, 1137, 1138, 1140, 1141, 1143, 1144, 1146, 1147, 1149, + 1150, 1152, 1153, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, 1166, + 1167, 1168, 1170, 1171, 1173, 1174, 1176, 1177, 1179, 1180, 1182, 1183, 1184, + 1186, 1187, 1188, 1190, 1191, 1192, 1196, 1197, 1198, 1199, 1200, 1202, 1203, + 1204, 1206, 1207, 1208, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1221, 1222, + 1224, 1225, 1226, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1239, + 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1257, 1258, 1259, 1260, + 1261, 1262, 1263, 1264, 1265, 1267, 1268, 1270, 1271, 1273, 1274, 1276, 1277, + 1279, 1280, 1282, 1283, 1284, 1285, 1286, 1288, 1289, 1291, 1292, 1294, 1295, + 1297, 1298, 1300, 1301, 1303, 1304, 1306, 1307, 1308, 1309, 1310, 1311, 1312, + 1313, 1314, 1315, 1316, 1317, 1318, 1342, 1343, 1344, 1346, 1347, 1349, 1350, + 1352, 1353, 1355, 1356, 1358, 1359, 1361, 1362, 1363, 1364, 1365, 1366, 1376, + 1378, 1379, 1381, 1383, 1387, 1389, 1391, 1395, 1399, 1401, 1405, 1409, 1411, + 1412, 1414, 1415, 1417, 1418, 1420, 1422, 1424, 1426, 1428, 1430, 1431, 1432, + 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, + 1446, 1478, 1479, 1480, 1482, 1483, 1485, 1486, 1488, 1489, 1491, 1492, 1494, + 1495, 1497, 1498, 1499, 1503, 1505, 1506, 1508, 1509, 1511, 1512, 1514, 1515, + 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1526, 1527, 1529, 1530, + 1532, 1533, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, + 1546, 1547, 1551, 1553, 1554, 1556, 1557, 1559, 1560, 1562, 1563, 1564, 1565, + 1566, 1567, 1568, 1569, 1570, 1571, 1572, 1573, 1575, 1577, 1578, 1580, 1581, + 1583, 1584, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, + 1598, 1599, 1601, 1602, 1604, 1605, 1607, 1608, 1609, 1610, 1611, 1612, 1613, + 1614, 1615, 1616, 1617, 1618, 1619, 1623, 1625, 1626, 1628, 1629, 1631, 1632, + 1634, 1635, 1636, 1637, 1638, 1639, 1640, 1641, 1642, 1643, 1644, 1645, 1647, + 1649, 1650, 1652, 1653, 1655, 1656, 1658, 1659, 1660, 1661, 1662, 1663, 1664, + 1665, 1666, 1667, 1668, 1669, 1671, 1672, 1674, 1675, 1677, 1678, 1680, 1681, + 1683, 1684, 1686, 1687, 1689, 1690, 1692, 1693, 1695, 1696, 1698, 1699, 1701, + 1703, 1704, 1706, 1707, 1709, 1710, 1712, 1713, 1714, 1715, 1716, 1717, 1718, + 1719, 1720, 1721, 1722, 1724, 1725, 1727, 1728, 1730, 1731, 1733, 1734, 1735, + 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1752, 1754, + 1755, 1757, 1758, 1760, 1761, 1763, 1764, 1765, 1766, 1768, 1770, 1771, 1773, + 1774, 1776, 1777, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1788, 1789, + 1791, 1792, 1794, 1795, 1797, 1799, 1801, 1803, 1804, 1806, 1807, 1809, 1810, + 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1823, 1824, 1825, + 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1856, 1857, 1859, 1860, + 1862, 1863, 1865, 1866, 1868, 1869, 1871, 1873, 1874, 1875, 1876, 1877, 1878, + 1879, 1880, 1882, 1883, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, + 1895, 1896, 1898, 1900, 1902, 1903, 1904, 1906, 1907, 1908, 1909, 1917, 1918, + 1921, 1922, 1924, 1925, 1926, 1928, 1929, 1931, 1932, 1934, 1935, 1936, 1937, + 1939, 1940, 1942, 1943, 1945, 1946, 1948, 1949, 1951, 1952, 1954, 1955, 1956, + 1957, 1959, 1960, 1962, 1963, 1965, 1966, 1968, 1969, 1971, 1972, 1974, 1975, + 1976, 1977, 1979, 1980, 1982, 1983, 1985, 1986, 1988, 1989, 1990, 1991, 1993, + 1994, 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2007, 2008, 2010, 2011, + 2013, 2014, 2016, 2017, 2019, 2020, 2022, 2023, 2024, 2025, 2026, 2027, 2037, + 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2051, 2053, 2054, + 2056, 2057, 2059, 2060, 2062, 2063, 2064, 2068, 2069, 2070, 2074, 2075, 2079, + 2080, 2081, 2086, 2089, 2090, 2091, 2092, 2093, 2099, 2104, 2108, 2110, 2117, + 2127, 2137, 2141, 2145, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, + 2164, 2173, 2176, 2177, 2178, 2188, 2189, 2190, 2191, 2192, 2193, 2196, 2199, + 2201, 2202, 2203, 2204, 2205, 2214, 2215, 2216, 2217, 2219, 2220, 2222, 2223, + 2224, 2225, 2226, 2227, 2229, 2230, 2231, 2232, 2233, 2234, 2235, 2236, 2237, + 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2259, + 2260, 2261, 2262, 2263, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, + 2275, 2276, 2282, 2283, 2284, 2285, 2287, 2288, 2289, 2290, 2291, 2293, 2294, + 2295, 2296, 2297, 2298, 2299, 2300, 2307, 2308, 2309, 2310, 2311, 2312, 2313, + 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2325, 2326, 2327, 2328, 2329, 2330, + 2331, 2332, 2333, 2337, 2338, 2339, 2340, 2341, 2342, 2343, 2344, 2345, 2346, + 2347, 2348, 2349, 2355, 2356, 2357, 2358, 2359, 2361, 2362, 2363, 2364, 2365, + 2366, 2372, 2375, 2377, 2378, 2379, 2380, 2381, 2382, 2383, 2384, 2385, 2386, + 2387, 2388, 2389, 2390, 2391, 2400, 2401, 2402, 2403, 2404, 2405, 2406, 2409, + 2410, 2411, 2412, 2413, 2414, 2415, 2416, 2417, 2421, 2422, 2423, 2424, 2425, + 2426, 2431, 2432, 2433, 2434, 2435, 2437, 2438, 2439, 2440, 2441, 2442, 2443, + 2444, 2446, 2447, 2448, 2450, 2451, 2452, 2453, 2454, 2455, 2456, 2461, 2462, + 2463, 2464, 2465, 2467, 2468, 2469, 2470, 2471, 2472, 2473, 2479, 2480, 2481, + 2482, 2483, 2484, 2485, 2486, 2487, 2488, 2489, 2490, 2491, 2496, 2497, 2498, + 2499, 2500, 2501, 2502, 2503, 2504, 2506, 2507, 2508, 2509, 2510, 2511, 2512, + 2516, 2517, 2518, 2522, 2523, 2524, 2525, 2526, 2528, 2529, 2530, 2531, 2532, + 2533, 2534, 2535, 2539, 2540, 2541, 2542, 2543, 2545, 2546, 2547, 2548, 2549, + 2550, 2551, 2552, 2553, 2554, 2557, 2558, 2559, 2560, 2561, 2563, 2564, 2565, + 2566, 2567, 2568, 2569, 2570, 2574, 2575, 2576, 2579, 2580, 2581, 2582, 2583, + 2584, 2585, 2586, 2587, 2588, 2589, 2590, 2591, 2592, 2593, 2594, 2595, 2600, + 2601, 2602, 2603, 2607, 2608, 2609, 2610, 2611, 2612, 2616, 2618, 2619, 2620, + 2622, 2623, 2624, 2625, 2626, 2627, 2628, 2629, 2630, 2631, 2632, 2633, 2634, + 2635, 2636, 2637, 2642, 2643, 2644, 2645, 2646, 2647, 2648, 2649, 2650, 2651, + 2652, 2653, 2654, 2655, 2656, 2657, 2658, 2659, 2660, 2661, 2662, 2663, 2664, + 2665, 2669, 2670, 2671, 2672, 2673, 2675, 2676, 2677, 2678, 2679, 2680, 2681, + 2682, 2683, 2686, 2688, 2689, 2690, 2691, 2692, 2693, 2694, 2695, 2696, 2701, + 2707, 2708, 2709, 2711, 2712, 2721, 2722, 2723, 2728, 2729, 2730, 2733, 2734, + 2735, 2736, 2737, 2738, 2739, 2746, 2747, 2748, 2750, 2751, 2752, 2754, 2755, + 2756, 2757, 2758, 2759, 2760, 2764, 2770, 2771, 2772, 2773, 2774, 2775, 2776, + 2777, 2778, 2786, 2787, 2788, 2789, 2790, 2791, 2792, 2793, 2794, 2795, 2796, + 2797, 2798, 2799, 2800, 2801, 2802, 2803, 2804, 2813, 2814, 2818, 2819, 2820, + 2821, 2822, 2823, 2824, 2825, 2826, 2832, 2833, 2834, 2835, 2836, 2837, 2838, + 2839, 2840, 2841, 2842, 2843, 2844, 2850, 2851, 2852, 2853, 2854, 2856, 2857, + 2858, 2859, 2860, 2861, 2862, 2863, 2864, 2865, 2873, 2874, 2875, 2876, 2877, + 2878, 2879, 2880, 2881, 2882, 2883, 2895, 2897, 2898, 2899, 2900, 2901, 2903, + 2904, 2907, 2910, 2912, 2913, 2914, 2915, 2916, 2920, 2922, 2923, 2924, 2925, + 2927, 2930, 2931, 2932, 2933, 2935, 2936, 2937, 2938, 2939, 2940, 2941, 2942, + 2943, 2944, 2947, 2949, 2954, 2960, 2969, 2974, 2975, 2978, 2979, 2980, 2981, + 2982, 2983, 2984, 2985, 2992, 2995, 3001, 3009, 3018, 3024, 3030, 3032, 3033, + 3034, 3035, 3036, 3037, 3038, 3039, 3040, 3041, 3049, 3050, 3051, 3052, 3053, + 3054, 3055, 3056, 3057, 3065, 3067, 3077, 3080, 3086, 3087, 3089, 3091, 3092, + 3093, 3094, 3095, 3096, 3097, 3098, 3105, 3108, 3111, 3115, 3125, 3131, 3133, + 3134, 3135, 3136, 3137, 3138, 3139, 3145, 3148, 3150, 3159, 3161, 3165, 3166, + 3167, 3168, 3169, 3170, 3175, 3177, 3179, 3184, 3186, 3187, 3188, 3189, 3190, + 3194, 3195, 3196, 3197, 3198, 3202, 3203, 3204, 3205, 3206, 3209, 3211, 3212, + 3213, 3214, 3215, 3216, 3220, 3221, 3222, 3224, 3225, 3226, 3231, 3232, 3233, + 3234, 3237, 3238, 3239, 3240, 3244, 3246, 3247, 3248, 3250, 3251, 3252, 3253, + 3254, 3255, 3256, 3257, 3261, 3262, 3263, 3264, 3265, 3266, 3267, 3268, 3269, + 3270, 3271, 3272, 3275, 3278, 3279, 3280, 3281, 3282, 3284, 3285, 3286, 3287, + 3288, 3289, 3290, 3296, 3297, 3298, 3299, 3300, 3301, 3303, 3304, 3305, 3306, + 3307, 3308, 3309, 3310, 3312, 3313, 3314, 3315, 3316, 3317, 3318, 3319, 3320, + 3323, 3324, 3325, 3326, 3327, 3328, 3329, 3330, 3331, 3332, 3333, 3334, 3335, + 3337, 3338, 3339, 3340, 3341, 3342, 3343, 3344, 3345, 3346, 3347, 3348, 3349, + 3350, 3351, 3352, 3353, 3354, 3355, 3356, 3357, 3358, 3359, 3360, 3361, 3362, + 3363, 3364, 3368, 3369, 3370, 3371, 3372, 3374, 3375, 3376, 3377, 3378, 3379, + 3380, 3386, 3387, 3389, 3390, 3392, 3393, 3395, 3396, 3398, 3399, 3400, 3401, + 3413, 3414, 3416, 3417, 3418, 3419, 3420, 3422, 3423, 3425, 3426, 3428, 3429, + 3430, 3431, 3432, 3433, 3434, 3435, 3436, 3437, 3438, 3439, 3440, 3441, 3442, + 3444, 3445, 3447, 3448, 3450, 3451, 3453, 3454, 3456, 3457, 3458, 3459, 3460, + 3461, 3462, 3463, 3464, 3465, 3466, 3467, 3469, 3470, 3472, 3473, 3475, 3476, + 3478, 3479, 3481, 3482, 3484, 3485, 3487, 3488, 3492, 3493, 3494, 3495, 3496, + 3498, 3499, 3501, 3502, 3504, 3505, 3507, 3508, 3510, 3511, 3512, 3513, 3515, + 3516, 3518, 3519, 3521, 3522, 3524, 3525, 3527, 3528, 3530, 3531, 3533, 3534, + 3536, 3537, 3538, 3547, 3548, 3549, 3550, 3551, 3552, 3553, 3554, 3555, 3558, + 3559, 3561, 3562, 3565, 3566, 3567, 3568, 3569, 3570, 3575, 3576, 3579, 3580, + 3581, 3582, 3584, 3585, 3586, 3587, 3591, 3593, 3594, 3596, 3597, 3598, 3599, + 3600, 3601, 3602, 3603, 3604, 3605, 3606, 3607, 3608, 3609, 3610, 3611, 3612, + 3614, 3615, 3617, 3618, 3620, 3621, 3622, 3623, 3624, 3625, 3626, 3627, 3628, + 3629, 3630, 3631, 3632, 3633, 3634, 3637, 3638, 3639, 3640, 3641, 3642, 3643, + 3644, 3645, 3647, 3648, 3649, 3650, 3651, 3652, 3653, 3654, 3655, 3657, 3658, + 3659, 3660, 3661, 3662, 3663, 3664, 3665, 3667, 3668, 3669, 3670, 3671, 3672, + 3673, 3674, 3675, 3677, 3678, 3679, 3680, 3681, 3682, 3683, 3684, 3685, 3687, + 3688, 3689, 3690, 3691, 3692, 3693, 3694, 3695, 3697, 3698, 3699, 3700, 3701, + 3702, 3703, 3705, 3706, 3707, 3708, 3709, 3710, 3711, 3712, 3713, 3715, 3716, + 3717, 3718, 3719, 3720, 3721, 3722, 3723, 3724, 3733, 3734, 3735, 3736, 3737, + 3738, 3739, 3740, 3741, 3742, 3743, 3745, 3746, 3747, 3748, 3751, 3752, 3754, + 3755, 3756, 3757, 3763, 3764, 3765, 3766, 3767, 3768, 3769, 3770, 3771, 3773, + 3774, 3775, 3776, 3778, 3779, 3781, 3782, 3783, 3784, 3786, 3787, 3789, 3790, + 3792, 3793, 3794, 3798, 3799, 3800, 3801, 3802, 3803, 3804, 3805, 3806, 3807, + 3809, 3810, 3811, 3812, 3813, 3814, 3815, 3816, 3817, 3818, 3819, 3820, 3821, + 3822, 3823, 3824, 3825, 3826, 3827, 3828, 3830, 3831, 3832, 3835, 3836, 3837, + 3841, 3842, 3843, 3849, 3850, 3852, 3853, 3855, 3856, 3858, 3859, 3866, 3867, + 3869, 3870, 3872, 3873, 3875, 3876, 3878, 3879, 3881, 3882, 3883, 3885, 3886, + 3888, 3890, 3891, 3893, 3894, 3896, 3897, 3899, 3900, 3901, 3902, 3903, 3904, + 3905, 3906, 3907, 3908, 3909, 3910, 3912, 3913, 3915, 3916, 3918, 3919, 3921, + 3922, 3924, 3925, 3927, 3928, 3930, 3931, 3933, 3934, 3936, 3937, 3939, 3940, + 3942, 3943, 3945, 3946, 3947, 3948, 3950, 3953, 3954, 3955, 3957, 3958, 3960, + 3961, 3963, 3964, 3966, 3967, 3968, 3970, 3971, 3973, 3975, 3976, 3978, 3980, + 3981, 3983, 3984, 3986, 3991, 3992, 3993, 3998, 3999, 4000, 4001, 4002, 4005, + 4006, 4010, 4011, 4013, 4014, 4015, 4016, 4022, 4024, 4025, 4026, 4027, 4029, + 4030, 4032, 4033, 4035, 4036, 4038, 4039, 4041, 4042, 4044, 4045, 4046, 4047, + 4048, 4049, 4050, 4051, 4052, 4053, 4054, 4055, 4056, 4057, 4058, 4059, 4060, + 4061, 4062, 4063, 4064, 4065, 4066, 4067, 4068, 4069, 4074, 4075, 4076, 4083, + 4084, 4085, 4086, 4087, 4089, 4090, 4091, 4092, 4093, 4094, 4095, 4096, 4097, + 4098, 4100, 4101, 4102, 4103, 4105, 4106, 4107, 4108, 4110, 4111, 4112, 4113, + 4115, 4116, 4117, 4118, 4120, 4121, 4122, 4123, 4125, 4126, 4127, 4128, 4130, + 4131, 4132, 4133, 4135, 4136, 4137, 4138, 4139, 4140, 4141, 4142, 4144, 4145, + 4146, 4147, 4149, 4150, 4151, 4152, 4154, 4155, 4156, 4157, 4159, 4160, 4161, + 4162, 4164, 4165, 4166, 4167, 4169, 4170, 4171, 4172, 4174, 4175, 4176, 4177, + 4179, 4180, 4181, 4182, 4183, 4184, 4185, 4186, 4188, 4189, 4190, 4191, 4193, + 4194, 4195, 4196, 4198, 4199, 4200, 4201, 4202, 4203, 4204, 4205, 4206, 4207, + 4208, 4210, 4211, 4212, 4213, 4214, 4215, 4216, 4217, 4218, 4219, 4220, 4221, + 4222, 4223, 4224, 4225, 4226, 4227, 4228, 4229, 4230, 4231, 4232, 4233, 4234, + 4235, 4236, 4237, 4239, 4240, 4241, 4242, 4243, 4244, 4245, 4246, 4248, 4249, + 4250, 4251, 4253, 4254, 4255, 4257, 4258, 4259, 4260, 4262, 4263, 4264, 4265, + 4267, 4268, 4269, 4270, 4272, 4273, 4274, 4276, 4277, 4278, 4279, 4281, 4282, + 4283, 4284, 4285, 4286, 4287, 4288, 4289, 4290, 4291, 4292, 4293, 4294, 4295, + 4296, 4297, 4298, 4299, 4301, 4302, 4303, 4304, 4305, 4309, 4310, 4311, 4312, + 4313, 4314, 4315, 4323, 4324, 4325, 4327, 4328, 4329, 4330, 4332, 4333, 4334, + 4335, 4337, 4338, 4339, 4340, 4342, 4343, 4344, 4345, 4347, 4348, 4349, 4350, + 4351, 4352, 4353, 4354, 4355, 4356, 4357, 4358, 4360, 4361, 4362, 4363, 4365, + 4366, 4367, 4368, 4369, 4370, 4371, 4372, 4373, 4374, 4375, 4376, 4377, 4378, + 4379, 4380, 4381, 4382, 4383, 4385, 4386, 4387, 4397, 4398, 4399, 4400, 4401, + 4402, 4403, 4404, 4405, 4406, 4407, 4408, 4409, 4411, 4412, 4413, 4414, 4415, + 4416, 4417, 4418, 4420, 4421, 4422, 4423, 4425, 4426, 4427, 4428, 4430, 4431, + 4432, 4434, 4435, 4436, 4437, 4439, 4440, 4441, 4442, 4444, 4445, 4446, 4447, + 4449, 4450, 4451, 4452, 4454, 4455, 4456, 4458, 4459, 4460, 4462, 4463, 4464, + 4466, 4467, 4468, 4469, 4470, 4471, 4477, 4478, 4479, 4480, 4481, 4482, 4483, + 4486, 4487, 4488, 4489, 4490, 4491, 4492, 4493, 4494, 4495, 4496, 4497, 4498, + 4499, 4501, 4502, 4503, 4506, 4507, 4508, 4510, 4511, 4512, 4513, 4514, 4515, + 4518, 4519, 4520, 4521, 4522, 4523, 4524, 4525, 4526, 4527, 4530, 4531, 4532, + 4533, 4535, 4536, 4537, 4538, 4539, 4540, 4541, 4542, 4543, 4544, 4545, 4546, + 4547, 4548, 4549, 4550, 4551, 4552, 4553, 4554, 4563, 4564, 4565, 4567, 4568, + 4569, 4570, 4571, 4572, 4573, 4574, 4575, 4576, 4577, 4578, 4579, 4580, 4586, + 4587, 4588, 4591, 4592, 4593, 4594, 4595, 4596, 4597, 4598, 4599, 4600, 4601, + 4602, 4605, 4606, 4607, 4608, 4609, 4610, 4611, 4612, 4613, 4614, 4615, 4616, + 4617, 4627, 4628, 4629, 4631, 4632, 4633, 4634, 4636, 4637, 4638, 4639, 4641, + 4642, 4643, 4644, 4646, 4647, 4648, 4649, 4651, 4652, 4653, 4654, 4656, 4657, + 4658, 4659, 4661, 4662, 4663, 4664, 4666, 4667, 4668, 4669, 4671, 4672, 4673, + 4674, 4676, 4677, 4678, 4679, 4681, 4682, 4683, 4685, 4686, 4687, 4688, 4689, + 4693, 4694, 4695, 4696, 4697, 4698, 4699, 4701, 4702, 4703, 4704, 4706, 4707, + 4708, 4710, 4711, 4712, 4714, 4715, 4716, 4717, 4719, 4720, 4721, 4722, 4724, + 4725, 4726, 4727, 4729, 4730, 4731, 4732, 4734, 4735, 4736, 4737, 4739, 4740, + 4741, 4742, 4744, 4745, 4746, 4747, 4749, 4750, 4751, 4752, 4754, 4755, 4756, + 4757, 4759, 4760, 4761, 4762, 4764, 4765, 4766, 4767, 4769, 4770, 4771, 4772, + 4774, 4775, 4776, 4778, 4779, 4780, 4781, 4782, 4783, 4789, 4790, 4791, 4792, + 4794, 4795, 4796, 4797, 4799, 4800, 4801, 4802, 4803, 4804, 4805, 4806, 4807, + 4808, 4809, 4810, 4811, 4812, 4813, 4816, 4817, 4818, 4819, 4821, 4822, 4823, + 4825, 4826, 4827, 4828, 4830, 4831, 4832, 4833, 4835, 4836, 4837, 4838, 4840, + 4841, 4842, 4843, 4845, 4846, 4847, 4848, 4850, 4851, 4852, 4853, 4855, 4856, + 4857, 4858, 4860, 4861, 4862, 4863, 4865, 4866, 4867, 4868, 4870, 4871, 4872, + 4873, 4875, 4876, 4877, 4878, 4880, 4881, 4882, 4883, 4885, 4886, 4887, 4888, + 4890, 4891, 4892, 4893, 4895, 4896, 4897, 4898, 4899, 4900, 4901, 4903, 4904, + 4905, 4906, 4908, 4909, 4910, 4911, 4913, 4914, 4915, 4916, 4918, 4919, 4920, + 4921, 4923, 4924, 4925, 4926, 4927, 4931, 4932, 4933, 4934, 4935, 4936, 4937, + 4938, 4940, 4941, 4942, 4943, 4944, 4945, 4946, 4948, 4949, 4950, 4951, 4952, + 4953, 4954, 4957, 4958, 4959, 4960, 4963, 4964, 4965, 4966, 4967, 4968, 4971, + 4972, 4973, 4981, 4982, 4983, 4984, 4985, 4990, 4991, 4992, 4994, 4995, 4996, + 4997, 4999, 5000, 5001, 5003, 5004, 5005, 5006, 5008, 5009, 5010, 5011, 5013, + 5014, 5015, 5016, 5017, 5018, 5019, 5020, 5021, 5030, 5031, 5032, 5033, 5034, + 5038, 5039, 5040, 5041, 5042, 5043, 5044, 5045, 5046, 5047, 5048, 5049, 5050, + 5051, 5052, 5053, 5054, 5055, 5056, 5057, 5058, 5059, 5060, 5061, 5062, 5063, + 5064, 5066, 5067, 5068, 5069, 5071, 5072, 5073, 5074, 5075, 5076, 5077, 5079, + 5080, 5081, 5082, 5083, 5084, 5085, 5086, 5087, 5088, 5089, 5090, 5091, 5092, + 5093, 5094, 5095, 5096, 5097, 5099, 5100, 5101, 5103, 5104, 5105, 5106, 5108, + 5109, 5110, 5111, 5113, 5114, 5115, 5116, 5118, 5119, 5120, 5121, 5123, 5124, + 5125, 5126, 5128, 5129, 5130, 5131, 5133, 5134, 5135, 5137, 5138, 5139, 5140, + 5142, 5143, 5144, 5145, 5147, 5148, 5149, 5150, 5152, 5153, 5154, 5156, 5157, + 5158, 5159, 5161, 5162, 5163, 5164, 5166, 5167, 5168, 5169, 5171, 5172, 5173, + 5174, 5176, 5177, 5178, 5179, 5180, 5181, 5182, 5195, 5196, 5197, 5198, 5200, + 5201, 5202, 5203, 5205, 5206, 5207, 5208, 5210, 5211, 5212, 5213, 5215, 5216, + 5217, 5218, 5219, 5220, 5224, 5225, 5226, 5227, 5229, 5230, 5231, 5232, 5233, + 5237, 5238, 5239, 5241, 5242, 5243, 5244, 5245, 5246, 5247, 5248, 5250, 5251, + 5252, 5253, 5254, 5255, 5256, 5257, 5258, 5259, 5260, 5261, 5262, 5263, 5264, + 5265, 5266, 5267, 5268, 5269, 5270, 5271, 5272, 5273, 5274, 5275, 5276, 5277, + 5278, 5279, 5280, 5281, 5282, 5283, 5284, 5286, 5287, 5288, 5289, 5290, 5294, + 5295, 5296, 5298, 5299, 5300, 5301, 5303, 5304, 5305, 5306, 5308, 5309, 5310, + 5311, 5313, 5314, 5315, 5316, 5318, 5319, 5320, 5321, 5323, 5324, 5325, 5326, + 5327, 5328, 5329, 5330, 5331, 5332, 5333, 5335, 5336, 5337, 5338, 5340, 5341, + 5342, 5343, 5345, 5346, 5347, 5348, 5350, 5351, 5352, 5353, 5355, 5356, 5357, + 5358, 5360, 5361, 5362, 5363, 5365, 5366, 5367, 5368, 5370, 5371, 5372, 5373, + 5375, 5376, 5377, 5378, 5380, 5381, 5382, 5383, 5385, 5386, 5387, 5388, 5390, + 5391, 5392, 5393, 5394, 5395, 5396, 5398, 5399, 5400, 5401, 5403, 5404, 5405, + 5406, 5408, 5409, 5410, 5411, 5413, 5414, 5415, 5416, 5418, 5419, 5420, 5421, + 5423, 5424, 5425, 5426, 5428, 5429, 5430, 5431, 5433, 5434, 5435, 5436, 5438, + 5439, 5440, 5441, 5443, 5444, 5445, 5446, 5448, 5449, 5450, 5451, 5452, 5453, + 5454, 5455, 5456, 5457, 5458, 5459, 5461, 5462, 5463, 5464, 5466, 5467, 5468, + 5469, 5471, 5472, 5473, 5474, 5476, 5477, 5478, 5479, 5481, 5482, 5483, 5484, + 5486, 5487, 5488, 5489, 5491, 5492, 5493, 5494, 5495, 5496, 5500, 5501, 5502, + 5503, 5504, 5505, 5506, 5507, 5508, 5509, 5510, 5511, 5512, 5513, 5514, 5515, + 5516, 5520, 5521, 5522, 5523, 5525, 5526, 5527, 5529, 5530, 5531, 5532, 5534, + 5535, 5536, 5537, 5539, 5540, 5541, 5542, 5544, 5545, 5546, 5547, 5549, 5550, + 5551, 5552, 5554, 5555, 5556, 5557, 5559, 5560, 5561, 5562, 5563, 5564, 5565, + 5566, 5567, 5568, 5569, 5570, 5571, 5572, 5573, 5575, 5576, 5577, 5578, 5580, + 5581, 5582, 5584, 5585, 5586, 5587, 5589, 5590, 5591, 5592, 5594, 5595, 5596, + 5597, 5599, 5600, 5601, 5602, 5604, 5605, 5606, 5608, 5609, 5610, 5612, 5613, + 5614, 5615, 5616, 5620, 5621, 5622, 5623, 5624, 5625, 5626, 5628, 5629, 5630, + 5632, 5633, 5634, 5635, 5636, 5640, 5641, 5642, 5643, 5644, 5645, 5646, 5647, + 5648, 5651, 5652, 5653, 5654, 5656, 5657, 5658, 5659, 5660, 5664, 5665, 5666, + 5675, 5676, 5677, 5678, 5679, 5680, 5681, 5682, 5683, 5684, 5685, 5687, 5688, + 5689, 5690, 5692, 5693, 5694, 5695, 5697, 5698, 5699, 5700, 5702, 5703, 5704, + 5705, 5707, 5708, 5709, 5710, 5712, 5713, 5714, 5715, 5716, 5717, 5718, 5719, + 5720, 5722, 5723, 5724, 5725, 5727, 5728, 5729, 5730, 5732, 5733, 5734, 5735, + 5737, 5738, 5739, 5740, 5742, 5743, 5744, 5745, 5747, 5748, 5749, 5750, 5752, + 5753, 5754, 5755, 5756, 5757, 5758, 5759, 5760, 5761, 5762, 5763, 5764, 5765, + 5766, 5790, 5791, 5792, 5794, 5795, 5796, 5797, 5799, 5800, 5801, 5802, 5804, + 5805, 5806, 5807, 5809, 5810, 5811, 5812, 5814, 5815, 5816, 5817, 5819, 5820, + 5821, 5822, 5823, 5824, 5825, 5826, 5836, 5837, 5838, 5840, 5841, 5842, 5843, + 5845, 5846, 5847, 5849, 5850, 5851, 5855, 5856, 5857, 5859, 5860, 5861, 5863, + 5864, 5865, 5869, 5870, 5871, 5875, 5876, 5877, 5879, 5880, 5881, 5885, 5886, + 5887, 5891, 5892, 5893, 5895, 5896, 5897, 5898, 5900, 5901, 5902, 5903, 5905, + 5906, 5907, 5908, 5910, 5911, 5912, 5914, 5915, 5916, 5918, 5919, 5920, 5922, + 5923, 5924, 5926, 5927, 5928, 5930, 5931, 5932, 5933, 5934, 5935, 5936, 5937, + 5938, 5939, 5940, 5941, 5942, 5943, 5944, 5945, 5946, 5947, 5948, 5980, 5981, + 5982, 5983, 5984, 5985, 5986, 5988, 5989, 5990, 5991, 5993, 5994, 5995, 5996, + 5998, 5999, 6000, 6001, 6003, 6004, 6005, 6006, 6008, 6009, 6010, 6011, 6013, + 6014, 6015, 6016, 6017, 6021, 6022, 6023, 6025, 6026, 6027, 6028, 6030, 6031, + 6032, 6033, 6035, 6036, 6037, 6038, 6040, 6041, 6042, 6043, 6044, 6045, 6046, + 6047, 6048, 6049, 6050, 6051, 6052, 6053, 6054, 6055, 6056, 6057, 6058, 6059, + 6060, 6061, 6062, 6064, 6065, 6066, 6067, 6069, 6070, 6071, 6072, 6074, 6075, + 6076, 6077, 6079, 6080, 6081, 6082, 6083, 6084, 6085, 6086, 6087, 6088, 6089, + 6090, 6091, 6092, 6093, 6094, 6095, 6096, 6097, 6098, 6099, 6100, 6101, 6102, + 6103, 6107, 6108, 6109, 6111, 6112, 6113, 6114, 6116, 6117, 6118, 6119, 6121, + 6122, 6123, 6124, 6126, 6127, 6128, 6129, 6130, 6131, 6132, 6133, 6134, 6135, + 6136, 6137, 6138, 6139, 6140, 6141, 6142, 6143, 6144, 6145, 6146, 6147, 6148, + 6149, 6151, 6152, 6153, 6155, 6156, 6157, 6158, 6160, 6161, 6162, 6163, 6165, + 6166, 6167, 6168, 6170, 6171, 6172, 6173, 6174, 6175, 6176, 6177, 6178, 6179, + 6180, 6181, 6182, 6183, 6184, 6185, 6186, 6187, 6188, 6189, 6190, 6191, 6192, + 6194, 6195, 6196, 6197, 6199, 6200, 6201, 6202, 6204, 6205, 6206, 6207, 6209, + 6210, 6211, 6212, 6213, 6214, 6215, 6216, 6217, 6218, 6219, 6220, 6221, 6222, + 6223, 6224, 6225, 6226, 6227, 6228, 6229, 6230, 6231, 6232, 6233, 6237, 6238, + 6239, 6241, 6242, 6243, 6244, 6246, 6247, 6248, 6249, 6251, 6252, 6253, 6254, + 6256, 6257, 6258, 6259, 6260, 6261, 6262, 6263, 6264, 6265, 6266, 6267, 6268, + 6269, 6270, 6271, 6272, 6273, 6274, 6275, 6276, 6277, 6278, 6279, 6281, 6282, + 6283, 6285, 6286, 6287, 6288, 6290, 6291, 6292, 6293, 6295, 6296, 6297, 6298, + 6300, 6301, 6302, 6303, 6304, 6305, 6306, 6307, 6308, 6309, 6310, 6311, 6312, + 6313, 6314, 6315, 6316, 6317, 6318, 6319, 6320, 6321, 6322, 6323, 6325, 6326, + 6327, 6328, 6330, 6331, 6332, 6333, 6335, 6336, 6337, 6338, 6340, 6341, 6342, + 6343, 6345, 6346, 6347, 6348, 6350, 6351, 6352, 6353, 6355, 6356, 6357, 6358, + 6360, 6361, 6362, 6363, 6365, 6366, 6367, 6368, 6370, 6371, 6372, 6373, 6375, + 6376, 6377, 6379, 6380, 6381, 6382, 6384, 6385, 6386, 6387, 6389, 6390, 6391, + 6392, 6394, 6395, 6396, 6397, 6398, 6399, 6400, 6401, 6402, 6403, 6404, 6405, + 6406, 6407, 6408, 6409, 6410, 6411, 6412, 6413, 6414, 6415, 6416, 6418, 6419, + 6420, 6421, 6423, 6424, 6425, 6426, 6428, 6429, 6430, 6431, 6433, 6434, 6435, + 6436, 6437, 6438, 6439, 6440, 6441, 6442, 6443, 6444, 6445, 6446, 6447, 6448, + 6449, 6450, 6451, 6452, 6453, 6454, 6455, 6456, 6457, 6458, 6464, 6465, 6466, + 6468, 6469, 6470, 6471, 6473, 6474, 6475, 6476, 6478, 6479, 6480, 6481, 6483, + 6484, 6485, 6486, 6487, 6488, 6489, 6490, 6492, 6493, 6494, 6496, 6497, 6498, + 6499, 6501, 6502, 6503, 6504, 6506, 6507, 6508, 6509, 6511, 6512, 6513, 6514, + 6515, 6516, 6517, 6518, 6519, 6520, 6521, 6522, 6523, 6524, 6525, 6526, 6528, + 6529, 6530, 6531, 6533, 6534, 6535, 6536, 6538, 6539, 6540, 6541, 6543, 6544, + 6545, 6547, 6548, 6549, 6551, 6552, 6553, 6555, 6556, 6557, 6558, 6560, 6561, + 6562, 6563, 6565, 6566, 6567, 6568, 6570, 6571, 6572, 6573, 6574, 6575, 6576, + 6577, 6578, 6579, 6580, 6581, 6582, 6583, 6584, 6585, 6586, 6587, 6588, 6589, + 6591, 6592, 6593, 6594, 6595, 6596, 6597, 6598, 6599, 6600, 6601, 6602, 6603, + 6604, 6626, 6627, 6628, 6629, 6630, 6631, 6632, 6634, 6636, 6637, 6638, 6639, + 6641, 6642, 6643, 6644, 6646, 6647, 6648, 6649, 6651, 6652, 6653, 6655, 6656, + 6657, 6658, 6659, 6660, 6661, 6662, 6663, 6664, 6665, 6666, 6667, 6668, 6669, + 6670, 6672, 6673, 6674, 6675, 6677, 6678, 6679, 6680, 6681, 6682, 6683, 6684, + 6685, 6686, 6687, 6688, 6689, 6690, 6691, 6692, 6693, 6694, 6695, 6697, 6698, + 6699, 6700, 6702, 6703, 6704, 6706, 6707, 6708, 6710, 6711, 6712, 6713, 6714, + 6715, 6716, 6718, 6719, 6720, 6721, 6722, 6723, 6731, 6732, 6733, 6734, 6737, + 6738, 6739, 6740, 6742, 6743, 6744, 6745, 6746, 6747, 6748, 6750, 6751, 6752, + 6753, 6755, 6756, 6757, 6758, 6760, 6761, 6762, 6763, 6764, 6765, 6766, 6767, + 6769, 6770, 6771, 6772, 6774, 6775, 6776, 6777, 6779, 6780, 6781, 6782, 6784, + 6785, 6786, 6787, 6789, 6790, 6791, 6792, 6794, 6795, 6796, 6797, 6798, 6799, + 6800, 6801, 6803, 6804, 6805, 6806, 6808, 6809, 6810, 6811, 6813, 6814, 6815, + 6816, 6818, 6819, 6820, 6821, 6823, 6824, 6825, 6826, 6828, 6829, 6830, 6831, + 6832, 6833, 6834, 6835, 6837, 6838, 6839, 6840, 6842, 6843, 6844, 6845, 6847, + 6848, 6849, 6850, 6852, 6853, 6854, 6855, 6856, 6857, 6858, 6859, 6861, 6862, + 6863, 6864, 6866, 6867, 6868, 6869, 6871, 6872, 6873, 6874, 6876, 6877, 6878, + 6879, 6880, 6881, 6882, 6883, 6885, 6886, 6887, 6888, 6890, 6891, 6892, 6893, + 6895, 6896, 6897, 6898, 6900, 6901, 6902, 6903, 6905, 6906, 6907, 6908, 6910, + 6911, 6912, 6913, 6914, 6915, 6916, 6917, 6927, 6928, 6929, 6930, 6931, 6932, + 6933, 6934, 6935, 6936, 6937, 6938, 6939, 6940, 6941, 6942, 6943, 6944, 6945, + 6946, 6947, 6948, 6949, 6953, 6954, 6955, 6957, 6959, 6960, 6961, 6962, 6964, + 6965, 6966, 6967, 6969, 6970, 6971, 6972, 6973, 6977, 6978, 6979, 6980, 6981, + 6982, 6983, 6987, 6988, 6989, 6990, 6991, 6992, 6996, 6997, 6998, 6999, 7000, + 7004, 7005, 7006, 7008, 7009, 7010, 7012, 7014, 7020, 7021, 7022, 7027, 7028, + 7029, 7033, 7034, 7035, 7037, 7038, 7039, 7046, 7047, 7048, 7058, 7059, 7060, + 7070, 7071, 7072, 7076, 7077, 7078, 7082, 7083, 7084, 7094, 7095, 7096, 7097, + 7098, 7099, 7100, 7101, 7102, 7103, 7104, 7105, 7114, 7115, 7116, 7119, 7120, + 7121, 7122, 7123, 7124, 7125, 7135, 7136, 7137, 7138, 7139, 7140, 7141, 7142, + 7143, 7144, 7147, 7148, 7149, 7151, 7152, 7153, 7154, 7155, 7156, 7158, 7160, + 7161, 7162, 7171, 7172, 7173, 7174, 7175, 7176, 7177, 7178, 7180, 7181, 7182, + 7183, 7185, 7186, 7187, 7189, 7190, 7191, 7201, 7202, 7203, 7206, 7207, 7208, + 7214, 7215, 7216, 7217, 7218, 7219, 7221, 7222, 7223, 7225, 7226, 7227, 7228, + 7229, 7230, 7231, 7232, 7233, 7234, 7241, 7242, 7243, 7246, 7247, 7248, 7251, + 7252, 7253, 7257, 7258, 7259, 7265, 7266, 7267, 7269, 7270, 7271, 7272, 7273, + 7274, 7275, 7276, 7282, 7283, 7284, 7287, 7288, 7289, 7291, 7292, 7293, 7302, + 7303, 7304, 7305, 7306, 7307, 7308, 7311, 7312, 7313, 7317, 7318, 7319, 7320, + 7321, 7322, 7323, 7324, 7329, 7330, 7331, 7333, 7334, 7335, 7336, 7337, 7338, + 7339, 7340, 7341, 7342, 7343, 7344, 7345, 7346, 7348, 7349, 7350, 7352, 7353, + 7354, 7359, 7360, 7361, 7363, 7364, 7365, 7366, 7367, 7368, 7369, 7370, 7371, + 7377, 7378, 7379, 7380, 7381, 7382, 7383, 7384, 7385, 7386, 7387, 7388, 7389, + 7390, 7391, 7392, 7393, 7394, 7395, 7400, 7401, 7402, 7403, 7404, 7405, 7406, + 7407, 7408, 7409, 7410, 7412, 7413, 7414, 7415, 7416, 7417, 7418, 7419, 7420, + 7421, 7422, 7426, 7427, 7428, 7429, 7430, 7434, 7435, 7436, 7438, 7439, 7440, + 7441, 7442, 7443, 7444, 7445, 7446, 7447, 7448, 7449, 7450, 7451, 7452, 7453, + 7457, 7458, 7459, 7460, 7461, 7462, 7463, 7465, 7466, 7467, 7468, 7469, 7470, + 7473, 7474, 7475, 7477, 7478, 7479, 7480, 7481, 7482, 7483, 7484, 7485, 7486, + 7490, 7491, 7492, 7493, 7494, 7497, 7498, 7499, 7500, 7501, 7502, 7503, 7504, + 7505, 7510, 7511, 7512, 7513, 7514, 7515, 7519, 7520, 7521, 7522, 7523, 7524, + 7525, 7526, 7527, 7528, 7532, 7533, 7534, 7536, 7537, 7538, 7539, 7540, 7542, + 7543, 7544, 7545, 7546, 7547, 7548, 7549, 7550, 7551, 7552, 7553, 7554, 7555, + 7556, 7557, 7558, 7559, 7560, 7561, 7562, 7563, 7564, 7565, 7566, 7567, 7572, + 7573, 7574, 7575, 7576, 7577, 7578, 7579, 7580, 7581, 7582, 7583, 7584, 7585, + 7586, 7587, 7588, 7589, 7590, 7591, 7592, 7593, 7594, 7595, 7596, 7597, 7598, + 7599, 7600, 7601, 7605, 7606, 7607, 7608, 7609, 7610, 7611, 7612, 7613, 7615, + 7616, 7617, 7618, 7619, 7620, 7621, 7622, 7623, 7624, 7625, 7628, 7629, 7630, + 7632, 7633, 7634, 7639, 7640, 7641, 7647, 7648, 7649, 7650, 7651, 7652, 7654, + 7663, 7664, 7665, 7670, 7671, 7672, 7675, 7676, 7677, 7678, 7679, 7680, 7681, + 7682, 7683, 7690, 7691, 7692, 7693, 7694, 7695, 7696, 7697, 7698, 7699, 7700, + 7701, 7702, 7704, 7706, 7710, 7711, 7712, 7718, 7719, 7720, 7728, 7729, 7730, + 7739, 7740, 7741, 7744, 7745, 7746, 7748, 7754, 7755, 7756, 7762, 7763, 7764, + 7766, 7767, 7768, 7769, 7770, 7771, 7772, 7773, 7774, 7775, 7776, 7777, 7778, + 7779, 7787, 7788, 7789, 7790, 7791, 7792, 7793, 7794, 7795, 7796, 7797, 7798, + 7810, 7811, 7812, 7814, 7815, 7816, 7817, 7818, 7819, 7820, 7821, 7822, 7824, + 7825, 7826, 7827, 7828, 7829, 7830, 7831, 7832, 7833, 7834, 7835, 7836, 7837, + 7838, 7842, 7843, 7844, 7845, 7846, 7847, 7848, 7849, 7850, 7852, 7853, 7854, + 7855, 7856, 7857, 7858, 7859, 7860, 7862, 7863, 7864, 7865, 7866, 7867, 7868, + 7869, 7870, 7871, 7872, 7873, 7874, 7875, 7876, 7877, 7878, 7879, 7882, 7883, + 7884, 7885, 7886, 7887, 7888, 7889, 7890, 7891, 7892, 7893, 7894, 7895, 7896, + 7897, 7898, 7899, 7900, 7901, 7902, 7903, 7904, 7905, 7912, 7913, 7914, 7915, + 7916, 7917, 7918, 7919, 7920, 7921, 7922, 7923, 7924, 7925, 7926, 7927, 7928, + 7929, 7930, 7931, 7932, 7933, 7934, 7935, 7936, 7937, 7938, 7946, 7947, 7948, + 7949, 7950, 7951, 7952, 7953, 7954, 7955, 7956, 7964, 7965, 7966, 7967, 7968, + 7969, 7970, 7971, 7972, 7973, 7974, 7975, 7976, 7977, 7978, 7979, 7980, 7981, + 7982, 7983, 7984, 7985, 7986, 7987, 7994, 7995, 7996, 7997, 7998, 7999, 8000, + 8001, 8002, 8003, 8004, 8005, 8006, 8007, 8008, 8009, 8010, 8011, 8012, 8013, + 8014, 8020, 8021, 8022, 8023, 8024, 8025, 8026, 8027, 8028, 8029, 8030, 8031, + 8032, 8033, 8034, 8035, 8036, 8037, 8042, 8043, 8044, 8045, 8046, 8047, 8048, + 8049, 8050, 8051, 8052, 8053, 8054, 8055, 8056, 8060, 8061, 8062, 8063, 8064, + 8065, 8066, 8070, 8071, 8072, 8073, 8074, 8075, 8076, 8077, 8078, 8079, 8080, + 8081, 8082, 8083, 8084, 8085, 8086, 8087, 8088, 8089, 8090, 8094, 8095, 8096, + 8097, 8098, 8100, 8101, 8102, 8103, 8104, 8105, 8106, 8107, 8108, 8109, 8110, + 8111, 8114, 8115, 8116, 8117, 8118, 8119, 8120, 8121, 8122, 8123, 8124, 8125, + 8126, 8127, 8128, 8130, 8131, 8132, 8133, 8134, 8135, 8136, 8137, 8138, 8139, + 8140, 8141, 8142, 8146, 8147, 8148, 8149, 8150, 8151, 8152, 8153, 8154, 8155, + 8156, 8157, 8158, 8159, 8160, 8161, 8162, 8163, 8164, 8165, 8166, 8167, 8170, + 8171, 8172, 8173, 8174, 8175, 8176, 8177, 8178, 8179, 8180, 8182, 8183, 8184, + 8185, 8186, 8187, 8188, 8189, 8190, 8196, 8197, 8198, 8199, 8200, 8201, 8202, + 8203, 8204, 8205, 8206, 8207, 8208, 8209, 8210, 8211, 8212, 8213, 8214, 8215, + 8216, 8217, 8218, 8219, 8220, 8221, 8222, 8224, 8225, 8226, 8227, 8228, 8229, + 8230, 8231, 8232, 8233, 8234, 8235, 8236, 8237, 8238, 8239, 8242, 8243, 8244, + 8245, 8246, 8247, 8248, 8249, 8250, 8251, 8252, 8253, 8254, 8255, 8256, 8257, + 8258, 8259, 8260, 8261, 8262, 8263, 8264, 8265, 8266, 8268, 8269, 8270, 8271, + 8272, 8273, 8274, 8275, 8276, 8277, 8278, 8279, 8280, 8281, 8282, 8283, 8284, + 8285, 8286, 8287, 8288, 8289, 8290, 8291, 8292, 8293, 8294, 8295, 8296, 8297, + 8298, 8299, 8300, 8301, 8302, 8303, 8304, 8305, 8306, 8307, 8308, 8309, 8310, + 8311, 8312, 8313, 8314, 8315, 8316, 8317, 8318, 8319, 8320, 8324, 8325, 8326, + 8327, 8328, 8329, 8330, 8331, 8332, 8334, 8335, 8336, 8337, 8338, 8339, 8340, + 8341, 8342, 8348, 8349, 8350, 8351, 8353, 8354, 8355, 8356, 8358, 8359, 8360, + 8361, 8363, 8364, 8365, 8366, 8368, 8369, 8370, 8371, 8372, 8373, 8385, 8386, + 8387, 8388, 8390, 8391, 8392, 8393, 8394, 8395, 8396, 8397, 8398, 8399, 8400, + 8402, 8403, 8404, 8405, 8407, 8408, 8409, 8410, 8412, 8413, 8414, 8415, 8416, + 8417, 8418, 8419, 8420, 8421, 8422, 8423, 8424, 8425, 8426, 8427, 8428, 8429, + 8430, 8431, 8432, 8433, 8434, 8435, 8436, 8437, 8438, 8439, 8440, 8441, 8442, + 8444, 8445, 8446, 8447, 8449, 8450, 8451, 8452, 8454, 8455, 8456, 8457, 8459, + 8460, 8461, 8462, 8464, 8465, 8466, 8467, 8468, 8469, 8470, 8471, 8472, 8473, + 8474, 8475, 8476, 8477, 8478, 8479, 8480, 8481, 8482, 8483, 8484, 8485, 8486, + 8487, 8489, 8490, 8491, 8492, 8494, 8495, 8496, 8497, 8499, 8500, 8501, 8502, + 8504, 8505, 8506, 8507, 8509, 8510, 8511, 8512, 8514, 8515, 8516, 8517, 8519, + 8520, 8521, 8522, 8525, 8526, 8527, 8528, 8529, 8530, 8531, 8532, 8533, 8534, + 8535, 8537, 8538, 8539, 8540, 8542, 8543, 8544, 8545, 8547, 8548, 8549, 8550, + 8552, 8553, 8554, 8555, 8557, 8558, 8559, 8560, 8561, 8562, 8563, 8564, 8566, + 8567, 8568, 8569, 8571, 8572, 8573, 8574, 8576, 8577, 8578, 8579, 8581, 8582, + 8583, 8584, 8586, 8587, 8588, 8589, 8591, 8592, 8593, 8594, 8596, 8597, 8598, + 8599, 8600, 8601, 8602, 8604, 8606, 8615, 8616, 8617, 8618, 8619, 8620, 8621, + 8622, 8623, 8624, 8625, 8626, 8627, 8628, 8629, 8630, 8631, 8632, 8633, 8636, + 8637, 8638, 8639, 8640, 8641, 8643, 8644, 8645, 8646, 8647, 8648, 8651, 8652, + 8653, 8654, 8655, 8656, 8657, 8658, 8663, 8664, 8665, 8666, 8669, 8670, 8671, + 8672, 8673, 8674, 8675, 8676, 8678, 8679, 8680, 8681, 8682, 8683, 8687, 8688, + 8689, 8691, 8692, 8693, 8694, 8696, 8697, 8698, 8699, 8700, 8701, 8702, 8703, + 8704, 8705, 8706, 8707, 8708, 8709, 8710, 8711, 8712, 8713, 8714, 8715, 8716, + 8717, 8718, 8719, 8720, 8721, 8722, 8723, 8724, 8725, 8726, 8727, 8728, 8729, + 8730, 8732, 8733, 8734, 8735, 8737, 8738, 8739, 8740, 8742, 8743, 8744, 8745, + 8746, 8747, 8748, 8749, 8750, 8751, 8752, 8753, 8754, 8755, 8756, 8757, 8758, + 8759, 8760, 8761, 8762, 8763, 8764, 8765, 8766, 8767, 8768, 8769, 8770, 8771, + 8772, 8774, 8775, 8776, 8777, 8778, 8779, 8780, 8781, 8782, 8783, 8784, 8785, + 8786, 8787, 8788, 8789, 8790, 8791, 8792, 8793, 8794, 8795, 8796, 8797, 8798, + 8799, 8800, 8801, 8802, 8803, 8804, 8805, 8806, 8807, 8808, 8809, 8810, 8811, + 8812, 8813, 8814, 8815, 8816, 8817, 8818, 8819, 8820, 8821, 8822, 8823, 8824, + 8825, 8826, 8827, 8828, 8829, 8830, 8831, 8832, 8833, 8834, 8835, 8836, 8837, + 8838, 8839, 8840, 8841, 8842, 8843, 8844, 8845, 8846, 8847, 8848, 8849, 8850, + 8851, 8852, 8853, 8854, 8855, 8856, 8857, 8858, 8859, 8860, 8861, 8862, 8863, + 8864, 8865, 8866, 8867, 8868, 8869, 8870, 8871, 8872, 8873, 8874, 8875, 8876, + 8877, 8878, 8879, 8880, 8881, 8882, 8883, 8884, 8885, 8886, 8887, 8888, 8889, + 8890, 8891, 8892, 8893, 8894, 8895, 8896, 8897, 8898, 8899, 8900, 8901, 8902, + 8903, 8904, 8905, 8906, 8907, 8908, 8909, 8910, 8911, 8912, 8913, 8914, 8915, + 8916, 8917, 8918, 8919, 8920, 8921, 8922, 8923, 8924, 8926, 8928, 8930, 8932, + 8934, 8936, 8938, 8940, 8942, 8951, 8952, 8953, 8954, 8955, 8956, 8957, 8958, + 8959, 8960, 8961, 8962, 8963, 8964, 8965, 8966, 8967, 8968, 8969, 8970, 8971, + 8973, 8974, 8975, 8976, 8977, 8978, 8981, 8982, 8983, 8984, 8986, 8987, 8988, + 8989, 8990, 8991, 8997, 8998, 8999, 9000, 9001, 9002, 9003, 9004, 9005, 9006, + 9007, 9008, 9009, 9010, 9011, 9012, 9013, 9014, 9015, 9017, 9018, 9019, 9020, + 9021, 9022, 9023, 9024, 9026, 9027, 9028, 9029, 9031, 9032, 9033, 9034, 9035, + 9036, 9037, 9038, 9039, 9040, 9042, 9043, 9044, 9045, 9047, 9048, 9049, 9050, + 9052, 9053, 9054, 9055, 9056, 9060, 9061, 9062, 9063, 9064, 9065, 9066, 9067, + 9068, 9069, 9070, 9071, 9072, 9073, 9074, 9075, 9076, 9077, 9078, 9079, 9080, + 9081, 9083, 9084, 9085, 9086, 9087, 9088, 9089, 9090, 9091, 9092, 9093, 9094, + 9095, 9096, 9097, 9098, 9099, 9100, 9101, 9102, 9103, 9104, 9105, 9106, 9107, + 9108, 9109, 9110, 9111, 9112, 9113, 9114, 9115, 9116, 9117, 9118, 9119, 9120, + 9121, 9122, 9124, 9125, 9126, 9127, 9128, 9131, 9132, 9133, 9134, 9135, 9139, + 9140, 9141, 9142, 9143, 9144, 9145, 9151, 9152, 9153, 9154, 9156, 9157, 9158, + 9159, 9161, 9162, 9163, 9164, 9166, 9167, 9168, 9169, 9176, 9177, 9178, 9179, + 9180, 9181, 9183, 9184, 9185, 9186, 9188, 9189, 9190, 9191, 9193, 9194, 9195, + 9196, 9198, 9199, 9200, 9201, 9203, 9204, 9205, 9206, 9207, 9209, 9210, 9211, + 9212, 9214, 9215, 9216, 9218, 9219, 9220, 9221, 9223, 9224, 9225, 9226, 9228, + 9229, 9230, 9231, 9233, 9234, 9235, 9236, 9237, 9238, 9239, 9240, 9241, 9242, + 9243, 9244, 9245, 9246, 9247, 9248, 9249, 9250, 9251, 9252, 9253, 9254, 9255, + 9256, 9258, 9259, 9260, 9261, 9263, 9264, 9265, 9266, 9268, 9269, 9270, 9271, + 9273, 9274, 9275, 9276, 9278, 9279, 9280, 9281, 9283, 9284, 9285, 9286, 9288, + 9289, 9290, 9291, 9293, 9294, 9295, 9296, 9298, 9299, 9300, 9301, 9303, 9304, + 9305, 9306, 9308, 9309, 9310, 9311, 9313, 9314, 9315, 9316, 9317, 9318, 9319, + 9320, 9322, 9323, 9324, 9327, 9328, 9329, 9330, 9331, 9332, 9333, 9335, 9336, + 9337, 9338, 9340, 9341, 9342, 9343, 9345, 9346, 9347, 9348, 9350, 9351, 9352, + 9353, 9354, 9355, 9356, 9358, 9359, 9360, 9361, 9363, 9364, 9365, 9367, 9368, + 9369, 9370, 9372, 9373, 9374, 9376, 9377, 9378, 9379, 9381, 9382, 9383, 9384, + 9385, 9386, 9387, 9392, 9393, 9394, 9395, 9396, 9397, 9398, 9403, 9404, 9405, + 9406, 9407, 9408, 9409, 9410, 9411, 9414, 9415, 9416, 9417, 9421, 9422, 9423, + 9424, 9426, 9427, 9428, 9429, 9431, 9432, 9438, 9439, 9440, 9442, 9443, 9444, + 9445, 9446, 9447, 9448, 9449, 9451, 9452, 9453, 9454, 9456, 9457, 9458, 9459, + 9461, 9462, 9463, 9464, 9466, 9467, 9468, 9469, 9471, 9472, 9473, 9474, 9476, + 9477, 9478, 9479, 9480, 9481, 9482, 9483, 9484, 9485, 9486, 9487, 9488, 9489, + 9490, 9491, 9492, 9493, 9494, 9495, 9496, 9497, 9498, 9499, 9500, 9501, 9502, + 9503, 9504, 9505, 9506, 9507, 9508, 9510, 9511, 9512, 9513, 9514, 9515, 9516, + 9517, 9518, 9519, 9520, 9521, 9523, 9524, 9525, 9526, 9528, 9529, 9530, 9531, + 9533, 9534, 9535, 9536, 9538, 9539, 9540, 9541, 9543, 9544, 9545, 9546, 9548, + 9549, 9550, 9551, 9553, 9554, 9555, 9556, 9557, 9558, 9559, 9560, 9562, 9563, + 9564, 9565, 9567, 9568, 9569, 9570, 9572, 9573, 9574, 9575, 9577, 9578, 9579, + 9580, 9582, 9583, 9584, 9585, 9587, 9588, 9589, 9590, 9592, 9593, 9594, 9595, + 9597, 9598, 9599, 9600, 9601, 9602, 9603, 9604, 9606, 9607, 9608, 9609, 9611, + 9612, 9613, 9614, 9616, 9617, 9618, 9619, 9620, 9621, 9622, 9623, 9624, 9626, + 9627, 9628, 9629, 9630, 9631, 9632, 9633, 9634, 9635, 9636, 9637, 9638, 9639, + 9640, 9641, 9642, 9643, 9644, 9645, 9646, 9647, 9648, 9649, 9650, 9651, 9652, + 9653, 9655, 9656, 9657, 9658, 9659, 9660, 9661, 9662, 9664, 9665, 9666, 9667, + 9669, 9670, 9671, 9672, 9673, 9674, 9676, 9677, 9678, 9679, 9681, 9682, 9683, + 9684, 9686, 9687, 9688, 9689, 9690, 9691, 9693, 9694, 9695, 9696, 9697, 9698, + 9699, 9700, 9701, 9702, 9703, 9704, 9705, 9706, 9707, 9708, 9709, 9710, 9712, + 9713, 9714, 9715, 9716, 9720, 9721, 9722, 9723, 9724, 9725, 9726, 9734, 9735, + 9736, 9737, 9738, 9739, 9741, 9742, 9743, 9744, 9746, 9747, 9748, 9749, 9751, + 9752, 9753, 9754, 9756, 9757, 9758, 9759, 9760, 9761, 9762, 9763, 9764, 9765, + 9766, 9767, 9769, 9770, 9771, 9772, 9774, 9775, 9776, 9777, 9778, 9779, 9780, + 9781, 9782, 9783, 9784, 9785, 9786, 9787, 9788, 9789, 9790, 9792, 9793, 9794, + 9795, 9796, 9797, 9798, 9799, 9800, 9801, 9802, 9803, 9804, 9805, 9806, 9808, + 9809, 9810, 9811, 9812, 9813, 9814, 9815, 9817, 9818, 9819, 9820, 9822, 9823, + 9824, 9825, 9827, 9828, 9829, 9830, 9831, 9832, 9834, 9835, 9836, 9837, 9839, + 9840, 9841, 9842, 9844, 9845, 9846, 9847, 9849, 9850, 9851, 9852, 9853, 9854, + 9855, 9856, 9857, 9858, 9859, 9860, 9866, 9867, 9868, 9869, 9870, 9871, 9874, + 9875, 9876, 9877, 9878, 9879, 9880, 9881, 9882, 9883, 9884, 9885, 9886, 9887, + 9888, 9889, 9890, 9891, 9892, 9893, 9894, 9895, 9898, 9899, 9900, 9901, 9902, + 9903, 9904, 9905, 9906, 9907, 9908, 9909, 9911, 9912, 9913, 9914, 9915, 9916, + 9917, 9918, 9919, 9920, 9921, 9922, 9923, 9924, 9925, 9926, 9927, 9928, 9929, + 9930, 9931, 9932, 9933, 9934, 9935, 9936, 9937, 9938, 9939, 9940, 9946, 9947, + 9948, 9949, 9950, 9951, 9952, 9953, 9954, 9955, 9956, 9957, 9960, 9961, 9962, + 9963, 9964, 9965, 9966, 9967, 9968, 9969, 9970, 9971, 9972, 9982, 9983, 9984, + 9986, 9987, 9988, 9989, 9991, 9992, 9993, 9994, 9996, 9997, 9998, 9999, 10001, + 10002, 10003, 10004, 10006, 10007, 10008, 10009, 10011, 10012, 10013, 10014, + 10016, 10017, 10018, 10019, 10021, 10022, 10023, 10024, 10026, 10027, 10028, + 10029, 10031, 10032, 10033, 10034, 10036, 10037, 10038, 10040, 10041, 10042, + 10043, 10044, 10048, 10049, 10050, 10051, 10052, 10053, 10054, 10056, 10057, + 10058, 10059, 10061, 10062, 10063, 10064, 10065, 10066, 10067, 10068, 10070, + 10071, 10072, 10073, 10075, 10076, 10077, 10078, 10080, 10081, 10082, 10083, + 10085, 10086, 10087, 10088, 10090, 10091, 10092, 10093, 10095, 10096, 10097, + 10098, 10100, 10101, 10102, 10103, 10105, 10106, 10107, 10108, 10110, 10111, + 10112, 10113, 10115, 10116, 10117, 10118, 10120, 10121, 10122, 10123, 10125, + 10126, 10127, 10128, 10129, 10130, 10131, 10132, 10138, 10139, 10140, 10141, + 10143, 10144, 10145, 10146, 10148, 10149, 10150, 10151, 10152, 10153, 10154, + 10155, 10156, 10157, 10158, 10159, 10160, 10161, 10164, 10165, 10166, 10167, + 10169, 10170, 10171, 10172, 10173, 10174, 10176, 10177, 10178, 10179, 10181, + 10182, 10183, 10184, 10186, 10187, 10188, 10189, 10191, 10192, 10193, 10194, + 10196, 10197, 10198, 10199, 10201, 10202, 10203, 10204, 10206, 10207, 10208, + 10209, 10211, 10212, 10213, 10214, 10216, 10217, 10218, 10219, 10221, 10222, + 10223, 10224, 10226, 10227, 10228, 10229, 10231, 10232, 10233, 10234, 10236, + 10237, 10238, 10239, 10241, 10242, 10243, 10244, 10245, 10246, 10248, 10249, + 10250, 10251, 10253, 10254, 10255, 10256, 10258, 10259, 10260, 10261, 10263, + 10264, 10265, 10266, 10268, 10269, 10270, 10271, 10272, 10276, 10277, 10278, + 10279, 10280, 10281, 10282, 10283, 10285, 10286, 10287, 10288, 10289, 10290, + 10292, 10293, 10294, 10295, 10296, 10297, 10298, 10299, 10300, 10301, 10304, + 10305, 10306, 10307, 10308, 10309, 10310, 10311, 10312, 10313, 10314, 10315, + 10320, 10321, 10322, 10323, 10324, 10325, 10327, 10328, 10329, 10330, 10331, + 10332, 10334, 10335, 10336, 10337, 10339, 10340, 10341, 10342, 10343, 10344, + 10345, 10346, 10347, 10356, 10357, 10358, 10359, 10360, 10364, 10365, 10366, + 10367, 10368, 10369, 10370, 10371, 10372, 10373, 10374, 10375, 10376, 10377, + 10378, 10379, 10380, 10381, 10382, 10383, 10384, 10385, 10386, 10387, 10388, + 10389, 10391, 10392, 10393, 10394, 10396, 10397, 10398, 10399, 10400, 10401, + 10402, 10403, 10404, 10405, 10406, 10407, 10408, 10409, 10410, 10411, 10412, + 10413, 10414, 10415, 10416, 10417, 10418, 10419, 10420, 10422, 10423, 10424, + 10425, 10426, 10427, 10429, 10430, 10431, 10432, 10434, 10435, 10436, 10437, + 10439, 10440, 10441, 10442, 10444, 10445, 10446, 10447, 10449, 10450, 10451, + 10452, 10454, 10455, 10456, 10457, 10458, 10459, 10461, 10462, 10463, 10464, + 10466, 10467, 10468, 10469, 10471, 10472, 10473, 10474, 10475, 10476, 10478, + 10479, 10480, 10481, 10483, 10484, 10485, 10486, 10488, 10489, 10490, 10491, + 10493, 10494, 10495, 10496, 10497, 10498, 10499, 10512, 10513, 10514, 10515, + 10517, 10518, 10519, 10520, 10522, 10523, 10524, 10525, 10527, 10528, 10529, + 10530, 10532, 10533, 10534, 10535, 10536, 10537, 10541, 10542, 10543, 10544, + 10546, 10547, 10548, 10549, 10550, 10554, 10555, 10556, 10557, 10558, 10559, + 10560, 10561, 10562, 10563, 10565, 10566, 10567, 10568, 10569, 10570, 10571, + 10572, 10573, 10574, 10575, 10576, 10577, 10578, 10579, 10580, 10581, 10582, + 10583, 10584, 10585, 10586, 10587, 10588, 10589, 10590, 10591, 10592, 10593, + 10594, 10595, 10596, 10597, 10598, 10600, 10601, 10602, 10603, 10604, 10608, + 10609, 10610, 10611, 10612, 10613, 10615, 10616, 10617, 10618, 10620, 10621, + 10622, 10623, 10625, 10626, 10627, 10628, 10630, 10631, 10632, 10633, 10635, + 10636, 10637, 10638, 10639, 10640, 10641, 10642, 10643, 10644, 10645, 10646, + 10647, 10648, 10650, 10651, 10652, 10653, 10655, 10656, 10657, 10658, 10660, + 10661, 10662, 10663, 10665, 10666, 10667, 10668, 10670, 10671, 10672, 10673, + 10675, 10676, 10677, 10678, 10680, 10681, 10682, 10683, 10685, 10686, 10687, + 10688, 10690, 10691, 10692, 10693, 10695, 10696, 10697, 10698, 10700, 10701, + 10702, 10703, 10704, 10705, 10706, 10707, 10708, 10709, 10711, 10712, 10713, + 10714, 10716, 10717, 10718, 10719, 10721, 10722, 10723, 10724, 10726, 10727, + 10728, 10729, 10731, 10732, 10733, 10734, 10736, 10737, 10738, 10739, 10741, + 10742, 10743, 10744, 10746, 10747, 10748, 10749, 10751, 10752, 10753, 10754, + 10756, 10757, 10758, 10759, 10760, 10761, 10762, 10763, 10764, 10765, 10766, + 10767, 10769, 10770, 10771, 10772, 10774, 10775, 10776, 10777, 10779, 10780, + 10781, 10782, 10784, 10785, 10786, 10787, 10789, 10790, 10791, 10792, 10794, + 10795, 10796, 10797, 10799, 10800, 10801, 10802, 10803, 10804, 10808, 10809, + 10810, 10811, 10812, 10813, 10814, 10815, 10816, 10817, 10818, 10819, 10820, + 10821, 10822, 10823, 10827, 10828, 10829, 10830, 10832, 10833, 10834, 10835, + 10836, 10837, 10839, 10840, 10841, 10842, 10844, 10845, 10846, 10847, 10849, + 10850, 10851, 10852, 10854, 10855, 10856, 10857, 10859, 10860, 10861, 10862, + 10864, 10865, 10866, 10867, 10868, 10869, 10870, 10871, 10872, 10873, 10874, + 10875, 10876, 10877, 10879, 10880, 10881, 10882, 10884, 10885, 10886, 10887, + 10888, 10889, 10891, 10892, 10893, 10894, 10896, 10897, 10898, 10899, 10901, + 10902, 10903, 10904, 10906, 10907, 10908, 10909, 10910, 10911, 10912, 10913, + 10914, 10918, 10919, 10920, 10921, 10922, 10923, 10924, 10925, 10926, 10927, + 10928, 10929, 10930, 10934, 10935, 10936, 10937, 10938, 10939, 10940, 10941, + 10942, 10945, 10946, 10947, 10948, 10950, 10951, 10952, 10953, 10954, 10958, + 10959, 10960, 10961, 10962, 10963, 10964, 10965, 10966, 10967, 10968, 10969, + 10970, 10971, 10972, 10973, 10975, 10976, 10977, 10978, 10980, 10981, 10982, + 10983, 10985, 10986, 10987, 10988, 10990, 10991, 10992, 10993, 10995, 10996, + 10997, 10998, 10999, 11000, 11001, 11002, 11003, 11005, 11006, 11007, 11008, + 11010, 11011, 11012, 11013, 11015, 11016, 11017, 11018, 11020, 11021, 11022, + 11023, 11025, 11026, 11027, 11028, 11030, 11031, 11032, 11033, 11035, 11036, + 11037, 11038, 11039, 11040, 11041, 11042, 11043, 11044, 11045, 11046, 11047, + 11048, 11049, 11073, 11074, 11075, 11076, 11077, 11078, 11080, 11081, 11082, + 11083, 11085, 11086, 11087, 11088, 11090, 11091, 11092, 11093, 11095, 11096, + 11097, 11098, 11100, 11101, 11102, 11103, 11104, 11105, 11106, 11107, 11117, + 11118, 11119, 11120, 11121, 11122, 11124, 11125, 11126, 11127, 11128, 11129, + 11130, 11131, 11132, 11133, 11134, 11135, 11136, 11137, 11138, 11139, 11140, + 11141, 11142, 11143, 11144, 11145, 11146, 11147, 11149, 11150, 11151, 11152, + 11154, 11155, 11156, 11157, 11159, 11160, 11161, 11162, 11163, 11164, 11165, + 11166, 11167, 11168, 11169, 11170, 11171, 11172, 11173, 11174, 11175, 11176, + 11177, 11178, 11179, 11180, 11181, 11182, 11183, 11184, 11185, 11186, 11187, + 11219, 11220, 11221, 11222, 11223, 11224, 11225, 11226, 11227, 11228, 11230, + 11231, 11232, 11233, 11235, 11236, 11237, 11238, 11240, 11241, 11242, 11243, + 11245, 11246, 11247, 11248, 11250, 11251, 11252, 11253, 11254, 11258, 11259, + 11260, 11261, 11262, 11263, 11265, 11266, 11267, 11268, 11270, 11271, 11272, + 11273, 11275, 11276, 11277, 11278, 11279, 11280, 11281, 11282, 11283, 11284, + 11285, 11286, 11287, 11288, 11289, 11290, 11291, 11292, 11293, 11294, 11295, + 11296, 11297, 11298, 11299, 11300, 11302, 11303, 11304, 11305, 11307, 11308, + 11309, 11310, 11312, 11313, 11314, 11315, 11316, 11317, 11318, 11319, 11320, + 11321, 11322, 11323, 11324, 11325, 11326, 11327, 11328, 11329, 11330, 11331, + 11332, 11333, 11334, 11335, 11336, 11340, 11341, 11342, 11343, 11344, 11345, + 11347, 11348, 11349, 11350, 11352, 11353, 11354, 11355, 11357, 11358, 11359, + 11360, 11361, 11362, 11363, 11364, 11365, 11366, 11367, 11368, 11369, 11370, + 11371, 11372, 11373, 11374, 11375, 11376, 11377, 11378, 11379, 11380, 11382, + 11383, 11384, 11385, 11386, 11387, 11389, 11390, 11391, 11392, 11394, 11395, + 11396, 11397, 11399, 11400, 11401, 11402, 11403, 11404, 11405, 11406, 11407, + 11408, 11409, 11410, 11411, 11412, 11413, 11414, 11415, 11416, 11417, 11418, + 11419, 11420, 11421, 11422, 11423, 11424, 11426, 11427, 11428, 11429, 11431, + 11432, 11433, 11434, 11436, 11437, 11438, 11439, 11440, 11441, 11442, 11443, + 11444, 11445, 11446, 11447, 11448, 11449, 11450, 11451, 11452, 11453, 11454, + 11455, 11456, 11457, 11458, 11459, 11460, 11464, 11465, 11466, 11467, 11468, + 11469, 11471, 11472, 11473, 11474, 11476, 11477, 11478, 11479, 11481, 11482, + 11483, 11484, 11485, 11486, 11487, 11488, 11489, 11490, 11491, 11492, 11493, + 11494, 11495, 11496, 11497, 11498, 11499, 11500, 11501, 11502, 11503, 11504, + 11506, 11507, 11508, 11509, 11510, 11511, 11513, 11514, 11515, 11516, 11518, + 11519, 11520, 11521, 11523, 11524, 11525, 11526, 11527, 11528, 11529, 11530, + 11531, 11532, 11533, 11534, 11535, 11536, 11537, 11538, 11539, 11540, 11541, + 11542, 11543, 11544, 11545, 11546, 11548, 11549, 11550, 11551, 11553, 11554, + 11555, 11556, 11558, 11559, 11560, 11561, 11563, 11564, 11565, 11566, 11568, + 11569, 11570, 11571, 11573, 11574, 11575, 11576, 11578, 11579, 11580, 11581, + 11583, 11584, 11585, 11586, 11588, 11589, 11590, 11591, 11593, 11594, 11595, + 11596, 11598, 11599, 11600, 11601, 11602, 11603, 11605, 11606, 11607, 11608, + 11610, 11611, 11612, 11613, 11615, 11616, 11617, 11618, 11619, 11620, 11621, + 11622, 11623, 11624, 11625, 11626, 11627, 11628, 11629, 11630, 11631, 11632, + 11633, 11634, 11635, 11636, 11637, 11638, 11639, 11640, 11642, 11643, 11644, + 11645, 11647, 11648, 11649, 11650, 11652, 11653, 11654, 11655, 11656, 11657, + 11658, 11659, 11660, 11661, 11662, 11663, 11664, 11665, 11666, 11667, 11668, + 11669, 11670, 11671, 11672, 11673, 11674, 11675, 11676, 11677, 11683, 11684, + 11685, 11686, 11687, 11688, 11690, 11691, 11692, 11693, 11695, 11696, 11697, + 11698, 11700, 11701, 11702, 11703, 11704, 11705, 11706, 11707, 11709, 11710, + 11711, 11712, 11713, 11714, 11716, 11717, 11718, 11719, 11721, 11722, 11723, + 11724, 11726, 11727, 11728, 11729, 11730, 11731, 11732, 11733, 11734, 11735, + 11736, 11737, 11738, 11739, 11740, 11741, 11743, 11744, 11745, 11746, 11748, + 11749, 11750, 11751, 11753, 11754, 11755, 11756, 11758, 11759, 11760, 11762, + 11763, 11764, 11766, 11767, 11768, 11769, 11770, 11771, 11773, 11774, 11775, + 11776, 11778, 11779, 11780, 11781, 11783, 11784, 11785, 11786, 11787, 11788, + 11789, 11790, 11791, 11792, 11793, 11794, 11795, 11796, 11797, 11798, 11799, + 11800, 11801, 11802, 11804, 11805, 11806, 11807, 11808, 11809, 11810, 11811, + 11812, 11813, 11814, 11815, 11816, 11817, 11839, 11840, 11841, 11842, 11843, + 11844, 11845, 11847, 11849, 11850, 11851, 11852, 11854, 11855, 11856, 11857, + 11859, 11860, 11861, 11862, 11864, 11865, 11866, 11867, 11868, 11869, 11870, + 11871, 11872, 11873, 11874, 11875, 11876, 11877, 11878, 11879, 11880, 11881, + 11883, 11884, 11885, 11886, 11888, 11889, 11890, 11891, 11892, 11893, 11894, + 11895, 11896, 11897, 11898, 11899, 11900, 11901, 11902, 11903, 11904, 11905, + 11907, 11908, 11909, 11910, 11912, 11913, 11914, 11915, 11916, 11917, 11918, + 11919, 11920, 11921, 11923, 11924, 11925, 11926, 11927, 11928, 11936, 11937, + 11938, 11939, 11942, 11943, 11944, 11945, 11947, 11948, 11949, 11950, 11951, + 11952, 11953, 11955, 11956, 11957, 11958, 11960, 11961, 11962, 11963, 11965, + 11966, 11967, 11968, 11969, 11970, 11971, 11972, 11974, 11975, 11976, 11977, + 11979, 11980, 11981, 11982, 11984, 11985, 11986, 11987, 11989, 11990, 11991, + 11992, 11994, 11995, 11996, 11997, 11999, 12000, 12001, 12002, 12003, 12004, + 12005, 12006, 12008, 12009, 12010, 12011, 12013, 12014, 12015, 12016, 12018, + 12019, 12020, 12021, 12023, 12024, 12025, 12026, 12028, 12029, 12030, 12031, + 12033, 12034, 12035, 12036, 12037, 12038, 12039, 12040, 12042, 12043, 12044, + 12045, 12047, 12048, 12049, 12050, 12052, 12053, 12054, 12055, 12057, 12058, + 12059, 12060, 12061, 12062, 12063, 12064, 12066, 12067, 12068, 12069, 12071, + 12072, 12073, 12074, 12076, 12077, 12078, 12079, 12081, 12082, 12083, 12084, + 12085, 12086, 12087, 12088, 12090, 12091, 12092, 12093, 12095, 12096, 12097, + 12098, 12100, 12101, 12102, 12103, 12105, 12106, 12107, 12108, 12110, 12111, + 12112, 12113, 12115, 12116, 12117, 12118, 12119, 12120, 12121, 12122, 12132, + 12133, 12134, 12135, 12136, 12137, 12138, 12139, 12140, 12141, 12142, 12143, + 12144, 12145, 12146, 12147, 12148, 12149, 12150, 12151, 12152, 12153, 12154, + 12158, 12159, 12160, 12162, 12164, 12165, 12166, 12167, 12169, 12170, 12171, + 12172, 12174, 12175, 12176, 12177, 12178, 12182, 12183, 12184, 12185, 12186, + 12187, 12188, 12192, 12193, 12194, 12195, 12196, 12197, 12198, 12199, 12200, + 12204, 12205, 12206, 12207, 12208, 12210, 12212, 12218, 12219, 12220, 12221, + 12222, 12223, 12224, 12225, 12226, 12227, 12228, 12229, 12230, 12231, 12232, + 12233, 12234, 12235, 12236, 12237, 12238, 12239, 12240, 12241, 12242, 12243, + 12244, 12245, 12246, 12247, 12256, 12257, 12258, 12259, 12260, 12261, 12262, + 12263, 12264, 12265, 12266, 12267, 12268, 12269, 12270, 12271, 12272, 12273, + 12276, 12277, 12278, 12279, 12280, 12281, 12282, 12284, 12286, 12287, 12288, + 12297, 12298, 12299, 12300, 12301, 12302, 12303, 12304, 12306, 12307, 12308, + 12309, 12311, 12312, 12313, 12314, 12315, 12316, 12317, 12318, 12319, 12320, + 12321, 12322, 12323, 12324, 12325, 12326, 12327, 12328, 12329, 12330, 12331, + 12332, 12333, 12334, 12341, 12342, 12343, 12344, 12345, 12346, 12347, 12348, + 12349, 12350, 12351, 12352, 12353, 12354, 12355, 12356, 12357, 12358, 12364, + 12365, 12366, 12367, 12368, 12369, 12370, 12371, 12372, 12373, 12374, 12375, + 12378, 12379, 12380, 12381, 12382, 12383, 12384, 12385, 12386, 12387, 12392, + 12393, 12394, 12395, 12396, 12397, 12398, 12399, 12400, 12401, 12402, 12403, + 12404, 12405, 12406, 12407, 12408, 12409, 12410, 12411, 12412, 12413, 12414, + 12415, 12416, 12417, 12418, 12419, 12420, 12426, 12427, 12428, 12429, 12430, + 12431, 12432, 12433, 12434, 12435, 12436, 12437, 12438, 12439, 12440, 12441, + 12442, 12443, 12448, 12449, 12450, 12451, 12452, 12453, 12454, 12455, 12456, + 12457, 12459, 12460, 12461, 12462, 12463, 12464, 12465, 12466, 12467, 12468, + 12472, 12473, 12474, 12475, 12476, 12480, 12481, 12482, 12483, 12484, 12485, + 12486, 12487, 12488, 12489, 12490, 12491, 12492, 12493, 12494, 12495, 12496, + 12500, 12501, 12502, 12503, 12504, 12505, 12507, 12508, 12509, 12510, 12511, + 12512, 12513, 12514, 12515, 12516, 12517, 12518, 12519, 12520, 12521, 12525, + 12526, 12527, 12528, 12529, 12532, 12533, 12534, 12535, 12536, 12537, 12538, + 12539, 12540, 12541, 12542, 12543, 12547, 12548, 12549, 12550, 12551, 12552, + 12553, 12554, 12555, 12556, 12557, 12558, 12559, 12560, 12561, 12563, 12564, + 12565, 12566, 12567, 12568, 12569, 12570, 12571, 12572, 12573, 12574, 12575, + 12576, 12577, 12578, 12579, 12580, 12581, 12582, 12583, 12584, 12585, 12586, + 12591, 12592, 12593, 12594, 12595, 12596, 12597, 12598, 12599, 12600, 12601, + 12602, 12603, 12604, 12605, 12606, 12607, 12608, 12609, 12610, 12611, 12612, + 12613, 12614, 12615, 12619, 12620, 12621, 12622, 12623, 12624, 12625, 12626, + 12627, 12629, 12630, 12631, 12632, 12633, 12634, 12635, 12636, 12637, 12640, + 12641, 12642, 12643, 12644, 12645, 12646, 12647, 12648, 12649, 12650, 12652, + 12661, 12662, 12663, 12664, 12665, 12666, 12667, 12668, 12669, 12670, 12671, + 12672, 12673, 12680, 12681, 12682, 12683, 12684, 12685, 12686, 12687, 12688, + 12689, 12691, 12693, 12697, 12698, 12699, 12700, 12701, 12702, 12703, 12704, + 12705, 12706, 12707, 12709, 12715, 12716, 12717, 12718, 12719, 12720, 12721, + 12722, 12723, 12724, 12725, 12726, 12727, 12728, 12729, 12730, 12731, 12739, + 12740, 12741, 12742, 12743, 12744, 12745, 12746, 12747, 12748, 12749, 12750, + 12762, 12763, 12764, 12766, 12767, 12768, 12769, 12770, 12771, 12772, 12773, + 12774, 12776, 12777, 12778, 12779, 12780, 12781, 12782, 12783, 12784, 12785, + 12786, 12787, 12788, 12789, 12790, 12794, 12795, 12796, 12797, 12798, 12799, + 12800, 12801, 12802, 12804, 12805, 12806, 12807, 12808, 12809, 12810, 12811, + 12812, 12814, 12815, 12816, 12817, 12818, 12819, 12820, 12821, 12822, 12823, + 12824, 12825, 12826, 12827, 12828, 12829, 12830, 12831, 12834, 12835, 12836, + 12837, 12838, 12839, 12840, 12841, 12842, 12843, 12844, 12845, 12846, 12847, + 12848, 12849, 12850, 12851, 12852, 12853, 12854, 12855, 12856, 12857, 12864, + 12865, 12866, 12867, 12868, 12869, 12870, 12871, 12872, 12873, 12874, 12875, + 12876, 12877, 12878, 12879, 12880, 12881, 12882, 12883, 12884, 12885, 12886, + 12887, 12888, 12889, 12890, 12898, 12899, 12900, 12901, 12902, 12903, 12904, + 12905, 12906, 12907, 12908, 12916, 12917, 12918, 12919, 12920, 12921, 12922, + 12923, 12924, 12925, 12926, 12927, 12928, 12929, 12930, 12931, 12932, 12933, + 12934, 12935, 12936, 12937, 12938, 12939, 12946, 12947, 12948, 12949, 12950, + 12951, 12952, 12953, 12954, 12955, 12956, 12957, 12958, 12959, 12960, 12961, + 12962, 12963, 12964, 12965, 12966, 12972, 12973, 12974, 12975, 12976, 12977, + 12978, 12979, 12980, 12981, 12982, 12983, 12984, 12985, 12986, 12987, 12988, + 12989, 12994, 12995, 12996, 12997, 12998, 12999, 13000, 13001, 13002, 13003, + 13004, 13005, 13006, 13007, 13008, 13012, 13013, 13014, 13015, 13016, 13017, + 13018, 13022, 13023, 13024, 13025, 13026, 13027, 13028, 13029, 13030, 13031, + 13032, 13033, 13034, 13035, 13036, 13037, 13038, 13039, 13040, 13041, 13042, + 13046, 13047, 13048, 13049, 13050, 13052, 13053, 13054, 13055, 13056, 13057, + 13058, 13059, 13060, 13061, 13062, 13063, 13066, 13067, 13068, 13069, 13070, + 13071, 13072, 13073, 13074, 13075, 13076, 13077, 13078, 13079, 13080, 13082, + 13083, 13084, 13085, 13086, 13087, 13088, 13089, 13090, 13091, 13092, 13093, + 13094, 13098, 13099, 13100, 13101, 13102, 13103, 13104, 13105, 13106, 13107, + 13108, 13109, 13110, 13111, 13112, 13113, 13114, 13115, 13116, 13117, 13118, + 13119, 13122, 13123, 13124, 13125, 13126, 13127, 13128, 13129, 13130, 13131, + 13132, 13134, 13135, 13136, 13137, 13138, 13139, 13140, 13141, 13142, 13148, + 13149, 13150, 13151, 13152, 13153, 13154, 13155, 13156, 13157, 13158, 13159, + 13160, 13161, 13162, 13163, 13164, 13165, 13166, 13167, 13168, 13169, 13170, + 13171, 13172, 13173, 13174, 13176, 13177, 13178, 13179, 13180, 13181, 13182, + 13183, 13184, 13185, 13186, 13187, 13188, 13189, 13190, 13191, 13194, 13195, + 13196, 13197, 13198, 13199, 13200, 13201, 13202, 13203, 13204, 13205, 13206, + 13207, 13208, 13209, 13210, 13211, 13212, 13213, 13214, 13215, 13216, 13217, + 13218, 13220, 13221, 13222, 13223, 13224, 13225, 13226, 13227, 13228, 13229, + 13230, 13231, 13232, 13233, 13234, 13235, 13236, 13237, 13238, 13239, 13240, + 13241, 13242, 13243, 13244, 13245, 13246, 13247, 13248, 13249, 13250, 13251, + 13252, 13253, 13254, 13255, 13256, 13257, 13258, 13259, 13260, 13261, 13262, + 13263, 13264, 13265, 13266, 13267, 13268, 13269, 13270, 13271, 13272, 13276, + 13277, 13278, 13279, 13280, 13281, 13282, 13283, 13284, 13286, 13287, 13288, + 13289, 13290, 13291, 13292, 13293, 13294, 13300, 13301, 13302, 13303, 13305, + 13306, 13307, 13308, 13310, 13311, 13312, 13313, 13315, 13316, 13317, 13318, + 13320, 13321, 13322, 13323, 13324, 13325, 13337, 13338, 13339, 13340, 13342, + 13343, 13344, 13345, 13346, 13347, 13348, 13349, 13350, 13351, 13353, 13354, + 13355, 13356, 13358, 13359, 13360, 13361, 13363, 13364, 13365, 13366, 13367, + 13368, 13369, 13370, 13371, 13372, 13373, 13374, 13375, 13376, 13377, 13378, + 13379, 13380, 13381, 13382, 13383, 13384, 13385, 13386, 13387, 13388, 13389, + 13390, 13391, 13392, 13394, 13395, 13396, 13397, 13399, 13400, 13401, 13402, + 13404, 13405, 13406, 13407, 13409, 13410, 13411, 13412, 13414, 13415, 13416, + 13417, 13418, 13419, 13420, 13421, 13422, 13423, 13424, 13425, 13426, 13427, + 13428, 13429, 13430, 13431, 13432, 13433, 13434, 13435, 13436, 13437, 13439, + 13440, 13441, 13442, 13444, 13445, 13446, 13447, 13449, 13450, 13451, 13452, + 13454, 13455, 13456, 13457, 13459, 13460, 13461, 13462, 13464, 13465, 13466, + 13467, 13469, 13470, 13471, 13472, 13475, 13476, 13477, 13478, 13479, 13480, + 13481, 13482, 13483, 13484, 13486, 13487, 13488, 13489, 13491, 13492, 13493, + 13494, 13496, 13497, 13498, 13499, 13501, 13502, 13503, 13504, 13506, 13507, + 13508, 13509, 13510, 13511, 13512, 13513, 13515, 13516, 13517, 13518, 13520, + 13521, 13522, 13523, 13525, 13526, 13527, 13528, 13530, 13531, 13532, 13533, + 13535, 13536, 13537, 13538, 13540, 13541, 13542, 13543, 13545, 13546, 13547, + 13548, 13549, 13550, 13551, 13553, 13555, 13564, 13565, 13566, 13567, 13568, + 13569, 13570, 13571, 13572, 13573, 13574, 13575, 13576, 13577, 13578, 13579, + 13580, 13581, 13582, 13583, 13584, 13585, 13586, 13587, 13588, 13589, 13590, + 13591, 13592, 13593, 13594, 13595, 13596, 13597, 13602, 13603, 13604, 13605, + 13608, 13609, 13610, 13611, 13612, 13613, 13614, 13615, 13617, 13618, 13619, + 13620, 13621, 13622, 13626, 13627, 13628, 13629, 13630, 13631, 13633, 13634, + 13635, 13636, 13637, 13638, 13639, 13640, 13641, 13642, 13643, 13644, 13645, + 13646, 13647, 13648, 13649, 13650, 13651, 13652, 13653, 13654, 13655, 13656, + 13657, 13658, 13659, 13660, 13661, 13662, 13663, 13664, 13665, 13666, 13668, + 13669, 13670, 13671, 13673, 13674, 13675, 13676, 13678, 13679, 13680, 13681, + 13682, 13683, 13684, 13685, 13686, 13687, 13688, 13689, 13690, 13691, 13692, + 13693, 13694, 13695, 13696, 13697, 13698, 13699, 13700, 13701, 13702, 13703, + 13704, 13705, 13706, 13707, 13709, 13710, 13711, 13712, 13713, 13714, 13715, + 13716, 13717, 13718, 13719, 13720, 13721, 13722, 13723, 13724, 13725, 13726, + 13727, 13728, 13729, 13730, 13731, 13732, 13733, 13734, 13735, 13736, 13737, + 13738, 13739, 13740, 13741, 13742, 13743, 13744, 13745, 13746, 13747, 13748, + 13749, 13750, 13751, 13752, 13753, 13754, 13755, 13756, 13757, 13758, 13759, + 13760, 13761, 13762, 13763, 13764, 13765, 13766, 13767, 13768, 13769, 13770, + 13771, 13772, 13773, 13774, 13775, 13776, 13777, 13778, 13779, 13780, 13781, + 13782, 13783, 13784, 13785, 13786, 13787, 13788, 13789, 13790, 13791, 13792, + 13793, 13794, 13795, 13796, 13797, 13798, 13799, 13800, 13801, 13802, 13803, + 13804, 13805, 13806, 13807, 13808, 13809, 13810, 13811, 13812, 13813, 13814, + 13815, 13816, 13817, 13818, 13819, 13820, 13821, 13822, 13823, 13824, 13825, + 13826, 13827, 13828, 13829, 13830, 13831, 13832, 13833, 13834, 13835, 13836, + 13837, 13838, 13839, 13840, 13841, 13842, 13843, 13844, 13845, 13846, 13847, + 13848, 13849, 13850, 13851, 13852, 13854, 13856, 13858, 13860, 13862, 13864, + 13866, 13868, 13870, 13879, 13880, 13881, 13882, 13883, 13884, 13885, 13886, + 13887, 13888, 13889, 13890, 13891, 13892, 13893, 13894, 13895, 13896, 13897, + 13898, 13899, 13901, 13902, 13903, 13904, 13905, 13906, 13909, 13910, 13911, + 13912, 13914, 13915, 13916, 13917, 13918, 13919, 13925, 13926, 13927, 13928, + 13929, 13930, 13931, 13932, 13933, 13934, 13935, 13936, 13937, 13938, 13939, + 13940, 13941, 13942, 13944, 13945, 13946, 13947, 13948, 13949, 13950, 13951, + 13953, 13954, 13955, 13956, 13958, 13959, 13960, 13961, 13962, 13963, 13964, + 13965, 13966, 13967, 13968, 13969, 13970, 13972, 13973, 13974, 13975, 13977, + 13978, 13979, 13980, 13981, 13985, 13986, 13987, 13988, 13989, 13990, 13991, + 13992, 13993, 13994, 13995, 13996, 13997, 13998, 13999, 14000, 14001, 14002, + 14003, 14004, 14005, 14006, 14007, 14008, 14009, 14010, 14011, 14012, 14013, + 14014, 14015, 14016, 14017, 14018, 14019, 14020, 14021, 14022, 14023, 14024, + 14025, 14026, 14027, 14028, 14029, 14030, 14031, 14032, 14033, 14034, 14035, + 14036, 14037, 14038, 14039, 14040, 14041, 14042, 14043, 14044, 14046, 14047, + 14048, 14049, 14050, 14053, 14054, 14055, 14056, 14057, 14061, 14062, 14063, + 14064, 14065, 14066, 14072, 14073, 14074, 14075, 14077, 14078, 14079, 14080, + 14082, 14083, 14084, 14085, 14087, 14088, 14089, 14090, 14097, 14098, 14099, + 14100, 14101, 14102, 14103, 14104, 14105, 14107, 14108, 14109, 14110, 14112, + 14113, 14114, 14115, 14117, 14118, 14119, 14120, 14122, 14123, 14124, 14125, + 14126, 14128, 14129, 14130, 14131, 14133, 14134, 14135, 14136, 14137, 14138, + 14140, 14141, 14142, 14143, 14145, 14146, 14147, 14148, 14150, 14151, 14152, + 14153, 14154, 14155, 14156, 14157, 14158, 14159, 14160, 14161, 14162, 14163, + 14164, 14165, 14166, 14167, 14168, 14169, 14170, 14171, 14172, 14173, 14175, + 14176, 14177, 14178, 14180, 14181, 14182, 14183, 14185, 14186, 14187, 14188, + 14190, 14191, 14192, 14193, 14195, 14196, 14197, 14198, 14200, 14201, 14202, + 14203, 14205, 14206, 14207, 14208, 14210, 14211, 14212, 14213, 14215, 14216, + 14217, 14218, 14220, 14221, 14222, 14223, 14225, 14226, 14227, 14228, 14230, + 14231, 14232, 14233, 14234, 14235, 14236, 14237, 14239, 14240, 14241, 14244, + 14245, 14246, 14247, 14248, 14249, 14250, 14252, 14253, 14254, 14255, 14257, + 14258, 14259, 14260, 14262, 14263, 14264, 14265, 14267, 14268, 14269, 14270, + 14271, 14272, 14273, 14275, 14276, 14277, 14278, 14280, 14281, 14282, 14284, + 14285, 14286, 14287, 14289, 14290, 14291, 14293, 14294, 14295, 14296, 14298, + 14299, 14300, 14301, 14302, 14303, 14304, 14309, 14310, 14311, 14312, 14313, + 14314, 14315, 14320, 14321, 14322, 14323, 14324, 14325, 14326, 14327, 14328, + 14331, 14332, 14333, 14334, 14338, 14339, 14340, 14341, 14343, 14344, 14345, + 14346, 14348, 14349, 14355, 14356, 14357, 14359, 14360, 14361, 14362, 14363, + 14364, 14365, 14366, 14368, 14369, 14370, 14371, 14373, 14374, 14375, 14376, + 14378, 14379, 14380, 14381, 14383, 14384, 14385, 14386, 14388, 14389, 14390, + 14391, 14393, 14394, 14395, 14396, 14397, 14398, 14399, 14400, 14401, 14402, + 14403, 14404, 14405, 14406, 14407, 14408, 14409, 14410, 14411, 14412, 14413, + 14452, 14491, 14493, 14495, 14497, 14499, 14501, 14503, 14505, 14507, 14508, + 14510, 14512, 14514, 14516, 14518, 14520, 14522, 14524, 14525, 14527, 14529, + 14531, 14532, 14533, 14534, 14535, 14536, 14537, 14539, 14540, 14542, 14544, + 14546, 14547, 14548, 14549, 14551, 14553, 14557, 14559, 14561, 14563, 14565, + 14567, 14569, 14571, 14572, 14573, 14575, 14576, 14577, 14578, 14579, 14581, + 14583, 14584, 14586, 14588, 14590, 14592, 14594, 14595, 14598, 14604, 14605, + 14606, 14608, 14609, 14612, 14613, 14616, 14622, 14624, 14626, 14628, 14630, + 14632, 14634, 14636, 14638, 14640, 14642, 14644, 14646, 14647, 14649, 14651, + 14653, 14655, 14657, 14659, 14661, 14663, 14665, 14667, 14669, 14671, 14673, + 14679, 14681, 14682, 14683, 14686, 14688, 14690, 14692, 14694, 14696, 14698, + 14700, 14702, 14704, 14706, 14708, 14710, 14712, 14714, 14716, 14718, 14720, + 14722, 14724, 14725, 14726, 14728, 14730, 14732, 14734, 14739, 14740, 14743, + 14744, 14753, 14755, 14756, 14757, 14758, 14759, 14760, 14762, 14764, 14765, + 14766, 14767, 14769, 14771, 14773, 14775, 14777, 14779, 14781, 14783, 14785, + 14787, 14789, 14791, 14793, 14795, 14808, 14810, 14812, 14814, 14816, 14817, + 14818, 14822, 14824, 14828, 14829, 14830, 14831, 14832, 14833, 14834, 14835, + 14836, 14838, 14840, 14842, 14844, 14846, 14848, 14850, 14851, 14853, 14855, + 14857, 14859, 14861, 14863, 14865, 14867, 14869, 14871, 14873, 14875, 14877, + 14879, 14881, 14883, 14885, 14887, 14889, 14891, 14893, 14894, 14895, 14897, + 14899, 14901, 14903, 14905, 14907, 14909, 14910, 14911, 14912, 14913, 14917, + 14918, 14922, 14924, 14926, 14928, 14930, 14932, 14933, 14934, 14936, 14938, + 14940, 14942, 14946, 14950, 14951, 14952, 14955, 14957, 14959, 14960, 14962, + 14964, 14966, 14968, 14970, 14971, 14972, 14974, 14976, 14978, 14980, 14982, + 14984, 14986, 14990, 14992, 14994, 14996, 15000, 15004, 15008, 15010, 15012, + 15014, 15018, 15020, 15022, 15024, 15026, 15028, 15052, 15062, 15064, 15066, + 15068, 15070, 15072, 15074, 15106, 15108, 15110, 15112, 15114, 15116, 15117, + 15119, 15121, 15123, 15124, 15125, 15126, 15127, 15129, 15131, 15133, 15134, + 15135, 15136, 15137, 15138, 15139, 15141, 15143, 15145, 15146, 15147, 15148, + 15149, 15150, 15152, 15154, 15156, 15157, 15158, 15159, 15160, 15162, 15164, + 15166, 15167, 15168, 15169, 15170, 15171, 15172, 15174, 15176, 15178, 15179, + 15180, 15181, 15182, 15183, 15185, 15187, 15189, 15190, 15191, 15192, 15193, + 15194, 15196, 15198, 15200, 15202, 15204, 15206, 15208, 15210, 15212, 15214, + 15216, 15218, 15220, 15221, 15222, 15223, 15224, 15226, 15228, 15230, 15231, + 15232, 15233, 15234, 15235, 15236, 15238, 15240, 15242, 15244, 15245, 15247, + 15249, 15251, 15252, 15253, 15254, 15256, 15258, 15260, 15262, 15264, 15266, + 15267, 15268, 15269, 15270, 15272, 15274, 15276, 15278, 15280, 15286, 15288, + 15292, 15294, 15298, 15302, 15324, 15326, 15328, 15330, 15332, 15333, 15334, + 15335, 15337, 15338, 15339, 15340, 15342, 15344, 15352, 15355, 15356, 15358, + 15360, 15362, 15363, 15365, 15367, 15369, 15371, 15373, 15375, 15376, 15378, + 15380, 15382, 15384, 15386, 15388, 15389, 15391, 15393, 15395, 15397, 15398, + 15400, 15402, 15404, 15406, 15407, 15409, 15411, 15413, 15415, 15417, 15419, + 15421, 15423, 15425, 15427, 15428, 15429, 15430, 15431, 15432, 15434, 15436, + 15438, 15440, 15444, 15446, 15448, 15450, 15452, 15453, 15456, 15461, 15462, + 15463, 15472, 15474, 15477, 15480, 15486, 15495, 15496, 15498, 15501, 15502, + 15503, 15504, 15505, 15511, 15516, 15522, 15529, 15530, 15531, 15535, 15537, + 15538, 15539, 15543, 15545, 15546, 15547, 15548, 15550, 15551, 15555, 15556, + 15560, 15561, 15562, 15564, 15573, 15575, 15577, 15581, 15587, 15591, 15599, + 15606, 15609, 15611, 15616, 15619, 15623, 15627, 15632, 15640, 15647, 15650, + 15651, 15653, 15655, 15659, 15661, 15665, 15670, 15676, 15683, 15687, 15688, + 15689, 15691, 15692, 15695, 15696, 15697, 15700, 15702, 15703, 15707, 15709, + 15713, 15721, 15722, 15723, 15724, 15725, 15726, 15728, 15729, 15730, 15731, + 15732, 15733, 15734, 15735, 15736, 15737, 15738, 15742, 15743, 15744, 15746, + 15747, 15748, 15750, 15753, 15759, 15765, 15767, 15769, 15771, 15773, 15775, + 15787, 15799, 15800, 15802, 15804, 15806, 15807, 15808, 15809, 15810, 15811, + 15813, 15815, 15817, 15819, 15821, 15822, 15823, 15824, 15825, 15826, 15828, + 15830, 15832, 15834, 15836, 15838, 15840, 15841, 15843, 15845, 15847, 15849, + 15851, 15852, 15854, 15856, 15858, 15860, 15862, 15864, 15866, 15868, 15872, + 15881, 15882, 15883, 15884, 15889, 15892, 15893, 15895, 15896, 15897, 15899, + 15900, 15901, 15902, 15903, 15904, 15905, 15907, 15909, 15911, 15912, 15913, + 15914, 15915, 15916, 15917, 15918, 15919, 15920, 15921, 15922, 15923, 15924, + 15925, 15926, 15927, 15928, 15929, 15930, 15931, 15932, 15933, 15934, 15935, + 15936, 15937, 15938, 15939, 15940, 15942, 15944, 15946, 15948, 15950, 15952, + 15954, 15956, 15959, 15968, 15969, 15970, 15971, 15972, 15973, 15975, 15976, + 15980, 15983, 15985, 15987, 15989, 15990, 15992, 15994, 15996, 15998, 16000, + 16001, 16003, 16005, 16007, 16009, 16010, 16011, 16012, 16014, 16015, 16017, + 16018, 16020, 16022, 16023, 16024, 16025, 16026, 16027, 16028, 16029, 16030, + 16031, 16032, 16033, 16034, 16035, 16037, 16038, 16041, 16045, 16051, 16053, + 16055, 16057, 16059, 16061, 16063, 16065, 16066, 16068, 16070, 16072, 16074, + 16075, 16076, 16077, 16078, 16079, 16081, 16083, 16085, 16087, 16089, 16091, + 16093, 16095, 16097, 16099, 16101, 16103, 16104, 16105, 16106, 16107, 16108, + 16111, 16112, 16115, 16116, 16118, 16120, 16122, 16123, 16125, 16127, 16129, + 16131, 16136, 16141, 16142, 16143, 16146, 16150, 16152, 16154, 16156, 16158, + 16159, 16161, 16163, 16165, 16167, 16169, 16171, 16173, 16175, 16177, 16179, + 16181, 16183, 16185, 16186, 16188, 16190, 16192, 16194, 16196, 16198, 16200, + 16202, 16203, 16205, 16207, 16208, 16209, 16211, 16212, 16213, 16214, 16215, + 16216, 16217, 16220, 16221, 16224, 16226, 16228, 16230, 16232, 16234, 16236, + 16238, 16240, 16241, 16243, 16245, 16247, 16249, 16251, 16253, 16255, 16257, + 16258, 16260, 16262, 16264, 16266, 16268, 16270, 16272, 16274, 16277, 16278, + 16279, 16280, 16281, 16284, 16287, 16293, 16295, 16297, 16299, 16302, 16304, + 16306, 16308, 16310, 16312, 16314, 16316, 16318, 16319, 16321, 16322, 16323, + 16326, 16327, 16328, 16329, 16337, 16342, 16344, 16345, 16349, 16350, 16352, + 16353, 16354, 16355, 16361, 16363, 16365, 16367, 16369, 16371, 16373, 16375, + 16377, 16379, 16381, 16383, 16385, 16387, 16389, 16391, 16393, 16395, 16397, + 16399, 16400, 16402, 16404, 16406, 16408, 16410, 16412, 16414, 16416, 16418, + 16420, 16422, 16424, 16426, 16428, 16430, 16432, 16438, 16440, 16441, 16442, + 16443, 16446, 16448, 16450, 16452, 16454, 16456, 16458, 16460, 16462, 16464, + 16466, 16468, 16470, 16472, 16474, 16476, 16477, 16478, 16479, 16481, 16483, + 16484, 16485, 16486, 16487, 16497, 16498, 16499, 16501, 16502, 16503, 16505, + 16508, 16511, 16512, 16514, 16522, 16525, 16526, 16528, 16530, 16535, 16536, + 16537, 16540, 16541, 16544, 16546, 16555, 16557, 16559, 16561, 16563, 16565, + 16567, 16569, 16571, 16573, 16575, 16577, 16579, 16581, 16583, 16596, 16598, + 16600, 16602, 16603, 16604, 16605, 16606, 16607, 16608, 16610, 16612, 16614, + 16615, 16616, 16617, 16618, 16619, 16621, 16625, 16627, 16631, 16633, 16634, + 16635, 16636, 16637, 16638, 16639, 16640, 16641, 16642, 16644, 16646, 16647, + 16648, 16650, 16652, 16654, 16656, 16658, 16660, 16661, 16662, 16663, 16665, + 16667, 16669, 16671, 16673, 16675, 16677, 16679, 16681, 16683, 16685, 16687, + 16689, 16691, 16693, 16695, 16697, 16699, 16701, 16703, 16705, 16707, 16709, + 16711, 16713, 16715, 16717, 16719, 16721, 16722, 16723, 16725, 16729, 16730, + 16731, 16735, 16737, 16739, 16741, 16743, 16745, 16747, 16748, 16749, 16750, + 16752, 16754, 16756, 16758, 16760, 16762, 16764, 16768, 16770, 16772, 16776, + 16777, 16778, 16781, 16783, 16785, 16794, 16795, 16797, 16799, 16801, 16803, + 16805, 16807, 16808, 16809, 16811, 16813, 16815, 16817, 16819, 16821, 16823, + 16827, 16829, 16831, 16833, 16837, 16841, 16845, 16847, 16849, 16851, 16855, + 16857, 16859, 16861, 16863, 16865, 16867, 16891, 16899, 16901, 16903, 16905, + 16907, 16909, 16911, 16913, 16915, 16917, 16919, 16921, 16923, 16927, 16929, + 16933, 16937, 16939, 16943, 16945, 16947, 16977, 16978, 16980, 16982, 16984, + 16986, 16987, 16988, 16989, 16990, 16992, 16994, 16996, 16998, 16999, 17000, + 17001, 17002, 17003, 17004, 17006, 17008, 17010, 17012, 17013, 17014, 17015, + 17016, 17017, 17019, 17021, 17023, 17025, 17026, 17027, 17028, 17029, 17031, + 17033, 17035, 17037, 17038, 17039, 17040, 17041, 17042, 17043, 17045, 17047, + 17049, 17051, 17052, 17053, 17054, 17055, 17056, 17058, 17060, 17062, 17064, + 17065, 17066, 17067, 17068, 17069, 17071, 17073, 17075, 17077, 17079, 17081, + 17083, 17085, 17087, 17089, 17091, 17093, 17095, 17097, 17098, 17099, 17100, + 17101, 17103, 17105, 17107, 17109, 17110, 17111, 17112, 17113, 17114, 17115, + 17117, 17119, 17121, 17123, 17125, 17127, 17129, 17132, 17133, 17135, 17137, + 17139, 17141, 17142, 17143, 17144, 17146, 17148, 17150, 17152, 17154, 17156, + 17157, 17158, 17159, 17161, 17163, 17165, 17167, 17169, 17171, 17173, 17175, + 17177, 17179, 17181, 17183, 17185, 17189, 17191, 17195, 17199, 17201, 17205, + 17207, 17209, 17214, 17217, 17251, 17253, 17255, 17257, 17259, 17261, 17263, + 17265, 17267, 17269, 17271, 17273, 17275, 17276, 17278, 17280, 17282, 17284, + 17285, 17286, 17287, 17288, 17290, 17292, 17294, 17296, 17297, 17298, 17299, + 17300, 17301, 17302, 17304, 17306, 17308, 17310, 17311, 17312, 17313, 17314, + 17315, 17317, 17319, 17321, 17323, 17324, 17325, 17326, 17327, 17329, 17331, + 17333, 17335, 17336, 17337, 17338, 17339, 17340, 17341, 17343, 17345, 17347, + 17349, 17350, 17351, 17352, 17353, 17354, 17356, 17358, 17360, 17362, 17363, + 17364, 17365, 17366, 17367, 17369, 17371, 17373, 17375, 17377, 17379, 17381, + 17383, 17385, 17387, 17389, 17391, 17393, 17395, 17396, 17397, 17398, 17399, + 17401, 17403, 17405, 17407, 17408, 17409, 17410, 17411, 17412, 17413, 17415, + 17417, 17419, 17421, 17423, 17424, 17425, 17426, 17427, 17429, 17431, 17433, + 17435, 17436, 17437, 17438, 17439, 17441, 17443, 17445, 17447, 17449, 17455, + 17457, 17461, 17463, 17467, 17473, 17475, 17478, 17481, 17487, 17489, 17493, + 17495, 17499, 17501, 17534, 17536, 17539, 17542, 17545, 17547, 17548, 17549, + 17550, 17553, 17554, 17555, 17556, 17557, 17560, 17561, 17564, 17567, 17570, + 17573, 17576, 17588, 17592, 17594, 17596, 17598, 17600, 17602, 17604, 17606, + 17608, 17609, 17611, 17613, 17615, 17616, 17618, 17620, 17622, 17624, 17626, + 17628, 17629, 17631, 17633, 17635, 17637, 17639, 17641, 17642, 17644, 17646, + 17648, 17650, 17651, 17653, 17655, 17657, 17659, 17660, 17662, 17664, 17666, + 17668, 17670, 17671, 17673, 17675, 17677, 17678, 17680, 17682, 17684, 17686, + 17688, 17690, 17691, 17693, 17695, 17697, 17699, 17701, 17703, 17704, 17706, + 17708, 17710, 17712, 17713, 17715, 17717, 17719, 17721, 17722, 17724, 17726, + 17728, 17730, 17732, 17734, 17736, 17739, 17742, 17745, 17748, 17752, 17753, + 17756, 17761, 17771, 17775, 17779, 17789, 17799, 17806, 17808, 17812, 17817, + 17820, 17830, 17831, 17832, 17841, 17843, 17846, 17849, 17855, 17864, 17865, + 17867, 17869, 17871, 17872, 17878, 17881, 17891, 17893, 17895, 17901, 17905, + 17908, 17911, 17912, 17916, 17919, 17928, 17930, 17933, 17935, 17936, 17938, + 17943, 17945, 17947, 17948, 17949, 17950, 17951, 17952, 17958, 17963, 17969, + 17976, 17977, 17978, 17979, 17980, 17984, 17986, 17987, 17988, 17989, 17991, + 17992, 17993, 17995, 17998, 17999, 18003, 18005, 18010, 18011, 18012, 18013, + 18015, 18019, 18020, 18021, 18022, 18023, 18024, 18026, 18027, 18031, 18032, + 18033, 18034, 18035, 18036, 18037, 18041, 18042, 18043, 18044, 18045, 18047, + 18050, 18055, 18064, 18070, 18075, 18077, 18078, 18080, 18082, 18086, 18087, + 18089, 18095, 18101, 18110, 18118, 18124, 18128, 18136, 18143, 18146, 18148, + 18153, 18156, 18160, 18164, 18169, 18179, 18180, 18183, 18184, 18186, 18187, + 18190, 18195, 18198, 18199, 18201, 18203, 18204, 18206, 18208, 18210, 18212, + 18214, 18216, 18218, 18223, 18225, 18227, 18229, 18230, 18231, 18233, 18235, + 18237, 18239, 18241, 18242, 18243, 18245, 18247, 18249, 18250, 18253, 18256, + 18258, 18260, 18262, 18263, 18265, 18274, 18275, 18276, 18279, 18282, 18288, + 18291, 18292, 18298, 18300, 18302, 18304, 18306, 18308, 18310, 18312, 18314, + 18316, 18318, 18320, 18322, 18324, 18326, 18328, 18330, 18332, 18334, 18335, + 18337, 18339, 18341, 18343, 18345, 18347, 18349, 18351, 18357, 18359, 18362, + 18364, 18366, 18368, 18370, 18372, 18374, 18376, 18378, 18380, 18382, 18384, + 18386, 18388, 18390, 18392, 18394, 18396, 18398, 18400, 18402, 18404, 18406, + 18408, 18417, 18419, 18421, 18423, 18425, 18427, 18429, 18431, 18433, 18435, + 18437, 18439, 18441, 18443, 18445, 18447, 18449, 18451, 18453, 18466, 18468, + 18470, 18472, 18474, 18476, 18477, 18479, 18483, 18485, 18489, 18491, 18492, + 18494, 18496, 18498, 18500, 18502, 18504, 18506, 18508, 18509, 18511, 18513, + 18515, 18517, 18519, 18521, 18523, 18525, 18527, 18529, 18531, 18533, 18535, + 18537, 18539, 18541, 18543, 18545, 18547, 18549, 18551, 18553, 18555, 18557, + 18559, 18561, 18563, 18565, 18567, 18568, 18569, 18571, 18575, 18576, 18580, + 18582, 18584, 18586, 18588, 18590, 18592, 18594, 18596, 18598, 18600, 18602, + 18604, 18606, 18610, 18612, 18614, 18618, 18619, 18620, 18623, 18625, 18627, + 18629, 18631, 18633, 18635, 18637, 18638, 18640, 18642, 18644, 18646, 18648, + 18650, 18652, 18656, 18658, 18660, 18662, 18666, 18670, 18674, 18676, 18678, + 18680, 18684, 18686, 18688, 18690, 18692, 18694, 18696, 18720, 18722, 18732, + 18735, 18736, 18737, 18738, 18739, 18740, 18742, 18744, 18746, 18751, 18752, + 18755, 18756, 18757, 18759, 18762, 18765, 18766, 18767, 18769, 18770, 18773, + 18774, 18775, 18776, 18777, 18780, 18781, 18786, 18795, 18801, 18806, 18808, + 18809, 18811, 18817, 18823, 18832, 18840, 18846, 18849, 18857, 18864, 18867, + 18868, 18870, 18872, 18876, 18878, 18880, 18882, 18883, 18889, 18892, 18902, + 18904, 18906, 18912, 18922, 18926, 18929, 18932, 18936, 18938, 18947, 18949, + 18952, 18954, 18959, 18961, 18963, 18967, 18972, 18978, 18985, 18986, 18987, + 18989, 18992, 18993, 18997, 18998, 19003, 19004, 19005, 19006, 19008, 19012, + 19013, 19014, 19016, 19017, 19020, 19021, 19022, 19023, 19024, 19025, 19028, + 19029, 19032, 19034, 19035, 19039, 19041, 19045, 19053, 19054, 19055, 19057, + 19058, 19059, 19060, 19061, 19062, 19063, 19065, 19066, 19067, 19068, 19069, + 19070, 19071, 19072, 19073, 19074, 19075, 19076, 19077, 19078, 19079, 19080, + 19081, 19082, 19083, 19084, 19088, 19089, 19090, 19092, 19093, 19094, 19096, + 19099, 19105, 19111, 19114, 19117, 19120, 19122, 19125, 19138, 19151, 19153, + 19154, 19155, 19158, 19161, 19164, 19165, 19166, 19167, 19168, 19169, 19170, + 19172, 19174, 19176, 19178, 19180, 19181, 19182, 19183, 19184, 19185, 19187, + 19189, 19191, 19193, 19195, 19197, 19199, 19201, 19203, 19204, 19205, 19206, + 19207, 19208, 19210, 19212, 19214, 19216, 19218, 19220, 19223, 19226, 19227, + 19228, 19230, 19232, 19234, 19236, 19238, 19239, 19241, 19243, 19245, 19247, + 19249, 19251, 19253, 19255, 19257, 19258, 19260, 19262, 19264, 19266, 19268, + 19270, 19273, 19276, 19278, 19282, 19291, 19292, 19293, 19294, 19295, 19296, + 19298, 19299, 19300, 19301, 19302, 19303, 19305, 19307, 19309, 19311, 19314, + 19315, 19316, 19317, 19318, 19319, 19320, 19321, 19322, 19323, 19324, 19325, + 19326, 19327, 19328, 19329, 19330, 19331, 19332, 19333, 19334, 19335, 19336, + 19337, 19338, 19339, 19340, 19341, 19342, 19343, 19344, 19345, 19346, 19347, + 19348, 19349, 19350, 19351, 19353, 19355, 19357, 19359, 19361, 19363, 19365, + 19367, 19370, 19379, 19380, 19381, 19382, 19383, 19384, 19387, 19390, 19391, + 19392, 19393, 19395, 19399, 19402, 19405, 19407, 19410, 19413, 19414, 19416, + 19418, 19420, 19421, 19422, 19423, 19424, 19425, 19427, 19428, 19429, 19430, + 19431, 19432, 19433, 19434, 19435, 19436, 19439, 19440, 19444, 19449, 19450, + 19451, 19453, 19455, 19461, 19463, 19465, 19467, 19469, 19471, 19473, 19475, + 19477, 19479, 19481, 19484, 19485, 19488, 19490, 19492, 19494, 19496, 19498, + 19499, 19500, 19501, 19502, 19503, 19505, 19507, 19509, 19511, 19513, 19515, + 19517, 19519, 19521, 19523, 19525, 19527, 19529, 19530, 19531, 19532, 19533, + 19534, 19536, 19538, 19540, 19542, 19544, 19546, 19548, 19550, 19552, 19554, + 19556, 19559, 19562, 19563, 19564, 19566, 19568, 19569, 19571, 19573, 19575, + 19577, 19578, 19581, 19583, 19586, 19589, 19592, 19595, 19598, 19604, 19611, + 19614, 19617, 19623, 19630, 19631, 19632, 19635, 19639, 19642, 19644, 19647, + 19649, 19650, 19652, 19654, 19656, 19658, 19660, 19662, 19664, 19666, 19668, + 19670, 19677, 19678, 19679, 19680, 19681, 19682, 19683, 19684, 19685, 19686, + 19687, 19688, 19689, 19690, 19691, 19692, 19693, 19694, 19695, 19696, 19697, + 19698, 19699, 19700, 19701, 19702, 19703, 19704, 19705, 19706, 19707, 19708, + 19709, 19710, 19711, 19712, 19713, 19714, 19715, 19716, 19717, 19718, 19719, + 19720, 19721, 19722, 19723, 19724, 19725, 19726, 19727, 19728, 19729, 19730, + 19731, 19732, 19733, 19734, 19735, 19736, 19737, 19738, 19739, 19740, 19741, + 19742, 19743, 19744, 19745, 19746, 19747, 19748, 19749, 19750, 19751, 19752, + 19753, 19754, 19756, 19758, 19760, 19769, 19772, 19775, 19778, 19781, 19784, + 19787, 19795, 19801, 19809, 19813, 19818, 19830, 19833, 19840, 19842, 19848, + 19863, 19871, 19883, 19885, 19891, 19893, 19895, 19901, 19903, 19905, 19912, + 19916, 19918, 19928, 19934, 19938, 19948, 19958, 19960, 19968, 19970, 19971, + 20010, 20011, 20012, 20013, 20014, 20015, 20016, 20017, 20018, 20019, 20020 +}; + +static t_ccsid final_array[] = { + 0, 62246, 368, 916, 898, 33723, 905, 870, 867, 866, 864, 863, 862, 861, 858, + 856, 853, 852, 851, 438, 1387, 5355, 9450, 9449, 9448, 5351, 5350, 5349, + 5348, 5347, 1209, 1236, 1234, 1204, 1202, 13489, 875, 944, 1052, 859, 921, + 915, 914, 913, 820, 924, 1364, 879, 917, 814, 1090, 1251, 922, 1253, 5479, + 971, 1048, 1376, 1150, 1149, 1148, 1147, 1146, 1145, 1144, 1143, 1142, 1141, + 925, 776, 1027, 919, 906, 904, 892, 881, 872, 871, 869, 865, 501, 425, 424, + 421, 298, 291, 286, 285, 281, 279, 278, 274, 38, 1384, 839, 1277, 62236, + 62225, 62212, 61953, 57346, 28710, 25547, 17355, 13122, 13125, 12709, 9067, + 9057, 9031, 8613, 5124, 5051, 5053, 5054, 5055, 5056, 5036, 5027, 4972, 4961, + 4966, 4952, 4953, 4954, 4949, 4397, 1393, 1400, 1381, 1382, 1389, 1374, 1365, + 1281, 1282, 1283, 1284, 1276, 1252, 1254, 1255, 1256, 1257, 1258, 1259, 1161, + 1165, 1154, 1155, 1156, 1157, 1158, 1159, 1131, 1133, 1134, 1138, 1123, 1124, + 1130, 1113, 1115, 1116, 1098, 1099, 1089, 1041, 1042, 1043, 1044, 1047, 1026, + 1028, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1009, 1010, + 965, 966, 951, 952, 957, 958, 959, 960, 943, 945, 947, 948, 950, 931, 933, + 934, 935, 936, 937, 938, 939, 940, 923, 927, 928, 929, 897, 876, 834, 836, + 837, 838, 738, 721, 301, 302, 257, 1, 898, 916, 368, 368, 62246 +}; + +static t_staterange goto_array[] = { + 13445, 11977, 13446, 12066, 11793, 13448, 13449, 13450, 13451, 13453, 13454, + 13455, 13456, 13457, 13473, 13458, 13459, 13460, 13466, 13461, 13462, 13468, + 11793, 13447, 13449, 13450, 13451, 11793, 13448, 13449, 13450, 13451, 13452, + 13453, 13454, 13455, 13456, 13457, 13473, 13458, 13459, 13460, 13466, 13461, + 13462, 13468, 11735, 13469, 13470, 13463, 13464, 13473, 13465, 13474, 13475, + 13476, 13477, 13478, 13479, 13480, 13481, 13466, 13482, 13467, 13483, 13468, + 13485, 11735, 13469, 13470, 13471, 13472, 13473, 13474, 13475, 13476, 13477, + 13478, 13479, 13480, 13481, 13482, 13483, 13484, 13485, 11147, 13486, 11230, + 13487, 13488, 13426, 13419, 13420, 13496, 13423, 13498, 19, 229, 230, 231, + 232, 18, 17, 16, 15, 14, 238, 237, 236, 235, 234, 239, 240, 241, 242, 243, + 13, 12, 11, 10, 9, 8, 7, 251, 250, 249, 248, 247, 246, 245, 252, 253, 254, + 255, 256, 257, 258, 259, 244, 261, 260, 6, 263, 264, 265, 266, 95, 268, 269, + 269, 270, 271, 271, 272, 273, 273, 274, 275, 275, 276, 277, 277, 278, 279, + 279, 280, 281, 281, 282, 283, 283, 284, 285, 286, 287, 287, 288, 289, 289, + 290, 291, 291, 292, 293, 293, 294, 295, 295, 296, 297, 297, 298, 299, 299, + 300, 301, 301, 302, 303, 304, 305, 305, 306, 307, 307, 308, 309, 309, 227, + 311, 13494, 2, 314, 315, 316, 313, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 332, 333, 334, 335, 336, 336, 337, + 338, 338, 50, 340, 341, 341, 342, 343, 343, 344, 345, 345, 346, 347, 347, + 315, 315, 349, 350, 350, 341, 352, 353, 354, 355, 356, 357, 358, 359, 359, + 360, 351, 362, 362, 361, 361, 363, 348, 339, 310, 365, 365, 364, 366, 367, + 364, 366, 367, 57, 369, 370, 370, 371, 372, 372, 373, 374, 374, 375, 376, + 376, 377, 378, 378, 379, 380, 381, 382, 383, 384, 384, 385, 386, 386, 39, + 388, 389, 390, 391, 68, 393, 394, 395, 396, 397, 392, 398, 399, 67, 66, 65, + 64, 63, 62, 61, 60, 59, 58, 410, 409, 408, 407, 406, 405, 404, 403, 402, + 401, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 400, 426, 427, 428, 429, 430, 431, 431, 432, 433, 433, 434, 435, 435, + 54, 437, 438, 438, 439, 440, 440, 441, 442, 442, 443, 444, 444, 445, 446, + 446, 78, 448, 449, 449, 252, 252, 257, 257, 452, 451, 450, 453, 454, 455, + 453, 454, 455, 92, 457, 458, 459, 460, 426, 427, 70, 462, 463, 464, 465, + 466, 467, 91, 89, 470, 469, 471, 472, 88, 87, 86, 476, 475, 474, 477, 478, + 479, 85, 84, 482, 481, 483, 484, 485, 480, 473, 486, 487, 488, 315, 490, + 491, 83, 82, 81, 495, 494, 493, 496, 497, 498, 499, 232, 500, 80, 502, 503, + 504, 505, 69, 507, 508, 509, 510, 44, 512, 513, 79, 515, 252, 449, 253, 254, + 516, 255, 256, 257, 258, 77, 76, 519, 518, 520, 521, 75, 523, 524, 74, 526, + 527, 528, 525, 522, 517, 514, 529, 530, 531, 532, 261, 533, 73, 72, 536, + 535, 537, 264, 538, 71, 540, 541, 20, 543, 544, 545, 542, 539, 546, 547, + 548, 549, 534, 511, 506, 501, 492, 489, 468, 461, 456, 551, 552, 553, 554, + 555, 558, 550, 556, 557, 559, 285, 285, 561, 562, 562, 563, 564, 564, 565, + 566, 566, 567, 568, 568, 569, 570, 570, 571, 572, 572, 573, 574, 574, 575, + 576, 576, 577, 578, 578, 579, 580, 580, 362, 362, 582, 581, 583, 583, 584, + 584, 380, 586, 587, 587, 588, 589, 589, 55, 591, 592, 592, 5, 594, 595, 595, + 596, 597, 597, 598, 599, 599, 600, 601, 601, 602, 603, 603, 604, 605, 605, + 606, 607, 607, 608, 609, 609, 610, 611, 611, 612, 613, 613, 614, 615, 615, + 616, 617, 617, 618, 619, 619, 36, 621, 622, 622, 623, 620, 593, 624, 624, + 626, 626, 625, 625, 627, 628, 628, 629, 630, 630, 93, 632, 633, 634, 635, + 636, 637, 638, 544, 544, 639, 640, 641, 641, 224, 643, 644, 644, 645, 646, + 646, 647, 648, 648, 649, 650, 650, 651, 652, 652, 653, 654, 654, 655, 656, + 656, 657, 658, 658, 659, 660, 660, 661, 662, 662, 663, 664, 664, 665, 666, + 666, 667, 668, 668, 669, 670, 670, 671, 672, 672, 38, 674, 675, 676, 677, + 677, 678, 679, 679, 680, 681, 681, 682, 683, 683, 684, 685, 685, 686, 673, + 687, 687, 688, 688, 267, 690, 691, 692, 692, 56, 694, 695, 696, 697, 465, + 698, 699, 90, 701, 471, 702, 472, 703, 486, 487, 704, 500, 239, 240, 242, + 252, 253, 254, 255, 257, 258, 449, 516, 708, 707, 529, 530, 531, 709, 710, + 537, 538, 712, 547, 713, 94, 715, 716, 716, 717, 718, 718, 719, 720, 720, + 721, 714, 711, 706, 705, 700, 553, 558, 722, 722, 726, 727, 723, 724, 725, + 728, 693, 729, 730, 729, 730, 438, 732, 733, 734, 735, 736, 737, 738, 739, + 740, 741, 742, 743, 743, 744, 745, 745, 746, 747, 52, 45, 750, 749, 751, + 752, 753, 754, 755, 756, 757, 758, 759, 760, 43, 42, 41, 40, 365, 365, 225, + 767, 768, 768, 769, 770, 770, 771, 772, 772, 773, 774, 774, 775, 776, 776, + 777, 778, 778, 779, 780, 780, 49, 782, 783, 783, 784, 785, 785, 786, 787, + 787, 788, 789, 789, 48, 791, 792, 792, 793, 794, 794, 795, 796, 796, 797, + 798, 798, 799, 800, 800, 801, 790, 781, 766, 765, 764, 763, 762, 513, 806, + 807, 808, 809, 802, 803, 804, 805, 802, 803, 804, 805, 810, 811, 811, 812, + 813, 813, 814, 815, 815, 816, 817, 817, 818, 761, 748, 819, 819, 820, 821, + 822, 823, 823, 824, 731, 825, 826, 825, 826, 47, 828, 829, 829, 830, 831, + 832, 833, 833, 46, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, + 846, 847, 848, 849, 850, 851, 852, 852, 853, 834, 854, 855, 854, 855, 508, + 508, 857, 858, 858, 859, 860, 860, 861, 862, 862, 863, 864, 864, 865, 866, + 866, 867, 868, 869, 870, 243, 243, 872, 873, 873, 874, 875, 875, 876, 877, + 877, 878, 879, 879, 880, 881, 881, 882, 883, 883, 884, 885, 885, 886, 887, + 887, 888, 889, 889, 890, 891, 891, 892, 893, 893, 894, 895, 256, 256, 897, + 898, 898, 899, 900, 900, 901, 902, 902, 903, 904, 904, 905, 906, 906, 907, + 908, 908, 909, 910, 910, 911, 912, 912, 913, 914, 914, 915, 916, 916, 917, + 918, 233, 920, 921, 922, 922, 923, 924, 924, 925, 926, 926, 927, 928, 928, + 929, 930, 930, 931, 932, 932, 933, 934, 934, 935, 919, 896, 936, 936, 937, + 938, 241, 940, 941, 942, 943, 944, 939, 871, 945, 945, 946, 947, 948, 949, + 949, 37, 951, 952, 952, 953, 954, 954, 955, 956, 956, 957, 958, 958, 959, + 960, 960, 961, 962, 962, 963, 964, 964, 622, 966, 967, 968, 969, 970, 971, + 971, 972, 973, 973, 35, 975, 976, 976, 977, 978, 978, 979, 980, 980, 981, + 982, 982, 983, 984, 984, 34, 986, 987, 987, 33, 989, 990, 990, 991, 988, + 992, 992, 993, 993, 994, 995, 32, 997, 998, 998, 31, 1000, 1001, 1001, 1002, + 999, 1003, 1003, 1004, 1004, 1005, 1006, 30, 1008, 1007, 996, 1009, 1010, + 1011, 1012, 1013, 1013, 1014, 985, 1015, 1016, 1015, 1016, 29, 28, 27, 26, + 25, 24, 23, 22, 21, 1026, 1025, 1024, 1023, 1022, 1021, 1020, 1019, 1018, + 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, + 53, 51, 1042, 1041, 1043, 1044, 1045, 1046, 1046, 1047, 1048, 1048, 1049, + 1050, 1050, 1051, 1052, 1052, 1053, 1054, 1054, 1055, 1056, 1057, 1040, 1059, + 1058, 1060, 1061, 1061, 1062, 1063, 1063, 1064, 1065, 1065, 1066, 1067, 1067, + 1068, 1069, 1069, 1070, 1071, 1071, 1072, 1017, 974, 965, 950, 856, 827, + 689, 642, 631, 590, 585, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, + 1081, 1082, 1083, 1084, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, + 1082, 1083, 1084, 3, 1086, 1087, 1087, 1088, 1089, 1089, 1090, 1091, 1091, + 1092, 1093, 1093, 1094, 1095, 1095, 1096, 1097, 1097, 1098, 1085, 560, 447, + 436, 1099, 1100, 1101, 1102, 1103, 1099, 1100, 1101, 1102, 1103, 498, 541, + 1105, 1106, 1106, 503, 503, 458, 458, 503, 503, 702, 702, 478, 478, 471, + 471, 483, 483, 477, 477, 497, 497, 496, 496, 479, 479, 520, 520, 458, 458, + 702, 702, 521, 521, 1117, 1118, 1118, 1119, 1120, 1120, 1121, 1122, 1122, + 471, 471, 537, 537, 458, 458, 458, 458, 521, 521, 1128, 1127, 1126, 1125, + 1124, 1123, 1116, 1115, 1114, 1113, 1112, 1111, 1110, 1109, 1108, 1107, 1129, + 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, + 1143, 1144, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, + 1140, 1141, 1142, 1143, 1144, 1145, 1146, 524, 524, 1148, 1149, 1149, 1150, + 1151, 1151, 1152, 1153, 1153, 1154, 1155, 1155, 1156, 1157, 1157, 1158, 1147, + 1159, 1160, 1159, 1160, 419, 419, 1162, 1163, 1163, 1164, 1165, 1165, 1166, + 1167, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 418, + 418, 1179, 1180, 1180, 1181, 1182, 1182, 1183, 1184, 1184, 1185, 1186, 1187, + 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1178, 1196, 1196, 1197, 1197, + 415, 415, 1199, 1200, 1200, 1201, 1202, 1202, 1203, 1204, 1204, 1205, 1206, + 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1216, 417, 417, + 1218, 1219, 1219, 1220, 1221, 1221, 1222, 1223, 1223, 1224, 1225, 1226, 1227, + 1228, 1229, 1230, 1231, 1232, 1233, 413, 413, 1235, 1236, 1236, 1237, 1238, + 1238, 1239, 1240, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, + 1250, 1251, 1234, 1253, 1253, 1252, 1252, 414, 414, 1255, 1256, 1256, 1257, + 1258, 1258, 1259, 1260, 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268, + 1269, 1270, 1271, 1272, 1272, 412, 412, 1274, 1275, 1275, 1276, 1277, 1277, + 1278, 1279, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, + 1290, 1291, 1291, 1292, 1293, 1293, 1294, 1295, 1295, 1296, 1297, 1297, 1298, + 1299, 1299, 1300, 1301, 1301, 1302, 1303, 1303, 1304, 1305, 1305, 1306, 1307, + 1307, 1308, 1309, 1309, 1310, 1311, 1311, 411, 411, 1313, 1314, 1314, 1315, + 1316, 1316, 1317, 1318, 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325, 1326, + 1327, 1328, 416, 416, 1330, 1331, 1331, 1332, 1333, 1333, 1334, 1335, 1335, + 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1329, 1312, + 1347, 1348, 1349, 1347, 1348, 1349, 484, 484, 1351, 1352, 1352, 1353, 1354, + 1354, 1355, 1356, 1356, 1357, 1358, 1359, 1360, 1360, 394, 394, 1362, 1363, + 1363, 1364, 1365, 1365, 1366, 1367, 1367, 1368, 1369, 1370, 1371, 1372, 1373, + 1374, 1375, 1375, 1376, 1377, 1377, 1378, 1379, 1379, 1380, 1381, 1381, 1196, + 1196, 1253, 1253, 420, 420, 1385, 1386, 1386, 1387, 1388, 1388, 1389, 1390, + 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1400, 1401, + 1384, 1383, 1382, 1361, 1350, 1273, 1254, 1217, 1198, 1161, 1402, 1403, 1404, + 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1402, 1403, 1404, 1405, 1406, + 1407, 1408, 1409, 1410, 1411, 1412, 1413, 92, 1414, 1415, 1416, 1416, 1417, + 1418, 1418, 1419, 1420, 1420, 1421, 1422, 1422, 341, 783, 1424, 1425, 1426, + 1427, 1428, 1429, 1430, 1431, 1431, 1432, 1433, 1433, 783, 1435, 1436, 1437, + 1438, 1439, 1440, 1441, 1442, 1442, 1443, 1444, 1444, 633, 633, 595, 595, + 622, 1448, 1449, 1449, 1450, 1447, 1446, 1451, 626, 1452, 1453, 1451, 626, + 1452, 1453, 1454, 624, 624, 1455, 1456, 1457, 1457, 611, 1459, 1460, 1460, + 1461, 1462, 1462, 1463, 1464, 1464, 1465, 1466, 1467, 1468, 1468, 1469, 1470, + 1470, 1471, 1472, 1472, 1473, 1474, 1474, 1475, 1476, 1476, 1477, 1478, 1478, + 1479, 1480, 1481, 1482, 1482, 1483, 1484, 1484, 1485, 1486, 1486, 1487, 1488, + 1488, 1489, 1490, 1490, 1491, 1492, 1492, 1493, 1494, 1495, 1496, 1496, 1497, + 1498, 1498, 1499, 1500, 1500, 1501, 1502, 1502, 1503, 1504, 1505, 1506, 1506, + 1507, 1508, 1508, 1509, 1510, 1510, 1511, 1512, 1512, 1513, 1514, 1515, 1516, + 1516, 1517, 1518, 1518, 1519, 1520, 1520, 1521, 1522, 1522, 1523, 1524, 1524, + 1525, 1526, 1526, 1527, 1458, 1445, 1434, 1423, 1528, 1529, 1530, 1531, 1532, + 1528, 1529, 1530, 1531, 1532, 735, 1534, 1535, 1536, 1537, 1538, 1539, 1540, + 1541, 1542, 544, 544, 1543, 639, 49, 783, 1545, 1546, 1546, 1547, 1548, 1548, + 1549, 1550, 1550, 1551, 1544, 1552, 1553, 1552, 1553, 687, 1555, 1556, 800, + 1556, 800, 976, 987, 990, 998, 1001, 1559, 1558, 49, 752, 1009, 1560, 1561, + 48, 544, 751, 4, 1564, 1563, 1562, 595, 806, 952, 1565, 1566, 1567, 243, + 269, 675, 1043, 1044, 230, 241, 256, 716, 458, 633, 471, 472, 477, 478, 479, + 484, 702, 239, 240, 242, 257, 258, 483, 496, 497, 498, 503, 252, 254, 255, + 449, 516, 520, 521, 524, 527, 538, 264, 463, 537, 541, 253, 389, 508, 829, + 394, 412, 413, 414, 415, 416, 417, 418, 419, 420, 1577, 1576, 1575, 1574, + 1573, 1572, 1571, 1570, 1569, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, + 1586, 370, 411, 695, 1588, 1589, 622, 1027, 1028, 1029, 1030, 1031, 1032, + 1033, 1034, 1035, 1591, 1592, 1593, 1590, 1587, 1594, 1595, 1596, 2, 592, + 836, 43, 438, 1599, 1598, 1597, 1568, 341, 513, 807, 808, 1087, 1600, 1601, + 1602, 1603, 1604, 1605, 1606, 1607, 1607, 1608, 1609, 1609, 223, 184, 185, + 1613, 1612, 1614, 1615, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, + 1626, 1625, 1624, 1623, 1622, 1621, 1620, 1619, 1618, 1617, 1627, 1628, 1629, + 1630, 1631, 1632, 1633, 1634, 1635, 1636, 172, 173, 1639, 1638, 463, 1640, + 1641, 167, 168, 169, 170, 171, 1647, 1646, 1645, 1644, 1643, 695, 1648, 1649, + 1650, 1651, 1652, 675, 166, 1655, 341, 1656, 164, 165, 1659, 1658, 1660, + 1661, 1662, 1657, 1654, 1653, 1642, 1637, 1616, 1663, 1664, 1665, 1666, 1667, + 1668, 1669, 161, 162, 163, 1673, 1672, 1671, 1674, 1675, 1676, 158, 159, + 160, 1680, 1679, 1678, 1681, 1682, 1683, 154, 155, 156, 157, 1688, 1687, + 1686, 1685, 1689, 1690, 1691, 1692, 148, 149, 150, 151, 152, 153, 1699, 1698, + 1697, 1696, 1695, 1694, 1700, 1701, 1702, 1703, 1704, 1705, 146, 147, 1708, + 1707, 1709, 1710, 1711, 1706, 1693, 1684, 1677, 422, 1712, 1713, 1714, 1715, + 1716, 987, 990, 1009, 998, 1001, 139, 140, 141, 142, 143, 144, 145, 1726, + 1725, 1724, 1723, 1722, 1721, 1720, 1043, 1044, 1727, 1728, 1729, 1730, 1731, + 1732, 1733, 106, 1735, 1736, 138, 1738, 1737, 269, 1739, 1740, 134, 135, + 136, 137, 1745, 1744, 1743, 1742, 1746, 1747, 1748, 1749, 1750, 1741, 1734, + 1719, 1718, 1751, 1752, 1753, 1754, 1755, 104, 105, 1758, 1757, 1759, 1760, + 1761, 1762, 976, 1764, 1765, 133, 1767, 836, 1768, 132, 1770, 370, 1771, + 129, 130, 131, 1775, 1774, 1773, 544, 1776, 633, 1777, 1778, 127, 128, 1781, + 1780, 1782, 1783, 1784, 1779, 1772, 1769, 1766, 1763, 1785, 1786, 1787, 1788, + 1789, 1790, 103, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1791, 1756, 1717, + 1670, 1799, 1800, 1801, 1802, 1803, 102, 1805, 1806, 1807, 1808, 222, 1810, + 1809, 1811, 1812, 101, 1814, 1815, 1816, 1817, 1818, 477, 478, 479, 1819, + 1820, 1813, 486, 704, 1821, 1822, 220, 221, 1825, 1824, 1826, 1827, 595, + 1829, 1830, 1831, 1832, 1833, 1828, 458, 491, 1834, 1835, 126, 1837, 1838, + 1839, 230, 1840, 125, 1842, 1843, 122, 123, 124, 1847, 1846, 1845, 1848, + 1849, 1850, 120, 121, 1853, 1852, 1854, 1855, 119, 1857, 1858, 1859, 1856, + 1851, 1844, 1860, 1861, 1862, 1863, 1864, 1841, 500, 1865, 1866, 118, 1868, + 1869, 117, 1871, 1872, 112, 113, 114, 115, 116, 1878, 1877, 1876, 1875, 1874, + 1879, 1880, 1881, 1882, 1883, 1884, 1873, 1870, 503, 1885, 1886, 1887, 111, + 1889, 1890, 1891, 1892, 1032, 1033, 1034, 1035, 1027, 1031, 1895, 1894, 1896, + 1897, 438, 1899, 1900, 100, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1901, + 1898, 1893, 1888, 1909, 1910, 1911, 1912, 1913, 99, 1915, 1916, 1917, 1918, + 1919, 1920, 98, 1922, 1923, 97, 1925, 1926, 96, 1928, 1929, 228, 1931, 1932, + 1933, 1930, 1927, 1924, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1921, 1941, + 1942, 219, 1944, 1945, 218, 1947, 1948, 1949, 1946, 510, 1950, 1951, 513, + 783, 214, 215, 216, 217, 1957, 1956, 1955, 1954, 716, 1958, 1959, 1960, 1961, + 239, 240, 241, 242, 243, 389, 110, 1964, 12, 1965, 1966, 252, 253, 254, 255, + 256, 258, 449, 516, 1967, 213, 1969, 520, 521, 622, 829, 1970, 212, 1972, + 527, 1565, 1973, 1974, 1971, 1968, 1963, 1962, 1953, 530, 1975, 1976, 1977, + 1978, 1979, 1980, 109, 1982, 73, 1983, 108, 1985, 72, 1986, 107, 1988, 1989, + 1990, 1987, 1984, 264, 1991, 1992, 1993, 541, 792, 807, 808, 809, 1087, 208, + 209, 210, 211, 1999, 1998, 1997, 1996, 394, 751, 752, 806, 2000, 2001, 2002, + 2003, 199, 200, 201, 202, 203, 204, 205, 206, 207, 2013, 2012, 2011, 2010, + 2009, 2008, 2007, 2006, 2005, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, + 2022, 194, 1028, 1029, 1030, 195, 196, 197, 198, 2028, 2027, 2026, 2025, + 2024, 952, 2029, 2030, 2031, 2032, 2033, 188, 189, 190, 191, 192, 193, 2040, + 2039, 2038, 2037, 2036, 2035, 2041, 2042, 2043, 2044, 2045, 2046, 186, 187, + 2049, 2048, 2050, 2051, 592, 2053, 2052, 2047, 2034, 2023, 2004, 1995, 1994, + 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 1981, 1952, 1943, 1914, + 1867, 1836, 1823, 1804, 1611, 722, 722, 2063, 2064, 2065, 2066, 2067, 2068, + 2069, 2070, 2071, 2072, 547, 548, 223, 92, 2076, 2075, 2077, 2078, 222, 89, + 90, 91, 86, 87, 88, 84, 85, 2083, 2082, 2081, 2080, 2084, 2085, 2086, 2087, + 220, 221, 2, 2090, 2089, 2091, 2092, 81, 82, 83, 19, 2095, 2094, 2096, 2097, + 80, 2099, 2100, 219, 218, 69, 2104, 2103, 2102, 2105, 2106, 2107, 44, 49, + 94, 214, 215, 216, 217, 14, 15, 16, 17, 18, 39, 7, 8, 9, 10, 11, 12, 13, + 78, 79, 36, 47, 76, 77, 213, 75, 4, 74, 212, 2115, 2114, 2113, 2112, 2111, + 2110, 2109, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 6, 72, 73, 3, 41, 42, + 43, 48, 71, 40, 45, 52, 68, 208, 209, 210, 211, 199, 200, 201, 202, 203, + 204, 205, 206, 207, 37, 194, 195, 196, 197, 198, 188, 189, 190, 191, 192, + 193, 186, 187, 55, 2131, 2130, 2129, 2128, 2127, 2126, 2125, 2124, 2132, + 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2123, 2108, 2101, 2098, 2093, + 2088, 2079, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 184, 185, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 70, 172, 173, 56, 167, 168, + 169, 170, 171, 38, 50, 166, 164, 165, 2156, 2155, 2154, 2153, 2152, 2151, + 2150, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 161, 162, 163, 158, 159, + 160, 154, 155, 156, 157, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 148, 149, + 150, 151, 152, 153, 146, 147, 2170, 2169, 2168, 2167, 2166, 2165, 2171, 2172, + 2173, 2174, 2175, 2176, 30, 33, 34, 31, 32, 51, 53, 139, 140, 141, 142, 143, + 144, 145, 95, 138, 134, 135, 136, 137, 2182, 2181, 2180, 2179, 2178, 2183, + 2184, 2185, 2186, 2187, 46, 133, 57, 132, 20, 93, 129, 130, 131, 127, 128, + 2192, 2191, 2190, 2189, 2193, 2194, 2195, 2196, 2197, 2188, 2177, 2164, 2198, + 2199, 2200, 2201, 126, 2203, 2204, 125, 122, 123, 124, 120, 121, 119, 2209, + 2208, 2207, 2206, 2210, 2211, 2212, 2213, 2214, 2205, 2215, 2216, 118, 117, + 112, 113, 114, 115, 116, 2220, 2219, 2218, 2221, 2222, 2223, 111, 2225, 2226, + 26, 27, 28, 29, 21, 25, 2229, 2228, 2230, 2231, 54, 2233, 2234, 2235, 2232, + 2227, 2224, 2236, 2237, 2238, 2239, 110, 2241, 2242, 2243, 2244, 109, 108, + 107, 2248, 2247, 2246, 2249, 2250, 2251, 22, 23, 24, 2253, 2254, 2255, 2252, + 2256, 2257, 2258, 2245, 2240, 2217, 2202, 2149, 2259, 2260, 2261, 2262, 2263, + 2264, 106, 2266, 2267, 2268, 2269, 104, 105, 2271, 2272, 35, 2274, 2275, + 2276, 2273, 2277, 2278, 103, 2280, 2281, 2282, 2283, 2284, 2279, 2270, 2285, + 2286, 2287, 102, 2289, 2290, 2291, 2292, 101, 2294, 2295, 2296, 2297, 2298, + 2293, 2299, 2300, 5, 2302, 2303, 2304, 2305, 2306, 2307, 100, 2309, 2310, + 2311, 2312, 2313, 2314, 99, 2316, 2317, 2318, 2319, 98, 97, 96, 1, 2324, + 2323, 2322, 2321, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2320, 2332, 2333, + 2334, 2315, 2308, 2301, 2288, 2265, 2335, 2336, 2337, 2338, 2339, 2340, 2341, + 2342, 2342, 2343, 2344, 2344, 2345, 2346, 2346, 2347, 2348, 2348, 2349, 2074, + 2073, 2350, 2350, 2351, 551, 552, 553, 554, 555, 726, 727, 558, 2352, 2353, + 2354, 2354, 976, 2356, 2357, 2358, 2359, 2359, 2360, 2361, 2361, 2362, 2363, + 2363, 2364, 2365, 2366, 2367, 2368, 2369, 2370, 2371, 2372, 2373, 1044, 2375, + 2376, 2377, 2378, 2378, 2379, 2380, 2380, 2381, 2382, 2382, 2383, 2384, 2384, + 2385, 2386, 2386, 2387, 2388, 2389, 2390, 2391, 2392, 2393, 2394, 2395, 2396, + 2397, 2398, 2398, 2399, 2400, 2400, 2401, 2402, 2402, 2403, 2404, 2404, 2405, + 2406, 2406, 2407, 2408, 2408, 2409, 2410, 2410, 2411, 44, 751, 752, 2412, + 1043, 2414, 2415, 2416, 2417, 2417, 2418, 2419, 2419, 2420, 2421, 2421, 2422, + 2423, 2423, 2424, 2425, 2425, 2426, 2427, 2428, 2429, 2429, 2430, 2431, 2431, + 2432, 2433, 2433, 2434, 2435, 2435, 2436, 2437, 2437, 2438, 2439, 2439, 2440, + 2441, 2441, 2442, 43, 2443, 2444, 2413, 341, 783, 792, 806, 807, 808, 1087, + 2445, 2446, 2447, 2448, 2449, 2450, 2451, 2452, 2453, 2454, 513, 808, 809, + 807, 341, 783, 792, 806, 836, 1087, 2460, 2459, 2458, 2457, 2456, 2462, 2461, + 2463, 2464, 2465, 2466, 315, 1900, 2467, 2468, 2469, 2470, 2471, 2471, 2472, + 2455, 2374, 2473, 2473, 2474, 2475, 315, 315, 2477, 2478, 2478, 2479, 2480, + 2481, 2482, 2483, 2484, 312, 2486, 2487, 2488, 2489, 2490, 2491, 2492, 2493, + 2494, 2495, 2495, 2496, 2497, 2497, 2498, 2499, 2499, 2500, 2501, 2502, 2503, + 2504, 2505, 513, 2507, 2508, 2509, 2510, 2511, 2512, 2513, 44, 751, 2514, + 809, 2516, 2517, 2518, 2519, 2520, 2521, 2522, 43, 2523, 808, 2525, 2526, + 2527, 2528, 2529, 2530, 2531, 42, 2532, 807, 2534, 2535, 2536, 2537, 2538, + 2539, 2540, 41, 2541, 1087, 2543, 2544, 2545, 2546, 2547, 2548, 2549, 3, + 2550, 341, 2552, 2553, 2554, 2555, 2556, 2557, 2558, 50, 2559, 783, 2561, + 2562, 2563, 2564, 2565, 2566, 2567, 49, 2568, 2462, 2570, 2571, 2572, 2573, + 2574, 48, 2575, 806, 2577, 2578, 2579, 2580, 2581, 2582, 2583, 40, 2584, + 2585, 2576, 2569, 2560, 2551, 2542, 2533, 2524, 2515, 2586, 2587, 2588, 2589, + 2590, 2591, 2592, 2593, 2594, 2595, 2596, 2597, 2598, 2599, 2600, 2601, 2602, + 2603, 2506, 2604, 2605, 2606, 2485, 2476, 2607, 2608, 2609, 2610, 2611, 2611, + 2612, 2355, 1610, 2613, 2614, 2615, 2613, 2614, 2615, 1565, 2617, 2618, 2619, + 2620, 2621, 2622, 2623, 2624, 2624, 2625, 2626, 2627, 2628, 2628, 2629, 2630, + 2630, 831, 2632, 2633, 836, 836, 2635, 2636, 2636, 2637, 2638, 2638, 2639, + 2634, 2640, 2641, 2640, 2641, 836, 2643, 2644, 2645, 2646, 2647, 2648, 2649, + 2650, 836, 836, 2652, 2653, 2654, 2655, 2656, 2657, 2658, 2659, 2660, 2661, + 2662, 2663, 2664, 2665, 2666, 2667, 2668, 2669, 2670, 2671, 2671, 2672, 2651, + 2674, 2673, 2674, 2675, 2642, 2676, 2677, 2676, 2677, 751, 2679, 513, 806, + 807, 808, 809, 2680, 2681, 2682, 2682, 2683, 2684, 2684, 2685, 2686, 2686, + 2687, 2688, 2688, 806, 807, 808, 809, 513, 546, 952, 952, 2691, 2692, 2692, + 2693, 2694, 2694, 2695, 2696, 2696, 2697, 2698, 2698, 2699, 2690, 2701, 2700, + 2702, 2703, 2703, 389, 389, 2705, 2706, 2706, 2707, 2708, 2708, 2709, 2710, + 2710, 2711, 2712, 2713, 2714, 2715, 2716, 2717, 2718, 2719, 2720, 2721, 2722, + 2722, 2723, 2724, 2724, 2725, 2726, 2726, 2727, 2728, 2728, 2729, 2730, 2730, + 2731, 2732, 2732, 2733, 2734, 2734, 2735, 2736, 2736, 2737, 2738, 2738, 2739, + 2740, 2740, 2741, 2742, 2742, 2743, 2744, 2744, 2745, 2746, 2747, 2748, 2748, + 683, 683, 675, 958, 2751, 2752, 2752, 2753, 2754, 2754, 2755, 2756, 2756, + 2757, 2758, 2758, 971, 2760, 2761, 2761, 2762, 2763, 2763, 976, 2357, 2765, + 2766, 2766, 583, 583, 2768, 2769, 2769, 2770, 2, 2771, 992, 993, 992, 993, + 995, 2773, 2774, 1003, 1004, 1003, 1004, 1006, 2776, 2777, 2778, 2775, 1009, + 2779, 2780, 2781, 1009, 2779, 2780, 2782, 2783, 2784, 2784, 2785, 2772, 2767, + 2786, 2787, 2788, 2786, 2787, 2788, 2701, 1059, 2790, 2791, 2792, 2793, 2793, + 2794, 2795, 2795, 2796, 2797, 2797, 2798, 2799, 2799, 2800, 2801, 2801, 2802, + 2803, 2803, 2804, 2789, 2764, 2759, 2750, 2749, 2704, 2689, 2678, 2631, 2616, + 1557, 1554, 1533, 1104, 387, 368, 262, 229, 2823, 2824, 2825, 2826, 2827, + 2828, 234, 235, 236, 237, 238, 2830, 2831, 245, 246, 247, 248, 249, 250, + 251, 2833, 2834, 2835, 2832, 2837, 2836, 2838, 2839, 263, 2841, 2842, 2843, + 2844, 2845, 2846, 268, 268, 2848, 2849, 2850, 2851, 2851, 2852, 2853, 2854, + 2855, 2855, 2856, 2857, 2858, 2859, 2859, 2860, 2861, 2862, 2863, 2863, 2864, + 2865, 2866, 2867, 2867, 2868, 2869, 2870, 2871, 2871, 2872, 2873, 2874, 2875, + 2875, 2876, 2877, 2878, 2879, 2880, 2881, 2882, 2883, 2883, 2884, 2885, 2886, + 2887, 2887, 2888, 2889, 2890, 2891, 2891, 2892, 2893, 2894, 2895, 2895, 2896, + 2897, 2898, 2899, 2899, 2900, 2901, 2902, 2903, 2903, 2904, 2905, 2906, 2907, + 2907, 2908, 2909, 2910, 2911, 2911, 2912, 2913, 2914, 2915, 2916, 2917, 2918, + 2919, 2919, 2920, 2921, 2922, 2923, 2923, 2924, 2925, 2926, 2927, 2927, 2928, + 2929, 13491, 2931, 2932, 314, 2934, 2935, 2936, 2933, 2937, 2938, 2939, 2940, + 2941, 2942, 2943, 2944, 2945, 2946, 2947, 2948, 2949, 2950, 2951, 2952, 2953, + 2954, 2955, 2956, 2957, 2958, 2959, 2960, 2961, 2962, 2963, 2964, 2965, 2966, + 2966, 2967, 2968, 2969, 2970, 2971, 2972, 2973, 2974, 2974, 2975, 2976, 2977, + 2978, 2978, 2979, 2980, 340, 340, 2982, 2983, 2984, 2985, 2985, 2986, 2987, + 2988, 2989, 2989, 2990, 2991, 2992, 2993, 2993, 2994, 2995, 314, 314, 2997, + 2998, 2999, 3000, 3000, 3001, 3002, 340, 3004, 3005, 3006, 3007, 3008, 3009, + 3010, 3011, 3012, 3013, 3014, 3015, 3016, 3017, 3018, 3019, 3019, 3020, 3021, + 3022, 3003, 3024, 3024, 3023, 3023, 3025, 3026, 3027, 2996, 2981, 2930, 3029, + 3029, 3028, 3030, 3031, 3028, 3030, 3031, 3032, 3033, 369, 369, 3035, 3036, + 3037, 3038, 3038, 3039, 3040, 3041, 3042, 3042, 3043, 3044, 3045, 3046, 3046, + 3047, 3048, 3049, 3050, 3050, 3051, 3052, 3053, 3054, 3055, 3056, 3057, 3058, + 3059, 3060, 3061, 3062, 3062, 3063, 3064, 3065, 3066, 3066, 3067, 3068, 388, + 3070, 3071, 3072, 3073, 3074, 3075, 393, 3077, 3078, 3079, 3080, 3081, 3082, + 3083, 3076, 3084, 3085, 3086, 3087, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 3089, 3090, 3091, 3092, 3093, 3094, 3095, 3096, 3097, 3098, 3099, + 3088, 3100, 3101, 3102, 3103, 3104, 3105, 3106, 3107, 3108, 3109, 3109, 3110, + 3111, 3112, 3113, 3113, 3114, 3115, 3116, 3117, 3117, 3118, 3119, 437, 437, + 3121, 3122, 3123, 3124, 3124, 3125, 3126, 3127, 3128, 3128, 3129, 3130, 3131, + 3132, 3132, 3133, 3134, 3135, 3136, 3136, 3137, 3138, 448, 448, 3140, 3141, + 251, 251, 3143, 3144, 246, 246, 3146, 3147, 3148, 3145, 3142, 3149, 3150, + 3151, 3149, 3150, 3151, 3152, 3153, 457, 3155, 3156, 3157, 3158, 3100, 3101, + 3159, 3160, 462, 3162, 3163, 3164, 3165, 3166, 3167, 3168, 3169, 3170, 3171, + 469, 470, 3173, 3174, 474, 475, 476, 3176, 3177, 481, 482, 3179, 3180, 3181, + 3178, 3175, 3182, 3183, 3184, 3185, 3186, 314, 3188, 3189, 3190, 3191, 3192, + 3193, 493, 494, 495, 3195, 3196, 3197, 2826, 3198, 3199, 3200, 502, 3202, + 3203, 3204, 3205, 3206, 3207, 507, 3209, 3210, 3211, 3212, 3213, 3214, 512, + 3216, 3217, 245, 246, 247, 248, 249, 250, 251, 448, 515, 3219, 3220, 518, + 519, 3222, 3223, 523, 3225, 3226, 526, 3228, 3229, 3230, 3227, 3224, 3221, + 3218, 3231, 3232, 3233, 3234, 2837, 3235, 3236, 3237, 263, 535, 536, 3239, + 3240, 540, 3242, 3243, 543, 3245, 3246, 3247, 3244, 3241, 3248, 3249, 3250, + 3251, 3252, 3253, 3238, 3215, 3208, 3201, 3194, 3187, 3172, 3161, 3154, 3255, + 3256, 3257, 3258, 3259, 3262, 3254, 3260, 3261, 3263, 3264, 3265, 2879, 2879, + 3267, 3268, 3269, 3270, 3270, 3271, 3272, 3273, 3274, 3274, 3275, 3276, 3277, + 3278, 3278, 3279, 3280, 3281, 3282, 3282, 3283, 3284, 3285, 3286, 3286, 3287, + 3288, 3289, 3290, 3290, 3291, 3292, 3293, 3294, 3294, 3295, 3296, 3297, 3298, + 3298, 3299, 3300, 3301, 3302, 3302, 3303, 3304, 3305, 3306, 3306, 3307, 3308, + 3024, 3024, 3310, 3311, 3312, 3309, 3313, 3313, 3314, 3314, 3315, 3316, 3054, + 3318, 3319, 3320, 3321, 3321, 3322, 3323, 3324, 3325, 3325, 3326, 3327, 591, + 591, 3329, 3330, 594, 594, 3332, 3333, 3334, 3335, 3335, 3336, 3337, 3338, + 3339, 3339, 3340, 3341, 3342, 3343, 3343, 3344, 3345, 3346, 3347, 3347, 3348, + 3349, 3350, 3351, 3351, 3352, 3353, 3354, 3355, 3355, 3356, 3357, 3358, 3359, + 3359, 3360, 3361, 3362, 3363, 3363, 3364, 3365, 3366, 3367, 3367, 3368, 3369, + 3370, 3371, 3371, 3372, 3373, 3374, 3375, 3375, 3376, 3377, 3378, 3379, 3379, + 3380, 3381, 621, 621, 3383, 3384, 3385, 3382, 3331, 3386, 3386, 3388, 3388, + 3387, 3387, 3389, 3390, 3391, 3392, 3392, 3393, 3394, 3395, 3396, 3396, 3397, + 3398, 632, 3400, 3401, 3402, 3403, 3404, 3405, 3406, 3407, 3408, 3409, 3410, + 543, 543, 3411, 3412, 3413, 3414, 3415, 3415, 3416, 3417, 643, 643, 3419, + 3420, 3421, 3422, 3422, 3423, 3424, 3425, 3426, 3426, 3427, 3428, 3429, 3430, + 3430, 3431, 3432, 3433, 3434, 3434, 3435, 3436, 3437, 3438, 3438, 3439, 3440, + 3441, 3442, 3442, 3443, 3444, 3445, 3446, 3446, 3447, 3448, 3449, 3450, 3450, + 3451, 3452, 3453, 3454, 3454, 3455, 3456, 3457, 3458, 3458, 3459, 3460, 3461, + 3462, 3462, 3463, 3464, 3465, 3466, 3466, 3467, 3468, 3469, 3470, 3470, 3471, + 3472, 3473, 3474, 3474, 3475, 3476, 674, 3478, 3479, 3480, 3481, 3481, 3482, + 3483, 3484, 3485, 3485, 3486, 3487, 3488, 3489, 3489, 3490, 3491, 3492, 3493, + 3493, 3494, 3495, 3496, 3497, 3497, 3498, 3499, 3500, 3477, 3501, 3501, 3502, + 3502, 3503, 3504, 2847, 3506, 3507, 3508, 3509, 3510, 3510, 3511, 3512, 694, + 3514, 3515, 3516, 3517, 3165, 3518, 3519, 3520, 3521, 3522, 3523, 469, 470, + 701, 3525, 3526, 3527, 3182, 3183, 3528, 3529, 3530, 3198, 3532, 3533, 235, + 237, 238, 3535, 3536, 245, 246, 248, 249, 250, 251, 448, 515, 3538, 3539, + 3540, 3537, 3231, 3232, 3233, 3541, 3542, 3543, 3544, 535, 536, 3546, 3547, + 3548, 3249, 3549, 3550, 3551, 715, 715, 3553, 3554, 3555, 3556, 3556, 3557, + 3558, 3559, 3560, 3560, 3561, 3562, 3563, 3552, 3545, 3534, 3531, 3524, 3257, + 3262, 3564, 3564, 3568, 3569, 3565, 3566, 3567, 3570, 3571, 3572, 3513, 3573, + 3574, 3573, 3574, 3575, 3576, 437, 3578, 3579, 3580, 3581, 3582, 3583, 3584, + 3585, 3586, 3587, 3588, 3589, 3590, 3591, 3592, 3593, 3594, 3595, 3596, 3597, + 3598, 3599, 3600, 3601, 3601, 3602, 3603, 3604, 3605, 3605, 3606, 3607, 3608, + 3609, 3610, 3611, 749, 750, 3613, 3614, 3615, 3616, 3617, 3618, 3619, 3620, + 3621, 3622, 3623, 3624, 3625, 3626, 3627, 3628, 3629, 3630, 3029, 3029, 3632, + 3633, 767, 767, 3635, 3636, 3637, 3638, 3638, 3639, 3640, 3641, 3642, 3642, + 3643, 3644, 3645, 3646, 3646, 3647, 3648, 3649, 3650, 3650, 3651, 3652, 3653, + 3654, 3654, 3655, 3656, 3657, 3658, 3658, 3659, 3660, 782, 782, 3662, 3663, + 3664, 3665, 3665, 3666, 3667, 3668, 3669, 3669, 3670, 3671, 3672, 3673, 3673, + 3674, 3675, 791, 791, 3677, 3678, 3679, 3680, 3680, 3681, 3682, 3683, 3684, + 3684, 3685, 3686, 3687, 3688, 3688, 3689, 3690, 3691, 3692, 3692, 3693, 3694, + 3695, 3676, 3661, 3634, 512, 762, 763, 764, 765, 3696, 3697, 3698, 3699, + 3696, 3697, 3698, 3699, 3700, 3701, 3702, 3703, 3703, 3704, 3705, 3706, 3707, + 3707, 3708, 3709, 3710, 3711, 3711, 3712, 3713, 3714, 3715, 3715, 3716, 3717, + 3718, 3631, 3612, 3719, 3719, 3720, 3721, 3722, 3723, 3724, 3725, 3725, 3726, + 3727, 3728, 3577, 3729, 3730, 3729, 3730, 3731, 3732, 828, 828, 3734, 3735, + 3736, 3737, 3738, 3739, 3740, 3741, 3741, 3742, 3743, 835, 3745, 3746, 3747, + 3748, 3749, 3750, 3751, 3752, 3753, 3754, 3755, 3756, 3757, 3758, 3759, 3760, + 3761, 3762, 3763, 3764, 3765, 3766, 3767, 3768, 3769, 3770, 3771, 3772, 3773, + 3774, 3775, 3776, 3776, 3777, 3778, 3779, 3744, 3780, 3781, 3780, 3781, 3782, + 3783, 507, 507, 3785, 3786, 3787, 3788, 3788, 3789, 3790, 3791, 3792, 3792, + 3793, 3794, 3795, 3796, 3796, 3797, 3798, 3799, 3800, 3800, 3801, 3802, 3803, + 3804, 3804, 3805, 3806, 3807, 3808, 3809, 3810, 3811, 3812, 3813, 3814, 234, + 234, 3816, 3817, 3818, 3819, 3819, 3820, 3821, 3822, 3823, 3823, 3824, 3825, + 3826, 3827, 3827, 3828, 3829, 3830, 3831, 3831, 3832, 3833, 3834, 3835, 3835, + 3836, 3837, 3838, 3839, 3839, 3840, 3841, 3842, 3843, 3843, 3844, 3845, 3846, + 3847, 3847, 3848, 3849, 3850, 3851, 3851, 3852, 3853, 3854, 3855, 3855, 3856, + 3857, 3858, 3859, 3859, 3860, 3861, 3862, 3863, 3864, 3865, 247, 247, 3867, + 3868, 3869, 3870, 3870, 3871, 3872, 3873, 3874, 3874, 3875, 3876, 3877, 3878, + 3878, 3879, 3880, 3881, 3882, 3882, 3883, 3884, 3885, 3886, 3886, 3887, 3888, + 3889, 3890, 3890, 3891, 3892, 3893, 3894, 3894, 3895, 3896, 3897, 3898, 3898, + 3899, 3900, 3901, 3902, 3902, 3903, 3904, 3905, 3906, 3906, 3907, 3908, 3909, + 3910, 3911, 3912, 2829, 3914, 3915, 3916, 3917, 3918, 3918, 3919, 3920, 3921, + 3922, 3922, 3923, 3924, 3925, 3926, 3926, 3927, 3928, 3929, 3930, 3930, 3931, + 3932, 3933, 3934, 3934, 3935, 3936, 3937, 3938, 3938, 3939, 3940, 3941, 3942, + 3942, 3943, 3944, 3945, 3913, 3866, 3946, 3946, 3947, 3948, 3949, 3950, 236, + 3952, 3953, 3954, 3955, 3956, 3957, 3958, 3959, 3960, 3961, 3962, 3951, 3815, + 3963, 3963, 3964, 3965, 3966, 3967, 3968, 3969, 3969, 3970, 3971, 951, 951, + 3973, 3974, 3975, 3976, 3976, 3977, 3978, 3979, 3980, 3980, 3981, 3982, 3983, + 3984, 3984, 3985, 3986, 3987, 3988, 3988, 3989, 3990, 3991, 3992, 3992, 3993, + 3994, 3995, 3996, 3996, 3997, 3998, 621, 4000, 4001, 4002, 4003, 4004, 4005, + 4006, 4007, 4008, 4009, 4010, 4011, 4011, 4012, 4013, 4014, 4015, 4015, 4016, + 4017, 975, 975, 4019, 4020, 4021, 4022, 4022, 4023, 4024, 4025, 4026, 4026, + 4027, 4028, 4029, 4030, 4030, 4031, 4032, 4033, 4034, 4034, 4035, 4036, 986, + 986, 4038, 4039, 989, 989, 4041, 4042, 4043, 4040, 4044, 4044, 4045, 4045, + 4046, 4047, 4048, 4049, 4050, 4051, 997, 997, 4053, 4054, 1000, 1000, 4056, + 4057, 4058, 4055, 4059, 4059, 4060, 4060, 4061, 4062, 4063, 4064, 4065, 4066, + 4067, 4052, 1008, 4068, 4069, 4070, 4071, 4072, 4073, 4073, 4074, 4075, 4076, + 4037, 4077, 4078, 4077, 4078, 4079, 4080, 1018, 1019, 1020, 1021, 1022, 1023, + 1024, 1025, 1026, 4082, 4083, 4084, 4085, 4086, 4087, 4088, 4089, 4090, 4091, + 1041, 1042, 4093, 4094, 4095, 4096, 4096, 4097, 4098, 4099, 4100, 4100, 4101, + 4102, 4103, 4104, 4104, 4105, 4106, 4107, 4108, 4108, 4109, 4110, 4111, 4112, + 4112, 4113, 4114, 4115, 4116, 4117, 4118, 4119, 4092, 4121, 4120, 4122, 4123, + 4124, 4125, 4125, 4126, 4127, 4128, 4129, 4129, 4130, 4131, 4132, 4133, 4133, + 4134, 4135, 4136, 4137, 4137, 4138, 4139, 4140, 4141, 4141, 4142, 4143, 4144, + 4145, 4145, 4146, 4147, 4148, 4081, 4018, 3999, 3972, 3784, 3733, 3505, 3418, + 3399, 3328, 3317, 4149, 4150, 4151, 4152, 4153, 4154, 4155, 4156, 4157, 4158, + 4159, 4160, 4149, 4150, 4151, 4152, 4153, 4154, 4155, 4156, 4157, 4158, 4159, + 4160, 4161, 4162, 1086, 1086, 4164, 4165, 4166, 4167, 4167, 4168, 4169, 4170, + 4171, 4171, 4172, 4173, 4174, 4175, 4175, 4176, 4177, 4178, 4179, 4179, 4180, + 4181, 4182, 4183, 4183, 4184, 4185, 4186, 4163, 3266, 3139, 3120, 4187, 4188, + 4189, 4190, 4191, 4187, 4188, 4189, 4190, 4191, 4192, 4193, 493, 540, 4195, + 4196, 4197, 4198, 4198, 4199, 4200, 502, 502, 4202, 4203, 457, 457, 502, + 502, 4205, 4206, 701, 701, 4208, 4209, 475, 475, 4211, 4212, 470, 470, 482, + 482, 4214, 4215, 476, 476, 494, 494, 4217, 4218, 495, 495, 4220, 4221, 474, + 474, 519, 519, 4223, 4224, 457, 457, 701, 701, 4226, 4227, 518, 518, 4229, + 4230, 4231, 4232, 4232, 4233, 4234, 4235, 4236, 4236, 4237, 4238, 4239, 4240, + 4240, 4241, 4242, 470, 470, 4244, 4245, 536, 536, 4247, 4248, 457, 457, 4250, + 4251, 457, 457, 4253, 4254, 518, 518, 4256, 4257, 4258, 4255, 4252, 4249, + 4246, 4243, 4228, 4225, 4222, 4219, 4216, 4213, 4210, 4207, 4204, 4201, 4259, + 4260, 4261, 4262, 4263, 4264, 4265, 4266, 4267, 4268, 4269, 4270, 4271, 4272, + 4273, 4274, 4259, 4260, 4261, 4262, 4263, 4264, 4265, 4266, 4267, 4268, 4269, + 4270, 4271, 4272, 4273, 4274, 4275, 4276, 4277, 4278, 4279, 4280, 523, 523, + 4282, 4283, 4284, 4285, 4285, 4286, 4287, 4288, 4289, 4289, 4290, 4291, 4292, + 4293, 4293, 4294, 4295, 4296, 4297, 4297, 4298, 4299, 4300, 4301, 4301, 4302, + 4303, 4304, 4281, 4305, 4306, 4305, 4306, 4307, 4308, 402, 402, 4310, 4311, + 4312, 4313, 4313, 4314, 4315, 4316, 4317, 4317, 4318, 4319, 4320, 4321, 4321, + 4322, 4323, 4324, 4325, 4326, 4327, 4328, 4329, 4330, 4331, 4332, 4333, 4334, + 4335, 4336, 4337, 4338, 4339, 4340, 4341, 4342, 4343, 403, 403, 4345, 4346, + 4347, 4348, 4348, 4349, 4350, 4351, 4352, 4352, 4353, 4354, 4355, 4356, 4356, + 4357, 4358, 4359, 4360, 4361, 4362, 4363, 4364, 4365, 4366, 4367, 4368, 4369, + 4370, 4371, 4372, 4373, 4374, 4375, 4376, 4377, 4378, 4379, 4344, 4380, 4380, + 4381, 4381, 4382, 4383, 406, 406, 4385, 4386, 4387, 4388, 4388, 4389, 4390, + 4391, 4392, 4392, 4393, 4394, 4395, 4396, 4396, 4397, 4398, 4399, 4400, 4401, + 4402, 4403, 4404, 4405, 4406, 4407, 4408, 4409, 4410, 4411, 4412, 4413, 4414, + 4415, 4416, 4417, 4418, 4419, 4420, 4420, 4421, 4422, 404, 404, 4424, 4425, + 4426, 4427, 4427, 4428, 4429, 4430, 4431, 4431, 4432, 4433, 4434, 4435, 4435, + 4436, 4437, 4438, 4439, 4440, 4441, 4442, 4443, 4444, 4445, 4446, 4447, 4448, + 4449, 4450, 4451, 4452, 4453, 4454, 4455, 4456, 4457, 408, 408, 4459, 4460, + 4461, 4462, 4462, 4463, 4464, 4465, 4466, 4466, 4467, 4468, 4469, 4470, 4470, + 4471, 4472, 4473, 4474, 4475, 4476, 4477, 4478, 4479, 4480, 4481, 4482, 4483, + 4484, 4485, 4486, 4487, 4488, 4489, 4490, 4491, 4492, 4493, 4458, 4495, 4495, + 4494, 4494, 4496, 4497, 407, 407, 4499, 4500, 4501, 4502, 4502, 4503, 4504, + 4505, 4506, 4506, 4507, 4508, 4509, 4510, 4510, 4511, 4512, 4513, 4514, 4515, + 4516, 4517, 4518, 4519, 4520, 4521, 4522, 4523, 4524, 4525, 4526, 4527, 4528, + 4529, 4530, 4531, 4532, 4533, 4534, 4534, 4535, 4536, 409, 409, 4538, 4539, + 4540, 4541, 4541, 4542, 4543, 4544, 4545, 4545, 4546, 4547, 4548, 4549, 4549, + 4550, 4551, 4552, 4553, 4554, 4555, 4556, 4557, 4558, 4559, 4560, 4561, 4562, + 4563, 4564, 4565, 4566, 4567, 4568, 4569, 4570, 4571, 4572, 4573, 4573, 4574, + 4575, 4576, 4577, 4577, 4578, 4579, 4580, 4581, 4581, 4582, 4583, 4584, 4585, + 4585, 4586, 4587, 4588, 4589, 4589, 4590, 4591, 4592, 4593, 4593, 4594, 4595, + 4596, 4597, 4597, 4598, 4599, 4600, 4601, 4601, 4602, 4603, 4604, 4605, 4605, + 4606, 4607, 4608, 4609, 4609, 4610, 4611, 4612, 4613, 4613, 4614, 4615, 410, + 410, 4617, 4618, 4619, 4620, 4620, 4621, 4622, 4623, 4624, 4624, 4625, 4626, + 4627, 4628, 4628, 4629, 4630, 4631, 4632, 4633, 4634, 4635, 4636, 4637, 4638, + 4639, 4640, 4641, 4642, 4643, 4644, 4645, 4646, 4647, 4648, 4649, 4650, 405, + 405, 4652, 4653, 4654, 4655, 4655, 4656, 4657, 4658, 4659, 4659, 4660, 4661, + 4662, 4663, 4663, 4664, 4665, 4666, 4667, 4668, 4669, 4670, 4671, 4672, 4673, + 4674, 4675, 4676, 4677, 4678, 4679, 4680, 4681, 4682, 4683, 4684, 4685, 4686, + 4651, 4616, 4687, 4688, 4689, 4687, 4688, 4689, 4690, 4691, 481, 481, 4693, + 4694, 4695, 4696, 4696, 4697, 4698, 4699, 4700, 4700, 4701, 4702, 4703, 4704, + 4704, 4705, 4706, 4707, 4708, 4709, 4710, 4711, 4712, 4712, 4713, 4714, 393, + 393, 4716, 4717, 4718, 4719, 4719, 4720, 4721, 4722, 4723, 4723, 4724, 4725, + 4726, 4727, 4727, 4728, 4729, 4730, 4731, 4732, 4733, 4734, 4735, 4736, 4737, + 4738, 4739, 4740, 4741, 4742, 4743, 4743, 4744, 4745, 4746, 4747, 4747, 4748, + 4749, 4750, 4751, 4751, 4752, 4753, 4754, 4755, 4755, 4756, 4757, 4380, 4380, + 4759, 4760, 4495, 4495, 4762, 4763, 401, 401, 4765, 4766, 4767, 4768, 4768, + 4769, 4770, 4771, 4772, 4772, 4773, 4774, 4775, 4776, 4776, 4777, 4778, 4779, + 4780, 4781, 4782, 4783, 4784, 4785, 4786, 4787, 4788, 4789, 4790, 4791, 4792, + 4793, 4794, 4795, 4796, 4796, 4797, 4798, 4799, 4764, 4761, 4758, 4715, 4692, + 4537, 4498, 4423, 4384, 4309, 4800, 4801, 4802, 4803, 4804, 4805, 4806, 4807, + 4808, 4809, 4810, 4800, 4801, 4802, 4803, 4804, 4805, 4806, 4807, 4808, 4809, + 4810, 4811, 4812, 4813, 4814, 4815, 4816, 92, 4817, 4818, 4818, 4819, 4820, + 4821, 4822, 4822, 4823, 4824, 4825, 4826, 4826, 4827, 4828, 4829, 4830, 4830, + 4831, 4832, 340, 782, 4834, 4835, 4836, 4837, 4838, 4839, 4840, 4841, 4842, + 4843, 4844, 4845, 4846, 4847, 4848, 4849, 4849, 4850, 4851, 4852, 4853, 4853, + 4854, 4855, 782, 4857, 4858, 4859, 4860, 4861, 4862, 4863, 4864, 4865, 4866, + 4867, 4868, 4869, 4870, 4871, 4872, 4872, 4873, 4874, 4875, 4876, 4876, 4877, + 4878, 632, 632, 4880, 4881, 594, 594, 4883, 4884, 621, 4886, 4887, 4888, + 4889, 4889, 4890, 4891, 4892, 4885, 4882, 4893, 3388, 4894, 4895, 4893, 3388, + 4894, 4895, 4896, 4897, 4898, 3386, 3386, 4899, 4900, 4901, 4902, 4903, 4903, + 4904, 4905, 3363, 4907, 4908, 4909, 4910, 4910, 4911, 4912, 4913, 4914, 4914, + 4915, 4916, 4917, 4918, 4918, 4919, 4920, 4921, 4922, 4923, 4924, 4925, 4926, + 4926, 4927, 4928, 4929, 4930, 4930, 4931, 4932, 4933, 4934, 4934, 4935, 4936, + 4937, 4938, 4938, 4939, 4940, 4941, 4942, 4942, 4943, 4944, 4945, 4946, 4946, + 4947, 4948, 4949, 4950, 4951, 4952, 4953, 4954, 4954, 4955, 4956, 4957, 4958, + 4958, 4959, 4960, 4961, 4962, 4962, 4963, 4964, 4965, 4966, 4966, 4967, 4968, + 4969, 4970, 4970, 4971, 4972, 4973, 4974, 4974, 4975, 4976, 4977, 4978, 4979, + 4980, 4981, 4982, 4982, 4983, 4984, 4985, 4986, 4986, 4987, 4988, 4989, 4990, + 4990, 4991, 4992, 4993, 4994, 4994, 4995, 4996, 4997, 4998, 4999, 5000, 5001, + 5002, 5002, 5003, 5004, 5005, 5006, 5006, 5007, 5008, 5009, 5010, 5010, 5011, + 5012, 5013, 5014, 5014, 5015, 5016, 5017, 5018, 5019, 5020, 5021, 5022, 5022, + 5023, 5024, 5025, 5026, 5026, 5027, 5028, 5029, 5030, 5030, 5031, 5032, 5033, + 5034, 5034, 5035, 5036, 5037, 5038, 5038, 5039, 5040, 5041, 5042, 5042, 5043, + 5044, 5045, 4906, 4879, 4856, 4833, 5046, 5047, 5048, 5049, 5050, 5046, 5047, + 5048, 5049, 5050, 5051, 5052, 3585, 5054, 5055, 5056, 5057, 5058, 5059, 5060, + 5061, 5062, 5063, 5064, 5065, 5066, 5067, 5068, 5069, 5070, 5071, 5072, 543, + 543, 5073, 3411, 5074, 5075, 49, 4859, 5077, 5077, 5078, 5079, 5080, 5081, + 5081, 5082, 5083, 5084, 5085, 5085, 5086, 5087, 5088, 5076, 5089, 5090, 5089, + 5090, 5091, 5092, 3501, 5094, 5095, 5096, 5097, 3692, 5097, 3692, 5098, 5099, + 975, 5101, 5102, 986, 989, 997, 1000, 5104, 5105, 5106, 5103, 749, 1008, + 5107, 5108, 5109, 5110, 543, 750, 5112, 5113, 48, 5114, 49, 5111, 594, 765, + 951, 1564, 5115, 5116, 5117, 5118, 234, 268, 674, 1041, 1042, 5120, 5121, + 229, 236, 247, 715, 5123, 5124, 457, 632, 5126, 5127, 469, 470, 474, 475, + 476, 481, 701, 5129, 5130, 235, 237, 238, 245, 246, 482, 493, 494, 495, 502, + 5132, 5133, 248, 249, 251, 448, 515, 518, 519, 523, 526, 535, 5135, 5136, + 263, 462, 536, 540, 5138, 5139, 250, 388, 507, 828, 5141, 5142, 393, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 5144, 5145, 5146, 5143, 5140, 5137, + 5134, 5131, 5128, 5125, 5122, 5147, 5148, 5149, 5150, 5151, 5152, 5153, 5154, + 5155, 5156, 5157, 369, 410, 694, 5159, 5160, 5161, 5162, 5163, 5164, 621, + 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 5166, 5167, 5168, 5169, + 5170, 5171, 5172, 5165, 5158, 5173, 5174, 5175, 5176, 5177, 591, 835, 5179, + 5180, 437, 5182, 5183, 43, 5184, 2, 5181, 5178, 5119, 340, 512, 763, 764, + 1086, 5185, 5186, 5187, 5188, 5189, 5190, 5191, 5192, 5193, 5194, 5195, 5196, + 5196, 5197, 5198, 5199, 5200, 5200, 5201, 5202, 1612, 1613, 5204, 5205, 1617, + 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 5207, 5208, 462, 1638, + 1639, 5210, 5211, 694, 1643, 1644, 1645, 1646, 1647, 5213, 5214, 674, 5216, + 5217, 340, 1655, 5219, 5220, 1658, 1659, 5222, 5223, 5224, 5221, 5218, 5215, + 5212, 5209, 5206, 5225, 5226, 5227, 5228, 5229, 5230, 5231, 5232, 5233, 1671, + 1672, 1673, 5235, 5236, 1678, 1679, 1680, 5238, 5239, 1685, 1686, 1687, 1688, + 5241, 5242, 1694, 1695, 1696, 1697, 1698, 1699, 5244, 5245, 1707, 1708, 5247, + 5248, 5249, 5246, 5243, 5240, 5237, 3092, 5250, 5251, 5252, 5253, 5254, 5255, + 5256, 986, 989, 1008, 5258, 5259, 997, 1000, 5261, 5262, 1041, 1042, 1720, + 1721, 1722, 1723, 1724, 1725, 1726, 5264, 5265, 1735, 5267, 5268, 5269, 268, + 1738, 5270, 5271, 5272, 1742, 1743, 1744, 1745, 5274, 5275, 5276, 5273, 5266, + 5263, 5260, 5277, 5278, 5279, 5280, 5281, 5282, 5283, 1757, 1758, 5285, 5286, + 5287, 5288, 5289, 5290, 975, 5292, 5293, 5294, 5295, 5296, 5297, 835, 1767, + 5299, 5300, 369, 1770, 5302, 5303, 543, 632, 1773, 1774, 1775, 5305, 5306, + 1780, 1781, 5308, 5309, 5310, 5307, 5304, 5301, 5298, 5291, 5311, 5312, 5313, + 5314, 5315, 5316, 5317, 5318, 1792, 5320, 5321, 5322, 5323, 5324, 5325, 5326, + 5327, 5328, 5329, 5330, 5319, 5284, 5257, 5234, 5331, 5332, 5333, 5334, 5335, + 5336, 5337, 1805, 5339, 5340, 5341, 5342, 5343, 5344, 5345, 1810, 5346, 5347, + 5348, 1814, 5350, 5351, 5352, 5353, 5354, 5355, 5356, 474, 475, 476, 5357, + 5358, 5359, 5360, 5349, 3182, 3528, 5361, 5362, 5363, 5364, 1824, 1825, 5366, + 5367, 594, 5369, 5370, 5371, 5372, 5373, 5374, 5375, 5376, 5377, 5378, 5379, + 5368, 457, 3191, 5380, 5381, 5382, 5383, 1837, 5385, 5386, 5387, 229, 5388, + 5389, 5390, 1842, 5392, 5393, 1845, 1846, 1847, 5395, 5396, 1852, 1853, 5398, + 5399, 1857, 5401, 5402, 5403, 5400, 5397, 5394, 5404, 5405, 5406, 5407, 5408, + 5409, 5410, 5391, 3198, 5411, 5412, 5413, 5414, 1868, 5416, 5417, 1871, 5419, + 5420, 1874, 1875, 1876, 1877, 1878, 5422, 5423, 5424, 5421, 5418, 502, 5425, + 5426, 5427, 5428, 5429, 1889, 5431, 5432, 5433, 5434, 5435, 5436, 1018, 1019, + 1020, 1021, 5438, 5439, 1022, 1026, 5441, 5442, 5443, 5440, 5444, 5445, 5446, + 5447, 437, 5449, 5450, 5451, 5452, 5453, 5454, 1902, 5456, 5457, 5458, 5459, + 5460, 5461, 5462, 5463, 5464, 5465, 5466, 5455, 5448, 5437, 5430, 5467, 5468, + 5469, 5470, 5471, 5472, 5473, 1915, 5475, 5476, 5477, 5478, 5479, 5480, 5481, + 5482, 5483, 5484, 1922, 5486, 5487, 1925, 5489, 5490, 1928, 5492, 5493, 1931, + 5495, 5496, 5497, 5494, 5491, 5488, 5498, 5499, 5500, 5501, 5502, 5503, 5504, + 5505, 5506, 5507, 5508, 5485, 5509, 5510, 5511, 5512, 1944, 5514, 5515, 1947, + 5517, 5518, 5519, 5516, 3212, 5520, 5521, 5522, 5523, 512, 782, 5525, 5526, + 715, 1954, 1955, 1956, 1957, 5528, 5529, 234, 235, 236, 237, 238, 388, 5531, + 5532, 1964, 5534, 5535, 12, 5536, 245, 247, 248, 249, 250, 251, 448, 515, + 5537, 5538, 5539, 518, 519, 621, 828, 1969, 5541, 5542, 526, 1564, 1972, + 5544, 5545, 5546, 5543, 5540, 5533, 5530, 5527, 3232, 5547, 5548, 5549, 5550, + 5551, 5552, 5553, 5554, 1982, 5556, 5557, 1985, 5559, 5560, 1988, 5562, 5563, + 5564, 72, 5561, 73, 5558, 263, 5565, 5566, 5567, 5568, 5569, 540, 762, 763, + 764, 791, 1086, 5571, 5572, 393, 749, 750, 765, 1996, 1997, 1998, 1999, 5574, + 5575, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 5577, 5578, 1023, + 1024, 1025, 5580, 5581, 5582, 195, 951, 2024, 2026, 2027, 2028, 5583, 5584, + 5585, 2035, 2036, 2037, 2038, 2039, 2040, 5587, 5588, 2048, 2049, 5590, 5591, + 591, 5593, 5594, 5595, 5592, 5589, 5586, 5579, 5576, 5573, 5570, 5596, 5597, + 5598, 5599, 5600, 5601, 5602, 5603, 5604, 5605, 5606, 5555, 5524, 5513, 5474, + 5415, 5384, 5365, 5338, 1611, 3564, 3564, 5607, 5608, 5609, 5610, 5611, 5612, + 5613, 5614, 5615, 5616, 5617, 3249, 3250, 5619, 5620, 2075, 5622, 2076, 5624, + 5625, 5623, 5626, 5627, 5628, 5629, 2080, 5631, 2081, 5633, 2082, 5635, 2083, + 5637, 5638, 5636, 5634, 5632, 5639, 5640, 5641, 5642, 5643, 5644, 2089, 5646, + 2090, 5648, 5649, 5647, 5650, 5651, 5652, 5653, 2094, 5655, 2095, 5657, 5658, + 5656, 5659, 5660, 5661, 5662, 2099, 5664, 5665, 5666, 5667, 5668, 2102, 5670, + 2103, 5672, 2104, 5674, 5675, 5673, 5671, 5676, 5677, 5678, 5679, 5680, 2109, + 5682, 2110, 5684, 2111, 5686, 2112, 5688, 2113, 5690, 2114, 5692, 2115, 5694, + 5695, 5693, 5691, 5689, 5687, 5685, 5683, 5696, 5697, 5698, 5699, 5700, 5701, + 5702, 5703, 5704, 2124, 5706, 2125, 5708, 2126, 5710, 2127, 5712, 2128, 5714, + 2129, 5716, 2130, 5718, 2131, 5720, 5721, 5719, 5717, 5715, 5713, 5711, 5709, + 5707, 5722, 5723, 5724, 5725, 5726, 5727, 5728, 5729, 5730, 5731, 5732, 5705, + 5681, 5669, 5663, 5654, 5645, 5630, 5733, 5734, 5735, 5736, 5737, 5738, 5739, + 5740, 5741, 5742, 2150, 5744, 2151, 5746, 2152, 5748, 2153, 5750, 2154, 5752, + 2155, 5754, 2156, 5756, 5757, 5755, 5753, 5751, 5749, 5747, 5745, 5758, 5759, + 5760, 5761, 5762, 5763, 5764, 5765, 5766, 2165, 5768, 2166, 5770, 2167, 5772, + 2168, 5774, 2169, 5776, 2170, 5778, 5779, 5777, 5775, 5773, 5771, 5769, 5780, + 5781, 5782, 5783, 5784, 5785, 5786, 5787, 2178, 5789, 2179, 5791, 2180, 5793, + 2181, 5795, 2182, 5797, 5798, 5796, 5794, 5792, 5790, 5799, 5800, 5801, 5802, + 5803, 5804, 5805, 2189, 5807, 2190, 5809, 2191, 5811, 2192, 5813, 5814, 5812, + 5810, 5808, 5815, 5816, 5817, 5818, 5819, 5820, 5821, 5806, 5788, 5767, 5822, + 5823, 5824, 5825, 5826, 5827, 2203, 5829, 5830, 5831, 5832, 5833, 2206, 5835, + 2207, 5837, 2208, 5839, 2209, 5841, 5842, 5840, 5838, 5836, 5843, 5844, 5845, + 5846, 5847, 5848, 5849, 5834, 5850, 5851, 5852, 5853, 2218, 5855, 2219, 5857, + 2220, 5859, 5860, 5858, 5856, 5861, 5862, 5863, 5864, 5865, 2225, 5867, 5868, + 5869, 5870, 5871, 2228, 5873, 2229, 5875, 5876, 5874, 5877, 5878, 5879, 5880, + 2233, 5882, 5883, 5884, 5885, 5886, 5887, 5881, 5872, 5866, 5888, 5889, 5890, + 5891, 5892, 5893, 2241, 5895, 5896, 5897, 5898, 5899, 5900, 5901, 5902, 5903, + 2246, 5905, 2247, 5907, 2248, 5909, 5910, 5908, 5906, 5911, 5912, 5913, 5914, + 5915, 2253, 5917, 5918, 5919, 5920, 5921, 5922, 5916, 5923, 5924, 5925, 5926, + 5927, 5904, 5894, 5854, 5828, 5743, 5928, 5929, 5930, 5931, 5932, 5933, 5934, + 5935, 2266, 5937, 5938, 5939, 5940, 5941, 5942, 5943, 5944, 5945, 2271, 5947, + 5948, 5949, 5950, 5951, 2274, 5953, 5954, 5955, 5956, 5957, 5958, 5952, 5959, + 5960, 5961, 5962, 2280, 5964, 5965, 5966, 5967, 5968, 5969, 5970, 5971, 5972, + 5973, 5963, 5946, 5974, 5975, 5976, 5977, 5978, 2289, 5980, 5981, 5982, 5983, + 5984, 5985, 5986, 5987, 5988, 2294, 5990, 5991, 5992, 5993, 5994, 5995, 5996, + 5997, 5998, 5999, 5989, 6000, 6001, 6002, 6003, 2302, 6005, 6006, 6007, 6008, + 6009, 6010, 6011, 6012, 6013, 6014, 6015, 6016, 6017, 2309, 6019, 6020, 6021, + 6022, 6023, 6024, 6025, 6026, 6027, 6028, 6029, 6030, 6031, 2316, 6033, 6034, + 6035, 6036, 6037, 6038, 6039, 6040, 6041, 2321, 6043, 2322, 6045, 2323, 6047, + 2324, 6049, 6050, 6048, 6046, 6044, 6051, 6052, 6053, 6054, 6055, 6056, 6057, + 6058, 6059, 6060, 6061, 6042, 6062, 6063, 6064, 6065, 6066, 6032, 6018, 6004, + 5979, 5936, 6067, 6068, 6069, 6070, 6071, 6072, 6073, 6074, 6075, 6076, 6076, + 6077, 6078, 6079, 6080, 6080, 6081, 6082, 6083, 6084, 6084, 6085, 6086, 6087, + 6088, 6088, 6089, 6090, 6091, 5621, 5618, 6092, 6092, 6093, 3255, 3256, 3257, + 3258, 3259, 3568, 3569, 3262, 6094, 6095, 6096, 6097, 6098, 6098, 6099, 6100, + 975, 6102, 6103, 6104, 6105, 6106, 6107, 6108, 6109, 6109, 6110, 6111, 6112, + 6113, 6113, 6114, 6115, 6116, 6117, 6117, 6118, 6119, 6120, 6121, 6122, 6123, + 6124, 6125, 6126, 6127, 6128, 6129, 6130, 6131, 6132, 6133, 6134, 6135, 6136, + 6137, 6138, 6139, 1041, 6141, 6142, 6143, 6144, 6145, 6146, 6147, 6148, 6148, + 6149, 6150, 6151, 6152, 6152, 6153, 6154, 6155, 6156, 6156, 6157, 6158, 6159, + 6160, 6160, 6161, 6162, 6163, 6164, 6164, 6165, 6166, 6167, 6168, 6169, 6170, + 6171, 6172, 6173, 6174, 6175, 6176, 6177, 6178, 6179, 6180, 6181, 6182, 6183, + 6184, 6185, 6186, 6187, 6188, 6188, 6189, 6190, 6191, 6192, 6192, 6193, 6194, + 6195, 6196, 6196, 6197, 6198, 6199, 6200, 6200, 6201, 6202, 6203, 6204, 6204, + 6205, 6206, 6207, 6208, 6208, 6209, 6210, 6211, 6212, 6212, 6213, 6214, 6215, + 749, 750, 6216, 6217, 6218, 1042, 6220, 6221, 6222, 6223, 6224, 6225, 6226, + 6227, 6227, 6228, 6229, 6230, 6231, 6231, 6232, 6233, 6234, 6235, 6235, 6236, + 6237, 6238, 6239, 6239, 6240, 6241, 6242, 6243, 6243, 6244, 6245, 6246, 6247, + 6248, 6249, 6250, 6251, 6251, 6252, 6253, 6254, 6255, 6255, 6256, 6257, 6258, + 6259, 6259, 6260, 6261, 6262, 6263, 6263, 6264, 6265, 6266, 6267, 6267, 6268, + 6269, 6270, 6271, 6271, 6272, 6273, 6274, 6275, 6275, 6276, 6277, 6278, 6279, + 6280, 6281, 43, 6282, 44, 6219, 340, 763, 764, 765, 782, 791, 1086, 6283, + 6284, 6285, 6286, 6287, 6288, 6289, 6290, 6291, 6292, 6293, 6294, 6295, 6296, + 6297, 6298, 6299, 6300, 6301, 6302, 512, 762, 763, 6304, 6305, 764, 6307, + 6308, 340, 782, 6310, 6311, 791, 6313, 6314, 765, 835, 1086, 6316, 6317, + 6318, 6315, 6312, 6309, 6306, 6320, 6319, 6321, 6322, 6323, 6324, 6325, 6326, + 314, 5452, 6327, 6328, 6329, 6330, 6331, 6332, 6333, 6334, 6335, 6335, 6336, + 6337, 6338, 6303, 6140, 6339, 6339, 6340, 6341, 6342, 6343, 314, 314, 6345, + 6346, 6347, 6348, 6348, 6349, 6350, 6351, 6352, 6353, 6354, 6355, 6356, 6357, + 6358, 6359, 6360, 6361, 6362, 311, 6364, 6365, 6366, 6367, 6368, 6369, 6370, + 6371, 6372, 6373, 6374, 6375, 6376, 6377, 6378, 6379, 6380, 6381, 6382, 6383, + 6383, 6384, 6385, 6386, 6387, 6387, 6388, 6389, 6390, 6391, 6391, 6392, 6393, + 6394, 6395, 6396, 6397, 6398, 6399, 6400, 6401, 6402, 6403, 6404, 6405, 512, + 6407, 6408, 6409, 6410, 6411, 6412, 6413, 6414, 6415, 6416, 6417, 6418, 6419, + 6420, 6421, 750, 6422, 6423, 6424, 762, 6426, 6427, 6428, 6429, 6430, 6431, + 6432, 6433, 6434, 6435, 6436, 6437, 6438, 6439, 6440, 6441, 6442, 6443, 763, + 6445, 6446, 6447, 6448, 6449, 6450, 6451, 6452, 6453, 6454, 6455, 6456, 6457, + 6458, 6459, 6460, 6461, 6462, 764, 6464, 6465, 6466, 6467, 6468, 6469, 6470, + 6471, 6472, 6473, 6474, 6475, 6476, 6477, 6478, 6479, 6480, 6481, 1086, 6483, + 6484, 6485, 6486, 6487, 6488, 6489, 6490, 6491, 6492, 6493, 6494, 6495, 6496, + 6497, 6498, 6499, 6500, 340, 6502, 6503, 6504, 6505, 6506, 6507, 6508, 6509, + 6510, 6511, 6512, 6513, 6514, 6515, 6516, 6517, 6518, 6519, 782, 6521, 6522, + 6523, 6524, 6525, 6526, 6527, 6528, 6529, 6530, 6531, 6532, 6533, 6534, 6535, + 6536, 6537, 6538, 6320, 6540, 6541, 6542, 6543, 6544, 6545, 6546, 6547, 6548, + 6549, 6550, 6551, 6552, 6553, 765, 6555, 6556, 6557, 6558, 6559, 6560, 6561, + 6562, 6563, 6564, 6565, 6566, 6567, 6568, 6569, 6570, 6571, 6572, 40, 6573, + 48, 6554, 49, 6539, 50, 6520, 3, 6501, 41, 6482, 42, 6463, 43, 6444, 44, + 6425, 6574, 6575, 6576, 6577, 6578, 6579, 6580, 6581, 6582, 6583, 6584, 6585, + 6586, 6587, 6588, 6589, 6590, 6591, 6592, 6593, 6594, 6595, 6596, 6597, 6598, + 6599, 6600, 6601, 6406, 6602, 6603, 6604, 6605, 6606, 6363, 6344, 6607, 6608, + 6609, 6610, 6611, 6612, 6613, 6613, 6614, 6615, 6616, 6101, 5203, 6617, 6618, + 6619, 6617, 6618, 6619, 6620, 6621, 1564, 6623, 6624, 6625, 6626, 6627, 6628, + 6629, 6630, 6631, 6632, 6633, 6634, 6635, 6636, 6637, 6638, 6638, 6639, 6640, + 6641, 6642, 6643, 6644, 6645, 6646, 6646, 6647, 6648, 6649, 6650, 6650, 6651, + 6652, 3737, 6654, 6655, 6656, 6657, 6658, 6659, 835, 835, 6661, 6662, 6663, + 6664, 6664, 6665, 6666, 6667, 6668, 6668, 6669, 6670, 6671, 6660, 6672, 6673, + 6672, 6673, 6674, 6675, 835, 6677, 6678, 6679, 6680, 6681, 6682, 6683, 6684, + 6685, 6686, 6687, 6688, 6689, 6690, 6691, 6692, 6693, 6694, 835, 835, 6696, + 6697, 6698, 6699, 6700, 6701, 6702, 6703, 6704, 6705, 6706, 6707, 6708, 6709, + 6710, 6711, 6712, 6713, 6714, 6715, 6716, 6717, 6718, 6719, 6720, 6721, 6722, + 6723, 6724, 6725, 6726, 6727, 6728, 6729, 6730, 6731, 6732, 6733, 6734, 6735, + 6735, 6736, 6737, 6738, 6695, 6740, 6739, 6740, 6741, 6742, 6743, 6676, 6744, + 6745, 6744, 6745, 6746, 6747, 750, 6749, 6750, 6751, 512, 762, 763, 764, + 765, 6752, 6753, 6754, 6755, 6756, 6756, 6757, 6758, 6759, 6760, 6760, 6761, + 6762, 6763, 6764, 6764, 6765, 6766, 6767, 512, 762, 763, 764, 765, 6768, + 6768, 6769, 6770, 3248, 6772, 6773, 951, 951, 6775, 6776, 6777, 6778, 6778, + 6779, 6780, 6781, 6782, 6782, 6783, 6784, 6785, 6786, 6786, 6787, 6788, 6789, + 6790, 6790, 6791, 6792, 6793, 6774, 6795, 6794, 6796, 6797, 6798, 6799, 6799, + 6800, 6801, 388, 388, 6803, 6804, 6805, 6806, 6806, 6807, 6808, 6809, 6810, + 6810, 6811, 6812, 6813, 6814, 6814, 6815, 6816, 6817, 6818, 6819, 6820, 6821, + 6822, 6823, 6824, 6825, 6826, 6827, 6828, 6829, 6830, 6831, 6832, 6833, 6834, + 6835, 6836, 6837, 6838, 6838, 6839, 6840, 6841, 6842, 6842, 6843, 6844, 6845, + 6846, 6846, 6847, 6848, 6849, 6850, 6850, 6851, 6852, 6853, 6854, 6854, 6855, + 6856, 6857, 6858, 6858, 6859, 6860, 6861, 6862, 6862, 6863, 6864, 6865, 6866, + 6866, 6867, 6868, 6869, 6870, 6870, 6871, 6872, 6873, 6874, 6874, 6875, 6876, + 6877, 6878, 6878, 6879, 6880, 6881, 6882, 6882, 6883, 6884, 6885, 6886, 6887, + 6888, 6889, 6890, 6890, 6891, 6892, 674, 3493, 3493, 6894, 6895, 3984, 6897, + 6898, 6899, 6900, 6900, 6901, 6902, 6903, 6904, 6904, 6905, 6906, 6907, 6908, + 6908, 6909, 6910, 6911, 6912, 6912, 6913, 6914, 4011, 6916, 6917, 6918, 6919, + 6919, 6920, 6921, 6922, 6923, 6923, 6924, 6925, 975, 6105, 6927, 6928, 6929, + 6930, 6930, 6931, 6932, 3313, 3313, 6934, 6935, 6936, 6937, 6937, 6938, 6939, + 6940, 6941, 6942, 6943, 4044, 4045, 4044, 4045, 4049, 6945, 6946, 6947, 6948, + 6949, 6950, 4059, 4060, 4059, 4060, 4064, 6952, 6953, 6954, 6955, 6956, 6957, + 6958, 6951, 1008, 6959, 6960, 6961, 6962, 6963, 1008, 6959, 6960, 6964, 6965, + 6966, 6967, 6968, 6968, 6969, 6970, 6971, 2, 6944, 6933, 6972, 6973, 6974, + 6972, 6973, 6974, 6975, 6976, 6795, 4121, 6978, 6979, 6980, 6981, 6982, 6983, + 6984, 6985, 6985, 6986, 6987, 6988, 6989, 6989, 6990, 6991, 6992, 6993, 6993, + 6994, 6995, 6996, 6997, 6997, 6998, 6999, 7000, 7001, 7001, 7002, 7003, 7004, + 7005, 7005, 7006, 7007, 7008, 6977, 6926, 6915, 6896, 6893, 6802, 6771, 6748, + 6653, 6622, 5100, 5093, 5053, 4194, 3069, 3034, 2840, 2823, 7027, 7028, 7029, + 7030, 7031, 2830, 7033, 2833, 7035, 7036, 7034, 7038, 7037, 7039, 7040, 2841, + 7042, 7043, 7044, 7045, 7046, 2848, 7048, 7049, 7050, 7050, 7051, 7052, 7053, + 7054, 7054, 7055, 7056, 7057, 7058, 7058, 7059, 7060, 7061, 7062, 7062, 7063, + 7064, 7065, 7066, 7066, 7067, 7068, 7069, 7070, 7070, 7071, 7072, 7073, 7074, + 7074, 7075, 7076, 7077, 7078, 7079, 7080, 7081, 7082, 7082, 7083, 7084, 7085, + 7086, 7086, 7087, 7088, 7089, 7090, 7090, 7091, 7092, 7093, 7094, 7094, 7095, + 7096, 7097, 7098, 7098, 7099, 7100, 7101, 7102, 7102, 7103, 7104, 7105, 7106, + 7106, 7107, 7108, 7109, 7110, 7110, 7111, 7112, 7113, 7114, 7115, 7116, 7117, + 7118, 7118, 7119, 7120, 7121, 7122, 7122, 7123, 7124, 7125, 7126, 7126, 7127, + 7128, 2931, 7130, 2934, 7132, 7133, 7131, 7134, 7135, 7136, 7137, 7138, 7139, + 7140, 7141, 7142, 7143, 7144, 7145, 7146, 7147, 7148, 7149, 7150, 7151, 7152, + 7153, 7154, 7155, 7156, 7157, 7158, 7159, 7160, 7161, 7162, 7163, 7163, 7164, + 7165, 7166, 7167, 7168, 7169, 7170, 7171, 7171, 7172, 7173, 7174, 7175, 7175, + 7176, 7177, 2982, 7179, 7180, 7181, 7181, 7182, 7183, 7184, 7185, 7185, 7186, + 7187, 7188, 7189, 7189, 7190, 7191, 2997, 7193, 7194, 7195, 7195, 7196, 7197, + 3004, 7199, 7200, 7201, 7202, 7203, 7204, 7205, 7206, 7207, 7208, 7209, 7210, + 7211, 7212, 7213, 7213, 7214, 7215, 7216, 7198, 7218, 7218, 7217, 7217, 7219, + 7220, 7221, 7192, 7178, 7129, 7223, 7223, 7222, 7224, 7225, 7222, 7224, 7225, + 7226, 7227, 3035, 7229, 7230, 7231, 7231, 7232, 7233, 7234, 7235, 7235, 7236, + 7237, 7238, 7239, 7239, 7240, 7241, 7242, 7243, 7243, 7244, 7245, 7246, 7247, + 7248, 7249, 7250, 7251, 7252, 7253, 7254, 7255, 7255, 7256, 7257, 7258, 7259, + 7259, 7260, 7261, 3070, 7263, 7264, 7265, 7266, 7267, 3077, 7269, 7270, 7271, + 7272, 7273, 7274, 7268, 7275, 7276, 7277, 7278, 3089, 7280, 7281, 7282, 7283, + 7284, 7285, 7286, 7287, 7288, 7289, 7279, 7290, 7291, 7292, 7293, 7294, 7295, + 7296, 7297, 7298, 7299, 7299, 7300, 7301, 7302, 7303, 7303, 7304, 7305, 7306, + 7307, 7307, 7308, 7309, 3121, 7311, 7312, 7313, 7313, 7314, 7315, 7316, 7317, + 7317, 7318, 7319, 7320, 7321, 7321, 7322, 7323, 7324, 7325, 7325, 7326, 7327, + 3140, 7329, 3143, 7331, 3146, 7333, 7334, 7332, 7330, 7335, 7336, 7337, 7335, + 7336, 7337, 7338, 7339, 3155, 7341, 7342, 7343, 7290, 7291, 7344, 7345, 3162, + 7347, 7348, 7349, 7350, 7351, 7352, 7353, 7354, 7355, 3173, 7357, 3176, 7359, + 3179, 7361, 7362, 7360, 7358, 7363, 7364, 7365, 7366, 7367, 3188, 7369, 7370, + 7371, 7372, 7373, 3195, 7375, 7376, 7029, 7377, 7378, 7379, 3202, 7381, 7382, + 7383, 7384, 7385, 3209, 7387, 7388, 7389, 7390, 7391, 3216, 7393, 3219, 7395, + 3222, 7397, 3225, 7399, 3228, 7401, 7402, 7400, 7398, 7396, 7394, 7403, 7404, + 7405, 7406, 7038, 7407, 7408, 7409, 3239, 7411, 3242, 7413, 3245, 7415, 7416, + 7414, 7412, 7417, 7418, 7419, 7420, 7421, 7422, 7410, 7392, 7386, 7380, 7374, + 7368, 7356, 7346, 7340, 7424, 7425, 7426, 7427, 7428, 7431, 7423, 7429, 7430, + 7432, 7433, 7434, 7078, 7078, 7436, 7437, 7438, 7439, 7439, 7440, 7441, 7442, + 7443, 7443, 7444, 7445, 7446, 7447, 7447, 7448, 7449, 7450, 7451, 7451, 7452, + 7453, 7454, 7455, 7455, 7456, 7457, 7458, 7459, 7459, 7460, 7461, 7462, 7463, + 7463, 7464, 7465, 7466, 7467, 7467, 7468, 7469, 7470, 7471, 7471, 7472, 7473, + 7474, 7475, 7475, 7476, 7477, 7218, 7218, 7479, 7480, 7481, 7478, 7482, 7482, + 7483, 7483, 7484, 7485, 7247, 7487, 7488, 7489, 7490, 7490, 7491, 7492, 7493, + 7494, 7494, 7495, 7496, 3329, 7498, 3332, 7500, 7501, 7502, 7502, 7503, 7504, + 7505, 7506, 7506, 7507, 7508, 7509, 7510, 7510, 7511, 7512, 7513, 7514, 7514, + 7515, 7516, 7517, 7518, 7518, 7519, 7520, 7521, 7522, 7522, 7523, 7524, 7525, + 7526, 7526, 7527, 7528, 7529, 7530, 7530, 7531, 7532, 7533, 7534, 7534, 7535, + 7536, 7537, 7538, 7538, 7539, 7540, 7541, 7542, 7542, 7543, 7544, 7545, 7546, + 7546, 7547, 7548, 3383, 7550, 7551, 7549, 7499, 7552, 7552, 7554, 7554, 7553, + 7553, 7555, 7556, 7557, 7558, 7558, 7559, 7560, 7561, 7562, 7562, 7563, 7564, + 3400, 7566, 7567, 7568, 7569, 7570, 7571, 7572, 7573, 7574, 7575, 543, 543, + 7576, 7577, 7578, 7579, 7580, 7580, 7581, 7582, 3419, 7584, 7585, 7586, 7586, + 7587, 7588, 7589, 7590, 7590, 7591, 7592, 7593, 7594, 7594, 7595, 7596, 7597, + 7598, 7598, 7599, 7600, 7601, 7602, 7602, 7603, 7604, 7605, 7606, 7606, 7607, + 7608, 7609, 7610, 7610, 7611, 7612, 7613, 7614, 7614, 7615, 7616, 7617, 7618, + 7618, 7619, 7620, 7621, 7622, 7622, 7623, 7624, 7625, 7626, 7626, 7627, 7628, + 7629, 7630, 7630, 7631, 7632, 7633, 7634, 7634, 7635, 7636, 7637, 7638, 7638, + 7639, 7640, 3478, 7642, 7643, 7644, 7644, 7645, 7646, 7647, 7648, 7648, 7649, + 7650, 7651, 7652, 7652, 7653, 7654, 7655, 7656, 7656, 7657, 7658, 7659, 7660, + 7660, 7661, 7662, 7663, 7641, 7664, 7664, 7665, 7665, 7666, 7667, 7047, 7669, + 7670, 7671, 7672, 7673, 7673, 7674, 7675, 3514, 7677, 7678, 7679, 7349, 7680, + 7681, 7682, 7683, 7684, 7685, 3525, 7687, 7688, 7363, 7364, 7689, 7690, 7691, + 7377, 7693, 7694, 3535, 7696, 3538, 7698, 7699, 7697, 7403, 7404, 7405, 7700, + 7701, 7702, 7703, 3546, 7705, 7706, 7418, 7707, 7708, 7709, 3553, 7711, 7712, + 7713, 7713, 7714, 7715, 7716, 7717, 7717, 7718, 7719, 7720, 7710, 7704, 7695, + 7692, 7686, 7426, 7431, 7721, 7721, 7725, 7726, 7722, 7723, 7724, 7727, 7728, + 7729, 7676, 7730, 7731, 7730, 7731, 7732, 7733, 3578, 7735, 7736, 7737, 7738, + 7739, 7740, 7741, 7742, 7743, 7744, 7745, 7746, 7747, 7748, 7749, 7750, 7751, + 7752, 7753, 7754, 7755, 7756, 7757, 7757, 7758, 7759, 7760, 7761, 7761, 7762, + 7763, 7764, 7765, 7766, 7767, 3613, 7769, 7770, 7771, 7772, 7773, 7774, 7775, + 7776, 7777, 7778, 7779, 7780, 7781, 7782, 7783, 7784, 7785, 7223, 7223, 7787, + 7788, 3635, 7790, 7791, 7792, 7792, 7793, 7794, 7795, 7796, 7796, 7797, 7798, + 7799, 7800, 7800, 7801, 7802, 7803, 7804, 7804, 7805, 7806, 7807, 7808, 7808, + 7809, 7810, 7811, 7812, 7812, 7813, 7814, 3662, 7816, 7817, 7818, 7818, 7819, + 7820, 7821, 7822, 7822, 7823, 7824, 7825, 7826, 7826, 7827, 7828, 3677, 7830, + 7831, 7832, 7832, 7833, 7834, 7835, 7836, 7836, 7837, 7838, 7839, 7840, 7840, + 7841, 7842, 7843, 7844, 7844, 7845, 7846, 7847, 7829, 7815, 7789, 512, 762, + 763, 764, 765, 7848, 7849, 7850, 7851, 7848, 7849, 7850, 7851, 7852, 7853, + 7854, 7855, 7855, 7856, 7857, 7858, 7859, 7859, 7860, 7861, 7862, 7863, 7863, + 7864, 7865, 7866, 7867, 7867, 7868, 7869, 7870, 7786, 7768, 7871, 7871, 7872, + 7873, 7874, 7875, 7876, 7877, 7877, 7878, 7879, 7880, 7734, 7881, 7882, 7881, + 7882, 7883, 7884, 3734, 7886, 7887, 7888, 7889, 7890, 7891, 7892, 7892, 7893, + 7894, 3745, 7896, 7897, 7898, 7899, 7900, 7901, 7902, 7903, 7904, 7905, 7906, + 7907, 7908, 7909, 7910, 7911, 7912, 7913, 7914, 7915, 7916, 7917, 7918, 7919, + 7920, 7921, 7922, 7923, 7924, 7925, 7926, 7926, 7927, 7928, 7929, 7895, 7930, + 7931, 7930, 7931, 7932, 7933, 3785, 7935, 7936, 7937, 7937, 7938, 7939, 7940, + 7941, 7941, 7942, 7943, 7944, 7945, 7945, 7946, 7947, 7948, 7949, 7949, 7950, + 7951, 7952, 7953, 7953, 7954, 7955, 7956, 7957, 7958, 7959, 7960, 7961, 7962, + 7963, 3816, 7965, 7966, 7967, 7967, 7968, 7969, 7970, 7971, 7971, 7972, 7973, + 7974, 7975, 7975, 7976, 7977, 7978, 7979, 7979, 7980, 7981, 7982, 7983, 7983, + 7984, 7985, 7986, 7987, 7987, 7988, 7989, 7990, 7991, 7991, 7992, 7993, 7994, + 7995, 7995, 7996, 7997, 7998, 7999, 7999, 8000, 8001, 8002, 8003, 8003, 8004, + 8005, 8006, 8007, 8007, 8008, 8009, 8010, 8011, 8012, 8013, 3867, 8015, 8016, + 8017, 8017, 8018, 8019, 8020, 8021, 8021, 8022, 8023, 8024, 8025, 8025, 8026, + 8027, 8028, 8029, 8029, 8030, 8031, 8032, 8033, 8033, 8034, 8035, 8036, 8037, + 8037, 8038, 8039, 8040, 8041, 8041, 8042, 8043, 8044, 8045, 8045, 8046, 8047, + 8048, 8049, 8049, 8050, 8051, 8052, 8053, 8053, 8054, 8055, 8056, 8057, 8058, + 8059, 7032, 8061, 8062, 8063, 8064, 8065, 8065, 8066, 8067, 8068, 8069, 8069, + 8070, 8071, 8072, 8073, 8073, 8074, 8075, 8076, 8077, 8077, 8078, 8079, 8080, + 8081, 8081, 8082, 8083, 8084, 8085, 8085, 8086, 8087, 8088, 8089, 8089, 8090, + 8091, 8092, 8060, 8014, 8093, 8093, 8094, 8095, 8096, 8097, 3952, 8099, 8100, + 8101, 8102, 8103, 8104, 8105, 8106, 8107, 8108, 8098, 7964, 8109, 8109, 8110, + 8111, 8112, 8113, 8114, 8115, 8115, 8116, 8117, 3973, 8119, 8120, 8121, 8121, + 8122, 8123, 8124, 8125, 8125, 8126, 8127, 8128, 8129, 8129, 8130, 8131, 8132, + 8133, 8133, 8134, 8135, 8136, 8137, 8137, 8138, 8139, 8140, 8141, 8141, 8142, + 8143, 4000, 8145, 8146, 8147, 8148, 8149, 8150, 8151, 8152, 8153, 8154, 8155, + 8155, 8156, 8157, 8158, 8159, 8159, 8160, 8161, 4019, 8163, 8164, 8165, 8165, + 8166, 8167, 8168, 8169, 8169, 8170, 8171, 8172, 8173, 8173, 8174, 8175, 8176, + 8177, 8177, 8178, 8179, 4038, 8181, 4041, 8183, 8184, 8182, 8185, 8185, 8186, + 8186, 8187, 8188, 8189, 8190, 8191, 8192, 4053, 8194, 4056, 8196, 8197, 8195, + 8198, 8198, 8199, 8199, 8200, 8201, 8202, 8203, 8204, 8205, 8206, 8193, 1008, + 8207, 8208, 8209, 8210, 8211, 8212, 8212, 8213, 8214, 8215, 8180, 8216, 8217, + 8216, 8217, 8218, 8219, 4082, 8221, 8222, 8223, 8224, 8225, 8226, 8227, 8228, + 8229, 4093, 8231, 8232, 8233, 8233, 8234, 8235, 8236, 8237, 8237, 8238, 8239, + 8240, 8241, 8241, 8242, 8243, 8244, 8245, 8245, 8246, 8247, 8248, 8249, 8249, + 8250, 8251, 8252, 8253, 8254, 8255, 8256, 8230, 8258, 8257, 8259, 8260, 8261, + 8262, 8262, 8263, 8264, 8265, 8266, 8266, 8267, 8268, 8269, 8270, 8270, 8271, + 8272, 8273, 8274, 8274, 8275, 8276, 8277, 8278, 8278, 8279, 8280, 8281, 8282, + 8282, 8283, 8284, 8285, 8220, 8162, 8144, 8118, 7934, 7885, 7668, 7583, 7565, + 7497, 7486, 8286, 8287, 8288, 8289, 8290, 8291, 8292, 8293, 8294, 8295, 8296, + 8297, 8286, 8287, 8288, 8289, 8290, 8291, 8292, 8293, 8294, 8295, 8296, 8297, + 8298, 8299, 4164, 8301, 8302, 8303, 8303, 8304, 8305, 8306, 8307, 8307, 8308, + 8309, 8310, 8311, 8311, 8312, 8313, 8314, 8315, 8315, 8316, 8317, 8318, 8319, + 8319, 8320, 8321, 8322, 8300, 7435, 7328, 7310, 8323, 8324, 8325, 8326, 8327, + 8323, 8324, 8325, 8326, 8327, 8328, 8329, 4195, 8331, 8332, 8333, 8333, 8334, + 8335, 4202, 8337, 4205, 8339, 4208, 8341, 4211, 8343, 4214, 8345, 4217, 8347, + 4220, 8349, 4223, 8351, 4226, 8353, 4229, 8355, 8356, 8357, 8357, 8358, 8359, + 8360, 8361, 8361, 8362, 8363, 8364, 8365, 8365, 8366, 8367, 4244, 8369, 4247, + 8371, 4250, 8373, 4253, 8375, 4256, 8377, 8378, 8376, 8374, 8372, 8370, 8368, + 8354, 8352, 8350, 8348, 8346, 8344, 8342, 8340, 8338, 8336, 8379, 8380, 8381, + 8382, 8383, 8384, 8385, 8386, 8387, 8388, 8389, 8390, 8391, 8392, 8393, 8394, + 8379, 8380, 8381, 8382, 8383, 8384, 8385, 8386, 8387, 8388, 8389, 8390, 8391, + 8392, 8393, 8394, 8395, 8396, 8397, 8398, 8399, 8400, 4282, 8402, 8403, 8404, + 8404, 8405, 8406, 8407, 8408, 8408, 8409, 8410, 8411, 8412, 8412, 8413, 8414, + 8415, 8416, 8416, 8417, 8418, 8419, 8420, 8420, 8421, 8422, 8423, 8401, 8424, + 8425, 8424, 8425, 8426, 8427, 4310, 8429, 8430, 8431, 8431, 8432, 8433, 8434, + 8435, 8435, 8436, 8437, 8438, 8439, 8439, 8440, 8441, 8442, 8443, 8444, 8445, + 8446, 8447, 8448, 8449, 8450, 8451, 8452, 8453, 8454, 8455, 8456, 8457, 8458, + 8459, 8460, 8461, 4345, 8463, 8464, 8465, 8465, 8466, 8467, 8468, 8469, 8469, + 8470, 8471, 8472, 8473, 8473, 8474, 8475, 8476, 8477, 8478, 8479, 8480, 8481, + 8482, 8483, 8484, 8485, 8486, 8487, 8488, 8489, 8490, 8491, 8492, 8493, 8494, + 8495, 8496, 8462, 8497, 8497, 8498, 8498, 8499, 8500, 4385, 8502, 8503, 8504, + 8504, 8505, 8506, 8507, 8508, 8508, 8509, 8510, 8511, 8512, 8512, 8513, 8514, + 8515, 8516, 8517, 8518, 8519, 8520, 8521, 8522, 8523, 8524, 8525, 8526, 8527, + 8528, 8529, 8530, 8531, 8532, 8533, 8534, 8535, 8536, 8536, 8537, 8538, 4424, + 8540, 8541, 8542, 8542, 8543, 8544, 8545, 8546, 8546, 8547, 8548, 8549, 8550, + 8550, 8551, 8552, 8553, 8554, 8555, 8556, 8557, 8558, 8559, 8560, 8561, 8562, + 8563, 8564, 8565, 8566, 8567, 8568, 8569, 8570, 8571, 8572, 4459, 8574, 8575, + 8576, 8576, 8577, 8578, 8579, 8580, 8580, 8581, 8582, 8583, 8584, 8584, 8585, + 8586, 8587, 8588, 8589, 8590, 8591, 8592, 8593, 8594, 8595, 8596, 8597, 8598, + 8599, 8600, 8601, 8602, 8603, 8604, 8605, 8606, 8607, 8573, 8609, 8609, 8608, + 8608, 8610, 8611, 4499, 8613, 8614, 8615, 8615, 8616, 8617, 8618, 8619, 8619, + 8620, 8621, 8622, 8623, 8623, 8624, 8625, 8626, 8627, 8628, 8629, 8630, 8631, + 8632, 8633, 8634, 8635, 8636, 8637, 8638, 8639, 8640, 8641, 8642, 8643, 8644, + 8645, 8646, 8647, 8647, 8648, 8649, 4538, 8651, 8652, 8653, 8653, 8654, 8655, + 8656, 8657, 8657, 8658, 8659, 8660, 8661, 8661, 8662, 8663, 8664, 8665, 8666, + 8667, 8668, 8669, 8670, 8671, 8672, 8673, 8674, 8675, 8676, 8677, 8678, 8679, + 8680, 8681, 8682, 8683, 8684, 8685, 8685, 8686, 8687, 8688, 8689, 8689, 8690, + 8691, 8692, 8693, 8693, 8694, 8695, 8696, 8697, 8697, 8698, 8699, 8700, 8701, + 8701, 8702, 8703, 8704, 8705, 8705, 8706, 8707, 8708, 8709, 8709, 8710, 8711, + 8712, 8713, 8713, 8714, 8715, 8716, 8717, 8717, 8718, 8719, 8720, 8721, 8721, + 8722, 8723, 8724, 8725, 8725, 8726, 8727, 4617, 8729, 8730, 8731, 8731, 8732, + 8733, 8734, 8735, 8735, 8736, 8737, 8738, 8739, 8739, 8740, 8741, 8742, 8743, + 8744, 8745, 8746, 8747, 8748, 8749, 8750, 8751, 8752, 8753, 8754, 8755, 8756, + 8757, 8758, 8759, 8760, 8761, 4652, 8763, 8764, 8765, 8765, 8766, 8767, 8768, + 8769, 8769, 8770, 8771, 8772, 8773, 8773, 8774, 8775, 8776, 8777, 8778, 8779, + 8780, 8781, 8782, 8783, 8784, 8785, 8786, 8787, 8788, 8789, 8790, 8791, 8792, + 8793, 8794, 8795, 8796, 8762, 8728, 8797, 8798, 8799, 8797, 8798, 8799, 8800, + 8801, 4693, 8803, 8804, 8805, 8805, 8806, 8807, 8808, 8809, 8809, 8810, 8811, + 8812, 8813, 8813, 8814, 8815, 8816, 8817, 8818, 8819, 8820, 8821, 8821, 8822, + 8823, 4716, 8825, 8826, 8827, 8827, 8828, 8829, 8830, 8831, 8831, 8832, 8833, + 8834, 8835, 8835, 8836, 8837, 8838, 8839, 8840, 8841, 8842, 8843, 8844, 8845, + 8846, 8847, 8848, 8849, 8850, 8851, 8851, 8852, 8853, 8854, 8855, 8855, 8856, + 8857, 8858, 8859, 8859, 8860, 8861, 8862, 8863, 8863, 8864, 8865, 8497, 8497, + 8867, 8868, 8609, 8609, 8870, 8871, 4765, 8873, 8874, 8875, 8875, 8876, 8877, + 8878, 8879, 8879, 8880, 8881, 8882, 8883, 8883, 8884, 8885, 8886, 8887, 8888, + 8889, 8890, 8891, 8892, 8893, 8894, 8895, 8896, 8897, 8898, 8899, 8900, 8901, + 8902, 8903, 8903, 8904, 8905, 8906, 8872, 8869, 8866, 8824, 8802, 8650, 8612, + 8539, 8501, 8428, 8907, 8908, 8909, 8910, 8911, 8912, 8913, 8914, 8915, 8916, + 8917, 8907, 8908, 8909, 8910, 8911, 8912, 8913, 8914, 8915, 8916, 8917, 8918, + 8919, 8920, 8921, 8922, 8923, 92, 8924, 8925, 8925, 8926, 8927, 8928, 8929, + 8929, 8930, 8931, 8932, 8933, 8933, 8934, 8935, 8936, 8937, 8937, 8938, 8939, + 4834, 8941, 8942, 8943, 8944, 8945, 8946, 8947, 8948, 8949, 8950, 8951, 8952, + 8953, 8954, 8955, 8955, 8956, 8957, 8958, 8959, 8959, 8960, 8961, 4857, 8963, + 8964, 8965, 8966, 8967, 8968, 8969, 8970, 8971, 8972, 8973, 8974, 8975, 8976, + 8977, 8977, 8978, 8979, 8980, 8981, 8981, 8982, 8983, 4880, 8985, 4883, 8987, + 4886, 8989, 8990, 8991, 8991, 8992, 8993, 8994, 8988, 8986, 8995, 7554, 8996, + 8997, 8995, 7554, 8996, 8997, 8998, 8999, 9000, 7552, 7552, 9001, 9002, 9003, + 9004, 9005, 9005, 9006, 9007, 7530, 9009, 9010, 9011, 9012, 9012, 9013, 9014, + 9015, 9016, 9016, 9017, 9018, 9019, 9020, 9020, 9021, 9022, 9023, 9024, 9025, + 9026, 9027, 9028, 9028, 9029, 9030, 9031, 9032, 9032, 9033, 9034, 9035, 9036, + 9036, 9037, 9038, 9039, 9040, 9040, 9041, 9042, 9043, 9044, 9044, 9045, 9046, + 9047, 9048, 9048, 9049, 9050, 9051, 9052, 9053, 9054, 9055, 9056, 9056, 9057, + 9058, 9059, 9060, 9060, 9061, 9062, 9063, 9064, 9064, 9065, 9066, 9067, 9068, + 9068, 9069, 9070, 9071, 9072, 9072, 9073, 9074, 9075, 9076, 9076, 9077, 9078, + 9079, 9080, 9081, 9082, 9083, 9084, 9084, 9085, 9086, 9087, 9088, 9088, 9089, + 9090, 9091, 9092, 9092, 9093, 9094, 9095, 9096, 9096, 9097, 9098, 9099, 9100, + 9101, 9102, 9103, 9104, 9104, 9105, 9106, 9107, 9108, 9108, 9109, 9110, 9111, + 9112, 9112, 9113, 9114, 9115, 9116, 9116, 9117, 9118, 9119, 9120, 9121, 9122, + 9123, 9124, 9124, 9125, 9126, 9127, 9128, 9128, 9129, 9130, 9131, 9132, 9132, + 9133, 9134, 9135, 9136, 9136, 9137, 9138, 9139, 9140, 9140, 9141, 9142, 9143, + 9144, 9144, 9145, 9146, 9147, 9008, 8984, 8962, 8940, 9148, 9149, 9150, 9151, + 9152, 9148, 9149, 9150, 9151, 9152, 9153, 9154, 7741, 9156, 9157, 9158, 9159, + 9160, 9161, 9162, 9163, 9164, 9165, 9166, 9167, 9168, 9169, 9170, 9171, 9172, + 9173, 9174, 543, 543, 9175, 7576, 9176, 9177, 49, 8964, 9179, 9179, 9180, + 9181, 9182, 9183, 9183, 9184, 9185, 9186, 9187, 9187, 9188, 9189, 9190, 9178, + 9191, 9192, 9191, 9192, 9193, 9194, 7664, 9196, 9197, 9198, 9199, 7844, 9199, + 7844, 9200, 9201, 5101, 9203, 5104, 9205, 9206, 9204, 749, 1008, 9207, 9208, + 9209, 9210, 5112, 9212, 48, 9213, 49, 9211, 594, 765, 951, 1564, 9214, 9215, + 9216, 9217, 5120, 9219, 5123, 9221, 5126, 9223, 5129, 9225, 5132, 9227, 5135, + 9229, 5138, 9231, 5141, 9233, 5144, 9235, 9236, 9234, 9232, 9230, 9228, 9226, + 9224, 9222, 9220, 9237, 9238, 9239, 9240, 9241, 9242, 9243, 9244, 9245, 9246, + 9247, 5159, 9249, 9250, 9251, 9252, 9253, 5166, 9255, 9256, 9257, 9258, 9259, + 9260, 9254, 9248, 9261, 9262, 9263, 9264, 9265, 5179, 9267, 5182, 9269, 43, + 9270, 2, 9268, 9266, 9218, 340, 512, 763, 764, 1086, 9271, 9272, 9273, 9274, + 9275, 9276, 9277, 9278, 9279, 9280, 9281, 9282, 9282, 9283, 9284, 9285, 9286, + 9286, 9287, 9288, 5204, 9290, 5207, 9292, 5210, 9294, 5213, 9296, 5216, 9298, + 5219, 9300, 5222, 9302, 9303, 9301, 9299, 9297, 9295, 9293, 9291, 9304, 9305, + 9306, 9307, 9308, 9309, 9310, 9311, 9312, 5235, 9314, 5238, 9316, 5241, 9318, + 5244, 9320, 5247, 9322, 9323, 9321, 9319, 9317, 9315, 7282, 9324, 9325, 9326, + 9327, 9328, 9329, 9330, 5258, 9332, 5261, 9334, 5264, 9336, 5267, 9338, 9339, + 268, 1738, 9340, 9341, 9342, 5274, 9344, 9345, 9343, 9337, 9335, 9333, 9346, + 9347, 9348, 9349, 9350, 9351, 9352, 5285, 9354, 9355, 9356, 9357, 9358, 5292, + 9360, 9361, 9362, 9363, 9364, 5299, 9366, 5302, 9368, 5305, 9370, 5308, 9372, + 9373, 9371, 9369, 9367, 9365, 9359, 9374, 9375, 9376, 9377, 9378, 9379, 9380, + 9381, 5320, 9383, 9384, 9385, 9386, 9387, 9388, 9389, 9390, 9391, 9392, 9382, + 9353, 9331, 9313, 9393, 9394, 9395, 9396, 9397, 9398, 9399, 5339, 9401, 9402, + 9403, 9404, 9405, 9406, 1810, 9407, 9408, 9409, 5350, 9411, 9412, 9413, 9414, + 9415, 9416, 474, 475, 476, 9417, 9418, 9419, 9420, 9410, 7363, 7689, 9421, + 9422, 9423, 9424, 5366, 9426, 5369, 9428, 9429, 9430, 9431, 9432, 9433, 9434, + 9435, 9436, 9437, 9427, 457, 7371, 9438, 9439, 9440, 9441, 5385, 9443, 9444, + 229, 9445, 9446, 9447, 5392, 9449, 5395, 9451, 5398, 9453, 5401, 9455, 9456, + 9454, 9452, 9450, 9457, 9458, 9459, 9460, 9461, 9462, 9463, 9448, 7377, 9464, + 9465, 9466, 9467, 5416, 9469, 5419, 9471, 5422, 9473, 9474, 9472, 9470, 502, + 9475, 9476, 9477, 9478, 9479, 5431, 9481, 9482, 9483, 9484, 9485, 5438, 9487, + 5441, 9489, 9490, 9488, 9491, 9492, 9493, 9494, 5449, 9496, 9497, 9498, 9499, + 9500, 5456, 9502, 9503, 9504, 9505, 9506, 9507, 9508, 9509, 9510, 9511, 9501, + 9495, 9486, 9480, 9512, 9513, 9514, 9515, 9516, 9517, 9518, 5475, 9520, 9521, + 9522, 9523, 9524, 9525, 9526, 9527, 9528, 5486, 9530, 5489, 9532, 5492, 9534, + 5495, 9536, 9537, 9535, 9533, 9531, 9538, 9539, 9540, 9541, 9542, 9543, 9544, + 9545, 9546, 9547, 9548, 9529, 9549, 9550, 9551, 9552, 5514, 9554, 5517, 9556, + 9557, 9555, 7389, 9558, 9559, 9560, 9561, 5525, 9563, 5528, 9565, 5531, 9567, + 5534, 9569, 12, 9570, 245, 247, 248, 249, 250, 251, 448, 515, 9571, 9572, + 9573, 5541, 9575, 5544, 9577, 9578, 9576, 9574, 9568, 9566, 9564, 7404, 9579, + 9580, 9581, 9582, 9583, 9584, 9585, 9586, 5556, 9588, 5559, 9590, 5562, 9592, + 9593, 72, 9591, 73, 9589, 263, 9594, 9595, 9596, 9597, 9598, 5571, 9600, + 5574, 9602, 5577, 9604, 5580, 9606, 9607, 195, 951, 2024, 2026, 2027, 2028, + 9608, 9609, 9610, 5587, 9612, 5590, 9614, 5593, 9616, 9617, 9615, 9613, 9611, + 9605, 9603, 9601, 9599, 9618, 9619, 9620, 9621, 9622, 9623, 9624, 9625, 9626, + 9627, 9628, 9587, 9562, 9553, 9519, 9468, 9442, 9425, 9400, 1611, 7721, 7721, + 9629, 9630, 9631, 9632, 9633, 9634, 9635, 9636, 9637, 9638, 9639, 7418, 7419, + 9641, 9642, 2075, 9644, 2076, 9646, 9647, 9645, 9648, 9649, 9650, 9651, 2080, + 9653, 2081, 9655, 2082, 9657, 2083, 9659, 9660, 9658, 9656, 9654, 9661, 9662, + 9663, 9664, 9665, 9666, 2089, 9668, 2090, 9670, 9671, 9669, 9672, 9673, 9674, + 9675, 2094, 9677, 2095, 9679, 9680, 9678, 9681, 9682, 9683, 9684, 2099, 9686, + 9687, 9688, 9689, 9690, 2102, 9692, 2103, 9694, 2104, 9696, 9697, 9695, 9693, + 9698, 9699, 9700, 9701, 9702, 2109, 9704, 2110, 9706, 2111, 9708, 2112, 9710, + 2113, 9712, 2114, 9714, 2115, 9716, 9717, 9715, 9713, 9711, 9709, 9707, 9705, + 9718, 9719, 9720, 9721, 9722, 9723, 9724, 9725, 9726, 2124, 9728, 2125, 9730, + 2126, 9732, 2127, 9734, 2128, 9736, 2129, 9738, 2130, 9740, 2131, 9742, 9743, + 9741, 9739, 9737, 9735, 9733, 9731, 9729, 9744, 9745, 9746, 9747, 9748, 9749, + 9750, 9751, 9752, 9753, 9754, 9727, 9703, 9691, 9685, 9676, 9667, 9652, 9755, + 9756, 9757, 9758, 9759, 9760, 9761, 9762, 9763, 9764, 2150, 9766, 2151, 9768, + 2152, 9770, 2153, 9772, 2154, 9774, 2155, 9776, 2156, 9778, 9779, 9777, 9775, + 9773, 9771, 9769, 9767, 9780, 9781, 9782, 9783, 9784, 9785, 9786, 9787, 9788, + 2165, 9790, 2166, 9792, 2167, 9794, 2168, 9796, 2169, 9798, 2170, 9800, 9801, + 9799, 9797, 9795, 9793, 9791, 9802, 9803, 9804, 9805, 9806, 9807, 9808, 9809, + 2178, 9811, 2179, 9813, 2180, 9815, 2181, 9817, 2182, 9819, 9820, 9818, 9816, + 9814, 9812, 9821, 9822, 9823, 9824, 9825, 9826, 9827, 2189, 9829, 2190, 9831, + 2191, 9833, 2192, 9835, 9836, 9834, 9832, 9830, 9837, 9838, 9839, 9840, 9841, + 9842, 9843, 9828, 9810, 9789, 9844, 9845, 9846, 9847, 9848, 9849, 2203, 9851, + 9852, 9853, 9854, 9855, 2206, 9857, 2207, 9859, 2208, 9861, 2209, 9863, 9864, + 9862, 9860, 9858, 9865, 9866, 9867, 9868, 9869, 9870, 9871, 9856, 9872, 9873, + 9874, 9875, 2218, 9877, 2219, 9879, 2220, 9881, 9882, 9880, 9878, 9883, 9884, + 9885, 9886, 9887, 2225, 9889, 9890, 9891, 9892, 9893, 2228, 9895, 2229, 9897, + 9898, 9896, 9899, 9900, 9901, 9902, 2233, 9904, 9905, 9906, 9907, 9908, 9909, + 9903, 9894, 9888, 9910, 9911, 9912, 9913, 9914, 9915, 2241, 9917, 9918, 9919, + 9920, 9921, 9922, 9923, 9924, 9925, 2246, 9927, 2247, 9929, 2248, 9931, 9932, + 9930, 9928, 9933, 9934, 9935, 9936, 9937, 2253, 9939, 9940, 9941, 9942, 9943, + 9944, 9938, 9945, 9946, 9947, 9948, 9949, 9926, 9916, 9876, 9850, 9765, 9950, + 9951, 9952, 9953, 9954, 9955, 9956, 9957, 2266, 9959, 9960, 9961, 9962, 9963, + 9964, 9965, 9966, 9967, 2271, 9969, 9970, 9971, 9972, 9973, 2274, 9975, 9976, + 9977, 9978, 9979, 9980, 9974, 9981, 9982, 9983, 9984, 2280, 9986, 9987, 9988, + 9989, 9990, 9991, 9992, 9993, 9994, 9995, 9985, 9968, 9996, 9997, 9998, 9999, + 10000, 2289, 10002, 10003, 10004, 10005, 10006, 10007, 10008, 10009, 10010, + 2294, 10012, 10013, 10014, 10015, 10016, 10017, 10018, 10019, 10020, 10021, + 10011, 10022, 10023, 10024, 10025, 2302, 10027, 10028, 10029, 10030, 10031, + 10032, 10033, 10034, 10035, 10036, 10037, 10038, 10039, 2309, 10041, 10042, + 10043, 10044, 10045, 10046, 10047, 10048, 10049, 10050, 10051, 10052, 10053, + 2316, 10055, 10056, 10057, 10058, 10059, 10060, 10061, 10062, 10063, 2321, + 10065, 2322, 10067, 2323, 10069, 2324, 10071, 10072, 10070, 10068, 10066, + 10073, 10074, 10075, 10076, 10077, 10078, 10079, 10080, 10081, 10082, 10083, + 10064, 10084, 10085, 10086, 10087, 10088, 10054, 10040, 10026, 10001, 9958, + 10089, 10090, 10091, 10092, 10093, 10094, 10095, 10096, 10097, 10098, 10098, + 10099, 10100, 10101, 10102, 10102, 10103, 10104, 10105, 10106, 10106, 10107, + 10108, 10109, 10110, 10110, 10111, 10112, 10113, 9643, 9640, 10114, 10114, + 10115, 7424, 7425, 7426, 7427, 7428, 7725, 7726, 7431, 10116, 10117, 10118, + 10119, 10120, 10120, 10121, 10122, 6102, 10124, 10125, 10126, 10127, 10128, + 10129, 10130, 10130, 10131, 10132, 10133, 10134, 10134, 10135, 10136, 10137, + 10138, 10138, 10139, 10140, 10141, 10142, 10143, 10144, 10145, 10146, 10147, + 10148, 10149, 10150, 10151, 10152, 10153, 10154, 10155, 10156, 10157, 10158, + 10159, 10160, 6141, 10162, 10163, 10164, 10165, 10166, 10167, 10168, 10168, + 10169, 10170, 10171, 10172, 10172, 10173, 10174, 10175, 10176, 10176, 10177, + 10178, 10179, 10180, 10180, 10181, 10182, 10183, 10184, 10184, 10185, 10186, + 10187, 10188, 10189, 10190, 10191, 10192, 10193, 10194, 10195, 10196, 10197, + 10198, 10199, 10200, 10201, 10202, 10203, 10204, 10205, 10206, 10207, 10208, + 10208, 10209, 10210, 10211, 10212, 10212, 10213, 10214, 10215, 10216, 10216, + 10217, 10218, 10219, 10220, 10220, 10221, 10222, 10223, 10224, 10224, 10225, + 10226, 10227, 10228, 10228, 10229, 10230, 10231, 10232, 10232, 10233, 10234, + 10235, 749, 750, 10236, 10237, 10238, 6220, 10240, 10241, 10242, 10243, 10244, + 10245, 10246, 10246, 10247, 10248, 10249, 10250, 10250, 10251, 10252, 10253, + 10254, 10254, 10255, 10256, 10257, 10258, 10258, 10259, 10260, 10261, 10262, + 10262, 10263, 10264, 10265, 10266, 10267, 10268, 10269, 10270, 10270, 10271, + 10272, 10273, 10274, 10274, 10275, 10276, 10277, 10278, 10278, 10279, 10280, + 10281, 10282, 10282, 10283, 10284, 10285, 10286, 10286, 10287, 10288, 10289, + 10290, 10290, 10291, 10292, 10293, 10294, 10294, 10295, 10296, 10297, 10298, + 10299, 10300, 43, 10301, 44, 10239, 340, 763, 764, 765, 782, 791, 1086, 10302, + 10303, 10304, 10305, 10306, 10307, 10308, 10309, 10310, 10311, 10312, 10313, + 10314, 10315, 10316, 10317, 10318, 10319, 10320, 10321, 6304, 10323, 6307, + 10325, 6310, 10327, 6313, 10329, 6316, 10331, 10332, 10330, 10328, 10326, + 10324, 10334, 10333, 10335, 10336, 10337, 10338, 10339, 10340, 314, 9498, + 10341, 10342, 10343, 10344, 10345, 10346, 10347, 10348, 10349, 10349, 10350, + 10351, 10352, 10322, 10161, 10353, 10353, 10354, 10355, 10356, 10357, 6345, + 10359, 10360, 10361, 10361, 10362, 10363, 10364, 10365, 10366, 10367, 10368, + 10369, 10370, 10371, 10372, 10373, 10374, 10375, 6364, 10377, 10378, 10379, + 10380, 10381, 10382, 10383, 10384, 10385, 10386, 10387, 10388, 10389, 10390, + 10391, 10392, 10393, 10394, 10395, 10395, 10396, 10397, 10398, 10399, 10399, + 10400, 10401, 10402, 10403, 10403, 10404, 10405, 10406, 10407, 10408, 10409, + 10410, 10411, 10412, 10413, 10414, 10415, 10416, 10417, 6407, 10419, 10420, + 10421, 10422, 10423, 10424, 10425, 10426, 10427, 10428, 10429, 10430, 10431, + 10432, 750, 10433, 10434, 10435, 6426, 10437, 10438, 10439, 10440, 10441, + 10442, 10443, 10444, 10445, 10446, 10447, 10448, 10449, 10450, 10451, 10452, + 10453, 6445, 10455, 10456, 10457, 10458, 10459, 10460, 10461, 10462, 10463, + 10464, 10465, 10466, 10467, 10468, 10469, 10470, 10471, 6464, 10473, 10474, + 10475, 10476, 10477, 10478, 10479, 10480, 10481, 10482, 10483, 10484, 10485, + 10486, 10487, 10488, 10489, 6483, 10491, 10492, 10493, 10494, 10495, 10496, + 10497, 10498, 10499, 10500, 10501, 10502, 10503, 10504, 10505, 10506, 10507, + 6502, 10509, 10510, 10511, 10512, 10513, 10514, 10515, 10516, 10517, 10518, + 10519, 10520, 10521, 10522, 10523, 10524, 10525, 6521, 10527, 10528, 10529, + 10530, 10531, 10532, 10533, 10534, 10535, 10536, 10537, 10538, 10539, 10540, + 10541, 10542, 10543, 10334, 10545, 10546, 10547, 10548, 10549, 10550, 10551, + 10552, 10553, 10554, 10555, 10556, 10557, 10558, 6555, 10560, 10561, 10562, + 10563, 10564, 10565, 10566, 10567, 10568, 10569, 10570, 10571, 10572, 10573, + 10574, 10575, 10576, 40, 10577, 48, 10559, 49, 10544, 50, 10526, 3, 10508, + 41, 10490, 42, 10472, 43, 10454, 44, 10436, 10578, 10579, 10580, 10581, 10582, + 10583, 10584, 10585, 10586, 10587, 10588, 10589, 10590, 10591, 10592, 10593, + 10594, 10595, 10596, 10597, 10598, 10599, 10600, 10601, 10602, 10603, 10604, + 10605, 10418, 10606, 10607, 10608, 10609, 10610, 10376, 10358, 10611, 10612, + 10613, 10614, 10615, 10616, 10617, 10617, 10618, 10619, 10620, 10123, 9289, + 10621, 10622, 10623, 10621, 10622, 10623, 10624, 10625, 6623, 10627, 10628, + 10629, 10630, 10631, 10632, 10633, 10634, 10635, 10636, 10637, 10638, 10639, + 10640, 10641, 10641, 10642, 10643, 10644, 10645, 10646, 10647, 10648, 10649, + 10649, 10650, 10651, 10652, 10653, 10653, 10654, 10655, 7888, 10657, 10658, + 10659, 10660, 10661, 10662, 6661, 10664, 10665, 10666, 10666, 10667, 10668, + 10669, 10670, 10670, 10671, 10672, 10673, 10663, 10674, 10675, 10674, 10675, + 10676, 10677, 6677, 10679, 10680, 10681, 10682, 10683, 10684, 10685, 10686, + 10687, 10688, 10689, 10690, 10691, 10692, 10693, 10694, 10695, 6696, 10697, + 10698, 10699, 10700, 10701, 10702, 10703, 10704, 10705, 10706, 10707, 10708, + 10709, 10710, 10711, 10712, 10713, 10714, 10715, 10716, 10717, 10718, 10719, + 10720, 10721, 10722, 10723, 10724, 10725, 10726, 10727, 10728, 10729, 10730, + 10731, 10732, 10733, 10734, 10735, 10735, 10736, 10737, 10738, 10696, 10740, + 10739, 10740, 10741, 10742, 10743, 10678, 10744, 10745, 10744, 10745, 10746, + 10747, 6749, 10749, 10750, 512, 762, 763, 764, 765, 10751, 10752, 10753, + 10754, 10755, 10755, 10756, 10757, 10758, 10759, 10759, 10760, 10761, 10762, + 10763, 10763, 10764, 10765, 10766, 512, 762, 763, 764, 765, 10767, 10767, + 10768, 10769, 7417, 10771, 10772, 6775, 10774, 10775, 10776, 10776, 10777, + 10778, 10779, 10780, 10780, 10781, 10782, 10783, 10784, 10784, 10785, 10786, + 10787, 10788, 10788, 10789, 10790, 10791, 10773, 10793, 10792, 10794, 10795, + 10796, 10797, 10797, 10798, 10799, 6803, 10801, 10802, 10803, 10803, 10804, + 10805, 10806, 10807, 10807, 10808, 10809, 10810, 10811, 10811, 10812, 10813, + 10814, 10815, 10816, 10817, 10818, 10819, 10820, 10821, 10822, 10823, 10824, + 10825, 10826, 10827, 10828, 10829, 10830, 10831, 10832, 10833, 10834, 10835, + 10835, 10836, 10837, 10838, 10839, 10839, 10840, 10841, 10842, 10843, 10843, + 10844, 10845, 10846, 10847, 10847, 10848, 10849, 10850, 10851, 10851, 10852, + 10853, 10854, 10855, 10855, 10856, 10857, 10858, 10859, 10859, 10860, 10861, + 10862, 10863, 10863, 10864, 10865, 10866, 10867, 10867, 10868, 10869, 10870, + 10871, 10871, 10872, 10873, 10874, 10875, 10875, 10876, 10877, 10878, 10879, + 10879, 10880, 10881, 10882, 10883, 10884, 10885, 10886, 10887, 10887, 10888, + 10889, 674, 7656, 7656, 10891, 10892, 8129, 10894, 10895, 10896, 10897, 10897, + 10898, 10899, 10900, 10901, 10901, 10902, 10903, 10904, 10905, 10905, 10906, + 10907, 10908, 10909, 10909, 10910, 10911, 8155, 10913, 10914, 10915, 10916, + 10916, 10917, 10918, 10919, 10920, 10920, 10921, 10922, 975, 10126, 10924, + 10925, 10926, 10927, 10927, 10928, 10929, 7482, 7482, 10931, 10932, 10933, + 10934, 10934, 10935, 10936, 10937, 10938, 10939, 10940, 8185, 8186, 8185, + 8186, 8190, 10942, 10943, 10944, 10945, 10946, 10947, 8198, 8199, 8198, 8199, + 8203, 10949, 10950, 10951, 10952, 10953, 10954, 10955, 10948, 1008, 10956, + 10957, 10958, 10959, 10960, 1008, 10956, 10957, 10961, 10962, 10963, 10964, + 10965, 10965, 10966, 10967, 10968, 2, 10941, 10930, 10969, 10970, 10971, + 10969, 10970, 10971, 10972, 10973, 10793, 8258, 10975, 10976, 10977, 10978, + 10979, 10980, 10981, 10982, 10982, 10983, 10984, 10985, 10986, 10986, 10987, + 10988, 10989, 10990, 10990, 10991, 10992, 10993, 10994, 10994, 10995, 10996, + 10997, 10998, 10998, 10999, 11000, 11001, 11002, 11002, 11003, 11004, 11005, + 10974, 10923, 10912, 10893, 10890, 10800, 10770, 10748, 10656, 10626, 9202, + 9195, 9155, 8330, 7262, 7228, 7041, 10641, 11006, 11007, 11008, 11009, 11010, + 11011, 11012, 11013, 11014, 11015, 11016, 11017, 11018, 11019, 11020, 11021, + 11022, 10641, 11006, 11007, 11008, 11009, 11010, 11011, 11012, 11013, 11014, + 11015, 11016, 11017, 11018, 11019, 11020, 11021, 11022, 7669, 11023, 8061, + 6638, 7009, 7010, 7011, 7012, 7013, 7014, 7015, 7016, 7017, 7018, 7019, 7020, + 7021, 7022, 7023, 7024, 7025, 6638, 7009, 7010, 7011, 7012, 7013, 7014, 7015, + 7016, 7017, 7018, 7019, 7020, 7021, 7022, 7023, 7024, 7025, 3506, 7026, 3914, + 11024, 11025, 2848, 2848, 11027, 11027, 11028, 11028, 11029, 11029, 11030, + 11030, 11031, 11031, 11032, 11032, 11033, 11034, 11034, 11035, 11035, 11036, + 11036, 11037, 11037, 11038, 11038, 11039, 11039, 11040, 11040, 11041, 11041, + 11042, 11043, 11043, 11044, 11044, 2934, 2931, 11046, 11047, 11048, 11049, + 11050, 11051, 11052, 11052, 11053, 11054, 11054, 2982, 2982, 11056, 11056, + 3004, 11058, 11059, 11060, 11060, 2997, 2997, 11062, 11062, 11061, 11061, + 11057, 11057, 11055, 11055, 11045, 11045, 3035, 3035, 11067, 11067, 11068, + 11068, 11069, 11069, 11070, 11071, 11072, 11072, 3077, 3070, 3089, 11076, + 11074, 11075, 11077, 11078, 11079, 11080, 11080, 11081, 11081, 3121, 3121, + 11083, 11083, 11084, 11084, 3162, 3239, 3242, 3245, 3228, 3225, 3222, 3219, + 2830, 3216, 3209, 3202, 2823, 3195, 3188, 3176, 3179, 3173, 11086, 3155, + 11077, 11078, 3146, 3143, 3140, 3146, 3143, 3140, 11033, 11033, 11097, 11097, + 11098, 11098, 11099, 11099, 11100, 11100, 11101, 11101, 11102, 11102, 11103, + 11103, 11104, 11104, 11105, 11105, 11062, 11062, 11106, 11106, 11070, 11109, + 11109, 3332, 3332, 11111, 11111, 11112, 11112, 11113, 11113, 11114, 11114, + 11115, 11115, 11116, 11116, 11117, 11117, 11118, 11118, 11119, 11119, 11120, + 11120, 11121, 11121, 3329, 3329, 3383, 3383, 11122, 11122, 11123, 11123, + 3400, 11125, 543, 543, 11126, 3419, 3419, 11128, 11128, 11129, 11129, 11130, + 11130, 11131, 11131, 11132, 11132, 11133, 11133, 11134, 11134, 11135, 11135, + 11136, 11136, 11137, 11137, 11138, 11138, 11139, 11139, 3478, 3478, 11141, + 11141, 11142, 11142, 11143, 11143, 11144, 11144, 11140, 11140, 2841, 11147, + 3514, 3162, 3553, 3553, 11150, 11150, 3242, 3546, 3222, 3225, 3228, 3538, + 3535, 3195, 3179, 3176, 3525, 11149, 11090, 11095, 11151, 11151, 11155, 11156, + 11152, 11153, 11154, 11148, 11148, 3578, 11159, 11160, 11161, 11162, 11163, + 11163, 11164, 11164, 3613, 11166, 11167, 3635, 3635, 11169, 11169, 11170, + 11170, 11171, 11171, 11172, 11172, 3662, 3662, 11174, 11174, 3677, 3677, + 11176, 11176, 11177, 11177, 11178, 11178, 11175, 11175, 11173, 11173, 11064, + 11064, 512, 762, 763, 764, 765, 11179, 11180, 11181, 11182, 11179, 11180, + 11181, 11182, 11183, 11183, 11184, 11184, 11185, 11185, 11186, 11186, 11168, + 11165, 11187, 11187, 11188, 11189, 11190, 11190, 11157, 11158, 11157, 11158, + 3734, 3745, 11194, 11195, 11196, 11197, 11198, 11199, 11200, 11200, 11193, + 11193, 3785, 3785, 11203, 11203, 11204, 11204, 11205, 11205, 11206, 11206, + 11207, 3816, 3816, 11209, 11209, 11210, 11210, 11211, 11211, 11212, 11212, + 11213, 11213, 11214, 11214, 11215, 11215, 11216, 11216, 11217, 11217, 11218, + 11218, 3867, 3867, 11220, 11220, 11221, 11221, 11222, 11222, 11223, 11223, + 11224, 11224, 11225, 11225, 11226, 11226, 11227, 11227, 11228, 11228, 2823, + 11230, 11231, 11231, 11232, 11232, 11233, 11233, 11234, 11234, 11235, 11235, + 11236, 11236, 11237, 11237, 11229, 11219, 3952, 11241, 11238, 11238, 11239, + 11240, 11208, 11242, 11242, 11243, 11244, 3973, 3973, 11246, 11246, 11247, + 11247, 11248, 11248, 11249, 11249, 4000, 11251, 11252, 11252, 4019, 4019, + 11254, 11254, 11255, 11255, 4038, 4038, 4041, 4041, 4053, 4053, 4056, 4056, + 11258, 11257, 1008, 11259, 11260, 11261, 11261, 11256, 11256, 4082, 4093, + 4093, 11265, 11265, 11266, 11266, 11267, 11267, 11268, 11268, 11269, 11264, + 11271, 11270, 11272, 11272, 11273, 11273, 11274, 11274, 11275, 11275, 11276, + 11276, 11277, 11277, 11262, 11263, 11262, 11263, 11253, 11253, 11250, 11250, + 11245, 11245, 11201, 11202, 11201, 11202, 11191, 11192, 11191, 11192, 11145, + 11145, 11146, 11146, 11127, 11127, 11124, 11124, 11110, 11110, 11107, 11107, + 11108, 11108, 4164, 4164, 11290, 11290, 11291, 11291, 11292, 11292, 11293, + 11293, 11278, 11279, 11280, 11281, 11282, 11283, 11284, 11285, 11286, 11287, + 11288, 11289, 11278, 11279, 11280, 11281, 11282, 11283, 11284, 11285, 11286, + 11287, 11288, 11289, 11088, 11089, 11090, 11091, 11092, 11095, 11087, 11093, + 11094, 11096, 11085, 11085, 11082, 11082, 4229, 4229, 11299, 11299, 11300, + 11300, 4195, 4195, 4256, 4253, 4250, 4247, 4244, 11301, 4226, 4223, 4220, + 4217, 4214, 4211, 4208, 4205, 4202, 11302, 4256, 4253, 4250, 4247, 4244, + 11301, 4226, 4223, 4220, 4217, 4214, 4211, 4208, 4205, 4202, 11302, 4282, + 4282, 11304, 11304, 11305, 11305, 11306, 11306, 11307, 11307, 11303, 4310, + 4310, 11310, 11310, 11311, 11311, 11312, 11313, 11314, 11315, 4345, 4345, + 11317, 11317, 11318, 11318, 11319, 11320, 11321, 11322, 11323, 11316, 4385, + 4385, 11326, 11326, 11327, 11327, 11328, 11329, 11330, 11331, 11332, 4424, + 4424, 11334, 11334, 11335, 11335, 11336, 11337, 11338, 11339, 4459, 4459, + 11341, 11341, 11342, 11342, 11343, 11344, 11345, 11346, 11347, 11340, 4499, + 4499, 11350, 11350, 11351, 11351, 11352, 11353, 11354, 11355, 11356, 4538, + 4538, 11358, 11358, 11359, 11359, 11360, 11361, 11362, 11363, 11364, 11365, + 11365, 11366, 11366, 11367, 11367, 11368, 11368, 11369, 11369, 11370, 11370, + 11371, 11371, 11372, 11372, 11373, 11373, 11374, 11374, 4617, 4617, 11376, + 11376, 11377, 11377, 11378, 11379, 11380, 11381, 4652, 4652, 11383, 11383, + 11384, 11384, 11385, 11386, 11387, 11388, 11389, 11382, 11375, 11375, 4693, + 4693, 11393, 11393, 11394, 11394, 11395, 4716, 4716, 11397, 11397, 11398, + 11398, 11399, 11400, 11401, 11402, 11402, 11403, 11403, 11404, 11404, 4765, + 4765, 11406, 11406, 11407, 11407, 11408, 11409, 11410, 11411, 11412, 11412, + 11349, 11349, 11324, 11324, 11405, 11405, 11396, 11396, 11390, 11391, 11392, + 11390, 11391, 11392, 11357, 11357, 11349, 11349, 11348, 11348, 11333, 11333, + 11324, 11324, 11325, 11325, 11308, 11309, 11308, 11309, 11413, 11414, 11415, + 11416, 11417, 11418, 11419, 11420, 11421, 11422, 11423, 11413, 11414, 11415, + 11416, 11417, 11418, 11419, 11420, 11421, 11422, 11423, 92, 11424, 11425, + 11425, 11426, 11426, 11427, 11427, 4834, 11429, 11430, 11431, 11431, 4857, + 11433, 11434, 11435, 11435, 4886, 4886, 11437, 3329, 4883, 4880, 11437, 3329, + 4883, 4880, 3383, 3383, 11438, 11117, 11440, 11440, 11441, 11441, 11442, + 11442, 11443, 11444, 11444, 11445, 11445, 11446, 11446, 11447, 11447, 11448, + 11448, 11449, 11449, 11450, 11451, 11451, 11452, 11452, 11453, 11453, 11454, + 11454, 11455, 11455, 11456, 11456, 11457, 11458, 11458, 11459, 11459, 11460, + 11460, 11461, 11461, 11462, 11463, 11463, 11464, 11464, 11465, 11465, 11466, + 11466, 11467, 11468, 11468, 11469, 11469, 11470, 11470, 11471, 11471, 11472, + 11472, 11473, 11473, 11439, 11439, 11436, 11436, 11432, 11432, 11428, 11428, + 11159, 11479, 11480, 11481, 11482, 49, 782, 11484, 11484, 11485, 11485, 11486, + 11486, 543, 543, 11483, 11126, 49, 782, 11489, 11489, 11490, 11490, 11491, + 11491, 11145, 48, 543, 750, 49, 749, 1008, 5104, 5101, 5166, 5159, 5144, + 5141, 5138, 5135, 5132, 5129, 5126, 5123, 5120, 43, 437, 2, 591, 835, 11496, + 11497, 11498, 594, 765, 951, 1564, 11494, 11495, 340, 512, 763, 764, 1086, + 11499, 11500, 11501, 11502, 11503, 11504, 11504, 268, 1738, 5267, 5292, 5285, + 5320, 11509, 5308, 5305, 5302, 5299, 11507, 11508, 5274, 11506, 5264, 5261, + 5258, 3089, 5247, 5244, 5241, 5238, 5235, 5222, 5219, 5216, 5213, 5210, 5207, + 5204, 5339, 5350, 474, 475, 476, 11516, 1810, 11515, 5369, 11519, 5401, 5398, + 5395, 5392, 229, 5385, 5456, 11523, 5449, 5441, 5438, 5431, 502, 5422, 5419, + 5416, 5475, 5495, 5492, 5489, 5486, 11530, 11529, 12, 1964, 245, 247, 248, + 249, 250, 251, 448, 515, 11533, 72, 1985, 73, 1982, 1023, 1024, 1025, 195, + 951, 2024, 2026, 2027, 2028, 11537, 263, 5562, 11535, 11536, 5593, 5590, + 5587, 11538, 5577, 5574, 5571, 11539, 3225, 5544, 5541, 11534, 5531, 5528, + 5525, 3209, 5517, 5514, 11531, 11532, 11524, 11525, 11526, 11527, 11528, + 3195, 11521, 11522, 457, 3188, 11520, 5366, 3179, 3525, 11517, 11518, 11510, + 11511, 11512, 11513, 11514, 2131, 2130, 2129, 2128, 2127, 2126, 2125, 2124, + 2115, 2114, 2113, 2112, 2111, 2110, 2109, 2104, 2103, 2102, 2099, 2095, 2094, + 2090, 2089, 2083, 2082, 2081, 2080, 2076, 2075, 2192, 2191, 2190, 2189, 2182, + 2181, 2180, 2179, 2178, 2170, 2169, 2168, 2167, 2166, 2165, 2156, 2155, 2154, + 2153, 2152, 2151, 2150, 2209, 2208, 2207, 2206, 2203, 2233, 2229, 2228, 2225, + 2220, 2219, 2218, 2241, 2253, 2248, 2247, 2246, 11568, 11569, 11567, 11563, + 11564, 11565, 11566, 11561, 11562, 11557, 11558, 11559, 11560, 11549, 11550, + 11551, 11552, 11553, 11554, 11555, 11556, 2266, 2274, 2271, 2280, 11579, + 11577, 11578, 11576, 2289, 2294, 11584, 11583, 2302, 11587, 2309, 11589, + 2316, 2324, 2323, 2322, 2321, 11592, 11591, 11593, 11594, 11590, 11588, 11585, + 11586, 11580, 11581, 11582, 11570, 11571, 11572, 11573, 11574, 11575, 11595, + 11596, 11597, 11598, 11599, 11600, 11601, 11601, 11602, 11602, 11603, 11603, + 11604, 11604, 3242, 3239, 1611, 11151, 11151, 11540, 11541, 11542, 11543, + 11544, 11545, 11546, 11547, 11548, 11605, 11605, 11606, 11088, 11089, 11090, + 11091, 11092, 11155, 11156, 11095, 11607, 6102, 11609, 11609, 11610, 11610, + 11611, 11611, 11612, 11613, 11614, 11615, 6141, 11617, 11617, 11618, 11618, + 11619, 11619, 11620, 11620, 11621, 11621, 11622, 11623, 11624, 11625, 11626, + 11627, 11627, 11628, 11628, 11629, 11629, 11630, 11630, 11631, 11631, 11632, + 11632, 11633, 11633, 6220, 11635, 11635, 11636, 11636, 11637, 11637, 11638, + 11638, 11639, 11639, 11640, 11641, 11641, 11642, 11642, 11643, 11643, 11644, + 11644, 11645, 11645, 11646, 11646, 11647, 11647, 43, 11648, 44, 749, 750, + 11634, 340, 763, 764, 765, 782, 791, 1086, 11649, 11650, 11651, 11652, 11653, + 6313, 6316, 6310, 6307, 6304, 314, 5449, 11655, 11656, 11657, 11657, 11654, + 11616, 6345, 6345, 11661, 11662, 6364, 11664, 11665, 11666, 11667, 11667, + 11668, 11668, 11669, 11669, 11670, 11671, 6407, 11673, 11674, 6426, 11676, + 11677, 6445, 11679, 11680, 6464, 11682, 11683, 6483, 11685, 11686, 6502, + 11688, 11689, 6521, 11691, 11692, 6313, 11694, 11695, 6555, 11697, 11698, + 40, 11699, 48, 11696, 49, 11693, 50, 11690, 3, 11687, 41, 11684, 42, 11681, + 43, 11678, 44, 750, 11675, 11700, 11701, 11702, 11703, 11704, 11705, 11706, + 11707, 11708, 11709, 11710, 11711, 11712, 11672, 11713, 11714, 11663, 11658, + 11658, 11659, 11660, 11715, 11716, 11717, 791, 791, 11719, 11719, 11720, + 11720, 674, 11722, 11722, 11723, 11723, 11724, 11724, 11725, 11725, 11726, + 11726, 11727, 11721, 11721, 11718, 11718, 11608, 11608, 11505, 11505, 6623, + 11733, 11734, 11735, 11735, 11736, 11737, 11737, 3734, 6661, 6661, 11740, + 11740, 11739, 6677, 11743, 11744, 6696, 11746, 11747, 11748, 11749, 11750, + 11751, 11752, 11753, 11754, 11754, 11745, 11756, 11755, 11756, 11741, 11742, + 11741, 11742, 512, 762, 763, 764, 765, 6749, 11759, 11759, 11760, 11760, + 11761, 11761, 6775, 6775, 11763, 11763, 11764, 11764, 11765, 11765, 3245, + 11767, 11766, 6803, 6803, 11769, 11769, 11770, 11770, 11771, 11772, 11773, + 11774, 11775, 11776, 11776, 11777, 11777, 11778, 11778, 11779, 11779, 11780, + 11780, 11781, 11781, 11782, 11782, 11783, 11783, 11784, 11784, 11785, 11785, + 11786, 11786, 11787, 11787, 11788, 1564, 11790, 11791, 11792, 11793, 11793, + 11793, 11794, 11795, 11795, 11795, 11247, 11797, 11797, 11798, 11798, 11799, + 11799, 11252, 11801, 11801, 975, 6102, 11107, 11107, 11804, 11804, 4041, + 4038, 4041, 4038, 11257, 4056, 4053, 4056, 4053, 11258, 11807, 11806, 1008, + 11808, 11809, 1008, 11808, 11809, 11810, 11811, 11811, 2, 11805, 11803, 11803, + 11767, 11271, 11815, 11816, 11816, 11817, 11817, 11818, 11818, 11819, 11819, + 11820, 11820, 268, 268, 11822, 11822, 11823, 11823, 11824, 11824, 11825, + 11825, 11826, 11826, 11827, 11827, 11828, 11828, 11829, 11830, 11830, 11831, + 11831, 11832, 11832, 11833, 11833, 11834, 11834, 11835, 11835, 11836, 11836, + 11837, 11837, 11838, 11839, 11839, 11840, 11840, 314, 13491, 11842, 11843, + 11844, 11845, 11846, 11847, 11848, 11849, 11850, 11850, 11850, 11851, 11852, + 11852, 11852, 268, 268, 11854, 11854, 11855, 11855, 11856, 11856, 11857, + 11857, 11858, 11858, 11859, 11859, 11860, 11860, 11861, 11862, 11862, 11863, + 11863, 11864, 11864, 11865, 11865, 11866, 11866, 11867, 11867, 11868, 11868, + 11869, 11869, 11870, 11871, 11871, 11872, 11872, 340, 340, 11874, 11874, + 11875, 11875, 340, 340, 11877, 11877, 11878, 11878, 314, 314, 314, 340, 11881, + 11882, 11883, 11884, 11884, 11884, 11880, 11880, 11880, 11886, 11886, 11886, + 11885, 11885, 11885, 11879, 11879, 11876, 11876, 11873, 11873, 11853, 11853, + 11853, 11841, 11841, 437, 437, 11893, 11893, 11894, 11894, 11895, 11895, + 246, 246, 251, 251, 448, 448, 457, 481, 482, 314, 229, 493, 494, 495, 507, + 526, 523, 245, 246, 247, 248, 249, 250, 251, 515, 238, 237, 236, 235, 234, + 263, 535, 11910, 11906, 11907, 11909, 11908, 11905, 11903, 11904, 11902, + 11901, 11900, 11897, 11898, 11899, 11897, 11898, 11899, 11829, 11829, 11919, + 11919, 11920, 11920, 11921, 11921, 11922, 11922, 11923, 11923, 11924, 11924, + 11925, 11925, 11926, 11926, 11927, 11927, 314, 314, 11929, 11929, 11930, + 11930, 11928, 11928, 369, 369, 11933, 11933, 11934, 11934, 11935, 11935, + 11936, 11936, 11937, 11938, 11938, 594, 594, 11940, 11940, 11941, 11941, + 11942, 11942, 11943, 11943, 11944, 11944, 11945, 11945, 11946, 11946, 11947, + 11947, 11948, 11948, 11949, 11949, 11950, 11950, 621, 621, 11951, 11951, + 591, 591, 11952, 11953, 11954, 11952, 11953, 11954, 11955, 11955, 632, 11957, + 11958, 543, 543, 11959, 643, 643, 11961, 11961, 11962, 11962, 11963, 11963, + 11964, 11964, 11965, 11965, 11966, 11966, 11967, 11967, 11968, 11968, 11969, + 11969, 11970, 11970, 11971, 11971, 11972, 11972, 11973, 11973, 11974, 11974, + 263, 11976, 11977, 715, 715, 11979, 11979, 388, 393, 11982, 11981, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 11985, 11986, 11983, 11984, 694, + 462, 11989, 11990, 474, 475, 476, 469, 470, 701, 502, 518, 519, 245, 246, + 248, 249, 250, 251, 448, 515, 235, 237, 238, 540, 535, 536, 11998, 11999, + 11906, 11907, 11995, 11996, 11997, 11994, 11904, 11901, 11992, 11993, 11991, + 11900, 11987, 11988, 11980, 11980, 12000, 12001, 12002, 12003, 12004, 12005, + 12006, 12007, 12007, 11978, 11978, 767, 767, 12010, 12010, 12011, 12011, + 12012, 12012, 12013, 12013, 12014, 12014, 782, 782, 12016, 12016, 12017, + 12017, 11729, 11729, 12018, 12018, 12015, 12015, 11888, 11888, 512, 762, + 763, 764, 765, 12019, 12020, 12021, 12022, 12019, 12020, 12021, 12022, 12023, + 12023, 12024, 12024, 12025, 12025, 437, 12027, 12028, 12029, 12030, 12031, + 12032, 12032, 12033, 12033, 749, 750, 12035, 12036, 12037, 12038, 12034, + 12026, 12026, 12039, 12040, 12041, 12041, 12042, 12042, 12008, 12009, 12008, + 12009, 828, 828, 12045, 835, 12047, 12048, 12049, 12050, 12051, 12052, 12053, + 12054, 12054, 12046, 12046, 236, 12057, 507, 507, 12059, 12059, 12060, 12060, + 12061, 12061, 12062, 12062, 12063, 12063, 12064, 11903, 12066, 12067, 12067, + 12068, 12068, 12069, 12069, 12070, 12070, 12071, 12071, 12072, 12072, 234, + 234, 12074, 12074, 12075, 12075, 12076, 12076, 12077, 12077, 12078, 12078, + 12079, 12079, 12080, 12080, 12081, 12081, 12082, 12082, 12083, 12083, 12084, + 12084, 247, 247, 12086, 12086, 12087, 12087, 12088, 12088, 12089, 12089, + 12090, 12090, 12091, 12091, 12092, 12092, 12093, 12093, 12094, 12094, 12095, + 12095, 12096, 12085, 12073, 12073, 12097, 12098, 12099, 12099, 12065, 12058, + 12102, 12102, 12100, 12101, 951, 951, 12104, 12104, 12105, 12105, 12106, + 12106, 12107, 12107, 12108, 12108, 621, 12110, 12111, 12112, 12112, 975, + 975, 12114, 12114, 12115, 12115, 12116, 12116, 989, 989, 986, 986, 12118, + 12119, 12118, 12119, 1000, 1000, 997, 997, 12121, 12122, 12121, 12122, 12123, + 12120, 1008, 12124, 12125, 12126, 12126, 12117, 12117, 1026, 1025, 1024, + 1023, 1022, 1021, 1020, 1019, 1018, 12129, 1041, 1042, 12131, 12131, 12132, + 12132, 12133, 12133, 12134, 12134, 12135, 12135, 12136, 12130, 12138, 12137, + 12139, 12139, 12140, 12140, 12141, 12141, 12142, 12142, 12143, 12143, 12144, + 12144, 12127, 12128, 12127, 12128, 12113, 12113, 12109, 12109, 12103, 12103, + 12055, 12056, 12055, 12056, 12043, 12044, 12043, 12044, 11727, 11975, 11727, + 11975, 11960, 11960, 11956, 11956, 11939, 11939, 11931, 11932, 11931, 11932, + 1086, 1086, 12157, 12157, 12158, 12158, 12159, 12159, 12160, 12160, 12161, + 12161, 12145, 12146, 12147, 12148, 12149, 12150, 12151, 12152, 12153, 12154, + 12155, 12156, 12145, 12146, 12147, 12148, 12149, 12150, 12151, 12152, 12153, + 12154, 12155, 12156, 11913, 11914, 11915, 11911, 11912, 11916, 11917, 11918, + 11896, 11896, 493, 540, 518, 518, 12167, 12167, 12168, 12168, 518, 518, 457, + 457, 457, 457, 536, 536, 470, 470, 12169, 12169, 457, 457, 474, 474, 519, + 519, 495, 495, 476, 476, 494, 494, 470, 470, 482, 482, 475, 475, 457, 457, + 502, 502, 502, 502, 12166, 12166, 12170, 12171, 12172, 12173, 12174, 12175, + 12176, 12177, 12178, 12179, 12180, 12181, 12182, 12183, 12184, 12170, 12171, + 12172, 12173, 12174, 12175, 12176, 12177, 12178, 12179, 12180, 12181, 12182, + 12183, 12184, 12185, 402, 402, 12187, 12187, 12188, 12188, 12189, 12189, + 12190, 12191, 12192, 12193, 403, 403, 12195, 12195, 12196, 12196, 12197, + 12197, 12198, 12199, 12200, 12201, 12202, 12194, 406, 406, 12205, 12205, + 12206, 12206, 12207, 12207, 12208, 12209, 12210, 12211, 12212, 404, 404, + 12214, 12214, 12215, 12215, 12216, 12216, 12217, 12218, 12219, 12220, 408, + 408, 12222, 12222, 12223, 12223, 12224, 12224, 12225, 12226, 12227, 12228, + 12229, 12221, 407, 407, 12232, 12232, 12233, 12233, 12234, 12234, 12235, + 12236, 12237, 12238, 12239, 409, 409, 12241, 12241, 12242, 12242, 12243, + 12243, 12244, 12245, 12246, 12247, 12248, 12249, 12249, 12250, 12250, 12251, + 12251, 12252, 12252, 12253, 12253, 12254, 12254, 12255, 12255, 12256, 12256, + 12257, 12257, 12258, 12258, 410, 410, 12260, 12260, 12261, 12261, 12262, + 12262, 12263, 12264, 12265, 12266, 405, 405, 12268, 12268, 12269, 12269, + 12270, 12270, 12271, 12272, 12273, 12274, 12275, 12267, 12259, 12259, 481, + 481, 12279, 12279, 481, 481, 12281, 12281, 12282, 12282, 12280, 12280, 12283, + 12283, 12284, 12285, 393, 393, 12287, 12287, 12288, 12288, 12289, 12289, + 12290, 12291, 12292, 12293, 12293, 12294, 12294, 393, 393, 12296, 12296, + 12297, 12297, 12298, 12298, 12299, 12300, 12301, 12302, 12302, 12303, 12303, + 12304, 12304, 12295, 12295, 518, 518, 12307, 12307, 12308, 12308, 518, 518, + 457, 457, 457, 457, 536, 536, 470, 470, 12309, 12309, 474, 474, 519, 519, + 495, 495, 476, 476, 494, 494, 470, 470, 482, 482, 475, 475, 457, 457, 502, + 502, 502, 502, 12166, 12166, 457, 457, 701, 701, 701, 701, 701, 701, 12310, + 12311, 12312, 12313, 12314, 12315, 12324, 12316, 12317, 12318, 12319, 12320, + 12325, 12321, 12322, 12323, 12310, 12311, 12312, 12313, 12314, 12315, 12324, + 12316, 12317, 12318, 12319, 12320, 12325, 12321, 12322, 12323, 12324, 12325, + 523, 523, 12327, 12327, 12328, 12328, 12329, 12329, 12330, 12330, 523, 523, + 12332, 12332, 12333, 12333, 12334, 12334, 12335, 12335, 12336, 12336, 12331, + 12331, 12326, 402, 402, 12340, 12340, 12341, 12341, 12342, 12342, 12343, + 12344, 12345, 12346, 403, 403, 12348, 12348, 12349, 12349, 12350, 12350, + 12351, 12352, 12353, 12354, 12355, 12347, 406, 406, 12358, 12358, 12359, + 12359, 12360, 12360, 12361, 12362, 12363, 12364, 12365, 404, 404, 12367, + 12367, 12368, 12368, 12369, 12369, 12370, 12371, 12372, 12373, 408, 408, + 12375, 12375, 12376, 12376, 12377, 12377, 12378, 12379, 12380, 12381, 12382, + 12374, 407, 407, 12385, 12385, 12386, 12386, 12387, 12387, 12388, 12389, + 12390, 12391, 12392, 409, 409, 12394, 12394, 12395, 12395, 12396, 12396, + 12397, 12398, 12399, 12400, 12401, 12402, 12402, 12403, 12403, 12404, 12404, + 12405, 12405, 12406, 12406, 12407, 12407, 12408, 12408, 12409, 12409, 12410, + 12410, 12411, 12411, 410, 410, 12413, 12413, 12414, 12414, 12415, 12415, + 12416, 12417, 12418, 12419, 405, 405, 12421, 12421, 12422, 12422, 12423, + 12423, 12424, 12425, 12426, 12427, 12428, 12420, 12412, 12412, 401, 401, + 12432, 12432, 12433, 12433, 12434, 12434, 12435, 12436, 12437, 12438, 401, + 401, 12440, 12440, 12441, 12441, 12442, 12442, 12443, 12444, 12445, 12446, + 12447, 12447, 12231, 12231, 12439, 12439, 12384, 12384, 12356, 12356, 12429, + 12430, 12431, 12429, 12430, 12431, 12393, 12393, 12384, 12384, 12383, 12383, + 12366, 12366, 12356, 12356, 12357, 12357, 12338, 12339, 12337, 12338, 12339, + 12339, 12203, 12203, 12305, 12305, 12306, 12286, 12286, 12286, 12276, 12277, + 12278, 12276, 12277, 12278, 12240, 12240, 12231, 12231, 12230, 12230, 12213, + 12213, 12203, 12203, 12204, 12204, 12186, 12186, 12450, 12451, 12452, 12460, + 12461, 12453, 12454, 12455, 12456, 12457, 12458, 12448, 12449, 12450, 12451, + 12452, 12460, 12461, 12453, 12454, 12455, 12456, 12457, 12458, 12459, 12460, + 12461, 12462, 12463, 12464, 12465, 12466, 12467, 92, 12468, 12469, 12469, + 12469, 12470, 12470, 12470, 12471, 12471, 12471, 340, 782, 12473, 12474, + 12475, 12476, 12476, 12476, 782, 12478, 12479, 12480, 12481, 12481, 12481, + 621, 12483, 12483, 12483, 591, 591, 591, 594, 594, 594, 632, 632, 632, 621, + 621, 621, 12484, 12485, 12486, 12487, 12484, 12484, 12485, 12486, 12487, + 12485, 12486, 12487, 12488, 12488, 12488, 12489, 594, 594, 12491, 12491, + 12492, 12492, 12493, 12493, 12494, 12494, 12495, 12495, 12496, 12496, 12497, + 12497, 12498, 12499, 12499, 12500, 12500, 12501, 12501, 12502, 12503, 12503, + 12504, 12504, 12505, 12505, 12506, 12506, 12507, 12507, 12508, 12508, 12509, + 12510, 12510, 12511, 12511, 12512, 12512, 12513, 12513, 12514, 12514, 12515, + 12515, 12516, 12517, 12517, 12518, 12518, 12519, 12519, 12520, 12520, 12521, + 12522, 12522, 12523, 12523, 12524, 12524, 12525, 12525, 12526, 12527, 12527, + 12528, 12528, 12529, 12529, 12530, 12530, 12531, 12531, 11947, 12533, 12533, + 12534, 12534, 12535, 12535, 12536, 12537, 12537, 12538, 12538, 12539, 12539, + 12540, 12540, 12541, 12541, 12542, 12542, 12543, 12544, 12544, 12545, 12545, + 12546, 12546, 12547, 12547, 12548, 12548, 12549, 12549, 12550, 12551, 12551, + 12552, 12552, 12553, 12553, 12554, 12554, 12555, 12556, 12556, 12557, 12557, + 12558, 12558, 12559, 12559, 12560, 12561, 12561, 12562, 12562, 12563, 12563, + 12564, 12564, 12565, 12565, 12566, 12566, 12532, 12532, 12490, 12490, 12490, + 12482, 12482, 12482, 12477, 12477, 12477, 12472, 12472, 12472, 986, 989, + 997, 1000, 975, 48, 543, 750, 49, 749, 1008, 12573, 12574, 409, 408, 407, + 406, 405, 404, 403, 402, 401, 393, 250, 388, 828, 507, 263, 462, 540, 536, + 248, 249, 251, 535, 526, 523, 519, 518, 448, 515, 235, 237, 238, 245, 246, + 502, 495, 494, 493, 482, 481, 476, 475, 474, 470, 701, 469, 457, 632, 229, + 236, 247, 715, 234, 674, 1041, 1042, 268, 694, 369, 410, 621, 1018, 1019, + 1020, 1021, 1022, 1023, 1024, 1025, 1026, 12587, 12586, 12577, 12578, 12579, + 12580, 12581, 12582, 12583, 12584, 12585, 43, 437, 2, 835, 591, 12588, 12589, + 12590, 765, 951, 1564, 594, 12575, 12576, 340, 512, 763, 764, 1086, 12591, + 12592, 12593, 12594, 12595, 12596, 12596, 1659, 1658, 340, 1655, 674, 694, + 1647, 1646, 1645, 1644, 1643, 462, 1639, 1638, 1626, 1625, 1624, 1623, 1622, + 1621, 1620, 1619, 1618, 1617, 1613, 1612, 1708, 1707, 1699, 1698, 1697, 1696, + 1695, 1694, 1688, 1687, 1686, 1685, 1680, 1679, 1678, 1673, 1672, 1671, 1735, + 1745, 1744, 1743, 1742, 268, 1738, 12610, 1041, 1042, 1726, 1725, 1724, 1723, + 1722, 1721, 1720, 997, 1000, 986, 989, 1008, 1758, 1757, 975, 1781, 1780, + 543, 632, 1775, 1774, 1773, 369, 1770, 835, 1767, 12617, 12616, 1792, 12624, + 12625, 12618, 12619, 12620, 12621, 12622, 12623, 12611, 12612, 12613, 12614, + 12615, 11985, 12605, 12606, 12607, 12608, 12609, 12598, 12599, 12600, 12601, + 12602, 12603, 12604, 1805, 12631, 1814, 12633, 474, 475, 476, 12634, 1810, + 12632, 594, 12637, 12638, 1825, 1824, 1837, 1857, 1853, 1852, 1847, 1846, + 1845, 1842, 12642, 12643, 12644, 12645, 229, 12641, 1878, 1877, 1876, 1875, + 1874, 1871, 1868, 1889, 1022, 1026, 1018, 1019, 1020, 1021, 437, 1902, 12655, + 12656, 12654, 12652, 12653, 12651, 502, 12648, 12649, 12650, 1915, 12662, + 1931, 1928, 1925, 1922, 12664, 12665, 12666, 12667, 12668, 12663, 1947, 1944, + 12, 1964, 526, 1564, 1972, 518, 519, 621, 828, 1969, 245, 247, 248, 249, + 250, 251, 448, 515, 12673, 234, 235, 236, 237, 238, 388, 715, 1957, 1956, + 1955, 1954, 512, 782, 1988, 72, 1985, 73, 1982, 1023, 1024, 1025, 195, 591, + 2049, 2048, 2040, 2039, 2038, 2037, 2036, 2035, 951, 2028, 2027, 2026, 12683, + 2024, 2013, 2012, 2011, 2010, 2009, 2008, 2007, 2006, 2005, 393, 749, 750, + 765, 1999, 1998, 1997, 1996, 540, 762, 763, 764, 791, 1086, 263, 12680, 12681, + 12682, 12684, 12685, 12686, 12687, 12688, 12689, 12690, 12691, 11907, 12674, + 12675, 12676, 12677, 12678, 12679, 11905, 12671, 12672, 12669, 12670, 12657, + 12658, 12659, 12660, 12661, 11904, 12646, 12647, 457, 11902, 12639, 12640, + 11901, 11993, 12635, 12636, 12626, 12627, 12628, 12629, 12630, 1611, 12692, + 12693, 12694, 12695, 12696, 12697, 12698, 12699, 12700, 12701, 765, 835, + 1086, 791, 340, 782, 764, 512, 762, 763, 12704, 12703, 12705, 12706, 12707, + 314, 12654, 12708, 12709, 12710, 12710, 12711, 12711, 12712, 12713, 12713, + 12702, 12702, 12597, 12597, 835, 835, 12717, 12717, 12718, 12718, 12719, + 12719, 512, 762, 763, 764, 765, 12721, 12721, 12722, 12722, 12723, 12723, + 11937, 12725, 369, 369, 12727, 12727, 12728, 12728, 12729, 12729, 12730, + 12730, 12731, 12732, 12733, 12733, 12726, 12726, 11987, 11988, 12736, 12737, + 12737, 12737, 12738, 12738, 12738, 246, 246, 251, 251, 448, 448, 11990, 469, + 470, 245, 246, 247, 248, 249, 250, 251, 448, 515, 512, 543, 263, 535, 536, + 11998, 12747, 12748, 11909, 11906, 11907, 11995, 12745, 12746, 11901, 11992, + 12744, 12743, 12740, 12741, 12742, 12740, 12741, 12742, 437, 437, 12754, + 12754, 12755, 12755, 12756, 12756, 11861, 11861, 12758, 12758, 12759, 12759, + 12760, 12760, 12761, 12761, 12762, 12762, 12763, 12763, 12764, 12764, 12765, + 12765, 12766, 12766, 314, 314, 12768, 12768, 12769, 12769, 12767, 12767, + 12731, 12772, 12772, 12498, 12498, 12774, 12774, 12775, 12775, 12776, 12776, + 621, 621, 12777, 12777, 591, 591, 12778, 12779, 12780, 12778, 12779, 12780, + 12781, 12781, 543, 543, 11959, 643, 643, 12784, 12784, 12785, 12785, 12786, + 12786, 12787, 12787, 12788, 12788, 12789, 12789, 12790, 12790, 12791, 12791, + 12792, 12792, 12793, 12793, 12794, 12794, 12795, 12795, 12796, 12796, 11722, + 11722, 12798, 12798, 12799, 12799, 12800, 12800, 12801, 12801, 12797, 12797, + 715, 715, 12804, 12804, 12805, 12805, 12002, 12004, 12005, 12006, 12000, + 12001, 12003, 12806, 12806, 11978, 11978, 767, 767, 12809, 12809, 12810, + 12810, 12811, 12811, 12812, 12812, 12813, 12813, 782, 782, 12815, 12815, + 12816, 12816, 791, 791, 12818, 12818, 12819, 12819, 12820, 12820, 12821, + 12821, 12817, 12817, 12814, 12814, 11889, 11889, 512, 762, 763, 764, 765, + 12822, 12823, 12824, 12825, 12822, 12823, 12824, 12825, 12826, 12826, 12827, + 12827, 12828, 12828, 12032, 12032, 12830, 12830, 12831, 12829, 12829, 12039, + 12832, 12833, 12833, 12834, 12834, 12807, 12808, 12807, 12808, 828, 828, + 12837, 12054, 12054, 12838, 12838, 507, 507, 12841, 12841, 12842, 12842, + 12843, 12843, 12844, 12844, 12845, 12845, 12846, 12067, 12067, 12848, 12848, + 12849, 12849, 12850, 12850, 12851, 12851, 12852, 12852, 234, 234, 12854, + 12854, 12855, 12855, 12856, 12856, 12857, 12857, 12858, 12858, 12859, 12859, + 12860, 12860, 12861, 12861, 12862, 12862, 12863, 12863, 12864, 12864, 247, + 247, 12866, 12866, 12867, 12867, 12868, 12868, 12869, 12869, 12870, 12870, + 12871, 12871, 12872, 12872, 12873, 12873, 12874, 12874, 12875, 12875, 12876, + 12865, 12853, 12853, 12877, 12878, 12879, 12879, 12847, 12880, 12881, 12102, + 12102, 951, 951, 12883, 12883, 12884, 12884, 12885, 12885, 12886, 12886, + 12887, 12887, 12112, 12112, 975, 975, 12890, 12890, 12891, 12891, 12892, + 12892, 989, 989, 986, 986, 12894, 12895, 12894, 12895, 1000, 1000, 997, 997, + 12897, 12898, 12897, 12898, 12899, 12896, 1008, 12900, 12901, 12902, 12902, + 12893, 12893, 12131, 12131, 12905, 12905, 12906, 12906, 12907, 12907, 12908, + 12908, 12909, 12138, 12910, 12911, 12911, 12912, 12912, 12913, 12913, 12914, + 12914, 12915, 12915, 12916, 12916, 12903, 12904, 12903, 12904, 12889, 12889, + 12888, 12888, 12882, 12882, 12839, 12840, 12839, 12840, 12835, 12836, 12835, + 12836, 12802, 12802, 12803, 12803, 12783, 12783, 12782, 12782, 12773, 12773, + 12770, 12771, 12770, 12771, 1086, 1086, 12929, 12929, 12930, 12930, 12931, + 12931, 12932, 12932, 12933, 12933, 12917, 12918, 12919, 12920, 12921, 12922, + 12923, 12924, 12925, 12926, 12927, 12928, 12917, 12918, 12919, 12920, 12921, + 12922, 12923, 12924, 12925, 12926, 12927, 12928, 12757, 12757, 11913, 11914, + 11915, 12002, 12006, 12750, 12749, 12751, 12752, 12753, 12739, 12739, 12739, + 12028, 12939, 12940, 12941, 12942, 11489, 11489, 12944, 12944, 12945, 12945, + 543, 543, 543, 11959, 12943, 12802, 12805, 12805, 11980, 92, 223, 84, 85, + 86, 87, 88, 89, 90, 91, 222, 2, 220, 221, 19, 81, 82, 83, 80, 69, 218, 219, + 4, 74, 212, 75, 36, 47, 76, 77, 213, 7, 8, 9, 10, 11, 12, 13, 78, 79, 14, + 15, 16, 17, 18, 39, 94, 214, 215, 216, 217, 44, 49, 55, 186, 187, 188, 189, + 190, 191, 192, 193, 37, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, + 204, 205, 206, 207, 40, 45, 52, 68, 208, 209, 210, 211, 3, 41, 42, 43, 48, + 71, 6, 72, 73, 12971, 12972, 12973, 12974, 12975, 12976, 12977, 12978, 12964, + 12965, 12966, 12967, 12968, 12969, 12970, 12961, 12962, 12963, 12960, 12958, + 12959, 12956, 12957, 12952, 12953, 12954, 12955, 12950, 12951, 164, 165, + 50, 166, 38, 56, 167, 168, 169, 170, 171, 70, 172, 173, 174, 175, 176, 177, + 178, 179, 180, 181, 182, 183, 184, 185, 146, 147, 148, 149, 150, 151, 152, + 153, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 154, 155, 156, 157, 158, 159, + 160, 161, 162, 163, 134, 135, 136, 137, 95, 138, 51, 53, 139, 140, 141, 142, + 143, 144, 145, 31, 32, 30, 33, 34, 127, 128, 20, 93, 129, 130, 131, 57, 132, + 46, 133, 13005, 13006, 13007, 13008, 13000, 13001, 13002, 13003, 13004, 12994, + 12995, 12996, 12997, 12998, 12999, 12987, 12988, 12989, 12990, 12991, 12992, + 12993, 126, 119, 120, 121, 122, 123, 124, 125, 13014, 13015, 13016, 13017, + 13013, 112, 113, 114, 115, 116, 117, 118, 111, 21, 25, 26, 27, 28, 29, 54, + 13026, 13024, 13025, 13023, 13020, 13021, 13022, 110, 13031, 107, 108, 109, + 22, 23, 24, 13036, 13033, 13034, 13035, 13037, 13038, 13032, 13027, 13028, + 13029, 13030, 13018, 13019, 13009, 13010, 13011, 13012, 12979, 12980, 12981, + 12982, 12983, 12984, 12985, 12986, 106, 13045, 104, 105, 35, 13048, 13047, + 103, 13051, 13052, 13049, 13050, 13046, 102, 13056, 101, 13058, 13059, 13057, + 5, 13062, 13063, 100, 13065, 13066, 99, 13068, 1, 96, 97, 98, 13070, 13071, + 13072, 13073, 13074, 13069, 13075, 13076, 13067, 13064, 13060, 13061, 13053, + 13054, 13055, 13039, 13040, 13041, 13042, 13043, 13044, 13077, 13078, 13079, + 13080, 13081, 13082, 13083, 13083, 13083, 13084, 13084, 13084, 13085, 13085, + 13085, 11998, 12748, 13086, 13086, 13086, 12692, 12693, 12694, 12695, 12696, + 12697, 12698, 12699, 12700, 1611, 12949, 12949, 12949, 13087, 12750, 11913, + 12002, 11914, 11915, 12004, 12005, 12006, 13088, 13088, 13088, 13089, 12596, + 12596, 975, 13092, 13093, 13093, 13093, 13094, 13094, 13094, 13095, 13095, + 13095, 13096, 13097, 13098, 13099, 1041, 13101, 13102, 13102, 13103, 13103, + 13104, 13104, 13105, 13105, 13106, 13106, 13107, 13108, 13109, 13110, 13111, + 13112, 13112, 13113, 13113, 13114, 13114, 13115, 13115, 13102, 13102, 13117, + 13117, 13118, 13118, 13119, 13119, 13120, 13120, 13121, 13122, 13123, 13124, + 13125, 13126, 13126, 13127, 13127, 13128, 13128, 13129, 13129, 13130, 13130, + 13116, 13116, 13131, 13131, 13132, 13133, 13133, 13133, 1042, 13135, 13136, + 13136, 13137, 13137, 13138, 13138, 13139, 13139, 13140, 13140, 13141, 13142, + 13142, 13143, 13143, 13144, 13144, 13145, 13145, 13136, 13136, 13147, 13147, + 13148, 13148, 13149, 13149, 13150, 13150, 13151, 13152, 13152, 13153, 13153, + 13154, 13154, 13155, 13155, 13156, 13156, 13146, 13146, 13157, 13157, 13158, + 13159, 13159, 13159, 43, 13160, 44, 750, 749, 13134, 340, 763, 764, 765, + 782, 791, 1086, 13161, 13162, 13163, 13164, 13165, 13166, 13100, 12710, 12710, + 311, 13170, 13171, 13172, 13173, 13174, 13174, 13174, 13174, 13176, 13176, + 13175, 13175, 13177, 13177, 13178, 13179, 13180, 512, 13182, 13183, 13184, + 762, 13186, 13187, 13188, 763, 13190, 13191, 13192, 764, 13194, 13195, 13196, + 1086, 13198, 13199, 13200, 340, 13202, 13203, 13204, 782, 13206, 13207, 13208, + 12704, 13210, 13211, 765, 13213, 13214, 13215, 40, 13216, 48, 13212, 49, + 13209, 50, 13205, 3, 13201, 41, 13197, 42, 13193, 43, 13189, 44, 750, 13185, + 13217, 13218, 13219, 13220, 13221, 13222, 13223, 13224, 13225, 13226, 13227, + 13228, 13229, 13181, 314, 314, 314, 13232, 13232, 13232, 13233, 13234, 13235, + 13230, 13231, 13167, 13168, 13169, 13169, 13236, 13237, 13238, 13239, 13239, + 13239, 13091, 13091, 13090, 13090, 13090, 828, 828, 828, 13243, 835, 835, + 13245, 13245, 13246, 13246, 13244, 835, 13249, 13250, 13251, 835, 835, 13253, + 13254, 13255, 13256, 13257, 13258, 13259, 13260, 13261, 13262, 13262, 13262, + 13252, 13264, 13264, 13263, 13264, 13247, 13248, 13247, 13248, 13248, 750, + 13267, 13268, 13268, 13269, 13269, 512, 762, 763, 764, 765, 13267, 13271, + 13271, 13272, 13272, 13273, 13273, 13270, 13270, 951, 951, 13276, 13276, + 951, 951, 13278, 13278, 13279, 13279, 13277, 13277, 13280, 13280, 13281, + 12747, 13282, 13282, 13282, 13283, 13284, 388, 388, 13286, 13286, 13287, + 13287, 13288, 13288, 13289, 13290, 13291, 13292, 13293, 13294, 13294, 13295, + 13295, 13296, 13296, 13297, 13297, 13298, 13298, 13299, 13299, 13300, 13300, + 13301, 13301, 13302, 13302, 388, 388, 13304, 13304, 13305, 13305, 13306, + 13306, 13307, 13308, 13309, 13310, 13311, 13312, 13312, 13313, 13313, 13314, + 13314, 13315, 13315, 13316, 13316, 13317, 13317, 13318, 13318, 13319, 13319, + 13320, 13320, 13321, 13321, 13303, 13303, 13323, 13322, 13323, 13324, 13324, + 13324, 13325, 12106, 13327, 13327, 13328, 13328, 12885, 13330, 13330, 13331, + 13331, 13332, 13332, 13329, 13329, 12112, 13335, 13335, 13335, 975, 13092, + 11886, 11886, 11886, 13338, 13338, 13338, 13339, 13339, 13339, 989, 989, + 989, 986, 986, 986, 13341, 13341, 13341, 13342, 13342, 13342, 13341, 13342, + 13341, 13342, 13341, 13342, 13343, 1000, 1000, 1000, 997, 997, 997, 13345, + 13345, 13345, 13346, 13346, 13346, 13345, 13346, 13345, 13346, 13345, 13346, + 13347, 13348, 13344, 1008, 13349, 13350, 1008, 13349, 13350, 13351, 13352, + 13352, 13352, 2, 13340, 13337, 13337, 13337, 13283, 12138, 13356, 13357, + 13357, 13358, 13358, 13359, 13359, 13360, 13360, 13361, 13361, 13357, 13357, + 13363, 13363, 13364, 13364, 13365, 13365, 13366, 13366, 251, 250, 249, 248, + 247, 246, 245, 5, 13369, 13370, 13371, 13372, 13373, 13374, 13375, 13376, + 13377, 13378, 13379, 13380, 13381, 13382, 13383, 13384, 13385, 13386, 13387, + 13388, 13389, 13390, 13391, 13392, 13393, 13394, 13395, 13396, 13397, 13398, + 13399, 13400, 13401, 13402, 13403, 13404, 13405, 13406, 13407, 13408, 13409, + 13410, 13411, 13412, 13413, 13414, 13415, 13416, 13417, 13418, 224, 225, + 13421, 13422, 226, 13424, 13425, 228, 13427, 13428, 13429, 13430, 13431, + 13432, 13433, 13434, 13435, 13436, 13437, 13438, 13439, 13440, 13441, 13442, + 13443, 13444, 13368, 11909, 13367, 13367, 13362, 13362, 13353, 13354, 13355, + 13353, 13354, 13353, 13354, 13355, 13355, 13336, 13336, 13336, 13333, 13333, + 13334, 674, 11725, 11725, 674, 12800, 12800, 13326, 13326, 13326, 13285, + 13285, 13285, 765, 764, 763, 762, 512, 13274, 13274, 13275, 13265, 13266, + 13265, 13265, 13266, 13266, 13240, 13242, 13241, 13240, 13240, 13242, 13241, + 13242, 12948, 12821, 12948, 12821, 12946, 12947, 12946, 12947, 12947, 12934, + 12935, 12937, 12936, 12938, 12934, 12935, 12937, 12936, 12938, 12937, 12938, + 12734, 12734, 12735, 512, 762, 763, 764, 765, 12724, 12724, 12720, 12720, + 12714, 12715, 12716, 12714, 12715, 12716, 12568, 12569, 12570, 12571, 12572, + 12567, 12569, 12568, 12569, 12570, 12571, 12572, 12570, 12571, 12572, 12162, + 12163, 12164, 12165, 12162, 12163, 12164, 12165, 11888, 11889, 11889, 11887, + 11891, 11890, 11887, 11887, 11891, 11890, 11891, 11892, 11821, 11821, 11812, + 11813, 11814, 11812, 11813, 11814, 11802, 11802, 11800, 11800, 674, 11796, + 11796, 11796, 11143, 11143, 11789, 11789, 11768, 11768, 512, 762, 763, 764, + 765, 11762, 11762, 11757, 11758, 11757, 11758, 11738, 11738, 11729, 11729, + 11728, 11728, 11730, 11731, 11732, 11730, 11731, 11732, 11492, 11492, 11493, + 11178, 11493, 11178, 11487, 11488, 11487, 11488, 11474, 11475, 11476, 11477, + 11478, 11474, 11475, 11476, 11477, 11478, 11294, 11295, 11296, 11297, 11298, + 11294, 11295, 11296, 11297, 11298, 11073, 11073, 11064, 11064, 11063, 11065, + 11066, 11063, 11065, 11066, 2830, 2833, 11026, 2624, 2805, 2806, 2807, 2808, + 2809, 2810, 2811, 2812, 2813, 2814, 2815, 2816, 2817, 2818, 2819, 2820, 2821, + 2624, 2805, 2806, 2807, 2808, 2809, 2810, 2811, 2812, 2813, 2814, 2815, 2816, + 2817, 2818, 2819, 2820, 2821, 690, 2822, 920, 1, 227, 226, 13489, 13490, + 13491, 13492, 13493, 13495, 13497, 13499 +}; + +static unsigned char label_array[] = { + 0xFE, 0xF9, 0xF8, 0xF4, 0xE7, 0xE6, 0xE4, 0xE3, 0xE2, 0xD9, 0xD7, 0xD4, 0xD3, + 0xD2, 0xD1, 0xC9, 0xC8, 0xC7, 0xC5, 0xC3, 0xC2, 0xC1, 0xB7, 0xB6, 0xB4, 0xB3, + 0xAB, 0xA7, 0xA6, 0xA4, 0xA3, 0xA2, 0x9B, 0x99, 0x97, 0x94, 0x93, 0x92, 0x91, + 0x89, 0x88, 0x87, 0x85, 0x83, 0x82, 0x81, 0x78, 0x77, 0x75, 0x74, 0x73, 0x72, + 0x71, 0x70, 0x6D, 0x6C, 0x6B, 0x6A, 0x69, 0x68, 0x67, 0x66, 0x65, 0x64, 0x63, + 0x62, 0x61, 0x58, 0x57, 0x55, 0x54, 0x53, 0x52, 0x50, 0x4D, 0x4C, 0x4B, 0x4A, + 0x49, 0x48, 0x47, 0x45, 0x43, 0x42, 0x41, 0x39, 0x38, 0x34, 0x1B, 0x00, 0xFE, + 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x00, 0x00, 0x37, 0x00, 0x33, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0x35, 0x32, 0x31, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x39, 0x36, 0x35, 0x33, 0x32, 0x31, 0x30, 0x00, 0x00, 0x35, 0x36, 0x00, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x00, 0x47, 0x67, 0x00, 0x6E, 0x4E, 0x00, 0x69, 0x49, + 0x00, 0x64, 0x44, 0x00, 0x6F, 0x4F, 0x00, 0x63, 0x43, 0x00, 0x6E, 0x4E, 0x00, + 0x65, 0x45, 0x00, 0x2D, 0x00, 0x64, 0x44, 0x00, 0x72, 0x52, 0x00, 0x61, 0x41, + 0x00, 0x64, 0x44, 0x00, 0x6E, 0x4E, 0x00, 0x61, 0x41, 0x00, 0x74, 0x54, 0x00, + 0x73, 0x53, 0x00, 0x2D, 0x00, 0x65, 0x45, 0x00, 0x62, 0x42, 0x00, 0x6F, 0x4F, + 0x00, 0x00, 0x38, 0x00, 0x00, 0x36, 0x00, 0x00, 0x38, 0x36, 0x00, 0x39, 0x00, + 0x31, 0x00, 0x2D, 0x00, 0x34, 0x00, 0x2E, 0x00, 0x33, 0x00, 0x78, 0x58, 0x00, + 0x5F, 0x00, 0x69, 0x49, 0x00, 0x73, 0x53, 0x00, 0x00, 0x43, 0x63, 0x00, 0x69, + 0x49, 0x00, 0x62, 0x42, 0x00, 0x61, 0x41, 0x69, 0x49, 0x00, 0x69, 0x49, 0x38, + 0x00, 0x30, 0x00, 0x37, 0x00, 0x2D, 0x00, 0x6F, 0x4F, 0x00, 0x00, 0x43, 0x63, + 0x6D, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x52, 0x72, 0x73, 0x6E, 0x64, 0x53, 0x4E, + 0x44, 0x00, 0x00, 0x53, 0x73, 0x00, 0x63, 0x43, 0x00, 0x73, 0x53, 0x00, 0x6B, + 0x4B, 0x00, 0x68, 0x48, 0x00, 0x2D, 0x00, 0x35, 0x00, 0x67, 0x47, 0x00, 0x69, + 0x49, 0x00, 0x00, 0x38, 0x00, 0x35, 0x00, 0x00, 0x34, 0x00, 0x32, 0x00, 0x00, + 0x39, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x39, 0x38, 0x37, 0x36, + 0x35, 0x34, 0x33, 0x32, 0x31, 0x30, 0x00, 0x34, 0x00, 0x31, 0x00, 0x00, 0x31, + 0x30, 0x00, 0x30, 0x00, 0x64, 0x44, 0x00, 0x69, 0x49, 0x00, 0x73, 0x53, 0x00, + 0x00, 0x45, 0x65, 0x00, 0x73, 0x53, 0x00, 0x65, 0x45, 0x00, 0x6E, 0x4E, 0x00, + 0x69, 0x49, 0x00, 0x00, 0x52, 0x72, 0x52, 0x72, 0x53, 0x73, 0x00, 0x00, 0x00, + 0x69, 0x67, 0x61, 0x49, 0x47, 0x41, 0x00, 0x00, 0x37, 0x00, 0x33, 0x31, 0x30, + 0x00, 0x00, 0x36, 0x00, 0x32, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x38, 0x33, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x34, 0x30, 0x00, 0x00, 0x00, 0x00, + 0x37, 0x30, 0x00, 0x00, 0x00, 0x39, 0x38, 0x37, 0x37, 0x00, 0x36, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x34, 0x33, 0x30, 0x00, 0x33, 0x32, 0x00, 0x00, 0x30, + 0x00, 0x30, 0x00, 0x00, 0x35, 0x00, 0x37, 0x00, 0x00, 0x39, 0x00, 0x00, 0x39, + 0x38, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x30, 0x00, 0x00, 0x00, 0x00, 0x31, + 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x39, + 0x38, 0x37, 0x36, 0x35, 0x31, 0x00, 0x00, 0x00, 0x00, 0x35, 0x34, 0x33, 0x00, + 0x00, 0x38, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x33, 0x31, 0x30, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x37, 0x35, 0x34, 0x33, + 0x30, 0x39, 0x32, 0x31, 0x2D, 0x64, 0x44, 0x00, 0x72, 0x52, 0x00, 0x61, 0x41, + 0x00, 0x64, 0x44, 0x00, 0x6E, 0x4E, 0x00, 0x61, 0x41, 0x00, 0x74, 0x54, 0x00, + 0x73, 0x53, 0x00, 0x65, 0x45, 0x00, 0x62, 0x42, 0x00, 0x6F, 0x4F, 0x63, 0x43, + 0x00, 0x00, 0x53, 0x73, 0x64, 0x44, 0x35, 0x00, 0x67, 0x47, 0x00, 0x69, 0x49, + 0x00, 0x00, 0x52, 0x72, 0x00, 0x00, 0x45, 0x65, 0x00, 0x73, 0x53, 0x00, 0x65, + 0x45, 0x00, 0x6E, 0x4E, 0x00, 0x61, 0x41, 0x00, 0x70, 0x50, 0x00, 0x61, 0x41, + 0x00, 0x6A, 0x4A, 0x00, 0x54, 0x74, 0x00, 0x6D, 0x4D, 0x00, 0x66, 0x46, 0x00, + 0x64, 0x44, 0x00, 0x6B, 0x4B, 0x00, 0x00, 0x48, 0x68, 0x00, 0x00, 0x00, 0x54, + 0x74, 0x4B, 0x6B, 0x70, 0x50, 0x00, 0x63, 0x43, 0x00, 0x75, 0x55, 0x00, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x33, 0x00, 0x4B, 0x6B, 0x32, 0x00, 0x62, 0x42, 0x00, + 0x00, 0x61, 0x41, 0x00, 0x6E, 0x4E, 0x00, 0x61, 0x41, 0x00, 0x6B, 0x4B, 0x00, + 0x61, 0x41, 0x00, 0x74, 0x54, 0x00, 0x61, 0x41, 0x00, 0x6B, 0x4B, 0x00, 0x68, + 0x48, 0x00, 0x74, 0x54, 0x00, 0x64, 0x44, 0x00, 0x69, 0x49, 0x00, 0x77, 0x57, + 0x00, 0x66, 0x46, 0x00, 0x6C, 0x4C, 0x00, 0x00, 0x38, 0x00, 0x6E, 0x4E, 0x00, + 0x61, 0x41, 0x00, 0x6D, 0x4D, 0x00, 0x4F, 0x6F, 0x00, 0x72, 0x52, 0x00, 0x00, + 0x50, 0x70, 0x61, 0x41, 0x00, 0x39, 0x00, 0x6D, 0x4D, 0x00, 0x00, 0x37, 0x00, + 0x34, 0x32, 0x00, 0x30, 0x00, 0x00, 0x38, 0x37, 0x33, 0x00, 0x39, 0x38, 0x37, + 0x32, 0x37, 0x35, 0x31, 0x39, 0x36, 0x35, 0x33, 0x31, 0x30, 0x38, 0x34, 0x00, + 0x00, 0x39, 0x38, 0x37, 0x36, 0x35, 0x35, 0x33, 0x00, 0x31, 0x30, 0x00, 0x00, + 0x69, 0x49, 0x00, 0x61, 0x41, 0x00, 0x68, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x35, 0x30, 0x54, 0x74, 0x32, 0x31, 0x39, 0x38, 0x34, 0x00, 0x00, 0x6D, + 0x62, 0x4D, 0x42, 0x30, 0x00, 0x38, 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x62, 0x42, 0x00, 0x67, 0x47, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, + 0x35, 0x33, 0x00, 0x31, 0x00, 0x39, 0x00, 0x35, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x72, 0x52, 0x00, 0x00, 0x63, 0x43, 0x00, 0x69, 0x49, 0x00, 0x6C, 0x4C, + 0x00, 0x6C, 0x4C, 0x00, 0x69, 0x49, 0x00, 0x72, 0x52, 0x00, 0x79, 0x59, 0x00, + 0x00, 0x4B, 0x6B, 0x00, 0x65, 0x45, 0x00, 0x65, 0x45, 0x00, 0x72, 0x52, 0x00, + 0x00, 0x57, 0x77, 0x00, 0x65, 0x45, 0x00, 0x72, 0x52, 0x00, 0x62, 0x42, 0x00, + 0x45, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x35, 0x34, + 0x33, 0x32, 0x68, 0x67, 0x63, 0x61, 0x48, 0x47, 0x43, 0x41, 0x00, 0x6E, 0x4E, + 0x00, 0x69, 0x49, 0x00, 0x74, 0x54, 0x00, 0x61, 0x41, 0x00, 0x00, 0x00, 0x6C, + 0x4C, 0x38, 0x35, 0x00, 0x6F, 0x4F, 0x00, 0x00, 0x73, 0x62, 0x53, 0x42, 0x00, + 0x00, 0x72, 0x52, 0x00, 0x38, 0x00, 0x69, 0x49, 0x00, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x63, 0x43, 0x00, 0x00, 0x73, 0x6F, 0x53, 0x4F, 0x43, 0x63, 0x00, 0x69, 0x49, + 0x00, 0x74, 0x54, 0x00, 0x6C, 0x4C, 0x00, 0x61, 0x41, 0x00, 0x62, 0x42, 0x00, + 0x35, 0x00, 0x37, 0x4C, 0x6C, 0x00, 0x61, 0x41, 0x00, 0x75, 0x55, 0x00, 0x67, + 0x47, 0x00, 0x6E, 0x4E, 0x00, 0x69, 0x49, 0x00, 0x6C, 0x4C, 0x00, 0x69, 0x49, + 0x00, 0x74, 0x54, 0x00, 0x6C, 0x4C, 0x00, 0x75, 0x55, 0x00, 0x6D, 0x4D, 0x00, + 0x30, 0x57, 0x77, 0x00, 0x65, 0x45, 0x00, 0x72, 0x52, 0x00, 0x62, 0x42, 0x00, + 0x65, 0x45, 0x00, 0x68, 0x48, 0x00, 0x6E, 0x4E, 0x00, 0x69, 0x49, 0x00, 0x74, + 0x54, 0x00, 0x61, 0x41, 0x00, 0x6C, 0x4C, 0x00, 0x32, 0x00, 0x34, 0x00, 0x65, + 0x45, 0x00, 0x67, 0x47, 0x00, 0x61, 0x41, 0x00, 0x70, 0x50, 0x00, 0x65, 0x45, + 0x00, 0x64, 0x44, 0x00, 0x6F, 0x4F, 0x00, 0x00, 0x00, 0x63, 0x43, 0x36, 0x35, + 0x32, 0x00, 0x35, 0x00, 0x38, 0x00, 0x00, 0x00, 0x70, 0x50, 0x38, 0x37, 0x00, + 0x63, 0x43, 0x00, 0x00, 0x73, 0x53, 0x00, 0x69, 0x49, 0x00, 0x6A, 0x4A, 0x00, + 0x54, 0x74, 0x00, 0x66, 0x46, 0x00, 0x69, 0x49, 0x00, 0x68, 0x48, 0x30, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x53, 0x73, 0x00, 0x69, 0x49, 0x00, 0x00, 0x45, 0x65, + 0x00, 0x64, 0x44, 0x00, 0x6F, 0x4F, 0x00, 0x63, 0x43, 0x00, 0x69, 0x49, 0x00, + 0x00, 0x65, 0x45, 0x00, 0x00, 0x65, 0x45, 0x00, 0x00, 0x4C, 0x6C, 0x42, 0x62, + 0x00, 0x36, 0x00, 0x00, 0x65, 0x45, 0x00, 0x00, 0x65, 0x45, 0x00, 0x00, 0x4C, + 0x6C, 0x42, 0x62, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x38, 0x33, 0x31, 0x00, + 0x66, 0x46, 0x00, 0x00, 0x74, 0x6E, 0x54, 0x4E, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x30, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x00, 0x00, 0x00, 0x32, 0x31, 0x00, 0x6E, 0x4E, 0x00, 0x69, 0x49, 0x00, + 0x74, 0x54, 0x00, 0x61, 0x41, 0x00, 0x6C, 0x4C, 0x00, 0x31, 0x00, 0x00, 0x31, + 0x33, 0x00, 0x73, 0x53, 0x00, 0x77, 0x57, 0x00, 0x6F, 0x4F, 0x00, 0x64, 0x44, + 0x00, 0x6E, 0x4E, 0x00, 0x69, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x75, 0x74, 0x73, 0x70, 0x6B, 0x69, 0x68, + 0x67, 0x65, 0x62, 0x61, 0x57, 0x55, 0x54, 0x53, 0x50, 0x4B, 0x49, 0x48, 0x47, + 0x45, 0x42, 0x41, 0x00, 0x00, 0x43, 0x63, 0x00, 0x69, 0x49, 0x00, 0x6C, 0x4C, + 0x00, 0x6C, 0x4C, 0x00, 0x69, 0x49, 0x00, 0x72, 0x52, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x79, 0x73, 0x70, 0x68, 0x63, 0x59, 0x53, 0x50, 0x48, 0x43, 0x31, 0x32, + 0x00, 0x72, 0x52, 0x45, 0x65, 0x41, 0x61, 0x48, 0x68, 0x4B, 0x6B, 0x53, 0x73, + 0x49, 0x69, 0x52, 0x72, 0x42, 0x62, 0x52, 0x72, 0x45, 0x65, 0x54, 0x74, 0x53, + 0x73, 0x4C, 0x6C, 0x4F, 0x6F, 0x45, 0x65, 0x00, 0x63, 0x43, 0x00, 0x65, 0x45, + 0x00, 0x6F, 0x4F, 0x45, 0x65, 0x52, 0x72, 0x53, 0x73, 0x54, 0x74, 0x55, 0x75, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x79, 0x77, 0x75, 0x74, 0x73, 0x72, 0x6E, 0x69, 0x68, 0x67, + 0x66, 0x65, 0x64, 0x63, 0x62, 0x61, 0x59, 0x57, 0x55, 0x54, 0x53, 0x52, 0x4E, + 0x49, 0x48, 0x47, 0x46, 0x45, 0x44, 0x43, 0x42, 0x41, 0x00, 0x2D, 0x43, 0x63, + 0x00, 0x69, 0x49, 0x00, 0x6C, 0x4C, 0x00, 0x6C, 0x4C, 0x00, 0x69, 0x49, 0x00, + 0x72, 0x52, 0x00, 0x00, 0x79, 0x70, 0x59, 0x50, 0x4F, 0x6F, 0x00, 0x72, 0x52, + 0x00, 0x75, 0x55, 0x00, 0x65, 0x45, 0x00, 0x2B, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x2D, 0x4F, 0x6F, 0x00, 0x72, 0x52, 0x00, 0x75, 0x55, 0x00, 0x65, + 0x45, 0x00, 0x2B, 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, 0x2D, 0x00, 0x00, + 0x4B, 0x6B, 0x65, 0x45, 0x4F, 0x6F, 0x00, 0x72, 0x52, 0x00, 0x75, 0x55, 0x00, + 0x65, 0x45, 0x00, 0x2B, 0x00, 0x34, 0x00, 0x38, 0x00, 0x32, 0x00, 0x2D, 0x00, + 0x73, 0x53, 0x4F, 0x6F, 0x00, 0x72, 0x52, 0x00, 0x75, 0x55, 0x00, 0x65, 0x45, + 0x00, 0x2B, 0x00, 0x38, 0x00, 0x37, 0x00, 0x32, 0x00, 0x2D, 0x4F, 0x6F, 0x00, + 0x72, 0x52, 0x00, 0x75, 0x55, 0x00, 0x65, 0x45, 0x00, 0x2B, 0x00, 0x37, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x2D, 0x00, 0x00, 0x49, 0x69, 0x72, 0x52, 0x4F, 0x6F, + 0x00, 0x72, 0x52, 0x00, 0x75, 0x55, 0x00, 0x65, 0x45, 0x00, 0x2B, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x32, 0x00, 0x2D, 0x00, 0x62, 0x42, 0x4F, 0x6F, 0x00, 0x72, + 0x52, 0x00, 0x75, 0x55, 0x00, 0x65, 0x45, 0x00, 0x2B, 0x00, 0x30, 0x00, 0x30, + 0x00, 0x35, 0x00, 0x2D, 0x00, 0x6C, 0x4C, 0x00, 0x61, 0x41, 0x00, 0x6E, 0x4E, + 0x00, 0x6F, 0x4F, 0x00, 0x69, 0x49, 0x00, 0x74, 0x54, 0x00, 0x61, 0x41, 0x00, + 0x6E, 0x4E, 0x00, 0x72, 0x52, 0x00, 0x65, 0x45, 0x00, 0x74, 0x54, 0x4F, 0x6F, + 0x00, 0x72, 0x52, 0x00, 0x75, 0x55, 0x00, 0x65, 0x45, 0x00, 0x2B, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x2D, 0x4F, 0x6F, 0x00, 0x72, 0x52, 0x00, 0x75, + 0x55, 0x00, 0x65, 0x45, 0x00, 0x2B, 0x00, 0x30, 0x00, 0x38, 0x00, 0x32, 0x00, + 0x2D, 0x00, 0x00, 0x00, 0x74, 0x73, 0x6E, 0x54, 0x53, 0x4E, 0x41, 0x61, 0x00, + 0x6E, 0x4E, 0x00, 0x61, 0x41, 0x00, 0x6B, 0x4B, 0x00, 0x2D, 0x00, 0x70, 0x50, + 0x4F, 0x6F, 0x00, 0x72, 0x52, 0x00, 0x75, 0x55, 0x00, 0x65, 0x45, 0x00, 0x2D, + 0x00, 0x2D, 0x00, 0x39, 0x00, 0x6E, 0x4E, 0x00, 0x69, 0x49, 0x00, 0x74, 0x54, + 0x00, 0x61, 0x41, 0x6F, 0x4F, 0x65, 0x45, 0x4F, 0x6F, 0x00, 0x72, 0x52, 0x00, + 0x75, 0x55, 0x00, 0x65, 0x45, 0x00, 0x2B, 0x00, 0x37, 0x00, 0x33, 0x00, 0x2D, + 0x00, 0x73, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x75, 0x73, 0x6E, 0x6C, 0x6A, 0x69, 0x67, 0x66, 0x65, 0x64, 0x63, 0x55, + 0x53, 0x4E, 0x4C, 0x4A, 0x49, 0x47, 0x46, 0x45, 0x44, 0x43, 0x00, 0x00, 0x2D, + 0x00, 0x63, 0x43, 0x00, 0x69, 0x49, 0x00, 0x64, 0x44, 0x00, 0x63, 0x43, 0x34, + 0x38, 0x00, 0x31, 0x00, 0x31, 0x00, 0x2D, 0x00, 0x61, 0x41, 0x00, 0x6D, 0x4D, + 0x38, 0x00, 0x32, 0x00, 0x39, 0x00, 0x5F, 0x00, 0x74, 0x54, 0x00, 0x6F, 0x4F, + 0x4E, 0x6E, 0x50, 0x70, 0x3E, 0x00, 0x68, 0x48, 0x00, 0x00, 0x00, 0x74, 0x6B, + 0x6A, 0x63, 0x54, 0x4B, 0x4A, 0x43, 0x00, 0x74, 0x54, 0x2D, 0x00, 0x63, 0x43, + 0x5F, 0x00, 0x72, 0x52, 0x00, 0x6F, 0x4F, 0x00, 0x66, 0x46, 0x00, 0x5F, 0x00, + 0x74, 0x54, 0x00, 0x61, 0x41, 0x00, 0x6D, 0x4D, 0x00, 0x72, 0x52, 0x00, 0x6F, + 0x4F, 0x00, 0x66, 0x46, 0x00, 0x5F, 0x00, 0x64, 0x44, 0x00, 0x65, 0x45, 0x00, + 0x6B, 0x4B, 0x00, 0x63, 0x43, 0x00, 0x61, 0x41, 0x00, 0x70, 0x50, 0x00, 0x5F, + 0x00, 0x65, 0x45, 0x00, 0x64, 0x44, 0x00, 0x6F, 0x4F, 0x00, 0x63, 0x43, 0x00, + 0x5F, 0x00, 0x78, 0x58, 0x00, 0x69, 0x49, 0x00, 0x6E, 0x4E, 0x00, 0x75, 0x55, + 0x00, 0x5F, 0x00, 0x64, 0x44, 0x00, 0x65, 0x45, 0x00, 0x64, 0x44, 0x00, 0x6E, + 0x4E, 0x00, 0x65, 0x45, 0x00, 0x74, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, + 0x75, 0x6C, 0x63, 0x62, 0x58, 0x55, 0x4C, 0x43, 0x42, 0x2D, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x4B, 0x6B, 0x5F, 0x32, 0x00, 0x38, 0x00, + 0x6B, 0x4B, 0x00, 0x65, 0x45, 0x00, 0x65, 0x45, 0x00, 0x00, 0x72, 0x62, 0x52, + 0x42, 0x2D, 0x00, 0x70, 0x65, 0x50, 0x45, 0x30, 0x33, 0x34, 0x38, 0x39, 0x00, + 0x00, 0x00, 0x39, 0x36, 0x31, 0x30, 0x00, 0x33, 0x31, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x32, 0x37, 0x35, 0x31, 0x30, 0x39, 0x35, 0x34, 0x32, 0x31, 0x31, 0x30, + 0x33, 0x36, 0x38, 0x35, 0x34, 0x30, 0x38, 0x37, 0x35, 0x39, 0x33, 0x37, 0x36, + 0x35, 0x39, 0x38, 0x30, 0x33, 0x32, 0x31, 0x34, 0x34, 0x32, 0x30, 0x33, 0x31, + 0x36, 0x35, 0x37, 0x38, 0x39, 0x30, 0x33, 0x31, 0x32, 0x36, 0x39, 0x37, 0x34, + 0x30, 0x39, 0x38, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x39, 0x38, 0x36, 0x35, 0x34, 0x33, 0x32, + 0x31, 0x30, 0x31, 0x30, 0x32, 0x00, 0x30, 0x39, 0x38, 0x37, 0x36, 0x35, 0x34, + 0x33, 0x32, 0x31, 0x30, 0x00, 0x35, 0x00, 0x00, 0x00, 0x32, 0x31, 0x30, 0x00, + 0x38, 0x36, 0x00, 0x37, 0x00, 0x00, 0x00, 0x00, 0x39, 0x34, 0x37, 0x36, 0x38, + 0x35, 0x33, 0x32, 0x31, 0x00, 0x2D, 0x00, 0x61, 0x41, 0x00, 0x6E, 0x4E, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x39, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x39, 0x38, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x30, 0x00, 0x00, 0x00, + 0x00, 0x36, 0x37, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x37, 0x36, 0x33, 0x32, 0x31, 0x30, 0x31, 0x00, 0x00, 0x39, 0x38, 0x00, + 0x00, 0x00, 0x00, 0x38, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x39, + 0x38, 0x35, 0x34, 0x32, 0x31, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, + 0x34, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x39, 0x33, 0x32, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0x33, 0x32, 0x30, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x37, 0x36, 0x35, + 0x34, 0x33, 0x00, 0x00, 0x00, 0x00, 0x34, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x34, 0x36, 0x35, 0x33, 0x32, 0x31, 0x31, 0x33, 0x38, 0x33, 0x35, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, + 0x32, 0x38, 0x37, 0x36, 0x35, 0x34, 0x33, 0x31, 0x00, 0x00, 0x38, 0x00, 0x00, + 0x00, 0x36, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, + 0x32, 0x31, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x37, 0x35, 0x33, 0x30, + 0x00, 0x00, 0x00, 0x00, 0x34, 0x31, 0x00, 0x32, 0x38, 0x00, 0x38, 0x00, 0x00, + 0x33, 0x34, 0x00, 0x00, 0x35, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, + 0x38, 0x33, 0x31, 0x30, 0x00, 0x00, 0x00, 0x00, 0x39, 0x32, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x39, 0x38, 0x37, 0x36, 0x34, 0x31, 0x00, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0x33, 0x32, 0x31, 0x30, + 0x00, 0x00, 0x36, 0x00, 0x34, 0x00, 0x00, 0x00, 0x36, 0x35, 0x00, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x35, 0x34, 0x30, 0x37, 0x00, 0x00, 0x39, 0x37, 0x38, 0x35, + 0x00, 0x00, 0x00, 0x00, 0x31, 0x30, 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, 0x00, + 0x37, 0x36, 0x33, 0x30, 0x00, 0x00, 0x36, 0x00, 0x37, 0x39, 0x00, 0x00, 0x38, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x32, 0x31, 0x00, 0x00, 0x00, 0x00, + 0x35, 0x30, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x00, 0x37, 0x36, 0x35, 0x34, + 0x00, 0x00, 0x32, 0x39, 0x33, 0x00, 0x00, 0x36, 0x00, 0x00, 0x35, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x34, 0x33, 0x32, 0x30, + 0x00, 0x00, 0x00, 0x30, 0x35, 0x33, 0x32, 0x00, 0x00, 0x33, 0x00, 0x32, 0x39, + 0x38, 0x37, 0x36, 0x34, 0x30, 0x00, 0x00, 0x35, 0x34, 0x38, 0x00, 0x37, 0x00, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0x34, + 0x33, 0x31, 0x30, 0x00, 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, 0x00, 0x31, + 0x00, 0x00, 0x34, 0x00, 0x00, 0x35, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x00, + 0x34, 0x33, 0x32, 0x31, 0x00, 0x32, 0x00, 0x00, 0x32, 0x31, 0x00, 0x00, 0x30, + 0x00, 0x00, 0x37, 0x00, 0x00, 0x37, 0x33, 0x32, 0x39, 0x33, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x37, 0x36, 0x35, 0x33, 0x37, 0x35, 0x32, + 0x31, 0x30, 0x38, 0x00, 0x00, 0x00, 0x32, 0x00, 0x39, 0x36, 0x35, 0x33, 0x32, + 0x30, 0x38, 0x34, 0x31, 0x00, 0x00, 0x31, 0x30, 0x34, 0x38, 0x35, 0x00, 0x00, + 0x31, 0x37, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x39, 0x37, 0x36, + 0x35, 0x33, 0x31, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, + 0x36, 0x00, 0x00, 0x00, 0x34, 0x36, 0x35, 0x33, 0x38, 0x36, 0x34, 0x33, 0x32, + 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x33, 0x31, 0x30, + 0x38, 0x37, 0x36, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x39, 0x38, 0x37, 0x36, + 0x35, 0x34, 0x33, 0x32, 0x30, 0x00, 0x39, 0x38, 0x37, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x39, 0x37, 0x36, 0x34, 0x32, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x39, 0x38, 0x37, + 0x36, 0x31, 0x30, 0x00, 0x00, 0x00, 0x00, 0x35, 0x34, 0x30, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x30, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x54, 0x39, + 0x38, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x30, 0x31, 0x30, 0x30, 0x37, + 0x00, 0x00, 0x33, 0x30, 0x36, 0x38, 0x37, 0x33, 0x35, 0x34, 0x30, 0x37, 0x30, + 0x00, 0x00, 0x00, 0x00, 0x39, 0x38, 0x37, 0x35, 0x30, 0x31, 0x37, 0x00, 0x00, + 0x36, 0x30, 0x34, 0x33, 0x30, 0x37, 0x00, 0x00, 0x33, 0x32, 0x30, 0x00, 0x30, + 0x30, 0x37, 0x35, 0x00, 0x00, 0x00, 0x37, 0x33, 0x32, 0x39, 0x33, 0x38, 0x33, + 0x35, 0x36, 0x37, 0x37, 0x35, 0x32, 0x31, 0x30, 0x38, 0x39, 0x36, 0x35, 0x33, + 0x32, 0x31, 0x30, 0x38, 0x34, 0x34, 0x38, 0x31, 0x30, 0x35, 0x30, 0x37, 0x31, + 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x39, 0x38, 0x37, 0x36, 0x35, + 0x33, 0x31, 0x34, 0x35, 0x33, 0x35, 0x34, 0x33, 0x32, 0x36, 0x38, 0x30, 0x33, + 0x31, 0x34, 0x32, 0x36, 0x37, 0x38, 0x30, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x33, 0x32, 0x34, 0x36, 0x37, 0x39, 0x30, 0x31, 0x36, 0x37, 0x38, + 0x39, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, + 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x39, 0x38, 0x37, 0x35, 0x34, 0x33, 0x32, 0x30, 0x38, 0x39, 0x30, + 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x36, 0x35, 0x37, 0x37, + 0x30, 0x31, 0x32, 0x33, 0x36, 0x31, 0x39, 0x38, 0x37, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x39, 0x38, 0x35, 0x34, 0x32, 0x31, 0x30, 0x32, 0x34, + 0x35, 0x32, 0x33, 0x39, 0x30, 0x32, 0x33, 0x37, 0x39, 0x38, 0x37, 0x36, 0x35, + 0x34, 0x33, 0x32, 0x31, 0x30, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x30, 0x34, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x38, + 0x33, 0x31, 0x35, 0x33, 0x30, 0x32, 0x31, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, + 0x36, 0x35, 0x30, 0x31, 0x32, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x37, + 0x35, 0x33, 0x30, 0x33, 0x34, 0x35, 0x33, 0x36, 0x33, 0x30, 0x31, 0x38, 0x32, + 0x39, 0x00, 0x00, 0x00, 0x00, 0x39, 0x38, 0x37, 0x36, 0x00, 0x00, 0x00, 0x00, + 0x33, 0x32, 0x31, 0x30, 0x36, 0x00, 0x39, 0x38, 0x31, 0x32, 0x33, 0x30, 0x35, + 0x31, 0x00, 0x00, 0x00, 0x00, 0x37, 0x36, 0x35, 0x34, 0x00, 0x00, 0x39, 0x33, + 0x36, 0x35, 0x30, 0x32, 0x33, 0x34, 0x35, 0x00, 0x00, 0x00, 0x35, 0x33, 0x32, + 0x33, 0x00, 0x32, 0x39, 0x38, 0x37, 0x36, 0x34, 0x30, 0x00, 0x00, 0x35, 0x34, + 0x38, 0x00, 0x37, 0x00, 0x00, 0x00, 0x00, 0x34, 0x33, 0x31, 0x30, 0x32, 0x00, + 0x31, 0x00, 0x36, 0x30, 0x36, 0x36, 0x00, 0x00, 0x00, 0x36, 0x35, 0x33, 0x39, + 0x38, 0x37, 0x00, 0x34, 0x00, 0x00, 0x34, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x39, 0x38, 0x35, 0x34, 0x31, 0x30, 0x38, 0x00, 0x30, 0x00, 0x37, 0x31, + 0x34, 0x00, 0x32, 0x38, 0x00, 0x38, 0x00, 0x00, 0x34, 0x31, 0x34, 0x00, 0x35, + 0x00, 0x33, 0x00, 0x00, 0x00, 0x37, 0x33, 0x32, 0x36, 0x00, 0x34, 0x00, 0x35, + 0x39, 0x00, 0x30, 0x00, 0x37, 0x00, 0x00, 0x38, 0x35, 0x32, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x33, 0x35, 0x00, 0x34, 0x00, 0x33, 0x00, 0x37, 0x32, 0x00, 0x35, + 0x00, 0x39, 0x31, 0x34, 0x35, 0x35, 0x00, 0x00, 0x00, 0x00, 0x34, 0x33, 0x32, + 0x31, 0x00, 0x32, 0x00, 0x00, 0x32, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x36, 0x35, 0x33, 0x32, 0x31, 0x30, 0x00, 0x64, 0x44, 0x00, 0x69, 0x49, 0x00, + 0x73, 0x53, 0x00, 0x63, 0x43, 0x00, 0x00, 0x00, 0x63, 0x43, 0x39, 0x38, 0x37, + 0x35, 0x34, 0x33, 0x32, 0x31, 0x30, 0x2D, 0x00, 0x6D, 0x4D, 0x32, 0x00, 0x2D, + 0x00, 0x73, 0x53, 0x00, 0x63, 0x43, 0x00, 0x75, 0x55, 0x00, 0x2D, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, 0x31, 0x00, 0x2D, 0x00, 0x6E, 0x4E, 0x00, + 0x69, 0x49, 0x00, 0x74, 0x54, 0x00, 0x61, 0x41, 0x00, 0x6C, 0x4C, 0x00, 0x2D, + 0x00, 0x31, 0x00, 0x2E, 0x00, 0x33, 0x00, 0x2D, 0x00, 0x73, 0x53, 0x00, 0x77, + 0x57, 0x00, 0x6F, 0x4F, 0x00, 0x64, 0x44, 0x00, 0x6E, 0x4E, 0x00, 0x69, 0x49, + 0x00, 0x77, 0x57, 0x00, 0x00, 0x35, 0x33, 0x2D, 0x32, 0x00, 0x2D, 0x00, 0x6E, + 0x4E, 0x00, 0x69, 0x49, 0x00, 0x74, 0x54, 0x00, 0x61, 0x41, 0x00, 0x6C, 0x4C, + 0x00, 0x2D, 0x00, 0x73, 0x53, 0x00, 0x77, 0x57, 0x00, 0x6F, 0x4F, 0x00, 0x64, + 0x44, 0x00, 0x6E, 0x4E, 0x00, 0x69, 0x49, 0x00, 0x77, 0x57, 0x00, 0x00, 0x2D, + 0x00, 0x00, 0x36, 0x37, 0x38, 0x39, 0x34, 0x33, 0x35, 0x32, 0x31, 0x00, 0x2D, + 0x00, 0x39, 0x00, 0x35, 0x00, 0x38, 0x30, 0x39, 0x31, 0x30, 0x37, 0x36, 0x38, + 0x38, 0x39, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x34, 0x32, 0x31, 0x30, + 0x00, 0x36, 0x35, 0x31, 0x00, 0x2D, 0x00, 0x72, 0x52, 0x00, 0x00, 0x00, 0x69, + 0x49, 0x38, 0x31, 0x53, 0x73, 0x00, 0x75, 0x55, 0x00, 0x2D, 0x00, 0x36, 0x00, + 0x34, 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, 0x31, 0x00, 0x3A, 0x00, 0x76, 0x56, + 0x00, 0x72, 0x52, 0x00, 0x69, 0x49, 0x00, 0x2E, 0x00, 0x36, 0x00, 0x34, 0x37, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x31, 0x00, 0x00, 0x35, 0x3A, 0x37, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x31, 0x00, 0x00, 0x3A, 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x31, 0x00, 0x00, 0x3A, 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, 0x31, 0x00, 0x00, + 0x3A, 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, 0x31, 0x00, 0x00, 0x3A, 0x37, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x31, 0x00, 0x00, 0x3A, 0x37, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x31, 0x00, 0x00, 0x3A, 0x38, 0x00, 0x39, 0x00, 0x31, 0x00, 0x00, 0x3A, + 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, 0x31, 0x00, 0x00, 0x3A, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x39, 0x38, 0x37, 0x36, 0x35, 0x34, 0x33, + 0x32, 0x31, 0x00, 0x2D, 0x00, 0x39, 0x00, 0x35, 0x00, 0x38, 0x00, 0x00, 0x38, + 0x36, 0x00, 0x00, 0x00, 0x5F, 0x36, 0x2D, 0x00, 0x6F, 0x4F, 0x00, 0x00, 0x00, + 0x73, 0x62, 0x61, 0x53, 0x42, 0x41, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x58, 0x78, 0x00, 0x5F, 0x00, 0x73, 0x53, 0x00, 0x69, 0x49, 0x2D, 0x00, + 0x38, 0x4E, 0x6E, 0x00, 0x61, 0x41, 0x00, 0x65, 0x45, 0x00, 0x00, 0x72, 0x69, + 0x52, 0x49, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, 0x5F, 0x39, 0x37, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x31, 0x00, 0x2D, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x5F, 0x00, 0x63, 0x43, 0x00, 0x00, 0x63, 0x5F, 0x43, + 0x00, 0x00, 0x73, 0x6F, 0x53, 0x4F, 0x39, 0x00, 0x31, 0x35, 0x34, 0x33, 0x32, + 0x2D, 0x00, 0x6E, 0x4E, 0x00, 0x69, 0x49, 0x00, 0x74, 0x54, 0x00, 0x61, 0x41, + 0x35, 0x34, 0x33, 0x32, 0x31, 0x33, 0x49, 0x69, 0x00, 0x6A, 0x4A, 0x00, 0x6E, + 0x4E, 0x00, 0x61, 0x41, 0x00, 0x6B, 0x4B, 0x00, 0x00, 0x39, 0x5F, 0x00, 0x73, + 0x53, 0x6F, 0x4F, 0x00, 0x72, 0x52, 0x00, 0x75, 0x55, 0x00, 0x65, 0x45, 0x00, + 0x2B, 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, 0x2D, 0x00, 0x6C, 0x4C, 0x00, + 0x61, 0x41, 0x00, 0x75, 0x55, 0x00, 0x67, 0x47, 0x00, 0x6E, 0x4E, 0x00, 0x69, + 0x49, 0x00, 0x6C, 0x4C, 0x00, 0x69, 0x49, 0x00, 0x74, 0x54, 0x00, 0x6C, 0x4C, + 0x00, 0x75, 0x55, 0x00, 0x6D, 0x4D, 0x00, 0x2D, 0x00, 0x63, 0x43, 0x6F, 0x4F, + 0x38, 0x5F, 0x00, 0x74, 0x54, 0x00, 0x66, 0x46, 0x00, 0x69, 0x49, 0x00, 0x68, + 0x48, 0x2D, 0x00, 0x73, 0x53, 0x00, 0x69, 0x49, 0x32, 0x2D, 0x00, 0x73, 0x53, + 0x73, 0x53, 0x00, 0x61, 0x41, 0x00, 0x00, 0x2D, 0x6C, 0x62, 0x4C, 0x42, 0x2D, + 0x00, 0x36, 0x6C, 0x62, 0x4C, 0x42, 0x2D, 0x00, 0x32, 0x00, 0x00, 0x38, 0x33, + 0x31, 0x00, 0x38, 0x33, 0x31, 0x2D, 0x00, 0x66, 0x46, 0x00, 0x00, 0x00, 0x74, + 0x73, 0x63, 0x54, 0x53, 0x43, 0x39, 0x31, 0x00, 0x2D, 0x00, 0x73, 0x53, 0x00, + 0x77, 0x57, 0x00, 0x6F, 0x4F, 0x00, 0x64, 0x44, 0x00, 0x6E, 0x4E, 0x00, 0x69, + 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0x42, 0x28, 0x1B, 0x33, 0x42, 0x28, + 0x30, 0x31, 0x32, 0x35, 0x37, 0x42, 0x28, 0x30, 0x31, 0x32, 0x33, 0x35, 0x36, + 0x39, 0x42, 0x28, 0x1B, 0x1B, 0x35, 0x36, 0x42, 0x28, 0x34, 0x42, 0x28, 0x1B, + 0x30, 0x42, 0x28, 0x47, 0x67, 0x42, 0x28, 0x1B, 0x6E, 0x4E, 0x42, 0x28, 0x1B, + 0x69, 0x49, 0x42, 0x28, 0x1B, 0x64, 0x44, 0x42, 0x28, 0x1B, 0x6F, 0x4F, 0x42, + 0x28, 0x1B, 0x63, 0x43, 0x42, 0x28, 0x1B, 0x6E, 0x4E, 0x42, 0x28, 0x1B, 0x65, + 0x45, 0x42, 0x28, 0x1B, 0x2D, 0x42, 0x28, 0x1B, 0x64, 0x44, 0x42, 0x28, 0x1B, + 0x72, 0x52, 0x42, 0x28, 0x1B, 0x61, 0x41, 0x42, 0x28, 0x1B, 0x64, 0x44, 0x42, + 0x28, 0x1B, 0x6E, 0x4E, 0x42, 0x28, 0x1B, 0x61, 0x41, 0x42, 0x28, 0x1B, 0x74, + 0x54, 0x42, 0x28, 0x1B, 0x73, 0x53, 0x42, 0x28, 0x1B, 0x2D, 0x42, 0x28, 0x1B, + 0x65, 0x45, 0x42, 0x28, 0x1B, 0x62, 0x42, 0x42, 0x28, 0x1B, 0x6F, 0x4F, 0x42, + 0x28, 0x38, 0x42, 0x28, 0x36, 0x42, 0x28, 0x1B, 0x1B, 0x38, 0x36, 0x42, 0x28, + 0x1B, 0x39, 0x42, 0x28, 0x1B, 0x31, 0x42, 0x28, 0x1B, 0x2D, 0x42, 0x28, 0x1B, + 0x34, 0x42, 0x28, 0x1B, 0x2E, 0x42, 0x28, 0x1B, 0x33, 0x42, 0x28, 0x1B, 0x78, + 0x58, 0x42, 0x28, 0x1B, 0x5F, 0x42, 0x28, 0x1B, 0x69, 0x49, 0x42, 0x28, 0x1B, + 0x73, 0x53, 0x42, 0x28, 0x43, 0x63, 0x42, 0x28, 0x1B, 0x69, 0x49, 0x42, 0x28, + 0x1B, 0x62, 0x42, 0x42, 0x28, 0x1B, 0x61, 0x41, 0x42, 0x28, 0x49, 0x69, 0x42, + 0x28, 0x1B, 0x69, 0x49, 0x42, 0x28, 0x38, 0x42, 0x28, 0x1B, 0x30, 0x42, 0x28, + 0x1B, 0x37, 0x42, 0x28, 0x1B, 0x2D, 0x42, 0x28, 0x1B, 0x6F, 0x4F, 0x42, 0x28, + 0x1B, 0x1B, 0x43, 0x63, 0x6D, 0x4D, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x52, + 0x72, 0x73, 0x6E, 0x64, 0x53, 0x4E, 0x44, 0x42, 0x28, 0x53, 0x73, 0x42, 0x28, + 0x1B, 0x63, 0x43, 0x42, 0x28, 0x1B, 0x73, 0x53, 0x42, 0x28, 0x1B, 0x6B, 0x4B, + 0x42, 0x28, 0x1B, 0x68, 0x48, 0x42, 0x28, 0x1B, 0x2D, 0x42, 0x28, 0x1B, 0x35, + 0x42, 0x28, 0x1B, 0x67, 0x47, 0x42, 0x28, 0x1B, 0x69, 0x49, 0x42, 0x28, 0x38, + 0x42, 0x28, 0x1B, 0x35, 0x42, 0x28, 0x34, 0x42, 0x28, 0x1B, 0x32, 0x42, 0x28, + 0x1B, 0x1B, 0x39, 0x38, 0x42, 0x28, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, + 0x37, 0x38, 0x39, 0x42, 0x28, 0x1B, 0x34, 0x42, 0x28, 0x1B, 0x31, 0x42, 0x28, + 0x1B, 0x1B, 0x31, 0x30, 0x42, 0x28, 0x1B, 0x30, 0x42, 0x28, 0x1B, 0x64, 0x44, + 0x42, 0x28, 0x1B, 0x69, 0x49, 0x42, 0x28, 0x1B, 0x73, 0x53, 0x42, 0x28, 0x45, + 0x65, 0x42, 0x28, 0x1B, 0x73, 0x53, 0x42, 0x28, 0x1B, 0x65, 0x45, 0x42, 0x28, + 0x1B, 0x6E, 0x4E, 0x42, 0x28, 0x1B, 0x69, 0x49, 0x42, 0x28, 0x52, 0x72, 0x42, + 0x28, 0x52, 0x72, 0x42, 0x28, 0x53, 0x73, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x69, + 0x67, 0x61, 0x49, 0x47, 0x41, 0x42, 0x28, 0x37, 0x42, 0x28, 0x1B, 0x33, 0x31, + 0x30, 0x42, 0x28, 0x36, 0x42, 0x28, 0x1B, 0x32, 0x42, 0x28, 0x1B, 0x30, 0x42, + 0x28, 0x33, 0x38, 0x42, 0x28, 0x30, 0x34, 0x35, 0x42, 0x28, 0x30, 0x37, 0x42, + 0x28, 0x1B, 0x1B, 0x1B, 0x39, 0x38, 0x37, 0x42, 0x28, 0x37, 0x42, 0x28, 0x1B, + 0x36, 0x42, 0x28, 0x30, 0x33, 0x34, 0x42, 0x28, 0x1B, 0x33, 0x32, 0x42, 0x28, + 0x30, 0x42, 0x28, 0x1B, 0x30, 0x42, 0x28, 0x35, 0x42, 0x28, 0x1B, 0x37, 0x42, + 0x28, 0x39, 0x42, 0x28, 0x30, 0x31, 0x32, 0x33, 0x35, 0x36, 0x39, 0x38, 0x34, + 0x42, 0x28, 0x30, 0x31, 0x42, 0x28, 0x30, 0x42, 0x28, 0x31, 0x42, 0x28, 0x1B, + 0x1B, 0x1B, 0x1B, 0x1B, 0x39, 0x38, 0x37, 0x36, 0x35, 0x31, 0x42, 0x28, 0x34, + 0x33, 0x35, 0x42, 0x28, 0x38, 0x42, 0x28, 0x36, 0x42, 0x28, 0x1B, 0x1B, 0x1B, + 0x33, 0x31, 0x30, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, + 0x1B, 0x1B, 0x38, 0x37, 0x35, 0x34, 0x33, 0x30, 0x39, 0x32, 0x31, 0x2D, 0x42, + 0x28, 0x64, 0x44, 0x42, 0x28, 0x1B, 0x72, 0x52, 0x42, 0x28, 0x1B, 0x61, 0x41, + 0x42, 0x28, 0x1B, 0x64, 0x44, 0x42, 0x28, 0x1B, 0x6E, 0x4E, 0x42, 0x28, 0x1B, + 0x61, 0x41, 0x42, 0x28, 0x1B, 0x74, 0x54, 0x42, 0x28, 0x1B, 0x73, 0x53, 0x42, + 0x28, 0x1B, 0x65, 0x45, 0x42, 0x28, 0x1B, 0x62, 0x42, 0x42, 0x28, 0x1B, 0x6F, + 0x4F, 0x42, 0x28, 0x63, 0x43, 0x42, 0x28, 0x1B, 0x1B, 0x53, 0x73, 0x64, 0x44, + 0x42, 0x28, 0x35, 0x42, 0x28, 0x1B, 0x67, 0x47, 0x42, 0x28, 0x1B, 0x69, 0x49, + 0x42, 0x28, 0x52, 0x72, 0x42, 0x28, 0x45, 0x65, 0x42, 0x28, 0x1B, 0x73, 0x53, + 0x42, 0x28, 0x1B, 0x65, 0x45, 0x42, 0x28, 0x1B, 0x6E, 0x4E, 0x42, 0x28, 0x1B, + 0x61, 0x41, 0x42, 0x28, 0x1B, 0x70, 0x50, 0x42, 0x28, 0x1B, 0x61, 0x41, 0x42, + 0x28, 0x1B, 0x6A, 0x4A, 0x42, 0x28, 0x1B, 0x54, 0x74, 0x42, 0x28, 0x1B, 0x6D, + 0x4D, 0x42, 0x28, 0x1B, 0x66, 0x46, 0x42, 0x28, 0x1B, 0x64, 0x44, 0x42, 0x28, + 0x1B, 0x6B, 0x4B, 0x42, 0x28, 0x48, 0x68, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x54, + 0x74, 0x4B, 0x6B, 0x70, 0x50, 0x42, 0x28, 0x1B, 0x63, 0x43, 0x42, 0x28, 0x1B, + 0x75, 0x55, 0x42, 0x28, 0x32, 0x42, 0x28, 0x1B, 0x31, 0x42, 0x28, 0x1B, 0x33, + 0x42, 0x28, 0x1B, 0x4B, 0x6B, 0x32, 0x42, 0x28, 0x1B, 0x62, 0x42, 0x42, 0x28, + 0x41, 0x61, 0x42, 0x28, 0x1B, 0x6E, 0x4E, 0x42, 0x28, 0x1B, 0x61, 0x41, 0x42, + 0x28, 0x1B, 0x6B, 0x4B, 0x42, 0x28, 0x1B, 0x61, 0x41, 0x42, 0x28, 0x1B, 0x74, + 0x54, 0x42, 0x28, 0x1B, 0x61, 0x41, 0x42, 0x28, 0x1B, 0x6B, 0x4B, 0x42, 0x28, + 0x1B, 0x68, 0x48, 0x42, 0x28, 0x1B, 0x74, 0x54, 0x42, 0x28, 0x1B, 0x64, 0x44, + 0x42, 0x28, 0x1B, 0x69, 0x49, 0x42, 0x28, 0x1B, 0x77, 0x57, 0x42, 0x28, 0x1B, + 0x66, 0x46, 0x42, 0x28, 0x1B, 0x6C, 0x4C, 0x42, 0x28, 0x38, 0x42, 0x28, 0x1B, + 0x6E, 0x4E, 0x42, 0x28, 0x1B, 0x61, 0x41, 0x42, 0x28, 0x1B, 0x6D, 0x4D, 0x42, + 0x28, 0x1B, 0x4F, 0x6F, 0x42, 0x28, 0x1B, 0x72, 0x52, 0x42, 0x28, 0x1B, 0x1B, + 0x50, 0x70, 0x61, 0x41, 0x42, 0x28, 0x1B, 0x39, 0x42, 0x28, 0x1B, 0x6D, 0x4D, + 0x42, 0x28, 0x37, 0x42, 0x28, 0x1B, 0x34, 0x32, 0x42, 0x28, 0x1B, 0x30, 0x42, + 0x28, 0x33, 0x38, 0x37, 0x42, 0x28, 0x1B, 0x39, 0x38, 0x37, 0x42, 0x28, 0x32, + 0x42, 0x28, 0x31, 0x35, 0x37, 0x42, 0x28, 0x30, 0x31, 0x33, 0x35, 0x36, 0x39, + 0x38, 0x34, 0x42, 0x28, 0x1B, 0x1B, 0x39, 0x38, 0x37, 0x36, 0x35, 0x42, 0x28, + 0x33, 0x35, 0x42, 0x28, 0x1B, 0x31, 0x30, 0x42, 0x28, 0x49, 0x69, 0x42, 0x28, + 0x1B, 0x61, 0x41, 0x42, 0x28, 0x1B, 0x68, 0x48, 0x42, 0x28, 0x1B, 0x1B, 0x1B, + 0x1B, 0x1B, 0x1B, 0x35, 0x30, 0x54, 0x74, 0x32, 0x31, 0x39, 0x38, 0x34, 0x42, + 0x28, 0x1B, 0x1B, 0x6D, 0x62, 0x4D, 0x42, 0x42, 0x28, 0x30, 0x42, 0x28, 0x1B, + 0x38, 0x42, 0x28, 0x1B, 0x32, 0x42, 0x28, 0x1B, 0x31, 0x42, 0x28, 0x1B, 0x33, + 0x42, 0x28, 0x1B, 0x32, 0x42, 0x28, 0x1B, 0x62, 0x42, 0x42, 0x28, 0x1B, 0x67, + 0x47, 0x42, 0x28, 0x1B, 0x38, 0x42, 0x28, 0x33, 0x35, 0x42, 0x28, 0x1B, 0x31, + 0x42, 0x28, 0x1B, 0x39, 0x42, 0x28, 0x1B, 0x35, 0x42, 0x28, 0x1B, 0x38, 0x42, + 0x28, 0x72, 0x52, 0x42, 0x28, 0x43, 0x63, 0x42, 0x28, 0x1B, 0x69, 0x49, 0x42, + 0x28, 0x1B, 0x6C, 0x4C, 0x42, 0x28, 0x1B, 0x6C, 0x4C, 0x42, 0x28, 0x1B, 0x69, + 0x49, 0x42, 0x28, 0x1B, 0x72, 0x52, 0x42, 0x28, 0x1B, 0x79, 0x59, 0x42, 0x28, + 0x4B, 0x6B, 0x42, 0x28, 0x1B, 0x65, 0x45, 0x42, 0x28, 0x1B, 0x65, 0x45, 0x42, + 0x28, 0x1B, 0x72, 0x52, 0x42, 0x28, 0x57, 0x77, 0x42, 0x28, 0x1B, 0x65, 0x45, + 0x42, 0x28, 0x1B, 0x72, 0x52, 0x42, 0x28, 0x1B, 0x62, 0x42, 0x42, 0x28, 0x1B, + 0x45, 0x65, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x31, 0x32, 0x33, 0x34, 0x35, + 0x68, 0x67, 0x63, 0x61, 0x48, 0x47, 0x43, 0x41, 0x42, 0x28, 0x1B, 0x6E, 0x4E, + 0x42, 0x28, 0x1B, 0x69, 0x49, 0x42, 0x28, 0x1B, 0x74, 0x54, 0x42, 0x28, 0x1B, + 0x61, 0x41, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x6C, 0x4C, 0x38, 0x35, 0x42, 0x28, + 0x1B, 0x6F, 0x4F, 0x42, 0x28, 0x1B, 0x1B, 0x73, 0x62, 0x53, 0x42, 0x42, 0x28, + 0x52, 0x72, 0x42, 0x28, 0x1B, 0x38, 0x42, 0x28, 0x1B, 0x69, 0x49, 0x42, 0x28, + 0x37, 0x42, 0x28, 0x1B, 0x38, 0x42, 0x28, 0x1B, 0x39, 0x42, 0x28, 0x1B, 0x31, + 0x42, 0x28, 0x1B, 0x31, 0x42, 0x28, 0x1B, 0x30, 0x42, 0x28, 0x1B, 0x36, 0x42, + 0x28, 0x1B, 0x35, 0x42, 0x28, 0x1B, 0x63, 0x43, 0x42, 0x28, 0x1B, 0x1B, 0x73, + 0x6F, 0x53, 0x4F, 0x42, 0x28, 0x43, 0x63, 0x42, 0x28, 0x1B, 0x69, 0x49, 0x42, + 0x28, 0x1B, 0x74, 0x54, 0x42, 0x28, 0x1B, 0x6C, 0x4C, 0x42, 0x28, 0x1B, 0x61, + 0x41, 0x42, 0x28, 0x1B, 0x62, 0x42, 0x42, 0x28, 0x1B, 0x35, 0x42, 0x28, 0x1B, + 0x37, 0x42, 0x28, 0x4C, 0x6C, 0x42, 0x28, 0x1B, 0x61, 0x41, 0x42, 0x28, 0x1B, + 0x75, 0x55, 0x42, 0x28, 0x1B, 0x67, 0x47, 0x42, 0x28, 0x1B, 0x6E, 0x4E, 0x42, + 0x28, 0x1B, 0x69, 0x49, 0x42, 0x28, 0x1B, 0x6C, 0x4C, 0x42, 0x28, 0x1B, 0x69, + 0x49, 0x42, 0x28, 0x1B, 0x74, 0x54, 0x42, 0x28, 0x1B, 0x6C, 0x4C, 0x42, 0x28, + 0x1B, 0x75, 0x55, 0x42, 0x28, 0x1B, 0x6D, 0x4D, 0x42, 0x28, 0x1B, 0x30, 0x42, + 0x28, 0x57, 0x77, 0x42, 0x28, 0x1B, 0x65, 0x45, 0x42, 0x28, 0x1B, 0x72, 0x52, + 0x42, 0x28, 0x1B, 0x62, 0x42, 0x42, 0x28, 0x1B, 0x65, 0x45, 0x42, 0x28, 0x1B, + 0x68, 0x48, 0x42, 0x28, 0x1B, 0x6E, 0x4E, 0x42, 0x28, 0x1B, 0x69, 0x49, 0x42, + 0x28, 0x1B, 0x74, 0x54, 0x42, 0x28, 0x1B, 0x61, 0x41, 0x42, 0x28, 0x1B, 0x6C, + 0x4C, 0x42, 0x28, 0x1B, 0x32, 0x42, 0x28, 0x1B, 0x34, 0x42, 0x28, 0x1B, 0x65, + 0x45, 0x42, 0x28, 0x1B, 0x67, 0x47, 0x42, 0x28, 0x1B, 0x61, 0x41, 0x42, 0x28, + 0x1B, 0x70, 0x50, 0x42, 0x28, 0x1B, 0x65, 0x45, 0x42, 0x28, 0x1B, 0x64, 0x44, + 0x42, 0x28, 0x1B, 0x6F, 0x4F, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x63, 0x43, 0x36, + 0x35, 0x42, 0x28, 0x32, 0x42, 0x28, 0x1B, 0x35, 0x42, 0x28, 0x1B, 0x38, 0x42, + 0x28, 0x1B, 0x1B, 0x1B, 0x70, 0x50, 0x38, 0x37, 0x42, 0x28, 0x1B, 0x63, 0x43, + 0x42, 0x28, 0x53, 0x73, 0x42, 0x28, 0x1B, 0x69, 0x49, 0x42, 0x28, 0x1B, 0x6A, + 0x4A, 0x42, 0x28, 0x1B, 0x54, 0x74, 0x42, 0x28, 0x1B, 0x66, 0x46, 0x42, 0x28, + 0x1B, 0x69, 0x49, 0x42, 0x28, 0x1B, 0x68, 0x48, 0x42, 0x28, 0x30, 0x42, 0x28, + 0x1B, 0x32, 0x42, 0x28, 0x1B, 0x36, 0x42, 0x28, 0x1B, 0x53, 0x73, 0x42, 0x28, + 0x1B, 0x69, 0x49, 0x42, 0x28, 0x45, 0x65, 0x42, 0x28, 0x1B, 0x64, 0x44, 0x42, + 0x28, 0x1B, 0x6F, 0x4F, 0x42, 0x28, 0x1B, 0x63, 0x43, 0x42, 0x28, 0x1B, 0x69, + 0x49, 0x42, 0x28, 0x45, 0x65, 0x42, 0x28, 0x45, 0x65, 0x42, 0x28, 0x1B, 0x1B, + 0x4C, 0x6C, 0x42, 0x62, 0x42, 0x28, 0x1B, 0x36, 0x42, 0x28, 0x45, 0x65, 0x42, + 0x28, 0x45, 0x65, 0x42, 0x28, 0x1B, 0x1B, 0x4C, 0x6C, 0x42, 0x62, 0x42, 0x28, + 0x1B, 0x32, 0x42, 0x28, 0x1B, 0x1B, 0x38, 0x33, 0x31, 0x42, 0x28, 0x1B, 0x66, + 0x46, 0x42, 0x28, 0x1B, 0x1B, 0x74, 0x6E, 0x54, 0x4E, 0x42, 0x28, 0x30, 0x31, + 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x42, 0x28, 0x1B, 0x35, 0x42, 0x28, + 0x1B, 0x32, 0x42, 0x28, 0x31, 0x32, 0x42, 0x28, 0x1B, 0x6E, 0x4E, 0x42, 0x28, + 0x1B, 0x69, 0x49, 0x42, 0x28, 0x1B, 0x74, 0x54, 0x42, 0x28, 0x1B, 0x61, 0x41, + 0x42, 0x28, 0x1B, 0x6C, 0x4C, 0x42, 0x28, 0x1B, 0x31, 0x42, 0x28, 0x1B, 0x1B, + 0x31, 0x33, 0x42, 0x28, 0x1B, 0x73, 0x53, 0x42, 0x28, 0x1B, 0x77, 0x57, 0x42, + 0x28, 0x1B, 0x6F, 0x4F, 0x42, 0x28, 0x1B, 0x64, 0x44, 0x42, 0x28, 0x1B, 0x6E, + 0x4E, 0x42, 0x28, 0x1B, 0x69, 0x49, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, + 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x77, 0x75, 0x74, 0x73, 0x70, 0x6B, + 0x69, 0x68, 0x67, 0x65, 0x62, 0x61, 0x57, 0x55, 0x54, 0x53, 0x50, 0x4B, 0x49, + 0x48, 0x47, 0x45, 0x42, 0x41, 0x42, 0x28, 0x43, 0x63, 0x42, 0x28, 0x1B, 0x69, + 0x49, 0x42, 0x28, 0x1B, 0x6C, 0x4C, 0x42, 0x28, 0x1B, 0x6C, 0x4C, 0x42, 0x28, + 0x1B, 0x69, 0x49, 0x42, 0x28, 0x1B, 0x72, 0x52, 0x42, 0x28, 0x1B, 0x1B, 0x1B, + 0x1B, 0x1B, 0x79, 0x73, 0x70, 0x68, 0x63, 0x59, 0x53, 0x50, 0x48, 0x43, 0x42, + 0x28, 0x31, 0x32, 0x42, 0x28, 0x1B, 0x72, 0x52, 0x42, 0x28, 0x45, 0x65, 0x42, + 0x28, 0x41, 0x61, 0x48, 0x68, 0x42, 0x28, 0x4B, 0x6B, 0x42, 0x28, 0x53, 0x73, + 0x42, 0x28, 0x49, 0x69, 0x52, 0x72, 0x42, 0x28, 0x42, 0x62, 0x52, 0x72, 0x42, + 0x28, 0x45, 0x65, 0x42, 0x28, 0x54, 0x74, 0x53, 0x73, 0x42, 0x28, 0x4C, 0x6C, + 0x4F, 0x6F, 0x42, 0x28, 0x45, 0x65, 0x42, 0x28, 0x1B, 0x63, 0x43, 0x42, 0x28, + 0x1B, 0x65, 0x45, 0x42, 0x28, 0x1B, 0x6F, 0x4F, 0x42, 0x28, 0x45, 0x65, 0x42, + 0x28, 0x52, 0x72, 0x42, 0x28, 0x53, 0x73, 0x42, 0x28, 0x54, 0x74, 0x42, 0x28, + 0x55, 0x75, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, + 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x79, 0x77, 0x75, 0x74, 0x73, 0x72, + 0x6E, 0x69, 0x68, 0x67, 0x66, 0x65, 0x64, 0x63, 0x62, 0x61, 0x59, 0x57, 0x55, + 0x54, 0x53, 0x52, 0x4E, 0x49, 0x48, 0x47, 0x46, 0x45, 0x44, 0x43, 0x42, 0x41, + 0x42, 0x28, 0x1B, 0x2D, 0x42, 0x28, 0x43, 0x63, 0x42, 0x28, 0x1B, 0x69, 0x49, + 0x42, 0x28, 0x1B, 0x6C, 0x4C, 0x42, 0x28, 0x1B, 0x6C, 0x4C, 0x42, 0x28, 0x1B, + 0x69, 0x49, 0x42, 0x28, 0x1B, 0x72, 0x52, 0x42, 0x28, 0x1B, 0x1B, 0x79, 0x70, + 0x59, 0x50, 0x42, 0x28, 0x4F, 0x6F, 0x42, 0x28, 0x1B, 0x72, 0x52, 0x42, 0x28, + 0x1B, 0x75, 0x55, 0x42, 0x28, 0x1B, 0x65, 0x45, 0x42, 0x28, 0x1B, 0x2B, 0x42, + 0x28, 0x1B, 0x33, 0x42, 0x28, 0x1B, 0x37, 0x42, 0x28, 0x1B, 0x32, 0x42, 0x28, + 0x1B, 0x2D, 0x42, 0x28, 0x4F, 0x6F, 0x42, 0x28, 0x1B, 0x72, 0x52, 0x42, 0x28, + 0x1B, 0x75, 0x55, 0x42, 0x28, 0x1B, 0x65, 0x45, 0x42, 0x28, 0x1B, 0x2B, 0x42, + 0x28, 0x1B, 0x37, 0x42, 0x28, 0x1B, 0x37, 0x42, 0x28, 0x1B, 0x32, 0x42, 0x28, + 0x1B, 0x2D, 0x42, 0x28, 0x1B, 0x1B, 0x4B, 0x6B, 0x65, 0x45, 0x42, 0x28, 0x4F, + 0x6F, 0x42, 0x28, 0x1B, 0x72, 0x52, 0x42, 0x28, 0x1B, 0x75, 0x55, 0x42, 0x28, + 0x1B, 0x65, 0x45, 0x42, 0x28, 0x1B, 0x2B, 0x42, 0x28, 0x1B, 0x34, 0x42, 0x28, + 0x1B, 0x38, 0x42, 0x28, 0x1B, 0x32, 0x42, 0x28, 0x1B, 0x2D, 0x42, 0x28, 0x1B, + 0x73, 0x53, 0x42, 0x28, 0x4F, 0x6F, 0x42, 0x28, 0x1B, 0x72, 0x52, 0x42, 0x28, + 0x1B, 0x75, 0x55, 0x42, 0x28, 0x1B, 0x65, 0x45, 0x42, 0x28, 0x1B, 0x2B, 0x42, + 0x28, 0x1B, 0x38, 0x42, 0x28, 0x1B, 0x37, 0x42, 0x28, 0x1B, 0x32, 0x42, 0x28, + 0x1B, 0x2D, 0x42, 0x28, 0x4F, 0x6F, 0x42, 0x28, 0x1B, 0x72, 0x52, 0x42, 0x28, + 0x1B, 0x75, 0x55, 0x42, 0x28, 0x1B, 0x65, 0x45, 0x42, 0x28, 0x1B, 0x2B, 0x42, + 0x28, 0x1B, 0x37, 0x42, 0x28, 0x1B, 0x39, 0x42, 0x28, 0x1B, 0x32, 0x42, 0x28, + 0x1B, 0x2D, 0x42, 0x28, 0x1B, 0x1B, 0x49, 0x69, 0x72, 0x52, 0x42, 0x28, 0x4F, + 0x6F, 0x42, 0x28, 0x1B, 0x72, 0x52, 0x42, 0x28, 0x1B, 0x75, 0x55, 0x42, 0x28, + 0x1B, 0x65, 0x45, 0x42, 0x28, 0x1B, 0x2B, 0x42, 0x28, 0x1B, 0x35, 0x42, 0x28, + 0x1B, 0x38, 0x42, 0x28, 0x1B, 0x32, 0x42, 0x28, 0x1B, 0x2D, 0x42, 0x28, 0x1B, + 0x62, 0x42, 0x42, 0x28, 0x4F, 0x6F, 0x42, 0x28, 0x1B, 0x72, 0x52, 0x42, 0x28, + 0x1B, 0x75, 0x55, 0x42, 0x28, 0x1B, 0x65, 0x45, 0x42, 0x28, 0x1B, 0x2B, 0x42, + 0x28, 0x1B, 0x30, 0x42, 0x28, 0x1B, 0x30, 0x42, 0x28, 0x1B, 0x35, 0x42, 0x28, + 0x1B, 0x2D, 0x42, 0x28, 0x1B, 0x6C, 0x4C, 0x42, 0x28, 0x1B, 0x61, 0x41, 0x42, + 0x28, 0x1B, 0x6E, 0x4E, 0x42, 0x28, 0x1B, 0x6F, 0x4F, 0x42, 0x28, 0x1B, 0x69, + 0x49, 0x42, 0x28, 0x1B, 0x74, 0x54, 0x42, 0x28, 0x1B, 0x61, 0x41, 0x42, 0x28, + 0x1B, 0x6E, 0x4E, 0x42, 0x28, 0x1B, 0x72, 0x52, 0x42, 0x28, 0x1B, 0x65, 0x45, + 0x42, 0x28, 0x1B, 0x74, 0x54, 0x42, 0x28, 0x4F, 0x6F, 0x42, 0x28, 0x1B, 0x72, + 0x52, 0x42, 0x28, 0x1B, 0x75, 0x55, 0x42, 0x28, 0x1B, 0x65, 0x45, 0x42, 0x28, + 0x1B, 0x2B, 0x42, 0x28, 0x1B, 0x31, 0x42, 0x28, 0x1B, 0x37, 0x42, 0x28, 0x1B, + 0x38, 0x42, 0x28, 0x1B, 0x2D, 0x42, 0x28, 0x4F, 0x6F, 0x42, 0x28, 0x1B, 0x72, + 0x52, 0x42, 0x28, 0x1B, 0x75, 0x55, 0x42, 0x28, 0x1B, 0x65, 0x45, 0x42, 0x28, + 0x1B, 0x2B, 0x42, 0x28, 0x1B, 0x30, 0x42, 0x28, 0x1B, 0x38, 0x42, 0x28, 0x1B, + 0x32, 0x42, 0x28, 0x1B, 0x2D, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x74, 0x73, 0x6E, + 0x54, 0x53, 0x4E, 0x42, 0x28, 0x41, 0x61, 0x42, 0x28, 0x1B, 0x6E, 0x4E, 0x42, + 0x28, 0x1B, 0x61, 0x41, 0x42, 0x28, 0x1B, 0x6B, 0x4B, 0x42, 0x28, 0x1B, 0x2D, + 0x42, 0x28, 0x1B, 0x70, 0x50, 0x42, 0x28, 0x4F, 0x6F, 0x42, 0x28, 0x1B, 0x72, + 0x52, 0x42, 0x28, 0x1B, 0x75, 0x55, 0x42, 0x28, 0x1B, 0x65, 0x45, 0x42, 0x28, + 0x1B, 0x2D, 0x42, 0x28, 0x1B, 0x2D, 0x42, 0x28, 0x1B, 0x39, 0x42, 0x28, 0x1B, + 0x6E, 0x4E, 0x42, 0x28, 0x1B, 0x69, 0x49, 0x42, 0x28, 0x1B, 0x74, 0x54, 0x42, + 0x28, 0x1B, 0x61, 0x41, 0x42, 0x28, 0x6F, 0x4F, 0x42, 0x28, 0x65, 0x45, 0x42, + 0x28, 0x4F, 0x6F, 0x42, 0x28, 0x1B, 0x72, 0x52, 0x42, 0x28, 0x1B, 0x75, 0x55, + 0x42, 0x28, 0x1B, 0x65, 0x45, 0x42, 0x28, 0x1B, 0x2B, 0x42, 0x28, 0x1B, 0x37, + 0x42, 0x28, 0x1B, 0x33, 0x42, 0x28, 0x1B, 0x2D, 0x42, 0x28, 0x1B, 0x73, 0x53, + 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, + 0x75, 0x73, 0x6E, 0x6C, 0x6A, 0x69, 0x67, 0x66, 0x65, 0x64, 0x63, 0x55, 0x53, + 0x4E, 0x4C, 0x4A, 0x49, 0x47, 0x46, 0x45, 0x44, 0x43, 0x42, 0x28, 0x1B, 0x2D, + 0x42, 0x28, 0x00, 0x1B, 0x63, 0x43, 0x42, 0x28, 0x1B, 0x69, 0x49, 0x42, 0x28, + 0x1B, 0x64, 0x44, 0x42, 0x28, 0x1B, 0x63, 0x43, 0x42, 0x28, 0x34, 0x38, 0x42, + 0x28, 0x1B, 0x31, 0x42, 0x28, 0x1B, 0x31, 0x42, 0x28, 0x1B, 0x2D, 0x42, 0x28, + 0x1B, 0x61, 0x41, 0x42, 0x28, 0x1B, 0x6D, 0x4D, 0x42, 0x28, 0x38, 0x42, 0x28, + 0x1B, 0x32, 0x42, 0x28, 0x1B, 0x39, 0x42, 0x28, 0x1B, 0x5F, 0x42, 0x28, 0x1B, + 0x74, 0x54, 0x42, 0x28, 0x1B, 0x6F, 0x4F, 0x42, 0x28, 0x4E, 0x6E, 0x42, 0x28, + 0x50, 0x70, 0x42, 0x28, 0x3E, 0x42, 0x28, 0x1B, 0x68, 0x48, 0x42, 0x28, 0x1B, + 0x1B, 0x1B, 0x74, 0x6B, 0x6A, 0x63, 0x54, 0x4B, 0x4A, 0x43, 0x42, 0x28, 0x1B, + 0x74, 0x54, 0x2D, 0x42, 0x28, 0x1B, 0x63, 0x43, 0x42, 0x28, 0x5F, 0x42, 0x28, + 0x1B, 0x72, 0x52, 0x42, 0x28, 0x1B, 0x6F, 0x4F, 0x42, 0x28, 0x1B, 0x66, 0x46, + 0x42, 0x28, 0x1B, 0x5F, 0x42, 0x28, 0x1B, 0x74, 0x54, 0x42, 0x28, 0x1B, 0x61, + 0x41, 0x42, 0x28, 0x1B, 0x6D, 0x4D, 0x42, 0x28, 0x1B, 0x72, 0x52, 0x42, 0x28, + 0x1B, 0x6F, 0x4F, 0x42, 0x28, 0x1B, 0x66, 0x46, 0x42, 0x28, 0x1B, 0x5F, 0x42, + 0x28, 0x1B, 0x64, 0x44, 0x42, 0x28, 0x1B, 0x65, 0x45, 0x42, 0x28, 0x1B, 0x6B, + 0x4B, 0x42, 0x28, 0x1B, 0x63, 0x43, 0x42, 0x28, 0x1B, 0x61, 0x41, 0x42, 0x28, + 0x1B, 0x70, 0x50, 0x42, 0x28, 0x1B, 0x5F, 0x42, 0x28, 0x1B, 0x65, 0x45, 0x42, + 0x28, 0x1B, 0x64, 0x44, 0x42, 0x28, 0x1B, 0x6F, 0x4F, 0x42, 0x28, 0x1B, 0x63, + 0x43, 0x42, 0x28, 0x1B, 0x5F, 0x42, 0x28, 0x1B, 0x78, 0x58, 0x42, 0x28, 0x1B, + 0x69, 0x49, 0x42, 0x28, 0x1B, 0x6E, 0x4E, 0x42, 0x28, 0x1B, 0x75, 0x55, 0x42, + 0x28, 0x1B, 0x5F, 0x42, 0x28, 0x1B, 0x64, 0x44, 0x42, 0x28, 0x1B, 0x65, 0x45, + 0x42, 0x28, 0x1B, 0x64, 0x44, 0x42, 0x28, 0x1B, 0x6E, 0x4E, 0x42, 0x28, 0x1B, + 0x65, 0x45, 0x42, 0x28, 0x1B, 0x74, 0x54, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, + 0x1B, 0x78, 0x75, 0x6C, 0x63, 0x62, 0x58, 0x55, 0x4C, 0x43, 0x42, 0x42, 0x28, + 0x2D, 0x42, 0x28, 0x1B, 0x32, 0x42, 0x28, 0x1B, 0x31, 0x42, 0x28, 0x1B, 0x33, + 0x42, 0x28, 0x1B, 0x32, 0x42, 0x28, 0x1B, 0x4B, 0x6B, 0x5F, 0x32, 0x42, 0x28, + 0x00, 0x1B, 0x6B, 0x4B, 0x42, 0x28, 0x1B, 0x65, 0x45, 0x42, 0x28, 0x1B, 0x65, + 0x45, 0x42, 0x28, 0x1B, 0x1B, 0x72, 0x62, 0x52, 0x42, 0x42, 0x28, 0x2D, 0x42, + 0x28, 0x1B, 0x70, 0x65, 0x50, 0x45, 0x42, 0x28, 0x30, 0x42, 0x28, 0x33, 0x34, + 0x38, 0x39, 0x42, 0x28, 0x1B, 0x1B, 0x39, 0x36, 0x31, 0x30, 0x42, 0x28, 0x33, + 0x31, 0x42, 0x28, 0x00, 0x1B, 0x00, 0x1B, 0x38, 0x32, 0x37, 0x35, 0x31, 0x30, + 0x42, 0x28, 0x39, 0x35, 0x34, 0x31, 0x32, 0x42, 0x28, 0x31, 0x30, 0x33, 0x36, + 0x42, 0x28, 0x38, 0x35, 0x42, 0x28, 0x30, 0x34, 0x35, 0x37, 0x38, 0x39, 0x33, + 0x42, 0x28, 0x35, 0x36, 0x37, 0x38, 0x39, 0x30, 0x31, 0x32, 0x33, 0x34, 0x42, + 0x28, 0x30, 0x32, 0x34, 0x33, 0x31, 0x35, 0x36, 0x37, 0x38, 0x39, 0x42, 0x28, + 0x30, 0x33, 0x31, 0x32, 0x42, 0x28, 0x36, 0x39, 0x37, 0x34, 0x42, 0x28, 0x30, + 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x42, 0x28, 0x1B, 0x1B, + 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x39, 0x38, 0x36, 0x35, 0x34, 0x33, + 0x32, 0x31, 0x30, 0x42, 0x28, 0x31, 0x30, 0x32, 0x42, 0x28, 0x1B, 0x30, 0x42, + 0x28, 0x39, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x42, 0x28, + 0x1B, 0x35, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x32, 0x31, 0x30, 0x42, 0x28, 0x38, + 0x36, 0x42, 0x28, 0x37, 0x42, 0x28, 0x00, 0x1B, 0x00, 0x1B, 0x1B, 0x1B, 0x39, + 0x34, 0x36, 0x37, 0x38, 0x35, 0x33, 0x32, 0x31, 0x42, 0x28, 0x1B, 0x2D, 0x42, + 0x28, 0x1B, 0x61, 0x41, 0x42, 0x28, 0x1B, 0x6E, 0x4E, 0x42, 0x28, 0x38, 0x39, + 0x42, 0x28, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x42, + 0x28, 0x36, 0x35, 0x37, 0x42, 0x28, 0x37, 0x30, 0x31, 0x32, 0x33, 0x36, 0x42, + 0x28, 0x31, 0x42, 0x28, 0x39, 0x38, 0x42, 0x28, 0x37, 0x38, 0x42, 0x28, 0x1B, + 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x39, 0x38, 0x35, 0x34, 0x32, 0x31, 0x30, + 0x42, 0x28, 0x32, 0x34, 0x35, 0x42, 0x28, 0x32, 0x33, 0x39, 0x42, 0x28, 0x30, + 0x32, 0x33, 0x37, 0x42, 0x28, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x42, 0x28, + 0x30, 0x34, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x34, 0x36, 0x35, 0x33, + 0x32, 0x31, 0x42, 0x28, 0x31, 0x33, 0x38, 0x42, 0x28, 0x33, 0x35, 0x42, 0x28, + 0x32, 0x30, 0x31, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x42, 0x28, 0x38, 0x42, + 0x28, 0x1B, 0x36, 0x35, 0x30, 0x42, 0x28, 0x30, 0x31, 0x32, 0x33, 0x42, 0x28, + 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x38, 0x37, 0x35, 0x33, 0x30, 0x42, 0x28, 0x31, + 0x34, 0x42, 0x28, 0x1B, 0x32, 0x42, 0x28, 0x38, 0x42, 0x28, 0x1B, 0x38, 0x42, + 0x28, 0x33, 0x34, 0x42, 0x28, 0x35, 0x33, 0x42, 0x28, 0x36, 0x33, 0x30, 0x31, + 0x38, 0x42, 0x28, 0x32, 0x39, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, + 0x39, 0x38, 0x37, 0x36, 0x34, 0x31, 0x42, 0x28, 0x34, 0x42, 0x28, 0x1B, 0x35, + 0x42, 0x28, 0x1B, 0x33, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x37, 0x33, + 0x32, 0x31, 0x30, 0x42, 0x28, 0x36, 0x42, 0x28, 0x1B, 0x34, 0x42, 0x28, 0x1B, + 0x36, 0x35, 0x42, 0x28, 0x39, 0x42, 0x28, 0x1B, 0x30, 0x42, 0x28, 0x1B, 0x30, + 0x34, 0x35, 0x37, 0x42, 0x28, 0x1B, 0x1B, 0x39, 0x37, 0x38, 0x35, 0x42, 0x28, + 0x30, 0x31, 0x42, 0x28, 0x32, 0x42, 0x28, 0x1B, 0x32, 0x42, 0x28, 0x1B, 0x37, + 0x42, 0x28, 0x1B, 0x1B, 0x37, 0x36, 0x33, 0x30, 0x42, 0x28, 0x36, 0x42, 0x28, + 0x1B, 0x37, 0x39, 0x42, 0x28, 0x38, 0x42, 0x28, 0x31, 0x32, 0x33, 0x42, 0x28, + 0x30, 0x35, 0x42, 0x28, 0x31, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x37, 0x36, + 0x35, 0x34, 0x42, 0x28, 0x1B, 0x1B, 0x32, 0x39, 0x33, 0x42, 0x28, 0x36, 0x42, + 0x28, 0x35, 0x42, 0x28, 0x30, 0x32, 0x33, 0x34, 0x35, 0x42, 0x28, 0x1B, 0x1B, + 0x1B, 0x30, 0x35, 0x33, 0x32, 0x42, 0x28, 0x33, 0x42, 0x28, 0x1B, 0x32, 0x42, + 0x28, 0x36, 0x37, 0x38, 0x39, 0x42, 0x28, 0x30, 0x34, 0x42, 0x28, 0x1B, 0x1B, + 0x35, 0x34, 0x42, 0x28, 0x38, 0x42, 0x28, 0x1B, 0x37, 0x42, 0x28, 0x35, 0x42, + 0x28, 0x1B, 0x34, 0x42, 0x28, 0x1B, 0x33, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, + 0x1B, 0x37, 0x34, 0x33, 0x31, 0x30, 0x42, 0x28, 0x32, 0x42, 0x28, 0x1B, 0x35, + 0x42, 0x28, 0x1B, 0x39, 0x42, 0x28, 0x31, 0x42, 0x28, 0x34, 0x42, 0x28, 0x35, + 0x42, 0x28, 0x35, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x34, 0x33, 0x32, 0x31, + 0x42, 0x28, 0x1B, 0x32, 0x42, 0x28, 0x1B, 0x1B, 0x32, 0x31, 0x42, 0x28, 0x30, + 0x42, 0x28, 0x37, 0x42, 0x28, 0x1B, 0x1B, 0x37, 0x33, 0x32, 0x42, 0x28, 0x39, + 0x33, 0x42, 0x28, 0x38, 0x33, 0x35, 0x36, 0x37, 0x42, 0x28, 0x30, 0x31, 0x32, + 0x35, 0x37, 0x38, 0x42, 0x28, 0x32, 0x42, 0x28, 0x00, 0x1B, 0x30, 0x32, 0x33, + 0x35, 0x36, 0x39, 0x38, 0x34, 0x31, 0x42, 0x28, 0x30, 0x31, 0x34, 0x38, 0x35, + 0x42, 0x28, 0x31, 0x37, 0x36, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, + 0x38, 0x39, 0x37, 0x36, 0x35, 0x33, 0x31, 0x42, 0x28, 0x30, 0x42, 0x28, 0x36, + 0x42, 0x28, 0x36, 0x42, 0x28, 0x1B, 0x00, 0x1B, 0x00, 0x1B, 0x34, 0x36, 0x35, + 0x33, 0x42, 0x28, 0x38, 0x32, 0x33, 0x34, 0x36, 0x35, 0x42, 0x28, 0x34, 0x31, + 0x33, 0x30, 0x32, 0x36, 0x37, 0x38, 0x42, 0x28, 0x30, 0x32, 0x33, 0x34, 0x35, + 0x36, 0x37, 0x38, 0x39, 0x42, 0x28, 0x37, 0x38, 0x39, 0x42, 0x28, 0x1B, 0x00, + 0x33, 0x32, 0x36, 0x37, 0x39, 0x34, 0x42, 0x28, 0x30, 0x31, 0x36, 0x37, 0x38, + 0x39, 0x42, 0x28, 0x34, 0x35, 0x42, 0x28, 0x30, 0x42, 0x28, 0x1B, 0x1B, 0x1B, + 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x30, + 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x30, 0x74, + 0x54, 0x39, 0x38, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x42, 0x28, 0x31, + 0x30, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x1B, 0x1B, 0x33, 0x30, 0x42, 0x28, + 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x39, + 0x38, 0x37, 0x35, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x1B, 0x1B, 0x36, 0x30, + 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x1B, 0x1B, 0x33, 0x32, 0x42, 0x28, 0x42, + 0x28, 0x1B, 0x30, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x1B, 0x1B, + 0x1B, 0x37, 0x33, 0x32, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x42, + 0x28, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, + 0x1B, 0x39, 0x38, 0x37, 0x36, 0x35, 0x33, 0x31, 0x42, 0x28, 0x42, 0x28, 0x42, + 0x28, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, + 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x37, 0x36, 0x35, 0x34, 0x33, + 0x32, 0x31, 0x30, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, + 0x39, 0x38, 0x37, 0x35, 0x34, 0x33, 0x32, 0x30, 0x42, 0x28, 0x42, 0x28, 0x42, + 0x28, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x1B, 0x1B, + 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x39, 0x38, 0x35, 0x34, 0x32, 0x31, 0x30, 0x42, + 0x28, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, + 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x42, + 0x28, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x1B, 0x1B, + 0x1B, 0x1B, 0x1B, 0x38, 0x37, 0x35, 0x33, 0x30, 0x42, 0x28, 0x42, 0x28, 0x42, + 0x28, 0x42, 0x28, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x39, 0x38, 0x37, 0x36, + 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x33, 0x32, 0x31, 0x30, 0x42, 0x28, 0x42, + 0x28, 0x1B, 0x39, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, + 0x1B, 0x1B, 0x1B, 0x1B, 0x37, 0x36, 0x35, 0x34, 0x42, 0x28, 0x1B, 0x1B, 0x39, + 0x33, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x35, + 0x33, 0x32, 0x42, 0x28, 0x42, 0x28, 0x1B, 0x32, 0x42, 0x28, 0x42, 0x28, 0x42, + 0x28, 0x1B, 0x1B, 0x35, 0x34, 0x42, 0x28, 0x42, 0x28, 0x1B, 0x37, 0x42, 0x28, + 0x1B, 0x1B, 0x1B, 0x1B, 0x34, 0x33, 0x31, 0x30, 0x42, 0x28, 0x42, 0x28, 0x1B, + 0x31, 0x42, 0x28, 0x1B, 0x36, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, + 0x1B, 0x1B, 0x1B, 0x36, 0x35, 0x33, 0x42, 0x28, 0x42, 0x28, 0x1B, 0x34, 0x42, + 0x28, 0x1B, 0x1B, 0x34, 0x30, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, + 0x39, 0x38, 0x35, 0x34, 0x31, 0x30, 0x42, 0x28, 0x42, 0x28, 0x1B, 0x30, 0x42, + 0x28, 0x1B, 0x37, 0x42, 0x28, 0x42, 0x28, 0x1B, 0x32, 0x42, 0x28, 0x42, 0x28, + 0x1B, 0x38, 0x42, 0x28, 0x1B, 0x1B, 0x34, 0x31, 0x42, 0x28, 0x42, 0x28, 0x1B, + 0x35, 0x42, 0x28, 0x1B, 0x33, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x37, 0x33, 0x32, + 0x42, 0x28, 0x42, 0x28, 0x1B, 0x34, 0x42, 0x28, 0x1B, 0x35, 0x42, 0x28, 0x42, + 0x28, 0x1B, 0x30, 0x42, 0x28, 0x1B, 0x37, 0x42, 0x28, 0x1B, 0x1B, 0x38, 0x35, + 0x42, 0x28, 0x42, 0x28, 0x1B, 0x32, 0x42, 0x28, 0x1B, 0x37, 0x42, 0x28, 0x1B, + 0x33, 0x42, 0x28, 0x42, 0x28, 0x1B, 0x34, 0x42, 0x28, 0x1B, 0x33, 0x42, 0x28, + 0x1B, 0x37, 0x42, 0x28, 0x42, 0x28, 0x1B, 0x35, 0x42, 0x28, 0x1B, 0x39, 0x42, + 0x28, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, + 0x34, 0x33, 0x32, 0x31, 0x42, 0x28, 0x1B, 0x32, 0x42, 0x28, 0x1B, 0x1B, 0x32, + 0x31, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x36, 0x35, 0x33, 0x32, + 0x31, 0x30, 0x42, 0x28, 0x1B, 0x64, 0x44, 0x42, 0x28, 0x1B, 0x69, 0x49, 0x42, + 0x28, 0x1B, 0x73, 0x53, 0x42, 0x28, 0x1B, 0x63, 0x43, 0x42, 0x28, 0x1B, 0x1B, + 0x1B, 0x63, 0x43, 0x39, 0x38, 0x37, 0x35, 0x34, 0x33, 0x32, 0x31, 0x30, 0x2D, + 0x42, 0x28, 0x1B, 0x6D, 0x4D, 0x42, 0x28, 0x32, 0x42, 0x28, 0x1B, 0x2D, 0x42, + 0x28, 0x1B, 0x73, 0x53, 0x42, 0x28, 0x1B, 0x63, 0x43, 0x42, 0x28, 0x1B, 0x75, + 0x55, 0x42, 0x28, 0x1B, 0x2D, 0x42, 0x28, 0x1B, 0x36, 0x42, 0x28, 0x1B, 0x34, + 0x42, 0x28, 0x1B, 0x36, 0x42, 0x28, 0x1B, 0x30, 0x42, 0x28, 0x31, 0x42, 0x28, + 0x1B, 0x2D, 0x42, 0x28, 0x1B, 0x6E, 0x4E, 0x42, 0x28, 0x1B, 0x69, 0x49, 0x42, + 0x28, 0x1B, 0x74, 0x54, 0x42, 0x28, 0x1B, 0x61, 0x41, 0x42, 0x28, 0x1B, 0x6C, + 0x4C, 0x42, 0x28, 0x1B, 0x2D, 0x42, 0x28, 0x1B, 0x31, 0x42, 0x28, 0x1B, 0x2E, + 0x42, 0x28, 0x1B, 0x33, 0x42, 0x28, 0x1B, 0x2D, 0x42, 0x28, 0x1B, 0x73, 0x53, + 0x42, 0x28, 0x1B, 0x77, 0x57, 0x42, 0x28, 0x1B, 0x6F, 0x4F, 0x42, 0x28, 0x1B, + 0x64, 0x44, 0x42, 0x28, 0x1B, 0x6E, 0x4E, 0x42, 0x28, 0x1B, 0x69, 0x49, 0x42, + 0x28, 0x1B, 0x77, 0x57, 0x42, 0x28, 0x1B, 0x33, 0x35, 0x2D, 0x42, 0x28, 0x32, + 0x42, 0x28, 0x1B, 0x2D, 0x42, 0x28, 0x1B, 0x6E, 0x4E, 0x42, 0x28, 0x1B, 0x69, + 0x49, 0x42, 0x28, 0x1B, 0x74, 0x54, 0x42, 0x28, 0x1B, 0x61, 0x41, 0x42, 0x28, + 0x1B, 0x6C, 0x4C, 0x42, 0x28, 0x1B, 0x2D, 0x42, 0x28, 0x1B, 0x73, 0x53, 0x42, + 0x28, 0x1B, 0x77, 0x57, 0x42, 0x28, 0x1B, 0x6F, 0x4F, 0x42, 0x28, 0x1B, 0x64, + 0x44, 0x42, 0x28, 0x1B, 0x6E, 0x4E, 0x42, 0x28, 0x1B, 0x69, 0x49, 0x42, 0x28, + 0x1B, 0x77, 0x57, 0x42, 0x28, 0x1B, 0x2D, 0x42, 0x28, 0x00, 0x1B, 0x00, 0x1B, + 0x36, 0x33, 0x34, 0x39, 0x37, 0x38, 0x35, 0x32, 0x31, 0x42, 0x28, 0x1B, 0x2D, + 0x42, 0x28, 0x1B, 0x39, 0x42, 0x28, 0x1B, 0x35, 0x42, 0x28, 0x1B, 0x38, 0x42, + 0x28, 0x30, 0x31, 0x39, 0x42, 0x28, 0x30, 0x42, 0x28, 0x37, 0x36, 0x42, 0x28, + 0x38, 0x42, 0x28, 0x38, 0x39, 0x34, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, + 0x33, 0x34, 0x32, 0x31, 0x30, 0x42, 0x28, 0x1B, 0x36, 0x35, 0x31, 0x42, 0x28, + 0x1B, 0x2D, 0x42, 0x28, 0x1B, 0x72, 0x52, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x69, + 0x49, 0x38, 0x31, 0x42, 0x28, 0x53, 0x73, 0x42, 0x28, 0x1B, 0x75, 0x55, 0x42, + 0x28, 0x1B, 0x2D, 0x42, 0x28, 0x1B, 0x36, 0x42, 0x28, 0x1B, 0x34, 0x42, 0x28, + 0x31, 0x42, 0x28, 0x1B, 0x39, 0x42, 0x28, 0x1B, 0x39, 0x42, 0x28, 0x1B, 0x31, + 0x42, 0x28, 0x1B, 0x3A, 0x42, 0x28, 0x1B, 0x76, 0x56, 0x42, 0x28, 0x1B, 0x72, + 0x52, 0x42, 0x28, 0x1B, 0x69, 0x49, 0x42, 0x28, 0x1B, 0x2E, 0x42, 0x28, 0x1B, + 0x36, 0x42, 0x28, 0x1B, 0x34, 0x42, 0x28, 0x37, 0x42, 0x28, 0x1B, 0x38, 0x42, + 0x28, 0x1B, 0x39, 0x42, 0x28, 0x1B, 0x31, 0x42, 0x28, 0x1B, 0x35, 0x3A, 0x42, + 0x28, 0x37, 0x42, 0x28, 0x1B, 0x38, 0x42, 0x28, 0x1B, 0x39, 0x42, 0x28, 0x1B, + 0x31, 0x42, 0x28, 0x1B, 0x3A, 0x42, 0x28, 0x38, 0x42, 0x28, 0x1B, 0x38, 0x42, + 0x28, 0x1B, 0x39, 0x42, 0x28, 0x1B, 0x31, 0x42, 0x28, 0x1B, 0x3A, 0x42, 0x28, + 0x38, 0x42, 0x28, 0x1B, 0x38, 0x42, 0x28, 0x1B, 0x39, 0x42, 0x28, 0x1B, 0x31, + 0x42, 0x28, 0x1B, 0x3A, 0x42, 0x28, 0x38, 0x42, 0x28, 0x1B, 0x38, 0x42, 0x28, + 0x1B, 0x39, 0x42, 0x28, 0x1B, 0x31, 0x42, 0x28, 0x1B, 0x3A, 0x42, 0x28, 0x37, + 0x42, 0x28, 0x1B, 0x38, 0x42, 0x28, 0x1B, 0x39, 0x42, 0x28, 0x1B, 0x31, 0x42, + 0x28, 0x1B, 0x3A, 0x42, 0x28, 0x37, 0x42, 0x28, 0x1B, 0x38, 0x42, 0x28, 0x1B, + 0x39, 0x42, 0x28, 0x1B, 0x31, 0x42, 0x28, 0x1B, 0x3A, 0x42, 0x28, 0x38, 0x42, + 0x28, 0x1B, 0x39, 0x42, 0x28, 0x1B, 0x31, 0x42, 0x28, 0x1B, 0x3A, 0x42, 0x28, + 0x39, 0x42, 0x28, 0x1B, 0x38, 0x42, 0x28, 0x1B, 0x39, 0x42, 0x28, 0x1B, 0x31, + 0x42, 0x28, 0x1B, 0x3A, 0x42, 0x28, 0x00, 0x1B, 0x00, 0x1B, 0x00, 0x1B, 0x00, + 0x1B, 0x00, 0x1B, 0x00, 0x1B, 0x00, 0x1B, 0x00, 0x1B, 0x00, 0x1B, 0x39, 0x38, + 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x42, 0x28, 0x1B, 0x2D, 0x42, 0x28, + 0x1B, 0x39, 0x42, 0x28, 0x1B, 0x35, 0x42, 0x28, 0x1B, 0x38, 0x42, 0x28, 0x1B, + 0x1B, 0x38, 0x36, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x5F, 0x36, 0x2D, 0x42, 0x28, + 0x1B, 0x6F, 0x4F, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x73, 0x62, 0x61, 0x53, 0x42, + 0x41, 0x42, 0x28, 0x31, 0x42, 0x28, 0x1B, 0x30, 0x42, 0x28, 0x1B, 0x32, 0x42, + 0x28, 0x1B, 0x30, 0x42, 0x28, 0x1B, 0x58, 0x78, 0x42, 0x28, 0x1B, 0x5F, 0x42, + 0x28, 0x1B, 0x73, 0x53, 0x42, 0x28, 0x1B, 0x69, 0x49, 0x42, 0x28, 0x2D, 0x42, + 0x28, 0x1B, 0x38, 0x42, 0x28, 0x4E, 0x6E, 0x42, 0x28, 0x1B, 0x61, 0x41, 0x42, + 0x28, 0x1B, 0x65, 0x45, 0x42, 0x28, 0x1B, 0x1B, 0x72, 0x69, 0x52, 0x49, 0x42, + 0x28, 0x31, 0x42, 0x28, 0x1B, 0x30, 0x42, 0x28, 0x1B, 0x36, 0x42, 0x28, 0x1B, + 0x35, 0x42, 0x28, 0x1B, 0x5F, 0x42, 0x28, 0x39, 0x37, 0x42, 0x28, 0x1B, 0x38, + 0x42, 0x28, 0x1B, 0x39, 0x42, 0x28, 0x1B, 0x31, 0x42, 0x28, 0x1B, 0x2D, 0x42, + 0x28, 0x1B, 0x31, 0x42, 0x28, 0x1B, 0x30, 0x42, 0x28, 0x1B, 0x36, 0x42, 0x28, + 0x1B, 0x35, 0x42, 0x28, 0x1B, 0x5F, 0x42, 0x28, 0x1B, 0x63, 0x43, 0x42, 0x28, + 0x1B, 0x1B, 0x63, 0x5F, 0x43, 0x42, 0x28, 0x1B, 0x1B, 0x73, 0x6F, 0x53, 0x4F, + 0x42, 0x28, 0x39, 0x42, 0x28, 0x1B, 0x31, 0x32, 0x33, 0x34, 0x35, 0x2D, 0x42, + 0x28, 0x1B, 0x6E, 0x4E, 0x42, 0x28, 0x1B, 0x69, 0x49, 0x42, 0x28, 0x1B, 0x74, + 0x54, 0x42, 0x28, 0x1B, 0x31, 0x32, 0x33, 0x34, 0x35, 0x61, 0x41, 0x42, 0x28, + 0x33, 0x42, 0x28, 0x49, 0x69, 0x42, 0x28, 0x1B, 0x6A, 0x4A, 0x42, 0x28, 0x1B, + 0x6E, 0x4E, 0x42, 0x28, 0x1B, 0x61, 0x41, 0x42, 0x28, 0x1B, 0x6B, 0x4B, 0x42, + 0x28, 0x1B, 0x1B, 0x39, 0x5F, 0x42, 0x28, 0x1B, 0x73, 0x53, 0x42, 0x28, 0x4F, + 0x6F, 0x42, 0x28, 0x1B, 0x72, 0x52, 0x42, 0x28, 0x1B, 0x75, 0x55, 0x42, 0x28, + 0x1B, 0x65, 0x45, 0x42, 0x28, 0x1B, 0x2B, 0x42, 0x28, 0x1B, 0x30, 0x42, 0x28, + 0x1B, 0x35, 0x42, 0x28, 0x1B, 0x38, 0x42, 0x28, 0x1B, 0x2D, 0x42, 0x28, 0x1B, + 0x6C, 0x4C, 0x42, 0x28, 0x1B, 0x61, 0x41, 0x42, 0x28, 0x1B, 0x75, 0x55, 0x42, + 0x28, 0x1B, 0x67, 0x47, 0x42, 0x28, 0x1B, 0x6E, 0x4E, 0x42, 0x28, 0x1B, 0x69, + 0x49, 0x42, 0x28, 0x1B, 0x6C, 0x4C, 0x42, 0x28, 0x1B, 0x69, 0x49, 0x42, 0x28, + 0x1B, 0x74, 0x54, 0x42, 0x28, 0x1B, 0x6C, 0x4C, 0x42, 0x28, 0x1B, 0x75, 0x55, + 0x42, 0x28, 0x1B, 0x6D, 0x4D, 0x42, 0x28, 0x1B, 0x2D, 0x42, 0x28, 0x1B, 0x63, + 0x43, 0x42, 0x28, 0x38, 0x6F, 0x4F, 0x42, 0x28, 0x5F, 0x42, 0x28, 0x1B, 0x74, + 0x54, 0x42, 0x28, 0x1B, 0x66, 0x46, 0x42, 0x28, 0x1B, 0x69, 0x49, 0x42, 0x28, + 0x1B, 0x68, 0x48, 0x42, 0x28, 0x2D, 0x42, 0x28, 0x1B, 0x73, 0x53, 0x42, 0x28, + 0x1B, 0x69, 0x49, 0x42, 0x28, 0x32, 0x2D, 0x42, 0x28, 0x1B, 0x73, 0x53, 0x42, + 0x28, 0x73, 0x53, 0x42, 0x28, 0x1B, 0x61, 0x41, 0x42, 0x28, 0x1B, 0x2D, 0x42, + 0x28, 0x6C, 0x62, 0x4C, 0x42, 0x2D, 0x42, 0x28, 0x1B, 0x36, 0x42, 0x28, 0x6C, + 0x62, 0x4C, 0x42, 0x2D, 0x42, 0x28, 0x1B, 0x32, 0x42, 0x28, 0x1B, 0x1B, 0x38, + 0x33, 0x31, 0x42, 0x28, 0x1B, 0x38, 0x33, 0x31, 0x2D, 0x42, 0x28, 0x1B, 0x66, + 0x46, 0x42, 0x28, 0x1B, 0x00, 0x1B, 0x1B, 0x74, 0x73, 0x63, 0x54, 0x53, 0x43, + 0x42, 0x28, 0x39, 0x31, 0x42, 0x28, 0x1B, 0x2D, 0x42, 0x28, 0x1B, 0x73, 0x53, + 0x42, 0x28, 0x1B, 0x77, 0x57, 0x42, 0x28, 0x1B, 0x6F, 0x4F, 0x42, 0x28, 0x1B, + 0x64, 0x44, 0x42, 0x28, 0x1B, 0x6E, 0x4E, 0x42, 0x28, 0x1B, 0x69, 0x49, 0x42, + 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, + 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x4A, 0x28, 0x1B, 0x33, 0x4A, 0x28, 0x4A, + 0x28, 0x4A, 0x28, 0x1B, 0x1B, 0x35, 0x36, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x30, + 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x6E, 0x4E, 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A, + 0x28, 0x1B, 0x64, 0x44, 0x4A, 0x28, 0x1B, 0x6F, 0x4F, 0x4A, 0x28, 0x1B, 0x63, + 0x43, 0x4A, 0x28, 0x1B, 0x6E, 0x4E, 0x4A, 0x28, 0x1B, 0x65, 0x45, 0x4A, 0x28, + 0x1B, 0x2D, 0x4A, 0x28, 0x1B, 0x64, 0x44, 0x4A, 0x28, 0x1B, 0x72, 0x52, 0x4A, + 0x28, 0x1B, 0x61, 0x41, 0x4A, 0x28, 0x1B, 0x64, 0x44, 0x4A, 0x28, 0x1B, 0x6E, + 0x4E, 0x4A, 0x28, 0x1B, 0x61, 0x41, 0x4A, 0x28, 0x1B, 0x74, 0x54, 0x4A, 0x28, + 0x1B, 0x73, 0x53, 0x4A, 0x28, 0x1B, 0x2D, 0x4A, 0x28, 0x1B, 0x65, 0x45, 0x4A, + 0x28, 0x1B, 0x62, 0x42, 0x4A, 0x28, 0x1B, 0x6F, 0x4F, 0x4A, 0x28, 0x4A, 0x28, + 0x4A, 0x28, 0x1B, 0x1B, 0x38, 0x36, 0x4A, 0x28, 0x1B, 0x39, 0x4A, 0x28, 0x1B, + 0x31, 0x4A, 0x28, 0x1B, 0x2D, 0x4A, 0x28, 0x1B, 0x34, 0x4A, 0x28, 0x1B, 0x2E, + 0x4A, 0x28, 0x1B, 0x33, 0x4A, 0x28, 0x1B, 0x78, 0x58, 0x4A, 0x28, 0x1B, 0x5F, + 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28, 0x1B, 0x73, 0x53, 0x4A, 0x28, 0x4A, + 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28, 0x1B, 0x62, 0x42, 0x4A, 0x28, 0x1B, 0x61, + 0x41, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28, 0x4A, 0x28, 0x1B, + 0x30, 0x4A, 0x28, 0x1B, 0x37, 0x4A, 0x28, 0x1B, 0x2D, 0x4A, 0x28, 0x1B, 0x6F, + 0x4F, 0x4A, 0x28, 0x1B, 0x1B, 0x43, 0x63, 0x6D, 0x4D, 0x4A, 0x28, 0x1B, 0x1B, + 0x1B, 0x1B, 0x52, 0x72, 0x73, 0x6E, 0x64, 0x53, 0x4E, 0x44, 0x4A, 0x28, 0x4A, + 0x28, 0x1B, 0x63, 0x43, 0x4A, 0x28, 0x1B, 0x73, 0x53, 0x4A, 0x28, 0x1B, 0x6B, + 0x4B, 0x4A, 0x28, 0x1B, 0x68, 0x48, 0x4A, 0x28, 0x1B, 0x2D, 0x4A, 0x28, 0x1B, + 0x35, 0x4A, 0x28, 0x1B, 0x67, 0x47, 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28, + 0x4A, 0x28, 0x1B, 0x35, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x32, 0x4A, 0x28, 0x1B, + 0x1B, 0x39, 0x38, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x34, 0x4A, 0x28, 0x1B, 0x31, + 0x4A, 0x28, 0x1B, 0x1B, 0x31, 0x30, 0x4A, 0x28, 0x1B, 0x30, 0x4A, 0x28, 0x1B, + 0x64, 0x44, 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28, 0x1B, 0x73, 0x53, 0x4A, + 0x28, 0x4A, 0x28, 0x1B, 0x73, 0x53, 0x4A, 0x28, 0x1B, 0x65, 0x45, 0x4A, 0x28, + 0x1B, 0x6E, 0x4E, 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28, 0x4A, 0x28, 0x4A, + 0x28, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x69, 0x67, 0x61, 0x49, 0x47, 0x41, 0x4A, + 0x28, 0x4A, 0x28, 0x1B, 0x33, 0x31, 0x30, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x32, + 0x4A, 0x28, 0x1B, 0x30, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B, + 0x1B, 0x1B, 0x39, 0x38, 0x37, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x36, 0x4A, 0x28, + 0x4A, 0x28, 0x1B, 0x33, 0x32, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x30, 0x4A, 0x28, + 0x4A, 0x28, 0x1B, 0x37, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, + 0x28, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x39, 0x38, 0x37, 0x36, 0x35, + 0x31, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x33, + 0x31, 0x30, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, + 0x1B, 0x38, 0x37, 0x35, 0x34, 0x33, 0x30, 0x39, 0x32, 0x31, 0x2D, 0x4A, 0x28, + 0x64, 0x44, 0x4A, 0x28, 0x1B, 0x72, 0x52, 0x4A, 0x28, 0x1B, 0x61, 0x41, 0x4A, + 0x28, 0x1B, 0x64, 0x44, 0x4A, 0x28, 0x1B, 0x6E, 0x4E, 0x4A, 0x28, 0x1B, 0x61, + 0x41, 0x4A, 0x28, 0x1B, 0x74, 0x54, 0x4A, 0x28, 0x1B, 0x73, 0x53, 0x4A, 0x28, + 0x1B, 0x65, 0x45, 0x4A, 0x28, 0x1B, 0x62, 0x42, 0x4A, 0x28, 0x1B, 0x6F, 0x4F, + 0x4A, 0x28, 0x63, 0x43, 0x4A, 0x28, 0x1B, 0x1B, 0x53, 0x73, 0x64, 0x44, 0x4A, + 0x28, 0x35, 0x4A, 0x28, 0x1B, 0x67, 0x47, 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A, + 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x73, 0x53, 0x4A, 0x28, 0x1B, 0x65, 0x45, + 0x4A, 0x28, 0x1B, 0x6E, 0x4E, 0x4A, 0x28, 0x1B, 0x61, 0x41, 0x4A, 0x28, 0x1B, + 0x70, 0x50, 0x4A, 0x28, 0x1B, 0x61, 0x41, 0x4A, 0x28, 0x1B, 0x6A, 0x4A, 0x4A, + 0x28, 0x1B, 0x54, 0x74, 0x4A, 0x28, 0x1B, 0x6D, 0x4D, 0x4A, 0x28, 0x1B, 0x66, + 0x46, 0x4A, 0x28, 0x1B, 0x64, 0x44, 0x4A, 0x28, 0x1B, 0x6B, 0x4B, 0x4A, 0x28, + 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x54, 0x74, 0x4B, 0x6B, 0x70, 0x50, 0x4A, 0x28, + 0x1B, 0x63, 0x43, 0x4A, 0x28, 0x1B, 0x75, 0x55, 0x4A, 0x28, 0x4A, 0x28, 0x1B, + 0x31, 0x4A, 0x28, 0x1B, 0x33, 0x4A, 0x28, 0x1B, 0x4B, 0x6B, 0x32, 0x4A, 0x28, + 0x1B, 0x62, 0x42, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x6E, 0x4E, 0x4A, 0x28, 0x1B, + 0x61, 0x41, 0x4A, 0x28, 0x1B, 0x6B, 0x4B, 0x4A, 0x28, 0x1B, 0x61, 0x41, 0x4A, + 0x28, 0x1B, 0x74, 0x54, 0x4A, 0x28, 0x1B, 0x61, 0x41, 0x4A, 0x28, 0x1B, 0x6B, + 0x4B, 0x4A, 0x28, 0x1B, 0x68, 0x48, 0x4A, 0x28, 0x1B, 0x74, 0x54, 0x4A, 0x28, + 0x1B, 0x64, 0x44, 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28, 0x1B, 0x77, 0x57, + 0x4A, 0x28, 0x1B, 0x66, 0x46, 0x4A, 0x28, 0x1B, 0x6C, 0x4C, 0x4A, 0x28, 0x4A, + 0x28, 0x1B, 0x6E, 0x4E, 0x4A, 0x28, 0x1B, 0x61, 0x41, 0x4A, 0x28, 0x1B, 0x6D, + 0x4D, 0x4A, 0x28, 0x1B, 0x4F, 0x6F, 0x4A, 0x28, 0x1B, 0x72, 0x52, 0x4A, 0x28, + 0x1B, 0x1B, 0x50, 0x70, 0x61, 0x41, 0x4A, 0x28, 0x1B, 0x39, 0x4A, 0x28, 0x1B, + 0x6D, 0x4D, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x34, 0x32, 0x4A, 0x28, 0x1B, 0x30, + 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x39, 0x38, 0x37, 0x4A, 0x28, 0x32, 0x4A, 0x28, + 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x1B, 0x39, 0x38, 0x37, 0x36, 0x35, 0x4A, 0x28, + 0x4A, 0x28, 0x1B, 0x31, 0x30, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x61, 0x41, 0x4A, + 0x28, 0x1B, 0x68, 0x48, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x35, + 0x30, 0x54, 0x74, 0x32, 0x31, 0x39, 0x38, 0x34, 0x4A, 0x28, 0x1B, 0x1B, 0x6D, + 0x62, 0x4D, 0x42, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x38, 0x4A, 0x28, 0x1B, 0x32, + 0x4A, 0x28, 0x1B, 0x31, 0x4A, 0x28, 0x1B, 0x33, 0x4A, 0x28, 0x1B, 0x32, 0x4A, + 0x28, 0x1B, 0x62, 0x42, 0x4A, 0x28, 0x1B, 0x67, 0x47, 0x4A, 0x28, 0x1B, 0x38, + 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x31, 0x4A, 0x28, 0x1B, 0x39, 0x4A, 0x28, 0x1B, + 0x35, 0x4A, 0x28, 0x1B, 0x38, 0x4A, 0x28, 0x72, 0x52, 0x4A, 0x28, 0x4A, 0x28, + 0x1B, 0x69, 0x49, 0x4A, 0x28, 0x1B, 0x6C, 0x4C, 0x4A, 0x28, 0x1B, 0x6C, 0x4C, + 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28, 0x1B, 0x72, 0x52, 0x4A, 0x28, 0x1B, + 0x79, 0x59, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x65, 0x45, 0x4A, 0x28, 0x1B, 0x65, + 0x45, 0x4A, 0x28, 0x1B, 0x72, 0x52, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x65, 0x45, + 0x4A, 0x28, 0x1B, 0x72, 0x52, 0x4A, 0x28, 0x1B, 0x62, 0x42, 0x4A, 0x28, 0x1B, + 0x45, 0x65, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x31, 0x32, 0x33, 0x34, 0x35, + 0x68, 0x67, 0x63, 0x61, 0x48, 0x47, 0x43, 0x41, 0x4A, 0x28, 0x1B, 0x6E, 0x4E, + 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28, 0x1B, 0x74, 0x54, 0x4A, 0x28, 0x1B, + 0x61, 0x41, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x6C, 0x4C, 0x38, 0x35, 0x4A, 0x28, + 0x1B, 0x6F, 0x4F, 0x4A, 0x28, 0x1B, 0x1B, 0x73, 0x62, 0x53, 0x42, 0x4A, 0x28, + 0x4A, 0x28, 0x1B, 0x38, 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28, 0x4A, 0x28, + 0x1B, 0x38, 0x4A, 0x28, 0x1B, 0x39, 0x4A, 0x28, 0x1B, 0x31, 0x4A, 0x28, 0x1B, + 0x31, 0x4A, 0x28, 0x1B, 0x30, 0x4A, 0x28, 0x1B, 0x36, 0x4A, 0x28, 0x1B, 0x35, + 0x4A, 0x28, 0x1B, 0x63, 0x43, 0x4A, 0x28, 0x1B, 0x1B, 0x73, 0x6F, 0x53, 0x4F, + 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28, 0x1B, 0x74, 0x54, 0x4A, + 0x28, 0x1B, 0x6C, 0x4C, 0x4A, 0x28, 0x1B, 0x61, 0x41, 0x4A, 0x28, 0x1B, 0x62, + 0x42, 0x4A, 0x28, 0x1B, 0x35, 0x4A, 0x28, 0x1B, 0x37, 0x4A, 0x28, 0x4A, 0x28, + 0x1B, 0x61, 0x41, 0x4A, 0x28, 0x1B, 0x75, 0x55, 0x4A, 0x28, 0x1B, 0x67, 0x47, + 0x4A, 0x28, 0x1B, 0x6E, 0x4E, 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28, 0x1B, + 0x6C, 0x4C, 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28, 0x1B, 0x74, 0x54, 0x4A, + 0x28, 0x1B, 0x6C, 0x4C, 0x4A, 0x28, 0x1B, 0x75, 0x55, 0x4A, 0x28, 0x1B, 0x6D, + 0x4D, 0x4A, 0x28, 0x1B, 0x30, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x65, 0x45, 0x4A, + 0x28, 0x1B, 0x72, 0x52, 0x4A, 0x28, 0x1B, 0x62, 0x42, 0x4A, 0x28, 0x1B, 0x65, + 0x45, 0x4A, 0x28, 0x1B, 0x68, 0x48, 0x4A, 0x28, 0x1B, 0x6E, 0x4E, 0x4A, 0x28, + 0x1B, 0x69, 0x49, 0x4A, 0x28, 0x1B, 0x74, 0x54, 0x4A, 0x28, 0x1B, 0x61, 0x41, + 0x4A, 0x28, 0x1B, 0x6C, 0x4C, 0x4A, 0x28, 0x1B, 0x32, 0x4A, 0x28, 0x1B, 0x34, + 0x4A, 0x28, 0x1B, 0x65, 0x45, 0x4A, 0x28, 0x1B, 0x67, 0x47, 0x4A, 0x28, 0x1B, + 0x61, 0x41, 0x4A, 0x28, 0x1B, 0x70, 0x50, 0x4A, 0x28, 0x1B, 0x65, 0x45, 0x4A, + 0x28, 0x1B, 0x64, 0x44, 0x4A, 0x28, 0x1B, 0x6F, 0x4F, 0x4A, 0x28, 0x1B, 0x1B, + 0x1B, 0x63, 0x43, 0x36, 0x35, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x35, 0x4A, 0x28, + 0x1B, 0x38, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x70, 0x50, 0x38, 0x37, 0x4A, 0x28, + 0x1B, 0x63, 0x43, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28, 0x1B, + 0x6A, 0x4A, 0x4A, 0x28, 0x1B, 0x54, 0x74, 0x4A, 0x28, 0x1B, 0x66, 0x46, 0x4A, + 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28, 0x1B, 0x68, 0x48, 0x4A, 0x28, 0x4A, 0x28, + 0x1B, 0x32, 0x4A, 0x28, 0x1B, 0x36, 0x4A, 0x28, 0x1B, 0x53, 0x73, 0x4A, 0x28, + 0x1B, 0x69, 0x49, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x64, 0x44, 0x4A, 0x28, 0x1B, + 0x6F, 0x4F, 0x4A, 0x28, 0x1B, 0x63, 0x43, 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A, + 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x1B, 0x4C, 0x6C, 0x42, 0x62, 0x4A, 0x28, + 0x1B, 0x36, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x1B, 0x4C, 0x6C, 0x42, + 0x62, 0x4A, 0x28, 0x1B, 0x32, 0x4A, 0x28, 0x1B, 0x1B, 0x38, 0x33, 0x31, 0x4A, + 0x28, 0x1B, 0x66, 0x46, 0x4A, 0x28, 0x1B, 0x1B, 0x74, 0x6E, 0x54, 0x4E, 0x4A, + 0x28, 0x4A, 0x28, 0x1B, 0x35, 0x4A, 0x28, 0x1B, 0x32, 0x4A, 0x28, 0x4A, 0x28, + 0x1B, 0x6E, 0x4E, 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28, 0x1B, 0x74, 0x54, + 0x4A, 0x28, 0x1B, 0x61, 0x41, 0x4A, 0x28, 0x1B, 0x6C, 0x4C, 0x4A, 0x28, 0x1B, + 0x31, 0x4A, 0x28, 0x1B, 0x1B, 0x31, 0x33, 0x4A, 0x28, 0x1B, 0x73, 0x53, 0x4A, + 0x28, 0x1B, 0x77, 0x57, 0x4A, 0x28, 0x1B, 0x6F, 0x4F, 0x4A, 0x28, 0x1B, 0x64, + 0x44, 0x4A, 0x28, 0x1B, 0x6E, 0x4E, 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28, + 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x77, + 0x75, 0x74, 0x73, 0x70, 0x6B, 0x69, 0x68, 0x67, 0x65, 0x62, 0x61, 0x57, 0x55, + 0x54, 0x53, 0x50, 0x4B, 0x49, 0x48, 0x47, 0x45, 0x42, 0x41, 0x4A, 0x28, 0x4A, + 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28, 0x1B, 0x6C, 0x4C, 0x4A, 0x28, 0x1B, 0x6C, + 0x4C, 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28, 0x1B, 0x72, 0x52, 0x4A, 0x28, + 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x79, 0x73, 0x70, 0x68, 0x63, 0x59, 0x53, 0x50, + 0x48, 0x43, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x72, 0x52, 0x4A, 0x28, 0x4A, 0x28, + 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, + 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x63, 0x43, 0x4A, 0x28, 0x1B, 0x65, 0x45, + 0x4A, 0x28, 0x1B, 0x6F, 0x4F, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, + 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, + 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x79, 0x77, 0x75, 0x74, 0x73, 0x72, + 0x6E, 0x69, 0x68, 0x67, 0x66, 0x65, 0x64, 0x63, 0x62, 0x61, 0x59, 0x57, 0x55, + 0x54, 0x53, 0x52, 0x4E, 0x49, 0x48, 0x47, 0x46, 0x45, 0x44, 0x43, 0x42, 0x41, + 0x4A, 0x28, 0x1B, 0x2D, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28, + 0x1B, 0x6C, 0x4C, 0x4A, 0x28, 0x1B, 0x6C, 0x4C, 0x4A, 0x28, 0x1B, 0x69, 0x49, + 0x4A, 0x28, 0x1B, 0x72, 0x52, 0x4A, 0x28, 0x1B, 0x1B, 0x79, 0x70, 0x59, 0x50, + 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x72, 0x52, 0x4A, 0x28, 0x1B, 0x75, 0x55, 0x4A, + 0x28, 0x1B, 0x65, 0x45, 0x4A, 0x28, 0x1B, 0x2B, 0x4A, 0x28, 0x1B, 0x33, 0x4A, + 0x28, 0x1B, 0x37, 0x4A, 0x28, 0x1B, 0x32, 0x4A, 0x28, 0x1B, 0x2D, 0x4A, 0x28, + 0x4A, 0x28, 0x1B, 0x72, 0x52, 0x4A, 0x28, 0x1B, 0x75, 0x55, 0x4A, 0x28, 0x1B, + 0x65, 0x45, 0x4A, 0x28, 0x1B, 0x2B, 0x4A, 0x28, 0x1B, 0x37, 0x4A, 0x28, 0x1B, + 0x37, 0x4A, 0x28, 0x1B, 0x32, 0x4A, 0x28, 0x1B, 0x2D, 0x4A, 0x28, 0x1B, 0x1B, + 0x4B, 0x6B, 0x65, 0x45, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x72, 0x52, 0x4A, 0x28, + 0x1B, 0x75, 0x55, 0x4A, 0x28, 0x1B, 0x65, 0x45, 0x4A, 0x28, 0x1B, 0x2B, 0x4A, + 0x28, 0x1B, 0x34, 0x4A, 0x28, 0x1B, 0x38, 0x4A, 0x28, 0x1B, 0x32, 0x4A, 0x28, + 0x1B, 0x2D, 0x4A, 0x28, 0x1B, 0x73, 0x53, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x72, + 0x52, 0x4A, 0x28, 0x1B, 0x75, 0x55, 0x4A, 0x28, 0x1B, 0x65, 0x45, 0x4A, 0x28, + 0x1B, 0x2B, 0x4A, 0x28, 0x1B, 0x38, 0x4A, 0x28, 0x1B, 0x37, 0x4A, 0x28, 0x1B, + 0x32, 0x4A, 0x28, 0x1B, 0x2D, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x72, 0x52, 0x4A, + 0x28, 0x1B, 0x75, 0x55, 0x4A, 0x28, 0x1B, 0x65, 0x45, 0x4A, 0x28, 0x1B, 0x2B, + 0x4A, 0x28, 0x1B, 0x37, 0x4A, 0x28, 0x1B, 0x39, 0x4A, 0x28, 0x1B, 0x32, 0x4A, + 0x28, 0x1B, 0x2D, 0x4A, 0x28, 0x1B, 0x1B, 0x49, 0x69, 0x72, 0x52, 0x4A, 0x28, + 0x4A, 0x28, 0x1B, 0x72, 0x52, 0x4A, 0x28, 0x1B, 0x75, 0x55, 0x4A, 0x28, 0x1B, + 0x65, 0x45, 0x4A, 0x28, 0x1B, 0x2B, 0x4A, 0x28, 0x1B, 0x35, 0x4A, 0x28, 0x1B, + 0x38, 0x4A, 0x28, 0x1B, 0x32, 0x4A, 0x28, 0x1B, 0x2D, 0x4A, 0x28, 0x1B, 0x62, + 0x42, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x72, 0x52, 0x4A, 0x28, 0x1B, 0x75, 0x55, + 0x4A, 0x28, 0x1B, 0x65, 0x45, 0x4A, 0x28, 0x1B, 0x2B, 0x4A, 0x28, 0x1B, 0x30, + 0x4A, 0x28, 0x1B, 0x30, 0x4A, 0x28, 0x1B, 0x35, 0x4A, 0x28, 0x1B, 0x2D, 0x4A, + 0x28, 0x1B, 0x6C, 0x4C, 0x4A, 0x28, 0x1B, 0x61, 0x41, 0x4A, 0x28, 0x1B, 0x6E, + 0x4E, 0x4A, 0x28, 0x1B, 0x6F, 0x4F, 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28, + 0x1B, 0x74, 0x54, 0x4A, 0x28, 0x1B, 0x61, 0x41, 0x4A, 0x28, 0x1B, 0x6E, 0x4E, + 0x4A, 0x28, 0x1B, 0x72, 0x52, 0x4A, 0x28, 0x1B, 0x65, 0x45, 0x4A, 0x28, 0x1B, + 0x74, 0x54, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x72, 0x52, 0x4A, 0x28, 0x1B, 0x75, + 0x55, 0x4A, 0x28, 0x1B, 0x65, 0x45, 0x4A, 0x28, 0x1B, 0x2B, 0x4A, 0x28, 0x1B, + 0x31, 0x4A, 0x28, 0x1B, 0x37, 0x4A, 0x28, 0x1B, 0x38, 0x4A, 0x28, 0x1B, 0x2D, + 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x72, 0x52, 0x4A, 0x28, 0x1B, 0x75, 0x55, 0x4A, + 0x28, 0x1B, 0x65, 0x45, 0x4A, 0x28, 0x1B, 0x2B, 0x4A, 0x28, 0x1B, 0x30, 0x4A, + 0x28, 0x1B, 0x38, 0x4A, 0x28, 0x1B, 0x32, 0x4A, 0x28, 0x1B, 0x2D, 0x4A, 0x28, + 0x1B, 0x1B, 0x1B, 0x74, 0x73, 0x6E, 0x54, 0x53, 0x4E, 0x4A, 0x28, 0x4A, 0x28, + 0x1B, 0x6E, 0x4E, 0x4A, 0x28, 0x1B, 0x61, 0x41, 0x4A, 0x28, 0x1B, 0x6B, 0x4B, + 0x4A, 0x28, 0x1B, 0x2D, 0x4A, 0x28, 0x1B, 0x70, 0x50, 0x4A, 0x28, 0x4A, 0x28, + 0x1B, 0x72, 0x52, 0x4A, 0x28, 0x1B, 0x75, 0x55, 0x4A, 0x28, 0x1B, 0x65, 0x45, + 0x4A, 0x28, 0x1B, 0x2D, 0x4A, 0x28, 0x1B, 0x2D, 0x4A, 0x28, 0x1B, 0x39, 0x4A, + 0x28, 0x1B, 0x6E, 0x4E, 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28, 0x1B, 0x74, + 0x54, 0x4A, 0x28, 0x1B, 0x61, 0x41, 0x4A, 0x28, 0x6F, 0x4F, 0x4A, 0x28, 0x65, + 0x45, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x72, 0x52, 0x4A, 0x28, 0x1B, 0x75, 0x55, + 0x4A, 0x28, 0x1B, 0x65, 0x45, 0x4A, 0x28, 0x1B, 0x2B, 0x4A, 0x28, 0x1B, 0x37, + 0x4A, 0x28, 0x1B, 0x33, 0x4A, 0x28, 0x1B, 0x2D, 0x4A, 0x28, 0x1B, 0x73, 0x53, + 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, + 0x75, 0x73, 0x6E, 0x6C, 0x6A, 0x69, 0x67, 0x66, 0x65, 0x64, 0x63, 0x55, 0x53, + 0x4E, 0x4C, 0x4A, 0x49, 0x47, 0x46, 0x45, 0x44, 0x43, 0x4A, 0x28, 0x1B, 0x2D, + 0x4A, 0x28, 0x00, 0x1B, 0x63, 0x43, 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28, + 0x1B, 0x64, 0x44, 0x4A, 0x28, 0x1B, 0x63, 0x43, 0x4A, 0x28, 0x4A, 0x28, 0x1B, + 0x31, 0x4A, 0x28, 0x1B, 0x31, 0x4A, 0x28, 0x1B, 0x2D, 0x4A, 0x28, 0x1B, 0x61, + 0x41, 0x4A, 0x28, 0x1B, 0x6D, 0x4D, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x32, 0x4A, + 0x28, 0x1B, 0x39, 0x4A, 0x28, 0x1B, 0x5F, 0x4A, 0x28, 0x1B, 0x74, 0x54, 0x4A, + 0x28, 0x1B, 0x6F, 0x4F, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B, + 0x68, 0x48, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x74, 0x6B, 0x6A, 0x63, 0x54, 0x4B, + 0x4A, 0x43, 0x4A, 0x28, 0x1B, 0x74, 0x54, 0x2D, 0x4A, 0x28, 0x1B, 0x63, 0x43, + 0x4A, 0x28, 0x5F, 0x4A, 0x28, 0x1B, 0x72, 0x52, 0x4A, 0x28, 0x1B, 0x6F, 0x4F, + 0x4A, 0x28, 0x1B, 0x66, 0x46, 0x4A, 0x28, 0x1B, 0x5F, 0x4A, 0x28, 0x1B, 0x74, + 0x54, 0x4A, 0x28, 0x1B, 0x61, 0x41, 0x4A, 0x28, 0x1B, 0x6D, 0x4D, 0x4A, 0x28, + 0x1B, 0x72, 0x52, 0x4A, 0x28, 0x1B, 0x6F, 0x4F, 0x4A, 0x28, 0x1B, 0x66, 0x46, + 0x4A, 0x28, 0x1B, 0x5F, 0x4A, 0x28, 0x1B, 0x64, 0x44, 0x4A, 0x28, 0x1B, 0x65, + 0x45, 0x4A, 0x28, 0x1B, 0x6B, 0x4B, 0x4A, 0x28, 0x1B, 0x63, 0x43, 0x4A, 0x28, + 0x1B, 0x61, 0x41, 0x4A, 0x28, 0x1B, 0x70, 0x50, 0x4A, 0x28, 0x1B, 0x5F, 0x4A, + 0x28, 0x1B, 0x65, 0x45, 0x4A, 0x28, 0x1B, 0x64, 0x44, 0x4A, 0x28, 0x1B, 0x6F, + 0x4F, 0x4A, 0x28, 0x1B, 0x63, 0x43, 0x4A, 0x28, 0x1B, 0x5F, 0x4A, 0x28, 0x1B, + 0x78, 0x58, 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28, 0x1B, 0x6E, 0x4E, 0x4A, + 0x28, 0x1B, 0x75, 0x55, 0x4A, 0x28, 0x1B, 0x5F, 0x4A, 0x28, 0x1B, 0x64, 0x44, + 0x4A, 0x28, 0x1B, 0x65, 0x45, 0x4A, 0x28, 0x1B, 0x64, 0x44, 0x4A, 0x28, 0x1B, + 0x6E, 0x4E, 0x4A, 0x28, 0x1B, 0x65, 0x45, 0x4A, 0x28, 0x1B, 0x74, 0x54, 0x4A, + 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x78, 0x75, 0x6C, 0x63, 0x62, 0x58, 0x55, + 0x4C, 0x43, 0x42, 0x4A, 0x28, 0x2D, 0x4A, 0x28, 0x1B, 0x32, 0x4A, 0x28, 0x1B, + 0x31, 0x4A, 0x28, 0x1B, 0x33, 0x4A, 0x28, 0x1B, 0x32, 0x4A, 0x28, 0x1B, 0x4B, + 0x6B, 0x5F, 0x32, 0x4A, 0x28, 0x00, 0x1B, 0x6B, 0x4B, 0x4A, 0x28, 0x1B, 0x65, + 0x45, 0x4A, 0x28, 0x1B, 0x65, 0x45, 0x4A, 0x28, 0x1B, 0x1B, 0x72, 0x62, 0x52, + 0x42, 0x4A, 0x28, 0x2D, 0x4A, 0x28, 0x1B, 0x70, 0x65, 0x50, 0x45, 0x4A, 0x28, + 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x1B, 0x39, 0x36, 0x31, 0x30, 0x4A, 0x28, 0x4A, + 0x28, 0x00, 0x1B, 0x00, 0x1B, 0x38, 0x32, 0x37, 0x35, 0x31, 0x30, 0x4A, 0x28, + 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, + 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, + 0x1B, 0x39, 0x38, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x30, 0x4A, 0x28, 0x4A, + 0x28, 0x1B, 0x30, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x35, 0x4A, 0x28, 0x1B, 0x1B, + 0x1B, 0x32, 0x31, 0x30, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x00, 0x1B, 0x00, + 0x1B, 0x1B, 0x1B, 0x39, 0x34, 0x36, 0x37, 0x38, 0x35, 0x33, 0x32, 0x31, 0x4A, + 0x28, 0x1B, 0x2D, 0x4A, 0x28, 0x1B, 0x61, 0x41, 0x4A, 0x28, 0x1B, 0x6E, 0x4E, + 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, + 0x28, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x39, 0x38, 0x35, + 0x34, 0x32, 0x31, 0x30, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, + 0x28, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x34, 0x36, 0x35, 0x33, 0x32, + 0x31, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x36, + 0x35, 0x30, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x38, 0x37, + 0x35, 0x33, 0x30, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x32, 0x4A, 0x28, 0x4A, 0x28, + 0x1B, 0x38, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B, + 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x39, 0x38, 0x37, 0x36, 0x34, 0x31, 0x4A, 0x28, + 0x4A, 0x28, 0x1B, 0x35, 0x4A, 0x28, 0x1B, 0x33, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, + 0x1B, 0x1B, 0x37, 0x33, 0x32, 0x31, 0x30, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x34, + 0x4A, 0x28, 0x1B, 0x36, 0x35, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x30, 0x4A, 0x28, + 0x1B, 0x30, 0x34, 0x35, 0x37, 0x4A, 0x28, 0x1B, 0x1B, 0x39, 0x37, 0x38, 0x35, + 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x32, 0x4A, 0x28, 0x1B, 0x37, 0x4A, + 0x28, 0x1B, 0x1B, 0x37, 0x36, 0x33, 0x30, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x37, + 0x39, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x1B, + 0x1B, 0x1B, 0x37, 0x36, 0x35, 0x34, 0x4A, 0x28, 0x1B, 0x1B, 0x32, 0x39, 0x33, + 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x30, 0x35, + 0x33, 0x32, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x32, 0x4A, 0x28, 0x4A, 0x28, 0x4A, + 0x28, 0x1B, 0x1B, 0x35, 0x34, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x37, 0x4A, 0x28, + 0x4A, 0x28, 0x1B, 0x34, 0x4A, 0x28, 0x1B, 0x33, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, + 0x1B, 0x1B, 0x37, 0x34, 0x33, 0x31, 0x30, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x35, + 0x4A, 0x28, 0x1B, 0x39, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, + 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x34, 0x33, 0x32, 0x31, 0x4A, 0x28, 0x1B, 0x32, + 0x4A, 0x28, 0x1B, 0x1B, 0x32, 0x31, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B, + 0x1B, 0x37, 0x33, 0x32, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, + 0x28, 0x00, 0x1B, 0x30, 0x32, 0x33, 0x35, 0x36, 0x39, 0x38, 0x34, 0x31, 0x4A, + 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x38, 0x39, + 0x37, 0x36, 0x35, 0x33, 0x31, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, + 0x1B, 0x00, 0x1B, 0x00, 0x1B, 0x34, 0x36, 0x35, 0x33, 0x4A, 0x28, 0x4A, 0x28, + 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x00, 0x33, 0x32, 0x36, 0x37, 0x39, + 0x34, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, + 0x1B, 0x1B, 0x1B, 0x1B, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x30, 0x4A, + 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x30, 0x74, 0x54, + 0x39, 0x38, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x4A, 0x28, 0x31, 0x30, + 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x1B, 0x33, 0x30, 0x4A, 0x28, 0x4A, + 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x39, 0x38, + 0x37, 0x35, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x1B, 0x36, 0x30, 0x4A, + 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x1B, 0x33, 0x32, 0x4A, 0x28, 0x4A, 0x28, + 0x1B, 0x30, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, + 0x37, 0x33, 0x32, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, + 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, + 0x39, 0x38, 0x37, 0x36, 0x35, 0x33, 0x31, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, + 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B, + 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, + 0x31, 0x30, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x39, + 0x38, 0x37, 0x35, 0x34, 0x33, 0x32, 0x30, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, + 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, + 0x1B, 0x1B, 0x1B, 0x1B, 0x39, 0x38, 0x35, 0x34, 0x32, 0x31, 0x30, 0x4A, 0x28, + 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B, + 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x4A, 0x28, + 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, + 0x1B, 0x1B, 0x38, 0x37, 0x35, 0x33, 0x30, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, + 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x39, 0x38, 0x37, 0x36, 0x4A, + 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x33, 0x32, 0x31, 0x30, 0x4A, 0x28, 0x4A, 0x28, + 0x1B, 0x39, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B, + 0x1B, 0x1B, 0x1B, 0x37, 0x36, 0x35, 0x34, 0x4A, 0x28, 0x1B, 0x1B, 0x39, 0x33, + 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x35, 0x33, + 0x32, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x32, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, + 0x1B, 0x1B, 0x35, 0x34, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x37, 0x4A, 0x28, 0x1B, + 0x1B, 0x1B, 0x1B, 0x34, 0x33, 0x31, 0x30, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x31, + 0x4A, 0x28, 0x1B, 0x36, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B, + 0x1B, 0x1B, 0x36, 0x35, 0x33, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x34, 0x4A, 0x28, + 0x1B, 0x1B, 0x34, 0x30, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x39, + 0x38, 0x35, 0x34, 0x31, 0x30, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x30, 0x4A, 0x28, + 0x1B, 0x37, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x32, 0x4A, 0x28, 0x4A, 0x28, 0x1B, + 0x38, 0x4A, 0x28, 0x1B, 0x1B, 0x34, 0x31, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x35, + 0x4A, 0x28, 0x1B, 0x33, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x37, 0x33, 0x32, 0x4A, + 0x28, 0x4A, 0x28, 0x1B, 0x34, 0x4A, 0x28, 0x1B, 0x35, 0x4A, 0x28, 0x4A, 0x28, + 0x1B, 0x30, 0x4A, 0x28, 0x1B, 0x37, 0x4A, 0x28, 0x1B, 0x1B, 0x38, 0x35, 0x4A, + 0x28, 0x4A, 0x28, 0x1B, 0x32, 0x4A, 0x28, 0x1B, 0x37, 0x4A, 0x28, 0x1B, 0x33, + 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x34, 0x4A, 0x28, 0x1B, 0x33, 0x4A, 0x28, 0x1B, + 0x37, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x35, 0x4A, 0x28, 0x1B, 0x39, 0x4A, 0x28, + 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x34, + 0x33, 0x32, 0x31, 0x4A, 0x28, 0x1B, 0x32, 0x4A, 0x28, 0x1B, 0x1B, 0x32, 0x31, + 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x36, 0x35, 0x33, 0x32, 0x31, + 0x30, 0x4A, 0x28, 0x1B, 0x64, 0x44, 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28, + 0x1B, 0x73, 0x53, 0x4A, 0x28, 0x1B, 0x63, 0x43, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, + 0x63, 0x43, 0x39, 0x38, 0x37, 0x35, 0x34, 0x33, 0x32, 0x31, 0x30, 0x2D, 0x4A, + 0x28, 0x1B, 0x6D, 0x4D, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x2D, 0x4A, 0x28, 0x1B, + 0x73, 0x53, 0x4A, 0x28, 0x1B, 0x63, 0x43, 0x4A, 0x28, 0x1B, 0x75, 0x55, 0x4A, + 0x28, 0x1B, 0x2D, 0x4A, 0x28, 0x1B, 0x36, 0x4A, 0x28, 0x1B, 0x34, 0x4A, 0x28, + 0x1B, 0x36, 0x4A, 0x28, 0x1B, 0x30, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x2D, 0x4A, + 0x28, 0x1B, 0x6E, 0x4E, 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28, 0x1B, 0x74, + 0x54, 0x4A, 0x28, 0x1B, 0x61, 0x41, 0x4A, 0x28, 0x1B, 0x6C, 0x4C, 0x4A, 0x28, + 0x1B, 0x2D, 0x4A, 0x28, 0x1B, 0x31, 0x4A, 0x28, 0x1B, 0x2E, 0x4A, 0x28, 0x1B, + 0x33, 0x4A, 0x28, 0x1B, 0x2D, 0x4A, 0x28, 0x1B, 0x73, 0x53, 0x4A, 0x28, 0x1B, + 0x77, 0x57, 0x4A, 0x28, 0x1B, 0x6F, 0x4F, 0x4A, 0x28, 0x1B, 0x64, 0x44, 0x4A, + 0x28, 0x1B, 0x6E, 0x4E, 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28, 0x1B, 0x77, + 0x57, 0x4A, 0x28, 0x1B, 0x33, 0x35, 0x2D, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x2D, + 0x4A, 0x28, 0x1B, 0x6E, 0x4E, 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28, 0x1B, + 0x74, 0x54, 0x4A, 0x28, 0x1B, 0x61, 0x41, 0x4A, 0x28, 0x1B, 0x6C, 0x4C, 0x4A, + 0x28, 0x1B, 0x2D, 0x4A, 0x28, 0x1B, 0x73, 0x53, 0x4A, 0x28, 0x1B, 0x77, 0x57, + 0x4A, 0x28, 0x1B, 0x6F, 0x4F, 0x4A, 0x28, 0x1B, 0x64, 0x44, 0x4A, 0x28, 0x1B, + 0x6E, 0x4E, 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28, 0x1B, 0x77, 0x57, 0x4A, + 0x28, 0x1B, 0x2D, 0x4A, 0x28, 0x00, 0x1B, 0x00, 0x1B, 0x36, 0x33, 0x34, 0x39, + 0x37, 0x38, 0x35, 0x32, 0x31, 0x4A, 0x28, 0x1B, 0x2D, 0x4A, 0x28, 0x1B, 0x39, + 0x4A, 0x28, 0x1B, 0x35, 0x4A, 0x28, 0x1B, 0x38, 0x4A, 0x28, 0x4A, 0x28, 0x4A, + 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x33, + 0x34, 0x32, 0x31, 0x30, 0x4A, 0x28, 0x1B, 0x36, 0x35, 0x31, 0x4A, 0x28, 0x1B, + 0x2D, 0x4A, 0x28, 0x1B, 0x72, 0x52, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x69, 0x49, + 0x38, 0x31, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x75, 0x55, 0x4A, 0x28, 0x1B, 0x2D, + 0x4A, 0x28, 0x1B, 0x36, 0x4A, 0x28, 0x1B, 0x34, 0x4A, 0x28, 0x4A, 0x28, 0x1B, + 0x39, 0x4A, 0x28, 0x1B, 0x39, 0x4A, 0x28, 0x1B, 0x31, 0x4A, 0x28, 0x1B, 0x3A, + 0x4A, 0x28, 0x1B, 0x76, 0x56, 0x4A, 0x28, 0x1B, 0x72, 0x52, 0x4A, 0x28, 0x1B, + 0x69, 0x49, 0x4A, 0x28, 0x1B, 0x2E, 0x4A, 0x28, 0x1B, 0x36, 0x4A, 0x28, 0x1B, + 0x34, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x38, 0x4A, 0x28, 0x1B, 0x39, 0x4A, 0x28, + 0x1B, 0x31, 0x4A, 0x28, 0x1B, 0x35, 0x3A, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x38, + 0x4A, 0x28, 0x1B, 0x39, 0x4A, 0x28, 0x1B, 0x31, 0x4A, 0x28, 0x1B, 0x3A, 0x4A, + 0x28, 0x4A, 0x28, 0x1B, 0x38, 0x4A, 0x28, 0x1B, 0x39, 0x4A, 0x28, 0x1B, 0x31, + 0x4A, 0x28, 0x1B, 0x3A, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x38, 0x4A, 0x28, 0x1B, + 0x39, 0x4A, 0x28, 0x1B, 0x31, 0x4A, 0x28, 0x1B, 0x3A, 0x4A, 0x28, 0x4A, 0x28, + 0x1B, 0x38, 0x4A, 0x28, 0x1B, 0x39, 0x4A, 0x28, 0x1B, 0x31, 0x4A, 0x28, 0x1B, + 0x3A, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x38, 0x4A, 0x28, 0x1B, 0x39, 0x4A, 0x28, + 0x1B, 0x31, 0x4A, 0x28, 0x1B, 0x3A, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x38, 0x4A, + 0x28, 0x1B, 0x39, 0x4A, 0x28, 0x1B, 0x31, 0x4A, 0x28, 0x1B, 0x3A, 0x4A, 0x28, + 0x38, 0x4A, 0x28, 0x1B, 0x39, 0x4A, 0x28, 0x1B, 0x31, 0x4A, 0x28, 0x1B, 0x3A, + 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x38, 0x4A, 0x28, 0x1B, 0x39, 0x4A, 0x28, 0x1B, + 0x31, 0x4A, 0x28, 0x1B, 0x3A, 0x4A, 0x28, 0x00, 0x1B, 0x00, 0x1B, 0x00, 0x1B, + 0x00, 0x1B, 0x00, 0x1B, 0x00, 0x1B, 0x00, 0x1B, 0x00, 0x1B, 0x00, 0x1B, 0x39, + 0x38, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x4A, 0x28, 0x1B, 0x2D, 0x4A, + 0x28, 0x1B, 0x39, 0x4A, 0x28, 0x1B, 0x35, 0x4A, 0x28, 0x1B, 0x38, 0x4A, 0x28, + 0x1B, 0x1B, 0x38, 0x36, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x5F, 0x36, 0x2D, 0x4A, + 0x28, 0x1B, 0x6F, 0x4F, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x73, 0x62, 0x61, 0x53, + 0x42, 0x41, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x30, 0x4A, 0x28, 0x1B, 0x32, 0x4A, + 0x28, 0x1B, 0x30, 0x4A, 0x28, 0x1B, 0x58, 0x78, 0x4A, 0x28, 0x1B, 0x5F, 0x4A, + 0x28, 0x1B, 0x73, 0x53, 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28, 0x2D, 0x4A, + 0x28, 0x1B, 0x38, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x61, 0x41, 0x4A, 0x28, 0x1B, + 0x65, 0x45, 0x4A, 0x28, 0x1B, 0x1B, 0x72, 0x69, 0x52, 0x49, 0x4A, 0x28, 0x4A, + 0x28, 0x1B, 0x30, 0x4A, 0x28, 0x1B, 0x36, 0x4A, 0x28, 0x1B, 0x35, 0x4A, 0x28, + 0x1B, 0x5F, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x38, 0x4A, 0x28, 0x1B, 0x39, 0x4A, + 0x28, 0x1B, 0x31, 0x4A, 0x28, 0x1B, 0x2D, 0x4A, 0x28, 0x1B, 0x31, 0x4A, 0x28, + 0x1B, 0x30, 0x4A, 0x28, 0x1B, 0x36, 0x4A, 0x28, 0x1B, 0x35, 0x4A, 0x28, 0x1B, + 0x5F, 0x4A, 0x28, 0x1B, 0x63, 0x43, 0x4A, 0x28, 0x1B, 0x1B, 0x63, 0x5F, 0x43, + 0x4A, 0x28, 0x1B, 0x1B, 0x73, 0x6F, 0x53, 0x4F, 0x4A, 0x28, 0x4A, 0x28, 0x1B, + 0x31, 0x32, 0x33, 0x34, 0x35, 0x2D, 0x4A, 0x28, 0x1B, 0x6E, 0x4E, 0x4A, 0x28, + 0x1B, 0x69, 0x49, 0x4A, 0x28, 0x1B, 0x74, 0x54, 0x4A, 0x28, 0x1B, 0x31, 0x32, + 0x33, 0x34, 0x35, 0x61, 0x41, 0x4A, 0x28, 0x33, 0x4A, 0x28, 0x4A, 0x28, 0x1B, + 0x6A, 0x4A, 0x4A, 0x28, 0x1B, 0x6E, 0x4E, 0x4A, 0x28, 0x1B, 0x61, 0x41, 0x4A, + 0x28, 0x1B, 0x6B, 0x4B, 0x4A, 0x28, 0x1B, 0x1B, 0x39, 0x5F, 0x4A, 0x28, 0x1B, + 0x73, 0x53, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x72, 0x52, 0x4A, 0x28, 0x1B, 0x75, + 0x55, 0x4A, 0x28, 0x1B, 0x65, 0x45, 0x4A, 0x28, 0x1B, 0x2B, 0x4A, 0x28, 0x1B, + 0x30, 0x4A, 0x28, 0x1B, 0x35, 0x4A, 0x28, 0x1B, 0x38, 0x4A, 0x28, 0x1B, 0x2D, + 0x4A, 0x28, 0x1B, 0x6C, 0x4C, 0x4A, 0x28, 0x1B, 0x61, 0x41, 0x4A, 0x28, 0x1B, + 0x75, 0x55, 0x4A, 0x28, 0x1B, 0x67, 0x47, 0x4A, 0x28, 0x1B, 0x6E, 0x4E, 0x4A, + 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28, 0x1B, 0x6C, 0x4C, 0x4A, 0x28, 0x1B, 0x69, + 0x49, 0x4A, 0x28, 0x1B, 0x74, 0x54, 0x4A, 0x28, 0x1B, 0x6C, 0x4C, 0x4A, 0x28, + 0x1B, 0x75, 0x55, 0x4A, 0x28, 0x1B, 0x6D, 0x4D, 0x4A, 0x28, 0x1B, 0x2D, 0x4A, + 0x28, 0x1B, 0x63, 0x43, 0x4A, 0x28, 0x38, 0x6F, 0x4F, 0x4A, 0x28, 0x5F, 0x4A, + 0x28, 0x1B, 0x74, 0x54, 0x4A, 0x28, 0x1B, 0x66, 0x46, 0x4A, 0x28, 0x1B, 0x69, + 0x49, 0x4A, 0x28, 0x1B, 0x68, 0x48, 0x4A, 0x28, 0x2D, 0x4A, 0x28, 0x1B, 0x73, + 0x53, 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28, 0x32, 0x2D, 0x4A, 0x28, 0x1B, + 0x73, 0x53, 0x4A, 0x28, 0x73, 0x53, 0x4A, 0x28, 0x1B, 0x61, 0x41, 0x4A, 0x28, + 0x1B, 0x2D, 0x4A, 0x28, 0x6C, 0x62, 0x4C, 0x42, 0x2D, 0x4A, 0x28, 0x1B, 0x36, + 0x4A, 0x28, 0x6C, 0x62, 0x4C, 0x42, 0x2D, 0x4A, 0x28, 0x1B, 0x32, 0x4A, 0x28, + 0x1B, 0x1B, 0x38, 0x33, 0x31, 0x4A, 0x28, 0x1B, 0x38, 0x33, 0x31, 0x2D, 0x4A, + 0x28, 0x1B, 0x66, 0x46, 0x4A, 0x28, 0x1B, 0x00, 0x1B, 0x1B, 0x74, 0x73, 0x63, + 0x54, 0x53, 0x43, 0x4A, 0x28, 0x39, 0x31, 0x4A, 0x28, 0x1B, 0x2D, 0x4A, 0x28, + 0x1B, 0x73, 0x53, 0x4A, 0x28, 0x1B, 0x77, 0x57, 0x4A, 0x28, 0x1B, 0x6F, 0x4F, + 0x4A, 0x28, 0x1B, 0x64, 0x44, 0x4A, 0x28, 0x1B, 0x6E, 0x4E, 0x4A, 0x28, 0x1B, + 0x69, 0x49, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, + 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x78, 0x77, 0x75, 0x74, + 0x73, 0x72, 0x70, 0x6D, 0x6C, 0x6B, 0x6A, 0x69, 0x68, 0x67, 0x65, 0x63, 0x62, + 0x61, 0x58, 0x57, 0x55, 0x54, 0x53, 0x52, 0x50, 0x4D, 0x4C, 0x4B, 0x4A, 0x49, + 0x48, 0x47, 0x45, 0x43, 0x42, 0x41, 0x39, 0x38, 0x34, 0x78, 0x77, 0x75, 0x74, + 0x73, 0x72, 0x70, 0x6D, 0x6C, 0x6B, 0x6A, 0x69, 0x68, 0x67, 0x65, 0x63, 0x62, + 0x61, 0x58, 0x57, 0x55, 0x54, 0x53, 0x52, 0x50, 0x4D, 0x4C, 0x4B, 0x4A, 0x49, + 0x48, 0x47, 0x45, 0x43, 0x42, 0x41, 0x39, 0x38, 0x34, 0x4A, 0x42, 0x6E, 0x4E, + 0x69, 0x49, 0x64, 0x44, 0x6F, 0x4F, 0x63, 0x43, 0x6E, 0x4E, 0x65, 0x45, 0x2D, + 0x64, 0x44, 0x72, 0x52, 0x61, 0x41, 0x64, 0x44, 0x6E, 0x4E, 0x61, 0x41, 0x74, + 0x54, 0x73, 0x53, 0x2D, 0x65, 0x45, 0x62, 0x42, 0x38, 0x36, 0x39, 0x31, 0x2D, + 0x34, 0x2E, 0x33, 0x78, 0x58, 0x5F, 0x69, 0x49, 0x69, 0x49, 0x62, 0x42, 0x30, + 0x37, 0x2D, 0x6F, 0x4F, 0x69, 0x49, 0x43, 0x63, 0x6D, 0x4D, 0x61, 0x41, 0x73, + 0x53, 0x6F, 0x4F, 0x63, 0x43, 0x73, 0x53, 0x6B, 0x4B, 0x68, 0x48, 0x2D, 0x35, + 0x67, 0x47, 0x32, 0x35, 0x34, 0x31, 0x39, 0x38, 0x31, 0x30, 0x30, 0x64, 0x44, + 0x69, 0x49, 0x73, 0x53, 0x65, 0x45, 0x6E, 0x4E, 0x32, 0x30, 0x31, 0x33, 0x39, + 0x38, 0x37, 0x36, 0x35, 0x31, 0x37, 0x30, 0x33, 0x32, 0x36, 0x38, 0x39, 0x37, + 0x30, 0x33, 0x31, 0x30, 0x69, 0x67, 0x61, 0x49, 0x47, 0x41, 0x64, 0x44, 0x72, + 0x52, 0x61, 0x41, 0x64, 0x44, 0x6E, 0x4E, 0x61, 0x41, 0x74, 0x54, 0x73, 0x53, + 0x65, 0x45, 0x62, 0x42, 0x63, 0x43, 0x6F, 0x4F, 0x35, 0x67, 0x47, 0x73, 0x53, + 0x65, 0x45, 0x6E, 0x4E, 0x61, 0x41, 0x70, 0x50, 0x61, 0x41, 0x6A, 0x4A, 0x54, + 0x74, 0x6D, 0x4D, 0x66, 0x46, 0x64, 0x44, 0x6B, 0x4B, 0x4B, 0x6B, 0x54, 0x74, + 0x70, 0x50, 0x63, 0x43, 0x31, 0x33, 0x4B, 0x6B, 0x32, 0x6E, 0x4E, 0x61, 0x41, + 0x6B, 0x4B, 0x61, 0x41, 0x74, 0x54, 0x61, 0x41, 0x6B, 0x4B, 0x68, 0x48, 0x74, + 0x54, 0x64, 0x44, 0x69, 0x49, 0x77, 0x57, 0x66, 0x46, 0x6E, 0x4E, 0x61, 0x41, + 0x6D, 0x4D, 0x4F, 0x6F, 0x72, 0x52, 0x6C, 0x4C, 0x30, 0x39, 0x34, 0x32, 0x61, + 0x41, 0x68, 0x48, 0x31, 0x30, 0x37, 0x38, 0x39, 0x36, 0x35, 0x32, 0x39, 0x38, + 0x37, 0x30, 0x35, 0x30, 0x54, 0x74, 0x32, 0x31, 0x39, 0x38, 0x34, 0x6D, 0x4D, + 0x38, 0x32, 0x31, 0x33, 0x32, 0x62, 0x42, 0x67, 0x47, 0x31, 0x39, 0x35, 0x69, + 0x49, 0x6C, 0x4C, 0x6C, 0x4C, 0x69, 0x49, 0x72, 0x52, 0x65, 0x45, 0x65, 0x45, + 0x65, 0x45, 0x72, 0x52, 0x62, 0x42, 0x45, 0x65, 0x72, 0x52, 0x79, 0x59, 0x72, + 0x52, 0x31, 0x32, 0x33, 0x34, 0x35, 0x68, 0x67, 0x63, 0x61, 0x48, 0x47, 0x43, + 0x41, 0x6E, 0x4E, 0x69, 0x49, 0x74, 0x54, 0x61, 0x41, 0x38, 0x38, 0x6C, 0x4C, + 0x38, 0x35, 0x6F, 0x4F, 0x6D, 0x62, 0x4D, 0x42, 0x38, 0x38, 0x39, 0x31, 0x31, + 0x30, 0x36, 0x35, 0x63, 0x43, 0x69, 0x49, 0x69, 0x49, 0x74, 0x54, 0x6C, 0x4C, + 0x61, 0x41, 0x62, 0x42, 0x35, 0x61, 0x41, 0x75, 0x55, 0x67, 0x47, 0x6E, 0x4E, + 0x69, 0x49, 0x6C, 0x4C, 0x69, 0x49, 0x74, 0x54, 0x6C, 0x4C, 0x75, 0x55, 0x6D, + 0x4D, 0x65, 0x45, 0x72, 0x52, 0x62, 0x42, 0x65, 0x45, 0x68, 0x48, 0x6E, 0x4E, + 0x69, 0x49, 0x74, 0x54, 0x61, 0x41, 0x6C, 0x4C, 0x33, 0x34, 0x65, 0x45, 0x67, + 0x47, 0x61, 0x41, 0x70, 0x50, 0x65, 0x45, 0x64, 0x44, 0x6F, 0x4F, 0x32, 0x30, + 0x35, 0x38, 0x63, 0x43, 0x36, 0x35, 0x37, 0x70, 0x50, 0x38, 0x37, 0x69, 0x49, + 0x6A, 0x4A, 0x54, 0x74, 0x66, 0x46, 0x69, 0x49, 0x32, 0x36, 0x53, 0x73, 0x64, + 0x44, 0x6F, 0x4F, 0x63, 0x43, 0x42, 0x62, 0x4C, 0x6C, 0x42, 0x62, 0x4C, 0x6C, + 0x32, 0x36, 0x38, 0x33, 0x31, 0x66, 0x46, 0x69, 0x49, 0x35, 0x6E, 0x4E, 0x69, + 0x49, 0x74, 0x54, 0x61, 0x41, 0x6C, 0x4C, 0x31, 0x32, 0x31, 0x33, 0x73, 0x53, + 0x77, 0x57, 0x6F, 0x4F, 0x64, 0x44, 0x6E, 0x4E, 0x69, 0x49, 0x74, 0x6E, 0x54, + 0x4E, 0x69, 0x49, 0x68, 0x48, 0x63, 0x43, 0x73, 0x6F, 0x53, 0x4F, 0x73, 0x62, + 0x53, 0x42, 0x50, 0x70, 0x61, 0x41, 0x62, 0x42, 0x75, 0x55, 0x69, 0x49, 0x53, + 0x73, 0x64, 0x44, 0x69, 0x49, 0x6C, 0x4C, 0x6C, 0x4C, 0x69, 0x49, 0x72, 0x52, + 0x77, 0x75, 0x74, 0x73, 0x70, 0x6B, 0x69, 0x68, 0x67, 0x65, 0x62, 0x61, 0x57, + 0x55, 0x54, 0x53, 0x50, 0x4B, 0x49, 0x48, 0x47, 0x45, 0x42, 0x41, 0x38, 0x37, + 0x35, 0x34, 0x33, 0x30, 0x39, 0x32, 0x31, 0x2D, 0x69, 0x49, 0x73, 0x53, 0x63, + 0x43, 0x65, 0x45, 0x6F, 0x4F, 0x72, 0x52, 0x79, 0x77, 0x75, 0x74, 0x73, 0x72, + 0x6E, 0x69, 0x68, 0x67, 0x66, 0x65, 0x64, 0x63, 0x62, 0x61, 0x59, 0x57, 0x55, + 0x54, 0x53, 0x52, 0x4E, 0x49, 0x48, 0x47, 0x46, 0x45, 0x44, 0x43, 0x42, 0x41, + 0x69, 0x49, 0x6C, 0x4C, 0x6C, 0x4C, 0x69, 0x49, 0x72, 0x52, 0x2D, 0x72, 0x52, + 0x75, 0x55, 0x65, 0x45, 0x2B, 0x33, 0x37, 0x32, 0x72, 0x52, 0x75, 0x55, 0x65, + 0x45, 0x2B, 0x37, 0x37, 0x32, 0x2D, 0x2D, 0x72, 0x52, 0x75, 0x55, 0x65, 0x45, + 0x2B, 0x34, 0x38, 0x32, 0x2D, 0x72, 0x52, 0x75, 0x55, 0x65, 0x45, 0x2B, 0x38, + 0x37, 0x32, 0x72, 0x52, 0x75, 0x55, 0x65, 0x45, 0x2B, 0x37, 0x39, 0x32, 0x2D, + 0x2D, 0x72, 0x52, 0x75, 0x55, 0x65, 0x45, 0x2B, 0x35, 0x38, 0x32, 0x2D, 0x72, + 0x52, 0x75, 0x55, 0x65, 0x45, 0x2B, 0x30, 0x30, 0x35, 0x2D, 0x6C, 0x4C, 0x61, + 0x41, 0x6E, 0x4E, 0x6F, 0x4F, 0x69, 0x49, 0x74, 0x54, 0x61, 0x41, 0x6E, 0x4E, + 0x72, 0x52, 0x65, 0x45, 0x72, 0x52, 0x75, 0x55, 0x65, 0x45, 0x2B, 0x31, 0x37, + 0x38, 0x72, 0x52, 0x75, 0x55, 0x65, 0x45, 0x2B, 0x30, 0x38, 0x32, 0x2D, 0x2D, + 0x74, 0x54, 0x6E, 0x4E, 0x61, 0x41, 0x6B, 0x4B, 0x2D, 0x72, 0x52, 0x75, 0x55, + 0x65, 0x45, 0x2D, 0x2D, 0x39, 0x6E, 0x4E, 0x69, 0x49, 0x74, 0x54, 0x72, 0x52, + 0x75, 0x55, 0x65, 0x45, 0x2B, 0x37, 0x33, 0x2D, 0x73, 0x53, 0x65, 0x45, 0x6F, + 0x4F, 0x61, 0x41, 0x70, 0x50, 0x74, 0x73, 0x6E, 0x54, 0x53, 0x4E, 0x62, 0x42, + 0x49, 0x69, 0x72, 0x52, 0x73, 0x53, 0x4B, 0x6B, 0x65, 0x45, 0x79, 0x70, 0x59, + 0x50, 0x75, 0x73, 0x6E, 0x6C, 0x6A, 0x69, 0x67, 0x66, 0x65, 0x64, 0x63, 0x55, + 0x53, 0x4E, 0x4C, 0x4A, 0x49, 0x47, 0x46, 0x45, 0x44, 0x43, 0x00, 0x2D, 0x63, + 0x43, 0x69, 0x49, 0x64, 0x44, 0x31, 0x31, 0x2D, 0x61, 0x41, 0x32, 0x39, 0x5F, + 0x74, 0x54, 0x68, 0x48, 0x74, 0x6B, 0x6A, 0x63, 0x54, 0x4B, 0x4A, 0x43, 0x74, + 0x54, 0x2D, 0x5F, 0x72, 0x52, 0x6F, 0x4F, 0x66, 0x46, 0x5F, 0x74, 0x54, 0x61, + 0x41, 0x6D, 0x4D, 0x72, 0x52, 0x6F, 0x4F, 0x66, 0x46, 0x5F, 0x64, 0x44, 0x65, + 0x45, 0x6B, 0x4B, 0x63, 0x43, 0x61, 0x41, 0x70, 0x50, 0x5F, 0x65, 0x45, 0x64, + 0x44, 0x6F, 0x4F, 0x63, 0x43, 0x5F, 0x78, 0x58, 0x69, 0x49, 0x6E, 0x4E, 0x75, + 0x55, 0x5F, 0x64, 0x44, 0x65, 0x45, 0x64, 0x44, 0x6E, 0x4E, 0x65, 0x45, 0x74, + 0x54, 0x63, 0x43, 0x6F, 0x4F, 0x6D, 0x4D, 0x63, 0x43, 0x2D, 0x32, 0x31, 0x33, + 0x32, 0x00, 0x38, 0x6B, 0x4B, 0x65, 0x45, 0x65, 0x45, 0x4B, 0x6B, 0x5F, 0x32, + 0x00, 0xF8, 0x73, 0xD2, 0xC5, 0x66, 0xC5, 0x66, 0x2D, 0x00, 0x33, 0x31, 0x00, + 0x39, 0x36, 0x31, 0x30, 0x35, 0x30, 0x39, 0x38, 0x36, 0x35, 0x34, 0x33, 0x32, + 0x31, 0x30, 0x00, 0x37, 0x00, 0x38, 0x36, 0x32, 0x31, 0x30, 0x38, 0x32, 0x37, + 0x35, 0x31, 0x30, 0x39, 0x34, 0x36, 0x37, 0x38, 0x35, 0x33, 0x32, 0x31, 0x2D, + 0x61, 0x41, 0x36, 0x35, 0x30, 0x38, 0x32, 0x35, 0x33, 0x39, 0x38, 0x37, 0x36, + 0x34, 0x31, 0x38, 0x37, 0x35, 0x33, 0x30, 0x34, 0x36, 0x35, 0x33, 0x32, 0x31, + 0x39, 0x38, 0x35, 0x34, 0x32, 0x31, 0x30, 0x34, 0x30, 0x30, 0x34, 0x35, 0x37, + 0x36, 0x35, 0x32, 0x37, 0x37, 0x36, 0x35, 0x34, 0x37, 0x39, 0x34, 0x33, 0x37, + 0x35, 0x34, 0x32, 0x30, 0x35, 0x33, 0x32, 0x35, 0x34, 0x33, 0x32, 0x31, 0x32, + 0x39, 0x00, 0x32, 0x30, 0x32, 0x33, 0x35, 0x36, 0x39, 0x38, 0x34, 0x31, 0x00, + 0x36, 0x00, 0x30, 0x37, 0x38, 0x39, 0x00, 0x33, 0x32, 0x36, 0x37, 0x39, 0x34, + 0x34, 0x36, 0x35, 0x33, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x30, 0x38, + 0x39, 0x37, 0x36, 0x35, 0x33, 0x31, 0x37, 0x33, 0x32, 0x32, 0x31, 0x37, 0x34, + 0x33, 0x31, 0x30, 0x32, 0x39, 0x33, 0x37, 0x36, 0x33, 0x30, 0x39, 0x37, 0x38, + 0x35, 0x37, 0x33, 0x32, 0x31, 0x30, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, + 0x30, 0x39, 0x38, 0x37, 0x36, 0x35, 0x33, 0x31, 0x37, 0x33, 0x32, 0x30, 0x33, + 0x32, 0x36, 0x30, 0x39, 0x38, 0x37, 0x35, 0x33, 0x30, 0x39, 0x38, 0x37, 0x36, + 0x38, 0x37, 0x35, 0x33, 0x30, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x39, 0x38, + 0x35, 0x34, 0x32, 0x31, 0x30, 0x37, 0x36, 0x35, 0x34, 0x39, 0x37, 0x35, 0x34, + 0x32, 0x35, 0x33, 0x32, 0x31, 0x34, 0x36, 0x35, 0x33, 0x34, 0x30, 0x36, 0x34, + 0x33, 0x31, 0x30, 0x39, 0x33, 0x33, 0x32, 0x31, 0x30, 0x39, 0x38, 0x37, 0x35, + 0x34, 0x33, 0x32, 0x30, 0x30, 0x38, 0x32, 0x35, 0x33, 0x34, 0x31, 0x37, 0x34, + 0x30, 0x37, 0x35, 0x32, 0x37, 0x34, 0x33, 0x35, 0x34, 0x33, 0x32, 0x31, 0x32, + 0x39, 0x32, 0x31, 0x37, 0x33, 0x38, 0x35, 0x37, 0x33, 0x32, 0x39, 0x38, 0x35, + 0x34, 0x31, 0x30, 0x36, 0x35, 0x33, 0x32, 0x31, 0x30, 0x64, 0x44, 0x69, 0x49, + 0x73, 0x53, 0x63, 0x43, 0x31, 0x30, 0x30, 0x74, 0x54, 0x39, 0x38, 0x37, 0x36, + 0x35, 0x34, 0x33, 0x32, 0x31, 0x63, 0x43, 0x39, 0x38, 0x37, 0x35, 0x34, 0x33, + 0x32, 0x31, 0x30, 0x2D, 0x2D, 0x73, 0x53, 0x63, 0x43, 0x75, 0x55, 0x2D, 0x36, + 0x34, 0x36, 0x2D, 0x6E, 0x4E, 0x69, 0x49, 0x74, 0x54, 0x61, 0x41, 0x6C, 0x4C, + 0x2D, 0x31, 0x2E, 0x33, 0x2D, 0x73, 0x53, 0x77, 0x57, 0x6F, 0x4F, 0x64, 0x44, + 0x6E, 0x4E, 0x69, 0x49, 0x77, 0x57, 0x2D, 0x6E, 0x4E, 0x69, 0x49, 0x74, 0x54, + 0x61, 0x41, 0x6C, 0x4C, 0x2D, 0x73, 0x53, 0x77, 0x57, 0x6F, 0x4F, 0x64, 0x44, + 0x6E, 0x4E, 0x69, 0x49, 0x77, 0x57, 0x00, 0x2D, 0x00, 0x33, 0x35, 0x2D, 0x36, + 0x33, 0x34, 0x39, 0x37, 0x38, 0x35, 0x32, 0x31, 0x2D, 0x39, 0x35, 0x33, 0x34, + 0x32, 0x31, 0x30, 0x36, 0x35, 0x31, 0x2D, 0x72, 0x52, 0x38, 0x30, 0x75, 0x55, + 0x2D, 0x36, 0x39, 0x39, 0x31, 0x3A, 0x76, 0x56, 0x72, 0x52, 0x69, 0x49, 0x2E, + 0x36, 0x38, 0x39, 0x31, 0x38, 0x39, 0x31, 0x38, 0x39, 0x31, 0x38, 0x39, 0x31, + 0x38, 0x39, 0x31, 0x38, 0x39, 0x31, 0x38, 0x39, 0x31, 0x38, 0x39, 0x31, 0x38, + 0x39, 0x31, 0x00, 0x3A, 0x00, 0x3A, 0x00, 0x3A, 0x00, 0x3A, 0x00, 0x3A, 0x00, + 0x3A, 0x00, 0x3A, 0x00, 0x3A, 0x00, 0x35, 0x3A, 0x39, 0x38, 0x37, 0x36, 0x35, + 0x34, 0x33, 0x32, 0x31, 0x2D, 0x39, 0x35, 0x38, 0x34, 0x38, 0x36, 0x34, 0x69, + 0x49, 0x38, 0x31, 0x5F, 0x36, 0x2D, 0xB6, 0xE6, 0xC5, 0x66, 0xD9, 0x9B, 0xF8, + 0xD5, 0x76, 0xC1, 0x62, 0xD4, 0x75, 0x77, 0xD6, 0xD9, 0x9B, 0x60, 0xC2, 0x63, + 0x6F, 0x4F, 0x6D, 0x4D, 0x6E, 0x4E, 0x30, 0x32, 0x30, 0x58, 0x78, 0x5F, 0x73, + 0x53, 0x2D, 0x61, 0x41, 0x65, 0x45, 0x38, 0x30, 0x36, 0x35, 0x38, 0x39, 0x31, + 0x2D, 0x31, 0x30, 0x36, 0x35, 0x5F, 0x63, 0x43, 0x5F, 0x63, 0x5F, 0x43, 0x72, + 0x69, 0x52, 0x49, 0x31, 0x32, 0x33, 0x34, 0x35, 0x2D, 0x6E, 0x4E, 0x69, 0x49, + 0x74, 0x54, 0x6A, 0x4A, 0x6E, 0x4E, 0x61, 0x41, 0x6B, 0x4B, 0x33, 0x39, 0x5F, + 0x72, 0x52, 0x75, 0x55, 0x65, 0x45, 0x2B, 0x30, 0x35, 0x38, 0x2D, 0x6C, 0x4C, + 0x61, 0x41, 0x75, 0x55, 0x67, 0x47, 0x6E, 0x4E, 0x69, 0x49, 0x6C, 0x4C, 0x69, + 0x49, 0x74, 0x54, 0x6C, 0x4C, 0x75, 0x55, 0x6D, 0x4D, 0x2D, 0xF1, 0xF0, 0xF2, + 0xF0, 0xA7, 0xB7, 0xE7, 0x6D, 0xE2, 0xAB, 0xA2, 0x5F, 0x74, 0x54, 0x66, 0x46, + 0x69, 0x49, 0x2D, 0x73, 0x53, 0x32, 0x2D, 0x73, 0x53, 0x61, 0x41, 0x6C, 0x62, + 0x4C, 0x42, 0x2D, 0x6C, 0x62, 0x4C, 0x42, 0x2D, 0x32, 0x36, 0x38, 0x33, 0x31, + 0x38, 0x33, 0x31, 0x2D, 0x66, 0x46, 0x00, 0x2D, 0x73, 0x53, 0x39, 0x31, 0x2D, + 0x73, 0x53, 0x77, 0x57, 0x6F, 0x4F, 0x64, 0x44, 0x6E, 0x4E, 0x68, 0xC7, 0xD5, + 0x76, 0xC9, 0x71, 0xC4, 0x65, 0xD6, 0x77, 0xC3, 0x64, 0xD5, 0x76, 0xC5, 0x66, + 0x60, 0xC4, 0x65, 0xD9, 0x9B, 0xC1, 0x62, 0xC4, 0x65, 0xD5, 0x76, 0xC1, 0x62, + 0xE3, 0xB3, 0xE2, 0xAB, 0x60, 0xC5, 0x66, 0xC2, 0x63, 0xF6, 0xF8, 0xF8, 0xF6, + 0xF9, 0xF1, 0x60, 0xF4, 0x4B, 0xF3, 0xE7, 0xB7, 0xA7, 0x6D, 0xC9, 0x89, 0x71, + 0x87, 0xC7, 0xD5, 0x95, 0xC9, 0x89, 0xC4, 0x84, 0xD6, 0x96, 0xC3, 0x83, 0xD5, + 0x95, 0xC5, 0x85, 0x60, 0xC4, 0x84, 0xD9, 0x99, 0xC1, 0x81, 0xC4, 0x84, 0xD5, + 0x95, 0xC1, 0x81, 0xE3, 0xA3, 0xE2, 0xA2, 0x60, 0xC5, 0x85, 0xC2, 0x82, 0x83, + 0xC3, 0xC9, 0x89, 0xC2, 0x82, 0x64, 0xC3, 0xC9, 0x71, 0xC2, 0x63, 0xC9, 0x89, + 0x71, 0xF8, 0xF0, 0xF7, 0x60, 0xD6, 0x96, 0x77, 0xC9, 0x89, 0x71, 0x64, 0x83, + 0xC3, 0xD4, 0x94, 0x75, 0xC1, 0x62, 0xC1, 0x81, 0xD6, 0x96, 0xE2, 0xAB, 0xA2, + 0xD6, 0x77, 0x66, 0xC5, 0xE2, 0xAB, 0xC5, 0x66, 0xD5, 0x76, 0xAB, 0xE2, 0x9B, + 0xD9, 0x9B, 0xD9, 0xF7, 0xF0, 0xF7, 0xF7, 0xF7, 0xF0, 0xF3, 0xF4, 0xF5, 0xF1, + 0xF0, 0xF0, 0xF1, 0xF2, 0xF3, 0xF5, 0xF6, 0xF9, 0xF4, 0xF7, 0xF5, 0xF2, 0xF1, + 0xF0, 0xF4, 0xF3, 0xF0, 0xF9, 0xF8, 0xF5, 0xF6, 0xF7, 0xF3, 0xF2, 0xF6, 0xF9, + 0xF3, 0xC9, 0xC7, 0xC1, 0x71, 0x68, 0x62, 0xC4, 0x65, 0xD9, 0x9B, 0xC1, 0x62, + 0xC4, 0x65, 0xD5, 0x76, 0xC1, 0x62, 0xE3, 0xB3, 0xE2, 0xAB, 0xC5, 0x66, 0xC2, + 0x63, 0x71, 0xC9, 0xC9, 0x71, 0xC3, 0x64, 0xD6, 0x77, 0xAB, 0xE2, 0xC3, 0x64, + 0xE2, 0xAB, 0xD2, 0x73, 0xC8, 0x69, 0xF5, 0xC7, 0x68, 0x66, 0xC5, 0xE2, 0xAB, + 0xC5, 0x66, 0xD5, 0x76, 0xC1, 0x62, 0xD7, 0x78, 0xC1, 0x62, 0xD1, 0x72, 0xB3, + 0xE3, 0xD4, 0x75, 0xC6, 0x67, 0xC4, 0x65, 0x69, 0xC8, 0xD2, 0x73, 0x9B, 0xD9, + 0xE3, 0xD7, 0xD2, 0xB3, 0x78, 0x73, 0xC3, 0x64, 0xF2, 0xF1, 0xF3, 0x73, 0xD2, + 0xF2, 0x62, 0xC1, 0xD5, 0x76, 0xC1, 0x62, 0xD2, 0x73, 0xC1, 0x62, 0xE3, 0xB3, + 0xC1, 0x62, 0xD2, 0x73, 0xC8, 0x69, 0xE3, 0xB3, 0xC4, 0x65, 0xC9, 0x71, 0xE6, + 0xB6, 0xC6, 0x67, 0xD3, 0x74, 0xF4, 0xF0, 0xF9, 0x71, 0xC9, 0xC1, 0x62, 0xF8, + 0xF4, 0xF2, 0xF5, 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, + 0xF4, 0xF1, 0xF9, 0xF8, 0xF7, 0xF6, 0xF4, 0xF2, 0xF0, 0xF4, 0xF5, 0xF3, 0xF8, + 0xF7, 0xF0, 0xF0, 0xF1, 0xF0, 0xF1, 0xF3, 0xF5, 0xF6, 0xF9, 0xF8, 0xF4, 0xF1, + 0xF5, 0xF7, 0xF8, 0xF3, 0xF5, 0xF1, 0xF0, 0xF9, 0xF8, 0xF7, 0xF6, 0xF5, 0xF0, + 0xF2, 0xF9, 0xF8, 0xF7, 0xF0, 0xF3, 0xF1, 0xF0, 0x69, 0xC8, 0xF9, 0xF8, 0xF5, + 0xF4, 0xF2, 0xF1, 0xF0, 0xE3, 0xB3, 0x75, 0xD4, 0x64, 0xC3, 0xC9, 0x71, 0xD3, + 0x74, 0xD3, 0x74, 0xC9, 0x71, 0xD9, 0x9B, 0x73, 0xD2, 0xC5, 0x66, 0xC5, 0x66, + 0xC5, 0x66, 0xD9, 0x9B, 0xE8, 0xB8, 0xD9, 0x9B, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, + 0xC8, 0xC7, 0xC3, 0xC1, 0x69, 0x68, 0x64, 0x62, 0xD5, 0x76, 0xC9, 0x71, 0xE3, + 0xB3, 0xF0, 0xF8, 0xF2, 0xF1, 0xF3, 0xF2, 0x63, 0xC2, 0xC7, 0x68, 0xF3, 0xF5, + 0xF1, 0xF9, 0xF5, 0xF8, 0xF8, 0xC1, 0x62, 0xF8, 0xF5, 0xD3, 0x74, 0xD6, 0x77, + 0xD4, 0xC2, 0x75, 0x63, 0x9B, 0xD9, 0xF8, 0xF7, 0xF8, 0xF9, 0xF1, 0xF1, 0xF0, + 0xF6, 0xF5, 0x64, 0xC3, 0xC9, 0x71, 0xF2, 0xF5, 0x64, 0xC3, 0xC9, 0x71, 0xE3, + 0xB3, 0xD3, 0x74, 0xC1, 0x62, 0xC2, 0x63, 0xF5, 0xF3, 0xF4, 0x66, 0xC5, 0xC7, + 0x68, 0xC1, 0x62, 0xD7, 0x78, 0xC5, 0x66, 0xC4, 0x65, 0x74, 0xD3, 0xC1, 0x62, + 0xE4, 0xB4, 0xC7, 0x68, 0xD5, 0x76, 0xC9, 0x71, 0xD3, 0x74, 0xC9, 0x71, 0xE3, + 0xB3, 0xD3, 0x74, 0xE4, 0xB4, 0xD4, 0x75, 0xB6, 0xE6, 0xC5, 0x66, 0xD9, 0x9B, + 0xC2, 0x63, 0xC5, 0x66, 0xC8, 0x69, 0xD5, 0x76, 0xC9, 0x71, 0xE3, 0xB3, 0xC1, + 0x62, 0xD3, 0x74, 0xF2, 0xF0, 0xD6, 0x77, 0xF6, 0xF5, 0xC3, 0x64, 0xF7, 0xF8, + 0x78, 0xD7, 0xF8, 0xF7, 0xAB, 0xE2, 0xC9, 0x71, 0xD1, 0x72, 0xB3, 0xE3, 0xC6, + 0x67, 0xC9, 0x71, 0xF0, 0xF2, 0xF6, 0xAB, 0xE2, 0x66, 0xC5, 0xC4, 0x65, 0xD6, + 0x77, 0xC3, 0x64, 0x66, 0xC5, 0x66, 0xC5, 0xD3, 0xC2, 0x74, 0x63, 0x66, 0xC5, + 0x66, 0xC5, 0xD3, 0xC2, 0x74, 0x63, 0xF2, 0xF6, 0xF8, 0xF3, 0xF1, 0xC6, 0x67, + 0xC9, 0x71, 0xF8, 0xF7, 0xF6, 0xF5, 0xF4, 0xF3, 0xF2, 0xF1, 0xF0, 0xF5, 0xF1, + 0xF2, 0x76, 0xD5, 0xC9, 0x71, 0xE3, 0xB3, 0xC1, 0x62, 0xD3, 0x74, 0xF1, 0xF2, + 0xF1, 0xF3, 0xE2, 0xAB, 0xE6, 0xB6, 0xD6, 0x77, 0xC4, 0x65, 0xD5, 0x76, 0xC9, + 0x71, 0xE3, 0xD5, 0xB3, 0x76, 0xC9, 0x71, 0xC8, 0x69, 0xC3, 0x64, 0xE2, 0xD6, + 0xAB, 0x77, 0xE2, 0xC2, 0xAB, 0x63, 0xD7, 0xC1, 0x78, 0x62, 0xC2, 0x63, 0xE4, + 0xB4, 0xC9, 0x71, 0xE2, 0xC4, 0xAB, 0x65, 0x64, 0xC3, 0xC9, 0x71, 0xD3, 0x74, + 0xD3, 0x74, 0xC9, 0x71, 0xD9, 0x9B, 0xE6, 0xE4, 0xE3, 0xE2, 0xD7, 0xD2, 0xC9, + 0xC8, 0xC7, 0xC5, 0xC2, 0xC1, 0xB6, 0xB4, 0xB3, 0xAB, 0x78, 0x73, 0x71, 0x69, + 0x68, 0x66, 0x63, 0x62, 0xF7, 0xF4, 0xF3, 0xF9, 0xF8, 0xF2, 0xF0, 0x60, 0xC9, + 0x71, 0xF1, 0xF2, 0x66, 0xC5, 0xC3, 0x64, 0xC5, 0x66, 0xB4, 0xE4, 0xB3, 0xE3, + 0xAB, 0xE2, 0x9B, 0xD9, 0x66, 0xC5, 0xD6, 0x77, 0x74, 0xD3, 0xB3, 0xE3, 0xAB, + 0xE2, 0x66, 0xC5, 0x63, 0xC2, 0x9B, 0xD9, 0x71, 0xC9, 0x9B, 0xD9, 0xAB, 0xE2, + 0x62, 0xC1, 0x69, 0xC8, 0x66, 0xC5, 0x9B, 0xD9, 0xE8, 0xE6, 0xE4, 0xE3, 0xE2, + 0xD9, 0xD5, 0xC9, 0xC8, 0xC7, 0xC6, 0xC5, 0xC3, 0xC2, 0xC1, 0xB8, 0xB6, 0xB4, + 0xB3, 0xAB, 0x9B, 0x76, 0x71, 0x69, 0x68, 0x67, 0x66, 0x64, 0x63, 0x62, 0x60, + 0x77, 0xD6, 0xD9, 0x9B, 0xE4, 0xB4, 0xC5, 0x66, 0x4E, 0xF3, 0xF7, 0xF2, 0x77, + 0xD6, 0xD9, 0x9B, 0xE4, 0xB4, 0xC5, 0x66, 0x4E, 0xF7, 0xF7, 0xF2, 0x60, 0x60, + 0x77, 0xD6, 0xD9, 0x9B, 0xE4, 0xB4, 0xC5, 0x66, 0x4E, 0xF4, 0xF8, 0xF2, 0x60, + 0x77, 0xD6, 0xD9, 0x9B, 0xE4, 0xB4, 0xC5, 0x66, 0x4E, 0xF8, 0xF7, 0xF2, 0x77, + 0xD6, 0xD9, 0x9B, 0xE4, 0xB4, 0xC5, 0x66, 0x4E, 0xF7, 0xF9, 0xF2, 0x60, 0x60, + 0x77, 0xD6, 0xD9, 0x9B, 0xE4, 0xB4, 0xC5, 0x66, 0x4E, 0xF5, 0xF8, 0xF2, 0x60, + 0x77, 0xD6, 0xD9, 0x9B, 0xE4, 0xB4, 0xC5, 0x66, 0x4E, 0xF0, 0xF0, 0xF5, 0x60, + 0xD3, 0x74, 0xC1, 0x62, 0xD5, 0x76, 0xD6, 0x77, 0xC9, 0x71, 0xE3, 0xB3, 0xC1, + 0x62, 0xD5, 0x76, 0xD9, 0x9B, 0xC5, 0x66, 0x77, 0xD6, 0xD9, 0x9B, 0xE4, 0xB4, + 0xC5, 0x66, 0x4E, 0xF1, 0xF7, 0xF8, 0x77, 0xD6, 0xD9, 0x9B, 0xE4, 0xB4, 0xC5, + 0x66, 0x4E, 0xF0, 0xF8, 0xF2, 0x60, 0x60, 0xE3, 0xB3, 0x62, 0xC1, 0xD5, 0x76, + 0x81, 0xC1, 0xD5, 0x95, 0xC1, 0x81, 0xC1, 0x62, 0xD2, 0x92, 0x73, 0x60, 0x77, + 0xD6, 0xD9, 0x9B, 0xE4, 0xB4, 0xC5, 0x66, 0x60, 0x60, 0xF9, 0xD5, 0x76, 0xC9, + 0x71, 0x96, 0xD6, 0xD9, 0x99, 0xE4, 0xA4, 0xC5, 0x85, 0x60, 0x60, 0xF9, 0xD5, + 0x95, 0xC9, 0x89, 0xE3, 0xA3, 0xE3, 0xB3, 0x85, 0xC5, 0xC3, 0x83, 0xC5, 0x85, + 0xA4, 0xE4, 0xA3, 0xE3, 0xA2, 0xE2, 0x99, 0xD9, 0x85, 0xC5, 0xD6, 0x96, 0xA3, + 0xE3, 0xA2, 0xE2, 0x85, 0xC5, 0x82, 0xC2, 0x99, 0xD9, 0x89, 0xC9, 0x99, 0xD9, + 0xA2, 0xE2, 0x81, 0xC1, 0x88, 0xC8, 0x85, 0xC5, 0xD9, 0x99, 0x93, 0xD3, 0x77, + 0x96, 0xD6, 0x73, 0x92, 0xD2, 0xE8, 0xE6, 0xE4, 0xE3, 0xE2, 0xD9, 0xD5, 0xC9, + 0xC8, 0xC7, 0xC6, 0xC5, 0xC4, 0xC3, 0xC2, 0xC1, 0xA8, 0xA6, 0xA4, 0xA3, 0xA2, + 0x99, 0x95, 0x89, 0x88, 0x87, 0x86, 0x85, 0x84, 0x83, 0x82, 0x81, 0x76, 0x65, + 0x83, 0xC3, 0xC9, 0x89, 0xD3, 0x93, 0xD3, 0x93, 0xC9, 0x89, 0x64, 0xC3, 0xC9, + 0x71, 0xD3, 0x74, 0xD3, 0x74, 0xC9, 0x71, 0xD9, 0x9B, 0xD9, 0x99, 0x60, 0x96, + 0xD6, 0xD9, 0x99, 0xE4, 0xA4, 0xC5, 0x85, 0x4E, 0xF3, 0xF7, 0xF2, 0x96, 0xD6, + 0xD9, 0x99, 0xE4, 0xA4, 0xC5, 0x85, 0x4E, 0xF7, 0xF7, 0xF2, 0x60, 0x60, 0x96, + 0xD6, 0xD9, 0x99, 0xE4, 0xA4, 0xC5, 0x85, 0x4E, 0xF4, 0xF8, 0xF2, 0x60, 0x96, + 0xD6, 0xD9, 0x99, 0xE4, 0xA4, 0xC5, 0x85, 0x4E, 0xF8, 0xF7, 0xF2, 0x96, 0xD6, + 0xD9, 0x99, 0xE4, 0xA4, 0xC5, 0x85, 0x4E, 0xF7, 0xF9, 0xF2, 0x60, 0x60, 0x96, + 0xD6, 0xD9, 0x99, 0xE4, 0xA4, 0xC5, 0x85, 0x4E, 0xF5, 0xF8, 0xF2, 0x60, 0x96, + 0xD6, 0xD9, 0x99, 0xE4, 0xA4, 0xC5, 0x85, 0x4E, 0xF0, 0xF0, 0xF5, 0x60, 0xD3, + 0x93, 0xC1, 0x81, 0xD5, 0x95, 0xD6, 0x96, 0xC9, 0x89, 0xE3, 0xA3, 0xC1, 0x81, + 0xD5, 0x95, 0xD9, 0x99, 0xC5, 0x85, 0x96, 0xD6, 0xD9, 0x99, 0xE4, 0xA4, 0xC5, + 0x85, 0x4E, 0xF1, 0xF7, 0xF8, 0x96, 0xD6, 0xD9, 0x99, 0xE4, 0xA4, 0xC5, 0x85, + 0x4E, 0xF0, 0xF8, 0xF2, 0x60, 0x60, 0xE3, 0xA3, 0x96, 0xD6, 0xD9, 0x99, 0xE4, + 0xA4, 0xC5, 0x85, 0x4E, 0xF7, 0xF3, 0x60, 0x77, 0xD6, 0xD9, 0x9B, 0xE4, 0xB4, + 0xC5, 0x66, 0x4E, 0xF7, 0xF3, 0x60, 0xE2, 0xAB, 0xC5, 0x66, 0xE2, 0xA2, 0xC5, + 0x85, 0xD6, 0x96, 0xE3, 0xE2, 0xD5, 0xA3, 0xA2, 0x95, 0xC2, 0x82, 0x89, 0xC9, + 0xD9, 0x99, 0xE2, 0xA2, 0x92, 0xD2, 0xC5, 0x85, 0xE8, 0xD7, 0xB8, 0xA8, 0x97, + 0x78, 0xD6, 0x77, 0xC1, 0x81, 0x62, 0xD7, 0x97, 0x78, 0xE3, 0xE2, 0xD5, 0xB3, + 0xAB, 0x76, 0xC2, 0x63, 0x71, 0xC9, 0xD9, 0x9B, 0xE2, 0xAB, 0x73, 0xD2, 0xC5, + 0x66, 0xD7, 0x78, 0xE4, 0xE2, 0xD5, 0xD3, 0xD1, 0xC9, 0xC7, 0xC6, 0xC5, 0xC4, + 0xC3, 0xB4, 0xAB, 0xA4, 0xA2, 0x95, 0x93, 0x91, 0x89, 0x87, 0x86, 0x85, 0x84, + 0x83, 0x76, 0x74, 0x72, 0x71, 0x68, 0x67, 0x66, 0x65, 0x64, 0x00, 0x60, 0xC3, + 0x83, 0x64, 0xC9, 0x89, 0x71, 0xC4, 0x84, 0x65, 0xF4, 0xF8, 0xF1, 0xF1, 0x60, + 0xC1, 0x81, 0x62, 0xF8, 0xF2, 0xF9, 0x6D, 0xE3, 0xB3, 0xA3, 0x6E, 0xC8, 0x88, + 0x69, 0x99, 0x9B, 0xD9, 0x78, 0x97, 0xD7, 0x76, 0x95, 0xD5, 0x69, 0x88, 0xC8, + 0xE3, 0xD2, 0xD1, 0xC3, 0xB3, 0xA3, 0x92, 0x91, 0x83, 0x73, 0x72, 0x64, 0xE3, + 0xB3, 0xA3, 0x60, 0x85, 0xC5, 0xE2, 0xA2, 0xC5, 0x85, 0xD5, 0x95, 0xC1, 0x81, + 0xD7, 0x97, 0xC1, 0x81, 0xD1, 0x91, 0x6D, 0xD9, 0x99, 0xD6, 0x96, 0xC6, 0x86, + 0x6D, 0xE3, 0xA3, 0xC1, 0x81, 0xD4, 0x94, 0xD9, 0x99, 0xD6, 0x96, 0xC6, 0x86, + 0x6D, 0xC4, 0x84, 0xC5, 0x85, 0xD2, 0x92, 0xC3, 0x83, 0xC1, 0x81, 0xD7, 0x97, + 0x6D, 0xC5, 0x85, 0xC4, 0x84, 0xD6, 0x96, 0xC3, 0x83, 0x6D, 0xE7, 0xA7, 0xC9, + 0x89, 0xD5, 0x95, 0xE4, 0xA4, 0x6D, 0xC4, 0x84, 0xC5, 0x85, 0xC4, 0x84, 0xD5, + 0x95, 0xC5, 0x85, 0x6D, 0xD9, 0x9B, 0xD6, 0x77, 0xC6, 0x67, 0x6D, 0xE3, 0xB3, + 0xC1, 0x62, 0xD4, 0x75, 0xD9, 0x9B, 0xD6, 0x77, 0xC6, 0x67, 0x6D, 0xC4, 0x65, + 0xC5, 0x66, 0xD2, 0x73, 0xC3, 0x64, 0xC1, 0x62, 0xD7, 0x78, 0x6D, 0xC5, 0x66, + 0xC4, 0x65, 0xD6, 0x77, 0xC3, 0x64, 0x6D, 0xE7, 0xB7, 0xC9, 0x71, 0xD5, 0x76, + 0xE4, 0xB4, 0x6D, 0xC4, 0x65, 0xC5, 0x66, 0xC4, 0x65, 0xD5, 0x76, 0xC5, 0x66, + 0xE3, 0xB3, 0xE3, 0xA3, 0xC3, 0x83, 0x64, 0xD6, 0x96, 0x77, 0xD4, 0x94, 0x75, + 0xC3, 0x83, 0x64, 0xF3, 0xF4, 0xF8, 0xF9, 0xF0, 0x00, 0xF3, 0xF1, 0x00, 0xF9, + 0xF6, 0xF1, 0xF0, 0xF9, 0xF8, 0xF7, 0xF6, 0xF5, 0xF4, 0xF3, 0xF2, 0xF1, 0xF0, + 0xF6, 0xF9, 0xF4, 0xF7, 0xF0, 0xF3, 0xF2, 0xF1, 0xF0, 0xF2, 0xF4, 0xF9, 0xF8, + 0xF7, 0xF6, 0xF5, 0xF3, 0xF1, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xF4, 0xF3, 0xF2, + 0xF1, 0xF0, 0xF9, 0xF8, 0xF7, 0xF5, 0xF4, 0xF3, 0xF0, 0xF8, 0xF5, 0xF1, 0xF0, + 0xF3, 0xF6, 0xF9, 0xF4, 0xF1, 0xF2, 0xF5, 0xF2, 0xF1, 0xF0, 0xF9, 0xF0, 0xF1, + 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF5, 0xF0, 0xF9, 0xF8, 0xF6, 0xF5, + 0xF4, 0xF3, 0xF2, 0xF1, 0xF0, 0x00, 0xF7, 0x00, 0xF6, 0xF8, 0xF2, 0xF1, 0xF0, + 0xF2, 0xF7, 0xF5, 0xF8, 0xF1, 0xF0, 0xF9, 0xF4, 0xF6, 0xF7, 0xF8, 0xF5, 0xF3, + 0xF2, 0xF1, 0x60, 0x62, 0xC1, 0xF8, 0xF7, 0xF9, 0xF8, 0xF1, 0xF7, 0xF6, 0xF3, + 0xF2, 0xF1, 0xF0, 0xF6, 0xF7, 0xF5, 0xF9, 0xF8, 0xF7, 0xF6, 0xF5, 0xF4, 0xF3, + 0xF2, 0xF1, 0xF0, 0xF9, 0xF8, 0xF4, 0xF0, 0xF8, 0xF7, 0xF6, 0xF5, 0xF4, 0xF3, + 0xF7, 0xF3, 0xF2, 0xF0, 0xF9, 0xF3, 0xF2, 0xF5, 0xF4, 0xF2, 0xF8, 0xF3, 0xF2, + 0xF1, 0xF0, 0xF6, 0xF5, 0xF0, 0xF2, 0xF0, 0xF8, 0xF7, 0xF6, 0xF5, 0xF4, 0xF3, + 0xF1, 0xF3, 0xF5, 0xF1, 0xF3, 0xF8, 0xF4, 0xF1, 0xF8, 0xF9, 0xF2, 0xF6, 0xF3, + 0xF8, 0xF1, 0xF0, 0xF5, 0xF3, 0xF3, 0xF4, 0xF8, 0xF2, 0xF4, 0xF5, 0xF3, 0xF9, + 0xF8, 0xF7, 0xF6, 0xF4, 0xF1, 0xF8, 0xF7, 0xF5, 0xF3, 0xF0, 0xF4, 0xF6, 0xF5, + 0xF3, 0xF2, 0xF1, 0xF9, 0xF8, 0xF5, 0xF4, 0xF2, 0xF1, 0xF0, 0xF6, 0xF4, 0xF9, + 0xF0, 0xF0, 0xF4, 0xF5, 0xF7, 0xF6, 0xF5, 0xF2, 0xF2, 0xF7, 0xF1, 0xF0, 0xF6, + 0xF1, 0xF5, 0xF0, 0xF3, 0xF2, 0xF1, 0xF8, 0xF7, 0xF6, 0xF5, 0xF4, 0xF7, 0xF9, + 0xF5, 0xF4, 0xF3, 0xF2, 0xF0, 0xF5, 0xF6, 0xF3, 0xF0, 0xF4, 0xF6, 0xF7, 0xF8, + 0xF9, 0xF8, 0xF5, 0xF4, 0xF3, 0xF7, 0xF5, 0xF4, 0xF2, 0xF0, 0xF5, 0xF3, 0xF2, + 0xF2, 0xF5, 0xF5, 0xF5, 0xF4, 0xF1, 0xF4, 0xF3, 0xF2, 0xF1, 0xF2, 0xF9, 0xF7, + 0xF0, 0x00, 0xF2, 0xF1, 0xF7, 0xF6, 0xF0, 0xF1, 0xF4, 0xF8, 0xF5, 0xF0, 0xF2, + 0xF3, 0xF5, 0xF6, 0xF9, 0xF8, 0xF4, 0xF1, 0xF0, 0xF1, 0xF2, 0xF5, 0xF7, 0xF8, + 0xF8, 0xF7, 0xF6, 0xF5, 0xF3, 0xF9, 0xF3, 0xF6, 0x00, 0xF6, 0x00, 0xF0, 0xF7, + 0xF8, 0xF9, 0x00, 0xF0, 0xF5, 0xF4, 0xF9, 0xF8, 0xF7, 0xF6, 0xF1, 0xF0, 0xF3, + 0xF9, 0xF7, 0xF6, 0xF4, 0xF2, 0xF9, 0xF8, 0xF7, 0xF6, 0xF5, 0xF4, 0xF3, 0xF2, + 0xF0, 0xF4, 0xF1, 0xF3, 0xF0, 0xF8, 0xF7, 0xF6, 0xF2, 0xF8, 0xF2, 0xF3, 0xF4, + 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF3, 0xF7, 0xF6, 0xF5, 0xF4, 0xF3, 0xF2, 0xF1, + 0xF0, 0xF8, 0xF9, 0xF7, 0xF6, 0xF5, 0xF3, 0xF1, 0xF7, 0xF3, 0xF2, 0xF2, 0xF1, + 0xF7, 0xF4, 0xF3, 0xF1, 0xF0, 0xF2, 0xF9, 0xF3, 0xF7, 0xF6, 0xF3, 0xF0, 0xF9, + 0xF7, 0xF8, 0xF5, 0xF7, 0xF3, 0xF2, 0xF1, 0xF0, 0xF0, 0xF9, 0xF8, 0xF7, 0xF6, + 0xF5, 0xF4, 0xF3, 0xF2, 0xF1, 0x60, 0xF8, 0xF9, 0xF4, 0xF8, 0xF7, 0xF6, 0xF0, + 0xF0, 0xF1, 0xF9, 0xF3, 0xF4, 0xF2, 0xF1, 0xF0, 0xF6, 0xF5, 0xF1, 0x60, 0x9B, + 0xD9, 0xC9, 0x71, 0x60, 0xD6, 0x77, 0xD4, 0x75, 0xD5, 0x76, 0x76, 0xD5, 0xC1, + 0x62, 0xC5, 0x66, 0xD9, 0x9B, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xD5, 0x76, 0xC9, + 0x71, 0xE3, 0xB3, 0x60, 0xF5, 0xA2, 0xE2, 0xC3, 0x83, 0xE2, 0xA2, 0xD2, 0x92, + 0xC8, 0x88, 0x60, 0xF5, 0xC7, 0x87, 0xC7, 0x68, 0xF1, 0xF0, 0xF0, 0xC4, 0x84, + 0x65, 0xC9, 0x89, 0x71, 0xA2, 0xE2, 0x99, 0xD9, 0x99, 0xD9, 0xF2, 0xF3, 0xF8, + 0xF0, 0xF1, 0xF2, 0xF3, 0xF5, 0xF6, 0xF9, 0xF8, 0xF4, 0xF9, 0xF6, 0xF4, 0xF3, + 0xF5, 0xF1, 0xF3, 0xF0, 0xF5, 0xF9, 0xF8, 0xF7, 0xF6, 0xF1, 0xF9, 0xF8, 0xF7, + 0xF0, 0xC9, 0xC7, 0xC1, 0x89, 0x87, 0x81, 0x85, 0xC5, 0xE2, 0xA2, 0xC5, 0x85, + 0xD5, 0x95, 0xC4, 0x84, 0xD9, 0x99, 0xC1, 0x81, 0xC4, 0x84, 0xD5, 0x95, 0xC1, + 0x81, 0xE3, 0xA3, 0xE2, 0xA2, 0xC5, 0x85, 0xC2, 0x82, 0x89, 0xC9, 0xC9, 0x89, + 0xC3, 0x83, 0xD6, 0x96, 0xF5, 0xC7, 0x87, 0xE3, 0xA3, 0xD4, 0x94, 0xC6, 0x86, + 0xC4, 0x84, 0x88, 0xC8, 0xD2, 0x92, 0x99, 0xD9, 0xE3, 0xD7, 0xD2, 0xA3, 0x97, + 0x92, 0xC3, 0x83, 0x92, 0xD2, 0xF2, 0xC1, 0x81, 0xD5, 0x95, 0xC1, 0x81, 0xD2, + 0x92, 0xC1, 0x81, 0xE3, 0xA3, 0xC1, 0x81, 0xD2, 0x92, 0xC8, 0x88, 0xE3, 0xA3, + 0xC4, 0x84, 0xC9, 0x89, 0xE6, 0xA6, 0xC6, 0x86, 0x95, 0xD5, 0xC1, 0x81, 0xD4, + 0x94, 0x96, 0xD6, 0xD9, 0x99, 0xD3, 0x93, 0x89, 0xC9, 0xC1, 0x81, 0x88, 0xC8, + 0xF5, 0xF2, 0xF1, 0xF0, 0xF9, 0xF8, 0xF4, 0xE3, 0xA3, 0xD4, 0x94, 0xC3, 0x83, + 0xC9, 0x89, 0xD3, 0x93, 0xD3, 0x93, 0xC9, 0x89, 0xD9, 0x99, 0x92, 0xD2, 0xC5, + 0x85, 0xC5, 0x85, 0xA6, 0xE6, 0xC5, 0x85, 0xD9, 0x99, 0xC2, 0x82, 0x85, 0xC5, + 0xD9, 0x99, 0xE8, 0xA8, 0xD9, 0x99, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xC8, 0xC7, + 0xC3, 0xC1, 0x88, 0x87, 0x83, 0x81, 0xD5, 0x95, 0xC9, 0x89, 0xE3, 0xA3, 0xC2, + 0x82, 0xC7, 0x87, 0xF8, 0xC1, 0x81, 0xF8, 0xF5, 0xD3, 0x93, 0xD6, 0x96, 0xD4, + 0xC2, 0x94, 0x82, 0x99, 0xD9, 0xF8, 0xC3, 0x83, 0xC9, 0x89, 0x83, 0xC3, 0xC9, + 0x89, 0xE3, 0xA3, 0xD3, 0x93, 0xC1, 0x81, 0xC2, 0x82, 0xF5, 0xC5, 0x85, 0xC7, + 0x87, 0xC1, 0x81, 0xD7, 0x97, 0xC5, 0x85, 0xC4, 0x84, 0x93, 0xD3, 0xC1, 0x81, + 0xE4, 0xA4, 0xC7, 0x87, 0xD5, 0x95, 0xC9, 0x89, 0xD3, 0x93, 0xC9, 0x89, 0xE3, + 0xA3, 0xD3, 0x93, 0xE4, 0xA4, 0xD4, 0x94, 0xA6, 0xE6, 0xC5, 0x85, 0xD9, 0x99, + 0xC2, 0x82, 0xC5, 0x85, 0xC8, 0x88, 0xD5, 0x95, 0xC9, 0x89, 0xE3, 0xA3, 0xC1, + 0x81, 0xD3, 0x93, 0xF2, 0xF0, 0xD6, 0x96, 0xF6, 0xF5, 0xC3, 0x83, 0xF7, 0xF8, + 0xF7, 0xD7, 0x97, 0xE2, 0xA2, 0xC9, 0x89, 0xD1, 0x91, 0xA3, 0xE3, 0xC6, 0x86, + 0xC9, 0x89, 0xA2, 0xE2, 0x85, 0xC5, 0xC4, 0x84, 0xD6, 0x96, 0xC3, 0x83, 0x85, + 0xC5, 0x85, 0xC5, 0xD3, 0xC2, 0x93, 0x82, 0x85, 0xC5, 0x85, 0xC5, 0xD3, 0xC2, + 0x93, 0x82, 0xF2, 0xF6, 0xF8, 0xF3, 0xF1, 0xC6, 0x86, 0xC9, 0x89, 0xD5, 0x95, + 0xC9, 0x89, 0xE3, 0xA3, 0xC1, 0x81, 0xD3, 0x93, 0xF1, 0xF1, 0xF3, 0xE2, 0xA2, + 0xE6, 0xA6, 0xD6, 0x96, 0xC4, 0x84, 0xD5, 0x95, 0xC9, 0x89, 0xE3, 0xD5, 0xA3, + 0x95, 0xC9, 0x89, 0xC8, 0x88, 0xC3, 0x83, 0xE2, 0xD6, 0xA2, 0x96, 0xE2, 0xC2, + 0xA2, 0x82, 0x97, 0xD7, 0xC1, 0x81, 0xC2, 0x82, 0xE4, 0xA4, 0xC9, 0x89, 0xE2, + 0xC4, 0xA2, 0x84, 0x83, 0xC3, 0xC9, 0x89, 0xD3, 0x93, 0xD3, 0x93, 0xC9, 0x89, + 0xD9, 0x99, 0xE6, 0xE4, 0xE3, 0xE2, 0xD7, 0xD2, 0xC9, 0xC8, 0xC7, 0xC5, 0xC2, + 0xC1, 0xA6, 0xA4, 0xA3, 0xA2, 0x97, 0x92, 0x89, 0x88, 0x87, 0x85, 0x82, 0x81, + 0xC9, 0x89, 0xF7, 0xF4, 0xF3, 0xF5, 0xF0, 0xF8, 0xF9, 0xF2, 0xF1, 0x60, 0xE2, + 0xAB, 0xA2, 0x60, 0xF2, 0xF1, 0xF3, 0xF2, 0xD2, 0x92, 0xC5, 0x85, 0xC5, 0x85, + 0x73, 0x92, 0xD2, 0xF2, 0x6D, 0x60, 0xC8, 0x88, 0x69, 0xF7, 0xF0, 0xF7, 0xF0, + 0xF5, 0xF4, 0xF0, 0xF8, 0xF7, 0xF3, 0xF6, 0xF7, 0xF0, 0xF1, 0xF7, 0xF4, 0xF3, + 0xF0, 0xF0, 0xF5, 0xF7, 0xF0, 0xF7, 0xF1, 0xF6, 0xF0, 0xF4, 0xF8, 0xF1, 0xF0, + 0xF5, 0xF9, 0xF6, 0xF5, 0xF3, 0xF2, 0xF1, 0xF0, 0xF8, 0xF4, 0xF7, 0xF5, 0xF2, + 0xF1, 0xF0, 0xF8, 0xF8, 0xF3, 0xF5, 0xF6, 0xF7, 0xF9, 0xF3, 0xF0, 0xF4, 0xF5, + 0xF0, 0xF1, 0xF6, 0xF7, 0xF8, 0xF9, 0xF3, 0xF2, 0xF4, 0xF6, 0xF7, 0xF9, 0xF0, + 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xF0, 0xF3, 0xF1, 0xF4, 0xF2, + 0xF6, 0xF7, 0xF8, 0xF5, 0xF4, 0xF3, 0xF2, 0xF6, 0xF8, 0xF4, 0xF5, 0xF3, 0xF7, + 0xF6, 0xF5, 0xF4, 0xF3, 0xF2, 0xF1, 0xF0, 0xF9, 0xF8, 0xF7, 0xF6, 0xF5, 0xF3, + 0xF1, 0xF7, 0xF3, 0xF2, 0xF0, 0xF3, 0xF2, 0xF6, 0xF0, 0xF9, 0xF8, 0xF7, 0xF5, + 0xF3, 0xF0, 0xF7, 0xF8, 0xF9, 0xF8, 0xF1, 0xF7, 0xF0, 0xF1, 0xF2, 0xF3, 0xF6, + 0xF6, 0xF5, 0xF7, 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, + 0xF8, 0xF9, 0xF0, 0xF4, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xF8, 0xF7, + 0xF6, 0xF5, 0xF4, 0xF3, 0xF2, 0xF1, 0xF0, 0xF0, 0xF2, 0xF3, 0xF7, 0xF2, 0xF3, + 0xF9, 0xF2, 0xF4, 0xF5, 0xF0, 0xF1, 0xF2, 0xF3, 0xF6, 0xF5, 0xF0, 0xF2, 0xF1, + 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF5, 0xF3, 0xF8, 0xF3, 0xF1, 0xF2, 0xF9, + 0xF6, 0xF3, 0xF0, 0xF1, 0xF8, 0xF5, 0xF3, 0xF3, 0xF4, 0xF9, 0xF8, 0xF7, 0xF6, + 0xF8, 0xF7, 0xF5, 0xF3, 0xF0, 0xF6, 0xF5, 0xF4, 0xF3, 0xF2, 0xF1, 0xF9, 0xF8, + 0xF5, 0xF4, 0xF2, 0xF1, 0xF0, 0xF6, 0xF1, 0xF0, 0xF5, 0xF1, 0xF2, 0xF3, 0xF8, + 0xF7, 0xF6, 0xF5, 0xF4, 0xF9, 0xF0, 0xF2, 0xF3, 0xF4, 0xF5, 0xF5, 0xF6, 0xF3, + 0xF4, 0xF0, 0xF9, 0xF8, 0xF7, 0xF6, 0xF8, 0xF7, 0xF5, 0xF4, 0xF2, 0xF5, 0xF3, + 0xF2, 0xF2, 0xF1, 0xF6, 0xF6, 0xF0, 0xF9, 0xF8, 0xF7, 0xF4, 0xF6, 0xF5, 0xF3, + 0xF4, 0xF0, 0xF6, 0xF4, 0xF3, 0xF1, 0xF0, 0xF9, 0xF3, 0xF3, 0xF2, 0xF1, 0xF0, + 0xF9, 0xF8, 0xF7, 0xF5, 0xF4, 0xF3, 0xF2, 0xF0, 0xF8, 0xF0, 0xF1, 0xF4, 0xF8, + 0xF8, 0xF2, 0xF4, 0xF5, 0xF3, 0xF4, 0xF1, 0xF7, 0xF6, 0xF4, 0xF9, 0xF0, 0xF7, + 0xF5, 0xF2, 0xF2, 0xF7, 0xF5, 0xF4, 0xF3, 0xF2, 0xF5, 0xF5, 0xF5, 0xF4, 0xF1, + 0xF4, 0xF3, 0xF2, 0xF1, 0xF2, 0xF9, 0xF2, 0xF1, 0xF7, 0xF3, 0xF8, 0xF5, 0xF7, + 0xF3, 0xF2, 0xF9, 0xF8, 0xF5, 0xF4, 0xF1, 0xF0, 0xF6, 0xF5, 0xF3, 0xF2, 0xF1, + 0xF0, 0xC4, 0x84, 0x65, 0xC9, 0x89, 0x71, 0xE2, 0xAB, 0xA2, 0xF1, 0xF0, 0xC3, + 0x83, 0x64, 0xF9, 0xF8, 0xF7, 0xF6, 0xF5, 0xF4, 0xF3, 0xF2, 0xF1, 0xF0, 0xE3, + 0xB3, 0xA3, 0xF9, 0xF8, 0xF7, 0xF5, 0xF4, 0xF3, 0xF2, 0xF1, 0xF0, 0xC3, 0x83, + 0x64, 0x60, 0xC1, 0x81, 0xF2, 0x60, 0xE2, 0xAB, 0xA2, 0xC3, 0x83, 0x64, 0xE4, + 0xB4, 0xA4, 0x60, 0xF6, 0xF4, 0xF6, 0xF1, 0x60, 0x76, 0xD5, 0xC9, 0x71, 0xE3, + 0xB3, 0xC1, 0x62, 0xD3, 0x74, 0x60, 0xF1, 0x4B, 0xF3, 0x60, 0xE2, 0xAB, 0xE6, + 0xB6, 0xD6, 0x77, 0xC4, 0x65, 0xD5, 0x95, 0xC9, 0x89, 0xE3, 0xA3, 0xC1, 0x81, + 0xD3, 0x93, 0x60, 0xF1, 0x4B, 0xF3, 0x60, 0xE2, 0xA2, 0xE6, 0xA6, 0xD6, 0x96, + 0xC4, 0x84, 0xD5, 0x95, 0xD5, 0x76, 0xC9, 0x89, 0x71, 0xE6, 0xB6, 0xA6, 0xF2, + 0x60, 0x76, 0xD5, 0xC9, 0x71, 0xE3, 0xB3, 0xC1, 0x62, 0xD3, 0x74, 0x60, 0xE2, + 0xAB, 0xE6, 0xB6, 0xD6, 0x77, 0xC4, 0x65, 0xD5, 0x95, 0xC9, 0x89, 0xE3, 0xA3, + 0xC1, 0x81, 0xD3, 0x93, 0x60, 0xE2, 0xA2, 0xE6, 0xA6, 0xD6, 0x96, 0xC4, 0x84, + 0xD5, 0x95, 0xD5, 0x76, 0xC9, 0x89, 0x71, 0xE6, 0xB6, 0xA6, 0x00, 0x60, 0x00, + 0xF5, 0xF3, 0x60, 0xF6, 0xF3, 0xF4, 0xF9, 0xF7, 0xF8, 0xF5, 0xF2, 0xF1, 0x60, + 0xF9, 0xF5, 0xF8, 0xF0, 0xD9, 0x99, 0xF1, 0xF9, 0xF9, 0xF1, 0x7A, 0xB5, 0xE5, + 0xE5, 0xA5, 0xD9, 0x99, 0xD9, 0x9B, 0xC9, 0x89, 0x71, 0x4B, 0xF6, 0xF7, 0xF8, + 0xF9, 0xF1, 0xF7, 0xF8, 0xF9, 0xF1, 0xF8, 0xF8, 0xF9, 0xF1, 0xF8, 0xF8, 0xF9, + 0xF1, 0xF8, 0xF8, 0xF9, 0xF1, 0xF7, 0xF8, 0xF9, 0xF1, 0xF7, 0xF8, 0xF9, 0xF1, + 0xF8, 0xF9, 0xF1, 0xF9, 0xF8, 0xF9, 0xF1, 0x00, 0x7A, 0x00, 0x7A, 0x00, 0x7A, + 0x00, 0x7A, 0x00, 0x7A, 0x00, 0x7A, 0x00, 0x7A, 0x00, 0x7A, 0x00, 0xF5, 0x7A, + 0xF9, 0xF8, 0xF7, 0xF6, 0xF5, 0xF4, 0xF3, 0xF2, 0xF1, 0x60, 0xF9, 0xF5, 0xF8, + 0xF4, 0xA2, 0xAB, 0xE2, 0xE4, 0xB4, 0xA4, 0x60, 0xF6, 0xF4, 0xF8, 0xF6, 0xF8, + 0xF1, 0xC9, 0x89, 0xF6, 0x6D, 0x60, 0xD6, 0x96, 0x77, 0xD5, 0x95, 0xD4, 0x94, + 0x75, 0xD9, 0x9B, 0x99, 0x60, 0x95, 0xD5, 0xC1, 0x81, 0xC5, 0x85, 0xF8, 0xF1, + 0xF0, 0xF6, 0xF5, 0xF9, 0xF7, 0xF8, 0xF9, 0xF1, 0x60, 0xF1, 0xF0, 0xF6, 0xF5, + 0x6D, 0xC3, 0x83, 0x64, 0x6D, 0xC3, 0x83, 0x6D, 0x64, 0xD9, 0xC9, 0x99, 0x89, + 0x71, 0xF9, 0x60, 0xD5, 0x76, 0xC9, 0x71, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0x60, + 0xD5, 0x95, 0xC9, 0x89, 0xE3, 0xA3, 0xE3, 0xB3, 0x71, 0xC9, 0xD1, 0x72, 0x89, + 0xC9, 0xD1, 0x91, 0xD5, 0x95, 0xD5, 0x76, 0xC1, 0x81, 0x62, 0xF3, 0xD2, 0x92, + 0x73, 0xF9, 0x6D, 0x96, 0xD6, 0xD9, 0x99, 0xE4, 0xA4, 0xC5, 0x85, 0x4E, 0xF0, + 0xF5, 0xF8, 0x60, 0xD3, 0x93, 0xC1, 0x81, 0xE4, 0xA4, 0xC7, 0x87, 0xD5, 0x95, + 0xC9, 0x89, 0xD3, 0x93, 0xC9, 0x89, 0xE3, 0xA3, 0xD6, 0x77, 0xD9, 0x9B, 0xE4, + 0xB4, 0xC5, 0x66, 0x4E, 0xF0, 0xF5, 0xF8, 0x60, 0xD3, 0x74, 0xC1, 0x62, 0xE4, + 0xB4, 0xC7, 0x68, 0xD5, 0x76, 0xC9, 0x71, 0xD3, 0x74, 0xC9, 0x71, 0xE3, 0xB3, + 0xD3, 0x74, 0xD3, 0x93, 0xE4, 0xB4, 0xA4, 0xD4, 0x94, 0x75, 0x60, 0x6D, 0xE3, + 0xB3, 0xC6, 0x67, 0x6D, 0xE3, 0xA3, 0xC6, 0x86, 0xC9, 0x89, 0xC9, 0x71, 0x60, + 0xE2, 0xAB, 0xA2, 0xF2, 0x60, 0xC3, 0x83, 0x64, 0xE2, 0xAB, 0xA2, 0xC1, 0x81, + 0x62, 0xC5, 0x85, 0x66, 0xC5, 0x85, 0x66, 0x74, 0x93, 0xD3, 0x63, 0x82, 0xC2, + 0xD3, 0xC2, 0x93, 0x82, 0x74, 0x63, 0x60, 0xC5, 0x85, 0x66, 0xC5, 0x85, 0x66, + 0x74, 0x93, 0xD3, 0x63, 0x82, 0xC2, 0xD3, 0xC2, 0x93, 0x82, 0x74, 0x63, 0x60, + 0xF2, 0xF6, 0xF8, 0xF3, 0xF1, 0xF8, 0xF3, 0xF1, 0x60, 0xC6, 0x86, 0x67, 0x00, + 0x60, 0xE2, 0xAB, 0xA2, 0xF9, 0xF1, 0x60, 0xA2, 0xE2, 0xE6, 0xA6, 0xD6, 0x96, + 0xC4, 0x84, 0xD5, 0x95, 0xE2, 0xAB, 0xE6, 0xB6, 0xD6, 0x77, 0xC4, 0x65, 0xD5, + 0x76, 0xF9, 0xF6, 0xF5, 0xF3, 0xF2, 0xF1, 0xF0, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, + 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, + 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, + 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, + 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, + 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, + 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xF6, 0xF5, 0xC9, 0x71, 0xC9, 0x89, + 0xE3, 0xE2, 0xC3, 0xB3, 0xAB, 0xA3, 0xA2, 0x83, 0x64, 0xC9, 0x89, 0x71, 0xC8, + 0x88, 0x69, 0xF8, 0xD6, 0x77, 0xF8, 0xD6, 0x96, 0xC3, 0x83, 0x64, 0xE2, 0xAB, + 0xA2, 0xF5, 0xF4, 0xF3, 0xF2, 0xF1, 0xC1, 0x81, 0x62, 0xE2, 0xD6, 0xAB, 0xA2, + 0x96, 0x77, 0xE2, 0xC2, 0xC1, 0xAB, 0xA2, 0x82, 0x81, 0x63, 0xD7, 0xC5, 0x97, + 0x85, 0xD9, 0xC2, 0x99, 0x82, 0x63, 0xE8, 0xE2, 0xD7, 0xC8, 0xC3, 0xA8, 0xA2, + 0x97, 0x88, 0x83, 0x78, 0x64, 0xC9, 0x89, 0x71, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, + 0xC1, 0x62, 0xD6, 0x77, 0xE2, 0xC2, 0xC1, 0xAB, 0x63, 0x62, 0xE7, 0xE4, 0xD3, + 0xC3, 0xC2, 0xB7, 0xB4, 0xA7, 0xA4, 0x93, 0x83, 0x82, 0x74, 0x64, 0x63, 0xE8, + 0xE2, 0xD7, 0xC8, 0xB8, 0xAB, 0x78, 0x69, 0x9B, 0x99, 0xD9, 0xE2, 0xD5, 0xC4, + 0xAB, 0xA2, 0x95, 0x84, 0x76, 0x65, 0x69, 0x49, 0x74, 0x73, 0x63, 0x54, 0x53, + 0x43, 0x69, 0x49, 0x68, 0x48, 0x38, 0xC9, 0x89, 0x71, 0x6F, 0x4F, 0x63, 0x43, + 0x73, 0x53, 0x31, 0x32, 0x33, 0x34, 0x35, 0x61, 0x41, 0x73, 0x6F, 0x53, 0x4F, + 0x69, 0x49, 0x66, 0xC5, 0xD7, 0x78, 0x73, 0x62, 0x61, 0x53, 0x42, 0x41, 0xD9, + 0x9B, 0x70, 0x65, 0x50, 0x45, 0x72, 0x62, 0x52, 0x42, 0x78, 0x75, 0x6C, 0x63, + 0x62, 0x58, 0x55, 0x4C, 0x43, 0x42, 0x79, 0x73, 0x70, 0x68, 0x63, 0x59, 0x53, + 0x50, 0x48, 0x43, 0x69, 0x49, 0x52, 0x72, 0x73, 0x6E, 0x64, 0x53, 0x4E, 0x44, + 0x35, 0x36, 0x28, 0x78, 0x77, 0x75, 0x74, 0x73, 0x72, 0x70, 0x6D, 0x6C, 0x6B, + 0x6A, 0x69, 0x68, 0x67, 0x65, 0x63, 0x62, 0x61, 0x58, 0x57, 0x55, 0x54, 0x53, + 0x52, 0x50, 0x4D, 0x4C, 0x4B, 0x4A, 0x49, 0x48, 0x47, 0x45, 0x43, 0x42, 0x41, + 0x39, 0x38, 0x34, 0xFE, 0xFE, 0x00, 0xFE, 0xFE, 0x00, 0xFE, 0xFE, 0xFE, 0xFE +}; diff --git a/os400/iconv/iconv.c b/os400/iconv/iconv.c new file mode 100644 index 0000000..c85c268 --- /dev/null +++ b/os400/iconv/iconv.c @@ -0,0 +1,154 @@ +/** +*** iconv_open(), iconv(), iconv_close() wrappers for the OS/400. +*** +*** See Copyright for the status of this software. +*** +*** Author: Patrick Monnerat , DATASPHERE S.A. +**/ + +#include +#include +#include + +#include "/QIBM/include/iconv.h" /* Force system definition. */ + +#define USE_SYSTEM_ICONV +#include "iconv.h" /* Use local definitions. */ + + + +/** +*** Bring-in the name-->CCSID mapping DFA tables. +**/ + +#include "ianatables.c" + + + +static int +findEncoding(const unsigned char * * namep) + +{ + t_staterange curstate; + t_ccsid ccsid; + t_ccsid final; + t_transrange l; + t_transrange h; + const unsigned char * name; + + /** + *** Get the CCSID correspong to the name at *`namep'. + *** If success, update pointer at `namep' to 1st byte after matched + *** name and return the CCSID. + *** If failure, set errno and return -1. + **/ + + if (!namep || !(name = *namep)) { + errno = EINVAL; + return -1; + } + + curstate = 0; + final = 0; + + for (;;) { + if (curstate < sizeof final_array / sizeof final_array[0]) + if (final_array[curstate]) { + final = final_array[curstate]; + *namep = name; + } + + l = trans_array[curstate] - 1; + h = trans_array[curstate + 1]; + + do { + if (++l >= h) { + if (!final) { + errno = EINVAL; + return -1; + } + + return final - 1; + } + } while (label_array[l] != *name); + + curstate = goto_array[l]; + name++; + } + + /* NOTREACHED. */ +} + + +static void +makeos400codename(char * buf, unsigned int ccsid) + +{ + ccsid &= 0xFFFF; + memset(buf, 0, 32); + sprintf(buf, "IBMCCSID%05u0000000", ccsid); +} + + +Iconv_t +IconvOpen(const char * tocode, const char * fromcode) + +{ + int toccsid = findEncoding(&tocode); + int fromccsid = findEncoding(&fromcode); + char fromibmccsid[33]; + char toibmccsid[33]; + iconv_t * cd; + + if (toccsid < 0 || fromccsid < 0) + return (Iconv_t) -1; + + makeos400codename(fromibmccsid, fromccsid); + makeos400codename(toibmccsid, toccsid); + memset(toibmccsid + 13, 0, sizeof toibmccsid - 13); + + cd = (iconv_t *) malloc(sizeof *cd); + + if (!cd) + return (Iconv_t) -1; + + *cd = iconv_open(toibmccsid, fromibmccsid); + + if (cd->return_value) { + free((char *) cd); + return (Iconv_t) -1; + } + + return (Iconv_t) cd; +} + + +size_t +Iconv(Iconv_t cd, char * * inbuf, size_t * inbytesleft, + char * * outbuf, size_t * outbytesleft) + +{ + if (!cd || cd == (Iconv_t) -1) { + errno = EINVAL; + return (size_t) -1; + } + + return iconv(*(iconv_t *) cd, inbuf, inbytesleft, outbuf, outbytesleft); +} + + +int +IconvClose(Iconv_t cd) + +{ + if (!cd || cd == (Iconv_t) -1) { + errno = EINVAL; + return -1; + } + + if (iconv_close(*(iconv_t *) cd)) + return -1; + + free((char *) cd); + return 0; +} diff --git a/os400/iconv/iconv.h b/os400/iconv/iconv.h new file mode 100644 index 0000000..87a8bbc --- /dev/null +++ b/os400/iconv/iconv.h @@ -0,0 +1,40 @@ +/** +*** Declarations for the iconv wrappers. +*** +*** See Copyright for the status of this software. +*** +*** Author: Patrick Monnerat , DATASPHERE S.A. +**/ + +#ifndef __ICONV_H_ +#define __ICONV_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include /* For size_t. */ + + +typedef void * Iconv_t; + + +Iconv_t IconvOpen(const char * tocode, const char * fromcode); +size_t Iconv(Iconv_t cd, char * * inbuf, size_t * inbytesleft, + char * * outbuf, size_t * outbytesleft); +int IconvClose(Iconv_t cd); + + +#ifndef USE_SYSTEM_ICONV +#define iconv_t Iconv_t +#define iconv_open IconvOpen +#define iconv Iconv +#define iconv_close IconvClose +#endif + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/os400/initscript.sh b/os400/initscript.sh new file mode 100644 index 0000000..cc52e45 --- /dev/null +++ b/os400/initscript.sh @@ -0,0 +1,315 @@ +#!/bin/sh +# +# Compilation scripts initialization for the OS/400 implementation. +# +# See Copyright for the status of this software. +# +# Author: Patrick Monnerat , DATASPHERE S.A. +# + + +case "${SCRIPTDIR}" in +/*) ;; +*) SCRIPTDIR="`pwd`/${SCRIPTDIR}" +esac + +while true +do case "${SCRIPTDIR}" in + */.) SCRIPTDIR="${SCRIPTDIR%/.}";; + *) break;; + esac +done + +# The script directory is supposed to be in $TOPDIR/os400. + +TOPDIR=`dirname "${SCRIPTDIR}"` +export SCRIPTDIR TOPDIR + + +setenv() + +{ + # Define and export. + + eval ${1}="${2}" + export ${1} +} + + +################################################################################ +# +# Tunable configuration parameters. +# +################################################################################ + +setenv TARGETLIB 'LIBXML2' # Target OS/400 program library. +setenv STATBNDDIR 'LIBXML2_A' # Static binding directory. +setenv DYNBNDDIR 'LIBXML2' # Dynamic binding directory. +setenv SRVPGM "LIBXML2" # Service program. +setenv TGTCCSID '500' # Target CCSID of objects. +setenv DEBUG '*ALL' # Debug level. +setenv OPTIMIZE '10' # Optimisation level. +setenv OUTPUT '*NONE' # Compilation output option. +setenv TGTRLS 'V5R3M0' # Target OS release. +setenv IFSDIR '/libxml2' # Installation IFS directory. + + +################################################################################ +# +# Conditional compilation parameters. +# +################################################################################ + +setenv WITH_TRIO 1 # Configure trio support. +setenv WITH_THREADS 1 # Configure thread support. +setenv WITH_THREAD_ALLOC 1 # Whether allocation hooks are per-thread. +setenv WITH_TREE 1 # Compile DOM tree API. +setenv WITH_OUTPUT 1 # Compile serialization/saving support. +setenv WITH_PUSH 1 # Compile push parser. +setenv WITH_READER 1 # Compile parsing interface. +setenv WITH_PATTERN 1 # Compile pattern node selection interface. +setenv WITH_WRITER 1 # Compile saving interface. +setenv WITH_SAX1 1 # Compile SAX version 1 interface. +setenv WITH_FTP 1 # Compile FTP support. +setenv WITH_HTTP 1 # Compile HTTP support. +setenv WITH_VALID 1 # Compile DTD validation support. +setenv WITH_HTML 1 # Compile HTML support. +setenv WITH_LEGACY 1 # Compile deprecated API. +setenv WITH_C14N 1 # Compile canonicalization support. +setenv WITH_CATALOG 1 # Compile catalog support. +setenv WITH_DOCB 1 # Compile SGML Docbook support. +setenv WITH_XPATH 1 # Compile XPath support. +setenv WITH_XPTR 1 # Compile XPointer support. +setenv WITH_XINCLUDE 1 # Compile XInclude support. +setenv WITH_ICONV 1 # Whether iconv support is available. +setenv WITH_ICU 0 # Whether icu support is available. +setenv WITH_ISO8859X 1 # Compile ISO-8859-* support if no iconv. +setenv WITH_DEBUG 1 # Compile debugging module. +setenv WITH_MEM_DEBUG 1 # Compile memory debugging module. +setenv WITH_RUN_DEBUG 1 # Compile runtime debugging. +setenv WITH_REGEXPS 1 # Compile regular expression interfaces. +setenv WITH_SCHEMAS 1 # Compile schema validation interface. +setenv WITH_SCHEMATRON 1 # Compile schematron validation interface. +setenv WITH_MODULES 1 # Compile module interfaces. +setenv WITH_ZLIB 0 # Whether zlib is available. +setenv WITH_LZMA 0 # Whether LZMA is available. + +# Define ZLIB locations. This is ignored if WITH_ZLIB is 0. + +setenv ZLIB_INCLUDE '/zlib/include' # ZLIB include IFS directory. +setenv ZLIB_LIB 'ZLIB' # ZLIB library. +setenv ZLIB_BNDDIR 'ZLIB_A' # ZLIB binding directory. + +################################################################################ +# +# OS/400 specific definitions. +# +################################################################################ + +setenv LIBIFSNAME "/QSYS.LIB/${TARGETLIB}.LIB" +setenv MODULE_EXTENSION '.SRVPGM' + + +################################################################################ +# +# Extract version information. +# +################################################################################ + + +# Transitional: get file name of configure script. + +AUTOCONFSCRIPT="${TOPDIR}/configure.ac" + +if [ ! -f "${AUTOCONFSCRIPT}" ] +then AUTOCONFSCRIPT="${TOPDIR}/configure.in" +fi + +# Need to get the version definitions. + +eval "`grep '^LIBXML_[A-Z]*_VERSION=' \"${AUTOCONFSCRIPT}\"`" +eval "`grep '^LIBXML_MICRO_VERSION_SUFFIX=' \"${AUTOCONFSCRIPT}\"`" +LIBXML_VERSION="${LIBXML_MAJOR_VERSION}.${LIBXML_MINOR_VERSION}" +LIBXML_VERSION="${LIBXML_VERSION}.${LIBXML_MICRO_VERSION}" +LIBXML_VERSION="${LIBXML_VERSION}${LIBXML_MICRO_VERSION_SUFFIX}" +LIBXML_VERSION_NUMBER=`expr "${LIBXML_MAJOR_VERSION}" \* 10000 + \ + "${LIBXML_MINOR_VERSION}" \* 100 + \ + "${LIBXML_MICRO_VERSION}"` +export LIBXML_MAJOR_VERSION LIBXML_MINOR_VERSION +export LIBXML_MICRO_VERSION LIBXML_MICROVERSION_SUFFIX +export LIBXML_VERSION LIBXML_VERSION_NUMBER +setenv LIBXML_VERSION_EXTRA '' +setenv VERSION "${LIBXML_VERSION}" + + +################################################################################ +# +# Procedures. +# +################################################################################ + +# action_needed dest [src] +# +# dest is an object to build +# if specified, src is an object on which dest depends. +# +# exit 0 (succeeds) if some action has to be taken, else 1. + +action_needed() + +{ + [ ! -e "${1}" ] && return 0 + [ "${2}" ] || return 1 + [ "${1}" -ot "${2}" ] && return 0 + return 1 +} + + +# make_module [option] module_name source_name +# +# Compile source name into ASCII module if needed. +# As side effect, append the module name to variable MODULES. +# Set LINK to "YES" if the module has been compiled. +# Options are: +# --define +# --ebcdic +# --sysiconv + +make_module() + +{ + DEFN= + EBCDIC= + SYSICONV= + while true + do case "${1}" in + --define) + DEFN="${2}" + shift + ;; + --ebcdic) + EBCDIC=yes + ;; + --sysiconv) + SYSICONV=yes + ;; + *) break + esac + shift + done + MODULES="${MODULES} ${1}" + MODIFSNAME="${LIBIFSNAME}/${1}.MODULE" + action_needed "${MODIFSNAME}" "${2}" || return 0; + + # #pragma convert has to be in the source file itself, i.e. + # putting it in an include file makes it only active + # for that include file. + # Thus we build a temporary file with the pragma prepended to + # the source file and we compile that temporary file. + + rm -f __tmpsrcf.c + if [ -z "${EBCDIC}" ] + then echo "#line 1 \"${2}\"" >> __tmpsrcf.c + echo "#pragma convert(819)" >> __tmpsrcf.c + echo '#include "wrappers.h"' >> __tmpsrcf.c + fi + echo "#line 1 \"${2}\"" >> __tmpsrcf.c + cat "${2}" >> __tmpsrcf.c + CMD="CRTCMOD MODULE(${TARGETLIB}/${1}) SRCSTMF('__tmpsrcf.c')" +# CMD="${CMD} OPTION(*INCDIRFIRST *SHOWINC *SHOWSYS)" + CMD="${CMD} OPTION(*INCDIRFIRST)" + CMD="${CMD} SYSIFCOPT(*IFS64IO) LANGLVL(*EXTENDED) LOCALETYPE(*LOCALE)" + CMD="${CMD} INCDIR(" + if [ -z "${SYSICONV}" ] + then CMD="${CMD} '${TOPDIR}/os400/iconv'" + fi + if [ -z "${EBCDIC}" ] + then CMD="${CMD} '/qibm/proddata/qadrt/include'" + fi + CMD="${CMD} '${TOPDIR}/os400' '${TOPDIR}/os400/dlfcn'" + CMD="${CMD} '${IFSDIR}/include/libxml' '${IFSDIR}/include'" + if [ "${ZLIB_INCLUDE}" ] + then CMD="${CMD} '${ZLIB_INCLUDE}'" + fi + CMD="${CMD} '${TOPDIR}' ${INCLUDES})" + CMD="${CMD} TGTCCSID(${TGTCCSID}) TGTRLS(${TGTRLS})" + CMD="${CMD} OUTPUT(${OUTPUT})" + CMD="${CMD} OPTIMIZE(${OPTIMIZE})" + CMD="${CMD} DBGVIEW(${DEBUG})" + CMD="${CMD} DEFINE('_REENTRANT' 'TRIO_HAVE_CONFIG_H' 'NDEBUG' ${DEFN})" + + system "${CMD}" + rm -f __tmpsrcf.c + LINK=YES +} + + +# Determine DB2 object name from IFS name. + +db2_name() + +{ + if [ "${2}" = 'nomangle' ] + then basename "${1}" | + tr 'a-z-' 'A-Z_' | + sed -e 's/\..*//' \ + -e 's/^\(..........\).*$/\1/' + else basename "${1}" | + tr 'a-z-' 'A-Z_' | + sed -e 's/\..*//' \ + -e 's/^TEST/T/' \ + -e 's/^XML/X/' \ + -e 's/^\(.\).*\(.........\)$/\1\2/' + fi +} + + +# Copy IFS file replacing version & configuration info. + +versioned_copy() + +{ + sed -e "s/@LIBXML_VERSION@/${LIBXML_VERSION}/g" \ + \ + -e "s#@LIBXML_MAJOR_VERSION@#${LIBXML_MAJOR_VERSION}#g" \ + -e "s#@LIBXML_MINOR_VERSION@#${LIBXML_MINOR_VERSION}#g" \ + -e "s#@LIBXML_MICRO_VERSION@#${LIBXML_MICRO_VERSION}#g" \ + -e "s#@LIBXML_MICRO_VERSION_SUFFIX@#${LIBXML_MICRO_VERSION_SUFFIX}#g" \ + -e "s#@LIBXML_VERSION@#${LIBXML_VERSION}#g" \ + -e "s#@LIBXML_VERSION_NUMBER@#${LIBXML_VERSION_NUMBER}#g" \ + -e "s#@LIBXML_VERSION_EXTRA@#${LIBXML_VERSION_EXTRA}#g" \ + -e "s#@VERSION@#${VERSION}#g" \ + -e "s#@WITH_TRIO@#${WITH_TRIO}#g" \ + -e "s#@WITH_THREADS@#${WITH_THREADS}#g" \ + -e "s#@WITH_THREAD_ALLOC@#${WITH_THREAD_ALLOC}#g" \ + -e "s#@WITH_TREE@#${WITH_TREE}#g" \ + -e "s#@WITH_OUTPUT@#${WITH_OUTPUT}#g" \ + -e "s#@WITH_PUSH@#${WITH_PUSH}#g" \ + -e "s#@WITH_READER@#${WITH_READER}#g" \ + -e "s#@WITH_PATTERN@#${WITH_PATTERN}#g" \ + -e "s#@WITH_WRITER@#${WITH_WRITER}#g" \ + -e "s#@WITH_SAX1@#${WITH_SAX1}#g" \ + -e "s#@WITH_FTP@#${WITH_FTP}#g" \ + -e "s#@WITH_HTTP@#${WITH_HTTP}#g" \ + -e "s#@WITH_VALID@#${WITH_VALID}#g" \ + -e "s#@WITH_HTML@#${WITH_HTML}#g" \ + -e "s#@WITH_LEGACY@#${WITH_LEGACY}#g" \ + -e "s#@WITH_C14N@#${WITH_C14N}#g" \ + -e "s#@WITH_CATALOG@#${WITH_CATALOG}#g" \ + -e "s#@WITH_DOCB@#${WITH_DOCB}#g" \ + -e "s#@WITH_XPATH@#${WITH_XPATH}#g" \ + -e "s#@WITH_XPTR@#${WITH_XPTR}#g" \ + -e "s#@WITH_XINCLUDE@#${WITH_XINCLUDE}#g" \ + -e "s#@WITH_ICONV@#${WITH_ICONV}#g" \ + -e "s#@WITH_ICU@#${WITH_ICU}#g" \ + -e "s#@WITH_ISO8859X@#${WITH_ISO8859X}#g" \ + -e "s#@WITH_DEBUG@#${WITH_DEBUG}#g" \ + -e "s#@WITH_MEM_DEBUG@#${WITH_MEM_DEBUG}#g" \ + -e "s#@WITH_RUN_DEBUG@#${WITH_RUN_DEBUG}#g" \ + -e "s#@WITH_REGEXPS@#${WITH_REGEXPS}#g" \ + -e "s#@WITH_SCHEMAS@#${WITH_SCHEMAS}#g" \ + -e "s#@WITH_SCHEMATRON@#${WITH_SCHEMATRON}#g" \ + -e "s#@WITH_MODULES@#${WITH_MODULES}#g" \ + -e "s#@WITH_ZLIB@#${WITH_ZLIB}#g" \ + -e "s#@WITH_LZMA@#${WITH_LZMA}#g" +} diff --git a/os400/libxmlmain.c b/os400/libxmlmain.c new file mode 100644 index 0000000..91c848a --- /dev/null +++ b/os400/libxmlmain.c @@ -0,0 +1,102 @@ +/** +*** QADRT/QADRTMAIN2 substitution program. +*** This is needed because the IBM-provided QADRTMAIN2 does not +*** properly translate arguments by default or if no locale is provided. +*** +*** See Copyright for the status of this software. +*** +*** Author: Patrick Monnerat , DATASPHERE S.A. +**/ + +#include +#include +#include +#include +#include + +/* Do not use qadrt.h since it defines unneeded static procedures. */ +extern void QadrtInit(void); +extern int QadrtFreeConversionTable(void); +extern int QadrtFreeEnviron(void); +extern char * setlocale_a(int, const char *); + + +/* The ASCII main program. */ +extern int main_a(int argc, char * * argv); + +/* Global values of original EBCDIC arguments. */ +int ebcdic_argc; +char * * ebcdic_argv; + + +int +main(int argc, char * * argv) + +{ + int i; + int j; + iconv_t cd; + size_t bytecount = 0; + char * inbuf; + char * outbuf; + size_t inbytesleft; + size_t outbytesleft; + char dummybuf[128]; + char tocode[32]; + char fromcode[32]; + + ebcdic_argc = argc; + ebcdic_argv = argv; + + /* Build the encoding converter. */ + strncpy(tocode, "IBMCCSID01208", sizeof tocode); + strncpy(fromcode, "IBMCCSID000000000010", sizeof fromcode); + cd = iconv_open(tocode, fromcode); + + /* Measure the arguments. */ + for (i = 0; i < argc; i++) { + inbuf = argv[i]; + do { + inbytesleft = 0; + outbuf = dummybuf; + outbytesleft = sizeof dummybuf; + j = iconv(cd, + &inbuf, &inbytesleft, &outbuf, &outbytesleft); + bytecount += outbuf - dummybuf; + } while (j == -1 && errno == E2BIG); + /* Reset the shift state. */ + iconv(cd, NULL, &inbytesleft, &outbuf, &outbytesleft); + } + + /* Allocate memory for the ASCII arguments and vector. */ + argv = (char * *) malloc((argc + 1) * sizeof *argv + bytecount); + + /* Build the vector and convert argument encoding. */ + outbuf = (char *) (argv + argc + 1); + outbytesleft = bytecount; + + for (i = 0; i < argc; i++) { + argv[i] = outbuf; + inbuf = ebcdic_argv[i]; + inbytesleft = 0; + iconv(cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft); + iconv(cd, NULL, &inbytesleft, &outbuf, &outbytesleft); + } + + iconv_close(cd); + argv[argc] = NULL; + + /* Try setting the locale regardless of QADRT_ENV_LOCALE. */ + setlocale_a(LC_ALL, ""); + + /* Call the program. */ + i = main_a(argc, argv); + + /* Clean-up allocated items. */ + free((char *) argv); + QadrtFreeConversionTable(); + QadrtFreeEnviron(); + + /* Terminate. */ + return i; +} diff --git a/os400/libxmlrpg/DOCBparser.rpgle b/os400/libxmlrpg/DOCBparser.rpgle new file mode 100644 index 0000000..08a6b8c --- /dev/null +++ b/os400/libxmlrpg/DOCBparser.rpgle @@ -0,0 +1,120 @@ + * Summary: old DocBook SGML parser + * Description: interface for a DocBook SGML non-verifying parser + * This code is DEPRECATED, and should not be used anymore. + * + * Copy: See Copyright for the status of this software. + * + * Author: Patrick Monnerat , DATASPHERE S.A. + + /if not defined(DOCB_PARSER_H__) + /define DOCB_PARSER_H__ + + /include "libxmlrpg/xmlversion" + + /if defined(LIBXML_DOCB_ENABLED) + + /include "libxmlrpg/xmlTypesC" + /include "libxmlrpg/parser" + /include "libxmlrpg/parserInternals" + + * Most of the back-end structures from XML and SGML are shared. + + d docbParserCtxtPtr... + d s based(######typedef######) + d like(xmlParserCtxtPtr) + + d docbParserCtxt ds based(docbParserCtxtPtr) + d likeds(xmlParserCtxt) + + d docbSAXHandlerPtr... + d s based(######typedef######) + d like(xmlSAXHandlerPtr) + + d docbSAXHandler ds based(docbSAXHandlerPtr) + d likeds(xmlSAXHandler) + + d docbParserInputPtr... + d s based(######typedef######) + d like(xmlParserInputPtr) + + d docbParserInput... + d ds based(docbParserInputPtr) + d likeds(xmlParserInput) + + d docbDocPtr s based(######typedef######) + d like(xmlDocPtr) + + * There is only few public functions. + + d docbEncodeEntities... + d pr extproc('docbEncodeEntities') + d like(xmlCint) + d out * value options(*string) unsigned char * + d outlen * value int * + d in * value options(*string) const unsigned char + d * + d inlen * value int * + d quoteChar value like(xmlCint) + + d docbSAXParseDoc... + d pr extproc('docbSAXParseDoc') + d like(docbDocPtr) + d cur * value options(*string) xmlChar * + d encoding * value options(*string) const char * + d sax value like(docbSAXHandlerPtr) + d userData * value void * + + d docbParseDoc pr extproc('docbParseDoc') + d like(docbDocPtr) + d cur * value options(*string) xmlChar * + d encoding * value options(*string) const char * + + d docbSAXParseFile... + d pr extproc('docbSAXParseFile') + d like(docbDocPtr) + d filename * value options(*string) const char * + d encoding * value options(*string) const char * + d sax value like(docbSAXHandlerPtr) + d userData * value void * + + d docbParseFile pr extproc('docbParseFile') + d like(docbDocPtr) + d filename * value options(*string) const char * + d encoding * value options(*string) const char * + + * Interfaces for the Push mode. + + d docbFreeParserCtxt... + d pr extproc('docbFreeParserCtxt') + d ctxt value like(docbParserCtxtPtr) + + d docbCreatePushParserCtxt... + d pr extproc('docbCreatePushParserCtxt') + d like(docbParserCtxtPtr) + d sax value like(docbSAXHandlerPtr) + d user_data * value void * + d chunk * value options(*string) const char * + d size value like(xmlCint) + d filename * value options(*string) const char * + d enc value like(xmlCharEncoding) + + d docbParseChunk pr extproc('docbParseChunk') + d like(xmlCint) + d ctxt value like(docbParserCtxtPtr) + d chunk * value options(*string) const char * + d size value like(xmlCint) + d terminate value like(xmlCint) + + d docbCreateFileParserCtxt... + d pr extproc('docbCreateFileParserCtxt') + d like(docbParserCtxtPtr) + d filename * value options(*string) const char * + d encoding * value options(*string) const char * + + d docbParseDocument... + d pr extproc('docbParseDocument') + d like(xmlCint) + d ctxt value like(docbParserCtxtPtr) + + /endif LIBXML_DOCB_ENABLED + /endif DOCB_PARSER_H__ diff --git a/os400/libxmlrpg/HTMLparser.rpgle b/os400/libxmlrpg/HTMLparser.rpgle new file mode 100644 index 0000000..c27d8e5 --- /dev/null +++ b/os400/libxmlrpg/HTMLparser.rpgle @@ -0,0 +1,419 @@ + * Summary: interface for an HTML 4.0 non-verifying parser + * Description: this module implements an HTML 4.0 non-verifying parser + * with API compatible with the XML parser ones. It should + * be able to parse "real world" HTML, even if severely + * broken from a specification point of view. + * + * Copy: See Copyright for the status of this software. + * + * Author: Patrick Monnerat , DATASPHERE S.A. + + /if not defined(HTML_PARSER_H__) + /define HTML_PARSER_H__ + + /include "libxmlrpg/xmlversion" + + /if defined(LIBXML_HTML_ENABLED) + + /include "libxmlrpg/xmlTypesC" + /include "libxmlrpg/parser" + + * Most of the back-end structures from XML and HTML are shared. + + d htmlParserCtxtPtr... + d s based(######typedef######) + d like(xmlParserCtxtPtr) + + d htmlParserCtxt ds based(htmlParserCtxtPtr) + d likeds(xmlParserCtxt) + + d htmlParserNodeInfoPtr... + d s based(######typedef######) + d like(xmlParserNodeInfoPtr) + + d htmlParserNodeInfo... + d ds based(htmlParserNodeInfoPtr) + d likeds(xmlParserNodeInfo) + + d htmlSAXHandlerPtr... + d s based(######typedef######) + d like(xmlSAXHandlerPtr) + + d htmlSAXHandler ds based(htmlSAXHandlerPtr) + d likeds(xmlSAXHandler) + + d htmlParserInputPtr... + d s based(######typedef######) + d like(xmlParserInputPtr) + + d htmlParserInput... + d ds based(htmlParserInputPtr) + d likeds(xmlParserInput) + + d htmlDocPtr s based(######typedef######) + d like(xmlDocPtr) + + d htmlNodePtr s based(######typedef######) + d like(xmlNodePtr) + + * Internal description of an HTML element, representing HTML 4.01 + * and XHTML 1.0 (which share the same structure). + + d htmlElemDescPtr... + d s * based(######typedef######) + + d htmlElemDesc ds based(htmlElemDescPtr) + d align qualified + d name * const char * + d startTag like(xmlCchar) Start tag implied ? + d endTag like(xmlCchar) End tag implied ? + d saveEndTag like(xmlCchar) Save end tag ? + d empty like(xmlCchar) Empty element ? + d depr like(xmlCchar) Deprecated element ? + d dtd like(xmlCchar) Loose DTD/Frameset + d isinline like(xmlCchar) Block 0/inline elem? + d desc * const char * + * + * New fields encapsulating HTML structure + * + * Bugs: + * This is a very limited representation. It fails to tell us when + * an element *requires* subelements (we only have whether they're + * allowed or not), and it doesn't tell us where CDATA and PCDATA + * are allowed. Some element relationships are not fully represented: + * these are flagged with the word MODIFIER + * + d subelts * const char * * + d defaultsubelt * const char * + d attrs_opt * const char * * + d attrs_depr * const char * * + d attrs_req * const char * * + + * Internal description of an HTML entity. + + d htmlEntityDescPtr... + d s * based(######typedef######) + + d htmlEntityDesc... + d ds based(htmlEntityDescPtr) + d align qualified + d value like(xmlCuint) + d name * const char * + d desc * const char * + + * There is only few public functions. + + d htmlTagLookup pr extproc('htmlTagLookup') + d like(htmlElemDescPtr) const + d tag * value options(*string) const xmlChar * + + d htmlEntityLookup... + d pr extproc('htmlEntityLookup') + d like(htmlEntityDescPtr) const + d name * value options(*string) const xmlChar * + + d htmlEntityValueLookup... + d pr extproc('htmlEntityValueLookup') + d like(htmlEntityDescPtr) const + d value value like(xmlCuint) + + d htmlIsAutoClosed... + d pr extproc('htmlIsAutoClosed') + d like(xmlCint) + d doc value like(htmlDocPtr) + d elem value like(htmlNodePtr) + + d htmlAutoCloseTag... + d pr extproc('htmlAutoCloseTag') + d like(xmlCint) + d doc value like(htmlDocPtr) + d name * value options(*string) const xmlChar * + d elem value like(htmlNodePtr) + + d htmlParseEntityRef... + d pr extproc('htmlParseEntityRef') + d like(htmlEntityDescPtr) const + d ctxt value like(htmlParserCtxtPtr) + d str * const xmlChar *(*) + + d htmlParseCharRef... + d pr extproc('htmlParseCharRef') + d like(xmlCint) + d ctxt value like(htmlParserCtxtPtr) + + d htmlParseElement... + d pr extproc('htmlParseElement') + d ctxt value like(htmlParserCtxtPtr) + + d htmlNewParserCtxt... + d pr extproc('htmlNewParserCtxt') + d like(htmlParserCtxtPtr) + + d htmlCreateMemoryParserCtxt... + d pr extproc('htmlCreateMemoryParserCtxt') + d like(htmlParserCtxtPtr) + d buffer * value options(*string) const char * + d size value like(xmlCint) + + d htmlParseDocument... + d pr extproc('htmlParseDocument') + d like(xmlCint) + d ctxt value like(htmlParserCtxtPtr) + + d htmlSAXParseDoc... + d pr extproc('htmlSAXParseDoc') + d like(htmlDocPtr) + d cur * value options(*string) xmlChar * + d encoding * value options(*string) const char * + d sax value like(htmlSAXHandlerPtr) + d userData * value void * + + d htmlParseDoc pr extproc('htmlParseDoc') + d like(htmlDocPtr) + d cur * value options(*string) xmlChar * + d encoding * value options(*string) const char * + + d htmlSAXParseFile... + d pr extproc('htmlSAXParseFile') + d like(htmlDocPtr) + d filename * value options(*string) const char * + d encoding * value options(*string) const char * + d sax value like(htmlSAXHandlerPtr) + d userData * value void * + + d htmlParseFile pr extproc('htmlParseFile') + d like(htmlDocPtr) + d filename * value options(*string) const char * + d encoding * value options(*string) const char * + + d UTF8ToHtml pr extproc('UTF8ToHtml') + d like(xmlCint) + d out 65535 options(*varsize) unsigned char [] + d outlen like(xmlCint) + d in * value options(*string) const unsigned char* + d inlen like(xmlCint) + + d htmlEncodeEntities... + d pr extproc('htmlEncodeEntities') + d like(xmlCint) + d out 65535 options(*varsize) unsigned char [] + d outlen like(xmlCint) + d in * value options(*string) const unsigned char* + d inlen like(xmlCint) + d quoteChar value like(xmlCint) + + d htmlIsScriptAttribute... + d pr extproc('htmlIsScriptAttribute') + d like(xmlCint) + d name * value options(*string) const xmlChar * + + d htmlHandleOmittedElem... + d pr extproc('htmlHandleOmittedElem') + d like(xmlCint) + d val value like(xmlCint) + + /if defined(LIBXML_PUSH_ENABLED) + + * Interfaces for the Push mode. + + d htmlCreatePushParserCtxt... + d pr extproc('htmlCreatePushParserCtxt') + d like(htmlParserCtxtPtr) + d sax value like(htmlSAXHandlerPtr) + d user_data * value void * + d chunk * value options(*string) const char * + d size value like(xmlCint) + d filename * value options(*string) const char * + d enc value like(xmlCharEncoding) + + d htmlParseChunk pr extproc('htmlParseChunk') + d like(xmlCint) + d ctxt value like(htmlParserCtxtPtr) + d chunk * value options(*string) const char * + d size value like(xmlCint) + d terminate value like(xmlCint) + /endif LIBXML_PUSH_ENABLED + + d htmlFreeParserCtxt... + d pr extproc('htmlFreeParserCtxt') + d ctxt value like(htmlParserCtxtPtr) + + * New set of simpler/more flexible APIs + + * xmlParserOption: + * + * This is the set of XML parser options that can be passed down + * to the xmlReadDoc() and similar calls. + + d htmlParserOption... + d s based(######typedef######) + d like(xmlCenum) + d HTML_PARSE_RECOVER... Relaxed parsing + d c X'00000001' + d HTML_PARSE_NODEFDTD... No default doctype + d c X'00000004' + d HTML_PARSE_NOERROR... No error reports + d c X'00000020' + d HTML_PARSE_NOWARNING... No warning reports + d c X'00000040' + d HTML_PARSE_PEDANTIC... Pedantic err reports + d c X'00000080' + d HTML_PARSE_NOBLANKS... Remove blank nodes + d c X'00000100' + d HTML_PARSE_NONET... Forbid net access + d c X'00000800' + d HTML_PARSE_NOIMPLIED... No implied html/body + d c X'00002000' + d HTML_PARSE_COMPACT... compact small txtnod + d c X'00010000' + d HTML_PARSE_IGNORE_ENC... Ignore encoding hint + d c X'00200000' + + d htmlCtxtReset pr extproc('htmlCtxtReset') + d ctxt value like(htmlParserCtxtPtr) + + d htmlCtxtUseOptions... + d pr extproc('htmlCtxtUseOptions') + d like(xmlCint) + d ctxt value like(htmlParserCtxtPtr) + d options value like(xmlCint) + + d htmlReadDoc pr extproc('htmlReadDoc') + d like(htmlDocPtr) + d cur * value options(*string) const xmlChar * + d URL * value options(*string) const char * + d encoding * value options(*string) const char * + d options value like(xmlCint) + + d htmlReadFile pr extproc('htmlReadFile') + d like(htmlDocPtr) + d URL * value options(*string) const char * + d encoding * value options(*string) const char * + d options value like(xmlCint) + + d htmlReadMemory pr extproc('htmlReadMemory') + d like(htmlDocPtr) + d buffer * value options(*string) const char * + d size value like(xmlCint) + d URL * value options(*string) const char * + d encoding * value options(*string) const char * + d options value like(xmlCint) + + d htmlReadFd pr extproc('htmlReadFd') + d like(htmlDocPtr) + d fd value like(xmlCint) + d URL * value options(*string) const char * + d encoding * value options(*string) const char * + d options value like(xmlCint) + + d htmlReadIO pr extproc('htmlReadIO') + d like(htmlDocPtr) + d ioread value like(xmlInputReadCallback) + d ioclose value like(xmlInputCloseCallback) + d ioctx * value void * + d URL * value options(*string) const char * + d encoding * value options(*string) const char * + d options value like(xmlCint) + + d htmlCtxtReadDoc... + d pr extproc('htmlCtxtReadDoc') + d like(htmlDocPtr) + d ctxt value like(xmlParserCtxtPtr) + d cur * value options(*string) const xmlChar * + d URL * value options(*string) const char * + d encoding * value options(*string) const char * + d options value like(xmlCint) + + d htmlCtxtReadFile... + d pr extproc('htmlCtxtReadFile') + d like(htmlDocPtr) + d ctxt value like(xmlParserCtxtPtr) + d filename * value options(*string) const char * + d encoding * value options(*string) const char * + d options value like(xmlCint) + + d htmlCtxtReadMemory... + d pr extproc('htmlCtxtReadMemory') + d like(htmlDocPtr) + d ctxt value like(xmlParserCtxtPtr) + d buffer * value options(*string) const char * + d size value like(xmlCint) + d URL * value options(*string) const char * + d encoding * value options(*string) const char * + d options value like(xmlCint) + + d htmlCtxtReadFd pr extproc('htmlCtxtReadFd') + d like(htmlDocPtr) + d ctxt value like(xmlParserCtxtPtr) + d fd value like(xmlCint) + d URL * value options(*string) const char * + d encoding * value options(*string) const char * + d options value like(xmlCint) + + d htmlCtxtReadIO pr extproc('htmlCtxtReadIO') + d like(htmlDocPtr) + d ctxt value like(xmlParserCtxtPtr) + d ioread value like(xmlInputReadCallback) + d ioclose value like(xmlInputCloseCallback) + d ioctx * value void * + d URL * value options(*string) const char * + d encoding * value options(*string) const char * + d options value like(xmlCint) + + * Further knowledge of HTML structure + + d htmlStatus s based(######typedef######) + d like(xmlCenum) + d HTML_NA c X'0000' No check at all + d HTML_INVALID c X'0001' + d HTML_DEPRECATED... + d c X'0002' + d HTML_VALID c X'0004' + d HTML_REQUIRED c X'000C' HTML_VALID ored-in + + * Using htmlElemDesc rather than name here, to emphasise the fact + * that otherwise there's a lookup overhead + + d htmlAttrAllowed... + d pr extproc('htmlAttrAllowed') + d like(htmlStatus) + d #param1 value like(htmlElemDescPtr) const + d #param2 * value options(*string) const xmlChar * + d #param3 value like(xmlCint) + + d htmlElementAllowedHere... + d pr extproc('htmlElementAllowedHere') + d like(xmlCint) + d #param1 value like(htmlElemDescPtr) const + d #param2 * value options(*string) const xmlChar * + + d htmlElementStatusHere... + d pr extproc('htmlElementStatusHere') + d like(htmlStatus) + d #param1 value like(htmlElemDescPtr) const + d #param2 value like(htmlElemDescPtr) const + + d htmlNodeStatus pr extproc('htmlNodeStatus') + d like(htmlStatus) + d #param1 value like(htmlNodePtr) + d #param2 value like(xmlCint) + + * C macros implemented as procedures for ILE/RPG support. + + d htmlDefaultSubelement... + d pr * extproc('__htmlDefaultSubelement') const char * + d elt * value const htmlElemDesc * + + d htmlElementAllowedHereDesc... + d pr extproc( + d '__htmlElementAllowedHereDesc') + d like(xmlCint) + d parent * value const htmlElemDesc * + d elt * value const htmlElemDesc * + + d htmlRequiredAttrs... + d pr * extproc('__htmlRequiredAttrs') const char * * + d elt * value const htmlElemDesc * + + /endif LIBXML_HTML_ENABLED + /endif HTML_PARSER_H__ diff --git a/os400/libxmlrpg/HTMLtree.rpgle b/os400/libxmlrpg/HTMLtree.rpgle new file mode 100644 index 0000000..99c38a0 --- /dev/null +++ b/os400/libxmlrpg/HTMLtree.rpgle @@ -0,0 +1,176 @@ + * Summary: specific APIs to process HTML tree, especially serialization + * Description: this module implements a few function needed to process + * tree in an HTML specific way. + * + * Copy: See Copyright for the status of this software. + * + * Author: Patrick Monnerat , DATASPHERE S.A. + + /if not defined(HTML_TREE_H__) + /define HTML_TREE_H__ + + /include "libxmlrpg/xmlversion" + + /if defined(LIBXML_HTML_ENABLED) + + /include "libxmlrpg/xmlTypesC" + /include "libxmlrpg/tree" + /include "libxmlrpg/HTMLparser" + + * HTML_TEXT_NODE: + * + * Macro. A text node in a HTML document is really implemented + * the same way as a text node in an XML document. + + d HTML_TEXT_NODE c 3 + + * HTML_ENTITY_REF_NODE: + * + * Macro. An entity reference in a HTML document is really implemented + * the same way as an entity reference in an XML document. + + d HTML_ENTITY_REF_NODE... + d c 5 + + * HTML_COMMENT_NODE: + * + * Macro. A comment in a HTML document is really implemented + * the same way as a comment in an XML document. + + d HTML_COMMENT_NODE... + d c 8 + + * HTML_PRESERVE_NODE: + * + * Macro. A preserved node in a HTML document is really implemented + * the same way as a CDATA section in an XML document. + + d HTML_PRESERVE_NODE... + d c 4 + + * HTML_PI_NODE: + * + * Macro. A processing instruction in a HTML document is really implemented + * the same way as a processing instruction in an XML document. + + d HTML_PI_NODE c 7 + + d htmlNewDoc pr extproc('htmlNewDoc') + d like(htmlDocPtr) + d URI * value options(*string) const xmlChar * + d ExternalID * value options(*string) const xmlChar * + + d htmlNewDocNoDtD... + d pr extproc('htmlNewDocNoDtD') + d like(htmlDocPtr) + d URI * value options(*string) const xmlChar * + d ExternalID * value options(*string) const xmlChar * + + d htmlGetMetaEncoding... + d pr * extproc('htmlGetMetaEncoding') const xmlChar * + d doc value like(htmlDocPtr) + + d htmlSetMetaEncoding... + d pr extproc('htmlSetMetaEncoding') + d like(xmlCint) + d doc value like(htmlDocPtr) + d encoding * value options(*string) const xmlChar * + + /if defined(LIBXML_OUTPUT_ENABLED) + d htmlDocDumpMemory... + d pr extproc('htmlDocDumpMemory') + d cur value like(xmlDocPtr) + d mem * value xmlChar * * + d size like(xmlCint) + + d htmlDocDumpMemoryFormat... + d pr extproc('htmlDocDumpMemoryFormat') + d cur value like(xmlDocPtr) + d mem * value xmlChar * * + d size like(xmlCint) + d format value like(xmlCint) + + d htmlDocDump pr extproc('htmlDocDump') + d like(xmlCint) + d f * value FILE * + d cur value like(xmlDocPtr) + + d htmlSaveFile pr extproc('htmlSaveFile') + d like(xmlCint) + d filename * value options(*string) const char * + d cur value like(xmlDocPtr) + + d htmlNodeDump pr extproc('htmlNodeDump') + d like(xmlCint) + d buf value like(xmlBufferPtr) + d doc value like(xmlDocPtr) + d cur value like(xmlNodePtr) + + d htmlNodeDumpFile... + d pr extproc('htmlNodeDumpFile') + d out * value FILE * + d doc value like(xmlDocPtr) + d cur value like(xmlNodePtr) + + d htmlNodeDumpFileFormat... + d pr extproc('htmlNodeDumpFileFormat') + d like(xmlCint) + d out * value FILE * + d doc value like(xmlDocPtr) + d cur value like(xmlNodePtr) + d encoding * value options(*string) const char * + d format value like(xmlCint) + + d htmlSaveFileEnc... + d pr extproc('htmlSaveFileEnc') + d like(xmlCint) + d filename * value options(*string) const char * + d cur value like(xmlDocPtr) + d encoding * value options(*string) const char * + + d htmlSaveFileFormat... + d pr extproc('htmlSaveFileFormat') + d like(xmlCint) + d filename * value options(*string) const char * + d cur value like(xmlDocPtr) + d encoding * value options(*string) const char * + d format value like(xmlCint) + + d htmlNodeDumpFormatOutput... + d pr extproc('htmlNodeDumpFormatOutput') + d buf value like(xmlOutputBufferPtr) + d doc value like(xmlDocPtr) + d cur value like(xmlNodePtr) + d encoding * value options(*string) const char * + d format value like(xmlCint) + + d htmlDocContentDumpOutput... + d pr extproc('htmlDocContentDumpOutput') + d buf value like(xmlOutputBufferPtr) + d cur value like(xmlDocPtr) + d encoding * value options(*string) const char * + + d htmlDocContentDumpFormatOutput... + d pr extproc( + d 'htmlDocContentDumpFormatOutput') + d buf value like(xmlOutputBufferPtr) + d cur value like(xmlDocPtr) + d encoding * value options(*string) const char * + d format value like(xmlCint) + + d htmlNodeDumpOutput... + d pr extproc('htmlNodeDumpOutput') + d buf value like(xmlOutputBufferPtr) + d doc value like(xmlDocPtr) + d cur value like(xmlNodePtr) + d encoding * value options(*string) const char * + + /endif LIBXML_OUTPUT_ENABLD + + d htmlIsBooleanAttr... + d pr extproc('htmlIsBooleanAttr') + d like(xmlCint) + d name * value options(*string) const xmlChar * + + /endif LIBXML_HTML_ENABLED + /endif HTML_TREE_H__ diff --git a/os400/libxmlrpg/SAX.rpgle b/os400/libxmlrpg/SAX.rpgle new file mode 100644 index 0000000..a22d49a --- /dev/null +++ b/os400/libxmlrpg/SAX.rpgle @@ -0,0 +1,213 @@ + * Summary: Old SAX version 1 handler, deprecated + * Description: DEPRECATED set of SAX version 1 interfaces used to + * build the DOM tree. + * + * Copy: See Copyright for the status of this software. + * + * Author: Patrick Monnerat , DATASPHERE S.A. + + /if not defined(XML_SAX_H__) + /define XML_SAX_H__ + + /include "libxmlrpg/xmlversion" + /include "libxmlrpg/parser" + /include "libxmlrpg/xlink" + + /if defined(LIBXML_LEGACY_ENABLED) + + d getPublicId pr * extproc('getPublicId') const xmlChar * + d ctx * value void * + + d getSystemId pr * extproc('getSystemId') const xmlChar * + d ctx * value void * + + d setDocumentLocator... + d pr extproc('setDocumentLocator') + d ctx * value void * + d loc value like(xmlSAXLocatorPtr) + + d getLineNumber pr extproc('getLineNumber') + d like(xmlCint) + d ctx * value void * + + d getColumnNumber... + d pr extproc('getColumnNumber') + d like(xmlCint) + d ctx * value void * + + d isStandalone pr extproc('isStandalone') + d like(xmlCint) + d ctx * value void * + + d hasInternalSubset... + d pr extproc('hasInternalSubset') + d like(xmlCint) + d ctx * value void * + + d hasExternalSubset... + d pr extproc('hasExternalSubset') + d like(xmlCint) + d ctx * value void * + + d internalSubset pr extproc('internalSubset') + d ctx * value void * + d name * value options(*string) const xmlChar * + d ExternalID * value options(*string) const xmlChar * + d SystemID * value options(*string) const xmlChar * + + d externalSubset pr extproc('externalSubset') + d ctx * value void * + d name * value options(*string) const xmlChar * + d ExternalID * value options(*string) const xmlChar * + d SystemID * value options(*string) const xmlChar * + + d getEntity pr extproc('getEntity') + d like(xmlEntityPtr) + d ctx * value void * + d name * value options(*string) const xmlChar * + + d getParameterEntity... + d pr extproc('getParameterEntity') + d like(xmlEntityPtr) + d ctx * value void * + d name * value options(*string) const xmlChar * + + d resolveEntity pr extproc('resolveEntity') + d like(xmlParserInputPtr) + d ctx * value void * + d publicId * value options(*string) const xmlChar * + d systemId * value options(*string) const xmlChar * + + d entityDecl pr extproc('entityDecl') + d ctx * value void * + d name * value options(*string) const xmlChar * + d type value like(xmlCint) + d publicId * value options(*string) const xmlChar * + d systemId * value options(*string) const xmlChar * + d content * value options(*string) xmlChar * + + d attributeDecl pr extproc('attributeDecl') + d ctx * value void * + d elem * value options(*string) const xmlChar * + d fullname * value options(*string) const xmlChar * + d type value like(xmlCint) + d def value like(xmlCint) + d defaultValue * value options(*string) const xmlChar * + d tree value like(xmlEnumerationPtr) + + d elementDecl pr extproc('elementDecl') + d ctx * value void * + d name * value options(*string) const xmlChar * + d type value like(xmlCint) + d content value like(xmlElementContentPtr) + + d notationDecl pr extproc('notationDecl') + d ctx * value void * + d name * value options(*string) const xmlChar * + d publicId * value options(*string) const xmlChar * + d systemId * value options(*string) const xmlChar * + + d unparsedEntityDecl... + d pr extproc('unparsedEntityDecl') + d ctx * value void * + d name * value options(*string) const xmlChar * + d publicId * value options(*string) const xmlChar * + d systemId * value options(*string) const xmlChar * + d notationName * value options(*string) const xmlChar * + + d startDocument pr extproc('startDocument') + d ctx * value void * + + d endDocument pr extproc('endDocument') + d ctx * value void * + + d attribute pr extproc('attribute') + d ctx * value void * + d fullname * value options(*string) const xmlChar * + d value * value options(*string) const xmlChar * + + d startElement pr extproc('startElement') + d ctx * value void * + d fullname * value options(*string) const xmlChar * + d atts * const xmlChar *(*) + + d endElement pr extproc('endElement') + d ctx * value void * + d name * value options(*string) const xmlChar * + + d reference pr extproc('reference') + d ctx * value void * + d name * value options(*string) const xmlChar * + + d characters pr extproc('characters') + d ctx * value void * + d ch * value options(*string) const xmlChar * + d len value like(xmlCint) + + d ignorableWhitespace... + d pr extproc('ignorableWhitespace') + d ctx * value void * + d ch * value options(*string) const xmlChar * + d len value like(xmlCint) + + d processingInstruction... + d pr extproc('processingInstruction') + d ctx * value void * + d target * value options(*string) const xmlChar * + d data * value options(*string) const xmlChar * + + d globalNamespace... + d pr extproc('globalNamespace') + d ctx * value void * + d href * value options(*string) const xmlChar * + d prefix * value options(*string) const xmlChar * + + d setNamespace pr extproc('setNamespace') + d ctx * value void * + d name * value options(*string) const xmlChar * + + d getNamespace pr extproc('getNamespace') + d like(xmlNsPtr) + d ctx * value void * + + d checkNamespace pr extproc('checkNamespace') + d like(xmlCint) + d ctx * value void * + d nameSpace * value options(*string) xmlChar * + + d namespaceDecl pr extproc('namespaceDecl') + d ctx * value void * + d href * value options(*string) const xmlChar * + d prefix * value options(*string) const xmlChar * + + d comment pr extproc('comment') + d ctx * value void * + d value * value options(*string) const xmlChar * + + d cdataBlock pr extproc('cdataBlock') + d ctx * value void * + d value * value options(*string) const xmlChar * + d len value like(xmlCint) + + /if defined(LIBXML_SAX1_ENABLED) + d initxmlDefaultSAXHandler... + d pr extproc('initxmlDefaultSAXHandler') + d hdlr likeds(xmlSAXHandlerV1) + d warning value like(xmlCint) + + /if defined(LIBXML_HTML_ENABLED) + d inithtmlDefaultSAXHandler... + d pr extproc('inithtmlDefaultSAXHandler') + d hdlr likeds(xmlSAXHandlerV1) + /endif + + /if defined(LIBXML_DOCB_ENABLED) + d initdocbDefaultSAXHandler... + d pr extproc('initdocbDefaultSAXHandler') + d hdlr likeds(xmlSAXHandlerV1) + /endif + /endif LIBXML_SAX1_ENABLED + + /endif LIBXML_LEGACY_ENABLD + + /endif XML_SAX_H__ diff --git a/os400/libxmlrpg/SAX2.rpgle b/os400/libxmlrpg/SAX2.rpgle new file mode 100644 index 0000000..c72be25 --- /dev/null +++ b/os400/libxmlrpg/SAX2.rpgle @@ -0,0 +1,256 @@ + * Summary: SAX2 parser interface used to build the DOM tree + * Description: those are the default SAX2 interfaces used by + * the library when building DOM tree. + * + * Copy: See Copyright for the status of this software. + * + * Author: Patrick Monnerat , DATASPHERE S.A. + + /if not defined(XML_SAX2_H__) + /define XML_SAX2_H__ + + /include "libxmlrpg/xmlversion" + /include "libxmlrpg/xmlTypesC" + /include "libxmlrpg/parser" + /include "libxmlrpg/xlink" + + d xmlSAX2GetPublicId... + d pr * extproc('xmlSAX2getPublicId') const xmlChar * + d ctx * value void * + + d xmlSAX2GetSystemId... + d pr * extproc('xmlSAX2getSystemId') const xmlChar * + d ctx * value void * + + d xmlSAX2SetDocumentLocator... + d pr extproc('xmlSAX2SetDocumentLocator') + d ctx * value void * + d loc value like(xmlSAXLocatorPtr) + + d xmlSAX2GetLineNumber... + d pr extproc('xmlSAX2GetLineNumber') + d like(xmlCint) + d ctx * value void * + + d xmlSAX2GetColumnNumber... + d pr extproc('xmlSAX2GetColumnNumber') + d like(xmlCint) + d ctx * value void * + + d xmlSAX2IsStandalone... + d pr extproc('xmlSAX2IsStandalone') + d like(xmlCint) + d ctx * value void * + + d xmlSAX2HasInternalSubset... + d pr extproc('xmlSAX2HasInternalSubset') + d like(xmlCint) + d ctx * value void * + + d xmlSAX2HasExternalSubset... + d pr extproc('xmlSAX2HasExternalSubset') + d like(xmlCint) + d ctx * value void * + + d xmlSAX2InternalSubset... + d pr extproc('xmlSAX2InternalSubset') + d ctx * value void * + d name * value options(*string) const xmlChar * + d ExternalID * value options(*string) const xmlChar * + d SystemID * value options(*string) const xmlChar * + + d xmlSAX2ExternalSubset... + d pr extproc('xmlSAX2ExternalSubset') + d ctx * value void * + d name * value options(*string) const xmlChar * + d ExternalID * value options(*string) const xmlChar * + d SystemID * value options(*string) const xmlChar * + + d xmlSAX2GetEntity... + d pr extproc('xmlSAX2GetEntity') + d like(xmlEntityPtr) + d ctx * value void * + d name * value options(*string) const xmlChar * + + d xmlSAX2GetParameterEntity... + d pr extproc('xmlSAX2GetParameterEntity') + d like(xmlEntityPtr) + d ctx * value void * + d name * value options(*string) const xmlChar * + + d xmlSAX2ResolveEntity... + d pr extproc('xmlSAX2ResolveEntity') + d like(xmlParserInputPtr) + d ctx * value void * + d publicId * value options(*string) const xmlChar * + d systemId * value options(*string) const xmlChar * + + d xmlSAX2EntityDecl... + d pr extproc('xmlSAX2EntityDecl') + d ctx * value void * + d name * value options(*string) const xmlChar * + d type value like(xmlCint) + d publicId * value options(*string) const xmlChar * + d systemId * value options(*string) const xmlChar * + d content * value options(*string) xmlChar * + + d xmlSAX2AttributeDecl... + d pr extproc('xmlSAX2AttributeDecl') + d ctx * value void * + d elem * value options(*string) const xmlChar * + d fullname * value options(*string) const xmlChar * + d type value like(xmlCint) + d def value like(xmlCint) + d defaultValue * value options(*string) const xmlChar * + d tree value like(xmlEnumerationPtr) + + d xmlSAX2ElementDecl... + d pr extproc('xmlSAX2ElementDecl') + d ctx * value void * + d name * value options(*string) const xmlChar * + d type value like(xmlCint) + d content value like(xmlElementContentPtr) + + d xmlSAX2NotationDecl... + d pr extproc('xmlSAX2NotationDecl') + d ctx * value void * + d name * value options(*string) const xmlChar * + d publicId * value options(*string) const xmlChar * + d systemId * value options(*string) const xmlChar * + + d xmlSAX2UnparsedEntityDecl... + d pr extproc('xmlSAX2UnparsedEntityDecl') + d ctx * value void * + d name * value options(*string) const xmlChar * + d publicId * value options(*string) const xmlChar * + d systemId * value options(*string) const xmlChar * + d notationName * value options(*string) xmlChar * + + d xmlSAX2StartDocument... + d pr extproc('xmlSAX2StartDocument') + d ctx * value void * + + d xmlSAX2EndDocument... + d pr extproc('xmlSAX2EndDocument') + d ctx * value void * + + /undefine XML_TESTVAL + /if defined(LIBXML_SAX1_ENABLED) + /define XML_TESTVAL + /elseif defined(LIBXML_HTML_ENABLED) + /define XML_TESTVAL + /elseif defined(LIBXML_WRITER_ENABLED) + /define XML_TESTVAL + /elseif defined(LIBXML_DOCB_ENABLED) + /endif + /if defined(XML_TESTVAL) + d xmlSAX2StartElement... + d pr extproc('xmlSAX2StartElement') + d ctx * value void * + d fullname * value options(*string) const xmlChar * + d atts * const xmlChar *(*) + + d xmlSAX2EndElement... + d pr extproc('xmlSAX2EndElement') + d ctx * value void * + d name * value options(*string) const xmlChar * + + /undefine XML_TESTVAL + /endif + + d xmlSAX2StartElementNs... + d pr extproc('xmlSAX2StartElementNs') + d ctx * value void * + d localname * value options(*string) const xmlChar * + d prefix * value options(*string) const xmlChar * + d URI * value options(*string) const xmlChar * + d nb_namespaces value like(xmlCint) + d namespaces * value const xmlChar *(*) + d nb_attributes value like(xmlCint) + d nb_defaulted value like(xmlCint) + d attributes * const xmlChar *(*) + + d xmlSAX2EndElementNs... + d pr extproc('xmlSAX2EndElementNs') + d ctx * value void * + d localname * value options(*string) const xmlChar * + d prefix * value options(*string) const xmlChar * + d URI * value options(*string) const xmlChar * + + d xmlSAX2Reference... + d pr extproc('xmlSAX2Reference') + d ctx * value void * + d name * value options(*string) const xmlChar * + + d xmlSAX2Characters... + d pr extproc('xmlSAX2Characters') + d ctx * value void * + d ch * value options(*string) const xmlChar * + d len value like(xmlCint) + + d xmlSAX2IgnorableWhitespace... + d pr extproc('xmlSAX2IgnorableWhitespace') + d ctx * value void * + d ch * value options(*string) const xmlChar * + d len value like(xmlCint) + + d xmlSAX2ProcessingInstruction... + d pr extproc( + d 'xmlSAX2ProcessingInstruction') + d ctx * value void * + d target * value options(*string) const xmlChar * + d data * value options(*string) const xmlChar * + + d xmlSAX2Comment... + d pr extproc('xmlSAX2Comment') + d ctx * value void * + d value * value options(*string) const xmlChar * + + d xmlSAX2CDataBlock... + d pr extproc('xmlSAX2CDataBlock') + d ctx * value void * + d value * value options(*string) const xmlChar * + d len value like(xmlCint) + + /if defined(LIBXML_SAX1_ENABLED) + d xmlSAXDefaultVersion... + d pr extproc('xmlSAXDefaultVersion') + d like(xmlCint) + d version value like(xmlCint) + /endif LIBXML_SAX1_ENABLED + + d xmlSAXVersion pr extproc('xmlSAXVersion') + d like(xmlCint) + d hdlr likeds(xmlSAXHandler) + d version value like(xmlCint) + + d xmlSAX2InitDefaultSAXHandler... + d pr extproc( + d 'xmlSAX2InitDefaultSAXHandler') + d hdlr likeds(xmlSAXHandler) + d warning value like(xmlCint) + + /if defined(LIBXML_HTML_ENABLED) + d xmlSAX2InitHtmlDefaultSAXHandler... + d pr extproc( + d 'xmlSAX2InitHtmlDefaultSAXHandler') + d hdlr likeds(xmlSAXHandler) + + d htmlDefaultSAXHandlerInit... + d pr extproc('htmlDefaultSAXHandlerInit') + /endif + + /if defined(LIBXML_DOCB_ENABLED) + d xmlSAX2InitDocbDefaultSAXHandler... + d pr extproc( + d 'xmlSAX2InitDocbDefaultSAXHandler') + d hdlr likeds(xmlSAXHandler) + + d docbDefaultSAXHandlerInit... + d pr extproc('docbDefaultSAXHandlerInit') + /endif + + d xmlDefaultSAXHandlerInit... + d pr extproc('xmlDefaultSAXHandlerInit') + + /endif XML_SAX2_H__ diff --git a/os400/libxmlrpg/c14n.rpgle b/os400/libxmlrpg/c14n.rpgle new file mode 100644 index 0000000..963ed37 --- /dev/null +++ b/os400/libxmlrpg/c14n.rpgle @@ -0,0 +1,125 @@ + * Summary: Provide Canonical XML and Exclusive XML Canonicalization + * Description: the c14n modules provides a + * + * "Canonical XML" implementation + * http://www.w3.org/TR/xml-c14n + * + * and an + * + * "Exclusive XML Canonicalization" implementation + * http://www.w3.org/TR/xml-exc-c14n + * + * Copy: See Copyright for the status of this software. + * + * Author: Patrick Monnerat , DATASPHERE S.A. + + /if not defined(XML_C14N_H__) + /define XML_C14N_H__ + + /include "libxmlrpg/xmlversion" + + /if defined(LIBXML_C14N_ENABLED) + /if defined(LIBXML_OUTPUT_ENABLED) + + /include "libxmlrpg/xmlTypesC" + /include "libxmlrpg/tree" + /include "libxmlrpg/xpath" + + * XML Canonicazation + * http://www.w3.org/TR/xml-c14n + * + * Exclusive XML Canonicazation + * http://www.w3.org/TR/xml-exc-c14n + * + * Canonical form of an XML document could be created if and only if + * a) default attributes (if any) are added to all nodes + * b) all character and parsed entity references are resolved + * In order to achive this in libxml2 the document MUST be loaded with + * following global setings: + * + * xmlLoadExtDtdDefaultValue = XML_DETECT_IDS ã XML_COMPLETE_ATTRS; + * xmlSubstituteEntitiesDefault(1); + * + * or corresponding parser context setting: + * xmlParserCtxtPtr ctxt; + * + * ... + * ctxt->loadsubset = XML_DETECT_IDS ã XML_COMPLETE_ATTRS; + * ctxt->replaceEntities = 1; + * ... + + * xmlC14NMode: + * + * Predefined values for C14N modes + + d xmlBufferAllocationScheme... + d xmlC14NMode s based(######typedef######) + d like(xmlCenum) + d XML_C14N_1_0 c 0 Original C14N 1.0 + d XML_C14N_EXCLUSIVE_1_0... Exclusive C14N 1.0 + d c 1 + d XML_C14N_1_1 c 2 C14N 1.1 spec + + d xmlC14NDocSaveTo... + d pr extproc('xmlC14NDocSaveTo') + d like(xmlCint) + d doc value like(xmlDocPtr) + d nodes value like(xmlNodeSetPtr) + d mode value like(xmlCint) + d inclusive_ns_prefixes... + d * options(*omit) xmlChar *(*) + d with_comments value like(xmlCint) + d buf value like(xmlOutputBufferPtr) + + d xmlC14NDocDumpMemory... + d pr extproc('xmlC14NDocDumpMemory') + d like(xmlCint) + d doc value like(xmlDocPtr) + d nodes value like(xmlNodeSetPtr) + d mode value like(xmlCint) + d inclusive_ns_prefixes... + d * options(*omit) xmlChar *(*) + d with_comments value like(xmlCint) + d doc_txt_ptr * xmlChar *(*) + + d xmlC14NDocSave pr extproc('xmlC14NDocSave') + d like(xmlCint) + d doc value like(xmlDocPtr) + d nodes value like(xmlNodeSetPtr) + d mode value like(xmlCint) + d inclusive_ns_prefixes... + d * options(*omit) xmlChar *(*) + d with_comments value like(xmlCint) + d filename * value options(*string) const char * + d compression value like(xmlCint) + + * This is the core C14N function + + * xmlC14NIsVisibleCallback: + * @user_data: user data + * @node: the curent node + * @parent: the parent node + * + * Signature for a C14N callback on visible nodes + * + * Returns 1 if the node should be included + + d xmlC14NIsVisibleCallback... + d s * based(######typedef######) + d procptr + + d xmlC14NExecute pr extproc('xmlC14NExecute') + d like(xmlCint) + d doc value like(xmlDocPtr) + d is_visible_callback... + d value like(xmlC14NIsVisibleCallback) + d user_data * value void * + d mode value like(xmlCint) + d inclusive_ns_prefixes... + d * options(*omit) xmlChar *(*) + d with_comments value like(xmlCint) + d buf value like(xmlOutputBufferPtr) + + /endif LIBXML_OUTPUT_ENABLD + /endif LIBXML_C14N_ENABLED + /endif XML_C14N_H__ diff --git a/os400/libxmlrpg/catalog.rpgle b/os400/libxmlrpg/catalog.rpgle new file mode 100644 index 0000000..1dab819 --- /dev/null +++ b/os400/libxmlrpg/catalog.rpgle @@ -0,0 +1,248 @@ + * Summary: interfaces to the Catalog handling system + * Description: the catalog module implements the support for + * XML Catalogs and SGML catalogs + * + * SGML Open Technical Resolution TR9401:1997. + * http://www.jclark.com/sp/catalog.htm + * + * XML Catalogs Working Draft 06 August 2001 + * http://www.oasis-open.org/committees/entity/spec-2001-08-06.html + * + * Copy: See Copyright for the status of this software. + * + * Author: Patrick Monnerat , DATASPHERE S.A. + + /if not defined(XML_CATALOG_H__) + /define XML_CATALOG_H__ + + /include "libxmlrpg/xmlversion" + + /if defined(LIBXML_CATALOG_ENABLED) + + /include "libxmlrpg/xmlTypesC" + /include "libxmlrpg/xmlstring" + /include "libxmlrpg/tree" + + * XML_CATALOGS_NAMESPACE: + * + * The namespace for the XML Catalogs elements. + + d XML_CATALOGS_NAMESPACE... + d c 'urn:oasis:names:+ + d tc:entity:xmlns:xml:catalog' + + * XML_CATALOG_PI: + * + * The specific XML Catalog Processing Instuction name. + + d XML_CATALOG_PI c 'oasis-xml-catalog' + + * The API is voluntarily limited to general cataloging. + + d xmlCatalogPrefer... + d s based(######typedef######) + d like(xmlCenum) + d XML_CATA_PREFER_NONE... + d c 0 + d XML_CATA_PREFER_PUBLIC... + d c 1 + d XML_CATA_PREFER_SYSTEM... + d c 2 + + d xmlCatalogAllow... + d s based(######typedef######) + d like(xmlCenum) + d XML_CATA_ALLOW_NONE... + d c 0 + d XML_CATA_ALLOW_GLOBAL... + d c 1 + d XML_CATA_ALLOW_DOCUMENT... + d c 2 + d XML_CATA_ALLOW_ALL... + d c 3 + + d xmlCatalogPtr s * based(######typedef######) + + * Operations on a given catalog. + + d xmlNewCatalog pr extproc('xmlNewCatalog') + d like(xmlCatalogPtr) + d sgml value like(xmlCint) + + d xmlLoadACatalog... + d pr extproc('xmlLoadACatalog') + d like(xmlCatalogPtr) + d filename * value options(*string) const char * + + d xmlLoadSGMLSuperCatalog... + d pr extproc('xmlLoadSGMLSuperCatalog') + d like(xmlCatalogPtr) + d filename * value options(*string) const char * + + d xmlConvertSGMLCatalog... + d pr extproc('xmlConvertSGMLCatalog') + d like(xmlCint) + d catal value like(xmlCatalogPtr) + + d xmlACatalogAdd pr extproc('xmlACatalogAdd') + d like(xmlCint) + d catal value like(xmlCatalogPtr) + d type * value options(*string) const xmlChar * + d orig * value options(*string) const xmlChar * + d replace * value options(*string) const xmlChar * + + d xmlACatalogRemove... + d pr extproc('xmlACatalogRemove') + d like(xmlCint) + d catal value like(xmlCatalogPtr) + d value * value options(*string) const xmlChar * + + d xmlACatalogResolve... + d pr * extproc('xmlACatalogResolve') xmlChar * + d catal value like(xmlCatalogPtr) + d pubID * value options(*string) const xmlChar * + d sysID * value options(*string) const xmlChar * + + d xmlACatalogResolveSystem... + d pr * extproc('xmlACatalogResolveSystem') xmlChar * + d catal value like(xmlCatalogPtr) + d sysID * value options(*string) const xmlChar * + + d xmlACatalogResolvePublic... + d pr * extproc('xmlACatalogResolvePublic') xmlChar * + d catal value like(xmlCatalogPtr) + d pubID * value options(*string) const xmlChar * + + d xmlACatalogResolveURI... + d pr * extproc('xmlACatalogResolveURI') xmlChar * + d catal value like(xmlCatalogPtr) + d URI * value options(*string) const xmlChar * + + /if defined(LIBXML_OUTPUT_ENABLED) + d xmlACatalogDump... + d pr extproc('xmlACatalogDump') + d catal value like(xmlCatalogPtr) + d out * value FILE * + /endif LIBXML_OUTPUT_ENABLD + + d xmlFreeCatalog pr extproc('xmlFreeCatalog') + d catal value like(xmlCatalogPtr) + + d xmlCatalogIsEmpty... + d pr extproc('xmlCatalogIsEmpty') + d like(xmlCint) + d catal value like(xmlCatalogPtr) + + * Global operations. + + d xmlInitializeCatalog... + d pr extproc('xmlInitializeCatalog') + + d xmlLoadCatalog pr extproc('xmlLoadCatalog') + d like(xmlCint) + d filename * value options(*string) const char * + + d xmlLoadCatalogs... + d pr extproc('xmlLoadCatalogs') + d paths * value options(*string) const char * + + d xmlCatalogCleanup... + d pr extproc('xmlCatalogCleanup') + + /if defined(LIBXML_OUTPUT_ENABLED) + d xmlCatalogDump pr extproc('xmlCatalogDump') + d out * value FILE * + /endif LIBXML_OUTPUT_ENABLD + + d xmlCatalogResolve... + d pr * extproc('xmlCatalogResolve') xmlChar * + d pubID * value options(*string) const xmlChar * + d sysID * value options(*string) const xmlChar * + + d xmlCatalogResolveSystem... + d pr * extproc('xmlCatalogResolveSystem') xmlChar * + d sysID * value options(*string) const xmlChar * + + d xmlCatalogResolvePublic... + d pr * extproc('xmlCatalogResolvePublic') xmlChar * + d pubID * value options(*string) const xmlChar * + + d xmlCatalogResolveURI... + d pr * extproc('xmlCatalogResolveURI') xmlChar * + d URI * value options(*string) const xmlChar * + + d xmlCatalogAdd pr extproc('xmlCatalogAdd') + d like(xmlCint) + d type * value options(*string) const xmlChar * + d orig * value options(*string) const xmlChar * + d replace * value options(*string) const xmlChar * + + d xmlCatalogRemove... + d pr extproc('xmlCatalogRemove') + d like(xmlCint) + d value * value options(*string) const xmlChar * + + d xmlParseCatalogFile... + d pr extproc('xmlParseCatalogFile') + d like(xmlDocPtr) + d filename * value options(*string) const char * + + d xmlCatalogConvert... + d pr extproc('xmlCatalogConvert') + d like(xmlCint) + + * Strictly minimal interfaces for per-document catalogs used + * by the parser. + + d xmlCatalogFreeLocal... + d pr extproc('xmlCatalogFreeLocal') + d catalogs * value void * + + d xmlCatalogAddLocal... + d pr * extproc('xmlCatalogAddLocal') void * + d catalogs * value void * + d URL * value options(*string) const xmlChar * + + d xmlCatalogLocalResolve... + d pr * extproc('xmlCatalogLocalResolve') xmlChar * + d catalogs * value void * + d pubID * value options(*string) const xmlChar * + d sysID * value options(*string) const xmlChar * + + d xmlCatalogLocalResolveURI... + d pr * extproc('xmlCatalogLocalResolveURI') xmlChar * + d catalogs * value void * + d URI * value options(*string) const xmlChar * + + * Preference settings. + + d xmlCatalogSetDebug... + d pr extproc('xmlCatalogSetDebug') + d like(xmlCint) + d level value like(xmlCint) + + d xmlCatalogSetDefaultPrefer... + d pr extproc('xmlCatalogSetDefaultPrefer') + d like(xmlCatalogPrefer) + d prefer value like(xmlCatalogPrefer) + + d xmlCatalogSetDefaults... + d pr extproc('xmlCatalogSetDefaults') + d allow value like(xmlCatalogAllow) + + d xmlCatalogGetDefaults... + d pr extproc('xmlCatalogGetDefaults') + d like(xmlCatalogAllow) + + * DEPRECATED interfaces + + d xmlCatalogGetSystem... + d pr * extproc('xmlCatalogGetSystem') const xmlChar * + d sysID * value options(*string) const xmlChar * + + d xmlCatalogGetPublic... + d pr * extproc('xmlCatalogGetPublic') const xmlChar * + d pubID * value options(*string) const xmlChar * + + /endif LIBXML_CATALOG_ENBLD + /endif XML_CATALOG_H__ diff --git a/os400/libxmlrpg/chvalid.rpgle b/os400/libxmlrpg/chvalid.rpgle new file mode 100644 index 0000000..c601442 --- /dev/null +++ b/os400/libxmlrpg/chvalid.rpgle @@ -0,0 +1,107 @@ + * Summary: Unicode character range checking + * Description: this module exports interfaces for the character + * range validation APIs + * + * Copy: See Copyright for the status of this software. + * + * Author: Patrick Monnerat , DATASPHERE S.A. + + /if not defined(XML_CHVALID_H__) + /define XML_CHVALID_H__ + + /include "libxmlrpg/xmlversion" + /include "libxmlrpg/xmlTypesC" + /include "libxmlrpg/xmlstring" + + * Define our typedefs and structures + + d xmlChSRangePtr s * based(######typedef######) + + d xmlChSRange ds based(xmlChSRangePtr) + d align qualified + d low like(xmlCushort) + d high like(xmlCushort) + + d xmlChLRangePtr s * based(######typedef######) + + d xmlChLRange ds based(xmlChLRangePtr) + d align qualified + d low like(xmlCuint) + d high like(xmlCuint) + + d xmlChRangeGroupPtr... + d s * based(######typedef######) + + d xmlChRangeGroup... + d ds based(xmlChRangeGroupPtr) + d align qualified + d nbShortRange like(xmlCint) + d nbLongRange like(xmlCint) + d shortRange like(xmlChSRangePtr) + d longRange like(xmlChLRangePtr) + + * Range checking routine + + d xmlCharInRange pr extproc('xmlCharInRange') + d like(xmlCint) + d val value like(xmlCuint) + d group like(xmlChRangeGroupPtr) const + + d xmlIsBaseCharGroup... + d ds import('xmlIsBaseCharGroup') + d likeds(xmlChRangeGroup) const + + d xmlIsCharGroup... + d ds import('xmlIsCharGroup') + d likeds(xmlChRangeGroup) const + + d xmlIsCombiningGroup... + d ds import('xmlIsCombiningGroup') + d likeds(xmlChRangeGroup) const + + d xmlIsDigitGroup... + d ds import('xmlIsDigitGroup') + d likeds(xmlChRangeGroup) const + + d xmlIsExtenderGroup... + d ds import('xmlIsExtenderGroup') + d likeds(xmlChRangeGroup) const + + d xmlIsIdeographicGroup... + d ds import('xmlIsIdeographicGroup') + d likeds(xmlChRangeGroup) const + + d xmlIsBaseChar pr extproc('xmlIsBaseChar') + d like(xmlCint) + d ch value like(xmlCuint) + + d xmlIsBlank pr extproc('xmlIsBlank') + d like(xmlCint) + d ch value like(xmlCuint) + + d xmlIsChar pr extproc('xmlIsChar') + d like(xmlCint) + d ch value like(xmlCuint) + + d xmlIsCombining pr extproc('xmlIsCombining') + d like(xmlCint) + d ch value like(xmlCuint) + + d xmlIsDigit pr extproc('xmlIsDigit') + d like(xmlCint) + d ch value like(xmlCuint) + + d xmlIsExtender pr extproc('xmlIsExtender') + d like(xmlCint) + d ch value like(xmlCuint) + + d xmlIsIdeographic... + d pr extproc('xmlIsIdeographic') + d like(xmlCint) + d ch value like(xmlCuint) + + d xmlIsPubidChar pr extproc('xmlIsPubidChar') + d like(xmlCint) + d ch value like(xmlCuint) + + /endif XML_CHVALID_H__ diff --git a/os400/libxmlrpg/debugXML.rpgle b/os400/libxmlrpg/debugXML.rpgle new file mode 100644 index 0000000..81826bc --- /dev/null +++ b/os400/libxmlrpg/debugXML.rpgle @@ -0,0 +1,254 @@ + * Summary: Tree debugging APIs + * Description: Interfaces to a set of routines used for debugging the tree + * produced by the XML parser. + * + * Copy: See Copyright for the status of this software. + * + * Author: Patrick Monnerat , DATASPHERE S.A. + + /if not defined(DEBUG_XML__) + /define DEBUG_XML__ + + /include "libxmlrpg/xmlversion" + + /if defined(LIBXML_DEBUG_ENABLED) + + /include "libxmlrpg/xmlTypesC" + /include "libxmlrpg/tree" + /include "libxmlrpg/xpath" + + * The standard Dump routines. + + d xmlDebugDumpString... + d pr extproc('xmlDebugDumpString') + d output * value FILE * + d str * value options(*string) const xmlChar * + + d xmlDebugDumpAttr... + d pr extproc('xmlDebugDumpAttr') + d output * value FILE * + d attr value like(xmlAttrPtr) + d depth value like(xmlCint) + + d xmlDebugDumpAttrList... + d pr extproc('xmlDebugDumpAttrList') + d output * value FILE * + d attr value like(xmlAttrPtr) + d depth value like(xmlCint) + + d xmlDebugDumpOneNode... + d pr extproc('xmlDebugDumpOneNode') + d output * value FILE * + d node value like(xmlNodePtr) + d depth value like(xmlCint) + + d xmlDebugDumpNode... + d pr extproc('xmlDebugDumpNode') + d output * value FILE * + d node value like(xmlNodePtr) + d depth value like(xmlCint) + + d xmlDebugDumpNodeList... + d pr extproc('xmlDebugDumpNodeList') + d output * value FILE * + d node value like(xmlNodePtr) + d depth value like(xmlCint) + + d xmlDebugDumpDocumentHead... + d pr extproc('xmlDebugDumpDocumentHead') + d output * value FILE * + d doc value like(xmlDocPtr) + + d xmlDebugDumpDocument... + d pr extproc('xmlDebugDumpDocument') + d output * value FILE * + d doc value like(xmlDocPtr) + + d xmlDebugDumpDTD... + d pr extproc('xmlDebugDumpDTD') + d output * value FILE * + d dtd value like(xmlDtdPtr) + + d xmlDebugDumpEntities... + d pr extproc('xmlDebugDumpEntities') + d output * value FILE * + d doc value like(xmlDocPtr) + + **************************************************************** + * * + * Checking routines * + * * + **************************************************************** + + d xmlDebugCheckDocument... + d pr extproc('xmlDebugCheckDocument') + d like(xmlCint) + d output * value FILE * + d doc value like(xmlDocPtr) + + **************************************************************** + * * + * XML shell helpers * + * * + **************************************************************** + + d xmlLsOneNode pr extproc('xmlLsOneNode') + d output * value FILE * + d node value like(xmlNodePtr) + + d xmlLsCountNode pr extproc('xmlLsCountNode') + d like(xmlCint) + d node value like(xmlNodePtr) + + d xmlBoolToText pr * extproc('xmlBoolToText') const char * + d boolval value like(xmlCint) + + **************************************************************** + * * + * The XML shell related structures and functions * + * * + **************************************************************** + + /if defined(LIBXML_XPATH_ENABLED) + + * xmlShellReadlineFunc: + * @prompt: a string prompt + * + * This is a generic signature for the XML shell input function. + * + * Returns a string which will be freed by the Shell. + + d xmlShellReadlineFunc... + d s * based(######typedef######) + d procptr + + * xmlShellCtxt: + * + * A debugging shell context. + * TODO: add the defined function tables. + + d xmlShellCtxtPtr... + d s * based(######typedef######) + + d xmlSchellCtxt ds based(xmlShellCtxtPtr) + d align qualified + d filename * char * + d doc like(xmlDocPtr) + d node like(xmlNodePtr) + d pctxt like(xmlXPathContextPtr) + d loaded like(xmlCint) + d output * FILE * + d input like(xmlShellReadlineFunc) + + * xmlShellCmd: + * @ctxt: a shell context + * @arg: a string argument + * @node: a first node + * @node2: a second node + * + * This is a generic signature for the XML shell functions. + * + * Returns an int, negative returns indicating errors. + + d xmlShellCmd s * based(######typedef######) + d procptr + + d xmlShellPrintXPathError... + d pr extproc('xmlShellPrintXPathError') + d errorType value like(xmlCint) + d arg * value options(*string) const char * + + d xmlShellPrintXPathResult... + d pr extproc('xmlShellPrintXPathResult') + d list value like(xmlXPathObjectPtr) + + d xmlShellList pr extproc('xmlShellList') + d like(xmlCint) + d ctxt value like(xmlShellCtxtPtr) + d arg * value options(*string) char * + d node value like(xmlNodePtr) + d node2 value like(xmlNodePtr) + + d xmlShellBase pr extproc('xmlShellBase') + d like(xmlCint) + d ctxt value like(xmlShellCtxtPtr) + d arg * value options(*string) char * + d node value like(xmlNodePtr) + d node2 value like(xmlNodePtr) + + d xmlShellDir pr extproc('xmlShellDir') + d like(xmlCint) + d ctxt value like(xmlShellCtxtPtr) + d arg * value options(*string) char * + d node value like(xmlNodePtr) + d node2 value like(xmlNodePtr) + + d xmlShellLoad pr extproc('xmlShellLoad') + d like(xmlCint) + d ctxt value like(xmlShellCtxtPtr) + d filename * value options(*string) char * + d node value like(xmlNodePtr) + d node2 value like(xmlNodePtr) + + /if defined(LIBXML_OUTPUT_ENABLED) + d xmlShellPrintNode... + d pr extproc('xmlShellPrintNode') + d node value like(xmlNodePtr) + + d xmlShellCat pr extproc('xmlShellCat') + d like(xmlCint) + d ctxt value like(xmlShellCtxtPtr) + d arg * value options(*string) char * + d node value like(xmlNodePtr) + d node2 value like(xmlNodePtr) + + d xmlShellWrite pr extproc('xmlShellWrite') + d like(xmlCint) + d ctxt value like(xmlShellCtxtPtr) + d filename * value options(*string) char * + d node value like(xmlNodePtr) + d node2 value like(xmlNodePtr) + + d xmlShellSave pr extproc('xmlShellSave') + d like(xmlCint) + d ctxt value like(xmlShellCtxtPtr) + d filename * value options(*string) char * + d node value like(xmlNodePtr) + d node2 value like(xmlNodePtr) + /endif LIBXML_OUTPUT_ENABLD + + /if defined(LIBXML_VALID_ENABLED) + d xmlShellValidate... + d pr extproc('xmlShellValidate') + d like(xmlCint) + d ctxt value like(xmlShellCtxtPtr) + d dtd * value options(*string) char * + d node value like(xmlNodePtr) + d node2 value like(xmlNodePtr) + /endif LIBXML_VALID_ENABLED + + d xmlShellDu pr extproc('xmlShellDu') + d like(xmlCint) + d ctxt value like(xmlShellCtxtPtr) + d arg * value options(*string) char * + d tree value like(xmlNodePtr) + d node2 value like(xmlNodePtr) + + d xmlShellPwd pr extproc('xmlShellPwd') + d like(xmlCint) + d ctxt value like(xmlShellCtxtPtr) + d buffer * value options(*string) char * + d node value like(xmlNodePtr) + d node2 value like(xmlNodePtr) + + * The Shell interface. + + d xmlShell pr extproc('xmlShell') + d doc value like(xmlDocPtr) + d filename * value options(*string) char * + d input value like(xmlShellReadlineFunc) + d output * value FILE * + + /endif LIBXML_XPATH_ENABLED + /endif LIBXML_DEBUG_ENABLED + /endif DEBUG_XML__ diff --git a/os400/libxmlrpg/dict.rpgle b/os400/libxmlrpg/dict.rpgle new file mode 100644 index 0000000..c061e4c --- /dev/null +++ b/os400/libxmlrpg/dict.rpgle @@ -0,0 +1,85 @@ + * Summary: string dictionary + * Description: dictionary of reusable strings, just used to avoid + * allocation and freeing operations. + * + * Copy: See Copyright for the status of this software. + * + * Author: Patrick Monnerat , DATASPHERE S.A. + + /if not defined(XML_DICT_H__) + /define XML_DICT_H__ + + * The dictionary. + + d xmlDictPtr s * based(######typedef######) + + /include "libxmlrpg/xmlversion" + /include "libxmlrpg/xmlTypesC" + /include "libxmlrpg/tree" + + * Initializer + + d xmlInitializeDict... + d pr extproc('xmlInitializeDict') + d like(xmlCint) + + * Constructor and destructor. + + d xmlDictCreate pr extproc('xmlDictCreate') + d like(xmlDictPtr) + + d xmlDictSetLimit... + d pr extproc('xmlDictSetLimit') + d like(xmlCsize_t) + d dict value like(xmlDictPtr) + d limit value like(xmlCsize_t) + + d xmlDictGetUsage... + d pr extproc('xmlDictGetUsage') + d like(xmlCsize_t) + d dict value like(xmlDictPtr) + + d xmlDictCreateSub... + d pr extproc('xmlDictCreateSub') + d like(xmlDictPtr) + d sub value like(xmlDictPtr) + + d xmlDictReference... + d pr extproc('xmlDictGetReference') + d like(xmlCint) + d dict value like(xmlDictPtr) + + d xmlDictFree pr extproc('xmlDictFree') + d dict value like(xmlDictPtr) + + * Lookup of entry in the dictionary. + + d xmlDictLookup pr * extproc('xmlDictLookup') const xmlChar * + d dict value like(xmlDictPtr) + d name * value options(*string) const xmlChar * + d len value like(xmlCint) + + d xmlDictExists pr * extproc('xmlDictExists') const xmlChar * + d dict value like(xmlDictPtr) + d name * value options(*string) const xmlChar * + d len value like(xmlCint) + + d xmlDictQLookup pr * extproc('xmlDictQLookup') const xmlChar * + d dict value like(xmlDictPtr) + d name * value options(*string) const xmlChar * + d name * value options(*string) const xmlChar * + + d xmlDictOwns pr extproc('xmlDictOwns') + d like(xmlCint) + d dict value like(xmlDictPtr) + d str * value options(*string) const xmlChar * + + d xmlDictSize pr extproc('xmlDictSize') + d like(xmlCint) + d dict value like(xmlDictPtr) + + * Cleanup function + + d xmlDictCleanup pr extproc('xmlDictCleanup') + + /endif ! XML_DICT_H__ diff --git a/os400/libxmlrpg/encoding.rpgle b/os400/libxmlrpg/encoding.rpgle new file mode 100644 index 0000000..8153f3c --- /dev/null +++ b/os400/libxmlrpg/encoding.rpgle @@ -0,0 +1,284 @@ + * Summary: interface for the encoding conversion functions + * Description: interface for the encoding conversion functions needed for + * XML basic encoding and iconv() support. + * + * Related specs are + * rfc2044 (UTF-8 and UTF-16) F. Yergeau Alis Technologies + * [ISO-10646] UTF-8 and UTF-16 in Annexes + * [ISO-8859-1] ISO Latin-1 characters codes. + * [UNICODE] The Unicode Consortium, "The Unicode Standard -- + * Worldwide Character Encoding -- Version 1.0", Addison- + * Wesley, Volume 1, 1991, Volume 2, 1992. UTF-8 is + * described in Unicode Technical Report #4. + * [US-ASCII] Coded Character Set--7-bit American Standard Code for + * Information Interchange, ANSI X3.4-1986. + * + * Copy: See Copyright for the status of this software. + * + * Author: Patrick Monnerat , DATASPHERE S.A. + + /if not defined(XML_CHAR_ENCODING_H__) + /define XML_CHAR_ENCODING_H__ + + /include "libxmlrpg/xmlversion" + /include "libxmlrpg/xmlTypesC" + + * xmlCharEncoding: + * + * Predefined values for some standard encodings. + * Libxml does not do beforehand translation on UTF8 and ISOLatinX. + * It also supports ASCII, ISO-8859-1, and UTF16 (LE and BE) by default. + * + * Anything else would have to be translated to UTF8 before being + * given to the parser itself. The BOM for UTF16 and the encoding + * declaration are looked at and a converter is looked for at that + * point. If not found the parser stops here as asked by the XML REC. A + * converter can be registered by the user + * xmlRegisterCharEncodingHandler but the current form doesn't allow + * stateful transcoding (a serious problem agreed !). If iconv has been + * found it will be used automatically and allow stateful transcoding, + * the simplest is then to be sure to enable iconv and to provide iconv + * libs for the encoding support needed. + * + * Note that the generic "UTF-16" is not a predefined value. Instead, only + * the specific UTF-16LE and UTF-16BE are present. + + d xmlCharEncoding... + d s based(######typedef######) + d like(xmlCenum) + d XML_CHAR_ENCODING_ERROR... No encoding detected + d c -1 + d XML_CHAR_ENCODING_NONE... No encoding detected + d c 0 + d XML_CHAR_ENCODING_UTF8... UTF-8 + d c 1 + d XML_CHAR_ENCODING_UTF16LE... UTF-16 little endian + d c 2 + d XML_CHAR_ENCODING_UTF16BE... UTF-16 big endian + d c 3 + d XML_CHAR_ENCODING_UCS4LE... UCS-4 little endian + d c 4 + d XML_CHAR_ENCODING_UCS4BE... UCS-4 big endian + d c 5 + d XML_CHAR_ENCODING_EBCDIC... EBCDIC uh! + d c 6 + d XML_CHAR_ENCODING_UCS4_2143... UCS-4 unusual order + d c 7 + d XML_CHAR_ENCODING_UCS4_3412... UCS-4 unusual order + d c 8 + d XML_CHAR_ENCODING_UCS2... UCS-2 + d c 9 + d XML_CHAR_ENCODING_8859_1... ISO-8859-1 ISOLatin1 + d c 10 + d XML_CHAR_ENCODING_8859_2... ISO-8859-2 ISOLatin2 + d c 11 + d XML_CHAR_ENCODING_8859_3... ISO-8859-3 + d c 12 + d XML_CHAR_ENCODING_8859_4... ISO-8859-4 + d c 13 + d XML_CHAR_ENCODING_8859_5... ISO-8859-5 + d c 14 + d XML_CHAR_ENCODING_8859_6... ISO-8859-6 + d c 15 + d XML_CHAR_ENCODING_8859_7... ISO-8859-7 + d c 16 + d XML_CHAR_ENCODING_8859_8... ISO-8859-8 + d c 17 + d XML_CHAR_ENCODING_8859_9... ISO-8859-9 + d c 18 + d XML_CHAR_ENCODING_2022_JP... ISO-2022-JP + d c 19 + d XML_CHAR_ENCODING_SHIFT_JIS... Shift_JIS + d c 20 + d XML_CHAR_ENCODING_EUC_JP... EUC-JP + d c 21 + d XML_CHAR_ENCODING_ASCII... Pure ASCII + d c 22 + + * xmlCharEncodingInputFunc: + * @out: a pointer to an array of bytes to store the UTF-8 result + * @outlen: the length of @out + * @in: a pointer to an array of chars in the original encoding + * @inlen: the length of @in + * + * Take a block of chars in the original encoding and try to convert + * it to an UTF-8 block of chars out. + * + * Returns the number of bytes written, -1 if lack of space, or -2 + * if the transcoding failed. + * The value of @inlen after return is the number of octets consumed + * if the return value is positive, else unpredictiable. + * The value of @outlen after return is the number of octets consumed. + + d xmlCharEncodingInputFunc... + d s * based(######typedef######) + d procptr + + * xmlCharEncodingOutputFunc: + * @out: a pointer to an array of bytes to store the result + * @outlen: the length of @out + * @in: a pointer to an array of UTF-8 chars + * @inlen: the length of @in + * + * Take a block of UTF-8 chars in and try to convert it to another + * encoding. + * Note: a first call designed to produce heading info is called with + * in = NULL. If stateful this should also initialize the encoder state. + * + * Returns the number of bytes written, -1 if lack of space, or -2 + * if the transcoding failed. + * The value of @inlen after return is the number of octets consumed + * if the return value is positive, else unpredictiable. + * The value of @outlen after return is the number of octets produced. + + d xmlCharEncodingOutputFunc... + d s * based(######typedef######) + d procptr + + * Block defining the handlers for non UTF-8 encodings. + * If iconv is supported, there are two extra fields. + + /if defined(LIBXML_ICU_ENABLED) + d uconv_t ds based(######typedef######) + d align qualified + d uconv * UConverter * + d utf8 * UConverter * + /endif + + d xmlCharEncodingHandlerPtr... + d s * based(######typedef######) + + d xmlCharEncodingHandler... + d ds based(xmlCharEncodingHandlerPtr) + d align qualified + d name * char * + d input like(xmlCharEncodingInputFunc) + d output like(xmlCharEncodingOutputFunc) + * + /if defined(LIBXML_ICONV_ENABLED) + d iconv_in * iconv_t + d iconv_out * iconv_t + /endif LIBXML_ICONV_ENABLED + * + /if defined(LIBXML_ICU_ENABLED) + d uconv_in * uconv_t * + d uconv_out * uconv_t * + /endif LIBXML_ICU_ENABLED + + /include "libxmlrpg/tree" + + * Interfaces for encoding handlers. + + d xmlInitCharEncodingHandlers... + d pr extproc( + d 'xmlInitCharEncodingHandlers') + + d xmlCleanupCharEncodingHandlers... + d pr extproc( + d 'xmlCleanupCharEncodingHandlers') + + d xmlRegisterCharEncodingHandler... + d pr extproc( + d 'xmlRegisterCharEncodingHandler') + d handler value like(xmlCharEncodingHandlerPtr) + + d xmlGetCharEncodingHandler... + d pr extproc('xmlGetCharEncodingHandler') + d like(xmlCharEncodingHandlerPtr) + d enc value like(xmlCharEncoding) + + d xmlFindCharEncodingHandler... + d pr extproc('xmlFindCharEncodingHandler') + d like(xmlCharEncodingHandlerPtr) + d name * value options(*string) const char * + + d xmlNewCharEncodingHandler... + d pr extproc('xmlNewCharEncodingHandler') + d like(xmlCharEncodingHandlerPtr) + d name * value options(*string) const char * + d input value like(xmlCharEncodingInputFunc) + d output value like(xmlCharEncodingOutputFunc) + + * Interfaces for encoding names and aliases. + + d xmlAddEncodingAlias... + d pr extproc('xmlAddEncodingAlias') + d like(xmlCint) + d name * value options(*string) const char * + d alias * value options(*string) const char * + + d xmlDelEncodingAlias... + d pr extproc('xmlDelEncodingAlias') + d like(xmlCint) + d alias * value options(*string) const char * + + d xmlGetEncodingAlias... + d pr * extproc('xmlGetEncodingAlias') const char * + d alias * value options(*string) const char * + + d xmlCleanupEncodingAliases... + d pr extproc('xmlCleanupEncodingAliases') + + d xmlParseCharEncoding... + d pr extproc('xmlParseCharEncoding') + d like(xmlCharEncoding) + d name * value options(*string) const char * + + d xmlGetCharEncodingName... + d pr * extproc('xmlGetCharEncodingName') const char * + d enc value like(xmlCharEncoding) + + * Interfaces directly used by the parsers. + + d xmlDetectCharEncoding... + d pr extproc('xmlDetectCharEncoding') + d like(xmlCharEncoding) + d in * value options(*string) const unsigned char* + d len value like(xmlCint) + + d xmlCharEncOutFunc... + d pr extproc('xmlCharEncOutFunc') + d like(xmlCint) + d handler likeds(xmlCharEncodingHandler) + d out value like(xmlBufferPtr) + d in value like(xmlBufferPtr) + + d xmlCharEncInFunc... + d pr extproc('xmlCharEncInFunc') + d like(xmlCint) + d handler likeds(xmlCharEncodingHandler) + d out value like(xmlBufferPtr) + d in value like(xmlBufferPtr) + + d xmlCharEncFirstLine... + d pr extproc('xmlCharEncFirstLine') + d like(xmlCint) + d handler likeds(xmlCharEncodingHandler) + d out value like(xmlBufferPtr) + d in value like(xmlBufferPtr) + + d xmlCharEncCloseFunc... + d pr extproc('xmlCharEncCloseFunc') + d like(xmlCint) + d handler likeds(xmlCharEncodingHandler) + + * Export a few useful functions + + /if defined(LIBXML_OUTPUT_ENABLED) + d UTF8Toisolat1 pr extproc('UTF8Toisolat1') + d like(xmlCint) + d out 65535 options(*varsize) unsigned char (*) + d outlen like(xmlCint) + d in * value options(*string) const unsigned char* + d inlen like(xmlCint) + + /endif LIBXML_OUTPUT_ENABLD + + d isolat1ToUTF8 pr extproc('isolat1ToUTF8') + d like(xmlCint) + d out 65535 options(*varsize) unsigned char (*) + d outlen like(xmlCint) + d in * value options(*string) const unsigned char* + d inlen like(xmlCint) + + /endif XML_CHAR_ENCODING_H diff --git a/os400/libxmlrpg/entities.rpgle b/os400/libxmlrpg/entities.rpgle new file mode 100644 index 0000000..eeec1b6 --- /dev/null +++ b/os400/libxmlrpg/entities.rpgle @@ -0,0 +1,176 @@ + * Summary: interface for the XML entities handling + * Description: this module provides some of the entity API needed + * for the parser and applications. + * + * Copy: See Copyright for the status of this software. + * + * Author: Patrick Monnerat , DATASPHERE S.A. + + /if not defined(XML_ENTITIES_H__) + /define XML_ENTITIES_H__ + + /include "libxmlrpg/xmlversion" + /include "libxmlrpg/xmlTypesC" + /include "libxmlrpg/tree" + + * The different valid entity types. + + d xmlEntityType s based(######typedef######) + d like(xmlCenum) + d XML_INTERNAL_GENERAL_ENTITY... + d c 1 + d XML_EXTERNAL_GENERAL_PARSED_ENTITY... + d c 2 + d XML_EXTERNAL_GENERAL_UNPARSED_ENTITY... + d c 3 + d XML_INTERNAL_PARAMETER_ENTITY... + d c 4 + d XML_EXTERNAL_PARAMETER_ENTITY... + d c 5 + d XML_INTERNAL_PREDEFINED_ENTITY... + d c 6 + + * An unit of storage for an entity, contains the string, the value + * and the linkind data needed for the linking in the hash table. + + d xmlEntity ds based(xmlEntityPtr) + d align qualified + d #private * void * + d type like(xmlElementType) XML_ENTITY_DECL + d name * const xmlChar * + d children like(xmlNodePtr) First child link + d last like(xmlNodePtr) Last child link + d parent like(xmlDtdPtr) -> DTD + d next like(xmlNodePtr) next sibling link + d prev like(xmlNodePtr) prev sibling link + d doc like(xmlDocPtr) containing document + d orig * xmlChar * + d content * xmlChar * + d length like(xmlCint) content length + d etype like(xmlEntityType) The entity type + d ExternalID * const xmlChar * + d SystemlID * const xmlChar * + d nexte like(xmlEntityPtr) unused + d URI * const xmlChar * + d owner like(xmlCint) Owns children ? + d checked like(xmlCint) Content checked ? + + * All entities are stored in an hash table. + * There is 2 separate hash tables for global and parameter entities. + + d xmlEntitiesTablePtr... + d s * based(######typedef######) + + * External functions: + + /if defined(LIBXML_LEGACY_ENABLED) + d xmlInitializePredefinedEntities... + d pr extproc( + d 'xmlInitializePredefinedEntities') + /endif LIBXML_LEGACY_ENABLD + + d xmlNewEntity pr extproc('xmlNewEntity') + d like(xmlEntityPtr) + d doc value like(xmlDocPtr) + d name * value options(*string) const xmlChar * + d type value like(xmlCint) + d ExternalID * value options(*string) const xmlChar * + d SystemID * value options(*string) const xmlChar * + d content * value options(*string) const xmlChar * + + d xmlAddDocEntity... + d pr extproc('xmlAddDocEntity') + d like(xmlEntityPtr) + d doc value like(xmlDocPtr) + d name * value options(*string) const xmlChar * + d type value like(xmlCint) + d ExternalID * value options(*string) const xmlChar * + d SystemID * value options(*string) const xmlChar * + d content * value options(*string) const xmlChar * + + d xmlAddDtdEntity... + d pr extproc('xmlAddDtdEntity') + d like(xmlEntityPtr) + d doc value like(xmlDocPtr) + d name * value options(*string) const xmlChar * + d type value like(xmlCint) + d ExternalID * value options(*string) const xmlChar * + d SystemID * value options(*string) const xmlChar * + d content * value options(*string) const xmlChar * + + d xmlGetPredefinedEntity... + d pr extproc('xmlGetPredefinedEntity') + d like(xmlEntityPtr) + d name * value options(*string) const xmlChar * + + d xmlGetDocEntity... + d pr extproc('xmlGetDocEntity') + d like(xmlEntityPtr) + d doc value like(xmlDocPtr) + d name * value options(*string) const xmlChar * + + d xmlGetDtdEntity... + d pr extproc('xmlGetDtdEntity') + d like(xmlEntityPtr) + d doc value like(xmlDocPtr) + d name * value options(*string) const xmlChar * + + d xmlGetParameterEntity... + d pr extproc('xmlGetParameterEntity') + d like(xmlEntityPtr) + d doc value like(xmlDocPtr) + d name * value options(*string) const xmlChar * + + + /if defined(LIBXML_LEGACY_ENABLED) + d xmlEncodeEntities... + d pr * extproc('xmlEncodeEntities') xmlChar * + d doc value like(xmlDocPtr) + d input * value options(*string) const xmlChar * + /endif LIBXML_LEGACY_ENABLD + + d xmlEncodeEntitiesReentrant... + d pr * extproc( xmlChar * + d 'xmlEncodeEntitiesReentrant') + d doc value like(xmlDocPtr) + d input * value options(*string) const xmlChar * +XMLPU + d xmlEncodeSpecialChars... + d pr * extproc('xmlSpecialChars') xmlChar * + d doc value like(xmlDocPtr) + d input * value options(*string) const xmlChar * +XMLPU + d xmlCreateEntitiesTable... + d pr extproc('xmlCreateEntitiesTable') + d like(xmlEntitiesTablePtr) + + /if defined(LIBXML_TREE_ENABLED) + d xmlCopyEntitiesTable... + d pr extproc('xmlCopyEntitiesTable') + d like(xmlEntitiesTablePtr) + d table value like(xmlEntitiesTablePtr) + /endif LIBXML_TREE_ENABLED + + d xmlFreeEntitiesTable... + d pr extproc('xmlFreeEntitiesTable') + d table value like(xmlEntitiesTablePtr) +XMLPU + /if defined(LIBXML_OUTPUT_ENABLED) + d xmlDumpEntitiesTable... + d pr extproc('xmlDumpEntitiesTable') + d buf value like(xmlBufferPtr) + d table value like(xmlEntitiesTablePtr) +XMLPU + d xmlDumpEntityDecl... + d pr extproc('xmlDumpEntityDecl') + d buf value like(xmlBufferPtr) + d ent value like(xmlEntityPtr) + /endif LIBXML_OUTPUT_ENABLD + + /if defined(LIBXML_LEGACY_ENABLED) + d xmlCleanupPredefinedEntities... + d pr extproc( +XMLPUd 'xmlCleanupPredefinedEntities') + /endif LIBXML_LEGACY_ENABLD + + /endif XML_ENTITIES_H__ diff --git a/os400/libxmlrpg/globals.rpgle b/os400/libxmlrpg/globals.rpgle new file mode 100644 index 0000000..3fe3a9b --- /dev/null +++ b/os400/libxmlrpg/globals.rpgle @@ -0,0 +1,581 @@ + * Summary: interface for all global variables of the library + * Description: all the global variables and thread handling for + * those variables is handled by this module. + * + * The bottom of this file is automatically generated by build_glob.py + * based on the description file global.data + * + * Copy: See Copyright for the status of this software. + * + * Author: Patrick Monnerat , DATASPHERE S.A. + + /if not defined(XML_GLOBALS_H) + /define XML_GLOBALS_H + + /include "libxmlrpg/xmlversion" + /include "libxmlrpg/xmlTypesC" + /include "libxmlrpg/parser" + /include "libxmlrpg/xmlerror" + /include "libxmlrpg/SAX" + /include "libxmlrpg/SAX2" + /include "libxmlrpg/xmlmemory" + + d xmlInitGlobals pr extproc('xmlInitGlobals') + + d xmlCleanupGlobals... + d pr extproc('xmlCleanupGlobals') + + * xmlParserInputBufferCreateFilenameFunc: + * @URI: the URI to read from + * @enc: the requested source encoding + * + * Signature for the function doing the lookup for a suitable input method + * corresponding to an URI. + * + * Returns the new xmlParserInputBufferPtr in case of success or NULL if no + * method was found. + + d xmlParserInputBufferCreateFilenameFunc... + d s * based(######typedef######) + d procptr + + * xmlOutputBufferCreateFilenameFunc: + * @URI: the URI to write to + * @enc: the requested target encoding + * + * Signature for the function doing the lookup for a suitable output method + * corresponding to an URI. + * + * Returns the new xmlOutputBufferPtr in case of success or NULL if no + * method was found. + + d xmlOutputBufferCreateFilenameFunc... + d s * based(######typedef######) + d procptr + + d xmlParserInputBufferCreateFilenameDefault... + d pr extproc('xmlParserInputBufferCreate+ + d FilenameDefault') + d like(xmlParserInputBuffer... + d CreateFilenameFunc) + d func value like(xmlParserInputBuffer... + d CreateFilenameFunc) + + d xmlOutputBufferCreateFilenameDefault... + d pr extproc('xmlOutputBufferCreate+ + d FilenameDefault') + d like(xmlOutputBuffer... + d CreateFilenameFunc) + d func value like(xmlOutputBuffer... + d CreateFilenameFunc) + + * xmlRegisterNodeFunc: + * @node: the current node + * + * Signature for the registration callback of a created node + + d xmlRegisterNodeFunc... + d s * based(######typedef######) + d procptr + + * xmlDeregisterNodeFunc: + * @node: the current node + * + * Signature for the deregistration callback of a discarded node + + d xmlDeregisterNodeFunc... + d s * based(######typedef######) + d procptr + + d xmlGlobalStatePtr... + d s * based(######typedef######) + + d xmlGlobalState ds based(xmlGlobalStatePtr) + d align qualified + d xmlParserVersion... + d * const char * + d xmlDefaultSAXLocator... + d likeds(xmlSAXLocator) + d xmlDefaultSAXHandler... + d likeds(xmlSAXHandlerV1) + d docbDefaultSAXHandler... + d likeds(xmlSAXHandlerV1) + d htmlDefaultSAXHandler... + d likeds(xmlSAXHandlerV1) + d xmlFree like(xmlFreeFunc) + d xmlMalloc like(xmlMallocFunc) + d xmlMemStrdup like(xmlStrdupFunc) + d xmlRealloc like(xmlReallocFunc) + d xmlGenericError... + d like(xmlGenericErrorFunc) + d xmlStructuredError... + d like(xmlStructuredErrorFunc) + d xmlGenericErrorContext... + d * void * + d oldXMLWDcompatibility... + d like(xmlCint) + d xmlBufferAllocScheme... + d like(xmlBufferAllocationScheme) + d xmlDefaultBufferSize... + d like(xmlCint) + d xmlSubstituteEntitiesDefaultValue... + d like(xmlCint) + d xmlDoValidityCheckingDefaultValue... + d like(xmlCint) + d xmlGetWarningsDefaultValue... + d like(xmlCint) + d xmlKeepBlanksDefaultValue... + d like(xmlCint) + d xmlLineNumbersDefaultValue... + d like(xmlCint) + d xmlLoadExtDtdDefaultValue... + d like(xmlCint) + d xmlParserDebugEntities... + d like(xmlCint) + d xmlPedanticParserDefaultValue... + d like(xmlCint) + d xmlSaveNoEmptyTags... + d like(xmlCint) + d xmlIndentTreeOutput... + d like(xmlCint) + d xmlTreeIndentString... + d * const char * + d xmlRegisterNodeDefaultValue... + d like(xmlRegisterNodeFunc) + d xmlDeregisterNodeDefaultValue... + d like(xmlDeregisterNodeFunc) + d xmlMallocAtomic... + d like(xmlMallocFunc) + d xmlLastError likeds(xmlError) + d xmlParserInputBufferCreateFilenameValue... + d like(xmlParserInputBuffer... + d CreateFilenameFunc) + d xmlOutputBufferCreateFilenameValue... + d like(xmlOutputBuffer... + d CreateFilenameFunc) + d xmlStructuredErrorContext... + d * void * + + /include "libxmlrpg/threads" + + d xmlInitializeGlobalState... + d pr extproc('xmlInitializeGlobalState') + d qs value like(xmlGlobalStatePtr) + + d xmlThrDefSetGenericErrorFunc... + d pr extproc( + d 'xmlThrDefSetGenericErrorFunc') + d ctx * value void * + d handler value like(xmlGenericErrorFunc) + + d xmlThrDefSetStructuredErrorFunc... + d pr extproc( + d 'xmlThrDefSetStructuredErrorFunc') + d ctx * value void * + d handler value like(xmlStructuredErrorFunc) + + d xmlRegisterNodeDefault... + d pr extproc('xmlRegisterNodeDefault') + d like(xmlRegisterNodeFunc) + d func value like(xmlRegisterNodeFunc) + + d xmlThrDefRegisterNodeDefault... + d pr extproc( + d 'xmlThrDefRegisterNodeDefault') + d like(xmlRegisterNodeFunc) + d func value like(xmlRegisterNodeFunc) + + d xmlDeregisterNodeDefault... + d pr extproc('xmlDeregisterNodeDefault') + d like(xmlDeregisterNodeFunc) + d func value like(xmlDeregisterNodeFunc) + + d xmlThrDefDeregisterNodeDefault... + d pr extproc( + d 'xmlThrDefDeregisterNodeDefault') + d like(xmlDeregisterNodeFunc) + d func value like(xmlDeregisterNodeFunc) + + d xmlThrDefOutputBufferCreateFilenameDefault... + d pr extproc('xmlThrDefOutputBuffer+ + d CreateFilenameDefault') + d like(xmlOutputBuffer... + d CreateFilenameFunc) + d func value like(xmlOutputBuffer... + d CreateFilenameFunc) + + d xmlThrDefParserInputBufferCreateFilenameDefault... + d pr extproc('xmlThrDefParserInputBuffer+ + d CreateFilenameDefault') + d like(xmlParserInputBuffer... + d CreateFilenameFunc) + d func value like(xmlParserInputBuffer... + d CreateFilenameFunc) + + /if defined(LIBXML_DOCB_ENABLED) + d get_docbDefaultSAXHandler... + d pr extproc( + d '__get_docbDefaultSAXHandler') + d likeds(xmlSAXHandlerV1) + + d set_docbDefaultSAXHandler... + d pr extproc( + d '__set_docbDefaultSAXHandler') + d value value likeds(xmlSAXHandlerV1) + /endif + + /if defined(LIBXML_HTML_ENABLED) + d get_htmlDefaultSAXHandler... + d pr extproc( + d '__get_htmlDefaultSAXHandler') + d likeds(xmlSAXHandlerV1) + + d set_htmlDefaultSAXHandler... + d pr extproc( + d '__set_htmlDefaultSAXHandler') + d value value likeds(xmlSAXHandlerV1) + /endif + + d get_xmlLastError... + d pr extproc('__get_xmlLastError') + d likeds(xmlError) + + d set_xmlLastError... + d pr extproc('__set_xmlLastError') + d value value likeds(xmlError) + + d get_oldXMLWDcompatibility... + d pr extproc( + d '__get_oldXMLWDcompatibility') + d like(xmlCint) + + d set_oldXMLWDcompatibility... + d pr extproc( + d '__set_oldXMLWDcompatibility') + d value value like(xmlCint) + + d get_xmlBufferAllocScheme... + d pr extproc('__get_xmlBufferAllocScheme') + d like(xmlBufferAllocationScheme) + + d set_xmlBufferAllocScheme... + d pr extproc('__set_xmlBufferAllocScheme') + d value value like(xmlBufferAllocationScheme) + + d xmlThrDefBufferAllocScheme... + d pr extproc('xmlThrDefBufferAllocScheme') + d like(xmlBufferAllocationScheme) + d v value like(xmlBufferAllocationScheme) + + d get_xmlDefaultBufferSize... + d pr extproc('__get_xmlDefaultBufferSize') + d like(xmlCint) + + d set_xmlDefaultBufferSize... + d pr extproc('__set_xmlDefaultBufferSize') + d value value like(xmlCint) + + d xmlThrDefDefaultBufferSize... + d pr extproc('xmlThrDefDefaultBufferSize') + d like(xmlCint) + d v value like(xmlCint) + + d get_xmlDefaultSAXHandler... + d pr extproc('__get_xmlDefaultSAXHandler') + d likeds(xmlSAXHandlerV1) + + d set_xmlDefaultSAXHandler... + d pr extproc('__set_xmlDefaultSAXHandler') + d value value likeds(xmlSAXHandlerV1) + + d get_xmlDefaultSAXLocator... + d pr extproc('__get_xmlDefaultSAXLocator') + d likeds(xmlSAXLocator) + + d set_xmlDefaultSAXLocator... + d pr extproc('__set_xmlDefaultSAXLocator') + d value value likeds(xmlSAXLocator) + + d get_xmlDoValidityCheckingDefaultValue... + d pr extproc('__get_xmlDoValidity+ + d CheckingDefaultValue') + d like(xmlCint) + + d set_xmlDoValidityCheckingDefaultValue... + d pr extproc('__set_xmlDoValidity+ + d CheckingDefaultValue') + d value value like(xmlCint) + + d xmlThrDefDoValidityCheckingDefaultValue... + d pr extproc('xmlThrDefDoValidity+ + d CheckingDefaultValue') + d like(xmlCint) + d v value like(xmlCint) + + d get_xmlGenericError... + d pr extproc('__get_xmlGenericError') + d like(xmlGenericErrorFunc) + + d set_xmlGenericError... + d pr extproc('__set_xmlGenericError') + d func value like(xmlGenericErrorFunc) + + d get_xmlStructuredError... + d pr extproc('__get_xmlStructuredError') + d like(xmlStructuredErrorFunc) + + d set_xmlStructuredError... + d pr extproc('__set_xmlStructuredError') + d func value like(xmlStructuredErrorFunc) + + d xmlStructuredError... + d pr extproc('__call_xmlStructuredError') + d userData * value options(*string) void * + d error value like(xmlErrorPtr) + + d get_xmlGenericErrorContext... + d pr extproc( + d '__get_xmlGenericErrorContext') + d * void * + + d set_xmlGenericErrorContext... + d pr extproc( + d '__set_xmlGenericErrorContext') + d value * value options(*string) void * + + d get_xmlStructuredErrorContext... + d pr extproc( + d '__get_xmlStructuredErrorContext') + d * void * + + d set_xmlStructuredErrorContext... + d pr extproc( + d '__set_xmlStructuredErrorContext') + d value * value options(*string) void * + + d get_xmlGetWarningsDefaultValue... + d pr extproc( + d '__get_xmlGetWarningsDefaultValue') + d like(xmlCint) + + d set_xmlGetWarningsDefaultValue... + d pr extproc( + d '__set_xmlGetWarningsDefaultValue') + d value value like(xmlCint) + + d xmlThrDefGetWarningsDefaultValue... + d pr extproc( + d 'xmlThrDefGetWarningsDefaultValue') + d like(xmlCint) + d v value like(xmlCint) + + d get_xmlIndentTreeOutput... + d pr extproc('__get_xmlIndentTreeOutput') + d like(xmlCint) + + d set_xmlIndentTreeOutput... + d pr extproc('__set_xmlIndentTreeOutput') + d value value like(xmlCint) + + d xmlThrDefIndentTreeOutput... + d pr extproc('xmlThrDefIndentTreeOutput') + d like(xmlCint) + d v value like(xmlCint) + + d get_xmlTreeIndentString... + d pr * extproc('__get_xmlTreeIndentString') const char * + + d set_xmlTreeIndentString... + d pr extproc('__set_xmlTreeIndentString') + d value * value options(*string) const char * + + d xmlThrDefTreeIndentString... + d pr * extproc('xmlThrDefTreeIndentString') const char * + d v * value options(*string) const char * + + d get_xmlKeepBlanksDefaultValue... + d pr extproc( + d '__get_xmlKeepBlanksDefaultValue') + d like(xmlCint) + + d set_xmlKeepBlanksDefaultValue... + d pr extproc( + d '__set_xmlKeepBlanksDefaultValue') + d value value like(xmlCint) + + d xmlThrDefKeepBlanksDefaultValue... + d pr extproc( + d 'xmlThrDefKeepBlanksDefaultValue') + d like(xmlCint) + d v value like(xmlCint) + + d get_xmlLineNumbersDefaultValue... + d pr extproc( + d '__get_xmlLineNumbersDefaultValue') + d like(xmlCint) + + d set_xmlLineNumbersDefaultValue... + d pr extproc( + d '__set_xmlLineNumbersDefaultValue') + d value value like(xmlCint) + + d xmlThrDefLineNumbersDefaultValue... + d pr extproc( + d 'xmlThrDefLineNumbersDefaultValue') + d like(xmlCint) + d v value like(xmlCint) + + d get_xmlLoadExtDtdDefaultValue... + d pr extproc( + d '__get_xmlLoadExtDtdDefaultValue') + d like(xmlCint) + + d set_xmlLoadExtDtdDefaultValue... + d pr extproc( + d '__set_xmlLoadExtDtdDefaultValue') + d value value like(xmlCint) + + d xmlThrDefLoadExtDtdDefaultValue... + d pr extproc( + d 'xmlThrDefLoadExtDtdDefaultValue') + d like(xmlCint) + d v value like(xmlCint) + + d get_xmlParserDebugEntities... + d pr extproc( + d '__get_xmlParserDebugEntities') + d like(xmlCint) + + d set_xmlParserDebugEntities... + d pr extproc( + d '__set_xmlParserDebugEntities') + d value value like(xmlCint) + + d xmlThrDefParserDebugEntities... + d pr extproc( + d 'xmlThrDefParserDebugEntities') + d like(xmlCint) + d v value like(xmlCint) + + d get_xmlParserVersion... + d pr * extproc('__get_xmlParserVersion') const char * + + d set_xmlParserVersion... + d pr extproc('__set_xmlParserVersion') + d value * value options(*string) const char * + + d get_xmlPedanticParserDefaultValue... + d pr extproc('__get_xmlPedantic+ + d ParserDefaultValue') + d like(xmlCint) + + d set_xmlPedanticParserDefaultValue... + d pr extproc('__set_xmlPedantic+ + d ParserDefaultValue') + d value value like(xmlCint) + + d xmlThrDefPedanticParserDefaultValue... + d pr extproc('xmlThrDefPedantic+ + d ParserDefaultValue') + d like(xmlCint) + d v value like(xmlCint) + + d get_xmlSaveNoEmptyTags... + d pr extproc('__get_xmlSaveNoEmptyTags') + d like(xmlCint) + + d set_xmlSaveNoEmptyTags... + d pr extproc('__set_xmlSaveNoEmptyTags') + d value value like(xmlCint) + + d xmlThrDefSaveNoEmptyTags... + d pr extproc('xmlThrDefSaveNoEmptyTags') + d like(xmlCint) + d v value like(xmlCint) + + d get_xmlSubstituteEntitiesDefaultValue... + d pr extproc('__get_xmlSubstitute+ + d EntitiesDefaultValue') + d like(xmlCint) + + d set_xmlSubstituteEntitiesDefaultValue... + d pr extproc('__set_xmlSubstitute+ + d EntitiesDefaultValue') + d value value like(xmlCint) + + d xmlThrDefSubstituteEntitiesDefaultValue... + d pr extproc('xmlThrDefSubstitute+ + d EntitiesDefaultValue') + d like(xmlCint) + d v value like(xmlCint) + + d get_xmlRegisterNodeDefaultValue... + d pr extproc('__get_xmlRegisterNode+ + d DefaultValue') + d like(xmlRegisterNodeFunc) + + d set_xmlRegisterNodeDefaultValue... + d pr extproc('__set_xmlRegisterNode+ + d DefaultValue') + d value value like(xmlRegisterNodeFunc) + + d xmlRegisterNodeDefaultValue... + d pr extproc('__call_xmlRegisterNode+ + d DefaultValue') + d node value like(xmlNodePtr) + + d get_xmlDeregisterNodeDefaultValue... + d pr extproc('__get_xmlDeregisterNode+ + d DefaultValue') + d like(xmlDeregisterNodeFunc) + + d set_xmlDeregisterNodeDefaultValue... + d pr extproc('__set_xmlDeregisterNode+ + d DefaultValue') + d value value like(xmlDeregisterNodeFunc) + + d xmlDeregisterNodeDefaultValue... + d pr extproc('__call_xmlDeregisterNode+ + d DefaultValue') + d node value like(xmlNodePtr) + + d get_xmlParserInputBufferCreateFilenameValue... + d pr extproc('__get_xmlParserInputBuffer+ + d CreateFilenameValue') + d like(xmlParserInputBuffer... + d CreateFilenameFunc) + + d set_xmlParserInputBufferCreateFilenameValue... + d pr extproc('__set_xmlParserInputBuffer+ + d CreateFilenameValue') + d value value like(xmlParserInputBuffer... + d CreateFilenameFunc) + + d xmlParserInputBufferCreateFilenameValue... + d pr extproc('__call_xmlParserInputBuffer+ + d CreateFilenameValue') + d like(xmlParserInputBufferPtr) + d URI * value options(*string) const char * + d enc value like(xmlCharEncoding) + + d get_xmlOutputBufferCreateFilenameValue... + d pr extproc('__get_xmlOutputBuffer+ + d CreateFilenameValue') + d like( + d xmlOutputBufferCreateFilenameFunc) + + d set_xmlOutputBufferCreateFilenameValue... + d pr extproc('__set_xmlOutputBuffer+ + d CreateFilenameValue') + d value value like( + d xmlOutputBufferCreateFilenameFunc) + + d xmlOutputBufferCreateFilenameValue... + d pr extproc('__call_xmlOutputBuffer+ + d CreateFilenameValue') + d like(xmlOutputBufferPtr) + d URI * value options(*string) const char * + d encoder value like(xmlCharEncodingHandlerPtr) + d compression value like(xmlCint) + + /endif XML_GLOBALS_H diff --git a/os400/libxmlrpg/hash.rpgle b/os400/libxmlrpg/hash.rpgle new file mode 100644 index 0000000..b2169df --- /dev/null +++ b/os400/libxmlrpg/hash.rpgle @@ -0,0 +1,243 @@ + * Summary: Chained hash tables + * Description: This module implements the hash table support used in + * various places in the library. + * + * Copy: See Copyright for the status of this software. + * + * Author: Patrick Monnerat , DATASPHERE S.A. + + /if not defined(XML_HASH_H__) + /define XML_HASH_H__ + + /include "libxmlrpg/xmlTypesC" + + * The hash table. + + d xmlHashTablePtr... + d s * based(######typedef######) + + /include "libxmlrpg/xmlversion" + /include "libxmlrpg/parser" + /include "libxmlrpg/dict" + + * function types: + + * xmlHashDeallocator: + * @payload: the data in the hash + * @name: the name associated + * + * Callback to free data from a hash. + + d xmlHashDeallocator... + d s * based(######typedef######) + d procptr + + * xmlHashCopier: + * @payload: the data in the hash + * @name: the name associated + * + * Callback to copy data from a hash. + * + * Returns a copy of the data or NULL in case of error. + + d xmlHashCopier s * based(######typedef######) + d procptr + + * xmlHashScanner: + * @payload: the data in the hash + * @data: extra scannner data + * @name: the name associated + * + * Callback when scanning data in a hash with the simple scanner. + + d xmlHashScanner s * based(######typedef######) + d procptr + + * xmlHashScannerFull: + * @payload: the data in the hash + * @data: extra scannner data + * @name: the name associated + * @name2: the second name associated + * @name3: the third name associated + * + * Callback when scanning data in a hash with the full scanner. + + d xmlHashScannerFull... + d s * based(######typedef######) + d procptr + + * Constructor and destructor. + + d xmlHashCreate pr extproc('xmlHashCreate') + d like(xmlHashTablePtr) + d size value like(xmlCint) + + d xmlHashCreateDict... + d pr extproc('xmlHashCreateDict') + d like(xmlHashTablePtr) + d size value like(xmlCint) + d dict value like(xmlDictPtr) + + d xmlHashFree pr extproc('xmlHashFree') + d table value like(xmlHashTablePtr) + d f value like(xmlHashDeallocator) + + * Add a new entry to the hash table. + + d xmlHashAddEntry... + d pr extproc('xmlHashAddEntry') + d like(xmlCint) + d table value like(xmlHashTablePtr) + d name * value options(*string) const xmlChar * + d userdata * value options(*string) void * + + d xmlHashUpdateEntry... + d pr extproc('xmlHashUpdateEntry') + d like(xmlCint) + d table value like(xmlHashTablePtr) + d name * value options(*string) const xmlChar * + d userdata * value options(*string) void * + d f value like(xmlHashDeallocator) + + d xmlHashAddEntry2... + d pr extproc('xmlHashAddEntry2') + d like(xmlCint) + d table value like(xmlHashTablePtr) + d name * value options(*string) const xmlChar * + d name2 * value options(*string) const xmlChar * + d userdata * value options(*string) void * + + d xmlHashUpdateEntry2... + d pr extproc('xmlHashUpdateEntry2') + d like(xmlCint) + d table value like(xmlHashTablePtr) + d name * value options(*string) const xmlChar * + d name2 * value options(*string) const xmlChar * + d userdata * value options(*string) void * + d f value like(xmlHashDeallocator) + + d xmlHashAddEntry3... + d pr extproc('xmlHashAddEntry3') + d like(xmlCint) + d table value like(xmlHashTablePtr) + d name * value options(*string) const xmlChar * + d name2 * value options(*string) const xmlChar * + d name3 * value options(*string) const xmlChar * + d userdata * value options(*string) void * + + d xmlHashUpdateEntry3... + d pr extproc('xmlHashUpdateEntry3') + d like(xmlCint) + d table value like(xmlHashTablePtr) + d name * value options(*string) const xmlChar * + d name2 * value options(*string) const xmlChar * + d name3 * value options(*string) const xmlChar * + d userdata * value options(*string) void * + d f value like(xmlHashDeallocator) + + * Remove an entry from the hash table. + + d xmlHashRemoveEntry... + d pr extproc('xmlHashRemoveEntry') + d like(xmlCint) + d table value like(xmlHashTablePtr) + d name * value options(*string) const xmlChar * + d f value like(xmlHashDeallocator) + + d xmlHashRemoveEntry2... + d pr extproc('xmlHashRemoveEntry2') + d like(xmlCint) + d table value like(xmlHashTablePtr) + d name * value options(*string) const xmlChar * + d name2 * value options(*string) const xmlChar * + d f value like(xmlHashDeallocator) + + d xmlHashRemoveEntry3... + d pr extproc('xmlHashRemoveEntry3') + d like(xmlCint) + d table value like(xmlHashTablePtr) + d name * value options(*string) const xmlChar * + d name2 * value options(*string) const xmlChar * + d name3 * value options(*string) const xmlChar * + d f value like(xmlHashDeallocator) + + * Retrieve the userdata. + + d xmlHashLookup pr * extproc('xmlHashLookup') void * + d table value like(xmlHashTablePtr) + d name * value options(*string) const xmlChar * + + d xmlHashLookup2 pr * extproc('xmlHashLookup2') void * + d table value like(xmlHashTablePtr) + d name * value options(*string) const xmlChar * + d name2 * value options(*string) const xmlChar * + + d xmlHashLookup3 pr * extproc('xmlHashLookup3') void * + d table value like(xmlHashTablePtr) + d name * value options(*string) const xmlChar * + d name2 * value options(*string) const xmlChar * + d name3 * value options(*string) const xmlChar * + + d xmlHashQLookup pr * extproc('xmlHashQLookup') void * + d table value like(xmlHashTablePtr) + d name * value options(*string) const xmlChar * + d prefix * value options(*string) const xmlChar * + + d xmlHashQLookup2... + d pr * extproc('xmlHashQLookup2') void * + d table value like(xmlHashTablePtr) + d name * value options(*string) const xmlChar * + d prefix * value options(*string) const xmlChar * + d name2 * value options(*string) const xmlChar * + d prefix2 * value options(*string) const xmlChar * + + d xmlHashQLookup3... + d pr * extproc('xmlHashQLookup3') void * + d table value like(xmlHashTablePtr) + d name * value options(*string) const xmlChar * + d prefix * value options(*string) const xmlChar * + d name2 * value options(*string) const xmlChar * + d prefix2 * value options(*string) const xmlChar * + d name3 * value options(*string) const xmlChar * + d prefix3 * value options(*string) const xmlChar * + + * Helpers. + + d xmlHashCopy pr extproc('xmlHashCopy') + d like(xmlHashTablePtr) + d table value like(xmlHashTablePtr) + d f value like(xmlHashCopier) + + d xmlHashSize pr extproc('xmlHashSize') + d like(xmlCint) + d table value like(xmlHashTablePtr) + + d xmlHashScan pr extproc('xmlHashScan') + d table value like(xmlHashTablePtr) + d f value like(xmlHashScanner) + d data * value options(*string) void * + + d xmlHashScan3 pr extproc('xmlHashScan3') + d table value like(xmlHashTablePtr) + d name * value options(*string) const xmlChar * + d name2 * value options(*string) const xmlChar * + d name3 * value options(*string) const xmlChar * + d f value like(xmlHashScanner) + d data * value options(*string) void * + + d xmlHashScanFull... + d pr extproc('xmlHashScanFull') + d table value like(xmlHashTablePtr) + d f value like(xmlHashScannerFull) + d data * value options(*string) void * + + d xmlHashScanFull3... + d pr extproc('xmlHashScanFull3') + d table value like(xmlHashTablePtr) + d name * value options(*string) const xmlChar * + d name2 * value options(*string) const xmlChar * + d name3 * value options(*string) const xmlChar * + d f value like(xmlHashScannerFull) + d data * value options(*string) void * + + /endif XML_HASH_H__ diff --git a/os400/libxmlrpg/list.rpgle b/os400/libxmlrpg/list.rpgle new file mode 100644 index 0000000..ce2fa1c --- /dev/null +++ b/os400/libxmlrpg/list.rpgle @@ -0,0 +1,179 @@ + * Summary: lists interfaces + * Description: this module implement the list support used in + * various place in the library. + * + * Copy: See Copyright for the status of this software. + * + * Author: Patrick Monnerat , DATASPHERE S.A. + + /if not defined(XML_LINK_INCLUDE__) + /define XML_LINK_INCLUDE__ + + /include "libxmlrpg/xmlversion" + /include "libxmlrpg/xmlTypesC" + + d xmlLinkPtr s * based(######typedef######) + + d xmlListPtr s * based(######typedef######) + + * xmlListDeallocator: + * @lk: the data to deallocate + * + * Callback function used to free data from a list. + + d xmlListDeallocator... + d s * based(######typedef######) + d procptr + + * xmlListDataCompare: + * @data0: the first data + * @data1: the second data + * + * Callback function used to compare 2 data. + * + * Returns 0 is equality, -1 or 1 otherwise depending on the ordering. + + d xmlListDataCompare... + d s * based(######typedef######) + d procptr + + * xmlListWalker: + * @data: the data found in the list + * @user: extra user provided data to the walker + * + * Callback function used when walking a list with xmlListWalk(). + * + * Returns 0 to stop walking the list, 1 otherwise. + + d xmlListWalker s * based(######typedef######) + d procptr + + * Creation/Deletion + + d xmlListCreate pr extproc('xmlListCreate') + d like(xmlListPtr) + d deallocator value like(xmlListDeallocator) + d compare value like(xmlListDataCompare) + + d xmlListDelete pr extproc('xmlListDelete') + d l value like(xmlListPtr) + + * Basic Operators + + d xmlListSearch pr * extproc('xmlListSearch') void * + d l value like(xmlListPtr) + d data * value void * + + d xmlListReverseSearch... + d pr * extproc('xmlListReverseSearch') void * + d l value like(xmlListPtr) + d data * value void * + + d xmlListInsert pr extproc('xmlListInsert') + d like(xmlCint) + d l value like(xmlListPtr) + d data * value void * + + d xmlListAppend pr extproc('xmlListAppend') + d like(xmlCint) + d l value like(xmlListPtr) + d data * value void * + + d xmlListRemoveFirst... + d pr extproc('xmlListRemoveFirst') + d like(xmlCint) + d l value like(xmlListPtr) + d data * value void * + + d xmlListRemoveLast... + d pr extproc('xmlListRemoveLast') + d like(xmlCint) + d l value like(xmlListPtr) + d data * value void * + + d xmlListRemoveAll... + d pr extproc('xmlListRemoveAll') + d like(xmlCint) + d l value like(xmlListPtr) + d data * value void * + + d xmlListClear pr extproc('xmlListClear') + d l value like(xmlListPtr) + + d xmlListEmpty pr extproc('xmlListEmpty') + d like(xmlCint) + d l value like(xmlListPtr) + + d xmlListFront pr extproc('xmlListFront') + d like(xmlLinkPtr) + d l value like(xmlListPtr) + + d xmlListEnd pr extproc('xmlListEnd') + d like(xmlLinkPtr) + d l value like(xmlListPtr) + + d xmlListSize pr extproc('xmlListSize') + d like(xmlCint) + d l value like(xmlListPtr) + + d xmlListPopFront... + d pr extproc('xmlListPopFront') + d l value like(xmlListPtr) + + d xmlListPopBack... + d pr extproc('xmlListPopBack') + d l value like(xmlListPtr) + + d xmlListPushFront... + d pr extproc('xmlListPushFront') + d like(xmlCint) + d l value like(xmlListPtr) + d data * value void * + + d xmlListPushBack... + d pr extproc('xmlListPushBack') + d like(xmlCint) + d l value like(xmlListPtr) + d data * value void * + + * Advanced Operators + + d xmlListReverse pr extproc('xmlListReverse') + d l value like(xmlListPtr) + + d xmlListSort pr extproc('xmlListSort') + d l value like(xmlListPtr) + + d xmlListWalk pr extproc('xmlListWalk') + d l value like(xmlListPtr) + d walker value like(xmlListWalker) + d user * value const void * + + d xmlListReverseWalk... + d pr extproc('xmlListReverseWalk') + d l value like(xmlListPtr) + d walker value like(xmlListWalker) + d user * value const void * + + d xmlListMerge pr extproc('xmlListMerge') + d l1 value like(xmlListPtr) + d l2 value like(xmlListPtr) + + d xmlListDup pr extproc('xmlListDup') + d like(xmlListPtr) + d old value like(xmlListPtr) + + d xmlListCopy pr extproc('xmlListCopy') + d like(xmlCint) + d cur value like(xmlListPtr) + d old value like(xmlListPtr) const + + * Link operators + + d xmlListGetData pr * extproc('xmlListGetData') void * + d lk value like(xmlLinkPtr) + + * xmlListUnique() + * xmlListSwap + + /endif XML_LINK_INCLUDE__ diff --git a/os400/libxmlrpg/nanoftp.rpgle b/os400/libxmlrpg/nanoftp.rpgle new file mode 100644 index 0000000..ac4f2aa --- /dev/null +++ b/os400/libxmlrpg/nanoftp.rpgle @@ -0,0 +1,172 @@ + * Summary: minimal FTP implementation + * Description: minimal FTP implementation allowing to fetch resources + * like external subset. + * + * Copy: See Copyright for the status of this software. + * + * Author: Patrick Monnerat , DATASPHERE S.A. + + /if not defined(NANO_FTP_H__) + /define NANO_FTP_H__ + + /include "libxmlrpg/xmlversion" + + /if defined(LIBXML_FTP_ENABLED) + + /include "libxmlrpg/xmlTypesC" + + d INVALID_SOCKET c -1 + + * ftpListCallback: + * @userData: user provided data for the callback + * @filename: the file name (including "->" when links are shown) + * @attrib: the attribute string + * @owner: the owner string + * @group: the group string + * @size: the file size + * @links: the link count + * @year: the year + * @month: the month + * @day: the day + * @hour: the hour + * @minute: the minute + * + * A callback for the xmlNanoFTPList command. + * Note that only one of year and day:minute are specified. + + d ftpListCallback... + d s * based(######typedef######) + d procptr + + * ftpDataCallback: + * @userData: the user provided context + * @data: the data received + * @len: its size in bytes + * + * A callback for the xmlNanoFTPGet command. + + d ftpDataCallback... + d s * based(######typedef######) + d procptr + + * Init + + d xmlNanoFTPInit pr extproc('xmlNanoFTPInit') + + d xmlNanoFTPCleanup... + d pr extproc('xmlNanoFTPCleanup') + + * Creating/freeing contexts. + + d xmlNanoFTPNewCtxt... + d pr * extproc('xmlNanoFTPNewCtxt') void * + d URL * value options(*string) const char * + + d xmlNanoFTPFreeCtxt... + d pr extproc('xmlNanoFTPFreeCtxt') + d ctx * value void * + + d xmlNanoFTPConnectTo... + d pr * extproc('xmlNanoFTPConnectTo') void * + d server * value options(*string) const char * + d port value like(xmlCint) + + * Opening/closing session connections. + + d xmlNanoFTPOpen pr * extproc('xmlNanoFTPOpen') void * + d URL * value options(*string) const char * + + d xmlNanoFTPConnect... + d pr extproc('xmlNanoFTPConnect') + d like(xmlCint) + d ctx * value void * + + d xmlNanoFTPClose... + d pr extproc('xmlNanoFTPClose') + d like(xmlCint) + d ctx * value void * + + d xmlNanoFTPQuit pr extproc('xmlNanoFTPQuit') + d like(xmlCint) + d ctx * value void * + + d xmlNanoFTPScanProxy... + d pr extproc('xmlNanoFTPScanProxy') + d URL * value options(*string) const char * + + d xmlNanoFTPProxy... + d pr extproc('xmlNanoFTPProxy') + d host * value options(*string) const char * + d port value like(xmlCint) + d user * value options(*string) const char * + d passwd * value options(*string) const char * + d type value like(xmlCint) + + d xmlNanoFTPUpdateURL... + d pr extproc('xmlNanoFTPUpdateURL') + d like(xmlCint) + d ctx * value void * + d URL * value options(*string) const char * + + * Rather internal commands. + + d xmlNanoFTPGetResponse... + d pr extproc('xmlNanoFTPGetResponse') + d like(xmlCint) + d ctx * value void * + + d xmlNanoFTPCheckResponse... + d pr extproc('xmlNanoFTPCheckResponse') + d like(xmlCint) + d ctx * value void * + + * CD/DIR/GET handlers. + + d xmlNanoFTPCwd pr extproc('xmlNanoFTPCwd') + d like(xmlCint) + d ctx * value void * + d directory * value options(*string) const char * + + d xmlNanoFTPDele pr extproc('xmlNanoFTPDele') + d like(xmlCint) + d ctx * value void * + d file * value options(*string) const char * + + d xmlNanoFTPGetConnection... + d pr extproc('xmlNanoFTPGetConnection') Socket descriptor + d like(xmlCint) + d ctx * value void * + + d xmlNanoFTPCloseConnection... + d pr extproc('xmlNanoFTPCloseConnection') + d like(xmlCint) + d ctx * value void * + + d xmlNanoFTPList pr extproc('xmlNanoFTPList') + d like(xmlCint) + d ctx * value void * + d callback value like(ftpListCallback) + d userData * value void * + d filename * value options(*string) const char * + + d xmlNanoFTPGetSocket... + d pr extproc('xmlNanoFTPGetSocket') Socket descriptor + d like(xmlCint) + d ctx * value void * + d filename * value options(*string) const char * + + d xmlNanoFTPGet pr extproc('xmlNanoFTPGet') + d like(xmlCint) + d ctx * value void * + d callback value like(ftpDataCallback) + d userData * value void * + d filename * value options(*string) const char * + + d xmlNanoFTPRead pr extproc('xmlNanoFTPRead') + d like(xmlCint) + d ctx * value void * + d dest * value void * + d len value like(xmlCint) + + /endif LIBXML_FTP_ENABLED + /endif NANO_FTP_H__ diff --git a/os400/libxmlrpg/nanohttp.rpgle b/os400/libxmlrpg/nanohttp.rpgle new file mode 100644 index 0000000..d4e6008 --- /dev/null +++ b/os400/libxmlrpg/nanohttp.rpgle @@ -0,0 +1,110 @@ + * Summary: minimal HTTP implementation + * Description: minimal HTTP implementation allowing to fetch resources + * like external subset. + * + * Copy: See Copyright for the status of this software. + * + * Author: Patrick Monnerat , DATASPHERE S.A. + + /if not defined(NANO_HTTP_H__) + /define NANO_HTTP_H__ + + /include "libxmlrpg/xmlversion" + + /if defined(LIBXML_HTTP_ENABLED) + + /include "libxmlrpg/xmlTypesC" + + d xmlNanoHTTPInit... + d pr extproc('xmlNanoHTTPInit') + + d xmlNanoHTTPCleanup... + d pr extproc('xmlNanoHTTPCleanup') + + d xmlNanoHTTPScanProxy... + d pr extproc('xmlNanoHTTPScanProxy') + d URL * value options(*string) const char * + + d xmlNanoHTTPFetch... + d pr extproc('xmlNanoHTTPFetch') + d like(xmlCint) + d URL * value options(*string) const char * + d filename * value options(*string) const char * + + d xmlNanoHTTPMethod... + d pr * extproc('xmlNanoHTTPMethod') void * + d URL * value options(*string) const char * + d method * value options(*string) const char * + d input * value options(*string) const char * + d contentType * value char * * + d headers * value options(*string) const char * + d ilen value like(xmlCint) + + d xmlNanoHTTPMethodRedir... + d pr * extproc('xmlNanoHTTPMethodRedir') void * + d URL * value options(*string) const char * + d method * value options(*string) const char * + d input * value options(*string) const char * + d contentType * value char * * + d redir * value char * * + d headers * value options(*string) const char * + d ilen value like(xmlCint) + + d xmlNanoHTTPOpen... + d pr * extproc('xmlNanoHTTPOpen') void * + d URL * value options(*string) const char * + d contentType * char *(*) + + d xmlNanoHTTPOpenRedir... + d pr * extproc('xmlNanoHTTPOpenRedir') void * + d URL * value options(*string) const char * + d contentType * value char * * + d redir * value char * * + + d xmlNanoHTTPReturnCode... + d pr extproc('xmlNanoHTTPReturnCode') + d like(xmlCint) + d ctx * value void * + + d xmlNanoHTTPAuthHeader... + d pr * extproc('xmlNanoHTTPAuthHeader') const char * + d ctx * value void * + + d xmlNanoHTTPRedir... + d pr * extproc('xmlNanoHTTPRedir') const char * + d ctx * value void * + + d xmlNanoHTTPContentLength... + d pr extproc('xmlNanoHTTPContentLength') + d like(xmlCint) + d ctx * value void * + + d xmlNanoHTTPEncoding... + d pr * extproc('xmlNanoHTTPEncoding') const char * + d ctx * value void * + + d xmlNanoHTTPMimeType... + d pr * extproc('xmlNanoHTTPMimeType') const char * + d ctx * value void * + + d xmlNanoHTTPRead... + d pr extproc('xmlNanoHTTPRead') + d like(xmlCint) + d ctx * value void * + d dest * value void * + d len value like(xmlCint) + + /if defined(LIBXML_OUTPUT_ENABLED) + d xmlNanoHTTPSave... + d pr extproc('xmlNanoHTTPSave') + d like(xmlCint) + d ctxt * value void * + d filename * value options(*string) const char * + /endif LIBXML_OUTPUT_ENABLD + + d xmlNanoHTTPClose... + d pr extproc('xmlNanoHTTPClose') + d ctx * value void * + + /endif LIBXML_HTTP_ENABLED + /endif NANO_HTTP_H__ diff --git a/os400/libxmlrpg/parser.rpgle b/os400/libxmlrpg/parser.rpgle new file mode 100644 index 0000000..fa48d4f --- /dev/null +++ b/os400/libxmlrpg/parser.rpgle @@ -0,0 +1,1436 @@ + * Summary: the core parser module + * Description: Interfaces, constants and types related to the XML parser + * + * Copy: See Copyright for the status of this software. + * + * Author: Patrick Monnerat , DATASPHERE S.A. + + /if not defined(XML_PARSER_H__) + /define XML_PARSER_H__ + + /include "libxmlrpg/xmlversion" + /include "libxmlrpg/xmlTypesC" + /include "libxmlrpg/tree" + /include "libxmlrpg/dict" + /include "libxmlrpg/hash" + /include "libxmlrpg/valid" + /include "libxmlrpg/entities" + /include "libxmlrpg/xmlerror" + /include "libxmlrpg/xmlstring" + + * XML_DEFAULT_VERSION: + * + * The default version of XML used: 1.0 + + d XML_DEFAULT_VERSION... + d c '1.0' + + * xmlParserInput: + * + * An xmlParserInput is an input flow for the XML processor. + * Each entity parsed is associated an xmlParserInput (except the + * few predefined ones). This is the case both for internal entities + * - in which case the flow is already completely in memory - or + * external entities - in which case we use the buf structure for + * progressive reading and I18N conversions to the internal UTF-8 format. + + * xmlParserInputDeallocate: + * @str: the string to deallocate + * + * Callback for freeing some parser input allocations. + + d xmlParserInputDeallocate... + d s * based(######typedef######) + d procptr + + * Input buffer + + d xmlParserInput ds based(xmlParserInputPtr) + d align qualified + d buf like(xmlParserInputBufferPtr) UTF-8 encoded buffer + d filename * const char * + d directory * const char * + d base * const char * + d cur * const char * + d end * const char * + d length like(xmlCint) Length if known + d line like(xmlCint) Current line + d col like(xmlCint) Current column + * + * NOTE: consumed is only tested for equality in the parser code, + * so even if there is an overflow this should not give troubles + * for parsing very large instances. + * + d consumed like(xmlCulong) # consumed xmlChars + d free like(xmlParserInputDeallocate) base deallocator + d encoding * const xmlChar * + d version * const xmlChar * + d standalone like(xmlCint) Standalone entity ? + d id like(xmlCint) Entity unique ID + + * xmlParserNodeInfo: + * + * The parser can be asked to collect Node informations, i.e. at what + * place in the file they were detected. + * NOTE: This is off by default and not very well tested. + + d xmlParserNodeInfoPtr... + d s * based(######typedef######) + + d xmlParserNodeInfo... + d ds based(xmlParserNodeInfoPtr) + d align qualified + d node like(xmlNodePtr) const + * Position & line # that text that created the node begins & ends on + d begin_pos like(xmlCulong) + d begin_line like(xmlCulong) + d end_pos like(xmlCulong) + d end_line like(xmlCulong) + + d xmlParserNodeInfoSeqPtr... + d s * based(######typedef######) + + d xmlParserNodeInfoSeq... + d ds based(xmlParserNodeInfoSeqPtr) + d align qualified + d maximum like(xmlCulong) + d length like(xmlCulong) + d buffer like(xmlParserNodeInfoPtr) + + * xmlParserInputState: + * + * The parser is now working also as a state based parser. + * The recursive one use the state info for entities processing. + + d xmlParserInputState... + d s based(######typedef######) + d like(xmlCenum) + d XML_PARSER_EOF... Nothing to parse + d c -1 + d XML_PARSER_START... Nothing parsed + d c 0 + d XML_PARSER_MISC... Misc* b4 int subset + d c 1 + d XML_PARSER_PI c 2 In proc instr + d XML_PARSER_DTD... In some DTD content + d c 3 + d XML_PARSER_PROLOG... Misc* after int sbst + d c 4 + d XML_PARSER_COMMENT... Within a comment + d c 5 + d XML_PARSER_START_TAG... Within a start tag + d c 6 + d XML_PARSER_CONTENT... Within the content + d c 7 + d XML_PARSER_CDATA_SECTION... Within a CDATA + d c 8 + d XML_PARSER_END_TAG... Within a closing tag + d c 9 + d XML_PARSER_ENTITY_DECL... In an entity decl + d c 10 + d XML_PARSER_ENTITY_VALUE... In entity decl value + d c 11 + d XML_PARSER_ATTRIBUTE_VALUE... In attribute value + d c 12 + d XML_PARSER_SYSTEM_LITERAL... In a SYSTEM value + d c 13 + d XML_PARSER_EPILOG... Last end tag Misc* + d c 14 + d XML_PARSER_IGNORE... In IGNORED section + d c 15 + d XML_PARSER_PUBLIC_LITERAL... In a PUBLIC value + d c 16 + + * XML_DETECT_IDS: + * + * Bit in the loadsubset context field to tell to do ID/REFs lookups. + * Use it to initialize xmlLoadExtDtdDefaultValue. + + d XML_DETECT_IDS c 2 + + * XML_COMPLETE_ATTRS: + * + * Bit in the loadsubset context field to tell to do complete the + * elements attributes lists with the ones defaulted from the DTDs. + * Use it to initialize xmlLoadExtDtdDefaultValue. + + d XML_COMPLETE_ATTRS... + d c 4 + + * XML_SKIP_IDS: + * + * Bit in the loadsubset context field to tell to not do ID/REFs + * registration. + * Used to initialize xmlLoadExtDtdDefaultValue in some special cases. + + d XML_SKIP_IDS c 8 + + * xmlParserMode: + * + * A parser can operate in various modes + + d xmlParserMode s based(######typedef######) + d like(xmlCenum) + d XML_PARSE_UNKNOWN... + d c 0 + d XML_PARSE_DOM... + d c 1 + d XML_PARSE_SAX... + d c 2 + d XML_PARSE_PUSH_DOM... + d c 3 + d XML_PARSE_PUSH_SAX... + d c 4 + d XML_PARSE_READER... + d c 5 + + * xmlParserCtxt: + * + * The parser context. + * NOTE This doesn't completely define the parser state, the (current ?) + * design of the parser uses recursive function calls since this allow + * and easy mapping from the production rules of the specification + * to the actual code. The drawback is that the actual function call + * also reflect the parser state. However most of the parsing routines + * takes as the only argument the parser context pointer, so migrating + * to a state based parser for progressive parsing shouldn't be too + * hard. + + d xmlParserCtxt ds based(xmlParserCtxtPtr) + d align qualified + d sax like(xmlSAXHandlerPtr) The SAX handler + d userData * SAX only-4 DOM build + d myDoc like(xmlDocPtr) Document being built + d wellFormed like(xmlCint) Well formed doc ? + d replaceEntities... Replace entities ? + d like(xmlCint) + d version * const xmlChar * + d encoding * const xmlChar * + d standalone like(xmlCint) Standalone document + d html like(xmlCint) HTML state/type + * + * Input stream stack + * + d input like(xmlParserInputPtr) Current input stream + d inputNr like(xmlCint) # current in streams + d inputMax like(xmlCint) Max # of in streams + d inputTab * xmlParserInputPtr * + * + * Node analysis stack only used for DOM building + * + d node like(xmlNodePtr) Current parsed node + d nodeNr like(xmlCint) Parsing stack depth + d nodeMax like(xmlCint) Max stack depth + d nodeTab * xmlNodePtr * + * + d record_info like(xmlCint) Keep node info ? + d node_seq likeds(xmlParserNodeInfoSeq) Parsed nodes info + * + d errNo like(xmlCint) Error code + * + d hasExternalSubset... + d like(xmlCint) + d hasPErefs like(xmlCint) + d external like(xmlCint) Parsing ext. entity? + * + d valid like(xmlCint) Valid document ? + d validate like(xmlCint) Try to validate ? + d vctxt likeds(xmlValidCtxt) Validity context + * + d instate like(xmlParserInputState) Current input type + d token like(xmlCint) Next look-ahead char + * + d directory * char * + * + * Node name stack + * + d name * const xmlChar * + d nameNr like(xmlCint) Parsing stack depth + d nameMax like(xmlCint) Max stack depth + d nameTab * const xmlChar * * + * + d nbChars like(xmlClong) # xmlChars processed + d checkIndex like(xmlClong) 4 progressive parse + d keepBlanks like(xmlCint) Ugly but ... + d disableSAX like(xmlCint) Disable SAX cllbacks + d inSubset like(xmlCint) In int 1/ext 2 sbset + d intSubName * const xmlChar * + d extSubURI * const xmlChar * + d extSubSytem * const xmlChar * + * + * xml:space values + * + d space * int * + d spaceNr like(xmlCint) Parsing stack depth + d spaceMax like(xmlCint) Max stack depth + d spaceTab * int * + * + d depth like(xmlCint) To detect loops + d entity like(xmlParserInputPtr) To check boundaries + d charset like(xmlCint) In-memory content + d nodelen like(xmlCint) Speed up parsing + d nodemem like(xmlCint) Speed up parsing + d pedantic like(xmlCint) Enb. pedantic warng + d #private * void * + * + d loadsubset like(xmlCint) Load ext. subset ? + d linenumbers like(xmlCint) Set line numbers ? + d catalogs * void * + d recovery like(xmlCint) Run in recovery mode + d progressive like(xmlCint) Progressive parsing? + d dict like(xmlDictPtr) Parser dictionary + d atts * const xmlChar * + d maxatts like(xmlCint) Above array size + d docdict like(xmlCint) Use dictionary ? + * + * pre-interned strings + * + d str_xml * const xmlChar * + d str_xmlns * const xmlChar * + d str_xml_ms * const xmlChar * + * + * Everything below is used only by the new SAX mode + * + d sax2 like(xmlCint) New SAX mode ? + d nsNr like(xmlCint) # inherited nmspaces + d nsMax like(xmlCint) Array size + d nsTab * const xmlChar * + d attallocs * int * + d pushTab * void * + d attsDefault like(xmlHashTablePtr) Defaulted attrs + d attsSpecial like(xmlHashTablePtr) non-CDATA attrs + d nsWellFormed like(xmlCint) Doc namespace OK ? + d options like(xmlCint) Extra options + * + * Those fields are needed only for treaming parsing so far + * + d dictNames like(xmlCint) Dict names in tree ? + d freeElemsNr like(xmlCint) # free element nodes + d freeElems like(xmlNodePtr) Free elem nodes list + d freeAttrsNr like(xmlCint) # free attr. nodes + d freeAttrs like(xmlAttrPtr) Free attr noes list + * + * the complete error informations for the last error. + * + d lastError likeds(xmlError) + d parseMode like(xmlParserMode) The parser mode + d nbentities like(xmlCulong) # entity references + d sizeentities like(xmlCulong) Parsed entities size + * + * for use by HTML non-recursive parser + * + d nodeInfo like(xmlParserNodeInfoPtr) Current NodeInfo + d nodeInfoNr like(xmlCint) Parsing stack depth + d nodeInfoMax like(xmlCint) Max stack depth + d nodeInfoTab * xmlParserNodeInfo * + * + d input_id like(xmlCint) Label inputs ? + d sizeentcopy like(xmlCulong) Entity copy volume + + * xmlSAXLocator: + * + * A SAX Locator. + + d xmlSAXLocator ds based(xmlSAXLocatorPtr) + d align qualified + d getPublicId * procptr + d getSystemId * procptr + d getLineNumber * procptr + d getColumnNumber... + d * procptr + + * xmlSAXHandler: + * + * A SAX handler is bunch of callbacks called by the parser when + * processing of the input generate data or structure informations. + + * resolveEntitySAXFunc: + * @ctx: the user data (XML parser context) + * @publicId: The public ID of the entity + * @systemId: The system ID of the entity + * + * Callback: + * The entity loader, to control the loading of external entities, + * the application can either: + * - override this resolveEntity() callback in the SAX block + * - or better use the xmlSetExternalEntityLoader() function to + * set up it's own entity resolution routine + * + * Returns the xmlParserInputPtr if inlined or NULL for DOM behaviour. + + d resolveEntitySAXFunc... + d s * based(######typedef######) + d procptr + + * internalSubsetSAXFunc: + * @ctx: the user data (XML parser context) + * @name: the root element name + * @ExternalID: the external ID + * @SystemID: the SYSTEM ID (e.g. filename or URL) + * + * Callback on internal subset declaration. + + d internalSubsetSAXFunc... + d s * based(######typedef######) + d procptr + + * externalSubsetSAXFunc: + * @ctx: the user data (XML parser context) + * @name: the root element name + * @ExternalID: the external ID + * @SystemID: the SYSTEM ID (e.g. filename or URL) + * + * Callback on external subset declaration. + + d externalSubsetSAXFunc... + d s * based(######typedef######) + d procptr + + * getEntitySAXFunc: + * @ctx: the user data (XML parser context) + * @name: The entity name + * + * Get an entity by name. + * + * Returns the xmlEntityPtr if found. + + d getEntitySAXFunc... + d s * based(######typedef######) + d procptr + + * getParameterEntitySAXFunc: + * @ctx: the user data (XML parser context) + * @name: The entity name + * + * Get a parameter entity by name. + * + * Returns the xmlEntityPtr if found. + + d getParameterEntitySAXFunc... + d s * based(######typedef######) + d procptr + + * entityDeclSAXFunc: + * @ctx: the user data (XML parser context) + * @name: the entity name + * @type: the entity type + * @publicId: The public ID of the entity + * @systemId: The system ID of the entity + * @content: the entity value (without processing). + * + * An entity definition has been parsed. + + d entityDeclSAXFunc... + d s * based(######typedef######) + d procptr + + * notationDeclSAXFunc: + * @ctx: the user data (XML parser context) + * @name: The name of the notation + * @publicId: The public ID of the entity + * @systemId: The system ID of the entity + * + * What to do when a notation declaration has been parsed. + + d notationDeclSAXFunc... + d s * based(######typedef######) + d procptr + + * attributeDeclSAXFunc: + * @ctx: the user data (XML parser context) + * @elem: the name of the element + * @fullname: the attribute name + * @type: the attribute type + * @def: the type of default value + * @defaultValue: the attribute default value + * @tree: the tree of enumerated value set + * + * An attribute definition has been parsed. + + d attributeDeclSAXFunc... + d s * based(######typedef######) + d procptr + + * elementDeclSAXFunc: + * @ctx: the user data (XML parser context) + * @name: the element name + * @type: the element type + * @content: the element value tree + * + * An element definition has been parsed. + + d elementDeclSAXFunc... + d s * based(######typedef######) + d procptr + + * unparsedEntityDeclSAXFunc: + * @ctx: the user data (XML parser context) + * @name: The name of the entity + * @publicId: The public ID of the entity + * @systemId: The system ID of the entity + * @notationName: the name of the notation + * + * What to do when an unparsed entity declaration is parsed. + + d unparsedEntityDeclSAXFunc... + d s * based(######typedef######) + d procptr + + * setDocumentLocatorSAXFunc: + * @ctx: the user data (XML parser context) + * @loc: A SAX Locator + * + * Receive the document locator at startup, actually xmlDefaultSAXLocator. + * Everything is available on the context, so this is useless in our case. + + d setDocumentLocatorSAXFunc... + d s * based(######typedef######) + d procptr + + * startDocumentSAXFunc: + * @ctx: the user data (XML parser context) + * + * Called when the document start being processed. + + d startDocumentSAXFunc... + d s * based(######typedef######) + d procptr + + * endDocumentSAXFunc: + * @ctx: the user data (XML parser context) + * + * Called when the document end has been detected. + + d endDocumentSAXFunc... + d s * based(######typedef######) + d procptr + + * startElementSAXFunc: + * @ctx: the user data (XML parser context) + * @name: The element name, including namespace prefix + * @atts: An array of name/value attributes pairs, NULL terminated + * + * Called when an opening tag has been processed. + + d startElementSAXFunc... + d s * based(######typedef######) + d procptr + + * endElementSAXFunc: + * @ctx: the user data (XML parser context) + * @name: The element name + * + * Called when the end of an element has been detected. + + d endElementSAXFunc... + d s * based(######typedef######) + d procptr + + * attributeSAXFunc: + * @ctx: the user data (XML parser context) + * @name: The attribute name, including namespace prefix + * @value: The attribute value + * + * Handle an attribute that has been read by the parser. + * The default handling is to convert the attribute into an + * DOM subtree and past it in a new xmlAttr element added to + * the element. + + d attributeSAXFunc... + d s * based(######typedef######) + d procptr + + * referenceSAXFunc: + * @ctx: the user data (XML parser context) + * @name: The entity name + * + * Called when an entity reference is detected. + + d referenceSAXFunc... + d s * based(######typedef######) + d procptr + + * charactersSAXFunc: + * @ctx: the user data (XML parser context) + * @ch: a xmlChar string + * @len: the number of xmlChar + * + * Receiving some chars from the parser. + + d charactersSAXFunc... + d s * based(######typedef######) + d procptr + + * ignorableWhitespaceSAXFunc: + * @ctx: the user data (XML parser context) + * @ch: a xmlChar string + * @len: the number of xmlChar + * + * Receiving some ignorable whitespaces from the parser. + * UNUSED: by default the DOM building will use characters. + + d ignorableWhitespaceSAXFunc... + d s * based(######typedef######) + d procptr + + * processingInstructionSAXFunc: + * @ctx: the user data (XML parser context) + * @target: the target name + * @data: the PI data's + * + * A processing instruction has been parsed. + + d processingInstructionSAXFunc... + d s * based(######typedef######) + d procptr + + * commentSAXFunc: + * @ctx: the user data (XML parser context) + * @value: the comment content + * + * A comment has been parsed. + + d commentSAXFunc... + d s * based(######typedef######) + d procptr + + * cdataBlockSAXFunc: + * @ctx: the user data (XML parser context) + * @value: The pcdata content + * @len: the block length + * + * Called when a pcdata block has been parsed. + + d cdataBlockSAXFunc... + d s * based(######typedef######) + d procptr + + * warningSAXFunc: + * @ctx: an XML parser context + * @msg: the message to display/transmit + * @...: extra parameters for the message display + * + * Display and format a warning messages, callback. + + d warningSAXFunc... + d s * based(######typedef######) + d procptr + + * errorSAXFunc: + * @ctx: an XML parser context + * @msg: the message to display/transmit + * @...: extra parameters for the message display + * + * Display and format an error messages, callback. + + d errorSAXFunc... + d s * based(######typedef######) + d procptr + + * fatalErrorSAXFunc: + * @ctx: an XML parser context + * @msg: the message to display/transmit + * @...: extra parameters for the message display + * + * Display and format fatal error messages, callback. + * Note: so far fatalError() SAX callbacks are not used, error() + * get all the callbacks for errors. + + d fatalErrorSAXFunc... + d s * based(######typedef######) + d procptr + + * isStandaloneSAXFunc: + * @ctx: the user data (XML parser context) + * + * Is this document tagged standalone? + * + * Returns 1 if true + + d isStandaloneSAXFunc... + d s * based(######typedef######) + d procptr + + * hasInternalSubsetSAXFunc: + * @ctx: the user data (XML parser context) + * + * Does this document has an internal subset. + * + * Returns 1 if true + + d hasInternalSubsetSAXFunc... + d s * based(######typedef######) + d procptr + + * hasExternalSubsetSAXFunc: + * @ctx: the user data (XML parser context) + * + * Does this document has an external subset? + * + * Returns 1 if true + + d hasExternalSubsetSAXFunc... + d s * based(######typedef######) + d procptr + + ************************************************************************ + * * + * The SAX version 2 API extensions * + * * + ************************************************************************ + + * XML_SAX2_MAGIC: + * + * Special constant found in SAX2 blocks initialized fields + + d XML_SAX2_MAGIC c X'DEEDBEAF' + + * startElementNsSAX2Func: + * @ctx: the user data (XML parser context) + * @localname: the local name of the element + * @prefix: the element namespace prefix if available + * @URI: the element namespace name if available + * @nb_namespaces: number of namespace definitions on that node + * @namespaces: pointer to the array of prefix/URI pairs namespace + * definitions + * @nb_attributes: the number of attributes on that node + * @nb_defaulted: the number of defaulted attributes. The defaulted + * ones are at the end of the array + * @attributes: pointer to the array of + * (localname/prefix/URI/value/end) attribute values. + * + * SAX2 callback when an element start has been detected by the parser. + * It provides the namespace informations for the element, as well as + * the new namespace declarations on the element. + + d startElementNsSAX2Func... + d s * based(######typedef######) + d procptr + + * endElementNsSAX2Func: + * @ctx: the user data (XML parser context) + * @localname: the local name of the element + * @prefix: the element namespace prefix if available + * @URI: the element namespace name if available + * + * SAX2 callback when an element end has been detected by the parser. + * It provides the namespace informations for the element. + + d endElementNsSAX2Func... + d s * based(######typedef######) + d procptr + + d xmlSAXHandler ds based(xmlSAXHandlerPtr) + d align qualified + d internalSubset... + d like(internalSubsetSAXFunc) + d isStandalone like(isStandaloneSAXFunc) + d hasInternalSubset... + d like(hasInternalSubsetSAXFunc) + d hasExternalSubset... + d like(hasExternalSubsetSAXFunc) + d resolveEntity like(resolveEntitySAXFunc) + d getEntity like(getEntitySAXFunc) + d entityDecl like(entityDeclSAXFunc) + d notationDecl like(notationDeclSAXFunc) + d attributeDecl like(attributeDeclSAXFunc) + d elementDecl like(elementDeclSAXFunc) + d unparsedEntityDecl... + d like(unparsedEntityDeclSAXFunc) + d setDocumentLocator... + d like(setDocumentLocatorSAXFunc) + d startDocument like(startDocumentSAXFunc) + d endDocument like(endDocumentSAXFunc) + d startElement like(startElementSAXFunc) + d endElement like(endElementSAXFunc) + d reference like(referenceSAXFunc) + d characters like(charactersSAXFunc) + d ignorableWhitespace... + d like(ignorableWhitespaceSAXFunc) + d processingInstruction... + d like(processingInstructionSAXFunc) + d comment like(commentSAXFunc) + d warning like(warningSAXFunc) + d error like(errorSAXFunc) + d fatalError like(fatalErrorSAXFunc) + d getParameterEntity... + d like(getParameterEntitySAXFunc) + d cdataBlock like(cdataBlockSAXFunc) + d externalSubset... + d like(externalSubsetSAXFunc) + d initialized like(xmlCuint) + * + * The following fields are extensions available only on version 2 + * + d #private * void * + d startElementNs... + d like(startElementNsSAX2Func) + d endELementNs like(endElementNsSAX2Func) + d serror like(xmlStructuredErrorFunc) + + * SAX Version 1 + + d xmlSAXHandlerV1Ptr... + d s * based(######typedef######) + + d xmlSAXHandlerV1... + d ds based(xmlSAXHandlerV1Ptr) + d align qualified + d internalSubset... + d like(internalSubsetSAXFunc) + d isStandalone like(isStandaloneSAXFunc) + d hasInternalSubset... + d like(hasInternalSubsetSAXFunc) + d hasExternalSubset... + d like(hasExternalSubsetSAXFunc) + d resolveEntity like(resolveEntitySAXFunc) + d getEntity like(getEntitySAXFunc) + d entityDecl like(entityDeclSAXFunc) + d notationDecl like(notationDeclSAXFunc) + d attributeDecl like(attributeDeclSAXFunc) + d elementDecl like(elementDeclSAXFunc) + d unparsedEntityDecl... + d like(unparsedEntityDeclSAXFunc) + d setDocumentLocator... + d like(setDocumentLocatorSAXFunc) + d startDocument like(startDocumentSAXFunc) + d endDocument like(endDocumentSAXFunc) + d startElement like(startElementSAXFunc) + d endElement like(endElementSAXFunc) + d reference like(referenceSAXFunc) + d characters like(charactersSAXFunc) + d ignorableWhitespace... + d like(ignorableWhitespaceSAXFunc) + d processingInstruction... + d like(processingInstructionSAXFunc) + d comment like(commentSAXFunc) + d warning like(warningSAXFunc) + d error like(errorSAXFunc) + d fatalError like(fatalErrorSAXFunc) + d getParameterEntity... + d like(getParameterEntitySAXFunc) + d cdataBlock like(cdataBlockSAXFunc) + d externalSubset... + d like(externalSubsetSAXFunc) + d initialized like(xmlCuint) + + * xmlExternalEntityLoader: + * @URL: The System ID of the resource requested + * @ID: The Public ID of the resource requested + * @context: the XML parser context + * + * External entity loaders types. + * + * Returns the entity input parser. + + d xmlExternalEntityLoader... + d s * based(######typedef######) + d procptr + + /include "libxmlrpg/encoding" + /include "libxmlrpg/xmlIO" + /include "libxmlrpg/globals" + + * Init/Cleanup + + d xmlInitParser pr extproc('xmlInitParser') + + d xmlCleanupParser... + d pr extproc('xmlCleanupParser') + + * Input functions + + d xmlParserInputRead... + d pr extproc('xmlParserInputRead') + d like(xmlCint) + d in value like(xmlParserInputPtr) + d len value like(xmlCint) + + d xmlParserInputGrow... + d pr extproc('xmlParserInputGrow') + d like(xmlCint) + d in value like(xmlParserInputPtr) + d len value like(xmlCint) + + * Basic parsing Interfaces + + /if defined(LIBXML_SAX1_ENABLED) + d xmlParseDoc pr extproc('xmlParseDoc') + d like(xmlDocPtr) + d cur * value options(*string) const xmlChar * + + d xmlParseFile pr extproc('xmlParseFile') + d like(xmlDocPtr) + d filename * value options(*string) const char * + + d xmlParseMemory pr extproc('xmlParseMemory') + d like(xmlDocPtr) + d buffer * value options(*string) const char * + d size value like(xmlCint) + /endif LIBXML_SAX1_ENABLED + + d xmlSubstituteEntitiesDefault... + d pr extproc( + d 'xmlSubstituteEntitiesDefault') + d like(xmlCint) + d val value like(xmlCint) + + d xmlKeepBlanksDefault... + d pr extproc('xmlKeepBlanksDefault') + d like(xmlCint) + d val value like(xmlCint) + + d xmlStopParser pr extproc('xmlStopParser') + d ctxt value like(xmlParserCtxtPtr) + + d xmlPedanticParserDefault... + d pr extproc('xmlPedanticParserDefault') + d like(xmlCint) + d val value like(xmlCint) + + d xmlLineNumbersDefault... + d pr extproc('xmlLineNumbersDefault') + d like(xmlCint) + d val value like(xmlCint) + + /if defined(LIBXML_SAX1_ENABLED) + * Recovery mode + + d xmlRecoverDoc pr extproc('xmlRecoverDoc') + d like(xmlDocPtr) + d cur * value options(*string) const xmlChar * + + d xmlRecoverMemory... + d pr extproc('xmlRecoverMemory') + d like(xmlDocPtr) + d buffer * value options(*string) const char * + d size value like(xmlCint) + + d xmlRecoverFile pr extproc('xmlRecoverFile') + d like(xmlDocPtr) + d filename * value options(*string) const char * + /endif LIBXML_SAX1_ENABLED + + * Less common routines and SAX interfaces + + d xmlParseDocument... + d pr extproc('xmlParseDocument') + d like(xmlCint) + d ctxt value like(xmlParserCtxtPtr) + + d xmlParseExtParsedEnt... + d pr extproc('xmlParseExtParsedEnt') + d like(xmlCint) + d ctxt value like(xmlParserCtxtPtr) + + /if defined(LIBXML_SAX1_ENABLED) + d xmlSAXUserParseFile... + d pr extproc('xmlSAXUserParseFile') + d like(xmlCint) + d sax value like(xmlSAXHandlerPtr) + d user_data * value void * + d filename * value options(*string) const char * + + d xmlSAXUserParseMemory... + d pr extproc('xmlSAXUserParseMemory') + d like(xmlCint) + d sax value like(xmlSAXHandlerPtr) + d user_data * value void * + d buffer * value options(*string) const char * + d size value like(xmlCint) + + d xmlSAXParseDoc pr extproc('xmlSAXParseDoc') + d like(xmlDocPtr) + d sax value like(xmlSAXHandlerPtr) + d cur * value options(*string) const xmlChar * + d recovery value like(xmlCint) + + d xmlSAXParseMemory... + d pr extproc('xmlSAXParseMemory') + d like(xmlDocPtr) + d sax value like(xmlSAXHandlerPtr) + d buffer * value options(*string) const char * + d size value like(xmlCint) + d recovery value like(xmlCint) + + d xmlSAXParseMemoryWithData... + d pr extproc('xmlSAXParseMemoryWithData') + d like(xmlDocPtr) + d sax value like(xmlSAXHandlerPtr) + d buffer * value options(*string) const char * + d size value like(xmlCint) + d recovery value like(xmlCint) + d data * value void * + + d xmlSAXParseFile... + d pr extproc('xmlSAXParseFile') + d like(xmlDocPtr) + d sax value like(xmlSAXHandlerPtr) + d filename * value options(*string) const char * + d recovery value like(xmlCint) + + d xmlSAXParseFileWithData... + d pr extproc('xmlSAXParseFileWithData') + d like(xmlDocPtr) + d sax value like(xmlSAXHandlerPtr) + d filename * value options(*string) const char * + d recovery value like(xmlCint) + d data * value void * + + d xmlSAXParseEntity... + d pr extproc('xmlSAXParseEntity') + d like(xmlDocPtr) + d sax value like(xmlSAXHandlerPtr) + d filename * value options(*string) const char * + + d xmlParseEntity... + d pr extproc('xmlParseEntity') + d like(xmlDocPtr) + d filename * value options(*string) const char * + /endif LIBXML_SAX1_ENABLED + + /if defined(LIBXML_VALID_ENABLED) + d xmlSAXParseDTD pr extproc('xmlSAXParseDTD') + d like(xmlDtdPtr) + d sax value like(xmlSAXHandlerPtr) + d ExternalID * value options(*string) const xmlChar * + d SystemID * value options(*string) const xmlChar * + + d xmlParseDTD pr extproc('xmlParseDTD') + d like(xmlDtdPtr) + d ExternalID * value options(*string) const xmlChar * + d SystemID * value options(*string) const xmlChar * + + d xmlIOParseDTD pr extproc('xmlIOParseDTD') + d like(xmlDtdPtr) + d sax value like(xmlSAXHandlerPtr) + d input value like(xmlParserInputBufferPtr) + d enc value like(xmlCharEncoding) + /endif LIBXML_VALID_ENABLED + + /if defined(LIBXML_SAX1_ENABLED) + d xmlParseBalancedChunkMemory... + d pr extproc( + d 'xmlParseBalancedChunkMemory') + d like(xmlCint) + d doc value like(xmlDocPtr) + d sax value like(xmlSAXHandlerPtr) + d user_data * value void * + d depth value like(xmlCint) + d user_data * value void * + d string * value options(*string) const xmlChar * + d lst * value xmlNodePtr * + /endif LIBXML_SAX1_ENABLED + + d xmlParseInNodeContext... + d pr extproc('xmlParseInNodeContext') + d like(xmlParserErrors) + d node value like(xmlNodePtr) + d data * value options(*string) const char * + d datalen value like(xmlCint) + d options value like(xmlCint) + d lst * value xmlNodePtr * + + /if defined(LIBXML_SAX1_ENABLED) + d xmlParseBalancedChunkMemoryRecover... + d pr extproc( + d 'xmlParseBalancedChunkMemoryRecover') + d like(xmlCint) + d doc value like(xmlDocPtr) + d sax value like(xmlSAXHandlerPtr) + d user_data * value void * + d depth value like(xmlCint) + d string * value options(*string) const xmlChar * + d lst * value xmlNodePtr * + d recover value like(xmlCint) + + d xmlParseExternalEntity... + d pr extproc('xmlParseExternalEntity') + d like(xmlCint) + d doc value like(xmlDocPtr) + d sax value like(xmlSAXHandlerPtr) + d user_data * value void * + d depth value like(xmlCint) + d URL * value options(*string) const xmlChar * + d ID * value options(*string) const xmlChar * + d lst * value xmlNodePtr * + /endif LIBXML_SAX1_ENABLED + + d xmlParseCtxtExternalEntity... + d pr extproc('xmlParseCtxtExternalEntity') + d like(xmlCint) + d sax value like(xmlSAXHandlerPtr) + d URL * value options(*string) const xmlChar * + d ID * value options(*string) const xmlChar * + d lst * value xmlNodePtr * + + * Parser contexts handling. + + d xmlNewParserCtxt... + d pr extproc('xmlNewParserCtxt') + d like(xmlParserCtxtPtr) + + d xmlInitParserCtxt... + d pr extproc('xmlInitParserCtxt') + d like(xmlCint) + d ctxt value like(xmlParserCtxtPtr) + + d xmlClearParserCtxt... + d pr extproc('xmlClearParserCtxt') + d ctxt value like(xmlParserCtxtPtr) + + d xmlFreeParserCtxt... + d pr extproc('xmlFreeParserCtxt') + d ctxt value like(xmlParserCtxtPtr) + + /if defined(LIBXML_SAX1_ENABLED) + d xmlSetupParserForBuffer... + d pr extproc('xmlSetupParserForBuffer') + d ctxt value like(xmlParserCtxtPtr) + d buffer * value options(*string) const xmlChar * + d filename * value options(*string) const char * + /endif LIBXML_SAX1_ENABLED + + d xmlCreateDocParserCtxt... + d pr extproc('xmlCreateDocParserCtxt') + d like(xmlParserCtxtPtr) + d cur * value options(*string) const xmlChar * + + /if defined(LIBXML_LEGACY_ENABLED) + * Reading/setting optional parsing features. + + d xmlGetFeaturesList... + d pr extproc('xmlGetFeaturesList') + d like(xmlCint) + d len like(xmlCint) + d result * const char *(*) + + d xmlGetFeature pr extproc('xmlGetFeature') + d like(xmlCint) + d ctxt value like(xmlParserCtxtPtr) + d name * value options(*string) const char * + d result * value void * + + d xmlSetFeature pr extproc('xmlSetFeature') + d like(xmlCint) + d ctxt value like(xmlParserCtxtPtr) + d name * value options(*string) const char * + d result * value void * + /endif LIBXML_LEGACY_ENABLD + + /if defined(LIBXML_PUSH_ENABLED) + * Interfaces for the Push mode. + + d xmlCreatePushParserCtxt... + d pr extproc('xmlCreatePushParserCtxt') + d like(xmlParserCtxtPtr) + d sax value like(xmlSAXHandlerPtr) + d user_data * value void * + d chunk * value options(*string) const char * + d size value like(xmlCint) + d filename * value options(*string) const char * + + d xmlParseChunk pr extproc('xmlParseChunk') + d like(xmlCint) + d ctxt value like(xmlParserCtxtPtr) + d chunk * value options(*string) const char * + d size value like(xmlCint) + d terminate value like(xmlCint) + /endif LIBXML_PUSH_ENABLED + + * Special I/O mode. + + d xmlCreateIOParserCtxt... + d pr extproc('xmlCreateIOParserCtxt') + d like(xmlParserCtxtPtr) + d sax value like(xmlSAXHandlerPtr) + d user_data * value void * + d ioread value like(xmlInputReadCallback) + d ioclose value like(xmlInputCloseCallback) + d ioctx * value void * + d enc value like(xmlCharEncoding) + + d xmlNewIOInputStream... + d pr extproc('xmlNewIOInputStream') + d like(xmlParserInputPtr) + d ctxt value like(xmlParserCtxtPtr) + d input value like(xmlParserInputBufferPtr) + d enc value like(xmlCharEncoding) + + * Node infos. + + d xmlParserFindNodeInfo... + d pr * extproc('xmlParserFindNodeInfo') xmlParserNodeInfo * + d ctxt value like(xmlParserCtxtPtr) + d node value like(xmlNodePtr) const + + d xmlInitNodeInfoSeq... + d pr extproc('xmlInitNodeInfoSeq') + d seq value like(xmlParserNodeInfoSeqPtr) + + d xmlClearNodeInfoSeq... + d pr extproc('xmlClearNodeInfoSeq') + d seq value like(xmlParserNodeInfoSeqPtr) + + d xmlParserFindNodeInfoIndex... + d pr extproc('xmlParserFindNodeInfoIndex') + d like(xmlCulong) + d seq value like(xmlParserNodeInfoSeqPtr) + d node value like(xmlNodePtr) const + + d xmlParserAddNodeInfo... + d pr extproc('xmlParserAddNodeInfo') + d ctxt value like(xmlParserCtxtPtr) + d info value like(xmlParserNodeInfoPtr) const + + * External entities handling actually implemented in xmlIO. + + d xmlSetExternalEntityLoader... + d pr extproc('xmlSetExternalEntityLoader') + d f value like(xmlExternalEntityLoader) + + d xmlGetExternalEntityLoader... + d pr extproc('xmlGetExternalEntityLoader') + d like(xmlExternalEntityLoader) + + d xmlLoadExternalEntity... + d pr extproc('xmlLoadExternalEntity') + d like(xmlParserInputPtr) + d URL * value options(*string) const char * + d ID * value options(*string) const char * + d ctxt value like(xmlParserCtxtPtr) + + * Index lookup, actually implemented in the encoding module + + d xmlByteConsumed... + d pr extproc('xmlByteConsumed') + d like(xmlClong) + d ctxt value like(xmlParserCtxtPtr) + + * New set of simpler/more flexible APIs + + * xmlParserOption: + * + * This is the set of XML parser options that can be passed down + * to the xmlReadDoc() and similar calls. + + d xmlParserOption... + d s based(######typedef######) + d like(xmlCenum) + d XML_PARSE_RECOVER... Recover on errors + d c X'00000001' + d XML_PARSE_NOENT... Substitute entities + d c X'00000002' + d XML_PARSE_DTDLOAD... Load external subset + d c X'00000004' + d XML_PARSE_DTDATTR... Default DTD attrs + d c X'00000008' + d XML_PARSE_DTDVALID... Validate with DTD + d c X'00000010' + d XML_PARSE_NOERROR... Suppress err reports + d c X'00000020' + d XML_PARSE_NOWARNING... Suppr warn reports + d c X'00000040' + d XML_PARSE_PEDANTIC... Pedantic err report + d c X'00000080' + d XML_PARSE_NOBLANKS... Remove blank nodes + d c X'00000100' + d XML_PARSE_SAX1... Use SAX1 internally + d c X'00000200' + d XML_PARSE_XINCLUDE... Impl XInclude subst + d c X'00000400' + d XML_PARSE_NONET... Forbid netwrk access + d c X'00000800' + d XML_PARSE_NODICT... No contxt dict reuse + d c X'00001000' + d XML_PARSE_NSCLEAN... Rmv redndnt ns decls + d c X'00002000' + d XML_PARSE_NOCDATA... CDATA as text nodes + d c X'00004000' + d XML_PARSE_NOXINCNODE... No XINCL START/END + d c X'00008000' + d XML_PARSE_COMPACT... Compact text nodes + d c X'00010000' + d XML_PARSE_OLD10... B4 upd5 compatible + d c X'00020000' + d XML_PARSE_NOBASEFIX... No XINC xml:base fix + d c X'00040000' + d XML_PARSE_HUGE... No parsing limit + d c X'00080000' + d XML_PARSE_OLDSAX... Use SAX2 b4 2.7.0 + d c X'00100000' + d XML_PARSE_IGNORE_ENC... No int doc code hint + d c X'00200000' + d XML_PARSE_BIG_LINES... Big line#-->PSVI fld + d c X'00400000' + + d xmlCtxtReset pr extproc('xmlCtxtReset') + d ctxt value like(xmlParserCtxtPtr) + + d xmlCtxtResetPush... + d pr extproc('xmlCtxtResetPush') + d like(xmlCint) + d ctxt value like(xmlParserCtxtPtr) + d chunk * value options(*string) const char * + d size value like(xmlCint) + d filename * value options(*string) const char * + d encoding * value options(*string) const char * + + d xmlCtxtUseOptions... + d pr extproc('xmlCtxtUseOptions') + d like(xmlCint) + d ctxt value like(xmlParserCtxtPtr) + d options value like(xmlCint) + + d xmlReadDoc pr extproc('xmlReadDoc') + d like(xmlDocPtr) + d cur * value options(*string) const xmlChar * + d URL * value options(*string) const char * + d encoding * value options(*string) const char * + d options value like(xmlCint) + + d xmlReadFile pr extproc('xmlReadFile') + d like(xmlDocPtr) + d URL * value options(*string) const char * + d encoding * value options(*string) const char * + d options value like(xmlCint) + + d xmlReadMemory pr extproc('xmlReadMemory') + d like(xmlDocPtr) + d buffer * value options(*string) const char * + d size value like(xmlCint) + d URL * value options(*string) const char * + d encoding * value options(*string) const char * + d options value like(xmlCint) + + d xmlReadFd pr extproc('xmlReadFd') + d like(xmlDocPtr) + d fd value like(xmlCint) + d URL * value options(*string) const char * + d encoding * value options(*string) const char * + d options value like(xmlCint) + + d xmlReadIO pr extproc('xmlReadIO') + d like(xmlDocPtr) + d ioread value like(xmlInputReadCallback) + d ioclose value like(xmlInputCloseCallback) + d ioctx * value void * + d URL * value options(*string) const char * + d encoding * value options(*string) const char * + d options value like(xmlCint) + + d xmlCtxtReadDoc pr extproc('xmlCtxtReadDoc') + d like(xmlDocPtr) + d ctxt value like(xmlParserCtxtPtr) + d cur * value options(*string) const xmlChar * + d URL * value options(*string) const char * + d encoding * value options(*string) const char * + d options value like(xmlCint) + + d xmlCtxtReadFile... + d pr extproc('xmlCtxtReadFile') + d like(xmlDocPtr) + d ctxt value like(xmlParserCtxtPtr) + d filename * value options(*string) const char * + d encoding * value options(*string) const char * + d options value like(xmlCint) + + d xmlCtxtReadMemory... + d pr extproc('xmlCtxtReadMemory') + d like(xmlDocPtr) + d ctxt value like(xmlParserCtxtPtr) + d buffer * value options(*string) const char * + d size value like(xmlCint) + d URL * value options(*string) const char * + d encoding * value options(*string) const char * + d options value like(xmlCint) + + d xmlCtxtReadFd pr extproc('xmlCtxtReadFd') + d like(xmlDocPtr) + d ctxt value like(xmlParserCtxtPtr) + d fd value like(xmlCint) + d URL * value options(*string) const char * + d encoding * value options(*string) const char * + d options value like(xmlCint) + + d xmlCtxtReadIO pr extproc('xmlCtxtReadIO') + d like(xmlDocPtr) + d ctxt value like(xmlParserCtxtPtr) + d ioread value like(xmlInputReadCallback) + d ioclose value like(xmlInputCloseCallback) + d ioctx * value void * + d URL * value options(*string) const char * + d encoding * value options(*string) const char * + d options value like(xmlCint) + + * Library wide options + + * xmlFeature: + * + * Used to examine the existance of features that can be enabled + * or disabled at compile-time. + * They used to be called XML_FEATURE_xxx but this clashed with Expat + + d xmlFeature s based(######typedef######) + d like(xmlCenum) + d XML_WITH_THREAD... + d c 1 + d XML_WITH_TREE c 2 + d XML_WITH_OUTPUT... + d c 3 + d XML_WITH_PUSH c 4 + d XML_WITH_READER... + d c 5 + d XML_WITH_PATTERN... + d c 6 + d XML_WITH_WRITER... + d c 7 + d XML_WITH_SAX1 c 8 + d XML_WITH_FTP c 9 + d XML_WITH_HTTP c 10 + d XML_WITH_VALID... + d c 11 + d XML_WITH_HTML c 12 + d XML_WITH_LEGACY... + d c 13 + d XML_WITH_C14N c 14 + d XML_WITH_CATALOG... + d c 15 + d XML_WITH_XPATH... + d c 16 + d XML_WITH_XPTR c 17 + d XML_WITH_XINCLUDE... + d c 18 + d XML_WITH_ICONV... + d c 19 + d XML_WITH_ISO8859X... + d c 20 + d XML_WITH_UNICODE... + d c 21 + d XML_WITH_REGEXP... + d c 22 + d XML_WITH_AUTOMATA... + d c 23 + d XML_WITH_EXPR c 24 + d XML_WITH_SCHEMAS... + d c 25 + d XML_WITH_SCHEMATRON... + d c 26 + d XML_WITH_MODULES... + d c 27 + d XML_WITH_DEBUG... + d c 28 + d XML_WITH_DEBUG_MEM... + d c 29 + d XML_WITH_DEBUG_RUN... + d c 30 + d XML_WITH_ZLIB c 31 + d XML_WITH_ICU c 32 + d XML_WITH_LZMA c 33 + d XML_WITH_NONE c 99999 + + d xmlHasFeature pr extproc('xmlHasFeature') + d like(xmlCint) + d feature value like(xmlFeature) + + /endif XML_PARSER_H__ diff --git a/os400/libxmlrpg/parserInternals.rpgle b/os400/libxmlrpg/parserInternals.rpgle new file mode 100644 index 0000000..6c8f388 --- /dev/null +++ b/os400/libxmlrpg/parserInternals.rpgle @@ -0,0 +1,598 @@ + * Summary: internals routines and limits exported by the parser. + * Description: this module exports a number of internal parsing routines + * they are not really all intended for applications but + * can prove useful doing low level processing. + * + * Copy: See Copyright for the status of this software. + * + * Author: Patrick Monnerat , DATASPHERE S.A. + + /if not defined(XML_PARSER_INTERNALS_H__) + /define XML_PARSER_INTERNALS_H__ + + /include "libxmlrpg/xmlversion" + /include "libxmlrpg/xmlTypesC" + /include "libxmlrpg/parser" + /include "libxmlrpg/HTMLparser" + /include "libxmlrpg/chvalid" + + * xmlParserMaxDepth: + * + * arbitrary depth limit for the XML documents that we allow to + * process. This is not a limitation of the parser but a safety + * boundary feature, use XML_PARSE_HUGE option to override it. + + d xmlParserMaxDepth... + d s import('xmlParserMaxDepth') + d like(xmlCuint) + + * XML_MAX_TEXT_LENGTH: + * + * Maximum size allowed for a single text node when building a tree. + * This is not a limitation of the parser but a safety boundary feature, + * use XML_PARSE_HUGE option to override it. + * Introduced in 2.9.0 + + d XML_MAX_TEXT_LENGTH... + d c 10000000 + + * XML_MAX_NAME_LENGTH: + * + * Maximum size allowed for a markup identitier + * This is not a limitation of the parser but a safety boundary feature, + * use XML_PARSE_HUGE option to override it. + * Note that with the use of parsing dictionaries overriding the limit + * may result in more runtime memory usage in face of "unfriendly' content + * Introduced in 2.9.0 + + d XML_MAX_NAME_LENGTH... + d c 50000 + + * XML_MAX_DICTIONARY_LIMIT: + * + * Maximum size allowed by the parser for a dictionary by default + * This is not a limitation of the parser but a safety boundary feature, + * use XML_PARSE_HUGE option to override it. + * Introduced in 2.9.0 + + d XML_MAX_DICTIONARY_LIMIT... + d c 10000000 + + * XML_MAX_LOOKUP_LIMIT: + * + * Maximum size allowed by the parser for ahead lookup + * This is an upper boundary enforced by the parser to avoid bad + * behaviour on "unfriendly' content + * Introduced in 2.9.0 + + d XML_MAX_LOOKUP_LIMIT... + d c 10000000 + + * XML_MAX_NAMELEN: + * + * Identifiers can be longer, but this will be more costly + * at runtime. + + d XML_MAX_NAMELEN... + d c 100 + + * INPUT_CHUNK: + * + * The parser tries to always have that amount of input ready. + * One of the point is providing context when reporting errors. + + d INPUT_CHUNK c 250 + + * Global variables used for predefined strings. + + d xmlStringText s 4 import('xmlStringText') \0 in 5th byte + + d xmlStringTextNoenc... + d s 9 import('xmlStringTextNoenc') \0 in 10th byte + + d xmlStringComment... + d s 7 import('xmlStringComment') \0 in 8th byte + + * Function to finish the work of the macros where needed. + + d xmlIsLetter pr extproc('xmlIsLetter') + d like(xmlCint) + d c value like(xmlCint) + + * Parser context. + + d xmlCreateFileParserCtxt... + d pr extproc('xmlCreateFileParserCtxt') + d like(xmlParserCtxtPtr) + d filename * value options(*string) const char * + + d xmlCreateURLParserCtxt... + d pr extproc('xmlCreateURLParserCtxt') + d like(xmlParserCtxtPtr) + d filename * value options(*string) const char * + d options value like(xmlCint) + + d xmlCreateMemoryParserCtxt... + d pr extproc('xmlCreateMemoryParserCtxt') + d like(xmlParserCtxtPtr) + d buffer * value options(*string) const char * + d size value like(xmlCint) + + d xmlCreateEntityParserCtxt... + d pr extproc('xmlCreateEntityParserCtxt') + d like(xmlParserCtxtPtr) + d URL * value options(*string) const xmlChar * + d ID * value options(*string) const xmlChar * + d base * value options(*string) const xmlChar * + + d xmlSwitchEncoding... + d pr extproc('xmlSwitchEncoding') + d like(xmlCint) + d ctxt value like(xmlParserCtxtPtr) + d enc value like(xmlCharEncoding) + + d xmlSwitchToEncoding... + d pr extproc('xmlSwitchToEncoding') + d like(xmlCint) + d ctxt value like(xmlParserCtxtPtr) + d handler value like(xmlCharEncodingHandlerPtr) + + d xmlSwitchInputEncoding... + d pr extproc('xmlSwitchInputEncoding') + d like(xmlCint) + d ctxt value like(xmlParserCtxtPtr) + d input value like(xmlParserInputPtr) + d handler value like(xmlCharEncodingHandlerPtr) + + * Input Streams. + + d xmlNewStringInputStream... + d pr extproc('xmlNewStringInputStream') + d like(xmlParserInputPtr) + d ctxt value like(xmlParserCtxtPtr) + d buffer * value options(*string) const xmlChar * + + d xmlNewEntityInputStream... + d pr extproc('xmlNewEntityInputStream') + d like(xmlParserInputPtr) + d ctxt value like(xmlParserCtxtPtr) + d entity value like(xmlEntityPtr) + + d xmlPushInput pr extproc('xmlPushInput') + d like(xmlCint) + d ctxt value like(xmlParserCtxtPtr) + d input value like(xmlParserInputPtr) + + d xmlPopInput pr extproc('xmlPopInput') + d like(xmlChar) + d ctxt value like(xmlParserCtxtPtr) + + d xmlFreeInputStream... + d pr extproc('xmlFreeInputStream') + d input value like(xmlParserInputPtr) + + d xmlNewInputFromFile... + d pr extproc('xmlNewInputFromFile') + d like(xmlParserInputPtr) + d ctxt value like(xmlParserCtxtPtr) + d filename * value options(*string) const char * + + d xmlNewInputStream... + d pr extproc('xmlNewInputStream') + d like(xmlParserInputPtr) + d ctxt value like(xmlParserCtxtPtr) + + * Namespaces. + + d xmlSplitQName pr * extproc('xmlSplitQName') xmlChar * + d ctxt value like(xmlParserCtxtPtr) + d name * value options(*string) const xmlChar * + d prefix * xmlChar *(*) + + * Generic production rules. + + d xmlParseName pr * extproc('xmlParseName') const xmlChar * + d ctxt value like(xmlParserCtxtPtr) + + d xmlParseNmtoken... + d pr * extproc('xmlParseNmtoken') xmlChar * + d ctxt value like(xmlParserCtxtPtr) + + d xmlParseEntityValue... + d pr * extproc('xmlParseEntityValue') xmlChar * + d ctxt value like(xmlParserCtxtPtr) + d orig * xmlChar *(*) + + d xmlParseAttValue... + d pr * extproc('xmlParseAttValue') xmlChar * + d ctxt value like(xmlParserCtxtPtr) + + d xmlParseSystemLiteral... + d pr * extproc('xmlParseSystemLiteral') xmlChar * + d ctxt value like(xmlParserCtxtPtr) + + d xmlParsePubidLiteral... + d pr * extproc('xmlParsePubidLiteral') xmlChar * + d ctxt value like(xmlParserCtxtPtr) + + d xmlParseCharData... + d pr extproc('xmlParseCharData') + d ctxt value like(xmlParserCtxtPtr) + d cdata value like(xmlCint) + + d xmlParseExternalID... + d pr * extproc('xmlParseExternalID') xmlChar * + d ctxt value like(xmlParserCtxtPtr) + d publicID * xmlChar *(*) + d strict value like(xmlCint) + + d xmlParseComment... + d pr extproc('xmlParseComment') + d ctxt value like(xmlParserCtxtPtr) + + d xmlParsePITarget... + d pr * extproc('xmlParsePITarget') const xmlChar * + d ctxt value like(xmlParserCtxtPtr) + + d xmlParsePI pr extproc('xmlParsePI') + d ctxt value like(xmlParserCtxtPtr) + + d xmlParseNotationDecl... + d pr extproc('xmlParseNotationDecl') + d ctxt value like(xmlParserCtxtPtr) + + d xmlParseEntityDecl... + d pr extproc('xmlParseEntityDecl') + d ctxt value like(xmlParserCtxtPtr) + + d xmlParseDefaultDecl... + d pr extproc('xmlParseDefaultDecl') + d like(xmlCint) + d ctxt value like(xmlParserCtxtPtr) + d value * xmlChar *(*) + + d xmlParseNotationType... + d pr extproc('xmlParseNotationType') + d like(xmlEnumerationPtr) + d ctxt value like(xmlParserCtxtPtr) + + d xmlParseEnumerationType... + d pr extproc('xmlParseEnumerationType') + d like(xmlEnumerationPtr) + d ctxt value like(xmlParserCtxtPtr) + + d xmlParseEnumeratedType... + d pr extproc('xmlParseEnumeratedType') + d like(xmlCint) + d ctxt value like(xmlParserCtxtPtr) + d tree * value xmlEnumerationPtr * + + d xmlParseAttributeType... + d pr extproc('xmlParseAttributeType') + d like(xmlCint) + d ctxt value like(xmlParserCtxtPtr) + d tree * value xmlEnumerationPtr * + + d xmlParseAttributeListDecl... + d pr extproc('xmlParseAttributeListDecl') + d ctxt value like(xmlParserCtxtPtr) + + d xmlParseElementMixedContentDecl... + d pr extproc( + d 'xmlParseElementMixedContentDecl') + d like(xmlElementContentPtr) + d ctxt value like(xmlParserCtxtPtr) + d inputchk value like(xmlCint) + + d xmlParseElementChildrenContentDecl... + d pr extproc( + d 'xmlParseElementChildrenContentDecl') + d like(xmlElementContentPtr) + d ctxt value like(xmlParserCtxtPtr) + d inputchk value like(xmlCint) + + d xmlParseElementContentDecl... + d pr extproc('xmlParseElementContentDecl') + d like(xmlCint) + d ctxt value like(xmlParserCtxtPtr) + d name * value options(*string) const xmlChar * + d result * value xmlElementContentPtr + d * + + d xmlParseElementDecl... + d pr extproc('xmlParseElementDecl') + d like(xmlCint) + d ctxt value like(xmlParserCtxtPtr) + + d xmlParseMarkupDecl... + d pr extproc('xmlParseMarkupDecl') + d ctxt value like(xmlParserCtxtPtr) + + d xmlParseCharRef... + d pr extproc('xmlParseCharRef') + d like(xmlCint) + d ctxt value like(xmlParserCtxtPtr) + + d xmlParseEntityRef... + d pr extproc('xmlParseEntityRef') + d like(xmlEntityPtr) + d ctxt value like(xmlParserCtxtPtr) + + d xmlParseReference... + d pr extproc('xmlParseReference') + d ctxt value like(xmlParserCtxtPtr) + + d xmlParsePEReference... + d pr extproc('xmlParsePEReference') + d ctxt value like(xmlParserCtxtPtr) + + d xmlParseDocTypeDecl... + d pr extproc('xmlParseDocTypeDecl') + d ctxt value like(xmlParserCtxtPtr) + + /if defined(LIBXML_SAX1_ENABLED) + d xmlParseAttribute... + d pr * extproc('xmlParseAttribute') const xmlChar * + d ctxt value like(xmlParserCtxtPtr) + d value * xmlChar *(*) + + d xmlParseStartTag... + d pr * extproc('xmlParseStartTag') const xmlChar * + d ctxt value like(xmlParserCtxtPtr) + + d xmlParseEndTag pr extproc('xmlParseEndTag') + d ctxt value like(xmlParserCtxtPtr) + /endif LIBXML_SAX1_ENABLED + + d xmlParseCDSect pr extproc('xmlParseCDSect') + d ctxt value like(xmlParserCtxtPtr) + + d xmlParseContent... + d pr extproc('xmlParseContent') + d ctxt value like(xmlParserCtxtPtr) + + d xmlParseElement... + d pr extproc('xmlParseElement') + d ctxt value like(xmlParserCtxtPtr) + + d xmlParseVersionNum... + d pr * extproc('xmlParseVersionNum') xmlChar * + d ctxt value like(xmlParserCtxtPtr) + + d xmlParseVersionInfo... + d pr * extproc('xmlParseVersionInfo') xmlChar * + d ctxt value like(xmlParserCtxtPtr) + + d xmlParseEncName... + d pr * extproc('xmlParseEncName') xmlChar * + d ctxt value like(xmlParserCtxtPtr) + + d xmlParseEncodingDecl... + d pr * extproc('xmlParseEncodingDecl') const xmlChar * + d ctxt value like(xmlParserCtxtPtr) + + d xmlParseSDDecl pr extproc('xmlParseSDDecl') + d like(xmlCint) + d ctxt value like(xmlParserCtxtPtr) + + d xmlParseXMLDecl... + d pr extproc('xmlParseXMLDecl') + d ctxt value like(xmlParserCtxtPtr) + + d xmlParseTextDecl... + d pr extproc('xmlParseTextDecl') + d ctxt value like(xmlParserCtxtPtr) + + d xmlParseMisc pr extproc('xmlParseMisc') + d ctxt value like(xmlParserCtxtPtr) + + d xmlParseExternalSubset... + d pr extproc('xmlParseExternalSubset') + d ctxt value like(xmlParserCtxtPtr) + d ExternalID * value options(*string) const xmlChar * + d SystemID * value options(*string) const xmlChar * + + * XML_SUBSTITUTE_NONE: + * + * If no entities need to be substituted. + + d XML_SUBSTITUTE_NONE... + d c 0 + + * XML_SUBSTITUTE_REF: + * + * Whether general entities need to be substituted. + + d XML_SUBSTITUTE_REF... + d c 1 + + * XML_SUBSTITUTE_PEREF: + * + * Whether parameter entities need to be substituted. + + d XML_SUBSTITUTE_PEREF... + d c 2 + + * XML_SUBSTITUTE_BOTH: + * + * Both general and parameter entities need to be substituted. + + d XML_SUBSTITUTE_BOTH... + d c 3 + + d xmlStringDecodeEntities... + d pr * extproc('xmlStringDecodeEntities') xmlChar * + d ctxt value like(xmlParserCtxtPtr) + d str * value options(*string) const xmlChar * + d what value like(xmlCint) + d end value like(xmlChar) + d end2 value like(xmlChar) + d end3 value like(xmlChar) + + d xmlStringLenDecodeEntities... + d pr * extproc('xmlStringLenDecodeEntities')xmlChar * + d ctxt value like(xmlParserCtxtPtr) + d str * value options(*string) const xmlChar * + d len value like(xmlCint) + d what value like(xmlCint) + d end value like(xmlChar) + d end2 value like(xmlChar) + d end3 value like(xmlChar) + + * Generated by MACROS on top of parser.c c.f. PUSH_AND_POP. + + d nodePush pr extproc('nodePush') + d like(xmlCint) + d ctxt value like(xmlParserCtxtPtr) + d value value like(xmlNodePtr) + + d nodePop pr extproc('nodePop') + d like(xmlNodePtr) + d ctxt value like(xmlParserCtxtPtr) + + d inputPush pr extproc('inputPush') + d like(xmlCint) + d ctxt value like(xmlParserCtxtPtr) + d value value like(xmlParserInputPtr) + + d inputPop pr extproc('inputPop') + d like(xmlParserInputPtr) + d ctxt value like(xmlParserCtxtPtr) + + d namePop pr * extproc('namePop') const xmlChar * + d ctxt value like(xmlParserCtxtPtr) + + d namePush pr extproc('namePush') + d like(xmlCint) + d ctxt value like(xmlParserCtxtPtr) + d value * value options(*string) const xmlChar * + + * other commodities shared between parser.c and parserInternals. + + d xmlSkipBlankChars... + d pr extproc('xmlSkipBlankChars') + d like(xmlCint) + d ctxt value like(xmlParserCtxtPtr) + + d xmlStringCurrentChar... + d pr extproc('xmlStringCurrentChar') + d like(xmlCint) + d ctxt value like(xmlParserCtxtPtr) + d cur * value options(*string) const xmlChar * + d len * value int * + + d xmlParserHandlePEReference... + d pr extproc('xmlParserHandlePEReference') + d ctxt value like(xmlParserCtxtPtr) + + d xmlCheckLanguageID... + d pr extproc('xmlCheckLanguageID') + d like(xmlCint) + d lang * value options(*string) const xmlChar * + + * Really core function shared with HTML parser. + + d xmlCurrentChar pr extproc('xmlCurrentChar') + d like(xmlCint) + d ctxt value like(xmlParserCtxtPtr) + d len * value int * + + d xmlCopyCharMultiByte... + d pr extproc('xmlCopyCharMultiByte') + d like(xmlCint) + d out * value options(*string) xmlChar * + d val value like(xmlCint) + + d xmlCopyChar pr extproc('xmlCopyChar') + d like(xmlCint) + d len value like(xmlCint) + d out * value options(*string) xmlChar * + d val value like(xmlCint) + + d xmlNextChar pr extproc('xmlNextChar') + d ctxt value like(xmlParserCtxtPtr) + + d xmlParserInputShrink... + d pr extproc('xmlParserInputShrink') + d in value like(xmlParserInputPtr) + + /if defined(LIBXML_HTML_ENABLED) + + * Actually comes from the HTML parser but launched from the init stuff. + + d htmlInitAutoClose... + d pr extproc('htmlInitAutoClose') + + d htmlCreateFileParserCtxt... + d pr extproc('htmlCreateFileParserCtxt') + d like(htmlParserCtxtPtr) + d filename * value options(*string) const char * + d encoding * value options(*string) const char * + /endif + + * Specific function to keep track of entities references + * and used by the XSLT debugger. + + /if defined(LIBXML_LEGACY_ENABLED) + * xmlEntityReferenceFunc: + * @ent: the entity + * @firstNode: the fist node in the chunk + * @lastNode: the last nod in the chunk + * + * Callback function used when one needs to be able to track back the + * provenance of a chunk of nodes inherited from an entity replacement. + + d xmlEntityReferenceFunc... + d s * based(######typedef######) + d procptr + + d xmlSetEntityReferenceFunc... + d pr extproc('xmlSetEntityReferenceFunc') + d func value like(xmlEntityReferenceFunc) + + d xmlParseQuotedString... + d pr * extproc('xmlParseQuotedString') xmlChar * + d ctxt value like(xmlParserCtxtPtr) + + d xmlParseNamespace... + d pr extproc('xmlParseNamespace') + d ctxt value like(xmlParserCtxtPtr) + + d xmlNamespaceParseNSDef... + d pr * extproc('xmlNamespaceParseNSDef') xmlChar * + d ctxt value like(xmlParserCtxtPtr) + + d xmlScanName pr * extproc('xmlScanName') xmlChar * + d ctxt value like(xmlParserCtxtPtr) + + d xmlNamespaceParseNCName... + d pr * extproc('xmlNamespaceParseNCName') xmlChar * + d ctxt value like(xmlParserCtxtPtr) + + d xmlParserHandleReference... + d pr extproc('xmlParserHandleReference') + d ctxt value like(xmlParserCtxtPtr) + + d xmlNamespaceParseQName... + d pr * extproc('xmlNamespaceParseQName') xmlChar * + d ctxt value like(xmlParserCtxtPtr) + d prefix * xmlChar *(*) + + * Entities + + d xmlDecodeEntities... + d pr * extproc('xmlDecodeEntities') xmlChar * + d ctxt value like(xmlParserCtxtPtr) + d len value like(xmlCint) + d what value like(xmlCint) + d end value like(xmlChar) + d end2 value like(xmlChar) + d end3 value like(xmlChar) + + d xmlHandleEntity... + d pr extproc('xmlHandleEntity') + d ctxt value like(xmlParserCtxtPtr) + d entity value like(xmlEntityPtr) + /endif LIBXML_LEGACY_ENABLD + + /endif diff --git a/os400/libxmlrpg/pattern.rpgle b/os400/libxmlrpg/pattern.rpgle new file mode 100644 index 0000000..ef02301 --- /dev/null +++ b/os400/libxmlrpg/pattern.rpgle @@ -0,0 +1,130 @@ + * Summary: pattern expression handling + * Description: allows to compile and test pattern expressions for nodes + * either in a tree or based on a parser state. + * + * Copy: See Copyright for the status of this software. + * + * Author: Patrick Monnerat , DATASPHERE S.A. + + /if not defined(XML_PATTERN_H__) + /define XML_PATTERN_H__ + + /include "libxmlrpg/xmlversion" + + /if defined(LIBXML_PATTERN_ENABLED) + + /include "libxmlrpg/xmlTypesC" + /include "libxmlrpg/tree" + /include "libxmlrpg/dict" + + * xmlPattern: + * + * A compiled (XPath based) pattern to select nodes + + d xmlPatternPtr... + d s * based(######typedef######) + + * xmlPatternFlags: + * + * This is the set of options affecting the behaviour of pattern + * matching with this module + + d xmlPatternFlags... + d s based(######typedef######) + d like(xmlCenum) + d XML_PATTERN_DEFAULT... Simple pattern match + d c X'0000' + d XML_PATTERN_XPATH... Std XPath pattern + d c X'0001' + d XML_PATTERN_XSSEL... Schm sel XPth subset + d c X'0002' + d XML_PATTERN_XSFIELD... Schm fld XPth subset + d c X'0004' + + d xmlFreePattern pr extproc('xmlFreePattern') + d comp value like(xmlPatternPtr) + + d xmlFreePatternList... + d pr extproc('xmlFreePatternList') + d comp value like(xmlPatternPtr) + + d xmlPatterncompile... + d pr extproc('xmlPatterncompile') + d like(xmlPatternPtr) + d pattern * value options(*string) const xmlChar * + d dict * value xmlDict * + d flags value like(xmlCint) + d namespaces * const xmlChar *(*) + + d xmlPatternMatch... + d pr extproc('xmlPatternMatch') + d like(xmlCint) + d comp value like(xmlPatternPtr) + d node value like(xmlNodePtr) + + * streaming interfaces + + d xmlStreamCtxtPtr... + d s * based(######typedef######) + + d xmlPatternStreamable... + d pr extproc('xmlPatternStreamable') + d like(xmlCint) + d comp value like(xmlPatternPtr) + + d xmlPatternMaxDepth... + d pr extproc('xmlPatternMaxDepth') + d like(xmlCint) + d comp value like(xmlPatternPtr) + + d xmlPatternMinDepth... + d pr extproc('xmlPatternMinDepth') + d like(xmlCint) + d comp value like(xmlPatternPtr) + + d xmlPatternFromRoot... + d pr extproc('xmlPatternFromRoot') + d like(xmlCint) + d comp value like(xmlPatternPtr) + + d xmlPatternGetStreamCtxt... + d pr extproc('xmlPatternGetStreamCtxt') + d like(xmlStreamCtxtPtr) + d comp value like(xmlPatternPtr) + + d xmlFreeStreamCtxt... + d pr extproc('xmlFreeStreamCtxt') + d stream value like(xmlStreamCtxtPtr) + + d xmlStreamPushNode... + d pr extproc('xmlStreamPushNode') + d like(xmlCint) + d stream value like(xmlStreamCtxtPtr) + d name * value options(*string) const xmlChar * + d ns * value options(*string) const xmlChar * + d nodeType value like(xmlCint) + + d xmlStreamPush pr extproc('xmlStreamPush') + d like(xmlCint) + d stream value like(xmlStreamCtxtPtr) + d name * value options(*string) const xmlChar * + d ns * value options(*string) const xmlChar * + + d xmlStreamPushAttr... + d pr extproc('xmlStreamPushAttr') + d like(xmlCint) + d stream value like(xmlStreamCtxtPtr) + d name * value options(*string) const xmlChar * + d ns * value options(*string) const xmlChar * + + d xmlStreamPop pr extproc('xmlStreamPop') + d like(xmlCint) + d stream value like(xmlStreamCtxtPtr) + + d xmlStreamWantsAnyNode... + d pr extproc('xmlStreamWantsAnyNode') + d like(xmlCint) + d stream value like(xmlStreamCtxtPtr) + + /endif LIBXML_PATTERN_ENBLD + /endif XML_PATTERN_H__ diff --git a/os400/libxmlrpg/relaxng.rpgle b/os400/libxmlrpg/relaxng.rpgle new file mode 100644 index 0000000..15b8471 --- /dev/null +++ b/os400/libxmlrpg/relaxng.rpgle @@ -0,0 +1,310 @@ + * Summary: implementation of the Relax-NG validation + * Description: implementation of the Relax-NG validation + * + * Copy: See Copyright for the status of this software. + * + * Author: Patrick Monnerat , DATASPHERE S.A. + + /if not defined(XML_RELAX_NG__) + /define XML_RELAX_NG__ + + /include "libxmlrpg/xmlversion" + + /if defined(LIBXML_SCHEMAS_ENABLED) + + /include "libxmlrpg/xmlTypesC" + /include "libxmlrpg/hash" + /include "libxmlrpg/xmlstring" + + d xmlRelaxNGPtr s * based(######typedef######) + + * xmlRelaxNGValidityErrorFunc: + * @ctx: the validation context + * @msg: the message + * @...: extra arguments + * + * Signature of an error callback from a Relax-NG validation + + d xmlRelaxNGValidityErrorFunc... + d s * based(######typedef######) + d procptr + + * xmlRelaxNGValidityWarningFunc: + * @ctx: the validation context + * @msg: the message + * @...: extra arguments + * + * Signature of a warning callback from a Relax-NG validation + + d xmlRelaxNGValidityWarningFunc... + d s * based(######typedef######) + d procptr + + * A schemas validation context + + d xmlRelaxNGParserCtxtPtr... + d s * based(######typedef######) + + d xmlRelaxNGValidCtxtPtr... + d s * based(######typedef######) + + * xmlRelaxNGValidErr: + * + * List of possible Relax NG validation errors + + d xmlRelaxNGValidErr... + d s based(######typedef######) + d like(xmlCenum) + d XML_RELAXNG_OK... + d c 0 + d XML_RELAXNG_ERR_MEMORY... + d c 1 + d XML_RELAXNG_ERR_TYPE... + d c 2 + d XML_RELAXNG_ERR_TYPEVAL... + d c 3 + d XML_RELAXNG_ERR_DUPID... + d c 4 + d XML_RELAXNG_ERR_TYPECMP... + d c 5 + d XML_RELAXNG_ERR_NOSTATE... + d c 6 + d XML_RELAXNG_ERR_NODEFINE... + d c 7 + d XML_RELAXNG_ERR_LISTEXTRA... + d c 8 + d XML_RELAXNG_ERR_LISTEMPTY... + d c 9 + d XML_RELAXNG_ERR_INTERNODATA... + d c 10 + d XML_RELAXNG_ERR_INTERSEQ... + d c 11 + d XML_RELAXNG_ERR_INTEREXTRA... + d c 12 + d XML_RELAXNG_ERR_ELEMNAME... + d c 13 + d XML_RELAXNG_ERR_ATTRNAME... + d c 14 + d XML_RELAXNG_ERR_ELEMNONS... + d c 15 + d XML_RELAXNG_ERR_ATTRNONS... + d c 16 + d XML_RELAXNG_ERR_ELEMWRONGNS... + d c 17 + d XML_RELAXNG_ERR_ATTRWRONGNS... + d c 18 + d XML_RELAXNG_ERR_ELEMEXTRANS... + d c 19 + d XML_RELAXNG_ERR_ATTREXTRANS... + d c 20 + d XML_RELAXNG_ERR_ELEMNOTEMPTY... + d c 21 + d XML_RELAXNG_ERR_NOELEM... + d c 22 + d XML_RELAXNG_ERR_NOTELEM... + d c 23 + d XML_RELAXNG_ERR_ATTRVALID... + d c 24 + d XML_RELAXNG_ERR_CONTENTVALID... + d c 25 + d XML_RELAXNG_ERR_EXTRACONTENT... + d c 26 + d XML_RELAXNG_ERR_INVALIDATTR... + d c 27 + d XML_RELAXNG_ERR_DATAELEM... + d c 28 + d XML_RELAXNG_ERR_VALELEM... + d c 29 + d XML_RELAXNG_ERR_LISTELEM... + d c 30 + d XML_RELAXNG_ERR_DATATYPE... + d c 31 + d XML_RELAXNG_ERR_VALUE... + d c 32 + d XML_RELAXNG_ERR_LIST... + d c 33 + d XML_RELAXNG_ERR_NOGRAMMAR... + d c 34 + d XML_RELAXNG_ERR_EXTRADATA... + d c 35 + d XML_RELAXNG_ERR_LACKDATA... + d c 36 + d XML_RELAXNG_ERR_INTERNAL... + d c 37 + d XML_RELAXNG_ERR_ELEMWRONG... + d c 38 + d XML_RELAXNG_ERR_TEXTWRONG... + d c 39 + + * xmlRelaxNGParserFlags: + * + * List of possible Relax NG Parser flags + + d xmlRelaxNGParserFlag... + d s based(######typedef######) + d like(xmlCenum) + d XML_RELAXNGP_NONE... + d c 0 + d XML_RELAXNGP_FREE_DOC... + d c 1 + d XML_RELAXNGP_CRNG... + d c 2 + + d xmlRelaxNGInitTypes... + d pr extproc('xmlRelaxNGInitTypes') + d like(xmlCint) + + d xmlRelaxNGCleanupTypes... + d pr extproc('xmlRelaxNGCleanupTypes') + + + * Interfaces for parsing. + + d xmlRelaxNGNewParserCtxt... + d pr extproc('xmlRelaxNGNewParserCtxt') + d like(xmlRelaxNGParserCtxtPtr) + d URL * value options(*string) const char * + + d xmlRelaxNGNewMemParserCtxt... + d pr extproc('xmlRelaxNGNewMemParserCtxt') + d like(xmlRelaxNGParserCtxtPtr) + d buffer * value options(*string) const char * + d size value like(xmlCint) + + d xmlRelaxNGNewDocParserCtxt... + d pr extproc('xmlRelaxNGNewDocParserCtxt') + d like(xmlRelaxNGParserCtxtPtr) + d doc value like(xmlDocPtr) + + d xmlRelaxParserSetFlag... + d pr extproc('xmlRelaxParserSetFlag') + d like(xmlCint) + d ctxt value like(xmlRelaxNGParserCtxtPtr) + d flag value like(xmlCint) + + d xmlRelaxNGFreeParserCtxt... + d pr extproc('xmlRelaxNGFreeParserCtxt') + d ctxt value like(xmlRelaxNGParserCtxtPtr) + + d xmlRelaxNGSetParserErrors... + d pr extproc('xmlRelaxNGSetParserErrors') + d ctxt value like(xmlRelaxNGParserCtxtPtr) + d err value + d like(xmlRelaxNGValidityErrorFunc) + d warn value + d like(xmlRelaxNGValidityWarningFunc) + d ctx * value void * + + d xmlRelaxNGGetParserErrors... + d pr extproc('xmlRelaxNGGetParserErrors') + d like(xmlCint) + d ctxt value like(xmlRelaxNGParserCtxtPtr) + d err like(xmlRelaxNGValidityErrorFunc) + d warn like(xmlRelaxNGValidityWarningFunc) + d ctx * void *(*) + + d xmlRelaxNGSetParserStructuredErrors... + d pr extproc( + d 'xmlRelaxNGSetParserStructuredErrors' + d ) + d ctxt value like(xmlRelaxNGParserCtxtPtr) + d serror value like(xmlStructuredErrorFunc) + d ctx * value void * + + d xmlRelaxNGParse... + d pr extproc('xmlRelaxNGParse') + d like(xmlRelaxNGPtr) + d ctxt value like(xmlRelaxNGParserCtxtPtr) + + d xmlRelaxNGFree pr extproc('xmlRelaxNGFree') + d schema value like(xmlRelaxNGPtr) + + + /if defined(LIBXML_OUTPUT_ENABLED) + d xmlRelaxNGDump pr extproc('xmlRelaxNGDump') + d output * value FILE * + d schema value like(xmlRelaxNGPtr) + + d xmlRelaxNGDumpTree... + d pr extproc('xmlRelaxNGDumpTree') + d output * value FILE * + d schema value like(xmlRelaxNGPtr) + /endif LIBXML_OUTPUT_ENABLD + + * Interfaces for validating + + d xmlRelaxNGSetValidErrors... + d pr extproc('xmlRelaxNGSetValidErrors') + d ctxt value like(xmlRelaxNGValidCtxtPtr) + d err value + d like(xmlRelaxNGValidityErrorFunc) + d warn value + d like(xmlRelaxNGValidityWarningFunc) + d ctx * value void * + + d xmlRelaxNGGetValidErrors... + d pr extproc('xmlRelaxNGGetValidErrors') + d like(xmlCint) + d ctxt value like(xmlRelaxNGValidCtxtPtr) + d err like(xmlRelaxNGValidityErrorFunc) + d warn like(xmlRelaxNGValidityWarningFunc) + d ctx * value void * * + + d xmlRelaxNGSetValidStructuredErrors... + d pr extproc( + d 'xmlRelaxNGSetValidStructuredErrors') + d ctxt value like(xmlRelaxNGValidCtxtPtr) + d serror value like(xmlStructuredErrorFunc) + d ctx * value void * + + d xmlRelaxNGNewValidCtxt... + d pr extproc('xmlRelaxNGNewValidCtxt') + d like(xmlRelaxNGValidCtxtPtr) + d schema value like(xmlRelaxNGPtr) + + d xmlRelaxNGFreeValidCtxt... + d pr extproc('xmlRelaxNGFreeValidCtxt') + d ctxt value like(xmlRelaxNGValidCtxtPtr) + + d xmlRelaxNGValidateDoc... + d pr extproc('xmlRelaxNGValidateDoc') + d like(xmlCint) + d ctxt value like(xmlRelaxNGValidCtxtPtr) + d doc value like(xmlDocPtr) + + * Interfaces for progressive validation when possible + + d xmlRelaxNGValidatePushElement... + d pr extproc( + d 'xmlRelaxNGValidatePushElement') + d like(xmlCint) + d ctxt value like(xmlRelaxNGValidCtxtPtr) + d doc value like(xmlDocPtr) + d elem value like(xmlNodePtr) + + d xmlRelaxNGValidatePushCData... + d pr extproc( + d 'xmlRelaxNGValidatePushCData') + d like(xmlCint) + d ctxt value like(xmlRelaxNGValidCtxtPtr) + d data * value options(*string) const xmlChar * + d len value like(xmlCint) + + d xmlRelaxNGValidatePopElement... + d pr extproc( + d 'xmlRelaxNGValidatePopElement') + d like(xmlCint) + d ctxt value like(xmlRelaxNGValidCtxtPtr) + d doc value like(xmlDocPtr) + d elem value like(xmlNodePtr) + + d xmlRelaxNGValidateFullElement... + d pr extproc( + d 'xmlRelaxNGValidateFullElement') + d like(xmlCint) + d ctxt value like(xmlRelaxNGValidCtxtPtr) + d doc value like(xmlDocPtr) + d elem value like(xmlNodePtr) + + /endif LIBXML_SCHEMAS_ENBLD + /endif XML_RELAX_NG__ diff --git a/os400/libxmlrpg/schemasInternals.rpgle b/os400/libxmlrpg/schemasInternals.rpgle new file mode 100644 index 0000000..8d3013e --- /dev/null +++ b/os400/libxmlrpg/schemasInternals.rpgle @@ -0,0 +1,1142 @@ + * Summary: internal interfaces for XML Schemas + * Description: internal interfaces for the XML Schemas handling + * and schema validity checking + * The Schemas development is a Work In Progress. + * Some of those interfaces are not garanteed to be API or + * ABI stable ! + * + * Copy: See Copyright for the status of this software. + * + * Author: Patrick Monnerat , DATASPHERE S.A. + + /if not defined(XML_SCHEMA_INTERNALS_H__) + /define XML_SCHEMA_INTERNALS_H__ + + /include "libxmlrpg/xmlversion" + + /if defined(LIBXML_SCHEMAS_ENABLED) + + /include "libxmlrpg/xmlTypesC" + /include "libxmlrpg/xmlregexp" + /include "libxmlrpg/hash" + /include "libxmlrpg/dict" + + d xmlSchemaValType... + d s based(######typedef######) + d like(xmlCenum) + d XML_SCHEMAS_UNKNOWN... + d c 0 + d XML_SCHEMAS_STRING... + d c 1 + d XML_SCHEMAS_NORMSTRING... + d c 2 + d XML_SCHEMAS_DECIMAL... + d c 3 + d XML_SCHEMAS_TIME... + d c 4 + d XML_SCHEMAS_GDAY... + d c 5 + d XML_SCHEMAS_GMONTH... + d c 6 + d XML_SCHEMAS_GMONTHDAY... + d c 7 + d XML_SCHEMAS_GYEAR... + d c 8 + d XML_SCHEMAS_GYEARMONTH... + d c 9 + d XML_SCHEMAS_DATE... + d c 10 + d XML_SCHEMAS_DATETIME... + d c 11 + d XML_SCHEMAS_DURATION... + d c 12 + d XML_SCHEMAS_FLOAT... + d c 13 + d XML_SCHEMAS_DOUBLE... + d c 14 + d XML_SCHEMAS_BOOLEAN... + d c 15 + d XML_SCHEMAS_TOKEN... + d c 16 + d XML_SCHEMAS_LANGUAGE... + d c 17 + d XML_SCHEMAS_NMTOKEN... + d c 18 + d XML_SCHEMAS_NMTOKENS... + d c 19 + d XML_SCHEMAS_NAME... + d c 20 + d XML_SCHEMAS_QNAME... + d c 21 + d XML_SCHEMAS_NCNAME... + d c 22 + d XML_SCHEMAS_ID... + d c 23 + d XML_SCHEMAS_IDREF... + d c 24 + d XML_SCHEMAS_IDREFS... + d c 25 + d XML_SCHEMAS_ENTITY... + d c 26 + d XML_SCHEMAS_ENTITIES... + d c 27 + d XML_SCHEMAS_NOTATION... + d c 28 + d XML_SCHEMAS_ANYURI... + d c 29 + d XML_SCHEMAS_INTEGER... + d c 30 + d XML_SCHEMAS_NPINTEGER... + d c 31 + d XML_SCHEMAS_NINTEGER... + d c 32 + d XML_SCHEMAS_NNINTEGER... + d c 33 + d XML_SCHEMAS_PINTEGER... + d c 34 + d XML_SCHEMAS_INT... + d c 35 + d XML_SCHEMAS_UINT... + d c 36 + d XML_SCHEMAS_LONG... + d c 37 + d XML_SCHEMAS_ULONG... + d c 38 + d XML_SCHEMAS_SHORT... + d c 39 + d XML_SCHEMAS_USHORT... + d c 40 + d XML_SCHEMAS_BYTE... + d c 41 + d XML_SCHEMAS_UBYTE... + d c 42 + d XML_SCHEMAS_HEXBINARY... + d c 43 + d XML_SCHEMAS_BASE64BINARY... + d c 44 + d XML_SCHEMAS_ANYTYPE... + d c 45 + d XML_SCHEMAS_ANYSIMPLETYPE... + d c 46 + + * XML Schemas defines multiple type of types. + + d xmlSchemaTypeType... + d s based(######typedef######) + d like(xmlCenum) + d XML_SCHEMA_TYPE_BASIC... A builtin datatype + d c 1 + d XML_SCHEMA_TYPE_ANY... + d c 2 + d XML_SCHEMA_TYPE_FACET... + d c 3 + d XML_SCHEMA_TYPE_SIMPLE... + d c 4 + d XML_SCHEMA_TYPE_COMPLEX... + d c 5 + d XML_SCHEMA_TYPE_SEQUENCE... + d c 6 + d XML_SCHEMA_TYPE_CHOICE... + d c 7 + d XML_SCHEMA_TYPE_ALL... + d c 8 + d XML_SCHEMA_TYPE_SIMPLE_CONTENT... + d c 9 + d XML_SCHEMA_TYPE_COMPLEX_CONTENT... + d c 10 + d XML_SCHEMA_TYPE_UR... + d c 11 + d XML_SCHEMA_TYPE_RESTRICTION... + d c 12 + d XML_SCHEMA_TYPE_EXTENSION... + d c 13 + d XML_SCHEMA_TYPE_ELEMENT... + d c 14 + d XML_SCHEMA_TYPE_ATTRIBUTE... + d c 15 + d XML_SCHEMA_TYPE_ATTRIBUTEGROUP... + d c 16 + d XML_SCHEMA_TYPE_GROUP... + d c 17 + d XML_SCHEMA_TYPE_NOTATION... + d c 18 + d XML_SCHEMA_TYPE_LIST... + d c 19 + d XML_SCHEMA_TYPE_UNION... + d c 20 + d XML_SCHEMA_TYPE_ANY_ATTRIBUTE... + d c 21 + d XML_SCHEMA_TYPE_IDC_UNIQUE... + d c 22 + d XML_SCHEMA_TYPE_IDC_KEY... + d c 23 + d XML_SCHEMA_TYPE_IDC_KEYREF... + d c 24 + d XML_SCHEMA_TYPE_PARTICLE... + d c 25 + d XML_SCHEMA_TYPE_ATTRIBUTE_USE... + d c 26 + d XML_SCHEMA_FACET_MININCLUSIVE... + d c 1000 + d XML_SCHEMA_FACET_MINEXCLUSIVE... + d c 1001 + d XML_SCHEMA_FACET_MAXINCLUSIVE... + d c 1002 + d XML_SCHEMA_FACET_MAXEXCLUSIVE... + d c 1003 + d XML_SCHEMA_FACET_TOTALDIGITS... + d c 1004 + d XML_SCHEMA_FACET_FRACTIONDIGITS... + d c 1005 + d XML_SCHEMA_FACET_PATTERN... + d c 1006 + d XML_SCHEMA_FACET_ENUMERATION... + d c 1007 + d XML_SCHEMA_FACET_WHITESPACE... + d c 1008 + d XML_SCHEMA_FACET_LENGTH... + d c 1009 + d XML_SCHEMA_FACET_MAXLENGTH... + d c 1010 + d XML_SCHEMA_FACET_MINLENGTH... + d c 1011 + d XML_SCHEMA_EXTRA_QNAMEREF... + d c 2000 + d XML_SCHEMA_EXTRA_ATTR_USE_PROHIB... + d c 2001 + + d xmlSchemaContentType... + d s based(######typedef######) + d like(xmlCenum) + d XML_SCHEMA_CONTENT_UNKNOWN... + d c 0 + d XML_SCHEMA_CONTENT_EMPTY... + d c 1 + d XML_SCHEMA_CONTENT_ELEMENTS... + d c 2 + d XML_SCHEMA_CONTENT_MIXED... + d c 3 + d XML_SCHEMA_CONTENT_SIMPLE... + d c 4 + d XML_SCHEMA_CONTENT_MIXED_OR_ELEMENTS... Obsolete + d c 5 + d XML_SCHEMA_CONTENT_BASIC... + d c 6 + d XML_SCHEMA_CONTENT_ANY... + d c 7 + + d xmlSchemaValPtr... + d s * based(######typedef######) + + d xmlSchemaTypePtr... + d s * based(######typedef######) + + d xmlSchemaFacetPtr... + d s * based(######typedef######) + + * Annotation + + d xmlSchemaAnnotPtr... + d s * based(######typedef######) + + d xmlSchemaAnnot ds based(xmlSchemaAnnotPtr) + d align qualified + d next like(xmlSchemaAnnotPtr) + d content like(xmlNodePtr) The annotation + + * XML_SCHEMAS_ANYATTR_SKIP: + * + * Skip unknown attribute from validation + * Obsolete, not used anymore. + + d XML_SCHEMAS_ANYATTR_SKIP... + d c 1 + + * XML_SCHEMAS_ANYATTR_LAX: + * + * Ignore validation non definition on attributes + * Obsolete, not used anymore. + + d XML_SCHEMAS_ANYATTR_LAX... + d c 2 + + * XML_SCHEMAS_ANYATTR_STRICT: + * + * Apply strict validation rules on attributes + * Obsolete, not used anymore. + + d XML_SCHEMAS_ANYATTR_STRICT... + d c 3 + + * XML_SCHEMAS_ANY_SKIP: + * + * Skip unknown attribute from validation + + d XML_SCHEMAS_ANY_SKIP... + d c 1 + + * XML_SCHEMAS_ANY_LAX: + * + * Used by wildcards. + * Validate if type found, don't worry if not found + + d XML_SCHEMAS_ANY_LAX... + d c 2 + + * XML_SCHEMAS_ANY_STRICT: + * + * Used by wildcards. + * Apply strict validation rules + + d XML_SCHEMAS_ANY_STRICT... + d c 3 + + * XML_SCHEMAS_ATTR_USE_PROHIBITED: + * + * Used by wildcards. + * The attribute is prohibited. + + d XML_SCHEMAS_ATTR_USE_PROHIBITED... + d c 0 + + * XML_SCHEMAS_ATTR_USE_REQUIRED: + * + * The attribute is required. + + d XML_SCHEMAS_ATTR_USE_REQUIRED... + d c 1 + + * XML_SCHEMAS_ATTR_USE_OPTIONAL: + * + * The attribute is optional. + + d XML_SCHEMAS_ATTR_USE_OPTIONAL... + d c 2 + + * XML_SCHEMAS_ATTR_GLOBAL: + * + * allow elements in no namespace + + d XML_SCHEMAS_ATTR_GLOBAL... + d c X'0001' + + * XML_SCHEMAS_ATTR_NSDEFAULT: + * + * allow elements in no namespace + + d XML_SCHEMAS_ATTR_NSDEFAULT... + d c X'0080' + + * XML_SCHEMAS_ATTR_INTERNAL_RESOLVED: + * + * this is set when the "type" and "ref" references + * have been resolved. + + d XML_SCHEMAS_ATTR_INTERNAL_RESOLVED... + d c X'0100' + + * XML_SCHEMAS_ATTR_FIXED: + * + * the attribute has a fixed value + + d XML_SCHEMAS_ATTR_FIXED... + d c X'0200' + + * xmlSchemaAttribute: + * An attribute definition. + + d xmlSchemaAttributePtr... + d s * based(######typedef######) + + d xmlSchemaAttribute... + d ds based(xmlSchemaAttributePtr) + d align qualified + d type like(xmlSchemaTypeType) + d next like(xmlSchemaAttributePtr) Next attribute + d name * const xmlChar * + d id * const xmlChar * + d ref * const xmlChar * + d refNs * const xmlChar * + d typeName * const xmlChar * + d typeNs * const xmlChar * + d annot like(xmlSchemaAnnotPtr) + * + d base like(xmlSchemaTypePtr) Deprecated + d occurs like(xmlCint) Deprecated + d defValue * const xmlChar * + d subtypes like(xmlSchemaTypePtr) The type definition + d node like(xmlNodePtr) + d targetNamespace... const xmlChar * + d * + d flags like(xmlCint) + d refPrefix * const xmlChar * + d defVal like(xmlSchemaValPtr) Compiled constraint + d refDecl like(xmlSchemaAttributePtr) Deprecated + + * xmlSchemaAttributeLink: + * Used to build a list of attribute uses on complexType definitions. + * WARNING: Deprecated; not used. + + d xmlSchemaAttributeLinkPtr... + d s * based(######typedef######) + + d xmlSchemaAttributeLink... + d ds based(xmlSchemaAttributeLinkPtr) + d align qualified + d next like(xmlSchemaAttributeLinkPtr) The next link + d attr like(xmlSchemaAttributePtr) The linked attribute + + * XML_SCHEMAS_WILDCARD_COMPLETE: + * + * If the wildcard is complete. + + d XML_SCHEMAS_WILDCARD_COMPLETE... + d c X'0001' + + * xmlSchemaCharValueLink: + * Used to build a list of namespaces on wildcards. + + d xmlSchemaWildcardNsPtr... + d s * based(######typedef######) + + d xmlSchemaWildcardNs... + d ds based(xmlSchemaWildcardNsPtr) + d align qualified + d next like(xmlSchemaWildcardNsPtr) The next link + d value * const xmlChar * + + * xmlSchemaWildcard. + * A wildcard. + + d xmlSchemaWildcardPtr... + d s * based(######typedef######) + + d xmlSchemaWildcard... + d ds based(xmlSchemaWildcardPtr) + d align qualified + d type like(xmlSchemaTypeType) Kind of type + d id * const xmlChar * + d annot like(xmlSchemaAnnotPtr) + d node like(xmlNodePtr) + d minOccurs like(xmlCint) Deprecated; not used + d maxOccurs like(xmlCint) Deprecated; not used + d processContents... + d like(xmlCint) + d any like(xmlCint) Ns constraint ##any? + d nsSet like(xmlSchemaWildcardNsPtr) Allowed namspce list + d negNsSet like(xmlSchemaWildcardNsPtr) Negated namespace + d flags like(xmlCint) Deprecated; not used + + * XML_SCHEMAS_ATTRGROUP_WILDCARD_BUILDED: + * + * The attribute wildcard has been already builded. + + d XML_SCHEMAS_ATTRGROUP_WILDCARD_BUILDED... + d c X'0001' + + * XML_SCHEMAS_ATTRGROUP_GLOBAL: + * + * The attribute wildcard has been already builded. + + d XML_SCHEMAS_ATTRGROUP_GLOBAL... + d c X'0002' + + * XML_SCHEMAS_ATTRGROUP_MARKED: + * + * Marks the attr group as marked; used for circular checks. + + d XML_SCHEMAS_ATTRGROUP_MARKED... + d c X'0004' + + * XML_SCHEMAS_ATTRGROUP_REDEFINED: + * + * The attr group was redefined. + + d XML_SCHEMAS_ATTRGROUP_REDEFINED... + d c X'0008' + + * XML_SCHEMAS_ATTRGROUP_HAS_REFS: + * + * Whether this attr. group contains attr. group references. + + d XML_SCHEMAS_ATTRGROUP_HAS_REFS... + d c X'0010' + + * An attribute group definition. + * + * xmlSchemaAttribute and xmlSchemaAttributeGroup start of structures + * must be kept similar + + d xmlSchemaAttributeGroupPtr... + d s * based(######typedef######) + + d xmlSchemaAttributeGroup... + d ds based(xmlSchemaAttributeGroupPtr) + d align qualified + d type like(xmlSchemaTypeType) Kind of type + d next like(xmlSchemaAttributePtr) Next attribute + d name * const xmlChar * + d id * const xmlChar * + d ref * const xmlChar * + d refNs * const xmlChar * + d annot like(xmlSchemaAnnotPtr) + * + d attributes like(xmlSchemaAttributePtr) Deprecated; not used + d node like(xmlNodePtr) + d flags like(xmlCint) + d attributeWildcard... + d like(xmlSchemaWildcardPtr) + d refPrefix * const xmlChar * + d refItem like(xmlSchemaAttributeGroupPtr) Deprecated; not used + d targetNamespace... + d * const xmlChar * + d attrUses * void * + + * xmlSchemaTypeLink: + * Used to build a list of types (e.g. member types of + * simpleType with variety "union"). + + d xmlSchemaTypeLinkPtr... + d s * based(######typedef######) + + d xmlSchemaTypeLink... + d ds based(xmlSchemaTypeLinkPtr) + d align qualified + d next like(xmlSchemaTypeLinkPtr) Next type link + d type like(xmlSchemaTypePtr) Linked type + + * xmlSchemaFacetLink: + * Used to build a list of facets. + + d xmlSchemaFacetLinkPtr... + d s * based(######typedef######) + + d xmlSchemaFacetLink... + d ds based(xmlSchemaFacetLinkPtr) + d align qualified + d next like(xmlSchemaFacetLinkPtr) Next facet link + d facet like(xmlSchemaFacetPtr) Linked facet + + * XML_SCHEMAS_TYPE_MIXED: + * + * the element content type is mixed + + d XML_SCHEMAS_TYPE_MIXED... + d c X'00000001' + + * XML_SCHEMAS_TYPE_DERIVATION_METHOD_EXTENSION: + * + * the simple or complex type has a derivation method of "extension". + + d XML_SCHEMAS_TYPE_DERIVATION_METHOD_EXTENSION... + d c X'00000002' + + * XML_SCHEMAS_TYPE_DERIVATION_METHOD_RESTRICTION: + * + * the simple or complex type has a derivation method of "restriction". + + d XML_SCHEMAS_TYPE_DERIVATION_METHOD_RESTRICTION... + d c X'00000004' + + * XML_SCHEMAS_TYPE_GLOBAL: + * + * the type is global + + d XML_SCHEMAS_TYPE_GLOBAL... + d c X'00000008' + + * XML_SCHEMAS_TYPE_OWNED_ATTR_WILDCARD: + * + * the complexType owns an attribute wildcard, i.e. + * it can be freed by the complexType + + d XML_SCHEMAS_TYPE_OWNED_ATTR_WILDCARD... Obsolete. + d c X'00000010' + + * XML_SCHEMAS_TYPE_VARIETY_ABSENT: + * + * the simpleType has a variety of "absent". + * TODO: Actually not necessary :-/, since if + * none of the variety flags occur then it's + * automatically absent. + + d XML_SCHEMAS_TYPE_VARIETY_ABSENT... + d c X'00000020' + + * XML_SCHEMAS_TYPE_VARIETY_LIST: + * + * the simpleType has a variety of "list". + + d XML_SCHEMAS_TYPE_VARIETY_LIST... + d c X'00000040' + + * XML_SCHEMAS_TYPE_VARIETY_UNION: + * + * the simpleType has a variety of "union". + + d XML_SCHEMAS_TYPE_VARIETY_UNION... + d c X'00000080' + + * XML_SCHEMAS_TYPE_VARIETY_ATOMIC: + * + * the simpleType has a variety of "union". + + d XML_SCHEMAS_TYPE_VARIETY_ATOMIC... + d c X'00000100' + + * XML_SCHEMAS_TYPE_FINAL_EXTENSION: + * + * the complexType has a final of "extension". + + d XML_SCHEMAS_TYPE_FINAL_EXTENSION... + d c X'00000200' + + * XML_SCHEMAS_TYPE_FINAL_RESTRICTION: + * + * the simpleType/complexType has a final of "restriction". + + d XML_SCHEMAS_TYPE_FINAL_RESTRICTION... + d c X'00000400' + + * XML_SCHEMAS_TYPE_FINAL_LIST: + * + * the simpleType has a final of "list". + + d XML_SCHEMAS_TYPE_FINAL_LIST... + d c X'00000800' + + * XML_SCHEMAS_TYPE_FINAL_UNION: + * + * the simpleType has a final of "union". + + d XML_SCHEMAS_TYPE_FINAL_UNION... + d c X'00001000' + + * XML_SCHEMAS_TYPE_FINAL_DEFAULT: + * + * the simpleType has a final of "default". + + d XML_SCHEMAS_TYPE_FINAL_DEFAULT... + d c X'00002000' + + * XML_SCHEMAS_TYPE_BUILTIN_PRIMITIVE: + * + * Marks the item as a builtin primitive. + + d XML_SCHEMAS_TYPE_BUILTIN_PRIMITIVE... + d c X'00004000' + + * XML_SCHEMAS_TYPE_MARKED: + * + * Marks the item as marked; used for circular checks. + + d XML_SCHEMAS_TYPE_MARKED... + d c X'00010000' + + * XML_SCHEMAS_TYPE_BLOCK_DEFAULT: + * + * the complexType did not specify 'block' so use the default of the + * item. + + d XML_SCHEMAS_TYPE_BLOCK_DEFAULT... + d c X'00020000' + + * XML_SCHEMAS_TYPE_BLOCK_EXTENSION: + * + * the complexType has a 'block' of "extension". + + d XML_SCHEMAS_TYPE_BLOCK_EXTENSION... + d c X'00040000' + + * XML_SCHEMAS_TYPE_BLOCK_RESTRICTION: + * + * the complexType has a 'block' of "restriction". + + d XML_SCHEMAS_TYPE_BLOCK_RESTRICTION... + d c X'00080000' + + * XML_SCHEMAS_TYPE_ABSTRACT: + * + * the simple/complexType is abstract. + + d XML_SCHEMAS_TYPE_ABSTRACT... + d c X'00100000' + + * XML_SCHEMAS_TYPE_FACETSNEEDVALUE: + * + * indicates if the facets need a computed value + + d XML_SCHEMAS_TYPE_FACETSNEEDVALUE... + d c X'00200000' + + * XML_SCHEMAS_TYPE_INTERNAL_RESOLVED: + * + * indicates that the type was typefixed + + d XML_SCHEMAS_TYPE_INTERNAL_RESOLVED... + d c X'00400000' + + * XML_SCHEMAS_TYPE_INTERNAL_INVALID: + * + * indicates that the type is invalid + + d XML_SCHEMAS_TYPE_INTERNAL_INVALID... + d c X'00800000' + + * XML_SCHEMAS_TYPE_WHITESPACE_PRESERVE: + * + * a whitespace-facet value of "preserve" + + d XML_SCHEMAS_TYPE_WHITESPACE_PRESERVE... + d c X'01000000' + + * XML_SCHEMAS_TYPE_WHITESPACE_REPLACE: + * + * a whitespace-facet value of "replace" + + d XML_SCHEMAS_TYPE_WHITESPACE_REPLACE... + d c X'02000000' + + * XML_SCHEMAS_TYPE_WHITESPACE_COLLAPSE: + * + * a whitespace-facet value of "collapse" + + d XML_SCHEMAS_TYPE_WHITESPACE_COLLAPSE... + d c X'04000000' + + * XML_SCHEMAS_TYPE_HAS_FACETS: + * + * has facets + + d XML_SCHEMAS_TYPE_HAS_FACETS... + d c X'08000000' + + * XML_SCHEMAS_TYPE_NORMVALUENEEDED: + * + * indicates if the facets (pattern) need a normalized value + + d XML_SCHEMAS_TYPE_NORMVALUENEEDED... + d c X'10000000' + + * XML_SCHEMAS_TYPE_FIXUP_1: + * + * First stage of fixup was done. + + d XML_SCHEMAS_TYPE_FIXUP_1... + d c X'20000000' + + * XML_SCHEMAS_TYPE_REDEFINED: + * + * The type was redefined. + + d XML_SCHEMAS_TYPE_REDEFINED... + d c X'40000000' + + /if defined(DISABLED) + * XML_SCHEMAS_TYPE_REDEFINING: + * + * The type redefines an other type. + + d XML_SCHEMAS_TYPE_REDEFINING... + d c X'80000000' + /endif + + * _xmlSchemaType: + * + * Schemas type definition. + + d xmlSchemaType... + d ds based(xmlSchemaTypePtr) + d align qualified + d type like(xmlSchemaTypeType) Kind of type + d next like(xmlSchemaTypePtr) Next type + d name * const xmlChar * + d id * const xmlChar * + d ref * const xmlChar * + d refNs * const xmlChar * + d annot like(xmlSchemaAnnotPtr) + d subtypes like(xmlSchemaTypePtr) + d attributes like(xmlSchemaAttributePtr) Deprecated; not used + d node like(xmlNodePtr) + d minOccurs like(xmlCint) Deprecated; not used + d maxOccurs like(xmlCint) Deprecated; not used + * + d flags like(xmlCint) + d contentType like(xmlSchemaContentType) + d base * const xmlChar * + d baseNs * const xmlChar * + d baseType like(xmlSchemaTypePtr) Base type component + d facets like(xmlSchemaFacetPtr) Local facets + d redef like(xmlSchemaTypePtr) Deprecated; not used + d recurse like(xmlCint) Obsolete + d attributeUses like(xmlSchemaAttributeLinkPtr) Deprecated; not used + d attributeWildcard... + d like(xmlSchemaWildcardPtr) + d builtInType like(xmlCint) Built-in types type + d memberTypes like(xmlSchemaTypeLinkPtr) Union member-types + d facetSet like(xmlSchemaFacetLinkPtr) All facets + d refPrefix * const xmlChar * + d contentTypeDef... + d like(xmlSchemaTypePtr) + d contModel like(xmlRegexpPtr) Content model autom. + d targetNamespace... + d * const xmlChar * + d attrUses * void * + + * xmlSchemaElement: + * An element definition. + * + * xmlSchemaType, xmlSchemaFacet and xmlSchemaElement start of + * structures must be kept similar + + * XML_SCHEMAS_ELEM_NILLABLE: + * + * the element is nillable + + d XML_SCHEMAS_ELEM_NILLABLE... + d c X'00000001' + + * XML_SCHEMAS_ELEM_GLOBAL: + * + * the element is global + + d XML_SCHEMAS_ELEM_GLOBAL... + d c X'00000002' + + * XML_SCHEMAS_ELEM_DEFAULT: + * + * the element has a default value + + d XML_SCHEMAS_ELEM_DEFAULT... + d c X'00000004' + + * XML_SCHEMAS_ELEM_FIXED: + * + * the element has a fixed value + + d XML_SCHEMAS_ELEM_FIXED... + d c X'00000008' + + * XML_SCHEMAS_ELEM_ABSTRACT: + * + * the element is abstract + + d XML_SCHEMAS_ELEM_ABSTRACT... + d c X'00000010' + + * XML_SCHEMAS_ELEM_TOPLEVEL: + * + * the element is top level + * obsolete: use XML_SCHEMAS_ELEM_GLOBAL instead + + d XML_SCHEMAS_ELEM_TOPLEVEL... + d c X'00000020' + + * XML_SCHEMAS_ELEM_REF: + * + * the element is a reference to a type + + d XML_SCHEMAS_ELEM_REF... + d c X'00000040' + + * XML_SCHEMAS_ELEM_NSDEFAULT: + * + * allow elements in no namespace + * Obsolete, not used anymore. + + d XML_SCHEMAS_ELEM_NSDEFAULT... + d c X'00000080' + + * XML_SCHEMAS_ELEM_INTERNAL_RESOLVED: + * + * this is set when "type", "ref", "substitutionGroup" + * references have been resolved. + + d XML_SCHEMAS_ELEM_INTERNAL_RESOLVED... + d c X'00000100' + + * XML_SCHEMAS_ELEM_CIRCULAR: + * + * a helper flag for the search of circular references. + + d XML_SCHEMAS_ELEM_CIRCULAR... + d c X'00000200' + + * XML_SCHEMAS_ELEM_BLOCK_ABSENT: + * + * the "block" attribute is absent + + d XML_SCHEMAS_ELEM_BLOCK_ABSENT... + d c X'00000400' + + * XML_SCHEMAS_ELEM_BLOCK_EXTENSION: + * + * disallowed substitutions are absent + + d XML_SCHEMAS_ELEM_BLOCK_EXTENSION... + d c X'00000800' + + * XML_SCHEMAS_ELEM_BLOCK_RESTRICTION: + * + * disallowed substitutions: "restriction" + + d XML_SCHEMAS_ELEM_BLOCK_RESTRICTION... + d c X'00001000' + + * XML_SCHEMAS_ELEM_BLOCK_SUBSTITUTION: + * + * disallowed substitutions: "substituion" + + d XML_SCHEMAS_ELEM_BLOCK_SUBSTITUTION... + d c X'00002000' + + * XML_SCHEMAS_ELEM_FINAL_ABSENT: + * + * substitution group exclusions are absent + + d XML_SCHEMAS_ELEM_FINAL_ABSENT... + d c X'00004000' + + * XML_SCHEMAS_ELEM_FINAL_EXTENSION: + * + * substitution group exclusions: "extension" + + d XML_SCHEMAS_ELEM_FINAL_EXTENSION... + d c X'00008000' + + * XML_SCHEMAS_ELEM_FINAL_RESTRICTION: + * + * substitution group exclusions: "restriction" + + d XML_SCHEMAS_ELEM_FINAL_RESTRICTION... + d c X'00010000' + + * XML_SCHEMAS_ELEM_SUBST_GROUP_HEAD: + * + * the declaration is a substitution group head + + d XML_SCHEMAS_ELEM_SUBST_GROUP_HEAD... + d c X'00020000' + + * XML_SCHEMAS_ELEM_INTERNAL_CHECKED: + * + * this is set when the elem decl has been checked against + * all constraints + + d XML_SCHEMAS_ELEM_INTERNAL_CHECKED... + d c X'00040000' + + d xmlSchemaElementPtr... + d s * based(######typedef######) + + d xmlSchemaElement... + d ds based(xmlSchemaElementPtr) + d align qualified + d type like(xmlSchemaTypeType) Kind of type + d next like(xmlSchemaElementPtr) Not used ? + d name * const xmlChar * + d id * const xmlChar * + d ref * const xmlChar * + d refNs * const xmlChar * + d annot like(xmlSchemaAnnotPtr) + d subtypes like(xmlSchemaTypePtr) + d attributes like(xmlSchemaAttributePtr) Deprecated; not used + d node like(xmlNodePtr) + d minOccurs like(xmlCint) Deprecated; not used + d maxOccurs like(xmlCint) Deprecated; not used + * + d flags like(xmlCint) + d targetNamespace... + d * const xmlChar * + d namedType * const xmlChar * + d namedTypeNs * const xmlChar * + d substGroup * const xmlChar * + d substGroupNs * const xmlChar * + d scope * const xmlChar * + d value * const xmlChar * + d refDecl like(xmlSchemaElementPtr) + d contModel like(xmlRegexpPtr) + d contentType like(xmlSchemaContentType) + d refPrefix * const xmlChar * + d devVal like(xmlSchemaValPtr) Comp val constraint + d idcs * void * + + * XML_SCHEMAS_FACET_UNKNOWN: + * + * unknown facet handling + + d XML_SCHEMAS_FACET_UNKNOWN... + d c 0 + + * XML_SCHEMAS_FACET_PRESERVE: + * + * preserve the type of the facet + + d XML_SCHEMAS_FACET_PRESERVE... + d c 1 + + * XML_SCHEMAS_FACET_REPLACE: + * + * replace the type of the facet + + d XML_SCHEMAS_FACET_REPLACE... + d c 2 + + * XML_SCHEMAS_FACET_COLLAPSE: + * + * collapse the types of the facet + + d XML_SCHEMAS_FACET_COLLAPSE... + d c 3 + + * A facet definition. + + d xmlSchemaFacet... + d ds based(xmlSchemaFacetPtr) + d align qualified + d type like(xmlSchemaTypeType) Kind of type + d next like(xmlSchemaFacetPtr) Next type in seq. + d value * const xmlChar * + d id * const xmlChar * + d annot like(xmlSchemaAnnotPtr) + d node like(xmlNodePtr) + d fixed like(xmlCint) _FACET_PRESERVE, etc + d whitespace like(xmlCint) + d val like(xmlSchemaValPtr) Compiled value + d regexp like(xmlRegexpPtr) Regexp for patterns + + * A notation definition. + + d xmlSchemaNotationPtr... + d s * based(######typedef######) + + d xmlSchemaNotation... + d ds based(xmlSchemaNotationPtr) + d align qualified + d type like(xmlSchemaTypeType) Kind of type + d name * const xmlChar * + d annot like(xmlSchemaAnnotPtr) + d identifier * const xmlChar * + d targetNamespace... + d * const xmlChar * + + * TODO: Actually all those flags used for the schema should sit + * on the schema parser context, since they are used only + * during parsing an XML schema document, and not available + * on the component level as per spec. + + * XML_SCHEMAS_QUALIF_ELEM: + * + * Reflects elementFormDefault == qualified in + * an XML schema document. + + d XML_SCHEMAS_QUALIF_ELEM... + d c X'00000001' + + * XML_SCHEMAS_QUALIF_ATTR: + * + * Reflects attributeFormDefault == qualified in + * an XML schema document. + + d XML_SCHEMAS_QUALIF_ATTR... + d c X'00000002' + + * XML_SCHEMAS_FINAL_DEFAULT_EXTENSION: + * + * the schema has "extension" in the set of finalDefault. + + d XML_SCHEMAS_FINAL_DEFAULT_EXTENSION... + d c X'00000004' + + * XML_SCHEMAS_FINAL_DEFAULT_RESTRICTION: + * + * the schema has "restriction" in the set of finalDefault. + + d XML_SCHEMAS_FINAL_DEFAULT_RESTRICTION... + d c X'00000008' + + * XML_SCHEMAS_FINAL_DEFAULT_LIST: + * + * the cshema has "list" in the set of finalDefault. + + d XML_SCHEMAS_FINAL_DEFAULT_LIST... + d c X'00000010' + + * XML_SCHEMAS_FINAL_DEFAULT_UNION: + * + * the schema has "union" in the set of finalDefault. + + d XML_SCHEMAS_FINAL_DEFAULT_UNION... + d c X'00000020' + + * XML_SCHEMAS_BLOCK_DEFAULT_EXTENSION: + * + * the schema has "extension" in the set of blockDefault. + + d XML_SCHEMAS_BLOCK_DEFAULT_EXTENSION... + d c X'00000040' + + * XML_SCHEMAS_BLOCK_DEFAULT_RESTRICTION: + * + * the schema has "restriction" in the set of blockDefault. + + d XML_SCHEMAS_BLOCK_DEFAULT_RESTRICTION... + d c X'00000080' + + * XML_SCHEMAS_BLOCK_DEFAULT_SUBSTITUTION: + * + * the schema has "substitution" in the set of blockDefault. + + d XML_SCHEMAS_BLOCK_DEFAULT_SUBSTITUTION... + d c X'00000100' + + * XML_SCHEMAS_INCLUDING_CONVERT_NS: + * + * the schema is currently including an other schema with + * no target namespace. + + d XML_SCHEMAS_INCLUDING_CONVERT_NS... + d c X'00000200' + + * _xmlSchema: + * + * A Schemas definition + + d xmlSchema ds based(xmlSchemaPtr) + d align qualified + d name * const xmlChar * + d targetNamespace... + d * const xmlChar * + d version * const xmlChar * + d id * const xmlChar * + d doc like(xmlDocPtr) + d annot like(xmlSchemaAnnotPtr) + d flags like(xmlCint) + * + d typeDecl like(xmlHashTablePtr) + d attrDecl like(xmlHashTablePtr) + d attrGrpDecl like(xmlHashTablePtr) + d elemDecl like(xmlHashTablePtr) + d notaDecl like(xmlHashTablePtr) + d schemasImports... + d like(xmlHashTablePtr) + * + d #private * void * + d groupDecl like(xmlHashTablePtr) + d dict like(xmlDictPtr) + d includes * void * + d preserve like(xmlCint) Do not free doc ? + d counter like(xmlCint) For name uniqueness + d idcDef like(xmlHashTablePtr) All id-constr. defs + d volatiles * void * + + d xmlSchemaFreeType... + d pr extproc('xmlSchemaFreeType') + d type value like(xmlSchemaTypePtr) + + d xmlSchemaFreeWildcard... + d pr extproc('xmlSchemaFreeWildcard') + d wildcard value like(xmlSchemaWildcardPtr) + + /endif LIBXML_SCHEMAS_ENBLD + /endif SCHEMA_INTERNALS_H__ diff --git a/os400/libxmlrpg/schematron.rpgle b/os400/libxmlrpg/schematron.rpgle new file mode 100644 index 0000000..8271ca5 --- /dev/null +++ b/os400/libxmlrpg/schematron.rpgle @@ -0,0 +1,204 @@ + * Summary: XML Schemastron implementation + * Description: interface to the XML Schematron validity checking. + * + * Copy: See Copyright for the status of this software. + * + * Author: Patrick Monnerat , DATASPHERE S.A. + + /if not defined(XML_SCHEMATRON_H__) + /define XML_SCHEMATRON_H__ + + /include "libxmlrpg/xmlversion" + + /if defined(LIBXML_SCHEMATRON_ENABLED) + + /include "libxmlrpg/xmlTypesC" + /include "libxmlrpg/tree" + + d xmlSchematronValidOptions... + d s based(######typedef######) + d like(xmlCenum) + d XML_SCHEMATRON_OUT_QUIET... Quiet no report + d c X'0001' + d XML_SCHEMATRON_OUT_TEXT... Build textual report + d c X'0002' + d XML_SCHEMATRON_OUT_XML... Output SVRL + d c X'0004' + d XML_SCHEMATRON_OUT_ERROR... Output to error func + d c X'0008' + d XML_SCHEMATRON_OUT_FILE... Output to file descr + d c X'0100' + d XML_SCHEMATRON_OUT_BUFFER... Output to a buffer + d c X'0200' + d XML_SCHEMATRON_OUT_IO... Output to I/O mech + d c X'0400' + + * The schemas related types are kept internal + + d xmlSchematronPtr... + d s * based(######typedef######) + + * xmlSchematronValidityErrorFunc: + * @ctx: the validation context + * @msg: the message + * @...: extra arguments + * + * Signature of an error callback from a Schematron validation + + d xmlSchematronValidityErrorFunc... + d s * based(######typedef######) + d procptr + + * xmlSchematronValidityWarningFunc: + * @ctx: the validation context + * @msg: the message + * @...: extra arguments + * + * Signature of a warning callback from a Schematron validation + + d xmlSchematronValidityWarningFunc... + d s * based(######typedef######) + d procptr + + * A schemas validation context + + d xmlSchematronParserCtxtPtr... + d s * based(######typedef######) + + d xmlSchematronValidCtxtPtr... + d s * based(######typedef######) + + * Interfaces for parsing. + + d xmlSchematronNewParserCtxt... + d pr extproc('xmlSchematronNewParserCtxt') + d like(xmlSchematronParserCtxtPtr) + d URL * value options(*string) const char * + + d xmlSchematronNewMemParserCtxt... + d pr extproc( + d 'xmlSchematronNewMemParserCtxt') + d like(xmlSchematronParserCtxtPtr) + d buffer * value options(*string) const char * + d size value like(xmlCint) + + d xmlSchematronNewDocParserCtxt... + d pr extproc( + d 'xmlSchematronNewDocParserCtxt') + d like(xmlSchematronParserCtxtPtr) + d doc value like(xmlDocPtr) + + d xmlSchematronFreeParserCtxt... + d pr extproc( + d 'xmlSchematronFreeParserCtxt') + d ctxt value + d like(xmlSchematronParserCtxtPtr) + + /if defined(DISABLED) + d xmlSchematronSetParserErrors... + d pr extproc( + d 'xmlSchematronSetParserErrors') + d ctxt value + d like(xmlSchematronParserCtxtPtr) + d err value + d like(xmlSchematronValidityErrorFunc) + d warn value like( + d xmlSchematronValidityWarningFunc) + d ctx * value void * + + d xmlSchematronGetParserErrors... + d pr extproc( + d 'xmlSchematronGetParserErrors') + d like(xmlCint) + d ctxt value + d like(xmlSchematronParserCtxtPtr) + d err like(xmlSchematronValidityErrorFunc) + d warn like( + d xmlSchematronValidityWarningFunc) + d ctx * void *(*) + + d xmlSchematronIsValid... + d pr extproc('xmlSchematronIsValid') + d like(xmlCint) + d ctxt value like(xmlSchematronValidCtxtPtr) + /endif + + d xmlSchematronParse... + d pr extproc('xmlSchematronParse') + d like(xmlSchematronPtr) + d ctxt value + d like(xmlSchematronParserCtxtPtr) + + d xmlSchematronFree... + d pr extproc('xmlSchematronFree') + d schema value like(xmlSchematronPtr) + + * Interfaces for validating + + d xmlSchematronSetValidStructuredErrors... + d pr extproc('xmlSchematronSetValidStruct- + d uredErrors') + d ctxt value like(xmlSchematronValidCtxtPtr) + d serror value like(xmlStructuredErrorFunc) + d ctx * value void * + + /if defined(DISABLED) + d xmlSchematronSetValidErrors... + d pr extproc( + d 'xmlSchematronSetValidErrors') + d ctxt value like(xmlSchematronValidCtxtPtr) + d err value + d like(xmlSchematronValidityErrorFunc) + d warn value like( + d xmlSchematronValidityWarningFunc) + d ctx * value void * + + d xmlSchematronGetValidErrors... + d pr extproc( + d 'xmlSchematronGetValidErrors') + d like(xmlCint) + d ctxt value like(xmlSchematronValidCtxtPtr) + d err like(xmlSchematronValidityErrorFunc) + d warn like( + d xmlSchematronValidityWarningFunc) + d ctx * void *(*) + + d xmlSchematronSetValidOptions... + d pr extproc( + d 'xmlSchematronSetValidOptions') + d like(xmlCint) + d ctxt value like(xmlSchematronValidCtxtPtr) + d options value like(xmlCint) + + d xmlSchematronValidCtxtGetOptions... + d pr extproc( + d 'xmlSchematronValidCtxtGetOptions') + d like(xmlCint) + d ctxt value like(xmlSchematronValidCtxtPtr) + + d xmlSchematronValidateOneElement... + d pr extproc( + d 'xmlSchematronValidateOneElement') + d like(xmlCint) + d ctxt value like(xmlSchematronValidCtxtPtr) + d elem value like(xmlNodePtr) + /endif + + d xmlSchematronNewValidCtxt... + d pr extproc('xmlSchematronNewValidCtxt') + d like(xmlSchematronValidCtxtPtr) + d schema value like(xmlSchematronPtr) + d options value like(xmlCint) + + d xmlSchematronFreeValidCtxt... + d pr extproc('xmlSchematronFreeValidCtxt') + d ctxt value like(xmlSchematronValidCtxtPtr) + + d xmlSchematronValidateDoc... + d pr extproc('xmlSchematronValidateDoc') + d like(xmlCint) + d ctxt value like(xmlSchematronValidCtxtPtr) + d instance value like(xmlDocPtr) + + /endif _SCHEMATRON_ENABLED + /endif XML_SCHEMATRON_H__ diff --git a/os400/libxmlrpg/threads.rpgle b/os400/libxmlrpg/threads.rpgle new file mode 100644 index 0000000..124798b --- /dev/null +++ b/os400/libxmlrpg/threads.rpgle @@ -0,0 +1,73 @@ + * Summary: interfaces for thread handling + * Description: set of generic threading related routines + * should work with pthreads, Windows native or TLS threads + * + * Copy: See Copyright for the status of this software. + * + * Author: Patrick Monnerat , DATASPHERE S.A. + + /if not defined(XML_THREADS_H__) + /define XML_THREADS_H__ + + /include "libxmlrpg/xmlversion" + /include "libxmlrpg/xmlTypesC" + + * xmlMutex are a simple mutual exception locks. + + d xmlMutexPtr s * based(######typedef######) + + * xmlRMutex are reentrant mutual exception locks. + + d xmlRMutexPtr s * based(######typedef######) + + /include "libxmlrpg/globals" + + d xmlNewMutex pr extproc('xmlNewMutex') + d like(xmlMutexPtr) + + d xmlMutexLock pr extproc('xmlMutexLock') + d tok value like(xmlMutexPtr) + + d xmlMutexUnlock pr extproc('xmlMutexUnlock') + d tok value like(xmlMutexPtr) + + d xmlFreeMutex pr extproc('xmlFreeMutex') + d tok value like(xmlMutexPtr) + + d xmlNewRMutex pr extproc('xmlNewRMutex') + d like(xmlRMutexPtr) + + d xmlRMutexLock pr extproc('xmlRMutexLock') + d tok value like(xmlRMutexPtr) + + d xmlRMutexUnlock... + d pr extproc('xmlRMutexUnlock') + d tok value like(xmlRMutexPtr) + + d xmlFreeRMutex pr extproc('xmlFreeRMutex') + d tok value like(xmlRMutexPtr) + + * Library wide APIs. + + d xmlInitThreads pr extproc('xmlInitThreads') + + d xmlLockLibrary pr extproc('xmlLockLibrary') + + d xmlUnlockLibrary... + d pr extproc('xmlUnlockLibrary') + + d xmlGetThreadId pr extproc('xmlGetThreadId') + d like(xmlCint) + + d xmlIsMainThread... + d pr extproc('xmlIsMainThread') + d like(xmlCint) + + d xmlCleanupThreads... + d pr extproc('xmlCleanupThreads') + + d xmlGetGlobalState... + d pr extproc('xmlGetGlobalState') + d like(xmlGlobalStatePtr) + + /endif XML_THREADS_H__ diff --git a/os400/libxmlrpg/transcode.rpgle b/os400/libxmlrpg/transcode.rpgle new file mode 100644 index 0000000..b96e4e8 --- /dev/null +++ b/os400/libxmlrpg/transcode.rpgle @@ -0,0 +1,71 @@ + * Supplementary character code conversion functions for + * EBCDIC environments. + * + * Copy: See Copyright for the status of this software. + * + * Author: Patrick Monnerat , DATASPHERE S.A. + + /if not defined(TRANSCODE_H__) + /define TRANSCODE_H__ + + /include "libxmlrpg/dict" + /include "libxmlrpg/xmlstdarg" + + d xmlZapDict pr extproc('xmlZapDict') + d dict like(xmlDictPtr) + + d xmlTranscodeResult... + d pr * extproc('xmlTranscodeResult') const char * + d s * value options(*string) const xmlChar * + d encoding * value options(*string) const char * + d dict like(xmlDictPtr) options(*omit) + d freeproc * value procptr + + d xmlTranscodeString... + d pr * extproc('xmlTranscodeString') const xmlChar * + d s * value options(*string) const char * + d encoding * value options(*string) const char * + d dict like(xmlDictPtr) options(*omit) + + d xmlTranscodeWString... + d pr * extproc('xmlTranscodeWString') const xmlChar * + d s * value options(*string) const char * + d encoding * value options(*string) const char * + d dict like(xmlDictPtr) options(*omit) + + d xmlTranscodeHString... + d pr * extproc('xmlTranscodeHString') const xmlChar * + d s * value options(*string) const char * + d encoding * value options(*string) const char * + d dict like(xmlDictPtr) options(*omit) + + /if not defined(XML_NO_SHORT_NAMES) + d xmlTR pr * extproc('xmlTranscodeResult') const char * + d s * value options(*string) const xmlChar * + d encoding * value options(*string) const char * + d dict like(xmlDictPtr) options(*omit) + d freeproc * value procptr + + d xmlTS pr * extproc('xmlTranscodeString') const xmlChar * + d s * value options(*string) const char * + d encoding * value options(*string) const char * + d dict like(xmlDictPtr) options(*omit) + + d xmlTW pr * extproc('xmlTranscodeWString') const xmlChar * + d s * value options(*string) const char * + d encoding * value options(*string) const char * + d dict like(xmlDictPtr) options(*omit) + + d xmlTH pr * extproc('xmlTranscodeHString') const xmlChar * + d s * value options(*string) const char * + d encoding * value options(*string) const char * + d dict like(xmlDictPtr) options(*omit) + /endif + + d xmlVasprintf pr * extproc('xmlVasprintf') + d dict like(xmlDictPtr) options(*omit) + d encoding * value options(*string) const char * + d fmt * value options(*string) const xmlChar * + d args likeds(xmlVaList) + + /endif diff --git a/os400/libxmlrpg/tree.rpgle b/os400/libxmlrpg/tree.rpgle new file mode 100644 index 0000000..6512778 --- /dev/null +++ b/os400/libxmlrpg/tree.rpgle @@ -0,0 +1,1681 @@ + * Summary: interfaces for tree manipulation + * Description: this module describes the structures found in an tree + * resulting from an XML or HTML parsing, as well as the API + * provided for various processing on that tree + * + * Copy: See Copyright for the status of this software. + * + * Author: Patrick Monnerat , DATASPHERE S.A. + + /if not defined(XML_TREE_H__) + /define XML_TREE_H__ + + /include "libxmlrpg/xmlversion" + /include "libxmlrpg/xmlTypesC" + /include "libxmlrpg/xmlstring" + + + * Some of the basic types pointer to structures: + + * xmlIO.h + + d xmlParserInputBufferPtr... + d s * based(######typedef######) + + d xmlOutputBufferPtr... + d s * based(######typedef######) + + * parser.h + + d xmlParserInputPtr... + d s * based(######typedef######) + + d xmlParserCtxtPtr... + d s * based(######typedef######) + + d xmlSAXLocatorPtr... + d s * based(######typedef######) + + d xmlSAXHandlerPtr... + d s * based(######typedef######) + + * entities.h + + d xmlEntityPtr s * based(######typedef######) + + + * BASE_BUFFER_SIZE: + * + * default buffer size 4000. + + d BASE_BUFFER_SIZE... + d c 4096 + + * LIBXML_NAMESPACE_DICT: + * + * Defines experimental behaviour: + * 1) xmlNs gets an additional field @context (a xmlDoc) + * 2) when creating a tree, xmlNs->href is stored in the dict of xmlDoc. + + /if defined(DO_NOT_COMPILE) + /define LIBXML_NAMESPACE_DICT + /endif + + * xmlBufferAllocationScheme: + * + * A buffer allocation scheme can be defined to either match exactly the + * need or double it's allocated size each time it is found too small. + + d xmlBufferAllocationScheme... + d s based(######typedef######) + d like(xmlCenum) + d XML_BUFFER_ALLOC_DOUBLEIT... + d c 0 + d XML_BUFFER_ALLOC_EXACT... + d c 1 + d XML_BUFFER_ALLOC_IMMUTABLE... + d c 2 + d XML_BUFFER_ALLOC_IO... + d c 3 + d XML_BUFFER_ALLOC_HYBRID... + d c 4 + + * xmlBuffer: + * + * A buffer structure, this old construct is limited to 2GB and + * is being deprecated, use API with xmlBuf instead + + d xmlBufferPtr s * based(######typedef######) + + d xmlBuffer ds based(xmlBufferPtr) + d align qualified + d content * xmlChar * + d use like(xmlCuint) + d size like(xmlCuint) + d alloc like(xmlBufferAllocationScheme) The realloc method + d contentIO * xmlChar * + + * xmlBufPtr: + * + * A pointer to a buffer structure, the actual structure internals are not + * public + + d xmlBufPtr s * based(######typedef######) + + * A few public routines for xmlBuf. As those are expected to be used + * mostly internally the bulk of the routines are internal in buf.h + + d xmlBufContent pr * extproc('xmlBufContent') xmlChar * + d buf value like(xmlBufPtr) const + + d xmlBufEnd pr * extproc('xmlBufEnd') xmlChar * + d buf value like(xmlBufPtr) const + + d xmlBufUse pr extproc('xmlBufUse') + d like(xmlCsize_t) + d buf value like(xmlBufPtr) const + + d xmlBufShrink pr extproc('xmlBufShrink') + d like(xmlCsize_t) + d buf value like(xmlBufPtr) + d len value like(xmlCsize_t) + + * LIBXML2_NEW_BUFFER: + * + * Macro used to express that the API use the new buffers for + * xmlParserInputBuffer and xmlOutputBuffer. The change was + * introduced in 2.9.0. + + /define LIBXML2_NEW_BUFFER + + * XML_XML_NAMESPACE: + * + * This is the namespace for the special xml: prefix predefined in the + * XML Namespace specification. + + d XML_XML_NAMESPACE... + d c 'http://www.w3.org/XML/1998/+ + d namespace' + + * XML_XML_ID: + * + * This is the name for the special xml:id attribute + + d XML_XML_ID c 'xml:id' + + * The different element types carried by an XML tree. + * + * NOTE: This is synchronized with DOM Level1 values + * See http://www.w3.org/TR/REC-DOM-Level-1/ + * + * Actually this had diverged a bit, and now XML_DOCUMENT_TYPE_NODE should + * be deprecated to use an XML_DTD_NODE. + + d xmlElementType s based(######typedef######) + d like(xmlCenum) + d XML_ELEMENT_NODE... + d c 1 + d XML_ATTRIBUTE_NODE... + d c 2 + d XML_TEXT_NODE c 3 + d XML_CDATA_SECTION_NODE... + d c 4 + d XML_ENTITY_REF_NODE... + d c 5 + d XML_ENTITY_NODE... + d c 6 + d XML_PI_NODE c 7 + d XML_COMMENT_NODE... + d c 8 + d XML_DOCUMENT_NODE... + d c 9 + d XML_DOCUMENT_TYPE_NODE... + d c 10 + d XML_DOCUMENT_FRAG_NODE... + d c 11 + d XML_NOTATION_NODE... + d c 12 + d XML_HTML_DOCUMENT_NODE... + d c 13 + d XML_DTD_NODE c 14 + d XML_ELEMENT_DECL... + d c 15 + d XML_ATTRIBUTE_DECL... + d c 16 + d XML_ENTITY_DECL... + d c 17 + d XML_NAMESPACE_DECL... + d c 18 + d XML_LOCAL_NAMESPACE... + d c 18 Alias + d XML_XINCLUDE_START... + d c 19 + d XML_XINCLUDE_END... + d c 20 + /if defined(LIBXML_DOCB_ENABLED) + d XML_DOCB_DOCUMENT_NODE... + d c 21 + /endif + + * xmlNotation: + * + * A DTD Notation definition. + + d xmlNotationPtr s * based(######typedef######) + + d xmlNotation ds based(xmlNotationPtr) + d align qualified + d name * const xmlChar * + d PublicID * const xmlChar * + d SystemID * const xmlChar * + + * xmlAttributeType: + * + * A DTD Attribute type definition. + + d xmlAttributeType... + d s based(######typedef######) + d like(xmlCenum) + d XML_ATTRIBUTE_CDATA... + d c 1 + d XML_ATTRIBUTE_ID... + d c 2 + d XML_ATTRIBUTE_IDREF... + d c 3 + d XML_ATTRIBUTE_IDREFS... + d c 4 + d XML_ATTRIBUTE_ENTITY... + d c 5 + d XML_ATTRIBUTE_ENTITIES... + d c 6 + d XML_ATTRIBUTE_NMTOKEN... + d c 7 + d XML_ATTRIBUTE_NMTOKENS... + d c 8 + d XML_ATTRIBUTE_ENUMERATION... + d c 9 + d XML_ATTRIBUTE_NOTATION... + d c 10 + + * xmlAttributeDefault: + * + * A DTD Attribute default definition. + + d xmlAttributeDefault... + d s based(######typedef######) + d like(xmlCenum) + d XML_ATTRIBUTE_NONE... + d c 1 + d XML_ATTRIBUTE_REQUIRED... + d c 2 + d XML_ATTRIBUTE_IMPLIED... + d c 3 + d XML_ATTRIBUTE_FIXED... + d c 4 + + * xmlEnumeration: + * + * List structure used when there is an enumeration in DTDs. + + d xmlEnumerationPtr... + d s * based(######typedef######) + + d xmlEnumeration ds based(xmlEnumerationPtr) + d align qualified + d next like(xmlEnumerationPtr) Next one + d name * const xmlChar * + + * Forward pointer declarations. + + d xmlNodePtr s * based(######typedef######) + d xmlDocPtr s * based(######typedef######) + d xmlDtdPtr s * based(######typedef######) + + * xmlAttribute: + * + * An Attribute declaration in a DTD. + + d xmlAttributePtr... + d s * based(######typedef######) + + d xmlAttribute ds based(xmlAttributePtr) + d align qualified + d #private * Application data + d type like(xmlElementType) XML_ATTRIBUTE_DECL + d name * const xmlChar * + d children like(xmlNodePtr) NULL + d last like(xmlNodePtr) NULL + d parent like(xmlDtdPtr) -> DTD + d next like(xmlNodePtr) next sibling link + d prev like(xmlNodePtr) previous sibling lnk + d doc like(xmlDocPtr) The containing doc + d nexth like(xmlAttributePtr) Next in hash table + d atype like(xmlAttributeType) The attribute type + d def like(xmlAttributeDefault) The default + d defaultValue * or const xmlChar * + d tree like(xmlEnumerationPtr) or enum tree + d prefix * const xmlChar * + d elem * const xmlChar * + + * xmlElementContentType: + * + * Possible definitions of element content types. + + d xmlElementContentType... + d s based(######typedef######) + d like(xmlCenum) + d XML_ELEMENT_CONTENT_PCDATA... + d c 1 + d XML_ELEMENT_CONTENT_ELEMENT... + d c 2 + d XML_ELEMENT_CONTENT_SEQ... + d c 3 + d XML_ELEMENT_CONTENT_OR... + d c 4 + + * xmlElementContentOccur: + * + * Possible definitions of element content occurrences. + + d xmlElementContentOccur... + d s based(######typedef######) + d like(xmlCenum) + d XML_ELEMENT_CONTENT_ONCE... + d c 1 + d XML_ELEMENT_CONTENT_OPT... + d c 2 + d XML_ELEMENT_CONTENT_MULT... + d c 3 + d XML_ELEMENT_CONTENT_PLUS... + d c 4 + + * xmlElementContent: + * + * An XML Element content as stored after parsing an element definition + * in a DTD. + + d xmlElementContentPtr... + d s * based(######typedef######) + + d xmlElementContent... + d ds based(xmlElementContentPtr) + d align qualified + d type like(xmlElementContentType) + d ocur like(xmlElementContentOccur) + d name * const xmlChar * + d c1 like(xmlElementContentPtr) First child + d c2 like(xmlElementContentPtr) Second child + d parent like(xmlElementContentPtr) Parent + d prefix * const xmlChar * + + * xmlElementTypeVal: + * + * The different possibilities for an element content type. + + d xmlElementTypeVal... + d s based(######typedef######) + d like(xmlCenum) + d XML_ELEMENT_TYPE_UNDEFINED... + d c 0 + d XML_ELEMENT_TYPE_EMPTY... + d c 1 + d XML_ELEMENT_TYPE_ANY... + d c 2 + d XML_ELEMENT_TYPE_MIXED... + d c 3 + d XML_ELEMENT_TYPE_ELEMENT... + d c 4 + + /include "libxmlrpg/xmlregexp" + + * xmlElement: + * + * An XML Element declaration from a DTD. + + d xmlElementPtr s * based(######typedef######) + + d xmlElement ds based(xmlElementPtr) + d align qualified + d #private * Application data + d type like(xmlElementType) XML_ELEMENT_DECL + d name * const xmlChar * + d children like(xmlNodePtr) NULL + d last like(xmlNodePtr) NULL + d parent like(xmlDtdPtr) -> DTD + d next like(xmlNodePtr) next sibling link + d prev like(xmlNodePtr) previous sibling lnk + d doc like(xmlDocPtr) The containing doc + d etype like(xmlElementTypeVal) The type + d content like(xmlElementContentPtr) Allowed elem content + d attributes like(xmlAttributePtr) Declared attributes + d prefix * const xmlChar * + /if defined(LIBXML_REGEXP_ENABLED) + d contModel like(xmlRegexpPtr) Validating regexp + /else + d contModel * + /endif + + * XML_LOCAL_NAMESPACE: + * + * A namespace declaration node. + + * xmlNs: + * + * An XML namespace. + * Note that prefix == NULL is valid, it defines the default namespace + * within the subtree (until overridden). + * + * xmlNsType is unified with xmlElementType. + + d xmlNsType s based(######typedef######) enum + d like(xmlElementType) + + d xmlNsPtr s * based(######typedef######) + + d xmlNs ds based(xmlNsPtr) + d align qualified + d next like(xmlNsPtr) next Ns link + d type like(xmlNsType) Global or local + d href * const xmlChar * + d prefix * const xmlChar * + d #private * Application data + d context like(xmlDocPtr) normally an xmlDoc + + * xmlDtd: + * + * An XML DTD, as defined by parent link + d next like(xmlNodePtr) next sibling link + d prev like(xmlNodePtr) previous sibling lnk + d doc like(xmlDocPtr) The containing doc + d notations * notations hash table + d elements * elements hash table + d entities * entities hash table + d ExternalID * const xmlChar * + d SystemID * const xmlChar * + d pentities * param. ent. h table + + * xmlAttr: + * + * An attribute on an XML node. + + d xmlAttrPtr s * based(######typedef######) + + d xmlAttr ds based(xmlAttrPtr) + d align qualified + d #private * Application data + d type like(xmlElementType) XML_ATTRIBUTE_NODE + d name * const xmlChar * + d children like(xmlNodePtr) Property link value + d last like(xmlNodePtr) NULL + d parent like(xmlNodePtr) Child->parent link + d next like(xmlAttrPtr) next sibling link + d prev like(xmlAttrPtr) previous sibling lnk + d doc like(xmlDocPtr) The containing doc + d ns like(xmlNsPtr) Associated namespace + d atype like(xmlAttributeType) For validation + d psvi * Type/PSVI info + + * xmlID: + * + * An XML ID instance. + + d xmlIdPtr s * based(######typedef######) + + d xmlID ds based(xmlIdPtr) + d align qualified + d next like(xmlIdPtr) Next ID + d attr like(xmlAttrPtr) Attribute holding it + d name * const xmlChar * + d lineno like(xmlCint) Line # if not avail + d doc like(xmlDocPtr) Doc holding ID + + * xmlRef: + * + * An XML IDREF instance. + + d xmlRefPtr s * based(######typedef######) + + d xmlRef ds based(xmlRefPtr) + d align qualified + d next like(xmlRefPtr) Next Ref + d value * const xmlChar * + d attr like(xmlAttrPtr) Attribute holding it + d name * const xmlChar * + d lineno like(xmlCint) Line # if not avail + + * xmlNode: + * + * A node in an XML tree. + + d xmlNode ds based(xmlNodePtr) + d align qualified + d #private * Application data + d type like(xmlElementType) + d name * const xmlChar * + d children like(xmlNodePtr) Parent->children lnk + d last like(xmlNodePtr) Last child link + d parent like(xmlNodePtr) Child->parent link + d next like(xmlNodePtr) next sibling link + d prev like(xmlNodePtr) previous sibling lnk + d doc like(xmlDocPtr) The containing doc + d ns like(xmlNsPtr) Associated namespace + d content * xmlChar * + d properties like(xmlAttrPtr) Properties list + d nsDef like(xmlNsPtr) Node ns definitions + d psvi * Type/PSVI info + d line like(xmlCushort) + d extra like(xmlCushort) Data for XPath/XSLT + + * xmlDocProperty + * + * Set of properties of the document as found by the parser + * Some of them are linked to similary named xmlParserOption + + d xmlDocProperties... + d s based(######typedef######) + d like(xmlCenum) + d XML_DOC_WELLFORMED... + d c X'00000001' + d XML_DOC_NSVALID... + d c X'00000002' + d XML_DOC_OLD10 c X'00000004' + d XML_DOC_DTDVALID... + d c X'00000008' + d XML_DOC_XINCLUDE... + d c X'00000010' + d XML_DOC_USERBUILT... + d c X'00000020' + d XML_DOC_INTERNAL... + d c X'00000030' + d XML_DOC_HTML c X'00000080' + + * xmlDoc: + * + * An XML document. + + d xmlDoc ds based(xmlDocPtr) + d align qualified + d #private * Application data + d type like(xmlElementType) XML_DOCUMENT_NODE + d name * const xmlChar * + d children like(xmlNodePtr) The document tree + d last like(xmlNodePtr) Last child link + d parent like(xmlNodePtr) Child->parent link + d next like(xmlNodePtr) next sibling link + d prev like(xmlNodePtr) previous sibling lnk + d doc like(xmlDocPtr) Reference to itself + d compression like(xmlCint) zlib compression lev + d standalone like(xmlCint) + d intSubset like(xmlDtdPtr) Internal subset + d extSubset like(xmlDtdPtr) External subset + d oldns like(xmlNsPtr) Global namespace + d version * const xmlChar * + d encoding * const xmlChar * + d ids * IDs hash table + d refs * IDREFs hash table + d URL * const xmlChar * + d charset like(xmlCint) In-memory encoding + d dict * xmlDictPtr for names + d psvi * Type/PSVI ino + d parseFlags like(xmlCint) xmlParserOption's + d properties like(xmlCint) xmlDocProperties + + * xmlDOMWrapAcquireNsFunction: + * @ctxt: a DOM wrapper context + * @node: the context node (element or attribute) + * @nsName: the requested namespace name + * @nsPrefix: the requested namespace prefix + * + * A function called to acquire namespaces (xmlNs) from the wrapper. + * + * Returns an xmlNsPtr or NULL in case of an error. + + d xmlDOMWrapAcquireNsFunction... + d s * based(######typedef######) + d procptr + + * xmlDOMWrapCtxt: + * + * Context for DOM wrapper-operations. + + d xmlDOMWrapCtxtPtr... + d s * based(######typedef######) + + d xmlDOMWrapCtxt... + d ds based(xmlDOMWrapCtxtPtr) + d align qualified + d #private * void * + d type like(xmlCint) + d namespaceMap * void * + d getNsForNodeFunc... + d like(xmlDOMWrapAcquireNsFunction) + + + * Variables. + + * Some helper functions + + /undefine XML_TESTVAL + /if defined(LIBXML_TREE_ENABLED) + /define XML_TESTVAL + /elseif defined(LIBXML_XPATH_ENABLED) + /define XML_TESTVAL + /elseif defined(LIBXML_SCHEMAS_ENABLED) + /define XML_TESTVAL + /elseif defined(LIBXML_DEBUG_ENABLED) + /define XML_TESTVAL + /elseif defined(LIBXML_HTML_ENABLED) + /define XML_TESTVAL + /elseif defined(LIBXML_SAX1_ENABLED) + /define XML_TESTVAL + /elseif defined(LIBXML_HTML_ENABLED) + /define XML_TESTVAL + /elseif defined(LIBXML_WRITER_ENABLED) + /define XML_TESTVAL + /elseif defined(LIBXML_DOCB_ENABLED) + /define XML_TESTVAL + /endif + /if defined(XML_TESTVAL) + d xmlValidateNCName... + d pr extproc('xmlValidateNCName') + d like(xmlCint) + d value * value options(*string) const xmlChar * + d space value like(xmlCint) + + /undefine XML_TESTVAL + /endif + + /if defined(LIBXML_TREE_ENABLED) + /define XML_TESTVAL + /elseif defined(LIBXML_SCHEMAS_ENABLED) + /define XML_TESTVAL + /endif + /if defined(XML_TESTVAL) + d xmlValidateQName... + d pr extproc('xmlValidateQName') + d like(xmlCint) + d value * value options(*string) const xmlChar * + d space value like(xmlCint) + + d xmlValidateName... + d pr extproc('xmlValidateName') + d like(xmlCint) + d value * value options(*string) const xmlChar * + d space value like(xmlCint) + + d xmlValidateNMToken... + d pr extproc('xmlValidateNMToken') + d like(xmlCint) + d value * value options(*string) const xmlChar * + d space value like(xmlCint) + + /undefine XML_TESTVAL + /endif + + d xmlBuildQName pr * extproc('xmlBuildQName') xmlChar * + d ncname * value options(*string) const xmlChar * + d prefix * value options(*string) const xmlChar * + d memory 65535 options(*varsize: *omit) xmlChar[] + d len value like(xmlCint) memory length + + d xmlSplitQName2 pr * extproc('xmlSplitQName2') xmlChar * + d name * value options(*string) const xmlChar * + d prefix * xmlChar * + + d xmlSplitQName3 pr * extproc('xmlSplitQName3') const xmlChar * + d name * value options(*string) const xmlChar * + d len like(xmlCint) + + * Handling Buffers, the old ones see @xmlBuf for the new ones. + + d xmlSetBufferAllocationScheme... + d pr extproc( + d 'xmlSetBufferAllocationScheme') + d scheme value + d like(xmlBufferAllocationScheme) + + d xmlGetBufferAllocationScheme... + d pr extproc( + d 'xmlGetBufferAllocationScheme') + d like(xmlBufferAllocationScheme) + + d xmlBufferCreate... + d pr extproc('xmlBufferCreate') + d like(xmlBufferPtr) + + d xmlBufferCreateSize... + d pr extproc('xmlBufferCreateSize') + d like(xmlBufferPtr) + d size value like(xmlCsize_t) + + d xmlBufferCreateStatic... + d pr extproc('xmlBufferCreateStatic') + d like(xmlBufferPtr) + d mem * value + d size value like(xmlCsize_t) + + d xmlBufferResize... + d pr extproc('xmlBufferResize') + d like(xmlCint) + d buf value like(xmlBufferPtr) + d size value like(xmlCsize_t) + + d xmlBufferFree pr extproc('xmlBufferFree') + d buf value like(xmlBufferPtr) + + d xmlBufferDump pr extproc('xmlBufferDump') + d like(xmlCint) + d file * value FILE * + d buf value like(xmlBufferPtr) + + d xmlBufferAdd pr extproc('xmlBufferAdd') + d like(xmlCint) + d buf value like(xmlBufferPtr) + d str * value options(*string) const xmlChar * + d len value like(xmlCint) str length + + d xmlBufferAddHead... + d pr extproc('xmlBufferAddHead') + d like(xmlCint) + d buf value like(xmlBufferPtr) + d str * value options(*string) const xmlChar * + d len value like(xmlCint) str length + + d xmlBufferCat pr extproc('xmlBufferCat') + d like(xmlCint) + d buf value like(xmlBufferPtr) + d str * value options(*string) const xmlChar * + + d xmlBufferCCat pr extproc('xmlBufferCCat') + d like(xmlCint) + d buf value like(xmlBufferPtr) + d str * value options(*string) const char * + + d xmlBufferShrink... + d pr extproc('xmlBufferShrink') + d like(xmlCint) + d buf value like(xmlBufferPtr) + d len value like(xmlCuint) + + d xmlBufferGrow pr extproc('xmlBufferGrow') + d like(xmlCint) + d buf value like(xmlBufferPtr) + d len value like(xmlCuint) + + d xmlBufferEmpty pr extproc('xmlBufferEmpty') + d buf value like(xmlBufferPtr) + + d xmlBufferContent... + d pr * extproc('xmlBufferContent') const xmlChar * + d buf value like(xmlBufferPtr) + + d xmlBufferDetach... + d pr * extproc('xmlBufferDetach') xmlChar * + d buf value like(xmlBufferPtr) + + d xmlBufferSetAllocationScheme... + d pr extproc( + d 'xmlBufferSetAllocationScheme') + d buf value like(xmlBufferPtr) + d scheme value + d like(xmlBufferAllocationScheme) + + d xmlBufferLength... + d pr extproc('xmlBufferLength') + d like(xmlCint) + d buf value like(xmlBufferPtr) + + * Creating/freeing new structures. + + d xmlCreateIntSubset... + d pr extproc('xmlCreateIntSubset') + d like(xmlDtdPtr) + d doc value like(xmlDocPtr) + d name * value options(*string) const xmlChar * + d ExternalID * value options(*string) const xmlChar * + d SystemlID * value options(*string) const xmlChar * + + d xmlNewDtd pr extproc('xmlNewDtd') + d like(xmlDtdPtr) + d doc value like(xmlDocPtr) + d name * value options(*string) const xmlChar * + d ExternalID * value options(*string) const xmlChar * + d SystemlID * value options(*string) const xmlChar * + + d xmlGetIntSubset... + d pr extproc('xmlGetIntSubset') + d like(xmlDtdPtr) + d doc value like(xmlDocPtr) + + d xmlFreeDtd pr extproc('xmlFreeDtd') + d cur value like(xmlDtdPtr) + + /if defined(LIBXML_LEGACY_ENABLED) + d xmlNewGlobalNs pr extproc('xmlNewGlobalNs') + d like(xmlNsPtr) + d doc value like(xmlDocPtr) + d href * value options(*string) const xmlChar * + d prefix * value options(*string) const xmlChar * + /endif LIBXML_LEGACY_ENABLD + + d xmlNewNs pr extproc('xmlNewNs') + d like(xmlNsPtr) + d node value like(xmlNodePtr) + d href * value options(*string) const xmlChar * + d prefix * value options(*string) const xmlChar * + + d xmlFreeNs pr extproc('xmlFreeNs') + d cur value like(xmlNsPtr) + + d xmlFreeNsList pr extproc('xmlFreeNsList') + d cur value like(xmlNsPtr) + + d xmlNewDoc pr extproc('xmlNewDoc') + d like(xmlDocPtr) + d version * value options(*string) const xmlChar * + + d xmlFreeDoc pr extproc('xmlFreeDoc') + d cur value like(xmlDocPtr) + + d xmlNewDocProp pr extproc('xmlNewDocProp') + d like(xmlAttrPtr) + d name * value options(*string) const xmlChar * + d value * value options(*string) const xmlChar * + + /if defined(LIBXML_TREE_ENABLED) + /define XML_TESTVAL + /elseif defined(LIBXML_HTML_ENABLED) + /define XML_TESTVAL + /elseif defined(LIBXML_SCHEMAS_ENABLED) + /define XML_TESTVAL + /endif + /if defined(XML_TESTVAL) + d xmlNewProp pr extproc('xmlNewProp') + d like(xmlAttrPtr) + d node value like(xmlNodePtr) + d name * value options(*string) const xmlChar * + d value * value options(*string) const xmlChar * + + /undefine XML_TESTVAL + /endif + + d xmlNewNsProp pr extproc('xmlNewNsProp') + d like(xmlAttrPtr) + d node value like(xmlNodePtr) + d ns value like(xmlNsPtr) + d name * value options(*string) const xmlChar * + d value * value options(*string) const xmlChar * + + d xmlNewNsPropEatName... + d pr extproc('xmlNewNsPropEatName') + d like(xmlAttrPtr) + d node value like(xmlNodePtr) + d ns value like(xmlNsPtr) + d name * value xmlChar * + d value * value options(*string) const xmlChar * + + d xmlFreePropList... + d pr extproc('xmlFreePropList') + d cur value like(xmlAttrPtr) + + d xmlFreeProp pr extproc('xmlFreeProp') + d cur value like(xmlAttrPtr) + + d xmlCopyProp pr extproc('xmlCopyProp') + d like(xmlAttrPtr) + d target value like(xmlNodePtr) + d cur value like(xmlAttrPtr) + + d xmlCopyPropList... + d pr extproc('xmlCopyPropList') + d like(xmlAttrPtr) + d target value like(xmlNodePtr) + d cur value like(xmlAttrPtr) + + /if defined(LIBXML_TREE_ENABLED) + d xmlCopyDtd pr extproc('xmlCopyDtd') + d like(xmlDtdPtr) + d dtd value like(xmlDtdPtr) + /endif LIBXML_TREE_ENABLED + + /if defined(LIBXML_TREE_ENABLED) + /define XML_TESTVAL + /elseif defined(LIBXML_SCHEMAS_ENABLED) + /define XML_TESTVAL + /endif + /if defined(XML_TESTVAL) + d xmlCopyDoc pr extproc('xmlCopyDoc') + d like(xmlDocPtr) + d doc value like(xmlDocPtr) + d recursive value like(xmlCint) + + /undefine XML_TESTVAL + /endif + + * Creating new nodes. + + d xmlNewDocNode pr extproc('xmlNewDocNode') + d like(xmlNodePtr) + d doc value like(xmlDocPtr) + d ns value like(xmlNsPtr) + d name * value options(*string) const xmlChar * + d content * value options(*string) const xmlChar * + + d xmlNewDocNodeEatName... + d pr extproc('xmlNewDocNodeEatName') + d like(xmlNodePtr) + d doc value like(xmlDocPtr) + d ns value like(xmlNsPtr) + d name * value xmlChar * + d content * value options(*string) const xmlChar * + + d xmlNewNode pr extproc('xmlNewNode') + d like(xmlNodePtr) + d ns value like(xmlNsPtr) + d name * value options(*string) const xmlChar * + + d xmlNewNodeEatName... + d pr extproc('xmlNewNodeEatName') + d like(xmlNodePtr) + d ns value like(xmlNsPtr) + d name * value xmlChar * + + /if defined(LIBXML_TREE_ENABLED) + /define XML_TESTVAL + /elseif defined(LIBXML_SCHEMAS_ENABLED) + /define XML_TESTVAL + /endif + /if defined(XML_TESTVAL) + d xmlNewChild pr extproc('xmlNewChild') + d like(xmlNodePtr) + d parent value like(xmlNodePtr) + d ns value like(xmlNsPtr) + d name * value options(*string) const xmlChar * + d content * value options(*string) const xmlChar * + + /undefine XML_TESTVAL + /endif + + d xmlNewDocText pr extproc('xmlNewDocText') + d like(xmlNodePtr) + d doc value like(xmlDocPtr) + d content * value options(*string) const xmlChar * + + d xmlNewText pr extproc('xmlNewText') + d like(xmlNodePtr) + d content * value options(*string) const xmlChar * + + d xmlNewDocPI pr extproc('xmlNewDocPI') + d like(xmlNodePtr) + d doc value like(xmlDocPtr) + d name * value options(*string) const xmlChar * + d content * value options(*string) const xmlChar * + + d xmlNewPI pr extproc('xmlNewPI') + d like(xmlNodePtr) + d name * value options(*string) const xmlChar * + d content * value options(*string) const xmlChar * + + d xmlNewDocTextLen... + d pr extproc('xmlNewDocTextLen') + d like(xmlNodePtr) + d doc value like(xmlDocPtr) + d content * value options(*string) const xmlChar * + d len value like(xmlCint) + + d xmlNewTextLen pr extproc('xmlNewTextLen') + d like(xmlNodePtr) + d content * value options(*string) const xmlChar * + d len value like(xmlCint) + + d xmlNewDocComment... + d pr extproc('xmlNewDocComment') + d like(xmlNodePtr) + d doc value like(xmlDocPtr) + d content * value options(*string) const xmlChar * + + d xmlNewComment pr extproc('xmlNewComment') + d like(xmlNodePtr) + d content * value options(*string) const xmlChar * + + d xmlNewCDataBlock... + d pr extproc('xmlNewCDataBlock') + d like(xmlNodePtr) + d doc value like(xmlDocPtr) + d content * value options(*string) const xmlChar * + d len value like(xmlCint) + + d xmlNewCharRef pr extproc('xmlNewCharRef') + d like(xmlNodePtr) + d doc value like(xmlDocPtr) + d name * value options(*string) const xmlChar * + + d xmlNewReference... + d pr extproc('xmlNewReference') + d like(xmlNodePtr) + d doc value like(xmlDocPtr) + d name * value options(*string) const xmlChar * + + d xmlCopyNode pr extproc('xmlCopyNode') + d like(xmlNodePtr) + d node value like(xmlNodePtr) + d recursive value like(xmlCint) + + d xmlDocCopyNode pr extproc('xmlDocCopyNode') + d like(xmlNodePtr) + d node value like(xmlNodePtr) + d doc value like(xmlDocPtr) + d recursive value like(xmlCint) + + d xmlDocCopyNodeList... + d pr extproc('xmlDocCopyNodeList') + d like(xmlNodePtr) + d doc value like(xmlDocPtr) + d node value like(xmlNodePtr) + + d xmlCopyNodeList... + d pr extproc('xmlCopyNodeList') + d like(xmlNodePtr) + d node value like(xmlNodePtr) + + /if defined(LIBXML_TREE_ENABLED) + d xmlNewTextChild... + d pr extproc('xmlNewTextChild') + d like(xmlNodePtr) + d parent value like(xmlNodePtr) + d ns value like(xmlNsPtr) + d name * value options(*string) const xmlChar * + d content * value options(*string) const xmlChar * + + d xmlNewDocRawNode... + d pr extproc('xmlNewDocRawNode') + d like(xmlNodePtr) + d doc value like(xmlDocPtr) + d ns value like(xmlNsPtr) + d name * value options(*string) const xmlChar * + d content * value options(*string) const xmlChar * + + d xmlNewDocFragment... + d pr extproc('xmlNewDocFragment') + d like(xmlNodePtr) + d doc value like(xmlDocPtr) + /endif LIBXML_TREE_ENABLED + + * Navigating. + + d xmlNewDocFragment... + d xmlGetLineNo pr extproc('xmlGetLineNo') + d like(xmlClong) + d node value like(xmlNodePtr) + + /if defined(LIBXML_TREE_ENABLED) + /define XML_TESTVAL + /elseif defined(LIBXML_DEBUG_ENABLED) + /define XML_TESTVAL + /endif + /if defined(XML_TESTVAL) + d xmlGetNodePath pr * extproc('xmlGetNodePath') xmlChar * + d node value like(xmlNodePtr) + + /undefine XML_TESTVAL + /endif + + d xmlDocGetRootElement... + d pr extproc('xmlDocGetRootElement') + d like(xmlNodePtr) + d doc value like(xmlDocPtr) + + d xmlGetLastChild... + d pr extproc('xmlGetLastChild') + d like(xmlNodePtr) + d parent value like(xmlNodePtr) + + d xmlNodeIsText pr extproc('xmlNodeIsText') + d like(xmlCint) + d node value like(xmlNodePtr) + + d xmlIsBlankNode pr extproc('xmlIsBlankNode') + d like(xmlCint) + d node value like(xmlNodePtr) + + * Changing the structure. + + /if defined(LIBXML_TREE_ENABLED) + /define XML_TESTVAL + /elseif defined(LIBXML_WRITER_ENABLED) + /define XML_TESTVAL + /endif + /if defined(XML_TESTVAL) + d xmlDocSetRootElement... + d pr extproc('xmlDocSetRootElement') + d like(xmlNodePtr) + d doc value like(xmlDocPtr) + d root value like(xmlNodePtr) + + /undefine XML_TESTVAL + /endif + + /if defined(LIBXML_TREE_ENABLED) + d xmlNodeSetName pr extproc('xmlNodeSetName') + d node value like(xmlNodePtr) + d name * value options(*string) const xmlChar * + /endif LIBXML_TREE_ENABLED + + d xmlAddChild pr extproc('xmlAddChild') + d like(xmlNodePtr) + d parent value like(xmlNodePtr) + d cur value like(xmlNodePtr) + + d xmlAddChildList... + d pr extproc('xmlAddChildList') + d like(xmlNodePtr) + d parent value like(xmlNodePtr) + d cur value like(xmlNodePtr) + + /if defined(LIBXML_TREE_ENABLED) + /define XML_TESTVAL + /elseif defined(LIBXML_WRITER_ENABLED) + /define XML_TESTVAL + /endif + /if defined(XML_TESTVAL) + d xmlReplaceNode pr extproc('xmlReplaceNode') + d like(xmlNodePtr) + d old value like(xmlNodePtr) + d cur value like(xmlNodePtr) + + /undefine XML_TESTVAL + /endif + + /if defined(LIBXML_TREE_ENABLED) + /define XML_TESTVAL + /elseif defined(LIBXML_HTML_ENABLED) + /define XML_TESTVAL + /elseif defined(LIBXML_SCHEMAS_ENABLED) + /define XML_TESTVAL + /endif + /if defined(XML_TESTVAL) + d xmlAddPrevSibling... + d pr extproc('xmlAddPrevSibling') + d like(xmlNodePtr) + d cur value like(xmlNodePtr) + d elem value like(xmlNodePtr) + + /undefine XML_TESTVAL + /endif + + d xmlAddSibling pr extproc('xmlAddSibling') + d like(xmlNodePtr) + d cur value like(xmlNodePtr) + d elem value like(xmlNodePtr) + + d xmlAddNextSibling... + d pr extproc('xmlAddNextSibling') + d like(xmlNodePtr) + d cur value like(xmlNodePtr) + d elem value like(xmlNodePtr) + + d xmlUnlinkNode pr extproc('xmlUnlinkNode') + d cur value like(xmlNodePtr) + + d xmlTextMerge pr extproc('xmlTextMerge') + d like(xmlNodePtr) + d first value like(xmlNodePtr) + d second value like(xmlNodePtr) + + d xmlTextConcat pr extproc('xmlTextConcat') + d like(xmlCint) + d node value like(xmlNodePtr) + d content * value options(*string) const xmlChar * + d len value like(xmlCint) + + d xmlFreeNodeList... + d pr extproc('xmlFreeNodeList') + d cur value like(xmlNodePtr) + + d xmlFreeNode pr extproc('xmlFreeNode') + d cur value like(xmlNodePtr) + + d xmlSetTreeDoc pr extproc('xmlSetTreeDoc') + d tree value like(xmlNodePtr) + d doc value like(xmlDocPtr) + + d xmlSetListDoc pr extproc('xmlSetListDoc') + d list value like(xmlNodePtr) + d doc value like(xmlDocPtr) + + * Namespaces. + + d xmlSearchNs pr extproc('xmlSearchNs') + d like(xmlNsPtr) + d doc value like(xmlDocPtr) + d node value like(xmlNodePtr) + d nameSpace * value options(*string) const xmlChar * + + d xmlSearchNsByHref... + d pr extproc('xmlSearchNsByHref') + d like(xmlNsPtr) + d doc value like(xmlDocPtr) + d node value like(xmlNodePtr) + d href * value options(*string) const xmlChar * + + /if defined(LIBXML_TREE_ENABLED) + /define XML_TESTVAL + /elseif defined(LIBXML_XPATH_ENABLED) + /define XML_TESTVAL + /elseif defined(LIBXML_SCHEMAS_ENABLED) + /define XML_TESTVAL + /endif + /if defined(XML_TESTVAL) + d xmlGetNsList pr * extproc('xmlGetNsList') xmlNsPtr * + d doc value like(xmlDocPtr) + d node value like(xmlNodePtr) + + /undefine XML_TESTVAL + /endif + + d xmlSetNs pr extproc('xmlSetNs') + d node value like(xmlNodePtr) + d ns value like(xmlNsPtr) + + d xmlCopyNamespace... + d pr extproc('xmlCopyNamespace') + d like(xmlNsPtr) + d cur value like(xmlNsPtr) + + d xmlCopyNamespaceList... + d pr extproc('xmlCopyNamespaceList') + d like(xmlNsPtr) + d cur value like(xmlNsPtr) + + * Changing the content. + + /if defined(LIBXML_TREE_ENABLED) + /define XML_TESTVAL + /elseif defined(LIBXML_XINCLUDE_ENABLED) + /define XML_TESTVAL + /elseif defined(LIBXML_SCHEMAS_ENABLED) + /define XML_TESTVAL + /elseif defined(LIBXML_HTML_ENABLED) + /define XML_TESTVAL + /endif + /if defined(XML_TESTVAL) + d xmlSetProp pr extproc('xmlSetProp') + d like(xmlAttrPtr) + d node value like(xmlNodePtr) + d name * value options(*string) const xmlChar * + d value * value options(*string) const xmlChar * + + d xmlSetNsProp pr extproc('xmlSetNsProp') + d like(xmlAttrPtr) + d node value like(xmlNodePtr) + d ns value like(xmlNsPtr) + d name * value options(*string) const xmlChar * + d value * value options(*string) const xmlChar * + + /undefine XML_TESTVAL + /endif + + d xmlGetNoNsProp pr * extproc('xmlGetNoNsProp') xmlChar * + d node value like(xmlNodePtr) + d name * value options(*string) const xmlChar * + + d xmlGetProp pr * extproc('xmlGetProp') xmlChar * + d node value like(xmlNodePtr) + d name * value options(*string) const xmlChar * + + d xmlHasProp pr extproc('xmlHasProp') + d like(xmlAttrPtr) + d node value like(xmlNodePtr) + d name * value options(*string) const xmlChar * + + d xmlHasNsProp pr extproc('xmlHasNsProp') + d like(xmlAttrPtr) + d node value like(xmlNodePtr) + d name * value options(*string) const xmlChar * + d nameSpace * value options(*string) const xmlChar * + + d xmlGetNsProp pr * extproc('xmlGetNsProp') xmlChar * + d node value like(xmlNodePtr) + d name * value options(*string) const xmlChar * + d nameSpace * value options(*string) const xmlChar * + + d xmlStringGetNodeList... + d pr extproc('xmlStringGetNodeList') + d like(xmlNodePtr) + d doc value like(xmlDocPtr) + d value * value options(*string) const xmlChar * + + d xmlStringLenGetNodeList... + d pr extproc('xmlStringLenGetNodeList') + d like(xmlNodePtr) + d doc value like(xmlDocPtr) + d value * value options(*string) const xmlChar * + d len value like(xmlCint) + + d xmlNodeListGetString... + d pr * extproc('xmlNodeListGetString') xmlChar * + d doc value like(xmlDocPtr) + d list value like(xmlNodePtr) + d inLine value like(xmlCint) + + /if defined(LIBXML_TREE_ENABLED) + d xmlNodeListGetRawString... + d pr * extproc('xmlNodeListGetRawString') xmlChar * + d doc value like(xmlDocPtr) + d list value like(xmlNodePtr) + d inLine value like(xmlCint) + /endif LIBXML_TREE_ENABLED + + d xmlNodeSetContent... + d pr extproc('xmlNodeSetContent') + d cur value like(xmlNodePtr) + d content * value options(*string) const xmlChar * + + /if defined(LIBXML_TREE_ENABLED) + d xmlNodeSetContentLen... + d pr extproc('xmlNodeSetContentLen') + d cur value like(xmlNodePtr) + d content * value options(*string) const xmlChar * + d len value like(xmlCint) + /endif LIBXML_TREE_ENABLED + + d xmlNodeAddContent... + d pr extproc('xmlNodeAddContent') + d cur value like(xmlNodePtr) + d content * value options(*string) const xmlChar * + + d xmlNodeAddContentLen... + d pr extproc('xmlNodeAddContentLen') + d cur value like(xmlNodePtr) + d content * value options(*string) const xmlChar * + d len value like(xmlCint) + + d xmlNodeGetContent... + d pr * extproc('xmlNodeGetContent') xmlChar * + d cur value like(xmlNodePtr) + + d xmlNodeBufGetContent... + d pr extproc('xmlNodeBufGetContent') + d like(xmlCint) + d buffer value like(xmlBufferPtr) + d cur value like(xmlNodePtr) + + d xmlBufGetNodeContent... + d pr extproc('xmlBufGetNodeContent') + d like(xmlCint) + d buf value like(xmlBufPtr) + d cur value like(xmlNodePtr) + + d xmlNodeGetLang pr * extproc('xmlNodeGetLang') xmlChar * + d cur value like(xmlNodePtr) + + d xmlNodeGetSpacePreserve... + d pr extproc('xmlNodeGetSpacePreserve') + d like(xmlCint) + d cur value like(xmlNodePtr) + + /if defined(LIBXML_TREE_ENABLED) + d xmlNodeSetLang pr extproc('xmlNodeSetLang') + d cur value like(xmlNodePtr) + d lang * value options(*string) const xmlChar * + + d xmlNodeSetSpacePreserve... + d pr extproc('xmlNodeSetSpacePreserve') + d cur value like(xmlNodePtr) + d val value like(xmlCint) + /endif LIBXML_TREE_ENABLED + + d xmlNodeGetBase pr * extproc('xmlNodeGetBase') xmlChar * + d doc value like(xmlDocPtr) + d cur value like(xmlNodePtr) + + /if defined(LIBXML_TREE_ENABLED) + /define XML_TESTVAL + /elseif defined(LIBXML_XINCLUDE_ENABLED) + /define XML_TESTVAL + /endif + /if defined(XML_TESTVAL) + d xmlNodeSetBase pr extproc('xmlNodeSetBase') + d node value like(xmlNodePtr) + d uri * value options(*string) const xmlChar * + + /undefine XML_TESTVAL + /endif + + * Removing content. + + d xmlRemoveProp pr extproc('xmlRemoveProp') + d like(xmlCint) + d cur value like(xmlAttrPtr) + + /if defined(LIBXML_TREE_ENABLED) + /define XML_TESTVAL + /elseif defined(LIBXML_SCHEMAS_ENABLED) + /define XML_TESTVAL + /endif + /if defined(XML_TESTVAL) + d xmlUnsetNsProp pr extproc('xmlUnsetNsProp') + d like(xmlCint) + d node value like(xmlNodePtr) + d ns value like(xmlNsPtr) + d name * value options(*string) const xmlChar * + + d xmlUnsetProp pr extproc('xmlUnsetProp') + d like(xmlCint) + d node value like(xmlNodePtr) + d name * value options(*string) const xmlChar * + + /undefine XML_TESTVAL + /endif + + * Internal, don't use. + + d xmlBufferWriteCharacter... Warning: renamed + d pr extproc('xmlBufferWriteCHAR') + d buf value like(xmlBufferPtr) + d string * value options(*string) const xmlChar * + + d xmlBufferWriteChar... + d pr extproc('xmlBufferWriteChar') + d buf value like(xmlBufferPtr) + d string * value options(*string) const xmlChar * + + d xmlBufferWriteQuotedString... + d pr extproc('xmlBufferWriteQuotedString') + d buf value like(xmlBufferPtr) + d string * value options(*string) const xmlChar * + + /if defined(LIBXML_OUTPUT_ENABLED) + d xmlAttrSerializeTxtContent... + d pr extproc('xmlAttrSerializeTxtContent') + d buf value like(xmlBufferPtr) + d attr value like(xmlAttrPtr) + d string * value options(*string) const xmlChar * + /endif LIBXML_OUTPUT_ENABLD + + /if defined(LIBXML_TREE_ENABLED) + + * Namespace handling. + + d xmlReconciliateNs... + d pr extproc('xmlReconciliateNs') + d like(xmlCint) + d doc value like(xmlDocPtr) + d tree value like(xmlNodePtr) + /endif + + /if defined(LIBXML_OUTPUT_ENABLED) + + * Saving. + + d xmlDocDumpFormatMemory... + d pr extproc('xmlDocDumpFormatMemory') + d cur value like(xmlDocPtr) + d mem * xmlChar * (*) + d size like(xmlCint) + d format value like(xmlCint) + + d xmlDocDumpMemory... + d pr extproc('xmlDocDumpMemory') + d cur value like(xmlDocPtr) + d mem * xmlChar * (*) + d size like(xmlCint) + + d xmlDocDumpMemoryEnc... + d pr extproc('xmlDocDumpMemoryEnc') + d out_doc value like(xmlDocPtr) + d doc_txt_ptr * xmlChar * (*) + d doc_txt_len like(xmlCint) + d txt_encoding * value options(*string) const char * + + d xmlDocDumpFormatMemoryEnc... + d pr extproc('xmlDocDumpFormatMemoryEnc') + d out_doc value like(xmlDocPtr) + d doc_txt_ptr * xmlChar * (*) + d doc_txt_len like(xmlCint) + d txt_encoding * value options(*string) const char * + d format value like(xmlCint) + + d xmlDocFormatDump... + d pr extproc('xmlDocFormatDump') + d like(xmlCint) + d f * value FILE * + d cur value like(xmlDocPtr) + d format value like(xmlCint) + + d xmlDocDump pr extproc('xmlDocDump') + d like(xmlCint) + d f * value FILE * + d cur value like(xmlDocPtr) + + d xmlElemDump pr extproc('xmlElemDump') + d f * value FILE * + d doc value like(xmlDocPtr) + d cur value like(xmlNodePtr) + + d xmlSaveFile pr extproc('xmlSaveFile') + d like(xmlCint) + d filename * value options(*string) const char * + d cur value like(xmlDocPtr) + + d xmlSaveFormatFile... + d pr extproc('xmlSaveFormatFile') + d like(xmlCint) + d filename * value options(*string) const char * + d cur value like(xmlDocPtr) + d format value like(xmlCint) + + d xmlBufNodeDump pr extproc('xmlBufNodeDump') + d like(xmlCsize_t) + d buf value like(xmlBufPtr) + d doc value like(xmlDocPtr) + d cur value like(xmlNodePtr) + d level value like(xmlCint) + d format value like(xmlCint) + + d xmlNodeDump pr extproc('xmlNodeDump') + d like(xmlCint) + d buf value like(xmlBufferPtr) + d doc value like(xmlDocPtr) + d cur value like(xmlNodePtr) + d level value like(xmlCint) + d format value like(xmlCint) + + d xmlSaveFileTo pr extproc('xmlSaveFileTo') + d like(xmlCint) + d buf value like(xmlOutputBufferPtr) + d cur value like(xmlDocPtr) + d encoding * value options(*string) const char * + + d xmlSaveFormatFileTo... + d pr extproc('xmlSaveFormatFileTo') + d like(xmlCint) + d buf value like(xmlOutputBufferPtr) + d cur value like(xmlDocPtr) + d encoding * value options(*string) const char * + d format value like(xmlCint) + + d xmlNodeDumpOutput... + d pr extproc('xmlNodeDumpOutput') + d buf value like(xmlOutputBufferPtr) + d doc value like(xmlDocPtr) + d cur value like(xmlNodePtr) + d level value like(xmlCint) + d format value like(xmlCint) + d encoding * value options(*string) const char * + + d xmlSaveFormatFileEnc... + d pr extproc('xmlSaveFormatFileEnc') + d like(xmlCint) + d filename * value options(*string) const char * + d cur value like(xmlDocPtr) + d encoding * value options(*string) const char * + d format value like(xmlCint) + + d xmlSaveFileEnc pr extproc('xmlSaveFileEnc') + d like(xmlCint) + d filename * value options(*string) const char * + d cur value like(xmlDocPtr) + d encoding * value options(*string) const char * + /endif LIBXML_OUTPUT_ENABLD + + * XHTML + + d xmlIsXHTML pr extproc('xmlIsXHTML') + d like(xmlCint) + d systemID * value options(*string) const xmlChar * + d publicID * value options(*string) const xmlChar * + + * Compression. + + d xmlGetDocCompressMode... + d pr extproc('xmlGetDocCompressMode') + d like(xmlCint) + d doc value like(xmlDocPtr) + + d xmlSetDocCompressMode... + d pr extproc('xmlSetDocCompressMode') + d doc value like(xmlDocPtr) + d mode value like(xmlCint) + + d xmlGetCompressMode... + d pr extproc('xmlGetCompressMode') + d like(xmlCint) + + d xmlSetCompressMode... + d pr extproc('xmlSetCompressMode') + d mode value like(xmlCint) + + * DOM-wrapper helper functions. + + d xmlDOMWrapNewCtxt... + d pr extproc('xmlDOMWrapNewCtxt') + d like(xmlDOMWrapCtxtPtr) + + d xmlDOMWrapFreeCtxt... + d pr extproc('xmlDOMWrapFreeCtxt') + d ctxt value like(xmlDOMWrapCtxtPtr) + + d xmlDOMWrapReconcileNamespaces... + d pr extproc( + d 'xmlDOMWrapReconcileNamespaces') + d like(xmlCint) + d ctxt value like(xmlDOMWrapCtxtPtr) + d elem value like(xmlNodePtr) + d options value like(xmlCint) + + d xmlDOMWrapAdoptNode... + d pr extproc('xmlDOMWrapAdoptNode') + d like(xmlCint) + d ctxt value like(xmlDOMWrapCtxtPtr) + d sourceDoc value like(xmlDocPtr) + d node value like(xmlNodePtr) + d destDoc value like(xmlDocPtr) + d destParent value like(xmlNodePtr) + d options value like(xmlCint) + + d xmlDOMWrapRemoveNode... + d pr extproc('xmlDOMWrapRemoveNode') + d like(xmlCint) + d ctxt value like(xmlDOMWrapCtxtPtr) + d doc value like(xmlDocPtr) + d node value like(xmlNodePtr) + d options value like(xmlCint) + + d xmlDOMWrapCloneNode... + d pr extproc('xmlDOMWrapCloneNode') + d like(xmlCint) + d ctxt value like(xmlDOMWrapCtxtPtr) + d sourceDoc value like(xmlDocPtr) + d node value like(xmlNodePtr) + d clonedNode like(xmlNodePtr) + d destDoc value like(xmlDocPtr) + d destParent value like(xmlNodePtr) + d options value like(xmlCint) + + /if defined(LIBXML_TREE_ENABLED) + + * 5 interfaces from DOM ElementTraversal, but different in entities + * traversal. + + d xmlChildElementCount... + d pr extproc('xmlChildElementCount') + d like(xmlClong) + d parent value like(xmlNodePtr) + + d xmlNextElementSibling... + d pr extproc('xmlNextElementSibling') + d like(xmlNodePtr) + d node value like(xmlNodePtr) + + d xmlFirstElementChild... + d pr extproc('xmlFirstElementChild') + d like(xmlNodePtr) + d parent value like(xmlNodePtr) + + d xmlLastElementChild... + d pr extproc('xmlLastElementChild') + d like(xmlNodePtr) + d parent value like(xmlNodePtr) + + d xmlPreviousElementSibling... + d pr extproc('xmlPreviousElementSibling') + d like(xmlNodePtr) + d node value like(xmlNodePtr) + /endif + + /if not defined(XML_PARSER_H__) + /include "libxmlrpg/xmlmemory" + /endif + + /endif XML_TREE_H__ diff --git a/os400/libxmlrpg/uri.rpgle b/os400/libxmlrpg/uri.rpgle new file mode 100644 index 0000000..de03392 --- /dev/null +++ b/os400/libxmlrpg/uri.rpgle @@ -0,0 +1,103 @@ + * Summary: library of generic URI related routines + * Description: library of generic URI related routines + * Implements RFC 2396 + * + * Copy: See Copyright for the status of this software. + * + * Author: Patrick Monnerat , DATASPHERE S.A. + + /if not defined(XML_URI_H__) + /define XML_URI_H__ + + /include "libxmlrpg/xmlversion" + /include "libxmlrpg/xmlTypesC" + /include "libxmlrpg/tree" + + * xmlURI: + * + * A parsed URI reference. This is a struct containing the various fields + * as described in RFC 2396 but separated for further processing. + * + * Note: query is a deprecated field which is incorrectly unescaped. + * query_raw takes precedence over query if the former is set. + * See: http://mail.gnome.org/archives/xml/2007-April/thread.html#00127 + + d xmlURIPtr s * based(######typedef######) + + d xmlURI ds based(xmlURIPtr) + d align qualified + d scheme * char * + d opaque * char * + d authority * char * + d server * char * + d user * char * + d port like(xmlCint) + d path * char * + d query * char * + d fragment * char * + d cleanup like(xmlCint) + d query_raw * char * + + d xmlCreateURI pr extproc('xmlCreateURI') + d like(xmlURIPtr) + + d xmlBuildURI pr * extproc('xmlBuildURI') xmlChar * + d URI * value options(*string) const xmlChar * + d base * value options(*string) const xmlChar * + + d xmlBuildRelativeURI... + d pr * extproc('xmlBuildRelativeURI') xmlChar * + d URI * value options(*string) const xmlChar * + d base * value options(*string) const xmlChar * + + d xmlParseURI pr extproc('xmlParseURI') + d like(xmlURIPtr) + d str * value options(*string) const char * + + d xmlParseURIRaw pr extproc('xmlParseURIRaw') + d like(xmlURIPtr) + d str * value options(*string) const char * + d raw value like(xmlCint) + + d xmlParseURIReference... + d pr extproc('xmlParseURIReference') + d like(xmlCint) + d uri value like(xmlURIPtr) + d str * value options(*string) const char * + + d xmlSaveUri pr * extproc('xmlSaveUri') xmlChar * + d uri value like(xmlURIPtr) + + d xmlPrintURI pr extproc('xmlPrintURI') + d stream * value FILE * + d uri value like(xmlURIPtr) + + d xmlURIEscapeStr... + d pr * extproc('xmlURIEscapeStr') xmlChar * + d str * value options(*string) const xmlChar * + d list * value options(*string) const xmlChar * + + d xmlURIUnescapeString... + d pr * extproc('xmlURIUnescapeString') char * + d str * value options(*string) const char * + d len value like(xmlCint) + d target * value options(*string) char * + + d xmlNormalizeURIPath... + d pr extproc('xmlNormalizeURIPath') + d like(xmlCint) + d path * value options(*string) char * + + d xmlURIEscape pr * extproc('xmlURIEscape') xmlChar * + d str * value options(*string) const xmlChar * + + d xmlFreeURI pr extproc('xmlFreeURI') + d uri value like(xmlURIPtr) + + d xmlCanonicPath pr * extproc('xmlCanonicPath') xmlChar * + d path * value options(*string) const xmlChar * + + d xmlPathToURI pr * extproc('xmlPathToURI') xmlChar * + d path * value options(*string) const xmlChar * + + /endif XML_URI_H__ diff --git a/os400/libxmlrpg/valid.rpgle b/os400/libxmlrpg/valid.rpgle new file mode 100644 index 0000000..32ebbd3 --- /dev/null +++ b/os400/libxmlrpg/valid.rpgle @@ -0,0 +1,605 @@ + * Summary: The DTD validation + * Description: API for the DTD handling and the validity checking + * + * Copy: See Copyright for the status of this software. + * + * Author: Patrick Monnerat , DATASPHERE S.A. + + /if not defined(XML_VALID_H__) + /define XML_VALID_H__ + + /include "libxmlrpg/xmlversion" + /include "libxmlrpg/xmlTypesC" + /include "libxmlrpg/xmlerror" + /include "libxmlrpg/tree" + /include "libxmlrpg/list" + /include "libxmlrpg/xmlautomata" + /include "libxmlrpg/xmlregexp" + + * Validation state added for non-determinist content model. + + d xmlValidStatePtr... + d s * based(######typedef######) + + * xmlValidityErrorFunc: + * @ctx: usually an xmlValidCtxtPtr to a validity error context, + * but comes from ctxt->userData (which normally contains such + * a pointer); ctxt->userData can be changed by the user. + * @msg: the string to format *printf like vararg + * @...: remaining arguments to the format + * + * Callback called when a validity error is found. This is a message + * oriented function similar to an *printf function. + + d xmlValidityErrorFunc... + d s * based(######typedef######) + d procptr + + * xmlValidityWarningFunc: + * @ctx: usually an xmlValidCtxtPtr to a validity error context, + * but comes from ctxt->userData (which normally contains such + * a pointer); ctxt->userData can be changed by the user. + * @msg: the string to format *printf like vararg + * @...: remaining arguments to the format + * + * Callback called when a validity warning is found. This is a message + * oriented function similar to an *printf function. + + d xmlValidityWarningFunc... + d s * based(######typedef######) + d procptr + + * xmlValidCtxt: + * An xmlValidCtxt is used for error reporting when validating. + + d xmlValidCtxtPtr... + d s * based(######typedef######) + + d xmlValidCtxt ds based(xmlValidCtxtPtr) + d align qualified + d userdata * void * + d error like(xmlValidityErrorFunc) Error callback + d warning like(xmlValidityWarningFunc) Warning callback + * + * Node analysis stack used when validating within entities + * + d node like(xmlNodePtr) Current parsed Node + d nodeNr like(xmlCint) Parsing stack depth + d nodeMax like(xmlCint) Max stack depth + d nodeTab * xmlNodePtr * + * + d finishDtd like(xmlCuint) + d doc like(xmlDocPtr) The document + d valid like(xmlCint) Temp check result + * + * state state used for non-determinist content validation + * + d vstate * xmlValidState * + d vstateNr like(xmlCint) Validat. stack depth + d vstateMax like(xmlCint) Max stack depth + d vstateTab * xmlValidState * + * + /if defined(LIBXML_REGEXP_ENABLED) + d am like(xmlAutomataPtr) The automata + d state like(xmlAutomataStatePtr) Automata build state + /else + d am * + d state * + /endif + + * ALL notation declarations are stored in a table. + * There is one table per DTD. + + d xmlNotationTablePtr... + d s * based(######typedef######) + + * ALL element declarations are stored in a table. + * There is one table per DTD. + + d xmlElementTablePtr... + d s * based(######typedef######) + + * ALL attribute declarations are stored in a table. + * There is one table per DTD. + + d xmlAttributeTablePtr... + d s * based(######typedef######) + + * ALL IDs attributes are stored in a table. + * There is one table per document. + + d xmlIDTablePtr s * based(######typedef######) + + * ALL Refs attributes are stored in a table. + * There is one table per document. + + d xmlRefTablePtr s * based(######typedef######) + + * Notation + + d xmlAddNotationDecl... + d pr extproc('xmlAddNotationDecl') + d like(xmlNotationPtr) + d ctxt value like(xmlValidCtxtPtr) + d dtd value like(xmlDtdPtr) + d name * value options(*string) const xmlChar * + d PublicID * value options(*string) const xmlChar * + d SystemID * value options(*string) const xmlChar * + + /if defined(LIBXML_TREE_ENABLED) + d xmlCopyNotationTable... + d pr extproc('xmlCopyNotationTable') + d like(xmlNotationPtr) + d table value like(xmlNotationTablePtr) + /endif LIBXML_TREE_ENABLED + + d xmlFreeNotationTable... + d pr extproc('xmlFreeNotationTable') + d table value like(xmlNotationTablePtr) + + /if defined(LIBXML_OUTPUT_ENABLED) + d xmlDumpNotationDecl... + d pr extproc('xmlDumpNotationDecl') + d buf value like(xmlBufferPtr) + d nota value like(xmlNotationPtr) + + d xmlDumpNotationTable... + d pr extproc('xmlDumpNotationTable') + d buf value like(xmlBufferPtr) + d table value like(xmlNotationTablePtr) + /endif LIBXML_OUTPUT_ENABLD + + * Element Content + * the non Doc version are being deprecated + + d xmlNewElementContent... + d pr extproc('xmlNewElementContent') + d like(xmlElementContentPtr) + d name * value const xmlChar * + d type value like(xmlElementContentType) + + d xmlCopyElementContent... + d pr extproc('xmlCopyElementContent') + d like(xmlElementContentPtr) + d content value like(xmlElementContentPtr) + + d xmlFreeElementContent... + d pr extproc('xmlFreeElementContent') + d cur value like(xmlElementContentPtr) + + * the new versions with doc argument + + d xmlNewDocElementContent... + d pr extproc('xmlNewDocElementContent') + d like(xmlElementContentPtr) + d doc value like(xmlDocPtr) + d name * value const xmlChar * + d type value like(xmlElementContentType) + + d xmlCopyDocElementContent... + d pr extproc('xmlCopyDocElementContent') + d like(xmlElementContentPtr) + d doc value like(xmlDocPtr) + d content value like(xmlElementContentPtr) + + d xmlFreeDocElementContent... + d pr extproc('xmlFreeDocElementContent') + d doc value like(xmlDocPtr) + d cur value like(xmlElementContentPtr) + + d xmlSnprintfElementContent... + d pr extproc('xmlSnprintfElementContent') + d buf 65535 options(*varsize) + d size value like(xmlCint) + d content value like(xmlElementContentPtr) + d englob value like(xmlCint) + + /if defined(LIBXML_OUTPUT_ENABLED) + * DEPRECATED + d xmlSprintfElementContent... + d pr extproc('xmlSprintfElementContent') + d buf 65535 options(*varsize) + d content value like(xmlElementContentPtr) + d englob value like(xmlCint) + /endif LIBXML_OUTPUT_ENABLD + + * DEPRECATED + + * Element + + d xmlAddElementDecl... + d pr extproc('xmlAddElementDecl') + d like(xmlElementPtr) + d ctxt value like(xmlValidCtxtPtr) + d dtd value like(xmlDtdPtr) + d name * value options(*string) const xmlChar * + d type value like(xmlElementTypeVal) + d content value like(xmlElementContentPtr) + + /if defined(LIBXML_TREE_ENABLED) + d xmlCopyElementTable... + d pr extproc('xmlCopyElementTable') + d like(xmlElementTablePtr) + d table value like(xmlElementTablePtr) + /endif LIBXML_TREE_ENABLED + + d xmlFreeElementTable... + d pr extproc('xmlFreeElementTable') + d table value like(xmlElementTablePtr) + + /if defined(LIBXML_OUTPUT_ENABLED) + d xmlDumpElementTable... + d pr extproc('xmlDumpElementTable') + d buf value like(xmlBufferPtr) + d table value like(xmlElementTablePtr) + + d xmlDumpElementDecl... + d pr extproc('xmlDumpElementDecl') + d buf value like(xmlBufferPtr) + d elem value like(xmlElementPtr) + /endif LIBXML_OUTPUT_ENABLD + + * Enumeration + + d xmlCreateEnumeration... + d pr extproc('xmlCreateEnumeration') + d like(xmlEnumerationPtr) + d name * value options(*string) const xmlChar * + + d xmlFreeEnumeration... + d pr extproc('xmlFreeEnumeration') + d cur value like(xmlEnumerationPtr) + + /if defined(LIBXML_TREE_ENABLED) + d xmlCopyEnumeration... + d pr extproc('xmlCopyEnumeration') + d like(xmlEnumerationPtr) + d cur value like(xmlEnumerationPtr) + /endif LIBXML_TREE_ENABLED + + * Attribute + + d xmlAddAttributeDecl... + d pr extproc('xmlAddAttributeDecl') + d like(xmlAttributePtr) + d ctxt value like(xmlValidCtxtPtr) + d dtd value like(xmlDtdPtr) + d elem * value options(*string) const xmlChar * + d name * value options(*string) const xmlChar * + d ns * value options(*string) const xmlChar * + d type value like(xmlAttributeType) + d def value like(xmlAttributeDefault) + d defaultValue * value options(*string) const xmlChar * + d tree value like(xmlEnumerationPtr) + + /if defined(LIBXML_TREE_ENABLED) + d xmlCopyAttributeTable... + d pr extproc('xmlCopyAttributeTable') + d like(xmlAttributeTablePtr) + d table value like(xmlAttributeTablePtr) + /endif LIBXML_TREE_ENABLED + + d xmlFreeAttributeTable... + d pr extproc('xmlFreeAttributeTable') + d table value like(xmlAttributeTablePtr) + + /if defined(LIBXML_OUTPUT_ENABLED) + d xmlDumpAttributeTable... + d pr extproc('xmlDumpAttributeTable') + d buf value like(xmlBufferPtr) + d table value like(xmlAttributeTablePtr) + + d xmlDumpAttributeDecl... + d pr extproc('xmlDumpAttributeDecl') + d buf value like(xmlBufferPtr) + d attr value like(xmlAttributePtr) + /endif LIBXML_OUTPUT_ENABLD + + * IDs + + d xmlAddID pr extproc('xmlAddID') + d like(xmlIDPtr) + d ctxt value like(xmlValidCtxtPtr) + d doc value like(xmlDocPtr) + d value * value options(*string) const xmlChar * + d attr value like(xmlAttrPtr) + + d xmlFreeIdTable pr extproc('xmlFreeIDTable') + d table value like(xmlIDTablePtr) + + d xmlGetID pr extproc('xmlGetID') + d like(xmlAttrPtr) + d doc value like(xmlDocPtr) + d ID * value options(*string) const xmlChar * + + d xmlIsID pr extproc('xmlIsID') + d like(xmlCint) + d doc value like(xmlDocPtr) + d node value like(xmlNodePtr) + d attr value like(xmlAttrPtr) + + d xmlRemoveID pr extproc('xmlRemoveID') + d like(xmlCint) + d doc value like(xmlDocPtr) + d attr value like(xmlAttrPtr) + + * IDREFs + + d xmlAddRef pr extproc('xmlAddRef') + d like(xmlRefPtr) + d ctxt value like(xmlValidCtxtPtr) + d doc value like(xmlDocPtr) + d value * value options(*string) const xmlChar * + d attr value like(xmlAttrPtr) + + d xmlFreeRefTable... + d pr extproc('xmlFreeRefTable') + d table value like(xmlRefTablePtr) + + d xmlIsRef pr extproc('xmlIsRef') + d like(xmlCint) + d doc value like(xmlDocPtr) + d node value like(xmlNodePtr) + d attr value like(xmlAttrPtr) + + d xmlRemoveRef pr extproc('xmlRemoveRef') + d like(xmlCint) + d doc value like(xmlDocPtr) + d attr value like(xmlAttrPtr) + + d xmlGetRefs pr extproc('xmlGetRefs') + d like(xmlListPtr) + d doc value like(xmlDocPtr) + d ID * value options(*string) const xmlChar * + + * The public function calls related to validity checking. + + /if defined(LIBXML_VALID_ENABLED) + * Allocate/Release Validation Contexts + + d xmlNewValidCtxt... + d pr extproc('xmlNewValidCtxt') + d like(xmlValidCtxtPtr) + + d xmlFreeValidCtxt... + d pr extproc('xmlFreeValidCtxt') + d ctxt value like(xmlValidCtxtPtr) + + d xmlValidateRoot... + d pr extproc('xmlValidateRoot') + d like(xmlCint) + d ctxt value like(xmlValidCtxtPtr) + d doc value like(xmlDocPtr) + + d xmlValidateElementDecl... + d pr extproc('xmlValidateElementDecl') + d like(xmlCint) + d ctxt value like(xmlValidCtxtPtr) + d doc value like(xmlDocPtr) + d elem value like(xmlElementPtr) + + d xmlValidNormalizeAttributeValue... + d pr * extproc( xmlChar * + d 'xmlValidNormalizeAttributeValue') + d doc value like(xmlDocPtr) + d elem value like(xmlNodePtr) + d name * value options(*string) const xmlChar * + d value * value options(*string) const xmlChar * + + d xmlValidCtxtNormalizeAttributeValue... + d pr * extproc('xmlValidCtxt+ xmlChar * + d NormalizeAttributeValue') + d ctxt value like(xmlValidCtxtPtr) + d doc value like(xmlDocPtr) + d elem value like(xmlNodePtr) + d name * value options(*string) const xmlChar * + d value * value options(*string) const xmlChar * + + d xmlValidateAttributeDecl... + d pr extproc('xmlValidateAttributeDecl') + d like(xmlCint) + d ctxt value like(xmlValidCtxtPtr) + d doc value like(xmlDocPtr) + d attr value like(xmlAttributePtr) + + d xmlValidateAttributeValue... + d pr extproc('xmlValidateAttributeValue') + d like(xmlCint) + d type value like(xmlAttributeType) + d value * value options(*string) const xmlChar * + + d xmlValidateNotationDecl... + d pr extproc('xmlValidateNotationDecl') + d like(xmlCint) + d ctxt value like(xmlValidCtxtPtr) + d doc value like(xmlDocPtr) + d nota value like(xmlNotationPtr) + + d xmlValidateDtd pr extproc('xmlValidateDtd') + d like(xmlCint) + d ctxt value like(xmlValidCtxtPtr) + d doc value like(xmlDocPtr) + d dtd value like(xmlDtdPtr) + + d xmlValidateDtdFinal... + d pr extproc('xmlValidateDtdFinal') + d like(xmlCint) + d ctxt value like(xmlValidCtxtPtr) + d doc value like(xmlDocPtr) + + d xmlValidateDocument... + d pr extproc('xmlValidateDocument') + d like(xmlCint) + d ctxt value like(xmlValidCtxtPtr) + d doc value like(xmlDocPtr) + + d xmlValidateElement... + d pr extproc('xmlValidateElement') + d like(xmlCint) + d ctxt value like(xmlValidCtxtPtr) + d doc value like(xmlDocPtr) + d elem value like(xmlNodePtr) + + d xmlValidateOneElement... + d pr extproc('xmlValidateOneElement') + d like(xmlCint) + d ctxt value like(xmlValidCtxtPtr) + d doc value like(xmlDocPtr) + d elem value like(xmlNodePtr) + + d xmlValidateOneAttribute... + d pr extproc('xmlValidateOneAttribute') + d like(xmlCint) + d ctxt value like(xmlValidCtxtPtr) + d doc value like(xmlDocPtr) + d elem value like(xmlNodePtr) + d attr value like(xmlAttrPtr) + d value * value options(*string) const xmlChar * + + d xmlValidateOneNamespace... + d pr extproc('xmlValidateOneNamespace') + d like(xmlCint) + d ctxt value like(xmlValidCtxtPtr) + d doc value like(xmlDocPtr) + d elem value like(xmlNodePtr) + d prefix * value options(*string) const xmlChar * + d ns value like(xmlNsPtr) + d value * value options(*string) const xmlChar * + + d xmlValidateDocumentFinal... + d pr extproc('xmlValidateDocumentFinal') + d like(xmlCint) + d ctxt value like(xmlValidCtxtPtr) + d doc value like(xmlDocPtr) + /endif LIBXML_VALID_ENABLED + + /undefine XML_TESTVAL + /if defined(LIBXML_VALID_ENABLED) + /define XML_TESTVAL + /elseif defined(LIBXML_SCHEMAS_ENABLED) + /define XML_TESTVAL + /endif + /if defined(XML_TESTVAL) + d xmlValidateNotationUse... + d pr extproc('xmlValidateNotationUse') + d like(xmlCint) + d ctxt value like(xmlValidCtxtPtr) + d doc value like(xmlDocPtr) + d notationName * value options(*string) const xmlChar * + + /undefine XML_TESTVAL + /endif + + d xmlIsMixedElement... + d pr extproc('xmlIsMixedElement') + d like(xmlCint) + d doc value like(xmlDocPtr) + d name * value options(*string) const xmlChar * + + d xmlGetDtdAttrDesc... + d pr extproc('xmlGetDtdAttrDesc') + d like(xmlAttributePtr) + d dtd value like(xmlDtdPtr) + d elem * value options(*string) const xmlChar * + d name * value options(*string) const xmlChar * + + d xmlGetDtdQAttrDesc... + d pr extproc('xmlGetDtdQAttrDesc') + d like(xmlAttributePtr) + d dtd value like(xmlDtdPtr) + d elem * value options(*string) const xmlChar * + d name * value options(*string) const xmlChar * + d prefix * value options(*string) const xmlChar * + + d xmlGetDtdNotationDesc... + d pr extproc('xmlGetDtdNotationDesc') + d like(xmlNotationPtr) + d dtd value like(xmlDtdPtr) + d name * value options(*string) const xmlChar * + + d xmlGetDtdQElementDesc... + d pr extproc('xmlGetDtdQElementDesc') + d like(xmlElementPtr) + d dtd value like(xmlDtdPtr) + d name * value options(*string) const xmlChar * + d prefix * value options(*string) const xmlChar * + + d xmlGetDtdElementDesc... + d pr extproc('xmlGetDtdElementDesc') + d like(xmlElementPtr) + d dtd value like(xmlDtdPtr) + d name * value options(*string) const xmlChar * + + /if defined(LIBXML_VALID_ENABLED) + d xmlValidGetPotentialChildren... + d pr extproc( + d 'xmlValidGetPotentialChildren') + d like(xmlCint) + d ctree * value xmlElementContent * + d names * const xmlChar *(*) + d len like(xmlCint) + d max value like(xmlCint) + + d xmlValidGetValidElements... + d pr extproc('xmlValidGetValidElements') + d like(xmlCint) + d prev like(xmlNodePtr) + d next like(xmlNodePtr) + d names * const xmlChar *(*) + d max value like(xmlCint) + + d xmlValidateNameValue... + d pr extproc('xmlValidateNameValue') + d like(xmlCint) + d value * value options(*string) const xmlChar * + + d xmlValidateNamesValue... + d pr extproc('xmlValidateNamesValue') + d like(xmlCint) + d value * value options(*string) const xmlChar * + + d xmlValidateNmtokenValue... + d pr extproc('xmlValidateNmtokenValue') + d like(xmlCint) + d value * value options(*string) const xmlChar * + + d xmlValidateNmtokensValue... + d pr extproc('xmlValidateNmtokensValue') + d like(xmlCint) + d value * value options(*string) const xmlChar * + + /if defined(LIBXML_REGEXP_ENABLED) + * Validation based on the regexp support + + d xmlValidBuildContentModel... + d pr extproc('xmlValidBuildContentModel') + d like(xmlCint) + d ctxt value like(xmlValidCtxtPtr) + d elem value like(xmlElementPtr) + + d xmlValidatePushElement... + d pr extproc('xmlValidatePushElement') + d like(xmlCint) + d ctxt value like(xmlValidCtxtPtr) + d doc value like(xmlDocPtr) + d elem value like(xmlNodePtr) + d qname * value options(*string) const xmlChar * + + d xmlValidatePushCData... + d pr extproc('xmlValidatePushCData') + d like(xmlCint) + d ctxt value like(xmlValidCtxtPtr) + d data * value options(*string) const xmlChar * + d len value like(xmlCint) + + d xmlValidatePopElement... + d pr extproc('xmlValidatePopElement') + d like(xmlCint) + d ctxt value like(xmlValidCtxtPtr) + d doc value like(xmlDocPtr) + d elem value like(xmlNodePtr) + d qname * value options(*string) const xmlChar * + + /endif LIBXML_REGEXP_ENABLD + /endif LIBXML_VALID_ENABLED + /endif XML_VALID_H__ diff --git a/os400/libxmlrpg/xinclude.rpgle b/os400/libxmlrpg/xinclude.rpgle new file mode 100644 index 0000000..93b7c51 --- /dev/null +++ b/os400/libxmlrpg/xinclude.rpgle @@ -0,0 +1,156 @@ + * Summary: implementation of XInclude + * Description: API to handle XInclude processing, + * implements the + * World Wide Web Consortium Last Call Working Draft 10 November 2003 + * http://www.w3.org/TR/2003/WD-xinclude-20031110 + * + * Copy: See Copyright for the status of this software. + * + * Author: Patrick Monnerat , DATASPHERE S.A. + + /if not defined(XML_XINCLUDE_H__) + /define XML_XINCLUDE_H__ + + /include "libxmlrpg/xmlversion" + /include "libxmlrpg/xmlTypesC" + /include "libxmlrpg/tree" + + /if defined(LIBXML_XINCLUDE_ENABLED) + + * XINCLUDE_NS: + * + * Macro defining the Xinclude namespace: http://www.w3.org/2003/XInclude + + d XINCLUDE_NS c 'http://www.w3.org/2003/XInclude' + + + * XINCLUDE_OLD_NS: + * + * Define the draft Xinclude namespace: http://www.w3.org/2001/XInclude + + d XINCLUDE_OLD_NS... + d c 'http://www.w3.org/2001/XInclude' + + * XINCLUDE_NODE: + * + * Macro defining "include" + + d XINCLUDE_NODE c 'include' + + * XINCLUDE_FALLBACK: + * + * Macro defining "fallback" + + d XINCLUDE_FALLBACK... + d c 'fallback' + + * XINCLUDE_HREF: + * + * Macro defining "href" + + d XINCLUDE_HREF c 'href' + + * XINCLUDE_PARSE: + * + * Macro defining "parse" + + d XINCLUDE_PARSE c 'parse' + + * XINCLUDE_PARSE_XML: + * + * Macro defining "xml" + + d XINCLUDE_PARSE_XML... + d c 'xml' + + * XINCLUDE_PARSE_TEXT: + * + * Macro defining "text" + + d XINCLUDE_PARSE_TEXT... + d c 'text' + + * XINCLUDE_PARSE_ENCODING: + * + * Macro defining "encoding" + + d XINCLUDE_PARSE_ENCODING... + d c 'encoding' + + * XINCLUDE_PARSE_XPOINTER: + * + * Macro defining "xpointer" + + d XINCLUDE_PARSE_XPOINTER... + d c 'xpointer' + + d xmlXIncludeCtxtPtr... + d s * based(######typedef######) + + * standalone processing + + d xmlXIncludeProcess... + d pr extproc('xmlXIncludeProcess') + d like(xmlCint) + d doc value like(xmlDocPtr) + + d xmlXIncludeProcessFlags... + d pr extproc('xmlXIncludeProcessFlags') + d like(xmlCint) + d doc value like(xmlDocPtr) + d flags value like(xmlCint) + + d xmlXIncludeProcessFlagsData... + d pr extproc( + d 'xmlXIncludeProcessFlagsData') + d like(xmlCint) + d doc value like(xmlDocPtr) + d flags value like(xmlCint) + d data * value void * + + d xmlXIncludeProcessTreeFlagsData... + d pr extproc( + d 'xmlXIncludeProcessTreeFlagsData') + d like(xmlCint) + d tree value like(xmlNodePtr) + d flags value like(xmlCint) + d data * value void * + + d xmlXIncludeProcessTree... + d pr extproc('xmlXIncludeProcessTree') + d like(xmlCint) + d tree value like(xmlNodePtr) + + d xmlXIncludeProcessTreeFlags... + d pr extproc( + d 'xmlXIncludeProcessTreeFlags') + d like(xmlCint) + d tree value like(xmlNodePtr) + d flags value like(xmlCint) + + + * contextual processing + + d xmlXIncludeNewContext... + d pr extproc('xmlXIncludeNewContext') + d like(xmlXIncludeCtxtPtr) + d doc value like(xmlDocPtr) + + d xmlXIncludeSetFlags... + d pr extproc('xmlXIncludeSetFlags') + d like(xmlCint) + d ctxt value like(xmlXIncludeCtxtPtr) + d flags value like(xmlCint) + + d xmlXIncludeFreeContext... + d pr extproc('xmlXIncludeFreeContext') + d ctxt value like(xmlXIncludeCtxtPtr) + + d xmlXIncludeProcessNode... + d pr extproc('xmlXIncludeProcessNode') + d like(xmlCint) + d ctxt value like(xmlXIncludeCtxtPtr) + d tree value like(xmlNodePtr) + + /endif XINCLUDE_ENABLED + /endif XML_XINCLUDE_H__ diff --git a/os400/libxmlrpg/xlink.rpgle b/os400/libxmlrpg/xlink.rpgle new file mode 100644 index 0000000..e6ebdc6 --- /dev/null +++ b/os400/libxmlrpg/xlink.rpgle @@ -0,0 +1,169 @@ + * Summary: unfinished XLink detection module + * Description: unfinished XLink detection module + * + * Copy: See Copyright for the status of this software. + * + * Author: Patrick Monnerat , DATASPHERE S.A. + + /if not defined(XML_XLINK_H__) + /define XML_XLINK_H__ + + /include "libxmlrpg/xmlversion" + + /if defined(LIBXML_XPTR_ENABLED) + + /include "libxmlrpg/xmlTypesC" + /include "libxmlrpg/tree" + + * Various defines for the various Link properties. + * + * NOTE: the link detection layer will try to resolve QName expansion + * of namespaces. If "foo" is the prefix for "http://foo.com/" + * then the link detection layer will expand role="foo:myrole" + * to "http://foo.com/:myrole". + * NOTE: the link detection layer will expand URI-Refences found on + * href attributes by using the base mechanism if found. + + d xlinkRef s * based(######typedef######) xmlChar * + d xlinkRole s * based(######typedef######) xmlChar * + d xlinkTitle s * based(######typedef######) xmlChar * + + d xlinkType s based(######typedef######) + d like(xmlCenum) + d XLINK_TYPE_NONE... + d c 0 + d XLINK_TYPE_SIMPLE... + d c 1 + d XLINK_TYPE_EXTENDED... + d c 2 + d XLINK_TYPE_EXTENDED_SET... + d c 3 + + d xlinkShow s based(######typedef######) + d like(xmlCenum) + d XLINK_SHOW_NONE... + d c 0 + d XLINK_SHOW_NEW... + d c 1 + d XLINK_SHOW_EMBED... + d c 2 + d XLINK_SHOW_REPLACE... + d c 3 + + d xlinkActuate s based(######typedef######) + d like(xmlCenum) + d XLINK_ACTUATE_NONE... + d c 0 + d XLINK_ACTUATE_AUTO... + d c 1 + d XLINK_ACTUATE_ONREQUEST... + d c 2 + + * xlinkNodeDetectFunc: + * @ctx: user data pointer + * @node: the node to check + * + * This is the prototype for the link detection routine. + * It calls the default link detection callbacks upon link detection. + + d xlinkNodeDetectFunc... + d s * based(######typedef######) + d procptr + + * The link detection module interact with the upper layers using + * a set of callback registered at parsing time. + + * xlinkSimpleLinkFunk: + * @ctx: user data pointer + * @node: the node carrying the link + * @href: the target of the link + * @role: the role string + * @title: the link title + * + * This is the prototype for a simple link detection callback. + + d xlinkSimpleLinkFunk... + d s * based(######typedef######) + d procptr + + * xlinkExtendedLinkFunk: + * @ctx: user data pointer + * @node: the node carrying the link + * @nbLocators: the number of locators detected on the link + * @hrefs: pointer to the array of locator hrefs + * @roles: pointer to the array of locator roles + * @nbArcs: the number of arcs detected on the link + * @from: pointer to the array of source roles found on the arcs + * @to: pointer to the array of target roles found on the arcs + * @show: array of values for the show attributes found on the arcs + * @actuate: array of values for the actuate attributes found on the arcs + * @nbTitles: the number of titles detected on the link + * @title: array of titles detected on the link + * @langs: array of xml:lang values for the titles + * + * This is the prototype for a extended link detection callback. + + d xlinkExtendedLinkFunk... + d s * based(######typedef######) + d procptr + + * xlinkExtendedLinkSetFunk: + * @ctx: user data pointer + * @node: the node carrying the link + * @nbLocators: the number of locators detected on the link + * @hrefs: pointer to the array of locator hrefs + * @roles: pointer to the array of locator roles + * @nbTitles: the number of titles detected on the link + * @title: array of titles detected on the link + * @langs: array of xml:lang values for the titles + * + * This is the prototype for a extended link set detection callback. + + d xlinkExtendedLinkSetFunk... + d s * based(######typedef######) + d procptr + + * This is the structure containing a set of Links detection callbacks. + * + * There is no default xlink callbacks, if one want to get link + * recognition activated, those call backs must be provided before parsing. + + d xlinkHandlerPtr... + d s * based(######typedef######) xmlChar * + + d xlinkHandler ds based(xlinkHandlerPtr) + d align qualified + d simple like(xlinkSimpleLinkFunk) + d extended like(xlinkExtendedLinkFunk) + d set like(xlinkExtendedLinkSetFunk) + + * The default detection routine, can be overridden, they call the default + * detection callbacks. + + d xlinkGetDefaultDetect... + d pr extproc('xlinkGetDefaultDetect') + d like(xlinkNodeDetectFunc) + + d xlinkSetDefaultDetect... + d pr extproc('xlinkSetDefaultDetect') + d func value like(xlinkNodeDetectFunc) + + * Routines to set/get the default handlers. + + d xlinkGetDefaultHandler... + d pr extproc('xlinkGetDefaultHandler') + d like(xlinkHandlerPtr) + + d xlinkSetDefaultHandler... + d pr extproc('xlinkSetDefaultHandler') + d handler value like(xlinkHandlerPtr) + + * Link detection module itself. + + d xlinkIsLink pr extproc('xlinkIsLink') + d like(xlinkType) + d doc value like(xmlDocPtr) + d node value like(xmlNodePtr) + + /endif LIBXML_XPTR_ENABLED + /endif XML_XLINK_H__ diff --git a/os400/libxmlrpg/xmlIO.rpgle b/os400/libxmlrpg/xmlIO.rpgle new file mode 100644 index 0000000..6c0afcc --- /dev/null +++ b/os400/libxmlrpg/xmlIO.rpgle @@ -0,0 +1,464 @@ + * Summary: interface for the I/O interfaces used by the parser + * Description: interface for the I/O interfaces used by the parser + * + * Copy: See Copyright for the status of this software. + * + * Author: Patrick Monnerat , DATASPHERE S.A. + + /if not defined(XML_IO_H__) + /define XML_IO_H__ + + /include "libxmlrpg/xmlversion" + /include "libxmlrpg/xmlTypesC" + + * Those are the functions and datatypes for the parser input + * I/O structures. + + * xmlInputMatchCallback: + * @filename: the filename or URI + * + * Callback used in the I/O Input API to detect if the current handler + * can provide input fonctionnalities for this resource. + * + * Returns 1 if yes and 0 if another Input module should be used + + d xmlInputMatchCallback... + d s * based(######typedef######) + d procptr + + * xmlInputOpenCallback: + * @filename: the filename or URI + * + * Callback used in the I/O Input API to open the resource + * + * Returns an Input context or NULL in case or error + + d xmlInputOpenCallback... + d s * based(######typedef######) + d procptr + + * xmlInputReadCallback: + * @context: an Input context + * @buffer: the buffer to store data read + * @len: the length of the buffer in bytes + * + * Callback used in the I/O Input API to read the resource + * + * Returns the number of bytes read or -1 in case of error + + d xmlInputReadCallback... + d s * based(######typedef######) + d procptr + + * xmlInputCloseCallback: + * @context: an Input context + * + * Callback used in the I/O Input API to close the resource + * + * Returns 0 or -1 in case of error + + d xmlInputCloseCallback... + d s * based(######typedef######) + d procptr + + /if defined(LIBXML_OUTPUT_ENABLED) + + * Those are the functions and datatypes for the library output + * I/O structures. + + * xmlOutputMatchCallback: + * @filename: the filename or URI + * + * Callback used in the I/O Output API to detect if the current handler + * can provide output fonctionnalities for this resource. + * + * Returns 1 if yes and 0 if another Output module should be used + + d xmlOutputMatchCallback... + d s * based(######typedef######) + d procptr + + * xmlOutputOpenCallback: + * @filename: the filename or URI + * + * Callback used in the I/O Output API to open the resource + * + * Returns an Output context or NULL in case or error + + d xmlOutputOpenCallback... + d s * based(######typedef######) + d procptr + + * xmlOutputWriteCallback: + * @context: an Output context + * @buffer: the buffer of data to write + * @len: the length of the buffer in bytes + * + * Callback used in the I/O Output API to write to the resource + * + * Returns the number of bytes written or -1 in case of error + + d xmlOutputWriteCallback... + d s * based(######typedef######) + d procptr + + * xmlOutputCloseCallback: + * @context: an Output context + * + * Callback used in the I/O Output API to close the resource + * + * Returns 0 or -1 in case of error + + d xmlOutputCloseCallback... + d s * based(######typedef######) + d procptr + /endif LIBXML_OUTPUT_ENABLD + + /include "libxmlrpg/globals" + /include "libxmlrpg/tree" + /include "libxmlrpg/parser" + /include "libxmlrpg/encoding" + + d xmlParserInputBuffer... + d ds based(xmlParserInputBufferPtr) + d align qualified + d context * void * + d readcallback like(xmlInputReadCallback) + d closecallback like(xmlInputCloseCallback) + * + d encoder like(xmlCharEncodingHandlerPtr) Conversions --> UTF8 + * + d buffer like(xmlBufPtr) UTF-8 local buffer + d raw like(xmlBufPtr) Raw input buffer + d compressed like(xmlCint) + d error like(xmlCint) + d rawconsumed like(xmlCulong) + + /if defined(LIBXML_OUTPUT_ENABLED) + d xmlOutputBuffer... + d ds based(xmlOutputBufferPtr) + d align qualified + d context * void * + d writecallback like(xmlOutputWriteCallback) + d closecallback like(xmlOutputCloseCallback) + * + d encoder like(xmlCharEncodingHandlerPtr) Conversions --> UTF8 + * + d buffer like(xmlBufPtr) UTF-8/ISOLatin local + d conv like(xmlBufPtr) Buffer for output + d written like(xmlCint) Total # byte written + d error like(xmlCint) + /endif LIBXML_OUTPUT_ENABLD + + * Interfaces for input + + d xmlCleanupInputCallbacks... + d pr extproc('xmlCleanupInputCallbacks') + + d xmlPopInputCallbacks... + d pr extproc('xmlPopInputCallbacks') + d like(xmlCint) + + d xmlRegisterDefaultInputCallbacks... + d pr extproc( + d 'xmlRegisterDefaultInputCallbacks') + + d xmlAllocParserInputBuffer... + d pr extproc('xmlAllocParserInputBuffer') + d like(xmlParserInputBufferPtr) + d enc value like(xmlCharEncoding) + + d xmlParserInputBufferCreateFilename... + d pr extproc( + d 'xmlParserInputBufferCreateFilename') + d like(xmlParserInputBufferPtr) + d URI * value options(*string) const char * + d enc value like(xmlCharEncoding) + + d xmlParserInputBufferCreateFile... + d pr extproc( + d 'xmlParserInputBufferCreateFile') + d like(xmlParserInputBufferPtr) + d file * value FILE * + d enc value like(xmlCharEncoding) + + d xmlParserInputBufferCreateFd... + d pr extproc( + d 'xmlParserInputBufferCreateFd') + d like(xmlParserInputBufferPtr) + d fd value like(xmlCint) + d enc value like(xmlCharEncoding) + + d xmlParserInputBufferCreateMem... + d pr extproc( + d 'xmlParserInputBufferCreateMem') + d like(xmlParserInputBufferPtr) + d mem * value options(*string) const char * + d size value like(xmlCint) + d enc value like(xmlCharEncoding) + + d xmlParserInputBufferCreateStatic... + d pr extproc( + d 'xmlParserInputBufferCreateStatic') + d like(xmlParserInputBufferPtr) + d mem * value options(*string) const char * + d size value like(xmlCint) + d enc value like(xmlCharEncoding) + + d xmlParserInputBufferCreateIO... + d pr extproc( + d 'xmlParserInputBufferCreateIO') + d like(xmlParserInputBufferPtr) + d ioread value like(xmlInputReadCallback) + d ioclose value like(xmlInputCloseCallback) + d ioctx * value void * + d enc value like(xmlCharEncoding) + + d xmlParserInputBufferRead... + d pr extproc('xmlParserInputBufferRead') + d like(xmlCint) + d in value like(xmlParserInputBufferPtr) + d len value like(xmlCint) + + d xmlParserInputBufferGrow... + d pr extproc('xmlParserInputBufferGrow') + d like(xmlCint) + d in value like(xmlParserInputBufferPtr) + d len value like(xmlCint) + + d xmlParserInputBufferPush... + d pr extproc('xmlParserInputBufferPush') + d like(xmlCint) + d in value like(xmlParserInputBufferPtr) + d len value like(xmlCint) + d buf * value options(*string) const char * + + d xmlFreeParserInputBuffer... + d pr extproc('xmlFreeParserInputBuffer') + d in value like(xmlParserInputBufferPtr) + + d xmlParserGetDirectory... + d pr * extproc('xmlParserGetDirectory') char * + d filename * value options(*string) const char * + + d xmlRegisterInputCallbacks... + d pr extproc('xmlRegisterInputCallbacks') + d like(xmlCint) + d matchFunc value like(xmlInputMatchCallback) + d openFunc value like(xmlInputOpenCallback) + d readFunc value like(xmlInputReadCallback) + d closeFunc value like(xmlInputCloseCallback) + + /if defined(LIBXML_OUTPUT_ENABLED) + + * Interfaces for output + + d xmlCleanupOutputCallbacks... + d pr extproc('xmlCleanupOutputCallbacks') + + d xmlRegisterDefaultOutputCallbacks... + d pr extproc( + d 'xmlRegisterDefaultOuputCallbacks') + + d xmlAllocOutputBuffer... + d pr extproc('xmlAllocOutputBuffer') + d like(xmlOutputBufferPtr) + d encoder value + d like(xmlCharEncodingHandlerPtr) + + d xmlOutputBufferCreateFilename... + d pr extproc( + d 'xmlOutputBufferCreateFilename') + d like(xmlOutputBufferPtr) + d URI * value options(*string) const char * + d encoder value + d like(xmlCharEncodingHandlerPtr) + d compression value like(xmlCint) + + d xmlOutputBufferCreateFile... + d pr extproc('xmlOutputBufferCreateFile') + d like(xmlOutputBufferPtr) + d file * value FILE * + d encoder value + d like(xmlCharEncodingHandlerPtr) + + d xmlOutputBufferCreateBuffer... + d pr extproc( + d 'xmlOutputBufferCreateBuffer') + d like(xmlOutputBufferPtr) + d buffer value like(xmlBufferPtr) + d encoder value + d like(xmlCharEncodingHandlerPtr) + + d xmlOutputBufferCreateFd... + d pr extproc('xmlOutputBufferCreateFd') + d like(xmlOutputBufferPtr) + d fd value like(xmlCint) + d encoder value + d like(xmlCharEncodingHandlerPtr) + + d xmlOutputBufferCreateIO... + d pr extproc('xmlOutputBufferCreateIO') + d like(xmlOutputBufferPtr) + d iowrite value like(xmlOutputWriteCallback) + d ioclose value like(xmlOutputCloseCallback) + d ioctx * value void * + d encoder value + d like(xmlCharEncodingHandlerPtr) + + * Couple of APIs to get the output without digging into the buffers + + d xmlOutputBufferGetContent... + d pr * extproc('xmlOutputBufferGetContent') const xmlChar * + d out value like(xmlOutputBufferPtr) + + d xmlOutputBufferGetSize... + d pr extproc('xmlOutputBufferGetSize') + d like(xmlCsize_t) + d out value like(xmlOutputBufferPtr) + + d xmlOutputBufferWrite... + d pr extproc('xmlOutputBufferWrite') + d like(xmlCint) + d out value like(xmlOutputBufferPtr) + d len value like(xmlCint) + d buf * value options(*string) const char * + + d xmlOutputBufferWriteString... + d pr extproc('xmlOutputBufferWriteString') + d like(xmlCint) + d out value like(xmlOutputBufferPtr) + d str * value options(*string) const char * + + d xmlOutputBufferWriteEscape... + d pr extproc('xmlOutputBufferWriteEscape') + d like(xmlCint) + d out value like(xmlOutputBufferPtr) + d str * value options(*string) const xmlChar * + d escaping value like(xmlCharEncodingOutputFunc) + + d xmlOutputBufferFlush... + d pr extproc('xmlOutputBufferFlush') + d like(xmlCint) + d out value like(xmlOutputBufferPtr) + + d xmlOutputBufferClose... + d pr extproc('xmlOutputBufferClose') + d like(xmlCint) + d out value like(xmlOutputBufferPtr) + + d xmlRegisterOutputCallbacks... + d pr extproc('xmlRegisterOutputCallbacks') + d like(xmlCint) + d matchFunc value like(xmlOutputMatchCallback) + d openFunc value like(xmlOutputOpenCallback) + d writeFunc value like(xmlOutputWriteCallback) + d closeFunc value like(xmlOutputCloseCallback) + + /if defined(LIBXML_HTTP_ENABLED) + + * This function only exists if HTTP support built into the library + + d xmlRegisterHTTPPostCallbacks... + d pr extproc( + d 'xmlRegisterHTTPPostCallbacks') + + /endif LIBXML_HTTP_ENABLED + /endif LIBXML_OUTPUT_ENABLD + + d xmlCheckHTTPInput... + d pr extproc('xmlCheckHTTPInput') + d like(xmlParserInputPtr) + d ctxt value like(xmlParserCtxtPtr) + d ret value like(xmlParserInputPtr) + + * A predefined entity loader disabling network accesses + + d xmlNoNetExternalEntityLoader... + d pr extproc( + d 'xmlNoNetExternalEntityLoader') + d like(xmlParserInputPtr) + d URL * value options(*string) const char * + d ID * value options(*string) const char * + d ctxt value like(xmlParserCtxtPtr) + + * xmlNormalizeWindowsPath is obsolete, don't use it. + * Check xmlCanonicPath in uri.h for a better alternative. + + d xmlNormalizeWindowsPath... + d pr * extproc('xmlNormalizeWindowsPath') xmlChar * + d path * value options(*string) const xmlChar * + + d xmlCheckFilename... + d pr extproc('xmlCheckFilename') + d like(xmlCint) + d path * value options(*string) const char * + + * Default 'file://' protocol callbacks + + d xmlFileMatch pr extproc('xmlFileMatch') + d like(xmlCint) + d filename * value options(*string) const char * + + d xmlFileOpen pr * extproc('xmlFileOpen') void * + d filename * value options(*string) const char * + + d xmlFileRead pr extproc('xmlFileRead') + d like(xmlCint) + d context * value void * + d buffer 65535 options(*varsize) + d len value like(xmlCint) + + d xmlFileClose pr extproc('xmlFileClose') + d like(xmlCint) + d context * value void * + + * Default 'http://' protocol callbacks + + /if defined(LIBXML_HTTP_ENABLED) + d xmlIOHTTPMatch pr extproc('xmlIOHTTPMatch') + d like(xmlCint) + d filename * value options(*string) const char * + + d xmlIOHTTPOpen pr * extproc('xmlIOHTTPOpen') void * + d filename * value options(*string) const char * + + /if defined(LIBXML_OUTPUT_ENABLED) + d xmlIOHTTPOpenW pr * extproc('xmlIOHTTPOpenW') void * + d post_uri * value options(*string) const char * + d compression value like(xmlCint) + /endif LIBXML_OUTPUT_ENABLD + + d xmlIOHTTPRead pr extproc('xmlIOHTTPRead') + d like(xmlCint) + d context * value void * + d buffer 65535 options(*varsize) + d len value like(xmlCint) + + d xmlIOHTTPClose pr extproc('xmlIOHTTPClose') + d like(xmlCint) + d context * value void * + /endif LIBXML_HTTP_ENABLED + + * Default 'ftp://' protocol callbacks + + /if defined(LIBXML_FTP_ENABLED) + d xmlIOFTPMatch pr extproc('xmlIOFTPMatch') + d like(xmlCint) + d filename * value options(*string) const char * + + d xmlIOFTPOpen pr * extproc('xmlIOFTPOpen') void * + d filename * value options(*string) const char * + + d xmlIOFTPRead pr extproc('xmlIOFTPRead') + d like(xmlCint) + d context * value void * + d buffer 65535 options(*varsize) + d len value like(xmlCint) + + d xmlIOFTPClose pr extproc('xmlIOFTPClose') + d like(xmlCint) + d context * value void * + /endif LIBXML_FTP_ENABLED + + /endif XML_IO_H__ diff --git a/os400/libxmlrpg/xmlTypesC.rpgle b/os400/libxmlrpg/xmlTypesC.rpgle new file mode 100644 index 0000000..48a23bf --- /dev/null +++ b/os400/libxmlrpg/xmlTypesC.rpgle @@ -0,0 +1,26 @@ + * Eqivalent of C data types. + * + * Copy: See Copyright for the status of this software. + * + * Author: Patrick Monnerat , DATASPHERE S.A. + + /if not defined(XMLTYPESC_H__) + /define XMLTYPESC_H__ + + d xmlCchar s 3i 0 based(######typedef######) + d xmlCuchar s 3u 0 based(######typedef######) + d xmlCshort s 5i 0 based(######typedef######) + d xmlCushort s 5u 0 based(######typedef######) + d xmlCint s 10i 0 based(######typedef######) + d xmlCuInt s 10u 0 based(######typedef######) + d xmlClong s 10i 0 based(######typedef######) + d xmlCulong s 10u 0 based(######typedef######) + d xmlClonglong s 20i 0 based(######typedef######) + d xmlCulonglong s 20u 0 based(######typedef######) + d xmlCenum s 10i 0 based(######typedef######) + d xmlCssize_t s 10i 0 based(######typedef######) + d xmlCsize_t s 10u 0 based(######typedef######) + d xmlCfloat s 4f based(######typedef######) + d xmlCdouble s 8f based(######typedef######) + + /endif diff --git a/os400/libxmlrpg/xmlautomata.rpgle b/os400/libxmlrpg/xmlautomata.rpgle new file mode 100644 index 0000000..0e9cc22 --- /dev/null +++ b/os400/libxmlrpg/xmlautomata.rpgle @@ -0,0 +1,183 @@ + * Summary: API to build regexp automata + * Description: the API to build regexp automata + * + * Copy: See Copyright for the status of this software. + * + * Author: Patrick Monnerat , DATASPHERE S.A. + + /if not defined(XML_AUTOMATA_H__) + /define XML_AUTOMATA_H__ + + /include "libxmlrpg/xmlversion" + + /if defined(LIBXML_REGEXP_ENABLED) + /if defined(LIBXML_AUTOMATA_ENABLED) + + /include "libxmlrpg/xmlTypesC" + /include "libxmlrpg/tree" + /include "libxmlrpg/xmlregexp" + + * xmlAutomataPtr: + * + * A libxml automata description, It can be compiled into a regexp + + d xmlAutomataPtr s * based(######typedef######) + + * xmlAutomataStatePtr: + * + * A state int the automata description, + + d xmlAutomataStatePtr... + d s * based(######typedef######) + + * Building API + + d xmlNewAutomata pr extproc('xmlNewAutomata') + d like(xmlAutomataPtr) + + d xmlFreeAutomata... + d pr extproc('xmlFreeAutomata') + d am value like(xmlAutomataPtr) + + d xmlAutomataGetInitState... + d pr extproc('xmlAutomataGetInitState') + d like(xmlAutomataStatePtr) + d am value like(xmlAutomataPtr) + + d xmlAutomataSetFinalState... + d pr extproc('xmlAutomataSetFinalState') + d like(xmlCint) + d am value like(xmlAutomataPtr) + d state value like(xmlAutomataStatePtr) + + d xmlAutomataNewState... + d pr extproc('xmlAutomataNewState') + d like(xmlAutomataStatePtr) + d am value like(xmlAutomataPtr) + + d xmlAutomataNewTransition... + d pr extproc('xmlAutomataNewTransition') + d like(xmlAutomataStatePtr) + d am value like(xmlAutomataPtr) + d from value like(xmlAutomataStatePtr) + d to value like(xmlAutomataStatePtr) + d token * value options(*string) const xmlChar * + d data * value options(*string) void * + + d xmlAutomataNewTransition2... + d pr extproc('xmlAutomataNewTransition2') + d like(xmlAutomataStatePtr) + d am value like(xmlAutomataPtr) + d from value like(xmlAutomataStatePtr) + d to value like(xmlAutomataStatePtr) + d token * value options(*string) const xmlChar * + d token2 * value options(*string) const xmlChar * + d data * value options(*string) void * + + d xmlAutomataNewNegTrans... + d pr extproc('xmlAutomataNewNegTrans') + d like(xmlAutomataStatePtr) + d am value like(xmlAutomataPtr) + d from value like(xmlAutomataStatePtr) + d to value like(xmlAutomataStatePtr) + d token * value options(*string) const xmlChar * + d token2 * value options(*string) const xmlChar * + d data * value options(*string) void * + + d xmlAutomataNewCountTrans... + d pr extproc('xmlAutomataNewCountTrans') + d like(xmlAutomataStatePtr) + d am value like(xmlAutomataPtr) + d from value like(xmlAutomataStatePtr) + d to value like(xmlAutomataStatePtr) + d token * value options(*string) const xmlChar * + d min value like(xmlCint) + d max value like(xmlCint) + d data * value options(*string) void * + + d xmlAutomataNewCountTrans2... + d pr extproc('xmlAutomataNewCountTrans2') + d like(xmlAutomataStatePtr) + d am value like(xmlAutomataPtr) + d from value like(xmlAutomataStatePtr) + d to value like(xmlAutomataStatePtr) + d token * value options(*string) const xmlChar * + d token2 * value options(*string) const xmlChar * + d min value like(xmlCint) + d max value like(xmlCint) + d data * value options(*string) void * + + d xmlAutomataNewOnceTrans... + d pr extproc('xmlAutomataNewOnceTrans') + d like(xmlAutomataStatePtr) + d am value like(xmlAutomataPtr) + d from value like(xmlAutomataStatePtr) + d to value like(xmlAutomataStatePtr) + d token * value options(*string) const xmlChar * + d min value like(xmlCint) + d max value like(xmlCint) + d data * value options(*string) void * + + d xmlAutomataNewOnceTrans2... + d pr extproc('xmlAutomataNewOnceTrans2') + d like(xmlAutomataStatePtr) + d am value like(xmlAutomataPtr) + d from value like(xmlAutomataStatePtr) + d to value like(xmlAutomataStatePtr) + d token * value options(*string) const xmlChar * + d token2 * value options(*string) const xmlChar * + d min value like(xmlCint) + d max value like(xmlCint) + d data * value options(*string) void * + + d xmlAutomataNewAllTrans... + d pr extproc('xmlAutomataNewAllTrans') + d like(xmlAutomataStatePtr) + d am value like(xmlAutomataPtr) + d from value like(xmlAutomataStatePtr) + d to value like(xmlAutomataStatePtr) + d lax value like(xmlCint) + + d xmlAutomataNewEpsilon... + d pr extproc('xmlAutomataNewEpsilon') + d like(xmlAutomataStatePtr) + d am value like(xmlAutomataPtr) + d from value like(xmlAutomataStatePtr) + d to value like(xmlAutomataStatePtr) + + d xmlAutomataNewCountedTrans... + d pr extproc('xmlAutomataNewCountedTrans') + d like(xmlAutomataStatePtr) + d am value like(xmlAutomataPtr) + d from value like(xmlAutomataStatePtr) + d to value like(xmlAutomataStatePtr) + d counter value like(xmlCint) + + d xmlAutomataNewCounterTrans... + d pr extproc('xmlAutomataNewCounterTrans') + d like(xmlAutomataStatePtr) + d am value like(xmlAutomataPtr) + d from value like(xmlAutomataStatePtr) + d to value like(xmlAutomataStatePtr) + d counter value like(xmlCint) + + d xmlAutomataNewCounter... + d pr extproc('xmlAutomataNewCounter') + d like(xmlCint) + d am value like(xmlAutomataPtr) + d min value like(xmlCint) + d max value like(xmlCint) + + d xmlAutomataCompile... + d pr extproc('xmlAutomataCompile') + d like(xmlRegexpPtr) + d am value like(xmlAutomataPtr) + + d xmlAutomataIsDeterminist... + d pr extproc('xmlAutomataIsDeterminist') + d like(xmlCint) + d am value like(xmlAutomataPtr) + + /endif AUTOMATA_ENABLED + /endif LIBXML_REGEXP_ENABLD + /endif XML_AUTOMATA_H__ diff --git a/os400/libxmlrpg/xmlerror.rpgle b/os400/libxmlrpg/xmlerror.rpgle new file mode 100644 index 0000000..6688b37 --- /dev/null +++ b/os400/libxmlrpg/xmlerror.rpgle @@ -0,0 +1,1686 @@ + * Summary: error handling + * Description: the API used to report errors + * + * Copy: See Copyright for the status of this software. + * + * Author: Patrick Monnerat , DATASPHERE S.A. + + /if not defined(XML_ERROR_H__) + /define XML_ERROR_H__ + + /include "libxmlrpg/xmlTypesC" + /include "libxmlrpg/parser" + + * xmlErrorLevel: + * + * Indicates the level of an error + + d xmlErrorLevel s based(######typedef######) + d like(xmlCenum) + d XML_ERR_NONE c 0 + d XML_ERR_WARNING... A simple warning + d c 1 + d XML_ERR_ERROR c 2 A recoverable error + d XML_ERR_FATAL c 3 A fatal error + + * xmlErrorDomain: + * + * Indicates where an error may have come from + + d xmlErrorDomain s based(######typedef######) + d like(xmlCenum) + d XML_FROM_NONE c 0 + d XML_FROM_PARSER... XML parser + d c 1 + d XML_FROM_TREE c 2 Tree module + d XML_FROM_NAMESPACE... XML Namespace module + d c 3 + d XML_FROM_DTD c 4 DTD validation + d XML_FROM_HTML c 5 HTML parser + d XML_FROM_MEMORY... Memory allocator + d c 6 + d XML_FROM_OUTPUT... serialization code + d c 7 + d XML_FROM_IO c 8 Input/Output stack + d XML_FROM_FTP c 9 FTP module + d XML_FROM_HTTP c 10 HTTP module + d XML_FROM_XINCLUDE... XInclude processing + d c 11 + d XML_FROM_XPATH... XPath module + d c 12 + d XML_FROM_XPOINTER... XPointer module + d c 13 + d XML_FROM_REGEXP... Regexp module + d c 14 + d XML_FROM_DATATYPE... W3C XML Schm Dtatype + d c 15 + d XML_FROM_SCHEMASP... W3C XML Schm parser + d c 16 + d XML_FROM_SCHEMASV... W3C XML Schm valid. + d c 17 + d XML_FROM_RELAXNGP... Relax-NG parser + d c 18 + d XML_FROM_RELAXNGV... Relax-NG validator + d c 19 + d XML_FROM_CATALOG... Catalog module + d c 20 + d XML_FROM_C14N c 21 Canonicalization + d XML_FROM_XSLT c 22 Engine from libxslt + d XML_FROM_VALID... DTD valid. w/ ctxt + d c 23 + d XML_FROM_CHECK... Error check module + d c 24 + d XML_FROM_WRITER... xmlwriter module + d c 25 + d XML_FROM_MODULE... Dyn. loaded module + d c 26 + d XML_FROM_I18N c 27 Mod hdlg char conv + d XML_FROM_SCHEMATRONV... Schematron valid + d c 28 + d XML_FROM_BUFFER... Buffers module + d c 29 + d XML_FROM_URI c 30 URI module + + * xmlError: + * + * An XML Error instance. + + d xmlErrorPtr s * based(######typedef######) + + d xmlError ds based(xmlErrorPtr) + d align qualified + d domain like(xmlCint) Libpart raising err + d code like(xmlCint) Error code + d message * char * + d level like(xmlErrorLevel) Error severity + d file * File name + d line like(xmlCint) Line number + d str1 * char * + d str2 * char * + d str3 * char * + d int1 like(xmlCint) Extra number info + d int2 like(xmlCint) Error column + d ctxt * void * + d node * void * + + * xmlParserError: + * + * This is an error that the XML (or HTML) parser can generate + + d xmlParserErrors... + d s based(######typedef######) + d like(xmlCenum) + d XML_ERR_OK c 0 + d XML_ERR_INTERNAL_ERROR... + d c 1 + d XML_ERR_NO_MEMORY... + d c 2 + d XML_ERR_DOCUMENT_START... + d c 3 + d XML_ERR_DOCUMENT_EMPTY... + d c 4 + d XML_ERR_DOCUMENT_END... + d c 5 + d XML_ERR_INVALID_HEX_CHARREF... + d c 6 + d XML_ERR_INVALID_DEC_CHARREF... + d c 7 + d XML_ERR_INVALID_CHARREF... + d c 8 + d XML_ERR_INVALID_CHAR... + d c 9 + d XML_ERR_CHARREF_AT_EOF... + d c 10 + d XML_ERR_CHARREF_IN_PROLOG... + d c 11 + d XML_ERR_CHARREF_IN_EPILOG... + d c 12 + d XML_ERR_CHARREF_IN_DTD... + d c 13 + d XML_ERR_ENTITYREF_AT_EOF... + d c 14 + d XML_ERR_ENTITYREF_IN_PROLOG... + d c 15 + d XML_ERR_ENTITYREF_IN_EPILOG... + d c 16 + d XML_ERR_ENTITYREF_IN_DTD... + d c 17 + d XML_ERR_PEREF_AT_EOF... + d c 18 + d XML_ERR_PEREF_IN_PROLOG... + d c 19 + d XML_ERR_PEREF_IN_EPILOG... + d c 20 + d XML_ERR_PEREF_IN_INT_SUBSET... + d c 21 + d XML_ERR_ENTITYREF_NO_NAME... + d c 22 + d XML_ERR_ENTITYREF_SEMICOL_MISSING... + d c 23 + d XML_ERR_PEREF_NO_NAME... + d c 24 + d XML_ERR_PEREF_SEMICOL_MISSING... + d c 25 + d XML_ERR_UNDECLARED_ENTITY... + d c 26 + d XML_WAR_UNDECLARED_ENTITY... + d c 27 + d XML_ERR_UNPARSED_ENTITY... + d c 28 + d XML_ERR_ENTITY_IS_EXTERNAL... + d c 29 + d XML_ERR_ENTITY_IS_PARAMETER... + d c 30 + d XML_ERR_UNKNOWN_ENCODING... + d c 31 + d XML_ERR_UNSUPPORTED_ENCODING... + d c 32 + d XML_ERR_STRING_NOT_STARTED... + d c 33 + d XML_ERR_STRING_NOT_CLOSED... + d c 34 + d XML_ERR_NS_DECL_ERROR... + d c 35 + d XML_ERR_ENTITY_NOT_STARTED... + d c 36 + d XML_ERR_ENTITY_NOT_FINISHED... + d c 37 + d XML_ERR_LT_IN_ATTRIBUTE... + d c 38 + d XML_ERR_ATTRIBUTE_NOT_STARTED... + d c 39 + d XML_ERR_ATTRIBUTE_NOT_FINISHED... + d c 40 + d XML_ERR_ATTRIBUTE_WITHOUT_VALUE... + d c 41 + d XML_ERR_ATTRIBUTE_REDEFINED... + d c 42 + d XML_ERR_LITERAL_NOT_STARTED... + d c 43 + d XML_ERR_LITERAL_NOT_FINISHED... + d c 44 + d XML_ERR_COMMENT_NOT_FINISHED... + d c 45 + d XML_ERR_PI_NOT_STARTED... + d c 46 + d XML_ERR_PI_NOT_FINISHED... + d c 47 + d XML_ERR_NOTATION_NOT_STARTED... + d c 48 + d XML_ERR_NOTATION_NOT_FINISHED... + d c 49 + d XML_ERR_ATTLIST_NOT_STARTED... + d c 50 + d XML_ERR_ATTLIST_NOT_FINISHED... + d c 51 + d XML_ERR_MIXED_NOT_STARTED... + d c 52 + d XML_ERR_MIXED_NOT_FINISHED... + d c 53 + d XML_ERR_ELEMCONTENT_NOT_STARTED... + d c 54 + d XML_ERR_ELEMCONTENT_NOT_FINISHED... + d c 55 + d XML_ERR_XMLDECL_NOT_STARTED... + d c 56 + d XML_ERR_XMLDECL_NOT_FINISHED... + d c 57 + d XML_ERR_CONDSEC_NOT_STARTED... + d c 58 + d XML_ERR_CONDSEC_NOT_FINISHED... + d c 59 + d XML_ERR_EXT_SUBSET_NOT_FINISHED... + d c 60 + d XML_ERR_DOCTYPE_NOT_FINISHED... + d c 61 + d XML_ERR_MISPLACED_CDATA_END... + d c 62 + d XML_ERR_CDATA_NOT_FINISHED... + d c 63 + d XML_ERR_RESERVED_XML_NAME... + d c 64 + d XML_ERR_SPACE_REQUIRED... + d c 65 + d XML_ERR_SEPARATOR_REQUIRED... + d c 66 + d XML_ERR_NMTOKEN_REQUIRED... + d c 67 + d XML_ERR_NAME_REQUIRED... + d c 68 + d XML_ERR_PCDATA_REQUIRED... + d c 69 + d XML_ERR_URI_REQUIRED... + d c 70 + d XML_ERR_PUBID_REQUIRED... + d c 71 + d XML_ERR_LT_REQUIRED... + d c 72 + d XML_ERR_GT_REQUIRED... + d c 73 + d XML_ERR_LTSLASH_REQUIRED... + d c 74 + d XML_ERR_EQUAL_REQUIRED... + d c 75 + d XML_ERR_TAG_NAME_MISMATCH... + d c 76 + d XML_ERR_TAG_NOT_FINISHED... + d c 77 + d XML_ERR_STANDALONE_VALUE... + d c 78 + d XML_ERR_ENCODING_NAME... + d c 79 + d XML_ERR_HYPHEN_IN_COMMENT... + d c 80 + d XML_ERR_INVALID_ENCODING... + d c 81 + d XML_ERR_EXT_ENTITY_STANDALONE... + d c 82 + d XML_ERR_CONDSEC_INVALID... + d c 83 + d XML_ERR_VALUE_REQUIRED... + d c 84 + d XML_ERR_NOT_WELL_BALANCED... + d c 85 + d XML_ERR_EXTRA_CONTENT... + d c 86 + d XML_ERR_ENTITY_CHAR_ERROR... + d c 87 + d XML_ERR_ENTITY_PE_INTERNAL... + d c 88 + d XML_ERR_ENTITY_LOOP... + d c 89 + d XML_ERR_ENTITY_BOUNDARY... + d c 90 + d XML_ERR_INVALID_URI... + d c 91 + d XML_ERR_URI_FRAGMENT... + d c 92 + d XML_WAR_CATALOG_PI... + d c 93 + d XML_ERR_NO_DTD... + d c 94 + d XML_ERR_CONDSEC_INVALID_KEYWORD... + d c 95 + d XML_ERR_VERSION_MISSING... + d c 96 + d XML_WAR_UNKNOWN_VERSION... + d c 97 + d XML_WAR_LANG_VALUE... + d c 98 + d XML_WAR_NS_URI... + d c 99 + d XML_WAR_NS_URI_RELATIVE... + d c 100 + d XML_ERR_MISSING_ENCODING... + d c 101 + d XML_WAR_SPACE_VALUE... + d c 102 + d XML_ERR_NOT_STANDALONE... + d c 103 + d XML_ERR_ENTITY_PROCESSING... + d c 104 + d XML_ERR_NOTATION_PROCESSING... + d c 105 + d XML_WAR_NS_COLUMN... + d c 106 + d XML_WAR_ENTITY_REDEFINED... + d c 107 + d XML_ERR_UNKNOWN_VERSION... + d c 108 + d XML_ERR_VERSION_MISMATCH... + d c 109 + d XML_ERR_NAME_TOO_LONG... + d c 110 + d XML_ERR_USER_STOP... + d c 111 + d XML_NS_ERR_XML_NAMESPACE... + d c 200 + d XML_NS_ERR_UNDEFINED_NAMESPACE... + d c 201 + d XML_NS_ERR_QNAME... + d c 202 + d XML_NS_ERR_ATTRIBUTE_REDEFINED... + d c 203 + d XML_NS_ERR_EMPTY... + d c 204 + d XML_NS_ERR_COLON... + d c 205 + d XML_DTD_ATTRIBUTE_DEFAULT... + d c 500 + d XML_DTD_ATTRIBUTE_REDEFINED... + d c 501 + d XML_DTD_ATTRIBUTE_VALUE... + d c 502 + d XML_DTD_CONTENT_ERROR... + d c 503 + d XML_DTD_CONTENT_MODEL... + d c 504 + d XML_DTD_CONTENT_NOT_DETERMINIST... + d c 505 + d XML_DTD_DIFFERENT_PREFIX... + d c 506 + d XML_DTD_ELEM_DEFAULT_NAMESPACE... + d c 507 + d XML_DTD_ELEM_NAMESPACE... + d c 508 + d XML_DTD_ELEM_REDEFINED... + d c 509 + d XML_DTD_EMPTY_NOTATION... + d c 510 + d XML_DTD_ENTITY_TYPE... + d c 511 + d XML_DTD_ID_FIXED... + d c 512 + d XML_DTD_ID_REDEFINED... + d c 513 + d XML_DTD_ID_SUBSET... + d c 514 + d XML_DTD_INVALID_CHILD... + d c 515 + d XML_DTD_INVALID_DEFAULT... + d c 516 + d XML_DTD_LOAD_ERROR... + d c 517 + d XML_DTD_MISSING_ATTRIBUTE... + d c 518 + d XML_DTD_MIXED_CORRUPT... + d c 519 + d XML_DTD_MULTIPLE_ID... + d c 520 + d XML_DTD_NO_DOC... + d c 521 + d XML_DTD_NO_DTD... + d c 522 + d XML_DTD_NO_ELEM_NAME... + d c 523 + d XML_DTD_NO_PREFIX... + d c 524 + d XML_DTD_NO_ROOT... + d c 525 + d XML_DTD_NOTATION_REDEFINED... + d c 526 + d XML_DTD_NOTATION_VALUE... + d c 527 + d XML_DTD_NOT_EMPTY... + d c 528 + d XML_DTD_NOT_PCDATA... + d c 529 + d XML_DTD_NOT_STANDALONE... + d c 530 + d XML_DTD_ROOT_NAME... + d c 531 + d XML_DTD_STANDALONE_WHITE_SPACE... + d c 532 + d XML_DTD_UNKNOWN_ATTRIBUTE... + d c 533 + d XML_DTD_UNKNOWN_ELEM... + d c 534 + d XML_DTD_UNKNOWN_ENTITY... + d c 535 + d XML_DTD_UNKNOWN_ID... + d c 536 + d XML_DTD_UNKNOWN_NOTATION... + d c 537 + d XML_DTD_STANDALONE_DEFAULTED... + d c 538 + d XML_DTD_XMLID_VALUE... + d c 539 + d XML_DTD_XMLID_TYPE... + d c 540 + d XML_DTD_DUP_TOKEN... + d c 541 + d XML_HTML_STRUCURE_ERROR... + d c 800 + d XML_HTML_UNKNOWN_TAG... + d c 801 + d XML_RNGP_ANYNAME_ATTR_ANCESTOR... + d c 1000 + d XML_RNGP_ATTR_CONFLICT... + d c 1001 + d XML_RNGP_ATTRIBUTE_CHILDREN... + d c 1002 + d XML_RNGP_ATTRIBUTE_CONTENT... + d c 1003 + d XML_RNGP_ATTRIBUTE_EMPTY... + d c 1004 + d XML_RNGP_ATTRIBUTE_NOOP... + d c 1005 + d XML_RNGP_CHOICE_CONTENT... + d c 1006 + d XML_RNGP_CHOICE_EMPTY... + d c 1007 + d XML_RNGP_CREATE_FAILURE... + d c 1008 + d XML_RNGP_DATA_CONTENT... + d c 1009 + d XML_RNGP_DEF_CHOICE_AND_INTERLEAVE... + d c 1010 + d XML_RNGP_DEFINE_CREATE_FAILED... + d c 1011 + d XML_RNGP_DEFINE_EMPTY... + d c 1012 + d XML_RNGP_DEFINE_MISSING... + d c 1013 + d XML_RNGP_DEFINE_NAME_MISSING... + d c 1014 + d XML_RNGP_ELEM_CONTENT_EMPTY... + d c 1015 + d XML_RNGP_ELEM_CONTENT_ERROR... + d c 1016 + d XML_RNGP_ELEMENT_EMPTY... + d c 1017 + d XML_RNGP_ELEMENT_CONTENT... + d c 1018 + d XML_RNGP_ELEMENT_NAME... + d c 1019 + d XML_RNGP_ELEMENT_NO_CONTENT... + d c 1020 + d XML_RNGP_ELEM_TEXT_CONFLICT... + d c 1021 + d XML_RNGP_EMPTY... + d c 1022 + d XML_RNGP_EMPTY_CONSTRUCT... + d c 1023 + d XML_RNGP_EMPTY_CONTENT... + d c 1024 + d XML_RNGP_EMPTY_NOT_EMPTY... + d c 1025 + d XML_RNGP_ERROR_TYPE_LIB... + d c 1026 + d XML_RNGP_EXCEPT_EMPTY... + d c 1027 + d XML_RNGP_EXCEPT_MISSING... + d c 1028 + d XML_RNGP_EXCEPT_MULTIPLE... + d c 1029 + d XML_RNGP_EXCEPT_NO_CONTENT... + d c 1030 + d XML_RNGP_EXTERNALREF_EMTPY... + d c 1031 + d XML_RNGP_EXTERNAL_REF_FAILURE... + d c 1032 + d XML_RNGP_EXTERNALREF_RECURSE... + d c 1033 + d XML_RNGP_FORBIDDEN_ATTRIBUTE... + d c 1034 + d XML_RNGP_FOREIGN_ELEMENT... + d c 1035 + d XML_RNGP_GRAMMAR_CONTENT... + d c 1036 + d XML_RNGP_GRAMMAR_EMPTY... + d c 1037 + d XML_RNGP_GRAMMAR_MISSING... + d c 1038 + d XML_RNGP_GRAMMAR_NO_START... + d c 1039 + d XML_RNGP_GROUP_ATTR_CONFLICT... + d c 1040 + d XML_RNGP_HREF_ERROR... + d c 1041 + d XML_RNGP_INCLUDE_EMPTY... + d c 1042 + d XML_RNGP_INCLUDE_FAILURE... + d c 1043 + d XML_RNGP_INCLUDE_RECURSE... + d c 1044 + d XML_RNGP_INTERLEAVE_ADD... + d c 1045 + d XML_RNGP_INTERLEAVE_CREATE_FAILED... + d c 1046 + d XML_RNGP_INTERLEAVE_EMPTY... + d c 1047 + d XML_RNGP_INTERLEAVE_NO_CONTENT... + d c 1048 + d XML_RNGP_INVALID_DEFINE_NAME... + d c 1049 + d XML_RNGP_INVALID_URI... + d c 1050 + d XML_RNGP_INVALID_VALUE... + d c 1051 + d XML_RNGP_MISSING_HREF... + d c 1052 + d XML_RNGP_NAME_MISSING... + d c 1053 + d XML_RNGP_NEED_COMBINE... + d c 1054 + d XML_RNGP_NOTALLOWED_NOT_EMPTY... + d c 1055 + d XML_RNGP_NSNAME_ATTR_ANCESTOR... + d c 1056 + d XML_RNGP_NSNAME_NO_NS... + d c 1057 + d XML_RNGP_PARAM_FORBIDDEN... + d c 1058 + d XML_RNGP_PARAM_NAME_MISSING... + d c 1059 + d XML_RNGP_PARENTREF_CREATE_FAILED... + d c 1060 + d XML_RNGP_PARENTREF_NAME_INVALID... + d c 1061 + d XML_RNGP_PARENTREF_NO_NAME... + d c 1062 + d XML_RNGP_PARENTREF_NO_PARENT... + d c 1063 + d XML_RNGP_PARENTREF_NOT_EMPTY... + d c 1064 + d XML_RNGP_PARSE_ERROR... + d c 1065 + d XML_RNGP_PAT_ANYNAME_EXCEPT_ANYNAME... + d c 1066 + d XML_RNGP_PAT_ATTR_ATTR... + d c 1067 + d XML_RNGP_PAT_ATTR_ELEM... + d c 1068 + d XML_RNGP_PAT_DATA_EXCEPT_ATTR... + d c 1069 + d XML_RNGP_PAT_DATA_EXCEPT_ELEM... + d c 1070 + d XML_RNGP_PAT_DATA_EXCEPT_EMPTY... + d c 1071 + d XML_RNGP_PAT_DATA_EXCEPT_GROUP... + d c 1072 + d XML_RNGP_PAT_DATA_EXCEPT_INTERLEAVE... + d c 1073 + d XML_RNGP_PAT_DATA_EXCEPT_LIST... + d c 1074 + d XML_RNGP_PAT_DATA_EXCEPT_ONEMORE... + d c 1075 + d XML_RNGP_PAT_DATA_EXCEPT_REF... + d c 1076 + d XML_RNGP_PAT_DATA_EXCEPT_TEXT... + d c 1077 + d XML_RNGP_PAT_LIST_ATTR... + d c 1078 + d XML_RNGP_PAT_LIST_ELEM... + d c 1079 + d XML_RNGP_PAT_LIST_INTERLEAVE... + d c 1080 + d XML_RNGP_PAT_LIST_LIST... + d c 1081 + d XML_RNGP_PAT_LIST_REF... + d c 1082 + d XML_RNGP_PAT_LIST_TEXT... + d c 1083 + d XML_RNGP_PAT_NSNAME_EXCEPT_ANYNAME... + d c 1084 + d XML_RNGP_PAT_NSNAME_EXCEPT_NSNAME... + d c 1085 + d XML_RNGP_PAT_ONEMORE_GROUP_ATTR... + d c 1086 + d XML_RNGP_PAT_ONEMORE_INTERLEAVE_ATTR... + d c 1087 + d XML_RNGP_PAT_START_ATTR... + d c 1088 + d XML_RNGP_PAT_START_DATA... + d c 1089 + d XML_RNGP_PAT_START_EMPTY... + d c 1090 + d XML_RNGP_PAT_START_GROUP... + d c 1091 + d XML_RNGP_PAT_START_INTERLEAVE... + d c 1092 + d XML_RNGP_PAT_START_LIST... + d c 1093 + d XML_RNGP_PAT_START_ONEMORE... + d c 1094 + d XML_RNGP_PAT_START_TEXT... + d c 1095 + d XML_RNGP_PAT_START_VALUE... + d c 1096 + d XML_RNGP_PREFIX_UNDEFINED... + d c 1097 + d XML_RNGP_REF_CREATE_FAILED... + d c 1098 + d XML_RNGP_REF_CYCLE... + d c 1099 + d XML_RNGP_REF_NAME_INVALID... + d c 1100 + d XML_RNGP_REF_NO_DEF... + d c 1101 + d XML_RNGP_REF_NO_NAME... + d c 1102 + d XML_RNGP_REF_NOT_EMPTY... + d c 1103 + d XML_RNGP_START_CHOICE_AND_INTERLEAVE... + d c 1104 + d XML_RNGP_START_CONTENT... + d c 1105 + d XML_RNGP_START_EMPTY... + d c 1106 + d XML_RNGP_START_MISSING... + d c 1107 + d XML_RNGP_TEXT_EXPECTED... + d c 1108 + d XML_RNGP_TEXT_HAS_CHILD... + d c 1109 + d XML_RNGP_TYPE_MISSING... + d c 1110 + d XML_RNGP_TYPE_NOT_FOUND... + d c 1111 + d XML_RNGP_TYPE_VALUE... + d c 1112 + d XML_RNGP_UNKNOWN_ATTRIBUTE... + d c 1113 + d XML_RNGP_UNKNOWN_COMBINE... + d c 1114 + d XML_RNGP_UNKNOWN_CONSTRUCT... + d c 1115 + d XML_RNGP_UNKNOWN_TYPE_LIB... + d c 1116 + d XML_RNGP_URI_FRAGMENT... + d c 1117 + d XML_RNGP_URI_NOT_ABSOLUTE... + d c 1118 + d XML_RNGP_VALUE_EMPTY... + d c 1119 + d XML_RNGP_VALUE_NO_CONTENT... + d c 1120 + d XML_RNGP_XMLNS_NAME... + d c 1121 + d XML_RNGP_XML_NS... + d c 1122 + d XML_XPATH_EXPRESSION_OK... + d c 1200 + d XML_XPATH_NUMBER_ERROR... + d c 1201 + d XML_XPATH_UNFINISHED_LITERAL_ERROR... + d c 1202 + d XML_XPATH_START_LITERAL_ERROR... + d c 1203 + d XML_XPATH_VARIABLE_REF_ERROR... + d c 1204 + d XML_XPATH_UNDEF_VARIABLE_ERROR... + d c 1205 + d XML_XPATH_INVALID_PREDICATE_ERROR... + d c 1206 + d XML_XPATH_EXPR_ERROR... + d c 1207 + d XML_XPATH_UNCLOSED_ERROR... + d c 1208 + d XML_XPATH_UNKNOWN_FUNC_ERROR... + d c 1209 + d XML_XPATH_INVALID_OPERAND... + d c 1210 + d XML_XPATH_INVALID_TYPE... + d c 1211 + d XML_XPATH_INVALID_ARITY... + d c 1212 + d XML_XPATH_INVALID_CTXT_SIZE... + d c 1213 + d XML_XPATH_INVALID_CTXT_POSITION... + d c 1214 + d XML_XPATH_MEMORY_ERROR... + d c 1215 + d XML_XPTR_SYNTAX_ERROR... + d c 1216 + d XML_XPTR_RESOURCE_ERROR... + d c 1217 + d XML_XPTR_SUB_RESOURCE_ERROR... + d c 1218 + d XML_XPATH_UNDEF_PREFIX_ERROR... + d c 1219 + d XML_XPATH_ENCODING_ERROR... + d c 1220 + d XML_XPATH_INVALID_CHAR_ERROR... + d c 1231 + d XML_TREE_INVALID_HEX... + d c 1300 + d XML_TREE_INVALID_DEC... + d c 1301 + d XML_TREE_UNTERMINATED_ENTITY... + d c 1302 + d XML_TREE_NOT_UTF8... + d c 1303 + d XML_SAVE_NOT_UTF8... + d c 1400 + d XML_SAVE_CHAR_INVALID... + d c 1401 + d XML_SAVE_NO_DOCTYPE... + d c 1402 + d XML_SAVE_UNKNOWN_ENCODING... + d c 1403 + d XML_REGEXP_COMPILE_ERROR... + d c 1403 + d XML_IO_UNKNOWN... + d c 1500 + d XML_IO_EACCES c 1501 + d XML_IO_EAGAIN c 1502 + d XML_IO_EBADF c 1503 + d XML_IO_EBADMSG... + d c 1504 + d XML_IO_EBUSY c 1505 + d XML_IO_ECANCELED... + d c 1506 + d XML_IO_ECHILD c 1507 + d XML_IO_EDEADLK... + d c 1508 + d XML_IO_EDOM c 1509 + d XML_IO_EEXIST c 1510 + d XML_IO_EFAULT c 1511 + d XML_IO_EFBIG c 1512 + d XML_IO_EINPROGRESS... + d c 1513 + d XML_IO_EINTR c 1514 + d XML_IO_EINVAL c 1515 + d XML_IO_EIO c 1516 + d XML_IO_EISDIR c 1517 + d XML_IO_EMFILE c 1518 + d XML_IO_EMLINK c 1519 + d XML_IO_EMSGSIZE... + d c 1520 + d XML_IO_ENAMETOOLONG... + d c 1521 + d XML_IO_ENFILE c 1522 + d XML_IO_ENODEV c 1523 + d XML_IO_ENOENT c 1524 + d XML_IO_ENOEXEC... + d c 1525 + d XML_IO_ENOLCK c 1526 + d XML_IO_ENOMEM c 1527 + d XML_IO_ENOSPC c 1528 + d XML_IO_ENOSYS c 1529 + d XML_IO_ENOTDIR... + d c 1530 + d XML_IO_ENOTEMPTY... + d c 1531 + d XML_IO_ENOTSUP... + d c 1532 + d XML_IO_ENOTTY c 1533 + d XML_IO_ENXIO c 1534 + d XML_IO_EPERM c 1535 + d XML_IO_EPIPE c 1536 + d XML_IO_ERANGE c 1537 + d XML_IO_EROFS c 1538 + d XML_IO_ESPIPE c 1539 + d XML_IO_ESRCH c 1540 + d XML_IO_ETIMEDOUT... + d c 1541 + d XML_IO_EXDEV c 1542 + d XML_IO_NETWORK_ATTEMPT... + d c 1543 + d XML_IO_ENCODER... + d c 1544 + d XML_IO_FLUSH c 1545 + d XML_IO_WRITE c 1546 + d XML_IO_NO_INPUT... + d c 1547 + d XML_IO_BUFFER_FULL... + d c 1548 + d XML_IO_LOAD_ERROR... + d c 1549 + d XML_IO_ENOTSOCK... + d c 1550 + d XML_IO_EISCONN... + d c 1551 + d XML_IO_ECONNREFUSED... + d c 1552 + d XML_IO_ENETUNREACH... + d c 1553 + d XML_IO_EADDRINUSE... + d c 1554 + d XML_IO_EALREADY... + d c 1555 + d XML_IO_EAFNOSUPPORT... + d c 1556 + d XML_XINCLUDE_RECURSION... + d c 1600 + d XML_XINCLUDE_PARSE_VALUE... + d c 1601 + d XML_XINCLUDE_ENTITY_DEF_MISMATCH... + d c 1602 + d XML_XINCLUDE_NO_HREF... + d c 1603 + d XML_XINCLUDE_NO_FALLBACK... + d c 1604 + d XML_XINCLUDE_HREF_URI... + d c 1605 + d XML_XINCLUDE_TEXT_FRAGMENT... + d c 1606 + d XML_XINCLUDE_TEXT_DOCUMENT... + d c 1607 + d XML_XINCLUDE_INVALID_CHAR... + d c 1608 + d XML_XINCLUDE_BUILD_FAILED... + d c 1609 + d XML_XINCLUDE_UNKNOWN_ENCODING... + d c 1610 + d XML_XINCLUDE_MULTIPLE_ROOT... + d c 1611 + d XML_XINCLUDE_XPTR_FAILED... + d c 1612 + d XML_XINCLUDE_XPTR_RESULT... + d c 1613 + d XML_XINCLUDE_INCLUDE_IN_INCLUDE... + d c 1614 + d XML_XINCLUDE_FALLBACKS_IN_INCLUDE... + d c 1615 + d XML_XINCLUDE_FALLBACK_NOT_IN_INCLUDE... + d c 1616 + d XML_XINCLUDE_DEPRECATED_NS... + d c 1617 + d XML_XINCLUDE_FRAGMENT_ID... + d c 1618 + d XML_CATALOG_MISSING_ATTR... + d c 1650 + d XML_CATALOG_ENTRY_BROKEN... + d c 1651 + d XML_CATALOG_PREFER_VALUE... + d c 1652 + d XML_CATALOG_NOT_CATALOG... + d c 1653 + d XML_CATALOG_RECURSION... + d c 1654 + d XML_SCHEMAP_PREFIX_UNDEFINED... + d c 1700 + d XML_SCHEMAP_ATTRFORMDEFAULT_VALUE... + d c 1701 + d XML_SCHEMAP_ATTRGRP_NONAME_NOREF... + d c 1702 + d XML_SCHEMAP_ATTR_NONAME_NOREF... + d c 1703 + d XML_SCHEMAP_COMPLEXTYPE_NONAME_NOREF... + d c 1704 + d XML_SCHEMAP_ELEMFORMDEFAULT_VALUE... + d c 1705 + d XML_SCHEMAP_ELEM_NONAME_NOREF... + d c 1706 + d XML_SCHEMAP_EXTENSION_NO_BASE... + d c 1707 + d XML_SCHEMAP_FACET_NO_VALUE... + d c 1708 + d XML_SCHEMAP_FAILED_BUILD_IMPORT... + d c 1709 + d XML_SCHEMAP_GROUP_NONAME_NOREF... + d c 1710 + d XML_SCHEMAP_IMPORT_NAMESPACE_NOT_URI... + d c 1711 + d XML_SCHEMAP_IMPORT_REDEFINE_NSNAME... + d c 1712 + d XML_SCHEMAP_IMPORT_SCHEMA_NOT_URI... + d c 1713 + d XML_SCHEMAP_INVALID_BOOLEAN... + d c 1714 + d XML_SCHEMAP_INVALID_ENUM... + d c 1715 + d XML_SCHEMAP_INVALID_FACET... + d c 1716 + d XML_SCHEMAP_INVALID_FACET_VALUE... + d c 1717 + d XML_SCHEMAP_INVALID_MAXOCCURS... + d c 1718 + d XML_SCHEMAP_INVALID_MINOCCURS... + d c 1719 + d XML_SCHEMAP_INVALID_REF_AND_SUBTYPE... + d c 1720 + d XML_SCHEMAP_INVALID_WHITE_SPACE... + d c 1721 + d XML_SCHEMAP_NOATTR_NOREF... + d c 1722 + d XML_SCHEMAP_NOTATION_NO_NAME... + d c 1723 + d XML_SCHEMAP_NOTYPE_NOREF... + d c 1724 + d XML_SCHEMAP_REF_AND_SUBTYPE... + d c 1725 + d XML_SCHEMAP_RESTRICTION_NONAME_NOREF... + d c 1726 + d XML_SCHEMAP_SIMPLETYPE_NONAME... + d c 1727 + d XML_SCHEMAP_TYPE_AND_SUBTYPE... + d c 1728 + d XML_SCHEMAP_UNKNOWN_ALL_CHILD... + d c 1729 + d XML_SCHEMAP_UNKNOWN_ANYATTRIBUTE_CHILD... + d c 1730 + d XML_SCHEMAP_UNKNOWN_ATTR_CHILD... + d c 1731 + d XML_SCHEMAP_UNKNOWN_ATTRGRP_CHILD... + d c 1732 + d XML_SCHEMAP_UNKNOWN_ATTRIBUTE_GROUP... + d c 1733 + d XML_SCHEMAP_UNKNOWN_BASE_TYPE... + d c 1734 + d XML_SCHEMAP_UNKNOWN_CHOICE_CHILD... + d c 1735 + d XML_SCHEMAP_UNKNOWN_COMPLEXCONTENT_CHILD... + d c 1736 + d XML_SCHEMAP_UNKNOWN_COMPLEXTYPE_CHILD... + d c 1737 + d XML_SCHEMAP_UNKNOWN_ELEM_CHILD... + d c 1738 + d XML_SCHEMAP_UNKNOWN_EXTENSION_CHILD... + d c 1739 + d XML_SCHEMAP_UNKNOWN_FACET_CHILD... + d c 1740 + d XML_SCHEMAP_UNKNOWN_FACET_TYPE... + d c 1741 + d XML_SCHEMAP_UNKNOWN_GROUP_CHILD... + d c 1742 + d XML_SCHEMAP_UNKNOWN_IMPORT_CHILD... + d c 1743 + d XML_SCHEMAP_UNKNOWN_LIST_CHILD... + d c 1744 + d XML_SCHEMAP_UNKNOWN_NOTATION_CHILD... + d c 1745 + d XML_SCHEMAP_UNKNOWN_PROCESSCONTENT_CHILD... + d c 1746 + d XML_SCHEMAP_UNKNOWN_REF... + d c 1747 + d XML_SCHEMAP_UNKNOWN_RESTRICTION_CHILD... + d c 1748 + d XML_SCHEMAP_UNKNOWN_SCHEMAS_CHILD... + d c 1749 + d XML_SCHEMAP_UNKNOWN_SEQUENCE_CHILD... + d c 1750 + d XML_SCHEMAP_UNKNOWN_SIMPLECONTENT_CHILD... + d c 1751 + d XML_SCHEMAP_UNKNOWN_SIMPLETYPE_CHILD... + d c 1752 + d XML_SCHEMAP_UNKNOWN_TYPE... + d c 1753 + d XML_SCHEMAP_UNKNOWN_UNION_CHILD... + d c 1754 + d XML_SCHEMAP_ELEM_DEFAULT_FIXED... + d c 1755 + d XML_SCHEMAP_REGEXP_INVALID... + d c 1756 + d XML_SCHEMAP_FAILED_LOAD... + d c 1757 + d XML_SCHEMAP_NOTHING_TO_PARSE... + d c 1758 + d XML_SCHEMAP_NOROOT... + d c 1759 + d XML_SCHEMAP_REDEFINED_GROUP... + d c 1760 + d XML_SCHEMAP_REDEFINED_TYPE... + d c 1761 + d XML_SCHEMAP_REDEFINED_ELEMENT... + d c 1762 + d XML_SCHEMAP_REDEFINED_ATTRGROUP... + d c 1763 + d XML_SCHEMAP_REDEFINED_ATTR... + d c 1764 + d XML_SCHEMAP_REDEFINED_NOTATION... + d c 1765 + d XML_SCHEMAP_FAILED_PARSE... + d c 1766 + d XML_SCHEMAP_UNKNOWN_PREFIX... + d c 1767 + d XML_SCHEMAP_DEF_AND_PREFIX... + d c 1768 + d XML_SCHEMAP_UNKNOWN_INCLUDE_CHILD... + d c 1769 + d XML_SCHEMAP_INCLUDE_SCHEMA_NOT_URI... + d c 1770 + d XML_SCHEMAP_INCLUDE_SCHEMA_NO_URI... + d c 1771 + d XML_SCHEMAP_NOT_SCHEMA... + d c 1772 + d XML_SCHEMAP_UNKNOWN_MEMBER_TYPE... + d c 1773 + d XML_SCHEMAP_INVALID_ATTR_USE... + d c 1774 + d XML_SCHEMAP_RECURSIVE... + d c 1775 + d XML_SCHEMAP_SUPERNUMEROUS_LIST_ITEM_TYPE... + d c 1776 + d XML_SCHEMAP_INVALID_ATTR_COMBINATION... + d c 1777 + d XML_SCHEMAP_INVALID_ATTR_INLINE_COMBINATION... + d c 1778 + d XML_SCHEMAP_MISSING_SIMPLETYPE_CHILD... + d c 1779 + d XML_SCHEMAP_INVALID_ATTR_NAME... + d c 1780 + d XML_SCHEMAP_REF_AND_CONTENT... + d c 1781 + d XML_SCHEMAP_CT_PROPS_CORRECT_1... + d c 1782 + d XML_SCHEMAP_CT_PROPS_CORRECT_2... + d c 1783 + d XML_SCHEMAP_CT_PROPS_CORRECT_3... + d c 1784 + d XML_SCHEMAP_CT_PROPS_CORRECT_4... + d c 1785 + d XML_SCHEMAP_CT_PROPS_CORRECT_5... + d c 1786 + d XML_SCHEMAP_DERIVATION_OK_RESTRICTION_1... + d c 1787 + d XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_1... + d c 1788 + d XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_2... + d c 1789 + d XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_2... + d c 1790 + d XML_SCHEMAP_DERIVATION_OK_RESTRICTION_3... + d c 1791 + d XML_SCHEMAP_WILDCARD_INVALID_NS_MEMBER... + d c 1792 + d XML_SCHEMAP_INTERSECTION_NOT_EXPRESSIBLE... + d c 1793 + d XML_SCHEMAP_UNION_NOT_EXPRESSIBLE... + d c 1794 + d XML_SCHEMAP_SRC_IMPORT_3_1... + d c 1795 + d XML_SCHEMAP_SRC_IMPORT_3_2... + d c 1796 + d XML_SCHEMAP_DERIVATION_OK_RESTRICTION_4_1... + d c 1797 + d XML_SCHEMAP_DERIVATION_OK_RESTRICTION_4_2... + d c 1798 + d XML_SCHEMAP_DERIVATION_OK_RESTRICTION_4_3... + d c 1799 + d XML_SCHEMAP_COS_CT_EXTENDS_1_3... + d c 1800 + d XML_SCHEMAV_NOROOT... + d c 1801 + d XML_SCHEMAV_UNDECLAREDELEM... + d c 1802 + d XML_SCHEMAV_NOTTOPLEVEL... + d c 1803 + d XML_SCHEMAV_MISSING... + d c 1804 + d XML_SCHEMAV_WRONGELEM... + d c 1805 + d XML_SCHEMAV_NOTYPE... + d c 1806 + d XML_SCHEMAV_NOROLLBACK... + d c 1807 + d XML_SCHEMAV_ISABSTRACT... + d c 1808 + d XML_SCHEMAV_NOTEMPTY... + d c 1809 + d XML_SCHEMAV_ELEMCONT... + d c 1810 + d XML_SCHEMAV_HAVEDEFAULT... + d c 1811 + d XML_SCHEMAV_NOTNILLABLE... + d c 1812 + d XML_SCHEMAV_EXTRACONTENT... + d c 1813 + d XML_SCHEMAV_INVALIDATTR... + d c 1814 + d XML_SCHEMAV_INVALIDELEM... + d c 1815 + d XML_SCHEMAV_NOTDETERMINIST... + d c 1816 + d XML_SCHEMAV_CONSTRUCT... + d c 1817 + d XML_SCHEMAV_INTERNAL... + d c 1818 + d XML_SCHEMAV_NOTSIMPLE... + d c 1819 + d XML_SCHEMAV_ATTRUNKNOWN... + d c 1820 + d XML_SCHEMAV_ATTRINVALID... + d c 1821 + d XML_SCHEMAV_VALUE... + d c 1822 + d XML_SCHEMAV_FACET... + d c 1823 + d XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_1... + d c 1824 + d XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_2... + d c 1825 + d XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_3... + d c 1826 + d XML_SCHEMAV_CVC_TYPE_3_1_1... + d c 1827 + d XML_SCHEMAV_CVC_TYPE_3_1_2... + d c 1828 + d XML_SCHEMAV_CVC_FACET_VALID... + d c 1829 + d XML_SCHEMAV_CVC_LENGTH_VALID... + d c 1830 + d XML_SCHEMAV_CVC_MINLENGTH_VALID... + d c 1831 + d XML_SCHEMAV_CVC_MAXLENGTH_VALID... + d c 1832 + d XML_SCHEMAV_CVC_MININCLUSIVE_VALID... + d c 1833 + d XML_SCHEMAV_CVC_MAXINCLUSIVE_VALID... + d c 1834 + d XML_SCHEMAV_CVC_MINEXCLUSIVE_VALID... + d c 1835 + d XML_SCHEMAV_CVC_MAXEXCLUSIVE_VALID... + d c 1836 + d XML_SCHEMAV_CVC_TOTALDIGITS_VALID... + d c 1837 + d XML_SCHEMAV_CVC_FRACTIONDIGITS_VALID... + d c 1838 + d XML_SCHEMAV_CVC_PATTERN_VALID... + d c 1839 + d XML_SCHEMAV_CVC_ENUMERATION_VALID... + d c 1840 + d XML_SCHEMAV_CVC_COMPLEX_TYPE_2_1... + d c 1841 + d XML_SCHEMAV_CVC_COMPLEX_TYPE_2_2... + d c 1842 + d XML_SCHEMAV_CVC_COMPLEX_TYPE_2_3... + d c 1843 + d XML_SCHEMAV_CVC_COMPLEX_TYPE_2_4... + d c 1844 + d XML_SCHEMAV_CVC_ELT_1... + d c 1845 + d XML_SCHEMAV_CVC_ELT_2... + d c 1846 + d XML_SCHEMAV_CVC_ELT_3_1... + d c 1847 + d XML_SCHEMAV_CVC_ELT_3_2_1... + d c 1848 + d XML_SCHEMAV_CVC_ELT_3_2_2... + d c 1849 + d XML_SCHEMAV_CVC_ELT_4_1... + d c 1850 + d XML_SCHEMAV_CVC_ELT_4_2... + d c 1851 + d XML_SCHEMAV_CVC_ELT_4_3... + d c 1852 + d XML_SCHEMAV_CVC_ELT_5_1_1... + d c 1853 + d XML_SCHEMAV_CVC_ELT_5_1_2... + d c 1854 + d XML_SCHEMAV_CVC_ELT_5_2_1... + d c 1855 + d XML_SCHEMAV_CVC_ELT_5_2_2_1... + d c 1856 + d XML_SCHEMAV_CVC_ELT_5_2_2_2_1... + d c 1857 + d XML_SCHEMAV_CVC_ELT_5_2_2_2_2... + d c 1858 + d XML_SCHEMAV_CVC_ELT_6... + d c 1859 + d XML_SCHEMAV_CVC_ELT_7... + d c 1860 + d XML_SCHEMAV_CVC_ATTRIBUTE_1... + d c 1861 + d XML_SCHEMAV_CVC_ATTRIBUTE_2... + d c 1862 + d XML_SCHEMAV_CVC_ATTRIBUTE_3... + d c 1863 + d XML_SCHEMAV_CVC_ATTRIBUTE_4... + d c 1864 + d XML_SCHEMAV_CVC_COMPLEX_TYPE_3_1... + d c 1865 + d XML_SCHEMAV_CVC_COMPLEX_TYPE_3_2_1... + d c 1866 + d XML_SCHEMAV_CVC_COMPLEX_TYPE_3_2_2... + d c 1867 + d XML_SCHEMAV_CVC_COMPLEX_TYPE_4... + d c 1868 + d XML_SCHEMAV_CVC_COMPLEX_TYPE_5_1... + d c 1869 + d XML_SCHEMAV_CVC_COMPLEX_TYPE_5_2... + d c 1870 + d XML_SCHEMAV_ELEMENT_CONTENT... + d c 1871 + d XML_SCHEMAV_DOCUMENT_ELEMENT_MISSING... + d c 1872 + d XML_SCHEMAV_CVC_COMPLEX_TYPE_1... + d c 1873 + d XML_SCHEMAV_CVC_AU... + d c 1874 + d XML_SCHEMAV_CVC_TYPE_1... + d c 1875 + d XML_SCHEMAV_CVC_TYPE_2... + d c 1876 + d XML_SCHEMAV_CVC_IDC... + d c 1877 + d XML_SCHEMAV_CVC_WILDCARD... + d c 1878 + d XML_SCHEMAV_MISC... + d c 1879 + d XML_XPTR_UNKNOWN_SCHEME... + d c 1900 + d XML_XPTR_CHILDSEQ_START... + d c 1901 + d XML_XPTR_EVAL_FAILED... + d c 1902 + d XML_XPTR_EXTRA_OBJECTS... + d c 1903 + d XML_C14N_CREATE_CTXT... + d c 1950 + d XML_C14N_REQUIRES_UTF8... + d c 1951 + d XML_C14N_CREATE_STACK... + d c 1952 + d XML_C14N_INVALID_NODE... + d c 1953 + d XML_C14N_UNKNOW_NODE... + d c 1954 + d XML_C14N_RELATIVE_NAMESPACE... + d c 1955 + d XML_FTP_PASV_ANSWER... + d c 2000 + d XML_FTP_EPSV_ANSWER... + d c 2001 + d XML_FTP_ACCNT... + d c 2002 + d XML_FTP_URL_SYNTAX... + d c 2003 + d XML_HTTP_URL_SYNTAX... + d c 2020 + d XML_HTTP_USE_IP... + d c 2021 + d XML_HTTP_UNKNOWN_HOST... + d c 2022 + d XML_SCHEMAP_SRC_SIMPLE_TYPE_1... + d c 3000 + d XML_SCHEMAP_SRC_SIMPLE_TYPE_2... + d c 3001 + d XML_SCHEMAP_SRC_SIMPLE_TYPE_3... + d c 3002 + d XML_SCHEMAP_SRC_SIMPLE_TYPE_4... + d c 3003 + d XML_SCHEMAP_SRC_RESOLVE... + d c 3004 + d XML_SCHEMAP_SRC_RESTRICTION_BASE_OR_SIMPLETYPE... + d c 3005 + d XML_SCHEMAP_SRC_LIST_ITEMTYPE_OR_SIMPLETYPE... + d c 3006 + d XML_SCHEMAP_SRC_UNION_MEMBERTYPES_OR_SIMPLETYPES... + d c 3007 + d XML_SCHEMAP_ST_PROPS_CORRECT_1... + d c 3008 + d XML_SCHEMAP_ST_PROPS_CORRECT_2... + d c 3009 + d XML_SCHEMAP_ST_PROPS_CORRECT_3... + d c 3010 + d XML_SCHEMAP_COS_ST_RESTRICTS_1_1... + d c 3011 + d XML_SCHEMAP_COS_ST_RESTRICTS_1_2... + d c 3012 + d XML_SCHEMAP_COS_ST_RESTRICTS_1_3_1... + d c 3013 + d XML_SCHEMAP_COS_ST_RESTRICTS_1_3_2... + d c 3014 + d XML_SCHEMAP_COS_ST_RESTRICTS_2_1... + d c 3015 + d XML_SCHEMAP_COS_ST_RESTRICTS_2_3_1_1... + d c 3016 + d XML_SCHEMAP_COS_ST_RESTRICTS_2_3_1_2... + d c 3017 + d XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_1... + d c 3018 + d XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_2... + d c 3019 + d XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_3... + d c 3020 + d XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_4... + d c 3021 + d XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_5... + d c 3022 + d XML_SCHEMAP_COS_ST_RESTRICTS_3_1... + d c 3023 + d XML_SCHEMAP_COS_ST_RESTRICTS_3_3_1... + d c 3024 + d XML_SCHEMAP_COS_ST_RESTRICTS_3_3_1_2... + d c 3025 + d XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_2... + d c 3026 + d XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_1... + d c 3027 + d XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_3... + d c 3028 + d XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_4... + d c 3029 + d XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_5... + d c 3030 + d XML_SCHEMAP_COS_ST_DERIVED_OK_2_1... + d c 3031 + d XML_SCHEMAP_COS_ST_DERIVED_OK_2_2... + d c 3032 + d XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED... + d c 3033 + d XML_SCHEMAP_S4S_ELEM_MISSING... + d c 3034 + d XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED... + d c 3035 + d XML_SCHEMAP_S4S_ATTR_MISSING... + d c 3036 + d XML_SCHEMAP_S4S_ATTR_INVALID_VALUE... + d c 3037 + d XML_SCHEMAP_SRC_ELEMENT_1... + d c 3038 + d XML_SCHEMAP_SRC_ELEMENT_2_1... + d c 3039 + d XML_SCHEMAP_SRC_ELEMENT_2_2... + d c 3040 + d XML_SCHEMAP_SRC_ELEMENT_3... + d c 3041 + d XML_SCHEMAP_P_PROPS_CORRECT_1... + d c 3042 + d XML_SCHEMAP_P_PROPS_CORRECT_2_1... + d c 3043 + d XML_SCHEMAP_P_PROPS_CORRECT_2_2... + d c 3044 + d XML_SCHEMAP_E_PROPS_CORRECT_2... + d c 3045 + d XML_SCHEMAP_E_PROPS_CORRECT_3... + d c 3046 + d XML_SCHEMAP_E_PROPS_CORRECT_4... + d c 3047 + d XML_SCHEMAP_E_PROPS_CORRECT_5... + d c 3048 + d XML_SCHEMAP_E_PROPS_CORRECT_6... + d c 3049 + d XML_SCHEMAP_SRC_INCLUDE... + d c 3050 + d XML_SCHEMAP_SRC_ATTRIBUTE_1... + d c 3051 + d XML_SCHEMAP_SRC_ATTRIBUTE_2... + d c 3052 + d XML_SCHEMAP_SRC_ATTRIBUTE_3_1... + d c 3053 + d XML_SCHEMAP_SRC_ATTRIBUTE_3_2... + d c 3054 + d XML_SCHEMAP_SRC_ATTRIBUTE_4... + d c 3055 + d XML_SCHEMAP_NO_XMLNS... + d c 3056 + d XML_SCHEMAP_NO_XSI... + d c 3057 + d XML_SCHEMAP_COS_VALID_DEFAULT_1... + d c 3058 + d XML_SCHEMAP_COS_VALID_DEFAULT_2_1... + d c 3059 + d XML_SCHEMAP_COS_VALID_DEFAULT_2_2_1... + d c 3060 + d XML_SCHEMAP_COS_VALID_DEFAULT_2_2_2... + d c 3061 + d XML_SCHEMAP_CVC_SIMPLE_TYPE... + d c 3062 + d XML_SCHEMAP_COS_CT_EXTENDS_1_1... + d c 3063 + d XML_SCHEMAP_SRC_IMPORT_1_1... + d c 3064 + d XML_SCHEMAP_SRC_IMPORT_1_2... + d c 3065 + d XML_SCHEMAP_SRC_IMPORT_2... + d c 3066 + d XML_SCHEMAP_SRC_IMPORT_2_1... + d c 3067 + d XML_SCHEMAP_SRC_IMPORT_2_2... + d c 3068 + d XML_SCHEMAP_INTERNAL... Non W3C + d c 3069 + d XML_SCHEMAP_NOT_DETERMINISTIC... + d c 3070 + d XML_SCHEMAP_SRC_ATTRIBUTE_GROUP_1... + d c 3071 + d XML_SCHEMAP_SRC_ATTRIBUTE_GROUP_2... + d c 3072 + d XML_SCHEMAP_SRC_ATTRIBUTE_GROUP_3... + d c 3073 + d XML_SCHEMAP_MG_PROPS_CORRECT_1... + d c 3074 + d XML_SCHEMAP_MG_PROPS_CORRECT_2... + d c 3075 + d XML_SCHEMAP_SRC_CT_1... + d c 3076 + d XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_3... + d c 3077 + d XML_SCHEMAP_AU_PROPS_CORRECT_2... + d c 3078 + d XML_SCHEMAP_A_PROPS_CORRECT_2... + d c 3079 + d XML_SCHEMAP_C_PROPS_CORRECT... + d c 3080 + d XML_SCHEMAP_SRC_REDEFINE... + d c 3081 + d XML_SCHEMAP_SRC_IMPORT... + d c 3082 + d XML_SCHEMAP_WARN_SKIP_SCHEMA... + d c 3083 + d XML_SCHEMAP_WARN_UNLOCATED_SCHEMA... + d c 3084 + d XML_SCHEMAP_WARN_ATTR_REDECL_PROH... + d c 3085 + d XML_SCHEMAP_WARN_ATTR_POINTLESS_PROH... + d c 3086 + d XML_SCHEMAP_AG_PROPS_CORRECT... + d c 3087 + d XML_SCHEMAP_COS_CT_EXTENDS_1_2... + d c 3088 + d XML_SCHEMAP_AU_PROPS_CORRECT... + d c 3089 + d XML_SCHEMAP_A_PROPS_CORRECT_3... + d c 3090 + d XML_SCHEMAP_COS_ALL_LIMITED... + d c 3091 + d XML_SCHEMATRONV_ASSERT... + d c 4000 + d XML_SCHEMATRONV_REPORT... + d c 4001 + d XML_MODULE_OPEN... + d c 4900 + d XML_MODULE_CLOSE... + d c 4901 + d XML_CHECK_FOUND_ELEMENT... + d c 5000 + d XML_CHECK_FOUND_ATTRIBUTE... + d c 5001 + d XML_CHECK_FOUND_TEXT... + d c 5002 + d XML_CHECK_FOUND_CDATA... + d c 5003 + d XML_CHECK_FOUND_ENTITYREF... + d c 5004 + d XML_CHECK_FOUND_ENTITY... + d c 5005 + d XML_CHECK_FOUND_PI... + d c 5006 + d XML_CHECK_FOUND_COMMENT... + d c 5007 + d XML_CHECK_FOUND_DOCTYPE... + d c 5008 + d XML_CHECK_FOUND_FRAGMENT... + d c 5009 + d XML_CHECK_FOUND_NOTATION... + d c 5010 + d XML_CHECK_UNKNOWN_NODE... + d c 5011 + d XML_CHECK_ENTITY_TYPE... + d c 5012 + d XML_CHECK_NO_PARENT... + d c 5013 + d XML_CHECK_NO_DOC... + d c 5014 + d XML_CHECK_NO_NAME... + d c 5015 + d XML_CHECK_NO_ELEM... + d c 5016 + d XML_CHECK_WRONG_DOC... + d c 5017 + d XML_CHECK_NO_PREV... + d c 5018 + d XML_CHECK_WRONG_PREV... + d c 5019 + d XML_CHECK_NO_NEXT... + d c 5020 + d XML_CHECK_WRONG_NEXT... + d c 5021 + d XML_CHECK_NOT_DTD... + d c 5022 + d XML_CHECK_NOT_ATTR... + d c 5023 + d XML_CHECK_NOT_ATTR_DECL... + d c 5024 + d XML_CHECK_NOT_ELEM_DECL... + d c 5025 + d XML_CHECK_NOT_ENTITY_DECL... + d c 5026 + d XML_CHECK_NOT_NS_DECL... + d c 5027 + d XML_CHECK_NO_HREF... + d c 5028 + d XML_CHECK_WRONG_PARENT... + d c 5029 + d XML_CHECK_NS_SCOPE... + d c 5030 + d XML_CHECK_NS_ANCESTOR... + d c 5031 + d XML_CHECK_NOT_UTF8... + d c 5032 + d XML_CHECK_NO_DICT... + d c 5033 + d XML_CHECK_NOT_NCNAME... + d c 5034 + d XML_CHECK_OUTSIDE_DICT... + d c 5035 + d XML_CHECK_WRONG_NAME... + d c 5036 + d XML_CHECK_NAME_NOT_NULL... + d c 5037 + d XML_I18N_NO_NAME... + d c 6000 + d XML_I18N_NO_HANDLER... + d c 6001 + d XML_I18N_EXCESS_HANDLER... + d c 6002 + d XML_I18N_CONV_FAILED... + d c 6003 + d XML_I18N_NO_OUTPUT... + d c 6004 + d XML_BUF_OVERFLOW... + d c 7000 + + * xmlGenericErrorFunc: + * @ctx: a parsing context + * @msg: the message + * @...: the extra arguments of the varags to format the message + * + * Signature of the function to use when there is an error and + * no parsing or validity context available . + + d xmlGenericErrorFunc... + d s * based(######typedef######) + d procptr + + * xmlStructuredErrorFunc: + * @userData: user provided data for the error callback + * @error: the error being raised. + * + * Signature of the function to use when there is an error and + * the module handles the new error reporting mechanism. + + d xmlStructuredErrorFunc... + d s * based(######typedef######) + d procptr + + * Use the following function to reset the two global variables + * xmlGenericError and xmlGenericErrorContext. + + d xmlSetGenericErrorFunc... + d pr extproc('xmlSetGenericErrorFunc') + d ctx * value void * + d handler value like(xmlGenericErrorFunc) + + d initGenericErrorDefaultFunc... + d pr extproc( + d 'initGenericErrorDefaultFunc') + d handler like(xmlGenericErrorFunc) + + d xmlSetStructuredErrorFunc... + d pr extproc('xmlSetStructuredErrorFunc') + d ctx * value void * + d handler value like(xmlGenericErrorFunc) + + * Default message routines used by SAX and Valid context for error + * and warning reporting. + * + * These are vararg functions. + * The following prototypes support up to 8 pointer arguments. + * Other argument signature can be achieved by defining alternate + * prototypes redirected to the same function. + + d xmlParserError pr extproc('xmlParserError') + d ctx * value void * + d msg * value options(*string) const char * + d handler value like(xmlGenericErrorFunc) + d arg1 * value options(*string: *nopass) + d arg2 * value options(*string: *nopass) + d arg3 * value options(*string: *nopass) + d arg4 * value options(*string: *nopass) + d arg5 * value options(*string: *nopass) + d arg6 * value options(*string: *nopass) + d arg7 * value options(*string: *nopass) + d arg8 * value options(*string: *nopass) + + d xmlParserWarning... + d pr extproc('xmlParserWarning') + d ctx * value void * + d msg * value options(*string) const char * + d handler value like(xmlGenericErrorFunc) + d arg1 * value options(*string: *nopass) + d arg2 * value options(*string: *nopass) + d arg3 * value options(*string: *nopass) + d arg4 * value options(*string: *nopass) + d arg5 * value options(*string: *nopass) + d arg6 * value options(*string: *nopass) + d arg7 * value options(*string: *nopass) + d arg8 * value options(*string: *nopass) + + d xmlParserValidityError... + d pr extproc('xmlParserValidityError') + d ctx * value void * + d msg * value options(*string) const char * + d handler value like(xmlGenericErrorFunc) + d arg1 * value options(*string: *nopass) + d arg2 * value options(*string: *nopass) + d arg3 * value options(*string: *nopass) + d arg4 * value options(*string: *nopass) + d arg5 * value options(*string: *nopass) + d arg6 * value options(*string: *nopass) + d arg7 * value options(*string: *nopass) + d arg8 * value options(*string: *nopass) + + d xmlParserValidityWarning... + d pr extproc('xmlParserValidityWarning') + d ctx * value void * + d msg * value options(*string) const char * + d handler value like(xmlGenericErrorFunc) + d arg1 * value options(*string: *nopass) + d arg2 * value options(*string: *nopass) + d arg3 * value options(*string: *nopass) + d arg4 * value options(*string: *nopass) + d arg5 * value options(*string: *nopass) + d arg6 * value options(*string: *nopass) + d arg7 * value options(*string: *nopass) + d arg8 * value options(*string: *nopass) + + d xmlParserPrintFileInfo... + d pr extproc('xmlParserPrintFileInfo') + d input value like(xmlParserInputPtr) + + d xmlParserPrintFileContext... + d pr extproc('xmlParserPrintFileContext') + d input value like(xmlParserInputPtr) + + * Extended error information routines + + d xmlGetLastError... + d pr extproc('xmlGetLastError') + d like(xmlErrorPtr) + + d xmlResetLastError... + d pr extproc('xmlResetLastError') + + d xmlCtxtGetLastError... + d pr extproc('xmlCtxtGetLastError') + d like(xmlErrorPtr) + d ctx * value void * + + d xmlCtxtResetLastError... + d pr extproc('xmlCtxtResetLastError') + d ctx * value void * + + d xmlResetError pr extproc('xmlResetError') + d err value like(xmlErrorPtr) + + d xmlCopyError pr extproc('xmlCopyError') + d like(xmlCint) + d from value like(xmlErrorPtr) + d to value like(xmlErrorPtr) + + /endif XML_ERROR_H__ diff --git a/os400/libxmlrpg/xmlexports.rpgle b/os400/libxmlrpg/xmlexports.rpgle new file mode 100644 index 0000000..9a6fd10 --- /dev/null +++ b/os400/libxmlrpg/xmlexports.rpgle @@ -0,0 +1,15 @@ + * Summary: macros for marking symbols as exportable/importable. + * Description: macros for marking symbols as exportable/importable. + * + * Copy: See Copyright for the status of this software. + * + * Author: Patrick Monnerat , DATASPHERE S.A. + + /if not defined(XML_EXPORTS_H__) + /define XML_EXPORTS_H__ + + * The definition in the original C header file are not appliable to + * ILE/RPG. + * Therefore this file is intentionally empty. + + /endif XML_EXPORTS_H__ diff --git a/os400/libxmlrpg/xmlmemory.rpgle b/os400/libxmlrpg/xmlmemory.rpgle new file mode 100644 index 0000000..472e941 --- /dev/null +++ b/os400/libxmlrpg/xmlmemory.rpgle @@ -0,0 +1,247 @@ + * Summary: interface for the memory allocator + * Description: provides interfaces for the memory allocator, + * including debugging capabilities. + * + * Copy: See Copyright for the status of this software. + * + * Author: Patrick Monnerat , DATASPHERE S.A. + + /if not defined(DEBUG_MEMORY_ALLOC__) + /define DEBUG_MEMORY_ALLOC__ + + /include "libxmlrpg/xmlversion" + /include "libxmlrpg/xmlTypesC" + + * DEBUG_MEMORY: + * + * DEBUG_MEMORY replaces the allocator with a collect and debug + * shell to the libc allocator. + * DEBUG_MEMORY should only be activated when debugging + * libxml i.e. if libxml has been configured with --with-debug-mem too. + + * /define DEBUG_MEMORY_FREED + * /define DEBUG_MEMORY_LOCATION + + /if defined(DEBUG) + /if not defined(DEBUG_MEMORY) + /define DEBUG_MEMORY + /endif + /endif + + * DEBUG_MEMORY_LOCATION: + * + * DEBUG_MEMORY_LOCATION should be activated only when debugging + * libxml i.e. if libxml has been configured with --with-debug-mem too. + + /if defined(DEBUG_MEMORY_LOCATION) + /endif + + * The XML memory wrapper support 4 basic overloadable functions. + + * xmlFreeFunc: + * @mem: an already allocated block of memory + * + * Signature for a free() implementation. + + d xmlFreeFunc s * based(######typedef######) + d procptr + + * xmlMallocFunc: + * @size: the size requested in bytes + * + * Signature for a malloc() implementation. + * + * Returns a pointer to the newly allocated block or NULL in case of error. + + d xmlMallocFunc s * based(######typedef######) + d procptr + + * xmlReallocFunc: + * @mem: an already allocated block of memory + * @size: the new size requested in bytes + * + * Signature for a realloc() implementation. + * + * Returns a pointer to the newly reallocated block or NULL in case of error. + + d xmlReallocFunc s * based(######typedef######) + d procptr + + * xmlStrdupFunc: + * @str: a zero terminated string + * + * Signature for an strdup() implementation. + * + * Returns the copy of the string or NULL in case of error. + + d xmlStrdupFunc s * based(######typedef######) + d procptr + + * The 5 interfaces used for all memory handling within libxml. + * Since indirect calls are only supported via a based prototype, + * storage is accessed via functions. + + d get_xmlFree pr extproc('__get_xmlFree') + d like(xmlFreeFunc) + + d set_xmlFree pr extproc('__set_xmlFree') + d func value like(xmlFreeFunc) + + d xmlFree pr extproc('__call_xmlFree') + d mem * value void * + + d get_xmlMalloc pr extproc('__get_xmlMalloc') + d like(xmlMallocFunc) + + d set_xmlMalloc pr extproc('__set_xmlMalloc') + d func value like(xmlMallocFunc) + + d xmlMalloc pr * extproc('__call_xmlMalloc') void * + d size value like(xmlCsize_t) + + d get_xmlMallocAtomic... + d pr extproc('__get_xmlMallocAtomic') + d like(xmlMallocFunc) + + d set_xmlMallocAtomic... + d pr extproc('__set_xmlMallocAtomic') + d func value like(xmlMallocFunc) + + d xmlMallocAtomic... + d pr * extproc('__call_xmlMallocAtomic') void * + d size value like(xmlCsize_t) + + d get_xmlRealloc pr extproc('__get_xmlRealloc') + d like(xmlReallocFunc) + + d set_xmlRealloc pr extproc('__set_xmlRealloc') + d func value like(xmlReallocFunc) + + d xmlRealloc pr * extproc('__call_xmlRealloc') void * + d mem * value void * + d size value like(xmlCsize_t) + + d get_xmlMemStrdup... + d pr extproc('__get_xmlMemStrdup') + d like(xmlStrdupFunc) + + d set_xmlMemStrdup... + d pr extproc('__set_xmlMemstrdup') + d func value like(xmlStrdupFunc) + + d xmlMemStrdup pr * extproc('__call_xmlMemStrdup') void * + d str * value options(*string) const char * + + * The way to overload the existing functions. + * The xmlGc function have an extra entry for atomic block + * allocations useful for garbage collected memory allocators + + d xmlMemSetup pr extproc('xmlMemSetup') + d like(xmlCint) + d freeFunc value like(xmlFreeFunc) + d mallocFunc value like(xmlMallocFunc) + d reallocFunc value like(xmlReallocFunc) + d strdupFunc value like(xmlStrdupFunc) + + d xmlMemGet pr extproc('xmlMemGet') + d like(xmlCint) + d freeFunc like(xmlFreeFunc) + d mallocFunc like(xmlMallocFunc) + d reallocFunc like(xmlReallocFunc) + d strdupFunc like(xmlStrdupFunc) + + d xmlGcMemSetup pr extproc('xmlGcMemSetup') + d like(xmlCint) + d freeFunc value like(xmlFreeFunc) + d mallocFunc value like(xmlMallocFunc) + d mallocAtomicFunc... + d value like(xmlMallocFunc) + d reallocFunc value like(xmlReallocFunc) + d strdupFunc value like(xmlStrdupFunc) + + d xmlGcMemGet pr extproc('xmlGcMemGet') + d like(xmlCint) + d freeFunc like(xmlFreeFunc) + d mallocFunc like(xmlMallocFunc) + d mallocAtomicFunc... + d like(xmlMallocFunc) + d reallocFunc like(xmlReallocFunc) + d strdupFunc like(xmlStrdupFunc) + + * Initialization of the memory layer. + + d xmlInitMemory pr extproc('xmlInitMemory') + d like(xmlCint) + + * Cleanup of the memory layer. + + d xmlCleanupMemory... + d pr extproc('xmlCleanupMemory') + + * These are specific to the XML debug memory wrapper. + + d xmlMemUsed pr extproc('xmlMemUsed') + d like(xmlCint) + + d xmlMemBlocks pr extproc('xmlMemBlocks') + d like(xmlCint) + + d xmlMemDisplay pr extproc('xmlMemDisplay') + d fp * value FILE * + + d xmlMmDisplayLast... + d pr extproc('xmlMemDisplayLast') + d fp * value FILE * + d nbBytes value like(xmlClong) + + d xmlMemShow pr extproc('xmlMemShow') + d fp * value FILE * + d nr value like(xmlCint) + + d xmlMemoryDump pr extproc('xmlMemoryDump') + + d xmlMemMalloc pr * extproc('xmlMemMalloc') void * + d size value like(xmlCsize_t) + + d xmlMemRealloc pr * extproc('xmlMemRealloc') void * + d ptr * value void * + d size value like(xmlCsize_t) + + d xmlMemFree pr extproc('xmlMemFree') + d ptr * value void * + + d xmlMemoryStrdup... + d pr * extproc('xmlMemoryStrdup') char * + d str * value options(*string) const char * + + d xmlMallocLoc pr * extproc('xmlMallocLoc') void * + d size value like(xmlCsize_t) + d file * value options(*string) const char * + d line value like(xmlCint) + + d xmlReallocLoc pr * extproc('xmlReallocLoc') void * + d ptr * value void * + d size value like(xmlCsize_t) + d file * value options(*string) const char * + d line value like(xmlCint) + + d xmlMallocAtomicLoc... + d pr * extproc('xmlMallocAtomicLoc') void * + d size value like(xmlCsize_t) + d file * value options(*string) const char * + d line value like(xmlCint) + + d xmlMemStrdupLoc... + d pr * extproc('xmlMemStrdupLoc') char * + d str * value options(*string) const char * + d file * value options(*string) const char * + d line value like(xmlCint) + + /if not defined(XML_GLOBALS_H) + /if not defined(XML_THREADS_H__) + /include "libxmlrpg/threads" + /include "libxmlrpg/globals" + /endif + /endif + + /endif DEBUG_MEMORY_ALLOC__ diff --git a/os400/libxmlrpg/xmlmodule.rpgle b/os400/libxmlrpg/xmlmodule.rpgle new file mode 100644 index 0000000..035254d --- /dev/null +++ b/os400/libxmlrpg/xmlmodule.rpgle @@ -0,0 +1,57 @@ + * Summary: dynamic module loading + * Description: basic API for dynamic module loading, used by + * libexslt added in 2.6.17 + * + * Copy: See Copyright for the status of this software. + * + * Author: Patrick Monnerat , DATASPHERE S.A. + + /if not defined(XML_MODULE_H__) + /define XML_MODULE_H__ + + /include "libxmlrpg/xmlversion" + + /if defined(LIBXML_MODULES_ENABLED) + + /include "libxmlrpg/xmlTypesC" + + * xmlModulePtr: + * + * A handle to a dynamically loaded module + + d xmlModulePtr s * based(######typedef######) + + * xmlModuleOption: + * + * enumeration of options that can be passed down to xmlModuleOpen() + + d xmlModuleOption... + d s based(######typedef######) + d like(xmlCenum) + d XML_MODULE_LAZY... Lazy binding + d c 1 + d XML_MODULE_LOCAL... Local binding + d c 2 + + d xmlModuleOpen pr extproc('xmlModuleOpen') + d like(xmlModulePtr) + d filename * value options(*string) const char * + d options value like(xmlCint) + + d xmlModuleSymbol... + d pr extproc('xmlModuleSymbol') + d like(xmlCint) + d module value like(xmlModulePtr) + d name * value options(*string) const char * + d result * void *(*) + + d xmlModuleClose pr extproc('xmlModuleClose') + d like(xmlCint) + d module value like(xmlModulePtr) + + d xmlModuleFree pr extproc('xmlModuleFree') + d like(xmlCint) + d module value like(xmlModulePtr) + + /endif LIBXML_MODULES_ENBLD + /endif XML_MODULE_H__ diff --git a/os400/libxmlrpg/xmlreader.rpgle b/os400/libxmlrpg/xmlreader.rpgle new file mode 100644 index 0000000..9ec76b3 --- /dev/null +++ b/os400/libxmlrpg/xmlreader.rpgle @@ -0,0 +1,668 @@ + * Summary: the XMLReader implementation + * Description: API of the XML streaming API based on C# interfaces. + * + * Copy: See Copyright for the status of this software. + * + * Author: Patrick Monnerat , DATASPHERE S.A. + + /if not defined(XML_XMLREADER_H__) + /define XML_XMLREADER_H__ + + /include "libxmlrpg/xmlversion" + /include "libxmlrpg/xmlTypesC" + /include "libxmlrpg/tree" + /include "libxmlrpg/xmlIO" + + /if defined(LIBXML_SCHEMAS_ENABLED) + /include "libxmlrpg/relaxng" + /include "libxmlrpg/xmlschemas" + /endif + + * xmlParserSeverities: + * + * How severe an error callback is when the per-reader error callback API + * is used. + + d xmlParserSeverities... + d s based(######typedef######) + d like(xmlCenum) + d XML_PARSER_SEVERITY_VALIDITY_WARNING... + d c 1 + d XML_PARSER_SEVERITY_VALIDITY_ERROR... + d c 2 + d XML_PARSER_SEVERITY_WARNING... + d c 3 + d XML_PARSER_SEVERITY_ERROR... + d c 4 + + /if defined(LIBXML_READER_ENABLED) + + * xmlTextReaderMode: + * + * Internal state values for the reader. + + d xmlTextReaderMode... + d s based(######typedef######) + d like(xmlCenum) + d XML_TEXTREADER_MODE_INITIAL... + d c 0 + d XML_TEXTREADER_MODE_INTERACTIVE... + d c 1 + d XML_TEXTREADER_MODE_ERROR... + d c 2 + d XML_TEXTREADER_MODE_EOF... + d c 3 + d XML_TEXTREADER_MODE_CLOSED... + d c 4 + d XML_TEXTREADER_MODE_READING... + d c 5 + + * xmlParserProperties: + * + * Some common options to use with xmlTextReaderSetParserProp, but it + * is better to use xmlParserOption and the xmlReaderNewxxx and + * xmlReaderForxxx APIs now. + + d xmlParserProperties... + d s based(######typedef######) + d like(xmlCenum) + d XML_PARSER_LOADDTD... + d c 1 + d XML_PARSER_DEFAULTATTRS... + d c 2 + d XML_PARSER_VALIDATE... + d c 3 + d XML_PARSER_SUBST_ENTITIES... + d c 4 + + * xmlReaderTypes: + * + * Predefined constants for the different types of nodes. + + d xmlReaderTypes s based(######typedef######) + d like(xmlCenum) + d XML_READER_TYPE_NONE... + d c 0 + d XML_READER_TYPE_ELEMENT... + d c 1 + d XML_READER_TYPE_ATTRIBUTE... + d c 2 + d XML_READER_TYPE_TEXT... + d c 3 + d XML_READER_TYPE_CDATA... + d c 4 + d XML_READER_TYPE_ENTITY_REFERENCE... + d c 5 + d XML_READER_TYPE_ENTITY... + d c 6 + d XML_READER_TYPE_PROCESSING_INSTRUCTION... + d c 7 + d XML_READER_TYPE_COMMENT... + d c 8 + d XML_READER_TYPE_DOCUMENT... + d c 9 + d XML_READER_TYPE_DOCUMENT_TYPE... + d c 10 + d XML_READER_TYPE_DOCUMENT_FRAGMENT... + d c 11 + d XML_READER_TYPE_NOTATION... + d c 12 + d XML_READER_TYPE_WHITESPACE... + d c 13 + d XML_READER_TYPE_SIGNIFICANT_WHITESPACE... + d c 14 + d XML_READER_TYPE_END_ELEMENT... + d c 15 + d XML_READER_TYPE_END_ENTITY... + d c 16 + d XML_READER_TYPE_XML_DECLARATION... + d c 17 + + * xmlTextReaderPtr: + * + * Pointer to an xmlReader context. + + d xmlTextReaderPtr... + d s * based(######typedef######) + + * Constructors & Destructor + + d xmlNewTextReader... + d pr extproc('xmlNewTextReader') + d like(xmlTextReaderPtr) + d input value like(xmlParserInputBufferPtr) + d URI * value options(*string) const char * + + d xmlNewTextReaderFilename... + d pr extproc('xmlNewTextReaderFilename') + d like(xmlTextReaderPtr) + d URI * value options(*string) const char * + + d xmlFreeTextReader... + d pr extproc('xmlFreeTextReader') + d reader value like(xmlTextReaderPtr) + + d xmlTextReaderSetup... + d pr extproc('xmlTextReaderSetup') + d like(xmlCint) + d reader value like(xmlTextReaderPtr) + d input value like(xmlParserInputBufferPtr) + d URL * value options(*string) const char * + d encoding * value options(*string) const char * + d options value like(xmlCint) + + * Iterators + + d xmlTextReaderRead... + d pr extproc('xmlTextReaderRead') + d like(xmlCint) + d reader value like(xmlTextReaderPtr) + + /if defined(LIBXML_WRITER_ENABLED) + d xmlTextReaderReadInnerXml... + d pr * extproc('xmlTextReaderReadInnerXml') xmlChar * + d reader value like(xmlTextReaderPtr) + + d xmlTextReaderReadOuterXml... + d pr * extproc('xmlTextReaderReadOuterXml') xmlChar * + d reader value like(xmlTextReaderPtr) + /endif + + d xmlTextReaderReadString... + d pr * extproc('xmlTextReaderReadString') xmlChar * + d reader value like(xmlTextReaderPtr) + + d xmlTextReaderReadAttributeValue... + d pr extproc( + d 'xmlTextReaderReadAttributeValue') + d like(xmlCint) + d reader value like(xmlTextReaderPtr) + + * Attributes of the node + + d xmlTextReaderAttributeCount... + d pr extproc( + d 'xmlTextReaderAttributeCount') + d like(xmlCint) + d reader value like(xmlTextReaderPtr) + + d xmlTextReaderDepth... + d pr extproc('xmlTextReaderDepth') + d like(xmlCint) + d reader value like(xmlTextReaderPtr) + + d xmlTextReaderHasAttributes... + d pr extproc('xmlTextReaderHasAttributes') + d like(xmlCint) + d reader value like(xmlTextReaderPtr) + + d xmlTextReaderHasValue... + d pr extproc('xmlTextReaderHasValue') + d like(xmlCint) + d reader value like(xmlTextReaderPtr) + + d xmlTextReaderIsDefault... + d pr extproc('xmlTextReaderIsDefault') + d like(xmlCint) + d reader value like(xmlTextReaderPtr) + + d xmlTextReaderIsEmptyElement... + d pr extproc( + d 'xmlTextReaderIsEmptyElement') + d like(xmlCint) + d reader value like(xmlTextReaderPtr) + + d xmlTextReaderNodeType... + d pr extproc('xmlTextReaderNodeType') + d like(xmlCint) + d reader value like(xmlTextReaderPtr) + + d xmlTextReaderQuoteChar... + d pr extproc('xmlTextReaderQuoteChar') + d like(xmlCint) + d reader value like(xmlTextReaderPtr) + + d xmlTextReaderReadState... + d pr extproc('xmlTextReaderReadState') + d like(xmlCint) + d reader value like(xmlTextReaderPtr) + + d xmlTextReaderIsNamespaceDecl... + d pr extproc( + d 'xmlTextReaderIsNamespaceDecl') + d like(xmlCint) + d reader value like(xmlTextReaderPtr) + + d xmlTextReaderConstBaseUri... + d pr * extproc('xmlTextReaderConstBaseUri') const xmlChar * + d reader value like(xmlTextReaderPtr) + + d xmlTextReaderConstLocalName... + d pr * extproc( const xmlChar * + d 'xmlTextReaderConstLocalName') + d reader value like(xmlTextReaderPtr) + + d xmlTextReaderConstName... + d pr * extproc('xmlTextReaderConstName') const xmlChar * + d reader value like(xmlTextReaderPtr) + + d xmlTextReaderConstNamespaceUri... + d pr * extproc( const xmlChar * + d 'xmlTextReaderConstNamespaceUri') + d reader value like(xmlTextReaderPtr) + + d xmlTextReaderConstPrefix... + d pr * extproc('xmlTextReaderConstPrefix') const xmlChar * + d reader value like(xmlTextReaderPtr) + + d xmlTextReaderConstXmlLang... + d pr * extproc('xmlTextReaderConstXmlLang') const xmlChar * + d reader value like(xmlTextReaderPtr) + + d xmlTextReaderConstString... + d pr * extproc('xmlTextReaderConstString') const xmlChar * + d reader value like(xmlTextReaderPtr) + d str * value options(*string) const xmlChar * + + d xmlTextReaderConstValue... + d pr * extproc('xmlTextReaderConstValue') const xmlChar * + d reader value like(xmlTextReaderPtr) + + * use the Const version of the routine for + * better performance and simpler code + + d xmlTextReaderBaseUri... + d pr * extproc('xmlTextReaderBaseUri') xmlChar * + d reader value like(xmlTextReaderPtr) + + d xmlTextReaderLocalName... + d pr * extproc('xmlTextReaderLocalName') xmlChar * + d reader value like(xmlTextReaderPtr) + + d xmlTextReaderName... + d pr * extproc('xmlTextReaderName') xmlChar * + d reader value like(xmlTextReaderPtr) + + d xmlTextReaderNamespaceUri... + d pr * extproc('xmlTextReaderNamespaceUri') xmlChar * + d reader value like(xmlTextReaderPtr) + + d xmlTextReaderPrefix... + d pr * extproc('xmlTextReaderPrefix') xmlChar * + d reader value like(xmlTextReaderPtr) + + d xmlTextReaderXmlLang... + d pr * extproc('xmlTextReaderXmlLang') xmlChar * + d reader value like(xmlTextReaderPtr) + + d xmlTextReaderValue... + d pr * extproc('xmlTextReaderValue') xmlChar * + d reader value like(xmlTextReaderPtr) + + * Methods of the XmlTextReader + + d xmlTextReaderClose... + d pr extproc('xmlTextReaderClose') + d like(xmlCint) + d reader value like(xmlTextReaderPtr) + + d xmlTextReaderGetAttributeNo... + d pr * extproc( xmlChar * + d 'xmlTextReaderGetAttributeNo') + d reader value like(xmlTextReaderPtr) + d no value like(xmlCint) + + d xmlTextReaderGetAttribute... + d pr * extproc('xmlTextReaderGetAttribute') xmlChar * + d reader value like(xmlTextReaderPtr) + d name * value options(*string) const xmlChar * + + d xmlTextReaderGetAttributeNs... + d pr * extproc( xmlChar * + d 'xmlTextReaderGetAttributeNs') + d reader value like(xmlTextReaderPtr) + d localName * value options(*string) const xmlChar * + d namespaceURI * value options(*string) const xmlChar * + + d xmlTextReaderGetRemainder... + d pr extproc('xmlTextReaderGetRemainder') + d like(xmlParserInputBufferPtr) + d reader value like(xmlTextReaderPtr) + + d xmlTextReaderLookupNamespace... + d pr * extproc( xmlChar * + d 'xmlTextReaderLookupNamespace') + d reader value like(xmlTextReaderPtr) + d prefix * value options(*string) const xmlChar * + + d xmlTextReaderMoveToAttributeNo... + d pr extproc( + d 'xmlTextReaderMoveToAttributeNo') + d like(xmlCint) + d reader value like(xmlTextReaderPtr) + d no value like(xmlCint) + + d xmlTextReaderMoveToAttribute... + d pr extproc( + d 'xmlTextReaderMoveToAttribute') + d like(xmlCint) + d reader value like(xmlTextReaderPtr) + d name * value options(*string) const xmlChar * + + d xmlTextReaderMoveToAttributeNs... + d pr extproc( + d 'xmlTextReaderMoveToAttributeNs') + d like(xmlCint) + d reader value like(xmlTextReaderPtr) + d localName * value options(*string) const xmlChar * + d namespaceURI * value options(*string) const xmlChar * + + d xmlTextReaderMoveToFirstAttribute... + d pr extproc( + d 'xmlTextReaderMoveToFirstAttribute') + d like(xmlCint) + d reader value like(xmlTextReaderPtr) + + d xmlTextReaderMoveToNextAttribute... + d pr extproc( + d 'xmlTextReaderMoveToNextAttribute') + d like(xmlCint) + d reader value like(xmlTextReaderPtr) + + d xmlTextReaderMoveToElement... + d pr extproc('xmlTextReaderMoveToElement') + d like(xmlCint) + d reader value like(xmlTextReaderPtr) + + d xmlTextReaderNormalization... + d pr extproc('xmlTextReaderNormalization') + d like(xmlCint) + d reader value like(xmlTextReaderPtr) + + d xmlTextReaderConstEncoding... + d pr * extproc('xmlTextReaderConstEncoding')const xmlChar * + d reader value like(xmlTextReaderPtr) + + * Extensions + + d xmlTextReaderSetParserProp... + d pr extproc('xmlTextReaderSetParserProp') + d like(xmlCint) + d reader value like(xmlTextReaderPtr) + d prop value like(xmlCint) + d value value like(xmlCint) + + d xmlTextReaderGetParserProp... + d pr extproc('xmlTextReaderGetParserProp') + d like(xmlCint) + d reader value like(xmlTextReaderPtr) + d prop value like(xmlCint) + + d xmlTextReaderCurrentNode... + d pr extproc('xmlTextReaderCurrentNode') + d like(xmlNodePtr) + d reader value like(xmlTextReaderPtr) + + d xmlTextReaderGetParserLineNumber... + d pr extproc( + d 'xmlTextReaderGetParserLineNumber') + d like(xmlCint) + d reader value like(xmlTextReaderPtr) + + d xmlTextReaderGetParserColumnNumber... + d pr extproc( + d 'xmlTextReaderGetParserColumnNumber') + d like(xmlCint) + d reader value like(xmlTextReaderPtr) + + d xmlTextReaderPreserve... + d pr extproc('xmlTextReaderPreserve') + d like(xmlNodePtr) + d reader value like(xmlTextReaderPtr) + + /if defined(LIBXML_PATTERN_ENABLED) + d xmlTextReaderPreservePattern... + d pr extproc( + d 'xmlTextReaderPreservePattern') + d like(xmlCint) + d reader value like(xmlTextReaderPtr) + d pattern * value options(*string) const xmlChar * + d namespaces * const xmlChar *(*) + /endif LIBXML_PATTERN_ENBLD + + d xmlTextReaderCurrentDoc... + d pr extproc('xmlTextReaderCurrentDoc') + d like(xmlDocPtr) + d reader value like(xmlTextReaderPtr) + + d xmlTextReaderExpand... + d pr extproc('xmlTextReaderExpand') + d like(xmlNodePtr) + d reader value like(xmlTextReaderPtr) + + d xmlTextReaderNext... + d pr extproc('xmlTextReaderNext') + d like(xmlCint) + d reader value like(xmlTextReaderPtr) + + d xmlTextReaderNextSibling... + d pr extproc('xmlTextReaderNextSibling') + d like(xmlCint) + d reader value like(xmlTextReaderPtr) + + d xmlTextReaderIsValid... + d pr extproc('xmlTextReaderIsValid') + d like(xmlCint) + d reader value like(xmlTextReaderPtr) + + /if defined(LIBXML_SCHEMAS_ENABLED) + d xmlTextReaderRelaxNGValidate... + d pr extproc( + d 'xmlTextReaderRelaxNGValidate') + d like(xmlCint) + d reader value like(xmlTextReaderPtr) + d rng * value options(*string) const char * + + d xmlTextReaderRelaxNGValidateCtxt... + d pr extproc( + d 'xmlTextReaderRelaxNGValidateCtxt') + d like(xmlCint) + d reader value like(xmlTextReaderPtr) + d ctxt value like(xmlRelaxNGValidCtxtPtr) + d options value like(xmlCint) + + d xmlTextReaderRelaxNGSetSchema... + d pr extproc( + d 'xmlTextReaderRelaxNGSetSchema') + d like(xmlCint) + d reader value like(xmlTextReaderPtr) + d schema value like(xmlRelaxNGPtr) + + d xmlTextReaderSchemaValidate... + d pr extproc( + d 'xmlTextReaderSchemaValidate') + d like(xmlCint) + d reader value like(xmlTextReaderPtr) + d xsd * value options(*string) const char * + + d xmlTextReaderSchemaValidateCtxt... + d pr extproc( + d 'xmlTextReaderSchemaValidateCtxt') + d like(xmlCint) + d reader value like(xmlTextReaderPtr) + d ctxt value like(xmlSchemaValidCtxtPtr) + d options value like(xmlCint) + + d xmlTextReaderSetSchema... + d pr extproc('xmlTextReaderSetSchema') + d like(xmlCint) + d reader value like(xmlTextReaderPtr) + d schema value like(xmlSchemaPtr) + /endif + + d xmlTextReaderConstXmlVersion... + d pr * extproc( const xmlChar * + d 'xmlTextReaderConstXmlVersion') + d reader value like(xmlTextReaderPtr) + + d xmlTextReaderStandalone... + d pr extproc('xmlTextReaderStandalone') + d like(xmlCint) + d reader value like(xmlTextReaderPtr) + + * Index lookup + + d xmlTextReaderByteConsumed... + d pr extproc('xmlTextReaderByteConsumed') + d like(xmlClong) + d reader value like(xmlTextReaderPtr) + + * New more complete APIs for simpler creation and reuse of readers + + d xmlReaderWalker... + d pr extproc('xmlReaderWalker') + d like(xmlTextReaderPtr) + d doc value like(xmlDocPtr) + + d xmlReaderForDoc... + d pr extproc('xmlReaderForDoc') + d like(xmlTextReaderPtr) + d cur * value options(*string) const xmlChar * + d URL * value options(*string) const char * + d encoding * value options(*string) const char * + d options value like(xmlCint) + + d xmlReaderForFile... + d pr extproc('xmlReaderForFile') + d like(xmlTextReaderPtr) + d filename * value options(*string) const char * + d encoding * value options(*string) const char * + d options value like(xmlCint) + + d xmlReaderForMemory... + d pr extproc('xmlReaderForMemory') + d like(xmlTextReaderPtr) + d buffer * value options(*string) const char * + d size value like(xmlCint) + d URL * value options(*string) const char * + d encoding * value options(*string) const char * + d options value like(xmlCint) + + d xmlReaderForFd pr extproc('xmlReaderForFd') + d like(xmlTextReaderPtr) + d fd value like(xmlCint) + d URL * value options(*string) const char * + d encoding * value options(*string) const char * + d options value like(xmlCint) + + d xmlReaderForIO pr extproc('xmlReaderForIO') + d like(xmlTextReaderPtr) + d ioread value like(xmlInputReadCallback) + d ioclose value like(xmlInputCloseCallback) + d ioctx * value void * + d URL * value options(*string) const char * + d encoding * value options(*string) const char * + d options value like(xmlCint) + + d xmlReaderNewWalker... + d pr extproc('xmlReaderNewWalker') + d like(xmlCint) + d reader value like(xmlTextReaderPtr) + d doc value like(xmlDocPtr) + + d xmlReaderNewDoc... + d pr extproc('xmlReaderNewDoc') + d like(xmlCint) + d reader value like(xmlTextReaderPtr) + d cur * value options(*string) const xmlChar * + d URL * value options(*string) const char * + d encoding * value options(*string) const char * + d options value like(xmlCint) + + d xmlReaderNewFile... + d pr extproc('xmlReaderNewFile') + d like(xmlCint) + d reader value like(xmlTextReaderPtr) + d filename * value options(*string) const char * + d encoding * value options(*string) const char * + d options value like(xmlCint) + + d xmlReaderNewMemory... + d pr extproc('xmlReaderNewMemory') + d like(xmlCint) + d reader value like(xmlTextReaderPtr) + d buffer * value options(*string) const char * + d size value like(xmlCint) + d URL * value options(*string) const char * + d encoding * value options(*string) const char * + d options value like(xmlCint) + + d xmlReaderNewFd pr extproc('xmlReaderNewFd') + d like(xmlCint) + d reader value like(xmlTextReaderPtr) + d fd value like(xmlCint) + d URL * value options(*string) const char * + d encoding * value options(*string) const char * + d options value like(xmlCint) + + d xmlReaderNewIO pr extproc('xmlReaderNewIO') + d like(xmlCint) + d reader value like(xmlTextReaderPtr) + d ioread value like(xmlInputReadCallback) + d ioclose value like(xmlInputCloseCallback) + d ioctx * value void * + d URL * value options(*string) const char * + d encoding * value options(*string) const char * + d options value like(xmlCint) + + * Error handling extensions + + d xmlTextReaderLocatorPtr... + d s * based(######typedef######) void * + + * xmlTextReaderErrorFunc: + * @arg: the user argument + * @msg: the message + * @severity: the severity of the error + * @locator: a locator indicating where the error occured + * + * Signature of an error callback from a reader parser + + d xmlTextReaderErrorFunc... + d s * based(######typedef######) + d procptr + + d xmlTextReaderLocatorLineNumber... + d pr extproc( + d 'xmlTextReaderLocatorLineNumber') + d like(xmlCint) + d locator value like(xmlTextReaderLocatorPtr) + + d xmlTextReaderLocatorBaseURI... + d pr * extproc( xmlChar * + d 'xmlTextReaderLocatorBaseURI') + d locator value like(xmlTextReaderLocatorPtr) + + d xmlTextReaderSetErrorHandler... + d pr extproc( + d 'xmlTextReaderSetErrorHandler') + d reader value like(xmlTextReaderPtr) + d f value like(xmlTextReaderErrorFunc) + d arg * value void * + + d xmlTextReaderSetStructuredErrorHandler... + d pr extproc('xmlTextReaderSetStructuredE- + d rrorHandler') + d reader value like(xmlTextReaderPtr) + d f value like(xmlStructuredErrorFunc) + d arg * value void * + + d xmlTextReaderGetErrorHandler... + d pr extproc( + d 'xmlTextReaderGetErrorHandler') + d reader value like(xmlTextReaderPtr) + d f like(xmlTextReaderErrorFunc) + d arg * void *(*) + + /endif LIBXML_READER_ENABLD + /endif XML_XMLREADER_H__ diff --git a/os400/libxmlrpg/xmlregexp.rpgle b/os400/libxmlrpg/xmlregexp.rpgle new file mode 100644 index 0000000..01d411a --- /dev/null +++ b/os400/libxmlrpg/xmlregexp.rpgle @@ -0,0 +1,262 @@ + * Summary: regular expressions handling + * Description: basic API for libxml regular expressions handling used + * for XML Schemas and validation. + * + * Copy: See Copyright for the status of this software. + * + * Author: Patrick Monnerat , DATASPHERE S.A. + + /if not defined(XML_REGEXP_H__) + /define XML_REGEXP_H__ + + /include "libxmlrpg/xmlversion" + + /if defined(LIBXML_REGEXP_ENABLED) + + /include "libxmlrpg/xmlTypesC" + + * xmlRegexpPtr: + * + * A libxml regular expression, they can actually be far more complex + * thank the POSIX regex expressions. + + d xmlRegexpPtr s * based(######typedef######) + + * xmlRegExecCtxtPtr: + * + * A libxml progressive regular expression evaluation context + + d xmlRegExecCtxtPtr... + d s * based(######typedef######) + + /include "libxmlrpg/tree" + /include "libxmlrpg/dict" + + * The POSIX like API + + d xmlRegexpCompile... + d pr extproc('xmlRegexpCompile') + d like(xmlRegexpPtr) + d regexp * value options(*string) const xmlChar * + + d xmlRegFreeRegexp... + d pr extproc('xmlRegFreeRegexp') + d regexp value like(xmlRegexpPtr) + + d xmlRegexpExec pr extproc('xmlRegexpExec') + d like(xmlCint) + d comp value like(xmlRegexpPtr) + d value * value options(*string) const xmlChar * + + d xmlRegexpPrint pr extproc('xmlRegexpPrint') + d output * value FILE * + d regexp value like(xmlRegexpPtr) + + d xmlRegexpIsDeterminist... + d pr extproc('xmlRegexpIsDeterminist') + d like(xmlCint) + d comp value like(xmlRegexpPtr) + + * xmlRegExecCallbacks: + * @exec: the regular expression context + * @token: the current token string + * @transdata: transition data + * @inputdata: input data + * + * Callback function when doing a transition in the automata + + d xmlRegExecCallbacks... + d s * based(######typedef######) + d procptr + + * The progressive API + + d xmlRegNewExecCtxt... + d pr extproc('xmlRegNewExecCtxt') + d like(xmlRegExecCtxtPtr) + d comp value like(xmlRegexpPtr) + d callback value like(xmlRegExecCallbacks) + d data * value void * + + d xmlRegFreeExecCtxt... + d pr extproc('xmlRegFreeExecCtxt') + d exec value like(xmlRegExecCtxtPtr) + + d xmlRegExecPushString... + d pr extproc('xmlRegExecPushString') + d like(xmlCint) + d exec value like(xmlRegExecCtxtPtr) + d value * value options(*string) const xmlChar * + d data * value void * + + d xmlRegExecPushString2... + d pr extproc('xmlRegExecPushString2') + d like(xmlCint) + d exec value like(xmlRegExecCtxtPtr) + d value * value options(*string) const xmlChar * + d value2 * value options(*string) const xmlChar * + d data * value void * + + d xmlRegExecNextValues... + d pr extproc('xmlRegExecNextValues') + d like(xmlCint) + d exec value like(xmlRegExecCtxtPtr) + d nbval like(xmlCint) + d nbneg like(xmlCint) + d values * xmlChar * (*) + d terminal like(xmlCint) + + d xmlRegExecErrInfo... + d pr extproc('xmlRegExecErrInfo') + d like(xmlCint) + d exec value like(xmlRegExecCtxtPtr) + d string * const xmlChar * (*) + d nbval like(xmlCint) + d nbneg like(xmlCint) + d values * xmlChar * (*) + d terminal like(xmlCint) + + /if defined(LIBXML_EXPR_ENABLED) + + * Formal regular expression handling + * Its goal is to do some formal work on content models + + * expressions are used within a context + + d xmlExpCtxtPtr s * based(######typedef######) + + d xmlExpFreeCtxt pr extproc('xmlExpFreeCtxt') + d ctxt value like(xmlExpCtxtPtr) + + d xmlExpNewCtxt pr extproc('xmlExpNewCtxt') + d like(xmlExpCtxtPtr) + d maxNodes value like(xmlCint) + d dict value like(xmlDictPtr) + + d xmlExpCtxtNbNodes... + d pr extproc('xmlExpCtxtNbNodes') + d like(xmlCint) + d ctxt value like(xmlExpCtxtPtr) + + d xmlExpCtxtNbCons... + d pr extproc('xmlExpCtxtNbCons') + d like(xmlCint) + d ctxt value like(xmlExpCtxtPtr) + + * Expressions are trees but the tree is opaque + + d xmlExpNodePtr s * based(######typedef######) + + d xmlExpNodeType s based(######typedef######) + d like(xmlCenum) + d XML_EXP_EMPTY c 0 + d XML_EXP_FORBID... + d c 1 + d XML_EXP_ATOM c 2 + d XML_EXP_SEQ c 3 + d XML_EXP_OR c 4 + d XML_EXP_COUNT c 5 + + * 2 core expressions shared by all for the empty language set + * and for the set with just the empty token + + d forbiddenExp s import('forbiddenExp') + d like(xmlExpNodePtr) + + d emptyExp s import('emptyExp') + d like(xmlExpNodePtr) + + + * Expressions are reference counted internally + + d xmlExpFree pr extproc('xmlExpFree') + d expr value like(xmlExpNodePtr) + + d xmlExpRef pr extproc('xmlExpRef') + d expr value like(xmlExpNodePtr) + + * constructors can be either manual or from a string + + d xmlExpParse pr extproc('xmlExpParse') + d like(xmlExpNodePtr) + d ctxt value like(xmlExpCtxtPtr) + d expr * value options(*string) const char * + + d xmlExpNewAtom pr extproc('xmlExpNewAtom') + d like(xmlExpNodePtr) + d ctxt value like(xmlExpCtxtPtr) + d name * value options(*string) const xmlChar * + d len value like(xmlCint) + + d xmlExpNewOr pr extproc('xmlExpNewOr') + d like(xmlExpNodePtr) + d ctxt value like(xmlExpCtxtPtr) + d left value like(xmlExpNodePtr) + d right value like(xmlExpNodePtr) + + d xmlExpNewSeq pr extproc('xmlExpNewSeq') + d like(xmlExpNodePtr) + d ctxt value like(xmlExpCtxtPtr) + d left value like(xmlExpNodePtr) + d right value like(xmlExpNodePtr) + + d xmlExpNewRange pr extproc('xmlExpNewRange') + d like(xmlExpNodePtr) + d ctxt value like(xmlExpCtxtPtr) + d subset value like(xmlExpNodePtr) + d min value like(xmlCint) + d max value like(xmlCint) + + * The really interesting APIs + + d xmlExpIsNillable... + d pr extproc('xmlExpIsNillable') + d like(xmlCint) + d expr value like(xmlExpNodePtr) + + d xmlExpMaxToken pr extproc('xmlExpMaxToken') + d like(xmlCint) + d expr value like(xmlExpNodePtr) + + d xmlExpGetLanguage... + d pr extproc('xmlExpGetLanguage') + d like(xmlCint) + d ctxt value like(xmlExpCtxtPtr) + d expr value like(xmlExpNodePtr) + d langList * const xmlChar *(*) + d len value like(xmlCint) + + d xmlExpGetStart pr extproc('xmlExpGetStart') + d like(xmlCint) + d ctxt value like(xmlExpCtxtPtr) + d expr value like(xmlExpNodePtr) + d tokList * const xmlChar *(*) + d len value like(xmlCint) + + d xmlExpStringDerive... + d pr extproc('xmlExpStringDerive') + d like(xmlExpNodePtr) + d ctxt value like(xmlExpCtxtPtr) + d expr value like(xmlExpNodePtr) + d str * value options(*string) const xmlChar * + d len value like(xmlCint) + + d xmlExpExpDerive... + d pr extproc('xmlExpExpDerive') + d like(xmlExpNodePtr) + d ctxt value like(xmlExpCtxtPtr) + d expr value like(xmlExpNodePtr) + d sub value like(xmlExpNodePtr) + + d xmlExpSubsume pr extproc('xmlExpSubsume') + d like(xmlCint) + d ctxt value like(xmlExpCtxtPtr) + d expr value like(xmlExpNodePtr) + d sub value like(xmlExpNodePtr) + + d xmlExpDump pr extproc('xmlExpDump') + d buf value like(xmlBufferPtr) + d expr value like(xmlExpNodePtr) + /endif LIBXML_EXPR_ENABLED + /endif LIBXML_REGEXP_ENABLD + /endif XML_REGEXP_H__ diff --git a/os400/libxmlrpg/xmlsave.rpgle b/os400/libxmlrpg/xmlsave.rpgle new file mode 100644 index 0000000..ad0d15d --- /dev/null +++ b/os400/libxmlrpg/xmlsave.rpgle @@ -0,0 +1,105 @@ + * Summary: the XML document serializer + * Description: API to save document or subtree of document + * + * Copy: See Copyright for the status of this software. + * + * Author: Patrick Monnerat , DATASPHERE S.A. + + /if not defined(XML_XMLSAVE_H__) + /define XML_XMLSAVE_H__ + + /include "libxmlrpg/xmlversion" + + /if defined(LIBXML_OUTPUT_ENABLED) + + /include "libxmlrpg/xmlTypesC" + /include "libxmlrpg/tree" + /include "libxmlrpg/encoding" + /include "libxmlrpg/xmlIO" + + * xmlSaveOption: + * + * This is the set of XML save options that can be passed down + * to the xmlSaveToFd() and similar calls. + + d xmlSaveOption s based(######typedef######) + d like(xmlCenum) + d XML_SAVE_FORMAT... Format save output + d c X'0001' + d XML_SAVE_NO_DECL... Drop xml declaration + d c X'0002' + d XML_SAVE_NO_EMPTY... No empty tags + d c X'0004' + d XML_SAVE_NO_XHTML... No XHTML1 specific + d c X'0008' + d XML_SAVE_XHTML... Frce XHTML1 specific + d c X'0010' + d XML_SAVE_AS_XML... Frce XML on HTML doc + d c X'0020' + d XML_SAVE_AS_HTML... Frce HTML on XML doc + d c X'0040' + d XML_SAVE_WSNONSIG... Fmt w/ non-sig space + d c X'0080' + + d xmlSaveCtxtPtr s * based(######typedef######) + + d xmlSaveToFd pr extproc('xmlSaveToFd') + d like(xmlSaveCtxtPtr) + d fd value like(xmlCint) + d encoding * value options(*string) const char * + d options value like(xmlCint) + + d xmlSaveToFilename... + d pr extproc('xmlSaveToFilename') + d like(xmlSaveCtxtPtr) + d filename * value options(*string) const char * + d encoding * value options(*string) const char * + d options value like(xmlCint) + + d xmlSaveToBuffer... + d pr extproc('xmlSaveToBuffer') + d like(xmlSaveCtxtPtr) + d buffer value like(xmlBufferPtr) + d encoding * value options(*string) const char * + d options value like(xmlCint) + + d xmlSaveToIO pr extproc('xmlSaveToIO') + d like(xmlSaveCtxtPtr) + d iowrite value like(xmlOutputWriteCallback) + d ioclose value like(xmlOutputCloseCallback) + d ioctx * value void * + d encoding * value options(*string) const char * + d options value like(xmlCint) + + d xmlSaveDoc pr extproc('xmlSaveDoc') + d like(xmlClong) + d ctxt value like(xmlSaveCtxtPtr) + d doc value like(xmlDocPtr) + + d xmlSaveTree pr extproc('xmlSaveTree') + d like(xmlClong) + d ctxt value like(xmlSaveCtxtPtr) + d node value like(xmlNodePtr) + + d xmlSaveFlush pr extproc('xmlSaveFlush') + d like(xmlCint) + d ctxt value like(xmlSaveCtxtPtr) + + d xmlSaveClose pr extproc('xmlSaveClose') + d like(xmlCint) + d ctxt value like(xmlSaveCtxtPtr) + + d xmlSaveSetEscape... + d pr extproc('xmlSaveSetEscape') + d like(xmlCint) + d ctxt value like(xmlSaveCtxtPtr) + d escape value like(xmlCharEncodingOutputFunc) + + d xmlSaveSetAttrEscape... + d pr extproc('xmlSaveSetAttrEscape') + d like(xmlCint) + d ctxt value like(xmlSaveCtxtPtr) + d escape value like(xmlCharEncodingOutputFunc) + + /endif LIBXML_OUTPUT_ENABLD + /endif XML_XMLSAVE_H__ diff --git a/os400/libxmlrpg/xmlschemas.rpgle b/os400/libxmlrpg/xmlschemas.rpgle new file mode 100644 index 0000000..f34ddcd --- /dev/null +++ b/os400/libxmlrpg/xmlschemas.rpgle @@ -0,0 +1,331 @@ + * Summary: incomplete XML Schemas structure implementation + * Description: interface to the XML Schemas handling and schema validity + * checking, it is incomplete right now. + * + * Copy: See Copyright for the status of this software. + * + * Author: Patrick Monnerat , DATASPHERE S.A. + + /if not defined(XML_SCHEMA_H__) + /define XML_SCHEMA_H__ + + /include "libxmlrpg/xmlversion" + + /if defined(LIBXML_SCHEMAS_ENABLED) + + /include "libxmlrpg/xmlTypesC" + /include "libxmlrpg/tree" + + * This error codes are obsolete; not used any more. + + d xmlSchemaValidError... + d s based(######typedef######) + d like(xmlCenum) + d XML_SCHEMAS_ERR_OK... + d c 0 + d XML_SCHEMAS_ERR_NOROOT... + d c 1 + d XML_SCHEMAS_ERR_UNDECLAREDELEM... + d c 2 + d XML_SCHEMAS_ERR_NOTTOPLEVEL... + d c 3 + d XML_SCHEMAS_ERR_MISSING... + d c 4 + d XML_SCHEMAS_ERR_WRONGELEM... + d c 5 + d XML_SCHEMAS_ERR_NOTYPE... + d c 6 + d XML_SCHEMAS_ERR_NOROLLBACK... + d c 7 + d XML_SCHEMAS_ERR_ISABSTRACT... + d c 8 + d XML_SCHEMAS_ERR_NOTEMPTY... + d c 9 + d XML_SCHEMAS_ERR_ELEMCONT... + d c 10 + d XML_SCHEMAS_ERR_HAVEDEFAULT... + d c 11 + d XML_SCHEMAS_ERR_NOTNILLABLE... + d c 12 + d XML_SCHEMAS_ERR_EXTRACONTENT... + d c 13 + d XML_SCHEMAS_ERR_INVALIDATTR... + d c 14 + d XML_SCHEMAS_ERR_INVALIDELEM... + d c 15 + d XML_SCHEMAS_ERR_NOTDETERMINIST... + d c 16 + d XML_SCHEMAS_ERR_CONSTRUCT... + d c 17 + d XML_SCHEMAS_ERR_INTERNAL... + d c 18 + d XML_SCHEMAS_ERR_NOTSIMPLE... + d c 19 + d XML_SCHEMAS_ERR_ATTRUNKNOWN... + d c 20 + d XML_SCHEMAS_ERR_ATTRINVALID... + d c 21 + d XML_SCHEMAS_ERR_VALUE... + d c 22 + d XML_SCHEMAS_ERR_FACET... + d c 23 + d XML_SCHEMAS_ERR_... + d c 24 + d XML_SCHEMAS_ERR_XXX... + d c 25 + + * ATTENTION: Change xmlSchemaSetValidOptions's check + * for invalid values, if adding to the validation + * options below. + + * xmlSchemaValidOption: + * + * This is the set of XML Schema validation options. + + d xmlSchemaValidOption... + d s based(######typedef######) + d like(xmlCenum) + * + * Default/fixed: create an attribute node + * or an element's text node on the instance. + * + d XML_SCHEMA_VAL_VC_I_CREATE... + d c X'0001' + /if defined(DISABLED) + * + * assemble schemata using + * xsi:schemaLocation and + * xsi:noNamespaceSchemaLocation + * + d XML_SCHEMA_VAL_XSI_ASSEMBLE... + d c X'0002' + /endif + + * The schemas related types are kept internal + + d xmlSchemaPtr s * based(######typedef######) + + * xmlSchemaValidityErrorFunc: + * @ctx: the validation context + * @msg: the message + * @...: extra arguments + * + * Signature of an error callback from an XSD validation + + d xmlSchemaValidityErrorFunc... + d s * based(######typedef######) + d procptr + + * xmlSchemaValidityWarningFunc: + * @ctx: the validation context + * @msg: the message + * @...: extra arguments + * + * Signature of a warning callback from an XSD validation + + d xmlSchemaValidityWarningFunc... + d s * based(######typedef######) + d procptr + + * A schemas validation context + + d xmlSchemaParserCtxtPtr... + d s * based(######typedef######) + + d xmlSchemaValidCtxtPtr... + d s * based(######typedef######) + + * xmlSchemaValidityLocatorFunc: + * @ctx: user provided context + * @file: returned file information + * @line: returned line information + * + * A schemas validation locator, a callback called by the validator. + * This is used when file or node informations are not available + * to find out what file and line number are affected + * + * Returns: 0 in case of success and -1 in case of error + + d xmlSchemaValidityLocatorFunc... + d s * based(######typedef######) + d procptr + + * Interfaces for parsing. + + d xmlSchemaNewParserCtxt... + d pr extproc('xmlSchemaNewParserCtxt') + d like(xmlSchemaParserCtxtPtr) + d URL * value options(*string) const char * + + d xmlSchemaNewMemParserCtxt... + d pr extproc('xmlSchemaNewMemParserCtxt') + d like(xmlSchemaParserCtxtPtr) + d buffer * value options(*string) const char * + d size value like(xmlCint) + + d xmlSchemaNewDocParserCtxt... + d pr extproc('xmlSchemaNewDocParserCtxt') + d like(xmlSchemaParserCtxtPtr) + d doc value like(xmlDocPtr) + + d xmlSchemaFreeParserCtxt... + d pr extproc('xmlSchemaFreeParserCtxt') + d ctxt value like(xmlSchemaParserCtxtPtr) + + d xmlSchemaSetParserErrors... + d pr extproc('xmlSchemaSetParserErrors') + d ctxt value like(xmlSchemaParserCtxtPtr) + d err value + d like(xmlSchemaValidityErrorFunc) + d warn value + d like(xmlSchemaValidityWarningFunc) + d ctx * value void * + + d xmlSchemaSetParserStructuredErrors... + d pr extproc( + d 'xmlSchemaSetParserStructuredErrors') + d ctxt value like(xmlSchemaParserCtxtPtr) + d serror value like(xmlStructuredErrorFunc) + d ctx * value void * + + d xmlSchemaGetParserErrors... + d pr extproc('xmlSchemaGetParserErrors') + d like(xmlCint) + d ctxt value like(xmlSchemaParserCtxtPtr) + d err like(xmlSchemaValidityErrorFunc) + d warn like(xmlSchemaValidityWarningFunc) + d ctx * void *(*) + + d xmlSchemaIsValid... + d pr extproc('xmlSchemaIsValid') + d like(xmlCint) + d ctxt value like(xmlSchemaValidCtxtPtr) + + d xmlSchemaParse pr extproc('xmlSchemaParse') + d like(xmlSchemaPtr) + d ctxt value like(xmlSchemaParserCtxtPtr) + + d xmlSchemaFree pr extproc('xmlSchemaFree') + d schema value like(xmlSchemaPtr) + + /if defined(LIBXML_OUTPUT_ENABLED) + d xmlSchemaDump pr extproc('xmlSchemaDump') + d output * value FILE * + d schema value like(xmlSchemaPtr) + /endif LIBXML_OUTPUT_ENABLD + + * Interfaces for validating + + d xmlSchemaSetValidErrors... + d pr extproc('xmlSchemaSetValidErrors') + d ctxt value like(xmlSchemaValidCtxtPtr) + d err value + d like(xmlSchemaValidityErrorFunc) + d warn value + d like(xmlSchemaValidityWarningFunc) + d ctx * value void * + + d xmlSchemaSetValidStructuredErrors... + d pr extproc( + d 'xmlSchemaSetValidStructuredErrors') + d ctxt value like(xmlSchemaValidCtxtPtr) + d serror value like(xmlStructuredErrorFunc) + d ctx * value void * + + d xmlSchemaGetValidErrors... + d pr extproc('xmlSchemaGetValidErrors') + d like(xmlCint) + d ctxt value like(xmlSchemaValidCtxtPtr) + d err like(xmlSchemaValidityErrorFunc) + d warn like(xmlSchemaValidityWarningFunc) + d ctx * void *(*) + + d xmlSchemaSetValidOptions... + d pr extproc('xmlSchemaSetValidOptions') + d like(xmlCint) + d ctxt value like(xmlSchemaValidCtxtPtr) + d options value like(xmlCint) + + d xmlSchemaValidateSetFilename... + d pr extproc( + d 'xmlSchemaValidateSetFilename') + d vctxt value like(xmlSchemaValidCtxtPtr) + d filename * value options(*string) const char * + + d xmlSchemaValidCtxtGetOptions... + d pr extproc( + d 'xmlSchemaValidCtxtGetOptions') + d like(xmlCint) + d ctxt value like(xmlSchemaValidCtxtPtr) + + d xmlSchemaNewValidCtxt... + d pr extproc('xmlSchemaNewValidCtxt') + d like(xmlSchemaValidCtxtPtr) + d schema value like(xmlSchemaPtr) + + d xmlSchemaFreeValidCtxt... + d pr extproc('xmlSchemaFreeValidCtxt') + d ctxt value like(xmlSchemaValidCtxtPtr) + + d xmlSchemaValidateDoc... + d pr extproc('xmlSchemaValidateDoc') + d like(xmlCint) + d ctxt value like(xmlSchemaValidCtxtPtr) + d instance value like(xmlDocPtr) + + d xmlSchemaValidateOneElement... + d pr extproc( + d 'xmlSchemaValidateOneElement') + d like(xmlCint) + d ctxt value like(xmlSchemaValidCtxtPtr) + d elem value like(xmlNodePtr) + + d xmlSchemaValidateStream... + d pr extproc('xmlSchemaValidateStream') + d like(xmlCint) + d ctxt value like(xmlSchemaValidCtxtPtr) + d input value like(xmlParserInputBufferPtr) + d enc value like(xmlCharEncoding) + d sax value like(xmlSAXHandlerPtr) + d user_data * value void * + + d xmlSchemaValidateFile... + d pr extproc('xmlSchemaValidateFile') + d like(xmlCint) + d ctxt value like(xmlSchemaValidCtxtPtr) + d filename * value options(*string) const char * + d options value like(xmlCint) + + d xmlSchemaValidCtxtGetParserCtxt... + d pr extproc( + d 'xmlSchemaValidCtxtGetParserCtxt') + d like(xmlParserCtxtPtr) + d ctxt value like(xmlSchemaValidCtxtPtr) + + * Interface to insert Schemas SAX validation in a SAX stream + + d xmlSchemaSAXPlugPtr... + d s * based(######typedef######) + + d xmlSchemaSAXPlug... + d pr extproc('xmlSchemaSAXPlug') + d like(xmlSchemaSAXPlugPtr) + d ctxt value like(xmlSchemaValidCtxtPtr) + d sax like(xmlSAXHandlerPtr) + d user_data * void *(*) + + d xmlSchemaSAXUnplug... + d pr extproc('xmlSchemaSAXUnplug') + d like(xmlCint) + d plug value like(xmlSchemaSAXPlugPtr) + + d xmlSchemaValidateSetLocator... + d pr extproc( + d 'xmlSchemaValidateSetLocator') + d vctxt value like(xmlSchemaValidCtxtPtr) + d f value + d like(xmlSchemaValidityLocatorFunc) + d ctxt * value void * + + /endif LIBXML_SCHEMAS_ENBLD + /endif XML_SCHEMA_H__ diff --git a/os400/libxmlrpg/xmlschemastypes.rpgle b/os400/libxmlrpg/xmlschemastypes.rpgle new file mode 100644 index 0000000..ecd6aba --- /dev/null +++ b/os400/libxmlrpg/xmlschemastypes.rpgle @@ -0,0 +1,254 @@ + * Summary: implementation of XML Schema Datatypes + * Description: module providing the XML Schema Datatypes implementation + * both definition and validity checking + * + * Copy: See Copyright for the status of this software. + * + * Author: Patrick Monnerat , DATASPHERE S.A. + + /if not defined(XML_SCHEMA_TYPES_H__) + /define XML_SCHEMA_TYPES_H__ + + /include "libxmlrpg/xmlversion" + + /if defined(LIBXML_SCHEMAS_ENABLED) + + /include "libxmlrpg/xmlTypesC" + /include "libxmlrpg/schemasInternals" + /include "libxmlrpg/xmlschemas" + + d xmlSchemaWhitespaceValueType... + d s based(######typedef######) + d like(xmlCenum) + d XML_SCHEMA_WHITESPACE_UNKNOWN... + d c 0 + d XML_SCHEMA_WHITESPACE_PRESERVE... + d c 1 + d XML_SCHEMA_WHITESPACE_REPLACE... + d c 2 + d XML_SCHEMA_WHITESPACE_COLLAPSE... + d c 3 + + d xmlSchemaInitTypes... + d pr extproc('xmlSchemaInitTypes') + + d xmlSchemaCleanupTypes... + d pr extproc('xmlSchemaCleanupTypes') + + d xmlSchemaGetPredefinedType... + d pr extproc('xmlSchemaGetPredefinedType') + d like(xmlSchemaTypePtr) + d name * value options(*string) const xmlChar * + d ns * value options(*string) const xmlChar * + + d xmlSchemaValidatePredefinedType... + d pr extproc( + d 'xmlSchemaValidatePredefinedType') + d like(xmlCint) + d type value like(xmlSchemaTypePtr) + d value * value options(*string) const xmlChar * + d val * value xmlSchemaValPtr * + + d xmlSchemaValPredefTypeNode... + d pr extproc('xmlSchemaValPredefTypeNode') + d like(xmlCint) + d type value like(xmlSchemaTypePtr) + d value * value options(*string) const xmlChar * + d val * value xmlSchemaValPtr * + d node value like(xmlNodePtr) + + d xmlSchemaValidateFacet... + d pr extproc('xmlSchemaValidateFacet') + d like(xmlCint) + d base value like(xmlSchemaTypePtr) + d facet value like(xmlSchemaFacetPtr) + d value * value options(*string) const xmlChar * + d val value like(xmlSchemaValPtr) + + d xmlSchemaValidateFacetWhtsp... + d pr extproc( + d 'xmlSchemaValidateFacetWhtsp') + d like(xmlCint) + d facet value like(xmlSchemaFacetPtr) + d fws value + d like(xmlSchemaWhitespaceValueType) + d valType value like(xmlSchemaValType) + d value * value options(*string) const xmlChar * + d val value like(xmlSchemaValPtr) + d ws value + d like(xmlSchemaWhitespaceValueType) + + d xmlSchemaFreeValue... + d pr extproc('xmlSchemaFreeValue') + d val value like(xmlSchemaValPtr) + + d xmlSchemaNewFacet... + d pr extproc('xmlSchemaNewFacet') + d like(xmlSchemaFacetPtr) + + d xmlSchemaCheckFacet... + d pr extproc('xmlSchemaCheckFacet') + d like(xmlCint) + d facet value like(xmlSchemaFacetPtr) + d typeDecl value like(xmlSchemaTypePtr) + d ctxt value like(xmlSchemaParserCtxtPtr) + d name * value options(*string) const xmlChar * + + d xmlSchemaFreeFacet... + d pr extproc('xmlSchemaFreeFacet') + d facet value like(xmlSchemaFacetPtr) + + d xmlSchemaCompareValues... + d pr extproc('xmlSchemaCompareValues') + d like(xmlCint) + d x value like(xmlSchemaValPtr) + d y value like(xmlSchemaValPtr) + + d xmlSchemaGetBuiltInListSimpleTypeItemType... + d pr extproc('xmlSchemaGetBuiltInListSimp- + d leTypeItemType') + d like(xmlSchemaTypePtr) + d type value like(xmlSchemaTypePtr) + + d xmlSchemaValidateListSimpleTypeFacet... + d pr extproc('xmlSchemaValidateListSimple- + d TypeFacet') + d like(xmlCint) + d facet value like(xmlSchemaFacetPtr) + d value * value options(*string) const xmlChar * + d actualLen value like(xmlCulong) + d expectedLen * value unsigned long * + + d xmlSchemaGetBuiltInType... + d pr extproc('xmlSchemaGetBuiltInType') + d like(xmlSchemaTypePtr) + d type value like(xmlSchemaValType) + + d xmlSchemaIsBuiltInTypeFacet... + d pr extproc( + d 'xmlSchemaIsBuiltInTypeFacet') + d like(xmlCint) + d type value like(xmlSchemaTypePtr) + d facetType value like(xmlCint) + + d xmlSchemaCollapseString... + d pr * extproc('xmlSchemaCollapseString') xmlChar * + d value * value options(*string) const xmlChar * + + d xmlSchemaWhiteSpaceReplace... + d pr * extproc('xmlSchemaWhiteSpaceReplace')xmlChar * + d value * value options(*string) const xmlChar * + + d xmlSchemaGetFacetValueAsULong... + d pr extproc( + d 'xmlSchemaGetFacetValueAsULong') + d like(xmlCulong) + d facet value like(xmlSchemaFacetPtr) + + d xmlSchemaValidateLengthFacet... + d pr extproc( + d 'xmlSchemaValidateLengthFacet') + d like(xmlCint) + d type value like(xmlSchemaTypePtr) + d facet value like(xmlSchemaFacetPtr) + d value * value options(*string) const xmlChar * + d val value like(xmlSchemaValPtr) + d length like(xmlCulong) + + d xmlSchemaValidateLengthFacetWhtsp... + d pr extproc( + d 'xmlSchemaValidateLengthFacetWhtsp') + d like(xmlCint) + d facet value like(xmlSchemaFacetPtr) + d valType value like(xmlSchemaValType) + d value * value options(*string) const xmlChar * + d val value like(xmlSchemaValPtr) + d length like(xmlCulong) + d ws value + d like(xmlSchemaWhitespaceValueType) + + d xmlSchemaValPredefTypeNodeNoNorm... + d pr extproc( + d 'xmlSchemaValPredefTypeNodeNoNorm') + d like(xmlCint) + d type value like(xmlSchemaTypePtr) + d value * value options(*string) const xmlChar * + d val like(xmlSchemaValPtr) + d node value like(xmlNodePtr) + + d xmlSchemaGetCanonValue... + d pr extproc('xmlSchemaGetCanonValue') + d like(xmlCint) + d val value like(xmlSchemaValPtr) + d retValue * value const xmlChar * * + + d xmlSchemaGetCanonValueWhtsp... + d pr extproc( + d 'xmlSchemaGetCanonValueWhtsp') + d like(xmlCint) + d val value like(xmlSchemaValPtr) + d retValue * value const xmlChar * * + d ws value + d like(xmlSchemaWhitespaceValueType) + + d xmlSchemaValueAppend... + d pr extproc('xmlSchemaValueAppend') + d like(xmlCint) + d prev value like(xmlSchemaValPtr) + d cur value like(xmlSchemaValPtr) + + d xmlSchemaValueGetNext... + d pr extproc('xmlSchemaValueGetNext') + d like(xmlSchemaValPtr) + d cur value like(xmlSchemaValPtr) + + d xmlSchemaValueGetAsString... + d pr * extproc('xmlSchemaValueGetAsString') const xmlChar * + d val value like(xmlSchemaValPtr) + + d xmlSchemaValueGetAsBoolean... + d pr extproc('xmlSchemaValueGetAsBoolean') + d like(xmlCint) + d val value like(xmlSchemaValPtr) + + d xmlSchemaNewStringValue... + d pr extproc('xmlSchemaNewStringValue') + d like(xmlSchemaValPtr) + d type value like(xmlSchemaValType) + d value * value options(*string) const xmlChar * + + d xmlSchemaNewNOTATIONValue... + d pr extproc('xmlSchemaNewNOTATIONValue') + d like(xmlSchemaValPtr) + d name * value options(*string) const xmlChar * + d ns * value options(*string) const xmlChar * + + d xmlSchemaNewQNameValue... + d pr extproc('xmlSchemaNewQNameValue') + d like(xmlSchemaValPtr) + d namespaceName * value options(*string) const xmlChar * + d localName * value options(*string) const xmlChar * + + d xmlSchemaCompareValuesWhtsp... + d pr extproc( + d 'xmlSchemaCompareValuesWhtsp') + d like(xmlCint) + d x value like(xmlSchemaValPtr) + d xws value + d like(xmlSchemaWhitespaceValueType) + d y value like(xmlSchemaValPtr) + d yws value + d like(xmlSchemaWhitespaceValueType) + + d xmlSchemaCopyValue... + d pr extproc('xmlSchemaCopyValue') + d like(xmlSchemaValPtr) + d val value like(xmlSchemaValPtr) + + d xmlSchemaGetValType... + d pr extproc('xmlSchemaGetValType') + d like(xmlSchemaValType) + d val value like(xmlSchemaValPtr) + + /endif LIBXML_SCHEMAS_ENBLD + /endif XML_SCHEMA_TYPES_H__ diff --git a/os400/libxmlrpg/xmlstdarg.rpgle b/os400/libxmlrpg/xmlstdarg.rpgle new file mode 100644 index 0000000..3c8e200 --- /dev/null +++ b/os400/libxmlrpg/xmlstdarg.rpgle @@ -0,0 +1,35 @@ + * Summary: va_list support for ILE/RPG. + * + * Copy: See Copyright for the status of this software. + * + * Author: Patrick Monnerat , DATASPHERE S.A. + + /if not defined(XML_STDARG_H__) + /define XML_STDARG_H__ + + /include "libxmlrpg/xmlversion" + /include "libxmlrpg/xmlTypesC" + + * The va_list object. + + d xmlVaList ds based(######typedef######) + d align qualified + d current * + d next * + + * Procedures. + + d xmlVaStart pr extproc('__xmlVaStart') + d list likeds(xmlVaList) + d lastargaddr * value + d lastargsize value like(xmlCsize_t) + + d xmlVaArg pr * extproc('__xmlVaArg') + d list likeds(xmlVaList) + d dest * value + d argsize value like(xmlCsize_t) + + d xmlVaEnd pr extproc('__xmlVaEnd') + d list likeds(xmlVaList) + + /endif XML_STDARG_H__ diff --git a/os400/libxmlrpg/xmlstring.rpgle b/os400/libxmlrpg/xmlstring.rpgle new file mode 100644 index 0000000..8980fc0 --- /dev/null +++ b/os400/libxmlrpg/xmlstring.rpgle @@ -0,0 +1,180 @@ + * Summary: set of routines to process strings + * Description: type and interfaces needed for the internal string + * handling of the library, especially UTF8 processing. + * + * Copy: See Copyright for the status of this software. + * + * Author: Patrick Monnerat , DATASPHERE S.A. + + /if not defined(XML_STRING_H__) + /define XML_STRING_H__ + + /include "libxmlrpg/xmlversion" + /include "libxmlrpg/xmlTypesC" + /include "libxmlrpg/xmlstdarg" + + * xmlChar: + * + * This is a basic byte in an UTF-8 encoded string. + * It's unsigned allowing to pinpoint case where char * are assigned + * to xmlChar * (possibly making serialization back impossible). + + d xmlChar s based(######typedef######) + d like(xmlCuchar) + + * xmlChar handling + + d xmlStrdup pr * extproc('xmlStrdup') xmlChar * + d cur * value options(*string) const xmlChar * + + d xmlStrndup pr * extproc('xmlStrndup') xmlChar * + d cur * value options(*string) const xmlChar * + d len value like(xmlCint) + + d xmlCharStrndup pr * extproc('xmlCharStrndup') xmlChar * + d cur * value options(*string) const char * + d len value like(xmlCint) + + d xmlCharStrdup pr * extproc('xmlCharStrdup') xmlChar * + d cur * value options(*string) const char * + + d xmlStrsub pr * extproc('xmlStrsub') const xmlChar * + d str * value options(*string) const xmlChar * + d start value like(xmlCint) + d len value like(xmlCint) + + d xmlStrchr pr * extproc('xmlStrchr') const xmlChar * + d str * value options(*string) const xmlChar * + d val value like(xmlChar) + + d xmlStrstr pr * extproc('xmlStrstr') const xmlChar * + d str * value options(*string) const xmlChar * + d val * value options(*string) const xmlChar * + + d xmlStrcasestr pr * extproc('xmlStrcasestr') const xmlChar * + d str * value options(*string) const xmlChar * + d val * value options(*string) const xmlChar * + + d xmlStrcmp pr extproc('xmlStrcmp') + d like(xmlCint) + d str1 * value options(*string) const xmlChar * + d str2 * value options(*string) const xmlChar * + + d xmlStrncmp pr extproc('xmlStrncmp') + d like(xmlCint) + d str1 * value options(*string) const xmlChar * + d str2 * value options(*string) const xmlChar * + d len value like(xmlCint) + + d xmlStrcasecmp pr extproc('xmlStrcasecmp') + d like(xmlCint) + d str1 * value options(*string) const xmlChar * + d str2 * value options(*string) const xmlChar * + + d xmlStrncasecmp pr extproc('xmlStrncasecmp') + d like(xmlCint) + d str1 * value options(*string) const xmlChar * + d str2 * value options(*string) const xmlChar * + d len value like(xmlCint) + + d xmlStrEqual pr extproc('xmlStrEqual') + d like(xmlCint) + d str1 * value options(*string) const xmlChar * + d str2 * value options(*string) const xmlChar * + + d xmlStrQEqual pr extproc('xmlStrQEqual') + d like(xmlCint) + d pref * value options(*string) const xmlChar * + d name * value options(*string) const xmlChar * + d stre * value options(*string) const xmlChar * + + d xmlStrlen pr extproc('xmlStrlen') + d like(xmlCint) + d str * value options(*string) const xmlChar * + + d xmlStrcat pr * extproc('xmlStrcat') xmlChar * + d cur * value options(*string) xmlChar * + d add * value options(*string) const xmlChar * + + d xmlStrncat pr * extproc('xmlStrncat') xmlChar * + d cur * value options(*string) xmlChar * + d add * value options(*string) const xmlChar * + d len value like(xmlCint) + + d xmlStrncatNew pr * extproc('xmlStrncatNew') xmlChar * + d str1 * value options(*string) const xmlChar * + d str2 * value options(*string) const xmlChar * + d len value like(xmlCint) + + * xmlStrPrintf() is a vararg function. + * The following prototype supports up to 8 pointer arguments. + * Other argument signature can be achieved by defining alternate + * prototypes redirected to the same function. + + d xmlStrPrintf pr extproc('xmlStrPrintf') + d like(xmlCint) + d buf * value options(*string) xmlChar * + d len value like(xmlCint) + d msg * value options(*string) const xmlChar * + d arg1 * value options(*string: *nopass) + d arg2 * value options(*string: *nopass) + d arg3 * value options(*string: *nopass) + d arg4 * value options(*string: *nopass) + d arg5 * value options(*string: *nopass) + d arg6 * value options(*string: *nopass) + d arg7 * value options(*string: *nopass) + d arg8 * value options(*string: *nopass) + + d xmlStrVPrintf pr extproc('xmlStrVPrintf') + d like(xmlCint) + d buf * value options(*string) xmlChar * + d len value like(xmlCint) + d msg * value options(*string) const xmlChar * + d ap likeds(xmlVaList) + + d xmlGetUTF8Char pr extproc('xmlGetUTF8Char') + d like(xmlCint) + d utf * value options(*string) const uns. char * + d len like(xmlCint) + + d xmlCheckUTF8 pr extproc('xmlCheckUTF8') + d like(xmlCint) + d utf * value options(*string) const uns. char * + + d xmlUTF8Strsize pr extproc('xmlUTF8Strsize') + d like(xmlCint) + d utf * value options(*string) const xmlChar * + d len value like(xmlCint) + + d xmlUTF8Strndup pr * extproc('xmlUTF8Strndup') xmlChar * + d utf * value options(*string) const xmlChar * + d len value like(xmlCint) + + d xmlUTF8Strpos pr * extproc('xmlUTF8Strpos') const xmlChar * + d utf * value options(*string) const xmlChar * + d pos value like(xmlCint) + + d xmlUTF8Strloc pr extproc('xmlUTF8Strloc') + d like(xmlCint) + d utf * value options(*string) const xmlChar * + d utfchar * value options(*string) const xmlChar * + + d xmlUTF8Strsub pr * extproc('xmlUTF8Strsub') xmlChar * + d utf * value options(*string) const xmlChar * + d start value like(xmlCint) + d len value like(xmlCint) + + d xmlUTF8Strlen pr extproc('xmlUTF8Strlen') + d like(xmlCint) + d utf * value options(*string) const xmlChar * + + d xmlUTF8Size pr extproc('xmlUTF8Size') + d like(xmlCint) + d utf * value options(*string) const xmlChar * + + d xmlUTF8Charcmp pr extproc('xmlUTF8Charcmp') + d like(xmlCint) + d utf1 * value options(*string) const xmlChar * + d utf2 * value options(*string) const xmlChar * + + /endif XML_STRING_H__ diff --git a/os400/libxmlrpg/xmlunicode.rpgle b/os400/libxmlrpg/xmlunicode.rpgle new file mode 100644 index 0000000..c4c4ba1 --- /dev/null +++ b/os400/libxmlrpg/xmlunicode.rpgle @@ -0,0 +1,836 @@ + * Summary: Unicode character APIs + * Description: API for the Unicode character APIs + * + * Copy: See Copyright for the status of this software. + * + * Author: Patrick Monnerat , DATASPHERE S.A. + + /if not defined(XML_UNICODE_H__) + /define XML_UNICODE_H__ + + /include "libxmlrpg/xmlversion" + + /if defined(LIBXML_UNICODE_ENABLED) + + /include "libxmlrpg/xmlTypesC" + + d xmlUCSIsAegeanNumbers... + d pr extproc('xmlUCSIsAegeanNumbers') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsAlphabeticPresentationForms... + d pr extproc( + d 'xmlUCSIsAlphabeticPresentationForms' + d ) + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsArabic pr extproc('xmlUCSIsArabic') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsArabicPresentationFormsA... + d pr extproc( + d 'xmlUCSIsArabicPresentationFormsA') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsArabicPresentationFormsB... + d pr extproc( + d 'xmlUCSIsArabicPresentationFormsB') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsArmenian... + d pr extproc('xmlUCSIsArmenian') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsArrows pr extproc('xmlUCSIsArrows') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsBasicLatin... + d pr extproc('xmlUCSIsBasicLatin') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsBengali... + d pr extproc('xmlUCSIsBengali') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsBlockElements... + d pr extproc('xmlUCSIsBlockElements') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsBopomofo... + d pr extproc('xmlUCSIsBopomofo') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsBopomofoExtended... + d pr extproc('xmlUCSIsBopomofoExtended') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsBoxDrawing... + d pr extproc('xmlUCSIsBoxDrawing') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsBraillePatterns... + d pr extproc('xmlUCSIsBraillePatterns') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsBuhid pr extproc('xmlUCSIsBuhid') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsByzantineMusicalSymbols... + d pr extproc( + d 'xmlUCSIsByzantineMusicalSymbols') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsCJKCompatibility... + d pr extproc('xmlUCSIsCJKCompatibility') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsCJKCompatibilityForms... + d pr extproc( + d 'xmlUCSIsCJKCompatibilityForms') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsCJKCompatibilityIdeographs... + d pr extproc( + d 'xmlUCSIsCJKCompatibilityIdeographs') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsCJKCompatibilityIdeographsSupplement... + d pr extproc('xmlUCSIsCJKCompatibilityIde- + d ographsSupplement') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsCJKRadicalsSupplement... + d pr extproc( + d 'xmlUCSIsCJKRadicalsSupplement') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsCJKSymbolsandPunctuation... + d pr extproc( + d 'xmlUCSIsCJKSymbolsandPunctuation') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsCJKUnifiedIdeographs... + d pr extproc( + d 'xmlUCSIsCJKUnifiedIdeographs') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsCJKUnifiedIdeographsExtensionA... + d pr extproc('xmlUCSIsCJKUnifiedIdeograph- + d sExtensionA') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsCJKUnifiedIdeographsExtensionB... + d pr extproc('xmlUCSIsCJKUnifiedIdeograph- + d sExtensionB') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsCherokee... + d pr extproc('xmlUCSIsCherokee') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsCombiningDiacriticalMarks... + d pr extproc( + d 'xmlUCSIsCombiningDiacriticalMarks') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsCombiningDiacriticalMarksforSymbols... + d pr extproc('xmlUCSIsCombiningDiacritica- + d lMarksforSymbols') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsCombiningHalfMarks... + d pr extproc('xmlUCSIsCombiningHalfMarks') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsCombiningMarksforSymbols... + d pr extproc( + d 'xmlUCSIsCombiningMarksforSymbols') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsControlPictures... + d pr extproc('xmlUCSIsControlPictures') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsCurrencySymbols... + d pr extproc('xmlUCSIsCurrencySymbols') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsCypriotSyllabary... + d pr extproc('xmlUCSIsCypriotSyllabary') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsCyrillic... + d pr extproc('xmlUCSIsCyrillic') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsCyrillicSupplement... + d pr extproc('xmlUCSIsCyrillicSupplement') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsDeseret... + d pr extproc('xmlUCSIsDeseret') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsDevanagari... + d pr extproc('xmlUCSIsDevanagari') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsDingbats... + d pr extproc('xmlUCSIsDingbats') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsEnclosedAlphanumerics... + d pr extproc( + d 'xmlUCSIsEnclosedAlphanumerics') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsEnclosedCJKLettersandMonths... + d pr extproc( + d 'xmlUCSIsEnclosedCJKLettersandMonths' + d ) + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsEthiopic... + d pr extproc('xmlUCSIsEthiopic') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsGeneralPunctuation... + d pr extproc('xmlUCSIsGeneralPunctuation') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsGeometricShapes... + d pr extproc('xmlUCSIsGeometricShapes') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsGeorgian... + d pr extproc('xmlUCSIsGeorgian') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsGothic pr extproc('xmlUCSIsGothic') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsGreek pr extproc('xmlUCSIsGreek') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsGreekExtended... + d pr extproc('xmlUCSIsGreekExtended') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsGreekandCoptic... + d pr extproc('xmlUCSIsGreekandCoptic') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsGujarati... + d pr extproc('xmlUCSIsGujarati') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsGurmukhi... + d pr extproc('xmlUCSIsGurmukhi') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsHalfwidthandFullwidthForms... + d pr extproc( + d 'xmlUCSIsHalfwidthandFullwidthForms') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsHangulCompatibilityJamo... + d pr extproc( + d 'xmlUCSIsHangulCompatibilityJamo') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsHangulJamo... + d pr extproc('xmlUCSIsHangulJamo') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsHangulSyllables... + d pr extproc('xmlUCSIsHangulSyllables') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsHanunoo... + d pr extproc('xmlUCSIsHanunoo') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsHebrew pr extproc('xmlUCSIsHebrew') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsHighPrivateUseSurrogates... + d pr extproc( + d 'xmlUCSIsHighPrivateUseSurrogates') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsHighSurrogates... + d pr extproc('xmlUCSIsHighSurrogates') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsHiragana... + d pr extproc('xmlUCSIsHiragana') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsIPAExtensions... + d pr extproc('xmlUCSIsIPAExtensions') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsIdeographicDescriptionCharacters... + d pr extproc('xmlUCSIsIdeographicDescript- + d ionCharacters') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsKanbun pr extproc('xmlUCSIsKanbun') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsKangxiRadicals... + d pr extproc('xmlUCSIsKangxiRadicals') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsKannada... + d pr extproc('xmlUCSIsKannada') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsKatakana... + d pr extproc('xmlUCSIsKatakana') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsKatakanaPhoneticExtensions... + d pr extproc( + d 'xmlUCSIsKatakanaPhoneticExtensions') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsKhmer pr extproc('xmlUCSIsKhmer') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsKhmerSymbols... + d pr extproc('xmlUCSIsKhmerSymbols') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsLao pr extproc('xmlUCSIsLao') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsLatin1Supplement... + d pr extproc('xmlUCSIsLatin1Supplement') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsLatinExtendedA... + d pr extproc('xmlUCSIsLatinExtendedA') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsLatinExtendedB... + d pr extproc('xmlUCSIsLatinExtendedB') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsLatinExtendedAdditional... + d pr extproc( + d 'xmlUCSIsLatinExtendedAdditional') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsLetterlikeSymbols... + d pr extproc('xmlUCSIsLetterlikeSymbols') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsLimbu pr extproc('xmlUCSIsLimbu') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsLinearBIdeograms... + d pr extproc('xmlUCSIsLinearBIdeograms') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsLinearBSyllabary... + d pr extproc('xmlUCSIsLinearBSyllabary') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsLowSurrogates... + d pr extproc('xmlUCSIsLowSurrogates') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsMalayalam... + d pr extproc('xmlUCSIsMalayalam') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsMathematicalAlphanumericSymbols... + d pr extproc('xmlUCSIsMathematicalAlphanu- + d mericSymbols') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsMathematicalOperators... + d pr extproc( + d 'xmlUCSIsMathematicalOperators') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsMiscellaneousMathematicalSymbolsA... + d pr extproc('xmlUCSIsMiscellaneousMathem- + d aticalSymbolsA') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsMiscellaneousMathematicalSymbolsB... + d pr extproc('xmlUCSIsMiscellaneousMathem- + d aticalSymbolsB') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsMiscellaneousSymbols... + d pr extproc( + d 'xmlUCSIsMiscellaneousSymbols') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsMiscellaneousSymbolsandArrows... + d pr extproc('xmlUCSIsMiscellaneousSymbol- + d sandArrows') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsMiscellaneousTechnical... + d pr extproc( + d 'xmlUCSIsMiscellaneousTechnical') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsMongolian... + d pr extproc('xmlUCSIsMongolian') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsMusicalSymbols... + d pr extproc('xmlUCSIsMusicalSymbols') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsMyanmar... + d pr extproc('xmlUCSIsMyanmar') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsNumberForms... + d pr extproc('xmlUCSIsNumberForms') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsOgham pr extproc('xmlUCSIsOgham') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsOldItalic... + d pr extproc('xmlUCSIsOldItalic') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsOpticalCharacterRecognition... + d pr extproc( + d 'xmlUCSIsOpticalCharacterRecognition' + d ) + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsOriya pr extproc('xmlUCSIsOriya') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsOsmanya... + d pr extproc('xmlUCSIsOsmanya') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsPhoneticExtensions... + d pr extproc('xmlUCSIsPhoneticExtensions') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsPrivateUse... + d pr extproc('xmlUCSIsPrivateUse') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsPrivateUseArea... + d pr extproc('xmlUCSIsPrivateUseArea') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsRunic pr extproc('xmlUCSIsRunic') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsShavian... + d pr extproc('xmlUCSIsShavian') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsSinhala... + d pr extproc('xmlUCSIsSinhala') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsSmallFormVariants... + d pr extproc('xmlUCSIsSmallFormVariants') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsSpacingModifierLetters... + d pr extproc( + d 'xmlUCSIsSpacingModifierLetters') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsSpecials... + d pr extproc('xmlUCSIsSpecials') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsSuperscriptsandSubscripts... + d pr extproc( + d 'xmlUCSIsSuperscriptsandSubscripts') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsSupplementalArrowsA... + d pr extproc( + d 'xmlUCSIsSupplementalArrowsA') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsSupplementalArrowsB... + d pr extproc( + d 'xmlUCSIsSupplementalArrowsB') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsSupplementalMathematicalOperators... + d pr extproc('xmlUCSIsSupplementalMathema- + d ticalOperators') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsSupplementaryPrivateUseAreaA... + d pr extproc('xmlUCSIsSupplementaryPrivat- + d eUseAreaA') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsSupplementaryPrivateUseAreaB... + d pr extproc('xmlUCSIsSupplementaryPrivat- + d eUseAreaB') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsSyriac pr extproc('xmlUCSIsSyriac') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsTagalog... + d pr extproc('xmlUCSIsTagalog') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsTagbanwa... + d pr extproc('xmlUCSIsTagbanwa') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsTags pr extproc('xmlUCSIsTags') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsTaiLe pr extproc('xmlUCSIsTaiLe') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsTaiXuanJingSymbols... + d pr extproc('xmlUCSIsTaiXuanJingSymbols') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsTamil pr extproc('xmlUCSIsTamil') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsTelugu pr extproc('xmlUCSIsTelugu') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsThaana pr extproc('xmlUCSIsThaana') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsThai pr extproc('xmlUCSIsThai') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsTibetan... + d pr extproc('xmlUCSIsTibetan') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsUgaritic... + d pr extproc('xmlUCSIsUgaritic') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsUnifiedCanadianAboriginalSyllabics... + d pr extproc('xmlUCSIsUnifiedCanadianAbor- + d iginalSyllabics') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsVariationSelectors... + d pr extproc('xmlUCSIsVariationSelectors') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsVariationSelectorsSupplement... + d pr extproc('xmlUCSIsVariationSelectorsS- + d upplement') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsYiRadicals... + d pr extproc('xmlUCSIsYiRadicals') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsYiSyllables... + d pr extproc('xmlUCSIsYiSyllables') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsYijingHexagramSymbols... + d pr extproc( + d 'xmlUCSIsYijingHexagramSymbols') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsBlock pr extproc('xmlUCSIsBlock') + d like(xmlCint) + d code value like(xmlCint) + d block * value options(*string) const char * + + d xmlUCSIsCatC pr extproc('xmlUCSIsCatC') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsCatCc pr extproc('xmlUCSIsCatCc') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsCatCf pr extproc('xmlUCSIsCatCf') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsCatCo pr extproc('xmlUCSIsCatCo') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsCatCs pr extproc('xmlUCSIsCatCs') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsCatL pr extproc('xmlUCSIsCatL') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsCatLl pr extproc('xmlUCSIsCatLl') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsCatLm pr extproc('xmlUCSIsCatLm') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsCatLo pr extproc('xmlUCSIsCatLo') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsCatLt pr extproc('xmlUCSIsCatLt') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsCatLu pr extproc('xmlUCSIsCatLu') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsCatM pr extproc('xmlUCSIsCatM') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsCatMc pr extproc('xmlUCSIsCatMc') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsCatMe pr extproc('xmlUCSIsCatMe') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsCatMn pr extproc('xmlUCSIsCatMn') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsCatN pr extproc('xmlUCSIsCatN') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsCatNd pr extproc('xmlUCSIsCatNd') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsCatNl pr extproc('xmlUCSIsCatNl') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsCatNo pr extproc('xmlUCSIsCatNo') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsCatP pr extproc('xmlUCSIsCatP') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsCatPc pr extproc('xmlUCSIsCatPc') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsCatPd pr extproc('xmlUCSIsCatPd') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsCatPe pr extproc('xmlUCSIsCatPe') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsCatPf pr extproc('xmlUCSIsCatPf') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsCatPi pr extproc('xmlUCSIsCatPi') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsCatPo pr extproc('xmlUCSIsCatPo') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsCatPs pr extproc('xmlUCSIsCatPs') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsCatS pr extproc('xmlUCSIsCatS') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsCatSc pr extproc('xmlUCSIsCatSc') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsCatSk pr extproc('xmlUCSIsCatSk') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsCatSm pr extproc('xmlUCSIsCatSm') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsCatSo pr extproc('xmlUCSIsCatSo') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsCatZ pr extproc('xmlUCSIsCatZ') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsCatZl pr extproc('xmlUCSIsCatZl') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsCatZp pr extproc('xmlUCSIsCatZp') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsCatZs pr extproc('xmlUCSIsCatZs') + d like(xmlCint) + d code value like(xmlCint) + + d xmlUCSIsCat pr extproc('xmlUCSIsCat') + d like(xmlCint) + d code value like(xmlCint) + d cat * value options(*string) const char * + + /endif LIBXML_UNICODE_ENBLD + /endif XML_UNICODE_H__ diff --git a/os400/libxmlrpg/xmlversion.rpgle.in b/os400/libxmlrpg/xmlversion.rpgle.in new file mode 100644 index 0000000..955599e --- /dev/null +++ b/os400/libxmlrpg/xmlversion.rpgle.in @@ -0,0 +1,353 @@ + * Summary: compile-time version informations + * Description: compile-time version informations for the XML library + * + * Copy: See Copyright for the status of this software. + * + * Author: Patrick Monnerat , DATASPHERE S.A. + + /if not defined(XML_VERSION_H__) + /define XML_VERSION_H__ + + /include "libxmlrpg/xmlTypesC" + /include "libxmlrpg/xmlexports" + + * use those to be sure nothing nasty will happen if + * your library and includes mismatch + + + d xmlCheckVersion... + d pr extproc('xmlCheckVersion') + d version value like(xmlCint) + + * LIBXML_DOTTED_VERSION: + * + * the version string like "1.2.3" + + d LIBXML_DOTTED_VERSION... + d c '@VERSION@' + + * LIBXML_VERSION: + * + * the version number: 1.2.3 value is 10203 + + d LIBXML_VERSION c @LIBXML_VERSION_NUMBER@ + + * LIBXML_VERSION_STRING: + * + * the version number string, 1.2.3 value is "10203" + + d LIBXML_VERSION_STRING... + d c '@LIBXML_VERSION_NUMBER@' + + * LIBXML_VERSION_EXTRA: + * + * extra version information, used to show a CVS compilation + + d LIBXML_VERSION_EXTRA... + d c '@LIBXML_VERSION_EXTRA@' + + * For conditional compilation + /define DEFINED_1 + /undefine DEFINED_0 + + /if defined(DEFINED_@WITH_TRIO@) + * WITH_TRIO: + * + * defined if the trio support need to be configured in + + /define WITH_TRIO + /else + * WITHOUT_TRIO: + * + * defined if the trio support should not be configured in + + /define WITHOUT_TRIO + /endif + + * LIBXML_THREAD_ENABLED: + * + * Whether the thread support is configured in + + /if defined(DEFINED_@WITH_THREADS@) + /define LIBXML_THREAD_ENABLED + /endif + + * LIBXML_THREAD_ALLOC_ENABLED: + * + * Whether the allocation hooks are per-thread + + /if defined(DEFINED_@WITH_THREAD_ALLOC@) + /define LIBXML_THREAD_ALLOC_ENABLED + /endif + + * LIBXML_TREE_ENABLED: + * + * Whether the DOM like tree manipulation API support is configured in + + /if defined(DEFINED_@WITH_TREE@) + /define LIBXML_TREE_ENABLED + /endif + + * LIBXML_OUTPUT_ENABLED: + * + * Whether the serialization/saving support is configured in + + /if defined(DEFINED_@WITH_OUTPUT@) + /define LIBXML_OUTPUT_ENABLED + /endif + + * LIBXML_PUSH_ENABLED: + * + * Whether the push parsing interfaces are configured in + + /if defined(DEFINED_@WITH_PUSH@) + /define LIBXML_PUSH_ENABLED + /endif + + * LIBXML_READER_ENABLED: + * + * Whether the xmlReader parsing interface is configured in + + /if defined(DEFINED_@WITH_READER@) + /define LIBXML_READER_ENABLED + /endif + + * LIBXML_PATTERN_ENABLED: + * + * Whether the xmlPattern node selection interface is configured in + + /if defined(DEFINED_@WITH_PATTERN@) + /define LIBXML_PATTERN_ENABLED + /endif + + * LIBXML_WRITER_ENABLED: + * + * Whether the xmlWriter saving interface is configured in + + /if defined(DEFINED_@WITH_WRITER@) + /define LIBXML_WRITER_ENABLED + /endif + + * LIBXML_SAX1_ENABLED: + * + * Whether the older SAX1 interface is configured in + + /if defined(DEFINED_@WITH_SAX1@) + /define LIBXML_SAX1_ENABLED + /endif + + * LIBXML_FTP_ENABLED: + * + * Whether the FTP support is configured in + + /if defined(DEFINED_@WITH_FTP@) + /define LIBXML_FTP_ENABLED + /endif + + * LIBXML_HTTP_ENABLED: + * + * Whether the HTTP support is configured in + + /if defined(DEFINED_@WITH_HTTP@) + /define LIBXML_HTTP_ENABLED + /endif + + * LIBXML_VALID_ENABLED: + * + * Whether the DTD validation support is configured in + + /if defined(DEFINED_@WITH_VALID@) + /define LIBXML_VALID_ENABLED + /endif + + * LIBXML_HTML_ENABLED: + * + * Whether the HTML support is configured in + + /if defined(DEFINED_@WITH_HTML@) + /define LIBXML_HTML_ENABLED + /endif + + * LIBXML_LEGACY_ENABLED: + * + * Whether the deprecated APIs are compiled in for compatibility + + /if defined(DEFINED_@WITH_LEGACY@) + /define LIBXML_LEGACY_ENABLED + /endif + + * LIBXML_C14N_ENABLED: + * + * Whether the Canonicalization support is configured in + + /if defined(DEFINED_@WITH_C14N@) + /define LIBXML_C14N_ENABLED + /endif + + * LIBXML_CATALOG_ENABLED: + * + * Whether the Catalog support is configured in + + /if defined(DEFINED_@WITH_CATALOG@) + /define LIBXML_CATALOG_ENABLED + /endif + + * LIBXML_DOCB_ENABLED: + * + * Whether the SGML Docbook support is configured in + + /if defined(DEFINED_@WITH_DOCB@) + /define LIBXML_DOCB_ENABLED + /endif + + * LIBXML_XPATH_ENABLED: + * + * Whether XPath is configured in + + /if defined(DEFINED_@WITH_XPATH@) + /define LIBXML_XPATH_ENABLED + /endif + + * LIBXML_XPTR_ENABLED: + * + * Whether XPointer is configured in + + /if defined(DEFINED_@WITH_XPTR@) + /define LIBXML_XPTR_ENABLED + /endif + + * LIBXML_XINCLUDE_ENABLED: + * + * Whether XInclude is configured in + + /if defined(DEFINED_@WITH_XINCLUDE@) + /define LIBXML_XINCLUDE_ENABLED + /endif + + * LIBXML_ICONV_ENABLED: + * + * Whether iconv support is available + + /if defined(DEFINED_@WITH_ICONV@) + /define LIBXML_ICONV_ENABLED + /endif + + * LIBXML_ICU_ENABLED: + * + * Whether icu support is available + + /if defined(DEFINED_@WITH_ICU@) + /define LIBXML_ICU_ENABLED + /endif + + * LIBXML_ISO8859X_ENABLED: + * + * Whether ISO-8859-* support is made available in case iconv is not + + /if defined(DEFINED_@WITH_ISO8859X@) + /define LIBXML_ISO8859X_ENABLED + /endif + + * LIBXML_DEBUG_ENABLED: + * + * Whether Debugging module is configured in + + /if defined(DEFINED_@WITH_DEBUG@) + /define LIBXML_DEBUG_ENABLED + /endif + + * DEBUG_MEMORY_LOCATION: + * + * Whether the memory debugging is configured in + + /if defined(DEFINED_@WITH_MEM_DEBUG@) + /define DEBUG_MEMORY_LOCATION + /endif + + * LIBXML_DEBUG_RUNTIME: + * + * Whether the runtime debugging is configured in + + /if defined(DEFINED_@WITH_RUN_DEBUG@) + /define LIBXML_DEBUG_RUNTIME + /endif + + * LIBXML_UNICODE_ENABLED: + * + * Whether the Unicode related interfaces are compiled in + + /if defined(DEFINED_@WITH_REGEXPS@) + /define LIBXML_UNICODE_ENABLED + /endif + + * LIBXML_REGEXP_ENABLED: + * + * Whether the regular expressions interfaces are compiled in + + /if defined(DEFINED_@WITH_REGEXPS@) + /define LIBXML_REGEXP_ENABLED + /endif + + * LIBXML_AUTOMATA_ENABLED: + * + * Whether the automata interfaces are compiled in + + /if defined(DEFINED_@WITH_REGEXPS@) + /define LIBXML_AUTOMATA_ENABLED + /endif + + * LIBXML_EXPR_ENABLED: + * + * Whether the formal expressions interfaces are compiled in + + /if defined(DEFINED_@WITH_SCHEMAS@) + /define LIBXML_EXPR_ENABLED + /endif + + * LIBXML_SCHEMAS_ENABLED: + * + * Whether the Schemas validation interfaces are compiled in + + /if defined(DEFINED_@WITH_SCHEMAS@) + /define LIBXML_SCHEMAS_ENABLED + /endif + + * LIBXML_SCHEMATRON_ENABLED: + * + * Whether the Schematron validation interfaces are compiled in + + /if defined(DEFINED_@WITH_SCHEMATRON@) + /define LIBXML_SCHEMATRON_ENABLED + /endif + + * LIBXML_MODULES_ENABLED: + * + * Whether the module interfaces are compiled in + + /if defined(DEFINED_@WITH_MODULES@) + /define LIBXML_MODULES_ENABLED + + * LIBXML_MODULE_EXTENSION: + * + * the string suffix used by dynamic modules (usually shared libraries) + + d LIBXML_MODULE_EXTENSION... + d c '.SRVPGM' + /endif + + * LIBXML_ZLIB_ENABLED: + * + * Whether the Zlib support is compiled in + + /if defined(DEFINED_@WITH_ZLIB@) + /define LIBXML_ZLIB_ENABLED + /endif + + * LIBXML_LZMA_ENABLED: + * + * Whether the Lzma support is compiled in + + /if defined(DEFINED_@WITH_LZMA@) + /define LIBXML_LZMA_ENABLED + /endif + /endif diff --git a/os400/libxmlrpg/xmlwriter.rpgle b/os400/libxmlrpg/xmlwriter.rpgle new file mode 100644 index 0000000..c8530f8 --- /dev/null +++ b/os400/libxmlrpg/xmlwriter.rpgle @@ -0,0 +1,801 @@ + * Summary: text writing API for XML + * Description: text writing API for XML + * + * Copy: See Copyright for the status of this software. + * + * Author: Patrick Monnerat , DATASPHERE S.A. + + /if not defined(XML_XMLWRITER_H__) + /define XML_XMLWRITER_H__ + + /include "libxmlrpg/xmlversion" + + /if defined(LIBXML_WRITER_ENABLED) + + /include "libxmlrpg/xmlTypesC" + /include "libxmlrpg/xmlstdarg" + /include "libxmlrpg/xmlIO" + /include "libxmlrpg/list" + /include "libxmlrpg/xmlstring" + + d xmlTextWriterPtr... + d s * based(######typedef######) + + * Constructors & Destructor + + d xmlNewTextWriter... + d pr extproc('xmlNewTextWriter') + d like(xmlTextWriterPtr) + d out value like(xmlOutputBufferPtr) + + d xmlNewTextWriterFilename... + d pr extproc('xmlNewTextWriterFilename') + d like(xmlTextWriterPtr) + d uri * value options(*string) const char * + d compression value like(xmlCint) + + d xmlNewTextWriterMemory... + d pr extproc('xmlNewTextWriterMemory') + d like(xmlTextWriterPtr) + d buf value like(xmlBufferPtr) + d compression value like(xmlCint) + + d xmlNewTextWriterPushParser... + d pr extproc('xmlNewTextWriterPushParser') + d like(xmlTextWriterPtr) + d ctxt value like(xmlParserCtxtPtr) + d compression value like(xmlCint) + + d xmlNewTextWriterDoc... + d pr extproc('xmlNewTextWriterDoc') + d like(xmlTextWriterPtr) + d doc like(xmlDocPtr) + d compression value like(xmlCint) + + d xmlNewTextWriterTree... + d pr extproc('xmlNewTextWriterTree') + d like(xmlTextWriterPtr) + d doc value like(xmlDocPtr) + d node value like(xmlNodePtr) + d compression value like(xmlCint) + + d xmlFreeTextWriter... + d pr extproc('xmlFreeTextWriter') + d writer value like(xmlTextWriterPtr) + + * Functions + + * Document + + d xmlTextWriterStartDocument... + d pr extproc('xmlTextWriterStartDocument') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d version * value options(*string) const char * + d encoding * value options(*string) const char * + d standalone * value options(*string) const char * + + d xmlTextWriterEndDocument... + d pr extproc('xmlTextWriterEndDocument') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + + * Comments + + d xmlTextWriterStartComment... + d pr extproc('xmlTextWriterStartComment') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + + d xmlTextWriterEndComment... + d pr extproc('xmlTextWriterEndComment') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + + d xmlTextWriterWriteFormatComment... + d pr extproc( + d 'xmlTextWriterWriteFormatComment') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d format * value options(*string: *nopass) const char * + d #vararg1 * value options(*string: *nopass) void * + d #vararg2 * value options(*string: *nopass) void * + d #vararg3 * value options(*string: *nopass) void * + d #vararg4 * value options(*string: *nopass) void * + d #vararg5 * value options(*string: *nopass) void * + d #vararg6 * value options(*string: *nopass) void * + d #vararg7 * value options(*string: *nopass) void * + d #vararg8 * value options(*string: *nopass) void * + + d xmlTextWriterWriteVFormatComment... + d pr extproc( + d 'xmlTextWriterWriteVFormatComment') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d format * value options(*string) const char * + d argptr likeds(xmlVaList) + + d xmlTextWriterWriteComment... + d pr extproc('xmlTextWriterWriteComment') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d content * value options(*string) const xmlChar * + + * Elements + + d xmlTextWriterStartElement... + d pr extproc('xmlTextWriterStartElement') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d name * value options(*string) const xmlChar * + + d xmlTextWriterStartElementNS... + d pr extproc( + d 'xmlTextWriterStartElementNS') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d prefix * value options(*string) const xmlChar * + d name * value options(*string) const xmlChar * + d namespaceURI * value options(*string) const xmlChar * + + d xmlTextWriterEndElement... + d pr extproc('xmlTextWriterEndElement') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + + d xmlTextWriterFullEndElement... + d pr extproc( + d 'xmlTextWriterFullEndElement') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + + * Elements conveniency functions + + d xmlTextWriterWriteFormatElement... + d pr extproc( + d 'xmlTextWriterWriteFormatElement') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d name * value options(*string) const xmlChar * + d format * value options(*string) const char * + d #vararg1 * value options(*string: *nopass) void * + d #vararg2 * value options(*string: *nopass) void * + d #vararg3 * value options(*string: *nopass) void * + d #vararg4 * value options(*string: *nopass) void * + d #vararg5 * value options(*string: *nopass) void * + d #vararg6 * value options(*string: *nopass) void * + d #vararg7 * value options(*string: *nopass) void * + d #vararg8 * value options(*string: *nopass) void * + + d xmlTextWriterWriteVFormatElement... + d pr extproc( + d 'xmlTextWriterWriteVFormatElement') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d name * value options(*string) const xmlChar * + d format * value options(*string) const char * + d argptr likeds(xmlVaList) + + d xmlTextWriterWriteElement... + d pr extproc('xmlTextWriterWriteElement') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d name * value options(*string) const xmlChar * + d content * value options(*string) const xmlChar * + + d xmlTextWriterWriteFormatElementNS... + d pr extproc( + d 'xmlTextWriterWriteFormatElementNS') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d prefix * value options(*string) const xmlChar * + d name * value options(*string) const xmlChar * + d namespaceURI * value options(*string) const xmlChar * + d format * value options(*string) const char * + d #vararg1 * value options(*string: *nopass) void * + d #vararg2 * value options(*string: *nopass) void * + d #vararg3 * value options(*string: *nopass) void * + d #vararg4 * value options(*string: *nopass) void * + d #vararg5 * value options(*string: *nopass) void * + d #vararg6 * value options(*string: *nopass) void * + d #vararg7 * value options(*string: *nopass) void * + d #vararg8 * value options(*string: *nopass) void * + + d xmlTextWriterWriteVFormatElementNS... + d pr extproc( + d 'xmlTextWriterWriteVFormatElementNS') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d prefix * value options(*string) const xmlChar * + d name * value options(*string) const xmlChar * + d namespaceURI * value options(*string) const xmlChar * + d format * value options(*string) const char * + d argptr likeds(xmlVaList) + + d xmlTextWriterWriteElementNS... + d pr extproc( + d 'xmlTextWriterWriteElementNS') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d prefix * value options(*string) const xmlChar * + d name * value options(*string) const xmlChar * + d namespaceURI * value options(*string) const xmlChar * + d content * value options(*string) const xmlChar * + + * Text + + d xmlTextWriterWriteFormatRaw... + d pr extproc( + d 'xmlTextWriterWriteFormatRaw') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d format * value options(*string) const char * + d #vararg1 * value options(*string: *nopass) void * + d #vararg2 * value options(*string: *nopass) void * + d #vararg3 * value options(*string: *nopass) void * + d #vararg4 * value options(*string: *nopass) void * + d #vararg5 * value options(*string: *nopass) void * + d #vararg6 * value options(*string: *nopass) void * + d #vararg7 * value options(*string: *nopass) void * + d #vararg8 * value options(*string: *nopass) void * + + d xmlTextWriterWriteVFormatRaw... + d pr extproc( + d 'xmlTextWriterWriteVFormatRaw') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d format * value options(*string) const char * + d argptr likeds(xmlVaList) + + d xmlTextWriterWriteRawLen... + d pr extproc('xmlTextWriterWriteRawLen') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d content * value options(*string) const xmlChar * + d len value like(xmlCint) + + d xmlTextWriterWriteRaw... + d pr extproc('xmlTextWriterWriteRaw') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d content * value options(*string) const xmlChar * + + d xmlTextWriterWriteFormatString... + d pr extproc( + d 'xmlTextWriterWriteFormatString') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d format * value options(*string) const char * + d #vararg1 * value options(*string: *nopass) void * + d #vararg2 * value options(*string: *nopass) void * + d #vararg3 * value options(*string: *nopass) void * + d #vararg4 * value options(*string: *nopass) void * + d #vararg5 * value options(*string: *nopass) void * + d #vararg6 * value options(*string: *nopass) void * + d #vararg7 * value options(*string: *nopass) void * + d #vararg8 * value options(*string: *nopass) void * + + d xmlTextWriterWriteVFormatString... + d pr extproc( + d 'xmlTextWriterWriteVFormatString') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d format * value options(*string) const char * + d argptr likeds(xmlVaList) + + d xmlTextWriterWriteString... + d pr extproc('xmlTextWriterWriteString') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d content * value options(*string) const xmlChar * + + d xmlTextWriterWriteBase64... + d pr extproc('xmlTextWriterWriteBase64') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d data * value options(*string) const char * + d start value like(xmlCint) + d len value like(xmlCint) + + d xmlTextWriterWriteBinHex... + d pr extproc('xmlTextWriterWriteBinHex') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d data * value options(*string) const char * + d start value like(xmlCint) + d len value like(xmlCint) + + * Attributes + + d xmlTextWriterStartAttribute... + d pr extproc( + d 'xmlTextWriterStartAttribute') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d name * value options(*string) const xmlChar * + + d xmlTextWriterStartAttributeNS... + d pr extproc( + d 'xmlTextWriterStartAttributeNS') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d prefix * value options(*string) const xmlChar * + d name * value options(*string) const xmlChar * + d namespaceURI * value options(*string) const xmlChar * + + d xmlTextWriterEndAttribute... + d pr extproc('xmlTextWriterEndAttribute') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + + * Attributes conveniency functions + + d xmlTextWriterWriteFormatAttribute... + d pr extproc( + d 'xmlTextWriterWriteFormatAttribute') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d name * value options(*string) const xmlChar * + d format * value options(*string) const char * + d #vararg1 * value options(*string: *nopass) void * + d #vararg2 * value options(*string: *nopass) void * + d #vararg3 * value options(*string: *nopass) void * + d #vararg4 * value options(*string: *nopass) void * + d #vararg5 * value options(*string: *nopass) void * + d #vararg6 * value options(*string: *nopass) void * + d #vararg7 * value options(*string: *nopass) void * + d #vararg8 * value options(*string: *nopass) void * + + d xmlTextWriterWriteVFormatAttribute... + d pr extproc( + d 'xmlTextWriterWriteVFormatAttribute') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d name * value options(*string) const xmlChar * + d format * value options(*string) const char * + d argptr likeds(xmlVaList) + + d xmlTextWriterWriteAttribute... + d pr extproc( + d 'xmlTextWriterWriteAttribute') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d name * value options(*string) const xmlChar * + d content * value options(*string) const xmlChar * + + d xmlTextWriterWriteFormatAttributeNS... + d pr extproc( + d 'xmlTextWriterWriteFormatAttributeNS' + d ) + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d prefix * value options(*string) const xmlChar * + d name * value options(*string) const xmlChar * + d namespaceURI * value options(*string) const xmlChar * + d format * value options(*string) const char * + d #vararg1 * value options(*string: *nopass) void * + d #vararg2 * value options(*string: *nopass) void * + d #vararg3 * value options(*string: *nopass) void * + d #vararg4 * value options(*string: *nopass) void * + d #vararg5 * value options(*string: *nopass) void * + d #vararg6 * value options(*string: *nopass) void * + d #vararg7 * value options(*string: *nopass) void * + d #vararg8 * value options(*string: *nopass) void * + + d xmlTextWriterWriteVFormatAttributeNS... + d pr extproc('xmlTextWriterWriteVFormatAt- + d tributeNS') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d prefix * value options(*string) const xmlChar * + d name * value options(*string) const xmlChar * + d namespaceURI * value options(*string) const xmlChar * + d format * value options(*string) const char * + d argptr likeds(xmlVaList) + + d xmlTextWriterWriteAttributeNS... + d pr extproc( + d 'xmlTextWriterWriteAttributeNS') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d prefix * value options(*string) const xmlChar * + d name * value options(*string) const xmlChar * + d namespaceURI * value options(*string) const xmlChar * + d content * value options(*string) const xmlChar * + + * PI's + + d xmlTextWriterStartPI... + d pr extproc('xmlTextWriterStartPI') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d target * value options(*string) const xmlChar * + + d xmlTextWriterEndPI... + d pr extproc('xmlTextWriterEndPI') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + + * PI conveniency functions + + d xmlTextWriterWriteFormatPI... + d pr extproc('xmlTextWriterWriteFormatPI') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d target * value options(*string) const xmlChar * + d format * value options(*string) const char * + d #vararg1 * value options(*string: *nopass) void * + d #vararg2 * value options(*string: *nopass) void * + d #vararg3 * value options(*string: *nopass) void * + d #vararg4 * value options(*string: *nopass) void * + d #vararg5 * value options(*string: *nopass) void * + d #vararg6 * value options(*string: *nopass) void * + d #vararg7 * value options(*string: *nopass) void * + d #vararg8 * value options(*string: *nopass) void * + + d xmlTextWriterWriteVFormatPI... + d pr extproc( + d 'xmlTextWriterWriteVFormatPI') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d target * value options(*string) const xmlChar * + d format * value options(*string) const char * + d argptr likeds(xmlVaList) + + d xmlTextWriterWritePI... + d pr extproc('xmlTextWriterWritePI') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d target * value options(*string) const xmlChar * + d content * value options(*string) const xmlChar * + + * xmlTextWriterWriteProcessingInstruction: + * + * This macro maps to xmlTextWriterWritePI + + d xmlTextWriterWriteProcessingInstruction... + d pr extproc('xmlTextWriterWritePI') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d target * value options(*string) const xmlChar * + d content * value options(*string) const xmlChar * + + * CDATA + + d xmlTextWriterStartCDATA... + d pr extproc('xmlTextWriterStartCDATA') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + + d xmlTextWriterEndCDATA... + d pr extproc('xmlTextWriterEndCDATA') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + + * CDATA conveniency functions + + d xmlTextWriterWriteFormatCDATA... + d pr extproc( + d 'xmlTextWriterWriteFormatCDATA') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d format * value options(*string) const char * + d #vararg1 * value options(*string: *nopass) void * + d #vararg2 * value options(*string: *nopass) void * + d #vararg3 * value options(*string: *nopass) void * + d #vararg4 * value options(*string: *nopass) void * + d #vararg5 * value options(*string: *nopass) void * + d #vararg6 * value options(*string: *nopass) void * + d #vararg7 * value options(*string: *nopass) void * + d #vararg8 * value options(*string: *nopass) void * + + d xmlTextWriterWriteVFormatCDATA... + d pr extproc( + d 'xmlTextWriterWriteVFormatCDATA') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d format * value options(*string) const char * + d argptr likeds(xmlVaList) + + d xmlTextWriterWriteCDATA... + d pr extproc('xmlTextWriterWriteCDATA') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d content * value options(*string) const xmlChar * + + * DTD + + d xmlTextWriterStartDTD... + d pr extproc('xmlTextWriterStartDTD') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d name * value options(*string) const xmlChar * + d pubid * value options(*string) const xmlChar * + d sysid * value options(*string) const xmlChar * + + d xmlTextWriterEndDTD... + d pr extproc('xmlTextWriterEndDTD') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + + * DTD conveniency functions + + d xmlTextWriterWriteFormatDTD... + d pr extproc( + d 'xmlTextWriterWriteFormatDTD') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d name * value options(*string) const xmlChar * + d pubid * value options(*string) const xmlChar * + d sysid * value options(*string) const xmlChar * + d format * value options(*string) const char * + d #vararg1 * value options(*string: *nopass) void * + d #vararg2 * value options(*string: *nopass) void * + d #vararg3 * value options(*string: *nopass) void * + d #vararg4 * value options(*string: *nopass) void * + d #vararg5 * value options(*string: *nopass) void * + d #vararg6 * value options(*string: *nopass) void * + d #vararg7 * value options(*string: *nopass) void * + d #vararg8 * value options(*string: *nopass) void * + + d xmlTextWriterWriteVFormatDTD... + d pr extproc( + d 'xmlTextWriterWriteVFormatDTD') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d name * value options(*string) const xmlChar * + d pubid * value options(*string) const xmlChar * + d sysid * value options(*string) const xmlChar * + d format * value options(*string) const char * + d argptr likeds(xmlVaList) + + d xmlTextWriterWriteDTD... + d pr extproc('xmlTextWriterWriteDTD') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d name * value options(*string) const xmlChar * + d pubid * value options(*string) const xmlChar * + d sysid * value options(*string) const xmlChar * + d subset * value options(*string) const xmlChar * + + * xmlTextWriterWriteDocType: + * + * this macro maps to xmlTextWriterWriteDTD + + d xmlTextWriterWriteDocType... + d pr extproc('xmlTextWriterWriteDTD') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d name * value options(*string) const xmlChar * + d pubid * value options(*string) const xmlChar * + d sysid * value options(*string) const xmlChar * + d subset * value options(*string) const xmlChar * + + * DTD element definition + + d xmlTextWriterStartDTDElement... + d pr extproc( + d 'xmlTextWriterStartDTDElement') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d name * value options(*string) const xmlChar * + + d xmlTextWriterEndDTDElement... + d pr extproc('xmlTextWriterEndDTDElement') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + + * DTD element definition conveniency functions + + d xmlTextWriterWriteFormatDTDElement... + d pr extproc( + d 'xmlTextWriterWriteFormatDTDElement') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d name * value options(*string) const xmlChar * + d format * value options(*string) const char * + d #vararg1 * value options(*string: *nopass) void * + d #vararg2 * value options(*string: *nopass) void * + d #vararg3 * value options(*string: *nopass) void * + d #vararg4 * value options(*string: *nopass) void * + d #vararg5 * value options(*string: *nopass) void * + d #vararg6 * value options(*string: *nopass) void * + d #vararg7 * value options(*string: *nopass) void * + d #vararg8 * value options(*string: *nopass) void * + + d xmlTextWriterWriteVFormatDTDElement... + d pr extproc( + d 'xmlTextWriterWriteVFormatDTDElement' + d ) + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d name * value options(*string) const xmlChar * + d format * value options(*string) const char * + d argptr likeds(xmlVaList) + + d xmlTextWriterWriteDTDElement... + d pr extproc( + d 'xmlTextWriterWriteDTDElement') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d name * value options(*string) const xmlChar * + d content * value options(*string) const xmlChar * + + * DTD attribute list definition + + d xmlTextWriterStartDTDAttlist... + d pr extproc( + d 'xmlTextWriterStartDTDAttlist') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d name * value options(*string) const xmlChar * + + d xmlTextWriterEndDTDAttlist... + d pr extproc('xmlTextWriterEndDTDAttlist') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + + * DTD attribute list definition conveniency functions + + d xmlTextWriterWriteFormatDTDAttlist... + d pr extproc( + d 'xmlTextWriterWriteFormatDTDAttlist') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d name * value options(*string) const xmlChar * + d format * value options(*string) const char * + d #vararg1 * value options(*string: *nopass) void * + d #vararg2 * value options(*string: *nopass) void * + d #vararg3 * value options(*string: *nopass) void * + d #vararg4 * value options(*string: *nopass) void * + d #vararg5 * value options(*string: *nopass) void * + d #vararg6 * value options(*string: *nopass) void * + d #vararg7 * value options(*string: *nopass) void * + d #vararg8 * value options(*string: *nopass) void * + + d xmlTextWriterWriteVFormatDTDAttlist... + d pr extproc( + d 'xmlTextWriterWriteVFormatDTDAttlist' + d ) + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d name * value options(*string) const xmlChar * + d format * value options(*string) const char * + d argptr likeds(xmlVaList) + + d xmlTextWriterWriteDTDAttlist... + d pr extproc( + d 'xmlTextWriterWriteDTDAttlist') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d name * value options(*string) const xmlChar * + d content * value options(*string) const xmlChar * + + * DTD entity definition + + d xmlTextWriterStartDTDEntity... + d pr extproc( + d 'xmlTextWriterStartDTDEntity') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d pe value like(xmlCint) + d name * value options(*string) const xmlChar * + + d xmlTextWriterEndDTDEntity... + d pr extproc('xmlTextWriterEndDTDEntity') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + + * DTD entity definition conveniency functions + + d xmlTextWriterWriteFormatDTDInternalEntity... + d pr extproc('xmlTextWriterWriteFormatDTD- + d InternalEntity') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d pe value like(xmlCint) + d name * value options(*string) const xmlChar * + d format * value options(*string) const char * + d #vararg1 * value options(*string: *nopass) void * + d #vararg2 * value options(*string: *nopass) void * + d #vararg3 * value options(*string: *nopass) void * + d #vararg4 * value options(*string: *nopass) void * + d #vararg5 * value options(*string: *nopass) void * + d #vararg6 * value options(*string: *nopass) void * + d #vararg7 * value options(*string: *nopass) void * + d #vararg8 * value options(*string: *nopass) void * + + d xmlTextWriterWriteVFormatDTDInternalEntity... + d pr extproc('xmlTextWriterWriteVFormatDT- + d DInternalEntity') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d pe value like(xmlCint) + d name * value options(*string) const xmlChar * + d format * value options(*string) const char * + d argptr likeds(xmlVaList) + + d xmlTextWriterWriteDTDInternalEntity... + d pr extproc( + d 'xmlTextWriterWriteDTDInternalEntity' + d ) + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d pe value like(xmlCint) + d name * value options(*string) const xmlChar * + d content * value options(*string) const xmlChar * + + d xmlTextWriterWriteDTDExternalEntity... + d pr extproc( + d 'xmlTextWriterWriteDTDExternalEntity' + d ) + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d pe value like(xmlCint) + d name * value options(*string) const xmlChar * + d pubid * value options(*string) const xmlChar * + d sysid * value options(*string) const xmlChar * + d ndataid * value options(*string) const xmlChar * + + d xmlTextWriterWriteDTDExternalEntityContents... + d pr extproc('xmlTextWriterWriteDTDExtern- + d alEntityContents') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d pubid * value options(*string) const xmlChar * + d sysid * value options(*string) const xmlChar * + d ndataid * value options(*string) const xmlChar * + + d xmlTextWriterWriteDTDEntity... + d pr extproc( + d 'xmlTextWriterWriteDTDEntity') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d pe value like(xmlCint) + d name * value options(*string) const xmlChar * + d pubid * value options(*string) const xmlChar * + d sysid * value options(*string) const xmlChar * + d ndataid * value options(*string) const xmlChar * + d content * value options(*string) const xmlChar * + + * DTD notation definition + + d xmlTextWriterWriteDTDNotation... + d pr extproc( + d 'xmlTextWriterWriteDTDNotation') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d name * value options(*string) const xmlChar * + d pubid * value options(*string) const xmlChar * + d sysid * value options(*string) const xmlChar * + + * Indentation + + d xmlTextWriterSetIndent... + d pr extproc('xmlTextWriterSetIndent') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d indent value like(xmlCint) + + d xmlTextWriterSetIndentString... + d pr extproc( + d 'xmlTextWriterSetIndentString') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d str * value options(*string) const xmlChar * + + d xmlTextWriterSetQuoteChar... + d pr extproc('xmlTextWriterSetQuoteChar') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + d quotechar value like(xmlChar) + + * misc + + d xmlTextWriterFlush... + d pr extproc('xmlTextWriterFlush') + d like(xmlCint) + d writer value like(xmlTextWriterPtr) + + /endif LIBXML_WRITER_ENABLD + /endif XML_XMLWRITER_H__ diff --git a/os400/libxmlrpg/xpath.rpgle b/os400/libxmlrpg/xpath.rpgle new file mode 100644 index 0000000..6e591ee --- /dev/null +++ b/os400/libxmlrpg/xpath.rpgle @@ -0,0 +1,675 @@ + * Summary: XML Path Language implementation + * Description: API for the XML Path Language implementation + * + * XML Path Language implementation + * XPath is a language for addressing parts of an XML document, + * designed to be used by both XSLT and XPointer + * http://www.w3.org/TR/xpath + * + * Implements + * W3C Recommendation 16 November 1999 + * http://www.w3.org/TR/1999/REC-xpath-19991116 + * + * Copy: See Copyright for the status of this software. + * + * Author: Patrick Monnerat , DATASPHERE S.A. + + /if not defined(XML_XPATH_H__) + /define XML_XPATH_H__ + + /include "libxmlrpg/xmlversion" + + /if defined(LIBXML_XPATH_ENABLED) + + /include "libxmlrpg/xmlTypesC" + /include "libxmlrpg/xmlerror" + /include "libxmlrpg/tree" + /include "libxmlrpg/hash" + /endif LIBXML_XPATH_ENABLED + + /if defined(LIBXML_XPATH_ENABLED) + + d xmlXPathContextPtr... + d s * based(######typedef######) + + d xmlXPathParserContextPtr... + d s * based(######typedef######) + + * The set of XPath error codes. + + d xmlXPathError s based(######typedef######) + d like(xmlCenum) + d XPATH_EXPRESSION_OK... + d c 0 + d XPATH_NUMBER_ERROR... + d c 1 + d XPATH_UNFINISHED_LITERAL_ERROR... + d c 2 + d XPATH_START_LITERAL_ERROR... + d c 3 + d XPATH_VARIABLE_REF_ERROR... + d c 4 + d XPATH_UNDEF_VARIABLE_ERROR... + d c 5 + d XPATH_INVALID_PREDICATE_ERROR... + d c 6 + d XPATH_EXPR_ERROR... + d c 7 + d XPATH_UNCLOSED_ERROR... + d c 8 + d XPATH_UNKNOWN_FUNC_ERROR... + d c 9 + d XPATH_INVALID_OPERAND... + d c 10 + d XPATH_INVALID_TYPE... + d c 11 + d XPATH_INVALID_ARITY... + d c 12 + d XPATH_INVALID_CTXT_SIZE... + d c 13 + d XPATH_INVALID_CTXT_POSITION... + d c 14 + d XPATH_MEMORY_ERROR... + d c 15 + d XPTR_SYNTAX_ERROR... + d c 16 + d XPTR_RESOURCE_ERROR... + d c 17 + d XPTR_SUB_RESOURCE_ERROR... + d c 18 + d XPATH_UNDEF_PREFIX_ERROR... + d c 19 + d XPATH_ENCODING_ERROR... + d c 20 + d XPATH_INVALID_CHAR_ERROR... + d c 21 + d XPATH_INVALID_CTXT... + d c 22 + d XPATH_STACK_ERROR... + d c 23 + d XPATH_FORBID_VARIABLE_ERROR... + d c 24 + + * A node-set (an unordered collection of nodes without duplicates). + + d xmlNodeSetPtr s * based(######typedef######) + + d xmlNodeSet ds based(xmlNodeSetPtr) + d align qualified + d nodeNr like(xmlCint) Set node count + d nodeMax like(xmlCint) Max # nodes in set + d nodeTab * xmlNodePtr * + + * An expression is evaluated to yield an object, which + * has one of the following four basic types: + * - node-set + * - boolean + * - number + * - string + * + * @@ XPointer will add more types ! + + d xmlXPathObjectType... + d s based(######typedef######) + d like(xmlCenum) + d XPATH_UNDEFINED... + d c 0 + d XPATH_NODESET c 1 + d XPATH_BOOLEAN c 2 + d XPATH_NUMBER c 3 + d XPATH_STRING c 4 + d XPATH_POINT c 5 + d XPATH_RANGE c 6 + d XPATH_LOCATIONSET... + d c 7 + d XPATH_USERS c 8 + d XPATH_XSLT_TREE... R/O XSLT value tree + d c 9 + + d xmlXPathObjectPtr... + d s * based(######typedef######) + + d xmlXPathObject ds based(xmlXPathObjectPtr) + d align qualified + d type like(xmlXPathObjectType) + d nodesetval like(xmlNodeSetPtr) + d boolval like(xmlCint) + d floatval like(xmlCdouble) + d stringval * xmlChar * + d user * void * + d index like(xmlCint) + d user2 * void * + d index2 like(xmlCint) + + * xmlXPathConvertFunc: + * @obj: an XPath object + * @type: the number of the target type + * + * A conversion function is associated to a type and used to cast + * the new type to primitive values. + * + * Returns -1 in case of error, 0 otherwise + + d xmlXPathConvertFunc... + d s * based(######typedef######) + d procptr + + * Extra type: a name and a conversion function. + + d xmlXPathTypePtr... + d s * based(######typedef######) + + d xmlXPathType ds based(xmlXPathTypePtr) + d align qualified + d name * The type name + d func like(xmlXPathConvertFunc) Conversion function + + * Extra variable: a name and a value. + + d xmlXPathVariablePtr... + d s * based(######typedef######) + + d xmlXPathVariable... + d ds based(xmlXPathVariablePtr) + d align qualified + d name * The variable name + d value like(xmlXPathObjectPtr) The value + + * xmlXPathEvalFunc: + * @ctxt: an XPath parser context + * @nargs: the number of arguments passed to the function + * + * An XPath evaluation function, the parameters are on the XPath + * context stack. + + d xmlXPathEvalFunc... + d s * based(######typedef######) + d procptr + + * Extra function: a name and an evaluation function. + + d xmlXPathFuncPtr... + d s * based(######typedef######) + + d xmlXPathFunct ds based(xmlXPathFuncPtr) + d align qualified + d name * The function name + d func like(xmlXPathEvalFunc) Evaluation function + + * xmlXPathAxisFunc: + * @ctxt: the XPath interpreter context + * @cur: the previous node being explored on that axis + * + * An axis traversal function. To traverse an axis, the engine calls + * the first time with cur == NULL and repeat until the function returns + * NULL indicating the end of the axis traversal. + * + * Returns the next node in that axis or NULL if at the end of the axis. + + d xmlXPathAxisFunc... + d s * based(######typedef######) + d procptr + + * Extra axis: a name and an axis function. + + d xmlXPathAxisPtr... + d s * based(######typedef######) + + d xmlXPathAxis ds based(xmlXPathAxisPtr) + d align qualified + d name * The axis name + d func like(xmlXPathAxisFunc) The search function + + * xmlXPathFunction: + * @ctxt: the XPath interprestation context + * @nargs: the number of arguments + * + * An XPath function. + * The arguments (if any) are popped out from the context stack + * and the result is pushed on the stack. + + d xmlXPathFunction... + d s * based(######typedef######) + d procptr + + * Function and Variable Lookup. + + * xmlXPathVariableLookupFunc: + * @ctxt: an XPath context + * @name: name of the variable + * @ns_uri: the namespace name hosting this variable + * + * Prototype for callbacks used to plug variable lookup in the XPath + * engine. + * + * Returns the XPath object value or NULL if not found. + + d xmlXPathVariableLookupFunc... + d s * based(######typedef######) + d procptr + + * xmlXPathFuncLookupFunc: + * @ctxt: an XPath context + * @name: name of the function + * @ns_uri: the namespace name hosting this function + * + * Prototype for callbacks used to plug function lookup in the XPath + * engine. + * + * Returns the XPath function or NULL if not found. + + d xmlXPathFuncLookupFunc... + d s * based(######typedef######) + d procptr + + * xmlXPathFlags: + * Flags for XPath engine compilation and runtime + + * XML_XPATH_CHECKNS: + * + * check namespaces at compilation + + d XML_XPATH_CHECKNS... + d c X'0001' + + * XML_XPATH_NOVAR: + * + * forbid variables in expression + + d XML_XPATH_NOVAR... + d c X'0002' + + * xmlXPathContext: + * + * Expression evaluation occurs with respect to a context. + * he context consists of: + * - a node (the context node) + * - a node list (the context node list) + * - a set of variable bindings + * - a function library + * - the set of namespace declarations in scope for the expression + * Following the switch to hash tables, this need to be trimmed up at + * the next binary incompatible release. + * The node may be modified when the context is passed to libxml2 + * for an XPath evaluation so you may need to initialize it again + * before the next call. + + d xmlXPathContext... + d ds based(xmlXPathContextPtr) + d align qualified + d doc like(xmlDocPtr) Current document + d node like(xmlNodePtr) Current node + * + d nb_variables_unused... Unused (hash table) + d like(xmlCint) + d max_variables_unused... Unused (hash table) + d like(xmlCint) + d varHash like(xmlHashTablePtr) Defined variables + * + d nb_types like(xmlCint) # of defined types + d max_types like(xmlCint) Max number of types + d types like(xmlXPathTypePtr) Defined types array + * + d nb_funcs_unused... Unused (hash table) + d like(xmlCint) + d max_funcs_unused... Unused (hash table) + d like(xmlCint) + d funcHash like(xmlHashTablePtr) Defined functions + * + d nb_axis like(xmlCint) # of defined axis + d max_axis like(xmlCint) Max number of axis + d axis like(xmlXPathAxisPtr) Defined axis array + * + * the namespace nodes of the context node + * + d namespaces * xmlNsPtr * + d nsNr like(xmlCint) # scope namespaces + d user * procptr Function to free + * + * extra variables + * + d contextSize like(xmlCint) The context size + d proximityPosition... + d like(xmlCint) + * + * extra stuff for XPointer + * + d xptr like(xmlCint) XPointer context ? + d here like(xmlNodePtr) For here() + d origin like(xmlNodePtr) For origin() + * + * the set of namespace declarations in scope for the expression + * + d nsHash like(xmlHashTablePtr) Namespace hashtable + d varLookupFunc like(xmlXPathVariableLookupFunc) Var lookup function + d varLookupData * void * + * + * Possibility to link in an extra item + * + d extra * void * + * + * The function name and URI when calling a function + * + d function * const xmlChar * + d functionURI * const xmlChar * + * + * function lookup function and data + * + d funcLookupFunc... Func lookup func + d like(xmlXPathVariableLookupFunc) + d funcLookupData... void * + d * + * + * temporary namespace lists kept for walking the namespace axis + * + d tmpNsList * xmlNsPtr * + d tmpNsNr like(xmlCint) # scope namespaces + * + * error reporting mechanism + * + d userData * void * + d error like(xmlStructuredErrorFunc) Error callback + d lastError likeds(xmlError) The last error + d debugNode like(xmlNodePtr) XSLT source node + * + * dictionary + * + d dict like(xmlDictPtr) Dictionary if any + * + d flags like(xmlCint) Compilation control + * + * Cache for reusal of XPath objects + * + d cache * void * + + * The structure of a compiled expression form is not public. + + d xmlXPathCompExprPtr... + d s * based(######typedef######) + + * xmlXPathParserContext: + * + * An XPath parser context. It contains pure parsing informations, + * an xmlXPathContext, and the stack of objects. + + d xmlXPathParserContext... + d ds based(xmlXPathParserContextPtr) + d align qualified + d cur * const xmlChar * + d base * const xmlChar * + * + d error like(xmlCint) Error code + * + d context like(xmlXPathContextPtr) Evaluation context + d value like(xmlXPathObjectPtr) The current value + d valueNr like(xmlCint) Value stack depth + d valueMax like(xmlCint) Max stack depth + d valueTab * xmlXPathObjectPtr * + * + d comp like(xmlXPathCompExprPtr) Precompiled expr. + d xptr like(xmlCint) XPointer expression? + d ancestor like(xmlNodePtr) To walk prec. axis + * + d valueFrame like(xmlCint) Limit stack pop + + ************************************************************************** + * * + * Public API * + * * + ************************************************************************** + + * Objects and Nodesets handling + + d xmlXPathNAN s import('xmlXPathNAN') + d like(xmlCdouble) + + d xmlXPathPINF s import('xmlXPathPINF') + d like(xmlCdouble) + + d xmlXPathNINF s import('xmlXPathNINF') + d like(xmlCdouble) + + d xmlXPathFreeObject... + d pr extproc('xmlXPathFreeObject') + d obj value like(xmlXPathObjectPtr) + + d xmlXPathNodeSetCreate... + d pr extproc('xmlXPathNodeSetCreate') + d like(xmlNodeSetPtr) + d val value like(xmlNodePtr) + + d xmlXPathFreeNodeSetList... + d pr extproc('xmlXPathFreeNodeSetList') + d obj value like(xmlXPathObjectPtr) + + d xmlXPathFreeNodeSet... + d pr extproc('xmlXPathFreeNodeSet') + d obj value like(xmlNodeSetPtr) + + d xmlXPathObjectCopy... + d pr extproc('xmlXPathObjectCopy') + d like(xmlXPathObjectPtr) + d val value like(xmlXPathObjectPtr) + + d xmlXPathCmpNodes... + d pr extproc('xmlXPathCmpNodes') + d like(xmlCint) + d node1 value like(xmlNodePtr) + d node2 value like(xmlNodePtr) + + * Conversion functions to basic types. + + d xmlXPathCastNumberToBoolean... + d pr extproc( + d 'xmlXPathCastNumberToBoolean') + d like(xmlCint) + d val value like(xmlCdouble) + + d xmlXPathCastStringToBoolean... + d pr extproc( + d 'xmlXPathCastStringToBoolean') + d like(xmlCint) + d val * value options(*string) const xmlChar * + + d xmlXPathCastNodeSetToBoolean... + d pr extproc( + d 'xmlXPathCastNodeSetToBoolean') + d like(xmlCint) + d ns value like(xmlNodeSetPtr) + + d xmlXPathCastToBoolean... + d pr extproc('xmlXPathCastToBoolean') + d like(xmlCint) + d val value like(xmlXPathObjectPtr) + + d xmlXPathCastBooleanToNumber... + d pr extproc( + d 'xmlXPathCastBooleanToNumber') + d like(xmlCdouble) + d val value like(xmlCint) + + d xmlXPathCastStringToNumber... + d pr extproc('xmlXPathCastStringToNumber') + d like(xmlCdouble) + d val * value options(*string) const xmlChar * + + d xmlXPathCastNodeToNumber... + d pr extproc('xmlXPathCastNodeToNumber') + d like(xmlCdouble) + d node value like(xmlNodePtr) + + d xmlXPathCastNodeSetToNumber... + d pr extproc( + d 'xmlXPathCastNodeSetToNumber') + d like(xmlCdouble) + d ns value like(xmlNodeSetPtr) + + d xmlXPathCastToNumber... + d pr extproc('xmlXPathCastToNumber') + d like(xmlCdouble) + d val value like(xmlXPathObjectPtr) + + d xmlXPathCastBooleanToString... + d pr * extproc( xmlChar * + d 'xmlXPathCastBooleanToString') + d val value like(xmlCint) + + d xmlXPathCastNumberToString... + d pr * extproc('xmlXPathCastNumberToString')xmlChar * + d val value like(xmlCdouble) + + d xmlXPathCastNodeToString... + d pr * extproc('xmlXPathCastNodeToString') xmlChar * + d node value like(xmlNodePtr) + + d xmlXPathCastNodeSetToString... + d pr * extproc('xmlXPathCastNodeSetToString'xmlChar * + d ) + d ns value like(xmlNodeSetPtr) + + d xmlXPathCastToString... + d pr * extproc('xmlXPathCastToString') xmlChar * + d val value like(xmlXPathObjectPtr) + + d xmlXPathConvertBoolean... + d pr extproc('xmlXPathConvertBoolean') + d like(xmlXPathObjectPtr) + d val value like(xmlXPathObjectPtr) + + d xmlXPathConvertNumber... + d pr extproc('xmlXPathConvertNumber') + d like(xmlXPathObjectPtr) + d val value like(xmlXPathObjectPtr) + + d xmlXPathConvertString... + d pr extproc('xmlXPathConvertString') + d like(xmlXPathObjectPtr) + d val value like(xmlXPathObjectPtr) + + * Context handling. + + d xmlXPathNewContext... + d pr extproc('xmlXPathNewContext') + d like(xmlXPathContextPtr) + d doc value like(xmlDocPtr) + + d xmlXPathFreeContext... + d pr extproc('xmlXPathFreeContext') + d ctxt value like(xmlXPathContextPtr) + + d xmlXPathContextSetCache... + d pr extproc('xmlXPathContextSetCache') + d like(xmlCint) + d ctxt value like(xmlXPathContextPtr) + d active value like(xmlCint) + d value value like(xmlCint) + d options value like(xmlCint) + + * Evaluation functions. + + d xmlXPathOrderDocElems... + d pr extproc('xmlXPathOrderDocElems') + d like(xmlClong) + d doc value like(xmlDocPtr) + + d xmlXPathSetContextNode... + d pr extproc('xmlXPathSetContextNode') + d like(xmlCint) + d node value like(xmlNodePtr) + d ctx value like(xmlXPathContextPtr) + + d xmlXPathNodeEval... + d pr extproc('xmlXPathNodeEval') + d like(xmlXPathObjectPtr) + d node value like(xmlNodePtr) + d str * value options(*string) const xmlChar * + d ctx value like(xmlXPathContextPtr) + + d xmlXPathEval pr extproc('xmlXPathEval') + d like(xmlXPathObjectPtr) + d str * value options(*string) const xmlChar * + d ctx value like(xmlXPathContextPtr) + + d xmlXPathEvalExpression... + d pr extproc('xmlXPathEvalExpression') + d like(xmlXPathObjectPtr) + d str * value options(*string) const xmlChar * + d ctxt value like(xmlXPathContextPtr) + + d xmlXPathEvalPredicate... + d pr extproc('xmlXPathEvalPredicate') + d like(xmlCint) + d ctxt value like(xmlXPathContextPtr) + d res value like(xmlXPathObjectPtr) + + * Separate compilation/evaluation entry points. + + d xmlXPathCompile... + d pr extproc('xmlXPathCompile') + d like(xmlXPathCompExprPtr) + d str * value options(*string) const xmlChar * + + d xmlXPathCtxtCompile... + d pr extproc('xmlXPathCtxtCompile') + d like(xmlXPathCompExprPtr) + d ctxt value like(xmlXPathContextPtr) + d str * value options(*string) const xmlChar * + + d xmlXPathCompiledEval... + d pr extproc('xmlXPathCompiledEval') + d like(xmlXPathObjectPtr) + d comp value like(xmlXPathCompExprPtr) + d ctx value like(xmlXPathContextPtr) + + d xmlXPathCompiledEvalToBoolean... + d pr extproc( + d 'xmlXPathCompiledEvalToBoolean') + d like(xmlCint) + d comp value like(xmlXPathCompExprPtr) + d ctxt value like(xmlXPathContextPtr) + + d xmlXPathFreeCompExpr... + d pr extproc('xmlXPathFreeCompExpr') + d comp value like(xmlXPathCompExprPtr) + /endif LIBXML_XPATH_ENABLED + + /undefine XML_TESTVAL + /if defined(LIBXML_XPATH_ENABLED) + /define XML_TESTVAL + /elseif defined(LIBXML_SCHEMAS_ENABLED) + /define XML_TESTVAL + /endif + /if defined(XML_TESTVAL) + d xmlXPathInit pr extproc('xmlXPathInit') + + d xmlXPathIsNaN pr extproc('xmlXPathIsNaN') + d like(xmlCint) + d val value like(xmlCdouble) + + d xmlXPathIsInf pr extproc('xmlXPathIsInf') + d like(xmlCint) + d val value like(xmlCdouble) + + /undefine XML_TESTVAL + /endif + + * C macros implemented as procedures for ILE/RPG support. + + /if defined(LIBXML_XPATH_ENABLED) + d xmlXPathNodeSetGetLength... + d pr extproc('__xmlXPathNodeSetGetLength') + d like(xmlCint) + d ns value like(xmlNodeSetPtr) + + d xmlXPathNodeSetItem... + d pr extproc('__xmlXPathNodeSetItem') + d like(xmlNodePtr) + d ns value like(xmlNodeSetPtr) + d index value like(xmlCint) + + d xmlXPathNodeSetIsEmpty... + d pr extproc('__xmlXPathNodeSetIsEmpty') + d like(xmlCint) + d ns value like(xmlNodeSetPtr) + /endif LIBXML_XPATH_ENABLED + /endif XML_XPATH_H__ diff --git a/os400/libxmlrpg/xpathInternals.rpgle b/os400/libxmlrpg/xpathInternals.rpgle new file mode 100644 index 0000000..a6d12e1 --- /dev/null +++ b/os400/libxmlrpg/xpathInternals.rpgle @@ -0,0 +1,693 @@ + * Summary: internal interfaces for XML Path Language implementation + * Description: internal interfaces for XML Path Language implementation + * used to build new modules on top of XPath like XPointer and + * XSLT + * + * Copy: See Copyright for the status of this software. + * + * Author: Patrick Monnerat , DATASPHERE S.A. + + /if not defined(XML_XPATH_INTERNALS_H__) + /define XML_XPATH_INTERNALS_H__ + + /include "libxmlrpg/xmlversion" + + /if defined(LIBXML_XPATH_ENABLED) + + /include "libxmlrpg/xmlTypesC" + /include "libxmlrpg/xpath" + + ************************************************************************ + * * + * Helpers * + * * + ************************************************************************ + + * Many of these macros may later turn into functions. They + * shouldn't be used in #ifdef's preprocessor instructions. + + d xmlXPathPopBoolean... + d pr extproc('xmlXPathPopBoolean') + d like(xmlCint) + d ctxt value like(xmlXPathParserContextPtr) + + d xmlXPathPopNumber... + d pr extproc('xmlXPathPopNumber') + d like(xmlCdouble) + d ctxt value like(xmlXPathParserContextPtr) + + d xmlXPathPopString... + d pr * extproc('xmlXPathPopString') xmlChar * + d ctxt value like(xmlXPathParserContextPtr) + + d xmlXPathPopNodeSet... + d pr extproc('xmlXPathPopNodeSet') + d like(xmlNodeSetPtr) + d ctxt value like(xmlXPathParserContextPtr) + + d xmlXPathPopExternal... + d pr * extproc('xmlXPathPopExternal') void * + d ctxt value like(xmlXPathParserContextPtr) + + * Variable Lookup forwarding. + + d xmlXPathRegisterVariableLookup... + d pr extproc( + d 'xmlXPathRegisterVariableLookup') + d ctxt value like(xmlXPathContextPtr) + d f value + d like(xmlXPathVariableLookupFunc) + d data * value void * + + * Function Lookup forwarding. + + d xmlXPathRegisterFuncLookup... + d pr extproc('xmlXPathRegisterFuncLookup') + d ctxt value like(xmlXPathContextPtr) + d f value like(xmlXPathFuncLookupFunc) + d funcCtxt * value void * + + * Error reporting. + * Note this procedure is renamed in RPG to avoid character case clash with + * data type xmlXPathError. + + d xmlXPathReportError... + d pr extproc('xmlXPatherror') + d ctxt value like(xmlXPathParserContextPtr) + d file * value options(*string) const char * + d line value like(xmlCint) + d no value like(xmlCint) + + d xmlXPathErr pr extproc('xmlXPathErr') + d ctxt value like(xmlXPathParserContextPtr) + d error value like(xmlCint) + + /if defined(LIBXML_DEBUG_ENABLED) + d xmlXPathDebugDumpObject... + d pr extproc('xmlXPathDebugDumpObject') + d output * value FILE * + d cur value like(xmlXPathObjectPtr) + d depth value like(xmlCint) + + d xmlXPathDebugDumpCompExpr... + d pr extproc('xmlXPathDebugDumpCompExpr') + d output * value FILE * + d comp value like(xmlXPathCompExprPtr) + d depth value like(xmlCint) + /endif + + * NodeSet handling. + + d xmlXPathNodeSetContains... + d pr extproc('xmlXPathNodeSetContains') + d like(xmlCint) + d cur value like(xmlNodeSetPtr) + d val value like(xmlNodePtr) + + d xmlXPathDifference... + d pr extproc('xmlXPathDifference') + d like(xmlNodeSetPtr) + d nodes1 value like(xmlNodeSetPtr) + d nodes2 value like(xmlNodeSetPtr) + + d xmlXPathIntersection... + d pr extproc('xmlXPathIntersection') + d like(xmlNodeSetPtr) + d nodes1 value like(xmlNodeSetPtr) + d nodes2 value like(xmlNodeSetPtr) + + d xmlXPathDistinctSorted... + d pr extproc('xmlXPathDistinctSorted') + d like(xmlNodeSetPtr) + d nodes value like(xmlNodeSetPtr) + + d xmlXPathDistinct... + d pr extproc('xmlXPathDistinct') + d like(xmlNodeSetPtr) + d nodes value like(xmlNodeSetPtr) + + d xmlXPathHasSameNodes... + d pr extproc('xmlXPathHasSameNodes') + d like(xmlCint) + d nodes1 value like(xmlNodeSetPtr) + d nodes2 value like(xmlNodeSetPtr) + + d xmlXPathNodeLeadingSorted... + d pr extproc('xmlXPathNodeLeadingSorted') + d like(xmlNodeSetPtr) + d nodes value like(xmlNodeSetPtr) + d node value like(xmlNodePtr) + + d xmlXPathLeadingSorted... + d pr extproc('xmlXPathLeadingSorted') + d like(xmlNodeSetPtr) + d nodes1 value like(xmlNodeSetPtr) + d nodes2 value like(xmlNodeSetPtr) + + d xmlXPathNodeLeading... + d pr extproc('xmlXPathNodeLeading') + d like(xmlNodeSetPtr) + d nodes value like(xmlNodeSetPtr) + d node value like(xmlNodePtr) + + d xmlXPathLeading... + d pr extproc('xmlXPathLeading') + d like(xmlNodeSetPtr) + d nodes1 value like(xmlNodeSetPtr) + d nodes2 value like(xmlNodeSetPtr) + + d xmlXPathNodeTrailingSorted... + d pr extproc('xmlXPathNodeTrailingSorted') + d like(xmlNodeSetPtr) + d nodes value like(xmlNodeSetPtr) + d node value like(xmlNodePtr) + + d xmlXPathTrailingSorted... + d pr extproc('xmlXPathTrailingSorted') + d like(xmlNodeSetPtr) + d nodes1 value like(xmlNodeSetPtr) + d nodes2 value like(xmlNodeSetPtr) + + d xmlXPathNodeTrailing... + d pr extproc('xmlXPathNodeTrailing') + d like(xmlNodeSetPtr) + d nodes value like(xmlNodeSetPtr) + d node value like(xmlNodePtr) + + d xmlXPathTrailing... + d pr extproc('xmlXPathTrailing') + d like(xmlNodeSetPtr) + d nodes1 value like(xmlNodeSetPtr) + d nodes2 value like(xmlNodeSetPtr) + + * Extending a context. + + d xmlXPathRegisterNs... + d pr extproc('xmlXPathRegisterNs') + d like(xmlCint) + d ctxt value like(xmlXPathContextPtr) + d prefix * value options(*string) const xmlChar * + d ns_uri * value options(*string) const xmlChar * + + d xmlXPathNsLookup... + d pr * extproc('xmlXPathNsLookup') const xmlChar * + d ctxt value like(xmlXPathContextPtr) + d prefix * value options(*string) const xmlChar * + + d xmlXPathRegisteredNsCleanup... + d pr extproc( + d 'xmlXPathRegisteredNsCleanup') + d ctxt value like(xmlXPathContextPtr) + + d xmlXPathRegisterFunc... + d pr extproc('xmlXPathRegisterFunc') + d like(xmlCint) + d ctxt value like(xmlXPathContextPtr) + d name * value options(*string) const xmlChar * + d f value like(xmlXPathFunction) + + d xmlXPathRegisterFuncNS... + d pr extproc('xmlXPathRegisterFuncNS') + d like(xmlCint) + d ctxt value like(xmlXPathContextPtr) + d name * value options(*string) const xmlChar * + d ns_uri * value options(*string) const xmlChar * + d f value like(xmlXPathFunction) + + d xmlXPathRegisterVariable... + d pr extproc('xmlXPathRegisterVariable') + d like(xmlCint) + d ctxt value like(xmlXPathContextPtr) + d name * value options(*string) const xmlChar * + d value value like(xmlXPathObjectPtr) + + d xmlXPathRegisterVariableNS... + d pr extproc('xmlXPathRegisterVariableNS') + d like(xmlCint) + d ctxt value like(xmlXPathContextPtr) + d name * value options(*string) const xmlChar * + d ns_uri * value options(*string) const xmlChar * + d value value like(xmlXPathObjectPtr) + + d xmlXPathFunctionLookup... + d pr extproc('xmlXPathFunctionLookup') + d like(xmlXPathFunction) + d ctxt value like(xmlXPathContextPtr) + d name * value options(*string) const xmlChar * + + d xmlXPathFunctionLookupNS... + d pr extproc('xmlXPathFunctionLookupNS') + d like(xmlXPathFunction) + d ctxt value like(xmlXPathContextPtr) + d name * value options(*string) const xmlChar * + d ns_uri * value options(*string) const xmlChar * + + d xmlXPathRegisteredFuncsCleanup... + d pr extproc( + d 'xmlXPathRegisteredFuncsCleanup') + d ctxt value like(xmlXPathContextPtr) + + d xmlXPathVariableLookup... + d pr extproc('xmlXPathVariableLookup') + d like(xmlXPathObjectPtr) + d ctxt value like(xmlXPathContextPtr) + d name * value options(*string) const xmlChar * + + d xmlXPathVariableLookupNS... + d pr extproc('xmlXPathVariableLookupNS') + d like(xmlXPathObjectPtr) + d ctxt value like(xmlXPathContextPtr) + d name * value options(*string) const xmlChar * + d ns_uri * value options(*string) const xmlChar * + + d xmlXPathRegisteredVariablesCleanup... + d pr extproc( + d 'xmlXPathRegisteredVariablesCleanup') + d ctxt value like(xmlXPathContextPtr) + + * Utilities to extend XPath. + + d xmlXPathNewParserContext... + d pr extproc('xmlXPathNewParserContext') + d like(xmlXPathParserContextPtr) + d str * value options(*string) const xmlChar * + d ctxt value like(xmlXPathContextPtr) + + d xmlXPathFreeParserContext... + d pr extproc('xmlXPathFreeParserContext') + d ctxt value like(xmlXPathParserContextPtr) + + + * TODO: remap to xmlXPathValuePop and Push. + + d valuePop pr extproc('valuePop') + d like(xmlXPathObjectPtr) + d ctxt value like(xmlXPathParserContextPtr) + + d valuePush pr extproc('valuePush') + d like(xmlCint) + d ctxt value like(xmlXPathParserContextPtr) + d value value like(xmlXPathObjectPtr) + + d xmlXPathNewString... + d pr extproc('xmlXPathNewString') + d like(xmlXPathObjectPtr) + d val * value options(*string) const xmlChar * + + d xmlXPathNewCString... + d pr extproc('xmlXPathNewCString') + d like(xmlXPathObjectPtr) + d val * value options(*string) const char * + + d xmlXPathWrapString... + d pr extproc('xmlXPathWrapString') + d like(xmlXPathObjectPtr) + d val * value options(*string) xmlChar * + + d xmlXPathWrapCString... + d pr extproc('xmlXPathWrapCString') + d like(xmlXPathObjectPtr) + d val * value options(*string) char * + + d xmlXPathNewFloat... + d pr extproc('xmlXPathNewFloat') + d like(xmlXPathObjectPtr) + d val value like(xmlCdouble) + + d xmlXPathNewBoolean... + d pr extproc('xmlXPathNewBoolean') + d like(xmlXPathObjectPtr) + d val value like(xmlCint) + + d xmlXPathNewNodeSet... + d pr extproc('xmlXPathNewNodeSet') + d like(xmlXPathObjectPtr) + d val value like(xmlNodePtr) + + d xmlXPathNewValueTree... + d pr extproc('xmlXPathNewValueTree') + d like(xmlXPathObjectPtr) + d val value like(xmlNodePtr) + + d xmlXPathNodeSetAdd... + d pr extproc('xmlXPathNodeSetAdd') + d like(xmlCint) + d cur value like(xmlNodeSetPtr) + d val value like(xmlNodePtr) + + d xmlXPathNodeSetAddUnique... + d pr extproc('xmlXPathNodeSetAddUnique') + d like(xmlCint) + d cur value like(xmlNodeSetPtr) + d val value like(xmlNodePtr) + + d xmlXPathNodeSetAddNs... + d pr extproc('xmlXPathNodeSetAddNs') + d like(xmlCint) + d cur value like(xmlNodeSetPtr) + d node value like(xmlNodePtr) + d ns value like(xmlNsPtr) + + d xmlXPathNodeSetSort... + d pr extproc('xmlXPathNodeSetSort') + d set value like(xmlNodeSetPtr) + + d xmlXPathRoot pr extproc('xmlXPathRoot') + d ctxt value like(xmlXPathParserContextPtr) + + d xmlXPathEvalExpr... + d pr extproc('xmlXPathEvalExpr') + d ctxt value like(xmlXPathParserContextPtr) + + d xmlXPathParseName... + d pr * extproc('xmlXPathParseName') xmlChar * + d ctxt value like(xmlXPathParserContextPtr) + + d xmlXPathParseNCName... + d pr * extproc('xmlXPathParseNCName') xmlChar * + d ctxt value like(xmlXPathParserContextPtr) + + * Existing functions. + + d xmlXPathStringEvalNumber... + d pr extproc('xmlXPathStringEvalNumber') + d like(xmlCdouble) + d str * value options(*string) const xmlChar * + + d xmlXPathEvaluatePredicateResult... + d pr extproc( + d 'xmlXPathEvaluatePredicateResult') + d like(xmlCint) + d ctxt value like(xmlXPathParserContextPtr) + d res value like(xmlXPathObjectPtr) + + d xmlXPathRegisterAllFunctions... + d pr extproc( + d 'xmlXPathRegisterAllFunctions') + d ctxt value like(xmlXPathContextPtr) + + d xmlXPathNodeSetMerge... + d pr extproc('xmlXPathNodeSetMerge') + d like(xmlNodeSetPtr) + d val1 value like(xmlNodeSetPtr) + d val2 value like(xmlNodeSetPtr) + + d xmlXPathNodeSetDel... + d pr extproc('xmlXPathNodeSetDel') + d cur value like(xmlNodeSetPtr) + d val value like(xmlNodePtr) + + d xmlXPathNodeSetRemove... + d pr extproc('xmlXPathNodeSetRemove') + d cur value like(xmlNodeSetPtr) + d val value like(xmlCint) + + d xmlXPathNewNodeSetList... + d pr extproc('xmlXPathNewNodeSetList') + d like(xmlXPathObjectPtr) + d val value like(xmlNodeSetPtr) + + d xmlXPathWrapNodeSet... + d pr extproc('xmlXPathWrapNodeSet') + d like(xmlXPathObjectPtr) + d val value like(xmlNodeSetPtr) + + d xmlXPathWrapExternal... + d pr extproc('xmlXPathWrapExternal') + d like(xmlXPathObjectPtr) + d val * value void * + + d xmlXPathEqualValues... + d pr extproc('xmlXPathEqualValues') + d like(xmlCint) + d ctxt value like(xmlXPathParserContextPtr) + + d xmlXPathNotEqualValues... + d pr extproc('xmlXPathNotEqualValues') + d like(xmlCint) + d ctxt value like(xmlXPathParserContextPtr) + + d xmlXPathCompareValues... + d pr extproc('xmlXPathCompareValues') + d like(xmlCint) + d ctxt value like(xmlXPathParserContextPtr) + d inf value like(xmlCint) + d strict value like(xmlCint) + + d xmlXPathValueFlipSign... + d pr extproc('xmlXPathValueFlipSign') + d ctxt value like(xmlXPathParserContextPtr) + + d xmlXPathAddValues... + d pr extproc('xmlXPathAddValues') + d ctxt value like(xmlXPathParserContextPtr) + + d xmlXPathSubValues... + d pr extproc('xmlXPathSubValues') + d ctxt value like(xmlXPathParserContextPtr) + + d xmlXPathMultValues... + d pr extproc('xmlXPathMultValues') + d ctxt value like(xmlXPathParserContextPtr) + + d xmlXPathDivValues... + d pr extproc('xmlXPathDivValues') + d ctxt value like(xmlXPathParserContextPtr) + + d xmlXPathModValues... + d pr extproc('xmlXPathModValues') + d ctxt value like(xmlXPathParserContextPtr) + + d xmlXPathIsNodeType... + d pr extproc('xmlXPathIsNodeType') + d like(xmlCint) + d name * value options(*string) const xmlChar * + + * Some of the axis navigation routines. + + d xmlXPathNextSelf... + d pr extproc('xmlXPathNextSelf') + d like(xmlNodePtr) + d ctxt value like(xmlXPathParserContextPtr) + d cur value like(xmlNodePtr) + + d xmlXPathNextChild... + d pr extproc('xmlXPathNextChild') + d like(xmlNodePtr) + d ctxt value like(xmlXPathParserContextPtr) + d cur value like(xmlNodePtr) + + d xmlXPathNextDescendant... + d pr extproc('xmlXPathNextDescendant') + d like(xmlNodePtr) + d ctxt value like(xmlXPathParserContextPtr) + d cur value like(xmlNodePtr) + + d xmlXPathNextDescendantOrSelf... + d pr extproc( + d 'xmlXPathNextDescendantOrSelf') + d like(xmlNodePtr) + d ctxt value like(xmlXPathParserContextPtr) + d cur value like(xmlNodePtr) + + d xmlXPathNextParent... + d pr extproc('xmlXPathNextParent') + d like(xmlNodePtr) + d ctxt value like(xmlXPathParserContextPtr) + d cur value like(xmlNodePtr) + + d xmlXPathNextAncestorOrSelf... + d pr extproc('xmlXPathNextAncestorOrSelf') + d like(xmlNodePtr) + d ctxt value like(xmlXPathParserContextPtr) + d cur value like(xmlNodePtr) + + d xmlXPathNextFollowingSibling... + d pr extproc( + d 'xmlXPathNextFollowingSibling') + d like(xmlNodePtr) + d ctxt value like(xmlXPathParserContextPtr) + d cur value like(xmlNodePtr) + + d xmlXPathNextFollowing... + d pr extproc('xmlXPathNextFollowing') + d like(xmlNodePtr) + d ctxt value like(xmlXPathParserContextPtr) + d cur value like(xmlNodePtr) + + d xmlXPathNextNamespace... + d pr extproc('xmlXPathNextNamespace') + d like(xmlNodePtr) + d ctxt value like(xmlXPathParserContextPtr) + d cur value like(xmlNodePtr) + + d xmlXPathNextAttribute... + d pr extproc('xmlXPathNextAttribute') + d like(xmlNodePtr) + d ctxt value like(xmlXPathParserContextPtr) + d cur value like(xmlNodePtr) + + d xmlXPathNextPreceding... + d pr extproc('xmlXPathNextPreceding') + d like(xmlNodePtr) + d ctxt value like(xmlXPathParserContextPtr) + d cur value like(xmlNodePtr) + + d xmlXPathNextAncestor... + d pr extproc('xmlXPathNextAncestor') + d like(xmlNodePtr) + d ctxt value like(xmlXPathParserContextPtr) + d cur value like(xmlNodePtr) + + d xmlXPathNextPrecedingSibling... + d pr extproc( + d 'xmlXPathNextPrecedingSibling') + d like(xmlNodePtr) + d ctxt value like(xmlXPathParserContextPtr) + d cur value like(xmlNodePtr) + + * The official core of XPath functions. + + d xmlXPathLastFunction... + d pr extproc('xmlXPathLastFunction') + d ctxt value like(xmlXPathParserContextPtr) + d nargs value like(xmlCint) + + d xmlXPathPositionFunction... + d pr extproc('xmlXPathPositionFunction') + d ctxt value like(xmlXPathParserContextPtr) + d nargs value like(xmlCint) + + d xmlXPathCountFunction... + d pr extproc('xmlXPathCountFunction') + d ctxt value like(xmlXPathParserContextPtr) + d nargs value like(xmlCint) + + d xmlXPathIdFunction... + d pr extproc('xmlXPathIdFunction') + d ctxt value like(xmlXPathParserContextPtr) + d nargs value like(xmlCint) + + d xmlXPathLocalNameFunction... + d pr extproc('xmlXPathLocalNameFunction') + d ctxt value like(xmlXPathParserContextPtr) + d nargs value like(xmlCint) + + d xmlXPathNamespaceURIFunction... + d pr extproc( + d 'xmlXPathNamespaceURIFunction') + d ctxt value like(xmlXPathParserContextPtr) + d nargs value like(xmlCint) + + d xmlXPathStringFunction... + d pr extproc('xmlXPathStringFunction') + d ctxt value like(xmlXPathParserContextPtr) + d nargs value like(xmlCint) + + d xmlXPathStringLengthFunction... + d pr extproc( + d 'xmlXPathStringLengthFunction') + d ctxt value like(xmlXPathParserContextPtr) + d nargs value like(xmlCint) + + d xmlXPathConcatFunction... + d pr extproc('xmlXPathConcatFunction') + d ctxt value like(xmlXPathParserContextPtr) + d nargs value like(xmlCint) + + d xmlXPathContainsFunction... + d pr extproc('xmlXPathContainsFunction') + d ctxt value like(xmlXPathParserContextPtr) + d nargs value like(xmlCint) + + d xmlXPathStartsWithFunction... + d pr extproc('xmlXPathStartsWithFunction') + d ctxt value like(xmlXPathParserContextPtr) + d nargs value like(xmlCint) + + d xmlXPathSubstringFunction... + d pr extproc('xmlXPathSubstringFunction') + d ctxt value like(xmlXPathParserContextPtr) + d nargs value like(xmlCint) + + d xmlXPathSubstringBeforeFunction... + d pr extproc( + d 'xmlXPathSubstringBeforeFunction') + d ctxt value like(xmlXPathParserContextPtr) + d nargs value like(xmlCint) + + d xmlXPathSubstringAfterFunction... + d pr extproc( + d 'xmlXPathSubstringAfterFunction') + d ctxt value like(xmlXPathParserContextPtr) + d nargs value like(xmlCint) + + + d xmlXPathNormalizeFunction... + d pr extproc('xmlXPathNormalizeFunction') + d ctxt value like(xmlXPathParserContextPtr) + d nargs value like(xmlCint) + + d xmlXPathTranslateFunction... + d pr extproc('xmlXPathTranslateFunction') + d ctxt value like(xmlXPathParserContextPtr) + d nargs value like(xmlCint) + + d xmlXPathNotFunction... + d pr extproc('xmlXPathNotFunction') + d ctxt value like(xmlXPathParserContextPtr) + d nargs value like(xmlCint) + + d xmlXPathTrueFunction... + d pr extproc('xmlXPathTrueFunction') + d ctxt value like(xmlXPathParserContextPtr) + d nargs value like(xmlCint) + + d xmlXPathFalseFunction... + d pr extproc('xmlXPathFalseFunction') + d ctxt value like(xmlXPathParserContextPtr) + d nargs value like(xmlCint) + + d xmlXPathLangFunction... + d pr extproc('xmlXPathLangFunction') + d ctxt value like(xmlXPathParserContextPtr) + d nargs value like(xmlCint) + + d xmlXPathNumberFunction... + d pr extproc('xmlXPathNumberFunction') + d ctxt value like(xmlXPathParserContextPtr) + d nargs value like(xmlCint) + + d xmlXPathSumFunction... + d pr extproc('xmlXPathSumFunction') + d ctxt value like(xmlXPathParserContextPtr) + d nargs value like(xmlCint) + + d xmlXPathFloorFunction... + d pr extproc('xmlXPathFloorFunction') + d ctxt value like(xmlXPathParserContextPtr) + d nargs value like(xmlCint) + + d xmlXPathCeilingFunction... + d pr extproc('xmlXPathCeilingFunction') + d ctxt value like(xmlXPathParserContextPtr) + d nargs value like(xmlCint) + + d xmlXPathRoundFunction... + d pr extproc('xmlXPathRoundFunction') + d ctxt value like(xmlXPathParserContextPtr) + d nargs value like(xmlCint) + + d xmlXPathBooleanFunction... + d pr extproc('xmlXPathBooleanFunction') + d ctxt value like(xmlXPathParserContextPtr) + d nargs value like(xmlCint) + + * Really internal functions + + d xmlXPathNodeSetFreeNs... + d pr extproc('xmlXPathNodeSetFreeNs') + d ns value like(xmlNsPtr) + + /endif LIBXML_XPATH_ENABLED + /endif XPATH_INTERNALS_H__ diff --git a/os400/libxmlrpg/xpointer.rpgle b/os400/libxmlrpg/xpointer.rpgle new file mode 100644 index 0000000..29ef0f3 --- /dev/null +++ b/os400/libxmlrpg/xpointer.rpgle @@ -0,0 +1,158 @@ + * Summary: API to handle XML Pointers + * Description: API to handle XML Pointers + * Base implementation was made accordingly to + * W3C Candidate Recommendation 7 June 2000 + * http://www.w3.org/TR/2000/CR-xptr-20000607 + * + * Added support for the element() scheme described in: + * W3C Proposed Recommendation 13 November 2002 + * http://www.w3.org/TR/2002/PR-xptr-element-20021113/ + * + * Copy: See Copyright for the status of this software. + * + * Author: Patrick Monnerat , DATASPHERE S.A. + + /if not defined(XML_XPTR_H__) + /define XML_XPTR_H__ + + /include "libxmlrpg/xmlversion" + + /if defined(LIBXML_XPTR_ENABLED) + + /include "libxmlrpg/xmlTypesC" + /include "libxmlrpg/tree" + /include "libxmlrpg/xpath" + + * A Location Set + + d xmlLocationSetPtr... + d s * based(######typedef######) + + d xmlLocationSet ds based(xmlLocationSetPtr) + d align qualified + d locNr like(xmlCint) # locations in set + d locMax like(xmlCint) Max locations in set + d locTab * xmlXPathObjectPtr * + + * Handling of location sets. + + d xmlXPtrLocationSetCreate... + d pr extproc('xmlXPtrLocationSetCreate') + d like(xmlLocationSetPtr) + d val value like(xmlXPathObjectPtr) + + d xmlXPtrFreeLocationSet... + d pr extproc('xmlXPtrFreeLocationSet') + d obj value like(xmlLocationSetPtr) + + d xmlXPtrLocationSetMerge... + d pr extproc('xmlXPtrLocationSetMerge') + d like(xmlLocationSetPtr) + d val1 value like(xmlLocationSetPtr) + d val2 value like(xmlLocationSetPtr) + + d xmlXPtrNewRange... + d pr extproc('xmlXPtrNewRange') + d like(xmlXPathObjectPtr) + d start value like(xmlNodePtr) + d startindex value like(xmlCint) + d end value like(xmlNodePtr) + d endindex value like(xmlCint) + + d xmlXPtrNewRangePoints... + d pr extproc('xmlXPtrNewRangePoints') + d like(xmlXPathObjectPtr) + d start value like(xmlXPathObjectPtr) + d end value like(xmlXPathObjectPtr) + + d xmlXPtrNewRangeNodePoint... + d pr extproc('xmlXPtrNewRangeNodePoint') + d like(xmlXPathObjectPtr) + d start value like(xmlNodePtr) + d end value like(xmlXPathObjectPtr) + + d xmlXPtrNewRangePointNode... + d pr extproc('xmlXPtrNewRangePointNode') + d like(xmlXPathObjectPtr) + d start value like(xmlXPathObjectPtr) + d end value like(xmlNodePtr) + + d xmlXPtrNewRangeNodes... + d pr extproc('xmlXPtrNewRangeNodes') + d like(xmlXPathObjectPtr) + d start value like(xmlNodePtr) + d end value like(xmlNodePtr) + + d xmlXPtrNewLocationSetNodes... + d pr extproc('xmlXPtrNewLocationSetNodes') + d like(xmlXPathObjectPtr) + d start value like(xmlNodePtr) + d end value like(xmlNodePtr) + + d xmlXPtrNewLocationSetNodeSet... + d pr extproc( + d 'xmlXPtrNewLocationSetNodeSet') + d like(xmlXPathObjectPtr) + d set value like(xmlNodeSetPtr) + + d xmlXPtrNewRangeNodeObject... + d pr extproc('xmlXPtrNewRangeNodeObject') + d like(xmlXPathObjectPtr) + d start value like(xmlNodePtr) + d end value like(xmlXPathObjectPtr) + + d xmlXPtrNewCollapsedRange... + d pr extproc('xmlXPtrNewCollapsedRange') + d like(xmlXPathObjectPtr) + d start value like(xmlNodePtr) + + d xmlXPtrLocationSetAdd... + d pr extproc('xmlXPtrLocationSetAdd') + d cur value like(xmlLocationSetPtr) + d val value like(xmlXPathObjectPtr) + + d xmlXPtrWrapLocationSet... + d pr extproc('xmlXPtrWrapLocationSet') + d like(xmlXPathObjectPtr) + d val value like(xmlLocationSetPtr) + + d xmlXPtrLocationSetDel... + d pr extproc('xmlXPtrLocationSetDel') + d cur value like(xmlLocationSetPtr) + d val value like(xmlXPathObjectPtr) + + d xmlXPtrLocationSetRemove... + d pr extproc('xmlXPtrLocationSetRemove') + d cur value like(xmlLocationSetPtr) + d val value like(xmlCint) + + * Functions. + + d xmlXPtrNewContext... + d pr extproc('xmlXPtrNewContext') + d like(xmlXPathContextPtr) + d doc value like(xmlDocPtr) + d here value like(xmlNodePtr) + d origin value like(xmlNodePtr) + + d xmlXPtrEval pr extproc('xmlXPtrEval') + d like(xmlXPathObjectPtr) + d str * value options(*string) const xmlChar * + d ctx value like(xmlXPathContextPtr) + + d xmlXPtrRangeToFunction... + d pr extproc('xmlXPtrRangeToFunction') + d ctxt value like(xmlXPathParserContextPtr) + d nargs value like(xmlCint) + + d xmlXPtrBuildNodeList... + d pr extproc('xmlXPtrBuildNodeList') + d like(xmlNodePtr) + d obj value like(xmlXPathObjectPtr) + + d xmlXPtrEvalRangePredicate... + d pr extproc('xmlXPtrEvalRangePredicate') + d ctxt value like(xmlXPathParserContextPtr) + + /endif LIBXML_XPTR_ENABLED + /endif XML_XPTR_H__ diff --git a/os400/make-bldcsndfa.sh b/os400/make-bldcsndfa.sh new file mode 100644 index 0000000..57cf012 --- /dev/null +++ b/os400/make-bldcsndfa.sh @@ -0,0 +1,43 @@ +#!/bin/sh +# +# Compilation script for the iconv names DFA builer. +# +# See Copyright for the status of this software. +# +# Author: Patrick Monnerat , DATASPHERE S.A. +# + +SCRIPTDIR=`dirname "${0}"` +. "${SCRIPTDIR}/initscript.sh" +cd "${TOPDIR}/os400/iconv/bldcsndfa" + + +# This is for old XML library (bootstrapping). +#rm -rf xml.h xml +#ln -s /QSYS.LIB/XML.LIB/H.FILE/XML.MBR xml.h +#mkdir xml +#mkdir xml/h +#ln -s /QSYS.LIB/XML.LIB/H.FILE/UTF8.MBR xml/h/utf8 + + +# Compile. + +CMD="CRTCMOD MODULE(${TARGETLIB}/BLDCSNDFA) SRCSTMF('bldcsndfa.c')" +CMD="${CMD} SYSIFCOPT(*IFS64IO) LANGLVL(*EXTENDED) LOCALETYPE(*LOCALE)" +CMD="${CMD} INCDIR(" +CMD="${CMD} '${IFSDIR}/include' ${INCLUDES})" +CMD="${CMD} TGTCCSID(${TGTCCSID}) TGTRLS(${TGTRLS})" +CMD="${CMD} OUTPUT(${OUTPUT})" +CMD="${CMD} OPTIMIZE(10)" +CMD="${CMD} DBGVIEW(${DEBUG})" +#CMD="${CMD} DEFINE('OLDXML' 'xmlXPathSetContextNode=xmlXPathSetCurrentNode')" + +system "${CMD}" + +# Link + +CMD="CRTPGM PGM(${TARGETLIB}/BLDCSNDFA) MODULE(${TARGETLIB}/BLDCSNDFA)" +CMD="${CMD} BNDDIR(${TARGETLIB}/${DYNBNDDIR})" +#CMD="${CMD} BNDDIR(XML/XML)" +CMD="${CMD} TGTRLS(${TGTRLS})" +system "${CMD}" diff --git a/os400/make-include.sh b/os400/make-include.sh new file mode 100644 index 0000000..4e5b058 --- /dev/null +++ b/os400/make-include.sh @@ -0,0 +1,81 @@ +#!/bin/sh +# +# Installation of the C header files in the OS/400 library. +# +# See Copyright for the status of this software. +# +# Author: Patrick Monnerat , DATASPHERE S.A. +# + +SCRIPTDIR=`dirname "${0}"` +. "${SCRIPTDIR}/initscript.sh" +cd "${TOPDIR}/include" + + +# Create the OS/400 source program file for the C header files. + +SRCPF="${LIBIFSNAME}/LIBXML.FILE" + +if action_needed "${SRCPF}" +then CMD="CRTSRCPF FILE(${TARGETLIB}/LIBXML) RCDLEN(112)" + CMD="${CMD} CCSID(${TGTCCSID}) TEXT('libxml2: C/C++ header files')" + system "${CMD}" +fi + + +# Create the IFS directory for the C header files. + +if action_needed "${IFSDIR}/include/libxml" +then mkdir -p "${IFSDIR}/include/libxml" +fi + + + +# Enumeration values may be used as va_arg tagfields, so they MUST be +# integers. + +copy_hfile() + +{ + sed -e '1i\ +#pragma enum(int)\ +' "${@}" -e '$a\ +#pragma enum(pop)\ +' +} + +# Copy the header files to DB2 library. Link from IFS include directory. + +for HFILE in "${TOPDIR}/os400/transcode.h" libxml/*.h libxml/*.h.in +do CMD="cat \"${HFILE}\"" + DEST="${SRCPF}/`db2_name \"${HFILE}\" nomangle`.MBR" + + case "`basename \"${HFILE}\"`" in + + xmlwin32version.h*) + continue;; # Not on M$W ! + + *.in) CMD="${CMD} | versioned_copy";; + + xmlschemastypes.h) # Special case: rename colliding file. + DEST="${SRCPF}/SCHMTYPES.MBR";; + + esac + + if action_needed "${DEST}" "${HFILE}" + then eval "${CMD}" | copy_hfile > tmphdrfile + + # Need to translate to target CCSID. + + CMD="CPY OBJ('`pwd`/tmphdrfile') TOOBJ('${DEST}')" + CMD="${CMD} TOCCSID(${TGTCCSID}) DTAFMT(*TEXT) REPLACE(*YES)" + system "${CMD}" + fi + + IFSFILE="${IFSDIR}/include/libxml/`basename \"${HFILE}\" .in`" + + if action_needed "${IFSFILE}" "${DEST}" + then rm -f "${IFSFILE}" + ln -s "${DEST}" "${IFSFILE}" + fi +done diff --git a/os400/make-rpg.sh b/os400/make-rpg.sh new file mode 100644 index 0000000..664b47b --- /dev/null +++ b/os400/make-rpg.sh @@ -0,0 +1,100 @@ +#!/bin/sh +# +# Installation of the ILE/RPG header files in the OS/400 library. +# +# See Copyright for the status of this software. +# +# Author: Patrick Monnerat , DATASPHERE S.A. +# + +SCRIPTDIR=`dirname "${0}"` +. "${SCRIPTDIR}/initscript.sh" +cd "${TOPDIR}/os400/libxmlrpg" + + +# Create the OS/400 source program file for the ILE/RPG header files. + +SRCPF="${LIBIFSNAME}/LIBXMLRPG.FILE" + +if action_needed "${SRCPF}" +then CMD="CRTSRCPF FILE(${TARGETLIB}/LIBXMLRPG) RCDLEN(112)" + CMD="${CMD} CCSID(${TGTCCSID}) TEXT('libxml2: ILE/RPG header files')" + system "${CMD}" +fi + + +# Map file names to DB2 name syntax. + +for HFILE in *.rpgle *.rpgle.in +do NAME="`basename \"${HFILE}\" .in`" + VAR="`basename \"${NAME}\" .rpgle`" + VAL="`db2_name \"${NAME}\" nomangle`" + + if [ "${VAR}" = 'xmlschemastypes' ] + then VAL=SCHMTYPES + fi + + eval "VAR_${VAR}=\"${VAL}\"" + echo "${VAR} s/${VAR}/${VAL}/g" +done > tmpsubstfile1 + +# Order substitution commands so that a prefix appears after all +# file names beginning with the prefix. + +sort -r tmpsubstfile1 | sed 's/^[^ ]*[ ]*//' > tmpsubstfile2 + + +change_include() + +{ + sed -e '\#^....../include *"libxmlrpg/#{' \ + -e 's///' \ + -e 's/".*//' \ + -f tmpsubstfile2 \ + -e 's#.*# /include libxmlrpg,&#' \ + -e '}' +} + + +# Create the IFS directory for the ILE/RPG header files. + +RPGIFSDIR="${IFSDIR}/include/libxmlrpg" + +if action_needed "${RPGIFSDIR}" +then mkdir -p "${RPGIFSDIR}" +fi + +# Copy the header files to IFS ILE/RPG include directory. +# Copy them with include path editing to the DB2 library. + +for HFILE in *.rpgle *.rpgle.in +do IFSCMD="cat \"${HFILE}\"" + DB2CMD="change_include < \"${HFILE}\"" + IFSFILE="`basename \"${HFILE}\" .in`" + + case "${HFILE}" in + + *.in) IFSCMD="${IFSCMD} | versioned_copy" + DB2CMD="${DB2CMD} | versioned_copy" + ;; + esac + + IFSDEST="${RPGIFSDIR}/${IFSFILE}" + + if action_needed "${IFSDEST}" "${HFILE}" + then eval "${IFSCMD}" > "${IFSDEST}" + fi + + eval DB2MBR="\"\${VAR_`basename \"${IFSDEST}\" .rpgle`}\"" + DB2DEST="${SRCPF}/${DB2MBR}.MBR" + + if action_needed "${DB2DEST}" "${HFILE}" + then eval "${DB2CMD}" | change_include > tmphdrfile + + # Need to translate to target CCSID. + + CMD="CPY OBJ('`pwd`/tmphdrfile') TOOBJ('${DB2DEST}')" + CMD="${CMD} TOCCSID(${TGTCCSID}) DTAFMT(*TEXT) REPLACE(*YES)" + system "${CMD}" + fi +done diff --git a/os400/make-src.sh b/os400/make-src.sh new file mode 100644 index 0000000..6094de8 --- /dev/null +++ b/os400/make-src.sh @@ -0,0 +1,355 @@ +#!/bin/sh +# +# libxml compilation script for the OS/400. +# +# See Copyright for the status of this software. +# +# Author: Patrick Monnerat , DATASPHERE S.A. +# + +SCRIPTDIR=`dirname "${0}"` +. "${SCRIPTDIR}/initscript.sh" +cd "${TOPDIR}" + + +# Create and compile the identification source file. + +echo '#pragma comment(user, "libxml2 version '"${LIBXML_VERSION}"'")' > os400.c +echo '#pragma comment(user, __DATE__)' >> os400.c +echo '#pragma comment(user, __TIME__)' >> os400.c +echo '#pragma comment(copyright, "Copyright (C) 1998-2015 Daniel Veillard. OS/400 version by P. Monnerat.")' >> os400.c +make_module OS400 os400.c +LINK= # No need to rebuild service program yet. +MODULES= + + +# Get source list. + +foldlines() + +{ + sed -e ':begin' \ + -e '/\\$/{' \ + -e 's/\\$/ /' \ + -e 'N' \ + -e 'bbegin' \ + -e '}' \ + -e 's/\n//g' \ + -e 's/[[:space:]]*$//' +} + + +get_make_var() + +{ + foldlines < Makefile.am | + sed -e "/^${1}[[:space:]]*=[[:space:]]*/{" \ + -e 's///' \ + -e 'q' \ + -e '}' \ + -e 'd' +} + + +docb_sources=`get_make_var docb_sources` +trio_sources=`get_make_var trio_sources` +CSOURCES=`eval echo "\`get_make_var libxml2_la_SOURCES | tr '()' '{}'\`"` + + +# Compile the sources into modules. + +INCLUDES="'`pwd`'" + +# OS/400 specific modules first. + +make_module --ebcdic DLFCN "${SCRIPTDIR}/dlfcn/dlfcn.c" +make_module --ebcdic ICONV "${SCRIPTDIR}/iconv/iconv.c" +make_module --ebcdic WRAPPERS "${SCRIPTDIR}/wrappers.c" +make_module TRANSCODE "${SCRIPTDIR}/transcode.c" +make_module RPGSUPPORT "${SCRIPTDIR}/rpgsupport.c" + +# Regular libxml2 modules. + +for SRC in ${CSOURCES} +do MODULE=`db2_name "${SRC}"` + make_module "${MODULE}" "${SRC}" +done + + +# If needed, (re)create the static binding directory. + +if action_needed "${LIBIFSNAME}/${STATBNDDIR}.BNDDIR" +then LINK=YES +fi + +if [ "${LINK}" ] +then rm -rf "${LIBIFSNAME}/${STATBNDDIR}.BNDDIR" + CMD="CRTBNDDIR BNDDIR(${TARGETLIB}/${STATBNDDIR})" + CMD="${CMD} TEXT('libxml2 static binding directory')" + system "${CMD}" + + for MODULE in ${MODULES} + do CMD="ADDBNDDIRE BNDDIR(${TARGETLIB}/${STATBNDDIR})" + CMD="${CMD} OBJ((${TARGETLIB}/${MODULE} *MODULE))" + system "${CMD}" + done +fi + + +# The exportation file for service program creation must be in a DB2 +# source file, so make sure it exists. + +if action_needed "${LIBIFSNAME}/TOOLS.FILE" +then CMD="CRTSRCPF FILE(${TARGETLIB}/TOOLS) RCDLEN(112)" + CMD="${CMD} CCSID(${TGTCCSID}) TEXT('libxml2: build tools')" + system "${CMD}" +fi + + +# Generate all exported symbol table versions in a binding source file. + +BSF="${LIBIFSNAME}/TOOLS.FILE/BNDSRC.MBR" +PGMEXPS= + +OS400SYMS=`cat os400/transcode.h os400/rpgsupport.h | + sed -e 'H' \ + -e 'g' \ + -e 's/\n/ /' \ + -e 's/\\$/ /' \ + -e 's/.*/& /' \ + -e 's/\/\*.*\*\// /g' \ + -e 'h' \ + -e ':loop' \ + -e 'g' \ + -e '/\/\*/d' \ + -e '/;/!d' \ + -e 's/[^;]*;//' \ + -e 'x' \ + -e 's/[[:space:]]*;.*$//' \ + -e '/XMLPUBFUN/{' \ + -e 's/[[:space:]]*(.*$//' \ + -e 's/.*[[:space:]*]//' \ + -e 'p' \ + -e 'bloop' \ + -e '}' \ + -e '/XMLPUBVAR/!bloop' \ + -e ':loop2' \ + -e '/\[[^][]*\]/{' \ + -e 's///' \ + -e 'bloop2' \ + -e '}' \ + -e 's/[[:space:]]*,[[:space:]]*/,/g' \ + -e 's/[^,]*[[:space:]*]//' \ + -e 's/[^[:alnum:]_,]//g' \ + -e 's/,/\n/g' \ + -e 'p' \ + -e 'bloop'` + +sed -e 's/#.*//' \ + -e 's/[[:space:]]*$//' \ + -e 's/^[[:space:]]*//' \ + -e '/^*global:$/d' \ + -e '/^$/d' \ + -e '/[[:space:]]*{$/{' \ + -e 's///' \ + -e 'h' \ + -e 's/[^A-Za-z0-9]/_/g' \ + -e 's/^[0-9]/_&/' \ + -e 'x' \ + -e 'G' \ + -e 's/\(.*\)\n\(.*\)/\2_SIGNATURE="\1"/' \ + -e 'p' \ + -e 's/.*//' \ + -e 'x' \ + -e "s/.*/SONAME='&'/" \ + -e 'b' \ + -e '}' \ + -e '/[[:space:]]*;$/!d' \ + -e 's///' \ + -e '/^xmlDllMain$/d' \ + -e '/^}[[:space:]]*/!{' \ + -e 'H' \ + -e 'd' \ + -e '}' \ + -e 's///' \ + -e '/^$/!{' \ + -e 's/[^A-Za-z0-9]/_/g' \ + -e 's/^[0-9]/_&/' \ + -e 's/.*/${&}/' \ + -e 'x' \ + -e 'H' \ + -e 's/.*//' \ + -e '}' \ + -e 'x' \ + -e 's/\n/ /g' \ + -e 's/^[[:space:]]*//' \ + -e 's/.*/declare ${SONAME}="&"/' \ + -e 's/.*/&; PGMEXPS="${SONAME} ${PGMEXPS}"/' \ + < "${TOPDIR}/libxml2.syms" > bndvars +. ./bndvars + +PGMLVL=CURRENT +for PGMEXP in ${PGMEXPS} +do SIGNATURE=`echo "${PGMEXP}" | sed 's/^LIBXML2_//'` + eval ENTRIES=\"\${${PGMEXP}}\" + echo " STRPGMEXP PGMLVL(*${PGMLVL}) SIGNATURE('${SIGNATURE}')" + for ENTRY in ${ENTRIES} ${OS400SYMS} + do echo " EXPORT SYMBOL('${ENTRY}')" + done + echo ' ENDPGMEXP' + PGMLVL=PRV +done > "${BSF}" + + +# Build the service program if needed. + +if action_needed "${LIBIFSNAME}/${SRVPGM}.SRVPGM" +then LINK=YES +fi + +if [ "${LINK}" ] +then CMD="CRTSRVPGM SRVPGM(${TARGETLIB}/${SRVPGM})" + CMD="${CMD} SRCFILE(${TARGETLIB}/TOOLS) SRCMBR(BNDSRC)" + CMD="${CMD} MODULE(${TARGETLIB}/OS400)" + CMD="${CMD} BNDDIR((${TARGETLIB}/${STATBNDDIR})" + if [ "${WITH_ZLIB}" -ne 0 ] + then CMD="${CMD} (${ZLIB_LIB}/${ZLIB_BNDDIR})" + fi + CMD="${CMD})" + CMD="${CMD} BNDSRVPGM(QADRTTS)" + CMD="${CMD} TEXT('libxml2 dynamic library')" + CMD="${CMD} TGTRLS(${TGTRLS})" + system "${CMD}" + LINK=YES +fi + + +# If needed, (re)create the dynamic binding directory. + +if action_needed "${LIBIFSNAME}/${DYNBNDDIR}.BNDDIR" +then LINK=YES +fi + +if [ "${LINK}" ] +then rm -rf "${LIBIFSNAME}/${DYNBNDDIR}.BNDDIR" + CMD="CRTBNDDIR BNDDIR(${TARGETLIB}/${DYNBNDDIR})" + CMD="${CMD} TEXT('libxml2 dynamic binding directory')" + system "${CMD}" + CMD="ADDBNDDIRE BNDDIR(${TARGETLIB}/${DYNBNDDIR})" + CMD="${CMD} OBJ((*LIBL/${SRVPGM} *SRVPGM))" + system "${CMD}" +fi + + +# Compile the ASCII main() stub. + +make_module --ebcdic --sysiconv LIBXMLMAIN "${SCRIPTDIR}/libxmlmain.c" + + +# Compile and link program xmllint. + +if action_needed "${LIBIFSNAME}/XMLLINT.PGM" "xmllint.c" || + action_needed "${LIBIFSNAME}/XMLLINT.PGM" "${LIBIFSNAME}/${SRVPGM}.SRVPGM" || + action_needed "${LIBIFSNAME}/XMLLINT.PGM" "${LIBIFSNAME}/LIBXMLMAIN.MODULE" +then make_module XMLLINT xmllint.c + CMD="CRTPGM PGM(${TARGETLIB}/XMLLINT) MODULE(${TARGETLIB}/XMLLINT)" + CMD="${CMD} ENTMOD(${TARGETLIB}/LIBXMLMAIN)" + CMD="${CMD} BNDSRVPGM(QADRTTS) BNDDIR((${TARGETLIB}/${STATBNDDIR})" + if [ "${WITH_ZLIB}" -ne 0 ] + then CMD="${CMD} (${ZLIB_LIB}/${ZLIB_BNDDIR})" + fi + CMD="${CMD}) ACTGRP(*NEW) TEXT('XML tool')" + CMD="${CMD} TGTRLS(${TGTRLS})" + system "${CMD}" + rm -f "${LIBIFSNAME}/XMLLINT.MODULE" +fi + +# Install xmllint in IFS. + +if [ ! -d "${IFSDIR}/bin" ] +then mkdir -p "${IFSDIR}/bin" +fi +rm -f "${IFSDIR}/bin/xmllint" +ln -s "${LIBIFSNAME}/XMLLINT.PGM" "${IFSDIR}/bin/xmllint" + +# Prepare the XMLLINT command and its response program. + +if action_needed "${LIBIFSNAME}/XMLLINTCL.PGM" "${SCRIPTDIR}/xmllintcl.c" +then make_module --ebcdic XMLLINTCL "${SCRIPTDIR}/xmllintcl.c" + CMD="CRTPGM PGM(${TARGETLIB}/XMLLINTCL) MODULE(${TARGETLIB}/XMLLINTCL)" + CMD="${CMD} ACTGRP(*NEW) TEXT('XMLLINT command response')" + CMD="${CMD} TGTRLS(${TGTRLS})" + system "${CMD}" + rm -f "${LIBIFSNAME}/XMLLINTCL.MODULE" +fi + +if action_needed "${LIBIFSNAME}/TOOLS.FILE/XMLLINT.MBR" \ + "${SCRIPTDIR}/xmllint.cmd" +then CMD="CPY OBJ('${SCRIPTDIR}/xmllint.cmd')" + CMD="${CMD} TOOBJ('${LIBIFSNAME}/TOOLS.FILE/XMLLINT.MBR')" + CMD="${CMD} TOCCSID(${TGTCCSID}) DTAFMT(*TEXT) REPLACE(*YES)" + system "${CMD}" +fi + +if action_needed "${LIBIFSNAME}/XMLLINT.CMD" \ + "${LIBIFSNAME}/TOOLS.FILE/XMLLINT.MBR" +then CMD="CRTCMD CMD(${TARGETLIB}/XMLLINT) PGM(${TARGETLIB}/XMLLINTCL)" + CMD="${CMD} SRCFILE(${TARGETLIB}/TOOLS) SRCMBR(XMLLINT) THDSAFE(*YES)" + CMD="${CMD} TEXT('XML tool') REPLACE(*YES)" + system "${CMD}" +fi + + +# Compile and link program xmlcatalog. + +if action_needed "${LIBIFSNAME}/XMLCATALOG.PGM" "xmlcatalog.c" || + action_needed "${LIBIFSNAME}/XMLCATALOG.PGM" \ + "${LIBIFSNAME}/${SRVPGM}.SRVPGM" || + action_needed "${LIBIFSNAME}/XMLCATALOG.PGM" \ + "${LIBIFSNAME}/LIBXMLMAIN.MODULE" +then make_module XMLCATALOG xmlcatalog.c + CMD="CRTPGM PGM(${TARGETLIB}/XMLCATALOG)" + CMD="${CMD} MODULE(${TARGETLIB}/XMLCATALOG)" + CMD="${CMD} ENTMOD(${TARGETLIB}/LIBXMLMAIN)" + CMD="${CMD} BNDSRVPGM(QADRTTS) BNDDIR((${TARGETLIB}/${STATBNDDIR})" + if [ "${WITH_ZLIB}" -ne 0 ] + then CMD="${CMD} (${ZLIB_LIB}/${ZLIB_BNDDIR})" + fi + CMD="${CMD}) ACTGRP(*NEW) TEXT('XML/SGML catalog tool')" + CMD="${CMD} TGTRLS(${TGTRLS})" + system "${CMD}" + rm -f "${LIBIFSNAME}/XMLCATALOG.MODULE" +fi + +# Install xmlcatalog in IFS. + +rm -f "${IFSDIR}/bin/xmlcatalog" +ln -s "${LIBIFSNAME}/XMLCATALOG.PGM" "${IFSDIR}/bin/xmlcatalog" + +# Prepare the XMLCATALOG command and its response program. + +if action_needed "${LIBIFSNAME}/XMLCATLGCL.PGM" "${SCRIPTDIR}/xmlcatlgcl.c" +then make_module --ebcdic XMLCATLGCL "${SCRIPTDIR}/xmlcatlgcl.c" + CMD="CRTPGM PGM(${TARGETLIB}/XMLCATLGCL)" + CMD="${CMD} MODULE(${TARGETLIB}/XMLCATLGCL)" + CMD="${CMD} ACTGRP(*NEW) TEXT('XMLCATALOG command response')" + CMD="${CMD} TGTRLS(${TGTRLS})" + system "${CMD}" + rm -f "${LIBIFSNAME}/XMLCATLGCL.MODULE" +fi + +if action_needed "${LIBIFSNAME}/TOOLS.FILE/XMLCATALOG.MBR" \ + "${SCRIPTDIR}/xmlcatalog.cmd" +then CMD="CPY OBJ('${SCRIPTDIR}/xmlcatalog.cmd')" + CMD="${CMD} TOOBJ('${LIBIFSNAME}/TOOLS.FILE/XMLCATALOG.MBR')" + CMD="${CMD} TOCCSID(${TGTCCSID}) DTAFMT(*TEXT) REPLACE(*YES)" + system "${CMD}" +fi + +if action_needed "${LIBIFSNAME}/XMLCATALOG.CMD" \ + "${LIBIFSNAME}/TOOLS.FILE/XMLCATALOG.MBR" +then CMD="CRTCMD CMD(${TARGETLIB}/XMLCATALOG) PGM(${TARGETLIB}/XMLCATLGCL)" + CMD="${CMD} SRCFILE(${TARGETLIB}/TOOLS) SRCMBR(XMLCATALOG)" + CMD="${CMD} THDSAFE(*YES) TEXT('XML/SGML catalog tool') REPLACE(*YES)" + system "${CMD}" +fi diff --git a/os400/make.sh b/os400/make.sh new file mode 100644 index 0000000..95a35a2 --- /dev/null +++ b/os400/make.sh @@ -0,0 +1,84 @@ +#!/bin/sh +# +# libxml2 compilation script for the OS/400. +# This is a shell script since make is not a standard component of OS/400. +# +# See Copyright for the status of this software. +# +# Author: Patrick Monnerat , DATASPHERE S.A. +# + +SCRIPTDIR=`dirname "${0}"` +. "${SCRIPTDIR}/initscript.sh" +cd "${TOPDIR}" + + +# Create the OS/400 library if it does not exist. + +if action_needed "${LIBIFSNAME}" +then CMD="CRTLIB LIB(${TARGETLIB})" + CMD="${CMD} TEXT('libxml2: XML parser and toolkit API')" + system "${CMD}" +fi + + +# Create the DOCS source file if it does not exist. + +if action_needed "${LIBIFSNAME}/DOCS.FILE" +then CMD="CRTSRCPF FILE(${TARGETLIB}/DOCS) RCDLEN(112)" + CMD="${CMD} CCSID(${TGTCCSID}) TEXT('Documentation texts')" + system "${CMD}" +fi + + +# Copy some documentation files if needed. + +for TEXT in "${TOPDIR}/AUTHORS" "${TOPDIR}/ChangeLog" \ + "${TOPDIR}/Copyright" "${TOPDIR}/HACKING" "${TOPDIR}/README" \ + "${TOPDIR}/MAINTAINERS" "${TOPDIR}/NEWS" "${TOPDIR}/TODO" \ + "${TOPDIR}/TODO_SCHEMAS" "${TOPDIR}/os400/README400" +do if [ -f "${TEXT}" ] + then MEMBER="`basename \"${TEXT}\" .OS400`" + MEMBER="${LIBIFSNAME}/DOCS.FILE/`db2_name \"${MEMBER}\"`.MBR" + + if action_needed "${MEMBER}" "${TEXT}" + then # Sources are in UTF-8. + rm -f "${TOPDIR}/tmpfile"[12] + CMD="CPY OBJ('${TEXT}') TOOBJ('${TOPDIR}/tmpfile1')" + CMD="${CMD} FROMCCSID(1208) TOCCSID(${TGTCCSID})" + CMD="${CMD} DTAFMT(*TEXT) REPLACE(*YES)" + system "${CMD}" + # Make sure all lines are < 100 characters. + sed -e 's/.\{99\}/&\ +/g' -e 's/\n$//' "${TOPDIR}/tmpfile1" > "${TOPDIR}/tmpfile2" + CMD="CPY OBJ('${TOPDIR}/tmpfile2') TOOBJ('${MEMBER}')" + CMD="${CMD} TOCCSID(${TGTCCSID})" + CMD="${CMD} DTAFMT(*TEXT) REPLACE(*YES)" + system "${CMD}" + fi + fi +done + + +# Build files from template. + +configFile() + +{ + args=`set | sed -e '/^[A-Za-z_][A-Za-z0-9_]*=/!d' \ + -e 's/[\/\\\\&]/\\\\&/g' \ + -e "s/'/'\\\\\\''/g" \ + -e 's/^\([^=]*\)=\(.*\)$/-e '\''s\/@\1@\/\2\/g'\'/` + eval sed ${args} < "${1}".in > "${1}" +} + +configFile include/libxml/xmlversion.h +configFile os400/os400config.h +mv os400/os400config.h config.h + + +# Build in each directory. + +for SUBDIR in include rpg src +do "${SCRIPTDIR}/make-${SUBDIR}.sh" +done diff --git a/os400/os400config.h.in b/os400/os400config.h.in new file mode 100644 index 0000000..3966ac8 --- /dev/null +++ b/os400/os400config.h.in @@ -0,0 +1,353 @@ +/** +*** Configuration parameters for the OS/400 implementation. +*** +*** See Copyright for the status of this software. +*** +*** Author: Patrick Monnerat , DATASPHERE S.A. +**/ + +/* Define to 1 if you have the header file. */ +#undef HAVE_ANSIDECL_H + +/* Define to 1 if you have the header file. */ +#define HAVE_ARPA_INET_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_ARPA_NAMESER_H 1 + +/* Whether struct sockaddr::__ss_family exists */ +#undef HAVE_BROKEN_SS_FAMILY + +/* Define to 1 if you have the `class' function. */ +#undef HAVE_CLASS + +/* Define to 1 if you have the header file. */ +#define HAVE_CTYPE_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_DIRENT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_DLFCN_H 1 /* Locally emulated. */ + +/* Have dlopen based dso */ +#define HAVE_DLOPEN 1 /* Locally emulated. */ + +/* Define to 1 if you have the header file. */ +#undef HAVE_DL_H + +/* Define to 1 if you have the header file. */ +#define HAVE_ERRNO_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_FCNTL_H 1 + +/* Define to 1 if you have the `finite' function. */ +#undef HAVE_FINITE + +/* Define to 1 if you have the header file. */ +#define HAVE_FLOAT_H 1 + +/* Define to 1 if you have the `fpclass' function. */ +#undef HAVE_FPCLASS + +/* Define to 1 if you have the `fprintf' function. */ +#undef HAVE_FPRINTF /* Use trio. */ + +/* Define to 1 if you have the `fp_class' function. */ +#undef HAVE_FP_CLASS + +/* Define to 1 if you have the header file. */ +#undef HAVE_FP_CLASS_H + +/* Define to 1 if you have the `ftime' function. */ +#undef HAVE_FTIME + +/* Define if getaddrinfo is there */ +#define HAVE_GETADDRINFO 1 + +/* Define to 1 if you have the `gettimeofday' function. */ +#undef HAVE_GETTIMEOFDAY + +/* Define to 1 if you have the header file. */ +#undef HAVE_IEEEFP_H + +/* Define to 1 if you have the header file. */ +#define HAVE_INTTYPES_H 1 + +/* Define to 1 if you have the `isascii' function. */ +#define HAVE_ISASCII 1 + +/* Define if isinf is there */ +#undef HAVE_ISINF + +/* Define if isnan is there */ +#undef HAVE_ISNAN + +/* Define to 1 if you have the `isnand' function. */ +#undef HAVE_ISNAND + +/* Define if history library is there (-lhistory) */ +#undef HAVE_LIBHISTORY + +/* Have compression library */ +#undef HAVE_LIBLZMA + +/* Define if pthread library is there (-lpthread) */ +#undef HAVE_LIBPTHREAD + +/* Define if readline library is there (-lreadline) */ +#undef HAVE_LIBREADLINE + +/* Have compression library */ +#undef HAVE_LIBZ + +/* Define to 1 if you have the header file. */ +#define HAVE_LIMITS_H 1 + +/* Define to 1 if you have the `localtime' function. */ +#define HAVE_LOCALTIME 1 + +/* Define to 1 if you have the header file. */ +#undef HAVE_LZMA_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_MALLOC_H + +/* Define to 1 if you have the header file. */ +#define HAVE_MATH_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_MEMORY_H 1 + +/* Define to 1 if you have the `mmap' function. */ +#undef HAVE_MMAP + +/* Define to 1 if you have the `munmap' function. */ +#undef HAVE_MUNMAP + +/* mmap() is no good without munmap() */ +#if defined(HAVE_MMAP) && !defined(HAVE_MUNMAP) +# undef /**/ HAVE_MMAP +#endif + +/* Define to 1 if you have the header file. */ +#undef HAVE_NAN_H + +/* Define to 1 if you have the header file, and it defines `DIR'. */ +#undef HAVE_NDIR_H + +/* Define to 1 if you have the header file. */ +#define HAVE_NETDB_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_NETINET_IN_H 1 + +/* Define to 1 if you have the header file. */ +#undef HAVE_POLL_H + +/* Define to 1 if you have the `printf' function. */ +#undef HAVE_PRINTF /* Use trio. */ + +/* Define to 1 if you have the `vprintf' function. */ +#undef HAVE_VPRINTF /* Use trio. */ + +/* Define if is there */ +#define HAVE_PTHREAD_H 1 + +/* Define to 1 if you have the `putenv' function. */ +#define HAVE_PUTENV 1 + +/* Define to 1 if you have the `rand' function. */ +#define HAVE_RAND 1 + +/* Define to 1 if you have the `rand_r' function. */ +#define HAVE_RAND_R 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_RESOLV_H 1 + +/* Have shl_load based dso */ +#undef HAVE_SHLLOAD + +/* Define to 1 if you have the `signal' function. */ +#undef HAVE_SIGNAL + +/* Define to 1 if you have the header file. */ +#define HAVE_SIGNAL_H 1 + +/* Define to 1 if you have the `snprintf' function. */ +#undef HAVE_SNPRINTF /* Use trio. */ + +/* Define to 1 if you have the `sprintf' function. */ +#undef HAVE_SPRINTF /* Use trio. */ + +/* Define to 1 if you have the `srand' function. */ +#define HAVE_SRAND 1 + +/* Define to 1 if you have the `scanf' function. */ +#undef HAVE_SCANF /* Use trio. */ + +/* Define to 1 if you have the `fscanf' function. */ +#undef HAVE_FSCANF /* Use trio. */ + +/* Define to 1 if you have the `sscanf' function. */ +#undef HAVE_SSCANF /* Use trio. */ + +/* Define to 1 if you have the `stat' function. */ +#define HAVE_STAT 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDARG_H 1 /* Overloaded */ + +/* Define to 1 if you have the header file. */ +#define HAVE_STDINT_H 1 + +/* Define to 1 if you have the 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 header file. */ +#define HAVE_STRINGS_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRING_H 1 + +/* Define to 1 if you have the `strndup' function. */ +#undef HAVE_STRNDUP + +/* Define to 1 if you have the header file, and it defines `DIR'. + */ +#undef HAVE_SYS_DIR_H + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_MMAN_H 1 + +/* Define to 1 if you have the header file, and it defines `DIR'. + */ +#undef HAVE_SYS_NDIR_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_SELECT_H + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_SOCKET_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_TIMEB_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_TIME_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have the `time' function. */ +#define HAVE_TIME 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_TIME_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_UNISTD_H 1 + +/* Whether va_copy() is available */ +#undef HAVE_VA_COPY + +/* Define to 1 if you have the `vfprintf' function. */ +#undef HAVE_VFPRINTF /* Use trio. */ + +/* Define to 1 if you have the `vsnprintf' function. */ +#undef HAVE_VSNPRINTF /* Use trio. */ + +/* Define to 1 if you have the `vsprintf' function. */ +#undef HAVE_VSPRINTF /* Use trio. */ + +/* Define to 1 if you have the header file. */ +/* Actually dependent on the compilation script. */ +#if @WITH_ZLIB@ +#define HAVE_ZLIB_H 1 +#else +#undef HAVE_ZLIB_H +#endif + +/* Define to 1 if you have the `_stat' function. */ +#undef HAVE__STAT + +/* Whether __va_copy() is available */ +#undef HAVE___VA_COPY + +/* Define as const if the declaration of iconv() needs const. */ +#define ICONV_CONST + +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#undef LT_OBJDIR + +/* Name of package */ +#define PACKAGE "libxml2" + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "" + +/* Define to the home page for this package. */ +#define PACKAGE_URL "" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "" + +/* Define to 1 if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Support for IPv6 */ +#define SUPPORT_IP6 + +/* Version number of package */ +#define VERSION "@VERSION@" + +/* Determine what socket length (socklen_t) data type is */ +#define XML_SOCKLEN_T socklen_t + +/* Define for Solaris 2.5.1 so the uint32_t typedef from , + , or is not used. If the typedef were allowed, the + #define below would cause a syntax error. */ +#undef _UINT32_T + +/* Using the Win32 Socket implementation */ +#undef _WINSOCKAPI_ + +/* ss_family is not defined here, use __ss_family instead */ +#undef ss_family + +/* Define to the type of an unsigned integer type of width exactly 32 bits if + such a type exists and the standard includes do not define it. */ +#undef uint32_t + +/* Type cast for the send() function 2nd arg */ +#define SEND_ARG2_CAST (char *) + +/* Type cast for the gethostbyname() argument */ +#define GETHOSTBYNAME_ARG_CAST (char *) + +/* Define if va_list is an array type */ +#define VA_LIST_IS_ARRAY 1 diff --git a/os400/rpgsupport.c b/os400/rpgsupport.c new file mode 100644 index 0000000..ad4cc5d --- /dev/null +++ b/os400/rpgsupport.c @@ -0,0 +1,270 @@ +/** +*** Additional procedures for ILE/RPG support. +*** +*** See Copyright for the status of this software. +*** +*** Author: Patrick Monnerat , DATASPHERE S.A. +**/ + +#include + +#include + +#include "libxml/xmlmemory.h" +#include "libxml/xpath.h" +#include "libxml/parser.h" +#include "libxml/HTMLparser.h" + +#include "rpgsupport.h" + + +/** +*** ILE/RPG cannot directly derefence a pointer and has no macros. +*** The following additional procedures supply these functions. +*** In addition, the following code is adjusted for threads control at +*** compile time via the C macros. +**/ + +#define THREADED_VAR(name, type) \ + type __get_##name(void) { return name; } \ + void __set_##name(type arg) { name = arg; } + + +THREADED_VAR(xmlFree, xmlFreeFunc) + +void +__call_xmlFree(void * mem) + +{ + xmlFree(mem); +} + + +THREADED_VAR(xmlMalloc, xmlMallocFunc) + +void * +__call_xmlMalloc(size_t size) + +{ + return xmlMalloc(size); +} + + +THREADED_VAR(xmlMallocAtomic, xmlMallocFunc) + +void * +__call_xmlMallocAtomic(size_t size) + +{ + return xmlMallocAtomic(size); +} + + +THREADED_VAR(xmlRealloc, xmlReallocFunc) + +void * +__call_xmlRealloc(void * mem, size_t size) + +{ + return xmlRealloc(mem, size); +} + + +THREADED_VAR(xmlMemStrdup, xmlStrdupFunc) + +char * +__call_xmlMemStrdup(const char * str) + +{ + return xmlMemStrdup(str); +} + + +#ifdef LIBXML_DOCB_ENABLED +THREADED_VAR(docbDefaultSAXHandler, xmlSAXHandlerV1) +#endif + + +#ifdef LIBXML_HTML_ENABLED +THREADED_VAR(htmlDefaultSAXHandler, xmlSAXHandlerV1) +#endif + + +THREADED_VAR(xmlLastError, xmlError) + +THREADED_VAR(oldXMLWDcompatibility, int) +THREADED_VAR(xmlBufferAllocScheme, xmlBufferAllocationScheme) +THREADED_VAR(xmlDefaultBufferSize, int) +THREADED_VAR(xmlDefaultSAXHandler, xmlSAXHandlerV1) +THREADED_VAR(xmlDefaultSAXLocator, xmlSAXLocator) +THREADED_VAR(xmlDoValidityCheckingDefaultValue, int) + +/* No caller to xmlGenericError() because the argument list is unknown. */ +THREADED_VAR(xmlGenericError, xmlGenericErrorFunc) + + +THREADED_VAR(xmlStructuredError, xmlStructuredErrorFunc) + +void +__call_xmlStructuredError(void * userData, xmlErrorPtr error) + +{ + xmlStructuredError(userData, error); +} + +THREADED_VAR(xmlGenericErrorContext, void *) +THREADED_VAR(xmlStructuredErrorContext, void *) +THREADED_VAR(xmlGetWarningsDefaultValue, int) +THREADED_VAR(xmlIndentTreeOutput, int) +THREADED_VAR(xmlTreeIndentString, const char *) +THREADED_VAR(xmlKeepBlanksDefaultValue, int) +THREADED_VAR(xmlLineNumbersDefaultValue, int) +THREADED_VAR(xmlLoadExtDtdDefaultValue, int) +THREADED_VAR(xmlParserDebugEntities, int) +THREADED_VAR(xmlParserVersion, const char *) +THREADED_VAR(xmlPedanticParserDefaultValue, int) +THREADED_VAR(xmlSaveNoEmptyTags, int) +THREADED_VAR(xmlSubstituteEntitiesDefaultValue, int) + + +THREADED_VAR(xmlRegisterNodeDefaultValue, xmlRegisterNodeFunc) + +void +__call_xmlRegisterNodeDefaultValue(xmlNodePtr node) + +{ + xmlRegisterNodeDefaultValue(node); +} + + +THREADED_VAR(xmlDeregisterNodeDefaultValue, xmlDeregisterNodeFunc) + +void +__call_xmlDeregisterNodeDefaultValue(xmlNodePtr node) + +{ + xmlDeregisterNodeDefaultValue(node); +} + + +THREADED_VAR(xmlParserInputBufferCreateFilenameValue, xmlParserInputBufferCreateFilenameFunc) + +xmlParserInputBufferPtr +__call_xmlParserInputBufferCreateFilenameValue(const char *URI, + xmlCharEncoding enc) + +{ + return xmlParserInputBufferCreateFilenameValue(URI, enc); +} + + +THREADED_VAR(xmlOutputBufferCreateFilenameValue, xmlOutputBufferCreateFilenameFunc) + +xmlOutputBufferPtr +__call_xmlOutputBufferCreateFilenameValue(const char *URI, + xmlCharEncodingHandlerPtr encoder, int compression) + +{ + return xmlOutputBufferCreateFilenameValue(URI, encoder, compression); +} + + + +/** +*** va_list support. +**/ + +void +__xmlVaStart(char * * list, char * lastargaddr, size_t lastargsize) + +{ + list[1] = lastargaddr + lastargsize; +} + + +void * +__xmlVaArg(char * * list, void * dest, size_t argsize) + +{ + size_t align; + + if (!argsize) + return (void *) NULL; + + for (align = 16; align > argsize; align >>= 1) + ; + + align--; + list[0] = list[1] + (align - (((size_t) list[0] - 1) & align)); + list[1] = list[0] + argsize; + + if (dest) + memcpy(dest, list[0], argsize); + + return (void *) list[0]; +} + + +void +__xmlVaEnd(char * * list) + +{ + /* Nothing to do. */ +} + + +#ifdef LIBXML_XPATH_ENABLED + +int +__xmlXPathNodeSetGetLength(const xmlNodeSet * ns) + +{ + return xmlXPathNodeSetGetLength(ns); +} + + +xmlNodePtr +__xmlXPathNodeSetItem(const xmlNodeSet * ns, int index) + +{ + return xmlXPathNodeSetItem(ns, index); +} + + +int +__xmlXPathNodeSetIsEmpty(const xmlNodeSet * ns) + +{ + return xmlXPathNodeSetIsEmpty(ns); +} + +#endif + + +#ifdef LIBXML_HTML_ENABLED + +const char * +__htmlDefaultSubelement(const htmlElemDesc * elt) + +{ + return htmlDefaultSubelement(elt); +} + + +int +__htmlElementAllowedHereDesc(const htmlElemDesc * parent, + const htmlElemDesc * elt) + +{ + return htmlElementAllowedHereDesc(parent, elt); +} + + +const char * * +__htmlRequiredAttrs(const htmlElemDesc * elt) + +{ + return htmlRequiredAttrs(elt); +} + +#endif diff --git a/os400/rpgsupport.h b/os400/rpgsupport.h new file mode 100644 index 0000000..d8016d7 --- /dev/null +++ b/os400/rpgsupport.h @@ -0,0 +1,157 @@ +/** +*** Additional delarations for ILE/RPG support. +*** +*** See Copyright for the status of this software. +*** +*** Author: Patrick Monnerat , DATASPHERE S.A. +**/ + +#ifndef __RPGSUPPORT_H__ +#define __RPGSUPPORT_H__ + +#include + +#include +#include +#include "libxml/HTMLparser.h" + + +XMLPUBFUN xmlFreeFunc __get_xmlFree(void); +XMLPUBFUN void __set_xmlFree(xmlFreeFunc freefunc); +XMLPUBFUN void __call_xmlFree(void * mem); +XMLPUBFUN xmlMallocFunc __get_xmlMalloc(void); +XMLPUBFUN void __set_xmlMalloc(xmlMallocFunc allocfunc); +XMLPUBFUN void * __call_xmlMalloc(size_t size); +XMLPUBFUN xmlMallocFunc __get_xmlMallocAtomic(void); +XMLPUBFUN void __set_xmlMallocAtomic(xmlMallocFunc allocfunc); +XMLPUBFUN void * __call_xmlMallocAtomic(size_t size); +XMLPUBFUN xmlReallocFunc __get_xmlRealloc(void); +XMLPUBFUN void __set_xmlRealloc(xmlReallocFunc reallocfunc); +XMLPUBFUN void * __call_xmlRealloc(void * mem, size_t size); +XMLPUBFUN xmlStrdupFunc __get_xmlMemStrdup(void); +XMLPUBFUN void __set_xmlMemStrdup(xmlStrdupFunc strdupfunc); +XMLPUBFUN char * __call_xmlMemStrdup(const char * str); + +#ifdef LIBXML_DOCB_ENABLED +XMLPUBFUN xmlSAXHandlerV1 __get_docbDefaultSAXHandler(void); +XMLPUBFUN void __set_docbDefaultSAXHandler(xmlSAXHandlerV1 hdlr); +#endif + +#ifdef LIBXML_HTML_ENABLED +XMLPUBFUN xmlSAXHandlerV1 __get_htmlDefaultSAXHandler(void); +XMLPUBFUN void __set_htmlDefaultSAXHandler(xmlSAXHandlerV1 hdlr); +#endif + +XMLPUBFUN xmlError __get_xmlLastError(void); +XMLPUBFUN void __set_xmlLastError(xmlError err); + +XMLPUBFUN int __get_oldXMLWDcompatibility(void); +XMLPUBFUN void __set_oldXMLWDcompatibility(int val); + +XMLPUBFUN xmlBufferAllocationScheme __get_xmlBufferAllocScheme(void); +XMLPUBFUN void __set_xmlBufferAllocScheme(xmlBufferAllocationScheme val); + +XMLPUBFUN int __get_xmlDefaultBufferSize(void); +XMLPUBFUN void __set_xmlDefaultBufferSize(int val); + +XMLPUBFUN xmlSAXHandlerV1 __get_xmlDefaultSAXHandler(void); +XMLPUBFUN void __set_xmlDefaultSAXHandler(xmlSAXHandlerV1 val); + +XMLPUBFUN xmlSAXLocator __get_xmlDefaultSAXLocator(void); +XMLPUBFUN void __set_xmlDefaultSAXLocator(xmlSAXLocator val); + +XMLPUBFUN int __get_xmlDoValidityCheckingDefaultValue(void); +XMLPUBFUN void __set_xmlDoValidityCheckingDefaultValue(int val); + +XMLPUBFUN xmlGenericErrorFunc __get_xmlGenericError(void); +XMLPUBFUN void __set_xmlGenericError(xmlGenericErrorFunc val); + +XMLPUBFUN xmlStructuredErrorFunc __get_xmlStructuredError(void); +XMLPUBFUN void __set_xmlStructuredError(xmlStructuredErrorFunc val); +XMLPUBFUN void __call_xmlStructuredError(void *userData, xmlErrorPtr error); + +XMLPUBFUN void * __get_xmlGenericErrorContext(void); +XMLPUBFUN void __set_xmlGenericErrorContext(void * val); + +XMLPUBFUN void * __get_xmlStructuredErrorContext(void); +XMLPUBFUN void __set_xmlStructuredErrorContext(void * val); + +XMLPUBFUN int __get_xmlGetWarningsDefaultValue(void); +XMLPUBFUN void __set_xmlGetWarningsDefaultValue(int val); + +XMLPUBFUN int __get_xmlIndentTreeOutput(void); +XMLPUBFUN void __set_xmlIndentTreeOutput(int val); + +XMLPUBFUN const char * __get_xmlTreeIndentString(void); +XMLPUBFUN void __set_xmlTreeIndentString(const char * val); + +XMLPUBFUN int __get_xmlKeepBlanksDefaultValue(void); +XMLPUBFUN void __set_xmlKeepBlanksDefaultValue(int val); + +XMLPUBFUN int __get_xmlLineNumbersDefaultValue(void); +XMLPUBFUN void __set_xmlLineNumbersDefaultValue(int val); + +XMLPUBFUN int __get_xmlLoadExtDtdDefaultValue(void); +XMLPUBFUN void __set_xmlLoadExtDtdDefaultValue(int val); + +XMLPUBFUN int __get_xmlParserDebugEntities(void); +XMLPUBFUN void __set_xmlParserDebugEntities(int val); + +XMLPUBFUN const char * __get_xmlParserVersion(void); +XMLPUBFUN void __set_xmlParserVersion(const char * val); + +XMLPUBFUN int __get_xmlPedanticParserDefaultValue(void); +XMLPUBFUN void __set_xmlPedanticParserDefaultValue(int val); + +XMLPUBFUN int __get_xmlSaveNoEmptyTags(void); +XMLPUBFUN void __set_xmlSaveNoEmptyTags(int val); + +XMLPUBFUN int __get_xmlSubstituteEntitiesDefaultValue(void); +XMLPUBFUN void __set_xmlSubstituteEntitiesDefaultValue(int val); + +XMLPUBFUN xmlRegisterNodeFunc __get_xmlRegisterNodeDefaultValue(void); +XMLPUBFUN void __set_xmlRegisterNodeDefaultValue(xmlRegisterNodeFunc val); +XMLPUBFUN void __call_xmlRegisterNodeDefaultValue(xmlNodePtr node); + +XMLPUBFUN xmlDeregisterNodeFunc __get_xmlDeregisterNodeDefaultValue(void); +XMLPUBFUN void __set_xmlDeregisterNodeDefaultValue(xmlDeregisterNodeFunc val); +XMLPUBFUN void __call_xmlDeregisterNodeDefaultValue(xmlNodePtr node); + +XMLPUBFUN xmlParserInputBufferCreateFilenameFunc + __get_xmlParserInputBufferCreateFilenameValue(void); +XMLPUBFUN void __set_xmlParserInputBufferCreateFilenameValue( + xmlParserInputBufferCreateFilenameFunc val); +XMLPUBFUN xmlParserInputBufferPtr + __call_xmlParserInputBufferCreateFilenameValue(const char *URI, + xmlCharEncoding enc); + +XMLPUBFUN xmlOutputBufferCreateFilenameFunc + __get_xmlOutputBufferCreateFilenameValue(void); +XMLPUBFUN void __set_xmlOutputBufferCreateFilenameValue( + xmlOutputBufferCreateFilenameFunc val); +XMLPUBFUN xmlOutputBufferPtr + __call_xmlOutputBufferCreateFilenameValue(const char *URI, + xmlCharEncodingHandlerPtr encoder, + int compression); + + +XMLPUBFUN void __xmlVaStart(char * * list, + char * lastargaddr, size_t lastargsize); +XMLPUBFUN void * __xmlVaArg(char * * list, void * dest, size_t argsize); +XMLPUBFUN void __xmlVaEnd(char * * list); + +#ifdef LIBXML_XPATH_ENABLED +XMLPUBFUN int __xmlXPathNodeSetGetLength(xmlNodeSetPtr ns); +XMLPUBFUN xmlNodePtr __xmlXPathNodeSetItem(xmlNodeSetPtr ns, int index); +XMLPUBFUN int __xmlXPathNodeSetIsEmpty(xmlNodeSetPtr ns); +#endif + +#ifdef LIBXML_HTML_ENABLED +XMLPUBFUN const char * __htmlDefaultSubelement(const htmlElemDesc * elt); +XMLPUBFUN int __htmlElementAllowedHereDesc(const htmlElemDesc * parent, + const htmlElemDesc * elt); +XMLPUBFUN const char * * + __htmlRequiredAttrs(const htmlElemDesc * elt); +#endif + +#endif diff --git a/os400/transcode.c b/os400/transcode.c new file mode 100644 index 0000000..bae6187 --- /dev/null +++ b/os400/transcode.c @@ -0,0 +1,268 @@ +/** +*** Transcoding support and wrappers. +*** +*** See Copyright for the status of this software. +*** +*** Author: Patrick Monnerat , DATASPHERE S.A. +**/ + +#define IN_LIBXML +#include "libxml.h" + +#include +#include +#include "libxml/xmlmemory.h" +#include "libxml/dict.h" +#include "transcode.h" + + +/** +*** Destroy a dictionary and mark as destroyed. +**/ + +void +xmlZapDict(xmlDictPtr * dict) + +{ + if (dict && *dict) { + xmlDictFree(*dict); + *dict = (xmlDictPtr) NULL; + } +} + + +/** +*** Support for inline conversion from/to UTF-8. +*** This is targetted to function parameter encoding conversion. +*** Method is: +*** - Convert string from/to UTF-8. +*** - Keep it in a dictionary. +*** - Free original string if a release procedure is provided. +*** Can also be called without dictionary to convert a string from/to UTF-8 +*** into xmlMalloc'ed dynamic storage. +**/ + +const char * +xmlTranscodeResult(const xmlChar * s, const char * encoding, + xmlDictPtr * dict, void (*freeproc)(const void *)) + +{ + size_t l; + iconv_t cd; + char * srcp; + char * dstp; + size_t srcc; + size_t dstc; + char * ts; + const char * ret; + int err; + static const int nullstring[] = { 0 }; + + /* Convert from UTF-8. */ + + if (!s) + return (const char *) NULL; + + ret = (const char *) NULL; + ts = (char *) NULL; + err = 0; + l = xmlStrlen(s); + + if (!l && dict) + ret = (const char *) nullstring; + else { + if (dict && !*dict) + err = !(*dict = xmlDictCreate()); + + if (!err) + err = !(ts = xmlMalloc(4 * l + 4)); + + dstp = ts; + dstc = 4 * l; + + if (!err && l) { + if (!encoding) + encoding = "ibm-0"; /* Job's encoding. */ + + cd = iconv_open(encoding, "UTF-8"); + + if (cd == (iconv_t) -1) + err = 1; + else { + srcp = (char *) s; + srcc = l; + srcc = iconv(cd, &srcp, &srcc, &dstp, &dstc); + iconv_close(cd); + err = srcc == (size_t) -1; + } + } + + if (!err) { + dstp[0] = dstp[1] = dstp[2] = dstp[3] = '\0'; + + if (!dict) { + if (dstc) + ts = xmlRealloc(ts, (dstp - ts) + 4); + + ret = (const char *) ts; + ts = (char *) NULL; + } + else + ret = (char *) xmlDictLookup(*dict, + (xmlChar *) ts, dstp - ts + 1); + } + } + + if (ts) + xmlFree(ts); + + if (freeproc) + (*freeproc)(s); + + return ret; +} + + +/** +*** Support for inline conversion to UTF-8. +*** Method is: +*** - Convert string to UTF-8. +*** - Keep it in a dictionary. +*** Can also be called without dictionary to convert a string to UTF-8 into +*** xmlMalloc'ed dynamic storage. +**/ + +static const xmlChar * +inTranscode(const char * s, size_t l, const char * encoding, xmlDictPtr * dict) + +{ + iconv_t cd; + char * srcp; + char * dstp; + size_t srcc; + size_t dstc; + xmlChar * ts; + const xmlChar * ret; + static const xmlChar nullstring[] = { 0 }; + + if (!l && dict) + return nullstring; + + if (dict && !*dict) + if (!(*dict = xmlDictCreate())) + return (const xmlChar *) NULL; + + ts = (xmlChar *) xmlMalloc(6 * l + 1); + + if (!ts) + return (const xmlChar *) NULL; + + dstp = (char *) ts; + dstc = 6 * l; + + if (l) { + if (!encoding) + encoding = "ibm-0"; /* Use job's encoding. */ + + cd = iconv_open("UTF-8", encoding); + + if (cd == (iconv_t) -1) { + xmlFree((char *) ts); + return (const xmlChar *) NULL; + } + + srcp = (char *) s; + srcc = l; + srcc = iconv(cd, &srcp, &srcc, &dstp, &dstc); + iconv_close(cd); + + if (srcc == (size_t) -1) { + xmlFree((char *) ts); + return (const xmlChar *) NULL; + } + } + + *dstp = '\0'; + + if (!dict) { + if (dstc) + ts = xmlRealloc(ts, (dstp - ts) + 1); + + return ts; + } + + ret = xmlDictLookup(*dict, ts, dstp - ts + 1); + xmlFree((char *) ts); + return ret; +} + + +/** +*** Input 8-bit character string parameter. +**/ + +const xmlChar * +xmlTranscodeString(const char * s, const char * encoding, xmlDictPtr * dict) + +{ + if (!s) + return (const xmlChar *) NULL; + + return inTranscode(s, xmlStrlen(s), encoding, dict); +} + + +/** +*** Input 16-bit character string parameter. +**/ + +const xmlChar * +xmlTranscodeWString(const char * s, const char * encoding, xmlDictPtr * dict) + +{ + size_t i; + + if (!s) + return (const xmlChar *) NULL; + + for (i = 0; s[i] && s[i + 1]; i += 2) + ; + + return inTranscode(s, i, encoding, dict); +} + + +/** +*** Input 32-bit character string parameter. +**/ + +const xmlChar * +xmlTranscodeHString(const char * s, const char * encoding, xmlDictPtr * dict) + +{ + size_t i; + + if (!s) + return (const xmlChar *) NULL; + + for (i = 0; s[i] && s[i + 1] && s[i + 2] && s[i + 3]; i += 4) + ; + + return inTranscode(s, i, encoding, dict); +} + + +/** +*** vasprintf() implementation with result transcoding. +**/ + +const char * +xmlVasprintf(xmlDictPtr * dict, const char * encoding, + const xmlChar * fmt, va_list args) + +{ + char * s = NULL; + + vasprintf(&s, fmt, args); + return xmlTranscodeResult((const xmlChar *) s, encoding, dict, free); +} diff --git a/os400/transcode.h b/os400/transcode.h new file mode 100644 index 0000000..6ca5773 --- /dev/null +++ b/os400/transcode.h @@ -0,0 +1,43 @@ +/** +*** Transcoding support declarations. +*** +*** See Copyright for the status of this software. +*** +*** Author: Patrick Monnerat , DATASPHERE S.A. +**/ + +#ifndef _TRANSCODE_H_ +#define _TRANSCODE_H_ + +#include +#include + + +XMLPUBFUN void xmlZapDict(xmlDictPtr * dict); +XMLPUBFUN const char * xmlTranscodeResult(const xmlChar * s, + const char * encoding, xmlDictPtr * dict, + void (*freeproc)(const void *)); +XMLPUBFUN const xmlChar * xmlTranscodeString(const char * s, + const char * encoding, xmlDictPtr * dict); +XMLPUBFUN const xmlChar * xmlTranscodeWString(const char * s, + const char * encoding, xmlDictPtr * dict); +XMLPUBFUN const xmlChar * xmlTranscodeHString(const char * s, + const char * encoding, xmlDictPtr * dict); + +#ifndef XML_NO_SHORT_NAMES +/** +*** Since the above functions are generally called "inline" (i.e.: several +*** times nested in a single expression), define shorthand names +*** to minimize calling statement length. +**/ + +#define xmlTR xmlTranscodeResult +#define xmlTS xmlTranscodeString +#define xmlTW xmlTranscodeWString +#define xmlTH xmlTranscodeHstring +#endif + +XMLPUBFUN const char * xmlVasprintf(xmlDictPtr * dict, const char * encoding, + const xmlChar * fmt, va_list args); + +#endif diff --git a/os400/wrappers.c b/os400/wrappers.c new file mode 100644 index 0000000..9f592b7 --- /dev/null +++ b/os400/wrappers.c @@ -0,0 +1,170 @@ +/** +*** UTF-8/EBCDIC wrappers to system and C library procedures. +*** +*** See Copyright for the status of this software. +*** +*** Author: Patrick Monnerat , DATASPHERE S.A. +**/ + +#include +#include +#include +#include +#include +#include +#include + +#include "config.h" + +#include "libxml/xmlmemory.h" + +#include "transcode.h" + + +static const char * lxdles = NULL; + + +int +_lx_getaddrinfo(const char * node, const char * service, + const struct addrinfo * hints, struct addrinfo * * res) + +{ + xmlDictPtr d = NULL; + int i; + + i = getaddrinfo(xmlTranscodeResult(node, NULL, &d, NULL), + xmlTranscodeResult(service, NULL, &d, NULL), hints, res); + xmlZapDict(&d); + return i; +} + + +const char * +_lx_inet_ntop(int af, const void * src, char * dst, socklen_t size) + +{ + const char * cp1 = inet_ntop(af, src, dst, size); + char const * cp2; + int i; + + if (!cp1) + return cp1; + + if (!(cp2 = xmlTranscodeString(cp1, NULL, NULL))) + return cp2; + + i = strlen(cp2); + + if (i >= size) { + xmlFree((char *) cp2); + errno = ENOSPC; + return (const char *) NULL; + } + + memcpy(dst, cp2, i + 1); + xmlFree((char *) cp2); + return dst; +} + + +void * +_lx_dlopen(const char * filename, int flag) + +{ + xmlDictPtr d = NULL; + void * result; + + result = dlopen(xmlTranscodeResult(filename, NULL, &d, NULL), flag); + xmlZapDict(&d); + return result; +} + + +void * +_lx_dlsym(void * handle, const char * symbol) + +{ + xmlDictPtr d = NULL; + void * result; + + result = dlsym(handle, xmlTranscodeResult(symbol, NULL, &d, NULL)); + xmlZapDict(&d); + return result; +} + + +char * +_lx_dlerror(void) + +{ + char * cp1 = (char *) dlerror(); + + if (!cp1) + return cp1; + + if (lxdles) + xmlFree((char *) lxdles); + + lxdles = (const char *) xmlTranscodeString(cp1, NULL, NULL); + return (char *) lxdles; +} + + +#ifdef HAVE_ZLIB_H +#include + +gzFile +_lx_gzopen(const char * path, const char * mode) + +{ + xmlDictPtr d = NULL; + gzFile f; + + f = gzopen(xmlTranscodeResult(path, NULL, &d, NULL), + xmlTranscodeResult(mode, NULL, &d, NULL)); + xmlZapDict(&d); + return f; +} + + +gzFile +_lx_gzdopen(int fd, const char * mode) + +{ + xmlDictPtr d = NULL; + gzFile f; + + f = gzdopen(fd, xmlTranscodeResult(mode, NULL, &d, NULL)); + xmlZapDict(&d); + return f; +} + +int +_lx_inflateInit2_(z_streamp strm, int windowBits, + const char * version, int stream_size) + +{ + xmlDictPtr d = NULL; + int r; + + r = inflateInit2_(strm, windowBits, + xmlTranscodeResult(version, NULL, &d, NULL), stream_size); + xmlZapDict(&d); + return r; +} + +int +_lx_deflateInit2_(z_streamp strm, int level, int method, int windowBits, + int memLevel, int strategy, const char * version, int stream_size) + +{ + xmlDictPtr d = NULL; + int r; + + r = deflateInit2_(strm, level, method, windowBits, memLevel, strategy, + xmlTranscodeResult(version, NULL, &d, NULL), stream_size); + xmlZapDict(&d); + return r; +} + +#endif diff --git a/os400/wrappers.h b/os400/wrappers.h new file mode 100644 index 0000000..388ec8c --- /dev/null +++ b/os400/wrappers.h @@ -0,0 +1,70 @@ +/** +*** Replace system/C library calls by EBCDIC wrappers. +*** This is a layer inserted between libxml2 itself and the EBCDIC +*** environment. +*** +*** See Copyright for the status of this software. +*** +*** Author: Patrick Monnerat , DATASPHERE S.A. +**/ + +#ifndef __WRAPPERS_H_ +#define __WRAPPERS_H_ + +/** +*** OS/400 specific defines. +**/ + +#define __cplusplus__strings__ + +/** +*** Force header inclusions before renaming procedures to UTF-8 wrappers. +**/ + +#include +#include +#include +#include + +#include "dlfcn.h" + + +/** +*** UTF-8 wrappers prototypes. +**/ + +extern int _lx_getaddrinfo(const char * node, const char * service, + const struct addrinfo * hints, struct addrinfo * * res); +extern const char * + _lx_inet_ntop(int af, + const void * src, char * dst, socklen_t size); +extern void * _lx_dlopen(const char * filename, int flag); +extern void * _lx_dlsym(void * handle, const char * symbol); +extern char * _lx_dlerror(void); + + +#ifdef HAVE_ZLIB_H + +#include + +extern gzFile _lx_gzopen(const char * path, const char * mode); +extern gzFile _lx_gzdopen(int fd, const char * mode); + +#endif + + +/** +*** Rename data/procedures to UTF-8 wrappers. +**/ + +#define getaddrinfo _lx_getaddrinfo +#define inet_ntop _lx_inet_ntop +#define dlopen _lx_dlopen +#define dlsym _lx_dlsym +#define dlerror _lx_dlerror +#define gzopen _lx_gzopen +#define gzdopen _lx_gzdopen +#define inflateInit2_ _lx_inflateInit2_ +#define deflateInit2_ _lx_deflateInit2_ + +#endif diff --git a/os400/xmlcatalog.cmd b/os400/xmlcatalog.cmd new file mode 100644 index 0000000..92f0270 --- /dev/null +++ b/os400/xmlcatalog.cmd @@ -0,0 +1,112 @@ +/* XMLCATALOG CL command. */ +/* */ +/* See Copyright for the status of this software. */ +/* */ +/* Author: Patrick Monnerat , DATASPHERE S.A. */ + +/* Interface to program XMLCATLGCL */ + + CMD PROMPT('XML/SGML catalog tool') + + /* Catalog file path. */ + + PARM KWD(INSTMF) TYPE(*PNAME) LEN(5000) VARY(*YES *INT2) + + CASE(*MIXED) EXPR(*YES) MIN(1) SPCVAL((*NEW '')) + + CHOICE('Stream file path') + + PROMPT('XML/SGML catalog file') + + /* Catalog kind: XML/SGML. */ + + PARM KWD(KIND) TYPE(*CHAR) LEN(7) VARY(*YES *INT2) + + EXPR(*YES) RSTD(*YES) DFT(*XML) + + SPCVAL((*XML '') (*SGML '--sgml')) + + PROMPT('Catalog kind') + + /* Output file. */ + + PARM KWD(OUTSTMF) TYPE(*PNAME) LEN(5000) VARY(*YES *INT2) + + CASE(*MIXED) EXPR(*YES) DFT(*STDOUT) + + SPCVAL((*STDOUT '') (*INSTMF X'00')) + + CHOICE('*STDOUT, *INSTMF or file path') + + PROMPT('Output stream file path') + + /* Convert SGML to XML catalog. */ + + PARM KWD(CONVERT) TYPE(*CHAR) LEN(10) VARY(*YES *INT2) + + RSTD(*YES) SPCVAL((*YES '--convert') (*NO '')) + + EXPR(*YES) DFT(*NO) PMTCTL(TYPEXML) + + PROMPT('Convert SGML to XML catalog') + + /* SGML super catalog update. */ + + PARM KWD(SUPERUPD) TYPE(*CHAR) LEN(17) VARY(*YES *INT2) + + SPCVAL((*YES '') (*NO '--no-super-update')) + + EXPR(*YES) DFT(*YES) RSTD(*YES) PMTCTL(TYPESGML) + + PROMPT('Update the SGML super catalog') + + /* Verbose/debug output. */ + + PARM KWD(VERBOSE) TYPE(*CHAR) LEN(4) VARY(*YES *INT2) + + RSTD(*YES) SPCVAL((*YES '-v') (*NO '')) + + EXPR(*YES) DFT(*NO) + + PROMPT('Output debugging information') + + /* Interactive shell not supported. */ + + /* Values to delete. */ + + PARM KWD(DELETE) TYPE(*PNAME) LEN(256) VARY(*YES *INT2) + + CASE(*MIXED) MAX(64) EXPR(*YES) + + CHOICE('Identifier value') + + PROMPT('Delete System/URI identifier') + + /* Values to add. */ + + PARM KWD(ADD) TYPE(XMLELEM) MAX(10) PMTCTL(TYPEXML) + + PROMPT('Add definition') +XMLELEM: ELEM TYPE(*CHAR) LEN(16) VARY(*YES *INT2) DFT(*PUBLIC) + + PROMPT('Entry type') + + EXPR(*YES) RSTD(*YES) SPCVAL( + + (*PUBLIC 'public') + + (*SYSTEM 'system') + + (*URI 'uri') + + (*REWRITESYSTEM 'rewriteSystem') + + (*REWRITEURI 'rewriteURI') + + (*DELEGATEPUBLIC 'delegatePublic') + + (*DELEGATESYSTEM 'delegateSystem') + + (*DELEGATEURI 'delegateURI') + + (*NEXTCATALOG 'nextCatalog') + + ) + ELEM TYPE(*PNAME) LEN(256) VARY(*YES *INT2) EXPR(*YES) + + CASE(*MIXED) PROMPT('Original reference/file name') + ELEM TYPE(*PNAME) LEN(256) VARY(*YES *INT2) EXPR(*YES) + + CASE(*MIXED) PROMPT('Replacement entity URI') + + PARM KWD(SGMLADD) TYPE(SGMLELEM) MAX(10) + + PMTCTL(TYPESGML) PROMPT('Add SGML definition') +SGMLELEM: ELEM TYPE(*PNAME) LEN(256) VARY(*YES *INT2) EXPR(*YES) + + CASE(*MIXED) PROMPT('SGML catalog file name') + ELEM TYPE(*PNAME) LEN(256) VARY(*YES *INT2) EXPR(*YES) + + CASE(*MIXED) PROMPT('SGML definition') + + /* Entities to resolve. */ + + PARM KWD(ENTITY) TYPE(*PNAME) LEN(256) VARY(*YES *INT2) + + CASE(*MIXED) EXPR(*YES) MAX(150) + + PROMPT('Resolve entity') + + /* Additional catalog files. */ + + PARM KWD(CATALOG) TYPE(*PNAME) LEN(5000) VARY(*YES *INT2) + + CASE(*MIXED) EXPR(*YES) MAX(150) DFT(*DEFAULT) + + CHOICE('Catalog stream file path') + + PROMPT('Additional catalog file') SPCVAL( + + (*DEFAULT '/etc/xml/catalog') + + (*NONE '') + + ) + + + /* Conditional prompting. */ + +TYPEXML: PMTCTL CTL(KIND) COND((*EQ '')) +TYPESGML: PMTCTL CTL(KIND) COND((*NE '')) diff --git a/os400/xmlcatlgcl.c b/os400/xmlcatlgcl.c new file mode 100644 index 0000000..6f1e4ff --- /dev/null +++ b/os400/xmlcatlgcl.c @@ -0,0 +1,288 @@ +/** +*** XMLCATALOG command response program. +*** +*** See Copyright for the status of this software. +*** +*** Author: Patrick Monnerat , DATASPHERE S.A. +**/ + +#include +#include +#include +#include + + +/* Variable-length string, with 16-bit length. */ +typedef struct { + short len; + char string[5000]; +} vary2; + + +/* Variable-length string, with 32-bit length. */ +typedef struct { + int len; + char string[5000]; +} vary4; + + +/* Multiple occurrence parameter list. */ +#define paramlist(itemsize, itemtype) \ + _Packed struct { \ + short len; \ + _Packed union { \ + char _pad[itemsize]; \ + itemtype param; \ + } item[1]; \ + } + +/* Add element list structure. */ +typedef struct { + short elcount; /* Element count (=3). */ + paramlist(16, char) type; /* vary2(16). */ + paramlist(256, char) origin; /* vary2(256). */ + paramlist(256, char) replace; /* vary2(256). */ +} addelement; + +/* SGML add element list structure. */ +typedef struct { + short elcount; /* Element count (=3). */ + paramlist(256, char) catalog; /* vary2(256). */ + paramlist(256, char) ident; /* vary2(256). */ +} sgmladdelement; + + +/* Arguments from CL command. */ +typedef struct { + char * pgm; /* Program name. */ + vary2 * instmf; /* Input catalog file name. */ + vary2 * kind; /* Catalog kind. */ + vary2 * outstmf; /* Output catalog file name. */ + vary2 * convert; /* Convert SGML to XML. */ + vary2 * superupd; /* --no-super-update. */ + vary2 * verbose; /* Verbose output. */ + paramlist(256 + 2, vary2) * delete; /* Identifiers to delete. */ + paramlist(2, unsigned short) * add; /* Items to add. */ + paramlist(2, unsigned short) * sgmladd; /* SGML items to add. */ + paramlist(256 + 2, vary2) * resolve; /* Identifiers to resolve. */ + paramlist(5000 + 2, vary2) * catalog; /* Additional catalog files. */ +} arguments; + + +/* Definition of QSHELL program. */ +extern void qshell(vary4 * cmd); +#pragma linkage(qshell, OS) +#pragma map(qshell, "QSHELL/QZSHQSHC") + +/* Macro to handle displacements. */ +#define OFFSETBY(t, p, n) ((t *) (((char *) (p)) + (n))) + + +static void +vary4nappend(vary4 * dst, const char * src, size_t len) + +{ + if (len > sizeof(dst->string) - dst->len) + len = sizeof(dst->string) - dst->len; + + if (len) { + memcpy(dst->string + dst->len, src, len); + dst->len += len; + } +} + + +static void +vary4append(vary4 * dst, const char * src) + +{ + vary4nappend(dst, src, strlen(src)); +} + + +static void +vary4arg(vary4 * dst, const char * arg) + +{ + vary4nappend(dst, " ", 1); + vary4append(dst, arg); +} + + +static void +vary4varg(vary4 * dst, vary2 * arg) + +{ + vary4nappend(dst, " ", 1); + vary4nappend(dst, arg->string, arg->len); +} + + +static void +vary4vescape(vary4 * dst, vary2 * arg) + +{ + int i; + + for (i = 0; i < arg->len; i++) + if (arg->string[i] == '\'') + vary4nappend(dst, "'\"'\"'", 5); + else + vary4nappend(dst, arg->string + i, 1); +} + + +static void +vary4vargquote(vary4 * dst, vary2 * arg) + +{ + vary4nappend(dst, " '", 2); + vary4vescape(dst, arg); + vary4nappend(dst, "'", 1); +} + + +int +main(int argsc, arguments * args) + +{ + vary4 cmd; + int i; + char c; + addelement * aelp; + sgmladdelement * saelp; + + /* Specify additional catalogs. */ + cmd.len = 0; + if (args->catalog->len) { + for (i = 0; i < args->catalog->len && + !args->catalog->item[i].param.len; i++) + ; + + vary4append(&cmd, "XML_CATALOG_FILES="); + if (i < args->catalog->len) { + c = '\''; + for (i = 0; i < args->catalog->len; i++) { + if (!args->catalog->item[i].param.len) + continue; + vary4nappend(&cmd, &c, 1); + c = ' '; + vary4vescape(&cmd, + &args->catalog->item[i].param); + } + vary4nappend(&cmd, "'", 1); + } + vary4nappend(&cmd, " ", 1); + } + + /* find length of library name. */ + for (i = 0; i < 10 && args->pgm[i] && args->pgm[i] != '/'; i++) + ; + + /* Store program name in command buffer. */ + vary4append(&cmd, "/QSYS.LIB/"); + vary4nappend(&cmd, args->pgm, i); + vary4append(&cmd, ".LIB/XMLCATALOG.PGM"); + + /* Map command arguments to standard xmlcatalog argument vector. */ + if (args->kind && args->kind->len) + vary4varg(&cmd, args->kind); + + if (args->verbose && args->verbose->len) + vary4varg(&cmd, args->verbose); + + if (args->delete) + for (i = 0; i < args->delete->len; i++) { + vary4arg(&cmd, "--del"); + vary4vargquote(&cmd, &args->delete->item[i].param); + } + + if (args->kind && args->kind->len) { + /* Process SGML-specific parameters. */ + if (args->superupd && args->superupd->len) + vary4varg(&cmd, args->superupd); + + if (args->sgmladd) + for (i = 0; i < args->sgmladd->len; i++) { + saelp = OFFSETBY(sgmladdelement, args->sgmladd, + args->sgmladd->item[i].param); + if (!((vary2 *) &saelp->catalog)->len) + continue; + vary4arg(&cmd, "--add"); + vary4vargquote(&cmd, (vary2 *) &saelp->catalog); + vary4vargquote(&cmd, (vary2 *) &saelp->ident); + } + } + else { + /* Process XML-specific parameters. */ + if (args->convert && args->convert->len) + vary4varg(&cmd, args->convert); + + if (args->add) + for (i = 0; i < args->add->len; i++) { + aelp = OFFSETBY(addelement, args->add, + args->add->item[i].param); + if (!((vary2 *) &aelp->origin)->len) + continue; + vary4arg(&cmd, "--add"); + vary4varg(&cmd, (vary2 *) &aelp->type); + vary4vargquote(&cmd, (vary2 *) &aelp->origin); + vary4vargquote(&cmd, (vary2 *) &aelp->replace); + } + } + + /* Avoid INSTMF(*NEW) and OUTSMTF(*INSTMF). */ + if (args->outstmf && args->outstmf->len && !args->outstmf->string[0]) + if (args->instmf && args->instmf->len) + args->outstmf = args->instmf; + else + args->outstmf = NULL; + + /* If INSTMF(*NEW) and OUTSTMF(somepath), Use --create --noout and + somepath as (unexisting) input file. */ + if (args->outstmf && args->outstmf->len) + if (!args->instmf || !args->instmf->len) { + vary4arg(&cmd, "--create"); + vary4arg(&cmd, "--noout"); + args->instmf = args->outstmf; + args->outstmf = NULL; + } + + /* If output to input file, use --noout option. */ + if (args->instmf && args->outstmf && args->instmf->len && + args->instmf->len == args->outstmf->len && + !strncmp(args->instmf->string, args->outstmf->string, + args->instmf->len)) { + vary4arg(&cmd, "--noout"); + args->outstmf = NULL; + } + + /* If no input file create catalog, else specify the input file name. */ + /* Specify the input file name: my be a dummy one. */ + if (!args->instmf || !args->instmf->len) { + vary4arg(&cmd, "--create -"); + vary4arg(&cmd, ".dmyxmlcatalog"); + } + else { + vary4arg(&cmd, "-"); + vary4vargquote(&cmd, args->instmf); + } + + /* Query entities. */ + + if (args->resolve) + for (i = 0; i < args->resolve->len; i++) + vary4vargquote(&cmd, &args->resolve->item[i].param); + + /* Redirect output if requested. */ + if (args->outstmf && args->outstmf->len) { + vary4arg(&cmd, ">"); + vary4vargquote(&cmd, args->outstmf); + } + + /* Execute the shell command. */ + qshell(&cmd); + + /* Terminate. */ + exit(0); +} diff --git a/os400/xmllint.cmd b/os400/xmllint.cmd new file mode 100644 index 0000000..1582837 --- /dev/null +++ b/os400/xmllint.cmd @@ -0,0 +1,146 @@ +/* XMLLINT CL command. */ +/* */ +/* See Copyright for the status of this software. */ +/* */ +/* Author: Patrick Monnerat , DATASPHERE S.A. */ + +/* Interface to program XMLLINTCL */ + + CMD PROMPT('XML tool') + + /* XML input file location. */ + + PARM KWD(STMF) TYPE(*PNAME) LEN(5000) VARY(*YES *INT2) + + CASE(*MIXED) EXPR(*YES) MIN(1) + + CHOICE('Stream file path') + + PROMPT('XML Stream file') + + /* DTD location. */ + + PARM KWD(DTD) TYPE(*PNAME) LEN(5000) VARY(*YES *INT2) + + CASE(*MIXED) EXPR(*YES) PASSVAL(*NULL) + + CHOICE('ID, URL or stream file path') + + PROMPT('DTD id, URL or file path') + + PARM KWD(DTDLOCATOR) TYPE(*CHAR) LEN(8) DFT(*DTDURL) + + SPCVAL(*DTDURL *DTDFPI) EXPR(*YES) RSTD(*YES) + + PROMPT('DTD locator is URL/FPI') + + /* Schema location. */ + + PARM KWD(SCHEMA) TYPE(*PNAME) LEN(5000) VARY(*YES *INT2) + + CASE(*MIXED) EXPR(*YES) PASSVAL(*NULL) + + CHOICE('URL or stream file path') + + PROMPT('Schema URL or stream file path') + + PARM KWD(SCHEMAKIND) TYPE(*CHAR) LEN(12) VARY(*YES *INT2) + + RSTD(*YES) DFT(*XSD) + + PROMPT('Validating schema kind') + + CHOICE('Keyword') SPCVAL( + + (*XSD '--schema') + + (*RELAXNG '--relaxng') + + (*SCHEMATRON '--schematron') + + ) + + /* Output location. */ + + PARM KWD(OUTSTMF) TYPE(*PNAME) LEN(5000) VARY(*YES *INT2) + + CASE(*MIXED) EXPR(*YES) PASSVAL(*NULL) + + CHOICE('Stream file path') + + PROMPT('Output stream file path') + + /* Other parameters with arguments. */ + + PARM KWD(XPATH) TYPE(*CHAR) LEN(5000) VARY(*YES *INT2) + + CASE(*MIXED) EXPR(*YES) PASSVAL(*NULL) + + CHOICE('XPath expression') + + PROMPT('XPath filter') + + PARM KWD(PATTERN) TYPE(*CHAR) LEN(5000) VARY(*YES *INT2) + + CASE(*MIXED) EXPR(*YES) PASSVAL(*NULL) + + CHOICE('Reader pattern') + + PROMPT('Reader node filter') + + /* Paths for resources. */ + + PARM KWD(PATH) TYPE(*PNAME) LEN(5000) VARY(*YES *INT2) + + CASE(*MIXED) EXPR(*YES) MAX(64) + + CHOICE('IFS directory path') + + PROMPT('Path for resources') + + PARM KWD(PRETTY) TYPE(*CHAR) LEN(11) VARY(*YES *INT2) + + RSTD(*YES) DFT(*NONE) + + PROMPT('Pretty-print style') + + CHOICE('Keyword') SPCVAL( + + (*NONE '0') + + (*FORMAT '1') + + (*WHITESPACE '2') + + ) + + PARM KWD(MAXMEM) TYPE(*UINT4) EXPR(*YES) DFT(0) + + CHOICE('Number of bytes') + + PROMPT('Maximum dynamic memory') + + PARM KWD(ENCODING) TYPE(*CHAR) LEN(32) VARY(*YES *INT2) + + CASE(*MIXED) EXPR(*YES) PASSVAL(*NULL) + + PMTCTL(ENCODING) CHOICE('Encoding name') + + PROMPT('Output character encoding') +ENCODING: PMTCTL CTL(OUTSTMF) COND(*SPCFD) + + /* Boolean options. */ + /* --shell is not supported from command mode. */ + + PARM KWD(OPTIONS) TYPE(*CHAR) LEN(20) VARY(*YES *INT2) + + MAX(50) RSTD(*YES) PROMPT('Options') + + CHOICE('Keyword') SPCVAL( + + (*VERSION '--version') + + (*DEBUG '--debug') + + (*DEBUGENT '--debugent') + + (*COPY '--copy') + + (*RECOVER '--recover') + + (*HUGE '--huge') + + (*NOENT '--noent') + + (*NOENC '--noenc') + + (*NOOUT '--noout') + + (*LOADTRACE '--load-trace') + + (*NONET '--nonet') + + (*NOCOMPACT '--nocompact') + + (*HTMLOUT '--htmlout') + + (*NOWRAP '--nowrap') + + (*VALID '--valid') + + (*POSTVALID '--postvalid') + + (*TIMING '--timing') + + (*REPEAT '--repeat') + + (*INSERT '--insert') + + (*COMPRESS '--compress') + + (*HTML '--html') + + (*XMLOUT '--xmlout') + + (*NODEFDTD '--nodefdtd') + + (*PUSH '--push') + + (*PUSHSMALL '--pushsmall') + + (*MEMORY '--memory') + + (*NOWARNING '--nowarning') + + (*NOBLANKS '--noblanks') + + (*NOCDATA '--nocdata') + + (*FORMAT '--format') + + (*DROPDTD '--dropdtd') + + (*NSCLEAN '--nsclean') + + (*TESTIO '--testIO') + + (*CATALOGS '--catalogs') + + (*NOCATALOGS '--nocatalogs') + + (*AUTO '--auto') + + (*XINCLUDE '--xinclude') + + (*NOXINCLUDENODE '--noxincludenode') + + (*NOFIXUPBASEURIS '--nofixup-base-uris') + + (*LOADDTD '--loaddtd') + + (*DTDATTR '--dtdattr') + + (*STREAM '--stream') + + (*WALKER '--walker') + + (*CHKREGISTER '--chkregister') + + (*C14N '--c14n') + + (*C14N11 '--c14n11') + + (*EXCC14N '--exc-c14n') + + (*SAX1 '--sax1') + + (*SAX '--sax') + + (*OLDXML10 '--oldxml10') + + ) diff --git a/os400/xmllintcl.c b/os400/xmllintcl.c new file mode 100644 index 0000000..1226385 --- /dev/null +++ b/os400/xmllintcl.c @@ -0,0 +1,216 @@ +/** +*** XMLLINT command response program. +*** +*** See Copyright for the status of this software. +*** +*** Author: Patrick Monnerat , DATASPHERE S.A. +**/ + +#include +#include +#include +#include + + +/* Variable-length string, with 16-bit length. */ +typedef struct { + short len; + char string[5000]; +} vary2; + + +/* Variable-length string, with 32-bit length. */ +typedef struct { + int len; + char string[5000]; +} vary4; + + +/* Multiple occurrence parameter list. */ +#define paramlist(itemsize, itemtype) \ + _Packed struct { \ + short len; \ + union { \ + char _pad[itemsize]; \ + itemtype param; \ + } item[1]; \ + } + + +/* Arguments from CL command. */ +typedef struct { + char * pgm; /* Program name. */ + vary2 * stmf; /* XML file name or URL. */ + vary2 * dtd; /* DTD location or public identifier. */ + char * dtdvalid; /* *DTDURL or *DTDFPI. */ + vary2 * schema; /* Schema file name or URL. */ + vary2 * schemakind; /* --schema/--relaxng/--schematron. */ + vary2 * outstmf; /* Output stream file name. */ + vary2 * xpath; /* XPath filter. */ + vary2 * pattern; /* Reader filter pattern. */ + paramlist(5000 + 2, vary2) * path; /* Path for resources. */ + vary2 * pretty; /* Pretty-print style. */ + unsigned long * maxmem; /* Maximum dynamic memory. */ + vary2 * encoding; /* Output encoding. */ + paramlist(20 + 2, vary2) * options; /* Other options. */ +} arguments; + + +/* Definition of QSHELL program. */ +extern void qshell(vary4 * cmd); +#pragma linkage(qshell, OS) +#pragma map(qshell, "QSHELL/QZSHQSHC") + + +static void +vary4nappend(vary4 * dst, const char * src, size_t len) + +{ + if (len > sizeof(dst->string) - dst->len) + len = sizeof(dst->string) - dst->len; + + if (len) { + memcpy(dst->string + dst->len, src, len); + dst->len += len; + } +} + + +static void +vary4append(vary4 * dst, const char * src) + +{ + vary4nappend(dst, src, strlen(src)); +} + + +static void +vary4arg(vary4 * dst, const char * arg) + +{ + vary4nappend(dst, " ", 1); + vary4append(dst, arg); +} + + +static void +vary4varg(vary4 * dst, vary2 * arg) + +{ + vary4nappend(dst, " ", 1); + vary4nappend(dst, arg->string, arg->len); +} + + +static void +vary4vescape(vary4 * dst, vary2 * arg) + +{ + int i; + + for (i = 0; i < arg->len; i++) + if (arg->string[i] == '\'') + vary4nappend(dst, "'\"'\"'", 5); + else + vary4nappend(dst, arg->string + i, 1); +} + + +static void +vary4vargquote(vary4 * dst, vary2 * arg) + +{ + vary4nappend(dst, " '", 2); + vary4vescape(dst, arg); + vary4nappend(dst, "'", 1); +} + + +int +main(int argsc, arguments * args) + +{ + vary4 cmd; + int i; + char textbuf[20]; + char * lang; + + /* find length of library name. */ + for (i = 0; i < 10 && args->pgm[i] && args->pgm[i] != '/'; i++) + ; + + /* Store program name in command buffer. */ + cmd.len = 0; + vary4append(&cmd, "/QSYS.LIB/"); + vary4nappend(&cmd, args->pgm, i); + vary4append(&cmd, ".LIB/XMLLINT.PGM"); + + /* Map command arguments to standard xmllint argument vector. */ + + if (args->dtd && args->dtd->len) { + if (args->dtdvalid && args->dtdvalid[4] == 'F') + vary4arg(&cmd, "--dtdvalidfpi"); + else + vary4arg(&cmd, "--dtdvalid"); + + vary4vargquote(&cmd, args->dtd); + } + + if (args->schema && args->schema->len) { + vary4varg(&cmd, args->schemakind); + vary4vargquote(&cmd, args->schema); + } + + if (args->outstmf && args->outstmf->len) { + vary4arg(&cmd, "--output"); + vary4vargquote(&cmd, args->outstmf); + + if (args->encoding && args->encoding->len) { + vary4arg(&cmd, "--encoding"); + vary4vargquote(&cmd, args->encoding); + } + } + + if (args->xpath && args->xpath->len) { + vary4arg(&cmd, "--xpath"); + vary4vargquote(&cmd, args->xpath); + } + + if (args->pattern && args->pattern->len) { + vary4arg(&cmd, "--pattern"); + vary4vargquote(&cmd, args->pattern); + } + + if (args->path && args->path->len) { + vary4arg(&cmd, "--path '"); + vary4vescape(&cmd, &args->path->item[0].param); + for (i = 1; i < args->path->len; i++) { + vary4nappend(&cmd, ":", 1); + vary4vescape(&cmd, &args->path->item[i].param); + } + vary4nappend(&cmd, "'", 1); + } + + if (args->pretty && args->pretty->len && + args->pretty->string[0] != '0') { + vary4arg(&cmd, "--pretty"); + vary4varg(&cmd, args->pretty); + } + + if (args->maxmem && *args->maxmem) { + snprintf(textbuf, sizeof textbuf, "%lu", *args->maxmem); + vary4arg(&cmd, "--maxmem"); + vary4arg(&cmd, textbuf); + } + + for (i = 0; i < args->options->len; i++) + vary4varg(&cmd, &args->options->item[i].param); + + vary4vargquote(&cmd, args->stmf); + + /* Execute the shell command. */ + qshell(&cmd); + + /* Terminate. */ + exit(0); +} diff --git a/parser.c b/parser.c new file mode 100644 index 0000000..53a6b7f --- /dev/null +++ b/parser.c @@ -0,0 +1,15817 @@ +/* + * 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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef LIBXML_CATALOG_ENABLED +#include +#endif +#ifdef LIBXML_SCHEMAS_ENABLED +#include +#include +#endif +#ifdef HAVE_CTYPE_H +#include +#endif +#ifdef HAVE_STDLIB_H +#include +#endif +#ifdef HAVE_SYS_STAT_H +#include +#endif +#ifdef HAVE_FCNTL_H +#include +#endif +#ifdef HAVE_UNISTD_H +#include +#endif +#ifdef HAVE_ZLIB_H +#include +#endif +#ifdef HAVE_LZMA_H +#include +#endif + +#include "buf.h" +#include "enc.h" + +static void +xmlFatalErr(xmlParserCtxtPtr ctxt, xmlParserErrors error, const char *info); + +static xmlParserCtxtPtr +xmlCreateEntityParserCtxtInternal(const xmlChar *URL, const xmlChar *ID, + const xmlChar *base, xmlParserCtxtPtr pctx); + +static void xmlHaltParser(xmlParserCtxtPtr ctxt); + +/************************************************************************ + * * + * Arbitrary limits set in the parser. See XML_PARSE_HUGE * + * * + ************************************************************************/ + +#define XML_PARSER_BIG_ENTITY 1000 +#define XML_PARSER_LOT_ENTITY 5000 + +/* + * XML_PARSER_NON_LINEAR is the threshold where the ratio of parsed entity + * replacement over the size in byte of the input indicates that you have + * and eponential behaviour. A value of 10 correspond to at least 3 entity + * replacement per byte of input. + */ +#define XML_PARSER_NON_LINEAR 10 + +/* + * xmlParserEntityCheck + * + * Function to check non-linear entity expansion behaviour + * This is here to detect and stop exponential linear entity expansion + * This is not a limitation of the parser but a safety + * boundary feature. It can be disabled with the XML_PARSE_HUGE + * parser option. + */ +static int +xmlParserEntityCheck(xmlParserCtxtPtr ctxt, size_t size, + xmlEntityPtr ent, size_t replacement) +{ + size_t consumed = 0; + + if ((ctxt == NULL) || (ctxt->options & XML_PARSE_HUGE)) + return (0); + if (ctxt->lastError.code == XML_ERR_ENTITY_LOOP) + return (1); + + /* + * This may look absurd but is needed to detect + * entities problems + */ + if ((ent != NULL) && (ent->etype != XML_INTERNAL_PREDEFINED_ENTITY) && + (ent->content != NULL) && (ent->checked == 0) && + (ctxt->errNo != XML_ERR_ENTITY_LOOP)) { + unsigned long oldnbent = ctxt->nbentities; + xmlChar *rep; + + ent->checked = 1; + + ++ctxt->depth; + rep = xmlStringDecodeEntities(ctxt, ent->content, + XML_SUBSTITUTE_REF, 0, 0, 0); + --ctxt->depth; + if (ctxt->errNo == XML_ERR_ENTITY_LOOP) { + ent->content[0] = 0; + } + + ent->checked = (ctxt->nbentities - oldnbent + 1) * 2; + if (rep != NULL) { + if (xmlStrchr(rep, '<')) + ent->checked |= 1; + xmlFree(rep); + rep = NULL; + } + } + if (replacement != 0) { + if (replacement < XML_MAX_TEXT_LENGTH) + return(0); + + /* + * If the volume of entity copy reaches 10 times the + * amount of parsed data and over the large text threshold + * then that's very likely to be an abuse. + */ + if (ctxt->input != NULL) { + consumed = ctxt->input->consumed + + (ctxt->input->cur - ctxt->input->base); + } + consumed += ctxt->sizeentities; + + if (replacement < XML_PARSER_NON_LINEAR * consumed) + return(0); + } else if (size != 0) { + /* + * Do the check based on the replacement size of the entity + */ + if (size < XML_PARSER_BIG_ENTITY) + return(0); + + /* + * A limit on the amount of text data reasonably used + */ + if (ctxt->input != NULL) { + consumed = ctxt->input->consumed + + (ctxt->input->cur - ctxt->input->base); + } + consumed += ctxt->sizeentities; + + if ((size < XML_PARSER_NON_LINEAR * consumed) && + (ctxt->nbentities * 3 < XML_PARSER_NON_LINEAR * consumed)) + return (0); + } else if (ent != NULL) { + /* + * use the number of parsed entities in the replacement + */ + size = ent->checked / 2; + + /* + * The amount of data parsed counting entities size only once + */ + if (ctxt->input != NULL) { + consumed = ctxt->input->consumed + + (ctxt->input->cur - ctxt->input->base); + } + consumed += ctxt->sizeentities; + + /* + * Check the density of entities for the amount of data + * knowing an entity reference will take at least 3 bytes + */ + if (size * 3 < consumed * XML_PARSER_NON_LINEAR) + return (0); + } else { + /* + * strange we got no data for checking + */ + if (((ctxt->lastError.code != XML_ERR_UNDECLARED_ENTITY) && + (ctxt->lastError.code != XML_WAR_UNDECLARED_ENTITY)) || + (ctxt->nbentities <= 10000)) + return (0); + } + xmlFatalErr(ctxt, XML_ERR_ENTITY_LOOP, NULL); + return (1); +} + +/** + * 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. It can be disabled with the XML_PARSE_HUGE + * parser option. + */ +unsigned int xmlParserMaxDepth = 256; + + + +#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" + +/** + * XML_PARSER_CHUNK_SIZE + * + * When calling GROW that's the minimal amount of data + * the parser expected to have received. It is not a hard + * limit but an optimization when reading strings like Names + * It is not strictly needed as long as inputs available characters + * are followed by 0, which should be provided by the I/O level + */ +#define XML_PARSER_CHUNK_SIZE 100 + +/* + * List of XML prefixed PI allowed by W3C specs + */ + +static const char *xmlW3CPIs[] = { + "xml-stylesheet", + "xml-model", + NULL +}; + + +/* DEPR void xmlParserHandleReference(xmlParserCtxtPtr ctxt); */ +static 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); + +static int +xmlCtxtUseOptionsInternal(xmlParserCtxtPtr ctxt, int options, + const char *encoding); +#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); + +static int +xmlLoadEntityContent(xmlParserCtxtPtr ctxt, xmlEntityPtr entity); + +/************************************************************************ + * * + * 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; + if (ctxt != NULL) + ctxt->errNo = XML_ERR_ATTRIBUTE_REDEFINED; + + if (prefix == NULL) + __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_PARSER, + XML_ERR_ATTRIBUTE_REDEFINED, 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, + XML_ERR_ATTRIBUTE_REDEFINED, XML_ERR_FATAL, NULL, 0, + (const char *) prefix, (const char *) localname, + NULL, 0, 0, "Attribute %s:%s redefined\n", prefix, + localname); + if (ctxt != NULL) { + 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"; + break; + case XML_ERR_INVALID_DEC_CHARREF: + errmsg = "CharRef: invalid decimal value"; + break; + case XML_ERR_INVALID_CHARREF: + errmsg = "CharRef: invalid value"; + break; + case XML_ERR_INTERNAL_ERROR: + errmsg = "internal error"; + break; + case XML_ERR_PEREF_AT_EOF: + errmsg = "PEReference at end of document"; + break; + case XML_ERR_PEREF_IN_PROLOG: + errmsg = "PEReference in prolog"; + break; + case XML_ERR_PEREF_IN_EPILOG: + errmsg = "PEReference in epilog"; + break; + case XML_ERR_PEREF_NO_NAME: + errmsg = "PEReference: no name"; + break; + case XML_ERR_PEREF_SEMICOL_MISSING: + errmsg = "PEReference: expecting ';'"; + break; + case XML_ERR_ENTITY_LOOP: + errmsg = "Detected an entity reference loop"; + break; + case XML_ERR_ENTITY_NOT_STARTED: + errmsg = "EntityValue: \" or ' expected"; + break; + case XML_ERR_ENTITY_PE_INTERNAL: + errmsg = "PEReferences forbidden in internal subset"; + break; + case XML_ERR_ENTITY_NOT_FINISHED: + errmsg = "EntityValue: \" or ' expected"; + break; + case XML_ERR_ATTRIBUTE_NOT_STARTED: + errmsg = "AttValue: \" or ' expected"; + break; + case XML_ERR_LT_IN_ATTRIBUTE: + errmsg = "Unescaped '<' not allowed in attributes values"; + break; + case XML_ERR_LITERAL_NOT_STARTED: + errmsg = "SystemLiteral \" or ' expected"; + break; + case XML_ERR_LITERAL_NOT_FINISHED: + errmsg = "Unfinished System or Public ID \" or ' expected"; + break; + case XML_ERR_MISPLACED_CDATA_END: + errmsg = "Sequence ']]>' not allowed in content"; + break; + case XML_ERR_URI_REQUIRED: + errmsg = "SYSTEM or PUBLIC, the URI is missing"; + break; + case XML_ERR_PUBID_REQUIRED: + errmsg = "PUBLIC, the Public Identifier is missing"; + break; + case XML_ERR_HYPHEN_IN_COMMENT: + errmsg = "Comment must not contain '--' (double-hyphen)"; + break; + case XML_ERR_PI_NOT_STARTED: + errmsg = "xmlParsePI : no target name"; + break; + case XML_ERR_RESERVED_XML_NAME: + errmsg = "Invalid PI name"; + break; + case XML_ERR_NOTATION_NOT_STARTED: + errmsg = "NOTATION: Name expected here"; + break; + case XML_ERR_NOTATION_NOT_FINISHED: + errmsg = "'>' required to close NOTATION declaration"; + break; + case XML_ERR_VALUE_REQUIRED: + errmsg = "Entity value required"; + break; + case XML_ERR_URI_FRAGMENT: + errmsg = "Fragment not allowed"; + break; + case XML_ERR_ATTLIST_NOT_STARTED: + errmsg = "'(' required to start ATTLIST enumeration"; + break; + case XML_ERR_NMTOKEN_REQUIRED: + errmsg = "NmToken expected in ATTLIST enumeration"; + break; + case XML_ERR_ATTLIST_NOT_FINISHED: + errmsg = "')' required to finish ATTLIST enumeration"; + break; + case XML_ERR_MIXED_NOT_STARTED: + errmsg = "MixedContentDecl : '|' or ')*' expected"; + break; + case XML_ERR_PCDATA_REQUIRED: + errmsg = "MixedContentDecl : '#PCDATA' expected"; + break; + case XML_ERR_ELEMCONTENT_NOT_STARTED: + errmsg = "ContentDecl : Name or '(' expected"; + break; + case XML_ERR_ELEMCONTENT_NOT_FINISHED: + errmsg = "ContentDecl : ',' '|' or ')' expected"; + break; + case XML_ERR_PEREF_IN_INT_SUBSET: + errmsg = + "PEReference: forbidden within markup decl in internal subset"; + break; + case XML_ERR_GT_REQUIRED: + errmsg = "expected '>'"; + break; + case XML_ERR_CONDSEC_INVALID: + errmsg = "XML conditional section '[' expected"; + break; + case XML_ERR_EXT_SUBSET_NOT_FINISHED: + errmsg = "Content error in the external subset"; + break; + case XML_ERR_CONDSEC_INVALID_KEYWORD: + errmsg = + "conditional section INCLUDE or IGNORE keyword expected"; + break; + case XML_ERR_CONDSEC_NOT_FINISHED: + errmsg = "XML conditional section not closed"; + break; + case XML_ERR_XMLDECL_NOT_STARTED: + errmsg = "Text declaration '' expected"; + break; + case XML_ERR_EXT_ENTITY_STANDALONE: + errmsg = "external parsed entities cannot be standalone"; + break; + case XML_ERR_ENTITYREF_SEMICOL_MISSING: + errmsg = "EntityRef: expecting ';'"; + break; + case XML_ERR_DOCTYPE_NOT_FINISHED: + errmsg = "DOCTYPE improperly terminated"; + break; + case XML_ERR_LTSLASH_REQUIRED: + errmsg = "EndTag: 'errNo = error; + if (info == NULL) { + __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_PARSER, error, + XML_ERR_FATAL, NULL, 0, info, NULL, NULL, 0, 0, "%s\n", + errmsg); + } else { + __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_PARSER, error, + XML_ERR_FATAL, NULL, 0, info, NULL, NULL, 0, 0, "%s: %s\n", + errmsg, info); + } + if (ctxt != NULL) { + 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 LIBXML_ATTR_FORMAT(3,0) +xmlFatalErrMsg(xmlParserCtxtPtr ctxt, xmlParserErrors error, + const char *msg) +{ + 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, 0, 0, "%s", msg); + if (ctxt != NULL) { + 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 LIBXML_ATTR_FORMAT(3,0) +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; + if ((ctxt != NULL) && (ctxt->sax != NULL) && + (ctxt->sax->initialized == XML_SAX2_MAGIC)) + schannel = ctxt->sax->serror; + if (ctxt != NULL) { + __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); + } else { + __xmlRaiseError(schannel, NULL, NULL, + 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 LIBXML_ATTR_FORMAT(3,0) +xmlValidityError(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; + if (ctxt != NULL) { + ctxt->errNo = error; + if ((ctxt->sax != NULL) && (ctxt->sax->initialized == XML_SAX2_MAGIC)) + schannel = ctxt->sax->serror; + } + if (ctxt != NULL) { + __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; + } else { + __xmlRaiseError(schannel, NULL, NULL, + 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); + } +} + +/** + * 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 LIBXML_ATTR_FORMAT(3,0) +xmlFatalErrMsgInt(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; + } +} + +/** + * 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 LIBXML_ATTR_FORMAT(3,0) +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; + 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, val, 0, msg, str1, val, str2); + if (ctxt != NULL) { + 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 LIBXML_ATTR_FORMAT(3,0) +xmlFatalErrMsgStr(xmlParserCtxtPtr ctxt, xmlParserErrors error, + const char *msg, const xmlChar * 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, (const char *) val, NULL, NULL, 0, 0, msg, + val); + if (ctxt != NULL) { + 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 LIBXML_ATTR_FORMAT(3,0) +xmlErrMsgStr(xmlParserCtxtPtr ctxt, xmlParserErrors error, + const char *msg, const xmlChar * 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_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 LIBXML_ATTR_FORMAT(3,0) +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; + if (ctxt != NULL) + 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); + if (ctxt != NULL) + ctxt->nsWellFormed = 0; +} + +/** + * xmlNsWarn + * @ctxt: an XML parser context + * @error: the error number + * @msg: the message + * @info1: extra information string + * @info2: extra information string + * + * Handle a namespace warning error + */ +static void LIBXML_ATTR_FORMAT(3,0) +xmlNsWarn(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; + __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_NAMESPACE, error, + XML_ERR_WARNING, NULL, 0, (const char *) info1, + (const char *) info2, (const char *) info3, 0, 0, msg, + info1, info2, info3); +} + +/************************************************************************ + * * + * Library wide options * + * * + ************************************************************************/ + +/** + * xmlHasFeature: + * @feature: the feature to be examined + * + * Examines if the library has been compiled with a given feature. + * + * Returns a non-zero value if the feature exist, otherwise zero. + * Returns zero (0) if the feature does not exist or an unknown + * unknown feature is requested, non-zero otherwise. + */ +int +xmlHasFeature(xmlFeature feature) +{ + switch (feature) { + case XML_WITH_THREAD: +#ifdef LIBXML_THREAD_ENABLED + return(1); +#else + return(0); +#endif + case XML_WITH_TREE: +#ifdef LIBXML_TREE_ENABLED + return(1); +#else + return(0); +#endif + case XML_WITH_OUTPUT: +#ifdef LIBXML_OUTPUT_ENABLED + return(1); +#else + return(0); +#endif + case XML_WITH_PUSH: +#ifdef LIBXML_PUSH_ENABLED + return(1); +#else + return(0); +#endif + case XML_WITH_READER: +#ifdef LIBXML_READER_ENABLED + return(1); +#else + return(0); +#endif + case XML_WITH_PATTERN: +#ifdef LIBXML_PATTERN_ENABLED + return(1); +#else + return(0); +#endif + case XML_WITH_WRITER: +#ifdef LIBXML_WRITER_ENABLED + return(1); +#else + return(0); +#endif + case XML_WITH_SAX1: +#ifdef LIBXML_SAX1_ENABLED + return(1); +#else + return(0); +#endif + case XML_WITH_FTP: +#ifdef LIBXML_FTP_ENABLED + return(1); +#else + return(0); +#endif + case XML_WITH_HTTP: +#ifdef LIBXML_HTTP_ENABLED + return(1); +#else + return(0); +#endif + case XML_WITH_VALID: +#ifdef LIBXML_VALID_ENABLED + return(1); +#else + return(0); +#endif + case XML_WITH_HTML: +#ifdef LIBXML_HTML_ENABLED + return(1); +#else + return(0); +#endif + case XML_WITH_LEGACY: +#ifdef LIBXML_LEGACY_ENABLED + return(1); +#else + return(0); +#endif + case XML_WITH_C14N: +#ifdef LIBXML_C14N_ENABLED + return(1); +#else + return(0); +#endif + case XML_WITH_CATALOG: +#ifdef LIBXML_CATALOG_ENABLED + return(1); +#else + return(0); +#endif + case XML_WITH_XPATH: +#ifdef LIBXML_XPATH_ENABLED + return(1); +#else + return(0); +#endif + case XML_WITH_XPTR: +#ifdef LIBXML_XPTR_ENABLED + return(1); +#else + return(0); +#endif + case XML_WITH_XINCLUDE: +#ifdef LIBXML_XINCLUDE_ENABLED + return(1); +#else + return(0); +#endif + case XML_WITH_ICONV: +#ifdef LIBXML_ICONV_ENABLED + return(1); +#else + return(0); +#endif + case XML_WITH_ISO8859X: +#ifdef LIBXML_ISO8859X_ENABLED + return(1); +#else + return(0); +#endif + case XML_WITH_UNICODE: +#ifdef LIBXML_UNICODE_ENABLED + return(1); +#else + return(0); +#endif + case XML_WITH_REGEXP: +#ifdef LIBXML_REGEXP_ENABLED + return(1); +#else + return(0); +#endif + case XML_WITH_AUTOMATA: +#ifdef LIBXML_AUTOMATA_ENABLED + return(1); +#else + return(0); +#endif + case XML_WITH_EXPR: +#ifdef LIBXML_EXPR_ENABLED + return(1); +#else + return(0); +#endif + case XML_WITH_SCHEMAS: +#ifdef LIBXML_SCHEMAS_ENABLED + return(1); +#else + return(0); +#endif + case XML_WITH_SCHEMATRON: +#ifdef LIBXML_SCHEMATRON_ENABLED + return(1); +#else + return(0); +#endif + case XML_WITH_MODULES: +#ifdef LIBXML_MODULES_ENABLED + return(1); +#else + return(0); +#endif + case XML_WITH_DEBUG: +#ifdef LIBXML_DEBUG_ENABLED + return(1); +#else + return(0); +#endif + case XML_WITH_DEBUG_MEM: +#ifdef DEBUG_MEMORY_LOCATION + return(1); +#else + return(0); +#endif + case XML_WITH_DEBUG_RUN: +#ifdef LIBXML_DEBUG_RUNTIME + return(1); +#else + return(0); +#endif + case XML_WITH_ZLIB: +#ifdef LIBXML_ZLIB_ENABLED + return(1); +#else + return(0); +#endif + case XML_WITH_LZMA: +#ifdef LIBXML_LZMA_ENABLED + return(1); +#else + return(0); +#endif + case XML_WITH_ICU: +#ifdef LIBXML_ICU_ENABLED + return(1); +#else + return(0); +#endif + default: + break; + } + return(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); + if ((ctxt->str_xml==NULL) || (ctxt->str_xmlns==NULL) || + (ctxt->str_xml_ns == NULL)) { + xmlErrMemory(ctxt, NULL); + } +} + +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[5]; /* array of localname/prefix/values/external */ +}; + +/** + * xmlAttrNormalizeSpace: + * @src: the source string + * @dst: the target string + * + * Normalize the space in non CDATA attribute values: + * If the attribute type 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. + * Note that the size of dst need to be at least src, and if one doesn't need + * to preserve dst (and it doesn't come from a dictionary or read-only) then + * passing src as dst is just fine. + * + * Returns a pointer to the normalized value (dst) or NULL if no conversion + * is needed. + */ +static xmlChar * +xmlAttrNormalizeSpace(const xmlChar *src, xmlChar *dst) +{ + if ((src == NULL) || (dst == NULL)) + return(NULL); + + 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 (dst == src) + return(NULL); + return(dst); +} + +/** + * xmlAttrNormalizeSpace2: + * @src: the source string + * + * Normalize the space in non CDATA attribute values, a slightly more complex + * front end to avoid allocation problems when running on attribute values + * coming from the input. + * + * Returns a pointer to the normalized value (dst) or NULL if no conversion + * is needed. + */ +static const xmlChar * +xmlAttrNormalizeSpace2(xmlParserCtxtPtr ctxt, xmlChar *src, int *len) +{ + int i; + int remove_head = 0; + int need_realloc = 0; + const xmlChar *cur; + + if ((ctxt == NULL) || (src == NULL) || (len == NULL)) + return(NULL); + i = *len; + if (i <= 0) + return(NULL); + + cur = src; + while (*cur == 0x20) { + cur++; + remove_head++; + } + while (*cur != 0) { + if (*cur == 0x20) { + cur++; + if ((*cur == 0x20) || (*cur == 0)) { + need_realloc = 1; + break; + } + } else + cur++; + } + if (need_realloc) { + xmlChar *ret; + + ret = xmlStrndup(src + remove_head, i - remove_head + 1); + if (ret == NULL) { + xmlErrMemory(ctxt, NULL); + return(NULL); + } + xmlAttrNormalizeSpace(ret, ret); + *len = (int) strlen((const char *)ret); + return(ret); + } else if (remove_head) { + *len -= remove_head; + memmove(src, src + remove_head, 1 + *len); + return(src); + } + return(NULL); +} + +/** + * 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; + + /* + * Allows to detect attribute redefinitions + */ + if (ctxt->attsSpecial != NULL) { + if (xmlHashLookup2(ctxt->attsSpecial, fullname, fullattr) != NULL) + return; + } + + if (ctxt->attsDefault == NULL) { + ctxt->attsDefault = xmlHashCreateDict(10, ctxt->dict); + if (ctxt->attsDefault == NULL) + goto mem_error; + } + + /* + * split the element name into prefix:localname , the string found + * are within the DTD and then 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) + + (4 * 5) * sizeof(const xmlChar *)); + if (defaults == NULL) + goto mem_error; + defaults->nbAttrs = 0; + defaults->maxAttrs = 4; + if (xmlHashUpdateEntry2(ctxt->attsDefault, name, prefix, + defaults, NULL) < 0) { + xmlFree(defaults); + goto mem_error; + } + } else if (defaults->nbAttrs >= defaults->maxAttrs) { + xmlDefAttrsPtr temp; + + temp = (xmlDefAttrsPtr) xmlRealloc(defaults, sizeof(xmlDefAttrs) + + (2 * defaults->maxAttrs * 5) * sizeof(const xmlChar *)); + if (temp == NULL) + goto mem_error; + defaults = temp; + defaults->maxAttrs *= 2; + if (xmlHashUpdateEntry2(ctxt->attsDefault, name, prefix, + defaults, NULL) < 0) { + xmlFree(defaults); + goto mem_error; + } + } + + /* + * Split the element name into prefix:localname , the string found + * are within the DTD and hen not associated to namespace names. + */ + name = xmlSplitQName3(fullattr, &len); + 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[5 * defaults->nbAttrs] = name; + defaults->values[5 * defaults->nbAttrs + 1] = prefix; + /* intern the string and precompute the end */ + len = xmlStrlen(value); + value = xmlDictLookup(ctxt->dict, value, len); + defaults->values[5 * defaults->nbAttrs + 2] = value; + defaults->values[5 * defaults->nbAttrs + 3] = value + len; + if (ctxt->external) + defaults->values[5 * defaults->nbAttrs + 4] = BAD_CAST "external"; + else + defaults->values[5 * defaults->nbAttrs + 4] = NULL; + 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 this attribute type + */ +static void +xmlAddSpecialAttr(xmlParserCtxtPtr ctxt, + const xmlChar *fullname, + const xmlChar *fullattr, + int type) +{ + if (ctxt->attsSpecial == NULL) { + ctxt->attsSpecial = xmlHashCreateDict(10, ctxt->dict); + if (ctxt->attsSpecial == NULL) + goto mem_error; + } + + if (xmlHashLookup2(ctxt->attsSpecial, fullname, fullattr) != NULL) + return; + + xmlHashAddEntry2(ctxt->attsSpecial, fullname, fullattr, + (void *) (long) type); + return; + +mem_error: + xmlErrMemory(ctxt, NULL); + return; +} + +/** + * xmlCleanSpecialAttrCallback: + * + * Removes CDATA attributes from the special attribute table + */ +static void +xmlCleanSpecialAttrCallback(void *payload, void *data, + const xmlChar *fullname, const xmlChar *fullattr, + const xmlChar *unused ATTRIBUTE_UNUSED) { + xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) data; + + if (((long) payload) == XML_ATTRIBUTE_CDATA) { + xmlHashRemoveEntry2(ctxt->attsSpecial, fullname, fullattr, NULL); + } +} + +/** + * xmlCleanSpecialAttr: + * @ctxt: an XML parser context + * + * Trim the list of attributes defined to remove all those of type + * CDATA as they are not special. This call should be done when finishing + * to parse the DTD and before starting to parse the document root. + */ +static void +xmlCleanSpecialAttr(xmlParserCtxtPtr ctxt) +{ + if (ctxt->attsSpecial == NULL) + return; + + xmlHashScanFull(ctxt->attsSpecial, xmlCleanSpecialAttrCallback, ctxt); + + if (xmlHashSize(ctxt->attsSpecial) == 0) { + xmlHashFree(ctxt->attsSpecial, NULL); + ctxt->attsSpecial = 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])+ + * + * The current REC reference the sucessors of RFC 1766, currently 5646 + * + * http://www.rfc-editor.org/rfc/rfc5646.txt + * langtag = language + * ["-" script] + * ["-" region] + * *("-" variant) + * *("-" extension) + * ["-" privateuse] + * language = 2*3ALPHA ; shortest ISO 639 code + * ["-" extlang] ; sometimes followed by + * ; extended language subtags + * / 4ALPHA ; or reserved for future use + * / 5*8ALPHA ; or registered language subtag + * + * extlang = 3ALPHA ; selected ISO 639 codes + * *2("-" 3ALPHA) ; permanently reserved + * + * script = 4ALPHA ; ISO 15924 code + * + * region = 2ALPHA ; ISO 3166-1 code + * / 3DIGIT ; UN M.49 code + * + * variant = 5*8alphanum ; registered variants + * / (DIGIT 3alphanum) + * + * extension = singleton 1*("-" (2*8alphanum)) + * + * ; Single alphanumerics + * ; "x" reserved for private use + * singleton = DIGIT ; 0 - 9 + * / %x41-57 ; A - W + * / %x59-5A ; Y - Z + * / %x61-77 ; a - w + * / %x79-7A ; y - z + * + * it sounds right to still allow Irregular i-xxx IANA and user codes too + * The parser below doesn't try to cope with extension or privateuse + * that could be added but that's not interoperable anyway + * + * Returns 1 if correct 0 otherwise + **/ +int +xmlCheckLanguageID(const xmlChar * lang) +{ + const xmlChar *cur = lang, *nxt; + + if (cur == NULL) + return (0); + if (((cur[0] == 'i') && (cur[1] == '-')) || + ((cur[0] == 'I') && (cur[1] == '-')) || + ((cur[0] == 'x') && (cur[1] == '-')) || + ((cur[0] == 'X') && (cur[1] == '-'))) { + /* + * Still allow IANA code and user code which were coming + * from the previous version of the XML-1.0 specification + * it's deprecated but we should not fail + */ + cur += 2; + while (((cur[0] >= 'A') && (cur[0] <= 'Z')) || + ((cur[0] >= 'a') && (cur[0] <= 'z'))) + cur++; + return(cur[0] == 0); + } + nxt = cur; + while (((nxt[0] >= 'A') && (nxt[0] <= 'Z')) || + ((nxt[0] >= 'a') && (nxt[0] <= 'z'))) + nxt++; + if (nxt - cur >= 4) { + /* + * Reserved + */ + if ((nxt - cur > 8) || (nxt[0] != 0)) + return(0); + return(1); + } + if (nxt - cur < 2) + return(0); + /* we got an ISO 639 code */ + if (nxt[0] == 0) + return(1); + if (nxt[0] != '-') + return(0); + + nxt++; + cur = nxt; + /* now we can have extlang or script or region or variant */ + if ((nxt[0] >= '0') && (nxt[0] <= '9')) + goto region_m49; + + while (((nxt[0] >= 'A') && (nxt[0] <= 'Z')) || + ((nxt[0] >= 'a') && (nxt[0] <= 'z'))) + nxt++; + if (nxt - cur == 4) + goto script; + if (nxt - cur == 2) + goto region; + if ((nxt - cur >= 5) && (nxt - cur <= 8)) + goto variant; + if (nxt - cur != 3) + return(0); + /* we parsed an extlang */ + if (nxt[0] == 0) + return(1); + if (nxt[0] != '-') + return(0); + + nxt++; + cur = nxt; + /* now we can have script or region or variant */ + if ((nxt[0] >= '0') && (nxt[0] <= '9')) + goto region_m49; + + while (((nxt[0] >= 'A') && (nxt[0] <= 'Z')) || + ((nxt[0] >= 'a') && (nxt[0] <= 'z'))) + nxt++; + if (nxt - cur == 2) + goto region; + if ((nxt - cur >= 5) && (nxt - cur <= 8)) + goto variant; + if (nxt - cur != 4) + return(0); + /* we parsed a script */ +script: + if (nxt[0] == 0) + return(1); + if (nxt[0] != '-') + return(0); + + nxt++; + cur = nxt; + /* now we can have region or variant */ + if ((nxt[0] >= '0') && (nxt[0] <= '9')) + goto region_m49; + + while (((nxt[0] >= 'A') && (nxt[0] <= 'Z')) || + ((nxt[0] >= 'a') && (nxt[0] <= 'z'))) + nxt++; + + if ((nxt - cur >= 5) && (nxt - cur <= 8)) + goto variant; + if (nxt - cur != 2) + return(0); + /* we parsed a region */ +region: + if (nxt[0] == 0) + return(1); + if (nxt[0] != '-') + return(0); + + nxt++; + cur = nxt; + /* now we can just have a variant */ + while (((nxt[0] >= 'A') && (nxt[0] <= 'Z')) || + ((nxt[0] >= 'a') && (nxt[0] <= 'z'))) + nxt++; + + if ((nxt - cur < 5) || (nxt - cur > 8)) + return(0); + + /* we parsed a variant */ +variant: + if (nxt[0] == 0) + return(1); + if (nxt[0] != '-') + return(0); + /* extensions and private use subtags not checked */ + return (1); + +region_m49: + if (((nxt[1] >= '0') && (nxt[1] <= '9')) && + ((nxt[2] >= '0') && (nxt[2] <= '9'))) { + nxt += 3; + goto region; + } + return(0); +} + +/************************************************************************ + * * + * Parser stacks related functions and macros * + * * + ************************************************************************/ + +static 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 = ctxt->nsNr - 2;i >= 0;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) { + const xmlChar ** tmp; + ctxt->nsMax *= 2; + tmp = (const xmlChar **) xmlRealloc((char *) ctxt->nsTab, + ctxt->nsMax * sizeof(ctxt->nsTab[0])); + if (tmp == NULL) { + xmlErrMemory(ctxt, NULL); + ctxt->nsMax /= 2; + return (-1); + } + ctxt->nsTab = tmp; + } + 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 -1 in case of error, the index in the stack otherwise + */ +int +inputPush(xmlParserCtxtPtr ctxt, xmlParserInputPtr value) +{ + if ((ctxt == NULL) || (value == NULL)) + return(-1); + 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); + xmlFreeInputStream(value); + ctxt->inputMax /= 2; + value = NULL; + return (-1); + } + } + 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 + */ +xmlParserInputPtr +inputPop(xmlParserCtxtPtr ctxt) +{ + xmlParserInputPtr ret; + + if (ctxt == NULL) + return(NULL); + if (ctxt->inputNr <= 0) + return (NULL); + ctxt->inputNr--; + if (ctxt->inputNr > 0) + ctxt->input = ctxt->inputTab[ctxt->inputNr - 1]; + else + ctxt->input = NULL; + ret = ctxt->inputTab[ctxt->inputNr]; + ctxt->inputTab[ctxt->inputNr] = NULL; + return (ret); +} +/** + * nodePush: + * @ctxt: an XML parser context + * @value: the element node + * + * Pushes a new element node on top of the node stack + * + * Returns -1 in case of error, the index in the stack otherwise + */ +int +nodePush(xmlParserCtxtPtr ctxt, xmlNodePtr value) +{ + if (ctxt == NULL) return(0); + if (ctxt->nodeNr >= ctxt->nodeMax) { + xmlNodePtr *tmp; + + tmp = (xmlNodePtr *) xmlRealloc(ctxt->nodeTab, + ctxt->nodeMax * 2 * + sizeof(ctxt->nodeTab[0])); + if (tmp == NULL) { + xmlErrMemory(ctxt, NULL); + return (-1); + } + ctxt->nodeTab = tmp; + ctxt->nodeMax *= 2; + } + if ((((unsigned int) ctxt->nodeNr) > xmlParserMaxDepth) && + ((ctxt->options & XML_PARSE_HUGE) == 0)) { + xmlFatalErrMsgInt(ctxt, XML_ERR_INTERNAL_ERROR, + "Excessive depth in document: %d use XML_PARSE_HUGE option\n", + xmlParserMaxDepth); + xmlHaltParser(ctxt); + return(-1); + } + 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 + */ +xmlNodePtr +nodePop(xmlParserCtxtPtr ctxt) +{ + xmlNodePtr ret; + + if (ctxt == NULL) return(NULL); + if (ctxt->nodeNr <= 0) + return (NULL); + ctxt->nodeNr--; + if (ctxt->nodeNr > 0) + ctxt->node = ctxt->nodeTab[ctxt->nodeNr - 1]; + else + ctxt->node = NULL; + ret = ctxt->nodeTab[ctxt->nodeNr]; + ctxt->nodeTab[ctxt->nodeNr] = NULL; + return (ret); +} + +#ifdef LIBXML_PUSH_ENABLED +/** + * 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 (NULL); + 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); +} +#endif /* LIBXML_PUSH_ENABLED */ + +/** + * 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 + */ +int +namePush(xmlParserCtxtPtr ctxt, const xmlChar * value) +{ + if (ctxt == NULL) return (-1); + + if (ctxt->nameNr >= ctxt->nameMax) { + const xmlChar * *tmp; + tmp = (const xmlChar * *) xmlRealloc((xmlChar * *)ctxt->nameTab, + ctxt->nameMax * 2 * + sizeof(ctxt->nameTab[0])); + if (tmp == NULL) { + goto mem_error; + } + ctxt->nameTab = tmp; + ctxt->nameMax *= 2; + } + 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 + */ +const xmlChar * +namePop(xmlParserCtxtPtr ctxt) +{ + const xmlChar *ret; + + if ((ctxt == NULL) || (ctxt->nameNr <= 0)) + return (NULL); + 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); +} + +static int spacePush(xmlParserCtxtPtr ctxt, int val) { + if (ctxt->spaceNr >= ctxt->spaceMax) { + int *tmp; + + ctxt->spaceMax *= 2; + tmp = (int *) xmlRealloc(ctxt->spaceTab, + ctxt->spaceMax * sizeof(ctxt->spaceTab[0])); + if (tmp == NULL) { + xmlErrMemory(ctxt, NULL); + ctxt->spaceMax /=2; + return(-1); + } + ctxt->spaceTab = tmp; + } + 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 = &ctxt->spaceTab[0]; + 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 BASE_PTR ctxt->input->base + +#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 SKIPL(val) do { \ + int skipl; \ + for(skipl=0; skiplinput->cur) == '\n') { \ + ctxt->input->line++; ctxt->input->col = 1; \ + } else ctxt->input->col++; \ + ctxt->nbChars++; \ + ctxt->input->cur++; \ + } \ + 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) { + unsigned long curEnd = ctxt->input->end - ctxt->input->cur; + unsigned long curBase = ctxt->input->cur - ctxt->input->base; + + if (((curEnd > (unsigned long) XML_MAX_LOOKUP_LIMIT) || + (curBase > (unsigned long) XML_MAX_LOOKUP_LIMIT)) && + ((ctxt->input->buf) && (ctxt->input->buf->readcallback != (xmlInputReadCallback) xmlNop)) && + ((ctxt->options & XML_PARSE_HUGE) == 0)) { + xmlFatalErr(ctxt, XML_ERR_INTERNAL_ERROR, "Huge input lookup"); + xmlHaltParser(ctxt); + return; + } + xmlParserInputGrow(ctxt->input, INPUT_CHUNK); + if ((ctxt->input->cur > ctxt->input->end) || + (ctxt->input->cur < ctxt->input->base)) { + xmlHaltParser(ctxt); + xmlFatalErr(ctxt, XML_ERR_INTERNAL_ERROR, "cur index out of bound"); + return; + } + if ((ctxt->input->cur != NULL) && (*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; + } else { + ctxt->input->col++; + } + 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_CH(cur) && /* CHECKED tstblanks.xml */ + (ctxt->instate != XML_PARSER_EOF))) { + 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 */ + (ctxt->instate != XML_PARSER_EOF)); + } + 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 == NULL) || (ctxt->inputNr <= 1)) return(0); + 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). + * Returns -1 in case of error or the index in the input stack + */ +int +xmlPushInput(xmlParserCtxtPtr ctxt, xmlParserInputPtr input) { + int ret; + if (input == NULL) return(-1); + + 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); + } + ret = inputPush(ctxt, input); + if (ctxt->instate == XML_PARSER_EOF) + return(-1); + GROW; + return(ret); +} + +/** + * 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; + unsigned int outofrange = 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 (ctxt->instate == XML_PARSER_EOF) + return(0); + } + 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; + } + if (val > 0x10FFFF) + outofrange = val; + + 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 (ctxt->instate == XML_PARSER_EOF) + return(0); + } + if ((RAW >= '0') && (RAW <= '9')) + val = val * 10 + (CUR - '0'); + else { + xmlFatalErr(ctxt, XML_ERR_INVALID_DEC_CHARREF, NULL); + val = 0; + break; + } + if (val > 0x10FFFF) + outofrange = val; + + 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) && (outofrange == 0))) { + 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; + unsigned int val = 0; + unsigned int outofrange = 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; + } + if (val > 0x10FFFF) + outofrange = val; + + 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; + } + if (val > 0x10FFFF) + outofrange = val; + + 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) && (outofrange == 0))) { + 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); + xmlFree(input); + 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 (ctxt->instate == XML_PARSER_EOF) + return; + 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, NULL); + } else + xmlWarningMsg(ctxt, XML_WAR_UNDECLARED_ENTITY, + "PEReference: %%%s; not found\n", + name, NULL); + ctxt->valid = 0; + } + xmlParserEntityCheck(ctxt, 0, NULL, 0); + } else if (ctxt->input->free != deallocblankswrapper) { + input = xmlNewBlanksWrapperInputStream(ctxt, entity); + if (xmlPushInput(ctxt, input) < 0) + return; + } else { + if ((entity->etype == XML_INTERNAL_PARAMETER_ENTITY) || + (entity->etype == XML_EXTERNAL_PARAMETER_ENTITY)) { + xmlChar start[4]; + xmlCharEncoding enc; + + /* + * Note: external parameter entities will not be loaded, it + * is not required for a non-validating parser, unless the + * option of validating, or substituting entities were + * given. Doing so is far more secure as the parser will + * only process data coming from the document entity by + * default. + */ + if ((entity->etype == XML_EXTERNAL_PARAMETER_ENTITY) && + ((ctxt->options & XML_PARSE_NOENT) == 0) && + ((ctxt->options & XML_PARSE_DTDVALID) == 0) && + ((ctxt->options & XML_PARSE_DTDLOAD) == 0) && + ((ctxt->options & XML_PARSE_DTDATTR) == 0) && + (ctxt->replaceEntities == 0) && + (ctxt->validate == 0)) + return; + + /* + * handle the extra spaces added before and after + * c.f. http://www.w3.org/TR/REC-xml#as-PE + * this is done independently. + */ + input = xmlNewEntityInputStream(ctxt, entity); + if (xmlPushInput(ctxt, input) < 0) + return; + + /* + * Get the 4 first bytes and decode the charset + * if enc != XML_CHAR_ENCODING_NONE + * plug some encoding conversion routines. + * Note that, since we may have some non-UTF8 + * encoding (like UTF16, bug 135229), the 'length' + * is not known, but we can calculate based upon + * the amount of data in the buffer. + */ + GROW + if (ctxt->instate == XML_PARSER_EOF) + return; + if ((ctxt->input->end - ctxt->input->cur)>=4) { + start[0] = RAW; + start[1] = NXT(1); + 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. + * buffer##_size is expected to be a size_t + * mem_error: is expected to handle memory allocation failures + */ +#define growBuffer(buffer, n) { \ + xmlChar *tmp; \ + size_t new_size = buffer##_size * 2 + n; \ + if (new_size < buffer##_size) goto mem_error; \ + tmp = (xmlChar *) xmlRealloc(buffer, new_size); \ + if (tmp == NULL) goto mem_error; \ + buffer = tmp; \ + buffer##_size = new_size; \ +} + +/** + * 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; + size_t buffer_size = 0; + size_t nbchars = 0; + + xmlChar *current = NULL; + xmlChar *rep = NULL; + const xmlChar *last; + xmlEntityPtr ent; + int c,l; + + if ((ctxt == NULL) || (str == NULL) || (len < 0)) + return(NULL); + last = str + len; + + if (((ctxt->depth > 40) && + ((ctxt->options & XML_PARSE_HUGE) == 0)) || + (ctxt->depth > 1024)) { + 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); + 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); + } + if (nbchars + XML_PARSER_BUFFER_SIZE > buffer_size) { + growBuffer(buffer, XML_PARSER_BUFFER_SIZE); + } + } else if ((c == '&') && (what & XML_SUBSTITUTE_REF)) { + if (xmlParserDebugEntities) + xmlGenericError(xmlGenericErrorContext, + "String decoding Entity Reference: %.30s\n", + str); + ent = xmlParseStringEntityRef(ctxt, &str); + if ((ctxt->lastError.code == XML_ERR_ENTITY_LOOP) || + (ctxt->lastError.code == XML_ERR_INTERNAL_ERROR)) + goto int_error; + xmlParserEntityCheck(ctxt, 0, ent, 0); + if (ent != NULL) + ctxt->nbentities += ent->checked / 2; + if ((ent != NULL) && + (ent->etype == XML_INTERNAL_PREDEFINED_ENTITY)) { + if (ent->content != NULL) { + COPY_BUF(0,buffer,nbchars,ent->content[0]); + if (nbchars + XML_PARSER_BUFFER_SIZE > buffer_size) { + growBuffer(buffer, XML_PARSER_BUFFER_SIZE); + } + } else { + xmlFatalErrMsg(ctxt, XML_ERR_INTERNAL_ERROR, + "predefined entity has no content\n"); + } + } else if ((ent != NULL) && (ent->content != NULL)) { + ctxt->depth++; + rep = xmlStringDecodeEntities(ctxt, ent->content, what, + 0, 0, 0); + ctxt->depth--; + + if ((ctxt->lastError.code == XML_ERR_ENTITY_LOOP) || + (ctxt->lastError.code == XML_ERR_INTERNAL_ERROR)) + goto int_error; + + if (rep != NULL) { + current = rep; + while (*current != 0) { /* non input consuming loop */ + buffer[nbchars++] = *current++; + if (nbchars + XML_PARSER_BUFFER_SIZE > buffer_size) { + if (xmlParserEntityCheck(ctxt, nbchars, ent, 0)) + goto int_error; + growBuffer(buffer, XML_PARSER_BUFFER_SIZE); + } + } + xmlFree(rep); + rep = NULL; + } + } else if (ent != NULL) { + int i = xmlStrlen(ent->name); + const xmlChar *cur = ent->name; + + buffer[nbchars++] = '&'; + if (nbchars + i + XML_PARSER_BUFFER_SIZE > buffer_size) { + growBuffer(buffer, i + XML_PARSER_BUFFER_SIZE); + } + 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 (ctxt->lastError.code == XML_ERR_ENTITY_LOOP) + goto int_error; + xmlParserEntityCheck(ctxt, 0, ent, 0); + if (ent != NULL) + ctxt->nbentities += ent->checked / 2; + if (ent != NULL) { + if (ent->content == NULL) { + /* + * Note: external parsed entities will not be loaded, + * it is not required for a non-validating parser to + * complete external PEreferences coming from the + * internal subset + */ + if (((ctxt->options & XML_PARSE_NOENT) != 0) || + ((ctxt->options & XML_PARSE_DTDVALID) != 0) || + (ctxt->validate != 0)) { + xmlLoadEntityContent(ctxt, ent); + } else { + xmlWarningMsg(ctxt, XML_ERR_ENTITY_PROCESSING, + "not validating will not read content for PE entity %s\n", + ent->name, NULL); + } + } + 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 + XML_PARSER_BUFFER_SIZE > buffer_size) { + if (xmlParserEntityCheck(ctxt, nbchars, ent, 0)) + goto int_error; + growBuffer(buffer, XML_PARSER_BUFFER_SIZE); + } + } + xmlFree(rep); + rep = NULL; + } + } + } else { + COPY_BUF(l,buffer,nbchars,c); + str += l; + if (nbchars + XML_PARSER_BUFFER_SIZE > buffer_size) { + growBuffer(buffer, XML_PARSER_BUFFER_SIZE); + } + } + if (str < last) + c = CUR_SCHAR(str, l); + else + c = 0; + } + buffer[nbchars] = 0; + return(buffer); + +mem_error: + xmlErrMemory(ctxt, NULL); +int_error: + if (rep != NULL) + xmlFree(rep); + if (buffer != NULL) + xmlFree(buffer); + 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) { + if ((ctxt == NULL) || (str == NULL)) return(NULL); + 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 == NULL) || (*(ctxt->space) == 1) || + (*(ctxt->space) == -2)) + 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 != '<') && (RAW != 0xD)) 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; + + if (prefix == NULL) return(NULL); + *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) { + xmlChar *tmp; + + max *= 2; + tmp = (xmlChar *) xmlRealloc(buffer, + max * sizeof(xmlChar)); + if (tmp == NULL) { + xmlFree(buffer); + xmlErrMemory(ctxt, NULL); + return(NULL); + } + buffer = tmp; + } + buffer[len++] = c; + c = *cur++; + } + buffer[len] = 0; + } + + if ((c == ':') && (*cur == 0)) { + if (buffer != NULL) + xmlFree(buffer); + *prefix = NULL; + 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) { + xmlChar *tmp; + + max *= 2; + tmp = (xmlChar *) xmlRealloc(buffer, + max * sizeof(xmlChar)); + if (tmp == NULL) { + xmlErrMemory(ctxt, NULL); + xmlFree(buffer); + return(NULL); + } + buffer = tmp; + } + 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 * + * * + ************************************************************************/ + +/************************************************************************ + * * + * Routines to parse Name, NCName and NmToken * + * * + ************************************************************************/ +#ifdef DEBUG +static unsigned long nbParseName = 0; +static unsigned long nbParseNmToken = 0; +static unsigned long nbParseNCName = 0; +static unsigned long nbParseNCNameComplex = 0; +static unsigned long nbParseNameComplex = 0; +static unsigned long nbParseStringName = 0; +#endif + +/* + * The two following functions are related to the change of accepted + * characters for Name and NmToken in the Revision 5 of XML-1.0 + * They correspond to the modified production [4] and the new production [4a] + * changes in that revision. Also note that the macros used for the + * productions Letter, Digit, CombiningChar and Extender are not needed + * anymore. + * We still keep compatibility to pre-revision5 parsing semantic if the + * new XML_PARSE_OLD10 option is given to the parser. + */ +static int +xmlIsNameStartChar(xmlParserCtxtPtr ctxt, int c) { + if ((ctxt->options & XML_PARSE_OLD10) == 0) { + /* + * Use the new checks of production [4] [4a] amd [5] of the + * Update 5 of XML-1.0 + */ + if ((c != ' ') && (c != '>') && (c != '/') && /* accelerators */ + (((c >= 'a') && (c <= 'z')) || + ((c >= 'A') && (c <= 'Z')) || + (c == '_') || (c == ':') || + ((c >= 0xC0) && (c <= 0xD6)) || + ((c >= 0xD8) && (c <= 0xF6)) || + ((c >= 0xF8) && (c <= 0x2FF)) || + ((c >= 0x370) && (c <= 0x37D)) || + ((c >= 0x37F) && (c <= 0x1FFF)) || + ((c >= 0x200C) && (c <= 0x200D)) || + ((c >= 0x2070) && (c <= 0x218F)) || + ((c >= 0x2C00) && (c <= 0x2FEF)) || + ((c >= 0x3001) && (c <= 0xD7FF)) || + ((c >= 0xF900) && (c <= 0xFDCF)) || + ((c >= 0xFDF0) && (c <= 0xFFFD)) || + ((c >= 0x10000) && (c <= 0xEFFFF)))) + return(1); + } else { + if (IS_LETTER(c) || (c == '_') || (c == ':')) + return(1); + } + return(0); +} + +static int +xmlIsNameChar(xmlParserCtxtPtr ctxt, int c) { + if ((ctxt->options & XML_PARSE_OLD10) == 0) { + /* + * Use the new checks of production [4] [4a] amd [5] of the + * Update 5 of XML-1.0 + */ + if ((c != ' ') && (c != '>') && (c != '/') && /* accelerators */ + (((c >= 'a') && (c <= 'z')) || + ((c >= 'A') && (c <= 'Z')) || + ((c >= '0') && (c <= '9')) || /* !start */ + (c == '_') || (c == ':') || + (c == '-') || (c == '.') || (c == 0xB7) || /* !start */ + ((c >= 0xC0) && (c <= 0xD6)) || + ((c >= 0xD8) && (c <= 0xF6)) || + ((c >= 0xF8) && (c <= 0x2FF)) || + ((c >= 0x300) && (c <= 0x36F)) || /* !start */ + ((c >= 0x370) && (c <= 0x37D)) || + ((c >= 0x37F) && (c <= 0x1FFF)) || + ((c >= 0x200C) && (c <= 0x200D)) || + ((c >= 0x203F) && (c <= 0x2040)) || /* !start */ + ((c >= 0x2070) && (c <= 0x218F)) || + ((c >= 0x2C00) && (c <= 0x2FEF)) || + ((c >= 0x3001) && (c <= 0xD7FF)) || + ((c >= 0xF900) && (c <= 0xFDCF)) || + ((c >= 0xFDF0) && (c <= 0xFFFD)) || + ((c >= 0x10000) && (c <= 0xEFFFF)))) + return(1); + } else { + if ((IS_LETTER(c)) || (IS_DIGIT(c)) || + (c == '.') || (c == '-') || + (c == '_') || (c == ':') || + (IS_COMBINING(c)) || + (IS_EXTENDER(c))) + return(1); + } + return(0); +} + +static xmlChar * xmlParseAttValueInternal(xmlParserCtxtPtr ctxt, + int *len, int *alloc, int normalize); + +static const xmlChar * +xmlParseNameComplex(xmlParserCtxtPtr ctxt) { + int len = 0, l; + int c; + int count = 0; + +#ifdef DEBUG + nbParseNameComplex++; +#endif + + /* + * Handler for more complex cases + */ + GROW; + if (ctxt->instate == XML_PARSER_EOF) + return(NULL); + c = CUR_CHAR(l); + if ((ctxt->options & XML_PARSE_OLD10) == 0) { + /* + * Use the new checks of production [4] [4a] amd [5] of the + * Update 5 of XML-1.0 + */ + if ((c == ' ') || (c == '>') || (c == '/') || /* accelerators */ + (!(((c >= 'a') && (c <= 'z')) || + ((c >= 'A') && (c <= 'Z')) || + (c == '_') || (c == ':') || + ((c >= 0xC0) && (c <= 0xD6)) || + ((c >= 0xD8) && (c <= 0xF6)) || + ((c >= 0xF8) && (c <= 0x2FF)) || + ((c >= 0x370) && (c <= 0x37D)) || + ((c >= 0x37F) && (c <= 0x1FFF)) || + ((c >= 0x200C) && (c <= 0x200D)) || + ((c >= 0x2070) && (c <= 0x218F)) || + ((c >= 0x2C00) && (c <= 0x2FEF)) || + ((c >= 0x3001) && (c <= 0xD7FF)) || + ((c >= 0xF900) && (c <= 0xFDCF)) || + ((c >= 0xFDF0) && (c <= 0xFFFD)) || + ((c >= 0x10000) && (c <= 0xEFFFF))))) { + return(NULL); + } + len += l; + NEXTL(l); + c = CUR_CHAR(l); + while ((c != ' ') && (c != '>') && (c != '/') && /* accelerators */ + (((c >= 'a') && (c <= 'z')) || + ((c >= 'A') && (c <= 'Z')) || + ((c >= '0') && (c <= '9')) || /* !start */ + (c == '_') || (c == ':') || + (c == '-') || (c == '.') || (c == 0xB7) || /* !start */ + ((c >= 0xC0) && (c <= 0xD6)) || + ((c >= 0xD8) && (c <= 0xF6)) || + ((c >= 0xF8) && (c <= 0x2FF)) || + ((c >= 0x300) && (c <= 0x36F)) || /* !start */ + ((c >= 0x370) && (c <= 0x37D)) || + ((c >= 0x37F) && (c <= 0x1FFF)) || + ((c >= 0x200C) && (c <= 0x200D)) || + ((c >= 0x203F) && (c <= 0x2040)) || /* !start */ + ((c >= 0x2070) && (c <= 0x218F)) || + ((c >= 0x2C00) && (c <= 0x2FEF)) || + ((c >= 0x3001) && (c <= 0xD7FF)) || + ((c >= 0xF900) && (c <= 0xFDCF)) || + ((c >= 0xFDF0) && (c <= 0xFFFD)) || + ((c >= 0x10000) && (c <= 0xEFFFF)) + )) { + if (count++ > XML_PARSER_CHUNK_SIZE) { + count = 0; + GROW; + if (ctxt->instate == XML_PARSER_EOF) + return(NULL); + } + len += l; + NEXTL(l); + c = CUR_CHAR(l); + } + } else { + if ((c == ' ') || (c == '>') || (c == '/') || /* accelerators */ + (!IS_LETTER(c) && (c != '_') && + (c != ':'))) { + return(NULL); + } + len += l; + NEXTL(l); + c = CUR_CHAR(l); + + 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++ > XML_PARSER_CHUNK_SIZE) { + count = 0; + GROW; + if (ctxt->instate == XML_PARSER_EOF) + return(NULL); + } + len += l; + NEXTL(l); + c = CUR_CHAR(l); + if (c == 0) { + count = 0; + GROW; + if (ctxt->instate == XML_PARSER_EOF) + return(NULL); + c = CUR_CHAR(l); + } + } + } + if ((len > XML_MAX_NAME_LENGTH) && + ((ctxt->options & XML_PARSE_HUGE) == 0)) { + xmlFatalErr(ctxt, XML_ERR_NAME_TOO_LONG, "Name"); + return(NULL); + } + if ((*ctxt->input->cur == '\n') && (ctxt->input->cur[-1] == '\r')) + return(xmlDictLookup(ctxt->dict, ctxt->input->cur - (len + 1), len)); + return(xmlDictLookup(ctxt->dict, ctxt->input->cur - len, len)); +} + +/** + * xmlParseName: + * @ctxt: an XML parser context + * + * parse an XML name. + * + * [4] NameChar ::= Letter | Digit | '.' | '-' | '_' | ':' | + * CombiningChar | Extender + * + * [5] Name ::= (Letter | '_' | ':') (NameChar)* + * + * [6] Names ::= Name (#x20 Name)* + * + * Returns the Name parsed or NULL + */ + +const xmlChar * +xmlParseName(xmlParserCtxtPtr ctxt) { + const xmlChar *in; + const xmlChar *ret; + int count = 0; + + GROW; + +#ifdef DEBUG + nbParseName++; +#endif + + /* + * 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; + if ((count > XML_MAX_NAME_LENGTH) && + ((ctxt->options & XML_PARSE_HUGE) == 0)) { + xmlFatalErr(ctxt, XML_ERR_NAME_TOO_LONG, "Name"); + return(NULL); + } + ret = xmlDictLookup(ctxt->dict, ctxt->input->cur, count); + ctxt->input->cur = in; + ctxt->nbChars += count; + ctxt->input->col += count; + if (ret == NULL) + xmlErrMemory(ctxt, NULL); + return(ret); + } + } + /* accelerator for special cases */ + return(xmlParseNameComplex(ctxt)); +} + +static const xmlChar * +xmlParseNCNameComplex(xmlParserCtxtPtr ctxt) { + int len = 0, l; + int c; + int count = 0; + size_t startPosition = 0; + +#ifdef DEBUG + nbParseNCNameComplex++; +#endif + + /* + * Handler for more complex cases + */ + GROW; + startPosition = CUR_PTR - BASE_PTR; + c = CUR_CHAR(l); + if ((c == ' ') || (c == '>') || (c == '/') || /* accelerators */ + (!xmlIsNameStartChar(ctxt, c) || (c == ':'))) { + return(NULL); + } + + while ((c != ' ') && (c != '>') && (c != '/') && /* test bigname.xml */ + (xmlIsNameChar(ctxt, c) && (c != ':'))) { + if (count++ > XML_PARSER_CHUNK_SIZE) { + if ((len > XML_MAX_NAME_LENGTH) && + ((ctxt->options & XML_PARSE_HUGE) == 0)) { + xmlFatalErr(ctxt, XML_ERR_NAME_TOO_LONG, "NCName"); + return(NULL); + } + count = 0; + GROW; + if (ctxt->instate == XML_PARSER_EOF) + return(NULL); + } + len += l; + NEXTL(l); + c = CUR_CHAR(l); + if (c == 0) { + count = 0; + /* + * when shrinking to extend the buffer we really need to preserve + * the part of the name we already parsed. Hence rolling back + * by current lenght. + */ + ctxt->input->cur -= l; + GROW; + ctxt->input->cur += l; + if (ctxt->instate == XML_PARSER_EOF) + return(NULL); + c = CUR_CHAR(l); + } + } + if ((len > XML_MAX_NAME_LENGTH) && + ((ctxt->options & XML_PARSE_HUGE) == 0)) { + xmlFatalErr(ctxt, XML_ERR_NAME_TOO_LONG, "NCName"); + return(NULL); + } + return(xmlDictLookup(ctxt->dict, (BASE_PTR + startPosition), len)); +} + +/** + * xmlParseNCName: + * @ctxt: an XML parser context + * @len: length 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, *e; + const xmlChar *ret; + int count = 0; + +#ifdef DEBUG + nbParseNCName++; +#endif + + /* + * Accelerator for simple ASCII names + */ + in = ctxt->input->cur; + e = ctxt->input->end; + if ((((*in >= 0x61) && (*in <= 0x7A)) || + ((*in >= 0x41) && (*in <= 0x5A)) || + (*in == '_')) && (in < e)) { + in++; + while ((((*in >= 0x61) && (*in <= 0x7A)) || + ((*in >= 0x41) && (*in <= 0x5A)) || + ((*in >= 0x30) && (*in <= 0x39)) || + (*in == '_') || (*in == '-') || + (*in == '.')) && (in < e)) + in++; + if (in >= e) + goto complex; + if ((*in > 0) && (*in < 0x80)) { + count = in - ctxt->input->cur; + if ((count > XML_MAX_NAME_LENGTH) && + ((ctxt->options & XML_PARSE_HUGE) == 0)) { + xmlFatalErr(ctxt, XML_ERR_NAME_TOO_LONG, "NCName"); + return(NULL); + } + ret = xmlDictLookup(ctxt->dict, ctxt->input->cur, count); + ctxt->input->cur = in; + ctxt->nbChars += count; + ctxt->input->col += count; + if (ret == NULL) { + xmlErrMemory(ctxt, NULL); + } + return(ret); + } + } +complex: + return(xmlParseNCNameComplex(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; + if (ctxt->instate == XML_PARSER_EOF) + return(NULL); + + in = ctxt->input->cur; + while (*in != 0 && *in == *cmp) { + ++in; + ++cmp; + ctxt->input->col++; + } + 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 dictionary direct compare possible */ + if (ret == other) { + return (const xmlChar*) 1; + } + return ret; +} + +/** + * 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 (#x20 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; + +#ifdef DEBUG + nbParseStringName++; +#endif + + c = CUR_SCHAR(cur, l); + if (!xmlIsNameStartChar(ctxt, c)) { + return(NULL); + } + + COPY_BUF(l,buf,len,c); + cur += l; + c = CUR_SCHAR(cur, l); + while (xmlIsNameChar(ctxt, 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 (xmlIsNameChar(ctxt, c)) { + if (len + 10 > max) { + xmlChar *tmp; + + if ((len > XML_MAX_NAME_LENGTH) && + ((ctxt->options & XML_PARSE_HUGE) == 0)) { + xmlFatalErr(ctxt, XML_ERR_NAME_TOO_LONG, "NCName"); + xmlFree(buffer); + return(NULL); + } + max *= 2; + tmp = (xmlChar *) xmlRealloc(buffer, + max * sizeof(xmlChar)); + if (tmp == NULL) { + xmlErrMemory(ctxt, NULL); + xmlFree(buffer); + return(NULL); + } + buffer = tmp; + } + COPY_BUF(l,buffer,len,c); + cur += l; + c = CUR_SCHAR(cur, l); + } + buffer[len] = 0; + *str = cur; + return(buffer); + } + } + if ((len > XML_MAX_NAME_LENGTH) && + ((ctxt->options & XML_PARSE_HUGE) == 0)) { + xmlFatalErr(ctxt, XML_ERR_NAME_TOO_LONG, "NCName"); + return(NULL); + } + *str = cur; + return(xmlStrndup(buf, len)); +} + +/** + * xmlParseNmtoken: + * @ctxt: an XML parser context + * + * parse an XML Nmtoken. + * + * [7] Nmtoken ::= (NameChar)+ + * + * [8] Nmtokens ::= Nmtoken (#x20 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; + +#ifdef DEBUG + nbParseNmToken++; +#endif + + GROW; + if (ctxt->instate == XML_PARSER_EOF) + return(NULL); + c = CUR_CHAR(l); + + while (xmlIsNameChar(ctxt, c)) { + if (count++ > XML_PARSER_CHUNK_SIZE) { + count = 0; + GROW; + } + COPY_BUF(l,buf,len,c); + NEXTL(l); + c = CUR_CHAR(l); + if (c == 0) { + count = 0; + GROW; + if (ctxt->instate == XML_PARSER_EOF) + return(NULL); + c = CUR_CHAR(l); + } + if (len >= XML_MAX_NAMELEN) { + /* + * Okay someone managed to make a huge token, so he's ready to pay + * 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 (xmlIsNameChar(ctxt, c)) { + if (count++ > XML_PARSER_CHUNK_SIZE) { + count = 0; + GROW; + if (ctxt->instate == XML_PARSER_EOF) { + xmlFree(buffer); + return(NULL); + } + } + if (len + 10 > max) { + xmlChar *tmp; + + if ((max > XML_MAX_NAME_LENGTH) && + ((ctxt->options & XML_PARSE_HUGE) == 0)) { + xmlFatalErr(ctxt, XML_ERR_NAME_TOO_LONG, "NmToken"); + xmlFree(buffer); + return(NULL); + } + max *= 2; + tmp = (xmlChar *) xmlRealloc(buffer, + max * sizeof(xmlChar)); + if (tmp == NULL) { + xmlErrMemory(ctxt, NULL); + xmlFree(buffer); + return(NULL); + } + buffer = tmp; + } + COPY_BUF(l,buffer,len,c); + NEXTL(l); + c = CUR_CHAR(l); + } + buffer[len] = 0; + return(buffer); + } + } + if (len == 0) + return(NULL); + if ((len > XML_MAX_NAME_LENGTH) && + ((ctxt->options & XML_PARSE_HUGE) == 0)) { + xmlFatalErr(ctxt, XML_ERR_NAME_TOO_LONG, "NmToken"); + return(NULL); + } + return(xmlStrndup(buf, len)); +} + +/** + * 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; + if (ctxt->instate == XML_PARSER_EOF) { + xmlFree(buf); + return(NULL); + } + 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))) && (ctxt->instate != XML_PARSER_EOF)) { + if (len + 5 >= size) { + xmlChar *tmp; + + size *= 2; + tmp = (xmlChar *) xmlRealloc(buf, size * sizeof(xmlChar)); + if (tmp == NULL) { + xmlErrMemory(ctxt, NULL); + xmlFree(buf); + return(NULL); + } + buf = tmp; + } + 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; + if (ctxt->instate == XML_PARSER_EOF) { + xmlFree(buf); + return(NULL); + } + + /* + * 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. + */ + ++ctxt->depth; + ret = xmlStringDecodeEntities(ctxt, buf, XML_SUBSTITUTE_PEREF, + 0, 0, 0); + --ctxt->depth; + 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; + xmlChar *rep = NULL; + size_t len = 0; + size_t 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); + if (buf == NULL) goto mem_error; + + /* + * OK loop until we reach one of the ending char or a size limit. + */ + c = CUR_CHAR(l); + while (((NXT(0) != limit) && /* checked */ + (IS_CHAR(c)) && (c != '<')) && + (ctxt->instate != XML_PARSER_EOF)) { + /* + * Impose a reasonable limit on attribute size, unless XML_PARSE_HUGE + * special option is given + */ + if ((len > XML_MAX_TEXT_LENGTH) && + ((ctxt->options & XML_PARSE_HUGE) == 0)) { + xmlFatalErrMsg(ctxt, XML_ERR_ATTRIBUTE_NOT_FINISHED, + "AttValue length too long\n"); + goto mem_error; + } + if (c == 0) break; + if (c == '&') { + in_space = 0; + if (NXT(1) == '#') { + int val = xmlParseCharRef(ctxt); + + if (val == '&') { + if (ctxt->replaceEntities) { + if (len + 10 > buf_size) { + growBuffer(buf, 10); + } + buf[len++] = '&'; + } else { + /* + * The reparsing will be done in xmlStringGetNodeList() + * called by the attribute() function in SAX.c + */ + if (len + 10 > buf_size) { + growBuffer(buf, 10); + } + buf[len++] = '&'; + buf[len++] = '#'; + buf[len++] = '3'; + buf[len++] = '8'; + buf[len++] = ';'; + } + } else if (val != 0) { + if (len + 10 > buf_size) { + growBuffer(buf, 10); + } + len += xmlCopyChar(0, &buf[len], val); + } + } else { + ent = xmlParseEntityRef(ctxt); + ctxt->nbentities++; + if (ent != NULL) + ctxt->nbentities += ent->owner; + if ((ent != NULL) && + (ent->etype == XML_INTERNAL_PREDEFINED_ENTITY)) { + if (len + 10 > buf_size) { + growBuffer(buf, 10); + } + 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)) { + if (ent->etype != XML_INTERNAL_PREDEFINED_ENTITY) { + ++ctxt->depth; + rep = xmlStringDecodeEntities(ctxt, ent->content, + XML_SUBSTITUTE_REF, + 0, 0, 0); + --ctxt->depth; + if (rep != NULL) { + current = rep; + while (*current != 0) { /* non input consuming */ + if ((*current == 0xD) || (*current == 0xA) || + (*current == 0x9)) { + buf[len++] = 0x20; + current++; + } else + buf[len++] = *current++; + if (len + 10 > buf_size) { + growBuffer(buf, 10); + } + } + xmlFree(rep); + rep = NULL; + } + } else { + if (len + 10 > buf_size) { + growBuffer(buf, 10); + } + 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) && (ent->checked == 0)) { + unsigned long oldnbent = ctxt->nbentities; + + ++ctxt->depth; + rep = xmlStringDecodeEntities(ctxt, ent->content, + XML_SUBSTITUTE_REF, 0, 0, 0); + --ctxt->depth; + + ent->checked = (ctxt->nbentities - oldnbent + 1) * 2; + if (rep != NULL) { + if (xmlStrchr(rep, '<')) + ent->checked |= 1; + xmlFree(rep); + rep = NULL; + } + } + + /* + * Just output the reference + */ + buf[len++] = '&'; + while (len + i + 10 > buf_size) { + growBuffer(buf, i + 10); + } + 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); + while (len + 10 > buf_size) { + growBuffer(buf, 10); + } + } + in_space = 1; + } + } else { + in_space = 0; + COPY_BUF(l,buf,len,c); + if (len + 10 > buf_size) { + growBuffer(buf, 10); + } + } + NEXTL(l); + } + GROW; + c = CUR_CHAR(l); + } + if (ctxt->instate == XML_PARSER_EOF) + goto error; + + if ((in_space) && (normalize)) { + while ((len > 0) && (buf[len - 1] == 0x20)) len--; + } + buf[len] = 0; + if (RAW == '<') { + xmlFatalErr(ctxt, XML_ERR_LT_IN_ATTRIBUTE, NULL); + } else if (RAW != limit) { + if ((c != 0) && (!IS_CHAR(c))) { + xmlFatalErrMsg(ctxt, XML_ERR_INVALID_CHAR, + "invalid character in attribute value\n"); + } else { + xmlFatalErrMsg(ctxt, XML_ERR_ATTRIBUTE_NOT_FINISHED, + "AttValue: ' expected\n"); + } + } else + NEXT; + + /* + * There we potentially risk an overflow, don't allow attribute value of + * length more than INT_MAX it is a very reasonnable assumption ! + */ + if (len >= INT_MAX) { + xmlFatalErrMsg(ctxt, XML_ERR_ATTRIBUTE_NOT_FINISHED, + "AttValue length too long\n"); + goto mem_error; + } + + if (attlen != NULL) *attlen = (int) len; + return(buf); + +mem_error: + xmlErrMemory(ctxt, NULL); +error: + if (buf != NULL) + xmlFree(buf); + if (rep != NULL) + xmlFree(rep); + 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) { + if ((ctxt == NULL) || (ctxt->input == NULL)) return(NULL); + 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) { + xmlChar *tmp; + + if ((size > XML_MAX_NAME_LENGTH) && + ((ctxt->options & XML_PARSE_HUGE) == 0)) { + xmlFatalErr(ctxt, XML_ERR_NAME_TOO_LONG, "SystemLiteral"); + xmlFree(buf); + ctxt->instate = (xmlParserInputState) state; + return(NULL); + } + size *= 2; + tmp = (xmlChar *) xmlRealloc(buf, size * sizeof(xmlChar)); + if (tmp == NULL) { + xmlFree(buf); + xmlErrMemory(ctxt, NULL); + ctxt->instate = (xmlParserInputState) state; + return(NULL); + } + buf = tmp; + } + count++; + if (count > 50) { + GROW; + count = 0; + if (ctxt->instate == XML_PARSER_EOF) { + xmlFree(buf); + return(NULL); + } + } + 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) { + xmlChar *tmp; + + if ((size > XML_MAX_NAME_LENGTH) && + ((ctxt->options & XML_PARSE_HUGE) == 0)) { + xmlFatalErr(ctxt, XML_ERR_NAME_TOO_LONG, "Public ID"); + xmlFree(buf); + return(NULL); + } + size *= 2; + tmp = (xmlChar *) xmlRealloc(buf, size * sizeof(xmlChar)); + if (tmp == NULL) { + xmlErrMemory(ctxt, NULL); + xmlFree(buf); + return(NULL); + } + buf = tmp; + } + buf[len++] = cur; + count++; + if (count > 50) { + GROW; + count = 0; + if (ctxt->instate == XML_PARSER_EOF) { + xmlFree(buf); + return(NULL); + } + } + 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); +} + +static void xmlParseCharDataComplex(xmlParserCtxtPtr ctxt, int cdata); + +/* + * used for the test in the inner loop of the char data testing + */ +static const unsigned char test_char_data[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9, CR/LF separated */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x00, 0x27, /* & */ + 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3A, 0x3B, 0x00, 0x3D, 0x3E, 0x3F, /* < */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x00, 0x5E, 0x5F, /* ] */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* non-ascii */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; + +/** + * xmlParseCharData: + * @ctxt: an XML parser context + * @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 ">", + * and must, for compatibility, be escaped using ">" 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; + int ccol; + + 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++; ctxt->input->col++; } + if (*in == 0xA) { + do { + ctxt->input->line++; ctxt->input->col = 1; + in++; + } while (*in == 0xA); + 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 != NULL) && + (ctxt->sax->ignorableWhitespace != + ctxt->sax->characters)) { + if (areBlanks(ctxt, tmp, nbchar, 1)) { + if (ctxt->sax->ignorableWhitespace != NULL) + ctxt->sax->ignorableWhitespace(ctxt->userData, + tmp, nbchar); + } else { + if (ctxt->sax->characters != NULL) + ctxt->sax->characters(ctxt->userData, + tmp, nbchar); + if (*ctxt->space == -1) + *ctxt->space = -2; + } + } else if ((ctxt->sax != NULL) && + (ctxt->sax->characters != NULL)) { + ctxt->sax->characters(ctxt->userData, + tmp, nbchar); + } + } + return; + } + +get_more: + ccol = ctxt->input->col; + while (test_char_data[*in]) { + in++; + ccol++; + } + ctxt->input->col = ccol; + if (*in == 0xA) { + do { + ctxt->input->line++; ctxt->input->col = 1; + in++; + } while (*in == 0xA); + goto get_more; + } + if (*in == ']') { + if ((in[1] == ']') && (in[2] == '>')) { + xmlFatalErr(ctxt, XML_ERR_MISPLACED_CDATA_END, NULL); + ctxt->input->cur = in; + return; + } + in++; + ctxt->input->col++; + goto get_more; + } + nbchar = in - ctxt->input->cur; + if (nbchar > 0) { + if ((ctxt->sax != NULL) && + (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)) { + if (ctxt->sax->ignorableWhitespace != NULL) + ctxt->sax->ignorableWhitespace(ctxt->userData, + tmp, nbchar); + } else { + if (ctxt->sax->characters != NULL) + ctxt->sax->characters(ctxt->userData, + tmp, nbchar); + if (*ctxt->space == -1) + *ctxt->space = -2; + } + line = ctxt->input->line; + col = ctxt->input->col; + } else if (ctxt->sax != NULL) { + if (ctxt->sax->characters != NULL) + ctxt->sax->characters(ctxt->userData, + ctxt->input->cur, nbchar); + line = ctxt->input->line; + col = ctxt->input->col; + } + /* something really bad happened in the SAX callback */ + if (ctxt->instate != XML_PARSER_CONTENT) + return; + } + ctxt->input->cur = in; + if (*in == 0xD) { + in++; + if (*in == 0xA) { + ctxt->input->cur = in; + in++; + ctxt->input->line++; ctxt->input->col = 1; + continue; /* while */ + } + in--; + } + if (*in == '<') { + return; + } + if (*in == '&') { + return; + } + SHRINK; + GROW; + if (ctxt->instate == XML_PARSER_EOF) + return; + 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. + */ +static 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); + if ((ctxt->sax->characters != + ctxt->sax->ignorableWhitespace) && + (*ctxt->space == -1)) + *ctxt->space = -2; + } + } + nbchar = 0; + /* something really bad happened in the SAX callback */ + if (ctxt->instate != XML_PARSER_CONTENT) + return; + } + count++; + if (count > 50) { + GROW; + count = 0; + if (ctxt->instate == XML_PARSER_EOF) + return; + } + 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); + if ((ctxt->sax->characters != ctxt->sax->ignorableWhitespace) && + (*ctxt->space == -1)) + *ctxt->space = -2; + } + } + } + if ((cur != 0) && (!IS_CHAR(cur))) { + /* Generate the error and skip the offending character */ + xmlFatalErrMsgInt(ctxt, XML_ERR_INVALID_CHAR, + "PCDATA invalid Char value %d\n", + cur); + NEXTL(l); + } +} + +/** + * 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); +} + +/** + * xmlParseCommentComplex: + * @ctxt: an XML parser context + * @buf: the already parsed part of the buffer + * @len: number of bytes filles in the buffer + * @size: allocated size of the buffer + * + * Skip an XML (SGML) comment + * The spec says that "For compatibility, the string "--" (double-hyphen) + * must not occur within comments. " + * This is the slow routine in case the accelerator for ascii didn't work + * + * [15] Comment ::= '' + */ +static void +xmlParseCommentComplex(xmlParserCtxtPtr ctxt, xmlChar *buf, + size_t len, size_t size) { + int q, ql; + int r, rl; + int cur, l; + size_t count = 0; + int inputid; + + inputid = ctxt->input->id; + + if (buf == NULL) { + len = 0; + size = XML_PARSER_BUFFER_SIZE; + buf = (xmlChar *) xmlMallocAtomic(size * sizeof(xmlChar)); + if (buf == NULL) { + xmlErrMemory(ctxt, NULL); + return; + } + } + GROW; /* Assure there's enough input data */ + q = CUR_CHAR(ql); + if (q == 0) + goto not_terminated; + if (!IS_CHAR(q)) { + xmlFatalErrMsgInt(ctxt, XML_ERR_INVALID_CHAR, + "xmlParseComment: invalid xmlChar value %d\n", + q); + xmlFree (buf); + return; + } + NEXTL(ql); + r = CUR_CHAR(rl); + if (r == 0) + goto not_terminated; + if (!IS_CHAR(r)) { + xmlFatalErrMsgInt(ctxt, XML_ERR_INVALID_CHAR, + "xmlParseComment: invalid xmlChar value %d\n", + q); + xmlFree (buf); + return; + } + NEXTL(rl); + cur = CUR_CHAR(l); + if (cur == 0) + goto not_terminated; + while (IS_CHAR(cur) && /* checked */ + ((cur != '>') || + (r != '-') || (q != '-'))) { + if ((r == '-') && (q == '-')) { + xmlFatalErr(ctxt, XML_ERR_HYPHEN_IN_COMMENT, NULL); + } + if ((len > XML_MAX_TEXT_LENGTH) && + ((ctxt->options & XML_PARSE_HUGE) == 0)) { + xmlFatalErrMsgStr(ctxt, XML_ERR_COMMENT_NOT_FINISHED, + "Comment too big found", NULL); + xmlFree (buf); + return; + } + if (len + 5 >= size) { + xmlChar *new_buf; + size_t new_size; + + new_size = size * 2; + new_buf = (xmlChar *) xmlRealloc(buf, new_size); + if (new_buf == NULL) { + xmlFree (buf); + xmlErrMemory(ctxt, NULL); + return; + } + buf = new_buf; + size = new_size; + } + COPY_BUF(ql,buf,len,q); + q = r; + ql = rl; + r = cur; + rl = l; + + count++; + if (count > 50) { + GROW; + count = 0; + if (ctxt->instate == XML_PARSER_EOF) { + xmlFree(buf); + return; + } + } + NEXTL(l); + cur = CUR_CHAR(l); + if (cur == 0) { + SHRINK; + GROW; + cur = CUR_CHAR(l); + } + } + buf[len] = 0; + if (cur == 0) { + xmlFatalErrMsgStr(ctxt, XML_ERR_COMMENT_NOT_FINISHED, + "Comment not terminated \n + * The spec says that "For compatibility, the string "--" (double-hyphen) + * must not occur within comments. " + * + * [15] Comment ::= '' + */ +void +xmlParseComment(xmlParserCtxtPtr ctxt) { + xmlChar *buf = NULL; + size_t size = XML_PARSER_BUFFER_SIZE; + size_t len = 0; + xmlParserInputState state; + const xmlChar *in; + size_t nbchar = 0; + int ccol; + int inputid; + + /* + * 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; + inputid = ctxt->input->id; + SKIP(4); + SHRINK; + GROW; + + /* + * Accelerated common case where input don't need to be + * modified before passing it to the handler. + */ + in = ctxt->input->cur; + do { + if (*in == 0xA) { + do { + ctxt->input->line++; ctxt->input->col = 1; + in++; + } while (*in == 0xA); + } +get_more: + ccol = ctxt->input->col; + while (((*in > '-') && (*in <= 0x7F)) || + ((*in >= 0x20) && (*in < '-')) || + (*in == 0x09)) { + in++; + ccol++; + } + ctxt->input->col = ccol; + if (*in == 0xA) { + do { + ctxt->input->line++; ctxt->input->col = 1; + in++; + } while (*in == 0xA); + goto get_more; + } + nbchar = in - ctxt->input->cur; + /* + * save current set of data + */ + if (nbchar > 0) { + if ((ctxt->sax != NULL) && + (ctxt->sax->comment != NULL)) { + if (buf == NULL) { + if ((*in == '-') && (in[1] == '-')) + size = nbchar + 1; + else + size = XML_PARSER_BUFFER_SIZE + nbchar; + buf = (xmlChar *) xmlMallocAtomic(size * sizeof(xmlChar)); + if (buf == NULL) { + xmlErrMemory(ctxt, NULL); + ctxt->instate = state; + return; + } + len = 0; + } else if (len + nbchar + 1 >= size) { + xmlChar *new_buf; + size += len + nbchar + XML_PARSER_BUFFER_SIZE; + new_buf = (xmlChar *) xmlRealloc(buf, + size * sizeof(xmlChar)); + if (new_buf == NULL) { + xmlFree (buf); + xmlErrMemory(ctxt, NULL); + ctxt->instate = state; + return; + } + buf = new_buf; + } + memcpy(&buf[len], ctxt->input->cur, nbchar); + len += nbchar; + buf[len] = 0; + } + } + if ((len > XML_MAX_TEXT_LENGTH) && + ((ctxt->options & XML_PARSE_HUGE) == 0)) { + xmlFatalErrMsgStr(ctxt, XML_ERR_COMMENT_NOT_FINISHED, + "Comment too big found", NULL); + xmlFree (buf); + return; + } + ctxt->input->cur = in; + if (*in == 0xA) { + in++; + ctxt->input->line++; ctxt->input->col = 1; + } + if (*in == 0xD) { + in++; + if (*in == 0xA) { + ctxt->input->cur = in; + in++; + ctxt->input->line++; ctxt->input->col = 1; + continue; /* while */ + } + in--; + } + SHRINK; + GROW; + if (ctxt->instate == XML_PARSER_EOF) { + xmlFree(buf); + return; + } + in = ctxt->input->cur; + if (*in == '-') { + if (in[1] == '-') { + if (in[2] == '>') { + if (ctxt->input->id != inputid) { + xmlFatalErrMsg(ctxt, XML_ERR_ENTITY_BOUNDARY, + "comment doesn't start and stop in the same entity\n"); + } + SKIP(3); + if ((ctxt->sax != NULL) && (ctxt->sax->comment != NULL) && + (!ctxt->disableSAX)) { + if (buf != NULL) + ctxt->sax->comment(ctxt->userData, buf); + else + ctxt->sax->comment(ctxt->userData, BAD_CAST ""); + } + if (buf != NULL) + xmlFree(buf); + if (ctxt->instate != XML_PARSER_EOF) + ctxt->instate = state; + return; + } + if (buf != NULL) { + xmlFatalErrMsgStr(ctxt, XML_ERR_HYPHEN_IN_COMMENT, + "Double hyphen within comment: " + " + + Get the document tree from a parser context. + + + + + Get the well formed information from a parser context. + + + + + Get the validity information from a parser context. + + + + + Switch the parser to validation mode. + + + + + + Switch the parser to replace entities. + + + + + + Switch the parser to be pedantic. + + + + + + Switch the parser to load the DTD without validating. + + + + + + Switch on the generation of line number for elements nodes. + + + + + + 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. + + + + + dump the memory allocated in the file .memdump + + + + + Get the namespace of a node + + + + + Get the namespace of a node + + + + + + defined(LIBXML_XPATH_ENABLED) + Get the xpathContext from an xpathParserContext + + + + + defined(LIBXML_XPATH_ENABLED) + Get the doc from an xpathContext + + + + + defined(LIBXML_XPATH_ENABLED) + Get the current node from an xpathContext + + + + + defined(LIBXML_XPATH_ENABLED) + Set the doc of an xpathContext + + + + + + defined(LIBXML_XPATH_ENABLED) + Set the current node of an xpathContext + + + + + + defined(LIBXML_XPATH_ENABLED) + Get the current node from an xpathContext + + + + + defined(LIBXML_XPATH_ENABLED) + Get the current node from an xpathContext + + + + + defined(LIBXML_XPATH_ENABLED) + Get the current function name xpathContext + + + + + defined(LIBXML_XPATH_ENABLED) + Get the current function name URI xpathContext + + + + + + Get the scheme part from an URI + + + + + Set the scheme part of an URI. + + + + + + Get the opaque part from an URI + + + + + Set the opaque part of an URI. + + + + + + Get the authority part from an URI + + + + + Set the authority part of an URI. + + + + + + Get the server part from an URI + + + + + Set the server part of an URI. + + + + + + Get the user part from an URI + + + + + Set the user part of an URI. + + + + + + Get the path part from an URI + + + + + Set the path part of an URI. + + + + + + Get the query part from an URI + + + + + Set the query part of an URI. + + + + + + Get the raw query part from an URI (i.e. the unescaped form). + + + + + Set the raw query part of an URI (i.e. the unescaped form). + + + + + + Get the fragment part from an URI + + + + + Set the fragment part of an URI. + + + + + + Get the port part from an URI + + + + + Set the port part of an URI. + + + + + + + What part of the library raised this error + + + + + The error code, e.g. an xmlParserError + + + + + human-readable informative error message + + + + + how consequent is the error + + + + + the filename + + + + + the line number if available + + + + + 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. + + + + Returns the total amount of memory allocated by libxml2 + + + + diff --git a/python/libxml_wrap.h b/python/libxml_wrap.h new file mode 100644 index 0000000..53a0618 --- /dev/null +++ b/python/libxml_wrap.h @@ -0,0 +1,279 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef LIBXML_SCHEMAS_ENABLED +#include +#include +#endif + +/* + * for older versions of Python, we don't use PyBytes, but keep PyString + * and don't use Capsule but CObjects + */ +#if PY_VERSION_HEX < 0x02070000 +#ifndef PyBytes_Check +#define PyBytes_Check PyString_Check +#define PyBytes_Size PyString_Size +#define PyBytes_AsString PyString_AsString +#define PyBytes_AS_STRING PyString_AS_STRING +#define PyBytes_GET_SIZE PyString_GET_SIZE +#endif +#ifndef PyCapsule_New +#define PyCapsule_New PyCObject_FromVoidPtrAndDesc +#define PyCapsule_CheckExact PyCObject_Check +#define PyCapsule_GetPointer(o, n) PyCObject_GetDesc((o)) +#endif +#endif + +/** + * ATTRIBUTE_UNUSED: + * + * 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 PyValidCtxt_Get(v) (((v) == Py_None) ? NULL : \ + (((PyValidCtxt_Object *)(v))->obj)) + +typedef struct { + PyObject_HEAD + xmlValidCtxtPtr obj; +} PyValidCtxt_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 */ + +#ifdef LIBXML_READER_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; +#endif + +#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 */ +#if PY_MAJOR_VERSION >= 3 +FILE *libxml_PyFileGet(PyObject *f); +void libxml_PyFileRelease(FILE *f); +#define PyFile_Get(v) (((v) == Py_None) ? NULL : libxml_PyFileGet(v)) +#define PyFile_Release(f) libxml_PyFileRelease(f) +#else +#define PyFile_Get(v) (((v) == Py_None) ? NULL : \ + (PyFile_Check(v) ? (PyFile_AsFile(v)) : stdout)) +#define PyFile_Release(f) +#endif + +#ifdef LIBXML_SCHEMAS_ENABLED +typedef struct { + 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)) + +typedef struct { + PyObject_HEAD + xmlSchemaPtr obj; +} PySchema_Object; + +#define PySchema_Get(v) (((v) == Py_None) ? NULL : \ + (((PySchema_Object *)(v))->obj)) + +typedef struct { + PyObject_HEAD + xmlSchemaParserCtxtPtr obj; +} PySchemaParserCtxt_Object; + +#define PySchemaParserCtxt_Get(v) (((v) == Py_None) ? NULL : \ + (((PySchemaParserCtxt_Object *)(v))->obj)) + +typedef struct { + PyObject_HEAD + xmlSchemaValidCtxtPtr obj; +} PySchemaValidCtxt_Object; + +#define PySchemaValidCtxt_Get(v) (((v) == Py_None) ? NULL : \ + (((PySchemaValidCtxt_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_xmlValidCtxtPtrWrap(xmlValidCtxtPtr valid); +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 */ +#ifdef LIBXML_READER_ENABLED +PyObject * libxml_xmlTextReaderPtrWrap(xmlTextReaderPtr reader); +PyObject * libxml_xmlTextReaderLocatorPtrWrap(xmlTextReaderLocatorPtr locator); +#endif + +xmlXPathObjectPtr libxml_xmlXPathObjectPtrConvert(PyObject * obj); +#ifdef LIBXML_SCHEMAS_ENABLED +PyObject * libxml_xmlRelaxNGPtrWrap(xmlRelaxNGPtr ctxt); +PyObject * libxml_xmlRelaxNGParserCtxtPtrWrap(xmlRelaxNGParserCtxtPtr ctxt); +PyObject * libxml_xmlRelaxNGValidCtxtPtrWrap(xmlRelaxNGValidCtxtPtr valid); +PyObject * libxml_xmlSchemaPtrWrap(xmlSchemaPtr ctxt); +PyObject * libxml_xmlSchemaParserCtxtPtrWrap(xmlSchemaParserCtxtPtr ctxt); +PyObject * libxml_xmlSchemaValidCtxtPtrWrap(xmlSchemaValidCtxtPtr valid); +#endif /* LIBXML_SCHEMAS_ENABLED */ +PyObject * libxml_xmlErrorPtrWrap(xmlErrorPtr error); +PyObject * libxml_xmlSchemaSetValidErrors(PyObject * self, PyObject * args); +PyObject * libxml_xmlRegisterInputCallback(PyObject *self, PyObject *args); +PyObject * libxml_xmlUnregisterInputCallback(PyObject *self, PyObject *args); +PyObject * libxml_xmlNodeRemoveNsDef(PyObject * self, PyObject * args); diff --git a/python/setup.py b/python/setup.py new file mode 100755 index 0000000..c44269a --- /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 = [os.path.join(ROOT,'bin',dll) for dll in 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_info()[0], sys.exc_info()[1]) + 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_info()[0], sys.exc_info()[1]) + else: + head = open("libxsl.py", "r") + generated = open("libxsltclass.py", "r") + result = open("libxslt.py", "w") + for line in head.readlines(): + if WITHDLLS: + result.write(altImport(line)) + else: + result.write(line) + for line in generated.readlines(): + result.write(line) + head.close() + generated.close() + result.close() + with_xslt=1 +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.9.4", + 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..90c2114 --- /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 = [os.path.join(ROOT,'bin',dll) for dll in 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_info()[0], sys.exc_info()[1]) + 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_info()[0], sys.exc_info()[1]) + else: + head = open("libxsl.py", "r") + generated = open("libxsltclass.py", "r") + result = open("libxslt.py", "w") + for line in head.readlines(): + if WITHDLLS: + result.write(altImport(line)) + else: + result.write(line) + for line in generated.readlines(): + result.write(line) + head.close() + generated.close() + result.close() + with_xslt=1 +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..95ebead --- /dev/null +++ b/python/tests/Makefile.am @@ -0,0 +1,75 @@ +exampledir = $(datadir)/doc/libxml2-python-$(LIBXML_VERSION)/examples +dist_example_DATA = $(PYTESTS) $(XMLS) + +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 \ + input_callback.py \ + resolver.py \ + regexp.py \ + reader.py \ + reader2.py \ + reader3.py \ + reader4.py \ + reader5.py \ + reader6.py \ + reader7.py \ + reader8.py \ + readernext.py \ + walker.py \ + nsdel.py \ + ctxterror.py\ + readererr.py\ + relaxng.py \ + schema.py \ + thread2.py \ + sync.py \ + tstLastError.py \ + indexes.py \ + dtdvalid.py \ + tstmem.py \ + validDTD.py \ + validSchemas.py \ + validRNG.py \ + compareNodes.py \ + xpathns.py \ + xpathleak.py + +XMLS= \ + tst.xml \ + valid.xml \ + invalid.xml \ + test.dtd + +CLEANFILES = core tmp.xml *.pyc + +if WITH_PYTHON +tests: $(PYTESTS) + @for f in $(XMLS) ; do test -f $$f || $(LN_S) $(srcdir)/$$f . ; done + @echo "## running Python regression tests" + -@(PYTHONPATH="..:../.libs:$(srcdir)/..:$$PYTHONPATH" ; \ + export PYTHONPATH; \ + LD_LIBRARY_PATH="$(top_builddir)/.libs:$$LD_LIBRARY_PATH" ; \ + export LD_LIBRARY_PATH; \ + for test in $(PYTESTS) ; \ + do log=`$(PYTHON) $(srcdir)/$$test` ; \ + if [ "`echo $$log | grep OK`" = "" ] ; then \ + echo "-- $$test" ; echo "$$log" ; fi ; done) +else +tests: +endif diff --git a/python/tests/attribs.py b/python/tests/attribs.py new file mode 100755 index 0000000..99132c2 --- /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( +""" + + + +]> + +""") +elem = doc.getRootElement() +attr = elem.hasNsProp('attr', 'http://abc.org') +if attr == None or attr.serialize()[:-1] != """""": + 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..b2d3f78 --- /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/compareNodes.py b/python/tests/compareNodes.py new file mode 100755 index 0000000..ca5a5a2 --- /dev/null +++ b/python/tests/compareNodes.py @@ -0,0 +1,50 @@ +#!/usr/bin/python -u +import sys +import libxml2 + +# Memory debug specific +libxml2.debugMemory(1) + +# +# Testing XML Node comparison and Node hash-value +# +doc = libxml2.parseDoc("""""") +root = doc.getRootElement() + +# Create two different objects which point to foo +foonode1 = root.children +foonode2 = root.children + +# Now check that [in]equality tests work ok +if not ( foonode1 == foonode2 ): + print("Error comparing nodes with ==, nodes should be equal but are unequal") + sys.exit(1) +if not ( foonode1 != root ): + print("Error comparing nodes with ==, nodes should not be equal but are equal") + sys.exit(1) +if not ( foonode1 != root ): + print("Error comparing nodes with !=, nodes should not be equal but are equal") +if ( foonode1 != foonode2 ): + print("Error comparing nodes with !=, nodes should be equal but are unequal") + +# Next check that the hash function for the objects also works ok +if not (hash(foonode1) == hash(foonode2)): + print("Error hash values for two equal nodes are different") + sys.exit(1) +if not (hash(foonode1) != hash(root)): + print("Error hash values for two unequal nodes are not different") + sys.exit(1) +if hash(foonode1) == hash(root): + print("Error hash values for two unequal nodes are equal") + sys.exit(1) + +# Basic tests successful +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..416e384 --- /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 = """""" + +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..7787246 --- /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(""" + + + + + +""") + +target = libxml2.parseDoc(""" +""") + +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 != """""": + 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/dtdvalid.py b/python/tests/dtdvalid.py new file mode 100755 index 0000000..d4049b8 --- /dev/null +++ b/python/tests/dtdvalid.py @@ -0,0 +1,32 @@ +#!/usr/bin/python -u +import libxml2 +import sys + +# Memory debug specific +libxml2.debugMemory(1) + +dtd="""""" +instance=""" +""" + +dtd = libxml2.parseDTD(None, 'test.dtd') +ctxt = libxml2.newValidCtxt() +doc = libxml2.parseDoc(instance) +ret = doc.validateDtd(ctxt, dtd) +if ret != 1: + print("error doing DTD validation") + sys.exit(1) + +doc.freeDoc() +dtd.freeDtd() +del dtd +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/error.py b/python/tests/error.py new file mode 100755 index 0000000..530c2ee --- /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..0c16674 --- /dev/null +++ b/python/tests/inbuf.py @@ -0,0 +1,30 @@ +#!/usr/bin/python -u +import sys +import libxml2 +try: + import StringIO + str_io = StringIO.StringIO +except: + import io + str_io = io.StringIO + +# Memory debug specific +libxml2.debugMemory(1) + +i = 0 +while i < 5000: + f = str_io("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..e41a0d9 --- /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, "\n", 6, "test.xml") +chunk = """ chars1 + chars2 + chars3 + chars4 + chars5 + <s6 + chars7 + &8 + chars9 +""" +i = 0 +while i < 10000: + ctxt.parseChunk(chunk, len(chunk), 0) + i = i + 1 +chunk = "" +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=""" + +""" +ctxt = libxml2.createPushParser(handler, chunk, len(chunk), "test.xml") +chunk = """ chars1 + chars2 + chars3 + chàrs4 + chars5 + <s6 + chars7 + &8 + très 9 +""" +i = 0 +while i < 10000: + ctxt.parseChunk(chunk, len(chunk), 0) + i = i + 1 +chunk = "" +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/input_callback.py b/python/tests/input_callback.py new file mode 100755 index 0000000..495ab62 --- /dev/null +++ b/python/tests/input_callback.py @@ -0,0 +1,148 @@ +#!/usr/bin/python -u +# +# This tests custom input callbacks +# +import sys +import libxml2 +try: + import StringIO + str_io = StringIO.StringIO +except: + import io + str_io = io.StringIO + +# We implement a new scheme, py://strings/ that will reference this dictionary +pystrings = { + 'catalogs/catalog.xml' : +''' + + + +''', + + 'xml/sample.xml' : +''' + +&sample.entity;''', + + 'dtds/sample.dtd' : +''' + +''' +} + +prefix = "py://strings/" +startURL = prefix + "xml/sample.xml" +catURL = prefix + "catalogs/catalog.xml" + +def my_input_cb(URI): + if not(URI.startswith(prefix)): + return None + path = URI[len(prefix):] + if path not in pystrings: + return None + return str_io(pystrings[path]) + + +def run_test(desc, docpath, catalog, exp_status="verified", exp_err=[], test_callback=None, + root_name="root", root_content="replacement text"): + opts = libxml2.XML_PARSE_DTDLOAD | libxml2.XML_PARSE_NONET | libxml2.XML_PARSE_COMPACT + actual_err = [] + + def my_global_error_cb(ctx, msg): + actual_err.append((-1, msg)) + def my_ctx_error_cb(arg, msg, severity, reserved): + actual_err.append((severity, msg)) + + libxml2.registerErrorHandler(my_global_error_cb, None) + try: + parser = libxml2.createURLParserCtxt(docpath, opts) + parser.setErrorHandler(my_ctx_error_cb, None) + if catalog is not None: + parser.addLocalCatalog(catalog) + if test_callback is not None: + test_callback() + parser.parseDocument() + doc = parser.doc() + actual_status = "loaded" + e = doc.getRootElement() + if e.name == root_name and e.content == root_content: + actual_status = "verified" + doc.freeDoc() + except libxml2.parserError: + actual_status = "not loaded" + + if actual_status != exp_status: + print("Test '%s' failed: expect status '%s', actual '%s'" % (desc, exp_status, actual_status)) + sys.exit(1) + elif actual_err != exp_err: + print("Test '%s' failed" % desc) + print("Expect errors:") + for s,m in exp_err: print(" [%2d] '%s'" % (s,m)) + print("Actual errors:") + for s,m in actual_err: print(" [%2d] '%s'" % (s,m)) + sys.exit(1) + + +# Check that we cannot read custom schema without custom callback +run_test(desc="Loading entity without custom callback", + docpath=startURL, catalog=None, + exp_status="not loaded", exp_err=[ + (-1, "I/O "), + (-1, "warning : "), + (-1, "failed to load external entity \"py://strings/xml/sample.xml\"\n") + ]) + +# Register handler and try to load the same entity +libxml2.registerInputCallback(my_input_cb) +run_test(desc="Loading entity with custom callback", + docpath=startURL, catalog=None, + exp_status="loaded", exp_err=[ + (-1, "Attempt to load network entity http://example.com/dtds/sample.dtd"), + ( 4, "Entity 'sample.entity' not defined\n") + ]) + +# Register a catalog (also accessible via pystr://) and retry +run_test(desc="Loading entity with custom callback and catalog", + docpath=startURL, catalog=catURL) + +# Unregister custom callback when parser is already created +run_test(desc="Loading entity and unregistering callback", + docpath=startURL, catalog=catURL, + test_callback=lambda: libxml2.popInputCallbacks(), + exp_status="loaded", exp_err=[ + ( 3, "failed to load external entity \"py://strings/dtds/sample.dtd\"\n"), + ( 4, "Entity 'sample.entity' not defined\n") + ]) + +# Try to load the document again +run_test(desc="Retry loading document after unregistering callback", + docpath=startURL, catalog=catURL, + exp_status="not loaded", exp_err=[ + (-1, "I/O "), + (-1, "warning : "), + (-1, "failed to load external entity \"py://strings/xml/sample.xml\"\n") + ]) + +# But should be able to read standard I/O yet... +run_test(desc="Loading using standard i/o after unregistering callback", + docpath="tst.xml", catalog=None, + root_name='doc', root_content='bar') + +# Now pop ALL input callbacks, should fail to load even standard I/O +try: + while True: + libxml2.popInputCallbacks() +except IndexError: + pass + +run_test(desc="Loading using standard i/o after unregistering all callbacks", + docpath="tst.xml", catalog=None, + exp_status="not loaded", exp_err=[ + (-1, "I/O "), + (-1, "warning : "), + (-1, "failed to load external entity \"tst.xml\"\n") + ]) + +print("OK") +sys.exit(0); 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 @@ + + + +]> + diff --git a/python/tests/nsdel.py b/python/tests/nsdel.py new file mode 100755 index 0000000..079399a --- /dev/null +++ b/python/tests/nsdel.py @@ -0,0 +1,62 @@ +#!/usr/bin/python -u +# +# this test exercise the XPath basic engine, parser, etc, and +# allows to detect memory leaks +# +import sys +import libxml2 + +instance=""" +""" + +def namespaceDefs(node): + n = node.nsDefs() + while n: + yield n + n = n.next + +def checkNamespaceDefs(node, count): + nsList = list(namespaceDefs(node)) + #print nsList + if len(nsList) != count : + raise Exception("Error: saw %d namespace declarations. Expected %d" % (len(nsList), count)) + +# Memory debug specific +libxml2.debugMemory(1) + +# Remove single namespace +doc = libxml2.parseDoc(instance) +node = doc.getRootElement() +checkNamespaceDefs(node, 3) +ns = node.removeNsDef('urn:bar') +checkNamespaceDefs(node, 2) +ns.freeNsList() +doc.freeDoc() + +# Remove all namespaces +doc = libxml2.parseDoc(instance) +node = doc.getRootElement() +checkNamespaceDefs(node, 3) +ns = node.removeNsDef(None) +checkNamespaceDefs(node, 0) +ns.freeNsList() +doc.freeDoc() + +# Remove a namespace refered to by a child +doc = libxml2.newDoc("1.0") +root = doc.newChild(None, "root", None) +namespace = root.newNs("http://example.com/sample", "s") +child = root.newChild(namespace, "child", None) +root.removeNsDef("http://example.com/sample") +doc.reconciliateNs(root) +namespace.freeNsList() +doc.serialize() # This should not segfault +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/outbuf.py b/python/tests/outbuf.py new file mode 100755 index 0000000..62761cc --- /dev/null +++ b/python/tests/outbuf.py @@ -0,0 +1,110 @@ +#!/usr/bin/python -u +import sys +import libxml2 +try: + import StringIO + str_io = StringIO.StringIO +except: + import io + str_io = io.StringIO + +def testSimpleBufferWrites(): + f = str_io() + buf = libxml2.createOutputBuffer(f, "ISO-8859-1") + buf.write(3, "foo") + buf.writeString("bar") + buf.close() + + if f.getvalue() != "foobar": + print("Failed to save to StringIO") + sys.exit(1) + +def testSaveDocToBuffer(): + """ + Regression test for bug #154294. + """ + input = 'Hello' + expected = '''\ + +Hello +''' + f = str_io() + buf = libxml2.createOutputBuffer(f, 'UTF-8') + doc = libxml2.parseDoc(input) + doc.saveFileTo(buf, 'UTF-8') + doc.freeDoc() + if f.getvalue() != expected: + print('xmlDoc.saveFileTo() call failed.') + print(' got: %s' % repr(f.getvalue())) + print('expected: %s' % repr(expected)) + sys.exit(1) + +def testSaveFormattedDocToBuffer(): + input = 'Some text' + # The formatted and non-formatted versions of the output. + expected = ('''\ + +Some text +''', '''\ + + + Some text + + +''') + doc = libxml2.parseDoc(input) + for i in (0, 1): + f = str_io() + buf = libxml2.createOutputBuffer(f, 'UTF-8') + doc.saveFormatFileTo(buf, 'UTF-8', i) + if f.getvalue() != expected[i]: + print('xmlDoc.saveFormatFileTo() call failed.') + print(' got: %s' % repr(f.getvalue())) + print('expected: %s' % repr(expected[i])) + sys.exit(1) + doc.freeDoc() + +def testSaveIntoOutputBuffer(): + """ + Similar to the previous two tests, except this time we invoke the save + methods on the output buffer object and pass in an XML node object. + """ + input = 'Hello' + expected = '''\ + +Hello +''' + f = str_io() + doc = libxml2.parseDoc(input) + buf = libxml2.createOutputBuffer(f, 'UTF-8') + buf.saveFileTo(doc, 'UTF-8') + if f.getvalue() != expected: + print('outputBuffer.saveFileTo() call failed.') + print(' got: %s' % repr(f.getvalue())) + print('expected: %s' % repr(expected)) + sys.exit(1) + f = str_io() + buf = libxml2.createOutputBuffer(f, 'UTF-8') + buf.saveFormatFileTo(doc, 'UTF-8', 1) + if f.getvalue() != expected: + print('outputBuffer.saveFormatFileTo() call failed.') + print(' got: %s' % repr(f.getvalue())) + print('expected: %s' % repr(expected)) + sys.exit(1) + doc.freeDoc() + +if __name__ == '__main__': + # Memory debug specific + libxml2.debugMemory(1) + + testSimpleBufferWrites() + testSaveDocToBuffer() + testSaveFormattedDocToBuffer() + testSaveIntoOutputBuffer() + + 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..0edd61d --- /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, "", 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, "", 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..48f6e82 --- /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, "content of c""") +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 = str_io("""""") +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 = str_io(""" + + + +""") +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 = str_io("""""") +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 = str_io("""""") +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 = str_io("""""") +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 = str_io("""""") +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 = str_io(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="""content of c""" +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="""""" +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="""bbbccc""" +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="""""" +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="""aaa""" +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="""

    """ +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="""

    """ +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=""" + + +
    +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +
    +""" +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..8570575 --- /dev/null +++ b/python/tests/reader2.py @@ -0,0 +1,265 @@ +#!/usr/bin/python -u +# +# this tests the DTD validation with the XmlTextReader interface +# +import sys +import glob +import string +import libxml2 +try: + import StringIO + str_io = StringIO.StringIO +except: + import io + str_io = io.StringIO + +# Memory debug specific +libxml2.debugMemory(1) + +err="" +expect="""../../test/valid/rss.xml:177: element rss: validity error : Element rss does not carry attribute version + + ^ +../../test/valid/xlink.xml:450: element termdef: validity error : ID dt-arc already defined +

    An + + + +xxx"> +]> + + &x; + bbb + +""" +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(str_io(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 = """ + + +]> + + &e; + +""" +tst_ent = """hello""" +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(str_io(tst_ent)) + return None + +libxml2.setEntityLoader(myResolver) + +input = libxml2.inputBuffer(str_io(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 = """ + + +&y;"> +yyy"> +]> + + &x; + &x; +""" +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(str_io(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 = """ + + +&y;"> +yyy"> +]> + + &x; + &x; +""" +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(str_io(s)) +reader = input.newTextReader("test5") +reader.SetParserProp(libxml2.PARSER_VALIDATE,1) +while reader.Read() == 1: + res = res + "%s %s %d\n" % (reader.NodeType(),reader.Name(),reader.Depth()) + +if res != expect: + print("test5 failed: unexpected output") + print(res) +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..4302b6c --- /dev/null +++ b/python/tests/reader3.py @@ -0,0 +1,160 @@ +#!/usr/bin/python -u +# +# this tests the entities substitutions with the XmlTextReader interface +# +import sys +import libxml2 +try: + import StringIO + str_io = StringIO.StringIO +except: + import io + str_io = io.StringIO + +docstr=""" +test

    "> +]> +&tst;""" + +# Memory debug specific +libxml2.debugMemory(1) + +# +# First test, normal don't substitute entities. +# +f = str_io(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 = str_io(docstr) +input = libxml2.inputBuffer(f) +reader = input.newTextReader("test_noent") +reader.SetParserProp(libxml2.PARSER_SUBST_ENTITIES, 1) +ret = reader.Read() +if ret != 1: + print("Error reading to root") + 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 = """ +]> +&simplestruct2.ent; +""" +expect="""10 struct 0 0 +1 struct 0 0 +1 descr 1 1 +15 struct 0 0 +""" +res="" +simplestruct2_ent="""""" + +def myResolver(URL, ID, ctxt): + if URL == "simplestruct2.ent": + return(str_io(simplestruct2_ent)) + return None + +libxml2.setEntityLoader(myResolver) + +input = libxml2.inputBuffer(str_io(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..0bb3e3f --- /dev/null +++ b/python/tests/reader4.py @@ -0,0 +1,50 @@ +#!/usr/bin/python -u +# +# this tests the basic APIs of the XmlTextReader interface +# +import libxml2 +import sys +try: + import StringIO + str_io = StringIO.StringIO +except: + import io + str_io = io.StringIO + +# Memory debug specific +libxml2.debugMemory(1) + +def tst_reader(s): + f = str_io(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("""""") + +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..82d0dae --- /dev/null +++ b/python/tests/reader5.py @@ -0,0 +1,47 @@ +#!/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 sys + +# Memory debug specific +libxml2.debugMemory(1) + +expect="""Aho, Alfred V., +Ravi Sethi, and Jeffrey D. Ullman. +Compilers: Principles, Techniques, and Tools. +Reading: Addison-Wesley, 1986, rpt. corr. 1988.""" + +f = open('../../test/valid/REC-xml-19980210.xml', 'rb') +input = libxml2.inputBuffer(f) +reader = input.newTextReader("REC") +res="" +while reader.Read() > 0: + 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..ef33b18 --- /dev/null +++ b/python/tests/reader6.py @@ -0,0 +1,128 @@ +#!/usr/bin/python -u +# +# this tests the entities substitutions with the XmlTextReader interface +# +import sys +import libxml2 +try: + import StringIO + str_io = StringIO.StringIO +except: + import io + str_io = io.StringIO + +schema=""" + + + + + + + + + + + + + + +""" +# 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=""" + +100 +""" + +f = str_io(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=""" + +1000 +""" + +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 = str_io(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..c88e370 --- /dev/null +++ b/python/tests/reader7.py @@ -0,0 +1,101 @@ +#!/usr/bin/python -u +# +# this tests the entities substitutions with the XmlTextReader interface +# +import sys +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=""" + +100 +""" +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=""" + +1000 +""" +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/reader8.py b/python/tests/reader8.py new file mode 100755 index 0000000..de2dcd6 --- /dev/null +++ b/python/tests/reader8.py @@ -0,0 +1,36 @@ +#!/usr/bin/python -u +# +# this tests the entities substitutions with the XmlTextReader interface +# +import sys +import libxml2 + +# Memory debug specific +libxml2.debugMemory(1) + +# +# Parse a document testing the Close() API +# +docstr=""" + +100 +""" + +reader = libxml2.readerForDoc(docstr, "test1", None, 0) +ret = reader.Read() +ret = reader.Read() +ret = reader.Close() + +if ret != 0: + print("Error closing the document test1") + sys.exit(1) + +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 100755 index 0000000..c8ceba5 --- /dev/null +++ b/python/tests/readererr.py @@ -0,0 +1,56 @@ +#!/usr/bin/python -u +# +# this tests the basic APIs of the XmlTextReader interface +# +import libxml2 +import sys +try: + import StringIO + str_io = StringIO.StringIO +except: + import io + str_io = io.StringIO + +# 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 1 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 = str_io("""content of c""") +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/readernext.py b/python/tests/readernext.py new file mode 100755 index 0000000..fcb9ae3 --- /dev/null +++ b/python/tests/readernext.py @@ -0,0 +1,86 @@ +#!/usr/bin/python -u +# -*- coding: ISO-8859-1 -*- +# +# this tests the next API of the XmlTextReader interface +# +import libxml2 +import sys +try: + import StringIO + str_io = StringIO.StringIO +except: + import io + str_io = io.StringIO + +# Memory debug specific +libxml2.debugMemory(1) + +f = str_io("""content of d""") +input = libxml2.inputBuffer(f) +reader = input.newTextReader("test_next") +ret = reader.Read() +if ret != 1: + print("test_next: Error reading to first element") + sys.exit(1) +if reader.Name() != "a" or reader.IsEmptyElement() != 0 or \ + reader.NodeType() != 1 or reader.HasAttributes() != 0: + print("test_next: Error reading the first element") + sys.exit(1) +ret = reader.Read() +if ret != 1: + print("test_next: Error reading to second element") + sys.exit(1) +if reader.Name() != "b" or reader.IsEmptyElement() != 0 or \ + reader.NodeType() != 1 or reader.HasAttributes() != 0: + print("test_next: Error reading the second element") + sys.exit(1) +ret = reader.Read() +if ret != 1: + print("test_next: Error reading to third element") + sys.exit(1) +if reader.Name() != "c" or reader.NodeType() != 1 or \ + reader.HasAttributes() != 0: + print("test_next: Error reading the third element") + sys.exit(1) +ret = reader.Read() +if ret != 1: + print("test_next: Error reading to end of third element") + sys.exit(1) +if reader.Name() != "b" or reader.NodeType() != 15: + print("test_next: Error reading to end of second element") + sys.exit(1) +ret = reader.Next() +if ret != 1: + print("test_next: Error moving to third element") + sys.exit(1) +if reader.Name() != "d" or reader.IsEmptyElement() != 0 or \ + reader.NodeType() != 1 or reader.HasAttributes() != 0: + print("test_next: Error reading third element") + sys.exit(1) +ret = reader.Next() +if ret != 1: + print("test_next: Error reading to end of first element") + sys.exit(1) +if reader.Name() != "a" or reader.IsEmptyElement() != 0 or \ + reader.NodeType() != 15 or reader.HasAttributes() != 0: + print("test_next: Error reading the end of first element") + sys.exit(1) +ret = reader.Read() +if ret != 0: + print("test_next: Error reading to end of document") + 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 100755 index 0000000..a03e459 --- /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..fa3d327 --- /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=""" + + A foo element. + + + + + + + +""" +instance=""" +""" + +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..6f21f52 --- /dev/null +++ b/python/tests/resolver.py @@ -0,0 +1,44 @@ +#!/usr/bin/python -u +import sys +import libxml2 +try: + import StringIO + str_io = StringIO.StringIO +except: + import io + str_io = io.StringIO + +# Memory debug specific +libxml2.debugMemory(1) + +def myResolver(URL, ID, ctxt): + return(str_io("")) + +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/schema.py b/python/tests/schema.py new file mode 100755 index 0000000..8089272 --- /dev/null +++ b/python/tests/schema.py @@ -0,0 +1,52 @@ +#!/usr/bin/python -u +import libxml2 +import sys + +# Memory debug specific +libxml2.debugMemory(1) + +schema=""" + + + + + + + + + + + +""" + +instance=""" + + Raymond + G + Bayliss + +""" + +ctxt_parser = libxml2.schemaNewMemParserCtxt(schema, len(schema)) +ctxt_schema = ctxt_parser.schemaParse() +ctxt_valid = ctxt_schema.schemaNewValidCtxt() +doc = libxml2.parseDoc(instance) +ret = doc.schemaValidateDoc(ctxt_valid) +if ret != 0: + print("error doing schema validation") + sys.exit(1) + +doc.freeDoc() +del ctxt_parser +del ctxt_schema +del ctxt_valid +libxml2.schemaCleanupTypes() + +# 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..80b901a --- /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("""hello""") +str = doc.serialize() +if str != """ +hello +""": + print("error serializing XML document 1") + sys.exit(1) +str = doc.serialize("iso-8859-1") +if str != """ +hello +""": + print("error serializing XML document 2") + sys.exit(1) +str = doc.serialize(format=1) +if str != """ + + hello + +""": + print("error serializing XML document 3") + sys.exit(1) +str = doc.serialize("iso-8859-1", 1) +if str != """ + + hello + +""": + print("error serializing XML document 4") + sys.exit(1) + +# +# Test serializing a subnode +# +root = doc.getRootElement() +str = root.serialize() +if str != """hello""": + print("error serializing XML root 1") + sys.exit(1) +str = root.serialize("iso-8859-1") +if str != """hello""": + print("error serializing XML root 2") + sys.exit(1) +str = root.serialize(format=1) +if str != """ + hello +""": + print("error serializing XML root 3") + sys.exit(1) +str = root.serialize("iso-8859-1", 1) +if str != """ + hello +""": + print("error serializing XML root 4") + sys.exit(1) +doc.freeDoc() + +# +# Testing HTML document serialization +# +doc = libxml2.htmlParseDoc("""Hello

    hello""", None) +str = doc.serialize() +if str != """ +Hello

    hello

    +""": + print("error serializing HTML document 1") + sys.exit(1) +str = doc.serialize("ISO-8859-1") +if str != """ +Hello

    hello

    +""": + print("error serializing HTML document 2") + sys.exit(1) +str = doc.serialize(format=1) +if str != """ + + + +Hello + +

    hello

    + +""": + print("error serializing HTML document 3") + sys.exit(1) +str = doc.serialize("iso-8859-1", 1) +if str != """ + + + +Hello + +

    hello

    + +""": + print("error serializing HTML document 4") + sys.exit(1) + +# +# Test serializing a subnode +# +doc.htmlSetMetaEncoding(None) +root = doc.getRootElement() +str = root.serialize() +if str != """Hello

    hello

    """: + print("error serializing HTML root 1") + sys.exit(1) +str = root.serialize("ISO-8859-1") +if str != """Hello

    hello

    """: + print("error serializing HTML root 2") + sys.exit(1) +str = root.serialize(format=1) +if str != """ + + +Hello + +

    hello

    +""": + print("error serializing HTML root 3") + sys.exit(1) +str = root.serialize("iso-8859-1", 1) +if str != """ + + +Hello + +

    hello

    +""": + 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/sync.py b/python/tests/sync.py new file mode 100755 index 0000000..5a8609e --- /dev/null +++ b/python/tests/sync.py @@ -0,0 +1,138 @@ +#!/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() + +log="" +chunk="""""" +ctxt = libxml2.createPushParser(handler, None, 0, "test.xml") +ctxt.parseChunk(chunk, len(chunk), 0) +ctxt=None + +reference = "startDocument:startElement foo None:startElement bar2 None:endElement bar2:" +if log != reference: + print("Error got: %s" % log) + print("Expected: %s" % reference) + sys.exit(1) + +log="" +chunk="""""" +ctxt = libxml2.createPushParser(handler, None, 0, "test.xml") +ctxt.parseChunk(chunk, len(chunk), 0) +ctxt=None + +reference = "startDocument:startElement foo None:startElement bar2 None:endElement bar2:" +if log != reference: + print("Error got: %s" % log) + print("Expected: %s" % reference) + sys.exit(1) + +log="" +chunk="""""" +ctxt = libxml2.createPushParser(handler, None, 0, "test.xml") +ctxt.parseChunk(chunk, len(chunk), 0) +ctxt=None + +reference = "startDocument:startElement foo None:startElement bar2 None:" +if log != reference: + print("Error got: %s" % log) + print("Expected: %s" % reference) + sys.exit(1) + +log="" +chunk="""""" +ctxt = libxml2.createPushParser(handler, None, 0, "test.xml") +ctxt.parseChunk(chunk, len(chunk), 0) +ctxt=None + +reference1 = "startDocument:startElement foo None:startElement bar2 {'a': '1', 'b': '2'}:endElement bar2:" +reference2 = "startDocument:startElement foo None:startElement bar2 {'b': '2', 'a': '1'}:endElement bar2:" +if log not in (reference1, reference2): + print("Error got: %s" % log) + print("Expected: %s" % reference) + sys.exit(1) + +log="" +chunk="""""" +ctxt = libxml2.createPushParser(handler, None, 0, "test.xml") +ctxt.parseChunk(chunk, len(chunk), 0) +ctxt=None + +reference1 = "startDocument:startElement foo None:startElement bar2 {'a': '1', 'b': '2'}:" +reference2 = "startDocument:startElement foo None:startElement bar2 {'b': '2', 'a': '1'}:" +if log not in (reference1, reference2): + print("Error got: %s" % log) + print("Expected: %s" % reference) + sys.exit(1) + +log="" +chunk="""""" +ctxt = libxml2.createPushParser(handler, None, 0, "test.xml") +ctxt.parseChunk(chunk, len(chunk), 0) +ctxt=None + +reference1 = "startDocument:startElement foo None:startElement bar2 {'a': '1', 'b': '2'}:endElement bar2:" +reference2 = "startDocument:startElement foo None:startElement bar2 {'b': '2', 'a': '1'}:endElement bar2:" +if log not in (reference1, reference2): + print("Error got: %s" % log) + print("Expected: %s" % reference) + sys.exit(1) + +log="" +chunk=""" diff --git a/python/tests/thread2.py b/python/tests/thread2.py new file mode 100755 index 0000000..2749eb0 --- /dev/null +++ b/python/tests/thread2.py @@ -0,0 +1,99 @@ +#!/usr/bin/python -u +import string, sys, time +try: + from _thread import get_ident +except: + from thread import get_ident +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" % 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..57a7318 --- /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 @@ +bar diff --git a/python/tests/tstLastError.py b/python/tests/tstLastError.py new file mode 100755 index 0000000..d5f9be7 --- /dev/null +++ b/python/tests/tstLastError.py @@ -0,0 +1,82 @@ +#!/usr/bin/python -u +import sys, unittest + +import libxml2 + +class TestCase(unittest.TestCase): + + def runTest(self): + self.test1() + self.test2() + + 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),)) + else: + print("OK") + + def failUnlessXmlError(self,f,args,exc,domain,code,message,level,file,line): + """Run function f, with arguments args and expect an exception exc; + 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 = "\n\n" + 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__": + test = TestCase() + test.setUp() + test.test1() + test.test2() + test.tearDown() diff --git a/python/tests/tstURI.py b/python/tests/tstURI.py new file mode 100755 index 0000000..e4d58af --- /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/tstmem.py b/python/tests/tstmem.py new file mode 100755 index 0000000..6b34cf3 --- /dev/null +++ b/python/tests/tstmem.py @@ -0,0 +1,36 @@ +#!/usr/bin/python -u +import libxml2 +import libxml2mod +import sys + +def error(msg, data): + pass + +# Memory debug specific +libxml2.debugMemory(1) + +dtd="""""" +instance=""" +""" + +dtd = libxml2.parseDTD(None, 'test.dtd') +ctxt = libxml2.newValidCtxt() +libxml2mod.xmlSetValidErrors(ctxt._o, error, error) +doc = libxml2.parseDoc(instance) +ret = doc.validateDtd(ctxt, dtd) +if ret != 1: + print("error doing DTD validation") + sys.exit(1) + +doc.freeDoc() +dtd.freeDtd() +del dtd +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/tstxpath.py b/python/tests/tstxpath.py new file mode 100755 index 0000000..0ba5a6d --- /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 @@ + +]> + diff --git a/python/tests/validDTD.py b/python/tests/validDTD.py new file mode 100755 index 0000000..4b03b8e --- /dev/null +++ b/python/tests/validDTD.py @@ -0,0 +1,59 @@ +#!/usr/bin/python -u +import libxml2 +import sys + +ARG = 'test string' + +class ErrorHandler: + + def __init__(self): + self.errors = [] + + def handler(self, msg, data): + if data != ARG: + raise Exception("Error handler did not receive correct argument") + self.errors.append(msg) + + +# Memory debug specific +libxml2.debugMemory(1) + +dtd="""""" +valid=""" +""" + +invalid=""" +""" + +dtd = libxml2.parseDTD(None, 'test.dtd') +ctxt = libxml2.newValidCtxt() +e = ErrorHandler() +ctxt.setValidityErrorHandler(e.handler, e.handler, ARG) + +# Test valid document +doc = libxml2.parseDoc(valid) +ret = doc.validateDtd(ctxt, dtd) +if ret != 1 or e.errors: + print("error doing DTD validation") + sys.exit(1) +doc.freeDoc() + +# Test invalid document +doc = libxml2.parseDoc(invalid) +ret = doc.validateDtd(ctxt, dtd) +if ret != 0 or not e.errors: + print("Error: document supposed to be invalid") +doc.freeDoc() + +dtd.freeDtd() +del dtd +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/validRNG.py b/python/tests/validRNG.py new file mode 100755 index 0000000..57f13a4 --- /dev/null +++ b/python/tests/validRNG.py @@ -0,0 +1,76 @@ +#!/usr/bin/python -u +import libxml2 +import sys + +ARG = 'test string' + +class ErrorHandler: + + def __init__(self): + self.errors = [] + + def handler(self, msg, data): + if data != ARG: + raise Exception("Error handler did not receive correct argument") + self.errors.append(msg) + +# Memory debug specific +libxml2.debugMemory(1) + +schema=""" + + A foo element. + + + + + + + +""" + +valid=""" +""" + +invalid=""" +bad""" + +rngp = libxml2.relaxNGNewMemParserCtxt(schema, len(schema)) +rngs = rngp.relaxNGParse() +ctxt = rngs.relaxNGNewValidCtxt() +e = ErrorHandler() +ctxt.setValidityErrorHandler(e.handler, e.handler, ARG) + +# Test valid document +doc = libxml2.parseDoc(valid) +ret = doc.relaxNGValidateDoc(ctxt) +if ret != 0 or e.errors: + print("error doing RelaxNG validation") + sys.exit(1) +doc.freeDoc() + +# Test invalid document +doc = libxml2.parseDoc(invalid) +ret = doc.relaxNGValidateDoc(ctxt) +if ret == 0 or not e.errors: + print("Error: document supposed to be RelaxNG invalid") + 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/validSchemas.py b/python/tests/validSchemas.py new file mode 100755 index 0000000..cc543f3 --- /dev/null +++ b/python/tests/validSchemas.py @@ -0,0 +1,83 @@ +#!/usr/bin/python -u +import libxml2 +import sys + +ARG = 'test string' + +class ErrorHandler: + + def __init__(self): + self.errors = [] + + def handler(self, msg, data): + if data != ARG: + raise Exception("Error handler did not receive correct argument") + self.errors.append(msg) + +# Memory debug specific +libxml2.debugMemory(1) + +schema=""" + + + + + + + + + + + +""" + +valid=""" + + Raymond + G + Bayliss + +""" + +invalid=""" + + G + Bayliss + +""" + +e = ErrorHandler() +ctxt_parser = libxml2.schemaNewMemParserCtxt(schema, len(schema)) +ctxt_schema = ctxt_parser.schemaParse() +ctxt_valid = ctxt_schema.schemaNewValidCtxt() +ctxt_valid.setValidityErrorHandler(e.handler, e.handler, ARG) + +# Test valid document +doc = libxml2.parseDoc(valid) +ret = doc.schemaValidateDoc(ctxt_valid) +if ret != 0 or e.errors: + print("error doing schema validation") + sys.exit(1) +doc.freeDoc() + +# Test invalid document +doc = libxml2.parseDoc(invalid) +ret = doc.schemaValidateDoc(ctxt_valid) +if ret == 0 or not e.errors: + print("Error: document supposer to be schema invalid") + sys.exit(1) +doc.freeDoc() + +del ctxt_parser +del ctxt_schema +del ctxt_valid +libxml2.schemaCleanupTypes() + +# 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/validate.py b/python/tests/validate.py new file mode 100755 index 0000000..16c0386 --- /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..47f0557 --- /dev/null +++ b/python/tests/walker.py @@ -0,0 +1,144 @@ +#!/usr/bin/python -u +# +# this tests the entities substitutions with the XmlTextReader interface +# +import sys +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=""" + +100 +""" +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=""" + +1000 +""" +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=""" + +1000 +""" +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..72e6c9d --- /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..b83d283 --- /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/xpathleak.py b/python/tests/xpathleak.py new file mode 100755 index 0000000..33ab61c --- /dev/null +++ b/python/tests/xpathleak.py @@ -0,0 +1,65 @@ +#!/usr/bin/python +import sys, libxml2 + +libxml2.debugMemory(True) + +expect="""--> Invalid expression +--> xmlXPathEval: evaluation failed +--> Invalid expression +--> xmlXPathEval: evaluation failed +--> Invalid expression +--> xmlXPathEval: evaluation failed +--> Invalid expression +--> xmlXPathEval: evaluation failed +--> Invalid expression +--> xmlXPathEval: evaluation failed +--> Invalid expression +--> xmlXPathEval: evaluation failed +--> Invalid expression +--> xmlXPathEval: evaluation failed +--> Invalid expression +--> xmlXPathEval: evaluation failed +--> Invalid expression +--> xmlXPathEval: evaluation failed +--> Invalid expression +--> xmlXPathEval: evaluation failed +""" +err="" +def callback(ctx, str): + global err + + err = err + "%s %s" % (ctx, str) + +libxml2.registerErrorHandler(callback, "-->") + +doc = libxml2.parseDoc("") +ctxt = doc.xpathNewContext() +ctxt.setContextNode(doc) +badexprs = ( + ":false()", "bad:()", "bad(:)", ":bad(:)", "bad:(:)", "bad:bad(:)", + "a:/b", "/c:/d", "//e:/f", "g://h" + ) +for expr in badexprs: + try: + ctxt.xpathEval(expr) + except libxml2.xpathError: + pass + else: + print("Unexpectedly legal expression:", expr) +ctxt.xpathFreeContext() +doc.freeDoc() + +if err != expect: + print("error") + print("received %s" %(err)) + print("expected %s" %(expect)) + sys.exit(1) + +libxml2.cleanupParser() +leakedbytes = libxml2.debugMemory(True) +if leakedbytes == 0: + print("OK") +else: + print("Memory leak", leakedbytes, "bytes") + # drop file to .memdump file in cwd, but won't work if not compiled in + libxml2.dumpMemory() diff --git a/python/tests/xpathns.py b/python/tests/xpathns.py new file mode 100755 index 0000000..379535e --- /dev/null +++ b/python/tests/xpathns.py @@ -0,0 +1,29 @@ +#!/usr/bin/python -u +# +import libxml2 + +expect=' xmlns:a="urn:whatevar"' + +# Memory debug specific +libxml2.debugMemory(1) + +d = libxml2.parseDoc("") +res="" +for n in d.xpathEval("//namespace::*"): + res = res + n.serialize() +d.freeDoc() + +if res != expect: + print("test5 failed: unexpected output") + print(res) +del res +del d +del n +# 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..11c8b32 --- /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..f237677 --- /dev/null +++ b/python/types.c @@ -0,0 +1,957 @@ +/* + * 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" +#include + +#if PY_MAJOR_VERSION >= 3 +#define PY_IMPORT_STRING_SIZE PyUnicode_FromStringAndSize +#define PY_IMPORT_STRING PyUnicode_FromString +#define PY_IMPORT_INT PyLong_FromLong +#else +#define PY_IMPORT_STRING_SIZE PyString_FromStringAndSize +#define PY_IMPORT_STRING PyString_FromString +#define PY_IMPORT_INT PyInt_FromLong +#endif + +#if PY_MAJOR_VERSION >= 3 +#include +#include +#include + +FILE * +libxml_PyFileGet(PyObject *f) { + int fd, flags; + FILE *res; + const char *mode; + + fd = PyObject_AsFileDescriptor(f); + if (!_PyVerify_fd(fd)) + return(NULL); + /* + * Get the flags on the fd to understand how it was opened + */ + flags = fcntl(fd, F_GETFL, 0); + switch (flags & O_ACCMODE) { + case O_RDWR: + if (flags & O_APPEND) + mode = "a+"; + else + mode = "rw"; + break; + case O_RDONLY: + if (flags & O_APPEND) + mode = "r+"; + else + mode = "r"; + break; + case O_WRONLY: + if (flags & O_APPEND) + mode = "a"; + else + mode = "w"; + break; + default: + return(NULL); + } + + /* + * the FILE struct gets a new fd, so that it can be closed + * independently of the file descriptor given. The risk though is + * lack of sync. So at the python level sync must be implemented + * before and after a conversion took place. No way around it + * in the Python3 infrastructure ! + * The duplicated fd and FILE * will be released in the subsequent + * call to libxml_PyFileRelease() which must be genrated accodingly + */ + fd = dup(fd); + if (fd == -1) + return(NULL); + res = fdopen(fd, mode); + if (res == NULL) { + close(fd); + return(NULL); + } + return(res); +} + +void libxml_PyFileRelease(FILE *f) { + if (f != NULL) + fclose(f); +} +#endif + +PyObject * +libxml_intWrap(int val) +{ + PyObject *ret; + +#ifdef DEBUG + printf("libxml_intWrap: val = %d\n", val); +#endif + ret = PY_IMPORT_INT((long) val); + return (ret); +} + +PyObject * +libxml_longWrap(long val) +{ + PyObject *ret; + +#ifdef DEBUG + printf("libxml_longWrap: val = %ld\n", val); +#endif + ret = PyLong_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); + } + ret = PY_IMPORT_STRING(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); + } + ret = PY_IMPORT_STRING(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); + } + ret = PY_IMPORT_STRING((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); + } + ret = PY_IMPORT_STRING((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); + } + ret = PY_IMPORT_STRING(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); + } + ret = PY_IMPORT_STRING((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 = PyCapsule_New((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 = PyCapsule_New((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 = PyCapsule_New((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 = PyCapsule_New((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 = PyCapsule_New((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 = PyCapsule_New((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 = PyCapsule_New((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 = PyCapsule_New((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 = PyCapsule_New((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 = PyCapsule_New((void *) ctxt, (char *) "xmlParserCtxtPtr", NULL); + return (ret); +} + +/** + * libxml_xmlXPathDestructNsNode: + * cap: xmlNsPtr namespace node capsule object + * + * This function is called if and when a namespace node returned in + * an XPath node set is to be destroyed. That's the only kind of + * object returned in node set not directly linked to the original + * xmlDoc document, see xmlXPathNodeSetDupNs. + */ +#if PY_VERSION_HEX < 0x02070000 +static void +libxml_xmlXPathDestructNsNode(void *cap, void *desc ATTRIBUTE_UNUSED) +#else +static void +libxml_xmlXPathDestructNsNode(PyObject *cap) +#endif +{ +#ifdef DEBUG + fprintf(stderr, "libxml_xmlXPathDestructNsNode called %p\n", cap); +#endif +#if PY_VERSION_HEX < 0x02070000 + xmlXPathNodeSetFreeNs((xmlNsPtr) cap); +#else + xmlXPathNodeSetFreeNs((xmlNsPtr) PyCapsule_GetPointer(cap, "xmlNsPtr")); +#endif +} + +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]; + if (node->type == XML_NAMESPACE_DECL) { + PyObject *ns = PyCapsule_New((void *) node, + (char *) "xmlNsPtr", + libxml_xmlXPathDestructNsNode); + PyList_SetItem(ret, i, ns); + /* make sure the xmlNsPtr is not destroyed now */ + obj->nodesetval->nodeTab[i] = NULL; + } else { + PyList_SetItem(ret, i, libxml_xmlNodePtrWrap(node)); + } + } + } + break; + case XPATH_BOOLEAN: + ret = PY_IMPORT_INT((long) obj->boolval); + break; + case XPATH_NUMBER: + ret = PyFloat_FromDouble(obj->floatval); + break; + case XPATH_STRING: + ret = PY_IMPORT_STRING((char *) obj->stringval); + break; + case XPATH_POINT: + { + PyObject *node; + PyObject *indexIntoNode; + PyObject *tuple; + + node = libxml_xmlNodePtrWrap(obj->user); + indexIntoNode = PY_IMPORT_INT((long) obj->index); + + tuple = PyTuple_New(2); + PyTuple_SetItem(tuple, 0, node); + PyTuple_SetItem(tuple, 1, indexIntoNode); + + ret = tuple; + break; + } + case XPATH_RANGE: + { + unsigned short bCollapsedRange; + + bCollapsedRange = ( (obj->user2 == NULL) || + ((obj->user2 == obj->user) && (obj->index == obj->index2)) ); + if ( bCollapsedRange ) { + PyObject *node; + PyObject *indexIntoNode; + PyObject *tuple; + PyObject *list; + + list = PyList_New(1); + + node = libxml_xmlNodePtrWrap(obj->user); + indexIntoNode = PY_IMPORT_INT((long) obj->index); + + tuple = PyTuple_New(2); + PyTuple_SetItem(tuple, 0, node); + PyTuple_SetItem(tuple, 1, indexIntoNode); + + PyList_SetItem(list, 0, tuple); + + ret = list; + } else { + PyObject *node; + PyObject *indexIntoNode; + PyObject *tuple; + PyObject *list; + + list = PyList_New(2); + + node = libxml_xmlNodePtrWrap(obj->user); + indexIntoNode = PY_IMPORT_INT((long) obj->index); + + tuple = PyTuple_New(2); + PyTuple_SetItem(tuple, 0, node); + PyTuple_SetItem(tuple, 1, indexIntoNode); + + PyList_SetItem(list, 0, tuple); + + node = libxml_xmlNodePtrWrap(obj->user2); + indexIntoNode = PY_IMPORT_INT((long) obj->index2); + + tuple = PyTuple_New(2); + PyTuple_SetItem(tuple, 0, node); + PyTuple_SetItem(tuple, 1, indexIntoNode); + + PyList_SetItem(list, 1, tuple); + + ret = list; + } + break; + } + case XPATH_LOCATIONSET: + { + xmlLocationSetPtr set; + + set = obj->user; + if ( set && set->locNr > 0 ) { + int i; + PyObject *list; + + list = PyList_New(set->locNr); + + for (i=0; ilocNr; i++) { + xmlXPathObjectPtr setobj; + PyObject *pyobj; + + setobj = set->locTab[i]; /*xmlXPathObjectPtr setobj*/ + + pyobj = libxml_xmlXPathObjectPtrWrap(setobj); + /* xmlXPathFreeObject(setobj) is called */ + set->locTab[i] = NULL; + + PyList_SetItem(list, i, pyobj); + } + set->locNr = 0; + ret = list; + } else { + Py_INCREF(Py_None); + ret = Py_None; + } + break; + } + default: +#ifdef DEBUG + printf("Unable to convert XPath object type %d\n", obj->type); +#endif + 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 PyLong_Check(obj) { +#ifdef PyLong_AS_LONG + ret = xmlXPathNewFloat((double) PyLong_AS_LONG(obj)); +#else + ret = xmlXPathNewFloat((double) PyInt_AS_LONG(obj)); +#endif +#ifdef PyBool_Check + } else if PyBool_Check (obj) { + + if (obj == Py_True) { + ret = xmlXPathNewBoolean(1); + } + else { + ret = xmlXPathNewBoolean(0); + } +#endif + } else if PyBytes_Check (obj) { + xmlChar *str; + + str = xmlStrndup((const xmlChar *) PyBytes_AS_STRING(obj), + PyBytes_GET_SIZE(obj)); + ret = xmlXPathWrapString(str); +#ifdef PyUnicode_Check + } else if PyUnicode_Check (obj) { +#if PY_VERSION_HEX >= 0x03030000 + xmlChar *str; + const char *tmp; + Py_ssize_t size; + + /* tmp doesn't need to be deallocated */ + tmp = PyUnicode_AsUTF8AndSize(obj, &size); + str = xmlStrndup((const xmlChar *) tmp, (int) size); + ret = xmlXPathWrapString(str); +#else + xmlChar *str = NULL; + PyObject *b; + + b = PyUnicode_AsUTF8String(obj); + if (b != NULL) { + str = xmlStrndup((const xmlChar *) PyBytes_AS_STRING(b), + PyBytes_GET_SIZE(b)); + Py_DECREF(b); + } + ret = xmlXPathWrapString(str); +#endif +#endif + } else if PyList_Check (obj) { + int i; + PyObject *node; + xmlNodePtr cur; + 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 (PyCapsule_CheckExact(node)) { +#ifdef DEBUG + printf("Got a Capsule\n"); +#endif + cur = PyxmlNode_Get(node); + } else if ((PyObject_HasAttrString(node, (char *) "_o")) && + (PyObject_HasAttrString(node, (char *) "get_doc"))) { + PyObject *wrapper; + + wrapper = PyObject_GetAttrString(node, (char *) "_o"); + if (wrapper != NULL) + cur = PyxmlNode_Get(wrapper); + } else { +#ifdef DEBUG + printf("Unknown object in Python return list\n"); +#endif + } + if (cur != NULL) { + xmlXPathNodeSetAdd(set, cur); + } + } + ret = xmlXPathWrapNodeSet(set); + } else { +#ifdef DEBUG + printf("Unable to convert Python Object to XPath"); +#endif + } + return (ret); +} + +PyObject * +libxml_xmlValidCtxtPtrWrap(xmlValidCtxtPtr valid) +{ + PyObject *ret; + +#ifdef DEBUG + printf("libxml_xmlValidCtxtPtrWrap: valid = %p\n", valid); +#endif + if (valid == NULL) { + Py_INCREF(Py_None); + return (Py_None); + } + + ret = + PyCapsule_New((void *) valid, + (char *) "xmlValidCtxtPtr", NULL); + + 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 = + PyCapsule_New((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 = + PyCapsule_New((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 = + PyCapsule_New((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 = + PyCapsule_New((void *) regexp, + (char *) "xmlRegexpPtr", NULL); + return (ret); +} +#endif /* LIBXML_REGEXP_ENABLED */ + +#ifdef LIBXML_READER_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 = + PyCapsule_New((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 = + PyCapsule_New((void *) locator, + (char *) "xmlTextReaderLocatorPtr", NULL); + return (ret); +} +#endif /* LIBXML_READER_ENABLED */ + +#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 = + PyCapsule_New((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 = + PyCapsule_New((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 = + PyCapsule_New((void *) valid, + (char *) "xmlRelaxNGValidCtxtPtr", NULL); + return (ret); +} + +PyObject * +libxml_xmlSchemaPtrWrap(xmlSchemaPtr ctxt) +{ + PyObject *ret; + +#ifdef DEBUG + printf("libxml_xmlSchemaPtrWrap: ctxt = %p\n", ctxt); +#endif + if (ctxt == NULL) { + Py_INCREF(Py_None); + return (Py_None); + } + ret = + PyCapsule_New((void *) ctxt, + (char *) "xmlSchemaPtr", NULL); + return (ret); +} + +PyObject * +libxml_xmlSchemaParserCtxtPtrWrap(xmlSchemaParserCtxtPtr ctxt) +{ + PyObject *ret; + +#ifdef DEBUG + printf("libxml_xmlSchemaParserCtxtPtrWrap: ctxt = %p\n", ctxt); +#endif + if (ctxt == NULL) { + Py_INCREF(Py_None); + return (Py_None); + } + ret = + PyCapsule_New((void *) ctxt, + (char *) "xmlSchemaParserCtxtPtr", NULL); + + return (ret); +} + +PyObject * +libxml_xmlSchemaValidCtxtPtrWrap(xmlSchemaValidCtxtPtr valid) +{ + PyObject *ret; + +#ifdef DEBUG + printf("libxml_xmlSchemaValidCtxtPtrWrap: valid = %p\n", valid); +#endif + if (valid == NULL) { + Py_INCREF(Py_None); + return (Py_None); + } + + ret = + PyCapsule_New((void *) valid, + (char *) "xmlSchemaValidCtxtPtr", 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 = PyCapsule_New((void *) error, (char *) "xmlErrorPtr", NULL); + return (ret); +} diff --git a/regressions.py b/regressions.py new file mode 100755 index 0000000..0e813c2 --- /dev/null +++ b/regressions.py @@ -0,0 +1,350 @@ +#!/usr/bin/python -u +import glob, os, string, sys, thread, time +# import difflib +import libxml2 + +### +# +# This is a "Work in Progress" attempt at a python script to run the +# various regression tests. The rationale for this is that it should be +# possible to run this on most major platforms, including those (such as +# Windows) which don't support gnu Make. +# +# The script is driven by a parameter file which defines the various tests +# to be run, together with the unique settings for each of these tests. A +# script for Linux is included (regressions.xml), with comments indicating +# the significance of the various parameters. To run the tests under Windows, +# edit regressions.xml and remove the comment around the default parameter +# "" (i.e. make it point to the location of the binary executables). +# +# Note that this current version requires the Python bindings for libxml2 to +# have been previously installed and accessible +# +# See Copyright for the status of this software. +# William Brack (wbrack@mmm.com.hk) +# +### +defaultParams = {} # will be used as a dictionary to hold the parsed params + +# This routine is used for comparing the expected stdout / stdin with the results. +# The expected data has already been read in; the result is a file descriptor. +# Within the two sets of data, lines may begin with a path string. If so, the +# code "relativises" it by removing the path component. The first argument is a +# list already read in by a separate thread; the second is a file descriptor. +# The two 'base' arguments are to let me "relativise" the results files, allowing +# the script to be run from any directory. +def compFiles(res, expected, base1, base2): + l1 = len(base1) + exp = expected.readlines() + expected.close() + # the "relativisation" is done here + for i in range(len(res)): + j = string.find(res[i],base1) + if (j == 0) or ((j == 2) and (res[i][0:2] == './')): + col = string.find(res[i],':') + if col > 0: + start = string.rfind(res[i][:col], '/') + if start > 0: + res[i] = res[i][start+1:] + + for i in range(len(exp)): + j = string.find(exp[i],base2) + if (j == 0) or ((j == 2) and (exp[i][0:2] == './')): + col = string.find(exp[i],':') + if col > 0: + start = string.rfind(exp[i][:col], '/') + if start > 0: + exp[i] = exp[i][start+1:] + + ret = 0 + # ideally we would like to use difflib functions here to do a + # nice comparison of the two sets. Unfortunately, during testing + # (using python 2.3.3 and 2.3.4) the following code went into + # a dead loop under windows. I'll pursue this later. +# diff = difflib.ndiff(res, exp) +# diff = list(diff) +# for line in diff: +# if line[:2] != ' ': +# print string.strip(line) +# ret = -1 + + # the following simple compare is fine for when the two data sets + # (actual result vs. expected result) are equal, which should be true for + # us. Unfortunately, if the test fails it's not nice at all. + rl = len(res) + el = len(exp) + if el != rl: + print 'Length of expected is %d, result is %d' % (el, rl) + ret = -1 + for i in range(min(el, rl)): + if string.strip(res[i]) != string.strip(exp[i]): + print '+:%s-:%s' % (res[i], exp[i]) + ret = -1 + if el > rl: + for i in range(rl, el): + print '-:%s' % exp[i] + ret = -1 + elif rl > el: + for i in range (el, rl): + print '+:%s' % res[i] + ret = -1 + return ret + +# Separate threads to handle stdout and stderr are created to run this function +def readPfile(file, list, flag): + data = file.readlines() # no call by reference, so I cheat + for l in data: + list.append(l) + file.close() + flag.append('ok') + +# This routine runs the test program (e.g. xmllint) +def runOneTest(testDescription, filename, inbase, errbase): + if 'execpath' in testDescription: + dir = testDescription['execpath'] + '/' + else: + dir = '' + cmd = os.path.abspath(dir + testDescription['testprog']) + if 'flag' in testDescription: + for f in string.split(testDescription['flag']): + cmd += ' ' + f + if 'stdin' not in testDescription: + cmd += ' ' + inbase + filename + if 'extarg' in testDescription: + cmd += ' ' + testDescription['extarg'] + + noResult = 0 + expout = None + if 'resext' in testDescription: + if testDescription['resext'] == 'None': + noResult = 1 + else: + ext = '.' + testDescription['resext'] + else: + ext = '' + if not noResult: + try: + fname = errbase + filename + ext + expout = open(fname, 'rt') + except: + print "Can't open result file %s - bypassing test" % fname + return + + noErrors = 0 + if 'reserrext' in testDescription: + if testDescription['reserrext'] == 'None': + noErrors = 1 + else: + if len(testDescription['reserrext'])>0: + ext = '.' + testDescription['reserrext'] + else: + ext = '' + else: + ext = '' + if not noErrors: + try: + fname = errbase + filename + ext + experr = open(fname, 'rt') + except: + experr = None + else: + experr = None + + pin, pout, perr = os.popen3(cmd) + if 'stdin' in testDescription: + infile = open(inbase + filename, 'rt') + pin.writelines(infile.readlines()) + infile.close() + pin.close() + + # popen is great fun, but can lead to the old "deadly embrace", because + # synchronizing the writing (by the task being run) of stdout and stderr + # with respect to the reading (by this task) is basically impossible. I + # tried several ways to cheat, but the only way I have found which works + # is to do a *very* elementary multi-threading approach. We can only hope + # that Python threads are implemented on the target system (it's okay for + # Linux and Windows) + + th1Flag = [] # flags to show when threads finish + th2Flag = [] + outfile = [] # lists to contain the pipe data + errfile = [] + th1 = thread.start_new_thread(readPfile, (pout, outfile, th1Flag)) + th2 = thread.start_new_thread(readPfile, (perr, errfile, th2Flag)) + while (len(th1Flag)==0) or (len(th2Flag)==0): + time.sleep(0.001) + if not noResult: + ret = compFiles(outfile, expout, inbase, 'test/') + if ret != 0: + print 'trouble with %s' % cmd + else: + if len(outfile) != 0: + for l in outfile: + print l + print 'trouble with %s' % cmd + if experr != None: + ret = compFiles(errfile, experr, inbase, 'test/') + if ret != 0: + print 'trouble with %s' % cmd + else: + if not noErrors: + if len(errfile) != 0: + for l in errfile: + print l + print 'trouble with %s' % cmd + + if 'stdin' not in testDescription: + pin.close() + +# This routine is called by the parameter decoding routine whenever the end of a +# 'test' section is encountered. Depending upon file globbing, a large number of +# individual tests may be run. +def runTest(description): + testDescription = defaultParams.copy() # set defaults + testDescription.update(description) # override with current ent + if 'testname' in testDescription: + print "## %s" % testDescription['testname'] + if not 'file' in testDescription: + print "No file specified - can't run this test!" + return + # Set up the source and results directory paths from the decoded params + dir = '' + if 'srcdir' in testDescription: + dir += testDescription['srcdir'] + '/' + if 'srcsub' in testDescription: + dir += testDescription['srcsub'] + '/' + + rdir = '' + if 'resdir' in testDescription: + rdir += testDescription['resdir'] + '/' + if 'ressub' in testDescription: + rdir += testDescription['ressub'] + '/' + + testFiles = glob.glob(os.path.abspath(dir + testDescription['file'])) + if testFiles == []: + print "No files result from '%s'" % testDescription['file'] + return + + # Some test programs just don't work (yet). For now we exclude them. + count = 0 + excl = [] + if 'exclfile' in testDescription: + for f in string.split(testDescription['exclfile']): + glb = glob.glob(dir + f) + for g in glb: + excl.append(os.path.abspath(g)) + + # Run the specified test program + for f in testFiles: + if not os.path.isdir(f): + if f not in excl: + count = count + 1 + runOneTest(testDescription, os.path.basename(f), dir, rdir) + +# +# The following classes are used with the xmlreader interface to interpret the +# parameter file. Once a test section has been identified, runTest is called +# with a dictionary containing the parsed results of the interpretation. +# + +class testDefaults: + curText = '' # accumulates text content of parameter + + def addToDict(self, key): + txt = string.strip(self.curText) +# if txt == '': +# return + if key not in defaultParams: + defaultParams[key] = txt + else: + defaultParams[key] += ' ' + txt + + def processNode(self, reader, curClass): + if reader.Depth() == 2: + if reader.NodeType() == 1: + self.curText = '' # clear the working variable + elif reader.NodeType() == 15: + if (reader.Name() != '#text') and (reader.Name() != '#comment'): + self.addToDict(reader.Name()) + elif reader.Depth() == 3: + if reader.Name() == '#text': + self.curText += reader.Value() + + elif reader.NodeType() == 15: # end of element + print "Defaults have been set to:" + for k in defaultParams.keys(): + print " %s : '%s'" % (k, defaultParams[k]) + curClass = rootClass() + return curClass + + +class testClass: + def __init__(self): + self.testParams = {} # start with an empty set of params + self.curText = '' # and empty text + + def addToDict(self, key): + data = string.strip(self.curText) + if key not in self.testParams: + self.testParams[key] = data + else: + if self.testParams[key] != '': + data = ' ' + data + self.testParams[key] += data + + def processNode(self, reader, curClass): + if reader.Depth() == 2: + if reader.NodeType() == 1: + self.curText = '' # clear the working variable + if reader.Name() not in self.testParams: + self.testParams[reader.Name()] = '' + elif reader.NodeType() == 15: + if (reader.Name() != '#text') and (reader.Name() != '#comment'): + self.addToDict(reader.Name()) + elif reader.Depth() == 3: + if reader.Name() == '#text': + self.curText += reader.Value() + + elif reader.NodeType() == 15: # end of element + runTest(self.testParams) + curClass = rootClass() + return curClass + + +class rootClass: + def processNode(self, reader, curClass): + if reader.Depth() == 0: + return curClass + if reader.Depth() != 1: + print "Unexpected junk: Level %d, type %d, name %s" % ( + reader.Depth(), reader.NodeType(), reader.Name()) + return curClass + if reader.Name() == 'test': + curClass = testClass() + curClass.testParams = {} + elif reader.Name() == 'defaults': + curClass = testDefaults() + return curClass + +def streamFile(filename): + try: + reader = libxml2.newTextReaderFilename(filename) + except: + print "unable to open %s" % (filename) + return + + curClass = rootClass() + ret = reader.Read() + while ret == 1: + curClass = curClass.processNode(reader, curClass) + ret = reader.Read() + + if ret != 0: + print "%s : failed to parse" % (filename) + +# OK, we're finished with all the routines. Now for the main program:- +if len(sys.argv) != 2: + print "Usage: maketest {filename}" + sys.exit(-1) + +streamFile(sys.argv[1]) diff --git a/regressions.xml b/regressions.xml new file mode 100644 index 0000000..c78838a --- /dev/null +++ b/regressions.xml @@ -0,0 +1,226 @@ + + + + + + noname + + . + xmllint + test + result + *.xml + err + + + + + XML Regression Tests + failed to load external entity + + + XML Entity Subst Regression Tests + noent + --noent + + + XML Namespaces Regression Tests + namespaces + namespaces + + + xml:id Regression Tests + testXPath + xmlid + xmlid + -i + id_*.xml + "id('bar')" + + + Error Cases Regression Tests + errors + errors + + + Error Cases Stream Regression Tests + errors + errors + str + --stream + + + Reader Regression Tests + rdr + --nonet + --debug + --stream + * + None + + + Walker Regression Tests + rdr + --nonet + --debug + --walker + * + None + + + Reader Entities Substitution Regression Tests + rde + --nonet + --debug + --stream + --noent + * + None + + + SAX Callbacks Regression Tests + testSAX + sax + * + utf16*.xml + None + + + XML Push Regression Tests + --push + failed to load external entity + + + HTML Regression Tests + testHTML + HTML + HTML + * + wired.html + + + Push HTML Regression Tests + testHTML + --push + HTML + HTML + * + + + HTML SAX Regression Tests + testHTML + --sax + HTML + HTML + sax + None + * + + + Push HTML SAX Regression Tests + testHTML + --sax + --push + HTML + HTML + sax + None + * + + + Valid Documents Regression Tests + VCM + VCM + None + None + * + --valid + --noout + --nowarning + + + Validity Checking Regression Tests + VC + VC + None + + * + --valid + --noout + + + General Documents Valid Regression Tests + valid + valid + * + --valid + + + URI Module Regression Tests (1) + testURI + URI + + URI + None + *.data + + -base "http://foo.com/path/to/index.html?orig#help" + + + URI Module Regression Tests (2) + testURI + URI + + URI + None + *.uri + + + XPath Regression Tests (1) + testXPath + XPath/expr + XPath/expr + * + -f + --expr + + + XInclude Regression Tests + XInclude/docs + XInclude + * + --nowarning + --xinclude + + + XInclude xmlReader Regression Tests + XInclude/docs + XInclude + rdr + * + --nowarning + --xinclude + --stream + --debug + + diff --git a/relaxng.c b/relaxng.c new file mode 100644 index 0000000..56a3344 --- /dev/null +++ b/relaxng.c @@ -0,0 +1,11058 @@ +/* + * relaxng.c : implementation of the Relax-NG handling and validity checking + * + * See Copyright for the status of this software. + * + * Daniel Veillard + */ + +/** + * 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 +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include + +/* + * The Relax-NG namespace + */ +static const xmlChar *xmlRelaxNGNs = (const xmlChar *) + "http://relaxng.org/ns/structure/1.0"; + +#define IS_RELAXNG(node, typ) \ + ((node != NULL) && (node->ns != NULL) && \ + (node->type == XML_ELEMENT_NODE) && \ + (xmlStrEqual(node->name, (const xmlChar *) typ)) && \ + (xmlStrEqual(node->ns->href, xmlRelaxNGNs))) + + +#if 0 +#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 1 + +#define DEBUG_ERROR 1 + +#define DEBUG_COMPILE 1 + +#define DEBUG_PROGRESSIVE 1 +#endif + +#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; /* content */ + xmlRelaxNGCombine combine; /* the default combine value */ + xmlRelaxNGDefinePtr startList; /* list of 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) +#define IS_EXTERNAL_REF (1 << 8) + +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 */ + int freedoc; /* need to free the document */ +}; + +#define FLAGS_IGNORABLE 1 +#define FLAGS_NEGATIVE 2 +#define FLAGS_MIXED_CONTENT 4 +#define FLAGS_NOERROR 8 + +/** + * 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 */ + int externalRef; /* 1 if an external ref */ +}; + + +/************************************************************************ + * * + * 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) { + if (ctxt->serror != NULL) + schannel = ctxt->serror; + else + channel = ctxt->error; + data = ctxt->userData; + ctxt->nbErrors++; + } + 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) { + if (ctxt->serror != NULL) + schannel = ctxt->serror; + else + channel = ctxt->error; + data = ctxt->userData; + ctxt->nbErrors++; + } + 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 LIBXML_ATTR_FORMAT(4,0) +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) { + if (ctxt->serror != NULL) + schannel = ctxt->serror; + else + channel = ctxt->error; + data = ctxt->userData; + ctxt->nbErrors++; + } + __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 LIBXML_ATTR_FORMAT(4,0) +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) { + if (ctxt->serror != NULL) + schannel = ctxt->serror; + else + channel = ctxt->error; + data = ctxt->userData; + ctxt->nbErrors++; + } + __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->freeStates != 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 || states == 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->freeStates == 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 (NULL); + ctxt->incNr--; + if (ctxt->incNr > 0) + ctxt->inc = ctxt->incTab[ctxt->incNr - 1]; + else + ctxt->inc = NULL; + ret = ctxt->incTab[ctxt->incNr]; + ctxt->incTab[ctxt->incNr] = NULL; + 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 start from %s\n", URL); + else + xmlGenericError(xmlGenericErrorContext, + "Elimination of 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, + xmlDocGetRootElement(inc->doc)->children, + name) == 1) { + found = 1; + } +#ifdef DEBUG_INCLUDE + if (href != NULL) + xmlFree(href); +#endif + } + } + } + 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 (NULL); + ctxt->docNr--; + if (ctxt->docNr > 0) + ctxt->doc = ctxt->docTab[ctxt->docNr - 1]; + else + ctxt->doc = NULL; + ret = ctxt->docTab[ctxt->docNr]; + ctxt->docTab[ctxt->docNr] = NULL; + 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; + ret->externalRef = 1; + 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; + xmlChar *result = xmlCharStrdup(msg); + return (xmlEscapeFormatString(&result)); +} + +/** + * 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->flags & FLAGS_NOERROR) + 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) + return; + if (ctxt->flags & FLAGS_NOERROR) + return; + +#ifdef DEBUG_ERROR + xmlGenericError(xmlGenericErrorContext, "Adding error %d\n", err); +#endif + /* + * generate the error directly + */ + if (((ctxt->flags & FLAGS_IGNORABLE) == 0) || + (ctxt->flags & FLAGS_NEGATIVE)) { + 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; + } + if ((node == NULL) && (seq == NULL)) { + node = ctxt->pnode; + } + 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) { + if (res1 != (xmlSchemaValPtr) comp1) + 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. + */ +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 * + * * + ************************************************************************/ + +/* from automata.c but not exported */ +void xmlAutomataSetFlags(xmlAutomataPtr am, int flags); + + +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; + } + /* + * Because the routine is recursive, we must guard against + * discovering both COMPILABLE and NOT_COMPILABLE + */ + if (ret == 0) { + def->dflags &= ~IS_COMPILABLE; + def->dflags |= IS_NOT_COMPILABLE; + } + if ((ret == 1) && !(def->dflags &= IS_NOT_COMPILABLE)) + 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: + case XML_RELAXNG_NOT_ALLOWED: + ret = 0; + 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); + + /* + * assume identical strings but not same pointer are different + * atoms, needed for non-determinism detection + * That way if 2 elements with the same name are in a choice + * branch the automata is found non-deterministic and + * we fallback to the normal validation which does the right + * thing of exploring both choices. + */ + xmlAutomataSetFlags(ctxt->am, 1); + + ctxt->state = xmlAutomataGetInitState(ctxt->am); + while (list != NULL) { + xmlRelaxNGCompile(ctxt, list); + list = list->next; + } + xmlAutomataSetFinalState(ctxt->am, ctxt->state); + if (xmlAutomataIsDeterminist(ctxt->am)) + def->contModel = xmlAutomataCompile(ctxt->am); + + 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); + xmlAutomataSetFlags(ctxt->am, 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)) { +#ifdef DEBUG_COMPILE + xmlGenericError(xmlGenericErrorContext, + "Content model not determinist %s\n", + def->name); +#endif + /* + * 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; + + list = def->content; + while (list != NULL) { + xmlRelaxNGCompile(ctxt, list); + list = list->next; + } + 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 (node == NULL) + return(NULL); + + 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 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 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; + 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, last = NULL; + + except = xmlRelaxNGNewDefine(ctxt, node); + if (except == NULL) { + return (def); + } + except->type = XML_RELAXNG_EXCEPT; + child = content->children; + def->content = 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 (last == NULL) { + except->content = last = tmp2; + } else { + last->next = tmp2; + last = 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; + + memset(&ctxt, 0, sizeof(xmlRelaxNGValidCtxt)); + + ctxt.flags = FLAGS_IGNORABLE | FLAGS_NOERROR; + + if ((def1->type == XML_RELAXNG_ELEMENT) || + (def1->type == XML_RELAXNG_ATTRIBUTE)) { + if (def2->type == XML_RELAXNG_TEXT) + return (1); + if (def1->name != NULL) { + node.name = def1->name; + } else { + node.name = invalidName; + } + if (def1->ns != NULL) { + if (def1->ns[0] == 0) { + node.ns = NULL; + } else { + node.ns = &ns; + ns.href = def1->ns; + } + } else { + node.ns = NULL; + } + 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) { + ret = xmlRelaxNGCompareNameClasses(def1->content, def2); + if (ret == 0) + ret = 1; + else if (ret == 1) + 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) { + xmlRelaxNGDefinePtr *temp; + + max *= 2; + temp = xmlRealloc(ret, + (max + 1) * sizeof(xmlRelaxNGDefinePtr)); + if (temp == NULL) { + xmlRngPErrMemory(ctxt, "getting element list\n"); + xmlFree(ret); + return (NULL); + } + ret = temp; + } + 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 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); +} + +/** + * xmlRelaxNGParseImportRef: + * @payload: the parser context + * @data: the current grammar + * @name: the reference name + * + * Import import one references into the current grammar + */ +static void +xmlRelaxNGParseImportRef(void *payload, void *data, xmlChar *name) { + xmlRelaxNGParserCtxtPtr ctxt = (xmlRelaxNGParserCtxtPtr) data; + xmlRelaxNGDefinePtr def = (xmlRelaxNGDefinePtr) payload; + int tmp; + + def->dflags |= IS_EXTERNAL_REF; + + tmp = xmlHashAddEntry(ctxt->grammar->refs, name, def); + if (tmp < 0) { + xmlRelaxNGDefinePtr prev; + + prev = (xmlRelaxNGDefinePtr) + xmlHashLookup(ctxt->grammar->refs, def->name); + if (prev == NULL) { + if (def->name != NULL) { + xmlRngPErr(ctxt, NULL, XML_RNGP_REF_CREATE_FAILED, + "Error refs definitions '%s'\n", + def->name, NULL); + } else { + xmlRngPErr(ctxt, NULL, XML_RNGP_REF_CREATE_FAILED, + "Error refs definitions\n", + NULL, NULL); + } + } else { + def->nextHash = prev->nextHash; + prev->nextHash = def; + } + } +} + +/** + * xmlRelaxNGParseImportRefs: + * @ctxt: the parser context + * @grammar: the sub grammar + * + * Import references from the subgrammar into the current grammar + * + * Returns 0 in case of success, -1 in case of failure + */ +static int +xmlRelaxNGParseImportRefs(xmlRelaxNGParserCtxtPtr ctxt, + xmlRelaxNGGrammarPtr grammar) { + if ((ctxt == NULL) || (grammar == NULL) || (ctxt->grammar == NULL)) + return(-1); + if (grammar->refs == NULL) + return(0); + if (ctxt->grammar->refs == NULL) + ctxt->grammar->refs = xmlHashCreate(10); + if (ctxt->grammar->refs == NULL) { + xmlRngPErr(ctxt, NULL, XML_RNGP_REF_CREATE_FAILED, + "Could not create references hash\n", NULL, NULL); + return(-1); + } + xmlHashScan(grammar->refs, xmlRelaxNGParseImportRef, ctxt); + return(0); +} + +/** + * 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; + if (docu->schema->topgrammar->refs) + xmlRelaxNGParseImportRefs(ctxt, docu->schema->topgrammar); + } + + /* + * 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 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 == NULL ? (const xmlChar *) "nothing" : 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 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; + + /* + * Those rules don't apply to imported ref from xmlRelaxNGParseImportRef + */ + if (ref->dflags & IS_EXTERNAL_REF) + return; + + 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, + " 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, + " use both 'choice' and 'interleave'\n", + NULL, NULL); + } + } else { + xmlRngPErr(ctxt, cur->node, XML_RNGP_UNKNOWN_COMBINE, + " 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 element miss the combine attribute\n", + NULL, NULL); + } + } + + cur = cur->next; + } +#ifdef DEBUG + xmlGenericError(xmlGenericErrorContext, + "xmlRelaxNGCombineStart(): merging : %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; + 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)) { + /* + * This should actually be caught by list//element(ref) at the + * element boundaries, c.f. Bug #159968 local refs are dropped + * in step 4.19. + */ +#if 0 + if (flags & XML_RELAXNG_IN_LIST) { + xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_LIST_REF, + "Found forbidden pattern list//ref\n", NULL, + NULL); + } +#endif + 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->content == NULL) { + if (cur->type == XML_RELAXNG_PARENTREF) + xmlRngPErr(ctxt, cur->node, XML_RNGP_REF_NO_DEF, + "Internal found no define for parent refs\n", + NULL, NULL); + else + xmlRngPErr(ctxt, cur->node, XML_RNGP_REF_NO_DEF, + "Internal found no define for ref %s\n", + (cur->name ? cur->name: BAD_CAST "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) { + /* + * TODO: scan complain that tmp is never used, seems on purpose + * need double-checking + */ + 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 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 content\n", NULL, NULL); + } else if (ctxt->grammar->start == NULL) { + xmlRngPErr(ctxt, nodes, XML_RNGP_GRAMMAR_NO_START, + "Element has no \n", NULL, NULL); + } + + /* + * Apply 4.17 merging 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); + if (schema->topgrammar == NULL) { + xmlRelaxNGFree(schema); + return (NULL); + } + } else { + xmlRelaxNGGrammarPtr tmp, ret; + + schema->topgrammar = ret = xmlRelaxNGNewGrammar(ctxt); + if (schema->topgrammar == NULL) { + xmlRelaxNGFree(schema); + 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; + 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->freedoc = 1; + 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); + } + if ((ctxt->document != NULL) && (ctxt->freedoc)) + xmlFreeDoc(ctxt->document); + 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); + } +} + +/** + * xmlRelaxNGCleanupAttributes: + * @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); + if (ns != NULL) + xmlFree(ns); + 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 (ns != NULL) + xmlFree(ns); + 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); + if (ns != NULL) + xmlFree(ns); + 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 (ns != NULL) + xmlFree(ns); + 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); + if (ns != NULL) + xmlFree(ns); + 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 = xmlNewDocNode(cur->doc, cur->ns, + BAD_CAST "name", NULL); + 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); + } + } + /* + * This 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); + /* + * Since we are about to delete cur, if its nsDef is non-NULL we + * need to preserve it (it contains the ns definitions for the + * children we just moved). We'll just stick it on to the end + * of cur->parent's list, since it's never going to be re-serialized + * (bug 143738). + */ + if ((cur->nsDef != NULL) && (cur->parent != NULL)) { + xmlNsPtr parDef = (xmlNsPtr)&cur->parent->nsDef; + while (parDef->next != NULL) + parDef = parDef->next; + parDef->next = cur->nsDef; + cur->nsDef = NULL; + } + 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 != NULL) && + (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. + * + * 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 ? ctxt->URL : BAD_CAST "schemas"), NULL); + + xmlFreeDoc(ctxt->document); + ctxt->document = NULL; + return (NULL); + } + ret = xmlRelaxNGParseDocument(ctxt, root); + if (ret == NULL) { + xmlFreeDoc(ctxt->document); + ctxt->document = NULL; + 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->serror = NULL; + 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); +} + +/** + * xmlRelaxNGSetParserStructuredErrors: + * @ctxt: a Relax-NG parser context + * @serror: the error callback + * @ctx: contextual data for the callbacks + * + * Set the callback functions used to handle errors for a parsing context + */ +void +xmlRelaxNGSetParserStructuredErrors(xmlRelaxNGParserCtxtPtr ctxt, + xmlStructuredErrorFunc serror, + void *ctx) +{ + if (ctxt == NULL) + return; + ctxt->serror = serror; + ctxt->error = NULL; + ctxt->warning = NULL; + ctxt->userData = ctx; +} + +#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, "\n"); + break; + case XML_RELAXNG_NOT_ALLOWED: + fprintf(output, "\n"); + break; + case XML_RELAXNG_TEXT: + fprintf(output, "\n"); + break; + case XML_RELAXNG_ELEMENT: + fprintf(output, "\n"); + if (define->name != NULL) { + fprintf(output, "ns != NULL) + fprintf(output, " ns=\"%s\"", define->ns); + fprintf(output, ">%s\n", define->name); + } + xmlRelaxNGDumpDefines(output, define->attrs); + xmlRelaxNGDumpDefines(output, define->content); + fprintf(output, "\n"); + break; + case XML_RELAXNG_LIST: + fprintf(output, "\n"); + xmlRelaxNGDumpDefines(output, define->content); + fprintf(output, "\n"); + break; + case XML_RELAXNG_ONEORMORE: + fprintf(output, "\n"); + xmlRelaxNGDumpDefines(output, define->content); + fprintf(output, "\n"); + break; + case XML_RELAXNG_ZEROORMORE: + fprintf(output, "\n"); + xmlRelaxNGDumpDefines(output, define->content); + fprintf(output, "\n"); + break; + case XML_RELAXNG_CHOICE: + fprintf(output, "\n"); + xmlRelaxNGDumpDefines(output, define->content); + fprintf(output, "\n"); + break; + case XML_RELAXNG_GROUP: + fprintf(output, "\n"); + xmlRelaxNGDumpDefines(output, define->content); + fprintf(output, "\n"); + break; + case XML_RELAXNG_INTERLEAVE: + fprintf(output, "\n"); + xmlRelaxNGDumpDefines(output, define->content); + fprintf(output, "\n"); + break; + case XML_RELAXNG_OPTIONAL: + fprintf(output, "\n"); + xmlRelaxNGDumpDefines(output, define->content); + fprintf(output, "\n"); + break; + case XML_RELAXNG_ATTRIBUTE: + fprintf(output, "\n"); + xmlRelaxNGDumpDefines(output, define->content); + fprintf(output, "\n"); + break; + case XML_RELAXNG_DEF: + fprintf(output, "name != NULL) + fprintf(output, " name=\"%s\"", define->name); + fprintf(output, ">\n"); + xmlRelaxNGDumpDefines(output, define->content); + fprintf(output, "\n"); + break; + case XML_RELAXNG_REF: + fprintf(output, "name != NULL) + fprintf(output, " name=\"%s\"", define->name); + fprintf(output, ">\n"); + xmlRelaxNGDumpDefines(output, define->content); + fprintf(output, "\n"); + break; + case XML_RELAXNG_PARENTREF: + fprintf(output, "name != NULL) + fprintf(output, " name=\"%s\"", define->name); + fprintf(output, ">\n"); + xmlRelaxNGDumpDefines(output, define->content); + fprintf(output, "\n"); + break; + case XML_RELAXNG_EXTERNALREF: + fprintf(output, ""); + xmlRelaxNGDumpDefines(output, define->content); + fprintf(output, "\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, "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, " "); + } + fprintf(output, ">\n"); + if (grammar->start == NULL) { + fprintf(output, " "); + } else { + fprintf(output, "\n"); + xmlRelaxNGDumpDefine(output, grammar->start); + fprintf(output, "\n"); + } + /* TODO ? Dump the defines ? */ + fprintf(output, "\n"); +} + +/** + * xmlRelaxNGDump: + * @output: the file output + * @schema: a schema structure + * + * Dump a RelaxNG structure back + */ +void +xmlRelaxNGDump(FILE * output, xmlRelaxNGPtr schema) +{ + if (output == NULL) + return; + 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 (output == NULL) + return; + 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); + 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; + + if ((ctxt == NULL) || (regexp == NULL)) + return (-1); + oldperr = ctxt->perr; + 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; + 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; + } + node = ctxt->pnode; + 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 length 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, 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); + } + 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; + + if ((ctxt->state->value == NULL) || + (*ctxt->state->value == 0)) { + ret = 0; + break; + } + 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 (ctxt->errNr > 0) + xmlRelaxNGPopErrors(ctxt, 0); + break; + } + case XML_RELAXNG_OPTIONAL:{ + xmlChar *temp; + + if ((ctxt->state->value == NULL) || + (*ctxt->state->value == 0)) { + ret = 0; + break; + } + oldflags = ctxt->flags; + ctxt->flags |= FLAGS_IGNORABLE; + temp = ctxt->state->value; + ret = xmlRelaxNGValidateValue(ctxt, define->content); + ctxt->flags = oldflags; + if (ret != 0) { + ctxt->state->value = temp; + if (ctxt->errNr > 0) + xmlRelaxNGPopErrors(ctxt, 0); + ret = 0; + break; + } + 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: + if (define->content == NULL) { + VALID_ERR(XML_RELAXNG_ERR_NODEFINE); + ret = -1; + } else { + 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 if (define->type == XML_RELAXNG_CHOICE) { + xmlRelaxNGDefinePtr list; + + list = define->nameClass; + while (list != NULL) { + ret = xmlRelaxNGAttributeMatch(ctxt, list, prop); + if (ret == 1) + return (1); + if (ret < 0) + return (ret); + list = list->next; + } + return (0); + } else { + TODO} + return (1); +} + +/** + * 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 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); + if (ctxt->state == NULL) { + ret = -1; + break; + } + 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; + int best = -1; + int lowattr = -1; + + /* + * PBM: what happen if there is attributes checks in the interleaves + */ + + for (j = 0; j < ctxt->states->nbState; j++) { + cur = ctxt->states->tabState[j]->seq; + cur = xmlRelaxNGSkipIgnored(ctxt, cur); + if (cur == NULL) { + if (found == 0) { + lowattr = ctxt->states->tabState[j]->nbAttrLeft; + best = j; + } + found = 1; + if (ctxt->states->tabState[j]->nbAttrLeft <= lowattr) { + /* try to keep the latest one to mach old heuristic */ + lowattr = ctxt->states->tabState[j]->nbAttrLeft; + best = j; + } + if (lowattr == 0) + break; + } else if (found == 0) { + if (lowattr == -1) { + lowattr = ctxt->states->tabState[j]->nbAttrLeft; + best = j; + } else + if (ctxt->states->tabState[j]->nbAttrLeft <= lowattr) { + /* try to keep the latest one to mach old heuristic */ + lowattr = ctxt->states->tabState[j]->nbAttrLeft; + best = j; + } + } + } + /* + * BIG PBM: here we pick only one restarting point :-( + */ + if (ctxt->states->nbState > 0) { + xmlRelaxNGFreeValidState(ctxt, oldstate); + if (best != -1) { + oldstate = ctxt->states->tabState[best]; + ctxt->states->tabState[best] = NULL; + } else { + oldstate = + ctxt->states->tabState[ctxt->states->nbState - 1]; + ctxt->states->tabState[ctxt->states->nbState - 1] = NULL; + ctxt->states->nbState--; + } + } + for (j = 0; j < ctxt->states->nbState ; j++) { + xmlRelaxNGFreeValidState(ctxt, ctxt->states->tabState[j]); + } + xmlRelaxNGFreeStates(ctxt, ctxt->states); + ctxt->states = NULL; + if (found == 0) { + if (cur == NULL) { + VALID_ERR2(XML_RELAXNG_ERR_INTEREXTRA, + (const xmlChar *) "noname"); + } else { + 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: + 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; + if (ctxt->state != NULL) + 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]); + ctxt->states->tabState[i] = NULL; + } + 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; +#if 0 + } else { + ret = -2; +#endif + } + } 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 = ctxt->states; + if (states == NULL) { + progress = 0; + break; + } + } + 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) && + (node != NULL)) { + /* + * node == NULL can't be optimized since IS_TRIABLE + * doesn't account for choice which may lead to + * only attributes. + */ + xmlHashTablePtr triage = + (xmlHashTablePtr) define->data; + + /* + * Something we can optimize cleanly there is only one + * possble branch out ! + */ + 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); +} + +/** + * xmlRelaxNGCleanPSVI: + * @node: an input element or 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. + */ +static void +xmlRelaxNGCleanPSVI(xmlNodePtr node) { + xmlNodePtr cur; + + if ((node == NULL) || + ((node->type != XML_ELEMENT_NODE) && + (node->type != XML_DOCUMENT_NODE) && + (node->type != XML_HTML_DOCUMENT_NODE))) + return; + if (node->type == XML_ELEMENT_NODE) + node->psvi = NULL; + + cur = node->children; + while (cur != NULL) { + if (cur->type == XML_ELEMENT_NODE) { + cur->psvi = NULL; + 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 == node) { + cur = NULL; + break; + } + if (cur->next != NULL) { + cur = cur->next; + break; + } + } while (cur != NULL); + } + return; +} +/************************************************************************ + * * + * 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; + if (schema != 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; + ctxt->serror = NULL; +} + +/** + * xmlRelaxNGSetValidStructuredErrors: + * @ctxt: a Relax-NG validation context + * @serror: the structured error function + * @ctx: the functions context + * + * Set the structured error callback + */ +void +xmlRelaxNGSetValidStructuredErrors(xmlRelaxNGValidCtxtPtr ctxt, + xmlStructuredErrorFunc serror, void *ctx) +{ + if (ctxt == NULL) + return; + ctxt->serror = serror; + ctxt->error = NULL; + ctxt->warning = NULL; + ctxt->userData = ctx; +} + +/** + * 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); + /* + * Remove all left PSVI + */ + xmlRelaxNGCleanPSVI((xmlNodePtr) doc); + + /* + * TODO: build error codes + */ + if (ret == -1) + return (1); + return (ret); +} + +#define bottom_relaxng +#include "elfgcchack.h" +#endif /* LIBXML_SCHEMAS_ENABLED */ diff --git a/result/HTML/53867.html b/result/HTML/53867.html new file mode 100644 index 0000000..f4902af --- /dev/null +++ b/result/HTML/53867.html @@ -0,0 +1,70 @@ + + + + + + diff --git a/result/HTML/53867.html.err b/result/HTML/53867.html.err new file mode 100644 index 0000000..e69de29 diff --git a/result/HTML/53867.html.sax b/result/HTML/53867.html.sax new file mode 100644 index 0000000..81a9f15 --- /dev/null +++ b/result/HTML/53867.html.sax @@ -0,0 +1,26 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElement(html) +SAX.ignorableWhitespace( +, 1) +SAX.startElement(head) +SAX.ignorableWhitespace( +, 1) +SAX.startElement(style) +SAX.cdata( +....... +....................., 1000) +SAX.cdata(.............................., 1000) +SAX.cdata(.............................., 1000) +SAX.cdata(................ +............., 977) +SAX.endElement(style) +SAX.ignorableWhitespace( +, 1) +SAX.endElement(head) +SAX.ignorableWhitespace( +, 1) +SAX.endElement(html) +SAX.ignorableWhitespace( +, 1) +SAX.endDocument() diff --git a/result/HTML/758605.html b/result/HTML/758605.html new file mode 100644 index 0000000..60b01d3 --- /dev/null +++ b/result/HTML/758605.html @@ -0,0 +1,3 @@ + +

    &ê +

    diff --git a/result/HTML/758605.html.err b/result/HTML/758605.html.err new file mode 100644 index 0000000..2086f96 --- /dev/null +++ b/result/HTML/758605.html.err @@ -0,0 +1,3 @@ +./test/HTML/758605.html:1: HTML parser error : htmlParseEntityRef: expecting ';' +ê + ^ diff --git a/result/HTML/758605.html.sax b/result/HTML/758605.html.sax new file mode 100644 index 0000000..c6e0986 --- /dev/null +++ b/result/HTML/758605.html.sax @@ -0,0 +1,14 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.error: htmlParseEntityRef: expecting ';' +SAX.startElement(html) +SAX.startElement(body) +SAX.startElement(p) +SAX.characters(&, 1) +SAX.characters(ê, 2) +SAX.ignorableWhitespace( +, 1) +SAX.endElement(p) +SAX.endElement(body) +SAX.endElement(html) +SAX.endDocument() diff --git a/result/HTML/758606.html b/result/HTML/758606.html new file mode 100644 index 0000000..4f21f62 --- /dev/null +++ b/result/HTML/758606.html @@ -0,0 +1,2 @@ + + diff --git a/result/HTML/758606.html.err b/result/HTML/758606.html.err new file mode 100644 index 0000000..060433a --- /dev/null +++ b/result/HTML/758606.html.err @@ -0,0 +1,16 @@ +./test/HTML/758606.html:1: HTML parser error : Comment not terminated + + +Welcome to Copernic.com + + + + + + + + + + + + + + + + <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> + + + 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 + + + +BP6.com #1 online resource for the BP6 Mobo.... + + + + + + + + + + + +

    +

    +
    + + + + + + + + + + + + + +
    +
    +

    Monday, July 31st, 2000

    +
    + + + + +
    +
    +

    +

    + + + + + + +
    +
    +
    + + + + + + + + + + + + +
    +

    Abit BP6 Motherboard specification and information.
    BP6 Specs +

    +
    +

    How to cool the BX Chipset on your BP6.
    BX Cooling +

    +
    +

    The U;timate Gaming Contest - Coming Soon!
    UGM Contest +

    +
    +

    Cooling & Heatsink review for the BP6.
    Heatsinks +

    +
    +

    BP6 101 - Class is now in session. Welcome newbies!
    BP6 101 +

    +
    +

    Install guide for installing Windows 2000 on the BP6
    Win2k Install +

    +
    +

    Taking a first look at the Abit Linux release called
    Gentus +

    +
    +
    +
    +
    +
    +
    + + + + + + + + +
    + + + + + + +
    +
    REVIEWS
    +
    +
    BP6 Reviews
    BP6 Watercooling
    BX Chipset Cooling
    Benchmarks
    BP6FSB Utility
    PowerLeap NEO S370
    SETI on the BP6
    Golden Orbs I
    Golden Orbs II
    VTT Solution

    NAVIGATE +
    +
    News
    Online Text Chat
    Voice Chat
    Messageboard
    Temp. Converter
    Picture Gallery
    Latest BIOS
    Drivers & Files
    UGM of the week
    BP6 Contest

    OTHER STUFF + +
    +
    Who is Tim?
    Contact BP6.com
    Affiliates Section
    Sponsors Section
    Links

    PC SPECIALS +
    +
    Vendor + Specials


    Pic of the day +
    + +
    +

    No picture is available for today.

    +
    +
    +
    +
    +
    +
    +
    +
    +

    +

    + + + + + + +
    +
    + +
    +
    Headlines
    Chat + with ABIT - 8:09PM PDT
    Fixed + wallpaper - 11:47PM PDT
    Seti + update - 10:40PM PDT
    Judge + gives Napster the Boot!! - 2:10PM PDT
    Ram + Sinks.. more cooling for small places. - 8:54AM + PDT
    is + it [H]ard? - 9:19PM PDT
    WiLd + CaSe!! - 1:40PM PDT
    What + the heck is a Peltier?!?! - 10:05AM PDT
    HELLO + EVERYONE!!! - 10:03PM PDT
    BP6 + Q3 server up and running.. - 2:06AM PDT

    + + + + + + +
    Sunday, + July 30, 2000
    +
    Chat with + ABIT
    Posted by Holodeck2 @ 8:09PM + PDT  0 comments +  | top
    I’m slacking a little. All game no + work makes Holodeck2 a happy boy :-)

    Wallpaper update: I got + off my lazy ass and redid the 1280x1024 wall paper, now it has the 2 + celerons.

    Fullon3d had a live chat with that Eric guy from Abit. + Submitted by: MJS

    Here’s a little clip:
    [Falcon] + BP6-2??
    [EricBoeing] We already have a micro ATX dual flip-chip + board
    [EricBoeing] but it's OEM only
    [EricBoeing] the full ATX + version should be out Septemberish


    + + + + + + +
    Thursday, + July 27, 2000
    +
    Fixed + wallpaper
    Posted by Holodeck2 @ 11:47PM + PDT  5 comments +  | top
    Get them now!!
    This is a + fixed bp6 wallpaper. In all the popular flavors, err... + resolutions.

    It's still the Intels Inside one with a spelling + change; from "Mothboard" to "Motherboard"

    Thanks to Matt for + pointing that out to me.
    I would also like to thank Kevin for + hosting my last batch and Radu for the previous "DUEL"/"DUAL" + error.
    And 1 more person, THANK YOU TIM for letting me borrow + your server space ;-)

    If you need a weird resolution, feel + free to e-mail me requesting + for one.
    If you have ideas or more errors to point out, mailto:Holodeck2@home.com

    800x600
    1024x768
    1152x864
    1280x1024
    1600x1200
    +

    Enjoy :-)
    +

    +

    Holodeck2,
    [H]ard at + work on the Brand Spanking New Wallpaper.



    Seti update
    Posted by Holodeck2 @ 10:40PM + PDT  5 comments +  | top

    You like the + pic?

    Bp6 User Group Update:
    Completed 61531 + units!!
    #168 on Top 200 All Groups (Going to pass CLRC in + a few days)
    #74 on Top 200 Teams (Gaining fast on + Starfleet)

    We are flying though at the speed of light (may be + a little slower).
    Good job everyone!!

    Check this page at + least once a day for new stuff :-)


    Judge gives Napster the + Boot!!
    Posted by Holodeck2 @ 2:10PM + PDT  0 comments +  | top
    Good afternoon for everyone living in + EST. I was going to post today morning but I didn't. Here's my + story:
    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 :-)

    Judge shuts Napster down +


    Check out the Goofy guy in the suit
    He's Sean + Fanning, founder of Napster.

    Got news?? mailto:Holodeck2@home.com


    Ram Sinks.. more cooling for small + places.
    Posted by tim @ 8:54AM PDT  0 comments +  | top
    Need some cooling for your Videocard + memory to get a little extra overclockability and FPS? Overclockers Hiedout Ram Sinks They just notified + me of their new design.


    + + + + + + +
    Wednesday, July 26, + 2000
    +
    is it + [H]ard?
    Posted by Holodeck2 @ 9:19PM + PDT  0 comments +  | top
    Big heatsinks are good, very good. The + bigger the better.
    You can never can have a too big of heatsink + on a small chip (CPU, GPU, CHIPSET, etc)


    My overclocked + Voodoo3 2000 with a BIG mofo heatsink on top.
    Peltier and + watercooling next up :-)
    (if you pry off the heatsink you void + the warranty )

    it was originally posted on [H]ardOCP
    I’m not only a + BP6er but also a [H]ardOCPer


    WiLd CaSe!!
    Posted by Holodeck2 @ 1:40PM + PDT  8 comments +  | top
    Now this person really knows how to + keep his case cool!!
    Addin an 18" Fan!! WOW!!


    Click to go to his + site.


    What the heck is a + Peltier?!?!
    Posted by Holodeck2 @ 10:05AM + PDT  6 comments +  | top
    This is for all you people who wanted + to know what a peltier is.

    The quest fo the Perfect + Peltier

    Thanks to + TweakMax.com +

    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
    I'm not angry at anyone... + good thing I have a long fuse


    + + + + + + +
    Tuesday, + July 25, 2000
    +
    HELLO + EVERYONE!!!
    Posted by Holodeck2 @ 10:03PM + PDT 
    Hello + everyone, Woohoo!! I'm on!!
    Who is this Holodeck2 person + anyways?!?! Read on :-)
    I’m a regular on the bp6 messageboard, + trying to help people out with their problems.
    I’m the + self-proclaimed bp6 cooling expert, If you have a cooling idea, I’ve + probably already done it and can offer some incite.
    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 :-)
    Any Questions or comments, you can either + contact me or post it on the messageboard.

    Ways to contact + me.
    E-mail: Holodeck2@home.com (All E-mails + will be answered in 24 hours or less, I guarantee it.)
    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
    AIM: Holodeck2 (instant response + if I’m in front of my comp and not trying to frag someone)
    ICQ: 82640218 (rarely + on)

    P.S. If someone named “Digital Vortex” on either Quake 3 + or 2 frags you, it’s probably me. ;-)


    + + + + + + +
    Monday, + July 24, 2000
    +
    BP6 Q3 server up and + running..
    Posted by tim @ 2:06AM PDT  3 comments +  | top
    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.
    (BTW- + there are a few bot's running around in there..)


    BIOS Savior to the + rescue....
    Posted by tim @ 12:53AM PDT  2 comments +  | top
    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 "RD1 BIOS Savior" 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)
    Manufacturers Brochure (PDF Format)
    Another info page
    Available for about $20



    + + + + + + +
    Monday, + July 17, 2000
    +
    How To + Overclock
    Posted by DareDevil @ 4:17PM + PDT  3 comments +  | top
    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))

    How To Overclock


    The Cardcooler + XT
    Posted by DareDevil @ 4:11PM + PDT  1 comments +  | top
    Wow! I am impressed! Nevermind keeping + the CPU's cool... Keep your whole board cool!

    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.

    Check this out!

    http://www.brokenpixel.com/articles/coolerXT/cardcoolerXT_1.shtml +


    'Nerd + Inside'
    Posted by DareDevil @ 11:53AM + PDT  1 comments +  | top
    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) :-Þ

    +


    Dual PSU Wiring diagram... (preview to + Part 1 Watercooling Project)
    Posted by tim @ 12:43AM PDT  11 comments +  | top
    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. +

    View Diagram 1 here.
    View Diagram 2 here.

    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 click here.


    + + + + + + +
    Sunday, + July 16, 2000
    +
    RAM Overclocking? + Hmmmmm.
    Posted by DareDevil @ 9:57AM + PDT  3 comments +  | top
    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 =)

    Extreme Overclocking has tested + (overclocked) PC133 RAM to there full potential. Here's a quote I + found and the link:

    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....

    Cooked RAM... Yummie

    The + ÐÐ.


    CPU + Guide
    Posted by DareDevil @ 9:17AM + PDT  0 comments +  | top
    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:

    +
  • http://www6.tomshardware.com/howto/00q2/000412/index.html


  • + + + + + + +
    Saturday, + July 15, 2000
    +
    Weekly CPU + Prices
    Posted by DareDevil @ 11:29AM + PDT  2 comments +  | top
    Wow, found this very useful! Wanting + to buy a new CPU? Check out this detailed price list!

    Click Here.

    Thanks Sharky + Extreme!


    Fast Wallpapers
    Posted by DareDevil @ 9:51AM + PDT  0 comments +  | top
    FAST-MHz has released some wallpapers! + Click here 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.

    In other news, we want to + finnish off all the sections at BP6.Com so, to start, we're going to + work on the Picture Gallery. To help us out, you can send in + all your cool, wierd, crazy pics that you may have to: thedaredevil@bp6.com. (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.

    Okay, that's all for now.

    The + ÐÐ.


    + + + + + + +
    Friday, + July 14, 2000
    +
    Hey + There!
    Posted by DareDevil @ 5:05PM + PDT  7 comments +  | top
    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 ;-) ).

    My e-mail address is killz@i82hq.com

    Ciao for + now.

    The ÐÐ.


    +
    +
    +
    +
    +
    +

    +

    + + + + + + +
    +
    + +
    +
    Newsletter


    +
    + +
    Search news


    News + archive +
    +
    + + + + + + + +
    + + + + +
    +
    +

    PC Price + Search

    +

    +
    +
    +



    BP6.com Special - Enter CODE: BP6-hd in the order (notes) to receive a discount
    BP6.COM + Special
    Code:BP6-hd
    + + + + + + +
     
    +
    +
    + +
    + +  + + + + + + + +
    +

    Copyright + ©1999-2000 BP6.com, All rights reserved.
    Got news? Send it to
    Tim

    +
    +
    + + + diff --git a/result/HTML/doc3.htm.err b/result/HTML/doc3.htm.err new file mode 100644 index 0000000..cdf715a --- /dev/null +++ b/result/HTML/doc3.htm.err @@ -0,0 +1,81 @@ +./test/HTML/doc3.htm:10: HTML parser error : Misplaced DOCTYPE declaration +

    + ^ +./test/HTML/doc3.htm:236: HTML parser error : Unexpected end tag : font + Specials




    + ^ +./test/HTML/doc3.htm:747: HTML parser error : Unexpected end tag : font +om/ad_static.asp?pid=2097&sid=1881&asid=7708"> + ^ +./test/HTML/doc3.htm:747: HTML parser error : Unexpected end tag : p +=7708">

    + ^ +./test/HTML/doc3.htm:772: HTML parser error : Unexpected end tag : form + archive
    Code:BP6-hd

    Code:BP6-hd

     

    < + ^ +./test/HTML/doc3.htm:840: HTML parser error : Unexpected end tag : td +
      + ^ diff --git a/result/HTML/doc3.htm.sax b/result/HTML/doc3.htm.sax new file mode 100644 index 0000000..13477f1 --- /dev/null +++ b/result/HTML/doc3.htm.sax @@ -0,0 +1,2878 @@ +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( +<!-- Idea by: Nic Wolfe (, 476) +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.characters( +, 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&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&media=1&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 & 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('chat_popup.htm')') +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(&, 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(FTP Help) +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(
    ) +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( , 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( , 2) +SAX.characters(|, 1) +SAX.characters( , 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(’, 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(’, 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(
    ) +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( , 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( , 2) +SAX.characters(|, 1) +SAX.characters( , 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( , 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( , 2) +SAX.characters(|, 1) +SAX.characters( , 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( , 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( , 2) +SAX.characters(|, 1) +SAX.characters( , 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( , 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( , 2) +SAX.characters(|, 1) +SAX.characters( , 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(
    ) +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( , 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( , 2) +SAX.characters(|, 1) +SAX.characters( , 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(’, 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( , 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( , 2) +SAX.characters(|, 1) +SAX.characters( , 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( , 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( , 2) +SAX.characters(|, 1) +SAX.characters( , 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(
    ) +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( , 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(’, 3) +SAX.characters(m a regular on the bp6 message, 97) +SAX.startElement(br) +SAX.endElement(br) +SAX.characters(I, 1) +SAX.characters(’, 3) +SAX.characters(m the + self-procl, 85) +SAX.characters(’, 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(’, 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(“, 3) +SAX.characters(Digital Vortex, 14) +SAX.characters(”, 3) +SAX.characters( on either Quake 3 + , 51) +SAX.characters(’, 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(
    ) +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( , 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( , 2) +SAX.characters(|, 1) +SAX.characters( , 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( , 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( , 2) +SAX.characters(|, 1) +SAX.characters( , 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=&CID=&updepts=MB&DNAME=%3Cb%3EMotherboards%3C%2Fb%3E&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(
    ) +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( , 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( , 2) +SAX.characters(|, 1) +SAX.characters( , 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( , 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( , 2) +SAX.characters(|, 1) +SAX.characters( , 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( , 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( , 2) +SAX.characters(|, 1) +SAX.characters( , 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( , 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( , 2) +SAX.characters(|, 1) +SAX.characters( , 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&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(
    ) +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( , 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( , 2) +SAX.characters(|, 1) +SAX.characters( , 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 + ÐÐ., 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( , 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( , 2) +SAX.characters(|, 1) +SAX.characters( , 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(
    ) +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( , 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( , 2) +SAX.characters(|, 1) +SAX.characters( , 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( , 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( , 2) +SAX.characters(|, 1) +SAX.characters( , 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 + ÐÐ., 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(
    ) +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( , 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( , 2) +SAX.characters(|, 1) +SAX.characters( , 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 ÐÐ., 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&sid=1881&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(
    +
    +

    Newsletter
    +
    +
    +

    ) +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( ) +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( + + + +
    +

    +

    +) +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( + <!-- + if ((, 532) +SAX.error: Unexpected end tag : iframe +SAX.cdata("); + } else if ((parseI, 463) +SAX.error: End tag : expected '>' +SAX.error: Unexpected end tag : sc +SAX.cdata("); + document.write("RI, 361) +SAX.error: Unexpected end tag : a +SAX.cdata("); + } + // --, 37) +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( , 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( ) +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( , 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 + ©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(

    Site design by Tim Brinkley ) +SAX.endElement(tbody) +SAX.endElement(table) +SAX.endElement(div) +SAX.characters( +, 2) +SAX.startElement(script) +SAX.cdata( window.open=NS_ActualOpen; , 28) +SAX.endElement(script) +SAX.characters( +, 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..f84424c --- /dev/null +++ b/result/HTML/entities.html @@ -0,0 +1,8 @@ + + +

    +a&b +a&b +a & b +

    + 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 ';' +

    + ^ +./test/HTML/entities.html:1: HTML parser error : htmlParseEntityRef: no name +

    + ^ +./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&b', tst2='a&b', tst3='a & b') +SAX.characters( +a, 2) +SAX.characters(&, 1) +SAX.characters(b +a, 3) +SAX.error: htmlParseEntityRef: expecting ';' +SAX.characters(&, 1) +SAX.characters(b, 1) +SAX.characters( +a , 3) +SAX.error: htmlParseEntityRef: no name +SAX.characters(&, 1) +SAX.characters( b +, 3) +SAX.endElement(p) +SAX.ignorableWhitespace( +, 1) +SAX.endElement(body) +SAX.endElement(html) +SAX.endDocument() diff --git a/result/HTML/entities2.html b/result/HTML/entities2.html new file mode 100644 index 0000000..8e854d3 --- /dev/null +++ b/result/HTML/entities2.html @@ -0,0 +1,8 @@ + + + +

    + +
    + + diff --git a/result/HTML/entities2.html.err b/result/HTML/entities2.html.err new file mode 100644 index 0000000..e69de29 diff --git a/result/HTML/entities2.html.sax b/result/HTML/entities2.html.sax new file mode 100644 index 0000000..c6efbe5 --- /dev/null +++ b/result/HTML/entities2.html.sax @@ -0,0 +1,23 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElement(html) +SAX.ignorableWhitespace( +, 1) +SAX.startElement(body) +SAX.characters( +, 1) +SAX.startElement(form) +SAX.characters( + , 3) +SAX.startElement(input, type='text', name='test', value='š') +SAX.endElement(input) +SAX.characters( +, 1) +SAX.endElement(form) +SAX.characters( +, 1) +SAX.endElement(body) +SAX.ignorableWhitespace( +, 1) +SAX.endElement(html) +SAX.endDocument() diff --git a/result/HTML/fp40.htm b/result/HTML/fp40.htm new file mode 100644 index 0000000..8affc19 --- /dev/null +++ b/result/HTML/fp40.htm @@ -0,0 +1,167 @@ + + + + + +README - Microsoft FrontPage 2000 Server Extensions + + + + + +

    Microsoft FrontPage 2000 Server Extensions, UNIX

    + +© Copyright Microsoft Corporation, 1999  + + +

    The FrontPage Server Extensions are a set of programs on the Web server that support: + +

    +
      +
    • Authoring FrontPage webs
    • +
    • Administering FrontPage webs
    • +
    • Browse-time FrontPage web functionality
    • +
    + + +

    Contents 

    + +Release Notes
    +Resources for More Information +

     

    +
    +

    Release Notes

    + +

    This section provides complementary or late-breaking +information to supplement the Microsoft FrontPage Server Extensions documentation.

    + +

    Apache 1.3.4 Support
    +Upgrading from previous version of FrontPage Server Extensions
    +Uploading files into executable folders

    + + +

    Top of Page

    + + +

    Apache 1.3.4 Support

    + +

    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:

    + + +
    +
    + +ResourceConfig /dev/null 
    +AccessConfig /dev/null
    +
    + + + +

    If you have some settings stored in secondary configuration files, move them to http.conf.

    + +

    You must stop and restart the web server for your changes to http.conf to take effect.

    + + + +

    Top of Section

    + + + +

    Upgrading from previous version of FrontPage Server Extensions

    + +

    Custom entries in frontpage.cnf are not migrated to FrontPage 2000.

    + +

    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.

    + +

    Do not overwrite the FrontPage 2000 frontpage.cnf file with a frontpage.cnf file from an +earlier version of the FrontPage Server Extensions.

    + + + +

    Top of Section

    + + + +

    Uploading files into executable folders

    + + +

    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.

    + +

    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 http://officeupdate.microsoft.com/frontpage/wpp/serk/.

    + + + +

    Top of Section

    + + + +
    + + + +

    Resources for More Information

    + +

    This section lists sources of more information about the +FrontPage Server Extensions.

    + +

    Server Extensions Resource Kit
    +Server Extensions Resource Kit Update
    +Knowledge Base

    + + +

    Top of Page

    + + +

    Server Extensions Resource Kit

    + +

    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.

    + +

    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.

    + +

    Top of Section

    + + +

    Server Extensions Resource Kit Update

    + +

    For updated information about installing, setting up, and administrating the FrontPage Server +Extensions, see the Server Extensions Resource Kit Update at: http://officeupdate.microsoft.com/frontpage/wpp/serk/.

    + + +

    Top of Section

    + + +

    Microsoft Knowledge Base

    + +

    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 +http://support.microsoft.com/support/.

    + +

    Top of Section

    + + +

     

    + +
    + + 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..6f77794 --- /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.characters( +, 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(© Copyright Microsoft Cor, 40) +SAX.characters( , 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( , 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( , 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.characters( +, 1) +SAX.startElement(blockquote) +SAX.characters( + , 3) +SAX.startElement(font, face='Courier New') +SAX.characters( +ResourceConfig /dev/null, 25) +SAX.characters( , 2) +SAX.startElement(br) +SAX.endElement(br) +SAX.characters( +AccessConfig /dev/null, 23) +SAX.endElement(font) +SAX.characters( +, 1) +SAX.endElement(blockquote) +SAX.characters( +, 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(&, 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( , 2) +SAX.endElement(p) +SAX.characters( + +, 4) +SAX.endElement(font) +SAX.characters( +, 1) +SAX.endElement(body) +SAX.ignorableWhitespace( +, 1) +SAX.endElement(html) +SAX.ignorableWhitespace( +, 1) +SAX.endDocument() diff --git a/result/HTML/html5_enc.html b/result/HTML/html5_enc.html new file mode 100644 index 0000000..44ceebc --- /dev/null +++ b/result/HTML/html5_enc.html @@ -0,0 +1,9 @@ + + + + + + +

    très

    + + diff --git a/result/HTML/html5_enc.html.err b/result/HTML/html5_enc.html.err new file mode 100644 index 0000000..e69de29 diff --git a/result/HTML/html5_enc.html.sax b/result/HTML/html5_enc.html.sax new file mode 100644 index 0000000..292be57 --- /dev/null +++ b/result/HTML/html5_enc.html.sax @@ -0,0 +1,30 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElement(html) +SAX.ignorableWhitespace( +, 1) +SAX.startElement(head) +SAX.ignorableWhitespace( +, 1) +SAX.startElement(meta, charset='iso-8859-1') +SAX.endElement(meta) +SAX.ignorableWhitespace( +, 1) +SAX.endElement(head) +SAX.ignorableWhitespace( +, 1) +SAX.startElement(body) +SAX.characters( + , 3) +SAX.startElement(p) +SAX.characters(très, 5) +SAX.endElement(p) +SAX.characters( +, 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..62391dc --- /dev/null +++ b/result/HTML/liclose.html @@ -0,0 +1,15 @@ + + + + + + +
      +
    • First item +
    • +
    • Second item, closes the first one +
    • +
    + + + diff --git a/result/HTML/liclose.html.err b/result/HTML/liclose.html.err new file mode 100644 index 0000000..e69de29 diff --git a/result/HTML/liclose.html.sax b/result/HTML/liclose.html.sax new file mode 100644 index 0000000..eabcdf6 --- /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.characters( +, 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.characters( + +, 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..c29f74f --- /dev/null +++ b/result/HTML/lt.html @@ -0,0 +1,6 @@ + + + + + + diff --git a/result/HTML/lt.html.err b/result/HTML/lt.html.err new file mode 100644 index 0000000..e69de29 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 <root@aol.com>') +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/noscript.html b/result/HTML/noscript.html new file mode 100644 index 0000000..454e943 --- /dev/null +++ b/result/HTML/noscript.html @@ -0,0 +1,10 @@ + + + + omg + + + +

    yo

    + + diff --git a/result/HTML/noscript.html.err b/result/HTML/noscript.html.err new file mode 100644 index 0000000..e69de29 diff --git a/result/HTML/noscript.html.sax b/result/HTML/noscript.html.sax new file mode 100644 index 0000000..b69396f --- /dev/null +++ b/result/HTML/noscript.html.sax @@ -0,0 +1,38 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.internalSubset(html, , ) +SAX.startElement(html) +SAX.ignorableWhitespace( + , 5) +SAX.startElement(head) +SAX.ignorableWhitespace( + , 9) +SAX.startElement(title) +SAX.characters(omg, 3) +SAX.endElement(title) +SAX.ignorableWhitespace( + , 9) +SAX.startElement(noscript) +SAX.startElement(link, rel='stylesheet', href='http://foo.com') +SAX.endElement(link) +SAX.endElement(noscript) +SAX.ignorableWhitespace( + , 5) +SAX.endElement(head) +SAX.ignorableWhitespace( + , 5) +SAX.startElement(body, id='xxx') +SAX.characters( + , 9) +SAX.startElement(p) +SAX.characters(yo, 2) +SAX.endElement(p) +SAX.characters( + , 5) +SAX.endElement(body) +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..f83a7cb --- /dev/null +++ b/result/HTML/pre.html @@ -0,0 +1,6 @@ + + + +
    + + diff --git a/result/HTML/pre.html.err b/result/HTML/pre.html.err new file mode 100644 index 0000000..e69de29 diff --git a/result/HTML/pre.html.sax b/result/HTML/pre.html.sax new file mode 100644 index 0000000..f8782b7 --- /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.characters( +, 1) +SAX.startElement(pre) +SAX.startElement(a, href='toto') +SAX.endElement(a) +SAX.startElement(img, src='titi') +SAX.endElement(img) +SAX.endElement(pre) +SAX.characters( +, 1) +SAX.endElement(body) +SAX.ignorableWhitespace( +, 1) +SAX.endElement(html) +SAX.ignorableWhitespace( +, 1) +SAX.endDocument() diff --git a/result/HTML/python.html b/result/HTML/python.html new file mode 100644 index 0000000..ea0be18 --- /dev/null +++ b/result/HTML/python.html @@ -0,0 +1,9 @@ + + + + +Python Programming Language + + + + diff --git a/result/HTML/python.html.err b/result/HTML/python.html.err new file mode 100644 index 0000000..e69de29 diff --git a/result/HTML/python.html.sax b/result/HTML/python.html.sax new file mode 100644 index 0000000..665539c --- /dev/null +++ b/result/HTML/python.html.sax @@ -0,0 +1,29 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.internalSubset(html, -//W3C//DTD HTML 4.01 Transitional//EN, http://www.w3.org/TR/html4/loose.dtd) +SAX.processingInstruction(xml-stylesheet, href="./css/ht2html.css" type="text/css"?) +SAX.startElement(html) +SAX.ignorableWhitespace( +, 1) +SAX.comment( THIS PAGE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ) +SAX.ignorableWhitespace( +, 1) +SAX.startElement(head) +SAX.ignorableWhitespace( +, 1) +SAX.startElement(title) +SAX.characters(Python Programming Language, 27) +SAX.endElement(title) +SAX.ignorableWhitespace( +, 1) +SAX.endElement(head) +SAX.ignorableWhitespace( +, 1) +SAX.startElement(body) +SAX.characters( +, 1) +SAX.endElement(body) +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..893d6a2 --- /dev/null +++ b/result/HTML/reg1.html @@ -0,0 +1,12 @@ + + + +Regression test 1 + + +

    Regression test 1

    +

    +Ok file no problem +

    + + diff --git a/result/HTML/reg1.html.err b/result/HTML/reg1.html.err new file mode 100644 index 0000000..e69de29 diff --git a/result/HTML/reg1.html.sax b/result/HTML/reg1.html.sax new file mode 100644 index 0000000..c8ee3ac --- /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.characters( +, 1) +SAX.startElement(h1) +SAX.characters(Regression test 1, 17) +SAX.endElement(h1) +SAX.characters( +, 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..88cf9d3 --- /dev/null +++ b/result/HTML/reg2.html @@ -0,0 +1,15 @@ + + + +Regression test 2 + + +

    Regression test 2

    +

    +Autoclose of tag P +

    +

    +Ok file no problem +

    + + diff --git a/result/HTML/reg2.html.err b/result/HTML/reg2.html.err new file mode 100644 index 0000000..e69de29 diff --git a/result/HTML/reg2.html.sax b/result/HTML/reg2.html.sax new file mode 100644 index 0000000..f85691e --- /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.characters( +, 1) +SAX.startElement(h1) +SAX.characters(Regression test 2, 17) +SAX.endElement(h1) +SAX.characters( +, 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..d35ac0d --- /dev/null +++ b/result/HTML/reg3.html @@ -0,0 +1,16 @@ + + + +Regression test 3 + + +

    Regression test 3

    +

    +Autoclose of tag P +

    +
    +

    +Ok file no problem +

    + + diff --git a/result/HTML/reg3.html.err b/result/HTML/reg3.html.err new file mode 100644 index 0000000..e69de29 diff --git a/result/HTML/reg3.html.sax b/result/HTML/reg3.html.sax new file mode 100644 index 0000000..ec0f039 --- /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.characters( +, 1) +SAX.startElement(h1) +SAX.characters(Regression test 3, 17) +SAX.endElement(h1) +SAX.characters( +, 1) +SAX.startElement(p) +SAX.characters( +Autoclose of tag P +, 20) +SAX.endElement(p) +SAX.startElement(hr) +SAX.endElement(hr) +SAX.characters( +, 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..eb1ba09 --- /dev/null +++ b/result/HTML/reg4.html @@ -0,0 +1,14 @@ + + + +Regression test 4 + + +

    Regression test 4

    +

    +Wrong close of tag P +

    +
    + + + 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 +

    + ^ diff --git a/result/HTML/reg4.html.sax b/result/HTML/reg4.html.sax new file mode 100644 index 0000000..4c5147c --- /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.characters( +, 1) +SAX.startElement(h1) +SAX.characters(Regression test 4, 17) +SAX.endElement(h1) +SAX.characters( +, 1) +SAX.startElement(p) +SAX.characters( +Wrong close of tag P +, 22) +SAX.endElement(p) +SAX.startElement(hr) +SAX.endElement(hr) +SAX.characters( +, 1) +SAX.error: Unexpected end tag : p +SAX.characters( +, 1) +SAX.endElement(body) +SAX.ignorableWhitespace( +, 1) +SAX.endElement(html) +SAX.ignorableWhitespace( +, 1) +SAX.endDocument() diff --git a/result/HTML/repeat.html b/result/HTML/repeat.html new file mode 100644 index 0000000..71cf72e --- /dev/null +++ b/result/HTML/repeat.html @@ -0,0 +1,7 @@ + + + + + + + diff --git a/result/HTML/repeat.html.err b/result/HTML/repeat.html.err new file mode 100644 index 0000000..e69de29 diff --git a/result/HTML/repeat.html.sax b/result/HTML/repeat.html.sax new file mode 100644 index 0000000..2dbf35c --- /dev/null +++ b/result/HTML/repeat.html.sax @@ -0,0 +1,14 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElement(html) +SAX.startElement(body) +SAX.startElement(td) +SAX.endElement(td) +SAX.startElement(td) +SAX.comment( ) +SAX.ignorableWhitespace( +, 1) +SAX.endElement(td) +SAX.endElement(body) +SAX.endElement(html) +SAX.endDocument() diff --git a/result/HTML/script.html b/result/HTML/script.html new file mode 100644 index 0000000..5b95a1f --- /dev/null +++ b/result/HTML/script.html @@ -0,0 +1,10 @@ + + +Script tests + + + + + diff --git a/result/HTML/script.html.err b/result/HTML/script.html.err new file mode 100644 index 0000000..e69de29 diff --git a/result/HTML/script.html.sax b/result/HTML/script.html.sax new file mode 100644 index 0000000..b259f7f --- /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.characters( +, 1) +SAX.startElement(script, language='javascript') +SAX.cdata( + if (window.open<max) ;, 28) +SAX.endElement(script) +SAX.characters( +, 1) +SAX.startElement(input, onclick='if(window.open<max);') +SAX.endElement(input) +SAX.characters( +, 1) +SAX.endElement(body) +SAX.ignorableWhitespace( +, 1) +SAX.endElement(html) +SAX.ignorableWhitespace( +, 1) +SAX.endDocument() diff --git a/result/HTML/script2.html b/result/HTML/script2.html new file mode 100644 index 0000000..2ad9b95 --- /dev/null +++ b/result/HTML/script2.html @@ -0,0 +1,17 @@ + + + + +Test Page + + +
    + +

    + PříliÅ¡ žluÅ¥ouÄký kůň úpÄ›l Äábelksé ódy; +

    +
    + + diff --git a/result/HTML/script2.html.err b/result/HTML/script2.html.err new file mode 100644 index 0000000..e69de29 diff --git a/result/HTML/script2.html.sax b/result/HTML/script2.html.sax new file mode 100644 index 0000000..1971991 --- /dev/null +++ b/result/HTML/script2.html.sax @@ -0,0 +1,50 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.internalSubset(html, -//W3C//DTD XHTML 1.0 Strict//EN, http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd) +SAX.startElement(html, xmlns='http://www.w3.org/1999/xhtml') +SAX.ignorableWhitespace( + , 2) +SAX.startElement(head) +SAX.ignorableWhitespace( + , 3) +SAX.startElement(meta, http-equiv='Content-Type', content='text/html; charset=UTF-8') +SAX.endElement(meta) +SAX.ignorableWhitespace( +, 1) +SAX.startElement(title) +SAX.characters(Test Page, 9) +SAX.endElement(title) +SAX.ignorableWhitespace( +, 1) +SAX.endElement(head) +SAX.ignorableWhitespace( +, 1) +SAX.startElement(body) +SAX.characters( +, 1) +SAX.startElement(div, id='portal') +SAX.characters( +, 1) +SAX.startElement(script, type='text/javascript') +SAX.cdata( + documen.write("Př, 74) +SAX.endElement(script) +SAX.characters( + , 2) +SAX.startElement(p) +SAX.characters( + Příliš , 58) +SAX.endElement(p) +SAX.characters( +, 1) +SAX.endElement(div) +SAX.characters( +, 1) +SAX.endElement(body) +SAX.ignorableWhitespace( +, 1) +SAX.endElement(html) +SAX.ignorableWhitespace( + +, 2) +SAX.endDocument() diff --git a/result/HTML/test2.html b/result/HTML/test2.html new file mode 100644 index 0000000..eaa8864 --- /dev/null +++ b/result/HTML/test2.html @@ -0,0 +1,38 @@ + + + Linux Today + + + +
    + + + + + + +
    +Atipa Linux solutions. Your reliable cluster, server, and workstation solution. Win a Free Celeron Linux Workstation! + + +Linux Today Logo
    linux.com partner

    +
    + +[
    headlines | +features | +commercial | +security | +jobs | +volt | +contribute/submit | +advertise | +search | +site digests | +mailing lists | +about us | +link us ] +
    +

    +

    + + diff --git a/result/HTML/test2.html.err b/result/HTML/test2.html.err new file mode 100644 index 0000000..e69de29 diff --git a/result/HTML/test2.html.sax b/result/HTML/test2.html.sax new file mode 100644 index 0000000..78bb090 --- /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.characters( + +, 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.characters( +, 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..b37a1c7 --- /dev/null +++ b/result/HTML/test3.html @@ -0,0 +1,59 @@ + + + + + + +

    Component Package diagram ProblemDomain

    +

    +
    +
    +
    +Stereotype problem domain
    +
    +Alias Problem Domain
    +
    Note
    +
    The Problem Domain package is the model behind the Human +
    Interface, thats stores and manipulates the Family Tree. +
    + +
    +

    +
    +
    + +

    Class HumanInterface.FamilyFrame +

    +

    Class ProblemDomain.Birth +

    +

    Class ProblemDomain.Death +

    +

    Class ProblemDomain.Divorce +

    +

    Class ProblemDomain.Family +

    +

    Class ProblemDomain.Individual +

    +

    Class ProblemDomain.LifeEvent +

    +

    Class ProblemDomain.Marriage +

    +

    Class ProblemDomain.Note +

    +
    + +

    Links

    + + + + + + + + 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 +


    + ^ +./test/HTML/test3.html:13: HTML parser error : Unexpected end tag : p +


    + ^ +./test/HTML/test3.html:27: HTML parser error : Opening and ending tag mismatch: h4 and b +

    Links

    + ^ +./test/HTML/test3.html:27: HTML parser error : Unexpected end tag : b +

    Links

    + ^ diff --git a/result/HTML/test3.html.sax b/result/HTML/test3.html.sax new file mode 100644 index 0000000..c9f6638 --- /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.characters( +, 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.characters( +, 2) +SAX.startElement(p) +SAX.endElement(p) +SAX.startElement(hr) +SAX.endElement(hr) +SAX.error: Unexpected end tag : p +SAX.characters( +, 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.characters( + +, 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.characters( +, 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.characters( +, 2) +SAX.startElement(dir) +SAX.endElement(dir) +SAX.characters( +, 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.characters( +, 2) +SAX.startElement(dir) +SAX.endElement(dir) +SAX.characters( +, 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.characters( +, 2) +SAX.startElement(dir) +SAX.endElement(dir) +SAX.characters( +, 2) +SAX.endElement(body) +SAX.endElement(html) +SAX.ignorableWhitespace( +, 2) +SAX.endDocument() diff --git a/result/HTML/utf8bug.html b/result/HTML/utf8bug.html new file mode 100644 index 0000000..66a498a --- /dev/null +++ b/result/HTML/utf8bug.html @@ -0,0 +1,215 @@ + + + + + + + + +شهير بلاگ + + + + + + + + + + + + + + +
    + + + + + +
    + + 
    +
    +
    + + + + + +
    + + +خانه + +تماس با من + +آرشيو + +جستجو در سایت + +درباره من + + + +RSS + + + +
    +

    + يکشنبه، 15 ارديبهشت 1387  + -   + Sunday, May 04, 2008 +

    +
    +
    +
    +
    + + + + +
    + + + + +
    + + + + + + + + + + +
    +
    + تاريخ درج: چهارشنبه، 29 اسÙند 1386 + - Wednesday, March 19, 2008      + نويسنده:       + دÙعات مشاهده: 2688 + بار      كد: 341 +
    +
    + + + +
    +
    +
    +
    + +
    + + + + +
    + عکس محصول هنر یکی از همکاران است. روی آن کلیک کند. +
    +
    + +
    +

    +
    +
      +نظرات + کاربران:
    • +حاجی جÙرسون:
      4/5/2008 - + 7:08:00 PM
      با درود به شما... بدون هیچ گونه طنز + Ùˆ دستکاری توسط حاجی دایی نقل شده است این ها Ú©Ù‡ در بیان جدی + اینقدر طناز هستند وای به روزی Ú©Ù‡ بخواهند طنز بنویسند. ببین + شهیر جان Ú†Ù‡ کسانی سر جوانان ما را با اصلاحات 8 سال گول + مالیدند.. این ها را بخوانید :::::((دبيركل مجمع اسلامي بانوان + Ú¯Ùت: به نظر مي‌رسد آقاي خاتمي قصد Ùاصله گرÙتن از تندروها + را ندارد Ùˆ تا اين روند ادامه دارد ما با تندروها در يك ائتلا٠+ شركت نمي‌كنيم. به گزارش خبرنگار سياسي خبرگزاري Ùارس، + Ùاطمه كروبي دبيركل مجمع اسلامي بانوان عصر امروز شنبه در جمع + خبرنگاران رسانه‌هاي گروهي روند برگزاري انتخابات هشتمين + دوره مجلس شوراي اسلامي را تحليل كرد. وي ضمن برشمردن مرزبندي خود + با جربان تندروي اصلاح طلب اÙزود: اين ما نيستيم كه با ستاد ائتلا٠+ اصلاح طلبان اختلا٠داريم اما انحصارگري برخي از گروه‌ها + جريان اصلاحات را دچار از هم‌گسستگي كرد. داوطلب هشتمين دوره + انتخابات مجلس شوراي اسلامي درباره تشكيل ستاد مردمي اصلاحات خاطر + نشان كرد: آقاي خاتمي به توصيه‌ها Ùˆ نظرات دوستانشان توجهي + ندارند Ùˆ اگر اين امكان وجود داشت كه همه جريانات اصلاح طلب زير + يك عنوان Ùعاليت كنند حتما از آن استقبال مي‌كرديم اما به + نظر نمي‌رسد كه آقاي خاتمي بخواهد از تندروها Ùاصله بگيرد Ùˆ + تا اين روند ادامه داشته باشد ما با تندروها در يك ائتلا٠شركت + نمي‌كنيم. وي در مورد شركت تشكل متبوع خود در مرحله بعدي + انتخابات مجلس Ú¯Ùت: برخي از كانديداهاي نزديك به ما به مرحله دوم + انتخابات راه ياÙته‌اند Ùˆ ما با تمام توان در اين مرحله از + آنها دÙاع خواهيم كرد. كروبي تاكيد كرد: گروهي انحصارگر با + اقدامات غيرعقلاني Ùˆ تندروي‌هاي خود اتوبوس اصلاحات را در دره + سرنگون كردند)))) لطÙا پیدا کنید پرتقال Ùروش را......واقعا این + ها Ù…ÛŒ خواهند دوباره وارد مجلس Ùˆ دولت شوند.....اووووووووووووووو + لالالالالالا........نه!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! البته این + مجمع بانوان بیشتر به سÙره های نذر Ùˆ سبزی پاک کردن های خونه + مامان بزرگ Ùˆ خاله زنک بازی های عصر قاجاریه Ùˆ مجلس پا تختی Ùˆ + حنا بندون عروس شباهت دارد. مهندس جان گویا ما از دست این ....Ùˆ + عیالش باید برویم گوشه همان ابدارخانه Ùˆ شاغلام Ùˆ چایی + دیشلمه....شما تشری٠نمی آورید؟
    • +

    • +سیاوش:
      4/3/2008 - 9:28:00 PM
      مرد هزار چهره مرد هزار چهره کیست؟شخصیتی ساخته Ùˆ پرداخته مهران مدیری، پیمان قاسم خانی Ùˆ دیگر نویسندگان؟ تنها هدÙØ´ آنست Ú©Ù‡ چند روز تعطیلات، مارا سرگم کند Ùˆ دیگر هیچ؟ مرد هزار چهره یک طنز است یک طنز تلخ، برداشتی واقعی از جامعه ایرانی. من جوانم پس دردآشنای جوانانم Ùˆ خود را با خود Ùˆ دیگر جوانان طر٠می کنم بسیار اند جوانانی Ú©Ù‡ مصداق مرد هزار چهره هستند جوانانی سودا زده یا به قول خود مسعود "جو گیر" Ú©Ù‡ هر با محصولی کهنه را با تعریÙÛŒ جدید به آنها ارائه کنند چنان با تمام Ùˆ جود Ù…ÛŒ پذیرند Ú©Ù‡ گویی راه Ùائق آمدن بر تمام مشکلاتشان را یاÙته اند Ùˆ Ù…ÛŒ خرند، خواه این تحÙÙ‡ تئوری بر گرÙته از تÙکرات خشک Ùˆ Ùسیلی گروهی باشد یا مدل ملیجک وار لباسی در پشت ویترین Ùروشگاه. مهم نیست Ú†Ù‡ باشد! مهم نیست دلیل انتخابش Ú†Ù‡ باشد! مهم نیست نتیجه این انتخاب چیست! تنها مهم است Ú©Ù‡ Ù…ÛŒ گویند از این طر٠بÙرمائید!حال این بÙرمائید Ú†Ù‡ معنایی دارد باز هم مهم نیست!!! وای بر ما Ú©Ù‡ نه خود را Ù…ÛŒ شناسیم Ùˆ نه در جهت شناخت خویش قدم Ù…ÛŒ گذاریم. وای بر ما Ú©Ù‡ دیگر حتی ندای درون خویش را نمی توانیم بشنویم. وای بر ما Ú©Ù‡ نمی دانیم Ú†Ù‡ Ù…ÛŒ خواهیم Ùˆ هر بار Ú©Ù‡ چیزی Ù…ÛŒ خواهیم Ùˆ در مسیر وصال پا Ù…ÛŒ گذاریم به میانه راه نرسیده چنان مجذوب زرق Ùˆ برق راههای دیگر Ù…ÛŒ شویم Ú©Ù‡ مبدا Ùˆ مقصد را یکجا Ùراموش Ù…ÛŒ کنیم. وای بر ما Ú©Ù‡ نمی توانیم در برابر هر آنچه در مقابل انسانیت ما ایستاده "نه"بگوییم. درست است Ú©Ù‡ ما جوانان به تنهایی مقصر نیستیم اما چون شروع تقصیریم پس Ù…ÛŒ توانیم از ابتدا مانع مشکل هم باشیم. با احترام سیاوش
      + 
      +بسیار زیبا سیاوش جان. درود بر تو. شهیر +
    • +

    • +احسان __ خط سوم:
      4/3/2008 - 8:21:00 PM
      با سلام Ùˆ ادای احترام وکسب اجازه از شهیر عزیز . از عماد جان عزیزم بخاطر زحمتی Ú©Ù‡ کشیدند Ùˆ اطلاعات خوبی Ú©Ù‡ دادند ØŒ به سهم خودم تشکر Ù…ÛŒ کنم . با کمال شرمندگی از اینکه "بدون هماهنگی" Ùˆ " اجازه ای قبلی شما" Ùˆ "بسرعت" ØŒ معدود اشتباهات تایپی را Ú©Ù‡ با توجه به حجم مطلب ØŒ امری کاملا اجتناب ناپذیر است ØŒ سعی کردم Ú©Ù‡ اصلاح کنم ØŒ از شما پوزش Ù…ÛŒ خواهم . البته عماد جان عزیزم ØŒ بد نیست بدانید Ú©Ù‡ در میزان اشتباه در تایپ هرگز به پای بنده نخواهید رسید ! شاهد ادعای حقیر، شهیر Ùˆ حسین جان عزیزم هستند Ú©Ù‡ خبردارند Ú©Ù‡ چگونه بنده در یک Ùقره عملیات تایپ ØŒ دو صÙحه ای کامل را جا انداختم !!! کاÙÛŒ است بپرسید ØŒ در نهایت صداقت ØŒ بر این رکورد بی نظیر Ùˆ تاریخی شهادت خواهند داد ! باز هم از زحمات عماد جان Ùˆ نیز سوالات خوب حسین جان تشکر Ù…ÛŒ کنم Ú©Ù‡ ان وعده ای مقاله ای عیدانه ای Ù…Ùصل شهیر را در باره ای زنده یاد مرحوم مصدق ØŒ در وسع خود بجای اوردند . ضمن انکه هیچکدام از دوستان، این زحمت ارزشمند عماد جان را دلیل ان نخواهند دانست Ú©Ù‡ شهیرعزیز بعد از بازگشت از مساÙرت ØŒ سر Ùرصت وعده ای خود را عمل نکنند . مشتاقانه اما نه عجولانه ØŒ منتظر مقاله ای شهیر هم خواهیم ماند. با احترام : احسان
      + 
      +احسان جان، من Ùکر کردم قضیه شامل مرور زمان شده است. تا امروز Ú©Ù‡ نرسیده ام دست به این پروژه بزنم. اگر عشق به Ø­Ùظ ارتباط با شما ها نبود تا روز 25 اپریل به خودم مرخصی Ù…ÛŒ دادم. در این سÙر خدا Ù…ÛŒ داند چند هزار مایل در 3 قاره را پیموده ام. از پوست Ú©Ù„Ùت خودم در عجبم Ú©Ù‡ چطوری تونستم اخبار را دنبال کنم Ùˆ چند مقاله کوتاه بنویسم. گرÙتاری زیاد بود. شهیر +
    • +

    • +عماد Û²Û´ ساله از اصÙهان:
      4/3/2008 - 7:14:00 PM
      شهير جان اگر طولانی شد ببخشيد چاره ای نبود احسان جان از کمک شما نيز در ويرايش اين مطلب متشکرم اميدوارم حسين عزیز نيز راضی باشد
      + 
      +ممنون از زحمتی که کشیدی عماد جان. شهیر +
    • +

    • +حسین:
      4/3/2008 - 7:04:00 PM
      سلام آقا شهیر با اجازه شما خواستم از عماد عزیز وهمچنین سرور بزرگوار آقااحسان تشکر کنم وبه آقا عمادبگویم دستت درد نکنه بابت زحمتت ÙˆÙوق العاده عالی بود.قسمتی Ú©Ù‡ نوشتید" خود دکتر مصدق در تقریراتشان به اشتباه بودن تصمیمشان مبنی بر استعÙاء اقرار Ù…ÛŒ کنند"واقعا جالب وحاکی از روح بلند دکتر مصدق هست .بااینکه سوالات خرد وریز زیاد هست اما از اینکه به سوالات عمده من با توجه به کتاب دکتر مصدق پاسخ دادید بازهم تشکر میکنم .میخواستم این پاسخ را برای نویسنده مقاله رجانیوز copy&paste
      +کنم Ú¯Ùتم شاید هرچند به احتمال ضعی٠برای سایت دوست داشتنی آقا شهیر مشکلی پیش +آید.خواستم با حذ٠نام آقا شهیر وشما از کامنت اینکار را بکنم احتمال دادم راضی +نباشید .بنابراین Ùعلا علیرغم میل Ùراوان از اینکار صر٠نظر کردم .بهرحال بازهم +ممنون ومتشکر
    • +

    • +حاجی جÙرسون:
      4/3/2008 - 6:06:00 PM FOO!
      با درود از قدیم Ú¯Ùته اند Ú©Ù‡ یک کلمه هم از مادر عروس بشنوید. بنابراین به اÙاضات اخیر کشور دوست Ùˆ برادر Ùˆ سوسیالیست چین عزیز Ùˆ جان جانان کمونیست عنایت بÙرمایید: رادیو Ùردا: ديپلمات ها در وين Ú¯Ùته اند: Ú©Ù‡ چين، از مخالÙان تشديد تحريم های ايران در شورای امينت، اطلاعات خود درباره ارتباط برنامه هسته ای تهران با تلاش برای دستيابی سلاح اتمی را در اختيار آژانس بين المللی انرژی اتمی قرار داده است. العجب!!!!!! انتخاب :با وجود اینکه چین به شدت با تحریمهای شورای امنیت سازمان ملل علیه ایران مخالÙت Ù…ÛŒ کرد، اطلاعاتی در رابطه با Ùعالیتهای هسته ای ایران در اختیار مقامات آژانس بین المللی انرژی اتمی قرار داده Ú©Ù‡ بر اساس آن ایران در تلاش برای دست یابی به سلاح های اتمی است. به گزارش خبرنگار سرویس بین الملل خبرگزاری انتخاب به نقل از Ùاکس نیوز؛جان بولتون ،نمایندۀ پیشین ایالات متحدۀ امریکا در سازمان ملل،در این باره Ú¯Ùت: اقدام اینچنینی از سوی چین به دلیل روابط نظامی Ú©Ù‡ میان دو کشور [ایران Ùˆ چین] برقرار است، بسیار قابل توجه است. خبرنگار انتخاب Ù…ÛŒ اÙزاید؛ در حالی چین به این اقدام دست زده است Ú©Ù‡ همکاری های تجاری Ùˆ نظامی ایران با این کشور بطور بی سابقه ای اÙزایش یاÙته است. یا باب الحوائج!!!!! رادیو زمانه: چین با وجود مخالÙت با تحریم‌های شدید شورای امنیت علیه تهران، اطلاعاتی درباره تلاش‌های تهران برای ساخت تسلیحات هسته‌ای به آژانس بین‌المللی انرژی اتمی ارائه کرده است. آسوشیتدپرس با اعلام این خبر به نقل از چند دیپلمات آشنا با پرونده هسته‌ای ایران نوشت، Ù¾Ú©Ù† به همراه مسکو همواره بر سر راه شورای امنیت Ùˆ امریکا برای اعمال مجازات های سخت تر علیه تهران به دلیل مقاومت هسته ای این کشور به صورت یک مانع عمل کرده‌اند. این گزارش Ù…ÛŒ اÙزاید، تصمیم چین برای ارائه اطلاعاتی جهت استÙاده در تحقیقات آژانس انرژی اتمی درباره برنامه تسلیحات هسته‌ای ایران، گویای اÙزایش نارضایتی بین‌المللی درباره برنامه هسته‌ای جمهوری اسلامی است Ú©Ù‡ حتی تلاش برای ساخت چنین تسلیحاتی را نیز تکذیب می‌کند. بر اساس این گزارش، دو دیپلمات بلندپایه Ú©Ù‡ ارتباط نزدیکی با آژانس بین‌المللی انرژی اتمی دارند این اقدام چین را برملا کرده‌اند. آژانس بین‌المللی انرژی اتمی از اظهار نظر در این باره خودداری کرده است. العجب. من مامور Ùˆ معذور..حالا از پدر عروس چند کلمه بشنوید: سخنگوی آژانس بین المللی انرژی اتمی ادعای برخی از رسانه های غربی را درباره این Ú©Ù‡ چین اطلاعاتی را درباره برنامه هسته ای ایران در اختیار آژانس قرار داده است ØŒ تکذیب کرد . ملیسا Ùلمینگ در Ú¯Ùت Ùˆ Ú¯Ùˆ با خبرنگار واحد مرکزی خبر تاکید کرد : آژانس بین المللی انرژی اتمی هرگز درباره اطلاعات محرمانه دریاÙتی از کشورها اظهار نظر نمی کند . ÙˆÛŒ Ú¯Ùت: هم +
    • +
    +
    +
    +
    +
    + + diff --git a/result/HTML/utf8bug.html.err b/result/HTML/utf8bug.html.err new file mode 100644 index 0000000..a6ef047 --- /dev/null +++ b/result/HTML/utf8bug.html.err @@ -0,0 +1,15 @@ +./test/HTML/utf8bug.html:45: HTML parser error : htmlParseEntityRef: expecting ';' + + ^ +./test/HTML/utf8bug.html:118: HTML parser error : htmlParseEntityRef: expecting ';' + اندازه فونت:  + کوچک  + معمولی  + بزرگ  +
    ) +SAX.characters( + + + , 7) +SAX.startElement(div, class='Titr1') +SAX.characters( + , 5) +SAX.endElement(div) +SAX.characters( + , 3) +SAX.startElement(br) +SAX.endElement(br) +SAX.characters( + , 3) +SAX.startElement(div, id='NewsBody') +SAX.characters( + + , 8) +SAX.startElement(div, class='Image') +SAX.characters( + + , 10) +SAX.error: htmlParseEntityRef: expecting ';' +SAX.startElement(a, href='showimage.aspx?path=Files_Upload\302.JPG&Width=', rel='lightbox', title='شهير بلاگ') +SAX.characters( + , 5) +SAX.error: htmlParseEntityRef: expecting ';' +SAX.startElement(img, src='showimage.aspx?path=Files_Upload\302.JPG&Width=220', align='left', border='1') +SAX.endElement(img) +SAX.characters( + , 5) +SAX.endElement(a) +SAX.endElement(div) +SAX.characters( + , 4) +SAX.startElement(strong) +SAX.startElement(font, size='4') +SAX.startElement(font, color='#0000ff') +SAX.characters(عکس, 6) +SAX.endElement(font) +SAX.characters( , 1) +SAX.startElement(font, color='#0000ff') +SAX.characters(محصو, 81) +SAX.endElement(font) +SAX.endElement(font) +SAX.endElement(strong) +SAX.startElement(s1) +SAX.error: Tag s1 invalid +SAX.characters( , 2) +SAX.endElement(s1) +SAX.endElement(div) +SAX.characters( + , 3) +SAX.startElement(br) +SAX.endElement(br) +SAX.characters( + , 3) +SAX.startElement(div, align='left') +SAX.characters( + , 4) +SAX.startElement(a, href='printfriendly.asp?id=341') +SAX.characters( + , 4) +SAX.startElement(img, src='shell/PrintFriendly.png', border='0') +SAX.endElement(img) +SAX.endElement(a) +SAX.characters( + , 4) +SAX.startElement(a, href='#', onclick='window.open('SendNews.asp?PageID=341','myWin','toolbar=no,directories=no,location=no,status=no,menubar=no,resizable=yes,scrollbars=no,width=500, height=200'); return false') +SAX.characters( + , 4) +SAX.startElement(img, border='0', src='Shell/SendToFriends.jpg', width='140', height='30') +SAX.endElement(img) +SAX.characters( + , 4) +SAX.endElement(a) +SAX.characters( + , 3) +SAX.endElement(div) +SAX.characters( + , 3) +SAX.startElement(br) +SAX.endElement(br) +SAX.characters( + , 3) +SAX.endElement(td) +SAX.characters( + , 2) +SAX.endElement(tr) +SAX.characters( + , 2) +SAX.startElement(tr) +SAX.characters( + , 3) +SAX.startElement(td) +SAX.characters( , 1) +SAX.startElement(br) +SAX.endElement(br) +SAX.characters( + , 3) +SAX.startElement(hr) +SAX.endElement(hr) +SAX.startElement(div, id='Comments') +SAX.startElement(ul) +SAX.startElement(b) +SAX.characters(ن, 2) +SAX.characters(ظ, 2) +SAX.characters(ر, 2) +SAX.characters(ا, 2) +SAX.characters(ت, 2) +SAX.characters( + , 3) +SAX.characters(ک, 2) +SAX.characters(ا, 2) +SAX.characters(ر, 2) +SAX.characters(ب, 2) +SAX.characters(ر, 2) +SAX.characters(ا, 2) +SAX.characters(ن, 2) +SAX.characters(:, 1) +SAX.endElement(b) +SAX.startElement(br) +SAX.endElement(br) +SAX.startElement(li) +SAX.startElement(font, color='blue') +SAX.characters(حاجی , 22) +SAX.endElement(font) +SAX.startElement(br) +SAX.endElement(br) +SAX.startElement(font, size='1') +SAX.characters(4/5/2008 - + 7:08:00 PM, 23) +SAX.endElement(font) +SAX.startElement(br) +SAX.endElement(br) +SAX.characters(با در, 28) +SAX.characters( , 2) +SAX.characters(بدون , 476) +SAX.characters(‌, 3) +SAX.characters(رسد آ, 203) +SAX.characters(‌, 3) +SAX.characters(كنيم. , 222) +SAX.characters(‌, 3) +SAX.characters(هاي گ, 403) +SAX.characters(‌, 3) +SAX.characters(ها + ج, 56) +SAX.characters(‌, 3) +SAX.characters(گسست, 230) +SAX.characters(‌, 3) +SAX.characters(ها و ن, 240) +SAX.characters(‌, 3) +SAX.characters(كردي, 38) +SAX.characters(‌, 3) +SAX.characters(رسد ك, 209) +SAX.characters(‌, 3) +SAX.characters(كنيم. , 241) +SAX.characters(‌, 3) +SAX.characters(اند و , 221) +SAX.characters(‌, 3) +SAX.characters(هاي خ, 848) +SAX.endElement(li) +SAX.startElement(br) +SAX.endElement(br) +SAX.startElement(br) +SAX.endElement(br) +SAX.startElement(li) +SAX.startElement(font, color='blue') +SAX.characters(سیاو, 11) +SAX.endElement(font) +SAX.startElement(br) +SAX.endElement(br) +SAX.startElement(font, size='1') +SAX.characters(4/3/2008 - 9:28:00 PM, 21) +SAX.endElement(font) +SAX.startElement(br) +SAX.endElement(br) +SAX.characters(مرد ه, 693) +SAX.characters(", 1) +SAX.characters(جو گی, 11) +SAX.characters(", 1) +SAX.characters( که هر, 1000) +SAX.characters( وای ب, 460) +SAX.characters(", 1) +SAX.characters(نه, 4) +SAX.characters(", 1) +SAX.characters(بگوی, 233) +SAX.startElement(br) +SAX.endElement(br) +SAX.characters( +, 1) +SAX.characters( , 2) +SAX.startElement(br) +SAX.endElement(br) +SAX.characters( +, 1) +SAX.startElement(font, color='#800000') +SAX.characters(بسیا, 67) +SAX.endElement(font) +SAX.endElement(li) +SAX.startElement(br) +SAX.endElement(br) +SAX.startElement(br) +SAX.endElement(br) +SAX.startElement(li) +SAX.startElement(font, color='blue') +SAX.characters(احسا, 26) +SAX.endElement(font) +SAX.startElement(br) +SAX.endElement(br) +SAX.startElement(font, size='1') +SAX.characters(4/3/2008 - 8:21:00 PM, 21) +SAX.endElement(font) +SAX.startElement(br) +SAX.endElement(br) +SAX.characters(با سل, 291) +SAX.characters(", 1) +SAX.characters(بدون , 23) +SAX.characters(", 1) +SAX.characters( و , 4) +SAX.characters(", 1) +SAX.characters( اجاز, 32) +SAX.characters(", 1) +SAX.characters( و , 4) +SAX.characters(", 1) +SAX.characters(بسرع, 10) +SAX.characters(", 1) +SAX.characters( ، معد, 1001) +SAX.characters(د مرح, 481) +SAX.startElement(br) +SAX.endElement(br) +SAX.characters( +, 1) +SAX.characters( , 2) +SAX.startElement(br) +SAX.endElement(br) +SAX.characters( +, 1) +SAX.startElement(font, color='#800000') +SAX.characters(احسا, 602) +SAX.endElement(font) +SAX.endElement(li) +SAX.startElement(br) +SAX.endElement(br) +SAX.startElement(br) +SAX.endElement(br) +SAX.startElement(li) +SAX.startElement(font, color='blue') +SAX.characters(عماد , 41) +SAX.endElement(font) +SAX.startElement(br) +SAX.endElement(br) +SAX.startElement(font, size='1') +SAX.characters(4/3/2008 - 7:14:00 PM, 21) +SAX.endElement(font) +SAX.startElement(br) +SAX.endElement(br) +SAX.characters(شهير , 227) +SAX.startElement(br) +SAX.endElement(br) +SAX.characters( +, 1) +SAX.characters( , 2) +SAX.startElement(br) +SAX.endElement(br) +SAX.characters( +, 1) +SAX.startElement(font, color='#800000') +SAX.characters(ممنو, 68) +SAX.endElement(font) +SAX.endElement(li) +SAX.startElement(br) +SAX.endElement(br) +SAX.startElement(br) +SAX.endElement(br) +SAX.startElement(li) +SAX.startElement(font, color='blue') +SAX.characters(حسین:, 9) +SAX.endElement(font) +SAX.startElement(br) +SAX.endElement(br) +SAX.startElement(font, size='1') +SAX.characters(4/3/2008 - 7:04:00 PM, 21) +SAX.endElement(font) +SAX.startElement(br) +SAX.endElement(br) +SAX.characters(سلام , 834) +SAX.error: htmlParseEntityRef: expecting ';' +SAX.characters(&, 1) +SAX.characters(paste, 5) +SAX.characters( , 1) +SAX.startElement(br) +SAX.endElement(br) +SAX.characters( +کنم گ, 440) +SAX.endElement(li) +SAX.startElement(br) +SAX.endElement(br) +SAX.startElement(br) +SAX.endElement(br) +SAX.startElement(li) +SAX.startElement(font, color='blue') +SAX.characters(حاجی , 22) +SAX.endElement(font) +SAX.startElement(br) +SAX.endElement(br) +SAX.startElement(font, size='1') +SAX.characters(4/3/2008 - 6:06:00 PM FOO!, 26) +SAX.endElement(font) +SAX.startElement(br) +SAX.endElement(br) +SAX.characters(با در, 1000) +SAX.characters(ژانس , 999) +SAX.characters(‌, 3) +SAX.characters(های ش, 98) +SAX.characters(‌, 3) +SAX.characters(های ت, 59) +SAX.characters(‌, 3) +SAX.characters(ای به , 27) +SAX.characters(‌, 3) +SAX.characters(المل, 186) +SAX.characters(‌, 3) +SAX.characters(ای ای, 299) +SAX.characters(‌, 3) +SAX.characters(اند. ا, 223) +SAX.characters(‌, 3) +SAX.characters(ای ای, 65) +SAX.characters(‌, 3) +SAX.characters(المل, 47) +SAX.characters(‌, 3) +SAX.characters(ای جم, 130) +SAX.characters(‌, 3) +SAX.characters(کند. ب, 132) +SAX.characters(‌, 3) +SAX.characters(المل, 93) +SAX.characters(‌, 3) +SAX.characters(اند. آ, 25) +SAX.characters(‌, 3) +SAX.characters(المل, 814) +SAX.endElement(li) +SAX.endElement(ul) +SAX.endElement(div) +SAX.endElement(td) +SAX.endElement(tr) +SAX.endElement(table) +SAX.endElement(td) +SAX.endElement(tr) +SAX.endElement(table) +SAX.endElement(td) +SAX.endElement(tr) +SAX.endElement(table) +SAX.endElement(td) +SAX.endElement(tr) +SAX.endElement(table) +SAX.endElement(body) +SAX.endElement(html) +SAX.endDocument() diff --git a/result/HTML/wired.html b/result/HTML/wired.html new file mode 100644 index 0000000..74d366e --- /dev/null +++ b/result/HTML/wired.html @@ -0,0 +1,576 @@ + + +Top Stories News from Wired News + + + + + + + +
    + + + + + + + +
    + +
    True to the Original
    + + + + + + + + + + + + + + + + + + + + + + + + + + + +

       updated 10:15 a.m.  15.Oct.99.PDT
    + + + + + + + + + + +
    + + + + + + + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    SECTIONS
    Business
    Culture
    Technology
    Politics
    +WIRE SERVICE NEWS
    Top Headlines
    Sports
    Finance
    + FREE DELIVERY
    + + + + + +
    +
    + + + + + + + + + +  +
    +
    + + +
    +
    + STOCKS
    Get Quote:
    +  +
    +Financial Services
    +
    +
    +
    + + + Datek + Wired Index Fund + internet.com Index Fund + GetSmart's MortgageFinder +
    Today's Summary
    Wired Index | All Indexes
    Portfolios
    FIND A BOOK
    + + + + + + + + + + +
    +
    + + + + +
    +
    + + + +
    +

    + Powered by barnesandnoble.com + +
    + + +

    +
    + +
    WIRED + MAGAZINE
    + + +
    + +Wired Magazine
    + +Issue 7.11 +
    +
    + + +Subscribe to Wired.
    Special offer!
    + + +
    +
    + HOTWIRED +
    +Frontdoor
    +Webmonkey
    +Webmonkey Guides
    +RGB Gallery
    +Animation Express
    +Suck.com
    +
    +
    + HOTBOT +
    +Search
    +Shopping
    +
    +
    +
    + + + Wired News staff

    + + + + Contact us
    + + +

    + + Wired News delivered
    by PalmPilot,
    Outlook Express,
    In-Box Direct,
    +or PointCast

    + + + +
    +
    + + + + + + + + + + + + + + + +
    +
    +
    +
    + + + + +Nomad's Land

    Homeless, but ID'd, in Seattle
    8:15 a.m. 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.
    in Politics
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     HITS & MISC.
      +
    + + Calendar of E-Vents
    Ongoing goings-on.

    Rants & Raves
    Readers on Apple's G4 ... AOL's passwords ... MS vs. Linux.

    +
     CURRENT HOO-HA
      + +
    + +MP3 Rocks the Web
    Download the sound.
    Sponsored by Musicmaker


    + +The Wireless World
    Networking gets unplugged.
    Sponsored by Ericsson


    + +Digital Hollywood
    The buzz of tech.

    + +IPO Outlook
    Deals in the pipeline.
    Sponsored by Sun


    + +E-Biz
    Business unusual.
    Sponsored by IBM


    + +Med-Tech Center
    From the bleeding edge.
    Sponsored by WebMD


    + +The Linux Effect
    Not just for geeks.


    + +Executive Summary
    CEOs, COOs, CIOs unite.
    Sponsored by Vignette


    + +Making the Grade
    Reading, writing, and ROM.
    Sponsored by U of Phoenix


    + +Infostructure
    An IS/IT resource
    Sponsored by Sprint


    + +Y2K Watch
    Tick... Tick... Tick...

    + +More Hoo-Ha
     
    + +
    +
     MEANWHILE...
      +
    + + + +Führer Furor

    +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. +

    +
  • More from Lycos +


  • +
    + + + 
    + +
    + +Other Top Stories
    +
    + + +Wall Street Keeps Reeling
    10:15 a.m. 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.
    in Reuters

    The Market's Madness
    9:10 a.m. 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.
    in Reuters

    'Want a Loan? What's Your Race?'
    3:00 a.m. 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.
    in Politics

    Music Regs: A Bagful of Noise
    3:00 a.m. 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.
    in Business

    Can't Beat 'Em? Green 'Em
    3:00 a.m. 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.
    in Technology

    Y2K Cloud Over MS Office
    3:00 a.m. 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.
    in Business

    Med-Tech
    Biochips for Custom Chemo
    3:00 a.m. 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.
    in Technology

    High Stakes in Priceline Suit
    3:00 a.m. 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.
    in Business

    Biodiversity Merges Online
    3:00 a.m. 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.
    in Technology

    + + + + +
    +Elsewhere Today
    +
    + + +FCC: Hands-Off on Broadband
    The Industry Standard

    White House Lashes Out on Treaty
    Lycos

    Steve Jobs at 44
    Time

    Computers May Run on Gas
    ZDNN

    Much Is Free in the Wired World
    The New York Times (Registration Required)

    Melissa: I'm Baaaack
    USA Today

    Domain Owners Surrender Privacy
    MSNBC

    Dividing to Conquer in VC Game
    The Washington Post

    The Red Hat Diaries
    Salon

    Screensaver to Predict Climate
    BBC News

    + + + + + +
    + +
    + + + +
    +
    + +

    + +

    +Send us feedback + |  +Work at Wired Digital + |  +Advertise with us +
    +About Wired Digital + |  +Our Privacy Policy
    + + +

    +

    Copyright © 1994-99 Wired Digital Inc. All rights reserved. + +
    + + + + + + + + + + +

    +
    + + +
    + + +
    + + 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 ';' +
    + ^ +./test/HTML/wired.html:346: HTML parser error : Opening and ending tag mismatch: td and font + + ^ +./test/HTML/wired.html:374: HTML parser error : htmlParseEntityRef: no name +a, sans-serif">
    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.



    Vignette
    + ^ +./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">Spri + ^ +./test/HTML/wired.html:408: HTML parser error : Opening and ending tag mismatch: a and font +com&BANNER=Sprint" style="text-decoration:none">Sprint + ^ +./test/HTML/wired.html:408: HTML parser error : End tag : expected '>' +=Sprint" style="text-decoration:none">Sprint + ^ +./test/HTML/wired.html:414: HTML parser error : Opening and ending tag mismatch: td and font + + ^ +./test/HTML/wired.html:414: HTML parser error : Opening and ending tag mismatch: td and font + + ^ +./test/HTML/wired.html:414: HTML parser error : Opening and ending tag mismatch: td and font + + ^ +./test/HTML/wired.html:414: HTML parser error : Opening and ending tag mismatch: td and font + + ^ +./test/HTML/wired.html:414: HTML parser error : Opening and ending tag mismatch: td and font + + ^ +./test/HTML/wired.html:414: HTML parser error : Opening and ending tag mismatch: td and font + + ^ +./test/HTML/wired.html:414: HTML parser error : Opening and ending tag mismatch: td and font + + ^ +./test/HTML/wired.html:432: HTML parser error : htmlParseEntityRef: expecting ';' +href="http://www.lycos.com/news/flash/hitlerbunker.html?v=wn1015&lpv=1">Lycos + +
    +Sponsored bySun Microsystems. We're the dot in .com + +) +SAX.characters( +, 1) +SAX.endElement(table) +SAX.characters( +, 1) +SAX.comment( end WIRED NEWS header ) +SAX.characters( + +, 2) +SAX.comment( begin upper left side Navigation ) +SAX.characters( + +, 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( , 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( , 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'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&is_search=Y', border='0', align='top') +SAX.endElement(img) +SAX.characters( +, 1) +SAX.comment( + +) +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 hiring

    ) +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.characters( + +, 2) +SAX.comment( end lower left side Navigation ) +SAX.characters( +, 1) +SAX.comment( CONTENT TABLE ) +SAX.characters( + +, 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( , 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( , 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( , 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(&, 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( , 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(&, 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( , 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( , 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/&template=/security/security.html&SITE= +wired.com&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( , 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( , 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( , 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ü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&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( , 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( , 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( , 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( , 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( , 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( , 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( , 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( , 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( , 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( , 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( , 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( , 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( , 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( , 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( , 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( , 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( , 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( , 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( , 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( , 2) +SAX.characters(|, 1) +SAX.characters( , 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( , 2) +SAX.characters(|, 1) +SAX.characters( , 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( , 2) +SAX.characters(|, 1) +SAX.characters( , 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(©, 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.characters( + + +, 3) +SAX.startElement(br) +SAX.endElement(br) +SAX.characters( +, 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 @@ + + + + Four separate rectangles + + + + + + 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 @@ + + + + This valid svg document draws a triangle which is a hyperlink + + +

    + + 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 @@ + + + This well formed svg document draws a triangle which is a hyperlink + + +

    + + diff --git a/result/SVG/bike-errors.xml b/result/SVG/bike-errors.xml new file mode 100644 index 0000000..e69de29 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 @@ + + + + Kona Lavadome mountain bike + + 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. + + + + + 14/12 gauge double butted spoke + + + + black anodised low torsion hub + + + + twin wall, eyeletted rim + + + + 8 speed, wide ratio gearing + + + + double cross lacing of 32 spokes + + + + + Front wheel + The front wheel provides grip, steering and some shock absorption + + + + + + + + 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 @@ + + + + This is a blue circle with a red outline + + + + + 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 @@ + + + + + + + + + + Defining things for later use + + + 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 @@ + + + + + + Company sales by region + + + This is a bar chart which shows + company sales by region. + + + + 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 @@ + + + + This is an ellipse, axis aligned and centered on the origin + + + + + 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 @@ + + + + This sample SVG file draws a flower + + + + + + 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 @@ + + + + Gradient example + + + + + + + + + + + + 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 @@ + + + + Two groups, each of two rectangles + + + + + + + + + + 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 @@ + + + + Two named groups + + + + + + + + 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 @@ + + + + Groups can nest + + + + + + + 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 @@ + + + + This graphic links to an external image + + + My image + + 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 @@ + + + This links to an external image + + + My image + + 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 @@ + + + + Linear gradient example + + + + + + + + + + + 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 @@ + + + + + + + + + An double-headed arrow example using markers + + + + + + + + + + + + + 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 @@ + + + + Example of using a mask + + + + + + + + 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 @@ + + + This example uses the switch element to provide a + fallback graphical representation of an equation, if + MathML is not supported. + + + + + + + + + + + + Formula goes here + + + 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 @@ + + + + + + + + + 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 @@ + + + + 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 @@ + + + + + + + + + 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 @@ + + + + + + + + + + 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 @@ + + + + A sample polyline, and equivalent path + + + + 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 @@ + + + + + + + + + + + + + + This chart includes private data in another namespace + + + 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 @@ + + + + Radial gradient example with three gradient stops + + + + + + + + + + + + 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 @@ + + + + This is a rectangle + + + + + 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 @@ + + + + This is an example SVG file + The global description uses markup from the + mydoc namespace. + + + + + 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 @@ + + + + + + + + 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 @@ + + + + + + + + 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 @@ + + + + + + + Here is my title + 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 @@ + + + + + + + + + + + + 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 @@ + + + + + + + + + Examples of inline and referenced content + + + + + + + + + + + + + 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 @@ + + + This well formed svg document contains a hyperlink + + +

    + + 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 @@ + + + + + XYZ + + ABC + + + + 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 @@ + + + + + + + + + + + + + + 123 + + + ABC + + + 456 + + + DEF + + 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 @@ + + + + 123 + 456 + + 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 @@ + + + + Simple text on a path + + + Text on path + 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 @@ + + + + + + + + + + + + General graphics on a path + + + + + + + + + + + + + + + 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 @@ + + + + Demonstration of coordinate transforms + + + This prints 12 pixels high. + This prints 12 pixels high. + + + + This prints 24 pixels high. + + This prints 12 pixels high. + + 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 @@ + + + + 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 @@ + + + + Gradients apply to leaf nodes + + + + + + + + + + + + + + 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 @@ + + + + + + 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 @@ + + + + This SVG drawing embeds another one, + thus establishing a new viewport + + + + + + 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 @@ + + + + Transformation with establishment of a new viewport + + + This prints 12 pixels high. + This prints 12 pixels high. + + + + This prints 24 pixels high. + + This prints 12 pixels high. + + + + + + + This prints 36 pixels high. + This prints 36 pixels high. + + + 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 @@ + + + + + + + + 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 @@ + + + + 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 + + ^ +./test/VC/AttributeDefaultLegal:6: validity error : Attribute doc of bad: invalid default value + + ^ +./test/VC/AttributeDefaultLegal:8: validity error : Attribute doc of bad2: invalid default value + + ^ +./test/VC/AttributeDefaultLegal:11: element doc: validity error : No declaration for attribute val of element doc + + ^ diff --git a/result/VC/AttributeDefaultLegal.rdr b/result/VC/AttributeDefaultLegal.rdr new file mode 100644 index 0000000..6b61686 --- /dev/null +++ b/result/VC/AttributeDefaultLegal.rdr @@ -0,0 +1,12 @@ +./test/VC/AttributeDefaultLegal:4: validity error : Attribute doc of At: invalid default value + + ^ +./test/VC/AttributeDefaultLegal:6: validity error : Attribute doc of bad: invalid default value + + ^ +./test/VC/AttributeDefaultLegal:8: validity error : Attribute doc of bad2: invalid default value + + ^ +./test/VC/AttributeDefaultLegal:11: element doc: validity error : No declaration for attribute val of element doc + + ^ diff --git a/result/VC/AttributeNmtokens b/result/VC/AttributeNmtokens new file mode 100644 index 0000000..4c19285 --- /dev/null +++ b/result/VC/AttributeNmtokens @@ -0,0 +1,3 @@ +./test/VC/AttributeNmtokens:6: element test: validity error : Syntax of value for attribute attr1 of test is not valid + + ^ diff --git a/result/VC/AttributeNmtokens.rdr b/result/VC/AttributeNmtokens.rdr new file mode 100644 index 0000000..4c19285 --- /dev/null +++ b/result/VC/AttributeNmtokens.rdr @@ -0,0 +1,3 @@ +./test/VC/AttributeNmtokens:6: element test: validity error : Syntax of value for attribute attr1 of test is not valid + + ^ 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 + + ^ diff --git a/result/VC/DuplicateType.rdr b/result/VC/DuplicateType.rdr new file mode 100644 index 0000000..34e2c20 --- /dev/null +++ b/result/VC/DuplicateType.rdr @@ -0,0 +1,3 @@ +./test/VC/DuplicateType:3: validity error : Definition of a has duplicate references of 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 ! + + ^ diff --git a/result/VC/ElementValid.rdr b/result/VC/ElementValid.rdr new file mode 100644 index 0000000..d6b50a7 --- /dev/null +++ b/result/VC/ElementValid.rdr @@ -0,0 +1,3 @@ +./test/VC/ElementValid:3: validity error : Validation failed: no DTD found ! + + ^ 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 +

    + ^ diff --git a/result/VC/ElementValid2.rdr b/result/VC/ElementValid2.rdr new file mode 100644 index 0000000..cae331b --- /dev/null +++ b/result/VC/ElementValid2.rdr @@ -0,0 +1,6 @@ +./test/VC/ElementValid2:4: element p: validity error : No declaration for element p +

    + ^ +./test/VC/ElementValid2:5: element p: validity error : No declaration for element p + +^ 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 +Oops, this element was declared EMPTY + ^ diff --git a/result/VC/ElementValid3.rdr b/result/VC/ElementValid3.rdr new file mode 100644 index 0000000..5f4e03e --- /dev/null +++ b/result/VC/ElementValid3.rdr @@ -0,0 +1,6 @@ +./test/VC/ElementValid3:4: element doc: validity error : Element doc was declared EMPTY this one has content +Oops, this element was declared EMPTY + ^ +./test/VC/ElementValid3:5: element doc: validity error : Element doc was declared EMPTY this one has content + +^ 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 + This seems Ok but this was not declared + ^ diff --git a/result/VC/ElementValid4.rdr b/result/VC/ElementValid4.rdr new file mode 100644 index 0000000..289a527 --- /dev/null +++ b/result/VC/ElementValid4.rdr @@ -0,0 +1,6 @@ +./test/VC/ElementValid4:7: element doc: validity error : Element c is not declared in doc list of possible children + This seems Ok but this was not declared + ^ +./test/VC/ElementValid4:8: element doc: validity error : Element c is not declared in doc list of possible children + +^ diff --git a/result/VC/ElementValid5 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) + but thiswas not declaredseems + ^ diff --git a/result/VC/ElementValid5.rdr b/result/VC/ElementValid5.rdr new file mode 100644 index 0000000..899d759 --- /dev/null +++ b/result/VC/ElementValid5.rdr @@ -0,0 +1,6 @@ +./test/VC/ElementValid5:7: element doc: validity error : Element doc content does not follow the DTD, expecting (a , b* , c+), got (a b c b) + but thiswas not declaredseems + ^ +./test/VC/ElementValid5:8: element doc: validity error : Element doc content does not follow the DTD, Misplaced b + +^ 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) +lacks c + ^ diff --git a/result/VC/ElementValid6.rdr b/result/VC/ElementValid6.rdr new file mode 100644 index 0000000..aeafd6b --- /dev/null +++ b/result/VC/ElementValid6.rdr @@ -0,0 +1,6 @@ +./test/VC/ElementValid6:7: element doc: validity error : Element doc content does not follow the DTD, expecting (a , b? , c+)?, got (a b) +lacks c + ^ +./test/VC/ElementValid6:8: element doc: validity error : Element doc content does not follow the DTD, Expecting more child + +^ diff --git a/result/VC/ElementValid7 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) + + ^ diff --git a/result/VC/ElementValid7.rdr b/result/VC/ElementValid7.rdr new file mode 100644 index 0000000..f001fd2 --- /dev/null +++ b/result/VC/ElementValid7.rdr @@ -0,0 +1,6 @@ +./test/VC/ElementValid7:7: element doc: validity error : Element doc content does not follow the DTD, expecting ((a | b)* , c+ , a , b? , c , a?), got (a b a c c a) + + ^ +./test/VC/ElementValid7:8: element doc: validity error : Element doc content does not follow the DTD, Expecting more child + +^ diff --git a/result/VC/ElementValid8 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 is non-deterministic + ^ diff --git a/result/VC/ElementValid8.rdr b/result/VC/ElementValid8.rdr new file mode 100644 index 0000000..f1b0dad --- /dev/null +++ b/result/VC/ElementValid8.rdr @@ -0,0 +1,3 @@ +./test/VC/ElementValid8:7: validity error : Content model of doc is not determinist: ((a , b) | (a , c)) + doc is non-deterministic + ^ 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 + + ^ diff --git a/result/VC/Enumeration.rdr b/result/VC/Enumeration.rdr new file mode 100644 index 0000000..30896fc --- /dev/null +++ b/result/VC/Enumeration.rdr @@ -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 + + ^ diff --git a/result/VC/NS1 b/result/VC/NS1 new file mode 100644 index 0000000..e69de29 diff --git a/result/VC/NS1.rdr b/result/VC/NS1.rdr new file mode 100644 index 0000000..e69de29 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 + + ^ diff --git a/result/VC/NS2.rdr b/result/VC/NS2.rdr new file mode 100644 index 0000000..abd1f88 --- /dev/null +++ b/result/VC/NS2.rdr @@ -0,0 +1,3 @@ +./test/VC/NS2:9: element doc: validity error : No declaration for attribute attr of element doc + + ^ 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/NS3.rdr b/result/VC/NS3.rdr new file mode 100644 index 0000000..72c0117 --- /dev/null +++ b/result/VC/NS3.rdr @@ -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..a2c894f --- /dev/null +++ b/result/VC/OneID @@ -0,0 +1,6 @@ +./test/VC/OneID:4: validity error : Element doc has too may ID attributes defined : id + + ^ +./test/VC/OneID:4: validity error : Element doc has 2 ID attribute defined in the internal subset : id + + ^ diff --git a/result/VC/OneID.rdr b/result/VC/OneID.rdr new file mode 100644 index 0000000..a2c894f --- /dev/null +++ b/result/VC/OneID.rdr @@ -0,0 +1,6 @@ +./test/VC/OneID:4: validity error : Element doc has too may ID attributes defined : id + + ^ +./test/VC/OneID:4: validity error : Element doc has 2 ID attribute defined in the internal subset : id + + ^ diff --git a/result/VC/OneID2 b/result/VC/OneID2 new file mode 100644 index 0000000..2af04f1 --- /dev/null +++ b/result/VC/OneID2 @@ -0,0 +1,6 @@ +./test/VC/OneID2:3: validity error : Element doc has too may ID attributes defined : id + + ^ +./test/VC/OneID2:3: validity error : Element doc has 2 ID attribute defined in the internal subset : id + + ^ diff --git a/result/VC/OneID2.rdr b/result/VC/OneID2.rdr new file mode 100644 index 0000000..2af04f1 --- /dev/null +++ b/result/VC/OneID2.rdr @@ -0,0 +1,6 @@ +./test/VC/OneID2:3: validity error : Element doc has too may ID attributes defined : id + + ^ +./test/VC/OneID2:3: validity error : Element doc has 2 ID attribute defined in the internal subset : id + + ^ diff --git a/result/VC/OneID3 b/result/VC/OneID3 new file mode 100644 index 0000000..9accece --- /dev/null +++ b/result/VC/OneID3 @@ -0,0 +1,6 @@ +test/VC/dtds/doc.dtd:2: validity error : Element doc has too may ID attributes defined : val + + ^ +test/VC/dtds/doc.dtd:2: validity error : Element doc has 2 ID attribute defined in the external subset : val + + ^ diff --git a/result/VC/OneID3.rdr b/result/VC/OneID3.rdr new file mode 100644 index 0000000..9accece --- /dev/null +++ b/result/VC/OneID3.rdr @@ -0,0 +1,6 @@ +test/VC/dtds/doc.dtd:2: validity error : Element doc has too may ID attributes defined : val + + ^ +test/VC/dtds/doc.dtd:2: validity error : Element doc has 2 ID attribute defined in the external subset : val + + ^ 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 + "> + ^ +./test/VC/PENesting:1: parser error : Extra content at the end of the document + "> + ^ diff --git a/result/VC/PENesting.rdr b/result/VC/PENesting.rdr new file mode 100644 index 0000000..7f82e13 --- /dev/null +++ b/result/VC/PENesting.rdr @@ -0,0 +1,4 @@ +./test/VC/PENesting:1: parser error : StartTag: invalid element name + "> + ^ +./test/VC/PENesting : failed to parse 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 + + ^ +./test/VC/PENesting2:1: parser error : Extra content at the end of the document + + ^ diff --git a/result/VC/PENesting2.rdr b/result/VC/PENesting2.rdr new file mode 100644 index 0000000..71cb053 --- /dev/null +++ b/result/VC/PENesting2.rdr @@ -0,0 +1,4 @@ +./test/VC/PENesting2:1: parser error : StartTag: invalid element name + + ^ +./test/VC/PENesting2 : failed to parse 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 + + ^ diff --git a/result/VC/UniqueElementTypeDeclaration.rdr b/result/VC/UniqueElementTypeDeclaration.rdr new file mode 100644 index 0000000..8537041 --- /dev/null +++ b/result/VC/UniqueElementTypeDeclaration.rdr @@ -0,0 +1,3 @@ +test/VC/dtds/a.dtd:1: validity error : Redefinition of element a + + ^ 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 + + ^ diff --git a/result/VC/UniqueElementTypeDeclaration2.rdr b/result/VC/UniqueElementTypeDeclaration2.rdr new file mode 100644 index 0000000..c328d92 --- /dev/null +++ b/result/VC/UniqueElementTypeDeclaration2.rdr @@ -0,0 +1,3 @@ +./test/VC/UniqueElementTypeDeclaration2:6: validity error : Redefinition of element a + + ^ diff --git a/result/XInclude/docids.xml b/result/XInclude/docids.xml new file mode 100644 index 0000000..ad8e6e6 --- /dev/null +++ b/result/XInclude/docids.xml @@ -0,0 +1,19 @@ + + + + + +]> + + + + + + + + + + + + diff --git a/result/XInclude/docids.xml.err b/result/XInclude/docids.xml.err new file mode 100644 index 0000000..e69de29 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 @@ + + + + Inclusion failed + diff --git a/result/XInclude/fallback.xml.err b/result/XInclude/fallback.xml.err new file mode 100644 index 0000000..e69de29 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/fallback2.xml b/result/XInclude/fallback2.xml new file mode 100644 index 0000000..d91b0a1 --- /dev/null +++ b/result/XInclude/fallback2.xml @@ -0,0 +1,6 @@ + + + There is no b.xml ... + There is no c.xml ... + + diff --git a/result/XInclude/fallback2.xml.err b/result/XInclude/fallback2.xml.err new file mode 100644 index 0000000..e69de29 diff --git a/result/XInclude/fallback2.xml.rdr b/result/XInclude/fallback2.xml.rdr new file mode 100644 index 0000000..2fca4f0 --- /dev/null +++ b/result/XInclude/fallback2.xml.rdr @@ -0,0 +1,11 @@ +0 1 a 0 0 +1 14 #text 0 1 + +1 3 #text 0 1 There is no b.xml ... +1 14 #text 0 1 + +1 3 #text 0 1 There is no c.xml ... +1 14 #text 0 1 + + +0 15 a 0 0 diff --git a/result/XInclude/include.xml b/result/XInclude/include.xml new file mode 100644 index 0000000..3a9366d --- /dev/null +++ b/result/XInclude/include.xml @@ -0,0 +1,9 @@ + + + + +

    something

    +

    really

    +

    simple

    + + diff --git a/result/XInclude/include.xml.err b/result/XInclude/include.xml.err new file mode 100644 index 0000000..e69de29 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..48030d1 --- /dev/null +++ b/result/XInclude/nodes.xml @@ -0,0 +1,5 @@ + + + +

    something

    really

    simple

    +
    diff --git a/result/XInclude/nodes.xml.err b/result/XInclude/nodes.xml.err new file mode 100644 index 0000000..e69de29 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..fac2d82 --- /dev/null +++ b/result/XInclude/nodes2.xml @@ -0,0 +1,5 @@ + + + +

    something

    really

    simple

    +
    diff --git a/result/XInclude/nodes2.xml.err b/result/XInclude/nodes2.xml.err new file mode 100644 index 0000000..e69de29 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 @@ + + + + + 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..4af1738 --- /dev/null +++ b/result/XInclude/recursive.xml @@ -0,0 +1,3 @@ + +is a test + diff --git a/result/XInclude/recursive.xml.err b/result/XInclude/recursive.xml.err new file mode 100644 index 0000000..e69de29 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 @@ + + + + test with accents in ISO-8859-1: À Á é è + + diff --git a/result/XInclude/tstencoding.xml.err b/result/XInclude/tstencoding.xml.err new file mode 100644 index 0000000..e69de29 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 @@ + + + + this is some text in ASCII + + diff --git a/result/XInclude/txtinclude.xml.err b/result/XInclude/txtinclude.xml.err new file mode 100644 index 0000000..e69de29 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..e04346f --- /dev/null +++ b/result/XPath/expr/base @@ -0,0 +1,28 @@ + +======================== +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 + +======================== +Expression: 1*1+1*1+1*1+1*1+1*1+1*1+1*1+1*1+1*1+1*1+1*1+1*1+1*1+1*1+1*1+1*1+1*1+1*1+1*1+1*1+1*1 +Object is a number : 21 + +======================== +Expression: self::-name +Object is empty (NULL) 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..e023bf0 --- /dev/null +++ b/result/XPath/tests/chaptersbase @@ -0,0 +1,125 @@ + +======================== +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 + +======================== +Expression: //p[1] +Object is a Node Set : +Set contains 5 nodes: +1 ELEMENT p +2 ELEMENT p +3 ELEMENT p +4 ELEMENT p +5 ELEMENT p 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/langsimple b/result/XPath/tests/langsimple new file mode 100644 index 0000000..d8d7afd --- /dev/null +++ b/result/XPath/tests/langsimple @@ -0,0 +1,60 @@ + +======================== +Expression: //*[lang('en')] +Object is a Node Set : +Set contains 9 nodes: +1 ELEMENT b + ATTRIBUTE lang + TEXT + content=en +2 ELEMENT x +3 ELEMENT x +4 ELEMENT para + ATTRIBUTE lang + TEXT + content=en +5 ELEMENT div + ATTRIBUTE lang + TEXT + content=en +6 ELEMENT para +7 ELEMENT para + ATTRIBUTE lang + TEXT + content=EN +8 ELEMENT para + ATTRIBUTE lang + TEXT + content=en-us +9 ELEMENT para + ATTRIBUTE lang + TEXT + content=EN-US + +======================== +Expression: //*[lang('en-us')] +Object is a Node Set : +Set contains 2 nodes: +1 ELEMENT para + ATTRIBUTE lang + TEXT + content=en-us +2 ELEMENT para + ATTRIBUTE lang + TEXT + content=EN-US + +======================== +Expression: //*[lang('en-gb')] +Object is a Node Set : +Set contains 0 nodes: + +======================== +Expression: //*[lang('fr')] +Object is a Node Set : +Set contains 0 nodes: + +======================== +Expression: //*[lang('')] +Object is a Node Set : +Set contains 0 nodes: diff --git a/result/XPath/tests/mixedpat b/result/XPath/tests/mixedpat new file mode 100644 index 0000000..3be0c49 --- /dev/null +++ b/result/XPath/tests/mixedpat @@ -0,0 +1,101 @@ + +======================== +Expression: s +Object is a Node Set : +Set contains 1 nodes: +1 ELEMENT s + ATTRIBUTE p + TEXT + content=root + +======================== +Expression: s|p1/s +Object is a Node Set : +Set contains 2 nodes: +1 ELEMENT s + ATTRIBUTE p + TEXT + content=root +2 ELEMENT s + ATTRIBUTE p + TEXT + content=p1 + +======================== +Expression: s|/root/p1/s +Object is a Node Set : +Set contains 2 nodes: +1 ELEMENT s + ATTRIBUTE p + TEXT + content=root +2 ELEMENT s + ATTRIBUTE p + TEXT + content=p1 + +======================== +Expression: /root/p1/s|s +Object is a Node Set : +Set contains 2 nodes: +1 ELEMENT s + ATTRIBUTE p + TEXT + content=root +2 ELEMENT s + ATTRIBUTE p + TEXT + content=p1 + +======================== +Expression: //s +Object is a Node Set : +Set contains 3 nodes: +1 ELEMENT s + ATTRIBUTE p + TEXT + content=root +2 ELEMENT s + ATTRIBUTE p + TEXT + content=p1 +3 ELEMENT s + ATTRIBUTE p + TEXT + content=p2 + +======================== +Expression: //s|p1 +Object is a Node Set : +Set contains 4 nodes: +1 ELEMENT s + ATTRIBUTE p + TEXT + content=root +2 ELEMENT p1 +3 ELEMENT s + ATTRIBUTE p + TEXT + content=p1 +4 ELEMENT s + ATTRIBUTE p + TEXT + content=p2 + +======================== +Expression: p1|//s +Object is a Node Set : +Set contains 4 nodes: +1 ELEMENT s + ATTRIBUTE p + TEXT + content=root +2 ELEMENT p1 +3 ELEMENT s + ATTRIBUTE p + TEXT + content=p1 +4 ELEMENT s + ATTRIBUTE p + TEXT + content=p2 diff --git a/result/XPath/tests/nodespat b/result/XPath/tests/nodespat new file mode 100644 index 0000000..1efd87f --- /dev/null +++ b/result/XPath/tests/nodespat @@ -0,0 +1,94 @@ + +======================== +Expression: /. +Object is a Node Set : +Set contains 1 nodes: +1 / + +======================== +Expression: //. +Object is a Node Set : +Set contains 12 nodes: +1 / +2 ELEMENT root +3 ELEMENT foo +4 TEXT + content=txt +5 COMMENT + content=hello +6 CDATA_SECTION + content=data +7 PI target + content=data +8 ELEMENT bar +9 TEXT + content=txt +10 COMMENT + content=hello +11 CDATA_SECTION + content=data +12 PI target + content=data + +======================== +Expression: /root//. +Object is a Node Set : +Set contains 11 nodes: +1 ELEMENT root +2 ELEMENT foo +3 TEXT + content=txt +4 COMMENT + content=hello +5 CDATA_SECTION + content=data +6 PI target + content=data +7 ELEMENT bar +8 TEXT + content=txt +9 COMMENT + content=hello +10 CDATA_SECTION + content=data +11 PI target + content=data + +======================== +Expression: //.//./././/. +Object is a Node Set : +Set contains 12 nodes: +1 / +2 ELEMENT root +3 ELEMENT foo +4 TEXT + content=txt +5 COMMENT + content=hello +6 CDATA_SECTION + content=data +7 PI target + content=data +8 ELEMENT bar +9 TEXT + content=txt +10 COMMENT + content=hello +11 CDATA_SECTION + content=data +12 PI target + content=data + +======================== +Expression: /root//././/bar//. +Object is a Node Set : +Set contains 5 nodes: +1 ELEMENT bar +2 TEXT + content=txt +3 COMMENT + content=hello +4 CDATA_SECTION + content=data +5 PI target + content=data diff --git a/result/XPath/tests/nssimple b/result/XPath/tests/nssimple new file mode 100644 index 0000000..8f0dd0e --- /dev/null +++ b/result/XPath/tests/nssimple @@ -0,0 +1,24 @@ + +======================== +Expression: /doc/elem/namespace::node()/.. +Object is a Node Set : +Set contains 1 nodes: +1 ELEMENT elem + namespace ns2 href=nsuri2 + +======================== +Expression: /doc/elem/namespace::*/self::node()[true()] +Object is a Node Set : +Set contains 3 nodes: +1 namespace xml href=http://www.w3.org/XML/1998/namespace +2 namespace ns1 href=nsuri1 +3 namespace ns2 href=nsuri2 + +======================== +Expression: //*[namespace::ns1] +Object is a Node Set : +Set contains 2 nodes: +1 ELEMENT doc + namespace ns1 href=nsuri1 +2 ELEMENT elem + namespace ns2 href=nsuri2 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..3c32d17 --- /dev/null +++ b/result/XPath/tests/simplebase @@ -0,0 +1,127 @@ + +======================== +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: /child::EXAMPLE/attribute::prop1/self::node() +Object is a Node Set : +Set contains 1 nodes: +1 ATTRIBUTE prop1 + TEXT + content=gnome is great + +======================== +Expression: /child::EXAMPLE/attribute::prop1/self::* +Object is a Node Set : +Set contains 0 nodes: + +======================== +Expression: /child::EXAMPLE/attribute::prop1/descendant-or-self::node() +Object is a Node Set : +Set contains 1 nodes: +1 ATTRIBUTE prop1 + TEXT + content=gnome is great + +======================== +Expression: /child::EXAMPLE/attribute::prop1/descendant-or-self::* +Object is a Node Set : +Set contains 0 nodes: + +======================== +Expression: /child::EXAMPLE/attribute::prop1/ancestor-or-self::node() +Object is a Node Set : +Set contains 3 nodes: +1 / +2 ELEMENT EXAMPLE + ATTRIBUTE prop1 + TEXT + content=gnome is great + ATTRIBUTE prop2 + TEXT + content=& linux too +3 ATTRIBUTE prop1 + TEXT + content=gnome is great + +======================== +Expression: /child::EXAMPLE/attribute::prop1/ancestor-or-self::* +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: /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 @@ + + diff --git a/result/att1.rde b/result/att1.rde new file mode 100644 index 0000000..9f92263 --- /dev/null +++ b/result/att1.rde @@ -0,0 +1 @@ +0 1 doc 1 0 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/att1.sax2 b/result/att1.sax2 new file mode 100644 index 0000000..76ba131 --- /dev/null +++ b/result/att1.sax2 @@ -0,0 +1,5 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElementNs(doc, NULL, NULL, 0, 1, 0, attr='to n...', 28) +SAX.endElementNs(doc, NULL, NULL) +SAX.endDocument() diff --git a/result/att10 b/result/att10 new file mode 100644 index 0000000..5b29bf8 --- /dev/null +++ b/result/att10 @@ -0,0 +1,18 @@ + + + + + + + + +]> + + + + + + + + diff --git a/result/att10.rde b/result/att10.rde new file mode 100644 index 0000000..2ca7905 --- /dev/null +++ b/result/att10.rde @@ -0,0 +1,23 @@ +0 10 doc 0 0 +0 1 doc 0 0 +1 14 #text 0 1 + +1 1 tst 1 0 +1 14 #text 0 1 + +1 1 tst 1 0 +1 14 #text 0 1 + +1 1 tst 1 0 +1 14 #text 0 1 + +1 1 tst 1 0 +1 14 #text 0 1 + +1 1 tst 1 0 +1 14 #text 0 1 + +1 1 tst 1 0 +1 14 #text 0 1 + +0 15 doc 0 0 diff --git a/result/att10.rdr b/result/att10.rdr new file mode 100644 index 0000000..2ca7905 --- /dev/null +++ b/result/att10.rdr @@ -0,0 +1,23 @@ +0 10 doc 0 0 +0 1 doc 0 0 +1 14 #text 0 1 + +1 1 tst 1 0 +1 14 #text 0 1 + +1 1 tst 1 0 +1 14 #text 0 1 + +1 1 tst 1 0 +1 14 #text 0 1 + +1 1 tst 1 0 +1 14 #text 0 1 + +1 1 tst 1 0 +1 14 #text 0 1 + +1 1 tst 1 0 +1 14 #text 0 1 + +0 15 doc 0 0 diff --git a/result/att10.sax b/result/att10.sax new file mode 100644 index 0000000..2df49a5 --- /dev/null +++ b/result/att10.sax @@ -0,0 +1,61 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.internalSubset(doc, , ) +SAX.elementDecl(doc, 4, ...) +SAX.elementDecl(tst, 3, ...) +SAX.attributeDecl(tst, a, 8, 3, NULL, ...) +SAX.attributeDecl(tst, b, 1, 3, NULL, ...) +SAX.entityDecl(d, 1, (null), (null), ) +SAX.getEntity(d) +SAX.entityDecl(a, 1, (null), (null), +) +SAX.getEntity(a) +SAX.entityDecl(da, 1, (null), (null), +) +SAX.getEntity(da) +SAX.externalSubset(doc, , ) +SAX.startElement(doc) +SAX.characters( +, 1) +SAX.startElement(tst, a=' xyz', b=' xyz') +SAX.endElement(tst) +SAX.characters( +, 1) +SAX.getEntity(d) +SAX.getEntity(d) +SAX.getEntity(a) +SAX.getEntity(a) +SAX.getEntity(da) +SAX.getEntity(d) +SAX.getEntity(d) +SAX.getEntity(a) +SAX.getEntity(a) +SAX.getEntity(da) +SAX.startElement(tst, a='&d;&d;A&a; &a;B&da;', b='&d;&d;A&a; &a;B&da;') +SAX.endElement(tst) +SAX.characters( +, 1) +SAX.startElement(tst, a=' A + +B +', b=' A + +B +') +SAX.endElement(tst) +SAX.characters( +, 1) +SAX.startElement(tst, a=' x y ', b=' x y ') +SAX.endElement(tst) +SAX.characters( +, 1) +SAX.startElement(tst, a=' a b ', b=' a b ') +SAX.endElement(tst) +SAX.characters( +, 1) +SAX.startElement(tst, a=' a b ', b=' a b ') +SAX.endElement(tst) +SAX.characters( +, 1) +SAX.endElement(doc) +SAX.endDocument() diff --git a/result/att10.sax2 b/result/att10.sax2 new file mode 100644 index 0000000..7c6f61d --- /dev/null +++ b/result/att10.sax2 @@ -0,0 +1,57 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.internalSubset(doc, , ) +SAX.elementDecl(doc, 4, ...) +SAX.elementDecl(tst, 3, ...) +SAX.attributeDecl(tst, a, 8, 3, NULL, ...) +SAX.attributeDecl(tst, b, 1, 3, NULL, ...) +SAX.entityDecl(d, 1, (null), (null), ) +SAX.getEntity(d) +SAX.entityDecl(a, 1, (null), (null), +) +SAX.getEntity(a) +SAX.entityDecl(da, 1, (null), (null), +) +SAX.getEntity(da) +SAX.externalSubset(doc, , ) +SAX.startElementNs(doc, NULL, NULL, 0, 0, 0) +SAX.characters( +, 1) +SAX.startElementNs(tst, NULL, NULL, 0, 2, 0, a='xyz"...', 3, b=' xy...', 5) +SAX.endElementNs(tst, NULL, NULL) +SAX.characters( +, 1) +SAX.getEntity(d) +SAX.getEntity(d) +SAX.getEntity(a) +SAX.getEntity(a) +SAX.getEntity(da) +SAX.getEntity(d) +SAX.getEntity(d) +SAX.getEntity(a) +SAX.getEntity(a) +SAX.getEntity(da) +SAX.startElementNs(tst, NULL, NULL, 0, 2, 0, a='&d;&...', 19, b='&d;&...', 19) +SAX.endElementNs(tst, NULL, NULL) +SAX.characters( +, 1) +SAX.startElementNs(tst, NULL, NULL, 0, 2, 0, a=' A +...', 8, b=' A +...', 8) +SAX.endElementNs(tst, NULL, NULL) +SAX.characters( +, 1) +SAX.startElementNs(tst, NULL, NULL, 0, 2, 0, a='x y...', 3, b=' x ...', 6) +SAX.endElementNs(tst, NULL, NULL) +SAX.characters( +, 1) +SAX.startElementNs(tst, NULL, NULL, 0, 2, 0, a='a b ...', 3, b=' a b...', 5) +SAX.endElementNs(tst, NULL, NULL) +SAX.characters( +, 1) +SAX.startElementNs(tst, NULL, NULL, 0, 2, 0, a='a b...', 3, b=' a ...', 8) +SAX.endElementNs(tst, NULL, NULL) +SAX.characters( +, 1) +SAX.endElementNs(doc, NULL, NULL) +SAX.endDocument() diff --git a/result/att11 b/result/att11 new file mode 100644 index 0000000..121b06d --- /dev/null +++ b/result/att11 @@ -0,0 +1,9 @@ + + + + + + +]> + diff --git a/result/att11.rde b/result/att11.rde new file mode 100644 index 0000000..cc83bea --- /dev/null +++ b/result/att11.rde @@ -0,0 +1,2 @@ +0 10 attributes 0 0 +0 1 attributes 1 0 diff --git a/result/att11.rdr b/result/att11.rdr new file mode 100644 index 0000000..cc83bea --- /dev/null +++ b/result/att11.rdr @@ -0,0 +1,2 @@ +0 10 attributes 0 0 +0 1 attributes 1 0 diff --git a/result/att11.sax b/result/att11.sax new file mode 100644 index 0000000..52d2861 --- /dev/null +++ b/result/att11.sax @@ -0,0 +1,19 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.internalSubset(attributes, , ) +SAX.elementDecl(attributes, 1, ...) +SAX.attributeDecl(attributes, nmtoken, 7, 3, NULL, ...) +SAX.attributeDecl(attributes, nmtokens, 8, 3, NULL, ...) +SAX.entityDecl(ent, 1, (null), (null), entity&recursive; ) +SAX.getEntity(ent) +SAX.entityDecl(recursive, 1, (null), (null), reference) +SAX.getEntity(recursive) +SAX.externalSubset(attributes, , ) +SAX.getEntity(ent) +SAX.getEntity(recursive) +SAX.getEntity(ent) +SAX.getEntity(ent) +SAX.startElement(attributes, nmtoken=' &ent; &ent; &ent; ', nmtokens=' Test + this normalization ') +SAX.endElement(attributes) +SAX.endDocument() diff --git a/result/att11.sax2 b/result/att11.sax2 new file mode 100644 index 0000000..3e8cfd9 --- /dev/null +++ b/result/att11.sax2 @@ -0,0 +1,18 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.internalSubset(attributes, , ) +SAX.elementDecl(attributes, 1, ...) +SAX.attributeDecl(attributes, nmtoken, 7, 3, NULL, ...) +SAX.attributeDecl(attributes, nmtokens, 8, 3, NULL, ...) +SAX.entityDecl(ent, 1, (null), (null), entity&recursive; ) +SAX.getEntity(ent) +SAX.entityDecl(recursive, 1, (null), (null), reference) +SAX.getEntity(recursive) +SAX.externalSubset(attributes, , ) +SAX.getEntity(ent) +SAX.getEntity(recursive) +SAX.getEntity(ent) +SAX.getEntity(ent) +SAX.startElementNs(attributes, NULL, NULL, 0, 2, 0, nmtoken='&ent...', 17, nmtokens='Test...', 25) +SAX.endElementNs(attributes, NULL, NULL) +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 @@ + + diff --git a/result/att2.rde b/result/att2.rde new file mode 100644 index 0000000..9f92263 --- /dev/null +++ b/result/att2.rde @@ -0,0 +1 @@ +0 1 doc 1 0 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/att2.sax2 b/result/att2.sax2 new file mode 100644 index 0000000..84aebcb --- /dev/null +++ b/result/att2.sax2 @@ -0,0 +1,5 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElementNs(doc, NULL, NULL, 0, 1, 0, attr='to n...', 27) +SAX.endElementNs(doc, NULL, NULL) +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 @@ + + diff --git a/result/att3.rde b/result/att3.rde new file mode 100644 index 0000000..d1e72cc --- /dev/null +++ b/result/att3.rde @@ -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.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/att3.sax2 b/result/att3.sax2 new file mode 100644 index 0000000..8e7ca86 --- /dev/null +++ b/result/att3.sax2 @@ -0,0 +1,8 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElementNs(select, NULL, NULL, 0, 1, 0, onclick='aaaa...', 17) +SAX.characters(f, 1) +SAX.characters( , 2) +SAX.characters(oo, 2) +SAX.endElementNs(select, NULL, NULL) +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 @@ + + + + + + + diff --git a/result/att4.rde b/result/att4.rde new file mode 100644 index 0000000..746643e --- /dev/null +++ b/result/att4.rde @@ -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.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/att4.sax2 b/result/att4.sax2 new file mode 100644 index 0000000..553148c --- /dev/null +++ b/result/att4.sax2 @@ -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.startElementNs(electroxml, NULL, NULL, 0, 1, 0, modified='2002...', 15) +SAX.characters( + , 2) +SAX.startElementNs(data, NULL, NULL, 0, 2, 0, from='2002...', 11, to='2002...', 11) +SAX.characters( + , 3) +SAX.startElementNs(select, NULL, NULL, 0, 0, 0) +SAX.characters( + , 4) +SAX.startElementNs(device, NULL, NULL, 0, 1, 0, serialnumb='E000...', 9) +SAX.characters( + , 5) +SAX.startElementNs(par, NULL, NULL, 0, 2, 0, memind='1134...', 6, h='3dc1...', 8) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='0" v...', 1, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e08"...', 3, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c32...', 4, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2a3c...', 4, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3835...', 4, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4645...', 4, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5455...', 4, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6265...', 4, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7075...', 4, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7e85...', 4, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8c96...', 4, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9aa5...', 4, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a8b6...', 4, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b6c5...', 4, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c4d7...', 4, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d30b...', 4, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e0f6...', 4, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ef06...', 4, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fd17...', 4, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10b2...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1193...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1274...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1355...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1436...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1518...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15f8...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16d9...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17ba...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='189b...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='197c...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a5d...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1b3e...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c1f...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d00...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1de1...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ec2...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fa3...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2084...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2165...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2246...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2327...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2408...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24e9...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25ca...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26ab...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='278c...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='286d...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='294e...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2a30...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2b10...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2bf1...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2cd2...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2db3...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2e94...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2f75...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3056...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3137...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3219...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='32f9...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='33da...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='34bb...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='359d...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='367d...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='375e...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3840...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3921...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3a01...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3ae2...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3bc3...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3ca4...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3d85...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3e66...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3f48...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4028...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4109...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='41ea...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='42cb...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='43ac...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='448d...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='456e...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='464f...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='480f...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='48f0...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='49d1...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4ab4...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4b95...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4c76...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4d57...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4e38...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4f19...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4ffa...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='50dd...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='51bc...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='529d...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='537e...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5460...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5540...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5621...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5702...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='57e3...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='58c4...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='59a7...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5a86...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5b67...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5c48...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5d29...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5e0a...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5eeb...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5fcc...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='60ad...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='618e...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='626f...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6350...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6431...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6512...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='65f3...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='66d4...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='67b5...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6896...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6978...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6a58...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6b39...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6c1a...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6cfb...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6ddc...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6ebd...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6f9e...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='707f...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7160...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7241...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7322...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7403...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='74e4...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='75c5...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='76a6...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7787...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7868...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7948...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7a29...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7b0a...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7beb...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7ccc...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7dad...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7e8f...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7f70...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8051...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8132...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8213...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='82f4...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='83d5...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='84b6...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8597...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8678...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8759...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='883a...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='891b...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='89fc...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8add...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8bbe...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8c9f...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8d80...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8e61...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8f42...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9023...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9104...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='91e5...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='92c6...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='93a8...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9488...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9569...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='964a...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='972b...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='980c...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='98ed...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='99ce...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9aaf...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9b90...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9c71...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9d52...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9e33...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9f14...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9ff5...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a0d6...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a1b7...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a298...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a379...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a45a...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a53b...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a61c...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a6fd...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a7e0...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a8c0...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a9a0...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='aa81...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ab62...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ac43...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ad24...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ae05...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='aee6...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='afc7...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b0a8...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b26a...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b34b...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b42c...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b50d...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b5ee...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b6cf...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b7b0...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b891...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b972...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ba53...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bb34...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bc15...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bcf6...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bdd8...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='beb8...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bf99...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c07a...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c15b...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c23c...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c31d...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c3fe...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c4df...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c5c0...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c6a1...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c782...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c863...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c944...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ca25...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='cb06...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='cbe7...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ccc8...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='cda9...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ce8a...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='cf6b...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d04c...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d12d...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d20e...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d2f0...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d3d0...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d4b1...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d592...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d673...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d754...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d835...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d916...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d9f7...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='dad8...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='dbb9...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='dc9a...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='dd7b...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='de5c...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='df3d...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e01d...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e0fe...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e1df...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e2c0...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e3a1...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e482...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e563...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e644...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e725...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e806...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e8e7...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e9c8...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='eaa9...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='eb8a...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ec6b...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ed4c...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ee2d...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ef0e...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='eff0...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f0d1...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f1b2...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f293...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f374...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f455...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f536...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f617...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f6f8...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f7d9...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f8ba...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f99b...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fa7c...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fb5d...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fc3e...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fd1f...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fe00...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fee1...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ffc2...', 5, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='100a...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1018...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1026...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1034...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1042...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1050...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='105e...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='106c...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='107a...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1088...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1096...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10a4...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10b2...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10c1...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10cf...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10dd...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10eb...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10f9...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1107...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1115...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1123...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1131...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='113f...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='114d...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='115b...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1169...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1177...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1185...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1193...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11a2...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11b0...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11be...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11cc...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11da...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11e8...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11f6...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1205...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1213...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1221...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='122f...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='123d...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='124b...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1259...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1267...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1276...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1283...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1291...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='129f...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12ad...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12bb...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12c9...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12d7...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12e5...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12f3...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1301...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='130f...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='131d...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='132b...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1339...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1347...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1355...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1364...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1372...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1380...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='138e...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='139c...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13aa...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13b8...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13c6...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13d4...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13e2...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13f0...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13fe...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='140c...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='141a...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1428...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1436...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1445...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1453...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1461...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='146f...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='147d...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='148b...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1499...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14a7...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14b5...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14c3...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14d1...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14df...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14ed...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14fb...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1509...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1517...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1526...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1534...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1542...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1550...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='155e...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='156c...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='157a...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1588...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1596...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15a4...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15b2...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15c0...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15ce...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15dc...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15ea...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15f8...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1607...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1615...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1623...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1631...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='163f...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='164d...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='165b...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1669...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1677...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1685...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1693...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16a1...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16af...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16bd...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16cb...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16d9...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16e8...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16f6...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1704...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1712...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1720...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='172e...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='173c...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='174a...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1758...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1766...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1774...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1782...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1790...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='179e...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17ac...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17ba...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17c9...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17d7...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17e5...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17f3...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1801...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='180f...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='181d...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='182b...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1839...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1847...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1855...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1863...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1871...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='187f...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='188d...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='189c...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18b8...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18c6...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18d4...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18e2...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18f0...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18fe...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='190c...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='191a...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1928...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1936...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1944...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1952...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1960...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='196e...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='197c...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='198b...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1999...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19b5...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19c3...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19d1...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19df...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19ed...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19ee...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19fb...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a09...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a17...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a25...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a33...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a41...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a4f...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a5e...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a6c...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a7a...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a88...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a96...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1aa4...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ab2...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ac0...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ace...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1adc...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1aea...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1af8...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1b06...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1b14...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c74...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c82...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c90...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c9e...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cac...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cba...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cc8...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cd6...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ce4...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cf2...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d01...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d0f...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d1d...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d2b...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d39...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d47...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d55...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d63...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d71...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d7f...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d8d...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d9b...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1da9...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1db7...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1dc5...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1dd3...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1de1...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1df0...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1dfe...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e0c...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e1a...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e28...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e36...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e44...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e52...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e60...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e6e...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e7c...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e8a...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e98...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ea6...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1eb4...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ec2...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ed1...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1edf...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1eed...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1efb...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f09...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f17...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f25...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f33...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f41...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f4f...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f5d...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f6b...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f79...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f87...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f95...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fa4...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fb2...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fc0...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fce...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fdc...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fea...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ff8...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2006...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2014...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2022...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2030...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='203e...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='204c...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='205a...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2068...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2076...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2084...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2093...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20a1...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20af...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20bd...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20cb...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20d9...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20e7...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20f5...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2103...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2111...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='211f...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='212d...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='213b...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2149...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2157...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2165...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2174...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2182...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2190...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='219e...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21ac...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21ba...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21c8...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21d6...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21e4...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21f2...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2200...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='220e...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='221c...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='222a...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2238...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2247...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2255...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2263...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2271...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='227f...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='228d...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='229b...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22a9...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22b7...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22c5...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22d3...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22e1...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22ef...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22fd...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='230b...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2319...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2327...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2336...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2344...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2352...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2360...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='236e...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='237c...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='238a...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2398...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23a6...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23b4...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23c2...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23d0...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23de...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23ec...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23fa...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2408...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2417...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2425...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2433...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2441...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='244f...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='246b...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2479...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2487...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2495...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24a3...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24b1...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24bf...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24cd...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24db...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24e9...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24f8...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2506...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2514...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2522...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2530...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='253e...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='254c...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='255a...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2568...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2576...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2584...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2592...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25a0...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25ae...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25bc...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25ca...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25d9...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25e7...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25f5...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2603...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2611...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='261f...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='262d...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='263b...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2649...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2657...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2665...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2673...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2681...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='268f...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='269d...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26ab...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26ba...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26c8...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26d6...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26e4...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26f2...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2700...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='270e...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='271c...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='272a...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2738...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2746...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2754...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2762...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2770...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='277e...', 6, v='55"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 5) +SAX.endElementNs(par, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(par, NULL, NULL, 0, 2, 0, memind='1693...', 8, h='3dc1...', 8) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='0" v...', 1, v='196....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e08"...', 3, v='199....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c32...', 4, v='200....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2a3c...', 4, v='201....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3835...', 4, v='199....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4645...', 4, v='197....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5455...', 4, v='193....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6265...', 4, v='197....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7075...', 4, v='195....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7e85...', 4, v='192....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8c96...', 4, v='195....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9aa5...', 4, v='195....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a8b6...', 4, v='195....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b6c5...', 4, v='197....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c4d7...', 4, v='222....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d30b...', 4, v='220....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e0f6...', 4, v='222....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ef06...', 4, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fd17...', 4, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10b2...', 5, v='221....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1193...', 5, v='222....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1274...', 5, v='222....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1355...', 5, v='220....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1436...', 5, v='220....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1518...', 5, v='220"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15f8...', 5, v='221....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16d9...', 5, v='220....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17ba...', 5, v='221....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='189b...', 5, v='220....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='197c...', 5, v='220....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a5d...', 5, v='219....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1b3e...', 5, v='219....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c1f...', 5, v='220....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d00...', 5, v='220....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1de1...', 5, v='220....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ec2...', 5, v='220....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fa3...', 5, v='220....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2084...', 5, v='220....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2165...', 5, v='220....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2246...', 5, v='220....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2327...', 5, v='220....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2408...', 5, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24e9...', 5, v='222"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25ca...', 5, v='221....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26ab...', 5, v='220....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='278c...', 5, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='286d...', 5, v='220....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='294e...', 5, v='218....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2a30...', 5, v='220"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2b10...', 5, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2bf1...', 5, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2cd2...', 5, v='218....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2db3...', 5, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2e94...', 5, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2f75...', 5, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3056...', 5, v='219....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3137...', 5, v='220....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3219...', 5, v='219....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='32f9...', 5, v='220....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='33da...', 5, v='220....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='34bb...', 5, v='219"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='359d...', 5, v='220....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='367d...', 5, v='219....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='375e...', 5, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3840...', 5, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3921...', 5, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3a01...', 5, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3ae2...', 5, v='220....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3bc3...', 5, v='220....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3ca4...', 5, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3d85...', 5, v='221....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3e66...', 5, v='220....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3f48...', 5, v='217....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4028...', 5, v='218....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4109...', 5, v='218....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='41ea...', 5, v='218....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='42cb...', 5, v='219....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='43ac...', 5, v='218....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='448d...', 5, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='456e...', 5, v='220....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='464f...', 5, v='222....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='480f...', 5, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='48f0...', 5, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='49d1...', 5, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4ab4...', 5, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4b95...', 5, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4c76...', 5, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4d57...', 5, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4e38...', 5, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4f19...', 5, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4ffa...', 5, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='50dd...', 5, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='51bc...', 5, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='529d...', 5, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='537e...', 5, v='220....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5460...', 5, v='218....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5540...', 5, v='219....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5621...', 5, v='219....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5702...', 5, v='219....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='57e3...', 5, v='219....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='58c4...', 5, v='220....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='59a7...', 5, v='220....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5a86...', 5, v='221....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5b67...', 5, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5c48...', 5, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5d29...', 5, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5e0a...', 5, v='222....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5eeb...', 5, v='224....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5fcc...', 5, v='223....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='60ad...', 5, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='618e...', 5, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='626f...', 5, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6350...', 5, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6431...', 5, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6512...', 5, v='222....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='65f3...', 5, v='222....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='66d4...', 5, v='220....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='67b5...', 5, v='220....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6896...', 5, v='220....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6978...', 5, v='220....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6a58...', 5, v='219....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6b39...', 5, v='219....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6c1a...', 5, v='219"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6cfb...', 5, v='218....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6ddc...', 5, v='220....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6ebd...', 5, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6f9e...', 5, v='221....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='707f...', 5, v='222....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7160...', 5, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7241...', 5, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7322...', 5, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7403...', 5, v='223....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='74e4...', 5, v='223....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='75c5...', 5, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='76a6...', 5, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7787...', 5, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7868...', 5, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7948...', 5, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7a29...', 5, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7b0a...', 5, v='222....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7beb...', 5, v='221"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7ccc...', 5, v='219....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7dad...', 5, v='219....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7e8f...', 5, v='220....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7f70...', 5, v='220....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8051...', 5, v='217....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8132...', 5, v='219"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8213...', 5, v='218....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='82f4...', 5, v='219....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='83d5...', 5, v='219....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='84b6...', 5, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8597...', 5, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8678...', 5, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8759...', 5, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='883a...', 5, v='223....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='891b...', 5, v='222"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='89fc...', 5, v='224....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8add...', 5, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8bbe...', 5, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8c9f...', 5, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8d80...', 5, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8e61...', 5, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8f42...', 5, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9023...', 5, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9104...', 5, v='220....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='91e5...', 5, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='92c6...', 5, v='219....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='93a8...', 5, v='219....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9488...', 5, v='219"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9569...', 5, v='218....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='964a...', 5, v='219....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='972b...', 5, v='219....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='980c...', 5, v='221"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='98ed...', 5, v='220....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='99ce...', 5, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9aaf...', 5, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9b90...', 5, v='225....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9c71...', 5, v='225"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9d52...', 5, v='222....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9e33...', 5, v='223....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9f14...', 5, v='224....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9ff5...', 5, v='223....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a0d6...', 5, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a1b7...', 5, v='195....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a298...', 5, v='190"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a379...', 5, v='122....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a45a...', 5, v='354....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a53b...', 5, v='333....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a61c...', 5, v='323....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a6fd...', 5, v='278....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a7e0...', 5, v='286....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a8c0...', 5, v='292....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a9a0...', 5, v='21.4...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='aa81...', 5, v='273....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ab62...', 5, v='272....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ac43...', 5, v='285....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ad24...', 5, v='28.5...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ae05...', 5, v='68.4...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='aee6...', 5, v='147....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='afc7...', 5, v='95.7...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b0a8...', 5, v='89.6...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b26a...', 5, v='88.3...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b34b...', 5, v='92.4...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b42c...', 5, v='149....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b50d...', 5, v='148....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b5ee...', 5, v='127....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b6cf...', 5, v='198....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b7b0...', 5, v='187....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b891...', 5, v='182....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b972...', 5, v='195....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ba53...', 5, v='203....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bb34...', 5, v='124....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bc15...', 5, v='159....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bcf6...', 5, v='230....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bdd8...', 5, v='79.8...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='beb8...', 5, v='51.3...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bf99...', 5, v='22.5...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c07a...', 5, v='323....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c15b...', 5, v='341....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c23c...', 5, v='46.4...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c31d...', 5, v='71.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c3fe...', 5, v='71.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c4df...', 5, v='63.4...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c5c0...', 5, v='76.4...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c6a1...', 5, v='58.4...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c782...', 5, v='92"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c863...', 5, v='79.6...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c944...', 5, v='63.1...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ca25...', 5, v='51.3...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='cb06...', 5, v='81.7...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='cbe7...', 5, v='205....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ccc8...', 5, v='96.1...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='cda9...', 5, v='95.7...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ce8a...', 5, v='96.7...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='cf6b...', 5, v='92.8...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d04c...', 5, v='91.4...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d12d...', 5, v='86.1...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d20e...', 5, v='270"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d2f0...', 5, v='270....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d3d0...', 5, v='296....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d4b1...', 5, v='306....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d592...', 5, v='331....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d673...', 5, v='13.7...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d754...', 5, v='46.4...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d835...', 5, v='262....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d916...', 5, v='166....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d9f7...', 5, v='143....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='dad8...', 5, v='127....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='dbb9...', 5, v='132....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='dc9a...', 5, v='128....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='dd7b...', 5, v='155....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='de5c...', 5, v='170....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='df3d...', 5, v='176....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e01d...', 5, v='176....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e0fe...', 5, v='168....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e1df...', 5, v='172....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e2c0...', 5, v='185....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e3a1...', 5, v='196....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e482...', 5, v='178....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e563...', 5, v='193....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e644...', 5, v='176....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e725...', 5, v='196....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e806...', 5, v='202....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e8e7...', 5, v='99.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e9c8...', 5, v='130....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='eaa9...', 5, v='132....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='eb8a...', 5, v='121....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ec6b...', 5, v='100....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ed4c...', 5, v='192....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ee2d...', 5, v='153....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ef0e...', 5, v='170....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='eff0...', 5, v='155....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f0d1...', 5, v='167....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f1b2...', 5, v='165....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f293...', 5, v='184....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f374...', 5, v='159....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f455...', 5, v='163....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f536...', 5, v='163....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f617...', 5, v='160....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f6f8...', 5, v='165"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f7d9...', 5, v='156....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f8ba...', 5, v='163....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f99b...', 5, v='162....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fa7c...', 5, v='154....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fb5d...', 5, v='157....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fc3e...', 5, v='197....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fd1f...', 5, v='203....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fe00...', 5, v='212....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fee1...', 5, v='185....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ffc2...', 5, v='187....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='100a...', 6, v='162"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1018...', 6, v='149....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1026...', 6, v='136....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1034...', 6, v='145....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1042...', 6, v='164....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1050...', 6, v='158....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='105e...', 6, v='163"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='106c...', 6, v='161....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='107a...', 6, v='168....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1088...', 6, v='168....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1096...', 6, v='165....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10a4...', 6, v='168....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10b2...', 6, v='163....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10c1...', 6, v='147....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10cf...', 6, v='163"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10dd...', 6, v='166....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10eb...', 6, v='177....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10f9...', 6, v='179....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1107...', 6, v='161"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1115...', 6, v='174....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1123...', 6, v='203....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1131...', 6, v='158....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='113f...', 6, v='172....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='114d...', 6, v='172....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='115b...', 6, v='168....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1169...', 6, v='138"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1177...', 6, v='135....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1185...', 6, v='157....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1193...', 6, v='160....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11a2...', 6, v='175....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11b0...', 6, v='184....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11be...', 6, v='188....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11cc...', 6, v='170"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11da...', 6, v='173....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11e8...', 6, v='167"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11f6...', 6, v='172....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1205...', 6, v='164....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1213...', 6, v='166....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1221...', 6, v='151....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='122f...', 6, v='158....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='123d...', 6, v='170....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='124b...', 6, v='185....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1259...', 6, v='160....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1267...', 6, v='188....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1276...', 6, v='207....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1283...', 6, v='214....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1291...', 6, v='213....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='129f...', 6, v='218....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12ad...', 6, v='210....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12bb...', 6, v='178....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12c9...', 6, v='162....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12d7...', 6, v='156....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12e5...', 6, v='153....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12f3...', 6, v='143....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1301...', 6, v='160....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='130f...', 6, v='153....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='131d...', 6, v='163....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='132b...', 6, v='168....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1339...', 6, v='169....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1347...', 6, v='139....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1355...', 6, v='142....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1364...', 6, v='122....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1372...', 6, v='125....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1380...', 6, v='110....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='138e...', 6, v='110....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='139c...', 6, v='190....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13aa...', 6, v='99.6...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13b8...', 6, v='209....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13c6...', 6, v='76.2...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13d4...', 6, v='61.5...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13e2...', 6, v='44.5...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13f0...', 6, v='44.2...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13fe...', 6, v='60.4...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='140c...', 6, v='64.6...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='141a...', 6, v='67.3...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1428...', 6, v='341....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1436...', 6, v='115....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1445...', 6, v='117....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1453...', 6, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1461...', 6, v='252....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='146f...', 6, v='261....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='147d...', 6, v='313....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='148b...', 6, v='311....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1499...', 6, v='292"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14a7...', 6, v='57.6...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14b5...', 6, v='151....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14c3...', 6, v='92.7...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14d1...', 6, v='93.4...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14df...', 6, v='100....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14ed...', 6, v='97.4...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14fb...', 6, v='184"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1509...', 6, v='289....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1517...', 6, v='274....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1526...', 6, v='39.8...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1534...', 6, v='6.5"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1542...', 6, v='355....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1550...', 6, v='19.4...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='155e...', 6, v='44.2...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='156c...', 6, v='61.4...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='157a...', 6, v='55.5...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1588...', 6, v='60.2...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1596...', 6, v='71.7...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15a4...', 6, v='66.3...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15b2...', 6, v='61.5...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15c0...', 6, v='38.5...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15ce...', 6, v='17.3...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15dc...', 6, v='35.6...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15ea...', 6, v='44.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15f8...', 6, v='71.4...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1607...', 6, v='166....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1615...', 6, v='125"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1623...', 6, v='176"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1631...', 6, v='195....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='163f...', 6, v='99.1...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='164d...', 6, v='90"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='165b...', 6, v='273....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1669...', 6, v='344....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1677...', 6, v='307....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1685...', 6, v='271....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1693...', 6, v='278....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16a1...', 6, v='291....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16af...', 6, v='52.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16bd...', 6, v='76.6...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16cb...', 6, v='87.6...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16d9...', 6, v='170....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16e8...', 6, v='174....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16f6...', 6, v='175....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1704...', 6, v='186....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1712...', 6, v='183....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1720...', 6, v='181....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='172e...', 6, v='173....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='173c...', 6, v='170....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='174a...', 6, v='165....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1758...', 6, v='163....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1766...', 6, v='161....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1774...', 6, v='165....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1782...', 6, v='170....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1790...', 6, v='173....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='179e...', 6, v='187....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17ac...', 6, v='201....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17ba...', 6, v='205....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17c9...', 6, v='204....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17d7...', 6, v='204....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17e5...', 6, v='208....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17f3...', 6, v='204....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1801...', 6, v='193....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='180f...', 6, v='186....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='181d...', 6, v='192....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='182b...', 6, v='194....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1839...', 6, v='184....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1847...', 6, v='184....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1855...', 6, v='185....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1863...', 6, v='194....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1871...', 6, v='192....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='187f...', 6, v='192....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='188d...', 6, v='190....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='189c...', 6, v='185....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18b8...', 6, v='170....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18c6...', 6, v='187....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18d4...', 6, v='191....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18e2...', 6, v='191....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18f0...', 6, v='197....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18fe...', 6, v='195....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='190c...', 6, v='189....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='191a...', 6, v='201....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1928...', 6, v='202....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1936...', 6, v='204....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1944...', 6, v='196....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1952...', 6, v='182....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1960...', 6, v='162....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='196e...', 6, v='187....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='197c...', 6, v='187....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='198b...', 6, v='179....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1999...', 6, v='181....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19b5...', 6, v='188....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19c3...', 6, v='186....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19d1...', 6, v='183....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19df...', 6, v='182....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19ed...', 6, v='176....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19ee...', 6, v='175....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19fb...', 6, v='178....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a09...', 6, v='223....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a17...', 6, v='228....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a25...', 6, v='229....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a33...', 6, v='216....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a41...', 6, v='226....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a4f...', 6, v='249....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a5e...', 6, v='245....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a6c...', 6, v='250....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a7a...', 6, v='251....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a88...', 6, v='252....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a96...', 6, v='259....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1aa4...', 6, v='254....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ab2...', 6, v='218....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ac0...', 6, v='228....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ace...', 6, v='227....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1adc...', 6, v='214....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1aea...', 6, v='218....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1af8...', 6, v='217"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1b06...', 6, v='231....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1b14...', 6, v='230....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c74...', 6, v='52"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c82...', 6, v='340....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c90...', 6, v='18.5...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c9e...', 6, v='357....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cac...', 6, v='344....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cba...', 6, v='338....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cc8...', 6, v='28.4...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cd6...', 6, v='21.8...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ce4...', 6, v='10.4...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cf2...', 6, v='343....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d01...', 6, v='342....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d0f...', 6, v='358....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d1d...', 6, v='353....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d2b...', 6, v='353....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d39...', 6, v='1.4"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d47...', 6, v='6.4"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d55...', 6, v='10.5...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d63...', 6, v='350....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d71...', 6, v='350....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d7f...', 6, v='357....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d8d...', 6, v='181....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d9b...', 6, v='184....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1da9...', 6, v='192....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1db7...', 6, v='193....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1dc5...', 6, v='194....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1dd3...', 6, v='190....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1de1...', 6, v='195"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1df0...', 6, v='195....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1dfe...', 6, v='195....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e0c...', 6, v='198....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e1a...', 6, v='198....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e28...', 6, v='199....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e36...', 6, v='200....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e44...', 6, v='202....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e52...', 6, v='200....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e60...', 6, v='203....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e6e...', 6, v='204....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e7c...', 6, v='188....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e8a...', 6, v='193....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e98...', 6, v='184....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ea6...', 6, v='190....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1eb4...', 6, v='188....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ec2...', 6, v='192....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ed1...', 6, v='185....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1edf...', 6, v='186....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1eed...', 6, v='182....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1efb...', 6, v='187....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f09...', 6, v='186....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f17...', 6, v='168....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f25...', 6, v='164....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f33...', 6, v='154....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f41...', 6, v='134....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f4f...', 6, v='154....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f5d...', 6, v='182....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f6b...', 6, v='188....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f79...', 6, v='176"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f87...', 6, v='206....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f95...', 6, v='216....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fa4...', 6, v='211....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fb2...', 6, v='210....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fc0...', 6, v='211....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fce...', 6, v='192....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fdc...', 6, v='185....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fea...', 6, v='176....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ff8...', 6, v='171....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2006...', 6, v='129....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2014...', 6, v='173....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2022...', 6, v='157....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2030...', 6, v='161....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='203e...', 6, v='163....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='204c...', 6, v='176....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='205a...', 6, v='166....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2068...', 6, v='161....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2076...', 6, v='159....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2084...', 6, v='177....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2093...', 6, v='183....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20a1...', 6, v='185....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20af...', 6, v='182....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20bd...', 6, v='189....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20cb...', 6, v='173....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20d9...', 6, v='179....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20e7...', 6, v='193....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20f5...', 6, v='202....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2103...', 6, v='197....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2111...', 6, v='186....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='211f...', 6, v='188....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='212d...', 6, v='178....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='213b...', 6, v='160....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2149...', 6, v='168....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2157...', 6, v='184"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2165...', 6, v='191....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2174...', 6, v='177....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2182...', 6, v='182....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2190...', 6, v='185....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='219e...', 6, v='176....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21ac...', 6, v='170....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21ba...', 6, v='169....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21c8...', 6, v='159....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21d6...', 6, v='190....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21e4...', 6, v='173....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21f2...', 6, v='175....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2200...', 6, v='187....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='220e...', 6, v='188....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='221c...', 6, v='160"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='222a...', 6, v='175....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2238...', 6, v='192....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2247...', 6, v='200....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2255...', 6, v='116....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2263...', 6, v='166....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2271...', 6, v='162....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='227f...', 6, v='130....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='228d...', 6, v='122"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='229b...', 6, v='193....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22a9...', 6, v='183....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22b7...', 6, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22c5...', 6, v='157....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22d3...', 6, v='142....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22e1...', 6, v='145....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22ef...', 6, v='182....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22fd...', 6, v='182....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='230b...', 6, v='173....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2319...', 6, v='188....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2327...', 6, v='179....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2336...', 6, v='169....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2344...', 6, v='164....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2352...', 6, v='170....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2360...', 6, v='178....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='236e...', 6, v='158"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='237c...', 6, v='161....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='238a...', 6, v='175....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2398...', 6, v='169....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23a6...', 6, v='185....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23b4...', 6, v='191....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23c2...', 6, v='176....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23d0...', 6, v='167....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23de...', 6, v='154....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23ec...', 6, v='167"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23fa...', 6, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2408...', 6, v='166....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2417...', 6, v='146....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2425...', 6, v='155....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2433...', 6, v='157....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2441...', 6, v='189....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='244f...', 6, v='187....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='246b...', 6, v='186....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2479...', 6, v='179....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2487...', 6, v='139....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2495...', 6, v='161....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24a3...', 6, v='172"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24b1...', 6, v='189....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24bf...', 6, v='187....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24cd...', 6, v='188....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24db...', 6, v='186....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24e9...', 6, v='198....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24f8...', 6, v='193....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2506...', 6, v='195....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2514...', 6, v='198....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2522...', 6, v='180....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2530...', 6, v='180"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='253e...', 6, v='161....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='254c...', 6, v='165....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='255a...', 6, v='165....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2568...', 6, v='160....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2576...', 6, v='147....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2584...', 6, v='196....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2592...', 6, v='195....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25a0...', 6, v='186....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25ae...', 6, v='178....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25bc...', 6, v='177....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25ca...', 6, v='172"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25d9...', 6, v='156....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25e7...', 6, v='154....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25f5...', 6, v='157"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2603...', 6, v='179....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2611...', 6, v='166"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='261f...', 6, v='172....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='262d...', 6, v='196....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='263b...', 6, v='179....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2649...', 6, v='195....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2657...', 6, v='202....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2665...', 6, v='209....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2673...', 6, v='204....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2681...', 6, v='199....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='268f...', 6, v='186....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='269d...', 6, v='175....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26ab...', 6, v='170....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26ba...', 6, v='159....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26c8...', 6, v='156....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26d6...', 6, v='137....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26e4...', 6, v='146"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26f2...', 6, v='139....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2700...', 6, v='143....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='270e...', 6, v='137....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='271c...', 6, v='177....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='272a...', 6, v='186....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2738...', 6, v='184....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2746...', 6, v='188....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2754...', 6, v='191....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2762...', 6, v='146....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2770...', 6, v='161....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='277e...', 6, v='188....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 5) +SAX.endElementNs(par, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(par, NULL, NULL, 0, 2, 0, memind='1069...', 8, h='3dc1...', 8) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='0" v...', 1, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e08"...', 3, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c32...', 4, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2a3c...', 4, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3835...', 4, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4645...', 4, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5455...', 4, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6265...', 4, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7075...', 4, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7e85...', 4, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8c96...', 4, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9aa5...', 4, v='50.1...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a8b6...', 4, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b6c5...', 4, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c4d7...', 4, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d30b...', 4, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e0f6...', 4, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ef06...', 4, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fd17...', 4, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10b2...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1193...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1274...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1355...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1436...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1518...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15f8...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16d9...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17ba...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='189b...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='197c...', 5, v='50.1...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a5d...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1b3e...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c1f...', 5, v='50.1...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d00...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1de1...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ec2...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fa3...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2084...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2165...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2246...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2327...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2408...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24e9...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25ca...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26ab...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='278c...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='286d...', 5, v='50.1...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='294e...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2a30...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2b10...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2bf1...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2cd2...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2db3...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2e94...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2f75...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3056...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3137...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3219...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='32f9...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='33da...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='34bb...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='359d...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='367d...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='375e...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3840...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3921...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3a01...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3ae2...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3bc3...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3ca4...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3d85...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3e66...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3f48...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4028...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4109...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='41ea...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='42cb...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='43ac...', 5, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='448d...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='456e...', 5, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='464f...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='480f...', 5, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='48f0...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='49d1...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4ab4...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4b95...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4c76...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4d57...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4e38...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4f19...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4ffa...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='50dd...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='51bc...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='529d...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='537e...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5460...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5540...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5621...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5702...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='57e3...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='58c4...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='59a7...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5a86...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5b67...', 5, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5c48...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5d29...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5e0a...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5eeb...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5fcc...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='60ad...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='618e...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='626f...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6350...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6431...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6512...', 5, v='50.1...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='65f3...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='66d4...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='67b5...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6896...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6978...', 5, v='50.1...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6a58...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6b39...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6c1a...', 5, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6cfb...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6ddc...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6ebd...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6f9e...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='707f...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7160...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7241...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7322...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7403...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='74e4...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='75c5...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='76a6...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7787...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7868...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7948...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7a29...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7b0a...', 5, v='50.1...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7beb...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7ccc...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7dad...', 5, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7e8f...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7f70...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8051...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8132...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8213...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='82f4...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='83d5...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='84b6...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8597...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8678...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8759...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='883a...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='891b...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='89fc...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8add...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8bbe...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8c9f...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8d80...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8e61...', 5, v='50.1...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8f42...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9023...', 5, v='50.1...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9104...', 5, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='91e5...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='92c6...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='93a8...', 5, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9488...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9569...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='964a...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='972b...', 5, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='980c...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='98ed...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='99ce...', 5, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9aaf...', 5, v='50.1...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9b90...', 5, v='50.1...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9c71...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9d52...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9e33...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9f14...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9ff5...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a0d6...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a1b7...', 5, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a298...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a379...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a45a...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a53b...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a61c...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a6fd...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a7e0...', 5, v='50.1...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a8c0...', 5, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a9a0...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='aa81...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ab62...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ac43...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ad24...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ae05...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='aee6...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='afc7...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b0a8...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b26a...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b34b...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b42c...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b50d...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b5ee...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b6cf...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b7b0...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b891...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b972...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ba53...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bb34...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bc15...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bcf6...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bdd8...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='beb8...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bf99...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c07a...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c15b...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c23c...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c31d...', 5, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c3fe...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c4df...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c5c0...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c6a1...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c782...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c863...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c944...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ca25...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='cb06...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='cbe7...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ccc8...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='cda9...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ce8a...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='cf6b...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d04c...', 5, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d12d...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d20e...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d2f0...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d3d0...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d4b1...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d592...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d673...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d754...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d835...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d916...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d9f7...', 5, v='50.1...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='dad8...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='dbb9...', 5, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='dc9a...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='dd7b...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='de5c...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='df3d...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e01d...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e0fe...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e1df...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e2c0...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e3a1...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e482...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e563...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e644...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e725...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e806...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e8e7...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e9c8...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='eaa9...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='eb8a...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ec6b...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ed4c...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ee2d...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ef0e...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='eff0...', 5, v='50.1...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f0d1...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f1b2...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f293...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f374...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f455...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f536...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f617...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f6f8...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f7d9...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f8ba...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f99b...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fa7c...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fb5d...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fc3e...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fd1f...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fe00...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fee1...', 5, v='50.1...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ffc2...', 5, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='100a...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1018...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1026...', 6, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1034...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1042...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1050...', 6, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='105e...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='106c...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='107a...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1088...', 6, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1096...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10a4...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10b2...', 6, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10c1...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10cf...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10dd...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10eb...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10f9...', 6, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1107...', 6, v='50.1...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1115...', 6, v='50.1...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1123...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1131...', 6, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='113f...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='114d...', 6, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='115b...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1169...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1177...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1185...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1193...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11a2...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11b0...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11be...', 6, v='50.1...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11cc...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11da...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11e8...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11f6...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1205...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1213...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1221...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='122f...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='123d...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='124b...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1259...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1267...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1276...', 6, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1283...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1291...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='129f...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12ad...', 6, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12bb...', 6, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12c9...', 6, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12d7...', 6, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12e5...', 6, v='50.1...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12f3...', 6, v='50.1...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1301...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='130f...', 6, v='50.1...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='131d...', 6, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='132b...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1339...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1347...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1355...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1364...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1372...', 6, v='50.1...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1380...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='138e...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='139c...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13aa...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13b8...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13c6...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13d4...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13e2...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13f0...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13fe...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='140c...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='141a...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1428...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1436...', 6, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1445...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1453...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1461...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='146f...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='147d...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='148b...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1499...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14a7...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14b5...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14c3...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14d1...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14df...', 6, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14ed...', 6, v='50.1...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14fb...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1509...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1517...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1526...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1534...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1542...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1550...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='155e...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='156c...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='157a...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1588...', 6, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1596...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15a4...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15b2...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15c0...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15ce...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15dc...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15ea...', 6, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15f8...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1607...', 6, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1615...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1623...', 6, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1631...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='163f...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='164d...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='165b...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1669...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1677...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1685...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1693...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16a1...', 6, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16af...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16bd...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16cb...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16d9...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16e8...', 6, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16f6...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1704...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1712...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1720...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='172e...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='173c...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='174a...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1758...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1766...', 6, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1774...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1782...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1790...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='179e...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17ac...', 6, v='50.1...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17ba...', 6, v='50.1...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17c9...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17d7...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17e5...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17f3...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1801...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='180f...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='181d...', 6, v='50.1...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='182b...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1839...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1847...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1855...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1863...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1871...', 6, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='187f...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='188d...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='189c...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18b8...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18c6...', 6, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18d4...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18e2...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18f0...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18fe...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='190c...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='191a...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1928...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1936...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1944...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1952...', 6, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1960...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='196e...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='197c...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='198b...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1999...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19b5...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19c3...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19d1...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19df...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19ed...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19ee...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19fb...', 6, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a09...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a17...', 6, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a25...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a33...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a41...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a4f...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a5e...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a6c...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a7a...', 6, v='50.1...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a88...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a96...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1aa4...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ab2...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ac0...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ace...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1adc...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1aea...', 6, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1af8...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1b06...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1b14...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c74...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c82...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c90...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c9e...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cac...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cba...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cc8...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cd6...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ce4...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cf2...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d01...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d0f...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d1d...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d2b...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d39...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d47...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d55...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d63...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d71...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d7f...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d8d...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d9b...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1da9...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1db7...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1dc5...', 6, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1dd3...', 6, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1de1...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1df0...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1dfe...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e0c...', 6, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e1a...', 6, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e28...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e36...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e44...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e52...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e60...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e6e...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e7c...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e8a...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e98...', 6, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ea6...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1eb4...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ec2...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ed1...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1edf...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1eed...', 6, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1efb...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f09...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f17...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f25...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f33...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f41...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f4f...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f5d...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f6b...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f79...', 6, v='50.1...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f87...', 6, v='50.1...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f95...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fa4...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fb2...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fc0...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fce...', 6, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fdc...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fea...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ff8...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2006...', 6, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2014...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2022...', 6, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2030...', 6, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='203e...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='204c...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='205a...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2068...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2076...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2084...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2093...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20a1...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20af...', 6, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20bd...', 6, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20cb...', 6, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20d9...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20e7...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20f5...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2103...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2111...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='211f...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='212d...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='213b...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2149...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2157...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2165...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2174...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2182...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2190...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='219e...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21ac...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21ba...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21c8...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21d6...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21e4...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21f2...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2200...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='220e...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='221c...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='222a...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2238...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2247...', 6, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2255...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2263...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2271...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='227f...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='228d...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='229b...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22a9...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22b7...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22c5...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22d3...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22e1...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22ef...', 6, v='50.1...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22fd...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='230b...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2319...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2327...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2336...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2344...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2352...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2360...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='236e...', 6, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='237c...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='238a...', 6, v='50.1...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2398...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23a6...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23b4...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23c2...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23d0...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23de...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23ec...', 6, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23fa...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2408...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2417...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2425...', 6, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2433...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2441...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='244f...', 6, v='50.1...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='246b...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2479...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2487...', 6, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2495...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24a3...', 6, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24b1...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24bf...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24cd...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24db...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24e9...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24f8...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2506...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2514...', 6, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2522...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2530...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='253e...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='254c...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='255a...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2568...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2576...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2584...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2592...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25a0...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25ae...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25bc...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25ca...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25d9...', 6, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25e7...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25f5...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2603...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2611...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='261f...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='262d...', 6, v='50.1...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='263b...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2649...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2657...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2665...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2673...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2681...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='268f...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='269d...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26ab...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26ba...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26c8...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26d6...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26e4...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26f2...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2700...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='270e...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='271c...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='272a...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2738...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2746...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2754...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2762...', 6, v='49.9...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2770...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='277e...', 6, v='50"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 5) +SAX.endElementNs(par, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(par, NULL, NULL, 0, 2, 0, memind='8612...', 4, h='3dc1...', 8) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='0" v...', 1, v='25.0...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e08"...', 3, v='24.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c32...', 4, v='23.4...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2a3c...', 4, v='23.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3835...', 4, v='22.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4645...', 4, v='22.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5455...', 4, v='26.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6265...', 4, v='28.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7075...', 4, v='34.4...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7e85...', 4, v='40.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8c96...', 4, v='40.5...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9aa5...', 4, v='38.6...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a8b6...', 4, v='35.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b6c5...', 4, v='34.1...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c4d7...', 4, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d30b...', 4, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e0f6...', 4, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ef06...', 4, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fd17...', 4, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10b2...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1193...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1274...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1355...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1436...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1518...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15f8...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16d9...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17ba...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='189b...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='197c...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a5d...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1b3e...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c1f...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d00...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1de1...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ec2...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fa3...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2084...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2165...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2246...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2327...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2408...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24e9...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25ca...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26ab...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='278c...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='286d...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='294e...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2a30...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2b10...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2bf1...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2cd2...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2db3...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2e94...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2f75...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3056...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3137...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3219...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='32f9...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='33da...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='34bb...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='359d...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='367d...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='375e...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3840...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3921...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3a01...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3ae2...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3bc3...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3ca4...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3d85...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3e66...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3f48...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4028...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4109...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='41ea...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='42cb...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='43ac...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='448d...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='456e...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='464f...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='480f...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='48f0...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='49d1...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4ab4...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4b95...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4c76...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4d57...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4e38...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4f19...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4ffa...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='50dd...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='51bc...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='529d...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='537e...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5460...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5540...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5621...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5702...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='57e3...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='58c4...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='59a7...', 5, v='0.04...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5a86...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5b67...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5c48...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5d29...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5e0a...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5eeb...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5fcc...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='60ad...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='618e...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='626f...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6350...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6431...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6512...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='65f3...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='66d4...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='67b5...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6896...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6978...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6a58...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6b39...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6c1a...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6cfb...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6ddc...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6ebd...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6f9e...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='707f...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7160...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7241...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7322...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7403...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='74e4...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='75c5...', 5, v='0.04...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='76a6...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7787...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7868...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7948...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7a29...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7b0a...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7beb...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7ccc...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7dad...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7e8f...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7f70...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8051...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8132...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8213...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='82f4...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='83d5...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='84b6...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8597...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8678...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8759...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='883a...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='891b...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='89fc...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8add...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8bbe...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8c9f...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8d80...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8e61...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8f42...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9023...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9104...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='91e5...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='92c6...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='93a8...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9488...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9569...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='964a...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='972b...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='980c...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='98ed...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='99ce...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9aaf...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9b90...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9c71...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9d52...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9e33...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9f14...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9ff5...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a0d6...', 5, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a1b7...', 5, v='36.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a298...', 5, v='17.6...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a379...', 5, v='8.35...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a45a...', 5, v='5.95...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a53b...', 5, v='7.13...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a61c...', 5, v='8.64...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a6fd...', 5, v='6.42...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a7e0...', 5, v='10.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a8c0...', 5, v='14.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a9a0...', 5, v='3.54...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='aa81...', 5, v='3.8"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ab62...', 5, v='6.09...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ac43...', 5, v='5.20...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ad24...', 5, v='7.52...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ae05...', 5, v='11.3...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='aee6...', 5, v='0.95...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='afc7...', 5, v='5.77...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b0a8...', 5, v='21.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b26a...', 5, v='22.6...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b34b...', 5, v='19.3...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b42c...', 5, v='1.26...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b50d...', 5, v='3.13...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b5ee...', 5, v='6.09...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b6cf...', 5, v='7.27...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b7b0...', 5, v='9.37...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b891...', 5, v='7.71...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b972...', 5, v='8.18...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ba53...', 5, v='9.84...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bb34...', 5, v='5.25...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bc15...', 5, v='2.64...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bcf6...', 5, v='7.17...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bdd8...', 5, v='19.6...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='beb8...', 5, v='4.70...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bf99...', 5, v='5.01...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c07a...', 5, v='5.02...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c15b...', 5, v='4.40...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c23c...', 5, v='5.16...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c31d...', 5, v='10.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c3fe...', 5, v='5.09...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c4df...', 5, v='10.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c5c0...', 5, v='4.08...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c6a1...', 5, v='5.22...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c782...', 5, v='6.62...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c863...', 5, v='2.57...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c944...', 5, v='3.76...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ca25...', 5, v='2.92...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='cb06...', 5, v='4.23...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='cbe7...', 5, v='2.44...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ccc8...', 5, v='10.6...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='cda9...', 5, v='15.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ce8a...', 5, v='10.4...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='cf6b...', 5, v='14.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d04c...', 5, v='11.3...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d12d...', 5, v='7.26...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d20e...', 5, v='3.27...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d2f0...', 5, v='12.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d3d0...', 5, v='8.86...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d4b1...', 5, v='8.42...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d592...', 5, v='7.50...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d673...', 5, v='7.80...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d754...', 5, v='10.9...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d835...', 5, v='5.74...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d916...', 5, v='2.08...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d9f7...', 5, v='7.75...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='dad8...', 5, v='16.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='dbb9...', 5, v='18.4...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='dc9a...', 5, v='18.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='dd7b...', 5, v='16.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='de5c...', 5, v='13.6...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='df3d...', 5, v='14.4...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e01d...', 5, v='14.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e0fe...', 5, v='14.3...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e1df...', 5, v='15.5...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e2c0...', 5, v='20.0...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e3a1...', 5, v='20.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e482...', 5, v='16.3...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e563...', 5, v='17.0...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e644...', 5, v='11.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e725...', 5, v='10.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e806...', 5, v='8.73...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e8e7...', 5, v='14.3...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e9c8...', 5, v='4.86...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='eaa9...', 5, v='4.14...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='eb8a...', 5, v='6.01...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ec6b...', 5, v='14.6...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ed4c...', 5, v='9.98...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ee2d...', 5, v='11.9...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ef0e...', 5, v='15.4...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='eff0...', 5, v='22.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f0d1...', 5, v='22.4...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f1b2...', 5, v='24.1...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f293...', 5, v='23.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f374...', 5, v='23.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f455...', 5, v='24.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f536...', 5, v='25.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f617...', 5, v='24.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f6f8...', 5, v='25.3...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f7d9...', 5, v='23.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f8ba...', 5, v='19.4...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f99b...', 5, v='19.2...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fa7c...', 5, v='16.1...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fb5d...', 5, v='16.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fc3e...', 5, v='16.6...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fd1f...', 5, v='14.2...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fe00...', 5, v='14.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fee1...', 5, v='9.55...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ffc2...', 5, v='9.07...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='100a...', 6, v='8.33...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1018...', 6, v='9.77...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1026...', 6, v='14.3...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1034...', 6, v='16.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1042...', 6, v='19.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1050...', 6, v='23.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='105e...', 6, v='23.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='106c...', 6, v='25.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='107a...', 6, v='21.5...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1088...', 6, v='19.6...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1096...', 6, v='21.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10a4...', 6, v='21.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10b2...', 6, v='22.3...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10c1...', 6, v='25.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10cf...', 6, v='23.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10dd...', 6, v='20.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10eb...', 6, v='22.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10f9...', 6, v='18.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1107...', 6, v='16.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1115...', 6, v='13.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1123...', 6, v='13.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1131...', 6, v='8.71...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='113f...', 6, v='8.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='114d...', 6, v='8.19...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='115b...', 6, v='8.30...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1169...', 6, v='10.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1177...', 6, v='14.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1185...', 6, v='15.6...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1193...', 6, v='19.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11a2...', 6, v='23.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11b0...', 6, v='20.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11be...', 6, v='26.0...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11cc...', 6, v='21.4...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11da...', 6, v='21.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11e8...', 6, v='22.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11f6...', 6, v='19.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1205...', 6, v='0.01...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1213...', 6, v='0.02...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1221...', 6, v='0.02...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='122f...', 6, v='0.01...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='123d...', 6, v='0.01...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='124b...', 6, v='0.01...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1259...', 6, v='0.01...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1267...', 6, v='0.01...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1276...', 6, v='0.01...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1283...', 6, v='0.01...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1291...', 6, v='0.01...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='129f...', 6, v='0.01...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12ad...', 6, v='0.00...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12bb...', 6, v='0.00...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12c9...', 6, v='0.00...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12d7...', 6, v='0.01...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12e5...', 6, v='0.01...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12f3...', 6, v='0.01...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1301...', 6, v='0.01...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='130f...', 6, v='0.01...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='131d...', 6, v='0.01...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='132b...', 6, v='0.01...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1339...', 6, v='0.27...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1347...', 6, v='0.09...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1355...', 6, v='0.14...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1364...', 6, v='0.20...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1372...', 6, v='0.21...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1380...', 6, v='0.21...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='138e...', 6, v='0.21...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='139c...', 6, v='0.07...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13aa...', 6, v='0.05...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13b8...', 6, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13c6...', 6, v='0.44...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13d4...', 6, v='0.21...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13e2...', 6, v='0.16...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13f0...', 6, v='0.15...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13fe...', 6, v='0.23...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='140c...', 6, v='0.33...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='141a...', 6, v='0.21...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1428...', 6, v='0.04...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1436...', 6, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1445...', 6, v='0.02...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1453...', 6, v='0.02...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1461...', 6, v='0.05...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='146f...', 6, v='0.14...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='147d...', 6, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='148b...', 6, v='0.08...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1499...', 6, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14a7...', 6, v='0.11...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14b5...', 6, v='0.05...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14c3...', 6, v='0.23...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14d1...', 6, v='0.20...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14df...', 6, v='0.16...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14ed...', 6, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14fb...', 6, v='0.02...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1509...', 6, v='0.07...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1517...', 6, v='0.15...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1526...', 6, v='0.18...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1534...', 6, v='0.14...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1542...', 6, v='0.15...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1550...', 6, v='0.16...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='155e...', 6, v='0.21...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='156c...', 6, v='0.30...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='157a...', 6, v='0.16...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1588...', 6, v='0.14...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1596...', 6, v='0.25...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15a4...', 6, v='0.21...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15b2...', 6, v='0.19...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15c0...', 6, v='0.11...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15ce...', 6, v='0.11...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15dc...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15ea...', 6, v='0.11...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15f8...', 6, v='0.30...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1607...', 6, v='0.03...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1615...', 6, v='0.06...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1623...', 6, v='0.04...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1631...', 6, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='163f...', 6, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='164d...', 6, v='0.02...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='165b...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1669...', 6, v='0.09...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1677...', 6, v='0.14...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1685...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1693...', 6, v='0.09...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16a1...', 6, v='0.07...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16af...', 6, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16bd...', 6, v='0.17...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16cb...', 6, v='0.21...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16d9...', 6, v='0.08...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16e8...', 6, v='0.60...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16f6...', 6, v='0.67...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1704...', 6, v='0.72...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1712...', 6, v='0.47...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1720...', 6, v='0.47...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='172e...', 6, v='0.49...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='173c...', 6, v='0.49...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='174a...', 6, v='0.57...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1758...', 6, v='0.62...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1766...', 6, v='35.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1774...', 6, v='33.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1782...', 6, v='35.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1790...', 6, v='32.4...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='179e...', 6, v='28.4...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17ac...', 6, v='29.2...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17ba...', 6, v='30.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17c9...', 6, v='28.0...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17d7...', 6, v='27.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17e5...', 6, v='28.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17f3...', 6, v='25.5...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1801...', 6, v='25.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='180f...', 6, v='30.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='181d...', 6, v='32.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='182b...', 6, v='38.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1839...', 6, v='64.3...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1847...', 6, v='63.5...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1855...', 6, v='60.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1863...', 6, v='57.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1871...', 6, v='59.4...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='187f...', 6, v='56.6...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='188d...', 6, v='60.5...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='189c...', 6, v='56.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18b8...', 6, v='37.5...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18c6...', 6, v='40.1...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18d4...', 6, v='38.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18e2...', 6, v='32.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18f0...', 6, v='30.6...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18fe...', 6, v='26.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='190c...', 6, v='21.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='191a...', 6, v='21.6...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1928...', 6, v='21.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1936...', 6, v='20.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1944...', 6, v='19.5...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1952...', 6, v='20.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1960...', 6, v='25.6...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='196e...', 6, v='29.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='197c...', 6, v='31.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='198b...', 6, v='28.4...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1999...', 6, v='32.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19b5...', 6, v='32.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19c3...', 6, v='29.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19d1...', 6, v='29.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19df...', 6, v='29.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19ed...', 6, v='29.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19ee...', 6, v='29.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19fb...', 6, v='10.4...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a09...', 6, v='18.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a17...', 6, v='23.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a25...', 6, v='25.8...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a33...', 6, v='13.6...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a41...', 6, v='15.6...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a4f...', 6, v='22.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a5e...', 6, v='20.5...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a6c...', 6, v='14.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a7a...', 6, v='17.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a88...', 6, v='18.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a96...', 6, v='14.8...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1aa4...', 6, v='11.3...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ab2...', 6, v='6.40...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ac0...', 6, v='13.3...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ace...', 6, v='18.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1adc...', 6, v='16.6...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1aea...', 6, v='16.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1af8...', 6, v='17.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1b06...', 6, v='16.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1b14...', 6, v='16.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c74...', 6, v='4.33...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c82...', 6, v='4.33...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c90...', 6, v='21.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c9e...', 6, v='20.8...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cac...', 6, v='22.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cba...', 6, v='22.6...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cc8...', 6, v='34.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cd6...', 6, v='33.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ce4...', 6, v='32.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cf2...', 6, v='33.0...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d01...', 6, v='34.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d0f...', 6, v='36.5...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d1d...', 6, v='36.6...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d2b...', 6, v='36.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d39...', 6, v='37.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d47...', 6, v='37.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d55...', 6, v='37.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d63...', 6, v='32.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d71...', 6, v='31.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d7f...', 6, v='31.3...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d8d...', 6, v='15.3...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d9b...', 6, v='17.6...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1da9...', 6, v='17.6...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1db7...', 6, v='16.5...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1dc5...', 6, v='17.6...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1dd3...', 6, v='18.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1de1...', 6, v='32.3...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1df0...', 6, v='37.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1dfe...', 6, v='36.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e0c...', 6, v='37.6...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e1a...', 6, v='37.4...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e28...', 6, v='35.9...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e36...', 6, v='34.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e44...', 6, v='31.4...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e52...', 6, v='27.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e60...', 6, v='27.7...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e6e...', 6, v='27.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e7c...', 6, v='9.65...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e8a...', 6, v='8.98...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e98...', 6, v='8.87...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ea6...', 6, v='11.5...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1eb4...', 6, v='11.3...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ec2...', 6, v='13.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ed1...', 6, v='12.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1edf...', 6, v='13.5...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1eed...', 6, v='12.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1efb...', 6, v='12.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f09...', 6, v='12.3...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f17...', 6, v='11.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f25...', 6, v='11.3...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f33...', 6, v='13.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f41...', 6, v='20.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f4f...', 6, v='17.3...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f5d...', 6, v='17.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f6b...', 6, v='17.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f79...', 6, v='15.6...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f87...', 6, v='18.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f95...', 6, v='19.6...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fa4...', 6, v='15.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fb2...', 6, v='14.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fc0...', 6, v='14.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fce...', 6, v='10.4...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fdc...', 6, v='10.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fea...', 6, v='10.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ff8...', 6, v='12.4...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2006...', 6, v='18.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2014...', 6, v='17.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2022...', 6, v='24.4...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2030...', 6, v='27.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='203e...', 6, v='31.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='204c...', 6, v='28.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='205a...', 6, v='26.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2068...', 6, v='27.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2076...', 6, v='31.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2084...', 6, v='30.6...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2093...', 6, v='33.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20a1...', 6, v='31.5...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20af...', 6, v='27.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20bd...', 6, v='26.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20cb...', 6, v='22.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20d9...', 6, v='21.1...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20e7...', 6, v='20.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20f5...', 6, v='20.4...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2103...', 6, v='17.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2111...', 6, v='14.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='211f...', 6, v='14.4...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='212d...', 6, v='13.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='213b...', 6, v='14.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2149...', 6, v='18.3...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2157...', 6, v='22.6...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2165...', 6, v='29.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2174...', 6, v='30.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2182...', 6, v='31.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2190...', 6, v='30.5...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='219e...', 6, v='30.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21ac...', 6, v='29.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21ba...', 6, v='29.6...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21c8...', 6, v='30.4...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21d6...', 6, v='31.0...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21e4...', 6, v='28.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21f2...', 6, v='28.4...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2200...', 6, v='27.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='220e...', 6, v='26.6...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='221c...', 6, v='24.0...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='222a...', 6, v='18.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2238...', 6, v='17.5...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2247...', 6, v='16.4...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2255...', 6, v='18.4...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2263...', 6, v='9.83...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2271...', 6, v='9.73...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='227f...', 6, v='12.6...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='228d...', 6, v='17.2...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='229b...', 6, v='17.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22a9...', 6, v='19.3...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22b7...', 6, v='22.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22c5...', 6, v='25.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22d3...', 6, v='28.3...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22e1...', 6, v='28.4...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22ef...', 6, v='23.5...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22fd...', 6, v='22.6...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='230b...', 6, v='22.1...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2319...', 6, v='27.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2327...', 6, v='27.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2336...', 6, v='29.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2344...', 6, v='27.3...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2352...', 6, v='25.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2360...', 6, v='25.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='236e...', 6, v='23.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='237c...', 6, v='21.6...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='238a...', 6, v='19.4...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2398...', 6, v='15.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23a6...', 6, v='16.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23b4...', 6, v='15.6...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23c2...', 6, v='13.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23d0...', 6, v='14.3...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23de...', 6, v='15.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23ec...', 6, v='18.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23fa...', 6, v='22.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2408...', 6, v='26.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2417...', 6, v='34.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2425...', 6, v='35.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2433...', 6, v='36.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2441...', 6, v='34.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='244f...', 6, v='32.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='246b...', 6, v='33.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2479...', 6, v='31.6...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2487...', 6, v='36.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2495...', 6, v='30.4...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24a3...', 6, v='28.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24b1...', 6, v='28.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24bf...', 6, v='27.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24cd...', 6, v='26.4...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24db...', 6, v='21.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24e9...', 6, v='20.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24f8...', 6, v='17.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2506...', 6, v='17.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2514...', 6, v='17.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2522...', 6, v='16.1...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2530...', 6, v='17.3...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='253e...', 6, v='20.9...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='254c...', 6, v='21.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='255a...', 6, v='25.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2568...', 6, v='31.2...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2576...', 6, v='33.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2584...', 6, v='82.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2592...', 6, v='46.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25a0...', 6, v='22.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25ae...', 6, v='31.3...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25bc...', 6, v='30.4...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25ca...', 6, v='28.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25d9...', 6, v='30.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25e7...', 6, v='31.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25f5...', 6, v='28.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2603...', 6, v='27.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2611...', 6, v='24.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='261f...', 6, v='22.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='262d...', 6, v='23.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='263b...', 6, v='17.5...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2649...', 6, v='17.5...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2657...', 6, v='18.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2665...', 6, v='20.6...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2673...', 6, v='19.3...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2681...', 6, v='18.6...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='268f...', 6, v='18.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='269d...', 6, v='18.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26ab...', 6, v='18.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26ba...', 6, v='23.4...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26c8...', 6, v='23.5...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26d6...', 6, v='26.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26e4...', 6, v='24.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26f2...', 6, v='23.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2700...', 6, v='23.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='270e...', 6, v='24"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='271c...', 6, v='22.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='272a...', 6, v='26.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2738...', 6, v='25.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2746...', 6, v='25.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2754...', 6, v='24.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2762...', 6, v='23.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2770...', 6, v='18.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='277e...', 6, v='15.3...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 5) +SAX.endElementNs(par, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(par, NULL, NULL, 0, 2, 0, memind='8608...', 4, h='3dc1...', 8) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='0" v...', 1, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e08"...', 3, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c32...', 4, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2a3c...', 4, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3835...', 4, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4645...', 4, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5455...', 4, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6265...', 4, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7075...', 4, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7e85...', 4, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8c96...', 4, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9aa5...', 4, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a8b6...', 4, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b6c5...', 4, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c4d7...', 4, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d30b...', 4, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e0f6...', 4, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ef06...', 4, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fd17...', 4, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10b2...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1193...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1274...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1355...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1436...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1518...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15f8...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16d9...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17ba...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='189b...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='197c...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a5d...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1b3e...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c1f...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d00...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1de1...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ec2...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fa3...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2084...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2165...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2246...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2327...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2408...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24e9...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25ca...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26ab...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='278c...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='286d...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='294e...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2a30...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2b10...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2bf1...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2cd2...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2db3...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2e94...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2f75...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3056...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3137...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3219...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='32f9...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='33da...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='34bb...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='359d...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='367d...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='375e...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3840...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3921...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3a01...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3ae2...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3bc3...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3ca4...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3d85...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3e66...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3f48...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4028...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4109...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='41ea...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='42cb...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='43ac...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='448d...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='456e...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='464f...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='480f...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='48f0...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='49d1...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4ab4...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4b95...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4c76...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4d57...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4e38...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4f19...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4ffa...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='50dd...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='51bc...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='529d...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='537e...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5460...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5540...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5621...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5702...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='57e3...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='58c4...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='59a7...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5a86...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5b67...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5c48...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5d29...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5e0a...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5eeb...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5fcc...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='60ad...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='618e...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='626f...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6350...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6431...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6512...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='65f3...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='66d4...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='67b5...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6896...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6978...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6a58...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6b39...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6c1a...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6cfb...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6ddc...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6ebd...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6f9e...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='707f...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7160...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7241...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7322...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7403...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='74e4...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='75c5...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='76a6...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7787...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7868...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7948...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7a29...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7b0a...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7beb...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7ccc...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7dad...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7e8f...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7f70...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8051...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8132...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8213...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='82f4...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='83d5...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='84b6...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8597...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8678...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8759...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='883a...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='891b...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='89fc...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8add...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8bbe...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8c9f...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8d80...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8e61...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8f42...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9023...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9104...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='91e5...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='92c6...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='93a8...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9488...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9569...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='964a...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='972b...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='980c...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='98ed...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='99ce...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9aaf...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9b90...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9c71...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9d52...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9e33...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9f14...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9ff5...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a0d6...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a1b7...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a298...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a379...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a45a...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a53b...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a61c...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a6fd...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a7e0...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a8c0...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a9a0...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='aa81...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ab62...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ac43...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ad24...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ae05...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='aee6...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='afc7...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b0a8...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b26a...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b34b...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b42c...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b50d...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b5ee...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b6cf...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b7b0...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b891...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b972...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ba53...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bb34...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bc15...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bcf6...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bdd8...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='beb8...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bf99...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c07a...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c15b...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c23c...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c31d...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c3fe...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c4df...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c5c0...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c6a1...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c782...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c863...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c944...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ca25...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='cb06...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='cbe7...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ccc8...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='cda9...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ce8a...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='cf6b...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d04c...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d12d...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d20e...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d2f0...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d3d0...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d4b1...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d592...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d673...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d754...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d835...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d916...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d9f7...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='dad8...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='dbb9...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='dc9a...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='dd7b...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='de5c...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='df3d...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e01d...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e0fe...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e1df...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e2c0...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e3a1...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e482...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e563...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e644...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e725...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e806...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e8e7...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e9c8...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='eaa9...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='eb8a...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ec6b...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ed4c...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ee2d...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ef0e...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='eff0...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f0d1...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f1b2...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f293...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f374...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f455...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f536...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f617...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f6f8...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f7d9...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f8ba...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f99b...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fa7c...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fb5d...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fc3e...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fd1f...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fe00...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fee1...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ffc2...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='100a...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1018...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1026...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1034...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1042...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1050...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='105e...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='106c...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='107a...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1088...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1096...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10a4...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10b2...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10c1...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10cf...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10dd...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10eb...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10f9...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1107...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1115...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1123...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1131...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='113f...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='114d...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='115b...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1169...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1177...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1185...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1193...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11a2...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11b0...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11be...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11cc...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11da...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11e8...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11f6...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1205...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1213...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1221...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='122f...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='123d...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='124b...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1259...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1267...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1276...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1283...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1291...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='129f...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12ad...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12bb...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12c9...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12d7...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12e5...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12f3...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1301...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='130f...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='131d...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='132b...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1339...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1347...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1355...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1364...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1372...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1380...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='138e...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='139c...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13aa...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13b8...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13c6...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13d4...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13e2...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13f0...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13fe...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='140c...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='141a...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1428...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1436...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1445...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1453...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1461...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='146f...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='147d...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='148b...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1499...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14a7...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14b5...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14c3...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14d1...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14df...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14ed...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14fb...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1509...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1517...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1526...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1534...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1542...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1550...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='155e...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='156c...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='157a...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1588...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1596...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15a4...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15b2...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15c0...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15ce...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15dc...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15ea...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15f8...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1607...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1615...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1623...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1631...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='163f...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='164d...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='165b...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1669...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1677...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1685...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1693...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16a1...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16af...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16bd...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16cb...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16d9...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16e8...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16f6...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1704...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1712...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1720...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='172e...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='173c...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='174a...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1758...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1766...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1774...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1782...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1790...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='179e...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17ac...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17ba...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17c9...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17d7...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17e5...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17f3...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1801...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='180f...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='181d...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='182b...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1839...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1847...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1855...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1863...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1871...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='187f...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='188d...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='189c...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18b8...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18c6...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18d4...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18e2...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18f0...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18fe...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='190c...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='191a...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1928...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1936...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1944...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1952...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1960...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='196e...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='197c...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='198b...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1999...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19b5...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19c3...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19d1...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19df...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19ed...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19ee...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19fb...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a09...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a17...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a25...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a33...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a41...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a4f...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a5e...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a6c...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a7a...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a88...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a96...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1aa4...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ab2...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ac0...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ace...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1adc...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1aea...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1af8...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1b06...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1b14...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c74...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c82...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c90...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c9e...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cac...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cba...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cc8...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cd6...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ce4...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cf2...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d01...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d0f...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d1d...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d2b...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d39...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d47...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d55...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d63...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d71...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d7f...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d8d...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d9b...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1da9...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1db7...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1dc5...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1dd3...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1de1...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1df0...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1dfe...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e0c...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e1a...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e28...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e36...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e44...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e52...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e60...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e6e...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e7c...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e8a...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e98...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ea6...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1eb4...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ec2...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ed1...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1edf...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1eed...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1efb...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f09...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f17...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f25...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f33...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f41...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f4f...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f5d...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f6b...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f79...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f87...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f95...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fa4...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fb2...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fc0...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fce...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fdc...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fea...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ff8...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2006...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2014...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2022...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2030...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='203e...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='204c...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='205a...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2068...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2076...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2084...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2093...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20a1...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20af...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20bd...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20cb...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20d9...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20e7...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20f5...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2103...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2111...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='211f...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='212d...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='213b...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2149...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2157...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2165...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2174...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2182...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2190...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='219e...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21ac...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21ba...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21c8...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21d6...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21e4...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21f2...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2200...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='220e...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='221c...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='222a...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2238...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2247...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2255...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2263...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2271...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='227f...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='228d...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='229b...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22a9...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22b7...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22c5...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22d3...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22e1...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22ef...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22fd...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='230b...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2319...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2327...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2336...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2344...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2352...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2360...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='236e...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='237c...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='238a...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2398...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23a6...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23b4...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23c2...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23d0...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23de...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23ec...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23fa...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2408...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2417...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2425...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2433...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2441...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='244f...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='246b...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2479...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2487...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2495...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24a3...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24b1...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24bf...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24cd...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24db...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24e9...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24f8...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2506...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2514...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2522...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2530...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='253e...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='254c...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='255a...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2568...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2576...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2584...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2592...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25a0...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25ae...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25bc...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25ca...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25d9...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25e7...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25f5...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2603...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2611...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='261f...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='262d...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='263b...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2649...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2657...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2665...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2673...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2681...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='268f...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='269d...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26ab...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26ba...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26c8...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26d6...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26e4...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26f2...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2700...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='270e...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='271c...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='272a...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2738...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2746...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2754...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2762...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2770...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='277e...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 5) +SAX.endElementNs(par, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(par, NULL, NULL, 0, 2, 0, memind='8604...', 4, h='3dc1...', 8) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='0" v...', 1, v='21.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e08"...', 3, v='20.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c32...', 4, v='19.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2a3c...', 4, v='19.5...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3835...', 4, v='18.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4645...', 4, v='18.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5455...', 4, v='22.3...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6265...', 4, v='24.4...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7075...', 4, v='29.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7e85...', 4, v='35.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8c96...', 4, v='35.0...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9aa5...', 4, v='33.5...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a8b6...', 4, v='30.7...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b6c5...', 4, v='29.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c4d7...', 4, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d30b...', 4, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e0f6...', 4, v='0.06...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ef06...', 4, v='0.05...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fd17...', 4, v='0.06...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10b2...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1193...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1274...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1355...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1436...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1518...', 5, v='0.07...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15f8...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16d9...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17ba...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='189b...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='197c...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a5d...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1b3e...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c1f...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d00...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1de1...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ec2...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fa3...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2084...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2165...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2246...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2327...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2408...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24e9...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25ca...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26ab...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='278c...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='286d...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='294e...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2a30...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2b10...', 5, v='0.06...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2bf1...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2cd2...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2db3...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2e94...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2f75...', 5, v='0.05...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3056...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3137...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3219...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='32f9...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='33da...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='34bb...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='359d...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='367d...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='375e...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3840...', 5, v='0.05...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3921...', 5, v='0.06...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3a01...', 5, v='0.06...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3ae2...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3bc3...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3ca4...', 5, v='0.05...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3d85...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3e66...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3f48...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4028...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4109...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='41ea...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='42cb...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='43ac...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='448d...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='456e...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='464f...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='480f...', 5, v='0.05...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='48f0...', 5, v='0.05...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='49d1...', 5, v='0.05...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4ab4...', 5, v='0.05...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4b95...', 5, v='0.05...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4c76...', 5, v='0.05...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4d57...', 5, v='0.05...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4e38...', 5, v='0.05...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4f19...', 5, v='0.05...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4ffa...', 5, v='0.05...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='50dd...', 5, v='0.06...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='51bc...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='529d...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='537e...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5460...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5540...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5621...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5702...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='57e3...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='58c4...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='59a7...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5a86...', 5, v='0.06...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5b67...', 5, v='0.06...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5c48...', 5, v='0.05...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5d29...', 5, v='0.05...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5e0a...', 5, v='0.06...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5eeb...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5fcc...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='60ad...', 5, v='0.05...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='618e...', 5, v='0.05...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='626f...', 5, v='0.05...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6350...', 5, v='0.05...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6431...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6512...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='65f3...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='66d4...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='67b5...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6896...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6978...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6a58...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6b39...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6c1a...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6cfb...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6ddc...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6ebd...', 5, v='0.05...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6f9e...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='707f...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7160...', 5, v='0.05...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7241...', 5, v='0.05...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7322...', 5, v='0.05...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7403...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='74e4...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='75c5...', 5, v='0.05...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='76a6...', 5, v='0.05...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7787...', 5, v='0.05...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7868...', 5, v='0.05...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7948...', 5, v='0.05...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7a29...', 5, v='0.06...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7b0a...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7beb...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7ccc...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7dad...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7e8f...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7f70...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8051...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8132...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8213...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='82f4...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='83d5...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='84b6...', 5, v='0.06...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8597...', 5, v='0.05...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8678...', 5, v='0.05...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8759...', 5, v='0.05...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='883a...', 5, v='0.06...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='891b...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='89fc...', 5, v='0.06...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8add...', 5, v='0.05...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8bbe...', 5, v='0.05...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8c9f...', 5, v='0.05...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8d80...', 5, v='0.05...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8e61...', 5, v='0.05...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8f42...', 5, v='0.06...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9023...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9104...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='91e5...', 5, v='0.06...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='92c6...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='93a8...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9488...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9569...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='964a...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='972b...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='980c...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='98ed...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='99ce...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9aaf...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9b90...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9c71...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9d52...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9e33...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9f14...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9ff5...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a0d6...', 5, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a1b7...', 5, v='30.2...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a298...', 5, v='16.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a379...', 5, v='10.2...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a45a...', 5, v='3.83...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a53b...', 5, v='3.30...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a61c...', 5, v='4.19...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a6fd...', 5, v='2.00...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a7e0...', 5, v='4.91...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a8c0...', 5, v='7.89...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a9a0...', 5, v='2.93...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='aa81...', 5, v='1.48...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ab62...', 5, v='2.19...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ac43...', 5, v='1.67...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ad24...', 5, v='5.98...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ae05...', 5, v='10.6...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='aee6...', 5, v='3.65...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='afc7...', 5, v='7.25...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b0a8...', 5, v='19.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b26a...', 5, v='21.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b34b...', 5, v='18.3...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b42c...', 5, v='3.45...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b50d...', 5, v='4.91...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b5ee...', 5, v='7.33...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b6cf...', 5, v='7.20...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b7b0...', 5, v='9.19...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b891...', 5, v='8.02...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b972...', 5, v='7.68...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ba53...', 5, v='8.66...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bb34...', 5, v='7.73...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bc15...', 5, v='5.14...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bcf6...', 5, v='5.08...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bdd8...', 5, v='18.4...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='beb8...', 5, v='4.67...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bf99...', 5, v='3.97...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c07a...', 5, v='2.24...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c15b...', 5, v='2.51...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c23c...', 5, v='4.78...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c31d...', 5, v='10.4...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c3fe...', 5, v='5.86...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c4df...', 5, v='9.66...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c5c0...', 5, v='5.19...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c6a1...', 5, v='5.35...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c782...', 5, v='7.74...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c863...', 5, v='3.65...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c944...', 5, v='4.23...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ca25...', 5, v='3.28...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='cb06...', 5, v='5.65...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='cbe7...', 5, v='2.24...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ccc8...', 5, v='12.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='cda9...', 5, v='15.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ce8a...', 5, v='11.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='cf6b...', 5, v='15.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d04c...', 5, v='12.3...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d12d...', 5, v='8.53...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d20e...', 5, v='1.47...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d2f0...', 5, v='7.44...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d3d0...', 5, v='4.26...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d4b1...', 5, v='3.80...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d592...', 5, v='3.75...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d673...', 5, v='5.53...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d754...', 5, v='9.52...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d835...', 5, v='1.98...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d916...', 5, v='4.15...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d9f7...', 5, v='9.62...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='dad8...', 5, v='17.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='dbb9...', 5, v='19.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='dc9a...', 5, v='19.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='dd7b...', 5, v='14.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='de5c...', 5, v='12.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='df3d...', 5, v='13.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e01d...', 5, v='13.4...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e0fe...', 5, v='13.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e1df...', 5, v='13.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e2c0...', 5, v='18.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e3a1...', 5, v='17.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e482...', 5, v='15.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e563...', 5, v='15.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e644...', 5, v='11.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e725...', 5, v='9.89...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e806...', 5, v='7.99...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e8e7...', 5, v='13.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e9c8...', 5, v='6.33...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='eaa9...', 5, v='5.63...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='eb8a...', 5, v='7.36...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ec6b...', 5, v='14.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ed4c...', 5, v='9.67...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ee2d...', 5, v='12.8...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ef0e...', 5, v='14.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='eff0...', 5, v='21.5...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f0d1...', 5, v='21.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f1b2...', 5, v='22.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f293...', 5, v='20.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f374...', 5, v='22.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f455...', 5, v='22.5...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f536...', 5, v='24.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f617...', 5, v='23.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f6f8...', 5, v='23.4...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f7d9...', 5, v='22.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f8ba...', 5, v='18.6...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f99b...', 5, v='18.4...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fa7c...', 5, v='15.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fb5d...', 5, v='16.3...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fc3e...', 5, v='15.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fd1f...', 5, v='12.3...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fe00...', 5, v='12.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fee1...', 5, v='8.94...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ffc2...', 5, v='8.83...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='100a...', 6, v='8.79...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1018...', 6, v='10.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1026...', 6, v='13.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1034...', 6, v='15.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1042...', 6, v='19.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1050...', 6, v='22.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='105e...', 6, v='21.5...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='106c...', 6, v='23.3...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='107a...', 6, v='20.3...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1088...', 6, v='18.5...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1096...', 6, v='20.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10a4...', 6, v='19.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10b2...', 6, v='21.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10c1...', 6, v='23.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10cf...', 6, v='21.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10dd...', 6, v='19.5...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10eb...', 6, v='20.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10f9...', 6, v='17.3...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1107...', 6, v='16.5...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1115...', 6, v='13.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1123...', 6, v='12.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1131...', 6, v='8.96...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='113f...', 6, v='8.31...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='114d...', 6, v='8.35...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='115b...', 6, v='8.49...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1169...', 6, v='10.4...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1177...', 6, v='13.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1185...', 6, v='15.4...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1193...', 6, v='18.3...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11a2...', 6, v='22.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11b0...', 6, v='19.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11be...', 6, v='23.4...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11cc...', 6, v='20.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11da...', 6, v='19.8...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11e8...', 6, v='20.8...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11f6...', 6, v='18.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1205...', 6, v='0.01...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1213...', 6, v='0.02...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1221...', 6, v='0.02...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='122f...', 6, v='0.01...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='123d...', 6, v='0.01...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='124b...', 6, v='0.01...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1259...', 6, v='0.01...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1267...', 6, v='0.01...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1276...', 6, v='0.00...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1283...', 6, v='0.00...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1291...', 6, v='0.00...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='129f...', 6, v='0.00...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12ad...', 6, v='0.00...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12bb...', 6, v='0.00...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12c9...', 6, v='0.01...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12d7...', 6, v='0.01...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12e5...', 6, v='0.01...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12f3...', 6, v='0.01...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1301...', 6, v='0.01...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='130f...', 6, v='0.01...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='131d...', 6, v='0.01...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='132b...', 6, v='0.01...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1339...', 6, v='0.26...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1347...', 6, v='0.12...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1355...', 6, v='0.16...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1364...', 6, v='0.22...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1372...', 6, v='0.24...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1380...', 6, v='0.23...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='138e...', 6, v='0.23...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='139c...', 6, v='0.07...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13aa...', 6, v='0.08...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13b8...', 6, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13c6...', 6, v='0.41...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13d4...', 6, v='0.19...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13e2...', 6, v='0.15...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13f0...', 6, v='0.14...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13fe...', 6, v='0.21...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='140c...', 6, v='0.30...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='141a...', 6, v='0.20...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1428...', 6, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1436...', 6, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1445...', 6, v='0.05...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1453...', 6, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1461...', 6, v='0.02...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='146f...', 6, v='0.09...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='147d...', 6, v='0.03...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='148b...', 6, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1499...', 6, v='0.02...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14a7...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14b5...', 6, v='0.08...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14c3...', 6, v='0.25...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14d1...', 6, v='0.22...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14df...', 6, v='0.19...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14ed...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14fb...', 6, v='0.04...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1509...', 6, v='0.02...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1517...', 6, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1526...', 6, v='0.15...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1534...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1542...', 6, v='0.09...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1550...', 6, v='0.12...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='155e...', 6, v='0.18...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='156c...', 6, v='0.28...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='157a...', 6, v='0.16...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1588...', 6, v='0.15...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1596...', 6, v='0.24...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15a4...', 6, v='0.21...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15b2...', 6, v='0.18...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15c0...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15ce...', 6, v='0.09...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15dc...', 6, v='0.09...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15ea...', 6, v='0.11...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15f8...', 6, v='0.29...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1607...', 6, v='0.06...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1615...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1623...', 6, v='0.07...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1631...', 6, v='0.06...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='163f...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='164d...', 6, v='0.04...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='165b...', 6, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1669...', 6, v='0.05...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1677...', 6, v='0.07...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1685...', 6, v='0.03...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1693...', 6, v='0.02...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16a1...', 6, v='0.02...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16af...', 6, v='0.07...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16bd...', 6, v='0.17...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16cb...', 6, v='0.22...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16d9...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16e8...', 6, v='0.57...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16f6...', 6, v='0.63...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1704...', 6, v='0.67...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1712...', 6, v='0.45...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1720...', 6, v='0.46...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='172e...', 6, v='0.47...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='173c...', 6, v='0.48...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='174a...', 6, v='0.56...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1758...', 6, v='0.59...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1766...', 6, v='34.3...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1774...', 6, v='33.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1782...', 6, v='34.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1790...', 6, v='31.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='179e...', 6, v='26.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17ac...', 6, v='26.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17ba...', 6, v='28.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17c9...', 6, v='25.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17d7...', 6, v='24.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17e5...', 6, v='25.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17f3...', 6, v='22.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1801...', 6, v='22.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='180f...', 6, v='28.0...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='181d...', 6, v='30.6...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='182b...', 6, v='35.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1839...', 6, v='61.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1847...', 6, v='61.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1855...', 6, v='58.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1863...', 6, v='54.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1871...', 6, v='56.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='187f...', 6, v='53.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='188d...', 6, v='57.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='189c...', 6, v='53.5...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18b8...', 6, v='36.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18c6...', 6, v='36.6...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18d4...', 6, v='35.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18e2...', 6, v='29.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18f0...', 6, v='28.3...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18fe...', 6, v='25.3...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='190c...', 6, v='19.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='191a...', 6, v='19.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1928...', 6, v='19.3...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1936...', 6, v='18.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1944...', 6, v='18.1...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1952...', 6, v='20.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1960...', 6, v='25.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='196e...', 6, v='27.5...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='197c...', 6, v='29.4...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='198b...', 6, v='27.3...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1999...', 6, v='30.5...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19b5...', 6, v='29.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19c3...', 6, v='28.3...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19d1...', 6, v='28.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19df...', 6, v='28.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19ed...', 6, v='28.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19ee...', 6, v='28.3...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19fb...', 6, v='11.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a09...', 6, v='14.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a17...', 6, v='19.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a25...', 6, v='20.2...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a33...', 6, v='11.2...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a41...', 6, v='12.2...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a4f...', 6, v='16.5...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a5e...', 6, v='15.1...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a6c...', 6, v='9.95...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a7a...', 6, v='12.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a88...', 6, v='12.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a96...', 6, v='9.68...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1aa4...', 6, v='6.80...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ab2...', 6, v='4.55...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ac0...', 6, v='10.6...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ace...', 6, v='14.6...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1adc...', 6, v='14.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1aea...', 6, v='13.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1af8...', 6, v='15.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1b06...', 6, v='13.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1b14...', 6, v='12.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c74...', 6, v='3.99...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c82...', 6, v='2.18...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c90...', 6, v='16.5...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c9e...', 6, v='14.3...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cac...', 6, v='16.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cba...', 6, v='15.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cc8...', 6, v='29.2...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cd6...', 6, v='27.6...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ce4...', 6, v='25.4...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cf2...', 6, v='24.3...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d01...', 6, v='25.3...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d0f...', 6, v='28.6...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d1d...', 6, v='28.3...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d2b...', 6, v='28.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d39...', 6, v='30.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d47...', 6, v='30.6...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d55...', 6, v='30.3...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d63...', 6, v='24.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d71...', 6, v='23.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d7f...', 6, v='23.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d8d...', 6, v='15.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d9b...', 6, v='16.6...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1da9...', 6, v='16.3...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1db7...', 6, v='15.6...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1dc5...', 6, v='16.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1dd3...', 6, v='16.6...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1de1...', 6, v='27.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1df0...', 6, v='31.4...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1dfe...', 6, v='31.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e0c...', 6, v='32.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e1a...', 6, v='31.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e28...', 6, v='30.6...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e36...', 6, v='29.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e44...', 6, v='27.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e52...', 6, v='23.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e60...', 6, v='23.5...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e6e...', 6, v='23.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e7c...', 6, v='8.57...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e8a...', 6, v='7.91...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e98...', 6, v='7.85...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ea6...', 6, v='9.84...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1eb4...', 6, v='10.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ec2...', 6, v='11.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ed1...', 6, v='11.5...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1edf...', 6, v='12.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1eed...', 6, v='11.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1efb...', 6, v='11.4...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f09...', 6, v='10.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f17...', 6, v='10.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f25...', 6, v='10.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f33...', 6, v='13.6...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f41...', 6, v='19.3...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f4f...', 6, v='16.3...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f5d...', 6, v='15.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f6b...', 6, v='15.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f79...', 6, v='14.3...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f87...', 6, v='15.7...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f95...', 6, v='16.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fa4...', 6, v='13.3...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fb2...', 6, v='11.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fc0...', 6, v='11.6...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fce...', 6, v='9.24...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fdc...', 6, v='8.96...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fea...', 6, v='9.42...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ff8...', 6, v='11.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2006...', 6, v='18.0...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2014...', 6, v='15.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2022...', 6, v='23.3...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2030...', 6, v='26.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='203e...', 6, v='29.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='204c...', 6, v='25.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='205a...', 6, v='25.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2068...', 6, v='26.4...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2076...', 6, v='30.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2084...', 6, v='28.4...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2093...', 6, v='30.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20a1...', 6, v='28.5...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20af...', 6, v='24.5...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20bd...', 6, v='23.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20cb...', 6, v='21.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20d9...', 6, v='19.6...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20e7...', 6, v='18.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20f5...', 6, v='17.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2103...', 6, v='15.3...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2111...', 6, v='13.4...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='211f...', 6, v='13.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='212d...', 6, v='12.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='213b...', 6, v='13.5...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2149...', 6, v='17.2...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2157...', 6, v='21.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2165...', 6, v='25.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2174...', 6, v='27.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2182...', 6, v='28.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2190...', 6, v='27.6...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='219e...', 6, v='28.4...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21ac...', 6, v='27.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21ba...', 6, v='27.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21c8...', 6, v='28.2...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21d6...', 6, v='27.5...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21e4...', 6, v='26.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21f2...', 6, v='25.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2200...', 6, v='24.6...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='220e...', 6, v='24.3...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='221c...', 6, v='22.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='222a...', 6, v='17.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2238...', 6, v='16.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2247...', 6, v='14.5...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2255...', 6, v='18.4...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2263...', 6, v='10.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2271...', 6, v='10.6...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='227f...', 6, v='13.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='228d...', 6, v='17.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='229b...', 6, v='15.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22a9...', 6, v='17.6...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22b7...', 6, v='21.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22c5...', 6, v='24.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22d3...', 6, v='26.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22e1...', 6, v='27.0...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22ef...', 6, v='22.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22fd...', 6, v='21.5...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='230b...', 6, v='20.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2319...', 6, v='25.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2327...', 6, v='25.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2336...', 6, v='27.6...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2344...', 6, v='25.5...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2352...', 6, v='24.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2360...', 6, v='23.8...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='236e...', 6, v='22.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='237c...', 6, v='20.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='238a...', 6, v='18.3...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2398...', 6, v='14.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23a6...', 6, v='14.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23b4...', 6, v='14.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23c2...', 6, v='13.3...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23d0...', 6, v='13.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23de...', 6, v='15.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23ec...', 6, v='17.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23fa...', 6, v='20.6...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2408...', 6, v='24.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2417...', 6, v='32.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2425...', 6, v='34.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2433...', 6, v='34.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2441...', 6, v='31.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='244f...', 6, v='29.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='246b...', 6, v='30.5...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2479...', 6, v='29.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2487...', 6, v='34.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2495...', 6, v='28.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24a3...', 6, v='25.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24b1...', 6, v='26.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24bf...', 6, v='24.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24cd...', 6, v='24.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24db...', 6, v='20.2...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24e9...', 6, v='18.2...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24f8...', 6, v='15.3...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2506...', 6, v='15.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2514...', 6, v='15.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2522...', 6, v='15.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2530...', 6, v='16.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='253e...', 6, v='19.5...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='254c...', 6, v='20.0...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='255a...', 6, v='23.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2568...', 6, v='29.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2576...', 6, v='31.6...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2584...', 6, v='75.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2592...', 6, v='41.4...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25a0...', 6, v='21.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25ae...', 6, v='29.4...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25bc...', 6, v='28.5...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25ca...', 6, v='27.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25d9...', 6, v='28.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25e7...', 6, v='29.3...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25f5...', 6, v='26.5...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2603...', 6, v='25.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2611...', 6, v='23.3...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='261f...', 6, v='21.3...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='262d...', 6, v='20.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='263b...', 6, v='16.3...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2649...', 6, v='15.6...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2657...', 6, v='16.6...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2665...', 6, v='17.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2673...', 6, v='16.8...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2681...', 6, v='16.6...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='268f...', 6, v='17.4...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='269d...', 6, v='18.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26ab...', 6, v='18.4...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26ba...', 6, v='22.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26c8...', 6, v='22.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26d6...', 6, v='25.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26e4...', 6, v='22.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26f2...', 6, v='22.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2700...', 6, v='22.9...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='270e...', 6, v='23.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='271c...', 6, v='21.5...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='272a...', 6, v='23.5...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2738...', 6, v='23.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2746...', 6, v='22.7...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2754...', 6, v='22.3...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2762...', 6, v='23.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2770...', 6, v='18.2...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='277e...', 6, v='14.1...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 5) +SAX.endElementNs(par, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(par, NULL, NULL, 0, 2, 0, memind='9812...', 4, h='3dc1...', 8) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='0" v...', 1, v='114....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e08"...', 3, v='117....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c32...', 4, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2a3c...', 4, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3835...', 4, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4645...', 4, v='116....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5455...', 4, v='109....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6265...', 4, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7075...', 4, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7e85...', 4, v='116....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8c96...', 4, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9aa5...', 4, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a8b6...', 4, v='124....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b6c5...', 4, v='124....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c4d7...', 4, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d30b...', 4, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e0f6...', 4, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ef06...', 4, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fd17...', 4, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10b2...', 5, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1193...', 5, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1274...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1355...', 5, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1436...', 5, v='125....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1518...', 5, v='127....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15f8...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16d9...', 5, v='121....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17ba...', 5, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='189b...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='197c...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a5d...', 5, v='126....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1b3e...', 5, v='125....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c1f...', 5, v='124....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d00...', 5, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1de1...', 5, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ec2...', 5, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fa3...', 5, v='124....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2084...', 5, v='125....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2165...', 5, v='125....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2246...', 5, v='125....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2327...', 5, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2408...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24e9...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25ca...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26ab...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='278c...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='286d...', 5, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='294e...', 5, v='125....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2a30...', 5, v='125....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2b10...', 5, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2bf1...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2cd2...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2db3...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2e94...', 5, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2f75...', 5, v='113....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3056...', 5, v='125....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3137...', 5, v='124....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3219...', 5, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='32f9...', 5, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='33da...', 5, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='34bb...', 5, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='359d...', 5, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='367d...', 5, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='375e...', 5, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3840...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3921...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3a01...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3ae2...', 5, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3bc3...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3ca4...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3d85...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3e66...', 5, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3f48...', 5, v='126....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4028...', 5, v='124....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4109...', 5, v='124....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='41ea...', 5, v='125....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='42cb...', 5, v='125....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='43ac...', 5, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='448d...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='456e...', 5, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='464f...', 5, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='480f...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='48f0...', 5, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='49d1...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4ab4...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4b95...', 5, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4c76...', 5, v='116....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4d57...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4e38...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4f19...', 5, v='116....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4ffa...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='50dd...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='51bc...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='529d...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='537e...', 5, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5460...', 5, v='125....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5540...', 5, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5621...', 5, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5702...', 5, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='57e3...', 5, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='58c4...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='59a7...', 5, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5a86...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5b67...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5c48...', 5, v='115....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5d29...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5e0a...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5eeb...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5fcc...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='60ad...', 5, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='618e...', 5, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='626f...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6350...', 5, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6431...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6512...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='65f3...', 5, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='66d4...', 5, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='67b5...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6896...', 5, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6978...', 5, v='119....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6a58...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6b39...', 5, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6c1a...', 5, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6cfb...', 5, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6ddc...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6ebd...', 5, v='116....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6f9e...', 5, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='707f...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7160...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7241...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7322...', 5, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7403...', 5, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='74e4...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='75c5...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='76a6...', 5, v='118....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7787...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7868...', 5, v='113....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7948...', 5, v='116....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7a29...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7b0a...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7beb...', 5, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7ccc...', 5, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7dad...', 5, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7e8f...', 5, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7f70...', 5, v='124....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8051...', 5, v='125....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8132...', 5, v='126....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8213...', 5, v='125....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='82f4...', 5, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='83d5...', 5, v='120....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='84b6...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8597...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8678...', 5, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8759...', 5, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='883a...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='891b...', 5, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='89fc...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8add...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8bbe...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8c9f...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8d80...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8e61...', 5, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8f42...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9023...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9104...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='91e5...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='92c6...', 5, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='93a8...', 5, v='125....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9488...', 5, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9569...', 5, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='964a...', 5, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='972b...', 5, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='980c...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='98ed...', 5, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='99ce...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9aaf...', 5, v='118....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9b90...', 5, v='115....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9c71...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9d52...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9e33...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9f14...', 5, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9ff5...', 5, v='116....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a0d6...', 5, v='116....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a1b7...', 5, v='116....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a298...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a379...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a45a...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a53b...', 5, v='119....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a61c...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a6fd...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a7e0...', 5, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a8c0...', 5, v='125....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a9a0...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='aa81...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ab62...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ac43...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ad24...', 5, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ae05...', 5, v='114....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='aee6...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='afc7...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b0a8...', 5, v='116....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b26a...', 5, v='116....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b34b...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b42c...', 5, v='115....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b50d...', 5, v='115....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b5ee...', 5, v='114....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b6cf...', 5, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b7b0...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b891...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b972...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ba53...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bb34...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bc15...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bcf6...', 5, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bdd8...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='beb8...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bf99...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c07a...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c15b...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c23c...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c31d...', 5, v='115....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c3fe...', 5, v='117....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c4df...', 5, v='116....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c5c0...', 5, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c6a1...', 5, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c782...', 5, v='116....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c863...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c944...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ca25...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='cb06...', 5, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='cbe7...', 5, v='122....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ccc8...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='cda9...', 5, v='116....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ce8a...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='cf6b...', 5, v='118....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d04c...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d12d...', 5, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d20e...', 5, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d2f0...', 5, v='126....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d3d0...', 5, v='119....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d4b1...', 5, v='120....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d592...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d673...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d754...', 5, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d835...', 5, v='124....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d916...', 5, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d9f7...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='dad8...', 5, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='dbb9...', 5, v='116....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='dc9a...', 5, v='116....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='dd7b...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='de5c...', 5, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='df3d...', 5, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e01d...', 5, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e0fe...', 5, v='116....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e1df...', 5, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e2c0...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e3a1...', 5, v='121....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e482...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e563...', 5, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e644...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e725...', 5, v='122....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e806...', 5, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e8e7...', 5, v='116....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e9c8...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='eaa9...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='eb8a...', 5, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ec6b...', 5, v='113....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ed4c...', 5, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ee2d...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ef0e...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='eff0...', 5, v='115....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f0d1...', 5, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f1b2...', 5, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f293...', 5, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f374...', 5, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f455...', 5, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f536...', 5, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f617...', 5, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f6f8...', 5, v='117....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f7d9...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f8ba...', 5, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f99b...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fa7c...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fb5d...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fc3e...', 5, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fd1f...', 5, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fe00...', 5, v='126....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fee1...', 5, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ffc2...', 5, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='100a...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1018...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1026...', 6, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1034...', 6, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1042...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1050...', 6, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='105e...', 6, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='106c...', 6, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='107a...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1088...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1096...', 6, v='118....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10a4...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10b2...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10c1...', 6, v='116....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10cf...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10dd...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10eb...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10f9...', 6, v='121....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1107...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1115...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1123...', 6, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1131...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='113f...', 6, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='114d...', 6, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='115b...', 6, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1169...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1177...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1185...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1193...', 6, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11a2...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11b0...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11be...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11cc...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11da...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11e8...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11f6...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1205...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1213...', 6, v='116....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1221...', 6, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='122f...', 6, v='118....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='123d...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='124b...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1259...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1267...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1276...', 6, v='124....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1283...', 6, v='125....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1291...', 6, v='125....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='129f...', 6, v='125....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12ad...', 6, v='124....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12bb...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12c9...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12d7...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12e5...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12f3...', 6, v='116....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1301...', 6, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='130f...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='131d...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='132b...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1339...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1347...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1355...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1364...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1372...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1380...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='138e...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='139c...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13aa...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13b8...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13c6...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13d4...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13e2...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13f0...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13fe...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='140c...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='141a...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1428...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1436...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1445...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1453...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1461...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='146f...', 6, v='0.11...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='147d...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='148b...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1499...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14a7...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14b5...', 6, v='0.11...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14c3...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14d1...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14df...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14ed...', 6, v='0.11...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14fb...', 6, v='0.11...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1509...', 6, v='0.11...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1517...', 6, v='0.11...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1526...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1534...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1542...', 6, v='0.11...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1550...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='155e...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='156c...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='157a...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1588...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1596...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15a4...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15b2...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15c0...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15ce...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15dc...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15ea...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15f8...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1607...', 6, v='0.11...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1615...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1623...', 6, v='0.11...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1631...', 6, v='0.11...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='163f...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='164d...', 6, v='0.11...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='165b...', 6, v='0.11...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1669...', 6, v='0.11...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1677...', 6, v='0.11...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1685...', 6, v='0.11...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1693...', 6, v='0.11...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16a1...', 6, v='0.11...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16af...', 6, v='0.11...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16bd...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16cb...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16d9...', 6, v='0.11...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16e8...', 6, v='0.11...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16f6...', 6, v='0.11...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1704...', 6, v='0.11...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1712...', 6, v='0.11...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1720...', 6, v='0.11...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='172e...', 6, v='0.11...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='173c...', 6, v='0.11...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='174a...', 6, v='0.11...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1758...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1766...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1774...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1782...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1790...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='179e...', 6, v='124....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17ac...', 6, v='127....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17ba...', 6, v='128....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17c9...', 6, v='127....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17d7...', 6, v='127....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17e5...', 6, v='127....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17f3...', 6, v='126....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1801...', 6, v='124....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='180f...', 6, v='124....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='181d...', 6, v='125....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='182b...', 6, v='125....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1839...', 6, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1847...', 6, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1855...', 6, v='124....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1863...', 6, v='126....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1871...', 6, v='125....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='187f...', 6, v='125....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='188d...', 6, v='124....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='189c...', 6, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18b8...', 6, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18c6...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18d4...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18e2...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18f0...', 6, v='123....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18fe...', 6, v='125....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='190c...', 6, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='191a...', 6, v='124....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1928...', 6, v='126....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1936...', 6, v='126....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1944...', 6, v='125....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1952...', 6, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1960...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='196e...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='197c...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='198b...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1999...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19b5...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19c3...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19d1...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19df...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19ed...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19ee...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19fb...', 6, v='116....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a09...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a17...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a25...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a33...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a41...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a4f...', 6, v='126....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a5e...', 6, v='126....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a6c...', 6, v='124....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a7a...', 6, v='125....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a88...', 6, v='126....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a96...', 6, v='124....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1aa4...', 6, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ab2...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ac0...', 6, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ace...', 6, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1adc...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1aea...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1af8...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1b06...', 6, v='124....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1b14...', 6, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c74...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c82...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c90...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c9e...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cac...', 6, v='121....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cba...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cc8...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cd6...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ce4...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cf2...', 6, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d01...', 6, v='125....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d0f...', 6, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d1d...', 6, v='123....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d2b...', 6, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d39...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d47...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d55...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d63...', 6, v='123....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d71...', 6, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d7f...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d8d...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d9b...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1da9...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1db7...', 6, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1dc5...', 6, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1dd3...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1de1...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1df0...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1dfe...', 6, v='116....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e0c...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e1a...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e28...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e36...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e44...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e52...', 6, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e60...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e6e...', 6, v='122....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e7c...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e8a...', 6, v='123....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e98...', 6, v='122....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ea6...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1eb4...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ec2...', 6, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ed1...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1edf...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1eed...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1efb...', 6, v='123....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f09...', 6, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f17...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f25...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f33...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f41...', 6, v='116....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f4f...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f5d...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f6b...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f79...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f87...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f95...', 6, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fa4...', 6, v='126....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fb2...', 6, v='125....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fc0...', 6, v='126....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fce...', 6, v='126....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fdc...', 6, v='125....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fea...', 6, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ff8...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2006...', 6, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2014...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2022...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2030...', 6, v='120....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='203e...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='204c...', 6, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='205a...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2068...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2076...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2084...', 6, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2093...', 6, v='121....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20a1...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20af...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20bd...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20cb...', 6, v='119....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20d9...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20e7...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20f5...', 6, v='124....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2103...', 6, v='126....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2111...', 6, v='124....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='211f...', 6, v='124....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='212d...', 6, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='213b...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2149...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2157...', 6, v='116....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2165...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2174...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2182...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2190...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='219e...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21ac...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21ba...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21c8...', 6, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21d6...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21e4...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21f2...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2200...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='220e...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='221c...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='222a...', 6, v='120....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2238...', 6, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2247...', 6, v='126....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2255...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2263...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2271...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='227f...', 6, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='228d...', 6, v='116....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='229b...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22a9...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22b7...', 6, v='119....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22c5...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22d3...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22e1...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22ef...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22fd...', 6, v='120....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='230b...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2319...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2327...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2336...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2344...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2352...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2360...', 6, v='120....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='236e...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='237c...', 6, v='119....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='238a...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2398...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23a6...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23b4...', 6, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23c2...', 6, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23d0...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23de...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23ec...', 6, v='119....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23fa...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2408...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2417...', 6, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2425...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2433...', 6, v='118....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2441...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='244f...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='246b...', 6, v='118....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2479...', 6, v='118....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2487...', 6, v='115....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2495...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24a3...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24b1...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24bf...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24cd...', 6, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24db...', 6, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24e9...', 6, v='124....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24f8...', 6, v='124....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2506...', 6, v='124....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2514...', 6, v='125....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2522...', 6, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2530...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='253e...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='254c...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='255a...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2568...', 6, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2576...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2584...', 6, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2592...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25a0...', 6, v='119....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25ae...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25bc...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25ca...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25d9...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25e7...', 6, v='119....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25f5...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2603...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2611...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='261f...', 6, v='120....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='262d...', 6, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='263b...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2649...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2657...', 6, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2665...', 6, v='124....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2673...', 6, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2681...', 6, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='268f...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='269d...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26ab...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26ba...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26c8...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26d6...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26e4...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26f2...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2700...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='270e...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='271c...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='272a...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2738...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2746...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2754...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2762...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2770...', 6, v='121....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='277e...', 6, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 5) +SAX.endElementNs(par, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(par, NULL, NULL, 0, 2, 0, memind='9808...', 4, h='3dc1...', 8) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='0" v...', 1, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e08"...', 3, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c32...', 4, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2a3c...', 4, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3835...', 4, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4645...', 4, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5455...', 4, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6265...', 4, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7075...', 4, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7e85...', 4, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8c96...', 4, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9aa5...', 4, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a8b6...', 4, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b6c5...', 4, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c4d7...', 4, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d30b...', 4, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e0f6...', 4, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ef06...', 4, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fd17...', 4, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10b2...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1193...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1274...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1355...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1436...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1518...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15f8...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16d9...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17ba...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='189b...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='197c...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a5d...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1b3e...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c1f...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d00...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1de1...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ec2...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fa3...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2084...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2165...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2246...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2327...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2408...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24e9...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25ca...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26ab...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='278c...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='286d...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='294e...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2a30...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2b10...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2bf1...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2cd2...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2db3...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2e94...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2f75...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3056...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3137...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3219...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='32f9...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='33da...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='34bb...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='359d...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='367d...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='375e...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3840...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3921...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3a01...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3ae2...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3bc3...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3ca4...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3d85...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3e66...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3f48...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4028...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4109...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='41ea...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='42cb...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='43ac...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='448d...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='456e...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='464f...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='480f...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='48f0...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='49d1...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4ab4...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4b95...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4c76...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4d57...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4e38...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4f19...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4ffa...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='50dd...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='51bc...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='529d...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='537e...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5460...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5540...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5621...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5702...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='57e3...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='58c4...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='59a7...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5a86...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5b67...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5c48...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5d29...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5e0a...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5eeb...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5fcc...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='60ad...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='618e...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='626f...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6350...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6431...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6512...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='65f3...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='66d4...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='67b5...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6896...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6978...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6a58...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6b39...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6c1a...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6cfb...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6ddc...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6ebd...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6f9e...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='707f...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7160...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7241...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7322...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7403...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='74e4...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='75c5...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='76a6...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7787...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7868...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7948...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7a29...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7b0a...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7beb...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7ccc...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7dad...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7e8f...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7f70...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8051...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8132...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8213...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='82f4...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='83d5...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='84b6...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8597...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8678...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8759...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='883a...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='891b...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='89fc...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8add...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8bbe...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8c9f...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8d80...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8e61...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8f42...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9023...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9104...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='91e5...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='92c6...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='93a8...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9488...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9569...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='964a...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='972b...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='980c...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='98ed...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='99ce...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9aaf...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9b90...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9c71...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9d52...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9e33...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9f14...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9ff5...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a0d6...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a1b7...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a298...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a379...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a45a...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a53b...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a61c...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a6fd...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a7e0...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a8c0...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a9a0...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='aa81...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ab62...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ac43...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ad24...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ae05...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='aee6...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='afc7...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b0a8...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b26a...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b34b...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b42c...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b50d...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b5ee...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b6cf...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b7b0...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b891...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b972...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ba53...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bb34...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bc15...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bcf6...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bdd8...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='beb8...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bf99...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c07a...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c15b...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c23c...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c31d...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c3fe...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c4df...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c5c0...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c6a1...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c782...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c863...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c944...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ca25...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='cb06...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='cbe7...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ccc8...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='cda9...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ce8a...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='cf6b...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d04c...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d12d...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d20e...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d2f0...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d3d0...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d4b1...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d592...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d673...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d754...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d835...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d916...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d9f7...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='dad8...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='dbb9...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='dc9a...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='dd7b...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='de5c...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='df3d...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e01d...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e0fe...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e1df...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e2c0...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e3a1...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e482...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e563...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e644...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e725...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e806...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e8e7...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e9c8...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='eaa9...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='eb8a...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ec6b...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ed4c...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ee2d...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ef0e...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='eff0...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f0d1...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f1b2...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f293...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f374...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f455...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f536...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f617...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f6f8...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f7d9...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f8ba...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f99b...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fa7c...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fb5d...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fc3e...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fd1f...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fe00...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fee1...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ffc2...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='100a...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1018...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1026...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1034...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1042...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1050...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='105e...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='106c...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='107a...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1088...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1096...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10a4...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10b2...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10c1...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10cf...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10dd...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10eb...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10f9...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1107...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1115...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1123...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1131...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='113f...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='114d...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='115b...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1169...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1177...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1185...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1193...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11a2...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11b0...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11be...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11cc...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11da...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11e8...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11f6...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1205...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1213...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1221...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='122f...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='123d...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='124b...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1259...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1267...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1276...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1283...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1291...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='129f...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12ad...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12bb...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12c9...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12d7...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12e5...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12f3...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1301...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='130f...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='131d...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='132b...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1339...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1347...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1355...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1364...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1372...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1380...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='138e...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='139c...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13aa...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13b8...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13c6...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13d4...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13e2...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13f0...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13fe...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='140c...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='141a...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1428...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1436...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1445...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1453...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1461...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='146f...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='147d...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='148b...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1499...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14a7...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14b5...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14c3...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14d1...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14df...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14ed...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14fb...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1509...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1517...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1526...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1534...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1542...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1550...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='155e...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='156c...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='157a...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1588...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1596...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15a4...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15b2...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15c0...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15ce...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15dc...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15ea...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15f8...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1607...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1615...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1623...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1631...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='163f...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='164d...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='165b...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1669...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1677...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1685...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1693...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16a1...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16af...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16bd...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16cb...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16d9...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16e8...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16f6...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1704...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1712...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1720...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='172e...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='173c...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='174a...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1758...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1766...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1774...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1782...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1790...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='179e...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17ac...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17ba...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17c9...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17d7...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17e5...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17f3...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1801...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='180f...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='181d...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='182b...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1839...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1847...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1855...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1863...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1871...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='187f...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='188d...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='189c...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18b8...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18c6...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18d4...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18e2...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18f0...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18fe...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='190c...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='191a...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1928...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1936...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1944...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1952...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1960...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='196e...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='197c...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='198b...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1999...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19b5...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19c3...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19d1...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19df...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19ed...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19ee...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19fb...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a09...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a17...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a25...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a33...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a41...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a4f...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a5e...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a6c...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a7a...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a88...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a96...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1aa4...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ab2...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ac0...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ace...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1adc...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1aea...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1af8...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1b06...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1b14...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c74...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c82...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c90...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c9e...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cac...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cba...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cc8...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cd6...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ce4...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cf2...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d01...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d0f...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d1d...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d2b...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d39...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d47...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d55...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d63...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d71...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d7f...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d8d...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d9b...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1da9...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1db7...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1dc5...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1dd3...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1de1...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1df0...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1dfe...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e0c...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e1a...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e28...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e36...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e44...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e52...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e60...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e6e...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e7c...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e8a...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e98...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ea6...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1eb4...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ec2...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ed1...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1edf...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1eed...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1efb...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f09...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f17...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f25...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f33...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f41...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f4f...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f5d...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f6b...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f79...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f87...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f95...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fa4...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fb2...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fc0...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fce...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fdc...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fea...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ff8...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2006...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2014...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2022...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2030...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='203e...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='204c...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='205a...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2068...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2076...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2084...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2093...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20a1...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20af...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20bd...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20cb...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20d9...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20e7...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20f5...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2103...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2111...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='211f...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='212d...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='213b...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2149...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2157...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2165...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2174...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2182...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2190...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='219e...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21ac...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21ba...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21c8...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21d6...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21e4...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21f2...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2200...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='220e...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='221c...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='222a...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2238...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2247...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2255...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2263...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2271...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='227f...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='228d...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='229b...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22a9...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22b7...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22c5...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22d3...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22e1...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22ef...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22fd...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='230b...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2319...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2327...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2336...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2344...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2352...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2360...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='236e...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='237c...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='238a...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2398...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23a6...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23b4...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23c2...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23d0...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23de...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23ec...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23fa...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2408...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2417...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2425...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2433...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2441...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='244f...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='246b...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2479...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2487...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2495...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24a3...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24b1...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24bf...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24cd...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24db...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24e9...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24f8...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2506...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2514...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2522...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2530...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='253e...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='254c...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='255a...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2568...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2576...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2584...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2592...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25a0...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25ae...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25bc...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25ca...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25d9...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25e7...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25f5...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2603...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2611...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='261f...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='262d...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='263b...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2649...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2657...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2665...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2673...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2681...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='268f...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='269d...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26ab...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26ba...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26c8...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26d6...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26e4...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26f2...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2700...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='270e...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='271c...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='272a...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2738...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2746...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2754...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2762...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2770...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='277e...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 5) +SAX.endElementNs(par, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(par, NULL, NULL, 0, 2, 0, memind='9804...', 4, h='3dc1...', 8) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='0" v...', 1, v='113....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e08"...', 3, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c32...', 4, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2a3c...', 4, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3835...', 4, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4645...', 4, v='116....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5455...', 4, v='109....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6265...', 4, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7075...', 4, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7e85...', 4, v='116....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8c96...', 4, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9aa5...', 4, v='120....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a8b6...', 4, v='124....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b6c5...', 4, v='124....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c4d7...', 4, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d30b...', 4, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e0f6...', 4, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ef06...', 4, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fd17...', 4, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10b2...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1193...', 5, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1274...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1355...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1436...', 5, v='125....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1518...', 5, v='127....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15f8...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16d9...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17ba...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='189b...', 5, v='120....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='197c...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a5d...', 5, v='126....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1b3e...', 5, v='125....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c1f...', 5, v='124....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d00...', 5, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1de1...', 5, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ec2...', 5, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fa3...', 5, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2084...', 5, v='124....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2165...', 5, v='125....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2246...', 5, v='125....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2327...', 5, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2408...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24e9...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25ca...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26ab...', 5, v='119....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='278c...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='286d...', 5, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='294e...', 5, v='125....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2a30...', 5, v='125....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2b10...', 5, v='117....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2bf1...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2cd2...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2db3...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2e94...', 5, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2f75...', 5, v='112....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3056...', 5, v='124....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3137...', 5, v='124....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3219...', 5, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='32f9...', 5, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='33da...', 5, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='34bb...', 5, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='359d...', 5, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='367d...', 5, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='375e...', 5, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3840...', 5, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3921...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3a01...', 5, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3ae2...', 5, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3bc3...', 5, v='120....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3ca4...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3d85...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3e66...', 5, v='122....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3f48...', 5, v='125....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4028...', 5, v='123....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4109...', 5, v='124....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='41ea...', 5, v='124....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='42cb...', 5, v='124....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='43ac...', 5, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='448d...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='456e...', 5, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='464f...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='480f...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='48f0...', 5, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='49d1...', 5, v='118....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4ab4...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4b95...', 5, v='116....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4c76...', 5, v='115....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4d57...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4e38...', 5, v='118....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4f19...', 5, v='116....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4ffa...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='50dd...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='51bc...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='529d...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='537e...', 5, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5460...', 5, v='125....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5540...', 5, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5621...', 5, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5702...', 5, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='57e3...', 5, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='58c4...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='59a7...', 5, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5a86...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5b67...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5c48...', 5, v='115....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5d29...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5e0a...', 5, v='120....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5eeb...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5fcc...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='60ad...', 5, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='618e...', 5, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='626f...', 5, v='119....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6350...', 5, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6431...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6512...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='65f3...', 5, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='66d4...', 5, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='67b5...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6896...', 5, v='122....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6978...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6a58...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6b39...', 5, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6c1a...', 5, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6cfb...', 5, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6ddc...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6ebd...', 5, v='115....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6f9e...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='707f...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7160...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7241...', 5, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7322...', 5, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7403...', 5, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='74e4...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='75c5...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='76a6...', 5, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7787...', 5, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7868...', 5, v='113....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7948...', 5, v='116....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7a29...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7b0a...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7beb...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7ccc...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7dad...', 5, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7e8f...', 5, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7f70...', 5, v='123....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8051...', 5, v='125....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8132...', 5, v='125....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8213...', 5, v='124....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='82f4...', 5, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='83d5...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='84b6...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8597...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8678...', 5, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8759...', 5, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='883a...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='891b...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='89fc...', 5, v='119....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8add...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8bbe...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8c9f...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8d80...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8e61...', 5, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8f42...', 5, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9023...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9104...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='91e5...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='92c6...', 5, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='93a8...', 5, v='124....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9488...', 5, v='123....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9569...', 5, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='964a...', 5, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='972b...', 5, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='980c...', 5, v='119....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='98ed...', 5, v='122....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='99ce...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9aaf...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9b90...', 5, v='115....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9c71...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9d52...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9e33...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9f14...', 5, v='117....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9ff5...', 5, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a0d6...', 5, v='116....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a1b7...', 5, v='116....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a298...', 5, v='118....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a379...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a45a...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a53b...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a61c...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a6fd...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a7e0...', 5, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a8c0...', 5, v='125....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a9a0...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='aa81...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ab62...', 5, v='120....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ac43...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ad24...', 5, v='117....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ae05...', 5, v='114....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='aee6...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='afc7...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b0a8...', 5, v='116....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b26a...', 5, v='116....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b34b...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b42c...', 5, v='115....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b50d...', 5, v='115....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b5ee...', 5, v='114....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b6cf...', 5, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b7b0...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b891...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b972...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ba53...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bb34...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bc15...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bcf6...', 5, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bdd8...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='beb8...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bf99...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c07a...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c15b...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c23c...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c31d...', 5, v='115....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c3fe...', 5, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c4df...', 5, v='116....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c5c0...', 5, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c6a1...', 5, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c782...', 5, v='116....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c863...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c944...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ca25...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='cb06...', 5, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='cbe7...', 5, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ccc8...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='cda9...', 5, v='116....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ce8a...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='cf6b...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d04c...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d12d...', 5, v='121....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d20e...', 5, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d2f0...', 5, v='126....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d3d0...', 5, v='119....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d4b1...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d592...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d673...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d754...', 5, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d835...', 5, v='124....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d916...', 5, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d9f7...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='dad8...', 5, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='dbb9...', 5, v='116....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='dc9a...', 5, v='116....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='dd7b...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='de5c...', 5, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='df3d...', 5, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e01d...', 5, v='117....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e0fe...', 5, v='116....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e1df...', 5, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e2c0...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e3a1...', 5, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e482...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e563...', 5, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e644...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e725...', 5, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e806...', 5, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e8e7...', 5, v='116....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e9c8...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='eaa9...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='eb8a...', 5, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ec6b...', 5, v='113....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ed4c...', 5, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ee2d...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ef0e...', 5, v='118....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='eff0...', 5, v='116....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f0d1...', 5, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f1b2...', 5, v='117....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f293...', 5, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f374...', 5, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f455...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f536...', 5, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f617...', 5, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f6f8...', 5, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f7d9...', 5, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f8ba...', 5, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f99b...', 5, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fa7c...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fb5d...', 5, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fc3e...', 5, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fd1f...', 5, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fe00...', 5, v='126....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fee1...', 5, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ffc2...', 5, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='100a...', 6, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1018...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1026...', 6, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1034...', 6, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1042...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1050...', 6, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='105e...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='106c...', 6, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='107a...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1088...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1096...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10a4...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10b2...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10c1...', 6, v='116....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10cf...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10dd...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10eb...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10f9...', 6, v='121....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1107...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1115...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1123...', 6, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1131...', 6, v='122....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='113f...', 6, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='114d...', 6, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='115b...', 6, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1169...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1177...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1185...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1193...', 6, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11a2...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11b0...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11be...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11cc...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11da...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11e8...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11f6...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1205...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1213...', 6, v='116....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1221...', 6, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='122f...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='123d...', 6, v='120....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='124b...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1259...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1267...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1276...', 6, v='124....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1283...', 6, v='125....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1291...', 6, v='125....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='129f...', 6, v='125....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12ad...', 6, v='124....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12bb...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12c9...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12d7...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12e5...', 6, v='119....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12f3...', 6, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1301...', 6, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='130f...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='131d...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='132b...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1339...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1347...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1355...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1364...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1372...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1380...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='138e...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='139c...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13aa...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13b8...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13c6...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13d4...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13e2...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13f0...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13fe...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='140c...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='141a...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1428...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1436...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1445...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1453...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1461...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='146f...', 6, v='0.11...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='147d...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='148b...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1499...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14a7...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14b5...', 6, v='0.11...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14c3...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14d1...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14df...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14ed...', 6, v='0.11...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14fb...', 6, v='0.11...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1509...', 6, v='0.11...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1517...', 6, v='0.11...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1526...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1534...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1542...', 6, v='0.11...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1550...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='155e...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='156c...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='157a...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1588...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1596...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15a4...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15b2...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15c0...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15ce...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15dc...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15ea...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15f8...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1607...', 6, v='0.11...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1615...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1623...', 6, v='0.11...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1631...', 6, v='0.11...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='163f...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='164d...', 6, v='0.11...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='165b...', 6, v='0.11...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1669...', 6, v='0.11...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1677...', 6, v='0.11...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1685...', 6, v='0.11...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1693...', 6, v='0.11...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16a1...', 6, v='0.11...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16af...', 6, v='0.11...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16bd...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16cb...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16d9...', 6, v='0.11...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16e8...', 6, v='0.11...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16f6...', 6, v='0.11...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1704...', 6, v='0.11...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1712...', 6, v='0.11...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1720...', 6, v='0.11...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='172e...', 6, v='0.11...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='173c...', 6, v='0.11...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='174a...', 6, v='0.11...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1758...', 6, v='0.10...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1766...', 6, v='117....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1774...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1782...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1790...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='179e...', 6, v='124....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17ac...', 6, v='126....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17ba...', 6, v='128....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17c9...', 6, v='126....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17d7...', 6, v='126....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17e5...', 6, v='126....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17f3...', 6, v='126....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1801...', 6, v='124....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='180f...', 6, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='181d...', 6, v='124....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='182b...', 6, v='124....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1839...', 6, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1847...', 6, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1855...', 6, v='124....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1863...', 6, v='125....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1871...', 6, v='125....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='187f...', 6, v='124....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='188d...', 6, v='124....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='189c...', 6, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18b8...', 6, v='116....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18c6...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18d4...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18e2...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18f0...', 6, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18fe...', 6, v='125....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='190c...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='191a...', 6, v='124....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1928...', 6, v='126....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1936...', 6, v='126....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1944...', 6, v='125....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1952...', 6, v='123....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1960...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='196e...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='197c...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='198b...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1999...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19b5...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19c3...', 6, v='121....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19d1...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19df...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19ed...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19ee...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19fb...', 6, v='115....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a09...', 6, v='118....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a17...', 6, v='119....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a25...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a33...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a41...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a4f...', 6, v='125....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a5e...', 6, v='126....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a6c...', 6, v='124....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a7a...', 6, v='125....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a88...', 6, v='125....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a96...', 6, v='124....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1aa4...', 6, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ab2...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ac0...', 6, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ace...', 6, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1adc...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1aea...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1af8...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1b06...', 6, v='123....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1b14...', 6, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c74...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c82...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c90...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c9e...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cac...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cba...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cc8...', 6, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cd6...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ce4...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cf2...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d01...', 6, v='124....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d0f...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d1d...', 6, v='123....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d2b...', 6, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d39...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d47...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d55...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d63...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d71...', 6, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d7f...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d8d...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d9b...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1da9...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1db7...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1dc5...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1dd3...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1de1...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1df0...', 6, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1dfe...', 6, v='115....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e0c...', 6, v='117....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e1a...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e28...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e36...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e44...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e52...', 6, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e60...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e6e...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e7c...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e8a...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e98...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ea6...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1eb4...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ec2...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ed1...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1edf...', 6, v='122....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1eed...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1efb...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f09...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f17...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f25...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f33...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f41...', 6, v='116....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f4f...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f5d...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f6b...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f79...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f87...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f95...', 6, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fa4...', 6, v='126....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fb2...', 6, v='124....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fc0...', 6, v='125....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fce...', 6, v='125....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fdc...', 6, v='124....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fea...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ff8...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2006...', 6, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2014...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2022...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2030...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='203e...', 6, v='119....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='204c...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='205a...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2068...', 6, v='119....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2076...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2084...', 6, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2093...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20a1...', 6, v='120....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20af...', 6, v='119....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20bd...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20cb...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20d9...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20e7...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20f5...', 6, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2103...', 6, v='125....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2111...', 6, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='211f...', 6, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='212d...', 6, v='123....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='213b...', 6, v='121....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2149...', 6, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2157...', 6, v='116....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2165...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2174...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2182...', 6, v='118....', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2190...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='219e...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21ac...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21ba...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21c8...', 6, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21d6...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21e4...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21f2...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2200...', 6, v='120....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='220e...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='221c...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='222a...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2238...', 6, v='123....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2247...', 6, v='125....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2255...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2263...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2271...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='227f...', 6, v='116....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='228d...', 6, v='115....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='229b...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22a9...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22b7...', 6, v='119....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22c5...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22d3...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22e1...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22ef...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22fd...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='230b...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2319...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2327...', 6, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2336...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2344...', 6, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2352...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2360...', 6, v='119....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='236e...', 6, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='237c...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='238a...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2398...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23a6...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23b4...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23c2...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23d0...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23de...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23ec...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23fa...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2408...', 6, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2417...', 6, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2425...', 6, v='117....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2433...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2441...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='244f...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='246b...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2479...', 6, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2487...', 6, v='114....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2495...', 6, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24a3...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24b1...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24bf...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24cd...', 6, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24db...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24e9...', 6, v='124....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24f8...', 6, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2506...', 6, v='124....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2514...', 6, v='124....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2522...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2530...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='253e...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='254c...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='255a...', 6, v='118....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2568...', 6, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2576...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2584...', 6, v='116....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2592...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25a0...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25ae...', 6, v='118....', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25bc...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25ca...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25d9...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25e7...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25f5...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2603...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2611...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='261f...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='262d...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='263b...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2649...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2657...', 6, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2665...', 6, v='123....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2673...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2681...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='268f...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='269d...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26ab...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26ba...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26c8...', 6, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26d6...', 6, v='117....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26e4...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26f2...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2700...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='270e...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='271c...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='272a...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2738...', 6, v='119....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2746...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2754...', 6, v='121....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2762...', 6, v='118....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2770...', 6, v='120....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='277e...', 6, v='122....', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 5) +SAX.endElementNs(par, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(par, NULL, NULL, 0, 2, 0, memind='4406...', 6, h='3dc1...', 8) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='0" v...', 1, v='-127...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e08"...', 3, v='-148...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c32...', 4, v='-156...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2a3c...', 4, v='-164...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3835...', 4, v='-144...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4645...', 4, v='-127...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5455...', 4, v='-104...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6265...', 4, v='-169...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7075...', 4, v='-176...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7e85...', 4, v='-166...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8c96...', 4, v='-206...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9aa5...', 4, v='-199...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a8b6...', 4, v='-192...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b6c5...', 4, v='-201...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c4d7...', 4, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d30b...', 4, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e0f6...', 4, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ef06...', 4, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fd17...', 4, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10b2...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1193...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1274...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1355...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1436...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1518...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15f8...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16d9...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17ba...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='189b...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='197c...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a5d...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1b3e...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c1f...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d00...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1de1...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ec2...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fa3...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2084...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2165...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2246...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2327...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2408...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24e9...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25ca...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26ab...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='278c...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='286d...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='294e...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2a30...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2b10...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2bf1...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2cd2...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2db3...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2e94...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2f75...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3056...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3137...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3219...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='32f9...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='33da...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='34bb...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='359d...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='367d...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='375e...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3840...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3921...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3a01...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3ae2...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3bc3...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3ca4...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3d85...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3e66...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3f48...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4028...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4109...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='41ea...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='42cb...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='43ac...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='448d...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='456e...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='464f...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='480f...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='48f0...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='49d1...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4ab4...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4b95...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4c76...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4d57...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4e38...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4f19...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4ffa...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='50dd...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='51bc...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='529d...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='537e...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5460...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5540...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5621...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5702...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='57e3...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='58c4...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='59a7...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5a86...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5b67...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5c48...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5d29...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5e0a...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5eeb...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5fcc...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='60ad...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='618e...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='626f...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6350...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6431...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6512...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='65f3...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='66d4...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='67b5...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6896...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6978...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6a58...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6b39...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6c1a...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6cfb...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6ddc...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6ebd...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6f9e...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='707f...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7160...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7241...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7322...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7403...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='74e4...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='75c5...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='76a6...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7787...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7868...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7948...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7a29...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7b0a...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7beb...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7ccc...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7dad...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7e8f...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7f70...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8051...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8132...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8213...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='82f4...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='83d5...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='84b6...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8597...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8678...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8759...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='883a...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='891b...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='89fc...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8add...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8bbe...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8c9f...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8d80...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8e61...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8f42...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9023...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9104...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='91e5...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='92c6...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='93a8...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9488...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9569...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='964a...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='972b...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='980c...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='98ed...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='99ce...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9aaf...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9b90...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9c71...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9d52...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9e33...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9f14...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9ff5...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a0d6...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a1b7...', 5, v='-184...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a298...', 5, v='-631...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a379...', 5, v='1564...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a45a...', 5, v='-66"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a53b...', 5, v='-393...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a61c...', 5, v='-691...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a6fd...', 5, v='-883...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a7e0...', 5, v='-157...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a8c0...', 5, v='-220...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a9a0...', 5, v='109"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='aa81...', 5, v='-420...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ab62...', 5, v='-859...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ac43...', 5, v='-628...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ad24...', 5, v='516"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ae05...', 5, v='1839...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='aee6...', 5, v='293"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='afc7...', 5, v='1185...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b0a8...', 5, v='3946...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b26a...', 5, v='4230...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b34b...', 5, v='3689...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b42c...', 5, v='248"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b50d...', 5, v='430"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b5ee...', 5, v='1026...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b6cf...', 5, v='-526...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b7b0...', 5, v='-258...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b891...', 5, v='-65"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b972...', 5, v='-489...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ba53...', 5, v='-842...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bb34...', 5, v='1082...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bc15...', 5, v='310"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bcf6...', 5, v='-111...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bdd8...', 5, v='3632...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='beb8...', 5, v='513"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bf99...', 5, v='214"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c07a...', 5, v='-292...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c15b...', 5, v='-127...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c23c...', 5, v='495"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c31d...', 5, v='1815...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c3fe...', 5, v='818"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c4df...', 5, v='1539...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c5c0...', 5, v='680"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c6a1...', 5, v='712"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c782...', 5, v='1280...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c863...', 5, v='397"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c944...', 5, v='493"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ca25...', 5, v='250"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='cb06...', 5, v='785"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='cbe7...', 5, v='-201...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ccc8...', 5, v='2156...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='cda9...', 5, v='2937...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ce8a...', 5, v='2107...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='cf6b...', 5, v='2824...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d04c...', 5, v='2269...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d12d...', 5, v='1441...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d20e...', 5, v='-297...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d2f0...', 5, v='-228...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d3d0...', 5, v='-118...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d4b1...', 5, v='-964...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d592...', 5, v='-442...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d673...', 5, v='261"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d754...', 5, v='1309...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d835...', 5, v='-849...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d916...', 5, v='178"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d9f7...', 5, v='1111...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='dad8...', 5, v='2750...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='dbb9...', 5, v='2769...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='dc9a...', 5, v='2973...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='dd7b...', 5, v='1327...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='de5c...', 5, v='454"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='df3d...', 5, v='199"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e01d...', 5, v='167"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e0fe...', 5, v='556"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e1df...', 5, v='416"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e2c0...', 5, v='-370...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e3a1...', 5, v='-115...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e482...', 5, v='93"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e563...', 5, v='-843...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e644...', 5, v='171"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e725...', 5, v='-646...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e806...', 5, v='-723...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e8e7...', 5, v='2665...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e9c8...', 5, v='837"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='eaa9...', 5, v='698"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='eb8a...', 5, v='1097...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ec6b...', 5, v='2649...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ed4c...', 5, v='-495...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ee2d...', 5, v='1165...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ef0e...', 5, v='542"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='eff0...', 5, v='1871...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f0d1...', 5, v='979"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f1b2...', 5, v='1210...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f293...', 5, v='-356...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f374...', 5, v='1654...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f455...', 5, v='1368...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f536...', 5, v='1462...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f617...', 5, v='1612...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f6f8...', 5, v='1309...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f7d9...', 5, v='1886...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f8ba...', 5, v='1136...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f99b...', 5, v='1169...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fa7c...', 5, v='1403...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fb5d...', 5, v='1316...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fc3e...', 5, v='-104...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fd1f...', 5, v='-119...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fe00...', 5, v='-160...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fee1...', 5, v='-199...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ffc2...', 5, v='-252...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='100a...', 6, v='585"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1018...', 6, v='1069...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1026...', 6, v='1973...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1034...', 6, v='1831...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1042...', 6, v='1127...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1050...', 6, v='1767...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='105e...', 6, v='1343...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='106c...', 6, v='1564...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='107a...', 6, v='849"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1088...', 6, v='805"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1096...', 6, v='1093...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10a4...', 6, v='880"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10b2...', 6, v='1254...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10c1...', 6, v='2664...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10cf...', 6, v='1368...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10dd...', 6, v='1009...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10eb...', 6, v='208"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10f9...', 6, v='22"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1107...', 6, v='1142...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1115...', 6, v='286"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1123...', 6, v='-116...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1131...', 6, v='712"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='113f...', 6, v='227"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='114d...', 6, v='236"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='115b...', 6, v='372"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1169...', 6, v='1441...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1177...', 6, v='2015...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1185...', 6, v='1211...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1193...', 6, v='1284...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11a2...', 6, v='369"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11b0...', 6, v='-310...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11be...', 6, v='-802...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11cc...', 6, v='781"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11da...', 6, v='491"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11e8...', 6, v='1023...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11f6...', 6, v='516"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1205...', 6, v='1"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1213...', 6, v='1"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1221...', 6, v='2"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='122f...', 6, v='1"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='123d...', 6, v='1"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='124b...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1259...', 6, v='1"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1267...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1276...', 6, v='-1"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1283...', 6, v='-1"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1291...', 6, v='-1"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='129f...', 6, v='-1"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12ad...', 6, v='-1"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12bb...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12c9...', 6, v='1"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12d7...', 6, v='1"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12e5...', 6, v='2"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12f3...', 6, v='1"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1301...', 6, v='1"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='130f...', 6, v='1"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='131d...', 6, v='1"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='132b...', 6, v='1"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1339...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1347...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1355...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1364...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1372...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1380...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='138e...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='139c...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13aa...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13b8...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13c6...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13d4...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13e2...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13f0...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13fe...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='140c...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='141a...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1428...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1436...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1445...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1453...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1461...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='146f...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='147d...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='148b...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1499...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14a7...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14b5...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14c3...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14d1...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14df...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14ed...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14fb...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1509...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1517...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1526...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1534...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1542...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1550...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='155e...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='156c...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='157a...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1588...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1596...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15a4...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15b2...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15c0...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15ce...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15dc...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15ea...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15f8...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1607...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1615...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1623...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1631...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='163f...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='164d...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='165b...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1669...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1677...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1685...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1693...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16a1...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16af...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16bd...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16cb...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16d9...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16e8...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16f6...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1704...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1712...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1720...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='172e...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='173c...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='174a...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1758...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1766...', 6, v='2274...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1774...', 6, v='1775...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1782...', 6, v='1153...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1790...', 6, v='769"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='179e...', 6, v='-846...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17ac...', 6, v='-236...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17ba...', 6, v='-296...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17c9...', 6, v='-251...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17d7...', 6, v='-244...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17e5...', 6, v='-286...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17f3...', 6, v='-227...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1801...', 6, v='-125...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='180f...', 6, v='-716...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='181d...', 6, v='-148...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='182b...', 6, v='-200...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1839...', 6, v='-105...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1847...', 6, v='-978...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1855...', 6, v='-126...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1863...', 6, v='-317...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1871...', 6, v='-266...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='187f...', 6, v='-254...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='188d...', 6, v='-237...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='189c...', 6, v='-112...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18b8...', 6, v='1219...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18c6...', 6, v='-106...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18d4...', 6, v='-151...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18e2...', 6, v='-128...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18f0...', 6, v='-190...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18fe...', 6, v='-162...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='190c...', 6, v='-778...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='191a...', 6, v='-173...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1928...', 6, v='-174...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1936...', 6, v='-187...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1944...', 6, v='-120...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1952...', 6, v='-211...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1960...', 6, v='1619...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='196e...', 6, v='-764...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='197c...', 6, v='-827...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='198b...', 6, v='40"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1999...', 6, v='-199...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19b5...', 6, v='-967...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19c3...', 6, v='-680...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19d1...', 6, v='-385...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19df...', 6, v='-241...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19ed...', 6, v='371"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19ee...', 6, v='471"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19fb...', 6, v='61"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a09...', 6, v='-244...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a17...', 6, v='-344...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a25...', 6, v='-386...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a33...', 6, v='-165...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a41...', 6, v='-227...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a4f...', 6, v='-413...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a5e...', 6, v='-373...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a6c...', 6, v='-265...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a7a...', 6, v='-328...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a88...', 6, v='-337...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a96...', 6, v='-270...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1aa4...', 6, v='-198...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ab2...', 6, v='-797...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ac0...', 6, v='-204...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ace...', 6, v='-279...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1adc...', 6, v='-193...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1aea...', 6, v='-209...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1af8...', 6, v='-221...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1b06...', 6, v='-267...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1b14...', 6, v='-253...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c74...', 6, v='453"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c82...', 6, v='-157...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c90...', 6, v='1143...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c9e...', 6, v='-146...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cac...', 6, v='-100...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cba...', 6, v='-140...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cc8...', 6, v='2949...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cd6...', 6, v='2229...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ce4...', 6, v='1022...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cf2...', 6, v='-162...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d01...', 6, v='-183...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d0f...', 6, v='-211...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d1d...', 6, v='-767...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d2b...', 6, v='-792...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d39...', 6, v='173"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d47...', 6, v='776"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d55...', 6, v='1249...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d63...', 6, v='-957...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d71...', 6, v='-911...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d7f...', 6, v='-243...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d8d...', 6, v='-65"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d9b...', 6, v='-308...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1da9...', 6, v='-811...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1db7...', 6, v='-806...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1dc5...', 6, v='-952...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1dd3...', 6, v='-716...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1de1...', 6, v='-161...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1df0...', 6, v='-191...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1dfe...', 6, v='-180...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e0c...', 6, v='-222...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e1a...', 6, v='-227...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e28...', 6, v='-231...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e36...', 6, v='-228...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e44...', 6, v='-233...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e52...', 6, v='-186...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e60...', 6, v='-213...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e6e...', 6, v='-220...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e7c...', 6, v='-296...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e8a...', 6, v='-449...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e98...', 6, v='-142...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ea6...', 6, v='-422...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1eb4...', 6, v='-365...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ec2...', 6, v='-581...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ed1...', 6, v='-263...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1edf...', 6, v='-325...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1eed...', 6, v='-142...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1efb...', 6, v='-355...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f09...', 6, v='-310...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f17...', 6, v='496"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f25...', 6, v='660"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f33...', 6, v='1246...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f41...', 6, v='2889...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f4f...', 6, v='1532...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f5d...', 6, v='-143...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f6b...', 6, v='-518...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f79...', 6, v='225"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f87...', 6, v='-166...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f95...', 6, v='-233...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fa4...', 6, v='-172...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fb2...', 6, v='-148...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fc0...', 6, v='-151...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fce...', 6, v='-476...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fdc...', 6, v='-193...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fea...', 6, v='128"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ff8...', 6, v='376"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2006...', 6, v='2872...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2014...', 6, v='408"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2022...', 6, v='1923...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2030...', 6, v='1830...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='203e...', 6, v='1798...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='204c...', 6, v='334"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='205a...', 6, v='1260...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2068...', 6, v='1815...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2076...', 6, v='2272...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2084...', 6, v='262"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2093...', 6, v='-387...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20a1...', 6, v='-613...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20af...', 6, v='-251...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20bd...', 6, v='-885...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20cb...', 6, v='551"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20d9...', 6, v='48"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20e7...', 6, v='-982...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20f5...', 6, v='-161...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2103...', 6, v='-112...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2111...', 6, v='-381...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='211f...', 6, v='-441...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='212d...', 6, v='71"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='213b...', 6, v='1020...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2149...', 6, v='760"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2157...', 6, v='-319...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2165...', 6, v='-114...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2174...', 6, v='302"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2182...', 6, v='-319...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2190...', 6, v='-582...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='219e...', 6, v='408"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21ac...', 6, v='1031...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21ba...', 6, v='1139...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21c8...', 6, v='2082...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21d6...', 6, v='-120...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21e4...', 6, v='622"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21f2...', 6, v='456"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2200...', 6, v='-736...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='220e...', 6, v='-818...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='221c...', 6, v='1684...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='222a...', 6, v='307"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2238...', 6, v='-801...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2247...', 6, v='-125...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2255...', 6, v='3308...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2263...', 6, v='506"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2271...', 6, v='639"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='227f...', 6, v='1963...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='228d...', 6, v='2867...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='229b...', 6, v='-831...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22a9...', 6, v='-270...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22b7...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22c5...', 6, v='2010...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22d3...', 6, v='3408...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22e1...', 6, v='3190...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22ef...', 6, v='-187...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22fd...', 6, v='-225...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='230b...', 6, v='531"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2319...', 6, v='-823...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2327...', 6, v='62"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2336...', 6, v='1079...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2344...', 6, v='1547...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2352...', 6, v='900"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2360...', 6, v='112"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='236e...', 6, v='1780...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='237c...', 6, v='1407...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='238a...', 6, v='298"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2398...', 6, v='565"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23a6...', 6, v='-311...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23b4...', 6, v='-657...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23c2...', 6, v='168"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23d0...', 6, v='647"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23de...', 6, v='1427...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23ec...', 6, v='829"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23fa...', 6, v='-5"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2408...', 6, v='1197...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2417...', 6, v='3751...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2425...', 6, v='2991...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2433...', 6, v='2801...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2441...', 6, v='-118...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='244f...', 6, v='-828...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='246b...', 6, v='-799...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2479...', 6, v='57"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2487...', 6, v='4601...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2495...', 6, v='1911...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24a3...', 6, v='799"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24b1...', 6, v='-972...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24bf...', 6, v='-708...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24cd...', 6, v='-790...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24db...', 6, v='-490...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24e9...', 6, v='-131...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24f8...', 6, v='-825...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2506...', 6, v='-101...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2514...', 6, v='-117...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2522...', 6, v='-35"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2530...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='253e...', 6, v='1352...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='254c...', 6, v='1059...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='255a...', 6, v='1290...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2568...', 6, v='2079...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2576...', 6, v='3618...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2584...', 6, v='-468...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2592...', 6, v='-247...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25a0...', 6, v='-556...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25ae...', 6, v='189"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25bc...', 6, v='260"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25ca...', 6, v='816"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25d9...', 6, v='2489...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25e7...', 6, v='2732...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25f5...', 6, v='2234...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2603...', 6, v='57"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2611...', 6, v='1219...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='261f...', 6, v='632"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='262d...', 6, v='-136...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='263b...', 6, v='38"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2649...', 6, v='-980...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2657...', 6, v='-150...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2665...', 6, v='-211...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2673...', 6, v='-161...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2681...', 6, v='-131...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='268f...', 6, v='-432...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='269d...', 6, v='309"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26ab...', 6, v='685"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26ba...', 6, v='1692...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26c8...', 6, v='1899...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26d6...', 6, v='3622...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26e4...', 6, v='2709...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26f2...', 6, v='3037...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2700...', 6, v='2898...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='270e...', 6, v='3251...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='271c...', 6, v='186"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='272a...', 6, v='-636...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2738...', 6, v='-421...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2746...', 6, v='-729...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2754...', 6, v='-978...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2762...', 6, v='2670...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2770...', 6, v='1255...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='277e...', 6, v='-496...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 5) +SAX.endElementNs(par, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(par, NULL, NULL, 0, 2, 0, memind='4246...', 6, h='3dc1...', 8) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='0" v...', 1, v='-431...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e08"...', 3, v='-416...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c32...', 4, v='-410...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2a3c...', 4, v='-409...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3835...', 4, v='-398...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4645...', 4, v='-393...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5455...', 4, v='-443...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6265...', 4, v='-532...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7075...', 4, v='-629...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7e85...', 4, v='-733...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8c96...', 4, v='-754...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9aa5...', 4, v='-724...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a8b6...', 4, v='-686...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b6c5...', 4, v='-645...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c4d7...', 4, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d30b...', 4, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e0f6...', 4, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ef06...', 4, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fd17...', 4, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10b2...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1193...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1274...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1355...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1436...', 5, v='-9"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1518...', 5, v='-9"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15f8...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16d9...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17ba...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='189b...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='197c...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a5d...', 5, v='-9"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1b3e...', 5, v='-9"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c1f...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d00...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1de1...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ec2...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fa3...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2084...', 5, v='-9"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2165...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2246...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2327...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2408...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24e9...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25ca...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26ab...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='278c...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='286d...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='294e...', 5, v='-9"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2a30...', 5, v='-9"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2b10...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2bf1...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2cd2...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2db3...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2e94...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2f75...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3056...', 5, v='-9"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3137...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3219...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='32f9...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='33da...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='34bb...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='359d...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='367d...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='375e...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3840...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3921...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3a01...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3ae2...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3bc3...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3ca4...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3d85...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3e66...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3f48...', 5, v='-9"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4028...', 5, v='-9"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4109...', 5, v='-9"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='41ea...', 5, v='-9"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='42cb...', 5, v='-9"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='43ac...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='448d...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='456e...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='464f...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='480f...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='48f0...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='49d1...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4ab4...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4b95...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4c76...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4d57...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4e38...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4f19...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4ffa...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='50dd...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='51bc...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='529d...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='537e...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5460...', 5, v='-9"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5540...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5621...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5702...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='57e3...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='58c4...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='59a7...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5a86...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5b67...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5c48...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5d29...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5e0a...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5eeb...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5fcc...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='60ad...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='618e...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='626f...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6350...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6431...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6512...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='65f3...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='66d4...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='67b5...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6896...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6978...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6a58...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6b39...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6c1a...', 5, v='-9"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6cfb...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6ddc...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6ebd...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6f9e...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='707f...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7160...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7241...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7322...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7403...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='74e4...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='75c5...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='76a6...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7787...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7868...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7948...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7a29...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7b0a...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7beb...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7ccc...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7dad...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7e8f...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7f70...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8051...', 5, v='-9"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8132...', 5, v='-9"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8213...', 5, v='-9"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='82f4...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='83d5...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='84b6...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8597...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8678...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8759...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='883a...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='891b...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='89fc...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8add...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8bbe...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8c9f...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8d80...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8e61...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8f42...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9023...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9104...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='91e5...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='92c6...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='93a8...', 5, v='-9"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9488...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9569...', 5, v='-9"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='964a...', 5, v='-9"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='972b...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='980c...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='98ed...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='99ce...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9aaf...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9b90...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9c71...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9d52...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9e33...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9f14...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9ff5...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a0d6...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a1b7...', 5, v='-646...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a298...', 5, v='-354...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a379...', 5, v='-986...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a45a...', 5, v='697"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a53b...', 5, v='776"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a61c...', 5, v='925"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a6fd...', 5, v='125"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a7e0...', 5, v='456"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a8c0...', 5, v='903"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a9a0...', 5, v='278"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='aa81...', 5, v='27"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ab62...', 5, v='43"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ac43...', 5, v='173"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ad24...', 5, v='947"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ae05...', 5, v='728"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='aee6...', 5, v='-452...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='afc7...', 5, v='-117...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b0a8...', 5, v='23"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b26a...', 5, v='182"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b34b...', 5, v='-152...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b42c...', 5, v='-423...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b50d...', 5, v='-705...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b5ee...', 5, v='-790...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b6cf...', 5, v='-157...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b7b0...', 5, v='-202...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b891...', 5, v='-175...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b972...', 5, v='-172...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ba53...', 5, v='-190...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bb34...', 5, v='-741...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bc15...', 5, v='-812...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bcf6...', 5, v='-891...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bdd8...', 5, v='652"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='beb8...', 5, v='411"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bf99...', 5, v='516"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c07a...', 5, v='398"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c15b...', 5, v='382"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c23c...', 5, v='470"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c31d...', 5, v='591"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c3fe...', 5, v='267"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c4df...', 5, v='770"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c5c0...', 5, v='164"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c6a1...', 5, v='438"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c782...', 5, v='-43"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c863...', 5, v='72"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c944...', 5, v='249"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ca25...', 5, v='201"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='cb06...', 5, v='115"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='cbe7...', 5, v='-425...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ccc8...', 5, v='-229...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='cda9...', 5, v='-284...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ce8a...', 5, v='-247...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='cf6b...', 5, v='-135...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d04c...', 5, v='-54"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d12d...', 5, v='96"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d20e...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d2f0...', 5, v='16"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d3d0...', 5, v='598"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d4b1...', 5, v='721"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d592...', 5, v='818"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d673...', 5, v='1067...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d754...', 5, v='1245...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d835...', 5, v='-117...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d916...', 5, v='-721...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d9f7...', 5, v='-150...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='dad8...', 5, v='-208...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='dbb9...', 5, v='-255...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='dc9a...', 5, v='-234...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='dd7b...', 5, v='-292...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='de5c...', 5, v='-271...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='df3d...', 5, v='-285...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e01d...', 5, v='-292...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e0fe...', 5, v='-280...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e1df...', 5, v='-303...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e2c0...', 5, v='-401...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e3a1...', 5, v='-391...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e482...', 5, v='-341...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e563...', 5, v='-344...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e644...', 5, v='-256...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e725...', 5, v='-213...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e806...', 5, v='-176...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e8e7...', 5, v='-465...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e9c8...', 5, v='-702...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='eaa9...', 5, v='-647...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='eb8a...', 5, v='-676...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ec6b...', 5, v='-509...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ed4c...', 5, v='-215...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ee2d...', 5, v='-235...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ef0e...', 5, v='-317...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='eff0...', 5, v='-403...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f0d1...', 5, v='-433...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f1b2...', 5, v='-465...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f293...', 5, v='-466...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f374...', 5, v='-434...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f455...', 5, v='-457...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f536...', 5, v='-492...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f617...', 5, v='-460...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f6f8...', 5, v='-486...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f7d9...', 5, v='-430...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f8ba...', 5, v='-389...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f99b...', 5, v='-378...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fa7c...', 5, v='-298...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fb5d...', 5, v='-309...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fc3e...', 5, v='-333...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fd1f...', 5, v='-268...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fe00...', 5, v='-252...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fee1...', 5, v='-207...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ffc2...', 5, v='-198...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='100a...', 6, v='-178...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1018...', 6, v='-179...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1026...', 6, v='-207...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1034...', 6, v='-269...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1042...', 6, v='-393...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1050...', 6, v='-440...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='105e...', 6, v='-436...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='106c...', 6, v='-469...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='107a...', 6, v='-430...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1088...', 6, v='-392...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1096...', 6, v='-410...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10a4...', 6, v='-418...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10b2...', 6, v='-434...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10c1...', 6, v='-416...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10cf...', 6, v='-445...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10dd...', 6, v='-413...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10eb...', 6, v='-449...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10f9...', 6, v='-388...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1107...', 6, v='-329...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1115...', 6, v='-286...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1123...', 6, v='-266...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1131...', 6, v='-177...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='113f...', 6, v='-181...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='114d...', 6, v='-182...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='115b...', 6, v='-180...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1169...', 6, v='-159...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1177...', 6, v='-205...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1185...', 6, v='-296...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1193...', 6, v='-362...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11a2...', 6, v='-483...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11b0...', 6, v='-429...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11be...', 6, v='-525...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11cc...', 6, v='-440...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11da...', 6, v='-432...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11e8...', 6, v='-442...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11f6...', 6, v='-395...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1205...', 6, v='-4"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1213...', 6, v='-4"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1221...', 6, v='-4"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='122f...', 6, v='-3"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='123d...', 6, v='-3"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='124b...', 6, v='-3"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1259...', 6, v='-2"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1267...', 6, v='-2"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1276...', 6, v='-2"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1283...', 6, v='-2"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1291...', 6, v='-2"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='129f...', 6, v='-2"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12ad...', 6, v='-2"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12bb...', 6, v='-1"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12c9...', 6, v='-2"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12d7...', 6, v='-2"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12e5...', 6, v='-3"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12f3...', 6, v='-2"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1301...', 6, v='-4"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='130f...', 6, v='-3"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='131d...', 6, v='-3"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='132b...', 6, v='-3"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1339...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1347...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1355...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1364...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1372...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1380...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='138e...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='139c...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13aa...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13b8...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13c6...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13d4...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13e2...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13f0...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13fe...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='140c...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='141a...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1428...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1436...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1445...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1453...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1461...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='146f...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='147d...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='148b...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1499...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14a7...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14b5...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14c3...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14d1...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14df...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14ed...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14fb...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1509...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1517...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1526...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1534...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1542...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1550...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='155e...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='156c...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='157a...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1588...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1596...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15a4...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15b2...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15c0...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15ce...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15dc...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15ea...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15f8...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1607...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1615...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1623...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1631...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='163f...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='164d...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='165b...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1669...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1677...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1685...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1693...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16a1...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16af...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16bd...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16cb...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16d9...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16e8...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16f6...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1704...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1712...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1720...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='172e...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='173c...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='174a...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1758...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1766...', 6, v='-686...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1774...', 6, v='-679...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1782...', 6, v='-725...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1790...', 6, v='-673...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='179e...', 6, v='-603...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17ac...', 6, v='-589...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17ba...', 6, v='-606...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17c9...', 6, v='-548...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17d7...', 6, v='-544...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17e5...', 6, v='-533...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17f3...', 6, v='-498...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1801...', 6, v='-519...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='180f...', 6, v='-631...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='181d...', 6, v='-683...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='182b...', 6, v='-785...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1839...', 6, v='-135...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1847...', 6, v='-133...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1855...', 6, v='-127...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1863...', 6, v='-118...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1871...', 6, v='-123...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='187f...', 6, v='-117...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='188d...', 6, v='-126...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='189c...', 6, v='-118...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18b8...', 6, v='-747...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18c6...', 6, v='-812...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18d4...', 6, v='-769...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18e2...', 6, v='-653...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18f0...', 6, v='-617...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18fe...', 6, v='-566...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='190c...', 6, v='-448...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='191a...', 6, v='-430...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1928...', 6, v='-426...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1936...', 6, v='-411...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1944...', 6, v='-410...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1952...', 6, v='-451...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1960...', 6, v='-513...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='196e...', 6, v='-603...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='197c...', 6, v='-639...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='198b...', 6, v='-589...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1999...', 6, v='-669...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19b5...', 6, v='-660...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19c3...', 6, v='-615...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19d1...', 6, v='-612...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19df...', 6, v='-622...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19ed...', 6, v='-604...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19ee...', 6, v='-600...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19fb...', 6, v='-229...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a09...', 6, v='-254...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a17...', 6, v='-308...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a25...', 6, v='-326...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a33...', 6, v='-226...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a41...', 6, v='-215...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a4f...', 6, v='-153...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a5e...', 6, v='-167...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a6c...', 6, v='-960...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a7a...', 6, v='-112...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a88...', 6, v='-106...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a96...', 6, v='-505...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1aa4...', 6, v='-536...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ab2...', 6, v='-991...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ac0...', 6, v='-181...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ace...', 6, v='-257...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1adc...', 6, v='-284...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1aea...', 6, v='-260...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1af8...', 6, v='-292...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1b06...', 6, v='-211...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1b14...', 6, v='-207...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c74...', 6, v='354"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c82...', 6, v='438"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c90...', 6, v='3408...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c9e...', 6, v='3269...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cac...', 6, v='3655...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cba...', 6, v='3521...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cc8...', 6, v='5431...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cd6...', 6, v='5560...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ce4...', 6, v='5660...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cf2...', 6, v='5623...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d01...', 6, v='5896...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d0f...', 6, v='6656...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d1d...', 6, v='6647...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d2b...', 6, v='6733...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d39...', 6, v='6914...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d47...', 6, v='6873...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d55...', 6, v='6691...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d63...', 6, v='5814...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d71...', 6, v='5617...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d7f...', 6, v='5608...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d8d...', 6, v='-323...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d9b...', 6, v='-365...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1da9...', 6, v='-362...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1db7...', 6, v='-344...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1dc5...', 6, v='-360...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1dd3...', 6, v='-373...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1de1...', 6, v='-599...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1df0...', 6, v='-671...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1dfe...', 6, v='-658...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e0c...', 6, v='-676...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e1a...', 6, v='-680...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e28...', 6, v='-652...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e36...', 6, v='-617...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e44...', 6, v='-567...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e52...', 6, v='-491...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e60...', 6, v='-491...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e6e...', 6, v='-480...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e7c...', 6, v='-198...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e8a...', 6, v='-181...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e98...', 6, v='-183...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ea6...', 6, v='-225...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1eb4...', 6, v='-232...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ec2...', 6, v='-268...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ed1...', 6, v='-267...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1edf...', 6, v='-277...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1eed...', 6, v='-268...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1efb...', 6, v='-265...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f09...', 6, v='-255...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f17...', 6, v='-235...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f25...', 6, v='-231...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f33...', 6, v='-258...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f41...', 6, v='-281...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f4f...', 6, v='-318...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f5d...', 6, v='-357...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f6b...', 6, v='-354...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f79...', 6, v='-314...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f87...', 6, v='-334...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f95...', 6, v='-313...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fa4...', 6, v='-280...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fb2...', 6, v='-250...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fc0...', 6, v='-249...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fce...', 6, v='-215...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fdc...', 6, v='-213...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fea...', 6, v='-215...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ff8...', 6, v='-249...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2006...', 6, v='-236...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2014...', 6, v='-351...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2022...', 6, v='-456...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2030...', 6, v='-534...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='203e...', 6, v='-605...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='204c...', 6, v='-579...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='205a...', 6, v='-534...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2068...', 6, v='-539...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2076...', 6, v='-597...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2084...', 6, v='-609...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2093...', 6, v='-677...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20a1...', 6, v='-637...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20af...', 6, v='-547...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20bd...', 6, v='-538...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20cb...', 6, v='-460...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20d9...', 6, v='-431...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20e7...', 6, v='-405...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20f5...', 6, v='-386...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2103...', 6, v='-348...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2111...', 6, v='-311...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='211f...', 6, v='-301...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='212d...', 6, v='-294...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='213b...', 6, v='-281...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2149...', 6, v='-364...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2157...', 6, v='-449...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2165...', 6, v='-579...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2174...', 6, v='-619...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2182...', 6, v='-617...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2190...', 6, v='-610...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='219e...', 6, v='-621...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21ac...', 6, v='-589...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21ba...', 6, v='-598...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21c8...', 6, v='-563...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21d6...', 6, v='-621...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21e4...', 6, v='-578...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21f2...', 6, v='-572...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2200...', 6, v='-553...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='220e...', 6, v='-540...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='221c...', 6, v='-460...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='222a...', 6, v='-387...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2238...', 6, v='-361...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2247...', 6, v='-329...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2255...', 6, v='-168...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2263...', 6, v='-207...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2271...', 6, v='-205...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='227f...', 6, v='-167...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='228d...', 6, v='-179...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='229b...', 6, v='-348...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22a9...', 6, v='-391...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22b7...', 6, v='-457...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22c5...', 6, v='-478...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22d3...', 6, v='-445...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22e1...', 6, v='-469...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22ef...', 6, v='-483...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22fd...', 6, v='-465...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='230b...', 6, v='-445...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2319...', 6, v='-539...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2327...', 6, v='-553...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2336...', 6, v='-586...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2344...', 6, v='-522...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2352...', 6, v='-516...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2360...', 6, v='-525...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='236e...', 6, v='-438...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='237c...', 6, v='-421...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='238a...', 6, v='-401...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2398...', 6, v='-322...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23a6...', 6, v='-331...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23b4...', 6, v='-318...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23c2...', 6, v='-297...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23d0...', 6, v='-294...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23de...', 6, v='-293...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23ec...', 6, v='-357...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23fa...', 6, v='-454...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2408...', 6, v='-511...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2417...', 6, v='-573...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2425...', 6, v='-651...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2433...', 6, v='-677...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2441...', 6, v='-675...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='244f...', 6, v='-636...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='246b...', 6, v='-654...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2479...', 6, v='-627...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2487...', 6, v='-540...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2495...', 6, v='-579...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24a3...', 6, v='-564...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24b1...', 6, v='-574...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24bf...', 6, v='-544...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24cd...', 6, v='-544...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24db...', 6, v='-455...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24e9...', 6, v='-401...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24f8...', 6, v='-348...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2506...', 6, v='-361...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2514...', 6, v='-355...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2522...', 6, v='-340...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2530...', 6, v='-360...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='253e...', 6, v='-402...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='254c...', 6, v='-418...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='255a...', 6, v='-499...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2568...', 6, v='-581...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2576...', 6, v='-559...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2584...', 6, v='-152...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2592...', 6, v='-869...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25a0...', 6, v='-457...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25ae...', 6, v='-631...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25bc...', 6, v='-610...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25ca...', 6, v='-575...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25d9...', 6, v='-576...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25e7...', 6, v='-564...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25f5...', 6, v='-524...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2603...', 6, v='-556...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2611...', 6, v='-487...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='261f...', 6, v='-461...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='262d...', 6, v='-461...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='263b...', 6, v='-361...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2649...', 6, v='-346...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2657...', 6, v='-356...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2665...', 6, v='-367...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2673...', 6, v='-361...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2681...', 6, v='-362...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='268f...', 6, v='-386...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='269d...', 6, v='-396...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26ab...', 6, v='-388...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26ba...', 6, v='-438...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26c8...', 6, v='-427...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26d6...', 6, v='-396...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26e4...', 6, v='-400...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26f2...', 6, v='-356...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2700...', 6, v='-387...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='270e...', 6, v='-356...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='271c...', 6, v='-469...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='272a...', 6, v='-519...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2738...', 6, v='-521...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2746...', 6, v='-503...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2754...', 6, v='-496...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2762...', 6, v='-404...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2770...', 6, v='-370...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='277e...', 6, v='-321...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 5) +SAX.endElementNs(par, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(par, NULL, NULL, 0, 2, 0, memind='4382...', 6, h='3dc1...', 8) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='0" v...', 1, v='-110...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e08"...', 3, v='-128...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c32...', 4, v='-135...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2a3c...', 4, v='-142...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3835...', 4, v='-124...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4645...', 4, v='-110...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5455...', 4, v='-909...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6265...', 4, v='-147...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7075...', 4, v='-152...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7e85...', 4, v='-143...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8c96...', 4, v='-178...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9aa5...', 4, v='-175...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a8b6...', 4, v='-168...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b6c5...', 4, v='-174...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c4d7...', 4, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d30b...', 4, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e0f6...', 4, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ef06...', 4, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fd17...', 4, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10b2...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1193...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1274...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1355...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1436...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1518...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15f8...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16d9...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17ba...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='189b...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='197c...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a5d...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1b3e...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c1f...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d00...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1de1...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ec2...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fa3...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2084...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2165...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2246...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2327...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2408...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24e9...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25ca...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26ab...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='278c...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='286d...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='294e...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2a30...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2b10...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2bf1...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2cd2...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2db3...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2e94...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2f75...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3056...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3137...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3219...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='32f9...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='33da...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='34bb...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='359d...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='367d...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='375e...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3840...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3921...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3a01...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3ae2...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3bc3...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3ca4...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3d85...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3e66...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3f48...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4028...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4109...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='41ea...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='42cb...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='43ac...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='448d...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='456e...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='464f...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='480f...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='48f0...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='49d1...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4ab4...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4b95...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4c76...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4d57...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4e38...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4f19...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4ffa...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='50dd...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='51bc...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='529d...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='537e...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5460...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5540...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5621...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5702...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='57e3...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='58c4...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='59a7...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5a86...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5b67...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5c48...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5d29...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5e0a...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5eeb...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5fcc...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='60ad...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='618e...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='626f...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6350...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6431...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6512...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='65f3...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='66d4...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='67b5...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6896...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6978...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6a58...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6b39...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6c1a...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6cfb...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6ddc...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6ebd...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6f9e...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='707f...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7160...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7241...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7322...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7403...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='74e4...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='75c5...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='76a6...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7787...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7868...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7948...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7a29...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7b0a...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7beb...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7ccc...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7dad...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7e8f...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7f70...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8051...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8132...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8213...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='82f4...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='83d5...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='84b6...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8597...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8678...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8759...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='883a...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='891b...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='89fc...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8add...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8bbe...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8c9f...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8d80...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8e61...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8f42...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9023...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9104...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='91e5...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='92c6...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='93a8...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9488...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9569...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='964a...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='972b...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='980c...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='98ed...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='99ce...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9aaf...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9b90...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9c71...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9d52...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9e33...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9f14...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9ff5...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a0d6...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a1b7...', 5, v='-159...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a298...', 5, v='-500...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a379...', 5, v='1379...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a45a...', 5, v='-45"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a53b...', 5, v='-346...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a61c...', 5, v='-580...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a6fd...', 5, v='-752...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a7e0...', 5, v='-136...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a8c0...', 5, v='-190...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a9a0...', 5, v='101"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='aa81...', 5, v='-366...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ab62...', 5, v='-740...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ac43...', 5, v='-550...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ad24...', 5, v='432"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ae05...', 5, v='1595...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='aee6...', 5, v='275"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='afc7...', 5, v='1019...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b0a8...', 5, v='3444...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b26a...', 5, v='3629...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b34b...', 5, v='3203...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b42c...', 5, v='215"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b50d...', 5, v='380"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b5ee...', 5, v='890"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b6cf...', 5, v='-446...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b7b0...', 5, v='-200...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b891...', 5, v='-44"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b972...', 5, v='-424...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ba53...', 5, v='-718...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bb34...', 5, v='946"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bc15...', 5, v='276"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bcf6...', 5, v='-944...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bdd8...', 5, v='3129...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='beb8...', 5, v='453"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bf99...', 5, v='194"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c07a...', 5, v='-246...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c15b...', 5, v='-122...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c23c...', 5, v='430"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c31d...', 5, v='1582...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c3fe...', 5, v='720"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c4df...', 5, v='1333...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c5c0...', 5, v='588"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c6a1...', 5, v='642"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c782...', 5, v='1096...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c863...', 5, v='313"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c944...', 5, v='374"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ca25...', 5, v='204"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='cb06...', 5, v='692"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='cbe7...', 5, v='-196...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ccc8...', 5, v='1888...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='cda9...', 5, v='2502...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ce8a...', 5, v='1840...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='cf6b...', 5, v='2437...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d04c...', 5, v='1930...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d12d...', 5, v='1219...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d20e...', 5, v='-250...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d2f0...', 5, v='-197...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d3d0...', 5, v='-102...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d4b1...', 5, v='-107...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d592...', 5, v='-388...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d673...', 5, v='229"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d754...', 5, v='1131...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d835...', 5, v='-726...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d916...', 5, v='166"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d9f7...', 5, v='965"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='dad8...', 5, v='2341...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='dbb9...', 5, v='2354...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='dc9a...', 5, v='2565...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='dd7b...', 5, v='1136...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='de5c...', 5, v='367"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='df3d...', 5, v='173"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e01d...', 5, v='156"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e0fe...', 5, v='460"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e1df...', 5, v='358"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e2c0...', 5, v='-308...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e3a1...', 5, v='-100...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e482...', 5, v='93"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e563...', 5, v='-723...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e644...', 5, v='147"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e725...', 5, v='-551...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e806...', 5, v='-626...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e8e7...', 5, v='2316...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e9c8...', 5, v='714"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='eaa9...', 5, v='600"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='eb8a...', 5, v='953"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ec6b...', 5, v='2267...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ed4c...', 5, v='-403...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ee2d...', 5, v='999"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ef0e...', 5, v='475"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='eff0...', 5, v='1663...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f0d1...', 5, v='829"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f1b2...', 5, v='1055...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f293...', 5, v='-314...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f374...', 5, v='1431...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f455...', 5, v='1201...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f536...', 5, v='1280...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f617...', 5, v='1431...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f6f8...', 5, v='1145...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f7d9...', 5, v='1635...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f8ba...', 5, v='957"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f99b...', 5, v='1019...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fa7c...', 5, v='1219...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fb5d...', 5, v='1143...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fc3e...', 5, v='-893...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fd1f...', 5, v='-101...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fe00...', 5, v='-138...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fee1...', 5, v='-182...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ffc2...', 5, v='-220...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='100a...', 6, v='502"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1018...', 6, v='940"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1026...', 6, v='1719...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1034...', 6, v='1592...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1042...', 6, v='960"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1050...', 6, v='1537...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='105e...', 6, v='1177...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='106c...', 6, v='1337...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='107a...', 6, v='737"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1088...', 6, v='723"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1096...', 6, v='917"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10a4...', 6, v='794"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10b2...', 6, v='1075...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10c1...', 6, v='2328...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10cf...', 6, v='1192...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10dd...', 6, v='867"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10eb...', 6, v='184"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10f9...', 6, v='12"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1107...', 6, v='978"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1115...', 6, v='256"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1123...', 6, v='-100...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1131...', 6, v='614"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='113f...', 6, v='205"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='114d...', 6, v='195"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='115b...', 6, v='316"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1169...', 6, v='1241...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1177...', 6, v='1748...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1185...', 6, v='1046...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1193...', 6, v='1099...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11a2...', 6, v='309"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11b0...', 6, v='-202...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11be...', 6, v='-722...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11cc...', 6, v='680"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11da...', 6, v='440"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11e8...', 6, v='870"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11f6...', 6, v='475"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1205...', 6, v='1"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1213...', 6, v='1"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1221...', 6, v='2"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='122f...', 6, v='1"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='123d...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='124b...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1259...', 6, v='1"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1267...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1276...', 6, v='-1"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1283...', 6, v='-1"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1291...', 6, v='-1"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='129f...', 6, v='-1"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12ad...', 6, v='-1"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12bb...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12c9...', 6, v='1"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12d7...', 6, v='1"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12e5...', 6, v='1"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12f3...', 6, v='1"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1301...', 6, v='1"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='130f...', 6, v='1"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='131d...', 6, v='1"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='132b...', 6, v='1"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1339...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1347...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1355...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1364...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1372...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1380...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='138e...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='139c...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13aa...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13b8...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13c6...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13d4...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13e2...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13f0...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13fe...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='140c...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='141a...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1428...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1436...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1445...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1453...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1461...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='146f...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='147d...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='148b...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1499...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14a7...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14b5...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14c3...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14d1...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14df...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14ed...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14fb...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1509...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1517...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1526...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1534...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1542...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1550...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='155e...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='156c...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='157a...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1588...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1596...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15a4...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15b2...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15c0...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15ce...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15dc...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15ea...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15f8...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1607...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1615...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1623...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1631...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='163f...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='164d...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='165b...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1669...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1677...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1685...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1693...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16a1...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16af...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16bd...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16cb...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16d9...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16e8...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16f6...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1704...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1712...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1720...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='172e...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='173c...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='174a...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1758...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1766...', 6, v='1959...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1774...', 6, v='1506...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1782...', 6, v='1027...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1790...', 6, v='677"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='179e...', 6, v='-759...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17ac...', 6, v='-204...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17ba...', 6, v='-255...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17c9...', 6, v='-217...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17d7...', 6, v='-212...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17e5...', 6, v='-248...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17f3...', 6, v='-198...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1801...', 6, v='-107...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='180f...', 6, v='-524...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='181d...', 6, v='-136...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='182b...', 6, v='-175...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1839...', 6, v='-893...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1847...', 6, v='-845...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1855...', 6, v='-114...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1863...', 6, v='-271...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1871...', 6, v='-229...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='187f...', 6, v='-220...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='188d...', 6, v='-203...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='189c...', 6, v='-997...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18b8...', 6, v='1048...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18c6...', 6, v='-955...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18d4...', 6, v='-133...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18e2...', 6, v='-112...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18f0...', 6, v='-162...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18fe...', 6, v='-141...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='190c...', 6, v='-671...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='191a...', 6, v='-150...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1928...', 6, v='-151...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1936...', 6, v='-161...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1944...', 6, v='-103...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1952...', 6, v='-192...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1960...', 6, v='1397...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='196e...', 6, v='-627...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='197c...', 6, v='-711...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='198b...', 6, v='20"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1999...', 6, v='-130...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19b5...', 6, v='-843...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19c3...', 6, v='-642...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19d1...', 6, v='-320...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19df...', 6, v='-210...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19ed...', 6, v='295"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19ee...', 6, v='417"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19fb...', 6, v='37"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a09...', 6, v='-210...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a17...', 6, v='-298...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a25...', 6, v='-332...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a33...', 6, v='-143...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a41...', 6, v='-198...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a4f...', 6, v='-357...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a5e...', 6, v='-323...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a6c...', 6, v='-228...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a7a...', 6, v='-284...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a88...', 6, v='-294...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a96...', 6, v='-234...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1aa4...', 6, v='-171...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ab2...', 6, v='-668...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ac0...', 6, v='-176...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ace...', 6, v='-241...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1adc...', 6, v='-172...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1aea...', 6, v='-183...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1af8...', 6, v='-188...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1b06...', 6, v='-234...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1b14...', 6, v='-217...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c74...', 6, v='374"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c82...', 6, v='-132...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c90...', 6, v='993"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c9e...', 6, v='-150...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cac...', 6, v='-843...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cba...', 6, v='-119...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cc8...', 6, v='2577...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cd6...', 6, v='1582...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ce4...', 6, v='909"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cf2...', 6, v='-140...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d01...', 6, v='-159...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d0f...', 6, v='-186...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d1d...', 6, v='-658...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d2b...', 6, v='-679...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d39...', 6, v='89"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d47...', 6, v='680"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d55...', 6, v='1095...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d63...', 6, v='-832...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d71...', 6, v='-785...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d7f...', 6, v='-228...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d8d...', 6, v='-40"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d9b...', 6, v='-280...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1da9...', 6, v='-697...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1db7...', 6, v='-697...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1dc5...', 6, v='-811...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1dd3...', 6, v='-629...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1de1...', 6, v='-140...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1df0...', 6, v='-166...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1dfe...', 6, v='-157...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e0c...', 6, v='-192...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e1a...', 6, v='-197...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e28...', 6, v='-201...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e36...', 6, v='-198...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e44...', 6, v='-200...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e52...', 6, v='-161...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e60...', 6, v='-185...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e6e...', 6, v='-190...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e7c...', 6, v='-251...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e8a...', 6, v='-386...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e98...', 6, v='-121...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ea6...', 6, v='-365...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1eb4...', 6, v='-313...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ec2...', 6, v='-506...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ed1...', 6, v='-232...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1edf...', 6, v='-288...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1eed...', 6, v='-121...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1efb...', 6, v='-310...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f09...', 6, v='-245...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f17...', 6, v='439"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f25...', 6, v='609"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f33...', 6, v='1078...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f41...', 6, v='2491...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f4f...', 6, v='1327...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f5d...', 6, v='-115...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f6b...', 6, v='-442...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f79...', 6, v='203"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f87...', 6, v='-143...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f95...', 6, v='-201...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fa4...', 6, v='-149...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fb2...', 6, v='-128...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fc0...', 6, v='-130...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fce...', 6, v='-409...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fdc...', 6, v='-162...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fea...', 6, v='90"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ff8...', 6, v='319"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2006...', 6, v='2483...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2014...', 6, v='357"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2022...', 6, v='1681...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2030...', 6, v='1572...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='203e...', 6, v='1575...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='204c...', 6, v='302"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='205a...', 6, v='1076...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2068...', 6, v='1555...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2076...', 6, v='1971...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2084...', 6, v='239"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2093...', 6, v='-351...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20a1...', 6, v='-527...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20af...', 6, v='-215...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20bd...', 6, v='-782...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20cb...', 6, v='452"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20d9...', 6, v='60"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20e7...', 6, v='-848...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20f5...', 6, v='-138...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2103...', 6, v='-989...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2111...', 6, v='-325...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='211f...', 6, v='-382...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='212d...', 6, v='60"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='213b...', 6, v='884"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2149...', 6, v='659"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2157...', 6, v='-264...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2165...', 6, v='-990...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2174...', 6, v='289"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2182...', 6, v='-292...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2190...', 6, v='-542...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='219e...', 6, v='366"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21ac...', 6, v='909"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21ba...', 6, v='992"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21c8...', 6, v='1808...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21d6...', 6, v='-104...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21e4...', 6, v='543"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21f2...', 6, v='377"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2200...', 6, v='-619...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='220e...', 6, v='-712...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='221c...', 6, v='1459...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='222a...', 6, v='257"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2238...', 6, v='-696...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2247...', 6, v='-108...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2255...', 6, v='2873...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2263...', 6, v='421"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2271...', 6, v='557"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='227f...', 6, v='1696...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='228d...', 6, v='2480...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='229b...', 6, v='-707...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22a9...', 6, v='-237...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22b7...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22c5...', 6, v='1730...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22d3...', 6, v='2990...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22e1...', 6, v='2746...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22ef...', 6, v='-174...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22fd...', 6, v='-194...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='230b...', 6, v='485"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2319...', 6, v='-729...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2327...', 6, v='70"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2336...', 6, v='907"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2344...', 6, v='1297...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2352...', 6, v='776"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2360...', 6, v='123"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='236e...', 6, v='1557...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='237c...', 6, v='1208...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='238a...', 6, v='253"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2398...', 6, v='508"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23a6...', 6, v='-274...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23b4...', 6, v='-571...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23c2...', 6, v='146"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23d0...', 6, v='567"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23de...', 6, v='1222...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23ec...', 6, v='733"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23fa...', 6, v='8"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2408...', 6, v='1041...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2417...', 6, v='3222...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2425...', 6, v='2576...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2433...', 6, v='2422...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2441...', 6, v='-103...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='244f...', 6, v='-746...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='246b...', 6, v='-661...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2479...', 6, v='45"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2487...', 6, v='3983...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2495...', 6, v='1694...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24a3...', 6, v='709"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24b1...', 6, v='-844...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24bf...', 6, v='-605...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24cd...', 6, v='-661...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24db...', 6, v='-436...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24e9...', 6, v='-115...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24f8...', 6, v='-716...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2506...', 6, v='-877...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2514...', 6, v='-102...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2522...', 6, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2530...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='253e...', 6, v='1185...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='254c...', 6, v='884"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='255a...', 6, v='1103...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2568...', 6, v='1789...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2576...', 6, v='3132...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2584...', 6, v='-403...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2592...', 6, v='-211...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25a0...', 6, v='-498...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25ae...', 6, v='174"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25bc...', 6, v='210"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25ca...', 6, v='710"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25d9...', 6, v='2127...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25e7...', 6, v='2386...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25f5...', 6, v='1916...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2603...', 6, v='53"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2611...', 6, v='1070...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='261f...', 6, v='564"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='262d...', 6, v='-118...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='263b...', 6, v='34"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2649...', 6, v='-847...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2657...', 6, v='-131...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2665...', 6, v='-184...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2673...', 6, v='-140...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2681...', 6, v='-112...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='268f...', 6, v='-372...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='269d...', 6, v='269"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26ab...', 6, v='572"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26ba...', 6, v='1413...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26c8...', 6, v='1586...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26d6...', 6, v='3161...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26e4...', 6, v='2347...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26f2...', 6, v='2627...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2700...', 6, v='2502...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='270e...', 6, v='2818...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='271c...', 6, v='158"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='272a...', 6, v='-545...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2738...', 6, v='-370...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2746...', 6, v='-624...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2754...', 6, v='-847...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2762...', 6, v='2315...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2770...', 6, v='1099...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='277e...', 6, v='-417...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 5) +SAX.endElementNs(par, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(par, NULL, NULL, 0, 2, 0, memind='4222...', 6, h='3dc1...', 8) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='0" v...', 1, v='-430...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e08"...', 3, v='-416...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c32...', 4, v='-409...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2a3c...', 4, v='-408...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3835...', 4, v='-396...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4645...', 4, v='-396...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5455...', 4, v='-441...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6265...', 4, v='-535...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7075...', 4, v='-631...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7e85...', 4, v='-729...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8c96...', 4, v='-751...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9aa5...', 4, v='-735...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a8b6...', 4, v='-689...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b6c5...', 4, v='-646...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c4d7...', 4, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d30b...', 4, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e0f6...', 4, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ef06...', 4, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fd17...', 4, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10b2...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1193...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1274...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1355...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1436...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1518...', 5, v='-9"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15f8...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16d9...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17ba...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='189b...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='197c...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a5d...', 5, v='-9"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1b3e...', 5, v='-9"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c1f...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d00...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1de1...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ec2...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fa3...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2084...', 5, v='-9"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2165...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2246...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2327...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2408...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24e9...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25ca...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26ab...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='278c...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='286d...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='294e...', 5, v='-9"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2a30...', 5, v='-9"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2b10...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2bf1...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2cd2...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2db3...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2e94...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2f75...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3056...', 5, v='-9"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3137...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3219...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='32f9...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='33da...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='34bb...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='359d...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='367d...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='375e...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3840...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3921...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3a01...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3ae2...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3bc3...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3ca4...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3d85...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3e66...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='3f48...', 5, v='-9"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4028...', 5, v='-9"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4109...', 5, v='-9"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='41ea...', 5, v='-9"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='42cb...', 5, v='-9"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='43ac...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='448d...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='456e...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='464f...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='480f...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='48f0...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='49d1...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4ab4...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4b95...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4c76...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4d57...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4e38...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4f19...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='4ffa...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='50dd...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='51bc...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='529d...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='537e...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5460...', 5, v='-9"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5540...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5621...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5702...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='57e3...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='58c4...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='59a7...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5a86...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5b67...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5c48...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5d29...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5e0a...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5eeb...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5fcc...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='60ad...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='618e...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='626f...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6350...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6431...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6512...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='65f3...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='66d4...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='67b5...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6896...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6978...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6a58...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6b39...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6c1a...', 5, v='-9"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6cfb...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6ddc...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6ebd...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='6f9e...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='707f...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7160...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7241...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7322...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7403...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='74e4...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='75c5...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='76a6...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7787...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7868...', 5, v='-6"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7948...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7a29...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7b0a...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7beb...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7ccc...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7dad...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7e8f...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7f70...', 5, v='-9"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8051...', 5, v='-9"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8132...', 5, v='-9"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8213...', 5, v='-9"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='82f4...', 5, v='-9"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='83d5...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='84b6...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8597...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8678...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8759...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='883a...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='891b...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='89fc...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8add...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8bbe...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8c9f...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8d80...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8e61...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='8f42...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9023...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9104...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='91e5...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='92c6...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='93a8...', 5, v='-9"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9488...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9569...', 5, v='-9"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='964a...', 5, v='-9"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='972b...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='980c...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='98ed...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='99ce...', 5, v='-8"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9aaf...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9b90...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9c71...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9d52...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9e33...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9f14...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='9ff5...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a0d6...', 5, v='-7"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a1b7...', 5, v='-632...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a298...', 5, v='-351...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a379...', 5, v='-963...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a45a...', 5, v='644"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a53b...', 5, v='700"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a61c...', 5, v='942"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a6fd...', 5, v='99"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a7e0...', 5, v='464"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a8c0...', 5, v='912"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a9a0...', 5, v='289"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='aa81...', 5, v='32"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ab62...', 5, v='46"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ac43...', 5, v='200"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ad24...', 5, v='921"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ae05...', 5, v='744"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='aee6...', 5, v='-561...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='afc7...', 5, v='-68"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b0a8...', 5, v='31"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b26a...', 5, v='142"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b34b...', 5, v='-123...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b42c...', 5, v='-451...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b50d...', 5, v='-729...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b5ee...', 5, v='-712...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b6cf...', 5, v='-158...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b7b0...', 5, v='-198...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b891...', 5, v='-175...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='b972...', 5, v='-175...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ba53...', 5, v='-189...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bb34...', 5, v='-827...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bc15...', 5, v='-882...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bcf6...', 5, v='-899...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bdd8...', 5, v='644"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='beb8...', 5, v='417"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='bf99...', 5, v='524"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c07a...', 5, v='400"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c15b...', 5, v='372"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c23c...', 5, v='484"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c31d...', 5, v='591"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c3fe...', 5, v='336"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c4df...', 5, v='741"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c5c0...', 5, v='114"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c6a1...', 5, v='507"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c782...', 5, v='-51"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c863...', 5, v='136"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='c944...', 5, v='334"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ca25...', 5, v='235"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='cb06...', 5, v='116"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='cbe7...', 5, v='-417...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ccc8...', 5, v='-232...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='cda9...', 5, v='-184...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ce8a...', 5, v='-219...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='cf6b...', 5, v='-134...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d04c...', 5, v='-51"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d12d...', 5, v='143"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d20e...', 5, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d2f0...', 5, v='11"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d3d0...', 5, v='600"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d4b1...', 5, v='644"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d592...', 5, v='836"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d673...', 5, v='1068...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d754...', 5, v='1213...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d835...', 5, v='-135...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d916...', 5, v='-755...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d9f7...', 5, v='-149...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='dad8...', 5, v='-201...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='dbb9...', 5, v='-256...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='dc9a...', 5, v='-233...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='dd7b...', 5, v='-289...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='de5c...', 5, v='-278...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='df3d...', 5, v='-291...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e01d...', 5, v='-291...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e0fe...', 5, v='-283...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e1df...', 5, v='-301...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e2c0...', 5, v='-409...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e3a1...', 5, v='-397...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e482...', 5, v='-337...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e563...', 5, v='-342...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e644...', 5, v='-255...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e725...', 5, v='-218...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e806...', 5, v='-175...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e8e7...', 5, v='-477...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='e9c8...', 5, v='-709...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='eaa9...', 5, v='-653...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='eb8a...', 5, v='-653...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ec6b...', 5, v='-468...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ed4c...', 5, v='-211...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ee2d...', 5, v='-223...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ef0e...', 5, v='-319...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='eff0...', 5, v='-408...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f0d1...', 5, v='-430...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f1b2...', 5, v='-455...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f293...', 5, v='-462...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f374...', 5, v='-430...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f455...', 5, v='-460...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f536...', 5, v='-485...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f617...', 5, v='-461...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f6f8...', 5, v='-481...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f7d9...', 5, v='-424...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f8ba...', 5, v='-391...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='f99b...', 5, v='-380...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fa7c...', 5, v='-302...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fb5d...', 5, v='-303...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fc3e...', 5, v='-329...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fd1f...', 5, v='-268...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fe00...', 5, v='-253...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fee1...', 5, v='-208...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='ffc2...', 5, v='-198...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='100a...', 6, v='-179...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1018...', 6, v='-179...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1026...', 6, v='-207...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1034...', 6, v='-272...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1042...', 6, v='-401...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1050...', 6, v='-432...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='105e...', 6, v='-433...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='106c...', 6, v='-472...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='107a...', 6, v='-433...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1088...', 6, v='-390...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1096...', 6, v='-411...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10a4...', 6, v='-432...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10b2...', 6, v='-434...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10c1...', 6, v='-416...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10cf...', 6, v='-435...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10dd...', 6, v='-416...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10eb...', 6, v='-445...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='10f9...', 6, v='-389...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1107...', 6, v='-328...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1115...', 6, v='-286...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1123...', 6, v='-266...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1131...', 6, v='-179...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='113f...', 6, v='-179...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='114d...', 6, v='-182...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='115b...', 6, v='-178...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1169...', 6, v='-158...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1177...', 6, v='-208...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1185...', 6, v='-288...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1193...', 6, v='-355...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11a2...', 6, v='-483...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11b0...', 6, v='-432...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11be...', 6, v='-539...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11cc...', 6, v='-445...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11da...', 6, v='-427...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11e8...', 6, v='-435...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='11f6...', 6, v='-390...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1205...', 6, v='-4"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1213...', 6, v='-4"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1221...', 6, v='-4"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='122f...', 6, v='-3"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='123d...', 6, v='-3"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='124b...', 6, v='-3"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1259...', 6, v='-2"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1267...', 6, v='-2"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1276...', 6, v='-2"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1283...', 6, v='-2"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1291...', 6, v='-2"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='129f...', 6, v='-2"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12ad...', 6, v='-2"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12bb...', 6, v='-1"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12c9...', 6, v='-2"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12d7...', 6, v='-2"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12e5...', 6, v='-3"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='12f3...', 6, v='-2"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1301...', 6, v='-4"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='130f...', 6, v='-3"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='131d...', 6, v='-3"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='132b...', 6, v='-3"/...', 2) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1339...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1347...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1355...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1364...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1372...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1380...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='138e...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='139c...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13aa...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13b8...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13c6...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13d4...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13e2...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13f0...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='13fe...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='140c...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='141a...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1428...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1436...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1445...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1453...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1461...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='146f...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='147d...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='148b...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1499...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14a7...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14b5...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14c3...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14d1...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14df...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14ed...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='14fb...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1509...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1517...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1526...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1534...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1542...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1550...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='155e...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='156c...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='157a...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1588...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1596...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15a4...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15b2...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15c0...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15ce...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15dc...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15ea...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='15f8...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1607...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1615...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1623...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1631...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='163f...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='164d...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='165b...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1669...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1677...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1685...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1693...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16a1...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16af...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16bd...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16cb...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16d9...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16e8...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='16f6...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1704...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1712...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1720...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='172e...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='173c...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='174a...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1758...', 6, v='0"/>...', 1) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1766...', 6, v='-684...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1774...', 6, v='-684...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1782...', 6, v='-727...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1790...', 6, v='-671...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='179e...', 6, v='-604...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17ac...', 6, v='-587...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17ba...', 6, v='-606...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17c9...', 6, v='-548...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17d7...', 6, v='-543...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17e5...', 6, v='-534...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17f3...', 6, v='-498...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1801...', 6, v='-519...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='180f...', 6, v='-632...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='181d...', 6, v='-692...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='182b...', 6, v='-788...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1839...', 6, v='-134...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1847...', 6, v='-133...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1855...', 6, v='-128...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1863...', 6, v='-119...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1871...', 6, v='-124...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='187f...', 6, v='-116...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='188d...', 6, v='-125...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='189c...', 6, v='-119...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18b8...', 6, v='-756...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18c6...', 6, v='-810...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18d4...', 6, v='-767...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18e2...', 6, v='-656...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18f0...', 6, v='-616...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='18fe...', 6, v='-566...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='190c...', 6, v='-447...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='191a...', 6, v='-430...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1928...', 6, v='-425...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1936...', 6, v='-412...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1944...', 6, v='-412...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1952...', 6, v='-449...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1960...', 6, v='-513...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='196e...', 6, v='-596...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='197c...', 6, v='-635...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='198b...', 6, v='-596...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1999...', 6, v='-661...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19b5...', 6, v='-661...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19c3...', 6, v='-619...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19d1...', 6, v='-623...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19df...', 6, v='-631...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19ed...', 6, v='-607...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19ee...', 6, v='-607...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='19fb...', 6, v='-239...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a09...', 6, v='-260...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a17...', 6, v='-305...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a25...', 6, v='-333...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a33...', 6, v='-223...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a41...', 6, v='-213...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a4f...', 6, v='-154...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a5e...', 6, v='-167...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a6c...', 6, v='-969...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a7a...', 6, v='-112...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a88...', 6, v='-107...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a96...', 6, v='-481...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1aa4...', 6, v='-537...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ab2...', 6, v='-995...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ac0...', 6, v='-181...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ace...', 6, v='-263...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1adc...', 6, v='-292...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1aea...', 6, v='-259...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1af8...', 6, v='-289...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1b06...', 6, v='-217...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1b14...', 6, v='-209...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c74...', 6, v='311"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c82...', 6, v='399"...', 3) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c90...', 6, v='3486...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c9e...', 6, v='3357...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cac...', 6, v='3670...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cba...', 6, v='3580...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cc8...', 6, v='5398...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cd6...', 6, v='5478...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ce4...', 6, v='5618...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1cf2...', 6, v='5659...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d01...', 6, v='5923...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d0f...', 6, v='6651...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d1d...', 6, v='6654...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d2b...', 6, v='6713...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d39...', 6, v='6885...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d47...', 6, v='6893...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d55...', 6, v='6705...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d63...', 6, v='5853...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d71...', 6, v='5545...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d7f...', 6, v='5589...', 4) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d8d...', 6, v='-321...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1d9b...', 6, v='-362...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1da9...', 6, v='-362...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1db7...', 6, v='-347...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1dc5...', 6, v='-363...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1dd3...', 6, v='-372...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1de1...', 6, v='-603...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1df0...', 6, v='-675...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1dfe...', 6, v='-664...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e0c...', 6, v='-677...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e1a...', 6, v='-679...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e28...', 6, v='-659...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e36...', 6, v='-613...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e44...', 6, v='-565...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e52...', 6, v='-491...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e60...', 6, v='-490...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e6e...', 6, v='-480...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e7c...', 6, v='-197...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e8a...', 6, v='-182...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1e98...', 6, v='-182...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ea6...', 6, v='-227...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1eb4...', 6, v='-233...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ec2...', 6, v='-264...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ed1...', 6, v='-264...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1edf...', 6, v='-274...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1eed...', 6, v='-272...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1efb...', 6, v='-258...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f09...', 6, v='-254...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f17...', 6, v='-237...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f25...', 6, v='-233...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f33...', 6, v='-256...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f41...', 6, v='-278...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f4f...', 6, v='-319...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f5d...', 6, v='-358...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f6b...', 6, v='-359...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f79...', 6, v='-312...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f87...', 6, v='-333...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f95...', 6, v='-314...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fa4...', 6, v='-280...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fb2...', 6, v='-248...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fc0...', 6, v='-249...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fce...', 6, v='-217...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fdc...', 6, v='-213...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1fea...', 6, v='-215...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1ff8...', 6, v='-250...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2006...', 6, v='-239...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2014...', 6, v='-346...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2022...', 6, v='-451...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2030...', 6, v='-535...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='203e...', 6, v='-591...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='204c...', 6, v='-577...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='205a...', 6, v='-528...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2068...', 6, v='-538...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2076...', 6, v='-597...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2084...', 6, v='-610...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2093...', 6, v='-674...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20a1...', 6, v='-631...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20af...', 6, v='-553...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20bd...', 6, v='-545...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20cb...', 6, v='-463...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20d9...', 6, v='-434...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20e7...', 6, v='-404...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='20f5...', 6, v='-385...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2103...', 6, v='-351...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2111...', 6, v='-313...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='211f...', 6, v='-301...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='212d...', 6, v='-290...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='213b...', 6, v='-282...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2149...', 6, v='-368...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2157...', 6, v='-450...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2165...', 6, v='-584...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2174...', 6, v='-619...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2182...', 6, v='-616...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2190...', 6, v='-614...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='219e...', 6, v='-622...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21ac...', 6, v='-593...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21ba...', 6, v='-592...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21c8...', 6, v='-555...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21d6...', 6, v='-624...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21e4...', 6, v='-575...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21f2...', 6, v='-577...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2200...', 6, v='-546...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='220e...', 6, v='-539...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='221c...', 6, v='-454...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='222a...', 6, v='-387...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2238...', 6, v='-362...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2247...', 6, v='-329...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2255...', 6, v='-168...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2263...', 6, v='-208...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2271...', 6, v='-204...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='227f...', 6, v='-167...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='228d...', 6, v='-178...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='229b...', 6, v='-349...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22a9...', 6, v='-408...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22b7...', 6, v='-445...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22c5...', 6, v='-481...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22d3...', 6, v='-440...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22e1...', 6, v='-462...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22ef...', 6, v='-482...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='22fd...', 6, v='-464...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='230b...', 6, v='-443...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2319...', 6, v='-539...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2327...', 6, v='-555...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2336...', 6, v='-588...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2344...', 6, v='-520...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2352...', 6, v='-520...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2360...', 6, v='-525...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='236e...', 6, v='-434...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='237c...', 6, v='-419...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='238a...', 6, v='-399...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2398...', 6, v='-319...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23a6...', 6, v='-332...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23b4...', 6, v='-319...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23c2...', 6, v='-296...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23d0...', 6, v='-295...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23de...', 6, v='-291...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23ec...', 6, v='-362...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='23fa...', 6, v='-456...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2408...', 6, v='-501...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2417...', 6, v='-579...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2425...', 6, v='-660...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2433...', 6, v='-678...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2441...', 6, v='-673...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='244f...', 6, v='-643...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='246b...', 6, v='-641...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2479...', 6, v='-626...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2487...', 6, v='-537...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2495...', 6, v='-570...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24a3...', 6, v='-566...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24b1...', 6, v='-581...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24bf...', 6, v='-549...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24cd...', 6, v='-536...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24db...', 6, v='-453...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24e9...', 6, v='-400...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='24f8...', 6, v='-348...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2506...', 6, v='-359...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2514...', 6, v='-357...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2522...', 6, v='-342...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2530...', 6, v='-361...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='253e...', 6, v='-406...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='254c...', 6, v='-420...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='255a...', 6, v='-497...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2568...', 6, v='-584...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2576...', 6, v='-566...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2584...', 6, v='-151...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2592...', 6, v='-862...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25a0...', 6, v='-460...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25ae...', 6, v='-632...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25bc...', 6, v='-612...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25ca...', 6, v='-581...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25d9...', 6, v='-580...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25e7...', 6, v='-562...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='25f5...', 6, v='-531...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2603...', 6, v='-554...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2611...', 6, v='-491...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='261f...', 6, v='-458...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='262d...', 6, v='-467...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='263b...', 6, v='-369...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2649...', 6, v='-349...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2657...', 6, v='-358...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2665...', 6, v='-368...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2673...', 6, v='-360...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2681...', 6, v='-368...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='268f...', 6, v='-385...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='269d...', 6, v='-392...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26ab...', 6, v='-395...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26ba...', 6, v='-446...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26c8...', 6, v='-425...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26d6...', 6, v='-391...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26e4...', 6, v='-389...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='26f2...', 6, v='-353...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2700...', 6, v='-379...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='270e...', 6, v='-362...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='271c...', 6, v='-454...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='272a...', 6, v='-517...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2738...', 6, v='-503...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2746...', 6, v='-502...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2754...', 6, v='-502...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2762...', 6, v='-399...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2770...', 6, v='-355...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='277e...', 6, v='-320...', 5) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 5) +SAX.endElementNs(par, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(par, NULL, NULL, 0, 2, 0, memind='6746...', 6, h='3dc1...', 8) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='0" v...', 1, v='2212...', 155) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 5) +SAX.endElementNs(par, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(par, NULL, NULL, 0, 2, 0, memind='6738...', 6, h='3dc1...', 8) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='0" v...', 1, v='0:0:...', 147) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 5) +SAX.endElementNs(par, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(par, NULL, NULL, 0, 2, 0, memind='6734...', 6, h='3dc1...', 8) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='0" v...', 1, v='7289...', 176) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 5) +SAX.endElementNs(par, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(par, NULL, NULL, 0, 2, 0, memind='6730...', 6, h='3dc1...', 8) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='0" v...', 1, v='0:0:...', 87) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 5) +SAX.endElementNs(par, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(par, NULL, NULL, 0, 2, 0, memind='2627...', 8, h='3dc1...', 8) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='0" v...', 1, v='0::1...', 258) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2a30...', 5, v='0::5...', 185) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5541...', 5, v='6::1...', 186) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7f71...', 5, v='6::1...', 201) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a9a1...', 5, v='629:...', 257) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d4b2...', 5, v='2289...', 258) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fee2...', 5, v='1954...', 292) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1291...', 6, v='2.48...', 279) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1534...', 6, v='0.00...', 304) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17d7...', 6, v='5016...', 313) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a96...', 6, v='1243...', 68) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c74...', 6, v='8197...', 288) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f17...', 6, v='8270...', 280) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21ba...', 6, v='6511...', 268) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='246b...', 6, v='3280...', 278) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='270e...', 6, v='8226...', 56) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 5) +SAX.endElementNs(par, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(par, NULL, NULL, 0, 2, 0, memind='2627...', 8, h='3dc1...', 8) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='0" v...', 1, v='0::0...', 142) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2a30...', 5, v='0::0...', 144) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5541...', 5, v='0::0...', 142) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7f71...', 5, v='0::0...', 162) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a9a1...', 5, v='273:...', 298) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d4b2...', 5, v='16::...', 298) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fee2...', 5, v='14::...', 323) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1291...', 6, v='0::0...', 306) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1534...', 6, v='0.03...', 294) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17d7...', 6, v='0::0...', 223) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a96...', 6, v='0::0...', 28) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c74...', 6, v='1413...', 268) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f17...', 6, v='303:...', 270) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21ba...', 6, v='5304...', 297) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='246b...', 6, v='1514...', 280) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='270e...', 6, v='1776...', 61) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 5) +SAX.endElementNs(par, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(par, NULL, NULL, 0, 2, 0, memind='2627...', 8, h='3dc1...', 8) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='0" v...', 1, v='0::4...', 265) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2a30...', 5, v='0::8...', 208) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5541...', 5, v='8::1...', 206) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7f71...', 5, v='8::1...', 222) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a9a1...', 5, v='2::4...', 228) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d4b2...', 5, v='0::0...', 292) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fee2...', 5, v='4757...', 350) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1291...', 6, v='3.74...', 307) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1534...', 6, v='0::0...', 234) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17d7...', 6, v='1113...', 339) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a96...', 6, v='3972...', 63) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c74...', 6, v='1295...', 285) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f17...', 6, v='3876...', 321) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21ba...', 6, v='6481...', 322) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='246b...', 6, v='7162...', 331) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='270e...', 6, v='5709...', 61) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 5) +SAX.endElementNs(par, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(par, NULL, NULL, 0, 2, 0, memind='2627...', 8, h='3dc1...', 8) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='0" v...', 1, v='0::0...', 142) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2a30...', 5, v='0::0...', 144) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5541...', 5, v='0::0...', 142) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7f71...', 5, v='0::0...', 157) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a9a1...', 5, v='1070...', 279) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d4b2...', 5, v='1231...', 208) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fee2...', 5, v='0::0...', 142) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1291...', 6, v='0::0...', 237) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1534...', 6, v='0.03...', 296) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17d7...', 6, v='0::0...', 146) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a96...', 6, v='0::0...', 28) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c74...', 6, v='9208...', 271) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f17...', 6, v='0::0...', 142) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21ba...', 6, v='0::0...', 142) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='246b...', 6, v='0::0...', 142) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='270e...', 6, v='0::0...', 25) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 5) +SAX.endElementNs(par, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(par, NULL, NULL, 0, 2, 0, memind='1314...', 7, h='3dc1...', 8) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='0" v...', 1, v='2703...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 5) +SAX.endElementNs(par, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(par, NULL, NULL, 0, 2, 0, memind='1313...', 7, h='3dc1...', 8) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='0" v...', 1, v='3066...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 5) +SAX.endElementNs(par, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(par, NULL, NULL, 0, 2, 0, memind='1313...', 7, h='3dc1...', 8) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='0" v...', 1, v='1576...', 7) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 5) +SAX.endElementNs(par, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(par, NULL, NULL, 0, 2, 0, memind='1313...', 7, h='3dc1...', 8) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='0" v...', 1, v='1270...', 6) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 5) +SAX.endElementNs(par, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(par, NULL, NULL, 0, 2, 0, memind='5251...', 8, h='3dc1...', 8) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='0" v...', 1, v='0::1...', 324) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2a30...', 5, v='2226...', 336) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5541...', 5, v='2243...', 334) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7f71...', 5, v='2261...', 334) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a9a1...', 5, v='2937...', 336) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d4b2...', 5, v='3974...', 334) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fee2...', 5, v='4804...', 369) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1291...', 6, v='5025...', 523) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1534...', 6, v='5025...', 490) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17d7...', 6, v='5944...', 361) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a96...', 6, v='1369...', 78) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c74...', 6, v='1748...', 382) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f17...', 6, v='2118...', 382) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21ba...', 6, v='2325...', 382) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='246b...', 6, v='2434...', 382) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='270e...', 6, v='2668...', 70) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 5) +SAX.endElementNs(par, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(par, NULL, NULL, 0, 2, 0, memind='5251...', 8, h='3dc1...', 8) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='0" v...', 1, v='0::0...', 142) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2a30...', 5, v='0::0...', 144) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5541...', 5, v='0::0...', 142) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7f71...', 5, v='0::0...', 165) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a9a1...', 5, v='2745...', 327) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d4b2...', 5, v='5015...', 334) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fee2...', 5, v='9659...', 415) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1291...', 6, v='1317...', 573) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1534...', 6, v='1317...', 539) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17d7...', 6, v='1382...', 386) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a96...', 6, v='1443...', 78) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c74...', 6, v='1627...', 382) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f17...', 6, v='1747...', 382) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21ba...', 6, v='2013...', 382) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='246b...', 6, v='2534...', 382) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='270e...', 6, v='3009...', 70) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 5) +SAX.endElementNs(par, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(par, NULL, NULL, 0, 2, 0, memind='5251...', 8, h='3dc1...', 8) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='0" v...', 1, v='0::4...', 328) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2a30...', 5, v='7309...', 336) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5541...', 5, v='7346...', 334) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7f71...', 5, v='7382...', 334) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a9a1...', 5, v='8444...', 336) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d4b2...', 5, v='9988...', 377) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fee2...', 5, v='2254...', 421) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1291...', 6, v='1520...', 573) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1534...', 6, v='1520...', 540) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17d7...', 6, v='4071...', 386) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a96...', 6, v='7095...', 78) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c74...', 6, v='7709...', 382) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f17...', 6, v='8856...', 400) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21ba...', 6, v='1085...', 430) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='246b...', 6, v='1306...', 430) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='270e...', 6, v='1537...', 79) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 5) +SAX.endElementNs(par, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(par, NULL, NULL, 0, 2, 0, memind='5251...', 8, h='3dc1...', 8) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='0" v...', 1, v='0::0...', 142) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2a30...', 5, v='0::0...', 144) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5541...', 5, v='0::0...', 142) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7f71...', 5, v='0::0...', 160) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a9a1...', 5, v='4546...', 306) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d4b2...', 5, v='1353...', 334) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fee2...', 5, v='1715...', 374) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1291...', 6, v='1715...', 526) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1534...', 6, v='1715...', 486) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17d7...', 6, v='1715...', 338) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a96...', 6, v='1715...', 68) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c74...', 6, v='2636...', 367) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f17...', 6, v='1270...', 382) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21ba...', 6, v='1270...', 382) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='246b...', 6, v='1270...', 382) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='270e...', 6, v='1270...', 70) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 5) +SAX.endElementNs(par, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(par, NULL, NULL, 0, 2, 0, memind='3460...', 5, h='3dc1...', 8) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='0" v...', 1, v='6094...', 430) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2a30...', 5, v='6116...', 432) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5541...', 5, v='6117...', 430) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7f71...', 5, v='6117...', 430) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a9a1...', 5, v='6123...', 432) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d4b2...', 5, v='6134...', 430) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fee2...', 5, v='6142...', 449) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1291...', 6, v='1448...', 572) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1534...', 6, v='1448...', 543) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17d7...', 6, v='6154...', 434) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a96...', 6, v='6231...', 88) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c74...', 6, v='6269...', 430) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f17...', 6, v='6306...', 430) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21ba...', 6, v='6327...', 430) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='246b...', 6, v='6338...', 430) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='270e...', 6, v='6361...', 79) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 5) +SAX.endElementNs(par, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(par, NULL, NULL, 0, 2, 0, memind='3380...', 5, h='3dc1...', 8) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='0" v...', 1, v='8817...', 478) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2a30...', 5, v='8817...', 480) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5541...', 5, v='8817...', 478) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7f71...', 5, v='8817...', 478) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a9a1...', 5, v='8818...', 480) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d4b2...', 5, v='8822...', 478) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fee2...', 5, v='8827...', 495) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1291...', 6, v='1111...', 570) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1534...', 6, v='1112...', 552) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17d7...', 6, v='8831...', 482) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a96...', 6, v='8832...', 98) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c74...', 6, v='8834...', 478) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f17...', 6, v='8835...', 478) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21ba...', 6, v='8838...', 478) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='246b...', 6, v='8843...', 478) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='270e...', 6, v='8848...', 88) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 5) +SAX.endElementNs(par, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(par, NULL, NULL, 0, 2, 0, memind='3340...', 5, h='3dc1...', 8) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='0" v...', 1, v='9437...', 430) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2a30...', 5, v='9510...', 432) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5541...', 5, v='9511...', 430) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7f71...', 5, v='9511...', 430) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a9a1...', 5, v='9522...', 432) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d4b2...', 5, v='9537...', 430) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fee2...', 5, v='9663...', 449) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1291...', 6, v='8980...', 518) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1534...', 6, v='8983...', 507) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='17d7...', 6, v='9844...', 466) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1a96...', 6, v='1014...', 98) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1c74...', 6, v='1020...', 478) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1f17...', 6, v='1032...', 478) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='21ba...', 6, v='1052...', 478) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='246b...', 6, v='1074...', 478) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='270e...', 6, v='1097...', 88) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 5) +SAX.endElementNs(par, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(par, NULL, NULL, 0, 2, 0, memind='3300...', 5, h='3dc1...', 8) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='0" v...', 1, v='3861...', 478) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='2a30...', 5, v='3861...', 480) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='5541...', 5, v='3861...', 478) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='7f71...', 5, v='3861...', 478) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='a9a1...', 5, v='3861...', 480) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='d4b2...', 5, v='3862...', 478) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='fee2...', 5, v='3862...', 498) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(val, NULL, NULL, 0, 2, 0, o='1291...', 6, v='2297...', 574) +SAX.endElementNs(val, NULL, NULL) +SAX.characters( + , 5) +SAX.endElementNs(par, NULL, NULL) +SAX.characters( + , 4) +SAX.endElementNs(device, NULL, NULL) +SAX.characters( + , 3) +SAX.endElementNs(select, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(data, NULL, NULL) +SAX.characters( +, 1) +SAX.endElementNs(electroxml, NULL, NULL) +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 @@ + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/result/att5.rde b/result/att5.rde new file mode 100644 index 0000000..35220b0 --- /dev/null +++ b/result/att5.rde @@ -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.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..49d85fb --- /dev/null +++ b/result/att5.sax @@ -0,0 +1,148 @@ +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.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.startElement(norm, attr=' < ') +SAX.endElement(norm) +SAX.characters( + , 3) +SAX.startElement(norm, attr=' foo +...', 0) +SAX.endElementNs(normId, NULL, NULL) +SAX.characters( + , 3) +SAX.startElementNs(normId, NULL, NULL, 0, 1, 0, attr='foo ...', 7) +SAX.endElementNs(normId, NULL, NULL) +SAX.characters( + , 3) +SAX.startElementNs(normId, NULL, NULL, 0, 1, 0, attr='foob...', 6) +SAX.endElementNs(normId, NULL, NULL) +SAX.characters( + , 3) +SAX.startElementNs(normId, NULL, NULL, 0, 1, 0, attr='foo ...', 7) +SAX.endElementNs(normId, NULL, NULL) +SAX.characters( + , 3) +SAX.startElementNs(normId, NULL, NULL, 0, 1, 0, attr='foob...', 6) +SAX.endElementNs(normId, NULL, NULL) +SAX.characters( + , 3) +SAX.startElementNs(normId, NULL, NULL, 0, 1, 0, attr='&...', 5) +SAX.endElementNs(normId, NULL, NULL) +SAX.characters( + , 3) +SAX.startElementNs(normId, NULL, NULL, 0, 1, 0, attr='foo&...', 11) +SAX.endElementNs(normId, NULL, NULL) +SAX.characters( + , 3) +SAX.startElementNs(normId, NULL, NULL, 0, 1, 0, attr='foob...', 11) +SAX.endElementNs(normId, NULL, NULL) +SAX.characters( + , 3) +SAX.startElementNs(normId, NULL, NULL, 0, 1, 0, attr='&...', 12) +SAX.endElementNs(normId, NULL, NULL) +SAX.characters( + , 3) +SAX.startElementNs(normId, NULL, NULL, 0, 1, 0, attr='foob...', 12) +SAX.endElementNs(normId, NULL, NULL) +SAX.characters( + , 3) +SAX.startElementNs(normId, NULL, NULL, 0, 1, 0, attr='<...', 1) +SAX.endElementNs(normId, NULL, NULL) +SAX.characters( + , 3) +SAX.startElementNs(normId, NULL, NULL, 0, 1, 0, attr='foo<...', 7) +SAX.endElementNs(normId, NULL, NULL) +SAX.characters( + , 3) +SAX.startElementNs(normId, NULL, NULL, 0, 1, 0, attr='foob...', 7) +SAX.endElementNs(normId, NULL, NULL) +SAX.characters( + , 3) +SAX.startElementNs(normId, NULL, NULL, 0, 1, 0, attr=' + + + pvalue->ReferencedOrder.SellersOrderID + + diff --git a/result/att6.rde b/result/att6.rde new file mode 100644 index 0000000..6d39352 --- /dev/null +++ b/result/att6.rde @@ -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.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..4ab9521 --- /dev/null +++ b/result/att6.sax @@ -0,0 +1,20 @@ +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.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.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/att6.sax2 b/result/att6.sax2 new file mode 100644 index 0000000..54dd6d3 --- /dev/null +++ b/result/att6.sax2 @@ -0,0 +1,20 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElementNs(Invoice, NULL, 'urn:oasis:names:tc:ubl:Invoice:1.0:0.70', 4, 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', 0, 0) +SAX.characters( + , 4) +SAX.startElementNs(ReferencedOrder, cat, 'urn:oasis:names:tc:ubl:CommonAggregateTypes:1.0:0.70', 0, 0, 0) +SAX.characters( + , 7) +SAX.startElementNs(SellersOrderID, cat, 'urn:oasis:names:tc:ubl:CommonAggregateTypes:1.0:0.70', 0, 11, 0, schemeID='pval...', 47, schemeAgencyID='pval...', 53, schemeVersionID='pval...', 54, schemeAgencySchemeID='pval...', 59, schemeAgencySchemeAgencyID='pval...', 65, schemeDataURI='pval...', 52, schemeURI='pval...', 48, UID='pval...', 42, UIDRef='pval...', 45, UIDRefs='pval...', 47, language='pval...', 47) +SAX.characters(pvalue-, 7) +SAX.characters(>, 1) +SAX.characters(ReferencedOrder.SellersOrderID, 30) +SAX.endElementNs(SellersOrderID, cat, 'urn:oasis:names:tc:ubl:CommonAggregateTypes:1.0:0.70') +SAX.characters( + , 4) +SAX.endElementNs(ReferencedOrder, cat, 'urn:oasis:names:tc:ubl:CommonAggregateTypes:1.0:0.70') +SAX.characters( +, 1) +SAX.endElementNs(Invoice, NULL, 'urn:oasis:names:tc:ubl:Invoice:1.0:0.70') +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 @@ + + + + +"> +]> + + + &test.ent; + diff --git a/result/att7.rde b/result/att7.rde new file mode 100644 index 0000000..afcef5f --- /dev/null +++ b/result/att7.rde @@ -0,0 +1,12 @@ +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 1 test 0 0 +1 15 test 0 0 +1 14 #text 0 1 + +0 15 x 0 0 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), ) +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/att7.sax2 b/result/att7.sax2 new file mode 100644 index 0000000..dc7e2ae --- /dev/null +++ b/result/att7.sax2 @@ -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), ) +SAX.getEntity(test.ent) +SAX.externalSubset(x, , ) +SAX.startElementNs(x, NULL, NULL, 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(test, NULL, NULL, 0, 1, 1, att='attv...', 8) +SAX.endElementNs(test, NULL, NULL) +SAX.characters( + , 5) +SAX.getEntity(test.ent) +SAX.startElementNs(test, NULL, NULL, 0, 1, 1, att='attv...', 8) +SAX.endElementNs(test, NULL, NULL) +SAX.reference(test.ent) +SAX.characters( +, 1) +SAX.endElementNs(x, NULL, NULL) +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 @@ + +/bsk:DocPart[@docId='20040308152601345236' and @docPartNo=1]XQL Request processing XQL Request processed diff --git a/result/att8.rde b/result/att8.rde new file mode 100644 index 0000000..52fde32 --- /dev/null +++ b/result/att8.rde @@ -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.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..12e378a --- /dev/null +++ b/result/att8.sax @@ -0,0 +1,29 @@ +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.characters(', 1) +SAX.characters(20040308152601345236, 20) +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/att8.sax2 b/result/att8.sax2 new file mode 100644 index 0000000..1f2344a --- /dev/null +++ b/result/att8.sax2 @@ -0,0 +1,29 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElementNs(response, ino, 'http://namespaces.softwareag.com/tamino/response2', 2, xmlns:ino='http://namespaces.softwareag.com/tamino/response2', xmlns:xql='http://metalab.unc.edu/xql/', 2, 0, ino:sessionid='556"...', 3, ino:sessionkey='1590...', 10) +SAX.startElementNs(query, xql, 'http://metalab.unc.edu/xql/', 0, 0, 0) +SAX.characters(/bsk:DocPart[@docId=, 20) +SAX.characters(', 1) +SAX.characters(20040308152601345236, 20) +SAX.characters(', 1) +SAX.characters( and @docPartNo=1], 18) +SAX.endElementNs(query, xql, 'http://metalab.unc.edu/xql/') +SAX.startElementNs(message, ino, 'http://namespaces.softwareag.com/tamino/response2', 0, 1, 0, ino:returnvalue='0"><...', 1) +SAX.startElementNs(messageline, ino, 'http://namespaces.softwareag.com/tamino/response2', 0, 0, 0) +SAX.characters(XQL Request processing, 22) +SAX.endElementNs(messageline, ino, 'http://namespaces.softwareag.com/tamino/response2') +SAX.endElementNs(message, ino, 'http://namespaces.softwareag.com/tamino/response2') +SAX.startElementNs(result, xql, 'http://metalab.unc.edu/xql/', 0, 0, 0) +SAX.startElementNs(DocPart, bsk, 'http://www.heitec.net/sara4/tamino/basket', 1, xmlns:bsk='http://www.heitec.net/sara4/tamino/basket', 3, 0, docId='2004...', 20, docPartNo='1" i...', 1, ino:id='1529...', 5) +SAX.startElementNs(File, bsk, 'http://www.heitec.net/sara4/tamino/basket', 0, 2, 0, name='4898...', 13, size='7519...', 5) +SAX.characters( , 1) +SAX.endElementNs(File, bsk, 'http://www.heitec.net/sara4/tamino/basket') +SAX.endElementNs(DocPart, bsk, 'http://www.heitec.net/sara4/tamino/basket') +SAX.endElementNs(result, xql, 'http://metalab.unc.edu/xql/') +SAX.startElementNs(message, ino, 'http://namespaces.softwareag.com/tamino/response2', 0, 1, 0, ino:returnvalue='0"><...', 1) +SAX.startElementNs(messageline, ino, 'http://namespaces.softwareag.com/tamino/response2', 0, 0, 0) +SAX.characters(XQL Request processed, 21) +SAX.endElementNs(messageline, ino, 'http://namespaces.softwareag.com/tamino/response2') +SAX.endElementNs(message, ino, 'http://namespaces.softwareag.com/tamino/response2') +SAX.endElementNs(response, ino, 'http://namespaces.softwareag.com/tamino/response2') +SAX.endDocument() diff --git a/result/att9 b/result/att9 new file mode 100644 index 0000000..e4982a2 --- /dev/null +++ b/result/att9 @@ -0,0 +1,6 @@ + + + +]> + diff --git a/result/att9.rde b/result/att9.rde new file mode 100644 index 0000000..9b0a34d --- /dev/null +++ b/result/att9.rde @@ -0,0 +1,2 @@ +0 10 doc 0 0 +0 1 doc 1 0 diff --git a/result/att9.rdr b/result/att9.rdr new file mode 100644 index 0000000..9b0a34d --- /dev/null +++ b/result/att9.rdr @@ -0,0 +1,2 @@ +0 10 doc 0 0 +0 1 doc 1 0 diff --git a/result/att9.sax b/result/att9.sax new file mode 100644 index 0000000..0fe14a1 --- /dev/null +++ b/result/att9.sax @@ -0,0 +1,9 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.internalSubset(doc, , ) +SAX.attributeDecl(doc, a1, 8, 1, 1 2, ...) +SAX.elementDecl(doc, 3, ...) +SAX.externalSubset(doc, , ) +SAX.startElement(doc) +SAX.endElement(doc) +SAX.endDocument() diff --git a/result/att9.sax2 b/result/att9.sax2 new file mode 100644 index 0000000..09b3a04 --- /dev/null +++ b/result/att9.sax2 @@ -0,0 +1,9 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.internalSubset(doc, , ) +SAX.attributeDecl(doc, a1, 8, 1, 1 2, ...) +SAX.elementDecl(doc, 3, ...) +SAX.externalSubset(doc, , ) +SAX.startElementNs(doc, NULL, NULL, 0, 1, 1, a1='1 2...', 3) +SAX.endElementNs(doc, NULL, NULL) +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 @@ + + diff --git a/result/attrib.xml.rde b/result/attrib.xml.rde new file mode 100644 index 0000000..de6325a --- /dev/null +++ b/result/attrib.xml.rde @@ -0,0 +1 @@ +0 1 item 1 0 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..50ad8e1 --- /dev/null +++ b/result/attrib.xml.sax @@ -0,0 +1,5 @@ +SAX.setDocumentLocator() +SAX.startDocument() +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/attrib.xml.sax2 b/result/attrib.xml.sax2 new file mode 100644 index 0000000..c7d2c87 --- /dev/null +++ b/result/attrib.xml.sax2 @@ -0,0 +1,5 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElementNs(item, NULL, NULL, 0, 5, 0, title='Icro...', 173, url='http...', 24, first_time='9850...', 9, last_time='9850...', 9, visits='1"/>...', 1) +SAX.endElementNs(item, NULL, NULL) +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/badcomment.xml b/result/badcomment.xml new file mode 100644 index 0000000..6b13c11 --- /dev/null +++ b/result/badcomment.xml @@ -0,0 +1,17 @@ + + +Char* ']]>' Char*)) +']]>' +CDATA sections +| '<!DOCTYPE' +(Char - ('[' | ']'))+ +('[' +simpleDTD* +']')? '>' +doc type declaration +simpleDTD +'<!&como;' +(Char* - +(Char* '&comc;' Char*)) +'&comc;>'--> + diff --git a/result/badcomment.xml.rde b/result/badcomment.xml.rde new file mode 100644 index 0000000..29a3cd1 --- /dev/null +++ b/result/badcomment.xml.rde @@ -0,0 +1,21 @@ +0 1 foo 0 0 +1 14 #text 0 1 + +1 8 #comment 0 1 def='NT-Char' +1 8 #comment 0 1 >Char* ']]>' Char*)) +']]>' +CDATA sections +| '<!DOCTYPE' +(Char - ('[' | ']'))+ +('[' +simpleDTD* +']')? '>' +doc type declaration +simpleDTD +'<!&como;' +(Char* - +(Char* '&comc;' Char*)) +'&comc;>' +1 14 #text 0 1 + +0 15 foo 0 0 diff --git a/result/badcomment.xml.rdr b/result/badcomment.xml.rdr new file mode 100644 index 0000000..29a3cd1 --- /dev/null +++ b/result/badcomment.xml.rdr @@ -0,0 +1,21 @@ +0 1 foo 0 0 +1 14 #text 0 1 + +1 8 #comment 0 1 def='NT-Char' +1 8 #comment 0 1 >Char* ']]>' Char*)) +']]>' +CDATA sections +| '<!DOCTYPE' +(Char - ('[' | ']'))+ +('[' +simpleDTD* +']')? '>' +doc type declaration +simpleDTD +'<!&como;' +(Char* - +(Char* '&comc;' Char*)) +'&comc;>' +1 14 #text 0 1 + +0 15 foo 0 0 diff --git a/result/badcomment.xml.sax b/result/badcomment.xml.sax new file mode 100644 index 0000000..d409369 --- /dev/null +++ b/result/badcomment.xml.sax @@ -0,0 +1,24 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElement(foo) +SAX.characters( +, 1) +SAX.comment( def='NT-Char') +SAX.comment(>Char* ']]>' Char*)) +']]>' +CDATA sections +| '<!DOCTYPE' +(Char - ('[' | ']'))+ +('[' +simpleDTD* +']')? '>' +doc type declaration +simpleDTD +'<!&como;' +(Char* - +(Char* '&comc;' Char*)) +'&comc;>') +SAX.characters( +, 1) +SAX.endElement(foo) +SAX.endDocument() diff --git a/result/badcomment.xml.sax2 b/result/badcomment.xml.sax2 new file mode 100644 index 0000000..08e5622 --- /dev/null +++ b/result/badcomment.xml.sax2 @@ -0,0 +1,24 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElementNs(foo, NULL, NULL, 0, 0, 0) +SAX.characters( +, 1) +SAX.comment( def='NT-Char') +SAX.comment(>Char* ']]>' Char*)) +']]>' +CDATA sections +| '<!DOCTYPE' +(Char - ('[' | ']'))+ +('[' +simpleDTD* +']')? '>' +doc type declaration +simpleDTD +'<!&como;' +(Char* - +(Char* '&comc;' Char*)) +'&comc;>') +SAX.characters( +, 1) +SAX.endElementNs(foo, NULL, NULL) +SAX.endDocument() 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 @@ + + + +]> +&WhatHeSaid; diff --git a/result/bigentname.xml.rde b/result/bigentname.xml.rde new file mode 100644 index 0000000..c2d4cc0 --- /dev/null +++ b/result/bigentname.xml.rde @@ -0,0 +1,4 @@ +0 10 doc 0 0 +0 1 doc 0 0 +1 3 #text 0 1 He said "Yes" +0 15 doc 0 0 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/bigentname.xml.sax2 b/result/bigentname.xml.sax2 new file mode 100644 index 0000000..c2f72c0 --- /dev/null +++ b/result/bigentname.xml.sax2 @@ -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.startElementNs(doc, NULL, NULL, 0, 0, 0) +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.endElementNs(doc, NULL, NULL) +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 @@ + + diff --git a/result/bigname.xml.rde b/result/bigname.xml.rde new file mode 100644 index 0000000..71284c1 --- /dev/null +++ b/result/bigname.xml.rde @@ -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.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/bigname.xml.sax2 b/result/bigname.xml.sax2 new file mode 100644 index 0000000..ef939f9 --- /dev/null +++ b/result/bigname.xml.sax2 @@ -0,0 +1,5 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElementNs(this_is_a_very_large_name_01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789_end_of_the_very_large_name, NULL, NULL, 0, 0, 0) +SAX.endElementNs(this_is_a_very_large_name_01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789_end_of_the_very_large_name, NULL, NULL) +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 @@ + + diff --git a/result/bigname2.xml.rde b/result/bigname2.xml.rde new file mode 100644 index 0000000..6de9dd7 --- /dev/null +++ b/result/bigname2.xml.rde @@ -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.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/bigname2.xml.sax2 b/result/bigname2.xml.sax2 new file mode 100644 index 0000000..6b406f4 --- /dev/null +++ b/result/bigname2.xml.sax2 @@ -0,0 +1,5 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElementNs(start_nc_name_01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789_end_of_the_very_large_name, this_is_a_very_large_qualified_name_01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789_end_of_prefix, 'http://www.example.com/testns/', 1, xmlns:this_is_a_very_large_qualified_name_01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789_end_of_prefix='http://www.example.com/testns/', 0, 0) +SAX.endElementNs(start_nc_name_01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789_end_of_the_very_large_name, this_is_a_very_large_qualified_name_01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789_end_of_prefix, 'http://www.example.com/testns/') +SAX.endDocument() diff --git a/result/c14n/1-1-without-comments/example-1 b/result/c14n/1-1-without-comments/example-1 new file mode 100755 index 0000000..af9a977 --- /dev/null +++ b/result/c14n/1-1-without-comments/example-1 @@ -0,0 +1,4 @@ + +Hello, world! + \ No newline at end of file diff --git a/result/c14n/1-1-without-comments/example-2 b/result/c14n/1-1-without-comments/example-2 new file mode 100755 index 0000000..2afa15c --- /dev/null +++ b/result/c14n/1-1-without-comments/example-2 @@ -0,0 +1,11 @@ + + + A B + + A + + B + A B + C + + \ No newline at end of file diff --git a/result/c14n/1-1-without-comments/example-3 b/result/c14n/1-1-without-comments/example-3 new file mode 100755 index 0000000..4c287e6 --- /dev/null +++ b/result/c14n/1-1-without-comments/example-3 @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/result/c14n/1-1-without-comments/example-4 b/result/c14n/1-1-without-comments/example-4 new file mode 100755 index 0000000..19a2559 --- /dev/null +++ b/result/c14n/1-1-without-comments/example-4 @@ -0,0 +1,9 @@ + + First line +Second line + 2 + value>"0" && value<"10" ?"valid":"error" + valid + + + \ No newline at end of file diff --git a/result/c14n/1-1-without-comments/example-5 b/result/c14n/1-1-without-comments/example-5 new file mode 100755 index 0000000..c232e74 --- /dev/null +++ b/result/c14n/1-1-without-comments/example-5 @@ -0,0 +1,3 @@ + + Hello, world! + \ No newline at end of file diff --git a/result/c14n/1-1-without-comments/example-6 b/result/c14n/1-1-without-comments/example-6 new file mode 100755 index 0000000..0be38f9 --- /dev/null +++ b/result/c14n/1-1-without-comments/example-6 @@ -0,0 +1 @@ +© \ No newline at end of file diff --git a/result/c14n/1-1-without-comments/example-7 b/result/c14n/1-1-without-comments/example-7 new file mode 100755 index 0000000..0a96cc4 --- /dev/null +++ b/result/c14n/1-1-without-comments/example-7 @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/result/c14n/1-1-without-comments/example-8 b/result/c14n/1-1-without-comments/example-8 new file mode 100755 index 0000000..eb830e8 --- /dev/null +++ b/result/c14n/1-1-without-comments/example-8 @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/result/c14n/1-1-without-comments/xmlbase-c14n11spec-102 b/result/c14n/1-1-without-comments/xmlbase-c14n11spec-102 new file mode 100644 index 0000000..421d60b --- /dev/null +++ b/result/c14n/1-1-without-comments/xmlbase-c14n11spec-102 @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/result/c14n/1-1-without-comments/xmlbase-c14n11spec2-102 b/result/c14n/1-1-without-comments/xmlbase-c14n11spec2-102 new file mode 100644 index 0000000..eb830e8 --- /dev/null +++ b/result/c14n/1-1-without-comments/xmlbase-c14n11spec2-102 @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/result/c14n/1-1-without-comments/xmlbase-c14n11spec3-102 b/result/c14n/1-1-without-comments/xmlbase-c14n11spec3-102 new file mode 100644 index 0000000..77ef848 --- /dev/null +++ b/result/c14n/1-1-without-comments/xmlbase-c14n11spec3-102 @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/result/c14n/1-1-without-comments/xmlbase-prop-1 b/result/c14n/1-1-without-comments/xmlbase-prop-1 new file mode 100644 index 0000000..da3a2b6 --- /dev/null +++ b/result/c14n/1-1-without-comments/xmlbase-prop-1 @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/result/c14n/1-1-without-comments/xmlbase-prop-2 b/result/c14n/1-1-without-comments/xmlbase-prop-2 new file mode 100644 index 0000000..aefa811 --- /dev/null +++ b/result/c14n/1-1-without-comments/xmlbase-prop-2 @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/result/c14n/1-1-without-comments/xmlbase-prop-3 b/result/c14n/1-1-without-comments/xmlbase-prop-3 new file mode 100644 index 0000000..0757d28 --- /dev/null +++ b/result/c14n/1-1-without-comments/xmlbase-prop-3 @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/result/c14n/1-1-without-comments/xmlbase-prop-4 b/result/c14n/1-1-without-comments/xmlbase-prop-4 new file mode 100644 index 0000000..0d45839 --- /dev/null +++ b/result/c14n/1-1-without-comments/xmlbase-prop-4 @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/result/c14n/1-1-without-comments/xmlbase-prop-5 b/result/c14n/1-1-without-comments/xmlbase-prop-5 new file mode 100644 index 0000000..95e51d9 --- /dev/null +++ b/result/c14n/1-1-without-comments/xmlbase-prop-5 @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/result/c14n/1-1-without-comments/xmlbase-prop-6 b/result/c14n/1-1-without-comments/xmlbase-prop-6 new file mode 100644 index 0000000..a7b61e3 --- /dev/null +++ b/result/c14n/1-1-without-comments/xmlbase-prop-6 @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/result/c14n/1-1-without-comments/xmlbase-prop-7 b/result/c14n/1-1-without-comments/xmlbase-prop-7 new file mode 100644 index 0000000..eda3165 --- /dev/null +++ b/result/c14n/1-1-without-comments/xmlbase-prop-7 @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/result/c14n/1-1-without-comments/xmlid-prop-1 b/result/c14n/1-1-without-comments/xmlid-prop-1 new file mode 100644 index 0000000..2a76c06 --- /dev/null +++ b/result/c14n/1-1-without-comments/xmlid-prop-1 @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/result/c14n/1-1-without-comments/xmlid-prop-2 b/result/c14n/1-1-without-comments/xmlid-prop-2 new file mode 100644 index 0000000..1dccb8d --- /dev/null +++ b/result/c14n/1-1-without-comments/xmlid-prop-2 @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/result/c14n/1-1-without-comments/xmllang-prop-1 b/result/c14n/1-1-without-comments/xmllang-prop-1 new file mode 100644 index 0000000..2581a9d --- /dev/null +++ b/result/c14n/1-1-without-comments/xmllang-prop-1 @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/result/c14n/1-1-without-comments/xmllang-prop-2 b/result/c14n/1-1-without-comments/xmllang-prop-2 new file mode 100644 index 0000000..5add5fa --- /dev/null +++ b/result/c14n/1-1-without-comments/xmllang-prop-2 @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/result/c14n/1-1-without-comments/xmllang-prop-3 b/result/c14n/1-1-without-comments/xmllang-prop-3 new file mode 100644 index 0000000..e327ebd --- /dev/null +++ b/result/c14n/1-1-without-comments/xmllang-prop-3 @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/result/c14n/1-1-without-comments/xmllang-prop-4 b/result/c14n/1-1-without-comments/xmllang-prop-4 new file mode 100644 index 0000000..dc192c9 --- /dev/null +++ b/result/c14n/1-1-without-comments/xmllang-prop-4 @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/result/c14n/1-1-without-comments/xmlspace-prop-1 b/result/c14n/1-1-without-comments/xmlspace-prop-1 new file mode 100644 index 0000000..7c13acc --- /dev/null +++ b/result/c14n/1-1-without-comments/xmlspace-prop-1 @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/result/c14n/1-1-without-comments/xmlspace-prop-2 b/result/c14n/1-1-without-comments/xmlspace-prop-2 new file mode 100644 index 0000000..5add5fa --- /dev/null +++ b/result/c14n/1-1-without-comments/xmlspace-prop-2 @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/result/c14n/1-1-without-comments/xmlspace-prop-3 b/result/c14n/1-1-without-comments/xmlspace-prop-3 new file mode 100644 index 0000000..94a1a56 --- /dev/null +++ b/result/c14n/1-1-without-comments/xmlspace-prop-3 @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/result/c14n/1-1-without-comments/xmlspace-prop-4 b/result/c14n/1-1-without-comments/xmlspace-prop-4 new file mode 100644 index 0000000..acbddd4 --- /dev/null +++ b/result/c14n/1-1-without-comments/xmlspace-prop-4 @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file 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 @@ + + + + + + + + + \ 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 @@ + + + + + + + + + \ 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 @@ + + + + + + + + + \ 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 @@ + + + + + + + + + \ 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 @@ + + + + + + + + + \ 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 @@ + + + + + + + + + \ 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 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 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 @@ + + + + + + + + + \ 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 @@ + + + + + + + + + \ 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 @@ + + + + + + + + + \ 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 @@ + + + + + + + + + \ 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 @@ + + + + + + + + + \ 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 @@ + + + + + + + + + \ 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 @@ + + + + + + + + + \ 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 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 @@ + + + + + + + + + \ 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 @@ + + + + + + + \ 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 @@ + + + + + + + \ No newline at end of file diff --git a/result/c14n/exc-without-comments/test-2 b/result/c14n/exc-without-comments/test-2 new file mode 100644 index 0000000..0b8a0cb --- /dev/null +++ b/result/c14n/exc-without-comments/test-2 @@ -0,0 +1,11 @@ + + + + + + + + + sj1VXDB2VMCU5qmva2OtDw3kKOs= + + \ 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 @@ + +Hello, world! + + + \ 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 @@ + + + A B + + A + + B + A B + C + + \ 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 @@ + + + + + + + + + + + + + + \ 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..19a2559 --- /dev/null +++ b/result/c14n/with-comments/example-4 @@ -0,0 +1,9 @@ + + First line +Second line + 2 + value>"0" && value<"10" ?"valid":"error" + valid + + + \ 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 @@ + + Hello, world! + + \ 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 @@ +© \ 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 @@ + \ 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 @@ + +Hello, world! + \ 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 @@ + + + A B + + A + + B + A B + C + + \ 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 @@ + + + + + + + + + + + + + + \ 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..19a2559 --- /dev/null +++ b/result/c14n/without-comments/example-4 @@ -0,0 +1,9 @@ + + First line +Second line + 2 + value>"0" && value<"10" ?"valid":"error" + valid + + + \ 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 @@ + + Hello, world! + \ 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 @@ +© \ 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 @@ + \ 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 @@ + + + + + + + + + \ 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 @@ + + + + + + + + + \ 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 @@ + + + + + + + + + \ 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 @@ + + xmlns:foo="http://example.org/foo" + + xmlns:foo="http://example.org/foo" + + + + + \ 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 @@ + + + + + + + + + \ 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 @@ + + + + + + + + + \ 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 @@ + + + + + + + + + \ 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 @@ + + + CN=Merlin Hughes,O=Baltimore Technologies\, Ltd.,ST=Dublin,C=IE + + + + CN=Test DSA CA,O=Baltimore Technologies\, Ltd.,ST=Dublin,C=IE + + 970849936 + + + 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= + + \ 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 @@ + + + \ 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 @@ + + + + + + + \ 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 @@ + + + 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 @@ + + + + + + + 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/catalogs/whites b/result/catalogs/whites new file mode 100644 index 0000000..52b2afe --- /dev/null +++ b/result/catalogs/whites @@ -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/whitex b/result/catalogs/whitex new file mode 100644 index 0000000..b02bcc6 --- /dev/null +++ b/result/catalogs/whitex @@ -0,0 +1,8 @@ +> /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/dbcentx.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/cdata b/result/cdata new file mode 100644 index 0000000..180ea46 --- /dev/null +++ b/result/cdata @@ -0,0 +1,4 @@ + + +Hello, world!]]> + diff --git a/result/cdata-2-byte-UTF-8.xml b/result/cdata-2-byte-UTF-8.xml new file mode 100644 index 0000000..8552efc --- /dev/null +++ b/result/cdata-2-byte-UTF-8.xml @@ -0,0 +1,6 @@ + + + +

    +

    +
    diff --git a/result/cdata-2-byte-UTF-8.xml.rde b/result/cdata-2-byte-UTF-8.xml.rde new file mode 100644 index 0000000..2eb2940 --- /dev/null +++ b/result/cdata-2-byte-UTF-8.xml.rde @@ -0,0 +1,15 @@ +0 8 #comment 0 1 This tests that two-byte UTF-8 characters are parsed properly when split across a buffer boundary of length XML_PARSER_BIG_BUFFER_SIZE (300 bytes). +0 1 doc 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 4 #cdata-section 0 1 ČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČ +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 4 #cdata-section 0 1 ČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČ +1 15 p 0 0 +1 14 #text 0 1 + +0 15 doc 0 0 diff --git a/result/cdata-2-byte-UTF-8.xml.rdr b/result/cdata-2-byte-UTF-8.xml.rdr new file mode 100644 index 0000000..2eb2940 --- /dev/null +++ b/result/cdata-2-byte-UTF-8.xml.rdr @@ -0,0 +1,15 @@ +0 8 #comment 0 1 This tests that two-byte UTF-8 characters are parsed properly when split across a buffer boundary of length XML_PARSER_BIG_BUFFER_SIZE (300 bytes). +0 1 doc 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 4 #cdata-section 0 1 ČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČ +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 4 #cdata-section 0 1 ČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČ +1 15 p 0 0 +1 14 #text 0 1 + +0 15 doc 0 0 diff --git a/result/cdata-2-byte-UTF-8.xml.sax b/result/cdata-2-byte-UTF-8.xml.sax new file mode 100644 index 0000000..f397f6a --- /dev/null +++ b/result/cdata-2-byte-UTF-8.xml.sax @@ -0,0 +1,18 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.comment( This tests that two-byte UTF-8 characters are parsed properly when split across a buffer boundary of length XML_PARSER_BIG_BUFFER_SIZE (300 bytes). ) +SAX.startElement(doc) +SAX.characters( +, 1) +SAX.startElement(p) +SAX.pcdata(ČČČČČČČČČČ, 1200) +SAX.endElement(p) +SAX.characters( +, 1) +SAX.startElement(p) +SAX.pcdata( ČČČČČČČČČÄ, 1201) +SAX.endElement(p) +SAX.characters( +, 1) +SAX.endElement(doc) +SAX.endDocument() diff --git a/result/cdata-2-byte-UTF-8.xml.sax2 b/result/cdata-2-byte-UTF-8.xml.sax2 new file mode 100644 index 0000000..2da2d50 --- /dev/null +++ b/result/cdata-2-byte-UTF-8.xml.sax2 @@ -0,0 +1,18 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.comment( This tests that two-byte UTF-8 characters are parsed properly when split across a buffer boundary of length XML_PARSER_BIG_BUFFER_SIZE (300 bytes). ) +SAX.startElementNs(doc, NULL, NULL, 0, 0, 0) +SAX.characters( +, 1) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.pcdata(ČČČČČČČČČČ, 1200) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( +, 1) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.pcdata( ČČČČČČČČČÄ, 1201) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( +, 1) +SAX.endElementNs(doc, NULL, NULL) +SAX.endDocument() diff --git a/result/cdata-3-byte-UTF-8.xml b/result/cdata-3-byte-UTF-8.xml new file mode 100644 index 0000000..b959a12 --- /dev/null +++ b/result/cdata-3-byte-UTF-8.xml @@ -0,0 +1,7 @@ + + + +

    +

    +

    +
    diff --git a/result/cdata-3-byte-UTF-8.xml.rde b/result/cdata-3-byte-UTF-8.xml.rde new file mode 100644 index 0000000..3f4d1c5 --- /dev/null +++ b/result/cdata-3-byte-UTF-8.xml.rde @@ -0,0 +1,20 @@ +0 8 #comment 0 1 This tests that three-byte UTF-8 characters are parsed properly when split across a buffer boundary of length XML_PARSER_BIG_BUFFER_SIZE (300 bytes). +0 1 doc 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 4 #cdata-section 0 1 牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛 +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 4 #cdata-section 0 1 牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛 +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 4 #cdata-section 0 1 牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛 +1 15 p 0 0 +1 14 #text 0 1 + +0 15 doc 0 0 diff --git a/result/cdata-3-byte-UTF-8.xml.rdr b/result/cdata-3-byte-UTF-8.xml.rdr new file mode 100644 index 0000000..3f4d1c5 --- /dev/null +++ b/result/cdata-3-byte-UTF-8.xml.rdr @@ -0,0 +1,20 @@ +0 8 #comment 0 1 This tests that three-byte UTF-8 characters are parsed properly when split across a buffer boundary of length XML_PARSER_BIG_BUFFER_SIZE (300 bytes). +0 1 doc 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 4 #cdata-section 0 1 牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛 +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 4 #cdata-section 0 1 牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛 +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 4 #cdata-section 0 1 牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛 +1 15 p 0 0 +1 14 #text 0 1 + +0 15 doc 0 0 diff --git a/result/cdata-3-byte-UTF-8.xml.sax b/result/cdata-3-byte-UTF-8.xml.sax new file mode 100644 index 0000000..2f73e7c --- /dev/null +++ b/result/cdata-3-byte-UTF-8.xml.sax @@ -0,0 +1,23 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.comment( This tests that three-byte UTF-8 characters are parsed properly when split across a buffer boundary of length XML_PARSER_BIG_BUFFER_SIZE (300 bytes). ) +SAX.startElement(doc) +SAX.characters( +, 1) +SAX.startElement(p) +SAX.pcdata(牛牛牛牛牛牛ç‰, 1200) +SAX.endElement(p) +SAX.characters( +, 1) +SAX.startElement(p) +SAX.pcdata( 牛牛牛牛牛牛ç, 1201) +SAX.endElement(p) +SAX.characters( +, 1) +SAX.startElement(p) +SAX.pcdata( 牛牛牛牛牛牛, 1202) +SAX.endElement(p) +SAX.characters( +, 1) +SAX.endElement(doc) +SAX.endDocument() diff --git a/result/cdata-3-byte-UTF-8.xml.sax2 b/result/cdata-3-byte-UTF-8.xml.sax2 new file mode 100644 index 0000000..3969579 --- /dev/null +++ b/result/cdata-3-byte-UTF-8.xml.sax2 @@ -0,0 +1,23 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.comment( This tests that three-byte UTF-8 characters are parsed properly when split across a buffer boundary of length XML_PARSER_BIG_BUFFER_SIZE (300 bytes). ) +SAX.startElementNs(doc, NULL, NULL, 0, 0, 0) +SAX.characters( +, 1) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.pcdata(牛牛牛牛牛牛ç‰, 1200) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( +, 1) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.pcdata( 牛牛牛牛牛牛ç, 1201) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( +, 1) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.pcdata( 牛牛牛牛牛牛, 1202) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( +, 1) +SAX.endElementNs(doc, NULL, NULL) +SAX.endDocument() diff --git a/result/cdata-4-byte-UTF-8.xml b/result/cdata-4-byte-UTF-8.xml new file mode 100644 index 0000000..4d1d9a8 --- /dev/null +++ b/result/cdata-4-byte-UTF-8.xml @@ -0,0 +1,8 @@ + + + +

    +

    +

    +

    +
    diff --git a/result/cdata-4-byte-UTF-8.xml.rde b/result/cdata-4-byte-UTF-8.xml.rde new file mode 100644 index 0000000..437b79e --- /dev/null +++ b/result/cdata-4-byte-UTF-8.xml.rde @@ -0,0 +1,25 @@ +0 8 #comment 0 1 This tests that four-byte UTF-8 characters are parsed properly when split across a buffer boundary of length XML_PARSER_BIG_BUFFER_SIZE (300 bytes). +0 1 doc 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 4 #cdata-section 0 1 ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 4 #cdata-section 0 1 ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 4 #cdata-section 0 1 ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 4 #cdata-section 0 1 ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ +1 15 p 0 0 +1 14 #text 0 1 + +0 15 doc 0 0 diff --git a/result/cdata-4-byte-UTF-8.xml.rdr b/result/cdata-4-byte-UTF-8.xml.rdr new file mode 100644 index 0000000..437b79e --- /dev/null +++ b/result/cdata-4-byte-UTF-8.xml.rdr @@ -0,0 +1,25 @@ +0 8 #comment 0 1 This tests that four-byte UTF-8 characters are parsed properly when split across a buffer boundary of length XML_PARSER_BIG_BUFFER_SIZE (300 bytes). +0 1 doc 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 4 #cdata-section 0 1 ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 4 #cdata-section 0 1 ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 4 #cdata-section 0 1 ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 4 #cdata-section 0 1 ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦ +1 15 p 0 0 +1 14 #text 0 1 + +0 15 doc 0 0 diff --git a/result/cdata-4-byte-UTF-8.xml.sax b/result/cdata-4-byte-UTF-8.xml.sax new file mode 100644 index 0000000..d8abcfb --- /dev/null +++ b/result/cdata-4-byte-UTF-8.xml.sax @@ -0,0 +1,28 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.comment( This tests that four-byte UTF-8 characters are parsed properly when split across a buffer boundary of length XML_PARSER_BIG_BUFFER_SIZE (300 bytes). ) +SAX.startElement(doc) +SAX.characters( +, 1) +SAX.startElement(p) +SAX.pcdata(ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦, 1200) +SAX.endElement(p) +SAX.characters( +, 1) +SAX.startElement(p) +SAX.pcdata( ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ, 1201) +SAX.endElement(p) +SAX.characters( +, 1) +SAX.startElement(p) +SAX.pcdata( ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ, 1202) +SAX.endElement(p) +SAX.characters( +, 1) +SAX.startElement(p) +SAX.pcdata( ðŸ¦ðŸ¦ðŸ¦ðŸ¦ð, 1203) +SAX.endElement(p) +SAX.characters( +, 1) +SAX.endElement(doc) +SAX.endDocument() diff --git a/result/cdata-4-byte-UTF-8.xml.sax2 b/result/cdata-4-byte-UTF-8.xml.sax2 new file mode 100644 index 0000000..5e07d83 --- /dev/null +++ b/result/cdata-4-byte-UTF-8.xml.sax2 @@ -0,0 +1,28 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.comment( This tests that four-byte UTF-8 characters are parsed properly when split across a buffer boundary of length XML_PARSER_BIG_BUFFER_SIZE (300 bytes). ) +SAX.startElementNs(doc, NULL, NULL, 0, 0, 0) +SAX.characters( +, 1) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.pcdata(ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ¦, 1200) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( +, 1) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.pcdata( ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ, 1201) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( +, 1) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.pcdata( ðŸ¦ðŸ¦ðŸ¦ðŸ¦ðŸ, 1202) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( +, 1) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.pcdata( ðŸ¦ðŸ¦ðŸ¦ðŸ¦ð, 1203) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( +, 1) +SAX.endElementNs(doc, NULL, NULL) +SAX.endDocument() diff --git a/result/cdata.rde b/result/cdata.rde new file mode 100644 index 0000000..316b8bf --- /dev/null +++ b/result/cdata.rde @@ -0,0 +1,7 @@ +0 1 doc 0 0 +1 14 #text 0 1 + +1 4 #cdata-section 0 1 Hello, world! +1 14 #text 0 1 + +0 15 doc 0 0 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 Hello, world! +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(Hello, wor, 34) +SAX.characters( +, 1) +SAX.endElement(doc) +SAX.endDocument() diff --git a/result/cdata.sax2 b/result/cdata.sax2 new file mode 100644 index 0000000..117b2b0 --- /dev/null +++ b/result/cdata.sax2 @@ -0,0 +1,10 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElementNs(doc, NULL, NULL, 0, 0, 0) +SAX.characters( +, 1) +SAX.pcdata(Hello, wor, 34) +SAX.characters( +, 1) +SAX.endElementNs(doc, NULL, NULL) +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 @@ + + + ]> + diff --git a/result/cdata2.rde b/result/cdata2.rde new file mode 100644 index 0000000..e69a672 --- /dev/null +++ b/result/cdata2.rde @@ -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 + +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.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 + +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..7fcc863 --- /dev/null +++ b/result/cdata2.sax @@ -0,0 +1,17 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElement(collection) +SAX.characters( + , 3) +SAX.startElement(test) +SAX.pcdata( + , 1) +SAX.pcdata( + , 3) +SAX.endElement(test) +SAX.characters( +, 1) +SAX.endElement(collection) +SAX.endDocument() diff --git a/result/cdata2.sax2 b/result/cdata2.sax2 new file mode 100644 index 0000000..d1420e9 --- /dev/null +++ b/result/cdata2.sax2 @@ -0,0 +1,17 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElementNs(collection, NULL, NULL, 0, 0, 0) +SAX.characters( + , 3) +SAX.startElementNs(test, NULL, NULL, 0, 0, 0) +SAX.pcdata( + , 1) +SAX.pcdata( + , 3) +SAX.endElementNs(test, NULL, NULL) +SAX.characters( +, 1) +SAX.endElementNs(collection, NULL, NULL) +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 @@ + + + + + + diff --git a/result/comment.xml.rde b/result/comment.xml.rde new file mode 100644 index 0000000..9551ced --- /dev/null +++ b/result/comment.xml.rde @@ -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.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/comment.xml.sax2 b/result/comment.xml.sax2 new file mode 100644 index 0000000..da57f50 --- /dev/null +++ b/result/comment.xml.sax2 @@ -0,0 +1,17 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElementNs(doc, NULL, NULL, 0, 0, 0) +SAX.characters( +, 1) +SAX.comment( document start ) +SAX.characters( +, 1) +SAX.startElementNs(empty, NULL, NULL, 0, 0, 0) +SAX.endElementNs(empty, NULL, NULL) +SAX.characters( +, 1) +SAX.comment( document end ) +SAX.characters( +, 1) +SAX.endElementNs(doc, NULL, NULL) +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 @@ + + + + + + diff --git a/result/comment2.xml.rde b/result/comment2.xml.rde new file mode 100644 index 0000000..4a3279d --- /dev/null +++ b/result/comment2.xml.rde @@ -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.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/comment2.xml.sax2 b/result/comment2.xml.sax2 new file mode 100644 index 0000000..a286744 --- /dev/null +++ b/result/comment2.xml.sax2 @@ -0,0 +1,13 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.comment( document start ) +SAX.startElementNs(doc, NULL, NULL, 0, 0, 0) +SAX.characters( +, 1) +SAX.startElementNs(empty, NULL, NULL, 0, 0, 0) +SAX.endElementNs(empty, NULL, NULL) +SAX.characters( +, 1) +SAX.endElementNs(doc, NULL, NULL) +SAX.comment( document end ) +SAX.endDocument() diff --git a/result/comment3.xml b/result/comment3.xml new file mode 100644 index 0000000..395f67c --- /dev/null +++ b/result/comment3.xml @@ -0,0 +1,164 @@ + + + diff --git a/result/comment3.xml.rde b/result/comment3.xml.rde new file mode 100644 index 0000000..519b8d0 --- /dev/null +++ b/result/comment3.xml.rde @@ -0,0 +1,163 @@ +0 8 #comment 0 1 test of very very long comments and buffer limits +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 + +0 1 doc 1 0 diff --git a/result/comment3.xml.rdr b/result/comment3.xml.rdr new file mode 100644 index 0000000..519b8d0 --- /dev/null +++ b/result/comment3.xml.rdr @@ -0,0 +1,163 @@ +0 8 #comment 0 1 test of very very long comments and buffer limits +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 + +0 1 doc 1 0 diff --git a/result/comment3.xml.sax b/result/comment3.xml.sax new file mode 100644 index 0000000..82b8b36 --- /dev/null +++ b/result/comment3.xml.sax @@ -0,0 +1,167 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.comment( test of very very long comments and buffer limits +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +) +SAX.startElement(doc) +SAX.endElement(doc) +SAX.endDocument() diff --git a/result/comment3.xml.sax2 b/result/comment3.xml.sax2 new file mode 100644 index 0000000..a5f1fd6 --- /dev/null +++ b/result/comment3.xml.sax2 @@ -0,0 +1,167 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.comment( test of very very long comments and buffer limits +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +01234567890123456789012345678901234567890123456789 +) +SAX.startElementNs(doc, NULL, NULL, 0, 0, 0) +SAX.endElementNs(doc, NULL, NULL) +SAX.endDocument() diff --git a/result/comment4.xml b/result/comment4.xml new file mode 100644 index 0000000..93282d8 --- /dev/null +++ b/result/comment4.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/result/comment4.xml.rde b/result/comment4.xml.rde new file mode 100644 index 0000000..09e181b --- /dev/null +++ b/result/comment4.xml.rde @@ -0,0 +1,4 @@ +0 8 #comment 0 1 test of non ascii comments like là et très +0 8 #comment 0 1 à another one +0 8 #comment 0 1 another one à +0 1 doc 1 0 diff --git a/result/comment4.xml.rdr b/result/comment4.xml.rdr new file mode 100644 index 0000000..09e181b --- /dev/null +++ b/result/comment4.xml.rdr @@ -0,0 +1,4 @@ +0 8 #comment 0 1 test of non ascii comments like là et très +0 8 #comment 0 1 à another one +0 8 #comment 0 1 another one à +0 1 doc 1 0 diff --git a/result/comment4.xml.sax b/result/comment4.xml.sax new file mode 100644 index 0000000..26011d9 --- /dev/null +++ b/result/comment4.xml.sax @@ -0,0 +1,8 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.comment( test of non ascii comments like là et très ) +SAX.comment(à another one ) +SAX.comment( another one à) +SAX.startElement(doc) +SAX.endElement(doc) +SAX.endDocument() diff --git a/result/comment4.xml.sax2 b/result/comment4.xml.sax2 new file mode 100644 index 0000000..0e2611f --- /dev/null +++ b/result/comment4.xml.sax2 @@ -0,0 +1,8 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.comment( test of non ascii comments like là et très ) +SAX.comment(à another one ) +SAX.comment( another one à) +SAX.startElementNs(doc, NULL, NULL, 0, 0, 0) +SAX.endElementNs(doc, NULL, NULL) +SAX.endDocument() diff --git a/result/comment5.xml b/result/comment5.xml new file mode 100644 index 0000000..398f974 --- /dev/null +++ b/result/comment5.xml @@ -0,0 +1,9 @@ + + + diff --git a/result/comment5.xml.rde b/result/comment5.xml.rde new file mode 100644 index 0000000..fe7a88f --- /dev/null +++ b/result/comment5.xml.rde @@ -0,0 +1,8 @@ +0 8 #comment 0 1 test of hyphen and line break handling + some text - interrupted - +- - - - - - - - - - - - - - - - - - - - - - + this should stop here^ + + + +0 1 doc 1 0 diff --git a/result/comment5.xml.rdr b/result/comment5.xml.rdr new file mode 100644 index 0000000..fe7a88f --- /dev/null +++ b/result/comment5.xml.rdr @@ -0,0 +1,8 @@ +0 8 #comment 0 1 test of hyphen and line break handling + some text - interrupted - +- - - - - - - - - - - - - - - - - - - - - - + this should stop here^ + + + +0 1 doc 1 0 diff --git a/result/comment5.xml.sax b/result/comment5.xml.sax new file mode 100644 index 0000000..dd58e7a --- /dev/null +++ b/result/comment5.xml.sax @@ -0,0 +1,12 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.comment( test of hyphen and line break handling + some text - interrupted - +- - - - - - - - - - - - - - - - - - - - - - + this should stop here^ + + +) +SAX.startElement(doc) +SAX.endElement(doc) +SAX.endDocument() diff --git a/result/comment5.xml.sax2 b/result/comment5.xml.sax2 new file mode 100644 index 0000000..f0940b2 --- /dev/null +++ b/result/comment5.xml.sax2 @@ -0,0 +1,12 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.comment( test of hyphen and line break handling + some text - interrupted - +- - - - - - - - - - - - - - - - - - - - - - + this should stop here^ + + +) +SAX.startElementNs(doc, NULL, NULL, 0, 0, 0) +SAX.endElementNs(doc, NULL, NULL) +SAX.endDocument() diff --git a/result/comment6.xml b/result/comment6.xml new file mode 100644 index 0000000..3e6074e --- /dev/null +++ b/result/comment6.xml @@ -0,0 +1,14 @@ + + + +]> + diff --git a/result/comment6.xml.rde b/result/comment6.xml.rde new file mode 100644 index 0000000..e877c3e --- /dev/null +++ b/result/comment6.xml.rde @@ -0,0 +1,11 @@ +0 8 #comment 0 1 +long comment long comment long comment long comment long comment long comment +long comment long comment long comment long comment long comment long comment +long comment long comment long comment long comment long comment long comment +long comment long comment long comment long comment long comment long comment +long comment long comment long comment long comment long comment long comment +long comment long comment long comment long comment long comment long comment +long comment long comment long comment long comment long comment long comment + +0 10 a 0 0 +0 1 a 1 0 diff --git a/result/comment6.xml.rdr b/result/comment6.xml.rdr new file mode 100644 index 0000000..e877c3e --- /dev/null +++ b/result/comment6.xml.rdr @@ -0,0 +1,11 @@ +0 8 #comment 0 1 +long comment long comment long comment long comment long comment long comment +long comment long comment long comment long comment long comment long comment +long comment long comment long comment long comment long comment long comment +long comment long comment long comment long comment long comment long comment +long comment long comment long comment long comment long comment long comment +long comment long comment long comment long comment long comment long comment +long comment long comment long comment long comment long comment long comment + +0 10 a 0 0 +0 1 a 1 0 diff --git a/result/comment6.xml.sax b/result/comment6.xml.sax new file mode 100644 index 0000000..53fea21 --- /dev/null +++ b/result/comment6.xml.sax @@ -0,0 +1,17 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.comment( +long comment long comment long comment long comment long comment long comment +long comment long comment long comment long comment long comment long comment +long comment long comment long comment long comment long comment long comment +long comment long comment long comment long comment long comment long comment +long comment long comment long comment long comment long comment long comment +long comment long comment long comment long comment long comment long comment +long comment long comment long comment long comment long comment long comment +) +SAX.internalSubset(a, , ) +SAX.elementDecl(a, 1, ...) +SAX.externalSubset(a, , ) +SAX.startElement(a) +SAX.endElement(a) +SAX.endDocument() diff --git a/result/comment6.xml.sax2 b/result/comment6.xml.sax2 new file mode 100644 index 0000000..7dd7dc0 --- /dev/null +++ b/result/comment6.xml.sax2 @@ -0,0 +1,17 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.comment( +long comment long comment long comment long comment long comment long comment +long comment long comment long comment long comment long comment long comment +long comment long comment long comment long comment long comment long comment +long comment long comment long comment long comment long comment long comment +long comment long comment long comment long comment long comment long comment +long comment long comment long comment long comment long comment long comment +long comment long comment long comment long comment long comment long comment +) +SAX.internalSubset(a, , ) +SAX.elementDecl(a, 1, ...) +SAX.externalSubset(a, , ) +SAX.startElementNs(a, NULL, NULL, 0, 0, 0) +SAX.endElementNs(a, NULL, NULL) +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 @@ + + + + + + Box type A + + + J.J. Dingleheimerschmidt + + + HTTP/1.1 200 OK + + + + + + + HTTP/1.1 403 Forbidden + The user does not have access to the DingALing property. + + + There has been an access violation error. + + diff --git a/result/dav1.rde b/result/dav1.rde new file mode 100644 index 0000000..d8d44e6 --- /dev/null +++ b/result/dav1.rde @@ -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.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/dav1.sax2 b/result/dav1.sax2 new file mode 100644 index 0000000..44ad11c --- /dev/null +++ b/result/dav1.sax2 @@ -0,0 +1,81 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElementNs(multistatus, D, 'http://www.ietf.org/standards/dav/', 2, xmlns:D='http://www.ietf.org/standards/dav/', xmlns:R='http://www.foo.bar/boxschema', 0, 0) +SAX.characters( + , 3) +SAX.startElementNs(response, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(prop, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + , 7) +SAX.startElementNs(bigbox, R, 'http://www.foo.bar/boxschema', 0, 0, 0) +SAX.characters( + , 9) +SAX.startElementNs(BoxType, R, 'http://www.foo.bar/boxschema', 0, 0, 0) +SAX.characters(Box type A, 10) +SAX.endElementNs(BoxType, R, 'http://www.foo.bar/boxschema') +SAX.characters( + , 7) +SAX.endElementNs(bigbox, R, 'http://www.foo.bar/boxschema') +SAX.characters( + , 7) +SAX.startElementNs(author, R, 'http://www.foo.bar/boxschema', 0, 0, 0) +SAX.characters( + , 9) +SAX.startElementNs(Name, R, 'http://www.foo.bar/boxschema', 0, 0, 0) +SAX.characters(J.J. Dingleheimerschmidt, 24) +SAX.endElementNs(Name, R, 'http://www.foo.bar/boxschema') +SAX.characters( + , 7) +SAX.endElementNs(author, R, 'http://www.foo.bar/boxschema') +SAX.characters( + , 5) +SAX.endElementNs(prop, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 5) +SAX.startElementNs(status, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(HTTP/1.1 200 OK, 15) +SAX.endElementNs(status, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 3) +SAX.endElementNs(response, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 3) +SAX.startElementNs(response, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(prop, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + , 7) +SAX.startElementNs(DingALing, R, 'http://www.foo.bar/boxschema', 0, 0, 0) +SAX.endElementNs(DingALing, R, 'http://www.foo.bar/boxschema') +SAX.characters( + , 7) +SAX.startElementNs(Random, R, 'http://www.foo.bar/boxschema', 0, 0, 0) +SAX.endElementNs(Random, R, 'http://www.foo.bar/boxschema') +SAX.characters( + , 5) +SAX.endElementNs(prop, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 5) +SAX.startElementNs(status, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(HTTP/1.1 403 Forbidden, 22) +SAX.endElementNs(status, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 5) +SAX.startElementNs(responsedescription, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( The user does not have access, 64) +SAX.endElementNs(responsedescription, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 3) +SAX.endElementNs(response, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 3) +SAX.startElementNs(responsedescription, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( There has been an access viol, 44) +SAX.endElementNs(responsedescription, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( +, 1) +SAX.endElementNs(multistatus, D, 'http://www.ietf.org/standards/dav/') +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 @@ + + + http://www.ics.uci.edu/~ejw/contact.html + diff --git a/result/dav10.rde b/result/dav10.rde new file mode 100644 index 0000000..bfb552d --- /dev/null +++ b/result/dav10.rde @@ -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.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/dav10.sax2 b/result/dav10.sax2 new file mode 100644 index 0000000..e93e22c --- /dev/null +++ b/result/dav10.sax2 @@ -0,0 +1,12 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElementNs(owner, D, 'http://www.ietf.org/standards/dav/', 1, xmlns:D='http://www.ietf.org/standards/dav/', 0, 0) +SAX.characters( + , 3) +SAX.startElementNs(href, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(http://www.ics.uci.edu/~ejw/co, 40) +SAX.endElementNs(href, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( +, 1) +SAX.endElementNs(owner, D, 'http://www.ietf.org/standards/dav/') +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 @@ + + + + + write + exclusive + + + + http://www.ics.uci.edu/~ejw/contact.html + + + Second-604800 + + + opaquelocktoken:xyz122393481230912asdfa09s8df09s7df + + + + + diff --git a/result/dav11.rde b/result/dav11.rde new file mode 100644 index 0000000..088afeb --- /dev/null +++ b/result/dav11.rde @@ -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.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/dav11.sax2 b/result/dav11.sax2 new file mode 100644 index 0000000..d0f2329 --- /dev/null +++ b/result/dav11.sax2 @@ -0,0 +1,62 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElementNs(prop, D, 'http://www.ietf.org/standards/dav/', 1, xmlns:D='http://www.ietf.org/standards/dav/', 0, 0) +SAX.characters( + , 3) +SAX.startElementNs(lockdiscovery, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(activelock, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + , 7) +SAX.startElementNs(locktype, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(write, 5) +SAX.endElementNs(locktype, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 7) +SAX.startElementNs(lockscope, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(exclusive, 9) +SAX.endElementNs(lockscope, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 7) +SAX.startElementNs(addlocks, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.endElementNs(addlocks, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 7) +SAX.startElementNs(owner, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + , 9) +SAX.startElementNs(href, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + http://www.ics.uci.edu/~ejw, 46) +SAX.endElementNs(href, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 7) +SAX.endElementNs(owner, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 7) +SAX.startElementNs(timeout, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(Second-604800, 13) +SAX.endElementNs(timeout, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 7) +SAX.startElementNs(locktoken, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + , 9) +SAX.startElementNs(href, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + opaquelocktoken:xyz122393, 59) +SAX.endElementNs(href, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 7) +SAX.endElementNs(locktoken, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 5) +SAX.endElementNs(activelock, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 3) +SAX.endElementNs(lockdiscovery, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( +, 1) +SAX.endElementNs(prop, D, 'http://www.ietf.org/standards/dav/') +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 @@ + +http://www.ics.uci.edu/~ejw/contact.html diff --git a/result/dav12.rde b/result/dav12.rde new file mode 100644 index 0000000..0df7943 --- /dev/null +++ b/result/dav12.rde @@ -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.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/dav12.sax2 b/result/dav12.sax2 new file mode 100644 index 0000000..61715b6 --- /dev/null +++ b/result/dav12.sax2 @@ -0,0 +1,6 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElementNs(href, D, 'http://www.ietf.org/standards/dav/', 1, xmlns:D='http://www.ietf.org/standards/dav/', 0, 0) +SAX.characters(http://www.ics.uci.edu/~ejw/co, 40) +SAX.endElementNs(href, D, 'http://www.ietf.org/standards/dav/') +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 @@ + + + + + http://webdav.sb.aol.com/workspace/webdav/proposal.doc + + + http://webdav.sb.aol.com/workspace/webdav/ + + HTTP/1.1 202 Accepted + + + http://foo.bar/blah + HTTP/1.1 403 Forbidden + + diff --git a/result/dav13.rde b/result/dav13.rde new file mode 100644 index 0000000..ffe978d --- /dev/null +++ b/result/dav13.rde @@ -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.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/dav13.sax2 b/result/dav13.sax2 new file mode 100644 index 0000000..f6c5381 --- /dev/null +++ b/result/dav13.sax2 @@ -0,0 +1,46 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElementNs(multistatus, D, 'http://www.ietf.org/standards/dav/', 1, xmlns:D='http://www.ietf.org/standards/dav/', 0, 0) +SAX.characters( + , 3) +SAX.startElementNs(response, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(href, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + http://webdav.sb.aol.com/, 66) +SAX.endElementNs(href, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 5) +SAX.startElementNs(href, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + http://webdav.sb.aol.com/, 54) +SAX.endElementNs(href, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 5) +SAX.startElementNs(status, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(HTTP/1.1 202 Accepted, 21) +SAX.endElementNs(status, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 3) +SAX.endElementNs(response, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 3) +SAX.startElementNs(response, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(href, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(http://foo.bar/blah, 19) +SAX.endElementNs(href, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 5) +SAX.startElementNs(status, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(HTTP/1.1 403 Forbidden, 22) +SAX.endElementNs(status, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 3) +SAX.endElementNs(response, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( +, 1) +SAX.endElementNs(multistatus, D, 'http://www.ietf.org/standards/dav/') +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 @@ + + + + + Source + http://foo.bar/program + http://foo.bar/src/main.c + + + Library + http://foo.bar/program + http://foo.bar/src/main.lib + + + Makefile + http://foo.bar/program + http://foo.bar/src/makefile + + + diff --git a/result/dav15.rde b/result/dav15.rde new file mode 100644 index 0000000..a4a4e7c --- /dev/null +++ b/result/dav15.rde @@ -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.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/dav15.sax2 b/result/dav15.sax2 new file mode 100644 index 0000000..6040cd1 --- /dev/null +++ b/result/dav15.sax2 @@ -0,0 +1,76 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElementNs(prop, D, 'http://www.ietf.org/standards/dav/', 2, xmlns:D='http://www.ietf.org/standards/dav/', xmlns:F='http://www.foocorp.com/Project/', 0, 0) +SAX.characters( + , 3) +SAX.startElementNs(Source, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(link, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + , 7) +SAX.startElementNs(projfiles, F, 'http://www.foocorp.com/Project/', 0, 0, 0) +SAX.characters(Source, 6) +SAX.endElementNs(projfiles, F, 'http://www.foocorp.com/Project/') +SAX.characters( + , 7) +SAX.startElementNs(src, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(http://foo.bar/program, 22) +SAX.endElementNs(src, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 7) +SAX.startElementNs(dst, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(http://foo.bar/src/main.c, 25) +SAX.endElementNs(dst, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 5) +SAX.endElementNs(link, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 5) +SAX.startElementNs(link, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + , 7) +SAX.startElementNs(projfiles, F, 'http://www.foocorp.com/Project/', 0, 0, 0) +SAX.characters(Library, 7) +SAX.endElementNs(projfiles, F, 'http://www.foocorp.com/Project/') +SAX.characters( + , 7) +SAX.startElementNs(src, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(http://foo.bar/program, 22) +SAX.endElementNs(src, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 7) +SAX.startElementNs(dst, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(http://foo.bar/src/main.lib, 27) +SAX.endElementNs(dst, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 5) +SAX.endElementNs(link, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 5) +SAX.startElementNs(link, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + , 7) +SAX.startElementNs(projfiles, F, 'http://www.foocorp.com/Project/', 0, 0, 0) +SAX.characters(Makefile, 8) +SAX.endElementNs(projfiles, F, 'http://www.foocorp.com/Project/') +SAX.characters( + , 7) +SAX.startElementNs(src, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(http://foo.bar/program, 22) +SAX.endElementNs(src, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 7) +SAX.startElementNs(dst, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(http://foo.bar/src/makefile, 27) +SAX.endElementNs(dst, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 5) +SAX.endElementNs(link, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 3) +SAX.endElementNs(Source, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( +, 1) +SAX.endElementNs(prop, D, 'http://www.ietf.org/standards/dav/') +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 @@ + + + + + + diff --git a/result/dav16.rde b/result/dav16.rde new file mode 100644 index 0000000..97a9933 --- /dev/null +++ b/result/dav16.rde @@ -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.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/dav16.sax2 b/result/dav16.sax2 new file mode 100644 index 0000000..1ede22e --- /dev/null +++ b/result/dav16.sax2 @@ -0,0 +1,17 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElementNs(propfind, D, 'http://www.ietf.org/standards/dav/', 1, xmlns:D='http://www.ietf.org/standards/dav/', 0, 0) +SAX.characters( + , 3) +SAX.startElementNs(prop, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(lockdiscovery, NULL, NULL, 0, 0, 0) +SAX.endElementNs(lockdiscovery, NULL, NULL) +SAX.characters( + , 3) +SAX.endElementNs(prop, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( +, 1) +SAX.endElementNs(propfind, D, 'http://www.ietf.org/standards/dav/') +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 @@ + + + + + + + write + exclusive + + http://foo.com/doc/ + + Jane Smith + Infinite + + iamuri:unique!!!!! + + + + + HTTP/1.1 200 OK + + diff --git a/result/dav17.rde b/result/dav17.rde new file mode 100644 index 0000000..a47b64e --- /dev/null +++ b/result/dav17.rde @@ -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.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/dav17.sax2 b/result/dav17.sax2 new file mode 100644 index 0000000..48185a2 --- /dev/null +++ b/result/dav17.sax2 @@ -0,0 +1,78 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElementNs(multistatus, D, 'http://www.ietf.org/standards/dav/', 1, xmlns:D='http://www.ietf.org/standards/dav/', 0, 0) +SAX.characters( + , 3) +SAX.startElementNs(response, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(prop, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + , 7) +SAX.startElementNs(lockdiscovery, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + , 9) +SAX.startElementNs(activelock, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + , 11) +SAX.startElementNs(locktype, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(write, 5) +SAX.endElementNs(locktype, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 11) +SAX.startElementNs(lockscope, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(exclusive, 9) +SAX.endElementNs(lockscope, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 11) +SAX.startElementNs(addlocks, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + , 13) +SAX.startElementNs(href, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(http://foo.com/doc/, 19) +SAX.endElementNs(href, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 11) +SAX.endElementNs(addlocks, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 11) +SAX.startElementNs(owner, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(Jane Smith, 10) +SAX.endElementNs(owner, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 11) +SAX.startElementNs(timeout, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(Infinite, 8) +SAX.endElementNs(timeout, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 11) +SAX.startElementNs(locktoken, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + , 13) +SAX.startElementNs(href, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(iamuri:unique!!!!!, 18) +SAX.endElementNs(href, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 11) +SAX.endElementNs(locktoken, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 9) +SAX.endElementNs(activelock, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 7) +SAX.endElementNs(lockdiscovery, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 5) +SAX.endElementNs(prop, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 5) +SAX.startElementNs(status, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(HTTP/1.1 200 OK, 15) +SAX.endElementNs(status, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 3) +SAX.endElementNs(response, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( +, 1) +SAX.endElementNs(multistatus, D, 'http://www.ietf.org/standards/dav/') +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 @@ + + + + + + diff --git a/result/dav18.rde b/result/dav18.rde new file mode 100644 index 0000000..9de17af --- /dev/null +++ b/result/dav18.rde @@ -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.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/dav18.sax2 b/result/dav18.sax2 new file mode 100644 index 0000000..cddc100 --- /dev/null +++ b/result/dav18.sax2 @@ -0,0 +1,17 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElementNs(propfind, D, 'http://www.ietf.org/standards/dav/', 1, xmlns:D='http://www.ietf.org/standards/dav/', 0, 0) +SAX.characters( + , 3) +SAX.startElementNs(prop, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(supportedlock, NULL, NULL, 0, 0, 0) +SAX.endElementNs(supportedlock, NULL, NULL) +SAX.characters( + , 3) +SAX.endElementNs(prop, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( +, 1) +SAX.endElementNs(propfind, D, 'http://www.ietf.org/standards/dav/') +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 @@ + + + + + + + Write + Exclusive + + + Write + Shared + + + + HTTP/1.1 200 OK + + diff --git a/result/dav19.rde b/result/dav19.rde new file mode 100644 index 0000000..d2c1e00 --- /dev/null +++ b/result/dav19.rde @@ -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.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/dav19.sax2 b/result/dav19.sax2 new file mode 100644 index 0000000..f0dd402 --- /dev/null +++ b/result/dav19.sax2 @@ -0,0 +1,62 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElementNs(multistatus, D, 'http://www.ietf.org/standards/dav/', 1, xmlns:D='http://www.ietf.org/standards/dav/', 0, 0) +SAX.characters( + , 3) +SAX.startElementNs(response, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(prop, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + , 7) +SAX.startElementNs(supportedlock, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + , 9) +SAX.startElementNs(LockEntry, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + , 11) +SAX.startElementNs(locktype, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(Write, 5) +SAX.endElementNs(locktype, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 11) +SAX.startElementNs(lockscope, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(Exclusive, 9) +SAX.endElementNs(lockscope, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 9) +SAX.endElementNs(LockEntry, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 9) +SAX.startElementNs(LockEntry, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + , 11) +SAX.startElementNs(locktype, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(Write, 5) +SAX.endElementNs(locktype, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 11) +SAX.startElementNs(lockscope, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(Shared, 6) +SAX.endElementNs(lockscope, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 9) +SAX.endElementNs(LockEntry, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 7) +SAX.endElementNs(supportedlock, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 5) +SAX.endElementNs(prop, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 5) +SAX.startElementNs(status, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(HTTP/1.1 200 OK, 15) +SAX.endElementNs(status, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 3) +SAX.endElementNs(response, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( +, 1) +SAX.endElementNs(multistatus, D, 'http://www.ietf.org/standards/dav/') +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 @@ + + + + http://www.foo.bar/container/ + + + Box type A + + + Hadrian + + + HTTP 1.1 200 OK + + + http://www.foo.bar/container/index.html + + + Box type B + + + HTTP 1.1 200 OK + + diff --git a/result/dav2.rde b/result/dav2.rde new file mode 100644 index 0000000..41fc86d --- /dev/null +++ b/result/dav2.rde @@ -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.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/dav2.sax2 b/result/dav2.sax2 new file mode 100644 index 0000000..22c7bb0 --- /dev/null +++ b/result/dav2.sax2 @@ -0,0 +1,84 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElementNs(multistatus, S, 'http://www.ietf.org/standards/dav/', 2, xmlns:S='http://www.ietf.org/standards/dav/', xmlns:R='http://www.foo.bar/boxschema/', 0, 0) +SAX.characters( + , 3) +SAX.startElementNs(response, S, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(href, S, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(http://www.foo.bar/container/, 29) +SAX.endElementNs(href, S, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 5) +SAX.startElementNs(prop, S, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + , 7) +SAX.startElementNs(bigbox, R, 'http://www.foo.bar/boxschema/', 0, 0, 0) +SAX.characters( + , 9) +SAX.startElementNs(BoxType, R, 'http://www.foo.bar/boxschema/', 0, 0, 0) +SAX.characters(Box type A, 10) +SAX.endElementNs(BoxType, R, 'http://www.foo.bar/boxschema/') +SAX.characters( + , 7) +SAX.endElementNs(bigbox, R, 'http://www.foo.bar/boxschema/') +SAX.characters( + , 7) +SAX.startElementNs(author, R, 'http://www.foo.bar/boxschema/', 0, 0, 0) +SAX.characters( + , 9) +SAX.startElementNs(Name, R, 'http://www.foo.bar/boxschema/', 0, 0, 0) +SAX.characters(Hadrian, 7) +SAX.endElementNs(Name, R, 'http://www.foo.bar/boxschema/') +SAX.characters( + , 7) +SAX.endElementNs(author, R, 'http://www.foo.bar/boxschema/') +SAX.characters( + , 5) +SAX.endElementNs(prop, S, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 5) +SAX.startElementNs(status, S, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(HTTP 1.1 200 OK, 15) +SAX.endElementNs(status, S, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 3) +SAX.endElementNs(response, S, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 3) +SAX.startElementNs(response, S, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(href, S, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(http://www.foo.bar/container/i, 39) +SAX.endElementNs(href, S, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 5) +SAX.startElementNs(prop, S, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + , 7) +SAX.startElementNs(bigbox, R, 'http://www.foo.bar/boxschema/', 0, 0, 0) +SAX.characters( + , 9) +SAX.startElementNs(BoxType, R, 'http://www.foo.bar/boxschema/', 0, 0, 0) +SAX.characters(Box type B, 10) +SAX.endElementNs(BoxType, R, 'http://www.foo.bar/boxschema/') +SAX.characters( + , 7) +SAX.endElementNs(bigbox, R, 'http://www.foo.bar/boxschema/') +SAX.characters( + , 5) +SAX.endElementNs(prop, S, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 5) +SAX.startElementNs(status, S, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(HTTP 1.1 200 OK, 15) +SAX.endElementNs(status, S, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 3) +SAX.endElementNs(response, S, 'http://www.ietf.org/standards/dav/') +SAX.characters( +, 1) +SAX.endElementNs(multistatus, S, 'http://www.ietf.org/standards/dav/') +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 @@ + + + + http://www.foo.bar/container/ + + + + + HTTP 1.1 200 OK + + + http://www.foo.bar/container/index.html + + + + HTTP 1.1 200 OK + + diff --git a/result/dav3.rde b/result/dav3.rde new file mode 100644 index 0000000..f106f17 --- /dev/null +++ b/result/dav3.rde @@ -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.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/dav3.sax2 b/result/dav3.sax2 new file mode 100644 index 0000000..0088f29 --- /dev/null +++ b/result/dav3.sax2 @@ -0,0 +1,63 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElementNs(multistatus, D, 'http://www.ietf.org/standards/dav/', 2, xmlns:D='http://www.ietf.org/standards/dav/', xmlns:R='http://www.foo.bar/boxschema/', 0, 0) +SAX.characters( + , 3) +SAX.startElementNs(response, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(href, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(http://www.foo.bar/container/, 29) +SAX.endElementNs(href, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 5) +SAX.startElementNs(prop, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + , 7) +SAX.startElementNs(bigbox, R, 'http://www.foo.bar/boxschema/', 0, 0, 0) +SAX.endElementNs(bigbox, R, 'http://www.foo.bar/boxschema/') +SAX.characters( + , 7) +SAX.startElementNs(author, R, 'http://www.foo.bar/boxschema/', 0, 0, 0) +SAX.endElementNs(author, R, 'http://www.foo.bar/boxschema/') +SAX.characters( + , 5) +SAX.endElementNs(prop, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 5) +SAX.startElementNs(status, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(HTTP 1.1 200 OK, 15) +SAX.endElementNs(status, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 3) +SAX.endElementNs(response, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 3) +SAX.startElementNs(response, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(href, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(http://www.foo.bar/container/i, 39) +SAX.endElementNs(href, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 5) +SAX.startElementNs(prop, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + , 7) +SAX.startElementNs(bigbox, R, 'http://www.foo.bar/boxschema/', 0, 0, 0) +SAX.endElementNs(bigbox, R, 'http://www.foo.bar/boxschema/') +SAX.characters( + , 5) +SAX.endElementNs(prop, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 5) +SAX.startElementNs(status, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(HTTP 1.1 200 OK, 15) +SAX.endElementNs(status, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 3) +SAX.endElementNs(response, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( +, 1) +SAX.endElementNs(multistatus, D, 'http://www.ietf.org/standards/dav/') +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 @@ + + + + + + Jim Whitehead + Roy Fielding + + + + + + + + + diff --git a/result/dav4.rde b/result/dav4.rde new file mode 100644 index 0000000..e764047 --- /dev/null +++ b/result/dav4.rde @@ -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.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/dav4.sax2 b/result/dav4.sax2 new file mode 100644 index 0000000..58fb8ac --- /dev/null +++ b/result/dav4.sax2 @@ -0,0 +1,51 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElementNs(propertyupdate, D, 'http://www.ietf.org/standards/dav/', 2, xmlns:D='http://www.ietf.org/standards/dav/', xmlns:Z='http://www.w3.com/standards/z39.50/', 0, 0) +SAX.characters( + , 3) +SAX.startElementNs(set, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(prop, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + , 7) +SAX.startElementNs(authors, Z, 'http://www.w3.com/standards/z39.50/', 0, 0, 0) +SAX.characters( + , 9) +SAX.startElementNs(Author, Z, 'http://www.w3.com/standards/z39.50/', 0, 0, 0) +SAX.characters(Jim Whitehead, 13) +SAX.endElementNs(Author, Z, 'http://www.w3.com/standards/z39.50/') +SAX.characters( + , 9) +SAX.startElementNs(Author, Z, 'http://www.w3.com/standards/z39.50/', 0, 0, 0) +SAX.characters(Roy Fielding, 12) +SAX.endElementNs(Author, Z, 'http://www.w3.com/standards/z39.50/') +SAX.characters( + , 7) +SAX.endElementNs(authors, Z, 'http://www.w3.com/standards/z39.50/') +SAX.characters( + , 5) +SAX.endElementNs(prop, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 3) +SAX.endElementNs(set, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 3) +SAX.startElementNs(remove, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(prop, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + , 7) +SAX.startElementNs(Copyright-Owner, Z, 'http://www.w3.com/standards/z39.50/', 0, 0, 0) +SAX.endElementNs(Copyright-Owner, Z, 'http://www.w3.com/standards/z39.50/') +SAX.characters( + , 5) +SAX.endElementNs(prop, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 3) +SAX.endElementNs(remove, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( +, 1) +SAX.endElementNs(propertyupdate, D, 'http://www.ietf.org/standards/dav/') +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 @@ + + + + + + + HTTP/1.1 420 Method Failure + + + + + + HTTP/1.1 409 Conflict + + Copyright Owner can not be deleted or +altered. + diff --git a/result/dav5.rde b/result/dav5.rde new file mode 100644 index 0000000..c92d177 --- /dev/null +++ b/result/dav5.rde @@ -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.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/dav5.sax2 b/result/dav5.sax2 new file mode 100644 index 0000000..6062cca --- /dev/null +++ b/result/dav5.sax2 @@ -0,0 +1,54 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElementNs(multistatus, D, 'http://www.ietf.org/standards/dav/', 2, xmlns:D='http://www.ietf.org/standards/dav/', xmlns:Z='http://www.w3.com/standards/z39.50/', 0, 0) +SAX.characters( + , 3) +SAX.startElementNs(response, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(prop, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + , 7) +SAX.startElementNs(Authors, Z, 'http://www.w3.com/standards/z39.50/', 0, 0, 0) +SAX.endElementNs(Authors, Z, 'http://www.w3.com/standards/z39.50/') +SAX.characters( + , 5) +SAX.endElementNs(prop, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 5) +SAX.startElementNs(status, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(HTTP/1.1 420 Method Failure, 27) +SAX.endElementNs(status, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 3) +SAX.endElementNs(response, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 3) +SAX.startElementNs(response, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(prop, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + , 7) +SAX.startElementNs(Copyright-Owner, Z, 'http://www.w3.com/standards/z39.50/', 0, 0, 0) +SAX.endElementNs(Copyright-Owner, Z, 'http://www.w3.com/standards/z39.50/') +SAX.characters( + , 5) +SAX.endElementNs(prop, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 5) +SAX.startElementNs(status, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(HTTP/1.1 409 Conflict, 21) +SAX.endElementNs(status, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 3) +SAX.endElementNs(response, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 3) +SAX.startElementNs(responsedescription, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( Copyright Owner can not be de, 47) +SAX.endElementNs(responsedescription, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( +, 1) +SAX.endElementNs(multistatus, D, 'http://www.ietf.org/standards/dav/') +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 @@ + + + + http://www.microsoft.com/user/yarong/dav_drafts/ + + + + + + + HTTP 1.1 200 OK + + + + http://www.microsoft.com/user/yarong/dav_drafts/base + + + + + HTTP 1.1 200 OK + + diff --git a/result/dav6.rde b/result/dav6.rde new file mode 100644 index 0000000..726e3c2 --- /dev/null +++ b/result/dav6.rde @@ -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.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/dav6.sax2 b/result/dav6.sax2 new file mode 100644 index 0000000..31952c5 --- /dev/null +++ b/result/dav6.sax2 @@ -0,0 +1,66 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElementNs(multistatus, D, 'http://www.ietf.org/standards/dav/', 1, xmlns:D='http://www.ietf.org/standards/dav/', 0, 0) +SAX.characters( + , 3) +SAX.startElementNs(response, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(href, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(http://www.microsoft.com/user/, 55) +SAX.endElementNs(href, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 5) +SAX.startElementNs(prop, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + , 7) +SAX.startElementNs(resourcetype, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + , 9) +SAX.startElementNs(collection, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.endElementNs(collection, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 7) +SAX.endElementNs(resourcetype, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 5) +SAX.endElementNs(prop, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 5) +SAX.startElementNs(status, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(HTTP 1.1 200 OK, 15) +SAX.endElementNs(status, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 3) +SAX.endElementNs(response, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 3) +SAX.startElementNs(response, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(href, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + http://www.microsoft.co, 66) +SAX.endElementNs(href, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 5) +SAX.startElementNs(prop, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + , 7) +SAX.startElementNs(resourcetype, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.endElementNs(resourcetype, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 5) +SAX.endElementNs(prop, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 5) +SAX.startElementNs(status, D, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(HTTP 1.1 200 OK, 15) +SAX.endElementNs(status, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 3) +SAX.endElementNs(response, D, 'http://www.ietf.org/standards/dav/') +SAX.characters( +, 1) +SAX.endElementNs(multistatus, D, 'http://www.ietf.org/standards/dav/') +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 @@ + + + + http://www.foo.bar/container/resource1 + http://www.foo.bar/container/resource2 + HTTP/1.1 200 OK + + + http://www.foo.bar/container/ + HTTP/1.1 420 Method Failure + + + http://www.foo.bar/container/resource3 + HTTP/1.1 412 Precondition Failed + + diff --git a/result/dav7.rde b/result/dav7.rde new file mode 100644 index 0000000..3f98328 --- /dev/null +++ b/result/dav7.rde @@ -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.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/dav7.sax2 b/result/dav7.sax2 new file mode 100644 index 0000000..1d51e74 --- /dev/null +++ b/result/dav7.sax2 @@ -0,0 +1,60 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElementNs(multistatus, d, 'http://www.ietf.org/standards/dav/', 1, xmlns:d='http://www.ietf.org/standards/dav/', 0, 0) +SAX.characters( + , 3) +SAX.startElementNs(response, d, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(href, d, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(http://www.foo.bar/container/r, 38) +SAX.endElementNs(href, d, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 5) +SAX.startElementNs(href, d, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(http://www.foo.bar/container/r, 38) +SAX.endElementNs(href, d, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 5) +SAX.startElementNs(status, d, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(HTTP/1.1 200 OK, 15) +SAX.endElementNs(status, d, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 3) +SAX.endElementNs(response, d, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 3) +SAX.startElementNs(response, d, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(href, d, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(http://www.foo.bar/container/, 29) +SAX.endElementNs(href, d, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 5) +SAX.startElementNs(status, d, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(HTTP/1.1 420 Method Failure, 27) +SAX.endElementNs(status, d, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 3) +SAX.endElementNs(response, d, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 3) +SAX.startElementNs(response, d, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(href, d, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(http://www.foo.bar/container/r, 38) +SAX.endElementNs(href, d, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 5) +SAX.startElementNs(status, d, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(HTTP/1.1 412 Precondition Fail, 32) +SAX.endElementNs(status, d, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 3) +SAX.endElementNs(response, d, 'http://www.ietf.org/standards/dav/') +SAX.characters( +, 1) +SAX.endElementNs(multistatus, d, 'http://www.ietf.org/standards/dav/') +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 @@ + + + + http://www.foo.bar/othercontainer/resource1 + http://www.foo.bar/othercontainer/resource2 + http://www.foo.bar/othercontainer/ + http://www.foo.bar/othercontainer/R2/D2 + HTTP/1.1 201 Created + + + http://www.foo.bar/othercontainer/R2/ + HTTP/1.1 412 Precondition Failed + + diff --git a/result/dav8.rde b/result/dav8.rde new file mode 100644 index 0000000..f14225e --- /dev/null +++ b/result/dav8.rde @@ -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.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/dav8.sax2 b/result/dav8.sax2 new file mode 100644 index 0000000..7de547e --- /dev/null +++ b/result/dav8.sax2 @@ -0,0 +1,54 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElementNs(multistatus, d, 'http://www.ietf.org/standards/dav/', 1, xmlns:d='http://www.ietf.org/standards/dav/', 0, 0) +SAX.characters( + , 3) +SAX.startElementNs(response, d, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(href, d, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(http://www.foo.bar/othercontai, 43) +SAX.endElementNs(href, d, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 5) +SAX.startElementNs(href, d, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(http://www.foo.bar/othercontai, 43) +SAX.endElementNs(href, d, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 5) +SAX.startElementNs(href, d, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(http://www.foo.bar/othercontai, 34) +SAX.endElementNs(href, d, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 5) +SAX.startElementNs(href, d, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(http://www.foo.bar/othercontai, 39) +SAX.endElementNs(href, d, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 5) +SAX.startElementNs(status, d, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(HTTP/1.1 201 Created, 20) +SAX.endElementNs(status, d, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 3) +SAX.endElementNs(response, d, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 3) +SAX.startElementNs(response, d, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(href, d, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(http://www.foo.bar/othercontai, 37) +SAX.endElementNs(href, d, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 5) +SAX.startElementNs(status, d, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(HTTP/1.1 412 Precondition Fail, 32) +SAX.endElementNs(status, d, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 3) +SAX.endElementNs(response, d, 'http://www.ietf.org/standards/dav/') +SAX.characters( +, 1) +SAX.endElementNs(multistatus, d, 'http://www.ietf.org/standards/dav/') +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 @@ + + + + http://www.foo.bar/container/resource1 + http://www.foo.bar/container/resource2 + http://www.foo.bar/container/ + http://www.foo.bar/container/C2/R2 + HTTP/1.1 201 Created + + + http://www.foo.bar/container/C2 + HTTP/1.1 420 Method Failure + + + http://www.foo.bar/othercontainer/C2 + HTTP/1.1 409 Conflict + + diff --git a/result/dav9.rde b/result/dav9.rde new file mode 100644 index 0000000..943ab96 --- /dev/null +++ b/result/dav9.rde @@ -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.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/dav9.sax2 b/result/dav9.sax2 new file mode 100644 index 0000000..26e4942 --- /dev/null +++ b/result/dav9.sax2 @@ -0,0 +1,70 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElementNs(multistatus, d, 'http://www.ietf.org/standards/dav/', 1, xmlns:d='http://www.ietf.org/standards/dav/', 0, 0) +SAX.characters( + , 3) +SAX.startElementNs(response, d, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(href, d, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(http://www.foo.bar/container/r, 38) +SAX.endElementNs(href, d, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 5) +SAX.startElementNs(href, d, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(http://www.foo.bar/container/r, 38) +SAX.endElementNs(href, d, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 5) +SAX.startElementNs(href, d, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(http://www.foo.bar/container/, 29) +SAX.endElementNs(href, d, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 5) +SAX.startElementNs(href, d, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(http://www.foo.bar/container/C, 34) +SAX.endElementNs(href, d, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 5) +SAX.startElementNs(status, d, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(HTTP/1.1 201 Created, 20) +SAX.endElementNs(status, d, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 3) +SAX.endElementNs(response, d, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 3) +SAX.startElementNs(response, d, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(href, d, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(http://www.foo.bar/container/C, 31) +SAX.endElementNs(href, d, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 5) +SAX.startElementNs(status, d, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(HTTP/1.1 420 Method Failure, 27) +SAX.endElementNs(status, d, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 3) +SAX.endElementNs(response, d, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 3) +SAX.startElementNs(response, d, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(href, d, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(http://www.foo.bar/othercontai, 36) +SAX.endElementNs(href, d, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 5) +SAX.startElementNs(status, d, 'http://www.ietf.org/standards/dav/', 0, 0, 0) +SAX.characters(HTTP/1.1 409 Conflict, 21) +SAX.endElementNs(status, d, 'http://www.ietf.org/standards/dav/') +SAX.characters( + , 3) +SAX.endElementNs(response, d, 'http://www.ietf.org/standards/dav/') +SAX.characters( +, 1) +SAX.endElementNs(multistatus, d, 'http://www.ietf.org/standards/dav/') +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 @@ + + + +]> + diff --git a/result/defattr.xml.rde b/result/defattr.xml.rde new file mode 100644 index 0000000..9b0a34d --- /dev/null +++ b/result/defattr.xml.rde @@ -0,0 +1,2 @@ +0 10 doc 0 0 +0 1 doc 1 0 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/defattr.xml.sax2 b/result/defattr.xml.sax2 new file mode 100644 index 0000000..dfeba49 --- /dev/null +++ b/result/defattr.xml.sax2 @@ -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.startElementNs(doc, NULL, 'http://www.example.com/', 1, xmlns='http://www.example.com/', 0, 0) +SAX.endElementNs(doc, NULL, 'http://www.example.com/') +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 @@ + + + + + +]> + diff --git a/result/defattr2.xml.rde b/result/defattr2.xml.rde new file mode 100644 index 0000000..9b0a34d --- /dev/null +++ b/result/defattr2.xml.rde @@ -0,0 +1,2 @@ +0 10 doc 0 0 +0 1 doc 1 0 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/defattr2.xml.sax2 b/result/defattr2.xml.sax2 new file mode 100644 index 0000000..0f77271 --- /dev/null +++ b/result/defattr2.xml.sax2 @@ -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.startElementNs(doc, NULL, NULL, 1, xmlns:tst='http://example.org', 3, 2, att='1"/>...', 1, defatt='0...', 1, tst:att='1...', 1) +SAX.endElementNs(doc, NULL, NULL) +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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/result/dia1.rde b/result/dia1.rde new file mode 100644 index 0000000..3767325 --- /dev/null +++ b/result/dia1.rde @@ -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.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/dia1.sax2 b/result/dia1.sax2 new file mode 100644 index 0000000..4821c9b --- /dev/null +++ b/result/dia1.sax2 @@ -0,0 +1,323 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElementNs(diagram, dia, 'http://www.lysator.liu.se/~alla/dia/', 1, xmlns:dia='http://www.lysator.liu.se/~alla/dia/', 0, 0) +SAX.characters( + , 3) +SAX.startElementNs(diagramdata, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, name='back...', 10) +SAX.characters( + , 7) +SAX.startElementNs(color, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, val='#fff...', 7) +SAX.endElementNs(color, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 5) +SAX.endElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 3) +SAX.endElementNs(diagramdata, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 3) +SAX.startElementNs(layer, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 2, 0, name='Back...', 10, visible='true...', 4) +SAX.characters( + , 5) +SAX.startElementNs(object, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 3, 0, type='Stan...', 15, version='0" i...', 1, id='O0">...', 2) +SAX.characters( + , 7) +SAX.startElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, name='obj_...', 7) +SAX.characters( + , 9) +SAX.startElementNs(point, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, val='1.95...', 9) +SAX.endElementNs(point, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.endElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.startElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, name='obj_...', 6) +SAX.characters( + , 9) +SAX.startElementNs(rectangle, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, val='1.9,...', 15) +SAX.endElementNs(rectangle, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.endElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.startElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, name='conn...', 14) +SAX.characters( + , 9) +SAX.startElementNs(point, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, val='1.95...', 9) +SAX.endElementNs(point, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 9) +SAX.startElementNs(point, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, val='10.9...', 9) +SAX.endElementNs(point, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.endElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.startElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, name='line...', 10) +SAX.characters( + , 9) +SAX.startElementNs(color, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, val='#000...', 7) +SAX.endElementNs(color, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.endElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.startElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, name='line...', 10) +SAX.characters( + , 9) +SAX.startElementNs(real, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, val='0.1"...', 3) +SAX.endElementNs(real, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.endElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.startElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, name='line...', 10) +SAX.characters( + , 9) +SAX.startElementNs(enum, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, val='0"/>...', 1) +SAX.endElementNs(enum, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.endElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.startElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, name='star...', 11) +SAX.characters( + , 9) +SAX.startElementNs(enum, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, val='0"/>...', 1) +SAX.endElementNs(enum, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.endElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.startElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, name='end_...', 9) +SAX.characters( + , 9) +SAX.startElementNs(enum, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, val='0"/>...', 1) +SAX.endElementNs(enum, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.endElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.startElementNs(connections, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 0, 0) +SAX.characters( + , 9) +SAX.startElementNs(connection, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 3, 0, handle='1" t...', 1, to='O2" ...', 2, connection='3"/>...', 1) +SAX.endElementNs(connection, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.endElementNs(connections, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 5) +SAX.endElementNs(object, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 5) +SAX.startElementNs(object, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 3, 0, type='Stan...', 15, version='0" i...', 1, id='O1">...', 2) +SAX.characters( + , 7) +SAX.startElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, name='obj_...', 7) +SAX.characters( + , 9) +SAX.startElementNs(point, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, val='4.8,...', 8) +SAX.endElementNs(point, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.endElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.startElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, name='obj_...', 6) +SAX.characters( + , 9) +SAX.startElementNs(rectangle, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, val='2.57...', 27) +SAX.endElementNs(rectangle, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.endElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.startElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, name='text...', 4) +SAX.characters( + , 9) +SAX.startElementNs(composite, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, type='text...', 4) +SAX.characters( + , 11) +SAX.startElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, name='stri...', 6) +SAX.characters( + , 13) +SAX.startElementNs(string, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, val='sdfs...', 7) +SAX.endElementNs(string, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 11) +SAX.endElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 11) +SAX.startElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, name='font...', 4) +SAX.characters( + , 13) +SAX.startElementNs(font, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, name='Cour...', 7) +SAX.endElementNs(font, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 11) +SAX.endElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 11) +SAX.startElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, name='heig...', 6) +SAX.characters( + , 13) +SAX.startElementNs(real, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, val='1"/>...', 1) +SAX.endElementNs(real, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 11) +SAX.endElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 11) +SAX.startElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, name='pos"...', 3) +SAX.characters( + , 13) +SAX.startElementNs(point, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, val='4.8,...', 8) +SAX.endElementNs(point, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 11) +SAX.endElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 11) +SAX.startElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, name='colo...', 5) +SAX.characters( + , 13) +SAX.startElementNs(color, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, val='#000...', 7) +SAX.endElementNs(color, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 11) +SAX.endElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 11) +SAX.startElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, name='alig...', 9) +SAX.characters( + , 13) +SAX.startElementNs(enum, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, val='1"/>...', 1) +SAX.endElementNs(enum, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 11) +SAX.endElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 9) +SAX.endElementNs(composite, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.endElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 5) +SAX.endElementNs(object, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 5) +SAX.startElementNs(object, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 3, 0, type='Stan...', 14, version='0" i...', 1, id='O2">...', 2) +SAX.characters( + , 7) +SAX.startElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, name='obj_...', 7) +SAX.characters( + , 9) +SAX.startElementNs(point, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, val='10.9...', 9) +SAX.endElementNs(point, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.endElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.startElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, name='obj_...', 6) +SAX.characters( + , 9) +SAX.startElementNs(rectangle, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, val='10.9...', 20) +SAX.endElementNs(rectangle, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.endElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.startElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, name='elem...', 11) +SAX.characters( + , 9) +SAX.startElementNs(point, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, val='10.9...', 9) +SAX.endElementNs(point, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.endElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.startElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, name='elem...', 10) +SAX.characters( + , 9) +SAX.startElementNs(real, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, val='2.05...', 4) +SAX.endElementNs(real, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.endElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.startElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, name='elem...', 11) +SAX.characters( + , 9) +SAX.startElementNs(real, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, val='2"/>...', 1) +SAX.endElementNs(real, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.endElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.startElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, name='bord...', 12) +SAX.characters( + , 9) +SAX.startElementNs(real, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, val='0.1"...', 3) +SAX.endElementNs(real, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.endElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.startElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, name='bord...', 12) +SAX.characters( + , 9) +SAX.startElementNs(color, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, val='#000...', 7) +SAX.endElementNs(color, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.endElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.startElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, name='inne...', 11) +SAX.characters( + , 9) +SAX.startElementNs(color, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, val='#fff...', 7) +SAX.endElementNs(color, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.endElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.startElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, name='line...', 10) +SAX.characters( + , 9) +SAX.startElementNs(enum, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, val='0"/>...', 1) +SAX.endElementNs(enum, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.endElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 5) +SAX.endElementNs(object, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 3) +SAX.endElementNs(layer, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( +, 1) +SAX.endElementNs(diagram, dia, 'http://www.lysator.liu.se/~alla/dia/') +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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/result/dia2.rde b/result/dia2.rde new file mode 100644 index 0000000..3767325 --- /dev/null +++ b/result/dia2.rde @@ -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.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/dia2.sax2 b/result/dia2.sax2 new file mode 100644 index 0000000..4821c9b --- /dev/null +++ b/result/dia2.sax2 @@ -0,0 +1,323 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElementNs(diagram, dia, 'http://www.lysator.liu.se/~alla/dia/', 1, xmlns:dia='http://www.lysator.liu.se/~alla/dia/', 0, 0) +SAX.characters( + , 3) +SAX.startElementNs(diagramdata, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, name='back...', 10) +SAX.characters( + , 7) +SAX.startElementNs(color, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, val='#fff...', 7) +SAX.endElementNs(color, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 5) +SAX.endElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 3) +SAX.endElementNs(diagramdata, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 3) +SAX.startElementNs(layer, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 2, 0, name='Back...', 10, visible='true...', 4) +SAX.characters( + , 5) +SAX.startElementNs(object, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 3, 0, type='Stan...', 15, version='0" i...', 1, id='O0">...', 2) +SAX.characters( + , 7) +SAX.startElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, name='obj_...', 7) +SAX.characters( + , 9) +SAX.startElementNs(point, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, val='1.95...', 9) +SAX.endElementNs(point, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.endElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.startElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, name='obj_...', 6) +SAX.characters( + , 9) +SAX.startElementNs(rectangle, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, val='1.9,...', 15) +SAX.endElementNs(rectangle, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.endElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.startElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, name='conn...', 14) +SAX.characters( + , 9) +SAX.startElementNs(point, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, val='1.95...', 9) +SAX.endElementNs(point, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 9) +SAX.startElementNs(point, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, val='10.9...', 9) +SAX.endElementNs(point, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.endElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.startElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, name='line...', 10) +SAX.characters( + , 9) +SAX.startElementNs(color, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, val='#000...', 7) +SAX.endElementNs(color, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.endElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.startElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, name='line...', 10) +SAX.characters( + , 9) +SAX.startElementNs(real, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, val='0.1"...', 3) +SAX.endElementNs(real, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.endElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.startElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, name='line...', 10) +SAX.characters( + , 9) +SAX.startElementNs(enum, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, val='0"/>...', 1) +SAX.endElementNs(enum, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.endElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.startElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, name='star...', 11) +SAX.characters( + , 9) +SAX.startElementNs(enum, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, val='0"/>...', 1) +SAX.endElementNs(enum, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.endElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.startElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, name='end_...', 9) +SAX.characters( + , 9) +SAX.startElementNs(enum, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, val='0"/>...', 1) +SAX.endElementNs(enum, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.endElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.startElementNs(connections, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 0, 0) +SAX.characters( + , 9) +SAX.startElementNs(connection, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 3, 0, handle='1" t...', 1, to='O2" ...', 2, connection='3"/>...', 1) +SAX.endElementNs(connection, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.endElementNs(connections, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 5) +SAX.endElementNs(object, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 5) +SAX.startElementNs(object, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 3, 0, type='Stan...', 15, version='0" i...', 1, id='O1">...', 2) +SAX.characters( + , 7) +SAX.startElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, name='obj_...', 7) +SAX.characters( + , 9) +SAX.startElementNs(point, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, val='4.8,...', 8) +SAX.endElementNs(point, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.endElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.startElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, name='obj_...', 6) +SAX.characters( + , 9) +SAX.startElementNs(rectangle, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, val='2.57...', 27) +SAX.endElementNs(rectangle, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.endElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.startElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, name='text...', 4) +SAX.characters( + , 9) +SAX.startElementNs(composite, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, type='text...', 4) +SAX.characters( + , 11) +SAX.startElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, name='stri...', 6) +SAX.characters( + , 13) +SAX.startElementNs(string, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, val='sdfs...', 7) +SAX.endElementNs(string, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 11) +SAX.endElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 11) +SAX.startElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, name='font...', 4) +SAX.characters( + , 13) +SAX.startElementNs(font, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, name='Cour...', 7) +SAX.endElementNs(font, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 11) +SAX.endElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 11) +SAX.startElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, name='heig...', 6) +SAX.characters( + , 13) +SAX.startElementNs(real, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, val='1"/>...', 1) +SAX.endElementNs(real, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 11) +SAX.endElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 11) +SAX.startElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, name='pos"...', 3) +SAX.characters( + , 13) +SAX.startElementNs(point, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, val='4.8,...', 8) +SAX.endElementNs(point, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 11) +SAX.endElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 11) +SAX.startElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, name='colo...', 5) +SAX.characters( + , 13) +SAX.startElementNs(color, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, val='#000...', 7) +SAX.endElementNs(color, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 11) +SAX.endElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 11) +SAX.startElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, name='alig...', 9) +SAX.characters( + , 13) +SAX.startElementNs(enum, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, val='1"/>...', 1) +SAX.endElementNs(enum, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 11) +SAX.endElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 9) +SAX.endElementNs(composite, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.endElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 5) +SAX.endElementNs(object, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 5) +SAX.startElementNs(object, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 3, 0, type='Stan...', 14, version='0" i...', 1, id='O2">...', 2) +SAX.characters( + , 7) +SAX.startElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, name='obj_...', 7) +SAX.characters( + , 9) +SAX.startElementNs(point, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, val='10.9...', 9) +SAX.endElementNs(point, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.endElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.startElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, name='obj_...', 6) +SAX.characters( + , 9) +SAX.startElementNs(rectangle, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, val='10.9...', 20) +SAX.endElementNs(rectangle, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.endElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.startElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, name='elem...', 11) +SAX.characters( + , 9) +SAX.startElementNs(point, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, val='10.9...', 9) +SAX.endElementNs(point, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.endElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.startElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, name='elem...', 10) +SAX.characters( + , 9) +SAX.startElementNs(real, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, val='2.05...', 4) +SAX.endElementNs(real, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.endElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.startElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, name='elem...', 11) +SAX.characters( + , 9) +SAX.startElementNs(real, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, val='2"/>...', 1) +SAX.endElementNs(real, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.endElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.startElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, name='bord...', 12) +SAX.characters( + , 9) +SAX.startElementNs(real, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, val='0.1"...', 3) +SAX.endElementNs(real, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.endElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.startElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, name='bord...', 12) +SAX.characters( + , 9) +SAX.startElementNs(color, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, val='#000...', 7) +SAX.endElementNs(color, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.endElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.startElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, name='inne...', 11) +SAX.characters( + , 9) +SAX.startElementNs(color, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, val='#fff...', 7) +SAX.endElementNs(color, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.endElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.startElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, name='line...', 10) +SAX.characters( + , 9) +SAX.startElementNs(enum, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, val='0"/>...', 1) +SAX.endElementNs(enum, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 7) +SAX.endElementNs(attribute, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 5) +SAX.endElementNs(object, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( + , 3) +SAX.endElementNs(layer, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( +, 1) +SAX.endElementNs(diagram, dia, 'http://www.lysator.liu.se/~alla/dia/') +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 @@ + + + + diff --git a/result/dtd1.rde b/result/dtd1.rde new file mode 100644 index 0000000..6bb39b8 --- /dev/null +++ b/result/dtd1.rde @@ -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.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/dtd1.sax2 b/result/dtd1.sax2 new file mode 100644 index 0000000..47be5e0 --- /dev/null +++ b/result/dtd1.sax2 @@ -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.startElementNs(MEMO, NULL, NULL, 0, 0, 0) +SAX.characters( +, 1) +SAX.endElementNs(MEMO, NULL, NULL) +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 @@ + + + + + + +]> +This is a valid document diff --git a/result/dtd10.rde b/result/dtd10.rde new file mode 100644 index 0000000..1df24c7 --- /dev/null +++ b/result/dtd10.rde @@ -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.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/dtd10.sax2 b/result/dtd10.sax2 new file mode 100644 index 0000000..7f15a09 --- /dev/null +++ b/result/dtd10.sax2 @@ -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.startElementNs(doc, NULL, NULL, 0, 0, 0) +SAX.startElementNs(b, NULL, NULL, 0, 0, 0) +SAX.characters(This, 4) +SAX.endElementNs(b, NULL, NULL) +SAX.startElementNs(c, NULL, NULL, 0, 0, 0) +SAX.characters( is a, 5) +SAX.endElementNs(c, NULL, NULL) +SAX.startElementNs(d, NULL, NULL, 0, 0, 0) +SAX.characters( valid document, 15) +SAX.endElementNs(d, NULL, NULL) +SAX.endElementNs(doc, NULL, NULL) +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 @@ + + + +]> + diff --git a/result/dtd11.rde b/result/dtd11.rde new file mode 100644 index 0000000..9b0a34d --- /dev/null +++ b/result/dtd11.rde @@ -0,0 +1,2 @@ +0 10 doc 0 0 +0 1 doc 1 0 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/dtd11.sax2 b/result/dtd11.sax2 new file mode 100644 index 0000000..a9cae5d --- /dev/null +++ b/result/dtd11.sax2 @@ -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.startElementNs(doc, NULL, NULL, 0, 1, 0, val='v1"/...', 2) +SAX.endElementNs(doc, NULL, NULL) +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 @@ + + + +]> +&WhatHeSaid; diff --git a/result/dtd12.rde b/result/dtd12.rde new file mode 100644 index 0000000..c2d4cc0 --- /dev/null +++ b/result/dtd12.rde @@ -0,0 +1,4 @@ +0 10 doc 0 0 +0 1 doc 0 0 +1 3 #text 0 1 He said "Yes" +0 15 doc 0 0 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/dtd12.sax2 b/result/dtd12.sax2 new file mode 100644 index 0000000..8a5d8a4 --- /dev/null +++ b/result/dtd12.sax2 @@ -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.startElementNs(doc, NULL, NULL, 0, 0, 0) +SAX.getEntity(WhatHeSaid) +SAX.characters(He said , 8) +SAX.getEntity(YN) +SAX.characters("Yes", 5) +SAX.reference(YN) +SAX.reference(WhatHeSaid) +SAX.endElementNs(doc, NULL, NULL) +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 @@ + + + +]> + + diff --git a/result/dtd13.rde b/result/dtd13.rde new file mode 100644 index 0000000..f567ccb --- /dev/null +++ b/result/dtd13.rde @@ -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.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/dtd13.sax2 b/result/dtd13.sax2 new file mode 100644 index 0000000..b631501 --- /dev/null +++ b/result/dtd13.sax2 @@ -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.startElementNs(doc, NULL, NULL, 0, 0, 0) +SAX.endElementNs(doc, NULL, NULL) +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 @@ + + +]> +This is a valid document ! diff --git a/result/dtd2.rde b/result/dtd2.rde new file mode 100644 index 0000000..20cbf2a --- /dev/null +++ b/result/dtd2.rde @@ -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.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/dtd2.sax2 b/result/dtd2.sax2 new file mode 100644 index 0000000..ff6b568 --- /dev/null +++ b/result/dtd2.sax2 @@ -0,0 +1,9 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.internalSubset(doc, , ) +SAX.elementDecl(doc, 3, ...) +SAX.externalSubset(doc, , ) +SAX.startElementNs(doc, NULL, NULL, 0, 0, 0) +SAX.characters(This is a valid document !, 26) +SAX.endElementNs(doc, NULL, NULL) +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 @@ + + +]> +This is a valid document ! diff --git a/result/dtd3.rde b/result/dtd3.rde new file mode 100644 index 0000000..20cbf2a --- /dev/null +++ b/result/dtd3.rde @@ -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.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/dtd3.sax2 b/result/dtd3.sax2 new file mode 100644 index 0000000..9625ad5 --- /dev/null +++ b/result/dtd3.sax2 @@ -0,0 +1,9 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.internalSubset(doc, , ) +SAX.elementDecl(doc, 2, ...) +SAX.externalSubset(doc, , ) +SAX.startElementNs(doc, NULL, NULL, 0, 0, 0) +SAX.characters(This is a valid document !, 26) +SAX.endElementNs(doc, NULL, NULL) +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 @@ + + +]> + diff --git a/result/dtd4.rde b/result/dtd4.rde new file mode 100644 index 0000000..9b0a34d --- /dev/null +++ b/result/dtd4.rde @@ -0,0 +1,2 @@ +0 10 doc 0 0 +0 1 doc 1 0 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/dtd4.sax2 b/result/dtd4.sax2 new file mode 100644 index 0000000..8366d48 --- /dev/null +++ b/result/dtd4.sax2 @@ -0,0 +1,8 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.internalSubset(doc, , ) +SAX.elementDecl(doc, 1, ...) +SAX.externalSubset(doc, , ) +SAX.startElementNs(doc, NULL, NULL, 0, 0, 0) +SAX.endElementNs(doc, NULL, NULL) +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 @@ + + + + +]> +This is a valid document diff --git a/result/dtd5.rde b/result/dtd5.rde new file mode 100644 index 0000000..66773a3 --- /dev/null +++ b/result/dtd5.rde @@ -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.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/dtd5.sax2 b/result/dtd5.sax2 new file mode 100644 index 0000000..f48c01c --- /dev/null +++ b/result/dtd5.sax2 @@ -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.startElementNs(doc, NULL, NULL, 0, 0, 0) +SAX.startElementNs(a, NULL, NULL, 0, 0, 0) +SAX.characters(This, 4) +SAX.endElementNs(a, NULL, NULL) +SAX.characters( is a , 6) +SAX.startElementNs(b, NULL, NULL, 0, 0, 0) +SAX.characters(valid, 5) +SAX.endElementNs(b, NULL, NULL) +SAX.characters( document, 9) +SAX.endElementNs(doc, NULL, NULL) +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 @@ + + + + +]> +This is a valid document diff --git a/result/dtd6.rde b/result/dtd6.rde new file mode 100644 index 0000000..a941e6a --- /dev/null +++ b/result/dtd6.rde @@ -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.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/dtd6.sax2 b/result/dtd6.sax2 new file mode 100644 index 0000000..6e78924 --- /dev/null +++ b/result/dtd6.sax2 @@ -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.startElementNs(doc, NULL, NULL, 0, 0, 0) +SAX.startElementNs(a, NULL, NULL, 0, 0, 0) +SAX.characters(This, 4) +SAX.endElementNs(a, NULL, NULL) +SAX.startElementNs(b, NULL, NULL, 0, 0, 0) +SAX.characters( is a valid, 11) +SAX.endElementNs(b, NULL, NULL) +SAX.startElementNs(a, NULL, NULL, 0, 0, 0) +SAX.characters( document, 9) +SAX.endElementNs(a, NULL, NULL) +SAX.endElementNs(doc, NULL, NULL) +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 @@ + + + + +]> +This is a valid document diff --git a/result/dtd7.rde b/result/dtd7.rde new file mode 100644 index 0000000..a477613 --- /dev/null +++ b/result/dtd7.rde @@ -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.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/dtd7.sax2 b/result/dtd7.sax2 new file mode 100644 index 0000000..4a47191 --- /dev/null +++ b/result/dtd7.sax2 @@ -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.startElementNs(doc, NULL, NULL, 0, 0, 0) +SAX.startElementNs(a, NULL, NULL, 0, 0, 0) +SAX.characters(This, 4) +SAX.endElementNs(a, NULL, NULL) +SAX.startElementNs(b, NULL, NULL, 0, 0, 0) +SAX.characters( is a valid document, 20) +SAX.endElementNs(b, NULL, NULL) +SAX.endElementNs(doc, NULL, NULL) +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 @@ + + + + + + +]> +This is a valid document diff --git a/result/dtd8.rde b/result/dtd8.rde new file mode 100644 index 0000000..15ee010 --- /dev/null +++ b/result/dtd8.rde @@ -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.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/dtd8.sax2 b/result/dtd8.sax2 new file mode 100644 index 0000000..d38b60d --- /dev/null +++ b/result/dtd8.sax2 @@ -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.startElementNs(doc, NULL, NULL, 0, 0, 0) +SAX.startElementNs(b, NULL, NULL, 0, 0, 0) +SAX.characters(This, 4) +SAX.endElementNs(b, NULL, NULL) +SAX.startElementNs(c, NULL, NULL, 0, 0, 0) +SAX.characters( is a valid document, 20) +SAX.endElementNs(c, NULL, NULL) +SAX.endElementNs(doc, NULL, NULL) +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 @@ + + + + + + +]> +This is a valid document diff --git a/result/dtd9.rde b/result/dtd9.rde new file mode 100644 index 0000000..2e2b2e9 --- /dev/null +++ b/result/dtd9.rde @@ -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.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/dtd9.sax2 b/result/dtd9.sax2 new file mode 100644 index 0000000..a5b537f --- /dev/null +++ b/result/dtd9.sax2 @@ -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.startElementNs(doc, NULL, NULL, 0, 0, 0) +SAX.startElementNs(b, NULL, NULL, 0, 0, 0) +SAX.characters(This, 4) +SAX.endElementNs(b, NULL, NULL) +SAX.startElementNs(d, NULL, NULL, 0, 0, 0) +SAX.characters( is a valid document, 20) +SAX.endElementNs(d, NULL, NULL) +SAX.endElementNs(doc, NULL, NULL) +SAX.endDocument() diff --git a/result/ebcdic_566012.xml b/result/ebcdic_566012.xml new file mode 100644 index 0000000..153add5 --- /dev/null +++ b/result/ebcdic_566012.xml @@ -0,0 +1 @@ +Lo§”“@¥…™¢‰–•~ñKð@…•ƒ–„‰•‡~ÉÂÔ`ññôñon%L£…¢£@££™~JàZan% \ No newline at end of file diff --git a/result/ebcdic_566012.xml.rde b/result/ebcdic_566012.xml.rde new file mode 100644 index 0000000..efbc18b --- /dev/null +++ b/result/ebcdic_566012.xml.rde @@ -0,0 +1 @@ +0 1 test 1 0 diff --git a/result/ebcdic_566012.xml.rdr b/result/ebcdic_566012.xml.rdr new file mode 100644 index 0000000..efbc18b --- /dev/null +++ b/result/ebcdic_566012.xml.rdr @@ -0,0 +1 @@ +0 1 test 1 0 diff --git a/result/ebcdic_566012.xml.sax b/result/ebcdic_566012.xml.sax new file mode 100644 index 0000000..7ec6d5a --- /dev/null +++ b/result/ebcdic_566012.xml.sax @@ -0,0 +1,5 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElement(test, attr='ÄÖÜ') +SAX.endElement(test) +SAX.endDocument() diff --git a/result/ebcdic_566012.xml.sax2 b/result/ebcdic_566012.xml.sax2 new file mode 100644 index 0000000..b8a4ce0 --- /dev/null +++ b/result/ebcdic_566012.xml.sax2 @@ -0,0 +1,5 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElementNs(test, NULL, NULL, 0, 1, 0, attr='ÄÖ...', 6) +SAX.endElementNs(test, NULL, NULL) +SAX.endDocument() diff --git a/result/emptycdata.xml b/result/emptycdata.xml new file mode 100644 index 0000000..bc98388 --- /dev/null +++ b/result/emptycdata.xml @@ -0,0 +1,4 @@ + + + + diff --git a/result/emptycdata.xml.rde b/result/emptycdata.xml.rde new file mode 100644 index 0000000..1c8b74f --- /dev/null +++ b/result/emptycdata.xml.rde @@ -0,0 +1,7 @@ +0 1 html 0 0 +1 14 #text 0 1 + +1 4 #cdata-section 0 1 +1 14 #text 0 1 + +0 15 html 0 0 diff --git a/result/emptycdata.xml.rdr b/result/emptycdata.xml.rdr new file mode 100644 index 0000000..1c8b74f --- /dev/null +++ b/result/emptycdata.xml.rdr @@ -0,0 +1,7 @@ +0 1 html 0 0 +1 14 #text 0 1 + +1 4 #cdata-section 0 1 +1 14 #text 0 1 + +0 15 html 0 0 diff --git a/result/emptycdata.xml.sax b/result/emptycdata.xml.sax new file mode 100644 index 0000000..39587c6 --- /dev/null +++ b/result/emptycdata.xml.sax @@ -0,0 +1,10 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElement(html, xmlns='http://www.w3.org/1999/xhtml') +SAX.characters( +, 1) +SAX.pcdata(, 0) +SAX.characters( +, 1) +SAX.endElement(html) +SAX.endDocument() diff --git a/result/emptycdata.xml.sax2 b/result/emptycdata.xml.sax2 new file mode 100644 index 0000000..7f80296 --- /dev/null +++ b/result/emptycdata.xml.sax2 @@ -0,0 +1,10 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElementNs(html, NULL, 'http://www.w3.org/1999/xhtml', 1, xmlns='http://www.w3.org/1999/xhtml', 0, 0) +SAX.characters( +, 1) +SAX.pcdata(, 0) +SAX.characters( +, 1) +SAX.endElementNs(html, NULL, 'http://www.w3.org/1999/xhtml') +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; + diff --git a/result/ent1.rde b/result/ent1.rde new file mode 100644 index 0000000..d806d24 --- /dev/null +++ b/result/ent1.rde @@ -0,0 +1,6 @@ +0 10 EXAMPLE 0 0 +0 1 EXAMPLE 0 0 +1 3 #text 0 1 + Extensible Markup Language + +0 15 EXAMPLE 0 0 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/ent1.sax2 b/result/ent1.sax2 new file mode 100644 index 0000000..573f485 --- /dev/null +++ b/result/ent1.sax2 @@ -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.startElementNs(EXAMPLE, NULL, NULL, 0, 0, 0) +SAX.characters( + , 5) +SAX.getEntity(xml) +SAX.characters(Extensible Markup Language, 26) +SAX.reference(xml) +SAX.characters( +, 1) +SAX.endElementNs(EXAMPLE, NULL, NULL) +SAX.endDocument() diff --git a/result/ent10 b/result/ent10 new file mode 100644 index 0000000..c46d19f --- /dev/null +++ b/result/ent10 @@ -0,0 +1,14 @@ + + + + + + hello world + + "> +]> + + &f; + diff --git a/result/ent10.rde b/result/ent10.rde new file mode 100644 index 0000000..e69594c --- /dev/null +++ b/result/ent10.rde @@ -0,0 +1,14 @@ +0 10 rnode 0 0 +0 1 rnode 0 0 +1 14 #text 0 1 + + +1 1 f 0 0 +2 3 #text 0 1 + hello world + +1 15 f 0 0 +1 14 #text 0 1 + + +0 15 rnode 0 0 diff --git a/result/ent10.rdr b/result/ent10.rdr new file mode 100644 index 0000000..34edb50 --- /dev/null +++ b/result/ent10.rdr @@ -0,0 +1,8 @@ +0 10 rnode 0 0 +0 1 rnode 0 0 +1 14 #text 0 1 + +1 5 f 0 0 +1 14 #text 0 1 + +0 15 rnode 0 0 diff --git a/result/ent10.sax b/result/ent10.sax new file mode 100644 index 0000000..75ed20a --- /dev/null +++ b/result/ent10.sax @@ -0,0 +1,31 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.internalSubset(rnode, , ) +SAX.elementDecl(rnode, 4, ...) +SAX.elementDecl(f, 3, ...) +SAX.attributeDecl(f, att1, 1, 4, J, ...) +SAX.entityDecl(f, 1, (null), (null), + + hello world + + ) +SAX.getEntity(f) +SAX.externalSubset(rnode, , ) +SAX.startElement(rnode) +SAX.characters( + , 4) +SAX.getEntity(f) +SAX.ignorableWhitespace( + , 4) +SAX.startElement(f) +SAX.characters( + hello world + , 19) +SAX.endElement(f) +SAX.characters( + , 4) +SAX.reference(f) +SAX.characters( +, 1) +SAX.endElement(rnode) +SAX.endDocument() diff --git a/result/ent10.sax2 b/result/ent10.sax2 new file mode 100644 index 0000000..7a379fc --- /dev/null +++ b/result/ent10.sax2 @@ -0,0 +1,31 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.internalSubset(rnode, , ) +SAX.elementDecl(rnode, 4, ...) +SAX.elementDecl(f, 3, ...) +SAX.attributeDecl(f, att1, 1, 4, J, ...) +SAX.entityDecl(f, 1, (null), (null), + + hello world + + ) +SAX.getEntity(f) +SAX.externalSubset(rnode, , ) +SAX.startElementNs(rnode, NULL, NULL, 0, 0, 0) +SAX.characters( + , 4) +SAX.getEntity(f) +SAX.ignorableWhitespace( + , 4) +SAX.startElementNs(f, NULL, NULL, 0, 1, 1, att1='J...', 1) +SAX.characters( + hello world + , 19) +SAX.endElementNs(f, NULL, NULL) +SAX.characters( + , 4) +SAX.reference(f) +SAX.characters( +, 1) +SAX.endElementNs(rnode, NULL, NULL) +SAX.endDocument() diff --git a/result/ent11 b/result/ent11 new file mode 100644 index 0000000..7eee023 --- /dev/null +++ b/result/ent11 @@ -0,0 +1,5 @@ + + +]> +&newl; diff --git a/result/ent11.rde b/result/ent11.rde new file mode 100644 index 0000000..f6c3c27 --- /dev/null +++ b/result/ent11.rde @@ -0,0 +1,5 @@ +0 10 doc 0 0 +0 1 doc 0 0 +1 14 #text 0 1 + +0 15 doc 0 0 diff --git a/result/ent11.rdr b/result/ent11.rdr new file mode 100644 index 0000000..54a754a --- /dev/null +++ b/result/ent11.rdr @@ -0,0 +1,4 @@ +0 10 doc 0 0 +0 1 doc 0 0 +1 5 newl 0 0 +0 15 doc 0 0 diff --git a/result/ent11.sax b/result/ent11.sax new file mode 100644 index 0000000..4e36a6b --- /dev/null +++ b/result/ent11.sax @@ -0,0 +1,13 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.internalSubset(doc, , ) +SAX.entityDecl(newl, 1, (null), (null), ) +SAX.getEntity(newl) +SAX.externalSubset(doc, , ) +SAX.startElement(doc) +SAX.getEntity(newl) +SAX.characters( +, 1) +SAX.reference(newl) +SAX.endElement(doc) +SAX.endDocument() diff --git a/result/ent11.sax2 b/result/ent11.sax2 new file mode 100644 index 0000000..e80778f --- /dev/null +++ b/result/ent11.sax2 @@ -0,0 +1,13 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.internalSubset(doc, , ) +SAX.entityDecl(newl, 1, (null), (null), ) +SAX.getEntity(newl) +SAX.externalSubset(doc, , ) +SAX.startElementNs(doc, NULL, NULL, 0, 0, 0) +SAX.getEntity(newl) +SAX.characters( +, 1) +SAX.reference(newl) +SAX.endElementNs(doc, NULL, NULL) +SAX.endDocument() diff --git a/result/ent12 b/result/ent12 new file mode 100644 index 0000000..f603c59 --- /dev/null +++ b/result/ent12 @@ -0,0 +1,8 @@ + + + +]> + + &bar; + diff --git a/result/ent12.rde b/result/ent12.rde new file mode 100644 index 0000000..483547b --- /dev/null +++ b/result/ent12.rde @@ -0,0 +1,10 @@ +0 10 root 0 0 +0 1 root 0 0 +1 14 #text 0 1 + +1 1 element 0 0 +2 3 #text 0 1 def +1 15 element 0 0 +1 14 #text 0 1 + +0 15 root 0 0 diff --git a/result/ent12.rdr b/result/ent12.rdr new file mode 100644 index 0000000..884c1fe --- /dev/null +++ b/result/ent12.rdr @@ -0,0 +1,10 @@ +0 10 root 0 0 +0 1 root 0 0 +1 14 #text 0 1 + +1 1 element 0 0 +2 5 bar 0 0 +1 15 element 0 0 +1 14 #text 0 1 + +0 15 root 0 0 diff --git a/result/ent12.sax b/result/ent12.sax new file mode 100644 index 0000000..84322d2 --- /dev/null +++ b/result/ent12.sax @@ -0,0 +1,21 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.internalSubset(root, , ) +SAX.entityDecl(foo, 1, (null), (null), abc) +SAX.getEntity(foo) +SAX.entityDecl(bar, 1, (null), (null), def) +SAX.getEntity(bar) +SAX.externalSubset(root, , ) +SAX.getEntity(foo) +SAX.startElement(root, attribute='&foo;') +SAX.characters( + , 4) +SAX.startElement(element) +SAX.getEntity(bar) +SAX.characters(def, 3) +SAX.reference(bar) +SAX.endElement(element) +SAX.characters( +, 1) +SAX.endElement(root) +SAX.endDocument() diff --git a/result/ent12.sax2 b/result/ent12.sax2 new file mode 100644 index 0000000..881fedd --- /dev/null +++ b/result/ent12.sax2 @@ -0,0 +1,21 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.internalSubset(root, , ) +SAX.entityDecl(foo, 1, (null), (null), abc) +SAX.getEntity(foo) +SAX.entityDecl(bar, 1, (null), (null), def) +SAX.getEntity(bar) +SAX.externalSubset(root, , ) +SAX.getEntity(foo) +SAX.startElementNs(root, NULL, NULL, 0, 1, 0, attribute='&foo...', 5) +SAX.characters( + , 4) +SAX.startElementNs(element, NULL, NULL, 0, 0, 0) +SAX.getEntity(bar) +SAX.characters(def, 3) +SAX.reference(bar) +SAX.endElementNs(element, NULL, NULL) +SAX.characters( +, 1) +SAX.endElementNs(root, NULL, NULL) +SAX.endDocument() diff --git a/result/ent13 b/result/ent13 new file mode 100644 index 0000000..8dd96c9 --- /dev/null +++ b/result/ent13 @@ -0,0 +1,5 @@ + + +]> +a diff --git a/result/ent13.rde b/result/ent13.rde new file mode 100644 index 0000000..d9227fc --- /dev/null +++ b/result/ent13.rde @@ -0,0 +1,4 @@ +0 10 test 0 0 +0 1 t 0 0 +1 3 #text 0 1 a +0 15 t 0 0 diff --git a/result/ent13.rdr b/result/ent13.rdr new file mode 100644 index 0000000..d9227fc --- /dev/null +++ b/result/ent13.rdr @@ -0,0 +1,4 @@ +0 10 test 0 0 +0 1 t 0 0 +1 3 #text 0 1 a +0 15 t 0 0 diff --git a/result/ent13.sax b/result/ent13.sax new file mode 100644 index 0000000..5e4bb44 --- /dev/null +++ b/result/ent13.sax @@ -0,0 +1,11 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.internalSubset(test, , ) +SAX.entityDecl(ampproblem, 1, (null), (null), &) +SAX.getEntity(ampproblem) +SAX.externalSubset(test, , ) +SAX.getEntity(ampproblem) +SAX.startElement(t, a='&problem;') +SAX.characters(a, 1) +SAX.endElement(t) +SAX.endDocument() diff --git a/result/ent13.sax2 b/result/ent13.sax2 new file mode 100644 index 0000000..3414da6 --- /dev/null +++ b/result/ent13.sax2 @@ -0,0 +1,11 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.internalSubset(test, , ) +SAX.entityDecl(ampproblem, 1, (null), (null), &) +SAX.getEntity(ampproblem) +SAX.externalSubset(test, , ) +SAX.getEntity(ampproblem) +SAX.startElementNs(t, NULL, NULL, 0, 1, 0, a='&...', 12) +SAX.characters(a, 1) +SAX.endElementNs(t, NULL, NULL) +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 @@ + + + + +]> + + &title; + This text is about XML, the &xml; and this is an embedded + diff --git a/result/ent2.rde b/result/ent2.rde new file mode 100644 index 0000000..7fe3aa8 --- /dev/null +++ b/result/ent2.rde @@ -0,0 +1,15 @@ +0 10 EXAMPLE 0 0 +0 1 EXAMPLE 0 0 +1 14 #text 0 1 + + +1 1 title 0 0 +2 3 #text 0 1 my title +1 15 title 0 0 +1 3 #text 0 1 + + This text is about XML, the Extensible Markup Language 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.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..07d2ce4 --- /dev/null +++ b/result/ent2.sax @@ -0,0 +1,26 @@ +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.reference(title) +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/ent2.sax2 b/result/ent2.sax2 new file mode 100644 index 0000000..d7c8002 --- /dev/null +++ b/result/ent2.sax2 @@ -0,0 +1,26 @@ +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.startElementNs(EXAMPLE, NULL, NULL, 0, 0, 0) +SAX.characters( + , 3) +SAX.getEntity(title) +SAX.error: Entity 'title' not defined +SAX.reference(title) +SAX.characters( + This text is about XML, the, 31) +SAX.getEntity(xml) +SAX.characters(Extensible Markup Language, 26) +SAX.reference(xml) +SAX.characters( and this is an embedded , 25) +SAX.startElementNs(IMG, NULL, NULL, 0, 1, 0, src='imag...', 5) +SAX.endElementNs(IMG, NULL, NULL) +SAX.characters( +, 1) +SAX.endElementNs(EXAMPLE, NULL, NULL) +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 @@ + + +]> + + Test of entities in attributes. + diff --git a/result/ent3.rde b/result/ent3.rde new file mode 100644 index 0000000..740442d --- /dev/null +++ b/result/ent3.rde @@ -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.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..407d24b --- /dev/null +++ b/result/ent3.sax @@ -0,0 +1,12 @@ +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(xml) +SAX.startElement(EXAMPLE, prop1='a&b', prop2='&xml;') +SAX.characters( + Test of entities in attribu, 35) +SAX.endElement(EXAMPLE) +SAX.endDocument() diff --git a/result/ent3.sax2 b/result/ent3.sax2 new file mode 100644 index 0000000..de5ff15 --- /dev/null +++ b/result/ent3.sax2 @@ -0,0 +1,12 @@ +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(xml) +SAX.startElementNs(EXAMPLE, NULL, NULL, 0, 2, 0, prop1='a...', 7, prop2='&xml...', 5) +SAX.characters( + Test of entities in attribu, 35) +SAX.endElementNs(EXAMPLE, NULL, NULL) +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 @@ + + +]> + + Test of &amp; behaviour a&b . + diff --git a/result/ent4.rde b/result/ent4.rde new file mode 100644 index 0000000..7b65485 --- /dev/null +++ b/result/ent4.rde @@ -0,0 +1,6 @@ +0 10 EXAMPLE 0 0 +0 1 EXAMPLE 0 0 +1 3 #text 0 1 + Test of & behaviour a&b . + +0 15 EXAMPLE 0 0 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 & behaviour a&b . + +0 15 EXAMPLE 0 0 diff --git a/result/ent4.sax b/result/ent4.sax new file mode 100644 index 0000000..20bc28e --- /dev/null +++ b/result/ent4.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( + Test of , 11) +SAX.characters(&, 1) +SAX.characters(amp; behaviour a, 16) +SAX.characters(&, 1) +SAX.characters(b . +, 4) +SAX.endElement(EXAMPLE) +SAX.endDocument() diff --git a/result/ent4.sax2 b/result/ent4.sax2 new file mode 100644 index 0000000..b0a6b08 --- /dev/null +++ b/result/ent4.sax2 @@ -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.startElementNs(EXAMPLE, NULL, NULL, 0, 0, 0) +SAX.characters( + Test of , 11) +SAX.characters(&, 1) +SAX.characters(amp; behaviour a, 16) +SAX.characters(&, 1) +SAX.characters(b . +, 4) +SAX.endElementNs(EXAMPLE, NULL, NULL) +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 @@ + + + This is an inverted exclamation sign ¡ + This is a space + diff --git a/result/ent5.rde b/result/ent5.rde new file mode 100644 index 0000000..c570c31 --- /dev/null +++ b/result/ent5.rde @@ -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.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/ent5.sax2 b/result/ent5.sax2 new file mode 100644 index 0000000..f7251e4 --- /dev/null +++ b/result/ent5.sax2 @@ -0,0 +1,13 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElementNs(EXAMPLE, NULL, NULL, 0, 0, 0) +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.endElementNs(EXAMPLE, NULL, NULL) +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 @@ + + + + + + +]> + diff --git a/result/ent6.rde b/result/ent6.rde new file mode 100644 index 0000000..9b0a34d --- /dev/null +++ b/result/ent6.rde @@ -0,0 +1,2 @@ +0 10 doc 0 0 +0 1 doc 1 0 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), <) +SAX.getEntity(lt) +SAX.entityDecl(gt, 1, (null), (null), >) +SAX.getEntity(gt) +SAX.entityDecl(amp, 1, (null), (null), &) +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/ent6.sax2 b/result/ent6.sax2 new file mode 100644 index 0000000..a70d0bb --- /dev/null +++ b/result/ent6.sax2 @@ -0,0 +1,17 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.internalSubset(doc, , ) +SAX.entityDecl(lt, 1, (null), (null), <) +SAX.getEntity(lt) +SAX.entityDecl(gt, 1, (null), (null), >) +SAX.getEntity(gt) +SAX.entityDecl(amp, 1, (null), (null), &) +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.startElementNs(doc, NULL, NULL, 0, 0, 0) +SAX.endElementNs(doc, NULL, NULL) +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 @@ + +"> + + + +]> +'they called me &sampleEnt;' diff --git a/result/ent7.rde b/result/ent7.rde new file mode 100644 index 0000000..fa74b0f --- /dev/null +++ b/result/ent7.rde @@ -0,0 +1,6 @@ +0 10 item 0 0 +0 1 item 0 0 +1 1 para 0 0 +2 3 #text 0 1 'they called me the hyacinth girl' +1 15 para 0 0 +0 15 item 0 0 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..3228de3 --- /dev/null +++ b/result/ent7.sax @@ -0,0 +1,17 @@ +xmlSAXUserParseFile returned error 27 +SAX.setDocumentLocator() +SAX.startDocument() +SAX.internalSubset(item, , ) +SAX.entityDecl(sampleEnt, 4, (null), (null), ) +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.reference(sampleEnt) +SAX.characters(', 1) +SAX.endDocument() +xmlSAXUserParseFile returned error 27 diff --git a/result/ent7.sax2 b/result/ent7.sax2 new file mode 100644 index 0000000..3228de3 --- /dev/null +++ b/result/ent7.sax2 @@ -0,0 +1,17 @@ +xmlSAXUserParseFile returned error 27 +SAX.setDocumentLocator() +SAX.startDocument() +SAX.internalSubset(item, , ) +SAX.entityDecl(sampleEnt, 4, (null), (null), ) +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.reference(sampleEnt) +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 @@ + + + +]> + + Retenção + <> + &test1;&test2; + diff --git a/result/ent8.rde b/result/ent8.rde new file mode 100644 index 0000000..fb87667 --- /dev/null +++ b/result/ent8.rde @@ -0,0 +1,20 @@ +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 3 #text 0 1 test 1test 2 +1 15 Content 0 0 +1 14 #text 0 1 + +0 15 doc 0 0 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..4639441 --- /dev/null +++ b/result/ent8.sax @@ -0,0 +1,37 @@ +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.characters(<, 1) +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/ent8.sax2 b/result/ent8.sax2 new file mode 100644 index 0000000..301f9a4 --- /dev/null +++ b/result/ent8.sax2 @@ -0,0 +1,37 @@ +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.startElementNs(doc, NULL, NULL, 0, 0, 0) +SAX.characters( + , 4) +SAX.startElementNs(Content, NULL, NULL, 0, 0, 0) +SAX.characters(Reten, 5) +SAX.characters(ç, 2) +SAX.characters(ã, 2) +SAX.characters(o, 1) +SAX.endElementNs(Content, NULL, NULL) +SAX.characters( + , 4) +SAX.startElementNs(Content, NULL, NULL, 0, 0, 0) +SAX.characters(<, 1) +SAX.characters(>, 1) +SAX.endElementNs(Content, NULL, NULL) +SAX.characters( + , 4) +SAX.startElementNs(Content, NULL, NULL, 0, 0, 0) +SAX.getEntity(test1) +SAX.characters(test 1, 6) +SAX.reference(test1) +SAX.getEntity(test2) +SAX.characters(test 2, 6) +SAX.reference(test2) +SAX.endElementNs(Content, NULL, NULL) +SAX.characters( +, 1) +SAX.endElementNs(doc, NULL, NULL) +SAX.endDocument() diff --git a/result/ent9 b/result/ent9 new file mode 100644 index 0000000..1ce3089 --- /dev/null +++ b/result/ent9 @@ -0,0 +1,61 @@ + +,,,"> +]> + + &test1; +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    + &test1; +
    diff --git a/result/ent9.rde b/result/ent9.rde new file mode 100644 index 0000000..38b9f43 --- /dev/null +++ b/result/ent9.rde @@ -0,0 +1,300 @@ +0 10 doc 0 0 +0 1 doc 0 0 +1 14 #text 0 1 + +1 1 ent 0 0 +2 1 a 0 0 +2 15 a 0 0 +2 3 #text 0 1 , +2 1 b 0 0 +2 15 b 0 0 +2 3 #text 0 1 , +2 1 c 0 0 +2 15 c 0 0 +2 3 #text 0 1 , +2 1 d 0 0 +2 15 d 0 0 +1 15 ent 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 ent 0 0 +2 1 a 0 0 +2 15 a 0 0 +2 3 #text 0 1 , +2 1 b 0 0 +2 15 b 0 0 +2 3 #text 0 1 , +2 1 c 0 0 +2 15 c 0 0 +2 3 #text 0 1 , +2 1 d 0 0 +2 15 d 0 0 +1 15 ent 0 0 +1 14 #text 0 1 + +0 15 doc 0 0 diff --git a/result/ent9.rdr b/result/ent9.rdr new file mode 100644 index 0000000..42f8a5f --- /dev/null +++ b/result/ent9.rdr @@ -0,0 +1,280 @@ +0 10 doc 0 0 +0 1 doc 0 0 +1 14 #text 0 1 + +1 1 ent 0 0 +2 5 test1 0 0 +1 15 ent 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 p 0 0 +2 3 #text 0 1 WE need lot of garbage now to trigger the problem +1 15 p 0 0 +1 14 #text 0 1 + +1 1 ent 0 0 +2 5 test1 0 0 +1 15 ent 0 0 +1 14 #text 0 1 + +0 15 doc 0 0 diff --git a/result/ent9.sax b/result/ent9.sax new file mode 100644 index 0000000..aca2ad1 --- /dev/null +++ b/result/ent9.sax @@ -0,0 +1,310 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.internalSubset(doc, , ) +SAX.entityDecl(test1, 1, (null), (null), ,,,) +SAX.getEntity(test1) +SAX.externalSubset(doc, , ) +SAX.startElement(doc) +SAX.characters( + , 4) +SAX.startElement(ent) +SAX.getEntity(test1) +SAX.startElement(a) +SAX.endElement(a) +SAX.characters(,, 1) +SAX.startElement(b) +SAX.endElement(b) +SAX.characters(,, 1) +SAX.startElement(c) +SAX.endElement(c) +SAX.characters(,, 1) +SAX.startElement(d) +SAX.endElement(d) +SAX.reference(test1) +SAX.endElement(ent) +SAX.characters( + , 4) +SAX.startElement(p) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElement(p) +SAX.characters( + , 4) +SAX.startElement(p) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElement(p) +SAX.characters( + , 4) +SAX.startElement(p) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElement(p) +SAX.characters( + , 4) +SAX.startElement(p) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElement(p) +SAX.characters( + , 4) +SAX.startElement(p) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElement(p) +SAX.characters( + , 4) +SAX.startElement(p) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElement(p) +SAX.characters( + , 4) +SAX.startElement(p) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElement(p) +SAX.characters( + , 4) +SAX.startElement(p) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElement(p) +SAX.characters( + , 4) +SAX.startElement(p) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElement(p) +SAX.characters( + , 4) +SAX.startElement(p) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElement(p) +SAX.characters( + , 4) +SAX.startElement(p) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElement(p) +SAX.characters( + , 4) +SAX.startElement(p) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElement(p) +SAX.characters( + , 4) +SAX.startElement(p) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElement(p) +SAX.characters( + , 4) +SAX.startElement(p) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElement(p) +SAX.characters( + , 4) +SAX.startElement(p) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElement(p) +SAX.characters( + , 4) +SAX.startElement(p) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElement(p) +SAX.characters( + , 4) +SAX.startElement(p) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElement(p) +SAX.characters( + , 4) +SAX.startElement(p) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElement(p) +SAX.characters( + , 4) +SAX.startElement(p) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElement(p) +SAX.characters( + , 4) +SAX.startElement(p) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElement(p) +SAX.characters( + , 4) +SAX.startElement(p) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElement(p) +SAX.characters( + , 4) +SAX.startElement(p) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElement(p) +SAX.characters( + , 4) +SAX.startElement(p) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElement(p) +SAX.characters( + , 4) +SAX.startElement(p) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElement(p) +SAX.characters( + , 4) +SAX.startElement(p) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElement(p) +SAX.characters( + , 4) +SAX.startElement(p) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElement(p) +SAX.characters( + , 4) +SAX.startElement(p) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElement(p) +SAX.characters( + , 4) +SAX.startElement(p) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElement(p) +SAX.characters( + , 4) +SAX.startElement(p) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElement(p) +SAX.characters( + , 4) +SAX.startElement(p) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElement(p) +SAX.characters( + , 4) +SAX.startElement(p) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElement(p) +SAX.characters( + , 4) +SAX.startElement(p) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElement(p) +SAX.characters( + , 4) +SAX.startElement(p) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElement(p) +SAX.characters( + , 4) +SAX.startElement(p) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElement(p) +SAX.characters( + , 4) +SAX.startElement(p) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElement(p) +SAX.characters( + , 4) +SAX.startElement(p) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElement(p) +SAX.characters( + , 4) +SAX.startElement(p) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElement(p) +SAX.characters( + , 4) +SAX.startElement(p) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElement(p) +SAX.characters( + , 4) +SAX.startElement(p) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElement(p) +SAX.characters( + , 4) +SAX.startElement(p) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElement(p) +SAX.characters( + , 4) +SAX.startElement(p) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElement(p) +SAX.characters( + , 4) +SAX.startElement(p) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElement(p) +SAX.characters( + , 4) +SAX.startElement(p) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElement(p) +SAX.characters( + , 4) +SAX.startElement(p) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElement(p) +SAX.characters( + , 4) +SAX.startElement(p) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElement(p) +SAX.characters( + , 4) +SAX.startElement(p) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElement(p) +SAX.characters( + , 4) +SAX.startElement(p) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElement(p) +SAX.characters( + , 4) +SAX.startElement(p) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElement(p) +SAX.characters( + , 4) +SAX.startElement(p) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElement(p) +SAX.characters( + , 4) +SAX.startElement(p) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElement(p) +SAX.characters( + , 4) +SAX.startElement(p) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElement(p) +SAX.characters( + , 4) +SAX.startElement(p) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElement(p) +SAX.characters( + , 4) +SAX.startElement(p) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElement(p) +SAX.characters( + , 4) +SAX.startElement(ent) +SAX.getEntity(test1) +SAX.startElement(a) +SAX.endElement(a) +SAX.characters(,, 1) +SAX.startElement(b) +SAX.endElement(b) +SAX.characters(,, 1) +SAX.startElement(c) +SAX.endElement(c) +SAX.characters(,, 1) +SAX.startElement(d) +SAX.endElement(d) +SAX.reference(test1) +SAX.endElement(ent) +SAX.characters( +, 1) +SAX.endElement(doc) +SAX.endDocument() diff --git a/result/ent9.sax2 b/result/ent9.sax2 new file mode 100644 index 0000000..439dcfc --- /dev/null +++ b/result/ent9.sax2 @@ -0,0 +1,310 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.internalSubset(doc, , ) +SAX.entityDecl(test1, 1, (null), (null), ,,,) +SAX.getEntity(test1) +SAX.externalSubset(doc, , ) +SAX.startElementNs(doc, NULL, NULL, 0, 0, 0) +SAX.characters( + , 4) +SAX.startElementNs(ent, NULL, NULL, 0, 0, 0) +SAX.getEntity(test1) +SAX.startElementNs(a, NULL, NULL, 0, 0, 0) +SAX.endElementNs(a, NULL, NULL) +SAX.characters(,, 1) +SAX.startElementNs(b, NULL, NULL, 0, 0, 0) +SAX.endElementNs(b, NULL, NULL) +SAX.characters(,, 1) +SAX.startElementNs(c, NULL, NULL, 0, 0, 0) +SAX.endElementNs(c, NULL, NULL) +SAX.characters(,, 1) +SAX.startElementNs(d, NULL, NULL, 0, 0, 0) +SAX.endElementNs(d, NULL, NULL) +SAX.reference(test1) +SAX.endElementNs(ent, NULL, NULL) +SAX.characters( + , 4) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( + , 4) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( + , 4) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( + , 4) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( + , 4) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( + , 4) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( + , 4) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( + , 4) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( + , 4) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( + , 4) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( + , 4) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( + , 4) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( + , 4) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( + , 4) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( + , 4) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( + , 4) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( + , 4) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( + , 4) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( + , 4) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( + , 4) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( + , 4) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( + , 4) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( + , 4) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( + , 4) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( + , 4) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( + , 4) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( + , 4) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( + , 4) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( + , 4) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( + , 4) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( + , 4) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( + , 4) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( + , 4) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( + , 4) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( + , 4) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( + , 4) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( + , 4) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( + , 4) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( + , 4) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( + , 4) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( + , 4) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( + , 4) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( + , 4) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( + , 4) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( + , 4) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( + , 4) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( + , 4) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( + , 4) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( + , 4) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( + , 4) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( + , 4) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( + , 4) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( + , 4) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.characters( WE need lot of garbage now to, 50) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( + , 4) +SAX.startElementNs(ent, NULL, NULL, 0, 0, 0) +SAX.getEntity(test1) +SAX.startElementNs(a, NULL, NULL, 0, 0, 0) +SAX.endElementNs(a, NULL, NULL) +SAX.characters(,, 1) +SAX.startElementNs(b, NULL, NULL, 0, 0, 0) +SAX.endElementNs(b, NULL, NULL) +SAX.characters(,, 1) +SAX.startElementNs(c, NULL, NULL, 0, 0, 0) +SAX.endElementNs(c, NULL, NULL) +SAX.characters(,, 1) +SAX.startElementNs(d, NULL, NULL, 0, 0, 0) +SAX.endElementNs(d, NULL, NULL) +SAX.reference(test1) +SAX.endElementNs(ent, NULL, NULL) +SAX.characters( +, 1) +SAX.endElementNs(doc, NULL, NULL) +SAX.endDocument() diff --git a/result/ent_738805.xml b/result/ent_738805.xml new file mode 100644 index 0000000..d285eee --- /dev/null +++ b/result/ent_738805.xml @@ -0,0 +1,15 @@ + + + +]> + + + + +&a; should appear after colon: &a; +&b; should appear after colon: &a; +&a; should appear after colon: &b; +&b; should appear after colon: &b; + + diff --git a/result/ent_738805.xml.rde b/result/ent_738805.xml.rde new file mode 100644 index 0000000..fa086fe --- /dev/null +++ b/result/ent_738805.xml.rde @@ -0,0 +1,15 @@ +0 10 somedoc 0 0 +0 1 somedoc 0 0 +1 14 #text 0 1 + + +1 1 somebeacon 1 0 +1 3 #text 0 1 + +something should appear after colon: something +something should appear after colon: something +something should appear after colon: something +something should appear after colon: something + + +0 15 somedoc 0 0 diff --git a/result/ent_738805.xml.rdr b/result/ent_738805.xml.rdr new file mode 100644 index 0000000..c52dbf1 --- /dev/null +++ b/result/ent_738805.xml.rdr @@ -0,0 +1,31 @@ +0 10 somedoc 0 0 +0 1 somedoc 0 0 +1 14 #text 0 1 + + +1 1 somebeacon 1 0 +1 14 #text 0 1 + + +1 5 a 0 0 +1 3 #text 0 1 should appear after colon: +1 5 a 0 0 +1 14 #text 0 1 + +1 5 b 0 0 +1 3 #text 0 1 should appear after colon: +1 5 a 0 0 +1 14 #text 0 1 + +1 5 a 0 0 +1 3 #text 0 1 should appear after colon: +1 5 b 0 0 +1 14 #text 0 1 + +1 5 b 0 0 +1 3 #text 0 1 should appear after colon: +1 5 b 0 0 +1 14 #text 0 1 + + +0 15 somedoc 0 0 diff --git a/result/ent_738805.xml.sax b/result/ent_738805.xml.sax new file mode 100644 index 0000000..2649117 --- /dev/null +++ b/result/ent_738805.xml.sax @@ -0,0 +1,66 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.internalSubset(somedoc, , ) +SAX.entityDecl(a, 1, (null), (null), something) +SAX.getEntity(a) +SAX.entityDecl(b, 1, (null), (null), &a;) +SAX.getEntity(b) +SAX.externalSubset(somedoc, , ) +SAX.startElement(somedoc) +SAX.characters( + +, 2) +SAX.getEntity(b) +SAX.getEntity(a) +SAX.startElement(somebeacon, someattribute='&b;') +SAX.endElement(somebeacon) +SAX.characters( + +, 2) +SAX.getEntity(a) +SAX.characters(something, 9) +SAX.reference(a) +SAX.characters( should appear after colon: , 28) +SAX.getEntity(a) +SAX.characters(something, 9) +SAX.reference(a) +SAX.characters( +, 1) +SAX.getEntity(b) +SAX.getEntity(a) +SAX.characters(something, 9) +SAX.reference(a) +SAX.reference(b) +SAX.characters( should appear after colon: , 28) +SAX.getEntity(a) +SAX.characters(something, 9) +SAX.reference(a) +SAX.characters( +, 1) +SAX.getEntity(a) +SAX.characters(something, 9) +SAX.reference(a) +SAX.characters( should appear after colon: , 28) +SAX.getEntity(b) +SAX.getEntity(a) +SAX.characters(something, 9) +SAX.reference(a) +SAX.reference(b) +SAX.characters( +, 1) +SAX.getEntity(b) +SAX.getEntity(a) +SAX.characters(something, 9) +SAX.reference(a) +SAX.reference(b) +SAX.characters( should appear after colon: , 28) +SAX.getEntity(b) +SAX.getEntity(a) +SAX.characters(something, 9) +SAX.reference(a) +SAX.reference(b) +SAX.characters( + +, 2) +SAX.endElement(somedoc) +SAX.endDocument() diff --git a/result/ent_738805.xml.sax2 b/result/ent_738805.xml.sax2 new file mode 100644 index 0000000..1eae781 --- /dev/null +++ b/result/ent_738805.xml.sax2 @@ -0,0 +1,66 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.internalSubset(somedoc, , ) +SAX.entityDecl(a, 1, (null), (null), something) +SAX.getEntity(a) +SAX.entityDecl(b, 1, (null), (null), &a;) +SAX.getEntity(b) +SAX.externalSubset(somedoc, , ) +SAX.startElementNs(somedoc, NULL, NULL, 0, 0, 0) +SAX.characters( + +, 2) +SAX.getEntity(b) +SAX.getEntity(a) +SAX.startElementNs(somebeacon, NULL, NULL, 0, 1, 0, someattribute='&b;...', 3) +SAX.endElementNs(somebeacon, NULL, NULL) +SAX.characters( + +, 2) +SAX.getEntity(a) +SAX.characters(something, 9) +SAX.reference(a) +SAX.characters( should appear after colon: , 28) +SAX.getEntity(a) +SAX.characters(something, 9) +SAX.reference(a) +SAX.characters( +, 1) +SAX.getEntity(b) +SAX.getEntity(a) +SAX.characters(something, 9) +SAX.reference(a) +SAX.reference(b) +SAX.characters( should appear after colon: , 28) +SAX.getEntity(a) +SAX.characters(something, 9) +SAX.reference(a) +SAX.characters( +, 1) +SAX.getEntity(a) +SAX.characters(something, 9) +SAX.reference(a) +SAX.characters( should appear after colon: , 28) +SAX.getEntity(b) +SAX.getEntity(a) +SAX.characters(something, 9) +SAX.reference(a) +SAX.reference(b) +SAX.characters( +, 1) +SAX.getEntity(b) +SAX.getEntity(a) +SAX.characters(something, 9) +SAX.reference(a) +SAX.reference(b) +SAX.characters( should appear after colon: , 28) +SAX.getEntity(b) +SAX.getEntity(a) +SAX.characters(something, 9) +SAX.reference(a) +SAX.reference(b) +SAX.characters( + +, 2) +SAX.endElementNs(somedoc, NULL, NULL) +SAX.endDocument() diff --git a/result/errors/754946.xml b/result/errors/754946.xml new file mode 100644 index 0000000..e69de29 diff --git a/result/errors/754946.xml.err b/result/errors/754946.xml.err new file mode 100644 index 0000000..c03e35b --- /dev/null +++ b/result/errors/754946.xml.err @@ -0,0 +1,19 @@ +Entity: line 1: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration + + %SYSTEM; + ^ +Entity: line 1: +A + ^ +./test/errors/754947.xml:1: parser error : Premature end of data in tag d line 1 + + ^ diff --git a/result/errors/754947.xml.str b/result/errors/754947.xml.str new file mode 100644 index 0000000..4d2f52e --- /dev/null +++ b/result/errors/754947.xml.str @@ -0,0 +1,5 @@ +./test/errors/754947.xml:1: parser error : Input is not proper UTF-8, indicate encoding ! +Bytes: 0xEE 0x5D 0x5D 0x3E + + ^ +./test/errors/754947.xml : failed to parse diff --git a/result/errors/758588.xml b/result/errors/758588.xml new file mode 100644 index 0000000..e69de29 diff --git a/result/errors/758588.xml.err b/result/errors/758588.xml.err new file mode 100644 index 0000000..dfa59bc --- /dev/null +++ b/result/errors/758588.xml.err @@ -0,0 +1,9 @@ +./test/errors/758588.xml:1: namespace error : Namespace prefix a-340282366920938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867209384634725979468672093846347259794686720938463472597946867261d on a is not defined +63472597946867209384634725979468672093846347259794686720938463472597946867261d:a + ^ +./test/errors/758588.xml:1: parser error : expected '>' +2597946867209384634725979468672093846347259794686720938463472597946867261d:a>' +2597946867209384634725979468672093846347259794686720938463472597946867261d:a> + ^ +Entity: line 1: parser error : xmlParseEntityDecl: no name + %zz; + ^ +Entity: line 1: + + ^ +Entity: line 1: parser error : ParsePI: PI xDOCTYPEm space expected + %zz; + ^ +Entity: line 1: + + ^ +Entity: line 1: parser error : Space required after ' + ^ +Entity: line 1: parser error : xmlParseEntityDecl: no name + %zz; + ^ +Entity: line 1: + + ^ +Entity: line 1: parser error : ParsePI: PI xDOCTYPEm space expected + %zz; + ^ +Entity: line 1: + + ^ +Entity: line 1: parser error : Space required after 'ELEMENT' + %xx; + ^ +Entity: line 3: +%zz; + ^ +./test/errors/759573-2.xml:6: parser error : DOCTYPE improperly terminated +%xx;ÿggKENSMYNT#MENTDŴzz;'> + ^ +./test/errors/759573-2.xml:6: parser error : Start tag expected, '<' not found +%xx;ÿggKENSMYNT#MENTDŴzz;'> + ^ diff --git a/result/errors/759573-2.xml.str b/result/errors/759573-2.xml.str new file mode 100644 index 0000000..baac164 --- /dev/null +++ b/result/errors/759573-2.xml.str @@ -0,0 +1,4 @@ +./test/errors/759573-2.xml:2: parser error : Extra content at the end of the document +%xx; + ^ +./test/errors/759573.xml:1: parser error : DOCTYPE improperly terminated +T t (A)>%xx; + ^ +./test/errors/759573.xml:1: parser error : Start tag expected, '<' not found +T t (A)>%xx; + ^ diff --git a/result/errors/759573.xml.str b/result/errors/759573.xml.str new file mode 100644 index 0000000..1b6addb --- /dev/null +++ b/result/errors/759573.xml.str @@ -0,0 +1,4 @@ +./test/errors/759573.xml:1: parser error : Extra content at the end of the document +ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo + ^ diff --git a/result/errors/attr2.xml.str b/result/errors/attr2.xml.str new file mode 100644 index 0000000..13b08a7 --- /dev/null +++ b/result/errors/attr2.xml.str @@ -0,0 +1,10 @@ +./test/errors/attr2.xml:2: parser error : AttValue: ' expected + +^ +./test/errors/attr2.xml:2: parser error : attributes construct error + +^ +./test/errors/attr2.xml:2: parser error : Couldn't find end of Start Tag foo + +^ +./test/errors/attr2.xml : failed to parse diff --git a/result/errors/attr3.xml b/result/errors/attr3.xml new file mode 100644 index 0000000..de1f928 --- /dev/null +++ b/result/errors/attr3.xml @@ -0,0 +1,6 @@ + + + +]> + diff --git a/result/errors/attr3.xml.err b/result/errors/attr3.xml.err new file mode 100644 index 0000000..a628ca7 --- /dev/null +++ b/result/errors/attr3.xml.err @@ -0,0 +1,3 @@ +./test/errors/attr3.xml:4: validity warning : Attribute a1 of element doc: already defined + + ^ diff --git a/result/errors/attr3.xml.str b/result/errors/attr3.xml.str new file mode 100644 index 0000000..a628ca7 --- /dev/null +++ b/result/errors/attr3.xml.str @@ -0,0 +1,3 @@ +./test/errors/attr3.xml:4: validity warning : Attribute a1 of element doc: already defined + + ^ diff --git a/result/errors/attr4.xml b/result/errors/attr4.xml new file mode 100644 index 0000000..e69de29 diff --git a/result/errors/attr4.xml.err b/result/errors/attr4.xml.err new file mode 100644 index 0000000..a9966d8 --- /dev/null +++ b/result/errors/attr4.xml.err @@ -0,0 +1,12 @@ +./test/errors/attr4.xml:1: parser error : invalid character in attribute value + + ^ +./test/errors/attr4.xml:1: parser error : attributes construct error + + ^ +./test/errors/attr4.xml:1: parser error : Couldn't find end of Start Tag ROOT line 1 + + ^ +./test/errors/attr4.xml:1: parser error : Extra content at the end of the document + + ^ diff --git a/result/errors/attr4.xml.str b/result/errors/attr4.xml.str new file mode 100644 index 0000000..eeb9252 --- /dev/null +++ b/result/errors/attr4.xml.str @@ -0,0 +1,10 @@ +./test/errors/attr4.xml:1: parser error : invalid character in attribute value + + ^ +./test/errors/attr4.xml:1: parser error : attributes construct error + + ^ +./test/errors/attr4.xml:1: parser error : Couldn't find end of Start Tag ROOT + + ^ +./test/errors/attr4.xml : failed to parse diff --git a/result/errors/cdata.xml b/result/errors/cdata.xml new file mode 100644 index 0000000..e69de29 diff --git a/result/errors/cdata.xml.err b/result/errors/cdata.xml.err new file mode 100644 index 0000000..f757963 --- /dev/null +++ b/result/errors/cdata.xml.err @@ -0,0 +1,4 @@ +./test/errors/cdata.xml:2: parser error : Input is not proper UTF-8, indicate encoding ! +Bytes: 0xE1 0x72 0x5D 0x5D + + ^ diff --git a/result/errors/cdata.xml.str b/result/errors/cdata.xml.str new file mode 100644 index 0000000..cf83d2b --- /dev/null +++ b/result/errors/cdata.xml.str @@ -0,0 +1,5 @@ +./test/errors/cdata.xml:2: parser error : Input is not proper UTF-8, indicate encoding ! +Bytes: 0xE1 0x72 0x5D 0x5D + + ^ +./test/errors/cdata.xml : failed to parse diff --git a/result/errors/charref1.xml b/result/errors/charref1.xml new file mode 100644 index 0000000..e69de29 diff --git a/result/errors/charref1.xml.err b/result/errors/charref1.xml.err new file mode 100644 index 0000000..aa43bcf --- /dev/null +++ b/result/errors/charref1.xml.err @@ -0,0 +1,3 @@ +./test/errors/charref1.xml:1: parser error : xmlParseCharRef: invalid xmlChar value 60 + + ^ diff --git a/result/errors/charref1.xml.str b/result/errors/charref1.xml.str new file mode 100644 index 0000000..467b4f6 --- /dev/null +++ b/result/errors/charref1.xml.str @@ -0,0 +1,4 @@ +./test/errors/charref1.xml:1: parser error : xmlParseCharRef: invalid xmlChar value 60 + + ^ +./test/errors/charref1.xml : failed to parse diff --git a/result/errors/comment1.xml b/result/errors/comment1.xml new file mode 100644 index 0000000..e69de29 diff --git a/result/errors/comment1.xml.err b/result/errors/comment1.xml.err new file mode 100644 index 0000000..5a732dd --- /dev/null +++ b/result/errors/comment1.xml.err @@ -0,0 +1,6 @@ +./test/errors/comment1.xml:5: parser error : xmlParseComment: invalid xmlChar value 14 + in p02:  --> + ^ +./test/errors/comment1.xml:5: parser error : Start tag expected, '<' not found + in p02:  --> + ^ diff --git a/result/errors/comment1.xml.str b/result/errors/comment1.xml.str new file mode 100644 index 0000000..494d1ed --- /dev/null +++ b/result/errors/comment1.xml.str @@ -0,0 +1,4 @@ +./test/errors/comment1.xml:5: parser error : xmlParseComment: invalid xmlChar value 14 + in p02:  --> + ^ +./test/errors/comment1.xml : failed to parse diff --git a/result/errors/content1.xml b/result/errors/content1.xml new file mode 100644 index 0000000..e69de29 diff --git a/result/errors/content1.xml.err b/result/errors/content1.xml.err new file mode 100644 index 0000000..9fcd603 --- /dev/null +++ b/result/errors/content1.xml.err @@ -0,0 +1,16 @@ +./test/errors/content1.xml:7: parser error : ContentDecl : ',' '|' or ')' expected + + ^ +./test/errors/content1.xml:7: parser error : expected '>' + + ^ +./test/errors/content1.xml:7: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration + + + ^ +./test/errors/content1.xml:7: parser error : DOCTYPE improperly terminated + + ^ +./test/errors/content1.xml:7: parser error : Start tag expected, '<' not found + + ^ diff --git a/result/errors/content1.xml.str b/result/errors/content1.xml.str new file mode 100644 index 0000000..d806a63 --- /dev/null +++ b/result/errors/content1.xml.str @@ -0,0 +1,14 @@ +./test/errors/content1.xml:7: parser error : ContentDecl : ',' '|' or ')' expected + + ^ +./test/errors/content1.xml:7: parser error : expected '>' + + ^ +./test/errors/content1.xml:7: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration + + + ^ +./test/errors/content1.xml:7: parser error : DOCTYPE improperly terminated + + ^ +./test/errors/content1.xml : failed to parse diff --git a/result/errors/extparsedent.xml b/result/errors/extparsedent.xml new file mode 100644 index 0000000..07e4c54 --- /dev/null +++ b/result/errors/extparsedent.xml @@ -0,0 +1,5 @@ + + +]> +&c; diff --git a/result/errors/extparsedent.xml.err b/result/errors/extparsedent.xml.err new file mode 100644 index 0000000..e69de29 diff --git a/result/errors/extparsedent.xml.str b/result/errors/extparsedent.xml.str new file mode 100644 index 0000000..e69de29 diff --git a/result/errors/name.xml b/result/errors/name.xml new file mode 100644 index 0000000..e69de29 diff --git a/result/errors/name.xml.err b/result/errors/name.xml.err new file mode 100644 index 0000000..4dbfc52 --- /dev/null +++ b/result/errors/name.xml.err @@ -0,0 +1,3 @@ +./test/errors/name.xml:2: 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..fd4af59 --- /dev/null +++ b/result/errors/name.xml.str @@ -0,0 +1,4 @@ +./test/errors/name.xml:2: parser error : Couldn't find end of Start Tag foooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo + +^ +./test/errors/name.xml : failed to parse diff --git a/result/errors/name2.xml b/result/errors/name2.xml new file mode 100644 index 0000000..e69de29 diff --git a/result/errors/name2.xml.err b/result/errors/name2.xml.err new file mode 100644 index 0000000..a6649a1 --- /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:1: parser error : Extra content at the end of the document + + +]> + + diff --git a/result/eve.xml.rde b/result/eve.xml.rde new file mode 100644 index 0000000..6f08c55 --- /dev/null +++ b/result/eve.xml.rde @@ -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.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/eve.xml.sax2 b/result/eve.xml.sax2 new file mode 100644 index 0000000..ea3b430 --- /dev/null +++ b/result/eve.xml.sax2 @@ -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.startElementNs(spec, NULL, NULL, 0, 0, 0) +SAX.characters( +, 1) +SAX.endElementNs(spec, NULL, NULL) +SAX.endDocument() diff --git a/result/example.dtd b/result/example.dtd new file mode 100644 index 0000000..e69de29 diff --git a/result/expr/base b/result/expr/base new file mode 100644 index 0000000..9ab0d19 --- /dev/null +++ b/result/expr/base @@ -0,0 +1,85 @@ +Expression: a +Subexp: a => accept, Ok +Subexp: a | a => accept, Ok +Subexp: b => reject, Ok +Expression: a|b +Subexp: a => accept, Ok +Subexp: b => accept, Ok +Subexp: a | b => accept, Ok +Subexp: a{0} => reject, Ok +Subexp: b{0} => reject, Ok +Expression: a | b | a +Subexp: a => accept, Ok +Subexp: b => accept, Ok +Subexp: a | b => accept, Ok +Subexp: b | a => accept, Ok +Subexp: a | b | b => accept, Ok +Subexp: a | b | a => accept, Ok +Subexp: b | a | b => accept, Ok +Expression: a,a +Subexp: a,a => accept, Ok +Subexp: a => reject, Ok +Subexp: a,a,a => reject, Ok +Expression: a{0,3} +Subexp: a{3} => accept, Ok +Subexp: a => accept, Ok +Subexp: a,a,a => accept, Ok +Subexp: a{1,3} => accept, Ok +Expression: (a|b){0,4} +Subexp: a => accept, Ok +Subexp: b => accept, Ok +Subexp: a,b => accept, Ok +Subexp: a,b,a,b => accept, Ok +Subexp: b,a,b,a,b => reject, Ok +Subexp: b,a{1,3} => accept, Ok +Subexp: a{1,3},b => accept, Ok +Subexp: a{1,3},b,a => reject, Ok +Subexp: a{1,4},b => reject, Ok +Subexp: a{0,5} => reject, Ok +Subexp: (b|a){0,4} => accept, Ok +Subexp: (b|a){0,4},a => reject, Ok +Subexp: (a,b){0,2} => accept, Ok +Subexp: (a,b){0,1},b => accept, Ok +Expression: a* +Subexp: a => accept, Ok +Subexp: a? => accept, Ok +Subexp: a+ => accept, Ok +Subexp: a* => accept, Ok +Subexp: a{0} => accept, Ok +Expression: a+ +Subexp: a => accept, Ok +Subexp: a? => reject, Ok +Subexp: a+ => accept, Ok +Subexp: a* => reject, Ok +Subexp: a?,a => accept, Ok +Subexp: a,a* => accept, Ok +Subexp: a*,a => accept, Ok +Subexp: a?,a*,a => accept, Ok +Subexp: a*,a?,a => accept, Ok +Expression: (a|b)* +Subexp: a => accept, Ok +Subexp: b => accept, Ok +Subexp: a,b => accept, Ok +Subexp: a,b,a,b => accept, Ok +Subexp: (b|a){0,4} => accept, Ok +Subexp: (b|a){0,4},a => accept, Ok +Subexp: a* => accept, Ok +Subexp: b* => accept, Ok +Subexp: (a|b)* => accept, Ok +Subexp: a{1,3} => accept, Ok +Subexp: b,a{1,3} => accept, Ok +Subexp: a{1,3},b => accept, Ok +Subexp: a*,(a|b)* => accept, Ok +Subexp: a*,b{2,5} => accept, Ok +Subexp: a*,(a|b)*,b{2,5} => accept, Ok +Expression: (a|b)+,(c|d) +Subexp: a+,c => accept, Ok +Subexp: a*,c => reject, Ok +Subexp: a,c => accept, Ok +Subexp: a,b*,a*,c => accept, Ok +Expression: (a|b),(a|c){0,100} +Subexp: a{0,100},(a|c) => accept, Ok +Subexp: a{0,101},(a|c) => reject, Ok +Expression: (a, ((b, c, d){0,5}, e{0,1}){0,4}, f) +Subexp: (a, b, (c, d, b){2,3}, c, d, e, f) => accept, Ok +Ops: 0 nodes, 221 cons diff --git a/result/intsubset.xml b/result/intsubset.xml new file mode 100644 index 0000000..bd85795 --- /dev/null +++ b/result/intsubset.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/result/intsubset.xml.rde b/result/intsubset.xml.rde new file mode 100644 index 0000000..7503422 --- /dev/null +++ b/result/intsubset.xml.rde @@ -0,0 +1,2 @@ +0 10 root 0 0 +0 1 root 1 0 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/intsubset.xml.sax2 b/result/intsubset.xml.sax2 new file mode 100644 index 0000000..f4db2a8 --- /dev/null +++ b/result/intsubset.xml.sax2 @@ -0,0 +1,9 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.internalSubset(root, , ) +SAX.elementDecl(root, 1, ...) +SAX.comment( " ) +SAX.externalSubset(root, , ) +SAX.startElementNs(root, NULL, NULL, 0, 0, 0) +SAX.endElementNs(root, NULL, NULL) +SAX.endDocument() diff --git a/result/intsubset2.xml b/result/intsubset2.xml new file mode 100644 index 0000000..b103955 --- /dev/null +++ b/result/intsubset2.xml @@ -0,0 +1,250 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]> + + diff --git a/result/intsubset2.xml.rde b/result/intsubset2.xml.rde new file mode 100644 index 0000000..d27e245 --- /dev/null +++ b/result/intsubset2.xml.rde @@ -0,0 +1,5 @@ +0 10 kanjidic2 0 0 +0 1 kanjidic2 0 0 +1 14 #text 0 1 + +0 15 kanjidic2 0 0 diff --git a/result/intsubset2.xml.rdr b/result/intsubset2.xml.rdr new file mode 100644 index 0000000..d27e245 --- /dev/null +++ b/result/intsubset2.xml.rdr @@ -0,0 +1,5 @@ +0 10 kanjidic2 0 0 +0 1 kanjidic2 0 0 +1 14 #text 0 1 + +0 15 kanjidic2 0 0 diff --git a/result/intsubset2.xml.sax b/result/intsubset2.xml.sax new file mode 100644 index 0000000..b4d7bf4 --- /dev/null +++ b/result/intsubset2.xml.sax @@ -0,0 +1,286 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.internalSubset(kanjidic2, , ) +SAX.comment( Version 1.3 + This is the DTD of the XML-format kanji file combining information from + the KANJIDIC and KANJD212 files. It is intended to be largely self- + documenting, with each field being accompanied by an explanatory + comment. + + The file covers the following kanji: + (a) the 6,355 kanji from JIS X 0208; + (b) the 5,801 kanji from JIS X 0212; + (c) the 3,625 kanji from JIS X 0213 as follows: + (i) the 2,741 kanji which are also in JIS X 0212 have + JIS X 0213 code-points (kuten) added to the existing entry; + (ii) the 884 "new" kanji have new entries. + + At the end of the explanation for a number of fields there is a tag + with the format [N]. This indicates the leading letter(s) of the + equivalent field in the KANJIDIC and KANJD212 files. + + The KANJIDIC documentation should also be read for additional + information about the information in the file. + ) +SAX.elementDecl(kanjidic2, 4, ...) +SAX.elementDecl(header, 4, ...) +SAX.comment( + The single header element will contain identification information + about the version of the file + ) +SAX.elementDecl(file_version, 3, ...) +SAX.comment( + This field denotes the version of kanjidic2 structure, as more + than one version may exist. + ) +SAX.elementDecl(database_version, 3, ...) +SAX.comment( + The version of the file, in the format YYYY-NN, where NN will be + a number starting with 01 for the first version released in a + calendar year, then increasing for each version in that year. + ) +SAX.elementDecl(date_of_creation, 3, ...) +SAX.comment( + The date the file was created in international format (YYYY-MM-DD). + ) +SAX.elementDecl(character, 4, ...) +SAX.elementDecl(literal, 3, ...) +SAX.comment( + The character itself in UTF8 coding. + ) +SAX.elementDecl(codepoint, 4, ...) +SAX.comment( + The codepoint element states the code of the character in the various + character set standards. + ) +SAX.elementDecl(cp_value, 3, ...) +SAX.comment( + The cp_value contains the codepoint of the character in a particular + standard. The standard will be identified in the cp_type attribute. + ) +SAX.attributeDecl(cp_value, cp_type, 1, 2, NULL, ...) +SAX.comment( + The cp_type attribute states the coding standard applying to the + element. The values assigned so far are: + jis208 - JIS X 0208-1997 - kuten coding (nn-nn) + jis212 - JIS X 0212-1990 - kuten coding (nn-nn) + jis213 - JIS X 0213-2000 - kuten coding (p-nn-nn) + ucs - Unicode 4.0 - hex coding (4 or 5 hexadecimal digits) + ) +SAX.elementDecl(radical, 4, ...) +SAX.elementDecl(rad_value, 3, ...) +SAX.comment( + The radical number, in the range 1 to 214. The particular + classification type is stated in the rad_type attribute. + ) +SAX.attributeDecl(rad_value, rad_type, 1, 2, NULL, ...) +SAX.comment( + The rad_type attribute states the type of radical classification. + classical - as recorded in the KangXi Zidian. + nelson - as used in the Nelson "Modern Japanese-English + Character Dictionary" (i.e. the Classic, not the New Nelson). + This will only be used where Nelson reclassified the kanji. + ) +SAX.elementDecl(misc, 4, ...) +SAX.elementDecl(grade, 3, ...) +SAX.comment( + The Jouyou Kanji grade level. 1 through 6 indicate the grade in which + the kanji is taught in Japanese schools. 8 indicates it is one of the + remaining Jouyou Kanji to be learned in junior high school, and 9 + indicates it is a Jinmeiyou (for use in names) kanji. [G] + ) +SAX.elementDecl(stroke_count, 3, ...) +SAX.comment( + The stroke count of the kanji, including the radical. If more than + one, the first is considered the accepted count, while subsequent ones + are common miscounts. (See Appendix E. of the KANJIDIC documentation + for some of the rules applied when counting strokes in some of the + radicals.) [S] + ) +SAX.elementDecl(variant, 3, ...) +SAX.comment( + A cross-reference code to another kanji, usually regarded as a variant. + The type of cross-reference is given in the var_type attribute. + ) +SAX.attributeDecl(variant, var_type, 1, 2, NULL, ...) +SAX.comment( + The var_type attribute indicates the type of variant code. The current + values are: + jis208 - in JIS X 0208 - kuten coding + jis212 - in JIS X 0212 - kuten coding + jis213 - in JIS X 0213 - kuten coding + deroo - De Roo number - numeric + njecd - Halpern NJECD index number - numeric + s_h - The Kanji Dictionary (Spahn & Hadamitzky) - descriptor + nelson - "Classic" Nelson - numeric + oneill - Japanese Names (O'Neill) - numeric + ) +SAX.elementDecl(freq, 3, ...) +SAX.comment( + A frequency-of-use ranking. The 2,500 most-used characters have a + ranking; those characters that lack this field are not ranked. The + frequency is a number from 1 to 2,500 that expresses the relative + frequency of occurrence of a character in modern Japanese. This is + based on a survey in newspapers, so it is biassed towards kanji + used in newspaper articles. The discrimination between the less + frequently used kanji is not strong. + ) +SAX.elementDecl(rad_name, 3, ...) +SAX.comment( + When the kanji is itself a radical and has a name, this element + contains the name (in hiragana.) [T2] + ) +SAX.elementDecl(dic_number, 4, ...) +SAX.comment( + This element contains the index numbers and similar unstructured + information such as page numbers in a number of published dictionaries, + and instructional books on kanji. + ) +SAX.elementDecl(dic_ref, 3, ...) +SAX.comment( + Each dic_ref contains an index number. The particular dictionary, + etc. is defined by the dr_type attribute. + ) +SAX.attributeDecl(dic_ref, dr_type, 1, 2, NULL, ...) +SAX.comment( + The dr_type defines the dictionary or reference book, etc. to which + dic_ref element applies. The initial allocation is: + nelson_c - "Modern Reader's Japanese-English Character Dictionary", + edited by Andrew Nelson (now published as the "Classic" + Nelson). + nelson_n - "The New Nelson Japanese-English Character Dictionary", + edited by John Haig. + halpern_njecd - "New Japanese-English Character Dictionary", + edited by Jack Halpern. + halpern_kkld - "Kanji Learners Dictionary" (Kodansha) edited by + Jack Halpern. + heisig - "Remembering The Kanji" by James Heisig. + gakken - "A New Dictionary of Kanji Usage" (Gakken) + oneill_names - "Japanese Names", by P.G. O'Neill. + oneill_kk - "Essential Kanji" by P.G. O'Neill. + moro - "Daikanwajiten" compiled by Morohashi. For some kanji two + additional attributes are used: m_vol: the volume of the + dictionary in which the kanji is found, and m_page: the page + number in the volume. + henshall - "A Guide To Remembering Japanese Characters" by + Kenneth G. Henshall. + sh_kk - "Kanji and Kana" by Spahn and Hadamitzky. + sakade - "A Guide To Reading and Writing Japanese" edited by + Florence Sakade. + henshall3 - "A Guide To Reading and Writing Japanese" 3rd + edition, edited by Henshall, Seeley and De Groot. + tutt_cards - Tuttle Kanji Cards, compiled by Alexander Kask. + crowley - "The Kanji Way to Japanese Language Power" by + Dale Crowley. + kanji_in_context - "Kanji in Context" by Nishiguchi and Kono. + busy_people - "Japanese For Busy People" vols I-III, published + by the AJLT. The codes are the volume.chapter. + kodansha_compact - the "Kodansha Compact Kanji Guide". + ) +SAX.attributeDecl(dic_ref, m_vol, 1, 3, NULL, ...) +SAX.comment( + See above under "moro". + ) +SAX.attributeDecl(dic_ref, m_page, 1, 3, NULL, ...) +SAX.comment( + See above under "moro". + ) +SAX.elementDecl(query_code, 4, ...) +SAX.comment( + These codes contain information relating to the glyph, and can be used + for finding a required kanji. The type of code is defined by the + qc_type attribute. + ) +SAX.elementDecl(q_code, 3, ...) +SAX.comment( + The q_code contains the actual query-code value, according to the + qc_type attribute. + ) +SAX.attributeDecl(q_code, qc_type, 1, 2, NULL, ...) +SAX.comment( + The q_code attribute defines the type of query code. The current values + are: + skip - Halpern's SKIP (System of Kanji Indexing by Patterns) + code. The format is n-nn-nn. See the KANJIDIC documentation + for a description of the code and restrictions on the + commercial use of this data. [P] + + sh_desc - the descriptor codes for The Kanji Dictionary (Tuttle + 1996) by Spahn and Hadamitzky. They are in the form nxnn.n, + e.g. 3k11.2, where the kanji has 3 strokes in the + identifying radical, it is radical "k" in the SH + classification system, there are 11 other strokes, and it is + the 2nd kanji in the 3k11 sequence. (I am very grateful to + Mark Spahn for providing the list of these descriptor codes + for the kanji in this file.) [I] + four_corner - the "Four Corner" code for the kanji. This is a code + invented by Wang Chen in 1928. See the KANJIDIC documentation + for an overview of the Four Corner System. [Q] + + deroo - the codes developed by the late Father Joseph De Roo, and + published in his book "2001 Kanji" (Bojinsha). Fr De Roo + gave his permission for these codes to be included. [DR] + misclass - a possible misclassification of the kanji according + to one of the code types. (See the "Z" codes in the KANJIDIC + documentation for more details.) + + ) +SAX.elementDecl(reading_meaning, 4, ...) +SAX.comment( + The readings for the kanji in several languages, and the meanings, also + in several languages. The readings and meanings are grouped to enable + the handling of the situation where the meaning is differentiated by + reading. [T1] + ) +SAX.elementDecl(nanori, 3, ...) +SAX.comment( + Japanese readings that are now only associated with names. + ) +SAX.elementDecl(rmgroup, 4, ...) +SAX.elementDecl(reading, 3, ...) +SAX.comment( + The reading element contains the reading or pronunciation + of the kanji. + ) +SAX.attributeDecl(reading, r_type, 1, 2, NULL, ...) +SAX.comment( + The r_type attribute defines the type of reading in the reading + element. The current values are: + pinyin - the modern PinYin romanization of the Chinese reading + of the kanji. The tones are represented by a concluding + digit. [Y] + korean_r - the romanized form of the Korean reading(s) of the + kanji. The readings are in the (Republic of Korea) Ministry + of Education style of romanization. [W] + korean_h - the Korean reading(s) of the kanji in hangul. + ja_on - the "on" Japanese reading of the kanji, in katakana. A + second attribute r_status, if present, will indicate with + a value of "jy" whether the reading is approved for a + "Jouyou kanji". + ja_kun - the "kun" Japanese reading of the kanji, in hiragana. + Where relevant the okurigana is also included separated by a + ".". Readings associated with prefixes and suffixes are + marked with a "-". A second attribute r_status, if present, + will indicate with a value of "jy" whether the reading is + approved for a "Jouyou kanji". + ) +SAX.attributeDecl(reading, r_status, 1, 3, NULL, ...) +SAX.comment( + See under ja_on and ja_kun above. + ) +SAX.elementDecl(meaning, 3, ...) +SAX.comment( + The meaning associated with the kanji. + ) +SAX.attributeDecl(meaning, m_lang, 1, 3, NULL, ...) +SAX.comment( + The m_lang attribute defines the target language of the meaning. It + will be coded using the two-letter language code from the ISO 639 + standard. When absent, the value "en" (i.e. English) is implied. [{}] + ) +SAX.externalSubset(kanjidic2, , ) +SAX.startElement(kanjidic2) +SAX.characters( +, 1) +SAX.endElement(kanjidic2) +SAX.endDocument() diff --git a/result/intsubset2.xml.sax2 b/result/intsubset2.xml.sax2 new file mode 100644 index 0000000..5558701 --- /dev/null +++ b/result/intsubset2.xml.sax2 @@ -0,0 +1,286 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.internalSubset(kanjidic2, , ) +SAX.comment( Version 1.3 + This is the DTD of the XML-format kanji file combining information from + the KANJIDIC and KANJD212 files. It is intended to be largely self- + documenting, with each field being accompanied by an explanatory + comment. + + The file covers the following kanji: + (a) the 6,355 kanji from JIS X 0208; + (b) the 5,801 kanji from JIS X 0212; + (c) the 3,625 kanji from JIS X 0213 as follows: + (i) the 2,741 kanji which are also in JIS X 0212 have + JIS X 0213 code-points (kuten) added to the existing entry; + (ii) the 884 "new" kanji have new entries. + + At the end of the explanation for a number of fields there is a tag + with the format [N]. This indicates the leading letter(s) of the + equivalent field in the KANJIDIC and KANJD212 files. + + The KANJIDIC documentation should also be read for additional + information about the information in the file. + ) +SAX.elementDecl(kanjidic2, 4, ...) +SAX.elementDecl(header, 4, ...) +SAX.comment( + The single header element will contain identification information + about the version of the file + ) +SAX.elementDecl(file_version, 3, ...) +SAX.comment( + This field denotes the version of kanjidic2 structure, as more + than one version may exist. + ) +SAX.elementDecl(database_version, 3, ...) +SAX.comment( + The version of the file, in the format YYYY-NN, where NN will be + a number starting with 01 for the first version released in a + calendar year, then increasing for each version in that year. + ) +SAX.elementDecl(date_of_creation, 3, ...) +SAX.comment( + The date the file was created in international format (YYYY-MM-DD). + ) +SAX.elementDecl(character, 4, ...) +SAX.elementDecl(literal, 3, ...) +SAX.comment( + The character itself in UTF8 coding. + ) +SAX.elementDecl(codepoint, 4, ...) +SAX.comment( + The codepoint element states the code of the character in the various + character set standards. + ) +SAX.elementDecl(cp_value, 3, ...) +SAX.comment( + The cp_value contains the codepoint of the character in a particular + standard. The standard will be identified in the cp_type attribute. + ) +SAX.attributeDecl(cp_value, cp_type, 1, 2, NULL, ...) +SAX.comment( + The cp_type attribute states the coding standard applying to the + element. The values assigned so far are: + jis208 - JIS X 0208-1997 - kuten coding (nn-nn) + jis212 - JIS X 0212-1990 - kuten coding (nn-nn) + jis213 - JIS X 0213-2000 - kuten coding (p-nn-nn) + ucs - Unicode 4.0 - hex coding (4 or 5 hexadecimal digits) + ) +SAX.elementDecl(radical, 4, ...) +SAX.elementDecl(rad_value, 3, ...) +SAX.comment( + The radical number, in the range 1 to 214. The particular + classification type is stated in the rad_type attribute. + ) +SAX.attributeDecl(rad_value, rad_type, 1, 2, NULL, ...) +SAX.comment( + The rad_type attribute states the type of radical classification. + classical - as recorded in the KangXi Zidian. + nelson - as used in the Nelson "Modern Japanese-English + Character Dictionary" (i.e. the Classic, not the New Nelson). + This will only be used where Nelson reclassified the kanji. + ) +SAX.elementDecl(misc, 4, ...) +SAX.elementDecl(grade, 3, ...) +SAX.comment( + The Jouyou Kanji grade level. 1 through 6 indicate the grade in which + the kanji is taught in Japanese schools. 8 indicates it is one of the + remaining Jouyou Kanji to be learned in junior high school, and 9 + indicates it is a Jinmeiyou (for use in names) kanji. [G] + ) +SAX.elementDecl(stroke_count, 3, ...) +SAX.comment( + The stroke count of the kanji, including the radical. If more than + one, the first is considered the accepted count, while subsequent ones + are common miscounts. (See Appendix E. of the KANJIDIC documentation + for some of the rules applied when counting strokes in some of the + radicals.) [S] + ) +SAX.elementDecl(variant, 3, ...) +SAX.comment( + A cross-reference code to another kanji, usually regarded as a variant. + The type of cross-reference is given in the var_type attribute. + ) +SAX.attributeDecl(variant, var_type, 1, 2, NULL, ...) +SAX.comment( + The var_type attribute indicates the type of variant code. The current + values are: + jis208 - in JIS X 0208 - kuten coding + jis212 - in JIS X 0212 - kuten coding + jis213 - in JIS X 0213 - kuten coding + deroo - De Roo number - numeric + njecd - Halpern NJECD index number - numeric + s_h - The Kanji Dictionary (Spahn & Hadamitzky) - descriptor + nelson - "Classic" Nelson - numeric + oneill - Japanese Names (O'Neill) - numeric + ) +SAX.elementDecl(freq, 3, ...) +SAX.comment( + A frequency-of-use ranking. The 2,500 most-used characters have a + ranking; those characters that lack this field are not ranked. The + frequency is a number from 1 to 2,500 that expresses the relative + frequency of occurrence of a character in modern Japanese. This is + based on a survey in newspapers, so it is biassed towards kanji + used in newspaper articles. The discrimination between the less + frequently used kanji is not strong. + ) +SAX.elementDecl(rad_name, 3, ...) +SAX.comment( + When the kanji is itself a radical and has a name, this element + contains the name (in hiragana.) [T2] + ) +SAX.elementDecl(dic_number, 4, ...) +SAX.comment( + This element contains the index numbers and similar unstructured + information such as page numbers in a number of published dictionaries, + and instructional books on kanji. + ) +SAX.elementDecl(dic_ref, 3, ...) +SAX.comment( + Each dic_ref contains an index number. The particular dictionary, + etc. is defined by the dr_type attribute. + ) +SAX.attributeDecl(dic_ref, dr_type, 1, 2, NULL, ...) +SAX.comment( + The dr_type defines the dictionary or reference book, etc. to which + dic_ref element applies. The initial allocation is: + nelson_c - "Modern Reader's Japanese-English Character Dictionary", + edited by Andrew Nelson (now published as the "Classic" + Nelson). + nelson_n - "The New Nelson Japanese-English Character Dictionary", + edited by John Haig. + halpern_njecd - "New Japanese-English Character Dictionary", + edited by Jack Halpern. + halpern_kkld - "Kanji Learners Dictionary" (Kodansha) edited by + Jack Halpern. + heisig - "Remembering The Kanji" by James Heisig. + gakken - "A New Dictionary of Kanji Usage" (Gakken) + oneill_names - "Japanese Names", by P.G. O'Neill. + oneill_kk - "Essential Kanji" by P.G. O'Neill. + moro - "Daikanwajiten" compiled by Morohashi. For some kanji two + additional attributes are used: m_vol: the volume of the + dictionary in which the kanji is found, and m_page: the page + number in the volume. + henshall - "A Guide To Remembering Japanese Characters" by + Kenneth G. Henshall. + sh_kk - "Kanji and Kana" by Spahn and Hadamitzky. + sakade - "A Guide To Reading and Writing Japanese" edited by + Florence Sakade. + henshall3 - "A Guide To Reading and Writing Japanese" 3rd + edition, edited by Henshall, Seeley and De Groot. + tutt_cards - Tuttle Kanji Cards, compiled by Alexander Kask. + crowley - "The Kanji Way to Japanese Language Power" by + Dale Crowley. + kanji_in_context - "Kanji in Context" by Nishiguchi and Kono. + busy_people - "Japanese For Busy People" vols I-III, published + by the AJLT. The codes are the volume.chapter. + kodansha_compact - the "Kodansha Compact Kanji Guide". + ) +SAX.attributeDecl(dic_ref, m_vol, 1, 3, NULL, ...) +SAX.comment( + See above under "moro". + ) +SAX.attributeDecl(dic_ref, m_page, 1, 3, NULL, ...) +SAX.comment( + See above under "moro". + ) +SAX.elementDecl(query_code, 4, ...) +SAX.comment( + These codes contain information relating to the glyph, and can be used + for finding a required kanji. The type of code is defined by the + qc_type attribute. + ) +SAX.elementDecl(q_code, 3, ...) +SAX.comment( + The q_code contains the actual query-code value, according to the + qc_type attribute. + ) +SAX.attributeDecl(q_code, qc_type, 1, 2, NULL, ...) +SAX.comment( + The q_code attribute defines the type of query code. The current values + are: + skip - Halpern's SKIP (System of Kanji Indexing by Patterns) + code. The format is n-nn-nn. See the KANJIDIC documentation + for a description of the code and restrictions on the + commercial use of this data. [P] + + sh_desc - the descriptor codes for The Kanji Dictionary (Tuttle + 1996) by Spahn and Hadamitzky. They are in the form nxnn.n, + e.g. 3k11.2, where the kanji has 3 strokes in the + identifying radical, it is radical "k" in the SH + classification system, there are 11 other strokes, and it is + the 2nd kanji in the 3k11 sequence. (I am very grateful to + Mark Spahn for providing the list of these descriptor codes + for the kanji in this file.) [I] + four_corner - the "Four Corner" code for the kanji. This is a code + invented by Wang Chen in 1928. See the KANJIDIC documentation + for an overview of the Four Corner System. [Q] + + deroo - the codes developed by the late Father Joseph De Roo, and + published in his book "2001 Kanji" (Bojinsha). Fr De Roo + gave his permission for these codes to be included. [DR] + misclass - a possible misclassification of the kanji according + to one of the code types. (See the "Z" codes in the KANJIDIC + documentation for more details.) + + ) +SAX.elementDecl(reading_meaning, 4, ...) +SAX.comment( + The readings for the kanji in several languages, and the meanings, also + in several languages. The readings and meanings are grouped to enable + the handling of the situation where the meaning is differentiated by + reading. [T1] + ) +SAX.elementDecl(nanori, 3, ...) +SAX.comment( + Japanese readings that are now only associated with names. + ) +SAX.elementDecl(rmgroup, 4, ...) +SAX.elementDecl(reading, 3, ...) +SAX.comment( + The reading element contains the reading or pronunciation + of the kanji. + ) +SAX.attributeDecl(reading, r_type, 1, 2, NULL, ...) +SAX.comment( + The r_type attribute defines the type of reading in the reading + element. The current values are: + pinyin - the modern PinYin romanization of the Chinese reading + of the kanji. The tones are represented by a concluding + digit. [Y] + korean_r - the romanized form of the Korean reading(s) of the + kanji. The readings are in the (Republic of Korea) Ministry + of Education style of romanization. [W] + korean_h - the Korean reading(s) of the kanji in hangul. + ja_on - the "on" Japanese reading of the kanji, in katakana. A + second attribute r_status, if present, will indicate with + a value of "jy" whether the reading is approved for a + "Jouyou kanji". + ja_kun - the "kun" Japanese reading of the kanji, in hiragana. + Where relevant the okurigana is also included separated by a + ".". Readings associated with prefixes and suffixes are + marked with a "-". A second attribute r_status, if present, + will indicate with a value of "jy" whether the reading is + approved for a "Jouyou kanji". + ) +SAX.attributeDecl(reading, r_status, 1, 3, NULL, ...) +SAX.comment( + See under ja_on and ja_kun above. + ) +SAX.elementDecl(meaning, 3, ...) +SAX.comment( + The meaning associated with the kanji. + ) +SAX.attributeDecl(meaning, m_lang, 1, 3, NULL, ...) +SAX.comment( + The m_lang attribute defines the target language of the meaning. It + will be coded using the two-letter language code from the ISO 639 + standard. When absent, the value "en" (i.e. English) is implied. [{}] + ) +SAX.externalSubset(kanjidic2, , ) +SAX.startElementNs(kanjidic2, NULL, NULL, 0, 0, 0) +SAX.characters( +, 1) +SAX.endElementNs(kanjidic2, NULL, NULL) +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 @@ + + diff --git a/result/isolat1.rde b/result/isolat1.rde new file mode 100644 index 0000000..e289b2f --- /dev/null +++ b/result/isolat1.rde @@ -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.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/isolat1.sax2 b/result/isolat1.sax2 new file mode 100644 index 0000000..b97920a --- /dev/null +++ b/result/isolat1.sax2 @@ -0,0 +1,7 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElementNs(très, NULL, NULL, 0, 0, 0) +SAX.characters(l, 1) +SAX.characters(à, 2) +SAX.endElementNs(très, NULL, NULL) +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 @@ + + + + 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 + + diff --git a/result/isolat2.rde b/result/isolat2.rde new file mode 100644 index 0000000..524cb3e --- /dev/null +++ b/result/isolat2.rde @@ -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.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/isolat2.sax2 b/result/isolat2.sax2 new file mode 100644 index 0000000..0ac3f56 --- /dev/null +++ b/result/isolat2.sax2 @@ -0,0 +1,35 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElementNs(tst, NULL, NULL, 0, 0, 0) +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.endElementNs(tst, NULL, NULL) +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 @@ + + + + +]]> +then the replacement text for the entity "book" is: +La Peste: Albert Camus, +© 1947 Éditions Gallimard. &rights; + diff --git a/result/isolat3.rde b/result/isolat3.rde new file mode 100644 index 0000000..1067c0f --- /dev/null +++ b/result/isolat3.rde @@ -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 + + +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.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 + + +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..7c40e6e --- /dev/null +++ b/result/isolat3.sax @@ -0,0 +1,29 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElement(rec) +SAX.characters( +, 1) +SAX.startElement(eg) +SAX.pcdata( +<入力メッセージ xmlns="http://schemas.cordys.com/webapps/1.0/bpm/c8c8b82a-0ac0-3d19-01e2-bda74af9b826"> + + diff --git a/result/japancrlf.xml.rde b/result/japancrlf.xml.rde new file mode 100644 index 0000000..0bc5af7 --- /dev/null +++ b/result/japancrlf.xml.rde @@ -0,0 +1,7 @@ +0 1 入力メッセージ 0 0 +1 14 #text 0 1 + +1 1 c8c:Ele 1 0 +1 14 #text 0 1 + +0 15 入力メッセージ 0 0 diff --git a/result/japancrlf.xml.rdr b/result/japancrlf.xml.rdr new file mode 100644 index 0000000..0bc5af7 --- /dev/null +++ b/result/japancrlf.xml.rdr @@ -0,0 +1,7 @@ +0 1 入力メッセージ 0 0 +1 14 #text 0 1 + +1 1 c8c:Ele 1 0 +1 14 #text 0 1 + +0 15 入力メッセージ 0 0 diff --git a/result/japancrlf.xml.sax b/result/japancrlf.xml.sax new file mode 100644 index 0000000..c3bbdc6 --- /dev/null +++ b/result/japancrlf.xml.sax @@ -0,0 +1,11 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElement(入力メッセージ, xmlns='http://schemas.cordys.com/webapps/1.0/bpm/c8c8b82a-0ac0-3d19-01e2-bda74af9b826') +SAX.characters( + , 2) +SAX.startElement(c8c:Ele, xmlns:c8c='http://schemas.cordys.com/webapps/1.0/bpm/c8c8b82a-0ac0-3d19-01e2-bda74af9b826') +SAX.endElement(c8c:Ele) +SAX.characters( +, 1) +SAX.endElement(入力メッセージ) +SAX.endDocument() diff --git a/result/japancrlf.xml.sax2 b/result/japancrlf.xml.sax2 new file mode 100644 index 0000000..878eae4 --- /dev/null +++ b/result/japancrlf.xml.sax2 @@ -0,0 +1,11 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElementNs(入力メッセージ, NULL, 'http://schemas.cordys.com/webapps/1.0/bpm/c8c8b82a-0ac0-3d19-01e2-bda74af9b826', 1, xmlns='http://schemas.cordys.com/webapps/1.0/bpm/c8c8b82a-0ac0-3d19-01e2-bda74af9b826', 0, 0) +SAX.characters( + , 2) +SAX.startElementNs(Ele, c8c, 'http://schemas.cordys.com/webapps/1.0/bpm/c8c8b82a-0ac0-3d19-01e2-bda74af9b826', 1, xmlns:c8c='http://schemas.cordys.com/webapps/1.0/bpm/c8c8b82a-0ac0-3d19-01e2-bda74af9b826', 0, 0) +SAX.endElementNs(Ele, c8c, 'http://schemas.cordys.com/webapps/1.0/bpm/c8c8b82a-0ac0-3d19-01e2-bda74af9b826') +SAX.characters( +, 1) +SAX.endElementNs(入力メッセージ, NULL, 'http://schemas.cordys.com/webapps/1.0/bpm/c8c8b82a-0ac0-3d19-01e2-bda74af9b826') +SAX.endDocument() diff --git a/result/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 @@ + + diff --git a/result/namespaces/err_0.xml.err b/result/namespaces/err_0.xml.err new file mode 100644 index 0000000..e69de29 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 @@ + + 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:' + + ^ diff --git a/result/namespaces/err_10.xml b/result/namespaces/err_10.xml new file mode 100644 index 0000000..e69de29 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 + + ^ diff --git a/result/namespaces/err_11.xml b/result/namespaces/err_11.xml new file mode 100644 index 0000000..e69de29 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 + + ^ 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 @@ + +<:/> 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 @@ + +<: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 @@ + + 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:' + + ^ 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 @@ + + 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:' + + ^ 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 @@ + + 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:' + + ^ diff --git a/result/namespaces/err_7.xml b/result/namespaces/err_7.xml new file mode 100644 index 0000000..4b4c662 --- /dev/null +++ b/result/namespaces/err_7.xml @@ -0,0 +1,2 @@ + + 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 + + ^ 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 @@ + + 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 + + ^ 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 @@ + + 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 @@ + + diff --git a/result/noent/att10 b/result/noent/att10 new file mode 100644 index 0000000..07f0096 --- /dev/null +++ b/result/noent/att10 @@ -0,0 +1,18 @@ + + + + + + + + +]> + + + + + + + + diff --git a/result/noent/att11 b/result/noent/att11 new file mode 100644 index 0000000..3646e62 --- /dev/null +++ b/result/noent/att11 @@ -0,0 +1,9 @@ + + + + + + +]> + 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 @@ + + 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 @@ + + 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 @@ + + + + + + + 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 @@ + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 @@ + + + + pvalue->ReferencedOrder.SellersOrderID + + 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 @@ + + + + +"> +]> + + + + 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 @@ + +/bsk:DocPart[@docId='20040308152601345236' and @docPartNo=1]XQL Request processing XQL Request processed diff --git a/result/noent/att9 b/result/noent/att9 new file mode 100644 index 0000000..e4982a2 --- /dev/null +++ b/result/noent/att9 @@ -0,0 +1,6 @@ + + + +]> + 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 @@ + + diff --git a/result/noent/badcomment.xml b/result/noent/badcomment.xml new file mode 100644 index 0000000..6b13c11 --- /dev/null +++ b/result/noent/badcomment.xml @@ -0,0 +1,17 @@ + + +Char* ']]>' Char*)) +']]>' +CDATA sections +| '<!DOCTYPE' +(Char - ('[' | ']'))+ +('[' +simpleDTD* +']')? '>' +doc type declaration +simpleDTD +'<!&como;' +(Char* - +(Char* '&comc;' Char*)) +'&comc;>'--> + 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 @@ + + + +]> +He said "Yes" 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 @@ + + 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 @@ + + 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 @@ + + +Hello, world!
    ]]> +
    diff --git a/result/noent/cdata-2-byte-UTF-8.xml b/result/noent/cdata-2-byte-UTF-8.xml new file mode 100644 index 0000000..8552efc --- /dev/null +++ b/result/noent/cdata-2-byte-UTF-8.xml @@ -0,0 +1,6 @@ + + + +

    +

    +
    diff --git a/result/noent/cdata-3-byte-UTF-8.xml b/result/noent/cdata-3-byte-UTF-8.xml new file mode 100644 index 0000000..b959a12 --- /dev/null +++ b/result/noent/cdata-3-byte-UTF-8.xml @@ -0,0 +1,7 @@ + + + +

    +

    +

    +
    diff --git a/result/noent/cdata-4-byte-UTF-8.xml b/result/noent/cdata-4-byte-UTF-8.xml new file mode 100644 index 0000000..4d1d9a8 --- /dev/null +++ b/result/noent/cdata-4-byte-UTF-8.xml @@ -0,0 +1,8 @@ + + + +

    +

    +

    +

    +
    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 @@ + + + ]> + 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 @@ + + + + + + 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 @@ + + + + + + diff --git a/result/noent/comment3.xml b/result/noent/comment3.xml new file mode 100644 index 0000000..395f67c --- /dev/null +++ b/result/noent/comment3.xml @@ -0,0 +1,164 @@ + + + diff --git a/result/noent/comment4.xml b/result/noent/comment4.xml new file mode 100644 index 0000000..93282d8 --- /dev/null +++ b/result/noent/comment4.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/result/noent/comment5.xml b/result/noent/comment5.xml new file mode 100644 index 0000000..398f974 --- /dev/null +++ b/result/noent/comment5.xml @@ -0,0 +1,9 @@ + + + diff --git a/result/noent/comment6.xml b/result/noent/comment6.xml new file mode 100644 index 0000000..3e6074e --- /dev/null +++ b/result/noent/comment6.xml @@ -0,0 +1,14 @@ + + + +]> + 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 @@ + + + + + + Box type A + + + J.J. Dingleheimerschmidt + + + HTTP/1.1 200 OK + + + + + + + HTTP/1.1 403 Forbidden + The user does not have access to the DingALing property. + + + There has been an access violation error. + + 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 @@ + + + http://www.ics.uci.edu/~ejw/contact.html + 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 @@ + + + + + write + exclusive + + + + http://www.ics.uci.edu/~ejw/contact.html + + + Second-604800 + + + opaquelocktoken:xyz122393481230912asdfa09s8df09s7df + + + + + 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 @@ + +http://www.ics.uci.edu/~ejw/contact.html 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 @@ + + + + + http://webdav.sb.aol.com/workspace/webdav/proposal.doc + + + http://webdav.sb.aol.com/workspace/webdav/ + + HTTP/1.1 202 Accepted + + + http://foo.bar/blah + HTTP/1.1 403 Forbidden + + 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 @@ + + + + + Source + http://foo.bar/program + http://foo.bar/src/main.c + + + Library + http://foo.bar/program + http://foo.bar/src/main.lib + + + Makefile + http://foo.bar/program + http://foo.bar/src/makefile + + + 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 @@ + + + + + + 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 @@ + + + + + + + write + exclusive + + http://foo.com/doc/ + + Jane Smith + Infinite + + iamuri:unique!!!!! + + + + + HTTP/1.1 200 OK + + 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 @@ + + + + + + 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 @@ + + + + + + + Write + Exclusive + + + Write + Shared + + + + HTTP/1.1 200 OK + + 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 @@ + + + + http://www.foo.bar/container/ + + + Box type A + + + Hadrian + + + HTTP 1.1 200 OK + + + http://www.foo.bar/container/index.html + + + Box type B + + + HTTP 1.1 200 OK + + 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 @@ + + + + http://www.foo.bar/container/ + + + + + HTTP 1.1 200 OK + + + http://www.foo.bar/container/index.html + + + + HTTP 1.1 200 OK + + 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 @@ + + + + + + Jim Whitehead + Roy Fielding + + + + + + + + + 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 @@ + + + + + + + HTTP/1.1 420 Method Failure + + + + + + HTTP/1.1 409 Conflict + + Copyright Owner can not be deleted or +altered. + 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 @@ + + + + http://www.microsoft.com/user/yarong/dav_drafts/ + + + + + + + HTTP 1.1 200 OK + + + + http://www.microsoft.com/user/yarong/dav_drafts/base + + + + + HTTP 1.1 200 OK + + 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 @@ + + + + http://www.foo.bar/container/resource1 + http://www.foo.bar/container/resource2 + HTTP/1.1 200 OK + + + http://www.foo.bar/container/ + HTTP/1.1 420 Method Failure + + + http://www.foo.bar/container/resource3 + HTTP/1.1 412 Precondition Failed + + 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 @@ + + + + http://www.foo.bar/othercontainer/resource1 + http://www.foo.bar/othercontainer/resource2 + http://www.foo.bar/othercontainer/ + http://www.foo.bar/othercontainer/R2/D2 + HTTP/1.1 201 Created + + + http://www.foo.bar/othercontainer/R2/ + HTTP/1.1 412 Precondition Failed + + 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 @@ + + + + http://www.foo.bar/container/resource1 + http://www.foo.bar/container/resource2 + http://www.foo.bar/container/ + http://www.foo.bar/container/C2/R2 + HTTP/1.1 201 Created + + + http://www.foo.bar/container/C2 + HTTP/1.1 420 Method Failure + + + http://www.foo.bar/othercontainer/C2 + HTTP/1.1 409 Conflict + + 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 @@ + + + +]> + 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 @@ + + + + + +]> + 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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 @@ + + + + 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 @@ + + + + + + +]> +This is a valid document 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 @@ + + + +]> + 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 @@ + + + +]> +He said "Yes" 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 @@ + + + +]> + + 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 @@ + + +]> +This is a valid document ! 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 @@ + + +]> +This is a valid document ! 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 @@ + + +]> + 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 @@ + + + + +]> +This is a valid document 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 @@ + + + + +]> +This is a valid document 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 @@ + + + + +]> +This is a valid document 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 @@ + + + + + + +]> +This is a valid document 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 @@ + + + + + + +]> +This is a valid document diff --git a/result/noent/ebcdic_566012.xml b/result/noent/ebcdic_566012.xml new file mode 100644 index 0000000..153add5 --- /dev/null +++ b/result/noent/ebcdic_566012.xml @@ -0,0 +1 @@ +Lo§”“@¥…™¢‰–•~ñKð@…•ƒ–„‰•‡~ÉÂÔ`ññôñon%L£…¢£@££™~JàZan% \ No newline at end of file diff --git a/result/noent/emptycdata.xml b/result/noent/emptycdata.xml new file mode 100644 index 0000000..bc98388 --- /dev/null +++ b/result/noent/emptycdata.xml @@ -0,0 +1,4 @@ + + + + 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 @@ + + +]> + + Extensible Markup Language + diff --git a/result/noent/ent10 b/result/noent/ent10 new file mode 100644 index 0000000..946aff8 --- /dev/null +++ b/result/noent/ent10 @@ -0,0 +1,18 @@ + + + + + + hello world + + "> +]> + + + + hello world + + + diff --git a/result/noent/ent11 b/result/noent/ent11 new file mode 100644 index 0000000..e1e1e0f --- /dev/null +++ b/result/noent/ent11 @@ -0,0 +1,6 @@ + + +]> + + diff --git a/result/noent/ent12 b/result/noent/ent12 new file mode 100644 index 0000000..e398313 --- /dev/null +++ b/result/noent/ent12 @@ -0,0 +1,8 @@ + + + +]> + + def + diff --git a/result/noent/ent13 b/result/noent/ent13 new file mode 100644 index 0000000..02bc069 --- /dev/null +++ b/result/noent/ent13 @@ -0,0 +1,5 @@ + + +]> +a 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 @@ + + + + +]> + + +my title + + This text is about XML, the Extensible Markup Language and this is an embedded + 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 @@ + + +]> + + Test of entities in attributes. + 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 @@ + + +]> + + Test of &amp; behaviour a&b . + 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 @@ + + + This is an inverted exclamation sign ¡ + This is a space + 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 @@ + + + + + + +]> + 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 @@ + +"> + + + +]> +'they called me the hyacinth girl' 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 @@ + + + +]> + + Retenção + <> + test 1test 2 + diff --git a/result/noent/ent9 b/result/noent/ent9 new file mode 100644 index 0000000..b930e4c --- /dev/null +++ b/result/noent/ent9 @@ -0,0 +1,61 @@ + +,,,"> +]> + + ,,, +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +

    WE need lot of garbage now to trigger the problem

    +
    ,,, +
    diff --git a/result/noent/ent_738805.xml b/result/noent/ent_738805.xml new file mode 100644 index 0000000..5e44a55 --- /dev/null +++ b/result/noent/ent_738805.xml @@ -0,0 +1,15 @@ + + + +]> + + + + +something should appear after colon: something +something should appear after colon: something +something should appear after colon: something +something should appear after colon: something + + 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 @@ + + +]> + + 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 @@ + + +]> + diff --git a/result/noent/intsubset2.xml b/result/noent/intsubset2.xml new file mode 100644 index 0000000..b103955 --- /dev/null +++ b/result/noent/intsubset2.xml @@ -0,0 +1,250 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]> + + 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 @@ + + 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 @@ + + + + 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 + + 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 @@ + + + + +]]> +then the replacement text for the entity "book" is: +La Peste: Albert Camus, +© 1947 Éditions Gallimard. &rights; + diff --git a/result/noent/japancrlf.xml b/result/noent/japancrlf.xml new file mode 100644 index 0000000..60b307c --- /dev/null +++ b/result/noent/japancrlf.xml @@ -0,0 +1,4 @@ + +<入力メッセージ xmlns="http://schemas.cordys.com/webapps/1.0/bpm/c8c8b82a-0ac0-3d19-01e2-bda74af9b826"> + + 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 @@ + + + + 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 @@ + + 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 @@ + + 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 @@ + + diff --git a/result/noent/ns5 b/result/noent/ns5 new file mode 100644 index 0000000..0afe4e2 --- /dev/null +++ b/result/noent/ns5 @@ -0,0 +1,4 @@ + + + + diff --git a/result/noent/ns6 b/result/noent/ns6 new file mode 100644 index 0000000..c971252 --- /dev/null +++ b/result/noent/ns6 @@ -0,0 +1,5 @@ + + + + + diff --git a/result/noent/ns7 b/result/noent/ns7 new file mode 100644 index 0000000..b5089e1 --- /dev/null +++ b/result/noent/ns7 @@ -0,0 +1,2 @@ + + diff --git a/result/noent/nsclean.xml b/result/noent/nsclean.xml new file mode 100644 index 0000000..8f1ea82 --- /dev/null +++ b/result/noent/nsclean.xml @@ -0,0 +1,5 @@ + +
    + + +
    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 @@ + + + + + + + + + + + + + + + + + + + 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 @@ + + + + + + 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 @@ + + + + + + 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 @@ + + + + rpm + 2.5 + 2 + i386 + Linux + Manhattan + Red Hat Software + Red Hat Software <bugs@redhat.com> + Utilities/System + Red Hat Package Manager + 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. + GPL + * Sun May 10 1998 Prospector System <bugs@redhat.com> + - translations modified for de, fr, tr + + rpm-2.5-2.src.rpm + ftp://ftp.redhat.com/pub/redhat/redhat-5.1/SRPMS + Sun May 10 14:52:32 1998 + 894826352 + 850599 + porky.redhat.com + + + rpm + + + + + /bin/sh + ld-linux.so.2 + libc.so.6 + libdb.so.2 + libz.so.1 + /bin/bash + /bin/sh + + + /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 + + + 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 @@ + + + + ncurses4 + 4.2 + 3 + i386 + Linux + DLD + delix Computer GmbH + Till Bubeck <bubeck@delix.de>, Ngo Than <than@delix.de> + Libraries + Bibliothek zur Ansteuerung von Terminals + 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. + GPL + ncurses4-4.2-3.src.rpm + Tue May 12 19:30:26 1998 + 895015826 + 1373513 + erdbeere.delix.de + + + ncurses4 + libpanel.so.4 + libncurses.so.4 + libmenu.so.4 + libform.so.4 + ncurses + + + /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 + + + 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 @@ + + + + + Slashdot:News for Nerds. Stuff that Matters. + http://slashdot.org/ + News for Nerds. Stuff that Matters + + + + Slashdot + http://slashdot.org/images/slashdotlg.gif + http://slashdot.org + + + + 100 Mbit/s on Fibre to the home + http://slashdot.org/articles/99/06/06/1440211.shtml + + + + Gimp 1.2 Preview + http://slashdot.org/articles/99/06/06/1438246.shtml + + + + Sony's AIBO robot Sold Out + http://slashdot.org/articles/99/06/06/1432256.shtml + + + + Ask Slashdot: Another Word for "Hacker"? + http://slashdot.org/askslashdot/99/06/05/1815225.shtml + + + + Corel Linux FAQ + http://slashdot.org/articles/99/06/05/1842218.shtml + + + + Upside downsides MP3.COM. + http://slashdot.org/articles/99/06/05/1558210.shtml + + + + 2 Terabits of Bandwidth + http://slashdot.org/articles/99/06/05/1554258.shtml + + + + Suppression of cold fusion research? + http://slashdot.org/articles/99/06/04/2313200.shtml + + + + California Gov. Halts Wage Info Sale + http://slashdot.org/articles/99/06/04/235256.shtml + + + + Red Hat Announces IPO + http://slashdot.org/articles/99/06/04/0849207.shtml + + 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 @@ + + + + 100 Mbit/s on Fibre to the home + http://slashdot.org/articles/99/06/06/1440211.shtml + + CmdrTaco + wouldn't-it-be-nice + internet + 20 +
    articles
    + topicinternet.jpg +
    + + Gimp 1.2 Preview + http://slashdot.org/articles/99/06/06/1438246.shtml + + CmdrTaco + stuff-to-read + gimp + 12 +
    articles
    + topicgimp.gif +
    + + Sony's AIBO robot Sold Out + http://slashdot.org/articles/99/06/06/1432256.shtml + + CmdrTaco + stuff-to-see + tech + 10 +
    articles
    + topictech2.jpg +
    + + Ask Slashdot: Another Word for "Hacker"? + http://slashdot.org/askslashdot/99/06/05/1815225.shtml + + Cliff + hacker-vs-cracker + news + 385 +
    askslashdot
    + topicnews.gif +
    + + Corel Linux FAQ + http://slashdot.org/articles/99/06/05/1842218.shtml + + CmdrTaco + stuff-to-read + corel + 164 +
    articles
    + topiccorel.gif +
    + + Upside downsides MP3.COM. + http://slashdot.org/articles/99/06/05/1558210.shtml + + CmdrTaco + stuff-to-think-about + music + 48 +
    articles
    + topicmusic.gif +
    + + 2 Terabits of Bandwidth + http://slashdot.org/articles/99/06/05/1554258.shtml + + CmdrTaco + faster-porn + internet + 66 +
    articles
    + topicinternet.jpg +
    + + Suppression of cold fusion research? + http://slashdot.org/articles/99/06/04/2313200.shtml + + Hemos + possibly-probably + science + 217 +
    articles
    + topicscience.gif +
    + + California Gov. Halts Wage Info Sale + http://slashdot.org/articles/99/06/04/235256.shtml + + Hemos + woo-hoo! + usa + 16 +
    articles
    + topicus.gif +
    + + Red Hat Announces IPO + http://slashdot.org/articles/99/06/04/0849207.shtml + + Justin + details-sketchy + redhat + 155 +
    articles
    + topicredhat.gif +
    +
    diff --git a/result/noent/slashdot16.xml b/result/noent/slashdot16.xml new file mode 100644 index 0000000..f6a7f2a Binary files /dev/null and b/result/noent/slashdot16.xml 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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 @@ + + + + + + + + + + + + + + + + + + + + + + Java Font definition:Dialog 0 + + + Java Font definition:Helvetica 0 + + + + this is text + + + + Java Font definition:Dialog 0 + + + Java Font definition:Helvetica 700 + + + + sadfsadfsad + + + + + + + + + + + Java Font definition:Dialog 700 + + + Java Font definition:Dialog 700 + + 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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 @@ + +my 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 @@ + +
    content diff --git a/result/noent/utf16bebom.xml b/result/noent/utf16bebom.xml new file mode 100644 index 0000000..3b5466d Binary files /dev/null and b/result/noent/utf16bebom.xml differ diff --git a/result/noent/utf16bom.xml b/result/noent/utf16bom.xml new file mode 100644 index 0000000..6ea296e Binary files /dev/null and b/result/noent/utf16bom.xml differ diff --git a/result/noent/utf16lebom.xml b/result/noent/utf16lebom.xml new file mode 100644 index 0000000..933640c Binary files /dev/null and b/result/noent/utf16lebom.xml 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 @@ + + 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 @@ + + + + + + + + + + + + + + + +

    If automatic testing failed, select Failed + + + + + .

    +
    + +
    diff --git a/result/noent/winblanks.xml b/result/noent/winblanks.xml new file mode 100644 index 0000000..0044aa2 --- /dev/null +++ b/result/noent/winblanks.xml @@ -0,0 +1,6 @@ + + + + + + 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 @@ + + + + +

    + Cinéma
    +

    + +
    +
    diff --git a/result/noent/xhtml1 b/result/noent/xhtml1 new file mode 100644 index 0000000..6c06a95 --- /dev/null +++ b/result/noent/xhtml1 @@ -0,0 +1,30 @@ + + + + + + Virtual Library + + + + +

    Moved to example.org.

    + + + foo + +

    + +

    coucou

    +

    salut

    + +

    test

    + +
    +
    Internet Engineering Task Force
    +
    An organization which establishes technical standards for the Internet
    +
    + + diff --git a/result/noent/xhtmlcomp b/result/noent/xhtmlcomp new file mode 100644 index 0000000..4ce634c --- /dev/null +++ b/result/noent/xhtmlcomp @@ -0,0 +1,7 @@ + + + + +

    a b

    + + 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 @@ + +An ampersand (&#38;) may be escaped + numerically (&#38;#38;) or with a general entity + (&amp;).

    "> +]> +

    An ampersand (&) may be escaped + numerically (&#38;) or with a general entity + (&amp;).

    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 @@ + + + +'> + +]> +This sample shows a error-prone method. diff --git a/result/ns b/result/ns new file mode 100644 index 0000000..94b927e --- /dev/null +++ b/result/ns @@ -0,0 +1,4 @@ + + + + diff --git a/result/ns.rde b/result/ns.rde new file mode 100644 index 0000000..513d135 --- /dev/null +++ b/result/ns.rde @@ -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.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/ns.sax2 b/result/ns.sax2 new file mode 100644 index 0000000..c615db3 --- /dev/null +++ b/result/ns.sax2 @@ -0,0 +1,11 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElementNs(diagram, dia, 'http://www.lysator.liu.se/~alla/dia/', 1, xmlns:dia='http://www.lysator.liu.se/~alla/dia/', 0, 0) +SAX.characters( + , 3) +SAX.startElementNs(diagramdata, dia, 'http://www.lysator.liu.se/~alla/dia/', 0, 1, 0, dia:testattr='test...', 4) +SAX.endElementNs(diagramdata, dia, 'http://www.lysator.liu.se/~alla/dia/') +SAX.characters( +, 1) +SAX.endElementNs(diagram, dia, 'http://www.lysator.liu.se/~alla/dia/') +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 @@ + + diff --git a/result/ns2.rde b/result/ns2.rde new file mode 100644 index 0000000..58ca0ac --- /dev/null +++ b/result/ns2.rde @@ -0,0 +1 @@ +0 1 dia:diagram 1 0 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/ns2.sax2 b/result/ns2.sax2 new file mode 100644 index 0000000..fc8d6f4 --- /dev/null +++ b/result/ns2.sax2 @@ -0,0 +1,5 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElementNs(diagram, dia, 'http://www.lysator.liu.se/~alla/dia/', 1, xmlns:dia='http://www.lysator.liu.se/~alla/dia/', 1, 0, dia:testattr='test...', 4) +SAX.endElementNs(diagram, dia, 'http://www.lysator.liu.se/~alla/dia/') +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 @@ + + diff --git a/result/ns3.rde b/result/ns3.rde new file mode 100644 index 0000000..58ca0ac --- /dev/null +++ b/result/ns3.rde @@ -0,0 +1 @@ +0 1 dia:diagram 1 0 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/ns3.sax2 b/result/ns3.sax2 new file mode 100644 index 0000000..fc8d6f4 --- /dev/null +++ b/result/ns3.sax2 @@ -0,0 +1,5 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElementNs(diagram, dia, 'http://www.lysator.liu.se/~alla/dia/', 1, xmlns:dia='http://www.lysator.liu.se/~alla/dia/', 1, 0, dia:testattr='test...', 4) +SAX.endElementNs(diagram, dia, 'http://www.lysator.liu.se/~alla/dia/') +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 @@ + + diff --git a/result/ns4.rde b/result/ns4.rde new file mode 100644 index 0000000..6f5dda7 --- /dev/null +++ b/result/ns4.rde @@ -0,0 +1 @@ +0 1 diagram 1 0 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/ns4.sax2 b/result/ns4.sax2 new file mode 100644 index 0000000..e31cc56 --- /dev/null +++ b/result/ns4.sax2 @@ -0,0 +1,5 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElementNs(diagram, NULL, NULL, 0, 4, 0, testattr='test...', 4, xml:lang='en" ...', 2, xml:link='simp...', 6, xml:space='pres...', 8) +SAX.endElementNs(diagram, NULL, NULL) +SAX.endDocument() diff --git a/result/ns5 b/result/ns5 new file mode 100644 index 0000000..0afe4e2 --- /dev/null +++ b/result/ns5 @@ -0,0 +1,4 @@ + + + + diff --git a/result/ns5.rde b/result/ns5.rde new file mode 100644 index 0000000..30ce196 --- /dev/null +++ b/result/ns5.rde @@ -0,0 +1,7 @@ +0 1 element 0 0 +1 14 #text 0 1 + +1 1 empty 1 0 +1 14 #text 0 1 + +0 15 element 0 0 diff --git a/result/ns5.rdr b/result/ns5.rdr new file mode 100644 index 0000000..30ce196 --- /dev/null +++ b/result/ns5.rdr @@ -0,0 +1,7 @@ +0 1 element 0 0 +1 14 #text 0 1 + +1 1 empty 1 0 +1 14 #text 0 1 + +0 15 element 0 0 diff --git a/result/ns5.sax b/result/ns5.sax new file mode 100644 index 0000000..e458bca --- /dev/null +++ b/result/ns5.sax @@ -0,0 +1,11 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElement(element, name='foo', xmlns:rng='http://example.org/ns/1', xmlns='http://example.org/ns/1') +SAX.characters( + , 3) +SAX.startElement(empty) +SAX.endElement(empty) +SAX.characters( +, 1) +SAX.endElement(element) +SAX.endDocument() diff --git a/result/ns5.sax2 b/result/ns5.sax2 new file mode 100644 index 0000000..a434d6b --- /dev/null +++ b/result/ns5.sax2 @@ -0,0 +1,11 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElementNs(element, NULL, 'http://example.org/ns/1', 2, xmlns:rng='http://example.org/ns/1', xmlns='http://example.org/ns/1', 1, 0, name='foo"...', 3) +SAX.characters( + , 3) +SAX.startElementNs(empty, NULL, 'http://example.org/ns/1', 0, 0, 0) +SAX.endElementNs(empty, NULL, 'http://example.org/ns/1') +SAX.characters( +, 1) +SAX.endElementNs(element, NULL, 'http://example.org/ns/1') +SAX.endDocument() diff --git a/result/ns6 b/result/ns6 new file mode 100644 index 0000000..c971252 --- /dev/null +++ b/result/ns6 @@ -0,0 +1,5 @@ + + + + + diff --git a/result/ns6.rde b/result/ns6.rde new file mode 100644 index 0000000..23a80ec --- /dev/null +++ b/result/ns6.rde @@ -0,0 +1,10 @@ +0 1 root 0 0 +1 14 #text 0 1 + +1 1 foo 1 0 +1 14 #text 0 1 + +1 1 bar 1 0 +1 14 #text 0 1 + +0 15 root 0 0 diff --git a/result/ns6.rdr b/result/ns6.rdr new file mode 100644 index 0000000..23a80ec --- /dev/null +++ b/result/ns6.rdr @@ -0,0 +1,10 @@ +0 1 root 0 0 +1 14 #text 0 1 + +1 1 foo 1 0 +1 14 #text 0 1 + +1 1 bar 1 0 +1 14 #text 0 1 + +0 15 root 0 0 diff --git a/result/ns6.sax b/result/ns6.sax new file mode 100644 index 0000000..a1405b1 --- /dev/null +++ b/result/ns6.sax @@ -0,0 +1,15 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElement(root) +SAX.characters( + , 3) +SAX.startElement(foo, xmlns='http://abc') +SAX.endElement(foo) +SAX.characters( + , 3) +SAX.startElement(bar) +SAX.endElement(bar) +SAX.characters( +, 1) +SAX.endElement(root) +SAX.endDocument() diff --git a/result/ns6.sax2 b/result/ns6.sax2 new file mode 100644 index 0000000..7b54552 --- /dev/null +++ b/result/ns6.sax2 @@ -0,0 +1,15 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElementNs(root, NULL, NULL, 0, 0, 0) +SAX.characters( + , 3) +SAX.startElementNs(foo, NULL, 'http://abc', 1, xmlns='http://abc', 0, 0) +SAX.endElementNs(foo, NULL, 'http://abc') +SAX.characters( + , 3) +SAX.startElementNs(bar, NULL, NULL, 0, 0, 0) +SAX.endElementNs(bar, NULL, NULL) +SAX.characters( +, 1) +SAX.endElementNs(root, NULL, NULL) +SAX.endDocument() diff --git a/result/ns7 b/result/ns7 new file mode 100644 index 0000000..b5089e1 --- /dev/null +++ b/result/ns7 @@ -0,0 +1,2 @@ + + diff --git a/result/ns7.rde b/result/ns7.rde new file mode 100644 index 0000000..16f5351 --- /dev/null +++ b/result/ns7.rde @@ -0,0 +1 @@ +0 1 xml:test 1 0 diff --git a/result/ns7.rdr b/result/ns7.rdr new file mode 100644 index 0000000..16f5351 --- /dev/null +++ b/result/ns7.rdr @@ -0,0 +1 @@ +0 1 xml:test 1 0 diff --git a/result/ns7.sax b/result/ns7.sax new file mode 100644 index 0000000..6020be9 --- /dev/null +++ b/result/ns7.sax @@ -0,0 +1,5 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElement(xml:test) +SAX.endElement(xml:test) +SAX.endDocument() diff --git a/result/ns7.sax2 b/result/ns7.sax2 new file mode 100644 index 0000000..2a2c714 --- /dev/null +++ b/result/ns7.sax2 @@ -0,0 +1,5 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElementNs(test, xml, 'http://www.w3.org/XML/1998/namespace', 0, 0, 0) +SAX.endElementNs(test, xml, 'http://www.w3.org/XML/1998/namespace') +SAX.endDocument() diff --git a/result/nsclean.xml b/result/nsclean.xml new file mode 100644 index 0000000..8f1ea82 --- /dev/null +++ b/result/nsclean.xml @@ -0,0 +1,5 @@ + +
    + + +
    diff --git a/result/nsclean.xml.rde b/result/nsclean.xml.rde new file mode 100644 index 0000000..c606593 --- /dev/null +++ b/result/nsclean.xml.rde @@ -0,0 +1,10 @@ +0 1 article 0 0 +1 14 #text 0 1 + +1 1 foop:content 0 0 +2 14 #text 0 1 + +1 15 foop:content 0 0 +1 14 #text 0 1 + +0 15 article 0 0 diff --git a/result/nsclean.xml.rdr b/result/nsclean.xml.rdr new file mode 100644 index 0000000..c606593 --- /dev/null +++ b/result/nsclean.xml.rdr @@ -0,0 +1,10 @@ +0 1 article 0 0 +1 14 #text 0 1 + +1 1 foop:content 0 0 +2 14 #text 0 1 + +1 15 foop:content 0 0 +1 14 #text 0 1 + +0 15 article 0 0 diff --git a/result/nsclean.xml.sax b/result/nsclean.xml.sax new file mode 100644 index 0000000..b01aeae --- /dev/null +++ b/result/nsclean.xml.sax @@ -0,0 +1,13 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElement(article, xmlns='tag:foofoofoofoofoofoofoofoo', xmlns:dc='http://purl.org/dc/elements/1.1/', xmlns:dcterms='http://purl.org/dc/terms/') +SAX.characters( +, 1) +SAX.startElement(foop:content, xmlns='http://www.w3.org/1999/xhtml', xmlns:foop='tag:foofoofoofoofoofoofoofoo') +SAX.characters( +, 1) +SAX.endElement(foop:content) +SAX.characters( +, 1) +SAX.endElement(article) +SAX.endDocument() diff --git a/result/nsclean.xml.sax2 b/result/nsclean.xml.sax2 new file mode 100644 index 0000000..d443e2b --- /dev/null +++ b/result/nsclean.xml.sax2 @@ -0,0 +1,13 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElementNs(article, NULL, 'tag:foofoofoofoofoofoofoofoo', 3, xmlns='tag:foofoofoofoofoofoofoofoo', xmlns:dc='http://purl.org/dc/elements/1.1/', xmlns:dcterms='http://purl.org/dc/terms/', 0, 0) +SAX.characters( +, 1) +SAX.startElementNs(content, foop, 'tag:foofoofoofoofoofoofoofoo', 2, xmlns='http://www.w3.org/1999/xhtml', xmlns:foop='tag:foofoofoofoofoofoofoofoo', 0, 0) +SAX.characters( +, 1) +SAX.endElementNs(content, foop, 'tag:foofoofoofoofoofoofoofoo') +SAX.characters( +, 1) +SAX.endElementNs(article, NULL, 'tag:foofoofoofoofoofoofoofoo') +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 @@ + + + + + + + + + + + + + + + + + + + diff --git a/result/p3p.rde b/result/p3p.rde new file mode 100644 index 0000000..0c01f50 --- /dev/null +++ b/result/p3p.rde @@ -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.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..e36629a --- /dev/null +++ b/result/p3p.sax @@ -0,0 +1,63 @@ +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.startElement(STATEMENT, action='read&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/p3p.sax2 b/result/p3p.sax2 new file mode 100644 index 0000000..e62ae6b --- /dev/null +++ b/result/p3p.sax2 @@ -0,0 +1,65 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElementNs(RDF, RDF, 'http://www.w3.org/TR/WD-rdf-syntax#', 2, xmlns:p3p='http://www.w3.org/TR/1998/WD-P3P10-syntax#proposal.DTD', xmlns:RDF='http://www.w3.org/TR/WD-rdf-syntax#', 0, 0) +SAX.characters( +, 1) +SAX.startElementNs(PROP, NULL, NULL, 0, 4, 0, realm='http...', 37, entity='Cool...', 11, agreeID='94df...', 16, assurance='http...', 22) +SAX.characters( + , 3) +SAX.startElementNs(USES, NULL, NULL, 0, 0, 0) +SAX.characters( + , 3) +SAX.startElementNs(STATEMENT, NULL, NULL, 0, 4, 0, purp='2,3"...', 3, recpnt='0" i...', 1, id='0" + ...', 1, consq='a si...', 37) +SAX.characters( + , 5) +SAX.startElementNs(WITH, NULL, NULL, 0, 0, 0) +SAX.startElementNs(PREFIX, NULL, NULL, 0, 1, 0, name='User...', 5) +SAX.characters( + , 6) +SAX.startElementNs(REF, NULL, NULL, 0, 1, 0, name='Name...', 10) +SAX.endElementNs(REF, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(REF, NULL, NULL, 0, 2, 0, name='Bdat...', 10, optional='1"/>...', 1) +SAX.endElementNs(REF, NULL, NULL) +SAX.characters( + , 6) +SAX.startElementNs(REF, NULL, NULL, 0, 1, 0, name='Gend...', 6) +SAX.endElementNs(REF, NULL, NULL) +SAX.characters( + , 5) +SAX.endElementNs(PREFIX, NULL, NULL) +SAX.endElementNs(WITH, NULL, NULL) +SAX.characters( + , 3) +SAX.endElementNs(STATEMENT, NULL, NULL) +SAX.characters( + , 3) +SAX.endElementNs(USES, NULL, NULL) +SAX.characters( + , 3) +SAX.startElementNs(USES, NULL, NULL, 0, 0, 0) +SAX.characters( + , 3) +SAX.startElementNs(STATEMENT, NULL, NULL, 0, 4, 0, action='read...', 14, purp='0" r...', 1, recpnt='0" i...', 1, id='1"> +...', 1) +SAX.characters( + , 5) +SAX.startElementNs(REF, NULL, NULL, 0, 1, 0, name='User...', 14) +SAX.endElementNs(REF, NULL, NULL) +SAX.characters( + , 3) +SAX.endElementNs(STATEMENT, NULL, NULL) +SAX.characters( + , 3) +SAX.endElementNs(USES, NULL, NULL) +SAX.characters( + , 3) +SAX.startElementNs(DISCLOSURE, NULL, NULL, 0, 3, 0, discURI='http...', 47, access='3" o...', 1, other='0,1"...', 3) +SAX.endElementNs(DISCLOSURE, NULL, NULL) +SAX.characters( +, 1) +SAX.endElementNs(PROP, NULL, NULL) +SAX.endElementNs(RDF, RDF, 'http://www.w3.org/TR/WD-rdf-syntax#') +SAX.endDocument() diff --git a/result/pattern/conj b/result/pattern/conj new file mode 100644 index 0000000..616450b --- /dev/null +++ b/result/pattern/conj @@ -0,0 +1,47 @@ +Node /a matches pattern a|b +Node /a/b matches pattern a|b +Node /a/b/c[1]/b matches pattern a|b +Node /a/b/c[2]/b matches pattern a|b +Node /a/b/c[2]/c/b matches pattern a|b +Node /a/c/b matches pattern a|b +Node /a matches pattern a|c +Node /a/b/c[1] matches pattern a|c +Node /a/b/c[2] matches pattern a|c +Node /a/b/c[2]/c matches pattern a|c +Node /a/c matches pattern a|c +Node /a/b matches pattern b|c +Node /a/b/c[1] matches pattern b|c +Node /a/b/c[1]/b matches pattern b|c +Node /a/b/c[2] matches pattern b|c +Node /a/b/c[2]/b matches pattern b|c +Node /a/b/c[2]/c matches pattern b|c +Node /a/b/c[2]/c/b matches pattern b|c +Node /a/c matches pattern b|c +Node /a/c/b matches pattern b|c +Node /a matches pattern a|b|c +Node /a/b matches pattern a|b|c +Node /a/b/c[1] matches pattern a|b|c +Node /a/b/c[1]/b matches pattern a|b|c +Node /a/b/c[2] matches pattern a|b|c +Node /a/b/c[2]/b matches pattern a|b|c +Node /a/b/c[2]/c matches pattern a|b|c +Node /a/b/c[2]/c/b matches pattern a|b|c +Node /a/c matches pattern a|b|c +Node /a/c/b matches pattern a|b|c +Node /a matches pattern /a|b +Node /a/b matches pattern /a|b +Node /a/b/c[1]/b matches pattern /a|b +Node /a/b/c[2]/b matches pattern /a|b +Node /a/b/c[2]/c/b matches pattern /a|b +Node /a/c/b matches pattern /a|b +Node /a matches pattern b|/a +Node /a/b matches pattern b|/a +Node /a/b/c[1]/b matches pattern b|/a +Node /a/b/c[2]/b matches pattern b|/a +Node /a/b/c[2]/c/b matches pattern b|/a +Node /a/c/b matches pattern b|/a +Node /a/b/c[1] matches pattern a//c|b//c +Node /a/b/c[2] matches pattern a//c|b//c +Node /a/b/c[2]/c matches pattern a//c|b//c +Node /a/c matches pattern a//c|b//c +Node /a matches pattern d|e|f|g|h|a diff --git a/result/pattern/multiple b/result/pattern/multiple new file mode 100644 index 0000000..e10390e --- /dev/null +++ b/result/pattern/multiple @@ -0,0 +1,91 @@ +Node /c/b[1]/a[1] matches pattern a +Node /c/b[1]/a[2] matches pattern a +Node /c/c/b/a[1] matches pattern a +Node /c/c/b/a[2] matches pattern a +Node /c/b[2]/a[1] matches pattern a +Node /c/b[2]/a[2] matches pattern a +Node /c/b[1] matches pattern b +Node /c/c/b matches pattern b +Node /c/b[2] matches pattern b +Node /c matches pattern c +Node /c/c matches pattern c +Node /c/b[1] matches pattern c/b +Node /c/c/b matches pattern c/b +Node /c/b[2] matches pattern c/b +Node /c/b[1]/a[1] matches pattern b/a +Node /c/b[1]/a[2] matches pattern b/a +Node /c/c/b/a[1] matches pattern b/a +Node /c/c/b/a[2] matches pattern b/a +Node /c/b[2]/a[1] matches pattern b/a +Node /c/b[2]/a[2] matches pattern b/a +Node /c/b[1]/a[1] matches pattern c/b/a +Node /c/b[1]/a[2] matches pattern c/b/a +Node /c/c/b/a[1] matches pattern c/b/a +Node /c/c/b/a[2] matches pattern c/b/a +Node /c/b[2]/a[1] matches pattern c/b/a +Node /c/b[2]/a[2] matches pattern c/b/a +Node /c/b[1]/a[1] matches pattern c//a +Node /c/b[1]/a[2] matches pattern c//a +Node /c/c/b/a[1] matches pattern c//a +Node /c/c/b/a[2] matches pattern c//a +Node /c/b[2]/a[1] matches pattern c//a +Node /c/b[2]/a[2] matches pattern c//a +Node /c/b[1] matches pattern c//b +Node /c/c/b matches pattern c//b +Node /c/b[2] matches pattern c//b +Node /c/b[1]/a[1] matches pattern b//a +Node /c/b[1]/a[2] matches pattern b//a +Node /c/c/b/a[1] matches pattern b//a +Node /c/c/b/a[2] matches pattern b//a +Node /c/b[2]/a[1] matches pattern b//a +Node /c/b[2]/a[2] matches pattern b//a +Node /c/b[1]/a[1] matches pattern c//b//a +Node /c/b[1]/a[2] matches pattern c//b//a +Node /c/c/b/a[1] matches pattern c//b//a +Node /c/c/b/a[2] matches pattern c//b//a +Node /c/b[2]/a[1] matches pattern c//b//a +Node /c/b[2]/a[2] matches pattern c//b//a +Node /c/b[1]/a[1] matches pattern c/b//a +Node /c/b[1]/a[2] matches pattern c/b//a +Node /c/c/b/a[1] matches pattern c/b//a +Node /c/c/b/a[2] matches pattern c/b//a +Node /c/b[2]/a[1] matches pattern c/b//a +Node /c/b[2]/a[2] matches pattern c/b//a +Node /c/b[1]/a[1] matches pattern c//b/a +Node /c/b[1]/a[2] matches pattern c//b/a +Node /c/c/b/a[1] matches pattern c//b/a +Node /c/c/b/a[2] matches pattern c//b/a +Node /c/b[2]/a[1] matches pattern c//b/a +Node /c/b[2]/a[2] matches pattern c//b/a +Node /c matches pattern /c +Node /c/b[1] matches pattern /c/b +Node /c/b[2] matches pattern /c/b +Node /c/b[1]/a[1] matches pattern /c/b/a +Node /c/b[1]/a[2] matches pattern /c/b/a +Node /c/b[2]/a[1] matches pattern /c/b/a +Node /c/b[2]/a[2] matches pattern /c/b/a +Node /c/b[1]/a[1] matches pattern /c//a +Node /c/b[1]/a[2] matches pattern /c//a +Node /c/c/b/a[1] matches pattern /c//a +Node /c/c/b/a[2] matches pattern /c//a +Node /c/b[2]/a[1] matches pattern /c//a +Node /c/b[2]/a[2] matches pattern /c//a +Node /c/b[1] matches pattern /c//b +Node /c/c/b matches pattern /c//b +Node /c/b[2] matches pattern /c//b +Node /c/b[1]/a[1] matches pattern /c//b//a +Node /c/b[1]/a[2] matches pattern /c//b//a +Node /c/c/b/a[1] matches pattern /c//b//a +Node /c/c/b/a[2] matches pattern /c//b//a +Node /c/b[2]/a[1] matches pattern /c//b//a +Node /c/b[2]/a[2] matches pattern /c//b//a +Node /c/b[1]/a[1] matches pattern /c/b//a +Node /c/b[1]/a[2] matches pattern /c/b//a +Node /c/b[2]/a[1] matches pattern /c/b//a +Node /c/b[2]/a[2] matches pattern /c/b//a +Node /c/b[1]/a[1] matches pattern /c//b/a +Node /c/b[1]/a[2] matches pattern /c//b/a +Node /c/c/b/a[1] matches pattern /c//b/a +Node /c/c/b/a[2] matches pattern /c//b/a +Node /c/b[2]/a[1] matches pattern /c//b/a +Node /c/b[2]/a[2] matches pattern /c//b/a diff --git a/result/pattern/namespaces b/result/pattern/namespaces new file mode 100644 index 0000000..159f847 --- /dev/null +++ b/result/pattern/namespaces @@ -0,0 +1,20 @@ +Node /a matches pattern //a +Node /a/b:b/a matches pattern //a +Node /a/*[4]/a matches pattern //a +Node /a/a:a matches pattern //a:a +Node /a/b:b/a/a:a matches pattern //a:a +Node /a/*[4] matches pattern //a:a +Node /a/c:a matches pattern //a:a +Node /a/b matches pattern //b +Node /a/a:a/b:b matches pattern //b:b +Node /a/b:b matches pattern //b:b +Node /a/b:b/a/a:a/b:b matches pattern //b:b +Node /a/b:b/a matches pattern /a//a +Node /a/*[4]/a matches pattern /a//a +Node /a/b matches pattern /a/b +Node /a/a:a matches pattern /a/a:a +Node /a/*[4] matches pattern /a/a:a +Node /a/c:a matches pattern /a/a:a +Node /a/a:a matches pattern /a/c:a +Node /a/*[4] matches pattern /a/c:a +Node /a/c:a matches pattern /a/c:a diff --git a/result/pattern/simple b/result/pattern/simple new file mode 100644 index 0000000..5710b5c --- /dev/null +++ b/result/pattern/simple @@ -0,0 +1,12 @@ +Node /a matches pattern a +Node /a/b matches pattern b +Node /a/b matches pattern b +Node /a matches pattern /a +Node /a/b matches pattern a/b +Node /a/b/c matches pattern a/b/c +Node /a matches pattern //a +Node /a/b matches pattern //b +Node /a/b/c matches pattern //c +Node /a/b matches pattern a//b +Node /a/b/c matches pattern a//c +Node /a/b/c matches pattern b//c 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 @@ + + + + + + diff --git a/result/pi.xml.rde b/result/pi.xml.rde new file mode 100644 index 0000000..cdc8a8d --- /dev/null +++ b/result/pi.xml.rde @@ -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.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/pi.xml.sax2 b/result/pi.xml.sax2 new file mode 100644 index 0000000..a4490ea --- /dev/null +++ b/result/pi.xml.sax2 @@ -0,0 +1,17 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElementNs(doc, NULL, NULL, 0, 0, 0) +SAX.characters( +, 1) +SAX.processingInstruction(document-start, doc) +SAX.characters( +, 1) +SAX.startElementNs(empty, NULL, NULL, 0, 0, 0) +SAX.endElementNs(empty, NULL, NULL) +SAX.characters( +, 1) +SAX.processingInstruction(document-end, doc) +SAX.characters( +, 1) +SAX.endElementNs(doc, NULL, NULL) +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 @@ + + + + + + diff --git a/result/pi2.xml.rde b/result/pi2.xml.rde new file mode 100644 index 0000000..52b3b9d --- /dev/null +++ b/result/pi2.xml.rde @@ -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.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/pi2.xml.sax2 b/result/pi2.xml.sax2 new file mode 100644 index 0000000..1e6caad --- /dev/null +++ b/result/pi2.xml.sax2 @@ -0,0 +1,13 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.processingInstruction(document-start, doc) +SAX.startElementNs(doc, NULL, NULL, 0, 0, 0) +SAX.characters( +, 1) +SAX.startElementNs(empty, NULL, NULL, 0, 0, 0) +SAX.endElementNs(empty, NULL, NULL) +SAX.characters( +, 1) +SAX.endElementNs(doc, NULL, NULL) +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 @@ + + + + rpm + 2.5 + 2 + i386 + Linux + Manhattan + Red Hat Software + Red Hat Software <bugs@redhat.com> + Utilities/System + Red Hat Package Manager + 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. + GPL + * Sun May 10 1998 Prospector System <bugs@redhat.com> + - translations modified for de, fr, tr + + rpm-2.5-2.src.rpm + ftp://ftp.redhat.com/pub/redhat/redhat-5.1/SRPMS + Sun May 10 14:52:32 1998 + 894826352 + 850599 + porky.redhat.com + + + rpm + + + + + /bin/sh + ld-linux.so.2 + libc.so.6 + libdb.so.2 + libz.so.1 + /bin/bash + /bin/sh + + + /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 + + + diff --git a/result/rdf1.rde b/result/rdf1.rde new file mode 100644 index 0000000..b34399c --- /dev/null +++ b/result/rdf1.rde @@ -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 +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 + - 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.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 +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 + - 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..e235973 --- /dev/null +++ b/result/rdf1.sax @@ -0,0 +1,186 @@ +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.characters(<, 1) +SAX.characters(bugs@redhat.com, 15) +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.characters(<, 1) +SAX.characters(bugs@redhat.com, 15) +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/rdf1.sax2 b/result/rdf1.sax2 new file mode 100644 index 0000000..24822e1 --- /dev/null +++ b/result/rdf1.sax2 @@ -0,0 +1,186 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElementNs(RDF, RDF, 'http://www.w3.org/TR/WD-rdf-syntax#', 2, xmlns:RPM='http://www.rpm.org/', xmlns:RDF='http://www.w3.org/TR/WD-rdf-syntax#', 0, 0) +SAX.characters( + , 3) +SAX.startElementNs(Description, RDF, 'http://www.w3.org/TR/WD-rdf-syntax#', 0, 1, 0, HREF='ftp:...', 78) +SAX.characters( + , 5) +SAX.startElementNs(Name, RPM, 'http://www.rpm.org/', 0, 0, 0) +SAX.characters(rpm, 3) +SAX.endElementNs(Name, RPM, 'http://www.rpm.org/') +SAX.characters( + , 5) +SAX.startElementNs(Version, RPM, 'http://www.rpm.org/', 0, 0, 0) +SAX.characters(2.5, 3) +SAX.endElementNs(Version, RPM, 'http://www.rpm.org/') +SAX.characters( + , 5) +SAX.startElementNs(Release, RPM, 'http://www.rpm.org/', 0, 0, 0) +SAX.characters(2, 1) +SAX.endElementNs(Release, RPM, 'http://www.rpm.org/') +SAX.characters( + , 5) +SAX.startElementNs(Arch, RPM, 'http://www.rpm.org/', 0, 0, 0) +SAX.characters(i386, 4) +SAX.endElementNs(Arch, RPM, 'http://www.rpm.org/') +SAX.characters( + , 5) +SAX.startElementNs(Os, RPM, 'http://www.rpm.org/', 0, 0, 0) +SAX.characters(Linux, 5) +SAX.endElementNs(Os, RPM, 'http://www.rpm.org/') +SAX.characters( + , 5) +SAX.startElementNs(Distribution, RPM, 'http://www.rpm.org/', 0, 0, 0) +SAX.characters(Manhattan , 10) +SAX.endElementNs(Distribution, RPM, 'http://www.rpm.org/') +SAX.characters( + , 5) +SAX.startElementNs(Vendor, RPM, 'http://www.rpm.org/', 0, 0, 0) +SAX.characters(Red Hat Software, 16) +SAX.endElementNs(Vendor, RPM, 'http://www.rpm.org/') +SAX.characters( + , 5) +SAX.startElementNs(Packager, RPM, 'http://www.rpm.org/', 0, 0, 0) +SAX.characters(Red Hat Software , 17) +SAX.characters(<, 1) +SAX.characters(bugs@redhat.com, 15) +SAX.characters(>, 1) +SAX.endElementNs(Packager, RPM, 'http://www.rpm.org/') +SAX.characters( + , 5) +SAX.startElementNs(Group, RPM, 'http://www.rpm.org/', 0, 0, 0) +SAX.characters(Utilities/System, 16) +SAX.endElementNs(Group, RPM, 'http://www.rpm.org/') +SAX.characters( + , 5) +SAX.startElementNs(Summary, RPM, 'http://www.rpm.org/', 0, 0, 0) +SAX.characters(Red Hat Package Manager, 23) +SAX.endElementNs(Summary, RPM, 'http://www.rpm.org/') +SAX.characters( + , 5) +SAX.startElementNs(Description, RPM, 'http://www.rpm.org/', 0, 0, 0) +SAX.characters(RPM is a powerful package mana, 248) +SAX.endElementNs(Description, RPM, 'http://www.rpm.org/') +SAX.characters( + , 5) +SAX.startElementNs(Copyright, RPM, 'http://www.rpm.org/', 0, 0, 0) +SAX.characters(GPL, 3) +SAX.endElementNs(Copyright, RPM, 'http://www.rpm.org/') +SAX.characters( + , 5) +SAX.startElementNs(Changelog, RPM, 'http://www.rpm.org/', 0, 0, 0) +SAX.characters(* Sun May 10 1998 Prospector S, 36) +SAX.characters(<, 1) +SAX.characters(bugs@redhat.com, 15) +SAX.characters(>, 1) +SAX.characters( + - translations modified for, 42) +SAX.endElementNs(Changelog, RPM, 'http://www.rpm.org/') +SAX.characters( + , 5) +SAX.startElementNs(Sources, RPM, 'http://www.rpm.org/', 0, 0, 0) +SAX.characters(rpm-2.5-2.src.rpm, 17) +SAX.endElementNs(Sources, RPM, 'http://www.rpm.org/') +SAX.characters( + , 5) +SAX.startElementNs(SourcesFtp, RPM, 'http://www.rpm.org/', 0, 0, 0) +SAX.characters(ftp://ftp.redhat.com/pub/redha, 48) +SAX.endElementNs(SourcesFtp, RPM, 'http://www.rpm.org/') +SAX.characters( + , 5) +SAX.startElementNs(BuildDate, RPM, 'http://www.rpm.org/', 0, 0, 0) +SAX.characters(Sun May 10 14:52:32 1998, 24) +SAX.endElementNs(BuildDate, RPM, 'http://www.rpm.org/') +SAX.characters( + , 5) +SAX.startElementNs(Date, RPM, 'http://www.rpm.org/', 0, 0, 0) +SAX.characters(894826352, 9) +SAX.endElementNs(Date, RPM, 'http://www.rpm.org/') +SAX.characters( + , 5) +SAX.startElementNs(Size, RPM, 'http://www.rpm.org/', 0, 0, 0) +SAX.characters(850599, 6) +SAX.endElementNs(Size, RPM, 'http://www.rpm.org/') +SAX.characters( + , 5) +SAX.startElementNs(BuildHost, RPM, 'http://www.rpm.org/', 0, 0, 0) +SAX.characters(porky.redhat.com, 16) +SAX.endElementNs(BuildHost, RPM, 'http://www.rpm.org/') +SAX.characters( + , 5) +SAX.startElementNs(Provides, RPM, 'http://www.rpm.org/', 0, 0, 0) +SAX.characters( + , 7) +SAX.startElementNs(Bag, RDF, 'http://www.w3.org/TR/WD-rdf-syntax#', 0, 0, 0) +SAX.characters( + , 9) +SAX.startElementNs(Resource, RPM, 'http://www.rpm.org/', 0, 0, 0) +SAX.characters(rpm, 3) +SAX.endElementNs(Resource, RPM, 'http://www.rpm.org/') +SAX.characters( + , 7) +SAX.endElementNs(Bag, RDF, 'http://www.w3.org/TR/WD-rdf-syntax#') +SAX.characters( + , 5) +SAX.endElementNs(Provides, RPM, 'http://www.rpm.org/') +SAX.characters( + , 5) +SAX.startElementNs(Requires, RPM, 'http://www.rpm.org/', 0, 0, 0) +SAX.characters( + , 7) +SAX.startElementNs(Bag, RDF, 'http://www.w3.org/TR/WD-rdf-syntax#', 0, 0, 0) +SAX.characters( + , 9) +SAX.startElementNs(Resource, RPM, 'http://www.rpm.org/', 0, 0, 0) +SAX.characters(/bin/sh, 7) +SAX.endElementNs(Resource, RPM, 'http://www.rpm.org/') +SAX.characters( + , 9) +SAX.startElementNs(Resource, RPM, 'http://www.rpm.org/', 0, 0, 0) +SAX.characters(ld-linux.so.2, 13) +SAX.endElementNs(Resource, RPM, 'http://www.rpm.org/') +SAX.characters( + , 9) +SAX.startElementNs(Resource, RPM, 'http://www.rpm.org/', 0, 0, 0) +SAX.characters(libc.so.6, 9) +SAX.endElementNs(Resource, RPM, 'http://www.rpm.org/') +SAX.characters( + , 9) +SAX.startElementNs(Resource, RPM, 'http://www.rpm.org/', 0, 0, 0) +SAX.characters(libdb.so.2, 10) +SAX.endElementNs(Resource, RPM, 'http://www.rpm.org/') +SAX.characters( + , 9) +SAX.startElementNs(Resource, RPM, 'http://www.rpm.org/', 0, 0, 0) +SAX.characters(libz.so.1, 9) +SAX.endElementNs(Resource, RPM, 'http://www.rpm.org/') +SAX.characters( + , 9) +SAX.startElementNs(Resource, RPM, 'http://www.rpm.org/', 0, 0, 0) +SAX.characters(/bin/bash, 9) +SAX.endElementNs(Resource, RPM, 'http://www.rpm.org/') +SAX.characters( + , 9) +SAX.startElementNs(Resource, RPM, 'http://www.rpm.org/', 0, 0, 0) +SAX.characters(/bin/sh, 7) +SAX.endElementNs(Resource, RPM, 'http://www.rpm.org/') +SAX.characters( + , 7) +SAX.endElementNs(Bag, RDF, 'http://www.w3.org/TR/WD-rdf-syntax#') +SAX.characters( + , 5) +SAX.endElementNs(Requires, RPM, 'http://www.rpm.org/') +SAX.characters( + , 5) +SAX.startElementNs(Files, RPM, 'http://www.rpm.org/', 0, 0, 0) +SAX.characters(/bin/rpm +/usr/bin/find-provide, 885) +SAX.endElementNs(Files, RPM, 'http://www.rpm.org/') +SAX.characters( + , 3) +SAX.endElementNs(Description, RDF, 'http://www.w3.org/TR/WD-rdf-syntax#') +SAX.characters( +, 1) +SAX.endElementNs(RDF, RDF, 'http://www.w3.org/TR/WD-rdf-syntax#') +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 @@ + + + + ncurses4 + 4.2 + 3 + i386 + Linux + DLD + delix Computer GmbH + Till Bubeck <bubeck@delix.de>, Ngo Than <than@delix.de> + Libraries + Bibliothek zur Ansteuerung von Terminals + 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. + GPL + ncurses4-4.2-3.src.rpm + Tue May 12 19:30:26 1998 + 895015826 + 1373513 + erdbeere.delix.de + + + ncurses4 + libpanel.so.4 + libncurses.so.4 + libmenu.so.4 + libform.so.4 + ncurses + + + /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 + + + diff --git a/result/rdf2.rde b/result/rdf2.rde new file mode 100644 index 0000000..15e5e97 --- /dev/null +++ b/result/rdf2.rde @@ -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 , Ngo Than +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.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 , Ngo Than +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..f6686c1 --- /dev/null +++ b/result/rdf2.sax @@ -0,0 +1,191 @@ +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.characters(<, 1) +SAX.characters(bubeck@delix.de, 15) +SAX.characters(>, 1) +SAX.characters(, Ngo Than , 11) +SAX.characters(<, 1) +SAX.characters(than@delix.de, 13) +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.characters(', 1) +SAX.characters(new curses, 10) +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/rdf2.sax2 b/result/rdf2.sax2 new file mode 100644 index 0000000..388174f --- /dev/null +++ b/result/rdf2.sax2 @@ -0,0 +1,191 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElementNs(RDF, RDF, 'http://www.w3.org/TR/WD-rdf-syntax#', 2, xmlns:RDF='http://www.w3.org/TR/WD-rdf-syntax#', xmlns:RPM='http://www.rpm.org/', 0, 0) +SAX.characters( + , 3) +SAX.startElementNs(Description, RDF, 'http://www.w3.org/TR/WD-rdf-syntax#', 0, 1, 0, about='ftp:...', 71) +SAX.characters( + , 5) +SAX.startElementNs(Name, RPM, 'http://www.rpm.org/', 0, 0, 0) +SAX.characters(ncurses4, 8) +SAX.endElementNs(Name, RPM, 'http://www.rpm.org/') +SAX.characters( + , 5) +SAX.startElementNs(Version, RPM, 'http://www.rpm.org/', 0, 0, 0) +SAX.characters(4.2, 3) +SAX.endElementNs(Version, RPM, 'http://www.rpm.org/') +SAX.characters( + , 5) +SAX.startElementNs(Release, RPM, 'http://www.rpm.org/', 0, 0, 0) +SAX.characters(3, 1) +SAX.endElementNs(Release, RPM, 'http://www.rpm.org/') +SAX.characters( + , 5) +SAX.startElementNs(Arch, RPM, 'http://www.rpm.org/', 0, 0, 0) +SAX.characters(i386, 4) +SAX.endElementNs(Arch, RPM, 'http://www.rpm.org/') +SAX.characters( + , 5) +SAX.startElementNs(Os, RPM, 'http://www.rpm.org/', 0, 0, 0) +SAX.characters(Linux, 5) +SAX.endElementNs(Os, RPM, 'http://www.rpm.org/') +SAX.characters( + , 5) +SAX.startElementNs(Distribution, RPM, 'http://www.rpm.org/', 0, 0, 0) +SAX.characters(DLD, 3) +SAX.endElementNs(Distribution, RPM, 'http://www.rpm.org/') +SAX.characters( + , 5) +SAX.startElementNs(Vendor, RPM, 'http://www.rpm.org/', 0, 0, 0) +SAX.characters(delix Computer GmbH, 19) +SAX.endElementNs(Vendor, RPM, 'http://www.rpm.org/') +SAX.characters( + , 5) +SAX.startElementNs(Packager, RPM, 'http://www.rpm.org/', 0, 0, 0) +SAX.characters(Till Bubeck , 12) +SAX.characters(<, 1) +SAX.characters(bubeck@delix.de, 15) +SAX.characters(>, 1) +SAX.characters(, Ngo Than , 11) +SAX.characters(<, 1) +SAX.characters(than@delix.de, 13) +SAX.characters(>, 1) +SAX.endElementNs(Packager, RPM, 'http://www.rpm.org/') +SAX.characters( + , 5) +SAX.startElementNs(Group, RPM, 'http://www.rpm.org/', 0, 0, 0) +SAX.characters(Libraries, 9) +SAX.endElementNs(Group, RPM, 'http://www.rpm.org/') +SAX.characters( + , 5) +SAX.startElementNs(Summary, RPM, 'http://www.rpm.org/', 0, 0, 0) +SAX.characters(Bibliothek zur Ansteuerung von, 40) +SAX.endElementNs(Summary, RPM, 'http://www.rpm.org/') +SAX.characters( + , 5) +SAX.startElementNs(Description, RPM, 'http://www.rpm.org/', 0, 0, 0) +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.characters(', 1) +SAX.characters(new curses, 10) +SAX.characters(', 1) +SAX.characters( (ncurses) Variante und ist de, 51) +SAX.characters(ü, 2) +SAX.characters(r die klassische Curses-Librar, 70) +SAX.endElementNs(Description, RPM, 'http://www.rpm.org/') +SAX.characters( + , 5) +SAX.startElementNs(Copyright, RPM, 'http://www.rpm.org/', 0, 0, 0) +SAX.characters(GPL, 3) +SAX.endElementNs(Copyright, RPM, 'http://www.rpm.org/') +SAX.characters( + , 5) +SAX.startElementNs(Sources, RPM, 'http://www.rpm.org/', 0, 0, 0) +SAX.characters(ncurses4-4.2-3.src.rpm, 22) +SAX.endElementNs(Sources, RPM, 'http://www.rpm.org/') +SAX.characters( + , 5) +SAX.startElementNs(BuildDate, RPM, 'http://www.rpm.org/', 0, 0, 0) +SAX.characters(Tue May 12 19:30:26 1998, 24) +SAX.endElementNs(BuildDate, RPM, 'http://www.rpm.org/') +SAX.characters( + , 5) +SAX.startElementNs(Date, RPM, 'http://www.rpm.org/', 0, 0, 0) +SAX.characters(895015826, 9) +SAX.endElementNs(Date, RPM, 'http://www.rpm.org/') +SAX.characters( + , 5) +SAX.startElementNs(Size, RPM, 'http://www.rpm.org/', 0, 0, 0) +SAX.characters(1373513, 7) +SAX.endElementNs(Size, RPM, 'http://www.rpm.org/') +SAX.characters( + , 5) +SAX.startElementNs(BuildHost, RPM, 'http://www.rpm.org/', 0, 0, 0) +SAX.characters(erdbeere.delix.de, 17) +SAX.endElementNs(BuildHost, RPM, 'http://www.rpm.org/') +SAX.characters( + , 5) +SAX.startElementNs(Provides, RPM, 'http://www.rpm.org/', 0, 0, 0) +SAX.characters( + , 7) +SAX.startElementNs(Bag, RDF, 'http://www.w3.org/TR/WD-rdf-syntax#', 0, 0, 0) +SAX.characters( + , 9) +SAX.startElementNs(Resource, RPM, 'http://www.rpm.org/', 0, 1, 0, href='../....', 37) +SAX.characters(ncurses4, 8) +SAX.endElementNs(Resource, RPM, 'http://www.rpm.org/') +SAX.characters( + , 9) +SAX.startElementNs(Resource, RPM, 'http://www.rpm.org/', 0, 1, 0, href='../....', 42) +SAX.characters(libpanel.so.4, 13) +SAX.endElementNs(Resource, RPM, 'http://www.rpm.org/') +SAX.characters( + , 9) +SAX.startElementNs(Resource, RPM, 'http://www.rpm.org/', 0, 1, 0, href='../....', 44) +SAX.characters(libncurses.so.4, 15) +SAX.endElementNs(Resource, RPM, 'http://www.rpm.org/') +SAX.characters( + , 9) +SAX.startElementNs(Resource, RPM, 'http://www.rpm.org/', 0, 1, 0, href='../....', 41) +SAX.characters(libmenu.so.4, 12) +SAX.endElementNs(Resource, RPM, 'http://www.rpm.org/') +SAX.characters( + , 9) +SAX.startElementNs(Resource, RPM, 'http://www.rpm.org/', 0, 1, 0, href='../....', 41) +SAX.characters(libform.so.4, 12) +SAX.endElementNs(Resource, RPM, 'http://www.rpm.org/') +SAX.characters( + , 9) +SAX.startElementNs(Resource, RPM, 'http://www.rpm.org/', 0, 1, 0, href='../....', 36) +SAX.characters(ncurses, 7) +SAX.endElementNs(Resource, RPM, 'http://www.rpm.org/') +SAX.characters( + , 7) +SAX.endElementNs(Bag, RDF, 'http://www.w3.org/TR/WD-rdf-syntax#') +SAX.characters( + , 5) +SAX.endElementNs(Provides, RPM, 'http://www.rpm.org/') +SAX.characters( + , 5) +SAX.startElementNs(Files, RPM, 'http://www.rpm.org/', 0, 0, 0) +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.endElementNs(Files, RPM, 'http://www.rpm.org/') +SAX.characters( + , 3) +SAX.endElementNs(Description, RDF, 'http://www.w3.org/TR/WD-rdf-syntax#') +SAX.characters( +, 1) +SAX.endElementNs(RDF, RDF, 'http://www.w3.org/TR/WD-rdf-syntax#') +SAX.endDocument() diff --git a/result/regexp/branch b/result/regexp/branch new file mode 100644 index 0000000..dd703ac --- /dev/null +++ b/result/regexp/branch @@ -0,0 +1,14 @@ +Regexp: a|b(d|e(g|h|i)|f)|c +a: Ok +c: Ok +bd: Ok +bf: Ok +beg: Ok +beh: Ok +bei: Ok +b: Fail +be: Fail +bi: Fail +f: Fail +ab: Fail +ac: Fail diff --git a/result/regexp/bug316338 b/result/regexp/bug316338 new file mode 100644 index 0000000..1cd1ac0 --- /dev/null +++ b/result/regexp/bug316338 @@ -0,0 +1,20 @@ +Regexp: (((C|c)(([\s]*\-?[0-9]+(\.[0-9]+)?((e|E)\-?[0-9]+)?){3})+[\s]*))+ +C 433: Ok +C 433 12: Fail +C 433 123: Ok +C 433 123 456: Ok +C 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12: Fail +Regexp: (((C|c)(([\s]+\-?[0-9]+(\.[0-9]+)?((e|E)\-?[0-9]+)?){3})+[\s]*))+ +C 433: Fail +C 433 12: Fail +C 433 123: Fail +C 433 123 456: Ok +C 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12: Fail +Regexp: (((C|c)(([\s]+\-?[0-9]+(\.[0-9]+)?[\s]*,[\s]*\-?[0-9]+(\.[0-9]+)?){3})+[\s]*))+ +C 433: Fail +C 433 12: Fail +C 433 123: Fail +C 433 123 456: Fail +C 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12: Fail +Regexp: (((M|m)([\s]+\-?[0-9]+(\.[0-9]+)?((e|E)\-?[0-9]+)?[\s]*,[\s]*\-?[0-9]+(\.[0-9]+)?((e|E)\-?[0-9]+)?)[\s]*)|((L|l)([\s]+\-?[0-9]+(\.[0-9]+)?((e|E)\-?[0-9]+)?[\s]*,[\s]*\-?[0-9]+(\.[0-9]+)?((e|E)\-?[0-9]+)?)+[\s]*)|((H|h)([\s]+\-?[0-9]+(\.[0-9]+)?((e|E)\-?[0-9]+)?)+[\s]*)|((V|v)([\s]+\-?[0-9]+(\.[0-9]+)?((e|E)\-?[0-9]+)?)+[\s]*)|((C|c)(([\s]+\-?[0-9]+(\.[0-9]+)?((e|E)\-?[0-9]+)?[\s]*,[\s]*\-?[0-9]+(\.[0-9]+)?((e|E)\-?[0-9]+)?){3})+[\s]*)|((Q|q)(([\s]+\-?[0-9]+(\.[0-9]+)?((e|E)\-?[0-9]+)?[\s]*,[\s]*\-?[0-9]+(\.[0-9]+)?((e|E)\-?[0-9]+)?){2})+[\s]*)|((S|s)(([\s]+\-?[0-9]+(\.[0-9]+)?((e|E)\-?[0-9]+)?[\s]*,[\s]*\-?[0-9]+(\.[0-9]+)?((e|E)\-?[0-9]+)?){2})+[\s]*)|((A|a)([\s]+\-?[0-9]+(\.[0-9]+)?((e|E)\-?[0-9]+)?[\s]*,[\s]*\-?[0-9]+(\.[0-9]+)?((e|E)\-?[0-9]+)?[\s]*\-?[0-9]+(\.[0-9]+)?((e|E)\-?[0-9]+)?[\s]+[0-1][\s]+[0-1][\s]+\-?[0-9]+(\.[0-9]+)?((e|E)\-?[0-9]+)?[\s]*,[\s]*\-?[0-9]+(\.[0-9]+)?((e|E)\-?[0-9]+)?)+[\s]*)|((Z|z)[\s]*))* +M 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12: Fail diff --git a/result/regexp/bug420596 b/result/regexp/bug420596 new file mode 100644 index 0000000..d23b303 --- /dev/null +++ b/result/regexp/bug420596 @@ -0,0 +1,10 @@ +Regexp: (\+|-)(0[0-9]|1[0-1]) ++01: Ok +-01: Ok ++10: Ok +-10: Ok +Regexp: [+-](0[0-9]|1[0-1]) ++01: Ok +-01: Ok ++10: Ok +-10: Ok 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..28d6164 --- /dev/null +++ b/result/regexp/hard @@ -0,0 +1,12 @@ +Regexp: ((a|b|\p{Nd}){1,2}|aaa|bbbb){1,2} +bab: Ok +aaca: Fail +aaabbbb: Ok +a0b: Ok +aa0aaa: Fail +b0aaa: Ok +Regexp: (\d{1,3}\.){3}\d{1,3} +1.2.3.4: Ok +1.22.333.44: Ok +1.2.3: Fail +1..2.3: Fail 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/ranges2 b/result/regexp/ranges2 new file mode 100644 index 0000000..8305732 --- /dev/null +++ b/result/regexp/ranges2 @@ -0,0 +1,14 @@ +Regexp: (a|b{0,3}){0,1} +a: Ok +aa: Fail +b: Ok +bb: Ok +bbb: Ok +bbbb: Fail +ab: Fail +ba: Fail +Regexp: ([0-9]{0,3}|([0-9]{0}|[0-9]{0,3})){0,3} +0: Ok +00: Ok +123: Ok +abc: 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/302836_0 b/result/relaxng/302836_0 new file mode 100644 index 0000000..e69de29 diff --git a/result/relaxng/302836_0.err b/result/relaxng/302836_0.err new file mode 100644 index 0000000..46ae43c --- /dev/null +++ b/result/relaxng/302836_0.err @@ -0,0 +1 @@ +./test/relaxng/302836_0.xml validates diff --git a/result/relaxng/302836_err b/result/relaxng/302836_err new file mode 100644 index 0000000..fab2d78 --- /dev/null +++ b/result/relaxng/302836_err @@ -0,0 +1 @@ +./test/relaxng/302836.rng validates diff --git a/result/relaxng/302836_valid b/result/relaxng/302836_valid new file mode 100644 index 0000000..e69de29 diff --git a/result/relaxng/307377_0 b/result/relaxng/307377_0 new file mode 100644 index 0000000..e69de29 diff --git a/result/relaxng/307377_0.err b/result/relaxng/307377_0.err new file mode 100644 index 0000000..1f465bb --- /dev/null +++ b/result/relaxng/307377_0.err @@ -0,0 +1,2 @@ +./test/relaxng/307377_0.xml:1: element number: Relax-NG validity error : Element number failed to validate attributes +./test/relaxng/307377_0.xml fails to validate diff --git a/result/relaxng/307377_1 b/result/relaxng/307377_1 new file mode 100644 index 0000000..e69de29 diff --git a/result/relaxng/307377_1.err b/result/relaxng/307377_1.err new file mode 100644 index 0000000..abfb533 --- /dev/null +++ b/result/relaxng/307377_1.err @@ -0,0 +1,3 @@ +./test/relaxng/307377_1.xml:1: element number: Relax-NG validity error : Extra data in list: a +./test/relaxng/307377_1.xml:1: element number: Relax-NG validity error : Element number failed to validate attributes +./test/relaxng/307377_1.xml fails to validate diff --git a/result/relaxng/307377_2 b/result/relaxng/307377_2 new file mode 100644 index 0000000..e69de29 diff --git a/result/relaxng/307377_2.err b/result/relaxng/307377_2.err new file mode 100644 index 0000000..158ea42 --- /dev/null +++ b/result/relaxng/307377_2.err @@ -0,0 +1 @@ +./test/relaxng/307377_2.xml validates diff --git a/result/relaxng/307377_err b/result/relaxng/307377_err new file mode 100644 index 0000000..5705eab --- /dev/null +++ b/result/relaxng/307377_err @@ -0,0 +1 @@ +./test/relaxng/307377.rng validates diff --git a/result/relaxng/307377_valid b/result/relaxng/307377_valid new file mode 100644 index 0000000..e69de29 diff --git a/result/relaxng/492317_0 b/result/relaxng/492317_0 new file mode 100644 index 0000000..e69de29 diff --git a/result/relaxng/492317_0.err b/result/relaxng/492317_0.err new file mode 100644 index 0000000..9b8db15 --- /dev/null +++ b/result/relaxng/492317_0.err @@ -0,0 +1 @@ +./test/relaxng/492317_0.xml validates diff --git a/result/relaxng/492317_1 b/result/relaxng/492317_1 new file mode 100644 index 0000000..e69de29 diff --git a/result/relaxng/492317_1.err b/result/relaxng/492317_1.err new file mode 100644 index 0000000..177ee7b --- /dev/null +++ b/result/relaxng/492317_1.err @@ -0,0 +1 @@ +./test/relaxng/492317_1.xml validates diff --git a/result/relaxng/492317_2 b/result/relaxng/492317_2 new file mode 100644 index 0000000..e69de29 diff --git a/result/relaxng/492317_2.err b/result/relaxng/492317_2.err new file mode 100644 index 0000000..e8b22e7 --- /dev/null +++ b/result/relaxng/492317_2.err @@ -0,0 +1,3 @@ +./test/relaxng/492317_2.xml:2: element child: Relax-NG validity error : Element child failed to validate attributes +./test/relaxng/492317_2.xml:1: element root: Relax-NG validity error : Element root failed to validate content +./test/relaxng/492317_2.xml fails to validate diff --git a/result/relaxng/492317_err b/result/relaxng/492317_err new file mode 100644 index 0000000..1f07539 --- /dev/null +++ b/result/relaxng/492317_err @@ -0,0 +1 @@ +./test/relaxng/492317.rng validates diff --git a/result/relaxng/492317_valid b/result/relaxng/492317_valid new file mode 100644 index 0000000..e69de29 diff --git a/result/relaxng/558452_0 b/result/relaxng/558452_0 new file mode 100644 index 0000000..e69de29 diff --git a/result/relaxng/558452_0.err b/result/relaxng/558452_0.err new file mode 100644 index 0000000..fecc3e9 --- /dev/null +++ b/result/relaxng/558452_0.err @@ -0,0 +1 @@ +./test/relaxng/558452_0.xml validates diff --git a/result/relaxng/558452_1 b/result/relaxng/558452_1 new file mode 100644 index 0000000..e69de29 diff --git a/result/relaxng/558452_1.err b/result/relaxng/558452_1.err new file mode 100644 index 0000000..1e225be --- /dev/null +++ b/result/relaxng/558452_1.err @@ -0,0 +1,2 @@ +./test/relaxng/558452_1.xml:2: element doc: Relax-NG validity error : Expecting an element , got nothing +./test/relaxng/558452_1.xml fails to validate diff --git a/result/relaxng/558452_2 b/result/relaxng/558452_2 new file mode 100644 index 0000000..e69de29 diff --git a/result/relaxng/558452_2.err b/result/relaxng/558452_2.err new file mode 100644 index 0000000..d48287c --- /dev/null +++ b/result/relaxng/558452_2.err @@ -0,0 +1 @@ +./test/relaxng/558452_2.xml validates diff --git a/result/relaxng/558452_3 b/result/relaxng/558452_3 new file mode 100644 index 0000000..e69de29 diff --git a/result/relaxng/558452_3.err b/result/relaxng/558452_3.err new file mode 100644 index 0000000..0d33cdb --- /dev/null +++ b/result/relaxng/558452_3.err @@ -0,0 +1 @@ +./test/relaxng/558452_3.xml validates diff --git a/result/relaxng/558452_4 b/result/relaxng/558452_4 new file mode 100644 index 0000000..e69de29 diff --git a/result/relaxng/558452_4.err b/result/relaxng/558452_4.err new file mode 100644 index 0000000..22e12fa --- /dev/null +++ b/result/relaxng/558452_4.err @@ -0,0 +1,2 @@ +./test/relaxng/558452_4.xml:6: element elem: Relax-NG validity error : Did not expect element elem there +./test/relaxng/558452_4.xml fails to validate diff --git a/result/relaxng/558452_err b/result/relaxng/558452_err new file mode 100644 index 0000000..b162846 --- /dev/null +++ b/result/relaxng/558452_err @@ -0,0 +1 @@ +./test/relaxng/558452.rng validates diff --git a/result/relaxng/558452_valid b/result/relaxng/558452_valid new file mode 100644 index 0000000..e69de29 diff --git a/result/relaxng/565219_0 b/result/relaxng/565219_0 new file mode 100644 index 0000000..e69de29 diff --git a/result/relaxng/565219_0.err b/result/relaxng/565219_0.err new file mode 100644 index 0000000..e3f73fa --- /dev/null +++ b/result/relaxng/565219_0.err @@ -0,0 +1,2 @@ +./test/relaxng/565219_0.xml:1: element foo: Relax-NG validity error : Element foo has wrong namespace: expecting http://bar.com/ +./test/relaxng/565219_0.xml fails to validate diff --git a/result/relaxng/565219_1 b/result/relaxng/565219_1 new file mode 100644 index 0000000..e69de29 diff --git a/result/relaxng/565219_1.err b/result/relaxng/565219_1.err new file mode 100644 index 0000000..2999bba --- /dev/null +++ b/result/relaxng/565219_1.err @@ -0,0 +1 @@ +./test/relaxng/565219_1.xml validates diff --git a/result/relaxng/565219_2 b/result/relaxng/565219_2 new file mode 100644 index 0000000..e69de29 diff --git a/result/relaxng/565219_2.err b/result/relaxng/565219_2.err new file mode 100644 index 0000000..7a997d3 --- /dev/null +++ b/result/relaxng/565219_2.err @@ -0,0 +1,2 @@ +./test/relaxng/565219_2.xml:1: element foo: Relax-NG validity error : Element foo has wrong namespace: expecting http://bar.com/ +./test/relaxng/565219_2.xml fails to validate diff --git a/result/relaxng/565219_err b/result/relaxng/565219_err new file mode 100644 index 0000000..c43e67c --- /dev/null +++ b/result/relaxng/565219_err @@ -0,0 +1 @@ +./test/relaxng/565219.rng validates diff --git a/result/relaxng/565219_valid b/result/relaxng/565219_valid new file mode 100644 index 0000000..e69de29 diff --git a/result/relaxng/595792-ext_err b/result/relaxng/595792-ext_err new file mode 100644 index 0000000..092fdbd --- /dev/null +++ b/result/relaxng/595792-ext_err @@ -0,0 +1 @@ +./test/relaxng/595792-ext.rng validates diff --git a/result/relaxng/595792-ext_valid b/result/relaxng/595792-ext_valid new file mode 100644 index 0000000..e69de29 diff --git a/result/relaxng/595792_0 b/result/relaxng/595792_0 new file mode 100644 index 0000000..e69de29 diff --git a/result/relaxng/595792_0.err b/result/relaxng/595792_0.err new file mode 100644 index 0000000..abd73cd --- /dev/null +++ b/result/relaxng/595792_0.err @@ -0,0 +1 @@ +./test/relaxng/595792_0.xml validates diff --git a/result/relaxng/595792_err b/result/relaxng/595792_err new file mode 100644 index 0000000..e9f3192 --- /dev/null +++ b/result/relaxng/595792_err @@ -0,0 +1 @@ +./test/relaxng/595792.rng validates diff --git a/result/relaxng/595792_valid b/result/relaxng/595792_valid new file mode 100644 index 0000000..e69de29 diff --git a/result/relaxng/710744_1 b/result/relaxng/710744_1 new file mode 100644 index 0000000..e69de29 diff --git a/result/relaxng/710744_1.err b/result/relaxng/710744_1.err new file mode 100644 index 0000000..77437eb --- /dev/null +++ b/result/relaxng/710744_1.err @@ -0,0 +1 @@ +./test/relaxng/710744_1.xml validates diff --git a/result/relaxng/710744_2 b/result/relaxng/710744_2 new file mode 100644 index 0000000..e69de29 diff --git a/result/relaxng/710744_2.err b/result/relaxng/710744_2.err new file mode 100644 index 0000000..ee8d8ac --- /dev/null +++ b/result/relaxng/710744_2.err @@ -0,0 +1,2 @@ +./test/relaxng/710744_2.xml:3: element test: Relax-NG validity error : Invalid attribute foo for element test +./test/relaxng/710744_2.xml fails to validate diff --git a/result/relaxng/710744_err b/result/relaxng/710744_err new file mode 100644 index 0000000..54f0226 --- /dev/null +++ b/result/relaxng/710744_err @@ -0,0 +1 @@ +./test/relaxng/710744.rng validates diff --git a/result/relaxng/710744_valid b/result/relaxng/710744_valid new file mode 100644 index 0000000..e69de29 diff --git a/result/relaxng/OpenDocumentSub_0 b/result/relaxng/OpenDocumentSub_0 new file mode 100644 index 0000000..e69de29 diff --git a/result/relaxng/OpenDocumentSub_0.err b/result/relaxng/OpenDocumentSub_0.err new file mode 100644 index 0000000..d1c6917 --- /dev/null +++ b/result/relaxng/OpenDocumentSub_0.err @@ -0,0 +1 @@ +./test/relaxng/OpenDocumentSub_0.xml validates diff --git a/result/relaxng/OpenDocumentSub_err b/result/relaxng/OpenDocumentSub_err new file mode 100644 index 0000000..941d6c4 --- /dev/null +++ b/result/relaxng/OpenDocumentSub_err @@ -0,0 +1 @@ +./test/relaxng/OpenDocumentSub.rng validates diff --git a/result/relaxng/OpenDocumentSub_valid b/result/relaxng/OpenDocumentSub_valid new file mode 100644 index 0000000..e69de29 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 diff --git a/result/relaxng/choice0_0 b/result/relaxng/choice0_0 new file mode 100644 index 0000000..e69de29 diff --git a/result/relaxng/choice0_0.err b/result/relaxng/choice0_0.err new file mode 100644 index 0000000..5198fa7 --- /dev/null +++ b/result/relaxng/choice0_0.err @@ -0,0 +1 @@ +./test/relaxng/choice0_0.xml validates diff --git a/result/relaxng/choice0_1 b/result/relaxng/choice0_1 new file mode 100644 index 0000000..e69de29 diff --git a/result/relaxng/choice0_1.err b/result/relaxng/choice0_1.err new file mode 100644 index 0000000..51214ba --- /dev/null +++ b/result/relaxng/choice0_1.err @@ -0,0 +1 @@ +./test/relaxng/choice0_1.xml validates diff --git a/result/relaxng/choice0_2 b/result/relaxng/choice0_2 new file mode 100644 index 0000000..e69de29 diff --git a/result/relaxng/choice0_2.err b/result/relaxng/choice0_2.err new file mode 100644 index 0000000..19bd3cc --- /dev/null +++ b/result/relaxng/choice0_2.err @@ -0,0 +1 @@ +./test/relaxng/choice0_2.xml validates diff --git a/result/relaxng/choice0_3 b/result/relaxng/choice0_3 new file mode 100644 index 0000000..e69de29 diff --git a/result/relaxng/choice0_3.err b/result/relaxng/choice0_3.err new file mode 100644 index 0000000..c82345f --- /dev/null +++ b/result/relaxng/choice0_3.err @@ -0,0 +1 @@ +./test/relaxng/choice0_3.xml validates diff --git a/result/relaxng/choice0_4 b/result/relaxng/choice0_4 new file mode 100644 index 0000000..e69de29 diff --git a/result/relaxng/choice0_4.err b/result/relaxng/choice0_4.err new file mode 100644 index 0000000..dca145b --- /dev/null +++ b/result/relaxng/choice0_4.err @@ -0,0 +1,2 @@ +./test/relaxng/choice0_4.xml:1: element device: Relax-NG validity error : Element device failed to validate content +./test/relaxng/choice0_4.xml fails to validate diff --git a/result/relaxng/choice0_5 b/result/relaxng/choice0_5 new file mode 100644 index 0000000..e69de29 diff --git a/result/relaxng/choice0_5.err b/result/relaxng/choice0_5.err new file mode 100644 index 0000000..a8dd1c9 --- /dev/null +++ b/result/relaxng/choice0_5.err @@ -0,0 +1,2 @@ +./test/relaxng/choice0_5.xml:1: element device: Relax-NG validity error : Element device failed to validate content +./test/relaxng/choice0_5.xml fails to validate diff --git a/result/relaxng/choice0_6 b/result/relaxng/choice0_6 new file mode 100644 index 0000000..e69de29 diff --git a/result/relaxng/choice0_6.err b/result/relaxng/choice0_6.err new file mode 100644 index 0000000..4facb03 --- /dev/null +++ b/result/relaxng/choice0_6.err @@ -0,0 +1,2 @@ +./test/relaxng/choice0_6.xml:1: element device: Relax-NG validity error : Element device failed to validate content +./test/relaxng/choice0_6.xml fails to validate diff --git a/result/relaxng/choice0_7 b/result/relaxng/choice0_7 new file mode 100644 index 0000000..e69de29 diff --git a/result/relaxng/choice0_7.err b/result/relaxng/choice0_7.err new file mode 100644 index 0000000..89b9e32 --- /dev/null +++ b/result/relaxng/choice0_7.err @@ -0,0 +1,3 @@ +./test/relaxng/choice0_7.xml:1: element device: Relax-NG validity error : Did not expect element unknown-element there +./test/relaxng/choice0_7.xml:1: element device: Relax-NG validity error : Element device failed to validate content +./test/relaxng/choice0_7.xml fails to validate diff --git a/result/relaxng/choice0_8 b/result/relaxng/choice0_8 new file mode 100644 index 0000000..e69de29 diff --git a/result/relaxng/choice0_8.err b/result/relaxng/choice0_8.err new file mode 100644 index 0000000..7094ecc --- /dev/null +++ b/result/relaxng/choice0_8.err @@ -0,0 +1,3 @@ +./test/relaxng/choice0_8.xml:1: element device: Relax-NG validity error : Did not expect element unknown-element there +./test/relaxng/choice0_8.xml:1: element device: Relax-NG validity error : Element device failed to validate content +./test/relaxng/choice0_8.xml fails to validate diff --git a/result/relaxng/choice0_err b/result/relaxng/choice0_err new file mode 100644 index 0000000..cf12431 --- /dev/null +++ b/result/relaxng/choice0_err @@ -0,0 +1 @@ +./test/relaxng/choice0.rng validates diff --git a/result/relaxng/choice0_valid b/result/relaxng/choice0_valid new file mode 100644 index 0000000..e69de29 diff --git a/result/relaxng/compare0_0 b/result/relaxng/compare0_0 new file mode 100644 index 0000000..e69de29 diff --git a/result/relaxng/compare0_0.err b/result/relaxng/compare0_0.err new file mode 100644 index 0000000..9328f27 --- /dev/null +++ b/result/relaxng/compare0_0.err @@ -0,0 +1,3 @@ +./test/relaxng/compare0_0.xml:2: element number: Relax-NG validity error : failed to compare type integer +./test/relaxng/compare0_0.xml:2: element number: Relax-NG validity error : Element number failed to validate attributes +./test/relaxng/compare0_0.xml fails to validate diff --git a/result/relaxng/compare0_err b/result/relaxng/compare0_err new file mode 100644 index 0000000..543d734 --- /dev/null +++ b/result/relaxng/compare0_err @@ -0,0 +1 @@ +./test/relaxng/compare0.rng validates diff --git a/result/relaxng/compare0_valid b/result/relaxng/compare0_valid new file mode 100644 index 0000000..e69de29 diff --git a/result/relaxng/comps_0 b/result/relaxng/comps_0 new file mode 100644 index 0000000..e69de29 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 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 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 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 diff --git a/result/relaxng/docbook_0 b/result/relaxng/docbook_0 new file mode 100644 index 0000000..e69de29 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 diff --git a/result/relaxng/empty0_0 b/result/relaxng/empty0_0 new file mode 100644 index 0000000..e69de29 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 diff --git a/result/relaxng/empty1_0 b/result/relaxng/empty1_0 new file mode 100644 index 0000000..e69de29 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 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 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 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 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 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 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 diff --git a/result/relaxng/libvirt_0 b/result/relaxng/libvirt_0 new file mode 100644 index 0000000..e69de29 diff --git a/result/relaxng/libvirt_0.err b/result/relaxng/libvirt_0.err new file mode 100644 index 0000000..29535b8 --- /dev/null +++ b/result/relaxng/libvirt_0.err @@ -0,0 +1 @@ +./test/relaxng/libvirt_0.xml validates diff --git a/result/relaxng/libvirt_err b/result/relaxng/libvirt_err new file mode 100644 index 0000000..4acf3ed --- /dev/null +++ b/result/relaxng/libvirt_err @@ -0,0 +1 @@ +./test/relaxng/libvirt.rng validates diff --git a/result/relaxng/libvirt_valid b/result/relaxng/libvirt_valid new file mode 100644 index 0000000..e69de29 diff --git a/result/relaxng/list_0 b/result/relaxng/list_0 new file mode 100644 index 0000000..e69de29 diff --git a/result/relaxng/list_0.err b/result/relaxng/list_0.err new file mode 100644 index 0000000..5c8ca7c --- /dev/null +++ b/result/relaxng/list_0.err @@ -0,0 +1 @@ +./test/relaxng/list_0.xml validates diff --git a/result/relaxng/list_1 b/result/relaxng/list_1 new file mode 100644 index 0000000..e69de29 diff --git a/result/relaxng/list_1.err b/result/relaxng/list_1.err new file mode 100644 index 0000000..3ae35ae --- /dev/null +++ b/result/relaxng/list_1.err @@ -0,0 +1,2 @@ +./test/relaxng/list_1.xml:1: element elem1: Relax-NG validity error : Element elem1 failed to validate attributes +./test/relaxng/list_1.xml fails to validate diff --git a/result/relaxng/list_err b/result/relaxng/list_err new file mode 100644 index 0000000..748e21b --- /dev/null +++ b/result/relaxng/list_err @@ -0,0 +1 @@ +./test/relaxng/list.rng validates diff --git a/result/relaxng/list_valid b/result/relaxng/list_valid new file mode 100644 index 0000000..e69de29 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 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 diff --git a/result/relaxng/pattern3_1 b/result/relaxng/pattern3_1 new file mode 100644 index 0000000..e69de29 diff --git a/result/relaxng/pattern3_1.err b/result/relaxng/pattern3_1.err new file mode 100644 index 0000000..b1a9803 --- /dev/null +++ b/result/relaxng/pattern3_1.err @@ -0,0 +1 @@ +./test/relaxng/pattern3_1.xml validates 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 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 diff --git a/result/relaxng/spec1_1 b/result/relaxng/spec1_1 new file mode 100644 index 0000000..e69de29 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 diff --git a/result/relaxng/spec_0 b/result/relaxng/spec_0 new file mode 100644 index 0000000..e69de29 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 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 diff --git a/result/relaxng/tutor10_10_1 b/result/relaxng/tutor10_10_1 new file mode 100644 index 0000000..e69de29 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 diff --git a/result/relaxng/tutor10_1_1 b/result/relaxng/tutor10_1_1 new file mode 100644 index 0000000..e69de29 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 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 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 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 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 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 diff --git a/result/relaxng/tutor10_2_1 b/result/relaxng/tutor10_2_1 new file mode 100644 index 0000000..e69de29 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 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 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 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 diff --git a/result/relaxng/tutor10_3_1 b/result/relaxng/tutor10_3_1 new file mode 100644 index 0000000..e69de29 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 diff --git a/result/relaxng/tutor10_4_1 b/result/relaxng/tutor10_4_1 new file mode 100644 index 0000000..e69de29 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 diff --git a/result/relaxng/tutor10_5_1 b/result/relaxng/tutor10_5_1 new file mode 100644 index 0000000..e69de29 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 diff --git a/result/relaxng/tutor10_6_1 b/result/relaxng/tutor10_6_1 new file mode 100644 index 0000000..e69de29 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 diff --git a/result/relaxng/tutor10_7_1 b/result/relaxng/tutor10_7_1 new file mode 100644 index 0000000..e69de29 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 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 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 diff --git a/result/relaxng/tutor10_8_1 b/result/relaxng/tutor10_8_1 new file mode 100644 index 0000000..e69de29 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 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 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 diff --git a/result/relaxng/tutor10_9_1 b/result/relaxng/tutor10_9_1 new file mode 100644 index 0000000..e69de29 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 diff --git a/result/relaxng/tutor11_1_1 b/result/relaxng/tutor11_1_1 new file mode 100644 index 0000000..e69de29 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 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 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 diff --git a/result/relaxng/tutor11_2_1 b/result/relaxng/tutor11_2_1 new file mode 100644 index 0000000..e69de29 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 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 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 diff --git a/result/relaxng/tutor11_3_1 b/result/relaxng/tutor11_3_1 new file mode 100644 index 0000000..e69de29 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 diff --git a/result/relaxng/tutor11_4_1 b/result/relaxng/tutor11_4_1 new file mode 100644 index 0000000..e69de29 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 diff --git a/result/relaxng/tutor12_1_1 b/result/relaxng/tutor12_1_1 new file mode 100644 index 0000000..e69de29 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 diff --git a/result/relaxng/tutor13_1_1 b/result/relaxng/tutor13_1_1 new file mode 100644 index 0000000..e69de29 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 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 diff --git a/result/relaxng/tutor1_1_1 b/result/relaxng/tutor1_1_1 new file mode 100644 index 0000000..e69de29 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 diff --git a/result/relaxng/tutor1_2_1 b/result/relaxng/tutor1_2_1 new file mode 100644 index 0000000..e69de29 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 diff --git a/result/relaxng/tutor1_3_1 b/result/relaxng/tutor1_3_1 new file mode 100644 index 0000000..e69de29 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 diff --git a/result/relaxng/tutor1_4_1 b/result/relaxng/tutor1_4_1 new file mode 100644 index 0000000..e69de29 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 diff --git a/result/relaxng/tutor2_1_1 b/result/relaxng/tutor2_1_1 new file mode 100644 index 0000000..e69de29 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 diff --git a/result/relaxng/tutor3_1_1 b/result/relaxng/tutor3_1_1 new file mode 100644 index 0000000..e69de29 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 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 diff --git a/result/relaxng/tutor3_2_1 b/result/relaxng/tutor3_2_1 new file mode 100644 index 0000000..e69de29 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 diff --git a/result/relaxng/tutor3_3_1 b/result/relaxng/tutor3_3_1 new file mode 100644 index 0000000..e69de29 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 diff --git a/result/relaxng/tutor3_4_1 b/result/relaxng/tutor3_4_1 new file mode 100644 index 0000000..e69de29 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 diff --git a/result/relaxng/tutor3_5_1 b/result/relaxng/tutor3_5_1 new file mode 100644 index 0000000..e69de29 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 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 diff --git a/result/relaxng/tutor3_6_1 b/result/relaxng/tutor3_6_1 new file mode 100644 index 0000000..e69de29 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 diff --git a/result/relaxng/tutor3_7_1 b/result/relaxng/tutor3_7_1 new file mode 100644 index 0000000..e69de29 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 diff --git a/result/relaxng/tutor3_8_1 b/result/relaxng/tutor3_8_1 new file mode 100644 index 0000000..e69de29 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 diff --git a/result/relaxng/tutor3_9_1 b/result/relaxng/tutor3_9_1 new file mode 100644 index 0000000..e69de29 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 diff --git a/result/relaxng/tutor4_1_1 b/result/relaxng/tutor4_1_1 new file mode 100644 index 0000000..e69de29 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 diff --git a/result/relaxng/tutor4_2_1 b/result/relaxng/tutor4_2_1 new file mode 100644 index 0000000..e69de29 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 diff --git a/result/relaxng/tutor4_3_1 b/result/relaxng/tutor4_3_1 new file mode 100644 index 0000000..e69de29 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 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 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 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 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 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 diff --git a/result/relaxng/tutor4_4_1 b/result/relaxng/tutor4_4_1 new file mode 100644 index 0000000..e69de29 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 diff --git a/result/relaxng/tutor5_1_1 b/result/relaxng/tutor5_1_1 new file mode 100644 index 0000000..e69de29 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 diff --git a/result/relaxng/tutor5_2_1 b/result/relaxng/tutor5_2_1 new file mode 100644 index 0000000..e69de29 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 diff --git a/result/relaxng/tutor5_3_1 b/result/relaxng/tutor5_3_1 new file mode 100644 index 0000000..e69de29 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 diff --git a/result/relaxng/tutor5_4_1 b/result/relaxng/tutor5_4_1 new file mode 100644 index 0000000..e69de29 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 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 diff --git a/result/relaxng/tutor6_1_1 b/result/relaxng/tutor6_1_1 new file mode 100644 index 0000000..e69de29 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 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 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 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 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 diff --git a/result/relaxng/tutor6_2_1 b/result/relaxng/tutor6_2_1 new file mode 100644 index 0000000..e69de29 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 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 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 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 diff --git a/result/relaxng/tutor6_3_1 b/result/relaxng/tutor6_3_1 new file mode 100644 index 0000000..e69de29 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 diff --git a/result/relaxng/tutor7_1_1 b/result/relaxng/tutor7_1_1 new file mode 100644 index 0000000..e69de29 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 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 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 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 diff --git a/result/relaxng/tutor7_2_1 b/result/relaxng/tutor7_2_1 new file mode 100644 index 0000000..e69de29 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 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 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 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 diff --git a/result/relaxng/tutor7_3_1 b/result/relaxng/tutor7_3_1 new file mode 100644 index 0000000..e69de29 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 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 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 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 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 diff --git a/result/relaxng/tutor8_1_1 b/result/relaxng/tutor8_1_1 new file mode 100644 index 0000000..e69de29 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 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 diff --git a/result/relaxng/tutor8_2_1 b/result/relaxng/tutor8_2_1 new file mode 100644 index 0000000..e69de29 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 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 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 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 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 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 diff --git a/result/relaxng/tutor8_3_1 b/result/relaxng/tutor8_3_1 new file mode 100644 index 0000000..e69de29 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 diff --git a/result/relaxng/tutor9_10_1 b/result/relaxng/tutor9_10_1 new file mode 100644 index 0000000..e69de29 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 diff --git a/result/relaxng/tutor9_11_1 b/result/relaxng/tutor9_11_1 new file mode 100644 index 0000000..e69de29 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 diff --git a/result/relaxng/tutor9_12_1 b/result/relaxng/tutor9_12_1 new file mode 100644 index 0000000..e69de29 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 diff --git a/result/relaxng/tutor9_1_1 b/result/relaxng/tutor9_1_1 new file mode 100644 index 0000000..e69de29 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 diff --git a/result/relaxng/tutor9_2_1 b/result/relaxng/tutor9_2_1 new file mode 100644 index 0000000..e69de29 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 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 diff --git a/result/relaxng/tutor9_3_1 b/result/relaxng/tutor9_3_1 new file mode 100644 index 0000000..e69de29 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 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 diff --git a/result/relaxng/tutor9_4_1 b/result/relaxng/tutor9_4_1 new file mode 100644 index 0000000..e69de29 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 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 diff --git a/result/relaxng/tutor9_5_1 b/result/relaxng/tutor9_5_1 new file mode 100644 index 0000000..e69de29 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 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 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 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 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/result/relaxng/tutor9_6_1 b/result/relaxng/tutor9_6_1 new file mode 100644 index 0000000..e69de29 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 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 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 diff --git a/result/relaxng/tutor9_7_1 b/result/relaxng/tutor9_7_1 new file mode 100644 index 0000000..e69de29 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 diff --git a/result/relaxng/tutor9_8_1 b/result/relaxng/tutor9_8_1 new file mode 100644 index 0000000..e69de29 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 diff --git a/result/relaxng/tutor9_9_1 b/result/relaxng/tutor9_9_1 new file mode 100644 index 0000000..e69de29 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 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 diff --git a/result/schemas/570702_0_0 b/result/schemas/570702_0_0 new file mode 100644 index 0000000..41716e7 --- /dev/null +++ b/result/schemas/570702_0_0 @@ -0,0 +1 @@ +./test/schemas/570702_0.xml validates diff --git a/result/schemas/570702_0_0.err b/result/schemas/570702_0_0.err new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/579746_0_0 b/result/schemas/579746_0_0 new file mode 100644 index 0000000..c9a24f2 --- /dev/null +++ b/result/schemas/579746_0_0 @@ -0,0 +1 @@ +./test/schemas/579746_0.xml validates diff --git a/result/schemas/579746_0_0.err b/result/schemas/579746_0_0.err new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/579746_0_1 b/result/schemas/579746_0_1 new file mode 100644 index 0000000..8e3d39a --- /dev/null +++ b/result/schemas/579746_0_1 @@ -0,0 +1 @@ +./test/schemas/579746_1.xml validates diff --git a/result/schemas/579746_0_1.err b/result/schemas/579746_0_1.err new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/579746_0_2 b/result/schemas/579746_0_2 new file mode 100644 index 0000000..a11eaf1 --- /dev/null +++ b/result/schemas/579746_0_2 @@ -0,0 +1 @@ +./test/schemas/579746_2.xml validates diff --git a/result/schemas/579746_0_2.err b/result/schemas/579746_0_2.err new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/579746_0_3 b/result/schemas/579746_0_3 new file mode 100644 index 0000000..cf06bc5 --- /dev/null +++ b/result/schemas/579746_0_3 @@ -0,0 +1 @@ +./test/schemas/579746_3.xml fails to validate diff --git a/result/schemas/579746_0_3.err b/result/schemas/579746_0_3.err new file mode 100644 index 0000000..5e4c25e --- /dev/null +++ b/result/schemas/579746_0_3.err @@ -0,0 +1 @@ +./test/schemas/579746_3.xml:5: element customer: Schemas validity error : Element 'customer': This element is not expected. diff --git a/result/schemas/579746_0_4 b/result/schemas/579746_0_4 new file mode 100644 index 0000000..4763001 --- /dev/null +++ b/result/schemas/579746_0_4 @@ -0,0 +1 @@ +./test/schemas/579746_4.xml validates diff --git a/result/schemas/579746_0_4.err b/result/schemas/579746_0_4.err new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/579746_0_5 b/result/schemas/579746_0_5 new file mode 100644 index 0000000..91738e4 --- /dev/null +++ b/result/schemas/579746_0_5 @@ -0,0 +1 @@ +./test/schemas/579746_5.xml fails to validate diff --git a/result/schemas/579746_0_5.err b/result/schemas/579746_0_5.err new file mode 100644 index 0000000..1e5680d --- /dev/null +++ b/result/schemas/579746_0_5.err @@ -0,0 +1 @@ +./test/schemas/579746_5.xml:5: element comment: Schemas validity error : Element 'comment': This element is not expected. diff --git a/result/schemas/579746_1_0 b/result/schemas/579746_1_0 new file mode 100644 index 0000000..c9a24f2 --- /dev/null +++ b/result/schemas/579746_1_0 @@ -0,0 +1 @@ +./test/schemas/579746_0.xml validates diff --git a/result/schemas/579746_1_0.err b/result/schemas/579746_1_0.err new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/579746_1_1 b/result/schemas/579746_1_1 new file mode 100644 index 0000000..8e3d39a --- /dev/null +++ b/result/schemas/579746_1_1 @@ -0,0 +1 @@ +./test/schemas/579746_1.xml validates diff --git a/result/schemas/579746_1_1.err b/result/schemas/579746_1_1.err new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/579746_1_2 b/result/schemas/579746_1_2 new file mode 100644 index 0000000..a11eaf1 --- /dev/null +++ b/result/schemas/579746_1_2 @@ -0,0 +1 @@ +./test/schemas/579746_2.xml validates diff --git a/result/schemas/579746_1_2.err b/result/schemas/579746_1_2.err new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/579746_1_3 b/result/schemas/579746_1_3 new file mode 100644 index 0000000..cf06bc5 --- /dev/null +++ b/result/schemas/579746_1_3 @@ -0,0 +1 @@ +./test/schemas/579746_3.xml fails to validate diff --git a/result/schemas/579746_1_3.err b/result/schemas/579746_1_3.err new file mode 100644 index 0000000..5e4c25e --- /dev/null +++ b/result/schemas/579746_1_3.err @@ -0,0 +1 @@ +./test/schemas/579746_3.xml:5: element customer: Schemas validity error : Element 'customer': This element is not expected. diff --git a/result/schemas/579746_1_4 b/result/schemas/579746_1_4 new file mode 100644 index 0000000..4763001 --- /dev/null +++ b/result/schemas/579746_1_4 @@ -0,0 +1 @@ +./test/schemas/579746_4.xml validates diff --git a/result/schemas/579746_1_4.err b/result/schemas/579746_1_4.err new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/579746_1_5 b/result/schemas/579746_1_5 new file mode 100644 index 0000000..91738e4 --- /dev/null +++ b/result/schemas/579746_1_5 @@ -0,0 +1 @@ +./test/schemas/579746_5.xml fails to validate diff --git a/result/schemas/579746_1_5.err b/result/schemas/579746_1_5.err new file mode 100644 index 0000000..1e5680d --- /dev/null +++ b/result/schemas/579746_1_5.err @@ -0,0 +1 @@ +./test/schemas/579746_5.xml:5: element comment: Schemas validity error : Element 'comment': This element is not expected. diff --git a/result/schemas/582887_0_0 b/result/schemas/582887_0_0 new file mode 100644 index 0000000..4ae8482 --- /dev/null +++ b/result/schemas/582887_0_0 @@ -0,0 +1 @@ +./test/schemas/582887_0.xml validates diff --git a/result/schemas/582887_0_0.err b/result/schemas/582887_0_0.err new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/582906-1_0_0 b/result/schemas/582906-1_0_0 new file mode 100644 index 0000000..e1abbf5 --- /dev/null +++ b/result/schemas/582906-1_0_0 @@ -0,0 +1 @@ +./test/schemas/582906-1_0.xml validates diff --git a/result/schemas/582906-1_0_0.err b/result/schemas/582906-1_0_0.err new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/582906-2_0_0 b/result/schemas/582906-2_0_0 new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/582906-2_0_0.err b/result/schemas/582906-2_0_0.err new file mode 100644 index 0000000..c1f8204 --- /dev/null +++ b/result/schemas/582906-2_0_0.err @@ -0,0 +1 @@ +test/schemas/582906-2-prog1.xsd:9: element include: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}include': The target namespace 'http://example.com/xml/Prog3' of the included/redefined schema 'test/schemas/582906-2-common.xsd' differs from 'http://example.com/xml/Prog1' of the including/redefining schema. 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 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 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 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 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..6933fb7 --- /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': Missing child element(s). Expected is ( c ). 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..f846d15 --- /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': Missing child element(s). Expected is one of ( a, b, c ). 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..d8ca9a7 --- /dev/null +++ b/result/schemas/all_0_5.err @@ -0,0 +1 @@ +./test/schemas/all_5.xml:1: element a: Schemas validity error : Element 'a': This element is not expected. Expected is ( c ). 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..c31d91b --- /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': Missing child element(s). Expected is one of ( b, c ). 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..d5c5428 --- /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': Missing child element(s). Expected is ( c ). 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 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 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 diff --git a/result/schemas/all_1_3 b/result/schemas/all_1_3 new file mode 100644 index 0000000..55a2a4d --- /dev/null +++ b/result/schemas/all_1_3 @@ -0,0 +1 @@ +./test/schemas/all_3.xml fails to validate diff --git a/result/schemas/all_1_3.err b/result/schemas/all_1_3.err new file mode 100644 index 0000000..6933fb7 --- /dev/null +++ b/result/schemas/all_1_3.err @@ -0,0 +1 @@ +./test/schemas/all_3.xml:1: element doc: Schemas validity error : Element 'doc': Missing child element(s). Expected is ( c ). 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 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..d8ca9a7 --- /dev/null +++ b/result/schemas/all_1_5.err @@ -0,0 +1 @@ +./test/schemas/all_5.xml:1: element a: Schemas validity error : Element 'a': This element is not expected. Expected is ( c ). diff --git a/result/schemas/all_1_6 b/result/schemas/all_1_6 new file mode 100644 index 0000000..c3705c7 --- /dev/null +++ b/result/schemas/all_1_6 @@ -0,0 +1 @@ +./test/schemas/all_6.xml fails to validate diff --git a/result/schemas/all_1_6.err b/result/schemas/all_1_6.err new file mode 100644 index 0000000..c31d91b --- /dev/null +++ b/result/schemas/all_1_6.err @@ -0,0 +1 @@ +./test/schemas/all_6.xml:1: element doc: Schemas validity error : Element 'doc': Missing child element(s). Expected is one of ( b, c ). diff --git a/result/schemas/all_1_7 b/result/schemas/all_1_7 new file mode 100644 index 0000000..d144d2d --- /dev/null +++ b/result/schemas/all_1_7 @@ -0,0 +1 @@ +./test/schemas/all_7.xml fails to validate diff --git a/result/schemas/all_1_7.err b/result/schemas/all_1_7.err new file mode 100644 index 0000000..d5c5428 --- /dev/null +++ b/result/schemas/all_1_7.err @@ -0,0 +1 @@ +./test/schemas/all_7.xml:1: element doc: Schemas validity error : Element 'doc': Missing child element(s). Expected is ( c ). 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..6ef8590 --- /dev/null +++ b/result/schemas/all_2_0.err @@ -0,0 +1 @@ +./test/schemas/all_0.xml:1: element c: Schemas validity error : Element 'c': This element is not expected. 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..fd8cb48 --- /dev/null +++ b/result/schemas/all_2_1.err @@ -0,0 +1 @@ +./test/schemas/all_1.xml:1: element c: Schemas validity error : Element 'c': This element is not expected. Expected is ( a ). 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..1f04462 --- /dev/null +++ b/result/schemas/all_2_2.err @@ -0,0 +1 @@ +./test/schemas/all_2.xml:1: element c: Schemas validity error : Element 'c': This element is not expected. 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 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..31dcf12 --- /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': Missing child element(s). Expected is one of ( a, b ). 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..e859ebd --- /dev/null +++ b/result/schemas/all_2_5.err @@ -0,0 +1 @@ +./test/schemas/all_5.xml:1: element a: Schemas validity error : Element 'a': This element is not expected. 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 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 diff --git a/result/schemas/allsg_0_0 b/result/schemas/allsg_0_0 new file mode 100644 index 0000000..a078f05 --- /dev/null +++ b/result/schemas/allsg_0_0 @@ -0,0 +1 @@ +./test/schemas/allsg_0.xml validates diff --git a/result/schemas/allsg_0_0.err b/result/schemas/allsg_0_0.err new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/allsg_0_1 b/result/schemas/allsg_0_1 new file mode 100644 index 0000000..ab3cf58 --- /dev/null +++ b/result/schemas/allsg_0_1 @@ -0,0 +1 @@ +./test/schemas/allsg_1.xml validates diff --git a/result/schemas/allsg_0_1.err b/result/schemas/allsg_0_1.err new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/allsg_0_2 b/result/schemas/allsg_0_2 new file mode 100644 index 0000000..da3de52 --- /dev/null +++ b/result/schemas/allsg_0_2 @@ -0,0 +1 @@ +./test/schemas/allsg_2.xml validates diff --git a/result/schemas/allsg_0_2.err b/result/schemas/allsg_0_2.err new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/allsg_0_3 b/result/schemas/allsg_0_3 new file mode 100644 index 0000000..f98152b --- /dev/null +++ b/result/schemas/allsg_0_3 @@ -0,0 +1 @@ +./test/schemas/allsg_3.xml fails to validate diff --git a/result/schemas/allsg_0_3.err b/result/schemas/allsg_0_3.err new file mode 100644 index 0000000..628a360 --- /dev/null +++ b/result/schemas/allsg_0_3.err @@ -0,0 +1 @@ +./test/schemas/allsg_3.xml:6: element gm-B-1: Schemas validity error : Element '{urn:test:foo}gm-B-1': This element is not expected. Expected is one of ( {urn:test:foo}gh-A, {urn:test:foo}gm-A-1, {urn:test:foo}gm-A-2 ). diff --git a/result/schemas/allsg_0_4 b/result/schemas/allsg_0_4 new file mode 100644 index 0000000..3fe69c1 --- /dev/null +++ b/result/schemas/allsg_0_4 @@ -0,0 +1 @@ +./test/schemas/allsg_4.xml fails to validate diff --git a/result/schemas/allsg_0_4.err b/result/schemas/allsg_0_4.err new file mode 100644 index 0000000..e72288d --- /dev/null +++ b/result/schemas/allsg_0_4.err @@ -0,0 +1 @@ +./test/schemas/allsg_4.xml:6: element gm-A-1: Schemas validity error : Element '{urn:test:foo}gm-A-1': This element is not expected. Expected is one of ( {urn:test:foo}gh-B, {urn:test:foo}gm-B-1, {urn:test:foo}gm-B-2 ). diff --git a/result/schemas/allsg_0_5 b/result/schemas/allsg_0_5 new file mode 100644 index 0000000..2689cf0 --- /dev/null +++ b/result/schemas/allsg_0_5 @@ -0,0 +1 @@ +./test/schemas/allsg_5.xml fails to validate diff --git a/result/schemas/allsg_0_5.err b/result/schemas/allsg_0_5.err new file mode 100644 index 0000000..26a1446 --- /dev/null +++ b/result/schemas/allsg_0_5.err @@ -0,0 +1 @@ +./test/schemas/allsg_5.xml:7: element gm-B-2: Schemas validity error : Element '{urn:test:foo}gm-B-2': This element is not expected. diff --git a/result/schemas/annot-err_0_0 b/result/schemas/annot-err_0_0 new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/annot-err_0_0.err b/result/schemas/annot-err_0_0.err new file mode 100644 index 0000000..78c0c72 --- /dev/null +++ b/result/schemas/annot-err_0_0.err @@ -0,0 +1,7 @@ +./test/schemas/annot-err_0.xsd:7: element annotation: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}annotation': The attribute 'death' is not allowed. +./test/schemas/annot-err_0.xsd:7: element annotation: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}annotation': The content is not valid. Expected is (appinfo | documentation)*. +./test/schemas/annot-err_0.xsd:10: element appinfo: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}appinfo': The attribute 'id' is not allowed. +./test/schemas/annot-err_0.xsd:10: element appinfo: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}appinfo': The attribute 'fun' is not allowed. +./test/schemas/annot-err_0.xsd:14: element documentation: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}documentation': The attribute 'id' is not allowed. +./test/schemas/annot-err_0.xsd:14: element documentation: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}documentation': The attribute 'mothers' is not allowed. +./test/schemas/annot-err_0.xsd:14: element documentation: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}documentation', attribute '{http://www.w3.org/XML/1998/namespace}lang': '*' is not a valid value of the atomic type 'xs:language'. diff --git a/result/schemas/any1_0_0 b/result/schemas/any1_0_0 new file mode 100644 index 0000000..7eec0fc --- /dev/null +++ b/result/schemas/any1_0_0 @@ -0,0 +1 @@ +./test/schemas/any1_0.xml validates diff --git a/result/schemas/any1_0_0.err b/result/schemas/any1_0_0.err new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/any2_0_0 b/result/schemas/any2_0_0 new file mode 100644 index 0000000..eef73b8 --- /dev/null +++ b/result/schemas/any2_0_0 @@ -0,0 +1 @@ +./test/schemas/any2_0.xml validates diff --git a/result/schemas/any2_0_0.err b/result/schemas/any2_0_0.err new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/any3_0_0 b/result/schemas/any3_0_0 new file mode 100644 index 0000000..568af4f --- /dev/null +++ b/result/schemas/any3_0_0 @@ -0,0 +1 @@ +./test/schemas/any3_0.xml fails to validate diff --git a/result/schemas/any3_0_0.err b/result/schemas/any3_0_0.err new file mode 100644 index 0000000..49ce581 --- /dev/null +++ b/result/schemas/any3_0_0.err @@ -0,0 +1 @@ +./test/schemas/any3_0.xml:12: element bar.A: Schemas validity error : Element 'bar.A': This element is not expected. Expected is ( ##other{http://FOO}* ). diff --git a/result/schemas/any4_0_0 b/result/schemas/any4_0_0 new file mode 100644 index 0000000..42ea454 --- /dev/null +++ b/result/schemas/any4_0_0 @@ -0,0 +1 @@ +./test/schemas/any4_0.xml validates diff --git a/result/schemas/any4_0_0.err b/result/schemas/any4_0_0.err new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/any5_0_0 b/result/schemas/any5_0_0 new file mode 100644 index 0000000..910f8bb --- /dev/null +++ b/result/schemas/any5_0_0 @@ -0,0 +1 @@ +./test/schemas/any5_0.xml fails to validate diff --git a/result/schemas/any5_0_0.err b/result/schemas/any5_0_0.err new file mode 100644 index 0000000..b69fd57 --- /dev/null +++ b/result/schemas/any5_0_0.err @@ -0,0 +1 @@ +./test/schemas/any5_0.xml:6: element boo: Schemas validity error : Element '{urn:test:foo}boo': This element is not expected. Expected is ( ##other{urn:test:foo}* ). diff --git a/result/schemas/any5_0_1 b/result/schemas/any5_0_1 new file mode 100644 index 0000000..5e2c461 --- /dev/null +++ b/result/schemas/any5_0_1 @@ -0,0 +1 @@ +./test/schemas/any5_1.xml fails to validate diff --git a/result/schemas/any5_0_1.err b/result/schemas/any5_0_1.err new file mode 100644 index 0000000..79d7e35 --- /dev/null +++ b/result/schemas/any5_0_1.err @@ -0,0 +1 @@ +./test/schemas/any5_1.xml:11: element boo: Schemas validity error : Element '{urn:test:bar}boo': This element is not expected. diff --git a/result/schemas/any5_0_2 b/result/schemas/any5_0_2 new file mode 100644 index 0000000..b049478 --- /dev/null +++ b/result/schemas/any5_0_2 @@ -0,0 +1 @@ +./test/schemas/any5_2.xml fails to validate diff --git a/result/schemas/any5_0_2.err b/result/schemas/any5_0_2.err new file mode 100644 index 0000000..a5bf4c0 --- /dev/null +++ b/result/schemas/any5_0_2.err @@ -0,0 +1 @@ +./test/schemas/any5_2.xml:7: element boo: Schemas validity error : Element '{urn:test:foo}boo': This element is not expected. diff --git a/result/schemas/any5_0_3 b/result/schemas/any5_0_3 new file mode 100644 index 0000000..8cfb94e --- /dev/null +++ b/result/schemas/any5_0_3 @@ -0,0 +1 @@ +./test/schemas/any5_3.xml validates diff --git a/result/schemas/any5_0_3.err b/result/schemas/any5_0_3.err new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/any5_0_4 b/result/schemas/any5_0_4 new file mode 100644 index 0000000..0a4bce0 --- /dev/null +++ b/result/schemas/any5_0_4 @@ -0,0 +1 @@ +./test/schemas/any5_4.xml fails to validate diff --git a/result/schemas/any5_0_4.err b/result/schemas/any5_0_4.err new file mode 100644 index 0000000..74a6bda --- /dev/null +++ b/result/schemas/any5_0_4.err @@ -0,0 +1 @@ +./test/schemas/any5_4.xml:11: element boo: Schemas validity error : Element '{urn:test:bar}boo': This element is not expected. diff --git a/result/schemas/any5_0_5 b/result/schemas/any5_0_5 new file mode 100644 index 0000000..6c15d25 --- /dev/null +++ b/result/schemas/any5_0_5 @@ -0,0 +1 @@ +./test/schemas/any5_5.xml fails to validate diff --git a/result/schemas/any5_0_5.err b/result/schemas/any5_0_5.err new file mode 100644 index 0000000..e50113f --- /dev/null +++ b/result/schemas/any5_0_5.err @@ -0,0 +1 @@ +./test/schemas/any5_5.xml:11: element boo: Schemas validity error : Element '{urn:test:foo}boo': This element is not expected. diff --git a/result/schemas/any5_0_6 b/result/schemas/any5_0_6 new file mode 100644 index 0000000..c9df562 --- /dev/null +++ b/result/schemas/any5_0_6 @@ -0,0 +1 @@ +./test/schemas/any5_6.xml fails to validate diff --git a/result/schemas/any5_0_6.err b/result/schemas/any5_0_6.err new file mode 100644 index 0000000..b64cd4f --- /dev/null +++ b/result/schemas/any5_0_6.err @@ -0,0 +1 @@ +./test/schemas/any5_6.xml:11: element boo: Schemas validity error : Element '{urn:test:bar}boo': This element is not expected. diff --git a/result/schemas/any5_1_0 b/result/schemas/any5_1_0 new file mode 100644 index 0000000..910f8bb --- /dev/null +++ b/result/schemas/any5_1_0 @@ -0,0 +1 @@ +./test/schemas/any5_0.xml fails to validate diff --git a/result/schemas/any5_1_0.err b/result/schemas/any5_1_0.err new file mode 100644 index 0000000..b69fd57 --- /dev/null +++ b/result/schemas/any5_1_0.err @@ -0,0 +1 @@ +./test/schemas/any5_0.xml:6: element boo: Schemas validity error : Element '{urn:test:foo}boo': This element is not expected. Expected is ( ##other{urn:test:foo}* ). diff --git a/result/schemas/any5_1_1 b/result/schemas/any5_1_1 new file mode 100644 index 0000000..5e2c461 --- /dev/null +++ b/result/schemas/any5_1_1 @@ -0,0 +1 @@ +./test/schemas/any5_1.xml fails to validate diff --git a/result/schemas/any5_1_1.err b/result/schemas/any5_1_1.err new file mode 100644 index 0000000..bbfccb4 --- /dev/null +++ b/result/schemas/any5_1_1.err @@ -0,0 +1 @@ +./test/schemas/any5_1.xml:11: element boo: Schemas validity error : Element '{urn:test:bar}boo': This element is not expected. Expected is ( {urn:test:foo}boo ). diff --git a/result/schemas/any5_1_2 b/result/schemas/any5_1_2 new file mode 100644 index 0000000..6eab2bb --- /dev/null +++ b/result/schemas/any5_1_2 @@ -0,0 +1 @@ +./test/schemas/any5_2.xml validates diff --git a/result/schemas/any5_1_2.err b/result/schemas/any5_1_2.err new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/any5_1_3 b/result/schemas/any5_1_3 new file mode 100644 index 0000000..f114a67 --- /dev/null +++ b/result/schemas/any5_1_3 @@ -0,0 +1 @@ +./test/schemas/any5_3.xml fails to validate diff --git a/result/schemas/any5_1_3.err b/result/schemas/any5_1_3.err new file mode 100644 index 0000000..e6c07b2 --- /dev/null +++ b/result/schemas/any5_1_3.err @@ -0,0 +1 @@ +./test/schemas/any5_3.xml:4: element foo: Schemas validity error : Element '{urn:test:foo}foo': Missing child element(s). diff --git a/result/schemas/any5_1_4 b/result/schemas/any5_1_4 new file mode 100644 index 0000000..0a4bce0 --- /dev/null +++ b/result/schemas/any5_1_4 @@ -0,0 +1 @@ +./test/schemas/any5_4.xml fails to validate diff --git a/result/schemas/any5_1_4.err b/result/schemas/any5_1_4.err new file mode 100644 index 0000000..6d89773 --- /dev/null +++ b/result/schemas/any5_1_4.err @@ -0,0 +1 @@ +./test/schemas/any5_4.xml:11: element boo: Schemas validity error : Element '{urn:test:bar}boo': This element is not expected. Expected is ( {urn:test:foo}boo ). diff --git a/result/schemas/any5_1_5 b/result/schemas/any5_1_5 new file mode 100644 index 0000000..e573d46 --- /dev/null +++ b/result/schemas/any5_1_5 @@ -0,0 +1 @@ +./test/schemas/any5_5.xml validates diff --git a/result/schemas/any5_1_5.err b/result/schemas/any5_1_5.err new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/any5_1_6 b/result/schemas/any5_1_6 new file mode 100644 index 0000000..c9df562 --- /dev/null +++ b/result/schemas/any5_1_6 @@ -0,0 +1 @@ +./test/schemas/any5_6.xml fails to validate diff --git a/result/schemas/any5_1_6.err b/result/schemas/any5_1_6.err new file mode 100644 index 0000000..8c3f020 --- /dev/null +++ b/result/schemas/any5_1_6.err @@ -0,0 +1 @@ +./test/schemas/any5_6.xml:11: element boo: Schemas validity error : Element '{urn:test:bar}boo': This element is not expected. Expected is ( {urn:test:foo}boo ). diff --git a/result/schemas/any6_1_0 b/result/schemas/any6_1_0 new file mode 100644 index 0000000..1bb493c --- /dev/null +++ b/result/schemas/any6_1_0 @@ -0,0 +1 @@ +./test/schemas/any6_0.xml validates diff --git a/result/schemas/any6_1_0.err b/result/schemas/any6_1_0.err new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/any6_2_0 b/result/schemas/any6_2_0 new file mode 100644 index 0000000..1bb493c --- /dev/null +++ b/result/schemas/any6_2_0 @@ -0,0 +1 @@ +./test/schemas/any6_0.xml validates diff --git a/result/schemas/any6_2_0.err b/result/schemas/any6_2_0.err new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/any7_1_0 b/result/schemas/any7_1_0 new file mode 100644 index 0000000..cfd9dcc --- /dev/null +++ b/result/schemas/any7_1_0 @@ -0,0 +1 @@ +./test/schemas/any7_0.xml fails to validate diff --git a/result/schemas/any7_1_0.err b/result/schemas/any7_1_0.err new file mode 100644 index 0000000..a4274f8 --- /dev/null +++ b/result/schemas/any7_1_0.err @@ -0,0 +1 @@ +./test/schemas/any7_0.xml:18: element moo: Schemas validity error : Element 'moo': This element is not expected. Expected is ( ##other{urn:test:foo}* ). diff --git a/result/schemas/any7_1_1 b/result/schemas/any7_1_1 new file mode 100644 index 0000000..2a6f5d7 --- /dev/null +++ b/result/schemas/any7_1_1 @@ -0,0 +1 @@ +./test/schemas/any7_1.xml fails to validate diff --git a/result/schemas/any7_1_1.err b/result/schemas/any7_1_1.err new file mode 100644 index 0000000..8745468 --- /dev/null +++ b/result/schemas/any7_1_1.err @@ -0,0 +1 @@ +./test/schemas/any7_1.xml:17: element bar: Schemas validity error : Element '{urn:test:foo}bar': This element is not expected. Expected is ( ##other{urn:test:foo}* ). diff --git a/result/schemas/any7_1_2 b/result/schemas/any7_1_2 new file mode 100644 index 0000000..6f35e2d --- /dev/null +++ b/result/schemas/any7_1_2 @@ -0,0 +1 @@ +./test/schemas/any7_2.xml validates diff --git a/result/schemas/any7_1_2.err b/result/schemas/any7_1_2.err new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/any7_2_0 b/result/schemas/any7_2_0 new file mode 100644 index 0000000..cfd9dcc --- /dev/null +++ b/result/schemas/any7_2_0 @@ -0,0 +1 @@ +./test/schemas/any7_0.xml fails to validate diff --git a/result/schemas/any7_2_0.err b/result/schemas/any7_2_0.err new file mode 100644 index 0000000..a4274f8 --- /dev/null +++ b/result/schemas/any7_2_0.err @@ -0,0 +1 @@ +./test/schemas/any7_0.xml:18: element moo: Schemas validity error : Element 'moo': This element is not expected. Expected is ( ##other{urn:test:foo}* ). diff --git a/result/schemas/any7_2_1 b/result/schemas/any7_2_1 new file mode 100644 index 0000000..2a6f5d7 --- /dev/null +++ b/result/schemas/any7_2_1 @@ -0,0 +1 @@ +./test/schemas/any7_1.xml fails to validate diff --git a/result/schemas/any7_2_1.err b/result/schemas/any7_2_1.err new file mode 100644 index 0000000..8745468 --- /dev/null +++ b/result/schemas/any7_2_1.err @@ -0,0 +1 @@ +./test/schemas/any7_1.xml:17: element bar: Schemas validity error : Element '{urn:test:foo}bar': This element is not expected. Expected is ( ##other{urn:test:foo}* ). diff --git a/result/schemas/any7_2_2 b/result/schemas/any7_2_2 new file mode 100644 index 0000000..6f35e2d --- /dev/null +++ b/result/schemas/any7_2_2 @@ -0,0 +1 @@ +./test/schemas/any7_2.xml validates diff --git a/result/schemas/any7_2_2.err b/result/schemas/any7_2_2.err new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/any8_1_0 b/result/schemas/any8_1_0 new file mode 100644 index 0000000..f5f4ed9 --- /dev/null +++ b/result/schemas/any8_1_0 @@ -0,0 +1 @@ +./test/schemas/any8_0.xml validates diff --git a/result/schemas/any8_1_0.err b/result/schemas/any8_1_0.err new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/anyAttr-derive-errors1_0_0 b/result/schemas/anyAttr-derive-errors1_0_0 new file mode 100644 index 0000000..d8e465e --- /dev/null +++ b/result/schemas/anyAttr-derive-errors1_0_0 @@ -0,0 +1 @@ +./test/schemas/anyAttr-derive-errors1_0.xml validates diff --git a/result/schemas/anyAttr-derive-errors1_0_0.err b/result/schemas/anyAttr-derive-errors1_0_0.err new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/anyAttr-derive1_0_0 b/result/schemas/anyAttr-derive1_0_0 new file mode 100644 index 0000000..adae13d --- /dev/null +++ b/result/schemas/anyAttr-derive1_0_0 @@ -0,0 +1 @@ +./test/schemas/anyAttr-derive1_0.xml validates diff --git a/result/schemas/anyAttr-derive1_0_0.err b/result/schemas/anyAttr-derive1_0_0.err new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/anyAttr-derive2_0_0 b/result/schemas/anyAttr-derive2_0_0 new file mode 100644 index 0000000..dccc6e2 --- /dev/null +++ b/result/schemas/anyAttr-derive2_0_0 @@ -0,0 +1 @@ +./test/schemas/anyAttr-derive2_0.xml validates diff --git a/result/schemas/anyAttr-derive2_0_0.err b/result/schemas/anyAttr-derive2_0_0.err new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/anyAttr-processContents-err1_0_0 b/result/schemas/anyAttr-processContents-err1_0_0 new file mode 100644 index 0000000..43e77aa --- /dev/null +++ b/result/schemas/anyAttr-processContents-err1_0_0 @@ -0,0 +1 @@ +./test/schemas/anyAttr-processContents-err1_0.xml fails to validate diff --git a/result/schemas/anyAttr-processContents-err1_0_0.err b/result/schemas/anyAttr-processContents-err1_0_0.err new file mode 100644 index 0000000..dc4766b --- /dev/null +++ b/result/schemas/anyAttr-processContents-err1_0_0.err @@ -0,0 +1,2 @@ +./test/schemas/anyAttr-processContents-err1_0.xml:8: element elem.lax: Schemas validity error : Element '{http://FOO}elem.lax', attribute '{http://FOO}bar': 'o o' is not a valid value of the atomic type 'xs:language'. +./test/schemas/anyAttr-processContents-err1_0.xml:9: element elem.strict: Schemas validity error : Element '{http://FOO}elem.strict', attribute '{http://FOO}barB': No matching global attribute declaration available, but demanded by the strict wildcard. diff --git a/result/schemas/anyAttr-processContents1_0_0 b/result/schemas/anyAttr-processContents1_0_0 new file mode 100644 index 0000000..30d0cc2 --- /dev/null +++ b/result/schemas/anyAttr-processContents1_0_0 @@ -0,0 +1 @@ +./test/schemas/anyAttr-processContents1_0.xml validates diff --git a/result/schemas/anyAttr-processContents1_0_0.err b/result/schemas/anyAttr-processContents1_0_0.err new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/anyAttr1_0_0 b/result/schemas/anyAttr1_0_0 new file mode 100644 index 0000000..8afc23a --- /dev/null +++ b/result/schemas/anyAttr1_0_0 @@ -0,0 +1 @@ +./test/schemas/anyAttr1_0.xml validates diff --git a/result/schemas/anyAttr1_0_0.err b/result/schemas/anyAttr1_0_0.err new file mode 100644 index 0000000..e69de29 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 diff --git a/result/schemas/attruse_0_0 b/result/schemas/attruse_0_0 new file mode 100644 index 0000000..c645bc5 --- /dev/null +++ b/result/schemas/attruse_0_0 @@ -0,0 +1 @@ +./test/schemas/attruse_0_0.xml validates diff --git a/result/schemas/attruse_0_0.err b/result/schemas/attruse_0_0.err new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/attruse_0_1 b/result/schemas/attruse_0_1 new file mode 100644 index 0000000..dd23d0b --- /dev/null +++ b/result/schemas/attruse_0_1 @@ -0,0 +1 @@ +./test/schemas/attruse_0_1.xml fails to validate diff --git a/result/schemas/attruse_0_1.err b/result/schemas/attruse_0_1.err new file mode 100644 index 0000000..5dd4fb1 --- /dev/null +++ b/result/schemas/attruse_0_1.err @@ -0,0 +1 @@ +./test/schemas/attruse_0_1.xml:3: element barA: Schemas validity error : Element 'barA': The attribute 'attr' is required but missing. diff --git a/result/schemas/attruse_0_2 b/result/schemas/attruse_0_2 new file mode 100644 index 0000000..0ea3301 --- /dev/null +++ b/result/schemas/attruse_0_2 @@ -0,0 +1 @@ +./test/schemas/attruse_0_2.xml fails to validate diff --git a/result/schemas/attruse_0_2.err b/result/schemas/attruse_0_2.err new file mode 100644 index 0000000..01cf822 --- /dev/null +++ b/result/schemas/attruse_0_2.err @@ -0,0 +1 @@ +./test/schemas/attruse_0_2.xml:6: element barC: Schemas validity error : Element 'barC', attribute 'attr': The attribute 'attr' is not allowed. diff --git a/result/schemas/bug141312_0_0 b/result/schemas/bug141312_0_0 new file mode 100644 index 0000000..d8048a7 --- /dev/null +++ b/result/schemas/bug141312_0_0 @@ -0,0 +1 @@ +./test/schemas/bug141312_0.xml validates diff --git a/result/schemas/bug141312_0_0.err b/result/schemas/bug141312_0_0.err new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/bug141333_0_0 b/result/schemas/bug141333_0_0 new file mode 100644 index 0000000..189660f --- /dev/null +++ b/result/schemas/bug141333_0_0 @@ -0,0 +1 @@ +./test/schemas/bug141333_0.xml validates diff --git a/result/schemas/bug141333_0_0.err b/result/schemas/bug141333_0_0.err new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/bug143951_0_0 b/result/schemas/bug143951_0_0 new file mode 100644 index 0000000..2d0e3e7 --- /dev/null +++ b/result/schemas/bug143951_0_0 @@ -0,0 +1 @@ +./test/schemas/bug143951_0.xml validates diff --git a/result/schemas/bug143951_0_0.err b/result/schemas/bug143951_0_0.err new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/bug145246_0_0 b/result/schemas/bug145246_0_0 new file mode 100644 index 0000000..d28ccf7 --- /dev/null +++ b/result/schemas/bug145246_0_0 @@ -0,0 +1 @@ +./test/schemas/bug145246_0.xml validates diff --git a/result/schemas/bug145246_0_0.err b/result/schemas/bug145246_0_0.err new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/bug152470_1_1 b/result/schemas/bug152470_1_1 new file mode 100644 index 0000000..b158caa --- /dev/null +++ b/result/schemas/bug152470_1_1 @@ -0,0 +1 @@ +./test/schemas/bug152470_1.xml validates diff --git a/result/schemas/bug152470_1_1.err b/result/schemas/bug152470_1_1.err new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/bug167754_0_0 b/result/schemas/bug167754_0_0 new file mode 100644 index 0000000..27b50fc --- /dev/null +++ b/result/schemas/bug167754_0_0 @@ -0,0 +1 @@ +./test/schemas/bug167754_0.xml validates diff --git a/result/schemas/bug167754_0_0.err b/result/schemas/bug167754_0_0.err new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/bug303566_1_1 b/result/schemas/bug303566_1_1 new file mode 100644 index 0000000..8092bf0 --- /dev/null +++ b/result/schemas/bug303566_1_1 @@ -0,0 +1 @@ +./test/schemas/bug303566_1.xml fails to validate diff --git a/result/schemas/bug303566_1_1.err b/result/schemas/bug303566_1_1.err new file mode 100644 index 0000000..9156981 --- /dev/null +++ b/result/schemas/bug303566_1_1.err @@ -0,0 +1 @@ +./test/schemas/bug303566_1.xml:9: Schemas validity error : Element 'Part': No match found for key-sequence ['B'] of keyref 'PartRefCountryDummy'. diff --git a/result/schemas/bug306806_1_0 b/result/schemas/bug306806_1_0 new file mode 100644 index 0000000..c2cb7c8 --- /dev/null +++ b/result/schemas/bug306806_1_0 @@ -0,0 +1 @@ +./test/schemas/bug306806_0.xml validates diff --git a/result/schemas/bug306806_1_0.err b/result/schemas/bug306806_1_0.err new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/bug309338_1_0 b/result/schemas/bug309338_1_0 new file mode 100644 index 0000000..65331f1 --- /dev/null +++ b/result/schemas/bug309338_1_0 @@ -0,0 +1 @@ +./test/schemas/bug309338_0.xml validates diff --git a/result/schemas/bug309338_1_0.err b/result/schemas/bug309338_1_0.err new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/bug310264_0_0 b/result/schemas/bug310264_0_0 new file mode 100644 index 0000000..e07293d --- /dev/null +++ b/result/schemas/bug310264_0_0 @@ -0,0 +1 @@ +./test/schemas/bug310264_0.xml validates diff --git a/result/schemas/bug310264_0_0.err b/result/schemas/bug310264_0_0.err new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/bug312957_1_0 b/result/schemas/bug312957_1_0 new file mode 100644 index 0000000..1ec6269 --- /dev/null +++ b/result/schemas/bug312957_1_0 @@ -0,0 +1 @@ +./test/schemas/bug312957_0.xml fails to validate diff --git a/result/schemas/bug312957_1_0.err b/result/schemas/bug312957_1_0.err new file mode 100644 index 0000000..40e58ff --- /dev/null +++ b/result/schemas/bug312957_1_0.err @@ -0,0 +1 @@ +./test/schemas/bug312957_0.xml:10: Schemas validity error : Element 'sister': No match found for key-sequence ['annie'] of keyref 'sibling_key_ref'. diff --git a/result/schemas/bug313982_0_0 b/result/schemas/bug313982_0_0 new file mode 100644 index 0000000..19855cf --- /dev/null +++ b/result/schemas/bug313982_0_0 @@ -0,0 +1 @@ +./test/schemas/bug313982_0.xml validates diff --git a/result/schemas/bug313982_0_0.err b/result/schemas/bug313982_0_0.err new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/bug321475_1_0 b/result/schemas/bug321475_1_0 new file mode 100644 index 0000000..f943041 --- /dev/null +++ b/result/schemas/bug321475_1_0 @@ -0,0 +1 @@ +./test/schemas/bug321475_0.xml validates diff --git a/result/schemas/bug321475_1_0.err b/result/schemas/bug321475_1_0.err new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/bug322411_1_0 b/result/schemas/bug322411_1_0 new file mode 100644 index 0000000..79560fb --- /dev/null +++ b/result/schemas/bug322411_1_0 @@ -0,0 +1 @@ +./test/schemas/bug322411_0.xml validates diff --git a/result/schemas/bug322411_1_0.err b/result/schemas/bug322411_1_0.err new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/bug323510_1_0 b/result/schemas/bug323510_1_0 new file mode 100644 index 0000000..c33d685 --- /dev/null +++ b/result/schemas/bug323510_1_0 @@ -0,0 +1 @@ +./test/schemas/bug323510_0.xml fails to validate diff --git a/result/schemas/bug323510_1_0.err b/result/schemas/bug323510_1_0.err new file mode 100644 index 0000000..1655070 --- /dev/null +++ b/result/schemas/bug323510_1_0.err @@ -0,0 +1 @@ +./test/schemas/bug323510_0.xml:2: element foo: Schemas validity error : Element 'foo': Missing child element(s). Expected is ( bar ). diff --git a/result/schemas/bug455953_0_0 b/result/schemas/bug455953_0_0 new file mode 100644 index 0000000..6175d1e --- /dev/null +++ b/result/schemas/bug455953_0_0 @@ -0,0 +1 @@ +./test/schemas/bug455953_0.xml validates diff --git a/result/schemas/bug455953_0_0.err b/result/schemas/bug455953_0_0.err new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/changelog093_1_0 b/result/schemas/changelog093_1_0 new file mode 100644 index 0000000..13f83ef --- /dev/null +++ b/result/schemas/changelog093_1_0 @@ -0,0 +1 @@ +./test/schemas/changelog093_0.xml fails to validate diff --git a/result/schemas/changelog093_1_0.err b/result/schemas/changelog093_1_0.err new file mode 100644 index 0000000..ef0b1ec --- /dev/null +++ b/result/schemas/changelog093_1_0.err @@ -0,0 +1 @@ +./test/schemas/changelog093_0.xml:7: element description: Schemas validity error : Element '{http://www.blackperl.com/XML/ChangeLog}description': Duplicate key-sequence ['PL'] in unique identity-constraint '{http://www.blackperl.com/XML/ChangeLog}changelogDescriptionLangConstraint'. 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 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 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..5141445 --- /dev/null +++ b/result/schemas/choice_0_2.err @@ -0,0 +1 @@ +./test/schemas/choice_2.xml:3: element b: Schemas validity error : Element 'b': This element is not expected. 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..ece5d69 --- /dev/null +++ b/result/schemas/choice_0_3.err @@ -0,0 +1 @@ +./test/schemas/choice_3.xml:3: element a: Schemas validity error : Element 'a': This element is not expected. 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..3d3af59 --- /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': Missing child element(s). Expected is one of ( a, b ). 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..39d413c --- /dev/null +++ b/result/schemas/choice_0_5.err @@ -0,0 +1 @@ +./test/schemas/choice_5.xml:3: element b: Schemas validity error : Element 'b': This element is not expected. 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..414d1e2 --- /dev/null +++ b/result/schemas/choice_0_6.err @@ -0,0 +1 @@ +./test/schemas/choice_6.xml:3: element b: Schemas validity error : Element 'b': This element is not expected. 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 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 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..5141445 --- /dev/null +++ b/result/schemas/choice_1_2.err @@ -0,0 +1 @@ +./test/schemas/choice_2.xml:3: element b: Schemas validity error : Element 'b': This element is not expected. 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..ece5d69 --- /dev/null +++ b/result/schemas/choice_1_3.err @@ -0,0 +1 @@ +./test/schemas/choice_3.xml:3: element a: Schemas validity error : Element 'a': This element is not expected. 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 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..39d413c --- /dev/null +++ b/result/schemas/choice_1_5.err @@ -0,0 +1 @@ +./test/schemas/choice_5.xml:3: element b: Schemas validity error : Element 'b': This element is not expected. 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..414d1e2 --- /dev/null +++ b/result/schemas/choice_1_6.err @@ -0,0 +1 @@ +./test/schemas/choice_6.xml:3: element b: Schemas validity error : Element 'b': This element is not expected. 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 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 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 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 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..3d3af59 --- /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': Missing child element(s). Expected is one of ( a, b ). 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 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..bef56da --- /dev/null +++ b/result/schemas/choice_2_6.err @@ -0,0 +1 @@ +./test/schemas/choice_6.xml:5: element a: Schemas validity error : Element 'a': This element is not expected. diff --git a/result/schemas/complex-type-extension_0_0 b/result/schemas/complex-type-extension_0_0 new file mode 100644 index 0000000..ef15215 --- /dev/null +++ b/result/schemas/complex-type-extension_0_0 @@ -0,0 +1 @@ +./test/schemas/complex-type-extension_0.xml validates diff --git a/result/schemas/complex-type-extension_0_0.err b/result/schemas/complex-type-extension_0_0.err new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/cos-ct-extends-1-3_0_0 b/result/schemas/cos-ct-extends-1-3_0_0 new file mode 100644 index 0000000..5dd5bd7 --- /dev/null +++ b/result/schemas/cos-ct-extends-1-3_0_0 @@ -0,0 +1 @@ +./test/schemas/cos-ct-extends-1-3_0.xml validates diff --git a/result/schemas/cos-ct-extends-1-3_0_0.err b/result/schemas/cos-ct-extends-1-3_0_0.err new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/cos-st-restricts-1-2-err_0_0 b/result/schemas/cos-st-restricts-1-2-err_0_0 new file mode 100644 index 0000000..dc34253 --- /dev/null +++ b/result/schemas/cos-st-restricts-1-2-err_0_0 @@ -0,0 +1 @@ +./test/schemas/cos-st-restricts-1-2-err_0.xml fails to validate diff --git a/result/schemas/cos-st-restricts-1-2-err_0_0.err b/result/schemas/cos-st-restricts-1-2-err_0_0.err new file mode 100644 index 0000000..ccc12b6 --- /dev/null +++ b/result/schemas/cos-st-restricts-1-2-err_0_0.err @@ -0,0 +1,2 @@ +./test/schemas/cos-st-restricts-1-2-err_0.xml:3: element foo: Schemas validity error : Element '{http://FOO}foo': [facet 'length'] The value has a length of '2'; this differs from the allowed length of '3'. +./test/schemas/cos-st-restricts-1-2-err_0.xml:3: element foo: Schemas validity error : Element '{http://FOO}foo': '1 2' is not a valid value of the list type '{http://FOO}type.A'. diff --git a/result/schemas/ct-sc-nobase_0_0 b/result/schemas/ct-sc-nobase_0_0 new file mode 100644 index 0000000..168712a --- /dev/null +++ b/result/schemas/ct-sc-nobase_0_0 @@ -0,0 +1 @@ +./test/schemas/ct-sc-nobase_0.xml validates diff --git a/result/schemas/ct-sc-nobase_0_0.err b/result/schemas/ct-sc-nobase_0_0.err new file mode 100644 index 0000000..e69de29 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 diff --git a/result/schemas/decimal-1_1_0 b/result/schemas/decimal-1_1_0 new file mode 100644 index 0000000..041b31d --- /dev/null +++ b/result/schemas/decimal-1_1_0 @@ -0,0 +1 @@ +./test/schemas/decimal-1_0.xml fails to validate diff --git a/result/schemas/decimal-1_1_0.err b/result/schemas/decimal-1_1_0.err new file mode 100644 index 0000000..7f4fa9c --- /dev/null +++ b/result/schemas/decimal-1_1_0.err @@ -0,0 +1,8 @@ +./test/schemas/decimal-1_0.xml:16: element val: Schemas validity error : Element 'val': '.' is not a valid value of the atomic type 'myDecimal'. +./test/schemas/decimal-1_0.xml:17: element val: Schemas validity error : Element 'val': '-' is not a valid value of the atomic type 'myDecimal'. +./test/schemas/decimal-1_0.xml:18: element val: Schemas validity error : Element 'val': '+' is not a valid value of the atomic type 'myDecimal'. +./test/schemas/decimal-1_0.xml:19: element val: Schemas validity error : Element 'val': '*' is not a valid value of the atomic type 'myDecimal'. +./test/schemas/decimal-1_0.xml:20: element val: Schemas validity error : Element 'val': '- 1' is not a valid value of the atomic type 'myDecimal'. +./test/schemas/decimal-1_0.xml:21: element val: Schemas validity error : Element 'val': '+ 1' is not a valid value of the atomic type 'myDecimal'. +./test/schemas/decimal-1_0.xml:22: element val: Schemas validity error : Element 'val': '+ 0' is not a valid value of the atomic type 'myDecimal'. +./test/schemas/decimal-1_0.xml:23: element val: Schemas validity error : Element 'val': '- 0' is not a valid value of the atomic type 'myDecimal'. diff --git a/result/schemas/decimal-2_1_0 b/result/schemas/decimal-2_1_0 new file mode 100644 index 0000000..f68ca92 --- /dev/null +++ b/result/schemas/decimal-2_1_0 @@ -0,0 +1 @@ +./test/schemas/decimal-2_0.xml fails to validate diff --git a/result/schemas/decimal-2_1_0.err b/result/schemas/decimal-2_1_0.err new file mode 100644 index 0000000..fe663c2 --- /dev/null +++ b/result/schemas/decimal-2_1_0.err @@ -0,0 +1,4 @@ +./test/schemas/decimal-2_0.xml:12: element val: Schemas validity error : Element 'val': [facet 'minInclusive'] The value '-0.1' is less than the minimum value allowed ('0'). +./test/schemas/decimal-2_0.xml:12: element val: Schemas validity error : Element 'val': '-0.1' is not a valid value of the atomic type 'myDecimal'. +./test/schemas/decimal-2_0.xml:13: element val: Schemas validity error : Element 'val': [facet 'minInclusive'] The value '-1' is less than the minimum value allowed ('0'). +./test/schemas/decimal-2_0.xml:13: element val: Schemas validity error : Element 'val': '-1' is not a valid value of the atomic type 'myDecimal'. diff --git a/result/schemas/decimal-3_1_0 b/result/schemas/decimal-3_1_0 new file mode 100644 index 0000000..5601535 --- /dev/null +++ b/result/schemas/decimal-3_1_0 @@ -0,0 +1 @@ +./test/schemas/decimal-3_0.xml fails to validate diff --git a/result/schemas/decimal-3_1_0.err b/result/schemas/decimal-3_1_0.err new file mode 100644 index 0000000..bba8cf9 --- /dev/null +++ b/result/schemas/decimal-3_1_0.err @@ -0,0 +1,8 @@ +./test/schemas/decimal-3_0.xml:12: element val: Schemas validity error : Element 'val': [facet 'totalDigits'] The value '0.123' has more digits than are allowed ('2'). +./test/schemas/decimal-3_0.xml:12: element val: Schemas validity error : Element 'val': '0.123' is not a valid value of the atomic type 'myDecimal'. +./test/schemas/decimal-3_0.xml:13: element val: Schemas validity error : Element 'val': [facet 'totalDigits'] The value '0.023' has more digits than are allowed ('2'). +./test/schemas/decimal-3_0.xml:13: element val: Schemas validity error : Element 'val': '0.023' is not a valid value of the atomic type 'myDecimal'. +./test/schemas/decimal-3_0.xml:14: element val: Schemas validity error : Element 'val': [facet 'totalDigits'] The value '123' has more digits than are allowed ('2'). +./test/schemas/decimal-3_0.xml:14: element val: Schemas validity error : Element 'val': '123' is not a valid value of the atomic type 'myDecimal'. +./test/schemas/decimal-3_0.xml:15: element val: Schemas validity error : Element 'val': [facet 'totalDigits'] The value '12.3' has more digits than are allowed ('2'). +./test/schemas/decimal-3_0.xml:15: element val: Schemas validity error : Element 'val': '12.3' is not a valid value of the atomic type 'myDecimal'. diff --git a/result/schemas/derivation-ok-extension-err_0_0 b/result/schemas/derivation-ok-extension-err_0_0 new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/derivation-ok-extension-err_0_0.err b/result/schemas/derivation-ok-extension-err_0_0.err new file mode 100644 index 0000000..a0fba52 --- /dev/null +++ b/result/schemas/derivation-ok-extension-err_0_0.err @@ -0,0 +1 @@ +./test/schemas/derivation-ok-extension-err_0.xsd:6: element complexType: Schemas parser error : local complex type: Duplicate attribute use 'barA_1'. diff --git a/result/schemas/derivation-ok-extension_0_0 b/result/schemas/derivation-ok-extension_0_0 new file mode 100644 index 0000000..0947365 --- /dev/null +++ b/result/schemas/derivation-ok-extension_0_0 @@ -0,0 +1 @@ +./test/schemas/derivation-ok-extension_0.xml validates diff --git a/result/schemas/derivation-ok-extension_0_0.err b/result/schemas/derivation-ok-extension_0_0.err new file mode 100644 index 0000000..1314232 --- /dev/null +++ b/result/schemas/derivation-ok-extension_0_0.err @@ -0,0 +1 @@ +./test/schemas/derivation-ok-extension_0.xsd:10: element attribute: Schemas parser warning : Element '{http://www.w3.org/2001/XMLSchema}attribute': Skipping attribute use prohibition, since it is pointless when extending a type. diff --git a/result/schemas/derivation-ok-restriction-2-1-1_0_0 b/result/schemas/derivation-ok-restriction-2-1-1_0_0 new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/derivation-ok-restriction-2-1-1_0_0.err b/result/schemas/derivation-ok-restriction-2-1-1_0_0.err new file mode 100644 index 0000000..bd38dd2 --- /dev/null +++ b/result/schemas/derivation-ok-restriction-2-1-1_0_0.err @@ -0,0 +1,6 @@ +./test/schemas/derivation-ok-restriction-2-1-1_0.xsd:6: element complexType: Schemas parser error : local complex type, attribute use 'barB_1': The 'optional' attribute use is inconsistent with the corresponding 'required' attribute use of the base complex type definition '{http://FOO}typeA'. +./test/schemas/derivation-ok-restriction-2-1-1_0.xsd:6: element complexType: Schemas parser error : local complex type, attribute use 'barC_1': Neither a matching attribute use, nor a matching wildcard exists in the base complex type definition '{http://FOO}typeA'. +./test/schemas/derivation-ok-restriction-2-1-1_0.xsd:6: element complexType: Schemas parser error : local complex type, attribute use 'barC_2': Neither a matching attribute use, nor a matching wildcard exists in the base complex type definition '{http://FOO}typeA'. +./test/schemas/derivation-ok-restriction-2-1-1_0.xsd:6: element complexType: Schemas parser error : local complex type, attribute use 'barD_1': Neither a matching attribute use, nor a matching wildcard exists in the base complex type definition '{http://FOO}typeA'. +./test/schemas/derivation-ok-restriction-2-1-1_0.xsd:6: element complexType: Schemas parser error : local complex type, attribute use 'barD_2': Neither a matching attribute use, nor a matching wildcard exists in the base complex type definition '{http://FOO}typeA'. +./test/schemas/derivation-ok-restriction-2-1-1_0.xsd:6: element complexType: Schemas parser error : local complex type: A matching attribute use for the 'required' attribute use 'barB_3' of the base complex type definition '{http://FOO}typeA' is missing. diff --git a/result/schemas/derivation-ok-restriction-4-1-err_0_0 b/result/schemas/derivation-ok-restriction-4-1-err_0_0 new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/derivation-ok-restriction-4-1-err_0_0.err b/result/schemas/derivation-ok-restriction-4-1-err_0_0.err new file mode 100644 index 0000000..72283fb --- /dev/null +++ b/result/schemas/derivation-ok-restriction-4-1-err_0_0.err @@ -0,0 +1,3 @@ +./test/schemas/derivation-ok-restriction-4-1-err_0.xsd:33: element complexType: Schemas parser error : complex type 'type.A': The complex type definition has an attribute wildcard, but the base complex type definition '{http://FOO}base.type.A' does not have one. +./test/schemas/derivation-ok-restriction-4-1-err_0.xsd:45: element complexType: Schemas parser error : complex type 'type.B': The attribute wildcard is not a valid subset of the wildcard in the base complex type definition '{http://FOO}base.type.B'. +./test/schemas/derivation-ok-restriction-4-1-err_0.xsd:65: element complexType: Schemas parser error : complex type 'base.type.C': The {process contents} of the attribute wildcard is weaker than the one in the base complex type definition '{http://FOO}base.type.C'. diff --git a/result/schemas/derivation-restriction-anyAttr_0_0 b/result/schemas/derivation-restriction-anyAttr_0_0 new file mode 100644 index 0000000..4e04176 --- /dev/null +++ b/result/schemas/derivation-restriction-anyAttr_0_0 @@ -0,0 +1 @@ +./test/schemas/derivation-restriction-anyAttr_0.xml validates diff --git a/result/schemas/derivation-restriction-anyAttr_0_0.err b/result/schemas/derivation-restriction-anyAttr_0_0.err new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/deter0_0_0 b/result/schemas/deter0_0_0 new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/deter0_0_0.err b/result/schemas/deter0_0_0.err new file mode 100644 index 0000000..d2c8b4e --- /dev/null +++ b/result/schemas/deter0_0_0.err @@ -0,0 +1 @@ +./test/schemas/deter0_0.xsd:6: element complexType: Schemas parser error : local complex type: The content model 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 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 diff --git a/result/schemas/element-err_0_0 b/result/schemas/element-err_0_0 new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/element-err_0_0.err b/result/schemas/element-err_0_0.err new file mode 100644 index 0000000..70524f6 --- /dev/null +++ b/result/schemas/element-err_0_0.err @@ -0,0 +1,20 @@ +./test/schemas/element-err_0.xsd:8: element element: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}element': The attribute 'name' is required but missing. +./test/schemas/element-err_0.xsd:14: element element: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}element': The attribute 'ref' is not allowed. +./test/schemas/element-err_0.xsd:14: element element: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}element': The attribute 'minOccurs' is not allowed. +./test/schemas/element-err_0.xsd:14: element element: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}element': The attribute 'maxOccurs' is not allowed. +./test/schemas/element-err_0.xsd:14: element element: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}element': The attribute 'form' is not allowed. +./test/schemas/element-err_0.xsd:14: element element: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}element', attribute 'final': The value 'fantasy' is not valid. Expected is '(#all | List of (extension | restriction))'. +./test/schemas/element-err_0.xsd:14: element element: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}element', attribute 'block': The value 'flute' is not valid. Expected is '(#all | List of (extension | restriction | substitution))'. +./test/schemas/element-err_0.xsd:14: element element: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}element': The attributes 'default' and 'fixed' are mutually exclusive. +./test/schemas/element-err_0.xsd:22: element element: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}element', attribute 'minOccurs': The value must not be greater than the value of 'maxOccurs'. +./test/schemas/element-err_0.xsd:22: element element: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}element': The attributes 'ref' and 'name' are mutually exclusive. +./test/schemas/element-err_0.xsd:22: element element: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}element', attribute 'abstract': Only the attributes 'minOccurs', 'maxOccurs' and 'id' are allowed in addition to 'ref'. +./test/schemas/element-err_0.xsd:23: element complexType: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}element': The content is not valid. Expected is (annotation?). +./test/schemas/element-err_0.xsd:30: element element: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}element', attribute 'maxOccurs': The value must be greater than or equal to 1. +./test/schemas/element-err_0.xsd:30: element element: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}element': The attribute 'abstract' is not allowed. +./test/schemas/element-err_0.xsd:30: element element: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}element': The attribute 'substitutionGroup' is not allowed. +./test/schemas/element-err_0.xsd:30: element element: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}element': The attribute 'final' is not allowed. +./test/schemas/element-err_0.xsd:30: element element: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}element', attribute 'block': The value 'flute' is not valid. Expected is '(#all | List of (extension | restriction | substitution))'. +./test/schemas/element-err_0.xsd:30: element element: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}element': The attributes 'default' and 'fixed' are mutually exclusive. +./test/schemas/element-err_0.xsd:31: element complexType: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}element': The attribute 'type' and the child are mutually exclusive. +./test/schemas/element-err_0.xsd:32: element simpleType: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}element': The content is not valid. Expected is (annotation?, ((simpleType | complexType)?, (unique | key | keyref)*)). diff --git a/result/schemas/element-minmax-err_0_0 b/result/schemas/element-minmax-err_0_0 new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/element-minmax-err_0_0.err b/result/schemas/element-minmax-err_0_0.err new file mode 100644 index 0000000..e53f3d8 --- /dev/null +++ b/result/schemas/element-minmax-err_0_0.err @@ -0,0 +1 @@ +./test/schemas/element-minmax-err_0.xsd:6: element element: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}element', attribute 'maxOccurs': The value must be greater than or equal to 1. diff --git a/result/schemas/empty-value_1_0 b/result/schemas/empty-value_1_0 new file mode 100644 index 0000000..5864557 --- /dev/null +++ b/result/schemas/empty-value_1_0 @@ -0,0 +1 @@ +./test/schemas/empty-value_0.xml validates diff --git a/result/schemas/empty-value_1_0.err b/result/schemas/empty-value_1_0.err new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/empty-value_1_1 b/result/schemas/empty-value_1_1 new file mode 100644 index 0000000..2e2d329 --- /dev/null +++ b/result/schemas/empty-value_1_1 @@ -0,0 +1 @@ +./test/schemas/empty-value_1.xml validates diff --git a/result/schemas/empty-value_1_1.err b/result/schemas/empty-value_1_1.err new file mode 100644 index 0000000..e69de29 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 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 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 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 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..bb5b047 --- /dev/null +++ b/result/schemas/extension1_0_1.err @@ -0,0 +1 @@ +./test/schemas/extension1_1.xml:1: element title: Schemas validity error : Element 'title', attribute 'langue': The attribute 'langue' is not allowed. 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..161fe9e --- /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': Element content is not allowed, because the content type is a simple type definition. diff --git a/result/schemas/extension2_1_0 b/result/schemas/extension2_1_0 new file mode 100644 index 0000000..88c15aa --- /dev/null +++ b/result/schemas/extension2_1_0 @@ -0,0 +1 @@ +./test/schemas/extension2_0.xml validates diff --git a/result/schemas/extension2_1_0.err b/result/schemas/extension2_1_0.err new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/facet-unionST-err1_0_0 b/result/schemas/facet-unionST-err1_0_0 new file mode 100644 index 0000000..baf8280 --- /dev/null +++ b/result/schemas/facet-unionST-err1_0_0 @@ -0,0 +1 @@ +./test/schemas/facet-unionST-err1_0.xml fails to validate diff --git a/result/schemas/facet-unionST-err1_0_0.err b/result/schemas/facet-unionST-err1_0_0.err new file mode 100644 index 0000000..392dbe5 --- /dev/null +++ b/result/schemas/facet-unionST-err1_0_0.err @@ -0,0 +1 @@ +./test/schemas/facet-unionST-err1_0.xml:3: element foo: Schemas validity error : Element '{http://FOO}foo': 'tiny' is not a valid value of the union type '{http://FOO}fooType.B'. diff --git a/result/schemas/facet-whiteSpace_0_0 b/result/schemas/facet-whiteSpace_0_0 new file mode 100644 index 0000000..63276c6 --- /dev/null +++ b/result/schemas/facet-whiteSpace_0_0 @@ -0,0 +1 @@ +./test/schemas/facet-whiteSpace_0.xml validates diff --git a/result/schemas/facet-whiteSpace_0_0.err b/result/schemas/facet-whiteSpace_0_0.err new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/group0_0_0 b/result/schemas/group0_0_0 new file mode 100644 index 0000000..587a74a --- /dev/null +++ b/result/schemas/group0_0_0 @@ -0,0 +1 @@ +./test/schemas/group0_0.xml validates diff --git a/result/schemas/group0_0_0.err b/result/schemas/group0_0_0.err new file mode 100644 index 0000000..e69de29 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 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..eb0c74c --- /dev/null +++ b/result/schemas/hexbinary_0_1.err @@ -0,0 +1,10 @@ +./test/schemas/hexbinary_1.xml:6: element hex: Schemas validity error : Element 'hex': '0' is not a valid value of the atomic type 'xs:hexBinary'. +./test/schemas/hexbinary_1.xml:7: element hex: Schemas validity error : Element 'hex': '0123456789ABCDEFGH' is not a valid value of the atomic type 'xs:hexBinary'. +./test/schemas/hexbinary_1.xml:8: element hex: Schemas validity error : Element 'hex': '+abcdef0123456789' is not a valid value of the atomic type 'xs:hexBinary'. +./test/schemas/hexbinary_1.xml:9: element hex: Schemas validity error : Element 'hex': '-0123456789abcdef' is not a valid value of the atomic type 'xs:hexBinary'. +./test/schemas/hexbinary_1.xml:11: element hex2: Schemas validity error : Element 'hex2': [facet 'maxLength'] The value has a length of '9'; this exceeds the allowed maximum length of '8'. +./test/schemas/hexbinary_1.xml:11: element hex2: Schemas validity error : Element 'hex2': '112233445566778899' is not a valid value of the local atomic type. +./test/schemas/hexbinary_1.xml:13: element hex3: Schemas validity error : Element 'hex3': [facet 'length'] The value has a length of '1'; this differs from the allowed length of '2'. +./test/schemas/hexbinary_1.xml:13: element hex3: Schemas validity error : Element 'hex3': 'ab' is not a valid value of the local atomic type. +./test/schemas/hexbinary_1.xml:14: element hex3: Schemas validity error : Element 'hex3': [facet 'length'] The value has a length of '3'; this differs from the allowed length of '2'. +./test/schemas/hexbinary_1.xml:14: element hex3: Schemas validity error : Element 'hex3': '00fedc' is not a valid value of the local atomic type. diff --git a/result/schemas/idc-keyref-err1_1_0 b/result/schemas/idc-keyref-err1_1_0 new file mode 100644 index 0000000..d4333a9 --- /dev/null +++ b/result/schemas/idc-keyref-err1_1_0 @@ -0,0 +1 @@ +./test/schemas/idc-keyref-err1_0.xml fails to validate diff --git a/result/schemas/idc-keyref-err1_1_0.err b/result/schemas/idc-keyref-err1_1_0.err new file mode 100644 index 0000000..8e9cb20 --- /dev/null +++ b/result/schemas/idc-keyref-err1_1_0.err @@ -0,0 +1 @@ +./test/schemas/idc-keyref-err1_0.xml:12: Schemas validity error : Element '{urn:test:foo}Ref': No match found for key-sequence ['L4'] of keyref '{urn:test:foo}LinkKeyRef'. 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 diff --git a/result/schemas/import1_0_0 b/result/schemas/import1_0_0 new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/import1_0_0.err b/result/schemas/import1_0_0.err new file mode 100644 index 0000000..96f572f --- /dev/null +++ b/result/schemas/import1_0_0.err @@ -0,0 +1,4 @@ +I/O warning : failed to load external entity "test/schemas/import1_0bc.imp" +./test/schemas/import1_0.xsd:11: element import: Schemas parser warning : Element '{http://www.w3.org/2001/XMLSchema}import': Failed to locate a schema at location 'test/schemas/import1_0bc.imp'. Skipping the import. +./test/schemas/import1_0.xsd:16: element import: Schemas parser warning : Element '{http://www.w3.org/2001/XMLSchema}import': Skipping import of schema located at 'test/schemas/import1_0b.imp' for the namespace 'http://BAR', since this namespace was already imported with the schema located at 'test/schemas/import1_0.imp'. +./test/schemas/import1_0.xsd:26: element element: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}element', attribute 'ref': The QName value '{http://BAR}bar.B' does not resolve to a(n) element declaration. diff --git a/result/schemas/import2_0_0 b/result/schemas/import2_0_0 new file mode 100644 index 0000000..2960b48 --- /dev/null +++ b/result/schemas/import2_0_0 @@ -0,0 +1 @@ +./test/schemas/import2_0.xml validates diff --git a/result/schemas/import2_0_0.err b/result/schemas/import2_0_0.err new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/include1_0_0 b/result/schemas/include1_0_0 new file mode 100644 index 0000000..8ba8a2e --- /dev/null +++ b/result/schemas/include1_0_0 @@ -0,0 +1 @@ +./test/schemas/include1_0.xml validates diff --git a/result/schemas/include1_0_0.err b/result/schemas/include1_0_0.err new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/include2_0_0 b/result/schemas/include2_0_0 new file mode 100644 index 0000000..7aea2b0 --- /dev/null +++ b/result/schemas/include2_0_0 @@ -0,0 +1 @@ +./test/schemas/include2_0.xml validates diff --git a/result/schemas/include2_0_0.err b/result/schemas/include2_0_0.err new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/include3_0_0 b/result/schemas/include3_0_0 new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/include3_0_0.err b/result/schemas/include3_0_0.err new file mode 100644 index 0000000..27bb5d0 --- /dev/null +++ b/result/schemas/include3_0_0.err @@ -0,0 +1 @@ +test/schemas/include3_0.inc:4: element element: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}element': A global element declaration '{http://FOO}bar' does already exist. 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 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 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 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 diff --git a/result/schemas/length3_0_0 b/result/schemas/length3_0_0 new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/length3_0_0.err b/result/schemas/length3_0_0.err new file mode 100644 index 0000000..65afcd7 --- /dev/null +++ b/result/schemas/length3_0_0.err @@ -0,0 +1 @@ +./test/schemas/length3_0.xsd:5: element element: Schemas parser error : element decl. 'size', attribute 'type': The QName value '{http://www.w3.org/2001/XMLSchema}non-positive-integer' does not resolve to a(n) type definition. 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 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..7a3b63b --- /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': Missing child element(s). Expected is ( string ). 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 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..0bc3c8a --- /dev/null +++ b/result/schemas/list0_1_0.err @@ -0,0 +1 @@ +./test/schemas/list0_0.xml:5: element string: Schemas validity error : Element 'string': This element is not expected. 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..7a3b63b --- /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': Missing child element(s). Expected is ( string ). 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 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 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 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 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 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..346af26 --- /dev/null +++ b/result/schemas/ns0_0_2.err @@ -0,0 +1 @@ +./test/schemas/ns0_2.xml:1: element foo: Schemas validity error : Element 'foo': No matching global declaration available for the validation root. 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..fd1cbd5 --- /dev/null +++ b/result/schemas/ns0_0_3.err @@ -0,0 +1 @@ +./test/schemas/ns0_3.xml:1: element foo: Schemas validity error : Element '{http://example.com/xsd/ns}foo', attribute '{http://example.com/xsd/ns}id': The attribute '{http://example.com/xsd/ns}id' is not allowed. 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..2512e8d --- /dev/null +++ b/result/schemas/ns0_0_4.err @@ -0,0 +1 @@ +./test/schemas/ns0_4.xml:2: element foo: Schemas validity error : Element '{http://example.com/xsd/ns}foo', attribute '{http://example.com/xsd/ns}id': The attribute '{http://example.com/xsd/ns}id' is not allowed. 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..1282888 --- /dev/null +++ b/result/schemas/ns0_1_0.err @@ -0,0 +1 @@ +./test/schemas/ns0_0.xml:1: element foo: Schemas validity error : Element '{http://example.com/xsd/ns}foo', attribute 'id': The attribute 'id' is not allowed. 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..99b2880 --- /dev/null +++ b/result/schemas/ns0_1_1.err @@ -0,0 +1 @@ +./test/schemas/ns0_1.xml:1: element foo: Schemas validity error : Element '{http://example.com/xsd/ns}foo', attribute 'id': The attribute 'id' is not allowed. 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..346af26 --- /dev/null +++ b/result/schemas/ns0_1_2.err @@ -0,0 +1 @@ +./test/schemas/ns0_2.xml:1: element foo: Schemas validity error : Element 'foo': No matching global declaration available for the validation root. 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 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 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 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 diff --git a/result/schemas/nvdcve_0_0 b/result/schemas/nvdcve_0_0 new file mode 100644 index 0000000..18e7c7c --- /dev/null +++ b/result/schemas/nvdcve_0_0 @@ -0,0 +1 @@ +./test/schemas/nvdcve_0.xml validates diff --git a/result/schemas/nvdcve_0_0.err b/result/schemas/nvdcve_0_0.err new file mode 100644 index 0000000..e69de29 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 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 diff --git a/result/schemas/poschargrp0_0_0 b/result/schemas/poschargrp0_0_0 new file mode 100644 index 0000000..de14f4d --- /dev/null +++ b/result/schemas/poschargrp0_0_0 @@ -0,0 +1 @@ +./test/schemas/poschargrp0_0.xml validates diff --git a/result/schemas/poschargrp0_0_0.err b/result/schemas/poschargrp0_0_0.err new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/regexp-char-ref_0_0 b/result/schemas/regexp-char-ref_0_0 new file mode 100644 index 0000000..40ceb7f --- /dev/null +++ b/result/schemas/regexp-char-ref_0_0 @@ -0,0 +1 @@ +./test/schemas/regexp-char-ref_0.xml validates diff --git a/result/schemas/regexp-char-ref_0_0.err b/result/schemas/regexp-char-ref_0_0.err new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/regexp-char-ref_1_0 b/result/schemas/regexp-char-ref_1_0 new file mode 100644 index 0000000..40ceb7f --- /dev/null +++ b/result/schemas/regexp-char-ref_1_0 @@ -0,0 +1 @@ +./test/schemas/regexp-char-ref_0.xml validates diff --git a/result/schemas/regexp-char-ref_1_0.err b/result/schemas/regexp-char-ref_1_0.err new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/restrict-CT-attr-ref_0_0 b/result/schemas/restrict-CT-attr-ref_0_0 new file mode 100644 index 0000000..77dba75 --- /dev/null +++ b/result/schemas/restrict-CT-attr-ref_0_0 @@ -0,0 +1 @@ +./test/schemas/restrict-CT-attr-ref_0.xml validates diff --git a/result/schemas/restrict-CT-attr-ref_0_0.err b/result/schemas/restrict-CT-attr-ref_0_0.err new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/restriction-attr1_0_0 b/result/schemas/restriction-attr1_0_0 new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/restriction-attr1_0_0.err b/result/schemas/restriction-attr1_0_0.err new file mode 100644 index 0000000..cdf003d --- /dev/null +++ b/result/schemas/restriction-attr1_0_0.err @@ -0,0 +1 @@ +./test/schemas/restriction-attr1_0.xsd:5: element complexType: Schemas parser error : local complex type, attribute use 'barA': The 'optional' attribute use is inconsistent with the corresponding 'required' attribute use of the base complex type definition '{http://FOO}typeA'. diff --git a/result/schemas/restriction-enum-1_1_0 b/result/schemas/restriction-enum-1_1_0 new file mode 100644 index 0000000..68e26cf --- /dev/null +++ b/result/schemas/restriction-enum-1_1_0 @@ -0,0 +1 @@ +./test/schemas/restriction-enum-1_0.xml fails to validate diff --git a/result/schemas/restriction-enum-1_1_0.err b/result/schemas/restriction-enum-1_1_0.err new file mode 100644 index 0000000..086d2de --- /dev/null +++ b/result/schemas/restriction-enum-1_1_0.err @@ -0,0 +1,2 @@ +./test/schemas/restriction-enum-1_0.xml:7: element foo: Schemas validity error : Element 'foo': [facet 'enumeration'] The value 'c' is not an element of the set {'a', 'b', 'd'}. +./test/schemas/restriction-enum-1_0.xml:7: element foo: Schemas validity error : Element 'foo': 'c' is not a valid value of the atomic type 'barType'. 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 diff --git a/result/schemas/scc-no-xmlns_0_0 b/result/schemas/scc-no-xmlns_0_0 new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/scc-no-xmlns_0_0.err b/result/schemas/scc-no-xmlns_0_0.err new file mode 100644 index 0000000..aad2b68 --- /dev/null +++ b/result/schemas/scc-no-xmlns_0_0.err @@ -0,0 +1 @@ +./test/schemas/scc-no-xmlns_0.xsd:7: element attribute: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}attribute', attribute 'name': The value of the attribute must not match 'xmlns'. diff --git a/result/schemas/scc-no-xsi_0_0 b/result/schemas/scc-no-xsi_0_0 new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/scc-no-xsi_0_0.err b/result/schemas/scc-no-xsi_0_0.err new file mode 100644 index 0000000..e04e3e4 --- /dev/null +++ b/result/schemas/scc-no-xsi_0_0.err @@ -0,0 +1 @@ +./test/schemas/scc-no-xsi_0.xsd:7: element attribute: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}attribute': The target namespace must not match 'http://www.w3.org/2001/XMLSchema-instance'. diff --git a/result/schemas/seq-dubl-elem1_0_0 b/result/schemas/seq-dubl-elem1_0_0 new file mode 100644 index 0000000..466d3a8 --- /dev/null +++ b/result/schemas/seq-dubl-elem1_0_0 @@ -0,0 +1 @@ +./test/schemas/seq-dubl-elem1_0.xml validates diff --git a/result/schemas/seq-dubl-elem1_0_0.err b/result/schemas/seq-dubl-elem1_0_0.err new file mode 100644 index 0000000..e69de29 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 diff --git a/result/schemas/src-attribute1_0_0 b/result/schemas/src-attribute1_0_0 new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/src-attribute1_0_0.err b/result/schemas/src-attribute1_0_0.err new file mode 100644 index 0000000..368d97c --- /dev/null +++ b/result/schemas/src-attribute1_0_0.err @@ -0,0 +1 @@ +./test/schemas/src-attribute1_0.xsd:9: element attribute: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}attribute': The attributes 'default' and 'fixed' are mutually exclusive. diff --git a/result/schemas/src-attribute2_0_0 b/result/schemas/src-attribute2_0_0 new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/src-attribute2_0_0.err b/result/schemas/src-attribute2_0_0.err new file mode 100644 index 0000000..ac6df6f --- /dev/null +++ b/result/schemas/src-attribute2_0_0.err @@ -0,0 +1 @@ +./test/schemas/src-attribute2_0.xsd:9: element attribute: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}attribute': The value of the attribute 'use' must be 'optional' if the attribute 'default' is present. diff --git a/result/schemas/src-attribute3-1_0_0 b/result/schemas/src-attribute3-1_0_0 new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/src-attribute3-1_0_0.err b/result/schemas/src-attribute3-1_0_0.err new file mode 100644 index 0000000..3345b3c --- /dev/null +++ b/result/schemas/src-attribute3-1_0_0.err @@ -0,0 +1 @@ +./test/schemas/src-attribute3-1_0.xsd:9: element attribute: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}attribute': The attribute 'name' is not allowed. diff --git a/result/schemas/src-attribute3-2-form_0_0 b/result/schemas/src-attribute3-2-form_0_0 new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/src-attribute3-2-form_0_0.err b/result/schemas/src-attribute3-2-form_0_0.err new file mode 100644 index 0000000..ad3667b --- /dev/null +++ b/result/schemas/src-attribute3-2-form_0_0.err @@ -0,0 +1 @@ +./test/schemas/src-attribute3-2-form_0.xsd:10: element attribute: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}attribute': The attribute 'form' is not allowed. diff --git a/result/schemas/src-attribute3-2-st_0_0 b/result/schemas/src-attribute3-2-st_0_0 new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/src-attribute3-2-st_0_0.err b/result/schemas/src-attribute3-2-st_0_0.err new file mode 100644 index 0000000..ae85e0a --- /dev/null +++ b/result/schemas/src-attribute3-2-st_0_0.err @@ -0,0 +1 @@ +./test/schemas/src-attribute3-2-st_0.xsd:11: element simpleType: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}attribute': The content is not valid. Expected is (annotation?). diff --git a/result/schemas/src-attribute3-2-type_0_0 b/result/schemas/src-attribute3-2-type_0_0 new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/src-attribute3-2-type_0_0.err b/result/schemas/src-attribute3-2-type_0_0.err new file mode 100644 index 0000000..50016d8 --- /dev/null +++ b/result/schemas/src-attribute3-2-type_0_0.err @@ -0,0 +1 @@ +./test/schemas/src-attribute3-2-type_0.xsd:10: element attribute: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}attribute': The attribute 'type' is not allowed. diff --git a/result/schemas/src-attribute4_0_0 b/result/schemas/src-attribute4_0_0 new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/src-attribute4_0_0.err b/result/schemas/src-attribute4_0_0.err new file mode 100644 index 0000000..cac6718 --- /dev/null +++ b/result/schemas/src-attribute4_0_0.err @@ -0,0 +1 @@ +./test/schemas/src-attribute4_0.xsd:8: element simpleType: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}attribute': The attribute 'type' and the child are mutually exclusive. diff --git a/result/schemas/src-element1_0_0 b/result/schemas/src-element1_0_0 new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/src-element1_0_0.err b/result/schemas/src-element1_0_0.err new file mode 100644 index 0000000..9d8b198 --- /dev/null +++ b/result/schemas/src-element1_0_0.err @@ -0,0 +1 @@ +./test/schemas/src-element1_0.xsd:7: element element: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}element': The attributes 'default' and 'fixed' are mutually exclusive. diff --git a/result/schemas/src-element2-1_0_0 b/result/schemas/src-element2-1_0_0 new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/src-element2-1_0_0.err b/result/schemas/src-element2-1_0_0.err new file mode 100644 index 0000000..01d89d6 --- /dev/null +++ b/result/schemas/src-element2-1_0_0.err @@ -0,0 +1 @@ +./test/schemas/src-element2-1_0.xsd:12: element element: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}element': The attributes 'ref' and 'name' are mutually exclusive. diff --git a/result/schemas/src-element2-2_0_0 b/result/schemas/src-element2-2_0_0 new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/src-element2-2_0_0.err b/result/schemas/src-element2-2_0_0.err new file mode 100644 index 0000000..90cd79a --- /dev/null +++ b/result/schemas/src-element2-2_0_0.err @@ -0,0 +1,9 @@ +./test/schemas/src-element2-2_0.xsd:18: element element: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}element', attribute 'maxOccurs': The value must be greater than or equal to 1. +./test/schemas/src-element2-2_0.xsd:23: element complexType: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}element': The content is not valid. Expected is (annotation?). +./test/schemas/src-element2-2_0.xsd:29: element simpleType: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}element': The content is not valid. Expected is (annotation?). +./test/schemas/src-element2-2_0.xsd:36: element element: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}element', attribute 'type': Only the attributes 'minOccurs', 'maxOccurs' and 'id' are allowed in addition to 'ref'. +./test/schemas/src-element2-2_0.xsd:37: element element: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}element', attribute 'nillable': Only the attributes 'minOccurs', 'maxOccurs' and 'id' are allowed in addition to 'ref'. +./test/schemas/src-element2-2_0.xsd:38: element element: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}element', attribute 'default': Only the attributes 'minOccurs', 'maxOccurs' and 'id' are allowed in addition to 'ref'. +./test/schemas/src-element2-2_0.xsd:39: element element: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}element', attribute 'fixed': Only the attributes 'minOccurs', 'maxOccurs' and 'id' are allowed in addition to 'ref'. +./test/schemas/src-element2-2_0.xsd:40: element element: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}element', attribute 'form': Only the attributes 'minOccurs', 'maxOccurs' and 'id' are allowed in addition to 'ref'. +./test/schemas/src-element2-2_0.xsd:41: element element: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}element', attribute 'block': Only the attributes 'minOccurs', 'maxOccurs' and 'id' are allowed in addition to 'ref'. diff --git a/result/schemas/src-element3_0_0 b/result/schemas/src-element3_0_0 new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/src-element3_0_0.err b/result/schemas/src-element3_0_0.err new file mode 100644 index 0000000..b8bd817 --- /dev/null +++ b/result/schemas/src-element3_0_0.err @@ -0,0 +1,2 @@ +./test/schemas/src-element3_0.xsd:8: element complexType: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}element': The attribute 'type' and the child are mutually exclusive. +./test/schemas/src-element3_0.xsd:16: element simpleType: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}element': The attribute 'type' and the child are mutually exclusive. diff --git a/result/schemas/subst-group-1_0_1 b/result/schemas/subst-group-1_0_1 new file mode 100644 index 0000000..0775cdd --- /dev/null +++ b/result/schemas/subst-group-1_0_1 @@ -0,0 +1 @@ +./test/schemas/subst-group-1_1.xml validates diff --git a/result/schemas/subst-group-1_0_1.err b/result/schemas/subst-group-1_0_1.err new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/union2_1_1 b/result/schemas/union2_1_1 new file mode 100644 index 0000000..0d4ee15 --- /dev/null +++ b/result/schemas/union2_1_1 @@ -0,0 +1 @@ +./test/schemas/union2_1.xml fails to validate diff --git a/result/schemas/union2_1_1.err b/result/schemas/union2_1_1.err new file mode 100644 index 0000000..a66ad59 --- /dev/null +++ b/result/schemas/union2_1_1.err @@ -0,0 +1,3 @@ +./test/schemas/union2_1.xml:4: element ELEMENTS: Schemas validity error : Element '{urn:test:foo}ELEMENTS': ' + 5 +' is not a valid value of the local union type. diff --git a/result/schemas/union_0_0 b/result/schemas/union_0_0 new file mode 100644 index 0000000..3dbc861 --- /dev/null +++ b/result/schemas/union_0_0 @@ -0,0 +1 @@ +./test/schemas/union_0_0.xml validates diff --git a/result/schemas/union_0_0.err b/result/schemas/union_0_0.err new file mode 100644 index 0000000..e69de29 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 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 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 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 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 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..1b964b2 --- /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 : Element 'born': '196T6-08-22' is not a valid value of the atomic 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..6c6e52f --- /dev/null +++ b/result/schemas/vdv-first4_0_2.err @@ -0,0 +1,2 @@ +./test/schemas/vdv-first4_2.xml:24: element born: Schemas validity error : Element 'born': [facet 'pattern'] The value '2000-01-20Z' is not accepted by the pattern '[^:Z]*'. +./test/schemas/vdv-first4_2.xml:24: element born: Schemas validity error : Element 'born': '2000-01-20Z' is not a valid value of the atomic type 'date'. 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 diff --git a/result/schemas/xsd-list-itemType_0_0 b/result/schemas/xsd-list-itemType_0_0 new file mode 100644 index 0000000..5ecd885 --- /dev/null +++ b/result/schemas/xsd-list-itemType_0_0 @@ -0,0 +1 @@ +./test/schemas/xsd-list-itemType_0.xml validates diff --git a/result/schemas/xsd-list-itemType_0_0.err b/result/schemas/xsd-list-itemType_0_0.err new file mode 100644 index 0000000..e69de29 diff --git a/result/schemas/xsd-simpleType-varieties_0_0 b/result/schemas/xsd-simpleType-varieties_0_0 new file mode 100644 index 0000000..a66506a --- /dev/null +++ b/result/schemas/xsd-simpleType-varieties_0_0 @@ -0,0 +1 @@ +./test/schemas/xsd-simpleType-varieties_0.xml validates diff --git a/result/schemas/xsd-simpleType-varieties_0_0.err b/result/schemas/xsd-simpleType-varieties_0_0.err new file mode 100644 index 0000000..e69de29 diff --git a/result/schematron/zvon10_0 b/result/schematron/zvon10_0 new file mode 100644 index 0000000..9aae4b1 --- /dev/null +++ b/result/schematron/zvon10_0 @@ -0,0 +1,4 @@ + + + + diff --git a/result/schematron/zvon10_0.err b/result/schematron/zvon10_0.err new file mode 100644 index 0000000..524ecd8 --- /dev/null +++ b/result/schematron/zvon10_0.err @@ -0,0 +1,5 @@ +Pattern: Open model +/AAA line 1: CCC element is not present +Pattern: Closed model +/AAA line 1: CCC element is not present +./test/schematron/zvon10_0.xml fails to validate diff --git a/result/schematron/zvon10_1 b/result/schematron/zvon10_1 new file mode 100644 index 0000000..d82353a --- /dev/null +++ b/result/schematron/zvon10_1 @@ -0,0 +1,5 @@ + + + + + diff --git a/result/schematron/zvon10_1.err b/result/schematron/zvon10_1.err new file mode 100644 index 0000000..9bc361c --- /dev/null +++ b/result/schematron/zvon10_1.err @@ -0,0 +1,6 @@ +Pattern: Open model +/AAA line 1: CCC element is not present +Pattern: Closed model +/AAA line 1: CCC element is not present +/AAA line 1: There is an extra element +./test/schematron/zvon10_1.xml fails to validate diff --git a/result/schematron/zvon11_0 b/result/schematron/zvon11_0 new file mode 100644 index 0000000..49c8005 --- /dev/null +++ b/result/schematron/zvon11_0 @@ -0,0 +1,4 @@ + + + + diff --git a/result/schematron/zvon11_0.err b/result/schematron/zvon11_0.err new file mode 100644 index 0000000..ab4aa74 --- /dev/null +++ b/result/schematron/zvon11_0.err @@ -0,0 +1,2 @@ +Pattern: Attributes present +./test/schematron/zvon11_0.xml validates diff --git a/result/schematron/zvon11_1 b/result/schematron/zvon11_1 new file mode 100644 index 0000000..a5328e0 --- /dev/null +++ b/result/schematron/zvon11_1 @@ -0,0 +1,4 @@ + + + + diff --git a/result/schematron/zvon11_1.err b/result/schematron/zvon11_1.err new file mode 100644 index 0000000..c1ae243 --- /dev/null +++ b/result/schematron/zvon11_1.err @@ -0,0 +1,3 @@ +Pattern: Attributes present +/AAA/BBB line 2: The element must not have an isolated bbb attribute +./test/schematron/zvon11_1.xml fails to validate diff --git a/result/schematron/zvon11_2 b/result/schematron/zvon11_2 new file mode 100644 index 0000000..673a7af --- /dev/null +++ b/result/schematron/zvon11_2 @@ -0,0 +1,4 @@ + + + + diff --git a/result/schematron/zvon11_2.err b/result/schematron/zvon11_2.err new file mode 100644 index 0000000..35117f7 --- /dev/null +++ b/result/schematron/zvon11_2.err @@ -0,0 +1,3 @@ +Pattern: Attributes present +/AAA/BBB line 2: The element must not have an isolated aaa attribute +./test/schematron/zvon11_2.xml fails to validate diff --git a/result/schematron/zvon11_3 b/result/schematron/zvon11_3 new file mode 100644 index 0000000..9aae4b1 --- /dev/null +++ b/result/schematron/zvon11_3 @@ -0,0 +1,4 @@ + + + + diff --git a/result/schematron/zvon11_3.err b/result/schematron/zvon11_3.err new file mode 100644 index 0000000..18517e5 --- /dev/null +++ b/result/schematron/zvon11_3.err @@ -0,0 +1,2 @@ +Pattern: Attributes present +./test/schematron/zvon11_3.xml validates diff --git a/result/schematron/zvon12_0 b/result/schematron/zvon12_0 new file mode 100644 index 0000000..7220804 --- /dev/null +++ b/result/schematron/zvon12_0 @@ -0,0 +1,4 @@ + + + + diff --git a/result/schematron/zvon12_0.err b/result/schematron/zvon12_0.err new file mode 100644 index 0000000..c7e9ed2 --- /dev/null +++ b/result/schematron/zvon12_0.err @@ -0,0 +1,3 @@ +Pattern: Number of characters in an abbreviation +/AAA/BBB line 2: There is not enough letters in the abbreviation +./test/schematron/zvon12_0.xml fails to validate diff --git a/result/schematron/zvon12_1 b/result/schematron/zvon12_1 new file mode 100644 index 0000000..362de34 --- /dev/null +++ b/result/schematron/zvon12_1 @@ -0,0 +1,4 @@ + + + + diff --git a/result/schematron/zvon12_1.err b/result/schematron/zvon12_1.err new file mode 100644 index 0000000..486c0be --- /dev/null +++ b/result/schematron/zvon12_1.err @@ -0,0 +1,2 @@ +Pattern: Number of characters in an abbreviation +./test/schematron/zvon12_1.xml validates diff --git a/result/schematron/zvon12_2 b/result/schematron/zvon12_2 new file mode 100644 index 0000000..bbbf7c7 --- /dev/null +++ b/result/schematron/zvon12_2 @@ -0,0 +1,4 @@ + + + + diff --git a/result/schematron/zvon12_2.err b/result/schematron/zvon12_2.err new file mode 100644 index 0000000..5edaf30 --- /dev/null +++ b/result/schematron/zvon12_2.err @@ -0,0 +1,3 @@ +Pattern: Number of characters in an abbreviation +/AAA/BBB line 2: There is too much letters in the abbreviation +./test/schematron/zvon12_2.xml fails to validate diff --git a/result/schematron/zvon13_0 b/result/schematron/zvon13_0 new file mode 100644 index 0000000..e1295c3 --- /dev/null +++ b/result/schematron/zvon13_0 @@ -0,0 +1,7 @@ + + + 20 + 30 + 10 + 50 + diff --git a/result/schematron/zvon13_0.err b/result/schematron/zvon13_0.err new file mode 100644 index 0000000..ed98cb3 --- /dev/null +++ b/result/schematron/zvon13_0.err @@ -0,0 +1,3 @@ +Pattern: Sum equals 100%. +/Total line 1: The values do not sum to 100%. +./test/schematron/zvon13_0.xml fails to validate diff --git a/result/schematron/zvon13_1 b/result/schematron/zvon13_1 new file mode 100644 index 0000000..401e919 --- /dev/null +++ b/result/schematron/zvon13_1 @@ -0,0 +1,6 @@ + + + 20 + 10 + 50 + diff --git a/result/schematron/zvon13_1.err b/result/schematron/zvon13_1.err new file mode 100644 index 0000000..e0f02c2 --- /dev/null +++ b/result/schematron/zvon13_1.err @@ -0,0 +1,3 @@ +Pattern: Sum equals 100%. +/Total line 1: The values do not sum to 100%. +./test/schematron/zvon13_1.xml fails to validate diff --git a/result/schematron/zvon13_2 b/result/schematron/zvon13_2 new file mode 100644 index 0000000..cb1df2e --- /dev/null +++ b/result/schematron/zvon13_2 @@ -0,0 +1,6 @@ + + + 20 + 30 + 50 + diff --git a/result/schematron/zvon13_2.err b/result/schematron/zvon13_2.err new file mode 100644 index 0000000..dfab61f --- /dev/null +++ b/result/schematron/zvon13_2.err @@ -0,0 +1,2 @@ +Pattern: Sum equals 100%. +./test/schematron/zvon13_2.xml validates diff --git a/result/schematron/zvon14_0 b/result/schematron/zvon14_0 new file mode 100644 index 0000000..c72e0c2 --- /dev/null +++ b/result/schematron/zvon14_0 @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/result/schematron/zvon14_0.err b/result/schematron/zvon14_0.err new file mode 100644 index 0000000..60155da --- /dev/null +++ b/result/schematron/zvon14_0.err @@ -0,0 +1,4 @@ +Pattern: a child of selected elements +/AAA/CCC line 5: Element CCC must not be a child of element AAA +/AAA/DDD/EEE/CCC line 9: Element CCC must not be a child of element EEE +./test/schematron/zvon14_0.xml fails to validate diff --git a/result/schematron/zvon15_0 b/result/schematron/zvon15_0 new file mode 100644 index 0000000..56500fe --- /dev/null +++ b/result/schematron/zvon15_0 @@ -0,0 +1,5 @@ + + + + + diff --git a/result/schematron/zvon15_0.err b/result/schematron/zvon15_0.err new file mode 100644 index 0000000..5234889 --- /dev/null +++ b/result/schematron/zvon15_0.err @@ -0,0 +1,4 @@ +Pattern: id is the only permited attribute name +/AAA line 1: Attribute name is forbidden in element AAA +/AAA/CCC line 3: Attribute color is forbidden in element CCC +./test/schematron/zvon15_0.xml fails to validate diff --git a/result/schematron/zvon1_0 b/result/schematron/zvon1_0 new file mode 100644 index 0000000..9aae4b1 --- /dev/null +++ b/result/schematron/zvon1_0 @@ -0,0 +1,4 @@ + + + + diff --git a/result/schematron/zvon1_0.err b/result/schematron/zvon1_0.err new file mode 100644 index 0000000..0d42184 --- /dev/null +++ b/result/schematron/zvon1_0.err @@ -0,0 +1,8 @@ +Pattern: Print both cases +/AAA line 1: BBB element is present. +/AAA line 1: AAA misses attribute name. +Pattern: Print positive result only +/AAA line 1: BBB element is present. +Pattern: Print negative result only +/AAA line 1: AAA misses attribute name. +./test/schematron/zvon1_0.xml fails to validate diff --git a/result/schematron/zvon1_1 b/result/schematron/zvon1_1 new file mode 100644 index 0000000..0a06953 --- /dev/null +++ b/result/schematron/zvon1_1 @@ -0,0 +1,4 @@ + + + + diff --git a/result/schematron/zvon1_1.err b/result/schematron/zvon1_1.err new file mode 100644 index 0000000..70ee87a --- /dev/null +++ b/result/schematron/zvon1_1.err @@ -0,0 +1,8 @@ +Pattern: Print both cases +/AAA line 1: BBB element is missing. +/AAA line 1: AAA misses attribute name. +Pattern: Print positive result only +Pattern: Print negative result only +/AAA line 1: BBB element is missing. +/AAA line 1: AAA misses attribute name. +./test/schematron/zvon1_1.xml fails to validate diff --git a/result/schematron/zvon2_0 b/result/schematron/zvon2_0 new file mode 100644 index 0000000..695bc8f --- /dev/null +++ b/result/schematron/zvon2_0 @@ -0,0 +1,5 @@ + + + bbbb + cccc + diff --git a/result/schematron/zvon2_0.err b/result/schematron/zvon2_0.err new file mode 100644 index 0000000..f4e4a7f --- /dev/null +++ b/result/schematron/zvon2_0.err @@ -0,0 +1,2 @@ +Pattern: Character @ forbidden +./test/schematron/zvon2_0.xml validates diff --git a/result/schematron/zvon2_1 b/result/schematron/zvon2_1 new file mode 100644 index 0000000..2af2cd0 --- /dev/null +++ b/result/schematron/zvon2_1 @@ -0,0 +1,5 @@ + + + bbbb@bbb.com + ccc@ccc.com + diff --git a/result/schematron/zvon2_1.err b/result/schematron/zvon2_1.err new file mode 100644 index 0000000..28f3e99 --- /dev/null +++ b/result/schematron/zvon2_1.err @@ -0,0 +1,5 @@ +Pattern: Character @ forbidden +/AAA line 1: Text in element AAA must not contain character @ +/AAA/BBB line 2: Text in element BBB must not contain character @ +/AAA/CCC line 3: Text in element CCC must not contain character @ +./test/schematron/zvon2_1.xml fails to validate diff --git a/result/schematron/zvon2_2 b/result/schematron/zvon2_2 new file mode 100644 index 0000000..585cf0c --- /dev/null +++ b/result/schematron/zvon2_2 @@ -0,0 +1,6 @@ + + + bbbb + cccc + aaa@aaa.net + diff --git a/result/schematron/zvon2_2.err b/result/schematron/zvon2_2.err new file mode 100644 index 0000000..40dc7ca --- /dev/null +++ b/result/schematron/zvon2_2.err @@ -0,0 +1,3 @@ +Pattern: Character @ forbidden +/AAA line 1: Text in element AAA must not contain character @ +./test/schematron/zvon2_2.xml fails to validate diff --git a/result/schematron/zvon3_0 b/result/schematron/zvon3_0 new file mode 100644 index 0000000..a8a6ed7 --- /dev/null +++ b/result/schematron/zvon3_0 @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/result/schematron/zvon3_0.err b/result/schematron/zvon3_0.err new file mode 100644 index 0000000..419e729 --- /dev/null +++ b/result/schematron/zvon3_0.err @@ -0,0 +1,6 @@ +Pattern: Attribute test +/AAA/BBB/CCC[1] line 3: attribute name is not present +/AAA/BBB/CCC[2] line 4: attribute name is not present +/AAA/CCC[1] line 6: attribute name is present +/AAA/CCC[2] line 7: attribute name is present +./test/schematron/zvon3_0.xml fails to validate diff --git a/result/schematron/zvon4_0 b/result/schematron/zvon4_0 new file mode 100644 index 0000000..b1e694e --- /dev/null +++ b/result/schematron/zvon4_0 @@ -0,0 +1,7 @@ + + + + + + + diff --git a/result/schematron/zvon4_0.err b/result/schematron/zvon4_0.err new file mode 100644 index 0000000..6aa6b2b --- /dev/null +++ b/result/schematron/zvon4_0.err @@ -0,0 +1,3 @@ +Pattern: Root test +/AAA line 1: Root element is AAA +./test/schematron/zvon4_0.xml fails to validate diff --git a/result/schematron/zvon4_1 b/result/schematron/zvon4_1 new file mode 100644 index 0000000..6b1facc --- /dev/null +++ b/result/schematron/zvon4_1 @@ -0,0 +1,7 @@ + + + + + + + diff --git a/result/schematron/zvon4_1.err b/result/schematron/zvon4_1.err new file mode 100644 index 0000000..4ad324f --- /dev/null +++ b/result/schematron/zvon4_1.err @@ -0,0 +1,3 @@ +Pattern: Root test +/XXX line 1: Root element is XXX, not AAA +./test/schematron/zvon4_1.xml fails to validate diff --git a/result/schematron/zvon5_0 b/result/schematron/zvon5_0 new file mode 100644 index 0000000..d763505 --- /dev/null +++ b/result/schematron/zvon5_0 @@ -0,0 +1,6 @@ + + + + + + diff --git a/result/schematron/zvon5_0.err b/result/schematron/zvon5_0.err new file mode 100644 index 0000000..91ef5f2 --- /dev/null +++ b/result/schematron/zvon5_0.err @@ -0,0 +1,7 @@ +Pattern: Select empty elements CCC +/AAA/BBB/CCC line 3: Source contains an empty element CCC +/AAA/BBB/CCC line 3: [1]An element CCC does not contain any text +/AAA/BBB/CCC line 3: [2]An element CCC does not contain any text +/AAA/BBB/CCC line 3: [1]An element CCC does not contain any child element +/AAA/BBB/CCC line 3: [2]An element CCC does not contain any child element +./test/schematron/zvon5_0.xml fails to validate diff --git a/result/schematron/zvon5_1 b/result/schematron/zvon5_1 new file mode 100644 index 0000000..c76b756 --- /dev/null +++ b/result/schematron/zvon5_1 @@ -0,0 +1,6 @@ + + + + I am CCC element + + diff --git a/result/schematron/zvon5_1.err b/result/schematron/zvon5_1.err new file mode 100644 index 0000000..f4ce6d4 --- /dev/null +++ b/result/schematron/zvon5_1.err @@ -0,0 +1,5 @@ +Pattern: Select empty elements CCC +/AAA/BBB/CCC line 3: Source contains an empty element CCC +/AAA/BBB/CCC line 3: [1]An element CCC does not contain any child element +/AAA/BBB/CCC line 3: [2]An element CCC does not contain any child element +./test/schematron/zvon5_1.xml fails to validate diff --git a/result/schematron/zvon5_2 b/result/schematron/zvon5_2 new file mode 100644 index 0000000..ddc11fe --- /dev/null +++ b/result/schematron/zvon5_2 @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/result/schematron/zvon5_2.err b/result/schematron/zvon5_2.err new file mode 100644 index 0000000..8c69e79 --- /dev/null +++ b/result/schematron/zvon5_2.err @@ -0,0 +1,5 @@ +Pattern: Select empty elements CCC +/AAA/BBB/CCC line 3: Source contains an empty element CCC +/AAA/BBB/CCC line 3: [1]An element CCC does not contain any text +/AAA/BBB/CCC line 3: [2]An element CCC does not contain any text +./test/schematron/zvon5_2.xml fails to validate diff --git a/result/schematron/zvon6_0 b/result/schematron/zvon6_0 new file mode 100644 index 0000000..6539765 --- /dev/null +++ b/result/schematron/zvon6_0 @@ -0,0 +1,4 @@ + + +aaa + diff --git a/result/schematron/zvon6_0.err b/result/schematron/zvon6_0.err new file mode 100644 index 0000000..5cc3b37 --- /dev/null +++ b/result/schematron/zvon6_0.err @@ -0,0 +1,3 @@ +Pattern: Predefined values +/AAA line 1: O.K. +./test/schematron/zvon6_0.xml fails to validate diff --git a/result/schematron/zvon6_1 b/result/schematron/zvon6_1 new file mode 100644 index 0000000..e0c2e73 --- /dev/null +++ b/result/schematron/zvon6_1 @@ -0,0 +1,4 @@ + + + bbb + diff --git a/result/schematron/zvon6_1.err b/result/schematron/zvon6_1.err new file mode 100644 index 0000000..8b728d4 --- /dev/null +++ b/result/schematron/zvon6_1.err @@ -0,0 +1,3 @@ +Pattern: Predefined values +/AAA line 1: O.K. +./test/schematron/zvon6_1.xml fails to validate diff --git a/result/schematron/zvon6_2 b/result/schematron/zvon6_2 new file mode 100644 index 0000000..edc24a9 --- /dev/null +++ b/result/schematron/zvon6_2 @@ -0,0 +1,4 @@ + + + ccc + diff --git a/result/schematron/zvon6_2.err b/result/schematron/zvon6_2.err new file mode 100644 index 0000000..1868934 --- /dev/null +++ b/result/schematron/zvon6_2.err @@ -0,0 +1,3 @@ +Pattern: Predefined values +/AAA line 1: The AAA value is not permitted. +./test/schematron/zvon6_2.xml fails to validate diff --git a/result/schematron/zvon7_0 b/result/schematron/zvon7_0 new file mode 100644 index 0000000..6539765 --- /dev/null +++ b/result/schematron/zvon7_0 @@ -0,0 +1,4 @@ + + +aaa + diff --git a/result/schematron/zvon7_0.err b/result/schematron/zvon7_0.err new file mode 100644 index 0000000..df427d6 --- /dev/null +++ b/result/schematron/zvon7_0.err @@ -0,0 +1,3 @@ +Pattern: Test integer +/AAA line 1: The AAA value is not an integer. +./test/schematron/zvon7_0.xml fails to validate diff --git a/result/schematron/zvon7_1 b/result/schematron/zvon7_1 new file mode 100644 index 0000000..0a4007a --- /dev/null +++ b/result/schematron/zvon7_1 @@ -0,0 +1,4 @@ + + + 12.234 + diff --git a/result/schematron/zvon7_1.err b/result/schematron/zvon7_1.err new file mode 100644 index 0000000..aa1e0a1 --- /dev/null +++ b/result/schematron/zvon7_1.err @@ -0,0 +1,3 @@ +Pattern: Test integer +/AAA line 1: The AAA value is not an integer. +./test/schematron/zvon7_1.xml fails to validate diff --git a/result/schematron/zvon7_2 b/result/schematron/zvon7_2 new file mode 100644 index 0000000..8eb45e3 --- /dev/null +++ b/result/schematron/zvon7_2 @@ -0,0 +1,4 @@ + + +45 + diff --git a/result/schematron/zvon7_2.err b/result/schematron/zvon7_2.err new file mode 100644 index 0000000..abf8cc7 --- /dev/null +++ b/result/schematron/zvon7_2.err @@ -0,0 +1,3 @@ +Pattern: Test integer +/AAA line 1: O.K. +./test/schematron/zvon7_2.xml fails to validate diff --git a/result/schematron/zvon7_3 b/result/schematron/zvon7_3 new file mode 100644 index 0000000..35089dd --- /dev/null +++ b/result/schematron/zvon7_3 @@ -0,0 +1,4 @@ + + +0 + diff --git a/result/schematron/zvon7_3.err b/result/schematron/zvon7_3.err new file mode 100644 index 0000000..5b4b59f --- /dev/null +++ b/result/schematron/zvon7_3.err @@ -0,0 +1,3 @@ +Pattern: Test integer +/AAA line 1: O.K. +./test/schematron/zvon7_3.xml fails to validate diff --git a/result/schematron/zvon7_4 b/result/schematron/zvon7_4 new file mode 100644 index 0000000..0739eb4 --- /dev/null +++ b/result/schematron/zvon7_4 @@ -0,0 +1,4 @@ + + +-45 + diff --git a/result/schematron/zvon7_4.err b/result/schematron/zvon7_4.err new file mode 100644 index 0000000..de1ee89 --- /dev/null +++ b/result/schematron/zvon7_4.err @@ -0,0 +1,3 @@ +Pattern: Test integer +/AAA line 1: O.K. +./test/schematron/zvon7_4.xml fails to validate diff --git a/result/schematron/zvon8_0 b/result/schematron/zvon8_0 new file mode 100644 index 0000000..1932cd0 --- /dev/null +++ b/result/schematron/zvon8_0 @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/result/schematron/zvon8_0.err b/result/schematron/zvon8_0.err new file mode 100644 index 0000000..085e1de --- /dev/null +++ b/result/schematron/zvon8_0.err @@ -0,0 +1,3 @@ +Pattern: Test count +/XXX line 1: O.K. +./test/schematron/zvon8_0.xml fails to validate diff --git a/result/schematron/zvon8_1 b/result/schematron/zvon8_1 new file mode 100644 index 0000000..93e5cfd --- /dev/null +++ b/result/schematron/zvon8_1 @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/result/schematron/zvon8_1.err b/result/schematron/zvon8_1.err new file mode 100644 index 0000000..ae07d05 --- /dev/null +++ b/result/schematron/zvon8_1.err @@ -0,0 +1,3 @@ +Pattern: Test count +/XXX line 1: Some BBB are missing +./test/schematron/zvon8_1.xml fails to validate diff --git a/result/schematron/zvon8_2 b/result/schematron/zvon8_2 new file mode 100644 index 0000000..4eea77b --- /dev/null +++ b/result/schematron/zvon8_2 @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/result/schematron/zvon8_2.err b/result/schematron/zvon8_2.err new file mode 100644 index 0000000..37e8432 --- /dev/null +++ b/result/schematron/zvon8_2.err @@ -0,0 +1,3 @@ +Pattern: Test count +/XXX line 1: Some AAA are missing +./test/schematron/zvon8_2.xml fails to validate diff --git a/result/schematron/zvon9_0 b/result/schematron/zvon9_0 new file mode 100644 index 0000000..1f254ec --- /dev/null +++ b/result/schematron/zvon9_0 @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/result/schematron/zvon9_0.err b/result/schematron/zvon9_0.err new file mode 100644 index 0000000..a39ceeb --- /dev/null +++ b/result/schematron/zvon9_0.err @@ -0,0 +1,2 @@ +Pattern: Test attribute +./test/schematron/zvon9_0.xml validates diff --git a/result/schematron/zvon9_1 b/result/schematron/zvon9_1 new file mode 100644 index 0000000..0dc0df7 --- /dev/null +++ b/result/schematron/zvon9_1 @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/result/schematron/zvon9_1.err b/result/schematron/zvon9_1.err new file mode 100644 index 0000000..44c6f67 --- /dev/null +++ b/result/schematron/zvon9_1.err @@ -0,0 +1,3 @@ +Pattern: Test attribute +/AAA/CCC[1] line 2: Attribute id is used in wrong context +./test/schematron/zvon9_1.xml fails to validate diff --git a/result/schematron/zvon9_2 b/result/schematron/zvon9_2 new file mode 100644 index 0000000..b9218fc --- /dev/null +++ b/result/schematron/zvon9_2 @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/result/schematron/zvon9_2.err b/result/schematron/zvon9_2.err new file mode 100644 index 0000000..20b0884 --- /dev/null +++ b/result/schematron/zvon9_2.err @@ -0,0 +1,3 @@ +Pattern: Test attribute +/AAA/BBB/CCC line 5: Attribute id is missing +./test/schematron/zvon9_2.xml fails to validate diff --git a/result/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/base.err b/result/scripts/base.err new file mode 100644 index 0000000..e69de29 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/scripts/base2.err b/result/scripts/base2.err new file mode 100644 index 0000000..e69de29 diff --git a/result/scripts/set1 b/result/scripts/set1 new file mode 100644 index 0000000..b4c2c9a --- /dev/null +++ b/result/scripts/set1 @@ -0,0 +1,3 @@ +/ > / > + +/ > \ No newline at end of file diff --git a/result/scripts/set1.err b/result/scripts/set1.err new file mode 100644 index 0000000..e69de29 diff --git a/result/scripts/set3 b/result/scripts/set3 new file mode 100644 index 0000000..812b35f --- /dev/null +++ b/result/scripts/set3 @@ -0,0 +1,12 @@ +/ > a > Object is a Node Set : +Set contains 1 nodes: +1 ELEMENT a + default namespace href=bar +a > a > Object is a Node Set : +Set contains 2 nodes: +1 ELEMENT a + default namespace href=bar +2 ELEMENT b +a > + +a > \ No newline at end of file diff --git a/result/scripts/set3.err b/result/scripts/set3.err new file mode 100644 index 0000000..18f0d69 --- /dev/null +++ b/result/scripts/set3.err @@ -0,0 +1,3 @@ +./test/scripts/set3.xml:1: parser warning : xmlns: URI bar is not absolute +foo + ^ diff --git a/result/scripts/set4 b/result/scripts/set4 new file mode 100644 index 0000000..19e9a58 --- /dev/null +++ b/result/scripts/set4 @@ -0,0 +1,6 @@ +/ > b > b > Object is a Node Set : +Set contains 1 nodes: +1 ELEMENT a:c +b > + +b > \ No newline at end of file diff --git a/result/scripts/set4.err b/result/scripts/set4.err new file mode 100644 index 0000000..e69de29 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 @@ + + + + + Slashdot:News for Nerds. Stuff that Matters. + http://slashdot.org/ + News for Nerds. Stuff that Matters + + + + Slashdot + http://slashdot.org/images/slashdotlg.gif + http://slashdot.org + + + + 100 Mbit/s on Fibre to the home + http://slashdot.org/articles/99/06/06/1440211.shtml + + + + Gimp 1.2 Preview + http://slashdot.org/articles/99/06/06/1438246.shtml + + + + Sony's AIBO robot Sold Out + http://slashdot.org/articles/99/06/06/1432256.shtml + + + + Ask Slashdot: Another Word for "Hacker"? + http://slashdot.org/askslashdot/99/06/05/1815225.shtml + + + + Corel Linux FAQ + http://slashdot.org/articles/99/06/05/1842218.shtml + + + + Upside downsides MP3.COM. + http://slashdot.org/articles/99/06/05/1558210.shtml + + + + 2 Terabits of Bandwidth + http://slashdot.org/articles/99/06/05/1554258.shtml + + + + Suppression of cold fusion research? + http://slashdot.org/articles/99/06/04/2313200.shtml + + + + California Gov. Halts Wage Info Sale + http://slashdot.org/articles/99/06/04/235256.shtml + + + + Red Hat Announces IPO + http://slashdot.org/articles/99/06/04/0849207.shtml + + diff --git a/result/slashdot.rdf.rde b/result/slashdot.rdf.rde new file mode 100644 index 0000000..fecd24d --- /dev/null +++ b/result/slashdot.rdf.rde @@ -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.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.rdf.sax2 b/result/slashdot.rdf.sax2 new file mode 100644 index 0000000..c561cf8 --- /dev/null +++ b/result/slashdot.rdf.sax2 @@ -0,0 +1,221 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElementNs(RDF, rdf, 'http://www.w3.org/1999/02/22-rdf-syntax-ns#', 2, xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#', xmlns='http://my.netscape.com/rdf/simple/0.9/', 0, 0) +SAX.characters( + + , 4) +SAX.startElementNs(channel, NULL, 'http://my.netscape.com/rdf/simple/0.9/', 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(title, NULL, 'http://my.netscape.com/rdf/simple/0.9/', 0, 0, 0) +SAX.characters(Slashdot:News for Nerds. Stuff, 44) +SAX.endElementNs(title, NULL, 'http://my.netscape.com/rdf/simple/0.9/') +SAX.characters( + , 5) +SAX.startElementNs(link, NULL, 'http://my.netscape.com/rdf/simple/0.9/', 0, 0, 0) +SAX.characters(http://slashdot.org/, 20) +SAX.endElementNs(link, NULL, 'http://my.netscape.com/rdf/simple/0.9/') +SAX.characters( + , 5) +SAX.startElementNs(description, NULL, 'http://my.netscape.com/rdf/simple/0.9/', 0, 0, 0) +SAX.characters(News for Nerds. Stuff that Ma, 35) +SAX.endElementNs(description, NULL, 'http://my.netscape.com/rdf/simple/0.9/') +SAX.characters( + , 3) +SAX.endElementNs(channel, NULL, 'http://my.netscape.com/rdf/simple/0.9/') +SAX.characters( + + , 4) +SAX.startElementNs(image, NULL, 'http://my.netscape.com/rdf/simple/0.9/', 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(title, NULL, 'http://my.netscape.com/rdf/simple/0.9/', 0, 0, 0) +SAX.characters(Slashdot, 8) +SAX.endElementNs(title, NULL, 'http://my.netscape.com/rdf/simple/0.9/') +SAX.characters( + , 5) +SAX.startElementNs(url, NULL, 'http://my.netscape.com/rdf/simple/0.9/', 0, 0, 0) +SAX.characters(http://slashdot.org/images/sla, 41) +SAX.endElementNs(url, NULL, 'http://my.netscape.com/rdf/simple/0.9/') +SAX.characters( + , 5) +SAX.startElementNs(link, NULL, 'http://my.netscape.com/rdf/simple/0.9/', 0, 0, 0) +SAX.characters(http://slashdot.org, 19) +SAX.endElementNs(link, NULL, 'http://my.netscape.com/rdf/simple/0.9/') +SAX.characters( + , 3) +SAX.endElementNs(image, NULL, 'http://my.netscape.com/rdf/simple/0.9/') +SAX.characters( + + , 6) +SAX.startElementNs(item, NULL, 'http://my.netscape.com/rdf/simple/0.9/', 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(title, NULL, 'http://my.netscape.com/rdf/simple/0.9/', 0, 0, 0) +SAX.characters(100 Mbit/s on Fibre to the hom, 31) +SAX.endElementNs(title, NULL, 'http://my.netscape.com/rdf/simple/0.9/') +SAX.characters( + , 5) +SAX.startElementNs(link, NULL, 'http://my.netscape.com/rdf/simple/0.9/', 0, 0, 0) +SAX.characters(http://slashdot.org/articles/9, 51) +SAX.endElementNs(link, NULL, 'http://my.netscape.com/rdf/simple/0.9/') +SAX.characters( + , 3) +SAX.endElementNs(item, NULL, 'http://my.netscape.com/rdf/simple/0.9/') +SAX.characters( + + , 6) +SAX.startElementNs(item, NULL, 'http://my.netscape.com/rdf/simple/0.9/', 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(title, NULL, 'http://my.netscape.com/rdf/simple/0.9/', 0, 0, 0) +SAX.characters(Gimp 1.2 Preview, 16) +SAX.endElementNs(title, NULL, 'http://my.netscape.com/rdf/simple/0.9/') +SAX.characters( + , 5) +SAX.startElementNs(link, NULL, 'http://my.netscape.com/rdf/simple/0.9/', 0, 0, 0) +SAX.characters(http://slashdot.org/articles/9, 51) +SAX.endElementNs(link, NULL, 'http://my.netscape.com/rdf/simple/0.9/') +SAX.characters( + , 3) +SAX.endElementNs(item, NULL, 'http://my.netscape.com/rdf/simple/0.9/') +SAX.characters( + + , 6) +SAX.startElementNs(item, NULL, 'http://my.netscape.com/rdf/simple/0.9/', 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(title, NULL, 'http://my.netscape.com/rdf/simple/0.9/', 0, 0, 0) +SAX.characters(Sony's AIBO robot Sold Out, 26) +SAX.endElementNs(title, NULL, 'http://my.netscape.com/rdf/simple/0.9/') +SAX.characters( + , 5) +SAX.startElementNs(link, NULL, 'http://my.netscape.com/rdf/simple/0.9/', 0, 0, 0) +SAX.characters(http://slashdot.org/articles/9, 51) +SAX.endElementNs(link, NULL, 'http://my.netscape.com/rdf/simple/0.9/') +SAX.characters( + , 3) +SAX.endElementNs(item, NULL, 'http://my.netscape.com/rdf/simple/0.9/') +SAX.characters( + + , 6) +SAX.startElementNs(item, NULL, 'http://my.netscape.com/rdf/simple/0.9/', 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(title, NULL, 'http://my.netscape.com/rdf/simple/0.9/', 0, 0, 0) +SAX.characters(Ask Slashdot: Another Word for, 40) +SAX.endElementNs(title, NULL, 'http://my.netscape.com/rdf/simple/0.9/') +SAX.characters( + , 5) +SAX.startElementNs(link, NULL, 'http://my.netscape.com/rdf/simple/0.9/', 0, 0, 0) +SAX.characters(http://slashdot.org/askslashdo, 54) +SAX.endElementNs(link, NULL, 'http://my.netscape.com/rdf/simple/0.9/') +SAX.characters( + , 3) +SAX.endElementNs(item, NULL, 'http://my.netscape.com/rdf/simple/0.9/') +SAX.characters( + + , 6) +SAX.startElementNs(item, NULL, 'http://my.netscape.com/rdf/simple/0.9/', 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(title, NULL, 'http://my.netscape.com/rdf/simple/0.9/', 0, 0, 0) +SAX.characters(Corel Linux FAQ, 15) +SAX.endElementNs(title, NULL, 'http://my.netscape.com/rdf/simple/0.9/') +SAX.characters( + , 5) +SAX.startElementNs(link, NULL, 'http://my.netscape.com/rdf/simple/0.9/', 0, 0, 0) +SAX.characters(http://slashdot.org/articles/9, 51) +SAX.endElementNs(link, NULL, 'http://my.netscape.com/rdf/simple/0.9/') +SAX.characters( + , 3) +SAX.endElementNs(item, NULL, 'http://my.netscape.com/rdf/simple/0.9/') +SAX.characters( + + , 6) +SAX.startElementNs(item, NULL, 'http://my.netscape.com/rdf/simple/0.9/', 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(title, NULL, 'http://my.netscape.com/rdf/simple/0.9/', 0, 0, 0) +SAX.characters(Upside downsides MP3.COM., 25) +SAX.endElementNs(title, NULL, 'http://my.netscape.com/rdf/simple/0.9/') +SAX.characters( + , 5) +SAX.startElementNs(link, NULL, 'http://my.netscape.com/rdf/simple/0.9/', 0, 0, 0) +SAX.characters(http://slashdot.org/articles/9, 51) +SAX.endElementNs(link, NULL, 'http://my.netscape.com/rdf/simple/0.9/') +SAX.characters( + , 3) +SAX.endElementNs(item, NULL, 'http://my.netscape.com/rdf/simple/0.9/') +SAX.characters( + + , 6) +SAX.startElementNs(item, NULL, 'http://my.netscape.com/rdf/simple/0.9/', 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(title, NULL, 'http://my.netscape.com/rdf/simple/0.9/', 0, 0, 0) +SAX.characters(2 Terabits of Bandwidth, 23) +SAX.endElementNs(title, NULL, 'http://my.netscape.com/rdf/simple/0.9/') +SAX.characters( + , 5) +SAX.startElementNs(link, NULL, 'http://my.netscape.com/rdf/simple/0.9/', 0, 0, 0) +SAX.characters(http://slashdot.org/articles/9, 51) +SAX.endElementNs(link, NULL, 'http://my.netscape.com/rdf/simple/0.9/') +SAX.characters( + , 3) +SAX.endElementNs(item, NULL, 'http://my.netscape.com/rdf/simple/0.9/') +SAX.characters( + + , 6) +SAX.startElementNs(item, NULL, 'http://my.netscape.com/rdf/simple/0.9/', 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(title, NULL, 'http://my.netscape.com/rdf/simple/0.9/', 0, 0, 0) +SAX.characters(Suppression of cold fusion res, 36) +SAX.endElementNs(title, NULL, 'http://my.netscape.com/rdf/simple/0.9/') +SAX.characters( + , 5) +SAX.startElementNs(link, NULL, 'http://my.netscape.com/rdf/simple/0.9/', 0, 0, 0) +SAX.characters(http://slashdot.org/articles/9, 51) +SAX.endElementNs(link, NULL, 'http://my.netscape.com/rdf/simple/0.9/') +SAX.characters( + , 3) +SAX.endElementNs(item, NULL, 'http://my.netscape.com/rdf/simple/0.9/') +SAX.characters( + + , 6) +SAX.startElementNs(item, NULL, 'http://my.netscape.com/rdf/simple/0.9/', 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(title, NULL, 'http://my.netscape.com/rdf/simple/0.9/', 0, 0, 0) +SAX.characters(California Gov. Halts Wage Inf, 36) +SAX.endElementNs(title, NULL, 'http://my.netscape.com/rdf/simple/0.9/') +SAX.characters( + , 5) +SAX.startElementNs(link, NULL, 'http://my.netscape.com/rdf/simple/0.9/', 0, 0, 0) +SAX.characters(http://slashdot.org/articles/9, 50) +SAX.endElementNs(link, NULL, 'http://my.netscape.com/rdf/simple/0.9/') +SAX.characters( + , 3) +SAX.endElementNs(item, NULL, 'http://my.netscape.com/rdf/simple/0.9/') +SAX.characters( + + , 6) +SAX.startElementNs(item, NULL, 'http://my.netscape.com/rdf/simple/0.9/', 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(title, NULL, 'http://my.netscape.com/rdf/simple/0.9/', 0, 0, 0) +SAX.characters(Red Hat Announces IPO, 21) +SAX.endElementNs(title, NULL, 'http://my.netscape.com/rdf/simple/0.9/') +SAX.characters( + , 5) +SAX.startElementNs(link, NULL, 'http://my.netscape.com/rdf/simple/0.9/', 0, 0, 0) +SAX.characters(http://slashdot.org/articles/9, 51) +SAX.endElementNs(link, NULL, 'http://my.netscape.com/rdf/simple/0.9/') +SAX.characters( + , 3) +SAX.endElementNs(item, NULL, 'http://my.netscape.com/rdf/simple/0.9/') +SAX.characters( +, 1) +SAX.endElementNs(RDF, rdf, 'http://www.w3.org/1999/02/22-rdf-syntax-ns#') +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 @@ + + + + 100 Mbit/s on Fibre to the home + http://slashdot.org/articles/99/06/06/1440211.shtml + + CmdrTaco + wouldn't-it-be-nice + internet + 20 +
    articles
    + topicinternet.jpg +
    + + Gimp 1.2 Preview + http://slashdot.org/articles/99/06/06/1438246.shtml + + CmdrTaco + stuff-to-read + gimp + 12 +
    articles
    + topicgimp.gif +
    + + Sony's AIBO robot Sold Out + http://slashdot.org/articles/99/06/06/1432256.shtml + + CmdrTaco + stuff-to-see + tech + 10 +
    articles
    + topictech2.jpg +
    + + Ask Slashdot: Another Word for "Hacker"? + http://slashdot.org/askslashdot/99/06/05/1815225.shtml + + Cliff + hacker-vs-cracker + news + 385 +
    askslashdot
    + topicnews.gif +
    + + Corel Linux FAQ + http://slashdot.org/articles/99/06/05/1842218.shtml + + CmdrTaco + stuff-to-read + corel + 164 +
    articles
    + topiccorel.gif +
    + + Upside downsides MP3.COM. + http://slashdot.org/articles/99/06/05/1558210.shtml + + CmdrTaco + stuff-to-think-about + music + 48 +
    articles
    + topicmusic.gif +
    + + 2 Terabits of Bandwidth + http://slashdot.org/articles/99/06/05/1554258.shtml + + CmdrTaco + faster-porn + internet + 66 +
    articles
    + topicinternet.jpg +
    + + Suppression of cold fusion research? + http://slashdot.org/articles/99/06/04/2313200.shtml + + Hemos + possibly-probably + science + 217 +
    articles
    + topicscience.gif +
    + + California Gov. Halts Wage Info Sale + http://slashdot.org/articles/99/06/04/235256.shtml + + Hemos + woo-hoo! + usa + 16 +
    articles
    + topicus.gif +
    + + Red Hat Announces IPO + http://slashdot.org/articles/99/06/04/0849207.shtml + + Justin + details-sketchy + redhat + 155 +
    articles
    + topicredhat.gif +
    +
    diff --git a/result/slashdot.xml.rde b/result/slashdot.xml.rde new file mode 100644 index 0000000..56b6836 --- /dev/null +++ b/result/slashdot.xml.rde @@ -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.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/slashdot.xml.sax2 b/result/slashdot.xml.sax2 new file mode 100644 index 0000000..2ead70d --- /dev/null +++ b/result/slashdot.xml.sax2 @@ -0,0 +1,517 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElementNs(ultramode, NULL, NULL, 0, 0, 0) +SAX.characters( + , 2) +SAX.startElementNs(story, NULL, NULL, 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(title, NULL, NULL, 0, 0, 0) +SAX.characters(100 Mbit/s on Fibre to the hom, 31) +SAX.endElementNs(title, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(url, NULL, NULL, 0, 0, 0) +SAX.characters(http://slashdot.org/articles/9, 51) +SAX.endElementNs(url, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(time, NULL, NULL, 0, 0, 0) +SAX.characters(1999-06-06 14:39:59, 19) +SAX.endElementNs(time, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(author, NULL, NULL, 0, 0, 0) +SAX.characters(CmdrTaco, 8) +SAX.endElementNs(author, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(department, NULL, NULL, 0, 0, 0) +SAX.characters(wouldn't-it-be-nice, 19) +SAX.endElementNs(department, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(topic, NULL, NULL, 0, 0, 0) +SAX.characters(internet, 8) +SAX.endElementNs(topic, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(comments, NULL, NULL, 0, 0, 0) +SAX.characters(20, 2) +SAX.endElementNs(comments, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(section, NULL, NULL, 0, 0, 0) +SAX.characters(articles, 8) +SAX.endElementNs(section, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(image, NULL, NULL, 0, 0, 0) +SAX.characters(topicinternet.jpg, 17) +SAX.endElementNs(image, NULL, NULL) +SAX.characters( + , 3) +SAX.endElementNs(story, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(story, NULL, NULL, 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(title, NULL, NULL, 0, 0, 0) +SAX.characters(Gimp 1.2 Preview, 16) +SAX.endElementNs(title, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(url, NULL, NULL, 0, 0, 0) +SAX.characters(http://slashdot.org/articles/9, 51) +SAX.endElementNs(url, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(time, NULL, NULL, 0, 0, 0) +SAX.characters(1999-06-06 14:38:40, 19) +SAX.endElementNs(time, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(author, NULL, NULL, 0, 0, 0) +SAX.characters(CmdrTaco, 8) +SAX.endElementNs(author, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(department, NULL, NULL, 0, 0, 0) +SAX.characters(stuff-to-read, 13) +SAX.endElementNs(department, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(topic, NULL, NULL, 0, 0, 0) +SAX.characters(gimp, 4) +SAX.endElementNs(topic, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(comments, NULL, NULL, 0, 0, 0) +SAX.characters(12, 2) +SAX.endElementNs(comments, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(section, NULL, NULL, 0, 0, 0) +SAX.characters(articles, 8) +SAX.endElementNs(section, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(image, NULL, NULL, 0, 0, 0) +SAX.characters(topicgimp.gif, 13) +SAX.endElementNs(image, NULL, NULL) +SAX.characters( + , 3) +SAX.endElementNs(story, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(story, NULL, NULL, 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(title, NULL, NULL, 0, 0, 0) +SAX.characters(Sony's AIBO robot Sold Out, 26) +SAX.endElementNs(title, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(url, NULL, NULL, 0, 0, 0) +SAX.characters(http://slashdot.org/articles/9, 51) +SAX.endElementNs(url, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(time, NULL, NULL, 0, 0, 0) +SAX.characters(1999-06-06 14:32:51, 19) +SAX.endElementNs(time, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(author, NULL, NULL, 0, 0, 0) +SAX.characters(CmdrTaco, 8) +SAX.endElementNs(author, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(department, NULL, NULL, 0, 0, 0) +SAX.characters(stuff-to-see, 12) +SAX.endElementNs(department, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(topic, NULL, NULL, 0, 0, 0) +SAX.characters(tech, 4) +SAX.endElementNs(topic, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(comments, NULL, NULL, 0, 0, 0) +SAX.characters(10, 2) +SAX.endElementNs(comments, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(section, NULL, NULL, 0, 0, 0) +SAX.characters(articles, 8) +SAX.endElementNs(section, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(image, NULL, NULL, 0, 0, 0) +SAX.characters(topictech2.jpg, 14) +SAX.endElementNs(image, NULL, NULL) +SAX.characters( + , 3) +SAX.endElementNs(story, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(story, NULL, NULL, 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(title, NULL, NULL, 0, 0, 0) +SAX.characters(Ask Slashdot: Another Word for, 40) +SAX.endElementNs(title, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(url, NULL, NULL, 0, 0, 0) +SAX.characters(http://slashdot.org/askslashdo, 54) +SAX.endElementNs(url, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(time, NULL, NULL, 0, 0, 0) +SAX.characters(1999-06-05 20:00:00, 19) +SAX.endElementNs(time, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(author, NULL, NULL, 0, 0, 0) +SAX.characters(Cliff, 5) +SAX.endElementNs(author, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(department, NULL, NULL, 0, 0, 0) +SAX.characters(hacker-vs-cracker, 17) +SAX.endElementNs(department, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(topic, NULL, NULL, 0, 0, 0) +SAX.characters(news, 4) +SAX.endElementNs(topic, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(comments, NULL, NULL, 0, 0, 0) +SAX.characters(385, 3) +SAX.endElementNs(comments, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(section, NULL, NULL, 0, 0, 0) +SAX.characters(askslashdot, 11) +SAX.endElementNs(section, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(image, NULL, NULL, 0, 0, 0) +SAX.characters(topicnews.gif, 13) +SAX.endElementNs(image, NULL, NULL) +SAX.characters( + , 3) +SAX.endElementNs(story, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(story, NULL, NULL, 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(title, NULL, NULL, 0, 0, 0) +SAX.characters(Corel Linux FAQ, 15) +SAX.endElementNs(title, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(url, NULL, NULL, 0, 0, 0) +SAX.characters(http://slashdot.org/articles/9, 51) +SAX.endElementNs(url, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(time, NULL, NULL, 0, 0, 0) +SAX.characters(1999-06-05 18:42:06, 19) +SAX.endElementNs(time, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(author, NULL, NULL, 0, 0, 0) +SAX.characters(CmdrTaco, 8) +SAX.endElementNs(author, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(department, NULL, NULL, 0, 0, 0) +SAX.characters(stuff-to-read, 13) +SAX.endElementNs(department, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(topic, NULL, NULL, 0, 0, 0) +SAX.characters(corel, 5) +SAX.endElementNs(topic, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(comments, NULL, NULL, 0, 0, 0) +SAX.characters(164, 3) +SAX.endElementNs(comments, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(section, NULL, NULL, 0, 0, 0) +SAX.characters(articles, 8) +SAX.endElementNs(section, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(image, NULL, NULL, 0, 0, 0) +SAX.characters(topiccorel.gif, 14) +SAX.endElementNs(image, NULL, NULL) +SAX.characters( + , 3) +SAX.endElementNs(story, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(story, NULL, NULL, 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(title, NULL, NULL, 0, 0, 0) +SAX.characters(Upside downsides MP3.COM., 25) +SAX.endElementNs(title, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(url, NULL, NULL, 0, 0, 0) +SAX.characters(http://slashdot.org/articles/9, 51) +SAX.endElementNs(url, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(time, NULL, NULL, 0, 0, 0) +SAX.characters(1999-06-05 15:56:45, 19) +SAX.endElementNs(time, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(author, NULL, NULL, 0, 0, 0) +SAX.characters(CmdrTaco, 8) +SAX.endElementNs(author, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(department, NULL, NULL, 0, 0, 0) +SAX.characters(stuff-to-think-about, 20) +SAX.endElementNs(department, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(topic, NULL, NULL, 0, 0, 0) +SAX.characters(music, 5) +SAX.endElementNs(topic, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(comments, NULL, NULL, 0, 0, 0) +SAX.characters(48, 2) +SAX.endElementNs(comments, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(section, NULL, NULL, 0, 0, 0) +SAX.characters(articles, 8) +SAX.endElementNs(section, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(image, NULL, NULL, 0, 0, 0) +SAX.characters(topicmusic.gif, 14) +SAX.endElementNs(image, NULL, NULL) +SAX.characters( + , 3) +SAX.endElementNs(story, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(story, NULL, NULL, 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(title, NULL, NULL, 0, 0, 0) +SAX.characters(2 Terabits of Bandwidth, 23) +SAX.endElementNs(title, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(url, NULL, NULL, 0, 0, 0) +SAX.characters(http://slashdot.org/articles/9, 51) +SAX.endElementNs(url, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(time, NULL, NULL, 0, 0, 0) +SAX.characters(1999-06-05 15:53:43, 19) +SAX.endElementNs(time, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(author, NULL, NULL, 0, 0, 0) +SAX.characters(CmdrTaco, 8) +SAX.endElementNs(author, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(department, NULL, NULL, 0, 0, 0) +SAX.characters(faster-porn, 11) +SAX.endElementNs(department, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(topic, NULL, NULL, 0, 0, 0) +SAX.characters(internet, 8) +SAX.endElementNs(topic, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(comments, NULL, NULL, 0, 0, 0) +SAX.characters(66, 2) +SAX.endElementNs(comments, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(section, NULL, NULL, 0, 0, 0) +SAX.characters(articles, 8) +SAX.endElementNs(section, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(image, NULL, NULL, 0, 0, 0) +SAX.characters(topicinternet.jpg, 17) +SAX.endElementNs(image, NULL, NULL) +SAX.characters( + , 3) +SAX.endElementNs(story, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(story, NULL, NULL, 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(title, NULL, NULL, 0, 0, 0) +SAX.characters(Suppression of cold fusion res, 36) +SAX.endElementNs(title, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(url, NULL, NULL, 0, 0, 0) +SAX.characters(http://slashdot.org/articles/9, 51) +SAX.endElementNs(url, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(time, NULL, NULL, 0, 0, 0) +SAX.characters(1999-06-04 23:12:29, 19) +SAX.endElementNs(time, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(author, NULL, NULL, 0, 0, 0) +SAX.characters(Hemos, 5) +SAX.endElementNs(author, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(department, NULL, NULL, 0, 0, 0) +SAX.characters(possibly-probably, 17) +SAX.endElementNs(department, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(topic, NULL, NULL, 0, 0, 0) +SAX.characters(science, 7) +SAX.endElementNs(topic, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(comments, NULL, NULL, 0, 0, 0) +SAX.characters(217, 3) +SAX.endElementNs(comments, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(section, NULL, NULL, 0, 0, 0) +SAX.characters(articles, 8) +SAX.endElementNs(section, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(image, NULL, NULL, 0, 0, 0) +SAX.characters(topicscience.gif, 16) +SAX.endElementNs(image, NULL, NULL) +SAX.characters( + , 3) +SAX.endElementNs(story, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(story, NULL, NULL, 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(title, NULL, NULL, 0, 0, 0) +SAX.characters(California Gov. Halts Wage Inf, 36) +SAX.endElementNs(title, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(url, NULL, NULL, 0, 0, 0) +SAX.characters(http://slashdot.org/articles/9, 50) +SAX.endElementNs(url, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(time, NULL, NULL, 0, 0, 0) +SAX.characters(1999-06-04 23:05:34, 19) +SAX.endElementNs(time, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(author, NULL, NULL, 0, 0, 0) +SAX.characters(Hemos, 5) +SAX.endElementNs(author, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(department, NULL, NULL, 0, 0, 0) +SAX.characters(woo-hoo!, 8) +SAX.endElementNs(department, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(topic, NULL, NULL, 0, 0, 0) +SAX.characters(usa, 3) +SAX.endElementNs(topic, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(comments, NULL, NULL, 0, 0, 0) +SAX.characters(16, 2) +SAX.endElementNs(comments, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(section, NULL, NULL, 0, 0, 0) +SAX.characters(articles, 8) +SAX.endElementNs(section, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(image, NULL, NULL, 0, 0, 0) +SAX.characters(topicus.gif, 11) +SAX.endElementNs(image, NULL, NULL) +SAX.characters( + , 3) +SAX.endElementNs(story, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(story, NULL, NULL, 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(title, NULL, NULL, 0, 0, 0) +SAX.characters(Red Hat Announces IPO, 21) +SAX.endElementNs(title, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(url, NULL, NULL, 0, 0, 0) +SAX.characters(http://slashdot.org/articles/9, 51) +SAX.endElementNs(url, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(time, NULL, NULL, 0, 0, 0) +SAX.characters(1999-06-04 19:30:18, 19) +SAX.endElementNs(time, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(author, NULL, NULL, 0, 0, 0) +SAX.characters(Justin, 6) +SAX.endElementNs(author, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(department, NULL, NULL, 0, 0, 0) +SAX.characters(details-sketchy, 15) +SAX.endElementNs(department, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(topic, NULL, NULL, 0, 0, 0) +SAX.characters(redhat, 6) +SAX.endElementNs(topic, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(comments, NULL, NULL, 0, 0, 0) +SAX.characters(155, 3) +SAX.endElementNs(comments, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(section, NULL, NULL, 0, 0, 0) +SAX.characters(articles, 8) +SAX.endElementNs(section, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(image, NULL, NULL, 0, 0, 0) +SAX.characters(topicredhat.gif, 15) +SAX.endElementNs(image, NULL, NULL) +SAX.characters( + , 3) +SAX.endElementNs(story, NULL, NULL) +SAX.characters( +, 1) +SAX.endElementNs(ultramode, NULL, NULL) +SAX.endDocument() diff --git a/result/slashdot16.xml b/result/slashdot16.xml new file mode 100644 index 0000000..f6a7f2a Binary files /dev/null and b/result/slashdot16.xml differ diff --git a/result/slashdot16.xml.rde b/result/slashdot16.xml.rde new file mode 100644 index 0000000..cb7a86c --- /dev/null +++ b/result/slashdot16.xml.rde @@ -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.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/slashdot16.xml.sax2 b/result/slashdot16.xml.sax2 new file mode 100644 index 0000000..785e699 --- /dev/null +++ b/result/slashdot16.xml.sax2 @@ -0,0 +1,721 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElementNs(ultramode, NULL, NULL, 0, 0, 0) +SAX.characters( + , 2) +SAX.startElementNs(story, NULL, NULL, 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(title, NULL, NULL, 0, 0, 0) +SAX.characters(100 Mbit/s on Fibre to the hom, 31) +SAX.endElementNs(title, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(url, NULL, NULL, 0, 0, 0) +SAX.characters(http://slashdot.org/articles/9, 51) +SAX.endElementNs(url, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(time, NULL, NULL, 0, 0, 0) +SAX.characters(1999-06-06 14:39:59, 19) +SAX.endElementNs(time, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(author, NULL, NULL, 0, 0, 0) +SAX.characters(CmdrTaco, 8) +SAX.endElementNs(author, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(department, NULL, NULL, 0, 0, 0) +SAX.characters(wouldn't-it-be-nice, 19) +SAX.endElementNs(department, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(topic, NULL, NULL, 0, 0, 0) +SAX.characters(internet, 8) +SAX.endElementNs(topic, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(comments, NULL, NULL, 0, 0, 0) +SAX.characters(20, 2) +SAX.endElementNs(comments, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(section, NULL, NULL, 0, 0, 0) +SAX.characters(articles, 8) +SAX.endElementNs(section, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(image, NULL, NULL, 0, 0, 0) +SAX.characters(topicinternet.jpg, 17) +SAX.endElementNs(image, NULL, NULL) +SAX.characters( + , 3) +SAX.endElementNs(story, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(story, NULL, NULL, 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(title, NULL, NULL, 0, 0, 0) +SAX.characters(Gimp 1.2 Preview, 16) +SAX.endElementNs(title, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(url, NULL, NULL, 0, 0, 0) +SAX.characters(http://slashdot.org/articles/9, 51) +SAX.endElementNs(url, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(time, NULL, NULL, 0, 0, 0) +SAX.characters(1999-06-06 14:38:40, 19) +SAX.endElementNs(time, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(author, NULL, NULL, 0, 0, 0) +SAX.characters(CmdrTaco, 8) +SAX.endElementNs(author, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(department, NULL, NULL, 0, 0, 0) +SAX.characters(stuff-to-read, 13) +SAX.endElementNs(department, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(topic, NULL, NULL, 0, 0, 0) +SAX.characters(gimp, 4) +SAX.endElementNs(topic, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(comments, NULL, NULL, 0, 0, 0) +SAX.characters(12, 2) +SAX.endElementNs(comments, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(section, NULL, NULL, 0, 0, 0) +SAX.characters(articles, 8) +SAX.endElementNs(section, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(image, NULL, NULL, 0, 0, 0) +SAX.characters(topicgimp.gif, 13) +SAX.endElementNs(image, NULL, NULL) +SAX.characters( + , 3) +SAX.endElementNs(story, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(story, NULL, NULL, 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(title, NULL, NULL, 0, 0, 0) +SAX.characters(Sony's AIBO robot Sold Out, 26) +SAX.endElementNs(title, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(url, NULL, NULL, 0, 0, 0) +SAX.characters(http://slashdot.org/articles/9, 51) +SAX.endElementNs(url, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(time, NULL, NULL, 0, 0, 0) +SAX.characters(1999-06-06 14:32:51, 19) +SAX.endElementNs(time, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(author, NULL, NULL, 0, 0, 0) +SAX.characters(CmdrTaco, 8) +SAX.endElementNs(author, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(department, NULL, NULL, 0, 0, 0) +SAX.characters(stuff-to-see, 12) +SAX.endElementNs(department, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(topic, NULL, NULL, 0, 0, 0) +SAX.characters(tech, 4) +SAX.endElementNs(topic, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(comments, NULL, NULL, 0, 0, 0) +SAX.characters(10, 2) +SAX.endElementNs(comments, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(section, NULL, NULL, 0, 0, 0) +SAX.characters(articles, 8) +SAX.endElementNs(section, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(image, NULL, NULL, 0, 0, 0) +SAX.characters(topictech2.jpg, 14) +SAX.endElementNs(image, NULL, NULL) +SAX.characters( + , 3) +SAX.endElementNs(story, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(story, NULL, NULL, 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(title, NULL, NULL, 0, 0, 0) +SAX.characters(Ask Slashdot: Another Word for, 40) +SAX.endElementNs(title, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(url, NULL, NULL, 0, 0, 0) +SAX.characters(http://slashdot.org/askslashdo, 54) +SAX.endElementNs(url, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(time, NULL, NULL, 0, 0, 0) +SAX.characters(1999-06-05 20:00:00, 19) +SAX.endElementNs(time, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(author, NULL, NULL, 0, 0, 0) +SAX.characters(Cliff, 5) +SAX.endElementNs(author, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(department, NULL, NULL, 0, 0, 0) +SAX.characters(hacker-vs-cracker, 17) +SAX.endElementNs(department, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(topic, NULL, NULL, 0, 0, 0) +SAX.characters(news, 4) +SAX.endElementNs(topic, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(comments, NULL, NULL, 0, 0, 0) +SAX.characters(385, 3) +SAX.endElementNs(comments, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(section, NULL, NULL, 0, 0, 0) +SAX.characters(askslashdot, 11) +SAX.endElementNs(section, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(image, NULL, NULL, 0, 0, 0) +SAX.characters(topicnews.gif, 13) +SAX.endElementNs(image, NULL, NULL) +SAX.characters( + , 3) +SAX.endElementNs(story, NULL, NULL) +SAX.characters( + , 3) +SAX.startElementNs(story, NULL, NULL, 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(title, NULL, NULL, 0, 0, 0) +SAX.characters(100 Mbit/s on Fibre to the hom, 31) +SAX.endElementNs(title, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(url, NULL, NULL, 0, 0, 0) +SAX.characters(http://slashdot.org/articles/9, 51) +SAX.endElementNs(url, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(time, NULL, NULL, 0, 0, 0) +SAX.characters(1999-06-06 14:39:59, 19) +SAX.endElementNs(time, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(author, NULL, NULL, 0, 0, 0) +SAX.characters(CmdrTaco, 8) +SAX.endElementNs(author, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(department, NULL, NULL, 0, 0, 0) +SAX.characters(wouldn't-it-be-nice, 19) +SAX.endElementNs(department, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(topic, NULL, NULL, 0, 0, 0) +SAX.characters(internet, 8) +SAX.endElementNs(topic, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(comments, NULL, NULL, 0, 0, 0) +SAX.characters(20, 2) +SAX.endElementNs(comments, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(section, NULL, NULL, 0, 0, 0) +SAX.characters(articles, 8) +SAX.endElementNs(section, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(image, NULL, NULL, 0, 0, 0) +SAX.characters(topicinternet.jpg, 17) +SAX.endElementNs(image, NULL, NULL) +SAX.characters( + , 3) +SAX.endElementNs(story, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(story, NULL, NULL, 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(title, NULL, NULL, 0, 0, 0) +SAX.characters(Gimp 1.2 Preview, 16) +SAX.endElementNs(title, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(url, NULL, NULL, 0, 0, 0) +SAX.characters(http://slashdot.org/articles/9, 51) +SAX.endElementNs(url, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(time, NULL, NULL, 0, 0, 0) +SAX.characters(1999-06-06 14:38:40, 19) +SAX.endElementNs(time, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(author, NULL, NULL, 0, 0, 0) +SAX.characters(CmdrTaco, 8) +SAX.endElementNs(author, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(department, NULL, NULL, 0, 0, 0) +SAX.characters(stuff-to-read, 13) +SAX.endElementNs(department, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(topic, NULL, NULL, 0, 0, 0) +SAX.characters(gimp, 4) +SAX.endElementNs(topic, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(comments, NULL, NULL, 0, 0, 0) +SAX.characters(12, 2) +SAX.endElementNs(comments, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(section, NULL, NULL, 0, 0, 0) +SAX.characters(articles, 8) +SAX.endElementNs(section, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(image, NULL, NULL, 0, 0, 0) +SAX.characters(topicgimp.gif, 13) +SAX.endElementNs(image, NULL, NULL) +SAX.characters( + , 3) +SAX.endElementNs(story, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(story, NULL, NULL, 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(title, NULL, NULL, 0, 0, 0) +SAX.characters(Sony's AIBO robot Sold Out, 26) +SAX.endElementNs(title, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(url, NULL, NULL, 0, 0, 0) +SAX.characters(http://slashdot.org/articles/9, 51) +SAX.endElementNs(url, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(time, NULL, NULL, 0, 0, 0) +SAX.characters(1999-06-06 14:32:51, 19) +SAX.endElementNs(time, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(author, NULL, NULL, 0, 0, 0) +SAX.characters(CmdrTaco, 8) +SAX.endElementNs(author, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(department, NULL, NULL, 0, 0, 0) +SAX.characters(stuff-to-see, 12) +SAX.endElementNs(department, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(topic, NULL, NULL, 0, 0, 0) +SAX.characters(tech, 4) +SAX.endElementNs(topic, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(comments, NULL, NULL, 0, 0, 0) +SAX.characters(10, 2) +SAX.endElementNs(comments, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(section, NULL, NULL, 0, 0, 0) +SAX.characters(articles, 8) +SAX.endElementNs(section, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(image, NULL, NULL, 0, 0, 0) +SAX.characters(topictech2.jpg, 14) +SAX.endElementNs(image, NULL, NULL) +SAX.characters( + , 3) +SAX.endElementNs(story, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(story, NULL, NULL, 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(title, NULL, NULL, 0, 0, 0) +SAX.characters(Ask Slashdot: Another Word for, 40) +SAX.endElementNs(title, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(url, NULL, NULL, 0, 0, 0) +SAX.characters(http://slashdot.org/askslashdo, 54) +SAX.endElementNs(url, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(time, NULL, NULL, 0, 0, 0) +SAX.characters(1999-06-05 20:00:00, 19) +SAX.endElementNs(time, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(author, NULL, NULL, 0, 0, 0) +SAX.characters(Cliff, 5) +SAX.endElementNs(author, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(department, NULL, NULL, 0, 0, 0) +SAX.characters(hacker-vs-cracker, 17) +SAX.endElementNs(department, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(topic, NULL, NULL, 0, 0, 0) +SAX.characters(news, 4) +SAX.endElementNs(topic, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(comments, NULL, NULL, 0, 0, 0) +SAX.characters(385, 3) +SAX.endElementNs(comments, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(section, NULL, NULL, 0, 0, 0) +SAX.characters(askslashdot, 11) +SAX.endElementNs(section, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(image, NULL, NULL, 0, 0, 0) +SAX.characters(topicnews.gif, 13) +SAX.endElementNs(image, NULL, NULL) +SAX.characters( + , 3) +SAX.endElementNs(story, NULL, NULL) +SAX.characters( +, 1) +SAX.startElementNs(story, NULL, NULL, 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(title, NULL, NULL, 0, 0, 0) +SAX.characters(Corel Linux FAQ, 15) +SAX.endElementNs(title, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(url, NULL, NULL, 0, 0, 0) +SAX.characters(http://slashdot.org/articles/9, 51) +SAX.endElementNs(url, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(time, NULL, NULL, 0, 0, 0) +SAX.characters(1999-06-05 18:42:06, 19) +SAX.endElementNs(time, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(author, NULL, NULL, 0, 0, 0) +SAX.characters(CmdrTaco, 8) +SAX.endElementNs(author, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(department, NULL, NULL, 0, 0, 0) +SAX.characters(stuff-to-read, 13) +SAX.endElementNs(department, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(topic, NULL, NULL, 0, 0, 0) +SAX.characters(corel, 5) +SAX.endElementNs(topic, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(comments, NULL, NULL, 0, 0, 0) +SAX.characters(164, 3) +SAX.endElementNs(comments, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(section, NULL, NULL, 0, 0, 0) +SAX.characters(articles, 8) +SAX.endElementNs(section, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(image, NULL, NULL, 0, 0, 0) +SAX.characters(topiccorel.gif, 14) +SAX.endElementNs(image, NULL, NULL) +SAX.characters( + , 3) +SAX.endElementNs(story, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(story, NULL, NULL, 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(title, NULL, NULL, 0, 0, 0) +SAX.characters(Upside downsides MP3.COM., 25) +SAX.endElementNs(title, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(url, NULL, NULL, 0, 0, 0) +SAX.characters(http://slashdot.org/articles/9, 51) +SAX.endElementNs(url, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(time, NULL, NULL, 0, 0, 0) +SAX.characters(1999-06-05 15:56:45, 19) +SAX.endElementNs(time, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(author, NULL, NULL, 0, 0, 0) +SAX.characters(CmdrTaco, 8) +SAX.endElementNs(author, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(department, NULL, NULL, 0, 0, 0) +SAX.characters(stuff-to-think-about, 20) +SAX.endElementNs(department, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(topic, NULL, NULL, 0, 0, 0) +SAX.characters(music, 5) +SAX.endElementNs(topic, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(comments, NULL, NULL, 0, 0, 0) +SAX.characters(48, 2) +SAX.endElementNs(comments, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(section, NULL, NULL, 0, 0, 0) +SAX.characters(articles, 8) +SAX.endElementNs(section, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(image, NULL, NULL, 0, 0, 0) +SAX.characters(topicmusic.gif, 14) +SAX.endElementNs(image, NULL, NULL) +SAX.characters( + , 3) +SAX.endElementNs(story, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(story, NULL, NULL, 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(title, NULL, NULL, 0, 0, 0) +SAX.characters(2 Terabits of Bandwidth, 23) +SAX.endElementNs(title, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(url, NULL, NULL, 0, 0, 0) +SAX.characters(http://slashdot.org/articles/9, 51) +SAX.endElementNs(url, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(time, NULL, NULL, 0, 0, 0) +SAX.characters(1999-06-05 15:53:43, 19) +SAX.endElementNs(time, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(author, NULL, NULL, 0, 0, 0) +SAX.characters(CmdrTaco, 8) +SAX.endElementNs(author, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(department, NULL, NULL, 0, 0, 0) +SAX.characters(faster-porn, 11) +SAX.endElementNs(department, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(topic, NULL, NULL, 0, 0, 0) +SAX.characters(internet, 8) +SAX.endElementNs(topic, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(comments, NULL, NULL, 0, 0, 0) +SAX.characters(66, 2) +SAX.endElementNs(comments, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(section, NULL, NULL, 0, 0, 0) +SAX.characters(articles, 8) +SAX.endElementNs(section, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(image, NULL, NULL, 0, 0, 0) +SAX.characters(topicinternet.jpg, 17) +SAX.endElementNs(image, NULL, NULL) +SAX.characters( + , 3) +SAX.endElementNs(story, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(story, NULL, NULL, 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(title, NULL, NULL, 0, 0, 0) +SAX.characters(Suppression of cold fusion res, 36) +SAX.endElementNs(title, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(url, NULL, NULL, 0, 0, 0) +SAX.characters(http://slashdot.org/articles/9, 51) +SAX.endElementNs(url, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(time, NULL, NULL, 0, 0, 0) +SAX.characters(1999-06-04 23:12:29, 19) +SAX.endElementNs(time, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(author, NULL, NULL, 0, 0, 0) +SAX.characters(Hemos, 5) +SAX.endElementNs(author, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(department, NULL, NULL, 0, 0, 0) +SAX.characters(possibly-probably, 17) +SAX.endElementNs(department, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(topic, NULL, NULL, 0, 0, 0) +SAX.characters(science, 7) +SAX.endElementNs(topic, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(comments, NULL, NULL, 0, 0, 0) +SAX.characters(217, 3) +SAX.endElementNs(comments, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(section, NULL, NULL, 0, 0, 0) +SAX.characters(articles, 8) +SAX.endElementNs(section, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(image, NULL, NULL, 0, 0, 0) +SAX.characters(topicscience.gif, 16) +SAX.endElementNs(image, NULL, NULL) +SAX.characters( + , 3) +SAX.endElementNs(story, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(story, NULL, NULL, 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(title, NULL, NULL, 0, 0, 0) +SAX.characters(California Gov. Halts Wage Inf, 36) +SAX.endElementNs(title, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(url, NULL, NULL, 0, 0, 0) +SAX.characters(http://slashdot.org/articles/9, 50) +SAX.endElementNs(url, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(time, NULL, NULL, 0, 0, 0) +SAX.characters(1999-06-04 23:05:34, 19) +SAX.endElementNs(time, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(author, NULL, NULL, 0, 0, 0) +SAX.characters(Hemos, 5) +SAX.endElementNs(author, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(department, NULL, NULL, 0, 0, 0) +SAX.characters(woo-hoo!, 8) +SAX.endElementNs(department, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(topic, NULL, NULL, 0, 0, 0) +SAX.characters(usa, 3) +SAX.endElementNs(topic, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(comments, NULL, NULL, 0, 0, 0) +SAX.characters(16, 2) +SAX.endElementNs(comments, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(section, NULL, NULL, 0, 0, 0) +SAX.characters(articles, 8) +SAX.endElementNs(section, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(image, NULL, NULL, 0, 0, 0) +SAX.characters(topicus.gif, 11) +SAX.endElementNs(image, NULL, NULL) +SAX.characters( + , 3) +SAX.endElementNs(story, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(story, NULL, NULL, 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(title, NULL, NULL, 0, 0, 0) +SAX.characters(Red Hat Announces IPO, 21) +SAX.endElementNs(title, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(url, NULL, NULL, 0, 0, 0) +SAX.characters(http://slashdot.org/articles/9, 51) +SAX.endElementNs(url, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(time, NULL, NULL, 0, 0, 0) +SAX.characters(1999-06-04 19:30:18, 19) +SAX.endElementNs(time, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(author, NULL, NULL, 0, 0, 0) +SAX.characters(Justin, 6) +SAX.endElementNs(author, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(department, NULL, NULL, 0, 0, 0) +SAX.characters(details-sketchy, 15) +SAX.endElementNs(department, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(topic, NULL, NULL, 0, 0, 0) +SAX.characters(redhat, 6) +SAX.endElementNs(topic, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(comments, NULL, NULL, 0, 0, 0) +SAX.characters(155, 3) +SAX.endElementNs(comments, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(section, NULL, NULL, 0, 0, 0) +SAX.characters(articles, 8) +SAX.endElementNs(section, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(image, NULL, NULL, 0, 0, 0) +SAX.characters(topicredhat.gif, 15) +SAX.endElementNs(image, NULL, NULL) +SAX.characters( + , 3) +SAX.endElementNs(story, NULL, NULL) +SAX.characters( +, 1) +SAX.endElementNs(ultramode, NULL, NULL) +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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/result/svg1.rde b/result/svg1.rde new file mode 100644 index 0000000..91497d2 --- /dev/null +++ b/result/svg1.rde @@ -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.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/svg1.sax2 b/result/svg1.sax2 new file mode 100644 index 0000000..7b81459 --- /dev/null +++ b/result/svg1.sax2 @@ -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.startElementNs(svg, NULL, NULL, 0, 2, 0, width='242p...', 5, height='383p...', 5) +SAX.characters( +, 1) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='stro...', 15) +SAX.characters( +, 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( +, 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 69,...', 337) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( +, 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( +, 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 142...', 190) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( +, 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( +, 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 127...', 71) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( +, 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( +, 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 178...', 128) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( +, 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( +, 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 56,...', 273) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 74,...', 203) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 212...', 448) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 151...', 208) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 78,...', 106) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 21,...', 90) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 71,...', 150) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 139...', 101) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 105...', 56) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 141...', 70) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 98,...', 156) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 97,...', 156) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 147...', 238) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 85,...', 69) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 86,...', 217) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( +, 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( +, 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 93,...', 65) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 144...', 70) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( +, 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( +, 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 57,...', 294) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 83,...', 194) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 109...', 70) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 122...', 80) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 78,...', 156) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 82,...', 284) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 142...', 239) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 115...', 72) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 114...', 80) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 102...', 72) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 51,...', 154) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 2,3...', 120) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 7,3...', 154) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 11,...', 49) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 13,...', 97) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 202...', 152) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( +, 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( +, 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 151...', 168) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 91,...', 202) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( +, 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( +, 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 31,...', 96) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 147...', 76) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 181...', 91) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 132...', 80) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 146...', 80) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 99,...', 78) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 20,...', 105) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 78,...', 56) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 93,...', 92) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( +, 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( +, 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 105...', 70) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 122...', 56) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 115...', 49) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( +, 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( +, 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 116...', 260) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 74,...', 245) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 133...', 104) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 133...', 64) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 121...', 334) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 79,...', 70) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 91,...', 80) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 110...', 72) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 126...', 72) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 30,...', 266) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 44,...', 319) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 13,...', 84) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 10,...', 56) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 9,2...', 45) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 33,...', 385) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 7,3...', 51) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 44,...', 49) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 32,...', 49) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 139...', 128) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 208...', 360) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 106...', 152) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 107...', 93) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 148...', 72) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 80,...', 192) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 87,...', 55) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 85,...', 55) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 115...', 119) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 145...', 56) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 26,...', 60) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 160...', 91) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( +, 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( +, 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 98,...', 265) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 146...', 56) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 148...', 56) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 106...', 56) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 108...', 56) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 106...', 56) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 50,...', 144) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 147...', 231) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 155...', 102) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 112...', 56) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 78,...', 195) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 67,...', 109) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 56,...', 276) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 101...', 307) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 41,...', 116) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 32,...', 245) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 134...', 136) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 173...', 280) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 165...', 88) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 99,...', 124) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 117...', 64) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 117...', 64) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 122...', 64) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 69,...', 262) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 100...', 54) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 115...', 56) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 127...', 56) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 5,2...', 218) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 10,...', 48) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 25,...', 49) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 37,...', 49) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 49,...', 49) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 130...', 88) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 106...', 49) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 139...', 56) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 25,...', 91) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 98,...', 92) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 83,...', 56) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 155...', 72) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 153...', 72) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 152...', 72) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 68,...', 58) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 105...', 68) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 108...', 65) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 85,...', 156) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 140...', 126) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 146...', 237) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 150...', 320) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 147...', 64) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 157...', 72) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 99,...', 63) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( +, 2) +SAX.endElementNs(g, NULL, NULL) +SAX.endElementNs(svg, NULL, NULL) +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 @@ + + + + + + + + + + + + + + + + + + + + + + Java Font definition:Dialog 0 + + + Java Font definition:Helvetica 0 + + + + this is text + + + + Java Font definition:Dialog 0 + + + Java Font definition:Helvetica 700 + + + + sadfsadfsad + + + + + + + + + + + Java Font definition:Dialog 700 + + + Java Font definition:Dialog 700 + + diff --git a/result/svg2.rde b/result/svg2.rde new file mode 100644 index 0000000..1eab152 --- /dev/null +++ b/result/svg2.rde @@ -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.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/svg2.sax2 b/result/svg2.sax2 new file mode 100644 index 0000000..ab73992 --- /dev/null +++ b/result/svg2.sax2 @@ -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.startElementNs(svg, NULL, NULL, 0, 2, 0, width='268p...', 5, height='207p...', 5) +SAX.characters( +, 1) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='stro...', 15) +SAX.characters( + , 5) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d=' M 2...', 9) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d=' L 1...', 9) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( +, 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( +, 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='stro...', 15) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 32,...', 46) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( +, 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( +, 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='stro...', 15) +SAX.characters( +, 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( +, 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='stro...', 15) +SAX.characters( + , 5) +SAX.startElementNs(rect, NULL, NULL, 0, 4, 0, x='30" ...', 2, y='101"...', 3, width='51" ...', 2, height='33"/...', 2) +SAX.endElementNs(rect, NULL, NULL) +SAX.characters( +, 1) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( +, 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 5) +SAX.startElementNs(ellipse, NULL, NULL, 0, 5, 0, cx='182"...', 3, cy='127"...', 3, major='37" ...', 2, minor='31" ...', 2, angle='90"/...', 2) +SAX.endElementNs(ellipse, NULL, NULL) +SAX.characters( +, 1) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( +, 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 5) +SAX.startElementNs(polyline, NULL, NULL, 0, 1, 0, verts=' 78,...', 445) +SAX.endElementNs(polyline, NULL, NULL) +SAX.characters( + , 5) +SAX.startElementNs(g, NULL, NULL, 0, 0, 0) +SAX.characters( + , 6) +SAX.startElementNs(desc, NULL, NULL, 0, 0, 0) +SAX.characters( Java Font definition:Dialog 0, 30) +SAX.endElementNs(desc, NULL, NULL) +SAX.characters( + , 5) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 4) +SAX.startElementNs(g, NULL, NULL, 0, 0, 0) +SAX.characters( + , 6) +SAX.startElementNs(desc, NULL, NULL, 0, 0, 0) +SAX.characters( Java Font definition:Helvetic, 33) +SAX.endElementNs(desc, NULL, NULL) +SAX.characters( + , 5) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( +, 1) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( +, 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='stro...', 15) +SAX.characters( + , 5) +SAX.startElementNs(text, NULL, NULL, 0, 2, 0, x='188"...', 3, y='36" ...', 2) +SAX.characters(this is text, 12) +SAX.endElementNs(text, NULL, NULL) +SAX.characters( +, 1) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( +, 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='stro...', 15) +SAX.characters( + , 5) +SAX.startElementNs(g, NULL, NULL, 0, 0, 0) +SAX.characters( + , 6) +SAX.startElementNs(desc, NULL, NULL, 0, 0, 0) +SAX.characters( Java Font definition:Dialog 0, 30) +SAX.endElementNs(desc, NULL, NULL) +SAX.characters( + , 5) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 4) +SAX.startElementNs(g, NULL, NULL, 0, 0, 0) +SAX.characters( + , 6) +SAX.startElementNs(desc, NULL, NULL, 0, 0, 0) +SAX.characters( Java Font definition:Helvetic, 35) +SAX.endElementNs(desc, NULL, NULL) +SAX.characters( + , 5) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( +, 1) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( +, 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='stro...', 15) +SAX.characters( + , 5) +SAX.startElementNs(text, NULL, NULL, 0, 2, 0, x='176"...', 3, y='85" ...', 2) +SAX.characters(sadfsadfsad, 11) +SAX.endElementNs(text, NULL, NULL) +SAX.characters( +, 1) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( +, 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='stro...', 15) +SAX.characters( +, 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( +, 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 5) +SAX.startElementNs(ellipse, NULL, NULL, 0, 5, 0, cx='208"...', 3, cy='180"...', 3, major='45" ...', 2, minor='31" ...', 2, angle='0"/>...', 1) +SAX.endElementNs(ellipse, NULL, NULL) +SAX.characters( +, 1) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( +, 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='stro...', 15) +SAX.characters( +, 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( +, 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 5) +SAX.startElementNs(g, NULL, NULL, 0, 0, 0) +SAX.characters( + , 6) +SAX.startElementNs(desc, NULL, NULL, 0, 0, 0) +SAX.characters( Java Font definition:Dialog 7, 32) +SAX.endElementNs(desc, NULL, NULL) +SAX.characters( + , 5) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 4) +SAX.startElementNs(g, NULL, NULL, 0, 0, 0) +SAX.characters( + , 6) +SAX.startElementNs(desc, NULL, NULL, 0, 0, 0) +SAX.characters( Java Font definition:Dialog 7, 32) +SAX.endElementNs(desc, NULL, NULL) +SAX.characters( + , 5) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( +, 1) +SAX.endElementNs(g, NULL, NULL) +SAX.endElementNs(svg, NULL, NULL) +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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/result/svg3.rde b/result/svg3.rde new file mode 100644 index 0000000..e4642a9 --- /dev/null +++ b/result/svg3.rde @@ -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.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/svg3.sax2 b/result/svg3.sax2 new file mode 100644 index 0000000..b63dff0 --- /dev/null +++ b/result/svg3.sax2 @@ -0,0 +1,2407 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElementNs(svg, NULL, NULL, 0, 0, 0) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 49) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M77....', 149) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 49) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M81....', 149) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 49) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M108...', 153) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 49) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M105...', 157) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 49) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M101...', 157) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 49) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M90....', 150) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 49) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M83....', 149) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 49) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M80....', 151) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 49) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M91....', 144) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 49) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M71....', 105) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 49) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M72....', 150) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 49) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M72....', 145) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 29) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M70....', 3523) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 29) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M499...', 1458) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M84....', 598) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M333...', 739) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M334...', 757) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M336...', 760) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M337...', 761) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M338...', 762) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M340...', 760) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M341...', 760) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M342...', 760) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M343...', 725) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M345...', 762) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M84....', 637) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M125...', 221) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M265...', 273) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M145...', 431) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M178...', 139) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M188...', 139) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M201...', 139) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M178...', 131) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M179...', 139) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M165...', 911) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M170...', 501) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M192...', 262) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M190...', 209) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M194...', 475) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 29) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M190...', 405) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 47) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M191...', 219) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M271...', 327) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='stro...', 30) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M228...', 98) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 47) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M180...', 137) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 47) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M185...', 152) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 47) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M190...', 152) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 47) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M197...', 154) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 47) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M203...', 154) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 47) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M210...', 139) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='stro...', 30) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M181...', 132) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='stro...', 30) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M215...', 142) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 47) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M233...', 211) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='stro...', 30) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M247...', 50) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='stro...', 30) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M253...', 56) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M174...', 179) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 47) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M188...', 219) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 47) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M111...', 221) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 47) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M132...', 208) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M133...', 334) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 47) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M177...', 183) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 47) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M140...', 161) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 47) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M147...', 160) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 47) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M154...', 158) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 47) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M161...', 158) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M125...', 182) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M190...', 247) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M243...', 361) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M208...', 393) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M208...', 393) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M209...', 393) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M210...', 393) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M244...', 301) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M290...', 155) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M294...', 309) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M247...', 193) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M243...', 200) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M255...', 77) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M245...', 191) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M141...', 411) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M140...', 486) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M148...', 494) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M148...', 484) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M148...', 495) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M140...', 486) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M137...', 119) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M120...', 115) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M128...', 132) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M214...', 1619) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M409...', 389) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M464...', 271) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M463...', 289) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M463...', 287) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M462...', 280) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M462...', 289) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M462...', 250) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M250...', 709) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M389...', 91) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M436...', 125) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M492...', 99) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M304...', 123) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M494...', 111) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M343...', 2441) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M309...', 1201) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M380...', 429) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M368...', 1598) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M291...', 929) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M259...', 1006) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M245...', 383) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M217...', 181) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M233...', 2425) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='stro...', 30) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M251...', 74) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='stro...', 30) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M224...', 84) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='stro...', 30) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M221...', 112) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='stro...', 30) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M222...', 114) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M220...', 6993) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M197...', 185) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M138...', 193) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M138...', 197) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M134...', 195) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M134...', 11) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M89 ...', 570) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M87....', 491) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M91 ...', 497) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M88....', 626) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M79....', 183) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M101...', 359) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M240...', 1223) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M231...', 816) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M294...', 902) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M257...', 3281) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M202...', 837) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M182...', 127) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M142...', 177) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M133...', 289) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M120...', 215) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M349...', 1047) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M339...', 444) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M173...', 503) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M180...', 445) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M177...', 379) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M196...', 438) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M188...', 109) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M181...', 113) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M171...', 105) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M163...', 113) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M201...', 111) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M191...', 114) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M180...', 109) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M173...', 105) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M166...', 111) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M205...', 127) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M215...', 127) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M226...', 127) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M236...', 127) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M209...', 127) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M219...', 127) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M196...', 109) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M123...', 117) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M105...', 111) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M125...', 101) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M129...', 1246) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M126...', 311) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 47) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M125...', 125) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 47) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M127...', 160) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 47) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M129...', 160) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 47) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M130...', 158) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 47) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M245...', 157) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 47) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M242...', 154) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 47) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M239...', 158) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 47) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M236...', 157) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M204...', 387) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M277...', 379) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M218...', 127) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M211...', 126) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M201...', 126) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M193...', 128) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M235...', 128) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M245...', 126) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M254...', 129) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M264...', 126) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M226...', 126) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 47) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M262...', 161) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M265...', 363) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 47) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M207...', 143) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 47) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M217...', 147) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 47) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M229...', 143) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 47) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M239...', 137) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 47) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M181...', 133) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 47) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M172...', 135) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 47) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M164...', 137) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 47) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M211...', 160) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 47) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M222...', 160) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 47) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M201...', 158) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 47) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M181...', 161) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 47) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M193...', 155) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 47) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M174...', 159) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 47) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M167...', 160) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 47) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M236...', 161) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 47) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M203...', 139) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 47) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M213...', 135) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 47) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M220...', 139) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 47) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M228...', 161) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 47) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M238...', 161) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 47) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M198...', 139) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 47) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M188...', 139) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 47) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M249...', 159) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 47) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M257...', 159) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 47) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M267...', 159) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M156...', 111) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M187...', 105) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M178...', 111) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M82....', 121) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M84....', 121) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M77....', 121) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M157...', 137) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M245...', 349) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M234...', 346) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M194...', 445) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M168...', 247) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M155...', 396) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M171...', 206) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M186...', 803) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M246...', 179) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M231...', 139) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M221...', 139) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M211...', 139) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M192...', 261) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M189...', 131) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M167...', 181) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M161...', 183) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M155...', 99) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M140...', 181) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M470...', 101) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M476...', 97) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M493...', 91) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='fill...', 13) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M501...', 67) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='stro...', 14) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M110...', 25) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='stro...', 14) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M161...', 38) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='stro...', 14) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M166...', 40) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( + , 2) +SAX.startElementNs(g, NULL, NULL, 0, 1, 0, style='stro...', 14) +SAX.characters( + , 3) +SAX.startElementNs(path, NULL, NULL, 0, 1, 0, d='M220...', 46) +SAX.endElementNs(path, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(g, NULL, NULL) +SAX.characters( +, 1) +SAX.endElementNs(svg, NULL, NULL) +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 @@ + +my title diff --git a/result/title.xml.rde b/result/title.xml.rde new file mode 100644 index 0000000..b0d2be0 --- /dev/null +++ b/result/title.xml.rde @@ -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.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/title.xml.sax2 b/result/title.xml.sax2 new file mode 100644 index 0000000..6fa4fa9 --- /dev/null +++ b/result/title.xml.sax2 @@ -0,0 +1,6 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElementNs(title, NULL, NULL, 0, 0, 0) +SAX.characters(my title, 8) +SAX.endElementNs(title, NULL, NULL) +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 @@ + +content diff --git a/result/tstblanks.xml.rde b/result/tstblanks.xml.rde new file mode 100644 index 0000000..7d2e5fa --- /dev/null +++ b/result/tstblanks.xml.rde @@ -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.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/tstblanks.xml.sax2 b/result/tstblanks.xml.sax2 new file mode 100644 index 0000000..45563a4 --- /dev/null +++ b/result/tstblanks.xml.sax2 @@ -0,0 +1,6 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElementNs(a, NULL, NULL, 0, 1, 0, test='pass...', 6) +SAX.characters(content, 7) +SAX.endElementNs(a, NULL, NULL) +SAX.endDocument() diff --git a/result/utf16bebom.xml b/result/utf16bebom.xml new file mode 100644 index 0000000..3b5466d Binary files /dev/null and b/result/utf16bebom.xml differ diff --git a/result/utf16bebom.xml.rde b/result/utf16bebom.xml.rde new file mode 100644 index 0000000..f69338a --- /dev/null +++ b/result/utf16bebom.xml.rde @@ -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.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/utf16bebom.xml.sax2 b/result/utf16bebom.xml.sax2 new file mode 100644 index 0000000..4326890 --- /dev/null +++ b/result/utf16bebom.xml.sax2 @@ -0,0 +1,8 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.comment( This file is encoded in UTF-16BE ) +SAX.startElementNs(repository, NULL, NULL, 0, 1, 0, repositroy_id='test...', 4) +SAX.startElementNs(namespace, NULL, NULL, 0, 1, 0, name='test...', 4) +SAX.endElementNs(namespace, NULL, NULL) +SAX.endElementNs(repository, NULL, NULL) +SAX.endDocument() diff --git a/result/utf16bom.xml b/result/utf16bom.xml new file mode 100644 index 0000000..6ea296e Binary files /dev/null and b/result/utf16bom.xml differ diff --git a/result/utf16bom.xml.rde b/result/utf16bom.xml.rde new file mode 100644 index 0000000..0fb84c6 --- /dev/null +++ b/result/utf16bom.xml.rde @@ -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.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/utf16bom.xml.sax2 b/result/utf16bom.xml.sax2 new file mode 100644 index 0000000..2b2db15 --- /dev/null +++ b/result/utf16bom.xml.sax2 @@ -0,0 +1,7 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElementNs(repository, NULL, NULL, 0, 1, 0, repositroy_id='test...', 4) +SAX.startElementNs(namespace, NULL, NULL, 0, 1, 0, name='test...', 4) +SAX.endElementNs(namespace, NULL, NULL) +SAX.endElementNs(repository, NULL, NULL) +SAX.endDocument() diff --git a/result/utf16lebom.xml b/result/utf16lebom.xml new file mode 100644 index 0000000..933640c Binary files /dev/null and b/result/utf16lebom.xml differ diff --git a/result/utf16lebom.xml.rde b/result/utf16lebom.xml.rde new file mode 100644 index 0000000..32a91e4 --- /dev/null +++ b/result/utf16lebom.xml.rde @@ -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.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/utf16lebom.xml.sax2 b/result/utf16lebom.xml.sax2 new file mode 100644 index 0000000..3b62346 --- /dev/null +++ b/result/utf16lebom.xml.sax2 @@ -0,0 +1,8 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.comment( This file is encoded in UTF-16LE ) +SAX.startElementNs(repository, NULL, NULL, 0, 1, 0, repositroy_id='test...', 4) +SAX.startElementNs(namespace, NULL, NULL, 0, 1, 0, name='test...', 4) +SAX.endElementNs(namespace, NULL, NULL) +SAX.endElementNs(repository, NULL, NULL) +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 @@ + + diff --git a/result/utf8bom.xml.rde b/result/utf8bom.xml.rde new file mode 100644 index 0000000..55ad211 --- /dev/null +++ b/result/utf8bom.xml.rde @@ -0,0 +1 @@ +0 1 foo 1 0 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/utf8bom.xml.sax2 b/result/utf8bom.xml.sax2 new file mode 100644 index 0000000..cf7f20f --- /dev/null +++ b/result/utf8bom.xml.sax2 @@ -0,0 +1,5 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElementNs(foo, NULL, NULL, 0, 0, 0) +SAX.endElementNs(foo, NULL, NULL) +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 @@ + + + + b text + diff --git a/result/valid/127772.xml.err b/result/valid/127772.xml.err new file mode 100644 index 0000000..e69de29 diff --git a/result/valid/127772.xml.err.rdr b/result/valid/127772.xml.err.rdr new file mode 100644 index 0000000..e69de29 diff --git a/result/valid/694228.xml b/result/valid/694228.xml new file mode 100644 index 0000000..057c926 --- /dev/null +++ b/result/valid/694228.xml @@ -0,0 +1,5 @@ + + + + &entity; + diff --git a/result/valid/694228.xml.err b/result/valid/694228.xml.err new file mode 100644 index 0000000..e69de29 diff --git a/result/valid/694228.xml.err.rdr b/result/valid/694228.xml.err.rdr new file mode 100644 index 0000000..e69de29 diff --git a/result/valid/737840.xml b/result/valid/737840.xml new file mode 100644 index 0000000..433c6d6 --- /dev/null +++ b/result/valid/737840.xml @@ -0,0 +1,10 @@ + + + + + +]> + + ⌖ + diff --git a/result/valid/737840.xml.err b/result/valid/737840.xml.err new file mode 100644 index 0000000..e69de29 diff --git a/result/valid/737840.xml.err.rdr b/result/valid/737840.xml.err.rdr new file mode 100644 index 0000000..e69de29 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 @@ + + + + + + + + + + +"> + +'"> + + + + + + + + +amp, +lt, +gt, +apos, +quot"> + + +]> + + + +
    +Extensible Markup Language (XML) 1.0 + +REC-xml-&iso6.doc.date; +W3C Recommendation +&draft.day;&draft.month;&draft.year; + + + +http://www.w3.org/TR/1998/REC-xml-&iso6.doc.date; + +http://www.w3.org/TR/1998/REC-xml-&iso6.doc.date;.xml + +http://www.w3.org/TR/1998/REC-xml-&iso6.doc.date;.html + +http://www.w3.org/TR/1998/REC-xml-&iso6.doc.date;.pdf + +http://www.w3.org/TR/1998/REC-xml-&iso6.doc.date;.ps + + + +http://www.w3.org/TR/REC-xml + + + +http://www.w3.org/TR/PR-xml-971208 + + + +Tim Bray +Textuality and Netscape +tbray@textuality.com +Jean Paoli +Microsoft +jeanpa@microsoft.com +C. M. Sperberg-McQueen +University of Illinois at Chicago +cmsmcq@uic.edu + + +

    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.

    +
    + +

    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.

    +

    +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 http://www.w3.org/XML. A list of +current W3C Recommendations and other technical documents can be found +at http://www.w3.org/TR. +

    +

    This specification uses the term URI, which is defined by , a work in progress expected to update and . +

    +

    The list of known errors in this specification is +available at +http://www.w3.org/XML/xml-19980210-errata.

    +

    Please report errors in this document to +xml-editor@w3.org. +

    +
    + + + +

    Chicago, Vancouver, Mountain View, et al.: +World-Wide Web Consortium, XML Working Group, 1996, 1997.

    +
    + +

    Created in electronic form.

    +
    + +English +Extended Backus-Naur Form (formal grammar) + + + +1997-12-03 : CMSMcQ : yet further changes +1997-12-02 : TB : further changes (see TB to XML WG, +2 December 1997) +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 < in attriubte values +uppercase hex characters, +namechar list, + +1997-12-01 : JB : add some column-width parameters +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!). + +1997-10-08 : TB : Removed %-constructs again, new rules +for PE appearance. +1997-10-01 : TB : Case-sensitive markup; cleaned up +element-type defs, lotsa little edits for style +1997-09-25 : TB : Change to elm's new DTD, with +substantial detail cleanup as a side-effect +1997-07-24 : CMSMcQ : correct error (lost *) in definition +of ignoreSectContents (thanks to Makoto Murata) +Allow all empty elements to have end-tags, consistent with +SGML TC (as per JJC). +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. + +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. +1997-06-29 : TB : various edits +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 (?). + +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. +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. +1997-04-01 : CMSMcQ : corrections from JJC, EM, HT, and self +1997-03-31 : Tim Bray : many changes +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. +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 only 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.) +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'. +1997-03-21 : TB : massive changes on plane flight from Chicago +to Vancouver +1997-03-21 : CMSMcQ : correct as many reported errors as possible. + +1997-03-20 : CMSMcQ : correct typos listed in CMSMcQ hand copy of spec. +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 &nbsp; +and define nbsp as &#160;, and refill a lot of paragraphs for +legibility. +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. + +1996-11-11 : CMSMcQ : revise for style. +Add new rhs to entity declaration, for parameter entities. +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. +1996-10-31 : TB : Add Entity Handling section +1996-10-30 : TB : Clean up term & termdef. Slip in +ERB decision re EMPTY. +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. +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 only 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. +1996-10-16 : TB : track down & excise all DSD references; +introduce some EBNF for entity declarations. +1996-10-?? : TB : consistency check, fix up scraps so +they all parse, get formatter working, correct a few productions. +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. +1996-10-10 : TB : eliminate name recognizers (and more?) +1996-10-09 : CMSMcQ : revise for style, consistency through 2.3 +(Characters) +1996-10-09 : CMSMcQ : re-unite everything for convenience, +at least temporarily, and revise quickly +1996-10-08 : TB : first major homogenization pass +1996-10-08 : TB : turn "current" attribute on div type into +CDATA +1996-10-02 : TB : remould into skeleton + entities +1996-09-30 : CMSMcQ : add a few more sections prior to exchange + with Tim. +1996-09-20 : CMSMcQ : finish transcribing notes. +1996-09-19 : CMSMcQ : begin transcribing notes for draft. +1996-09-13 : CMSMcQ : made outline from notes of 09-06, +do some housekeeping + + +
    + + +Introduction +

    Extensible Markup Language, abbreviated XML, describes a class of +data objects called XML documents 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 . +By construction, XML documents +are conforming SGML documents. +

    +

    XML documents are made up of storage units called entities, which contain either parsed +or unparsed data. +Parsed data is made up of characters, +some +of which form character data, +and some of which form markup. +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.

    +

    A software module +called an XML processor is used to read XML documents +and provide access to their content and structure. It is assumed that an XML processor is +doing its work on behalf of another module, called the +application. 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.

    + + +Origin and Goals +

    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. +

    +

    The design goals for XML are: +

    XML shall be straightforwardly usable over the +Internet.

    +

    XML shall support a wide variety of applications.

    +

    XML shall be compatible with SGML.

    +

    It shall be easy to write programs which process XML +documents.

    +

    The number of optional features in XML is to be kept to the +absolute minimum, ideally zero.

    +

    XML documents should be human-legible and reasonably +clear.

    +

    The XML design should be prepared quickly.

    +

    The design of XML shall be formal and concise.

    +

    XML documents shall be easy to create.

    +

    Terseness in XML markup is of minimal importance.

    +

    +

    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.

    +

    This version of the XML specification + +&doc.distribution;.

    + +
    + + + + + +Terminology + +

    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: + + + +

    Conforming documents and XML +processors are permitted to but need not behave as +described.

    + + + +

    Conforming documents and XML processors +are required to behave as described; otherwise they are in 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.

    +
    + + +

    An error +which a conforming XML processor +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). +

    +
    + + +

    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.

    +
    + + +

    A rule which applies to all +valid XML documents. +Violations of validity constraints are errors; they must, at user option, +be reported by +validating XML processors.

    +
    + + +

    A rule which applies to all well-formed XML documents. +Violations of well-formedness constraints are +fatal errors.

    +
    + + + +

    (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 +. + +

    +
    + + +

    A feature of +XML included solely to ensure that XML remains compatible with SGML. +

    +
    + + +

    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;.

    +
    + +

    +
    + + +
    + + + +Documents + +

    +A data object is an +XML document if it is +well-formed, as +defined in this specification. +A well-formed XML document may in addition be +valid if it meets certain further +constraints.

    + +

    Each XML document has both a logical and a physical structure. +Physically, the document is composed of units called entities. An entity may refer to other entities to cause their +inclusion in the document. A document begins in a "root" or document entity. +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 . +

    + + +Well-Formed XML Documents + +

    +A textual object is +a well-formed XML document if: + +

    Taken as a whole, it +matches the production labeled document.

    +

    It +meets all the well-formedness constraints given in this specification.

    +
    +

    Each of the parsed entities +which is referenced directly or indirectly within the document is +well-formed.

    +

    +

    + +Document +document +prolog +element +Misc* + +

    +

    Matching the document production +implies that: + +

    It contains one or more +elements.

    + + +

    There is exactly +one element, called the root, or document element, no +part of which appears in the content of any other element. +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. +

    + +

    +

    As a consequence +of this, +for each non-root element +C in the document, there is one other element P +in the document such that +C is in the content of P, but is not in +the content of any other element that is in the content of +P. +P is referred to as the +parent of C, and C as a +child of P.

    + + +Characters + +

    A parsed entity contains +text, a sequence of +characters, +which may represent markup or character data. +A character +is an atomic unit of text as specified by +ISO/IEC 10646 . +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 , is discouraged. + + +Character Range + +Char +#x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] +| [#x10000-#x10FFFF] +any Unicode character, excluding the +surrogate blocks, FFFE, and FFFF. + + +

    + +

    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 . +

    + +
    + + +Common Syntactic Constructs + +

    This section defines some symbols used widely in the grammar.

    +

    S (white space) consists of one or more space (#x20) +characters, carriage returns, line feeds, or tabs. + + +White Space + +S +(#x20 | #x9 | #xD | #xA)+ + + +

    +

    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 .

    +

    A Name 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. +Names beginning with the string "xml", or any string +which would match (('X'|'x') ('M'|'m') ('L'|'l')), are +reserved for standardization in this or future versions of this +specification. +

    + +

    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.

    +
    +

    An +Nmtoken (name token) is any mixture of +name characters. + +Names and Tokens +NameChar +Letter +| Digit +| '.' | '-' | '_' | ':' +| CombiningChar +| Extender + +Name +(Letter | '_' | ':') +(NameChar)* +Names +Name +(S Name)* +Nmtoken +(NameChar)+ +Nmtokens +Nmtoken (S Nmtoken)* + +

    +

    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 +(EntityValue), +the values of attributes (AttValue), +and external identifiers +(SystemLiteral). +Note that a SystemLiteral +can be parsed without scanning for markup. + +Literals +EntityValue +'"' +([^%&"] +| PEReference +| Reference)* +'"' + +|  +"'" +([^%&'] +| PEReference +| Reference)* +"'" + +AttValue +'"' +([^<&"] +| Reference)* +'"' + +|  +"'" +([^<&'] +| Reference)* +"'" + +SystemLiteral +('"' [^"]* '"') | ("'" [^']* "'") + + +PubidLiteral +'"' PubidChar* +'"' +| "'" (PubidChar - "'")* "'" + +PubidChar +#x20 | #xD | #xA +| [a-zA-Z0-9] +| [-'()+,./:=?;!*#@$_%] + + +

    + +
    + + +Character Data and Markup + +

    Text consists of intermingled +character +data and markup. +Markup takes the form of +start-tags, +end-tags, +empty-element tags, +entity references, +character references, +comments, +CDATA section delimiters, +document type declarations, and +processing instructions. + +

    +

    All text that is not markup +constitutes the character data of +the document.

    +

    The ampersand character (&) and the left angle bracket (<) +may appear in their literal form only when used as markup +delimiters, or within a comment, a +processing instruction, +or a CDATA section. + +They are also legal within the literal entity +value of an internal entity declaration; see +. + +If they are needed elsewhere, +they must be escaped +using either numeric character references +or the strings +"&amp;" and "&lt;" respectively. +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. +

    +

    +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, "]]>".

    +

    +To allow attribute values to contain both single and double quotes, the +apostrophe or single-quote character (') may be represented as +"&apos;", and the double-quote character (") as +"&quot;". + +Character Data + +CharData +[^<&]* - ([^<&]* ']]>' [^<&]*) + + +

    +
    + + +Comments + +

    Comments may +appear anywhere in a document outside other +markup; in addition, +they may appear within the document type declaration +at places allowed by the grammar. +They are not part of the document's character +data; an XML +processor may, but need not, make it possible for an application to +retrieve the text of comments. +For compatibility, the string +"--" (double-hyphen) must not occur within +comments. + +Comments +Comment +'<!--' +((Char - '-') +| ('-' (Char - '-')))* +'-->' + + +

    +

    An example of a comment: +<!&como; declarations for <head> & <body> &comc;> +

    +
    + + +Processing Instructions + +

    Processing +instructions (PIs) allow documents to contain instructions +for applications. + + +Processing Instructions +PI +'<?' PITarget +(S +(Char* - +(Char* &pic; Char*)))? +&pic; +PITarget +Name - +(('X' | 'x') ('M' | 'm') ('L' | 'l')) + + +PIs are not part of the document's character +data, but must be passed through to the application. The +PI begins with a target (PITarget) used +to identify the application to which the instruction is directed. +The target names "XML", "xml", and so on are +reserved for standardization in this or future versions of this +specification. +The +XML Notation mechanism +may be used for +formal declaration of PI targets. +

    +
    + + +CDATA Sections + +

    CDATA sections +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 "<![CDATA[" and end with the string +"]]>": + +CDATA Sections +CDSect +CDStart +CData +CDEnd +CDStart +'<![CDATA[' + +CData +(Char* - +(Char* ']]>' Char*)) + + +CDEnd +']]>' + + + +Within a CDATA section, only the CDEnd 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 +"&lt;" and "&amp;". CDATA sections +cannot nest. +

    + +

    An example of a CDATA section, in which "<greeting>" and +"</greeting>" +are recognized as character data, not +markup: +<![CDATA[<greeting>Hello, world!</greeting>]]> +

    +
    + + +Prolog and Document Type Declaration + +

    XML documents +may, and should, +begin with an XML declaration which specifies +the version of +XML being used. +For example, the following is a complete XML document, well-formed but not +valid: + +Hello, world! +]]> +and so is this: +Hello, world! +]]> +

    + +

    The version number "1.0" should be used to indicate +conformance to this version of this specification; it is an error +for a document to use the value "1.0" +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 "1.0", 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. +

    +

    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 document type declaration, to define +constraints on the logical structure and to support the use of +predefined storage units. + +An XML document is +valid if it has an associated document type +declaration and if the document +complies with the constraints expressed in it.

    +

    The document type declaration must appear before +the first element in the document. + +Prolog + +prolog +XMLDecl? +Misc* +(doctypedecl +Misc*)? +XMLDecl +&xmlpio; +VersionInfo +EncodingDecl? +SDDecl? +S? +&pic; + +VersionInfo +S 'version' Eq +(' VersionNum ' +| " VersionNum ") + +Eq +S? '=' S? + +VersionNum +([a-zA-Z0-9_.:] | '-')+ + +Misc +Comment | PI | +S + +

    + +

    The XML +document type declaration +contains or points to +markup declarations +that provide a grammar for a +class of documents. +This grammar is known as a document type definition, +or DTD. +The document type declaration can point to an external subset (a +special kind of +external entity) 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. +

    +

    +A markup declaration is +an element type declaration, +an attribute-list declaration, +an entity declaration, or +a notation declaration. + +These declarations may be contained in whole or in part +within parameter entities, +as described in the well-formedness and validity constraints below. +For fuller information, see +.

    + +Document Type Definition + +doctypedecl +'<!DOCTYPE' S +Name (S +ExternalID)? +S? ('[' +(markupdecl +| PEReference +| S)* +']' +S?)? '>' + + +markupdecl +elementdecl +| AttlistDecl +| EntityDecl +| NotationDecl +| PI +| Comment + + + + + + + + +

    The markup declarations may be made up in whole or in part of +the replacement text of +parameter entities. +The productions later in this specification for +individual nonterminals (elementdecl, +AttlistDecl, and so on) describe +the declarations after all the parameter entities have been +included.

    + + +Root Element Type +

    +The Name in the document type declaration must +match the element type of the root element. +

    +
    + + +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.

    +
    + +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.) +

    +
    +

    +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 +markupdecl, interspersed with white space +or parameter-entity references. +However, portions of the contents +of the +external subset or of external parameter entities may conditionally be ignored +by using +the conditional section +construct; this is not allowed in the internal subset. + + +External Subset + +extSubset +TextDecl? +extSubsetDecl +extSubsetDecl +( +markupdecl +| conditionalSect +| PEReference +| S +)* + + +

    +

    The external subset and external parameter entities also differ +from the internal subset in that in them, +parameter-entity references +are permitted within markup declarations, +not only between markup declarations.

    +

    An example of an XML document with a document type declaration: + + +Hello, world! +]]> +The system identifier +"hello.dtd" gives the URI of a DTD for the document.

    +

    The declarations can also be given locally, as in this +example: + + +]> +Hello, world! +]]> +If both the external and internal subsets are used, the +internal subset is considered to occur before the external subset. + +This has the effect that entity and attribute-list declarations in the +internal subset take precedence over those in the external subset. +

    +
    + + +Standalone Document Declaration +

    Markup declarations can affect the content of the document, +as passed from an XML processor +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 document entity. + +Standalone Document Declaration + +SDDecl + +S +'standalone' Eq +(("'" ('yes' | 'no') "'") | ('"' ('yes' | 'no') '"')) + + + +

    +

    +In a standalone document declaration, the value "yes" indicates +that there +are no markup declarations external to the document +entity (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 "no" indicates that there are or may be such +external markup declarations. +Note that the standalone document declaration only +denotes the presence of external declarations; the presence, in a +document, of +references to external entities, when those entities are +internally declared, +does not change its standalone status.

    +

    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 "no" is assumed.

    +

    Any XML document for which standalone="no" holds can +be converted algorithmically to a standalone document, +which may be desirable for some network delivery applications.

    + +Standalone Document Declaration +

    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 &magicents;), +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. +

    +
    + +
    +

    An example XML declaration with a standalone document declaration:<?xml version="&XML.version;" standalone='yes'?>

    +
    + +White Space Handling + +

    In editing XML documents, it is often convenient to use "white space" +(spaces, tabs, and blank lines, denoted by the nonterminal +S 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.

    +

    An XML processor +must always pass all characters in a document that are not +markup through to the application. A +validating XML processor must also inform the application +which of these characters constitute white space appearing +in element content. +

    +

    A special attribute +named xml:space 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 +declared if it is used. +When declared, it must be given as an +enumerated type whose only +possible values are "default" and "preserve". +For example:]]>

    +

    The value "default" signals that applications' +default white-space processing modes are acceptable for this element; the +value "preserve" 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 xml:space attribute. +

    +

    The root element 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. +

    + +
    + +End-of-Line Handling +

    XML parsed entities 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).

    +

    To simplify the tasks of applications, +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.) +

    +
    + +Language Identification +

    In document processing, it is often useful to +identify the natural or formal language +in which the content is +written. +A special attribute named +xml:lang 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 +declared if it is used. +The values of the attribute are language identifiers as defined +by , "Tags for the Identification of Languages": + +Language Identification +LanguageID +Langcode +('-' Subcode)* +Langcode +ISO639Code | +IanaCode | +UserCode + +ISO639Code +([a-z] | [A-Z]) ([a-z] | [A-Z]) +IanaCode +('i' | 'I') '-' ([a-z] | [A-Z])+ +UserCode +('x' | 'X') '-' ([a-z] | [A-Z])+ +Subcode +([a-z] | [A-Z])+ + +The Langcode may be any of the following: + +

    a two-letter language code as defined by +, "Codes +for the representation of names of languages"

    +

    a language identifier registered with the Internet +Assigned Numbers Authority ; these begin with the +prefix "i-" (or "I-")

    +

    a language identifier assigned by the user, or agreed on +between parties in private use; these must begin with the +prefix "x-" or "X-" in order to ensure that they do not conflict +with names later standardized or registered with IANA

    +

    +

    There may be any number of Subcode segments; if +the first +subcode segment exists and the Subcode consists of two +letters, then it must be a country code from +, "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 Langcode begins with the prefix +"x-" or +"X-".

    +

    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.

    +

    For example: +The quick brown fox jumps over the lazy dog.

    +

    What colour is it?

    +

    What color is it?

    + + Habe nun, ach! Philosophie, + Juristerei, und Medizin + und leider auch Theologie + durchaus studiert mit heißem Bemüh'n. + ]]>

    + +

    The intent declared with xml:lang is considered to apply to +all attributes and content of the element where it is specified, +unless overridden with an instance of xml:lang +on another element within that content.

    + +

    A simple declaration for xml:lang might take +the form +xml:lang NMTOKEN #IMPLIED +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: + + + ]]> +

    + +
    +
    + + + +Logical Structures + +

    Each XML document contains one or more +elements, the boundaries of which are +either delimited by start-tags +and end-tags, or, for empty elements, by an empty-element tag. Each element has a type, +identified by name, sometimes called its "generic +identifier" (GI), and may have a set of +attribute specifications. Each attribute specification +has a name and a value. +

    +Element +element +EmptyElemTag +| STag content +ETag + + + + +

    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 (('X'|'x')('M'|'m')('L'|'l')) +are reserved for standardization in this or future versions of this +specification. +

    + +Element Type Match +

    +The Name in an element's end-tag must match +the element type in +the start-tag. +

    +
    + +Element Valid +

    An element is +valid if +there is a declaration matching +elementdecl where the +Name matches the element type, and +one of the following holds:

    + +

    The declaration matches EMPTY and the element has no +content.

    +

    The declaration matches children and +the sequence of +child elements +belongs to the language generated by the regular expression in +the content model, with optional white space (characters +matching the nonterminal S) between each pair +of child elements.

    +

    The declaration matches Mixed and +the content consists of character +data and child elements +whose types match names in the content model.

    +

    The declaration matches ANY, and the types +of any child elements have +been declared.

    +
    +
    + + +Start-Tags, End-Tags, and Empty-Element Tags + +

    The beginning of every +non-empty XML element is marked by a start-tag. + +Start-tag + +STag +'<' Name +(S Attribute)* +S? '>' + + +Attribute +Name Eq +AttValue + + + + + +The Name in +the start- and end-tags gives the +element's type. + +The Name-AttValue pairs are +referred to as +the attribute specifications of the element, +with the +Name in each pair +referred to as the attribute name and +the content of the +AttValue (the text between the +' or " delimiters) +as the attribute value. +

    + +Unique Att Spec +

    +No attribute name may appear more than once in the same start-tag +or empty-element tag. +

    +
    + +Attribute Value Type +

    +The attribute must have been declared; the value must be of the type +declared for it. +(For attribute types, see .) +

    +
    + +No External Entity References +

    +Attribute values cannot contain direct or indirect entity references +to external entities. +

    +
    + +No < in Attribute Values +

    The replacement text of any entity +referred to directly or indirectly in an attribute +value (other than "&lt;") must not contain +a <. +

    +

    An example of a start-tag: +<termdef id="dt-dog" term="dog">

    +

    The end of every element +that begins with a start-tag must +be marked by an end-tag +containing a name that echoes the element's type as given in the +start-tag: + +End-tag + +ETag +'</' Name +S? '>' + + +

    +

    An example of an end-tag:</termdef>

    +

    The +text between the start-tag and +end-tag is called the element's +content: + +Content of Elements + +content +(element | CharData +| Reference | CDSect +| PI | Comment)* + + + +

    +

    If an element is empty, +it must be represented either by a start-tag immediately followed +by an end-tag or by an empty-element tag. +An +empty-element tag takes a special form: + +Tags for Empty Elements + +EmptyElemTag +'<' Name (S +Attribute)* S? +'/>' + + + + +

    +

    Empty-element tags may be used for any element which has no +content, whether or not it is declared using the keyword +EMPTY. +For interoperability, the empty-element +tag must be used, and can only be used, for elements which are +declared EMPTY.

    +

    Examples of empty elements: +<IMG align="left" + src="http://www.w3.org/Icons/WWW/w3c_home" /> +<br></br> +<br/>

    +
    + + +Element Type Declarations + +

    The element structure of an +XML document may, for +validation purposes, +be constrained +using element type and attribute-list declarations. +An element type declaration constrains the element's +content. +

    + +

    Element type declarations often constrain which element types can +appear as children 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.

    +

    An element +type declaration takes the form: + +Element Type Declaration + +elementdecl +'<!ELEMENT' S +Name +S +contentspec +S? '>' + +contentspec +'EMPTY' +| 'ANY' +| Mixed +| children + + + + +where the Name gives the element type +being declared. +

    + + +Unique Element Type Declaration +

    +No element type may be declared more than once. +

    +
    + +

    Examples of element type declarations: +<!ELEMENT br EMPTY> +<!ELEMENT p (#PCDATA|emph)* > +<!ELEMENT %name.para; %content.para; > +<!ELEMENT container ANY>

    + + +Element Content + +

    An element type has +element content when elements of that +type must contain only child +elements (no character data), optionally separated by +white space (characters matching the nonterminal +S). + +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 (cps), which consist of names, +choice lists of content particles, or +sequence lists of content particles: + +Element-content Models + +children +(choice +| seq) +('?' | '*' | '+')? +cp +(Name +| choice +| seq) +('?' | '*' | '+')? +choice +'(' S? cp +( S? '|' S? cp )* +S? ')' + +seq +'(' S? cp +( S? ',' S? cp )* +S? ')' + + + + +where each Name is the type of an element which may +appear as a child. +Any content +particle in a choice list may appear in the element content at the location where +the choice list appears in the grammar; +content particles occurring in a sequence list must each +appear in the element content 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 (+), zero or more (*), or zero or +one times (?). +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.

    +

    +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. For compatibility, 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 . + + +

    + +Proper Group/PE Nesting +

    Parameter-entity +replacement text must be properly nested +with parenthetized 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 ,). +

    +
    +

    Examples of element-content models: +<!ELEMENT spec (front, body, back?)> +<!ELEMENT div1 (head, (p | list | note)*, div2*)> +<!ELEMENT dictionary-body (%div.mix; | %dict.mix;)*>

    +
    + + +Mixed Content + +

    An element +type has +mixed content when elements of that type may contain +character data, optionally interspersed with +child elements. +In this case, the types of the child elements +may be constrained, but not their order or their number of occurrences: + +Mixed-content Declaration + +Mixed +'(' S? +'#PCDATA' +(S? +'|' +S? +Name)* +S? +')*' +| '(' S? '#PCDATA' S? ')' + + + + + + +where the Names give the types of elements +that may appear as children. +

    + +No Duplicate Types +

    The same name must not appear more than once in a single mixed-content +declaration. +

    +

    Examples of mixed content declarations: +<!ELEMENT p (#PCDATA|a|ul|b|i|em)*> +<!ELEMENT p (#PCDATA | %font; | %phrase; | %special; | %form;)* > +<!ELEMENT b (#PCDATA)>

    +
    +
    + + +Attribute-List Declarations + +

    Attributes are used to associate +name-value pairs with elements. +Attribute specifications may appear only within start-tags +and empty-element tags; +thus, the productions used to +recognize them appear in . +Attribute-list +declarations may be used: + +

    To define the set of attributes pertaining to a given +element type.

    +

    To establish type constraints for these +attributes.

    +

    To provide default values +for attributes.

    + +

    +

    +Attribute-list declarations specify the name, data type, and default +value (if any) of each attribute associated with a given element type: + +Attribute-list Declaration +AttlistDecl +'<!ATTLIST' S +Name +AttDef* +S? '>' + +AttDef +S Name +S AttType +S DefaultDecl + + +The Name in the +AttlistDecl 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 Name in the +AttDef rule is +the name of the attribute.

    +

    +When more than one AttlistDecl 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. +For interoperability, 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. +

    + + +Attribute Types + +

    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: + +Attribute Types + +AttType +StringType +| TokenizedType +| EnumeratedType + + +StringType +'CDATA' + +TokenizedType +'ID' + + + +| 'IDREF' + +| 'IDREFS' + +| 'ENTITY' + +| 'ENTITIES' + +| 'NMTOKEN' + +| 'NMTOKENS' + + + +

    + +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. +

    +
    + +One ID per Element Type +

    No element type may have more than one ID attribute specified.

    +
    + +ID Attribute Default +

    An ID attribute must have a declared default of #IMPLIED or +#REQUIRED.

    +
    + +IDREF +

    +Values of type IDREF must match +the Name production, and +values of type IDREFS must match +Names; +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. +

    +
    + +Entity Name +

    +Values of type ENTITY +must match the Name production, +values of type ENTITIES must match +Names; +each Name must +match the +name of an unparsed entity declared in the +DTD. +

    +
    + +Name Token +

    +Values of type NMTOKEN must match the +Nmtoken production; +values of type NMTOKENS must +match Nmtokens. +

    +
    + +

    Enumerated attributes can take one +of a list of values provided in the declaration. There are two +kinds of enumerated types: + +Enumerated Attribute Types +EnumeratedType +NotationType +| Enumeration + +NotationType +'NOTATION' +S +'(' +S? +Name +(S? '|' S? +Name)* +S? ')' + + +Enumeration +'(' S? +Nmtoken +(S? '|' +S? +Nmtoken)* +S? +')' + + +A NOTATION attribute identifies a +notation, declared in the +DTD with associated system and/or public identifiers, to +be used in interpreting the element to which the attribute +is attached. +

    + + +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. +

    +
    + +Enumeration +

    +Values of this type +must match one of the Nmtoken tokens in the +declaration. +

    +
    +

    For interoperability, the same +Nmtoken should not occur more than once in the +enumerated attribute types of a single element type. +

    +
    + + +Attribute Defaults + +

    An attribute declaration 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. + +Attribute Defaults + +DefaultDecl +'#REQUIRED' +| '#IMPLIED' +| (('#FIXED' S)? AttValue) + + + + + + + + +

    +

    In an attribute declaration, #REQUIRED means that the +attribute must always be provided, #IMPLIED that no default +value is provided. + +If the +declaration +is neither #REQUIRED nor #IMPLIED, then the +AttValue value contains the declared +default value; the #FIXED 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.

    + +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. +

    + +Attribute Default Legal +

    +The declared +default value must meet the lexical constraints of the declared attribute type. +

    +
    + +Fixed Attribute Default +

    If an attribute has a default value declared with the +#FIXED keyword, instances of that attribute must +match the default value. +

    + +

    Examples of attribute-list declarations: +<!ATTLIST termdef + id ID #REQUIRED + name CDATA #IMPLIED> +<!ATTLIST list + type (bullets|ordered|glossary) "ordered"> +<!ATTLIST form + method CDATA #FIXED "POST">

    +
    + +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. +

    +
    +
    + +Conditional Sections +

    +Conditional sections are portions of the +document type declaration external subset +which are +included in, or excluded from, the logical structure of the DTD based on +the keyword which governs them. + +Conditional Section + +conditionalSect +includeSect +| ignoreSect + + +includeSect +'<![' S? 'INCLUDE' S? '[' + +extSubsetDecl +']]>' + + +ignoreSect +'<![' S? 'IGNORE' S? '[' +ignoreSectContents* +']]>' + + +ignoreSectContents +Ignore +('<![' ignoreSectContents ']]>' +Ignore)* +Ignore +Char* - +(Char* ('<![' | ']]>') +Char*) + + + + +

    +

    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. +

    +

    If the keyword of the +conditional section is INCLUDE, then the contents of the conditional +section are part of the DTD. +If the keyword of the conditional +section is IGNORE, 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 INCLUDE occurs within a larger conditional +section with a keyword of IGNORE, both the outer and the +inner conditional sections are ignored.

    +

    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.

    +

    An example: +<!ENTITY % draft 'INCLUDE' > +<!ENTITY % final 'IGNORE' > + +<![%draft;[ +<!ELEMENT book (comments*, title, body, supplements?)> +]]> +<![%final;[ +<!ELEMENT book (title, body, supplements?)> +]]> + +

    +
    + + + + +
    + + + +Physical Structures + +

    An XML document may consist +of one or many storage units. These are called +entities; they all have content and are all +(except for the document entity, see below, and +the external DTD subset) +identified by name. + +Each XML document has one entity +called the document entity, which serves +as the starting point for the XML +processor and may contain the whole document.

    +

    Entities may be either parsed or unparsed. +A parsed entity's +contents are referred to as its +replacement text; +this text is considered an +integral part of the document.

    + +

    An +unparsed entity +is a resource whose contents may or may not be +text, and if text, may not be XML. +Each unparsed entity +has an associated notation, 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. +

    +

    +Parsed entities are invoked by name using entity references; +unparsed entities by name, given in the value of ENTITY +or ENTITIES +attributes.

    +

    General entities +are entities for use within the document content. +In this specification, general entities are sometimes referred +to with the unqualified term entity when this leads +to no ambiguity. +Parameter entities +are parsed entities for use within the DTD. +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. +

    + + +Character and Entity References +

    +A character reference refers to a specific character in the +ISO/IEC 10646 character set, for example one not directly accessible from +available input devices. + +Character Reference +CharRef +'&#' [0-9]+ ';' +| '&hcro;' [0-9a-fA-F]+ ';' + + + + +Legal Character +

    Characters referred to using character references must +match the production for +Char.

    + +If the character reference begins with "&#x", the digits and +letters up to the terminating ; provide a hexadecimal +representation of the character's code point in ISO/IEC 10646. +If it begins just with "&#", the digits up to the terminating +; provide a decimal representation of the character's +code point. + +

    +

    An entity +reference refers to the content of a named entity. +References to +parsed general entities +use ampersand (&) and semicolon (;) as +delimiters. + +Parameter-entity references use percent-sign (%) and +semicolon +(;) as delimiters. +

    + +Entity Reference +Reference +EntityRef +| CharRef +EntityRef +'&' Name ';' + + + + + +PEReference +'%' Name ';' + + + + + + + +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: &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.

    +

    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'.

    +
    + +Entity Declared +

    In a document with an external subset or external parameter +entities with "standalone='no'", +the Name given in the entity reference must match that in an +entity declaration. +For interoperability, valid documents should declare the entities +&magicents;, in the form +specified in . +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.

    +
    + + +Parsed Entity +

    +An entity reference must not contain the name of an unparsed entity. Unparsed entities may be referred +to only in attribute values declared to +be of type ENTITY or ENTITIES. +

    +
    + +No Recursion +

    +A parsed entity must not contain a recursive reference to itself, +either directly or indirectly. +

    +
    + +In DTD +

    +Parameter-entity references may only appear in the +DTD. +

    +
    +

    Examples of character and entity references: +Type <key>less-than</key> (&hcro;3C;) to save options. +This document was prepared on &docdate; and +is classified &security-level;.

    +

    Example of a parameter-entity reference: + + + +%ISOLat2;]]>

    +
    + + +Entity Declarations + +

    +Entities are declared thus: + +Entity Declaration + +EntityDecl +GEDecl | PEDecl + + +GEDecl +'<!ENTITY' S Name +S EntityDef +S? '>' + +PEDecl +'<!ENTITY' S '%' S +Name S +PEDef S? '>' + + +EntityDef +EntityValue +| (ExternalID +NDataDecl?) + + + +PEDef +EntityValue +| ExternalID + + +The Name identifies the entity in an +entity reference or, in the case of an +unparsed entity, in the value of an ENTITY or ENTITIES +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. +

    + + +Internal Entities + +

    If +the entity definition is an +EntityValue, +the defined entity is called an internal entity. +There is no separate physical +storage object, and the content of the entity is given in the +declaration. +Note that some processing of entity and character references in the +literal entity value may be required to +produce the correct replacement +text: see . +

    +

    An internal entity is a parsed +entity.

    +

    Example of an internal entity declaration: +<!ENTITY Pub-Status "This is a pre-release of the + specification.">

    +
    + + +External Entities + +

    If the entity is not +internal, it is an external +entity, declared as follows: + +External Entity Declaration + +ExternalID +'SYSTEM' S +SystemLiteral +| 'PUBLIC' S +PubidLiteral +S +SystemLiteral + + +NDataDecl +S 'NDATA' S +Name + + +If the NDataDecl is present, this is a +general unparsed +entity; otherwise it is a parsed entity.

    + +Notation Declared +

    +The Name must match the declared name of a +notation. +

    +
    +

    The +SystemLiteral +is called the entity's system identifier. It is a URI, +which may be used to retrieve the entity. +Note that the hash mark (#) 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 +document entity, to the entity +containing the external DTD subset, +or to some other external parameter entity. +

    +

    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).

    +

    +In addition to a system identifier, an external identifier may +include a public identifier. +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.

    +

    Examples of external entity declarations: +<!ENTITY open-hatch + SYSTEM "http://www.textuality.com/boilerplate/OpenHatch.xml"> +<!ENTITY open-hatch + PUBLIC "-//Textuality//TEXT Standard open-hatch boilerplate//EN" + "http://www.textuality.com/boilerplate/OpenHatch.xml"> +<!ENTITY hatch-pic + SYSTEM "../grafix/OpenHatch.gif" + NDATA gif >

    +
    + +
    + + +Parsed Entities + +The Text Declaration +

    External parsed entities may each begin with a text +declaration. + +Text Declaration + +TextDecl +&xmlpio; +VersionInfo? +EncodingDecl +S? &pic; + + + +

    +

    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.

    +
    + +Well-Formed Parsed Entities +

    The document entity is well-formed if it matches the production labeled +document. +An external general +parsed entity is well-formed if it matches the production labeled +extParsedEnt. +An external parameter +entity is well-formed if it matches the production labeled +extPE. + +Well-Formed External Parsed Entity +extParsedEnt +TextDecl? +content + +extPE +TextDecl? +extSubsetDecl + + +An internal general parsed entity is well-formed if its replacement text +matches the production labeled +content. +All internal parameter entities are well-formed by definition. +

    +

    A consequence of well-formedness in entities is that the logical +and physical structures in an XML document are properly nested; no +start-tag, +end-tag, +empty-element tag, +element, +comment, +processing instruction, +character +reference, or +entity reference +can begin in one entity and end in another.

    +
    + +Character Encoding in Entities + +

    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. + +

    +

    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.

    +

    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 text +declaration containing an encoding declaration: + +Encoding Declaration +EncodingDecl +S +'encoding' Eq +('"' EncName '"' | +"'" EncName "'" ) + + +EncName +[A-Za-z] ([A-Za-z0-9._] | '-')* +Encoding name contains only Latin characters + + +In the document entity, the encoding +declaration is part of the XML declaration. +The EncName is the name of the encoding used. +

    + +

    In an encoding declaration, the values +"UTF-8", +"UTF-16", +"ISO-10646-UCS-2", and +"ISO-10646-UCS-4" should be +used for the various encodings and transformations of Unicode / +ISO/IEC 10646, the values +"ISO-8859-1", +"ISO-8859-2", ... +"ISO-8859-9" should be used for the parts of ISO 8859, and +the values +"ISO-2022-JP", +"Shift_JIS", and +"EUC-JP" +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 charsets) +with the Internet Assigned Numbers +Authority , 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.

    +

    In the absence of information provided by an external +transport protocol (e.g. HTTP or MIME), +it is an error 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.

    + +

    It is a fatal error when an XML processor +encounters an entity with an encoding that it is unable to process.

    +

    Examples of encoding declarations: +<?xml encoding='UTF-8'?> +<?xml encoding='EUC-JP'?>

    +
    +
    + +XML Processor Treatment of Entities and References +

    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 XML processor in +each case. +The labels in the leftmost column describe the recognition context: + + +

    as a reference +anywhere after the start-tag and +before the end-tag of an element; corresponds +to the nonterminal content.

    + + + +

    as a reference within either the value of an attribute in a +start-tag, or a default +value in an attribute declaration; +corresponds to the nonterminal +AttValue.

    + + +

    as a Name, not a reference, appearing either as +the value of an +attribute which has been declared as type ENTITY, or as one of +the space-separated tokens in the value of an attribute which has been +declared as type ENTITIES.

    +
    + +

    as a reference +within a parameter or internal entity's +literal entity value in +the entity's declaration; corresponds to the nonterminal +EntityValue.

    + +

    as a reference within either the internal or external subsets of the +DTD, but outside +of an EntityValue or +AttValue.

    +
    +

    + + + +Entity Type +Character + + +Parameter +Internal +General +External Parsed +General +Unparsed + + + +Reference +in Content +Not recognized +Included +Included if validating +Forbidden +Included + + +Reference +in Attribute Value +Not recognized +Included in literal +Forbidden +Forbidden +Included + + +Occurs as +Attribute Value +Not recognized +Forbidden +Forbidden +Notify +Not recognized + + +Reference +in EntityValue +Included in literal +Bypassed +Bypassed +Forbidden +Included + + +Reference +in DTD +Included as PE +Forbidden +Forbidden +Forbidden +Forbidden + + + + +Not Recognized +

    Outside the DTD, the % character has no +special significance; thus, what would be parameter entity references in the +DTD are not recognized as markup in content. +Similarly, the names of unparsed entities are not recognized except +when they appear in the value of an appropriately declared attribute. +

    +
    + +Included +

    An entity is +included when its +replacement text 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 +character data +and (except for parameter entities) markup, +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 "AT&amp;T;" expands to +"AT&T;" and the remaining ampersand is not recognized +as an entity-reference delimiter.) +A character reference is included when the indicated +character is processed in place of the reference itself. +

    +
    + +Included If Validating +

    When an XML processor recognizes a reference to a parsed entity, in order +to validate +the document, the processor must +include its +replacement text. +If the entity is external, and the processor is not +attempting to validate the XML document, the +processor may, 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.

    +

    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. +

    +
    + +Forbidden +

    The following are forbidden, and constitute +fatal errors: + +

    the appearance of a reference to an +unparsed entity. +

    +

    the appearance of any character or general-entity reference in the +DTD except within an EntityValue or +AttValue.

    +

    a reference to an external entity in an attribute value.

    +
    + +

    +
    + +Included in Literal +

    When an entity reference appears in an +attribute value, or a parameter entity reference appears in a literal entity +value, its replacement text 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: + +]]> +while this is not: +<!ENTITY EndAttr "27'" > +<element attribute='a-&EndAttr;> +

    + +Notify +

    When the name of an unparsed +entity appears as a token in the +value of an attribute of declared type ENTITY or ENTITIES, +a validating processor must inform the +application of the system +and public (if any) +identifiers for both the entity and its associated +notation.

    +
    + +Bypassed +

    When a general entity reference appears in the +EntityValue in an entity declaration, +it is bypassed and left as is.

    +
    + +Included as PE +

    Just as with external parsed entities, parameter entities +need only be included if +validating. +When a parameter-entity reference is recognized in the DTD +and included, its +replacement +text 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. +

    +
    + +
    + +Construction of Internal Entity Replacement Text +

    In discussing the treatment +of internal entities, it is +useful to distinguish two forms of the entity's value. +The literal +entity value is the quoted string actually +present in the entity declaration, corresponding to the +non-terminal EntityValue. +The replacement +text is the content of the entity, after +replacement of character references and parameter-entity +references. +

    + +

    The literal entity value +as given in an internal entity declaration +(EntityValue) 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 +included as described above +must contain the replacement text 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: + + + +]]> +then the replacement text for the entity "book" is: +La Peste: Albert Camus, +© 1947 Éditions Gallimard. &rights; +The general-entity reference "&rights;" would be expanded +should the reference "&book;" appear in the document's +content or an attribute value.

    +

    These simple rules may have complex interactions; for a detailed +discussion of a difficult example, see +. +

    + +
    + +Predefined Entities +

    Entity and character +references can both be used to escape 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 +"&#60;" and "&#38;" may be used to +escape < and & when they occur +in character data.

    +

    All XML processors must recognize these entities whether they +are declared or not. +For interoperability, +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. + + + + + +]]> +Note that the < and & characters +in the declarations of "lt" and "amp" +are doubly escaped to meet the requirement that entity replacement +be well-formed. +

    +
    + + +Notation Declarations + +

    Notations identify by +name the format of unparsed +entities, the +format of elements which bear a notation attribute, +or the application to which +a processing instruction is +addressed.

    +

    +Notation declarations +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. + +Notation Declarations +NotationDecl +'<!NOTATION' S Name +S +(ExternalID | +PublicID) +S? '>' +PublicID +'PUBLIC' S +PubidLiteral + + +

    +

    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 +system identifier, +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.)

    +
    + + + +Document Entity + +

    The document +entity serves as the root of the entity +tree and a starting-point for an XML +processor. +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.

    +
    + + +
    + + + +Conformance + + +Validating and Non-Validating Processors +

    Conforming XML processors fall into two +classes: validating and non-validating.

    +

    Validating and non-validating processors alike must report +violations of this specification's well-formedness constraints +in the content of the +document entity and any +other parsed entities that +they read.

    +

    +Validating processors must report +violations of the constraints expressed by the declarations in the +DTD, and +failures to fulfill the validity constraints given +in this specification. + +To accomplish this, validating XML processors must read and process the entire +DTD and all external parsed entities referenced in the document. +

    +

    Non-validating processors are required to check only the +document entity, including +the entire internal DTD subset, for well-formedness. + +While they are not required to check the document for validity, +they are required to +process 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 not read; that is to +say, they must +use the information in those declarations to +normalize attribute values, +include the replacement text of +internal entities, and supply +default attribute values. + +They must not process +entity declarations or +attribute-list declarations +encountered after a reference to a parameter entity that is not +read, since the entity may have contained overriding declarations. +

    +
    + +Using XML Processors +

    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: + +

    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 +Entity Declared, +Parsed Entity, and +No Recursion, as well +as some of the cases described as +forbidden in +.

    +

    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 +normalize attribute values, +include the replacement text of +internal entities, or supply +default attribute values, +where doing so depends on having read declarations in +external or parameter entities.

    + +

    +

    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.

    +
    +
    + + +Notation + +

    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 +symbol ::= expression

    +

    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. + +

    + +

    Within the expression on the right-hand side of a rule, the following +expressions are used to match strings of one or more characters: + + + +

    where N 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 +#xN 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.

    + + + +

    matches any character +with a value in the range(s) indicated (inclusive).

    +
    + + +

    matches any character +with a value outside the +range indicated.

    +
    + + +

    matches any character +with a value not among the characters given.

    +
    + + +

    matches a literal string matching +that given inside the double quotes.

    +
    + + +

    matches a literal string matching +that given inside the single quotes.

    +
    + +These symbols may be combined to match more complex patterns as follows, +where A and B represent simple expressions: + + + +

    expression is treated as a unit +and may be combined as described in this list.

    +
    + + +

    matches A or nothing; optional A.

    +
    + + +

    matches A followed by B.

    +
    + + +

    matches A or B but not both.

    +
    + + +

    matches any string that matches A but does not match +B. +

    +
    + + +

    matches one or more occurrences of A.

    +
    + + +

    matches zero or more occurrences of A.

    +
    + +
    +Other notations used in the productions are: + + + +

    comment.

    +
    + + +

    well-formedness constraint; this identifies by name a +constraint on +well-formed documents +associated with a production.

    +
    + + +

    validity constraint; this identifies by name a constraint on +valid documents associated with +a production.

    +
    +
    +

    + + + + + + + + + +References + +Normative References + + + +(Internet Assigned Numbers Authority) Official Names for +Character Sets, +ed. Keld Simonsen et al. +See ftp://ftp.isi.edu/in-notes/iana/assignments/character-sets. + + + +IETF (Internet Engineering Task Force). +RFC 1766: Tags for the Identification of Languages, +ed. H. Alvestrand. +1995. + + + +(International Organization for Standardization). +ISO 639:1988 (E). +Code for the representation of names of languages. +[Geneva]: International Organization for +Standardization, 1988. + + +(International Organization for Standardization). +ISO 3166-1:1997 (E). +Codes for the representation of names of countries and their subdivisions +— Part 1: Country codes +[Geneva]: International Organization for +Standardization, 1997. + +ISO +(International Organization for Standardization). +ISO/IEC 10646-1993 (E). Information technology — Universal +Multiple-Octet Coded Character Set (UCS) — Part 1: +Architecture and Basic Multilingual Plane. +[Geneva]: International Organization for +Standardization, 1993 (plus amendments AM 1 through AM 7). + + +The Unicode Consortium. +The Unicode Standard, Version 2.0. +Reading, Mass.: Addison-Wesley Developers Press, 1996. + + + + + +Other References + + + +Aho, Alfred V., +Ravi Sethi, and Jeffrey D. Ullman. +Compilers: Principles, Techniques, and Tools. +Reading: Addison-Wesley, 1986, rpt. corr. 1988. + + +Berners-Lee, T., R. Fielding, and L. Masinter. +Uniform Resource Identifiers (URI): Generic Syntax and +Semantics. +1997. +(Work in progress; see updates to RFC1738.) + +Brüggemann-Klein, Anne. +Regular Expressions into Finite Automata. +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. + + + +Brüggemann-Klein, Anne, +and Derick Wood. +Deterministic Regular Languages. +Universität Freiburg, Institut für Informatik, +Bericht 38, Oktober 1991. + + +James Clark. +Comparison of SGML and XML. See +http://www.w3.org/TR/NOTE-sgml-xml-971215. + + +IETF (Internet Engineering Task Force). +RFC 1738: Uniform Resource Locators (URL), +ed. T. Berners-Lee, L. Masinter, M. McCahill. +1994. + + + +IETF (Internet Engineering Task Force). +RFC 1808: Relative Uniform Resource Locators, +ed. R. Fielding. +1995. + + + +IETF (Internet Engineering Task Force). +RFC 2141: URN Syntax, +ed. R. Moats. +1997. + + +ISO +(International Organization for Standardization). +ISO 8879:1986(E). Information processing — Text and Office +Systems — Standard Generalized Markup Language (SGML). First +edition — 1986-10-15. [Geneva]: International Organization for +Standardization, 1986. + + + +ISO +(International Organization for Standardization). +ISO/IEC 10744-1992 (E). Information technology — +Hypermedia/Time-based Structuring Language (HyTime). + +[Geneva]: International Organization for +Standardization, 1992. +Extended Facilities Annexe. +[Geneva]: International Organization for +Standardization, 1996. + + + + + + + + +Character Classes +

    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. + +Characters + +Letter +BaseChar +| Ideographic +BaseChar +[#x0041-#x005A] +| [#x0061-#x007A] +| [#x00C0-#x00D6] +| [#x00D8-#x00F6] +| [#x00F8-#x00FF] +| [#x0100-#x0131] +| [#x0134-#x013E] +| [#x0141-#x0148] +| [#x014A-#x017E] +| [#x0180-#x01C3] +| [#x01CD-#x01F0] +| [#x01F4-#x01F5] +| [#x01FA-#x0217] +| [#x0250-#x02A8] +| [#x02BB-#x02C1] +| #x0386 +| [#x0388-#x038A] +| #x038C +| [#x038E-#x03A1] +| [#x03A3-#x03CE] +| [#x03D0-#x03D6] +| #x03DA +| #x03DC +| #x03DE +| #x03E0 +| [#x03E2-#x03F3] +| [#x0401-#x040C] +| [#x040E-#x044F] +| [#x0451-#x045C] +| [#x045E-#x0481] +| [#x0490-#x04C4] +| [#x04C7-#x04C8] +| [#x04CB-#x04CC] +| [#x04D0-#x04EB] +| [#x04EE-#x04F5] +| [#x04F8-#x04F9] +| [#x0531-#x0556] +| #x0559 +| [#x0561-#x0586] +| [#x05D0-#x05EA] +| [#x05F0-#x05F2] +| [#x0621-#x063A] +| [#x0641-#x064A] +| [#x0671-#x06B7] +| [#x06BA-#x06BE] +| [#x06C0-#x06CE] +| [#x06D0-#x06D3] +| #x06D5 +| [#x06E5-#x06E6] +| [#x0905-#x0939] +| #x093D +| [#x0958-#x0961] +| [#x0985-#x098C] +| [#x098F-#x0990] +| [#x0993-#x09A8] +| [#x09AA-#x09B0] +| #x09B2 +| [#x09B6-#x09B9] +| [#x09DC-#x09DD] +| [#x09DF-#x09E1] +| [#x09F0-#x09F1] +| [#x0A05-#x0A0A] +| [#x0A0F-#x0A10] +| [#x0A13-#x0A28] +| [#x0A2A-#x0A30] +| [#x0A32-#x0A33] +| [#x0A35-#x0A36] +| [#x0A38-#x0A39] +| [#x0A59-#x0A5C] +| #x0A5E +| [#x0A72-#x0A74] +| [#x0A85-#x0A8B] +| #x0A8D +| [#x0A8F-#x0A91] +| [#x0A93-#x0AA8] +| [#x0AAA-#x0AB0] +| [#x0AB2-#x0AB3] +| [#x0AB5-#x0AB9] +| #x0ABD +| #x0AE0 +| [#x0B05-#x0B0C] +| [#x0B0F-#x0B10] +| [#x0B13-#x0B28] +| [#x0B2A-#x0B30] +| [#x0B32-#x0B33] +| [#x0B36-#x0B39] +| #x0B3D +| [#x0B5C-#x0B5D] +| [#x0B5F-#x0B61] +| [#x0B85-#x0B8A] +| [#x0B8E-#x0B90] +| [#x0B92-#x0B95] +| [#x0B99-#x0B9A] +| #x0B9C +| [#x0B9E-#x0B9F] +| [#x0BA3-#x0BA4] +| [#x0BA8-#x0BAA] +| [#x0BAE-#x0BB5] +| [#x0BB7-#x0BB9] +| [#x0C05-#x0C0C] +| [#x0C0E-#x0C10] +| [#x0C12-#x0C28] +| [#x0C2A-#x0C33] +| [#x0C35-#x0C39] +| [#x0C60-#x0C61] +| [#x0C85-#x0C8C] +| [#x0C8E-#x0C90] +| [#x0C92-#x0CA8] +| [#x0CAA-#x0CB3] +| [#x0CB5-#x0CB9] +| #x0CDE +| [#x0CE0-#x0CE1] +| [#x0D05-#x0D0C] +| [#x0D0E-#x0D10] +| [#x0D12-#x0D28] +| [#x0D2A-#x0D39] +| [#x0D60-#x0D61] +| [#x0E01-#x0E2E] +| #x0E30 +| [#x0E32-#x0E33] +| [#x0E40-#x0E45] +| [#x0E81-#x0E82] +| #x0E84 +| [#x0E87-#x0E88] +| #x0E8A +| #x0E8D +| [#x0E94-#x0E97] +| [#x0E99-#x0E9F] +| [#x0EA1-#x0EA3] +| #x0EA5 +| #x0EA7 +| [#x0EAA-#x0EAB] +| [#x0EAD-#x0EAE] +| #x0EB0 +| [#x0EB2-#x0EB3] +| #x0EBD +| [#x0EC0-#x0EC4] +| [#x0F40-#x0F47] +| [#x0F49-#x0F69] +| [#x10A0-#x10C5] +| [#x10D0-#x10F6] +| #x1100 +| [#x1102-#x1103] +| [#x1105-#x1107] +| #x1109 +| [#x110B-#x110C] +| [#x110E-#x1112] +| #x113C +| #x113E +| #x1140 +| #x114C +| #x114E +| #x1150 +| [#x1154-#x1155] +| #x1159 +| [#x115F-#x1161] +| #x1163 +| #x1165 +| #x1167 +| #x1169 +| [#x116D-#x116E] +| [#x1172-#x1173] +| #x1175 +| #x119E +| #x11A8 +| #x11AB +| [#x11AE-#x11AF] +| [#x11B7-#x11B8] +| #x11BA +| [#x11BC-#x11C2] +| #x11EB +| #x11F0 +| #x11F9 +| [#x1E00-#x1E9B] +| [#x1EA0-#x1EF9] +| [#x1F00-#x1F15] +| [#x1F18-#x1F1D] +| [#x1F20-#x1F45] +| [#x1F48-#x1F4D] +| [#x1F50-#x1F57] +| #x1F59 +| #x1F5B +| #x1F5D +| [#x1F5F-#x1F7D] +| [#x1F80-#x1FB4] +| [#x1FB6-#x1FBC] +| #x1FBE +| [#x1FC2-#x1FC4] +| [#x1FC6-#x1FCC] +| [#x1FD0-#x1FD3] +| [#x1FD6-#x1FDB] +| [#x1FE0-#x1FEC] +| [#x1FF2-#x1FF4] +| [#x1FF6-#x1FFC] +| #x2126 +| [#x212A-#x212B] +| #x212E +| [#x2180-#x2182] +| [#x3041-#x3094] +| [#x30A1-#x30FA] +| [#x3105-#x312C] +| [#xAC00-#xD7A3] + +Ideographic +[#x4E00-#x9FA5] +| #x3007 +| [#x3021-#x3029] + +CombiningChar +[#x0300-#x0345] +| [#x0360-#x0361] +| [#x0483-#x0486] +| [#x0591-#x05A1] +| [#x05A3-#x05B9] +| [#x05BB-#x05BD] +| #x05BF +| [#x05C1-#x05C2] +| #x05C4 +| [#x064B-#x0652] +| #x0670 +| [#x06D6-#x06DC] +| [#x06DD-#x06DF] +| [#x06E0-#x06E4] +| [#x06E7-#x06E8] +| [#x06EA-#x06ED] +| [#x0901-#x0903] +| #x093C +| [#x093E-#x094C] +| #x094D +| [#x0951-#x0954] +| [#x0962-#x0963] +| [#x0981-#x0983] +| #x09BC +| #x09BE +| #x09BF +| [#x09C0-#x09C4] +| [#x09C7-#x09C8] +| [#x09CB-#x09CD] +| #x09D7 +| [#x09E2-#x09E3] +| #x0A02 +| #x0A3C +| #x0A3E +| #x0A3F +| [#x0A40-#x0A42] +| [#x0A47-#x0A48] +| [#x0A4B-#x0A4D] +| [#x0A70-#x0A71] +| [#x0A81-#x0A83] +| #x0ABC +| [#x0ABE-#x0AC5] +| [#x0AC7-#x0AC9] +| [#x0ACB-#x0ACD] +| [#x0B01-#x0B03] +| #x0B3C +| [#x0B3E-#x0B43] +| [#x0B47-#x0B48] +| [#x0B4B-#x0B4D] +| [#x0B56-#x0B57] +| [#x0B82-#x0B83] +| [#x0BBE-#x0BC2] +| [#x0BC6-#x0BC8] +| [#x0BCA-#x0BCD] +| #x0BD7 +| [#x0C01-#x0C03] +| [#x0C3E-#x0C44] +| [#x0C46-#x0C48] +| [#x0C4A-#x0C4D] +| [#x0C55-#x0C56] +| [#x0C82-#x0C83] +| [#x0CBE-#x0CC4] +| [#x0CC6-#x0CC8] +| [#x0CCA-#x0CCD] +| [#x0CD5-#x0CD6] +| [#x0D02-#x0D03] +| [#x0D3E-#x0D43] +| [#x0D46-#x0D48] +| [#x0D4A-#x0D4D] +| #x0D57 +| #x0E31 +| [#x0E34-#x0E3A] +| [#x0E47-#x0E4E] +| #x0EB1 +| [#x0EB4-#x0EB9] +| [#x0EBB-#x0EBC] +| [#x0EC8-#x0ECD] +| [#x0F18-#x0F19] +| #x0F35 +| #x0F37 +| #x0F39 +| #x0F3E +| #x0F3F +| [#x0F71-#x0F84] +| [#x0F86-#x0F8B] +| [#x0F90-#x0F95] +| #x0F97 +| [#x0F99-#x0FAD] +| [#x0FB1-#x0FB7] +| #x0FB9 +| [#x20D0-#x20DC] +| #x20E1 +| [#x302A-#x302F] +| #x3099 +| #x309A + +Digit +[#x0030-#x0039] +| [#x0660-#x0669] +| [#x06F0-#x06F9] +| [#x0966-#x096F] +| [#x09E6-#x09EF] +| [#x0A66-#x0A6F] +| [#x0AE6-#x0AEF] +| [#x0B66-#x0B6F] +| [#x0BE7-#x0BEF] +| [#x0C66-#x0C6F] +| [#x0CE6-#x0CEF] +| [#x0D66-#x0D6F] +| [#x0E50-#x0E59] +| [#x0ED0-#x0ED9] +| [#x0F20-#x0F29] + +Extender +#x00B7 +| #x02D0 +| #x02D1 +| #x0387 +| #x0640 +| #x0E46 +| #x0EC6 +| #x3005 +| [#x3031-#x3035] +| [#x309D-#x309E] +| [#x30FC-#x30FE] + + + + +

    +

    The character classes defined here can be derived from the +Unicode character database as follows: + + +

    Name start characters must have one of the categories Ll, Lu, +Lo, Lt, Nl.

    + + +

    Name characters other than Name-start characters +must have one of the categories Mc, Me, Mn, Lm, or Nd.

    +
    + +

    Characters in the compatibility area (i.e. with character code +greater than #xF900 and less than #xFFFE) are not allowed in XML +names.

    +
    + +

    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 "<") are not allowed.

    +
    + +

    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.

    +
    + +

    Characters #x20DD-#x20E0 are excluded (in accordance with +Unicode, section 5.14).

    +
    + +

    Character #x00B7 is classified as an extender, because the +property list so identifies it.

    +
    + +

    Character #x0387 is added as a name character, because #x00B7 +is its canonical equivalent.

    +
    + +

    Characters ':' and '_' are allowed as name-start characters.

    +
    + +

    Characters '-' and '.' are allowed as name characters.

    +
    + +

    +
    + +XML and SGML + +

    XML is designed to be a subset of SGML, in that every +valid 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 . +

    +
    + +Expansion of Entity and Character References +

    This appendix contains some examples illustrating the +sequence of entity- and character-reference recognition and +expansion, as specified in .

    +

    +If the DTD contains the declaration +An ampersand (&#38;) may be escaped +numerically (&#38;#38;) or with a general entity +(&amp;).

    " > +]]> +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 "example": +An ampersand (&) may be escaped +numerically (&#38;) or with a general entity +(&amp;).

    +]]>
    +A reference in the document to "&example;" +will cause the text to be reparsed, at which time the +start- and end-tags of the "p" element will be recognized +and the three references will be recognized and expanded, +resulting in a "p" element with the following content +(all data, no delimiters or markup): + +

    +

    A more complex example will illustrate the rules and their +effects fully. In the following example, the line numbers are +solely for reference. + +2 +4 +5 ' > +6 %xx; +7 ]> +8 This sample shows a &tricky; method. +]]> +This produces the following: + +

    in line 4, the reference to character 37 is expanded immediately, +and the parameter entity "xx" is stored in the symbol +table with the value "%zz;". Since the replacement text +is not rescanned, the reference to parameter entity "zz" +is not recognized. (And it would be an error if it were, since +"zz" is not yet declared.)

    +

    in line 5, the character reference "&#60;" is +expanded immediately and the parameter entity "zz" is +stored with the replacement text +"<!ENTITY tricky "error-prone" >", +which is a well-formed entity declaration.

    +

    in line 6, the reference to "xx" is recognized, +and the replacement text of "xx" (namely +"%zz;") is parsed. The reference to "zz" +is recognized in its turn, and its replacement text +("<!ENTITY tricky "error-prone" >") is parsed. +The general entity "tricky" has now been +declared, with the replacement text "error-prone".

    +

    +in line 8, the reference to the general entity "tricky" is +recognized, and it is expanded, so the full content of the +"test" element is the self-describing (and ungrammatical) string +This sample shows a error-prone method. +

    + +

    +
    + +Deterministic Content Models +

    For compatibility, it is +required +that content models in element type declarations be deterministic. +

    + +

    SGML +requires deterministic content models (it calls them +"unambiguous"); XML processors built using SGML systems may +flag non-deterministic content models as errors.

    +

    For example, the content model ((b, c) | (b, d)) is +non-deterministic, because given an initial b the parser +cannot know which b in the model is being matched without +looking ahead to see which element follows the b. +In this case, the two references to +b can be collapsed +into a single reference, making the model read +(b, (c | d)). An initial b now clearly +matches only a single name in the content model. The parser doesn't +need to look ahead to see what follows; either c or +d would be accepted.

    +

    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 . +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. +

    +

    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 .

    +
    + +Autodetection of Character Encodings +

    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—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. +

    +

    +Because each XML entity not in UTF-8 or UTF-16 format must +begin with an XML encoding declaration, in which the first characters +must be '<?xml', 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, '<' is +"#x0000003C" and '?' is "#x0000003F", and the Byte +Order Mark required of UTF-16 data streams is "#xFEFF".

    +

    + + +

    00 00 00 3C: UCS-4, big-endian machine (1234 order)

    + + +

    3C 00 00 00: UCS-4, little-endian machine (4321 order)

    +
    + +

    00 00 3C 00: UCS-4, unusual octet order (2143)

    +
    + +

    00 3C 00 00: UCS-4, unusual octet order (3412)

    +
    + +

    FE FF: UTF-16, big-endian

    +
    + +

    FF FE: UTF-16, little-endian

    +
    + +

    00 3C 00 3F: UTF-16, big-endian, no Byte Order Mark +(and thus, strictly speaking, in error)

    +
    + +

    3C 00 3F 00: UTF-16, little-endian, no Byte Order Mark +(and thus, strictly speaking, in error)

    +
    + +

    3C 3F 78 6D: 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 +

    +
    + +

    4C 6F A7 94: EBCDIC (in some flavor; the full +encoding declaration must be read to tell which code page is in +use)

    +
    + +

    other: UTF-8 without an encoding declaration, or else +the data stream is corrupt, fragmentary, or enclosed in +a wrapper of some kind

    +
    + +

    +

    +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). +

    +

    +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. +

    +

    +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. +

    +

    +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. +

    +

    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. + +

    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. +

    +

    If an XML entity is delivered with a +MIME type of text/xml, then the charset parameter +on the MIME type determines the +character encoding method; all other heuristics and sources of +information are solely for error recovery. +

    +

    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. +

    + +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. +

    + +
    + + +W3C XML Working Group + +

    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:

    + + +Jon Bosak, SunChair +James ClarkTechnical Lead +Tim Bray, Textuality and NetscapeXML Co-editor +Jean Paoli, MicrosoftXML Co-editor +C. M. Sperberg-McQueen, U. of Ill.XML +Co-editor +Dan Connolly, W3CW3C Liaison +Paula Angerstein, Texcel +Steve DeRose, INSO +Dave Hollander, HP +Eliot Kimber, ISOGEN +Eve Maler, ArborText +Tom Magliery, NCSA +Murray Maloney, Muzmo and Grif +Makoto Murata, Fuji Xerox Information Systems +Joel Nava, Adobe +Conleth O'Connell, Vignette +Peter Sharpe, SoftQuad +John Tigue, DataChannel + + +
    +
    +
    + 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 diff --git a/result/valid/REC-xml-19980210.xml.err.rdr b/result/valid/REC-xml-19980210.xml.err.rdr new file mode 100644 index 0000000..e69de29 diff --git a/result/valid/UTF16Entity.xml b/result/valid/UTF16Entity.xml new file mode 100644 index 0000000..63cbba2 --- /dev/null +++ b/result/valid/UTF16Entity.xml @@ -0,0 +1,8 @@ + + + + + +]> + &utf16b; &utf16l; diff --git a/result/valid/UTF16Entity.xml.err b/result/valid/UTF16Entity.xml.err new file mode 100644 index 0000000..e69de29 diff --git a/result/valid/UTF16Entity.xml.err.rdr b/result/valid/UTF16Entity.xml.err.rdr new file mode 100644 index 0000000..e69de29 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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/result/valid/dia.xml.err b/result/valid/dia.xml.err new file mode 100644 index 0000000..e69de29 diff --git a/result/valid/dia.xml.err.rdr b/result/valid/dia.xml.err.rdr new file mode 100644 index 0000000..e69de29 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 @@ + + + + + + +]> + + + + + diff --git a/result/valid/id1.xml.err b/result/valid/id1.xml.err new file mode 100644 index 0000000..e69de29 diff --git a/result/valid/id1.xml.err.rdr b/result/valid/id1.xml.err.rdr new file mode 100644 index 0000000..e69de29 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 @@ + + + + + + +"> +]> + + + &dest; + + diff --git a/result/valid/id2.xml.err b/result/valid/id2.xml.err new file mode 100644 index 0000000..e69de29 diff --git a/result/valid/id2.xml.err.rdr b/result/valid/id2.xml.err.rdr new file mode 100644 index 0000000..e69de29 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 @@ + + + + + + + +]> + + + &dest; + + diff --git a/result/valid/id3.xml.err b/result/valid/id3.xml.err new file mode 100644 index 0000000..e69de29 diff --git a/result/valid/id3.xml.err.rdr b/result/valid/id3.xml.err.rdr new file mode 100644 index 0000000..e69de29 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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]> + + + + 20011022T154508Z + + + + + afp.com + 20011022 + mmd--deutsch--journal--spo + 1 + urn:NewsML:afp.com:20011022:mmd--deutsch--journal--spo:1 + + HINTERGRUND + + + + 20011022T154508Z + 20011022T154508Z + + + + + + + + + + + + + + Berliner SPD führt Gespräche mit FDP und Grünen + + + + + + INFOGRAFIK: Das Berliner Wahlergebnis + + + + + + Schwierige Koalitionsverhandlungen in Berlin + + + + + + Die Lieblingsfarben des Kanzlers sind Rot Gelb Grün + + + + + + INFOGRAFIK: Wen wählt Wowereit? + + + + + + CDU ist auch in kommunalen Rathäusern der Verlierer + + + + + + Gutes Abschneiden der PDS hat verschiedene Gründe + + + + + + Ans Regieren hat sich Klaus Wowereit gewöhnt + + + + + + Steffel brachte CDU nicht auf Erfolgskurs + + + + + + Sibyll Klotz: Vollblutpolitikerin mit "Berliner Schnauze" + + + + + + Mit Gysi muss weiter gerechnet werden + + + + + + Rexrodt - das Stehaufmännchen der Berliner FDP + + + + + + diff --git a/result/valid/index.xml.err b/result/valid/index.xml.err new file mode 100644 index 0000000..e69de29 diff --git a/result/valid/index.xml.err.rdr b/result/valid/index.xml.err.rdr new file mode 100644 index 0000000..e69de29 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 @@ + + + + + + + +]> + + Some text. + + Some text. + + Some text. + diff --git a/result/valid/mixed_ns.xml.err b/result/valid/mixed_ns.xml.err new file mode 100644 index 0000000..e69de29 diff --git a/result/valid/mixed_ns.xml.err.rdr b/result/valid/mixed_ns.xml.err.rdr new file mode 100644 index 0000000..e69de29 diff --git a/result/valid/notes.xml b/result/valid/notes.xml new file mode 100644 index 0000000..6ab3aa3 --- /dev/null +++ b/result/valid/notes.xml @@ -0,0 +1,3 @@ + + + diff --git a/result/valid/notes.xml.err b/result/valid/notes.xml.err new file mode 100644 index 0000000..e69de29 diff --git a/result/valid/notes.xml.err.rdr b/result/valid/notes.xml.err.rdr new file mode 100644 index 0000000..e69de29 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 @@ + + + + +]> + diff --git a/result/valid/ns.xml.err b/result/valid/ns.xml.err new file mode 100644 index 0000000..e69de29 diff --git a/result/valid/ns.xml.err.rdr b/result/valid/ns.xml.err.rdr new file mode 100644 index 0000000..e69de29 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 @@ + + + + + + +]> + + + diff --git a/result/valid/ns2.xml.err b/result/valid/ns2.xml.err new file mode 100644 index 0000000..e69de29 diff --git a/result/valid/ns2.xml.err.rdr b/result/valid/ns2.xml.err.rdr new file mode 100644 index 0000000..e69de29 diff --git a/result/valid/objednavka.xml b/result/valid/objednavka.xml new file mode 100644 index 0000000..b0ffd92 --- /dev/null +++ b/result/valid/objednavka.xml @@ -0,0 +1,39 @@ + + + + + Jan Novák + BÄ›lehradská 147 + Praha 2 + 12000 + + + Petra Nováková + Anglická 15 + Praha 2 + 12000 + + DPD + dobírka + 2004-11-14 + 2004-11-19 + + + 2N7-516 + SekaÄka na trávu + 1 + 2999 + http://example.org/sekacka.html + + + Q3Y-116 + Travní semeno + 2.5 + 127.50 + + + + <Řádka>O dodávku mám zájem pouze v případÄ›, že se jedná o trávu v odrůdÄ› konopí. + <Řádka>Dále jsem se chtÄ›l zeptat, zda je doprava zdarma. + + diff --git a/result/valid/objednavka.xml.err b/result/valid/objednavka.xml.err new file mode 100644 index 0000000..e69de29 diff --git a/result/valid/objednavka.xml.err.rdr b/result/valid/objednavka.xml.err.rdr new file mode 100644 index 0000000..e69de29 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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]> + + + +PP + + 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 + + ^ diff --git a/result/valid/rss.xml.err.rdr b/result/valid/rss.xml.err.rdr new file mode 100644 index 0000000..2ec7c9e --- /dev/null +++ b/result/valid/rss.xml.err.rdr @@ -0,0 +1,3 @@ +./test/valid/rss.xml:177: element rss: validity error : Element rss does not carry attribute version + + ^ diff --git a/result/valid/t10.xml b/result/valid/t10.xml new file mode 100644 index 0000000..b60f2f9 --- /dev/null +++ b/result/valid/t10.xml @@ -0,0 +1,12 @@ + + + + +]> + + + + + + diff --git a/result/valid/t10.xml.err b/result/valid/t10.xml.err new file mode 100644 index 0000000..e69de29 diff --git a/result/valid/t10.xml.err.rdr b/result/valid/t10.xml.err.rdr new file mode 100644 index 0000000..e69de29 diff --git a/result/valid/t11.xml b/result/valid/t11.xml new file mode 100644 index 0000000..d871787 --- /dev/null +++ b/result/valid/t11.xml @@ -0,0 +1,3 @@ + + +&peInCdata; diff --git a/result/valid/t11.xml.err b/result/valid/t11.xml.err new file mode 100644 index 0000000..e69de29 diff --git a/result/valid/t11.xml.err.rdr b/result/valid/t11.xml.err.rdr new file mode 100644 index 0000000..e69de29 diff --git a/result/valid/t4.dtd b/result/valid/t4.dtd new file mode 100644 index 0000000..e69de29 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 + + ^ +./test/valid/t4.dtd:1: parser error : Extra content at the end of the document + + ^ diff --git a/result/valid/t4.dtd.err.rdr b/result/valid/t4.dtd.err.rdr new file mode 100644 index 0000000..23a3258 --- /dev/null +++ b/result/valid/t4.dtd.err.rdr @@ -0,0 +1,6 @@ +./test/valid/t4.dtd:1: parser error : StartTag: invalid element name + + ^ +./test/valid/t4.dtd:1: parser error : Extra content at the end of the document + + ^ 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 @@ + + +&abc; diff --git a/result/valid/t4.xml.err b/result/valid/t4.xml.err new file mode 100644 index 0000000..e69de29 diff --git a/result/valid/t4.xml.err.rdr b/result/valid/t4.xml.err.rdr new file mode 100644 index 0000000..e69de29 diff --git a/result/valid/t4a.dtd b/result/valid/t4a.dtd new file mode 100644 index 0000000..e69de29 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 + + ^ +./test/valid/t4a.dtd:1: parser error : Extra content at the end of the document + + ^ diff --git a/result/valid/t4a.dtd.err.rdr b/result/valid/t4a.dtd.err.rdr new file mode 100644 index 0000000..48cdd5f --- /dev/null +++ b/result/valid/t4a.dtd.err.rdr @@ -0,0 +1,6 @@ +./test/valid/t4a.dtd:1: parser error : StartTag: invalid element name + + ^ +./test/valid/t4a.dtd:1: parser error : Extra content at the end of the document + + ^ 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 @@ + + +&abc; diff --git a/result/valid/t4a.xml.err b/result/valid/t4a.xml.err new file mode 100644 index 0000000..e69de29 diff --git a/result/valid/t4a.xml.err.rdr b/result/valid/t4a.xml.err.rdr new file mode 100644 index 0000000..e69de29 diff --git a/result/valid/t6.dtd b/result/valid/t6.dtd new file mode 100644 index 0000000..e69de29 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 + + ^ +./test/valid/t6.dtd:1: parser error : Extra content at the end of the document + + ^ diff --git a/result/valid/t6.dtd.err.rdr b/result/valid/t6.dtd.err.rdr new file mode 100644 index 0000000..6e84d68 --- /dev/null +++ b/result/valid/t6.dtd.err.rdr @@ -0,0 +1,6 @@ +./test/valid/t6.dtd:1: parser error : StartTag: invalid element name + + ^ +./test/valid/t6.dtd:1: parser error : Extra content at the end of the document + + ^ 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 @@ + + +&abc; diff --git a/result/valid/t6.xml.err b/result/valid/t6.xml.err new file mode 100644 index 0000000..e69de29 diff --git a/result/valid/t6.xml.err.rdr b/result/valid/t6.xml.err.rdr new file mode 100644 index 0000000..e69de29 diff --git a/result/valid/t8.xml b/result/valid/t8.xml new file mode 100644 index 0000000..e69de29 diff --git a/result/valid/t8.xml.err b/result/valid/t8.xml.err new file mode 100644 index 0000000..1a3c006 --- /dev/null +++ b/result/valid/t8.xml.err @@ -0,0 +1,19 @@ +Entity: line 1: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration + + %defroot; + ^ +Entity: line 1: +<!ELEMENT root (middle) > +^ +Entity: line 1: parser error : DOCTYPE improperly terminated + %defroot; + ^ +Entity: line 1: +<!ELEMENT root (middle) > +^ +Entity: line 1: parser error : Start tag expected, '<' not found + %defroot; + ^ +Entity: line 1: +<!ELEMENT root (middle) > +^ diff --git a/result/valid/t8.xml.err.rdr b/result/valid/t8.xml.err.rdr new file mode 100644 index 0000000..c198a16 --- /dev/null +++ b/result/valid/t8.xml.err.rdr @@ -0,0 +1,14 @@ +Entity: line 1: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration + + %defroot; + ^ +Entity: line 1: +<!ELEMENT root (middle) > +^ +Entity: line 1: parser error : DOCTYPE improperly terminated + %defroot; + ^ +Entity: line 1: +<!ELEMENT root (middle) > +^ +./test/valid/t8.xml : failed to parse diff --git a/result/valid/t8a.xml b/result/valid/t8a.xml new file mode 100644 index 0000000..e69de29 diff --git a/result/valid/t8a.xml.err b/result/valid/t8a.xml.err new file mode 100644 index 0000000..1a3c006 --- /dev/null +++ b/result/valid/t8a.xml.err @@ -0,0 +1,19 @@ +Entity: line 1: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration + + %defroot; + ^ +Entity: line 1: +<!ELEMENT root (middle) > +^ +Entity: line 1: parser error : DOCTYPE improperly terminated + %defroot; + ^ +Entity: line 1: +<!ELEMENT root (middle) > +^ +Entity: line 1: parser error : Start tag expected, '<' not found + %defroot; + ^ +Entity: line 1: +<!ELEMENT root (middle) > +^ diff --git a/result/valid/t8a.xml.err.rdr b/result/valid/t8a.xml.err.rdr new file mode 100644 index 0000000..b6bdcbe --- /dev/null +++ b/result/valid/t8a.xml.err.rdr @@ -0,0 +1,14 @@ +Entity: line 1: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration + + %defroot; + ^ +Entity: line 1: +<!ELEMENT root (middle) > +^ +Entity: line 1: parser error : DOCTYPE improperly terminated + %defroot; + ^ +Entity: line 1: +<!ELEMENT root (middle) > +^ +./test/valid/t8a.xml : failed to parse 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 @@ + +"> +"> +"> + + + +]> +sample diff --git a/result/valid/t9.xml.err b/result/valid/t9.xml.err new file mode 100644 index 0000000..e69de29 diff --git a/result/valid/t9.xml.err.rdr b/result/valid/t9.xml.err.rdr new file mode 100644 index 0000000..e69de29 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 @@ + +"> +"> +"> + + + +]> +sample diff --git a/result/valid/t9a.xml.err b/result/valid/t9a.xml.err new file mode 100644 index 0000000..e69de29 diff --git a/result/valid/t9a.xml.err.rdr b/result/valid/t9a.xml.err.rdr new file mode 100644 index 0000000..e69de29 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 @@ + + + + + +XHTML 1.0: The Extensible HyperText Markup +Language + + + + + +

    W3C

    + +

    XHTML 1.0: +The Extensible HyperText Markup Language

    + +

    A Reformulation of HTML 4.0 in XML 1.0

    + +

    W3C Proposed Recommendation 10 December 1999

    + +
    +
    This version:
    + +
    +http://www.w3.org/TR/1999/PR-xhtml1-19991210
    +(Postscript version, +PDF version, +ZIP archive, or +Gzip'd TAR archive) +
    + +
    Latest version:
    + +
    +http://www.w3.org/TR/xhtml1
    + +
    Previous versions:
    + +
    +http://www.w3.org/TR/1999/WD-xhtml1-19991124
    +
    +http://www.w3.org/TR/1999/PR-xhtml1-19990824
    + +
    Authors:
    + +
    See acknowledgements.
    +
    + + +
    +
    + +

    Abstract

    + +

    This specification defines XHTML 1.0, a reformulation of HTML +4.0 as an XML 1.0 application, and three DTDs 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.

    + +

    Status of this document

    + +

    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.

    + +

    This specification is a Proposed Recommendation of the HTML Working Group. It is +a revision of the Proposed Recommendation dated 24 August +1999 incorporating changes as a result of comments from the Proposed +Recommendation review, and +comments and further deliberations of the W3C HTML Working Group. A +diff-marked version from the previous +proposed recommendation is available for comparison purposes.

    + +

    On 10 December 1999, this document enters a + +Proposed Recommendation 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.

    + +

    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.

    + +

    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."

    + +

    This document has been produced as part of the W3C HTML Activity. The goals of +the HTML Working +Group (members +only) are discussed in the HTML Working Group +charter (members +only).

    + +

    A list of current W3C Recommendations and other technical documents +can be found at http://www.w3.org/TR.

    + +

    Public discussion on HTML features takes place on the mailing list www-html@w3.org (archive). The W3C +staff contact for work on HTML is Dave +Raggett.

    + +

    Please report errors in this document to www-html-editor@w3.org.

    + +

    The list of known errors in this specification is available at http://www.w3.org/1999/12/PR-xhtml1-19991210-errata.

    + +

    Contents

    + + + + +

    1. What is XHTML?

    + +

    XHTML is a family of current and future document types and modules that +reproduce, subset, and extend HTML 4.0 [HTML]. XHTML family document types are XML 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 Future +Directions.

    + +

    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 [XML]. It is intended +to be used as a language for content that is both XML-conforming and, if some +simple guidelines are followed, +operates in HTML 4.0 conforming user agents. Developers who migrate +their content to XHTML 1.0 will realize the following benefits:

    + +
      +
    • XHTML documents are XML conforming. As such, they are readily viewed, +edited, and validated with standard XML tools.
    • +
    • 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.
    • +
    • 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 [DOM].
    • +
    • As the XHTML family evolves, documents conforming to XHTML 1.0 will be more +likely to interoperate within and among various XHTML environments.
    • +
    + +

    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.

    + +

    1.1 What is HTML 4.0?

    + +

    HTML 4.0 [HTML] is an SGML (Standard +Generalized Markup Language) application conforming to +International Standard ISO 8879, and is widely regarded as the +standard publishing language of the World Wide Web.

    + +

    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.

    + +

    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.

    + +

    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.

    + +

    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.

    + +

    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.

    + +

    1.2 What is XML?

    + +

    XML is the shorthand for Extensible Markup +Language, and is an acronym of Extensible Markup Language [XML].

    + +

    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.

    + +

    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.

    + +

    1.3 Why the need for XHTML?

    + +

    The benefits of migrating to XHTML 1.0 are described above. Some of the +benefits of migrating to XHTML in general are:

    + +
      +
    • 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.
    • + +
    • 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.
    • + +
    + +

    2. Definitions

    + +

    2.1 Terminology

    + +

    The following terms are used in this specification. These +terms extend the definitions in +[RFC2119] in ways based upon similar definitions in ISO/IEC +9945-1:1990 [POSIX.1]:

    + +
    +
    Implementation-defined
    + +
    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.
    + +
    May
    + +
    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 Document Conformance, the word "may" means that +the optional feature must not be used. The term "optional" has +the same definition as "may".
    + +
    Must
    + +
    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".
    + +
    Reserved
    + +
    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.
    + +
    Should
    + +
    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.
    + +
    Supported
    + +
    Certain facilities in this specification are optional. If a +facility is supported, it behaves as specified by this +specification.
    + +
    Unspecified
    + +
    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.
    +
    + +

    2.2 General Terms

    + +
    +
    Attribute
    + +
    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.
    + +
    DTD
    + +
    A DTD, or document type definition, is a collection of XML +declarations that, as a collection, defines the legal structure, +elements, and +attributes that are available for use in a document that +complies to the DTD.
    + +
    Document
    + +
    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 +elements that are organized as defined in the associated +DTD. See Document +Conformance for more information.
    + +
    Element
    + +
    An element is a document structuring unit declared in the +DTD. The element's content model is +defined in the DTD, and additional +semantics may be defined in the prose description of the +element.
    + +
    Facilities
    + +
    Functionality includes elements, +attributes, and the semantics +associated with those elements and +attributes. An implementation +supporting that functionality is said to provide the necessary +facilities.
    + +
    Implementation
    + +
    An implementation is a system that provides collection of +facilities and services that supports +this specification. See User Agent +Conformance for more information.
    + +
    Parsing
    + +
    Parsing is the act whereby a +document is scanned, and the information contained within +the document is filtered into the +context of the elements in which the +information is structured.
    + +
    Rendering
    + +
    Rendering is the act whereby the information in a document is presented. This presentation is +done in the form most appropriate to the environment (e.g. +aurally, visually, in print).
    + +
    User Agent
    + +
    A user agent is an implementation +that retrieves and processes XHTML documents. See User Agent Conformance for more information.
    + +
    Validation
    + +
    Validation is a process whereby +documents are verified against the associated DTD, ensuring that the structure, use of elements, and use of +attributes are consistent with the definitions in the +DTD.
    + +
    Well-formed
    + +
    A document is well-formed when it +is structured according to the rules defined in Section 2.1 of +the XML 1.0 Recommendation [XML]. +Basically, this definition states that elements, delimited by +their start and end tags, are nested properly within one +another.
    +
    + + +

    3. Normative Definition of +XHTML 1.0

    + +

    3.1 Document +Conformance

    + +

    This version of XHTML provides a definition of strictly +conforming XHTML documents, which are restricted to tags and +attributes from the XHTML namespace. See Section 3.1.2 for information on using XHTML +with other namespaces, for instance, to include metadata +expressed in RDF within XHTML documents.

    + +

    3.1.1 Strictly Conforming +Documents

    + +

    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:

    + +
      +
    1. +

      It must validate against one of the three DTDs found in Appendix A.

      +
    2. + +
    3. +

      The root element of the document must be +<html>.

      +
    4. + +
    5. +

      The root element of the document must designate the XHTML +namespace using the xmlns attribute [XMLNAMES]. The namespace for XHTML is +defined to be +http://www.w3.org/1999/xhtml.

      +
    6. + +
    7. +

      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 Appendix A using the respective +Formal Public Identifier. The system identifier may be changed to reflect +local system conventions.

      + +
      +<!DOCTYPE html 
      +     PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
      +     "http://www.w3.org/TR/1999/PR-xhtml1-19991210/DTD/xhtml1-strict.dtd>
      +
      +<!DOCTYPE html 
      +     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
      +     "http://www.w3.org/TR/1999/PR-xhtml1-19991210/DTD/xhtml1-transitional.dtd>
      +
      +<!DOCTYPE html 
      +     PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
      +     "http://www.w3.org/TR/1999/PR-xhtml1-19991210/DTD/xhtml1-frameset.dtd>
      +
      +
    8. +
    + +

    Here is an example of a minimal XHTML document.

    + +
    +
    +<?xml version="1.0" encoding="UTF-8"?>
    +<!DOCTYPE html 
    +     PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    +    "http://www.w3.org/TR/1999/PR-xhtml1-19991210/DTD/xhtml1-strict.dtd">
    +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    +  <head>
    +    <title>Virtual Library</title>
    +  </head>
    +  <body>
    +    <p>Moved to <a href="http://vlib.org/">vlib.org</a>.</p>
    +  </body>
    +</html>
    +
    + +

    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.

    + +

    3.1.2 Using XHTML with +other namespaces

    + +

    The XHTML namespace may be used with other XML namespaces +as per [XMLNAMES], 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.

    + +

    The following example shows the way in which XHTML 1.0 could +be used in conjunction with the MathML Recommendation:

    + +
    +
    +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    +  <head>
    +    <title>A Math Example</title>
    +  </head>
    +  <body>
    +    <p>The following is MathML markup:</p>
    +    <math xmlns="http://www.w3.org/1998/Math/MathML">
    +      <apply> <log/>
    +        <logbase>
    +          <cn> 3 </cn>
    +        </logbase>
    +        <ci> x </ci>
    +      </apply>
    +    </math>
    +  </body>
    +</html>
    +
    +
    + +

    The following example shows the way in which XHTML 1.0 markup +could be incorporated into another XML namespace:

    + +
    +
    +<?xml version="1.0" encoding="UTF-8"?>
    +<!-- initially, the default namespace is "books" -->
    +<book xmlns='urn:loc.gov:books'
    +    xmlns:isbn='urn:ISBN:0-395-36341-6' xml:lang="en" lang="en">
    +  <title>Cheaper by the Dozen</title>
    +  <isbn:number>1568491379</isbn:number>
    +  <notes>
    +    <!-- make HTML the default namespace for a hypertext commentary -->
    +    <p xmlns='http://www.w3.org/1999/xhtml'>
    +        This is also available <a href="http://www.w3.org/">online</a>.
    +    </p>
    +  </notes>
    +</book>
    +
    +
    + +

    3.2 User Agent +Conformance

    + +

    A conforming user agent must meet all of the following +criteria:

    + +
      +
    1. In order to be consistent with the XML 1.0 Recommendation [XML], 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 +[XML].
    2. + +
    3. When the user agent claims to support +facilities defined within this specification or required by +this specification through normative reference, it must do so in +ways consistent with the facilities' definition.
    4. + +
    5. When a user agent processes an XHTML document as generic XML, +it shall only recognize attributes of type +ID (e.g. the id attribute on most XHTML elements) +as fragment identifiers.
    6. + +
    7. If a user agent encounters an element it does not recognize, +it must render the element's content.
    8. + +
    9. 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).
    10. + +
    11. If a user agent encounters an attribute value it doesn't +recognize, it must use the default attribute value.
    12. + +
    13. 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.
    14. + +
    15. 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.
    16. + +
    17. +The following characters are defined in [XML] as whitespace characters: + +
        +
      • Space (&#x0020;)
      • +
      • Tab (&#x0009;)
      • +
      • Carriage return (&#x000D;)
      • +
      • Line feed (&#x000A;)
      • +
      + +

      +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: +

      + +
        +
      • Form feed (&#x000C;)
      • +
      • Zero-width space (&#x200B;)
      • +
      + +

      +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: +

      + +
        +
      • +All whitespace surrounding block elements should be removed. +
      • +
      • +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. +
      • +
      • +Leading and trailing whitespace inside a block element must be removed. +
      • +
      • Line feed characters within a block element must be converted into a +space (except when the 'xml:space' attribute is set to 'preserve'). +
      • +
      • +A sequence of white space characters must be reduced to a single space +character (except when the 'xml:space' attribute is set to 'preserve'). +
      • +
      • +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. +
      • +
      + +

      Whitespace in attribute values is processed according to [XML].

      +
    18. +
    + + +

    4. Differences with HTML +4.0

    + +

    Due to the fact that XHTML is an XML application, certain +practices that were perfectly legal in SGML-based HTML 4.0 [HTML] must be changed.

    + +

    4.1 Documents must be +well-formed

    + +

    Well-formedness is a new concept +introduced by [XML]. 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.

    + +

    Although overlapping is illegal in SGML, it was widely +tolerated in existing browsers.

    + +
    +

    CORRECT: nested elements.

    + +

    <p>here is an emphasized +<em>paragraph</em>.</p>

    +
    + +
    +

    INCORRECT: overlapping elements

    + +

    <p>here is an emphasized +<em>paragraph.</p></em>

    +
    + +

    4.2 Element and attribute +names must be in lower case

    + +

    XHTML documents must use lower case for all HTML element and +attribute names. This difference is necessary because XML is +case-sensitive e.g. <li> and <LI> are different +tags.

    + +

    4.3 For non-empty elements, +end tags are required

    + +

    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 EMPTY must +have an end tag.

    + +
    +

    CORRECT: terminated elements

    + +

    <p>here is a paragraph.</p><p>here is +another paragraph.</p>

    +
    + +
    +

    INCORRECT: unterminated elements

    + +

    <p>here is a paragraph.<p>here is another +paragraph.

    +
    + +

    4.4 Attribute values must +always be quoted

    + +

    All attribute values must be quoted, even those which appear +to be numeric.

    + +
    +

    CORRECT: quoted attribute values

    + +

    <table rows="3">

    +
    + +
    +

    INCORRECT: unquoted attribute values

    + +

    <table rows=3>

    +
    + +

    4.5 Attribute +Minimization

    + +

    XML does not support attribute minimization. Attribute-value +pairs must be written in full. Attribute names such as +compact and checked cannot occur in elements +without their value being specified.

    + +
    +

    CORRECT: unminimized attributes

    + +

    <dl compact="compact">

    +
    + +
    +

    INCORRECT: minimized attributes

    + +

    <dl compact>

    +
    + +

    4.6 Empty Elements

    + +

    Empty elements must either have an end tag or the start tag must end with />. For instance, +<br/> or <hr></hr>. See HTML Compatibility Guidelines for information on ways to +ensure this is backward compatible with HTML 4.0 user agents.

    + +
    +

    CORRECT: terminated empty tags

    + +

    <br/><hr/>

    +
    + +
    +

    INCORRECT: unterminated empty tags

    + +

    <br><hr>

    +
    + +

    4.7 Whitespace handling in +attribute values

    + +

    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 +Section 3.3.3 of [XML].

    + +

    4.8 Script and Style +elements

    + +

    In XHTML, the script and style elements are declared as having +#PCDATA content. As a result, < and +& will be treated as the start of markup, and +entities such as &lt; and &amp; +will be recognized as entity references by the XML processor to +< and & respectively. Wrapping +the content of the script or style element within a +CDATA marked section avoids the expansion of these +entities.

    + +
    +
    +<script>
    + <![CDATA[
    + ... unescaped script content ...
    + ]]>
    + </script>
    +
    +
    + +

    CDATA sections are recognized by the XML +processor and appear as nodes in the Document Object Model, see + +Section 1.3 of the DOM Level 1 Recommendation [DOM].

    + +

    An alternative is to use external script and style +documents.

    + +

    4.9 SGML exclusions

    + +

    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.

    + +

    For example, the HTML 4.0 Strict DTD forbids the nesting of an +'a' element within another 'a' 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 +Appendix B.

    + +

    4.10 The elements with 'id' and 'name' +attributes

    + +

    HTML 4.0 defined the name attribute for the elements +a, +applet, frame, +iframe, img, and map. +HTML 4.0 also introduced +the id attribute. Both of these attributes are designed to be +used as fragment identifiers.

    +

    In XML, fragment identifiers are of type ID, and +there can only be a single attribute of type ID per element. +Therefore, in XHTML 1.0 the id +attribute is defined to be of type ID. In order to +ensure that XHTML 1.0 documents are well-structured XML documents, XHTML 1.0 +documents MUST use the id attribute when defining fragment +identifiers, even on elements that historically have also had a +name attribute. +See the HTML Compatibility +Guidelines for information on ensuring such anchors are backwards +compatible when serving XHTML documents as media type text/html. +

    +

    Note that in XHTML 1.0, the name attribute of these +elements is formally deprecated, and will be removed in a +subsequent version of XHTML.

    + + +

    5. Compatibility Issues

    + +

    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 Appendix C.

    + +

    5.1 Internet Media Type

    +

    As of the publication of this recommendation, the general +recommended MIME labeling for XML-based applications +has yet to be resolved.

    + +

    However, XHTML Documents which follow the guidelines set forth +in Appendix C, "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.

    + + +

    6. Future Directions

    + +

    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.

    + +

    6.1 Modularizing HTML

    + +

    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.

    + +

    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.

    + +

    These modules will be defined in a later W3C document.

    + +

    6.2 Subsets and +Extensibility

    + +

    Modularization brings with it several advantages:

    + +
      +
    • +

      It provides a formal mechanism for sub-setting XHTML.

      +
    • + +
    • +

      It provides a formal mechanism for extending XHTML.

      +
    • + +
    • +

      It simplifies the transformation between document types.

      +
    • + +
    • +

      It promotes the reuse of modules in new document types.

      +
    • +
    + +

    6.3 Document +Profiles

    + +

    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.

    + +

    For product designers this enables various groups to define +their own standard profile.

    + +

    For authors this will obviate the need to write several +different versions of documents for different clients.

    + +

    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.

    + + +

    +Appendix A. DTDs

    + +

    This appendix is normative.

    + +

    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 zip file for this specification.

    + +

    A.1 Document Type +Definitions

    + +

    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.

    + + + +

    A.2 Entity Sets

    + +

    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 (&euro; or +&#8364; or &#x20AC;) is defined +as part of the special characters.

    + + + + +

    Appendix B. Element +Prohibitions

    + +

    This appendix is normative.

    + +

    The following elements have prohibitions on which elements +they can contain (see Section 4.9). This +prohibition applies to all depths of nesting, i.e. it contains +all the descendant elements.

    + +
    a
    +
    +cannot contain other a elements.
    +
    pre
    +
    cannot contain the img, object, +big, small, sub, or +sup elements.
    + +
    button
    +
    cannot contain the input, select, +textarea, label, button, +form, fieldset, iframe or +isindex elements.
    +
    label
    +
    cannot contain other label elements.
    +
    form
    +
    cannot contain other form elements.
    +
    + + +

    Appendix C. +HTML Compatibility Guidelines

    + +

    This appendix is informative.

    + +

    This appendix summarizes design guidelines for authors who +wish their XHTML documents to render on existing HTML user +agents.

    + +

    C.1 Processing Instructions

    +

    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.

    + +

    C.2 Empty Elements

    +

    Include a space before the trailing / and +> of empty elements, e.g. +<br />, +<hr /> and <img +src="karen.jpg" alt="Karen" />. Also, use the +minimized tag syntax for empty elements, e.g. <br />, as the alternative syntax <br></br> allowed by XML +gives uncertain results in many existing user agents.

    + +

    C.3 Element Minimization and Empty Element Content

    +

    Given an empty instance of an element whose content model is +not EMPTY (for example, an empty title or paragraph) +do not use the minimized form (e.g. use +<p> </p> and not +<p />).

    + +

    C.4 Embedded Style Sheets and Scripts

    +

    Use external style sheets if your style sheet uses +< or & or ]]> or --. Use +external scripts if your script uses < or +& or ]]> or --. 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.

    + +

    C.5 Line Breaks within Attribute Values

    +

    Avoid line breaks and multiple whitespace characters within +attribute values. These are handled inconsistently by user +agents.

    + +

    C.6 Isindex

    +

    Don't include more than one isindex element in +the document head. The isindex element +is deprecated in favor of the input element.

    + +

    C.7 The lang and xml:lang Attributes

    +

    Use both the lang and xml:lang +attributes when specifying the language of an element. The value +of the xml:lang attribute takes precedence.

    + +

    C.8 Fragment Identifiers

    +

    In XML, URIs [RFC2396] that end with fragment identifiers of the form +"#foo" do not refer to elements with an attribute +name="foo"; rather, they refer to elements with an +attribute defined to be of type ID, e.g., the +id attribute in HTML 4.0. Many existing HTML clients don't +support the use of ID-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., <a id="foo" name="foo">...</a>).

    + +

    Further, since the set of +legal values for attributes of type ID is much smaller than +for those of type CDATA, the type of the name +attribute has been changed to NMTOKEN. This attribute is +constrained such that it can only have the same values as type +ID, or as the Name 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.

    +

    Finally, note that XHTML 1.0 has deprecated the +name attribute of the a, applet, frame, iframe, img, and map +elements, and it will be +removed from XHTML in subsequent versions.

    + +

    C.9 Character Encoding

    +

    To specify a character encoding in the document, use both the +encoding attribute specification on the xml declaration (e.g. +<?xml version="1.0" +encoding="EUC-JP"?>) and a meta http-equiv statement +(e.g. <meta http-equiv="Content-type" +content='text/html; charset="EUC-JP"' />). The +value of the encoding attribute of the xml processing instruction +takes precedence.

    + +

    C.10 Boolean Attributes

    +

    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: compact, nowrap, +ismap, declare, noshade, +checked, disabled, readonly, +multiple, selected, +noresize, defer.

    + +

    C.11 Document Object Model and XHTML

    +

    +The Document Object Model level 1 Recommendation [DOM] +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: +

    +
      +
    1. Applications that access XHTML documents served as Internet media type +text/html +via the DOM can use the HTML DOM, +and can rely upon element and attribute names being returned in +upper-case from those interfaces.
    2. +
    3. Applications that access XHTML documents served as Internet media types +text/xml or application/xml +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 tbody element within +table). 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.
    4. +
    + +

    C.12 Using Ampersands in Attribute Values

    +

    +When an attribute value contains an ampersand, it must be expressed as a character +entity reference +(e.g. "&amp;"). For example, when the +href attribute +of the a element refers to a +CGI script that takes parameters, it must be expressed as +http://my.site.dom/cgi-bin/myscript.pl?class=guest&amp;name=user +rather than as +http://my.site.dom/cgi-bin/myscript.pl?class=guest&name=user. +

    + +

    C.13 Cascading Style Sheets (CSS) and XHTML

    + +

    The Cascading Style Sheets level 2 Recommendation [CSS2] 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:

    + +
      +
    1. +CSS style sheets for XHTML should use lower case element and +attribute names.
    2. + + +
    3. 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.
    4. + +
    5. 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.
    6. + +
    7. 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.
    8. + +
    9. +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.
    10. +
    + +

    Appendix D. +Acknowledgements

    + +

    This appendix is informative.

    + +

    This specification was written with the participation of the +members of the W3C HTML working group:

    + +
    +
    Steven Pemberton, CWI (HTML Working Group Chair)
    +Murray Altheim, Sun Microsystems
    +Daniel Austin, CNET: The Computer Network
    +Frank Boumphrey, HTML Writers Guild
    +John Burger, Mitre
    +Andrew W. Donoho, IBM
    +Sam Dooley, IBM
    +Klaus Hofrichter, GMD
    +Philipp Hoschka, W3C
    +Masayasu Ishikawa, W3C
    +Warner ten Kate, Philips Electronics
    +Peter King, Phone.com
    +Paula Klante, JetForm
    +Shin'ichi Matsui, W3C/Panasonic
    +Shane McCarron, Applied Testing and Technology (The Open Group through August +1999)
    +Ann Navarro, HTML Writers Guild
    +Zach Nies, Quark
    +Dave Raggett, W3C/HP (W3C lead for HTML)
    +Patrick Schmitz, Microsoft
    +Sebastian Schnitzenbaumer, Stack Overflow
    +Chris Wilson, Microsoft
    +Ted Wugofski, Gateway 2000
    +Dan Zigmond, WebTV Networks
    +
    + + +

    Appendix E. References

    + +

    This appendix is informative.

    + +
    + +
    [CSS2]
    + +
    "Cascading Style Sheets, level 2 (CSS2) Specification", B. +Bos, H. W. Lie, C. Lilley, I. Jacobs, 12 May 1998.
    +Available at: +http://www.w3.org/TR/REC-CSS2
    + +
    [DOM]
    + +
    "Document Object Model (DOM) Level 1 Specification", Lauren +Wood et al., 1 October 1998.
    +Available at: +http://www.w3.org/TR/REC-DOM-Level-1
    + +
    [HTML]
    + +
    "HTML 4.01 Specification", D. Raggett, A. Le Hors, I. +Jacobs, 24 August 1999.
    +Available at: +http://www.w3.org/TR/1999/PR-html40-19990824
    + +
    [POSIX.1]
    + +
    "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.
    + +
    +[RFC2046]
    + +
    "RFC2046: Multipurpose Internet Mail Extensions (MIME) Part +Two: Media Types", N. Freed and N. Borenstein, November +1996.
    +Available at +http://www.ietf.org/rfc/rfc2046.txt. Note that this RFC +obsoletes RFC1521, RFC1522, and RFC1590.
    + +
    +[RFC2119]
    + +
    "RFC2119: Key words for use in RFCs to Indicate Requirement +Levels", S. Bradner, March 1997.
    +Available at: +http://www.ietf.org/rfc/rfc2119.txt
    + +
    +[RFC2376]
    + +
    "RFC2376: XML Media Types", E. Whitehead, M. Murata, July +1998.
    +Available at: +http://www.ietf.org/rfc/rfc2376.txt
    + +
    +[RFC2396]
    + +
    "RFC2396: Uniform Resource Identifiers (URI): Generic +Syntax", T. Berners-Lee, R. Fielding, L. Masinter, August +1998.
    +This document updates RFC1738 and RFC1808.
    +Available at: +http://www.ietf.org/rfc/rfc2396.txt
    + +
    [XML]
    + +
    "Extensible Markup Language (XML) 1.0 Specification", T. +Bray, J. Paoli, C. M. Sperberg-McQueen, 10 February 1998.
    +Available at: +http://www.w3.org/TR/REC-xml
    + +
    [XMLNAMES]
    + +
    "Namespaces in XML", T. Bray, D. Hollander, A. Layman, 14 +January 1999.
    +XML namespaces provide a simple method for qualifying names used +in XML documents by associating them with namespaces identified +by URI.
    +Available at: +http://www.w3.org/TR/REC-xml-names
    + +
    +

    +Level Triple-A conformance icon, W3C-WAI Web Content Accessibility Guidelines 1.0

    + + + diff --git a/result/valid/xhtml1.xhtml.err b/result/valid/xhtml1.xhtml.err new file mode 100644 index 0000000..e69de29 diff --git a/result/valid/xhtml1.xhtml.err.rdr b/result/valid/xhtml1.xhtml.err.rdr new file mode 100644 index 0000000..e69de29 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 Linking Language (XLink) + Version 1.0 + WD-xlink-19990527 + World Wide Web Consortium Working Draft + 29May1999 + +

    This draft is for public discussion.

    +
    + http://www.w3.org/XML/Group/1999/05/WD-xlink-current + + + http://www.w3.org/XML/Group/1999/05/WD-xlink-19990527 + http://www.w3.org/XML/Group/1999/05/WD-xlink-19990505 + http://www.w3.org/TR/1998/WD-xlink-19980303 + http://www.w3.org/TR/WD-xml-link-970630 + + + + + + Steve DeRose + Inso Corp. and Brown University + Steven_DeRose@Brown.edu + + + David Orchard + IBM Corp. + dorchard@ca.ibm.com + + + Ben Trafford + Invited Expert + bent@exemplary.net + + + + + +

    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 http://www.w3.org/TR.

    +

    Note: 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 .

    +

    This work is part of the W3C XML Activity (for current status, see http://www.w3.org/XML/Activity ). For information about the XPointer language which is expected to be used with XLink, see http://www.w3.org/TR/WD-xptr. +

    +

    See http://www.w3.org/TR/NOTE-xlink-principles for additional background on the design principles informing XLink.

    +

    Also see http://www.w3.org/TR/NOTE-xlink-req/ for the XLink requirements that this document attempts to satisfy.

    +
    + + + +

    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.

    +
    + + +

    Burlington, Seekonk, et al.: World-Wide Web Consortium, XML Working Group, 1998.

    +
    + + +

    Created in electronic form.

    +
    + + + English + Extended Backus-Naur Form (formal grammar) + + + + + 1997-01-15 : Skeleton draft by TB + 1997-01-24 : Fleshed out by sjd + 1997-04-08 : Substantive draft + 1997-06-30 : Public draft + 1997-08-01 : Public draft + 1997-08-05 : Prose/organization work by sjd + 1997-10-14: Conformance and design principles; a bit of cleanup by elm + 1997-11-07: Update for editorial issues per issues doc, by sjd. + 1997-12-01: Update for editorial issues per issues doc in preparation for F2F meeting, by sjd. + 1998-01-13: Editorial cleanup, addition of new design principles, by elm. + 1998-02-27: Splitting out of XLink and XPointer, by elm. + 1998-03-03: Moved most of the XPointer locator stuff here. elm + 1999-04-24: Editorial rewrites to represent new ideas on XLink, especially the inclusion of arcs. bent + 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 + 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 + 1999-05-17: Further prose work. Added non-normative examples. Clarified arcs. bent + 1999-05-23: Edited for grammar and clarity. bent + 1999-05-27: Final once-over before sending to group. Fixed sjd's email address. bent + + +
    + + + + Introduction +

    This specification defines constructs that may be inserted into XML DTDs, schemas, and document instances to describe links between objects. A link, 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.

    +

    Links are asserted by elements contained in XML document instances. The simplest case is very like an HTML A link, and has these characteristics: + +

    The link is expressed at one of its ends (similar to the A element in some document)

    +

    Users can only initiate travel from that end to the other

    +

    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 A links normally replaces the current view, perhaps with a user option to open a new window.

    +

    The link goes to only one destination (although a server may have great freedom in finding or dynamically creating that destination).

    + +

    +

    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. +

    + + + Origin and Goals +

    Following is a summary of the design principles governing XLink: + +

    XLink must be straightforwardly usable over the Internet.

    +

    XLink must be usable by a wide variety of link usage domains and classes of linking application software.

    +

    XLink must support HTML 4.0 linking constructs.

    +

    The XLink expression language must be XML.

    +

    The XLink design must be formal, concise, and illustrative.

    +

    XLinks must be human-readable and human-writable.

    +

    XLinks may reside within or outside the documents in which the + participating resources reside.

    +

    XLink must represent the abstract structure and significance of links.

    +

    XLink must be feasible to implement.

    +

    XLink must be informed by knowledge of established hypermedia systems and standards.

    + +

    +
    + + + + Relationship to Existing Standards +

    Three standards have been especially influential: + +

    HTML: Defines several SGML element types that represent links.

    +

    HyTime: Defines inline and out-of-line link structures and some semantic features, including traversal control and presentation of objects. +

    +

    Text Encoding Initiative Guidelines (TEI P3): Provides structures for creating links, aggregate objects, and link collections out of them.

    + +

    +

    Many other linking systems have also informed this design, especially Dexter, FRESS, MicroCosm, and InterMedia.

    +
    + + + Terminology +

    The following basic terms apply in this document. + + + +

    A symbolic representation of traversal behavior in links, especially the direction, context and timing of traversal.

    + + + +

    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.

    +
    + + +

    Abstractly, a link which serves as one of its own resources. Concretely, a link where the content of the linking element serves as a participating resource. + HTML A, HyTime clink, and TEI XREF + are all inline links.

    +
    + + +

    An explicit relationship between two or more data objects or portions of data objects.

    +
    + + +

    An element that asserts the existence and describes the characteristics of a link.

    +
    + + +

    The content of an inlinelinking element. Note that the content of the linking element could be explicitly pointed to by means of a regular locator in the same linking element, in which case the resource is considered remote, not local.

    +
    + + +

    Data, provided as part of a link, which identifies a + resource.

    +
    + + +

    A link whose traversal can be initiated from more than one of its participating resources. Note that being able to "go back" after following a one-directional link does not make the link multidirectional.

    +
    + + +

    A link whose content does not serve as one of the link's participating resources . Such links presuppose a notion like extended link groups, which instruct application software where to look for links. Out-of-line links are generally required for supporting multidirectional traversal and for allowing read-only resources to have outgoing links.

    +
    + +

    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.

    +
    + + +

    A resource that belongs to a link. All resources are potential contributors to a link; participating resources are the actual contributors to a particular link.

    +
    + + +

    Any participating resource of a link that is pointed to with a locator.

    +
    + + +

    In the abstract sense, an addressable unit of information or service that is participating in a link. Examples include files, images, documents, programs, and query results. Concretely, anything reachable by the use of a locator in some linking element. Note that this term and its definition are taken from the basic specifications governing the World Wide Web. +

    +
    + + +

    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.

    +
    + + +

    The action of using a link; that is, of accessing a resource. Traversal may be initiated by a user action (for example, clicking on the displayed content of a linking element) or occur under program control.

    +
    + +

    +
    + + + Notation +

    The formal grammar for locators is given using a simple Extended Backus-Naur Form (EBNF) location, as described in the XML specification.

    + +
    +
    + + + Locator Syntax +

    The locator for a resource 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.

    + +

    A locator generally contains a URI, as described in IETF RFCs and . As these RFCs state, the URI may include a trailing query (marked by a leading "?"), and be followed by a "#" and a fragment identifier, 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.

    + +

    In order to locate XML documents and portions of documents, a locator value may contain either a URI or a fragment identifier, or both. Any fragment identifier for pointing into XML must be an XPointer.

    +

    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. + + Locator + + Locator + URI + | Connector (XPointer | Name) + | URI Connector (XPointer | Name) + + + Connector'#' | '|' + + + URIURIchar* + + +

    +

    In this discussion, the term designated resource refers to the resource which an entire locator serves to locate. The following rules apply: + + +

    The URI, if provided, locates a resource called the containing resource.

    + + +

    If the URI is not provided, the containing resource is considered to be the document in which the linking element is contained. +

    + +

    If an XPointer is provided, the designated resource is a sub-resource + of the containing resource; otherwise the designated resource is the + containing resource.

    +
    + + +

    If the Connector is followed directly by a Name, the Name is shorthand for the XPointer"id(Name)"; that is, the sub-resource is the element in the containing resource that has an XML ID attribute whose value matches the Name. This shorthand is to encourage use of the robust id addressing mode.

    +
    + + +

    If the connector is "#", 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.

    +
    + +

    If the connector is "|", no intent is signaled as to what processing model is to be used to go about accessing the designated resource.

    +
    + +

    +

    Note that the definition of a URI includes an optional query component.

    +

    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: + + Query + + Query'XML-XPTR=' ( XPointer | Name) + + +

    + +
    + + + Link Recognition +

    The existence of a link is asserted by a linking element. 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 namespace 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.

    +

    The two approaches to identifying linking elements are relatively simple to implement. For example, here's how the HTML A element would be declared using attributes within the XLink namespace, and then how an element within the XLink namespace might do the same: + <A xlink:type="simple" xlink:href="http://www.w3.org/TR/wd-xlink/" +xlink:title="The Xlink Working Draft">The XLink Working Draft.</A> + <xlink:simple href="http://www.w3.org/TR/wd-xlink/" +title="The XLink Working Draft">The XLink Working Draft</xlink:simple> + Any arbitrary element can be made into an XLink by using the xlink:type 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 xlink namespace prefix if they existed within an arbitrary element, or that they may be used directly if they exist within an explicit Xlink element.

    + +
    + + + + Linking Attributes +

    XLink has several attributes associated with the variety of links it may represent. These attributes define four main concepts: locators, arcs, behaviors, and semantics. Locators define where the actual resource is located. Arcs 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. Behaviors define how the link is activated, and what the application should do with the resource being linked to. Semantics define useful information that the application may use, and enables the link for such specalized targets as constricted devices and accessibility software.

    + + + Locator Attributes +

    The only locator attribute at this time is href. 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.

    +
    + + + Arc Attributes +

    Arcs contain two attributes, from and to. The from attribute may contain a string containing the content of a role attribute from the resource being linked from. The purpose of the from attribute is to define where this link is being actuated from.

    +

    The to attribute may contain a string containing the content of a role attribute from the resource being linked to. The purpose of the to attribute is to define where this link traverses to.

    +

    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.

    + +
    + + + Behavior Attributes +

    There are two attributes associated with behavior: show and actuate. The show attribute defines how the remote resource is to be revealed to the user. It has three options: new, parsed, and replace. The new option indicates that the remote resource should be shown in a new window (or other device context) without replacing the previous content. The parsed 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 replace 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.

    +

    The actuate attribute defines how the link is initiated. It has two options: user and auto. The user option indicates that the link must be initiated by some sort of human-initiated selection, such as clicking on an HTML anchor. The auto 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 show option.

    + +
    + + + Semantic Attributes +

    There are two attributes associated with semantics, role and title. The role 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 role="stanza". The role is also used as an identifier for the from and to attributes of arcs.

    +

    The title 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 title attribute contains a simple, descriptive string.

    +
    +
    + + + Linking Elements +

    There are several kinds of linking elements in XLink: simple links, locators, arcs, and extended 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.

    +

    The simple link is used to declare a link that approximates the functionality of the HTML A element. It has, however, a few added features to increase its value, including the potential declaration of semantics and behavior. The locator 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 arcs are used to define the traversal semantics of the link. Finally, an extended 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.

    + + + Simple Links + +

    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. + <!ELEMENT xlink:simple ANY> +<!ATTLIST xlink:slink + href CDATA #REQUIRED + role CDATA #IMPLIED + title CDATA #IMPLIED + show (new|parsed|replace) "replace" + actuate (user|auto) "user" +> + And here is how to make an arbitrary element into a simple link. + <!ELEMENT xlink:simple ANY> +<!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" +> + Here is how the first example might look in a document: +<xlink:simple href="http://www.w3.org/TR/wd-xlink" role="working draft" + title="The XLink Working Draft" show="replace" actuate="user"> +The XLink Working Draft.</xlink:simple> +<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"> +The XLink Working Draft.</foo> + Alternately, a simple link could be as terse as this: +<foo xlink:href="#stanza1">The First Stanza.</foo> +

    +

    + There are no constraints on the contents of a simple linking element. In + the sample declaration above, it is given a content model of ANY + 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.

    +

    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.

    +
    + + +Extended Links +

    An extended link 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.

    +

    These additional capabilities of extended links are required for: + + +

    Enabling outgoing links in documents that cannot be modified to add an inline link

    + + +

    Creating links to and from resources in formats with no native support for embedded links (such as most multimedia formats)

    +
    + +

    Applying and filtering sets of relevant links on demand

    +
    +

    Enabling other advanced hypermedia capabilities

    + +

    +

    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).

    +

    A linking element for an extended link contains a series of child elements 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).

    +

    The xlink:type attribute value for an extended link must be extended, if the link is being instantiated on an arbitrary element. Note that extended links introduce variants of the show and actuate behavior attributes. These attributes, the showdefault and actuatedefault 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.

    +

    However, when a linking element within an extended link has a show or actuate attribute of its own, that attribute overrides the defaults set on the extended linking element.

    +

    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: + +<!ELEMENT xlink:extended ((xlink:arc | xlink:locator)*)> +<!ATTLIST xlink:extended + role CDATA #IMPLIED + title CDATA #IMPLIED + showdefault (new|parsed|replace) #IMPLIED + actuatedefault (user|auto) #IMPLIED > + + The second is an example of an arbitrary element being used an extended link: + +<!ELEMENT foo ((xlink:arc | xlink:locator)*)> +<!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 > + + 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: + +<xlink:extended role="address book" title="Ben's Address Book" showdefault="replace" actuatedefault="user"> ... </xlink:extended> + + And the second shows how the link might appear, using an arbitrary element: + +<foo xlink:type="extended" xlink:role="address book" xlink:title="Ben's Address Book" xlink:showdefault="replace" xlink:actuatedefault="user"> ... </foo> +

    + +
    + + + Arc Elements +

    An arc is contained within an extended link for the purpose of defining traversal behavior. More than one arc may be associated with a link. Otherwise, arc elements function exactly as the arc attributes might lead on to expect.

    + +
    + +
    + +Conformance +

    An element conforms to XLink if: +

    The element has an xml:link attribute whose value is +one of the attribute values prescribed by this specification, and

    +

    the element and all of its attributes and content adhere to the +syntactic +requirements imposed by the chosen xml:link attribute value, +as prescribed in this specification.

    +

    +

    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.

    +

    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.

    +
    + + +Unfinished Work + +Structured Titles +

    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.

    +
    +
    + +References + +Eve Maler and Steve DeRose, editors. +XML Pointer Language (XPointer) V1.0. ArborText, Inso, and Brown +University. Burlington, Seekonk, et al.: World Wide Web Consortium, 1998. +(See http://www.w3.org/TR/WD-xptr + .) +ISO (International Organization for +Standardization). ISO/IEC 10744-1992 (E). Information technology +- Hypermedia/Time-based Structuring Language (HyTime). [Geneva]: +International Organization for Standardization, 1992. Extended +Facilities +Annex. [Geneva]: International Organization for Standardization, +1996. (See http://www.ornl.go +v/sgml/wg8/hytime/html/is10744r.html ). +IETF (Internet Engineering Task +Force). +RFC 1738: Uniform Resource Locators. 1991. (See +http://www.w3.org/Addressing/rfc1738.txt). +IETF (Internet Engineering Task +Force). +RFC 1808: Relative Uniform Resource Locators. 1995. (See http://www.w3.org/Addressing/rfc +1808.txt ). +C. M. Sperberg-McQueen and Lou Burnard, editors. + +Guidelines for Electronic Text Encoding and Interchange. 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. +]Steven J. DeRose and David G. Durand. 1995. "The +TEI Hypertext Guidelines." In Computing and the Humanities +29(3). +Reprinted in Text Encoding Initiative: Background and +Context, +ed. Nancy Ide and Jean ronis , ISBN 0-7923-3704-2. + +
    + diff --git a/result/valid/xlink.xml.err b/result/valid/xlink.xml.err new file mode 100644 index 0000000..c0eea7c --- /dev/null +++ b/result/valid/xlink.xml.err @@ -0,0 +1,4 @@ +./test/valid/xlink.xml:450: element termdef: validity error : ID dt-arc already defined +

    An arc is contained within an e + ^ +./test/valid/xlink.xml:199: element termref: validity error : IDREF attribute def references an unknown ID "dt-xlg" diff --git a/result/valid/xlink.xml.err.rdr b/result/valid/xlink.xml.err.rdr new file mode 100644 index 0000000..38594f4 --- /dev/null +++ b/result/valid/xlink.xml.err.rdr @@ -0,0 +1,4 @@ +./test/valid/xlink.xml:450: element termdef: validity error : ID dt-arc already defined +

    An + + + + + + + + + + + + + + +

    If automatic testing failed, select Failed + + + + + .

    + + + diff --git a/result/wap.xml.rde b/result/wap.xml.rde new file mode 100644 index 0000000..6867382 --- /dev/null +++ b/result/wap.xml.rde @@ -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.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/wap.xml.sax2 b/result/wap.xml.sax2 new file mode 100644 index 0000000..6d40b25 --- /dev/null +++ b/result/wap.xml.sax2 @@ -0,0 +1,87 @@ +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.startElementNs(wml, NULL, NULL, 0, 0, 0) +SAX.characters( +, 1) +SAX.startElementNs(card, NULL, NULL, 0, 1, 0, id='card...', 5) +SAX.characters( +, 1) +SAX.startElementNs(onevent, NULL, NULL, 0, 1, 0, type='onen...', 14) +SAX.characters( +, 1) +SAX.startElementNs(go, NULL, NULL, 0, 1, 0, href='/vsw...', 21) +SAX.characters( + , 9) +SAX.startElementNs(postfield, NULL, NULL, 0, 2, 0, name='var"...', 3, value='$tes...', 5) +SAX.endElementNs(postfield, NULL, NULL) +SAX.characters( + , 9) +SAX.startElementNs(postfield, NULL, NULL, 0, 2, 0, name='v" v...', 1, value='dark...', 4) +SAX.endElementNs(postfield, NULL, NULL) +SAX.characters( + , 9) +SAX.startElementNs(postfield, NULL, NULL, 0, 2, 0, name='ts" ...', 2, value='0003...', 4) +SAX.endElementNs(postfield, NULL, NULL) +SAX.characters( + , 9) +SAX.startElementNs(postfield, NULL, NULL, 0, 2, 0, name='tp" ...', 2, value='wml/...', 29) +SAX.endElementNs(postfield, NULL, NULL) +SAX.characters( + , 9) +SAX.startElementNs(postfield, NULL, NULL, 0, 2, 0, name='ti" ...', 2, value='1"/>...', 1) +SAX.endElementNs(postfield, NULL, NULL) +SAX.characters( + , 9) +SAX.startElementNs(postfield, NULL, NULL, 0, 2, 0, name='expe...', 8, value='var:...', 8) +SAX.endElementNs(postfield, NULL, NULL) +SAX.characters( +, 1) +SAX.endElementNs(go, NULL, NULL) +SAX.characters( +, 1) +SAX.endElementNs(onevent, NULL, NULL) +SAX.characters( +, 1) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.characters(If automatic testing failed, s, 36) +SAX.startElementNs(anchor, NULL, NULL, 0, 0, 0) +SAX.characters(Failed, 6) +SAX.startElementNs(go, NULL, NULL, 0, 1, 0, href='/vsw...', 21) +SAX.characters( + , 9) +SAX.startElementNs(postfield, NULL, NULL, 0, 2, 0, name='SUBM...', 6, value='No"/...', 2) +SAX.endElementNs(postfield, NULL, NULL) +SAX.startElementNs(postfield, NULL, NULL, 0, 2, 0, name='v" +v...', 1, value='dark...', 4) +SAX.endElementNs(postfield, NULL, NULL) +SAX.characters( + , 9) +SAX.startElementNs(postfield, NULL, NULL, 0, 2, 0, name='ts" ...', 2, value='0003...', 4) +SAX.endElementNs(postfield, NULL, NULL) +SAX.characters( + , 9) +SAX.startElementNs(postfield, NULL, NULL, 0, 2, 0, name='tp" ...', 2, value='wml/...', 29) +SAX.endElementNs(postfield, NULL, NULL) +SAX.characters( + , 9) +SAX.startElementNs(postfield, NULL, NULL, 0, 2, 0, name='ti" ...', 2, value='1"/>...', 1) +SAX.endElementNs(postfield, NULL, NULL) +SAX.characters( + , 9) +SAX.startElementNs(postfield, NULL, NULL, 0, 2, 0, name='expe...', 8, value='var:...', 8) +SAX.endElementNs(postfield, NULL, NULL) +SAX.endElementNs(go, NULL, NULL) +SAX.endElementNs(anchor, NULL, NULL) +SAX.characters(., 1) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( +, 1) +SAX.endElementNs(card, NULL, NULL) +SAX.characters( + +, 2) +SAX.endElementNs(wml, NULL, NULL) +SAX.endDocument() diff --git a/result/winblanks.xml b/result/winblanks.xml new file mode 100644 index 0000000..0044aa2 --- /dev/null +++ b/result/winblanks.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/result/winblanks.xml.rde b/result/winblanks.xml.rde new file mode 100644 index 0000000..2f6a5d3 --- /dev/null +++ b/result/winblanks.xml.rde @@ -0,0 +1,13 @@ +0 1 a 0 0 +1 14 #text 0 1 + +1 1 B 0 0 +2 14 #text 0 1 + +2 1 C 1 0 +2 14 #text 0 1 + +1 15 B 0 0 +1 14 #text 0 1 + +0 15 a 0 0 diff --git a/result/winblanks.xml.rdr b/result/winblanks.xml.rdr new file mode 100644 index 0000000..2f6a5d3 --- /dev/null +++ b/result/winblanks.xml.rdr @@ -0,0 +1,13 @@ +0 1 a 0 0 +1 14 #text 0 1 + +1 1 B 0 0 +2 14 #text 0 1 + +2 1 C 1 0 +2 14 #text 0 1 + +1 15 B 0 0 +1 14 #text 0 1 + +0 15 a 0 0 diff --git a/result/winblanks.xml.sax b/result/winblanks.xml.sax new file mode 100644 index 0000000..72e39d5 --- /dev/null +++ b/result/winblanks.xml.sax @@ -0,0 +1,18 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElement(a) +SAX.characters( + , 5) +SAX.startElement(B) +SAX.characters( + , 9) +SAX.startElement(C) +SAX.endElement(C) +SAX.characters( , 3) +SAX.characters( +, 1) +SAX.endElement(B) +SAX.characters( +, 1) +SAX.endElement(a) +SAX.endDocument() diff --git a/result/winblanks.xml.sax2 b/result/winblanks.xml.sax2 new file mode 100644 index 0000000..6e9d693 --- /dev/null +++ b/result/winblanks.xml.sax2 @@ -0,0 +1,18 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.startElementNs(a, NULL, NULL, 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(B, NULL, NULL, 0, 0, 0) +SAX.characters( + , 9) +SAX.startElementNs(C, NULL, NULL, 0, 0, 0) +SAX.endElementNs(C, NULL, NULL) +SAX.characters( , 3) +SAX.characters( +, 1) +SAX.endElementNs(B, NULL, NULL) +SAX.characters( +, 1) +SAX.endElementNs(a, NULL, NULL) +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 @@ + + + + +

    + Cinéma
    +

    + +
    +
    diff --git a/result/wml.xml.rde b/result/wml.xml.rde new file mode 100644 index 0000000..1bb28d4 --- /dev/null +++ b/result/wml.xml.rde @@ -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.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&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/wml.xml.sax2 b/result/wml.xml.sax2 new file mode 100644 index 0000000..bc86149 --- /dev/null +++ b/result/wml.xml.sax2 @@ -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.startElementNs(wml, NULL, NULL, 0, 0, 0) +SAX.characters( + , 3) +SAX.startElementNs(card, NULL, NULL, 0, 2, 0, id='card...', 5, title='Rubr...', 15) +SAX.characters( + , 2) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.characters( + , 3) +SAX.startElementNs(a, NULL, NULL, 0, 1, 0, href='rubm...', 30) +SAX.characters(Cin, 3) +SAX.characters(é, 2) +SAX.characters(ma, 2) +SAX.endElementNs(a, NULL, NULL) +SAX.startElementNs(br, NULL, NULL, 0, 0, 0) +SAX.endElementNs(br, NULL, NULL) +SAX.characters( + , 2) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( + +, 2) +SAX.endElementNs(card, NULL, NULL) +SAX.characters( +, 1) +SAX.endElementNs(wml, NULL, NULL) +SAX.endDocument() diff --git a/result/xhtml1 b/result/xhtml1 new file mode 100644 index 0000000..6c06a95 --- /dev/null +++ b/result/xhtml1 @@ -0,0 +1,30 @@ + + + + + + Virtual Library + + + + +

    Moved to example.org.

    + + + foo + +

    + +

    coucou

    +

    salut

    + +

    test

    + +
    +
    Internet Engineering Task Force
    +
    An organization which establishes technical standards for the Internet
    +
    + + diff --git a/result/xhtml1.rde b/result/xhtml1.rde new file mode 100644 index 0000000..4d2cc24 --- /dev/null +++ b/result/xhtml1.rde @@ -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.rdr b/result/xhtml1.rdr new file mode 100644 index 0000000..4d2cc24 --- /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..624fa38 --- /dev/null +++ b/result/xhtml1.sax @@ -0,0 +1,103 @@ +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 , 24) +SAX.characters(<, 1) +SAX.characters( content ... + , 15) +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/xhtml1.sax2 b/result/xhtml1.sax2 new file mode 100644 index 0000000..e6952c8 --- /dev/null +++ b/result/xhtml1.sax2 @@ -0,0 +1,104 @@ +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.startElementNs(html, NULL, NULL, 0, 2, 0, xml:lang='en" ...', 2, lang='en">...', 2) +SAX.characters( + , 3) +SAX.startElementNs(head, NULL, NULL, 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(title, NULL, NULL, 0, 0, 0) +SAX.characters(Virtual Library, 15) +SAX.endElementNs(title, NULL, NULL) +SAX.characters( + , 3) +SAX.endElementNs(head, NULL, NULL) +SAX.characters( + , 3) +SAX.comment( 4.8 ) +SAX.characters( + , 3) +SAX.startElementNs(script, NULL, NULL, 0, 1, 0, type='text...', 15) +SAX.characters( + ... unescaped script , 24) +SAX.characters(<, 1) +SAX.characters( content ... + , 15) +SAX.endElementNs(script, NULL, NULL) +SAX.characters( + , 3) +SAX.startElementNs(body, NULL, NULL, 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.characters(Moved to , 9) +SAX.startElementNs(a, NULL, NULL, 0, 1, 0, href='http...', 19) +SAX.characters(example.org, 11) +SAX.endElementNs(a, NULL, NULL) +SAX.characters(., 1) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( + , 3) +SAX.endElementNs(body, NULL, NULL) +SAX.characters( + , 3) +SAX.comment( C2 ) +SAX.characters( + , 3) +SAX.startElementNs(img, NULL, NULL, 0, 2, 0, src='foo....', 7, alt='foo"...', 3) +SAX.endElementNs(img, NULL, NULL) +SAX.characters( + , 3) +SAX.comment( C3 ) +SAX.characters( + , 3) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( + , 3) +SAX.comment( C7 ) +SAX.characters( + , 3) +SAX.startElementNs(p, NULL, NULL, 0, 1, 0, lang='fr">...', 2) +SAX.characters(coucou, 6) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( + , 3) +SAX.startElementNs(p, NULL, NULL, 0, 1, 0, xml:lang='fr">...', 2) +SAX.characters(salut, 5) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( + , 3) +SAX.comment( C8 ) +SAX.characters( + , 3) +SAX.startElementNs(p, NULL, NULL, 0, 1, 0, name='frag...', 6) +SAX.characters(test, 4) +SAX.endElementNs(p, NULL, NULL) +SAX.characters( + , 3) +SAX.comment( 4.5 ) +SAX.characters( + , 3) +SAX.startElementNs(dl, NULL, NULL, 0, 1, 0, compact='"> + ...', 0) +SAX.characters( + , 3) +SAX.startElementNs(dt, NULL, NULL, 0, 0, 0) +SAX.characters(Internet Engineering Task Forc, 31) +SAX.endElementNs(dt, NULL, NULL) +SAX.characters( + , 3) +SAX.startElementNs(dd, NULL, NULL, 0, 0, 0) +SAX.characters(An organization which establis, 70) +SAX.endElementNs(dd, NULL, NULL) +SAX.characters( + , 3) +SAX.endElementNs(dl, NULL, NULL) +SAX.characters( + +, 2) +SAX.endElementNs(html, NULL, NULL) +SAX.endDocument() diff --git a/result/xhtmlcomp b/result/xhtmlcomp new file mode 100644 index 0000000..4ce634c --- /dev/null +++ b/result/xhtmlcomp @@ -0,0 +1,7 @@ + + + + +

    a b

    + + diff --git a/result/xhtmlcomp.rde b/result/xhtmlcomp.rde new file mode 100644 index 0000000..97517b7 --- /dev/null +++ b/result/xhtmlcomp.rde @@ -0,0 +1,19 @@ +0 10 html 0 0 +0 1 html 0 0 +1 14 #text 0 1 + +1 1 body 0 0 +2 14 #text 0 1 + +2 1 h1 0 0 +3 1 abbr 0 0 +4 3 #text 0 1 a +3 15 abbr 0 0 +3 3 #text 0 1 b +2 15 h1 0 0 +2 14 #text 0 1 + +1 15 body 0 0 +1 14 #text 0 1 + +0 15 html 0 0 diff --git a/result/xhtmlcomp.rdr b/result/xhtmlcomp.rdr new file mode 100644 index 0000000..97517b7 --- /dev/null +++ b/result/xhtmlcomp.rdr @@ -0,0 +1,19 @@ +0 10 html 0 0 +0 1 html 0 0 +1 14 #text 0 1 + +1 1 body 0 0 +2 14 #text 0 1 + +2 1 h1 0 0 +3 1 abbr 0 0 +4 3 #text 0 1 a +3 15 abbr 0 0 +3 3 #text 0 1 b +2 15 h1 0 0 +2 14 #text 0 1 + +1 15 body 0 0 +1 14 #text 0 1 + +0 15 html 0 0 diff --git a/result/xhtmlcomp.sax b/result/xhtmlcomp.sax new file mode 100644 index 0000000..a7a0d69 --- /dev/null +++ b/result/xhtmlcomp.sax @@ -0,0 +1,23 @@ +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.startElement(html) +SAX.characters( + , 3) +SAX.startElement(body) +SAX.characters( + , 5) +SAX.startElement(h1) +SAX.startElement(abbr) +SAX.characters(a, 1) +SAX.endElement(abbr) +SAX.characters( b, 2) +SAX.endElement(h1) +SAX.characters( + , 3) +SAX.endElement(body) +SAX.characters( +, 1) +SAX.endElement(html) +SAX.endDocument() diff --git a/result/xhtmlcomp.sax2 b/result/xhtmlcomp.sax2 new file mode 100644 index 0000000..085b770 --- /dev/null +++ b/result/xhtmlcomp.sax2 @@ -0,0 +1,23 @@ +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.startElementNs(html, NULL, NULL, 0, 0, 0) +SAX.characters( + , 3) +SAX.startElementNs(body, NULL, NULL, 0, 0, 0) +SAX.characters( + , 5) +SAX.startElementNs(h1, NULL, NULL, 0, 0, 0) +SAX.startElementNs(abbr, NULL, NULL, 0, 0, 0) +SAX.characters(a, 1) +SAX.endElementNs(abbr, NULL, NULL) +SAX.characters( b, 2) +SAX.endElementNs(h1, NULL, NULL) +SAX.characters( + , 3) +SAX.endElementNs(body, NULL, NULL) +SAX.characters( +, 1) +SAX.endElementNs(html, NULL, NULL) +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 @@ + +An ampersand (&#38;) may be escaped + numerically (&#38;#38;) or with a general entity + (&amp;).

    "> +]> +&example; diff --git a/result/xml1.rde b/result/xml1.rde new file mode 100644 index 0000000..ecd6154 --- /dev/null +++ b/result/xml1.rde @@ -0,0 +1,8 @@ +0 10 test 0 0 +0 1 test 0 0 +1 1 p 0 0 +2 3 #text 0 1 An ampersand (&) may be escaped + numerically (&) or with a general entity + (&). +1 15 p 0 0 +0 15 test 0 0 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..13f881b --- /dev/null +++ b/result/xml1.sax @@ -0,0 +1,23 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.internalSubset(test, , ) +SAX.entityDecl(example, 1, (null), (null),

    An ampersand (&) may be escaped + numerically (&#38;) or with a general entity + (&amp;).

    ) +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.characters(&, 1) +SAX.characters(amp;)., 6) +SAX.endElement(p) +SAX.reference(example) +SAX.endElement(test) +SAX.endDocument() diff --git a/result/xml1.sax2 b/result/xml1.sax2 new file mode 100644 index 0000000..7b220f2 --- /dev/null +++ b/result/xml1.sax2 @@ -0,0 +1,23 @@ +SAX.setDocumentLocator() +SAX.startDocument() +SAX.internalSubset(test, , ) +SAX.entityDecl(example, 1, (null), (null),

    An ampersand (&) may be escaped + numerically (&#38;) or with a general entity + (&amp;).

    ) +SAX.getEntity(example) +SAX.externalSubset(test, , ) +SAX.startElementNs(test, NULL, NULL, 0, 0, 0) +SAX.getEntity(example) +SAX.startElementNs(p, NULL, NULL, 0, 0, 0) +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.characters(&, 1) +SAX.characters(amp;)., 6) +SAX.endElementNs(p, NULL, NULL) +SAX.reference(example) +SAX.endElementNs(test, NULL, NULL) +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 @@ + + + +'> + +]> +This sample shows a &tricky; method. diff --git a/result/xml2.rde b/result/xml2.rde new file mode 100644 index 0000000..cfdf217 --- /dev/null +++ b/result/xml2.rde @@ -0,0 +1,4 @@ +0 10 test 0 0 +0 1 test 0 0 +1 3 #text 0 1 This sample shows a error-prone method. +0 15 test 0 0 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..141accd --- /dev/null +++ b/result/xml2.sax @@ -0,0 +1,18 @@ +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), ) +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.reference(tricky) +SAX.characters( method., 8) +SAX.endDocument() +xmlSAXUserParseFile returned error 27 diff --git a/result/xml2.sax2 b/result/xml2.sax2 new file mode 100644 index 0000000..141accd --- /dev/null +++ b/result/xml2.sax2 @@ -0,0 +1,18 @@ +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), ) +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.reference(tricky) +SAX.characters( method., 8) +SAX.endDocument() +xmlSAXUserParseFile returned error 27 diff --git a/result/xmlid/id_err1.xml b/result/xmlid/id_err1.xml new file mode 100644 index 0000000..2e47afd --- /dev/null +++ b/result/xmlid/id_err1.xml @@ -0,0 +1,2 @@ +Object is a Node Set : +Set contains 0 nodes: diff --git a/result/xmlid/id_err1.xml.err b/result/xmlid/id_err1.xml.err new file mode 100644 index 0000000..9efeb47 --- /dev/null +++ b/result/xmlid/id_err1.xml.err @@ -0,0 +1,3 @@ +./test/xmlid/id_err1.xml:1: validity error : xml:id : attribute value 0bar is not an NCName + + ^ diff --git a/result/xmlid/id_err2.xml b/result/xmlid/id_err2.xml new file mode 100644 index 0000000..33ee896 --- /dev/null +++ b/result/xmlid/id_err2.xml @@ -0,0 +1,6 @@ +Object is a Node Set : +Set contains 1 nodes: +1 ELEMENT foo + ATTRIBUTE id + TEXT + content=bar diff --git a/result/xmlid/id_err2.xml.err b/result/xmlid/id_err2.xml.err new file mode 100644 index 0000000..9e974d4 --- /dev/null +++ b/result/xmlid/id_err2.xml.err @@ -0,0 +1,3 @@ +./test/xmlid/id_err2.xml:3: validity error : xml:id : attribute type should be ID + + ^ diff --git a/result/xmlid/id_tst1.xml b/result/xmlid/id_tst1.xml new file mode 100644 index 0000000..33ee896 --- /dev/null +++ b/result/xmlid/id_tst1.xml @@ -0,0 +1,6 @@ +Object is a Node Set : +Set contains 1 nodes: +1 ELEMENT foo + ATTRIBUTE id + TEXT + content=bar diff --git a/result/xmlid/id_tst1.xml.err b/result/xmlid/id_tst1.xml.err new file mode 100644 index 0000000..e69de29 diff --git a/result/xmlid/id_tst2.xml b/result/xmlid/id_tst2.xml new file mode 100644 index 0000000..856a320 --- /dev/null +++ b/result/xmlid/id_tst2.xml @@ -0,0 +1,6 @@ +Object is a Node Set : +Set contains 1 nodes: +1 ELEMENT n:foo + ATTRIBUTE id + TEXT + content=bar diff --git a/result/xmlid/id_tst2.xml.err b/result/xmlid/id_tst2.xml.err new file mode 100644 index 0000000..390d48d --- /dev/null +++ b/result/xmlid/id_tst2.xml.err @@ -0,0 +1,3 @@ +./test/xmlid/id_tst2.xml:1: namespace error : Namespace prefix n on foo is not defined + + ^ diff --git a/result/xmlid/id_tst3.xml b/result/xmlid/id_tst3.xml new file mode 100644 index 0000000..6d8865c --- /dev/null +++ b/result/xmlid/id_tst3.xml @@ -0,0 +1,6 @@ +Object is a Node Set : +Set contains 1 nodes: +1 ELEMENT f:o:o + ATTRIBUTE id + TEXT + content=bar diff --git a/result/xmlid/id_tst3.xml.err b/result/xmlid/id_tst3.xml.err new file mode 100644 index 0000000..7aa3e1c --- /dev/null +++ b/result/xmlid/id_tst3.xml.err @@ -0,0 +1,6 @@ +./test/xmlid/id_tst3.xml:1: namespace error : Failed to parse QName 'f:o:' + + ^ +./test/xmlid/id_tst3.xml:1: namespace error : Namespace prefix f on o:o is not defined + + ^ diff --git a/result/xmlid/id_tst4.xml b/result/xmlid/id_tst4.xml new file mode 100644 index 0000000..33ee896 --- /dev/null +++ b/result/xmlid/id_tst4.xml @@ -0,0 +1,6 @@ +Object is a Node Set : +Set contains 1 nodes: +1 ELEMENT foo + ATTRIBUTE id + TEXT + content=bar diff --git a/result/xmlid/id_tst4.xml.err b/result/xmlid/id_tst4.xml.err new file mode 100644 index 0000000..36c78c8 --- /dev/null +++ b/result/xmlid/id_tst4.xml.err @@ -0,0 +1,3 @@ +./test/xmlid/id_tst4.xml:3: element err: validity error : ID bar already defined + + ^ diff --git a/rngparser.c b/rngparser.c new file mode 100644 index 0000000..7731d4d --- /dev/null +++ b/rngparser.c @@ -0,0 +1,1595 @@ +/** + * rngparser.c: parser for the Relax-NG compact syntax. + * + * Based on: + * RELAX NG Compact Syntax + * Committee Specification 21 November 2002 + * http://www.oasis-open.org/committees/relax-ng/compact-20021121.html + * + * See Copyright for the status of this software. + * + * Daniel Veillard + */ + +#include + +#include +#include +#include +#include + +#define TODO \ + xmlGenericError(xmlGenericErrorContext, \ + "Unimplemented block at %s:%d\n", \ + __FILE__, __LINE__); + +#define MAX_TOKEN 10 + +typedef enum { + CRNG_NONE = 0, + CRNG_OP = 1, + CRNG_KEYWORD, + CRNG_IDENTIFIER, + CRNG_LITERAL_SEGMENT, + CRNG_CNAME, + CRNG_QNAME, + CRNG_NSNAME, + CRNG_DOCUMENTATION +} xmlCRNGTokType; + +typedef enum { + CRNG_OKAY = 0, + CRNG_MEMORY_ERROR, + CRNG_INVALID_CHAR_ERROR, + CRNG_END_ERROR, + CRNG_ENCODING_ERROR +} xmlCRNGError; + +typedef enum { + XML_CRNG_ERROR = -1, + XML_CRNG_OK = 0, + XML_CRNG_EOF = 1 +} xmlCRelaxNGParserState; + +typedef struct _token _token; +typedef _token *tokenPtr; +struct _token { + xmlCRNGTokType toktype; + int toklen; + const xmlChar *token; + const xmlChar *prefix; +}; + +typedef struct _xmlCRelaxNGParserCtxt xmlCRelaxNGParserCtxt; +typedef xmlCRelaxNGParserCtxt *xmlCRelaxNGParserCtxtPtr; +struct _xmlCRelaxNGParserCtxt { + void *userData; /* user specific data block */ + xmlRelaxNGValidityErrorFunc error; /* the callback in case of errors */ + xmlRelaxNGValidityWarningFunc warning;/* the callback in case of warning */ + xmlRelaxNGValidErr err; + + const xmlChar *compact; + const xmlChar *end; + const xmlChar *cur; + int isElem; + int lineno; + const xmlChar *linestart; + const char *filename; + + int nbTokens; + int firstToken; + _token tokens[MAX_TOKEN]; + int totalToken; + + xmlCRelaxNGParserState state; + + int nbErrors; + + xmlDocPtr res; /* the result */ + xmlNodePtr ins; /* the current insertion node */ + + xmlNsPtr nsDef; + tokenPtr token; + + xmlHashTablePtr namespaces; + xmlHashTablePtr datatypes; + + /* + * dictionary and keywords + */ + xmlDictPtr dict; + const xmlChar *key_attribute; + const xmlChar *key_default; + const xmlChar *key_datatypes; + const xmlChar *key_div; + const xmlChar *key_element; + const xmlChar *key_empty; + const xmlChar *key_external; + const xmlChar *key_grammar; + const xmlChar *key_include; + const xmlChar *key_inherit; + const xmlChar *key_list; + const xmlChar *key_mixed; + const xmlChar *key_namespace; + const xmlChar *key_notAllowed; + const xmlChar *key_parent; + const xmlChar *key_start; + const xmlChar *key_string; + const xmlChar *key_text; + const xmlChar *key_token; + const xmlChar *key_equal; + const xmlChar *key_orequal; + const xmlChar *key_andequal; + const xmlChar *key_combine; + const xmlChar *key_or; + const xmlChar *key_comma; + const xmlChar *key_and; + const xmlChar *key_choice; + const xmlChar *key_group; + const xmlChar *key_interleave; + const xmlChar *key_ref; + const xmlChar *key_define; + + /* results */ + xmlDocPtr doc; /* the resulting doc */ + xmlNodePtr insert; /* the insertion point */ + xmlAttrPtr attrs; /* pending attributes */ +}; + +static const xmlChar *xmlCRelaxNGInherit = BAD_CAST "Inherit string"; +static const xmlChar *xmlCRelaxNGDefault = BAD_CAST "Default string"; + +#define CUR_CHAR(l) xmlXPathCurrentChar(ctxt, &l) +/** + * IS_BLANK: + * @c: an UNICODE value (int) + * + * Macro to check the following production in the XML spec: + * + * [3] S ::= (#x20 | #x9 | #xD | #xA)+ + */ +#ifndef IS_BLANK +#define IS_BLANK(c) (((c) == 0x20) || ((c) == 0x09) || ((c) == 0xA) || \ + ((c) == 0x0D)) +#endif +#define IS_SEPARATOR(c) (((c) == 0x20) || ((c) == 0x09) || ((c) == 0xA) || \ + ((c) == 0x0D) || (c == '#')) + +#define CRNG_ERROR0(X) \ + { xmlCRNGErr(ctxt, X, NULL); return(0); } +#define CRNG_ERROR(X) \ + { xmlCRNGErr(ctxt, X, NULL); } + +#define CRNG_MEM_ERROR0() \ + { xmlCRNGErr(ctxt, CRNG_MEMORY_ERROR, NULL); return(0); } +#define CRNG_MEM_ERROR() \ + { xmlCRNGErr(ctxt, CRNG_MEMORY_ERROR, NULL); } + +#define ERROR(str) xmlCRNGErr(ctxt, 0, str); + +static void +xmlCRNGErr(xmlCRelaxNGParserCtxtPtr ctxt, int err_no, const char *err_msg) { + const xmlChar *cur; + xmlChar buffer[150]; + int i, l; + + if (ctxt != NULL) { + if (ctxt->filename != NULL) + fprintf(stderr, "%s:%d ", ctxt->filename, ctxt->lineno); + } + if (err_msg != NULL) { + fprintf(stderr, "error: %s\n", err_msg); + } else if (err_no != 0) + fprintf(stderr, "error %d\n", err_no); + cur = ctxt->cur; + while ((*cur != '\n') && (*cur != '\r') && (ctxt->cur - cur < 80)) cur--; + l = ctxt->cur - cur; + cur++; + for (i = 0; i < 100;i++) { + if ((*cur == '\n') || (*cur == '\r')) break; + buffer[i] = *cur++; + } + buffer[i] = 0; + fprintf(stderr, "%s\n", buffer); + for (i = 0; i < l;i++) buffer[i] = ' '; + buffer[i++] = '^'; + buffer[i++] = 0; + fprintf(stderr, "%s\n", buffer); +} + +/** + * IS_OP + * @c: an UNICODE value (int) + * + * Macro to check for operator value + */ +#ifndef IS_OP +#define IS_OP(c) (((c) == ',') || ((c) == '&') || ((c) == '|') || \ + ((c) == '?') || ((c) == '-') || ((c) == '*') || \ + ((c) == '{') || ((c) == '}') || ((c) == '(') || \ + ((c) == ')') || ((c) == '+') || ((c) == '=') || \ + ((c) == ':')) +#endif + +static int +xmlCRNGIsKeyword(xmlCRelaxNGParserCtxtPtr ctxt, const xmlChar *str) { + if ((str == ctxt->key_attribute) || + (str == ctxt->key_default) || + (str == ctxt->key_datatypes) || + (str == ctxt->key_div) || + (str == ctxt->key_element) || + (str == ctxt->key_empty) || + (str == ctxt->key_external) || + (str == ctxt->key_grammar) || + (str == ctxt->key_include) || + (str == ctxt->key_inherit) || + (str == ctxt->key_list) || + (str == ctxt->key_mixed) || + (str == ctxt->key_namespace) || + (str == ctxt->key_notAllowed) || + (str == ctxt->key_parent) || + (str == ctxt->key_start) || + (str == ctxt->key_string) || + (str == ctxt->key_text) || + (str == ctxt->key_token)) + return(1); + return(0); + +} + +/* + * xmlCRNGNextToken: + * ctxt: a compact RNG parser context + * + * Scan the schema to get the next token + * + * Return 0 if success and -1 in case of error + */ + +static int +xmlCRNGNextToken(xmlCRelaxNGParserCtxtPtr ctxt) { + const xmlChar *cur; + tokenPtr token; + + if (ctxt == NULL) return(-1); + if (ctxt->nbTokens >= MAX_TOKEN) return(-1); + token = &(ctxt->tokens[(ctxt->firstToken + ctxt->nbTokens) % MAX_TOKEN]); + token->toktype = CRNG_NONE; + + if (ctxt->cur == NULL) { + ctxt->cur = ctxt->compact; + } +retry: + if (ctxt->cur >= ctxt->end) { + ctxt->state = XML_CRNG_EOF; + return(-1); + } + while ((ctxt->cur < ctxt->end) && + (IS_BLANK(*ctxt->cur))) ctxt->cur++; + if (ctxt->cur >= ctxt->end) { + ctxt->state = XML_CRNG_EOF; + return(-1); + } + if (*ctxt->cur == '#') { + cur = ctxt->cur; + cur++; + while ((cur < ctxt->end) && (*cur != '\n') && (*cur != '\r')) + cur++; + ctxt->cur = cur; + goto retry; + } else if (*ctxt->cur == '"') { + /* string, check for '"""' */ + ctxt->cur++; + if (ctxt->cur >= ctxt->end) goto eof; + cur = ctxt->cur; + if ((ctxt->end - ctxt->end > 2) && + (*cur == '"') && (cur[1] == '"')) { + TODO + } else { + while ((cur < ctxt->end) && (*cur != '"')) cur++; + if (cur >= ctxt->end) goto eof; + token->toklen = cur - ctxt->cur; + token->token = xmlDictLookup(ctxt->dict, ctxt->cur, token->toklen); + token->toktype = CRNG_LITERAL_SEGMENT; + token->prefix = NULL; + cur++; + ctxt->cur = cur; + } + } else if (*ctxt->cur == '\'') { + /* string, check for "'''" */ + TODO + } else if ((IS_OP(*ctxt->cur)) || (*ctxt->cur == ':')) { + cur = ctxt->cur; + cur++; + if ((cur < ctxt->end) && + (((*cur == '=') && + ((*ctxt->cur == '|') || (*ctxt->cur == '&'))) || + ((*cur == '*') && (*ctxt->cur == ':')))) { + token->toklen = 2; + } else { + token->toklen = 1; + } + token->token = xmlDictLookup(ctxt->dict, ctxt->cur, token->toklen); + token->toktype = CRNG_OP; + token->prefix = NULL; + ctxt->cur += token->toklen; + } else { + int escape = 0; + + cur = ctxt->cur; + if (*cur == '\\') { + escape = 1; + cur++; + ctxt->cur++; + } + while ((cur < ctxt->end) && + (!(IS_SEPARATOR(*cur))) && (!(IS_OP(*cur)))) cur++; + + token->toklen = cur - ctxt->cur; + token->token = xmlDictLookup(ctxt->dict, ctxt->cur, token->toklen); + token->prefix = NULL; + ctxt->cur = cur; + if ((escape == 0) && (xmlCRNGIsKeyword(ctxt, token->token))) + token->toktype = CRNG_KEYWORD; + else { + token->toktype = CRNG_IDENTIFIER; + } + if (*ctxt->cur == ':') { + ctxt->cur++; + if (*ctxt->cur == '*') { + ctxt->cur++; + token->toktype = CRNG_NSNAME; + } else { + cur = ctxt->cur; + while ((cur < ctxt->end) && + (!(IS_SEPARATOR(*cur))) && (!(IS_OP(*cur)))) cur++; + token->prefix = token->token; + token->toklen = cur - ctxt->cur; + token->token = xmlDictLookup(ctxt->dict, ctxt->cur, + token->toklen); + ctxt->cur = cur; + if (xmlValidateNCName(token->token, 0) == 0) + token->toktype = CRNG_QNAME; + else { + TODO /* sounds like an error ! */ + token->toktype = CRNG_IDENTIFIER; + } + } + } + } + ctxt->nbTokens++; + return(0); +eof: + ctxt->state = XML_CRNG_EOF; + CRNG_ERROR(CRNG_END_ERROR); + return(-1); +} + +/** + * xmlParseCRNGGetToken: + * @ctxt: a compact RNG parser context + * @no: the number of the token from 1 for the first one + * and 2, 3 ... for read-ahead + * + * Token reading interface + * + * returns a pointer to the new token, or NULL in case of error or EOF + */ +static tokenPtr +xmlParseCRNGGetToken(xmlCRelaxNGParserCtxtPtr ctxt, int no) { + tokenPtr ret; + int res; + + if ((no <= 0) || (no >= MAX_TOKEN)) return(NULL); + no--; + while (ctxt->nbTokens <= no) { + res = xmlCRNGNextToken(ctxt); + if (res < 0) + return(NULL); + } + ret = &(ctxt->tokens[(ctxt->firstToken + no) % MAX_TOKEN]); + return(ret); +} + +/** + * xmlParseCRNGDropTokens: + * @ctxt: a compact RNG parser context + * @nr: the number of token marked as read + * + * mark a number of token as read and consumed. + * + * Returns -1 in case of error and 0 otherwise + */ +static int +xmlParseCRNGDropTokens(xmlCRelaxNGParserCtxtPtr ctxt, int nr) { + if ((nr <= 0) || (nr >= MAX_TOKEN)) return(-1); + while ((ctxt->nbTokens >0) && (nr > 0)) { + ctxt->firstToken++; + nr--; + ctxt->nbTokens--; + ctxt->totalToken++; + if (ctxt->totalToken == 384) + fprintf(stderr, "found\n"); + } + ctxt->firstToken = ctxt->firstToken % MAX_TOKEN; + return(0); +} + +static void +xmlParseCRNGTokenize(xmlCRelaxNGParserCtxtPtr ctxt) { + tokenPtr token; + + token = xmlParseCRNGGetToken(ctxt, 1); + while (token != NULL) { + switch (token->toktype) { + case CRNG_NONE: printf("none"); break; + case CRNG_OP: printf("op"); break; + case CRNG_KEYWORD: printf("keyword"); break; + case CRNG_IDENTIFIER: printf("identifier"); break; + case CRNG_LITERAL_SEGMENT: printf("literal"); break; + case CRNG_CNAME: printf("cname"); break; + case CRNG_QNAME: printf("qname"); break; + case CRNG_NSNAME: printf("nsname"); break; + case CRNG_DOCUMENTATION: printf("doc"); break; + } + printf(":%s\n", token->token); + xmlParseCRNGDropTokens(ctxt, 1); + token = xmlParseCRNGGetToken(ctxt, 1); + } +} + +/** + * xmlParseCRNG_attribute: + * @ctxt: a compact RNG parser context + * @name: the attribute name + * @ns: the attribute namespace + * @value: the attribute value + * + * implements attribute of the RELAX NG Compact Syntax Appendix A + * + * Returns 0 in case of success and -1 in case of error + */ +static int +xmlParseCRNG_attribute(xmlCRelaxNGParserCtxtPtr ctxt, + const xmlChar *name, + xmlNsPtr ns, + const xmlChar *value) +{ + xmlAttrPtr attr; + + attr = xmlNewNsPropEatName(NULL, ns, (xmlChar *) name, value); + if (attr == NULL) CRNG_MEM_ERROR0(); + attr->next = ctxt->attrs; + if (ctxt->attrs != NULL) + ctxt->attrs->prev = attr; + ctxt->attrs = attr; + return(0); +} + +/** + * xmlParseCRNG_bindPrefix: + * @ctxt: a compact RNG parser context + * @prefix: the namespace prefix or NULL + * @namespace: the namespace name + * + * implements bindPrefix of the RELAX NG Compact Syntax Appendix A + * + * Returns 0 in case of success and -1 in case of error + */ +static int +xmlParseCRNG_bindPrefix(xmlCRelaxNGParserCtxtPtr ctxt, + const xmlChar *prefix, + const xmlChar *namespace) +{ + int ret; + + if ((prefix != NULL) && (xmlStrEqual(prefix, BAD_CAST "xml")) && + (!xmlStrEqual(namespace, XML_XML_NAMESPACE))) { + ERROR("The \"xml\" prefix must be bound to \"http://www.w3.org/XML/1998/namespace\""); + return(-1); + } else if ((xmlStrEqual(namespace, XML_XML_NAMESPACE)) && + (!xmlStrEqual(prefix, BAD_CAST "xml"))) { + ERROR("The \"http://www.w3.org/XML/1998/namespace\" name must be bound to \"xml\" prefix"); + return(-1); + } + if (ctxt->namespaces == NULL) + ctxt->namespaces = xmlHashCreate(10); + if (ctxt->namespaces == NULL) { + ERROR("Failed to create namespace hash table"); + return(-1); + } + if (prefix == NULL) + ret = xmlHashAddEntry(ctxt->namespaces, xmlCRelaxNGDefault, + (void *) namespace); + else + ret = xmlHashAddEntry(ctxt->namespaces, prefix, + (void *) namespace); + if (ret < 0) { + if (prefix == NULL) { + ERROR("Redefinition of default namespace"); + } else { + ERROR("Redefinition of namespace"); + } + return(-1); + } + + return(0); +} + +/** + * xmlParseCRNG_bindDatatypePrefix: + * @ctxt: a compact RNG parser context + * @prefix: the datatype prefix + * @namespace: the datatype identifier + * + * implements bindDatatypePrefix of the RELAX NG Compact Syntax Appendix A + * + * Returns 0 in case of success and -1 in case of error + */ +static int +xmlParseCRNG_bindDatatypePrefix(xmlCRelaxNGParserCtxtPtr ctxt ATTRIBUTE_UNUSED, + const xmlChar *prefix, + const xmlChar *namespace) +{ + int ret; + + if ((prefix != NULL) && (xmlStrEqual(prefix, BAD_CAST "xsd")) && + (!xmlStrEqual(namespace, + BAD_CAST "http://www.w3.org/2001/XMLSchema-datatypes"))) { + ERROR("The \"xsd\" prefix must be bound to \"http://www.w3.org/2001/XMLSchema-datatypes\""); + return(-1); + } + if (ctxt->datatypes == NULL) + ctxt->datatypes = xmlHashCreate(10); + if (ctxt->datatypes == NULL) { + ERROR("Failed to create namespace hash table"); + return(-1); + } + ret = xmlHashAddEntry(ctxt->datatypes, prefix, + (void *) namespace); + if (ret < 0) { + ERROR("Redefinition of datatype"); + return(-1); + } + return(0); +} + +/** + * xmlParseCRNG_lookupPrefix: + * @ctxt: a compact RNG parser context + * @prefix: the namespace prefix or NULL + * + * implements lookupPrefix of the RELAX NG Compact Syntax Appendix A + * + * Returns the prefix in case of success or NULL in case of error + */ +static const xmlChar * +xmlParseCRNG_lookupPrefix(xmlCRelaxNGParserCtxtPtr ctxt ATTRIBUTE_UNUSED, + const xmlChar *prefix) +{ + const xmlChar *ret; + + if (prefix == NULL) + ret = xmlHashLookup(ctxt->namespaces, xmlCRelaxNGDefault); + else + ret = xmlHashLookup(ctxt->namespaces, prefix); + return(ret); +} + +/** + * xmlParseCRNG_lookupDatatypePrefix: + * @ctxt: a compact RNG parser context + * @prefix: the namespace prefix or NULL + * + * implements lookupDatatypePrefix of the RELAX NG Compact Syntax Appendix A + * + * Returns the prefix in case of success or NULL in case of error + */ +static const xmlChar * +xmlParseCRNG_lookupDatatypePrefix(xmlCRelaxNGParserCtxtPtr ctxt ATTRIBUTE_UNUSED, + const xmlChar *prefix) +{ + const xmlChar *ret; + ret = xmlHashLookup(ctxt->datatypes, prefix); + return(ret); +} + +/** + * xmlParseCRNG_datatypeAttributes: + * @ctxt: a compact RNG parser context + * @prefix: the namespace prefix or NULL + * + * implements lookupPrefix of the RELAX NG Compact Syntax Appendix A + * + * Returns the prefix in case of success or NULL in case of error + */ +static xmlAttrPtr +xmlParseCRNG_datatypeAttributes(xmlCRelaxNGParserCtxtPtr ctxt ATTRIBUTE_UNUSED, + const xmlChar *library, const xmlChar *type) +{ + xmlAttrPtr lib, typ; + + lib = xmlNewNsProp(NULL, NULL, BAD_CAST "datatypeLibrary", library); + if (lib == NULL) { + CRNG_MEM_ERROR(); + return(NULL); + } + typ = xmlNewNsProp(NULL, NULL, BAD_CAST "type", type); + if (typ == NULL) { + CRNG_MEM_ERROR(); + return(lib); + } + lib->next = typ; + + return(lib); +} + +/** + * xmlParseCRNG_XXX: + * @ctxt: a compact RNG parser context + * + * Parse XXX of the RELAX NG Compact Syntax Appendix A + * + * Returns 0 in case of success and -1 in case of error + */ +static int +xmlParseCRNG_XXX(xmlCRelaxNGParserCtxtPtr ctxt ATTRIBUTE_UNUSED) +{ + return(0); +} + +static int xmlParseCRNG_pattern(xmlCRelaxNGParserCtxtPtr ctxt); +static int xmlParseCRNG_nameClass(xmlCRelaxNGParserCtxtPtr ctxt); + +/** + * xmlParseCRNG_params: + * @ctxt: a compact RNG parser context + * + * Parse params of the RELAX NG Compact Syntax Appendix A + * + * Returns 0 in case of success and -1 in case of error + */ +static int +xmlParseCRNG_params(xmlCRelaxNGParserCtxtPtr ctxt ATTRIBUTE_UNUSED) +{ + TODO + return(0); +} + +/** + * xmlParseCRNG_exceptNameClass: + * @ctxt: a compact RNG parser context + * + * Parse exceptNameClass of the RELAX NG Compact Syntax Appendix A + * + * Returns 0 in case of success and -1 in case of error + */ +static int +xmlParseCRNG_exceptNameClass(xmlCRelaxNGParserCtxtPtr ctxt ATTRIBUTE_UNUSED) +{ + tokenPtr token; + xmlNodePtr insert = ctxt->insert, cur; + + token = xmlParseCRNGGetToken(ctxt, 1); + if ((token->toktype == CRNG_OP) && + (token->token[0] == '-') && (token->token[1] == 0)) { + xmlParseCRNGDropTokens(ctxt, 1); + cur = xmlNewNode(NULL, BAD_CAST "except"); + if (cur == NULL) CRNG_MEM_ERROR0(); + if (ctxt->insert != NULL) + xmlAddChild(ctxt->insert, cur); + ctxt->insert = cur; + xmlParseCRNG_nameClass(ctxt); + } + ctxt->insert = insert; + return(0); +} + +/** + * xmlParseCRNG_innerNameClass: + * @ctxt: a compact RNG parser context + * + * Parse innerNameClass of the RELAX NG Compact Syntax Appendix A + * + * Returns 0 in case of success and -1 in case of error + */ +static int +xmlParseCRNG_innerNameClass(xmlCRelaxNGParserCtxtPtr ctxt) +{ + tokenPtr token; + xmlNodePtr cur; + + token = xmlParseCRNGGetToken(ctxt, 1); + if (token->toktype == CRNG_OP) { + if ((token->token[0] == '(') && (token->token[1] == 0)) { + xmlParseCRNGDropTokens(ctxt, 1); + xmlParseCRNG_nameClass(ctxt); + token = xmlParseCRNGGetToken(ctxt, 1); + if ((token->toktype != CRNG_OP) || + (token->token[0] != ')') || (token->token[1] != 0)) { + ERROR("Expecting \")\" here"); + } + xmlParseCRNGDropTokens(ctxt, 1); + } else if ((token->token[0] == '*') && (token->token[1] == 0)) { + xmlParseCRNGDropTokens(ctxt, 1); + cur = xmlNewNode(NULL, BAD_CAST "anyName"); + if (cur == NULL) CRNG_MEM_ERROR0(); + if (ctxt->insert != NULL) + xmlAddChild(ctxt->insert, cur); + ctxt->insert = cur; + xmlParseCRNG_exceptNameClass(ctxt); + } else { + TODO + } + } else if ((token->toktype == CRNG_IDENTIFIER) || + (token->toktype == CRNG_KEYWORD)) { + cur = xmlNewNode(NULL, BAD_CAST "name"); + if (cur == NULL) CRNG_MEM_ERROR0(); + if (ctxt->isElem) { + xmlSetProp(cur, BAD_CAST "ns", + xmlParseCRNG_lookupPrefix(ctxt, NULL)); + } else { + xmlSetProp(cur, BAD_CAST "ns", BAD_CAST ""); + } + xmlNodeAddContent(cur, token->token); + if (ctxt->insert != NULL) + xmlAddChild(ctxt->insert, cur); + ctxt->insert = cur; + xmlParseCRNGDropTokens(ctxt, 1); + } else if (token->toktype == CRNG_CNAME) { + TODO + } else if (token->toktype == CRNG_NSNAME) { + cur = xmlNewNode(NULL, BAD_CAST "nsName"); + if (cur == NULL) CRNG_MEM_ERROR0(); + xmlSetProp(cur, BAD_CAST "ns", + xmlParseCRNG_lookupPrefix(ctxt, token->token)); + if (ctxt->insert != NULL) + xmlAddChild(ctxt->insert, cur); + ctxt->insert = cur; + xmlParseCRNGDropTokens(ctxt, 1); + xmlParseCRNG_exceptNameClass(ctxt); + } else { + TODO /* probably an error */ + } + + return(0); +} + +/** + * xmlParseCRNG_nameClass: + * @ctxt: a compact RNG parser context + * + * Parse nameClass of the RELAX NG Compact Syntax Appendix A + * + * Returns 0 in case of success and -1 in case of error + */ +static int +xmlParseCRNG_nameClass(xmlCRelaxNGParserCtxtPtr ctxt) +{ + tokenPtr token; + xmlNodePtr insert = ctxt->insert, last, choice; + + ctxt->insert = NULL; + xmlParseCRNG_innerNameClass(ctxt); + last = ctxt->insert; + token = xmlParseCRNGGetToken(ctxt, 1); + while ((token->toktype == CRNG_OP) && + (token->token[0] == '|') && (token->token[1] == 0)) { + choice = xmlNewNodeEatName(NULL, (xmlChar *) ctxt->key_choice); + xmlParseCRNGDropTokens(ctxt, 1); + if (choice == NULL) CRNG_MEM_ERROR0(); + ctxt->insert = NULL; + xmlParseCRNG_innerNameClass(ctxt); + xmlAddChild(choice, last); + xmlAddChild(choice, ctxt->insert); + last = choice; + token = xmlParseCRNGGetToken(ctxt, 1); + } + xmlAddChild(insert, last); + + ctxt->insert = insert; + return(0); +} + +/** + * xmlParseCRNG_patternBlock: + * @ctxt: a compact RNG parser context + * + * Parse a pattern block of the RELAX NG Compact Syntax Appendix A + * + * Returns 0 in case of success and -1 in case of error + */ +static int +xmlParseCRNG_patternBlock(xmlCRelaxNGParserCtxtPtr ctxt) +{ + tokenPtr token; + + token = xmlParseCRNGGetToken(ctxt, 1); + if ((token->toktype != CRNG_OP) || + (token->token[0] != '{') || (token->token[1] != 0)) { + ERROR("Expecting \"{\" here"); + } + xmlParseCRNGDropTokens(ctxt, 1); + xmlParseCRNG_pattern(ctxt); + token = xmlParseCRNGGetToken(ctxt, 1); + if ((token->toktype != CRNG_OP) || + (token->token[0] != '}') || (token->token[1] != 0)) { + ERROR("Expecting \"}\" here"); + } + xmlParseCRNGDropTokens(ctxt, 1); + return(0); +} + +/** + * xmlParseCRNG_datatype: + * @ctxt: a compact RNG parser context + * + * Parse datatype of the RELAX NG Compact Syntax Appendix A + * + * Returns 0 in case of success and -1 in case of error + */ +static int +xmlParseCRNG_datatype(xmlCRelaxNGParserCtxtPtr ctxt ATTRIBUTE_UNUSED) +{ + tokenPtr token; + xmlAttrPtr attrs = NULL; + + token = xmlParseCRNGGetToken(ctxt, 1); + if (token->toktype == CRNG_KEYWORD) { + if (token->token == ctxt->key_string) { + attrs = xmlParseCRNG_datatypeAttributes(ctxt, BAD_CAST "", + token->token); + xmlParseCRNGDropTokens(ctxt, 1); + } else if (token->token == ctxt->key_token) { + attrs = xmlParseCRNG_datatypeAttributes(ctxt, BAD_CAST "", + token->token); + xmlParseCRNGDropTokens(ctxt, 1); + } else { + TODO /* probably an error */ + } + } else if (token->toktype == CRNG_LITERAL_SEGMENT) { + ctxt->insert = xmlNewNode(NULL, BAD_CAST "value"); + xmlParseCRNGDropTokens(ctxt, 1); + if (ctxt->insert == NULL) CRNG_MEM_ERROR0(); + xmlNodeAddContent(ctxt->insert, token->token); + } else if (token->toktype == CRNG_QNAME) { + attrs = xmlParseCRNG_datatypeAttributes(ctxt, + xmlParseCRNG_lookupDatatypePrefix(ctxt, token->prefix), + token->token); + } else { + TODO + } + if (attrs != NULL) { + token = xmlParseCRNGGetToken(ctxt, 1); + if (token->toktype == CRNG_LITERAL_SEGMENT) { + ctxt->insert = xmlNewNode(NULL, BAD_CAST "value"); + xmlParseCRNGDropTokens(ctxt, 1); + if (ctxt->insert == NULL) { + xmlFreePropList(attrs); + CRNG_MEM_ERROR0(); + } + ctxt->insert->properties = attrs; + xmlNodeAddContent(ctxt->insert, token->token); + } else if ((token->toktype == CRNG_OP) && + (token->token[0] == '{') && (token->token[0] == 0)) { + ctxt->insert = xmlNewNode(NULL, BAD_CAST "data"); + xmlParseCRNGDropTokens(ctxt, 1); + if (ctxt->insert == NULL) { + xmlFreePropList(attrs); + CRNG_MEM_ERROR0(); + } + ctxt->insert->properties = attrs; + xmlParseCRNG_params(ctxt); + } else { + ctxt->insert = xmlNewNode(NULL, BAD_CAST "data"); + xmlParseCRNGDropTokens(ctxt, 1); + if (ctxt->insert == NULL) { + xmlFreePropList(attrs); + CRNG_MEM_ERROR0(); + } + ctxt->insert->properties = attrs; + xmlNodeAddContent(ctxt->insert, token->token); + } + } + return(0); +} + +/** + * xmlParseCRNG_primary: + * @ctxt: a compact RNG parser context + * + * Parse primary of the RELAX NG Compact Syntax Appendix A + * + * Returns 0 in case of success and -1 in case of error + */ +static int +xmlParseCRNG_primary(xmlCRelaxNGParserCtxtPtr ctxt ATTRIBUTE_UNUSED) +{ + tokenPtr token; + + token = xmlParseCRNGGetToken(ctxt, 1); + if (token == NULL) + return(0); + if (token->toktype == CRNG_KEYWORD) { + if (token->token == ctxt->key_element) { + ctxt->insert = xmlNewNodeEatName(NULL, (xmlChar *) token->token); + xmlParseCRNGDropTokens(ctxt, 1); + if (ctxt->insert == NULL) CRNG_MEM_ERROR0(); + ctxt->isElem = 1; + xmlParseCRNG_nameClass(ctxt); + xmlParseCRNG_patternBlock(ctxt); + } else if (token->token == ctxt->key_attribute) { + ctxt->insert = xmlNewNodeEatName(NULL, (xmlChar *) token->token); + xmlParseCRNGDropTokens(ctxt, 1); + if (ctxt->insert == NULL) CRNG_MEM_ERROR0(); + ctxt->isElem = 0; + xmlParseCRNG_nameClass(ctxt); + xmlParseCRNG_patternBlock(ctxt); + } else if (token->token == ctxt->key_mixed) { + ctxt->insert = xmlNewNodeEatName(NULL, (xmlChar *) token->token); + xmlParseCRNGDropTokens(ctxt, 1); + if (ctxt->insert == NULL) CRNG_MEM_ERROR0(); + xmlParseCRNG_patternBlock(ctxt); + } else if (token->token == ctxt->key_list) { + ctxt->insert = xmlNewNodeEatName(NULL, (xmlChar *) token->token); + xmlParseCRNGDropTokens(ctxt, 1); + if (ctxt->insert == NULL) CRNG_MEM_ERROR0(); + xmlParseCRNG_patternBlock(ctxt); + } else if (token->token == ctxt->key_empty) { + ctxt->insert = xmlNewNodeEatName(NULL, (xmlChar *) token->token); + xmlParseCRNGDropTokens(ctxt, 1); + if (ctxt->insert == NULL) CRNG_MEM_ERROR0(); + } else if (token->token == ctxt->key_notAllowed) { + ctxt->insert = xmlNewNodeEatName(NULL, (xmlChar *) token->token); + xmlParseCRNGDropTokens(ctxt, 1); + if (ctxt->insert == NULL) CRNG_MEM_ERROR0(); + } else if (token->token == ctxt->key_text) { + ctxt->insert = xmlNewNodeEatName(NULL, (xmlChar *) token->token); + xmlParseCRNGDropTokens(ctxt, 1); + if (ctxt->insert == NULL) CRNG_MEM_ERROR0(); + } else if (token->token == ctxt->key_parent) { + ctxt->insert = xmlNewNodeEatName(NULL, (xmlChar *) token->token); + xmlParseCRNGDropTokens(ctxt, 1); + if (ctxt->insert == NULL) CRNG_MEM_ERROR0(); + TODO + } else if (token->token == ctxt->key_grammar) { + ctxt->insert = xmlNewNodeEatName(NULL, (xmlChar *) token->token); + xmlParseCRNGDropTokens(ctxt, 1); + if (ctxt->insert == NULL) CRNG_MEM_ERROR0(); + TODO + } else if (token->token == ctxt->key_external) { + ctxt->insert = xmlNewNode(NULL, BAD_CAST "externalRef"); + xmlParseCRNGDropTokens(ctxt, 1); + if (ctxt->insert == NULL) CRNG_MEM_ERROR0(); + TODO + } else { + TODO + } + } else if (token->toktype == CRNG_IDENTIFIER) { + ctxt->insert = xmlNewNodeEatName(NULL, (xmlChar *) ctxt->key_ref); + if (ctxt->insert == NULL) CRNG_MEM_ERROR0(); + xmlSetProp(ctxt->insert, BAD_CAST "name", token->token); + xmlParseCRNGDropTokens(ctxt, 1); + } else if (token->toktype == CRNG_QNAME) { + xmlParseCRNG_datatype(ctxt); + } else if (token->toktype == CRNG_LITERAL_SEGMENT) { + xmlParseCRNG_datatype(ctxt); + } else if ((token->toktype == CRNG_OP) && + (token->token[0] == '(') && (token->token[1] == 0)) { + xmlParseCRNGDropTokens(ctxt, 1); + xmlParseCRNG_pattern(ctxt); + token = xmlParseCRNGGetToken(ctxt, 1); + if ((token->toktype != CRNG_OP) || + (token->token[0] != ')') || (token->token[1] != 0)) { + ERROR("Expecting \")\" here"); + } + xmlParseCRNGDropTokens(ctxt, 1); + } + return(0); +} + +/** + * xmlParseCRNG_particle: + * @ctxt: a compact RNG parser context + * + * Parse particle of the RELAX NG Compact Syntax Appendix A + * + * Returns 0 in case of success and -1 in case of error + */ +static int +xmlParseCRNG_particle(xmlCRelaxNGParserCtxtPtr ctxt) +{ + tokenPtr token; + xmlNodePtr insert = ctxt->insert, res, tmp = NULL; + + ctxt->insert = NULL; + xmlParseCRNG_primary(ctxt); + res = ctxt->insert; + token = xmlParseCRNGGetToken(ctxt, 1); + if ((token != NULL) && (token->toktype == CRNG_OP)) { + if ((token->token[0] == '*') && (token->token[1] == 0)) { + tmp = xmlNewNode(NULL, BAD_CAST "zeroOrMore"); + if (tmp == NULL) CRNG_MEM_ERROR0(); + } else if ((token->token[0] == '+') && (token->token[1] == 0)) { + tmp = xmlNewNode(NULL, BAD_CAST "oneOrMore"); + if (tmp == NULL) CRNG_MEM_ERROR0(); + } else if ((token->token[0] == '?') && (token->token[1] == 0)) { + tmp = xmlNewNode(NULL, BAD_CAST "optional"); + if (tmp == NULL) CRNG_MEM_ERROR0(); + } + if (tmp != NULL) { + xmlAddChild(tmp, res); + res = tmp; + xmlParseCRNGDropTokens(ctxt, 1); + } + } + if (insert != NULL) { + xmlAddChild(insert, res); + ctxt->insert = insert; + } else + ctxt->insert = res; + return(0); +} + +/** + * xmlParseCRNG_pattern: + * @ctxt: a compact RNG parser context + * + * Parse pattern of the RELAX NG Compact Syntax Appendix A + * + * Returns 0 in case of success and -1 in case of error + */ +static int +xmlParseCRNG_pattern(xmlCRelaxNGParserCtxtPtr ctxt) +{ + tokenPtr token; + xmlNodePtr insert = ctxt->insert, prev, grp; + + ctxt->insert = NULL; + xmlParseCRNG_particle(ctxt); + prev = ctxt->insert; + token = xmlParseCRNGGetToken(ctxt, 1); + while ((prev != NULL) && (token != NULL) && (token->toktype == CRNG_OP)) { + if (token->token == ctxt->key_or) { + grp = xmlNewNodeEatName(NULL, (xmlChar *) ctxt->key_choice); + if (grp == NULL) CRNG_MEM_ERROR0(); + } else if (token->token == ctxt->key_and) { + grp = xmlNewNodeEatName(NULL, (xmlChar *) ctxt->key_interleave); + if (grp == NULL) CRNG_MEM_ERROR0(); + } else if (token->token == ctxt->key_comma) { + grp = xmlNewNodeEatName(NULL, (xmlChar *) ctxt->key_group); + if (grp == NULL) CRNG_MEM_ERROR0(); + } else + break; + xmlParseCRNGDropTokens(ctxt, 1); + ctxt->insert = NULL; + xmlParseCRNG_particle(ctxt); + xmlAddChild(grp, prev); + xmlAddChild(grp, ctxt->insert); + prev = grp; + token = xmlParseCRNGGetToken(ctxt, 1); + } + if (insert != NULL) { + xmlAddChild(insert, prev); + ctxt->insert = insert; + } else { + ctxt->insert = prev; + } + + return(0); +} + +/** + * xmlParseCRNG_component: + * @ctxt: a compact RNG parser context + * + * Parse component of the RELAX NG Compact Syntax Appendix A + * + * Returns 0 in case of success and -1 in case of error + */ +static int +xmlParseCRNG_component(xmlCRelaxNGParserCtxtPtr ctxt) +{ + tokenPtr token, tok2; + xmlNodePtr insert = ctxt->insert; + + token = xmlParseCRNGGetToken(ctxt, 1); + if (token == NULL) + return(0); + if (token->toktype == CRNG_KEYWORD) { + if (token->token == ctxt->key_start) { + xmlNodePtr start; + + start = xmlNewNodeEatName(NULL, (xmlChar *) ctxt->key_start); + if (start == NULL) CRNG_MEM_ERROR0(); + if (ctxt->insert != NULL) + xmlAddChild(ctxt->insert, start); + ctxt->insert = start; + xmlParseCRNGDropTokens(ctxt, 1); + token = xmlParseCRNGGetToken(ctxt, 1); + + if ((token->toktype == CRNG_OP) && + (token->token == ctxt->key_equal)) { + } else if ((token->toktype == CRNG_OP) && + (token->token == ctxt->key_orequal)) { + xmlParseCRNG_attribute(ctxt, ctxt->key_combine, NULL, + BAD_CAST "choice"); + } else if ((token->toktype == CRNG_OP) && + (token->token == ctxt->key_andequal)) { + xmlParseCRNG_attribute(ctxt, ctxt->key_combine, NULL, + BAD_CAST "interleave"); + } else { + ERROR("expecting \"=\" or \"&=\" or \"|=\" here") + return(-1); + } + start->properties = ctxt->attrs; + ctxt->attrs = NULL; + xmlParseCRNGDropTokens(ctxt, 1); + xmlParseCRNG_pattern(ctxt); + + } else if (token->token == ctxt->key_include) { + TODO + } else if (token->token == ctxt->key_div) { + TODO + } else { + return(-1); + } + } else if (token->toktype == CRNG_IDENTIFIER) { + xmlNodePtr define; + const xmlChar *identifier; + + identifier = token->token; + tok2 = xmlParseCRNGGetToken(ctxt, 2); + if ((tok2->toktype == CRNG_OP) && + (tok2->token == ctxt->key_equal)) { + } else if ((tok2->toktype == CRNG_OP) && + (tok2->token == ctxt->key_orequal)) { + xmlParseCRNG_attribute(ctxt, ctxt->key_combine, NULL, + BAD_CAST "choice"); + } else if ((tok2->toktype == CRNG_OP) && + (tok2->token == ctxt->key_andequal)) { + xmlParseCRNG_attribute(ctxt, ctxt->key_combine, NULL, + BAD_CAST "interleave"); + } else { + ERROR("expecting \"=\" or \"&=\" or \"|=\" here") + return(-1); + } + xmlParseCRNGDropTokens(ctxt, 2); + + define = xmlNewNodeEatName(NULL, (xmlChar *) ctxt->key_define); + if (define == NULL) CRNG_MEM_ERROR0(); + define->properties = ctxt->attrs; + ctxt->attrs = NULL; + xmlSetProp(define, BAD_CAST "name", identifier); + if (ctxt->insert != NULL) + xmlAddChild(ctxt->insert, define); + ctxt->insert = define; + xmlParseCRNG_pattern(ctxt); + } else { + return(-1); + } + ctxt->insert = insert; + return(0); +} + +/** + * xmlParseCRNG_grammar: + * @ctxt: a compact RNG parser context + * + * Parse grammar of the RELAX NG Compact Syntax Appendix A + * + * Returns 0 in case of success and -1 in case of error + */ +static int +xmlParseCRNG_grammar(xmlCRelaxNGParserCtxtPtr ctxt ATTRIBUTE_UNUSED) +{ + tokenPtr token; + int ret; + + token = xmlParseCRNGGetToken(ctxt, 1); + while (token != NULL) { + ret = xmlParseCRNG_component(ctxt); + if (ret != 0) + break; + token = xmlParseCRNGGetToken(ctxt, 1); + } + return(0); +} + +/** + * xmlParseCRNG_topLevelBody: + * @ctxt: a compact RNG parser context + * + * Parse topLevelBody of the RELAX NG Compact Syntax Appendix A + * + * Returns 0 in case of success and -1 in case of error + */ +static int +xmlParseCRNG_topLevelBody(xmlCRelaxNGParserCtxtPtr ctxt) +{ + tokenPtr token, tok2; + + token = xmlParseCRNGGetToken(ctxt, 1); + if (token->toktype == CRNG_KEYWORD) { + if ((token->token == ctxt->key_start) || + (token->token == ctxt->key_include) || + (token->token == ctxt->key_div)) { + xmlNodePtr grammar; + + grammar = xmlNewNodeEatName(NULL, (xmlChar *) ctxt->key_grammar); + if (grammar == NULL) CRNG_MEM_ERROR0(); + xmlDocSetRootElement(ctxt->doc, grammar); + ctxt->insert = grammar; + + xmlParseCRNG_grammar(ctxt); + } else { + xmlParseCRNG_pattern(ctxt); + } + } else { + tok2 = xmlParseCRNGGetToken(ctxt, 2); + if ((tok2->toktype == CRNG_OP) && + ((tok2->token == ctxt->key_equal) || + (tok2->token == ctxt->key_orequal) || + (tok2->token == ctxt->key_andequal))) { + xmlNodePtr grammar; + + grammar = xmlNewNodeEatName(NULL, (xmlChar *) ctxt->key_grammar); + if (grammar == NULL) CRNG_MEM_ERROR0(); + xmlDocSetRootElement(ctxt->doc, grammar); + ctxt->insert = grammar; + + xmlParseCRNG_grammar(ctxt); + } else { + xmlParseCRNG_pattern(ctxt); + } + } + return(0); +} + +/** + * xmlParseCRNG_namespacePrefix: + * @ctxt: a compact RNG parser context + * + * Parse namespacePrefix of the RELAX NG Compact Syntax Appendix A + * + * Returns the prefix or NULL in case of error + */ +static const xmlChar * +xmlParseCRNG_namespacePrefix(xmlCRelaxNGParserCtxtPtr ctxt) +{ + tokenPtr token; + const xmlChar *prefix = NULL; + + token = xmlParseCRNGGetToken(ctxt, 1); + if (token->toktype == CRNG_IDENTIFIER) { + prefix = token->token; + } else if (token->toktype == CRNG_OP) { + if ((token->token[0] == '=') && (token->token[1] == 0)) + return(NULL); + prefix = token->token; + } else { + ERROR("Expecting a namespace prefix"); + return(NULL); + } + xmlParseCRNGDropTokens(ctxt, 1); + + if (xmlStrEqual(prefix, BAD_CAST "xmlns")) { + ERROR("Namespace prefix \"xmlns\" is forbidden"); + } + return(prefix); +} + +/** + * xmlParseCRNG_decl: + * @ctxt: a compact RNG parser context + * + * Parse decl of the RELAX NG Compact Syntax Appendix A + * + * Returns 0 in case of success and -1 in case of error + */ +static int +xmlParseCRNG_decl(xmlCRelaxNGParserCtxtPtr ctxt) +{ + const xmlChar *prefix = NULL; + const xmlChar *namespace = NULL; + tokenPtr token; + + token = xmlParseCRNGGetToken(ctxt, 1); + if (token->toktype != CRNG_KEYWORD) return(-1); + if (token->token == ctxt->key_default) { + xmlParseCRNGDropTokens(ctxt, 1); + token = xmlParseCRNGGetToken(ctxt, 1); + if ((token->toktype != CRNG_KEYWORD) || + (token->token != ctxt->key_namespace)) { + ERROR("Expecting keyword \"namespace\" after \"default\""); + } + xmlParseCRNGDropTokens(ctxt, 1); + prefix = xmlParseCRNG_namespacePrefix(ctxt); + token = xmlParseCRNGGetToken(ctxt, 1); + if ((token->toktype != CRNG_OP) || + (token->token[0] != '=') || (token->token[1] != 0)) { + ERROR("Expecting keyword \"=\" here"); + } + xmlParseCRNGDropTokens(ctxt, 1); + token = xmlParseCRNGGetToken(ctxt, 1); + if ((token->toktype == CRNG_KEYWORD) && + (token->token == ctxt->key_inherit)) { + namespace = xmlCRelaxNGInherit; + } else if (token->toktype == CRNG_LITERAL_SEGMENT) { + namespace = token->token; + } else { + ERROR("Expecting an URI or \"inherit\" value"); + } + xmlParseCRNGDropTokens(ctxt, 1); + if (namespace != NULL) { + if (prefix != NULL) + xmlParseCRNG_bindPrefix(ctxt, prefix, namespace); + xmlParseCRNG_bindPrefix(ctxt, NULL, namespace); + } + } else if (token->token == ctxt->key_namespace) { + xmlParseCRNGDropTokens(ctxt, 1); + prefix = xmlParseCRNG_namespacePrefix(ctxt); + token = xmlParseCRNGGetToken(ctxt, 1); + if ((token->toktype != CRNG_OP) || + (token->token[0] != '=') || (token->token[1] != 0)) { + ERROR("Expecting keyword \"=\" here"); + } + xmlParseCRNGDropTokens(ctxt, 1); + token = xmlParseCRNGGetToken(ctxt, 1); + if ((token->toktype == CRNG_KEYWORD) && + (token->token == ctxt->key_inherit)) { + namespace = xmlCRelaxNGInherit; + } else if (token->toktype == CRNG_LITERAL_SEGMENT) { + namespace = token->token; + } else { + ERROR("Expecting an URI or \"inherit\" value"); + } + xmlParseCRNGDropTokens(ctxt, 1); + if (namespace != NULL) + xmlParseCRNG_bindPrefix(ctxt, prefix, namespace); + } else if (token->token == ctxt->key_datatypes) { + xmlParseCRNGDropTokens(ctxt, 1); + + token = xmlParseCRNGGetToken(ctxt, 1); + if ((token->toktype != CRNG_KEYWORD) && + (token->toktype != CRNG_IDENTIFIER)) { + ERROR("Expecting a datatype prefix identifier here"); + } else + prefix = token->token; + xmlParseCRNGDropTokens(ctxt, 1); + token = xmlParseCRNGGetToken(ctxt, 1); + if ((token->toktype != CRNG_OP) || + (token->token[0] != '=') || (token->token[1] != 0)) { + ERROR("Expecting keyword \"=\" here"); + } + xmlParseCRNGDropTokens(ctxt, 1); + token = xmlParseCRNGGetToken(ctxt, 1); + if (token->toktype == CRNG_LITERAL_SEGMENT) { + namespace = token->token; + } else { + ERROR("Expecting a literal value for the datatype identifier"); + } + xmlParseCRNGDropTokens(ctxt, 1); + if ((namespace != NULL) && (prefix != NULL)) + xmlParseCRNG_bindDatatypePrefix(ctxt, prefix, namespace); + } + + return(0); +} + +/** + * xmlParseCRNG_preamble: + * @ctxt: a compact RNG parser context + * + * Parse preamble of the RELAX NG Compact Syntax Appendix A + * + * Returns 0 in case of success and -1 in case of error + */ +static int +xmlParseCRNG_preamble(xmlCRelaxNGParserCtxtPtr ctxt) +{ + tokenPtr token; + + token = xmlParseCRNGGetToken(ctxt, 1); + while (token != NULL) { + if (token == NULL) return(-1); + if ((token->toktype == CRNG_KEYWORD) && + ((token->token == ctxt->key_default) || + (token->token == ctxt->key_namespace) || + (token->token == ctxt->key_datatypes))) { + xmlParseCRNG_decl(ctxt); + } else + break; + token = xmlParseCRNGGetToken(ctxt, 1); + } + return(0); +} + +/** + * xmlParseCRNG_topLevel: + * @ctxt: a compact RNG parser context + * + * Parse topLevel of the RELAX NG Compact Syntax Appendix A + * + * Returns 0 in case of success and -1 in case of error + */ +static int +xmlParseCRNG_topLevel(xmlCRelaxNGParserCtxtPtr ctxt) +{ + xmlParseCRNG_preamble(ctxt); + xmlParseCRNG_topLevelBody(ctxt); + return(0); +} + +/** + * xmlConvertCRNG: + * @schemas: pointer to the text of the compact schemas + * @len: length of the schemas in bytes (or 0) + * @encoding: encoding indicated by the context or NULL + * + * Compiles the schemas into the equivalent Relax-NG XML structure + * + * Returns the xmlDocPtr resulting from the compilation or + * NULL in case of error + */ +xmlDocPtr +xmlConvertCRNG(const char *schemas, int len, const char *encoding) { + struct _xmlCRelaxNGParserCtxt ctxt; + xmlDocPtr ret = NULL; + + if (schemas == NULL) return(NULL); + if (len <= 5) len = xmlStrlen((const unsigned char *) schemas); + if (len <= 0) return(NULL); + + memset(&ctxt, 0, sizeof(ctxt)); + ctxt.compact = (const unsigned char *) schemas; + ctxt.cur = (const unsigned char *) schemas; + ctxt.end = (const unsigned char *) &schemas[len]; + ctxt.dict = xmlDictCreate(); + if (ctxt.dict == NULL) + return(NULL); + ctxt.doc = xmlNewDoc(NULL); + if (ctxt.doc == NULL) { + xmlDictFree(ctxt.dict); + return(NULL); + } + ctxt.doc->dict = ctxt.dict; + xmlDictReference(ctxt.dict); + + ctxt.nbTokens = 0; + ctxt.firstToken = 0; + ctxt.key_attribute = xmlDictLookup(ctxt.dict, BAD_CAST "attribute", -1); + ctxt.key_default = xmlDictLookup(ctxt.dict, BAD_CAST "default", -1); + ctxt.key_datatypes = xmlDictLookup(ctxt.dict, BAD_CAST "datatypes", -1); + ctxt.key_div = xmlDictLookup(ctxt.dict, BAD_CAST "div", -1); + ctxt.key_element = xmlDictLookup(ctxt.dict, BAD_CAST "element", -1); + ctxt.key_empty = xmlDictLookup(ctxt.dict, BAD_CAST "empty", -1); + ctxt.key_external = xmlDictLookup(ctxt.dict, BAD_CAST "external", -1); + ctxt.key_grammar = xmlDictLookup(ctxt.dict, BAD_CAST "grammar", -1); + ctxt.key_include = xmlDictLookup(ctxt.dict, BAD_CAST "include", -1); + ctxt.key_inherit = xmlDictLookup(ctxt.dict, BAD_CAST "inherit", -1); + ctxt.key_list = xmlDictLookup(ctxt.dict, BAD_CAST "list", -1); + ctxt.key_mixed = xmlDictLookup(ctxt.dict, BAD_CAST "mixed", -1); + ctxt.key_namespace = xmlDictLookup(ctxt.dict, BAD_CAST "namespace", -1); + ctxt.key_notAllowed = xmlDictLookup(ctxt.dict, BAD_CAST "notAllowed", -1); + ctxt.key_parent = xmlDictLookup(ctxt.dict, BAD_CAST "parent", -1); + ctxt.key_start = xmlDictLookup(ctxt.dict, BAD_CAST "start", -1); + ctxt.key_string = xmlDictLookup(ctxt.dict, BAD_CAST "string", -1); + ctxt.key_text = xmlDictLookup(ctxt.dict, BAD_CAST "text", -1); + ctxt.key_token = xmlDictLookup(ctxt.dict, BAD_CAST "token", -1); + ctxt.key_equal = xmlDictLookup(ctxt.dict, BAD_CAST "=", 1); + ctxt.key_orequal = xmlDictLookup(ctxt.dict, BAD_CAST "|=", 2); + ctxt.key_andequal = xmlDictLookup(ctxt.dict, BAD_CAST "&=", 2); + ctxt.key_combine = xmlDictLookup(ctxt.dict, BAD_CAST "&=", 2); + ctxt.key_or = xmlDictLookup(ctxt.dict, BAD_CAST "|", 1); + ctxt.key_comma = xmlDictLookup(ctxt.dict, BAD_CAST ",", 1); + ctxt.key_and = xmlDictLookup(ctxt.dict, BAD_CAST "&", 1); + ctxt.key_choice = xmlDictLookup(ctxt.dict, BAD_CAST "choice", -1); + ctxt.key_group = xmlDictLookup(ctxt.dict, BAD_CAST "group", -1); + ctxt.key_interleave = xmlDictLookup(ctxt.dict, BAD_CAST "interleave", -1); + ctxt.key_ref = xmlDictLookup(ctxt.dict, BAD_CAST "ref", 3); + ctxt.key_define = xmlDictLookup(ctxt.dict, BAD_CAST "define", 6); + + /* xmlConvertCRNGTokenize(&ctxt); */ + xmlConvertCRNG_topLevel(&ctxt); + + xmlDictFree(ctxt.dict); + + ret = ctxt.doc; + return(ret); +} + +/** + * xmlConvertCRNGFile: + * @URL: URL or filename for the resource + * @encoding: encoding indicated by the context or NULL + * + * Compiles the schemas into the equivalent Relax-NG XML structure + * + * Returns the xmlDocPtr resulting from the compilation or + * NULL in case of error + */ +xmlDocPtr +xmlConvertCRNGFile(const char *URL, const char *encoding) { +} + +#ifdef STANDALONE +const xmlChar *schemas = +"# RELAX NG XML syntax specified in compact syntax.\n\ +\n\ +default namespace rng = \"http://relaxng.org/ns/structure/1.0\"\n\ +namespace local = \"\"\n\ +datatypes xsd = \"http://www.w3.org/2001/XMLSchema-datatypes\"\n\ +\n\ +start = pattern\n\ +\n\ +pattern =\n\ + element element { (nameQName | nameClass), (common & pattern+) }\n\ + | element attribute { (nameQName | nameClass), (common & pattern?) }\n\ + | element group|interleave|choice|optional\n\ + |zeroOrMore|oneOrMore|list|mixed { common & pattern+ }\n\ + | element ref|parentRef { nameNCName, common }\n\ + | element empty|notAllowed|text { common }\n\ + | element data { type, param*, (common & exceptPattern?) }\n\ + | element value { commonAttributes, type?, xsd:string }\n\ + | element externalRef { href, common }\n\ + | element grammar { common & grammarContent* }\n\ +\n\ +param = element param { commonAttributes, nameNCName, xsd:string }\n\ +\n\ +exceptPattern = element except { common & pattern+ }\n\ +\n\ +grammarContent =\n\ + definition\n\ + | element div { common & grammarContent* }\n\ + | element include { href, (common & includeContent*) }\n\ +\n\ +includeContent =\n\ + definition\n\ + | element div { common & includeContent* }\n\ +\n\ +definition =\n\ + element start { combine?, (common & pattern+) }\n\ + | element define { nameNCName, combine?, (common & pattern+) }\n\ +\n\ +combine = attribute combine { \"choice\" | \"interleave\" }\n\ +\n\ +nameClass =\n\ + element name { commonAttributes, xsd:QName }\n\ + | element anyName { common & exceptNameClass? }\n\ + | element nsName { common & exceptNameClass? }\n\ + | element choice { common & nameClass+ }\n\ +\n\ +exceptNameClass = element except { common & nameClass+ }\n\ +\n\ +nameQName = attribute name { xsd:QName }\n\ +nameNCName = attribute name { xsd:NCName }\n\ +href = attribute href { xsd:anyURI }\n\ +type = attribute type { xsd:NCName }\n\ +\n\ +common = commonAttributes, foreignElement*\n\ +\n\ +commonAttributes =\n\ + attribute ns { xsd:string }?,\n\ + attribute datatypeLibrary { xsd:anyURI }?,\n\ + foreignAttribute*\n\ +\n\ +foreignElement = element * - rng:* { (anyAttribute | text | anyElement)* }\n\ +foreignAttribute = attribute * - (rng:*|local:*) { text }\n\ +anyElement = element * { (anyAttribute | text | anyElement)* }\n\ +anyAttribute = attribute * { text }\n\ +"; + +int main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) { + xmlDocPtr res; + + res = xmlConvertCRNG(schemas, -1); + if (res != NULL) { + xmlDocFormatDump(stdout, res, 1); + xmlFreeDoc(res); + } + return(0); +} +#endif +#define bottom_rngparser +#include "elfgcchack.h" diff --git a/runsuite.c b/runsuite.c new file mode 100644 index 0000000..aaab13e --- /dev/null +++ b/runsuite.c @@ -0,0 +1,1172 @@ +/* + * runsuite.c: C program to run libxml2 againts published testsuites + * + * See Copyright for the status of this software. + * + * daniel@veillard.com + */ + +#include "libxml.h" +#include + +#if !defined(_WIN32) || defined(__CYGWIN__) +#include +#endif +#include +#include +#include +#include + +#include +#include +#include +#include +#if defined(LIBXML_SCHEMAS_ENABLED) && defined(LIBXML_XPATH_ENABLED) +#include + +#include +#include + +#include +#include +#include + +#define LOGFILE "runsuite.log" +static FILE *logfile = NULL; +static int verbose = 0; + + +/************************************************************************ + * * + * File name and path utilities * + * * + ************************************************************************/ + +static int checkTestFile(const char *filename) { + struct stat buf; + + if (stat(filename, &buf) == -1) + return(0); + +#if defined(_WIN32) && !defined(__CYGWIN__) + if (!(buf.st_mode & _S_IFREG)) + return(0); +#else + if (!S_ISREG(buf.st_mode)) + return(0); +#endif + + return(1); +} + +static xmlChar *composeDir(const xmlChar *dir, const xmlChar *path) { + char buf[500]; + + if (dir == NULL) return(xmlStrdup(path)); + if (path == NULL) return(NULL); + + snprintf(buf, 500, "%s/%s", (const char *) dir, (const char *) path); + return(xmlStrdup((const xmlChar *) buf)); +} + +/************************************************************************ + * * + * Libxml2 specific routines * + * * + ************************************************************************/ + +static int nb_tests = 0; +static int nb_errors = 0; +static int nb_internals = 0; +static int nb_schematas = 0; +static int nb_unimplemented = 0; +static int nb_leaks = 0; +static int extraMemoryFromResolver = 0; + +static int +fatalError(void) { + fprintf(stderr, "Exitting tests on fatal error\n"); + exit(1); +} + +/* + * that's needed to implement + */ +#define MAX_ENTITIES 20 +static char *testEntitiesName[MAX_ENTITIES]; +static char *testEntitiesValue[MAX_ENTITIES]; +static int nb_entities = 0; +static void resetEntities(void) { + int i; + + for (i = 0;i < nb_entities;i++) { + if (testEntitiesName[i] != NULL) + xmlFree(testEntitiesName[i]); + if (testEntitiesValue[i] != NULL) + xmlFree(testEntitiesValue[i]); + } + nb_entities = 0; +} +static int addEntity(char *name, char *content) { + if (nb_entities >= MAX_ENTITIES) { + fprintf(stderr, "Too many entities defined\n"); + return(-1); + } + testEntitiesName[nb_entities] = name; + testEntitiesValue[nb_entities] = content; + nb_entities++; + return(0); +} + +/* + * We need to trap calls to the resolver to not account memory for the catalog + * which is shared to the current running test. We also don't want to have + * network downloads modifying tests. + */ +static xmlParserInputPtr +testExternalEntityLoader(const char *URL, const char *ID, + xmlParserCtxtPtr ctxt) { + xmlParserInputPtr ret; + int i; + + for (i = 0;i < nb_entities;i++) { + if (!strcmp(testEntitiesName[i], URL)) { + ret = xmlNewStringInputStream(ctxt, + (const xmlChar *) testEntitiesValue[i]); + if (ret != NULL) { + ret->filename = (const char *) + xmlStrdup((xmlChar *)testEntitiesName[i]); + } + return(ret); + } + } + if (checkTestFile(URL)) { + ret = xmlNoNetExternalEntityLoader(URL, ID, ctxt); + } else { + int memused = xmlMemUsed(); + ret = xmlNoNetExternalEntityLoader(URL, ID, ctxt); + extraMemoryFromResolver += xmlMemUsed() - memused; + } +#if 0 + if (ret == NULL) { + fprintf(stderr, "Failed to find resource %s\n", URL); + } +#endif + + return(ret); +} + +/* + * Trapping the error messages at the generic level to grab the equivalent of + * stderr messages on CLI tools. + */ +static char testErrors[32769]; +static int testErrorsSize = 0; + +static void test_log(const char *msg, ...) { + va_list args; + if (logfile != NULL) { + fprintf(logfile, "\n------------\n"); + va_start(args, msg); + vfprintf(logfile, msg, args); + va_end(args); + fprintf(logfile, "%s", testErrors); + testErrorsSize = 0; testErrors[0] = 0; + } + if (verbose) { + va_start(args, msg); + vfprintf(stderr, msg, args); + va_end(args); + } +} + +static void +testErrorHandler(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...) { + va_list args; + int res; + + if (testErrorsSize >= 32768) + return; + va_start(args, msg); + res = vsnprintf(&testErrors[testErrorsSize], + 32768 - testErrorsSize, + msg, args); + va_end(args); + if (testErrorsSize + res >= 32768) { + /* buffer is full */ + testErrorsSize = 32768; + testErrors[testErrorsSize] = 0; + } else { + testErrorsSize += res; + } + testErrors[testErrorsSize] = 0; +} + +static xmlXPathContextPtr ctxtXPath; + +static void +initializeLibxml2(void) { + xmlGetWarningsDefaultValue = 0; + xmlPedanticParserDefault(0); + + xmlMemSetup(xmlMemFree, xmlMemMalloc, xmlMemRealloc, xmlMemoryStrdup); + xmlInitParser(); + xmlSetExternalEntityLoader(testExternalEntityLoader); + ctxtXPath = xmlXPathNewContext(NULL); + /* + * Deactivate the cache if created; otherwise we have to create/free it + * for every test, since it will confuse the memory leak detection. + * Note that normally this need not be done, since the cache is not + * created until set explicitely with xmlXPathContextSetCache(); + * but for test purposes it is sometimes usefull to activate the + * cache by default for the whole library. + */ + if (ctxtXPath->cache != NULL) + xmlXPathContextSetCache(ctxtXPath, 0, -1, 0); + /* used as default nanemspace in xstc tests */ + xmlXPathRegisterNs(ctxtXPath, BAD_CAST "ts", BAD_CAST "TestSuite"); + xmlXPathRegisterNs(ctxtXPath, BAD_CAST "xlink", + BAD_CAST "http://www.w3.org/1999/xlink"); + xmlSetGenericErrorFunc(NULL, testErrorHandler); +#ifdef LIBXML_SCHEMAS_ENABLED + xmlSchemaInitTypes(); + xmlRelaxNGInitTypes(); +#endif +} + +static xmlNodePtr +getNext(xmlNodePtr cur, const char *xpath) { + xmlNodePtr ret = NULL; + xmlXPathObjectPtr res; + xmlXPathCompExprPtr comp; + + if ((cur == NULL) || (cur->doc == NULL) || (xpath == NULL)) + return(NULL); + ctxtXPath->doc = cur->doc; + ctxtXPath->node = cur; + comp = xmlXPathCompile(BAD_CAST xpath); + if (comp == NULL) { + fprintf(stderr, "Failed to compile %s\n", xpath); + return(NULL); + } + res = xmlXPathCompiledEval(comp, ctxtXPath); + xmlXPathFreeCompExpr(comp); + if (res == NULL) + return(NULL); + if ((res->type == XPATH_NODESET) && + (res->nodesetval != NULL) && + (res->nodesetval->nodeNr > 0) && + (res->nodesetval->nodeTab != NULL)) + ret = res->nodesetval->nodeTab[0]; + xmlXPathFreeObject(res); + return(ret); +} + +static xmlChar * +getString(xmlNodePtr cur, const char *xpath) { + xmlChar *ret = NULL; + xmlXPathObjectPtr res; + xmlXPathCompExprPtr comp; + + if ((cur == NULL) || (cur->doc == NULL) || (xpath == NULL)) + return(NULL); + ctxtXPath->doc = cur->doc; + ctxtXPath->node = cur; + comp = xmlXPathCompile(BAD_CAST xpath); + if (comp == NULL) { + fprintf(stderr, "Failed to compile %s\n", xpath); + return(NULL); + } + res = xmlXPathCompiledEval(comp, ctxtXPath); + xmlXPathFreeCompExpr(comp); + if (res == NULL) + return(NULL); + if (res->type == XPATH_STRING) { + ret = res->stringval; + res->stringval = NULL; + } + xmlXPathFreeObject(res); + return(ret); +} + +/************************************************************************ + * * + * Test test/xsdtest/xsdtestsuite.xml * + * * + ************************************************************************/ + +static int +xsdIncorectTestCase(xmlNodePtr cur) { + xmlNodePtr test; + xmlBufferPtr buf; + xmlRelaxNGParserCtxtPtr pctxt; + xmlRelaxNGPtr rng = NULL; + int ret = 0, memt; + + cur = getNext(cur, "./incorrect[1]"); + if (cur == NULL) { + return(0); + } + + test = getNext(cur, "./*"); + if (test == NULL) { + test_log("Failed to find test in correct line %ld\n", + xmlGetLineNo(cur)); + return(1); + } + + memt = xmlMemUsed(); + extraMemoryFromResolver = 0; + /* + * dump the schemas to a buffer, then reparse it and compile the schemas + */ + buf = xmlBufferCreate(); + if (buf == NULL) { + fprintf(stderr, "out of memory !\n"); + fatalError(); + } + xmlNodeDump(buf, test->doc, test, 0, 0); + pctxt = xmlRelaxNGNewMemParserCtxt((const char *)buf->content, buf->use); + xmlRelaxNGSetParserErrors(pctxt, + (xmlRelaxNGValidityErrorFunc) testErrorHandler, + (xmlRelaxNGValidityWarningFunc) testErrorHandler, + pctxt); + rng = xmlRelaxNGParse(pctxt); + xmlRelaxNGFreeParserCtxt(pctxt); + if (rng != NULL) { + test_log("Failed to detect incorect RNG line %ld\n", + xmlGetLineNo(test)); + ret = 1; + goto done; + } + +done: + if (buf != NULL) + xmlBufferFree(buf); + if (rng != NULL) + xmlRelaxNGFree(rng); + xmlResetLastError(); + if ((memt < xmlMemUsed()) && (extraMemoryFromResolver == 0)) { + test_log("Validation of tests starting line %ld leaked %d\n", + xmlGetLineNo(cur), xmlMemUsed() - memt); + nb_leaks++; + } + return(ret); +} + +static void +installResources(xmlNodePtr tst, const xmlChar *base) { + xmlNodePtr test; + xmlBufferPtr buf; + xmlChar *name, *content, *res; + + buf = xmlBufferCreate(); + if (buf == NULL) { + fprintf(stderr, "out of memory !\n"); + fatalError(); + } + xmlNodeDump(buf, tst->doc, tst, 0, 0); + + while (tst != NULL) { + test = getNext(tst, "./*"); + if (test != NULL) { + xmlBufferEmpty(buf); + xmlNodeDump(buf, test->doc, test, 0, 0); + name = getString(tst, "string(@name)"); + content = xmlStrdup(buf->content); + if ((name != NULL) && (content != NULL)) { + res = composeDir(base, name); + xmlFree(name); + addEntity((char *) res, (char *) content); + } else { + if (name != NULL) xmlFree(name); + if (content != NULL) xmlFree(content); + } + } + tst = getNext(tst, "following-sibling::resource[1]"); + } + if (buf != NULL) + xmlBufferFree(buf); +} + +static void +installDirs(xmlNodePtr tst, const xmlChar *base) { + xmlNodePtr test; + xmlChar *name, *res; + + name = getString(tst, "string(@name)"); + if (name == NULL) + return; + res = composeDir(base, name); + xmlFree(name); + if (res == NULL) { + return; + } + /* Now process resources and subdir recursively */ + test = getNext(tst, "./resource[1]"); + if (test != NULL) { + installResources(test, res); + } + test = getNext(tst, "./dir[1]"); + while (test != NULL) { + installDirs(test, res); + test = getNext(test, "following-sibling::dir[1]"); + } + xmlFree(res); +} + +static int +xsdTestCase(xmlNodePtr tst) { + xmlNodePtr test, tmp, cur; + xmlBufferPtr buf; + xmlDocPtr doc = NULL; + xmlRelaxNGParserCtxtPtr pctxt; + xmlRelaxNGValidCtxtPtr ctxt; + xmlRelaxNGPtr rng = NULL; + int ret = 0, mem, memt; + xmlChar *dtd; + + resetEntities(); + testErrorsSize = 0; testErrors[0] = 0; + + tmp = getNext(tst, "./dir[1]"); + if (tmp != NULL) { + installDirs(tmp, NULL); + } + tmp = getNext(tst, "./resource[1]"); + if (tmp != NULL) { + installResources(tmp, NULL); + } + + cur = getNext(tst, "./correct[1]"); + if (cur == NULL) { + return(xsdIncorectTestCase(tst)); + } + + test = getNext(cur, "./*"); + if (test == NULL) { + fprintf(stderr, "Failed to find test in correct line %ld\n", + xmlGetLineNo(cur)); + return(1); + } + + memt = xmlMemUsed(); + extraMemoryFromResolver = 0; + /* + * dump the schemas to a buffer, then reparse it and compile the schemas + */ + buf = xmlBufferCreate(); + if (buf == NULL) { + fprintf(stderr, "out of memory !\n"); + fatalError(); + } + xmlNodeDump(buf, test->doc, test, 0, 0); + pctxt = xmlRelaxNGNewMemParserCtxt((const char *)buf->content, buf->use); + xmlRelaxNGSetParserErrors(pctxt, + (xmlRelaxNGValidityErrorFunc) testErrorHandler, + (xmlRelaxNGValidityWarningFunc) testErrorHandler, + pctxt); + rng = xmlRelaxNGParse(pctxt); + xmlRelaxNGFreeParserCtxt(pctxt); + if (extraMemoryFromResolver) + memt = 0; + + if (rng == NULL) { + test_log("Failed to parse RNGtest line %ld\n", + xmlGetLineNo(test)); + nb_errors++; + ret = 1; + goto done; + } + /* + * now scan all the siblings of correct to process the tests + */ + tmp = getNext(cur, "following-sibling::valid[1]"); + while (tmp != NULL) { + dtd = xmlGetProp(tmp, BAD_CAST "dtd"); + test = getNext(tmp, "./*"); + if (test == NULL) { + fprintf(stderr, "Failed to find test in line %ld\n", + xmlGetLineNo(tmp)); + + } else { + xmlBufferEmpty(buf); + if (dtd != NULL) + xmlBufferAdd(buf, dtd, -1); + xmlNodeDump(buf, test->doc, test, 0, 0); + + /* + * We are ready to run the test + */ + mem = xmlMemUsed(); + extraMemoryFromResolver = 0; + doc = xmlReadMemory((const char *)buf->content, buf->use, + "test", NULL, 0); + if (doc == NULL) { + test_log("Failed to parse valid instance line %ld\n", + xmlGetLineNo(tmp)); + nb_errors++; + } else { + nb_tests++; + ctxt = xmlRelaxNGNewValidCtxt(rng); + xmlRelaxNGSetValidErrors(ctxt, + (xmlRelaxNGValidityErrorFunc) testErrorHandler, + (xmlRelaxNGValidityWarningFunc) testErrorHandler, + ctxt); + ret = xmlRelaxNGValidateDoc(ctxt, doc); + xmlRelaxNGFreeValidCtxt(ctxt); + if (ret > 0) { + test_log("Failed to validate valid instance line %ld\n", + xmlGetLineNo(tmp)); + nb_errors++; + } else if (ret < 0) { + test_log("Internal error validating instance line %ld\n", + xmlGetLineNo(tmp)); + nb_errors++; + } + xmlFreeDoc(doc); + } + xmlResetLastError(); + if ((mem != xmlMemUsed()) && (extraMemoryFromResolver == 0)) { + test_log("Validation of instance line %ld leaked %d\n", + xmlGetLineNo(tmp), xmlMemUsed() - mem); + xmlMemoryDump(); + nb_leaks++; + } + } + if (dtd != NULL) + xmlFree(dtd); + tmp = getNext(tmp, "following-sibling::valid[1]"); + } + /* + * now scan all the siblings of correct to process the tests + */ + tmp = getNext(cur, "following-sibling::invalid[1]"); + while (tmp != NULL) { + test = getNext(tmp, "./*"); + if (test == NULL) { + fprintf(stderr, "Failed to find test in line %ld\n", + xmlGetLineNo(tmp)); + + } else { + xmlBufferEmpty(buf); + xmlNodeDump(buf, test->doc, test, 0, 0); + + /* + * We are ready to run the test + */ + mem = xmlMemUsed(); + extraMemoryFromResolver = 0; + doc = xmlReadMemory((const char *)buf->content, buf->use, + "test", NULL, 0); + if (doc == NULL) { + test_log("Failed to parse valid instance line %ld\n", + xmlGetLineNo(tmp)); + nb_errors++; + } else { + nb_tests++; + ctxt = xmlRelaxNGNewValidCtxt(rng); + xmlRelaxNGSetValidErrors(ctxt, + (xmlRelaxNGValidityErrorFunc) testErrorHandler, + (xmlRelaxNGValidityWarningFunc) testErrorHandler, + ctxt); + ret = xmlRelaxNGValidateDoc(ctxt, doc); + xmlRelaxNGFreeValidCtxt(ctxt); + if (ret == 0) { + test_log("Failed to detect invalid instance line %ld\n", + xmlGetLineNo(tmp)); + nb_errors++; + } else if (ret < 0) { + test_log("Internal error validating instance line %ld\n", + xmlGetLineNo(tmp)); + nb_errors++; + } + xmlFreeDoc(doc); + } + xmlResetLastError(); + if ((mem != xmlMemUsed()) && (extraMemoryFromResolver == 0)) { + test_log("Validation of instance line %ld leaked %d\n", + xmlGetLineNo(tmp), xmlMemUsed() - mem); + xmlMemoryDump(); + nb_leaks++; + } + } + tmp = getNext(tmp, "following-sibling::invalid[1]"); + } + +done: + if (buf != NULL) + xmlBufferFree(buf); + if (rng != NULL) + xmlRelaxNGFree(rng); + xmlResetLastError(); + if ((memt != xmlMemUsed()) && (memt != 0)) { + test_log("Validation of tests starting line %ld leaked %d\n", + xmlGetLineNo(cur), xmlMemUsed() - memt); + nb_leaks++; + } + return(ret); +} + +static int +xsdTestSuite(xmlNodePtr cur) { + if (verbose) { + xmlChar *doc = getString(cur, "string(documentation)"); + + if (doc != NULL) { + printf("Suite %s\n", doc); + xmlFree(doc); + } + } + cur = getNext(cur, "./testCase[1]"); + while (cur != NULL) { + xsdTestCase(cur); + cur = getNext(cur, "following-sibling::testCase[1]"); + } + + return(0); +} + +static int +xsdTest(void) { + xmlDocPtr doc; + xmlNodePtr cur; + const char *filename = "test/xsdtest/xsdtestsuite.xml"; + int ret = 0; + + doc = xmlReadFile(filename, NULL, XML_PARSE_NOENT); + if (doc == NULL) { + fprintf(stderr, "Failed to parse %s\n", filename); + return(-1); + } + printf("## XML Schemas datatypes test suite from James Clark\n"); + + cur = xmlDocGetRootElement(doc); + if ((cur == NULL) || (!xmlStrEqual(cur->name, BAD_CAST "testSuite"))) { + fprintf(stderr, "Unexpected format %s\n", filename); + ret = -1; + goto done; + } + + cur = getNext(cur, "./testSuite[1]"); + if ((cur == NULL) || (!xmlStrEqual(cur->name, BAD_CAST "testSuite"))) { + fprintf(stderr, "Unexpected format %s\n", filename); + ret = -1; + goto done; + } + while (cur != NULL) { + xsdTestSuite(cur); + cur = getNext(cur, "following-sibling::testSuite[1]"); + } + +done: + if (doc != NULL) + xmlFreeDoc(doc); + return(ret); +} + +static int +rngTestSuite(xmlNodePtr cur) { + if (verbose) { + xmlChar *doc = getString(cur, "string(documentation)"); + + if (doc != NULL) { + printf("Suite %s\n", doc); + xmlFree(doc); + } else { + doc = getString(cur, "string(section)"); + if (doc != NULL) { + printf("Section %s\n", doc); + xmlFree(doc); + } + } + } + cur = getNext(cur, "./testSuite[1]"); + while (cur != NULL) { + xsdTestSuite(cur); + cur = getNext(cur, "following-sibling::testSuite[1]"); + } + + return(0); +} + +static int +rngTest1(void) { + xmlDocPtr doc; + xmlNodePtr cur; + const char *filename = "test/relaxng/OASIS/spectest.xml"; + int ret = 0; + + doc = xmlReadFile(filename, NULL, XML_PARSE_NOENT); + if (doc == NULL) { + fprintf(stderr, "Failed to parse %s\n", filename); + return(-1); + } + printf("## Relax NG test suite from James Clark\n"); + + cur = xmlDocGetRootElement(doc); + if ((cur == NULL) || (!xmlStrEqual(cur->name, BAD_CAST "testSuite"))) { + fprintf(stderr, "Unexpected format %s\n", filename); + ret = -1; + goto done; + } + + cur = getNext(cur, "./testSuite[1]"); + if ((cur == NULL) || (!xmlStrEqual(cur->name, BAD_CAST "testSuite"))) { + fprintf(stderr, "Unexpected format %s\n", filename); + ret = -1; + goto done; + } + while (cur != NULL) { + rngTestSuite(cur); + cur = getNext(cur, "following-sibling::testSuite[1]"); + } + +done: + if (doc != NULL) + xmlFreeDoc(doc); + return(ret); +} + +static int +rngTest2(void) { + xmlDocPtr doc; + xmlNodePtr cur; + const char *filename = "test/relaxng/testsuite.xml"; + int ret = 0; + + doc = xmlReadFile(filename, NULL, XML_PARSE_NOENT); + if (doc == NULL) { + fprintf(stderr, "Failed to parse %s\n", filename); + return(-1); + } + printf("## Relax NG test suite for libxml2\n"); + + cur = xmlDocGetRootElement(doc); + if ((cur == NULL) || (!xmlStrEqual(cur->name, BAD_CAST "testSuite"))) { + fprintf(stderr, "Unexpected format %s\n", filename); + ret = -1; + goto done; + } + + cur = getNext(cur, "./testSuite[1]"); + if ((cur == NULL) || (!xmlStrEqual(cur->name, BAD_CAST "testSuite"))) { + fprintf(stderr, "Unexpected format %s\n", filename); + ret = -1; + goto done; + } + while (cur != NULL) { + xsdTestSuite(cur); + cur = getNext(cur, "following-sibling::testSuite[1]"); + } + +done: + if (doc != NULL) + xmlFreeDoc(doc); + return(ret); +} + +/************************************************************************ + * * + * Schemas test suites from W3C/NIST/MS/Sun * + * * + ************************************************************************/ + +static int +xstcTestInstance(xmlNodePtr cur, xmlSchemaPtr schemas, + const xmlChar *spath, const char *base) { + xmlChar *href = NULL; + xmlChar *path = NULL; + xmlChar *validity = NULL; + xmlSchemaValidCtxtPtr ctxt = NULL; + xmlDocPtr doc = NULL; + int ret = 0, mem; + + xmlResetLastError(); + testErrorsSize = 0; testErrors[0] = 0; + mem = xmlMemUsed(); + href = getString(cur, + "string(ts:instanceDocument/@xlink:href)"); + if ((href == NULL) || (href[0] == 0)) { + test_log("testGroup line %ld misses href for schemaDocument\n", + xmlGetLineNo(cur)); + ret = -1; + goto done; + } + path = xmlBuildURI(href, BAD_CAST base); + if (path == NULL) { + fprintf(stderr, + "Failed to build path to schemas testGroup line %ld : %s\n", + xmlGetLineNo(cur), href); + ret = -1; + goto done; + } + if (checkTestFile((const char *) path) <= 0) { + test_log("schemas for testGroup line %ld is missing: %s\n", + xmlGetLineNo(cur), path); + ret = -1; + goto done; + } + validity = getString(cur, + "string(ts:expected/@validity)"); + if (validity == NULL) { + fprintf(stderr, "instanceDocument line %ld misses expected validity\n", + xmlGetLineNo(cur)); + ret = -1; + goto done; + } + nb_tests++; + doc = xmlReadFile((const char *) path, NULL, XML_PARSE_NOENT); + if (doc == NULL) { + fprintf(stderr, "instance %s fails to parse\n", path); + ret = -1; + nb_errors++; + goto done; + } + + ctxt = xmlSchemaNewValidCtxt(schemas); + xmlSchemaSetValidErrors(ctxt, + (xmlSchemaValidityErrorFunc) testErrorHandler, + (xmlSchemaValidityWarningFunc) testErrorHandler, + ctxt); + ret = xmlSchemaValidateDoc(ctxt, doc); + + if (xmlStrEqual(validity, BAD_CAST "valid")) { + if (ret > 0) { + test_log("valid instance %s failed to validate against %s\n", + path, spath); + nb_errors++; + } else if (ret < 0) { + test_log("valid instance %s got internal error validating %s\n", + path, spath); + nb_internals++; + nb_errors++; + } + } else if (xmlStrEqual(validity, BAD_CAST "invalid")) { + if (ret == 0) { + test_log("Failed to detect invalid instance %s against %s\n", + path, spath); + nb_errors++; + } + } else { + test_log("instanceDocument line %ld has unexpected validity value%s\n", + xmlGetLineNo(cur), validity); + ret = -1; + goto done; + } + +done: + if (href != NULL) xmlFree(href); + if (path != NULL) xmlFree(path); + if (validity != NULL) xmlFree(validity); + if (ctxt != NULL) xmlSchemaFreeValidCtxt(ctxt); + if (doc != NULL) xmlFreeDoc(doc); + xmlResetLastError(); + if (mem != xmlMemUsed()) { + test_log("Validation of tests starting line %ld leaked %d\n", + xmlGetLineNo(cur), xmlMemUsed() - mem); + nb_leaks++; + } + return(ret); +} + +static int +xstcTestGroup(xmlNodePtr cur, const char *base) { + xmlChar *href = NULL; + xmlChar *path = NULL; + xmlChar *validity = NULL; + xmlSchemaPtr schemas = NULL; + xmlSchemaParserCtxtPtr ctxt; + xmlNodePtr instance; + int ret = 0, mem; + + xmlResetLastError(); + testErrorsSize = 0; testErrors[0] = 0; + mem = xmlMemUsed(); + href = getString(cur, + "string(ts:schemaTest/ts:schemaDocument/@xlink:href)"); + if ((href == NULL) || (href[0] == 0)) { + test_log("testGroup line %ld misses href for schemaDocument\n", + xmlGetLineNo(cur)); + ret = -1; + goto done; + } + path = xmlBuildURI(href, BAD_CAST base); + if (path == NULL) { + test_log("Failed to build path to schemas testGroup line %ld : %s\n", + xmlGetLineNo(cur), href); + ret = -1; + goto done; + } + if (checkTestFile((const char *) path) <= 0) { + test_log("schemas for testGroup line %ld is missing: %s\n", + xmlGetLineNo(cur), path); + ret = -1; + goto done; + } + validity = getString(cur, + "string(ts:schemaTest/ts:expected/@validity)"); + if (validity == NULL) { + test_log("testGroup line %ld misses expected validity\n", + xmlGetLineNo(cur)); + ret = -1; + goto done; + } + nb_tests++; + if (xmlStrEqual(validity, BAD_CAST "valid")) { + nb_schematas++; + ctxt = xmlSchemaNewParserCtxt((const char *) path); + xmlSchemaSetParserErrors(ctxt, + (xmlSchemaValidityErrorFunc) testErrorHandler, + (xmlSchemaValidityWarningFunc) testErrorHandler, + ctxt); + schemas = xmlSchemaParse(ctxt); + xmlSchemaFreeParserCtxt(ctxt); + if (schemas == NULL) { + test_log("valid schemas %s failed to parse\n", + path); + ret = 1; + nb_errors++; + } + if ((ret == 0) && (strstr(testErrors, "nimplemented") != NULL)) { + test_log("valid schemas %s hit an unimplemented block\n", + path); + ret = 1; + nb_unimplemented++; + nb_errors++; + } + instance = getNext(cur, "./ts:instanceTest[1]"); + while (instance != NULL) { + if (schemas != NULL) { + xstcTestInstance(instance, schemas, path, base); + } else { + /* + * We'll automatically mark the instances as failed + * if the schema was broken. + */ + nb_errors++; + } + instance = getNext(instance, + "following-sibling::ts:instanceTest[1]"); + } + } else if (xmlStrEqual(validity, BAD_CAST "invalid")) { + nb_schematas++; + ctxt = xmlSchemaNewParserCtxt((const char *) path); + xmlSchemaSetParserErrors(ctxt, + (xmlSchemaValidityErrorFunc) testErrorHandler, + (xmlSchemaValidityWarningFunc) testErrorHandler, + ctxt); + schemas = xmlSchemaParse(ctxt); + xmlSchemaFreeParserCtxt(ctxt); + if (schemas != NULL) { + test_log("Failed to detect error in schemas %s\n", + path); + nb_errors++; + ret = 1; + } + if ((ret == 0) && (strstr(testErrors, "nimplemented") != NULL)) { + nb_unimplemented++; + test_log("invalid schemas %s hit an unimplemented block\n", + path); + ret = 1; + nb_errors++; + } + } else { + test_log("testGroup line %ld misses unexpected validity value%s\n", + xmlGetLineNo(cur), validity); + ret = -1; + goto done; + } + +done: + if (href != NULL) xmlFree(href); + if (path != NULL) xmlFree(path); + if (validity != NULL) xmlFree(validity); + if (schemas != NULL) xmlSchemaFree(schemas); + xmlResetLastError(); + if ((mem != xmlMemUsed()) && (extraMemoryFromResolver == 0)) { + test_log("Processing test line %ld %s leaked %d\n", + xmlGetLineNo(cur), path, xmlMemUsed() - mem); + nb_leaks++; + } + return(ret); +} + +static int +xstcMetadata(const char *metadata, const char *base) { + xmlDocPtr doc; + xmlNodePtr cur; + xmlChar *contributor; + xmlChar *name; + int ret = 0; + + doc = xmlReadFile(metadata, NULL, XML_PARSE_NOENT); + if (doc == NULL) { + fprintf(stderr, "Failed to parse %s\n", metadata); + return(-1); + } + + cur = xmlDocGetRootElement(doc); + if ((cur == NULL) || (!xmlStrEqual(cur->name, BAD_CAST "testSet"))) { + fprintf(stderr, "Unexpected format %s\n", metadata); + return(-1); + } + contributor = xmlGetProp(cur, BAD_CAST "contributor"); + if (contributor == NULL) { + contributor = xmlStrdup(BAD_CAST "Unknown"); + } + name = xmlGetProp(cur, BAD_CAST "name"); + if (name == NULL) { + name = xmlStrdup(BAD_CAST "Unknown"); + } + printf("## %s test suite for Schemas version %s\n", contributor, name); + xmlFree(contributor); + xmlFree(name); + + cur = getNext(cur, "./ts:testGroup[1]"); + if ((cur == NULL) || (!xmlStrEqual(cur->name, BAD_CAST "testGroup"))) { + fprintf(stderr, "Unexpected format %s\n", metadata); + ret = -1; + goto done; + } + while (cur != NULL) { + xstcTestGroup(cur, base); + cur = getNext(cur, "following-sibling::ts:testGroup[1]"); + } + +done: + xmlFreeDoc(doc); + return(ret); +} + +/************************************************************************ + * * + * The driver for the tests * + * * + ************************************************************************/ + +int +main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) { + int ret = 0; + int old_errors, old_tests, old_leaks; + + logfile = fopen(LOGFILE, "w"); + if (logfile == NULL) { + fprintf(stderr, + "Could not open the log file, running in verbose mode\n"); + verbose = 1; + } + initializeLibxml2(); + + if ((argc >= 2) && (!strcmp(argv[1], "-v"))) + verbose = 1; + + + old_errors = nb_errors; + old_tests = nb_tests; + old_leaks = nb_leaks; + xsdTest(); + if ((nb_errors == old_errors) && (nb_leaks == old_leaks)) + printf("Ran %d tests, no errors\n", nb_tests - old_tests); + else + printf("Ran %d tests, %d errors, %d leaks\n", + nb_tests - old_tests, + nb_errors - old_errors, + nb_leaks - old_leaks); + old_errors = nb_errors; + old_tests = nb_tests; + old_leaks = nb_leaks; + rngTest1(); + if ((nb_errors == old_errors) && (nb_leaks == old_leaks)) + printf("Ran %d tests, no errors\n", nb_tests - old_tests); + else + printf("Ran %d tests, %d errors, %d leaks\n", + nb_tests - old_tests, + nb_errors - old_errors, + nb_leaks - old_leaks); + old_errors = nb_errors; + old_tests = nb_tests; + old_leaks = nb_leaks; + rngTest2(); + if ((nb_errors == old_errors) && (nb_leaks == old_leaks)) + printf("Ran %d tests, no errors\n", nb_tests - old_tests); + else + printf("Ran %d tests, %d errors, %d leaks\n", + nb_tests - old_tests, + nb_errors - old_errors, + nb_leaks - old_leaks); + old_errors = nb_errors; + old_tests = nb_tests; + old_leaks = nb_leaks; + nb_internals = 0; + nb_schematas = 0; + xstcMetadata("xstc/Tests/Metadata/NISTXMLSchemaDatatypes.testSet", + "xstc/Tests/Metadata/"); + if ((nb_errors == old_errors) && (nb_leaks == old_leaks)) + printf("Ran %d tests (%d schemata), no errors\n", + nb_tests - old_tests, nb_schematas); + else + printf("Ran %d tests (%d schemata), %d errors (%d internals), %d leaks\n", + nb_tests - old_tests, + nb_schematas, + nb_errors - old_errors, + nb_internals, + nb_leaks - old_leaks); + old_errors = nb_errors; + old_tests = nb_tests; + old_leaks = nb_leaks; + nb_internals = 0; + nb_schematas = 0; + xstcMetadata("xstc/Tests/Metadata/SunXMLSchema1-0-20020116.testSet", + "xstc/Tests/"); + if ((nb_errors == old_errors) && (nb_leaks == old_leaks)) + printf("Ran %d tests (%d schemata), no errors\n", + nb_tests - old_tests, nb_schematas); + else + printf("Ran %d tests (%d schemata), %d errors (%d internals), %d leaks\n", + nb_tests - old_tests, + nb_schematas, + nb_errors - old_errors, + nb_internals, + nb_leaks - old_leaks); + old_errors = nb_errors; + old_tests = nb_tests; + old_leaks = nb_leaks; + nb_internals = 0; + nb_schematas = 0; + xstcMetadata("xstc/Tests/Metadata/MSXMLSchema1-0-20020116.testSet", + "xstc/Tests/"); + if ((nb_errors == old_errors) && (nb_leaks == old_leaks)) + printf("Ran %d tests (%d schemata), no errors\n", + nb_tests - old_tests, nb_schematas); + else + printf("Ran %d tests (%d schemata), %d errors (%d internals), %d leaks\n", + nb_tests - old_tests, + nb_schematas, + nb_errors - old_errors, + nb_internals, + nb_leaks - old_leaks); + + if ((nb_errors == 0) && (nb_leaks == 0)) { + ret = 0; + printf("Total %d tests, no errors\n", + nb_tests); + } else { + ret = 1; + printf("Total %d tests, %d errors, %d leaks\n", + nb_tests, nb_errors, nb_leaks); + } + xmlXPathFreeContext(ctxtXPath); + xmlCleanupParser(); + xmlMemoryDump(); + + if (logfile != NULL) + fclose(logfile); + return(ret); +} +#else /* !SCHEMAS */ +int +main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) { + fprintf(stderr, "runsuite requires support for schemas and xpath in libxml2\n"); +} +#endif diff --git a/runtest.c b/runtest.c new file mode 100644 index 0000000..bb74d2a --- /dev/null +++ b/runtest.c @@ -0,0 +1,4528 @@ +/* + * runtest.c: C program to run libxml2 regression tests without + * requiring make or Python, and reducing platform dependancies + * to a strict minimum. + * + * To compile on Unixes: + * cc -o runtest `xml2-config --cflags` runtest.c `xml2-config --libs` -lpthread + * + * See Copyright for the status of this software. + * + * daniel@veillard.com + */ + +#include "libxml.h" +#include + +#if !defined(_WIN32) || defined(__CYGWIN__) +#include +#endif +#include +#include +#include +#include + +#include +#include +#include + +#ifdef LIBXML_OUTPUT_ENABLED +#ifdef LIBXML_READER_ENABLED +#include +#endif + +#ifdef LIBXML_XINCLUDE_ENABLED +#include +#endif + +#ifdef LIBXML_XPATH_ENABLED +#include +#include +#ifdef LIBXML_XPTR_ENABLED +#include +#endif +#endif + +#ifdef LIBXML_SCHEMAS_ENABLED +#include +#include +#include +#endif + +#ifdef LIBXML_PATTERN_ENABLED +#include +#endif + +#ifdef LIBXML_C14N_ENABLED +#include +#endif + +#ifdef LIBXML_HTML_ENABLED +#include +#include + +/* + * pseudo flag for the unification of HTML and XML tests + */ +#define XML_PARSE_HTML 1 << 24 +#endif + +#if defined(LIBXML_THREAD_ENABLED) && defined(LIBXML_CATALOG_ENABLED) +#include +#include +#include +#include +#include +#endif + +/* + * O_BINARY is just for Windows compatibility - if it isn't defined + * on this system, avoid any compilation error + */ +#ifdef O_BINARY +#define RD_FLAGS O_RDONLY | O_BINARY +#define WR_FLAGS O_WRONLY | O_CREAT | O_TRUNC | O_BINARY +#else +#define RD_FLAGS O_RDONLY +#define WR_FLAGS O_WRONLY | O_CREAT | O_TRUNC +#endif + +typedef int (*functest) (const char *filename, const char *result, + const char *error, int options); + +typedef struct testDesc testDesc; +typedef testDesc *testDescPtr; +struct testDesc { + const char *desc; /* descripton of the test */ + functest func; /* function implementing the test */ + const char *in; /* glob to path for input files */ + const char *out; /* output directory */ + const char *suffix;/* suffix for output files */ + const char *err; /* suffix for error output files */ + int options; /* parser options for the test */ +}; + +static int update_results = 0; +static int checkTestFile(const char *filename); + +#if defined(_WIN32) && !defined(__CYGWIN__) + +#include +#include + +typedef struct +{ + size_t gl_pathc; /* Count of paths matched so far */ + char **gl_pathv; /* List of matched pathnames. */ + size_t gl_offs; /* Slots to reserve in 'gl_pathv'. */ +} glob_t; + +#define GLOB_DOOFFS 0 +static int glob(const char *pattern, int flags, + int errfunc(const char *epath, int eerrno), + glob_t *pglob) { + glob_t *ret; + WIN32_FIND_DATA FindFileData; + HANDLE hFind; + unsigned int nb_paths = 0; + char directory[500]; + int len; + + if ((pattern == NULL) || (pglob == NULL)) return(-1); + + strncpy(directory, pattern, 499); + for (len = strlen(directory);len >= 0;len--) { + if (directory[len] == '/') { + len++; + directory[len] = 0; + break; + } + } + if (len <= 0) + len = 0; + + + ret = pglob; + memset(ret, 0, sizeof(glob_t)); + + hFind = FindFirstFileA(pattern, &FindFileData); + if (hFind == INVALID_HANDLE_VALUE) + return(0); + nb_paths = 20; + ret->gl_pathv = (char **) malloc(nb_paths * sizeof(char *)); + if (ret->gl_pathv == NULL) { + FindClose(hFind); + return(-1); + } + strncpy(directory + len, FindFileData.cFileName, 499 - len); + ret->gl_pathv[ret->gl_pathc] = strdup(directory); + if (ret->gl_pathv[ret->gl_pathc] == NULL) + goto done; + ret->gl_pathc++; + while(FindNextFileA(hFind, &FindFileData)) { + if (FindFileData.cFileName[0] == '.') + continue; + if (ret->gl_pathc + 2 > nb_paths) { + char **tmp = realloc(ret->gl_pathv, nb_paths * 2 * sizeof(char *)); + if (tmp == NULL) + break; + ret->gl_pathv = tmp; + nb_paths *= 2; + } + strncpy(directory + len, FindFileData.cFileName, 499 - len); + ret->gl_pathv[ret->gl_pathc] = strdup(directory); + if (ret->gl_pathv[ret->gl_pathc] == NULL) + break; + ret->gl_pathc++; + } + ret->gl_pathv[ret->gl_pathc] = NULL; + +done: + FindClose(hFind); + return(0); +} + + + +static void globfree(glob_t *pglob) { + unsigned int i; + if (pglob == NULL) + return; + + for (i = 0;i < pglob->gl_pathc;i++) { + if (pglob->gl_pathv[i] != NULL) + free(pglob->gl_pathv[i]); + } +} + +#else +#include +#endif + +/************************************************************************ + * * + * Libxml2 specific routines * + * * + ************************************************************************/ + +static int nb_tests = 0; +static int nb_errors = 0; +static int nb_leaks = 0; +static int extraMemoryFromResolver = 0; + +static int +fatalError(void) { + fprintf(stderr, "Exitting tests on fatal error\n"); + exit(1); +} + +/* + * We need to trap calls to the resolver to not account memory for the catalog + * which is shared to the current running test. We also don't want to have + * network downloads modifying tests. + */ +static xmlParserInputPtr +testExternalEntityLoader(const char *URL, const char *ID, + xmlParserCtxtPtr ctxt) { + xmlParserInputPtr ret; + + if (checkTestFile(URL)) { + ret = xmlNoNetExternalEntityLoader(URL, ID, ctxt); + } else { + int memused = xmlMemUsed(); + ret = xmlNoNetExternalEntityLoader(URL, ID, ctxt); + extraMemoryFromResolver += xmlMemUsed() - memused; + } + + return(ret); +} + +/* + * Trapping the error messages at the generic level to grab the equivalent of + * stderr messages on CLI tools. + */ +static char testErrors[32769]; +static int testErrorsSize = 0; + +static void XMLCDECL +testErrorHandler(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...) { + va_list args; + int res; + + if (testErrorsSize >= 32768) + return; + va_start(args, msg); + res = vsnprintf(&testErrors[testErrorsSize], + 32768 - testErrorsSize, + msg, args); + va_end(args); + if (testErrorsSize + res >= 32768) { + /* buffer is full */ + testErrorsSize = 32768; + testErrors[testErrorsSize] = 0; + } else { + testErrorsSize += res; + } + testErrors[testErrorsSize] = 0; +} + +static void XMLCDECL +channel(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...) { + va_list args; + int res; + + if (testErrorsSize >= 32768) + return; + va_start(args, msg); + res = vsnprintf(&testErrors[testErrorsSize], + 32768 - testErrorsSize, + msg, args); + va_end(args); + if (testErrorsSize + res >= 32768) { + /* buffer is full */ + testErrorsSize = 32768; + testErrors[testErrorsSize] = 0; + } else { + testErrorsSize += res; + } + testErrors[testErrorsSize] = 0; +} + +/** + * xmlParserPrintFileContext: + * @input: an xmlParserInputPtr input + * + * Displays current context within the input content for error tracking + */ + +static void +xmlParserPrintFileContextInternal(xmlParserInputPtr input , + xmlGenericErrorFunc chanl, void *data ) { + const xmlChar *cur, *base; + unsigned int n, col; /* GCC warns if signed, because compared with sizeof() */ + xmlChar content[81]; /* space for 80 chars + line terminator */ + xmlChar *ctnt; + + if (input == NULL) return; + cur = input->cur; + base = input->base; + /* skip backwards over any end-of-lines */ + while ((cur > base) && ((*(cur) == '\n') || (*(cur) == '\r'))) { + cur--; + } + n = 0; + /* search backwards for beginning-of-line (to max buff size) */ + while ((n++ < (sizeof(content)-1)) && (cur > base) && + (*(cur) != '\n') && (*(cur) != '\r')) + cur--; + if ((*(cur) == '\n') || (*(cur) == '\r')) cur++; + /* calculate the error position in terms of the current position */ + col = input->cur - cur; + /* search forward for end-of-line (to max buff size) */ + n = 0; + ctnt = content; + /* copy selected text to our buffer */ + while ((*cur != 0) && (*(cur) != '\n') && + (*(cur) != '\r') && (n < sizeof(content)-1)) { + *ctnt++ = *cur++; + n++; + } + *ctnt = 0; + /* print out the selected text */ + chanl(data ,"%s\n", content); + /* create blank line with problem pointer */ + n = 0; + ctnt = content; + /* (leave buffer space for pointer + line terminator) */ + while ((nfile; + line = err->line; + code = err->code; + domain = err->domain; + level = err->level; + node = err->node; + if ((domain == XML_FROM_PARSER) || (domain == XML_FROM_HTML) || + (domain == XML_FROM_DTD) || (domain == XML_FROM_NAMESPACE) || + (domain == XML_FROM_IO) || (domain == XML_FROM_VALID)) { + ctxt = err->ctxt; + } + str = err->message; + + if (code == XML_ERR_OK) + return; + + if ((node != NULL) && (node->type == XML_ELEMENT_NODE)) + name = node->name; + + /* + * Maintain the compatibility with the legacy error handling + */ + if (ctxt != NULL) { + input = ctxt->input; + if ((input != NULL) && (input->filename == NULL) && + (ctxt->inputNr > 1)) { + cur = input; + input = ctxt->inputTab[ctxt->inputNr - 2]; + } + if (input != NULL) { + if (input->filename) + channel(data, "%s:%d: ", input->filename, input->line); + else if ((line != 0) && (domain == XML_FROM_PARSER)) + channel(data, "Entity: line %d: ", input->line); + } + } else { + if (file != NULL) + channel(data, "%s:%d: ", file, line); + else if ((line != 0) && (domain == XML_FROM_PARSER)) + channel(data, "Entity: line %d: ", line); + } + if (name != NULL) { + channel(data, "element %s: ", name); + } + if (code == XML_ERR_OK) + return; + switch (domain) { + case XML_FROM_PARSER: + channel(data, "parser "); + break; + case XML_FROM_NAMESPACE: + channel(data, "namespace "); + break; + case XML_FROM_DTD: + case XML_FROM_VALID: + channel(data, "validity "); + break; + case XML_FROM_HTML: + channel(data, "HTML parser "); + break; + case XML_FROM_MEMORY: + channel(data, "memory "); + break; + case XML_FROM_OUTPUT: + channel(data, "output "); + break; + case XML_FROM_IO: + channel(data, "I/O "); + break; + case XML_FROM_XINCLUDE: + channel(data, "XInclude "); + break; + case XML_FROM_XPATH: + channel(data, "XPath "); + break; + case XML_FROM_XPOINTER: + channel(data, "parser "); + break; + case XML_FROM_REGEXP: + channel(data, "regexp "); + break; + case XML_FROM_MODULE: + channel(data, "module "); + break; + case XML_FROM_SCHEMASV: + channel(data, "Schemas validity "); + break; + case XML_FROM_SCHEMASP: + channel(data, "Schemas parser "); + break; + case XML_FROM_RELAXNGP: + channel(data, "Relax-NG parser "); + break; + case XML_FROM_RELAXNGV: + channel(data, "Relax-NG validity "); + break; + case XML_FROM_CATALOG: + channel(data, "Catalog "); + break; + case XML_FROM_C14N: + channel(data, "C14N "); + break; + case XML_FROM_XSLT: + channel(data, "XSLT "); + break; + default: + break; + } + if (code == XML_ERR_OK) + return; + switch (level) { + case XML_ERR_NONE: + channel(data, ": "); + break; + case XML_ERR_WARNING: + channel(data, "warning : "); + break; + case XML_ERR_ERROR: + channel(data, "error : "); + break; + case XML_ERR_FATAL: + channel(data, "error : "); + break; + } + if (code == XML_ERR_OK) + return; + if (str != NULL) { + int len; + len = xmlStrlen((const xmlChar *)str); + if ((len > 0) && (str[len - 1] != '\n')) + channel(data, "%s\n", str); + else + channel(data, "%s", str); + } else { + channel(data, "%s\n", "out of memory error"); + } + if (code == XML_ERR_OK) + return; + + if (ctxt != NULL) { + xmlParserPrintFileContextInternal(input, channel, data); + if (cur != NULL) { + if (cur->filename) + channel(data, "%s:%d: \n", cur->filename, cur->line); + else if ((line != 0) && (domain == XML_FROM_PARSER)) + channel(data, "Entity: line %d: \n", cur->line); + xmlParserPrintFileContextInternal(cur, channel, data); + } + } + if ((domain == XML_FROM_XPATH) && (err->str1 != NULL) && + (err->int1 < 100) && + (err->int1 < xmlStrlen((const xmlChar *)err->str1))) { + xmlChar buf[150]; + int i; + + channel(data, "%s\n", err->str1); + for (i=0;i < err->int1;i++) + buf[i] = ' '; + buf[i++] = '^'; + buf[i] = 0; + channel(data, "%s\n", buf); + } +} + +static void +initializeLibxml2(void) { + xmlGetWarningsDefaultValue = 0; + xmlPedanticParserDefault(0); + + xmlMemSetup(xmlMemFree, xmlMemMalloc, xmlMemRealloc, xmlMemoryStrdup); + xmlInitParser(); + xmlSetExternalEntityLoader(testExternalEntityLoader); + xmlSetStructuredErrorFunc(NULL, testStructuredErrorHandler); +#ifdef LIBXML_SCHEMAS_ENABLED + xmlSchemaInitTypes(); + xmlRelaxNGInitTypes(); +#endif +} + + +/************************************************************************ + * * + * File name and path utilities * + * * + ************************************************************************/ + +static const char *baseFilename(const char *filename) { + const char *cur; + if (filename == NULL) + return(NULL); + cur = &filename[strlen(filename)]; + while ((cur > filename) && (*cur != '/')) + cur--; + if (*cur == '/') + return(cur + 1); + return(cur); +} + +static char *resultFilename(const char *filename, const char *out, + const char *suffix) { + const char *base; + char res[500]; + char suffixbuff[500]; + +/************* + if ((filename[0] == 't') && (filename[1] == 'e') && + (filename[2] == 's') && (filename[3] == 't') && + (filename[4] == '/')) + filename = &filename[5]; + *************/ + + base = baseFilename(filename); + if (suffix == NULL) + suffix = ".tmp"; + if (out == NULL) + out = ""; + + strncpy(suffixbuff,suffix,499); +#ifdef VMS + if(strstr(base,".") && suffixbuff[0]=='.') + suffixbuff[0]='_'; +#endif + + snprintf(res, 499, "%s%s%s", out, base, suffixbuff); + res[499] = 0; + return(strdup(res)); +} + +static int checkTestFile(const char *filename) { + struct stat buf; + + if (stat(filename, &buf) == -1) + return(0); + +#if defined(_WIN32) && !defined(__CYGWIN__) + if (!(buf.st_mode & _S_IFREG)) + return(0); +#else + if (!S_ISREG(buf.st_mode)) + return(0); +#endif + + return(1); +} + +static int compareFiles(const char *r1 /* temp */, const char *r2 /* result */) { + int res1, res2; + int fd1, fd2; + char bytes1[4096]; + char bytes2[4096]; + + if (update_results) { + fd1 = open(r1, RD_FLAGS); + if (fd1 < 0) + return(-1); + fd2 = open(r2, WR_FLAGS, 0644); + if (fd2 < 0) { + close(fd1); + return(-1); + } + do { + res1 = read(fd1, bytes1, 4096); + if (res1 <= 0) + break; + res2 = write(fd2, bytes1, res1); + if (res2 <= 0 || res2 != res1) + break; + } while (1); + close(fd2); + close(fd1); + return(res1 != 0); + } + + fd1 = open(r1, RD_FLAGS); + if (fd1 < 0) + return(-1); + fd2 = open(r2, RD_FLAGS); + if (fd2 < 0) { + close(fd1); + return(-1); + } + while (1) { + res1 = read(fd1, bytes1, 4096); + res2 = read(fd2, bytes2, 4096); + if ((res1 != res2) || (res1 < 0)) { + close(fd1); + close(fd2); + return(1); + } + if (res1 == 0) + break; + if (memcmp(bytes1, bytes2, res1) != 0) { + close(fd1); + close(fd2); + return(1); + } + } + close(fd1); + close(fd2); + return(0); +} + +static int compareFileMem(const char *filename, const char *mem, int size) { + int res; + int fd; + char bytes[4096]; + int idx = 0; + struct stat info; + + if (update_results) { + fd = open(filename, WR_FLAGS, 0644); + if (fd < 0) { + fprintf(stderr, "failed to open %s for writing", filename); + return(-1); + } + res = write(fd, mem, size); + close(fd); + return(res != size); + } + + if (stat(filename, &info) < 0) { + fprintf(stderr, "failed to stat %s\n", filename); + return(-1); + } + if (info.st_size != size) { + fprintf(stderr, "file %s is %ld bytes, result is %d bytes\n", + filename, info.st_size, size); + return(-1); + } + fd = open(filename, RD_FLAGS); + if (fd < 0) { + fprintf(stderr, "failed to open %s for reading", filename); + return(-1); + } + while (idx < size) { + res = read(fd, bytes, 4096); + if (res <= 0) + break; + if (res + idx > size) + break; + if (memcmp(bytes, &mem[idx], res) != 0) { + int ix; + for (ix=0; ix 0) { + siz += res; + } + close(fd); +#if !defined(_WIN32) + if (siz != info.st_size) { + free(base); + return(-1); + } +#endif + base[siz] = 0; + *mem = base; + *size = siz; + return(0); +} + +static int unloadMem(const char *mem) { + free((char *)mem); + return(0); +} + +/************************************************************************ + * * + * Tests implementations * + * * + ************************************************************************/ + +/************************************************************************ + * * + * Parse to SAX based tests * + * * + ************************************************************************/ + +static FILE *SAXdebug = NULL; + +/* + * empty SAX block + */ +static 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 */ +}; + +static xmlSAXHandlerPtr emptySAXHandler = &emptySAXHandlerStruct; +static int callbacks = 0; +static int quiet = 0; + +/** + * 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(SAXdebug, "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(SAXdebug, "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(SAXdebug, "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(SAXdebug, "SAX.internalSubset(%s,", name); + if (ExternalID == NULL) + fprintf(SAXdebug, " ,"); + else + fprintf(SAXdebug, " %s,", ExternalID); + if (SystemID == NULL) + fprintf(SAXdebug, " )\n"); + else + fprintf(SAXdebug, " %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(SAXdebug, "SAX.externalSubset(%s,", name); + if (ExternalID == NULL) + fprintf(SAXdebug, " ,"); + else + fprintf(SAXdebug, " %s,", ExternalID); + if (SystemID == NULL) + fprintf(SAXdebug, " )\n"); + else + fprintf(SAXdebug, " %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(SAXdebug, "SAX.resolveEntity("); + if (publicId != NULL) + fprintf(SAXdebug, "%s", (char *)publicId); + else + fprintf(SAXdebug, " "); + if (systemId != NULL) + fprintf(SAXdebug, ", %s)\n", (char *)systemId); + else + fprintf(SAXdebug, ", )\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(SAXdebug, "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(SAXdebug, "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(SAXdebug, "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(SAXdebug, "SAX.attributeDecl(%s, %s, %d, %d, NULL, ...)\n", + elem, name, type, def); + else + fprintf(SAXdebug, "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(SAXdebug, "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(SAXdebug, "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(SAXdebug, "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(SAXdebug, "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(SAXdebug, "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(SAXdebug, "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(SAXdebug, "SAX.startElement(%s", (char *) name); + if (atts != NULL) { + for (i = 0;(atts[i] != NULL);i++) { + fprintf(SAXdebug, ", %s='", atts[i++]); + if (atts[i] != NULL) + fprintf(SAXdebug, "%s'", atts[i]); + } + } + fprintf(SAXdebug, ")\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(SAXdebug, "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= size) { +#ifdef LIBXML_HTML_ENABLED + if (options & XML_PARSE_HTML) + htmlParseChunk(ctxt, base + cur, size - cur, 1); + else +#endif + xmlParseChunk(ctxt, base + cur, size - cur, 1); + break; + } else { +#ifdef LIBXML_HTML_ENABLED + if (options & XML_PARSE_HTML) + htmlParseChunk(ctxt, base + cur, 1024, 0); + else +#endif + xmlParseChunk(ctxt, base + cur, 1024, 0); + cur += 1024; + } + } while (cur < size); + doc = ctxt->myDoc; +#ifdef LIBXML_HTML_ENABLED + if (options & XML_PARSE_HTML) + res = 1; + else +#endif + res = ctxt->wellFormed; + xmlFreeParserCtxt(ctxt); + free((char *)base); + if (!res) { + xmlFreeDoc(doc); + fprintf(stderr, "Failed to parse %s\n", filename); + return(-1); + } +#ifdef LIBXML_HTML_ENABLED + if (options & XML_PARSE_HTML) + htmlDocDumpMemory(doc, (xmlChar **) &base, &size); + else +#endif + xmlDocDumpMemory(doc, (xmlChar **) &base, &size); + xmlFreeDoc(doc); + res = compareFileMem(result, base, size); + if ((base == NULL) || (res != 0)) { + if (base != NULL) + xmlFree((char *)base); + fprintf(stderr, "Result for %s failed in %s\n", filename, result); + return(-1); + } + xmlFree((char *)base); + if (err != NULL) { + res = compareFileMem(err, testErrors, testErrorsSize); + if (res != 0) { + fprintf(stderr, "Error for %s failed\n", filename); + return(-1); + } + } + return(0); +} +#endif + +/** + * memParseTest: + * @filename: the file to parse + * @result: the file with expected result + * @err: the file with error messages: unused + * + * Parse a file using the old xmlReadMemory API, then serialize back + * reparse the result and serialize again, then check for deviation + * in serialization. + * + * Returns 0 in case of success, an error code otherwise + */ +static int +memParseTest(const char *filename, const char *result, + const char *err ATTRIBUTE_UNUSED, + int options ATTRIBUTE_UNUSED) { + xmlDocPtr doc; + const char *base; + int size, res; + + nb_tests++; + /* + * load and parse the memory + */ + if (loadMem(filename, &base, &size) != 0) { + fprintf(stderr, "Failed to load %s\n", filename); + return(-1); + } + + doc = xmlReadMemory(base, size, filename, NULL, 0); + unloadMem(base); + if (doc == NULL) { + return(1); + } + xmlDocDumpMemory(doc, (xmlChar **) &base, &size); + xmlFreeDoc(doc); + res = compareFileMem(result, base, size); + if ((base == NULL) || (res != 0)) { + if (base != NULL) + xmlFree((char *)base); + fprintf(stderr, "Result for %s failed in %s\n", filename, result); + return(-1); + } + xmlFree((char *)base); + return(0); +} + +/** + * noentParseTest: + * @filename: the file to parse + * @result: the file with expected result + * @err: the file with error messages: unused + * + * Parse a file with entity resolution, then serialize back + * reparse the result and serialize again, then check for deviation + * in serialization. + * + * Returns 0 in case of success, an error code otherwise + */ +static int +noentParseTest(const char *filename, const char *result, + const char *err ATTRIBUTE_UNUSED, + int options) { + xmlDocPtr doc; + char *temp; + int res = 0; + + nb_tests++; + /* + * base of the test, parse with the old API + */ + doc = xmlReadFile(filename, NULL, options); + if (doc == NULL) + return(1); + temp = resultFilename(filename, "", ".res"); + if (temp == NULL) { + fprintf(stderr, "Out of memory\n"); + fatalError(); + } + xmlSaveFile(temp, doc); + if (compareFiles(temp, result)) { + res = 1; + } + xmlFreeDoc(doc); + + /* + * Parse the saved result to make sure the round trip is okay + */ + doc = xmlReadFile(filename, NULL, options); + if (doc == NULL) + return(1); + xmlSaveFile(temp, doc); + if (compareFiles(temp, result)) { + res = 1; + } + xmlFreeDoc(doc); + + if (temp != NULL) { + unlink(temp); + free(temp); + } + return(res); +} + +/** + * errParseTest: + * @filename: the file to parse + * @result: the file with expected result + * @err: the file with error messages + * + * Parse a file using the xmlReadFile API and check for errors. + * + * Returns 0 in case of success, an error code otherwise + */ +static int +errParseTest(const char *filename, const char *result, const char *err, + int options) { + xmlDocPtr doc; + const char *base = NULL; + int size, res = 0; + + nb_tests++; +#ifdef LIBXML_HTML_ENABLED + if (options & XML_PARSE_HTML) { + doc = htmlReadFile(filename, NULL, options); + } else +#endif +#ifdef LIBXML_XINCLUDE_ENABLED + if (options & XML_PARSE_XINCLUDE) { + doc = xmlReadFile(filename, NULL, options); + xmlXIncludeProcessFlags(doc, options); + } else +#endif + { + xmlGetWarningsDefaultValue = 1; + doc = xmlReadFile(filename, NULL, options); + } + xmlGetWarningsDefaultValue = 0; + if (result) { + if (doc == NULL) { + base = ""; + size = 0; + } else { +#ifdef LIBXML_HTML_ENABLED + if (options & XML_PARSE_HTML) { + htmlDocDumpMemory(doc, (xmlChar **) &base, &size); + } else +#endif + xmlDocDumpMemory(doc, (xmlChar **) &base, &size); + } + res = compareFileMem(result, base, size); + if (res != 0) { + fprintf(stderr, "Result for %s failed in %s\n", filename, result); + return(-1); + } + } + if (doc != NULL) { + if (base != NULL) + xmlFree((char *)base); + xmlFreeDoc(doc); + } + if (err != NULL) { + res = compareFileMem(err, testErrors, testErrorsSize); + if (res != 0) { + fprintf(stderr, "Error for %s failed\n", filename); + return(-1); + } + } else if (options & XML_PARSE_DTDVALID) { + if (testErrorsSize != 0) + fprintf(stderr, "Validation for %s failed\n", filename); + } + + return(0); +} + +#ifdef LIBXML_READER_ENABLED +/************************************************************************ + * * + * Reader based tests * + * * + ************************************************************************/ + +static void processNode(FILE *out, xmlTextReaderPtr reader) { + const xmlChar *name, *value; + int type, empty; + + type = xmlTextReaderNodeType(reader); + empty = xmlTextReaderIsEmptyElement(reader); + + name = xmlTextReaderConstName(reader); + if (name == NULL) + name = BAD_CAST "--"; + + value = xmlTextReaderConstValue(reader); + + + fprintf(out, "%d %d %s %d %d", + xmlTextReaderDepth(reader), + type, + name, + empty, + xmlTextReaderHasValue(reader)); + if (value == NULL) + fprintf(out, "\n"); + else { + fprintf(out, " %s\n", value); + } +} +static int +streamProcessTest(const char *filename, const char *result, const char *err, + xmlTextReaderPtr reader, const char *rng, int options) { + int ret; + char *temp = NULL; + FILE *t = NULL; + + if (reader == NULL) + return(-1); + + nb_tests++; + if (result != NULL) { + temp = resultFilename(filename, "", ".res"); + if (temp == NULL) { + fprintf(stderr, "Out of memory\n"); + fatalError(); + } + t = fopen(temp, "wb"); + if (t == NULL) { + fprintf(stderr, "Can't open temp file %s\n", temp); + free(temp); + return(-1); + } + } +#ifdef LIBXML_SCHEMAS_ENABLED + if (rng != NULL) { + ret = xmlTextReaderRelaxNGValidate(reader, rng); + if (ret < 0) { + testErrorHandler(NULL, "Relax-NG schema %s failed to compile\n", + rng); + fclose(t); + if (temp != NULL) { + unlink(temp); + free(temp); + } + return(0); + } + } +#endif + xmlGetWarningsDefaultValue = 1; + ret = xmlTextReaderRead(reader); + while (ret == 1) { + if ((t != NULL) && (rng == NULL)) + processNode(t, reader); + ret = xmlTextReaderRead(reader); + } + if (ret != 0) { + testErrorHandler(NULL, "%s : failed to parse\n", filename); + } + if (rng != NULL) { + if (xmlTextReaderIsValid(reader) != 1) { + testErrorHandler(NULL, "%s fails to validate\n", filename); + } else { + testErrorHandler(NULL, "%s validates\n", filename); + } + } + xmlGetWarningsDefaultValue = 0; + if (t != NULL) { + fclose(t); + ret = compareFiles(temp, result); + if (temp != NULL) { + unlink(temp); + free(temp); + } + if (ret) { + fprintf(stderr, "Result for %s failed in %s\n", filename, result); + return(-1); + } + } + if (err != NULL) { + ret = compareFileMem(err, testErrors, testErrorsSize); + if (ret != 0) { + fprintf(stderr, "Error for %s failed\n", filename); + printf("%s", testErrors); + return(-1); + } + } + + return(0); +} + +/** + * streamParseTest: + * @filename: the file to parse + * @result: the file with expected result + * @err: the file with error messages + * + * Parse a file using the reader API and check for errors. + * + * Returns 0 in case of success, an error code otherwise + */ +static int +streamParseTest(const char *filename, const char *result, const char *err, + int options) { + xmlTextReaderPtr reader; + int ret; + + reader = xmlReaderForFile(filename, NULL, options); + ret = streamProcessTest(filename, result, err, reader, NULL, options); + xmlFreeTextReader(reader); + return(ret); +} + +/** + * walkerParseTest: + * @filename: the file to parse + * @result: the file with expected result + * @err: the file with error messages + * + * Parse a file using the walker, i.e. a reader built from a atree. + * + * Returns 0 in case of success, an error code otherwise + */ +static int +walkerParseTest(const char *filename, const char *result, const char *err, + int options) { + xmlDocPtr doc; + xmlTextReaderPtr reader; + int ret; + + doc = xmlReadFile(filename, NULL, options); + if (doc == NULL) { + fprintf(stderr, "Failed to parse %s\n", filename); + return(-1); + } + reader = xmlReaderWalker(doc); + ret = streamProcessTest(filename, result, err, reader, NULL, options); + xmlFreeTextReader(reader); + xmlFreeDoc(doc); + return(ret); +} + +/** + * streamMemParseTest: + * @filename: the file to parse + * @result: the file with expected result + * @err: the file with error messages + * + * Parse a file using the reader API from memory and check for errors. + * + * Returns 0 in case of success, an error code otherwise + */ +static int +streamMemParseTest(const char *filename, const char *result, const char *err, + int options) { + xmlTextReaderPtr reader; + int ret; + const char *base; + int size; + + /* + * load and parse the memory + */ + if (loadMem(filename, &base, &size) != 0) { + fprintf(stderr, "Failed to load %s\n", filename); + return(-1); + } + reader = xmlReaderForMemory(base, size, filename, NULL, options); + ret = streamProcessTest(filename, result, err, reader, NULL, options); + free((char *)base); + xmlFreeTextReader(reader); + return(ret); +} +#endif + +#ifdef LIBXML_XPATH_ENABLED +#ifdef LIBXML_DEBUG_ENABLED +/************************************************************************ + * * + * XPath and XPointer based tests * + * * + ************************************************************************/ + +static FILE *xpathOutput; +static xmlDocPtr xpathDocument; + +static void +testXPath(const char *str, int xptr, int expr) { + xmlXPathObjectPtr res; + xmlXPathContextPtr ctxt; + + nb_tests++; +#if defined(LIBXML_XPTR_ENABLED) + if (xptr) { + ctxt = xmlXPtrNewContext(xpathDocument, NULL, NULL); + res = xmlXPtrEval(BAD_CAST str, ctxt); + } else { +#endif + ctxt = xmlXPathNewContext(xpathDocument); + ctxt->node = xmlDocGetRootElement(xpathDocument); + 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) { + res = xmlXPathCompiledEval(comp, ctxt); + xmlXPathFreeCompExpr(comp); + } else + res = NULL; + } +#if defined(LIBXML_XPTR_ENABLED) + } +#endif + xmlXPathDebugDumpObject(xpathOutput, res, 0); + xmlXPathFreeObject(res); + xmlXPathFreeContext(ctxt); +} + +/** + * xpathExprTest: + * @filename: the file to parse + * @result: the file with expected result + * @err: the file with error messages + * + * Parse a file containing XPath standalone expressions and evaluate them + * + * Returns 0 in case of success, an error code otherwise + */ +static int +xpathCommonTest(const char *filename, const char *result, + int xptr, int expr) { + FILE *input; + char expression[5000]; + int len, ret = 0; + char *temp; + + temp = resultFilename(filename, "", ".res"); + if (temp == NULL) { + fprintf(stderr, "Out of memory\n"); + fatalError(); + } + xpathOutput = fopen(temp, "wb"); + if (xpathOutput == NULL) { + fprintf(stderr, "failed to open output file %s\n", temp); + free(temp); + return(-1); + } + + input = fopen(filename, "rb"); + if (input == NULL) { + xmlGenericError(xmlGenericErrorContext, + "Cannot open %s for reading\n", filename); + free(temp); + return(-1); + } + 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) { + fprintf(xpathOutput, + "\n========================\nExpression: %s\n", + expression) ; + testXPath(expression, xptr, expr); + } + } + + fclose(input); + fclose(xpathOutput); + if (result != NULL) { + ret = compareFiles(temp, result); + if (ret) { + fprintf(stderr, "Result for %s failed in %s\n", filename, result); + } + } + + if (temp != NULL) { + unlink(temp); + free(temp); + } + return(ret); +} + +/** + * xpathExprTest: + * @filename: the file to parse + * @result: the file with expected result + * @err: the file with error messages + * + * Parse a file containing XPath standalone expressions and evaluate them + * + * Returns 0 in case of success, an error code otherwise + */ +static int +xpathExprTest(const char *filename, const char *result, + const char *err ATTRIBUTE_UNUSED, + int options ATTRIBUTE_UNUSED) { + return(xpathCommonTest(filename, result, 0, 1)); +} + +/** + * xpathDocTest: + * @filename: the file to parse + * @result: the file with expected result + * @err: the file with error messages + * + * Parse a file containing XPath expressions and evaluate them against + * a set of corresponding documents. + * + * Returns 0 in case of success, an error code otherwise + */ +static int +xpathDocTest(const char *filename, + const char *resul ATTRIBUTE_UNUSED, + const char *err ATTRIBUTE_UNUSED, + int options) { + + char pattern[500]; + char result[500]; + glob_t globbuf; + size_t i; + int ret = 0, res; + + xpathDocument = xmlReadFile(filename, NULL, + options | XML_PARSE_DTDATTR | XML_PARSE_NOENT); + if (xpathDocument == NULL) { + fprintf(stderr, "Failed to load %s\n", filename); + return(-1); + } + + snprintf(pattern, 499, "./test/XPath/tests/%s*", baseFilename(filename)); + pattern[499] = 0; + globbuf.gl_offs = 0; + glob(pattern, GLOB_DOOFFS, NULL, &globbuf); + for (i = 0;i < globbuf.gl_pathc;i++) { + snprintf(result, 499, "result/XPath/tests/%s", + baseFilename(globbuf.gl_pathv[i])); + res = xpathCommonTest(globbuf.gl_pathv[i], &result[0], 0, 0); + if (res != 0) + ret = res; + } + globfree(&globbuf); + + xmlFreeDoc(xpathDocument); + return(ret); +} + +#ifdef LIBXML_XPTR_ENABLED +/** + * xptrDocTest: + * @filename: the file to parse + * @result: the file with expected result + * @err: the file with error messages + * + * Parse a file containing XPath expressions and evaluate them against + * a set of corresponding documents. + * + * Returns 0 in case of success, an error code otherwise + */ +static int +xptrDocTest(const char *filename, + const char *resul ATTRIBUTE_UNUSED, + const char *err ATTRIBUTE_UNUSED, + int options) { + + char pattern[500]; + char result[500]; + glob_t globbuf; + size_t i; + int ret = 0, res; + + xpathDocument = xmlReadFile(filename, NULL, + options | XML_PARSE_DTDATTR | XML_PARSE_NOENT); + if (xpathDocument == NULL) { + fprintf(stderr, "Failed to load %s\n", filename); + return(-1); + } + + snprintf(pattern, 499, "./test/XPath/xptr/%s*", baseFilename(filename)); + pattern[499] = 0; + globbuf.gl_offs = 0; + glob(pattern, GLOB_DOOFFS, NULL, &globbuf); + for (i = 0;i < globbuf.gl_pathc;i++) { + snprintf(result, 499, "result/XPath/xptr/%s", + baseFilename(globbuf.gl_pathv[i])); + res = xpathCommonTest(globbuf.gl_pathv[i], &result[0], 1, 0); + if (res != 0) + ret = res; + } + globfree(&globbuf); + + xmlFreeDoc(xpathDocument); + return(ret); +} +#endif /* LIBXML_XPTR_ENABLED */ + +/** + * xmlidDocTest: + * @filename: the file to parse + * @result: the file with expected result + * @err: the file with error messages + * + * Parse a file containing xml:id and check for errors and verify + * that XPath queries will work on them as expected. + * + * Returns 0 in case of success, an error code otherwise + */ +static int +xmlidDocTest(const char *filename, + const char *result, + const char *err, + int options) { + + int res = 0; + int ret = 0; + char *temp; + + xpathDocument = xmlReadFile(filename, NULL, + options | XML_PARSE_DTDATTR | XML_PARSE_NOENT); + if (xpathDocument == NULL) { + fprintf(stderr, "Failed to load %s\n", filename); + return(-1); + } + + temp = resultFilename(filename, "", ".res"); + if (temp == NULL) { + fprintf(stderr, "Out of memory\n"); + fatalError(); + } + xpathOutput = fopen(temp, "wb"); + if (xpathOutput == NULL) { + fprintf(stderr, "failed to open output file %s\n", temp); + xmlFreeDoc(xpathDocument); + free(temp); + return(-1); + } + + testXPath("id('bar')", 0, 0); + + fclose(xpathOutput); + if (result != NULL) { + ret = compareFiles(temp, result); + if (ret) { + fprintf(stderr, "Result for %s failed in %s\n", filename, result); + res = 1; + } + } + + if (temp != NULL) { + unlink(temp); + free(temp); + } + xmlFreeDoc(xpathDocument); + + if (err != NULL) { + ret = compareFileMem(err, testErrors, testErrorsSize); + if (ret != 0) { + fprintf(stderr, "Error for %s failed\n", filename); + res = 1; + } + } + return(res); +} + +#endif /* LIBXML_DEBUG_ENABLED */ +#endif /* XPATH */ +/************************************************************************ + * * + * URI based tests * + * * + ************************************************************************/ + +static void +handleURI(const char *str, const char *base, FILE *o) { + int ret; + xmlURIPtr uri; + xmlChar *res = NULL; + + uri = xmlCreateURI(); + + if (base == NULL) { + ret = xmlParseURIReference(uri, str); + if (ret != 0) + fprintf(o, "%s : error %d\n", str, ret); + else { + xmlNormalizeURIPath(uri->path); + xmlPrintURI(o, uri); + fprintf(o, "\n"); + } + } else { + res = xmlBuildURI((xmlChar *)str, (xmlChar *) base); + if (res != NULL) { + fprintf(o, "%s\n", (char *) res); + } + else + fprintf(o, "::ERROR::\n"); + } + if (res != NULL) + xmlFree(res); + xmlFreeURI(uri); +} + +/** + * uriCommonTest: + * @filename: the file to parse + * @result: the file with expected result + * @err: the file with error messages + * + * Parse a file containing URI and check for errors + * + * Returns 0 in case of success, an error code otherwise + */ +static int +uriCommonTest(const char *filename, + const char *result, + const char *err, + const char *base) { + char *temp; + FILE *o, *f; + char str[1024]; + int res = 0, i, ret; + + temp = resultFilename(filename, "", ".res"); + if (temp == NULL) { + fprintf(stderr, "Out of memory\n"); + fatalError(); + } + o = fopen(temp, "wb"); + if (o == NULL) { + fprintf(stderr, "failed to open output file %s\n", temp); + free(temp); + return(-1); + } + f = fopen(filename, "rb"); + if (f == NULL) { + fprintf(stderr, "failed to open input file %s\n", filename); + fclose(o); + if (temp != NULL) { + unlink(temp); + free(temp); + } + return(-1); + } + + while (1) { + /* + * read one line in string buffer. + */ + if (fgets (&str[0], sizeof (str) - 1, f) == 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; + } + nb_tests++; + handleURI(str, base, o); + } + + fclose(f); + fclose(o); + + if (result != NULL) { + ret = compareFiles(temp, result); + if (ret) { + fprintf(stderr, "Result for %s failed in %s\n", filename, result); + res = 1; + } + } + if (err != NULL) { + ret = compareFileMem(err, testErrors, testErrorsSize); + if (ret != 0) { + fprintf(stderr, "Error for %s failed\n", filename); + res = 1; + } + } + + if (temp != NULL) { + unlink(temp); + free(temp); + } + return(res); +} + +/** + * uriParseTest: + * @filename: the file to parse + * @result: the file with expected result + * @err: the file with error messages + * + * Parse a file containing URI and check for errors + * + * Returns 0 in case of success, an error code otherwise + */ +static int +uriParseTest(const char *filename, + const char *result, + const char *err, + int options ATTRIBUTE_UNUSED) { + return(uriCommonTest(filename, result, err, NULL)); +} + +/** + * uriBaseTest: + * @filename: the file to parse + * @result: the file with expected result + * @err: the file with error messages + * + * Parse a file containing URI, compose them against a fixed base and + * check for errors + * + * Returns 0 in case of success, an error code otherwise + */ +static int +uriBaseTest(const char *filename, + const char *result, + const char *err, + int options ATTRIBUTE_UNUSED) { + return(uriCommonTest(filename, result, err, + "http://foo.com/path/to/index.html?orig#help")); +} + +static int urip_success = 1; +static int urip_current = 0; +static const char *urip_testURLs[] = { + "urip://example.com/a b.html", + "urip://example.com/a%20b.html", + "file:///path/to/a b.html", + "file:///path/to/a%20b.html", + "/path/to/a b.html", + "/path/to/a%20b.html", + "urip://example.com/r" "\xe9" "sum" "\xe9" ".html", + "urip://example.com/test?a=1&b=2%263&c=4#foo", + NULL +}; +static const char *urip_rcvsURLs[] = { + /* it is an URI the strings must be escaped */ + "urip://example.com/a%20b.html", + /* check that % escaping is not broken */ + "urip://example.com/a%20b.html", + /* it's an URI path the strings must be escaped */ + "file:///path/to/a%20b.html", + /* check that % escaping is not broken */ + "file:///path/to/a%20b.html", + /* this is not an URI, this is a path, so this should not be escaped */ + "/path/to/a b.html", + /* check that paths with % are not broken */ + "/path/to/a%20b.html", + /* out of context the encoding can't be guessed byte by byte conversion */ + "urip://example.com/r%E9sum%E9.html", + /* verify we don't destroy URIs especially the query part */ + "urip://example.com/test?a=1&b=2%263&c=4#foo", + NULL +}; +static const char *urip_res = ""; +static const char *urip_cur = NULL; +static int urip_rlen; + +/** + * uripMatch: + * @URI: an URI to test + * + * Check for an urip: query + * + * Returns 1 if yes and 0 if another Input module should be used + */ +static int +uripMatch(const char * URI) { + if ((URI == NULL) || (!strcmp(URI, "file:///etc/xml/catalog"))) + return(0); + /* Verify we received the escaped URL */ + if (strcmp(urip_rcvsURLs[urip_current], URI)) + urip_success = 0; + return(1); +} + +/** + * uripOpen: + * @URI: an URI to test + * + * Return a pointer to the urip: query handler, in this example simply + * the urip_current pointer... + * + * Returns an Input context or NULL in case or error + */ +static void * +uripOpen(const char * URI) { + if ((URI == NULL) || (!strcmp(URI, "file:///etc/xml/catalog"))) + return(NULL); + /* Verify we received the escaped URL */ + if (strcmp(urip_rcvsURLs[urip_current], URI)) + urip_success = 0; + urip_cur = urip_res; + urip_rlen = strlen(urip_res); + return((void *) urip_cur); +} + +/** + * uripClose: + * @context: the read context + * + * Close the urip: query handler + * + * Returns 0 or -1 in case of error + */ +static int +uripClose(void * context) { + if (context == NULL) return(-1); + urip_cur = NULL; + urip_rlen = 0; + return(0); +} + +/** + * uripRead: + * @context: the read context + * @buffer: where to store data + * @len: number of bytes to read + * + * Implement an urip: query read. + * + * Returns the number of bytes read or -1 in case of error + */ +static int +uripRead(void * context, char * buffer, int len) { + const char *ptr = (const char *) context; + + if ((context == NULL) || (buffer == NULL) || (len < 0)) + return(-1); + + if (len > urip_rlen) len = urip_rlen; + memcpy(buffer, ptr, len); + urip_rlen -= len; + return(len); +} + +static int +urip_checkURL(const char *URL) { + xmlDocPtr doc; + + doc = xmlReadFile(URL, NULL, 0); + if (doc == NULL) + return(-1); + xmlFreeDoc(doc); + return(1); +} + +/** + * uriPathTest: + * @filename: ignored + * @result: ignored + * @err: ignored + * + * Run a set of tests to check how Path and URI are handled before + * being passed to the I/O layer + * + * Returns 0 in case of success, an error code otherwise + */ +static int +uriPathTest(const char *filename ATTRIBUTE_UNUSED, + const char *result ATTRIBUTE_UNUSED, + const char *err ATTRIBUTE_UNUSED, + int options ATTRIBUTE_UNUSED) { + int parsed; + int failures = 0; + + /* + * register the new I/O handlers + */ + if (xmlRegisterInputCallbacks(uripMatch, uripOpen, uripRead, uripClose) < 0) + { + fprintf(stderr, "failed to register HTTP handler\n"); + return(-1); + } + + for (urip_current = 0;urip_testURLs[urip_current] != NULL;urip_current++) { + urip_success = 1; + parsed = urip_checkURL(urip_testURLs[urip_current]); + if (urip_success != 1) { + fprintf(stderr, "failed the URL passing test for %s", + urip_testURLs[urip_current]); + failures++; + } else if (parsed != 1) { + fprintf(stderr, "failed the parsing test for %s", + urip_testURLs[urip_current]); + failures++; + } + nb_tests++; + } + + xmlPopInputCallbacks(); + return(failures); +} + +#ifdef LIBXML_SCHEMAS_ENABLED +/************************************************************************ + * * + * Schemas tests * + * * + ************************************************************************/ +static int +schemasOneTest(const char *sch, + const char *filename, + const char *result, + const char *err, + int options, + xmlSchemaPtr schemas) { + xmlDocPtr doc; + xmlSchemaValidCtxtPtr ctxt; + int ret = 0; + int validResult = 0; + char *temp; + FILE *schemasOutput; + + doc = xmlReadFile(filename, NULL, options); + if (doc == NULL) { + fprintf(stderr, "failed to parse instance %s for %s\n", filename, sch); + return(-1); + } + + temp = resultFilename(result, "", ".res"); + if (temp == NULL) { + fprintf(stderr, "Out of memory\n"); + fatalError(); + } + schemasOutput = fopen(temp, "wb"); + if (schemasOutput == NULL) { + fprintf(stderr, "failed to open output file %s\n", temp); + xmlFreeDoc(doc); + free(temp); + return(-1); + } + + ctxt = xmlSchemaNewValidCtxt(schemas); + xmlSchemaSetValidErrors(ctxt, + (xmlSchemaValidityErrorFunc) testErrorHandler, + (xmlSchemaValidityWarningFunc) testErrorHandler, + ctxt); + validResult = xmlSchemaValidateDoc(ctxt, doc); + if (validResult == 0) { + fprintf(schemasOutput, "%s validates\n", filename); + } else if (validResult > 0) { + fprintf(schemasOutput, "%s fails to validate\n", filename); + } else { + fprintf(schemasOutput, "%s validation generated an internal error\n", + filename); + } + fclose(schemasOutput); + if (result) { + if (compareFiles(temp, result)) { + fprintf(stderr, "Result for %s on %s failed\n", filename, sch); + ret = 1; + } + } + if (temp != NULL) { + unlink(temp); + free(temp); + } + + if ((validResult != 0) && (err != NULL)) { + if (compareFileMem(err, testErrors, testErrorsSize)) { + fprintf(stderr, "Error for %s on %s failed\n", filename, sch); + ret = 1; + } + } + + xmlSchemaFreeValidCtxt(ctxt); + xmlFreeDoc(doc); + return(ret); +} +/** + * schemasTest: + * @filename: the schemas file + * @result: the file with expected result + * @err: the file with error messages + * + * Parse a file containing URI, compose them against a fixed base and + * check for errors + * + * Returns 0 in case of success, an error code otherwise + */ +static int +schemasTest(const char *filename, + const char *resul ATTRIBUTE_UNUSED, + const char *errr ATTRIBUTE_UNUSED, + int options) { + const char *base = baseFilename(filename); + const char *base2; + const char *instance; + xmlSchemaParserCtxtPtr ctxt; + xmlSchemaPtr schemas; + int res = 0, len, ret; + char pattern[500]; + char prefix[500]; + char result[500]; + char err[500]; + glob_t globbuf; + size_t i; + char count = 0; + + /* first compile the schemas if possible */ + ctxt = xmlSchemaNewParserCtxt(filename); + xmlSchemaSetParserErrors(ctxt, + (xmlSchemaValidityErrorFunc) testErrorHandler, + (xmlSchemaValidityWarningFunc) testErrorHandler, + ctxt); + schemas = xmlSchemaParse(ctxt); + xmlSchemaFreeParserCtxt(ctxt); + + /* + * most of the mess is about the output filenames generated by the Makefile + */ + len = strlen(base); + if ((len > 499) || (len < 5)) { + xmlSchemaFree(schemas); + return(-1); + } + len -= 4; /* remove trailing .xsd */ + if (base[len - 2] == '_') { + len -= 2; /* remove subtest number */ + } + if (base[len - 2] == '_') { + len -= 2; /* remove subtest number */ + } + memcpy(prefix, base, len); + prefix[len] = 0; + + snprintf(pattern, 499, "./test/schemas/%s_?.xml", prefix); + pattern[499] = 0; + + if (base[len] == '_') { + len += 2; + memcpy(prefix, base, len); + prefix[len] = 0; + } + + globbuf.gl_offs = 0; + glob(pattern, GLOB_DOOFFS, NULL, &globbuf); + for (i = 0;i < globbuf.gl_pathc;i++) { + testErrorsSize = 0; + testErrors[0] = 0; + instance = globbuf.gl_pathv[i]; + base2 = baseFilename(instance); + len = strlen(base2); + if ((len > 6) && (base2[len - 6] == '_')) { + count = base2[len - 5]; + snprintf(result, 499, "result/schemas/%s_%c", + prefix, count); + result[499] = 0; + snprintf(err, 499, "result/schemas/%s_%c.err", + prefix, count); + err[499] = 0; + } else { + fprintf(stderr, "don't know how to process %s\n", instance); + continue; + } + if (schemas == NULL) { + } else { + nb_tests++; + ret = schemasOneTest(filename, instance, result, err, + options, schemas); + if (ret != 0) + res = ret; + } + } + globfree(&globbuf); + xmlSchemaFree(schemas); + + return(res); +} + +/************************************************************************ + * * + * Schemas tests * + * * + ************************************************************************/ +static int +rngOneTest(const char *sch, + const char *filename, + const char *result, + const char *err, + int options, + xmlRelaxNGPtr schemas) { + xmlDocPtr doc; + xmlRelaxNGValidCtxtPtr ctxt; + int ret = 0; + char *temp; + FILE *schemasOutput; + + doc = xmlReadFile(filename, NULL, options); + if (doc == NULL) { + fprintf(stderr, "failed to parse instance %s for %s\n", filename, sch); + return(-1); + } + + temp = resultFilename(result, "", ".res"); + if (temp == NULL) { + fprintf(stderr, "Out of memory\n"); + fatalError(); + } + schemasOutput = fopen(temp, "wb"); + if (schemasOutput == NULL) { + fprintf(stderr, "failed to open output file %s\n", temp); + xmlFreeDoc(doc); + free(temp); + return(-1); + } + + ctxt = xmlRelaxNGNewValidCtxt(schemas); + xmlRelaxNGSetValidErrors(ctxt, + (xmlRelaxNGValidityErrorFunc) testErrorHandler, + (xmlRelaxNGValidityWarningFunc) testErrorHandler, + ctxt); + ret = xmlRelaxNGValidateDoc(ctxt, doc); + if (ret == 0) { + testErrorHandler(NULL, "%s validates\n", filename); + } else if (ret > 0) { + testErrorHandler(NULL, "%s fails to validate\n", filename); + } else { + testErrorHandler(NULL, "%s validation generated an internal error\n", + filename); + } + fclose(schemasOutput); + ret = 0; + if (result) { + if (compareFiles(temp, result)) { + fprintf(stderr, "Result for %s on %s failed\n", filename, sch); + ret = 1; + } + } + if (temp != NULL) { + unlink(temp); + free(temp); + } + + if (err != NULL) { + if (compareFileMem(err, testErrors, testErrorsSize)) { + fprintf(stderr, "Error for %s on %s failed\n", filename, sch); + ret = 1; + printf("%s", testErrors); + } + } + + + xmlRelaxNGFreeValidCtxt(ctxt); + xmlFreeDoc(doc); + return(ret); +} +/** + * rngTest: + * @filename: the schemas file + * @result: the file with expected result + * @err: the file with error messages + * + * Parse an RNG schemas and then apply it to the related .xml + * + * Returns 0 in case of success, an error code otherwise + */ +static int +rngTest(const char *filename, + const char *resul ATTRIBUTE_UNUSED, + const char *errr ATTRIBUTE_UNUSED, + int options) { + const char *base = baseFilename(filename); + const char *base2; + const char *instance; + xmlRelaxNGParserCtxtPtr ctxt; + xmlRelaxNGPtr schemas; + int res = 0, len, ret = 0; + char pattern[500]; + char prefix[500]; + char result[500]; + char err[500]; + glob_t globbuf; + size_t i; + char count = 0; + + /* first compile the schemas if possible */ + ctxt = xmlRelaxNGNewParserCtxt(filename); + xmlRelaxNGSetParserErrors(ctxt, + (xmlRelaxNGValidityErrorFunc) testErrorHandler, + (xmlRelaxNGValidityWarningFunc) testErrorHandler, + ctxt); + schemas = xmlRelaxNGParse(ctxt); + xmlRelaxNGFreeParserCtxt(ctxt); + + /* + * most of the mess is about the output filenames generated by the Makefile + */ + len = strlen(base); + if ((len > 499) || (len < 5)) { + xmlRelaxNGFree(schemas); + return(-1); + } + len -= 4; /* remove trailing .rng */ + memcpy(prefix, base, len); + prefix[len] = 0; + + snprintf(pattern, 499, "./test/relaxng/%s_?.xml", prefix); + pattern[499] = 0; + + globbuf.gl_offs = 0; + glob(pattern, GLOB_DOOFFS, NULL, &globbuf); + for (i = 0;i < globbuf.gl_pathc;i++) { + testErrorsSize = 0; + testErrors[0] = 0; + instance = globbuf.gl_pathv[i]; + base2 = baseFilename(instance); + len = strlen(base2); + if ((len > 6) && (base2[len - 6] == '_')) { + count = base2[len - 5]; + snprintf(result, 499, "result/relaxng/%s_%c", + prefix, count); + result[499] = 0; + snprintf(err, 499, "result/relaxng/%s_%c.err", + prefix, count); + err[499] = 0; + } else { + fprintf(stderr, "don't know how to process %s\n", instance); + continue; + } + if (schemas == NULL) { + } else { + nb_tests++; + ret = rngOneTest(filename, instance, result, err, + options, schemas); + if (res != 0) + ret = res; + } + } + globfree(&globbuf); + xmlRelaxNGFree(schemas); + + return(ret); +} + +#ifdef LIBXML_READER_ENABLED +/** + * rngStreamTest: + * @filename: the schemas file + * @result: the file with expected result + * @err: the file with error messages + * + * Parse a set of files with streaming, applying an RNG schemas + * + * Returns 0 in case of success, an error code otherwise + */ +static int +rngStreamTest(const char *filename, + const char *resul ATTRIBUTE_UNUSED, + const char *errr ATTRIBUTE_UNUSED, + int options) { + const char *base = baseFilename(filename); + const char *base2; + const char *instance; + int res = 0, len, ret; + char pattern[500]; + char prefix[500]; + char result[500]; + char err[500]; + glob_t globbuf; + size_t i; + char count = 0; + xmlTextReaderPtr reader; + int disable_err = 0; + + /* + * most of the mess is about the output filenames generated by the Makefile + */ + len = strlen(base); + if ((len > 499) || (len < 5)) { + fprintf(stderr, "len(base) == %d !\n", len); + return(-1); + } + len -= 4; /* remove trailing .rng */ + memcpy(prefix, base, len); + prefix[len] = 0; + + /* + * strictly unifying the error messages is nearly impossible this + * hack is also done in the Makefile + */ + if ((!strcmp(prefix, "tutor10_1")) || (!strcmp(prefix, "tutor10_2")) || + (!strcmp(prefix, "tutor3_2")) || (!strcmp(prefix, "307377")) || + (!strcmp(prefix, "tutor8_2"))) + disable_err = 1; + + snprintf(pattern, 499, "./test/relaxng/%s_?.xml", prefix); + pattern[499] = 0; + + globbuf.gl_offs = 0; + glob(pattern, GLOB_DOOFFS, NULL, &globbuf); + for (i = 0;i < globbuf.gl_pathc;i++) { + testErrorsSize = 0; + testErrors[0] = 0; + instance = globbuf.gl_pathv[i]; + base2 = baseFilename(instance); + len = strlen(base2); + if ((len > 6) && (base2[len - 6] == '_')) { + count = base2[len - 5]; + snprintf(result, 499, "result/relaxng/%s_%c", + prefix, count); + result[499] = 0; + snprintf(err, 499, "result/relaxng/%s_%c.err", + prefix, count); + err[499] = 0; + } else { + fprintf(stderr, "don't know how to process %s\n", instance); + continue; + } + reader = xmlReaderForFile(instance, NULL, options); + if (reader == NULL) { + fprintf(stderr, "Failed to build reder for %s\n", instance); + } + if (disable_err == 1) + ret = streamProcessTest(instance, result, NULL, reader, filename, + options); + else + ret = streamProcessTest(instance, result, err, reader, filename, + options); + xmlFreeTextReader(reader); + if (ret != 0) { + fprintf(stderr, "instance %s failed\n", instance); + res = ret; + } + } + globfree(&globbuf); + + return(res); +} +#endif /* READER */ + +#endif + +#ifdef LIBXML_PATTERN_ENABLED +#ifdef LIBXML_READER_ENABLED +/************************************************************************ + * * + * Patterns tests * + * * + ************************************************************************/ +static void patternNode(FILE *out, xmlTextReaderPtr reader, + const char *pattern, xmlPatternPtr patternc, + xmlStreamCtxtPtr patstream) { + xmlChar *path = NULL; + int match = -1; + int type, empty; + + type = xmlTextReaderNodeType(reader); + empty = xmlTextReaderIsEmptyElement(reader); + + if (type == XML_READER_TYPE_ELEMENT) { + /* do the check only on element start */ + match = xmlPatternMatch(patternc, xmlTextReaderCurrentNode(reader)); + + if (match) { + path = xmlGetNodePath(xmlTextReaderCurrentNode(reader)); + fprintf(out, "Node %s matches pattern %s\n", path, pattern); + } + } + if (patstream != NULL) { + int ret; + + if (type == XML_READER_TYPE_ELEMENT) { + ret = xmlStreamPush(patstream, + xmlTextReaderConstLocalName(reader), + xmlTextReaderConstNamespaceUri(reader)); + if (ret < 0) { + fprintf(out, "xmlStreamPush() failure\n"); + xmlFreeStreamCtxt(patstream); + patstream = NULL; + } else if (ret != match) { + if (path == NULL) { + path = xmlGetNodePath( + xmlTextReaderCurrentNode(reader)); + } + fprintf(out, + "xmlPatternMatch and xmlStreamPush disagree\n"); + fprintf(out, + " pattern %s node %s\n", + pattern, path); + } + + + } + if ((type == XML_READER_TYPE_END_ELEMENT) || + ((type == XML_READER_TYPE_ELEMENT) && (empty))) { + ret = xmlStreamPop(patstream); + if (ret < 0) { + fprintf(out, "xmlStreamPop() failure\n"); + xmlFreeStreamCtxt(patstream); + patstream = NULL; + } + } + } + if (path != NULL) + xmlFree(path); +} + +/** + * patternTest: + * @filename: the schemas file + * @result: the file with expected result + * @err: the file with error messages + * + * Parse a set of files with streaming, applying an RNG schemas + * + * Returns 0 in case of success, an error code otherwise + */ +static int +patternTest(const char *filename, + const char *resul ATTRIBUTE_UNUSED, + const char *err ATTRIBUTE_UNUSED, + int options) { + xmlPatternPtr patternc = NULL; + xmlStreamCtxtPtr patstream = NULL; + FILE *o, *f; + char str[1024]; + char xml[500]; + char result[500]; + int len, i; + int ret = 0, res; + char *temp; + xmlTextReaderPtr reader; + xmlDocPtr doc; + + len = strlen(filename); + len -= 4; + memcpy(xml, filename, len); + xml[len] = 0; + snprintf(result, 499, "result/pattern/%s", baseFilename(xml)); + result[499] = 0; + memcpy(xml + len, ".xml", 5); + + if (!checkTestFile(xml) && !update_results) { + fprintf(stderr, "Missing xml file %s\n", xml); + return(-1); + } + if (!checkTestFile(result) && !update_results) { + fprintf(stderr, "Missing result file %s\n", result); + return(-1); + } + f = fopen(filename, "rb"); + if (f == NULL) { + fprintf(stderr, "Failed to open %s\n", filename); + return(-1); + } + temp = resultFilename(filename, "", ".res"); + if (temp == NULL) { + fprintf(stderr, "Out of memory\n"); + fatalError(); + } + o = fopen(temp, "wb"); + if (o == NULL) { + fprintf(stderr, "failed to open output file %s\n", temp); + fclose(f); + free(temp); + return(-1); + } + while (1) { + /* + * read one line in string buffer. + */ + if (fgets (&str[0], sizeof (str) - 1, f) == 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; + } + doc = xmlReadFile(xml, NULL, options); + if (doc == NULL) { + fprintf(stderr, "Failed to parse %s\n", xml); + ret = 1; + } else { + xmlNodePtr root; + const xmlChar *namespaces[22]; + int j; + xmlNsPtr ns; + + root = xmlDocGetRootElement(doc); + for (ns = root->nsDef, j = 0;ns != NULL && j < 20;ns=ns->next) { + namespaces[j++] = ns->href; + namespaces[j++] = ns->prefix; + } + namespaces[j++] = NULL; + namespaces[j] = NULL; + + patternc = xmlPatterncompile((const xmlChar *) str, doc->dict, + 0, &namespaces[0]); + if (patternc == NULL) { + testErrorHandler(NULL, + "Pattern %s failed to compile\n", str); + xmlFreeDoc(doc); + ret = 1; + continue; + } + patstream = xmlPatternGetStreamCtxt(patternc); + if (patstream != NULL) { + ret = xmlStreamPush(patstream, NULL, NULL); + if (ret < 0) { + fprintf(stderr, "xmlStreamPush() failure\n"); + xmlFreeStreamCtxt(patstream); + patstream = NULL; + } + } + nb_tests++; + + reader = xmlReaderWalker(doc); + res = xmlTextReaderRead(reader); + while (res == 1) { + patternNode(o, reader, str, patternc, patstream); + res = xmlTextReaderRead(reader); + } + if (res != 0) { + fprintf(o, "%s : failed to parse\n", filename); + } + xmlFreeTextReader(reader); + xmlFreeDoc(doc); + xmlFreeStreamCtxt(patstream); + patstream = NULL; + xmlFreePattern(patternc); + + } + } + + fclose(f); + fclose(o); + + ret = compareFiles(temp, result); + if (ret) { + fprintf(stderr, "Result for %s failed in %s\n", filename, result); + ret = 1; + } + if (temp != NULL) { + unlink(temp); + free(temp); + } + return(ret); +} +#endif /* READER */ +#endif /* PATTERN */ +#ifdef LIBXML_C14N_ENABLED +/************************************************************************ + * * + * Canonicalization tests * + * * + ************************************************************************/ +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 = xmlReadFile(filename, NULL, XML_PARSE_DTDATTR | XML_PARSE_NOENT); + 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); +} + +/* + * Macro used to grow the current buffer. + */ +#define xxx_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++; + } + /* + * 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; + + xxx_growBufferReentrant(); + out = &buffer[indx]; + } + (*out++) = str; + while(*str != ',' && *str != '\0') ++str; + if(*str == ',') *(str++) = '\0'; + } + (*out) = NULL; + return buffer; +} + +static int +c14nRunTest(const char* xml_filename, int with_comments, int mode, + const char* xpath_filename, const char *ns_filename, + const char* result_file) { + xmlDocPtr doc; + xmlXPathObjectPtr xpath = NULL; + xmlChar *result = NULL; + int ret; + xmlChar **inclusive_namespaces = NULL; + const char *nslist = NULL; + int nssize; + + + /* + * 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 = xmlReadFile(xml_filename, NULL, XML_PARSE_DTDATTR | XML_PARSE_NOENT); + if (doc == NULL) { + fprintf(stderr, "Error: unable to parse file \"%s\"\n", xml_filename); + return(-1); + } + + /* + * 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); + } + } + + if (ns_filename != NULL) { + if (loadMem(ns_filename, &nslist, &nssize)) { + fprintf(stderr,"Error: unable to evaluate xpath expression\n"); + if(xpath != NULL) xmlXPathFreeObject(xpath); + xmlFreeDoc(doc); + return(-1); + } + inclusive_namespaces = parse_list((xmlChar *) nslist); + } + + /* + * Canonical form + */ + /* fprintf(stderr,"File \"%s\" loaded: start canonization\n", xml_filename); */ + ret = xmlC14NDocDumpMemory(doc, + (xpath) ? xpath->nodesetval : NULL, + mode, inclusive_namespaces, + with_comments, &result); + if (ret >= 0) { + if(result != NULL) { + if (compareFileMem(result_file, (const char *) result, ret)) { + fprintf(stderr, "Result mismatch for %s\n", xml_filename); + fprintf(stderr, "RESULT:\n%s\n", (const char*)result); + ret = -1; + } + } + } else { + fprintf(stderr,"Error: failed to canonicalize XML file \"%s\" (ret=%d)\n", xml_filename, ret); + ret = -1; + } + + /* + * Cleanup + */ + if (result != NULL) xmlFree(result); + if(xpath != NULL) xmlXPathFreeObject(xpath); + if (inclusive_namespaces != NULL) xmlFree(inclusive_namespaces); + if (nslist != NULL) free((char *) nslist); + xmlFreeDoc(doc); + + return(ret); +} + +static int +c14nCommonTest(const char *filename, int with_comments, int mode, + const char *subdir) { + char buf[500]; + char prefix[500]; + const char *base; + int len; + char *result = NULL; + char *xpath = NULL; + char *ns = NULL; + int ret = 0; + + base = baseFilename(filename); + len = strlen(base); + len -= 4; + memcpy(prefix, base, len); + prefix[len] = 0; + + snprintf(buf, 499, "result/c14n/%s/%s", subdir,prefix); + if (!checkTestFile(buf) && !update_results) { + fprintf(stderr, "Missing result file %s", buf); + return(-1); + } + result = strdup(buf); + snprintf(buf, 499, "test/c14n/%s/%s.xpath", subdir,prefix); + if (checkTestFile(buf)) { + xpath = strdup(buf); + } + snprintf(buf, 499, "test/c14n/%s/%s.ns", subdir,prefix); + if (checkTestFile(buf)) { + ns = strdup(buf); + } + + nb_tests++; + if (c14nRunTest(filename, with_comments, mode, + xpath, ns, result) < 0) + ret = 1; + + if (result != NULL) free(result); + if (xpath != NULL) free(xpath); + if (ns != NULL) free(ns); + return(ret); +} + +static int +c14nWithCommentTest(const char *filename, + const char *resul ATTRIBUTE_UNUSED, + const char *err ATTRIBUTE_UNUSED, + int options ATTRIBUTE_UNUSED) { + return(c14nCommonTest(filename, 1, XML_C14N_1_0, "with-comments")); +} +static int +c14nWithoutCommentTest(const char *filename, + const char *resul ATTRIBUTE_UNUSED, + const char *err ATTRIBUTE_UNUSED, + int options ATTRIBUTE_UNUSED) { + return(c14nCommonTest(filename, 0, XML_C14N_1_0, "without-comments")); +} +static int +c14nExcWithoutCommentTest(const char *filename, + const char *resul ATTRIBUTE_UNUSED, + const char *err ATTRIBUTE_UNUSED, + int options ATTRIBUTE_UNUSED) { + return(c14nCommonTest(filename, 0, XML_C14N_EXCLUSIVE_1_0, "exc-without-comments")); +} +static int +c14n11WithoutCommentTest(const char *filename, + const char *resul ATTRIBUTE_UNUSED, + const char *err ATTRIBUTE_UNUSED, + int options ATTRIBUTE_UNUSED) { + return(c14nCommonTest(filename, 0, XML_C14N_1_1, "1-1-without-comments")); +} +#endif +#if defined(LIBXML_THREAD_ENABLED) && defined(LIBXML_CATALOG_ENABLED) && defined (LIBXML_SAX1_ENABLED) +/************************************************************************ + * * + * Catalog and threads test * + * * + ************************************************************************/ + +/* + * mostly a cut and paste from testThreads.c + */ +#define MAX_ARGC 20 + +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", +}; + +static const char *Okay = "OK"; +static 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); +} + +#if defined WIN32 +#include +#include + +#define TEST_REPEAT_COUNT 500 + +static HANDLE tid[MAX_ARGC]; + +static DWORD WINAPI +win32_thread_specific_data(void *private_data) +{ + return((DWORD) thread_specific_data(private_data)); +} + +static int +testThread(void) +{ + unsigned int i, repeat; + unsigned int num_threads = sizeof(testfiles) / sizeof(testfiles[0]); + DWORD results[MAX_ARGC]; + BOOL ret; + int res = 0; + + xmlInitParser(); + for (repeat = 0; repeat < TEST_REPEAT_COUNT; repeat++) { + xmlLoadCatalog(catalog); + nb_tests++; + + 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, + win32_thread_specific_data, + (void *) testfiles[i], 0, + &useless); + if (tid[i] == NULL) { + fprintf(stderr, "CreateThread failed\n"); + return(1); + } + } + + if (WaitForMultipleObjects(num_threads, tid, TRUE, INFINITE) == + WAIT_FAILED) { + fprintf(stderr, "WaitForMultipleObjects failed\n"); + return(1); + } + + for (i = 0; i < num_threads; i++) { + ret = GetExitCodeThread(tid[i], &results[i]); + if (ret == 0) { + fprintf(stderr, "GetExitCodeThread failed\n"); + return(1); + } + CloseHandle(tid[i]); + } + + xmlCatalogCleanup(); + for (i = 0; i < num_threads; i++) { + if (results[i] != (DWORD) Okay) { + fprintf(stderr, "Thread %d handling %s failed\n", + i, testfiles[i]); + res = 1; + } + } + } + + return (res); +} + +#elif defined __BEOS__ +#include + +static thread_id tid[MAX_ARGC]; + +static int +testThread(void) +{ + unsigned int i, repeat; + unsigned int num_threads = sizeof(testfiles) / sizeof(testfiles[0]); + void *results[MAX_ARGC]; + status_t ret; + int res = 0; + + xmlInitParser(); + for (repeat = 0; repeat < 500; repeat++) { + xmlLoadCatalog(catalog); + for (i = 0; i < num_threads; i++) { + results[i] = NULL; + tid[i] = (thread_id) - 1; + } + 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) { + fprintf(stderr, "beos_thread_create failed\n"); + return (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) { + fprintf(stderr, "beos_thread_wait failed\n"); + return (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; + } + } + if (ret != B_OK) + return(1); + return (0); +} + +#elif defined HAVE_PTHREAD_H +#include + +static pthread_t tid[MAX_ARGC]; + +static int +testThread(void) +{ + unsigned int i, repeat; + unsigned int num_threads = sizeof(testfiles) / sizeof(testfiles[0]); + void *results[MAX_ARGC]; + int ret; + int res = 0; + + xmlInitParser(); + + for (repeat = 0; repeat < 500; repeat++) { + xmlLoadCatalog(catalog); + nb_tests++; + + for (i = 0; i < num_threads; i++) { + results[i] = NULL; + tid[i] = (pthread_t) - 1; + } + + for (i = 0; i < num_threads; i++) { + ret = pthread_create(&tid[i], 0, thread_specific_data, + (void *) testfiles[i]); + if (ret != 0) { + fprintf(stderr, "pthread_create failed\n"); + return (1); + } + } + for (i = 0; i < num_threads; i++) { + ret = pthread_join(tid[i], &results[i]); + if (ret != 0) { + fprintf(stderr, "pthread_join failed\n"); + return (1); + } + } + + xmlCatalogCleanup(); + for (i = 0; i < num_threads; i++) + if (results[i] != (void *) Okay) { + fprintf(stderr, "Thread %d handling %s failed\n", + i, testfiles[i]); + res = 1; + } + } + return (res); +} + +#else +static int +testThread(void) +{ + fprintf(stderr, + "Specific platform thread support not detected\n"); + return (-1); +} +#endif +static int +threadsTest(const char *filename ATTRIBUTE_UNUSED, + const char *resul ATTRIBUTE_UNUSED, + const char *err ATTRIBUTE_UNUSED, + int options ATTRIBUTE_UNUSED) { + return(testThread()); +} +#endif +/************************************************************************ + * * + * Tests Descriptions * + * * + ************************************************************************/ + +static +testDesc testDescriptions[] = { + { "XML regression tests" , + oldParseTest, "./test/*", "result/", "", NULL, + 0 }, + { "XML regression tests on memory" , + memParseTest, "./test/*", "result/", "", NULL, + 0 }, + { "XML entity subst regression tests" , + noentParseTest, "./test/*", "result/noent/", "", NULL, + XML_PARSE_NOENT }, + { "XML Namespaces regression tests", + errParseTest, "./test/namespaces/*", "result/namespaces/", "", ".err", + 0 }, + { "Error cases regression tests", + errParseTest, "./test/errors/*.xml", "result/errors/", "", ".err", + 0 }, +#ifdef LIBXML_READER_ENABLED + { "Error cases stream regression tests", + streamParseTest, "./test/errors/*.xml", "result/errors/", NULL, ".str", + 0 }, + { "Reader regression tests", + streamParseTest, "./test/*", "result/", ".rdr", NULL, + 0 }, + { "Reader entities substitution regression tests", + streamParseTest, "./test/*", "result/", ".rde", NULL, + XML_PARSE_NOENT }, + { "Reader on memory regression tests", + streamMemParseTest, "./test/*", "result/", ".rdr", NULL, + 0 }, + { "Walker regression tests", + walkerParseTest, "./test/*", "result/", ".rdr", NULL, + 0 }, +#endif +#ifdef LIBXML_SAX1_ENABLED + { "SAX1 callbacks regression tests" , + saxParseTest, "./test/*", "result/", ".sax", NULL, + XML_PARSE_SAX1 }, + { "SAX2 callbacks regression tests" , + saxParseTest, "./test/*", "result/", ".sax2", NULL, + 0 }, +#endif +#ifdef LIBXML_PUSH_ENABLED + { "XML push regression tests" , + pushParseTest, "./test/*", "result/", "", NULL, + 0 }, +#endif +#ifdef LIBXML_HTML_ENABLED + { "HTML regression tests" , + errParseTest, "./test/HTML/*", "result/HTML/", "", ".err", + XML_PARSE_HTML }, +#ifdef LIBXML_PUSH_ENABLED + { "Push HTML regression tests" , + pushParseTest, "./test/HTML/*", "result/HTML/", "", ".err", + XML_PARSE_HTML }, +#endif +#ifdef LIBXML_SAX1_ENABLED + { "HTML SAX regression tests" , + saxParseTest, "./test/HTML/*", "result/HTML/", ".sax", NULL, + XML_PARSE_HTML }, +#endif +#endif +#ifdef LIBXML_VALID_ENABLED + { "Valid documents regression tests" , + errParseTest, "./test/VCM/*", NULL, NULL, NULL, + XML_PARSE_DTDVALID }, + { "Validity checking regression tests" , + errParseTest, "./test/VC/*", "result/VC/", NULL, "", + XML_PARSE_DTDVALID }, +#ifdef LIBXML_READER_ENABLED + { "Streaming validity checking regression tests" , + streamParseTest, "./test/valid/*.xml", "result/valid/", NULL, ".err.rdr", + XML_PARSE_DTDVALID }, + { "Streaming validity error checking regression tests" , + streamParseTest, "./test/VC/*", "result/VC/", NULL, ".rdr", + XML_PARSE_DTDVALID }, +#endif + { "General documents valid regression tests" , + errParseTest, "./test/valid/*", "result/valid/", "", ".err", + XML_PARSE_DTDVALID }, +#endif +#ifdef LIBXML_XINCLUDE_ENABLED + { "XInclude regression tests" , + errParseTest, "./test/XInclude/docs/*", "result/XInclude/", "", NULL, + /* Ignore errors at this point ".err", */ + XML_PARSE_XINCLUDE }, +#ifdef LIBXML_READER_ENABLED + { "XInclude xmlReader regression tests", + streamParseTest, "./test/XInclude/docs/*", "result/XInclude/", ".rdr", + /* Ignore errors at this point ".err", */ + NULL, XML_PARSE_XINCLUDE }, +#endif + { "XInclude regression tests stripping include nodes" , + errParseTest, "./test/XInclude/docs/*", "result/XInclude/", "", NULL, + /* Ignore errors at this point ".err", */ + XML_PARSE_XINCLUDE | XML_PARSE_NOXINCNODE }, +#ifdef LIBXML_READER_ENABLED + { "XInclude xmlReader regression tests stripping include nodes", + streamParseTest, "./test/XInclude/docs/*", "result/XInclude/", ".rdr", + /* Ignore errors at this point ".err", */ + NULL, XML_PARSE_XINCLUDE | XML_PARSE_NOXINCNODE }, +#endif +#endif +#ifdef LIBXML_XPATH_ENABLED +#ifdef LIBXML_DEBUG_ENABLED + { "XPath expressions regression tests" , + xpathExprTest, "./test/XPath/expr/*", "result/XPath/expr/", "", NULL, + 0 }, + { "XPath document queries regression tests" , + xpathDocTest, "./test/XPath/docs/*", NULL, NULL, NULL, + 0 }, +#ifdef LIBXML_XPTR_ENABLED + { "XPointer document queries regression tests" , + xptrDocTest, "./test/XPath/docs/*", NULL, NULL, NULL, + 0 }, +#endif + { "xml:id regression tests" , + xmlidDocTest, "./test/xmlid/*", "result/xmlid/", "", ".err", + 0 }, +#endif +#endif + { "URI parsing tests" , + uriParseTest, "./test/URI/*.uri", "result/URI/", "", NULL, + 0 }, + { "URI base composition tests" , + uriBaseTest, "./test/URI/*.data", "result/URI/", "", NULL, + 0 }, + { "Path URI conversion tests" , + uriPathTest, NULL, NULL, NULL, NULL, + 0 }, +#ifdef LIBXML_SCHEMAS_ENABLED + { "Schemas regression tests" , + schemasTest, "./test/schemas/*_*.xsd", NULL, NULL, NULL, + 0 }, + { "Relax-NG regression tests" , + rngTest, "./test/relaxng/*.rng", NULL, NULL, NULL, + XML_PARSE_DTDATTR | XML_PARSE_NOENT }, +#ifdef LIBXML_READER_ENABLED + { "Relax-NG streaming regression tests" , + rngStreamTest, "./test/relaxng/*.rng", NULL, NULL, NULL, + XML_PARSE_DTDATTR | XML_PARSE_NOENT }, +#endif +#endif +#ifdef LIBXML_PATTERN_ENABLED +#ifdef LIBXML_READER_ENABLED + { "Pattern regression tests" , + patternTest, "./test/pattern/*.pat", "result/pattern/", NULL, NULL, + 0 }, +#endif +#endif +#ifdef LIBXML_C14N_ENABLED + { "C14N with comments regression tests" , + c14nWithCommentTest, "./test/c14n/with-comments/*.xml", NULL, NULL, NULL, + 0 }, + { "C14N without comments regression tests" , + c14nWithoutCommentTest, "./test/c14n/without-comments/*.xml", NULL, NULL, NULL, + 0 }, + { "C14N exclusive without comments regression tests" , + c14nExcWithoutCommentTest, "./test/c14n/exc-without-comments/*.xml", NULL, NULL, NULL, + 0 }, + { "C14N 1.1 without comments regression tests" , + c14n11WithoutCommentTest, "./test/c14n/1-1-without-comments/*.xml", NULL, NULL, NULL, + 0 }, +#endif +#if defined(LIBXML_THREAD_ENABLED) && defined(LIBXML_CATALOG_ENABLED) && defined(LIBXML_SAX1_ENABLED) + { "Catalog and Threads regression tests" , + threadsTest, NULL, NULL, NULL, NULL, + 0 }, +#endif + {NULL, NULL, NULL, NULL, NULL, NULL, 0} +}; + +/************************************************************************ + * * + * The main code driving the tests * + * * + ************************************************************************/ + +static int +launchTests(testDescPtr tst) { + int res = 0, err = 0; + size_t i; + char *result; + char *error; + int mem; + + if (tst == NULL) return(-1); + if (tst->in != NULL) { + glob_t globbuf; + + globbuf.gl_offs = 0; + glob(tst->in, GLOB_DOOFFS, NULL, &globbuf); + for (i = 0;i < globbuf.gl_pathc;i++) { + if (!checkTestFile(globbuf.gl_pathv[i])) + continue; + if (tst->suffix != NULL) { + result = resultFilename(globbuf.gl_pathv[i], tst->out, + tst->suffix); + if (result == NULL) { + fprintf(stderr, "Out of memory !\n"); + fatalError(); + } + } else { + result = NULL; + } + if (tst->err != NULL) { + error = resultFilename(globbuf.gl_pathv[i], tst->out, + tst->err); + if (error == NULL) { + fprintf(stderr, "Out of memory !\n"); + fatalError(); + } + } else { + error = NULL; + } + if ((result) &&(!checkTestFile(result)) && !update_results) { + fprintf(stderr, "Missing result file %s\n", result); + } else if ((error) &&(!checkTestFile(error)) && !update_results) { + fprintf(stderr, "Missing error file %s\n", error); + } else { + mem = xmlMemUsed(); + extraMemoryFromResolver = 0; + testErrorsSize = 0; + testErrors[0] = 0; + res = tst->func(globbuf.gl_pathv[i], result, error, + tst->options | XML_PARSE_COMPACT); + xmlResetLastError(); + if (res != 0) { + fprintf(stderr, "File %s generated an error\n", + globbuf.gl_pathv[i]); + nb_errors++; + err++; + } + else if (xmlMemUsed() != mem) { + if ((xmlMemUsed() != mem) && + (extraMemoryFromResolver == 0)) { + fprintf(stderr, "File %s leaked %d bytes\n", + globbuf.gl_pathv[i], xmlMemUsed() - mem); + nb_leaks++; + err++; + } + } + testErrorsSize = 0; + } + if (result) + free(result); + if (error) + free(error); + } + globfree(&globbuf); + } else { + testErrorsSize = 0; + testErrors[0] = 0; + extraMemoryFromResolver = 0; + res = tst->func(NULL, NULL, NULL, tst->options); + if (res != 0) { + nb_errors++; + err++; + } + } + return(err); +} + +static int verbose = 0; +static int tests_quiet = 0; + +static int +runtest(int i) { + int ret = 0, res; + int old_errors, old_tests, old_leaks; + + old_errors = nb_errors; + old_tests = nb_tests; + old_leaks = nb_leaks; + if ((tests_quiet == 0) && (testDescriptions[i].desc != NULL)) + printf("## %s\n", testDescriptions[i].desc); + res = launchTests(&testDescriptions[i]); + if (res != 0) + ret++; + if (verbose) { + if ((nb_errors == old_errors) && (nb_leaks == old_leaks)) + printf("Ran %d tests, no errors\n", nb_tests - old_tests); + else + printf("Ran %d tests, %d errors, %d leaks\n", + nb_tests - old_tests, + nb_errors - old_errors, + nb_leaks - old_leaks); + } + return(ret); +} + +int +main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) { + int i, a, ret = 0; + int subset = 0; + + initializeLibxml2(); + + for (a = 1; a < argc;a++) { + if (!strcmp(argv[a], "-v")) + verbose = 1; + else if (!strcmp(argv[a], "-u")) + update_results = 1; + else if (!strcmp(argv[a], "-quiet")) + tests_quiet = 1; + else { + for (i = 0; testDescriptions[i].func != NULL; i++) { + if (strstr(testDescriptions[i].desc, argv[a])) { + ret += runtest(i); + subset++; + } + } + } + } + if (subset == 0) { + for (i = 0; testDescriptions[i].func != NULL; i++) { + ret += runtest(i); + } + } + if ((nb_errors == 0) && (nb_leaks == 0)) { + ret = 0; + printf("Total %d tests, no errors\n", + nb_tests); + } else { + ret = 1; + printf("Total %d tests, %d errors, %d leaks\n", + nb_tests, nb_errors, nb_leaks); + } + xmlCleanupParser(); + xmlMemoryDump(); + + return(ret); +} + +#else /* ! LIBXML_OUTPUT_ENABLED */ +int +main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) { + fprintf(stderr, "runtest requires output to be enabled in libxml2\n"); + return(1); +} +#endif diff --git a/runxmlconf.c b/runxmlconf.c new file mode 100644 index 0000000..cef20f4 --- /dev/null +++ b/runxmlconf.c @@ -0,0 +1,607 @@ +/* + * runsuite.c: C program to run libxml2 againts published testsuites + * + * See Copyright for the status of this software. + * + * daniel@veillard.com + */ + +#include "libxml.h" +#include + +#ifdef LIBXML_XPATH_ENABLED + +#if !defined(_WIN32) || defined(__CYGWIN__) +#include +#endif +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include + +#define LOGFILE "runxmlconf.log" +static FILE *logfile = NULL; +static int verbose = 0; + +#define NB_EXPECTED_ERRORS 15 + + +const char *skipped_tests[] = { +/* http://lists.w3.org/Archives/Public/public-xml-testsuite/2008Jul/0000.html */ + "rmt-ns10-035", + NULL +}; + +/************************************************************************ + * * + * File name and path utilities * + * * + ************************************************************************/ + +static int checkTestFile(const char *filename) { + struct stat buf; + + if (stat(filename, &buf) == -1) + return(0); + +#if defined(_WIN32) && !defined(__CYGWIN__) + if (!(buf.st_mode & _S_IFREG)) + return(0); +#else + if (!S_ISREG(buf.st_mode)) + return(0); +#endif + + return(1); +} + +static xmlChar *composeDir(const xmlChar *dir, const xmlChar *path) { + char buf[500]; + + if (dir == NULL) return(xmlStrdup(path)); + if (path == NULL) return(NULL); + + snprintf(buf, 500, "%s/%s", (const char *) dir, (const char *) path); + return(xmlStrdup((const xmlChar *) buf)); +} + +/************************************************************************ + * * + * Libxml2 specific routines * + * * + ************************************************************************/ + +static int nb_skipped = 0; +static int nb_tests = 0; +static int nb_errors = 0; +static int nb_leaks = 0; + +/* + * We need to trap calls to the resolver to not account memory for the catalog + * and not rely on any external resources. + */ +static xmlParserInputPtr +testExternalEntityLoader(const char *URL, const char *ID ATTRIBUTE_UNUSED, + xmlParserCtxtPtr ctxt) { + xmlParserInputPtr ret; + + ret = xmlNewInputFromFile(ctxt, (const char *) URL); + + return(ret); +} + +/* + * Trapping the error messages at the generic level to grab the equivalent of + * stderr messages on CLI tools. + */ +static char testErrors[32769]; +static int testErrorsSize = 0; +static int nbError = 0; +static int nbFatal = 0; + +static void test_log(const char *msg, ...) { + va_list args; + if (logfile != NULL) { + fprintf(logfile, "\n------------\n"); + va_start(args, msg); + vfprintf(logfile, msg, args); + va_end(args); + fprintf(logfile, "%s", testErrors); + testErrorsSize = 0; testErrors[0] = 0; + } + if (verbose) { + va_start(args, msg); + vfprintf(stderr, msg, args); + va_end(args); + } +} + +static void +testErrorHandler(void *userData ATTRIBUTE_UNUSED, xmlErrorPtr error) { + int res; + + if (testErrorsSize >= 32768) + return; + res = snprintf(&testErrors[testErrorsSize], + 32768 - testErrorsSize, + "%s:%d: %s\n", (error->file ? error->file : "entity"), + error->line, error->message); + if (error->level == XML_ERR_FATAL) + nbFatal++; + else if (error->level == XML_ERR_ERROR) + nbError++; + if (testErrorsSize + res >= 32768) { + /* buffer is full */ + testErrorsSize = 32768; + testErrors[testErrorsSize] = 0; + } else { + testErrorsSize += res; + } + testErrors[testErrorsSize] = 0; +} + +static xmlXPathContextPtr ctxtXPath; + +static void +initializeLibxml2(void) { + xmlGetWarningsDefaultValue = 0; + xmlPedanticParserDefault(0); + + xmlMemSetup(xmlMemFree, xmlMemMalloc, xmlMemRealloc, xmlMemoryStrdup); + xmlInitParser(); + xmlSetExternalEntityLoader(testExternalEntityLoader); + ctxtXPath = xmlXPathNewContext(NULL); + /* + * Deactivate the cache if created; otherwise we have to create/free it + * for every test, since it will confuse the memory leak detection. + * Note that normally this need not be done, since the cache is not + * created until set explicitely with xmlXPathContextSetCache(); + * but for test purposes it is sometimes usefull to activate the + * cache by default for the whole library. + */ + if (ctxtXPath->cache != NULL) + xmlXPathContextSetCache(ctxtXPath, 0, -1, 0); + xmlSetStructuredErrorFunc(NULL, testErrorHandler); +} + +/************************************************************************ + * * + * Run the xmlconf test if found * + * * + ************************************************************************/ + +static int +xmlconfTestInvalid(const char *id, const char *filename, int options) { + xmlDocPtr doc; + xmlParserCtxtPtr ctxt; + int ret = 1; + + ctxt = xmlNewParserCtxt(); + if (ctxt == NULL) { + test_log("test %s : %s out of memory\n", + id, filename); + return(0); + } + doc = xmlCtxtReadFile(ctxt, filename, NULL, options); + if (doc == NULL) { + test_log("test %s : %s invalid document turned not well-formed too\n", + id, filename); + } else { + /* invalidity should be reported both in the context and in the document */ + if ((ctxt->valid != 0) || (doc->properties & XML_DOC_DTDVALID)) { + test_log("test %s : %s failed to detect invalid document\n", + id, filename); + nb_errors++; + ret = 0; + } + xmlFreeDoc(doc); + } + xmlFreeParserCtxt(ctxt); + return(ret); +} + +static int +xmlconfTestValid(const char *id, const char *filename, int options) { + xmlDocPtr doc; + xmlParserCtxtPtr ctxt; + int ret = 1; + + ctxt = xmlNewParserCtxt(); + if (ctxt == NULL) { + test_log("test %s : %s out of memory\n", + id, filename); + return(0); + } + doc = xmlCtxtReadFile(ctxt, filename, NULL, options); + if (doc == NULL) { + test_log("test %s : %s failed to parse a valid document\n", + id, filename); + nb_errors++; + ret = 0; + } else { + /* validity should be reported both in the context and in the document */ + if ((ctxt->valid == 0) || ((doc->properties & XML_DOC_DTDVALID) == 0)) { + test_log("test %s : %s failed to validate a valid document\n", + id, filename); + nb_errors++; + ret = 0; + } + xmlFreeDoc(doc); + } + xmlFreeParserCtxt(ctxt); + return(ret); +} + +static int +xmlconfTestNotNSWF(const char *id, const char *filename, int options) { + xmlDocPtr doc; + int ret = 1; + + /* + * In case of Namespace errors, libxml2 will still parse the document + * but log a Namesapce error. + */ + doc = xmlReadFile(filename, NULL, options); + if (doc == NULL) { + test_log("test %s : %s failed to parse the XML\n", + id, filename); + nb_errors++; + ret = 0; + } else { + if ((xmlLastError.code == XML_ERR_OK) || + (xmlLastError.domain != XML_FROM_NAMESPACE)) { + test_log("test %s : %s failed to detect namespace error\n", + id, filename); + nb_errors++; + ret = 0; + } + xmlFreeDoc(doc); + } + return(ret); +} + +static int +xmlconfTestNotWF(const char *id, const char *filename, int options) { + xmlDocPtr doc; + int ret = 1; + + doc = xmlReadFile(filename, NULL, options); + if (doc != NULL) { + test_log("test %s : %s failed to detect not well formedness\n", + id, filename); + nb_errors++; + xmlFreeDoc(doc); + ret = 0; + } + return(ret); +} + +static int +xmlconfTestItem(xmlDocPtr doc, xmlNodePtr cur) { + int ret = -1; + xmlChar *type = NULL; + xmlChar *filename = NULL; + xmlChar *uri = NULL; + xmlChar *base = NULL; + xmlChar *id = NULL; + xmlChar *rec = NULL; + xmlChar *version = NULL; + xmlChar *entities = NULL; + xmlChar *edition = NULL; + int options = 0; + int nstest = 0; + int mem, final; + int i; + + testErrorsSize = 0; testErrors[0] = 0; + nbError = 0; + nbFatal = 0; + id = xmlGetProp(cur, BAD_CAST "ID"); + if (id == NULL) { + test_log("test missing ID, line %ld\n", xmlGetLineNo(cur)); + goto error; + } + for (i = 0;skipped_tests[i] != NULL;i++) { + if (!strcmp(skipped_tests[i], (char *) id)) { + test_log("Skipping test %s from skipped list\n", (char *) id); + ret = 0; + nb_skipped++; + goto error; + } + } + type = xmlGetProp(cur, BAD_CAST "TYPE"); + if (type == NULL) { + test_log("test %s missing TYPE\n", (char *) id); + goto error; + } + uri = xmlGetProp(cur, BAD_CAST "URI"); + if (uri == NULL) { + test_log("test %s missing URI\n", (char *) id); + goto error; + } + base = xmlNodeGetBase(doc, cur); + filename = composeDir(base, uri); + if (!checkTestFile((char *) filename)) { + test_log("test %s missing file %s \n", id, + (filename ? (char *)filename : "NULL")); + goto error; + } + + version = xmlGetProp(cur, BAD_CAST "VERSION"); + + entities = xmlGetProp(cur, BAD_CAST "ENTITIES"); + if (!xmlStrEqual(entities, BAD_CAST "none")) { + options |= XML_PARSE_DTDLOAD; + options |= XML_PARSE_NOENT; + } + rec = xmlGetProp(cur, BAD_CAST "RECOMMENDATION"); + if ((rec == NULL) || + (xmlStrEqual(rec, BAD_CAST "XML1.0")) || + (xmlStrEqual(rec, BAD_CAST "XML1.0-errata2e")) || + (xmlStrEqual(rec, BAD_CAST "XML1.0-errata3e")) || + (xmlStrEqual(rec, BAD_CAST "XML1.0-errata4e"))) { + if ((version != NULL) && (!xmlStrEqual(version, BAD_CAST "1.0"))) { + test_log("Skipping test %s for %s\n", (char *) id, + (char *) version); + ret = 0; + nb_skipped++; + goto error; + } + ret = 1; + } else if ((xmlStrEqual(rec, BAD_CAST "NS1.0")) || + (xmlStrEqual(rec, BAD_CAST "NS1.0-errata1e"))) { + ret = 1; + nstest = 1; + } else { + test_log("Skipping test %s for REC %s\n", (char *) id, (char *) rec); + ret = 0; + nb_skipped++; + goto error; + } + edition = xmlGetProp(cur, BAD_CAST "EDITION"); + if ((edition != NULL) && (xmlStrchr(edition, '5') == NULL)) { + /* test limited to all versions before 5th */ + options |= XML_PARSE_OLD10; + } + + /* + * Reset errors and check memory usage before the test + */ + xmlResetLastError(); + testErrorsSize = 0; testErrors[0] = 0; + mem = xmlMemUsed(); + + if (xmlStrEqual(type, BAD_CAST "not-wf")) { + if (nstest == 0) + xmlconfTestNotWF((char *) id, (char *) filename, options); + else + xmlconfTestNotNSWF((char *) id, (char *) filename, options); + } else if (xmlStrEqual(type, BAD_CAST "valid")) { + options |= XML_PARSE_DTDVALID; + xmlconfTestValid((char *) id, (char *) filename, options); + } else if (xmlStrEqual(type, BAD_CAST "invalid")) { + options |= XML_PARSE_DTDVALID; + xmlconfTestInvalid((char *) id, (char *) filename, options); + } else if (xmlStrEqual(type, BAD_CAST "error")) { + test_log("Skipping error test %s \n", (char *) id); + ret = 0; + nb_skipped++; + goto error; + } else { + test_log("test %s unknown TYPE value %s\n", (char *) id, (char *)type); + ret = -1; + goto error; + } + + /* + * Reset errors and check memory usage after the test + */ + xmlResetLastError(); + final = xmlMemUsed(); + if (final > mem) { + test_log("test %s : %s leaked %d bytes\n", + id, filename, final - mem); + nb_leaks++; + xmlMemDisplayLast(logfile, final - mem); + } + nb_tests++; + +error: + if (type != NULL) + xmlFree(type); + if (entities != NULL) + xmlFree(entities); + if (edition != NULL) + xmlFree(edition); + if (version != NULL) + xmlFree(version); + if (filename != NULL) + xmlFree(filename); + if (uri != NULL) + xmlFree(uri); + if (base != NULL) + xmlFree(base); + if (id != NULL) + xmlFree(id); + if (rec != NULL) + xmlFree(rec); + return(ret); +} + +static int +xmlconfTestCases(xmlDocPtr doc, xmlNodePtr cur, int level) { + xmlChar *profile; + int ret = 0; + int tests = 0; + int output = 0; + + if (level == 1) { + profile = xmlGetProp(cur, BAD_CAST "PROFILE"); + if (profile != NULL) { + output = 1; + level++; + printf("Test cases: %s\n", (char *) profile); + xmlFree(profile); + } + } + cur = cur->children; + while (cur != NULL) { + /* look only at elements we ignore everything else */ + if (cur->type == XML_ELEMENT_NODE) { + if (xmlStrEqual(cur->name, BAD_CAST "TESTCASES")) { + ret += xmlconfTestCases(doc, cur, level); + } else if (xmlStrEqual(cur->name, BAD_CAST "TEST")) { + if (xmlconfTestItem(doc, cur) >= 0) + ret++; + tests++; + } else { + fprintf(stderr, "Unhandled element %s\n", (char *)cur->name); + } + } + cur = cur->next; + } + if (output == 1) { + if (tests > 0) + printf("Test cases: %d tests\n", tests); + } + return(ret); +} + +static int +xmlconfTestSuite(xmlDocPtr doc, xmlNodePtr cur) { + xmlChar *profile; + int ret = 0; + + profile = xmlGetProp(cur, BAD_CAST "PROFILE"); + if (profile != NULL) { + printf("Test suite: %s\n", (char *) profile); + xmlFree(profile); + } else + printf("Test suite\n"); + cur = cur->children; + while (cur != NULL) { + /* look only at elements we ignore everything else */ + if (cur->type == XML_ELEMENT_NODE) { + if (xmlStrEqual(cur->name, BAD_CAST "TESTCASES")) { + ret += xmlconfTestCases(doc, cur, 1); + } else { + fprintf(stderr, "Unhandled element %s\n", (char *)cur->name); + } + } + cur = cur->next; + } + return(ret); +} + +static void +xmlconfInfo(void) { + fprintf(stderr, " you need to fetch and extract the\n"); + fprintf(stderr, " latest XML Conformance Test Suites\n"); + fprintf(stderr, " http://www.w3.org/XML/Test/xmlts20080827.tar.gz\n"); + fprintf(stderr, " see http://www.w3.org/XML/Test/ for informations\n"); +} + +static int +xmlconfTest(void) { + const char *confxml = "xmlconf/xmlconf.xml"; + xmlDocPtr doc; + xmlNodePtr cur; + int ret = 0; + + if (!checkTestFile(confxml)) { + fprintf(stderr, "%s is missing \n", confxml); + xmlconfInfo(); + return(-1); + } + doc = xmlReadFile(confxml, NULL, XML_PARSE_NOENT); + if (doc == NULL) { + fprintf(stderr, "%s is corrupted \n", confxml); + xmlconfInfo(); + return(-1); + } + + cur = xmlDocGetRootElement(doc); + if ((cur == NULL) || (!xmlStrEqual(cur->name, BAD_CAST "TESTSUITE"))) { + fprintf(stderr, "Unexpected format %s\n", confxml); + xmlconfInfo(); + ret = -1; + } else { + ret = xmlconfTestSuite(doc, cur); + } + xmlFreeDoc(doc); + return(ret); +} + +/************************************************************************ + * * + * The driver for the tests * + * * + ************************************************************************/ + +int +main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) { + int ret = 0; + int old_errors, old_tests, old_leaks; + + logfile = fopen(LOGFILE, "w"); + if (logfile == NULL) { + fprintf(stderr, + "Could not open the log file, running in verbose mode\n"); + verbose = 1; + } + initializeLibxml2(); + + if ((argc >= 2) && (!strcmp(argv[1], "-v"))) + verbose = 1; + + + old_errors = nb_errors; + old_tests = nb_tests; + old_leaks = nb_leaks; + xmlconfTest(); + if ((nb_errors == old_errors) && (nb_leaks == old_leaks)) + printf("Ran %d tests, no errors\n", nb_tests - old_tests); + else + printf("Ran %d tests, %d errors, %d leaks\n", + nb_tests - old_tests, + nb_errors - old_errors, + nb_leaks - old_leaks); + if ((nb_errors == 0) && (nb_leaks == 0)) { + ret = 0; + printf("Total %d tests, no errors\n", + nb_tests); + } else { + ret = 1; + printf("Total %d tests, %d errors, %d leaks\n", + nb_tests, nb_errors, nb_leaks); + printf("See %s for detailed output\n", LOGFILE); + if ((nb_leaks == 0) && (nb_errors == NB_EXPECTED_ERRORS)) { + printf("%d errors were expected\n", nb_errors); + ret = 0; + } + } + xmlXPathFreeContext(ctxtXPath); + xmlCleanupParser(); + xmlMemoryDump(); + + if (logfile != NULL) + fclose(logfile); + return(ret); +} + +#else /* ! LIBXML_XPATH_ENABLED */ +#include +int +main(int argc, char **argv) { + fprintf(stderr, "%s need XPath support\n", argv[0]); +} +#endif diff --git a/save.h b/save.h new file mode 100644 index 0000000..2c32a10 --- /dev/null +++ b/save.h @@ -0,0 +1,35 @@ +/* + * Summary: Internal Interfaces for saving in libxml2 + * Description: this module describes a few interfaces which were + * addded along with the API changes in 2.9.0 + * those are private routines at this point + * + * Copy: See Copyright for the status of this software. + * + * Author: Daniel Veillard + */ + +#ifndef __XML_SAVE_H__ +#define __XML_SAVE_H__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef LIBXML_OUTPUT_ENABLED +void xmlBufAttrSerializeTxtContent(xmlBufPtr buf, xmlDocPtr doc, + xmlAttrPtr attr, const xmlChar * string); +void xmlBufDumpNotationTable(xmlBufPtr buf, xmlNotationTablePtr table); +void xmlBufDumpElementDecl(xmlBufPtr buf, xmlElementPtr elem); +void xmlBufDumpAttributeDecl(xmlBufPtr buf, xmlAttributePtr attr); +void xmlBufDumpEntityDecl(xmlBufPtr buf, xmlEntityPtr ent); +xmlChar *xmlEncodeAttributeEntities(xmlDocPtr doc, const xmlChar *input); +#endif + +#ifdef __cplusplus +} +#endif +#endif /* __XML_SAVE_H__ */ + diff --git a/schematron.c b/schematron.c new file mode 100644 index 0000000..6200f2d --- /dev/null +++ b/schematron.c @@ -0,0 +1,1787 @@ +/* + * schematron.c : implementation of the Schematron schema validity checking + * + * See Copyright for the status of this software. + * + * Daniel Veillard + */ + +/* + * TODO: + * + double check the semantic, especially + * - multiple rules applying in a single pattern/node + * - the semantic of libxml2 patterns vs. XSLT production referenced + * by the spec. + * + export of results in SVRL + * + full parsing and coverage of the spec, conformance of the input to the + * spec + * + divergences between the draft and the ISO proposed standard :-( + * + hook and test include + * + try and compare with the XSLT version + */ + +#define IN_LIBXML +#include "libxml.h" + +#ifdef LIBXML_SCHEMATRON_ENABLED + +#include +#include +#include +#include +#include +#include +#include +#include + +#define SCHEMATRON_PARSE_OPTIONS XML_PARSE_NOENT + +#define SCT_OLD_NS BAD_CAST "http://www.ascc.net/xml/schematron" + +#define XML_SCHEMATRON_NS BAD_CAST "http://purl.oclc.org/dsdl/schematron" + + +static const xmlChar *xmlSchematronNs = XML_SCHEMATRON_NS; +static const xmlChar *xmlOldSchematronNs = SCT_OLD_NS; + +#define IS_SCHEMATRON(node, elem) \ + ((node != NULL) && (node->type == XML_ELEMENT_NODE ) && \ + (node->ns != NULL) && \ + (xmlStrEqual(node->name, (const xmlChar *) elem)) && \ + ((xmlStrEqual(node->ns->href, xmlSchematronNs)) || \ + (xmlStrEqual(node->ns->href, xmlOldSchematronNs)))) + +#define NEXT_SCHEMATRON(node) \ + while (node != NULL) { \ + if ((node->type == XML_ELEMENT_NODE ) && (node->ns != NULL) && \ + ((xmlStrEqual(node->ns->href, xmlSchematronNs)) || \ + (xmlStrEqual(node->ns->href, xmlOldSchematronNs)))) \ + break; \ + node = node->next; \ + } + +/** + * TODO: + * + * macro to flag unimplemented blocks + */ +#define TODO \ + xmlGenericError(xmlGenericErrorContext, \ + "Unimplemented block at %s:%d\n", \ + __FILE__, __LINE__); + +typedef enum { + XML_SCHEMATRON_ASSERT=1, + XML_SCHEMATRON_REPORT=2 +} xmlSchematronTestType; + +/** + * _xmlSchematronTest: + * + * A Schematrons test, either an assert or a report + */ +typedef struct _xmlSchematronTest xmlSchematronTest; +typedef xmlSchematronTest *xmlSchematronTestPtr; +struct _xmlSchematronTest { + xmlSchematronTestPtr next; /* the next test in the list */ + xmlSchematronTestType type; /* the test type */ + xmlNodePtr node; /* the node in the tree */ + xmlChar *test; /* the expression to test */ + xmlXPathCompExprPtr comp; /* the compiled expression */ + xmlChar *report; /* the message to report */ +}; + +/** + * _xmlSchematronRule: + * + * A Schematrons rule + */ +typedef struct _xmlSchematronRule xmlSchematronRule; +typedef xmlSchematronRule *xmlSchematronRulePtr; +struct _xmlSchematronRule { + xmlSchematronRulePtr next; /* the next rule in the list */ + xmlSchematronRulePtr patnext;/* the next rule in the pattern list */ + xmlNodePtr node; /* the node in the tree */ + xmlChar *context; /* the context evaluation rule */ + xmlSchematronTestPtr tests; /* the list of tests */ + xmlPatternPtr pattern; /* the compiled pattern associated */ + xmlChar *report; /* the message to report */ +}; + +/** + * _xmlSchematronPattern: + * + * A Schematrons pattern + */ +typedef struct _xmlSchematronPattern xmlSchematronPattern; +typedef xmlSchematronPattern *xmlSchematronPatternPtr; +struct _xmlSchematronPattern { + xmlSchematronPatternPtr next;/* the next pattern in the list */ + xmlSchematronRulePtr rules; /* the list of rules */ + xmlChar *name; /* the name of the pattern */ +}; + +/** + * _xmlSchematron: + * + * A Schematrons definition + */ +struct _xmlSchematron { + const xmlChar *name; /* schema name */ + int preserve; /* was the document passed by the user */ + xmlDocPtr doc; /* pointer to the parsed document */ + int flags; /* specific to this schematron */ + + void *_private; /* unused by the library */ + xmlDictPtr dict; /* the dictionary used internally */ + + const xmlChar *title; /* the title if any */ + + int nbNs; /* the number of namespaces */ + + int nbPattern; /* the number of patterns */ + xmlSchematronPatternPtr patterns;/* the patterns found */ + xmlSchematronRulePtr rules; /* the rules gathered */ + int nbNamespaces; /* number of namespaces in the array */ + int maxNamespaces; /* size of the array */ + const xmlChar **namespaces; /* the array of namespaces */ +}; + +/** + * xmlSchematronValidCtxt: + * + * A Schematrons validation context + */ +struct _xmlSchematronValidCtxt { + int type; + int flags; /* an or of xmlSchematronValidOptions */ + + xmlDictPtr dict; + int nberrors; + int err; + + xmlSchematronPtr schema; + xmlXPathContextPtr xctxt; + + FILE *outputFile; /* if using XML_SCHEMATRON_OUT_FILE */ + xmlBufferPtr outputBuffer; /* if using XML_SCHEMATRON_OUT_BUFFER */ +#ifdef LIBXML_OUTPUT_ENABLED + xmlOutputWriteCallback iowrite; /* if using XML_SCHEMATRON_OUT_IO */ + xmlOutputCloseCallback ioclose; +#endif + void *ioctx; + + /* error reporting data */ + void *userData; /* user specific data block */ + xmlSchematronValidityErrorFunc error;/* the callback in case of errors */ + xmlSchematronValidityWarningFunc warning;/* callback in case of warning */ + xmlStructuredErrorFunc serror; /* the structured function */ +}; + +struct _xmlSchematronParserCtxt { + int type; + const xmlChar *URL; + xmlDocPtr doc; + int preserve; /* Whether the doc should be freed */ + const char *buffer; + int size; + + xmlDictPtr dict; /* dictionary for interned string names */ + + int nberrors; + int err; + xmlXPathContextPtr xctxt; /* the XPath context used for compilation */ + xmlSchematronPtr schema; + + int nbNamespaces; /* number of namespaces in the array */ + int maxNamespaces; /* size of the array */ + const xmlChar **namespaces; /* the array of namespaces */ + + int nbIncludes; /* number of includes in the array */ + int maxIncludes; /* size of the array */ + xmlNodePtr *includes; /* the array of includes */ + + /* error reporting data */ + void *userData; /* user specific data block */ + xmlSchematronValidityErrorFunc error;/* the callback in case of errors */ + xmlSchematronValidityWarningFunc warning;/* callback in case of warning */ + xmlStructuredErrorFunc serror; /* the structured function */ +}; + +#define XML_STRON_CTXT_PARSER 1 +#define XML_STRON_CTXT_VALIDATOR 2 + +/************************************************************************ + * * + * Error reporting * + * * + ************************************************************************/ + +/** + * xmlSchematronPErrMemory: + * @node: a context node + * @extra: extra informations + * + * Handle an out of memory condition + */ +static void +xmlSchematronPErrMemory(xmlSchematronParserCtxtPtr ctxt, + const char *extra, xmlNodePtr node) +{ + if (ctxt != NULL) + ctxt->nberrors++; + __xmlSimpleError(XML_FROM_SCHEMASP, XML_ERR_NO_MEMORY, node, NULL, + extra); +} + +/** + * xmlSchematronPErr: + * @ctxt: the parsing context + * @node: the context node + * @error: the error code + * @msg: the error message + * @str1: extra data + * @str2: extra data + * + * Handle a parser error + */ +static void LIBXML_ATTR_FORMAT(4,0) +xmlSchematronPErr(xmlSchematronParserCtxtPtr ctxt, xmlNodePtr node, int error, + const char *msg, const xmlChar * str1, const xmlChar * str2) +{ + xmlGenericErrorFunc channel = NULL; + xmlStructuredErrorFunc schannel = NULL; + void *data = NULL; + + if (ctxt != NULL) { + ctxt->nberrors++; + channel = ctxt->error; + data = ctxt->userData; + schannel = ctxt->serror; + } + __xmlRaiseError(schannel, channel, data, ctxt, node, XML_FROM_SCHEMASP, + error, XML_ERR_ERROR, NULL, 0, + (const char *) str1, (const char *) str2, NULL, 0, 0, + msg, str1, str2); +} + +/** + * xmlSchematronVTypeErrMemory: + * @node: a context node + * @extra: extra informations + * + * Handle an out of memory condition + */ +static void +xmlSchematronVErrMemory(xmlSchematronValidCtxtPtr ctxt, + const char *extra, xmlNodePtr node) +{ + if (ctxt != NULL) { + ctxt->nberrors++; + ctxt->err = XML_SCHEMAV_INTERNAL; + } + __xmlSimpleError(XML_FROM_SCHEMASV, XML_ERR_NO_MEMORY, node, NULL, + extra); +} + +/************************************************************************ + * * + * Parsing and compilation of the Schematrontrons * + * * + ************************************************************************/ + +/** + * xmlSchematronAddTest: + * @ctxt: the schema parsing context + * @type: the type of test + * @rule: the parent rule + * @node: the node hosting the test + * @test: the associated test + * @report: the associated report string + * + * Add a test to a schematron + * + * Returns the new pointer or NULL in case of error + */ +static xmlSchematronTestPtr +xmlSchematronAddTest(xmlSchematronParserCtxtPtr ctxt, + xmlSchematronTestType type, + xmlSchematronRulePtr rule, + xmlNodePtr node, xmlChar *test, xmlChar *report) +{ + xmlSchematronTestPtr ret; + xmlXPathCompExprPtr comp; + + if ((ctxt == NULL) || (rule == NULL) || (node == NULL) || + (test == NULL)) + return(NULL); + + /* + * try first to compile the test expression + */ + comp = xmlXPathCtxtCompile(ctxt->xctxt, test); + if (comp == NULL) { + xmlSchematronPErr(ctxt, node, + XML_SCHEMAP_NOROOT, + "Failed to compile test expression %s", + test, NULL); + return(NULL); + } + + ret = (xmlSchematronTestPtr) xmlMalloc(sizeof(xmlSchematronTest)); + if (ret == NULL) { + xmlSchematronPErrMemory(ctxt, "allocating schema test", node); + return (NULL); + } + memset(ret, 0, sizeof(xmlSchematronTest)); + ret->type = type; + ret->node = node; + ret->test = test; + ret->comp = comp; + ret->report = report; + ret->next = NULL; + if (rule->tests == NULL) { + rule->tests = ret; + } else { + xmlSchematronTestPtr prev = rule->tests; + + while (prev->next != NULL) + prev = prev->next; + prev->next = ret; + } + return (ret); +} + +/** + * xmlSchematronFreeTests: + * @tests: a list of tests + * + * Free a list of tests. + */ +static void +xmlSchematronFreeTests(xmlSchematronTestPtr tests) { + xmlSchematronTestPtr next; + + while (tests != NULL) { + next = tests->next; + if (tests->test != NULL) + xmlFree(tests->test); + if (tests->comp != NULL) + xmlXPathFreeCompExpr(tests->comp); + if (tests->report != NULL) + xmlFree(tests->report); + xmlFree(tests); + tests = next; + } +} + +/** + * xmlSchematronAddRule: + * @ctxt: the schema parsing context + * @schema: a schema structure + * @node: the node hosting the rule + * @context: the associated context string + * @report: the associated report string + * + * Add a rule to a schematron + * + * Returns the new pointer or NULL in case of error + */ +static xmlSchematronRulePtr +xmlSchematronAddRule(xmlSchematronParserCtxtPtr ctxt, xmlSchematronPtr schema, + xmlSchematronPatternPtr pat, xmlNodePtr node, + xmlChar *context, xmlChar *report) +{ + xmlSchematronRulePtr ret; + xmlPatternPtr pattern; + + if ((ctxt == NULL) || (schema == NULL) || (node == NULL) || + (context == NULL)) + return(NULL); + + /* + * Try first to compile the pattern + */ + pattern = xmlPatterncompile(context, ctxt->dict, XML_PATTERN_XPATH, + ctxt->namespaces); + if (pattern == NULL) { + xmlSchematronPErr(ctxt, node, + XML_SCHEMAP_NOROOT, + "Failed to compile context expression %s", + context, NULL); + } + + ret = (xmlSchematronRulePtr) xmlMalloc(sizeof(xmlSchematronRule)); + if (ret == NULL) { + xmlSchematronPErrMemory(ctxt, "allocating schema rule", node); + return (NULL); + } + memset(ret, 0, sizeof(xmlSchematronRule)); + ret->node = node; + ret->context = context; + ret->pattern = pattern; + ret->report = report; + ret->next = NULL; + if (schema->rules == NULL) { + schema->rules = ret; + } else { + xmlSchematronRulePtr prev = schema->rules; + + while (prev->next != NULL) + prev = prev->next; + prev->next = ret; + } + ret->patnext = NULL; + if (pat->rules == NULL) { + pat->rules = ret; + } else { + xmlSchematronRulePtr prev = pat->rules; + + while (prev->patnext != NULL) + prev = prev->patnext; + prev->patnext = ret; + } + return (ret); +} + +/** + * xmlSchematronFreeRules: + * @rules: a list of rules + * + * Free a list of rules. + */ +static void +xmlSchematronFreeRules(xmlSchematronRulePtr rules) { + xmlSchematronRulePtr next; + + while (rules != NULL) { + next = rules->next; + if (rules->tests) + xmlSchematronFreeTests(rules->tests); + if (rules->context != NULL) + xmlFree(rules->context); + if (rules->pattern) + xmlFreePattern(rules->pattern); + if (rules->report != NULL) + xmlFree(rules->report); + xmlFree(rules); + rules = next; + } +} + +/** + * xmlSchematronAddPattern: + * @ctxt: the schema parsing context + * @schema: a schema structure + * @node: the node hosting the pattern + * @id: the id or name of the pattern + * + * Add a pattern to a schematron + * + * Returns the new pointer or NULL in case of error + */ +static xmlSchematronPatternPtr +xmlSchematronAddPattern(xmlSchematronParserCtxtPtr ctxt, + xmlSchematronPtr schema, xmlNodePtr node, xmlChar *name) +{ + xmlSchematronPatternPtr ret; + + if ((ctxt == NULL) || (schema == NULL) || (node == NULL) || (name == NULL)) + return(NULL); + + ret = (xmlSchematronPatternPtr) xmlMalloc(sizeof(xmlSchematronPattern)); + if (ret == NULL) { + xmlSchematronPErrMemory(ctxt, "allocating schema pattern", node); + return (NULL); + } + memset(ret, 0, sizeof(xmlSchematronPattern)); + ret->name = name; + ret->next = NULL; + if (schema->patterns == NULL) { + schema->patterns = ret; + } else { + xmlSchematronPatternPtr prev = schema->patterns; + + while (prev->next != NULL) + prev = prev->next; + prev->next = ret; + } + return (ret); +} + +/** + * xmlSchematronFreePatterns: + * @patterns: a list of patterns + * + * Free a list of patterns. + */ +static void +xmlSchematronFreePatterns(xmlSchematronPatternPtr patterns) { + xmlSchematronPatternPtr next; + + while (patterns != NULL) { + next = patterns->next; + if (patterns->name != NULL) + xmlFree(patterns->name); + xmlFree(patterns); + patterns = next; + } +} + +/** + * xmlSchematronNewSchematron: + * @ctxt: a schema validation context + * + * Allocate a new Schematron structure. + * + * Returns the newly allocated structure or NULL in case or error + */ +static xmlSchematronPtr +xmlSchematronNewSchematron(xmlSchematronParserCtxtPtr ctxt) +{ + xmlSchematronPtr ret; + + ret = (xmlSchematronPtr) xmlMalloc(sizeof(xmlSchematron)); + if (ret == NULL) { + xmlSchematronPErrMemory(ctxt, "allocating schema", NULL); + return (NULL); + } + memset(ret, 0, sizeof(xmlSchematron)); + ret->dict = ctxt->dict; + xmlDictReference(ret->dict); + + return (ret); +} + +/** + * xmlSchematronFree: + * @schema: a schema structure + * + * Deallocate a Schematron structure. + */ +void +xmlSchematronFree(xmlSchematronPtr schema) +{ + if (schema == NULL) + return; + + if ((schema->doc != NULL) && (!(schema->preserve))) + xmlFreeDoc(schema->doc); + + if (schema->namespaces != NULL) + xmlFree((char **) schema->namespaces); + + xmlSchematronFreeRules(schema->rules); + xmlSchematronFreePatterns(schema->patterns); + xmlDictFree(schema->dict); + xmlFree(schema); +} + +/** + * xmlSchematronNewParserCtxt: + * @URL: the location of the schema + * + * Create an XML Schematrons parse context for that file/resource expected + * to contain an XML Schematrons file. + * + * Returns the parser context or NULL in case of error + */ +xmlSchematronParserCtxtPtr +xmlSchematronNewParserCtxt(const char *URL) +{ + xmlSchematronParserCtxtPtr ret; + + if (URL == NULL) + return (NULL); + + ret = + (xmlSchematronParserCtxtPtr) + xmlMalloc(sizeof(xmlSchematronParserCtxt)); + if (ret == NULL) { + xmlSchematronPErrMemory(NULL, "allocating schema parser context", + NULL); + return (NULL); + } + memset(ret, 0, sizeof(xmlSchematronParserCtxt)); + ret->type = XML_STRON_CTXT_PARSER; + ret->dict = xmlDictCreate(); + ret->URL = xmlDictLookup(ret->dict, (const xmlChar *) URL, -1); + ret->includes = NULL; + ret->xctxt = xmlXPathNewContext(NULL); + if (ret->xctxt == NULL) { + xmlSchematronPErrMemory(NULL, "allocating schema parser XPath context", + NULL); + xmlSchematronFreeParserCtxt(ret); + return (NULL); + } + ret->xctxt->flags = XML_XPATH_CHECKNS; + return (ret); +} + +/** + * xmlSchematronNewMemParserCtxt: + * @buffer: a pointer to a char array containing the schemas + * @size: the size of the array + * + * Create an XML Schematrons parse context for that memory buffer expected + * to contain an XML Schematrons file. + * + * Returns the parser context or NULL in case of error + */ +xmlSchematronParserCtxtPtr +xmlSchematronNewMemParserCtxt(const char *buffer, int size) +{ + xmlSchematronParserCtxtPtr ret; + + if ((buffer == NULL) || (size <= 0)) + return (NULL); + + ret = + (xmlSchematronParserCtxtPtr) + xmlMalloc(sizeof(xmlSchematronParserCtxt)); + if (ret == NULL) { + xmlSchematronPErrMemory(NULL, "allocating schema parser context", + NULL); + return (NULL); + } + memset(ret, 0, sizeof(xmlSchematronParserCtxt)); + ret->buffer = buffer; + ret->size = size; + ret->dict = xmlDictCreate(); + ret->xctxt = xmlXPathNewContext(NULL); + if (ret->xctxt == NULL) { + xmlSchematronPErrMemory(NULL, "allocating schema parser XPath context", + NULL); + xmlSchematronFreeParserCtxt(ret); + return (NULL); + } + return (ret); +} + +/** + * xmlSchematronNewDocParserCtxt: + * @doc: a preparsed document tree + * + * Create an XML Schematrons parse context for that document. + * NB. The document may be modified during the parsing process. + * + * Returns the parser context or NULL in case of error + */ +xmlSchematronParserCtxtPtr +xmlSchematronNewDocParserCtxt(xmlDocPtr doc) +{ + xmlSchematronParserCtxtPtr ret; + + if (doc == NULL) + return (NULL); + + ret = + (xmlSchematronParserCtxtPtr) + xmlMalloc(sizeof(xmlSchematronParserCtxt)); + if (ret == NULL) { + xmlSchematronPErrMemory(NULL, "allocating schema parser context", + NULL); + return (NULL); + } + memset(ret, 0, sizeof(xmlSchematronParserCtxt)); + ret->doc = doc; + ret->dict = xmlDictCreate(); + /* The application has responsibility for the document */ + ret->preserve = 1; + ret->xctxt = xmlXPathNewContext(doc); + if (ret->xctxt == NULL) { + xmlSchematronPErrMemory(NULL, "allocating schema parser XPath context", + NULL); + xmlSchematronFreeParserCtxt(ret); + return (NULL); + } + + return (ret); +} + +/** + * xmlSchematronFreeParserCtxt: + * @ctxt: the schema parser context + * + * Free the resources associated to the schema parser context + */ +void +xmlSchematronFreeParserCtxt(xmlSchematronParserCtxtPtr ctxt) +{ + if (ctxt == NULL) + return; + if (ctxt->doc != NULL && !ctxt->preserve) + xmlFreeDoc(ctxt->doc); + if (ctxt->xctxt != NULL) { + xmlXPathFreeContext(ctxt->xctxt); + } + if (ctxt->namespaces != NULL) + xmlFree((char **) ctxt->namespaces); + xmlDictFree(ctxt->dict); + xmlFree(ctxt); +} + +#if 0 +/** + * xmlSchematronPushInclude: + * @ctxt: the schema parser context + * @doc: the included document + * @cur: the current include node + * + * Add an included document + */ +static void +xmlSchematronPushInclude(xmlSchematronParserCtxtPtr ctxt, + xmlDocPtr doc, xmlNodePtr cur) +{ + if (ctxt->includes == NULL) { + ctxt->maxIncludes = 10; + ctxt->includes = (xmlNodePtr *) + xmlMalloc(ctxt->maxIncludes * 2 * sizeof(xmlNodePtr)); + if (ctxt->includes == NULL) { + xmlSchematronPErrMemory(NULL, "allocating parser includes", + NULL); + return; + } + ctxt->nbIncludes = 0; + } else if (ctxt->nbIncludes + 2 >= ctxt->maxIncludes) { + xmlNodePtr *tmp; + + tmp = (xmlNodePtr *) + xmlRealloc(ctxt->includes, ctxt->maxIncludes * 4 * + sizeof(xmlNodePtr)); + if (tmp == NULL) { + xmlSchematronPErrMemory(NULL, "allocating parser includes", + NULL); + return; + } + ctxt->includes = tmp; + ctxt->maxIncludes *= 2; + } + ctxt->includes[2 * ctxt->nbIncludes] = cur; + ctxt->includes[2 * ctxt->nbIncludes + 1] = (xmlNodePtr) doc; + ctxt->nbIncludes++; +} + +/** + * xmlSchematronPopInclude: + * @ctxt: the schema parser context + * + * Pop an include level. The included document is being freed + * + * Returns the node immediately following the include or NULL if the + * include list was empty. + */ +static xmlNodePtr +xmlSchematronPopInclude(xmlSchematronParserCtxtPtr ctxt) +{ + xmlDocPtr doc; + xmlNodePtr ret; + + if (ctxt->nbIncludes <= 0) + return(NULL); + ctxt->nbIncludes--; + doc = (xmlDocPtr) ctxt->includes[2 * ctxt->nbIncludes + 1]; + ret = ctxt->includes[2 * ctxt->nbIncludes]; + xmlFreeDoc(doc); + if (ret != NULL) + ret = ret->next; + if (ret == NULL) + return(xmlSchematronPopInclude(ctxt)); + return(ret); +} +#endif + +/** + * xmlSchematronAddNamespace: + * @ctxt: the schema parser context + * @prefix: the namespace prefix + * @ns: the namespace name + * + * Add a namespace definition in the context + */ +static void +xmlSchematronAddNamespace(xmlSchematronParserCtxtPtr ctxt, + const xmlChar *prefix, const xmlChar *ns) +{ + if (ctxt->namespaces == NULL) { + ctxt->maxNamespaces = 10; + ctxt->namespaces = (const xmlChar **) + xmlMalloc(ctxt->maxNamespaces * 2 * sizeof(const xmlChar *)); + if (ctxt->namespaces == NULL) { + xmlSchematronPErrMemory(NULL, "allocating parser namespaces", + NULL); + return; + } + ctxt->nbNamespaces = 0; + } else if (ctxt->nbNamespaces + 2 >= ctxt->maxNamespaces) { + const xmlChar **tmp; + + tmp = (const xmlChar **) + xmlRealloc((xmlChar **) ctxt->namespaces, ctxt->maxNamespaces * 4 * + sizeof(const xmlChar *)); + if (tmp == NULL) { + xmlSchematronPErrMemory(NULL, "allocating parser namespaces", + NULL); + return; + } + ctxt->namespaces = tmp; + ctxt->maxNamespaces *= 2; + } + ctxt->namespaces[2 * ctxt->nbNamespaces] = + xmlDictLookup(ctxt->dict, ns, -1); + ctxt->namespaces[2 * ctxt->nbNamespaces + 1] = + xmlDictLookup(ctxt->dict, prefix, -1); + ctxt->nbNamespaces++; + ctxt->namespaces[2 * ctxt->nbNamespaces] = NULL; + ctxt->namespaces[2 * ctxt->nbNamespaces + 1] = NULL; + +} + +/** + * xmlSchematronParseRule: + * @ctxt: a schema validation context + * @rule: the rule node + * + * parse a rule element + */ +static void +xmlSchematronParseRule(xmlSchematronParserCtxtPtr ctxt, + xmlSchematronPatternPtr pattern, + xmlNodePtr rule) +{ + xmlNodePtr cur; + int nbChecks = 0; + xmlChar *test; + xmlChar *context; + xmlChar *report; + xmlSchematronRulePtr ruleptr; + xmlSchematronTestPtr testptr; + + if ((ctxt == NULL) || (rule == NULL)) return; + + context = xmlGetNoNsProp(rule, BAD_CAST "context"); + if (context == NULL) { + xmlSchematronPErr(ctxt, rule, + XML_SCHEMAP_NOROOT, + "rule has no context attribute", + NULL, NULL); + return; + } else if (context[0] == 0) { + xmlSchematronPErr(ctxt, rule, + XML_SCHEMAP_NOROOT, + "rule has an empty context attribute", + NULL, NULL); + xmlFree(context); + return; + } else { + ruleptr = xmlSchematronAddRule(ctxt, ctxt->schema, pattern, + rule, context, NULL); + if (ruleptr == NULL) { + xmlFree(context); + return; + } + } + + cur = rule->children; + NEXT_SCHEMATRON(cur); + while (cur != NULL) { + if (IS_SCHEMATRON(cur, "assert")) { + nbChecks++; + test = xmlGetNoNsProp(cur, BAD_CAST "test"); + if (test == NULL) { + xmlSchematronPErr(ctxt, cur, + XML_SCHEMAP_NOROOT, + "assert has no test attribute", + NULL, NULL); + } else if (test[0] == 0) { + xmlSchematronPErr(ctxt, cur, + XML_SCHEMAP_NOROOT, + "assert has an empty test attribute", + NULL, NULL); + xmlFree(test); + } else { + /* TODO will need dynamic processing instead */ + report = xmlNodeGetContent(cur); + + testptr = xmlSchematronAddTest(ctxt, XML_SCHEMATRON_ASSERT, + ruleptr, cur, test, report); + if (testptr == NULL) + xmlFree(test); + } + } else if (IS_SCHEMATRON(cur, "report")) { + nbChecks++; + test = xmlGetNoNsProp(cur, BAD_CAST "test"); + if (test == NULL) { + xmlSchematronPErr(ctxt, cur, + XML_SCHEMAP_NOROOT, + "assert has no test attribute", + NULL, NULL); + } else if (test[0] == 0) { + xmlSchematronPErr(ctxt, cur, + XML_SCHEMAP_NOROOT, + "assert has an empty test attribute", + NULL, NULL); + xmlFree(test); + } else { + /* TODO will need dynamic processing instead */ + report = xmlNodeGetContent(cur); + + testptr = xmlSchematronAddTest(ctxt, XML_SCHEMATRON_REPORT, + ruleptr, cur, test, report); + if (testptr == NULL) + xmlFree(test); + } + } else { + xmlSchematronPErr(ctxt, cur, + XML_SCHEMAP_NOROOT, + "Expecting an assert or a report element instead of %s", + cur->name, NULL); + } + cur = cur->next; + NEXT_SCHEMATRON(cur); + } + if (nbChecks == 0) { + xmlSchematronPErr(ctxt, rule, + XML_SCHEMAP_NOROOT, + "rule has no assert nor report element", NULL, NULL); + } +} + +/** + * xmlSchematronParsePattern: + * @ctxt: a schema validation context + * @pat: the pattern node + * + * parse a pattern element + */ +static void +xmlSchematronParsePattern(xmlSchematronParserCtxtPtr ctxt, xmlNodePtr pat) +{ + xmlNodePtr cur; + xmlSchematronPatternPtr pattern; + int nbRules = 0; + xmlChar *id; + + if ((ctxt == NULL) || (pat == NULL)) return; + + id = xmlGetNoNsProp(pat, BAD_CAST "id"); + if (id == NULL) { + id = xmlGetNoNsProp(pat, BAD_CAST "name"); + } + pattern = xmlSchematronAddPattern(ctxt, ctxt->schema, pat, id); + if (pattern == NULL) { + if (id != NULL) + xmlFree(id); + return; + } + cur = pat->children; + NEXT_SCHEMATRON(cur); + while (cur != NULL) { + if (IS_SCHEMATRON(cur, "rule")) { + xmlSchematronParseRule(ctxt, pattern, cur); + nbRules++; + } else { + xmlSchematronPErr(ctxt, cur, + XML_SCHEMAP_NOROOT, + "Expecting a rule element instead of %s", cur->name, NULL); + } + cur = cur->next; + NEXT_SCHEMATRON(cur); + } + if (nbRules == 0) { + xmlSchematronPErr(ctxt, pat, + XML_SCHEMAP_NOROOT, + "Pattern has no rule element", NULL, NULL); + } +} + +#if 0 +/** + * xmlSchematronLoadInclude: + * @ctxt: a schema validation context + * @cur: the include element + * + * Load the include document, Push the current pointer + * + * Returns the updated node pointer + */ +static xmlNodePtr +xmlSchematronLoadInclude(xmlSchematronParserCtxtPtr ctxt, xmlNodePtr cur) +{ + xmlNodePtr ret = NULL; + xmlDocPtr doc = NULL; + xmlChar *href = NULL; + xmlChar *base = NULL; + xmlChar *URI = NULL; + + if ((ctxt == NULL) || (cur == NULL)) + return(NULL); + + href = xmlGetNoNsProp(cur, BAD_CAST "href"); + if (href == NULL) { + xmlSchematronPErr(ctxt, cur, + XML_SCHEMAP_NOROOT, + "Include has no href attribute", NULL, NULL); + return(cur->next); + } + + /* do the URI base composition, load and find the root */ + base = xmlNodeGetBase(cur->doc, cur); + URI = xmlBuildURI(href, base); + doc = xmlReadFile((const char *) URI, NULL, SCHEMATRON_PARSE_OPTIONS); + if (doc == NULL) { + xmlSchematronPErr(ctxt, cur, + XML_SCHEMAP_FAILED_LOAD, + "could not load include '%s'.\n", + URI, NULL); + goto done; + } + ret = xmlDocGetRootElement(doc); + if (ret == NULL) { + xmlSchematronPErr(ctxt, cur, + XML_SCHEMAP_FAILED_LOAD, + "could not find root from include '%s'.\n", + URI, NULL); + goto done; + } + + /* Success, push the include for rollback on exit */ + xmlSchematronPushInclude(ctxt, doc, cur); + +done: + if (ret == NULL) { + if (doc != NULL) + xmlFreeDoc(doc); + } + xmlFree(href); + if (base != NULL) + xmlFree(base); + if (URI != NULL) + xmlFree(URI); + return(ret); +} +#endif + +/** + * xmlSchematronParse: + * @ctxt: a schema validation context + * + * parse a schema definition resource and build an internal + * XML Shema struture which can be used to validate instances. + * + * Returns the internal XML Schematron structure built from the resource or + * NULL in case of error + */ +xmlSchematronPtr +xmlSchematronParse(xmlSchematronParserCtxtPtr ctxt) +{ + xmlSchematronPtr ret = NULL; + xmlDocPtr doc; + xmlNodePtr root, cur; + int preserve = 0; + + if (ctxt == NULL) + return (NULL); + + ctxt->nberrors = 0; + + /* + * First step is to parse the input document into an DOM/Infoset + */ + if (ctxt->URL != NULL) { + doc = xmlReadFile((const char *) ctxt->URL, NULL, + SCHEMATRON_PARSE_OPTIONS); + if (doc == NULL) { + xmlSchematronPErr(ctxt, NULL, + XML_SCHEMAP_FAILED_LOAD, + "xmlSchematronParse: could not load '%s'.\n", + ctxt->URL, NULL); + return (NULL); + } + ctxt->preserve = 0; + } else if (ctxt->buffer != NULL) { + doc = xmlReadMemory(ctxt->buffer, ctxt->size, NULL, NULL, + SCHEMATRON_PARSE_OPTIONS); + if (doc == NULL) { + xmlSchematronPErr(ctxt, NULL, + XML_SCHEMAP_FAILED_PARSE, + "xmlSchematronParse: could not parse.\n", + NULL, NULL); + return (NULL); + } + doc->URL = xmlStrdup(BAD_CAST "in_memory_buffer"); + ctxt->URL = xmlDictLookup(ctxt->dict, BAD_CAST "in_memory_buffer", -1); + ctxt->preserve = 0; + } else if (ctxt->doc != NULL) { + doc = ctxt->doc; + preserve = 1; + ctxt->preserve = 1; + } else { + xmlSchematronPErr(ctxt, NULL, + XML_SCHEMAP_NOTHING_TO_PARSE, + "xmlSchematronParse: could not parse.\n", + NULL, NULL); + return (NULL); + } + + /* + * Then extract the root and Schematron parse it + */ + root = xmlDocGetRootElement(doc); + if (root == NULL) { + xmlSchematronPErr(ctxt, (xmlNodePtr) doc, + XML_SCHEMAP_NOROOT, + "The schema has no document element.\n", NULL, NULL); + if (!preserve) { + xmlFreeDoc(doc); + } + return (NULL); + } + + if (!IS_SCHEMATRON(root, "schema")) { + xmlSchematronPErr(ctxt, root, + XML_SCHEMAP_NOROOT, + "The XML document '%s' is not a XML schematron document", + ctxt->URL, NULL); + goto exit; + } + ret = xmlSchematronNewSchematron(ctxt); + if (ret == NULL) + goto exit; + ctxt->schema = ret; + + /* + * scan the schema elements + */ + cur = root->children; + NEXT_SCHEMATRON(cur); + if (IS_SCHEMATRON(cur, "title")) { + xmlChar *title = xmlNodeGetContent(cur); + if (title != NULL) { + ret->title = xmlDictLookup(ret->dict, title, -1); + xmlFree(title); + } + cur = cur->next; + NEXT_SCHEMATRON(cur); + } + while (IS_SCHEMATRON(cur, "ns")) { + xmlChar *prefix = xmlGetNoNsProp(cur, BAD_CAST "prefix"); + xmlChar *uri = xmlGetNoNsProp(cur, BAD_CAST "uri"); + if ((uri == NULL) || (uri[0] == 0)) { + xmlSchematronPErr(ctxt, cur, + XML_SCHEMAP_NOROOT, + "ns element has no uri", NULL, NULL); + } + if ((prefix == NULL) || (prefix[0] == 0)) { + xmlSchematronPErr(ctxt, cur, + XML_SCHEMAP_NOROOT, + "ns element has no prefix", NULL, NULL); + } + if ((prefix) && (uri)) { + xmlXPathRegisterNs(ctxt->xctxt, prefix, uri); + xmlSchematronAddNamespace(ctxt, prefix, uri); + ret->nbNs++; + } + if (uri) + xmlFree(uri); + if (prefix) + xmlFree(prefix); + cur = cur->next; + NEXT_SCHEMATRON(cur); + } + while (cur != NULL) { + if (IS_SCHEMATRON(cur, "pattern")) { + xmlSchematronParsePattern(ctxt, cur); + ret->nbPattern++; + } else { + xmlSchematronPErr(ctxt, cur, + XML_SCHEMAP_NOROOT, + "Expecting a pattern element instead of %s", cur->name, NULL); + } + cur = cur->next; + NEXT_SCHEMATRON(cur); + } + if (ret->nbPattern == 0) { + xmlSchematronPErr(ctxt, root, + XML_SCHEMAP_NOROOT, + "The schematron document '%s' has no pattern", + ctxt->URL, NULL); + goto exit; + } + /* the original document must be kept for reporting */ + ret->doc = doc; + if (preserve) { + ret->preserve = 1; + } + preserve = 1; + +exit: + if (!preserve) { + xmlFreeDoc(doc); + } + if (ret != NULL) { + if (ctxt->nberrors != 0) { + xmlSchematronFree(ret); + ret = NULL; + } else { + ret->namespaces = ctxt->namespaces; + ret->nbNamespaces = ctxt->nbNamespaces; + ctxt->namespaces = NULL; + } + } + return (ret); +} + +/************************************************************************ + * * + * Schematrontron Reports handler * + * * + ************************************************************************/ + +static xmlNodePtr +xmlSchematronGetNode(xmlSchematronValidCtxtPtr ctxt, + xmlNodePtr cur, const xmlChar *xpath) { + xmlNodePtr node = NULL; + xmlXPathObjectPtr ret; + + if ((ctxt == NULL) || (cur == NULL) || (xpath == NULL)) + return(NULL); + + ctxt->xctxt->doc = cur->doc; + ctxt->xctxt->node = cur; + ret = xmlXPathEval(xpath, ctxt->xctxt); + if (ret == NULL) + return(NULL); + + if ((ret->type == XPATH_NODESET) && + (ret->nodesetval != NULL) && (ret->nodesetval->nodeNr > 0)) + node = ret->nodesetval->nodeTab[0]; + + xmlXPathFreeObject(ret); + return(node); +} + +/** + * xmlSchematronReportOutput: + * @ctxt: the validation context + * @cur: the current node tested + * @msg: the message output + * + * Output part of the report to whatever channel the user selected + */ +static void +xmlSchematronReportOutput(xmlSchematronValidCtxtPtr ctxt ATTRIBUTE_UNUSED, + xmlNodePtr cur ATTRIBUTE_UNUSED, + const char *msg) { + /* TODO */ + fprintf(stderr, "%s", msg); +} + +/** + * xmlSchematronFormatReport: + * @ctxt: the validation context + * @test: the test node + * @cur: the current node tested + * + * Build the string being reported to the user. + * + * Returns a report string or NULL in case of error. The string needs + * to be deallocated by teh caller + */ +static xmlChar * +xmlSchematronFormatReport(xmlSchematronValidCtxtPtr ctxt, + xmlNodePtr test, xmlNodePtr cur) { + xmlChar *ret = NULL; + xmlNodePtr child, node; + + if ((test == NULL) || (cur == NULL)) + return(ret); + + child = test->children; + while (child != NULL) { + if ((child->type == XML_TEXT_NODE) || + (child->type == XML_CDATA_SECTION_NODE)) + ret = xmlStrcat(ret, child->content); + else if (IS_SCHEMATRON(child, "name")) { + xmlChar *path; + + path = xmlGetNoNsProp(child, BAD_CAST "path"); + + node = cur; + if (path != NULL) { + node = xmlSchematronGetNode(ctxt, cur, path); + if (node == NULL) + node = cur; + xmlFree(path); + } + + if ((node->ns == NULL) || (node->ns->prefix == NULL)) + ret = xmlStrcat(ret, node->name); + else { + ret = xmlStrcat(ret, node->ns->prefix); + ret = xmlStrcat(ret, BAD_CAST ":"); + ret = xmlStrcat(ret, node->name); + } + } else { + child = child->next; + continue; + } + + /* + * remove superfluous \n + */ + if (ret != NULL) { + int len = xmlStrlen(ret); + xmlChar c; + + if (len > 0) { + c = ret[len - 1]; + if ((c == ' ') || (c == '\n') || (c == '\r') || (c == '\t')) { + while ((c == ' ') || (c == '\n') || + (c == '\r') || (c == '\t')) { + len--; + if (len == 0) + break; + c = ret[len - 1]; + } + ret[len] = ' '; + ret[len + 1] = 0; + } + } + } + + child = child->next; + } + return(ret); +} + +/** + * xmlSchematronReportSuccess: + * @ctxt: the validation context + * @test: the compiled test + * @cur: the current node tested + * @success: boolean value for the result + * + * called from the validation engine when an assert or report test have + * been done. + */ +static void +xmlSchematronReportSuccess(xmlSchematronValidCtxtPtr ctxt, + xmlSchematronTestPtr test, xmlNodePtr cur, xmlSchematronPatternPtr pattern, int success) { + if ((ctxt == NULL) || (cur == NULL) || (test == NULL)) + return; + /* if quiet and not SVRL report only failures */ + if ((ctxt->flags & XML_SCHEMATRON_OUT_QUIET) && + ((ctxt->flags & XML_SCHEMATRON_OUT_XML) == 0) && + (test->type == XML_SCHEMATRON_REPORT)) + return; + if (ctxt->flags & XML_SCHEMATRON_OUT_XML) { + TODO + } else { + xmlChar *path; + char msg[1000]; + long line; + const xmlChar *report = NULL; + + if (((test->type == XML_SCHEMATRON_REPORT) & (!success)) || + ((test->type == XML_SCHEMATRON_ASSERT) & (success))) + return; + line = xmlGetLineNo(cur); + path = xmlGetNodePath(cur); + if (path == NULL) + path = (xmlChar *) cur->name; +#if 0 + if ((test->report != NULL) && (test->report[0] != 0)) + report = test->report; +#endif + if (test->node != NULL) + report = xmlSchematronFormatReport(ctxt, test->node, cur); + if (report == NULL) { + if (test->type == XML_SCHEMATRON_ASSERT) { + report = xmlStrdup((const xmlChar *) "node failed assert"); + } else { + report = xmlStrdup((const xmlChar *) "node failed report"); + } + } + snprintf(msg, 999, "%s line %ld: %s\n", (const char *) path, + line, (const char *) report); + + if (ctxt->flags & XML_SCHEMATRON_OUT_ERROR) { + xmlStructuredErrorFunc schannel = NULL; + xmlGenericErrorFunc channel = NULL; + void *data = NULL; + + if (ctxt != NULL) { + if (ctxt->serror != NULL) + schannel = ctxt->serror; + else + channel = ctxt->error; + data = ctxt->userData; + } + + __xmlRaiseError(schannel, channel, data, + NULL, cur, XML_FROM_SCHEMATRONV, + (test->type == XML_SCHEMATRON_ASSERT)?XML_SCHEMATRONV_ASSERT:XML_SCHEMATRONV_REPORT, + XML_ERR_ERROR, NULL, line, + (pattern == NULL)?NULL:((const char *) pattern->name), + (const char *) path, + (const char *) report, 0, 0, + "%s", msg); + } else { + xmlSchematronReportOutput(ctxt, cur, &msg[0]); + } + + xmlFree((char *) report); + + if ((path != NULL) && (path != (xmlChar *) cur->name)) + xmlFree(path); + } +} + +/** + * xmlSchematronReportPattern: + * @ctxt: the validation context + * @pattern: the current pattern + * + * called from the validation engine when starting to check a pattern + */ +static void +xmlSchematronReportPattern(xmlSchematronValidCtxtPtr ctxt, + xmlSchematronPatternPtr pattern) { + if ((ctxt == NULL) || (pattern == NULL)) + return; + if ((ctxt->flags & XML_SCHEMATRON_OUT_QUIET) || (ctxt->flags & XML_SCHEMATRON_OUT_ERROR)) /* Error gives pattern name as part of error */ + return; + if (ctxt->flags & XML_SCHEMATRON_OUT_XML) { + TODO + } else { + char msg[1000]; + + if (pattern->name == NULL) + return; + snprintf(msg, 999, "Pattern: %s\n", (const char *) pattern->name); + xmlSchematronReportOutput(ctxt, NULL, &msg[0]); + } +} + + +/************************************************************************ + * * + * Validation against a Schematrontron * + * * + ************************************************************************/ + +/** + * xmlSchematronSetValidStructuredErrors: + * @ctxt: a Schematron validation context + * @serror: the structured error function + * @ctx: the functions context + * + * Set the structured error callback + */ +void +xmlSchematronSetValidStructuredErrors(xmlSchematronValidCtxtPtr ctxt, + xmlStructuredErrorFunc serror, void *ctx) +{ + if (ctxt == NULL) + return; + ctxt->serror = serror; + ctxt->error = NULL; + ctxt->warning = NULL; + ctxt->userData = ctx; +} + +/** + * xmlSchematronNewValidCtxt: + * @schema: a precompiled XML Schematrons + * @options: a set of xmlSchematronValidOptions + * + * Create an XML Schematrons validation context based on the given schema. + * + * Returns the validation context or NULL in case of error + */ +xmlSchematronValidCtxtPtr +xmlSchematronNewValidCtxt(xmlSchematronPtr schema, int options) +{ + int i; + xmlSchematronValidCtxtPtr ret; + + ret = (xmlSchematronValidCtxtPtr) xmlMalloc(sizeof(xmlSchematronValidCtxt)); + if (ret == NULL) { + xmlSchematronVErrMemory(NULL, "allocating validation context", + NULL); + return (NULL); + } + memset(ret, 0, sizeof(xmlSchematronValidCtxt)); + ret->type = XML_STRON_CTXT_VALIDATOR; + ret->schema = schema; + ret->xctxt = xmlXPathNewContext(NULL); + ret->flags = options; + if (ret->xctxt == NULL) { + xmlSchematronPErrMemory(NULL, "allocating schema parser XPath context", + NULL); + xmlSchematronFreeValidCtxt(ret); + return (NULL); + } + for (i = 0;i < schema->nbNamespaces;i++) { + if ((schema->namespaces[2 * i] == NULL) || + (schema->namespaces[2 * i + 1] == NULL)) + break; + xmlXPathRegisterNs(ret->xctxt, schema->namespaces[2 * i + 1], + schema->namespaces[2 * i]); + } + return (ret); +} + +/** + * xmlSchematronFreeValidCtxt: + * @ctxt: the schema validation context + * + * Free the resources associated to the schema validation context + */ +void +xmlSchematronFreeValidCtxt(xmlSchematronValidCtxtPtr ctxt) +{ + if (ctxt == NULL) + return; + if (ctxt->xctxt != NULL) + xmlXPathFreeContext(ctxt->xctxt); + if (ctxt->dict != NULL) + xmlDictFree(ctxt->dict); + xmlFree(ctxt); +} + +static xmlNodePtr +xmlSchematronNextNode(xmlNodePtr cur) { + if (cur->children != NULL) { + /* + * Do not descend on entities declarations + */ + if (cur->children->type != XML_ENTITY_DECL) { + cur = cur->children; + /* + * Skip DTDs + */ + if (cur->type != XML_DTD_NODE) + return(cur); + } + } + + while (cur->next != NULL) { + cur = cur->next; + if ((cur->type != XML_ENTITY_DECL) && + (cur->type != XML_DTD_NODE)) + return(cur); + } + + do { + cur = cur->parent; + if (cur == NULL) break; + if (cur->type == XML_DOCUMENT_NODE) return(NULL); + if (cur->next != NULL) { + cur = cur->next; + return(cur); + } + } while (cur != NULL); + return(cur); +} + +/** + * xmlSchematronRunTest: + * @ctxt: the schema validation context + * @test: the current test + * @instance: the document instace tree + * @cur: the current node in the instance + * + * Validate a rule against a tree instance at a given position + * + * Returns 1 in case of success, 0 if error and -1 in case of internal error + */ +static int +xmlSchematronRunTest(xmlSchematronValidCtxtPtr ctxt, + xmlSchematronTestPtr test, xmlDocPtr instance, xmlNodePtr cur, xmlSchematronPatternPtr pattern) +{ + xmlXPathObjectPtr ret; + int failed; + + failed = 0; + ctxt->xctxt->doc = instance; + ctxt->xctxt->node = cur; + ret = xmlXPathCompiledEval(test->comp, ctxt->xctxt); + if (ret == NULL) { + failed = 1; + } else { + switch (ret->type) { + case XPATH_XSLT_TREE: + case XPATH_NODESET: + if ((ret->nodesetval == NULL) || + (ret->nodesetval->nodeNr == 0)) + failed = 1; + break; + case XPATH_BOOLEAN: + failed = !ret->boolval; + break; + case XPATH_NUMBER: + if ((xmlXPathIsNaN(ret->floatval)) || + (ret->floatval == 0.0)) + failed = 1; + break; + case XPATH_STRING: + if ((ret->stringval == NULL) || + (ret->stringval[0] == 0)) + failed = 1; + break; + case XPATH_UNDEFINED: + case XPATH_POINT: + case XPATH_RANGE: + case XPATH_LOCATIONSET: + case XPATH_USERS: + failed = 1; + break; + } + xmlXPathFreeObject(ret); + } + if ((failed) && (test->type == XML_SCHEMATRON_ASSERT)) + ctxt->nberrors++; + else if ((!failed) && (test->type == XML_SCHEMATRON_REPORT)) + ctxt->nberrors++; + + xmlSchematronReportSuccess(ctxt, test, cur, pattern, !failed); + + return(!failed); +} + +/** + * xmlSchematronValidateDoc: + * @ctxt: the schema validation context + * @instance: the document instace tree + * + * Validate a tree instance against the schematron + * + * Returns 0 in case of success, -1 in case of internal error + * and an error count otherwise. + */ +int +xmlSchematronValidateDoc(xmlSchematronValidCtxtPtr ctxt, xmlDocPtr instance) +{ + xmlNodePtr cur, root; + xmlSchematronPatternPtr pattern; + xmlSchematronRulePtr rule; + xmlSchematronTestPtr test; + + if ((ctxt == NULL) || (ctxt->schema == NULL) || + (ctxt->schema->rules == NULL) || (instance == NULL)) + return(-1); + ctxt->nberrors = 0; + root = xmlDocGetRootElement(instance); + if (root == NULL) { + TODO + ctxt->nberrors++; + return(1); + } + if ((ctxt->flags & XML_SCHEMATRON_OUT_QUIET) || + (ctxt->flags == 0)) { + /* + * we are just trying to assert the validity of the document, + * speed primes over the output, run in a single pass + */ + cur = root; + while (cur != NULL) { + rule = ctxt->schema->rules; + while (rule != NULL) { + if (xmlPatternMatch(rule->pattern, cur) == 1) { + test = rule->tests; + while (test != NULL) { + xmlSchematronRunTest(ctxt, test, instance, cur, (xmlSchematronPatternPtr)rule->pattern); + test = test->next; + } + } + rule = rule->next; + } + + cur = xmlSchematronNextNode(cur); + } + } else { + /* + * Process all contexts one at a time + */ + pattern = ctxt->schema->patterns; + + while (pattern != NULL) { + xmlSchematronReportPattern(ctxt, pattern); + + /* + * TODO convert the pattern rule to a direct XPath and + * compute directly instead of using the pattern matching + * over the full document... + * Check the exact semantic + */ + cur = root; + while (cur != NULL) { + rule = pattern->rules; + while (rule != NULL) { + if (xmlPatternMatch(rule->pattern, cur) == 1) { + test = rule->tests; + while (test != NULL) { + xmlSchematronRunTest(ctxt, test, instance, cur, pattern); + test = test->next; + } + } + rule = rule->patnext; + } + + cur = xmlSchematronNextNode(cur); + } + pattern = pattern->next; + } + } + return(ctxt->nberrors); +} + +#ifdef STANDALONE +int +main(void) +{ + int ret; + xmlDocPtr instance; + xmlSchematronParserCtxtPtr pctxt; + xmlSchematronValidCtxtPtr vctxt; + xmlSchematronPtr schema = NULL; + + pctxt = xmlSchematronNewParserCtxt("tst.sct"); + if (pctxt == NULL) { + fprintf(stderr, "failed to build schematron parser\n"); + } else { + schema = xmlSchematronParse(pctxt); + if (schema == NULL) { + fprintf(stderr, "failed to compile schematron\n"); + } + xmlSchematronFreeParserCtxt(pctxt); + } + instance = xmlReadFile("tst.sct", NULL, + XML_PARSE_NOENT | XML_PARSE_NOCDATA); + if (instance == NULL) { + fprintf(stderr, "failed to parse instance\n"); + } + if ((schema != NULL) && (instance != NULL)) { + vctxt = xmlSchematronNewValidCtxt(schema); + if (vctxt == NULL) { + fprintf(stderr, "failed to build schematron validator\n"); + } else { + ret = xmlSchematronValidateDoc(vctxt, instance); + xmlSchematronFreeValidCtxt(vctxt); + } + } + xmlSchematronFree(schema); + xmlFreeDoc(instance); + + xmlCleanupParser(); + xmlMemoryDump(); + + return (0); +} +#endif +#define bottom_schematron +#include "elfgcchack.h" +#endif /* LIBXML_SCHEMATRON_ENABLED */ diff --git a/test/HTML/53867.html b/test/HTML/53867.html new file mode 100644 index 0000000..ac27999 --- /dev/null +++ b/test/HTML/53867.html @@ -0,0 +1,69 @@ + + + + + diff --git a/test/HTML/758605.html b/test/HTML/758605.html new file mode 100644 index 0000000..9b1b3c2 --- /dev/null +++ b/test/HTML/758605.html @@ -0,0 +1 @@ +&:ê diff --git a/test/HTML/758606.html b/test/HTML/758606.html new file mode 100644 index 0000000..01a013c --- /dev/null +++ b/test/HTML/758606.html @@ -0,0 +1 @@ + +Welcome to Copernic.com + + + + + + + + <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> + 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 @@ + + +BP6.com #1 online resource for the BP6 Mobo.... + + + + + + + + + + +

    +

    + + + + + + + + +

    +

    Monday, July 31st, 2000

    + + +
    +
    +

    + + + +

    +
    + + + + + + + + + +
    +

    Abit BP6 Motherboard specification and information.
    BP6 Specs +

    +

    How to cool the BX Chipset on your BP6.
    BX Cooling +

    +

    The U;timate Gaming Contest - Coming Soon!
    UGM Contest +

    +

    Cooling & Heatsink review for the BP6.
    Heatsinks +

    +

    BP6 101 - Class is now in session. Welcome newbies!
    BP6 101 +

    +

    Install guide for installing Windows 2000 on the BP6
    Win2k Install +

    +

    Taking a first look at the Abit Linux release called
    Gentus +

    + + + + + +
    + + + +

    REVIEWS
    +
    +
    BP6 Reviews
    BP6 Watercooling
    BX Chipset Cooling
    Benchmarks
    BP6FSB Utility
    PowerLeap NEO S370
    SETI on the BP6
    Golden Orbs I
    Golden Orbs II
    VTT Solution

    NAVIGATE +
    +
    News
    Online Text Chat
    Voice Chat
    Messageboard
    Temp. Converter
    Picture Gallery
    Latest BIOS
    Drivers & Files
    UGM of the week
    BP6 Contest

    OTHER STUFF + +
    +
    Who is Tim?
    Contact BP6.com
    Affiliates Section
    Sponsors Section
    Links

    PC SPECIALS +
    +
    Vendor + Specials


    Pic of the day +
    + +
    +

    No picture is available for today.


    +


    +
    +

    + + + +
    +
    +

    Headlines
    Chat + with ABIT - 8:09PM PDT
    Fixed + wallpaper - 11:47PM PDT
    Seti + update - 10:40PM PDT
    Judge + gives Napster the Boot!! - 2:10PM PDT
    Ram + Sinks.. more cooling for small places. - 8:54AM + PDT
    is + it [H]ard? - 9:19PM PDT
    WiLd + CaSe!! - 1:40PM PDT
    What + the heck is a Peltier?!?! - 10:05AM PDT
    HELLO + EVERYONE!!! - 10:03PM PDT
    BP6 + Q3 server up and running.. - 2:06AM PDT

    + + + +
    Sunday, + July 30, 2000

    Chat with + ABIT
    Posted by Holodeck2 @ 8:09PM + PDT  0 comments +  | top
    I’m slacking a little. All game no + work makes Holodeck2 a happy boy :-)

    Wallpaper update: I got + off my lazy ass and redid the 1280x1024 wall paper, now it has the 2 + celerons.

    Fullon3d had a live chat with that Eric guy from Abit. + Submitted by: MJS

    Here’s a little clip:
    [Falcon] + BP6-2??
    [EricBoeing] We already have a micro ATX dual flip-chip + board
    [EricBoeing] but it's OEM only
    [EricBoeing] the full ATX + version should be out Septemberish


    + + + +
    Thursday, + July 27, 2000

    Fixed + wallpaper
    Posted by Holodeck2 @ 11:47PM + PDT  5 comments +  | top
    Get them now!!
    This is a + fixed bp6 wallpaper. In all the popular flavors, err... + resolutions.

    It's still the Intels Inside one with a spelling + change; from "Mothboard" to "Motherboard"

    Thanks to Matt for + pointing that out to me.
    I would also like to thank Kevin for + hosting my last batch and Radu for the previous "DUEL"/"DUAL" + error.
    And 1 more person, THANK YOU TIM for letting me borrow + your server space ;-)

    If you need a weird resolution, feel + free to e-mail me requesting + for one.
    If you have ideas or more errors to point out, mailto:Holodeck2@home.com

    800x600
    1024x768
    1152x864
    1280x1024
    1600x1200
    +

    Enjoy :-)
    +

    Holodeck2,
    [H]ard at + work on the Brand Spanking New Wallpaper.


    Seti update
    Posted by Holodeck2 @ 10:40PM + PDT  5 comments +  | top

    You like the + pic?

    Bp6 User Group Update:
    Completed 61531 + units!!
    #168 on Top 200 All Groups (Going to pass CLRC in + a few days)
    #74 on Top 200 Teams (Gaining fast on + Starfleet)

    We are flying though at the speed of light (may be + a little slower).
    Good job everyone!!

    Check this page at + least once a day for new stuff :-)


    Judge gives Napster the + Boot!!
    Posted by Holodeck2 @ 2:10PM + PDT  0 comments +  | top
    Good afternoon for everyone living in + EST. I was going to post today morning but I didn't. Here's my + story:
    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 :-)

    Judge shuts Napster down +


    Check out the Goofy guy in the suit
    He's Sean + Fanning, founder of Napster.

    Got news?? mailto:Holodeck2@home.com


    Ram Sinks.. more cooling for small + places.
    Posted by tim @ 8:54AM PDT  0 comments +  | top
    Need some cooling for your Videocard + memory to get a little extra overclockability and FPS? Overclockers Hiedout Ram Sinks They just notified + me of their new design.


    + + + +
    Wednesday, July 26, + 2000

    is it + [H]ard?
    Posted by Holodeck2 @ 9:19PM + PDT  0 comments +  | top
    Big heatsinks are good, very good. The + bigger the better.
    You can never can have a too big of heatsink + on a small chip (CPU, GPU, CHIPSET, etc)


    My overclocked + Voodoo3 2000 with a BIG mofo heatsink on top.
    Peltier and + watercooling next up :-)
    (if you pry off the heatsink you void + the warranty )

    it was originally posted on [H]ardOCP
    I’m not only a + BP6er but also a [H]ardOCPer


    WiLd CaSe!!
    Posted by Holodeck2 @ 1:40PM + PDT  8 comments +  | top
    Now this person really knows how to + keep his case cool!!
    Addin an 18" Fan!! WOW!!


    Click to go to his + site.


    What the heck is a + Peltier?!?!
    Posted by Holodeck2 @ 10:05AM + PDT  6 comments +  | top
    This is for all you people who wanted + to know what a peltier is.

    The quest fo the Perfect + Peltier

    Thanks to + TweakMax.com +

    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
    I'm not angry at anyone... + good thing I have a long fuse


    + + + +
    Tuesday, + July 25, 2000

    HELLO + EVERYONE!!!
    Posted by Holodeck2 @ 10:03PM + PDT 
    Hello + everyone, Woohoo!! I'm on!!
    Who is this Holodeck2 person + anyways?!?! Read on :-)
    I’m a regular on the bp6 messageboard, + trying to help people out with their problems.
    I’m the + self-proclaimed bp6 cooling expert, If you have a cooling idea, I’ve + probably already done it and can offer some incite.
    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 :-)
    Any Questions or comments, you can either + contact me or post it on the messageboard.

    Ways to contact + me.
    E-mail: Holodeck2@home.com (All E-mails + will be answered in 24 hours or less, I guarantee it.)
    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
    AIM: Holodeck2 (instant response + if I’m in front of my comp and not trying to frag someone)
    ICQ: 82640218 (rarely + on)

    P.S. If someone named “Digital Vortex” on either Quake 3 + or 2 frags you, it’s probably me. ;-)


    + + + +
    Monday, + July 24, 2000

    BP6 Q3 server up and + running..
    Posted by tim @ 2:06AM PDT  3 comments +  | top
    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.
    (BTW- + there are a few bot's running around in there..)


    BIOS Savior to the + rescue....
    Posted by tim @ 12:53AM PDT  2 comments +  | top
    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 "RD1 BIOS Savior" 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)
    Manufacturers Brochure (PDF Format)
    Another info page
    Available for about $20



    + + + +
    Monday, + July 17, 2000

    How To + Overclock
    Posted by DareDevil @ 4:17PM + PDT  3 comments +  | top
    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))

    How To Overclock


    The Cardcooler + XT
    Posted by DareDevil @ 4:11PM + PDT  1 comments +  | top
    Wow! I am impressed! Nevermind keeping + the CPU's cool... Keep your whole board cool!

    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.

    Check this out!

    http://www.brokenpixel.com/articles/coolerXT/cardcoolerXT_1.shtml +


    'Nerd + Inside'
    Posted by DareDevil @ 11:53AM + PDT  1 comments +  | top
    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) :-Þ

    +



    Dual PSU Wiring diagram... (preview to + Part 1 Watercooling Project)
    Posted by tim @ 12:43AM PDT  11 comments +  | top
    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. +

    View Diagram 1 here.
    View Diagram 2 here.

    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 click here.


    + + + +
    Sunday, + July 16, 2000

    RAM Overclocking? + Hmmmmm.
    Posted by DareDevil @ 9:57AM + PDT  3 comments +  | top
    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 =)

    Extreme Overclocking has tested + (overclocked) PC133 RAM to there full potential. Here's a quote I + found and the link:

    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....

    Cooked RAM... Yummie

    The + ÐÐ.


    CPU + Guide
    Posted by DareDevil @ 9:17AM + PDT  0 comments +  | top
    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:

    +
  • http://www6.tomshardware.com/howto/00q2/000412/index.html

    + + + +
    Saturday, + July 15, 2000

    Weekly CPU + Prices
    Posted by DareDevil @ 11:29AM + PDT  2 comments +  | top
    Wow, found this very useful! Wanting + to buy a new CPU? Check out this detailed price list!

    Click Here.

    Thanks Sharky + Extreme!


    Fast Wallpapers
    Posted by DareDevil @ 9:51AM + PDT  0 comments +  | top
    FAST-MHz has released some wallpapers! + Click here 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.

    In other news, we want to + finnish off all the sections at BP6.Com so, to start, we're going to + work on the Picture Gallery. To help us out, you can send in + all your cool, wierd, crazy pics that you may have to: thedaredevil@bp6.com. (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.

    Okay, that's all for now.

    The + ÐÐ.


    + + + +
    Friday, + July 14, 2000

    Hey + There!
    Posted by DareDevil @ 5:05PM + PDT  7 comments +  | top
    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 ;-) ).

    My e-mail address is killz@i82hq.com

    Ciao for + now.

    The ÐÐ.


    +
  • +
    +

    + + + +
    +
    +

    Newsletter


    +
    Search news


    News + archive
    + + + +
    + + +
    +
    +

    PC Price + Search

    +





    BP6.com Special - Enter CODE: BP6-hd in the order (notes) to receive a discount
    BP6.COM + Special
    Code:BP6-hd

    + + + +
     

    +
      + + + +
    +

    Copyright + ©1999-2000 BP6.com, All rights reserved.
    Got news? Send it to
    Tim

    + + 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 @@ +

    +a&b +a&b +a & b +

    diff --git a/test/HTML/entities2.html b/test/HTML/entities2.html new file mode 100644 index 0000000..53cc7b0 --- /dev/null +++ b/test/HTML/entities2.html @@ -0,0 +1,7 @@ + + +
    + +
    + + \ No newline at end of file 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 @@ + + + + + +README - Microsoft FrontPage 2000 Server Extensions + + + + + +

    Microsoft FrontPage 2000 Server Extensions, UNIX

    + +© Copyright Microsoft Corporation, 1999  + + +

    The FrontPage Server Extensions are a set of programs on the Web server that support: + +

      +
    • Authoring FrontPage webs
    • +
    • Administering FrontPage webs
    • +
    • Browse-time FrontPage web functionality
    • +
    + + +

    Contents 

    + +Release Notes
    +Resources for More Information +

     

    +
    +

    Release Notes

    + +

    This section provides complementary or late-breaking +information to supplement the Microsoft FrontPage Server Extensions documentation.

    + +

    Apache 1.3.4 Support
    +Upgrading from previous version of FrontPage Server Extensions
    +Uploading files into executable folders

    + + +

    Top of Page

    + + +

    Apache 1.3.4 Support

    + +

    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:

    + + +
    +
    + +ResourceConfig /dev/null 
    +AccessConfig /dev/null
    +
    + + + +

    If you have some settings stored in secondary configuration files, move them to http.conf.

    + +

    You must stop and restart the web server for your changes to http.conf to take effect.

    + + + +

    Top of Section

    + + + +

    Upgrading from previous version of FrontPage Server Extensions

    + +

    Custom entries in frontpage.cnf are not migrated to FrontPage 2000.

    + +

    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.

    + +

    Do not overwrite the FrontPage 2000 frontpage.cnf file with a frontpage.cnf file from an +earlier version of the FrontPage Server Extensions.

    + + + +

    Top of Section

    + + + +

    Uploading files into executable folders

    + + +

    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.

    + +

    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 http://officeupdate.microsoft.com/frontpage/wpp/serk/.

    + + + +

    Top of Section

    + + + +
    + + + +

    Resources for More Information

    + +

    This section lists sources of more information about the +FrontPage Server Extensions.

    + +

    Server Extensions Resource Kit
    +Server Extensions Resource Kit Update
    +Knowledge Base

    + + +

    Top of Page

    + + +

    Server Extensions Resource Kit

    + +

    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.

    + +

    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.

    + +

    Top of Section

    + + +

    Server Extensions Resource Kit Update

    + +

    For updated information about installing, setting up, and administrating the FrontPage Server +Extensions, see the Server Extensions Resource Kit Update at: http://officeupdate.microsoft.com/frontpage/wpp/serk/.

    + + +

    Top of Section

    + + +

    Microsoft Knowledge Base

    + +

    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 +http://support.microsoft.com/support/.

    + +

    Top of Section

    + + +

     

    + +
    + + diff --git a/test/HTML/html5_enc.html b/test/HTML/html5_enc.html new file mode 100644 index 0000000..3ebf491 --- /dev/null +++ b/test/HTML/html5_enc.html @@ -0,0 +1,8 @@ + + + + + +

    très

    + + 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 @@ + + + + + + +
      +
    • First item +
    • Second item, closes the first one +
    + + 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 @@ + + + + + diff --git a/test/HTML/noscript.html b/test/HTML/noscript.html new file mode 100644 index 0000000..454e943 --- /dev/null +++ b/test/HTML/noscript.html @@ -0,0 +1,10 @@ + + + + omg + + + +

    yo

    + + 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 @@ + + +
    + + diff --git a/test/HTML/python.html b/test/HTML/python.html new file mode 100644 index 0000000..51a6394 --- /dev/null +++ b/test/HTML/python.html @@ -0,0 +1,10 @@ + + + + + +Python Programming Language + + + 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 @@ + + +Regression test 1 + + +

    Regression test 1

    +

    +Ok file no problem + + 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 @@ + + +Regression test 2 + + +

    Regression test 2

    +

    +Autoclose of tag P +

    +Ok file no problem + + 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 @@ + + +Regression test 3 + + +

    Regression test 3

    +

    +Autoclose of tag P +


    +

    +Ok file no problem + + 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 @@ + + +Regression test 4 + + +

    Regression test 4

    +

    +Wrong close of tag P +


    +

    + + diff --git a/test/HTML/repeat.html b/test/HTML/repeat.html new file mode 100644 index 0000000..d6d6f97 --- /dev/null +++ b/test/HTML/repeat.html @@ -0,0 +1 @@ + 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 @@ + +Script tests + + + + + diff --git a/test/HTML/script2.html b/test/HTML/script2.html new file mode 100644 index 0000000..2606a83 --- /dev/null +++ b/test/HTML/script2.html @@ -0,0 +1,19 @@ + + + + +Test Page + + +
    + +

    + PříliÅ¡ žluÅ¥ouÄký kůň úpÄ›l Äábelksé ódy; +

    +
    + + + 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 @@ + + Linux Today + + +
    + + + + + + +
    +Atipa Linux solutions. Your reliable cluster, server, and workstation solution. Win a Free Celeron Linux Workstation! + + Linux Today Logo
    linux.com partner

    + +[ headlines | +features | +commercial | +security | +jobs | +volt | +contribute/submit | +advertise | +search | +site digests | +mailing lists | +about us | +link us ] +
    +

    + + 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 @@ + + + + +

    Component Package diagram ProblemDomain

    +


    +
    +
    Stereotype problem domain
    +
    Alias Problem Domain
    +
    Note
    The Problem Domain package is the model behind the Human +
    Interface, thats stores and manipulates the Family Tree. +
    +


    +
    + +

    Class HumanInterface.FamilyFrame

    +

    Class ProblemDomain.Birth

    +

    Class ProblemDomain.Death

    +

    Class ProblemDomain.Divorce

    +

    Class ProblemDomain.Family

    +

    Class ProblemDomain.Individual

    +

    Class ProblemDomain.LifeEvent

    +

    Class ProblemDomain.Marriage

    +

    Class ProblemDomain.Note

    +
    + +

    Links

    + + + + + + + diff --git a/test/HTML/utf8bug.html b/test/HTML/utf8bug.html new file mode 100644 index 0000000..c3cface --- /dev/null +++ b/test/HTML/utf8bug.html @@ -0,0 +1,182 @@ + + + + + + + + +شهير بلاگ + + + + + + + + + + + + +
    + + + + + +
    +  
    +
    + +
    + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Not Recognized +

    Outside the DTD, the % character has no +special significance; thus, what would be parameter entity references in the +DTD are not recognized as markup in content. +Similarly, the names of unparsed entities are not recognized except +when they appear in the value of an appropriately declared attribute. +

    +
    + +Included +

    An entity is +included when its +replacement text 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 +character data +and (except for parameter entities) markup, +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 "AT&amp;T;" expands to +"AT&T;" and the remaining ampersand is not recognized +as an entity-reference delimiter.) +A character reference is included when the indicated +character is processed in place of the reference itself. +

    +
    + +Included If Validating +

    When an XML processor recognizes a reference to a parsed entity, in order +to validate +the document, the processor must +include its +replacement text. +If the entity is external, and the processor is not +attempting to validate the XML document, the +processor may, 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.

    +

    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. +

    +
    + +Forbidden +

    The following are forbidden, and constitute +fatal errors: + +

    the appearance of a reference to an +unparsed entity. +

    +

    the appearance of any character or general-entity reference in the +DTD except within an EntityValue or +AttValue.

    +

    a reference to an external entity in an attribute value.

    +
    + +

    +
    + +Included in Literal +

    When an entity reference appears in an +attribute value, or a parameter entity reference appears in a literal entity +value, its replacement text 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: + +]]> +while this is not: +<!ENTITY EndAttr "27'" > +<element attribute='a-&EndAttr;> +

    + +Notify +

    When the name of an unparsed +entity appears as a token in the +value of an attribute of declared type ENTITY or ENTITIES, +a validating processor must inform the +application of the system +and public (if any) +identifiers for both the entity and its associated +notation.

    +
    + +Bypassed +

    When a general entity reference appears in the +EntityValue in an entity declaration, +it is bypassed and left as is.

    +
    + +Included as PE +

    Just as with external parsed entities, parameter entities +need only be included if +validating. +When a parameter-entity reference is recognized in the DTD +and included, its +replacement +text 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. +

    +
    + + + +Construction of Internal Entity Replacement Text +

    In discussing the treatment +of internal entities, it is +useful to distinguish two forms of the entity's value. +The literal +entity value is the quoted string actually +present in the entity declaration, corresponding to the +non-terminal EntityValue. +The replacement +text is the content of the entity, after +replacement of character references and parameter-entity +references. +

    + +

    The literal entity value +as given in an internal entity declaration +(EntityValue) 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 +included as described above +must contain the replacement text 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: + + + +]]> +then the replacement text for the entity "book" is: +La Peste: Albert Camus, +© 1947 Éditions Gallimard. &rights; +The general-entity reference "&rights;" would be expanded +should the reference "&book;" appear in the document's +content or an attribute value.

    +

    These simple rules may have complex interactions; for a detailed +discussion of a difficult example, see +. +

    + +
    + +Predefined Entities +

    Entity and character +references can both be used to escape 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 +"&#60;" and "&#38;" may be used to +escape < and & when they occur +in character data.

    +

    All XML processors must recognize these entities whether they +are declared or not. +For interoperability, +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. + + + + + +]]> +Note that the < and & characters +in the declarations of "lt" and "amp" +are doubly escaped to meet the requirement that entity replacement +be well-formed. +

    +
    + + +Notation Declarations + +

    Notations identify by +name the format of unparsed +entities, the +format of elements which bear a notation attribute, +or the application to which +a processing instruction is +addressed.

    +

    +Notation declarations +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. + +Notation Declarations +NotationDecl +'<!NOTATION' S Name +S +(ExternalID | +PublicID) +S? '>' +PublicID +'PUBLIC' S +PubidLiteral + + +

    +

    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 +system identifier, +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.)

    +
    + + + +Document Entity + +

    The document +entity serves as the root of the entity +tree and a starting-point for an XML +processor. +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.

    +
    + + + + + + +Conformance + + +Validating and Non-Validating Processors +

    Conforming XML processors fall into two +classes: validating and non-validating.

    +

    Validating and non-validating processors alike must report +violations of this specification's well-formedness constraints +in the content of the +document entity and any +other parsed entities that +they read.

    +

    +Validating processors must report +violations of the constraints expressed by the declarations in the +DTD, and +failures to fulfill the validity constraints given +in this specification. + +To accomplish this, validating XML processors must read and process the entire +DTD and all external parsed entities referenced in the document. +

    +

    Non-validating processors are required to check only the +document entity, including +the entire internal DTD subset, for well-formedness. + +While they are not required to check the document for validity, +they are required to +process 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 not read; that is to +say, they must +use the information in those declarations to +normalize attribute values, +include the replacement text of +internal entities, and supply +default attribute values. + +They must not process +entity declarations or +attribute-list declarations +encountered after a reference to a parameter entity that is not +read, since the entity may have contained overriding declarations. +

    +
    + +Using XML Processors +

    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: + +

    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 +Entity Declared, +Parsed Entity, and +No Recursion, as well +as some of the cases described as +forbidden in +.

    +

    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 +normalize attribute values, +include the replacement text of +internal entities, or supply +default attribute values, +where doing so depends on having read declarations in +external or parameter entities.

    + +

    +

    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.

    +
    +
    + + +Notation + +

    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 +symbol ::= expression

    +

    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. + +

    + +

    Within the expression on the right-hand side of a rule, the following +expressions are used to match strings of one or more characters: + + + +

    where N 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 +#xN 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.

    + + + +

    matches any character +with a value in the range(s) indicated (inclusive).

    +
    + + +

    matches any character +with a value outside the +range indicated.

    +
    + + +

    matches any character +with a value not among the characters given.

    +
    + + +

    matches a literal string matching +that given inside the double quotes.

    +
    + + +

    matches a literal string matching +that given inside the single quotes.

    +
    + +These symbols may be combined to match more complex patterns as follows, +where A and B represent simple expressions: + + + +

    expression is treated as a unit +and may be combined as described in this list.

    +
    + + +

    matches A or nothing; optional A.

    +
    + + +

    matches A followed by B.

    +
    + + +

    matches A or B but not both.

    +
    + + +

    matches any string that matches A but does not match +B. +

    +
    + + +

    matches one or more occurrences of A.

    +
    + + +

    matches zero or more occurrences of A.

    +
    + +
    +Other notations used in the productions are: + + + +

    comment.

    +
    + + +

    well-formedness constraint; this identifies by name a +constraint on +well-formed documents +associated with a production.

    +
    + + +

    validity constraint; this identifies by name a constraint on +valid documents associated with +a production.

    +
    +
    +

    + + + + + + + + + +References + +Normative References + + + +(Internet Assigned Numbers Authority) Official Names for +Character Sets, +ed. Keld Simonsen et al. +See ftp://ftp.isi.edu/in-notes/iana/assignments/character-sets. + + + +IETF (Internet Engineering Task Force). +RFC 1766: Tags for the Identification of Languages, +ed. H. Alvestrand. +1995. + + + +(International Organization for Standardization). +ISO 639:1988 (E). +Code for the representation of names of languages. +[Geneva]: International Organization for +Standardization, 1988. + + +(International Organization for Standardization). +ISO 3166-1:1997 (E). +Codes for the representation of names of countries and their subdivisions +— Part 1: Country codes +[Geneva]: International Organization for +Standardization, 1997. + +ISO +(International Organization for Standardization). +ISO/IEC 10646-1993 (E). Information technology — Universal +Multiple-Octet Coded Character Set (UCS) — Part 1: +Architecture and Basic Multilingual Plane. +[Geneva]: International Organization for +Standardization, 1993 (plus amendments AM 1 through AM 7). + + +The Unicode Consortium. +The Unicode Standard, Version 2.0. +Reading, Mass.: Addison-Wesley Developers Press, 1996. + + + + + +Other References + + + +Aho, Alfred V., +Ravi Sethi, and Jeffrey D. Ullman. +Compilers: Principles, Techniques, and Tools. +Reading: Addison-Wesley, 1986, rpt. corr. 1988. + + +Berners-Lee, T., R. Fielding, and L. Masinter. +Uniform Resource Identifiers (URI): Generic Syntax and +Semantics. +1997. +(Work in progress; see updates to RFC1738.) + +Brüggemann-Klein, Anne. +Regular Expressions into Finite Automata. +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. + + + +Brüggemann-Klein, Anne, +and Derick Wood. +Deterministic Regular Languages. +Universität Freiburg, Institut für Informatik, +Bericht 38, Oktober 1991. + + +James Clark. +Comparison of SGML and XML. See +http://www.w3.org/TR/NOTE-sgml-xml-971215. + + +IETF (Internet Engineering Task Force). +RFC 1738: Uniform Resource Locators (URL), +ed. T. Berners-Lee, L. Masinter, M. McCahill. +1994. + + + +IETF (Internet Engineering Task Force). +RFC 1808: Relative Uniform Resource Locators, +ed. R. Fielding. +1995. + + + +IETF (Internet Engineering Task Force). +RFC 2141: URN Syntax, +ed. R. Moats. +1997. + + +ISO +(International Organization for Standardization). +ISO 8879:1986(E). Information processing — Text and Office +Systems — Standard Generalized Markup Language (SGML). First +edition — 1986-10-15. [Geneva]: International Organization for +Standardization, 1986. + + + +ISO +(International Organization for Standardization). +ISO/IEC 10744-1992 (E). Information technology — +Hypermedia/Time-based Structuring Language (HyTime). + +[Geneva]: International Organization for +Standardization, 1992. +Extended Facilities Annexe. +[Geneva]: International Organization for +Standardization, 1996. + + + + + + + + +Character Classes +

    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. + +Characters + +Letter +BaseChar +| Ideographic +BaseChar +[#x0041-#x005A] +| [#x0061-#x007A] +| [#x00C0-#x00D6] +| [#x00D8-#x00F6] +| [#x00F8-#x00FF] +| [#x0100-#x0131] +| [#x0134-#x013E] +| [#x0141-#x0148] +| [#x014A-#x017E] +| [#x0180-#x01C3] +| [#x01CD-#x01F0] +| [#x01F4-#x01F5] +| [#x01FA-#x0217] +| [#x0250-#x02A8] +| [#x02BB-#x02C1] +| #x0386 +| [#x0388-#x038A] +| #x038C +| [#x038E-#x03A1] +| [#x03A3-#x03CE] +| [#x03D0-#x03D6] +| #x03DA +| #x03DC +| #x03DE +| #x03E0 +| [#x03E2-#x03F3] +| [#x0401-#x040C] +| [#x040E-#x044F] +| [#x0451-#x045C] +| [#x045E-#x0481] +| [#x0490-#x04C4] +| [#x04C7-#x04C8] +| [#x04CB-#x04CC] +| [#x04D0-#x04EB] +| [#x04EE-#x04F5] +| [#x04F8-#x04F9] +| [#x0531-#x0556] +| #x0559 +| [#x0561-#x0586] +| [#x05D0-#x05EA] +| [#x05F0-#x05F2] +| [#x0621-#x063A] +| [#x0641-#x064A] +| [#x0671-#x06B7] +| [#x06BA-#x06BE] +| [#x06C0-#x06CE] +| [#x06D0-#x06D3] +| #x06D5 +| [#x06E5-#x06E6] +| [#x0905-#x0939] +| #x093D +| [#x0958-#x0961] +| [#x0985-#x098C] +| [#x098F-#x0990] +| [#x0993-#x09A8] +| [#x09AA-#x09B0] +| #x09B2 +| [#x09B6-#x09B9] +| [#x09DC-#x09DD] +| [#x09DF-#x09E1] +| [#x09F0-#x09F1] +| [#x0A05-#x0A0A] +| [#x0A0F-#x0A10] +| [#x0A13-#x0A28] +| [#x0A2A-#x0A30] +| [#x0A32-#x0A33] +| [#x0A35-#x0A36] +| [#x0A38-#x0A39] +| [#x0A59-#x0A5C] +| #x0A5E +| [#x0A72-#x0A74] +| [#x0A85-#x0A8B] +| #x0A8D +| [#x0A8F-#x0A91] +| [#x0A93-#x0AA8] +| [#x0AAA-#x0AB0] +| [#x0AB2-#x0AB3] +| [#x0AB5-#x0AB9] +| #x0ABD +| #x0AE0 +| [#x0B05-#x0B0C] +| [#x0B0F-#x0B10] +| [#x0B13-#x0B28] +| [#x0B2A-#x0B30] +| [#x0B32-#x0B33] +| [#x0B36-#x0B39] +| #x0B3D +| [#x0B5C-#x0B5D] +| [#x0B5F-#x0B61] +| [#x0B85-#x0B8A] +| [#x0B8E-#x0B90] +| [#x0B92-#x0B95] +| [#x0B99-#x0B9A] +| #x0B9C +| [#x0B9E-#x0B9F] +| [#x0BA3-#x0BA4] +| [#x0BA8-#x0BAA] +| [#x0BAE-#x0BB5] +| [#x0BB7-#x0BB9] +| [#x0C05-#x0C0C] +| [#x0C0E-#x0C10] +| [#x0C12-#x0C28] +| [#x0C2A-#x0C33] +| [#x0C35-#x0C39] +| [#x0C60-#x0C61] +| [#x0C85-#x0C8C] +| [#x0C8E-#x0C90] +| [#x0C92-#x0CA8] +| [#x0CAA-#x0CB3] +| [#x0CB5-#x0CB9] +| #x0CDE +| [#x0CE0-#x0CE1] +| [#x0D05-#x0D0C] +| [#x0D0E-#x0D10] +| [#x0D12-#x0D28] +| [#x0D2A-#x0D39] +| [#x0D60-#x0D61] +| [#x0E01-#x0E2E] +| #x0E30 +| [#x0E32-#x0E33] +| [#x0E40-#x0E45] +| [#x0E81-#x0E82] +| #x0E84 +| [#x0E87-#x0E88] +| #x0E8A +| #x0E8D +| [#x0E94-#x0E97] +| [#x0E99-#x0E9F] +| [#x0EA1-#x0EA3] +| #x0EA5 +| #x0EA7 +| [#x0EAA-#x0EAB] +| [#x0EAD-#x0EAE] +| #x0EB0 +| [#x0EB2-#x0EB3] +| #x0EBD +| [#x0EC0-#x0EC4] +| [#x0F40-#x0F47] +| [#x0F49-#x0F69] +| [#x10A0-#x10C5] +| [#x10D0-#x10F6] +| #x1100 +| [#x1102-#x1103] +| [#x1105-#x1107] +| #x1109 +| [#x110B-#x110C] +| [#x110E-#x1112] +| #x113C +| #x113E +| #x1140 +| #x114C +| #x114E +| #x1150 +| [#x1154-#x1155] +| #x1159 +| [#x115F-#x1161] +| #x1163 +| #x1165 +| #x1167 +| #x1169 +| [#x116D-#x116E] +| [#x1172-#x1173] +| #x1175 +| #x119E +| #x11A8 +| #x11AB +| [#x11AE-#x11AF] +| [#x11B7-#x11B8] +| #x11BA +| [#x11BC-#x11C2] +| #x11EB +| #x11F0 +| #x11F9 +| [#x1E00-#x1E9B] +| [#x1EA0-#x1EF9] +| [#x1F00-#x1F15] +| [#x1F18-#x1F1D] +| [#x1F20-#x1F45] +| [#x1F48-#x1F4D] +| [#x1F50-#x1F57] +| #x1F59 +| #x1F5B +| #x1F5D +| [#x1F5F-#x1F7D] +| [#x1F80-#x1FB4] +| [#x1FB6-#x1FBC] +| #x1FBE +| [#x1FC2-#x1FC4] +| [#x1FC6-#x1FCC] +| [#x1FD0-#x1FD3] +| [#x1FD6-#x1FDB] +| [#x1FE0-#x1FEC] +| [#x1FF2-#x1FF4] +| [#x1FF6-#x1FFC] +| #x2126 +| [#x212A-#x212B] +| #x212E +| [#x2180-#x2182] +| [#x3041-#x3094] +| [#x30A1-#x30FA] +| [#x3105-#x312C] +| [#xAC00-#xD7A3] + +Ideographic +[#x4E00-#x9FA5] +| #x3007 +| [#x3021-#x3029] + +CombiningChar +[#x0300-#x0345] +| [#x0360-#x0361] +| [#x0483-#x0486] +| [#x0591-#x05A1] +| [#x05A3-#x05B9] +| [#x05BB-#x05BD] +| #x05BF +| [#x05C1-#x05C2] +| #x05C4 +| [#x064B-#x0652] +| #x0670 +| [#x06D6-#x06DC] +| [#x06DD-#x06DF] +| [#x06E0-#x06E4] +| [#x06E7-#x06E8] +| [#x06EA-#x06ED] +| [#x0901-#x0903] +| #x093C +| [#x093E-#x094C] +| #x094D +| [#x0951-#x0954] +| [#x0962-#x0963] +| [#x0981-#x0983] +| #x09BC +| #x09BE +| #x09BF +| [#x09C0-#x09C4] +| [#x09C7-#x09C8] +| [#x09CB-#x09CD] +| #x09D7 +| [#x09E2-#x09E3] +| #x0A02 +| #x0A3C +| #x0A3E +| #x0A3F +| [#x0A40-#x0A42] +| [#x0A47-#x0A48] +| [#x0A4B-#x0A4D] +| [#x0A70-#x0A71] +| [#x0A81-#x0A83] +| #x0ABC +| [#x0ABE-#x0AC5] +| [#x0AC7-#x0AC9] +| [#x0ACB-#x0ACD] +| [#x0B01-#x0B03] +| #x0B3C +| [#x0B3E-#x0B43] +| [#x0B47-#x0B48] +| [#x0B4B-#x0B4D] +| [#x0B56-#x0B57] +| [#x0B82-#x0B83] +| [#x0BBE-#x0BC2] +| [#x0BC6-#x0BC8] +| [#x0BCA-#x0BCD] +| #x0BD7 +| [#x0C01-#x0C03] +| [#x0C3E-#x0C44] +| [#x0C46-#x0C48] +| [#x0C4A-#x0C4D] +| [#x0C55-#x0C56] +| [#x0C82-#x0C83] +| [#x0CBE-#x0CC4] +| [#x0CC6-#x0CC8] +| [#x0CCA-#x0CCD] +| [#x0CD5-#x0CD6] +| [#x0D02-#x0D03] +| [#x0D3E-#x0D43] +| [#x0D46-#x0D48] +| [#x0D4A-#x0D4D] +| #x0D57 +| #x0E31 +| [#x0E34-#x0E3A] +| [#x0E47-#x0E4E] +| #x0EB1 +| [#x0EB4-#x0EB9] +| [#x0EBB-#x0EBC] +| [#x0EC8-#x0ECD] +| [#x0F18-#x0F19] +| #x0F35 +| #x0F37 +| #x0F39 +| #x0F3E +| #x0F3F +| [#x0F71-#x0F84] +| [#x0F86-#x0F8B] +| [#x0F90-#x0F95] +| #x0F97 +| [#x0F99-#x0FAD] +| [#x0FB1-#x0FB7] +| #x0FB9 +| [#x20D0-#x20DC] +| #x20E1 +| [#x302A-#x302F] +| #x3099 +| #x309A + +Digit +[#x0030-#x0039] +| [#x0660-#x0669] +| [#x06F0-#x06F9] +| [#x0966-#x096F] +| [#x09E6-#x09EF] +| [#x0A66-#x0A6F] +| [#x0AE6-#x0AEF] +| [#x0B66-#x0B6F] +| [#x0BE7-#x0BEF] +| [#x0C66-#x0C6F] +| [#x0CE6-#x0CEF] +| [#x0D66-#x0D6F] +| [#x0E50-#x0E59] +| [#x0ED0-#x0ED9] +| [#x0F20-#x0F29] + +Extender +#x00B7 +| #x02D0 +| #x02D1 +| #x0387 +| #x0640 +| #x0E46 +| #x0EC6 +| #x3005 +| [#x3031-#x3035] +| [#x309D-#x309E] +| [#x30FC-#x30FE] + + + + +

    +

    The character classes defined here can be derived from the +Unicode character database as follows: + + +

    Name start characters must have one of the categories Ll, Lu, +Lo, Lt, Nl.

    + + +

    Name characters other than Name-start characters +must have one of the categories Mc, Me, Mn, Lm, or Nd.

    +
    + +

    Characters in the compatibility area (i.e. with character code +greater than #xF900 and less than #xFFFE) are not allowed in XML +names.

    +
    + +

    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 "<") are not allowed.

    +
    + +

    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.

    +
    + +

    Characters #x20DD-#x20E0 are excluded (in accordance with +Unicode, section 5.14).

    +
    + +

    Character #x00B7 is classified as an extender, because the +property list so identifies it.

    +
    + +

    Character #x0387 is added as a name character, because #x00B7 +is its canonical equivalent.

    +
    + +

    Characters ':' and '_' are allowed as name-start characters.

    +
    + +

    Characters '-' and '.' are allowed as name characters.

    +
    + +

    +
    + +XML and SGML + +

    XML is designed to be a subset of SGML, in that every +valid 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 . +

    +
    + +Expansion of Entity and Character References +

    This appendix contains some examples illustrating the +sequence of entity- and character-reference recognition and +expansion, as specified in .

    +

    +If the DTD contains the declaration +An ampersand (&#38;) may be escaped +numerically (&#38;#38;) or with a general entity +(&amp;).

    " > +]]> +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 "example": +An ampersand (&) may be escaped +numerically (&#38;) or with a general entity +(&amp;).

    +]]>
    +A reference in the document to "&example;" +will cause the text to be reparsed, at which time the +start- and end-tags of the "p" element will be recognized +and the three references will be recognized and expanded, +resulting in a "p" element with the following content +(all data, no delimiters or markup): + +

    +

    A more complex example will illustrate the rules and their +effects fully. In the following example, the line numbers are +solely for reference. + +2 +4 +5 ' > +6 %xx; +7 ]> +8 This sample shows a &tricky; method. +]]> +This produces the following: + +

    in line 4, the reference to character 37 is expanded immediately, +and the parameter entity "xx" is stored in the symbol +table with the value "%zz;". Since the replacement text +is not rescanned, the reference to parameter entity "zz" +is not recognized. (And it would be an error if it were, since +"zz" is not yet declared.)

    +

    in line 5, the character reference "&#60;" is +expanded immediately and the parameter entity "zz" is +stored with the replacement text +"<!ENTITY tricky "error-prone" >", +which is a well-formed entity declaration.

    +

    in line 6, the reference to "xx" is recognized, +and the replacement text of "xx" (namely +"%zz;") is parsed. The reference to "zz" +is recognized in its turn, and its replacement text +("<!ENTITY tricky "error-prone" >") is parsed. +The general entity "tricky" has now been +declared, with the replacement text "error-prone".

    +

    +in line 8, the reference to the general entity "tricky" is +recognized, and it is expanded, so the full content of the +"test" element is the self-describing (and ungrammatical) string +This sample shows a error-prone method. +

    + +

    +
    + +Deterministic Content Models +

    For compatibility, it is +required +that content models in element type declarations be deterministic. +

    + +

    SGML +requires deterministic content models (it calls them +"unambiguous"); XML processors built using SGML systems may +flag non-deterministic content models as errors.

    +

    For example, the content model ((b, c) | (b, d)) is +non-deterministic, because given an initial b the parser +cannot know which b in the model is being matched without +looking ahead to see which element follows the b. +In this case, the two references to +b can be collapsed +into a single reference, making the model read +(b, (c | d)). An initial b now clearly +matches only a single name in the content model. The parser doesn't +need to look ahead to see what follows; either c or +d would be accepted.

    +

    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 . +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. +

    +

    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 .

    +
    + +Autodetection of Character Encodings +

    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—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. +

    +

    +Because each XML entity not in UTF-8 or UTF-16 format must +begin with an XML encoding declaration, in which the first characters +must be '<?xml', 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, '<' is +"#x0000003C" and '?' is "#x0000003F", and the Byte +Order Mark required of UTF-16 data streams is "#xFEFF".

    +

    + + +

    00 00 00 3C: UCS-4, big-endian machine (1234 order)

    + + +

    3C 00 00 00: UCS-4, little-endian machine (4321 order)

    +
    + +

    00 00 3C 00: UCS-4, unusual octet order (2143)

    +
    + +

    00 3C 00 00: UCS-4, unusual octet order (3412)

    +
    + +

    FE FF: UTF-16, big-endian

    +
    + +

    FF FE: UTF-16, little-endian

    +
    + +

    00 3C 00 3F: UTF-16, big-endian, no Byte Order Mark +(and thus, strictly speaking, in error)

    +
    + +

    3C 00 3F 00: UTF-16, little-endian, no Byte Order Mark +(and thus, strictly speaking, in error)

    +
    + +

    3C 3F 78 6D: 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 +

    +
    + +

    4C 6F A7 94: EBCDIC (in some flavor; the full +encoding declaration must be read to tell which code page is in +use)

    +
    + +

    other: UTF-8 without an encoding declaration, or else +the data stream is corrupt, fragmentary, or enclosed in +a wrapper of some kind

    +
    + +

    +

    +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). +

    +

    +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. +

    +

    +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. +

    +

    +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. +

    +

    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. + +

    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. +

    +

    If an XML entity is delivered with a +MIME type of text/xml, then the charset parameter +on the MIME type determines the +character encoding method; all other heuristics and sources of +information are solely for error recovery. +

    +

    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. +

    + +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. +

    + +
    + + +W3C XML Working Group + +

    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:

    + + +Jon Bosak, SunChair +James ClarkTechnical Lead +Tim Bray, Textuality and NetscapeXML Co-editor +Jean Paoli, MicrosoftXML Co-editor +C. M. Sperberg-McQueen, U. of Ill.XML +Co-editor +Dan Connolly, W3CW3C Liaison +Paula Angerstein, Texcel +Steve DeRose, INSO +Dave Hollander, HP +Eliot Kimber, ISOGEN +Eve Maler, ArborText +Tom Magliery, NCSA +Murray Maloney, Muzmo and Grif +Makoto Murata, Fuji Xerox Information Systems +Joel Nava, Adobe +Conleth O'Connell, Vignette +Peter Sharpe, SoftQuad +John Tigue, DataChannel + + +
    +
    + + diff --git a/test/valid/UTF16Entity.xml b/test/valid/UTF16Entity.xml new file mode 100644 index 0000000..8bb29ac --- /dev/null +++ b/test/valid/UTF16Entity.xml @@ -0,0 +1,8 @@ + + + + +]> + + &utf16b; &utf16l; 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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 @@ + + + + + diff --git a/test/valid/dtds/694228.dtd b/test/valid/dtds/694228.dtd new file mode 100644 index 0000000..7abc19f --- /dev/null +++ b/test/valid/dtds/694228.dtd @@ -0,0 +1,3 @@ + + + diff --git a/test/valid/dtds/737840.ent b/test/valid/dtds/737840.ent new file mode 100644 index 0000000..e972132 --- /dev/null +++ b/test/valid/dtds/737840.ent @@ -0,0 +1 @@ + \ No newline at end of file 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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 @@ + diff --git a/test/valid/dtds/external.ent b/test/valid/dtds/external.ent new file mode 100644 index 0000000..8a4495d --- /dev/null +++ b/test/valid/dtds/external.ent @@ -0,0 +1,3 @@ + + +"> diff --git a/test/valid/dtds/external2.ent b/test/valid/dtds/external2.ent new file mode 100644 index 0000000..348e1db --- /dev/null +++ b/test/valid/dtds/external2.ent @@ -0,0 +1 @@ + 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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/valid/dtds/notes.dtd b/test/valid/dtds/notes.dtd new file mode 100644 index 0000000..b40a8ac --- /dev/null +++ b/test/valid/dtds/notes.dtd @@ -0,0 +1,19 @@ + + + + + + + + + diff --git a/test/valid/dtds/objednavka.dtd b/test/valid/dtds/objednavka.dtd new file mode 100644 index 0000000..ac63df1 --- /dev/null +++ b/test/valid/dtds/objednavka.dtd @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + 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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/valid/dtds/utf16b.ent b/test/valid/dtds/utf16b.ent new file mode 100644 index 0000000..52c7e2d Binary files /dev/null and b/test/valid/dtds/utf16b.ent differ diff --git a/test/valid/dtds/utf16l.ent b/test/valid/dtds/utf16l.ent new file mode 100644 index 0000000..2cad40a Binary files /dev/null and b/test/valid/dtds/utf16l.ent differ 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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 @@ + + + + + +%HTMLlat1; + + +%HTMLsymbol; + + +%HTMLspecial; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 @@ + + + + + +%HTMLlat1; + + +%HTMLsymbol; + + +%HTMLspecial; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 @@ + + + + + +%HTMLlat1; + + +%HTMLsymbol; + + +%HTMLspecial; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 @@ +" + 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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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 @@ + + + + + +]> + + + + + + 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 @@ + + + + + +"> +]> + + + &dest; + + + 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 @@ + + + + + + +]> + + + &dest; + + + 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 @@ + + + %nitf; +]> + + + + 20011022T154508Z + + + + + afp.com + 20011022 + mmd--deutsch--journal--spo + 1 + urn:NewsML:afp.com:20011022:mmd--deutsch--journal--spo:1 + + HINTERGRUND + + + + 20011022T154508Z + 20011022T154508Z + + + + + + + + + + + + + + Berliner SPD führt Gespräche mit FDP und Grünen + + + + + + INFOGRAFIK: Das Berliner Wahlergebnis + + + + + + Schwierige Koalitionsverhandlungen in Berlin + + + + + + Die Lieblingsfarben des Kanzlers sind Rot Gelb Grün + + + + + + INFOGRAFIK: Wen wählt Wowereit? + + + + + + CDU ist auch in kommunalen Rathäusern der Verlierer + + + + + + Gutes Abschneiden der PDS hat verschiedene Gründe + + + + + + Ans Regieren hat sich Klaus Wowereit gewöhnt + + + + + + Steffel brachte CDU nicht auf Erfolgskurs + + + + + + Sibyll Klotz: Vollblutpolitikerin mit "Berliner Schnauze" + + + + + + Mit Gysi muss weiter gerechnet werden + + + + + + Rexrodt - das Stehaufmännchen der Berliner FDP + + + + + + 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 @@ + + + + + + + +]> + + Some text. + + Some text. + + Some text. + diff --git a/test/valid/notes.xml b/test/valid/notes.xml new file mode 100644 index 0000000..157d178 --- /dev/null +++ b/test/valid/notes.xml @@ -0,0 +1,5 @@ + + + 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 @@ + + + + +]> + + 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 @@ + + + + + + + +]> + + + + diff --git a/test/valid/objednavka.xml b/test/valid/objednavka.xml new file mode 100644 index 0000000..c785b1a --- /dev/null +++ b/test/valid/objednavka.xml @@ -0,0 +1,39 @@ + + + + + Jan Novák + BÄ›lehradská 147 + Praha 2 + 12000 + + + Petra Nováková + Anglická 15 + Praha 2 + 12000 + + DPD + dobírka + 2004-11-14 + 2004-11-19 + + + 2N7-516 + SekaÄka na trávu + 1 + 2999 + http://example.org/sekacka.html + + + Q3Y-116 + Travní semeno + 2.5 + 127.50 + + + + <Řádka>O dodávku mám zájem pouze v případÄ›, že se jedná o trávu v odrůdÄ› konopí. + <Řádka>Dále jsem se chtÄ›l zeptat, zda je doprava zdarma. + + 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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]> + + + +PP + + diff --git a/test/valid/t10.xml b/test/valid/t10.xml new file mode 100644 index 0000000..de066f9 --- /dev/null +++ b/test/valid/t10.xml @@ -0,0 +1,12 @@ + + + + +]> + + + + + + diff --git a/test/valid/t11.xml b/test/valid/t11.xml new file mode 100644 index 0000000..cc3fb31 --- /dev/null +++ b/test/valid/t11.xml @@ -0,0 +1,2 @@ + +&peInCdata; 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 @@ + + + + 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 @@ + + +&abc; 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 @@ + + + + + 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 @@ + + +&abc; 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 @@ + + + + + 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 @@ + + +&abc; 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 @@ + +' > +' > +' > +%defroot; %defmiddle; %deftest; +]> +sample 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 @@ + +' > +' > +' > +%defroot;%defmiddle;%deftest; +]> +sample 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 @@ + +' > +' > +' > +%defroot; %defmiddle; %deftest; +]> +sample 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 @@ + +' > +' > +' > +%defroot;%defmiddle;%deftest; +]> +sample 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 @@ + + + + +XHTML 1.0: The Extensible HyperText Markup +Language + + + + + +

    W3C

    + +

    XHTML 1.0: +The Extensible HyperText Markup Language

    + +

    A Reformulation of HTML 4.0 in XML 1.0

    + +

    W3C Proposed Recommendation 10 December 1999

    + +
    +
    This version:
    + +
    +http://www.w3.org/TR/1999/PR-xhtml1-19991210
    +(Postscript version, +PDF version, +ZIP archive, or +Gzip'd TAR archive) +
    + +
    Latest version:
    + +
    +http://www.w3.org/TR/xhtml1
    + +
    Previous versions:
    + +
    +http://www.w3.org/TR/1999/WD-xhtml1-19991124
    +
    +http://www.w3.org/TR/1999/PR-xhtml1-19990824
    + +
    Authors:
    + +
    See acknowledgements.
    +
    + + +
    +
    + +

    Abstract

    + +

    This specification defines XHTML 1.0, a reformulation of HTML +4.0 as an XML 1.0 application, and three DTDs 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.

    + +

    Status of this document

    + +

    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.

    + +

    This specification is a Proposed Recommendation of the HTML Working Group. It is +a revision of the Proposed Recommendation dated 24 August +1999 incorporating changes as a result of comments from the Proposed +Recommendation review, and +comments and further deliberations of the W3C HTML Working Group. A +diff-marked version from the previous +proposed recommendation is available for comparison purposes.

    + +

    On 10 December 1999, this document enters a + +Proposed Recommendation 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.

    + +

    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.

    + +

    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."

    + +

    This document has been produced as part of the W3C HTML Activity. The goals of +the HTML Working +Group (members +only) are discussed in the HTML Working Group +charter (members +only).

    + +

    A list of current W3C Recommendations and other technical documents +can be found at http://www.w3.org/TR.

    + +

    Public discussion on HTML features takes place on the mailing list www-html@w3.org (archive). The W3C +staff contact for work on HTML is Dave +Raggett.

    + +

    Please report errors in this document to www-html-editor@w3.org.

    + +

    The list of known errors in this specification is available at http://www.w3.org/1999/12/PR-xhtml1-19991210-errata.

    + +

    Contents

    + + + + +

    1. What is XHTML?

    + +

    XHTML is a family of current and future document types and modules that +reproduce, subset, and extend HTML 4.0 [HTML]. XHTML family document types are XML 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 Future +Directions.

    + +

    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 [XML]. It is intended +to be used as a language for content that is both XML-conforming and, if some +simple guidelines are followed, +operates in HTML 4.0 conforming user agents. Developers who migrate +their content to XHTML 1.0 will realize the following benefits:

    + +
      +
    • XHTML documents are XML conforming. As such, they are readily viewed, +edited, and validated with standard XML tools.
    • +
    • 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.
    • +
    • 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 [DOM].
    • +
    • As the XHTML family evolves, documents conforming to XHTML 1.0 will be more +likely to interoperate within and among various XHTML environments.
    • +
    + +

    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.

    + +

    1.1 What is HTML 4.0?

    + +

    HTML 4.0 [HTML] is an SGML (Standard +Generalized Markup Language) application conforming to +International Standard ISO 8879, and is widely regarded as the +standard publishing language of the World Wide Web.

    + +

    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.

    + +

    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.

    + +

    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.

    + +

    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.

    + +

    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.

    + +

    1.2 What is XML?

    + +

    XML is the shorthand for Extensible Markup +Language, and is an acronym of Extensible Markup Language [XML].

    + +

    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.

    + +

    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.

    + +

    1.3 Why the need for XHTML?

    + +

    The benefits of migrating to XHTML 1.0 are described above. Some of the +benefits of migrating to XHTML in general are:

    + +
      +
    • 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.
    • + +
    • 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.
    • + +
    + +

    2. Definitions

    + +

    2.1 Terminology

    + +

    The following terms are used in this specification. These +terms extend the definitions in +[RFC2119] in ways based upon similar definitions in ISO/IEC +9945-1:1990 [POSIX.1]:

    + +
    +
    Implementation-defined
    + +
    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.
    + +
    May
    + +
    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 Document Conformance, the word "may" means that +the optional feature must not be used. The term "optional" has +the same definition as "may".
    + +
    Must
    + +
    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".
    + +
    Reserved
    + +
    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.
    + +
    Should
    + +
    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.
    + +
    Supported
    + +
    Certain facilities in this specification are optional. If a +facility is supported, it behaves as specified by this +specification.
    + +
    Unspecified
    + +
    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.
    +
    + +

    2.2 General Terms

    + +
    +
    Attribute
    + +
    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.
    + +
    DTD
    + +
    A DTD, or document type definition, is a collection of XML +declarations that, as a collection, defines the legal structure, +elements, and +attributes that are available for use in a document that +complies to the DTD.
    + +
    Document
    + +
    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 +elements that are organized as defined in the associated +DTD. See Document +Conformance for more information.
    + +
    Element
    + +
    An element is a document structuring unit declared in the +DTD. The element's content model is +defined in the DTD, and additional +semantics may be defined in the prose description of the +element.
    + +
    Facilities
    + +
    Functionality includes elements, +attributes, and the semantics +associated with those elements and +attributes. An implementation +supporting that functionality is said to provide the necessary +facilities.
    + +
    Implementation
    + +
    An implementation is a system that provides collection of +facilities and services that supports +this specification. See User Agent +Conformance for more information.
    + +
    Parsing
    + +
    Parsing is the act whereby a +document is scanned, and the information contained within +the document is filtered into the +context of the elements in which the +information is structured.
    + +
    Rendering
    + +
    Rendering is the act whereby the information in a document is presented. This presentation is +done in the form most appropriate to the environment (e.g. +aurally, visually, in print).
    + +
    User Agent
    + +
    A user agent is an implementation +that retrieves and processes XHTML documents. See User Agent Conformance for more information.
    + +
    Validation
    + +
    Validation is a process whereby +documents are verified against the associated DTD, ensuring that the structure, use of elements, and use of +attributes are consistent with the definitions in the +DTD.
    + +
    Well-formed
    + +
    A document is well-formed when it +is structured according to the rules defined in Section 2.1 of +the XML 1.0 Recommendation [XML]. +Basically, this definition states that elements, delimited by +their start and end tags, are nested properly within one +another.
    +
    + + +

    3. Normative Definition of +XHTML 1.0

    + +

    3.1 Document +Conformance

    + +

    This version of XHTML provides a definition of strictly +conforming XHTML documents, which are restricted to tags and +attributes from the XHTML namespace. See Section 3.1.2 for information on using XHTML +with other namespaces, for instance, to include metadata +expressed in RDF within XHTML documents.

    + +

    3.1.1 Strictly Conforming +Documents

    + +

    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:

    + +
      +
    1. +

      It must validate against one of the three DTDs found in Appendix A.

      +
    2. + +
    3. +

      The root element of the document must be +<html>.

      +
    4. + +
    5. +

      The root element of the document must designate the XHTML +namespace using the xmlns attribute [XMLNAMES]. The namespace for XHTML is +defined to be +http://www.w3.org/1999/xhtml.

      +
    6. + +
    7. +

      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 Appendix A using the respective +Formal Public Identifier. The system identifier may be changed to reflect +local system conventions.

      + +
      +<!DOCTYPE html 
      +     PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
      +     "http://www.w3.org/TR/1999/PR-xhtml1-19991210/DTD/xhtml1-strict.dtd>
      +
      +<!DOCTYPE html 
      +     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
      +     "http://www.w3.org/TR/1999/PR-xhtml1-19991210/DTD/xhtml1-transitional.dtd>
      +
      +<!DOCTYPE html 
      +     PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
      +     "http://www.w3.org/TR/1999/PR-xhtml1-19991210/DTD/xhtml1-frameset.dtd>
      +
      +
    8. +
    + +

    Here is an example of a minimal XHTML document.

    + +
    +
    +<?xml version="1.0" encoding="UTF-8"?>
    +<!DOCTYPE html 
    +     PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    +    "http://www.w3.org/TR/1999/PR-xhtml1-19991210/DTD/xhtml1-strict.dtd">
    +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    +  <head>
    +    <title>Virtual Library</title>
    +  </head>
    +  <body>
    +    <p>Moved to <a href="http://vlib.org/">vlib.org</a>.</p>
    +  </body>
    +</html>
    +
    + +

    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.

    + +

    3.1.2 Using XHTML with +other namespaces

    + +

    The XHTML namespace may be used with other XML namespaces +as per [XMLNAMES], 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.

    + +

    The following example shows the way in which XHTML 1.0 could +be used in conjunction with the MathML Recommendation:

    + +
    +
    +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    +  <head>
    +    <title>A Math Example</title>
    +  </head>
    +  <body>
    +    <p>The following is MathML markup:</p>
    +    <math xmlns="http://www.w3.org/1998/Math/MathML">
    +      <apply> <log/>
    +        <logbase>
    +          <cn> 3 </cn>
    +        </logbase>
    +        <ci> x </ci>
    +      </apply>
    +    </math>
    +  </body>
    +</html>
    +
    +
    + +

    The following example shows the way in which XHTML 1.0 markup +could be incorporated into another XML namespace:

    + +
    +
    +<?xml version="1.0" encoding="UTF-8"?>
    +<!-- initially, the default namespace is "books" -->
    +<book xmlns='urn:loc.gov:books'
    +    xmlns:isbn='urn:ISBN:0-395-36341-6' xml:lang="en" lang="en">
    +  <title>Cheaper by the Dozen</title>
    +  <isbn:number>1568491379</isbn:number>
    +  <notes>
    +    <!-- make HTML the default namespace for a hypertext commentary -->
    +    <p xmlns='http://www.w3.org/1999/xhtml'>
    +        This is also available <a href="http://www.w3.org/">online</a>.
    +    </p>
    +  </notes>
    +</book>
    +
    +
    + +

    3.2 User Agent +Conformance

    + +

    A conforming user agent must meet all of the following +criteria:

    + +
      +
    1. In order to be consistent with the XML 1.0 Recommendation [XML], 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 +[XML].
    2. + +
    3. When the user agent claims to support +facilities defined within this specification or required by +this specification through normative reference, it must do so in +ways consistent with the facilities' definition.
    4. + +
    5. When a user agent processes an XHTML document as generic XML, +it shall only recognize attributes of type +ID (e.g. the id attribute on most XHTML elements) +as fragment identifiers.
    6. + +
    7. If a user agent encounters an element it does not recognize, +it must render the element's content.
    8. + +
    9. 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).
    10. + +
    11. If a user agent encounters an attribute value it doesn't +recognize, it must use the default attribute value.
    12. + +
    13. 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.
    14. + +
    15. 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.
    16. + +
    17. +The following characters are defined in [XML] as whitespace characters: + +
        +
      • Space (&#x0020;)
      • +
      • Tab (&#x0009;)
      • +
      • Carriage return (&#x000D;)
      • +
      • Line feed (&#x000A;)
      • +
      + +

      +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: +

      + +
        +
      • Form feed (&#x000C;)
      • +
      • Zero-width space (&#x200B;)
      • +
      + +

      +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: +

      + +
        +
      • +All whitespace surrounding block elements should be removed. +
      • +
      • +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. +
      • +
      • +Leading and trailing whitespace inside a block element must be removed. +
      • +
      • Line feed characters within a block element must be converted into a +space (except when the 'xml:space' attribute is set to 'preserve'). +
      • +
      • +A sequence of white space characters must be reduced to a single space +character (except when the 'xml:space' attribute is set to 'preserve'). +
      • +
      • +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. +
      • +
      + +

      Whitespace in attribute values is processed according to [XML].

      +
    18. +
    + + +

    4. Differences with HTML +4.0

    + +

    Due to the fact that XHTML is an XML application, certain +practices that were perfectly legal in SGML-based HTML 4.0 [HTML] must be changed.

    + +

    4.1 Documents must be +well-formed

    + +

    Well-formedness is a new concept +introduced by [XML]. 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.

    + +

    Although overlapping is illegal in SGML, it was widely +tolerated in existing browsers.

    + +
    +

    CORRECT: nested elements.

    + +

    <p>here is an emphasized +<em>paragraph</em>.</p>

    +
    + +
    +

    INCORRECT: overlapping elements

    + +

    <p>here is an emphasized +<em>paragraph.</p></em>

    +
    + +

    4.2 Element and attribute +names must be in lower case

    + +

    XHTML documents must use lower case for all HTML element and +attribute names. This difference is necessary because XML is +case-sensitive e.g. <li> and <LI> are different +tags.

    + +

    4.3 For non-empty elements, +end tags are required

    + +

    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 EMPTY must +have an end tag.

    + +
    +

    CORRECT: terminated elements

    + +

    <p>here is a paragraph.</p><p>here is +another paragraph.</p>

    +
    + +
    +

    INCORRECT: unterminated elements

    + +

    <p>here is a paragraph.<p>here is another +paragraph.

    +
    + +

    4.4 Attribute values must +always be quoted

    + +

    All attribute values must be quoted, even those which appear +to be numeric.

    + +
    +

    CORRECT: quoted attribute values

    + +

    <table rows="3">

    +
    + +
    +

    INCORRECT: unquoted attribute values

    + +

    <table rows=3>

    +
    + +

    4.5 Attribute +Minimization

    + +

    XML does not support attribute minimization. Attribute-value +pairs must be written in full. Attribute names such as +compact and checked cannot occur in elements +without their value being specified.

    + +
    +

    CORRECT: unminimized attributes

    + +

    <dl compact="compact">

    +
    + +
    +

    INCORRECT: minimized attributes

    + +

    <dl compact>

    +
    + +

    4.6 Empty Elements

    + +

    Empty elements must either have an end tag or the start tag must end with />. For instance, +<br/> or <hr></hr>. See HTML Compatibility Guidelines for information on ways to +ensure this is backward compatible with HTML 4.0 user agents.

    + +
    +

    CORRECT: terminated empty tags

    + +

    <br/><hr/>

    +
    + +
    +

    INCORRECT: unterminated empty tags

    + +

    <br><hr>

    +
    + +

    4.7 Whitespace handling in +attribute values

    + +

    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 +Section 3.3.3 of [XML].

    + +

    4.8 Script and Style +elements

    + +

    In XHTML, the script and style elements are declared as having +#PCDATA content. As a result, < and +& will be treated as the start of markup, and +entities such as &lt; and &amp; +will be recognized as entity references by the XML processor to +< and & respectively. Wrapping +the content of the script or style element within a +CDATA marked section avoids the expansion of these +entities.

    + +
    +
    +<script>
    + <![CDATA[
    + ... unescaped script content ...
    + ]]>
    + </script>
    +
    +
    + +

    CDATA sections are recognized by the XML +processor and appear as nodes in the Document Object Model, see + +Section 1.3 of the DOM Level 1 Recommendation [DOM].

    + +

    An alternative is to use external script and style +documents.

    + +

    4.9 SGML exclusions

    + +

    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.

    + +

    For example, the HTML 4.0 Strict DTD forbids the nesting of an +'a' element within another 'a' 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 +Appendix B.

    + +

    4.10 The elements with 'id' and 'name' +attributes

    + +

    HTML 4.0 defined the name attribute for the elements +a, +applet, frame, +iframe, img, and map. +HTML 4.0 also introduced +the id attribute. Both of these attributes are designed to be +used as fragment identifiers.

    +

    In XML, fragment identifiers are of type ID, and +there can only be a single attribute of type ID per element. +Therefore, in XHTML 1.0 the id +attribute is defined to be of type ID. In order to +ensure that XHTML 1.0 documents are well-structured XML documents, XHTML 1.0 +documents MUST use the id attribute when defining fragment +identifiers, even on elements that historically have also had a +name attribute. +See the HTML Compatibility +Guidelines for information on ensuring such anchors are backwards +compatible when serving XHTML documents as media type text/html. +

    +

    Note that in XHTML 1.0, the name attribute of these +elements is formally deprecated, and will be removed in a +subsequent version of XHTML.

    + + +

    5. Compatibility Issues

    + +

    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 Appendix C.

    + +

    5.1 Internet Media Type

    +

    As of the publication of this recommendation, the general +recommended MIME labeling for XML-based applications +has yet to be resolved.

    + +

    However, XHTML Documents which follow the guidelines set forth +in Appendix C, "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.

    + + +

    6. Future Directions

    + +

    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.

    + +

    6.1 Modularizing HTML

    + +

    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.

    + +

    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.

    + +

    These modules will be defined in a later W3C document.

    + +

    6.2 Subsets and +Extensibility

    + +

    Modularization brings with it several advantages:

    + +
      +
    • +

      It provides a formal mechanism for sub-setting XHTML.

      +
    • + +
    • +

      It provides a formal mechanism for extending XHTML.

      +
    • + +
    • +

      It simplifies the transformation between document types.

      +
    • + +
    • +

      It promotes the reuse of modules in new document types.

      +
    • +
    + +

    6.3 Document +Profiles

    + +

    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.

    + +

    For product designers this enables various groups to define +their own standard profile.

    + +

    For authors this will obviate the need to write several +different versions of documents for different clients.

    + +

    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.

    + + +

    +Appendix A. DTDs

    + +

    This appendix is normative.

    + +

    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 zip file for this specification.

    + +

    A.1 Document Type +Definitions

    + +

    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.

    + + + +

    A.2 Entity Sets

    + +

    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 (&euro; or +&#8364; or &#x20AC;) is defined +as part of the special characters.

    + + + + +

    Appendix B. Element +Prohibitions

    + +

    This appendix is normative.

    + +

    The following elements have prohibitions on which elements +they can contain (see Section 4.9). This +prohibition applies to all depths of nesting, i.e. it contains +all the descendant elements.

    + +
    a
    +
    +cannot contain other a elements.
    +
    pre
    +
    cannot contain the img, object, +big, small, sub, or +sup elements.
    + +
    button
    +
    cannot contain the input, select, +textarea, label, button, +form, fieldset, iframe or +isindex elements.
    +
    label
    +
    cannot contain other label elements.
    +
    form
    +
    cannot contain other form elements.
    +
    + + +

    Appendix C. +HTML Compatibility Guidelines

    + +

    This appendix is informative.

    + +

    This appendix summarizes design guidelines for authors who +wish their XHTML documents to render on existing HTML user +agents.

    + +

    C.1 Processing Instructions

    +

    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.

    + +

    C.2 Empty Elements

    +

    Include a space before the trailing / and +> of empty elements, e.g. +<br />, +<hr /> and <img +src="karen.jpg" alt="Karen" />. Also, use the +minimized tag syntax for empty elements, e.g. <br />, as the alternative syntax <br></br> allowed by XML +gives uncertain results in many existing user agents.

    + +

    C.3 Element Minimization and Empty Element Content

    +

    Given an empty instance of an element whose content model is +not EMPTY (for example, an empty title or paragraph) +do not use the minimized form (e.g. use +<p> </p> and not +<p />).

    + +

    C.4 Embedded Style Sheets and Scripts

    +

    Use external style sheets if your style sheet uses +< or & or ]]> or --. Use +external scripts if your script uses < or +& or ]]> or --. 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.

    + +

    C.5 Line Breaks within Attribute Values

    +

    Avoid line breaks and multiple whitespace characters within +attribute values. These are handled inconsistently by user +agents.

    + +

    C.6 Isindex

    +

    Don't include more than one isindex element in +the document head. The isindex element +is deprecated in favor of the input element.

    + +

    C.7 The lang and xml:lang Attributes

    +

    Use both the lang and xml:lang +attributes when specifying the language of an element. The value +of the xml:lang attribute takes precedence.

    + +

    C.8 Fragment Identifiers

    +

    In XML, URIs [RFC2396] that end with fragment identifiers of the form +"#foo" do not refer to elements with an attribute +name="foo"; rather, they refer to elements with an +attribute defined to be of type ID, e.g., the +id attribute in HTML 4.0. Many existing HTML clients don't +support the use of ID-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., <a id="foo" name="foo">...</a>).

    + +

    Further, since the set of +legal values for attributes of type ID is much smaller than +for those of type CDATA, the type of the name +attribute has been changed to NMTOKEN. This attribute is +constrained such that it can only have the same values as type +ID, or as the Name 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.

    +

    Finally, note that XHTML 1.0 has deprecated the +name attribute of the a, applet, frame, iframe, img, and map +elements, and it will be +removed from XHTML in subsequent versions.

    + +

    C.9 Character Encoding

    +

    To specify a character encoding in the document, use both the +encoding attribute specification on the xml declaration (e.g. +<?xml version="1.0" +encoding="EUC-JP"?>) and a meta http-equiv statement +(e.g. <meta http-equiv="Content-type" +content='text/html; charset="EUC-JP"' />). The +value of the encoding attribute of the xml processing instruction +takes precedence.

    + +

    C.10 Boolean Attributes

    +

    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: compact, nowrap, +ismap, declare, noshade, +checked, disabled, readonly, +multiple, selected, +noresize, defer.

    + +

    C.11 Document Object Model and XHTML

    +

    +The Document Object Model level 1 Recommendation [DOM] +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: +

    +
      +
    1. Applications that access XHTML documents served as Internet media type +text/html +via the DOM can use the HTML DOM, +and can rely upon element and attribute names being returned in +upper-case from those interfaces.
    2. +
    3. Applications that access XHTML documents served as Internet media types +text/xml or application/xml +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 tbody element within +table). 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.
    4. +
    + +

    C.12 Using Ampersands in Attribute Values

    +

    +When an attribute value contains an ampersand, it must be expressed as a character +entity reference +(e.g. "&amp;"). For example, when the +href attribute +of the a element refers to a +CGI script that takes parameters, it must be expressed as +http://my.site.dom/cgi-bin/myscript.pl?class=guest&amp;name=user +rather than as +http://my.site.dom/cgi-bin/myscript.pl?class=guest&name=user. +

    + +

    C.13 Cascading Style Sheets (CSS) and XHTML

    + +

    The Cascading Style Sheets level 2 Recommendation [CSS2] 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:

    + +
      +
    1. +CSS style sheets for XHTML should use lower case element and +attribute names.
    2. + + +
    3. 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.
    4. + +
    5. 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.
    6. + +
    7. 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.
    8. + +
    9. +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.
    10. +
    + +

    Appendix D. +Acknowledgements

    + +

    This appendix is informative.

    + +

    This specification was written with the participation of the +members of the W3C HTML working group:

    + +
    +
    Steven Pemberton, CWI (HTML Working Group Chair)
    +Murray Altheim, Sun Microsystems
    +Daniel Austin, CNET: The Computer Network
    +Frank Boumphrey, HTML Writers Guild
    +John Burger, Mitre
    +Andrew W. Donoho, IBM
    +Sam Dooley, IBM
    +Klaus Hofrichter, GMD
    +Philipp Hoschka, W3C
    +Masayasu Ishikawa, W3C
    +Warner ten Kate, Philips Electronics
    +Peter King, Phone.com
    +Paula Klante, JetForm
    +Shin'ichi Matsui, W3C/Panasonic
    +Shane McCarron, Applied Testing and Technology (The Open Group through August +1999)
    +Ann Navarro, HTML Writers Guild
    +Zach Nies, Quark
    +Dave Raggett, W3C/HP (W3C lead for HTML)
    +Patrick Schmitz, Microsoft
    +Sebastian Schnitzenbaumer, Stack Overflow
    +Chris Wilson, Microsoft
    +Ted Wugofski, Gateway 2000
    +Dan Zigmond, WebTV Networks
    +
    + + +

    Appendix E. References

    + +

    This appendix is informative.

    + +
    + +
    [CSS2]
    + +
    "Cascading Style Sheets, level 2 (CSS2) Specification", B. +Bos, H. W. Lie, C. Lilley, I. Jacobs, 12 May 1998.
    +Available at: +http://www.w3.org/TR/REC-CSS2
    + +
    [DOM]
    + +
    "Document Object Model (DOM) Level 1 Specification", Lauren +Wood et al., 1 October 1998.
    +Available at: +http://www.w3.org/TR/REC-DOM-Level-1
    + +
    [HTML]
    + +
    "HTML 4.01 Specification", D. Raggett, A. Le Hors, I. +Jacobs, 24 August 1999.
    +Available at: +http://www.w3.org/TR/1999/PR-html40-19990824
    + +
    [POSIX.1]
    + +
    "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.
    + +
    +[RFC2046]
    + +
    "RFC2046: Multipurpose Internet Mail Extensions (MIME) Part +Two: Media Types", N. Freed and N. Borenstein, November +1996.
    +Available at +http://www.ietf.org/rfc/rfc2046.txt. Note that this RFC +obsoletes RFC1521, RFC1522, and RFC1590.
    + +
    +[RFC2119]
    + +
    "RFC2119: Key words for use in RFCs to Indicate Requirement +Levels", S. Bradner, March 1997.
    +Available at: +http://www.ietf.org/rfc/rfc2119.txt
    + +
    +[RFC2376]
    + +
    "RFC2376: XML Media Types", E. Whitehead, M. Murata, July +1998.
    +Available at: +http://www.ietf.org/rfc/rfc2376.txt
    + +
    +[RFC2396]
    + +
    "RFC2396: Uniform Resource Identifiers (URI): Generic +Syntax", T. Berners-Lee, R. Fielding, L. Masinter, August +1998.
    +This document updates RFC1738 and RFC1808.
    +Available at: +http://www.ietf.org/rfc/rfc2396.txt
    + +
    [XML]
    + +
    "Extensible Markup Language (XML) 1.0 Specification", T. +Bray, J. Paoli, C. M. Sperberg-McQueen, 10 February 1998.
    +Available at: +http://www.w3.org/TR/REC-xml
    + +
    [XMLNAMES]
    + +
    "Namespaces in XML", T. Bray, D. Hollander, A. Layman, 14 +January 1999.
    +XML namespaces provide a simple method for qualifying names used +in XML documents by associating them with namespaces identified +by URI.
    +Available at: +http://www.w3.org/TR/REC-xml-names
    + +
    +

    +

    + + + + 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 Linking Language (XLink) + Version 1.0 + WD-xlink-19990527 + World Wide Web Consortium Working Draft + 29May1999 + +

    This draft is for public discussion.

    +
    + http://www.w3.org/XML/Group/1999/05/WD-xlink-current + + + http://www.w3.org/XML/Group/1999/05/WD-xlink-19990527 + http://www.w3.org/XML/Group/1999/05/WD-xlink-19990505 + http://www.w3.org/TR/1998/WD-xlink-19980303 + http://www.w3.org/TR/WD-xml-link-970630 + + + + + + Steve DeRose + Inso Corp. and Brown University + Steven_DeRose@Brown.edu + + + David Orchard + IBM Corp. + dorchard@ca.ibm.com + + + Ben Trafford + Invited Expert + bent@exemplary.net + + + + + +

    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 http://www.w3.org/TR.

    +

    Note: 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 .

    +

    This work is part of the W3C XML Activity (for current status, see http://www.w3.org/XML/Activity ). For information about the XPointer language which is expected to be used with XLink, see http://www.w3.org/TR/WD-xptr. +

    +

    See http://www.w3.org/TR/NOTE-xlink-principles for additional background on the design principles informing XLink.

    +

    Also see http://www.w3.org/TR/NOTE-xlink-req/ for the XLink requirements that this document attempts to satisfy.

    +
    + + + +

    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.

    +
    + + +

    Burlington, Seekonk, et al.: World-Wide Web Consortium, XML Working Group, 1998.

    +
    + + +

    Created in electronic form.

    +
    + + + English + Extended Backus-Naur Form (formal grammar) + + + + + 1997-01-15 : Skeleton draft by TB + 1997-01-24 : Fleshed out by sjd + 1997-04-08 : Substantive draft + 1997-06-30 : Public draft + 1997-08-01 : Public draft + 1997-08-05 : Prose/organization work by sjd + 1997-10-14: Conformance and design principles; a bit of cleanup by elm + 1997-11-07: Update for editorial issues per issues doc, by sjd. + 1997-12-01: Update for editorial issues per issues doc in preparation for F2F meeting, by sjd. + 1998-01-13: Editorial cleanup, addition of new design principles, by elm. + 1998-02-27: Splitting out of XLink and XPointer, by elm. + 1998-03-03: Moved most of the XPointer locator stuff here. elm + 1999-04-24: Editorial rewrites to represent new ideas on XLink, especially the inclusion of arcs. bent + 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 + 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 + 1999-05-17: Further prose work. Added non-normative examples. Clarified arcs. bent + 1999-05-23: Edited for grammar and clarity. bent + 1999-05-27: Final once-over before sending to group. Fixed sjd's email address. bent + + +
    + + + + Introduction +

    This specification defines constructs that may be inserted into XML DTDs, schemas, and document instances to describe links between objects. A link, 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.

    +

    Links are asserted by elements contained in XML document instances. The simplest case is very like an HTML A link, and has these characteristics: + +

    The link is expressed at one of its ends (similar to the A element in some document)

    +

    Users can only initiate travel from that end to the other

    +

    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 A links normally replaces the current view, perhaps with a user option to open a new window.

    +

    The link goes to only one destination (although a server may have great freedom in finding or dynamically creating that destination).

    + +

    +

    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. +

    + + + Origin and Goals +

    Following is a summary of the design principles governing XLink: + +

    XLink must be straightforwardly usable over the Internet.

    +

    XLink must be usable by a wide variety of link usage domains and classes of linking application software.

    +

    XLink must support HTML 4.0 linking constructs.

    +

    The XLink expression language must be XML.

    +

    The XLink design must be formal, concise, and illustrative.

    +

    XLinks must be human-readable and human-writable.

    +

    XLinks may reside within or outside the documents in which the + participating resources reside.

    +

    XLink must represent the abstract structure and significance of links.

    +

    XLink must be feasible to implement.

    +

    XLink must be informed by knowledge of established hypermedia systems and standards.

    + +

    +
    + + + + Relationship to Existing Standards +

    Three standards have been especially influential: + +

    HTML: Defines several SGML element types that represent links.

    +

    HyTime: Defines inline and out-of-line link structures and some semantic features, including traversal control and presentation of objects. +

    +

    Text Encoding Initiative Guidelines (TEI P3): Provides structures for creating links, aggregate objects, and link collections out of them.

    + +

    +

    Many other linking systems have also informed this design, especially Dexter, FRESS, MicroCosm, and InterMedia.

    +
    + + + Terminology +

    The following basic terms apply in this document. + + + +

    A symbolic representation of traversal behavior in links, especially the direction, context and timing of traversal.

    + + + +

    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.

    +
    + + +

    Abstractly, a link which serves as one of its own resources. Concretely, a link where the content of the linking element serves as a participating resource. + HTML A, HyTime clink, and TEI XREF + are all inline links.

    +
    + + +

    An explicit relationship between two or more data objects or portions of data objects.

    +
    + + +

    An element that asserts the existence and describes the characteristics of a link.

    +
    + + +

    The content of an inlinelinking element. Note that the content of the linking element could be explicitly pointed to by means of a regular locator in the same linking element, in which case the resource is considered remote, not local.

    +
    + + +

    Data, provided as part of a link, which identifies a + resource.

    +
    + + +

    A link whose traversal can be initiated from more than one of its participating resources. Note that being able to "go back" after following a one-directional link does not make the link multidirectional.

    +
    + + +

    A link whose content does not serve as one of the link's participating resources . Such links presuppose a notion like extended link groups, which instruct application software where to look for links. Out-of-line links are generally required for supporting multidirectional traversal and for allowing read-only resources to have outgoing links.

    +
    + +

    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.

    +
    + + +

    A resource that belongs to a link. All resources are potential contributors to a link; participating resources are the actual contributors to a particular link.

    +
    + + +

    Any participating resource of a link that is pointed to with a locator.

    +
    + + +

    In the abstract sense, an addressable unit of information or service that is participating in a link. Examples include files, images, documents, programs, and query results. Concretely, anything reachable by the use of a locator in some linking element. Note that this term and its definition are taken from the basic specifications governing the World Wide Web. +

    +
    + + +

    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.

    +
    + + +

    The action of using a link; that is, of accessing a resource. Traversal may be initiated by a user action (for example, clicking on the displayed content of a linking element) or occur under program control.

    +
    + +

    +
    + + + Notation +

    The formal grammar for locators is given using a simple Extended Backus-Naur Form (EBNF) location, as described in the XML specification.

    + +
    +
    + + + Locator Syntax +

    The locator for a resource 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.

    + +

    A locator generally contains a URI, as described in IETF RFCs and . As these RFCs state, the URI may include a trailing query (marked by a leading "?"), and be followed by a "#" and a fragment identifier, 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.

    + +

    In order to locate XML documents and portions of documents, a locator value may contain either a URI or a fragment identifier, or both. Any fragment identifier for pointing into XML must be an XPointer.

    +

    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. + + Locator + + Locator + URI + | Connector (XPointer | Name) + | URI Connector (XPointer | Name) + + + Connector'#' | '|' + + + URIURIchar* + + +

    +

    In this discussion, the term designated resource refers to the resource which an entire locator serves to locate. The following rules apply: + + +

    The URI, if provided, locates a resource called the containing resource.

    + + +

    If the URI is not provided, the containing resource is considered to be the document in which the linking element is contained. +

    + +

    If an XPointer is provided, the designated resource is a sub-resource + of the containing resource; otherwise the designated resource is the + containing resource.

    +
    + + +

    If the Connector is followed directly by a Name, the Name is shorthand for the XPointer"id(Name)"; that is, the sub-resource is the element in the containing resource that has an XML ID attribute whose value matches the Name. This shorthand is to encourage use of the robust id addressing mode.

    +
    + + +

    If the connector is "#", 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.

    +
    + +

    If the connector is "|", no intent is signaled as to what processing model is to be used to go about accessing the designated resource.

    +
    + +

    +

    Note that the definition of a URI includes an optional query component.

    +

    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: + + Query + + Query'XML-XPTR=' ( XPointer | Name) + + +

    + +
    + + + Link Recognition +

    The existence of a link is asserted by a linking element. 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 namespace 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.

    +

    The two approaches to identifying linking elements are relatively simple to implement. For example, here's how the HTML A element would be declared using attributes within the XLink namespace, and then how an element within the XLink namespace might do the same: + <A xlink:type="simple" xlink:href="http://www.w3.org/TR/wd-xlink/" +xlink:title="The Xlink Working Draft">The XLink Working Draft.</A> + <xlink:simple href="http://www.w3.org/TR/wd-xlink/" +title="The XLink Working Draft">The XLink Working Draft</xlink:simple> + Any arbitrary element can be made into an XLink by using the xlink:type 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 xlink namespace prefix if they existed within an arbitrary element, or that they may be used directly if they exist within an explicit Xlink element.

    + +
    + + + + Linking Attributes +

    XLink has several attributes associated with the variety of links it may represent. These attributes define four main concepts: locators, arcs, behaviors, and semantics. Locators define where the actual resource is located. Arcs 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. Behaviors define how the link is activated, and what the application should do with the resource being linked to. Semantics define useful information that the application may use, and enables the link for such specalized targets as constricted devices and accessibility software.

    + + + Locator Attributes +

    The only locator attribute at this time is href. 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.

    +
    + + + Arc Attributes +

    Arcs contain two attributes, from and to. The from attribute may contain a string containing the content of a role attribute from the resource being linked from. The purpose of the from attribute is to define where this link is being actuated from.

    +

    The to attribute may contain a string containing the content of a role attribute from the resource being linked to. The purpose of the to attribute is to define where this link traverses to.

    +

    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.

    + +
    + + + Behavior Attributes +

    There are two attributes associated with behavior: show and actuate. The show attribute defines how the remote resource is to be revealed to the user. It has three options: new, parsed, and replace. The new option indicates that the remote resource should be shown in a new window (or other device context) without replacing the previous content. The parsed 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 replace 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.

    +

    The actuate attribute defines how the link is initiated. It has two options: user and auto. The user option indicates that the link must be initiated by some sort of human-initiated selection, such as clicking on an HTML anchor. The auto 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 show option.

    + +
    + + + Semantic Attributes +

    There are two attributes associated with semantics, role and title. The role 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 role="stanza". The role is also used as an identifier for the from and to attributes of arcs.

    +

    The title 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 title attribute contains a simple, descriptive string.

    +
    +
    + + + Linking Elements +

    There are several kinds of linking elements in XLink: simple links, locators, arcs, and extended 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.

    +

    The simple link is used to declare a link that approximates the functionality of the HTML A element. It has, however, a few added features to increase its value, including the potential declaration of semantics and behavior. The locator 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 arcs are used to define the traversal semantics of the link. Finally, an extended 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.

    + + + Simple Links + +

    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. + <!ELEMENT xlink:simple ANY> +<!ATTLIST xlink:slink + href CDATA #REQUIRED + role CDATA #IMPLIED + title CDATA #IMPLIED + show (new|parsed|replace) "replace" + actuate (user|auto) "user" +> + And here is how to make an arbitrary element into a simple link. + <!ELEMENT xlink:simple ANY> +<!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" +> + Here is how the first example might look in a document: +<xlink:simple href="http://www.w3.org/TR/wd-xlink" role="working draft" + title="The XLink Working Draft" show="replace" actuate="user"> +The XLink Working Draft.</xlink:simple> +<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"> +The XLink Working Draft.</foo> + Alternately, a simple link could be as terse as this: +<foo xlink:href="#stanza1">The First Stanza.</foo> +

    +

    + There are no constraints on the contents of a simple linking element. In + the sample declaration above, it is given a content model of ANY + 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.

    +

    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.

    +
    + + +Extended Links +

    An extended link 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.

    +

    These additional capabilities of extended links are required for: + + +

    Enabling outgoing links in documents that cannot be modified to add an inline link

    + + +

    Creating links to and from resources in formats with no native support for embedded links (such as most multimedia formats)

    +
    + +

    Applying and filtering sets of relevant links on demand

    +
    +

    Enabling other advanced hypermedia capabilities

    + +

    +

    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).

    +

    A linking element for an extended link contains a series of child elements 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).

    +

    The xlink:type attribute value for an extended link must be extended, if the link is being instantiated on an arbitrary element. Note that extended links introduce variants of the show and actuate behavior attributes. These attributes, the showdefault and actuatedefault 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.

    +

    However, when a linking element within an extended link has a show or actuate attribute of its own, that attribute overrides the defaults set on the extended linking element.

    +

    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: + +<!ELEMENT xlink:extended ((xlink:arc | xlink:locator)*)> +<!ATTLIST xlink:extended + role CDATA #IMPLIED + title CDATA #IMPLIED + showdefault (new|parsed|replace) #IMPLIED + actuatedefault (user|auto) #IMPLIED > + + The second is an example of an arbitrary element being used an extended link: + +<!ELEMENT foo ((xlink:arc | xlink:locator)*)> +<!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 > + + 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: + +<xlink:extended role="address book" title="Ben's Address Book" showdefault="replace" actuatedefault="user"> ... </xlink:extended> + + And the second shows how the link might appear, using an arbitrary element: + +<foo xlink:type="extended" xlink:role="address book" xlink:title="Ben's Address Book" xlink:showdefault="replace" xlink:actuatedefault="user"> ... </foo> +

    + +
    + + + Arc Elements +

    An arc is contained within an extended link for the purpose of defining traversal behavior. More than one arc may be associated with a link. Otherwise, arc elements function exactly as the arc attributes might lead on to expect.

    + +
    + +
    + +Conformance +

    An element conforms to XLink if: +

    The element has an xml:link attribute whose value is +one of the attribute values prescribed by this specification, and

    +

    the element and all of its attributes and content adhere to the +syntactic +requirements imposed by the chosen xml:link attribute value, +as prescribed in this specification.

    +

    +

    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.

    +

    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.

    +
    + + +Unfinished Work + +Structured Titles +

    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.

    +
    +
    + +References + +Eve Maler and Steve DeRose, editors. +XML Pointer Language (XPointer) V1.0. ArborText, Inso, and Brown +University. Burlington, Seekonk, et al.: World Wide Web Consortium, 1998. +(See http://www.w3.org/TR/WD-xptr + .) +ISO (International Organization for +Standardization). ISO/IEC 10744-1992 (E). Information technology +- Hypermedia/Time-based Structuring Language (HyTime). [Geneva]: +International Organization for Standardization, 1992. Extended +Facilities +Annex. [Geneva]: International Organization for Standardization, +1996. (See http://www.ornl.go +v/sgml/wg8/hytime/html/is10744r.html ). +IETF (Internet Engineering Task +Force). +RFC 1738: Uniform Resource Locators. 1991. (See +http://www.w3.org/Addressing/rfc1738.txt). +IETF (Internet Engineering Task +Force). +RFC 1808: Relative Uniform Resource Locators. 1995. (See http://www.w3.org/Addressing/rfc +1808.txt ). +C. M. Sperberg-McQueen and Lou Burnard, editors. + +Guidelines for Electronic Text Encoding and Interchange. 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. +]Steven J. DeRose and David G. Durand. 1995. "The +TEI Hypertext Guidelines." In Computing and the Humanities +29(3). +Reprinted in Text Encoding Initiative: Background and +Context, +ed. Nancy Ide and Jean ronis , ISBN 0-7923-3704-2. + +
    + 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 @@ + + + + + + + + + + + + + + + +

    If automatic testing failed, select Failed + + + + + .

    +
    + +
    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 @@ + + + &unknown; but Okay 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 @@ + +prefix is indeclared here"> +]> + + &xml; + diff --git a/test/winblanks.xml b/test/winblanks.xml new file mode 100644 index 0000000..8f937f2 --- /dev/null +++ b/test/winblanks.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file 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 @@ + + + + +

    + Cinéma
    +

    + +
    +
    + diff --git a/test/xhtml1 b/test/xhtml1 new file mode 100644 index 0000000..70e3a34 --- /dev/null +++ b/test/xhtml1 @@ -0,0 +1,34 @@ + + + + + + Virtual Library + + + + +

    Moved to example.org.

    + + + foo + +

    + +

    coucou

    +

    salut

    + +

    test

    + +
    +
    Internet Engineering Task Force
    +
    An organization which establishes technical standards for the Internet
    +
    + + + + diff --git a/test/xhtmlcomp b/test/xhtmlcomp new file mode 100644 index 0000000..47dd2a7 --- /dev/null +++ b/test/xhtmlcomp @@ -0,0 +1,8 @@ + + + + +

    a b

    + + diff --git a/test/xml1 b/test/xml1 new file mode 100644 index 0000000..40df24a --- /dev/null +++ b/test/xml1 @@ -0,0 +1,7 @@ + +An ampersand (&#38;) may be escaped + numerically (&#38;#38;) or with a general entity + (&amp;).

    " > +]> +&example; diff --git a/test/xml2 b/test/xml2 new file mode 100644 index 0000000..922314b --- /dev/null +++ b/test/xml2 @@ -0,0 +1,8 @@ + + + +' > +%xx; +]> +This sample shows a &tricky; method. diff --git a/test/xmlid/id_err1.xml b/test/xmlid/id_err1.xml new file mode 100644 index 0000000..d8c47cc --- /dev/null +++ b/test/xmlid/id_err1.xml @@ -0,0 +1 @@ + diff --git a/test/xmlid/id_err2.xml b/test/xmlid/id_err2.xml new file mode 100644 index 0000000..99010a7 --- /dev/null +++ b/test/xmlid/id_err2.xml @@ -0,0 +1,5 @@ + + +]> + diff --git a/test/xmlid/id_tst1.xml b/test/xmlid/id_tst1.xml new file mode 100644 index 0000000..7c3249c --- /dev/null +++ b/test/xmlid/id_tst1.xml @@ -0,0 +1 @@ + diff --git a/test/xmlid/id_tst2.xml b/test/xmlid/id_tst2.xml new file mode 100644 index 0000000..2bf5861 --- /dev/null +++ b/test/xmlid/id_tst2.xml @@ -0,0 +1 @@ + diff --git a/test/xmlid/id_tst3.xml b/test/xmlid/id_tst3.xml new file mode 100644 index 0000000..7316a13 --- /dev/null +++ b/test/xmlid/id_tst3.xml @@ -0,0 +1 @@ + diff --git a/test/xmlid/id_tst4.xml b/test/xmlid/id_tst4.xml new file mode 100644 index 0000000..ea057a3 --- /dev/null +++ b/test/xmlid/id_tst4.xml @@ -0,0 +1,4 @@ + + + + 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 @@ + + +2001-12-01T19:45:00 +2001-12-01T19:45:00Z +2001-12-01T19:45:00-11:59 +0001-01-12T00:00:00+12:00 +2001-12-1T19:45:00+24:00 +2001-12-1T19:45:00 + + + 2001-12-01T19:45:00 + 2001-12-01T19:45:00.00 + + + 2001-12-01T19:45:00Z + 2001-12-01T19:45:00.00Z + 2001-12-01T20:45:00+01:00 + + + + +foobar +http://www.example.com +http://ji%6d@www.example.com +http://www.example.co%6d +nosuchscheme:stuff +foo$bar:stuff +f%oobar + + +10 +01 +0123456789 ++10 +-10 +1.0 +.1 +9999999999999999999999999999999 +1. +0. + + + 0 + +0 + -0 + 00 + + + 10 + +10 + +0010 + 010 + + + -10 + -0010 + -010 + + + + +P1Y +P1Y0M2DT17H5M12S +-P1Y +P60D +PT24H +PT1.2S +P24h +P24H +P1YT +P +-P + + + -P6M + + + P0Y + -P0Y + + + P1Y + P001Y + P001Y0M + P1Y0M0DT0H0M0.0S + + + P6M + + + PT6M + + + PT1S + PT1.0S + + + + PT1M + PT61S + + + PT59S + PT1M + + + PT60S + PT1M + + + PT1H + PT61M + + + PT59M + PT1H + + + PT60M + PT1H + + + P1D + PT25H + + + PT23H + P1D + + + P1D + PT24H + + + P1Y + P13M + + + P11M + P1Y + + + P12M + P1Y + + + P364D + P1Y + + + P1Y + P365D + + + P1Y + P366D + + + P1Y + P367D + + + P149D + P5M + + + P150D + P5M + + + P151D + P5M + + + P152D + P5M + + + P153D + P5M + + + P5M + P154D + + + P27D + P1M + + + P28D + P1M + + + P29D + P1M + + + P30D + P1M + + + P31D + P1M + + + P1M + P32D + + + +12:45:00 +12:45:00Z + + +1886-12-01 +1886-12-01Z + + 1066-12-31 + 1900-01-01 + + + 1900-01-01 + 1900-01-02 + + + +1996-12 +1996-01 +1996-01Z +1996-00 + +1996-01 + + 1996-01Z + 1996-01+00:00 + 1996-01-00:00 + +1996-01+01:00 +1996-01-01:00 + + + +2001 +2001Z + + 1999 + 2000 + + + 1999+07:00 + 2000+07:00 + + + +--12-01 +--12-01Z + + --12-01 + --12-04 + + + --11-17 + --12-04 + + + +---20 +---20Z + + ---01 + ---31 + + + +--12 +--01 +--01Z + --12 +---01 +--00 +--13 +- -13 + + --01 + --12 + + + --01 + --02 + + + +true +false +0 +1 +00 +00 +01 + +true1 +false0 + + + +AAAA +abcd efgh ijkl mnop qrst uvwx yzAB CDEF GHIJ KLMN OPQR +STUV WXYZ 0123 4567 89+/ +BA== + +BA== +BQ== +Bg== +Bw== +BBA= +BBA= +BBE= +BBI= +BBM= +BBQ= +BBU= +BBY= +BBc= +BBg= +BBk= +BBo= +BBs= +BBw= +BB0= +BB4= +BB8= +==== +BB== +BBB= +B=== +B + + +deadbeef +d e a d +b eef + + +DEADBEEF +D E A D +B EEF + + + +deadbeef +BA== +BBA= +dead +deadBA== + + +deadbeef + +0123456789ABCDEFabcdef +00 00 +00.00 +0G + + + 00 + + 00 + + + + 01 + + + 10 + + + 0a + 0A + + + +00 +0000 + 0000 +AAAA + + +1.0 +1. +.1 +- 1 +1 .0 ++INF ++NaN +-NaN + + + 0 + -0 + +0 + 0 + 0. + .0 + 0.0 + 0e0 + 0E0 + 0E+0 + 0E-0 + + + 1E0 + 0.1E1 + 10E-1 + +1 + + + -1 + + + INF + INF + + + -INF + -INF + + + NaN + NaN + + + + -INF + -1000 + + + 1000 + INF + + + -1 + 1 + + + 0 + 1 + + + -1 + 0 + + + +1.0 +1. +.1 +- 1 +1 .0 ++INF ++NaN +-NaN + + + 0 + -0 + +0 + 0 + 0. + .0 + 0.0 + 0e0 + 0E0 + 0E+0 + 0E-0 + + + 1E0 + 0.1E1 + 10E-1 + +1 + + + -1 + + + INF + INF + + + -INF + -INF + + + NaN + NaN + + + + -INF + -1000 + + + 1000 + INF + + + -1 + 1 + + + 0 + 1 + + + -1 + 0 + + + +foo +x:foo +y:foo + + + foo + foo + + + x:foo + x:foo + z:foo + + + x:bar + z:bar + + + y:foo + + + y:bar + + + + +foo +x:foo +y:foo + + +1.0 +1. +.1 ++1.0 +-1.0 + 1 +99999999999999999999999999999999999999999999999999999999999999999 +-99999999999999999999999999999999999999999999999999999999999999999 +junk +--1 +++1 ++-1 +1.2. +..1 +1.. +1 .2 +1+ ++ 1 + + 0 + 1 + + + +-1 +0 +-0 +1 + + +1 +0 ++1 ++0 +-1 + + ++1 +1 +0 +-1 + + +-1 ++1 +0 + + +1 ++1 +0 + 0 +1 2 +9999999999999999999999999999999999999999999999999999999999999999999999999 +9223372036854775807 +-9223372036854775808 +9223372036854775808 +-9223372036854775809 + + + +1 +01 + 1 +2147483647 +-2147483648 +2147483648 +-2147483649 +9999999999999999999999999999999999999999999999999999999999999999999999999 + + + 1 + +1 + 1 + 001 + + + -1 + -1 + -001 + + + + +1 +32767 +-32768 +32768 +-32769 +9999999999999999999999999999999999999999999999999999999999999999999999999 + + + 1 + +1 + 1 + 001 + + + -1 + -1 + -001 + + + + +1 +127 +-128 +128 +-129 + + +1 ++1 +-1 +0 +18446744073709551615 +18446744073709551616 +-1 + + +1 ++1 +0 +4294967295 +4294967296 +-1 + + +1 ++1 +0 +65535 +65536 +-1 + + +1 ++1 +0 +255 +256 +-1 + + +any thing at all! + + +any thing at all! + + +any thing at all! + + + + + + + + x + x + x + x + x + x + x + x + x + + + x y + x y + x y + x y + x y + x y + x y + x y + x y + x y + x y + x y + x y + + + +x + x +𐠀 + + +en +en-UK +i-cherokee +x-klingon +en-uk-scotland +en.UK + + +foo +_0123456789 +. +: +- +1234 + foo + + +foo +foo:bar +0foo + +foo foo +FOO FOO + + + +foo +_ +. +: +- +1234 + foo + foo +fo +f + + +foo bar + +1 2 3 4 + + +foobar +foo:bar +foo bar + + + +foo +foo + + + +foo + foo bar + + 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 @@ + + + + + + + + + + + + + + + +Datatype + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<!DOCTYPE + + [ + + + +]> + + + + + + + + + element + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 @@ + + + + Datatype dateTime + + + + + + + + + 2001-12-01T19:45:00 + + + 2001-12-01T19:45:00Z + + + 2001-12-01T19:45:00-11:59 + + + 0001-01-12T00:00:00+12:00 + + + 2001-12-1T19:45:00+24:00 + + + 2001-12-1T19:45:00 + + + + + + 2001-12-01T19:45:00 + + + + 2001-12-01T19:45:00.00 + + + 2001-12-01T19:45:00Z + + + 2001-12-01T19:45:00.00Z + + + 2001-12-01T20:45:00+01:00 + + + + + + 2001-12-01T19:45:00Z + + + + 2001-12-01T19:45:00.00Z + + + 2001-12-01T20:45:00+01:00 + + + 2001-12-01T19:45:00 + + + 2001-12-01T19:45:00.00 + + + + + Datatype anyURI + + + + + + + + + foobar + + + http://www.example.com + + + http://ji%6d@www.example.com + + + http://www.example.co%6d + + + nosuchscheme:stuff + + + foo$bar:stuff + + + f%oobar + + + + + Datatype integer + + + + + + + + + 10 + + + 01 + + + 0123456789 + + + +10 + + + -10 + + + 1.0 + + + .1 + + + 9999999999999999999999999999999 + + + 1. + + + 0. + + + + + + 0 + + + + +0 + + + -0 + + + 00 + + + 10 + + + +10 + + + +0010 + + + 010 + + + -10 + + + -0010 + + + -010 + + + + + + 10 + + + + +10 + + + +0010 + + + 010 + + + 0 + + + +0 + + + -0 + + + 00 + + + -10 + + + -0010 + + + -010 + + + + + + -10 + + + + -0010 + + + -010 + + + 0 + + + +0 + + + -0 + + + 00 + + + 10 + + + +10 + + + +0010 + + + 010 + + + + + Datatype duration + + + + + + + + + P1Y + + + P1Y0M2DT17H5M12S + + + -P1Y + + + P60D + + + PT24H + + + PT1.2S + + + P24h + + + P24H + + + P1YT + + + P + + + -P + + + + + + -P6M + + + + P0Y + + + -P0Y + + + P1Y + + + P001Y + + + P001Y0M + + + P1Y0M0DT0H0M0.0S + + + P6M + + + PT6M + + + PT1S + + + PT1.0S + + + + + + P0Y + + + + -P0Y + + + -P6M + + + P1Y + + + P001Y + + + P001Y0M + + + P1Y0M0DT0H0M0.0S + + + P6M + + + PT6M + + + PT1S + + + PT1.0S + + + + + + P1Y + + + + P001Y + + + P001Y0M + + + P1Y0M0DT0H0M0.0S + + + -P6M + + + P0Y + + + -P0Y + + + P6M + + + PT6M + + + PT1S + + + PT1.0S + + + + + + P6M + + + + -P6M + + + P0Y + + + -P0Y + + + P1Y + + + P001Y + + + P001Y0M + + + P1Y0M0DT0H0M0.0S + + + PT6M + + + PT1S + + + PT1.0S + + + + + + PT6M + + + + -P6M + + + P0Y + + + -P0Y + + + P1Y + + + P001Y + + + P001Y0M + + + P1Y0M0DT0H0M0.0S + + + P6M + + + PT1S + + + PT1.0S + + + + + + PT1S + + + + PT1.0S + + + -P6M + + + P0Y + + + -P0Y + + + P1Y + + + P001Y + + + P001Y0M + + + P1Y0M0DT0H0M0.0S + + + P6M + + + PT6M + + + + + + + PT1M + + + + + PT61S + + + PT1M + + + + + + + PT61S + + + + + PT1M + + + PT61S + + + + + + + PT59S + + + + + PT1M + + + PT59S + + + + + + + PT1M + + + + + PT59S + + + PT1M + + + + + + + PT60S + + + + + PT1M + + + PT60S + + + + + + + PT1M + + + + + PT60S + + + PT1M + + + + + + + PT1H + + + + + PT61M + + + PT1H + + + + + + + PT61M + + + + + PT1H + + + PT61M + + + + + + + PT59M + + + + + PT1H + + + PT59M + + + + + + + PT1H + + + + + PT59M + + + PT1H + + + + + + + PT60M + + + + + PT1H + + + PT60M + + + + + + + PT1H + + + + + PT60M + + + PT1H + + + + + + + P1D + + + + + PT25H + + + P1D + + + + + + + PT25H + + + + + P1D + + + PT25H + + + + + + + PT23H + + + + + P1D + + + PT23H + + + + + + + P1D + + + + + PT23H + + + P1D + + + + + + + P1D + + + + + PT24H + + + P1D + + + + + + + PT24H + + + + + P1D + + + PT24H + + + + + + + P1Y + + + + + P13M + + + P1Y + + + + + + + P13M + + + + + P1Y + + + P13M + + + + + + + P11M + + + + + P1Y + + + P11M + + + + + + + P1Y + + + + + P11M + + + P1Y + + + + + + + P12M + + + + + P1Y + + + P12M + + + + + + + P1Y + + + + + P12M + + + P1Y + + + + + + + P364D + + + + + P1Y + + + P364D + + + + + + + P1Y + + + + + P364D + + + P1Y + + + + + + + P1Y + + + + + P365D + + + P1Y + + + + + + + P365D + + + + + P1Y + + + P365D + + + + + + + P1Y + + + + + P366D + + + P1Y + + + + + + + P366D + + + + + P1Y + + + P366D + + + + + + + P1Y + + + + + P367D + + + P1Y + + + + + + + P367D + + + + + P1Y + + + P367D + + + + + + + P149D + + + + + P5M + + + P149D + + + + + + + P5M + + + + + P149D + + + P5M + + + + + + + P150D + + + + + P5M + + + P150D + + + + + + + P5M + + + + + P150D + + + P5M + + + + + + + P151D + + + + + P5M + + + P151D + + + + + + + P5M + + + + + P151D + + + P5M + + + + + + + P152D + + + + + P5M + + + P152D + + + + + + + P5M + + + + + P152D + + + P5M + + + + + + + P153D + + + + + P5M + + + P153D + + + + + + + P5M + + + + + P153D + + + P5M + + + + + + + P5M + + + + + P154D + + + P5M + + + + + + + P154D + + + + + P5M + + + P154D + + + + + + + P27D + + + + + P1M + + + P27D + + + + + + + P1M + + + + + P27D + + + P1M + + + + + + + P28D + + + + + P1M + + + P28D + + + + + + + P1M + + + + + P28D + + + P1M + + + + + + + P29D + + + + + P1M + + + P29D + + + + + + + P1M + + + + + P29D + + + P1M + + + + + + + P30D + + + + + P1M + + + P30D + + + + + + + P1M + + + + + P30D + + + P1M + + + + + + + P31D + + + + + P1M + + + P31D + + + + + + + P1M + + + + + P31D + + + P1M + + + + + + + P1M + + + + + P32D + + + P1M + + + + + + + P32D + + + + + P1M + + + P32D + + + + + Datatype time + + + + + + + + + 12:45:00 + + + 12:45:00Z + + + + + Datatype date + + + + + + + + + 1886-12-01 + + + 1886-12-01Z + + + + + + + 1066-12-31 + + + + + 1900-01-01 + + + 1066-12-31 + + + + + + + 1900-01-01 + + + + + 1066-12-31 + + + 1900-01-01 + + + + + + + 1900-01-01 + + + + + 1900-01-02 + + + 1900-01-01 + + + + + + + 1900-01-02 + + + + + 1900-01-01 + + + 1900-01-02 + + + + + Datatype gYearMonth + + + + + + + + + 1996-12 + + + 1996-01 + + + 1996-01Z + + + 1996-00 + + + + + + 1996-01 + + + + 1996-01Z + + + 1996-01+00:00 + + + 1996-01-00:00 + + + 1996-01+01:00 + + + 1996-01-01:00 + + + + + + 1996-01Z + + + + 1996-01+00:00 + + + 1996-01-00:00 + + + 1996-01 + + + 1996-01+01:00 + + + 1996-01-01:00 + + + + + + 1996-01+01:00 + + + + 1996-01 + + + 1996-01Z + + + 1996-01+00:00 + + + 1996-01-00:00 + + + 1996-01-01:00 + + + + + + 1996-01-01:00 + + + + 1996-01 + + + 1996-01Z + + + 1996-01+00:00 + + + 1996-01-00:00 + + + 1996-01+01:00 + + + + + Datatype gYear + + + + + + + + + 2001 + + + 2001Z + + + + + + + 1999 + + + + + 2000 + + + 1999 + + + + + + + 2000 + + + + + 1999 + + + 2000 + + + + + + + 1999+07:00 + + + + + 2000+07:00 + + + 1999+07:00 + + + + + + + 2000+07:00 + + + + + 1999+07:00 + + + 2000+07:00 + + + + + Datatype gMonthDay + + + + + + + + + --12-01 + + + --12-01Z + + + + + + + --12-01 + + + + + --12-04 + + + --12-01 + + + + + + + --12-04 + + + + + --12-01 + + + --12-04 + + + + + + + --11-17 + + + + + --12-04 + + + --11-17 + + + + + + + --12-04 + + + + + --11-17 + + + --12-04 + + + + + Datatype gDay + + + + + + + + + ---20 + + + ---20Z + + + + + + + ---01 + + + + + ---31 + + + ---01 + + + + + + + ---31 + + + + + ---01 + + + ---31 + + + + + Datatype gMonth + + + + + + + + + --12 + + + --01 + + + --01Z + + + --12 + + + ---01 + + + --00 + + + --13 + + + - -13 + + + + + + + --01 + + + + + --12 + + + --01 + + + + + + + --12 + + + + + --01 + + + --12 + + + + + + + --01 + + + + + --02 + + + --01 + + + + + + + --02 + + + + + --01 + + + --02 + + + + + Datatype boolean + + + + + + + + + true + + + false + + + 0 + + + 1 + + + 00 + + + 00 + + + 01 + + + + + + true + + + + 1 + + + false + + + 0 + + + + + + false + + + + 0 + + + true + + + 1 + + + + + Datatype base64Binary + + + + + + + + + AAAA + + + abcd efgh ijkl mnop qrst uvwx yzAB CDEF GHIJ KLMN OPQR +STUV WXYZ 0123 4567 89+/ + + + BA== + + + + + + BA== + + + BQ== + + + Bg== + + + Bw== + + + BBA= + + + BBA= + + + BBE= + + + BBI= + + + BBM= + + + BBQ= + + + BBU= + + + BBY= + + + BBc= + + + BBg= + + + BBk= + + + BBo= + + + BBs= + + + BBw= + + + BB0= + + + BB4= + + + BB8= + + + ==== + + + BB== + + + BBB= + + + B=== + + + B + + + + + + deadbeef + + + + d + e a d +b eef + + + DEADBEEF + + + D + E A D +B EEF + + + + + + DEADBEEF + + + + D + E A D +B EEF + + + deadbeef + + + d + e a d +b eef + + + + + + + 0 + + + + + + + + + + + + 1 + + + + + + + + + + + + 6 + + + + + deadbeef + + + + + + + 7 + + + + + deadbeef + + + + + + + 5 + + + + + deadbeef + + + + + + + 1 + + + + + BA== + + + + + + + 2 + + + + + BA== + + + + + + + 0 + + + + + BA== + + + + + + + 2 + + + + + BBA= + + + + + + + 3 + + + + + BBA= + + + + + + + 1 + + + + + BBA= + + + + + + + 3 + + + + + dead + + + + + + + 4 + + + + + dead + + + + + + + 2 + + + + + dead + + + + + + + 4 + + + + + deadBA== + + + + + + + 5 + + + + + deadBA== + + + + + + + 3 + + + + + deadBA== + + + + + Datatype hexBinary + + + + + + + + + deadbeef + + + + + + 0123456789ABCDEFabcdef + + + 00 00 + + + 00.00 + + + 0G + + + + + + 00 + + + + + 00 + + + + 01 + + + 10 + + + 0a + + + 0A + + + + + + 01 + + + + 00 + + + + 00 + + + + 10 + + + 0a + + + 0A + + + + + + 10 + + + + 00 + + + + 00 + + + + 01 + + + 0a + + + 0A + + + + + + 0a + + + + 0A + + + 00 + + + + 00 + + + + 01 + + + 10 + + + + + + + 0 + + + + + + + + + + + + 1 + + + + + + + + + + + + 1 + + + + + 00 + + + + + + + 2 + + + + + 00 + + + + + + + 0 + + + + + 00 + + + + + + + 2 + + + + + 0000 + + + + + + + 3 + + + + + 0000 + + + + + + + 1 + + + + + 0000 + + + + + + + 2 + + + + + 0000 + + + + + + + 3 + + + + + 0000 + + + + + + + 1 + + + + + 0000 + + + + + + + 2 + + + + + AAAA + + + + + + + 3 + + + + + AAAA + + + + + + + 1 + + + + + AAAA + + + + + Datatype float + + + + + + + + + 1.0 + + + 1. + + + .1 + + + - 1 + + + 1 .0 + + + +INF + + + +NaN + + + -NaN + + + + + + 0 + + + + -0 + + + +0 + + + 0 + + + 0. + + + .0 + + + 0.0 + + + 0e0 + + + 0E0 + + + 0E+0 + + + 0E-0 + + + 1E0 + + + 0.1E1 + + + 10E-1 + + + +1 + + + -1 + + + INF + + + INF + + + -INF + + + -INF + + + NaN + + + NaN + + + + + + 1E0 + + + + 0.1E1 + + + 10E-1 + + + +1 + + + 0 + + + -0 + + + +0 + + + 0 + + + 0. + + + .0 + + + 0.0 + + + 0e0 + + + 0E0 + + + 0E+0 + + + 0E-0 + + + -1 + + + INF + + + INF + + + -INF + + + -INF + + + NaN + + + NaN + + + + + + -1 + + + + 0 + + + -0 + + + +0 + + + 0 + + + 0. + + + .0 + + + 0.0 + + + 0e0 + + + 0E0 + + + 0E+0 + + + 0E-0 + + + 1E0 + + + 0.1E1 + + + 10E-1 + + + +1 + + + INF + + + INF + + + -INF + + + -INF + + + NaN + + + NaN + + + + + + INF + + + + INF + + + 0 + + + -0 + + + +0 + + + 0 + + + 0. + + + .0 + + + 0.0 + + + 0e0 + + + 0E0 + + + 0E+0 + + + 0E-0 + + + 1E0 + + + 0.1E1 + + + 10E-1 + + + +1 + + + -1 + + + -INF + + + -INF + + + NaN + + + NaN + + + + + + -INF + + + + -INF + + + 0 + + + -0 + + + +0 + + + 0 + + + 0. + + + .0 + + + 0.0 + + + 0e0 + + + 0E0 + + + 0E+0 + + + 0E-0 + + + 1E0 + + + 0.1E1 + + + 10E-1 + + + +1 + + + -1 + + + INF + + + INF + + + NaN + + + NaN + + + + + + NaN + + + + NaN + + + 0 + + + -0 + + + +0 + + + 0 + + + 0. + + + .0 + + + 0.0 + + + 0e0 + + + 0E0 + + + 0E+0 + + + 0E-0 + + + 1E0 + + + 0.1E1 + + + 10E-1 + + + +1 + + + -1 + + + INF + + + INF + + + -INF + + + -INF + + + + + + + -INF + + + + + -1000 + + + -INF + + + + + + + -1000 + + + + + -INF + + + -1000 + + + + + + + 1000 + + + + + INF + + + 1000 + + + + + + + INF + + + + + 1000 + + + INF + + + + + + + -1 + + + + + 1 + + + -1 + + + + + + + 1 + + + + + -1 + + + 1 + + + + + + + 0 + + + + + 1 + + + 0 + + + + + + + 1 + + + + + 0 + + + 1 + + + + + + + -1 + + + + + 0 + + + -1 + + + + + + + 0 + + + + + -1 + + + 0 + + + + + Datatype double + + + + + + + + + 1.0 + + + 1. + + + .1 + + + - 1 + + + 1 .0 + + + +INF + + + +NaN + + + -NaN + + + + + + 0 + + + + -0 + + + +0 + + + 0 + + + 0. + + + .0 + + + 0.0 + + + 0e0 + + + 0E0 + + + 0E+0 + + + 0E-0 + + + 1E0 + + + 0.1E1 + + + 10E-1 + + + +1 + + + -1 + + + INF + + + INF + + + -INF + + + -INF + + + NaN + + + NaN + + + + + + 1E0 + + + + 0.1E1 + + + 10E-1 + + + +1 + + + 0 + + + -0 + + + +0 + + + 0 + + + 0. + + + .0 + + + 0.0 + + + 0e0 + + + 0E0 + + + 0E+0 + + + 0E-0 + + + -1 + + + INF + + + INF + + + -INF + + + -INF + + + NaN + + + NaN + + + + + + -1 + + + + 0 + + + -0 + + + +0 + + + 0 + + + 0. + + + .0 + + + 0.0 + + + 0e0 + + + 0E0 + + + 0E+0 + + + 0E-0 + + + 1E0 + + + 0.1E1 + + + 10E-1 + + + +1 + + + INF + + + INF + + + -INF + + + -INF + + + NaN + + + NaN + + + + + + INF + + + + INF + + + 0 + + + -0 + + + +0 + + + 0 + + + 0. + + + .0 + + + 0.0 + + + 0e0 + + + 0E0 + + + 0E+0 + + + 0E-0 + + + 1E0 + + + 0.1E1 + + + 10E-1 + + + +1 + + + -1 + + + -INF + + + -INF + + + NaN + + + NaN + + + + + + -INF + + + + -INF + + + 0 + + + -0 + + + +0 + + + 0 + + + 0. + + + .0 + + + 0.0 + + + 0e0 + + + 0E0 + + + 0E+0 + + + 0E-0 + + + 1E0 + + + 0.1E1 + + + 10E-1 + + + +1 + + + -1 + + + INF + + + INF + + + NaN + + + NaN + + + + + + NaN + + + + NaN + + + 0 + + + -0 + + + +0 + + + 0 + + + 0. + + + .0 + + + 0.0 + + + 0e0 + + + 0E0 + + + 0E+0 + + + 0E-0 + + + 1E0 + + + 0.1E1 + + + 10E-1 + + + +1 + + + -1 + + + INF + + + INF + + + -INF + + + -INF + + + + + + + -INF + + + + + -1000 + + + -INF + + + + + + + -1000 + + + + + -INF + + + -1000 + + + + + + + 1000 + + + + + INF + + + 1000 + + + + + + + INF + + + + + 1000 + + + INF + + + + + + + -1 + + + + + 1 + + + -1 + + + + + + + 1 + + + + + -1 + + + 1 + + + + + + + 0 + + + + + 1 + + + 0 + + + + + + + 1 + + + + + 0 + + + 1 + + + + + + + -1 + + + + + 0 + + + -1 + + + + + + + 0 + + + + + -1 + + + 0 + + + + + Datatype QName + + + + + + + + + foo + + + x:foo + + + y:foo + + + + + + foo + + + + foo + + + x:foo + + + x:foo + + + z:foo + + + x:bar + + + z:bar + + + y:foo + + + y:bar + + + + + + x:foo + + + + x:foo + + + z:foo + + + foo + + + foo + + + x:bar + + + z:bar + + + y:foo + + + y:bar + + + + + + x:bar + + + + z:bar + + + foo + + + foo + + + x:foo + + + x:foo + + + z:foo + + + y:foo + + + y:bar + + + + + + y:foo + + + + foo + + + foo + + + x:foo + + + x:foo + + + z:foo + + + x:bar + + + z:bar + + + y:bar + + + + + + y:bar + + + + foo + + + foo + + + x:foo + + + x:foo + + + z:foo + + + x:bar + + + z:bar + + + y:foo + + + + + Datatype NOTATION + + + + + + + + + foo + + + x:foo + + + y:foo + + + + + Datatype decimal + + + + + + + + + 1.0 + + + 1. + + + .1 + + + +1.0 + + + -1.0 + + + 1 + + + 99999999999999999999999999999999999999999999999999999999999999999 + + + -99999999999999999999999999999999999999999999999999999999999999999 + + + junk + + + --1 + + + ++1 + + + +-1 + + + 1.2. + + + ..1 + + + 1.. + + + 1 .2 + + + 1+ + + + + 1 + + + + + + + 0 + + + + + 1 + + + 0 + + + + + + + 1 + + + + + 0 + + + 1 + + + + + Datatype nonPositiveInteger + + + + + + + + + -1 + + + 0 + + + -0 + + + 1 + + + + + Datatype nonNegativeInteger + + + + + + + + + 1 + + + 0 + + + +1 + + + +0 + + + -1 + + + + + Datatype positiveInteger + + + + + + + + + +1 + + + 1 + + + 0 + + + -1 + + + + + Datatype negativeInteger + + + + + + + + + -1 + + + +1 + + + 0 + + + + + Datatype long + + + + + + + + + 1 + + + +1 + + + 0 + + + 0 + + + 1 2 + + + 9999999999999999999999999999999999999999999999999999999999999999999999999 + + + 9223372036854775807 + + + -9223372036854775808 + + + 9223372036854775808 + + + -9223372036854775809 + + + + + + + + Datatype int + + + + + + + + + 1 + + + 01 + + + 1 + + + 2147483647 + + + -2147483648 + + + 2147483648 + + + -2147483649 + + + 9999999999999999999999999999999999999999999999999999999999999999999999999 + + + + + + 1 + + + + +1 + + + 1 + + + 001 + + + -1 + + + -1 + + + -001 + + + + + + -1 + + + + -1 + + + -001 + + + 1 + + + +1 + + + 1 + + + 001 + + + + + Datatype short + + + + + + + + + 1 + + + 32767 + + + -32768 + + + 32768 + + + -32769 + + + 9999999999999999999999999999999999999999999999999999999999999999999999999 + + + + + + 1 + + + + +1 + + + 1 + + + 001 + + + -1 + + + -1 + + + -001 + + + + + + -1 + + + + -1 + + + -001 + + + 1 + + + +1 + + + 1 + + + 001 + + + + + Datatype byte + + + + + + + + + 1 + + + 127 + + + -128 + + + 128 + + + -129 + + + + + Datatype unsignedLong + + + + + + + + + 1 + + + +1 + + + -1 + + + 0 + + + 18446744073709551615 + + + 18446744073709551616 + + + -1 + + + + + Datatype unsignedInt + + + + + + + + + 1 + + + +1 + + + 0 + + + 4294967295 + + + 4294967296 + + + -1 + + + + + Datatype unsignedShort + + + + + + + + + 1 + + + +1 + + + 0 + + + 65535 + + + 65536 + + + -1 + + + + + Datatype unsignedByte + + + + + + + + + 1 + + + +1 + + + 0 + + + 255 + + + 256 + + + -1 + + + + + Datatype string + + + + + + + + + any thing at all! + + + + + Datatype normalizedString + + + + + + + + + any thing at all! + + + + + Datatype token + + + + + + + + + any thing at all! + + + + + + + + + + + + + + + + + x + + + x + + + + x + + + x + + + x + + + +x + + + x + + + x + + + + x + + + + x y + + + x y + + + + x y + + + x y + + + x y + + + x +y + + + x y + + + x y + + + x y + + + +x y + + + x y + + + x y + + + + x + y + + + + + + + x + + + + x + + + + x + + + x + + + x + + + +x + + + x + + + x + + + + x + + + + + + + + + + + + + + x y + + + x y + + + + x y + + + x y + + + x y + + + x +y + + + x y + + + x y + + + x y + + + +x y + + + x y + + + x y + + + + x + y + + + + + + + x y + + + + x y + + + + x y + + + x y + + + x y + + + x +y + + + x y + + + x y + + + x y + + + +x y + + + x y + + + x y + + + + x + y + + + + + + + + + + + + + + x + + + x + + + + x + + + x + + + x + + + +x + + + x + + + x + + + + x + + + + + + + + 0 + + + + + + + + + + + + 1 + + + + + + + + + + + + 1 + + + + + x + + + + + + + 2 + + + + + x + + + + + + + 0 + + + + + x + + + + + + + 1 + + + + + x + + + + + + + 2 + + + + + x + + + + + + + 0 + + + + + x + + + + + + + 1 + + + + + ð € + + + + + + + 2 + + + + + ð € + + + + + + + 0 + + + + + ð € + + + + + Datatype language + + + + + + + + + en + + + en-UK + + + i-cherokee + + + x-klingon + + + en-uk-scotland + + + en.UK + + + + + Datatype Name + + + + + + + + + foo + + + _0123456789 + + + . + + + : + + + - + + + 1234 + + + foo + + + + + Datatype NCName + + + + + + + + + foo + + + foo:bar + + + 0foo + + + + + + foo + + + + foo + + + FOO + + + FOO + + + + + + FOO + + + + FOO + + + foo + + + foo + + + + + Datatype NMTOKEN + + + + + + + + + foo + + + _ + + + . + + + : + + + - + + + 1234 + + + foo + + + + + + + 3 + + + + + foo + + + + + + + 4 + + + + + foo + + + + + + + 2 + + + + + foo + + + + + + + 2 + + + + + fo + + + + + + + 3 + + + + + fo + + + + + + + 1 + + + + + fo + + + + + + + 1 + + + + + f + + + + + + + 2 + + + + + f + + + + + + + 0 + + + + + f + + + + + Datatype NMTOKENS + + + + + + + + + foo bar + + + + + + 1 2 3 4 + + + + + Datatype ID + + + + + + + + + foobar + + + foo:bar + + + foo bar + + + + + Datatype ENTITY + + + + + + + + + + + + foo + + + foo + + + + + Datatype ENTITIES + + + + + + + + + + + + foo + + + foo bar + + + + diff --git a/testAutomata.c b/testAutomata.c new file mode 100644 index 0000000..6c4de90 --- /dev/null +++ b/testAutomata.c @@ -0,0 +1,309 @@ +/* + * testRegexp.c: simple module for testing regular expressions + * + * See Copyright for the status of this software. + * + * Daniel Veillard + */ + +#include "libxml.h" +#ifdef LIBXML_AUTOMATA_ENABLED +#include + +#include +#include + +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); + return; + } + states[0] = xmlAutomataGetInitState(am); + if (states[0] == NULL) { + xmlGenericError(xmlGenericErrorContext, + "Cannot get start state\n"); + xmlFreeAutomata(am); + fclose(input); + return; + } + 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 +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..86e58f2 --- /dev/null +++ b/testC14N.c @@ -0,0 +1,370 @@ +/* + * 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 + */ +#include "libxml.h" +#if defined(LIBXML_C14N_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) + +#include +#include +#ifndef STDOUT_FILENO +#ifdef HAVE_UNISTD_H +#include +#else +#define STDOUT_FILENO fileno(stdout) +#endif /* HAVE_UNISTD_H */ +#endif +#ifdef HAVE_STDLIB_H +#include +#endif + +#include +#include +#include +#include + +#include + + +static void usage(const char *name) { + fprintf(stderr, + "Usage: %s [] []\n", + name); + fprintf(stderr, "where is one of following:\n"); + fprintf(stderr, + "--with-comments \t XML file canonicalization v1.0 w comments \n"); + fprintf(stderr, + "--without-comments \t XML file canonicalization v1.0 w/o comments\n"); + fprintf(stderr, + "--1-1-with-comments \t XML file canonicalization v1.1 w comments\n"); + fprintf(stderr, + "--1-1-without-comments \t XML file canonicalization v1.1 w/o comments\n"); + fprintf(stderr, + "--exc-with-comments \t Exclusive XML file canonicalization v1.0 w comments\n"); + fprintf(stderr, + "--exc-without-comments\t Exclusive XML file canonicalization v1.0 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 mode, + 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 = xmlReadFile(xml_filename, NULL, XML_PARSE_DTDATTR | XML_PARSE_NOENT); + if (doc == NULL) { + fprintf(stderr, "Error: unable to parse file \"%s\"\n", xml_filename); + return(-1); + } + + /* + * 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, + mode, inclusive_namespaces, + with_comments, &result); + if(ret >= 0) { + if(result != NULL) { + if (write(STDOUT_FILENO, result, ret) == -1) { + fprintf(stderr, "Can't write data\n"); + } + 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, XML_C14N_1_0, (argc > 3) ? argv[3] : NULL, NULL); + } else if(strcmp(argv[1], "--without-comments") == 0) { + ret = test_c14n(argv[2], 0, XML_C14N_1_0, (argc > 3) ? argv[3] : NULL, NULL); + } else if(strcmp(argv[1], "--1-1-with-comments") == 0) { + ret = test_c14n(argv[2], 1, XML_C14N_1_1, (argc > 3) ? argv[3] : NULL, NULL); + } else if(strcmp(argv[1], "--1-1-without-comments") == 0) { + ret = test_c14n(argv[2], 0, XML_C14N_1_1, (argc > 3) ? argv[3] : NULL, NULL); + } else if(strcmp(argv[1], "--exc-with-comments") == 0) { + xmlChar **list; + + /* load exclusive namespace from command line */ + list = (argc > 4) ? parse_list((xmlChar *)argv[4]) : NULL; + ret = test_c14n(argv[2], 1, XML_C14N_EXCLUSIVE_1_0, (argc > 3) ? argv[3] : NULL, list); + if(list != NULL) xmlFree(list); + } else if(strcmp(argv[1], "--exc-without-comments") == 0) { + xmlChar **list; + + /* load exclusive namespace from command line */ + list = (argc > 4) ? parse_list((xmlChar *)argv[4]) : NULL; + ret = test_c14n(argv[2], 0, XML_C14N_EXCLUSIVE_1_0, (argc > 3) ? argv[3] : NULL, list); + 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++; + } + /* + * 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 = xmlReadFile(filename, NULL, XML_PARSE_DTDATTR | XML_PARSE_NOENT); + 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 +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..9b42778 --- /dev/null +++ b/testHTML.c @@ -0,0 +1,880 @@ +/* + * 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 +#include + + +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_STAT_H +#include +#endif +#ifdef HAVE_FCNTL_H +#include +#endif +#ifdef HAVE_UNISTD_H +#include +#endif +#ifdef HAVE_STDLIB_H +#include +#endif + +#include +#include +#include +#include +#include +#include + +#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; + +static 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 */ +}; + +static 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 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) { +#if defined(_WIN32) || defined (__DJGPP__) && !defined (__CYGWIN__) + f = fopen(filename, "rb"); +#else + f = fopen(filename, "r"); +#endif + 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; + +#if defined(_WIN32) || defined (__DJGPP__) && !defined (__CYGWIN__) + f = fopen(filename, "rb"); +#else + f = fopen(filename, "r"); +#endif + 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 +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/testModule.c b/testModule.c new file mode 100644 index 0000000..77b7ba1 --- /dev/null +++ b/testModule.c @@ -0,0 +1,82 @@ +/* + * testModule.c : a small tester program for xmlModule + * + * See Copyright for the status of this software. + * + * joelwreed@comcast.net + */ + +#include "libxml.h" +#ifdef LIBXML_MODULES_ENABLED +#include + +#include +#include +#include +#include + +#include +#include +#include + +#ifdef _WIN32 +#define MODULE_PATH "." +#include /* for _MAX_PATH */ +#ifndef __MINGW32__ +#define PATH_MAX _MAX_PATH +#endif +#else +#define MODULE_PATH ".libs" +#endif + +/* Used for SCO Openserver*/ +#ifndef PATH_MAX +#ifdef _POSIX_PATH_MAX +#define PATH_MAX _POSIX_PATH_MAX +#else +#define PATH_MAX 4096 +#endif +#endif + +typedef int (*hello_world_t)(void); + +int main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) { + xmlChar filename[PATH_MAX]; + xmlModulePtr module = NULL; + hello_world_t hello_world = NULL; + + /* build the module filename, and confirm the module exists */ + xmlStrPrintf(filename, sizeof(filename), + "%s/testdso%s", + (const xmlChar*)MODULE_PATH, + (const xmlChar*)LIBXML_MODULE_EXTENSION); + + module = xmlModuleOpen((const char*)filename, 0); + if (module) + { + if (xmlModuleSymbol(module, "hello_world", (void **) &hello_world)) { + fprintf(stderr, "Failure to lookup\n"); + return(1); + } + if (hello_world == NULL) { + fprintf(stderr, "Lookup returned NULL\n"); + return(1); + } + + (*hello_world)(); + + xmlModuleClose(module); + } + + xmlMemoryDump(); + + return(0); +} + +#else +#include +int main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) { + printf("%s : Module support not compiled in\n", argv[0]); + return(0); +} +#endif /* LIBXML_SCHEMAS_ENABLED */ diff --git a/testOOM.c b/testOOM.c new file mode 100644 index 0000000..9ff13f2 --- /dev/null +++ b/testOOM.c @@ -0,0 +1,377 @@ +/* + * testOOM.c: Test out-of-memory handling + * + * See Copyright for the status of this software. + * + * hp@redhat.com + */ + +#include "libxml.h" + +#include +#include + +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_UNISTD_H +#include +#endif +#ifdef HAVE_STDLIB_H +#include +#endif +#ifdef HAVE_STRING_H +#include +#endif + +#include + +#include "testOOMlib.h" + +#ifndef TRUE +#define TRUE (1) +#endif +#ifndef FALSE +#define FALSE (0) +#endif + +#define EXIT_OOM 2 + +int error = FALSE; +int errcount = 0; +int noent = 0; +int count = 0; +int valid = 0; +int showErrs = 0; + +/* + * Since we are using the xmlTextReader functions, we set up + * strings for the element types to help in debugging any error + * output + */ +const char *elementNames[] = { + "XML_READER_TYPE_NONE", + "XML_READER_TYPE_ELEMENT", + "XML_READER_TYPE_ATTRIBUTE", + "XML_READER_TYPE_TEXT", + "XML_READER_TYPE_CDATA", + "XML_READER_TYPE_ENTITY_REFERENCE", + "XML_READER_TYPE_ENTITY", + "XML_READER_TYPE_PROCESSING_INSTRUCTION", + "XML_READER_TYPE_COMMENT", + "XML_READER_TYPE_DOCUMENT", + "XML_READER_TYPE_DOCUMENT_TYPE", + "XML_READER_TYPE_DOCUMENT_FRAGMENT", + "XML_READER_TYPE_NOTATION", + "XML_READER_TYPE_WHITESPACE", + "XML_READER_TYPE_SIGNIFICANT_WHITESPACE", + "XML_READER_TYPE_END_ELEMENT", + "XML_READER_TYPE_END_ENTITY", + "XML_READER_TYPE_XML_DECLARATION"}; + +/* not using xmlBuff here because I don't want those + * mallocs to interfere */ +struct buffer { + char *str; + size_t len; + size_t max; +}; + +static struct buffer *buffer_create (size_t init_len) +{ + struct buffer *b; + b = malloc (sizeof *b); + if (b == NULL) + exit (EXIT_OOM); + if (init_len) { + b->str = malloc (init_len); + if (b->str == NULL) + exit (EXIT_OOM); + } + else + b->str = NULL; + b->len = 0; + b->max = init_len; + return b; +} + +static void buffer_free (struct buffer *b) +{ + free (b->str); + free (b); +} + +static size_t buffer_get_length (struct buffer *b) +{ + return b->len; +} + +static void buffer_expand (struct buffer *b, size_t min) +{ + void *new_str; + size_t new_size = b->max ? b->max : 512; + while (new_size < b->len + min) + new_size *= 2; + if (new_size > b->max) { + new_str = realloc (b->str, new_size); + if (new_str == NULL) + exit (EXIT_OOM); + b->str = new_str; + b->max = new_size; + } +} + +static void buffer_add_char (struct buffer *b, char c) +{ + buffer_expand (b, 1); + b->str[b->len] = c; + b->len += 1; +} + +static void buffer_add_string (struct buffer *b, const char *s) +{ + size_t size = strlen(s) + 1; + unsigned int ix; + for (ix=0; ixstr + b->len, s); + b->str[b->len+size-1] = '\n'; /* replace string term with newline */ + b->len += size; +} + +static int buffer_equal (struct buffer *b1, struct buffer *b2) +{ + return (b1->len == b2->len && + (b1->len == 0 || (memcmp (b1->str, b2->str, b1->len) == 0))); +} + +static void buffer_dump (struct buffer *b, const char *fname) +{ + FILE *f = fopen (fname, "wb"); + if (f != NULL) { + fwrite (b->str, 1, b->len, f); + fclose (f); + } +} + + +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"); + printf("\t --show: display the error messages encountered\n"); + exit(1); +} +static unsigned int elem, attrs, chars; + +static int processNode (xmlTextReaderPtr reader, void *data) +{ + struct buffer *buff = data; + int type; + + type = xmlTextReaderNodeType(reader); + if (count) { + if (type == 1) { + elem++; + attrs += xmlTextReaderAttributeCount(reader); + } else if (type == 3) { + const xmlChar *txt; + txt = xmlTextReaderConstValue(reader); + if (txt != NULL) + chars += xmlStrlen (txt); + else + return FALSE; + } + } + + if (buff != NULL) { + int ret; + const char *s; + + buffer_add_string (buff, elementNames[type]); + + if (type == 1) { + s = (const char *)xmlTextReaderConstName (reader); + if (s == NULL) return FALSE; + buffer_add_string (buff, s); + while ((ret = xmlTextReaderMoveToNextAttribute (reader)) == 1) { + s = (const char *)xmlTextReaderConstName (reader); + if (s == NULL) return FALSE; + buffer_add_string (buff, s); + buffer_add_char (buff, '='); + s = (const char *)xmlTextReaderConstValue (reader); + if (s == NULL) return FALSE; + buffer_add_string (buff, s); + } + if (ret == -1) return FALSE; + } + else if (type == 3) { + s = (const char *)xmlTextReaderConstValue (reader); + if (s == NULL) return FALSE; + buffer_add_string (buff, s); + } + } + + return TRUE; +} + + +struct file_params { + const char *filename; + struct buffer *verif_buff; +}; + +static void +error_func (void *data ATTRIBUTE_UNUSED, xmlErrorPtr err) +{ + + errcount++; + if (err->level == XML_ERR_ERROR || + err->level == XML_ERR_FATAL) + error = TRUE; + if (showErrs) { + printf("%3d line %d: %s\n", error, err->line, err->message); + } +} + +static int +check_load_file_memory_func (void *data) +{ + struct file_params *p = data; + struct buffer *b; + xmlTextReaderPtr reader; + int ret, status, first_run; + + if (count) { + elem = 0; + attrs = 0; + chars = 0; + } + + first_run = p->verif_buff == NULL; + status = TRUE; + error = FALSE; + if (first_run) + b = buffer_create (0); + else + b = buffer_create (buffer_get_length (p->verif_buff)); + + reader = xmlNewTextReaderFilename (p->filename); + if (reader == NULL) + goto out; + + xmlTextReaderSetStructuredErrorHandler (reader, error_func, NULL); + xmlSetStructuredErrorFunc(NULL, error_func); + + if (valid) { + if (xmlTextReaderSetParserProp(reader, XML_PARSER_VALIDATE, 1) == -1) + goto out; + } + + /* + * Process all nodes in sequence + */ + while ((ret = xmlTextReaderRead(reader)) == 1) { + if (!processNode(reader, b)) + goto out; + } + if (ret == -1) + goto out; + + if (error) { + fprintf (stdout, "error handler was called but parse completed successfully (last error #%d)\n", errcount); + return FALSE; + } + + /* + * Done, cleanup and status + */ + if (! first_run) { + status = buffer_equal (p->verif_buff, b); + if (! status) { + buffer_dump (p->verif_buff, ".OOM.verif_buff"); + buffer_dump (b, ".OOM.buff"); + } + } + + if (count) + { + fprintf (stdout, "# %s: %u elems, %u attrs, %u chars %s\n", + p->filename, elem, attrs, chars, + status ? "ok" : "wrong"); + } + + out: + if (first_run) + p->verif_buff = b; + else + buffer_free (b); + if (reader) + xmlFreeTextReader (reader); + return status; +} + +int main(int argc, char **argv) { + int i; + int files = 0; + + if (argc <= 1) { + usage(argv[0]); + return(1); + } + LIBXML_TEST_VERSION; + + xmlMemSetup (test_free, + test_malloc, + test_realloc, + test_strdup); + + xmlInitParser(); + + for (i = 1; i < argc ; i++) { + 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++; + else if ((!strcmp(argv[i], "-show")) || + (!strcmp(argv[i], "--show"))) + showErrs++; + } + if (noent != 0) + xmlSubstituteEntitiesDefault(1); + for (i = 1; i < argc ; i++) { + if (argv[i][0] != '-') { + struct file_params p; + p.filename = argv[i]; + p.verif_buff = NULL; + + if (!test_oom_handling (check_load_file_memory_func, + &p)) { + fprintf (stdout, "Failed!\n"); + return 1; + } + + buffer_free (p.verif_buff); + xmlCleanupParser(); + + if (test_get_malloc_blocks_outstanding () > 0) { + fprintf (stdout, "%d blocks leaked\n", + test_get_malloc_blocks_outstanding ()); + xmlMemoryDump(); + return 1; + } + + files ++; + } + } + xmlMemoryDump(); + + return 0; +} diff --git a/testOOMlib.c b/testOOMlib.c new file mode 100644 index 0000000..34c4aa0 --- /dev/null +++ b/testOOMlib.c @@ -0,0 +1,269 @@ +/* + * testOOM.c: Test out-of-memory handling + * + * See Copyright for the status of this software. + * + * Copyright 2003 Red Hat, Inc. + * Written by: hp@redhat.com + */ + +#include "testOOMlib.h" + +#ifdef HAVE_STDLIB_H +#include +#endif + +#include + +#define _TEST_INT_MAX 2147483647 +#ifndef TRUE +#define TRUE (1) +#endif +#ifndef FALSE +#define FALSE (0) +#endif +#ifndef NULL +#define NULL ((void*)0) +#endif + +#include + +static int fail_alloc_counter = _TEST_INT_MAX; +static int n_failures_per_failure = 1; +static int n_failures_this_failure = 0; +static int n_blocks_outstanding = 0; + +/** + * set_fail_alloc_counter: + * @until_next_fail: number of successful allocs before one fails + * + * Sets the number of allocations until we simulate a failed + * allocation. If set to 0, the next allocation to run + * fails; if set to 1, one succeeds then the next fails; etc. + * Set to _TEST_INT_MAX to not fail anything. + */ +static void +set_fail_alloc_counter (int until_next_fail) +{ + fail_alloc_counter = until_next_fail; +} + +/** + * get_fail_alloc_counter: + * + * Returns the number of successful allocs until we'll simulate + * a failed alloc. + */ +static int +get_fail_alloc_counter (void) +{ + return fail_alloc_counter; +} + +/** + * set_fail_alloc_failures: + * @failures_per_failure: number to fail + * + * Sets how many mallocs to fail when the fail alloc counter reaches + * 0. + * + */ +static void +set_fail_alloc_failures (int failures_per_failure) +{ + n_failures_per_failure = failures_per_failure; +} + +/** + * decrement_fail_alloc_counter: + * + * Called when about to alloc some memory; if + * it returns #TRUE, then the allocation should + * fail. If it returns #FALSE, then the allocation + * should not fail. + * + * returns #TRUE if this alloc should fail + */ +static int +decrement_fail_alloc_counter (void) +{ + if (fail_alloc_counter <= 0) + { + n_failures_this_failure += 1; + if (n_failures_this_failure >= n_failures_per_failure) + { + fail_alloc_counter = _TEST_INT_MAX; + + n_failures_this_failure = 0; + } + + return TRUE; + } + else + { + fail_alloc_counter -= 1; + return FALSE; + } +} + +/** + * test_get_malloc_blocks_outstanding: + * + * Get the number of outstanding malloc()'d blocks. + * + * Returns number of blocks + */ +int +test_get_malloc_blocks_outstanding (void) +{ + return n_blocks_outstanding; +} + +void* +test_malloc (size_t bytes) +{ + if (decrement_fail_alloc_counter ()) + { + /* FAIL the malloc */ + return NULL; + } + + if (bytes == 0) /* some system mallocs handle this, some don't */ + return NULL; + else + { + void *mem; + mem = xmlMemMalloc (bytes); + + if (mem) + n_blocks_outstanding += 1; + + return mem; + } +} + +void* +test_realloc (void *memory, + size_t bytes) +{ + if (decrement_fail_alloc_counter ()) + { + /* FAIL */ + return NULL; + } + + if (bytes == 0) /* guarantee this is safe */ + { + test_free (memory); + return NULL; + } + else + { + void *mem; + mem = xmlMemRealloc (memory, bytes); + + if (memory == NULL && mem != NULL) + n_blocks_outstanding += 1; + + return mem; + } +} + +void +test_free (void *memory) +{ + if (memory) /* we guarantee it's safe to free (NULL) */ + { + n_blocks_outstanding -= 1; + + xmlMemFree (memory); + } +} + +char* +test_strdup (const char *str) +{ + int len; + char *copy; + + if (str == NULL) + return NULL; + + len = strlen (str); + + copy = test_malloc (len + 1); + if (copy == NULL) + return NULL; + + memcpy (copy, str, len + 1); + + return copy; +} + +static int +run_failing_each_malloc (int n_mallocs, + TestMemoryFunction func, + void *data) +{ + n_mallocs += 10; /* fudge factor to ensure reallocs etc. are covered */ + + while (n_mallocs >= 0) + { + set_fail_alloc_counter (n_mallocs); + + if (!(* func) (data)) + return FALSE; + + n_mallocs -= 1; + } + + set_fail_alloc_counter (_TEST_INT_MAX); + + return TRUE; +} + +/** + * test_oom_handling: + * @func: function to call + * @data: data to pass to function + * + * Tests how well the given function responds to out-of-memory + * situations. Calls the function repeatedly, failing a different + * call to malloc() each time. If the function ever returns #FALSE, + * the test fails. The function should return #TRUE whenever something + * valid (such as returning an error, or succeeding) occurs, and #FALSE + * if it gets confused in some way. + * + * Returns #TRUE if the function never returns FALSE + */ +int +test_oom_handling (TestMemoryFunction func, + void *data) +{ + int approx_mallocs; + + /* Run once to see about how many mallocs are involved */ + + set_fail_alloc_counter (_TEST_INT_MAX); + + if (!(* func) (data)) + return FALSE; + + approx_mallocs = _TEST_INT_MAX - get_fail_alloc_counter (); + + set_fail_alloc_failures (1); + if (!run_failing_each_malloc (approx_mallocs, func, data)) + return FALSE; + + set_fail_alloc_failures (2); + if (!run_failing_each_malloc (approx_mallocs, func, data)) + return FALSE; + + set_fail_alloc_failures (3); + if (!run_failing_each_malloc (approx_mallocs, func, data)) + return FALSE; + + set_fail_alloc_counter (_TEST_INT_MAX); + + return TRUE; +} diff --git a/testOOMlib.h b/testOOMlib.h new file mode 100644 index 0000000..751999d --- /dev/null +++ b/testOOMlib.h @@ -0,0 +1,26 @@ +#ifndef TEST_OOM_LIB_H +#define TEST_OOM_LIB_H + +#include + +#ifdef HAVE_SYS_TYPES_H +#include +#endif + +void* test_malloc (size_t bytes); +void* test_realloc (void *memory, + size_t bytes); +void test_free (void *memory); +char* test_strdup (const char *str); + +/* returns true on success */ +typedef int (* TestMemoryFunction) (void *data); + +/* returns true on success */ +int test_oom_handling (TestMemoryFunction func, + void *data); + +/* get number of blocks leaked */ +int test_get_malloc_blocks_outstanding (void); + +#endif diff --git a/testReader.c b/testReader.c new file mode 100644 index 0000000..8f8e26d --- /dev/null +++ b/testReader.c @@ -0,0 +1,145 @@ +/* + * 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 +#include + +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_STAT_H +#include +#endif +#ifdef HAVE_FCNTL_H +#include +#endif +#ifdef HAVE_UNISTD_H +#include +#endif +#ifdef HAVE_STDLIB_H +#include +#endif +#ifdef HAVE_STRING_H +#include +#endif + + +#include + +static int debug = 0; +static int dump = 0; +static int noent = 0; +static int count = 0; +static int valid = 0; +static int consumed = 0; + +static void usage(const char *progname) { + printf("Usage : %s [options] XMLfiles ...\n", progname); + 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"); + printf("\t --consumed: count the number of bytes consumed\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 + */ + if (consumed) + printf("%ld bytes consumed by parser\n", xmlTextReaderByteConsumed(reader)); + 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], "-consumed")) || (!strcmp(argv[i], "--consumed"))) + consumed++; + 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..21dac94 --- /dev/null +++ b/testRegexp.c @@ -0,0 +1,402 @@ +/* + * testRegexp.c: simple module for testing regular expressions + * + * See Copyright for the status of this software. + * + * Daniel Veillard + */ + +#include "libxml.h" +#ifdef LIBXML_REGEXP_ENABLED +#include + +#include +#include + +static int repeat = 0; +static 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); +} + +#ifdef LIBXML_EXPR_ENABLED +static void +runFileTest(xmlExpCtxtPtr ctxt, const char *filename) { + xmlExpNodePtr expr = NULL, sub; + FILE *input; + char expression[5000]; + int len; + + input = fopen(filename, "r"); + if (input == NULL) { + xmlGenericError(xmlGenericErrorContext, + "Cannot open %s for reading\n", filename); + return; + } + while (fgets(expression, 4500, input) != NULL) { + len = strlen(expression); + len--; + while ((len >= 0) && + ((expression[len] == '\n') || (expression[len] == '\t') || + (expression[len] == '\r') || (expression[len] == ' '))) len--; + expression[len + 1] = 0; + if (len >= 0) { + if (expression[0] == '#') + continue; + if ((expression[0] == '=') && (expression[1] == '>')) { + char *str = &expression[2]; + + if (expr != NULL) { + xmlExpFree(ctxt, expr); + if (xmlExpCtxtNbNodes(ctxt) != 0) + printf(" Parse/free of Expression leaked %d\n", + xmlExpCtxtNbNodes(ctxt)); + expr = NULL; + } + printf("Expression: %s\n", str) ; + expr = xmlExpParse(ctxt, str); + if (expr == NULL) { + printf(" parsing Failed\n"); + break; + } + } else if (expr != NULL) { + int expect = -1; + int nodes1, nodes2; + + if (expression[0] == '0') + expect = 0; + if (expression[0] == '1') + expect = 1; + printf("Subexp: %s", expression + 2) ; + nodes1 = xmlExpCtxtNbNodes(ctxt); + sub = xmlExpParse(ctxt, expression + 2); + if (sub == NULL) { + printf(" parsing Failed\n"); + break; + } else { + int ret; + + nodes2 = xmlExpCtxtNbNodes(ctxt); + ret = xmlExpSubsume(ctxt, expr, sub); + + if ((expect == 1) && (ret == 1)) { + printf(" => accept, Ok\n"); + } else if ((expect == 0) && (ret == 0)) { + printf(" => reject, Ok\n"); + } else if ((expect == 1) && (ret == 0)) { + printf(" => reject, Failed\n"); + } else if ((expect == 0) && (ret == 1)) { + printf(" => accept, Failed\n"); + } else { + printf(" => fail internally\n"); + } + if (xmlExpCtxtNbNodes(ctxt) > nodes2) { + printf(" Subsume leaked %d\n", + xmlExpCtxtNbNodes(ctxt) - nodes2); + nodes1 += xmlExpCtxtNbNodes(ctxt) - nodes2; + } + xmlExpFree(ctxt, sub); + if (xmlExpCtxtNbNodes(ctxt) > nodes1) { + printf(" Parse/free leaked %d\n", + xmlExpCtxtNbNodes(ctxt) - nodes1); + } + } + + } + } + } + if (expr != NULL) { + xmlExpFree(ctxt, expr); + if (xmlExpCtxtNbNodes(ctxt) != 0) + printf(" Parse/free of Expression leaked %d\n", + xmlExpCtxtNbNodes(ctxt)); + } + fclose(input); +} + +static void +testReduce(xmlExpCtxtPtr ctxt, xmlExpNodePtr expr, const char *tst) { + xmlBufferPtr xmlExpBuf; + xmlExpNodePtr sub, deriv; + xmlExpBuf = xmlBufferCreate(); + + sub = xmlExpParse(ctxt, tst); + if (sub == NULL) { + printf("Subset %s failed to parse\n", tst); + return; + } + xmlExpDump(xmlExpBuf, sub); + printf("Subset parsed as: %s\n", + (const char *) xmlBufferContent(xmlExpBuf)); + deriv = xmlExpExpDerive(ctxt, expr, sub); + if (deriv == NULL) { + printf("Derivation led to an internal error, report this !\n"); + return; + } else { + xmlBufferEmpty(xmlExpBuf); + xmlExpDump(xmlExpBuf, deriv); + if (xmlExpIsNillable(deriv)) + printf("Resulting nillable derivation: %s\n", + (const char *) xmlBufferContent(xmlExpBuf)); + else + printf("Resulting derivation: %s\n", + (const char *) xmlBufferContent(xmlExpBuf)); + xmlExpFree(ctxt, deriv); + } + xmlExpFree(ctxt, sub); +} + +static void +exprDebug(xmlExpCtxtPtr ctxt, xmlExpNodePtr expr) { + xmlBufferPtr xmlExpBuf; + xmlExpNodePtr deriv; + const char *list[40]; + int ret; + + xmlExpBuf = xmlBufferCreate(); + + if (expr == NULL) { + printf("Failed to parse\n"); + return; + } + xmlExpDump(xmlExpBuf, expr); + printf("Parsed as: %s\n", (const char *) xmlBufferContent(xmlExpBuf)); + printf("Max token input = %d\n", xmlExpMaxToken(expr)); + if (xmlExpIsNillable(expr) == 1) + printf("Is nillable\n"); + ret = xmlExpGetLanguage(ctxt, expr, (const xmlChar **) &list[0], 40); + if (ret < 0) + printf("Failed to get list: %d\n", ret); + else { + int i; + + printf("Language has %d strings, testing string derivations\n", ret); + for (i = 0;i < ret;i++) { + deriv = xmlExpStringDerive(ctxt, expr, BAD_CAST list[i], -1); + if (deriv == NULL) { + printf(" %s -> derivation failed\n", list[i]); + } else { + xmlBufferEmpty(xmlExpBuf); + xmlExpDump(xmlExpBuf, deriv); + printf(" %s -> %s\n", list[i], + (const char *) xmlBufferContent(xmlExpBuf)); + } + xmlExpFree(ctxt, deriv); + } + } + xmlBufferFree(xmlExpBuf); +} +#endif + +static void usage(const char *name) { + fprintf(stderr, "Usage: %s [flags]\n", name); + fprintf(stderr, "Testing tool for libxml2 string and pattern regexps\n"); + fprintf(stderr, " --debug: switch on debugging\n"); + fprintf(stderr, " --repeat: loop on the operation\n"); +#ifdef LIBXML_EXPR_ENABLED + fprintf(stderr, " --expr: test xmlExp and not xmlRegexp\n"); +#endif + fprintf(stderr, " --input filename: use the given filename for regexp\n"); + fprintf(stderr, " --input filename: use the given filename for exp\n"); +} + +int main(int argc, char **argv) { + xmlRegexpPtr comp = NULL; +#ifdef LIBXML_EXPR_ENABLED + xmlExpNodePtr expr = NULL; + int use_exp = 0; + xmlExpCtxtPtr ctxt = NULL; +#endif + const char *pattern = NULL; + char *filename = NULL; + int i; + + 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], "--")) + break; + + if ((!strcmp(argv[i], "-debug")) || (!strcmp(argv[i], "--debug"))) { + debug++; + } else if ((!strcmp(argv[i], "-repeat")) || + (!strcmp(argv[i], "--repeat"))) { + repeat++; +#ifdef LIBXML_EXPR_ENABLED + } else if ((!strcmp(argv[i], "-expr")) || + (!strcmp(argv[i], "--expr"))) { + use_exp++; +#endif + } else if ((!strcmp(argv[i], "-i")) || (!strcmp(argv[i], "-f")) || + (!strcmp(argv[i], "--input"))) + filename = argv[++i]; + else { + fprintf(stderr, "Unknown option %s\n", argv[i]); + usage(argv[0]); + } + } + +#ifdef LIBXML_EXPR_ENABLED + if (use_exp) + ctxt = xmlExpNewCtxt(0, NULL); +#endif + + if (filename != NULL) { +#ifdef LIBXML_EXPR_ENABLED + if (use_exp) + runFileTest(ctxt, filename); + else +#endif + testRegexpFile(filename); + } else { + int data = 0; +#ifdef LIBXML_EXPR_ENABLED + + if (use_exp) { + for (i = 1; i < argc ; i++) { + if (strcmp(argv[i], "--") == 0) + data = 1; + else if ((argv[i][0] != '-') || (strcmp(argv[i], "-") == 0) || + (data == 1)) { + if (pattern == NULL) { + pattern = argv[i]; + printf("Testing expr %s:\n", pattern); + expr = xmlExpParse(ctxt, pattern); + if (expr == NULL) { + printf(" failed to compile\n"); + break; + } + if (debug) { + exprDebug(ctxt, expr); + } + } else { + testReduce(ctxt, expr, argv[i]); + } + } + } + if (expr != NULL) { + xmlExpFree(ctxt, expr); + expr = NULL; + } + } else +#endif + { + for (i = 1; i < argc ; i++) { + if (strcmp(argv[i], "--") == 0) + data = 1; + else if ((argv[i][0] != '-') || (strcmp(argv[i], "-") == 0) || + (data == 1)) { + if (pattern == NULL) { + pattern = argv[i]; + printf("Testing %s:\n", pattern); + comp = xmlRegexpCompile((const xmlChar *) pattern); + if (comp == NULL) { + printf(" failed to compile\n"); + break; + } + if (debug) + xmlRegexpPrint(stdout, comp); + } else { + testRegexp(comp, argv[i]); + } + } + } + if (comp != NULL) + xmlRegFreeRegexp(comp); + } + } +#ifdef LIBXML_EXPR_ENABLED + if (ctxt != NULL) { + printf("Ops: %d nodes, %d cons\n", + xmlExpCtxtNbNodes(ctxt), xmlExpCtxtNbCons(ctxt)); + xmlExpFreeCtxt(ctxt); + } +#endif + xmlCleanupParser(); + xmlMemoryDump(); + return(0); +} + +#else +#include +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..8e94a7a --- /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 +#include + +#include +#include +#include + + +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_STAT_H +#include +#endif +#ifdef HAVE_FCNTL_H +#include +#endif +#ifdef HAVE_UNISTD_H +#include +#endif +#ifdef HAVE_STDLIB_H +#include +#endif +#ifdef HAVE_SYS_MMAN_H +#include +/* seems needed for Solaris */ +#ifndef MAP_FAILED +#define MAP_FAILED ((void *) -1) +#endif +#endif + +#include +#include +#include + +#ifdef LIBXML_DEBUG_ENABLED +static int debug = 0; +#endif +static int noout = 0; +static int tree = 0; +#ifdef HAVE_MMAP +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_MMAP + 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_MMAP + 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_MMAP + printf("\t--memory : test the schemas in memory parsing\n"); +#endif + } + xmlRelaxNGCleanupTypes(); + xmlCleanupParser(); + xmlMemoryDump(); + + return(0); +} + +#else +#include +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..81c4b93 --- /dev/null +++ b/testSAX.c @@ -0,0 +1,1198 @@ +/* + * 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 +#endif +#ifdef HAVE_SYS_TIMEB_H +#include +#endif +#ifdef HAVE_TIME_H +#include +#endif + +#ifdef LIBXML_SAX1_ENABLED +#include +#include + +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_STAT_H +#include +#endif +#ifdef HAVE_FCNTL_H +#include +#endif +#ifdef HAVE_UNISTD_H +#include +#endif +#ifdef HAVE_STDLIB_H +#include +#endif +#ifdef HAVE_STRING_H +#include +#endif + + +#include +#include +#include +#include /* only for xmlNewInputFromFile() */ +#include +#include +#include + +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 XMLCDECL +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 XMLCDECL +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 XMLCDECL +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 + */ +static 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 */ +}; + +static 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 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 + */ +#if defined(_WIN32) || defined (__DJGPP__) && !defined (__CYGWIN__) + f = fopen(filename, "rb"); +#else + f = fopen(filename, "r"); +#endif + 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 { +#endif /* LIBXML_PUSH_ENABLED */ + 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); + } + } +#ifdef LIBXML_PUSH_ENABLED + } +#endif +} + + +int main(int argc, char **argv) { + int i; + int files = 0; + + LIBXML_TEST_VERSION /* be safe, plus calls xmlInitParser */ + + for (i = 1; i < argc ; i++) { + if ((!strcmp(argv[i], "-debug")) || (!strcmp(argv[i], "--debug"))) + debug++; + 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"))) +#ifdef LIBXML_PUSH_ENABLED + push++; +#else + fprintf(stderr,"'push' not enabled in library - ignoring\n"); +#endif /* LIBXML_PUSH_ENABLED */ + 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..b98e631 --- /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 +#include + +#include +#include +#include + + +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_STAT_H +#include +#endif +#ifdef HAVE_FCNTL_H +#include +#endif +#ifdef HAVE_UNISTD_H +#include +#endif +#ifdef HAVE_STDLIB_H +#include +#endif +#ifdef HAVE_SYS_MMAN_H +#include +/* seems needed for Solaris */ +#ifndef MAP_FAILED +#define MAP_FAILED ((void *) -1) +#endif +#endif + +#include +#include +#include +#include + +#ifdef LIBXML_DEBUG_ENABLED +static int debug = 0; +#endif +static int noout = 0; +#ifdef HAVE_MMAP +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_MMAP + 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_MMAP + 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_MMAP + printf("\t--memory : test the schemas in memory parsing\n"); +#endif + } +failed_schemas: + xmlSchemaCleanupTypes(); + xmlCleanupParser(); + xmlMemoryDump(); + + return(0); +} + +#else +#include +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..bff5391 --- /dev/null +++ b/testThreads.c @@ -0,0 +1,200 @@ +#include "libxml.h" + +#include +#include + +#if defined(LIBXML_THREAD_ENABLED) && defined(LIBXML_CATALOG_ENABLED) && defined(LIBXML_SAX1_ENABLED) +#include +#include +#include +#include +#ifdef HAVE_PTHREAD_H +#include +#elif defined HAVE_BEOS_THREADS +#include +#endif +#include +#if !defined(_MSC_VER) +#include +#endif +#include + +#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", +}; + +static const char *Okay = "OK"; +static 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); + + memset(results, 0, sizeof(*results)*num_threads); + memset(tid, 0xff, sizeof(*tid)*num_threads); + + for (i = 0; i < num_threads; i++) { + ret = pthread_create(&tid[i], NULL, 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..3d1a5ba --- /dev/null +++ b/testThreadsWin32.c @@ -0,0 +1,150 @@ +#include "libxml.h" +#include +#include + +#if defined(LIBXML_THREAD_ENABLED) && defined(LIBXML_CATALOG_ENABLED) +#include +#include +#include +#include +#include +#include +#include + +#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..d20989d --- /dev/null +++ b/testURI.c @@ -0,0 +1,124 @@ +/* + * testURI.c : a small tester program for XML input. + * + * See Copyright for the status of this software. + * + * daniel@veillard.com + */ + +#include "libxml.h" + +#include +#include +#include + +#include +#include +#include + +static const char *base = NULL; +static int escape = 0; +static int debug = 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 { + if (debug) { + if (uri->scheme) printf("scheme: %s\n", uri->scheme); + if (uri->opaque) printf("opaque: %s\n", uri->opaque); + if (uri->authority) printf("authority: %s\n", uri->authority); + if (uri->server) printf("server: %s\n", uri->server); + if (uri->user) printf("user: %s\n", uri->user); + if (uri->port != 0) printf("port: %d\n", uri->port); + if (uri->path) printf("path: %s\n", uri->path); + if (uri->query) printf("query: %s\n", uri->query); + if (uri->fragment) printf("fragment: %s\n", uri->fragment); + if (uri->query_raw) printf("query_raw: %s\n", uri->query_raw); + if (uri->cleanup != 0) printf("cleanup\n"); + } + 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 ((argc > arg) && (argv[arg] != NULL) && + ((!strcmp(argv[arg], "-debug")) || (!strcmp(argv[arg], "--debug")))) { + arg++; + debug++; + } + 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..ebb9ff7 --- /dev/null +++ b/testXPath.c @@ -0,0 +1,229 @@ +/* + * 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 + +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_STAT_H +#include +#endif +#ifdef HAVE_FCNTL_H +#include +#endif +#ifdef HAVE_UNISTD_H +#include +#endif +#ifdef HAVE_STDLIB_H +#include +#endif + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#if defined(LIBXML_XPTR_ENABLED) +#include +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[] = +"\n\ +\n\ + \n\ + Welcome to Gnome\n\ + \n\ + \n\ + The Linux adventure\n\ +

    bla bla bla ...

    \n\ + \n\ +

    ...

    \n\ +
    \n\ + \n\ + Chapter 2\n\ +

    this is chapter 2 ...

    \n\ +
    \n\ + \n\ + Chapter 3\n\ +

    this is chapter 3 ...

    \n\ +
    \n\ +
    \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; +#ifdef LIBXML_SAX1_ENABLED + if (nocdata != 0) { + xmlDefaultSAXHandlerInit(); + xmlDefaultSAXHandler.cdataBlock = NULL; + } +#endif + if (document == NULL) { + if (filename == NULL) + document = xmlReadDoc(buffer,NULL,NULL,XML_PARSE_COMPACT); + else + document = xmlReadFile(filename,NULL,XML_PARSE_COMPACT); + } + 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 +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/testapi.c b/testapi.c new file mode 100644 index 0000000..60f4bdd --- /dev/null +++ b/testapi.c @@ -0,0 +1,52172 @@ +/* + * testapi.c: libxml2 API tester program. + * + * Automatically generated by gentest.py from libxml2-api.xml + * + * See Copyright for the status of this software. + * + * daniel@veillard.com + */ + +#include "libxml.h" +#include + +#include /* for putenv() */ +#include +#include +#include + + +static int testlibxml2(void); +static int test_module(const char *module); + +static int generic_errors = 0; +static int call_tests = 0; +static int function_tests = 0; + +static xmlChar chartab[1024]; +static int inttab[1024]; +static unsigned long longtab[1024]; + +static xmlDocPtr api_doc = NULL; +static xmlDtdPtr api_dtd = NULL; +static xmlNodePtr api_root = NULL; +static xmlAttrPtr api_attr = NULL; +static xmlNsPtr api_ns = NULL; + +static void +structured_errors(void *userData ATTRIBUTE_UNUSED, + xmlErrorPtr error ATTRIBUTE_UNUSED) { + generic_errors++; +} + +static void +free_api_doc(void) { + xmlFreeDoc(api_doc); + api_doc = NULL; + api_dtd = NULL; + api_root = NULL; + api_attr = NULL; + api_ns = NULL; +} + +static xmlDocPtr +get_api_doc(void) { + if (api_doc == NULL) { + api_doc = xmlReadMemory("]>", 88, "root_test", NULL, 0); + api_root = NULL; + api_attr = NULL; + } + return(api_doc); +} + +static xmlDtdPtr +get_api_dtd(void) { + if ((api_dtd == NULL) || (api_dtd->type != XML_DTD_NODE)) { + get_api_doc(); + if ((api_doc != NULL) && (api_doc->children != NULL) && + (api_doc->children->type == XML_DTD_NODE)) + api_dtd = (xmlDtdPtr) api_doc->children; + } + return(api_dtd); +} + +static xmlNodePtr +get_api_root(void) { + if ((api_root == NULL) || (api_root->type != XML_ELEMENT_NODE)) { + get_api_doc(); + if ((api_doc != NULL) && (api_doc->children != NULL) && + (api_doc->children->next != NULL) && + (api_doc->children->next->type == XML_ELEMENT_NODE)) + api_root = api_doc->children->next; + } + return(api_root); +} + +static xmlNsPtr +get_api_ns(void) { + get_api_root(); + if (api_root != NULL) + api_ns = api_root->nsDef; + return(api_ns); +} + +static xmlAttrPtr +get_api_attr(void) { +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_HTML_ENABLED) + static int nr = 0; + xmlChar name[20]; +#endif + + if ((api_root == NULL) || (api_root->type != XML_ELEMENT_NODE)) { + get_api_root(); + } + if (api_root == NULL) + return(NULL); + if (api_root->properties != NULL) { + api_attr = api_root->properties; + return(api_root->properties); + } + api_attr = NULL; +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_HTML_ENABLED) + snprintf((char *) name, 20, "foo%d", nr++); + api_attr = xmlSetProp(api_root, name, (const xmlChar *) "bar"); +#endif + return(api_attr); +} + +static int quiet = 0; + +int main(int argc, char **argv) { + int ret; + int blocks, mem; + +#ifdef HAVE_PUTENV + /* access to the proxy can slow up regression tests a lot */ + putenv((char *) "http_proxy="); +#endif + + memset(chartab, 0, sizeof(chartab)); + strncpy((char *) chartab, " chartab\n", 20); + memset(inttab, 0, sizeof(inttab)); + memset(longtab, 0, sizeof(longtab)); + + xmlInitParser(); +#ifdef LIBXML_SCHEMAS_ENABLED + xmlRelaxNGInitTypes(); +#endif + + LIBXML_TEST_VERSION + + xmlSetStructuredErrorFunc(NULL, structured_errors); + + if (argc >= 2) { + if (!strcmp(argv[1], "-q")) { + quiet = 1; + if (argc >= 3) + ret = test_module(argv[2]); + else + ret = testlibxml2(); + } else { + ret = test_module(argv[1]); + } + } else + ret = testlibxml2(); + + xmlCleanupParser(); + blocks = xmlMemBlocks(); + mem = xmlMemUsed(); + if ((blocks != 0) || (mem != 0)) { + printf("testapi leaked %d bytes in %d blocks\n", mem, blocks); + } + xmlMemoryDump(); + + return (ret != 0); +} + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* + We manually define xmlErrMemory because it's normal declaration + is "hidden" by #ifdef IN_LIBXML +*/ +void xmlErrMemory(xmlParserCtxtPtr ctxt, const char *extra); + +/* + We need some "remote" addresses, but want to avoid getting into + name resolution delays, so we use these +*/ +#define REMOTE1GOOD "http://localhost/" +#define REMOTE1BAD "http:http://http" +#define REMOTE2GOOD "ftp://localhost/foo" + +#define gen_nb_void_ptr 2 + +static void *gen_void_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_void_ptr(int no ATTRIBUTE_UNUSED, void *val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +#if 0 +#define gen_nb_const_void_ptr 2 + +static const void *gen_const_void_ptr(int no, int nr ATTRIBUTE_UNUSED) { + if (no == 0) return((const void *) "immutable string"); + return(NULL); +} +static void des_const_void_ptr(int no ATTRIBUTE_UNUSED, const void *val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} +#endif + +#define gen_nb_userdata 3 + +static void *gen_userdata(int no, int nr ATTRIBUTE_UNUSED) { + if (no == 0) return((void *) &call_tests); + if (no == 1) return((void *) -1); + return(NULL); +} +static void des_userdata(int no ATTRIBUTE_UNUSED, void *val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + + +#define gen_nb_int 4 + +static int gen_int(int no, int nr ATTRIBUTE_UNUSED) { + if (no == 0) return(0); + if (no == 1) return(1); + if (no == 2) return(-1); + if (no == 3) return(122); + return(-1); +} + +static void des_int(int no ATTRIBUTE_UNUSED, int val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +#define gen_nb_parseroptions 5 + +static int gen_parseroptions(int no, int nr ATTRIBUTE_UNUSED) { + if (no == 0) return(XML_PARSE_NOBLANKS | XML_PARSE_RECOVER); + if (no == 1) return(XML_PARSE_NOENT | XML_PARSE_DTDLOAD | XML_PARSE_DTDATTR | XML_PARSE_DTDVALID | XML_PARSE_NOCDATA); + if (no == 2) return(XML_PARSE_XINCLUDE | XML_PARSE_NOXINCNODE | XML_PARSE_NSCLEAN); + if (no == 3) return(XML_PARSE_XINCLUDE | XML_PARSE_NODICT); + return(XML_PARSE_SAX1); +} + +static void des_parseroptions(int no ATTRIBUTE_UNUSED, int val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +#if 0 +#define gen_nb_long 5 + +static long gen_long(int no, int nr ATTRIBUTE_UNUSED) { + if (no == 0) return(0); + if (no == 1) return(1); + if (no == 2) return(-1); + if (no == 3) return(122); + return(-1); +} + +static void des_long(int no ATTRIBUTE_UNUSED, long val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} +#endif + +#define gen_nb_xmlChar 4 + +static xmlChar gen_xmlChar(int no, int nr ATTRIBUTE_UNUSED) { + if (no == 0) return('a'); + if (no == 1) return(' '); + if (no == 2) return((xmlChar) '\xf8'); + return(0); +} + +static void des_xmlChar(int no ATTRIBUTE_UNUSED, xmlChar val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +#define gen_nb_unsigned_int 3 + +static unsigned int gen_unsigned_int(int no, int nr ATTRIBUTE_UNUSED) { + if (no == 0) return(0); + if (no == 1) return(1); + if (no == 2) return(122); + return((unsigned int) -1); +} + +static void des_unsigned_int(int no ATTRIBUTE_UNUSED, unsigned int val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +#define gen_nb_unsigned_long 4 + +static unsigned long gen_unsigned_long(int no, int nr ATTRIBUTE_UNUSED) { + if (no == 0) return(0); + if (no == 1) return(1); + if (no == 2) return(122); + return((unsigned long) -1); +} + +static void des_unsigned_long(int no ATTRIBUTE_UNUSED, unsigned long val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +#define gen_nb_double 4 + +static double gen_double(int no, int nr ATTRIBUTE_UNUSED) { + if (no == 0) return(0); + if (no == 1) return(-1.1); +#if defined(LIBXML_XPATH_ENABLED) + if (no == 2) return(xmlXPathNAN); +#endif + return(-1); +} + +static void des_double(int no ATTRIBUTE_UNUSED, double val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +#define gen_nb_unsigned_long_ptr 2 + +static unsigned long *gen_unsigned_long_ptr(int no, int nr) { + if (no == 0) return(&longtab[nr]); + return(NULL); +} + +static void des_unsigned_long_ptr(int no ATTRIBUTE_UNUSED, unsigned long *val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +#define gen_nb_int_ptr 2 + +static int *gen_int_ptr(int no, int nr) { + if (no == 0) return(&inttab[nr]); + return(NULL); +} + +static void des_int_ptr(int no ATTRIBUTE_UNUSED, int *val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +#define gen_nb_const_char_ptr 4 + +static char *gen_const_char_ptr(int no, int nr ATTRIBUTE_UNUSED) { + if (no == 0) return((char *) "foo"); + if (no == 1) return((char *) ""); + if (no == 2) return((char *) "test/ent2"); + return(NULL); +} +static void des_const_char_ptr(int no ATTRIBUTE_UNUSED, const char *val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +#define gen_nb_xmlChar_ptr 2 + +static xmlChar *gen_xmlChar_ptr(int no, int nr ATTRIBUTE_UNUSED) { + if (no == 0) return(&chartab[0]); + return(NULL); +} +static void des_xmlChar_ptr(int no ATTRIBUTE_UNUSED, xmlChar *val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +#define gen_nb_FILE_ptr 2 + +static FILE *gen_FILE_ptr(int no, int nr ATTRIBUTE_UNUSED) { + if (no == 0) return(fopen("test.out", "a+")); + return(NULL); +} +static void des_FILE_ptr(int no ATTRIBUTE_UNUSED, FILE *val, int nr ATTRIBUTE_UNUSED) { + if (val != NULL) fclose(val); +} + +#define gen_nb_debug_FILE_ptr 2 +static FILE *gen_debug_FILE_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(fopen("test.out", "a+")); +} +static void des_debug_FILE_ptr(int no ATTRIBUTE_UNUSED, FILE *val, int nr ATTRIBUTE_UNUSED) { + if (val != NULL) fclose(val); +} + +#define gen_nb_const_xmlChar_ptr 5 + +static xmlChar *gen_const_xmlChar_ptr(int no, int nr ATTRIBUTE_UNUSED) { + if (no == 0) return((xmlChar *) "foo"); + if (no == 1) return((xmlChar *) ""); + if (no == 2) return((xmlChar *) "n" "\xf8" "ne"); + if (no == 3) return((xmlChar *) " 2ab "); + return(NULL); +} +static void des_const_xmlChar_ptr(int no ATTRIBUTE_UNUSED, const xmlChar *val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +#define gen_nb_filepath 8 + +static const char *gen_filepath(int no, int nr ATTRIBUTE_UNUSED) { + if (no == 0) return("missing.xml"); + if (no == 1) return(""); + if (no == 2) return("test/ent2"); + if (no == 3) return("test/valid/REC-xml-19980210.xml"); + if (no == 4) return("test/valid/dtds/xhtml1-strict.dtd"); + if (no == 5) return(REMOTE1GOOD); + if (no == 6) return(REMOTE1BAD); + return(NULL); +} +static void des_filepath(int no ATTRIBUTE_UNUSED, const char *val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +#define gen_nb_eaten_name 2 + +static xmlChar *gen_eaten_name(int no, int nr ATTRIBUTE_UNUSED) { + if (no == 0) return(xmlStrdup(BAD_CAST "eaten")); + return(NULL); +} +static void des_eaten_name(int no ATTRIBUTE_UNUSED, xmlChar *val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +#define gen_nb_fileoutput 6 + +static const char *gen_fileoutput(int no, int nr ATTRIBUTE_UNUSED) { + if (no == 0) return("/missing.xml"); + if (no == 1) return(""); + if (no == 2) return(REMOTE2GOOD); + if (no == 3) return(REMOTE1GOOD); + if (no == 4) return(REMOTE1BAD); + return(NULL); +} +static void des_fileoutput(int no ATTRIBUTE_UNUSED, const char *val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +#define gen_nb_xmlParserCtxtPtr 3 +static xmlParserCtxtPtr gen_xmlParserCtxtPtr(int no, int nr ATTRIBUTE_UNUSED) { + if (no == 0) return(xmlNewParserCtxt()); + if (no == 1) return(xmlCreateMemoryParserCtxt("", 6)); + return(NULL); +} +static void des_xmlParserCtxtPtr(int no ATTRIBUTE_UNUSED, xmlParserCtxtPtr val, int nr ATTRIBUTE_UNUSED) { + if (val != NULL) + xmlFreeParserCtxt(val); +} + +#define gen_nb_xmlSAXHandlerPtr 2 +static xmlSAXHandlerPtr gen_xmlSAXHandlerPtr(int no, int nr ATTRIBUTE_UNUSED) { +#ifdef LIBXML_SAX1_ENABLED + if (no == 0) return((xmlSAXHandlerPtr) &xmlDefaultSAXHandler); +#endif + return(NULL); +} +static void des_xmlSAXHandlerPtr(int no ATTRIBUTE_UNUSED, xmlSAXHandlerPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +#define gen_nb_xmlValidCtxtPtr 2 +static xmlValidCtxtPtr gen_xmlValidCtxtPtr(int no, int nr ATTRIBUTE_UNUSED) { +#ifdef LIBXML_VALID_ENABLED + if (no == 0) return(xmlNewValidCtxt()); +#endif + return(NULL); +} +static void des_xmlValidCtxtPtr(int no ATTRIBUTE_UNUSED, xmlValidCtxtPtr val, int nr ATTRIBUTE_UNUSED) { +#ifdef LIBXML_VALID_ENABLED + if (val != NULL) + xmlFreeValidCtxt(val); +#endif +} + +#define gen_nb_xmlParserInputBufferPtr 8 + +static xmlParserInputBufferPtr gen_xmlParserInputBufferPtr(int no, int nr ATTRIBUTE_UNUSED) { + if (no == 0) return(xmlParserInputBufferCreateFilename("missing.xml", XML_CHAR_ENCODING_NONE)); + if (no == 1) return(xmlParserInputBufferCreateFilename("", XML_CHAR_ENCODING_NONE)); + if (no == 2) return(xmlParserInputBufferCreateFilename("test/ent2", XML_CHAR_ENCODING_NONE)); + if (no == 3) return(xmlParserInputBufferCreateFilename("test/valid/REC-xml-19980210.xml", XML_CHAR_ENCODING_NONE)); + if (no == 4) return(xmlParserInputBufferCreateFilename("test/valid/dtds/xhtml1-strict.dtd", XML_CHAR_ENCODING_NONE)); + if (no == 5) return(xmlParserInputBufferCreateFilename(REMOTE1GOOD, XML_CHAR_ENCODING_NONE)); + if (no == 6) return(xmlParserInputBufferCreateFilename(REMOTE1BAD, XML_CHAR_ENCODING_NONE)); + return(NULL); +} +static void des_xmlParserInputBufferPtr(int no ATTRIBUTE_UNUSED, xmlParserInputBufferPtr val, int nr ATTRIBUTE_UNUSED) { + xmlFreeParserInputBuffer(val); +} + +#define gen_nb_xmlDocPtr 4 +static xmlDocPtr gen_xmlDocPtr(int no, int nr ATTRIBUTE_UNUSED) { + if (no == 0) return(xmlNewDoc(BAD_CAST "1.0")); + if (no == 1) return(xmlReadMemory("", 6, "test", NULL, 0)); + if (no == 2) return(xmlReadMemory(" ", 24, "test", NULL, 0)); + return(NULL); +} +static void des_xmlDocPtr(int no ATTRIBUTE_UNUSED, xmlDocPtr val, int nr ATTRIBUTE_UNUSED) { + if ((val != NULL) && (val != api_doc) && (val->doc != api_doc)) + xmlFreeDoc(val); +} + +#define gen_nb_xmlAttrPtr 2 +static xmlAttrPtr gen_xmlAttrPtr(int no, int nr ATTRIBUTE_UNUSED) { + if (no == 0) return(get_api_attr()); + return(NULL); +} +static void des_xmlAttrPtr(int no, xmlAttrPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + if (no == 0) free_api_doc(); +} + +#define gen_nb_xmlDictPtr 2 +static xmlDictPtr gen_xmlDictPtr(int no, int nr ATTRIBUTE_UNUSED) { + if (no == 0) return(xmlDictCreate()); + return(NULL); +} +static void des_xmlDictPtr(int no ATTRIBUTE_UNUSED, xmlDictPtr val, int nr ATTRIBUTE_UNUSED) { + if (val != NULL) + xmlDictFree(val); +} + +#define gen_nb_xmlNodePtr 3 +static xmlNodePtr gen_xmlNodePtr(int no, int nr ATTRIBUTE_UNUSED) { + if (no == 0) return(xmlNewPI(BAD_CAST "test", NULL)); + if (no == 1) return(get_api_root()); + return(NULL); +/* if (no == 2) return((xmlNodePtr) get_api_doc()); */ +} +static void des_xmlNodePtr(int no, xmlNodePtr val, int nr ATTRIBUTE_UNUSED) { + if (no == 1) { + free_api_doc(); + } else if (val != NULL) { + xmlUnlinkNode(val); + xmlFreeNode(val); + } +} + +#define gen_nb_xmlDtdPtr 3 +static xmlDtdPtr gen_xmlDtdPtr(int no, int nr ATTRIBUTE_UNUSED) { + if (no == 0) + return(xmlNewDtd(NULL, BAD_CAST "dtd", BAD_CAST"foo", BAD_CAST"bar")); + if (no == 1) return(get_api_dtd()); + return(NULL); +} +static void des_xmlDtdPtr(int no, xmlDtdPtr val, int nr ATTRIBUTE_UNUSED) { + if (no == 1) free_api_doc(); + else if (val != NULL) { + xmlUnlinkNode((xmlNodePtr) val); + xmlFreeNode((xmlNodePtr) val); + } +} + +#define gen_nb_xmlNsPtr 2 +static xmlNsPtr gen_xmlNsPtr(int no, int nr ATTRIBUTE_UNUSED) { + if (no == 0) return(get_api_ns()); + return(NULL); +} +static void des_xmlNsPtr(int no, xmlNsPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + if (no == 0) free_api_doc(); +} + +#define gen_nb_xmlNodePtr_in 3 +static xmlNodePtr gen_xmlNodePtr_in(int no, int nr ATTRIBUTE_UNUSED) { + if (no == 0) return(xmlNewPI(BAD_CAST "test", NULL)); + if (no == 0) return(xmlNewText(BAD_CAST "text")); + return(NULL); +} +static void des_xmlNodePtr_in(int no ATTRIBUTE_UNUSED, xmlNodePtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +#ifdef LIBXML_WRITER_ENABLED +#define gen_nb_xmlTextWriterPtr 2 +static xmlTextWriterPtr gen_xmlTextWriterPtr(int no, int nr ATTRIBUTE_UNUSED) { + if (no == 0) return(xmlNewTextWriterFilename("test.out", 0)); + return(NULL); +} +static void des_xmlTextWriterPtr(int no ATTRIBUTE_UNUSED, xmlTextWriterPtr val, int nr ATTRIBUTE_UNUSED) { + if (val != NULL) xmlFreeTextWriter(val); +} +#endif + +#ifdef LIBXML_READER_ENABLED +#define gen_nb_xmlTextReaderPtr 4 +static xmlTextReaderPtr gen_xmlTextReaderPtr(int no, int nr ATTRIBUTE_UNUSED) { + if (no == 0) return(xmlNewTextReaderFilename("test/ent2")); + if (no == 1) return(xmlNewTextReaderFilename("test/valid/REC-xml-19980210.xml")); + if (no == 2) return(xmlNewTextReaderFilename("test/valid/dtds/xhtml1-strict.dtd")); + return(NULL); +} +static void des_xmlTextReaderPtr(int no ATTRIBUTE_UNUSED, xmlTextReaderPtr val, int nr ATTRIBUTE_UNUSED) { + if (val != NULL) xmlFreeTextReader(val); +} +#endif + +#define gen_nb_xmlBufferPtr 3 +static const xmlChar *static_buf_content = (xmlChar *)"a static buffer"; +static xmlBufferPtr gen_xmlBufferPtr(int no, int nr ATTRIBUTE_UNUSED) { + if (no == 0) return(xmlBufferCreate()); + if (no == 1) return(xmlBufferCreateStatic((void *)static_buf_content, 13)); + return(NULL); +} +static void des_xmlBufferPtr(int no ATTRIBUTE_UNUSED, xmlBufferPtr val, int nr ATTRIBUTE_UNUSED) { + if (val != NULL) { + xmlBufferFree(val); + } +} + +#define gen_nb_xmlListPtr 2 +static xmlListPtr gen_xmlListPtr(int no, int nr ATTRIBUTE_UNUSED) { + if (no == 0) return(xmlListCreate(NULL, NULL)); + return(NULL); +} +static void des_xmlListPtr(int no ATTRIBUTE_UNUSED, xmlListPtr val, int nr ATTRIBUTE_UNUSED) { + if (val != NULL) { + xmlListDelete(val); + } +} + +#define gen_nb_xmlHashTablePtr 2 +static xmlHashTablePtr gen_xmlHashTablePtr(int no, int nr ATTRIBUTE_UNUSED) { + if (no == 0) return(xmlHashCreate(10)); + return(NULL); +} +static void des_xmlHashTablePtr(int no ATTRIBUTE_UNUSED, xmlHashTablePtr val, int nr ATTRIBUTE_UNUSED) { + if (val != NULL) { + xmlHashFree(val, NULL); + } +} + +#include + +#ifdef LIBXML_XPATH_ENABLED +#define gen_nb_xmlXPathObjectPtr 5 +static xmlXPathObjectPtr gen_xmlXPathObjectPtr(int no, int nr ATTRIBUTE_UNUSED) { + if (no == 0) return(xmlXPathNewString(BAD_CAST "string object")); + if (no == 1) return(xmlXPathNewFloat(1.1)); + if (no == 2) return(xmlXPathNewBoolean(1)); + if (no == 3) return(xmlXPathNewNodeSet(NULL)); + return(NULL); +} +static void des_xmlXPathObjectPtr(int no ATTRIBUTE_UNUSED, xmlXPathObjectPtr val, int nr ATTRIBUTE_UNUSED) { + if (val != NULL) { + xmlXPathFreeObject(val); + } +} +#endif + +#ifdef LIBXML_OUTPUT_ENABLED +#define gen_nb_xmlOutputBufferPtr 2 +static xmlOutputBufferPtr gen_xmlOutputBufferPtr(int no, int nr ATTRIBUTE_UNUSED) { + if (no == 0) return(xmlOutputBufferCreateFilename("test.out", NULL, 0)); + return(NULL); +} +static void des_xmlOutputBufferPtr(int no ATTRIBUTE_UNUSED, xmlOutputBufferPtr val, int nr ATTRIBUTE_UNUSED) { + if (val != NULL) { + xmlOutputBufferClose(val); + } +} +#endif + +#ifdef LIBXML_FTP_ENABLED +#define gen_nb_xmlNanoFTPCtxtPtr 4 +static void *gen_xmlNanoFTPCtxtPtr(int no, int nr ATTRIBUTE_UNUSED) { + if (no == 0) return(xmlNanoFTPNewCtxt(REMOTE2GOOD)); + if (no == 1) return(xmlNanoFTPNewCtxt(REMOTE1GOOD)); + if (no == 2) return(xmlNanoFTPNewCtxt("foo")); + return(NULL); +} +static void des_xmlNanoFTPCtxtPtr(int no ATTRIBUTE_UNUSED, void *val, int nr ATTRIBUTE_UNUSED) { + if (val != NULL) { + xmlNanoFTPFreeCtxt(val); + } +} +#endif + +#ifdef LIBXML_HTTP_ENABLED +#define gen_nb_xmlNanoHTTPCtxtPtr 1 +static void *gen_xmlNanoHTTPCtxtPtr(int no, int nr ATTRIBUTE_UNUSED) { + if (no == 0) return(xmlNanoHTTPOpen(REMOTE1GOOD, NULL)); + if (no == 1) return(xmlNanoHTTPOpen(REMOTE2GOOD, NULL)); + if (no == 2) return(xmlNanoHTTPOpen(REMOTE1BAD, NULL)); + return(NULL); +} +static void des_xmlNanoHTTPCtxtPtr(int no ATTRIBUTE_UNUSED, void *val, int nr ATTRIBUTE_UNUSED) { + if (val != NULL) { + xmlNanoHTTPClose(val); + } +} +#endif + +#define gen_nb_xmlCharEncoding 4 +static xmlCharEncoding gen_xmlCharEncoding(int no, int nr ATTRIBUTE_UNUSED) { + if (no == 0) return(XML_CHAR_ENCODING_UTF8); + if (no == 1) return(XML_CHAR_ENCODING_NONE); + if (no == 2) return(XML_CHAR_ENCODING_8859_1); + return(XML_CHAR_ENCODING_ERROR); +} +static void des_xmlCharEncoding(int no ATTRIBUTE_UNUSED, xmlCharEncoding val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED) + +#define gen_nb_xmlExpCtxtPtr 1 +static xmlExpCtxtPtr gen_xmlExpCtxtPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlExpCtxtPtr(int no ATTRIBUTE_UNUSED, xmlExpCtxtPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +#define gen_nb_xmlExpNodePtr 1 +static xmlExpNodePtr gen_xmlExpNodePtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlExpNodePtr(int no ATTRIBUTE_UNUSED, xmlExpNodePtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +#endif + +#if defined(LIBXML_SCHEMAS_ENABLED) +#define gen_nb_xmlSchemaPtr 1 +static xmlSchemaPtr gen_xmlSchemaPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlSchemaPtr(int no ATTRIBUTE_UNUSED, xmlSchemaPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +#define gen_nb_xmlSchemaValidCtxtPtr 1 +static xmlSchemaValidCtxtPtr gen_xmlSchemaValidCtxtPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlSchemaValidCtxtPtr(int no ATTRIBUTE_UNUSED, xmlSchemaValidCtxtPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +#endif /* LIBXML_SCHEMAS_ENABLED */ + +#define gen_nb_xmlHashDeallocator 2 +static void +test_xmlHashDeallocator(void *payload ATTRIBUTE_UNUSED, xmlChar *name ATTRIBUTE_UNUSED) { +} + +static xmlHashDeallocator gen_xmlHashDeallocator(int no, int nr ATTRIBUTE_UNUSED) { + if (no == 0) return(test_xmlHashDeallocator); + return(NULL); +} +static void des_xmlHashDeallocator(int no ATTRIBUTE_UNUSED, xmlHashDeallocator val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + + +static void desret_int(int val ATTRIBUTE_UNUSED) { +} +static void desret_xmlChar(xmlChar val ATTRIBUTE_UNUSED) { +} +static void desret_long(long val ATTRIBUTE_UNUSED) { +} +static void desret_unsigned_long(unsigned long val ATTRIBUTE_UNUSED) { +} +static void desret_double(double val ATTRIBUTE_UNUSED) { +} +static void desret_xmlCharEncoding(xmlCharEncoding val ATTRIBUTE_UNUSED) { +} +#if 0 +static void desret_const_void_ptr(void *val ATTRIBUTE_UNUSED) { +} +#endif +static void desret_void_ptr(void *val ATTRIBUTE_UNUSED) { +} +static void desret_const_char_ptr(const char *val ATTRIBUTE_UNUSED) { +} +static void desret_const_xmlChar_ptr(const xmlChar *val ATTRIBUTE_UNUSED) { +} +static void desret_xmlChar_ptr(xmlChar *val) { + if (val != NULL) + xmlFree(val); +} +static void desret_xmlDocPtr(xmlDocPtr val) { + if (val != api_doc) + xmlFreeDoc(val); +} +static void desret_xmlDictPtr(xmlDictPtr val) { + xmlDictFree(val); +} +#ifdef LIBXML_OUTPUT_ENABLED +static void desret_xmlOutputBufferPtr(xmlOutputBufferPtr val) { + xmlOutputBufferClose(val); +} +#endif +#ifdef LIBXML_READER_ENABLED +static void desret_xmlTextReaderPtr(xmlTextReaderPtr val) { + xmlFreeTextReader(val); +} +#endif +static void desret_xmlNodePtr(xmlNodePtr val) { + if ((val != NULL) && (val != api_root) && (val != (xmlNodePtr) api_doc)) { + xmlUnlinkNode(val); + xmlFreeNode(val); + } +} +static void desret_xmlAttrPtr(xmlAttrPtr val) { + if (val != NULL) { + xmlUnlinkNode((xmlNodePtr) val); + xmlFreeNode((xmlNodePtr) val); + } +} +static void desret_xmlEntityPtr(xmlEntityPtr val) { + if (val != NULL) { + xmlUnlinkNode((xmlNodePtr) val); + xmlFreeNode((xmlNodePtr) val); + } +} +static void desret_xmlElementPtr(xmlElementPtr val) { + if (val != NULL) { + xmlUnlinkNode((xmlNodePtr) val); + } +} +static void desret_xmlAttributePtr(xmlAttributePtr val) { + if (val != NULL) { + xmlUnlinkNode((xmlNodePtr) val); + } +} +static void desret_xmlNsPtr(xmlNsPtr val ATTRIBUTE_UNUSED) { +} +static void desret_xmlDtdPtr(xmlDtdPtr val) { + desret_xmlNodePtr((xmlNodePtr)val); +} +#ifdef LIBXML_XPATH_ENABLED +static void desret_xmlXPathObjectPtr(xmlXPathObjectPtr val) { + xmlXPathFreeObject(val); +} +static void desret_xmlNodeSetPtr(xmlNodeSetPtr val) { + xmlXPathFreeNodeSet(val); +} +#endif +static void desret_xmlParserCtxtPtr(xmlParserCtxtPtr val) { + xmlFreeParserCtxt(val); +} +static void desret_xmlParserInputBufferPtr(xmlParserInputBufferPtr val) { + xmlFreeParserInputBuffer(val); +} +static void desret_xmlParserInputPtr(xmlParserInputPtr val) { + xmlFreeInputStream(val); +} +#ifdef LIBXML_WRITER_ENABLED +static void desret_xmlTextWriterPtr(xmlTextWriterPtr val) { + xmlFreeTextWriter(val); +} +#endif +static void desret_xmlBufferPtr(xmlBufferPtr val) { + xmlBufferFree(val); +} +#ifdef LIBXML_SCHEMAS_ENABLED +static void desret_xmlSchemaParserCtxtPtr(xmlSchemaParserCtxtPtr val) { + xmlSchemaFreeParserCtxt(val); +} +static void desret_xmlSchemaTypePtr(xmlSchemaTypePtr val ATTRIBUTE_UNUSED) { +} +static void desret_xmlRelaxNGParserCtxtPtr(xmlRelaxNGParserCtxtPtr val) { + xmlRelaxNGFreeParserCtxt(val); +} +#endif +#ifdef LIBXML_HTML_ENABLED +static void desret_const_htmlEntityDesc_ptr(const htmlEntityDesc * val ATTRIBUTE_UNUSED) { +} +#endif +#ifdef LIBXML_HTTP_ENABLED +static void desret_xmlNanoHTTPCtxtPtr(void *val) { + xmlNanoHTTPClose(val); +} +#endif +#ifdef LIBXML_FTP_ENABLED +static void desret_xmlNanoFTPCtxtPtr(void *val) { + xmlNanoFTPClose(val); +} +#endif +/* cut and pasted from autogenerated to avoid troubles */ +#define gen_nb_const_xmlChar_ptr_ptr 1 +static xmlChar ** gen_const_xmlChar_ptr_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_const_xmlChar_ptr_ptr(int no ATTRIBUTE_UNUSED, const xmlChar ** val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +#define gen_nb_unsigned_char_ptr 1 +static unsigned char * gen_unsigned_char_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_unsigned_char_ptr(int no ATTRIBUTE_UNUSED, unsigned char * val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +#define gen_nb_const_unsigned_char_ptr 1 +static unsigned char * gen_const_unsigned_char_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_const_unsigned_char_ptr(int no ATTRIBUTE_UNUSED, const unsigned char * val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +#ifdef LIBXML_HTML_ENABLED +#define gen_nb_const_htmlNodePtr 1 +static htmlNodePtr gen_const_htmlNodePtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_const_htmlNodePtr(int no ATTRIBUTE_UNUSED, const htmlNodePtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} +#endif + +#ifdef LIBXML_HTML_ENABLED +#define gen_nb_htmlDocPtr 3 +static htmlDocPtr gen_htmlDocPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + if (no == 0) return(htmlNewDoc(NULL, NULL)); + if (no == 1) return(htmlReadMemory("", 7, "test", NULL, 0)); + return(NULL); +} +static void des_htmlDocPtr(int no ATTRIBUTE_UNUSED, htmlDocPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + if ((val != NULL) && (val != api_doc) && (val->doc != api_doc)) + xmlFreeDoc(val); +} +static void desret_htmlDocPtr(htmlDocPtr val) { + if ((val != NULL) && (val != api_doc) && (val->doc != api_doc)) + xmlFreeDoc(val); +} +#define gen_nb_htmlParserCtxtPtr 3 +static htmlParserCtxtPtr gen_htmlParserCtxtPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + if (no == 0) return(xmlNewParserCtxt()); + if (no == 1) return(htmlCreateMemoryParserCtxt("", 7)); + return(NULL); +} +static void des_htmlParserCtxtPtr(int no ATTRIBUTE_UNUSED, htmlParserCtxtPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + if (val != NULL) + htmlFreeParserCtxt(val); +} +static void desret_htmlParserCtxtPtr(htmlParserCtxtPtr val) { + if (val != NULL) + htmlFreeParserCtxt(val); +} +#endif + +#ifdef LIBXML_XPATH_ENABLED +#define gen_nb_xmlNodeSetPtr 1 +static xmlNodeSetPtr gen_xmlNodeSetPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlNodeSetPtr(int no ATTRIBUTE_UNUSED, xmlNodeSetPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} +#endif + +#ifdef LIBXML_DEBUG_ENABLED +#ifdef LIBXML_XPATH_ENABLED +#define gen_nb_xmlShellCtxtPtr 1 +static xmlShellCtxtPtr gen_xmlShellCtxtPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlShellCtxtPtr(int no ATTRIBUTE_UNUSED, xmlShellCtxtPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} +#endif +#endif + +#ifdef LIBXML_PATTERN_ENABLED +#define gen_nb_xmlPatternPtr 1 +static xmlPatternPtr gen_xmlPatternPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlPatternPtr(int no ATTRIBUTE_UNUSED, xmlPatternPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} +#endif + +#define gen_nb_xmlElementContentPtr 1 +static xmlElementContentPtr gen_xmlElementContentPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlElementContentPtr(int no ATTRIBUTE_UNUSED, xmlElementContentPtr val, int nr ATTRIBUTE_UNUSED) { + if (val != NULL) + xmlFreeElementContent(val); +} +static void desret_xmlElementContentPtr(xmlElementContentPtr val) { + if (val != NULL) + xmlFreeElementContent(val); +} + +#define gen_nb_xmlParserNodeInfoSeqPtr 1 +static xmlParserNodeInfoSeqPtr gen_xmlParserNodeInfoSeqPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlParserNodeInfoSeqPtr(int no ATTRIBUTE_UNUSED, xmlParserNodeInfoSeqPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +static void desret_const_xmlParserNodeInfo_ptr(const xmlParserNodeInfo *val ATTRIBUTE_UNUSED) { +} + +#define gen_nb_void_ptr_ptr 1 +static void ** gen_void_ptr_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_void_ptr_ptr(int no ATTRIBUTE_UNUSED, void ** val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +/************************************************************************ + * * + * WARNING: end of the manually maintained part of the test code * + * do not remove or alter the CUT HERE line * + * * + ************************************************************************/ + +/* CUT HERE: everything below that line is generated */ +#ifdef LIBXML_HTML_ENABLED +static void desret_htmlStatus(htmlStatus val ATTRIBUTE_UNUSED) { +} + +#endif + +#define gen_nb_xmlAttributeDefault 4 +static xmlAttributeDefault gen_xmlAttributeDefault(int no, int nr ATTRIBUTE_UNUSED) { + if (no == 1) return(XML_ATTRIBUTE_FIXED); + if (no == 2) return(XML_ATTRIBUTE_IMPLIED); + if (no == 3) return(XML_ATTRIBUTE_NONE); + if (no == 4) return(XML_ATTRIBUTE_REQUIRED); + return(0); +} + +static void des_xmlAttributeDefault(int no ATTRIBUTE_UNUSED, xmlAttributeDefault val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +#define gen_nb_xmlAttributeType 4 +static xmlAttributeType gen_xmlAttributeType(int no, int nr ATTRIBUTE_UNUSED) { + if (no == 1) return(XML_ATTRIBUTE_CDATA); + if (no == 2) return(XML_ATTRIBUTE_ENTITIES); + if (no == 3) return(XML_ATTRIBUTE_ENTITY); + if (no == 4) return(XML_ATTRIBUTE_ENUMERATION); + return(0); +} + +static void des_xmlAttributeType(int no ATTRIBUTE_UNUSED, xmlAttributeType val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +#define gen_nb_xmlBufferAllocationScheme 4 +static xmlBufferAllocationScheme gen_xmlBufferAllocationScheme(int no, int nr ATTRIBUTE_UNUSED) { + if (no == 1) return(XML_BUFFER_ALLOC_BOUNDED); + if (no == 2) return(XML_BUFFER_ALLOC_DOUBLEIT); + if (no == 3) return(XML_BUFFER_ALLOC_EXACT); + if (no == 4) return(XML_BUFFER_ALLOC_HYBRID); + return(0); +} + +static void des_xmlBufferAllocationScheme(int no ATTRIBUTE_UNUSED, xmlBufferAllocationScheme val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +static void desret_xmlBufferAllocationScheme(xmlBufferAllocationScheme val ATTRIBUTE_UNUSED) { +} + +#ifdef LIBXML_CATALOG_ENABLED +#define gen_nb_xmlCatalogAllow 4 +static xmlCatalogAllow gen_xmlCatalogAllow(int no, int nr ATTRIBUTE_UNUSED) { + if (no == 1) return(XML_CATA_ALLOW_ALL); + if (no == 2) return(XML_CATA_ALLOW_DOCUMENT); + if (no == 3) return(XML_CATA_ALLOW_GLOBAL); + if (no == 4) return(XML_CATA_ALLOW_NONE); + return(0); +} + +static void des_xmlCatalogAllow(int no ATTRIBUTE_UNUSED, xmlCatalogAllow val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +static void desret_xmlCatalogAllow(xmlCatalogAllow val ATTRIBUTE_UNUSED) { +} + +#endif + +#ifdef LIBXML_CATALOG_ENABLED +#define gen_nb_xmlCatalogPrefer 3 +static xmlCatalogPrefer gen_xmlCatalogPrefer(int no, int nr ATTRIBUTE_UNUSED) { + if (no == 1) return(XML_CATA_PREFER_NONE); + if (no == 2) return(XML_CATA_PREFER_PUBLIC); + if (no == 3) return(XML_CATA_PREFER_SYSTEM); + return(0); +} + +static void des_xmlCatalogPrefer(int no ATTRIBUTE_UNUSED, xmlCatalogPrefer val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +static void desret_xmlCatalogPrefer(xmlCatalogPrefer val ATTRIBUTE_UNUSED) { +} + +#endif + +#define gen_nb_xmlElementContentType 4 +static xmlElementContentType gen_xmlElementContentType(int no, int nr ATTRIBUTE_UNUSED) { + if (no == 1) return(XML_ELEMENT_CONTENT_ELEMENT); + if (no == 2) return(XML_ELEMENT_CONTENT_OR); + if (no == 3) return(XML_ELEMENT_CONTENT_PCDATA); + if (no == 4) return(XML_ELEMENT_CONTENT_SEQ); + return(0); +} + +static void des_xmlElementContentType(int no ATTRIBUTE_UNUSED, xmlElementContentType val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +#define gen_nb_xmlElementTypeVal 4 +static xmlElementTypeVal gen_xmlElementTypeVal(int no, int nr ATTRIBUTE_UNUSED) { + if (no == 1) return(XML_ELEMENT_TYPE_ANY); + if (no == 2) return(XML_ELEMENT_TYPE_ELEMENT); + if (no == 3) return(XML_ELEMENT_TYPE_EMPTY); + if (no == 4) return(XML_ELEMENT_TYPE_MIXED); + return(0); +} + +static void des_xmlElementTypeVal(int no ATTRIBUTE_UNUSED, xmlElementTypeVal val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +#define gen_nb_xmlFeature 4 +static xmlFeature gen_xmlFeature(int no, int nr ATTRIBUTE_UNUSED) { + if (no == 1) return(XML_WITH_AUTOMATA); + if (no == 2) return(XML_WITH_C14N); + if (no == 3) return(XML_WITH_CATALOG); + if (no == 4) return(XML_WITH_DEBUG); + return(0); +} + +static void des_xmlFeature(int no ATTRIBUTE_UNUSED, xmlFeature val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +static void desret_xmlParserErrors(xmlParserErrors val ATTRIBUTE_UNUSED) { +} + +#ifdef LIBXML_SCHEMAS_ENABLED +#define gen_nb_xmlSchemaValType 4 +static xmlSchemaValType gen_xmlSchemaValType(int no, int nr ATTRIBUTE_UNUSED) { + if (no == 1) return(XML_SCHEMAS_ANYSIMPLETYPE); + if (no == 2) return(XML_SCHEMAS_ANYTYPE); + if (no == 3) return(XML_SCHEMAS_ANYURI); + if (no == 4) return(XML_SCHEMAS_BASE64BINARY); + return(0); +} + +static void des_xmlSchemaValType(int no ATTRIBUTE_UNUSED, xmlSchemaValType val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +static void desret_xmlSchemaValType(xmlSchemaValType val ATTRIBUTE_UNUSED) { +} + +#endif + +#ifdef LIBXML_SCHEMAS_ENABLED +#define gen_nb_xmlSchemaWhitespaceValueType 4 +static xmlSchemaWhitespaceValueType gen_xmlSchemaWhitespaceValueType(int no, int nr ATTRIBUTE_UNUSED) { + if (no == 1) return(XML_SCHEMA_WHITESPACE_COLLAPSE); + if (no == 2) return(XML_SCHEMA_WHITESPACE_PRESERVE); + if (no == 3) return(XML_SCHEMA_WHITESPACE_REPLACE); + if (no == 4) return(XML_SCHEMA_WHITESPACE_UNKNOWN); + return(0); +} + +static void des_xmlSchemaWhitespaceValueType(int no ATTRIBUTE_UNUSED, xmlSchemaWhitespaceValueType val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +static int test_HTMLparser(void); +static int test_HTMLtree(void); +static int test_SAX2(void); +static int test_c14n(void); +static int test_catalog(void); +static int test_chvalid(void); +static int test_debugXML(void); +static int test_dict(void); +static int test_encoding(void); +static int test_entities(void); +static int test_hash(void); +static int test_list(void); +static int test_nanoftp(void); +static int test_nanohttp(void); +static int test_parser(void); +static int test_parserInternals(void); +static int test_pattern(void); +static int test_relaxng(void); +static int test_schemasInternals(void); +static int test_schematron(void); +static int test_tree(void); +static int test_uri(void); +static int test_valid(void); +static int test_xinclude(void); +static int test_xmlIO(void); +static int test_xmlautomata(void); +static int test_xmlerror(void); +static int test_xmlmodule(void); +static int test_xmlreader(void); +static int test_xmlregexp(void); +static int test_xmlsave(void); +static int test_xmlschemas(void); +static int test_xmlschemastypes(void); +static int test_xmlstring(void); +static int test_xmlunicode(void); +static int test_xmlwriter(void); +static int test_xpath(void); +static int test_xpathInternals(void); +static int test_xpointer(void); + +/** + * testlibxml2: + * + * Main entry point of the tester for the full libxml2 module, + * it calls all the tester entry point for each module. + * + * Returns the number of error found + */ +static int +testlibxml2(void) +{ + int test_ret = 0; + + test_ret += test_HTMLparser(); + test_ret += test_HTMLtree(); + test_ret += test_SAX2(); + test_ret += test_c14n(); + test_ret += test_catalog(); + test_ret += test_chvalid(); + test_ret += test_debugXML(); + test_ret += test_dict(); + test_ret += test_encoding(); + test_ret += test_entities(); + test_ret += test_hash(); + test_ret += test_list(); + test_ret += test_nanoftp(); + test_ret += test_nanohttp(); + test_ret += test_parser(); + test_ret += test_parserInternals(); + test_ret += test_pattern(); + test_ret += test_relaxng(); + test_ret += test_schemasInternals(); + test_ret += test_schematron(); + test_ret += test_tree(); + test_ret += test_uri(); + test_ret += test_valid(); + test_ret += test_xinclude(); + test_ret += test_xmlIO(); + test_ret += test_xmlautomata(); + test_ret += test_xmlerror(); + test_ret += test_xmlmodule(); + test_ret += test_xmlreader(); + test_ret += test_xmlregexp(); + test_ret += test_xmlsave(); + test_ret += test_xmlschemas(); + test_ret += test_xmlschemastypes(); + test_ret += test_xmlstring(); + test_ret += test_xmlunicode(); + test_ret += test_xmlwriter(); + test_ret += test_xpath(); + test_ret += test_xpathInternals(); + test_ret += test_xpointer(); + + printf("Total: %d functions, %d tests, %d errors\n", + function_tests, call_tests, test_ret); + return(test_ret); +} + + +static int +test_UTF8ToHtml(void) { + int test_ret = 0; + +#if defined(LIBXML_HTML_ENABLED) + int mem_base; + int ret_val; + unsigned char * out; /* a pointer to an array of bytes to store the result */ + int n_out; + int * outlen; /* the length of @out */ + int n_outlen; + unsigned char * in; /* a pointer to an array of UTF-8 chars */ + int n_in; + int * inlen; /* the length of @in */ + int n_inlen; + + for (n_out = 0;n_out < gen_nb_unsigned_char_ptr;n_out++) { + for (n_outlen = 0;n_outlen < gen_nb_int_ptr;n_outlen++) { + for (n_in = 0;n_in < gen_nb_const_unsigned_char_ptr;n_in++) { + for (n_inlen = 0;n_inlen < gen_nb_int_ptr;n_inlen++) { + mem_base = xmlMemBlocks(); + out = gen_unsigned_char_ptr(n_out, 0); + outlen = gen_int_ptr(n_outlen, 1); + in = gen_const_unsigned_char_ptr(n_in, 2); + inlen = gen_int_ptr(n_inlen, 3); + + ret_val = UTF8ToHtml(out, outlen, (const unsigned char *)in, inlen); + desret_int(ret_val); + call_tests++; + des_unsigned_char_ptr(n_out, out, 0); + des_int_ptr(n_outlen, outlen, 1); + des_const_unsigned_char_ptr(n_in, (const unsigned char *)in, 2); + des_int_ptr(n_inlen, inlen, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in UTF8ToHtml", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_out); + printf(" %d", n_outlen); + printf(" %d", n_in); + printf(" %d", n_inlen); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + +#ifdef LIBXML_HTML_ENABLED + +#define gen_nb_const_htmlElemDesc_ptr 1 +static htmlElemDesc * gen_const_htmlElemDesc_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_const_htmlElemDesc_ptr(int no ATTRIBUTE_UNUSED, const htmlElemDesc * val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} +#endif + + +static int +test_htmlAttrAllowed(void) { + int test_ret = 0; + +#if defined(LIBXML_HTML_ENABLED) + int mem_base; + htmlStatus ret_val; + htmlElemDesc * elt; /* HTML element */ + int n_elt; + xmlChar * attr; /* HTML attribute */ + int n_attr; + int legacy; /* whether to allow deprecated attributes */ + int n_legacy; + + for (n_elt = 0;n_elt < gen_nb_const_htmlElemDesc_ptr;n_elt++) { + for (n_attr = 0;n_attr < gen_nb_const_xmlChar_ptr;n_attr++) { + for (n_legacy = 0;n_legacy < gen_nb_int;n_legacy++) { + mem_base = xmlMemBlocks(); + elt = gen_const_htmlElemDesc_ptr(n_elt, 0); + attr = gen_const_xmlChar_ptr(n_attr, 1); + legacy = gen_int(n_legacy, 2); + + ret_val = htmlAttrAllowed((const htmlElemDesc *)elt, (const xmlChar *)attr, legacy); + desret_htmlStatus(ret_val); + call_tests++; + des_const_htmlElemDesc_ptr(n_elt, (const htmlElemDesc *)elt, 0); + des_const_xmlChar_ptr(n_attr, (const xmlChar *)attr, 1); + des_int(n_legacy, legacy, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in htmlAttrAllowed", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_elt); + printf(" %d", n_attr); + printf(" %d", n_legacy); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + +#ifdef LIBXML_HTML_ENABLED + +#define gen_nb_htmlNodePtr 1 +static htmlNodePtr gen_htmlNodePtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_htmlNodePtr(int no ATTRIBUTE_UNUSED, htmlNodePtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} +#endif + + +static int +test_htmlAutoCloseTag(void) { + int test_ret = 0; + +#if defined(LIBXML_HTML_ENABLED) + int mem_base; + int ret_val; + htmlDocPtr doc; /* the HTML document */ + int n_doc; + xmlChar * name; /* The tag name */ + int n_name; + htmlNodePtr elem; /* the HTML element */ + int n_elem; + + for (n_doc = 0;n_doc < gen_nb_htmlDocPtr;n_doc++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_elem = 0;n_elem < gen_nb_htmlNodePtr;n_elem++) { + mem_base = xmlMemBlocks(); + doc = gen_htmlDocPtr(n_doc, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + elem = gen_htmlNodePtr(n_elem, 2); + + ret_val = htmlAutoCloseTag(doc, (const xmlChar *)name, elem); + desret_int(ret_val); + call_tests++; + des_htmlDocPtr(n_doc, doc, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + des_htmlNodePtr(n_elem, elem, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in htmlAutoCloseTag", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf(" %d", n_name); + printf(" %d", n_elem); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_htmlCreateMemoryParserCtxt(void) { + int test_ret = 0; + +#if defined(LIBXML_HTML_ENABLED) + int mem_base; + htmlParserCtxtPtr ret_val; + char * buffer; /* a pointer to a char array */ + int n_buffer; + int size; /* the size of the array */ + int n_size; + + for (n_buffer = 0;n_buffer < gen_nb_const_char_ptr;n_buffer++) { + for (n_size = 0;n_size < gen_nb_int;n_size++) { + mem_base = xmlMemBlocks(); + buffer = gen_const_char_ptr(n_buffer, 0); + size = gen_int(n_size, 1); + + ret_val = htmlCreateMemoryParserCtxt((const char *)buffer, size); + desret_htmlParserCtxtPtr(ret_val); + call_tests++; + des_const_char_ptr(n_buffer, (const char *)buffer, 0); + des_int(n_size, size, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in htmlCreateMemoryParserCtxt", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_buffer); + printf(" %d", n_size); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + +#ifdef LIBXML_HTML_ENABLED + +#define gen_nb_htmlSAXHandlerPtr 1 +static htmlSAXHandlerPtr gen_htmlSAXHandlerPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_htmlSAXHandlerPtr(int no ATTRIBUTE_UNUSED, htmlSAXHandlerPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} +#endif + + +static int +test_htmlCreatePushParserCtxt(void) { + int test_ret = 0; + +#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_PUSH_ENABLED) + int mem_base; + htmlParserCtxtPtr ret_val; + htmlSAXHandlerPtr sax; /* a SAX handler */ + int n_sax; + void * user_data; /* The user data returned on SAX callbacks */ + int n_user_data; + char * chunk; /* a pointer to an array of chars */ + int n_chunk; + int size; /* number of chars in the array */ + int n_size; + const char * filename; /* an optional file name or URI */ + int n_filename; + xmlCharEncoding enc; /* an optional encoding */ + int n_enc; + + for (n_sax = 0;n_sax < gen_nb_htmlSAXHandlerPtr;n_sax++) { + for (n_user_data = 0;n_user_data < gen_nb_userdata;n_user_data++) { + for (n_chunk = 0;n_chunk < gen_nb_const_char_ptr;n_chunk++) { + for (n_size = 0;n_size < gen_nb_int;n_size++) { + for (n_filename = 0;n_filename < gen_nb_fileoutput;n_filename++) { + for (n_enc = 0;n_enc < gen_nb_xmlCharEncoding;n_enc++) { + mem_base = xmlMemBlocks(); + sax = gen_htmlSAXHandlerPtr(n_sax, 0); + user_data = gen_userdata(n_user_data, 1); + chunk = gen_const_char_ptr(n_chunk, 2); + size = gen_int(n_size, 3); + filename = gen_fileoutput(n_filename, 4); + enc = gen_xmlCharEncoding(n_enc, 5); + + ret_val = htmlCreatePushParserCtxt(sax, user_data, (const char *)chunk, size, filename, enc); + desret_htmlParserCtxtPtr(ret_val); + call_tests++; + des_htmlSAXHandlerPtr(n_sax, sax, 0); + des_userdata(n_user_data, user_data, 1); + des_const_char_ptr(n_chunk, (const char *)chunk, 2); + des_int(n_size, size, 3); + des_fileoutput(n_filename, filename, 4); + des_xmlCharEncoding(n_enc, enc, 5); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in htmlCreatePushParserCtxt", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_sax); + printf(" %d", n_user_data); + printf(" %d", n_chunk); + printf(" %d", n_size); + printf(" %d", n_filename); + printf(" %d", n_enc); + printf("\n"); + } + } + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_htmlCtxtReadDoc(void) { + int test_ret = 0; + +#if defined(LIBXML_HTML_ENABLED) + int mem_base; + htmlDocPtr ret_val; + htmlParserCtxtPtr ctxt; /* an HTML parser context */ + int n_ctxt; + xmlChar * cur; /* a pointer to a zero terminated string */ + int n_cur; + const char * URL; /* the base URL to use for the document */ + int n_URL; + char * encoding; /* the document encoding, or NULL */ + int n_encoding; + int options; /* a combination of htmlParserOption(s) */ + int n_options; + + for (n_ctxt = 0;n_ctxt < gen_nb_htmlParserCtxtPtr;n_ctxt++) { + for (n_cur = 0;n_cur < gen_nb_const_xmlChar_ptr;n_cur++) { + for (n_URL = 0;n_URL < gen_nb_filepath;n_URL++) { + for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) { + for (n_options = 0;n_options < gen_nb_int;n_options++) { + mem_base = xmlMemBlocks(); + ctxt = gen_htmlParserCtxtPtr(n_ctxt, 0); + cur = gen_const_xmlChar_ptr(n_cur, 1); + URL = gen_filepath(n_URL, 2); + encoding = gen_const_char_ptr(n_encoding, 3); + options = gen_int(n_options, 4); + + ret_val = htmlCtxtReadDoc(ctxt, (const xmlChar *)cur, URL, (const char *)encoding, options); + desret_htmlDocPtr(ret_val); + call_tests++; + des_htmlParserCtxtPtr(n_ctxt, ctxt, 0); + des_const_xmlChar_ptr(n_cur, (const xmlChar *)cur, 1); + des_filepath(n_URL, URL, 2); + des_const_char_ptr(n_encoding, (const char *)encoding, 3); + des_int(n_options, options, 4); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in htmlCtxtReadDoc", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_cur); + printf(" %d", n_URL); + printf(" %d", n_encoding); + printf(" %d", n_options); + printf("\n"); + } + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_htmlCtxtReadFile(void) { + int test_ret = 0; + +#if defined(LIBXML_HTML_ENABLED) + htmlDocPtr ret_val; + htmlParserCtxtPtr ctxt; /* an HTML parser context */ + int n_ctxt; + const char * filename; /* a file or URL */ + int n_filename; + char * encoding; /* the document encoding, or NULL */ + int n_encoding; + int options; /* a combination of htmlParserOption(s) */ + int n_options; + + for (n_ctxt = 0;n_ctxt < gen_nb_htmlParserCtxtPtr;n_ctxt++) { + for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) { + for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) { + for (n_options = 0;n_options < gen_nb_int;n_options++) { + ctxt = gen_htmlParserCtxtPtr(n_ctxt, 0); + filename = gen_filepath(n_filename, 1); + encoding = gen_const_char_ptr(n_encoding, 2); + options = gen_int(n_options, 3); + + ret_val = htmlCtxtReadFile(ctxt, filename, (const char *)encoding, options); + desret_htmlDocPtr(ret_val); + call_tests++; + des_htmlParserCtxtPtr(n_ctxt, ctxt, 0); + des_filepath(n_filename, filename, 1); + des_const_char_ptr(n_encoding, (const char *)encoding, 2); + des_int(n_options, options, 3); + xmlResetLastError(); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_htmlCtxtReadMemory(void) { + int test_ret = 0; + +#if defined(LIBXML_HTML_ENABLED) + int mem_base; + htmlDocPtr ret_val; + htmlParserCtxtPtr ctxt; /* an HTML parser context */ + int n_ctxt; + char * buffer; /* a pointer to a char array */ + int n_buffer; + int size; /* the size of the array */ + int n_size; + const char * URL; /* the base URL to use for the document */ + int n_URL; + char * encoding; /* the document encoding, or NULL */ + int n_encoding; + int options; /* a combination of htmlParserOption(s) */ + int n_options; + + for (n_ctxt = 0;n_ctxt < gen_nb_htmlParserCtxtPtr;n_ctxt++) { + for (n_buffer = 0;n_buffer < gen_nb_const_char_ptr;n_buffer++) { + for (n_size = 0;n_size < gen_nb_int;n_size++) { + for (n_URL = 0;n_URL < gen_nb_filepath;n_URL++) { + for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) { + for (n_options = 0;n_options < gen_nb_int;n_options++) { + mem_base = xmlMemBlocks(); + ctxt = gen_htmlParserCtxtPtr(n_ctxt, 0); + buffer = gen_const_char_ptr(n_buffer, 1); + size = gen_int(n_size, 2); + URL = gen_filepath(n_URL, 3); + encoding = gen_const_char_ptr(n_encoding, 4); + options = gen_int(n_options, 5); + + ret_val = htmlCtxtReadMemory(ctxt, (const char *)buffer, size, URL, (const char *)encoding, options); + desret_htmlDocPtr(ret_val); + call_tests++; + des_htmlParserCtxtPtr(n_ctxt, ctxt, 0); + des_const_char_ptr(n_buffer, (const char *)buffer, 1); + des_int(n_size, size, 2); + des_filepath(n_URL, URL, 3); + des_const_char_ptr(n_encoding, (const char *)encoding, 4); + des_int(n_options, options, 5); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in htmlCtxtReadMemory", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_buffer); + printf(" %d", n_size); + printf(" %d", n_URL); + printf(" %d", n_encoding); + printf(" %d", n_options); + printf("\n"); + } + } + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_htmlCtxtReset(void) { + int test_ret = 0; + +#if defined(LIBXML_HTML_ENABLED) + int mem_base; + htmlParserCtxtPtr ctxt; /* an HTML parser context */ + int n_ctxt; + + for (n_ctxt = 0;n_ctxt < gen_nb_htmlParserCtxtPtr;n_ctxt++) { + mem_base = xmlMemBlocks(); + ctxt = gen_htmlParserCtxtPtr(n_ctxt, 0); + + htmlCtxtReset(ctxt); + call_tests++; + des_htmlParserCtxtPtr(n_ctxt, ctxt, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in htmlCtxtReset", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_htmlCtxtUseOptions(void) { + int test_ret = 0; + +#if defined(LIBXML_HTML_ENABLED) + int mem_base; + int ret_val; + htmlParserCtxtPtr ctxt; /* an HTML parser context */ + int n_ctxt; + int options; /* a combination of htmlParserOption(s) */ + int n_options; + + for (n_ctxt = 0;n_ctxt < gen_nb_htmlParserCtxtPtr;n_ctxt++) { + for (n_options = 0;n_options < gen_nb_int;n_options++) { + mem_base = xmlMemBlocks(); + ctxt = gen_htmlParserCtxtPtr(n_ctxt, 0); + options = gen_int(n_options, 1); + + ret_val = htmlCtxtUseOptions(ctxt, options); + desret_int(ret_val); + call_tests++; + des_htmlParserCtxtPtr(n_ctxt, ctxt, 0); + des_int(n_options, options, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in htmlCtxtUseOptions", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_options); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_htmlElementAllowedHere(void) { + int test_ret = 0; + +#if defined(LIBXML_HTML_ENABLED) + int mem_base; + int ret_val; + htmlElemDesc * parent; /* HTML parent element */ + int n_parent; + xmlChar * elt; /* HTML element */ + int n_elt; + + for (n_parent = 0;n_parent < gen_nb_const_htmlElemDesc_ptr;n_parent++) { + for (n_elt = 0;n_elt < gen_nb_const_xmlChar_ptr;n_elt++) { + mem_base = xmlMemBlocks(); + parent = gen_const_htmlElemDesc_ptr(n_parent, 0); + elt = gen_const_xmlChar_ptr(n_elt, 1); + + ret_val = htmlElementAllowedHere((const htmlElemDesc *)parent, (const xmlChar *)elt); + desret_int(ret_val); + call_tests++; + des_const_htmlElemDesc_ptr(n_parent, (const htmlElemDesc *)parent, 0); + des_const_xmlChar_ptr(n_elt, (const xmlChar *)elt, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in htmlElementAllowedHere", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_parent); + printf(" %d", n_elt); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_htmlElementStatusHere(void) { + int test_ret = 0; + +#if defined(LIBXML_HTML_ENABLED) + int mem_base; + htmlStatus ret_val; + htmlElemDesc * parent; /* HTML parent element */ + int n_parent; + htmlElemDesc * elt; /* HTML element */ + int n_elt; + + for (n_parent = 0;n_parent < gen_nb_const_htmlElemDesc_ptr;n_parent++) { + for (n_elt = 0;n_elt < gen_nb_const_htmlElemDesc_ptr;n_elt++) { + mem_base = xmlMemBlocks(); + parent = gen_const_htmlElemDesc_ptr(n_parent, 0); + elt = gen_const_htmlElemDesc_ptr(n_elt, 1); + + ret_val = htmlElementStatusHere((const htmlElemDesc *)parent, (const htmlElemDesc *)elt); + desret_htmlStatus(ret_val); + call_tests++; + des_const_htmlElemDesc_ptr(n_parent, (const htmlElemDesc *)parent, 0); + des_const_htmlElemDesc_ptr(n_elt, (const htmlElemDesc *)elt, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in htmlElementStatusHere", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_parent); + printf(" %d", n_elt); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_htmlEncodeEntities(void) { + int test_ret = 0; + +#if defined(LIBXML_HTML_ENABLED) + int mem_base; + int ret_val; + unsigned char * out; /* a pointer to an array of bytes to store the result */ + int n_out; + int * outlen; /* the length of @out */ + int n_outlen; + unsigned char * in; /* a pointer to an array of UTF-8 chars */ + int n_in; + int * inlen; /* the length of @in */ + int n_inlen; + int quoteChar; /* the quote character to escape (' or ") or zero. */ + int n_quoteChar; + + for (n_out = 0;n_out < gen_nb_unsigned_char_ptr;n_out++) { + for (n_outlen = 0;n_outlen < gen_nb_int_ptr;n_outlen++) { + for (n_in = 0;n_in < gen_nb_const_unsigned_char_ptr;n_in++) { + for (n_inlen = 0;n_inlen < gen_nb_int_ptr;n_inlen++) { + for (n_quoteChar = 0;n_quoteChar < gen_nb_int;n_quoteChar++) { + mem_base = xmlMemBlocks(); + out = gen_unsigned_char_ptr(n_out, 0); + outlen = gen_int_ptr(n_outlen, 1); + in = gen_const_unsigned_char_ptr(n_in, 2); + inlen = gen_int_ptr(n_inlen, 3); + quoteChar = gen_int(n_quoteChar, 4); + + ret_val = htmlEncodeEntities(out, outlen, (const unsigned char *)in, inlen, quoteChar); + desret_int(ret_val); + call_tests++; + des_unsigned_char_ptr(n_out, out, 0); + des_int_ptr(n_outlen, outlen, 1); + des_const_unsigned_char_ptr(n_in, (const unsigned char *)in, 2); + des_int_ptr(n_inlen, inlen, 3); + des_int(n_quoteChar, quoteChar, 4); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in htmlEncodeEntities", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_out); + printf(" %d", n_outlen); + printf(" %d", n_in); + printf(" %d", n_inlen); + printf(" %d", n_quoteChar); + printf("\n"); + } + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_htmlEntityLookup(void) { + int test_ret = 0; + +#if defined(LIBXML_HTML_ENABLED) + int mem_base; + const htmlEntityDesc * ret_val; + xmlChar * name; /* the entity name */ + int n_name; + + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + mem_base = xmlMemBlocks(); + name = gen_const_xmlChar_ptr(n_name, 0); + + ret_val = htmlEntityLookup((const xmlChar *)name); + desret_const_htmlEntityDesc_ptr(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in htmlEntityLookup", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_name); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_htmlEntityValueLookup(void) { + int test_ret = 0; + +#if defined(LIBXML_HTML_ENABLED) + int mem_base; + const htmlEntityDesc * ret_val; + unsigned int value; /* the entity's unicode value */ + int n_value; + + for (n_value = 0;n_value < gen_nb_unsigned_int;n_value++) { + mem_base = xmlMemBlocks(); + value = gen_unsigned_int(n_value, 0); + + ret_val = htmlEntityValueLookup(value); + desret_const_htmlEntityDesc_ptr(ret_val); + call_tests++; + des_unsigned_int(n_value, value, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in htmlEntityValueLookup", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_value); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_htmlHandleOmittedElem(void) { + int test_ret = 0; + +#if defined(LIBXML_HTML_ENABLED) + int mem_base; + int ret_val; + int val; /* int 0 or 1 */ + int n_val; + + for (n_val = 0;n_val < gen_nb_int;n_val++) { + mem_base = xmlMemBlocks(); + val = gen_int(n_val, 0); + + ret_val = htmlHandleOmittedElem(val); + desret_int(ret_val); + call_tests++; + des_int(n_val, val, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in htmlHandleOmittedElem", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_val); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_htmlIsAutoClosed(void) { + int test_ret = 0; + +#if defined(LIBXML_HTML_ENABLED) + int mem_base; + int ret_val; + htmlDocPtr doc; /* the HTML document */ + int n_doc; + htmlNodePtr elem; /* the HTML element */ + int n_elem; + + for (n_doc = 0;n_doc < gen_nb_htmlDocPtr;n_doc++) { + for (n_elem = 0;n_elem < gen_nb_htmlNodePtr;n_elem++) { + mem_base = xmlMemBlocks(); + doc = gen_htmlDocPtr(n_doc, 0); + elem = gen_htmlNodePtr(n_elem, 1); + + ret_val = htmlIsAutoClosed(doc, elem); + desret_int(ret_val); + call_tests++; + des_htmlDocPtr(n_doc, doc, 0); + des_htmlNodePtr(n_elem, elem, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in htmlIsAutoClosed", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf(" %d", n_elem); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_htmlIsScriptAttribute(void) { + int test_ret = 0; + +#if defined(LIBXML_HTML_ENABLED) + int mem_base; + int ret_val; + xmlChar * name; /* an attribute name */ + int n_name; + + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + mem_base = xmlMemBlocks(); + name = gen_const_xmlChar_ptr(n_name, 0); + + ret_val = htmlIsScriptAttribute((const xmlChar *)name); + desret_int(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in htmlIsScriptAttribute", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_name); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_htmlNewParserCtxt(void) { + int test_ret = 0; + +#if defined(LIBXML_HTML_ENABLED) + int mem_base; + htmlParserCtxtPtr ret_val; + + mem_base = xmlMemBlocks(); + + ret_val = htmlNewParserCtxt(); + desret_htmlParserCtxtPtr(ret_val); + call_tests++; + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in htmlNewParserCtxt", + xmlMemBlocks() - mem_base); + test_ret++; + printf("\n"); + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_htmlNodeStatus(void) { + int test_ret = 0; + +#if defined(LIBXML_HTML_ENABLED) + int mem_base; + htmlStatus ret_val; + htmlNodePtr node; /* an htmlNodePtr in a tree */ + int n_node; + int legacy; /* whether to allow deprecated elements (YES is faster here for Element nodes) */ + int n_legacy; + + for (n_node = 0;n_node < gen_nb_const_htmlNodePtr;n_node++) { + for (n_legacy = 0;n_legacy < gen_nb_int;n_legacy++) { + mem_base = xmlMemBlocks(); + node = gen_const_htmlNodePtr(n_node, 0); + legacy = gen_int(n_legacy, 1); + + ret_val = htmlNodeStatus((const htmlNodePtr)node, legacy); + desret_htmlStatus(ret_val); + call_tests++; + des_const_htmlNodePtr(n_node, (const htmlNodePtr)node, 0); + des_int(n_legacy, legacy, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in htmlNodeStatus", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_node); + printf(" %d", n_legacy); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_htmlParseCharRef(void) { + int test_ret = 0; + +#if defined(LIBXML_HTML_ENABLED) + int mem_base; + int ret_val; + htmlParserCtxtPtr ctxt; /* an HTML parser context */ + int n_ctxt; + + for (n_ctxt = 0;n_ctxt < gen_nb_htmlParserCtxtPtr;n_ctxt++) { + mem_base = xmlMemBlocks(); + ctxt = gen_htmlParserCtxtPtr(n_ctxt, 0); + + ret_val = htmlParseCharRef(ctxt); + desret_int(ret_val); + call_tests++; + des_htmlParserCtxtPtr(n_ctxt, ctxt, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in htmlParseCharRef", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_htmlParseChunk(void) { + int test_ret = 0; + +#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_PUSH_ENABLED) + int mem_base; + int ret_val; + htmlParserCtxtPtr ctxt; /* an HTML parser context */ + int n_ctxt; + char * chunk; /* an char array */ + int n_chunk; + int size; /* the size in byte of the chunk */ + int n_size; + int terminate; /* last chunk indicator */ + int n_terminate; + + for (n_ctxt = 0;n_ctxt < gen_nb_htmlParserCtxtPtr;n_ctxt++) { + for (n_chunk = 0;n_chunk < gen_nb_const_char_ptr;n_chunk++) { + for (n_size = 0;n_size < gen_nb_int;n_size++) { + for (n_terminate = 0;n_terminate < gen_nb_int;n_terminate++) { + mem_base = xmlMemBlocks(); + ctxt = gen_htmlParserCtxtPtr(n_ctxt, 0); + chunk = gen_const_char_ptr(n_chunk, 1); + size = gen_int(n_size, 2); + terminate = gen_int(n_terminate, 3); + + ret_val = htmlParseChunk(ctxt, (const char *)chunk, size, terminate); + if (ctxt != NULL) {xmlFreeDoc(ctxt->myDoc); ctxt->myDoc = NULL;} + desret_int(ret_val); + call_tests++; + des_htmlParserCtxtPtr(n_ctxt, ctxt, 0); + des_const_char_ptr(n_chunk, (const char *)chunk, 1); + des_int(n_size, size, 2); + des_int(n_terminate, terminate, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in htmlParseChunk", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_chunk); + printf(" %d", n_size); + printf(" %d", n_terminate); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_htmlParseDoc(void) { + int test_ret = 0; + +#if defined(LIBXML_HTML_ENABLED) + int mem_base; + htmlDocPtr ret_val; + xmlChar * cur; /* a pointer to an array of xmlChar */ + int n_cur; + char * encoding; /* a free form C string describing the HTML document encoding, or NULL */ + int n_encoding; + + for (n_cur = 0;n_cur < gen_nb_xmlChar_ptr;n_cur++) { + for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) { + mem_base = xmlMemBlocks(); + cur = gen_xmlChar_ptr(n_cur, 0); + encoding = gen_const_char_ptr(n_encoding, 1); + + ret_val = htmlParseDoc(cur, (const char *)encoding); + desret_htmlDocPtr(ret_val); + call_tests++; + des_xmlChar_ptr(n_cur, cur, 0); + des_const_char_ptr(n_encoding, (const char *)encoding, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in htmlParseDoc", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_cur); + printf(" %d", n_encoding); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_htmlParseDocument(void) { + int test_ret = 0; + +#if defined(LIBXML_HTML_ENABLED) + int mem_base; + int ret_val; + htmlParserCtxtPtr ctxt; /* an HTML parser context */ + int n_ctxt; + + for (n_ctxt = 0;n_ctxt < gen_nb_htmlParserCtxtPtr;n_ctxt++) { + mem_base = xmlMemBlocks(); + ctxt = gen_htmlParserCtxtPtr(n_ctxt, 0); + + ret_val = htmlParseDocument(ctxt); + if (ctxt != NULL) {xmlFreeDoc(ctxt->myDoc); ctxt->myDoc = NULL;} + desret_int(ret_val); + call_tests++; + des_htmlParserCtxtPtr(n_ctxt, ctxt, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in htmlParseDocument", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_htmlParseElement(void) { + int test_ret = 0; + +#if defined(LIBXML_HTML_ENABLED) + int mem_base; + htmlParserCtxtPtr ctxt; /* an HTML parser context */ + int n_ctxt; + + for (n_ctxt = 0;n_ctxt < gen_nb_htmlParserCtxtPtr;n_ctxt++) { + mem_base = xmlMemBlocks(); + ctxt = gen_htmlParserCtxtPtr(n_ctxt, 0); + + htmlParseElement(ctxt); + call_tests++; + des_htmlParserCtxtPtr(n_ctxt, ctxt, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in htmlParseElement", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_htmlParseEntityRef(void) { + int test_ret = 0; + +#if defined(LIBXML_HTML_ENABLED) + int mem_base; + const htmlEntityDesc * ret_val; + htmlParserCtxtPtr ctxt; /* an HTML parser context */ + int n_ctxt; + xmlChar ** str; /* location to store the entity name */ + int n_str; + + for (n_ctxt = 0;n_ctxt < gen_nb_htmlParserCtxtPtr;n_ctxt++) { + for (n_str = 0;n_str < gen_nb_const_xmlChar_ptr_ptr;n_str++) { + mem_base = xmlMemBlocks(); + ctxt = gen_htmlParserCtxtPtr(n_ctxt, 0); + str = gen_const_xmlChar_ptr_ptr(n_str, 1); + + ret_val = htmlParseEntityRef(ctxt, (const xmlChar **)str); + desret_const_htmlEntityDesc_ptr(ret_val); + call_tests++; + des_htmlParserCtxtPtr(n_ctxt, ctxt, 0); + des_const_xmlChar_ptr_ptr(n_str, (const xmlChar **)str, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in htmlParseEntityRef", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_str); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_htmlParseFile(void) { + int test_ret = 0; + +#if defined(LIBXML_HTML_ENABLED) + htmlDocPtr ret_val; + const char * filename; /* the filename */ + int n_filename; + char * encoding; /* a free form C string describing the HTML document encoding, or NULL */ + int n_encoding; + + for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) { + for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) { + filename = gen_filepath(n_filename, 0); + encoding = gen_const_char_ptr(n_encoding, 1); + + ret_val = htmlParseFile(filename, (const char *)encoding); + desret_htmlDocPtr(ret_val); + call_tests++; + des_filepath(n_filename, filename, 0); + des_const_char_ptr(n_encoding, (const char *)encoding, 1); + xmlResetLastError(); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_htmlReadDoc(void) { + int test_ret = 0; + +#if defined(LIBXML_HTML_ENABLED) + int mem_base; + htmlDocPtr ret_val; + xmlChar * cur; /* a pointer to a zero terminated string */ + int n_cur; + const char * URL; /* the base URL to use for the document */ + int n_URL; + char * encoding; /* the document encoding, or NULL */ + int n_encoding; + int options; /* a combination of htmlParserOption(s) */ + int n_options; + + for (n_cur = 0;n_cur < gen_nb_const_xmlChar_ptr;n_cur++) { + for (n_URL = 0;n_URL < gen_nb_filepath;n_URL++) { + for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) { + for (n_options = 0;n_options < gen_nb_int;n_options++) { + mem_base = xmlMemBlocks(); + cur = gen_const_xmlChar_ptr(n_cur, 0); + URL = gen_filepath(n_URL, 1); + encoding = gen_const_char_ptr(n_encoding, 2); + options = gen_int(n_options, 3); + + ret_val = htmlReadDoc((const xmlChar *)cur, URL, (const char *)encoding, options); + desret_htmlDocPtr(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_cur, (const xmlChar *)cur, 0); + des_filepath(n_URL, URL, 1); + des_const_char_ptr(n_encoding, (const char *)encoding, 2); + des_int(n_options, options, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in htmlReadDoc", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_cur); + printf(" %d", n_URL); + printf(" %d", n_encoding); + printf(" %d", n_options); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_htmlReadFile(void) { + int test_ret = 0; + +#if defined(LIBXML_HTML_ENABLED) + int mem_base; + htmlDocPtr ret_val; + const char * filename; /* a file or URL */ + int n_filename; + char * encoding; /* the document encoding, or NULL */ + int n_encoding; + int options; /* a combination of htmlParserOption(s) */ + int n_options; + + for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) { + for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) { + for (n_options = 0;n_options < gen_nb_int;n_options++) { + mem_base = xmlMemBlocks(); + filename = gen_filepath(n_filename, 0); + encoding = gen_const_char_ptr(n_encoding, 1); + options = gen_int(n_options, 2); + + ret_val = htmlReadFile(filename, (const char *)encoding, options); + desret_htmlDocPtr(ret_val); + call_tests++; + des_filepath(n_filename, filename, 0); + des_const_char_ptr(n_encoding, (const char *)encoding, 1); + des_int(n_options, options, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in htmlReadFile", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_filename); + printf(" %d", n_encoding); + printf(" %d", n_options); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_htmlReadMemory(void) { + int test_ret = 0; + +#if defined(LIBXML_HTML_ENABLED) + int mem_base; + htmlDocPtr ret_val; + char * buffer; /* a pointer to a char array */ + int n_buffer; + int size; /* the size of the array */ + int n_size; + const char * URL; /* the base URL to use for the document */ + int n_URL; + char * encoding; /* the document encoding, or NULL */ + int n_encoding; + int options; /* a combination of htmlParserOption(s) */ + int n_options; + + for (n_buffer = 0;n_buffer < gen_nb_const_char_ptr;n_buffer++) { + for (n_size = 0;n_size < gen_nb_int;n_size++) { + for (n_URL = 0;n_URL < gen_nb_filepath;n_URL++) { + for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) { + for (n_options = 0;n_options < gen_nb_int;n_options++) { + mem_base = xmlMemBlocks(); + buffer = gen_const_char_ptr(n_buffer, 0); + size = gen_int(n_size, 1); + URL = gen_filepath(n_URL, 2); + encoding = gen_const_char_ptr(n_encoding, 3); + options = gen_int(n_options, 4); + + ret_val = htmlReadMemory((const char *)buffer, size, URL, (const char *)encoding, options); + desret_htmlDocPtr(ret_val); + call_tests++; + des_const_char_ptr(n_buffer, (const char *)buffer, 0); + des_int(n_size, size, 1); + des_filepath(n_URL, URL, 2); + des_const_char_ptr(n_encoding, (const char *)encoding, 3); + des_int(n_options, options, 4); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in htmlReadMemory", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_buffer); + printf(" %d", n_size); + printf(" %d", n_URL); + printf(" %d", n_encoding); + printf(" %d", n_options); + printf("\n"); + } + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_htmlSAXParseDoc(void) { + int test_ret = 0; + +#if defined(LIBXML_HTML_ENABLED) + int mem_base; + htmlDocPtr ret_val; + xmlChar * cur; /* a pointer to an array of xmlChar */ + int n_cur; + char * encoding; /* a free form C string describing the HTML document encoding, or NULL */ + int n_encoding; + htmlSAXHandlerPtr sax; /* the SAX handler block */ + int n_sax; + void * userData; /* if using SAX, this pointer will be provided on callbacks. */ + int n_userData; + + for (n_cur = 0;n_cur < gen_nb_xmlChar_ptr;n_cur++) { + for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) { + for (n_sax = 0;n_sax < gen_nb_htmlSAXHandlerPtr;n_sax++) { + for (n_userData = 0;n_userData < gen_nb_userdata;n_userData++) { + mem_base = xmlMemBlocks(); + cur = gen_xmlChar_ptr(n_cur, 0); + encoding = gen_const_char_ptr(n_encoding, 1); + sax = gen_htmlSAXHandlerPtr(n_sax, 2); + userData = gen_userdata(n_userData, 3); + + ret_val = htmlSAXParseDoc(cur, (const char *)encoding, sax, userData); + desret_htmlDocPtr(ret_val); + call_tests++; + des_xmlChar_ptr(n_cur, cur, 0); + des_const_char_ptr(n_encoding, (const char *)encoding, 1); + des_htmlSAXHandlerPtr(n_sax, sax, 2); + des_userdata(n_userData, userData, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in htmlSAXParseDoc", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_cur); + printf(" %d", n_encoding); + printf(" %d", n_sax); + printf(" %d", n_userData); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_htmlSAXParseFile(void) { + int test_ret = 0; + +#if defined(LIBXML_HTML_ENABLED) + int mem_base; + htmlDocPtr ret_val; + const char * filename; /* the filename */ + int n_filename; + char * encoding; /* a free form C string describing the HTML document encoding, or NULL */ + int n_encoding; + htmlSAXHandlerPtr sax; /* the SAX handler block */ + int n_sax; + void * userData; /* if using SAX, this pointer will be provided on callbacks. */ + int n_userData; + + for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) { + for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) { + for (n_sax = 0;n_sax < gen_nb_htmlSAXHandlerPtr;n_sax++) { + for (n_userData = 0;n_userData < gen_nb_userdata;n_userData++) { + mem_base = xmlMemBlocks(); + filename = gen_filepath(n_filename, 0); + encoding = gen_const_char_ptr(n_encoding, 1); + sax = gen_htmlSAXHandlerPtr(n_sax, 2); + userData = gen_userdata(n_userData, 3); + + ret_val = htmlSAXParseFile(filename, (const char *)encoding, sax, userData); + desret_htmlDocPtr(ret_val); + call_tests++; + des_filepath(n_filename, filename, 0); + des_const_char_ptr(n_encoding, (const char *)encoding, 1); + des_htmlSAXHandlerPtr(n_sax, sax, 2); + des_userdata(n_userData, userData, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in htmlSAXParseFile", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_filename); + printf(" %d", n_encoding); + printf(" %d", n_sax); + printf(" %d", n_userData); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_htmlTagLookup(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + +static int +test_HTMLparser(void) { + int test_ret = 0; + + if (quiet == 0) printf("Testing HTMLparser : 32 of 38 functions ...\n"); + test_ret += test_UTF8ToHtml(); + test_ret += test_htmlAttrAllowed(); + test_ret += test_htmlAutoCloseTag(); + test_ret += test_htmlCreateMemoryParserCtxt(); + test_ret += test_htmlCreatePushParserCtxt(); + test_ret += test_htmlCtxtReadDoc(); + test_ret += test_htmlCtxtReadFile(); + test_ret += test_htmlCtxtReadMemory(); + test_ret += test_htmlCtxtReset(); + test_ret += test_htmlCtxtUseOptions(); + test_ret += test_htmlElementAllowedHere(); + test_ret += test_htmlElementStatusHere(); + test_ret += test_htmlEncodeEntities(); + test_ret += test_htmlEntityLookup(); + test_ret += test_htmlEntityValueLookup(); + test_ret += test_htmlHandleOmittedElem(); + test_ret += test_htmlIsAutoClosed(); + test_ret += test_htmlIsScriptAttribute(); + test_ret += test_htmlNewParserCtxt(); + test_ret += test_htmlNodeStatus(); + test_ret += test_htmlParseCharRef(); + test_ret += test_htmlParseChunk(); + test_ret += test_htmlParseDoc(); + test_ret += test_htmlParseDocument(); + test_ret += test_htmlParseElement(); + test_ret += test_htmlParseEntityRef(); + test_ret += test_htmlParseFile(); + test_ret += test_htmlReadDoc(); + test_ret += test_htmlReadFile(); + test_ret += test_htmlReadMemory(); + test_ret += test_htmlSAXParseDoc(); + test_ret += test_htmlSAXParseFile(); + test_ret += test_htmlTagLookup(); + + if (test_ret != 0) + printf("Module HTMLparser: %d errors\n", test_ret); + return(test_ret); +} + +static int +test_htmlDocContentDumpFormatOutput(void) { + int test_ret = 0; + +#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + xmlOutputBufferPtr buf; /* the HTML buffer output */ + int n_buf; + xmlDocPtr cur; /* the document */ + int n_cur; + char * encoding; /* the encoding string */ + int n_encoding; + int format; /* should formatting spaces been added */ + int n_format; + + for (n_buf = 0;n_buf < gen_nb_xmlOutputBufferPtr;n_buf++) { + for (n_cur = 0;n_cur < gen_nb_xmlDocPtr;n_cur++) { + for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) { + for (n_format = 0;n_format < gen_nb_int;n_format++) { + mem_base = xmlMemBlocks(); + buf = gen_xmlOutputBufferPtr(n_buf, 0); + cur = gen_xmlDocPtr(n_cur, 1); + encoding = gen_const_char_ptr(n_encoding, 2); + format = gen_int(n_format, 3); + + htmlDocContentDumpFormatOutput(buf, cur, (const char *)encoding, format); + call_tests++; + des_xmlOutputBufferPtr(n_buf, buf, 0); + des_xmlDocPtr(n_cur, cur, 1); + des_const_char_ptr(n_encoding, (const char *)encoding, 2); + des_int(n_format, format, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in htmlDocContentDumpFormatOutput", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_buf); + printf(" %d", n_cur); + printf(" %d", n_encoding); + printf(" %d", n_format); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_htmlDocContentDumpOutput(void) { + int test_ret = 0; + +#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + xmlOutputBufferPtr buf; /* the HTML buffer output */ + int n_buf; + xmlDocPtr cur; /* the document */ + int n_cur; + char * encoding; /* the encoding string */ + int n_encoding; + + for (n_buf = 0;n_buf < gen_nb_xmlOutputBufferPtr;n_buf++) { + for (n_cur = 0;n_cur < gen_nb_xmlDocPtr;n_cur++) { + for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) { + mem_base = xmlMemBlocks(); + buf = gen_xmlOutputBufferPtr(n_buf, 0); + cur = gen_xmlDocPtr(n_cur, 1); + encoding = gen_const_char_ptr(n_encoding, 2); + + htmlDocContentDumpOutput(buf, cur, (const char *)encoding); + call_tests++; + des_xmlOutputBufferPtr(n_buf, buf, 0); + des_xmlDocPtr(n_cur, cur, 1); + des_const_char_ptr(n_encoding, (const char *)encoding, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in htmlDocContentDumpOutput", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_buf); + printf(" %d", n_cur); + printf(" %d", n_encoding); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_htmlDocDump(void) { + int test_ret = 0; + +#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + int ret_val; + FILE * f; /* the FILE* */ + int n_f; + xmlDocPtr cur; /* the document */ + int n_cur; + + for (n_f = 0;n_f < gen_nb_FILE_ptr;n_f++) { + for (n_cur = 0;n_cur < gen_nb_xmlDocPtr;n_cur++) { + mem_base = xmlMemBlocks(); + f = gen_FILE_ptr(n_f, 0); + cur = gen_xmlDocPtr(n_cur, 1); + + ret_val = htmlDocDump(f, cur); + desret_int(ret_val); + call_tests++; + des_FILE_ptr(n_f, f, 0); + des_xmlDocPtr(n_cur, cur, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in htmlDocDump", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_f); + printf(" %d", n_cur); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +#define gen_nb_xmlChar_ptr_ptr 1 +static xmlChar ** gen_xmlChar_ptr_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlChar_ptr_ptr(int no ATTRIBUTE_UNUSED, xmlChar ** val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +static int +test_htmlDocDumpMemory(void) { + int test_ret = 0; + +#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + xmlDocPtr cur; /* the document */ + int n_cur; + xmlChar ** mem; /* OUT: the memory pointer */ + int n_mem; + int * size; /* OUT: the memory length */ + int n_size; + + for (n_cur = 0;n_cur < gen_nb_xmlDocPtr;n_cur++) { + for (n_mem = 0;n_mem < gen_nb_xmlChar_ptr_ptr;n_mem++) { + for (n_size = 0;n_size < gen_nb_int_ptr;n_size++) { + mem_base = xmlMemBlocks(); + cur = gen_xmlDocPtr(n_cur, 0); + mem = gen_xmlChar_ptr_ptr(n_mem, 1); + size = gen_int_ptr(n_size, 2); + + htmlDocDumpMemory(cur, mem, size); + call_tests++; + des_xmlDocPtr(n_cur, cur, 0); + des_xmlChar_ptr_ptr(n_mem, mem, 1); + des_int_ptr(n_size, size, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in htmlDocDumpMemory", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_cur); + printf(" %d", n_mem); + printf(" %d", n_size); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_htmlDocDumpMemoryFormat(void) { + int test_ret = 0; + +#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + xmlDocPtr cur; /* the document */ + int n_cur; + xmlChar ** mem; /* OUT: the memory pointer */ + int n_mem; + int * size; /* OUT: the memory length */ + int n_size; + int format; /* should formatting spaces been added */ + int n_format; + + for (n_cur = 0;n_cur < gen_nb_xmlDocPtr;n_cur++) { + for (n_mem = 0;n_mem < gen_nb_xmlChar_ptr_ptr;n_mem++) { + for (n_size = 0;n_size < gen_nb_int_ptr;n_size++) { + for (n_format = 0;n_format < gen_nb_int;n_format++) { + mem_base = xmlMemBlocks(); + cur = gen_xmlDocPtr(n_cur, 0); + mem = gen_xmlChar_ptr_ptr(n_mem, 1); + size = gen_int_ptr(n_size, 2); + format = gen_int(n_format, 3); + + htmlDocDumpMemoryFormat(cur, mem, size, format); + call_tests++; + des_xmlDocPtr(n_cur, cur, 0); + des_xmlChar_ptr_ptr(n_mem, mem, 1); + des_int_ptr(n_size, size, 2); + des_int(n_format, format, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in htmlDocDumpMemoryFormat", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_cur); + printf(" %d", n_mem); + printf(" %d", n_size); + printf(" %d", n_format); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_htmlGetMetaEncoding(void) { + int test_ret = 0; + +#if defined(LIBXML_HTML_ENABLED) + int mem_base; + const xmlChar * ret_val; + htmlDocPtr doc; /* the document */ + int n_doc; + + for (n_doc = 0;n_doc < gen_nb_htmlDocPtr;n_doc++) { + mem_base = xmlMemBlocks(); + doc = gen_htmlDocPtr(n_doc, 0); + + ret_val = htmlGetMetaEncoding(doc); + desret_const_xmlChar_ptr(ret_val); + call_tests++; + des_htmlDocPtr(n_doc, doc, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in htmlGetMetaEncoding", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_htmlIsBooleanAttr(void) { + int test_ret = 0; + +#if defined(LIBXML_HTML_ENABLED) + int mem_base; + int ret_val; + xmlChar * name; /* the name of the attribute to check */ + int n_name; + + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + mem_base = xmlMemBlocks(); + name = gen_const_xmlChar_ptr(n_name, 0); + + ret_val = htmlIsBooleanAttr((const xmlChar *)name); + desret_int(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in htmlIsBooleanAttr", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_name); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_htmlNewDoc(void) { + int test_ret = 0; + +#if defined(LIBXML_HTML_ENABLED) + int mem_base; + htmlDocPtr ret_val; + xmlChar * URI; /* URI for the dtd, or NULL */ + int n_URI; + xmlChar * ExternalID; /* the external ID of the DTD, or NULL */ + int n_ExternalID; + + for (n_URI = 0;n_URI < gen_nb_const_xmlChar_ptr;n_URI++) { + for (n_ExternalID = 0;n_ExternalID < gen_nb_const_xmlChar_ptr;n_ExternalID++) { + mem_base = xmlMemBlocks(); + URI = gen_const_xmlChar_ptr(n_URI, 0); + ExternalID = gen_const_xmlChar_ptr(n_ExternalID, 1); + + ret_val = htmlNewDoc((const xmlChar *)URI, (const xmlChar *)ExternalID); + desret_htmlDocPtr(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_URI, (const xmlChar *)URI, 0); + des_const_xmlChar_ptr(n_ExternalID, (const xmlChar *)ExternalID, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in htmlNewDoc", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_URI); + printf(" %d", n_ExternalID); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_htmlNewDocNoDtD(void) { + int test_ret = 0; + +#if defined(LIBXML_HTML_ENABLED) + int mem_base; + htmlDocPtr ret_val; + xmlChar * URI; /* URI for the dtd, or NULL */ + int n_URI; + xmlChar * ExternalID; /* the external ID of the DTD, or NULL */ + int n_ExternalID; + + for (n_URI = 0;n_URI < gen_nb_const_xmlChar_ptr;n_URI++) { + for (n_ExternalID = 0;n_ExternalID < gen_nb_const_xmlChar_ptr;n_ExternalID++) { + mem_base = xmlMemBlocks(); + URI = gen_const_xmlChar_ptr(n_URI, 0); + ExternalID = gen_const_xmlChar_ptr(n_ExternalID, 1); + + ret_val = htmlNewDocNoDtD((const xmlChar *)URI, (const xmlChar *)ExternalID); + desret_htmlDocPtr(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_URI, (const xmlChar *)URI, 0); + des_const_xmlChar_ptr(n_ExternalID, (const xmlChar *)ExternalID, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in htmlNewDocNoDtD", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_URI); + printf(" %d", n_ExternalID); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_htmlNodeDump(void) { + int test_ret = 0; + +#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + int ret_val; + xmlBufferPtr buf; /* the HTML buffer output */ + int n_buf; + xmlDocPtr doc; /* the document */ + int n_doc; + xmlNodePtr cur; /* the current node */ + int n_cur; + + for (n_buf = 0;n_buf < gen_nb_xmlBufferPtr;n_buf++) { + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) { + mem_base = xmlMemBlocks(); + buf = gen_xmlBufferPtr(n_buf, 0); + doc = gen_xmlDocPtr(n_doc, 1); + cur = gen_xmlNodePtr(n_cur, 2); + + ret_val = htmlNodeDump(buf, doc, cur); + desret_int(ret_val); + call_tests++; + des_xmlBufferPtr(n_buf, buf, 0); + des_xmlDocPtr(n_doc, doc, 1); + des_xmlNodePtr(n_cur, cur, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in htmlNodeDump", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_buf); + printf(" %d", n_doc); + printf(" %d", n_cur); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_htmlNodeDumpFile(void) { + int test_ret = 0; + +#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + FILE * out; /* the FILE pointer */ + int n_out; + xmlDocPtr doc; /* the document */ + int n_doc; + xmlNodePtr cur; /* the current node */ + int n_cur; + + for (n_out = 0;n_out < gen_nb_FILE_ptr;n_out++) { + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) { + mem_base = xmlMemBlocks(); + out = gen_FILE_ptr(n_out, 0); + doc = gen_xmlDocPtr(n_doc, 1); + cur = gen_xmlNodePtr(n_cur, 2); + + htmlNodeDumpFile(out, doc, cur); + call_tests++; + des_FILE_ptr(n_out, out, 0); + des_xmlDocPtr(n_doc, doc, 1); + des_xmlNodePtr(n_cur, cur, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in htmlNodeDumpFile", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_out); + printf(" %d", n_doc); + printf(" %d", n_cur); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_htmlNodeDumpFileFormat(void) { + int test_ret = 0; + +#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + int ret_val; + FILE * out; /* the FILE pointer */ + int n_out; + xmlDocPtr doc; /* the document */ + int n_doc; + xmlNodePtr cur; /* the current node */ + int n_cur; + char * encoding; /* the document encoding */ + int n_encoding; + int format; /* should formatting spaces been added */ + int n_format; + + for (n_out = 0;n_out < gen_nb_FILE_ptr;n_out++) { + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) { + for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) { + for (n_format = 0;n_format < gen_nb_int;n_format++) { + mem_base = xmlMemBlocks(); + out = gen_FILE_ptr(n_out, 0); + doc = gen_xmlDocPtr(n_doc, 1); + cur = gen_xmlNodePtr(n_cur, 2); + encoding = gen_const_char_ptr(n_encoding, 3); + format = gen_int(n_format, 4); + + ret_val = htmlNodeDumpFileFormat(out, doc, cur, (const char *)encoding, format); + desret_int(ret_val); + call_tests++; + des_FILE_ptr(n_out, out, 0); + des_xmlDocPtr(n_doc, doc, 1); + des_xmlNodePtr(n_cur, cur, 2); + des_const_char_ptr(n_encoding, (const char *)encoding, 3); + des_int(n_format, format, 4); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in htmlNodeDumpFileFormat", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_out); + printf(" %d", n_doc); + printf(" %d", n_cur); + printf(" %d", n_encoding); + printf(" %d", n_format); + printf("\n"); + } + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_htmlNodeDumpFormatOutput(void) { + int test_ret = 0; + +#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + xmlOutputBufferPtr buf; /* the HTML buffer output */ + int n_buf; + xmlDocPtr doc; /* the document */ + int n_doc; + xmlNodePtr cur; /* the current node */ + int n_cur; + char * encoding; /* the encoding string */ + int n_encoding; + int format; /* should formatting spaces been added */ + int n_format; + + for (n_buf = 0;n_buf < gen_nb_xmlOutputBufferPtr;n_buf++) { + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) { + for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) { + for (n_format = 0;n_format < gen_nb_int;n_format++) { + mem_base = xmlMemBlocks(); + buf = gen_xmlOutputBufferPtr(n_buf, 0); + doc = gen_xmlDocPtr(n_doc, 1); + cur = gen_xmlNodePtr(n_cur, 2); + encoding = gen_const_char_ptr(n_encoding, 3); + format = gen_int(n_format, 4); + + htmlNodeDumpFormatOutput(buf, doc, cur, (const char *)encoding, format); + call_tests++; + des_xmlOutputBufferPtr(n_buf, buf, 0); + des_xmlDocPtr(n_doc, doc, 1); + des_xmlNodePtr(n_cur, cur, 2); + des_const_char_ptr(n_encoding, (const char *)encoding, 3); + des_int(n_format, format, 4); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in htmlNodeDumpFormatOutput", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_buf); + printf(" %d", n_doc); + printf(" %d", n_cur); + printf(" %d", n_encoding); + printf(" %d", n_format); + printf("\n"); + } + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_htmlNodeDumpOutput(void) { + int test_ret = 0; + +#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + xmlOutputBufferPtr buf; /* the HTML buffer output */ + int n_buf; + xmlDocPtr doc; /* the document */ + int n_doc; + xmlNodePtr cur; /* the current node */ + int n_cur; + char * encoding; /* the encoding string */ + int n_encoding; + + for (n_buf = 0;n_buf < gen_nb_xmlOutputBufferPtr;n_buf++) { + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) { + for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) { + mem_base = xmlMemBlocks(); + buf = gen_xmlOutputBufferPtr(n_buf, 0); + doc = gen_xmlDocPtr(n_doc, 1); + cur = gen_xmlNodePtr(n_cur, 2); + encoding = gen_const_char_ptr(n_encoding, 3); + + htmlNodeDumpOutput(buf, doc, cur, (const char *)encoding); + call_tests++; + des_xmlOutputBufferPtr(n_buf, buf, 0); + des_xmlDocPtr(n_doc, doc, 1); + des_xmlNodePtr(n_cur, cur, 2); + des_const_char_ptr(n_encoding, (const char *)encoding, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in htmlNodeDumpOutput", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_buf); + printf(" %d", n_doc); + printf(" %d", n_cur); + printf(" %d", n_encoding); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_htmlSaveFile(void) { + int test_ret = 0; + +#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + int ret_val; + const char * filename; /* the filename (or URL) */ + int n_filename; + xmlDocPtr cur; /* the document */ + int n_cur; + + for (n_filename = 0;n_filename < gen_nb_fileoutput;n_filename++) { + for (n_cur = 0;n_cur < gen_nb_xmlDocPtr;n_cur++) { + mem_base = xmlMemBlocks(); + filename = gen_fileoutput(n_filename, 0); + cur = gen_xmlDocPtr(n_cur, 1); + + ret_val = htmlSaveFile(filename, cur); + desret_int(ret_val); + call_tests++; + des_fileoutput(n_filename, filename, 0); + des_xmlDocPtr(n_cur, cur, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in htmlSaveFile", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_filename); + printf(" %d", n_cur); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_htmlSaveFileEnc(void) { + int test_ret = 0; + +#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + int ret_val; + const char * filename; /* the filename */ + int n_filename; + xmlDocPtr cur; /* the document */ + int n_cur; + char * encoding; /* the document encoding */ + int n_encoding; + + for (n_filename = 0;n_filename < gen_nb_fileoutput;n_filename++) { + for (n_cur = 0;n_cur < gen_nb_xmlDocPtr;n_cur++) { + for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) { + mem_base = xmlMemBlocks(); + filename = gen_fileoutput(n_filename, 0); + cur = gen_xmlDocPtr(n_cur, 1); + encoding = gen_const_char_ptr(n_encoding, 2); + + ret_val = htmlSaveFileEnc(filename, cur, (const char *)encoding); + desret_int(ret_val); + call_tests++; + des_fileoutput(n_filename, filename, 0); + des_xmlDocPtr(n_cur, cur, 1); + des_const_char_ptr(n_encoding, (const char *)encoding, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in htmlSaveFileEnc", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_filename); + printf(" %d", n_cur); + printf(" %d", n_encoding); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_htmlSaveFileFormat(void) { + int test_ret = 0; + +#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + int ret_val; + const char * filename; /* the filename */ + int n_filename; + xmlDocPtr cur; /* the document */ + int n_cur; + char * encoding; /* the document encoding */ + int n_encoding; + int format; /* should formatting spaces been added */ + int n_format; + + for (n_filename = 0;n_filename < gen_nb_fileoutput;n_filename++) { + for (n_cur = 0;n_cur < gen_nb_xmlDocPtr;n_cur++) { + for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) { + for (n_format = 0;n_format < gen_nb_int;n_format++) { + mem_base = xmlMemBlocks(); + filename = gen_fileoutput(n_filename, 0); + cur = gen_xmlDocPtr(n_cur, 1); + encoding = gen_const_char_ptr(n_encoding, 2); + format = gen_int(n_format, 3); + + ret_val = htmlSaveFileFormat(filename, cur, (const char *)encoding, format); + desret_int(ret_val); + call_tests++; + des_fileoutput(n_filename, filename, 0); + des_xmlDocPtr(n_cur, cur, 1); + des_const_char_ptr(n_encoding, (const char *)encoding, 2); + des_int(n_format, format, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in htmlSaveFileFormat", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_filename); + printf(" %d", n_cur); + printf(" %d", n_encoding); + printf(" %d", n_format); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_htmlSetMetaEncoding(void) { + int test_ret = 0; + +#if defined(LIBXML_HTML_ENABLED) + int mem_base; + int ret_val; + htmlDocPtr doc; /* the document */ + int n_doc; + xmlChar * encoding; /* the encoding string */ + int n_encoding; + + for (n_doc = 0;n_doc < gen_nb_htmlDocPtr;n_doc++) { + for (n_encoding = 0;n_encoding < gen_nb_const_xmlChar_ptr;n_encoding++) { + mem_base = xmlMemBlocks(); + doc = gen_htmlDocPtr(n_doc, 0); + encoding = gen_const_xmlChar_ptr(n_encoding, 1); + + ret_val = htmlSetMetaEncoding(doc, (const xmlChar *)encoding); + desret_int(ret_val); + call_tests++; + des_htmlDocPtr(n_doc, doc, 0); + des_const_xmlChar_ptr(n_encoding, (const xmlChar *)encoding, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in htmlSetMetaEncoding", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf(" %d", n_encoding); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + +static int +test_HTMLtree(void) { + int test_ret = 0; + + if (quiet == 0) printf("Testing HTMLtree : 18 of 18 functions ...\n"); + test_ret += test_htmlDocContentDumpFormatOutput(); + test_ret += test_htmlDocContentDumpOutput(); + test_ret += test_htmlDocDump(); + test_ret += test_htmlDocDumpMemory(); + test_ret += test_htmlDocDumpMemoryFormat(); + test_ret += test_htmlGetMetaEncoding(); + test_ret += test_htmlIsBooleanAttr(); + test_ret += test_htmlNewDoc(); + test_ret += test_htmlNewDocNoDtD(); + test_ret += test_htmlNodeDump(); + test_ret += test_htmlNodeDumpFile(); + test_ret += test_htmlNodeDumpFileFormat(); + test_ret += test_htmlNodeDumpFormatOutput(); + test_ret += test_htmlNodeDumpOutput(); + test_ret += test_htmlSaveFile(); + test_ret += test_htmlSaveFileEnc(); + test_ret += test_htmlSaveFileFormat(); + test_ret += test_htmlSetMetaEncoding(); + + if (test_ret != 0) + printf("Module HTMLtree: %d errors\n", test_ret); + return(test_ret); +} + +static int +test_docbDefaultSAXHandlerInit(void) { + int test_ret = 0; + +#if defined(LIBXML_DOCB_ENABLED) +#ifdef LIBXML_DOCB_ENABLED + int mem_base; + + mem_base = xmlMemBlocks(); + + docbDefaultSAXHandlerInit(); + call_tests++; + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in docbDefaultSAXHandlerInit", + xmlMemBlocks() - mem_base); + test_ret++; + printf("\n"); + } + function_tests++; +#endif +#endif + + return(test_ret); +} + + +static int +test_htmlDefaultSAXHandlerInit(void) { + int test_ret = 0; + +#if defined(LIBXML_HTML_ENABLED) +#ifdef LIBXML_HTML_ENABLED + int mem_base; + + mem_base = xmlMemBlocks(); + + htmlDefaultSAXHandlerInit(); + call_tests++; + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in htmlDefaultSAXHandlerInit", + xmlMemBlocks() - mem_base); + test_ret++; + printf("\n"); + } + function_tests++; +#endif +#endif + + return(test_ret); +} + + +static int +test_xmlDefaultSAXHandlerInit(void) { + int test_ret = 0; + + int mem_base; + + mem_base = xmlMemBlocks(); + + xmlDefaultSAXHandlerInit(); + call_tests++; + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlDefaultSAXHandlerInit", + xmlMemBlocks() - mem_base); + test_ret++; + printf("\n"); + } + function_tests++; + + return(test_ret); +} + + +#define gen_nb_xmlEnumerationPtr 1 +static xmlEnumerationPtr gen_xmlEnumerationPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlEnumerationPtr(int no ATTRIBUTE_UNUSED, xmlEnumerationPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +static int +test_xmlSAX2AttributeDecl(void) { + int test_ret = 0; + + int mem_base; + void * ctx; /* the user data (XML parser context) */ + int n_ctx; + xmlChar * elem; /* the name of the element */ + int n_elem; + xmlChar * fullname; /* the attribute name */ + int n_fullname; + int type; /* the attribute type */ + int n_type; + int def; /* the type of default value */ + int n_def; + xmlChar * defaultValue; /* the attribute default value */ + int n_defaultValue; + xmlEnumerationPtr tree; /* the tree of enumerated value set */ + int n_tree; + + for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) { + for (n_elem = 0;n_elem < gen_nb_const_xmlChar_ptr;n_elem++) { + for (n_fullname = 0;n_fullname < gen_nb_const_xmlChar_ptr;n_fullname++) { + for (n_type = 0;n_type < gen_nb_int;n_type++) { + for (n_def = 0;n_def < gen_nb_int;n_def++) { + for (n_defaultValue = 0;n_defaultValue < gen_nb_const_xmlChar_ptr;n_defaultValue++) { + for (n_tree = 0;n_tree < gen_nb_xmlEnumerationPtr;n_tree++) { + mem_base = xmlMemBlocks(); + ctx = gen_void_ptr(n_ctx, 0); + elem = gen_const_xmlChar_ptr(n_elem, 1); + fullname = gen_const_xmlChar_ptr(n_fullname, 2); + type = gen_int(n_type, 3); + def = gen_int(n_def, 4); + defaultValue = gen_const_xmlChar_ptr(n_defaultValue, 5); + tree = gen_xmlEnumerationPtr(n_tree, 6); + + xmlSAX2AttributeDecl(ctx, (const xmlChar *)elem, (const xmlChar *)fullname, type, def, (const xmlChar *)defaultValue, tree); + call_tests++; + des_void_ptr(n_ctx, ctx, 0); + des_const_xmlChar_ptr(n_elem, (const xmlChar *)elem, 1); + des_const_xmlChar_ptr(n_fullname, (const xmlChar *)fullname, 2); + des_int(n_type, type, 3); + des_int(n_def, def, 4); + des_const_xmlChar_ptr(n_defaultValue, (const xmlChar *)defaultValue, 5); + des_xmlEnumerationPtr(n_tree, tree, 6); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSAX2AttributeDecl", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctx); + printf(" %d", n_elem); + printf(" %d", n_fullname); + printf(" %d", n_type); + printf(" %d", n_def); + printf(" %d", n_defaultValue); + printf(" %d", n_tree); + printf("\n"); + } + } + } + } + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlSAX2CDataBlock(void) { + int test_ret = 0; + + int mem_base; + void * ctx; /* the user data (XML parser context) */ + int n_ctx; + xmlChar * value; /* The pcdata content */ + int n_value; + int len; /* the block length */ + int n_len; + + for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) { + for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) { + for (n_len = 0;n_len < gen_nb_int;n_len++) { + mem_base = xmlMemBlocks(); + ctx = gen_void_ptr(n_ctx, 0); + value = gen_const_xmlChar_ptr(n_value, 1); + len = gen_int(n_len, 2); + + xmlSAX2CDataBlock(ctx, (const xmlChar *)value, len); + call_tests++; + des_void_ptr(n_ctx, ctx, 0); + des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 1); + des_int(n_len, len, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSAX2CDataBlock", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctx); + printf(" %d", n_value); + printf(" %d", n_len); + printf("\n"); + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlSAX2Characters(void) { + int test_ret = 0; + + int mem_base; + void * ctx; /* the user data (XML parser context) */ + int n_ctx; + xmlChar * ch; /* a xmlChar string */ + int n_ch; + int len; /* the number of xmlChar */ + int n_len; + + for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) { + for (n_ch = 0;n_ch < gen_nb_const_xmlChar_ptr;n_ch++) { + for (n_len = 0;n_len < gen_nb_int;n_len++) { + mem_base = xmlMemBlocks(); + ctx = gen_void_ptr(n_ctx, 0); + ch = gen_const_xmlChar_ptr(n_ch, 1); + len = gen_int(n_len, 2); + + xmlSAX2Characters(ctx, (const xmlChar *)ch, len); + call_tests++; + des_void_ptr(n_ctx, ctx, 0); + des_const_xmlChar_ptr(n_ch, (const xmlChar *)ch, 1); + des_int(n_len, len, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSAX2Characters", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctx); + printf(" %d", n_ch); + printf(" %d", n_len); + printf("\n"); + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlSAX2Comment(void) { + int test_ret = 0; + + int mem_base; + void * ctx; /* the user data (XML parser context) */ + int n_ctx; + xmlChar * value; /* the xmlSAX2Comment content */ + int n_value; + + for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) { + for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) { + mem_base = xmlMemBlocks(); + ctx = gen_void_ptr(n_ctx, 0); + value = gen_const_xmlChar_ptr(n_value, 1); + + xmlSAX2Comment(ctx, (const xmlChar *)value); + call_tests++; + des_void_ptr(n_ctx, ctx, 0); + des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSAX2Comment", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctx); + printf(" %d", n_value); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlSAX2ElementDecl(void) { + int test_ret = 0; + + int mem_base; + void * ctx; /* the user data (XML parser context) */ + int n_ctx; + xmlChar * name; /* the element name */ + int n_name; + int type; /* the element type */ + int n_type; + xmlElementContentPtr content; /* the element value tree */ + int n_content; + + for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_type = 0;n_type < gen_nb_int;n_type++) { + for (n_content = 0;n_content < gen_nb_xmlElementContentPtr;n_content++) { + mem_base = xmlMemBlocks(); + ctx = gen_void_ptr(n_ctx, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + type = gen_int(n_type, 2); + content = gen_xmlElementContentPtr(n_content, 3); + + xmlSAX2ElementDecl(ctx, (const xmlChar *)name, type, content); + call_tests++; + des_void_ptr(n_ctx, ctx, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + des_int(n_type, type, 2); + des_xmlElementContentPtr(n_content, content, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSAX2ElementDecl", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctx); + printf(" %d", n_name); + printf(" %d", n_type); + printf(" %d", n_content); + printf("\n"); + } + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlSAX2EndDocument(void) { + int test_ret = 0; + + int mem_base; + void * ctx; /* the user data (XML parser context) */ + int n_ctx; + + for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) { + mem_base = xmlMemBlocks(); + ctx = gen_void_ptr(n_ctx, 0); + + xmlSAX2EndDocument(ctx); + call_tests++; + des_void_ptr(n_ctx, ctx, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSAX2EndDocument", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctx); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlSAX2EndElement(void) { + int test_ret = 0; + +#if defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED) || defined(LIBXML_LEGACY_ENABLED) +#ifdef LIBXML_SAX1_ENABLED + int mem_base; + void * ctx; /* the user data (XML parser context) */ + int n_ctx; + xmlChar * name; /* The element name */ + int n_name; + + for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + mem_base = xmlMemBlocks(); + ctx = gen_void_ptr(n_ctx, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + + xmlSAX2EndElement(ctx, (const xmlChar *)name); + call_tests++; + des_void_ptr(n_ctx, ctx, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSAX2EndElement", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctx); + printf(" %d", n_name); + printf("\n"); + } + } + } + function_tests++; +#endif +#endif + + return(test_ret); +} + + +static int +test_xmlSAX2EndElementNs(void) { + int test_ret = 0; + + int mem_base; + void * ctx; /* the user data (XML parser context) */ + int n_ctx; + xmlChar * localname; /* the local name of the element */ + int n_localname; + xmlChar * prefix; /* the element namespace prefix if available */ + int n_prefix; + xmlChar * URI; /* the element namespace name if available */ + int n_URI; + + for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) { + for (n_localname = 0;n_localname < gen_nb_const_xmlChar_ptr;n_localname++) { + for (n_prefix = 0;n_prefix < gen_nb_const_xmlChar_ptr;n_prefix++) { + for (n_URI = 0;n_URI < gen_nb_const_xmlChar_ptr;n_URI++) { + mem_base = xmlMemBlocks(); + ctx = gen_void_ptr(n_ctx, 0); + localname = gen_const_xmlChar_ptr(n_localname, 1); + prefix = gen_const_xmlChar_ptr(n_prefix, 2); + URI = gen_const_xmlChar_ptr(n_URI, 3); + + xmlSAX2EndElementNs(ctx, (const xmlChar *)localname, (const xmlChar *)prefix, (const xmlChar *)URI); + call_tests++; + des_void_ptr(n_ctx, ctx, 0); + des_const_xmlChar_ptr(n_localname, (const xmlChar *)localname, 1); + des_const_xmlChar_ptr(n_prefix, (const xmlChar *)prefix, 2); + des_const_xmlChar_ptr(n_URI, (const xmlChar *)URI, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSAX2EndElementNs", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctx); + printf(" %d", n_localname); + printf(" %d", n_prefix); + printf(" %d", n_URI); + printf("\n"); + } + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlSAX2EntityDecl(void) { + int test_ret = 0; + + int mem_base; + void * ctx; /* the user data (XML parser context) */ + int n_ctx; + xmlChar * name; /* the entity name */ + int n_name; + int type; /* the entity type */ + int n_type; + xmlChar * publicId; /* The public ID of the entity */ + int n_publicId; + xmlChar * systemId; /* The system ID of the entity */ + int n_systemId; + xmlChar * content; /* the entity value (without processing). */ + int n_content; + + for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_type = 0;n_type < gen_nb_int;n_type++) { + for (n_publicId = 0;n_publicId < gen_nb_const_xmlChar_ptr;n_publicId++) { + for (n_systemId = 0;n_systemId < gen_nb_const_xmlChar_ptr;n_systemId++) { + for (n_content = 0;n_content < gen_nb_xmlChar_ptr;n_content++) { + mem_base = xmlMemBlocks(); + ctx = gen_void_ptr(n_ctx, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + type = gen_int(n_type, 2); + publicId = gen_const_xmlChar_ptr(n_publicId, 3); + systemId = gen_const_xmlChar_ptr(n_systemId, 4); + content = gen_xmlChar_ptr(n_content, 5); + + xmlSAX2EntityDecl(ctx, (const xmlChar *)name, type, (const xmlChar *)publicId, (const xmlChar *)systemId, content); + call_tests++; + des_void_ptr(n_ctx, ctx, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + des_int(n_type, type, 2); + des_const_xmlChar_ptr(n_publicId, (const xmlChar *)publicId, 3); + des_const_xmlChar_ptr(n_systemId, (const xmlChar *)systemId, 4); + des_xmlChar_ptr(n_content, content, 5); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSAX2EntityDecl", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctx); + printf(" %d", n_name); + printf(" %d", n_type); + printf(" %d", n_publicId); + printf(" %d", n_systemId); + printf(" %d", n_content); + printf("\n"); + } + } + } + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlSAX2ExternalSubset(void) { + int test_ret = 0; + + int mem_base; + void * ctx; /* the user data (XML parser context) */ + int n_ctx; + xmlChar * name; /* the root element name */ + int n_name; + xmlChar * ExternalID; /* the external ID */ + int n_ExternalID; + xmlChar * SystemID; /* the SYSTEM ID (e.g. filename or URL) */ + int n_SystemID; + + for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_ExternalID = 0;n_ExternalID < gen_nb_const_xmlChar_ptr;n_ExternalID++) { + for (n_SystemID = 0;n_SystemID < gen_nb_const_xmlChar_ptr;n_SystemID++) { + mem_base = xmlMemBlocks(); + ctx = gen_void_ptr(n_ctx, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + ExternalID = gen_const_xmlChar_ptr(n_ExternalID, 2); + SystemID = gen_const_xmlChar_ptr(n_SystemID, 3); + + xmlSAX2ExternalSubset(ctx, (const xmlChar *)name, (const xmlChar *)ExternalID, (const xmlChar *)SystemID); + call_tests++; + des_void_ptr(n_ctx, ctx, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + des_const_xmlChar_ptr(n_ExternalID, (const xmlChar *)ExternalID, 2); + des_const_xmlChar_ptr(n_SystemID, (const xmlChar *)SystemID, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSAX2ExternalSubset", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctx); + printf(" %d", n_name); + printf(" %d", n_ExternalID); + printf(" %d", n_SystemID); + printf("\n"); + } + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlSAX2GetColumnNumber(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + void * ctx; /* the user data (XML parser context) */ + int n_ctx; + + for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) { + mem_base = xmlMemBlocks(); + ctx = gen_void_ptr(n_ctx, 0); + + ret_val = xmlSAX2GetColumnNumber(ctx); + desret_int(ret_val); + call_tests++; + des_void_ptr(n_ctx, ctx, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSAX2GetColumnNumber", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctx); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlSAX2GetEntity(void) { + int test_ret = 0; + + int mem_base; + xmlEntityPtr ret_val; + void * ctx; /* the user data (XML parser context) */ + int n_ctx; + xmlChar * name; /* The entity name */ + int n_name; + + for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + mem_base = xmlMemBlocks(); + ctx = gen_void_ptr(n_ctx, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + + ret_val = xmlSAX2GetEntity(ctx, (const xmlChar *)name); + desret_xmlEntityPtr(ret_val); + call_tests++; + des_void_ptr(n_ctx, ctx, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSAX2GetEntity", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctx); + printf(" %d", n_name); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlSAX2GetLineNumber(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + void * ctx; /* the user data (XML parser context) */ + int n_ctx; + + for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) { + mem_base = xmlMemBlocks(); + ctx = gen_void_ptr(n_ctx, 0); + + ret_val = xmlSAX2GetLineNumber(ctx); + desret_int(ret_val); + call_tests++; + des_void_ptr(n_ctx, ctx, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSAX2GetLineNumber", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctx); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlSAX2GetParameterEntity(void) { + int test_ret = 0; + + int mem_base; + xmlEntityPtr ret_val; + void * ctx; /* the user data (XML parser context) */ + int n_ctx; + xmlChar * name; /* The entity name */ + int n_name; + + for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + mem_base = xmlMemBlocks(); + ctx = gen_void_ptr(n_ctx, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + + ret_val = xmlSAX2GetParameterEntity(ctx, (const xmlChar *)name); + desret_xmlEntityPtr(ret_val); + call_tests++; + des_void_ptr(n_ctx, ctx, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSAX2GetParameterEntity", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctx); + printf(" %d", n_name); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlSAX2GetPublicId(void) { + int test_ret = 0; + + int mem_base; + const xmlChar * ret_val; + void * ctx; /* the user data (XML parser context) */ + int n_ctx; + + for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) { + mem_base = xmlMemBlocks(); + ctx = gen_void_ptr(n_ctx, 0); + + ret_val = xmlSAX2GetPublicId(ctx); + desret_const_xmlChar_ptr(ret_val); + call_tests++; + des_void_ptr(n_ctx, ctx, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSAX2GetPublicId", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctx); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlSAX2GetSystemId(void) { + int test_ret = 0; + + int mem_base; + const xmlChar * ret_val; + void * ctx; /* the user data (XML parser context) */ + int n_ctx; + + for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) { + mem_base = xmlMemBlocks(); + ctx = gen_void_ptr(n_ctx, 0); + + ret_val = xmlSAX2GetSystemId(ctx); + desret_const_xmlChar_ptr(ret_val); + call_tests++; + des_void_ptr(n_ctx, ctx, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSAX2GetSystemId", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctx); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlSAX2HasExternalSubset(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + void * ctx; /* the user data (XML parser context) */ + int n_ctx; + + for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) { + mem_base = xmlMemBlocks(); + ctx = gen_void_ptr(n_ctx, 0); + + ret_val = xmlSAX2HasExternalSubset(ctx); + desret_int(ret_val); + call_tests++; + des_void_ptr(n_ctx, ctx, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSAX2HasExternalSubset", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctx); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlSAX2HasInternalSubset(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + void * ctx; /* the user data (XML parser context) */ + int n_ctx; + + for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) { + mem_base = xmlMemBlocks(); + ctx = gen_void_ptr(n_ctx, 0); + + ret_val = xmlSAX2HasInternalSubset(ctx); + desret_int(ret_val); + call_tests++; + des_void_ptr(n_ctx, ctx, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSAX2HasInternalSubset", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctx); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlSAX2IgnorableWhitespace(void) { + int test_ret = 0; + + int mem_base; + void * ctx; /* the user data (XML parser context) */ + int n_ctx; + xmlChar * ch; /* a xmlChar string */ + int n_ch; + int len; /* the number of xmlChar */ + int n_len; + + for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) { + for (n_ch = 0;n_ch < gen_nb_const_xmlChar_ptr;n_ch++) { + for (n_len = 0;n_len < gen_nb_int;n_len++) { + mem_base = xmlMemBlocks(); + ctx = gen_void_ptr(n_ctx, 0); + ch = gen_const_xmlChar_ptr(n_ch, 1); + len = gen_int(n_len, 2); + + xmlSAX2IgnorableWhitespace(ctx, (const xmlChar *)ch, len); + call_tests++; + des_void_ptr(n_ctx, ctx, 0); + des_const_xmlChar_ptr(n_ch, (const xmlChar *)ch, 1); + des_int(n_len, len, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSAX2IgnorableWhitespace", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctx); + printf(" %d", n_ch); + printf(" %d", n_len); + printf("\n"); + } + } + } + } + function_tests++; + + return(test_ret); +} + + +#define gen_nb_xmlSAXHandler_ptr 1 +static xmlSAXHandler * gen_xmlSAXHandler_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlSAXHandler_ptr(int no ATTRIBUTE_UNUSED, xmlSAXHandler * val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +static int +test_xmlSAX2InitDefaultSAXHandler(void) { + int test_ret = 0; + + int mem_base; + xmlSAXHandler * hdlr; /* the SAX handler */ + int n_hdlr; + int warning; /* flag if non-zero sets the handler warning procedure */ + int n_warning; + + for (n_hdlr = 0;n_hdlr < gen_nb_xmlSAXHandler_ptr;n_hdlr++) { + for (n_warning = 0;n_warning < gen_nb_int;n_warning++) { + mem_base = xmlMemBlocks(); + hdlr = gen_xmlSAXHandler_ptr(n_hdlr, 0); + warning = gen_int(n_warning, 1); + + xmlSAX2InitDefaultSAXHandler(hdlr, warning); + call_tests++; + des_xmlSAXHandler_ptr(n_hdlr, hdlr, 0); + des_int(n_warning, warning, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSAX2InitDefaultSAXHandler", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_hdlr); + printf(" %d", n_warning); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlSAX2InitDocbDefaultSAXHandler(void) { + int test_ret = 0; + +#if defined(LIBXML_DOCB_ENABLED) + int mem_base; + xmlSAXHandler * hdlr; /* the SAX handler */ + int n_hdlr; + + for (n_hdlr = 0;n_hdlr < gen_nb_xmlSAXHandler_ptr;n_hdlr++) { + mem_base = xmlMemBlocks(); + hdlr = gen_xmlSAXHandler_ptr(n_hdlr, 0); + + xmlSAX2InitDocbDefaultSAXHandler(hdlr); + call_tests++; + des_xmlSAXHandler_ptr(n_hdlr, hdlr, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSAX2InitDocbDefaultSAXHandler", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_hdlr); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlSAX2InitHtmlDefaultSAXHandler(void) { + int test_ret = 0; + +#if defined(LIBXML_HTML_ENABLED) + int mem_base; + xmlSAXHandler * hdlr; /* the SAX handler */ + int n_hdlr; + + for (n_hdlr = 0;n_hdlr < gen_nb_xmlSAXHandler_ptr;n_hdlr++) { + mem_base = xmlMemBlocks(); + hdlr = gen_xmlSAXHandler_ptr(n_hdlr, 0); + + xmlSAX2InitHtmlDefaultSAXHandler(hdlr); + call_tests++; + des_xmlSAXHandler_ptr(n_hdlr, hdlr, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSAX2InitHtmlDefaultSAXHandler", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_hdlr); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlSAX2InternalSubset(void) { + int test_ret = 0; + + int mem_base; + void * ctx; /* the user data (XML parser context) */ + int n_ctx; + xmlChar * name; /* the root element name */ + int n_name; + xmlChar * ExternalID; /* the external ID */ + int n_ExternalID; + xmlChar * SystemID; /* the SYSTEM ID (e.g. filename or URL) */ + int n_SystemID; + + for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_ExternalID = 0;n_ExternalID < gen_nb_const_xmlChar_ptr;n_ExternalID++) { + for (n_SystemID = 0;n_SystemID < gen_nb_const_xmlChar_ptr;n_SystemID++) { + mem_base = xmlMemBlocks(); + ctx = gen_void_ptr(n_ctx, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + ExternalID = gen_const_xmlChar_ptr(n_ExternalID, 2); + SystemID = gen_const_xmlChar_ptr(n_SystemID, 3); + + xmlSAX2InternalSubset(ctx, (const xmlChar *)name, (const xmlChar *)ExternalID, (const xmlChar *)SystemID); + call_tests++; + des_void_ptr(n_ctx, ctx, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + des_const_xmlChar_ptr(n_ExternalID, (const xmlChar *)ExternalID, 2); + des_const_xmlChar_ptr(n_SystemID, (const xmlChar *)SystemID, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSAX2InternalSubset", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctx); + printf(" %d", n_name); + printf(" %d", n_ExternalID); + printf(" %d", n_SystemID); + printf("\n"); + } + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlSAX2IsStandalone(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + void * ctx; /* the user data (XML parser context) */ + int n_ctx; + + for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) { + mem_base = xmlMemBlocks(); + ctx = gen_void_ptr(n_ctx, 0); + + ret_val = xmlSAX2IsStandalone(ctx); + desret_int(ret_val); + call_tests++; + des_void_ptr(n_ctx, ctx, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSAX2IsStandalone", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctx); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlSAX2NotationDecl(void) { + int test_ret = 0; + + int mem_base; + void * ctx; /* the user data (XML parser context) */ + int n_ctx; + xmlChar * name; /* The name of the notation */ + int n_name; + xmlChar * publicId; /* The public ID of the entity */ + int n_publicId; + xmlChar * systemId; /* The system ID of the entity */ + int n_systemId; + + for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_publicId = 0;n_publicId < gen_nb_const_xmlChar_ptr;n_publicId++) { + for (n_systemId = 0;n_systemId < gen_nb_const_xmlChar_ptr;n_systemId++) { + mem_base = xmlMemBlocks(); + ctx = gen_void_ptr(n_ctx, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + publicId = gen_const_xmlChar_ptr(n_publicId, 2); + systemId = gen_const_xmlChar_ptr(n_systemId, 3); + + xmlSAX2NotationDecl(ctx, (const xmlChar *)name, (const xmlChar *)publicId, (const xmlChar *)systemId); + call_tests++; + des_void_ptr(n_ctx, ctx, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + des_const_xmlChar_ptr(n_publicId, (const xmlChar *)publicId, 2); + des_const_xmlChar_ptr(n_systemId, (const xmlChar *)systemId, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSAX2NotationDecl", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctx); + printf(" %d", n_name); + printf(" %d", n_publicId); + printf(" %d", n_systemId); + printf("\n"); + } + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlSAX2ProcessingInstruction(void) { + int test_ret = 0; + + int mem_base; + void * ctx; /* the user data (XML parser context) */ + int n_ctx; + xmlChar * target; /* the target name */ + int n_target; + xmlChar * data; /* the PI data's */ + int n_data; + + for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) { + for (n_target = 0;n_target < gen_nb_const_xmlChar_ptr;n_target++) { + for (n_data = 0;n_data < gen_nb_const_xmlChar_ptr;n_data++) { + mem_base = xmlMemBlocks(); + ctx = gen_void_ptr(n_ctx, 0); + target = gen_const_xmlChar_ptr(n_target, 1); + data = gen_const_xmlChar_ptr(n_data, 2); + + xmlSAX2ProcessingInstruction(ctx, (const xmlChar *)target, (const xmlChar *)data); + call_tests++; + des_void_ptr(n_ctx, ctx, 0); + des_const_xmlChar_ptr(n_target, (const xmlChar *)target, 1); + des_const_xmlChar_ptr(n_data, (const xmlChar *)data, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSAX2ProcessingInstruction", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctx); + printf(" %d", n_target); + printf(" %d", n_data); + printf("\n"); + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlSAX2Reference(void) { + int test_ret = 0; + + int mem_base; + void * ctx; /* the user data (XML parser context) */ + int n_ctx; + xmlChar * name; /* The entity name */ + int n_name; + + for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + mem_base = xmlMemBlocks(); + ctx = gen_void_ptr(n_ctx, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + + xmlSAX2Reference(ctx, (const xmlChar *)name); + call_tests++; + des_void_ptr(n_ctx, ctx, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSAX2Reference", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctx); + printf(" %d", n_name); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlSAX2ResolveEntity(void) { + int test_ret = 0; + + int mem_base; + xmlParserInputPtr ret_val; + void * ctx; /* the user data (XML parser context) */ + int n_ctx; + xmlChar * publicId; /* The public ID of the entity */ + int n_publicId; + xmlChar * systemId; /* The system ID of the entity */ + int n_systemId; + + for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) { + for (n_publicId = 0;n_publicId < gen_nb_const_xmlChar_ptr;n_publicId++) { + for (n_systemId = 0;n_systemId < gen_nb_const_xmlChar_ptr;n_systemId++) { + mem_base = xmlMemBlocks(); + ctx = gen_void_ptr(n_ctx, 0); + publicId = gen_const_xmlChar_ptr(n_publicId, 1); + systemId = gen_const_xmlChar_ptr(n_systemId, 2); + + ret_val = xmlSAX2ResolveEntity(ctx, (const xmlChar *)publicId, (const xmlChar *)systemId); + desret_xmlParserInputPtr(ret_val); + call_tests++; + des_void_ptr(n_ctx, ctx, 0); + des_const_xmlChar_ptr(n_publicId, (const xmlChar *)publicId, 1); + des_const_xmlChar_ptr(n_systemId, (const xmlChar *)systemId, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSAX2ResolveEntity", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctx); + printf(" %d", n_publicId); + printf(" %d", n_systemId); + printf("\n"); + } + } + } + } + function_tests++; + + return(test_ret); +} + + +#define gen_nb_xmlSAXLocatorPtr 1 +static xmlSAXLocatorPtr gen_xmlSAXLocatorPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlSAXLocatorPtr(int no ATTRIBUTE_UNUSED, xmlSAXLocatorPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +static int +test_xmlSAX2SetDocumentLocator(void) { + int test_ret = 0; + + int mem_base; + void * ctx; /* the user data (XML parser context) */ + int n_ctx; + xmlSAXLocatorPtr loc; /* A SAX Locator */ + int n_loc; + + for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) { + for (n_loc = 0;n_loc < gen_nb_xmlSAXLocatorPtr;n_loc++) { + mem_base = xmlMemBlocks(); + ctx = gen_void_ptr(n_ctx, 0); + loc = gen_xmlSAXLocatorPtr(n_loc, 1); + + xmlSAX2SetDocumentLocator(ctx, loc); + call_tests++; + des_void_ptr(n_ctx, ctx, 0); + des_xmlSAXLocatorPtr(n_loc, loc, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSAX2SetDocumentLocator", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctx); + printf(" %d", n_loc); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlSAX2StartDocument(void) { + int test_ret = 0; + + int mem_base; + void * ctx; /* the user data (XML parser context) */ + int n_ctx; + + for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) { + mem_base = xmlMemBlocks(); + ctx = gen_void_ptr(n_ctx, 0); + + xmlSAX2StartDocument(ctx); + call_tests++; + des_void_ptr(n_ctx, ctx, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSAX2StartDocument", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctx); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlSAX2StartElement(void) { + int test_ret = 0; + +#if defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED) || defined(LIBXML_LEGACY_ENABLED) +#ifdef LIBXML_SAX1_ENABLED + int mem_base; + void * ctx; /* the user data (XML parser context) */ + int n_ctx; + xmlChar * fullname; /* The element name, including namespace prefix */ + int n_fullname; + xmlChar ** atts; /* An array of name/value attributes pairs, NULL terminated */ + int n_atts; + + for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) { + for (n_fullname = 0;n_fullname < gen_nb_const_xmlChar_ptr;n_fullname++) { + for (n_atts = 0;n_atts < gen_nb_const_xmlChar_ptr_ptr;n_atts++) { + mem_base = xmlMemBlocks(); + ctx = gen_void_ptr(n_ctx, 0); + fullname = gen_const_xmlChar_ptr(n_fullname, 1); + atts = gen_const_xmlChar_ptr_ptr(n_atts, 2); + + xmlSAX2StartElement(ctx, (const xmlChar *)fullname, (const xmlChar **)atts); + call_tests++; + des_void_ptr(n_ctx, ctx, 0); + des_const_xmlChar_ptr(n_fullname, (const xmlChar *)fullname, 1); + des_const_xmlChar_ptr_ptr(n_atts, (const xmlChar **)atts, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSAX2StartElement", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctx); + printf(" %d", n_fullname); + printf(" %d", n_atts); + printf("\n"); + } + } + } + } + function_tests++; +#endif +#endif + + return(test_ret); +} + + +static int +test_xmlSAX2StartElementNs(void) { + int test_ret = 0; + + int mem_base; + void * ctx; /* the user data (XML parser context) */ + int n_ctx; + xmlChar * localname; /* the local name of the element */ + int n_localname; + xmlChar * prefix; /* the element namespace prefix if available */ + int n_prefix; + xmlChar * URI; /* the element namespace name if available */ + int n_URI; + int nb_namespaces; /* number of namespace definitions on that node */ + int n_nb_namespaces; + xmlChar ** namespaces; /* pointer to the array of prefix/URI pairs namespace definitions */ + int n_namespaces; + int nb_attributes; /* the number of attributes on that node */ + int n_nb_attributes; + int nb_defaulted; /* the number of defaulted attributes. */ + int n_nb_defaulted; + xmlChar ** attributes; /* pointer to the array of (localname/prefix/URI/value/end) attribute values. */ + int n_attributes; + + for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) { + for (n_localname = 0;n_localname < gen_nb_const_xmlChar_ptr;n_localname++) { + for (n_prefix = 0;n_prefix < gen_nb_const_xmlChar_ptr;n_prefix++) { + for (n_URI = 0;n_URI < gen_nb_const_xmlChar_ptr;n_URI++) { + for (n_nb_namespaces = 0;n_nb_namespaces < gen_nb_int;n_nb_namespaces++) { + for (n_namespaces = 0;n_namespaces < gen_nb_const_xmlChar_ptr_ptr;n_namespaces++) { + for (n_nb_attributes = 0;n_nb_attributes < gen_nb_int;n_nb_attributes++) { + for (n_nb_defaulted = 0;n_nb_defaulted < gen_nb_int;n_nb_defaulted++) { + for (n_attributes = 0;n_attributes < gen_nb_const_xmlChar_ptr_ptr;n_attributes++) { + mem_base = xmlMemBlocks(); + ctx = gen_void_ptr(n_ctx, 0); + localname = gen_const_xmlChar_ptr(n_localname, 1); + prefix = gen_const_xmlChar_ptr(n_prefix, 2); + URI = gen_const_xmlChar_ptr(n_URI, 3); + nb_namespaces = gen_int(n_nb_namespaces, 4); + namespaces = gen_const_xmlChar_ptr_ptr(n_namespaces, 5); + nb_attributes = gen_int(n_nb_attributes, 6); + nb_defaulted = gen_int(n_nb_defaulted, 7); + attributes = gen_const_xmlChar_ptr_ptr(n_attributes, 8); + + xmlSAX2StartElementNs(ctx, (const xmlChar *)localname, (const xmlChar *)prefix, (const xmlChar *)URI, nb_namespaces, (const xmlChar **)namespaces, nb_attributes, nb_defaulted, (const xmlChar **)attributes); + call_tests++; + des_void_ptr(n_ctx, ctx, 0); + des_const_xmlChar_ptr(n_localname, (const xmlChar *)localname, 1); + des_const_xmlChar_ptr(n_prefix, (const xmlChar *)prefix, 2); + des_const_xmlChar_ptr(n_URI, (const xmlChar *)URI, 3); + des_int(n_nb_namespaces, nb_namespaces, 4); + des_const_xmlChar_ptr_ptr(n_namespaces, (const xmlChar **)namespaces, 5); + des_int(n_nb_attributes, nb_attributes, 6); + des_int(n_nb_defaulted, nb_defaulted, 7); + des_const_xmlChar_ptr_ptr(n_attributes, (const xmlChar **)attributes, 8); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSAX2StartElementNs", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctx); + printf(" %d", n_localname); + printf(" %d", n_prefix); + printf(" %d", n_URI); + printf(" %d", n_nb_namespaces); + printf(" %d", n_namespaces); + printf(" %d", n_nb_attributes); + printf(" %d", n_nb_defaulted); + printf(" %d", n_attributes); + printf("\n"); + } + } + } + } + } + } + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlSAX2UnparsedEntityDecl(void) { + int test_ret = 0; + + int mem_base; + void * ctx; /* the user data (XML parser context) */ + int n_ctx; + xmlChar * name; /* The name of the entity */ + int n_name; + xmlChar * publicId; /* The public ID of the entity */ + int n_publicId; + xmlChar * systemId; /* The system ID of the entity */ + int n_systemId; + xmlChar * notationName; /* the name of the notation */ + int n_notationName; + + for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_publicId = 0;n_publicId < gen_nb_const_xmlChar_ptr;n_publicId++) { + for (n_systemId = 0;n_systemId < gen_nb_const_xmlChar_ptr;n_systemId++) { + for (n_notationName = 0;n_notationName < gen_nb_const_xmlChar_ptr;n_notationName++) { + mem_base = xmlMemBlocks(); + ctx = gen_void_ptr(n_ctx, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + publicId = gen_const_xmlChar_ptr(n_publicId, 2); + systemId = gen_const_xmlChar_ptr(n_systemId, 3); + notationName = gen_const_xmlChar_ptr(n_notationName, 4); + + xmlSAX2UnparsedEntityDecl(ctx, (const xmlChar *)name, (const xmlChar *)publicId, (const xmlChar *)systemId, (const xmlChar *)notationName); + call_tests++; + des_void_ptr(n_ctx, ctx, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + des_const_xmlChar_ptr(n_publicId, (const xmlChar *)publicId, 2); + des_const_xmlChar_ptr(n_systemId, (const xmlChar *)systemId, 3); + des_const_xmlChar_ptr(n_notationName, (const xmlChar *)notationName, 4); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSAX2UnparsedEntityDecl", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctx); + printf(" %d", n_name); + printf(" %d", n_publicId); + printf(" %d", n_systemId); + printf(" %d", n_notationName); + printf("\n"); + } + } + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlSAXDefaultVersion(void) { + int test_ret = 0; + +#if defined(LIBXML_SAX1_ENABLED) +#ifdef LIBXML_SAX1_ENABLED + int mem_base; + int ret_val; + int version; /* the version, 1 or 2 */ + int n_version; + + for (n_version = 0;n_version < gen_nb_int;n_version++) { + mem_base = xmlMemBlocks(); + version = gen_int(n_version, 0); + + ret_val = xmlSAXDefaultVersion(version); + desret_int(ret_val); + call_tests++; + des_int(n_version, version, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSAXDefaultVersion", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_version); + printf("\n"); + } + } + function_tests++; +#endif +#endif + + return(test_ret); +} + + +static int +test_xmlSAXVersion(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlSAXHandler * hdlr; /* the SAX handler */ + int n_hdlr; + int version; /* the version, 1 or 2 */ + int n_version; + + for (n_hdlr = 0;n_hdlr < gen_nb_xmlSAXHandler_ptr;n_hdlr++) { + for (n_version = 0;n_version < gen_nb_int;n_version++) { + mem_base = xmlMemBlocks(); + hdlr = gen_xmlSAXHandler_ptr(n_hdlr, 0); + version = gen_int(n_version, 1); + + ret_val = xmlSAXVersion(hdlr, version); + desret_int(ret_val); + call_tests++; + des_xmlSAXHandler_ptr(n_hdlr, hdlr, 0); + des_int(n_version, version, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSAXVersion", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_hdlr); + printf(" %d", n_version); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + +static int +test_SAX2(void) { + int test_ret = 0; + + if (quiet == 0) printf("Testing SAX2 : 38 of 38 functions ...\n"); + test_ret += test_docbDefaultSAXHandlerInit(); + test_ret += test_htmlDefaultSAXHandlerInit(); + test_ret += test_xmlDefaultSAXHandlerInit(); + test_ret += test_xmlSAX2AttributeDecl(); + test_ret += test_xmlSAX2CDataBlock(); + test_ret += test_xmlSAX2Characters(); + test_ret += test_xmlSAX2Comment(); + test_ret += test_xmlSAX2ElementDecl(); + test_ret += test_xmlSAX2EndDocument(); + test_ret += test_xmlSAX2EndElement(); + test_ret += test_xmlSAX2EndElementNs(); + test_ret += test_xmlSAX2EntityDecl(); + test_ret += test_xmlSAX2ExternalSubset(); + test_ret += test_xmlSAX2GetColumnNumber(); + test_ret += test_xmlSAX2GetEntity(); + test_ret += test_xmlSAX2GetLineNumber(); + test_ret += test_xmlSAX2GetParameterEntity(); + test_ret += test_xmlSAX2GetPublicId(); + test_ret += test_xmlSAX2GetSystemId(); + test_ret += test_xmlSAX2HasExternalSubset(); + test_ret += test_xmlSAX2HasInternalSubset(); + test_ret += test_xmlSAX2IgnorableWhitespace(); + test_ret += test_xmlSAX2InitDefaultSAXHandler(); + test_ret += test_xmlSAX2InitDocbDefaultSAXHandler(); + test_ret += test_xmlSAX2InitHtmlDefaultSAXHandler(); + test_ret += test_xmlSAX2InternalSubset(); + test_ret += test_xmlSAX2IsStandalone(); + test_ret += test_xmlSAX2NotationDecl(); + test_ret += test_xmlSAX2ProcessingInstruction(); + test_ret += test_xmlSAX2Reference(); + test_ret += test_xmlSAX2ResolveEntity(); + test_ret += test_xmlSAX2SetDocumentLocator(); + test_ret += test_xmlSAX2StartDocument(); + test_ret += test_xmlSAX2StartElement(); + test_ret += test_xmlSAX2StartElementNs(); + test_ret += test_xmlSAX2UnparsedEntityDecl(); + test_ret += test_xmlSAXDefaultVersion(); + test_ret += test_xmlSAXVersion(); + + if (test_ret != 0) + printf("Module SAX2: %d errors\n", test_ret); + return(test_ret); +} + +static int +test_xmlC14NDocDumpMemory(void) { + int test_ret = 0; + +#if defined(LIBXML_C14N_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + int ret_val; + xmlDocPtr doc; /* the XML document for canonization */ + int n_doc; + xmlNodeSetPtr nodes; /* the nodes set to be included in the canonized image or NULL if all document nodes should be included */ + int n_nodes; + int mode; /* the c14n mode (see @xmlC14NMode) */ + int n_mode; + xmlChar ** 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) */ + int n_inclusive_ns_prefixes; + int with_comments; /* include comments in the result (!=0) or not (==0) */ + int n_with_comments; + xmlChar ** 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 */ + int n_doc_txt_ptr; + + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_nodes = 0;n_nodes < gen_nb_xmlNodeSetPtr;n_nodes++) { + for (n_mode = 0;n_mode < gen_nb_int;n_mode++) { + for (n_inclusive_ns_prefixes = 0;n_inclusive_ns_prefixes < gen_nb_xmlChar_ptr_ptr;n_inclusive_ns_prefixes++) { + for (n_with_comments = 0;n_with_comments < gen_nb_int;n_with_comments++) { + for (n_doc_txt_ptr = 0;n_doc_txt_ptr < gen_nb_xmlChar_ptr_ptr;n_doc_txt_ptr++) { + mem_base = xmlMemBlocks(); + doc = gen_xmlDocPtr(n_doc, 0); + nodes = gen_xmlNodeSetPtr(n_nodes, 1); + mode = gen_int(n_mode, 2); + inclusive_ns_prefixes = gen_xmlChar_ptr_ptr(n_inclusive_ns_prefixes, 3); + with_comments = gen_int(n_with_comments, 4); + doc_txt_ptr = gen_xmlChar_ptr_ptr(n_doc_txt_ptr, 5); + + ret_val = xmlC14NDocDumpMemory(doc, nodes, mode, inclusive_ns_prefixes, with_comments, doc_txt_ptr); + desret_int(ret_val); + call_tests++; + des_xmlDocPtr(n_doc, doc, 0); + des_xmlNodeSetPtr(n_nodes, nodes, 1); + des_int(n_mode, mode, 2); + des_xmlChar_ptr_ptr(n_inclusive_ns_prefixes, inclusive_ns_prefixes, 3); + des_int(n_with_comments, with_comments, 4); + des_xmlChar_ptr_ptr(n_doc_txt_ptr, doc_txt_ptr, 5); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlC14NDocDumpMemory", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf(" %d", n_nodes); + printf(" %d", n_mode); + printf(" %d", n_inclusive_ns_prefixes); + printf(" %d", n_with_comments); + printf(" %d", n_doc_txt_ptr); + printf("\n"); + } + } + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlC14NDocSave(void) { + int test_ret = 0; + +#if defined(LIBXML_C14N_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + int ret_val; + xmlDocPtr doc; /* the XML document for canonization */ + int n_doc; + xmlNodeSetPtr nodes; /* the nodes set to be included in the canonized image or NULL if all document nodes should be included */ + int n_nodes; + int mode; /* the c14n mode (see @xmlC14NMode) */ + int n_mode; + xmlChar ** 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) */ + int n_inclusive_ns_prefixes; + int with_comments; /* include comments in the result (!=0) or not (==0) */ + int n_with_comments; + const char * filename; /* the filename to store canonical XML image */ + int n_filename; + int compression; /* the compression level (zlib requred): -1 - libxml default, 0 - uncompressed, >0 - compression level */ + int n_compression; + + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_nodes = 0;n_nodes < gen_nb_xmlNodeSetPtr;n_nodes++) { + for (n_mode = 0;n_mode < gen_nb_int;n_mode++) { + for (n_inclusive_ns_prefixes = 0;n_inclusive_ns_prefixes < gen_nb_xmlChar_ptr_ptr;n_inclusive_ns_prefixes++) { + for (n_with_comments = 0;n_with_comments < gen_nb_int;n_with_comments++) { + for (n_filename = 0;n_filename < gen_nb_fileoutput;n_filename++) { + for (n_compression = 0;n_compression < gen_nb_int;n_compression++) { + mem_base = xmlMemBlocks(); + doc = gen_xmlDocPtr(n_doc, 0); + nodes = gen_xmlNodeSetPtr(n_nodes, 1); + mode = gen_int(n_mode, 2); + inclusive_ns_prefixes = gen_xmlChar_ptr_ptr(n_inclusive_ns_prefixes, 3); + with_comments = gen_int(n_with_comments, 4); + filename = gen_fileoutput(n_filename, 5); + compression = gen_int(n_compression, 6); + + ret_val = xmlC14NDocSave(doc, nodes, mode, inclusive_ns_prefixes, with_comments, filename, compression); + desret_int(ret_val); + call_tests++; + des_xmlDocPtr(n_doc, doc, 0); + des_xmlNodeSetPtr(n_nodes, nodes, 1); + des_int(n_mode, mode, 2); + des_xmlChar_ptr_ptr(n_inclusive_ns_prefixes, inclusive_ns_prefixes, 3); + des_int(n_with_comments, with_comments, 4); + des_fileoutput(n_filename, filename, 5); + des_int(n_compression, compression, 6); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlC14NDocSave", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf(" %d", n_nodes); + printf(" %d", n_mode); + printf(" %d", n_inclusive_ns_prefixes); + printf(" %d", n_with_comments); + printf(" %d", n_filename); + printf(" %d", n_compression); + printf("\n"); + } + } + } + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlC14NDocSaveTo(void) { + int test_ret = 0; + +#if defined(LIBXML_C14N_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + int ret_val; + xmlDocPtr doc; /* the XML document for canonization */ + int n_doc; + xmlNodeSetPtr nodes; /* the nodes set to be included in the canonized image or NULL if all document nodes should be included */ + int n_nodes; + int mode; /* the c14n mode (see @xmlC14NMode) */ + int n_mode; + xmlChar ** 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) */ + int n_inclusive_ns_prefixes; + int with_comments; /* include comments in the result (!=0) or not (==0) */ + int n_with_comments; + xmlOutputBufferPtr buf; /* the output buffer to store canonical XML; this buffer MUST have encoder==NULL because C14N requires UTF-8 output */ + int n_buf; + + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_nodes = 0;n_nodes < gen_nb_xmlNodeSetPtr;n_nodes++) { + for (n_mode = 0;n_mode < gen_nb_int;n_mode++) { + for (n_inclusive_ns_prefixes = 0;n_inclusive_ns_prefixes < gen_nb_xmlChar_ptr_ptr;n_inclusive_ns_prefixes++) { + for (n_with_comments = 0;n_with_comments < gen_nb_int;n_with_comments++) { + for (n_buf = 0;n_buf < gen_nb_xmlOutputBufferPtr;n_buf++) { + mem_base = xmlMemBlocks(); + doc = gen_xmlDocPtr(n_doc, 0); + nodes = gen_xmlNodeSetPtr(n_nodes, 1); + mode = gen_int(n_mode, 2); + inclusive_ns_prefixes = gen_xmlChar_ptr_ptr(n_inclusive_ns_prefixes, 3); + with_comments = gen_int(n_with_comments, 4); + buf = gen_xmlOutputBufferPtr(n_buf, 5); + + ret_val = xmlC14NDocSaveTo(doc, nodes, mode, inclusive_ns_prefixes, with_comments, buf); + desret_int(ret_val); + call_tests++; + des_xmlDocPtr(n_doc, doc, 0); + des_xmlNodeSetPtr(n_nodes, nodes, 1); + des_int(n_mode, mode, 2); + des_xmlChar_ptr_ptr(n_inclusive_ns_prefixes, inclusive_ns_prefixes, 3); + des_int(n_with_comments, with_comments, 4); + des_xmlOutputBufferPtr(n_buf, buf, 5); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlC14NDocSaveTo", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf(" %d", n_nodes); + printf(" %d", n_mode); + printf(" %d", n_inclusive_ns_prefixes); + printf(" %d", n_with_comments); + printf(" %d", n_buf); + printf("\n"); + } + } + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlC14NExecute(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + +static int +test_c14n(void) { + int test_ret = 0; + + if (quiet == 0) printf("Testing c14n : 3 of 4 functions ...\n"); + test_ret += test_xmlC14NDocDumpMemory(); + test_ret += test_xmlC14NDocSave(); + test_ret += test_xmlC14NDocSaveTo(); + test_ret += test_xmlC14NExecute(); + + if (test_ret != 0) + printf("Module c14n: %d errors\n", test_ret); + return(test_ret); +} +#ifdef LIBXML_CATALOG_ENABLED + +#define gen_nb_xmlCatalogPtr 1 +static xmlCatalogPtr gen_xmlCatalogPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlCatalogPtr(int no ATTRIBUTE_UNUSED, xmlCatalogPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} +#endif + + +static int +test_xmlACatalogAdd(void) { + int test_ret = 0; + +#if defined(LIBXML_CATALOG_ENABLED) + int mem_base; + int ret_val; + xmlCatalogPtr catal; /* a Catalog */ + int n_catal; + xmlChar * type; /* the type of record to add to the catalog */ + int n_type; + xmlChar * orig; /* the system, public or prefix to match */ + int n_orig; + xmlChar * replace; /* the replacement value for the match */ + int n_replace; + + for (n_catal = 0;n_catal < gen_nb_xmlCatalogPtr;n_catal++) { + for (n_type = 0;n_type < gen_nb_const_xmlChar_ptr;n_type++) { + for (n_orig = 0;n_orig < gen_nb_const_xmlChar_ptr;n_orig++) { + for (n_replace = 0;n_replace < gen_nb_const_xmlChar_ptr;n_replace++) { + mem_base = xmlMemBlocks(); + catal = gen_xmlCatalogPtr(n_catal, 0); + type = gen_const_xmlChar_ptr(n_type, 1); + orig = gen_const_xmlChar_ptr(n_orig, 2); + replace = gen_const_xmlChar_ptr(n_replace, 3); + + ret_val = xmlACatalogAdd(catal, (const xmlChar *)type, (const xmlChar *)orig, (const xmlChar *)replace); + desret_int(ret_val); + call_tests++; + des_xmlCatalogPtr(n_catal, catal, 0); + des_const_xmlChar_ptr(n_type, (const xmlChar *)type, 1); + des_const_xmlChar_ptr(n_orig, (const xmlChar *)orig, 2); + des_const_xmlChar_ptr(n_replace, (const xmlChar *)replace, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlACatalogAdd", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_catal); + printf(" %d", n_type); + printf(" %d", n_orig); + printf(" %d", n_replace); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlACatalogDump(void) { + int test_ret = 0; + +#if defined(LIBXML_CATALOG_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + xmlCatalogPtr catal; /* a Catalog */ + int n_catal; + FILE * out; /* the file. */ + int n_out; + + for (n_catal = 0;n_catal < gen_nb_xmlCatalogPtr;n_catal++) { + for (n_out = 0;n_out < gen_nb_FILE_ptr;n_out++) { + mem_base = xmlMemBlocks(); + catal = gen_xmlCatalogPtr(n_catal, 0); + out = gen_FILE_ptr(n_out, 1); + + xmlACatalogDump(catal, out); + call_tests++; + des_xmlCatalogPtr(n_catal, catal, 0); + des_FILE_ptr(n_out, out, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlACatalogDump", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_catal); + printf(" %d", n_out); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlACatalogRemove(void) { + int test_ret = 0; + +#if defined(LIBXML_CATALOG_ENABLED) + int mem_base; + int ret_val; + xmlCatalogPtr catal; /* a Catalog */ + int n_catal; + xmlChar * value; /* the value to remove */ + int n_value; + + for (n_catal = 0;n_catal < gen_nb_xmlCatalogPtr;n_catal++) { + for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) { + mem_base = xmlMemBlocks(); + catal = gen_xmlCatalogPtr(n_catal, 0); + value = gen_const_xmlChar_ptr(n_value, 1); + + ret_val = xmlACatalogRemove(catal, (const xmlChar *)value); + desret_int(ret_val); + call_tests++; + des_xmlCatalogPtr(n_catal, catal, 0); + des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlACatalogRemove", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_catal); + printf(" %d", n_value); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlACatalogResolve(void) { + int test_ret = 0; + +#if defined(LIBXML_CATALOG_ENABLED) + int mem_base; + xmlChar * ret_val; + xmlCatalogPtr catal; /* a Catalog */ + int n_catal; + xmlChar * pubID; /* the public ID string */ + int n_pubID; + xmlChar * sysID; /* the system ID string */ + int n_sysID; + + for (n_catal = 0;n_catal < gen_nb_xmlCatalogPtr;n_catal++) { + for (n_pubID = 0;n_pubID < gen_nb_const_xmlChar_ptr;n_pubID++) { + for (n_sysID = 0;n_sysID < gen_nb_const_xmlChar_ptr;n_sysID++) { + mem_base = xmlMemBlocks(); + catal = gen_xmlCatalogPtr(n_catal, 0); + pubID = gen_const_xmlChar_ptr(n_pubID, 1); + sysID = gen_const_xmlChar_ptr(n_sysID, 2); + + ret_val = xmlACatalogResolve(catal, (const xmlChar *)pubID, (const xmlChar *)sysID); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_xmlCatalogPtr(n_catal, catal, 0); + des_const_xmlChar_ptr(n_pubID, (const xmlChar *)pubID, 1); + des_const_xmlChar_ptr(n_sysID, (const xmlChar *)sysID, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlACatalogResolve", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_catal); + printf(" %d", n_pubID); + printf(" %d", n_sysID); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlACatalogResolvePublic(void) { + int test_ret = 0; + +#if defined(LIBXML_CATALOG_ENABLED) + int mem_base; + xmlChar * ret_val; + xmlCatalogPtr catal; /* a Catalog */ + int n_catal; + xmlChar * pubID; /* the public ID string */ + int n_pubID; + + for (n_catal = 0;n_catal < gen_nb_xmlCatalogPtr;n_catal++) { + for (n_pubID = 0;n_pubID < gen_nb_const_xmlChar_ptr;n_pubID++) { + mem_base = xmlMemBlocks(); + catal = gen_xmlCatalogPtr(n_catal, 0); + pubID = gen_const_xmlChar_ptr(n_pubID, 1); + + ret_val = xmlACatalogResolvePublic(catal, (const xmlChar *)pubID); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_xmlCatalogPtr(n_catal, catal, 0); + des_const_xmlChar_ptr(n_pubID, (const xmlChar *)pubID, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlACatalogResolvePublic", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_catal); + printf(" %d", n_pubID); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlACatalogResolveSystem(void) { + int test_ret = 0; + +#if defined(LIBXML_CATALOG_ENABLED) + int mem_base; + xmlChar * ret_val; + xmlCatalogPtr catal; /* a Catalog */ + int n_catal; + xmlChar * sysID; /* the system ID string */ + int n_sysID; + + for (n_catal = 0;n_catal < gen_nb_xmlCatalogPtr;n_catal++) { + for (n_sysID = 0;n_sysID < gen_nb_const_xmlChar_ptr;n_sysID++) { + mem_base = xmlMemBlocks(); + catal = gen_xmlCatalogPtr(n_catal, 0); + sysID = gen_const_xmlChar_ptr(n_sysID, 1); + + ret_val = xmlACatalogResolveSystem(catal, (const xmlChar *)sysID); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_xmlCatalogPtr(n_catal, catal, 0); + des_const_xmlChar_ptr(n_sysID, (const xmlChar *)sysID, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlACatalogResolveSystem", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_catal); + printf(" %d", n_sysID); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlACatalogResolveURI(void) { + int test_ret = 0; + +#if defined(LIBXML_CATALOG_ENABLED) + int mem_base; + xmlChar * ret_val; + xmlCatalogPtr catal; /* a Catalog */ + int n_catal; + xmlChar * URI; /* the URI */ + int n_URI; + + for (n_catal = 0;n_catal < gen_nb_xmlCatalogPtr;n_catal++) { + for (n_URI = 0;n_URI < gen_nb_const_xmlChar_ptr;n_URI++) { + mem_base = xmlMemBlocks(); + catal = gen_xmlCatalogPtr(n_catal, 0); + URI = gen_const_xmlChar_ptr(n_URI, 1); + + ret_val = xmlACatalogResolveURI(catal, (const xmlChar *)URI); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_xmlCatalogPtr(n_catal, catal, 0); + des_const_xmlChar_ptr(n_URI, (const xmlChar *)URI, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlACatalogResolveURI", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_catal); + printf(" %d", n_URI); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlCatalogAdd(void) { + int test_ret = 0; + +#if defined(LIBXML_CATALOG_ENABLED) + int mem_base; + int ret_val; + xmlChar * type; /* the type of record to add to the catalog */ + int n_type; + xmlChar * orig; /* the system, public or prefix to match */ + int n_orig; + xmlChar * replace; /* the replacement value for the match */ + int n_replace; + + for (n_type = 0;n_type < gen_nb_const_xmlChar_ptr;n_type++) { + for (n_orig = 0;n_orig < gen_nb_const_xmlChar_ptr;n_orig++) { + for (n_replace = 0;n_replace < gen_nb_const_xmlChar_ptr;n_replace++) { + mem_base = xmlMemBlocks(); + type = gen_const_xmlChar_ptr(n_type, 0); + orig = gen_const_xmlChar_ptr(n_orig, 1); + replace = gen_const_xmlChar_ptr(n_replace, 2); + + ret_val = xmlCatalogAdd((const xmlChar *)type, (const xmlChar *)orig, (const xmlChar *)replace); + desret_int(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_type, (const xmlChar *)type, 0); + des_const_xmlChar_ptr(n_orig, (const xmlChar *)orig, 1); + des_const_xmlChar_ptr(n_replace, (const xmlChar *)replace, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlCatalogAdd", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_type); + printf(" %d", n_orig); + printf(" %d", n_replace); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlCatalogCleanup(void) { + int test_ret = 0; + +#if defined(LIBXML_CATALOG_ENABLED) + + + xmlCatalogCleanup(); + call_tests++; + xmlResetLastError(); + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlCatalogConvert(void) { + int test_ret = 0; + +#if defined(LIBXML_CATALOG_ENABLED) + int ret_val; + + + ret_val = xmlCatalogConvert(); + desret_int(ret_val); + call_tests++; + xmlResetLastError(); + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlCatalogDump(void) { + int test_ret = 0; + +#if defined(LIBXML_CATALOG_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + FILE * out; /* the file. */ + int n_out; + + for (n_out = 0;n_out < gen_nb_FILE_ptr;n_out++) { + mem_base = xmlMemBlocks(); + out = gen_FILE_ptr(n_out, 0); + + xmlCatalogDump(out); + call_tests++; + des_FILE_ptr(n_out, out, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlCatalogDump", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_out); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlCatalogGetDefaults(void) { + int test_ret = 0; + +#if defined(LIBXML_CATALOG_ENABLED) + int mem_base; + xmlCatalogAllow ret_val; + + mem_base = xmlMemBlocks(); + + ret_val = xmlCatalogGetDefaults(); + desret_xmlCatalogAllow(ret_val); + call_tests++; + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlCatalogGetDefaults", + xmlMemBlocks() - mem_base); + test_ret++; + printf("\n"); + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlCatalogIsEmpty(void) { + int test_ret = 0; + +#if defined(LIBXML_CATALOG_ENABLED) + int mem_base; + int ret_val; + xmlCatalogPtr catal; /* should this create an SGML catalog */ + int n_catal; + + for (n_catal = 0;n_catal < gen_nb_xmlCatalogPtr;n_catal++) { + mem_base = xmlMemBlocks(); + catal = gen_xmlCatalogPtr(n_catal, 0); + + ret_val = xmlCatalogIsEmpty(catal); + desret_int(ret_val); + call_tests++; + des_xmlCatalogPtr(n_catal, catal, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlCatalogIsEmpty", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_catal); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlCatalogLocalResolve(void) { + int test_ret = 0; + +#if defined(LIBXML_CATALOG_ENABLED) + int mem_base; + xmlChar * ret_val; + void * catalogs; /* a document's list of catalogs */ + int n_catalogs; + xmlChar * pubID; /* the public ID string */ + int n_pubID; + xmlChar * sysID; /* the system ID string */ + int n_sysID; + + for (n_catalogs = 0;n_catalogs < gen_nb_void_ptr;n_catalogs++) { + for (n_pubID = 0;n_pubID < gen_nb_const_xmlChar_ptr;n_pubID++) { + for (n_sysID = 0;n_sysID < gen_nb_const_xmlChar_ptr;n_sysID++) { + mem_base = xmlMemBlocks(); + catalogs = gen_void_ptr(n_catalogs, 0); + pubID = gen_const_xmlChar_ptr(n_pubID, 1); + sysID = gen_const_xmlChar_ptr(n_sysID, 2); + + ret_val = xmlCatalogLocalResolve(catalogs, (const xmlChar *)pubID, (const xmlChar *)sysID); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_void_ptr(n_catalogs, catalogs, 0); + des_const_xmlChar_ptr(n_pubID, (const xmlChar *)pubID, 1); + des_const_xmlChar_ptr(n_sysID, (const xmlChar *)sysID, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlCatalogLocalResolve", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_catalogs); + printf(" %d", n_pubID); + printf(" %d", n_sysID); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlCatalogLocalResolveURI(void) { + int test_ret = 0; + +#if defined(LIBXML_CATALOG_ENABLED) + int mem_base; + xmlChar * ret_val; + void * catalogs; /* a document's list of catalogs */ + int n_catalogs; + xmlChar * URI; /* the URI */ + int n_URI; + + for (n_catalogs = 0;n_catalogs < gen_nb_void_ptr;n_catalogs++) { + for (n_URI = 0;n_URI < gen_nb_const_xmlChar_ptr;n_URI++) { + mem_base = xmlMemBlocks(); + catalogs = gen_void_ptr(n_catalogs, 0); + URI = gen_const_xmlChar_ptr(n_URI, 1); + + ret_val = xmlCatalogLocalResolveURI(catalogs, (const xmlChar *)URI); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_void_ptr(n_catalogs, catalogs, 0); + des_const_xmlChar_ptr(n_URI, (const xmlChar *)URI, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlCatalogLocalResolveURI", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_catalogs); + printf(" %d", n_URI); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlCatalogRemove(void) { + int test_ret = 0; + +#if defined(LIBXML_CATALOG_ENABLED) + int ret_val; + xmlChar * value; /* the value to remove */ + int n_value; + + for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) { + value = gen_const_xmlChar_ptr(n_value, 0); + + ret_val = xmlCatalogRemove((const xmlChar *)value); + desret_int(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 0); + xmlResetLastError(); + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlCatalogResolve(void) { + int test_ret = 0; + +#if defined(LIBXML_CATALOG_ENABLED) + xmlChar * ret_val; + xmlChar * pubID; /* the public ID string */ + int n_pubID; + xmlChar * sysID; /* the system ID string */ + int n_sysID; + + for (n_pubID = 0;n_pubID < gen_nb_const_xmlChar_ptr;n_pubID++) { + for (n_sysID = 0;n_sysID < gen_nb_const_xmlChar_ptr;n_sysID++) { + pubID = gen_const_xmlChar_ptr(n_pubID, 0); + sysID = gen_const_xmlChar_ptr(n_sysID, 1); + + ret_val = xmlCatalogResolve((const xmlChar *)pubID, (const xmlChar *)sysID); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_pubID, (const xmlChar *)pubID, 0); + des_const_xmlChar_ptr(n_sysID, (const xmlChar *)sysID, 1); + xmlResetLastError(); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlCatalogResolvePublic(void) { + int test_ret = 0; + +#if defined(LIBXML_CATALOG_ENABLED) + int mem_base; + xmlChar * ret_val; + xmlChar * pubID; /* the public ID string */ + int n_pubID; + + for (n_pubID = 0;n_pubID < gen_nb_const_xmlChar_ptr;n_pubID++) { + mem_base = xmlMemBlocks(); + pubID = gen_const_xmlChar_ptr(n_pubID, 0); + + ret_val = xmlCatalogResolvePublic((const xmlChar *)pubID); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_pubID, (const xmlChar *)pubID, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlCatalogResolvePublic", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_pubID); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlCatalogResolveSystem(void) { + int test_ret = 0; + +#if defined(LIBXML_CATALOG_ENABLED) + int mem_base; + xmlChar * ret_val; + xmlChar * sysID; /* the system ID string */ + int n_sysID; + + for (n_sysID = 0;n_sysID < gen_nb_const_xmlChar_ptr;n_sysID++) { + mem_base = xmlMemBlocks(); + sysID = gen_const_xmlChar_ptr(n_sysID, 0); + + ret_val = xmlCatalogResolveSystem((const xmlChar *)sysID); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_sysID, (const xmlChar *)sysID, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlCatalogResolveSystem", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_sysID); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlCatalogResolveURI(void) { + int test_ret = 0; + +#if defined(LIBXML_CATALOG_ENABLED) + int mem_base; + xmlChar * ret_val; + xmlChar * URI; /* the URI */ + int n_URI; + + for (n_URI = 0;n_URI < gen_nb_const_xmlChar_ptr;n_URI++) { + mem_base = xmlMemBlocks(); + URI = gen_const_xmlChar_ptr(n_URI, 0); + + ret_val = xmlCatalogResolveURI((const xmlChar *)URI); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_URI, (const xmlChar *)URI, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlCatalogResolveURI", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_URI); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlCatalogSetDefaultPrefer(void) { + int test_ret = 0; + +#if defined(LIBXML_CATALOG_ENABLED) + int mem_base; + xmlCatalogPrefer ret_val; + xmlCatalogPrefer prefer; /* the default preference for delegation */ + int n_prefer; + + for (n_prefer = 0;n_prefer < gen_nb_xmlCatalogPrefer;n_prefer++) { + mem_base = xmlMemBlocks(); + prefer = gen_xmlCatalogPrefer(n_prefer, 0); + + ret_val = xmlCatalogSetDefaultPrefer(prefer); + desret_xmlCatalogPrefer(ret_val); + call_tests++; + des_xmlCatalogPrefer(n_prefer, prefer, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlCatalogSetDefaultPrefer", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_prefer); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlCatalogSetDefaults(void) { + int test_ret = 0; + +#if defined(LIBXML_CATALOG_ENABLED) + int mem_base; + xmlCatalogAllow allow; /* what catalogs should be accepted */ + int n_allow; + + for (n_allow = 0;n_allow < gen_nb_xmlCatalogAllow;n_allow++) { + mem_base = xmlMemBlocks(); + allow = gen_xmlCatalogAllow(n_allow, 0); + + xmlCatalogSetDefaults(allow); + call_tests++; + des_xmlCatalogAllow(n_allow, allow, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlCatalogSetDefaults", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_allow); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlConvertSGMLCatalog(void) { + int test_ret = 0; + +#if defined(LIBXML_CATALOG_ENABLED) + int mem_base; + int ret_val; + xmlCatalogPtr catal; /* the catalog */ + int n_catal; + + for (n_catal = 0;n_catal < gen_nb_xmlCatalogPtr;n_catal++) { + mem_base = xmlMemBlocks(); + catal = gen_xmlCatalogPtr(n_catal, 0); + + ret_val = xmlConvertSGMLCatalog(catal); + desret_int(ret_val); + call_tests++; + des_xmlCatalogPtr(n_catal, catal, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlConvertSGMLCatalog", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_catal); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlInitializeCatalog(void) { + int test_ret = 0; + +#if defined(LIBXML_CATALOG_ENABLED) + int mem_base; + + mem_base = xmlMemBlocks(); + + xmlInitializeCatalog(); + call_tests++; + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlInitializeCatalog", + xmlMemBlocks() - mem_base); + test_ret++; + printf("\n"); + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlLoadACatalog(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlLoadCatalog(void) { + int test_ret = 0; + +#if defined(LIBXML_CATALOG_ENABLED) + int ret_val; + const char * filename; /* a file path */ + int n_filename; + + for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) { + filename = gen_filepath(n_filename, 0); + + ret_val = xmlLoadCatalog(filename); + desret_int(ret_val); + call_tests++; + des_filepath(n_filename, filename, 0); + xmlResetLastError(); + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlLoadCatalogs(void) { + int test_ret = 0; + +#if defined(LIBXML_CATALOG_ENABLED) + char * pathss; /* a list of directories separated by a colon or a space. */ + int n_pathss; + + for (n_pathss = 0;n_pathss < gen_nb_const_char_ptr;n_pathss++) { + pathss = gen_const_char_ptr(n_pathss, 0); + + xmlLoadCatalogs((const char *)pathss); + call_tests++; + des_const_char_ptr(n_pathss, (const char *)pathss, 0); + xmlResetLastError(); + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlLoadSGMLSuperCatalog(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlNewCatalog(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlParseCatalogFile(void) { + int test_ret = 0; + +#if defined(LIBXML_CATALOG_ENABLED) + int mem_base; + xmlDocPtr ret_val; + const char * filename; /* the filename */ + int n_filename; + + for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) { + mem_base = xmlMemBlocks(); + filename = gen_filepath(n_filename, 0); + + ret_val = xmlParseCatalogFile(filename); + desret_xmlDocPtr(ret_val); + call_tests++; + des_filepath(n_filename, filename, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlParseCatalogFile", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_filename); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + +static int +test_catalog(void) { + int test_ret = 0; + + if (quiet == 0) printf("Testing catalog : 27 of 36 functions ...\n"); + test_ret += test_xmlACatalogAdd(); + test_ret += test_xmlACatalogDump(); + test_ret += test_xmlACatalogRemove(); + test_ret += test_xmlACatalogResolve(); + test_ret += test_xmlACatalogResolvePublic(); + test_ret += test_xmlACatalogResolveSystem(); + test_ret += test_xmlACatalogResolveURI(); + test_ret += test_xmlCatalogAdd(); + test_ret += test_xmlCatalogCleanup(); + test_ret += test_xmlCatalogConvert(); + test_ret += test_xmlCatalogDump(); + test_ret += test_xmlCatalogGetDefaults(); + test_ret += test_xmlCatalogIsEmpty(); + test_ret += test_xmlCatalogLocalResolve(); + test_ret += test_xmlCatalogLocalResolveURI(); + test_ret += test_xmlCatalogRemove(); + test_ret += test_xmlCatalogResolve(); + test_ret += test_xmlCatalogResolvePublic(); + test_ret += test_xmlCatalogResolveSystem(); + test_ret += test_xmlCatalogResolveURI(); + test_ret += test_xmlCatalogSetDefaultPrefer(); + test_ret += test_xmlCatalogSetDefaults(); + test_ret += test_xmlConvertSGMLCatalog(); + test_ret += test_xmlInitializeCatalog(); + test_ret += test_xmlLoadACatalog(); + test_ret += test_xmlLoadCatalog(); + test_ret += test_xmlLoadCatalogs(); + test_ret += test_xmlLoadSGMLSuperCatalog(); + test_ret += test_xmlNewCatalog(); + test_ret += test_xmlParseCatalogFile(); + + if (test_ret != 0) + printf("Module catalog: %d errors\n", test_ret); + return(test_ret); +} + +#define gen_nb_const_xmlChRangeGroup_ptr 1 +static xmlChRangeGroup * gen_const_xmlChRangeGroup_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_const_xmlChRangeGroup_ptr(int no ATTRIBUTE_UNUSED, const xmlChRangeGroup * val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +static int +test_xmlCharInRange(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + unsigned int val; /* character to be validated */ + int n_val; + xmlChRangeGroup * rptr; /* pointer to range to be used to validate */ + int n_rptr; + + for (n_val = 0;n_val < gen_nb_unsigned_int;n_val++) { + for (n_rptr = 0;n_rptr < gen_nb_const_xmlChRangeGroup_ptr;n_rptr++) { + mem_base = xmlMemBlocks(); + val = gen_unsigned_int(n_val, 0); + rptr = gen_const_xmlChRangeGroup_ptr(n_rptr, 1); + + ret_val = xmlCharInRange(val, (const xmlChRangeGroup *)rptr); + desret_int(ret_val); + call_tests++; + des_unsigned_int(n_val, val, 0); + des_const_xmlChRangeGroup_ptr(n_rptr, (const xmlChRangeGroup *)rptr, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlCharInRange", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_val); + printf(" %d", n_rptr); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlIsBaseChar(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + unsigned int ch; /* character to validate */ + int n_ch; + + for (n_ch = 0;n_ch < gen_nb_unsigned_int;n_ch++) { + mem_base = xmlMemBlocks(); + ch = gen_unsigned_int(n_ch, 0); + + ret_val = xmlIsBaseChar(ch); + desret_int(ret_val); + call_tests++; + des_unsigned_int(n_ch, ch, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlIsBaseChar", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ch); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlIsBlank(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + unsigned int ch; /* character to validate */ + int n_ch; + + for (n_ch = 0;n_ch < gen_nb_unsigned_int;n_ch++) { + mem_base = xmlMemBlocks(); + ch = gen_unsigned_int(n_ch, 0); + + ret_val = xmlIsBlank(ch); + desret_int(ret_val); + call_tests++; + des_unsigned_int(n_ch, ch, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlIsBlank", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ch); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlIsChar(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + unsigned int ch; /* character to validate */ + int n_ch; + + for (n_ch = 0;n_ch < gen_nb_unsigned_int;n_ch++) { + mem_base = xmlMemBlocks(); + ch = gen_unsigned_int(n_ch, 0); + + ret_val = xmlIsChar(ch); + desret_int(ret_val); + call_tests++; + des_unsigned_int(n_ch, ch, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlIsChar", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ch); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlIsCombining(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + unsigned int ch; /* character to validate */ + int n_ch; + + for (n_ch = 0;n_ch < gen_nb_unsigned_int;n_ch++) { + mem_base = xmlMemBlocks(); + ch = gen_unsigned_int(n_ch, 0); + + ret_val = xmlIsCombining(ch); + desret_int(ret_val); + call_tests++; + des_unsigned_int(n_ch, ch, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlIsCombining", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ch); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlIsDigit(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + unsigned int ch; /* character to validate */ + int n_ch; + + for (n_ch = 0;n_ch < gen_nb_unsigned_int;n_ch++) { + mem_base = xmlMemBlocks(); + ch = gen_unsigned_int(n_ch, 0); + + ret_val = xmlIsDigit(ch); + desret_int(ret_val); + call_tests++; + des_unsigned_int(n_ch, ch, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlIsDigit", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ch); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlIsExtender(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + unsigned int ch; /* character to validate */ + int n_ch; + + for (n_ch = 0;n_ch < gen_nb_unsigned_int;n_ch++) { + mem_base = xmlMemBlocks(); + ch = gen_unsigned_int(n_ch, 0); + + ret_val = xmlIsExtender(ch); + desret_int(ret_val); + call_tests++; + des_unsigned_int(n_ch, ch, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlIsExtender", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ch); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlIsIdeographic(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + unsigned int ch; /* character to validate */ + int n_ch; + + for (n_ch = 0;n_ch < gen_nb_unsigned_int;n_ch++) { + mem_base = xmlMemBlocks(); + ch = gen_unsigned_int(n_ch, 0); + + ret_val = xmlIsIdeographic(ch); + desret_int(ret_val); + call_tests++; + des_unsigned_int(n_ch, ch, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlIsIdeographic", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ch); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlIsPubidChar(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + unsigned int ch; /* character to validate */ + int n_ch; + + for (n_ch = 0;n_ch < gen_nb_unsigned_int;n_ch++) { + mem_base = xmlMemBlocks(); + ch = gen_unsigned_int(n_ch, 0); + + ret_val = xmlIsPubidChar(ch); + desret_int(ret_val); + call_tests++; + des_unsigned_int(n_ch, ch, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlIsPubidChar", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ch); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + +static int +test_chvalid(void) { + int test_ret = 0; + + if (quiet == 0) printf("Testing chvalid : 9 of 9 functions ...\n"); + test_ret += test_xmlCharInRange(); + test_ret += test_xmlIsBaseChar(); + test_ret += test_xmlIsBlank(); + test_ret += test_xmlIsChar(); + test_ret += test_xmlIsCombining(); + test_ret += test_xmlIsDigit(); + test_ret += test_xmlIsExtender(); + test_ret += test_xmlIsIdeographic(); + test_ret += test_xmlIsPubidChar(); + + if (test_ret != 0) + printf("Module chvalid: %d errors\n", test_ret); + return(test_ret); +} + +static int +test_xmlBoolToText(void) { + int test_ret = 0; + +#if defined(LIBXML_DEBUG_ENABLED) + int mem_base; + const char * ret_val; + int boolval; /* a bool to turn into text */ + int n_boolval; + + for (n_boolval = 0;n_boolval < gen_nb_int;n_boolval++) { + mem_base = xmlMemBlocks(); + boolval = gen_int(n_boolval, 0); + + ret_val = xmlBoolToText(boolval); + desret_const_char_ptr(ret_val); + call_tests++; + des_int(n_boolval, boolval, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlBoolToText", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_boolval); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlDebugCheckDocument(void) { + int test_ret = 0; + +#if defined(LIBXML_DEBUG_ENABLED) + int mem_base; + int ret_val; + FILE * output; /* the FILE * for the output */ + int n_output; + xmlDocPtr doc; /* the document */ + int n_doc; + + for (n_output = 0;n_output < gen_nb_debug_FILE_ptr;n_output++) { + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + mem_base = xmlMemBlocks(); + output = gen_debug_FILE_ptr(n_output, 0); + doc = gen_xmlDocPtr(n_doc, 1); + + ret_val = xmlDebugCheckDocument(output, doc); + desret_int(ret_val); + call_tests++; + des_debug_FILE_ptr(n_output, output, 0); + des_xmlDocPtr(n_doc, doc, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlDebugCheckDocument", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_output); + printf(" %d", n_doc); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlDebugDumpAttr(void) { + int test_ret = 0; + +#if defined(LIBXML_DEBUG_ENABLED) + int mem_base; + FILE * output; /* the FILE * for the output */ + int n_output; + xmlAttrPtr attr; /* the attribute */ + int n_attr; + int depth; /* the indentation level. */ + int n_depth; + + for (n_output = 0;n_output < gen_nb_debug_FILE_ptr;n_output++) { + for (n_attr = 0;n_attr < gen_nb_xmlAttrPtr;n_attr++) { + for (n_depth = 0;n_depth < gen_nb_int;n_depth++) { + mem_base = xmlMemBlocks(); + output = gen_debug_FILE_ptr(n_output, 0); + attr = gen_xmlAttrPtr(n_attr, 1); + depth = gen_int(n_depth, 2); + + xmlDebugDumpAttr(output, attr, depth); + call_tests++; + des_debug_FILE_ptr(n_output, output, 0); + des_xmlAttrPtr(n_attr, attr, 1); + des_int(n_depth, depth, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlDebugDumpAttr", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_output); + printf(" %d", n_attr); + printf(" %d", n_depth); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlDebugDumpAttrList(void) { + int test_ret = 0; + +#if defined(LIBXML_DEBUG_ENABLED) + int mem_base; + FILE * output; /* the FILE * for the output */ + int n_output; + xmlAttrPtr attr; /* the attribute list */ + int n_attr; + int depth; /* the indentation level. */ + int n_depth; + + for (n_output = 0;n_output < gen_nb_debug_FILE_ptr;n_output++) { + for (n_attr = 0;n_attr < gen_nb_xmlAttrPtr;n_attr++) { + for (n_depth = 0;n_depth < gen_nb_int;n_depth++) { + mem_base = xmlMemBlocks(); + output = gen_debug_FILE_ptr(n_output, 0); + attr = gen_xmlAttrPtr(n_attr, 1); + depth = gen_int(n_depth, 2); + + xmlDebugDumpAttrList(output, attr, depth); + call_tests++; + des_debug_FILE_ptr(n_output, output, 0); + des_xmlAttrPtr(n_attr, attr, 1); + des_int(n_depth, depth, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlDebugDumpAttrList", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_output); + printf(" %d", n_attr); + printf(" %d", n_depth); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlDebugDumpDTD(void) { + int test_ret = 0; + +#if defined(LIBXML_DEBUG_ENABLED) + int mem_base; + FILE * output; /* the FILE * for the output */ + int n_output; + xmlDtdPtr dtd; /* the DTD */ + int n_dtd; + + for (n_output = 0;n_output < gen_nb_debug_FILE_ptr;n_output++) { + for (n_dtd = 0;n_dtd < gen_nb_xmlDtdPtr;n_dtd++) { + mem_base = xmlMemBlocks(); + output = gen_debug_FILE_ptr(n_output, 0); + dtd = gen_xmlDtdPtr(n_dtd, 1); + + xmlDebugDumpDTD(output, dtd); + call_tests++; + des_debug_FILE_ptr(n_output, output, 0); + des_xmlDtdPtr(n_dtd, dtd, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlDebugDumpDTD", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_output); + printf(" %d", n_dtd); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlDebugDumpDocument(void) { + int test_ret = 0; + +#if defined(LIBXML_DEBUG_ENABLED) + int mem_base; + FILE * output; /* the FILE * for the output */ + int n_output; + xmlDocPtr doc; /* the document */ + int n_doc; + + for (n_output = 0;n_output < gen_nb_debug_FILE_ptr;n_output++) { + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + mem_base = xmlMemBlocks(); + output = gen_debug_FILE_ptr(n_output, 0); + doc = gen_xmlDocPtr(n_doc, 1); + + xmlDebugDumpDocument(output, doc); + call_tests++; + des_debug_FILE_ptr(n_output, output, 0); + des_xmlDocPtr(n_doc, doc, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlDebugDumpDocument", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_output); + printf(" %d", n_doc); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlDebugDumpDocumentHead(void) { + int test_ret = 0; + +#if defined(LIBXML_DEBUG_ENABLED) + int mem_base; + FILE * output; /* the FILE * for the output */ + int n_output; + xmlDocPtr doc; /* the document */ + int n_doc; + + for (n_output = 0;n_output < gen_nb_debug_FILE_ptr;n_output++) { + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + mem_base = xmlMemBlocks(); + output = gen_debug_FILE_ptr(n_output, 0); + doc = gen_xmlDocPtr(n_doc, 1); + + xmlDebugDumpDocumentHead(output, doc); + call_tests++; + des_debug_FILE_ptr(n_output, output, 0); + des_xmlDocPtr(n_doc, doc, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlDebugDumpDocumentHead", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_output); + printf(" %d", n_doc); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlDebugDumpEntities(void) { + int test_ret = 0; + +#if defined(LIBXML_DEBUG_ENABLED) + int mem_base; + FILE * output; /* the FILE * for the output */ + int n_output; + xmlDocPtr doc; /* the document */ + int n_doc; + + for (n_output = 0;n_output < gen_nb_debug_FILE_ptr;n_output++) { + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + mem_base = xmlMemBlocks(); + output = gen_debug_FILE_ptr(n_output, 0); + doc = gen_xmlDocPtr(n_doc, 1); + + xmlDebugDumpEntities(output, doc); + call_tests++; + des_debug_FILE_ptr(n_output, output, 0); + des_xmlDocPtr(n_doc, doc, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlDebugDumpEntities", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_output); + printf(" %d", n_doc); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlDebugDumpNode(void) { + int test_ret = 0; + +#if defined(LIBXML_DEBUG_ENABLED) + int mem_base; + FILE * output; /* the FILE * for the output */ + int n_output; + xmlNodePtr node; /* the node */ + int n_node; + int depth; /* the indentation level. */ + int n_depth; + + for (n_output = 0;n_output < gen_nb_debug_FILE_ptr;n_output++) { + for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) { + for (n_depth = 0;n_depth < gen_nb_int;n_depth++) { + mem_base = xmlMemBlocks(); + output = gen_debug_FILE_ptr(n_output, 0); + node = gen_xmlNodePtr(n_node, 1); + depth = gen_int(n_depth, 2); + + xmlDebugDumpNode(output, node, depth); + call_tests++; + des_debug_FILE_ptr(n_output, output, 0); + des_xmlNodePtr(n_node, node, 1); + des_int(n_depth, depth, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlDebugDumpNode", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_output); + printf(" %d", n_node); + printf(" %d", n_depth); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlDebugDumpNodeList(void) { + int test_ret = 0; + +#if defined(LIBXML_DEBUG_ENABLED) + int mem_base; + FILE * output; /* the FILE * for the output */ + int n_output; + xmlNodePtr node; /* the node list */ + int n_node; + int depth; /* the indentation level. */ + int n_depth; + + for (n_output = 0;n_output < gen_nb_debug_FILE_ptr;n_output++) { + for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) { + for (n_depth = 0;n_depth < gen_nb_int;n_depth++) { + mem_base = xmlMemBlocks(); + output = gen_debug_FILE_ptr(n_output, 0); + node = gen_xmlNodePtr(n_node, 1); + depth = gen_int(n_depth, 2); + + xmlDebugDumpNodeList(output, node, depth); + call_tests++; + des_debug_FILE_ptr(n_output, output, 0); + des_xmlNodePtr(n_node, node, 1); + des_int(n_depth, depth, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlDebugDumpNodeList", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_output); + printf(" %d", n_node); + printf(" %d", n_depth); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlDebugDumpOneNode(void) { + int test_ret = 0; + +#if defined(LIBXML_DEBUG_ENABLED) + int mem_base; + FILE * output; /* the FILE * for the output */ + int n_output; + xmlNodePtr node; /* the node */ + int n_node; + int depth; /* the indentation level. */ + int n_depth; + + for (n_output = 0;n_output < gen_nb_debug_FILE_ptr;n_output++) { + for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) { + for (n_depth = 0;n_depth < gen_nb_int;n_depth++) { + mem_base = xmlMemBlocks(); + output = gen_debug_FILE_ptr(n_output, 0); + node = gen_xmlNodePtr(n_node, 1); + depth = gen_int(n_depth, 2); + + xmlDebugDumpOneNode(output, node, depth); + call_tests++; + des_debug_FILE_ptr(n_output, output, 0); + des_xmlNodePtr(n_node, node, 1); + des_int(n_depth, depth, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlDebugDumpOneNode", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_output); + printf(" %d", n_node); + printf(" %d", n_depth); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlDebugDumpString(void) { + int test_ret = 0; + +#if defined(LIBXML_DEBUG_ENABLED) + int mem_base; + FILE * output; /* the FILE * for the output */ + int n_output; + xmlChar * str; /* the string */ + int n_str; + + for (n_output = 0;n_output < gen_nb_debug_FILE_ptr;n_output++) { + for (n_str = 0;n_str < gen_nb_const_xmlChar_ptr;n_str++) { + mem_base = xmlMemBlocks(); + output = gen_debug_FILE_ptr(n_output, 0); + str = gen_const_xmlChar_ptr(n_str, 1); + + xmlDebugDumpString(output, (const xmlChar *)str); + call_tests++; + des_debug_FILE_ptr(n_output, output, 0); + des_const_xmlChar_ptr(n_str, (const xmlChar *)str, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlDebugDumpString", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_output); + printf(" %d", n_str); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlLsCountNode(void) { + int test_ret = 0; + +#if defined(LIBXML_DEBUG_ENABLED) + int mem_base; + int ret_val; + xmlNodePtr node; /* the node to count */ + int n_node; + + for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) { + mem_base = xmlMemBlocks(); + node = gen_xmlNodePtr(n_node, 0); + + ret_val = xmlLsCountNode(node); + desret_int(ret_val); + call_tests++; + des_xmlNodePtr(n_node, node, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlLsCountNode", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_node); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlLsOneNode(void) { + int test_ret = 0; + +#if defined(LIBXML_DEBUG_ENABLED) + int mem_base; + FILE * output; /* the FILE * for the output */ + int n_output; + xmlNodePtr node; /* the node to dump */ + int n_node; + + for (n_output = 0;n_output < gen_nb_debug_FILE_ptr;n_output++) { + for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) { + mem_base = xmlMemBlocks(); + output = gen_debug_FILE_ptr(n_output, 0); + node = gen_xmlNodePtr(n_node, 1); + + xmlLsOneNode(output, node); + call_tests++; + des_debug_FILE_ptr(n_output, output, 0); + des_xmlNodePtr(n_node, node, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlLsOneNode", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_output); + printf(" %d", n_node); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +#define gen_nb_char_ptr 1 +static char * gen_char_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_char_ptr(int no ATTRIBUTE_UNUSED, char * val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +static int +test_xmlShell(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlShellBase(void) { + int test_ret = 0; + +#if defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED) + int mem_base; + int ret_val; + xmlShellCtxtPtr ctxt; /* the shell context */ + int n_ctxt; + char * arg; /* unused */ + int n_arg; + xmlNodePtr node; /* a node */ + int n_node; + xmlNodePtr node2; /* unused */ + int n_node2; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlShellCtxtPtr;n_ctxt++) { + for (n_arg = 0;n_arg < gen_nb_char_ptr;n_arg++) { + for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) { + for (n_node2 = 0;n_node2 < gen_nb_xmlNodePtr;n_node2++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlShellCtxtPtr(n_ctxt, 0); + arg = gen_char_ptr(n_arg, 1); + node = gen_xmlNodePtr(n_node, 2); + node2 = gen_xmlNodePtr(n_node2, 3); + + ret_val = xmlShellBase(ctxt, arg, node, node2); + desret_int(ret_val); + call_tests++; + des_xmlShellCtxtPtr(n_ctxt, ctxt, 0); + des_char_ptr(n_arg, arg, 1); + des_xmlNodePtr(n_node, node, 2); + des_xmlNodePtr(n_node2, node2, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlShellBase", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_arg); + printf(" %d", n_node); + printf(" %d", n_node2); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlShellCat(void) { + int test_ret = 0; + +#if defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + int ret_val; + xmlShellCtxtPtr ctxt; /* the shell context */ + int n_ctxt; + char * arg; /* unused */ + int n_arg; + xmlNodePtr node; /* a node */ + int n_node; + xmlNodePtr node2; /* unused */ + int n_node2; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlShellCtxtPtr;n_ctxt++) { + for (n_arg = 0;n_arg < gen_nb_char_ptr;n_arg++) { + for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) { + for (n_node2 = 0;n_node2 < gen_nb_xmlNodePtr;n_node2++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlShellCtxtPtr(n_ctxt, 0); + arg = gen_char_ptr(n_arg, 1); + node = gen_xmlNodePtr(n_node, 2); + node2 = gen_xmlNodePtr(n_node2, 3); + + ret_val = xmlShellCat(ctxt, arg, node, node2); + desret_int(ret_val); + call_tests++; + des_xmlShellCtxtPtr(n_ctxt, ctxt, 0); + des_char_ptr(n_arg, arg, 1); + des_xmlNodePtr(n_node, node, 2); + des_xmlNodePtr(n_node2, node2, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlShellCat", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_arg); + printf(" %d", n_node); + printf(" %d", n_node2); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlShellDir(void) { + int test_ret = 0; + +#if defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED) + int mem_base; + int ret_val; + xmlShellCtxtPtr ctxt; /* the shell context */ + int n_ctxt; + char * arg; /* unused */ + int n_arg; + xmlNodePtr node; /* a node */ + int n_node; + xmlNodePtr node2; /* unused */ + int n_node2; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlShellCtxtPtr;n_ctxt++) { + for (n_arg = 0;n_arg < gen_nb_char_ptr;n_arg++) { + for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) { + for (n_node2 = 0;n_node2 < gen_nb_xmlNodePtr;n_node2++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlShellCtxtPtr(n_ctxt, 0); + arg = gen_char_ptr(n_arg, 1); + node = gen_xmlNodePtr(n_node, 2); + node2 = gen_xmlNodePtr(n_node2, 3); + + ret_val = xmlShellDir(ctxt, arg, node, node2); + desret_int(ret_val); + call_tests++; + des_xmlShellCtxtPtr(n_ctxt, ctxt, 0); + des_char_ptr(n_arg, arg, 1); + des_xmlNodePtr(n_node, node, 2); + des_xmlNodePtr(n_node2, node2, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlShellDir", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_arg); + printf(" %d", n_node); + printf(" %d", n_node2); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlShellDu(void) { + int test_ret = 0; + +#if defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED) + int mem_base; + int ret_val; + xmlShellCtxtPtr ctxt; /* the shell context */ + int n_ctxt; + char * arg; /* unused */ + int n_arg; + xmlNodePtr tree; /* a node defining a subtree */ + int n_tree; + xmlNodePtr node2; /* unused */ + int n_node2; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlShellCtxtPtr;n_ctxt++) { + for (n_arg = 0;n_arg < gen_nb_char_ptr;n_arg++) { + for (n_tree = 0;n_tree < gen_nb_xmlNodePtr;n_tree++) { + for (n_node2 = 0;n_node2 < gen_nb_xmlNodePtr;n_node2++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlShellCtxtPtr(n_ctxt, 0); + arg = gen_char_ptr(n_arg, 1); + tree = gen_xmlNodePtr(n_tree, 2); + node2 = gen_xmlNodePtr(n_node2, 3); + + ret_val = xmlShellDu(ctxt, arg, tree, node2); + desret_int(ret_val); + call_tests++; + des_xmlShellCtxtPtr(n_ctxt, ctxt, 0); + des_char_ptr(n_arg, arg, 1); + des_xmlNodePtr(n_tree, tree, 2); + des_xmlNodePtr(n_node2, node2, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlShellDu", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_arg); + printf(" %d", n_tree); + printf(" %d", n_node2); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlShellList(void) { + int test_ret = 0; + +#if defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED) + int mem_base; + int ret_val; + xmlShellCtxtPtr ctxt; /* the shell context */ + int n_ctxt; + char * arg; /* unused */ + int n_arg; + xmlNodePtr node; /* a node */ + int n_node; + xmlNodePtr node2; /* unused */ + int n_node2; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlShellCtxtPtr;n_ctxt++) { + for (n_arg = 0;n_arg < gen_nb_char_ptr;n_arg++) { + for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) { + for (n_node2 = 0;n_node2 < gen_nb_xmlNodePtr;n_node2++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlShellCtxtPtr(n_ctxt, 0); + arg = gen_char_ptr(n_arg, 1); + node = gen_xmlNodePtr(n_node, 2); + node2 = gen_xmlNodePtr(n_node2, 3); + + ret_val = xmlShellList(ctxt, arg, node, node2); + desret_int(ret_val); + call_tests++; + des_xmlShellCtxtPtr(n_ctxt, ctxt, 0); + des_char_ptr(n_arg, arg, 1); + des_xmlNodePtr(n_node, node, 2); + des_xmlNodePtr(n_node2, node2, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlShellList", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_arg); + printf(" %d", n_node); + printf(" %d", n_node2); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlShellLoad(void) { + int test_ret = 0; + +#if defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED) + int mem_base; + int ret_val; + xmlShellCtxtPtr ctxt; /* the shell context */ + int n_ctxt; + char * filename; /* the file name */ + int n_filename; + xmlNodePtr node; /* unused */ + int n_node; + xmlNodePtr node2; /* unused */ + int n_node2; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlShellCtxtPtr;n_ctxt++) { + for (n_filename = 0;n_filename < gen_nb_char_ptr;n_filename++) { + for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) { + for (n_node2 = 0;n_node2 < gen_nb_xmlNodePtr;n_node2++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlShellCtxtPtr(n_ctxt, 0); + filename = gen_char_ptr(n_filename, 1); + node = gen_xmlNodePtr(n_node, 2); + node2 = gen_xmlNodePtr(n_node2, 3); + + ret_val = xmlShellLoad(ctxt, filename, node, node2); + desret_int(ret_val); + call_tests++; + des_xmlShellCtxtPtr(n_ctxt, ctxt, 0); + des_char_ptr(n_filename, filename, 1); + des_xmlNodePtr(n_node, node, 2); + des_xmlNodePtr(n_node2, node2, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlShellLoad", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_filename); + printf(" %d", n_node); + printf(" %d", n_node2); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlShellPrintXPathResult(void) { + int test_ret = 0; + +#if defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathObjectPtr list; /* a valid result generated by an xpath evaluation */ + int n_list; + + for (n_list = 0;n_list < gen_nb_xmlXPathObjectPtr;n_list++) { + mem_base = xmlMemBlocks(); + list = gen_xmlXPathObjectPtr(n_list, 0); + + xmlShellPrintXPathResult(list); + call_tests++; + des_xmlXPathObjectPtr(n_list, list, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlShellPrintXPathResult", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_list); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlShellPwd(void) { + int test_ret = 0; + +#if defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED) + int mem_base; + int ret_val; + xmlShellCtxtPtr ctxt; /* the shell context */ + int n_ctxt; + char * buffer; /* the output buffer */ + int n_buffer; + xmlNodePtr node; /* a node */ + int n_node; + xmlNodePtr node2; /* unused */ + int n_node2; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlShellCtxtPtr;n_ctxt++) { + for (n_buffer = 0;n_buffer < gen_nb_char_ptr;n_buffer++) { + for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) { + for (n_node2 = 0;n_node2 < gen_nb_xmlNodePtr;n_node2++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlShellCtxtPtr(n_ctxt, 0); + buffer = gen_char_ptr(n_buffer, 1); + node = gen_xmlNodePtr(n_node, 2); + node2 = gen_xmlNodePtr(n_node2, 3); + + ret_val = xmlShellPwd(ctxt, buffer, node, node2); + desret_int(ret_val); + call_tests++; + des_xmlShellCtxtPtr(n_ctxt, ctxt, 0); + des_char_ptr(n_buffer, buffer, 1); + des_xmlNodePtr(n_node, node, 2); + des_xmlNodePtr(n_node2, node2, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlShellPwd", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_buffer); + printf(" %d", n_node); + printf(" %d", n_node2); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlShellSave(void) { + int test_ret = 0; + +#if defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + int ret_val; + xmlShellCtxtPtr ctxt; /* the shell context */ + int n_ctxt; + char * filename; /* the file name (optional) */ + int n_filename; + xmlNodePtr node; /* unused */ + int n_node; + xmlNodePtr node2; /* unused */ + int n_node2; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlShellCtxtPtr;n_ctxt++) { + for (n_filename = 0;n_filename < gen_nb_char_ptr;n_filename++) { + for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) { + for (n_node2 = 0;n_node2 < gen_nb_xmlNodePtr;n_node2++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlShellCtxtPtr(n_ctxt, 0); + filename = gen_char_ptr(n_filename, 1); + node = gen_xmlNodePtr(n_node, 2); + node2 = gen_xmlNodePtr(n_node2, 3); + + ret_val = xmlShellSave(ctxt, filename, node, node2); + desret_int(ret_val); + call_tests++; + des_xmlShellCtxtPtr(n_ctxt, ctxt, 0); + des_char_ptr(n_filename, filename, 1); + des_xmlNodePtr(n_node, node, 2); + des_xmlNodePtr(n_node2, node2, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlShellSave", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_filename); + printf(" %d", n_node); + printf(" %d", n_node2); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlShellValidate(void) { + int test_ret = 0; + +#if defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED) && defined(LIBXML_VALID_ENABLED) + int mem_base; + int ret_val; + xmlShellCtxtPtr ctxt; /* the shell context */ + int n_ctxt; + char * dtd; /* the DTD URI (optional) */ + int n_dtd; + xmlNodePtr node; /* unused */ + int n_node; + xmlNodePtr node2; /* unused */ + int n_node2; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlShellCtxtPtr;n_ctxt++) { + for (n_dtd = 0;n_dtd < gen_nb_char_ptr;n_dtd++) { + for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) { + for (n_node2 = 0;n_node2 < gen_nb_xmlNodePtr;n_node2++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlShellCtxtPtr(n_ctxt, 0); + dtd = gen_char_ptr(n_dtd, 1); + node = gen_xmlNodePtr(n_node, 2); + node2 = gen_xmlNodePtr(n_node2, 3); + + ret_val = xmlShellValidate(ctxt, dtd, node, node2); + desret_int(ret_val); + call_tests++; + des_xmlShellCtxtPtr(n_ctxt, ctxt, 0); + des_char_ptr(n_dtd, dtd, 1); + des_xmlNodePtr(n_node, node, 2); + des_xmlNodePtr(n_node2, node2, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlShellValidate", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_dtd); + printf(" %d", n_node); + printf(" %d", n_node2); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlShellWrite(void) { + int test_ret = 0; + +#if defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + int ret_val; + xmlShellCtxtPtr ctxt; /* the shell context */ + int n_ctxt; + char * filename; /* the file name */ + int n_filename; + xmlNodePtr node; /* a node in the tree */ + int n_node; + xmlNodePtr node2; /* unused */ + int n_node2; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlShellCtxtPtr;n_ctxt++) { + for (n_filename = 0;n_filename < gen_nb_char_ptr;n_filename++) { + for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) { + for (n_node2 = 0;n_node2 < gen_nb_xmlNodePtr;n_node2++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlShellCtxtPtr(n_ctxt, 0); + filename = gen_char_ptr(n_filename, 1); + node = gen_xmlNodePtr(n_node, 2); + node2 = gen_xmlNodePtr(n_node2, 3); + + ret_val = xmlShellWrite(ctxt, filename, node, node2); + desret_int(ret_val); + call_tests++; + des_xmlShellCtxtPtr(n_ctxt, ctxt, 0); + des_char_ptr(n_filename, filename, 1); + des_xmlNodePtr(n_node, node, 2); + des_xmlNodePtr(n_node2, node2, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlShellWrite", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_filename); + printf(" %d", n_node); + printf(" %d", n_node2); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + +static int +test_debugXML(void) { + int test_ret = 0; + + if (quiet == 0) printf("Testing debugXML : 25 of 28 functions ...\n"); + test_ret += test_xmlBoolToText(); + test_ret += test_xmlDebugCheckDocument(); + test_ret += test_xmlDebugDumpAttr(); + test_ret += test_xmlDebugDumpAttrList(); + test_ret += test_xmlDebugDumpDTD(); + test_ret += test_xmlDebugDumpDocument(); + test_ret += test_xmlDebugDumpDocumentHead(); + test_ret += test_xmlDebugDumpEntities(); + test_ret += test_xmlDebugDumpNode(); + test_ret += test_xmlDebugDumpNodeList(); + test_ret += test_xmlDebugDumpOneNode(); + test_ret += test_xmlDebugDumpString(); + test_ret += test_xmlLsCountNode(); + test_ret += test_xmlLsOneNode(); + test_ret += test_xmlShell(); + test_ret += test_xmlShellBase(); + test_ret += test_xmlShellCat(); + test_ret += test_xmlShellDir(); + test_ret += test_xmlShellDu(); + test_ret += test_xmlShellList(); + test_ret += test_xmlShellLoad(); + test_ret += test_xmlShellPrintXPathResult(); + test_ret += test_xmlShellPwd(); + test_ret += test_xmlShellSave(); + test_ret += test_xmlShellValidate(); + test_ret += test_xmlShellWrite(); + + if (test_ret != 0) + printf("Module debugXML: %d errors\n", test_ret); + return(test_ret); +} + +static int +test_xmlDictCleanup(void) { + int test_ret = 0; + + int mem_base; + + mem_base = xmlMemBlocks(); + + xmlDictCleanup(); + call_tests++; + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlDictCleanup", + xmlMemBlocks() - mem_base); + test_ret++; + printf("\n"); + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlDictCreate(void) { + int test_ret = 0; + + int mem_base; + xmlDictPtr ret_val; + + mem_base = xmlMemBlocks(); + + ret_val = xmlDictCreate(); + desret_xmlDictPtr(ret_val); + call_tests++; + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlDictCreate", + xmlMemBlocks() - mem_base); + test_ret++; + printf("\n"); + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlDictCreateSub(void) { + int test_ret = 0; + + int mem_base; + xmlDictPtr ret_val; + xmlDictPtr sub; /* an existing dictionary */ + int n_sub; + + for (n_sub = 0;n_sub < gen_nb_xmlDictPtr;n_sub++) { + mem_base = xmlMemBlocks(); + sub = gen_xmlDictPtr(n_sub, 0); + + ret_val = xmlDictCreateSub(sub); + desret_xmlDictPtr(ret_val); + call_tests++; + des_xmlDictPtr(n_sub, sub, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlDictCreateSub", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_sub); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlDictExists(void) { + int test_ret = 0; + + int mem_base; + const xmlChar * ret_val; + xmlDictPtr dict; /* the dictionary */ + int n_dict; + xmlChar * name; /* the name of the userdata */ + int n_name; + int len; /* the length of the name, if -1 it is recomputed */ + int n_len; + + for (n_dict = 0;n_dict < gen_nb_xmlDictPtr;n_dict++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_len = 0;n_len < gen_nb_int;n_len++) { + mem_base = xmlMemBlocks(); + dict = gen_xmlDictPtr(n_dict, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + len = gen_int(n_len, 2); + + ret_val = xmlDictExists(dict, (const xmlChar *)name, len); + desret_const_xmlChar_ptr(ret_val); + call_tests++; + des_xmlDictPtr(n_dict, dict, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + des_int(n_len, len, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlDictExists", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_dict); + printf(" %d", n_name); + printf(" %d", n_len); + printf("\n"); + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlDictGetUsage(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlDictLookup(void) { + int test_ret = 0; + + int mem_base; + const xmlChar * ret_val; + xmlDictPtr dict; /* the dictionary */ + int n_dict; + xmlChar * name; /* the name of the userdata */ + int n_name; + int len; /* the length of the name, if -1 it is recomputed */ + int n_len; + + for (n_dict = 0;n_dict < gen_nb_xmlDictPtr;n_dict++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_len = 0;n_len < gen_nb_int;n_len++) { + mem_base = xmlMemBlocks(); + dict = gen_xmlDictPtr(n_dict, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + len = gen_int(n_len, 2); + + ret_val = xmlDictLookup(dict, (const xmlChar *)name, len); + desret_const_xmlChar_ptr(ret_val); + call_tests++; + des_xmlDictPtr(n_dict, dict, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + des_int(n_len, len, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlDictLookup", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_dict); + printf(" %d", n_name); + printf(" %d", n_len); + printf("\n"); + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlDictOwns(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlDictPtr dict; /* the dictionary */ + int n_dict; + xmlChar * str; /* the string */ + int n_str; + + for (n_dict = 0;n_dict < gen_nb_xmlDictPtr;n_dict++) { + for (n_str = 0;n_str < gen_nb_const_xmlChar_ptr;n_str++) { + mem_base = xmlMemBlocks(); + dict = gen_xmlDictPtr(n_dict, 0); + str = gen_const_xmlChar_ptr(n_str, 1); + + ret_val = xmlDictOwns(dict, (const xmlChar *)str); + desret_int(ret_val); + call_tests++; + des_xmlDictPtr(n_dict, dict, 0); + des_const_xmlChar_ptr(n_str, (const xmlChar *)str, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlDictOwns", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_dict); + printf(" %d", n_str); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlDictQLookup(void) { + int test_ret = 0; + + int mem_base; + const xmlChar * ret_val; + xmlDictPtr dict; /* the dictionary */ + int n_dict; + xmlChar * prefix; /* the prefix */ + int n_prefix; + xmlChar * name; /* the name */ + int n_name; + + for (n_dict = 0;n_dict < gen_nb_xmlDictPtr;n_dict++) { + for (n_prefix = 0;n_prefix < gen_nb_const_xmlChar_ptr;n_prefix++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + mem_base = xmlMemBlocks(); + dict = gen_xmlDictPtr(n_dict, 0); + prefix = gen_const_xmlChar_ptr(n_prefix, 1); + name = gen_const_xmlChar_ptr(n_name, 2); + + ret_val = xmlDictQLookup(dict, (const xmlChar *)prefix, (const xmlChar *)name); + desret_const_xmlChar_ptr(ret_val); + call_tests++; + des_xmlDictPtr(n_dict, dict, 0); + des_const_xmlChar_ptr(n_prefix, (const xmlChar *)prefix, 1); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlDictQLookup", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_dict); + printf(" %d", n_prefix); + printf(" %d", n_name); + printf("\n"); + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlDictReference(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlDictPtr dict; /* the dictionary */ + int n_dict; + + for (n_dict = 0;n_dict < gen_nb_xmlDictPtr;n_dict++) { + mem_base = xmlMemBlocks(); + dict = gen_xmlDictPtr(n_dict, 0); + + ret_val = xmlDictReference(dict); + xmlDictFree(dict); + desret_int(ret_val); + call_tests++; + des_xmlDictPtr(n_dict, dict, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlDictReference", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_dict); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlDictSetLimit(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlDictSize(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlDictPtr dict; /* the dictionary */ + int n_dict; + + for (n_dict = 0;n_dict < gen_nb_xmlDictPtr;n_dict++) { + mem_base = xmlMemBlocks(); + dict = gen_xmlDictPtr(n_dict, 0); + + ret_val = xmlDictSize(dict); + desret_int(ret_val); + call_tests++; + des_xmlDictPtr(n_dict, dict, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlDictSize", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_dict); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlInitializeDict(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + + mem_base = xmlMemBlocks(); + + ret_val = xmlInitializeDict(); + desret_int(ret_val); + call_tests++; + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlInitializeDict", + xmlMemBlocks() - mem_base); + test_ret++; + printf("\n"); + } + function_tests++; + + return(test_ret); +} + +static int +test_dict(void) { + int test_ret = 0; + + if (quiet == 0) printf("Testing dict : 10 of 13 functions ...\n"); + test_ret += test_xmlDictCleanup(); + test_ret += test_xmlDictCreate(); + test_ret += test_xmlDictCreateSub(); + test_ret += test_xmlDictExists(); + test_ret += test_xmlDictGetUsage(); + test_ret += test_xmlDictLookup(); + test_ret += test_xmlDictOwns(); + test_ret += test_xmlDictQLookup(); + test_ret += test_xmlDictReference(); + test_ret += test_xmlDictSetLimit(); + test_ret += test_xmlDictSize(); + test_ret += test_xmlInitializeDict(); + + if (test_ret != 0) + printf("Module dict: %d errors\n", test_ret); + return(test_ret); +} + +static int +test_UTF8Toisolat1(void) { + int test_ret = 0; + +#if defined(LIBXML_OUTPUT_ENABLED) +#ifdef LIBXML_OUTPUT_ENABLED + int mem_base; + int ret_val; + unsigned char * out; /* a pointer to an array of bytes to store the result */ + int n_out; + int * outlen; /* the length of @out */ + int n_outlen; + unsigned char * in; /* a pointer to an array of UTF-8 chars */ + int n_in; + int * inlen; /* the length of @in */ + int n_inlen; + + for (n_out = 0;n_out < gen_nb_unsigned_char_ptr;n_out++) { + for (n_outlen = 0;n_outlen < gen_nb_int_ptr;n_outlen++) { + for (n_in = 0;n_in < gen_nb_const_unsigned_char_ptr;n_in++) { + for (n_inlen = 0;n_inlen < gen_nb_int_ptr;n_inlen++) { + mem_base = xmlMemBlocks(); + out = gen_unsigned_char_ptr(n_out, 0); + outlen = gen_int_ptr(n_outlen, 1); + in = gen_const_unsigned_char_ptr(n_in, 2); + inlen = gen_int_ptr(n_inlen, 3); + + ret_val = UTF8Toisolat1(out, outlen, (const unsigned char *)in, inlen); + desret_int(ret_val); + call_tests++; + des_unsigned_char_ptr(n_out, out, 0); + des_int_ptr(n_outlen, outlen, 1); + des_const_unsigned_char_ptr(n_in, (const unsigned char *)in, 2); + des_int_ptr(n_inlen, inlen, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in UTF8Toisolat1", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_out); + printf(" %d", n_outlen); + printf(" %d", n_in); + printf(" %d", n_inlen); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif +#endif + + return(test_ret); +} + + +static int +test_isolat1ToUTF8(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + unsigned char * out; /* a pointer to an array of bytes to store the result */ + int n_out; + int * outlen; /* the length of @out */ + int n_outlen; + unsigned char * in; /* a pointer to an array of ISO Latin 1 chars */ + int n_in; + int * inlen; /* the length of @in */ + int n_inlen; + + for (n_out = 0;n_out < gen_nb_unsigned_char_ptr;n_out++) { + for (n_outlen = 0;n_outlen < gen_nb_int_ptr;n_outlen++) { + for (n_in = 0;n_in < gen_nb_const_unsigned_char_ptr;n_in++) { + for (n_inlen = 0;n_inlen < gen_nb_int_ptr;n_inlen++) { + mem_base = xmlMemBlocks(); + out = gen_unsigned_char_ptr(n_out, 0); + outlen = gen_int_ptr(n_outlen, 1); + in = gen_const_unsigned_char_ptr(n_in, 2); + inlen = gen_int_ptr(n_inlen, 3); + + ret_val = isolat1ToUTF8(out, outlen, (const unsigned char *)in, inlen); + desret_int(ret_val); + call_tests++; + des_unsigned_char_ptr(n_out, out, 0); + des_int_ptr(n_outlen, outlen, 1); + des_const_unsigned_char_ptr(n_in, (const unsigned char *)in, 2); + des_int_ptr(n_inlen, inlen, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in isolat1ToUTF8", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_out); + printf(" %d", n_outlen); + printf(" %d", n_in); + printf(" %d", n_inlen); + printf("\n"); + } + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlAddEncodingAlias(void) { + int test_ret = 0; + + int ret_val; + char * name; /* the encoding name as parsed, in UTF-8 format (ASCII actually) */ + int n_name; + char * alias; /* the alias name as parsed, in UTF-8 format (ASCII actually) */ + int n_alias; + + for (n_name = 0;n_name < gen_nb_const_char_ptr;n_name++) { + for (n_alias = 0;n_alias < gen_nb_const_char_ptr;n_alias++) { + name = gen_const_char_ptr(n_name, 0); + alias = gen_const_char_ptr(n_alias, 1); + + ret_val = xmlAddEncodingAlias((const char *)name, (const char *)alias); + desret_int(ret_val); + call_tests++; + des_const_char_ptr(n_name, (const char *)name, 0); + des_const_char_ptr(n_alias, (const char *)alias, 1); + xmlResetLastError(); + } + } + function_tests++; + + return(test_ret); +} + + +#define gen_nb_xmlCharEncodingHandler_ptr 1 +static xmlCharEncodingHandler * gen_xmlCharEncodingHandler_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlCharEncodingHandler_ptr(int no ATTRIBUTE_UNUSED, xmlCharEncodingHandler * val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +static int +test_xmlCharEncCloseFunc(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlCharEncodingHandler * handler; /* char enconding transformation data structure */ + int n_handler; + + for (n_handler = 0;n_handler < gen_nb_xmlCharEncodingHandler_ptr;n_handler++) { + mem_base = xmlMemBlocks(); + handler = gen_xmlCharEncodingHandler_ptr(n_handler, 0); + + ret_val = xmlCharEncCloseFunc(handler); + desret_int(ret_val); + call_tests++; + des_xmlCharEncodingHandler_ptr(n_handler, handler, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlCharEncCloseFunc", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_handler); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlCharEncFirstLine(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlCharEncodingHandler * handler; /* char enconding transformation data structure */ + int n_handler; + xmlBufferPtr out; /* an xmlBuffer for the output. */ + int n_out; + xmlBufferPtr in; /* an xmlBuffer for the input */ + int n_in; + + for (n_handler = 0;n_handler < gen_nb_xmlCharEncodingHandler_ptr;n_handler++) { + for (n_out = 0;n_out < gen_nb_xmlBufferPtr;n_out++) { + for (n_in = 0;n_in < gen_nb_xmlBufferPtr;n_in++) { + mem_base = xmlMemBlocks(); + handler = gen_xmlCharEncodingHandler_ptr(n_handler, 0); + out = gen_xmlBufferPtr(n_out, 1); + in = gen_xmlBufferPtr(n_in, 2); + + ret_val = xmlCharEncFirstLine(handler, out, in); + desret_int(ret_val); + call_tests++; + des_xmlCharEncodingHandler_ptr(n_handler, handler, 0); + des_xmlBufferPtr(n_out, out, 1); + des_xmlBufferPtr(n_in, in, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlCharEncFirstLine", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_handler); + printf(" %d", n_out); + printf(" %d", n_in); + printf("\n"); + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlCharEncInFunc(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlCharEncodingHandler * handler; /* char encoding transformation data structure */ + int n_handler; + xmlBufferPtr out; /* an xmlBuffer for the output. */ + int n_out; + xmlBufferPtr in; /* an xmlBuffer for the input */ + int n_in; + + for (n_handler = 0;n_handler < gen_nb_xmlCharEncodingHandler_ptr;n_handler++) { + for (n_out = 0;n_out < gen_nb_xmlBufferPtr;n_out++) { + for (n_in = 0;n_in < gen_nb_xmlBufferPtr;n_in++) { + mem_base = xmlMemBlocks(); + handler = gen_xmlCharEncodingHandler_ptr(n_handler, 0); + out = gen_xmlBufferPtr(n_out, 1); + in = gen_xmlBufferPtr(n_in, 2); + + ret_val = xmlCharEncInFunc(handler, out, in); + desret_int(ret_val); + call_tests++; + des_xmlCharEncodingHandler_ptr(n_handler, handler, 0); + des_xmlBufferPtr(n_out, out, 1); + des_xmlBufferPtr(n_in, in, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlCharEncInFunc", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_handler); + printf(" %d", n_out); + printf(" %d", n_in); + printf("\n"); + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlCharEncOutFunc(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlCharEncodingHandler * handler; /* char enconding transformation data structure */ + int n_handler; + xmlBufferPtr out; /* an xmlBuffer for the output. */ + int n_out; + xmlBufferPtr in; /* an xmlBuffer for the input */ + int n_in; + + for (n_handler = 0;n_handler < gen_nb_xmlCharEncodingHandler_ptr;n_handler++) { + for (n_out = 0;n_out < gen_nb_xmlBufferPtr;n_out++) { + for (n_in = 0;n_in < gen_nb_xmlBufferPtr;n_in++) { + mem_base = xmlMemBlocks(); + handler = gen_xmlCharEncodingHandler_ptr(n_handler, 0); + out = gen_xmlBufferPtr(n_out, 1); + in = gen_xmlBufferPtr(n_in, 2); + + ret_val = xmlCharEncOutFunc(handler, out, in); + desret_int(ret_val); + call_tests++; + des_xmlCharEncodingHandler_ptr(n_handler, handler, 0); + des_xmlBufferPtr(n_out, out, 1); + des_xmlBufferPtr(n_in, in, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlCharEncOutFunc", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_handler); + printf(" %d", n_out); + printf(" %d", n_in); + printf("\n"); + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlCleanupCharEncodingHandlers(void) { + int test_ret = 0; + + + + xmlCleanupCharEncodingHandlers(); + call_tests++; + xmlResetLastError(); + function_tests++; + + return(test_ret); +} + + +static int +test_xmlCleanupEncodingAliases(void) { + int test_ret = 0; + + int mem_base; + + mem_base = xmlMemBlocks(); + + xmlCleanupEncodingAliases(); + call_tests++; + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlCleanupEncodingAliases", + xmlMemBlocks() - mem_base); + test_ret++; + printf("\n"); + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlDelEncodingAlias(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + char * alias; /* the alias name as parsed, in UTF-8 format (ASCII actually) */ + int n_alias; + + for (n_alias = 0;n_alias < gen_nb_const_char_ptr;n_alias++) { + mem_base = xmlMemBlocks(); + alias = gen_const_char_ptr(n_alias, 0); + + ret_val = xmlDelEncodingAlias((const char *)alias); + desret_int(ret_val); + call_tests++; + des_const_char_ptr(n_alias, (const char *)alias, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlDelEncodingAlias", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_alias); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlDetectCharEncoding(void) { + int test_ret = 0; + + int mem_base; + xmlCharEncoding ret_val; + unsigned char * 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). */ + int n_in; + int len; /* pointer to the length of the buffer */ + int n_len; + + for (n_in = 0;n_in < gen_nb_const_unsigned_char_ptr;n_in++) { + for (n_len = 0;n_len < gen_nb_int;n_len++) { + mem_base = xmlMemBlocks(); + in = gen_const_unsigned_char_ptr(n_in, 0); + len = gen_int(n_len, 1); + + ret_val = xmlDetectCharEncoding((const unsigned char *)in, len); + desret_xmlCharEncoding(ret_val); + call_tests++; + des_const_unsigned_char_ptr(n_in, (const unsigned char *)in, 0); + des_int(n_len, len, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlDetectCharEncoding", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_in); + printf(" %d", n_len); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlFindCharEncodingHandler(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlGetCharEncodingHandler(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlGetCharEncodingName(void) { + int test_ret = 0; + + int mem_base; + const char * ret_val; + xmlCharEncoding enc; /* the encoding */ + int n_enc; + + for (n_enc = 0;n_enc < gen_nb_xmlCharEncoding;n_enc++) { + mem_base = xmlMemBlocks(); + enc = gen_xmlCharEncoding(n_enc, 0); + + ret_val = xmlGetCharEncodingName(enc); + desret_const_char_ptr(ret_val); + call_tests++; + des_xmlCharEncoding(n_enc, enc, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlGetCharEncodingName", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_enc); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlGetEncodingAlias(void) { + int test_ret = 0; + + int mem_base; + const char * ret_val; + char * alias; /* the alias name as parsed, in UTF-8 format (ASCII actually) */ + int n_alias; + + for (n_alias = 0;n_alias < gen_nb_const_char_ptr;n_alias++) { + mem_base = xmlMemBlocks(); + alias = gen_const_char_ptr(n_alias, 0); + + ret_val = xmlGetEncodingAlias((const char *)alias); + desret_const_char_ptr(ret_val); + call_tests++; + des_const_char_ptr(n_alias, (const char *)alias, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlGetEncodingAlias", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_alias); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlInitCharEncodingHandlers(void) { + int test_ret = 0; + + + + xmlInitCharEncodingHandlers(); + call_tests++; + xmlResetLastError(); + function_tests++; + + return(test_ret); +} + + +static int +test_xmlNewCharEncodingHandler(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlParseCharEncoding(void) { + int test_ret = 0; + + int mem_base; + xmlCharEncoding ret_val; + char * name; /* the encoding name as parsed, in UTF-8 format (ASCII actually) */ + int n_name; + + for (n_name = 0;n_name < gen_nb_const_char_ptr;n_name++) { + mem_base = xmlMemBlocks(); + name = gen_const_char_ptr(n_name, 0); + + ret_val = xmlParseCharEncoding((const char *)name); + desret_xmlCharEncoding(ret_val); + call_tests++; + des_const_char_ptr(n_name, (const char *)name, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlParseCharEncoding", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_name); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +#define gen_nb_xmlCharEncodingHandlerPtr 1 +static xmlCharEncodingHandlerPtr gen_xmlCharEncodingHandlerPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlCharEncodingHandlerPtr(int no ATTRIBUTE_UNUSED, xmlCharEncodingHandlerPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +static int +test_xmlRegisterCharEncodingHandler(void) { + int test_ret = 0; + + int mem_base; + xmlCharEncodingHandlerPtr handler; /* the xmlCharEncodingHandlerPtr handler block */ + int n_handler; + + for (n_handler = 0;n_handler < gen_nb_xmlCharEncodingHandlerPtr;n_handler++) { + mem_base = xmlMemBlocks(); + handler = gen_xmlCharEncodingHandlerPtr(n_handler, 0); + + xmlRegisterCharEncodingHandler(handler); + call_tests++; + des_xmlCharEncodingHandlerPtr(n_handler, handler, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlRegisterCharEncodingHandler", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_handler); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + +static int +test_encoding(void) { + int test_ret = 0; + + if (quiet == 0) printf("Testing encoding : 16 of 19 functions ...\n"); + test_ret += test_UTF8Toisolat1(); + test_ret += test_isolat1ToUTF8(); + test_ret += test_xmlAddEncodingAlias(); + test_ret += test_xmlCharEncCloseFunc(); + test_ret += test_xmlCharEncFirstLine(); + test_ret += test_xmlCharEncInFunc(); + test_ret += test_xmlCharEncOutFunc(); + test_ret += test_xmlCleanupCharEncodingHandlers(); + test_ret += test_xmlCleanupEncodingAliases(); + test_ret += test_xmlDelEncodingAlias(); + test_ret += test_xmlDetectCharEncoding(); + test_ret += test_xmlFindCharEncodingHandler(); + test_ret += test_xmlGetCharEncodingHandler(); + test_ret += test_xmlGetCharEncodingName(); + test_ret += test_xmlGetEncodingAlias(); + test_ret += test_xmlInitCharEncodingHandlers(); + test_ret += test_xmlNewCharEncodingHandler(); + test_ret += test_xmlParseCharEncoding(); + test_ret += test_xmlRegisterCharEncodingHandler(); + + if (test_ret != 0) + printf("Module encoding: %d errors\n", test_ret); + return(test_ret); +} + +static int +test_xmlAddDocEntity(void) { + int test_ret = 0; + + int mem_base; + xmlEntityPtr ret_val; + xmlDocPtr doc; /* the document */ + int n_doc; + xmlChar * name; /* the entity name */ + int n_name; + int type; /* the entity type XML_xxx_yyy_ENTITY */ + int n_type; + xmlChar * ExternalID; /* the entity external ID if available */ + int n_ExternalID; + xmlChar * SystemID; /* the entity system ID if available */ + int n_SystemID; + xmlChar * content; /* the entity content */ + int n_content; + + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_type = 0;n_type < gen_nb_int;n_type++) { + for (n_ExternalID = 0;n_ExternalID < gen_nb_const_xmlChar_ptr;n_ExternalID++) { + for (n_SystemID = 0;n_SystemID < gen_nb_const_xmlChar_ptr;n_SystemID++) { + for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) { + mem_base = xmlMemBlocks(); + doc = gen_xmlDocPtr(n_doc, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + type = gen_int(n_type, 2); + ExternalID = gen_const_xmlChar_ptr(n_ExternalID, 3); + SystemID = gen_const_xmlChar_ptr(n_SystemID, 4); + content = gen_const_xmlChar_ptr(n_content, 5); + + ret_val = xmlAddDocEntity(doc, (const xmlChar *)name, type, (const xmlChar *)ExternalID, (const xmlChar *)SystemID, (const xmlChar *)content); + desret_xmlEntityPtr(ret_val); + call_tests++; + des_xmlDocPtr(n_doc, doc, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + des_int(n_type, type, 2); + des_const_xmlChar_ptr(n_ExternalID, (const xmlChar *)ExternalID, 3); + des_const_xmlChar_ptr(n_SystemID, (const xmlChar *)SystemID, 4); + des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 5); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlAddDocEntity", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf(" %d", n_name); + printf(" %d", n_type); + printf(" %d", n_ExternalID); + printf(" %d", n_SystemID); + printf(" %d", n_content); + printf("\n"); + } + } + } + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlAddDtdEntity(void) { + int test_ret = 0; + + int mem_base; + xmlEntityPtr ret_val; + xmlDocPtr doc; /* the document */ + int n_doc; + xmlChar * name; /* the entity name */ + int n_name; + int type; /* the entity type XML_xxx_yyy_ENTITY */ + int n_type; + xmlChar * ExternalID; /* the entity external ID if available */ + int n_ExternalID; + xmlChar * SystemID; /* the entity system ID if available */ + int n_SystemID; + xmlChar * content; /* the entity content */ + int n_content; + + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_type = 0;n_type < gen_nb_int;n_type++) { + for (n_ExternalID = 0;n_ExternalID < gen_nb_const_xmlChar_ptr;n_ExternalID++) { + for (n_SystemID = 0;n_SystemID < gen_nb_const_xmlChar_ptr;n_SystemID++) { + for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) { + mem_base = xmlMemBlocks(); + doc = gen_xmlDocPtr(n_doc, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + type = gen_int(n_type, 2); + ExternalID = gen_const_xmlChar_ptr(n_ExternalID, 3); + SystemID = gen_const_xmlChar_ptr(n_SystemID, 4); + content = gen_const_xmlChar_ptr(n_content, 5); + + ret_val = xmlAddDtdEntity(doc, (const xmlChar *)name, type, (const xmlChar *)ExternalID, (const xmlChar *)SystemID, (const xmlChar *)content); + desret_xmlEntityPtr(ret_val); + call_tests++; + des_xmlDocPtr(n_doc, doc, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + des_int(n_type, type, 2); + des_const_xmlChar_ptr(n_ExternalID, (const xmlChar *)ExternalID, 3); + des_const_xmlChar_ptr(n_SystemID, (const xmlChar *)SystemID, 4); + des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 5); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlAddDtdEntity", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf(" %d", n_name); + printf(" %d", n_type); + printf(" %d", n_ExternalID); + printf(" %d", n_SystemID); + printf(" %d", n_content); + printf("\n"); + } + } + } + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlCleanupPredefinedEntities(void) { + int test_ret = 0; + +#if defined(LIBXML_LEGACY_ENABLED) +#ifdef LIBXML_LEGACY_ENABLED + int mem_base; + + mem_base = xmlMemBlocks(); + + xmlCleanupPredefinedEntities(); + call_tests++; + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlCleanupPredefinedEntities", + xmlMemBlocks() - mem_base); + test_ret++; + printf("\n"); + } + function_tests++; +#endif +#endif + + return(test_ret); +} + + +#define gen_nb_xmlEntitiesTablePtr 1 +static xmlEntitiesTablePtr gen_xmlEntitiesTablePtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlEntitiesTablePtr(int no ATTRIBUTE_UNUSED, xmlEntitiesTablePtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +static int +test_xmlCopyEntitiesTable(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlCreateEntitiesTable(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlDumpEntitiesTable(void) { + int test_ret = 0; + +#if defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + xmlBufferPtr buf; /* An XML buffer. */ + int n_buf; + xmlEntitiesTablePtr table; /* An entity table */ + int n_table; + + for (n_buf = 0;n_buf < gen_nb_xmlBufferPtr;n_buf++) { + for (n_table = 0;n_table < gen_nb_xmlEntitiesTablePtr;n_table++) { + mem_base = xmlMemBlocks(); + buf = gen_xmlBufferPtr(n_buf, 0); + table = gen_xmlEntitiesTablePtr(n_table, 1); + + xmlDumpEntitiesTable(buf, table); + call_tests++; + des_xmlBufferPtr(n_buf, buf, 0); + des_xmlEntitiesTablePtr(n_table, table, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlDumpEntitiesTable", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_buf); + printf(" %d", n_table); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +#define gen_nb_xmlEntityPtr 1 +static xmlEntityPtr gen_xmlEntityPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlEntityPtr(int no ATTRIBUTE_UNUSED, xmlEntityPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +static int +test_xmlDumpEntityDecl(void) { + int test_ret = 0; + +#if defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + xmlBufferPtr buf; /* An XML buffer. */ + int n_buf; + xmlEntityPtr ent; /* An entity table */ + int n_ent; + + for (n_buf = 0;n_buf < gen_nb_xmlBufferPtr;n_buf++) { + for (n_ent = 0;n_ent < gen_nb_xmlEntityPtr;n_ent++) { + mem_base = xmlMemBlocks(); + buf = gen_xmlBufferPtr(n_buf, 0); + ent = gen_xmlEntityPtr(n_ent, 1); + + xmlDumpEntityDecl(buf, ent); + call_tests++; + des_xmlBufferPtr(n_buf, buf, 0); + des_xmlEntityPtr(n_ent, ent, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlDumpEntityDecl", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_buf); + printf(" %d", n_ent); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlEncodeEntitiesReentrant(void) { + int test_ret = 0; + + int mem_base; + xmlChar * ret_val; + xmlDocPtr doc; /* the document containing the string */ + int n_doc; + xmlChar * input; /* A string to convert to XML. */ + int n_input; + + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_input = 0;n_input < gen_nb_const_xmlChar_ptr;n_input++) { + mem_base = xmlMemBlocks(); + doc = gen_xmlDocPtr(n_doc, 0); + input = gen_const_xmlChar_ptr(n_input, 1); + + ret_val = xmlEncodeEntitiesReentrant(doc, (const xmlChar *)input); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_xmlDocPtr(n_doc, doc, 0); + des_const_xmlChar_ptr(n_input, (const xmlChar *)input, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlEncodeEntitiesReentrant", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf(" %d", n_input); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +#define gen_nb_const_xmlDoc_ptr 1 +static xmlDoc * gen_const_xmlDoc_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_const_xmlDoc_ptr(int no ATTRIBUTE_UNUSED, const xmlDoc * val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +static int +test_xmlEncodeSpecialChars(void) { + int test_ret = 0; + + int mem_base; + xmlChar * ret_val; + xmlDoc * doc; /* the document containing the string */ + int n_doc; + xmlChar * input; /* A string to convert to XML. */ + int n_input; + + for (n_doc = 0;n_doc < gen_nb_const_xmlDoc_ptr;n_doc++) { + for (n_input = 0;n_input < gen_nb_const_xmlChar_ptr;n_input++) { + mem_base = xmlMemBlocks(); + doc = gen_const_xmlDoc_ptr(n_doc, 0); + input = gen_const_xmlChar_ptr(n_input, 1); + + ret_val = xmlEncodeSpecialChars((const xmlDoc *)doc, (const xmlChar *)input); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_const_xmlDoc_ptr(n_doc, (const xmlDoc *)doc, 0); + des_const_xmlChar_ptr(n_input, (const xmlChar *)input, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlEncodeSpecialChars", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf(" %d", n_input); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlGetDocEntity(void) { + int test_ret = 0; + + int mem_base; + xmlEntityPtr ret_val; + xmlDoc * doc; /* the document referencing the entity */ + int n_doc; + xmlChar * name; /* the entity name */ + int n_name; + + for (n_doc = 0;n_doc < gen_nb_const_xmlDoc_ptr;n_doc++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + mem_base = xmlMemBlocks(); + doc = gen_const_xmlDoc_ptr(n_doc, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + + ret_val = xmlGetDocEntity((const xmlDoc *)doc, (const xmlChar *)name); + desret_xmlEntityPtr(ret_val); + call_tests++; + des_const_xmlDoc_ptr(n_doc, (const xmlDoc *)doc, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlGetDocEntity", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf(" %d", n_name); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlGetDtdEntity(void) { + int test_ret = 0; + + int mem_base; + xmlEntityPtr ret_val; + xmlDocPtr doc; /* the document referencing the entity */ + int n_doc; + xmlChar * name; /* the entity name */ + int n_name; + + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + mem_base = xmlMemBlocks(); + doc = gen_xmlDocPtr(n_doc, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + + ret_val = xmlGetDtdEntity(doc, (const xmlChar *)name); + desret_xmlEntityPtr(ret_val); + call_tests++; + des_xmlDocPtr(n_doc, doc, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlGetDtdEntity", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf(" %d", n_name); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlGetParameterEntity(void) { + int test_ret = 0; + + int mem_base; + xmlEntityPtr ret_val; + xmlDocPtr doc; /* the document referencing the entity */ + int n_doc; + xmlChar * name; /* the entity name */ + int n_name; + + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + mem_base = xmlMemBlocks(); + doc = gen_xmlDocPtr(n_doc, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + + ret_val = xmlGetParameterEntity(doc, (const xmlChar *)name); + desret_xmlEntityPtr(ret_val); + call_tests++; + des_xmlDocPtr(n_doc, doc, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlGetParameterEntity", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf(" %d", n_name); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlGetPredefinedEntity(void) { + int test_ret = 0; + + int mem_base; + xmlEntityPtr ret_val; + xmlChar * name; /* the entity name */ + int n_name; + + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + mem_base = xmlMemBlocks(); + name = gen_const_xmlChar_ptr(n_name, 0); + + ret_val = xmlGetPredefinedEntity((const xmlChar *)name); + desret_xmlEntityPtr(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlGetPredefinedEntity", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_name); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlInitializePredefinedEntities(void) { + int test_ret = 0; + +#if defined(LIBXML_LEGACY_ENABLED) +#ifdef LIBXML_LEGACY_ENABLED + int mem_base; + + mem_base = xmlMemBlocks(); + + xmlInitializePredefinedEntities(); + call_tests++; + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlInitializePredefinedEntities", + xmlMemBlocks() - mem_base); + test_ret++; + printf("\n"); + } + function_tests++; +#endif +#endif + + return(test_ret); +} + + +static int +test_xmlNewEntity(void) { + int test_ret = 0; + + int mem_base; + xmlEntityPtr ret_val; + xmlDocPtr doc; /* the document */ + int n_doc; + xmlChar * name; /* the entity name */ + int n_name; + int type; /* the entity type XML_xxx_yyy_ENTITY */ + int n_type; + xmlChar * ExternalID; /* the entity external ID if available */ + int n_ExternalID; + xmlChar * SystemID; /* the entity system ID if available */ + int n_SystemID; + xmlChar * content; /* the entity content */ + int n_content; + + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_type = 0;n_type < gen_nb_int;n_type++) { + for (n_ExternalID = 0;n_ExternalID < gen_nb_const_xmlChar_ptr;n_ExternalID++) { + for (n_SystemID = 0;n_SystemID < gen_nb_const_xmlChar_ptr;n_SystemID++) { + for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) { + mem_base = xmlMemBlocks(); + doc = gen_xmlDocPtr(n_doc, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + type = gen_int(n_type, 2); + ExternalID = gen_const_xmlChar_ptr(n_ExternalID, 3); + SystemID = gen_const_xmlChar_ptr(n_SystemID, 4); + content = gen_const_xmlChar_ptr(n_content, 5); + + ret_val = xmlNewEntity(doc, (const xmlChar *)name, type, (const xmlChar *)ExternalID, (const xmlChar *)SystemID, (const xmlChar *)content); + desret_xmlEntityPtr(ret_val); + call_tests++; + des_xmlDocPtr(n_doc, doc, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + des_int(n_type, type, 2); + des_const_xmlChar_ptr(n_ExternalID, (const xmlChar *)ExternalID, 3); + des_const_xmlChar_ptr(n_SystemID, (const xmlChar *)SystemID, 4); + des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 5); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNewEntity", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf(" %d", n_name); + printf(" %d", n_type); + printf(" %d", n_ExternalID); + printf(" %d", n_SystemID); + printf(" %d", n_content); + printf("\n"); + } + } + } + } + } + } + } + function_tests++; + + return(test_ret); +} + +static int +test_entities(void) { + int test_ret = 0; + + if (quiet == 0) printf("Testing entities : 13 of 17 functions ...\n"); + test_ret += test_xmlAddDocEntity(); + test_ret += test_xmlAddDtdEntity(); + test_ret += test_xmlCleanupPredefinedEntities(); + test_ret += test_xmlCopyEntitiesTable(); + test_ret += test_xmlCreateEntitiesTable(); + test_ret += test_xmlDumpEntitiesTable(); + test_ret += test_xmlDumpEntityDecl(); + test_ret += test_xmlEncodeEntitiesReentrant(); + test_ret += test_xmlEncodeSpecialChars(); + test_ret += test_xmlGetDocEntity(); + test_ret += test_xmlGetDtdEntity(); + test_ret += test_xmlGetParameterEntity(); + test_ret += test_xmlGetPredefinedEntity(); + test_ret += test_xmlInitializePredefinedEntities(); + test_ret += test_xmlNewEntity(); + + if (test_ret != 0) + printf("Module entities: %d errors\n", test_ret); + return(test_ret); +} + +static int +test_xmlHashAddEntry(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlHashTablePtr table; /* the hash table */ + int n_table; + xmlChar * name; /* the name of the userdata */ + int n_name; + void * userdata; /* a pointer to the userdata */ + int n_userdata; + + for (n_table = 0;n_table < gen_nb_xmlHashTablePtr;n_table++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_userdata = 0;n_userdata < gen_nb_userdata;n_userdata++) { + mem_base = xmlMemBlocks(); + table = gen_xmlHashTablePtr(n_table, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + userdata = gen_userdata(n_userdata, 2); + + ret_val = xmlHashAddEntry(table, (const xmlChar *)name, userdata); + desret_int(ret_val); + call_tests++; + des_xmlHashTablePtr(n_table, table, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + des_userdata(n_userdata, userdata, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlHashAddEntry", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_table); + printf(" %d", n_name); + printf(" %d", n_userdata); + printf("\n"); + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlHashAddEntry2(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlHashTablePtr table; /* the hash table */ + int n_table; + xmlChar * name; /* the name of the userdata */ + int n_name; + xmlChar * name2; /* a second name of the userdata */ + int n_name2; + void * userdata; /* a pointer to the userdata */ + int n_userdata; + + for (n_table = 0;n_table < gen_nb_xmlHashTablePtr;n_table++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_name2 = 0;n_name2 < gen_nb_const_xmlChar_ptr;n_name2++) { + for (n_userdata = 0;n_userdata < gen_nb_userdata;n_userdata++) { + mem_base = xmlMemBlocks(); + table = gen_xmlHashTablePtr(n_table, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + name2 = gen_const_xmlChar_ptr(n_name2, 2); + userdata = gen_userdata(n_userdata, 3); + + ret_val = xmlHashAddEntry2(table, (const xmlChar *)name, (const xmlChar *)name2, userdata); + desret_int(ret_val); + call_tests++; + des_xmlHashTablePtr(n_table, table, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + des_const_xmlChar_ptr(n_name2, (const xmlChar *)name2, 2); + des_userdata(n_userdata, userdata, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlHashAddEntry2", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_table); + printf(" %d", n_name); + printf(" %d", n_name2); + printf(" %d", n_userdata); + printf("\n"); + } + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlHashAddEntry3(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlHashTablePtr table; /* the hash table */ + int n_table; + xmlChar * name; /* the name of the userdata */ + int n_name; + xmlChar * name2; /* a second name of the userdata */ + int n_name2; + xmlChar * name3; /* a third name of the userdata */ + int n_name3; + void * userdata; /* a pointer to the userdata */ + int n_userdata; + + for (n_table = 0;n_table < gen_nb_xmlHashTablePtr;n_table++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_name2 = 0;n_name2 < gen_nb_const_xmlChar_ptr;n_name2++) { + for (n_name3 = 0;n_name3 < gen_nb_const_xmlChar_ptr;n_name3++) { + for (n_userdata = 0;n_userdata < gen_nb_userdata;n_userdata++) { + mem_base = xmlMemBlocks(); + table = gen_xmlHashTablePtr(n_table, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + name2 = gen_const_xmlChar_ptr(n_name2, 2); + name3 = gen_const_xmlChar_ptr(n_name3, 3); + userdata = gen_userdata(n_userdata, 4); + + ret_val = xmlHashAddEntry3(table, (const xmlChar *)name, (const xmlChar *)name2, (const xmlChar *)name3, userdata); + desret_int(ret_val); + call_tests++; + des_xmlHashTablePtr(n_table, table, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + des_const_xmlChar_ptr(n_name2, (const xmlChar *)name2, 2); + des_const_xmlChar_ptr(n_name3, (const xmlChar *)name3, 3); + des_userdata(n_userdata, userdata, 4); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlHashAddEntry3", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_table); + printf(" %d", n_name); + printf(" %d", n_name2); + printf(" %d", n_name3); + printf(" %d", n_userdata); + printf("\n"); + } + } + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlHashCopy(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlHashCreate(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlHashCreateDict(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlHashLookup(void) { + int test_ret = 0; + + int mem_base; + void * ret_val; + xmlHashTablePtr table; /* the hash table */ + int n_table; + xmlChar * name; /* the name of the userdata */ + int n_name; + + for (n_table = 0;n_table < gen_nb_xmlHashTablePtr;n_table++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + mem_base = xmlMemBlocks(); + table = gen_xmlHashTablePtr(n_table, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + + ret_val = xmlHashLookup(table, (const xmlChar *)name); + desret_void_ptr(ret_val); + call_tests++; + des_xmlHashTablePtr(n_table, table, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlHashLookup", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_table); + printf(" %d", n_name); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlHashLookup2(void) { + int test_ret = 0; + + int mem_base; + void * ret_val; + xmlHashTablePtr table; /* the hash table */ + int n_table; + xmlChar * name; /* the name of the userdata */ + int n_name; + xmlChar * name2; /* a second name of the userdata */ + int n_name2; + + for (n_table = 0;n_table < gen_nb_xmlHashTablePtr;n_table++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_name2 = 0;n_name2 < gen_nb_const_xmlChar_ptr;n_name2++) { + mem_base = xmlMemBlocks(); + table = gen_xmlHashTablePtr(n_table, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + name2 = gen_const_xmlChar_ptr(n_name2, 2); + + ret_val = xmlHashLookup2(table, (const xmlChar *)name, (const xmlChar *)name2); + desret_void_ptr(ret_val); + call_tests++; + des_xmlHashTablePtr(n_table, table, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + des_const_xmlChar_ptr(n_name2, (const xmlChar *)name2, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlHashLookup2", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_table); + printf(" %d", n_name); + printf(" %d", n_name2); + printf("\n"); + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlHashLookup3(void) { + int test_ret = 0; + + int mem_base; + void * ret_val; + xmlHashTablePtr table; /* the hash table */ + int n_table; + xmlChar * name; /* the name of the userdata */ + int n_name; + xmlChar * name2; /* a second name of the userdata */ + int n_name2; + xmlChar * name3; /* a third name of the userdata */ + int n_name3; + + for (n_table = 0;n_table < gen_nb_xmlHashTablePtr;n_table++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_name2 = 0;n_name2 < gen_nb_const_xmlChar_ptr;n_name2++) { + for (n_name3 = 0;n_name3 < gen_nb_const_xmlChar_ptr;n_name3++) { + mem_base = xmlMemBlocks(); + table = gen_xmlHashTablePtr(n_table, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + name2 = gen_const_xmlChar_ptr(n_name2, 2); + name3 = gen_const_xmlChar_ptr(n_name3, 3); + + ret_val = xmlHashLookup3(table, (const xmlChar *)name, (const xmlChar *)name2, (const xmlChar *)name3); + desret_void_ptr(ret_val); + call_tests++; + des_xmlHashTablePtr(n_table, table, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + des_const_xmlChar_ptr(n_name2, (const xmlChar *)name2, 2); + des_const_xmlChar_ptr(n_name3, (const xmlChar *)name3, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlHashLookup3", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_table); + printf(" %d", n_name); + printf(" %d", n_name2); + printf(" %d", n_name3); + printf("\n"); + } + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlHashQLookup(void) { + int test_ret = 0; + + int mem_base; + void * ret_val; + xmlHashTablePtr table; /* the hash table */ + int n_table; + xmlChar * prefix; /* the prefix of the userdata */ + int n_prefix; + xmlChar * name; /* the name of the userdata */ + int n_name; + + for (n_table = 0;n_table < gen_nb_xmlHashTablePtr;n_table++) { + for (n_prefix = 0;n_prefix < gen_nb_const_xmlChar_ptr;n_prefix++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + mem_base = xmlMemBlocks(); + table = gen_xmlHashTablePtr(n_table, 0); + prefix = gen_const_xmlChar_ptr(n_prefix, 1); + name = gen_const_xmlChar_ptr(n_name, 2); + + ret_val = xmlHashQLookup(table, (const xmlChar *)prefix, (const xmlChar *)name); + desret_void_ptr(ret_val); + call_tests++; + des_xmlHashTablePtr(n_table, table, 0); + des_const_xmlChar_ptr(n_prefix, (const xmlChar *)prefix, 1); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlHashQLookup", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_table); + printf(" %d", n_prefix); + printf(" %d", n_name); + printf("\n"); + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlHashQLookup2(void) { + int test_ret = 0; + + int mem_base; + void * ret_val; + xmlHashTablePtr table; /* the hash table */ + int n_table; + xmlChar * prefix; /* the prefix of the userdata */ + int n_prefix; + xmlChar * name; /* the name of the userdata */ + int n_name; + xmlChar * prefix2; /* the second prefix of the userdata */ + int n_prefix2; + xmlChar * name2; /* a second name of the userdata */ + int n_name2; + + for (n_table = 0;n_table < gen_nb_xmlHashTablePtr;n_table++) { + for (n_prefix = 0;n_prefix < gen_nb_const_xmlChar_ptr;n_prefix++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_prefix2 = 0;n_prefix2 < gen_nb_const_xmlChar_ptr;n_prefix2++) { + for (n_name2 = 0;n_name2 < gen_nb_const_xmlChar_ptr;n_name2++) { + mem_base = xmlMemBlocks(); + table = gen_xmlHashTablePtr(n_table, 0); + prefix = gen_const_xmlChar_ptr(n_prefix, 1); + name = gen_const_xmlChar_ptr(n_name, 2); + prefix2 = gen_const_xmlChar_ptr(n_prefix2, 3); + name2 = gen_const_xmlChar_ptr(n_name2, 4); + + ret_val = xmlHashQLookup2(table, (const xmlChar *)prefix, (const xmlChar *)name, (const xmlChar *)prefix2, (const xmlChar *)name2); + desret_void_ptr(ret_val); + call_tests++; + des_xmlHashTablePtr(n_table, table, 0); + des_const_xmlChar_ptr(n_prefix, (const xmlChar *)prefix, 1); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 2); + des_const_xmlChar_ptr(n_prefix2, (const xmlChar *)prefix2, 3); + des_const_xmlChar_ptr(n_name2, (const xmlChar *)name2, 4); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlHashQLookup2", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_table); + printf(" %d", n_prefix); + printf(" %d", n_name); + printf(" %d", n_prefix2); + printf(" %d", n_name2); + printf("\n"); + } + } + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlHashQLookup3(void) { + int test_ret = 0; + + int mem_base; + void * ret_val; + xmlHashTablePtr table; /* the hash table */ + int n_table; + xmlChar * prefix; /* the prefix of the userdata */ + int n_prefix; + xmlChar * name; /* the name of the userdata */ + int n_name; + xmlChar * prefix2; /* the second prefix of the userdata */ + int n_prefix2; + xmlChar * name2; /* a second name of the userdata */ + int n_name2; + xmlChar * prefix3; /* the third prefix of the userdata */ + int n_prefix3; + xmlChar * name3; /* a third name of the userdata */ + int n_name3; + + for (n_table = 0;n_table < gen_nb_xmlHashTablePtr;n_table++) { + for (n_prefix = 0;n_prefix < gen_nb_const_xmlChar_ptr;n_prefix++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_prefix2 = 0;n_prefix2 < gen_nb_const_xmlChar_ptr;n_prefix2++) { + for (n_name2 = 0;n_name2 < gen_nb_const_xmlChar_ptr;n_name2++) { + for (n_prefix3 = 0;n_prefix3 < gen_nb_const_xmlChar_ptr;n_prefix3++) { + for (n_name3 = 0;n_name3 < gen_nb_const_xmlChar_ptr;n_name3++) { + mem_base = xmlMemBlocks(); + table = gen_xmlHashTablePtr(n_table, 0); + prefix = gen_const_xmlChar_ptr(n_prefix, 1); + name = gen_const_xmlChar_ptr(n_name, 2); + prefix2 = gen_const_xmlChar_ptr(n_prefix2, 3); + name2 = gen_const_xmlChar_ptr(n_name2, 4); + prefix3 = gen_const_xmlChar_ptr(n_prefix3, 5); + name3 = gen_const_xmlChar_ptr(n_name3, 6); + + ret_val = xmlHashQLookup3(table, (const xmlChar *)prefix, (const xmlChar *)name, (const xmlChar *)prefix2, (const xmlChar *)name2, (const xmlChar *)prefix3, (const xmlChar *)name3); + desret_void_ptr(ret_val); + call_tests++; + des_xmlHashTablePtr(n_table, table, 0); + des_const_xmlChar_ptr(n_prefix, (const xmlChar *)prefix, 1); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 2); + des_const_xmlChar_ptr(n_prefix2, (const xmlChar *)prefix2, 3); + des_const_xmlChar_ptr(n_name2, (const xmlChar *)name2, 4); + des_const_xmlChar_ptr(n_prefix3, (const xmlChar *)prefix3, 5); + des_const_xmlChar_ptr(n_name3, (const xmlChar *)name3, 6); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlHashQLookup3", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_table); + printf(" %d", n_prefix); + printf(" %d", n_name); + printf(" %d", n_prefix2); + printf(" %d", n_name2); + printf(" %d", n_prefix3); + printf(" %d", n_name3); + printf("\n"); + } + } + } + } + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlHashRemoveEntry(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlHashTablePtr table; /* the hash table */ + int n_table; + xmlChar * name; /* the name of the userdata */ + int n_name; + xmlHashDeallocator f; /* the deallocator function for removed item (if any) */ + int n_f; + + for (n_table = 0;n_table < gen_nb_xmlHashTablePtr;n_table++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_f = 0;n_f < gen_nb_xmlHashDeallocator;n_f++) { + mem_base = xmlMemBlocks(); + table = gen_xmlHashTablePtr(n_table, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + f = gen_xmlHashDeallocator(n_f, 2); + + ret_val = xmlHashRemoveEntry(table, (const xmlChar *)name, f); + desret_int(ret_val); + call_tests++; + des_xmlHashTablePtr(n_table, table, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + des_xmlHashDeallocator(n_f, f, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlHashRemoveEntry", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_table); + printf(" %d", n_name); + printf(" %d", n_f); + printf("\n"); + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlHashRemoveEntry2(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlHashTablePtr table; /* the hash table */ + int n_table; + xmlChar * name; /* the name of the userdata */ + int n_name; + xmlChar * name2; /* a second name of the userdata */ + int n_name2; + xmlHashDeallocator f; /* the deallocator function for removed item (if any) */ + int n_f; + + for (n_table = 0;n_table < gen_nb_xmlHashTablePtr;n_table++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_name2 = 0;n_name2 < gen_nb_const_xmlChar_ptr;n_name2++) { + for (n_f = 0;n_f < gen_nb_xmlHashDeallocator;n_f++) { + mem_base = xmlMemBlocks(); + table = gen_xmlHashTablePtr(n_table, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + name2 = gen_const_xmlChar_ptr(n_name2, 2); + f = gen_xmlHashDeallocator(n_f, 3); + + ret_val = xmlHashRemoveEntry2(table, (const xmlChar *)name, (const xmlChar *)name2, f); + desret_int(ret_val); + call_tests++; + des_xmlHashTablePtr(n_table, table, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + des_const_xmlChar_ptr(n_name2, (const xmlChar *)name2, 2); + des_xmlHashDeallocator(n_f, f, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlHashRemoveEntry2", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_table); + printf(" %d", n_name); + printf(" %d", n_name2); + printf(" %d", n_f); + printf("\n"); + } + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlHashRemoveEntry3(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlHashTablePtr table; /* the hash table */ + int n_table; + xmlChar * name; /* the name of the userdata */ + int n_name; + xmlChar * name2; /* a second name of the userdata */ + int n_name2; + xmlChar * name3; /* a third name of the userdata */ + int n_name3; + xmlHashDeallocator f; /* the deallocator function for removed item (if any) */ + int n_f; + + for (n_table = 0;n_table < gen_nb_xmlHashTablePtr;n_table++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_name2 = 0;n_name2 < gen_nb_const_xmlChar_ptr;n_name2++) { + for (n_name3 = 0;n_name3 < gen_nb_const_xmlChar_ptr;n_name3++) { + for (n_f = 0;n_f < gen_nb_xmlHashDeallocator;n_f++) { + mem_base = xmlMemBlocks(); + table = gen_xmlHashTablePtr(n_table, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + name2 = gen_const_xmlChar_ptr(n_name2, 2); + name3 = gen_const_xmlChar_ptr(n_name3, 3); + f = gen_xmlHashDeallocator(n_f, 4); + + ret_val = xmlHashRemoveEntry3(table, (const xmlChar *)name, (const xmlChar *)name2, (const xmlChar *)name3, f); + desret_int(ret_val); + call_tests++; + des_xmlHashTablePtr(n_table, table, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + des_const_xmlChar_ptr(n_name2, (const xmlChar *)name2, 2); + des_const_xmlChar_ptr(n_name3, (const xmlChar *)name3, 3); + des_xmlHashDeallocator(n_f, f, 4); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlHashRemoveEntry3", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_table); + printf(" %d", n_name); + printf(" %d", n_name2); + printf(" %d", n_name3); + printf(" %d", n_f); + printf("\n"); + } + } + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlHashScan(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlHashScan3(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlHashScanFull(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlHashScanFull3(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlHashSize(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlHashTablePtr table; /* the hash table */ + int n_table; + + for (n_table = 0;n_table < gen_nb_xmlHashTablePtr;n_table++) { + mem_base = xmlMemBlocks(); + table = gen_xmlHashTablePtr(n_table, 0); + + ret_val = xmlHashSize(table); + desret_int(ret_val); + call_tests++; + des_xmlHashTablePtr(n_table, table, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlHashSize", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_table); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlHashUpdateEntry(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlHashTablePtr table; /* the hash table */ + int n_table; + xmlChar * name; /* the name of the userdata */ + int n_name; + void * userdata; /* a pointer to the userdata */ + int n_userdata; + xmlHashDeallocator f; /* the deallocator function for replaced item (if any) */ + int n_f; + + for (n_table = 0;n_table < gen_nb_xmlHashTablePtr;n_table++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_userdata = 0;n_userdata < gen_nb_userdata;n_userdata++) { + for (n_f = 0;n_f < gen_nb_xmlHashDeallocator;n_f++) { + mem_base = xmlMemBlocks(); + table = gen_xmlHashTablePtr(n_table, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + userdata = gen_userdata(n_userdata, 2); + f = gen_xmlHashDeallocator(n_f, 3); + + ret_val = xmlHashUpdateEntry(table, (const xmlChar *)name, userdata, f); + desret_int(ret_val); + call_tests++; + des_xmlHashTablePtr(n_table, table, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + des_userdata(n_userdata, userdata, 2); + des_xmlHashDeallocator(n_f, f, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlHashUpdateEntry", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_table); + printf(" %d", n_name); + printf(" %d", n_userdata); + printf(" %d", n_f); + printf("\n"); + } + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlHashUpdateEntry2(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlHashTablePtr table; /* the hash table */ + int n_table; + xmlChar * name; /* the name of the userdata */ + int n_name; + xmlChar * name2; /* a second name of the userdata */ + int n_name2; + void * userdata; /* a pointer to the userdata */ + int n_userdata; + xmlHashDeallocator f; /* the deallocator function for replaced item (if any) */ + int n_f; + + for (n_table = 0;n_table < gen_nb_xmlHashTablePtr;n_table++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_name2 = 0;n_name2 < gen_nb_const_xmlChar_ptr;n_name2++) { + for (n_userdata = 0;n_userdata < gen_nb_userdata;n_userdata++) { + for (n_f = 0;n_f < gen_nb_xmlHashDeallocator;n_f++) { + mem_base = xmlMemBlocks(); + table = gen_xmlHashTablePtr(n_table, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + name2 = gen_const_xmlChar_ptr(n_name2, 2); + userdata = gen_userdata(n_userdata, 3); + f = gen_xmlHashDeallocator(n_f, 4); + + ret_val = xmlHashUpdateEntry2(table, (const xmlChar *)name, (const xmlChar *)name2, userdata, f); + desret_int(ret_val); + call_tests++; + des_xmlHashTablePtr(n_table, table, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + des_const_xmlChar_ptr(n_name2, (const xmlChar *)name2, 2); + des_userdata(n_userdata, userdata, 3); + des_xmlHashDeallocator(n_f, f, 4); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlHashUpdateEntry2", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_table); + printf(" %d", n_name); + printf(" %d", n_name2); + printf(" %d", n_userdata); + printf(" %d", n_f); + printf("\n"); + } + } + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlHashUpdateEntry3(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlHashTablePtr table; /* the hash table */ + int n_table; + xmlChar * name; /* the name of the userdata */ + int n_name; + xmlChar * name2; /* a second name of the userdata */ + int n_name2; + xmlChar * name3; /* a third name of the userdata */ + int n_name3; + void * userdata; /* a pointer to the userdata */ + int n_userdata; + xmlHashDeallocator f; /* the deallocator function for replaced item (if any) */ + int n_f; + + for (n_table = 0;n_table < gen_nb_xmlHashTablePtr;n_table++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_name2 = 0;n_name2 < gen_nb_const_xmlChar_ptr;n_name2++) { + for (n_name3 = 0;n_name3 < gen_nb_const_xmlChar_ptr;n_name3++) { + for (n_userdata = 0;n_userdata < gen_nb_userdata;n_userdata++) { + for (n_f = 0;n_f < gen_nb_xmlHashDeallocator;n_f++) { + mem_base = xmlMemBlocks(); + table = gen_xmlHashTablePtr(n_table, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + name2 = gen_const_xmlChar_ptr(n_name2, 2); + name3 = gen_const_xmlChar_ptr(n_name3, 3); + userdata = gen_userdata(n_userdata, 4); + f = gen_xmlHashDeallocator(n_f, 5); + + ret_val = xmlHashUpdateEntry3(table, (const xmlChar *)name, (const xmlChar *)name2, (const xmlChar *)name3, userdata, f); + desret_int(ret_val); + call_tests++; + des_xmlHashTablePtr(n_table, table, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + des_const_xmlChar_ptr(n_name2, (const xmlChar *)name2, 2); + des_const_xmlChar_ptr(n_name3, (const xmlChar *)name3, 3); + des_userdata(n_userdata, userdata, 4); + des_xmlHashDeallocator(n_f, f, 5); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlHashUpdateEntry3", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_table); + printf(" %d", n_name); + printf(" %d", n_name2); + printf(" %d", n_name3); + printf(" %d", n_userdata); + printf(" %d", n_f); + printf("\n"); + } + } + } + } + } + } + } + function_tests++; + + return(test_ret); +} + +static int +test_hash(void) { + int test_ret = 0; + + if (quiet == 0) printf("Testing hash : 16 of 24 functions ...\n"); + test_ret += test_xmlHashAddEntry(); + test_ret += test_xmlHashAddEntry2(); + test_ret += test_xmlHashAddEntry3(); + test_ret += test_xmlHashCopy(); + test_ret += test_xmlHashCreate(); + test_ret += test_xmlHashCreateDict(); + test_ret += test_xmlHashLookup(); + test_ret += test_xmlHashLookup2(); + test_ret += test_xmlHashLookup3(); + test_ret += test_xmlHashQLookup(); + test_ret += test_xmlHashQLookup2(); + test_ret += test_xmlHashQLookup3(); + test_ret += test_xmlHashRemoveEntry(); + test_ret += test_xmlHashRemoveEntry2(); + test_ret += test_xmlHashRemoveEntry3(); + test_ret += test_xmlHashScan(); + test_ret += test_xmlHashScan3(); + test_ret += test_xmlHashScanFull(); + test_ret += test_xmlHashScanFull3(); + test_ret += test_xmlHashSize(); + test_ret += test_xmlHashUpdateEntry(); + test_ret += test_xmlHashUpdateEntry2(); + test_ret += test_xmlHashUpdateEntry3(); + + if (test_ret != 0) + printf("Module hash: %d errors\n", test_ret); + return(test_ret); +} + +#define gen_nb_xmlLinkPtr 1 +static xmlLinkPtr gen_xmlLinkPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlLinkPtr(int no ATTRIBUTE_UNUSED, xmlLinkPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +static int +test_xmlLinkGetData(void) { + int test_ret = 0; + + int mem_base; + void * ret_val; + xmlLinkPtr lk; /* a link */ + int n_lk; + + for (n_lk = 0;n_lk < gen_nb_xmlLinkPtr;n_lk++) { + mem_base = xmlMemBlocks(); + lk = gen_xmlLinkPtr(n_lk, 0); + + ret_val = xmlLinkGetData(lk); + desret_void_ptr(ret_val); + call_tests++; + des_xmlLinkPtr(n_lk, lk, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlLinkGetData", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_lk); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlListAppend(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlListPtr l; /* a list */ + int n_l; + void * data; /* the data */ + int n_data; + + for (n_l = 0;n_l < gen_nb_xmlListPtr;n_l++) { + for (n_data = 0;n_data < gen_nb_userdata;n_data++) { + mem_base = xmlMemBlocks(); + l = gen_xmlListPtr(n_l, 0); + data = gen_userdata(n_data, 1); + + ret_val = xmlListAppend(l, data); + desret_int(ret_val); + call_tests++; + des_xmlListPtr(n_l, l, 0); + des_userdata(n_data, data, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlListAppend", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_l); + printf(" %d", n_data); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlListClear(void) { + int test_ret = 0; + + int mem_base; + xmlListPtr l; /* a list */ + int n_l; + + for (n_l = 0;n_l < gen_nb_xmlListPtr;n_l++) { + mem_base = xmlMemBlocks(); + l = gen_xmlListPtr(n_l, 0); + + xmlListClear(l); + call_tests++; + des_xmlListPtr(n_l, l, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlListClear", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_l); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +#define gen_nb_const_xmlListPtr 1 +static xmlListPtr gen_const_xmlListPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_const_xmlListPtr(int no ATTRIBUTE_UNUSED, const xmlListPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +static int +test_xmlListCopy(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlListPtr cur; /* the new list */ + int n_cur; + xmlListPtr old; /* the old list */ + int n_old; + + for (n_cur = 0;n_cur < gen_nb_xmlListPtr;n_cur++) { + for (n_old = 0;n_old < gen_nb_const_xmlListPtr;n_old++) { + mem_base = xmlMemBlocks(); + cur = gen_xmlListPtr(n_cur, 0); + old = gen_const_xmlListPtr(n_old, 1); + + ret_val = xmlListCopy(cur, (const xmlListPtr)old); + desret_int(ret_val); + call_tests++; + des_xmlListPtr(n_cur, cur, 0); + des_const_xmlListPtr(n_old, (const xmlListPtr)old, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlListCopy", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_cur); + printf(" %d", n_old); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlListCreate(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlListDup(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlListEmpty(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlListPtr l; /* a list */ + int n_l; + + for (n_l = 0;n_l < gen_nb_xmlListPtr;n_l++) { + mem_base = xmlMemBlocks(); + l = gen_xmlListPtr(n_l, 0); + + ret_val = xmlListEmpty(l); + desret_int(ret_val); + call_tests++; + des_xmlListPtr(n_l, l, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlListEmpty", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_l); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlListEnd(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlListFront(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlListInsert(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlListPtr l; /* a list */ + int n_l; + void * data; /* the data */ + int n_data; + + for (n_l = 0;n_l < gen_nb_xmlListPtr;n_l++) { + for (n_data = 0;n_data < gen_nb_userdata;n_data++) { + mem_base = xmlMemBlocks(); + l = gen_xmlListPtr(n_l, 0); + data = gen_userdata(n_data, 1); + + ret_val = xmlListInsert(l, data); + desret_int(ret_val); + call_tests++; + des_xmlListPtr(n_l, l, 0); + des_userdata(n_data, data, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlListInsert", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_l); + printf(" %d", n_data); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlListMerge(void) { + int test_ret = 0; + + int mem_base; + xmlListPtr l1; /* the original list */ + int n_l1; + xmlListPtr l2; /* the new list */ + int n_l2; + + for (n_l1 = 0;n_l1 < gen_nb_xmlListPtr;n_l1++) { + for (n_l2 = 0;n_l2 < gen_nb_xmlListPtr;n_l2++) { + mem_base = xmlMemBlocks(); + l1 = gen_xmlListPtr(n_l1, 0); + l2 = gen_xmlListPtr(n_l2, 1); + + xmlListMerge(l1, l2); + call_tests++; + des_xmlListPtr(n_l1, l1, 0); + des_xmlListPtr(n_l2, l2, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlListMerge", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_l1); + printf(" %d", n_l2); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlListPopBack(void) { + int test_ret = 0; + + int mem_base; + xmlListPtr l; /* a list */ + int n_l; + + for (n_l = 0;n_l < gen_nb_xmlListPtr;n_l++) { + mem_base = xmlMemBlocks(); + l = gen_xmlListPtr(n_l, 0); + + xmlListPopBack(l); + call_tests++; + des_xmlListPtr(n_l, l, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlListPopBack", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_l); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlListPopFront(void) { + int test_ret = 0; + + int mem_base; + xmlListPtr l; /* a list */ + int n_l; + + for (n_l = 0;n_l < gen_nb_xmlListPtr;n_l++) { + mem_base = xmlMemBlocks(); + l = gen_xmlListPtr(n_l, 0); + + xmlListPopFront(l); + call_tests++; + des_xmlListPtr(n_l, l, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlListPopFront", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_l); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlListPushBack(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlListPtr l; /* a list */ + int n_l; + void * data; /* new data */ + int n_data; + + for (n_l = 0;n_l < gen_nb_xmlListPtr;n_l++) { + for (n_data = 0;n_data < gen_nb_userdata;n_data++) { + mem_base = xmlMemBlocks(); + l = gen_xmlListPtr(n_l, 0); + data = gen_userdata(n_data, 1); + + ret_val = xmlListPushBack(l, data); + desret_int(ret_val); + call_tests++; + des_xmlListPtr(n_l, l, 0); + des_userdata(n_data, data, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlListPushBack", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_l); + printf(" %d", n_data); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlListPushFront(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlListPtr l; /* a list */ + int n_l; + void * data; /* new data */ + int n_data; + + for (n_l = 0;n_l < gen_nb_xmlListPtr;n_l++) { + for (n_data = 0;n_data < gen_nb_userdata;n_data++) { + mem_base = xmlMemBlocks(); + l = gen_xmlListPtr(n_l, 0); + data = gen_userdata(n_data, 1); + + ret_val = xmlListPushFront(l, data); + desret_int(ret_val); + call_tests++; + des_xmlListPtr(n_l, l, 0); + des_userdata(n_data, data, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlListPushFront", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_l); + printf(" %d", n_data); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlListRemoveAll(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlListPtr l; /* a list */ + int n_l; + void * data; /* list data */ + int n_data; + + for (n_l = 0;n_l < gen_nb_xmlListPtr;n_l++) { + for (n_data = 0;n_data < gen_nb_userdata;n_data++) { + mem_base = xmlMemBlocks(); + l = gen_xmlListPtr(n_l, 0); + data = gen_userdata(n_data, 1); + + ret_val = xmlListRemoveAll(l, data); + desret_int(ret_val); + call_tests++; + des_xmlListPtr(n_l, l, 0); + des_userdata(n_data, data, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlListRemoveAll", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_l); + printf(" %d", n_data); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlListRemoveFirst(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlListPtr l; /* a list */ + int n_l; + void * data; /* list data */ + int n_data; + + for (n_l = 0;n_l < gen_nb_xmlListPtr;n_l++) { + for (n_data = 0;n_data < gen_nb_userdata;n_data++) { + mem_base = xmlMemBlocks(); + l = gen_xmlListPtr(n_l, 0); + data = gen_userdata(n_data, 1); + + ret_val = xmlListRemoveFirst(l, data); + desret_int(ret_val); + call_tests++; + des_xmlListPtr(n_l, l, 0); + des_userdata(n_data, data, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlListRemoveFirst", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_l); + printf(" %d", n_data); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlListRemoveLast(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlListPtr l; /* a list */ + int n_l; + void * data; /* list data */ + int n_data; + + for (n_l = 0;n_l < gen_nb_xmlListPtr;n_l++) { + for (n_data = 0;n_data < gen_nb_userdata;n_data++) { + mem_base = xmlMemBlocks(); + l = gen_xmlListPtr(n_l, 0); + data = gen_userdata(n_data, 1); + + ret_val = xmlListRemoveLast(l, data); + desret_int(ret_val); + call_tests++; + des_xmlListPtr(n_l, l, 0); + des_userdata(n_data, data, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlListRemoveLast", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_l); + printf(" %d", n_data); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlListReverse(void) { + int test_ret = 0; + + int mem_base; + xmlListPtr l; /* a list */ + int n_l; + + for (n_l = 0;n_l < gen_nb_xmlListPtr;n_l++) { + mem_base = xmlMemBlocks(); + l = gen_xmlListPtr(n_l, 0); + + xmlListReverse(l); + call_tests++; + des_xmlListPtr(n_l, l, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlListReverse", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_l); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlListReverseSearch(void) { + int test_ret = 0; + + int mem_base; + void * ret_val; + xmlListPtr l; /* a list */ + int n_l; + void * data; /* a search value */ + int n_data; + + for (n_l = 0;n_l < gen_nb_xmlListPtr;n_l++) { + for (n_data = 0;n_data < gen_nb_userdata;n_data++) { + mem_base = xmlMemBlocks(); + l = gen_xmlListPtr(n_l, 0); + data = gen_userdata(n_data, 1); + + ret_val = xmlListReverseSearch(l, data); + desret_void_ptr(ret_val); + call_tests++; + des_xmlListPtr(n_l, l, 0); + des_userdata(n_data, data, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlListReverseSearch", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_l); + printf(" %d", n_data); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlListReverseWalk(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlListSearch(void) { + int test_ret = 0; + + int mem_base; + void * ret_val; + xmlListPtr l; /* a list */ + int n_l; + void * data; /* a search value */ + int n_data; + + for (n_l = 0;n_l < gen_nb_xmlListPtr;n_l++) { + for (n_data = 0;n_data < gen_nb_userdata;n_data++) { + mem_base = xmlMemBlocks(); + l = gen_xmlListPtr(n_l, 0); + data = gen_userdata(n_data, 1); + + ret_val = xmlListSearch(l, data); + desret_void_ptr(ret_val); + call_tests++; + des_xmlListPtr(n_l, l, 0); + des_userdata(n_data, data, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlListSearch", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_l); + printf(" %d", n_data); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlListSize(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlListPtr l; /* a list */ + int n_l; + + for (n_l = 0;n_l < gen_nb_xmlListPtr;n_l++) { + mem_base = xmlMemBlocks(); + l = gen_xmlListPtr(n_l, 0); + + ret_val = xmlListSize(l); + desret_int(ret_val); + call_tests++; + des_xmlListPtr(n_l, l, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlListSize", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_l); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlListSort(void) { + int test_ret = 0; + + int mem_base; + xmlListPtr l; /* a list */ + int n_l; + + for (n_l = 0;n_l < gen_nb_xmlListPtr;n_l++) { + mem_base = xmlMemBlocks(); + l = gen_xmlListPtr(n_l, 0); + + xmlListSort(l); + call_tests++; + des_xmlListPtr(n_l, l, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlListSort", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_l); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlListWalk(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + +static int +test_list(void) { + int test_ret = 0; + + if (quiet == 0) printf("Testing list : 19 of 26 functions ...\n"); + test_ret += test_xmlLinkGetData(); + test_ret += test_xmlListAppend(); + test_ret += test_xmlListClear(); + test_ret += test_xmlListCopy(); + test_ret += test_xmlListCreate(); + test_ret += test_xmlListDup(); + test_ret += test_xmlListEmpty(); + test_ret += test_xmlListEnd(); + test_ret += test_xmlListFront(); + test_ret += test_xmlListInsert(); + test_ret += test_xmlListMerge(); + test_ret += test_xmlListPopBack(); + test_ret += test_xmlListPopFront(); + test_ret += test_xmlListPushBack(); + test_ret += test_xmlListPushFront(); + test_ret += test_xmlListRemoveAll(); + test_ret += test_xmlListRemoveFirst(); + test_ret += test_xmlListRemoveLast(); + test_ret += test_xmlListReverse(); + test_ret += test_xmlListReverseSearch(); + test_ret += test_xmlListReverseWalk(); + test_ret += test_xmlListSearch(); + test_ret += test_xmlListSize(); + test_ret += test_xmlListSort(); + test_ret += test_xmlListWalk(); + + if (test_ret != 0) + printf("Module list: %d errors\n", test_ret); + return(test_ret); +} + +static int +test_xmlNanoFTPCheckResponse(void) { + int test_ret = 0; + +#if defined(LIBXML_FTP_ENABLED) + int mem_base; + int ret_val; + void * ctx; /* an FTP context */ + int n_ctx; + + for (n_ctx = 0;n_ctx < gen_nb_xmlNanoFTPCtxtPtr;n_ctx++) { + mem_base = xmlMemBlocks(); + ctx = gen_xmlNanoFTPCtxtPtr(n_ctx, 0); + + ret_val = xmlNanoFTPCheckResponse(ctx); + desret_int(ret_val); + call_tests++; + des_xmlNanoFTPCtxtPtr(n_ctx, ctx, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNanoFTPCheckResponse", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctx); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlNanoFTPCleanup(void) { + int test_ret = 0; + +#if defined(LIBXML_FTP_ENABLED) + int mem_base; + + mem_base = xmlMemBlocks(); + + xmlNanoFTPCleanup(); + call_tests++; + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNanoFTPCleanup", + xmlMemBlocks() - mem_base); + test_ret++; + printf("\n"); + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlNanoFTPCloseConnection(void) { + int test_ret = 0; + +#if defined(LIBXML_FTP_ENABLED) + int mem_base; + int ret_val; + void * ctx; /* an FTP context */ + int n_ctx; + + for (n_ctx = 0;n_ctx < gen_nb_xmlNanoFTPCtxtPtr;n_ctx++) { + mem_base = xmlMemBlocks(); + ctx = gen_xmlNanoFTPCtxtPtr(n_ctx, 0); + + ret_val = xmlNanoFTPCloseConnection(ctx); + desret_int(ret_val); + call_tests++; + des_xmlNanoFTPCtxtPtr(n_ctx, ctx, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNanoFTPCloseConnection", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctx); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlNanoFTPCwd(void) { + int test_ret = 0; + +#if defined(LIBXML_FTP_ENABLED) + int mem_base; + int ret_val; + void * ctx; /* an FTP context */ + int n_ctx; + char * directory; /* a directory on the server */ + int n_directory; + + for (n_ctx = 0;n_ctx < gen_nb_xmlNanoFTPCtxtPtr;n_ctx++) { + for (n_directory = 0;n_directory < gen_nb_const_char_ptr;n_directory++) { + mem_base = xmlMemBlocks(); + ctx = gen_xmlNanoFTPCtxtPtr(n_ctx, 0); + directory = gen_const_char_ptr(n_directory, 1); + + ret_val = xmlNanoFTPCwd(ctx, (const char *)directory); + desret_int(ret_val); + call_tests++; + des_xmlNanoFTPCtxtPtr(n_ctx, ctx, 0); + des_const_char_ptr(n_directory, (const char *)directory, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNanoFTPCwd", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctx); + printf(" %d", n_directory); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlNanoFTPDele(void) { + int test_ret = 0; + +#if defined(LIBXML_FTP_ENABLED) + int mem_base; + int ret_val; + void * ctx; /* an FTP context */ + int n_ctx; + const char * file; /* a file or directory on the server */ + int n_file; + + for (n_ctx = 0;n_ctx < gen_nb_xmlNanoFTPCtxtPtr;n_ctx++) { + for (n_file = 0;n_file < gen_nb_filepath;n_file++) { + mem_base = xmlMemBlocks(); + ctx = gen_xmlNanoFTPCtxtPtr(n_ctx, 0); + file = gen_filepath(n_file, 1); + + ret_val = xmlNanoFTPDele(ctx, file); + desret_int(ret_val); + call_tests++; + des_xmlNanoFTPCtxtPtr(n_ctx, ctx, 0); + des_filepath(n_file, file, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNanoFTPDele", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctx); + printf(" %d", n_file); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlNanoFTPGet(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlNanoFTPGetConnection(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlNanoFTPGetResponse(void) { + int test_ret = 0; + +#if defined(LIBXML_FTP_ENABLED) + int mem_base; + int ret_val; + void * ctx; /* an FTP context */ + int n_ctx; + + for (n_ctx = 0;n_ctx < gen_nb_xmlNanoFTPCtxtPtr;n_ctx++) { + mem_base = xmlMemBlocks(); + ctx = gen_xmlNanoFTPCtxtPtr(n_ctx, 0); + + ret_val = xmlNanoFTPGetResponse(ctx); + desret_int(ret_val); + call_tests++; + des_xmlNanoFTPCtxtPtr(n_ctx, ctx, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNanoFTPGetResponse", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctx); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlNanoFTPGetSocket(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlNanoFTPInit(void) { + int test_ret = 0; + +#if defined(LIBXML_FTP_ENABLED) + int mem_base; + + mem_base = xmlMemBlocks(); + + xmlNanoFTPInit(); + call_tests++; + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNanoFTPInit", + xmlMemBlocks() - mem_base); + test_ret++; + printf("\n"); + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlNanoFTPList(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlNanoFTPNewCtxt(void) { + int test_ret = 0; + +#if defined(LIBXML_FTP_ENABLED) + int mem_base; + void * ret_val; + const char * URL; /* The URL used to initialize the context */ + int n_URL; + + for (n_URL = 0;n_URL < gen_nb_filepath;n_URL++) { + mem_base = xmlMemBlocks(); + URL = gen_filepath(n_URL, 0); + + ret_val = xmlNanoFTPNewCtxt(URL); + desret_xmlNanoFTPCtxtPtr(ret_val); + call_tests++; + des_filepath(n_URL, URL, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNanoFTPNewCtxt", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_URL); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlNanoFTPOpen(void) { + int test_ret = 0; + +#if defined(LIBXML_FTP_ENABLED) + int mem_base; + void * ret_val; + const char * URL; /* the URL to the resource */ + int n_URL; + + for (n_URL = 0;n_URL < gen_nb_filepath;n_URL++) { + mem_base = xmlMemBlocks(); + URL = gen_filepath(n_URL, 0); + + ret_val = xmlNanoFTPOpen(URL); + desret_xmlNanoFTPCtxtPtr(ret_val); + call_tests++; + des_filepath(n_URL, URL, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNanoFTPOpen", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_URL); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlNanoFTPProxy(void) { + int test_ret = 0; + +#if defined(LIBXML_FTP_ENABLED) + char * host; /* the proxy host name */ + int n_host; + int port; /* the proxy port */ + int n_port; + char * user; /* the proxy user name */ + int n_user; + char * passwd; /* the proxy password */ + int n_passwd; + int type; /* the type of proxy 1 for using SITE, 2 for USER a@b */ + int n_type; + + for (n_host = 0;n_host < gen_nb_const_char_ptr;n_host++) { + for (n_port = 0;n_port < gen_nb_int;n_port++) { + for (n_user = 0;n_user < gen_nb_const_char_ptr;n_user++) { + for (n_passwd = 0;n_passwd < gen_nb_const_char_ptr;n_passwd++) { + for (n_type = 0;n_type < gen_nb_int;n_type++) { + host = gen_const_char_ptr(n_host, 0); + port = gen_int(n_port, 1); + user = gen_const_char_ptr(n_user, 2); + passwd = gen_const_char_ptr(n_passwd, 3); + type = gen_int(n_type, 4); + + xmlNanoFTPProxy((const char *)host, port, (const char *)user, (const char *)passwd, type); + call_tests++; + des_const_char_ptr(n_host, (const char *)host, 0); + des_int(n_port, port, 1); + des_const_char_ptr(n_user, (const char *)user, 2); + des_const_char_ptr(n_passwd, (const char *)passwd, 3); + des_int(n_type, type, 4); + xmlResetLastError(); + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlNanoFTPQuit(void) { + int test_ret = 0; + +#if defined(LIBXML_FTP_ENABLED) + int mem_base; + int ret_val; + void * ctx; /* an FTP context */ + int n_ctx; + + for (n_ctx = 0;n_ctx < gen_nb_xmlNanoFTPCtxtPtr;n_ctx++) { + mem_base = xmlMemBlocks(); + ctx = gen_xmlNanoFTPCtxtPtr(n_ctx, 0); + + ret_val = xmlNanoFTPQuit(ctx); + desret_int(ret_val); + call_tests++; + des_xmlNanoFTPCtxtPtr(n_ctx, ctx, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNanoFTPQuit", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctx); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlNanoFTPRead(void) { + int test_ret = 0; + +#if defined(LIBXML_FTP_ENABLED) + int mem_base; + int ret_val; + void * ctx; /* the FTP context */ + int n_ctx; + void * dest; /* a buffer */ + int n_dest; + int len; /* the buffer length */ + int n_len; + + for (n_ctx = 0;n_ctx < gen_nb_xmlNanoFTPCtxtPtr;n_ctx++) { + for (n_dest = 0;n_dest < gen_nb_void_ptr;n_dest++) { + for (n_len = 0;n_len < gen_nb_int;n_len++) { + mem_base = xmlMemBlocks(); + ctx = gen_xmlNanoFTPCtxtPtr(n_ctx, 0); + dest = gen_void_ptr(n_dest, 1); + len = gen_int(n_len, 2); + + ret_val = xmlNanoFTPRead(ctx, dest, len); + desret_int(ret_val); + call_tests++; + des_xmlNanoFTPCtxtPtr(n_ctx, ctx, 0); + des_void_ptr(n_dest, dest, 1); + des_int(n_len, len, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNanoFTPRead", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctx); + printf(" %d", n_dest); + printf(" %d", n_len); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlNanoFTPScanProxy(void) { + int test_ret = 0; + +#if defined(LIBXML_FTP_ENABLED) + const char * URL; /* The proxy URL used to initialize the proxy context */ + int n_URL; + + for (n_URL = 0;n_URL < gen_nb_filepath;n_URL++) { + URL = gen_filepath(n_URL, 0); + + xmlNanoFTPScanProxy(URL); + call_tests++; + des_filepath(n_URL, URL, 0); + xmlResetLastError(); + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlNanoFTPUpdateURL(void) { + int test_ret = 0; + +#if defined(LIBXML_FTP_ENABLED) + int mem_base; + int ret_val; + void * ctx; /* an FTP context */ + int n_ctx; + const char * URL; /* The URL used to update the context */ + int n_URL; + + for (n_ctx = 0;n_ctx < gen_nb_xmlNanoFTPCtxtPtr;n_ctx++) { + for (n_URL = 0;n_URL < gen_nb_filepath;n_URL++) { + mem_base = xmlMemBlocks(); + ctx = gen_xmlNanoFTPCtxtPtr(n_ctx, 0); + URL = gen_filepath(n_URL, 1); + + ret_val = xmlNanoFTPUpdateURL(ctx, URL); + desret_int(ret_val); + call_tests++; + des_xmlNanoFTPCtxtPtr(n_ctx, ctx, 0); + des_filepath(n_URL, URL, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNanoFTPUpdateURL", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctx); + printf(" %d", n_URL); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + +static int +test_nanoftp(void) { + int test_ret = 0; + + if (quiet == 0) printf("Testing nanoftp : 14 of 22 functions ...\n"); + test_ret += test_xmlNanoFTPCheckResponse(); + test_ret += test_xmlNanoFTPCleanup(); + test_ret += test_xmlNanoFTPCloseConnection(); + test_ret += test_xmlNanoFTPCwd(); + test_ret += test_xmlNanoFTPDele(); + test_ret += test_xmlNanoFTPGet(); + test_ret += test_xmlNanoFTPGetConnection(); + test_ret += test_xmlNanoFTPGetResponse(); + test_ret += test_xmlNanoFTPGetSocket(); + test_ret += test_xmlNanoFTPInit(); + test_ret += test_xmlNanoFTPList(); + test_ret += test_xmlNanoFTPNewCtxt(); + test_ret += test_xmlNanoFTPOpen(); + test_ret += test_xmlNanoFTPProxy(); + test_ret += test_xmlNanoFTPQuit(); + test_ret += test_xmlNanoFTPRead(); + test_ret += test_xmlNanoFTPScanProxy(); + test_ret += test_xmlNanoFTPUpdateURL(); + + if (test_ret != 0) + printf("Module nanoftp: %d errors\n", test_ret); + return(test_ret); +} + +static int +test_xmlNanoHTTPAuthHeader(void) { + int test_ret = 0; + +#if defined(LIBXML_HTTP_ENABLED) + int mem_base; + const char * ret_val; + void * ctx; /* the HTTP context */ + int n_ctx; + + for (n_ctx = 0;n_ctx < gen_nb_xmlNanoHTTPCtxtPtr;n_ctx++) { + mem_base = xmlMemBlocks(); + ctx = gen_xmlNanoHTTPCtxtPtr(n_ctx, 0); + + ret_val = xmlNanoHTTPAuthHeader(ctx); + desret_const_char_ptr(ret_val); + call_tests++; + des_xmlNanoHTTPCtxtPtr(n_ctx, ctx, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNanoHTTPAuthHeader", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctx); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlNanoHTTPCleanup(void) { + int test_ret = 0; + +#if defined(LIBXML_HTTP_ENABLED) + int mem_base; + + mem_base = xmlMemBlocks(); + + xmlNanoHTTPCleanup(); + call_tests++; + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNanoHTTPCleanup", + xmlMemBlocks() - mem_base); + test_ret++; + printf("\n"); + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlNanoHTTPContentLength(void) { + int test_ret = 0; + +#if defined(LIBXML_HTTP_ENABLED) + int mem_base; + int ret_val; + void * ctx; /* the HTTP context */ + int n_ctx; + + for (n_ctx = 0;n_ctx < gen_nb_xmlNanoHTTPCtxtPtr;n_ctx++) { + mem_base = xmlMemBlocks(); + ctx = gen_xmlNanoHTTPCtxtPtr(n_ctx, 0); + + ret_val = xmlNanoHTTPContentLength(ctx); + desret_int(ret_val); + call_tests++; + des_xmlNanoHTTPCtxtPtr(n_ctx, ctx, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNanoHTTPContentLength", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctx); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlNanoHTTPEncoding(void) { + int test_ret = 0; + +#if defined(LIBXML_HTTP_ENABLED) + int mem_base; + const char * ret_val; + void * ctx; /* the HTTP context */ + int n_ctx; + + for (n_ctx = 0;n_ctx < gen_nb_xmlNanoHTTPCtxtPtr;n_ctx++) { + mem_base = xmlMemBlocks(); + ctx = gen_xmlNanoHTTPCtxtPtr(n_ctx, 0); + + ret_val = xmlNanoHTTPEncoding(ctx); + desret_const_char_ptr(ret_val); + call_tests++; + des_xmlNanoHTTPCtxtPtr(n_ctx, ctx, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNanoHTTPEncoding", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctx); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +#define gen_nb_char_ptr_ptr 1 +static char ** gen_char_ptr_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_char_ptr_ptr(int no ATTRIBUTE_UNUSED, char ** val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +static int +test_xmlNanoHTTPFetch(void) { + int test_ret = 0; + +#if defined(LIBXML_HTTP_ENABLED) + int mem_base; + int ret_val; + const char * URL; /* The URL to load */ + int n_URL; + const char * filename; /* the filename where the content should be saved */ + int n_filename; + char ** contentType; /* if available the Content-Type information will be returned at that location */ + int n_contentType; + + for (n_URL = 0;n_URL < gen_nb_fileoutput;n_URL++) { + for (n_filename = 0;n_filename < gen_nb_fileoutput;n_filename++) { + for (n_contentType = 0;n_contentType < gen_nb_char_ptr_ptr;n_contentType++) { + mem_base = xmlMemBlocks(); + URL = gen_fileoutput(n_URL, 0); + filename = gen_fileoutput(n_filename, 1); + contentType = gen_char_ptr_ptr(n_contentType, 2); + + ret_val = xmlNanoHTTPFetch(URL, filename, contentType); + desret_int(ret_val); + call_tests++; + des_fileoutput(n_URL, URL, 0); + des_fileoutput(n_filename, filename, 1); + des_char_ptr_ptr(n_contentType, contentType, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNanoHTTPFetch", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_URL); + printf(" %d", n_filename); + printf(" %d", n_contentType); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlNanoHTTPInit(void) { + int test_ret = 0; + +#if defined(LIBXML_HTTP_ENABLED) + int mem_base; + + mem_base = xmlMemBlocks(); + + xmlNanoHTTPInit(); + call_tests++; + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNanoHTTPInit", + xmlMemBlocks() - mem_base); + test_ret++; + printf("\n"); + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlNanoHTTPMimeType(void) { + int test_ret = 0; + +#if defined(LIBXML_HTTP_ENABLED) + int mem_base; + const char * ret_val; + void * ctx; /* the HTTP context */ + int n_ctx; + + for (n_ctx = 0;n_ctx < gen_nb_xmlNanoHTTPCtxtPtr;n_ctx++) { + mem_base = xmlMemBlocks(); + ctx = gen_xmlNanoHTTPCtxtPtr(n_ctx, 0); + + ret_val = xmlNanoHTTPMimeType(ctx); + desret_const_char_ptr(ret_val); + call_tests++; + des_xmlNanoHTTPCtxtPtr(n_ctx, ctx, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNanoHTTPMimeType", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctx); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlNanoHTTPOpen(void) { + int test_ret = 0; + +#if defined(LIBXML_HTTP_ENABLED) + int mem_base; + void * ret_val; + const char * URL; /* The URL to load */ + int n_URL; + char ** contentType; /* if available the Content-Type information will be returned at that location */ + int n_contentType; + + for (n_URL = 0;n_URL < gen_nb_filepath;n_URL++) { + for (n_contentType = 0;n_contentType < gen_nb_char_ptr_ptr;n_contentType++) { + mem_base = xmlMemBlocks(); + URL = gen_filepath(n_URL, 0); + contentType = gen_char_ptr_ptr(n_contentType, 1); + + ret_val = xmlNanoHTTPOpen(URL, contentType); + desret_xmlNanoHTTPCtxtPtr(ret_val); + call_tests++; + des_filepath(n_URL, URL, 0); + des_char_ptr_ptr(n_contentType, contentType, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNanoHTTPOpen", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_URL); + printf(" %d", n_contentType); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlNanoHTTPOpenRedir(void) { + int test_ret = 0; + +#if defined(LIBXML_HTTP_ENABLED) + int mem_base; + void * ret_val; + const char * URL; /* The URL to load */ + int n_URL; + char ** contentType; /* if available the Content-Type information will be returned at that location */ + int n_contentType; + char ** redir; /* if available the redirected URL will be returned */ + int n_redir; + + for (n_URL = 0;n_URL < gen_nb_filepath;n_URL++) { + for (n_contentType = 0;n_contentType < gen_nb_char_ptr_ptr;n_contentType++) { + for (n_redir = 0;n_redir < gen_nb_char_ptr_ptr;n_redir++) { + mem_base = xmlMemBlocks(); + URL = gen_filepath(n_URL, 0); + contentType = gen_char_ptr_ptr(n_contentType, 1); + redir = gen_char_ptr_ptr(n_redir, 2); + + ret_val = xmlNanoHTTPOpenRedir(URL, contentType, redir); + desret_xmlNanoHTTPCtxtPtr(ret_val); + call_tests++; + des_filepath(n_URL, URL, 0); + des_char_ptr_ptr(n_contentType, contentType, 1); + des_char_ptr_ptr(n_redir, redir, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNanoHTTPOpenRedir", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_URL); + printf(" %d", n_contentType); + printf(" %d", n_redir); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlNanoHTTPRead(void) { + int test_ret = 0; + +#if defined(LIBXML_HTTP_ENABLED) + int mem_base; + int ret_val; + void * ctx; /* the HTTP context */ + int n_ctx; + void * dest; /* a buffer */ + int n_dest; + int len; /* the buffer length */ + int n_len; + + for (n_ctx = 0;n_ctx < gen_nb_xmlNanoHTTPCtxtPtr;n_ctx++) { + for (n_dest = 0;n_dest < gen_nb_void_ptr;n_dest++) { + for (n_len = 0;n_len < gen_nb_int;n_len++) { + mem_base = xmlMemBlocks(); + ctx = gen_xmlNanoHTTPCtxtPtr(n_ctx, 0); + dest = gen_void_ptr(n_dest, 1); + len = gen_int(n_len, 2); + + ret_val = xmlNanoHTTPRead(ctx, dest, len); + desret_int(ret_val); + call_tests++; + des_xmlNanoHTTPCtxtPtr(n_ctx, ctx, 0); + des_void_ptr(n_dest, dest, 1); + des_int(n_len, len, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNanoHTTPRead", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctx); + printf(" %d", n_dest); + printf(" %d", n_len); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlNanoHTTPRedir(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlNanoHTTPReturnCode(void) { + int test_ret = 0; + +#if defined(LIBXML_HTTP_ENABLED) + int mem_base; + int ret_val; + void * ctx; /* the HTTP context */ + int n_ctx; + + for (n_ctx = 0;n_ctx < gen_nb_xmlNanoHTTPCtxtPtr;n_ctx++) { + mem_base = xmlMemBlocks(); + ctx = gen_xmlNanoHTTPCtxtPtr(n_ctx, 0); + + ret_val = xmlNanoHTTPReturnCode(ctx); + desret_int(ret_val); + call_tests++; + des_xmlNanoHTTPCtxtPtr(n_ctx, ctx, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNanoHTTPReturnCode", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctx); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlNanoHTTPSave(void) { + int test_ret = 0; + +#if defined(LIBXML_HTTP_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + int ret_val; + void * ctxt; /* the HTTP context */ + int n_ctxt; + const char * filename; /* the filename where the content should be saved */ + int n_filename; + + for (n_ctxt = 0;n_ctxt < gen_nb_void_ptr;n_ctxt++) { + for (n_filename = 0;n_filename < gen_nb_fileoutput;n_filename++) { + mem_base = xmlMemBlocks(); + ctxt = gen_void_ptr(n_ctxt, 0); + filename = gen_fileoutput(n_filename, 1); + + ret_val = xmlNanoHTTPSave(ctxt, filename); + desret_int(ret_val); + call_tests++; + des_void_ptr(n_ctxt, ctxt, 0); + des_fileoutput(n_filename, filename, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNanoHTTPSave", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_filename); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlNanoHTTPScanProxy(void) { + int test_ret = 0; + +#if defined(LIBXML_HTTP_ENABLED) + const char * URL; /* The proxy URL used to initialize the proxy context */ + int n_URL; + + for (n_URL = 0;n_URL < gen_nb_filepath;n_URL++) { + URL = gen_filepath(n_URL, 0); + + xmlNanoHTTPScanProxy(URL); + call_tests++; + des_filepath(n_URL, URL, 0); + xmlResetLastError(); + } + function_tests++; +#endif + + return(test_ret); +} + +static int +test_nanohttp(void) { + int test_ret = 0; + + if (quiet == 0) printf("Testing nanohttp : 13 of 17 functions ...\n"); + test_ret += test_xmlNanoHTTPAuthHeader(); + test_ret += test_xmlNanoHTTPCleanup(); + test_ret += test_xmlNanoHTTPContentLength(); + test_ret += test_xmlNanoHTTPEncoding(); + test_ret += test_xmlNanoHTTPFetch(); + test_ret += test_xmlNanoHTTPInit(); + test_ret += test_xmlNanoHTTPMimeType(); + test_ret += test_xmlNanoHTTPOpen(); + test_ret += test_xmlNanoHTTPOpenRedir(); + test_ret += test_xmlNanoHTTPRead(); + test_ret += test_xmlNanoHTTPRedir(); + test_ret += test_xmlNanoHTTPReturnCode(); + test_ret += test_xmlNanoHTTPSave(); + test_ret += test_xmlNanoHTTPScanProxy(); + + if (test_ret != 0) + printf("Module nanohttp: %d errors\n", test_ret); + return(test_ret); +} + +static int +test_xmlByteConsumed(void) { + int test_ret = 0; + + int mem_base; + long ret_val; + xmlParserCtxtPtr ctxt; /* an XML parser context */ + int n_ctxt; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0); + + ret_val = xmlByteConsumed(ctxt); + desret_long(ret_val); + call_tests++; + des_xmlParserCtxtPtr(n_ctxt, ctxt, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlByteConsumed", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlClearNodeInfoSeq(void) { + int test_ret = 0; + + int mem_base; + xmlParserNodeInfoSeqPtr seq; /* a node info sequence pointer */ + int n_seq; + + for (n_seq = 0;n_seq < gen_nb_xmlParserNodeInfoSeqPtr;n_seq++) { + mem_base = xmlMemBlocks(); + seq = gen_xmlParserNodeInfoSeqPtr(n_seq, 0); + + xmlClearNodeInfoSeq(seq); + call_tests++; + des_xmlParserNodeInfoSeqPtr(n_seq, seq, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlClearNodeInfoSeq", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_seq); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlClearParserCtxt(void) { + int test_ret = 0; + + int mem_base; + xmlParserCtxtPtr ctxt; /* an XML parser context */ + int n_ctxt; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0); + + xmlClearParserCtxt(ctxt); + call_tests++; + des_xmlParserCtxtPtr(n_ctxt, ctxt, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlClearParserCtxt", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlCreateDocParserCtxt(void) { + int test_ret = 0; + + int mem_base; + xmlParserCtxtPtr ret_val; + xmlChar * cur; /* a pointer to an array of xmlChar */ + int n_cur; + + for (n_cur = 0;n_cur < gen_nb_const_xmlChar_ptr;n_cur++) { + mem_base = xmlMemBlocks(); + cur = gen_const_xmlChar_ptr(n_cur, 0); + + ret_val = xmlCreateDocParserCtxt((const xmlChar *)cur); + desret_xmlParserCtxtPtr(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_cur, (const xmlChar *)cur, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlCreateDocParserCtxt", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_cur); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlCreatePushParserCtxt(void) { + int test_ret = 0; + +#if defined(LIBXML_PUSH_ENABLED) + int mem_base; + xmlParserCtxtPtr ret_val; + xmlSAXHandlerPtr sax; /* a SAX handler */ + int n_sax; + void * user_data; /* The user data returned on SAX callbacks */ + int n_user_data; + char * chunk; /* a pointer to an array of chars */ + int n_chunk; + int size; /* number of chars in the array */ + int n_size; + const char * filename; /* an optional file name or URI */ + int n_filename; + + for (n_sax = 0;n_sax < gen_nb_xmlSAXHandlerPtr;n_sax++) { + for (n_user_data = 0;n_user_data < gen_nb_userdata;n_user_data++) { + for (n_chunk = 0;n_chunk < gen_nb_const_char_ptr;n_chunk++) { + for (n_size = 0;n_size < gen_nb_int;n_size++) { + for (n_filename = 0;n_filename < gen_nb_fileoutput;n_filename++) { + mem_base = xmlMemBlocks(); + sax = gen_xmlSAXHandlerPtr(n_sax, 0); + user_data = gen_userdata(n_user_data, 1); + chunk = gen_const_char_ptr(n_chunk, 2); + size = gen_int(n_size, 3); + filename = gen_fileoutput(n_filename, 4); + + ret_val = xmlCreatePushParserCtxt(sax, user_data, (const char *)chunk, size, filename); + desret_xmlParserCtxtPtr(ret_val); + call_tests++; + des_xmlSAXHandlerPtr(n_sax, sax, 0); + des_userdata(n_user_data, user_data, 1); + des_const_char_ptr(n_chunk, (const char *)chunk, 2); + des_int(n_size, size, 3); + des_fileoutput(n_filename, filename, 4); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlCreatePushParserCtxt", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_sax); + printf(" %d", n_user_data); + printf(" %d", n_chunk); + printf(" %d", n_size); + printf(" %d", n_filename); + printf("\n"); + } + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlCtxtReadDoc(void) { + int test_ret = 0; + + int mem_base; + xmlDocPtr ret_val; + xmlParserCtxtPtr ctxt; /* an XML parser context */ + int n_ctxt; + xmlChar * cur; /* a pointer to a zero terminated string */ + int n_cur; + const char * URL; /* the base URL to use for the document */ + int n_URL; + char * encoding; /* the document encoding, or NULL */ + int n_encoding; + int options; /* a combination of xmlParserOption */ + int n_options; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) { + for (n_cur = 0;n_cur < gen_nb_const_xmlChar_ptr;n_cur++) { + for (n_URL = 0;n_URL < gen_nb_filepath;n_URL++) { + for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) { + for (n_options = 0;n_options < gen_nb_parseroptions;n_options++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0); + cur = gen_const_xmlChar_ptr(n_cur, 1); + URL = gen_filepath(n_URL, 2); + encoding = gen_const_char_ptr(n_encoding, 3); + options = gen_parseroptions(n_options, 4); + + ret_val = xmlCtxtReadDoc(ctxt, (const xmlChar *)cur, URL, (const char *)encoding, options); + desret_xmlDocPtr(ret_val); + call_tests++; + des_xmlParserCtxtPtr(n_ctxt, ctxt, 0); + des_const_xmlChar_ptr(n_cur, (const xmlChar *)cur, 1); + des_filepath(n_URL, URL, 2); + des_const_char_ptr(n_encoding, (const char *)encoding, 3); + des_parseroptions(n_options, options, 4); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlCtxtReadDoc", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_cur); + printf(" %d", n_URL); + printf(" %d", n_encoding); + printf(" %d", n_options); + printf("\n"); + } + } + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlCtxtReadFile(void) { + int test_ret = 0; + + int mem_base; + xmlDocPtr ret_val; + xmlParserCtxtPtr ctxt; /* an XML parser context */ + int n_ctxt; + const char * filename; /* a file or URL */ + int n_filename; + char * encoding; /* the document encoding, or NULL */ + int n_encoding; + int options; /* a combination of xmlParserOption */ + int n_options; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) { + for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) { + for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) { + for (n_options = 0;n_options < gen_nb_parseroptions;n_options++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0); + filename = gen_filepath(n_filename, 1); + encoding = gen_const_char_ptr(n_encoding, 2); + options = gen_parseroptions(n_options, 3); + + ret_val = xmlCtxtReadFile(ctxt, filename, (const char *)encoding, options); + desret_xmlDocPtr(ret_val); + call_tests++; + des_xmlParserCtxtPtr(n_ctxt, ctxt, 0); + des_filepath(n_filename, filename, 1); + des_const_char_ptr(n_encoding, (const char *)encoding, 2); + des_parseroptions(n_options, options, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlCtxtReadFile", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_filename); + printf(" %d", n_encoding); + printf(" %d", n_options); + printf("\n"); + } + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlCtxtReadMemory(void) { + int test_ret = 0; + + int mem_base; + xmlDocPtr ret_val; + xmlParserCtxtPtr ctxt; /* an XML parser context */ + int n_ctxt; + char * buffer; /* a pointer to a char array */ + int n_buffer; + int size; /* the size of the array */ + int n_size; + const char * URL; /* the base URL to use for the document */ + int n_URL; + char * encoding; /* the document encoding, or NULL */ + int n_encoding; + int options; /* a combination of xmlParserOption */ + int n_options; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) { + for (n_buffer = 0;n_buffer < gen_nb_const_char_ptr;n_buffer++) { + for (n_size = 0;n_size < gen_nb_int;n_size++) { + for (n_URL = 0;n_URL < gen_nb_filepath;n_URL++) { + for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) { + for (n_options = 0;n_options < gen_nb_parseroptions;n_options++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0); + buffer = gen_const_char_ptr(n_buffer, 1); + size = gen_int(n_size, 2); + URL = gen_filepath(n_URL, 3); + encoding = gen_const_char_ptr(n_encoding, 4); + options = gen_parseroptions(n_options, 5); + + ret_val = xmlCtxtReadMemory(ctxt, (const char *)buffer, size, URL, (const char *)encoding, options); + desret_xmlDocPtr(ret_val); + call_tests++; + des_xmlParserCtxtPtr(n_ctxt, ctxt, 0); + des_const_char_ptr(n_buffer, (const char *)buffer, 1); + des_int(n_size, size, 2); + des_filepath(n_URL, URL, 3); + des_const_char_ptr(n_encoding, (const char *)encoding, 4); + des_parseroptions(n_options, options, 5); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlCtxtReadMemory", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_buffer); + printf(" %d", n_size); + printf(" %d", n_URL); + printf(" %d", n_encoding); + printf(" %d", n_options); + printf("\n"); + } + } + } + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlCtxtReset(void) { + int test_ret = 0; + + int mem_base; + xmlParserCtxtPtr ctxt; /* an XML parser context */ + int n_ctxt; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0); + + xmlCtxtReset(ctxt); + call_tests++; + des_xmlParserCtxtPtr(n_ctxt, ctxt, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlCtxtReset", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlCtxtResetPush(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlParserCtxtPtr ctxt; /* an XML parser context */ + int n_ctxt; + char * chunk; /* a pointer to an array of chars */ + int n_chunk; + int size; /* number of chars in the array */ + int n_size; + const char * filename; /* an optional file name or URI */ + int n_filename; + char * encoding; /* the document encoding, or NULL */ + int n_encoding; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) { + for (n_chunk = 0;n_chunk < gen_nb_const_char_ptr;n_chunk++) { + for (n_size = 0;n_size < gen_nb_int;n_size++) { + for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) { + for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0); + chunk = gen_const_char_ptr(n_chunk, 1); + size = gen_int(n_size, 2); + filename = gen_filepath(n_filename, 3); + encoding = gen_const_char_ptr(n_encoding, 4); + + ret_val = xmlCtxtResetPush(ctxt, (const char *)chunk, size, filename, (const char *)encoding); + desret_int(ret_val); + call_tests++; + des_xmlParserCtxtPtr(n_ctxt, ctxt, 0); + des_const_char_ptr(n_chunk, (const char *)chunk, 1); + des_int(n_size, size, 2); + des_filepath(n_filename, filename, 3); + des_const_char_ptr(n_encoding, (const char *)encoding, 4); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlCtxtResetPush", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_chunk); + printf(" %d", n_size); + printf(" %d", n_filename); + printf(" %d", n_encoding); + printf("\n"); + } + } + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlCtxtUseOptions(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlParserCtxtPtr ctxt; /* an XML parser context */ + int n_ctxt; + int options; /* a combination of xmlParserOption */ + int n_options; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) { + for (n_options = 0;n_options < gen_nb_parseroptions;n_options++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0); + options = gen_parseroptions(n_options, 1); + + ret_val = xmlCtxtUseOptions(ctxt, options); + desret_int(ret_val); + call_tests++; + des_xmlParserCtxtPtr(n_ctxt, ctxt, 0); + des_parseroptions(n_options, options, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlCtxtUseOptions", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_options); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlGetExternalEntityLoader(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlGetFeature(void) { + int test_ret = 0; + +#if defined(LIBXML_LEGACY_ENABLED) +#ifdef LIBXML_LEGACY_ENABLED + int mem_base; + int ret_val; + xmlParserCtxtPtr ctxt; /* an XML/HTML parser context */ + int n_ctxt; + char * name; /* the feature name */ + int n_name; + void * result; /* location to store the result */ + int n_result; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) { + for (n_name = 0;n_name < gen_nb_const_char_ptr;n_name++) { + for (n_result = 0;n_result < gen_nb_void_ptr;n_result++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0); + name = gen_const_char_ptr(n_name, 1); + result = gen_void_ptr(n_result, 2); + + ret_val = xmlGetFeature(ctxt, (const char *)name, result); + desret_int(ret_val); + call_tests++; + des_xmlParserCtxtPtr(n_ctxt, ctxt, 0); + des_const_char_ptr(n_name, (const char *)name, 1); + des_void_ptr(n_result, result, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlGetFeature", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_name); + printf(" %d", n_result); + printf("\n"); + } + } + } + } + function_tests++; +#endif +#endif + + return(test_ret); +} + + +#define gen_nb_const_char_ptr_ptr 1 +static char ** gen_const_char_ptr_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_const_char_ptr_ptr(int no ATTRIBUTE_UNUSED, const char ** val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +static int +test_xmlGetFeaturesList(void) { + int test_ret = 0; + +#if defined(LIBXML_LEGACY_ENABLED) +#ifdef LIBXML_LEGACY_ENABLED + int mem_base; + int ret_val; + int * len; /* the length of the features name array (input/output) */ + int n_len; + char ** result; /* an array of string to be filled with the features name. */ + int n_result; + + for (n_len = 0;n_len < gen_nb_int_ptr;n_len++) { + for (n_result = 0;n_result < gen_nb_const_char_ptr_ptr;n_result++) { + mem_base = xmlMemBlocks(); + len = gen_int_ptr(n_len, 0); + result = gen_const_char_ptr_ptr(n_result, 1); + + ret_val = xmlGetFeaturesList(len, (const char **)result); + desret_int(ret_val); + call_tests++; + des_int_ptr(n_len, len, 0); + des_const_char_ptr_ptr(n_result, (const char **)result, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlGetFeaturesList", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_len); + printf(" %d", n_result); + printf("\n"); + } + } + } + function_tests++; +#endif +#endif + + return(test_ret); +} + + +static int +test_xmlHasFeature(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlFeature feature; /* the feature to be examined */ + int n_feature; + + for (n_feature = 0;n_feature < gen_nb_xmlFeature;n_feature++) { + mem_base = xmlMemBlocks(); + feature = gen_xmlFeature(n_feature, 0); + + ret_val = xmlHasFeature(feature); + desret_int(ret_val); + call_tests++; + des_xmlFeature(n_feature, feature, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlHasFeature", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_feature); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlIOParseDTD(void) { + int test_ret = 0; + +#if defined(LIBXML_VALID_ENABLED) +#ifdef LIBXML_VALID_ENABLED + xmlDtdPtr ret_val; + xmlSAXHandlerPtr sax; /* the SAX handler block or NULL */ + int n_sax; + xmlParserInputBufferPtr input; /* an Input Buffer */ + int n_input; + xmlCharEncoding enc; /* the charset encoding if known */ + int n_enc; + + for (n_sax = 0;n_sax < gen_nb_xmlSAXHandlerPtr;n_sax++) { + for (n_input = 0;n_input < gen_nb_xmlParserInputBufferPtr;n_input++) { + for (n_enc = 0;n_enc < gen_nb_xmlCharEncoding;n_enc++) { + sax = gen_xmlSAXHandlerPtr(n_sax, 0); + input = gen_xmlParserInputBufferPtr(n_input, 1); + enc = gen_xmlCharEncoding(n_enc, 2); + + ret_val = xmlIOParseDTD(sax, input, enc); + input = NULL; + desret_xmlDtdPtr(ret_val); + call_tests++; + des_xmlSAXHandlerPtr(n_sax, sax, 0); + des_xmlParserInputBufferPtr(n_input, input, 1); + des_xmlCharEncoding(n_enc, enc, 2); + xmlResetLastError(); + } + } + } + function_tests++; +#endif +#endif + + return(test_ret); +} + + +static int +test_xmlInitNodeInfoSeq(void) { + int test_ret = 0; + + int mem_base; + xmlParserNodeInfoSeqPtr seq; /* a node info sequence pointer */ + int n_seq; + + for (n_seq = 0;n_seq < gen_nb_xmlParserNodeInfoSeqPtr;n_seq++) { + mem_base = xmlMemBlocks(); + seq = gen_xmlParserNodeInfoSeqPtr(n_seq, 0); + + xmlInitNodeInfoSeq(seq); + call_tests++; + des_xmlParserNodeInfoSeqPtr(n_seq, seq, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlInitNodeInfoSeq", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_seq); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlInitParser(void) { + int test_ret = 0; + + int mem_base; + + mem_base = xmlMemBlocks(); + + xmlInitParser(); + call_tests++; + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlInitParser", + xmlMemBlocks() - mem_base); + test_ret++; + printf("\n"); + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlInitParserCtxt(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlParserCtxtPtr ctxt; /* an XML parser context */ + int n_ctxt; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0); + + ret_val = xmlInitParserCtxt(ctxt); + desret_int(ret_val); + call_tests++; + des_xmlParserCtxtPtr(n_ctxt, ctxt, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlInitParserCtxt", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlKeepBlanksDefault(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + int val; /* int 0 or 1 */ + int n_val; + + for (n_val = 0;n_val < gen_nb_int;n_val++) { + mem_base = xmlMemBlocks(); + val = gen_int(n_val, 0); + + ret_val = xmlKeepBlanksDefault(val); + desret_int(ret_val); + call_tests++; + des_int(n_val, val, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlKeepBlanksDefault", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_val); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlLineNumbersDefault(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + int val; /* int 0 or 1 */ + int n_val; + + for (n_val = 0;n_val < gen_nb_int;n_val++) { + mem_base = xmlMemBlocks(); + val = gen_int(n_val, 0); + + ret_val = xmlLineNumbersDefault(val); + desret_int(ret_val); + call_tests++; + des_int(n_val, val, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlLineNumbersDefault", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_val); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlLoadExternalEntity(void) { + int test_ret = 0; + + int mem_base; + xmlParserInputPtr ret_val; + const char * URL; /* the URL for the entity to load */ + int n_URL; + char * ID; /* the Public ID for the entity to load */ + int n_ID; + xmlParserCtxtPtr ctxt; /* the context in which the entity is called or NULL */ + int n_ctxt; + + for (n_URL = 0;n_URL < gen_nb_filepath;n_URL++) { + for (n_ID = 0;n_ID < gen_nb_const_char_ptr;n_ID++) { + for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) { + mem_base = xmlMemBlocks(); + URL = gen_filepath(n_URL, 0); + ID = gen_const_char_ptr(n_ID, 1); + ctxt = gen_xmlParserCtxtPtr(n_ctxt, 2); + + ret_val = xmlLoadExternalEntity(URL, (const char *)ID, ctxt); + desret_xmlParserInputPtr(ret_val); + call_tests++; + des_filepath(n_URL, URL, 0); + des_const_char_ptr(n_ID, (const char *)ID, 1); + des_xmlParserCtxtPtr(n_ctxt, ctxt, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlLoadExternalEntity", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_URL); + printf(" %d", n_ID); + printf(" %d", n_ctxt); + printf("\n"); + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlNewIOInputStream(void) { + int test_ret = 0; + + int mem_base; + xmlParserInputPtr ret_val; + xmlParserCtxtPtr ctxt; /* an XML parser context */ + int n_ctxt; + xmlParserInputBufferPtr input; /* an I/O Input */ + int n_input; + xmlCharEncoding enc; /* the charset encoding if known */ + int n_enc; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) { + for (n_input = 0;n_input < gen_nb_xmlParserInputBufferPtr;n_input++) { + for (n_enc = 0;n_enc < gen_nb_xmlCharEncoding;n_enc++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0); + input = gen_xmlParserInputBufferPtr(n_input, 1); + enc = gen_xmlCharEncoding(n_enc, 2); + + ret_val = xmlNewIOInputStream(ctxt, input, enc); + if (ret_val != NULL) input = NULL; + desret_xmlParserInputPtr(ret_val); + call_tests++; + des_xmlParserCtxtPtr(n_ctxt, ctxt, 0); + des_xmlParserInputBufferPtr(n_input, input, 1); + des_xmlCharEncoding(n_enc, enc, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNewIOInputStream", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_input); + printf(" %d", n_enc); + printf("\n"); + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlNewParserCtxt(void) { + int test_ret = 0; + + int mem_base; + xmlParserCtxtPtr ret_val; + + mem_base = xmlMemBlocks(); + + ret_val = xmlNewParserCtxt(); + desret_xmlParserCtxtPtr(ret_val); + call_tests++; + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNewParserCtxt", + xmlMemBlocks() - mem_base); + test_ret++; + printf("\n"); + } + function_tests++; + + return(test_ret); +} + + +#define gen_nb_xmlNodePtr_ptr 1 +static xmlNodePtr * gen_xmlNodePtr_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlNodePtr_ptr(int no ATTRIBUTE_UNUSED, xmlNodePtr * val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +static int +test_xmlParseBalancedChunkMemory(void) { + int test_ret = 0; + +#if defined(LIBXML_SAX1_ENABLED) +#ifdef LIBXML_SAX1_ENABLED + int mem_base; + int ret_val; + xmlDocPtr doc; /* the document the chunk pertains to */ + int n_doc; + xmlSAXHandlerPtr sax; /* the SAX handler bloc (possibly NULL) */ + int n_sax; + void * user_data; /* The user data returned on SAX callbacks (possibly NULL) */ + int n_user_data; + int depth; /* Used for loop detection, use 0 */ + int n_depth; + xmlChar * string; /* the input string in UTF8 or ISO-Latin (zero terminated) */ + int n_string; + xmlNodePtr * lst; /* the return value for the set of parsed nodes */ + int n_lst; + + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_sax = 0;n_sax < gen_nb_xmlSAXHandlerPtr;n_sax++) { + for (n_user_data = 0;n_user_data < gen_nb_userdata;n_user_data++) { + for (n_depth = 0;n_depth < gen_nb_int;n_depth++) { + for (n_string = 0;n_string < gen_nb_const_xmlChar_ptr;n_string++) { + for (n_lst = 0;n_lst < gen_nb_xmlNodePtr_ptr;n_lst++) { + mem_base = xmlMemBlocks(); + doc = gen_xmlDocPtr(n_doc, 0); + sax = gen_xmlSAXHandlerPtr(n_sax, 1); + user_data = gen_userdata(n_user_data, 2); + depth = gen_int(n_depth, 3); + string = gen_const_xmlChar_ptr(n_string, 4); + lst = gen_xmlNodePtr_ptr(n_lst, 5); + +#ifdef LIBXML_SAX1_ENABLED + if (sax == (xmlSAXHandlerPtr)&xmlDefaultSAXHandler) user_data = NULL; +#endif + + + ret_val = xmlParseBalancedChunkMemory(doc, sax, user_data, depth, (const xmlChar *)string, lst); + desret_int(ret_val); + call_tests++; + des_xmlDocPtr(n_doc, doc, 0); + des_xmlSAXHandlerPtr(n_sax, sax, 1); + des_userdata(n_user_data, user_data, 2); + des_int(n_depth, depth, 3); + des_const_xmlChar_ptr(n_string, (const xmlChar *)string, 4); + des_xmlNodePtr_ptr(n_lst, lst, 5); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlParseBalancedChunkMemory", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf(" %d", n_sax); + printf(" %d", n_user_data); + printf(" %d", n_depth); + printf(" %d", n_string); + printf(" %d", n_lst); + printf("\n"); + } + } + } + } + } + } + } + function_tests++; +#endif +#endif + + return(test_ret); +} + + +static int +test_xmlParseBalancedChunkMemoryRecover(void) { + int test_ret = 0; + +#if defined(LIBXML_SAX1_ENABLED) +#ifdef LIBXML_SAX1_ENABLED + int mem_base; + int ret_val; + xmlDocPtr doc; /* the document the chunk pertains to */ + int n_doc; + xmlSAXHandlerPtr sax; /* the SAX handler bloc (possibly NULL) */ + int n_sax; + void * user_data; /* The user data returned on SAX callbacks (possibly NULL) */ + int n_user_data; + int depth; /* Used for loop detection, use 0 */ + int n_depth; + xmlChar * string; /* the input string in UTF8 or ISO-Latin (zero terminated) */ + int n_string; + xmlNodePtr * lst; /* the return value for the set of parsed nodes */ + int n_lst; + int recover; /* return nodes even if the data is broken (use 0) */ + int n_recover; + + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_sax = 0;n_sax < gen_nb_xmlSAXHandlerPtr;n_sax++) { + for (n_user_data = 0;n_user_data < gen_nb_userdata;n_user_data++) { + for (n_depth = 0;n_depth < gen_nb_int;n_depth++) { + for (n_string = 0;n_string < gen_nb_const_xmlChar_ptr;n_string++) { + for (n_lst = 0;n_lst < gen_nb_xmlNodePtr_ptr;n_lst++) { + for (n_recover = 0;n_recover < gen_nb_int;n_recover++) { + mem_base = xmlMemBlocks(); + doc = gen_xmlDocPtr(n_doc, 0); + sax = gen_xmlSAXHandlerPtr(n_sax, 1); + user_data = gen_userdata(n_user_data, 2); + depth = gen_int(n_depth, 3); + string = gen_const_xmlChar_ptr(n_string, 4); + lst = gen_xmlNodePtr_ptr(n_lst, 5); + recover = gen_int(n_recover, 6); + +#ifdef LIBXML_SAX1_ENABLED + if (sax == (xmlSAXHandlerPtr)&xmlDefaultSAXHandler) user_data = NULL; +#endif + + + ret_val = xmlParseBalancedChunkMemoryRecover(doc, sax, user_data, depth, (const xmlChar *)string, lst, recover); + desret_int(ret_val); + call_tests++; + des_xmlDocPtr(n_doc, doc, 0); + des_xmlSAXHandlerPtr(n_sax, sax, 1); + des_userdata(n_user_data, user_data, 2); + des_int(n_depth, depth, 3); + des_const_xmlChar_ptr(n_string, (const xmlChar *)string, 4); + des_xmlNodePtr_ptr(n_lst, lst, 5); + des_int(n_recover, recover, 6); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlParseBalancedChunkMemoryRecover", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf(" %d", n_sax); + printf(" %d", n_user_data); + printf(" %d", n_depth); + printf(" %d", n_string); + printf(" %d", n_lst); + printf(" %d", n_recover); + printf("\n"); + } + } + } + } + } + } + } + } + function_tests++; +#endif +#endif + + return(test_ret); +} + + +static int +test_xmlParseChunk(void) { + int test_ret = 0; + +#if defined(LIBXML_PUSH_ENABLED) + int mem_base; + int ret_val; + xmlParserCtxtPtr ctxt; /* an XML parser context */ + int n_ctxt; + char * chunk; /* an char array */ + int n_chunk; + int size; /* the size in byte of the chunk */ + int n_size; + int terminate; /* last chunk indicator */ + int n_terminate; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) { + for (n_chunk = 0;n_chunk < gen_nb_const_char_ptr;n_chunk++) { + for (n_size = 0;n_size < gen_nb_int;n_size++) { + for (n_terminate = 0;n_terminate < gen_nb_int;n_terminate++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0); + chunk = gen_const_char_ptr(n_chunk, 1); + size = gen_int(n_size, 2); + terminate = gen_int(n_terminate, 3); + + ret_val = xmlParseChunk(ctxt, (const char *)chunk, size, terminate); + if (ctxt != NULL) {xmlFreeDoc(ctxt->myDoc); ctxt->myDoc = NULL;} + desret_int(ret_val); + call_tests++; + des_xmlParserCtxtPtr(n_ctxt, ctxt, 0); + des_const_char_ptr(n_chunk, (const char *)chunk, 1); + des_int(n_size, size, 2); + des_int(n_terminate, terminate, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlParseChunk", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_chunk); + printf(" %d", n_size); + printf(" %d", n_terminate); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlParseCtxtExternalEntity(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlParserCtxtPtr ctx; /* the existing parsing context */ + int n_ctx; + xmlChar * URL; /* the URL for the entity to load */ + int n_URL; + xmlChar * ID; /* the System ID for the entity to load */ + int n_ID; + xmlNodePtr * lst; /* the return value for the set of parsed nodes */ + int n_lst; + + for (n_ctx = 0;n_ctx < gen_nb_xmlParserCtxtPtr;n_ctx++) { + for (n_URL = 0;n_URL < gen_nb_const_xmlChar_ptr;n_URL++) { + for (n_ID = 0;n_ID < gen_nb_const_xmlChar_ptr;n_ID++) { + for (n_lst = 0;n_lst < gen_nb_xmlNodePtr_ptr;n_lst++) { + mem_base = xmlMemBlocks(); + ctx = gen_xmlParserCtxtPtr(n_ctx, 0); + URL = gen_const_xmlChar_ptr(n_URL, 1); + ID = gen_const_xmlChar_ptr(n_ID, 2); + lst = gen_xmlNodePtr_ptr(n_lst, 3); + + ret_val = xmlParseCtxtExternalEntity(ctx, (const xmlChar *)URL, (const xmlChar *)ID, lst); + desret_int(ret_val); + call_tests++; + des_xmlParserCtxtPtr(n_ctx, ctx, 0); + des_const_xmlChar_ptr(n_URL, (const xmlChar *)URL, 1); + des_const_xmlChar_ptr(n_ID, (const xmlChar *)ID, 2); + des_xmlNodePtr_ptr(n_lst, lst, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlParseCtxtExternalEntity", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctx); + printf(" %d", n_URL); + printf(" %d", n_ID); + printf(" %d", n_lst); + printf("\n"); + } + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlParseDTD(void) { + int test_ret = 0; + +#if defined(LIBXML_VALID_ENABLED) +#ifdef LIBXML_VALID_ENABLED + int mem_base; + xmlDtdPtr ret_val; + xmlChar * ExternalID; /* a NAME* containing the External ID of the DTD */ + int n_ExternalID; + xmlChar * SystemID; /* a NAME* containing the URL to the DTD */ + int n_SystemID; + + for (n_ExternalID = 0;n_ExternalID < gen_nb_const_xmlChar_ptr;n_ExternalID++) { + for (n_SystemID = 0;n_SystemID < gen_nb_const_xmlChar_ptr;n_SystemID++) { + mem_base = xmlMemBlocks(); + ExternalID = gen_const_xmlChar_ptr(n_ExternalID, 0); + SystemID = gen_const_xmlChar_ptr(n_SystemID, 1); + + ret_val = xmlParseDTD((const xmlChar *)ExternalID, (const xmlChar *)SystemID); + desret_xmlDtdPtr(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_ExternalID, (const xmlChar *)ExternalID, 0); + des_const_xmlChar_ptr(n_SystemID, (const xmlChar *)SystemID, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlParseDTD", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ExternalID); + printf(" %d", n_SystemID); + printf("\n"); + } + } + } + function_tests++; +#endif +#endif + + return(test_ret); +} + + +static int +test_xmlParseDoc(void) { + int test_ret = 0; + +#if defined(LIBXML_SAX1_ENABLED) +#ifdef LIBXML_SAX1_ENABLED + int mem_base; + xmlDocPtr ret_val; + xmlChar * cur; /* a pointer to an array of xmlChar */ + int n_cur; + + for (n_cur = 0;n_cur < gen_nb_const_xmlChar_ptr;n_cur++) { + mem_base = xmlMemBlocks(); + cur = gen_const_xmlChar_ptr(n_cur, 0); + + ret_val = xmlParseDoc((const xmlChar *)cur); + desret_xmlDocPtr(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_cur, (const xmlChar *)cur, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlParseDoc", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_cur); + printf("\n"); + } + } + function_tests++; +#endif +#endif + + return(test_ret); +} + + +static int +test_xmlParseDocument(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlParserCtxtPtr ctxt; /* an XML parser context */ + int n_ctxt; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0); + + ret_val = xmlParseDocument(ctxt); + if (ctxt != NULL) {xmlFreeDoc(ctxt->myDoc); ctxt->myDoc = NULL;} + desret_int(ret_val); + call_tests++; + des_xmlParserCtxtPtr(n_ctxt, ctxt, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlParseDocument", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlParseEntity(void) { + int test_ret = 0; + +#if defined(LIBXML_SAX1_ENABLED) +#ifdef LIBXML_SAX1_ENABLED + int mem_base; + xmlDocPtr ret_val; + const char * filename; /* the filename */ + int n_filename; + + for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) { + mem_base = xmlMemBlocks(); + filename = gen_filepath(n_filename, 0); + + ret_val = xmlParseEntity(filename); + desret_xmlDocPtr(ret_val); + call_tests++; + des_filepath(n_filename, filename, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlParseEntity", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_filename); + printf("\n"); + } + } + function_tests++; +#endif +#endif + + return(test_ret); +} + + +static int +test_xmlParseExtParsedEnt(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlParserCtxtPtr ctxt; /* an XML parser context */ + int n_ctxt; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0); + + ret_val = xmlParseExtParsedEnt(ctxt); + if (ctxt != NULL) {xmlFreeDoc(ctxt->myDoc); ctxt->myDoc = NULL;} + desret_int(ret_val); + call_tests++; + des_xmlParserCtxtPtr(n_ctxt, ctxt, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlParseExtParsedEnt", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlParseExternalEntity(void) { + int test_ret = 0; + +#if defined(LIBXML_SAX1_ENABLED) +#ifdef LIBXML_SAX1_ENABLED + int mem_base; + int ret_val; + xmlDocPtr doc; /* the document the chunk pertains to */ + int n_doc; + xmlSAXHandlerPtr sax; /* the SAX handler bloc (possibly NULL) */ + int n_sax; + void * user_data; /* The user data returned on SAX callbacks (possibly NULL) */ + int n_user_data; + int depth; /* Used for loop detection, use 0 */ + int n_depth; + xmlChar * URL; /* the URL for the entity to load */ + int n_URL; + xmlChar * ID; /* the System ID for the entity to load */ + int n_ID; + xmlNodePtr * lst; /* the return value for the set of parsed nodes */ + int n_lst; + + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_sax = 0;n_sax < gen_nb_xmlSAXHandlerPtr;n_sax++) { + for (n_user_data = 0;n_user_data < gen_nb_userdata;n_user_data++) { + for (n_depth = 0;n_depth < gen_nb_int;n_depth++) { + for (n_URL = 0;n_URL < gen_nb_const_xmlChar_ptr;n_URL++) { + for (n_ID = 0;n_ID < gen_nb_const_xmlChar_ptr;n_ID++) { + for (n_lst = 0;n_lst < gen_nb_xmlNodePtr_ptr;n_lst++) { + mem_base = xmlMemBlocks(); + doc = gen_xmlDocPtr(n_doc, 0); + sax = gen_xmlSAXHandlerPtr(n_sax, 1); + user_data = gen_userdata(n_user_data, 2); + depth = gen_int(n_depth, 3); + URL = gen_const_xmlChar_ptr(n_URL, 4); + ID = gen_const_xmlChar_ptr(n_ID, 5); + lst = gen_xmlNodePtr_ptr(n_lst, 6); + + ret_val = xmlParseExternalEntity(doc, sax, user_data, depth, (const xmlChar *)URL, (const xmlChar *)ID, lst); + desret_int(ret_val); + call_tests++; + des_xmlDocPtr(n_doc, doc, 0); + des_xmlSAXHandlerPtr(n_sax, sax, 1); + des_userdata(n_user_data, user_data, 2); + des_int(n_depth, depth, 3); + des_const_xmlChar_ptr(n_URL, (const xmlChar *)URL, 4); + des_const_xmlChar_ptr(n_ID, (const xmlChar *)ID, 5); + des_xmlNodePtr_ptr(n_lst, lst, 6); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlParseExternalEntity", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf(" %d", n_sax); + printf(" %d", n_user_data); + printf(" %d", n_depth); + printf(" %d", n_URL); + printf(" %d", n_ID); + printf(" %d", n_lst); + printf("\n"); + } + } + } + } + } + } + } + } + function_tests++; +#endif +#endif + + return(test_ret); +} + + +static int +test_xmlParseFile(void) { + int test_ret = 0; + +#if defined(LIBXML_SAX1_ENABLED) +#ifdef LIBXML_SAX1_ENABLED + int mem_base; + xmlDocPtr ret_val; + const char * filename; /* the filename */ + int n_filename; + + for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) { + mem_base = xmlMemBlocks(); + filename = gen_filepath(n_filename, 0); + + ret_val = xmlParseFile(filename); + desret_xmlDocPtr(ret_val); + call_tests++; + des_filepath(n_filename, filename, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlParseFile", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_filename); + printf("\n"); + } + } + function_tests++; +#endif +#endif + + return(test_ret); +} + + +static int +test_xmlParseInNodeContext(void) { + int test_ret = 0; + + int mem_base; + xmlParserErrors ret_val; + xmlNodePtr node; /* the context node */ + int n_node; + char * data; /* the input string */ + int n_data; + int datalen; /* the input string length in bytes */ + int n_datalen; + int options; /* a combination of xmlParserOption */ + int n_options; + xmlNodePtr * lst; /* the return value for the set of parsed nodes */ + int n_lst; + + for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) { + for (n_data = 0;n_data < gen_nb_const_char_ptr;n_data++) { + for (n_datalen = 0;n_datalen < gen_nb_int;n_datalen++) { + for (n_options = 0;n_options < gen_nb_parseroptions;n_options++) { + for (n_lst = 0;n_lst < gen_nb_xmlNodePtr_ptr;n_lst++) { + mem_base = xmlMemBlocks(); + node = gen_xmlNodePtr(n_node, 0); + data = gen_const_char_ptr(n_data, 1); + datalen = gen_int(n_datalen, 2); + options = gen_parseroptions(n_options, 3); + lst = gen_xmlNodePtr_ptr(n_lst, 4); + + ret_val = xmlParseInNodeContext(node, (const char *)data, datalen, options, lst); + desret_xmlParserErrors(ret_val); + call_tests++; + des_xmlNodePtr(n_node, node, 0); + des_const_char_ptr(n_data, (const char *)data, 1); + des_int(n_datalen, datalen, 2); + des_parseroptions(n_options, options, 3); + des_xmlNodePtr_ptr(n_lst, lst, 4); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlParseInNodeContext", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_node); + printf(" %d", n_data); + printf(" %d", n_datalen); + printf(" %d", n_options); + printf(" %d", n_lst); + printf("\n"); + } + } + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlParseMemory(void) { + int test_ret = 0; + +#if defined(LIBXML_SAX1_ENABLED) +#ifdef LIBXML_SAX1_ENABLED + int mem_base; + xmlDocPtr ret_val; + char * buffer; /* an pointer to a char array */ + int n_buffer; + int size; /* the size of the array */ + int n_size; + + for (n_buffer = 0;n_buffer < gen_nb_const_char_ptr;n_buffer++) { + for (n_size = 0;n_size < gen_nb_int;n_size++) { + mem_base = xmlMemBlocks(); + buffer = gen_const_char_ptr(n_buffer, 0); + size = gen_int(n_size, 1); + + ret_val = xmlParseMemory((const char *)buffer, size); + desret_xmlDocPtr(ret_val); + call_tests++; + des_const_char_ptr(n_buffer, (const char *)buffer, 0); + des_int(n_size, size, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlParseMemory", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_buffer); + printf(" %d", n_size); + printf("\n"); + } + } + } + function_tests++; +#endif +#endif + + return(test_ret); +} + + +#define gen_nb_const_xmlParserNodeInfoPtr 1 +static xmlParserNodeInfoPtr gen_const_xmlParserNodeInfoPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_const_xmlParserNodeInfoPtr(int no ATTRIBUTE_UNUSED, const xmlParserNodeInfoPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +static int +test_xmlParserAddNodeInfo(void) { + int test_ret = 0; + + int mem_base; + xmlParserCtxtPtr ctxt; /* an XML parser context */ + int n_ctxt; + xmlParserNodeInfoPtr info; /* a node info sequence pointer */ + int n_info; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) { + for (n_info = 0;n_info < gen_nb_const_xmlParserNodeInfoPtr;n_info++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0); + info = gen_const_xmlParserNodeInfoPtr(n_info, 1); + + xmlParserAddNodeInfo(ctxt, (const xmlParserNodeInfoPtr)info); + call_tests++; + des_xmlParserCtxtPtr(n_ctxt, ctxt, 0); + des_const_xmlParserNodeInfoPtr(n_info, (const xmlParserNodeInfoPtr)info, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlParserAddNodeInfo", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_info); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +#define gen_nb_const_xmlParserCtxtPtr 1 +static xmlParserCtxtPtr gen_const_xmlParserCtxtPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_const_xmlParserCtxtPtr(int no ATTRIBUTE_UNUSED, const xmlParserCtxtPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +#define gen_nb_const_xmlNodePtr 1 +static xmlNodePtr gen_const_xmlNodePtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_const_xmlNodePtr(int no ATTRIBUTE_UNUSED, const xmlNodePtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +static int +test_xmlParserFindNodeInfo(void) { + int test_ret = 0; + + int mem_base; + const xmlParserNodeInfo * ret_val; + xmlParserCtxtPtr ctx; /* an XML parser context */ + int n_ctx; + xmlNodePtr node; /* an XML node within the tree */ + int n_node; + + for (n_ctx = 0;n_ctx < gen_nb_const_xmlParserCtxtPtr;n_ctx++) { + for (n_node = 0;n_node < gen_nb_const_xmlNodePtr;n_node++) { + mem_base = xmlMemBlocks(); + ctx = gen_const_xmlParserCtxtPtr(n_ctx, 0); + node = gen_const_xmlNodePtr(n_node, 1); + + ret_val = xmlParserFindNodeInfo((const xmlParserCtxtPtr)ctx, (const xmlNodePtr)node); + desret_const_xmlParserNodeInfo_ptr(ret_val); + call_tests++; + des_const_xmlParserCtxtPtr(n_ctx, (const xmlParserCtxtPtr)ctx, 0); + des_const_xmlNodePtr(n_node, (const xmlNodePtr)node, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlParserFindNodeInfo", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctx); + printf(" %d", n_node); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +#define gen_nb_const_xmlParserNodeInfoSeqPtr 1 +static xmlParserNodeInfoSeqPtr gen_const_xmlParserNodeInfoSeqPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_const_xmlParserNodeInfoSeqPtr(int no ATTRIBUTE_UNUSED, const xmlParserNodeInfoSeqPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +static int +test_xmlParserFindNodeInfoIndex(void) { + int test_ret = 0; + + int mem_base; + unsigned long ret_val; + xmlParserNodeInfoSeqPtr seq; /* a node info sequence pointer */ + int n_seq; + xmlNodePtr node; /* an XML node pointer */ + int n_node; + + for (n_seq = 0;n_seq < gen_nb_const_xmlParserNodeInfoSeqPtr;n_seq++) { + for (n_node = 0;n_node < gen_nb_const_xmlNodePtr;n_node++) { + mem_base = xmlMemBlocks(); + seq = gen_const_xmlParserNodeInfoSeqPtr(n_seq, 0); + node = gen_const_xmlNodePtr(n_node, 1); + + ret_val = xmlParserFindNodeInfoIndex((const xmlParserNodeInfoSeqPtr)seq, (const xmlNodePtr)node); + desret_unsigned_long(ret_val); + call_tests++; + des_const_xmlParserNodeInfoSeqPtr(n_seq, (const xmlParserNodeInfoSeqPtr)seq, 0); + des_const_xmlNodePtr(n_node, (const xmlNodePtr)node, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlParserFindNodeInfoIndex", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_seq); + printf(" %d", n_node); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +#define gen_nb_xmlParserInputPtr 1 +static xmlParserInputPtr gen_xmlParserInputPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlParserInputPtr(int no ATTRIBUTE_UNUSED, xmlParserInputPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +static int +test_xmlParserInputGrow(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlParserInputPtr in; /* an XML parser input */ + int n_in; + int len; /* an indicative size for the lookahead */ + int n_len; + + for (n_in = 0;n_in < gen_nb_xmlParserInputPtr;n_in++) { + for (n_len = 0;n_len < gen_nb_int;n_len++) { + mem_base = xmlMemBlocks(); + in = gen_xmlParserInputPtr(n_in, 0); + len = gen_int(n_len, 1); + + ret_val = xmlParserInputGrow(in, len); + desret_int(ret_val); + call_tests++; + des_xmlParserInputPtr(n_in, in, 0); + des_int(n_len, len, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlParserInputGrow", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_in); + printf(" %d", n_len); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlParserInputRead(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlParserInputPtr in; /* an XML parser input */ + int n_in; + int len; /* an indicative size for the lookahead */ + int n_len; + + for (n_in = 0;n_in < gen_nb_xmlParserInputPtr;n_in++) { + for (n_len = 0;n_len < gen_nb_int;n_len++) { + mem_base = xmlMemBlocks(); + in = gen_xmlParserInputPtr(n_in, 0); + len = gen_int(n_len, 1); + + ret_val = xmlParserInputRead(in, len); + desret_int(ret_val); + call_tests++; + des_xmlParserInputPtr(n_in, in, 0); + des_int(n_len, len, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlParserInputRead", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_in); + printf(" %d", n_len); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlPedanticParserDefault(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + int val; /* int 0 or 1 */ + int n_val; + + for (n_val = 0;n_val < gen_nb_int;n_val++) { + mem_base = xmlMemBlocks(); + val = gen_int(n_val, 0); + + ret_val = xmlPedanticParserDefault(val); + desret_int(ret_val); + call_tests++; + des_int(n_val, val, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlPedanticParserDefault", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_val); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlReadDoc(void) { + int test_ret = 0; + + int mem_base; + xmlDocPtr ret_val; + xmlChar * cur; /* a pointer to a zero terminated string */ + int n_cur; + const char * URL; /* the base URL to use for the document */ + int n_URL; + char * encoding; /* the document encoding, or NULL */ + int n_encoding; + int options; /* a combination of xmlParserOption */ + int n_options; + + for (n_cur = 0;n_cur < gen_nb_const_xmlChar_ptr;n_cur++) { + for (n_URL = 0;n_URL < gen_nb_filepath;n_URL++) { + for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) { + for (n_options = 0;n_options < gen_nb_parseroptions;n_options++) { + mem_base = xmlMemBlocks(); + cur = gen_const_xmlChar_ptr(n_cur, 0); + URL = gen_filepath(n_URL, 1); + encoding = gen_const_char_ptr(n_encoding, 2); + options = gen_parseroptions(n_options, 3); + + ret_val = xmlReadDoc((const xmlChar *)cur, URL, (const char *)encoding, options); + desret_xmlDocPtr(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_cur, (const xmlChar *)cur, 0); + des_filepath(n_URL, URL, 1); + des_const_char_ptr(n_encoding, (const char *)encoding, 2); + des_parseroptions(n_options, options, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlReadDoc", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_cur); + printf(" %d", n_URL); + printf(" %d", n_encoding); + printf(" %d", n_options); + printf("\n"); + } + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlReadFile(void) { + int test_ret = 0; + + int mem_base; + xmlDocPtr ret_val; + const char * filename; /* a file or URL */ + int n_filename; + char * encoding; /* the document encoding, or NULL */ + int n_encoding; + int options; /* a combination of xmlParserOption */ + int n_options; + + for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) { + for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) { + for (n_options = 0;n_options < gen_nb_parseroptions;n_options++) { + mem_base = xmlMemBlocks(); + filename = gen_filepath(n_filename, 0); + encoding = gen_const_char_ptr(n_encoding, 1); + options = gen_parseroptions(n_options, 2); + + ret_val = xmlReadFile(filename, (const char *)encoding, options); + desret_xmlDocPtr(ret_val); + call_tests++; + des_filepath(n_filename, filename, 0); + des_const_char_ptr(n_encoding, (const char *)encoding, 1); + des_parseroptions(n_options, options, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlReadFile", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_filename); + printf(" %d", n_encoding); + printf(" %d", n_options); + printf("\n"); + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlReadMemory(void) { + int test_ret = 0; + + int mem_base; + xmlDocPtr ret_val; + char * buffer; /* a pointer to a char array */ + int n_buffer; + int size; /* the size of the array */ + int n_size; + const char * URL; /* the base URL to use for the document */ + int n_URL; + char * encoding; /* the document encoding, or NULL */ + int n_encoding; + int options; /* a combination of xmlParserOption */ + int n_options; + + for (n_buffer = 0;n_buffer < gen_nb_const_char_ptr;n_buffer++) { + for (n_size = 0;n_size < gen_nb_int;n_size++) { + for (n_URL = 0;n_URL < gen_nb_filepath;n_URL++) { + for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) { + for (n_options = 0;n_options < gen_nb_parseroptions;n_options++) { + mem_base = xmlMemBlocks(); + buffer = gen_const_char_ptr(n_buffer, 0); + size = gen_int(n_size, 1); + URL = gen_filepath(n_URL, 2); + encoding = gen_const_char_ptr(n_encoding, 3); + options = gen_parseroptions(n_options, 4); + + ret_val = xmlReadMemory((const char *)buffer, size, URL, (const char *)encoding, options); + desret_xmlDocPtr(ret_val); + call_tests++; + des_const_char_ptr(n_buffer, (const char *)buffer, 0); + des_int(n_size, size, 1); + des_filepath(n_URL, URL, 2); + des_const_char_ptr(n_encoding, (const char *)encoding, 3); + des_parseroptions(n_options, options, 4); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlReadMemory", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_buffer); + printf(" %d", n_size); + printf(" %d", n_URL); + printf(" %d", n_encoding); + printf(" %d", n_options); + printf("\n"); + } + } + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlRecoverDoc(void) { + int test_ret = 0; + +#if defined(LIBXML_SAX1_ENABLED) +#ifdef LIBXML_SAX1_ENABLED + int mem_base; + xmlDocPtr ret_val; + xmlChar * cur; /* a pointer to an array of xmlChar */ + int n_cur; + + for (n_cur = 0;n_cur < gen_nb_const_xmlChar_ptr;n_cur++) { + mem_base = xmlMemBlocks(); + cur = gen_const_xmlChar_ptr(n_cur, 0); + + ret_val = xmlRecoverDoc((const xmlChar *)cur); + desret_xmlDocPtr(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_cur, (const xmlChar *)cur, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlRecoverDoc", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_cur); + printf("\n"); + } + } + function_tests++; +#endif +#endif + + return(test_ret); +} + + +static int +test_xmlRecoverFile(void) { + int test_ret = 0; + +#if defined(LIBXML_SAX1_ENABLED) +#ifdef LIBXML_SAX1_ENABLED + int mem_base; + xmlDocPtr ret_val; + const char * filename; /* the filename */ + int n_filename; + + for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) { + mem_base = xmlMemBlocks(); + filename = gen_filepath(n_filename, 0); + + ret_val = xmlRecoverFile(filename); + desret_xmlDocPtr(ret_val); + call_tests++; + des_filepath(n_filename, filename, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlRecoverFile", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_filename); + printf("\n"); + } + } + function_tests++; +#endif +#endif + + return(test_ret); +} + + +static int +test_xmlRecoverMemory(void) { + int test_ret = 0; + +#if defined(LIBXML_SAX1_ENABLED) +#ifdef LIBXML_SAX1_ENABLED + int mem_base; + xmlDocPtr ret_val; + char * buffer; /* an pointer to a char array */ + int n_buffer; + int size; /* the size of the array */ + int n_size; + + for (n_buffer = 0;n_buffer < gen_nb_const_char_ptr;n_buffer++) { + for (n_size = 0;n_size < gen_nb_int;n_size++) { + mem_base = xmlMemBlocks(); + buffer = gen_const_char_ptr(n_buffer, 0); + size = gen_int(n_size, 1); + + ret_val = xmlRecoverMemory((const char *)buffer, size); + desret_xmlDocPtr(ret_val); + call_tests++; + des_const_char_ptr(n_buffer, (const char *)buffer, 0); + des_int(n_size, size, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlRecoverMemory", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_buffer); + printf(" %d", n_size); + printf("\n"); + } + } + } + function_tests++; +#endif +#endif + + return(test_ret); +} + + +static int +test_xmlSAXParseDTD(void) { + int test_ret = 0; + +#if defined(LIBXML_VALID_ENABLED) +#ifdef LIBXML_SAX1_ENABLED + int mem_base; + xmlDtdPtr ret_val; + xmlSAXHandlerPtr sax; /* the SAX handler block */ + int n_sax; + xmlChar * ExternalID; /* a NAME* containing the External ID of the DTD */ + int n_ExternalID; + xmlChar * SystemID; /* a NAME* containing the URL to the DTD */ + int n_SystemID; + + for (n_sax = 0;n_sax < gen_nb_xmlSAXHandlerPtr;n_sax++) { + for (n_ExternalID = 0;n_ExternalID < gen_nb_const_xmlChar_ptr;n_ExternalID++) { + for (n_SystemID = 0;n_SystemID < gen_nb_const_xmlChar_ptr;n_SystemID++) { + mem_base = xmlMemBlocks(); + sax = gen_xmlSAXHandlerPtr(n_sax, 0); + ExternalID = gen_const_xmlChar_ptr(n_ExternalID, 1); + SystemID = gen_const_xmlChar_ptr(n_SystemID, 2); + + ret_val = xmlSAXParseDTD(sax, (const xmlChar *)ExternalID, (const xmlChar *)SystemID); + desret_xmlDtdPtr(ret_val); + call_tests++; + des_xmlSAXHandlerPtr(n_sax, sax, 0); + des_const_xmlChar_ptr(n_ExternalID, (const xmlChar *)ExternalID, 1); + des_const_xmlChar_ptr(n_SystemID, (const xmlChar *)SystemID, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSAXParseDTD", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_sax); + printf(" %d", n_ExternalID); + printf(" %d", n_SystemID); + printf("\n"); + } + } + } + } + function_tests++; +#endif +#endif + + return(test_ret); +} + + +static int +test_xmlSAXParseDoc(void) { + int test_ret = 0; + +#if defined(LIBXML_SAX1_ENABLED) +#ifdef LIBXML_SAX1_ENABLED + int mem_base; + xmlDocPtr ret_val; + xmlSAXHandlerPtr sax; /* the SAX handler block */ + int n_sax; + xmlChar * cur; /* a pointer to an array of xmlChar */ + int n_cur; + int recovery; /* work in recovery mode, i.e. tries to read no Well Formed documents */ + int n_recovery; + + for (n_sax = 0;n_sax < gen_nb_xmlSAXHandlerPtr;n_sax++) { + for (n_cur = 0;n_cur < gen_nb_const_xmlChar_ptr;n_cur++) { + for (n_recovery = 0;n_recovery < gen_nb_int;n_recovery++) { + mem_base = xmlMemBlocks(); + sax = gen_xmlSAXHandlerPtr(n_sax, 0); + cur = gen_const_xmlChar_ptr(n_cur, 1); + recovery = gen_int(n_recovery, 2); + + ret_val = xmlSAXParseDoc(sax, (const xmlChar *)cur, recovery); + desret_xmlDocPtr(ret_val); + call_tests++; + des_xmlSAXHandlerPtr(n_sax, sax, 0); + des_const_xmlChar_ptr(n_cur, (const xmlChar *)cur, 1); + des_int(n_recovery, recovery, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSAXParseDoc", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_sax); + printf(" %d", n_cur); + printf(" %d", n_recovery); + printf("\n"); + } + } + } + } + function_tests++; +#endif +#endif + + return(test_ret); +} + + +static int +test_xmlSAXParseEntity(void) { + int test_ret = 0; + +#if defined(LIBXML_SAX1_ENABLED) +#ifdef LIBXML_SAX1_ENABLED + int mem_base; + xmlDocPtr ret_val; + xmlSAXHandlerPtr sax; /* the SAX handler block */ + int n_sax; + const char * filename; /* the filename */ + int n_filename; + + for (n_sax = 0;n_sax < gen_nb_xmlSAXHandlerPtr;n_sax++) { + for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) { + mem_base = xmlMemBlocks(); + sax = gen_xmlSAXHandlerPtr(n_sax, 0); + filename = gen_filepath(n_filename, 1); + + ret_val = xmlSAXParseEntity(sax, filename); + desret_xmlDocPtr(ret_val); + call_tests++; + des_xmlSAXHandlerPtr(n_sax, sax, 0); + des_filepath(n_filename, filename, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSAXParseEntity", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_sax); + printf(" %d", n_filename); + printf("\n"); + } + } + } + function_tests++; +#endif +#endif + + return(test_ret); +} + + +static int +test_xmlSAXParseFile(void) { + int test_ret = 0; + +#if defined(LIBXML_SAX1_ENABLED) +#ifdef LIBXML_SAX1_ENABLED + int mem_base; + xmlDocPtr ret_val; + xmlSAXHandlerPtr sax; /* the SAX handler block */ + int n_sax; + const char * filename; /* the filename */ + int n_filename; + int recovery; /* work in recovery mode, i.e. tries to read no Well Formed documents */ + int n_recovery; + + for (n_sax = 0;n_sax < gen_nb_xmlSAXHandlerPtr;n_sax++) { + for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) { + for (n_recovery = 0;n_recovery < gen_nb_int;n_recovery++) { + mem_base = xmlMemBlocks(); + sax = gen_xmlSAXHandlerPtr(n_sax, 0); + filename = gen_filepath(n_filename, 1); + recovery = gen_int(n_recovery, 2); + + ret_val = xmlSAXParseFile(sax, filename, recovery); + desret_xmlDocPtr(ret_val); + call_tests++; + des_xmlSAXHandlerPtr(n_sax, sax, 0); + des_filepath(n_filename, filename, 1); + des_int(n_recovery, recovery, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSAXParseFile", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_sax); + printf(" %d", n_filename); + printf(" %d", n_recovery); + printf("\n"); + } + } + } + } + function_tests++; +#endif +#endif + + return(test_ret); +} + + +static int +test_xmlSAXParseFileWithData(void) { + int test_ret = 0; + +#if defined(LIBXML_SAX1_ENABLED) +#ifdef LIBXML_SAX1_ENABLED + int mem_base; + xmlDocPtr ret_val; + xmlSAXHandlerPtr sax; /* the SAX handler block */ + int n_sax; + const char * filename; /* the filename */ + int n_filename; + int recovery; /* work in recovery mode, i.e. tries to read no Well Formed documents */ + int n_recovery; + void * data; /* the userdata */ + int n_data; + + for (n_sax = 0;n_sax < gen_nb_xmlSAXHandlerPtr;n_sax++) { + for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) { + for (n_recovery = 0;n_recovery < gen_nb_int;n_recovery++) { + for (n_data = 0;n_data < gen_nb_userdata;n_data++) { + mem_base = xmlMemBlocks(); + sax = gen_xmlSAXHandlerPtr(n_sax, 0); + filename = gen_filepath(n_filename, 1); + recovery = gen_int(n_recovery, 2); + data = gen_userdata(n_data, 3); + + ret_val = xmlSAXParseFileWithData(sax, filename, recovery, data); + desret_xmlDocPtr(ret_val); + call_tests++; + des_xmlSAXHandlerPtr(n_sax, sax, 0); + des_filepath(n_filename, filename, 1); + des_int(n_recovery, recovery, 2); + des_userdata(n_data, data, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSAXParseFileWithData", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_sax); + printf(" %d", n_filename); + printf(" %d", n_recovery); + printf(" %d", n_data); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif +#endif + + return(test_ret); +} + + +static int +test_xmlSAXParseMemory(void) { + int test_ret = 0; + +#if defined(LIBXML_SAX1_ENABLED) +#ifdef LIBXML_SAX1_ENABLED + int mem_base; + xmlDocPtr ret_val; + xmlSAXHandlerPtr sax; /* the SAX handler block */ + int n_sax; + char * buffer; /* an pointer to a char array */ + int n_buffer; + int size; /* the size of the array */ + int n_size; + int recovery; /* work in recovery mode, i.e. tries to read not Well Formed documents */ + int n_recovery; + + for (n_sax = 0;n_sax < gen_nb_xmlSAXHandlerPtr;n_sax++) { + for (n_buffer = 0;n_buffer < gen_nb_const_char_ptr;n_buffer++) { + for (n_size = 0;n_size < gen_nb_int;n_size++) { + for (n_recovery = 0;n_recovery < gen_nb_int;n_recovery++) { + mem_base = xmlMemBlocks(); + sax = gen_xmlSAXHandlerPtr(n_sax, 0); + buffer = gen_const_char_ptr(n_buffer, 1); + size = gen_int(n_size, 2); + recovery = gen_int(n_recovery, 3); + + ret_val = xmlSAXParseMemory(sax, (const char *)buffer, size, recovery); + desret_xmlDocPtr(ret_val); + call_tests++; + des_xmlSAXHandlerPtr(n_sax, sax, 0); + des_const_char_ptr(n_buffer, (const char *)buffer, 1); + des_int(n_size, size, 2); + des_int(n_recovery, recovery, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSAXParseMemory", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_sax); + printf(" %d", n_buffer); + printf(" %d", n_size); + printf(" %d", n_recovery); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif +#endif + + return(test_ret); +} + + +static int +test_xmlSAXParseMemoryWithData(void) { + int test_ret = 0; + +#if defined(LIBXML_SAX1_ENABLED) +#ifdef LIBXML_SAX1_ENABLED + int mem_base; + xmlDocPtr ret_val; + xmlSAXHandlerPtr sax; /* the SAX handler block */ + int n_sax; + char * buffer; /* an pointer to a char array */ + int n_buffer; + int size; /* the size of the array */ + int n_size; + int recovery; /* work in recovery mode, i.e. tries to read no Well Formed documents */ + int n_recovery; + void * data; /* the userdata */ + int n_data; + + for (n_sax = 0;n_sax < gen_nb_xmlSAXHandlerPtr;n_sax++) { + for (n_buffer = 0;n_buffer < gen_nb_const_char_ptr;n_buffer++) { + for (n_size = 0;n_size < gen_nb_int;n_size++) { + for (n_recovery = 0;n_recovery < gen_nb_int;n_recovery++) { + for (n_data = 0;n_data < gen_nb_userdata;n_data++) { + mem_base = xmlMemBlocks(); + sax = gen_xmlSAXHandlerPtr(n_sax, 0); + buffer = gen_const_char_ptr(n_buffer, 1); + size = gen_int(n_size, 2); + recovery = gen_int(n_recovery, 3); + data = gen_userdata(n_data, 4); + + ret_val = xmlSAXParseMemoryWithData(sax, (const char *)buffer, size, recovery, data); + desret_xmlDocPtr(ret_val); + call_tests++; + des_xmlSAXHandlerPtr(n_sax, sax, 0); + des_const_char_ptr(n_buffer, (const char *)buffer, 1); + des_int(n_size, size, 2); + des_int(n_recovery, recovery, 3); + des_userdata(n_data, data, 4); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSAXParseMemoryWithData", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_sax); + printf(" %d", n_buffer); + printf(" %d", n_size); + printf(" %d", n_recovery); + printf(" %d", n_data); + printf("\n"); + } + } + } + } + } + } + function_tests++; +#endif +#endif + + return(test_ret); +} + + +static int +test_xmlSAXUserParseFile(void) { + int test_ret = 0; + +#if defined(LIBXML_SAX1_ENABLED) +#ifdef LIBXML_SAX1_ENABLED + int mem_base; + int ret_val; + xmlSAXHandlerPtr sax; /* a SAX handler */ + int n_sax; + void * user_data; /* The user data returned on SAX callbacks */ + int n_user_data; + const char * filename; /* a file name */ + int n_filename; + + for (n_sax = 0;n_sax < gen_nb_xmlSAXHandlerPtr;n_sax++) { + for (n_user_data = 0;n_user_data < gen_nb_userdata;n_user_data++) { + for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) { + mem_base = xmlMemBlocks(); + sax = gen_xmlSAXHandlerPtr(n_sax, 0); + user_data = gen_userdata(n_user_data, 1); + filename = gen_filepath(n_filename, 2); + +#ifdef LIBXML_SAX1_ENABLED + if (sax == (xmlSAXHandlerPtr)&xmlDefaultSAXHandler) user_data = NULL; +#endif + + + ret_val = xmlSAXUserParseFile(sax, user_data, filename); + desret_int(ret_val); + call_tests++; + des_xmlSAXHandlerPtr(n_sax, sax, 0); + des_userdata(n_user_data, user_data, 1); + des_filepath(n_filename, filename, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSAXUserParseFile", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_sax); + printf(" %d", n_user_data); + printf(" %d", n_filename); + printf("\n"); + } + } + } + } + function_tests++; +#endif +#endif + + return(test_ret); +} + + +static int +test_xmlSAXUserParseMemory(void) { + int test_ret = 0; + +#if defined(LIBXML_SAX1_ENABLED) +#ifdef LIBXML_SAX1_ENABLED + int mem_base; + int ret_val; + xmlSAXHandlerPtr sax; /* a SAX handler */ + int n_sax; + void * user_data; /* The user data returned on SAX callbacks */ + int n_user_data; + char * buffer; /* an in-memory XML document input */ + int n_buffer; + int size; /* the length of the XML document in bytes */ + int n_size; + + for (n_sax = 0;n_sax < gen_nb_xmlSAXHandlerPtr;n_sax++) { + for (n_user_data = 0;n_user_data < gen_nb_userdata;n_user_data++) { + for (n_buffer = 0;n_buffer < gen_nb_const_char_ptr;n_buffer++) { + for (n_size = 0;n_size < gen_nb_int;n_size++) { + mem_base = xmlMemBlocks(); + sax = gen_xmlSAXHandlerPtr(n_sax, 0); + user_data = gen_userdata(n_user_data, 1); + buffer = gen_const_char_ptr(n_buffer, 2); + size = gen_int(n_size, 3); + +#ifdef LIBXML_SAX1_ENABLED + if (sax == (xmlSAXHandlerPtr)&xmlDefaultSAXHandler) user_data = NULL; +#endif + + + ret_val = xmlSAXUserParseMemory(sax, user_data, (const char *)buffer, size); + desret_int(ret_val); + call_tests++; + des_xmlSAXHandlerPtr(n_sax, sax, 0); + des_userdata(n_user_data, user_data, 1); + des_const_char_ptr(n_buffer, (const char *)buffer, 2); + des_int(n_size, size, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSAXUserParseMemory", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_sax); + printf(" %d", n_user_data); + printf(" %d", n_buffer); + printf(" %d", n_size); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif +#endif + + return(test_ret); +} + + +static int +test_xmlSetExternalEntityLoader(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlSetFeature(void) { + int test_ret = 0; + +#if defined(LIBXML_LEGACY_ENABLED) +#ifdef LIBXML_LEGACY_ENABLED + int mem_base; + int ret_val; + xmlParserCtxtPtr ctxt; /* an XML/HTML parser context */ + int n_ctxt; + char * name; /* the feature name */ + int n_name; + void * value; /* pointer to the location of the new value */ + int n_value; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) { + for (n_name = 0;n_name < gen_nb_const_char_ptr;n_name++) { + for (n_value = 0;n_value < gen_nb_void_ptr;n_value++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0); + name = gen_const_char_ptr(n_name, 1); + value = gen_void_ptr(n_value, 2); + + ret_val = xmlSetFeature(ctxt, (const char *)name, value); + desret_int(ret_val); + call_tests++; + des_xmlParserCtxtPtr(n_ctxt, ctxt, 0); + des_const_char_ptr(n_name, (const char *)name, 1); + des_void_ptr(n_value, value, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSetFeature", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_name); + printf(" %d", n_value); + printf("\n"); + } + } + } + } + function_tests++; +#endif +#endif + + return(test_ret); +} + + +static int +test_xmlSetupParserForBuffer(void) { + int test_ret = 0; + +#if defined(LIBXML_SAX1_ENABLED) +#ifdef LIBXML_SAX1_ENABLED + int mem_base; + xmlParserCtxtPtr ctxt; /* an XML parser context */ + int n_ctxt; + xmlChar * buffer; /* a xmlChar * buffer */ + int n_buffer; + const char * filename; /* a file name */ + int n_filename; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) { + for (n_buffer = 0;n_buffer < gen_nb_const_xmlChar_ptr;n_buffer++) { + for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0); + buffer = gen_const_xmlChar_ptr(n_buffer, 1); + filename = gen_filepath(n_filename, 2); + + xmlSetupParserForBuffer(ctxt, (const xmlChar *)buffer, filename); + call_tests++; + des_xmlParserCtxtPtr(n_ctxt, ctxt, 0); + des_const_xmlChar_ptr(n_buffer, (const xmlChar *)buffer, 1); + des_filepath(n_filename, filename, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSetupParserForBuffer", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_buffer); + printf(" %d", n_filename); + printf("\n"); + } + } + } + } + function_tests++; +#endif +#endif + + return(test_ret); +} + + +static int +test_xmlStopParser(void) { + int test_ret = 0; + +#ifdef LIBXML_PUSH_ENABLED + int mem_base; + xmlParserCtxtPtr ctxt; /* an XML parser context */ + int n_ctxt; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0); + + xmlStopParser(ctxt); + call_tests++; + des_xmlParserCtxtPtr(n_ctxt, ctxt, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlStopParser", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlSubstituteEntitiesDefault(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + int val; /* int 0 or 1 */ + int n_val; + + for (n_val = 0;n_val < gen_nb_int;n_val++) { + mem_base = xmlMemBlocks(); + val = gen_int(n_val, 0); + + ret_val = xmlSubstituteEntitiesDefault(val); + desret_int(ret_val); + call_tests++; + des_int(n_val, val, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSubstituteEntitiesDefault", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_val); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + +static int +test_parser(void) { + int test_ret = 0; + + if (quiet == 0) printf("Testing parser : 61 of 70 functions ...\n"); + test_ret += test_xmlByteConsumed(); + test_ret += test_xmlClearNodeInfoSeq(); + test_ret += test_xmlClearParserCtxt(); + test_ret += test_xmlCreateDocParserCtxt(); + test_ret += test_xmlCreatePushParserCtxt(); + test_ret += test_xmlCtxtReadDoc(); + test_ret += test_xmlCtxtReadFile(); + test_ret += test_xmlCtxtReadMemory(); + test_ret += test_xmlCtxtReset(); + test_ret += test_xmlCtxtResetPush(); + test_ret += test_xmlCtxtUseOptions(); + test_ret += test_xmlGetExternalEntityLoader(); + test_ret += test_xmlGetFeature(); + test_ret += test_xmlGetFeaturesList(); + test_ret += test_xmlHasFeature(); + test_ret += test_xmlIOParseDTD(); + test_ret += test_xmlInitNodeInfoSeq(); + test_ret += test_xmlInitParser(); + test_ret += test_xmlInitParserCtxt(); + test_ret += test_xmlKeepBlanksDefault(); + test_ret += test_xmlLineNumbersDefault(); + test_ret += test_xmlLoadExternalEntity(); + test_ret += test_xmlNewIOInputStream(); + test_ret += test_xmlNewParserCtxt(); + test_ret += test_xmlParseBalancedChunkMemory(); + test_ret += test_xmlParseBalancedChunkMemoryRecover(); + test_ret += test_xmlParseChunk(); + test_ret += test_xmlParseCtxtExternalEntity(); + test_ret += test_xmlParseDTD(); + test_ret += test_xmlParseDoc(); + test_ret += test_xmlParseDocument(); + test_ret += test_xmlParseEntity(); + test_ret += test_xmlParseExtParsedEnt(); + test_ret += test_xmlParseExternalEntity(); + test_ret += test_xmlParseFile(); + test_ret += test_xmlParseInNodeContext(); + test_ret += test_xmlParseMemory(); + test_ret += test_xmlParserAddNodeInfo(); + test_ret += test_xmlParserFindNodeInfo(); + test_ret += test_xmlParserFindNodeInfoIndex(); + test_ret += test_xmlParserInputGrow(); + test_ret += test_xmlParserInputRead(); + test_ret += test_xmlPedanticParserDefault(); + test_ret += test_xmlReadDoc(); + test_ret += test_xmlReadFile(); + test_ret += test_xmlReadMemory(); + test_ret += test_xmlRecoverDoc(); + test_ret += test_xmlRecoverFile(); + test_ret += test_xmlRecoverMemory(); + test_ret += test_xmlSAXParseDTD(); + test_ret += test_xmlSAXParseDoc(); + test_ret += test_xmlSAXParseEntity(); + test_ret += test_xmlSAXParseFile(); + test_ret += test_xmlSAXParseFileWithData(); + test_ret += test_xmlSAXParseMemory(); + test_ret += test_xmlSAXParseMemoryWithData(); + test_ret += test_xmlSAXUserParseFile(); + test_ret += test_xmlSAXUserParseMemory(); + test_ret += test_xmlSetExternalEntityLoader(); + test_ret += test_xmlSetFeature(); + test_ret += test_xmlSetupParserForBuffer(); + test_ret += test_xmlStopParser(); + test_ret += test_xmlSubstituteEntitiesDefault(); + + if (test_ret != 0) + printf("Module parser: %d errors\n", test_ret); + return(test_ret); +} + +static int +test_htmlCreateFileParserCtxt(void) { + int test_ret = 0; + +#if defined(LIBXML_HTML_ENABLED) + int mem_base; + htmlParserCtxtPtr ret_val; + const char * filename; /* the filename */ + int n_filename; + char * encoding; /* a free form C string describing the HTML document encoding, or NULL */ + int n_encoding; + + for (n_filename = 0;n_filename < gen_nb_fileoutput;n_filename++) { + for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) { + mem_base = xmlMemBlocks(); + filename = gen_fileoutput(n_filename, 0); + encoding = gen_const_char_ptr(n_encoding, 1); + + ret_val = htmlCreateFileParserCtxt(filename, (const char *)encoding); + desret_htmlParserCtxtPtr(ret_val); + call_tests++; + des_fileoutput(n_filename, filename, 0); + des_const_char_ptr(n_encoding, (const char *)encoding, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in htmlCreateFileParserCtxt", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_filename); + printf(" %d", n_encoding); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_htmlInitAutoClose(void) { + int test_ret = 0; + +#if defined(LIBXML_HTML_ENABLED) + int mem_base; + + mem_base = xmlMemBlocks(); + + htmlInitAutoClose(); + call_tests++; + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in htmlInitAutoClose", + xmlMemBlocks() - mem_base); + test_ret++; + printf("\n"); + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_inputPop(void) { + int test_ret = 0; + + int mem_base; + xmlParserInputPtr ret_val; + xmlParserCtxtPtr ctxt; /* an XML parser context */ + int n_ctxt; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0); + + ret_val = inputPop(ctxt); + desret_xmlParserInputPtr(ret_val); + call_tests++; + des_xmlParserCtxtPtr(n_ctxt, ctxt, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in inputPop", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_inputPush(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlParserCtxtPtr ctxt; /* an XML parser context */ + int n_ctxt; + xmlParserInputPtr value; /* the parser input */ + int n_value; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) { + for (n_value = 0;n_value < gen_nb_xmlParserInputPtr;n_value++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0); + value = gen_xmlParserInputPtr(n_value, 1); + + ret_val = inputPush(ctxt, value); + desret_int(ret_val); + call_tests++; + des_xmlParserCtxtPtr(n_ctxt, ctxt, 0); + des_xmlParserInputPtr(n_value, value, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in inputPush", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_value); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_namePop(void) { + int test_ret = 0; + + int mem_base; + const xmlChar * ret_val; + xmlParserCtxtPtr ctxt; /* an XML parser context */ + int n_ctxt; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0); + + ret_val = namePop(ctxt); + desret_const_xmlChar_ptr(ret_val); + call_tests++; + des_xmlParserCtxtPtr(n_ctxt, ctxt, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in namePop", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_namePush(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlParserCtxtPtr ctxt; /* an XML parser context */ + int n_ctxt; + xmlChar * value; /* the element name */ + int n_value; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) { + for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0); + value = gen_const_xmlChar_ptr(n_value, 1); + + ret_val = namePush(ctxt, (const xmlChar *)value); + desret_int(ret_val); + call_tests++; + des_xmlParserCtxtPtr(n_ctxt, ctxt, 0); + des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in namePush", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_value); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_nodePop(void) { + int test_ret = 0; + + int mem_base; + xmlNodePtr ret_val; + xmlParserCtxtPtr ctxt; /* an XML parser context */ + int n_ctxt; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0); + + ret_val = nodePop(ctxt); + desret_xmlNodePtr(ret_val); + call_tests++; + des_xmlParserCtxtPtr(n_ctxt, ctxt, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in nodePop", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_nodePush(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlParserCtxtPtr ctxt; /* an XML parser context */ + int n_ctxt; + xmlNodePtr value; /* the element node */ + int n_value; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) { + for (n_value = 0;n_value < gen_nb_xmlNodePtr;n_value++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0); + value = gen_xmlNodePtr(n_value, 1); + + ret_val = nodePush(ctxt, value); + desret_int(ret_val); + call_tests++; + des_xmlParserCtxtPtr(n_ctxt, ctxt, 0); + des_xmlNodePtr(n_value, value, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in nodePush", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_value); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlCheckLanguageID(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlChar * lang; /* pointer to the string value */ + int n_lang; + + for (n_lang = 0;n_lang < gen_nb_const_xmlChar_ptr;n_lang++) { + mem_base = xmlMemBlocks(); + lang = gen_const_xmlChar_ptr(n_lang, 0); + + ret_val = xmlCheckLanguageID((const xmlChar *)lang); + desret_int(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_lang, (const xmlChar *)lang, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlCheckLanguageID", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_lang); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlCopyChar(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + int len; /* Ignored, compatibility */ + int n_len; + xmlChar * out; /* pointer to an array of xmlChar */ + int n_out; + int val; /* the char value */ + int n_val; + + for (n_len = 0;n_len < gen_nb_int;n_len++) { + for (n_out = 0;n_out < gen_nb_xmlChar_ptr;n_out++) { + for (n_val = 0;n_val < gen_nb_int;n_val++) { + mem_base = xmlMemBlocks(); + len = gen_int(n_len, 0); + out = gen_xmlChar_ptr(n_out, 1); + val = gen_int(n_val, 2); + + ret_val = xmlCopyChar(len, out, val); + desret_int(ret_val); + call_tests++; + des_int(n_len, len, 0); + des_xmlChar_ptr(n_out, out, 1); + des_int(n_val, val, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlCopyChar", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_len); + printf(" %d", n_out); + printf(" %d", n_val); + printf("\n"); + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlCopyCharMultiByte(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlChar * out; /* pointer to an array of xmlChar */ + int n_out; + int val; /* the char value */ + int n_val; + + for (n_out = 0;n_out < gen_nb_xmlChar_ptr;n_out++) { + for (n_val = 0;n_val < gen_nb_int;n_val++) { + mem_base = xmlMemBlocks(); + out = gen_xmlChar_ptr(n_out, 0); + val = gen_int(n_val, 1); + + ret_val = xmlCopyCharMultiByte(out, val); + desret_int(ret_val); + call_tests++; + des_xmlChar_ptr(n_out, out, 0); + des_int(n_val, val, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlCopyCharMultiByte", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_out); + printf(" %d", n_val); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlCreateEntityParserCtxt(void) { + int test_ret = 0; + + int mem_base; + xmlParserCtxtPtr ret_val; + xmlChar * URL; /* the entity URL */ + int n_URL; + xmlChar * ID; /* the entity PUBLIC ID */ + int n_ID; + xmlChar * base; /* a possible base for the target URI */ + int n_base; + + for (n_URL = 0;n_URL < gen_nb_const_xmlChar_ptr;n_URL++) { + for (n_ID = 0;n_ID < gen_nb_const_xmlChar_ptr;n_ID++) { + for (n_base = 0;n_base < gen_nb_const_xmlChar_ptr;n_base++) { + mem_base = xmlMemBlocks(); + URL = gen_const_xmlChar_ptr(n_URL, 0); + ID = gen_const_xmlChar_ptr(n_ID, 1); + base = gen_const_xmlChar_ptr(n_base, 2); + + ret_val = xmlCreateEntityParserCtxt((const xmlChar *)URL, (const xmlChar *)ID, (const xmlChar *)base); + desret_xmlParserCtxtPtr(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_URL, (const xmlChar *)URL, 0); + des_const_xmlChar_ptr(n_ID, (const xmlChar *)ID, 1); + des_const_xmlChar_ptr(n_base, (const xmlChar *)base, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlCreateEntityParserCtxt", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_URL); + printf(" %d", n_ID); + printf(" %d", n_base); + printf("\n"); + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlCreateFileParserCtxt(void) { + int test_ret = 0; + + int mem_base; + xmlParserCtxtPtr ret_val; + const char * filename; /* the filename */ + int n_filename; + + for (n_filename = 0;n_filename < gen_nb_fileoutput;n_filename++) { + mem_base = xmlMemBlocks(); + filename = gen_fileoutput(n_filename, 0); + + ret_val = xmlCreateFileParserCtxt(filename); + desret_xmlParserCtxtPtr(ret_val); + call_tests++; + des_fileoutput(n_filename, filename, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlCreateFileParserCtxt", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_filename); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlCreateMemoryParserCtxt(void) { + int test_ret = 0; + + int mem_base; + xmlParserCtxtPtr ret_val; + char * buffer; /* a pointer to a char array */ + int n_buffer; + int size; /* the size of the array */ + int n_size; + + for (n_buffer = 0;n_buffer < gen_nb_const_char_ptr;n_buffer++) { + for (n_size = 0;n_size < gen_nb_int;n_size++) { + mem_base = xmlMemBlocks(); + buffer = gen_const_char_ptr(n_buffer, 0); + size = gen_int(n_size, 1); + + ret_val = xmlCreateMemoryParserCtxt((const char *)buffer, size); + desret_xmlParserCtxtPtr(ret_val); + call_tests++; + des_const_char_ptr(n_buffer, (const char *)buffer, 0); + des_int(n_size, size, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlCreateMemoryParserCtxt", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_buffer); + printf(" %d", n_size); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlCreateURLParserCtxt(void) { + int test_ret = 0; + + int mem_base; + xmlParserCtxtPtr ret_val; + const char * filename; /* the filename or URL */ + int n_filename; + int options; /* a combination of xmlParserOption */ + int n_options; + + for (n_filename = 0;n_filename < gen_nb_fileoutput;n_filename++) { + for (n_options = 0;n_options < gen_nb_int;n_options++) { + mem_base = xmlMemBlocks(); + filename = gen_fileoutput(n_filename, 0); + options = gen_int(n_options, 1); + + ret_val = xmlCreateURLParserCtxt(filename, options); + desret_xmlParserCtxtPtr(ret_val); + call_tests++; + des_fileoutput(n_filename, filename, 0); + des_int(n_options, options, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlCreateURLParserCtxt", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_filename); + printf(" %d", n_options); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlCurrentChar(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlParserCtxtPtr ctxt; /* the XML parser context */ + int n_ctxt; + int * len; /* pointer to the length of the char read */ + int n_len; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) { + for (n_len = 0;n_len < gen_nb_int_ptr;n_len++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0); + len = gen_int_ptr(n_len, 1); + + ret_val = xmlCurrentChar(ctxt, len); + desret_int(ret_val); + call_tests++; + des_xmlParserCtxtPtr(n_ctxt, ctxt, 0); + des_int_ptr(n_len, len, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlCurrentChar", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_len); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlErrMemory(void) { + int test_ret = 0; + + int mem_base; + xmlParserCtxtPtr ctxt; /* an XML parser context */ + int n_ctxt; + char * extra; /* extra informations */ + int n_extra; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) { + for (n_extra = 0;n_extra < gen_nb_const_char_ptr;n_extra++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0); + extra = gen_const_char_ptr(n_extra, 1); + + xmlErrMemory(ctxt, (const char *)extra); + call_tests++; + des_xmlParserCtxtPtr(n_ctxt, ctxt, 0); + des_const_char_ptr(n_extra, (const char *)extra, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlErrMemory", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_extra); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlIsLetter(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + int c; /* an unicode character (int) */ + int n_c; + + for (n_c = 0;n_c < gen_nb_int;n_c++) { + mem_base = xmlMemBlocks(); + c = gen_int(n_c, 0); + + ret_val = xmlIsLetter(c); + desret_int(ret_val); + call_tests++; + des_int(n_c, c, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlIsLetter", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_c); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlNewEntityInputStream(void) { + int test_ret = 0; + + int mem_base; + xmlParserInputPtr ret_val; + xmlParserCtxtPtr ctxt; /* an XML parser context */ + int n_ctxt; + xmlEntityPtr entity; /* an Entity pointer */ + int n_entity; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) { + for (n_entity = 0;n_entity < gen_nb_xmlEntityPtr;n_entity++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0); + entity = gen_xmlEntityPtr(n_entity, 1); + + ret_val = xmlNewEntityInputStream(ctxt, entity); + desret_xmlParserInputPtr(ret_val); + call_tests++; + des_xmlParserCtxtPtr(n_ctxt, ctxt, 0); + des_xmlEntityPtr(n_entity, entity, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNewEntityInputStream", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_entity); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlNewInputFromFile(void) { + int test_ret = 0; + + int mem_base; + xmlParserInputPtr ret_val; + xmlParserCtxtPtr ctxt; /* an XML parser context */ + int n_ctxt; + const char * filename; /* the filename to use as entity */ + int n_filename; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) { + for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0); + filename = gen_filepath(n_filename, 1); + + ret_val = xmlNewInputFromFile(ctxt, filename); + desret_xmlParserInputPtr(ret_val); + call_tests++; + des_xmlParserCtxtPtr(n_ctxt, ctxt, 0); + des_filepath(n_filename, filename, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNewInputFromFile", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_filename); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlNewInputStream(void) { + int test_ret = 0; + + int mem_base; + xmlParserInputPtr ret_val; + xmlParserCtxtPtr ctxt; /* an XML parser context */ + int n_ctxt; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0); + + ret_val = xmlNewInputStream(ctxt); + desret_xmlParserInputPtr(ret_val); + call_tests++; + des_xmlParserCtxtPtr(n_ctxt, ctxt, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNewInputStream", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlNewStringInputStream(void) { + int test_ret = 0; + + int mem_base; + xmlParserInputPtr ret_val; + xmlParserCtxtPtr ctxt; /* an XML parser context */ + int n_ctxt; + xmlChar * buffer; /* an memory buffer */ + int n_buffer; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) { + for (n_buffer = 0;n_buffer < gen_nb_const_xmlChar_ptr;n_buffer++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0); + buffer = gen_const_xmlChar_ptr(n_buffer, 1); + + ret_val = xmlNewStringInputStream(ctxt, (const xmlChar *)buffer); + desret_xmlParserInputPtr(ret_val); + call_tests++; + des_xmlParserCtxtPtr(n_ctxt, ctxt, 0); + des_const_xmlChar_ptr(n_buffer, (const xmlChar *)buffer, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNewStringInputStream", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_buffer); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlNextChar(void) { + int test_ret = 0; + + int mem_base; + xmlParserCtxtPtr ctxt; /* the XML parser context */ + int n_ctxt; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0); + + xmlNextChar(ctxt); + call_tests++; + des_xmlParserCtxtPtr(n_ctxt, ctxt, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNextChar", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlParserInputShrink(void) { + int test_ret = 0; + + int mem_base; + xmlParserInputPtr in; /* an XML parser input */ + int n_in; + + for (n_in = 0;n_in < gen_nb_xmlParserInputPtr;n_in++) { + mem_base = xmlMemBlocks(); + in = gen_xmlParserInputPtr(n_in, 0); + + xmlParserInputShrink(in); + call_tests++; + des_xmlParserInputPtr(n_in, in, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlParserInputShrink", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_in); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlPopInput(void) { + int test_ret = 0; + + int mem_base; + xmlChar ret_val; + xmlParserCtxtPtr ctxt; /* an XML parser context */ + int n_ctxt; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0); + + ret_val = xmlPopInput(ctxt); + desret_xmlChar(ret_val); + call_tests++; + des_xmlParserCtxtPtr(n_ctxt, ctxt, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlPopInput", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlPushInput(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlParserCtxtPtr ctxt; /* an XML parser context */ + int n_ctxt; + xmlParserInputPtr input; /* an XML parser input fragment (entity, XML fragment ...). */ + int n_input; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) { + for (n_input = 0;n_input < gen_nb_xmlParserInputPtr;n_input++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0); + input = gen_xmlParserInputPtr(n_input, 1); + + ret_val = xmlPushInput(ctxt, input); + desret_int(ret_val); + call_tests++; + des_xmlParserCtxtPtr(n_ctxt, ctxt, 0); + des_xmlParserInputPtr(n_input, input, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlPushInput", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_input); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlSetEntityReferenceFunc(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlSplitQName(void) { + int test_ret = 0; + + int mem_base; + xmlChar * ret_val; + xmlParserCtxtPtr ctxt; /* an XML parser context */ + int n_ctxt; + xmlChar * name; /* an XML parser context */ + int n_name; + xmlChar ** prefix; /* a xmlChar ** */ + int n_prefix; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_prefix = 0;n_prefix < gen_nb_xmlChar_ptr_ptr;n_prefix++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + prefix = gen_xmlChar_ptr_ptr(n_prefix, 2); + + ret_val = xmlSplitQName(ctxt, (const xmlChar *)name, prefix); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_xmlParserCtxtPtr(n_ctxt, ctxt, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + des_xmlChar_ptr_ptr(n_prefix, prefix, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSplitQName", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_name); + printf(" %d", n_prefix); + printf("\n"); + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlStringCurrentChar(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlParserCtxtPtr ctxt; /* the XML parser context */ + int n_ctxt; + xmlChar * cur; /* pointer to the beginning of the char */ + int n_cur; + int * len; /* pointer to the length of the char read */ + int n_len; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) { + for (n_cur = 0;n_cur < gen_nb_const_xmlChar_ptr;n_cur++) { + for (n_len = 0;n_len < gen_nb_int_ptr;n_len++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0); + cur = gen_const_xmlChar_ptr(n_cur, 1); + len = gen_int_ptr(n_len, 2); + + ret_val = xmlStringCurrentChar(ctxt, (const xmlChar *)cur, len); + desret_int(ret_val); + call_tests++; + des_xmlParserCtxtPtr(n_ctxt, ctxt, 0); + des_const_xmlChar_ptr(n_cur, (const xmlChar *)cur, 1); + des_int_ptr(n_len, len, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlStringCurrentChar", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_cur); + printf(" %d", n_len); + printf("\n"); + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlStringDecodeEntities(void) { + int test_ret = 0; + + int mem_base; + xmlChar * ret_val; + xmlParserCtxtPtr ctxt; /* the parser context */ + int n_ctxt; + xmlChar * str; /* the input string */ + int n_str; + int what; /* combination of XML_SUBSTITUTE_REF and XML_SUBSTITUTE_PEREF */ + int n_what; + xmlChar end; /* an end marker xmlChar, 0 if none */ + int n_end; + xmlChar end2; /* an end marker xmlChar, 0 if none */ + int n_end2; + xmlChar end3; /* an end marker xmlChar, 0 if none */ + int n_end3; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) { + for (n_str = 0;n_str < gen_nb_const_xmlChar_ptr;n_str++) { + for (n_what = 0;n_what < gen_nb_int;n_what++) { + for (n_end = 0;n_end < gen_nb_xmlChar;n_end++) { + for (n_end2 = 0;n_end2 < gen_nb_xmlChar;n_end2++) { + for (n_end3 = 0;n_end3 < gen_nb_xmlChar;n_end3++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0); + str = gen_const_xmlChar_ptr(n_str, 1); + what = gen_int(n_what, 2); + end = gen_xmlChar(n_end, 3); + end2 = gen_xmlChar(n_end2, 4); + end3 = gen_xmlChar(n_end3, 5); + + ret_val = xmlStringDecodeEntities(ctxt, (const xmlChar *)str, what, end, end2, end3); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_xmlParserCtxtPtr(n_ctxt, ctxt, 0); + des_const_xmlChar_ptr(n_str, (const xmlChar *)str, 1); + des_int(n_what, what, 2); + des_xmlChar(n_end, end, 3); + des_xmlChar(n_end2, end2, 4); + des_xmlChar(n_end3, end3, 5); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlStringDecodeEntities", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_str); + printf(" %d", n_what); + printf(" %d", n_end); + printf(" %d", n_end2); + printf(" %d", n_end3); + printf("\n"); + } + } + } + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlStringLenDecodeEntities(void) { + int test_ret = 0; + + int mem_base; + xmlChar * ret_val; + xmlParserCtxtPtr ctxt; /* the parser context */ + int n_ctxt; + xmlChar * str; /* the input string */ + int n_str; + int len; /* the string length */ + int n_len; + int what; /* combination of XML_SUBSTITUTE_REF and XML_SUBSTITUTE_PEREF */ + int n_what; + xmlChar end; /* an end marker xmlChar, 0 if none */ + int n_end; + xmlChar end2; /* an end marker xmlChar, 0 if none */ + int n_end2; + xmlChar end3; /* an end marker xmlChar, 0 if none */ + int n_end3; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) { + for (n_str = 0;n_str < gen_nb_const_xmlChar_ptr;n_str++) { + for (n_len = 0;n_len < gen_nb_int;n_len++) { + for (n_what = 0;n_what < gen_nb_int;n_what++) { + for (n_end = 0;n_end < gen_nb_xmlChar;n_end++) { + for (n_end2 = 0;n_end2 < gen_nb_xmlChar;n_end2++) { + for (n_end3 = 0;n_end3 < gen_nb_xmlChar;n_end3++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0); + str = gen_const_xmlChar_ptr(n_str, 1); + len = gen_int(n_len, 2); + what = gen_int(n_what, 3); + end = gen_xmlChar(n_end, 4); + end2 = gen_xmlChar(n_end2, 5); + end3 = gen_xmlChar(n_end3, 6); + + ret_val = xmlStringLenDecodeEntities(ctxt, (const xmlChar *)str, len, what, end, end2, end3); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_xmlParserCtxtPtr(n_ctxt, ctxt, 0); + des_const_xmlChar_ptr(n_str, (const xmlChar *)str, 1); + des_int(n_len, len, 2); + des_int(n_what, what, 3); + des_xmlChar(n_end, end, 4); + des_xmlChar(n_end2, end2, 5); + des_xmlChar(n_end3, end3, 6); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlStringLenDecodeEntities", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_str); + printf(" %d", n_len); + printf(" %d", n_what); + printf(" %d", n_end); + printf(" %d", n_end2); + printf(" %d", n_end3); + printf("\n"); + } + } + } + } + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlSwitchEncoding(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlParserCtxtPtr ctxt; /* the parser context */ + int n_ctxt; + xmlCharEncoding enc; /* the encoding value (number) */ + int n_enc; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) { + for (n_enc = 0;n_enc < gen_nb_xmlCharEncoding;n_enc++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0); + enc = gen_xmlCharEncoding(n_enc, 1); + + ret_val = xmlSwitchEncoding(ctxt, enc); + desret_int(ret_val); + call_tests++; + des_xmlParserCtxtPtr(n_ctxt, ctxt, 0); + des_xmlCharEncoding(n_enc, enc, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSwitchEncoding", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_enc); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlSwitchInputEncoding(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlParserCtxtPtr ctxt; /* the parser context */ + int n_ctxt; + xmlParserInputPtr input; /* the input stream */ + int n_input; + xmlCharEncodingHandlerPtr handler; /* the encoding handler */ + int n_handler; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) { + for (n_input = 0;n_input < gen_nb_xmlParserInputPtr;n_input++) { + for (n_handler = 0;n_handler < gen_nb_xmlCharEncodingHandlerPtr;n_handler++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0); + input = gen_xmlParserInputPtr(n_input, 1); + handler = gen_xmlCharEncodingHandlerPtr(n_handler, 2); + + ret_val = xmlSwitchInputEncoding(ctxt, input, handler); + desret_int(ret_val); + call_tests++; + des_xmlParserCtxtPtr(n_ctxt, ctxt, 0); + des_xmlParserInputPtr(n_input, input, 1); + des_xmlCharEncodingHandlerPtr(n_handler, handler, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSwitchInputEncoding", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_input); + printf(" %d", n_handler); + printf("\n"); + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlSwitchToEncoding(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlParserCtxtPtr ctxt; /* the parser context */ + int n_ctxt; + xmlCharEncodingHandlerPtr handler; /* the encoding handler */ + int n_handler; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) { + for (n_handler = 0;n_handler < gen_nb_xmlCharEncodingHandlerPtr;n_handler++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0); + handler = gen_xmlCharEncodingHandlerPtr(n_handler, 1); + + ret_val = xmlSwitchToEncoding(ctxt, handler); + desret_int(ret_val); + call_tests++; + des_xmlParserCtxtPtr(n_ctxt, ctxt, 0); + des_xmlCharEncodingHandlerPtr(n_handler, handler, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSwitchToEncoding", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_handler); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + +static int +test_parserInternals(void) { + int test_ret = 0; + + if (quiet == 0) printf("Testing parserInternals : 33 of 90 functions ...\n"); + test_ret += test_htmlCreateFileParserCtxt(); + test_ret += test_htmlInitAutoClose(); + test_ret += test_inputPop(); + test_ret += test_inputPush(); + test_ret += test_namePop(); + test_ret += test_namePush(); + test_ret += test_nodePop(); + test_ret += test_nodePush(); + test_ret += test_xmlCheckLanguageID(); + test_ret += test_xmlCopyChar(); + test_ret += test_xmlCopyCharMultiByte(); + test_ret += test_xmlCreateEntityParserCtxt(); + test_ret += test_xmlCreateFileParserCtxt(); + test_ret += test_xmlCreateMemoryParserCtxt(); + test_ret += test_xmlCreateURLParserCtxt(); + test_ret += test_xmlCurrentChar(); + test_ret += test_xmlErrMemory(); + test_ret += test_xmlIsLetter(); + test_ret += test_xmlNewEntityInputStream(); + test_ret += test_xmlNewInputFromFile(); + test_ret += test_xmlNewInputStream(); + test_ret += test_xmlNewStringInputStream(); + test_ret += test_xmlNextChar(); + test_ret += test_xmlParserInputShrink(); + test_ret += test_xmlPopInput(); + test_ret += test_xmlPushInput(); + test_ret += test_xmlSetEntityReferenceFunc(); + test_ret += test_xmlSplitQName(); + test_ret += test_xmlStringCurrentChar(); + test_ret += test_xmlStringDecodeEntities(); + test_ret += test_xmlStringLenDecodeEntities(); + test_ret += test_xmlSwitchEncoding(); + test_ret += test_xmlSwitchInputEncoding(); + test_ret += test_xmlSwitchToEncoding(); + + if (test_ret != 0) + printf("Module parserInternals: %d errors\n", test_ret); + return(test_ret); +} + +static int +test_xmlPatternFromRoot(void) { + int test_ret = 0; + +#if defined(LIBXML_PATTERN_ENABLED) + int mem_base; + int ret_val; + xmlPatternPtr comp; /* the precompiled pattern */ + int n_comp; + + for (n_comp = 0;n_comp < gen_nb_xmlPatternPtr;n_comp++) { + mem_base = xmlMemBlocks(); + comp = gen_xmlPatternPtr(n_comp, 0); + + ret_val = xmlPatternFromRoot(comp); + desret_int(ret_val); + call_tests++; + des_xmlPatternPtr(n_comp, comp, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlPatternFromRoot", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_comp); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlPatternGetStreamCtxt(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlPatternMatch(void) { + int test_ret = 0; + +#if defined(LIBXML_PATTERN_ENABLED) + int mem_base; + int ret_val; + xmlPatternPtr comp; /* the precompiled pattern */ + int n_comp; + xmlNodePtr node; /* a node */ + int n_node; + + for (n_comp = 0;n_comp < gen_nb_xmlPatternPtr;n_comp++) { + for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) { + mem_base = xmlMemBlocks(); + comp = gen_xmlPatternPtr(n_comp, 0); + node = gen_xmlNodePtr(n_node, 1); + + ret_val = xmlPatternMatch(comp, node); + desret_int(ret_val); + call_tests++; + des_xmlPatternPtr(n_comp, comp, 0); + des_xmlNodePtr(n_node, node, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlPatternMatch", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_comp); + printf(" %d", n_node); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlPatternMaxDepth(void) { + int test_ret = 0; + +#if defined(LIBXML_PATTERN_ENABLED) + int mem_base; + int ret_val; + xmlPatternPtr comp; /* the precompiled pattern */ + int n_comp; + + for (n_comp = 0;n_comp < gen_nb_xmlPatternPtr;n_comp++) { + mem_base = xmlMemBlocks(); + comp = gen_xmlPatternPtr(n_comp, 0); + + ret_val = xmlPatternMaxDepth(comp); + desret_int(ret_val); + call_tests++; + des_xmlPatternPtr(n_comp, comp, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlPatternMaxDepth", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_comp); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlPatternMinDepth(void) { + int test_ret = 0; + +#if defined(LIBXML_PATTERN_ENABLED) + int mem_base; + int ret_val; + xmlPatternPtr comp; /* the precompiled pattern */ + int n_comp; + + for (n_comp = 0;n_comp < gen_nb_xmlPatternPtr;n_comp++) { + mem_base = xmlMemBlocks(); + comp = gen_xmlPatternPtr(n_comp, 0); + + ret_val = xmlPatternMinDepth(comp); + desret_int(ret_val); + call_tests++; + des_xmlPatternPtr(n_comp, comp, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlPatternMinDepth", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_comp); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlPatternStreamable(void) { + int test_ret = 0; + +#if defined(LIBXML_PATTERN_ENABLED) + int mem_base; + int ret_val; + xmlPatternPtr comp; /* the precompiled pattern */ + int n_comp; + + for (n_comp = 0;n_comp < gen_nb_xmlPatternPtr;n_comp++) { + mem_base = xmlMemBlocks(); + comp = gen_xmlPatternPtr(n_comp, 0); + + ret_val = xmlPatternStreamable(comp); + desret_int(ret_val); + call_tests++; + des_xmlPatternPtr(n_comp, comp, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlPatternStreamable", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_comp); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlPatterncompile(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + +#ifdef LIBXML_PATTERN_ENABLED + +#define gen_nb_xmlStreamCtxtPtr 1 +static xmlStreamCtxtPtr gen_xmlStreamCtxtPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlStreamCtxtPtr(int no ATTRIBUTE_UNUSED, xmlStreamCtxtPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} +#endif + + +static int +test_xmlStreamPop(void) { + int test_ret = 0; + +#if defined(LIBXML_PATTERN_ENABLED) + int mem_base; + int ret_val; + xmlStreamCtxtPtr stream; /* the stream context */ + int n_stream; + + for (n_stream = 0;n_stream < gen_nb_xmlStreamCtxtPtr;n_stream++) { + mem_base = xmlMemBlocks(); + stream = gen_xmlStreamCtxtPtr(n_stream, 0); + + ret_val = xmlStreamPop(stream); + desret_int(ret_val); + call_tests++; + des_xmlStreamCtxtPtr(n_stream, stream, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlStreamPop", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_stream); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlStreamPush(void) { + int test_ret = 0; + +#if defined(LIBXML_PATTERN_ENABLED) + int mem_base; + int ret_val; + xmlStreamCtxtPtr stream; /* the stream context */ + int n_stream; + xmlChar * name; /* the current name */ + int n_name; + xmlChar * ns; /* the namespace name */ + int n_ns; + + for (n_stream = 0;n_stream < gen_nb_xmlStreamCtxtPtr;n_stream++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_ns = 0;n_ns < gen_nb_const_xmlChar_ptr;n_ns++) { + mem_base = xmlMemBlocks(); + stream = gen_xmlStreamCtxtPtr(n_stream, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + ns = gen_const_xmlChar_ptr(n_ns, 2); + + ret_val = xmlStreamPush(stream, (const xmlChar *)name, (const xmlChar *)ns); + desret_int(ret_val); + call_tests++; + des_xmlStreamCtxtPtr(n_stream, stream, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + des_const_xmlChar_ptr(n_ns, (const xmlChar *)ns, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlStreamPush", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_stream); + printf(" %d", n_name); + printf(" %d", n_ns); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlStreamPushAttr(void) { + int test_ret = 0; + +#if defined(LIBXML_PATTERN_ENABLED) + int mem_base; + int ret_val; + xmlStreamCtxtPtr stream; /* the stream context */ + int n_stream; + xmlChar * name; /* the current name */ + int n_name; + xmlChar * ns; /* the namespace name */ + int n_ns; + + for (n_stream = 0;n_stream < gen_nb_xmlStreamCtxtPtr;n_stream++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_ns = 0;n_ns < gen_nb_const_xmlChar_ptr;n_ns++) { + mem_base = xmlMemBlocks(); + stream = gen_xmlStreamCtxtPtr(n_stream, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + ns = gen_const_xmlChar_ptr(n_ns, 2); + + ret_val = xmlStreamPushAttr(stream, (const xmlChar *)name, (const xmlChar *)ns); + desret_int(ret_val); + call_tests++; + des_xmlStreamCtxtPtr(n_stream, stream, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + des_const_xmlChar_ptr(n_ns, (const xmlChar *)ns, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlStreamPushAttr", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_stream); + printf(" %d", n_name); + printf(" %d", n_ns); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlStreamPushNode(void) { + int test_ret = 0; + +#if defined(LIBXML_PATTERN_ENABLED) + int mem_base; + int ret_val; + xmlStreamCtxtPtr stream; /* the stream context */ + int n_stream; + xmlChar * name; /* the current name */ + int n_name; + xmlChar * ns; /* the namespace name */ + int n_ns; + int nodeType; /* the type of the node being pushed */ + int n_nodeType; + + for (n_stream = 0;n_stream < gen_nb_xmlStreamCtxtPtr;n_stream++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_ns = 0;n_ns < gen_nb_const_xmlChar_ptr;n_ns++) { + for (n_nodeType = 0;n_nodeType < gen_nb_int;n_nodeType++) { + mem_base = xmlMemBlocks(); + stream = gen_xmlStreamCtxtPtr(n_stream, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + ns = gen_const_xmlChar_ptr(n_ns, 2); + nodeType = gen_int(n_nodeType, 3); + + ret_val = xmlStreamPushNode(stream, (const xmlChar *)name, (const xmlChar *)ns, nodeType); + desret_int(ret_val); + call_tests++; + des_xmlStreamCtxtPtr(n_stream, stream, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + des_const_xmlChar_ptr(n_ns, (const xmlChar *)ns, 2); + des_int(n_nodeType, nodeType, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlStreamPushNode", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_stream); + printf(" %d", n_name); + printf(" %d", n_ns); + printf(" %d", n_nodeType); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlStreamWantsAnyNode(void) { + int test_ret = 0; + +#if defined(LIBXML_PATTERN_ENABLED) + int mem_base; + int ret_val; + xmlStreamCtxtPtr streamCtxt; /* the stream context */ + int n_streamCtxt; + + for (n_streamCtxt = 0;n_streamCtxt < gen_nb_xmlStreamCtxtPtr;n_streamCtxt++) { + mem_base = xmlMemBlocks(); + streamCtxt = gen_xmlStreamCtxtPtr(n_streamCtxt, 0); + + ret_val = xmlStreamWantsAnyNode(streamCtxt); + desret_int(ret_val); + call_tests++; + des_xmlStreamCtxtPtr(n_streamCtxt, streamCtxt, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlStreamWantsAnyNode", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_streamCtxt); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + +static int +test_pattern(void) { + int test_ret = 0; + + if (quiet == 0) printf("Testing pattern : 10 of 15 functions ...\n"); + test_ret += test_xmlPatternFromRoot(); + test_ret += test_xmlPatternGetStreamCtxt(); + test_ret += test_xmlPatternMatch(); + test_ret += test_xmlPatternMaxDepth(); + test_ret += test_xmlPatternMinDepth(); + test_ret += test_xmlPatternStreamable(); + test_ret += test_xmlPatterncompile(); + test_ret += test_xmlStreamPop(); + test_ret += test_xmlStreamPush(); + test_ret += test_xmlStreamPushAttr(); + test_ret += test_xmlStreamPushNode(); + test_ret += test_xmlStreamWantsAnyNode(); + + if (test_ret != 0) + printf("Module pattern: %d errors\n", test_ret); + return(test_ret); +} +#ifdef LIBXML_SCHEMAS_ENABLED + +#define gen_nb_xmlRelaxNGPtr 1 +static xmlRelaxNGPtr gen_xmlRelaxNGPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlRelaxNGPtr(int no ATTRIBUTE_UNUSED, xmlRelaxNGPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} +#endif + + +static int +test_xmlRelaxNGDump(void) { + int test_ret = 0; + +#if defined(LIBXML_SCHEMAS_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + FILE * output; /* the file output */ + int n_output; + xmlRelaxNGPtr schema; /* a schema structure */ + int n_schema; + + for (n_output = 0;n_output < gen_nb_FILE_ptr;n_output++) { + for (n_schema = 0;n_schema < gen_nb_xmlRelaxNGPtr;n_schema++) { + mem_base = xmlMemBlocks(); + output = gen_FILE_ptr(n_output, 0); + schema = gen_xmlRelaxNGPtr(n_schema, 1); + + xmlRelaxNGDump(output, schema); + call_tests++; + des_FILE_ptr(n_output, output, 0); + des_xmlRelaxNGPtr(n_schema, schema, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlRelaxNGDump", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_output); + printf(" %d", n_schema); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlRelaxNGDumpTree(void) { + int test_ret = 0; + +#if defined(LIBXML_SCHEMAS_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + FILE * output; /* the file output */ + int n_output; + xmlRelaxNGPtr schema; /* a schema structure */ + int n_schema; + + for (n_output = 0;n_output < gen_nb_FILE_ptr;n_output++) { + for (n_schema = 0;n_schema < gen_nb_xmlRelaxNGPtr;n_schema++) { + mem_base = xmlMemBlocks(); + output = gen_FILE_ptr(n_output, 0); + schema = gen_xmlRelaxNGPtr(n_schema, 1); + + xmlRelaxNGDumpTree(output, schema); + call_tests++; + des_FILE_ptr(n_output, output, 0); + des_xmlRelaxNGPtr(n_schema, schema, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlRelaxNGDumpTree", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_output); + printf(" %d", n_schema); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + +#ifdef LIBXML_SCHEMAS_ENABLED + +#define gen_nb_xmlRelaxNGParserCtxtPtr 1 +static xmlRelaxNGParserCtxtPtr gen_xmlRelaxNGParserCtxtPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlRelaxNGParserCtxtPtr(int no ATTRIBUTE_UNUSED, xmlRelaxNGParserCtxtPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} +#endif + +#ifdef LIBXML_SCHEMAS_ENABLED + +#define gen_nb_xmlRelaxNGValidityErrorFunc_ptr 1 +static xmlRelaxNGValidityErrorFunc * gen_xmlRelaxNGValidityErrorFunc_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlRelaxNGValidityErrorFunc_ptr(int no ATTRIBUTE_UNUSED, xmlRelaxNGValidityErrorFunc * val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} +#endif + +#ifdef LIBXML_SCHEMAS_ENABLED + +#define gen_nb_xmlRelaxNGValidityWarningFunc_ptr 1 +static xmlRelaxNGValidityWarningFunc * gen_xmlRelaxNGValidityWarningFunc_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlRelaxNGValidityWarningFunc_ptr(int no ATTRIBUTE_UNUSED, xmlRelaxNGValidityWarningFunc * val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} +#endif + + +static int +test_xmlRelaxNGGetParserErrors(void) { + int test_ret = 0; + +#if defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + int ret_val; + xmlRelaxNGParserCtxtPtr ctxt; /* a Relax-NG validation context */ + int n_ctxt; + xmlRelaxNGValidityErrorFunc * err; /* the error callback result */ + int n_err; + xmlRelaxNGValidityWarningFunc * warn; /* the warning callback result */ + int n_warn; + void ** ctx; /* contextual data for the callbacks result */ + int n_ctx; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlRelaxNGParserCtxtPtr;n_ctxt++) { + for (n_err = 0;n_err < gen_nb_xmlRelaxNGValidityErrorFunc_ptr;n_err++) { + for (n_warn = 0;n_warn < gen_nb_xmlRelaxNGValidityWarningFunc_ptr;n_warn++) { + for (n_ctx = 0;n_ctx < gen_nb_void_ptr_ptr;n_ctx++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlRelaxNGParserCtxtPtr(n_ctxt, 0); + err = gen_xmlRelaxNGValidityErrorFunc_ptr(n_err, 1); + warn = gen_xmlRelaxNGValidityWarningFunc_ptr(n_warn, 2); + ctx = gen_void_ptr_ptr(n_ctx, 3); + + ret_val = xmlRelaxNGGetParserErrors(ctxt, err, warn, ctx); + desret_int(ret_val); + call_tests++; + des_xmlRelaxNGParserCtxtPtr(n_ctxt, ctxt, 0); + des_xmlRelaxNGValidityErrorFunc_ptr(n_err, err, 1); + des_xmlRelaxNGValidityWarningFunc_ptr(n_warn, warn, 2); + des_void_ptr_ptr(n_ctx, ctx, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlRelaxNGGetParserErrors", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_err); + printf(" %d", n_warn); + printf(" %d", n_ctx); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + +#ifdef LIBXML_SCHEMAS_ENABLED + +#define gen_nb_xmlRelaxNGValidCtxtPtr 1 +static xmlRelaxNGValidCtxtPtr gen_xmlRelaxNGValidCtxtPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlRelaxNGValidCtxtPtr(int no ATTRIBUTE_UNUSED, xmlRelaxNGValidCtxtPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} +#endif + + +static int +test_xmlRelaxNGGetValidErrors(void) { + int test_ret = 0; + +#if defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + int ret_val; + xmlRelaxNGValidCtxtPtr ctxt; /* a Relax-NG validation context */ + int n_ctxt; + xmlRelaxNGValidityErrorFunc * err; /* the error function result */ + int n_err; + xmlRelaxNGValidityWarningFunc * warn; /* the warning function result */ + int n_warn; + void ** ctx; /* the functions context result */ + int n_ctx; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlRelaxNGValidCtxtPtr;n_ctxt++) { + for (n_err = 0;n_err < gen_nb_xmlRelaxNGValidityErrorFunc_ptr;n_err++) { + for (n_warn = 0;n_warn < gen_nb_xmlRelaxNGValidityWarningFunc_ptr;n_warn++) { + for (n_ctx = 0;n_ctx < gen_nb_void_ptr_ptr;n_ctx++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlRelaxNGValidCtxtPtr(n_ctxt, 0); + err = gen_xmlRelaxNGValidityErrorFunc_ptr(n_err, 1); + warn = gen_xmlRelaxNGValidityWarningFunc_ptr(n_warn, 2); + ctx = gen_void_ptr_ptr(n_ctx, 3); + + ret_val = xmlRelaxNGGetValidErrors(ctxt, err, warn, ctx); + desret_int(ret_val); + call_tests++; + des_xmlRelaxNGValidCtxtPtr(n_ctxt, ctxt, 0); + des_xmlRelaxNGValidityErrorFunc_ptr(n_err, err, 1); + des_xmlRelaxNGValidityWarningFunc_ptr(n_warn, warn, 2); + des_void_ptr_ptr(n_ctx, ctx, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlRelaxNGGetValidErrors", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_err); + printf(" %d", n_warn); + printf(" %d", n_ctx); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlRelaxNGInitTypes(void) { + int test_ret = 0; + +#if defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + int ret_val; + + mem_base = xmlMemBlocks(); + + ret_val = xmlRelaxNGInitTypes(); + desret_int(ret_val); + call_tests++; + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlRelaxNGInitTypes", + xmlMemBlocks() - mem_base); + test_ret++; + printf("\n"); + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlRelaxNGNewDocParserCtxt(void) { + int test_ret = 0; + +#if defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + xmlRelaxNGParserCtxtPtr ret_val; + xmlDocPtr doc; /* a preparsed document tree */ + int n_doc; + + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + mem_base = xmlMemBlocks(); + doc = gen_xmlDocPtr(n_doc, 0); + + ret_val = xmlRelaxNGNewDocParserCtxt(doc); + desret_xmlRelaxNGParserCtxtPtr(ret_val); + call_tests++; + des_xmlDocPtr(n_doc, doc, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlRelaxNGNewDocParserCtxt", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlRelaxNGNewMemParserCtxt(void) { + int test_ret = 0; + +#if defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + xmlRelaxNGParserCtxtPtr ret_val; + char * buffer; /* a pointer to a char array containing the schemas */ + int n_buffer; + int size; /* the size of the array */ + int n_size; + + for (n_buffer = 0;n_buffer < gen_nb_const_char_ptr;n_buffer++) { + for (n_size = 0;n_size < gen_nb_int;n_size++) { + mem_base = xmlMemBlocks(); + buffer = gen_const_char_ptr(n_buffer, 0); + size = gen_int(n_size, 1); + + ret_val = xmlRelaxNGNewMemParserCtxt((const char *)buffer, size); + desret_xmlRelaxNGParserCtxtPtr(ret_val); + call_tests++; + des_const_char_ptr(n_buffer, (const char *)buffer, 0); + des_int(n_size, size, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlRelaxNGNewMemParserCtxt", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_buffer); + printf(" %d", n_size); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlRelaxNGNewParserCtxt(void) { + int test_ret = 0; + +#if defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + xmlRelaxNGParserCtxtPtr ret_val; + char * URL; /* the location of the schema */ + int n_URL; + + for (n_URL = 0;n_URL < gen_nb_const_char_ptr;n_URL++) { + mem_base = xmlMemBlocks(); + URL = gen_const_char_ptr(n_URL, 0); + + ret_val = xmlRelaxNGNewParserCtxt((const char *)URL); + desret_xmlRelaxNGParserCtxtPtr(ret_val); + call_tests++; + des_const_char_ptr(n_URL, (const char *)URL, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlRelaxNGNewParserCtxt", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_URL); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlRelaxNGNewValidCtxt(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlRelaxNGParse(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlRelaxNGSetParserErrors(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlRelaxNGSetParserStructuredErrors(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlRelaxNGSetValidErrors(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlRelaxNGSetValidStructuredErrors(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlRelaxNGValidateDoc(void) { + int test_ret = 0; + +#if defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + int ret_val; + xmlRelaxNGValidCtxtPtr ctxt; /* a Relax-NG validation context */ + int n_ctxt; + xmlDocPtr doc; /* a parsed document tree */ + int n_doc; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlRelaxNGValidCtxtPtr;n_ctxt++) { + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlRelaxNGValidCtxtPtr(n_ctxt, 0); + doc = gen_xmlDocPtr(n_doc, 1); + + ret_val = xmlRelaxNGValidateDoc(ctxt, doc); + desret_int(ret_val); + call_tests++; + des_xmlRelaxNGValidCtxtPtr(n_ctxt, ctxt, 0); + des_xmlDocPtr(n_doc, doc, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlRelaxNGValidateDoc", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_doc); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlRelaxNGValidateFullElement(void) { + int test_ret = 0; + +#if defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + int ret_val; + xmlRelaxNGValidCtxtPtr ctxt; /* the validation context */ + int n_ctxt; + xmlDocPtr doc; /* a document instance */ + int n_doc; + xmlNodePtr elem; /* an element instance */ + int n_elem; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlRelaxNGValidCtxtPtr;n_ctxt++) { + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_elem = 0;n_elem < gen_nb_xmlNodePtr;n_elem++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlRelaxNGValidCtxtPtr(n_ctxt, 0); + doc = gen_xmlDocPtr(n_doc, 1); + elem = gen_xmlNodePtr(n_elem, 2); + + ret_val = xmlRelaxNGValidateFullElement(ctxt, doc, elem); + desret_int(ret_val); + call_tests++; + des_xmlRelaxNGValidCtxtPtr(n_ctxt, ctxt, 0); + des_xmlDocPtr(n_doc, doc, 1); + des_xmlNodePtr(n_elem, elem, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlRelaxNGValidateFullElement", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_doc); + printf(" %d", n_elem); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlRelaxNGValidatePopElement(void) { + int test_ret = 0; + +#if defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + int ret_val; + xmlRelaxNGValidCtxtPtr ctxt; /* the RelaxNG validation context */ + int n_ctxt; + xmlDocPtr doc; /* a document instance */ + int n_doc; + xmlNodePtr elem; /* an element instance */ + int n_elem; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlRelaxNGValidCtxtPtr;n_ctxt++) { + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_elem = 0;n_elem < gen_nb_xmlNodePtr;n_elem++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlRelaxNGValidCtxtPtr(n_ctxt, 0); + doc = gen_xmlDocPtr(n_doc, 1); + elem = gen_xmlNodePtr(n_elem, 2); + + ret_val = xmlRelaxNGValidatePopElement(ctxt, doc, elem); + desret_int(ret_val); + call_tests++; + des_xmlRelaxNGValidCtxtPtr(n_ctxt, ctxt, 0); + des_xmlDocPtr(n_doc, doc, 1); + des_xmlNodePtr(n_elem, elem, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlRelaxNGValidatePopElement", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_doc); + printf(" %d", n_elem); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlRelaxNGValidatePushCData(void) { + int test_ret = 0; + +#if defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + int ret_val; + xmlRelaxNGValidCtxtPtr ctxt; /* the RelaxNG validation context */ + int n_ctxt; + xmlChar * data; /* some character data read */ + int n_data; + int len; /* the length of the data */ + int n_len; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlRelaxNGValidCtxtPtr;n_ctxt++) { + for (n_data = 0;n_data < gen_nb_const_xmlChar_ptr;n_data++) { + for (n_len = 0;n_len < gen_nb_int;n_len++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlRelaxNGValidCtxtPtr(n_ctxt, 0); + data = gen_const_xmlChar_ptr(n_data, 1); + len = gen_int(n_len, 2); + + ret_val = xmlRelaxNGValidatePushCData(ctxt, (const xmlChar *)data, len); + desret_int(ret_val); + call_tests++; + des_xmlRelaxNGValidCtxtPtr(n_ctxt, ctxt, 0); + des_const_xmlChar_ptr(n_data, (const xmlChar *)data, 1); + des_int(n_len, len, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlRelaxNGValidatePushCData", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_data); + printf(" %d", n_len); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlRelaxNGValidatePushElement(void) { + int test_ret = 0; + +#if defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + int ret_val; + xmlRelaxNGValidCtxtPtr ctxt; /* the validation context */ + int n_ctxt; + xmlDocPtr doc; /* a document instance */ + int n_doc; + xmlNodePtr elem; /* an element instance */ + int n_elem; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlRelaxNGValidCtxtPtr;n_ctxt++) { + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_elem = 0;n_elem < gen_nb_xmlNodePtr;n_elem++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlRelaxNGValidCtxtPtr(n_ctxt, 0); + doc = gen_xmlDocPtr(n_doc, 1); + elem = gen_xmlNodePtr(n_elem, 2); + + ret_val = xmlRelaxNGValidatePushElement(ctxt, doc, elem); + desret_int(ret_val); + call_tests++; + des_xmlRelaxNGValidCtxtPtr(n_ctxt, ctxt, 0); + des_xmlDocPtr(n_doc, doc, 1); + des_xmlNodePtr(n_elem, elem, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlRelaxNGValidatePushElement", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_doc); + printf(" %d", n_elem); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlRelaxParserSetFlag(void) { + int test_ret = 0; + +#if defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + int ret_val; + xmlRelaxNGParserCtxtPtr ctxt; /* a RelaxNG parser context */ + int n_ctxt; + int flags; /* a set of flags values */ + int n_flags; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlRelaxNGParserCtxtPtr;n_ctxt++) { + for (n_flags = 0;n_flags < gen_nb_int;n_flags++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlRelaxNGParserCtxtPtr(n_ctxt, 0); + flags = gen_int(n_flags, 1); + + ret_val = xmlRelaxParserSetFlag(ctxt, flags); + desret_int(ret_val); + call_tests++; + des_xmlRelaxNGParserCtxtPtr(n_ctxt, ctxt, 0); + des_int(n_flags, flags, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlRelaxParserSetFlag", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_flags); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + +static int +test_relaxng(void) { + int test_ret = 0; + + if (quiet == 0) printf("Testing relaxng : 14 of 24 functions ...\n"); + test_ret += test_xmlRelaxNGDump(); + test_ret += test_xmlRelaxNGDumpTree(); + test_ret += test_xmlRelaxNGGetParserErrors(); + test_ret += test_xmlRelaxNGGetValidErrors(); + test_ret += test_xmlRelaxNGInitTypes(); + test_ret += test_xmlRelaxNGNewDocParserCtxt(); + test_ret += test_xmlRelaxNGNewMemParserCtxt(); + test_ret += test_xmlRelaxNGNewParserCtxt(); + test_ret += test_xmlRelaxNGNewValidCtxt(); + test_ret += test_xmlRelaxNGParse(); + test_ret += test_xmlRelaxNGSetParserErrors(); + test_ret += test_xmlRelaxNGSetParserStructuredErrors(); + test_ret += test_xmlRelaxNGSetValidErrors(); + test_ret += test_xmlRelaxNGSetValidStructuredErrors(); + test_ret += test_xmlRelaxNGValidateDoc(); + test_ret += test_xmlRelaxNGValidateFullElement(); + test_ret += test_xmlRelaxNGValidatePopElement(); + test_ret += test_xmlRelaxNGValidatePushCData(); + test_ret += test_xmlRelaxNGValidatePushElement(); + test_ret += test_xmlRelaxParserSetFlag(); + + if (test_ret != 0) + printf("Module relaxng: %d errors\n", test_ret); + return(test_ret); +} +static int +test_schemasInternals(void) { + int test_ret = 0; + + if (quiet == 0) printf("Testing schemasInternals : 0 of 2 functions ...\n"); + + if (test_ret != 0) + printf("Module schemasInternals: %d errors\n", test_ret); + return(test_ret); +} + +static int +test_xmlSchematronNewDocParserCtxt(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlSchematronNewMemParserCtxt(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlSchematronNewParserCtxt(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + +#ifdef LIBXML_SCHEMATRON_ENABLED + +#define gen_nb_xmlSchematronPtr 1 +static xmlSchematronPtr gen_xmlSchematronPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlSchematronPtr(int no ATTRIBUTE_UNUSED, xmlSchematronPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} +#endif + + +static int +test_xmlSchematronNewValidCtxt(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + +#ifdef LIBXML_SCHEMATRON_ENABLED + +#define gen_nb_xmlSchematronParserCtxtPtr 1 +static xmlSchematronParserCtxtPtr gen_xmlSchematronParserCtxtPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlSchematronParserCtxtPtr(int no ATTRIBUTE_UNUSED, xmlSchematronParserCtxtPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} +#endif + + +static int +test_xmlSchematronParse(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + +#ifdef LIBXML_SCHEMATRON_ENABLED + +#define gen_nb_xmlSchematronValidCtxtPtr 1 +static xmlSchematronValidCtxtPtr gen_xmlSchematronValidCtxtPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlSchematronValidCtxtPtr(int no ATTRIBUTE_UNUSED, xmlSchematronValidCtxtPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} +#endif + + +static int +test_xmlSchematronSetValidStructuredErrors(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlSchematronValidateDoc(void) { + int test_ret = 0; + +#if defined(LIBXML_SCHEMATRON_ENABLED) + int mem_base; + int ret_val; + xmlSchematronValidCtxtPtr ctxt; /* the schema validation context */ + int n_ctxt; + xmlDocPtr instance; /* the document instace tree */ + int n_instance; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlSchematronValidCtxtPtr;n_ctxt++) { + for (n_instance = 0;n_instance < gen_nb_xmlDocPtr;n_instance++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlSchematronValidCtxtPtr(n_ctxt, 0); + instance = gen_xmlDocPtr(n_instance, 1); + + ret_val = xmlSchematronValidateDoc(ctxt, instance); + desret_int(ret_val); + call_tests++; + des_xmlSchematronValidCtxtPtr(n_ctxt, ctxt, 0); + des_xmlDocPtr(n_instance, instance, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSchematronValidateDoc", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_instance); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + +static int +test_schematron(void) { + int test_ret = 0; + + if (quiet == 0) printf("Testing schematron : 1 of 10 functions ...\n"); + test_ret += test_xmlSchematronNewDocParserCtxt(); + test_ret += test_xmlSchematronNewMemParserCtxt(); + test_ret += test_xmlSchematronNewParserCtxt(); + test_ret += test_xmlSchematronNewValidCtxt(); + test_ret += test_xmlSchematronParse(); + test_ret += test_xmlSchematronSetValidStructuredErrors(); + test_ret += test_xmlSchematronValidateDoc(); + + if (test_ret != 0) + printf("Module schematron: %d errors\n", test_ret); + return(test_ret); +} + +static int +test_xmlAddChild(void) { + int test_ret = 0; + + int mem_base; + xmlNodePtr ret_val; + xmlNodePtr parent; /* the parent node */ + int n_parent; + xmlNodePtr cur; /* the child node */ + int n_cur; + + for (n_parent = 0;n_parent < gen_nb_xmlNodePtr;n_parent++) { + for (n_cur = 0;n_cur < gen_nb_xmlNodePtr_in;n_cur++) { + mem_base = xmlMemBlocks(); + parent = gen_xmlNodePtr(n_parent, 0); + cur = gen_xmlNodePtr_in(n_cur, 1); + + ret_val = xmlAddChild(parent, cur); + if (ret_val == NULL) { xmlFreeNode(cur) ; cur = NULL ; } + desret_xmlNodePtr(ret_val); + call_tests++; + des_xmlNodePtr(n_parent, parent, 0); + des_xmlNodePtr_in(n_cur, cur, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlAddChild", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_parent); + printf(" %d", n_cur); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlAddChildList(void) { + int test_ret = 0; + + int mem_base; + xmlNodePtr ret_val; + xmlNodePtr parent; /* the parent node */ + int n_parent; + xmlNodePtr cur; /* the first node in the list */ + int n_cur; + + for (n_parent = 0;n_parent < gen_nb_xmlNodePtr;n_parent++) { + for (n_cur = 0;n_cur < gen_nb_xmlNodePtr_in;n_cur++) { + mem_base = xmlMemBlocks(); + parent = gen_xmlNodePtr(n_parent, 0); + cur = gen_xmlNodePtr_in(n_cur, 1); + + ret_val = xmlAddChildList(parent, cur); + if (ret_val == NULL) { xmlFreeNodeList(cur) ; cur = NULL ; } + desret_xmlNodePtr(ret_val); + call_tests++; + des_xmlNodePtr(n_parent, parent, 0); + des_xmlNodePtr_in(n_cur, cur, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlAddChildList", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_parent); + printf(" %d", n_cur); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlAddNextSibling(void) { + int test_ret = 0; + + int mem_base; + xmlNodePtr ret_val; + xmlNodePtr cur; /* the child node */ + int n_cur; + xmlNodePtr elem; /* the new node */ + int n_elem; + + for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) { + for (n_elem = 0;n_elem < gen_nb_xmlNodePtr_in;n_elem++) { + mem_base = xmlMemBlocks(); + cur = gen_xmlNodePtr(n_cur, 0); + elem = gen_xmlNodePtr_in(n_elem, 1); + + ret_val = xmlAddNextSibling(cur, elem); + if (ret_val == NULL) { xmlFreeNode(elem) ; elem = NULL ; } + desret_xmlNodePtr(ret_val); + call_tests++; + des_xmlNodePtr(n_cur, cur, 0); + des_xmlNodePtr_in(n_elem, elem, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlAddNextSibling", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_cur); + printf(" %d", n_elem); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlAddPrevSibling(void) { + int test_ret = 0; + +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) + int mem_base; + xmlNodePtr ret_val; + xmlNodePtr cur; /* the child node */ + int n_cur; + xmlNodePtr elem; /* the new node */ + int n_elem; + + for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) { + for (n_elem = 0;n_elem < gen_nb_xmlNodePtr_in;n_elem++) { + mem_base = xmlMemBlocks(); + cur = gen_xmlNodePtr(n_cur, 0); + elem = gen_xmlNodePtr_in(n_elem, 1); + + ret_val = xmlAddPrevSibling(cur, elem); + if (ret_val == NULL) { xmlFreeNode(elem) ; elem = NULL ; } + desret_xmlNodePtr(ret_val); + call_tests++; + des_xmlNodePtr(n_cur, cur, 0); + des_xmlNodePtr_in(n_elem, elem, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlAddPrevSibling", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_cur); + printf(" %d", n_elem); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlAddSibling(void) { + int test_ret = 0; + + int mem_base; + xmlNodePtr ret_val; + xmlNodePtr cur; /* the child node */ + int n_cur; + xmlNodePtr elem; /* the new node */ + int n_elem; + + for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) { + for (n_elem = 0;n_elem < gen_nb_xmlNodePtr_in;n_elem++) { + mem_base = xmlMemBlocks(); + cur = gen_xmlNodePtr(n_cur, 0); + elem = gen_xmlNodePtr_in(n_elem, 1); + + ret_val = xmlAddSibling(cur, elem); + if (ret_val == NULL) { xmlFreeNode(elem) ; elem = NULL ; } + desret_xmlNodePtr(ret_val); + call_tests++; + des_xmlNodePtr(n_cur, cur, 0); + des_xmlNodePtr_in(n_elem, elem, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlAddSibling", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_cur); + printf(" %d", n_elem); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlAttrSerializeTxtContent(void) { + int test_ret = 0; + +#if defined(LIBXML_OUTPUT_ENABLED) +#ifdef LIBXML_OUTPUT_ENABLED + int mem_base; + xmlBufferPtr buf; /* the XML buffer output */ + int n_buf; + xmlDocPtr doc; /* the document */ + int n_doc; + xmlAttrPtr attr; /* the attribute node */ + int n_attr; + xmlChar * string; /* the text content */ + int n_string; + + for (n_buf = 0;n_buf < gen_nb_xmlBufferPtr;n_buf++) { + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_attr = 0;n_attr < gen_nb_xmlAttrPtr;n_attr++) { + for (n_string = 0;n_string < gen_nb_const_xmlChar_ptr;n_string++) { + mem_base = xmlMemBlocks(); + buf = gen_xmlBufferPtr(n_buf, 0); + doc = gen_xmlDocPtr(n_doc, 1); + attr = gen_xmlAttrPtr(n_attr, 2); + string = gen_const_xmlChar_ptr(n_string, 3); + + xmlAttrSerializeTxtContent(buf, doc, attr, (const xmlChar *)string); + call_tests++; + des_xmlBufferPtr(n_buf, buf, 0); + des_xmlDocPtr(n_doc, doc, 1); + des_xmlAttrPtr(n_attr, attr, 2); + des_const_xmlChar_ptr(n_string, (const xmlChar *)string, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlAttrSerializeTxtContent", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_buf); + printf(" %d", n_doc); + printf(" %d", n_attr); + printf(" %d", n_string); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif +#endif + + return(test_ret); +} + + +#define gen_nb_const_xmlBuf_ptr 1 +static xmlBuf * gen_const_xmlBuf_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_const_xmlBuf_ptr(int no ATTRIBUTE_UNUSED, const xmlBuf * val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +static int +test_xmlBufContent(void) { + int test_ret = 0; + + int mem_base; + xmlChar * ret_val; + xmlBuf * buf; /* the buffer */ + int n_buf; + + for (n_buf = 0;n_buf < gen_nb_const_xmlBuf_ptr;n_buf++) { + mem_base = xmlMemBlocks(); + buf = gen_const_xmlBuf_ptr(n_buf, 0); + + ret_val = xmlBufContent((const xmlBuf *)buf); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_const_xmlBuf_ptr(n_buf, (const xmlBuf *)buf, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlBufContent", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_buf); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +#define gen_nb_xmlBufPtr 1 +static xmlBufPtr gen_xmlBufPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlBufPtr(int no ATTRIBUTE_UNUSED, xmlBufPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +static int +test_xmlBufEnd(void) { + int test_ret = 0; + + int mem_base; + xmlChar * ret_val; + xmlBufPtr buf; /* the buffer */ + int n_buf; + + for (n_buf = 0;n_buf < gen_nb_xmlBufPtr;n_buf++) { + mem_base = xmlMemBlocks(); + buf = gen_xmlBufPtr(n_buf, 0); + + ret_val = xmlBufEnd(buf); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_xmlBufPtr(n_buf, buf, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlBufEnd", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_buf); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +#define gen_nb_const_xmlNode_ptr 1 +static xmlNode * gen_const_xmlNode_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_const_xmlNode_ptr(int no ATTRIBUTE_UNUSED, const xmlNode * val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +static int +test_xmlBufGetNodeContent(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlBufPtr buf; /* a buffer xmlBufPtr */ + int n_buf; + xmlNode * cur; /* the node being read */ + int n_cur; + + for (n_buf = 0;n_buf < gen_nb_xmlBufPtr;n_buf++) { + for (n_cur = 0;n_cur < gen_nb_const_xmlNode_ptr;n_cur++) { + mem_base = xmlMemBlocks(); + buf = gen_xmlBufPtr(n_buf, 0); + cur = gen_const_xmlNode_ptr(n_cur, 1); + + ret_val = xmlBufGetNodeContent(buf, (const xmlNode *)cur); + desret_int(ret_val); + call_tests++; + des_xmlBufPtr(n_buf, buf, 0); + des_const_xmlNode_ptr(n_cur, (const xmlNode *)cur, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlBufGetNodeContent", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_buf); + printf(" %d", n_cur); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlBufNodeDump(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlBufShrink(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +#define gen_nb_const_xmlBufPtr 1 +static xmlBufPtr gen_const_xmlBufPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_const_xmlBufPtr(int no ATTRIBUTE_UNUSED, const xmlBufPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +static int +test_xmlBufUse(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlBufferAdd(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlBufferPtr buf; /* the buffer to dump */ + int n_buf; + xmlChar * str; /* the #xmlChar string */ + int n_str; + int len; /* the number of #xmlChar to add */ + int n_len; + + for (n_buf = 0;n_buf < gen_nb_xmlBufferPtr;n_buf++) { + for (n_str = 0;n_str < gen_nb_const_xmlChar_ptr;n_str++) { + for (n_len = 0;n_len < gen_nb_int;n_len++) { + mem_base = xmlMemBlocks(); + buf = gen_xmlBufferPtr(n_buf, 0); + str = gen_const_xmlChar_ptr(n_str, 1); + len = gen_int(n_len, 2); + + ret_val = xmlBufferAdd(buf, (const xmlChar *)str, len); + desret_int(ret_val); + call_tests++; + des_xmlBufferPtr(n_buf, buf, 0); + des_const_xmlChar_ptr(n_str, (const xmlChar *)str, 1); + des_int(n_len, len, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlBufferAdd", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_buf); + printf(" %d", n_str); + printf(" %d", n_len); + printf("\n"); + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlBufferAddHead(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlBufferPtr buf; /* the buffer */ + int n_buf; + xmlChar * str; /* the #xmlChar string */ + int n_str; + int len; /* the number of #xmlChar to add */ + int n_len; + + for (n_buf = 0;n_buf < gen_nb_xmlBufferPtr;n_buf++) { + for (n_str = 0;n_str < gen_nb_const_xmlChar_ptr;n_str++) { + for (n_len = 0;n_len < gen_nb_int;n_len++) { + mem_base = xmlMemBlocks(); + buf = gen_xmlBufferPtr(n_buf, 0); + str = gen_const_xmlChar_ptr(n_str, 1); + len = gen_int(n_len, 2); + + ret_val = xmlBufferAddHead(buf, (const xmlChar *)str, len); + desret_int(ret_val); + call_tests++; + des_xmlBufferPtr(n_buf, buf, 0); + des_const_xmlChar_ptr(n_str, (const xmlChar *)str, 1); + des_int(n_len, len, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlBufferAddHead", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_buf); + printf(" %d", n_str); + printf(" %d", n_len); + printf("\n"); + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlBufferCCat(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlBufferPtr buf; /* the buffer to dump */ + int n_buf; + char * str; /* the C char string */ + int n_str; + + for (n_buf = 0;n_buf < gen_nb_xmlBufferPtr;n_buf++) { + for (n_str = 0;n_str < gen_nb_const_char_ptr;n_str++) { + mem_base = xmlMemBlocks(); + buf = gen_xmlBufferPtr(n_buf, 0); + str = gen_const_char_ptr(n_str, 1); + + ret_val = xmlBufferCCat(buf, (const char *)str); + desret_int(ret_val); + call_tests++; + des_xmlBufferPtr(n_buf, buf, 0); + des_const_char_ptr(n_str, (const char *)str, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlBufferCCat", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_buf); + printf(" %d", n_str); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlBufferCat(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlBufferPtr buf; /* the buffer to add to */ + int n_buf; + xmlChar * str; /* the #xmlChar string */ + int n_str; + + for (n_buf = 0;n_buf < gen_nb_xmlBufferPtr;n_buf++) { + for (n_str = 0;n_str < gen_nb_const_xmlChar_ptr;n_str++) { + mem_base = xmlMemBlocks(); + buf = gen_xmlBufferPtr(n_buf, 0); + str = gen_const_xmlChar_ptr(n_str, 1); + + ret_val = xmlBufferCat(buf, (const xmlChar *)str); + desret_int(ret_val); + call_tests++; + des_xmlBufferPtr(n_buf, buf, 0); + des_const_xmlChar_ptr(n_str, (const xmlChar *)str, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlBufferCat", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_buf); + printf(" %d", n_str); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +#define gen_nb_const_xmlBuffer_ptr 1 +static xmlBuffer * gen_const_xmlBuffer_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_const_xmlBuffer_ptr(int no ATTRIBUTE_UNUSED, const xmlBuffer * val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +static int +test_xmlBufferContent(void) { + int test_ret = 0; + + int mem_base; + const xmlChar * ret_val; + xmlBuffer * buf; /* the buffer */ + int n_buf; + + for (n_buf = 0;n_buf < gen_nb_const_xmlBuffer_ptr;n_buf++) { + mem_base = xmlMemBlocks(); + buf = gen_const_xmlBuffer_ptr(n_buf, 0); + + ret_val = xmlBufferContent((const xmlBuffer *)buf); + desret_const_xmlChar_ptr(ret_val); + call_tests++; + des_const_xmlBuffer_ptr(n_buf, (const xmlBuffer *)buf, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlBufferContent", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_buf); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlBufferCreate(void) { + int test_ret = 0; + + int mem_base; + xmlBufferPtr ret_val; + + mem_base = xmlMemBlocks(); + + ret_val = xmlBufferCreate(); + desret_xmlBufferPtr(ret_val); + call_tests++; + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlBufferCreate", + xmlMemBlocks() - mem_base); + test_ret++; + printf("\n"); + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlBufferCreateSize(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlBufferCreateStatic(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlBufferDetach(void) { + int test_ret = 0; + + int mem_base; + xmlChar * ret_val; + xmlBufferPtr buf; /* the buffer */ + int n_buf; + + for (n_buf = 0;n_buf < gen_nb_xmlBufferPtr;n_buf++) { + mem_base = xmlMemBlocks(); + buf = gen_xmlBufferPtr(n_buf, 0); + + ret_val = xmlBufferDetach(buf); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_xmlBufferPtr(n_buf, buf, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlBufferDetach", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_buf); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlBufferEmpty(void) { + int test_ret = 0; + + int mem_base; + xmlBufferPtr buf; /* the buffer */ + int n_buf; + + for (n_buf = 0;n_buf < gen_nb_xmlBufferPtr;n_buf++) { + mem_base = xmlMemBlocks(); + buf = gen_xmlBufferPtr(n_buf, 0); + + xmlBufferEmpty(buf); + call_tests++; + des_xmlBufferPtr(n_buf, buf, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlBufferEmpty", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_buf); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlBufferGrow(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlBufferPtr buf; /* the buffer */ + int n_buf; + unsigned int len; /* the minimum free size to allocate */ + int n_len; + + for (n_buf = 0;n_buf < gen_nb_xmlBufferPtr;n_buf++) { + for (n_len = 0;n_len < gen_nb_unsigned_int;n_len++) { + mem_base = xmlMemBlocks(); + buf = gen_xmlBufferPtr(n_buf, 0); + len = gen_unsigned_int(n_len, 1); + + ret_val = xmlBufferGrow(buf, len); + desret_int(ret_val); + call_tests++; + des_xmlBufferPtr(n_buf, buf, 0); + des_unsigned_int(n_len, len, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlBufferGrow", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_buf); + printf(" %d", n_len); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlBufferLength(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlBuffer * buf; /* the buffer */ + int n_buf; + + for (n_buf = 0;n_buf < gen_nb_const_xmlBuffer_ptr;n_buf++) { + mem_base = xmlMemBlocks(); + buf = gen_const_xmlBuffer_ptr(n_buf, 0); + + ret_val = xmlBufferLength((const xmlBuffer *)buf); + desret_int(ret_val); + call_tests++; + des_const_xmlBuffer_ptr(n_buf, (const xmlBuffer *)buf, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlBufferLength", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_buf); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlBufferResize(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlBufferPtr buf; /* the buffer to resize */ + int n_buf; + unsigned int size; /* the desired size */ + int n_size; + + for (n_buf = 0;n_buf < gen_nb_xmlBufferPtr;n_buf++) { + for (n_size = 0;n_size < gen_nb_unsigned_int;n_size++) { + mem_base = xmlMemBlocks(); + buf = gen_xmlBufferPtr(n_buf, 0); + size = gen_unsigned_int(n_size, 1); + + ret_val = xmlBufferResize(buf, size); + desret_int(ret_val); + call_tests++; + des_xmlBufferPtr(n_buf, buf, 0); + des_unsigned_int(n_size, size, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlBufferResize", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_buf); + printf(" %d", n_size); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlBufferSetAllocationScheme(void) { + int test_ret = 0; + + int mem_base; + xmlBufferPtr buf; /* the buffer to tune */ + int n_buf; + xmlBufferAllocationScheme scheme; /* allocation scheme to use */ + int n_scheme; + + for (n_buf = 0;n_buf < gen_nb_xmlBufferPtr;n_buf++) { + for (n_scheme = 0;n_scheme < gen_nb_xmlBufferAllocationScheme;n_scheme++) { + mem_base = xmlMemBlocks(); + buf = gen_xmlBufferPtr(n_buf, 0); + scheme = gen_xmlBufferAllocationScheme(n_scheme, 1); + + xmlBufferSetAllocationScheme(buf, scheme); + if ((buf != NULL) && (scheme == XML_BUFFER_ALLOC_IMMUTABLE) && (buf->content != NULL) && (buf->content != static_buf_content)) { xmlFree(buf->content); buf->content = NULL;} + call_tests++; + des_xmlBufferPtr(n_buf, buf, 0); + des_xmlBufferAllocationScheme(n_scheme, scheme, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlBufferSetAllocationScheme", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_buf); + printf(" %d", n_scheme); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlBufferShrink(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlBufferPtr buf; /* the buffer to dump */ + int n_buf; + unsigned int len; /* the number of xmlChar to remove */ + int n_len; + + for (n_buf = 0;n_buf < gen_nb_xmlBufferPtr;n_buf++) { + for (n_len = 0;n_len < gen_nb_unsigned_int;n_len++) { + mem_base = xmlMemBlocks(); + buf = gen_xmlBufferPtr(n_buf, 0); + len = gen_unsigned_int(n_len, 1); + + ret_val = xmlBufferShrink(buf, len); + desret_int(ret_val); + call_tests++; + des_xmlBufferPtr(n_buf, buf, 0); + des_unsigned_int(n_len, len, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlBufferShrink", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_buf); + printf(" %d", n_len); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlBufferWriteCHAR(void) { + int test_ret = 0; + + int mem_base; + xmlBufferPtr buf; /* the XML buffer */ + int n_buf; + xmlChar * string; /* the string to add */ + int n_string; + + for (n_buf = 0;n_buf < gen_nb_xmlBufferPtr;n_buf++) { + for (n_string = 0;n_string < gen_nb_const_xmlChar_ptr;n_string++) { + mem_base = xmlMemBlocks(); + buf = gen_xmlBufferPtr(n_buf, 0); + string = gen_const_xmlChar_ptr(n_string, 1); + + xmlBufferWriteCHAR(buf, (const xmlChar *)string); + call_tests++; + des_xmlBufferPtr(n_buf, buf, 0); + des_const_xmlChar_ptr(n_string, (const xmlChar *)string, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlBufferWriteCHAR", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_buf); + printf(" %d", n_string); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlBufferWriteChar(void) { + int test_ret = 0; + + int mem_base; + xmlBufferPtr buf; /* the XML buffer output */ + int n_buf; + char * string; /* the string to add */ + int n_string; + + for (n_buf = 0;n_buf < gen_nb_xmlBufferPtr;n_buf++) { + for (n_string = 0;n_string < gen_nb_const_char_ptr;n_string++) { + mem_base = xmlMemBlocks(); + buf = gen_xmlBufferPtr(n_buf, 0); + string = gen_const_char_ptr(n_string, 1); + + xmlBufferWriteChar(buf, (const char *)string); + call_tests++; + des_xmlBufferPtr(n_buf, buf, 0); + des_const_char_ptr(n_string, (const char *)string, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlBufferWriteChar", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_buf); + printf(" %d", n_string); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlBufferWriteQuotedString(void) { + int test_ret = 0; + + int mem_base; + xmlBufferPtr buf; /* the XML buffer output */ + int n_buf; + xmlChar * string; /* the string to add */ + int n_string; + + for (n_buf = 0;n_buf < gen_nb_xmlBufferPtr;n_buf++) { + for (n_string = 0;n_string < gen_nb_const_xmlChar_ptr;n_string++) { + mem_base = xmlMemBlocks(); + buf = gen_xmlBufferPtr(n_buf, 0); + string = gen_const_xmlChar_ptr(n_string, 1); + + xmlBufferWriteQuotedString(buf, (const xmlChar *)string); + call_tests++; + des_xmlBufferPtr(n_buf, buf, 0); + des_const_xmlChar_ptr(n_string, (const xmlChar *)string, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlBufferWriteQuotedString", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_buf); + printf(" %d", n_string); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlBuildQName(void) { + int test_ret = 0; + + int mem_base; + xmlChar * ret_val; + xmlChar * ncname; /* the Name */ + int n_ncname; + xmlChar * prefix; /* the prefix */ + int n_prefix; + xmlChar * memory; /* preallocated memory */ + int n_memory; + int len; /* preallocated memory length */ + int n_len; + + for (n_ncname = 0;n_ncname < gen_nb_const_xmlChar_ptr;n_ncname++) { + for (n_prefix = 0;n_prefix < gen_nb_const_xmlChar_ptr;n_prefix++) { + for (n_memory = 0;n_memory < gen_nb_xmlChar_ptr;n_memory++) { + for (n_len = 0;n_len < gen_nb_int;n_len++) { + mem_base = xmlMemBlocks(); + ncname = gen_const_xmlChar_ptr(n_ncname, 0); + prefix = gen_const_xmlChar_ptr(n_prefix, 1); + memory = gen_xmlChar_ptr(n_memory, 2); + len = gen_int(n_len, 3); + + ret_val = xmlBuildQName((const xmlChar *)ncname, (const xmlChar *)prefix, memory, len); + if ((ret_val != NULL) && (ret_val != ncname) && + (ret_val != prefix) && (ret_val != memory)) + xmlFree(ret_val); + ret_val = NULL; + desret_xmlChar_ptr(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_ncname, (const xmlChar *)ncname, 0); + des_const_xmlChar_ptr(n_prefix, (const xmlChar *)prefix, 1); + des_xmlChar_ptr(n_memory, memory, 2); + des_int(n_len, len, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlBuildQName", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ncname); + printf(" %d", n_prefix); + printf(" %d", n_memory); + printf(" %d", n_len); + printf("\n"); + } + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlChildElementCount(void) { + int test_ret = 0; + +#if defined(LIBXML_TREE_ENABLED) + int mem_base; + unsigned long ret_val; + xmlNodePtr parent; /* the parent node */ + int n_parent; + + for (n_parent = 0;n_parent < gen_nb_xmlNodePtr;n_parent++) { + mem_base = xmlMemBlocks(); + parent = gen_xmlNodePtr(n_parent, 0); + + ret_val = xmlChildElementCount(parent); + desret_unsigned_long(ret_val); + call_tests++; + des_xmlNodePtr(n_parent, parent, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlChildElementCount", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_parent); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlCopyDoc(void) { + int test_ret = 0; + +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + xmlDocPtr ret_val; + xmlDocPtr doc; /* the document */ + int n_doc; + int recursive; /* if not zero do a recursive copy. */ + int n_recursive; + + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_recursive = 0;n_recursive < gen_nb_int;n_recursive++) { + mem_base = xmlMemBlocks(); + doc = gen_xmlDocPtr(n_doc, 0); + recursive = gen_int(n_recursive, 1); + + ret_val = xmlCopyDoc(doc, recursive); + desret_xmlDocPtr(ret_val); + call_tests++; + des_xmlDocPtr(n_doc, doc, 0); + des_int(n_recursive, recursive, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlCopyDoc", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf(" %d", n_recursive); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlCopyDtd(void) { + int test_ret = 0; + +#if defined(LIBXML_TREE_ENABLED) + int mem_base; + xmlDtdPtr ret_val; + xmlDtdPtr dtd; /* the dtd */ + int n_dtd; + + for (n_dtd = 0;n_dtd < gen_nb_xmlDtdPtr;n_dtd++) { + mem_base = xmlMemBlocks(); + dtd = gen_xmlDtdPtr(n_dtd, 0); + + ret_val = xmlCopyDtd(dtd); + desret_xmlDtdPtr(ret_val); + call_tests++; + des_xmlDtdPtr(n_dtd, dtd, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlCopyDtd", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_dtd); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlCopyNamespace(void) { + int test_ret = 0; + + int mem_base; + xmlNsPtr ret_val; + xmlNsPtr cur; /* the namespace */ + int n_cur; + + for (n_cur = 0;n_cur < gen_nb_xmlNsPtr;n_cur++) { + mem_base = xmlMemBlocks(); + cur = gen_xmlNsPtr(n_cur, 0); + + ret_val = xmlCopyNamespace(cur); + if (ret_val != NULL) xmlFreeNs(ret_val); + desret_xmlNsPtr(ret_val); + call_tests++; + des_xmlNsPtr(n_cur, cur, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlCopyNamespace", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_cur); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlCopyNamespaceList(void) { + int test_ret = 0; + + int mem_base; + xmlNsPtr ret_val; + xmlNsPtr cur; /* the first namespace */ + int n_cur; + + for (n_cur = 0;n_cur < gen_nb_xmlNsPtr;n_cur++) { + mem_base = xmlMemBlocks(); + cur = gen_xmlNsPtr(n_cur, 0); + + ret_val = xmlCopyNamespaceList(cur); + if (ret_val != NULL) xmlFreeNsList(ret_val); + desret_xmlNsPtr(ret_val); + call_tests++; + des_xmlNsPtr(n_cur, cur, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlCopyNamespaceList", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_cur); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlCopyNode(void) { + int test_ret = 0; + + int mem_base; + xmlNodePtr ret_val; + xmlNodePtr node; /* the node */ + int n_node; + int extended; /* if 1 do a recursive copy (properties, namespaces and children when applicable) if 2 copy properties and namespaces (when applicable) */ + int n_extended; + + for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) { + for (n_extended = 0;n_extended < gen_nb_int;n_extended++) { + mem_base = xmlMemBlocks(); + node = gen_xmlNodePtr(n_node, 0); + extended = gen_int(n_extended, 1); + + ret_val = xmlCopyNode(node, extended); + desret_xmlNodePtr(ret_val); + call_tests++; + des_xmlNodePtr(n_node, node, 0); + des_int(n_extended, extended, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlCopyNode", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_node); + printf(" %d", n_extended); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlCopyNodeList(void) { + int test_ret = 0; + + int mem_base; + xmlNodePtr ret_val; + xmlNodePtr node; /* the first node in the list. */ + int n_node; + + for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) { + mem_base = xmlMemBlocks(); + node = gen_xmlNodePtr(n_node, 0); + + ret_val = xmlCopyNodeList(node); + desret_xmlNodePtr(ret_val); + call_tests++; + des_xmlNodePtr(n_node, node, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlCopyNodeList", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_node); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlCopyProp(void) { + int test_ret = 0; + + int mem_base; + xmlAttrPtr ret_val; + xmlNodePtr target; /* the element where the attribute will be grafted */ + int n_target; + xmlAttrPtr cur; /* the attribute */ + int n_cur; + + for (n_target = 0;n_target < gen_nb_xmlNodePtr;n_target++) { + for (n_cur = 0;n_cur < gen_nb_xmlAttrPtr;n_cur++) { + mem_base = xmlMemBlocks(); + target = gen_xmlNodePtr(n_target, 0); + cur = gen_xmlAttrPtr(n_cur, 1); + + ret_val = xmlCopyProp(target, cur); + desret_xmlAttrPtr(ret_val); + call_tests++; + des_xmlNodePtr(n_target, target, 0); + des_xmlAttrPtr(n_cur, cur, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlCopyProp", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_target); + printf(" %d", n_cur); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlCopyPropList(void) { + int test_ret = 0; + + int mem_base; + xmlAttrPtr ret_val; + xmlNodePtr target; /* the element where the attributes will be grafted */ + int n_target; + xmlAttrPtr cur; /* the first attribute */ + int n_cur; + + for (n_target = 0;n_target < gen_nb_xmlNodePtr;n_target++) { + for (n_cur = 0;n_cur < gen_nb_xmlAttrPtr;n_cur++) { + mem_base = xmlMemBlocks(); + target = gen_xmlNodePtr(n_target, 0); + cur = gen_xmlAttrPtr(n_cur, 1); + + ret_val = xmlCopyPropList(target, cur); + desret_xmlAttrPtr(ret_val); + call_tests++; + des_xmlNodePtr(n_target, target, 0); + des_xmlAttrPtr(n_cur, cur, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlCopyPropList", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_target); + printf(" %d", n_cur); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlCreateIntSubset(void) { + int test_ret = 0; + + int mem_base; + xmlDtdPtr ret_val; + xmlDocPtr doc; /* the document pointer */ + int n_doc; + xmlChar * name; /* the DTD name */ + int n_name; + xmlChar * ExternalID; /* the external (PUBLIC) ID */ + int n_ExternalID; + xmlChar * SystemID; /* the system ID */ + int n_SystemID; + + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_ExternalID = 0;n_ExternalID < gen_nb_const_xmlChar_ptr;n_ExternalID++) { + for (n_SystemID = 0;n_SystemID < gen_nb_const_xmlChar_ptr;n_SystemID++) { + mem_base = xmlMemBlocks(); + doc = gen_xmlDocPtr(n_doc, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + ExternalID = gen_const_xmlChar_ptr(n_ExternalID, 2); + SystemID = gen_const_xmlChar_ptr(n_SystemID, 3); + + ret_val = xmlCreateIntSubset(doc, (const xmlChar *)name, (const xmlChar *)ExternalID, (const xmlChar *)SystemID); + desret_xmlDtdPtr(ret_val); + call_tests++; + des_xmlDocPtr(n_doc, doc, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + des_const_xmlChar_ptr(n_ExternalID, (const xmlChar *)ExternalID, 2); + des_const_xmlChar_ptr(n_SystemID, (const xmlChar *)SystemID, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlCreateIntSubset", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf(" %d", n_name); + printf(" %d", n_ExternalID); + printf(" %d", n_SystemID); + printf("\n"); + } + } + } + } + } + function_tests++; + + return(test_ret); +} + + +#define gen_nb_xmlDOMWrapCtxtPtr 1 +static xmlDOMWrapCtxtPtr gen_xmlDOMWrapCtxtPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlDOMWrapCtxtPtr(int no ATTRIBUTE_UNUSED, xmlDOMWrapCtxtPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +static int +test_xmlDOMWrapAdoptNode(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlDOMWrapCtxtPtr ctxt; /* the optional context for custom processing */ + int n_ctxt; + xmlDocPtr sourceDoc; /* the optional sourceDoc */ + int n_sourceDoc; + xmlNodePtr node; /* the node to start with */ + int n_node; + xmlDocPtr destDoc; /* the destination doc */ + int n_destDoc; + xmlNodePtr destParent; /* the optional new parent of @node in @destDoc */ + int n_destParent; + int options; /* option flags */ + int n_options; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlDOMWrapCtxtPtr;n_ctxt++) { + for (n_sourceDoc = 0;n_sourceDoc < gen_nb_xmlDocPtr;n_sourceDoc++) { + for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) { + for (n_destDoc = 0;n_destDoc < gen_nb_xmlDocPtr;n_destDoc++) { + for (n_destParent = 0;n_destParent < gen_nb_xmlNodePtr;n_destParent++) { + for (n_options = 0;n_options < gen_nb_int;n_options++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlDOMWrapCtxtPtr(n_ctxt, 0); + sourceDoc = gen_xmlDocPtr(n_sourceDoc, 1); + node = gen_xmlNodePtr(n_node, 2); + destDoc = gen_xmlDocPtr(n_destDoc, 3); + destParent = gen_xmlNodePtr(n_destParent, 4); + options = gen_int(n_options, 5); + + ret_val = xmlDOMWrapAdoptNode(ctxt, sourceDoc, node, destDoc, destParent, options); + if ((node != NULL) && (node->parent == NULL)) {xmlUnlinkNode(node);xmlFreeNode(node);node = NULL;} + desret_int(ret_val); + call_tests++; + des_xmlDOMWrapCtxtPtr(n_ctxt, ctxt, 0); + des_xmlDocPtr(n_sourceDoc, sourceDoc, 1); + des_xmlNodePtr(n_node, node, 2); + des_xmlDocPtr(n_destDoc, destDoc, 3); + des_xmlNodePtr(n_destParent, destParent, 4); + des_int(n_options, options, 5); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlDOMWrapAdoptNode", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_sourceDoc); + printf(" %d", n_node); + printf(" %d", n_destDoc); + printf(" %d", n_destParent); + printf(" %d", n_options); + printf("\n"); + } + } + } + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlDOMWrapCloneNode(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlDOMWrapCtxtPtr ctxt; /* the optional context for custom processing */ + int n_ctxt; + xmlDocPtr sourceDoc; /* the optional sourceDoc */ + int n_sourceDoc; + xmlNodePtr node; /* the node to start with */ + int n_node; + xmlNodePtr * resNode; /* the clone of the given @node */ + int n_resNode; + xmlDocPtr destDoc; /* the destination doc */ + int n_destDoc; + xmlNodePtr destParent; /* the optional new parent of @node in @destDoc */ + int n_destParent; + int deep; /* descend into child if set */ + int n_deep; + int options; /* option flags */ + int n_options; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlDOMWrapCtxtPtr;n_ctxt++) { + for (n_sourceDoc = 0;n_sourceDoc < gen_nb_xmlDocPtr;n_sourceDoc++) { + for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) { + for (n_resNode = 0;n_resNode < gen_nb_xmlNodePtr_ptr;n_resNode++) { + for (n_destDoc = 0;n_destDoc < gen_nb_xmlDocPtr;n_destDoc++) { + for (n_destParent = 0;n_destParent < gen_nb_xmlNodePtr;n_destParent++) { + for (n_deep = 0;n_deep < gen_nb_int;n_deep++) { + for (n_options = 0;n_options < gen_nb_int;n_options++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlDOMWrapCtxtPtr(n_ctxt, 0); + sourceDoc = gen_xmlDocPtr(n_sourceDoc, 1); + node = gen_xmlNodePtr(n_node, 2); + resNode = gen_xmlNodePtr_ptr(n_resNode, 3); + destDoc = gen_xmlDocPtr(n_destDoc, 4); + destParent = gen_xmlNodePtr(n_destParent, 5); + deep = gen_int(n_deep, 6); + options = gen_int(n_options, 7); + + ret_val = xmlDOMWrapCloneNode(ctxt, sourceDoc, node, resNode, destDoc, destParent, deep, options); + desret_int(ret_val); + call_tests++; + des_xmlDOMWrapCtxtPtr(n_ctxt, ctxt, 0); + des_xmlDocPtr(n_sourceDoc, sourceDoc, 1); + des_xmlNodePtr(n_node, node, 2); + des_xmlNodePtr_ptr(n_resNode, resNode, 3); + des_xmlDocPtr(n_destDoc, destDoc, 4); + des_xmlNodePtr(n_destParent, destParent, 5); + des_int(n_deep, deep, 6); + des_int(n_options, options, 7); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlDOMWrapCloneNode", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_sourceDoc); + printf(" %d", n_node); + printf(" %d", n_resNode); + printf(" %d", n_destDoc); + printf(" %d", n_destParent); + printf(" %d", n_deep); + printf(" %d", n_options); + printf("\n"); + } + } + } + } + } + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlDOMWrapNewCtxt(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlDOMWrapReconcileNamespaces(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlDOMWrapCtxtPtr ctxt; /* DOM wrapper context, unused at the moment */ + int n_ctxt; + xmlNodePtr elem; /* the element-node */ + int n_elem; + int options; /* option flags */ + int n_options; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlDOMWrapCtxtPtr;n_ctxt++) { + for (n_elem = 0;n_elem < gen_nb_xmlNodePtr;n_elem++) { + for (n_options = 0;n_options < gen_nb_int;n_options++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlDOMWrapCtxtPtr(n_ctxt, 0); + elem = gen_xmlNodePtr(n_elem, 1); + options = gen_int(n_options, 2); + + ret_val = xmlDOMWrapReconcileNamespaces(ctxt, elem, options); + desret_int(ret_val); + call_tests++; + des_xmlDOMWrapCtxtPtr(n_ctxt, ctxt, 0); + des_xmlNodePtr(n_elem, elem, 1); + des_int(n_options, options, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlDOMWrapReconcileNamespaces", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_elem); + printf(" %d", n_options); + printf("\n"); + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlDOMWrapRemoveNode(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlDOMWrapCtxtPtr ctxt; /* a DOM wrapper context */ + int n_ctxt; + xmlDocPtr doc; /* the doc */ + int n_doc; + xmlNodePtr node; /* the node to be removed. */ + int n_node; + int options; /* set of options, unused at the moment */ + int n_options; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlDOMWrapCtxtPtr;n_ctxt++) { + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) { + for (n_options = 0;n_options < gen_nb_int;n_options++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlDOMWrapCtxtPtr(n_ctxt, 0); + doc = gen_xmlDocPtr(n_doc, 1); + node = gen_xmlNodePtr(n_node, 2); + options = gen_int(n_options, 3); + + ret_val = xmlDOMWrapRemoveNode(ctxt, doc, node, options); + desret_int(ret_val); + call_tests++; + des_xmlDOMWrapCtxtPtr(n_ctxt, ctxt, 0); + des_xmlDocPtr(n_doc, doc, 1); + des_xmlNodePtr(n_node, node, 2); + des_int(n_options, options, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlDOMWrapRemoveNode", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_doc); + printf(" %d", n_node); + printf(" %d", n_options); + printf("\n"); + } + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlDocCopyNode(void) { + int test_ret = 0; + + int mem_base; + xmlNodePtr ret_val; + xmlNodePtr node; /* the node */ + int n_node; + xmlDocPtr doc; /* the document */ + int n_doc; + int extended; /* if 1 do a recursive copy (properties, namespaces and children when applicable) if 2 copy properties and namespaces (when applicable) */ + int n_extended; + + for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) { + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_extended = 0;n_extended < gen_nb_int;n_extended++) { + mem_base = xmlMemBlocks(); + node = gen_xmlNodePtr(n_node, 0); + doc = gen_xmlDocPtr(n_doc, 1); + extended = gen_int(n_extended, 2); + + ret_val = xmlDocCopyNode(node, doc, extended); + desret_xmlNodePtr(ret_val); + call_tests++; + des_xmlNodePtr(n_node, node, 0); + des_xmlDocPtr(n_doc, doc, 1); + des_int(n_extended, extended, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlDocCopyNode", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_node); + printf(" %d", n_doc); + printf(" %d", n_extended); + printf("\n"); + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlDocCopyNodeList(void) { + int test_ret = 0; + + int mem_base; + xmlNodePtr ret_val; + xmlDocPtr doc; /* the target document */ + int n_doc; + xmlNodePtr node; /* the first node in the list. */ + int n_node; + + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) { + mem_base = xmlMemBlocks(); + doc = gen_xmlDocPtr(n_doc, 0); + node = gen_xmlNodePtr(n_node, 1); + + ret_val = xmlDocCopyNodeList(doc, node); + desret_xmlNodePtr(ret_val); + call_tests++; + des_xmlDocPtr(n_doc, doc, 0); + des_xmlNodePtr(n_node, node, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlDocCopyNodeList", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf(" %d", n_node); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlDocDump(void) { + int test_ret = 0; + +#if defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + int ret_val; + FILE * f; /* the FILE* */ + int n_f; + xmlDocPtr cur; /* the document */ + int n_cur; + + for (n_f = 0;n_f < gen_nb_FILE_ptr;n_f++) { + for (n_cur = 0;n_cur < gen_nb_xmlDocPtr;n_cur++) { + mem_base = xmlMemBlocks(); + f = gen_FILE_ptr(n_f, 0); + cur = gen_xmlDocPtr(n_cur, 1); + + ret_val = xmlDocDump(f, cur); + desret_int(ret_val); + call_tests++; + des_FILE_ptr(n_f, f, 0); + des_xmlDocPtr(n_cur, cur, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlDocDump", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_f); + printf(" %d", n_cur); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlDocDumpFormatMemory(void) { + int test_ret = 0; + +#if defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + xmlDocPtr cur; /* the document */ + int n_cur; + xmlChar ** mem; /* OUT: the memory pointer */ + int n_mem; + int * size; /* OUT: the memory length */ + int n_size; + int format; /* should formatting spaces been added */ + int n_format; + + for (n_cur = 0;n_cur < gen_nb_xmlDocPtr;n_cur++) { + for (n_mem = 0;n_mem < gen_nb_xmlChar_ptr_ptr;n_mem++) { + for (n_size = 0;n_size < gen_nb_int_ptr;n_size++) { + for (n_format = 0;n_format < gen_nb_int;n_format++) { + mem_base = xmlMemBlocks(); + cur = gen_xmlDocPtr(n_cur, 0); + mem = gen_xmlChar_ptr_ptr(n_mem, 1); + size = gen_int_ptr(n_size, 2); + format = gen_int(n_format, 3); + + xmlDocDumpFormatMemory(cur, mem, size, format); + call_tests++; + des_xmlDocPtr(n_cur, cur, 0); + des_xmlChar_ptr_ptr(n_mem, mem, 1); + des_int_ptr(n_size, size, 2); + des_int(n_format, format, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlDocDumpFormatMemory", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_cur); + printf(" %d", n_mem); + printf(" %d", n_size); + printf(" %d", n_format); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlDocDumpFormatMemoryEnc(void) { + int test_ret = 0; + +#if defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + xmlDocPtr out_doc; /* Document to generate XML text from */ + int n_out_doc; + xmlChar ** doc_txt_ptr; /* Memory pointer for allocated XML text */ + int n_doc_txt_ptr; + int * doc_txt_len; /* Length of the generated XML text */ + int n_doc_txt_len; + char * txt_encoding; /* Character encoding to use when generating XML text */ + int n_txt_encoding; + int format; /* should formatting spaces been added */ + int n_format; + + for (n_out_doc = 0;n_out_doc < gen_nb_xmlDocPtr;n_out_doc++) { + for (n_doc_txt_ptr = 0;n_doc_txt_ptr < gen_nb_xmlChar_ptr_ptr;n_doc_txt_ptr++) { + for (n_doc_txt_len = 0;n_doc_txt_len < gen_nb_int_ptr;n_doc_txt_len++) { + for (n_txt_encoding = 0;n_txt_encoding < gen_nb_const_char_ptr;n_txt_encoding++) { + for (n_format = 0;n_format < gen_nb_int;n_format++) { + mem_base = xmlMemBlocks(); + out_doc = gen_xmlDocPtr(n_out_doc, 0); + doc_txt_ptr = gen_xmlChar_ptr_ptr(n_doc_txt_ptr, 1); + doc_txt_len = gen_int_ptr(n_doc_txt_len, 2); + txt_encoding = gen_const_char_ptr(n_txt_encoding, 3); + format = gen_int(n_format, 4); + + xmlDocDumpFormatMemoryEnc(out_doc, doc_txt_ptr, doc_txt_len, (const char *)txt_encoding, format); + call_tests++; + des_xmlDocPtr(n_out_doc, out_doc, 0); + des_xmlChar_ptr_ptr(n_doc_txt_ptr, doc_txt_ptr, 1); + des_int_ptr(n_doc_txt_len, doc_txt_len, 2); + des_const_char_ptr(n_txt_encoding, (const char *)txt_encoding, 3); + des_int(n_format, format, 4); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlDocDumpFormatMemoryEnc", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_out_doc); + printf(" %d", n_doc_txt_ptr); + printf(" %d", n_doc_txt_len); + printf(" %d", n_txt_encoding); + printf(" %d", n_format); + printf("\n"); + } + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlDocDumpMemory(void) { + int test_ret = 0; + +#if defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + xmlDocPtr cur; /* the document */ + int n_cur; + xmlChar ** mem; /* OUT: the memory pointer */ + int n_mem; + int * size; /* OUT: the memory length */ + int n_size; + + for (n_cur = 0;n_cur < gen_nb_xmlDocPtr;n_cur++) { + for (n_mem = 0;n_mem < gen_nb_xmlChar_ptr_ptr;n_mem++) { + for (n_size = 0;n_size < gen_nb_int_ptr;n_size++) { + mem_base = xmlMemBlocks(); + cur = gen_xmlDocPtr(n_cur, 0); + mem = gen_xmlChar_ptr_ptr(n_mem, 1); + size = gen_int_ptr(n_size, 2); + + xmlDocDumpMemory(cur, mem, size); + call_tests++; + des_xmlDocPtr(n_cur, cur, 0); + des_xmlChar_ptr_ptr(n_mem, mem, 1); + des_int_ptr(n_size, size, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlDocDumpMemory", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_cur); + printf(" %d", n_mem); + printf(" %d", n_size); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlDocDumpMemoryEnc(void) { + int test_ret = 0; + +#if defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + xmlDocPtr out_doc; /* Document to generate XML text from */ + int n_out_doc; + xmlChar ** doc_txt_ptr; /* Memory pointer for allocated XML text */ + int n_doc_txt_ptr; + int * doc_txt_len; /* Length of the generated XML text */ + int n_doc_txt_len; + char * txt_encoding; /* Character encoding to use when generating XML text */ + int n_txt_encoding; + + for (n_out_doc = 0;n_out_doc < gen_nb_xmlDocPtr;n_out_doc++) { + for (n_doc_txt_ptr = 0;n_doc_txt_ptr < gen_nb_xmlChar_ptr_ptr;n_doc_txt_ptr++) { + for (n_doc_txt_len = 0;n_doc_txt_len < gen_nb_int_ptr;n_doc_txt_len++) { + for (n_txt_encoding = 0;n_txt_encoding < gen_nb_const_char_ptr;n_txt_encoding++) { + mem_base = xmlMemBlocks(); + out_doc = gen_xmlDocPtr(n_out_doc, 0); + doc_txt_ptr = gen_xmlChar_ptr_ptr(n_doc_txt_ptr, 1); + doc_txt_len = gen_int_ptr(n_doc_txt_len, 2); + txt_encoding = gen_const_char_ptr(n_txt_encoding, 3); + + xmlDocDumpMemoryEnc(out_doc, doc_txt_ptr, doc_txt_len, (const char *)txt_encoding); + call_tests++; + des_xmlDocPtr(n_out_doc, out_doc, 0); + des_xmlChar_ptr_ptr(n_doc_txt_ptr, doc_txt_ptr, 1); + des_int_ptr(n_doc_txt_len, doc_txt_len, 2); + des_const_char_ptr(n_txt_encoding, (const char *)txt_encoding, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlDocDumpMemoryEnc", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_out_doc); + printf(" %d", n_doc_txt_ptr); + printf(" %d", n_doc_txt_len); + printf(" %d", n_txt_encoding); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlDocFormatDump(void) { + int test_ret = 0; + +#if defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + int ret_val; + FILE * f; /* the FILE* */ + int n_f; + xmlDocPtr cur; /* the document */ + int n_cur; + int format; /* should formatting spaces been added */ + int n_format; + + for (n_f = 0;n_f < gen_nb_FILE_ptr;n_f++) { + for (n_cur = 0;n_cur < gen_nb_xmlDocPtr;n_cur++) { + for (n_format = 0;n_format < gen_nb_int;n_format++) { + mem_base = xmlMemBlocks(); + f = gen_FILE_ptr(n_f, 0); + cur = gen_xmlDocPtr(n_cur, 1); + format = gen_int(n_format, 2); + + ret_val = xmlDocFormatDump(f, cur, format); + desret_int(ret_val); + call_tests++; + des_FILE_ptr(n_f, f, 0); + des_xmlDocPtr(n_cur, cur, 1); + des_int(n_format, format, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlDocFormatDump", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_f); + printf(" %d", n_cur); + printf(" %d", n_format); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlDocGetRootElement(void) { + int test_ret = 0; + + int mem_base; + xmlNodePtr ret_val; + xmlDoc * doc; /* the document */ + int n_doc; + + for (n_doc = 0;n_doc < gen_nb_const_xmlDoc_ptr;n_doc++) { + mem_base = xmlMemBlocks(); + doc = gen_const_xmlDoc_ptr(n_doc, 0); + + ret_val = xmlDocGetRootElement((const xmlDoc *)doc); + desret_xmlNodePtr(ret_val); + call_tests++; + des_const_xmlDoc_ptr(n_doc, (const xmlDoc *)doc, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlDocGetRootElement", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlDocSetRootElement(void) { + int test_ret = 0; + +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_WRITER_ENABLED) + int mem_base; + xmlNodePtr ret_val; + xmlDocPtr doc; /* the document */ + int n_doc; + xmlNodePtr root; /* the new document root element, if root is NULL no action is taken, to remove a node from a document use xmlUnlinkNode(root) instead. */ + int n_root; + + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_root = 0;n_root < gen_nb_xmlNodePtr_in;n_root++) { + mem_base = xmlMemBlocks(); + doc = gen_xmlDocPtr(n_doc, 0); + root = gen_xmlNodePtr_in(n_root, 1); + + ret_val = xmlDocSetRootElement(doc, root); + if (doc == NULL) { xmlFreeNode(root) ; root = NULL ; } + desret_xmlNodePtr(ret_val); + call_tests++; + des_xmlDocPtr(n_doc, doc, 0); + des_xmlNodePtr_in(n_root, root, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlDocSetRootElement", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf(" %d", n_root); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlElemDump(void) { + int test_ret = 0; + +#if defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + FILE * f; /* the FILE * for the output */ + int n_f; + xmlDocPtr doc; /* the document */ + int n_doc; + xmlNodePtr cur; /* the current node */ + int n_cur; + + for (n_f = 0;n_f < gen_nb_FILE_ptr;n_f++) { + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) { + mem_base = xmlMemBlocks(); + f = gen_FILE_ptr(n_f, 0); + doc = gen_xmlDocPtr(n_doc, 1); + cur = gen_xmlNodePtr(n_cur, 2); + + xmlElemDump(f, doc, cur); + call_tests++; + des_FILE_ptr(n_f, f, 0); + des_xmlDocPtr(n_doc, doc, 1); + des_xmlNodePtr(n_cur, cur, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlElemDump", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_f); + printf(" %d", n_doc); + printf(" %d", n_cur); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlFirstElementChild(void) { + int test_ret = 0; + +#if defined(LIBXML_TREE_ENABLED) + int mem_base; + xmlNodePtr ret_val; + xmlNodePtr parent; /* the parent node */ + int n_parent; + + for (n_parent = 0;n_parent < gen_nb_xmlNodePtr;n_parent++) { + mem_base = xmlMemBlocks(); + parent = gen_xmlNodePtr(n_parent, 0); + + ret_val = xmlFirstElementChild(parent); + desret_xmlNodePtr(ret_val); + call_tests++; + des_xmlNodePtr(n_parent, parent, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlFirstElementChild", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_parent); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlGetBufferAllocationScheme(void) { + int test_ret = 0; + + int mem_base; + xmlBufferAllocationScheme ret_val; + + mem_base = xmlMemBlocks(); + + ret_val = xmlGetBufferAllocationScheme(); + desret_xmlBufferAllocationScheme(ret_val); + call_tests++; + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlGetBufferAllocationScheme", + xmlMemBlocks() - mem_base); + test_ret++; + printf("\n"); + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlGetCompressMode(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + + mem_base = xmlMemBlocks(); + + ret_val = xmlGetCompressMode(); + desret_int(ret_val); + call_tests++; + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlGetCompressMode", + xmlMemBlocks() - mem_base); + test_ret++; + printf("\n"); + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlGetDocCompressMode(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlDoc * doc; /* the document */ + int n_doc; + + for (n_doc = 0;n_doc < gen_nb_const_xmlDoc_ptr;n_doc++) { + mem_base = xmlMemBlocks(); + doc = gen_const_xmlDoc_ptr(n_doc, 0); + + ret_val = xmlGetDocCompressMode((const xmlDoc *)doc); + desret_int(ret_val); + call_tests++; + des_const_xmlDoc_ptr(n_doc, (const xmlDoc *)doc, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlGetDocCompressMode", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlGetIntSubset(void) { + int test_ret = 0; + + int mem_base; + xmlDtdPtr ret_val; + xmlDoc * doc; /* the document pointer */ + int n_doc; + + for (n_doc = 0;n_doc < gen_nb_const_xmlDoc_ptr;n_doc++) { + mem_base = xmlMemBlocks(); + doc = gen_const_xmlDoc_ptr(n_doc, 0); + + ret_val = xmlGetIntSubset((const xmlDoc *)doc); + desret_xmlDtdPtr(ret_val); + call_tests++; + des_const_xmlDoc_ptr(n_doc, (const xmlDoc *)doc, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlGetIntSubset", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlGetLastChild(void) { + int test_ret = 0; + + int mem_base; + xmlNodePtr ret_val; + xmlNode * parent; /* the parent node */ + int n_parent; + + for (n_parent = 0;n_parent < gen_nb_const_xmlNode_ptr;n_parent++) { + mem_base = xmlMemBlocks(); + parent = gen_const_xmlNode_ptr(n_parent, 0); + + ret_val = xmlGetLastChild((const xmlNode *)parent); + desret_xmlNodePtr(ret_val); + call_tests++; + des_const_xmlNode_ptr(n_parent, (const xmlNode *)parent, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlGetLastChild", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_parent); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlGetLineNo(void) { + int test_ret = 0; + + int mem_base; + long ret_val; + xmlNode * node; /* valid node */ + int n_node; + + for (n_node = 0;n_node < gen_nb_const_xmlNode_ptr;n_node++) { + mem_base = xmlMemBlocks(); + node = gen_const_xmlNode_ptr(n_node, 0); + + ret_val = xmlGetLineNo((const xmlNode *)node); + desret_long(ret_val); + call_tests++; + des_const_xmlNode_ptr(n_node, (const xmlNode *)node, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlGetLineNo", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_node); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlGetNoNsProp(void) { + int test_ret = 0; + + int mem_base; + xmlChar * ret_val; + xmlNode * node; /* the node */ + int n_node; + xmlChar * name; /* the attribute name */ + int n_name; + + for (n_node = 0;n_node < gen_nb_const_xmlNode_ptr;n_node++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + mem_base = xmlMemBlocks(); + node = gen_const_xmlNode_ptr(n_node, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + + ret_val = xmlGetNoNsProp((const xmlNode *)node, (const xmlChar *)name); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_const_xmlNode_ptr(n_node, (const xmlNode *)node, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlGetNoNsProp", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_node); + printf(" %d", n_name); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlGetNodePath(void) { + int test_ret = 0; + +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_DEBUG_ENABLED) + int mem_base; + xmlChar * ret_val; + xmlNode * node; /* a node */ + int n_node; + + for (n_node = 0;n_node < gen_nb_const_xmlNode_ptr;n_node++) { + mem_base = xmlMemBlocks(); + node = gen_const_xmlNode_ptr(n_node, 0); + + ret_val = xmlGetNodePath((const xmlNode *)node); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_const_xmlNode_ptr(n_node, (const xmlNode *)node, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlGetNodePath", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_node); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlGetNsList(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlGetNsProp(void) { + int test_ret = 0; + + int mem_base; + xmlChar * ret_val; + xmlNode * node; /* the node */ + int n_node; + xmlChar * name; /* the attribute name */ + int n_name; + xmlChar * nameSpace; /* the URI of the namespace */ + int n_nameSpace; + + for (n_node = 0;n_node < gen_nb_const_xmlNode_ptr;n_node++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_nameSpace = 0;n_nameSpace < gen_nb_const_xmlChar_ptr;n_nameSpace++) { + mem_base = xmlMemBlocks(); + node = gen_const_xmlNode_ptr(n_node, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + nameSpace = gen_const_xmlChar_ptr(n_nameSpace, 2); + + ret_val = xmlGetNsProp((const xmlNode *)node, (const xmlChar *)name, (const xmlChar *)nameSpace); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_const_xmlNode_ptr(n_node, (const xmlNode *)node, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + des_const_xmlChar_ptr(n_nameSpace, (const xmlChar *)nameSpace, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlGetNsProp", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_node); + printf(" %d", n_name); + printf(" %d", n_nameSpace); + printf("\n"); + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlGetProp(void) { + int test_ret = 0; + + int mem_base; + xmlChar * ret_val; + xmlNode * node; /* the node */ + int n_node; + xmlChar * name; /* the attribute name */ + int n_name; + + for (n_node = 0;n_node < gen_nb_const_xmlNode_ptr;n_node++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + mem_base = xmlMemBlocks(); + node = gen_const_xmlNode_ptr(n_node, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + + ret_val = xmlGetProp((const xmlNode *)node, (const xmlChar *)name); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_const_xmlNode_ptr(n_node, (const xmlNode *)node, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlGetProp", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_node); + printf(" %d", n_name); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlHasNsProp(void) { + int test_ret = 0; + + int mem_base; + xmlAttrPtr ret_val; + xmlNode * node; /* the node */ + int n_node; + xmlChar * name; /* the attribute name */ + int n_name; + xmlChar * nameSpace; /* the URI of the namespace */ + int n_nameSpace; + + for (n_node = 0;n_node < gen_nb_const_xmlNode_ptr;n_node++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_nameSpace = 0;n_nameSpace < gen_nb_const_xmlChar_ptr;n_nameSpace++) { + mem_base = xmlMemBlocks(); + node = gen_const_xmlNode_ptr(n_node, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + nameSpace = gen_const_xmlChar_ptr(n_nameSpace, 2); + + ret_val = xmlHasNsProp((const xmlNode *)node, (const xmlChar *)name, (const xmlChar *)nameSpace); + desret_xmlAttrPtr(ret_val); + call_tests++; + des_const_xmlNode_ptr(n_node, (const xmlNode *)node, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + des_const_xmlChar_ptr(n_nameSpace, (const xmlChar *)nameSpace, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlHasNsProp", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_node); + printf(" %d", n_name); + printf(" %d", n_nameSpace); + printf("\n"); + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlHasProp(void) { + int test_ret = 0; + + int mem_base; + xmlAttrPtr ret_val; + xmlNode * node; /* the node */ + int n_node; + xmlChar * name; /* the attribute name */ + int n_name; + + for (n_node = 0;n_node < gen_nb_const_xmlNode_ptr;n_node++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + mem_base = xmlMemBlocks(); + node = gen_const_xmlNode_ptr(n_node, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + + ret_val = xmlHasProp((const xmlNode *)node, (const xmlChar *)name); + desret_xmlAttrPtr(ret_val); + call_tests++; + des_const_xmlNode_ptr(n_node, (const xmlNode *)node, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlHasProp", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_node); + printf(" %d", n_name); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlIsBlankNode(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlNode * node; /* the node */ + int n_node; + + for (n_node = 0;n_node < gen_nb_const_xmlNode_ptr;n_node++) { + mem_base = xmlMemBlocks(); + node = gen_const_xmlNode_ptr(n_node, 0); + + ret_val = xmlIsBlankNode((const xmlNode *)node); + desret_int(ret_val); + call_tests++; + des_const_xmlNode_ptr(n_node, (const xmlNode *)node, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlIsBlankNode", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_node); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlIsXHTML(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlChar * systemID; /* the system identifier */ + int n_systemID; + xmlChar * publicID; /* the public identifier */ + int n_publicID; + + for (n_systemID = 0;n_systemID < gen_nb_const_xmlChar_ptr;n_systemID++) { + for (n_publicID = 0;n_publicID < gen_nb_const_xmlChar_ptr;n_publicID++) { + mem_base = xmlMemBlocks(); + systemID = gen_const_xmlChar_ptr(n_systemID, 0); + publicID = gen_const_xmlChar_ptr(n_publicID, 1); + + ret_val = xmlIsXHTML((const xmlChar *)systemID, (const xmlChar *)publicID); + desret_int(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_systemID, (const xmlChar *)systemID, 0); + des_const_xmlChar_ptr(n_publicID, (const xmlChar *)publicID, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlIsXHTML", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_systemID); + printf(" %d", n_publicID); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlLastElementChild(void) { + int test_ret = 0; + +#if defined(LIBXML_TREE_ENABLED) + int mem_base; + xmlNodePtr ret_val; + xmlNodePtr parent; /* the parent node */ + int n_parent; + + for (n_parent = 0;n_parent < gen_nb_xmlNodePtr;n_parent++) { + mem_base = xmlMemBlocks(); + parent = gen_xmlNodePtr(n_parent, 0); + + ret_val = xmlLastElementChild(parent); + desret_xmlNodePtr(ret_val); + call_tests++; + des_xmlNodePtr(n_parent, parent, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlLastElementChild", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_parent); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlNewCDataBlock(void) { + int test_ret = 0; + + int mem_base; + xmlNodePtr ret_val; + xmlDocPtr doc; /* the document */ + int n_doc; + xmlChar * content; /* the CDATA block content content */ + int n_content; + int len; /* the length of the block */ + int n_len; + + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) { + for (n_len = 0;n_len < gen_nb_int;n_len++) { + mem_base = xmlMemBlocks(); + doc = gen_xmlDocPtr(n_doc, 0); + content = gen_const_xmlChar_ptr(n_content, 1); + len = gen_int(n_len, 2); + + ret_val = xmlNewCDataBlock(doc, (const xmlChar *)content, len); + desret_xmlNodePtr(ret_val); + call_tests++; + des_xmlDocPtr(n_doc, doc, 0); + des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 1); + des_int(n_len, len, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNewCDataBlock", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf(" %d", n_content); + printf(" %d", n_len); + printf("\n"); + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlNewCharRef(void) { + int test_ret = 0; + + int mem_base; + xmlNodePtr ret_val; + xmlDocPtr doc; /* the document */ + int n_doc; + xmlChar * name; /* the char ref string, starting with # or "&# ... ;" */ + int n_name; + + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + mem_base = xmlMemBlocks(); + doc = gen_xmlDocPtr(n_doc, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + + ret_val = xmlNewCharRef(doc, (const xmlChar *)name); + desret_xmlNodePtr(ret_val); + call_tests++; + des_xmlDocPtr(n_doc, doc, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNewCharRef", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf(" %d", n_name); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlNewChild(void) { + int test_ret = 0; + +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) +#ifdef LIBXML_TREE_ENABLED + int mem_base; + xmlNodePtr ret_val; + xmlNodePtr parent; /* the parent node */ + int n_parent; + xmlNsPtr ns; /* a namespace if any */ + int n_ns; + xmlChar * name; /* the name of the child */ + int n_name; + xmlChar * content; /* the XML content of the child if any. */ + int n_content; + + for (n_parent = 0;n_parent < gen_nb_xmlNodePtr;n_parent++) { + for (n_ns = 0;n_ns < gen_nb_xmlNsPtr;n_ns++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) { + mem_base = xmlMemBlocks(); + parent = gen_xmlNodePtr(n_parent, 0); + ns = gen_xmlNsPtr(n_ns, 1); + name = gen_const_xmlChar_ptr(n_name, 2); + content = gen_const_xmlChar_ptr(n_content, 3); + + ret_val = xmlNewChild(parent, ns, (const xmlChar *)name, (const xmlChar *)content); + desret_xmlNodePtr(ret_val); + call_tests++; + des_xmlNodePtr(n_parent, parent, 0); + des_xmlNsPtr(n_ns, ns, 1); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 2); + des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNewChild", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_parent); + printf(" %d", n_ns); + printf(" %d", n_name); + printf(" %d", n_content); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif +#endif + + return(test_ret); +} + + +static int +test_xmlNewComment(void) { + int test_ret = 0; + + int mem_base; + xmlNodePtr ret_val; + xmlChar * content; /* the comment content */ + int n_content; + + for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) { + mem_base = xmlMemBlocks(); + content = gen_const_xmlChar_ptr(n_content, 0); + + ret_val = xmlNewComment((const xmlChar *)content); + desret_xmlNodePtr(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNewComment", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_content); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlNewDoc(void) { + int test_ret = 0; + + int mem_base; + xmlDocPtr ret_val; + xmlChar * version; /* xmlChar string giving the version of XML "1.0" */ + int n_version; + + for (n_version = 0;n_version < gen_nb_const_xmlChar_ptr;n_version++) { + mem_base = xmlMemBlocks(); + version = gen_const_xmlChar_ptr(n_version, 0); + + ret_val = xmlNewDoc((const xmlChar *)version); + desret_xmlDocPtr(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_version, (const xmlChar *)version, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNewDoc", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_version); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlNewDocComment(void) { + int test_ret = 0; + + int mem_base; + xmlNodePtr ret_val; + xmlDocPtr doc; /* the document */ + int n_doc; + xmlChar * content; /* the comment content */ + int n_content; + + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) { + mem_base = xmlMemBlocks(); + doc = gen_xmlDocPtr(n_doc, 0); + content = gen_const_xmlChar_ptr(n_content, 1); + + ret_val = xmlNewDocComment(doc, (const xmlChar *)content); + desret_xmlNodePtr(ret_val); + call_tests++; + des_xmlDocPtr(n_doc, doc, 0); + des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNewDocComment", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf(" %d", n_content); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlNewDocFragment(void) { + int test_ret = 0; + +#if defined(LIBXML_TREE_ENABLED) + int mem_base; + xmlNodePtr ret_val; + xmlDocPtr doc; /* the document owning the fragment */ + int n_doc; + + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + mem_base = xmlMemBlocks(); + doc = gen_xmlDocPtr(n_doc, 0); + + ret_val = xmlNewDocFragment(doc); + desret_xmlNodePtr(ret_val); + call_tests++; + des_xmlDocPtr(n_doc, doc, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNewDocFragment", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlNewDocNode(void) { + int test_ret = 0; + + int mem_base; + xmlNodePtr ret_val; + xmlDocPtr doc; /* the document */ + int n_doc; + xmlNsPtr ns; /* namespace if any */ + int n_ns; + xmlChar * name; /* the node name */ + int n_name; + xmlChar * content; /* the XML text content if any */ + int n_content; + + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_ns = 0;n_ns < gen_nb_xmlNsPtr;n_ns++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) { + mem_base = xmlMemBlocks(); + doc = gen_xmlDocPtr(n_doc, 0); + ns = gen_xmlNsPtr(n_ns, 1); + name = gen_const_xmlChar_ptr(n_name, 2); + content = gen_const_xmlChar_ptr(n_content, 3); + + ret_val = xmlNewDocNode(doc, ns, (const xmlChar *)name, (const xmlChar *)content); + desret_xmlNodePtr(ret_val); + call_tests++; + des_xmlDocPtr(n_doc, doc, 0); + des_xmlNsPtr(n_ns, ns, 1); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 2); + des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNewDocNode", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf(" %d", n_ns); + printf(" %d", n_name); + printf(" %d", n_content); + printf("\n"); + } + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlNewDocNodeEatName(void) { + int test_ret = 0; + + int mem_base; + xmlNodePtr ret_val; + xmlDocPtr doc; /* the document */ + int n_doc; + xmlNsPtr ns; /* namespace if any */ + int n_ns; + xmlChar * name; /* the node name */ + int n_name; + xmlChar * content; /* the XML text content if any */ + int n_content; + + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_ns = 0;n_ns < gen_nb_xmlNsPtr;n_ns++) { + for (n_name = 0;n_name < gen_nb_eaten_name;n_name++) { + for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) { + mem_base = xmlMemBlocks(); + doc = gen_xmlDocPtr(n_doc, 0); + ns = gen_xmlNsPtr(n_ns, 1); + name = gen_eaten_name(n_name, 2); + content = gen_const_xmlChar_ptr(n_content, 3); + + ret_val = xmlNewDocNodeEatName(doc, ns, name, (const xmlChar *)content); + desret_xmlNodePtr(ret_val); + call_tests++; + des_xmlDocPtr(n_doc, doc, 0); + des_xmlNsPtr(n_ns, ns, 1); + des_eaten_name(n_name, name, 2); + des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNewDocNodeEatName", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf(" %d", n_ns); + printf(" %d", n_name); + printf(" %d", n_content); + printf("\n"); + } + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlNewDocPI(void) { + int test_ret = 0; + + int mem_base; + xmlNodePtr ret_val; + xmlDocPtr doc; /* the target document */ + int n_doc; + xmlChar * name; /* the processing instruction name */ + int n_name; + xmlChar * content; /* the PI content */ + int n_content; + + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) { + mem_base = xmlMemBlocks(); + doc = gen_xmlDocPtr(n_doc, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + content = gen_const_xmlChar_ptr(n_content, 2); + + ret_val = xmlNewDocPI(doc, (const xmlChar *)name, (const xmlChar *)content); + desret_xmlNodePtr(ret_val); + call_tests++; + des_xmlDocPtr(n_doc, doc, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNewDocPI", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf(" %d", n_name); + printf(" %d", n_content); + printf("\n"); + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlNewDocProp(void) { + int test_ret = 0; + + int mem_base; + xmlAttrPtr ret_val; + xmlDocPtr doc; /* the document */ + int n_doc; + xmlChar * name; /* the name of the attribute */ + int n_name; + xmlChar * value; /* the value of the attribute */ + int n_value; + + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) { + mem_base = xmlMemBlocks(); + doc = gen_xmlDocPtr(n_doc, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + value = gen_const_xmlChar_ptr(n_value, 2); + + ret_val = xmlNewDocProp(doc, (const xmlChar *)name, (const xmlChar *)value); + desret_xmlAttrPtr(ret_val); + call_tests++; + des_xmlDocPtr(n_doc, doc, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNewDocProp", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf(" %d", n_name); + printf(" %d", n_value); + printf("\n"); + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlNewDocRawNode(void) { + int test_ret = 0; + +#if defined(LIBXML_TREE_ENABLED) +#ifdef LIBXML_TREE_ENABLED + int mem_base; + xmlNodePtr ret_val; + xmlDocPtr doc; /* the document */ + int n_doc; + xmlNsPtr ns; /* namespace if any */ + int n_ns; + xmlChar * name; /* the node name */ + int n_name; + xmlChar * content; /* the text content if any */ + int n_content; + + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_ns = 0;n_ns < gen_nb_xmlNsPtr;n_ns++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) { + mem_base = xmlMemBlocks(); + doc = gen_xmlDocPtr(n_doc, 0); + ns = gen_xmlNsPtr(n_ns, 1); + name = gen_const_xmlChar_ptr(n_name, 2); + content = gen_const_xmlChar_ptr(n_content, 3); + + ret_val = xmlNewDocRawNode(doc, ns, (const xmlChar *)name, (const xmlChar *)content); + desret_xmlNodePtr(ret_val); + call_tests++; + des_xmlDocPtr(n_doc, doc, 0); + des_xmlNsPtr(n_ns, ns, 1); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 2); + des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNewDocRawNode", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf(" %d", n_ns); + printf(" %d", n_name); + printf(" %d", n_content); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif +#endif + + return(test_ret); +} + + +static int +test_xmlNewDocText(void) { + int test_ret = 0; + + int mem_base; + xmlNodePtr ret_val; + xmlDoc * doc; /* the document */ + int n_doc; + xmlChar * content; /* the text content */ + int n_content; + + for (n_doc = 0;n_doc < gen_nb_const_xmlDoc_ptr;n_doc++) { + for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) { + mem_base = xmlMemBlocks(); + doc = gen_const_xmlDoc_ptr(n_doc, 0); + content = gen_const_xmlChar_ptr(n_content, 1); + + ret_val = xmlNewDocText((const xmlDoc *)doc, (const xmlChar *)content); + desret_xmlNodePtr(ret_val); + call_tests++; + des_const_xmlDoc_ptr(n_doc, (const xmlDoc *)doc, 0); + des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNewDocText", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf(" %d", n_content); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlNewDocTextLen(void) { + int test_ret = 0; + + int mem_base; + xmlNodePtr ret_val; + xmlDocPtr doc; /* the document */ + int n_doc; + xmlChar * content; /* the text content */ + int n_content; + int len; /* the text len. */ + int n_len; + + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) { + for (n_len = 0;n_len < gen_nb_int;n_len++) { + mem_base = xmlMemBlocks(); + doc = gen_xmlDocPtr(n_doc, 0); + content = gen_const_xmlChar_ptr(n_content, 1); + len = gen_int(n_len, 2); + + ret_val = xmlNewDocTextLen(doc, (const xmlChar *)content, len); + desret_xmlNodePtr(ret_val); + call_tests++; + des_xmlDocPtr(n_doc, doc, 0); + des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 1); + des_int(n_len, len, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNewDocTextLen", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf(" %d", n_content); + printf(" %d", n_len); + printf("\n"); + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlNewDtd(void) { + int test_ret = 0; + + int mem_base; + xmlDtdPtr ret_val; + xmlDocPtr doc; /* the document pointer */ + int n_doc; + xmlChar * name; /* the DTD name */ + int n_name; + xmlChar * ExternalID; /* the external ID */ + int n_ExternalID; + xmlChar * SystemID; /* the system ID */ + int n_SystemID; + + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_ExternalID = 0;n_ExternalID < gen_nb_const_xmlChar_ptr;n_ExternalID++) { + for (n_SystemID = 0;n_SystemID < gen_nb_const_xmlChar_ptr;n_SystemID++) { + mem_base = xmlMemBlocks(); + doc = gen_xmlDocPtr(n_doc, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + ExternalID = gen_const_xmlChar_ptr(n_ExternalID, 2); + SystemID = gen_const_xmlChar_ptr(n_SystemID, 3); + + ret_val = xmlNewDtd(doc, (const xmlChar *)name, (const xmlChar *)ExternalID, (const xmlChar *)SystemID); + desret_xmlDtdPtr(ret_val); + call_tests++; + des_xmlDocPtr(n_doc, doc, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + des_const_xmlChar_ptr(n_ExternalID, (const xmlChar *)ExternalID, 2); + des_const_xmlChar_ptr(n_SystemID, (const xmlChar *)SystemID, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNewDtd", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf(" %d", n_name); + printf(" %d", n_ExternalID); + printf(" %d", n_SystemID); + printf("\n"); + } + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlNewNode(void) { + int test_ret = 0; + + int mem_base; + xmlNodePtr ret_val; + xmlNsPtr ns; /* namespace if any */ + int n_ns; + xmlChar * name; /* the node name */ + int n_name; + + for (n_ns = 0;n_ns < gen_nb_xmlNsPtr;n_ns++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + mem_base = xmlMemBlocks(); + ns = gen_xmlNsPtr(n_ns, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + + ret_val = xmlNewNode(ns, (const xmlChar *)name); + desret_xmlNodePtr(ret_val); + call_tests++; + des_xmlNsPtr(n_ns, ns, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNewNode", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ns); + printf(" %d", n_name); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlNewNodeEatName(void) { + int test_ret = 0; + + int mem_base; + xmlNodePtr ret_val; + xmlNsPtr ns; /* namespace if any */ + int n_ns; + xmlChar * name; /* the node name */ + int n_name; + + for (n_ns = 0;n_ns < gen_nb_xmlNsPtr;n_ns++) { + for (n_name = 0;n_name < gen_nb_eaten_name;n_name++) { + mem_base = xmlMemBlocks(); + ns = gen_xmlNsPtr(n_ns, 0); + name = gen_eaten_name(n_name, 1); + + ret_val = xmlNewNodeEatName(ns, name); + desret_xmlNodePtr(ret_val); + call_tests++; + des_xmlNsPtr(n_ns, ns, 0); + des_eaten_name(n_name, name, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNewNodeEatName", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ns); + printf(" %d", n_name); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlNewNs(void) { + int test_ret = 0; + + int mem_base; + xmlNsPtr ret_val; + xmlNodePtr node; /* the element carrying the namespace */ + int n_node; + xmlChar * href; /* the URI associated */ + int n_href; + xmlChar * prefix; /* the prefix for the namespace */ + int n_prefix; + + for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) { + for (n_href = 0;n_href < gen_nb_const_xmlChar_ptr;n_href++) { + for (n_prefix = 0;n_prefix < gen_nb_const_xmlChar_ptr;n_prefix++) { + mem_base = xmlMemBlocks(); + node = gen_xmlNodePtr(n_node, 0); + href = gen_const_xmlChar_ptr(n_href, 1); + prefix = gen_const_xmlChar_ptr(n_prefix, 2); + + ret_val = xmlNewNs(node, (const xmlChar *)href, (const xmlChar *)prefix); + if ((node == NULL) && (ret_val != NULL)) xmlFreeNs(ret_val); + desret_xmlNsPtr(ret_val); + call_tests++; + des_xmlNodePtr(n_node, node, 0); + des_const_xmlChar_ptr(n_href, (const xmlChar *)href, 1); + des_const_xmlChar_ptr(n_prefix, (const xmlChar *)prefix, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNewNs", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_node); + printf(" %d", n_href); + printf(" %d", n_prefix); + printf("\n"); + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlNewNsProp(void) { + int test_ret = 0; + + int mem_base; + xmlAttrPtr ret_val; + xmlNodePtr node; /* the holding node */ + int n_node; + xmlNsPtr ns; /* the namespace */ + int n_ns; + xmlChar * name; /* the name of the attribute */ + int n_name; + xmlChar * value; /* the value of the attribute */ + int n_value; + + for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) { + for (n_ns = 0;n_ns < gen_nb_xmlNsPtr;n_ns++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) { + mem_base = xmlMemBlocks(); + node = gen_xmlNodePtr(n_node, 0); + ns = gen_xmlNsPtr(n_ns, 1); + name = gen_const_xmlChar_ptr(n_name, 2); + value = gen_const_xmlChar_ptr(n_value, 3); + + ret_val = xmlNewNsProp(node, ns, (const xmlChar *)name, (const xmlChar *)value); + desret_xmlAttrPtr(ret_val); + call_tests++; + des_xmlNodePtr(n_node, node, 0); + des_xmlNsPtr(n_ns, ns, 1); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 2); + des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNewNsProp", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_node); + printf(" %d", n_ns); + printf(" %d", n_name); + printf(" %d", n_value); + printf("\n"); + } + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlNewNsPropEatName(void) { + int test_ret = 0; + + int mem_base; + xmlAttrPtr ret_val; + xmlNodePtr node; /* the holding node */ + int n_node; + xmlNsPtr ns; /* the namespace */ + int n_ns; + xmlChar * name; /* the name of the attribute */ + int n_name; + xmlChar * value; /* the value of the attribute */ + int n_value; + + for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) { + for (n_ns = 0;n_ns < gen_nb_xmlNsPtr;n_ns++) { + for (n_name = 0;n_name < gen_nb_eaten_name;n_name++) { + for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) { + mem_base = xmlMemBlocks(); + node = gen_xmlNodePtr(n_node, 0); + ns = gen_xmlNsPtr(n_ns, 1); + name = gen_eaten_name(n_name, 2); + value = gen_const_xmlChar_ptr(n_value, 3); + + ret_val = xmlNewNsPropEatName(node, ns, name, (const xmlChar *)value); + desret_xmlAttrPtr(ret_val); + call_tests++; + des_xmlNodePtr(n_node, node, 0); + des_xmlNsPtr(n_ns, ns, 1); + des_eaten_name(n_name, name, 2); + des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNewNsPropEatName", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_node); + printf(" %d", n_ns); + printf(" %d", n_name); + printf(" %d", n_value); + printf("\n"); + } + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlNewPI(void) { + int test_ret = 0; + + int mem_base; + xmlNodePtr ret_val; + xmlChar * name; /* the processing instruction name */ + int n_name; + xmlChar * content; /* the PI content */ + int n_content; + + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) { + mem_base = xmlMemBlocks(); + name = gen_const_xmlChar_ptr(n_name, 0); + content = gen_const_xmlChar_ptr(n_content, 1); + + ret_val = xmlNewPI((const xmlChar *)name, (const xmlChar *)content); + desret_xmlNodePtr(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 0); + des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNewPI", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_name); + printf(" %d", n_content); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlNewProp(void) { + int test_ret = 0; + +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) +#ifdef LIBXML_TREE_ENABLED + int mem_base; + xmlAttrPtr ret_val; + xmlNodePtr node; /* the holding node */ + int n_node; + xmlChar * name; /* the name of the attribute */ + int n_name; + xmlChar * value; /* the value of the attribute */ + int n_value; + + for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) { + mem_base = xmlMemBlocks(); + node = gen_xmlNodePtr(n_node, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + value = gen_const_xmlChar_ptr(n_value, 2); + + ret_val = xmlNewProp(node, (const xmlChar *)name, (const xmlChar *)value); + desret_xmlAttrPtr(ret_val); + call_tests++; + des_xmlNodePtr(n_node, node, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNewProp", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_node); + printf(" %d", n_name); + printf(" %d", n_value); + printf("\n"); + } + } + } + } + function_tests++; +#endif +#endif + + return(test_ret); +} + + +static int +test_xmlNewReference(void) { + int test_ret = 0; + + int mem_base; + xmlNodePtr ret_val; + xmlDoc * doc; /* the document */ + int n_doc; + xmlChar * name; /* the reference name, or the reference string with & and ; */ + int n_name; + + for (n_doc = 0;n_doc < gen_nb_const_xmlDoc_ptr;n_doc++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + mem_base = xmlMemBlocks(); + doc = gen_const_xmlDoc_ptr(n_doc, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + + ret_val = xmlNewReference((const xmlDoc *)doc, (const xmlChar *)name); + desret_xmlNodePtr(ret_val); + call_tests++; + des_const_xmlDoc_ptr(n_doc, (const xmlDoc *)doc, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNewReference", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf(" %d", n_name); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlNewText(void) { + int test_ret = 0; + + int mem_base; + xmlNodePtr ret_val; + xmlChar * content; /* the text content */ + int n_content; + + for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) { + mem_base = xmlMemBlocks(); + content = gen_const_xmlChar_ptr(n_content, 0); + + ret_val = xmlNewText((const xmlChar *)content); + desret_xmlNodePtr(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNewText", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_content); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlNewTextChild(void) { + int test_ret = 0; + +#if defined(LIBXML_TREE_ENABLED) +#ifdef LIBXML_TREE_ENABLED + int mem_base; + xmlNodePtr ret_val; + xmlNodePtr parent; /* the parent node */ + int n_parent; + xmlNsPtr ns; /* a namespace if any */ + int n_ns; + xmlChar * name; /* the name of the child */ + int n_name; + xmlChar * content; /* the text content of the child if any. */ + int n_content; + + for (n_parent = 0;n_parent < gen_nb_xmlNodePtr;n_parent++) { + for (n_ns = 0;n_ns < gen_nb_xmlNsPtr;n_ns++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) { + mem_base = xmlMemBlocks(); + parent = gen_xmlNodePtr(n_parent, 0); + ns = gen_xmlNsPtr(n_ns, 1); + name = gen_const_xmlChar_ptr(n_name, 2); + content = gen_const_xmlChar_ptr(n_content, 3); + + ret_val = xmlNewTextChild(parent, ns, (const xmlChar *)name, (const xmlChar *)content); + desret_xmlNodePtr(ret_val); + call_tests++; + des_xmlNodePtr(n_parent, parent, 0); + des_xmlNsPtr(n_ns, ns, 1); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 2); + des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNewTextChild", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_parent); + printf(" %d", n_ns); + printf(" %d", n_name); + printf(" %d", n_content); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif +#endif + + return(test_ret); +} + + +static int +test_xmlNewTextLen(void) { + int test_ret = 0; + + int mem_base; + xmlNodePtr ret_val; + xmlChar * content; /* the text content */ + int n_content; + int len; /* the text len. */ + int n_len; + + for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) { + for (n_len = 0;n_len < gen_nb_int;n_len++) { + mem_base = xmlMemBlocks(); + content = gen_const_xmlChar_ptr(n_content, 0); + len = gen_int(n_len, 1); + + ret_val = xmlNewTextLen((const xmlChar *)content, len); + desret_xmlNodePtr(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 0); + des_int(n_len, len, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNewTextLen", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_content); + printf(" %d", n_len); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlNextElementSibling(void) { + int test_ret = 0; + +#if defined(LIBXML_TREE_ENABLED) + int mem_base; + xmlNodePtr ret_val; + xmlNodePtr node; /* the current node */ + int n_node; + + for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) { + mem_base = xmlMemBlocks(); + node = gen_xmlNodePtr(n_node, 0); + + ret_val = xmlNextElementSibling(node); + desret_xmlNodePtr(ret_val); + call_tests++; + des_xmlNodePtr(n_node, node, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNextElementSibling", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_node); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlNodeAddContent(void) { + int test_ret = 0; + + int mem_base; + xmlNodePtr cur; /* the node being modified */ + int n_cur; + xmlChar * content; /* extra content */ + int n_content; + + for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) { + for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) { + mem_base = xmlMemBlocks(); + cur = gen_xmlNodePtr(n_cur, 0); + content = gen_const_xmlChar_ptr(n_content, 1); + + xmlNodeAddContent(cur, (const xmlChar *)content); + call_tests++; + des_xmlNodePtr(n_cur, cur, 0); + des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNodeAddContent", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_cur); + printf(" %d", n_content); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlNodeAddContentLen(void) { + int test_ret = 0; + + int mem_base; + xmlNodePtr cur; /* the node being modified */ + int n_cur; + xmlChar * content; /* extra content */ + int n_content; + int len; /* the size of @content */ + int n_len; + + for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) { + for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) { + for (n_len = 0;n_len < gen_nb_int;n_len++) { + mem_base = xmlMemBlocks(); + cur = gen_xmlNodePtr(n_cur, 0); + content = gen_const_xmlChar_ptr(n_content, 1); + len = gen_int(n_len, 2); + + xmlNodeAddContentLen(cur, (const xmlChar *)content, len); + call_tests++; + des_xmlNodePtr(n_cur, cur, 0); + des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 1); + des_int(n_len, len, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNodeAddContentLen", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_cur); + printf(" %d", n_content); + printf(" %d", n_len); + printf("\n"); + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlNodeBufGetContent(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlBufferPtr buffer; /* a buffer */ + int n_buffer; + xmlNode * cur; /* the node being read */ + int n_cur; + + for (n_buffer = 0;n_buffer < gen_nb_xmlBufferPtr;n_buffer++) { + for (n_cur = 0;n_cur < gen_nb_const_xmlNode_ptr;n_cur++) { + mem_base = xmlMemBlocks(); + buffer = gen_xmlBufferPtr(n_buffer, 0); + cur = gen_const_xmlNode_ptr(n_cur, 1); + + ret_val = xmlNodeBufGetContent(buffer, (const xmlNode *)cur); + desret_int(ret_val); + call_tests++; + des_xmlBufferPtr(n_buffer, buffer, 0); + des_const_xmlNode_ptr(n_cur, (const xmlNode *)cur, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNodeBufGetContent", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_buffer); + printf(" %d", n_cur); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlNodeDump(void) { + int test_ret = 0; + +#if defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + int ret_val; + xmlBufferPtr buf; /* the XML buffer output */ + int n_buf; + xmlDocPtr doc; /* the document */ + int n_doc; + xmlNodePtr cur; /* the current node */ + int n_cur; + int level; /* the imbrication level for indenting */ + int n_level; + int format; /* is formatting allowed */ + int n_format; + + for (n_buf = 0;n_buf < gen_nb_xmlBufferPtr;n_buf++) { + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) { + for (n_level = 0;n_level < gen_nb_int;n_level++) { + for (n_format = 0;n_format < gen_nb_int;n_format++) { + mem_base = xmlMemBlocks(); + buf = gen_xmlBufferPtr(n_buf, 0); + doc = gen_xmlDocPtr(n_doc, 1); + cur = gen_xmlNodePtr(n_cur, 2); + level = gen_int(n_level, 3); + format = gen_int(n_format, 4); + + ret_val = xmlNodeDump(buf, doc, cur, level, format); + desret_int(ret_val); + call_tests++; + des_xmlBufferPtr(n_buf, buf, 0); + des_xmlDocPtr(n_doc, doc, 1); + des_xmlNodePtr(n_cur, cur, 2); + des_int(n_level, level, 3); + des_int(n_format, format, 4); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNodeDump", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_buf); + printf(" %d", n_doc); + printf(" %d", n_cur); + printf(" %d", n_level); + printf(" %d", n_format); + printf("\n"); + } + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlNodeDumpOutput(void) { + int test_ret = 0; + +#if defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + xmlOutputBufferPtr buf; /* the XML buffer output */ + int n_buf; + xmlDocPtr doc; /* the document */ + int n_doc; + xmlNodePtr cur; /* the current node */ + int n_cur; + int level; /* the imbrication level for indenting */ + int n_level; + int format; /* is formatting allowed */ + int n_format; + char * encoding; /* an optional encoding string */ + int n_encoding; + + for (n_buf = 0;n_buf < gen_nb_xmlOutputBufferPtr;n_buf++) { + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) { + for (n_level = 0;n_level < gen_nb_int;n_level++) { + for (n_format = 0;n_format < gen_nb_int;n_format++) { + for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) { + mem_base = xmlMemBlocks(); + buf = gen_xmlOutputBufferPtr(n_buf, 0); + doc = gen_xmlDocPtr(n_doc, 1); + cur = gen_xmlNodePtr(n_cur, 2); + level = gen_int(n_level, 3); + format = gen_int(n_format, 4); + encoding = gen_const_char_ptr(n_encoding, 5); + + xmlNodeDumpOutput(buf, doc, cur, level, format, (const char *)encoding); + call_tests++; + des_xmlOutputBufferPtr(n_buf, buf, 0); + des_xmlDocPtr(n_doc, doc, 1); + des_xmlNodePtr(n_cur, cur, 2); + des_int(n_level, level, 3); + des_int(n_format, format, 4); + des_const_char_ptr(n_encoding, (const char *)encoding, 5); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNodeDumpOutput", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_buf); + printf(" %d", n_doc); + printf(" %d", n_cur); + printf(" %d", n_level); + printf(" %d", n_format); + printf(" %d", n_encoding); + printf("\n"); + } + } + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlNodeGetBase(void) { + int test_ret = 0; + + int mem_base; + xmlChar * ret_val; + xmlDoc * doc; /* the document the node pertains to */ + int n_doc; + xmlNode * cur; /* the node being checked */ + int n_cur; + + for (n_doc = 0;n_doc < gen_nb_const_xmlDoc_ptr;n_doc++) { + for (n_cur = 0;n_cur < gen_nb_const_xmlNode_ptr;n_cur++) { + mem_base = xmlMemBlocks(); + doc = gen_const_xmlDoc_ptr(n_doc, 0); + cur = gen_const_xmlNode_ptr(n_cur, 1); + + ret_val = xmlNodeGetBase((const xmlDoc *)doc, (const xmlNode *)cur); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_const_xmlDoc_ptr(n_doc, (const xmlDoc *)doc, 0); + des_const_xmlNode_ptr(n_cur, (const xmlNode *)cur, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNodeGetBase", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf(" %d", n_cur); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlNodeGetContent(void) { + int test_ret = 0; + + int mem_base; + xmlChar * ret_val; + xmlNode * cur; /* the node being read */ + int n_cur; + + for (n_cur = 0;n_cur < gen_nb_const_xmlNode_ptr;n_cur++) { + mem_base = xmlMemBlocks(); + cur = gen_const_xmlNode_ptr(n_cur, 0); + + ret_val = xmlNodeGetContent((const xmlNode *)cur); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_const_xmlNode_ptr(n_cur, (const xmlNode *)cur, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNodeGetContent", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_cur); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlNodeGetLang(void) { + int test_ret = 0; + + int mem_base; + xmlChar * ret_val; + xmlNode * cur; /* the node being checked */ + int n_cur; + + for (n_cur = 0;n_cur < gen_nb_const_xmlNode_ptr;n_cur++) { + mem_base = xmlMemBlocks(); + cur = gen_const_xmlNode_ptr(n_cur, 0); + + ret_val = xmlNodeGetLang((const xmlNode *)cur); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_const_xmlNode_ptr(n_cur, (const xmlNode *)cur, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNodeGetLang", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_cur); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlNodeGetSpacePreserve(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlNode * cur; /* the node being checked */ + int n_cur; + + for (n_cur = 0;n_cur < gen_nb_const_xmlNode_ptr;n_cur++) { + mem_base = xmlMemBlocks(); + cur = gen_const_xmlNode_ptr(n_cur, 0); + + ret_val = xmlNodeGetSpacePreserve((const xmlNode *)cur); + desret_int(ret_val); + call_tests++; + des_const_xmlNode_ptr(n_cur, (const xmlNode *)cur, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNodeGetSpacePreserve", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_cur); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlNodeIsText(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlNode * node; /* the node */ + int n_node; + + for (n_node = 0;n_node < gen_nb_const_xmlNode_ptr;n_node++) { + mem_base = xmlMemBlocks(); + node = gen_const_xmlNode_ptr(n_node, 0); + + ret_val = xmlNodeIsText((const xmlNode *)node); + desret_int(ret_val); + call_tests++; + des_const_xmlNode_ptr(n_node, (const xmlNode *)node, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNodeIsText", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_node); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlNodeListGetRawString(void) { + int test_ret = 0; + +#if defined(LIBXML_TREE_ENABLED) + int mem_base; + xmlChar * ret_val; + xmlDoc * doc; /* the document */ + int n_doc; + xmlNode * list; /* a Node list */ + int n_list; + int inLine; /* should we replace entity contents or show their external form */ + int n_inLine; + + for (n_doc = 0;n_doc < gen_nb_const_xmlDoc_ptr;n_doc++) { + for (n_list = 0;n_list < gen_nb_const_xmlNode_ptr;n_list++) { + for (n_inLine = 0;n_inLine < gen_nb_int;n_inLine++) { + mem_base = xmlMemBlocks(); + doc = gen_const_xmlDoc_ptr(n_doc, 0); + list = gen_const_xmlNode_ptr(n_list, 1); + inLine = gen_int(n_inLine, 2); + + ret_val = xmlNodeListGetRawString((const xmlDoc *)doc, (const xmlNode *)list, inLine); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_const_xmlDoc_ptr(n_doc, (const xmlDoc *)doc, 0); + des_const_xmlNode_ptr(n_list, (const xmlNode *)list, 1); + des_int(n_inLine, inLine, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNodeListGetRawString", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf(" %d", n_list); + printf(" %d", n_inLine); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlNodeListGetString(void) { + int test_ret = 0; + + int mem_base; + xmlChar * ret_val; + xmlDocPtr doc; /* the document */ + int n_doc; + xmlNode * list; /* a Node list */ + int n_list; + int inLine; /* should we replace entity contents or show their external form */ + int n_inLine; + + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_list = 0;n_list < gen_nb_const_xmlNode_ptr;n_list++) { + for (n_inLine = 0;n_inLine < gen_nb_int;n_inLine++) { + mem_base = xmlMemBlocks(); + doc = gen_xmlDocPtr(n_doc, 0); + list = gen_const_xmlNode_ptr(n_list, 1); + inLine = gen_int(n_inLine, 2); + + ret_val = xmlNodeListGetString(doc, (const xmlNode *)list, inLine); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_xmlDocPtr(n_doc, doc, 0); + des_const_xmlNode_ptr(n_list, (const xmlNode *)list, 1); + des_int(n_inLine, inLine, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNodeListGetString", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf(" %d", n_list); + printf(" %d", n_inLine); + printf("\n"); + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlNodeSetBase(void) { + int test_ret = 0; + +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) + int mem_base; + xmlNodePtr cur; /* the node being changed */ + int n_cur; + xmlChar * uri; /* the new base URI */ + int n_uri; + + for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) { + for (n_uri = 0;n_uri < gen_nb_const_xmlChar_ptr;n_uri++) { + mem_base = xmlMemBlocks(); + cur = gen_xmlNodePtr(n_cur, 0); + uri = gen_const_xmlChar_ptr(n_uri, 1); + + xmlNodeSetBase(cur, (const xmlChar *)uri); + call_tests++; + des_xmlNodePtr(n_cur, cur, 0); + des_const_xmlChar_ptr(n_uri, (const xmlChar *)uri, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNodeSetBase", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_cur); + printf(" %d", n_uri); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlNodeSetContent(void) { + int test_ret = 0; + + int mem_base; + xmlNodePtr cur; /* the node being modified */ + int n_cur; + xmlChar * content; /* the new value of the content */ + int n_content; + + for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) { + for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) { + mem_base = xmlMemBlocks(); + cur = gen_xmlNodePtr(n_cur, 0); + content = gen_const_xmlChar_ptr(n_content, 1); + + xmlNodeSetContent(cur, (const xmlChar *)content); + call_tests++; + des_xmlNodePtr(n_cur, cur, 0); + des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNodeSetContent", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_cur); + printf(" %d", n_content); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlNodeSetContentLen(void) { + int test_ret = 0; + +#if defined(LIBXML_TREE_ENABLED) + int mem_base; + xmlNodePtr cur; /* the node being modified */ + int n_cur; + xmlChar * content; /* the new value of the content */ + int n_content; + int len; /* the size of @content */ + int n_len; + + for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) { + for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) { + for (n_len = 0;n_len < gen_nb_int;n_len++) { + mem_base = xmlMemBlocks(); + cur = gen_xmlNodePtr(n_cur, 0); + content = gen_const_xmlChar_ptr(n_content, 1); + len = gen_int(n_len, 2); + + xmlNodeSetContentLen(cur, (const xmlChar *)content, len); + call_tests++; + des_xmlNodePtr(n_cur, cur, 0); + des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 1); + des_int(n_len, len, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNodeSetContentLen", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_cur); + printf(" %d", n_content); + printf(" %d", n_len); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlNodeSetLang(void) { + int test_ret = 0; + +#if defined(LIBXML_TREE_ENABLED) + int mem_base; + xmlNodePtr cur; /* the node being changed */ + int n_cur; + xmlChar * lang; /* the language description */ + int n_lang; + + for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) { + for (n_lang = 0;n_lang < gen_nb_const_xmlChar_ptr;n_lang++) { + mem_base = xmlMemBlocks(); + cur = gen_xmlNodePtr(n_cur, 0); + lang = gen_const_xmlChar_ptr(n_lang, 1); + + xmlNodeSetLang(cur, (const xmlChar *)lang); + call_tests++; + des_xmlNodePtr(n_cur, cur, 0); + des_const_xmlChar_ptr(n_lang, (const xmlChar *)lang, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNodeSetLang", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_cur); + printf(" %d", n_lang); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlNodeSetName(void) { + int test_ret = 0; + +#if defined(LIBXML_TREE_ENABLED) + int mem_base; + xmlNodePtr cur; /* the node being changed */ + int n_cur; + xmlChar * name; /* the new tag name */ + int n_name; + + for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + mem_base = xmlMemBlocks(); + cur = gen_xmlNodePtr(n_cur, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + + xmlNodeSetName(cur, (const xmlChar *)name); + call_tests++; + des_xmlNodePtr(n_cur, cur, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNodeSetName", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_cur); + printf(" %d", n_name); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlNodeSetSpacePreserve(void) { + int test_ret = 0; + +#if defined(LIBXML_TREE_ENABLED) + int mem_base; + xmlNodePtr cur; /* the node being changed */ + int n_cur; + int val; /* the xml:space value ("0": default, 1: "preserve") */ + int n_val; + + for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) { + for (n_val = 0;n_val < gen_nb_int;n_val++) { + mem_base = xmlMemBlocks(); + cur = gen_xmlNodePtr(n_cur, 0); + val = gen_int(n_val, 1); + + xmlNodeSetSpacePreserve(cur, val); + call_tests++; + des_xmlNodePtr(n_cur, cur, 0); + des_int(n_val, val, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNodeSetSpacePreserve", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_cur); + printf(" %d", n_val); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlPreviousElementSibling(void) { + int test_ret = 0; + +#if defined(LIBXML_TREE_ENABLED) + int mem_base; + xmlNodePtr ret_val; + xmlNodePtr node; /* the current node */ + int n_node; + + for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) { + mem_base = xmlMemBlocks(); + node = gen_xmlNodePtr(n_node, 0); + + ret_val = xmlPreviousElementSibling(node); + desret_xmlNodePtr(ret_val); + call_tests++; + des_xmlNodePtr(n_node, node, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlPreviousElementSibling", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_node); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlReconciliateNs(void) { + int test_ret = 0; + +#if defined(LIBXML_TREE_ENABLED) +#ifdef LIBXML_TREE_ENABLED + int mem_base; + int ret_val; + xmlDocPtr doc; /* the document */ + int n_doc; + xmlNodePtr tree; /* a node defining the subtree to reconciliate */ + int n_tree; + + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_tree = 0;n_tree < gen_nb_xmlNodePtr;n_tree++) { + mem_base = xmlMemBlocks(); + doc = gen_xmlDocPtr(n_doc, 0); + tree = gen_xmlNodePtr(n_tree, 1); + + ret_val = xmlReconciliateNs(doc, tree); + desret_int(ret_val); + call_tests++; + des_xmlDocPtr(n_doc, doc, 0); + des_xmlNodePtr(n_tree, tree, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlReconciliateNs", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf(" %d", n_tree); + printf("\n"); + } + } + } + function_tests++; +#endif +#endif + + return(test_ret); +} + + +static int +test_xmlRemoveProp(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlAttrPtr cur; /* an attribute */ + int n_cur; + + for (n_cur = 0;n_cur < gen_nb_xmlAttrPtr;n_cur++) { + mem_base = xmlMemBlocks(); + cur = gen_xmlAttrPtr(n_cur, 0); + + ret_val = xmlRemoveProp(cur); + cur = NULL; + desret_int(ret_val); + call_tests++; + des_xmlAttrPtr(n_cur, cur, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlRemoveProp", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_cur); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlReplaceNode(void) { + int test_ret = 0; + +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_WRITER_ENABLED) + int mem_base; + xmlNodePtr ret_val; + xmlNodePtr old; /* the old node */ + int n_old; + xmlNodePtr cur; /* the node */ + int n_cur; + + for (n_old = 0;n_old < gen_nb_xmlNodePtr;n_old++) { + for (n_cur = 0;n_cur < gen_nb_xmlNodePtr_in;n_cur++) { + mem_base = xmlMemBlocks(); + old = gen_xmlNodePtr(n_old, 0); + cur = gen_xmlNodePtr_in(n_cur, 1); + + ret_val = xmlReplaceNode(old, cur); + if (cur != NULL) { + xmlUnlinkNode(cur); + xmlFreeNode(cur) ; cur = NULL ; } + if (old != NULL) { + xmlUnlinkNode(old); + xmlFreeNode(old) ; old = NULL ; } + ret_val = NULL; + desret_xmlNodePtr(ret_val); + call_tests++; + des_xmlNodePtr(n_old, old, 0); + des_xmlNodePtr_in(n_cur, cur, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlReplaceNode", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_old); + printf(" %d", n_cur); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlSaveFile(void) { + int test_ret = 0; + +#if defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + int ret_val; + const char * filename; /* the filename (or URL) */ + int n_filename; + xmlDocPtr cur; /* the document */ + int n_cur; + + for (n_filename = 0;n_filename < gen_nb_fileoutput;n_filename++) { + for (n_cur = 0;n_cur < gen_nb_xmlDocPtr;n_cur++) { + mem_base = xmlMemBlocks(); + filename = gen_fileoutput(n_filename, 0); + cur = gen_xmlDocPtr(n_cur, 1); + + ret_val = xmlSaveFile(filename, cur); + desret_int(ret_val); + call_tests++; + des_fileoutput(n_filename, filename, 0); + des_xmlDocPtr(n_cur, cur, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSaveFile", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_filename); + printf(" %d", n_cur); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlSaveFileEnc(void) { + int test_ret = 0; + +#if defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + int ret_val; + const char * filename; /* the filename (or URL) */ + int n_filename; + xmlDocPtr cur; /* the document */ + int n_cur; + char * encoding; /* the name of an encoding (or NULL) */ + int n_encoding; + + for (n_filename = 0;n_filename < gen_nb_fileoutput;n_filename++) { + for (n_cur = 0;n_cur < gen_nb_xmlDocPtr;n_cur++) { + for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) { + mem_base = xmlMemBlocks(); + filename = gen_fileoutput(n_filename, 0); + cur = gen_xmlDocPtr(n_cur, 1); + encoding = gen_const_char_ptr(n_encoding, 2); + + ret_val = xmlSaveFileEnc(filename, cur, (const char *)encoding); + desret_int(ret_val); + call_tests++; + des_fileoutput(n_filename, filename, 0); + des_xmlDocPtr(n_cur, cur, 1); + des_const_char_ptr(n_encoding, (const char *)encoding, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSaveFileEnc", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_filename); + printf(" %d", n_cur); + printf(" %d", n_encoding); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlSaveFileTo(void) { + int test_ret = 0; + +#if defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + int ret_val; + xmlOutputBufferPtr buf; /* an output I/O buffer */ + int n_buf; + xmlDocPtr cur; /* the document */ + int n_cur; + char * encoding; /* the encoding if any assuming the I/O layer handles the trancoding */ + int n_encoding; + + for (n_buf = 0;n_buf < gen_nb_xmlOutputBufferPtr;n_buf++) { + for (n_cur = 0;n_cur < gen_nb_xmlDocPtr;n_cur++) { + for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) { + mem_base = xmlMemBlocks(); + buf = gen_xmlOutputBufferPtr(n_buf, 0); + cur = gen_xmlDocPtr(n_cur, 1); + encoding = gen_const_char_ptr(n_encoding, 2); + + ret_val = xmlSaveFileTo(buf, cur, (const char *)encoding); + buf = NULL; + desret_int(ret_val); + call_tests++; + des_xmlOutputBufferPtr(n_buf, buf, 0); + des_xmlDocPtr(n_cur, cur, 1); + des_const_char_ptr(n_encoding, (const char *)encoding, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSaveFileTo", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_buf); + printf(" %d", n_cur); + printf(" %d", n_encoding); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlSaveFormatFile(void) { + int test_ret = 0; + +#if defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + int ret_val; + const char * filename; /* the filename (or URL) */ + int n_filename; + xmlDocPtr cur; /* the document */ + int n_cur; + int format; /* should formatting spaces been added */ + int n_format; + + for (n_filename = 0;n_filename < gen_nb_fileoutput;n_filename++) { + for (n_cur = 0;n_cur < gen_nb_xmlDocPtr;n_cur++) { + for (n_format = 0;n_format < gen_nb_int;n_format++) { + mem_base = xmlMemBlocks(); + filename = gen_fileoutput(n_filename, 0); + cur = gen_xmlDocPtr(n_cur, 1); + format = gen_int(n_format, 2); + + ret_val = xmlSaveFormatFile(filename, cur, format); + desret_int(ret_val); + call_tests++; + des_fileoutput(n_filename, filename, 0); + des_xmlDocPtr(n_cur, cur, 1); + des_int(n_format, format, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSaveFormatFile", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_filename); + printf(" %d", n_cur); + printf(" %d", n_format); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlSaveFormatFileEnc(void) { + int test_ret = 0; + +#if defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + int ret_val; + const char * filename; /* the filename or URL to output */ + int n_filename; + xmlDocPtr cur; /* the document being saved */ + int n_cur; + char * encoding; /* the name of the encoding to use or NULL. */ + int n_encoding; + int format; /* should formatting spaces be added. */ + int n_format; + + for (n_filename = 0;n_filename < gen_nb_fileoutput;n_filename++) { + for (n_cur = 0;n_cur < gen_nb_xmlDocPtr;n_cur++) { + for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) { + for (n_format = 0;n_format < gen_nb_int;n_format++) { + mem_base = xmlMemBlocks(); + filename = gen_fileoutput(n_filename, 0); + cur = gen_xmlDocPtr(n_cur, 1); + encoding = gen_const_char_ptr(n_encoding, 2); + format = gen_int(n_format, 3); + + ret_val = xmlSaveFormatFileEnc(filename, cur, (const char *)encoding, format); + desret_int(ret_val); + call_tests++; + des_fileoutput(n_filename, filename, 0); + des_xmlDocPtr(n_cur, cur, 1); + des_const_char_ptr(n_encoding, (const char *)encoding, 2); + des_int(n_format, format, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSaveFormatFileEnc", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_filename); + printf(" %d", n_cur); + printf(" %d", n_encoding); + printf(" %d", n_format); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlSaveFormatFileTo(void) { + int test_ret = 0; + +#if defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + int ret_val; + xmlOutputBufferPtr buf; /* an output I/O buffer */ + int n_buf; + xmlDocPtr cur; /* the document */ + int n_cur; + char * encoding; /* the encoding if any assuming the I/O layer handles the trancoding */ + int n_encoding; + int format; /* should formatting spaces been added */ + int n_format; + + for (n_buf = 0;n_buf < gen_nb_xmlOutputBufferPtr;n_buf++) { + for (n_cur = 0;n_cur < gen_nb_xmlDocPtr;n_cur++) { + for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) { + for (n_format = 0;n_format < gen_nb_int;n_format++) { + mem_base = xmlMemBlocks(); + buf = gen_xmlOutputBufferPtr(n_buf, 0); + cur = gen_xmlDocPtr(n_cur, 1); + encoding = gen_const_char_ptr(n_encoding, 2); + format = gen_int(n_format, 3); + + ret_val = xmlSaveFormatFileTo(buf, cur, (const char *)encoding, format); + buf = NULL; + desret_int(ret_val); + call_tests++; + des_xmlOutputBufferPtr(n_buf, buf, 0); + des_xmlDocPtr(n_cur, cur, 1); + des_const_char_ptr(n_encoding, (const char *)encoding, 2); + des_int(n_format, format, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSaveFormatFileTo", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_buf); + printf(" %d", n_cur); + printf(" %d", n_encoding); + printf(" %d", n_format); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlSearchNs(void) { + int test_ret = 0; + + int mem_base; + xmlNsPtr ret_val; + xmlDocPtr doc; /* the document */ + int n_doc; + xmlNodePtr node; /* the current node */ + int n_node; + xmlChar * nameSpace; /* the namespace prefix */ + int n_nameSpace; + + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) { + for (n_nameSpace = 0;n_nameSpace < gen_nb_const_xmlChar_ptr;n_nameSpace++) { + mem_base = xmlMemBlocks(); + doc = gen_xmlDocPtr(n_doc, 0); + node = gen_xmlNodePtr(n_node, 1); + nameSpace = gen_const_xmlChar_ptr(n_nameSpace, 2); + + ret_val = xmlSearchNs(doc, node, (const xmlChar *)nameSpace); + desret_xmlNsPtr(ret_val); + call_tests++; + des_xmlDocPtr(n_doc, doc, 0); + des_xmlNodePtr(n_node, node, 1); + des_const_xmlChar_ptr(n_nameSpace, (const xmlChar *)nameSpace, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSearchNs", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf(" %d", n_node); + printf(" %d", n_nameSpace); + printf("\n"); + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlSearchNsByHref(void) { + int test_ret = 0; + + int mem_base; + xmlNsPtr ret_val; + xmlDocPtr doc; /* the document */ + int n_doc; + xmlNodePtr node; /* the current node */ + int n_node; + xmlChar * href; /* the namespace value */ + int n_href; + + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) { + for (n_href = 0;n_href < gen_nb_const_xmlChar_ptr;n_href++) { + mem_base = xmlMemBlocks(); + doc = gen_xmlDocPtr(n_doc, 0); + node = gen_xmlNodePtr(n_node, 1); + href = gen_const_xmlChar_ptr(n_href, 2); + + ret_val = xmlSearchNsByHref(doc, node, (const xmlChar *)href); + desret_xmlNsPtr(ret_val); + call_tests++; + des_xmlDocPtr(n_doc, doc, 0); + des_xmlNodePtr(n_node, node, 1); + des_const_xmlChar_ptr(n_href, (const xmlChar *)href, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSearchNsByHref", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf(" %d", n_node); + printf(" %d", n_href); + printf("\n"); + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlSetBufferAllocationScheme(void) { + int test_ret = 0; + + int mem_base; + xmlBufferAllocationScheme scheme; /* allocation method to use */ + int n_scheme; + + for (n_scheme = 0;n_scheme < gen_nb_xmlBufferAllocationScheme;n_scheme++) { + mem_base = xmlMemBlocks(); + scheme = gen_xmlBufferAllocationScheme(n_scheme, 0); + + xmlSetBufferAllocationScheme(scheme); + call_tests++; + des_xmlBufferAllocationScheme(n_scheme, scheme, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSetBufferAllocationScheme", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_scheme); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlSetCompressMode(void) { + int test_ret = 0; + + int mem_base; + int mode; /* the compression ratio */ + int n_mode; + + for (n_mode = 0;n_mode < gen_nb_int;n_mode++) { + mem_base = xmlMemBlocks(); + mode = gen_int(n_mode, 0); + + xmlSetCompressMode(mode); + call_tests++; + des_int(n_mode, mode, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSetCompressMode", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_mode); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlSetDocCompressMode(void) { + int test_ret = 0; + + int mem_base; + xmlDocPtr doc; /* the document */ + int n_doc; + int mode; /* the compression ratio */ + int n_mode; + + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_mode = 0;n_mode < gen_nb_int;n_mode++) { + mem_base = xmlMemBlocks(); + doc = gen_xmlDocPtr(n_doc, 0); + mode = gen_int(n_mode, 1); + + xmlSetDocCompressMode(doc, mode); + call_tests++; + des_xmlDocPtr(n_doc, doc, 0); + des_int(n_mode, mode, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSetDocCompressMode", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf(" %d", n_mode); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlSetNs(void) { + int test_ret = 0; + + int mem_base; + xmlNodePtr node; /* a node in the document */ + int n_node; + xmlNsPtr ns; /* a namespace pointer */ + int n_ns; + + for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) { + for (n_ns = 0;n_ns < gen_nb_xmlNsPtr;n_ns++) { + mem_base = xmlMemBlocks(); + node = gen_xmlNodePtr(n_node, 0); + ns = gen_xmlNsPtr(n_ns, 1); + + xmlSetNs(node, ns); + call_tests++; + des_xmlNodePtr(n_node, node, 0); + des_xmlNsPtr(n_ns, ns, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSetNs", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_node); + printf(" %d", n_ns); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlSetNsProp(void) { + int test_ret = 0; + +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_HTML_ENABLED) + int mem_base; + xmlAttrPtr ret_val; + xmlNodePtr node; /* the node */ + int n_node; + xmlNsPtr ns; /* the namespace definition */ + int n_ns; + xmlChar * name; /* the attribute name */ + int n_name; + xmlChar * value; /* the attribute value */ + int n_value; + + for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) { + for (n_ns = 0;n_ns < gen_nb_xmlNsPtr;n_ns++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) { + mem_base = xmlMemBlocks(); + node = gen_xmlNodePtr(n_node, 0); + ns = gen_xmlNsPtr(n_ns, 1); + name = gen_const_xmlChar_ptr(n_name, 2); + value = gen_const_xmlChar_ptr(n_value, 3); + + ret_val = xmlSetNsProp(node, ns, (const xmlChar *)name, (const xmlChar *)value); + desret_xmlAttrPtr(ret_val); + call_tests++; + des_xmlNodePtr(n_node, node, 0); + des_xmlNsPtr(n_ns, ns, 1); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 2); + des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSetNsProp", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_node); + printf(" %d", n_ns); + printf(" %d", n_name); + printf(" %d", n_value); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlSetProp(void) { + int test_ret = 0; + +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_HTML_ENABLED) + int mem_base; + xmlAttrPtr ret_val; + xmlNodePtr node; /* the node */ + int n_node; + xmlChar * name; /* the attribute name (a QName) */ + int n_name; + xmlChar * value; /* the attribute value */ + int n_value; + + for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) { + mem_base = xmlMemBlocks(); + node = gen_xmlNodePtr(n_node, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + value = gen_const_xmlChar_ptr(n_value, 2); + + ret_val = xmlSetProp(node, (const xmlChar *)name, (const xmlChar *)value); + desret_xmlAttrPtr(ret_val); + call_tests++; + des_xmlNodePtr(n_node, node, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSetProp", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_node); + printf(" %d", n_name); + printf(" %d", n_value); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlSplitQName2(void) { + int test_ret = 0; + + int mem_base; + xmlChar * ret_val; + xmlChar * name; /* the full QName */ + int n_name; + xmlChar ** prefix; /* a xmlChar ** */ + int n_prefix; + + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_prefix = 0;n_prefix < gen_nb_xmlChar_ptr_ptr;n_prefix++) { + mem_base = xmlMemBlocks(); + name = gen_const_xmlChar_ptr(n_name, 0); + prefix = gen_xmlChar_ptr_ptr(n_prefix, 1); + + ret_val = xmlSplitQName2((const xmlChar *)name, prefix); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 0); + des_xmlChar_ptr_ptr(n_prefix, prefix, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSplitQName2", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_name); + printf(" %d", n_prefix); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlSplitQName3(void) { + int test_ret = 0; + + int mem_base; + const xmlChar * ret_val; + xmlChar * name; /* the full QName */ + int n_name; + int * len; /* an int * */ + int n_len; + + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_len = 0;n_len < gen_nb_int_ptr;n_len++) { + mem_base = xmlMemBlocks(); + name = gen_const_xmlChar_ptr(n_name, 0); + len = gen_int_ptr(n_len, 1); + + ret_val = xmlSplitQName3((const xmlChar *)name, len); + desret_const_xmlChar_ptr(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 0); + des_int_ptr(n_len, len, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSplitQName3", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_name); + printf(" %d", n_len); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlStringGetNodeList(void) { + int test_ret = 0; + + int mem_base; + xmlNodePtr ret_val; + xmlDoc * doc; /* the document */ + int n_doc; + xmlChar * value; /* the value of the attribute */ + int n_value; + + for (n_doc = 0;n_doc < gen_nb_const_xmlDoc_ptr;n_doc++) { + for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) { + mem_base = xmlMemBlocks(); + doc = gen_const_xmlDoc_ptr(n_doc, 0); + value = gen_const_xmlChar_ptr(n_value, 1); + + ret_val = xmlStringGetNodeList((const xmlDoc *)doc, (const xmlChar *)value); + desret_xmlNodePtr(ret_val); + call_tests++; + des_const_xmlDoc_ptr(n_doc, (const xmlDoc *)doc, 0); + des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlStringGetNodeList", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf(" %d", n_value); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlStringLenGetNodeList(void) { + int test_ret = 0; + + int mem_base; + xmlNodePtr ret_val; + xmlDoc * doc; /* the document */ + int n_doc; + xmlChar * value; /* the value of the text */ + int n_value; + int len; /* the length of the string value */ + int n_len; + + for (n_doc = 0;n_doc < gen_nb_const_xmlDoc_ptr;n_doc++) { + for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) { + for (n_len = 0;n_len < gen_nb_int;n_len++) { + mem_base = xmlMemBlocks(); + doc = gen_const_xmlDoc_ptr(n_doc, 0); + value = gen_const_xmlChar_ptr(n_value, 1); + len = gen_int(n_len, 2); + + ret_val = xmlStringLenGetNodeList((const xmlDoc *)doc, (const xmlChar *)value, len); + desret_xmlNodePtr(ret_val); + call_tests++; + des_const_xmlDoc_ptr(n_doc, (const xmlDoc *)doc, 0); + des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 1); + des_int(n_len, len, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlStringLenGetNodeList", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf(" %d", n_value); + printf(" %d", n_len); + printf("\n"); + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlTextConcat(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlNodePtr node; /* the node */ + int n_node; + xmlChar * content; /* the content */ + int n_content; + int len; /* @content length */ + int n_len; + + for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) { + for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) { + for (n_len = 0;n_len < gen_nb_int;n_len++) { + mem_base = xmlMemBlocks(); + node = gen_xmlNodePtr(n_node, 0); + content = gen_const_xmlChar_ptr(n_content, 1); + len = gen_int(n_len, 2); + + ret_val = xmlTextConcat(node, (const xmlChar *)content, len); + desret_int(ret_val); + call_tests++; + des_xmlNodePtr(n_node, node, 0); + des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 1); + des_int(n_len, len, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextConcat", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_node); + printf(" %d", n_content); + printf(" %d", n_len); + printf("\n"); + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlTextMerge(void) { + int test_ret = 0; + + int mem_base; + xmlNodePtr ret_val; + xmlNodePtr first; /* the first text node */ + int n_first; + xmlNodePtr second; /* the second text node being merged */ + int n_second; + + for (n_first = 0;n_first < gen_nb_xmlNodePtr_in;n_first++) { + for (n_second = 0;n_second < gen_nb_xmlNodePtr_in;n_second++) { + mem_base = xmlMemBlocks(); + first = gen_xmlNodePtr_in(n_first, 0); + second = gen_xmlNodePtr_in(n_second, 1); + + ret_val = xmlTextMerge(first, second); + if ((first != NULL) && (first->type != XML_TEXT_NODE)) { + xmlUnlinkNode(second); + xmlFreeNode(second) ; second = NULL ; } + desret_xmlNodePtr(ret_val); + call_tests++; + des_xmlNodePtr_in(n_first, first, 0); + des_xmlNodePtr_in(n_second, second, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextMerge", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_first); + printf(" %d", n_second); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlUnsetNsProp(void) { + int test_ret = 0; + +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + int ret_val; + xmlNodePtr node; /* the node */ + int n_node; + xmlNsPtr ns; /* the namespace definition */ + int n_ns; + xmlChar * name; /* the attribute name */ + int n_name; + + for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) { + for (n_ns = 0;n_ns < gen_nb_xmlNsPtr;n_ns++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + mem_base = xmlMemBlocks(); + node = gen_xmlNodePtr(n_node, 0); + ns = gen_xmlNsPtr(n_ns, 1); + name = gen_const_xmlChar_ptr(n_name, 2); + + ret_val = xmlUnsetNsProp(node, ns, (const xmlChar *)name); + desret_int(ret_val); + call_tests++; + des_xmlNodePtr(n_node, node, 0); + des_xmlNsPtr(n_ns, ns, 1); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUnsetNsProp", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_node); + printf(" %d", n_ns); + printf(" %d", n_name); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUnsetProp(void) { + int test_ret = 0; + +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + int ret_val; + xmlNodePtr node; /* the node */ + int n_node; + xmlChar * name; /* the attribute name */ + int n_name; + + for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + mem_base = xmlMemBlocks(); + node = gen_xmlNodePtr(n_node, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + + ret_val = xmlUnsetProp(node, (const xmlChar *)name); + desret_int(ret_val); + call_tests++; + des_xmlNodePtr(n_node, node, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUnsetProp", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_node); + printf(" %d", n_name); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlValidateNCName(void) { + int test_ret = 0; + +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_DEBUG_ENABLED) || defined (LIBXML_HTML_ENABLED) || defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED) || defined(LIBXML_LEGACY_ENABLED) +#ifdef LIBXML_TREE_ENABLED + int mem_base; + int ret_val; + xmlChar * value; /* the value to check */ + int n_value; + int space; /* allow spaces in front and end of the string */ + int n_space; + + for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) { + for (n_space = 0;n_space < gen_nb_int;n_space++) { + mem_base = xmlMemBlocks(); + value = gen_const_xmlChar_ptr(n_value, 0); + space = gen_int(n_space, 1); + + ret_val = xmlValidateNCName((const xmlChar *)value, space); + desret_int(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 0); + des_int(n_space, space, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlValidateNCName", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_value); + printf(" %d", n_space); + printf("\n"); + } + } + } + function_tests++; +#endif +#endif + + return(test_ret); +} + + +static int +test_xmlValidateNMToken(void) { + int test_ret = 0; + +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) +#ifdef LIBXML_TREE_ENABLED + int mem_base; + int ret_val; + xmlChar * value; /* the value to check */ + int n_value; + int space; /* allow spaces in front and end of the string */ + int n_space; + + for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) { + for (n_space = 0;n_space < gen_nb_int;n_space++) { + mem_base = xmlMemBlocks(); + value = gen_const_xmlChar_ptr(n_value, 0); + space = gen_int(n_space, 1); + + ret_val = xmlValidateNMToken((const xmlChar *)value, space); + desret_int(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 0); + des_int(n_space, space, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlValidateNMToken", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_value); + printf(" %d", n_space); + printf("\n"); + } + } + } + function_tests++; +#endif +#endif + + return(test_ret); +} + + +static int +test_xmlValidateName(void) { + int test_ret = 0; + +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) +#ifdef LIBXML_TREE_ENABLED + int mem_base; + int ret_val; + xmlChar * value; /* the value to check */ + int n_value; + int space; /* allow spaces in front and end of the string */ + int n_space; + + for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) { + for (n_space = 0;n_space < gen_nb_int;n_space++) { + mem_base = xmlMemBlocks(); + value = gen_const_xmlChar_ptr(n_value, 0); + space = gen_int(n_space, 1); + + ret_val = xmlValidateName((const xmlChar *)value, space); + desret_int(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 0); + des_int(n_space, space, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlValidateName", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_value); + printf(" %d", n_space); + printf("\n"); + } + } + } + function_tests++; +#endif +#endif + + return(test_ret); +} + + +static int +test_xmlValidateQName(void) { + int test_ret = 0; + +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) +#ifdef LIBXML_TREE_ENABLED + int mem_base; + int ret_val; + xmlChar * value; /* the value to check */ + int n_value; + int space; /* allow spaces in front and end of the string */ + int n_space; + + for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) { + for (n_space = 0;n_space < gen_nb_int;n_space++) { + mem_base = xmlMemBlocks(); + value = gen_const_xmlChar_ptr(n_value, 0); + space = gen_int(n_space, 1); + + ret_val = xmlValidateQName((const xmlChar *)value, space); + desret_int(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 0); + des_int(n_space, space, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlValidateQName", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_value); + printf(" %d", n_space); + printf("\n"); + } + } + } + function_tests++; +#endif +#endif + + return(test_ret); +} + +static int +test_tree(void) { + int test_ret = 0; + + if (quiet == 0) printf("Testing tree : 142 of 164 functions ...\n"); + test_ret += test_xmlAddChild(); + test_ret += test_xmlAddChildList(); + test_ret += test_xmlAddNextSibling(); + test_ret += test_xmlAddPrevSibling(); + test_ret += test_xmlAddSibling(); + test_ret += test_xmlAttrSerializeTxtContent(); + test_ret += test_xmlBufContent(); + test_ret += test_xmlBufEnd(); + test_ret += test_xmlBufGetNodeContent(); + test_ret += test_xmlBufNodeDump(); + test_ret += test_xmlBufShrink(); + test_ret += test_xmlBufUse(); + test_ret += test_xmlBufferAdd(); + test_ret += test_xmlBufferAddHead(); + test_ret += test_xmlBufferCCat(); + test_ret += test_xmlBufferCat(); + test_ret += test_xmlBufferContent(); + test_ret += test_xmlBufferCreate(); + test_ret += test_xmlBufferCreateSize(); + test_ret += test_xmlBufferCreateStatic(); + test_ret += test_xmlBufferDetach(); + test_ret += test_xmlBufferEmpty(); + test_ret += test_xmlBufferGrow(); + test_ret += test_xmlBufferLength(); + test_ret += test_xmlBufferResize(); + test_ret += test_xmlBufferSetAllocationScheme(); + test_ret += test_xmlBufferShrink(); + test_ret += test_xmlBufferWriteCHAR(); + test_ret += test_xmlBufferWriteChar(); + test_ret += test_xmlBufferWriteQuotedString(); + test_ret += test_xmlBuildQName(); + test_ret += test_xmlChildElementCount(); + test_ret += test_xmlCopyDoc(); + test_ret += test_xmlCopyDtd(); + test_ret += test_xmlCopyNamespace(); + test_ret += test_xmlCopyNamespaceList(); + test_ret += test_xmlCopyNode(); + test_ret += test_xmlCopyNodeList(); + test_ret += test_xmlCopyProp(); + test_ret += test_xmlCopyPropList(); + test_ret += test_xmlCreateIntSubset(); + test_ret += test_xmlDOMWrapAdoptNode(); + test_ret += test_xmlDOMWrapCloneNode(); + test_ret += test_xmlDOMWrapNewCtxt(); + test_ret += test_xmlDOMWrapReconcileNamespaces(); + test_ret += test_xmlDOMWrapRemoveNode(); + test_ret += test_xmlDocCopyNode(); + test_ret += test_xmlDocCopyNodeList(); + test_ret += test_xmlDocDump(); + test_ret += test_xmlDocDumpFormatMemory(); + test_ret += test_xmlDocDumpFormatMemoryEnc(); + test_ret += test_xmlDocDumpMemory(); + test_ret += test_xmlDocDumpMemoryEnc(); + test_ret += test_xmlDocFormatDump(); + test_ret += test_xmlDocGetRootElement(); + test_ret += test_xmlDocSetRootElement(); + test_ret += test_xmlElemDump(); + test_ret += test_xmlFirstElementChild(); + test_ret += test_xmlGetBufferAllocationScheme(); + test_ret += test_xmlGetCompressMode(); + test_ret += test_xmlGetDocCompressMode(); + test_ret += test_xmlGetIntSubset(); + test_ret += test_xmlGetLastChild(); + test_ret += test_xmlGetLineNo(); + test_ret += test_xmlGetNoNsProp(); + test_ret += test_xmlGetNodePath(); + test_ret += test_xmlGetNsList(); + test_ret += test_xmlGetNsProp(); + test_ret += test_xmlGetProp(); + test_ret += test_xmlHasNsProp(); + test_ret += test_xmlHasProp(); + test_ret += test_xmlIsBlankNode(); + test_ret += test_xmlIsXHTML(); + test_ret += test_xmlLastElementChild(); + test_ret += test_xmlNewCDataBlock(); + test_ret += test_xmlNewCharRef(); + test_ret += test_xmlNewChild(); + test_ret += test_xmlNewComment(); + test_ret += test_xmlNewDoc(); + test_ret += test_xmlNewDocComment(); + test_ret += test_xmlNewDocFragment(); + test_ret += test_xmlNewDocNode(); + test_ret += test_xmlNewDocNodeEatName(); + test_ret += test_xmlNewDocPI(); + test_ret += test_xmlNewDocProp(); + test_ret += test_xmlNewDocRawNode(); + test_ret += test_xmlNewDocText(); + test_ret += test_xmlNewDocTextLen(); + test_ret += test_xmlNewDtd(); + test_ret += test_xmlNewNode(); + test_ret += test_xmlNewNodeEatName(); + test_ret += test_xmlNewNs(); + test_ret += test_xmlNewNsProp(); + test_ret += test_xmlNewNsPropEatName(); + test_ret += test_xmlNewPI(); + test_ret += test_xmlNewProp(); + test_ret += test_xmlNewReference(); + test_ret += test_xmlNewText(); + test_ret += test_xmlNewTextChild(); + test_ret += test_xmlNewTextLen(); + test_ret += test_xmlNextElementSibling(); + test_ret += test_xmlNodeAddContent(); + test_ret += test_xmlNodeAddContentLen(); + test_ret += test_xmlNodeBufGetContent(); + test_ret += test_xmlNodeDump(); + test_ret += test_xmlNodeDumpOutput(); + test_ret += test_xmlNodeGetBase(); + test_ret += test_xmlNodeGetContent(); + test_ret += test_xmlNodeGetLang(); + test_ret += test_xmlNodeGetSpacePreserve(); + test_ret += test_xmlNodeIsText(); + test_ret += test_xmlNodeListGetRawString(); + test_ret += test_xmlNodeListGetString(); + test_ret += test_xmlNodeSetBase(); + test_ret += test_xmlNodeSetContent(); + test_ret += test_xmlNodeSetContentLen(); + test_ret += test_xmlNodeSetLang(); + test_ret += test_xmlNodeSetName(); + test_ret += test_xmlNodeSetSpacePreserve(); + test_ret += test_xmlPreviousElementSibling(); + test_ret += test_xmlReconciliateNs(); + test_ret += test_xmlRemoveProp(); + test_ret += test_xmlReplaceNode(); + test_ret += test_xmlSaveFile(); + test_ret += test_xmlSaveFileEnc(); + test_ret += test_xmlSaveFileTo(); + test_ret += test_xmlSaveFormatFile(); + test_ret += test_xmlSaveFormatFileEnc(); + test_ret += test_xmlSaveFormatFileTo(); + test_ret += test_xmlSearchNs(); + test_ret += test_xmlSearchNsByHref(); + test_ret += test_xmlSetBufferAllocationScheme(); + test_ret += test_xmlSetCompressMode(); + test_ret += test_xmlSetDocCompressMode(); + test_ret += test_xmlSetNs(); + test_ret += test_xmlSetNsProp(); + test_ret += test_xmlSetProp(); + test_ret += test_xmlSplitQName2(); + test_ret += test_xmlSplitQName3(); + test_ret += test_xmlStringGetNodeList(); + test_ret += test_xmlStringLenGetNodeList(); + test_ret += test_xmlTextConcat(); + test_ret += test_xmlTextMerge(); + test_ret += test_xmlUnsetNsProp(); + test_ret += test_xmlUnsetProp(); + test_ret += test_xmlValidateNCName(); + test_ret += test_xmlValidateNMToken(); + test_ret += test_xmlValidateName(); + test_ret += test_xmlValidateQName(); + + if (test_ret != 0) + printf("Module tree: %d errors\n", test_ret); + return(test_ret); +} + +static int +test_xmlBuildRelativeURI(void) { + int test_ret = 0; + + int mem_base; + xmlChar * ret_val; + xmlChar * URI; /* the URI reference under consideration */ + int n_URI; + xmlChar * base; /* the base value */ + int n_base; + + for (n_URI = 0;n_URI < gen_nb_const_xmlChar_ptr;n_URI++) { + for (n_base = 0;n_base < gen_nb_const_xmlChar_ptr;n_base++) { + mem_base = xmlMemBlocks(); + URI = gen_const_xmlChar_ptr(n_URI, 0); + base = gen_const_xmlChar_ptr(n_base, 1); + + ret_val = xmlBuildRelativeURI((const xmlChar *)URI, (const xmlChar *)base); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_URI, (const xmlChar *)URI, 0); + des_const_xmlChar_ptr(n_base, (const xmlChar *)base, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlBuildRelativeURI", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_URI); + printf(" %d", n_base); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlBuildURI(void) { + int test_ret = 0; + + int mem_base; + xmlChar * ret_val; + xmlChar * URI; /* the URI instance found in the document */ + int n_URI; + xmlChar * base; /* the base value */ + int n_base; + + for (n_URI = 0;n_URI < gen_nb_const_xmlChar_ptr;n_URI++) { + for (n_base = 0;n_base < gen_nb_const_xmlChar_ptr;n_base++) { + mem_base = xmlMemBlocks(); + URI = gen_const_xmlChar_ptr(n_URI, 0); + base = gen_const_xmlChar_ptr(n_base, 1); + + ret_val = xmlBuildURI((const xmlChar *)URI, (const xmlChar *)base); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_URI, (const xmlChar *)URI, 0); + des_const_xmlChar_ptr(n_base, (const xmlChar *)base, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlBuildURI", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_URI); + printf(" %d", n_base); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlCanonicPath(void) { + int test_ret = 0; + + int mem_base; + xmlChar * ret_val; + xmlChar * path; /* the resource locator in a filesystem notation */ + int n_path; + + for (n_path = 0;n_path < gen_nb_const_xmlChar_ptr;n_path++) { + mem_base = xmlMemBlocks(); + path = gen_const_xmlChar_ptr(n_path, 0); + + ret_val = xmlCanonicPath((const xmlChar *)path); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_path, (const xmlChar *)path, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlCanonicPath", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_path); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlCreateURI(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlNormalizeURIPath(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + char * path; /* pointer to the path string */ + int n_path; + + for (n_path = 0;n_path < gen_nb_char_ptr;n_path++) { + mem_base = xmlMemBlocks(); + path = gen_char_ptr(n_path, 0); + + ret_val = xmlNormalizeURIPath(path); + desret_int(ret_val); + call_tests++; + des_char_ptr(n_path, path, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNormalizeURIPath", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_path); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlParseURI(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlParseURIRaw(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +#define gen_nb_xmlURIPtr 1 +static xmlURIPtr gen_xmlURIPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlURIPtr(int no ATTRIBUTE_UNUSED, xmlURIPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +static int +test_xmlParseURIReference(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlURIPtr uri; /* pointer to an URI structure */ + int n_uri; + char * str; /* the string to analyze */ + int n_str; + + for (n_uri = 0;n_uri < gen_nb_xmlURIPtr;n_uri++) { + for (n_str = 0;n_str < gen_nb_const_char_ptr;n_str++) { + mem_base = xmlMemBlocks(); + uri = gen_xmlURIPtr(n_uri, 0); + str = gen_const_char_ptr(n_str, 1); + + ret_val = xmlParseURIReference(uri, (const char *)str); + desret_int(ret_val); + call_tests++; + des_xmlURIPtr(n_uri, uri, 0); + des_const_char_ptr(n_str, (const char *)str, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlParseURIReference", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_uri); + printf(" %d", n_str); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlPathToURI(void) { + int test_ret = 0; + + int mem_base; + xmlChar * ret_val; + xmlChar * path; /* the resource locator in a filesystem notation */ + int n_path; + + for (n_path = 0;n_path < gen_nb_const_xmlChar_ptr;n_path++) { + mem_base = xmlMemBlocks(); + path = gen_const_xmlChar_ptr(n_path, 0); + + ret_val = xmlPathToURI((const xmlChar *)path); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_path, (const xmlChar *)path, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlPathToURI", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_path); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlPrintURI(void) { + int test_ret = 0; + + int mem_base; + FILE * stream; /* a FILE* for the output */ + int n_stream; + xmlURIPtr uri; /* pointer to an xmlURI */ + int n_uri; + + for (n_stream = 0;n_stream < gen_nb_FILE_ptr;n_stream++) { + for (n_uri = 0;n_uri < gen_nb_xmlURIPtr;n_uri++) { + mem_base = xmlMemBlocks(); + stream = gen_FILE_ptr(n_stream, 0); + uri = gen_xmlURIPtr(n_uri, 1); + + xmlPrintURI(stream, uri); + call_tests++; + des_FILE_ptr(n_stream, stream, 0); + des_xmlURIPtr(n_uri, uri, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlPrintURI", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_stream); + printf(" %d", n_uri); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlSaveUri(void) { + int test_ret = 0; + + int mem_base; + xmlChar * ret_val; + xmlURIPtr uri; /* pointer to an xmlURI */ + int n_uri; + + for (n_uri = 0;n_uri < gen_nb_xmlURIPtr;n_uri++) { + mem_base = xmlMemBlocks(); + uri = gen_xmlURIPtr(n_uri, 0); + + ret_val = xmlSaveUri(uri); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_xmlURIPtr(n_uri, uri, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSaveUri", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_uri); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlURIEscape(void) { + int test_ret = 0; + + int mem_base; + xmlChar * ret_val; + xmlChar * str; /* the string of the URI to escape */ + int n_str; + + for (n_str = 0;n_str < gen_nb_const_xmlChar_ptr;n_str++) { + mem_base = xmlMemBlocks(); + str = gen_const_xmlChar_ptr(n_str, 0); + + ret_val = xmlURIEscape((const xmlChar *)str); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_str, (const xmlChar *)str, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlURIEscape", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_str); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlURIEscapeStr(void) { + int test_ret = 0; + + int mem_base; + xmlChar * ret_val; + xmlChar * str; /* string to escape */ + int n_str; + xmlChar * list; /* exception list string of chars not to escape */ + int n_list; + + for (n_str = 0;n_str < gen_nb_const_xmlChar_ptr;n_str++) { + for (n_list = 0;n_list < gen_nb_const_xmlChar_ptr;n_list++) { + mem_base = xmlMemBlocks(); + str = gen_const_xmlChar_ptr(n_str, 0); + list = gen_const_xmlChar_ptr(n_list, 1); + + ret_val = xmlURIEscapeStr((const xmlChar *)str, (const xmlChar *)list); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_str, (const xmlChar *)str, 0); + des_const_xmlChar_ptr(n_list, (const xmlChar *)list, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlURIEscapeStr", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_str); + printf(" %d", n_list); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlURIUnescapeString(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + +static int +test_uri(void) { + int test_ret = 0; + + if (quiet == 0) printf("Testing uri : 10 of 15 functions ...\n"); + test_ret += test_xmlBuildRelativeURI(); + test_ret += test_xmlBuildURI(); + test_ret += test_xmlCanonicPath(); + test_ret += test_xmlCreateURI(); + test_ret += test_xmlNormalizeURIPath(); + test_ret += test_xmlParseURI(); + test_ret += test_xmlParseURIRaw(); + test_ret += test_xmlParseURIReference(); + test_ret += test_xmlPathToURI(); + test_ret += test_xmlPrintURI(); + test_ret += test_xmlSaveUri(); + test_ret += test_xmlURIEscape(); + test_ret += test_xmlURIEscapeStr(); + test_ret += test_xmlURIUnescapeString(); + + if (test_ret != 0) + printf("Module uri: %d errors\n", test_ret); + return(test_ret); +} + +static int +test_xmlAddAttributeDecl(void) { + int test_ret = 0; + + int mem_base; + xmlAttributePtr ret_val; + xmlValidCtxtPtr ctxt; /* the validation context */ + int n_ctxt; + xmlDtdPtr dtd; /* pointer to the DTD */ + int n_dtd; + xmlChar * elem; /* the element name */ + int n_elem; + xmlChar * name; /* the attribute name */ + int n_name; + xmlChar * ns; /* the attribute namespace prefix */ + int n_ns; + xmlAttributeType type; /* the attribute type */ + int n_type; + xmlAttributeDefault def; /* the attribute default type */ + int n_def; + xmlChar * defaultValue; /* the attribute default value */ + int n_defaultValue; + xmlEnumerationPtr tree; /* if it's an enumeration, the associated list */ + int n_tree; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlValidCtxtPtr;n_ctxt++) { + for (n_dtd = 0;n_dtd < gen_nb_xmlDtdPtr;n_dtd++) { + for (n_elem = 0;n_elem < gen_nb_const_xmlChar_ptr;n_elem++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_ns = 0;n_ns < gen_nb_const_xmlChar_ptr;n_ns++) { + for (n_type = 0;n_type < gen_nb_xmlAttributeType;n_type++) { + for (n_def = 0;n_def < gen_nb_xmlAttributeDefault;n_def++) { + for (n_defaultValue = 0;n_defaultValue < gen_nb_const_xmlChar_ptr;n_defaultValue++) { + for (n_tree = 0;n_tree < gen_nb_xmlEnumerationPtr;n_tree++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlValidCtxtPtr(n_ctxt, 0); + dtd = gen_xmlDtdPtr(n_dtd, 1); + elem = gen_const_xmlChar_ptr(n_elem, 2); + name = gen_const_xmlChar_ptr(n_name, 3); + ns = gen_const_xmlChar_ptr(n_ns, 4); + type = gen_xmlAttributeType(n_type, 5); + def = gen_xmlAttributeDefault(n_def, 6); + defaultValue = gen_const_xmlChar_ptr(n_defaultValue, 7); + tree = gen_xmlEnumerationPtr(n_tree, 8); + + ret_val = xmlAddAttributeDecl(ctxt, dtd, (const xmlChar *)elem, (const xmlChar *)name, (const xmlChar *)ns, type, def, (const xmlChar *)defaultValue, tree); + desret_xmlAttributePtr(ret_val); + call_tests++; + des_xmlValidCtxtPtr(n_ctxt, ctxt, 0); + des_xmlDtdPtr(n_dtd, dtd, 1); + des_const_xmlChar_ptr(n_elem, (const xmlChar *)elem, 2); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 3); + des_const_xmlChar_ptr(n_ns, (const xmlChar *)ns, 4); + des_xmlAttributeType(n_type, type, 5); + des_xmlAttributeDefault(n_def, def, 6); + des_const_xmlChar_ptr(n_defaultValue, (const xmlChar *)defaultValue, 7); + des_xmlEnumerationPtr(n_tree, tree, 8); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlAddAttributeDecl", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_dtd); + printf(" %d", n_elem); + printf(" %d", n_name); + printf(" %d", n_ns); + printf(" %d", n_type); + printf(" %d", n_def); + printf(" %d", n_defaultValue); + printf(" %d", n_tree); + printf("\n"); + } + } + } + } + } + } + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlAddElementDecl(void) { + int test_ret = 0; + + int mem_base; + xmlElementPtr ret_val; + xmlValidCtxtPtr ctxt; /* the validation context */ + int n_ctxt; + xmlDtdPtr dtd; /* pointer to the DTD */ + int n_dtd; + xmlChar * name; /* the entity name */ + int n_name; + xmlElementTypeVal type; /* the element type */ + int n_type; + xmlElementContentPtr content; /* the element content tree or NULL */ + int n_content; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlValidCtxtPtr;n_ctxt++) { + for (n_dtd = 0;n_dtd < gen_nb_xmlDtdPtr;n_dtd++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_type = 0;n_type < gen_nb_xmlElementTypeVal;n_type++) { + for (n_content = 0;n_content < gen_nb_xmlElementContentPtr;n_content++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlValidCtxtPtr(n_ctxt, 0); + dtd = gen_xmlDtdPtr(n_dtd, 1); + name = gen_const_xmlChar_ptr(n_name, 2); + type = gen_xmlElementTypeVal(n_type, 3); + content = gen_xmlElementContentPtr(n_content, 4); + + ret_val = xmlAddElementDecl(ctxt, dtd, (const xmlChar *)name, type, content); + desret_xmlElementPtr(ret_val); + call_tests++; + des_xmlValidCtxtPtr(n_ctxt, ctxt, 0); + des_xmlDtdPtr(n_dtd, dtd, 1); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 2); + des_xmlElementTypeVal(n_type, type, 3); + des_xmlElementContentPtr(n_content, content, 4); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlAddElementDecl", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_dtd); + printf(" %d", n_name); + printf(" %d", n_type); + printf(" %d", n_content); + printf("\n"); + } + } + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlAddID(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlAddNotationDecl(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlAddRef(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +#define gen_nb_xmlAttributeTablePtr 1 +static xmlAttributeTablePtr gen_xmlAttributeTablePtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlAttributeTablePtr(int no ATTRIBUTE_UNUSED, xmlAttributeTablePtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +static int +test_xmlCopyAttributeTable(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlCopyDocElementContent(void) { + int test_ret = 0; + + int mem_base; + xmlElementContentPtr ret_val; + xmlDocPtr doc; /* the document owning the element declaration */ + int n_doc; + xmlElementContentPtr cur; /* An element content pointer. */ + int n_cur; + + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_cur = 0;n_cur < gen_nb_xmlElementContentPtr;n_cur++) { + mem_base = xmlMemBlocks(); + doc = gen_xmlDocPtr(n_doc, 0); + cur = gen_xmlElementContentPtr(n_cur, 1); + + ret_val = xmlCopyDocElementContent(doc, cur); + desret_xmlElementContentPtr(ret_val); + call_tests++; + des_xmlDocPtr(n_doc, doc, 0); + des_xmlElementContentPtr(n_cur, cur, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlCopyDocElementContent", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf(" %d", n_cur); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlCopyElementContent(void) { + int test_ret = 0; + + int mem_base; + xmlElementContentPtr ret_val; + xmlElementContentPtr cur; /* An element content pointer. */ + int n_cur; + + for (n_cur = 0;n_cur < gen_nb_xmlElementContentPtr;n_cur++) { + mem_base = xmlMemBlocks(); + cur = gen_xmlElementContentPtr(n_cur, 0); + + ret_val = xmlCopyElementContent(cur); + desret_xmlElementContentPtr(ret_val); + call_tests++; + des_xmlElementContentPtr(n_cur, cur, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlCopyElementContent", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_cur); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +#define gen_nb_xmlElementTablePtr 1 +static xmlElementTablePtr gen_xmlElementTablePtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlElementTablePtr(int no ATTRIBUTE_UNUSED, xmlElementTablePtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +static int +test_xmlCopyElementTable(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlCopyEnumeration(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +#define gen_nb_xmlNotationTablePtr 1 +static xmlNotationTablePtr gen_xmlNotationTablePtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlNotationTablePtr(int no ATTRIBUTE_UNUSED, xmlNotationTablePtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +static int +test_xmlCopyNotationTable(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlCreateEnumeration(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +#define gen_nb_xmlAttributePtr 1 +static xmlAttributePtr gen_xmlAttributePtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlAttributePtr(int no ATTRIBUTE_UNUSED, xmlAttributePtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +static int +test_xmlDumpAttributeDecl(void) { + int test_ret = 0; + +#if defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + xmlBufferPtr buf; /* the XML buffer output */ + int n_buf; + xmlAttributePtr attr; /* An attribute declaration */ + int n_attr; + + for (n_buf = 0;n_buf < gen_nb_xmlBufferPtr;n_buf++) { + for (n_attr = 0;n_attr < gen_nb_xmlAttributePtr;n_attr++) { + mem_base = xmlMemBlocks(); + buf = gen_xmlBufferPtr(n_buf, 0); + attr = gen_xmlAttributePtr(n_attr, 1); + + xmlDumpAttributeDecl(buf, attr); + call_tests++; + des_xmlBufferPtr(n_buf, buf, 0); + des_xmlAttributePtr(n_attr, attr, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlDumpAttributeDecl", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_buf); + printf(" %d", n_attr); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlDumpAttributeTable(void) { + int test_ret = 0; + +#if defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + xmlBufferPtr buf; /* the XML buffer output */ + int n_buf; + xmlAttributeTablePtr table; /* An attribute table */ + int n_table; + + for (n_buf = 0;n_buf < gen_nb_xmlBufferPtr;n_buf++) { + for (n_table = 0;n_table < gen_nb_xmlAttributeTablePtr;n_table++) { + mem_base = xmlMemBlocks(); + buf = gen_xmlBufferPtr(n_buf, 0); + table = gen_xmlAttributeTablePtr(n_table, 1); + + xmlDumpAttributeTable(buf, table); + call_tests++; + des_xmlBufferPtr(n_buf, buf, 0); + des_xmlAttributeTablePtr(n_table, table, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlDumpAttributeTable", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_buf); + printf(" %d", n_table); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +#define gen_nb_xmlElementPtr 1 +static xmlElementPtr gen_xmlElementPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlElementPtr(int no ATTRIBUTE_UNUSED, xmlElementPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +static int +test_xmlDumpElementDecl(void) { + int test_ret = 0; + +#if defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + xmlBufferPtr buf; /* the XML buffer output */ + int n_buf; + xmlElementPtr elem; /* An element table */ + int n_elem; + + for (n_buf = 0;n_buf < gen_nb_xmlBufferPtr;n_buf++) { + for (n_elem = 0;n_elem < gen_nb_xmlElementPtr;n_elem++) { + mem_base = xmlMemBlocks(); + buf = gen_xmlBufferPtr(n_buf, 0); + elem = gen_xmlElementPtr(n_elem, 1); + + xmlDumpElementDecl(buf, elem); + call_tests++; + des_xmlBufferPtr(n_buf, buf, 0); + des_xmlElementPtr(n_elem, elem, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlDumpElementDecl", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_buf); + printf(" %d", n_elem); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlDumpElementTable(void) { + int test_ret = 0; + +#if defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + xmlBufferPtr buf; /* the XML buffer output */ + int n_buf; + xmlElementTablePtr table; /* An element table */ + int n_table; + + for (n_buf = 0;n_buf < gen_nb_xmlBufferPtr;n_buf++) { + for (n_table = 0;n_table < gen_nb_xmlElementTablePtr;n_table++) { + mem_base = xmlMemBlocks(); + buf = gen_xmlBufferPtr(n_buf, 0); + table = gen_xmlElementTablePtr(n_table, 1); + + xmlDumpElementTable(buf, table); + call_tests++; + des_xmlBufferPtr(n_buf, buf, 0); + des_xmlElementTablePtr(n_table, table, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlDumpElementTable", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_buf); + printf(" %d", n_table); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +#define gen_nb_xmlNotationPtr 1 +static xmlNotationPtr gen_xmlNotationPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlNotationPtr(int no ATTRIBUTE_UNUSED, xmlNotationPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +static int +test_xmlDumpNotationDecl(void) { + int test_ret = 0; + +#if defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + xmlBufferPtr buf; /* the XML buffer output */ + int n_buf; + xmlNotationPtr nota; /* A notation declaration */ + int n_nota; + + for (n_buf = 0;n_buf < gen_nb_xmlBufferPtr;n_buf++) { + for (n_nota = 0;n_nota < gen_nb_xmlNotationPtr;n_nota++) { + mem_base = xmlMemBlocks(); + buf = gen_xmlBufferPtr(n_buf, 0); + nota = gen_xmlNotationPtr(n_nota, 1); + + xmlDumpNotationDecl(buf, nota); + call_tests++; + des_xmlBufferPtr(n_buf, buf, 0); + des_xmlNotationPtr(n_nota, nota, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlDumpNotationDecl", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_buf); + printf(" %d", n_nota); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlDumpNotationTable(void) { + int test_ret = 0; + +#if defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + xmlBufferPtr buf; /* the XML buffer output */ + int n_buf; + xmlNotationTablePtr table; /* A notation table */ + int n_table; + + for (n_buf = 0;n_buf < gen_nb_xmlBufferPtr;n_buf++) { + for (n_table = 0;n_table < gen_nb_xmlNotationTablePtr;n_table++) { + mem_base = xmlMemBlocks(); + buf = gen_xmlBufferPtr(n_buf, 0); + table = gen_xmlNotationTablePtr(n_table, 1); + + xmlDumpNotationTable(buf, table); + call_tests++; + des_xmlBufferPtr(n_buf, buf, 0); + des_xmlNotationTablePtr(n_table, table, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlDumpNotationTable", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_buf); + printf(" %d", n_table); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlGetDtdAttrDesc(void) { + int test_ret = 0; + + int mem_base; + xmlAttributePtr ret_val; + xmlDtdPtr dtd; /* a pointer to the DtD to search */ + int n_dtd; + xmlChar * elem; /* the element name */ + int n_elem; + xmlChar * name; /* the attribute name */ + int n_name; + + for (n_dtd = 0;n_dtd < gen_nb_xmlDtdPtr;n_dtd++) { + for (n_elem = 0;n_elem < gen_nb_const_xmlChar_ptr;n_elem++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + mem_base = xmlMemBlocks(); + dtd = gen_xmlDtdPtr(n_dtd, 0); + elem = gen_const_xmlChar_ptr(n_elem, 1); + name = gen_const_xmlChar_ptr(n_name, 2); + + ret_val = xmlGetDtdAttrDesc(dtd, (const xmlChar *)elem, (const xmlChar *)name); + desret_xmlAttributePtr(ret_val); + call_tests++; + des_xmlDtdPtr(n_dtd, dtd, 0); + des_const_xmlChar_ptr(n_elem, (const xmlChar *)elem, 1); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlGetDtdAttrDesc", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_dtd); + printf(" %d", n_elem); + printf(" %d", n_name); + printf("\n"); + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlGetDtdElementDesc(void) { + int test_ret = 0; + + int mem_base; + xmlElementPtr ret_val; + xmlDtdPtr dtd; /* a pointer to the DtD to search */ + int n_dtd; + xmlChar * name; /* the element name */ + int n_name; + + for (n_dtd = 0;n_dtd < gen_nb_xmlDtdPtr;n_dtd++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + mem_base = xmlMemBlocks(); + dtd = gen_xmlDtdPtr(n_dtd, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + + ret_val = xmlGetDtdElementDesc(dtd, (const xmlChar *)name); + desret_xmlElementPtr(ret_val); + call_tests++; + des_xmlDtdPtr(n_dtd, dtd, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlGetDtdElementDesc", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_dtd); + printf(" %d", n_name); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlGetDtdNotationDesc(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlGetDtdQAttrDesc(void) { + int test_ret = 0; + + int mem_base; + xmlAttributePtr ret_val; + xmlDtdPtr dtd; /* a pointer to the DtD to search */ + int n_dtd; + xmlChar * elem; /* the element name */ + int n_elem; + xmlChar * name; /* the attribute name */ + int n_name; + xmlChar * prefix; /* the attribute namespace prefix */ + int n_prefix; + + for (n_dtd = 0;n_dtd < gen_nb_xmlDtdPtr;n_dtd++) { + for (n_elem = 0;n_elem < gen_nb_const_xmlChar_ptr;n_elem++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_prefix = 0;n_prefix < gen_nb_const_xmlChar_ptr;n_prefix++) { + mem_base = xmlMemBlocks(); + dtd = gen_xmlDtdPtr(n_dtd, 0); + elem = gen_const_xmlChar_ptr(n_elem, 1); + name = gen_const_xmlChar_ptr(n_name, 2); + prefix = gen_const_xmlChar_ptr(n_prefix, 3); + + ret_val = xmlGetDtdQAttrDesc(dtd, (const xmlChar *)elem, (const xmlChar *)name, (const xmlChar *)prefix); + desret_xmlAttributePtr(ret_val); + call_tests++; + des_xmlDtdPtr(n_dtd, dtd, 0); + des_const_xmlChar_ptr(n_elem, (const xmlChar *)elem, 1); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 2); + des_const_xmlChar_ptr(n_prefix, (const xmlChar *)prefix, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlGetDtdQAttrDesc", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_dtd); + printf(" %d", n_elem); + printf(" %d", n_name); + printf(" %d", n_prefix); + printf("\n"); + } + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlGetDtdQElementDesc(void) { + int test_ret = 0; + + int mem_base; + xmlElementPtr ret_val; + xmlDtdPtr dtd; /* a pointer to the DtD to search */ + int n_dtd; + xmlChar * name; /* the element name */ + int n_name; + xmlChar * prefix; /* the element namespace prefix */ + int n_prefix; + + for (n_dtd = 0;n_dtd < gen_nb_xmlDtdPtr;n_dtd++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_prefix = 0;n_prefix < gen_nb_const_xmlChar_ptr;n_prefix++) { + mem_base = xmlMemBlocks(); + dtd = gen_xmlDtdPtr(n_dtd, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + prefix = gen_const_xmlChar_ptr(n_prefix, 2); + + ret_val = xmlGetDtdQElementDesc(dtd, (const xmlChar *)name, (const xmlChar *)prefix); + desret_xmlElementPtr(ret_val); + call_tests++; + des_xmlDtdPtr(n_dtd, dtd, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + des_const_xmlChar_ptr(n_prefix, (const xmlChar *)prefix, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlGetDtdQElementDesc", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_dtd); + printf(" %d", n_name); + printf(" %d", n_prefix); + printf("\n"); + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlGetID(void) { + int test_ret = 0; + + int mem_base; + xmlAttrPtr ret_val; + xmlDocPtr doc; /* pointer to the document */ + int n_doc; + xmlChar * ID; /* the ID value */ + int n_ID; + + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_ID = 0;n_ID < gen_nb_const_xmlChar_ptr;n_ID++) { + mem_base = xmlMemBlocks(); + doc = gen_xmlDocPtr(n_doc, 0); + ID = gen_const_xmlChar_ptr(n_ID, 1); + + ret_val = xmlGetID(doc, (const xmlChar *)ID); + desret_xmlAttrPtr(ret_val); + call_tests++; + des_xmlDocPtr(n_doc, doc, 0); + des_const_xmlChar_ptr(n_ID, (const xmlChar *)ID, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlGetID", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf(" %d", n_ID); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlGetRefs(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlIsID(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlDocPtr doc; /* the document */ + int n_doc; + xmlNodePtr elem; /* the element carrying the attribute */ + int n_elem; + xmlAttrPtr attr; /* the attribute */ + int n_attr; + + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_elem = 0;n_elem < gen_nb_xmlNodePtr;n_elem++) { + for (n_attr = 0;n_attr < gen_nb_xmlAttrPtr;n_attr++) { + mem_base = xmlMemBlocks(); + doc = gen_xmlDocPtr(n_doc, 0); + elem = gen_xmlNodePtr(n_elem, 1); + attr = gen_xmlAttrPtr(n_attr, 2); + + ret_val = xmlIsID(doc, elem, attr); + desret_int(ret_val); + call_tests++; + des_xmlDocPtr(n_doc, doc, 0); + des_xmlNodePtr(n_elem, elem, 1); + des_xmlAttrPtr(n_attr, attr, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlIsID", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf(" %d", n_elem); + printf(" %d", n_attr); + printf("\n"); + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlIsMixedElement(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlDocPtr doc; /* the document */ + int n_doc; + xmlChar * name; /* the element name */ + int n_name; + + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + mem_base = xmlMemBlocks(); + doc = gen_xmlDocPtr(n_doc, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + + ret_val = xmlIsMixedElement(doc, (const xmlChar *)name); + desret_int(ret_val); + call_tests++; + des_xmlDocPtr(n_doc, doc, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlIsMixedElement", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf(" %d", n_name); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlIsRef(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlDocPtr doc; /* the document */ + int n_doc; + xmlNodePtr elem; /* the element carrying the attribute */ + int n_elem; + xmlAttrPtr attr; /* the attribute */ + int n_attr; + + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_elem = 0;n_elem < gen_nb_xmlNodePtr;n_elem++) { + for (n_attr = 0;n_attr < gen_nb_xmlAttrPtr;n_attr++) { + mem_base = xmlMemBlocks(); + doc = gen_xmlDocPtr(n_doc, 0); + elem = gen_xmlNodePtr(n_elem, 1); + attr = gen_xmlAttrPtr(n_attr, 2); + + ret_val = xmlIsRef(doc, elem, attr); + desret_int(ret_val); + call_tests++; + des_xmlDocPtr(n_doc, doc, 0); + des_xmlNodePtr(n_elem, elem, 1); + des_xmlAttrPtr(n_attr, attr, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlIsRef", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf(" %d", n_elem); + printf(" %d", n_attr); + printf("\n"); + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlNewDocElementContent(void) { + int test_ret = 0; + + int mem_base; + xmlElementContentPtr ret_val; + xmlDocPtr doc; /* the document */ + int n_doc; + xmlChar * name; /* the subelement name or NULL */ + int n_name; + xmlElementContentType type; /* the type of element content decl */ + int n_type; + + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_type = 0;n_type < gen_nb_xmlElementContentType;n_type++) { + mem_base = xmlMemBlocks(); + doc = gen_xmlDocPtr(n_doc, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + type = gen_xmlElementContentType(n_type, 2); + + ret_val = xmlNewDocElementContent(doc, (const xmlChar *)name, type); + xmlFreeDocElementContent(doc, ret_val); ret_val = NULL; + desret_xmlElementContentPtr(ret_val); + call_tests++; + des_xmlDocPtr(n_doc, doc, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + des_xmlElementContentType(n_type, type, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNewDocElementContent", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf(" %d", n_name); + printf(" %d", n_type); + printf("\n"); + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlNewElementContent(void) { + int test_ret = 0; + + int mem_base; + xmlElementContentPtr ret_val; + xmlChar * name; /* the subelement name or NULL */ + int n_name; + xmlElementContentType type; /* the type of element content decl */ + int n_type; + + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_type = 0;n_type < gen_nb_xmlElementContentType;n_type++) { + mem_base = xmlMemBlocks(); + name = gen_const_xmlChar_ptr(n_name, 0); + type = gen_xmlElementContentType(n_type, 1); + + ret_val = xmlNewElementContent((const xmlChar *)name, type); + desret_xmlElementContentPtr(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 0); + des_xmlElementContentType(n_type, type, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNewElementContent", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_name); + printf(" %d", n_type); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlNewValidCtxt(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlRemoveID(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlDocPtr doc; /* the document */ + int n_doc; + xmlAttrPtr attr; /* the attribute */ + int n_attr; + + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_attr = 0;n_attr < gen_nb_xmlAttrPtr;n_attr++) { + mem_base = xmlMemBlocks(); + doc = gen_xmlDocPtr(n_doc, 0); + attr = gen_xmlAttrPtr(n_attr, 1); + + ret_val = xmlRemoveID(doc, attr); + desret_int(ret_val); + call_tests++; + des_xmlDocPtr(n_doc, doc, 0); + des_xmlAttrPtr(n_attr, attr, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlRemoveID", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf(" %d", n_attr); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlRemoveRef(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlDocPtr doc; /* the document */ + int n_doc; + xmlAttrPtr attr; /* the attribute */ + int n_attr; + + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_attr = 0;n_attr < gen_nb_xmlAttrPtr;n_attr++) { + mem_base = xmlMemBlocks(); + doc = gen_xmlDocPtr(n_doc, 0); + attr = gen_xmlAttrPtr(n_attr, 1); + + ret_val = xmlRemoveRef(doc, attr); + desret_int(ret_val); + call_tests++; + des_xmlDocPtr(n_doc, doc, 0); + des_xmlAttrPtr(n_attr, attr, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlRemoveRef", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf(" %d", n_attr); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlSnprintfElementContent(void) { + int test_ret = 0; + + int mem_base; + char * buf; /* an output buffer */ + int n_buf; + int size; /* the buffer size */ + int n_size; + xmlElementContentPtr content; /* An element table */ + int n_content; + int englob; /* 1 if one must print the englobing parenthesis, 0 otherwise */ + int n_englob; + + for (n_buf = 0;n_buf < gen_nb_char_ptr;n_buf++) { + for (n_size = 0;n_size < gen_nb_int;n_size++) { + for (n_content = 0;n_content < gen_nb_xmlElementContentPtr;n_content++) { + for (n_englob = 0;n_englob < gen_nb_int;n_englob++) { + mem_base = xmlMemBlocks(); + buf = gen_char_ptr(n_buf, 0); + size = gen_int(n_size, 1); + content = gen_xmlElementContentPtr(n_content, 2); + englob = gen_int(n_englob, 3); + + xmlSnprintfElementContent(buf, size, content, englob); + call_tests++; + des_char_ptr(n_buf, buf, 0); + des_int(n_size, size, 1); + des_xmlElementContentPtr(n_content, content, 2); + des_int(n_englob, englob, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSnprintfElementContent", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_buf); + printf(" %d", n_size); + printf(" %d", n_content); + printf(" %d", n_englob); + printf("\n"); + } + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlSprintfElementContent(void) { + int test_ret = 0; + +#if defined(LIBXML_OUTPUT_ENABLED) +#ifdef LIBXML_OUTPUT_ENABLED + int mem_base; + char * buf; /* an output buffer */ + int n_buf; + xmlElementContentPtr content; /* An element table */ + int n_content; + int englob; /* 1 if one must print the englobing parenthesis, 0 otherwise */ + int n_englob; + + for (n_buf = 0;n_buf < gen_nb_char_ptr;n_buf++) { + for (n_content = 0;n_content < gen_nb_xmlElementContentPtr;n_content++) { + for (n_englob = 0;n_englob < gen_nb_int;n_englob++) { + mem_base = xmlMemBlocks(); + buf = gen_char_ptr(n_buf, 0); + content = gen_xmlElementContentPtr(n_content, 1); + englob = gen_int(n_englob, 2); + + xmlSprintfElementContent(buf, content, englob); + call_tests++; + des_char_ptr(n_buf, buf, 0); + des_xmlElementContentPtr(n_content, content, 1); + des_int(n_englob, englob, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSprintfElementContent", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_buf); + printf(" %d", n_content); + printf(" %d", n_englob); + printf("\n"); + } + } + } + } + function_tests++; +#endif +#endif + + return(test_ret); +} + + +static int +test_xmlValidBuildContentModel(void) { + int test_ret = 0; + +#if defined(LIBXML_VALID_ENABLED) && defined(LIBXML_REGEXP_ENABLED) + int mem_base; + int ret_val; + xmlValidCtxtPtr ctxt; /* a validation context */ + int n_ctxt; + xmlElementPtr elem; /* an element declaration node */ + int n_elem; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlValidCtxtPtr;n_ctxt++) { + for (n_elem = 0;n_elem < gen_nb_xmlElementPtr;n_elem++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlValidCtxtPtr(n_ctxt, 0); + elem = gen_xmlElementPtr(n_elem, 1); + + ret_val = xmlValidBuildContentModel(ctxt, elem); + desret_int(ret_val); + call_tests++; + des_xmlValidCtxtPtr(n_ctxt, ctxt, 0); + des_xmlElementPtr(n_elem, elem, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlValidBuildContentModel", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_elem); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlValidCtxtNormalizeAttributeValue(void) { + int test_ret = 0; + +#if defined(LIBXML_VALID_ENABLED) + int mem_base; + xmlChar * ret_val; + xmlValidCtxtPtr ctxt; /* the validation context or NULL */ + int n_ctxt; + xmlDocPtr doc; /* the document */ + int n_doc; + xmlNodePtr elem; /* the parent */ + int n_elem; + xmlChar * name; /* the attribute name */ + int n_name; + xmlChar * value; /* the attribute value */ + int n_value; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlValidCtxtPtr;n_ctxt++) { + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_elem = 0;n_elem < gen_nb_xmlNodePtr;n_elem++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlValidCtxtPtr(n_ctxt, 0); + doc = gen_xmlDocPtr(n_doc, 1); + elem = gen_xmlNodePtr(n_elem, 2); + name = gen_const_xmlChar_ptr(n_name, 3); + value = gen_const_xmlChar_ptr(n_value, 4); + + ret_val = xmlValidCtxtNormalizeAttributeValue(ctxt, doc, elem, (const xmlChar *)name, (const xmlChar *)value); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_xmlValidCtxtPtr(n_ctxt, ctxt, 0); + des_xmlDocPtr(n_doc, doc, 1); + des_xmlNodePtr(n_elem, elem, 2); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 3); + des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 4); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlValidCtxtNormalizeAttributeValue", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_doc); + printf(" %d", n_elem); + printf(" %d", n_name); + printf(" %d", n_value); + printf("\n"); + } + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +#define gen_nb_xmlElementContent_ptr 1 +static xmlElementContent * gen_xmlElementContent_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlElementContent_ptr(int no ATTRIBUTE_UNUSED, xmlElementContent * val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +static int +test_xmlValidGetPotentialChildren(void) { + int test_ret = 0; + +#if defined(LIBXML_VALID_ENABLED) +#ifdef LIBXML_VALID_ENABLED + int mem_base; + int ret_val; + xmlElementContent * ctree; /* an element content tree */ + int n_ctree; + xmlChar ** names; /* an array to store the list of child names */ + int n_names; + int * len; /* a pointer to the number of element in the list */ + int n_len; + int max; /* the size of the array */ + int n_max; + + for (n_ctree = 0;n_ctree < gen_nb_xmlElementContent_ptr;n_ctree++) { + for (n_names = 0;n_names < gen_nb_const_xmlChar_ptr_ptr;n_names++) { + for (n_len = 0;n_len < gen_nb_int_ptr;n_len++) { + for (n_max = 0;n_max < gen_nb_int;n_max++) { + mem_base = xmlMemBlocks(); + ctree = gen_xmlElementContent_ptr(n_ctree, 0); + names = gen_const_xmlChar_ptr_ptr(n_names, 1); + len = gen_int_ptr(n_len, 2); + max = gen_int(n_max, 3); + + ret_val = xmlValidGetPotentialChildren(ctree, (const xmlChar **)names, len, max); + desret_int(ret_val); + call_tests++; + des_xmlElementContent_ptr(n_ctree, ctree, 0); + des_const_xmlChar_ptr_ptr(n_names, (const xmlChar **)names, 1); + des_int_ptr(n_len, len, 2); + des_int(n_max, max, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlValidGetPotentialChildren", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctree); + printf(" %d", n_names); + printf(" %d", n_len); + printf(" %d", n_max); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif +#endif + + return(test_ret); +} + + +static int +test_xmlValidGetValidElements(void) { + int test_ret = 0; + +#if defined(LIBXML_VALID_ENABLED) +#ifdef LIBXML_VALID_ENABLED + int mem_base; + int ret_val; + xmlNode * prev; /* an element to insert after */ + int n_prev; + xmlNode * next; /* an element to insert next */ + int n_next; + xmlChar ** names; /* an array to store the list of child names */ + int n_names; + int max; /* the size of the array */ + int n_max; + + for (n_prev = 0;n_prev < gen_nb_xmlNodePtr;n_prev++) { + for (n_next = 0;n_next < gen_nb_xmlNodePtr;n_next++) { + for (n_names = 0;n_names < gen_nb_const_xmlChar_ptr_ptr;n_names++) { + for (n_max = 0;n_max < gen_nb_int;n_max++) { + mem_base = xmlMemBlocks(); + prev = gen_xmlNodePtr(n_prev, 0); + next = gen_xmlNodePtr(n_next, 1); + names = gen_const_xmlChar_ptr_ptr(n_names, 2); + max = gen_int(n_max, 3); + + ret_val = xmlValidGetValidElements(prev, next, (const xmlChar **)names, max); + desret_int(ret_val); + call_tests++; + des_xmlNodePtr(n_prev, prev, 0); + des_xmlNodePtr(n_next, next, 1); + des_const_xmlChar_ptr_ptr(n_names, (const xmlChar **)names, 2); + des_int(n_max, max, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlValidGetValidElements", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_prev); + printf(" %d", n_next); + printf(" %d", n_names); + printf(" %d", n_max); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif +#endif + + return(test_ret); +} + + +static int +test_xmlValidNormalizeAttributeValue(void) { + int test_ret = 0; + +#if defined(LIBXML_VALID_ENABLED) + int mem_base; + xmlChar * ret_val; + xmlDocPtr doc; /* the document */ + int n_doc; + xmlNodePtr elem; /* the parent */ + int n_elem; + xmlChar * name; /* the attribute name */ + int n_name; + xmlChar * value; /* the attribute value */ + int n_value; + + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_elem = 0;n_elem < gen_nb_xmlNodePtr;n_elem++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) { + mem_base = xmlMemBlocks(); + doc = gen_xmlDocPtr(n_doc, 0); + elem = gen_xmlNodePtr(n_elem, 1); + name = gen_const_xmlChar_ptr(n_name, 2); + value = gen_const_xmlChar_ptr(n_value, 3); + + ret_val = xmlValidNormalizeAttributeValue(doc, elem, (const xmlChar *)name, (const xmlChar *)value); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_xmlDocPtr(n_doc, doc, 0); + des_xmlNodePtr(n_elem, elem, 1); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 2); + des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlValidNormalizeAttributeValue", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf(" %d", n_elem); + printf(" %d", n_name); + printf(" %d", n_value); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlValidateAttributeDecl(void) { + int test_ret = 0; + +#if defined(LIBXML_VALID_ENABLED) + int mem_base; + int ret_val; + xmlValidCtxtPtr ctxt; /* the validation context */ + int n_ctxt; + xmlDocPtr doc; /* a document instance */ + int n_doc; + xmlAttributePtr attr; /* an attribute definition */ + int n_attr; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlValidCtxtPtr;n_ctxt++) { + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_attr = 0;n_attr < gen_nb_xmlAttributePtr;n_attr++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlValidCtxtPtr(n_ctxt, 0); + doc = gen_xmlDocPtr(n_doc, 1); + attr = gen_xmlAttributePtr(n_attr, 2); + + ret_val = xmlValidateAttributeDecl(ctxt, doc, attr); + desret_int(ret_val); + call_tests++; + des_xmlValidCtxtPtr(n_ctxt, ctxt, 0); + des_xmlDocPtr(n_doc, doc, 1); + des_xmlAttributePtr(n_attr, attr, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlValidateAttributeDecl", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_doc); + printf(" %d", n_attr); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlValidateAttributeValue(void) { + int test_ret = 0; + +#if defined(LIBXML_VALID_ENABLED) + int mem_base; + int ret_val; + xmlAttributeType type; /* an attribute type */ + int n_type; + xmlChar * value; /* an attribute value */ + int n_value; + + for (n_type = 0;n_type < gen_nb_xmlAttributeType;n_type++) { + for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) { + mem_base = xmlMemBlocks(); + type = gen_xmlAttributeType(n_type, 0); + value = gen_const_xmlChar_ptr(n_value, 1); + + ret_val = xmlValidateAttributeValue(type, (const xmlChar *)value); + desret_int(ret_val); + call_tests++; + des_xmlAttributeType(n_type, type, 0); + des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlValidateAttributeValue", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_type); + printf(" %d", n_value); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlValidateDocument(void) { + int test_ret = 0; + +#if defined(LIBXML_VALID_ENABLED) + int mem_base; + int ret_val; + xmlValidCtxtPtr ctxt; /* the validation context */ + int n_ctxt; + xmlDocPtr doc; /* a document instance */ + int n_doc; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlValidCtxtPtr;n_ctxt++) { + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlValidCtxtPtr(n_ctxt, 0); + doc = gen_xmlDocPtr(n_doc, 1); + + ret_val = xmlValidateDocument(ctxt, doc); + desret_int(ret_val); + call_tests++; + des_xmlValidCtxtPtr(n_ctxt, ctxt, 0); + des_xmlDocPtr(n_doc, doc, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlValidateDocument", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_doc); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlValidateDocumentFinal(void) { + int test_ret = 0; + +#if defined(LIBXML_VALID_ENABLED) + int mem_base; + int ret_val; + xmlValidCtxtPtr ctxt; /* the validation context */ + int n_ctxt; + xmlDocPtr doc; /* a document instance */ + int n_doc; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlValidCtxtPtr;n_ctxt++) { + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlValidCtxtPtr(n_ctxt, 0); + doc = gen_xmlDocPtr(n_doc, 1); + + ret_val = xmlValidateDocumentFinal(ctxt, doc); + desret_int(ret_val); + call_tests++; + des_xmlValidCtxtPtr(n_ctxt, ctxt, 0); + des_xmlDocPtr(n_doc, doc, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlValidateDocumentFinal", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_doc); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlValidateDtd(void) { + int test_ret = 0; + +#if defined(LIBXML_VALID_ENABLED) + int mem_base; + int ret_val; + xmlValidCtxtPtr ctxt; /* the validation context */ + int n_ctxt; + xmlDocPtr doc; /* a document instance */ + int n_doc; + xmlDtdPtr dtd; /* a dtd instance */ + int n_dtd; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlValidCtxtPtr;n_ctxt++) { + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_dtd = 0;n_dtd < gen_nb_xmlDtdPtr;n_dtd++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlValidCtxtPtr(n_ctxt, 0); + doc = gen_xmlDocPtr(n_doc, 1); + dtd = gen_xmlDtdPtr(n_dtd, 2); + + ret_val = xmlValidateDtd(ctxt, doc, dtd); + desret_int(ret_val); + call_tests++; + des_xmlValidCtxtPtr(n_ctxt, ctxt, 0); + des_xmlDocPtr(n_doc, doc, 1); + des_xmlDtdPtr(n_dtd, dtd, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlValidateDtd", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_doc); + printf(" %d", n_dtd); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlValidateDtdFinal(void) { + int test_ret = 0; + +#if defined(LIBXML_VALID_ENABLED) + int mem_base; + int ret_val; + xmlValidCtxtPtr ctxt; /* the validation context */ + int n_ctxt; + xmlDocPtr doc; /* a document instance */ + int n_doc; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlValidCtxtPtr;n_ctxt++) { + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlValidCtxtPtr(n_ctxt, 0); + doc = gen_xmlDocPtr(n_doc, 1); + + ret_val = xmlValidateDtdFinal(ctxt, doc); + desret_int(ret_val); + call_tests++; + des_xmlValidCtxtPtr(n_ctxt, ctxt, 0); + des_xmlDocPtr(n_doc, doc, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlValidateDtdFinal", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_doc); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlValidateElement(void) { + int test_ret = 0; + +#if defined(LIBXML_VALID_ENABLED) + int mem_base; + int ret_val; + xmlValidCtxtPtr ctxt; /* the validation context */ + int n_ctxt; + xmlDocPtr doc; /* a document instance */ + int n_doc; + xmlNodePtr elem; /* an element instance */ + int n_elem; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlValidCtxtPtr;n_ctxt++) { + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_elem = 0;n_elem < gen_nb_xmlNodePtr;n_elem++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlValidCtxtPtr(n_ctxt, 0); + doc = gen_xmlDocPtr(n_doc, 1); + elem = gen_xmlNodePtr(n_elem, 2); + + ret_val = xmlValidateElement(ctxt, doc, elem); + desret_int(ret_val); + call_tests++; + des_xmlValidCtxtPtr(n_ctxt, ctxt, 0); + des_xmlDocPtr(n_doc, doc, 1); + des_xmlNodePtr(n_elem, elem, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlValidateElement", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_doc); + printf(" %d", n_elem); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlValidateElementDecl(void) { + int test_ret = 0; + +#if defined(LIBXML_VALID_ENABLED) + int mem_base; + int ret_val; + xmlValidCtxtPtr ctxt; /* the validation context */ + int n_ctxt; + xmlDocPtr doc; /* a document instance */ + int n_doc; + xmlElementPtr elem; /* an element definition */ + int n_elem; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlValidCtxtPtr;n_ctxt++) { + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_elem = 0;n_elem < gen_nb_xmlElementPtr;n_elem++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlValidCtxtPtr(n_ctxt, 0); + doc = gen_xmlDocPtr(n_doc, 1); + elem = gen_xmlElementPtr(n_elem, 2); + + ret_val = xmlValidateElementDecl(ctxt, doc, elem); + desret_int(ret_val); + call_tests++; + des_xmlValidCtxtPtr(n_ctxt, ctxt, 0); + des_xmlDocPtr(n_doc, doc, 1); + des_xmlElementPtr(n_elem, elem, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlValidateElementDecl", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_doc); + printf(" %d", n_elem); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlValidateNameValue(void) { + int test_ret = 0; + +#if defined(LIBXML_VALID_ENABLED) + int mem_base; + int ret_val; + xmlChar * value; /* an Name value */ + int n_value; + + for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) { + mem_base = xmlMemBlocks(); + value = gen_const_xmlChar_ptr(n_value, 0); + + ret_val = xmlValidateNameValue((const xmlChar *)value); + desret_int(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlValidateNameValue", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_value); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlValidateNamesValue(void) { + int test_ret = 0; + +#if defined(LIBXML_VALID_ENABLED) + int mem_base; + int ret_val; + xmlChar * value; /* an Names value */ + int n_value; + + for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) { + mem_base = xmlMemBlocks(); + value = gen_const_xmlChar_ptr(n_value, 0); + + ret_val = xmlValidateNamesValue((const xmlChar *)value); + desret_int(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlValidateNamesValue", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_value); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlValidateNmtokenValue(void) { + int test_ret = 0; + +#if defined(LIBXML_VALID_ENABLED) + int mem_base; + int ret_val; + xmlChar * value; /* an Nmtoken value */ + int n_value; + + for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) { + mem_base = xmlMemBlocks(); + value = gen_const_xmlChar_ptr(n_value, 0); + + ret_val = xmlValidateNmtokenValue((const xmlChar *)value); + desret_int(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlValidateNmtokenValue", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_value); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlValidateNmtokensValue(void) { + int test_ret = 0; + +#if defined(LIBXML_VALID_ENABLED) + int mem_base; + int ret_val; + xmlChar * value; /* an Nmtokens value */ + int n_value; + + for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) { + mem_base = xmlMemBlocks(); + value = gen_const_xmlChar_ptr(n_value, 0); + + ret_val = xmlValidateNmtokensValue((const xmlChar *)value); + desret_int(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlValidateNmtokensValue", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_value); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlValidateNotationDecl(void) { + int test_ret = 0; + +#if defined(LIBXML_VALID_ENABLED) + int mem_base; + int ret_val; + xmlValidCtxtPtr ctxt; /* the validation context */ + int n_ctxt; + xmlDocPtr doc; /* a document instance */ + int n_doc; + xmlNotationPtr nota; /* a notation definition */ + int n_nota; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlValidCtxtPtr;n_ctxt++) { + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_nota = 0;n_nota < gen_nb_xmlNotationPtr;n_nota++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlValidCtxtPtr(n_ctxt, 0); + doc = gen_xmlDocPtr(n_doc, 1); + nota = gen_xmlNotationPtr(n_nota, 2); + + ret_val = xmlValidateNotationDecl(ctxt, doc, nota); + desret_int(ret_val); + call_tests++; + des_xmlValidCtxtPtr(n_ctxt, ctxt, 0); + des_xmlDocPtr(n_doc, doc, 1); + des_xmlNotationPtr(n_nota, nota, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlValidateNotationDecl", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_doc); + printf(" %d", n_nota); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlValidateNotationUse(void) { + int test_ret = 0; + +#if defined(LIBXML_VALID_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + int ret_val; + xmlValidCtxtPtr ctxt; /* the validation context */ + int n_ctxt; + xmlDocPtr doc; /* the document */ + int n_doc; + xmlChar * notationName; /* the notation name to check */ + int n_notationName; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlValidCtxtPtr;n_ctxt++) { + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_notationName = 0;n_notationName < gen_nb_const_xmlChar_ptr;n_notationName++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlValidCtxtPtr(n_ctxt, 0); + doc = gen_xmlDocPtr(n_doc, 1); + notationName = gen_const_xmlChar_ptr(n_notationName, 2); + + ret_val = xmlValidateNotationUse(ctxt, doc, (const xmlChar *)notationName); + desret_int(ret_val); + call_tests++; + des_xmlValidCtxtPtr(n_ctxt, ctxt, 0); + des_xmlDocPtr(n_doc, doc, 1); + des_const_xmlChar_ptr(n_notationName, (const xmlChar *)notationName, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlValidateNotationUse", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_doc); + printf(" %d", n_notationName); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlValidateOneAttribute(void) { + int test_ret = 0; + +#if defined(LIBXML_VALID_ENABLED) + int mem_base; + int ret_val; + xmlValidCtxtPtr ctxt; /* the validation context */ + int n_ctxt; + xmlDocPtr doc; /* a document instance */ + int n_doc; + xmlNodePtr elem; /* an element instance */ + int n_elem; + xmlAttrPtr attr; /* an attribute instance */ + int n_attr; + xmlChar * value; /* the attribute value (without entities processing) */ + int n_value; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlValidCtxtPtr;n_ctxt++) { + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_elem = 0;n_elem < gen_nb_xmlNodePtr;n_elem++) { + for (n_attr = 0;n_attr < gen_nb_xmlAttrPtr;n_attr++) { + for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlValidCtxtPtr(n_ctxt, 0); + doc = gen_xmlDocPtr(n_doc, 1); + elem = gen_xmlNodePtr(n_elem, 2); + attr = gen_xmlAttrPtr(n_attr, 3); + value = gen_const_xmlChar_ptr(n_value, 4); + + ret_val = xmlValidateOneAttribute(ctxt, doc, elem, attr, (const xmlChar *)value); + desret_int(ret_val); + call_tests++; + des_xmlValidCtxtPtr(n_ctxt, ctxt, 0); + des_xmlDocPtr(n_doc, doc, 1); + des_xmlNodePtr(n_elem, elem, 2); + des_xmlAttrPtr(n_attr, attr, 3); + des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 4); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlValidateOneAttribute", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_doc); + printf(" %d", n_elem); + printf(" %d", n_attr); + printf(" %d", n_value); + printf("\n"); + } + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlValidateOneElement(void) { + int test_ret = 0; + +#if defined(LIBXML_VALID_ENABLED) + int mem_base; + int ret_val; + xmlValidCtxtPtr ctxt; /* the validation context */ + int n_ctxt; + xmlDocPtr doc; /* a document instance */ + int n_doc; + xmlNodePtr elem; /* an element instance */ + int n_elem; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlValidCtxtPtr;n_ctxt++) { + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_elem = 0;n_elem < gen_nb_xmlNodePtr;n_elem++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlValidCtxtPtr(n_ctxt, 0); + doc = gen_xmlDocPtr(n_doc, 1); + elem = gen_xmlNodePtr(n_elem, 2); + + ret_val = xmlValidateOneElement(ctxt, doc, elem); + desret_int(ret_val); + call_tests++; + des_xmlValidCtxtPtr(n_ctxt, ctxt, 0); + des_xmlDocPtr(n_doc, doc, 1); + des_xmlNodePtr(n_elem, elem, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlValidateOneElement", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_doc); + printf(" %d", n_elem); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlValidateOneNamespace(void) { + int test_ret = 0; + +#if defined(LIBXML_VALID_ENABLED) + int mem_base; + int ret_val; + xmlValidCtxtPtr ctxt; /* the validation context */ + int n_ctxt; + xmlDocPtr doc; /* a document instance */ + int n_doc; + xmlNodePtr elem; /* an element instance */ + int n_elem; + xmlChar * prefix; /* the namespace prefix */ + int n_prefix; + xmlNsPtr ns; /* an namespace declaration instance */ + int n_ns; + xmlChar * value; /* the attribute value (without entities processing) */ + int n_value; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlValidCtxtPtr;n_ctxt++) { + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_elem = 0;n_elem < gen_nb_xmlNodePtr;n_elem++) { + for (n_prefix = 0;n_prefix < gen_nb_const_xmlChar_ptr;n_prefix++) { + for (n_ns = 0;n_ns < gen_nb_xmlNsPtr;n_ns++) { + for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlValidCtxtPtr(n_ctxt, 0); + doc = gen_xmlDocPtr(n_doc, 1); + elem = gen_xmlNodePtr(n_elem, 2); + prefix = gen_const_xmlChar_ptr(n_prefix, 3); + ns = gen_xmlNsPtr(n_ns, 4); + value = gen_const_xmlChar_ptr(n_value, 5); + + ret_val = xmlValidateOneNamespace(ctxt, doc, elem, (const xmlChar *)prefix, ns, (const xmlChar *)value); + desret_int(ret_val); + call_tests++; + des_xmlValidCtxtPtr(n_ctxt, ctxt, 0); + des_xmlDocPtr(n_doc, doc, 1); + des_xmlNodePtr(n_elem, elem, 2); + des_const_xmlChar_ptr(n_prefix, (const xmlChar *)prefix, 3); + des_xmlNsPtr(n_ns, ns, 4); + des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 5); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlValidateOneNamespace", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_doc); + printf(" %d", n_elem); + printf(" %d", n_prefix); + printf(" %d", n_ns); + printf(" %d", n_value); + printf("\n"); + } + } + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlValidatePopElement(void) { + int test_ret = 0; + +#if defined(LIBXML_VALID_ENABLED) && defined(LIBXML_REGEXP_ENABLED) + int mem_base; + int ret_val; + xmlValidCtxtPtr ctxt; /* the validation context */ + int n_ctxt; + xmlDocPtr doc; /* a document instance */ + int n_doc; + xmlNodePtr elem; /* an element instance */ + int n_elem; + xmlChar * qname; /* the qualified name as appearing in the serialization */ + int n_qname; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlValidCtxtPtr;n_ctxt++) { + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_elem = 0;n_elem < gen_nb_xmlNodePtr;n_elem++) { + for (n_qname = 0;n_qname < gen_nb_const_xmlChar_ptr;n_qname++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlValidCtxtPtr(n_ctxt, 0); + doc = gen_xmlDocPtr(n_doc, 1); + elem = gen_xmlNodePtr(n_elem, 2); + qname = gen_const_xmlChar_ptr(n_qname, 3); + + ret_val = xmlValidatePopElement(ctxt, doc, elem, (const xmlChar *)qname); + desret_int(ret_val); + call_tests++; + des_xmlValidCtxtPtr(n_ctxt, ctxt, 0); + des_xmlDocPtr(n_doc, doc, 1); + des_xmlNodePtr(n_elem, elem, 2); + des_const_xmlChar_ptr(n_qname, (const xmlChar *)qname, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlValidatePopElement", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_doc); + printf(" %d", n_elem); + printf(" %d", n_qname); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlValidatePushCData(void) { + int test_ret = 0; + +#if defined(LIBXML_VALID_ENABLED) && defined(LIBXML_REGEXP_ENABLED) + int mem_base; + int ret_val; + xmlValidCtxtPtr ctxt; /* the validation context */ + int n_ctxt; + xmlChar * data; /* some character data read */ + int n_data; + int len; /* the length of the data */ + int n_len; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlValidCtxtPtr;n_ctxt++) { + for (n_data = 0;n_data < gen_nb_const_xmlChar_ptr;n_data++) { + for (n_len = 0;n_len < gen_nb_int;n_len++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlValidCtxtPtr(n_ctxt, 0); + data = gen_const_xmlChar_ptr(n_data, 1); + len = gen_int(n_len, 2); + + ret_val = xmlValidatePushCData(ctxt, (const xmlChar *)data, len); + desret_int(ret_val); + call_tests++; + des_xmlValidCtxtPtr(n_ctxt, ctxt, 0); + des_const_xmlChar_ptr(n_data, (const xmlChar *)data, 1); + des_int(n_len, len, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlValidatePushCData", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_data); + printf(" %d", n_len); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlValidatePushElement(void) { + int test_ret = 0; + +#if defined(LIBXML_VALID_ENABLED) && defined(LIBXML_REGEXP_ENABLED) + int mem_base; + int ret_val; + xmlValidCtxtPtr ctxt; /* the validation context */ + int n_ctxt; + xmlDocPtr doc; /* a document instance */ + int n_doc; + xmlNodePtr elem; /* an element instance */ + int n_elem; + xmlChar * qname; /* the qualified name as appearing in the serialization */ + int n_qname; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlValidCtxtPtr;n_ctxt++) { + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_elem = 0;n_elem < gen_nb_xmlNodePtr;n_elem++) { + for (n_qname = 0;n_qname < gen_nb_const_xmlChar_ptr;n_qname++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlValidCtxtPtr(n_ctxt, 0); + doc = gen_xmlDocPtr(n_doc, 1); + elem = gen_xmlNodePtr(n_elem, 2); + qname = gen_const_xmlChar_ptr(n_qname, 3); + + ret_val = xmlValidatePushElement(ctxt, doc, elem, (const xmlChar *)qname); + desret_int(ret_val); + call_tests++; + des_xmlValidCtxtPtr(n_ctxt, ctxt, 0); + des_xmlDocPtr(n_doc, doc, 1); + des_xmlNodePtr(n_elem, elem, 2); + des_const_xmlChar_ptr(n_qname, (const xmlChar *)qname, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlValidatePushElement", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_doc); + printf(" %d", n_elem); + printf(" %d", n_qname); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlValidateRoot(void) { + int test_ret = 0; + +#if defined(LIBXML_VALID_ENABLED) + int mem_base; + int ret_val; + xmlValidCtxtPtr ctxt; /* the validation context */ + int n_ctxt; + xmlDocPtr doc; /* a document instance */ + int n_doc; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlValidCtxtPtr;n_ctxt++) { + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlValidCtxtPtr(n_ctxt, 0); + doc = gen_xmlDocPtr(n_doc, 1); + + ret_val = xmlValidateRoot(ctxt, doc); + desret_int(ret_val); + call_tests++; + des_xmlValidCtxtPtr(n_ctxt, ctxt, 0); + des_xmlDocPtr(n_doc, doc, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlValidateRoot", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_doc); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + +static int +test_valid(void) { + int test_ret = 0; + + if (quiet == 0) printf("Testing valid : 50 of 70 functions ...\n"); + test_ret += test_xmlAddAttributeDecl(); + test_ret += test_xmlAddElementDecl(); + test_ret += test_xmlAddID(); + test_ret += test_xmlAddNotationDecl(); + test_ret += test_xmlAddRef(); + test_ret += test_xmlCopyAttributeTable(); + test_ret += test_xmlCopyDocElementContent(); + test_ret += test_xmlCopyElementContent(); + test_ret += test_xmlCopyElementTable(); + test_ret += test_xmlCopyEnumeration(); + test_ret += test_xmlCopyNotationTable(); + test_ret += test_xmlCreateEnumeration(); + test_ret += test_xmlDumpAttributeDecl(); + test_ret += test_xmlDumpAttributeTable(); + test_ret += test_xmlDumpElementDecl(); + test_ret += test_xmlDumpElementTable(); + test_ret += test_xmlDumpNotationDecl(); + test_ret += test_xmlDumpNotationTable(); + test_ret += test_xmlGetDtdAttrDesc(); + test_ret += test_xmlGetDtdElementDesc(); + test_ret += test_xmlGetDtdNotationDesc(); + test_ret += test_xmlGetDtdQAttrDesc(); + test_ret += test_xmlGetDtdQElementDesc(); + test_ret += test_xmlGetID(); + test_ret += test_xmlGetRefs(); + test_ret += test_xmlIsID(); + test_ret += test_xmlIsMixedElement(); + test_ret += test_xmlIsRef(); + test_ret += test_xmlNewDocElementContent(); + test_ret += test_xmlNewElementContent(); + test_ret += test_xmlNewValidCtxt(); + test_ret += test_xmlRemoveID(); + test_ret += test_xmlRemoveRef(); + test_ret += test_xmlSnprintfElementContent(); + test_ret += test_xmlSprintfElementContent(); + test_ret += test_xmlValidBuildContentModel(); + test_ret += test_xmlValidCtxtNormalizeAttributeValue(); + test_ret += test_xmlValidGetPotentialChildren(); + test_ret += test_xmlValidGetValidElements(); + test_ret += test_xmlValidNormalizeAttributeValue(); + test_ret += test_xmlValidateAttributeDecl(); + test_ret += test_xmlValidateAttributeValue(); + test_ret += test_xmlValidateDocument(); + test_ret += test_xmlValidateDocumentFinal(); + test_ret += test_xmlValidateDtd(); + test_ret += test_xmlValidateDtdFinal(); + test_ret += test_xmlValidateElement(); + test_ret += test_xmlValidateElementDecl(); + test_ret += test_xmlValidateNameValue(); + test_ret += test_xmlValidateNamesValue(); + test_ret += test_xmlValidateNmtokenValue(); + test_ret += test_xmlValidateNmtokensValue(); + test_ret += test_xmlValidateNotationDecl(); + test_ret += test_xmlValidateNotationUse(); + test_ret += test_xmlValidateOneAttribute(); + test_ret += test_xmlValidateOneElement(); + test_ret += test_xmlValidateOneNamespace(); + test_ret += test_xmlValidatePopElement(); + test_ret += test_xmlValidatePushCData(); + test_ret += test_xmlValidatePushElement(); + test_ret += test_xmlValidateRoot(); + + if (test_ret != 0) + printf("Module valid: %d errors\n", test_ret); + return(test_ret); +} + +static int +test_xmlXIncludeNewContext(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlXIncludeProcess(void) { + int test_ret = 0; + +#if defined(LIBXML_XINCLUDE_ENABLED) + int mem_base; + int ret_val; + xmlDocPtr doc; /* an XML document */ + int n_doc; + + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + mem_base = xmlMemBlocks(); + doc = gen_xmlDocPtr(n_doc, 0); + + ret_val = xmlXIncludeProcess(doc); + desret_int(ret_val); + call_tests++; + des_xmlDocPtr(n_doc, doc, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXIncludeProcess", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXIncludeProcessFlags(void) { + int test_ret = 0; + +#if defined(LIBXML_XINCLUDE_ENABLED) + int mem_base; + int ret_val; + xmlDocPtr doc; /* an XML document */ + int n_doc; + int flags; /* a set of xmlParserOption used for parsing XML includes */ + int n_flags; + + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_flags = 0;n_flags < gen_nb_int;n_flags++) { + mem_base = xmlMemBlocks(); + doc = gen_xmlDocPtr(n_doc, 0); + flags = gen_int(n_flags, 1); + + ret_val = xmlXIncludeProcessFlags(doc, flags); + desret_int(ret_val); + call_tests++; + des_xmlDocPtr(n_doc, doc, 0); + des_int(n_flags, flags, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXIncludeProcessFlags", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf(" %d", n_flags); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXIncludeProcessFlagsData(void) { + int test_ret = 0; + +#if defined(LIBXML_XINCLUDE_ENABLED) + int mem_base; + int ret_val; + xmlDocPtr doc; /* an XML document */ + int n_doc; + int flags; /* a set of xmlParserOption used for parsing XML includes */ + int n_flags; + void * data; /* application data that will be passed to the parser context in the _private field of the parser context(s) */ + int n_data; + + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_flags = 0;n_flags < gen_nb_int;n_flags++) { + for (n_data = 0;n_data < gen_nb_userdata;n_data++) { + mem_base = xmlMemBlocks(); + doc = gen_xmlDocPtr(n_doc, 0); + flags = gen_int(n_flags, 1); + data = gen_userdata(n_data, 2); + + ret_val = xmlXIncludeProcessFlagsData(doc, flags, data); + desret_int(ret_val); + call_tests++; + des_xmlDocPtr(n_doc, doc, 0); + des_int(n_flags, flags, 1); + des_userdata(n_data, data, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXIncludeProcessFlagsData", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf(" %d", n_flags); + printf(" %d", n_data); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + +#ifdef LIBXML_XINCLUDE_ENABLED + +#define gen_nb_xmlXIncludeCtxtPtr 1 +static xmlXIncludeCtxtPtr gen_xmlXIncludeCtxtPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlXIncludeCtxtPtr(int no ATTRIBUTE_UNUSED, xmlXIncludeCtxtPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} +#endif + + +static int +test_xmlXIncludeProcessNode(void) { + int test_ret = 0; + +#if defined(LIBXML_XINCLUDE_ENABLED) + int mem_base; + int ret_val; + xmlXIncludeCtxtPtr ctxt; /* an existing XInclude context */ + int n_ctxt; + xmlNodePtr node; /* a node in an XML document */ + int n_node; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXIncludeCtxtPtr;n_ctxt++) { + for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXIncludeCtxtPtr(n_ctxt, 0); + node = gen_xmlNodePtr(n_node, 1); + + ret_val = xmlXIncludeProcessNode(ctxt, node); + desret_int(ret_val); + call_tests++; + des_xmlXIncludeCtxtPtr(n_ctxt, ctxt, 0); + des_xmlNodePtr(n_node, node, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXIncludeProcessNode", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_node); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXIncludeProcessTree(void) { + int test_ret = 0; + +#if defined(LIBXML_XINCLUDE_ENABLED) + int mem_base; + int ret_val; + xmlNodePtr tree; /* a node in an XML document */ + int n_tree; + + for (n_tree = 0;n_tree < gen_nb_xmlNodePtr;n_tree++) { + mem_base = xmlMemBlocks(); + tree = gen_xmlNodePtr(n_tree, 0); + + ret_val = xmlXIncludeProcessTree(tree); + desret_int(ret_val); + call_tests++; + des_xmlNodePtr(n_tree, tree, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXIncludeProcessTree", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_tree); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXIncludeProcessTreeFlags(void) { + int test_ret = 0; + +#if defined(LIBXML_XINCLUDE_ENABLED) + int mem_base; + int ret_val; + xmlNodePtr tree; /* a node in an XML document */ + int n_tree; + int flags; /* a set of xmlParserOption used for parsing XML includes */ + int n_flags; + + for (n_tree = 0;n_tree < gen_nb_xmlNodePtr;n_tree++) { + for (n_flags = 0;n_flags < gen_nb_int;n_flags++) { + mem_base = xmlMemBlocks(); + tree = gen_xmlNodePtr(n_tree, 0); + flags = gen_int(n_flags, 1); + + ret_val = xmlXIncludeProcessTreeFlags(tree, flags); + desret_int(ret_val); + call_tests++; + des_xmlNodePtr(n_tree, tree, 0); + des_int(n_flags, flags, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXIncludeProcessTreeFlags", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_tree); + printf(" %d", n_flags); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXIncludeProcessTreeFlagsData(void) { + int test_ret = 0; + +#if defined(LIBXML_XINCLUDE_ENABLED) + int mem_base; + int ret_val; + xmlNodePtr tree; /* an XML node */ + int n_tree; + int flags; /* a set of xmlParserOption used for parsing XML includes */ + int n_flags; + void * data; /* application data that will be passed to the parser context in the _private field of the parser context(s) */ + int n_data; + + for (n_tree = 0;n_tree < gen_nb_xmlNodePtr;n_tree++) { + for (n_flags = 0;n_flags < gen_nb_int;n_flags++) { + for (n_data = 0;n_data < gen_nb_userdata;n_data++) { + mem_base = xmlMemBlocks(); + tree = gen_xmlNodePtr(n_tree, 0); + flags = gen_int(n_flags, 1); + data = gen_userdata(n_data, 2); + + ret_val = xmlXIncludeProcessTreeFlagsData(tree, flags, data); + desret_int(ret_val); + call_tests++; + des_xmlNodePtr(n_tree, tree, 0); + des_int(n_flags, flags, 1); + des_userdata(n_data, data, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXIncludeProcessTreeFlagsData", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_tree); + printf(" %d", n_flags); + printf(" %d", n_data); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXIncludeSetFlags(void) { + int test_ret = 0; + +#if defined(LIBXML_XINCLUDE_ENABLED) + int mem_base; + int ret_val; + xmlXIncludeCtxtPtr ctxt; /* an XInclude processing context */ + int n_ctxt; + int flags; /* a set of xmlParserOption used for parsing XML includes */ + int n_flags; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXIncludeCtxtPtr;n_ctxt++) { + for (n_flags = 0;n_flags < gen_nb_int;n_flags++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXIncludeCtxtPtr(n_ctxt, 0); + flags = gen_int(n_flags, 1); + + ret_val = xmlXIncludeSetFlags(ctxt, flags); + desret_int(ret_val); + call_tests++; + des_xmlXIncludeCtxtPtr(n_ctxt, ctxt, 0); + des_int(n_flags, flags, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXIncludeSetFlags", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_flags); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + +static int +test_xinclude(void) { + int test_ret = 0; + + if (quiet == 0) printf("Testing xinclude : 8 of 10 functions ...\n"); + test_ret += test_xmlXIncludeNewContext(); + test_ret += test_xmlXIncludeProcess(); + test_ret += test_xmlXIncludeProcessFlags(); + test_ret += test_xmlXIncludeProcessFlagsData(); + test_ret += test_xmlXIncludeProcessNode(); + test_ret += test_xmlXIncludeProcessTree(); + test_ret += test_xmlXIncludeProcessTreeFlags(); + test_ret += test_xmlXIncludeProcessTreeFlagsData(); + test_ret += test_xmlXIncludeSetFlags(); + + if (test_ret != 0) + printf("Module xinclude: %d errors\n", test_ret); + return(test_ret); +} + +static int +test_xmlAllocOutputBuffer(void) { + int test_ret = 0; + +#if defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + xmlOutputBufferPtr ret_val; + xmlCharEncodingHandlerPtr encoder; /* the encoding converter or NULL */ + int n_encoder; + + for (n_encoder = 0;n_encoder < gen_nb_xmlCharEncodingHandlerPtr;n_encoder++) { + mem_base = xmlMemBlocks(); + encoder = gen_xmlCharEncodingHandlerPtr(n_encoder, 0); + + ret_val = xmlAllocOutputBuffer(encoder); + desret_xmlOutputBufferPtr(ret_val); + call_tests++; + des_xmlCharEncodingHandlerPtr(n_encoder, encoder, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlAllocOutputBuffer", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_encoder); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlAllocParserInputBuffer(void) { + int test_ret = 0; + + int mem_base; + xmlParserInputBufferPtr ret_val; + xmlCharEncoding enc; /* the charset encoding if known */ + int n_enc; + + for (n_enc = 0;n_enc < gen_nb_xmlCharEncoding;n_enc++) { + mem_base = xmlMemBlocks(); + enc = gen_xmlCharEncoding(n_enc, 0); + + ret_val = xmlAllocParserInputBuffer(enc); + desret_xmlParserInputBufferPtr(ret_val); + call_tests++; + des_xmlCharEncoding(n_enc, enc, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlAllocParserInputBuffer", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_enc); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlCheckFilename(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + char * path; /* the path to check */ + int n_path; + + for (n_path = 0;n_path < gen_nb_const_char_ptr;n_path++) { + mem_base = xmlMemBlocks(); + path = gen_const_char_ptr(n_path, 0); + + ret_val = xmlCheckFilename((const char *)path); + desret_int(ret_val); + call_tests++; + des_const_char_ptr(n_path, (const char *)path, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlCheckFilename", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_path); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlCheckHTTPInput(void) { + int test_ret = 0; + + int mem_base; + xmlParserInputPtr ret_val; + xmlParserCtxtPtr ctxt; /* an XML parser context */ + int n_ctxt; + xmlParserInputPtr ret; /* an XML parser input */ + int n_ret; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) { + for (n_ret = 0;n_ret < gen_nb_xmlParserInputPtr;n_ret++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0); + ret = gen_xmlParserInputPtr(n_ret, 1); + + ret_val = xmlCheckHTTPInput(ctxt, ret); + desret_xmlParserInputPtr(ret_val); + call_tests++; + des_xmlParserCtxtPtr(n_ctxt, ctxt, 0); + des_xmlParserInputPtr(n_ret, ret, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlCheckHTTPInput", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_ret); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlCleanupInputCallbacks(void) { + int test_ret = 0; + + int mem_base; + + mem_base = xmlMemBlocks(); + + xmlCleanupInputCallbacks(); + call_tests++; + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlCleanupInputCallbacks", + xmlMemBlocks() - mem_base); + test_ret++; + printf("\n"); + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlCleanupOutputCallbacks(void) { + int test_ret = 0; + +#if defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + + mem_base = xmlMemBlocks(); + + xmlCleanupOutputCallbacks(); + call_tests++; + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlCleanupOutputCallbacks", + xmlMemBlocks() - mem_base); + test_ret++; + printf("\n"); + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlFileClose(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + void * context; /* the I/O context */ + int n_context; + + for (n_context = 0;n_context < gen_nb_void_ptr;n_context++) { + mem_base = xmlMemBlocks(); + context = gen_void_ptr(n_context, 0); + + ret_val = xmlFileClose(context); + desret_int(ret_val); + call_tests++; + des_void_ptr(n_context, context, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlFileClose", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_context); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlFileMatch(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + const char * filename; /* the URI for matching */ + int n_filename; + + for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) { + mem_base = xmlMemBlocks(); + filename = gen_filepath(n_filename, 0); + + ret_val = xmlFileMatch(filename); + desret_int(ret_val); + call_tests++; + des_filepath(n_filename, filename, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlFileMatch", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_filename); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlFileOpen(void) { + int test_ret = 0; + + int mem_base; + void * ret_val; + const char * filename; /* the URI for matching */ + int n_filename; + + for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) { + mem_base = xmlMemBlocks(); + filename = gen_filepath(n_filename, 0); + + ret_val = xmlFileOpen(filename); + desret_void_ptr(ret_val); + call_tests++; + des_filepath(n_filename, filename, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlFileOpen", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_filename); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlFileRead(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + void * context; /* the I/O context */ + int n_context; + char * buffer; /* where to drop data */ + int n_buffer; + int len; /* number of bytes to write */ + int n_len; + + for (n_context = 0;n_context < gen_nb_void_ptr;n_context++) { + for (n_buffer = 0;n_buffer < gen_nb_char_ptr;n_buffer++) { + for (n_len = 0;n_len < gen_nb_int;n_len++) { + mem_base = xmlMemBlocks(); + context = gen_void_ptr(n_context, 0); + buffer = gen_char_ptr(n_buffer, 1); + len = gen_int(n_len, 2); + + ret_val = xmlFileRead(context, buffer, len); + desret_int(ret_val); + call_tests++; + des_void_ptr(n_context, context, 0); + des_char_ptr(n_buffer, buffer, 1); + des_int(n_len, len, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlFileRead", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_context); + printf(" %d", n_buffer); + printf(" %d", n_len); + printf("\n"); + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlIOFTPClose(void) { + int test_ret = 0; + +#if defined(LIBXML_FTP_ENABLED) + int mem_base; + int ret_val; + void * context; /* the I/O context */ + int n_context; + + for (n_context = 0;n_context < gen_nb_void_ptr;n_context++) { + mem_base = xmlMemBlocks(); + context = gen_void_ptr(n_context, 0); + + ret_val = xmlIOFTPClose(context); + desret_int(ret_val); + call_tests++; + des_void_ptr(n_context, context, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlIOFTPClose", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_context); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlIOFTPMatch(void) { + int test_ret = 0; + +#if defined(LIBXML_FTP_ENABLED) + int mem_base; + int ret_val; + const char * filename; /* the URI for matching */ + int n_filename; + + for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) { + mem_base = xmlMemBlocks(); + filename = gen_filepath(n_filename, 0); + + ret_val = xmlIOFTPMatch(filename); + desret_int(ret_val); + call_tests++; + des_filepath(n_filename, filename, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlIOFTPMatch", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_filename); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlIOFTPOpen(void) { + int test_ret = 0; + +#if defined(LIBXML_FTP_ENABLED) + int mem_base; + void * ret_val; + const char * filename; /* the URI for matching */ + int n_filename; + + for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) { + mem_base = xmlMemBlocks(); + filename = gen_filepath(n_filename, 0); + + ret_val = xmlIOFTPOpen(filename); + desret_void_ptr(ret_val); + call_tests++; + des_filepath(n_filename, filename, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlIOFTPOpen", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_filename); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlIOFTPRead(void) { + int test_ret = 0; + +#if defined(LIBXML_FTP_ENABLED) + int mem_base; + int ret_val; + void * context; /* the I/O context */ + int n_context; + char * buffer; /* where to drop data */ + int n_buffer; + int len; /* number of bytes to write */ + int n_len; + + for (n_context = 0;n_context < gen_nb_void_ptr;n_context++) { + for (n_buffer = 0;n_buffer < gen_nb_char_ptr;n_buffer++) { + for (n_len = 0;n_len < gen_nb_int;n_len++) { + mem_base = xmlMemBlocks(); + context = gen_void_ptr(n_context, 0); + buffer = gen_char_ptr(n_buffer, 1); + len = gen_int(n_len, 2); + + ret_val = xmlIOFTPRead(context, buffer, len); + desret_int(ret_val); + call_tests++; + des_void_ptr(n_context, context, 0); + des_char_ptr(n_buffer, buffer, 1); + des_int(n_len, len, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlIOFTPRead", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_context); + printf(" %d", n_buffer); + printf(" %d", n_len); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlIOHTTPClose(void) { + int test_ret = 0; + +#if defined(LIBXML_HTTP_ENABLED) + int mem_base; + int ret_val; + void * context; /* the I/O context */ + int n_context; + + for (n_context = 0;n_context < gen_nb_void_ptr;n_context++) { + mem_base = xmlMemBlocks(); + context = gen_void_ptr(n_context, 0); + + ret_val = xmlIOHTTPClose(context); + desret_int(ret_val); + call_tests++; + des_void_ptr(n_context, context, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlIOHTTPClose", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_context); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlIOHTTPMatch(void) { + int test_ret = 0; + +#if defined(LIBXML_HTTP_ENABLED) + int mem_base; + int ret_val; + const char * filename; /* the URI for matching */ + int n_filename; + + for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) { + mem_base = xmlMemBlocks(); + filename = gen_filepath(n_filename, 0); + + ret_val = xmlIOHTTPMatch(filename); + desret_int(ret_val); + call_tests++; + des_filepath(n_filename, filename, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlIOHTTPMatch", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_filename); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlIOHTTPOpen(void) { + int test_ret = 0; + +#if defined(LIBXML_HTTP_ENABLED) + int mem_base; + void * ret_val; + const char * filename; /* the URI for matching */ + int n_filename; + + for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) { + mem_base = xmlMemBlocks(); + filename = gen_filepath(n_filename, 0); + + ret_val = xmlIOHTTPOpen(filename); + desret_xmlNanoHTTPCtxtPtr(ret_val); + call_tests++; + des_filepath(n_filename, filename, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlIOHTTPOpen", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_filename); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlIOHTTPRead(void) { + int test_ret = 0; + +#if defined(LIBXML_HTTP_ENABLED) + int mem_base; + int ret_val; + void * context; /* the I/O context */ + int n_context; + char * buffer; /* where to drop data */ + int n_buffer; + int len; /* number of bytes to write */ + int n_len; + + for (n_context = 0;n_context < gen_nb_void_ptr;n_context++) { + for (n_buffer = 0;n_buffer < gen_nb_char_ptr;n_buffer++) { + for (n_len = 0;n_len < gen_nb_int;n_len++) { + mem_base = xmlMemBlocks(); + context = gen_void_ptr(n_context, 0); + buffer = gen_char_ptr(n_buffer, 1); + len = gen_int(n_len, 2); + + ret_val = xmlIOHTTPRead(context, buffer, len); + desret_int(ret_val); + call_tests++; + des_void_ptr(n_context, context, 0); + des_char_ptr(n_buffer, buffer, 1); + des_int(n_len, len, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlIOHTTPRead", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_context); + printf(" %d", n_buffer); + printf(" %d", n_len); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlNoNetExternalEntityLoader(void) { + int test_ret = 0; + + int mem_base; + xmlParserInputPtr ret_val; + const char * URL; /* the URL for the entity to load */ + int n_URL; + char * ID; /* the System ID for the entity to load */ + int n_ID; + xmlParserCtxtPtr ctxt; /* the context in which the entity is called or NULL */ + int n_ctxt; + + for (n_URL = 0;n_URL < gen_nb_filepath;n_URL++) { + for (n_ID = 0;n_ID < gen_nb_const_char_ptr;n_ID++) { + for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) { + mem_base = xmlMemBlocks(); + URL = gen_filepath(n_URL, 0); + ID = gen_const_char_ptr(n_ID, 1); + ctxt = gen_xmlParserCtxtPtr(n_ctxt, 2); + + ret_val = xmlNoNetExternalEntityLoader(URL, (const char *)ID, ctxt); + desret_xmlParserInputPtr(ret_val); + call_tests++; + des_filepath(n_URL, URL, 0); + des_const_char_ptr(n_ID, (const char *)ID, 1); + des_xmlParserCtxtPtr(n_ctxt, ctxt, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNoNetExternalEntityLoader", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_URL); + printf(" %d", n_ID); + printf(" %d", n_ctxt); + printf("\n"); + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlNormalizeWindowsPath(void) { + int test_ret = 0; + + int mem_base; + xmlChar * ret_val; + xmlChar * path; /* the input file path */ + int n_path; + + for (n_path = 0;n_path < gen_nb_const_xmlChar_ptr;n_path++) { + mem_base = xmlMemBlocks(); + path = gen_const_xmlChar_ptr(n_path, 0); + + ret_val = xmlNormalizeWindowsPath((const xmlChar *)path); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_path, (const xmlChar *)path, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNormalizeWindowsPath", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_path); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlOutputBufferCreateBuffer(void) { + int test_ret = 0; + +#if defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + xmlOutputBufferPtr ret_val; + xmlBufferPtr buffer; /* a xmlBufferPtr */ + int n_buffer; + xmlCharEncodingHandlerPtr encoder; /* the encoding converter or NULL */ + int n_encoder; + + for (n_buffer = 0;n_buffer < gen_nb_xmlBufferPtr;n_buffer++) { + for (n_encoder = 0;n_encoder < gen_nb_xmlCharEncodingHandlerPtr;n_encoder++) { + mem_base = xmlMemBlocks(); + buffer = gen_xmlBufferPtr(n_buffer, 0); + encoder = gen_xmlCharEncodingHandlerPtr(n_encoder, 1); + + ret_val = xmlOutputBufferCreateBuffer(buffer, encoder); + desret_xmlOutputBufferPtr(ret_val); + call_tests++; + des_xmlBufferPtr(n_buffer, buffer, 0); + des_xmlCharEncodingHandlerPtr(n_encoder, encoder, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlOutputBufferCreateBuffer", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_buffer); + printf(" %d", n_encoder); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlOutputBufferCreateFd(void) { + int test_ret = 0; + +#if defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + xmlOutputBufferPtr ret_val; + int fd; /* a file descriptor number */ + int n_fd; + xmlCharEncodingHandlerPtr encoder; /* the encoding converter or NULL */ + int n_encoder; + + for (n_fd = 0;n_fd < gen_nb_int;n_fd++) { + for (n_encoder = 0;n_encoder < gen_nb_xmlCharEncodingHandlerPtr;n_encoder++) { + mem_base = xmlMemBlocks(); + fd = gen_int(n_fd, 0); + encoder = gen_xmlCharEncodingHandlerPtr(n_encoder, 1); + + ret_val = xmlOutputBufferCreateFd(fd, encoder); + desret_xmlOutputBufferPtr(ret_val); + call_tests++; + des_int(n_fd, fd, 0); + des_xmlCharEncodingHandlerPtr(n_encoder, encoder, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlOutputBufferCreateFd", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_fd); + printf(" %d", n_encoder); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlOutputBufferCreateFile(void) { + int test_ret = 0; + +#if defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + xmlOutputBufferPtr ret_val; + FILE * file; /* a FILE* */ + int n_file; + xmlCharEncodingHandlerPtr encoder; /* the encoding converter or NULL */ + int n_encoder; + + for (n_file = 0;n_file < gen_nb_FILE_ptr;n_file++) { + for (n_encoder = 0;n_encoder < gen_nb_xmlCharEncodingHandlerPtr;n_encoder++) { + mem_base = xmlMemBlocks(); + file = gen_FILE_ptr(n_file, 0); + encoder = gen_xmlCharEncodingHandlerPtr(n_encoder, 1); + + ret_val = xmlOutputBufferCreateFile(file, encoder); + desret_xmlOutputBufferPtr(ret_val); + call_tests++; + des_FILE_ptr(n_file, file, 0); + des_xmlCharEncodingHandlerPtr(n_encoder, encoder, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlOutputBufferCreateFile", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_file); + printf(" %d", n_encoder); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlOutputBufferCreateFilename(void) { + int test_ret = 0; + +#if defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + xmlOutputBufferPtr ret_val; + const char * URI; /* a C string containing the URI or filename */ + int n_URI; + xmlCharEncodingHandlerPtr encoder; /* the encoding converter or NULL */ + int n_encoder; + int compression; /* the compression ration (0 none, 9 max). */ + int n_compression; + + for (n_URI = 0;n_URI < gen_nb_fileoutput;n_URI++) { + for (n_encoder = 0;n_encoder < gen_nb_xmlCharEncodingHandlerPtr;n_encoder++) { + for (n_compression = 0;n_compression < gen_nb_int;n_compression++) { + mem_base = xmlMemBlocks(); + URI = gen_fileoutput(n_URI, 0); + encoder = gen_xmlCharEncodingHandlerPtr(n_encoder, 1); + compression = gen_int(n_compression, 2); + + ret_val = xmlOutputBufferCreateFilename(URI, encoder, compression); + desret_xmlOutputBufferPtr(ret_val); + call_tests++; + des_fileoutput(n_URI, URI, 0); + des_xmlCharEncodingHandlerPtr(n_encoder, encoder, 1); + des_int(n_compression, compression, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlOutputBufferCreateFilename", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_URI); + printf(" %d", n_encoder); + printf(" %d", n_compression); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlOutputBufferFlush(void) { + int test_ret = 0; + +#if defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + int ret_val; + xmlOutputBufferPtr out; /* a buffered output */ + int n_out; + + for (n_out = 0;n_out < gen_nb_xmlOutputBufferPtr;n_out++) { + mem_base = xmlMemBlocks(); + out = gen_xmlOutputBufferPtr(n_out, 0); + + ret_val = xmlOutputBufferFlush(out); + desret_int(ret_val); + call_tests++; + des_xmlOutputBufferPtr(n_out, out, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlOutputBufferFlush", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_out); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlOutputBufferGetContent(void) { + int test_ret = 0; + +#if defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + const xmlChar * ret_val; + xmlOutputBufferPtr out; /* an xmlOutputBufferPtr */ + int n_out; + + for (n_out = 0;n_out < gen_nb_xmlOutputBufferPtr;n_out++) { + mem_base = xmlMemBlocks(); + out = gen_xmlOutputBufferPtr(n_out, 0); + + ret_val = xmlOutputBufferGetContent(out); + desret_const_xmlChar_ptr(ret_val); + call_tests++; + des_xmlOutputBufferPtr(n_out, out, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlOutputBufferGetContent", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_out); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlOutputBufferGetSize(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlOutputBufferWrite(void) { + int test_ret = 0; + +#if defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + int ret_val; + xmlOutputBufferPtr out; /* a buffered parser output */ + int n_out; + int len; /* the size in bytes of the array. */ + int n_len; + char * buf; /* an char array */ + int n_buf; + + for (n_out = 0;n_out < gen_nb_xmlOutputBufferPtr;n_out++) { + for (n_len = 0;n_len < gen_nb_int;n_len++) { + for (n_buf = 0;n_buf < gen_nb_const_char_ptr;n_buf++) { + mem_base = xmlMemBlocks(); + out = gen_xmlOutputBufferPtr(n_out, 0); + len = gen_int(n_len, 1); + buf = gen_const_char_ptr(n_buf, 2); + + ret_val = xmlOutputBufferWrite(out, len, (const char *)buf); + desret_int(ret_val); + call_tests++; + des_xmlOutputBufferPtr(n_out, out, 0); + des_int(n_len, len, 1); + des_const_char_ptr(n_buf, (const char *)buf, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlOutputBufferWrite", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_out); + printf(" %d", n_len); + printf(" %d", n_buf); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlOutputBufferWriteEscape(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlOutputBufferWriteString(void) { + int test_ret = 0; + +#if defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + int ret_val; + xmlOutputBufferPtr out; /* a buffered parser output */ + int n_out; + char * str; /* a zero terminated C string */ + int n_str; + + for (n_out = 0;n_out < gen_nb_xmlOutputBufferPtr;n_out++) { + for (n_str = 0;n_str < gen_nb_const_char_ptr;n_str++) { + mem_base = xmlMemBlocks(); + out = gen_xmlOutputBufferPtr(n_out, 0); + str = gen_const_char_ptr(n_str, 1); + + ret_val = xmlOutputBufferWriteString(out, (const char *)str); + desret_int(ret_val); + call_tests++; + des_xmlOutputBufferPtr(n_out, out, 0); + des_const_char_ptr(n_str, (const char *)str, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlOutputBufferWriteString", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_out); + printf(" %d", n_str); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlParserGetDirectory(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlParserInputBufferCreateFd(void) { + int test_ret = 0; + + int mem_base; + xmlParserInputBufferPtr ret_val; + int fd; /* a file descriptor number */ + int n_fd; + xmlCharEncoding enc; /* the charset encoding if known */ + int n_enc; + + for (n_fd = 0;n_fd < gen_nb_int;n_fd++) { + for (n_enc = 0;n_enc < gen_nb_xmlCharEncoding;n_enc++) { + mem_base = xmlMemBlocks(); + fd = gen_int(n_fd, 0); + enc = gen_xmlCharEncoding(n_enc, 1); + if (fd >= 0) fd = -1; + + ret_val = xmlParserInputBufferCreateFd(fd, enc); + desret_xmlParserInputBufferPtr(ret_val); + call_tests++; + des_int(n_fd, fd, 0); + des_xmlCharEncoding(n_enc, enc, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlParserInputBufferCreateFd", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_fd); + printf(" %d", n_enc); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlParserInputBufferCreateFile(void) { + int test_ret = 0; + + int mem_base; + xmlParserInputBufferPtr ret_val; + FILE * file; /* a FILE* */ + int n_file; + xmlCharEncoding enc; /* the charset encoding if known */ + int n_enc; + + for (n_file = 0;n_file < gen_nb_FILE_ptr;n_file++) { + for (n_enc = 0;n_enc < gen_nb_xmlCharEncoding;n_enc++) { + mem_base = xmlMemBlocks(); + file = gen_FILE_ptr(n_file, 0); + enc = gen_xmlCharEncoding(n_enc, 1); + + ret_val = xmlParserInputBufferCreateFile(file, enc); + desret_xmlParserInputBufferPtr(ret_val); + call_tests++; + des_FILE_ptr(n_file, file, 0); + des_xmlCharEncoding(n_enc, enc, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlParserInputBufferCreateFile", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_file); + printf(" %d", n_enc); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlParserInputBufferCreateFilename(void) { + int test_ret = 0; + + int mem_base; + xmlParserInputBufferPtr ret_val; + const char * URI; /* a C string containing the URI or filename */ + int n_URI; + xmlCharEncoding enc; /* the charset encoding if known */ + int n_enc; + + for (n_URI = 0;n_URI < gen_nb_fileoutput;n_URI++) { + for (n_enc = 0;n_enc < gen_nb_xmlCharEncoding;n_enc++) { + mem_base = xmlMemBlocks(); + URI = gen_fileoutput(n_URI, 0); + enc = gen_xmlCharEncoding(n_enc, 1); + + ret_val = xmlParserInputBufferCreateFilename(URI, enc); + desret_xmlParserInputBufferPtr(ret_val); + call_tests++; + des_fileoutput(n_URI, URI, 0); + des_xmlCharEncoding(n_enc, enc, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlParserInputBufferCreateFilename", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_URI); + printf(" %d", n_enc); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlParserInputBufferCreateMem(void) { + int test_ret = 0; + + int mem_base; + xmlParserInputBufferPtr ret_val; + char * mem; /* the memory input */ + int n_mem; + int size; /* the length of the memory block */ + int n_size; + xmlCharEncoding enc; /* the charset encoding if known */ + int n_enc; + + for (n_mem = 0;n_mem < gen_nb_const_char_ptr;n_mem++) { + for (n_size = 0;n_size < gen_nb_int;n_size++) { + for (n_enc = 0;n_enc < gen_nb_xmlCharEncoding;n_enc++) { + mem_base = xmlMemBlocks(); + mem = gen_const_char_ptr(n_mem, 0); + size = gen_int(n_size, 1); + enc = gen_xmlCharEncoding(n_enc, 2); + + ret_val = xmlParserInputBufferCreateMem((const char *)mem, size, enc); + desret_xmlParserInputBufferPtr(ret_val); + call_tests++; + des_const_char_ptr(n_mem, (const char *)mem, 0); + des_int(n_size, size, 1); + des_xmlCharEncoding(n_enc, enc, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlParserInputBufferCreateMem", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_mem); + printf(" %d", n_size); + printf(" %d", n_enc); + printf("\n"); + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlParserInputBufferCreateStatic(void) { + int test_ret = 0; + + int mem_base; + xmlParserInputBufferPtr ret_val; + char * mem; /* the memory input */ + int n_mem; + int size; /* the length of the memory block */ + int n_size; + xmlCharEncoding enc; /* the charset encoding if known */ + int n_enc; + + for (n_mem = 0;n_mem < gen_nb_const_char_ptr;n_mem++) { + for (n_size = 0;n_size < gen_nb_int;n_size++) { + for (n_enc = 0;n_enc < gen_nb_xmlCharEncoding;n_enc++) { + mem_base = xmlMemBlocks(); + mem = gen_const_char_ptr(n_mem, 0); + size = gen_int(n_size, 1); + enc = gen_xmlCharEncoding(n_enc, 2); + + ret_val = xmlParserInputBufferCreateStatic((const char *)mem, size, enc); + desret_xmlParserInputBufferPtr(ret_val); + call_tests++; + des_const_char_ptr(n_mem, (const char *)mem, 0); + des_int(n_size, size, 1); + des_xmlCharEncoding(n_enc, enc, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlParserInputBufferCreateStatic", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_mem); + printf(" %d", n_size); + printf(" %d", n_enc); + printf("\n"); + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlParserInputBufferGrow(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlParserInputBufferPtr in; /* a buffered parser input */ + int n_in; + int len; /* indicative value of the amount of chars to read */ + int n_len; + + for (n_in = 0;n_in < gen_nb_xmlParserInputBufferPtr;n_in++) { + for (n_len = 0;n_len < gen_nb_int;n_len++) { + mem_base = xmlMemBlocks(); + in = gen_xmlParserInputBufferPtr(n_in, 0); + len = gen_int(n_len, 1); + + ret_val = xmlParserInputBufferGrow(in, len); + desret_int(ret_val); + call_tests++; + des_xmlParserInputBufferPtr(n_in, in, 0); + des_int(n_len, len, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlParserInputBufferGrow", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_in); + printf(" %d", n_len); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlParserInputBufferPush(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlParserInputBufferPtr in; /* a buffered parser input */ + int n_in; + int len; /* the size in bytes of the array. */ + int n_len; + char * buf; /* an char array */ + int n_buf; + + for (n_in = 0;n_in < gen_nb_xmlParserInputBufferPtr;n_in++) { + for (n_len = 0;n_len < gen_nb_int;n_len++) { + for (n_buf = 0;n_buf < gen_nb_const_char_ptr;n_buf++) { + mem_base = xmlMemBlocks(); + in = gen_xmlParserInputBufferPtr(n_in, 0); + len = gen_int(n_len, 1); + buf = gen_const_char_ptr(n_buf, 2); + + ret_val = xmlParserInputBufferPush(in, len, (const char *)buf); + desret_int(ret_val); + call_tests++; + des_xmlParserInputBufferPtr(n_in, in, 0); + des_int(n_len, len, 1); + des_const_char_ptr(n_buf, (const char *)buf, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlParserInputBufferPush", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_in); + printf(" %d", n_len); + printf(" %d", n_buf); + printf("\n"); + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlParserInputBufferRead(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlParserInputBufferPtr in; /* a buffered parser input */ + int n_in; + int len; /* indicative value of the amount of chars to read */ + int n_len; + + for (n_in = 0;n_in < gen_nb_xmlParserInputBufferPtr;n_in++) { + for (n_len = 0;n_len < gen_nb_int;n_len++) { + mem_base = xmlMemBlocks(); + in = gen_xmlParserInputBufferPtr(n_in, 0); + len = gen_int(n_len, 1); + + ret_val = xmlParserInputBufferRead(in, len); + desret_int(ret_val); + call_tests++; + des_xmlParserInputBufferPtr(n_in, in, 0); + des_int(n_len, len, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlParserInputBufferRead", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_in); + printf(" %d", n_len); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlPopInputCallbacks(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + + mem_base = xmlMemBlocks(); + + ret_val = xmlPopInputCallbacks(); + desret_int(ret_val); + call_tests++; + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlPopInputCallbacks", + xmlMemBlocks() - mem_base); + test_ret++; + printf("\n"); + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlRegisterDefaultInputCallbacks(void) { + int test_ret = 0; + + int mem_base; + + mem_base = xmlMemBlocks(); + + xmlRegisterDefaultInputCallbacks(); + call_tests++; + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlRegisterDefaultInputCallbacks", + xmlMemBlocks() - mem_base); + test_ret++; + printf("\n"); + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlRegisterDefaultOutputCallbacks(void) { + int test_ret = 0; + +#if defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + + mem_base = xmlMemBlocks(); + + xmlRegisterDefaultOutputCallbacks(); + call_tests++; + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlRegisterDefaultOutputCallbacks", + xmlMemBlocks() - mem_base); + test_ret++; + printf("\n"); + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlRegisterHTTPPostCallbacks(void) { + int test_ret = 0; + +#if defined(LIBXML_OUTPUT_ENABLED) && defined(LIBXML_HTTP_ENABLED) + int mem_base; + + mem_base = xmlMemBlocks(); + + xmlRegisterHTTPPostCallbacks(); + call_tests++; + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlRegisterHTTPPostCallbacks", + xmlMemBlocks() - mem_base); + test_ret++; + printf("\n"); + } + function_tests++; +#endif + + return(test_ret); +} + +static int +test_xmlIO(void) { + int test_ret = 0; + + if (quiet == 0) printf("Testing xmlIO : 40 of 50 functions ...\n"); + test_ret += test_xmlAllocOutputBuffer(); + test_ret += test_xmlAllocParserInputBuffer(); + test_ret += test_xmlCheckFilename(); + test_ret += test_xmlCheckHTTPInput(); + test_ret += test_xmlCleanupInputCallbacks(); + test_ret += test_xmlCleanupOutputCallbacks(); + test_ret += test_xmlFileClose(); + test_ret += test_xmlFileMatch(); + test_ret += test_xmlFileOpen(); + test_ret += test_xmlFileRead(); + test_ret += test_xmlIOFTPClose(); + test_ret += test_xmlIOFTPMatch(); + test_ret += test_xmlIOFTPOpen(); + test_ret += test_xmlIOFTPRead(); + test_ret += test_xmlIOHTTPClose(); + test_ret += test_xmlIOHTTPMatch(); + test_ret += test_xmlIOHTTPOpen(); + test_ret += test_xmlIOHTTPRead(); + test_ret += test_xmlNoNetExternalEntityLoader(); + test_ret += test_xmlNormalizeWindowsPath(); + test_ret += test_xmlOutputBufferCreateBuffer(); + test_ret += test_xmlOutputBufferCreateFd(); + test_ret += test_xmlOutputBufferCreateFile(); + test_ret += test_xmlOutputBufferCreateFilename(); + test_ret += test_xmlOutputBufferFlush(); + test_ret += test_xmlOutputBufferGetContent(); + test_ret += test_xmlOutputBufferGetSize(); + test_ret += test_xmlOutputBufferWrite(); + test_ret += test_xmlOutputBufferWriteEscape(); + test_ret += test_xmlOutputBufferWriteString(); + test_ret += test_xmlParserGetDirectory(); + test_ret += test_xmlParserInputBufferCreateFd(); + test_ret += test_xmlParserInputBufferCreateFile(); + test_ret += test_xmlParserInputBufferCreateFilename(); + test_ret += test_xmlParserInputBufferCreateMem(); + test_ret += test_xmlParserInputBufferCreateStatic(); + test_ret += test_xmlParserInputBufferGrow(); + test_ret += test_xmlParserInputBufferPush(); + test_ret += test_xmlParserInputBufferRead(); + test_ret += test_xmlPopInputCallbacks(); + test_ret += test_xmlRegisterDefaultInputCallbacks(); + test_ret += test_xmlRegisterDefaultOutputCallbacks(); + test_ret += test_xmlRegisterHTTPPostCallbacks(); + + if (test_ret != 0) + printf("Module xmlIO: %d errors\n", test_ret); + return(test_ret); +} +#ifdef LIBXML_AUTOMATA_ENABLED + +#define gen_nb_xmlAutomataPtr 1 +static xmlAutomataPtr gen_xmlAutomataPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlAutomataPtr(int no ATTRIBUTE_UNUSED, xmlAutomataPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} +#endif + + +static int +test_xmlAutomataCompile(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlAutomataGetInitState(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlAutomataIsDeterminist(void) { + int test_ret = 0; + +#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED) + int mem_base; + int ret_val; + xmlAutomataPtr am; /* an automata */ + int n_am; + + for (n_am = 0;n_am < gen_nb_xmlAutomataPtr;n_am++) { + mem_base = xmlMemBlocks(); + am = gen_xmlAutomataPtr(n_am, 0); + + ret_val = xmlAutomataIsDeterminist(am); + desret_int(ret_val); + call_tests++; + des_xmlAutomataPtr(n_am, am, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlAutomataIsDeterminist", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_am); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + +#ifdef LIBXML_AUTOMATA_ENABLED + +#define gen_nb_xmlAutomataStatePtr 1 +static xmlAutomataStatePtr gen_xmlAutomataStatePtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlAutomataStatePtr(int no ATTRIBUTE_UNUSED, xmlAutomataStatePtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} +#endif + + +static int +test_xmlAutomataNewAllTrans(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlAutomataNewCountTrans(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlAutomataNewCountTrans2(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlAutomataNewCountedTrans(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlAutomataNewCounter(void) { + int test_ret = 0; + +#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED) + int mem_base; + int ret_val; + xmlAutomataPtr am; /* an automata */ + int n_am; + int min; /* the minimal value on the counter */ + int n_min; + int max; /* the maximal value on the counter */ + int n_max; + + for (n_am = 0;n_am < gen_nb_xmlAutomataPtr;n_am++) { + for (n_min = 0;n_min < gen_nb_int;n_min++) { + for (n_max = 0;n_max < gen_nb_int;n_max++) { + mem_base = xmlMemBlocks(); + am = gen_xmlAutomataPtr(n_am, 0); + min = gen_int(n_min, 1); + max = gen_int(n_max, 2); + + ret_val = xmlAutomataNewCounter(am, min, max); + desret_int(ret_val); + call_tests++; + des_xmlAutomataPtr(n_am, am, 0); + des_int(n_min, min, 1); + des_int(n_max, max, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlAutomataNewCounter", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_am); + printf(" %d", n_min); + printf(" %d", n_max); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlAutomataNewCounterTrans(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlAutomataNewEpsilon(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlAutomataNewNegTrans(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlAutomataNewOnceTrans(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlAutomataNewOnceTrans2(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlAutomataNewState(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlAutomataNewTransition(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlAutomataNewTransition2(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlAutomataSetFinalState(void) { + int test_ret = 0; + +#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED) + int mem_base; + int ret_val; + xmlAutomataPtr am; /* an automata */ + int n_am; + xmlAutomataStatePtr state; /* a state in this automata */ + int n_state; + + for (n_am = 0;n_am < gen_nb_xmlAutomataPtr;n_am++) { + for (n_state = 0;n_state < gen_nb_xmlAutomataStatePtr;n_state++) { + mem_base = xmlMemBlocks(); + am = gen_xmlAutomataPtr(n_am, 0); + state = gen_xmlAutomataStatePtr(n_state, 1); + + ret_val = xmlAutomataSetFinalState(am, state); + desret_int(ret_val); + call_tests++; + des_xmlAutomataPtr(n_am, am, 0); + des_xmlAutomataStatePtr(n_state, state, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlAutomataSetFinalState", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_am); + printf(" %d", n_state); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlNewAutomata(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + +static int +test_xmlautomata(void) { + int test_ret = 0; + + if (quiet == 0) printf("Testing xmlautomata : 3 of 19 functions ...\n"); + test_ret += test_xmlAutomataCompile(); + test_ret += test_xmlAutomataGetInitState(); + test_ret += test_xmlAutomataIsDeterminist(); + test_ret += test_xmlAutomataNewAllTrans(); + test_ret += test_xmlAutomataNewCountTrans(); + test_ret += test_xmlAutomataNewCountTrans2(); + test_ret += test_xmlAutomataNewCountedTrans(); + test_ret += test_xmlAutomataNewCounter(); + test_ret += test_xmlAutomataNewCounterTrans(); + test_ret += test_xmlAutomataNewEpsilon(); + test_ret += test_xmlAutomataNewNegTrans(); + test_ret += test_xmlAutomataNewOnceTrans(); + test_ret += test_xmlAutomataNewOnceTrans2(); + test_ret += test_xmlAutomataNewState(); + test_ret += test_xmlAutomataNewTransition(); + test_ret += test_xmlAutomataNewTransition2(); + test_ret += test_xmlAutomataSetFinalState(); + test_ret += test_xmlNewAutomata(); + + if (test_ret != 0) + printf("Module xmlautomata: %d errors\n", test_ret); + return(test_ret); +} + +#define gen_nb_xmlGenericErrorFunc_ptr 1 +static xmlGenericErrorFunc * gen_xmlGenericErrorFunc_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlGenericErrorFunc_ptr(int no ATTRIBUTE_UNUSED, xmlGenericErrorFunc * val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +static int +test_initGenericErrorDefaultFunc(void) { + int test_ret = 0; + + int mem_base; + xmlGenericErrorFunc * handler; /* the handler */ + int n_handler; + + for (n_handler = 0;n_handler < gen_nb_xmlGenericErrorFunc_ptr;n_handler++) { + mem_base = xmlMemBlocks(); + handler = gen_xmlGenericErrorFunc_ptr(n_handler, 0); + + initGenericErrorDefaultFunc(handler); + call_tests++; + des_xmlGenericErrorFunc_ptr(n_handler, handler, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in initGenericErrorDefaultFunc", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_handler); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +#define gen_nb_xmlErrorPtr 1 +static xmlErrorPtr gen_xmlErrorPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlErrorPtr(int no ATTRIBUTE_UNUSED, xmlErrorPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} + +static int +test_xmlCopyError(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlErrorPtr from; /* a source error */ + int n_from; + xmlErrorPtr to; /* a target error */ + int n_to; + + for (n_from = 0;n_from < gen_nb_xmlErrorPtr;n_from++) { + for (n_to = 0;n_to < gen_nb_xmlErrorPtr;n_to++) { + mem_base = xmlMemBlocks(); + from = gen_xmlErrorPtr(n_from, 0); + to = gen_xmlErrorPtr(n_to, 1); + + ret_val = xmlCopyError(from, to); + desret_int(ret_val); + call_tests++; + des_xmlErrorPtr(n_from, from, 0); + des_xmlErrorPtr(n_to, to, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlCopyError", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_from); + printf(" %d", n_to); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlCtxtGetLastError(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlCtxtResetLastError(void) { + int test_ret = 0; + + int mem_base; + void * ctx; /* an XML parser context */ + int n_ctx; + + for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) { + mem_base = xmlMemBlocks(); + ctx = gen_void_ptr(n_ctx, 0); + + xmlCtxtResetLastError(ctx); + call_tests++; + des_void_ptr(n_ctx, ctx, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlCtxtResetLastError", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctx); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlGetLastError(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlParserError(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlParserPrintFileContext(void) { + int test_ret = 0; + + int mem_base; + xmlParserInputPtr input; /* an xmlParserInputPtr input */ + int n_input; + + for (n_input = 0;n_input < gen_nb_xmlParserInputPtr;n_input++) { + mem_base = xmlMemBlocks(); + input = gen_xmlParserInputPtr(n_input, 0); + + xmlParserPrintFileContext(input); + call_tests++; + des_xmlParserInputPtr(n_input, input, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlParserPrintFileContext", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_input); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlParserPrintFileInfo(void) { + int test_ret = 0; + + int mem_base; + xmlParserInputPtr input; /* an xmlParserInputPtr input */ + int n_input; + + for (n_input = 0;n_input < gen_nb_xmlParserInputPtr;n_input++) { + mem_base = xmlMemBlocks(); + input = gen_xmlParserInputPtr(n_input, 0); + + xmlParserPrintFileInfo(input); + call_tests++; + des_xmlParserInputPtr(n_input, input, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlParserPrintFileInfo", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_input); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlParserValidityError(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlParserValidityWarning(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlParserWarning(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlResetError(void) { + int test_ret = 0; + + int mem_base; + xmlErrorPtr err; /* pointer to the error. */ + int n_err; + + for (n_err = 0;n_err < gen_nb_xmlErrorPtr;n_err++) { + mem_base = xmlMemBlocks(); + err = gen_xmlErrorPtr(n_err, 0); + + xmlResetError(err); + call_tests++; + des_xmlErrorPtr(n_err, err, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlResetError", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_err); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlResetLastError(void) { + int test_ret = 0; + + + + xmlResetLastError(); + call_tests++; + xmlResetLastError(); + function_tests++; + + return(test_ret); +} + + +static int +test_xmlSetGenericErrorFunc(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlSetStructuredErrorFunc(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + +static int +test_xmlerror(void) { + int test_ret = 0; + + if (quiet == 0) printf("Testing xmlerror : 7 of 15 functions ...\n"); + test_ret += test_initGenericErrorDefaultFunc(); + test_ret += test_xmlCopyError(); + test_ret += test_xmlCtxtGetLastError(); + test_ret += test_xmlCtxtResetLastError(); + test_ret += test_xmlGetLastError(); + test_ret += test_xmlParserError(); + test_ret += test_xmlParserPrintFileContext(); + test_ret += test_xmlParserPrintFileInfo(); + test_ret += test_xmlParserValidityError(); + test_ret += test_xmlParserValidityWarning(); + test_ret += test_xmlParserWarning(); + test_ret += test_xmlResetError(); + test_ret += test_xmlResetLastError(); + test_ret += test_xmlSetGenericErrorFunc(); + test_ret += test_xmlSetStructuredErrorFunc(); + + if (test_ret != 0) + printf("Module xmlerror: %d errors\n", test_ret); + return(test_ret); +} +#ifdef LIBXML_MODULES_ENABLED + +#define gen_nb_xmlModulePtr 1 +static xmlModulePtr gen_xmlModulePtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlModulePtr(int no ATTRIBUTE_UNUSED, xmlModulePtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} +#endif + + +static int +test_xmlModuleClose(void) { + int test_ret = 0; + +#if defined(LIBXML_MODULES_ENABLED) + int mem_base; + int ret_val; + xmlModulePtr module; /* the module handle */ + int n_module; + + for (n_module = 0;n_module < gen_nb_xmlModulePtr;n_module++) { + mem_base = xmlMemBlocks(); + module = gen_xmlModulePtr(n_module, 0); + + ret_val = xmlModuleClose(module); + desret_int(ret_val); + call_tests++; + des_xmlModulePtr(n_module, module, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlModuleClose", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_module); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlModuleOpen(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlModuleSymbol(void) { + int test_ret = 0; + +#if defined(LIBXML_MODULES_ENABLED) + int mem_base; + int ret_val; + xmlModulePtr module; /* the module */ + int n_module; + char * name; /* the name of the symbol */ + int n_name; + void ** symbol; /* the resulting symbol address */ + int n_symbol; + + for (n_module = 0;n_module < gen_nb_xmlModulePtr;n_module++) { + for (n_name = 0;n_name < gen_nb_const_char_ptr;n_name++) { + for (n_symbol = 0;n_symbol < gen_nb_void_ptr_ptr;n_symbol++) { + mem_base = xmlMemBlocks(); + module = gen_xmlModulePtr(n_module, 0); + name = gen_const_char_ptr(n_name, 1); + symbol = gen_void_ptr_ptr(n_symbol, 2); + + ret_val = xmlModuleSymbol(module, (const char *)name, symbol); + desret_int(ret_val); + call_tests++; + des_xmlModulePtr(n_module, module, 0); + des_const_char_ptr(n_name, (const char *)name, 1); + des_void_ptr_ptr(n_symbol, symbol, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlModuleSymbol", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_module); + printf(" %d", n_name); + printf(" %d", n_symbol); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + +static int +test_xmlmodule(void) { + int test_ret = 0; + + if (quiet == 0) printf("Testing xmlmodule : 2 of 4 functions ...\n"); + test_ret += test_xmlModuleClose(); + test_ret += test_xmlModuleOpen(); + test_ret += test_xmlModuleSymbol(); + + if (test_ret != 0) + printf("Module xmlmodule: %d errors\n", test_ret); + return(test_ret); +} + +static int +test_xmlNewTextReader(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + xmlTextReaderPtr ret_val; + xmlParserInputBufferPtr input; /* the xmlParserInputBufferPtr used to read data */ + int n_input; + const char * URI; /* the URI information for the source if available */ + int n_URI; + + for (n_input = 0;n_input < gen_nb_xmlParserInputBufferPtr;n_input++) { + for (n_URI = 0;n_URI < gen_nb_filepath;n_URI++) { + mem_base = xmlMemBlocks(); + input = gen_xmlParserInputBufferPtr(n_input, 0); + URI = gen_filepath(n_URI, 1); + + ret_val = xmlNewTextReader(input, URI); + desret_xmlTextReaderPtr(ret_val); + call_tests++; + des_xmlParserInputBufferPtr(n_input, input, 0); + des_filepath(n_URI, URI, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNewTextReader", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_input); + printf(" %d", n_URI); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlNewTextReaderFilename(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + xmlTextReaderPtr ret_val; + const char * URI; /* the URI of the resource to process */ + int n_URI; + + for (n_URI = 0;n_URI < gen_nb_filepath;n_URI++) { + mem_base = xmlMemBlocks(); + URI = gen_filepath(n_URI, 0); + + ret_val = xmlNewTextReaderFilename(URI); + desret_xmlTextReaderPtr(ret_val); + call_tests++; + des_filepath(n_URI, URI, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNewTextReaderFilename", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_URI); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlReaderForDoc(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + xmlTextReaderPtr ret_val; + xmlChar * cur; /* a pointer to a zero terminated string */ + int n_cur; + const char * URL; /* the base URL to use for the document */ + int n_URL; + char * encoding; /* the document encoding, or NULL */ + int n_encoding; + int options; /* a combination of xmlParserOption */ + int n_options; + + for (n_cur = 0;n_cur < gen_nb_const_xmlChar_ptr;n_cur++) { + for (n_URL = 0;n_URL < gen_nb_filepath;n_URL++) { + for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) { + for (n_options = 0;n_options < gen_nb_parseroptions;n_options++) { + mem_base = xmlMemBlocks(); + cur = gen_const_xmlChar_ptr(n_cur, 0); + URL = gen_filepath(n_URL, 1); + encoding = gen_const_char_ptr(n_encoding, 2); + options = gen_parseroptions(n_options, 3); + + ret_val = xmlReaderForDoc((const xmlChar *)cur, URL, (const char *)encoding, options); + desret_xmlTextReaderPtr(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_cur, (const xmlChar *)cur, 0); + des_filepath(n_URL, URL, 1); + des_const_char_ptr(n_encoding, (const char *)encoding, 2); + des_parseroptions(n_options, options, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlReaderForDoc", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_cur); + printf(" %d", n_URL); + printf(" %d", n_encoding); + printf(" %d", n_options); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlReaderForFile(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + xmlTextReaderPtr ret_val; + const char * filename; /* a file or URL */ + int n_filename; + char * encoding; /* the document encoding, or NULL */ + int n_encoding; + int options; /* a combination of xmlParserOption */ + int n_options; + + for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) { + for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) { + for (n_options = 0;n_options < gen_nb_parseroptions;n_options++) { + mem_base = xmlMemBlocks(); + filename = gen_filepath(n_filename, 0); + encoding = gen_const_char_ptr(n_encoding, 1); + options = gen_parseroptions(n_options, 2); + + ret_val = xmlReaderForFile(filename, (const char *)encoding, options); + desret_xmlTextReaderPtr(ret_val); + call_tests++; + des_filepath(n_filename, filename, 0); + des_const_char_ptr(n_encoding, (const char *)encoding, 1); + des_parseroptions(n_options, options, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlReaderForFile", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_filename); + printf(" %d", n_encoding); + printf(" %d", n_options); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlReaderForMemory(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + xmlTextReaderPtr ret_val; + char * buffer; /* a pointer to a char array */ + int n_buffer; + int size; /* the size of the array */ + int n_size; + const char * URL; /* the base URL to use for the document */ + int n_URL; + char * encoding; /* the document encoding, or NULL */ + int n_encoding; + int options; /* a combination of xmlParserOption */ + int n_options; + + for (n_buffer = 0;n_buffer < gen_nb_const_char_ptr;n_buffer++) { + for (n_size = 0;n_size < gen_nb_int;n_size++) { + for (n_URL = 0;n_URL < gen_nb_filepath;n_URL++) { + for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) { + for (n_options = 0;n_options < gen_nb_parseroptions;n_options++) { + mem_base = xmlMemBlocks(); + buffer = gen_const_char_ptr(n_buffer, 0); + size = gen_int(n_size, 1); + URL = gen_filepath(n_URL, 2); + encoding = gen_const_char_ptr(n_encoding, 3); + options = gen_parseroptions(n_options, 4); + + ret_val = xmlReaderForMemory((const char *)buffer, size, URL, (const char *)encoding, options); + desret_xmlTextReaderPtr(ret_val); + call_tests++; + des_const_char_ptr(n_buffer, (const char *)buffer, 0); + des_int(n_size, size, 1); + des_filepath(n_URL, URL, 2); + des_const_char_ptr(n_encoding, (const char *)encoding, 3); + des_parseroptions(n_options, options, 4); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlReaderForMemory", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_buffer); + printf(" %d", n_size); + printf(" %d", n_URL); + printf(" %d", n_encoding); + printf(" %d", n_options); + printf("\n"); + } + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlReaderNewDoc(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + int ret_val; + xmlTextReaderPtr reader; /* an XML reader */ + int n_reader; + xmlChar * cur; /* a pointer to a zero terminated string */ + int n_cur; + const char * URL; /* the base URL to use for the document */ + int n_URL; + char * encoding; /* the document encoding, or NULL */ + int n_encoding; + int options; /* a combination of xmlParserOption */ + int n_options; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + for (n_cur = 0;n_cur < gen_nb_const_xmlChar_ptr;n_cur++) { + for (n_URL = 0;n_URL < gen_nb_filepath;n_URL++) { + for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) { + for (n_options = 0;n_options < gen_nb_parseroptions;n_options++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + cur = gen_const_xmlChar_ptr(n_cur, 1); + URL = gen_filepath(n_URL, 2); + encoding = gen_const_char_ptr(n_encoding, 3); + options = gen_parseroptions(n_options, 4); + + ret_val = xmlReaderNewDoc(reader, (const xmlChar *)cur, URL, (const char *)encoding, options); + desret_int(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + des_const_xmlChar_ptr(n_cur, (const xmlChar *)cur, 1); + des_filepath(n_URL, URL, 2); + des_const_char_ptr(n_encoding, (const char *)encoding, 3); + des_parseroptions(n_options, options, 4); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlReaderNewDoc", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf(" %d", n_cur); + printf(" %d", n_URL); + printf(" %d", n_encoding); + printf(" %d", n_options); + printf("\n"); + } + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlReaderNewFile(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + int ret_val; + xmlTextReaderPtr reader; /* an XML reader */ + int n_reader; + const char * filename; /* a file or URL */ + int n_filename; + char * encoding; /* the document encoding, or NULL */ + int n_encoding; + int options; /* a combination of xmlParserOption */ + int n_options; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) { + for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) { + for (n_options = 0;n_options < gen_nb_parseroptions;n_options++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + filename = gen_filepath(n_filename, 1); + encoding = gen_const_char_ptr(n_encoding, 2); + options = gen_parseroptions(n_options, 3); + + ret_val = xmlReaderNewFile(reader, filename, (const char *)encoding, options); + desret_int(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + des_filepath(n_filename, filename, 1); + des_const_char_ptr(n_encoding, (const char *)encoding, 2); + des_parseroptions(n_options, options, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlReaderNewFile", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf(" %d", n_filename); + printf(" %d", n_encoding); + printf(" %d", n_options); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlReaderNewMemory(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + int ret_val; + xmlTextReaderPtr reader; /* an XML reader */ + int n_reader; + char * buffer; /* a pointer to a char array */ + int n_buffer; + int size; /* the size of the array */ + int n_size; + const char * URL; /* the base URL to use for the document */ + int n_URL; + char * encoding; /* the document encoding, or NULL */ + int n_encoding; + int options; /* a combination of xmlParserOption */ + int n_options; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + for (n_buffer = 0;n_buffer < gen_nb_const_char_ptr;n_buffer++) { + for (n_size = 0;n_size < gen_nb_int;n_size++) { + for (n_URL = 0;n_URL < gen_nb_filepath;n_URL++) { + for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) { + for (n_options = 0;n_options < gen_nb_parseroptions;n_options++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + buffer = gen_const_char_ptr(n_buffer, 1); + size = gen_int(n_size, 2); + URL = gen_filepath(n_URL, 3); + encoding = gen_const_char_ptr(n_encoding, 4); + options = gen_parseroptions(n_options, 5); + + ret_val = xmlReaderNewMemory(reader, (const char *)buffer, size, URL, (const char *)encoding, options); + desret_int(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + des_const_char_ptr(n_buffer, (const char *)buffer, 1); + des_int(n_size, size, 2); + des_filepath(n_URL, URL, 3); + des_const_char_ptr(n_encoding, (const char *)encoding, 4); + des_parseroptions(n_options, options, 5); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlReaderNewMemory", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf(" %d", n_buffer); + printf(" %d", n_size); + printf(" %d", n_URL); + printf(" %d", n_encoding); + printf(" %d", n_options); + printf("\n"); + } + } + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlReaderNewWalker(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + int ret_val; + xmlTextReaderPtr reader; /* an XML reader */ + int n_reader; + xmlDocPtr doc; /* a preparsed document */ + int n_doc; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + doc = gen_xmlDocPtr(n_doc, 1); + + ret_val = xmlReaderNewWalker(reader, doc); + desret_int(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + des_xmlDocPtr(n_doc, doc, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlReaderNewWalker", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf(" %d", n_doc); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlReaderWalker(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + xmlTextReaderPtr ret_val; + xmlDocPtr doc; /* a preparsed document */ + int n_doc; + + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + mem_base = xmlMemBlocks(); + doc = gen_xmlDocPtr(n_doc, 0); + + ret_val = xmlReaderWalker(doc); + desret_xmlTextReaderPtr(ret_val); + call_tests++; + des_xmlDocPtr(n_doc, doc, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlReaderWalker", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderAttributeCount(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + int ret_val; + xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */ + int n_reader; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + + ret_val = xmlTextReaderAttributeCount(reader); + desret_int(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderAttributeCount", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderBaseUri(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + xmlChar * ret_val; + xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */ + int n_reader; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + + ret_val = xmlTextReaderBaseUri(reader); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderBaseUri", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderByteConsumed(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + long ret_val; + xmlTextReaderPtr reader; /* an XML reader */ + int n_reader; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + + ret_val = xmlTextReaderByteConsumed(reader); + desret_long(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderByteConsumed", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderClose(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + int ret_val; + xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */ + int n_reader; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + + ret_val = xmlTextReaderClose(reader); + desret_int(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderClose", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderConstBaseUri(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + const xmlChar * ret_val; + xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */ + int n_reader; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + + ret_val = xmlTextReaderConstBaseUri(reader); + desret_const_xmlChar_ptr(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderConstBaseUri", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderConstEncoding(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + const xmlChar * ret_val; + xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */ + int n_reader; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + + ret_val = xmlTextReaderConstEncoding(reader); + desret_const_xmlChar_ptr(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderConstEncoding", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderConstLocalName(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + const xmlChar * ret_val; + xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */ + int n_reader; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + + ret_val = xmlTextReaderConstLocalName(reader); + desret_const_xmlChar_ptr(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderConstLocalName", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderConstName(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + const xmlChar * ret_val; + xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */ + int n_reader; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + + ret_val = xmlTextReaderConstName(reader); + desret_const_xmlChar_ptr(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderConstName", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderConstNamespaceUri(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + const xmlChar * ret_val; + xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */ + int n_reader; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + + ret_val = xmlTextReaderConstNamespaceUri(reader); + desret_const_xmlChar_ptr(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderConstNamespaceUri", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderConstPrefix(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + const xmlChar * ret_val; + xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */ + int n_reader; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + + ret_val = xmlTextReaderConstPrefix(reader); + desret_const_xmlChar_ptr(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderConstPrefix", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderConstString(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + const xmlChar * ret_val; + xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */ + int n_reader; + xmlChar * str; /* the string to intern. */ + int n_str; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + for (n_str = 0;n_str < gen_nb_const_xmlChar_ptr;n_str++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + str = gen_const_xmlChar_ptr(n_str, 1); + + ret_val = xmlTextReaderConstString(reader, (const xmlChar *)str); + desret_const_xmlChar_ptr(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + des_const_xmlChar_ptr(n_str, (const xmlChar *)str, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderConstString", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf(" %d", n_str); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderConstValue(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + const xmlChar * ret_val; + xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */ + int n_reader; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + + ret_val = xmlTextReaderConstValue(reader); + desret_const_xmlChar_ptr(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderConstValue", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderConstXmlLang(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + const xmlChar * ret_val; + xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */ + int n_reader; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + + ret_val = xmlTextReaderConstXmlLang(reader); + desret_const_xmlChar_ptr(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderConstXmlLang", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderConstXmlVersion(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + const xmlChar * ret_val; + xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */ + int n_reader; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + + ret_val = xmlTextReaderConstXmlVersion(reader); + desret_const_xmlChar_ptr(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderConstXmlVersion", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderCurrentDoc(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + xmlDocPtr ret_val; + xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */ + int n_reader; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + + ret_val = xmlTextReaderCurrentDoc(reader); + desret_xmlDocPtr(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderCurrentDoc", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderCurrentNode(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + xmlNodePtr ret_val; + xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */ + int n_reader; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + + ret_val = xmlTextReaderCurrentNode(reader); + desret_xmlNodePtr(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderCurrentNode", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderDepth(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + int ret_val; + xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */ + int n_reader; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + + ret_val = xmlTextReaderDepth(reader); + desret_int(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderDepth", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderExpand(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + xmlNodePtr ret_val; + xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */ + int n_reader; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + + ret_val = xmlTextReaderExpand(reader); + desret_xmlNodePtr(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderExpand", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderGetAttribute(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + xmlChar * ret_val; + xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */ + int n_reader; + xmlChar * name; /* the qualified name of the attribute. */ + int n_name; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + + ret_val = xmlTextReaderGetAttribute(reader, (const xmlChar *)name); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderGetAttribute", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf(" %d", n_name); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderGetAttributeNo(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + xmlChar * ret_val; + xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */ + int n_reader; + int no; /* the zero-based index of the attribute relative to the containing element */ + int n_no; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + for (n_no = 0;n_no < gen_nb_int;n_no++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + no = gen_int(n_no, 1); + + ret_val = xmlTextReaderGetAttributeNo(reader, no); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + des_int(n_no, no, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderGetAttributeNo", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf(" %d", n_no); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderGetAttributeNs(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + xmlChar * ret_val; + xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */ + int n_reader; + xmlChar * localName; /* the local name of the attribute. */ + int n_localName; + xmlChar * namespaceURI; /* the namespace URI of the attribute. */ + int n_namespaceURI; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + for (n_localName = 0;n_localName < gen_nb_const_xmlChar_ptr;n_localName++) { + for (n_namespaceURI = 0;n_namespaceURI < gen_nb_const_xmlChar_ptr;n_namespaceURI++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + localName = gen_const_xmlChar_ptr(n_localName, 1); + namespaceURI = gen_const_xmlChar_ptr(n_namespaceURI, 2); + + ret_val = xmlTextReaderGetAttributeNs(reader, (const xmlChar *)localName, (const xmlChar *)namespaceURI); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + des_const_xmlChar_ptr(n_localName, (const xmlChar *)localName, 1); + des_const_xmlChar_ptr(n_namespaceURI, (const xmlChar *)namespaceURI, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderGetAttributeNs", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf(" %d", n_localName); + printf(" %d", n_namespaceURI); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + +#ifdef LIBXML_READER_ENABLED + +#define gen_nb_xmlTextReaderErrorFunc_ptr 1 +static xmlTextReaderErrorFunc * gen_xmlTextReaderErrorFunc_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlTextReaderErrorFunc_ptr(int no ATTRIBUTE_UNUSED, xmlTextReaderErrorFunc * val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} +#endif + + +static int +test_xmlTextReaderGetErrorHandler(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */ + int n_reader; + xmlTextReaderErrorFunc * f; /* the callback function or NULL is no callback has been registered */ + int n_f; + void ** arg; /* a user argument */ + int n_arg; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + for (n_f = 0;n_f < gen_nb_xmlTextReaderErrorFunc_ptr;n_f++) { + for (n_arg = 0;n_arg < gen_nb_void_ptr_ptr;n_arg++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + f = gen_xmlTextReaderErrorFunc_ptr(n_f, 1); + arg = gen_void_ptr_ptr(n_arg, 2); + + xmlTextReaderGetErrorHandler(reader, f, arg); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + des_xmlTextReaderErrorFunc_ptr(n_f, f, 1); + des_void_ptr_ptr(n_arg, arg, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderGetErrorHandler", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf(" %d", n_f); + printf(" %d", n_arg); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderGetParserColumnNumber(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + int ret_val; + xmlTextReaderPtr reader; /* the user data (XML reader context) */ + int n_reader; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + + ret_val = xmlTextReaderGetParserColumnNumber(reader); + desret_int(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderGetParserColumnNumber", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderGetParserLineNumber(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + int ret_val; + xmlTextReaderPtr reader; /* the user data (XML reader context) */ + int n_reader; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + + ret_val = xmlTextReaderGetParserLineNumber(reader); + desret_int(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderGetParserLineNumber", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderGetParserProp(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + int ret_val; + xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */ + int n_reader; + int prop; /* the xmlParserProperties to get */ + int n_prop; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + for (n_prop = 0;n_prop < gen_nb_int;n_prop++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + prop = gen_int(n_prop, 1); + + ret_val = xmlTextReaderGetParserProp(reader, prop); + desret_int(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + des_int(n_prop, prop, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderGetParserProp", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf(" %d", n_prop); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderGetRemainder(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + xmlParserInputBufferPtr ret_val; + xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */ + int n_reader; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + + ret_val = xmlTextReaderGetRemainder(reader); + desret_xmlParserInputBufferPtr(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderGetRemainder", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderHasAttributes(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + int ret_val; + xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */ + int n_reader; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + + ret_val = xmlTextReaderHasAttributes(reader); + desret_int(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderHasAttributes", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderHasValue(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + int ret_val; + xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */ + int n_reader; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + + ret_val = xmlTextReaderHasValue(reader); + desret_int(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderHasValue", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderIsDefault(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + int ret_val; + xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */ + int n_reader; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + + ret_val = xmlTextReaderIsDefault(reader); + desret_int(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderIsDefault", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderIsEmptyElement(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + int ret_val; + xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */ + int n_reader; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + + ret_val = xmlTextReaderIsEmptyElement(reader); + desret_int(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderIsEmptyElement", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderIsNamespaceDecl(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + int ret_val; + xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */ + int n_reader; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + + ret_val = xmlTextReaderIsNamespaceDecl(reader); + desret_int(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderIsNamespaceDecl", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderIsValid(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + int ret_val; + xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */ + int n_reader; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + + ret_val = xmlTextReaderIsValid(reader); + desret_int(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderIsValid", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderLocalName(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + xmlChar * ret_val; + xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */ + int n_reader; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + + ret_val = xmlTextReaderLocalName(reader); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderLocalName", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + +#ifdef LIBXML_READER_ENABLED + +#define gen_nb_xmlTextReaderLocatorPtr 1 +static xmlTextReaderLocatorPtr gen_xmlTextReaderLocatorPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlTextReaderLocatorPtr(int no ATTRIBUTE_UNUSED, xmlTextReaderLocatorPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} +#endif + + +static int +test_xmlTextReaderLocatorBaseURI(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + xmlChar * ret_val; + xmlTextReaderLocatorPtr locator; /* the xmlTextReaderLocatorPtr used */ + int n_locator; + + for (n_locator = 0;n_locator < gen_nb_xmlTextReaderLocatorPtr;n_locator++) { + mem_base = xmlMemBlocks(); + locator = gen_xmlTextReaderLocatorPtr(n_locator, 0); + + ret_val = xmlTextReaderLocatorBaseURI(locator); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_xmlTextReaderLocatorPtr(n_locator, locator, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderLocatorBaseURI", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_locator); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderLocatorLineNumber(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + int ret_val; + xmlTextReaderLocatorPtr locator; /* the xmlTextReaderLocatorPtr used */ + int n_locator; + + for (n_locator = 0;n_locator < gen_nb_xmlTextReaderLocatorPtr;n_locator++) { + mem_base = xmlMemBlocks(); + locator = gen_xmlTextReaderLocatorPtr(n_locator, 0); + + ret_val = xmlTextReaderLocatorLineNumber(locator); + desret_int(ret_val); + call_tests++; + des_xmlTextReaderLocatorPtr(n_locator, locator, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderLocatorLineNumber", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_locator); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderLookupNamespace(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + xmlChar * ret_val; + xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */ + int n_reader; + xmlChar * prefix; /* the prefix whose namespace URI is to be resolved. To return the default namespace, specify NULL */ + int n_prefix; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + for (n_prefix = 0;n_prefix < gen_nb_const_xmlChar_ptr;n_prefix++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + prefix = gen_const_xmlChar_ptr(n_prefix, 1); + + ret_val = xmlTextReaderLookupNamespace(reader, (const xmlChar *)prefix); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + des_const_xmlChar_ptr(n_prefix, (const xmlChar *)prefix, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderLookupNamespace", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf(" %d", n_prefix); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderMoveToAttribute(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + int ret_val; + xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */ + int n_reader; + xmlChar * name; /* the qualified name of the attribute. */ + int n_name; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + + ret_val = xmlTextReaderMoveToAttribute(reader, (const xmlChar *)name); + desret_int(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderMoveToAttribute", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf(" %d", n_name); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderMoveToAttributeNo(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + int ret_val; + xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */ + int n_reader; + int no; /* the zero-based index of the attribute relative to the containing element. */ + int n_no; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + for (n_no = 0;n_no < gen_nb_int;n_no++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + no = gen_int(n_no, 1); + + ret_val = xmlTextReaderMoveToAttributeNo(reader, no); + desret_int(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + des_int(n_no, no, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderMoveToAttributeNo", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf(" %d", n_no); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderMoveToAttributeNs(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + int ret_val; + xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */ + int n_reader; + xmlChar * localName; /* the local name of the attribute. */ + int n_localName; + xmlChar * namespaceURI; /* the namespace URI of the attribute. */ + int n_namespaceURI; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + for (n_localName = 0;n_localName < gen_nb_const_xmlChar_ptr;n_localName++) { + for (n_namespaceURI = 0;n_namespaceURI < gen_nb_const_xmlChar_ptr;n_namespaceURI++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + localName = gen_const_xmlChar_ptr(n_localName, 1); + namespaceURI = gen_const_xmlChar_ptr(n_namespaceURI, 2); + + ret_val = xmlTextReaderMoveToAttributeNs(reader, (const xmlChar *)localName, (const xmlChar *)namespaceURI); + desret_int(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + des_const_xmlChar_ptr(n_localName, (const xmlChar *)localName, 1); + des_const_xmlChar_ptr(n_namespaceURI, (const xmlChar *)namespaceURI, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderMoveToAttributeNs", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf(" %d", n_localName); + printf(" %d", n_namespaceURI); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderMoveToElement(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + int ret_val; + xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */ + int n_reader; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + + ret_val = xmlTextReaderMoveToElement(reader); + desret_int(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderMoveToElement", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderMoveToFirstAttribute(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + int ret_val; + xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */ + int n_reader; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + + ret_val = xmlTextReaderMoveToFirstAttribute(reader); + desret_int(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderMoveToFirstAttribute", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderMoveToNextAttribute(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + int ret_val; + xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */ + int n_reader; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + + ret_val = xmlTextReaderMoveToNextAttribute(reader); + desret_int(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderMoveToNextAttribute", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderName(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + xmlChar * ret_val; + xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */ + int n_reader; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + + ret_val = xmlTextReaderName(reader); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderName", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderNamespaceUri(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + xmlChar * ret_val; + xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */ + int n_reader; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + + ret_val = xmlTextReaderNamespaceUri(reader); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderNamespaceUri", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderNext(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + int ret_val; + xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */ + int n_reader; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + + ret_val = xmlTextReaderNext(reader); + desret_int(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderNext", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderNextSibling(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + int ret_val; + xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */ + int n_reader; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + + ret_val = xmlTextReaderNextSibling(reader); + desret_int(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderNextSibling", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderNodeType(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + int ret_val; + xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */ + int n_reader; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + + ret_val = xmlTextReaderNodeType(reader); + desret_int(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderNodeType", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderNormalization(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + int ret_val; + xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */ + int n_reader; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + + ret_val = xmlTextReaderNormalization(reader); + desret_int(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderNormalization", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderPrefix(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + xmlChar * ret_val; + xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */ + int n_reader; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + + ret_val = xmlTextReaderPrefix(reader); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderPrefix", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderPreserve(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + xmlNodePtr ret_val; + xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */ + int n_reader; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + + ret_val = xmlTextReaderPreserve(reader); + desret_xmlNodePtr(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderPreserve", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderPreservePattern(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_PATTERN_ENABLED) +#ifdef LIBXML_PATTERN_ENABLED + int mem_base; + int ret_val; + xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */ + int n_reader; + xmlChar * pattern; /* an XPath subset pattern */ + int n_pattern; + xmlChar ** namespaces; /* the prefix definitions, array of [URI, prefix] or NULL */ + int n_namespaces; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + for (n_pattern = 0;n_pattern < gen_nb_const_xmlChar_ptr;n_pattern++) { + for (n_namespaces = 0;n_namespaces < gen_nb_const_xmlChar_ptr_ptr;n_namespaces++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + pattern = gen_const_xmlChar_ptr(n_pattern, 1); + namespaces = gen_const_xmlChar_ptr_ptr(n_namespaces, 2); + + ret_val = xmlTextReaderPreservePattern(reader, (const xmlChar *)pattern, (const xmlChar **)namespaces); + desret_int(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + des_const_xmlChar_ptr(n_pattern, (const xmlChar *)pattern, 1); + des_const_xmlChar_ptr_ptr(n_namespaces, (const xmlChar **)namespaces, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderPreservePattern", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf(" %d", n_pattern); + printf(" %d", n_namespaces); + printf("\n"); + } + } + } + } + function_tests++; +#endif +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderQuoteChar(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + int ret_val; + xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */ + int n_reader; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + + ret_val = xmlTextReaderQuoteChar(reader); + desret_int(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderQuoteChar", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderRead(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + int ret_val; + xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */ + int n_reader; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + + ret_val = xmlTextReaderRead(reader); + desret_int(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderRead", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderReadAttributeValue(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + int ret_val; + xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */ + int n_reader; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + + ret_val = xmlTextReaderReadAttributeValue(reader); + desret_int(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderReadAttributeValue", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderReadState(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + int ret_val; + xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */ + int n_reader; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + + ret_val = xmlTextReaderReadState(reader); + desret_int(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderReadState", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderRelaxNGSetSchema(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + int ret_val; + xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */ + int n_reader; + xmlRelaxNGPtr schema; /* a precompiled RelaxNG schema */ + int n_schema; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + for (n_schema = 0;n_schema < gen_nb_xmlRelaxNGPtr;n_schema++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + schema = gen_xmlRelaxNGPtr(n_schema, 1); + + ret_val = xmlTextReaderRelaxNGSetSchema(reader, schema); + desret_int(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + des_xmlRelaxNGPtr(n_schema, schema, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderRelaxNGSetSchema", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf(" %d", n_schema); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderRelaxNGValidate(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + int ret_val; + xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */ + int n_reader; + char * rng; /* the path to a RelaxNG schema or NULL */ + int n_rng; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + for (n_rng = 0;n_rng < gen_nb_const_char_ptr;n_rng++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + rng = gen_const_char_ptr(n_rng, 1); + + ret_val = xmlTextReaderRelaxNGValidate(reader, (const char *)rng); + desret_int(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + des_const_char_ptr(n_rng, (const char *)rng, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderRelaxNGValidate", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf(" %d", n_rng); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderRelaxNGValidateCtxt(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + int ret_val; + xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */ + int n_reader; + xmlRelaxNGValidCtxtPtr ctxt; /* the RelaxNG schema validation context or NULL */ + int n_ctxt; + int options; /* options (not used yet) */ + int n_options; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + for (n_ctxt = 0;n_ctxt < gen_nb_xmlRelaxNGValidCtxtPtr;n_ctxt++) { + for (n_options = 0;n_options < gen_nb_parseroptions;n_options++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + ctxt = gen_xmlRelaxNGValidCtxtPtr(n_ctxt, 1); + options = gen_parseroptions(n_options, 2); + + ret_val = xmlTextReaderRelaxNGValidateCtxt(reader, ctxt, options); + desret_int(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + des_xmlRelaxNGValidCtxtPtr(n_ctxt, ctxt, 1); + des_parseroptions(n_options, options, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderRelaxNGValidateCtxt", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf(" %d", n_ctxt); + printf(" %d", n_options); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderSchemaValidate(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED) + int ret_val; + xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */ + int n_reader; + char * xsd; /* the path to a W3C XSD schema or NULL */ + int n_xsd; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + for (n_xsd = 0;n_xsd < gen_nb_const_char_ptr;n_xsd++) { + reader = gen_xmlTextReaderPtr(n_reader, 0); + xsd = gen_const_char_ptr(n_xsd, 1); + + ret_val = xmlTextReaderSchemaValidate(reader, (const char *)xsd); + desret_int(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + des_const_char_ptr(n_xsd, (const char *)xsd, 1); + xmlResetLastError(); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderSchemaValidateCtxt(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + int ret_val; + xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */ + int n_reader; + xmlSchemaValidCtxtPtr ctxt; /* the XML Schema validation context or NULL */ + int n_ctxt; + int options; /* options (not used yet) */ + int n_options; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + for (n_ctxt = 0;n_ctxt < gen_nb_xmlSchemaValidCtxtPtr;n_ctxt++) { + for (n_options = 0;n_options < gen_nb_parseroptions;n_options++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + ctxt = gen_xmlSchemaValidCtxtPtr(n_ctxt, 1); + options = gen_parseroptions(n_options, 2); + + ret_val = xmlTextReaderSchemaValidateCtxt(reader, ctxt, options); + desret_int(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + des_xmlSchemaValidCtxtPtr(n_ctxt, ctxt, 1); + des_parseroptions(n_options, options, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderSchemaValidateCtxt", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf(" %d", n_ctxt); + printf(" %d", n_options); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderSetErrorHandler(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlTextReaderSetParserProp(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + int ret_val; + xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */ + int n_reader; + int prop; /* the xmlParserProperties to set */ + int n_prop; + int value; /* usually 0 or 1 to (de)activate it */ + int n_value; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + for (n_prop = 0;n_prop < gen_nb_int;n_prop++) { + for (n_value = 0;n_value < gen_nb_int;n_value++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + prop = gen_int(n_prop, 1); + value = gen_int(n_value, 2); + + ret_val = xmlTextReaderSetParserProp(reader, prop, value); + desret_int(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + des_int(n_prop, prop, 1); + des_int(n_value, value, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderSetParserProp", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf(" %d", n_prop); + printf(" %d", n_value); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderSetSchema(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + int ret_val; + xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */ + int n_reader; + xmlSchemaPtr schema; /* a precompiled Schema schema */ + int n_schema; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + for (n_schema = 0;n_schema < gen_nb_xmlSchemaPtr;n_schema++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + schema = gen_xmlSchemaPtr(n_schema, 1); + + ret_val = xmlTextReaderSetSchema(reader, schema); + desret_int(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + des_xmlSchemaPtr(n_schema, schema, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderSetSchema", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf(" %d", n_schema); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderSetStructuredErrorHandler(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlTextReaderSetup(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + int ret_val; + xmlTextReaderPtr reader; /* an XML reader */ + int n_reader; + xmlParserInputBufferPtr input; /* xmlParserInputBufferPtr used to feed the reader, will be destroyed with it. */ + int n_input; + const char * URL; /* the base URL to use for the document */ + int n_URL; + char * encoding; /* the document encoding, or NULL */ + int n_encoding; + int options; /* a combination of xmlParserOption */ + int n_options; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + for (n_input = 0;n_input < gen_nb_xmlParserInputBufferPtr;n_input++) { + for (n_URL = 0;n_URL < gen_nb_filepath;n_URL++) { + for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) { + for (n_options = 0;n_options < gen_nb_parseroptions;n_options++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + input = gen_xmlParserInputBufferPtr(n_input, 1); + URL = gen_filepath(n_URL, 2); + encoding = gen_const_char_ptr(n_encoding, 3); + options = gen_parseroptions(n_options, 4); + + ret_val = xmlTextReaderSetup(reader, input, URL, (const char *)encoding, options); + desret_int(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + des_filepath(n_URL, URL, 2); + des_const_char_ptr(n_encoding, (const char *)encoding, 3); + des_parseroptions(n_options, options, 4); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderSetup", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf(" %d", n_input); + printf(" %d", n_URL); + printf(" %d", n_encoding); + printf(" %d", n_options); + printf("\n"); + } + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderStandalone(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + int ret_val; + xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */ + int n_reader; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + + ret_val = xmlTextReaderStandalone(reader); + desret_int(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderStandalone", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderValue(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + xmlChar * ret_val; + xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */ + int n_reader; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + + ret_val = xmlTextReaderValue(reader); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderValue", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextReaderXmlLang(void) { + int test_ret = 0; + +#if defined(LIBXML_READER_ENABLED) + int mem_base; + xmlChar * ret_val; + xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */ + int n_reader; + + for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) { + mem_base = xmlMemBlocks(); + reader = gen_xmlTextReaderPtr(n_reader, 0); + + ret_val = xmlTextReaderXmlLang(reader); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_xmlTextReaderPtr(n_reader, reader, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextReaderXmlLang", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_reader); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + +static int +test_xmlreader(void) { + int test_ret = 0; + + if (quiet == 0) printf("Testing xmlreader : 76 of 86 functions ...\n"); + test_ret += test_xmlNewTextReader(); + test_ret += test_xmlNewTextReaderFilename(); + test_ret += test_xmlReaderForDoc(); + test_ret += test_xmlReaderForFile(); + test_ret += test_xmlReaderForMemory(); + test_ret += test_xmlReaderNewDoc(); + test_ret += test_xmlReaderNewFile(); + test_ret += test_xmlReaderNewMemory(); + test_ret += test_xmlReaderNewWalker(); + test_ret += test_xmlReaderWalker(); + test_ret += test_xmlTextReaderAttributeCount(); + test_ret += test_xmlTextReaderBaseUri(); + test_ret += test_xmlTextReaderByteConsumed(); + test_ret += test_xmlTextReaderClose(); + test_ret += test_xmlTextReaderConstBaseUri(); + test_ret += test_xmlTextReaderConstEncoding(); + test_ret += test_xmlTextReaderConstLocalName(); + test_ret += test_xmlTextReaderConstName(); + test_ret += test_xmlTextReaderConstNamespaceUri(); + test_ret += test_xmlTextReaderConstPrefix(); + test_ret += test_xmlTextReaderConstString(); + test_ret += test_xmlTextReaderConstValue(); + test_ret += test_xmlTextReaderConstXmlLang(); + test_ret += test_xmlTextReaderConstXmlVersion(); + test_ret += test_xmlTextReaderCurrentDoc(); + test_ret += test_xmlTextReaderCurrentNode(); + test_ret += test_xmlTextReaderDepth(); + test_ret += test_xmlTextReaderExpand(); + test_ret += test_xmlTextReaderGetAttribute(); + test_ret += test_xmlTextReaderGetAttributeNo(); + test_ret += test_xmlTextReaderGetAttributeNs(); + test_ret += test_xmlTextReaderGetErrorHandler(); + test_ret += test_xmlTextReaderGetParserColumnNumber(); + test_ret += test_xmlTextReaderGetParserLineNumber(); + test_ret += test_xmlTextReaderGetParserProp(); + test_ret += test_xmlTextReaderGetRemainder(); + test_ret += test_xmlTextReaderHasAttributes(); + test_ret += test_xmlTextReaderHasValue(); + test_ret += test_xmlTextReaderIsDefault(); + test_ret += test_xmlTextReaderIsEmptyElement(); + test_ret += test_xmlTextReaderIsNamespaceDecl(); + test_ret += test_xmlTextReaderIsValid(); + test_ret += test_xmlTextReaderLocalName(); + test_ret += test_xmlTextReaderLocatorBaseURI(); + test_ret += test_xmlTextReaderLocatorLineNumber(); + test_ret += test_xmlTextReaderLookupNamespace(); + test_ret += test_xmlTextReaderMoveToAttribute(); + test_ret += test_xmlTextReaderMoveToAttributeNo(); + test_ret += test_xmlTextReaderMoveToAttributeNs(); + test_ret += test_xmlTextReaderMoveToElement(); + test_ret += test_xmlTextReaderMoveToFirstAttribute(); + test_ret += test_xmlTextReaderMoveToNextAttribute(); + test_ret += test_xmlTextReaderName(); + test_ret += test_xmlTextReaderNamespaceUri(); + test_ret += test_xmlTextReaderNext(); + test_ret += test_xmlTextReaderNextSibling(); + test_ret += test_xmlTextReaderNodeType(); + test_ret += test_xmlTextReaderNormalization(); + test_ret += test_xmlTextReaderPrefix(); + test_ret += test_xmlTextReaderPreserve(); + test_ret += test_xmlTextReaderPreservePattern(); + test_ret += test_xmlTextReaderQuoteChar(); + test_ret += test_xmlTextReaderRead(); + test_ret += test_xmlTextReaderReadAttributeValue(); + test_ret += test_xmlTextReaderReadState(); + test_ret += test_xmlTextReaderRelaxNGSetSchema(); + test_ret += test_xmlTextReaderRelaxNGValidate(); + test_ret += test_xmlTextReaderRelaxNGValidateCtxt(); + test_ret += test_xmlTextReaderSchemaValidate(); + test_ret += test_xmlTextReaderSchemaValidateCtxt(); + test_ret += test_xmlTextReaderSetErrorHandler(); + test_ret += test_xmlTextReaderSetParserProp(); + test_ret += test_xmlTextReaderSetSchema(); + test_ret += test_xmlTextReaderSetStructuredErrorHandler(); + test_ret += test_xmlTextReaderSetup(); + test_ret += test_xmlTextReaderStandalone(); + test_ret += test_xmlTextReaderValue(); + test_ret += test_xmlTextReaderXmlLang(); + + if (test_ret != 0) + printf("Module xmlreader: %d errors\n", test_ret); + return(test_ret); +} + +static int +test_xmlExpCtxtNbCons(void) { + int test_ret = 0; + +#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED) + int mem_base; + int ret_val; + xmlExpCtxtPtr ctxt; /* an expression context */ + int n_ctxt; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlExpCtxtPtr;n_ctxt++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlExpCtxtPtr(n_ctxt, 0); + + ret_val = xmlExpCtxtNbCons(ctxt); + desret_int(ret_val); + call_tests++; + des_xmlExpCtxtPtr(n_ctxt, ctxt, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlExpCtxtNbCons", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlExpCtxtNbNodes(void) { + int test_ret = 0; + +#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED) + int mem_base; + int ret_val; + xmlExpCtxtPtr ctxt; /* an expression context */ + int n_ctxt; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlExpCtxtPtr;n_ctxt++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlExpCtxtPtr(n_ctxt, 0); + + ret_val = xmlExpCtxtNbNodes(ctxt); + desret_int(ret_val); + call_tests++; + des_xmlExpCtxtPtr(n_ctxt, ctxt, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlExpCtxtNbNodes", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlExpDump(void) { + int test_ret = 0; + +#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED) + int mem_base; + xmlBufferPtr buf; /* a buffer to receive the output */ + int n_buf; + xmlExpNodePtr expr; /* the compiled expression */ + int n_expr; + + for (n_buf = 0;n_buf < gen_nb_xmlBufferPtr;n_buf++) { + for (n_expr = 0;n_expr < gen_nb_xmlExpNodePtr;n_expr++) { + mem_base = xmlMemBlocks(); + buf = gen_xmlBufferPtr(n_buf, 0); + expr = gen_xmlExpNodePtr(n_expr, 1); + + xmlExpDump(buf, expr); + call_tests++; + des_xmlBufferPtr(n_buf, buf, 0); + des_xmlExpNodePtr(n_expr, expr, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlExpDump", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_buf); + printf(" %d", n_expr); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlExpExpDerive(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlExpGetLanguage(void) { + int test_ret = 0; + +#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED) + int mem_base; + int ret_val; + xmlExpCtxtPtr ctxt; /* the expression context */ + int n_ctxt; + xmlExpNodePtr exp; /* the expression */ + int n_exp; + xmlChar ** langList; /* where to store the tokens */ + int n_langList; + int len; /* the allocated length of @list */ + int n_len; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlExpCtxtPtr;n_ctxt++) { + for (n_exp = 0;n_exp < gen_nb_xmlExpNodePtr;n_exp++) { + for (n_langList = 0;n_langList < gen_nb_const_xmlChar_ptr_ptr;n_langList++) { + for (n_len = 0;n_len < gen_nb_int;n_len++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlExpCtxtPtr(n_ctxt, 0); + exp = gen_xmlExpNodePtr(n_exp, 1); + langList = gen_const_xmlChar_ptr_ptr(n_langList, 2); + len = gen_int(n_len, 3); + + ret_val = xmlExpGetLanguage(ctxt, exp, (const xmlChar **)langList, len); + desret_int(ret_val); + call_tests++; + des_xmlExpCtxtPtr(n_ctxt, ctxt, 0); + des_xmlExpNodePtr(n_exp, exp, 1); + des_const_xmlChar_ptr_ptr(n_langList, (const xmlChar **)langList, 2); + des_int(n_len, len, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlExpGetLanguage", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_exp); + printf(" %d", n_langList); + printf(" %d", n_len); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlExpGetStart(void) { + int test_ret = 0; + +#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED) + int mem_base; + int ret_val; + xmlExpCtxtPtr ctxt; /* the expression context */ + int n_ctxt; + xmlExpNodePtr exp; /* the expression */ + int n_exp; + xmlChar ** tokList; /* where to store the tokens */ + int n_tokList; + int len; /* the allocated length of @list */ + int n_len; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlExpCtxtPtr;n_ctxt++) { + for (n_exp = 0;n_exp < gen_nb_xmlExpNodePtr;n_exp++) { + for (n_tokList = 0;n_tokList < gen_nb_const_xmlChar_ptr_ptr;n_tokList++) { + for (n_len = 0;n_len < gen_nb_int;n_len++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlExpCtxtPtr(n_ctxt, 0); + exp = gen_xmlExpNodePtr(n_exp, 1); + tokList = gen_const_xmlChar_ptr_ptr(n_tokList, 2); + len = gen_int(n_len, 3); + + ret_val = xmlExpGetStart(ctxt, exp, (const xmlChar **)tokList, len); + desret_int(ret_val); + call_tests++; + des_xmlExpCtxtPtr(n_ctxt, ctxt, 0); + des_xmlExpNodePtr(n_exp, exp, 1); + des_const_xmlChar_ptr_ptr(n_tokList, (const xmlChar **)tokList, 2); + des_int(n_len, len, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlExpGetStart", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_exp); + printf(" %d", n_tokList); + printf(" %d", n_len); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlExpIsNillable(void) { + int test_ret = 0; + +#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED) + int mem_base; + int ret_val; + xmlExpNodePtr exp; /* the expression */ + int n_exp; + + for (n_exp = 0;n_exp < gen_nb_xmlExpNodePtr;n_exp++) { + mem_base = xmlMemBlocks(); + exp = gen_xmlExpNodePtr(n_exp, 0); + + ret_val = xmlExpIsNillable(exp); + desret_int(ret_val); + call_tests++; + des_xmlExpNodePtr(n_exp, exp, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlExpIsNillable", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_exp); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlExpMaxToken(void) { + int test_ret = 0; + +#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED) + int mem_base; + int ret_val; + xmlExpNodePtr expr; /* a compiled expression */ + int n_expr; + + for (n_expr = 0;n_expr < gen_nb_xmlExpNodePtr;n_expr++) { + mem_base = xmlMemBlocks(); + expr = gen_xmlExpNodePtr(n_expr, 0); + + ret_val = xmlExpMaxToken(expr); + desret_int(ret_val); + call_tests++; + des_xmlExpNodePtr(n_expr, expr, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlExpMaxToken", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_expr); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlExpNewAtom(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlExpNewCtxt(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlExpNewOr(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlExpNewRange(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlExpNewSeq(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlExpParse(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlExpRef(void) { + int test_ret = 0; + +#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED) + int mem_base; + xmlExpNodePtr exp; /* the expression */ + int n_exp; + + for (n_exp = 0;n_exp < gen_nb_xmlExpNodePtr;n_exp++) { + mem_base = xmlMemBlocks(); + exp = gen_xmlExpNodePtr(n_exp, 0); + + xmlExpRef(exp); + call_tests++; + des_xmlExpNodePtr(n_exp, exp, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlExpRef", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_exp); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlExpStringDerive(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlExpSubsume(void) { + int test_ret = 0; + +#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED) + int mem_base; + int ret_val; + xmlExpCtxtPtr ctxt; /* the expressions context */ + int n_ctxt; + xmlExpNodePtr exp; /* the englobing expression */ + int n_exp; + xmlExpNodePtr sub; /* the subexpression */ + int n_sub; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlExpCtxtPtr;n_ctxt++) { + for (n_exp = 0;n_exp < gen_nb_xmlExpNodePtr;n_exp++) { + for (n_sub = 0;n_sub < gen_nb_xmlExpNodePtr;n_sub++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlExpCtxtPtr(n_ctxt, 0); + exp = gen_xmlExpNodePtr(n_exp, 1); + sub = gen_xmlExpNodePtr(n_sub, 2); + + ret_val = xmlExpSubsume(ctxt, exp, sub); + desret_int(ret_val); + call_tests++; + des_xmlExpCtxtPtr(n_ctxt, ctxt, 0); + des_xmlExpNodePtr(n_exp, exp, 1); + des_xmlExpNodePtr(n_sub, sub, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlExpSubsume", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_exp); + printf(" %d", n_sub); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + +#ifdef LIBXML_REGEXP_ENABLED + +#define gen_nb_xmlRegExecCtxtPtr 1 +static xmlRegExecCtxtPtr gen_xmlRegExecCtxtPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlRegExecCtxtPtr(int no ATTRIBUTE_UNUSED, xmlRegExecCtxtPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} +#endif + + +static int +test_xmlRegExecErrInfo(void) { + int test_ret = 0; + +#if defined(LIBXML_REGEXP_ENABLED) + int mem_base; + int ret_val; + xmlRegExecCtxtPtr exec; /* a regexp execution context generating an error */ + int n_exec; + xmlChar ** string; /* return value for the error string */ + int n_string; + int * nbval; /* pointer to the number of accepted values IN/OUT */ + int n_nbval; + int * nbneg; /* return number of negative transitions */ + int n_nbneg; + xmlChar ** values; /* pointer to the array of acceptable values */ + int n_values; + int * terminal; /* return value if this was a terminal state */ + int n_terminal; + + for (n_exec = 0;n_exec < gen_nb_xmlRegExecCtxtPtr;n_exec++) { + for (n_string = 0;n_string < gen_nb_const_xmlChar_ptr_ptr;n_string++) { + for (n_nbval = 0;n_nbval < gen_nb_int_ptr;n_nbval++) { + for (n_nbneg = 0;n_nbneg < gen_nb_int_ptr;n_nbneg++) { + for (n_values = 0;n_values < gen_nb_xmlChar_ptr_ptr;n_values++) { + for (n_terminal = 0;n_terminal < gen_nb_int_ptr;n_terminal++) { + mem_base = xmlMemBlocks(); + exec = gen_xmlRegExecCtxtPtr(n_exec, 0); + string = gen_const_xmlChar_ptr_ptr(n_string, 1); + nbval = gen_int_ptr(n_nbval, 2); + nbneg = gen_int_ptr(n_nbneg, 3); + values = gen_xmlChar_ptr_ptr(n_values, 4); + terminal = gen_int_ptr(n_terminal, 5); + + ret_val = xmlRegExecErrInfo(exec, (const xmlChar **)string, nbval, nbneg, values, terminal); + desret_int(ret_val); + call_tests++; + des_xmlRegExecCtxtPtr(n_exec, exec, 0); + des_const_xmlChar_ptr_ptr(n_string, (const xmlChar **)string, 1); + des_int_ptr(n_nbval, nbval, 2); + des_int_ptr(n_nbneg, nbneg, 3); + des_xmlChar_ptr_ptr(n_values, values, 4); + des_int_ptr(n_terminal, terminal, 5); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlRegExecErrInfo", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_exec); + printf(" %d", n_string); + printf(" %d", n_nbval); + printf(" %d", n_nbneg); + printf(" %d", n_values); + printf(" %d", n_terminal); + printf("\n"); + } + } + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlRegExecNextValues(void) { + int test_ret = 0; + +#if defined(LIBXML_REGEXP_ENABLED) + int mem_base; + int ret_val; + xmlRegExecCtxtPtr exec; /* a regexp execution context */ + int n_exec; + int * nbval; /* pointer to the number of accepted values IN/OUT */ + int n_nbval; + int * nbneg; /* return number of negative transitions */ + int n_nbneg; + xmlChar ** values; /* pointer to the array of acceptable values */ + int n_values; + int * terminal; /* return value if this was a terminal state */ + int n_terminal; + + for (n_exec = 0;n_exec < gen_nb_xmlRegExecCtxtPtr;n_exec++) { + for (n_nbval = 0;n_nbval < gen_nb_int_ptr;n_nbval++) { + for (n_nbneg = 0;n_nbneg < gen_nb_int_ptr;n_nbneg++) { + for (n_values = 0;n_values < gen_nb_xmlChar_ptr_ptr;n_values++) { + for (n_terminal = 0;n_terminal < gen_nb_int_ptr;n_terminal++) { + mem_base = xmlMemBlocks(); + exec = gen_xmlRegExecCtxtPtr(n_exec, 0); + nbval = gen_int_ptr(n_nbval, 1); + nbneg = gen_int_ptr(n_nbneg, 2); + values = gen_xmlChar_ptr_ptr(n_values, 3); + terminal = gen_int_ptr(n_terminal, 4); + + ret_val = xmlRegExecNextValues(exec, nbval, nbneg, values, terminal); + desret_int(ret_val); + call_tests++; + des_xmlRegExecCtxtPtr(n_exec, exec, 0); + des_int_ptr(n_nbval, nbval, 1); + des_int_ptr(n_nbneg, nbneg, 2); + des_xmlChar_ptr_ptr(n_values, values, 3); + des_int_ptr(n_terminal, terminal, 4); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlRegExecNextValues", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_exec); + printf(" %d", n_nbval); + printf(" %d", n_nbneg); + printf(" %d", n_values); + printf(" %d", n_terminal); + printf("\n"); + } + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlRegExecPushString(void) { + int test_ret = 0; + +#if defined(LIBXML_REGEXP_ENABLED) + int mem_base; + int ret_val; + xmlRegExecCtxtPtr exec; /* a regexp execution context or NULL to indicate the end */ + int n_exec; + xmlChar * value; /* a string token input */ + int n_value; + void * data; /* data associated to the token to reuse in callbacks */ + int n_data; + + for (n_exec = 0;n_exec < gen_nb_xmlRegExecCtxtPtr;n_exec++) { + for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) { + for (n_data = 0;n_data < gen_nb_userdata;n_data++) { + mem_base = xmlMemBlocks(); + exec = gen_xmlRegExecCtxtPtr(n_exec, 0); + value = gen_const_xmlChar_ptr(n_value, 1); + data = gen_userdata(n_data, 2); + + ret_val = xmlRegExecPushString(exec, (const xmlChar *)value, data); + desret_int(ret_val); + call_tests++; + des_xmlRegExecCtxtPtr(n_exec, exec, 0); + des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 1); + des_userdata(n_data, data, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlRegExecPushString", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_exec); + printf(" %d", n_value); + printf(" %d", n_data); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlRegExecPushString2(void) { + int test_ret = 0; + +#if defined(LIBXML_REGEXP_ENABLED) + int mem_base; + int ret_val; + xmlRegExecCtxtPtr exec; /* a regexp execution context or NULL to indicate the end */ + int n_exec; + xmlChar * value; /* the first string token input */ + int n_value; + xmlChar * value2; /* the second string token input */ + int n_value2; + void * data; /* data associated to the token to reuse in callbacks */ + int n_data; + + for (n_exec = 0;n_exec < gen_nb_xmlRegExecCtxtPtr;n_exec++) { + for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) { + for (n_value2 = 0;n_value2 < gen_nb_const_xmlChar_ptr;n_value2++) { + for (n_data = 0;n_data < gen_nb_userdata;n_data++) { + mem_base = xmlMemBlocks(); + exec = gen_xmlRegExecCtxtPtr(n_exec, 0); + value = gen_const_xmlChar_ptr(n_value, 1); + value2 = gen_const_xmlChar_ptr(n_value2, 2); + data = gen_userdata(n_data, 3); + + ret_val = xmlRegExecPushString2(exec, (const xmlChar *)value, (const xmlChar *)value2, data); + desret_int(ret_val); + call_tests++; + des_xmlRegExecCtxtPtr(n_exec, exec, 0); + des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 1); + des_const_xmlChar_ptr(n_value2, (const xmlChar *)value2, 2); + des_userdata(n_data, data, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlRegExecPushString2", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_exec); + printf(" %d", n_value); + printf(" %d", n_value2); + printf(" %d", n_data); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + +#ifdef LIBXML_REGEXP_ENABLED + +#define gen_nb_xmlRegexpPtr 1 +static xmlRegexpPtr gen_xmlRegexpPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlRegexpPtr(int no ATTRIBUTE_UNUSED, xmlRegexpPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} +#endif + + +static int +test_xmlRegNewExecCtxt(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlRegexpCompile(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlRegexpExec(void) { + int test_ret = 0; + +#if defined(LIBXML_REGEXP_ENABLED) + int mem_base; + int ret_val; + xmlRegexpPtr comp; /* the compiled regular expression */ + int n_comp; + xmlChar * content; /* the value to check against the regular expression */ + int n_content; + + for (n_comp = 0;n_comp < gen_nb_xmlRegexpPtr;n_comp++) { + for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) { + mem_base = xmlMemBlocks(); + comp = gen_xmlRegexpPtr(n_comp, 0); + content = gen_const_xmlChar_ptr(n_content, 1); + + ret_val = xmlRegexpExec(comp, (const xmlChar *)content); + desret_int(ret_val); + call_tests++; + des_xmlRegexpPtr(n_comp, comp, 0); + des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlRegexpExec", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_comp); + printf(" %d", n_content); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlRegexpIsDeterminist(void) { + int test_ret = 0; + +#if defined(LIBXML_REGEXP_ENABLED) + int mem_base; + int ret_val; + xmlRegexpPtr comp; /* the compiled regular expression */ + int n_comp; + + for (n_comp = 0;n_comp < gen_nb_xmlRegexpPtr;n_comp++) { + mem_base = xmlMemBlocks(); + comp = gen_xmlRegexpPtr(n_comp, 0); + + ret_val = xmlRegexpIsDeterminist(comp); + desret_int(ret_val); + call_tests++; + des_xmlRegexpPtr(n_comp, comp, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlRegexpIsDeterminist", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_comp); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlRegexpPrint(void) { + int test_ret = 0; + +#if defined(LIBXML_REGEXP_ENABLED) + int mem_base; + FILE * output; /* the file for the output debug */ + int n_output; + xmlRegexpPtr regexp; /* the compiled regexp */ + int n_regexp; + + for (n_output = 0;n_output < gen_nb_FILE_ptr;n_output++) { + for (n_regexp = 0;n_regexp < gen_nb_xmlRegexpPtr;n_regexp++) { + mem_base = xmlMemBlocks(); + output = gen_FILE_ptr(n_output, 0); + regexp = gen_xmlRegexpPtr(n_regexp, 1); + + xmlRegexpPrint(output, regexp); + call_tests++; + des_FILE_ptr(n_output, output, 0); + des_xmlRegexpPtr(n_regexp, regexp, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlRegexpPrint", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_output); + printf(" %d", n_regexp); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + +static int +test_xmlregexp(void) { + int test_ret = 0; + + if (quiet == 0) printf("Testing xmlregexp : 16 of 30 functions ...\n"); + test_ret += test_xmlExpCtxtNbCons(); + test_ret += test_xmlExpCtxtNbNodes(); + test_ret += test_xmlExpDump(); + test_ret += test_xmlExpExpDerive(); + test_ret += test_xmlExpGetLanguage(); + test_ret += test_xmlExpGetStart(); + test_ret += test_xmlExpIsNillable(); + test_ret += test_xmlExpMaxToken(); + test_ret += test_xmlExpNewAtom(); + test_ret += test_xmlExpNewCtxt(); + test_ret += test_xmlExpNewOr(); + test_ret += test_xmlExpNewRange(); + test_ret += test_xmlExpNewSeq(); + test_ret += test_xmlExpParse(); + test_ret += test_xmlExpRef(); + test_ret += test_xmlExpStringDerive(); + test_ret += test_xmlExpSubsume(); + test_ret += test_xmlRegExecErrInfo(); + test_ret += test_xmlRegExecNextValues(); + test_ret += test_xmlRegExecPushString(); + test_ret += test_xmlRegExecPushString2(); + test_ret += test_xmlRegNewExecCtxt(); + test_ret += test_xmlRegexpCompile(); + test_ret += test_xmlRegexpExec(); + test_ret += test_xmlRegexpIsDeterminist(); + test_ret += test_xmlRegexpPrint(); + + if (test_ret != 0) + printf("Module xmlregexp: %d errors\n", test_ret); + return(test_ret); +} +#ifdef LIBXML_OUTPUT_ENABLED + +#define gen_nb_xmlSaveCtxtPtr 1 +static xmlSaveCtxtPtr gen_xmlSaveCtxtPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlSaveCtxtPtr(int no ATTRIBUTE_UNUSED, xmlSaveCtxtPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} +#endif + + +static int +test_xmlSaveClose(void) { + int test_ret = 0; + +#if defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + int ret_val; + xmlSaveCtxtPtr ctxt; /* a document saving context */ + int n_ctxt; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlSaveCtxtPtr;n_ctxt++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlSaveCtxtPtr(n_ctxt, 0); + + ret_val = xmlSaveClose(ctxt); + desret_int(ret_val); + call_tests++; + des_xmlSaveCtxtPtr(n_ctxt, ctxt, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSaveClose", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlSaveDoc(void) { + int test_ret = 0; + +#if defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + long ret_val; + xmlSaveCtxtPtr ctxt; /* a document saving context */ + int n_ctxt; + xmlDocPtr doc; /* a document */ + int n_doc; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlSaveCtxtPtr;n_ctxt++) { + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlSaveCtxtPtr(n_ctxt, 0); + doc = gen_xmlDocPtr(n_doc, 1); + + ret_val = xmlSaveDoc(ctxt, doc); + desret_long(ret_val); + call_tests++; + des_xmlSaveCtxtPtr(n_ctxt, ctxt, 0); + des_xmlDocPtr(n_doc, doc, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSaveDoc", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_doc); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlSaveFlush(void) { + int test_ret = 0; + +#if defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + int ret_val; + xmlSaveCtxtPtr ctxt; /* a document saving context */ + int n_ctxt; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlSaveCtxtPtr;n_ctxt++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlSaveCtxtPtr(n_ctxt, 0); + + ret_val = xmlSaveFlush(ctxt); + desret_int(ret_val); + call_tests++; + des_xmlSaveCtxtPtr(n_ctxt, ctxt, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSaveFlush", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlSaveSetAttrEscape(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlSaveSetEscape(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlSaveToBuffer(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlSaveToFd(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlSaveToFilename(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlSaveTree(void) { + int test_ret = 0; + +#if defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + long ret_val; + xmlSaveCtxtPtr ctxt; /* a document saving context */ + int n_ctxt; + xmlNodePtr node; /* the top node of the subtree to save */ + int n_node; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlSaveCtxtPtr;n_ctxt++) { + for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlSaveCtxtPtr(n_ctxt, 0); + node = gen_xmlNodePtr(n_node, 1); + + ret_val = xmlSaveTree(ctxt, node); + desret_long(ret_val); + call_tests++; + des_xmlSaveCtxtPtr(n_ctxt, ctxt, 0); + des_xmlNodePtr(n_node, node, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSaveTree", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_node); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + +static int +test_xmlsave(void) { + int test_ret = 0; + + if (quiet == 0) printf("Testing xmlsave : 4 of 10 functions ...\n"); + test_ret += test_xmlSaveClose(); + test_ret += test_xmlSaveDoc(); + test_ret += test_xmlSaveFlush(); + test_ret += test_xmlSaveSetAttrEscape(); + test_ret += test_xmlSaveSetEscape(); + test_ret += test_xmlSaveToBuffer(); + test_ret += test_xmlSaveToFd(); + test_ret += test_xmlSaveToFilename(); + test_ret += test_xmlSaveTree(); + + if (test_ret != 0) + printf("Module xmlsave: %d errors\n", test_ret); + return(test_ret); +} + +static int +test_xmlSchemaDump(void) { + int test_ret = 0; + +#if defined(LIBXML_SCHEMAS_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) + int mem_base; + FILE * output; /* the file output */ + int n_output; + xmlSchemaPtr schema; /* a schema structure */ + int n_schema; + + for (n_output = 0;n_output < gen_nb_FILE_ptr;n_output++) { + for (n_schema = 0;n_schema < gen_nb_xmlSchemaPtr;n_schema++) { + mem_base = xmlMemBlocks(); + output = gen_FILE_ptr(n_output, 0); + schema = gen_xmlSchemaPtr(n_schema, 1); + + xmlSchemaDump(output, schema); + call_tests++; + des_FILE_ptr(n_output, output, 0); + des_xmlSchemaPtr(n_schema, schema, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSchemaDump", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_output); + printf(" %d", n_schema); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + +#ifdef LIBXML_SCHEMAS_ENABLED + +#define gen_nb_xmlSchemaParserCtxtPtr 1 +static xmlSchemaParserCtxtPtr gen_xmlSchemaParserCtxtPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlSchemaParserCtxtPtr(int no ATTRIBUTE_UNUSED, xmlSchemaParserCtxtPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} +#endif + +#ifdef LIBXML_SCHEMAS_ENABLED + +#define gen_nb_xmlSchemaValidityErrorFunc_ptr 1 +static xmlSchemaValidityErrorFunc * gen_xmlSchemaValidityErrorFunc_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlSchemaValidityErrorFunc_ptr(int no ATTRIBUTE_UNUSED, xmlSchemaValidityErrorFunc * val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} +#endif + +#ifdef LIBXML_SCHEMAS_ENABLED + +#define gen_nb_xmlSchemaValidityWarningFunc_ptr 1 +static xmlSchemaValidityWarningFunc * gen_xmlSchemaValidityWarningFunc_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlSchemaValidityWarningFunc_ptr(int no ATTRIBUTE_UNUSED, xmlSchemaValidityWarningFunc * val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} +#endif + + +static int +test_xmlSchemaGetParserErrors(void) { + int test_ret = 0; + +#if defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + int ret_val; + xmlSchemaParserCtxtPtr ctxt; /* a XMl-Schema parser context */ + int n_ctxt; + xmlSchemaValidityErrorFunc * err; /* the error callback result */ + int n_err; + xmlSchemaValidityWarningFunc * warn; /* the warning callback result */ + int n_warn; + void ** ctx; /* contextual data for the callbacks result */ + int n_ctx; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlSchemaParserCtxtPtr;n_ctxt++) { + for (n_err = 0;n_err < gen_nb_xmlSchemaValidityErrorFunc_ptr;n_err++) { + for (n_warn = 0;n_warn < gen_nb_xmlSchemaValidityWarningFunc_ptr;n_warn++) { + for (n_ctx = 0;n_ctx < gen_nb_void_ptr_ptr;n_ctx++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlSchemaParserCtxtPtr(n_ctxt, 0); + err = gen_xmlSchemaValidityErrorFunc_ptr(n_err, 1); + warn = gen_xmlSchemaValidityWarningFunc_ptr(n_warn, 2); + ctx = gen_void_ptr_ptr(n_ctx, 3); + + ret_val = xmlSchemaGetParserErrors(ctxt, err, warn, ctx); + desret_int(ret_val); + call_tests++; + des_xmlSchemaParserCtxtPtr(n_ctxt, ctxt, 0); + des_xmlSchemaValidityErrorFunc_ptr(n_err, err, 1); + des_xmlSchemaValidityWarningFunc_ptr(n_warn, warn, 2); + des_void_ptr_ptr(n_ctx, ctx, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSchemaGetParserErrors", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_err); + printf(" %d", n_warn); + printf(" %d", n_ctx); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlSchemaGetValidErrors(void) { + int test_ret = 0; + +#if defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + int ret_val; + xmlSchemaValidCtxtPtr ctxt; /* a XML-Schema validation context */ + int n_ctxt; + xmlSchemaValidityErrorFunc * err; /* the error function result */ + int n_err; + xmlSchemaValidityWarningFunc * warn; /* the warning function result */ + int n_warn; + void ** ctx; /* the functions context result */ + int n_ctx; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlSchemaValidCtxtPtr;n_ctxt++) { + for (n_err = 0;n_err < gen_nb_xmlSchemaValidityErrorFunc_ptr;n_err++) { + for (n_warn = 0;n_warn < gen_nb_xmlSchemaValidityWarningFunc_ptr;n_warn++) { + for (n_ctx = 0;n_ctx < gen_nb_void_ptr_ptr;n_ctx++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlSchemaValidCtxtPtr(n_ctxt, 0); + err = gen_xmlSchemaValidityErrorFunc_ptr(n_err, 1); + warn = gen_xmlSchemaValidityWarningFunc_ptr(n_warn, 2); + ctx = gen_void_ptr_ptr(n_ctx, 3); + + ret_val = xmlSchemaGetValidErrors(ctxt, err, warn, ctx); + desret_int(ret_val); + call_tests++; + des_xmlSchemaValidCtxtPtr(n_ctxt, ctxt, 0); + des_xmlSchemaValidityErrorFunc_ptr(n_err, err, 1); + des_xmlSchemaValidityWarningFunc_ptr(n_warn, warn, 2); + des_void_ptr_ptr(n_ctx, ctx, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSchemaGetValidErrors", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_err); + printf(" %d", n_warn); + printf(" %d", n_ctx); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlSchemaIsValid(void) { + int test_ret = 0; + +#if defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + int ret_val; + xmlSchemaValidCtxtPtr ctxt; /* the schema validation context */ + int n_ctxt; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlSchemaValidCtxtPtr;n_ctxt++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlSchemaValidCtxtPtr(n_ctxt, 0); + + ret_val = xmlSchemaIsValid(ctxt); + desret_int(ret_val); + call_tests++; + des_xmlSchemaValidCtxtPtr(n_ctxt, ctxt, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSchemaIsValid", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlSchemaNewDocParserCtxt(void) { + int test_ret = 0; + +#if defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + xmlSchemaParserCtxtPtr ret_val; + xmlDocPtr doc; /* a preparsed document tree */ + int n_doc; + + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + mem_base = xmlMemBlocks(); + doc = gen_xmlDocPtr(n_doc, 0); + + ret_val = xmlSchemaNewDocParserCtxt(doc); + desret_xmlSchemaParserCtxtPtr(ret_val); + call_tests++; + des_xmlDocPtr(n_doc, doc, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSchemaNewDocParserCtxt", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlSchemaNewMemParserCtxt(void) { + int test_ret = 0; + +#if defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + xmlSchemaParserCtxtPtr ret_val; + char * buffer; /* a pointer to a char array containing the schemas */ + int n_buffer; + int size; /* the size of the array */ + int n_size; + + for (n_buffer = 0;n_buffer < gen_nb_const_char_ptr;n_buffer++) { + for (n_size = 0;n_size < gen_nb_int;n_size++) { + mem_base = xmlMemBlocks(); + buffer = gen_const_char_ptr(n_buffer, 0); + size = gen_int(n_size, 1); + + ret_val = xmlSchemaNewMemParserCtxt((const char *)buffer, size); + desret_xmlSchemaParserCtxtPtr(ret_val); + call_tests++; + des_const_char_ptr(n_buffer, (const char *)buffer, 0); + des_int(n_size, size, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSchemaNewMemParserCtxt", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_buffer); + printf(" %d", n_size); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlSchemaNewParserCtxt(void) { + int test_ret = 0; + +#if defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + xmlSchemaParserCtxtPtr ret_val; + char * URL; /* the location of the schema */ + int n_URL; + + for (n_URL = 0;n_URL < gen_nb_const_char_ptr;n_URL++) { + mem_base = xmlMemBlocks(); + URL = gen_const_char_ptr(n_URL, 0); + + ret_val = xmlSchemaNewParserCtxt((const char *)URL); + desret_xmlSchemaParserCtxtPtr(ret_val); + call_tests++; + des_const_char_ptr(n_URL, (const char *)URL, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSchemaNewParserCtxt", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_URL); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlSchemaNewValidCtxt(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlSchemaParse(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + +#ifdef LIBXML_SCHEMAS_ENABLED + +#define gen_nb_xmlSAXHandlerPtr_ptr 1 +static xmlSAXHandlerPtr * gen_xmlSAXHandlerPtr_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlSAXHandlerPtr_ptr(int no ATTRIBUTE_UNUSED, xmlSAXHandlerPtr * val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} +#endif + + +static int +test_xmlSchemaSAXPlug(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + +#ifdef LIBXML_SCHEMAS_ENABLED + +#define gen_nb_xmlSchemaSAXPlugPtr 1 +static xmlSchemaSAXPlugPtr gen_xmlSchemaSAXPlugPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlSchemaSAXPlugPtr(int no ATTRIBUTE_UNUSED, xmlSchemaSAXPlugPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} +#endif + + +static int +test_xmlSchemaSAXUnplug(void) { + int test_ret = 0; + +#if defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + int ret_val; + xmlSchemaSAXPlugPtr plug; /* a data structure returned by xmlSchemaSAXPlug */ + int n_plug; + + for (n_plug = 0;n_plug < gen_nb_xmlSchemaSAXPlugPtr;n_plug++) { + mem_base = xmlMemBlocks(); + plug = gen_xmlSchemaSAXPlugPtr(n_plug, 0); + + ret_val = xmlSchemaSAXUnplug(plug); + desret_int(ret_val); + call_tests++; + des_xmlSchemaSAXPlugPtr(n_plug, plug, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSchemaSAXUnplug", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_plug); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlSchemaSetParserErrors(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlSchemaSetParserStructuredErrors(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlSchemaSetValidErrors(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlSchemaSetValidOptions(void) { + int test_ret = 0; + +#if defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + int ret_val; + xmlSchemaValidCtxtPtr ctxt; /* a schema validation context */ + int n_ctxt; + int options; /* a combination of xmlSchemaValidOption */ + int n_options; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlSchemaValidCtxtPtr;n_ctxt++) { + for (n_options = 0;n_options < gen_nb_int;n_options++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlSchemaValidCtxtPtr(n_ctxt, 0); + options = gen_int(n_options, 1); + + ret_val = xmlSchemaSetValidOptions(ctxt, options); + desret_int(ret_val); + call_tests++; + des_xmlSchemaValidCtxtPtr(n_ctxt, ctxt, 0); + des_int(n_options, options, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSchemaSetValidOptions", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_options); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlSchemaSetValidStructuredErrors(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlSchemaValidCtxtGetOptions(void) { + int test_ret = 0; + +#if defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + int ret_val; + xmlSchemaValidCtxtPtr ctxt; /* a schema validation context */ + int n_ctxt; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlSchemaValidCtxtPtr;n_ctxt++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlSchemaValidCtxtPtr(n_ctxt, 0); + + ret_val = xmlSchemaValidCtxtGetOptions(ctxt); + desret_int(ret_val); + call_tests++; + des_xmlSchemaValidCtxtPtr(n_ctxt, ctxt, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSchemaValidCtxtGetOptions", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlSchemaValidCtxtGetParserCtxt(void) { + int test_ret = 0; + +#if defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + xmlParserCtxtPtr ret_val; + xmlSchemaValidCtxtPtr ctxt; /* a schema validation context */ + int n_ctxt; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlSchemaValidCtxtPtr;n_ctxt++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlSchemaValidCtxtPtr(n_ctxt, 0); + + ret_val = xmlSchemaValidCtxtGetParserCtxt(ctxt); + desret_xmlParserCtxtPtr(ret_val); + call_tests++; + des_xmlSchemaValidCtxtPtr(n_ctxt, ctxt, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSchemaValidCtxtGetParserCtxt", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlSchemaValidateDoc(void) { + int test_ret = 0; + +#if defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + int ret_val; + xmlSchemaValidCtxtPtr ctxt; /* a schema validation context */ + int n_ctxt; + xmlDocPtr doc; /* a parsed document tree */ + int n_doc; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlSchemaValidCtxtPtr;n_ctxt++) { + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlSchemaValidCtxtPtr(n_ctxt, 0); + doc = gen_xmlDocPtr(n_doc, 1); + + ret_val = xmlSchemaValidateDoc(ctxt, doc); + desret_int(ret_val); + call_tests++; + des_xmlSchemaValidCtxtPtr(n_ctxt, ctxt, 0); + des_xmlDocPtr(n_doc, doc, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSchemaValidateDoc", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_doc); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlSchemaValidateFile(void) { + int test_ret = 0; + +#if defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + int ret_val; + xmlSchemaValidCtxtPtr ctxt; /* a schema validation context */ + int n_ctxt; + const char * filename; /* the URI of the instance */ + int n_filename; + int options; /* a future set of options, currently unused */ + int n_options; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlSchemaValidCtxtPtr;n_ctxt++) { + for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) { + for (n_options = 0;n_options < gen_nb_int;n_options++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlSchemaValidCtxtPtr(n_ctxt, 0); + filename = gen_filepath(n_filename, 1); + options = gen_int(n_options, 2); + + ret_val = xmlSchemaValidateFile(ctxt, filename, options); + desret_int(ret_val); + call_tests++; + des_xmlSchemaValidCtxtPtr(n_ctxt, ctxt, 0); + des_filepath(n_filename, filename, 1); + des_int(n_options, options, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSchemaValidateFile", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_filename); + printf(" %d", n_options); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlSchemaValidateOneElement(void) { + int test_ret = 0; + +#if defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + int ret_val; + xmlSchemaValidCtxtPtr ctxt; /* a schema validation context */ + int n_ctxt; + xmlNodePtr elem; /* an element node */ + int n_elem; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlSchemaValidCtxtPtr;n_ctxt++) { + for (n_elem = 0;n_elem < gen_nb_xmlNodePtr;n_elem++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlSchemaValidCtxtPtr(n_ctxt, 0); + elem = gen_xmlNodePtr(n_elem, 1); + + ret_val = xmlSchemaValidateOneElement(ctxt, elem); + desret_int(ret_val); + call_tests++; + des_xmlSchemaValidCtxtPtr(n_ctxt, ctxt, 0); + des_xmlNodePtr(n_elem, elem, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSchemaValidateOneElement", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_elem); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlSchemaValidateSetFilename(void) { + int test_ret = 0; + +#if defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + xmlSchemaValidCtxtPtr vctxt; /* the schema validation context */ + int n_vctxt; + const char * filename; /* the file name */ + int n_filename; + + for (n_vctxt = 0;n_vctxt < gen_nb_xmlSchemaValidCtxtPtr;n_vctxt++) { + for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) { + mem_base = xmlMemBlocks(); + vctxt = gen_xmlSchemaValidCtxtPtr(n_vctxt, 0); + filename = gen_filepath(n_filename, 1); + + xmlSchemaValidateSetFilename(vctxt, filename); + call_tests++; + des_xmlSchemaValidCtxtPtr(n_vctxt, vctxt, 0); + des_filepath(n_filename, filename, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSchemaValidateSetFilename", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_vctxt); + printf(" %d", n_filename); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlSchemaValidateSetLocator(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlSchemaValidateStream(void) { + int test_ret = 0; + +#if defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + int ret_val; + xmlSchemaValidCtxtPtr ctxt; /* a schema validation context */ + int n_ctxt; + xmlParserInputBufferPtr input; /* the input to use for reading the data */ + int n_input; + xmlCharEncoding enc; /* an optional encoding information */ + int n_enc; + xmlSAXHandlerPtr sax; /* a SAX handler for the resulting events */ + int n_sax; + void * user_data; /* the context to provide to the SAX handler. */ + int n_user_data; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlSchemaValidCtxtPtr;n_ctxt++) { + for (n_input = 0;n_input < gen_nb_xmlParserInputBufferPtr;n_input++) { + for (n_enc = 0;n_enc < gen_nb_xmlCharEncoding;n_enc++) { + for (n_sax = 0;n_sax < gen_nb_xmlSAXHandlerPtr;n_sax++) { + for (n_user_data = 0;n_user_data < gen_nb_userdata;n_user_data++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlSchemaValidCtxtPtr(n_ctxt, 0); + input = gen_xmlParserInputBufferPtr(n_input, 1); + enc = gen_xmlCharEncoding(n_enc, 2); + sax = gen_xmlSAXHandlerPtr(n_sax, 3); + user_data = gen_userdata(n_user_data, 4); + + ret_val = xmlSchemaValidateStream(ctxt, input, enc, sax, user_data); + desret_int(ret_val); + call_tests++; + des_xmlSchemaValidCtxtPtr(n_ctxt, ctxt, 0); + des_xmlParserInputBufferPtr(n_input, input, 1); + des_xmlCharEncoding(n_enc, enc, 2); + des_xmlSAXHandlerPtr(n_sax, sax, 3); + des_userdata(n_user_data, user_data, 4); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSchemaValidateStream", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_input); + printf(" %d", n_enc); + printf(" %d", n_sax); + printf(" %d", n_user_data); + printf("\n"); + } + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + +static int +test_xmlschemas(void) { + int test_ret = 0; + + if (quiet == 0) printf("Testing xmlschemas : 16 of 27 functions ...\n"); + test_ret += test_xmlSchemaDump(); + test_ret += test_xmlSchemaGetParserErrors(); + test_ret += test_xmlSchemaGetValidErrors(); + test_ret += test_xmlSchemaIsValid(); + test_ret += test_xmlSchemaNewDocParserCtxt(); + test_ret += test_xmlSchemaNewMemParserCtxt(); + test_ret += test_xmlSchemaNewParserCtxt(); + test_ret += test_xmlSchemaNewValidCtxt(); + test_ret += test_xmlSchemaParse(); + test_ret += test_xmlSchemaSAXPlug(); + test_ret += test_xmlSchemaSAXUnplug(); + test_ret += test_xmlSchemaSetParserErrors(); + test_ret += test_xmlSchemaSetParserStructuredErrors(); + test_ret += test_xmlSchemaSetValidErrors(); + test_ret += test_xmlSchemaSetValidOptions(); + test_ret += test_xmlSchemaSetValidStructuredErrors(); + test_ret += test_xmlSchemaValidCtxtGetOptions(); + test_ret += test_xmlSchemaValidCtxtGetParserCtxt(); + test_ret += test_xmlSchemaValidateDoc(); + test_ret += test_xmlSchemaValidateFile(); + test_ret += test_xmlSchemaValidateOneElement(); + test_ret += test_xmlSchemaValidateSetFilename(); + test_ret += test_xmlSchemaValidateSetLocator(); + test_ret += test_xmlSchemaValidateStream(); + + if (test_ret != 0) + printf("Module xmlschemas: %d errors\n", test_ret); + return(test_ret); +} +#ifdef LIBXML_SCHEMAS_ENABLED + +#define gen_nb_xmlSchemaFacetPtr 1 +static xmlSchemaFacetPtr gen_xmlSchemaFacetPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlSchemaFacetPtr(int no ATTRIBUTE_UNUSED, xmlSchemaFacetPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} +#endif + +#ifdef LIBXML_SCHEMAS_ENABLED + +#define gen_nb_xmlSchemaTypePtr 1 +static xmlSchemaTypePtr gen_xmlSchemaTypePtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlSchemaTypePtr(int no ATTRIBUTE_UNUSED, xmlSchemaTypePtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} +#endif + + +static int +test_xmlSchemaCheckFacet(void) { + int test_ret = 0; + +#if defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + int ret_val; + xmlSchemaFacetPtr facet; /* the facet */ + int n_facet; + xmlSchemaTypePtr typeDecl; /* the schema type definition */ + int n_typeDecl; + xmlSchemaParserCtxtPtr pctxt; /* the schema parser context or NULL */ + int n_pctxt; + xmlChar * name; /* the optional name of the type */ + int n_name; + + for (n_facet = 0;n_facet < gen_nb_xmlSchemaFacetPtr;n_facet++) { + for (n_typeDecl = 0;n_typeDecl < gen_nb_xmlSchemaTypePtr;n_typeDecl++) { + for (n_pctxt = 0;n_pctxt < gen_nb_xmlSchemaParserCtxtPtr;n_pctxt++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + mem_base = xmlMemBlocks(); + facet = gen_xmlSchemaFacetPtr(n_facet, 0); + typeDecl = gen_xmlSchemaTypePtr(n_typeDecl, 1); + pctxt = gen_xmlSchemaParserCtxtPtr(n_pctxt, 2); + name = gen_const_xmlChar_ptr(n_name, 3); + + ret_val = xmlSchemaCheckFacet(facet, typeDecl, pctxt, (const xmlChar *)name); + desret_int(ret_val); + call_tests++; + des_xmlSchemaFacetPtr(n_facet, facet, 0); + des_xmlSchemaTypePtr(n_typeDecl, typeDecl, 1); + des_xmlSchemaParserCtxtPtr(n_pctxt, pctxt, 2); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSchemaCheckFacet", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_facet); + printf(" %d", n_typeDecl); + printf(" %d", n_pctxt); + printf(" %d", n_name); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlSchemaCleanupTypes(void) { + int test_ret = 0; + +#if defined(LIBXML_SCHEMAS_ENABLED) + + + xmlSchemaCleanupTypes(); + call_tests++; + xmlResetLastError(); + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlSchemaCollapseString(void) { + int test_ret = 0; + +#if defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + xmlChar * ret_val; + xmlChar * value; /* a value */ + int n_value; + + for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) { + mem_base = xmlMemBlocks(); + value = gen_const_xmlChar_ptr(n_value, 0); + + ret_val = xmlSchemaCollapseString((const xmlChar *)value); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSchemaCollapseString", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_value); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + +#ifdef LIBXML_SCHEMAS_ENABLED + +#define gen_nb_xmlSchemaValPtr 1 +static xmlSchemaValPtr gen_xmlSchemaValPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlSchemaValPtr(int no ATTRIBUTE_UNUSED, xmlSchemaValPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} +#endif + + +static int +test_xmlSchemaCompareValues(void) { + int test_ret = 0; + +#if defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + int ret_val; + xmlSchemaValPtr x; /* a first value */ + int n_x; + xmlSchemaValPtr y; /* a second value */ + int n_y; + + for (n_x = 0;n_x < gen_nb_xmlSchemaValPtr;n_x++) { + for (n_y = 0;n_y < gen_nb_xmlSchemaValPtr;n_y++) { + mem_base = xmlMemBlocks(); + x = gen_xmlSchemaValPtr(n_x, 0); + y = gen_xmlSchemaValPtr(n_y, 1); + + ret_val = xmlSchemaCompareValues(x, y); + desret_int(ret_val); + call_tests++; + des_xmlSchemaValPtr(n_x, x, 0); + des_xmlSchemaValPtr(n_y, y, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSchemaCompareValues", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_x); + printf(" %d", n_y); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlSchemaCompareValuesWhtsp(void) { + int test_ret = 0; + +#if defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + int ret_val; + xmlSchemaValPtr x; /* a first value */ + int n_x; + xmlSchemaWhitespaceValueType xws; /* the whitespace value of x */ + int n_xws; + xmlSchemaValPtr y; /* a second value */ + int n_y; + xmlSchemaWhitespaceValueType yws; /* the whitespace value of y */ + int n_yws; + + for (n_x = 0;n_x < gen_nb_xmlSchemaValPtr;n_x++) { + for (n_xws = 0;n_xws < gen_nb_xmlSchemaWhitespaceValueType;n_xws++) { + for (n_y = 0;n_y < gen_nb_xmlSchemaValPtr;n_y++) { + for (n_yws = 0;n_yws < gen_nb_xmlSchemaWhitespaceValueType;n_yws++) { + mem_base = xmlMemBlocks(); + x = gen_xmlSchemaValPtr(n_x, 0); + xws = gen_xmlSchemaWhitespaceValueType(n_xws, 1); + y = gen_xmlSchemaValPtr(n_y, 2); + yws = gen_xmlSchemaWhitespaceValueType(n_yws, 3); + + ret_val = xmlSchemaCompareValuesWhtsp(x, xws, y, yws); + desret_int(ret_val); + call_tests++; + des_xmlSchemaValPtr(n_x, x, 0); + des_xmlSchemaWhitespaceValueType(n_xws, xws, 1); + des_xmlSchemaValPtr(n_y, y, 2); + des_xmlSchemaWhitespaceValueType(n_yws, yws, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSchemaCompareValuesWhtsp", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_x); + printf(" %d", n_xws); + printf(" %d", n_y); + printf(" %d", n_yws); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlSchemaCopyValue(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlSchemaGetBuiltInListSimpleTypeItemType(void) { + int test_ret = 0; + +#if defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + xmlSchemaTypePtr ret_val; + xmlSchemaTypePtr type; /* the built-in simple type. */ + int n_type; + + for (n_type = 0;n_type < gen_nb_xmlSchemaTypePtr;n_type++) { + mem_base = xmlMemBlocks(); + type = gen_xmlSchemaTypePtr(n_type, 0); + + ret_val = xmlSchemaGetBuiltInListSimpleTypeItemType(type); + desret_xmlSchemaTypePtr(ret_val); + call_tests++; + des_xmlSchemaTypePtr(n_type, type, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSchemaGetBuiltInListSimpleTypeItemType", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_type); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlSchemaGetBuiltInType(void) { + int test_ret = 0; + +#if defined(LIBXML_SCHEMAS_ENABLED) + xmlSchemaTypePtr ret_val; + xmlSchemaValType type; /* the type of the built in type */ + int n_type; + + for (n_type = 0;n_type < gen_nb_xmlSchemaValType;n_type++) { + type = gen_xmlSchemaValType(n_type, 0); + + ret_val = xmlSchemaGetBuiltInType(type); + desret_xmlSchemaTypePtr(ret_val); + call_tests++; + des_xmlSchemaValType(n_type, type, 0); + xmlResetLastError(); + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlSchemaGetCanonValue(void) { + int test_ret = 0; + +#if defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + int ret_val; + xmlSchemaValPtr val; /* the precomputed value */ + int n_val; + xmlChar ** retValue; /* the returned value */ + int n_retValue; + + for (n_val = 0;n_val < gen_nb_xmlSchemaValPtr;n_val++) { + for (n_retValue = 0;n_retValue < gen_nb_const_xmlChar_ptr_ptr;n_retValue++) { + mem_base = xmlMemBlocks(); + val = gen_xmlSchemaValPtr(n_val, 0); + retValue = gen_const_xmlChar_ptr_ptr(n_retValue, 1); + + ret_val = xmlSchemaGetCanonValue(val, (const xmlChar **)retValue); + desret_int(ret_val); + call_tests++; + des_xmlSchemaValPtr(n_val, val, 0); + des_const_xmlChar_ptr_ptr(n_retValue, (const xmlChar **)retValue, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSchemaGetCanonValue", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_val); + printf(" %d", n_retValue); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlSchemaGetCanonValueWhtsp(void) { + int test_ret = 0; + +#if defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + int ret_val; + xmlSchemaValPtr val; /* the precomputed value */ + int n_val; + xmlChar ** retValue; /* the returned value */ + int n_retValue; + xmlSchemaWhitespaceValueType ws; /* the whitespace type of the value */ + int n_ws; + + for (n_val = 0;n_val < gen_nb_xmlSchemaValPtr;n_val++) { + for (n_retValue = 0;n_retValue < gen_nb_const_xmlChar_ptr_ptr;n_retValue++) { + for (n_ws = 0;n_ws < gen_nb_xmlSchemaWhitespaceValueType;n_ws++) { + mem_base = xmlMemBlocks(); + val = gen_xmlSchemaValPtr(n_val, 0); + retValue = gen_const_xmlChar_ptr_ptr(n_retValue, 1); + ws = gen_xmlSchemaWhitespaceValueType(n_ws, 2); + + ret_val = xmlSchemaGetCanonValueWhtsp(val, (const xmlChar **)retValue, ws); + desret_int(ret_val); + call_tests++; + des_xmlSchemaValPtr(n_val, val, 0); + des_const_xmlChar_ptr_ptr(n_retValue, (const xmlChar **)retValue, 1); + des_xmlSchemaWhitespaceValueType(n_ws, ws, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSchemaGetCanonValueWhtsp", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_val); + printf(" %d", n_retValue); + printf(" %d", n_ws); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlSchemaGetFacetValueAsULong(void) { + int test_ret = 0; + +#if defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + unsigned long ret_val; + xmlSchemaFacetPtr facet; /* an schemas type facet */ + int n_facet; + + for (n_facet = 0;n_facet < gen_nb_xmlSchemaFacetPtr;n_facet++) { + mem_base = xmlMemBlocks(); + facet = gen_xmlSchemaFacetPtr(n_facet, 0); + + ret_val = xmlSchemaGetFacetValueAsULong(facet); + desret_unsigned_long(ret_val); + call_tests++; + des_xmlSchemaFacetPtr(n_facet, facet, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSchemaGetFacetValueAsULong", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_facet); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlSchemaGetPredefinedType(void) { + int test_ret = 0; + +#if defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + xmlSchemaTypePtr ret_val; + xmlChar * name; /* the type name */ + int n_name; + xmlChar * ns; /* the URI of the namespace usually "http://www.w3.org/2001/XMLSchema" */ + int n_ns; + + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_ns = 0;n_ns < gen_nb_const_xmlChar_ptr;n_ns++) { + mem_base = xmlMemBlocks(); + name = gen_const_xmlChar_ptr(n_name, 0); + ns = gen_const_xmlChar_ptr(n_ns, 1); + + ret_val = xmlSchemaGetPredefinedType((const xmlChar *)name, (const xmlChar *)ns); + desret_xmlSchemaTypePtr(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 0); + des_const_xmlChar_ptr(n_ns, (const xmlChar *)ns, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSchemaGetPredefinedType", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_name); + printf(" %d", n_ns); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlSchemaGetValType(void) { + int test_ret = 0; + +#if defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + xmlSchemaValType ret_val; + xmlSchemaValPtr val; /* a schemas value */ + int n_val; + + for (n_val = 0;n_val < gen_nb_xmlSchemaValPtr;n_val++) { + mem_base = xmlMemBlocks(); + val = gen_xmlSchemaValPtr(n_val, 0); + + ret_val = xmlSchemaGetValType(val); + desret_xmlSchemaValType(ret_val); + call_tests++; + des_xmlSchemaValPtr(n_val, val, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSchemaGetValType", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_val); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlSchemaInitTypes(void) { + int test_ret = 0; + +#if defined(LIBXML_SCHEMAS_ENABLED) + + + xmlSchemaInitTypes(); + call_tests++; + xmlResetLastError(); + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlSchemaIsBuiltInTypeFacet(void) { + int test_ret = 0; + +#if defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + int ret_val; + xmlSchemaTypePtr type; /* the built-in type */ + int n_type; + int facetType; /* the facet type */ + int n_facetType; + + for (n_type = 0;n_type < gen_nb_xmlSchemaTypePtr;n_type++) { + for (n_facetType = 0;n_facetType < gen_nb_int;n_facetType++) { + mem_base = xmlMemBlocks(); + type = gen_xmlSchemaTypePtr(n_type, 0); + facetType = gen_int(n_facetType, 1); + + ret_val = xmlSchemaIsBuiltInTypeFacet(type, facetType); + desret_int(ret_val); + call_tests++; + des_xmlSchemaTypePtr(n_type, type, 0); + des_int(n_facetType, facetType, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSchemaIsBuiltInTypeFacet", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_type); + printf(" %d", n_facetType); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlSchemaNewFacet(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlSchemaNewNOTATIONValue(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlSchemaNewQNameValue(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlSchemaNewStringValue(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + +#ifdef LIBXML_SCHEMAS_ENABLED + +#define gen_nb_xmlSchemaValPtr_ptr 1 +static xmlSchemaValPtr * gen_xmlSchemaValPtr_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlSchemaValPtr_ptr(int no ATTRIBUTE_UNUSED, xmlSchemaValPtr * val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} +#endif + + +static int +test_xmlSchemaValPredefTypeNode(void) { + int test_ret = 0; + +#if defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + int ret_val; + xmlSchemaTypePtr type; /* the predefined type */ + int n_type; + xmlChar * value; /* the value to check */ + int n_value; + xmlSchemaValPtr * val; /* the return computed value */ + int n_val; + xmlNodePtr node; /* the node containing the value */ + int n_node; + + for (n_type = 0;n_type < gen_nb_xmlSchemaTypePtr;n_type++) { + for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) { + for (n_val = 0;n_val < gen_nb_xmlSchemaValPtr_ptr;n_val++) { + for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) { + mem_base = xmlMemBlocks(); + type = gen_xmlSchemaTypePtr(n_type, 0); + value = gen_const_xmlChar_ptr(n_value, 1); + val = gen_xmlSchemaValPtr_ptr(n_val, 2); + node = gen_xmlNodePtr(n_node, 3); + + ret_val = xmlSchemaValPredefTypeNode(type, (const xmlChar *)value, val, node); + desret_int(ret_val); + call_tests++; + des_xmlSchemaTypePtr(n_type, type, 0); + des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 1); + des_xmlSchemaValPtr_ptr(n_val, val, 2); + des_xmlNodePtr(n_node, node, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSchemaValPredefTypeNode", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_type); + printf(" %d", n_value); + printf(" %d", n_val); + printf(" %d", n_node); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlSchemaValPredefTypeNodeNoNorm(void) { + int test_ret = 0; + +#if defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + int ret_val; + xmlSchemaTypePtr type; /* the predefined type */ + int n_type; + xmlChar * value; /* the value to check */ + int n_value; + xmlSchemaValPtr * val; /* the return computed value */ + int n_val; + xmlNodePtr node; /* the node containing the value */ + int n_node; + + for (n_type = 0;n_type < gen_nb_xmlSchemaTypePtr;n_type++) { + for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) { + for (n_val = 0;n_val < gen_nb_xmlSchemaValPtr_ptr;n_val++) { + for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) { + mem_base = xmlMemBlocks(); + type = gen_xmlSchemaTypePtr(n_type, 0); + value = gen_const_xmlChar_ptr(n_value, 1); + val = gen_xmlSchemaValPtr_ptr(n_val, 2); + node = gen_xmlNodePtr(n_node, 3); + + ret_val = xmlSchemaValPredefTypeNodeNoNorm(type, (const xmlChar *)value, val, node); + desret_int(ret_val); + call_tests++; + des_xmlSchemaTypePtr(n_type, type, 0); + des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 1); + des_xmlSchemaValPtr_ptr(n_val, val, 2); + des_xmlNodePtr(n_node, node, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSchemaValPredefTypeNodeNoNorm", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_type); + printf(" %d", n_value); + printf(" %d", n_val); + printf(" %d", n_node); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlSchemaValidateFacet(void) { + int test_ret = 0; + +#if defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + int ret_val; + xmlSchemaTypePtr base; /* the base type */ + int n_base; + xmlSchemaFacetPtr facet; /* the facet to check */ + int n_facet; + xmlChar * value; /* the lexical repr of the value to validate */ + int n_value; + xmlSchemaValPtr val; /* the precomputed value */ + int n_val; + + for (n_base = 0;n_base < gen_nb_xmlSchemaTypePtr;n_base++) { + for (n_facet = 0;n_facet < gen_nb_xmlSchemaFacetPtr;n_facet++) { + for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) { + for (n_val = 0;n_val < gen_nb_xmlSchemaValPtr;n_val++) { + mem_base = xmlMemBlocks(); + base = gen_xmlSchemaTypePtr(n_base, 0); + facet = gen_xmlSchemaFacetPtr(n_facet, 1); + value = gen_const_xmlChar_ptr(n_value, 2); + val = gen_xmlSchemaValPtr(n_val, 3); + + ret_val = xmlSchemaValidateFacet(base, facet, (const xmlChar *)value, val); + desret_int(ret_val); + call_tests++; + des_xmlSchemaTypePtr(n_base, base, 0); + des_xmlSchemaFacetPtr(n_facet, facet, 1); + des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 2); + des_xmlSchemaValPtr(n_val, val, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSchemaValidateFacet", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_base); + printf(" %d", n_facet); + printf(" %d", n_value); + printf(" %d", n_val); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlSchemaValidateFacetWhtsp(void) { + int test_ret = 0; + +#if defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + int ret_val; + xmlSchemaFacetPtr facet; /* the facet to check */ + int n_facet; + xmlSchemaWhitespaceValueType fws; /* the whitespace type of the facet's value */ + int n_fws; + xmlSchemaValType valType; /* the built-in type of the value */ + int n_valType; + xmlChar * value; /* the lexical (or normalized for pattern) repr of the value to validate */ + int n_value; + xmlSchemaValPtr val; /* the precomputed value */ + int n_val; + xmlSchemaWhitespaceValueType ws; /* the whitespace type of the value */ + int n_ws; + + for (n_facet = 0;n_facet < gen_nb_xmlSchemaFacetPtr;n_facet++) { + for (n_fws = 0;n_fws < gen_nb_xmlSchemaWhitespaceValueType;n_fws++) { + for (n_valType = 0;n_valType < gen_nb_xmlSchemaValType;n_valType++) { + for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) { + for (n_val = 0;n_val < gen_nb_xmlSchemaValPtr;n_val++) { + for (n_ws = 0;n_ws < gen_nb_xmlSchemaWhitespaceValueType;n_ws++) { + mem_base = xmlMemBlocks(); + facet = gen_xmlSchemaFacetPtr(n_facet, 0); + fws = gen_xmlSchemaWhitespaceValueType(n_fws, 1); + valType = gen_xmlSchemaValType(n_valType, 2); + value = gen_const_xmlChar_ptr(n_value, 3); + val = gen_xmlSchemaValPtr(n_val, 4); + ws = gen_xmlSchemaWhitespaceValueType(n_ws, 5); + + ret_val = xmlSchemaValidateFacetWhtsp(facet, fws, valType, (const xmlChar *)value, val, ws); + desret_int(ret_val); + call_tests++; + des_xmlSchemaFacetPtr(n_facet, facet, 0); + des_xmlSchemaWhitespaceValueType(n_fws, fws, 1); + des_xmlSchemaValType(n_valType, valType, 2); + des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 3); + des_xmlSchemaValPtr(n_val, val, 4); + des_xmlSchemaWhitespaceValueType(n_ws, ws, 5); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSchemaValidateFacetWhtsp", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_facet); + printf(" %d", n_fws); + printf(" %d", n_valType); + printf(" %d", n_value); + printf(" %d", n_val); + printf(" %d", n_ws); + printf("\n"); + } + } + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlSchemaValidateLengthFacet(void) { + int test_ret = 0; + +#if defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + int ret_val; + xmlSchemaTypePtr type; /* the built-in type */ + int n_type; + xmlSchemaFacetPtr facet; /* the facet to check */ + int n_facet; + xmlChar * value; /* the lexical repr. of the value to be validated */ + int n_value; + xmlSchemaValPtr val; /* the precomputed value */ + int n_val; + unsigned long * length; /* the actual length of the value */ + int n_length; + + for (n_type = 0;n_type < gen_nb_xmlSchemaTypePtr;n_type++) { + for (n_facet = 0;n_facet < gen_nb_xmlSchemaFacetPtr;n_facet++) { + for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) { + for (n_val = 0;n_val < gen_nb_xmlSchemaValPtr;n_val++) { + for (n_length = 0;n_length < gen_nb_unsigned_long_ptr;n_length++) { + mem_base = xmlMemBlocks(); + type = gen_xmlSchemaTypePtr(n_type, 0); + facet = gen_xmlSchemaFacetPtr(n_facet, 1); + value = gen_const_xmlChar_ptr(n_value, 2); + val = gen_xmlSchemaValPtr(n_val, 3); + length = gen_unsigned_long_ptr(n_length, 4); + + ret_val = xmlSchemaValidateLengthFacet(type, facet, (const xmlChar *)value, val, length); + desret_int(ret_val); + call_tests++; + des_xmlSchemaTypePtr(n_type, type, 0); + des_xmlSchemaFacetPtr(n_facet, facet, 1); + des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 2); + des_xmlSchemaValPtr(n_val, val, 3); + des_unsigned_long_ptr(n_length, length, 4); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSchemaValidateLengthFacet", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_type); + printf(" %d", n_facet); + printf(" %d", n_value); + printf(" %d", n_val); + printf(" %d", n_length); + printf("\n"); + } + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlSchemaValidateLengthFacetWhtsp(void) { + int test_ret = 0; + +#if defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + int ret_val; + xmlSchemaFacetPtr facet; /* the facet to check */ + int n_facet; + xmlSchemaValType valType; /* the built-in type */ + int n_valType; + xmlChar * value; /* the lexical repr. of the value to be validated */ + int n_value; + xmlSchemaValPtr val; /* the precomputed value */ + int n_val; + unsigned long * length; /* the actual length of the value */ + int n_length; + xmlSchemaWhitespaceValueType ws; /* the whitespace type of the value */ + int n_ws; + + for (n_facet = 0;n_facet < gen_nb_xmlSchemaFacetPtr;n_facet++) { + for (n_valType = 0;n_valType < gen_nb_xmlSchemaValType;n_valType++) { + for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) { + for (n_val = 0;n_val < gen_nb_xmlSchemaValPtr;n_val++) { + for (n_length = 0;n_length < gen_nb_unsigned_long_ptr;n_length++) { + for (n_ws = 0;n_ws < gen_nb_xmlSchemaWhitespaceValueType;n_ws++) { + mem_base = xmlMemBlocks(); + facet = gen_xmlSchemaFacetPtr(n_facet, 0); + valType = gen_xmlSchemaValType(n_valType, 1); + value = gen_const_xmlChar_ptr(n_value, 2); + val = gen_xmlSchemaValPtr(n_val, 3); + length = gen_unsigned_long_ptr(n_length, 4); + ws = gen_xmlSchemaWhitespaceValueType(n_ws, 5); + + ret_val = xmlSchemaValidateLengthFacetWhtsp(facet, valType, (const xmlChar *)value, val, length, ws); + desret_int(ret_val); + call_tests++; + des_xmlSchemaFacetPtr(n_facet, facet, 0); + des_xmlSchemaValType(n_valType, valType, 1); + des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 2); + des_xmlSchemaValPtr(n_val, val, 3); + des_unsigned_long_ptr(n_length, length, 4); + des_xmlSchemaWhitespaceValueType(n_ws, ws, 5); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSchemaValidateLengthFacetWhtsp", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_facet); + printf(" %d", n_valType); + printf(" %d", n_value); + printf(" %d", n_val); + printf(" %d", n_length); + printf(" %d", n_ws); + printf("\n"); + } + } + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlSchemaValidateListSimpleTypeFacet(void) { + int test_ret = 0; + +#if defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + int ret_val; + xmlSchemaFacetPtr facet; /* the facet to check */ + int n_facet; + xmlChar * value; /* the lexical repr of the value to validate */ + int n_value; + unsigned long actualLen; /* the number of list items */ + int n_actualLen; + unsigned long * expectedLen; /* the resulting expected number of list items */ + int n_expectedLen; + + for (n_facet = 0;n_facet < gen_nb_xmlSchemaFacetPtr;n_facet++) { + for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) { + for (n_actualLen = 0;n_actualLen < gen_nb_unsigned_long;n_actualLen++) { + for (n_expectedLen = 0;n_expectedLen < gen_nb_unsigned_long_ptr;n_expectedLen++) { + mem_base = xmlMemBlocks(); + facet = gen_xmlSchemaFacetPtr(n_facet, 0); + value = gen_const_xmlChar_ptr(n_value, 1); + actualLen = gen_unsigned_long(n_actualLen, 2); + expectedLen = gen_unsigned_long_ptr(n_expectedLen, 3); + + ret_val = xmlSchemaValidateListSimpleTypeFacet(facet, (const xmlChar *)value, actualLen, expectedLen); + desret_int(ret_val); + call_tests++; + des_xmlSchemaFacetPtr(n_facet, facet, 0); + des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 1); + des_unsigned_long(n_actualLen, actualLen, 2); + des_unsigned_long_ptr(n_expectedLen, expectedLen, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSchemaValidateListSimpleTypeFacet", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_facet); + printf(" %d", n_value); + printf(" %d", n_actualLen); + printf(" %d", n_expectedLen); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlSchemaValidatePredefinedType(void) { + int test_ret = 0; + +#if defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + int ret_val; + xmlSchemaTypePtr type; /* the predefined type */ + int n_type; + xmlChar * value; /* the value to check */ + int n_value; + xmlSchemaValPtr * val; /* the return computed value */ + int n_val; + + for (n_type = 0;n_type < gen_nb_xmlSchemaTypePtr;n_type++) { + for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) { + for (n_val = 0;n_val < gen_nb_xmlSchemaValPtr_ptr;n_val++) { + mem_base = xmlMemBlocks(); + type = gen_xmlSchemaTypePtr(n_type, 0); + value = gen_const_xmlChar_ptr(n_value, 1); + val = gen_xmlSchemaValPtr_ptr(n_val, 2); + + ret_val = xmlSchemaValidatePredefinedType(type, (const xmlChar *)value, val); + desret_int(ret_val); + call_tests++; + des_xmlSchemaTypePtr(n_type, type, 0); + des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 1); + des_xmlSchemaValPtr_ptr(n_val, val, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSchemaValidatePredefinedType", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_type); + printf(" %d", n_value); + printf(" %d", n_val); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlSchemaValueAppend(void) { + int test_ret = 0; + +#if defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + int ret_val; + xmlSchemaValPtr prev; /* the value */ + int n_prev; + xmlSchemaValPtr cur; /* the value to be appended */ + int n_cur; + + for (n_prev = 0;n_prev < gen_nb_xmlSchemaValPtr;n_prev++) { + for (n_cur = 0;n_cur < gen_nb_xmlSchemaValPtr;n_cur++) { + mem_base = xmlMemBlocks(); + prev = gen_xmlSchemaValPtr(n_prev, 0); + cur = gen_xmlSchemaValPtr(n_cur, 1); + + ret_val = xmlSchemaValueAppend(prev, cur); + desret_int(ret_val); + call_tests++; + des_xmlSchemaValPtr(n_prev, prev, 0); + des_xmlSchemaValPtr(n_cur, cur, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSchemaValueAppend", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_prev); + printf(" %d", n_cur); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlSchemaValueGetAsBoolean(void) { + int test_ret = 0; + +#if defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + int ret_val; + xmlSchemaValPtr val; /* the value */ + int n_val; + + for (n_val = 0;n_val < gen_nb_xmlSchemaValPtr;n_val++) { + mem_base = xmlMemBlocks(); + val = gen_xmlSchemaValPtr(n_val, 0); + + ret_val = xmlSchemaValueGetAsBoolean(val); + desret_int(ret_val); + call_tests++; + des_xmlSchemaValPtr(n_val, val, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSchemaValueGetAsBoolean", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_val); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlSchemaValueGetAsString(void) { + int test_ret = 0; + +#if defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + const xmlChar * ret_val; + xmlSchemaValPtr val; /* the value */ + int n_val; + + for (n_val = 0;n_val < gen_nb_xmlSchemaValPtr;n_val++) { + mem_base = xmlMemBlocks(); + val = gen_xmlSchemaValPtr(n_val, 0); + + ret_val = xmlSchemaValueGetAsString(val); + desret_const_xmlChar_ptr(ret_val); + call_tests++; + des_xmlSchemaValPtr(n_val, val, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSchemaValueGetAsString", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_val); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlSchemaValueGetNext(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlSchemaWhiteSpaceReplace(void) { + int test_ret = 0; + +#if defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + xmlChar * ret_val; + xmlChar * value; /* a value */ + int n_value; + + for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) { + mem_base = xmlMemBlocks(); + value = gen_const_xmlChar_ptr(n_value, 0); + + ret_val = xmlSchemaWhiteSpaceReplace((const xmlChar *)value); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlSchemaWhiteSpaceReplace", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_value); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + +static int +test_xmlschemastypes(void) { + int test_ret = 0; + + if (quiet == 0) printf("Testing xmlschemastypes : 26 of 34 functions ...\n"); + test_ret += test_xmlSchemaCheckFacet(); + test_ret += test_xmlSchemaCleanupTypes(); + test_ret += test_xmlSchemaCollapseString(); + test_ret += test_xmlSchemaCompareValues(); + test_ret += test_xmlSchemaCompareValuesWhtsp(); + test_ret += test_xmlSchemaCopyValue(); + test_ret += test_xmlSchemaGetBuiltInListSimpleTypeItemType(); + test_ret += test_xmlSchemaGetBuiltInType(); + test_ret += test_xmlSchemaGetCanonValue(); + test_ret += test_xmlSchemaGetCanonValueWhtsp(); + test_ret += test_xmlSchemaGetFacetValueAsULong(); + test_ret += test_xmlSchemaGetPredefinedType(); + test_ret += test_xmlSchemaGetValType(); + test_ret += test_xmlSchemaInitTypes(); + test_ret += test_xmlSchemaIsBuiltInTypeFacet(); + test_ret += test_xmlSchemaNewFacet(); + test_ret += test_xmlSchemaNewNOTATIONValue(); + test_ret += test_xmlSchemaNewQNameValue(); + test_ret += test_xmlSchemaNewStringValue(); + test_ret += test_xmlSchemaValPredefTypeNode(); + test_ret += test_xmlSchemaValPredefTypeNodeNoNorm(); + test_ret += test_xmlSchemaValidateFacet(); + test_ret += test_xmlSchemaValidateFacetWhtsp(); + test_ret += test_xmlSchemaValidateLengthFacet(); + test_ret += test_xmlSchemaValidateLengthFacetWhtsp(); + test_ret += test_xmlSchemaValidateListSimpleTypeFacet(); + test_ret += test_xmlSchemaValidatePredefinedType(); + test_ret += test_xmlSchemaValueAppend(); + test_ret += test_xmlSchemaValueGetAsBoolean(); + test_ret += test_xmlSchemaValueGetAsString(); + test_ret += test_xmlSchemaValueGetNext(); + test_ret += test_xmlSchemaWhiteSpaceReplace(); + + if (test_ret != 0) + printf("Module xmlschemastypes: %d errors\n", test_ret); + return(test_ret); +} + +static int +test_xmlCharStrdup(void) { + int test_ret = 0; + + int mem_base; + xmlChar * ret_val; + char * cur; /* the input char * */ + int n_cur; + + for (n_cur = 0;n_cur < gen_nb_const_char_ptr;n_cur++) { + mem_base = xmlMemBlocks(); + cur = gen_const_char_ptr(n_cur, 0); + + ret_val = xmlCharStrdup((const char *)cur); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_const_char_ptr(n_cur, (const char *)cur, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlCharStrdup", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_cur); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlCharStrndup(void) { + int test_ret = 0; + + int mem_base; + xmlChar * ret_val; + char * cur; /* the input char * */ + int n_cur; + int len; /* the len of @cur */ + int n_len; + + for (n_cur = 0;n_cur < gen_nb_const_char_ptr;n_cur++) { + for (n_len = 0;n_len < gen_nb_int;n_len++) { + mem_base = xmlMemBlocks(); + cur = gen_const_char_ptr(n_cur, 0); + len = gen_int(n_len, 1); + + ret_val = xmlCharStrndup((const char *)cur, len); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_const_char_ptr(n_cur, (const char *)cur, 0); + des_int(n_len, len, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlCharStrndup", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_cur); + printf(" %d", n_len); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlCheckUTF8(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + unsigned char * utf; /* Pointer to putative UTF-8 encoded string. */ + int n_utf; + + for (n_utf = 0;n_utf < gen_nb_const_unsigned_char_ptr;n_utf++) { + mem_base = xmlMemBlocks(); + utf = gen_const_unsigned_char_ptr(n_utf, 0); + + ret_val = xmlCheckUTF8((const unsigned char *)utf); + desret_int(ret_val); + call_tests++; + des_const_unsigned_char_ptr(n_utf, (const unsigned char *)utf, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlCheckUTF8", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_utf); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlGetUTF8Char(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + unsigned char * utf; /* a sequence of UTF-8 encoded bytes */ + int n_utf; + int * len; /* a pointer to the minimum number of bytes present in the sequence. This is used to assure the next character is completely contained within the sequence. */ + int n_len; + + for (n_utf = 0;n_utf < gen_nb_const_unsigned_char_ptr;n_utf++) { + for (n_len = 0;n_len < gen_nb_int_ptr;n_len++) { + mem_base = xmlMemBlocks(); + utf = gen_const_unsigned_char_ptr(n_utf, 0); + len = gen_int_ptr(n_len, 1); + + ret_val = xmlGetUTF8Char((const unsigned char *)utf, len); + desret_int(ret_val); + call_tests++; + des_const_unsigned_char_ptr(n_utf, (const unsigned char *)utf, 0); + des_int_ptr(n_len, len, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlGetUTF8Char", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_utf); + printf(" %d", n_len); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlStrEqual(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlChar * str1; /* the first xmlChar * */ + int n_str1; + xmlChar * str2; /* the second xmlChar * */ + int n_str2; + + for (n_str1 = 0;n_str1 < gen_nb_const_xmlChar_ptr;n_str1++) { + for (n_str2 = 0;n_str2 < gen_nb_const_xmlChar_ptr;n_str2++) { + mem_base = xmlMemBlocks(); + str1 = gen_const_xmlChar_ptr(n_str1, 0); + str2 = gen_const_xmlChar_ptr(n_str2, 1); + + ret_val = xmlStrEqual((const xmlChar *)str1, (const xmlChar *)str2); + desret_int(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_str1, (const xmlChar *)str1, 0); + des_const_xmlChar_ptr(n_str2, (const xmlChar *)str2, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlStrEqual", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_str1); + printf(" %d", n_str2); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlStrPrintf(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlStrQEqual(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlChar * pref; /* the prefix of the QName */ + int n_pref; + xmlChar * name; /* the localname of the QName */ + int n_name; + xmlChar * str; /* the second xmlChar * */ + int n_str; + + for (n_pref = 0;n_pref < gen_nb_const_xmlChar_ptr;n_pref++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_str = 0;n_str < gen_nb_const_xmlChar_ptr;n_str++) { + mem_base = xmlMemBlocks(); + pref = gen_const_xmlChar_ptr(n_pref, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + str = gen_const_xmlChar_ptr(n_str, 2); + + ret_val = xmlStrQEqual((const xmlChar *)pref, (const xmlChar *)name, (const xmlChar *)str); + desret_int(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_pref, (const xmlChar *)pref, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + des_const_xmlChar_ptr(n_str, (const xmlChar *)str, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlStrQEqual", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_pref); + printf(" %d", n_name); + printf(" %d", n_str); + printf("\n"); + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlStrVPrintf(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlStrcasecmp(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlChar * str1; /* the first xmlChar * */ + int n_str1; + xmlChar * str2; /* the second xmlChar * */ + int n_str2; + + for (n_str1 = 0;n_str1 < gen_nb_const_xmlChar_ptr;n_str1++) { + for (n_str2 = 0;n_str2 < gen_nb_const_xmlChar_ptr;n_str2++) { + mem_base = xmlMemBlocks(); + str1 = gen_const_xmlChar_ptr(n_str1, 0); + str2 = gen_const_xmlChar_ptr(n_str2, 1); + + ret_val = xmlStrcasecmp((const xmlChar *)str1, (const xmlChar *)str2); + desret_int(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_str1, (const xmlChar *)str1, 0); + des_const_xmlChar_ptr(n_str2, (const xmlChar *)str2, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlStrcasecmp", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_str1); + printf(" %d", n_str2); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlStrcasestr(void) { + int test_ret = 0; + + int mem_base; + const xmlChar * ret_val; + xmlChar * str; /* the xmlChar * array (haystack) */ + int n_str; + xmlChar * val; /* the xmlChar to search (needle) */ + int n_val; + + for (n_str = 0;n_str < gen_nb_const_xmlChar_ptr;n_str++) { + for (n_val = 0;n_val < gen_nb_const_xmlChar_ptr;n_val++) { + mem_base = xmlMemBlocks(); + str = gen_const_xmlChar_ptr(n_str, 0); + val = gen_const_xmlChar_ptr(n_val, 1); + + ret_val = xmlStrcasestr((const xmlChar *)str, (const xmlChar *)val); + desret_const_xmlChar_ptr(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_str, (const xmlChar *)str, 0); + des_const_xmlChar_ptr(n_val, (const xmlChar *)val, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlStrcasestr", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_str); + printf(" %d", n_val); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlStrchr(void) { + int test_ret = 0; + + int mem_base; + const xmlChar * ret_val; + xmlChar * str; /* the xmlChar * array */ + int n_str; + xmlChar val; /* the xmlChar to search */ + int n_val; + + for (n_str = 0;n_str < gen_nb_const_xmlChar_ptr;n_str++) { + for (n_val = 0;n_val < gen_nb_xmlChar;n_val++) { + mem_base = xmlMemBlocks(); + str = gen_const_xmlChar_ptr(n_str, 0); + val = gen_xmlChar(n_val, 1); + + ret_val = xmlStrchr((const xmlChar *)str, val); + desret_const_xmlChar_ptr(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_str, (const xmlChar *)str, 0); + des_xmlChar(n_val, val, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlStrchr", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_str); + printf(" %d", n_val); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlStrcmp(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlChar * str1; /* the first xmlChar * */ + int n_str1; + xmlChar * str2; /* the second xmlChar * */ + int n_str2; + + for (n_str1 = 0;n_str1 < gen_nb_const_xmlChar_ptr;n_str1++) { + for (n_str2 = 0;n_str2 < gen_nb_const_xmlChar_ptr;n_str2++) { + mem_base = xmlMemBlocks(); + str1 = gen_const_xmlChar_ptr(n_str1, 0); + str2 = gen_const_xmlChar_ptr(n_str2, 1); + + ret_val = xmlStrcmp((const xmlChar *)str1, (const xmlChar *)str2); + desret_int(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_str1, (const xmlChar *)str1, 0); + des_const_xmlChar_ptr(n_str2, (const xmlChar *)str2, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlStrcmp", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_str1); + printf(" %d", n_str2); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlStrdup(void) { + int test_ret = 0; + + int mem_base; + xmlChar * ret_val; + xmlChar * cur; /* the input xmlChar * */ + int n_cur; + + for (n_cur = 0;n_cur < gen_nb_const_xmlChar_ptr;n_cur++) { + mem_base = xmlMemBlocks(); + cur = gen_const_xmlChar_ptr(n_cur, 0); + + ret_val = xmlStrdup((const xmlChar *)cur); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_cur, (const xmlChar *)cur, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlStrdup", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_cur); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlStrlen(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlChar * str; /* the xmlChar * array */ + int n_str; + + for (n_str = 0;n_str < gen_nb_const_xmlChar_ptr;n_str++) { + mem_base = xmlMemBlocks(); + str = gen_const_xmlChar_ptr(n_str, 0); + + ret_val = xmlStrlen((const xmlChar *)str); + desret_int(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_str, (const xmlChar *)str, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlStrlen", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_str); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlStrncasecmp(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlChar * str1; /* the first xmlChar * */ + int n_str1; + xmlChar * str2; /* the second xmlChar * */ + int n_str2; + int len; /* the max comparison length */ + int n_len; + + for (n_str1 = 0;n_str1 < gen_nb_const_xmlChar_ptr;n_str1++) { + for (n_str2 = 0;n_str2 < gen_nb_const_xmlChar_ptr;n_str2++) { + for (n_len = 0;n_len < gen_nb_int;n_len++) { + mem_base = xmlMemBlocks(); + str1 = gen_const_xmlChar_ptr(n_str1, 0); + str2 = gen_const_xmlChar_ptr(n_str2, 1); + len = gen_int(n_len, 2); + + ret_val = xmlStrncasecmp((const xmlChar *)str1, (const xmlChar *)str2, len); + desret_int(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_str1, (const xmlChar *)str1, 0); + des_const_xmlChar_ptr(n_str2, (const xmlChar *)str2, 1); + des_int(n_len, len, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlStrncasecmp", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_str1); + printf(" %d", n_str2); + printf(" %d", n_len); + printf("\n"); + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlStrncatNew(void) { + int test_ret = 0; + + int mem_base; + xmlChar * ret_val; + xmlChar * str1; /* first xmlChar string */ + int n_str1; + xmlChar * str2; /* second xmlChar string */ + int n_str2; + int len; /* the len of @str2 or < 0 */ + int n_len; + + for (n_str1 = 0;n_str1 < gen_nb_const_xmlChar_ptr;n_str1++) { + for (n_str2 = 0;n_str2 < gen_nb_const_xmlChar_ptr;n_str2++) { + for (n_len = 0;n_len < gen_nb_int;n_len++) { + mem_base = xmlMemBlocks(); + str1 = gen_const_xmlChar_ptr(n_str1, 0); + str2 = gen_const_xmlChar_ptr(n_str2, 1); + len = gen_int(n_len, 2); + + ret_val = xmlStrncatNew((const xmlChar *)str1, (const xmlChar *)str2, len); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_str1, (const xmlChar *)str1, 0); + des_const_xmlChar_ptr(n_str2, (const xmlChar *)str2, 1); + des_int(n_len, len, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlStrncatNew", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_str1); + printf(" %d", n_str2); + printf(" %d", n_len); + printf("\n"); + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlStrncmp(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlChar * str1; /* the first xmlChar * */ + int n_str1; + xmlChar * str2; /* the second xmlChar * */ + int n_str2; + int len; /* the max comparison length */ + int n_len; + + for (n_str1 = 0;n_str1 < gen_nb_const_xmlChar_ptr;n_str1++) { + for (n_str2 = 0;n_str2 < gen_nb_const_xmlChar_ptr;n_str2++) { + for (n_len = 0;n_len < gen_nb_int;n_len++) { + mem_base = xmlMemBlocks(); + str1 = gen_const_xmlChar_ptr(n_str1, 0); + str2 = gen_const_xmlChar_ptr(n_str2, 1); + len = gen_int(n_len, 2); + + ret_val = xmlStrncmp((const xmlChar *)str1, (const xmlChar *)str2, len); + desret_int(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_str1, (const xmlChar *)str1, 0); + des_const_xmlChar_ptr(n_str2, (const xmlChar *)str2, 1); + des_int(n_len, len, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlStrncmp", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_str1); + printf(" %d", n_str2); + printf(" %d", n_len); + printf("\n"); + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlStrndup(void) { + int test_ret = 0; + + int mem_base; + xmlChar * ret_val; + xmlChar * cur; /* the input xmlChar * */ + int n_cur; + int len; /* the len of @cur */ + int n_len; + + for (n_cur = 0;n_cur < gen_nb_const_xmlChar_ptr;n_cur++) { + for (n_len = 0;n_len < gen_nb_int;n_len++) { + mem_base = xmlMemBlocks(); + cur = gen_const_xmlChar_ptr(n_cur, 0); + len = gen_int(n_len, 1); + + ret_val = xmlStrndup((const xmlChar *)cur, len); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_cur, (const xmlChar *)cur, 0); + des_int(n_len, len, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlStrndup", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_cur); + printf(" %d", n_len); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlStrstr(void) { + int test_ret = 0; + + int mem_base; + const xmlChar * ret_val; + xmlChar * str; /* the xmlChar * array (haystack) */ + int n_str; + xmlChar * val; /* the xmlChar to search (needle) */ + int n_val; + + for (n_str = 0;n_str < gen_nb_const_xmlChar_ptr;n_str++) { + for (n_val = 0;n_val < gen_nb_const_xmlChar_ptr;n_val++) { + mem_base = xmlMemBlocks(); + str = gen_const_xmlChar_ptr(n_str, 0); + val = gen_const_xmlChar_ptr(n_val, 1); + + ret_val = xmlStrstr((const xmlChar *)str, (const xmlChar *)val); + desret_const_xmlChar_ptr(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_str, (const xmlChar *)str, 0); + des_const_xmlChar_ptr(n_val, (const xmlChar *)val, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlStrstr", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_str); + printf(" %d", n_val); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlStrsub(void) { + int test_ret = 0; + + int mem_base; + xmlChar * ret_val; + xmlChar * str; /* the xmlChar * array (haystack) */ + int n_str; + int start; /* the index of the first char (zero based) */ + int n_start; + int len; /* the length of the substring */ + int n_len; + + for (n_str = 0;n_str < gen_nb_const_xmlChar_ptr;n_str++) { + for (n_start = 0;n_start < gen_nb_int;n_start++) { + for (n_len = 0;n_len < gen_nb_int;n_len++) { + mem_base = xmlMemBlocks(); + str = gen_const_xmlChar_ptr(n_str, 0); + start = gen_int(n_start, 1); + len = gen_int(n_len, 2); + + ret_val = xmlStrsub((const xmlChar *)str, start, len); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_str, (const xmlChar *)str, 0); + des_int(n_start, start, 1); + des_int(n_len, len, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlStrsub", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_str); + printf(" %d", n_start); + printf(" %d", n_len); + printf("\n"); + } + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlUTF8Charcmp(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlChar * utf1; /* pointer to first UTF8 char */ + int n_utf1; + xmlChar * utf2; /* pointer to second UTF8 char */ + int n_utf2; + + for (n_utf1 = 0;n_utf1 < gen_nb_const_xmlChar_ptr;n_utf1++) { + for (n_utf2 = 0;n_utf2 < gen_nb_const_xmlChar_ptr;n_utf2++) { + mem_base = xmlMemBlocks(); + utf1 = gen_const_xmlChar_ptr(n_utf1, 0); + utf2 = gen_const_xmlChar_ptr(n_utf2, 1); + + ret_val = xmlUTF8Charcmp((const xmlChar *)utf1, (const xmlChar *)utf2); + desret_int(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_utf1, (const xmlChar *)utf1, 0); + des_const_xmlChar_ptr(n_utf2, (const xmlChar *)utf2, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUTF8Charcmp", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_utf1); + printf(" %d", n_utf2); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlUTF8Size(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlChar * utf; /* pointer to the UTF8 character */ + int n_utf; + + for (n_utf = 0;n_utf < gen_nb_const_xmlChar_ptr;n_utf++) { + mem_base = xmlMemBlocks(); + utf = gen_const_xmlChar_ptr(n_utf, 0); + + ret_val = xmlUTF8Size((const xmlChar *)utf); + desret_int(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_utf, (const xmlChar *)utf, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUTF8Size", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_utf); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlUTF8Strlen(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlChar * utf; /* a sequence of UTF-8 encoded bytes */ + int n_utf; + + for (n_utf = 0;n_utf < gen_nb_const_xmlChar_ptr;n_utf++) { + mem_base = xmlMemBlocks(); + utf = gen_const_xmlChar_ptr(n_utf, 0); + + ret_val = xmlUTF8Strlen((const xmlChar *)utf); + desret_int(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_utf, (const xmlChar *)utf, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUTF8Strlen", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_utf); + printf("\n"); + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlUTF8Strloc(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlChar * utf; /* the input UTF8 * */ + int n_utf; + xmlChar * utfchar; /* the UTF8 character to be found */ + int n_utfchar; + + for (n_utf = 0;n_utf < gen_nb_const_xmlChar_ptr;n_utf++) { + for (n_utfchar = 0;n_utfchar < gen_nb_const_xmlChar_ptr;n_utfchar++) { + mem_base = xmlMemBlocks(); + utf = gen_const_xmlChar_ptr(n_utf, 0); + utfchar = gen_const_xmlChar_ptr(n_utfchar, 1); + + ret_val = xmlUTF8Strloc((const xmlChar *)utf, (const xmlChar *)utfchar); + desret_int(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_utf, (const xmlChar *)utf, 0); + des_const_xmlChar_ptr(n_utfchar, (const xmlChar *)utfchar, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUTF8Strloc", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_utf); + printf(" %d", n_utfchar); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlUTF8Strndup(void) { + int test_ret = 0; + + int mem_base; + xmlChar * ret_val; + xmlChar * utf; /* the input UTF8 * */ + int n_utf; + int len; /* the len of @utf (in chars) */ + int n_len; + + for (n_utf = 0;n_utf < gen_nb_const_xmlChar_ptr;n_utf++) { + for (n_len = 0;n_len < gen_nb_int;n_len++) { + mem_base = xmlMemBlocks(); + utf = gen_const_xmlChar_ptr(n_utf, 0); + len = gen_int(n_len, 1); + + ret_val = xmlUTF8Strndup((const xmlChar *)utf, len); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_utf, (const xmlChar *)utf, 0); + des_int(n_len, len, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUTF8Strndup", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_utf); + printf(" %d", n_len); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlUTF8Strpos(void) { + int test_ret = 0; + + int mem_base; + const xmlChar * ret_val; + xmlChar * utf; /* the input UTF8 * */ + int n_utf; + int pos; /* the position of the desired UTF8 char (in chars) */ + int n_pos; + + for (n_utf = 0;n_utf < gen_nb_const_xmlChar_ptr;n_utf++) { + for (n_pos = 0;n_pos < gen_nb_int;n_pos++) { + mem_base = xmlMemBlocks(); + utf = gen_const_xmlChar_ptr(n_utf, 0); + pos = gen_int(n_pos, 1); + + ret_val = xmlUTF8Strpos((const xmlChar *)utf, pos); + desret_const_xmlChar_ptr(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_utf, (const xmlChar *)utf, 0); + des_int(n_pos, pos, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUTF8Strpos", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_utf); + printf(" %d", n_pos); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlUTF8Strsize(void) { + int test_ret = 0; + + int mem_base; + int ret_val; + xmlChar * utf; /* a sequence of UTF-8 encoded bytes */ + int n_utf; + int len; /* the number of characters in the array */ + int n_len; + + for (n_utf = 0;n_utf < gen_nb_const_xmlChar_ptr;n_utf++) { + for (n_len = 0;n_len < gen_nb_int;n_len++) { + mem_base = xmlMemBlocks(); + utf = gen_const_xmlChar_ptr(n_utf, 0); + len = gen_int(n_len, 1); + + ret_val = xmlUTF8Strsize((const xmlChar *)utf, len); + desret_int(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_utf, (const xmlChar *)utf, 0); + des_int(n_len, len, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUTF8Strsize", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_utf); + printf(" %d", n_len); + printf("\n"); + } + } + } + function_tests++; + + return(test_ret); +} + + +static int +test_xmlUTF8Strsub(void) { + int test_ret = 0; + + int mem_base; + xmlChar * ret_val; + xmlChar * utf; /* a sequence of UTF-8 encoded bytes */ + int n_utf; + int start; /* relative pos of first char */ + int n_start; + int len; /* total number to copy */ + int n_len; + + for (n_utf = 0;n_utf < gen_nb_const_xmlChar_ptr;n_utf++) { + for (n_start = 0;n_start < gen_nb_int;n_start++) { + for (n_len = 0;n_len < gen_nb_int;n_len++) { + mem_base = xmlMemBlocks(); + utf = gen_const_xmlChar_ptr(n_utf, 0); + start = gen_int(n_start, 1); + len = gen_int(n_len, 2); + + ret_val = xmlUTF8Strsub((const xmlChar *)utf, start, len); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_utf, (const xmlChar *)utf, 0); + des_int(n_start, start, 1); + des_int(n_len, len, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUTF8Strsub", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_utf); + printf(" %d", n_start); + printf(" %d", n_len); + printf("\n"); + } + } + } + } + function_tests++; + + return(test_ret); +} + +static int +test_xmlstring(void) { + int test_ret = 0; + + if (quiet == 0) printf("Testing xmlstring : 26 of 30 functions ...\n"); + test_ret += test_xmlCharStrdup(); + test_ret += test_xmlCharStrndup(); + test_ret += test_xmlCheckUTF8(); + test_ret += test_xmlGetUTF8Char(); + test_ret += test_xmlStrEqual(); + test_ret += test_xmlStrPrintf(); + test_ret += test_xmlStrQEqual(); + test_ret += test_xmlStrVPrintf(); + test_ret += test_xmlStrcasecmp(); + test_ret += test_xmlStrcasestr(); + test_ret += test_xmlStrchr(); + test_ret += test_xmlStrcmp(); + test_ret += test_xmlStrdup(); + test_ret += test_xmlStrlen(); + test_ret += test_xmlStrncasecmp(); + test_ret += test_xmlStrncatNew(); + test_ret += test_xmlStrncmp(); + test_ret += test_xmlStrndup(); + test_ret += test_xmlStrstr(); + test_ret += test_xmlStrsub(); + test_ret += test_xmlUTF8Charcmp(); + test_ret += test_xmlUTF8Size(); + test_ret += test_xmlUTF8Strlen(); + test_ret += test_xmlUTF8Strloc(); + test_ret += test_xmlUTF8Strndup(); + test_ret += test_xmlUTF8Strpos(); + test_ret += test_xmlUTF8Strsize(); + test_ret += test_xmlUTF8Strsub(); + + if (test_ret != 0) + printf("Module xmlstring: %d errors\n", test_ret); + return(test_ret); +} + +static int +test_xmlUCSIsAegeanNumbers(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsAegeanNumbers(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsAegeanNumbers", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsAlphabeticPresentationForms(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsAlphabeticPresentationForms(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsAlphabeticPresentationForms", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsArabic(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsArabic(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsArabic", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsArabicPresentationFormsA(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsArabicPresentationFormsA(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsArabicPresentationFormsA", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsArabicPresentationFormsB(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsArabicPresentationFormsB(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsArabicPresentationFormsB", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsArmenian(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsArmenian(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsArmenian", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsArrows(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsArrows(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsArrows", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsBasicLatin(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsBasicLatin(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsBasicLatin", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsBengali(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsBengali(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsBengali", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsBlock(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + char * block; /* UCS block name */ + int n_block; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + for (n_block = 0;n_block < gen_nb_const_char_ptr;n_block++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + block = gen_const_char_ptr(n_block, 1); + + ret_val = xmlUCSIsBlock(code, (const char *)block); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + des_const_char_ptr(n_block, (const char *)block, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsBlock", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf(" %d", n_block); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsBlockElements(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsBlockElements(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsBlockElements", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsBopomofo(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsBopomofo(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsBopomofo", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsBopomofoExtended(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsBopomofoExtended(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsBopomofoExtended", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsBoxDrawing(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsBoxDrawing(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsBoxDrawing", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsBraillePatterns(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsBraillePatterns(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsBraillePatterns", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsBuhid(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsBuhid(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsBuhid", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsByzantineMusicalSymbols(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsByzantineMusicalSymbols(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsByzantineMusicalSymbols", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsCJKCompatibility(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsCJKCompatibility(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsCJKCompatibility", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsCJKCompatibilityForms(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsCJKCompatibilityForms(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsCJKCompatibilityForms", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsCJKCompatibilityIdeographs(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsCJKCompatibilityIdeographs(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsCJKCompatibilityIdeographs", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsCJKCompatibilityIdeographsSupplement(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsCJKCompatibilityIdeographsSupplement(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsCJKCompatibilityIdeographsSupplement", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsCJKRadicalsSupplement(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsCJKRadicalsSupplement(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsCJKRadicalsSupplement", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsCJKSymbolsandPunctuation(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsCJKSymbolsandPunctuation(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsCJKSymbolsandPunctuation", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsCJKUnifiedIdeographs(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsCJKUnifiedIdeographs(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsCJKUnifiedIdeographs", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsCJKUnifiedIdeographsExtensionA(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsCJKUnifiedIdeographsExtensionA(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsCJKUnifiedIdeographsExtensionA", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsCJKUnifiedIdeographsExtensionB(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsCJKUnifiedIdeographsExtensionB(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsCJKUnifiedIdeographsExtensionB", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsCat(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + char * cat; /* UCS Category name */ + int n_cat; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + for (n_cat = 0;n_cat < gen_nb_const_char_ptr;n_cat++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + cat = gen_const_char_ptr(n_cat, 1); + + ret_val = xmlUCSIsCat(code, (const char *)cat); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + des_const_char_ptr(n_cat, (const char *)cat, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsCat", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf(" %d", n_cat); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsCatC(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsCatC(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsCatC", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsCatCc(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsCatCc(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsCatCc", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsCatCf(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsCatCf(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsCatCf", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsCatCo(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsCatCo(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsCatCo", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsCatCs(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsCatCs(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsCatCs", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsCatL(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsCatL(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsCatL", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsCatLl(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsCatLl(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsCatLl", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsCatLm(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsCatLm(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsCatLm", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsCatLo(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsCatLo(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsCatLo", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsCatLt(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsCatLt(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsCatLt", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsCatLu(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsCatLu(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsCatLu", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsCatM(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsCatM(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsCatM", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsCatMc(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsCatMc(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsCatMc", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsCatMe(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsCatMe(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsCatMe", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsCatMn(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsCatMn(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsCatMn", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsCatN(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsCatN(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsCatN", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsCatNd(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsCatNd(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsCatNd", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsCatNl(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsCatNl(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsCatNl", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsCatNo(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsCatNo(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsCatNo", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsCatP(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsCatP(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsCatP", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsCatPc(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsCatPc(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsCatPc", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsCatPd(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsCatPd(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsCatPd", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsCatPe(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsCatPe(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsCatPe", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsCatPf(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsCatPf(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsCatPf", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsCatPi(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsCatPi(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsCatPi", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsCatPo(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsCatPo(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsCatPo", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsCatPs(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsCatPs(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsCatPs", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsCatS(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsCatS(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsCatS", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsCatSc(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsCatSc(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsCatSc", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsCatSk(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsCatSk(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsCatSk", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsCatSm(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsCatSm(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsCatSm", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsCatSo(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsCatSo(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsCatSo", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsCatZ(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsCatZ(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsCatZ", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsCatZl(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsCatZl(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsCatZl", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsCatZp(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsCatZp(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsCatZp", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsCatZs(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsCatZs(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsCatZs", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsCherokee(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsCherokee(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsCherokee", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsCombiningDiacriticalMarks(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsCombiningDiacriticalMarks(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsCombiningDiacriticalMarks", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsCombiningDiacriticalMarksforSymbols(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsCombiningDiacriticalMarksforSymbols(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsCombiningDiacriticalMarksforSymbols", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsCombiningHalfMarks(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsCombiningHalfMarks(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsCombiningHalfMarks", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsCombiningMarksforSymbols(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsCombiningMarksforSymbols(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsCombiningMarksforSymbols", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsControlPictures(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsControlPictures(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsControlPictures", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsCurrencySymbols(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsCurrencySymbols(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsCurrencySymbols", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsCypriotSyllabary(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsCypriotSyllabary(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsCypriotSyllabary", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsCyrillic(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsCyrillic(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsCyrillic", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsCyrillicSupplement(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsCyrillicSupplement(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsCyrillicSupplement", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsDeseret(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsDeseret(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsDeseret", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsDevanagari(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsDevanagari(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsDevanagari", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsDingbats(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsDingbats(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsDingbats", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsEnclosedAlphanumerics(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsEnclosedAlphanumerics(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsEnclosedAlphanumerics", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsEnclosedCJKLettersandMonths(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsEnclosedCJKLettersandMonths(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsEnclosedCJKLettersandMonths", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsEthiopic(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsEthiopic(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsEthiopic", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsGeneralPunctuation(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsGeneralPunctuation(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsGeneralPunctuation", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsGeometricShapes(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsGeometricShapes(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsGeometricShapes", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsGeorgian(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsGeorgian(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsGeorgian", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsGothic(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsGothic(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsGothic", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsGreek(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsGreek(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsGreek", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsGreekExtended(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsGreekExtended(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsGreekExtended", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsGreekandCoptic(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsGreekandCoptic(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsGreekandCoptic", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsGujarati(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsGujarati(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsGujarati", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsGurmukhi(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsGurmukhi(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsGurmukhi", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsHalfwidthandFullwidthForms(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsHalfwidthandFullwidthForms(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsHalfwidthandFullwidthForms", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsHangulCompatibilityJamo(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsHangulCompatibilityJamo(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsHangulCompatibilityJamo", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsHangulJamo(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsHangulJamo(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsHangulJamo", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsHangulSyllables(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsHangulSyllables(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsHangulSyllables", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsHanunoo(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsHanunoo(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsHanunoo", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsHebrew(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsHebrew(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsHebrew", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsHighPrivateUseSurrogates(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsHighPrivateUseSurrogates(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsHighPrivateUseSurrogates", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsHighSurrogates(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsHighSurrogates(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsHighSurrogates", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsHiragana(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsHiragana(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsHiragana", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsIPAExtensions(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsIPAExtensions(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsIPAExtensions", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsIdeographicDescriptionCharacters(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsIdeographicDescriptionCharacters(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsIdeographicDescriptionCharacters", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsKanbun(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsKanbun(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsKanbun", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsKangxiRadicals(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsKangxiRadicals(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsKangxiRadicals", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsKannada(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsKannada(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsKannada", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsKatakana(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsKatakana(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsKatakana", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsKatakanaPhoneticExtensions(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsKatakanaPhoneticExtensions(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsKatakanaPhoneticExtensions", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsKhmer(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsKhmer(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsKhmer", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsKhmerSymbols(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsKhmerSymbols(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsKhmerSymbols", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsLao(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsLao(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsLao", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsLatin1Supplement(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsLatin1Supplement(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsLatin1Supplement", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsLatinExtendedA(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsLatinExtendedA(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsLatinExtendedA", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsLatinExtendedAdditional(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsLatinExtendedAdditional(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsLatinExtendedAdditional", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsLatinExtendedB(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsLatinExtendedB(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsLatinExtendedB", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsLetterlikeSymbols(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsLetterlikeSymbols(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsLetterlikeSymbols", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsLimbu(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsLimbu(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsLimbu", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsLinearBIdeograms(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsLinearBIdeograms(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsLinearBIdeograms", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsLinearBSyllabary(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsLinearBSyllabary(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsLinearBSyllabary", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsLowSurrogates(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsLowSurrogates(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsLowSurrogates", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsMalayalam(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsMalayalam(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsMalayalam", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsMathematicalAlphanumericSymbols(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsMathematicalAlphanumericSymbols(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsMathematicalAlphanumericSymbols", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsMathematicalOperators(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsMathematicalOperators(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsMathematicalOperators", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsMiscellaneousMathematicalSymbolsA(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsMiscellaneousMathematicalSymbolsA(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsMiscellaneousMathematicalSymbolsA", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsMiscellaneousMathematicalSymbolsB(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsMiscellaneousMathematicalSymbolsB(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsMiscellaneousMathematicalSymbolsB", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsMiscellaneousSymbols(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsMiscellaneousSymbols(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsMiscellaneousSymbols", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsMiscellaneousSymbolsandArrows(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsMiscellaneousSymbolsandArrows(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsMiscellaneousSymbolsandArrows", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsMiscellaneousTechnical(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsMiscellaneousTechnical(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsMiscellaneousTechnical", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsMongolian(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsMongolian(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsMongolian", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsMusicalSymbols(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsMusicalSymbols(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsMusicalSymbols", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsMyanmar(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsMyanmar(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsMyanmar", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsNumberForms(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsNumberForms(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsNumberForms", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsOgham(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsOgham(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsOgham", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsOldItalic(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsOldItalic(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsOldItalic", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsOpticalCharacterRecognition(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsOpticalCharacterRecognition(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsOpticalCharacterRecognition", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsOriya(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsOriya(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsOriya", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsOsmanya(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsOsmanya(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsOsmanya", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsPhoneticExtensions(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsPhoneticExtensions(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsPhoneticExtensions", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsPrivateUse(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsPrivateUse(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsPrivateUse", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsPrivateUseArea(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsPrivateUseArea(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsPrivateUseArea", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsRunic(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsRunic(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsRunic", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsShavian(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsShavian(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsShavian", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsSinhala(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsSinhala(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsSinhala", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsSmallFormVariants(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsSmallFormVariants(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsSmallFormVariants", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsSpacingModifierLetters(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsSpacingModifierLetters(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsSpacingModifierLetters", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsSpecials(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsSpecials(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsSpecials", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsSuperscriptsandSubscripts(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsSuperscriptsandSubscripts(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsSuperscriptsandSubscripts", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsSupplementalArrowsA(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsSupplementalArrowsA(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsSupplementalArrowsA", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsSupplementalArrowsB(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsSupplementalArrowsB(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsSupplementalArrowsB", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsSupplementalMathematicalOperators(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsSupplementalMathematicalOperators(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsSupplementalMathematicalOperators", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsSupplementaryPrivateUseAreaA(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsSupplementaryPrivateUseAreaA(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsSupplementaryPrivateUseAreaA", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsSupplementaryPrivateUseAreaB(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsSupplementaryPrivateUseAreaB(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsSupplementaryPrivateUseAreaB", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsSyriac(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsSyriac(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsSyriac", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsTagalog(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsTagalog(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsTagalog", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsTagbanwa(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsTagbanwa(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsTagbanwa", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsTags(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsTags(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsTags", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsTaiLe(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsTaiLe(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsTaiLe", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsTaiXuanJingSymbols(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsTaiXuanJingSymbols(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsTaiXuanJingSymbols", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsTamil(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsTamil(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsTamil", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsTelugu(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsTelugu(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsTelugu", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsThaana(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsThaana(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsThaana", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsThai(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsThai(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsThai", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsTibetan(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsTibetan(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsTibetan", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsUgaritic(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsUgaritic(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsUgaritic", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsUnifiedCanadianAboriginalSyllabics(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsUnifiedCanadianAboriginalSyllabics(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsUnifiedCanadianAboriginalSyllabics", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsVariationSelectors(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsVariationSelectors(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsVariationSelectors", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsVariationSelectorsSupplement(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsVariationSelectorsSupplement(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsVariationSelectorsSupplement", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsYiRadicals(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsYiRadicals(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsYiRadicals", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsYiSyllables(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsYiSyllables(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsYiSyllables", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlUCSIsYijingHexagramSymbols(void) { + int test_ret = 0; + +#if defined(LIBXML_UNICODE_ENABLED) + int mem_base; + int ret_val; + int code; /* UCS code point */ + int n_code; + + for (n_code = 0;n_code < gen_nb_int;n_code++) { + mem_base = xmlMemBlocks(); + code = gen_int(n_code, 0); + + ret_val = xmlUCSIsYijingHexagramSymbols(code); + desret_int(ret_val); + call_tests++; + des_int(n_code, code, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlUCSIsYijingHexagramSymbols", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_code); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + +static int +test_xmlunicode(void) { + int test_ret = 0; + + if (quiet == 0) printf("Testing xmlunicode : 166 of 166 functions ...\n"); + test_ret += test_xmlUCSIsAegeanNumbers(); + test_ret += test_xmlUCSIsAlphabeticPresentationForms(); + test_ret += test_xmlUCSIsArabic(); + test_ret += test_xmlUCSIsArabicPresentationFormsA(); + test_ret += test_xmlUCSIsArabicPresentationFormsB(); + test_ret += test_xmlUCSIsArmenian(); + test_ret += test_xmlUCSIsArrows(); + test_ret += test_xmlUCSIsBasicLatin(); + test_ret += test_xmlUCSIsBengali(); + test_ret += test_xmlUCSIsBlock(); + test_ret += test_xmlUCSIsBlockElements(); + test_ret += test_xmlUCSIsBopomofo(); + test_ret += test_xmlUCSIsBopomofoExtended(); + test_ret += test_xmlUCSIsBoxDrawing(); + test_ret += test_xmlUCSIsBraillePatterns(); + test_ret += test_xmlUCSIsBuhid(); + test_ret += test_xmlUCSIsByzantineMusicalSymbols(); + test_ret += test_xmlUCSIsCJKCompatibility(); + test_ret += test_xmlUCSIsCJKCompatibilityForms(); + test_ret += test_xmlUCSIsCJKCompatibilityIdeographs(); + test_ret += test_xmlUCSIsCJKCompatibilityIdeographsSupplement(); + test_ret += test_xmlUCSIsCJKRadicalsSupplement(); + test_ret += test_xmlUCSIsCJKSymbolsandPunctuation(); + test_ret += test_xmlUCSIsCJKUnifiedIdeographs(); + test_ret += test_xmlUCSIsCJKUnifiedIdeographsExtensionA(); + test_ret += test_xmlUCSIsCJKUnifiedIdeographsExtensionB(); + test_ret += test_xmlUCSIsCat(); + test_ret += test_xmlUCSIsCatC(); + test_ret += test_xmlUCSIsCatCc(); + test_ret += test_xmlUCSIsCatCf(); + test_ret += test_xmlUCSIsCatCo(); + test_ret += test_xmlUCSIsCatCs(); + test_ret += test_xmlUCSIsCatL(); + test_ret += test_xmlUCSIsCatLl(); + test_ret += test_xmlUCSIsCatLm(); + test_ret += test_xmlUCSIsCatLo(); + test_ret += test_xmlUCSIsCatLt(); + test_ret += test_xmlUCSIsCatLu(); + test_ret += test_xmlUCSIsCatM(); + test_ret += test_xmlUCSIsCatMc(); + test_ret += test_xmlUCSIsCatMe(); + test_ret += test_xmlUCSIsCatMn(); + test_ret += test_xmlUCSIsCatN(); + test_ret += test_xmlUCSIsCatNd(); + test_ret += test_xmlUCSIsCatNl(); + test_ret += test_xmlUCSIsCatNo(); + test_ret += test_xmlUCSIsCatP(); + test_ret += test_xmlUCSIsCatPc(); + test_ret += test_xmlUCSIsCatPd(); + test_ret += test_xmlUCSIsCatPe(); + test_ret += test_xmlUCSIsCatPf(); + test_ret += test_xmlUCSIsCatPi(); + test_ret += test_xmlUCSIsCatPo(); + test_ret += test_xmlUCSIsCatPs(); + test_ret += test_xmlUCSIsCatS(); + test_ret += test_xmlUCSIsCatSc(); + test_ret += test_xmlUCSIsCatSk(); + test_ret += test_xmlUCSIsCatSm(); + test_ret += test_xmlUCSIsCatSo(); + test_ret += test_xmlUCSIsCatZ(); + test_ret += test_xmlUCSIsCatZl(); + test_ret += test_xmlUCSIsCatZp(); + test_ret += test_xmlUCSIsCatZs(); + test_ret += test_xmlUCSIsCherokee(); + test_ret += test_xmlUCSIsCombiningDiacriticalMarks(); + test_ret += test_xmlUCSIsCombiningDiacriticalMarksforSymbols(); + test_ret += test_xmlUCSIsCombiningHalfMarks(); + test_ret += test_xmlUCSIsCombiningMarksforSymbols(); + test_ret += test_xmlUCSIsControlPictures(); + test_ret += test_xmlUCSIsCurrencySymbols(); + test_ret += test_xmlUCSIsCypriotSyllabary(); + test_ret += test_xmlUCSIsCyrillic(); + test_ret += test_xmlUCSIsCyrillicSupplement(); + test_ret += test_xmlUCSIsDeseret(); + test_ret += test_xmlUCSIsDevanagari(); + test_ret += test_xmlUCSIsDingbats(); + test_ret += test_xmlUCSIsEnclosedAlphanumerics(); + test_ret += test_xmlUCSIsEnclosedCJKLettersandMonths(); + test_ret += test_xmlUCSIsEthiopic(); + test_ret += test_xmlUCSIsGeneralPunctuation(); + test_ret += test_xmlUCSIsGeometricShapes(); + test_ret += test_xmlUCSIsGeorgian(); + test_ret += test_xmlUCSIsGothic(); + test_ret += test_xmlUCSIsGreek(); + test_ret += test_xmlUCSIsGreekExtended(); + test_ret += test_xmlUCSIsGreekandCoptic(); + test_ret += test_xmlUCSIsGujarati(); + test_ret += test_xmlUCSIsGurmukhi(); + test_ret += test_xmlUCSIsHalfwidthandFullwidthForms(); + test_ret += test_xmlUCSIsHangulCompatibilityJamo(); + test_ret += test_xmlUCSIsHangulJamo(); + test_ret += test_xmlUCSIsHangulSyllables(); + test_ret += test_xmlUCSIsHanunoo(); + test_ret += test_xmlUCSIsHebrew(); + test_ret += test_xmlUCSIsHighPrivateUseSurrogates(); + test_ret += test_xmlUCSIsHighSurrogates(); + test_ret += test_xmlUCSIsHiragana(); + test_ret += test_xmlUCSIsIPAExtensions(); + test_ret += test_xmlUCSIsIdeographicDescriptionCharacters(); + test_ret += test_xmlUCSIsKanbun(); + test_ret += test_xmlUCSIsKangxiRadicals(); + test_ret += test_xmlUCSIsKannada(); + test_ret += test_xmlUCSIsKatakana(); + test_ret += test_xmlUCSIsKatakanaPhoneticExtensions(); + test_ret += test_xmlUCSIsKhmer(); + test_ret += test_xmlUCSIsKhmerSymbols(); + test_ret += test_xmlUCSIsLao(); + test_ret += test_xmlUCSIsLatin1Supplement(); + test_ret += test_xmlUCSIsLatinExtendedA(); + test_ret += test_xmlUCSIsLatinExtendedAdditional(); + test_ret += test_xmlUCSIsLatinExtendedB(); + test_ret += test_xmlUCSIsLetterlikeSymbols(); + test_ret += test_xmlUCSIsLimbu(); + test_ret += test_xmlUCSIsLinearBIdeograms(); + test_ret += test_xmlUCSIsLinearBSyllabary(); + test_ret += test_xmlUCSIsLowSurrogates(); + test_ret += test_xmlUCSIsMalayalam(); + test_ret += test_xmlUCSIsMathematicalAlphanumericSymbols(); + test_ret += test_xmlUCSIsMathematicalOperators(); + test_ret += test_xmlUCSIsMiscellaneousMathematicalSymbolsA(); + test_ret += test_xmlUCSIsMiscellaneousMathematicalSymbolsB(); + test_ret += test_xmlUCSIsMiscellaneousSymbols(); + test_ret += test_xmlUCSIsMiscellaneousSymbolsandArrows(); + test_ret += test_xmlUCSIsMiscellaneousTechnical(); + test_ret += test_xmlUCSIsMongolian(); + test_ret += test_xmlUCSIsMusicalSymbols(); + test_ret += test_xmlUCSIsMyanmar(); + test_ret += test_xmlUCSIsNumberForms(); + test_ret += test_xmlUCSIsOgham(); + test_ret += test_xmlUCSIsOldItalic(); + test_ret += test_xmlUCSIsOpticalCharacterRecognition(); + test_ret += test_xmlUCSIsOriya(); + test_ret += test_xmlUCSIsOsmanya(); + test_ret += test_xmlUCSIsPhoneticExtensions(); + test_ret += test_xmlUCSIsPrivateUse(); + test_ret += test_xmlUCSIsPrivateUseArea(); + test_ret += test_xmlUCSIsRunic(); + test_ret += test_xmlUCSIsShavian(); + test_ret += test_xmlUCSIsSinhala(); + test_ret += test_xmlUCSIsSmallFormVariants(); + test_ret += test_xmlUCSIsSpacingModifierLetters(); + test_ret += test_xmlUCSIsSpecials(); + test_ret += test_xmlUCSIsSuperscriptsandSubscripts(); + test_ret += test_xmlUCSIsSupplementalArrowsA(); + test_ret += test_xmlUCSIsSupplementalArrowsB(); + test_ret += test_xmlUCSIsSupplementalMathematicalOperators(); + test_ret += test_xmlUCSIsSupplementaryPrivateUseAreaA(); + test_ret += test_xmlUCSIsSupplementaryPrivateUseAreaB(); + test_ret += test_xmlUCSIsSyriac(); + test_ret += test_xmlUCSIsTagalog(); + test_ret += test_xmlUCSIsTagbanwa(); + test_ret += test_xmlUCSIsTags(); + test_ret += test_xmlUCSIsTaiLe(); + test_ret += test_xmlUCSIsTaiXuanJingSymbols(); + test_ret += test_xmlUCSIsTamil(); + test_ret += test_xmlUCSIsTelugu(); + test_ret += test_xmlUCSIsThaana(); + test_ret += test_xmlUCSIsThai(); + test_ret += test_xmlUCSIsTibetan(); + test_ret += test_xmlUCSIsUgaritic(); + test_ret += test_xmlUCSIsUnifiedCanadianAboriginalSyllabics(); + test_ret += test_xmlUCSIsVariationSelectors(); + test_ret += test_xmlUCSIsVariationSelectorsSupplement(); + test_ret += test_xmlUCSIsYiRadicals(); + test_ret += test_xmlUCSIsYiSyllables(); + test_ret += test_xmlUCSIsYijingHexagramSymbols(); + + if (test_ret != 0) + printf("Module xmlunicode: %d errors\n", test_ret); + return(test_ret); +} + +static int +test_xmlNewTextWriter(void) { + int test_ret = 0; + +#if defined(LIBXML_WRITER_ENABLED) + int mem_base; + xmlTextWriterPtr ret_val; + xmlOutputBufferPtr out; /* an xmlOutputBufferPtr */ + int n_out; + + for (n_out = 0;n_out < gen_nb_xmlOutputBufferPtr;n_out++) { + mem_base = xmlMemBlocks(); + out = gen_xmlOutputBufferPtr(n_out, 0); + + ret_val = xmlNewTextWriter(out); + if (ret_val != NULL) out = NULL; + desret_xmlTextWriterPtr(ret_val); + call_tests++; + des_xmlOutputBufferPtr(n_out, out, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNewTextWriter", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_out); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlNewTextWriterFilename(void) { + int test_ret = 0; + +#if defined(LIBXML_WRITER_ENABLED) + int mem_base; + xmlTextWriterPtr ret_val; + const char * uri; /* the URI of the resource for the output */ + int n_uri; + int compression; /* compress the output? */ + int n_compression; + + for (n_uri = 0;n_uri < gen_nb_fileoutput;n_uri++) { + for (n_compression = 0;n_compression < gen_nb_int;n_compression++) { + mem_base = xmlMemBlocks(); + uri = gen_fileoutput(n_uri, 0); + compression = gen_int(n_compression, 1); + + ret_val = xmlNewTextWriterFilename(uri, compression); + desret_xmlTextWriterPtr(ret_val); + call_tests++; + des_fileoutput(n_uri, uri, 0); + des_int(n_compression, compression, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNewTextWriterFilename", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_uri); + printf(" %d", n_compression); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlNewTextWriterMemory(void) { + int test_ret = 0; + +#if defined(LIBXML_WRITER_ENABLED) + int mem_base; + xmlTextWriterPtr ret_val; + xmlBufferPtr buf; /* xmlBufferPtr */ + int n_buf; + int compression; /* compress the output? */ + int n_compression; + + for (n_buf = 0;n_buf < gen_nb_xmlBufferPtr;n_buf++) { + for (n_compression = 0;n_compression < gen_nb_int;n_compression++) { + mem_base = xmlMemBlocks(); + buf = gen_xmlBufferPtr(n_buf, 0); + compression = gen_int(n_compression, 1); + + ret_val = xmlNewTextWriterMemory(buf, compression); + desret_xmlTextWriterPtr(ret_val); + call_tests++; + des_xmlBufferPtr(n_buf, buf, 0); + des_int(n_compression, compression, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNewTextWriterMemory", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_buf); + printf(" %d", n_compression); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlNewTextWriterPushParser(void) { + int test_ret = 0; + +#if defined(LIBXML_WRITER_ENABLED) + int mem_base; + xmlTextWriterPtr ret_val; + xmlParserCtxtPtr ctxt; /* xmlParserCtxtPtr to hold the new XML document tree */ + int n_ctxt; + int compression; /* compress the output? */ + int n_compression; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) { + for (n_compression = 0;n_compression < gen_nb_int;n_compression++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0); + compression = gen_int(n_compression, 1); + + ret_val = xmlNewTextWriterPushParser(ctxt, compression); + if (ctxt != NULL) {xmlFreeDoc(ctxt->myDoc); ctxt->myDoc = NULL;} if (ret_val != NULL) ctxt = NULL; + desret_xmlTextWriterPtr(ret_val); + call_tests++; + des_xmlParserCtxtPtr(n_ctxt, ctxt, 0); + des_int(n_compression, compression, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNewTextWriterPushParser", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_compression); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlNewTextWriterTree(void) { + int test_ret = 0; + +#if defined(LIBXML_WRITER_ENABLED) + int mem_base; + xmlTextWriterPtr ret_val; + xmlDocPtr doc; /* xmlDocPtr */ + int n_doc; + xmlNodePtr node; /* xmlNodePtr or NULL for doc->children */ + int n_node; + int compression; /* compress the output? */ + int n_compression; + + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) { + for (n_compression = 0;n_compression < gen_nb_int;n_compression++) { + mem_base = xmlMemBlocks(); + doc = gen_xmlDocPtr(n_doc, 0); + node = gen_xmlNodePtr(n_node, 1); + compression = gen_int(n_compression, 2); + + ret_val = xmlNewTextWriterTree(doc, node, compression); + desret_xmlTextWriterPtr(ret_val); + call_tests++; + des_xmlDocPtr(n_doc, doc, 0); + des_xmlNodePtr(n_node, node, 1); + des_int(n_compression, compression, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlNewTextWriterTree", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf(" %d", n_node); + printf(" %d", n_compression); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextWriterEndAttribute(void) { + int test_ret = 0; + +#if defined(LIBXML_WRITER_ENABLED) + int mem_base; + int ret_val; + xmlTextWriterPtr writer; /* the xmlTextWriterPtr */ + int n_writer; + + for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) { + mem_base = xmlMemBlocks(); + writer = gen_xmlTextWriterPtr(n_writer, 0); + + ret_val = xmlTextWriterEndAttribute(writer); + desret_int(ret_val); + call_tests++; + des_xmlTextWriterPtr(n_writer, writer, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextWriterEndAttribute", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_writer); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextWriterEndCDATA(void) { + int test_ret = 0; + +#if defined(LIBXML_WRITER_ENABLED) + int mem_base; + int ret_val; + xmlTextWriterPtr writer; /* the xmlTextWriterPtr */ + int n_writer; + + for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) { + mem_base = xmlMemBlocks(); + writer = gen_xmlTextWriterPtr(n_writer, 0); + + ret_val = xmlTextWriterEndCDATA(writer); + desret_int(ret_val); + call_tests++; + des_xmlTextWriterPtr(n_writer, writer, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextWriterEndCDATA", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_writer); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextWriterEndComment(void) { + int test_ret = 0; + +#if defined(LIBXML_WRITER_ENABLED) + int mem_base; + int ret_val; + xmlTextWriterPtr writer; /* the xmlTextWriterPtr */ + int n_writer; + + for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) { + mem_base = xmlMemBlocks(); + writer = gen_xmlTextWriterPtr(n_writer, 0); + + ret_val = xmlTextWriterEndComment(writer); + desret_int(ret_val); + call_tests++; + des_xmlTextWriterPtr(n_writer, writer, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextWriterEndComment", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_writer); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextWriterEndDTD(void) { + int test_ret = 0; + +#if defined(LIBXML_WRITER_ENABLED) + int mem_base; + int ret_val; + xmlTextWriterPtr writer; /* the xmlTextWriterPtr */ + int n_writer; + + for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) { + mem_base = xmlMemBlocks(); + writer = gen_xmlTextWriterPtr(n_writer, 0); + + ret_val = xmlTextWriterEndDTD(writer); + desret_int(ret_val); + call_tests++; + des_xmlTextWriterPtr(n_writer, writer, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextWriterEndDTD", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_writer); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextWriterEndDTDAttlist(void) { + int test_ret = 0; + +#if defined(LIBXML_WRITER_ENABLED) + int mem_base; + int ret_val; + xmlTextWriterPtr writer; /* the xmlTextWriterPtr */ + int n_writer; + + for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) { + mem_base = xmlMemBlocks(); + writer = gen_xmlTextWriterPtr(n_writer, 0); + + ret_val = xmlTextWriterEndDTDAttlist(writer); + desret_int(ret_val); + call_tests++; + des_xmlTextWriterPtr(n_writer, writer, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextWriterEndDTDAttlist", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_writer); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextWriterEndDTDElement(void) { + int test_ret = 0; + +#if defined(LIBXML_WRITER_ENABLED) + int mem_base; + int ret_val; + xmlTextWriterPtr writer; /* the xmlTextWriterPtr */ + int n_writer; + + for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) { + mem_base = xmlMemBlocks(); + writer = gen_xmlTextWriterPtr(n_writer, 0); + + ret_val = xmlTextWriterEndDTDElement(writer); + desret_int(ret_val); + call_tests++; + des_xmlTextWriterPtr(n_writer, writer, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextWriterEndDTDElement", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_writer); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextWriterEndDTDEntity(void) { + int test_ret = 0; + +#if defined(LIBXML_WRITER_ENABLED) + int mem_base; + int ret_val; + xmlTextWriterPtr writer; /* the xmlTextWriterPtr */ + int n_writer; + + for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) { + mem_base = xmlMemBlocks(); + writer = gen_xmlTextWriterPtr(n_writer, 0); + + ret_val = xmlTextWriterEndDTDEntity(writer); + desret_int(ret_val); + call_tests++; + des_xmlTextWriterPtr(n_writer, writer, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextWriterEndDTDEntity", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_writer); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextWriterEndDocument(void) { + int test_ret = 0; + +#if defined(LIBXML_WRITER_ENABLED) + int mem_base; + int ret_val; + xmlTextWriterPtr writer; /* the xmlTextWriterPtr */ + int n_writer; + + for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) { + mem_base = xmlMemBlocks(); + writer = gen_xmlTextWriterPtr(n_writer, 0); + + ret_val = xmlTextWriterEndDocument(writer); + desret_int(ret_val); + call_tests++; + des_xmlTextWriterPtr(n_writer, writer, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextWriterEndDocument", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_writer); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextWriterEndElement(void) { + int test_ret = 0; + +#if defined(LIBXML_WRITER_ENABLED) + int mem_base; + int ret_val; + xmlTextWriterPtr writer; /* the xmlTextWriterPtr */ + int n_writer; + + for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) { + mem_base = xmlMemBlocks(); + writer = gen_xmlTextWriterPtr(n_writer, 0); + + ret_val = xmlTextWriterEndElement(writer); + desret_int(ret_val); + call_tests++; + des_xmlTextWriterPtr(n_writer, writer, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextWriterEndElement", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_writer); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextWriterEndPI(void) { + int test_ret = 0; + +#if defined(LIBXML_WRITER_ENABLED) + int mem_base; + int ret_val; + xmlTextWriterPtr writer; /* the xmlTextWriterPtr */ + int n_writer; + + for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) { + mem_base = xmlMemBlocks(); + writer = gen_xmlTextWriterPtr(n_writer, 0); + + ret_val = xmlTextWriterEndPI(writer); + desret_int(ret_val); + call_tests++; + des_xmlTextWriterPtr(n_writer, writer, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextWriterEndPI", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_writer); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextWriterFlush(void) { + int test_ret = 0; + +#if defined(LIBXML_WRITER_ENABLED) + int mem_base; + int ret_val; + xmlTextWriterPtr writer; /* the xmlTextWriterPtr */ + int n_writer; + + for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) { + mem_base = xmlMemBlocks(); + writer = gen_xmlTextWriterPtr(n_writer, 0); + + ret_val = xmlTextWriterFlush(writer); + desret_int(ret_val); + call_tests++; + des_xmlTextWriterPtr(n_writer, writer, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextWriterFlush", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_writer); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextWriterFullEndElement(void) { + int test_ret = 0; + +#if defined(LIBXML_WRITER_ENABLED) + int mem_base; + int ret_val; + xmlTextWriterPtr writer; /* the xmlTextWriterPtr */ + int n_writer; + + for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) { + mem_base = xmlMemBlocks(); + writer = gen_xmlTextWriterPtr(n_writer, 0); + + ret_val = xmlTextWriterFullEndElement(writer); + desret_int(ret_val); + call_tests++; + des_xmlTextWriterPtr(n_writer, writer, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextWriterFullEndElement", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_writer); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextWriterSetIndent(void) { + int test_ret = 0; + +#if defined(LIBXML_WRITER_ENABLED) + int mem_base; + int ret_val; + xmlTextWriterPtr writer; /* the xmlTextWriterPtr */ + int n_writer; + int indent; /* do indentation? */ + int n_indent; + + for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) { + for (n_indent = 0;n_indent < gen_nb_int;n_indent++) { + mem_base = xmlMemBlocks(); + writer = gen_xmlTextWriterPtr(n_writer, 0); + indent = gen_int(n_indent, 1); + + ret_val = xmlTextWriterSetIndent(writer, indent); + desret_int(ret_val); + call_tests++; + des_xmlTextWriterPtr(n_writer, writer, 0); + des_int(n_indent, indent, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextWriterSetIndent", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_writer); + printf(" %d", n_indent); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextWriterSetIndentString(void) { + int test_ret = 0; + +#if defined(LIBXML_WRITER_ENABLED) + int mem_base; + int ret_val; + xmlTextWriterPtr writer; /* the xmlTextWriterPtr */ + int n_writer; + xmlChar * str; /* the xmlChar string */ + int n_str; + + for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) { + for (n_str = 0;n_str < gen_nb_const_xmlChar_ptr;n_str++) { + mem_base = xmlMemBlocks(); + writer = gen_xmlTextWriterPtr(n_writer, 0); + str = gen_const_xmlChar_ptr(n_str, 1); + + ret_val = xmlTextWriterSetIndentString(writer, (const xmlChar *)str); + desret_int(ret_val); + call_tests++; + des_xmlTextWriterPtr(n_writer, writer, 0); + des_const_xmlChar_ptr(n_str, (const xmlChar *)str, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextWriterSetIndentString", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_writer); + printf(" %d", n_str); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextWriterSetQuoteChar(void) { + int test_ret = 0; + +#if defined(LIBXML_WRITER_ENABLED) + int mem_base; + int ret_val; + xmlTextWriterPtr writer; /* the xmlTextWriterPtr */ + int n_writer; + xmlChar quotechar; /* the quote character */ + int n_quotechar; + + for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) { + for (n_quotechar = 0;n_quotechar < gen_nb_xmlChar;n_quotechar++) { + mem_base = xmlMemBlocks(); + writer = gen_xmlTextWriterPtr(n_writer, 0); + quotechar = gen_xmlChar(n_quotechar, 1); + + ret_val = xmlTextWriterSetQuoteChar(writer, quotechar); + desret_int(ret_val); + call_tests++; + des_xmlTextWriterPtr(n_writer, writer, 0); + des_xmlChar(n_quotechar, quotechar, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextWriterSetQuoteChar", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_writer); + printf(" %d", n_quotechar); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextWriterStartAttribute(void) { + int test_ret = 0; + +#if defined(LIBXML_WRITER_ENABLED) + int mem_base; + int ret_val; + xmlTextWriterPtr writer; /* the xmlTextWriterPtr */ + int n_writer; + xmlChar * name; /* element name */ + int n_name; + + for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + mem_base = xmlMemBlocks(); + writer = gen_xmlTextWriterPtr(n_writer, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + + ret_val = xmlTextWriterStartAttribute(writer, (const xmlChar *)name); + desret_int(ret_val); + call_tests++; + des_xmlTextWriterPtr(n_writer, writer, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextWriterStartAttribute", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_writer); + printf(" %d", n_name); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextWriterStartAttributeNS(void) { + int test_ret = 0; + +#if defined(LIBXML_WRITER_ENABLED) + int mem_base; + int ret_val; + xmlTextWriterPtr writer; /* the xmlTextWriterPtr */ + int n_writer; + xmlChar * prefix; /* namespace prefix or NULL */ + int n_prefix; + xmlChar * name; /* element local name */ + int n_name; + xmlChar * namespaceURI; /* namespace URI or NULL */ + int n_namespaceURI; + + for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) { + for (n_prefix = 0;n_prefix < gen_nb_const_xmlChar_ptr;n_prefix++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_namespaceURI = 0;n_namespaceURI < gen_nb_const_xmlChar_ptr;n_namespaceURI++) { + mem_base = xmlMemBlocks(); + writer = gen_xmlTextWriterPtr(n_writer, 0); + prefix = gen_const_xmlChar_ptr(n_prefix, 1); + name = gen_const_xmlChar_ptr(n_name, 2); + namespaceURI = gen_const_xmlChar_ptr(n_namespaceURI, 3); + + ret_val = xmlTextWriterStartAttributeNS(writer, (const xmlChar *)prefix, (const xmlChar *)name, (const xmlChar *)namespaceURI); + desret_int(ret_val); + call_tests++; + des_xmlTextWriterPtr(n_writer, writer, 0); + des_const_xmlChar_ptr(n_prefix, (const xmlChar *)prefix, 1); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 2); + des_const_xmlChar_ptr(n_namespaceURI, (const xmlChar *)namespaceURI, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextWriterStartAttributeNS", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_writer); + printf(" %d", n_prefix); + printf(" %d", n_name); + printf(" %d", n_namespaceURI); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextWriterStartCDATA(void) { + int test_ret = 0; + +#if defined(LIBXML_WRITER_ENABLED) + int mem_base; + int ret_val; + xmlTextWriterPtr writer; /* the xmlTextWriterPtr */ + int n_writer; + + for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) { + mem_base = xmlMemBlocks(); + writer = gen_xmlTextWriterPtr(n_writer, 0); + + ret_val = xmlTextWriterStartCDATA(writer); + desret_int(ret_val); + call_tests++; + des_xmlTextWriterPtr(n_writer, writer, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextWriterStartCDATA", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_writer); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextWriterStartComment(void) { + int test_ret = 0; + +#if defined(LIBXML_WRITER_ENABLED) + int mem_base; + int ret_val; + xmlTextWriterPtr writer; /* the xmlTextWriterPtr */ + int n_writer; + + for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) { + mem_base = xmlMemBlocks(); + writer = gen_xmlTextWriterPtr(n_writer, 0); + + ret_val = xmlTextWriterStartComment(writer); + desret_int(ret_val); + call_tests++; + des_xmlTextWriterPtr(n_writer, writer, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextWriterStartComment", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_writer); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextWriterStartDTD(void) { + int test_ret = 0; + +#if defined(LIBXML_WRITER_ENABLED) + int mem_base; + int ret_val; + xmlTextWriterPtr writer; /* the xmlTextWriterPtr */ + int n_writer; + xmlChar * name; /* the name of the DTD */ + int n_name; + xmlChar * pubid; /* the public identifier, which is an alternative to the system identifier */ + int n_pubid; + xmlChar * sysid; /* the system identifier, which is the URI of the DTD */ + int n_sysid; + + for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_pubid = 0;n_pubid < gen_nb_const_xmlChar_ptr;n_pubid++) { + for (n_sysid = 0;n_sysid < gen_nb_const_xmlChar_ptr;n_sysid++) { + mem_base = xmlMemBlocks(); + writer = gen_xmlTextWriterPtr(n_writer, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + pubid = gen_const_xmlChar_ptr(n_pubid, 2); + sysid = gen_const_xmlChar_ptr(n_sysid, 3); + + ret_val = xmlTextWriterStartDTD(writer, (const xmlChar *)name, (const xmlChar *)pubid, (const xmlChar *)sysid); + desret_int(ret_val); + call_tests++; + des_xmlTextWriterPtr(n_writer, writer, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + des_const_xmlChar_ptr(n_pubid, (const xmlChar *)pubid, 2); + des_const_xmlChar_ptr(n_sysid, (const xmlChar *)sysid, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextWriterStartDTD", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_writer); + printf(" %d", n_name); + printf(" %d", n_pubid); + printf(" %d", n_sysid); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextWriterStartDTDAttlist(void) { + int test_ret = 0; + +#if defined(LIBXML_WRITER_ENABLED) + int mem_base; + int ret_val; + xmlTextWriterPtr writer; /* the xmlTextWriterPtr */ + int n_writer; + xmlChar * name; /* the name of the DTD ATTLIST */ + int n_name; + + for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + mem_base = xmlMemBlocks(); + writer = gen_xmlTextWriterPtr(n_writer, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + + ret_val = xmlTextWriterStartDTDAttlist(writer, (const xmlChar *)name); + desret_int(ret_val); + call_tests++; + des_xmlTextWriterPtr(n_writer, writer, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextWriterStartDTDAttlist", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_writer); + printf(" %d", n_name); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextWriterStartDTDElement(void) { + int test_ret = 0; + +#if defined(LIBXML_WRITER_ENABLED) + int mem_base; + int ret_val; + xmlTextWriterPtr writer; /* the xmlTextWriterPtr */ + int n_writer; + xmlChar * name; /* the name of the DTD element */ + int n_name; + + for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + mem_base = xmlMemBlocks(); + writer = gen_xmlTextWriterPtr(n_writer, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + + ret_val = xmlTextWriterStartDTDElement(writer, (const xmlChar *)name); + desret_int(ret_val); + call_tests++; + des_xmlTextWriterPtr(n_writer, writer, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextWriterStartDTDElement", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_writer); + printf(" %d", n_name); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextWriterStartDTDEntity(void) { + int test_ret = 0; + +#if defined(LIBXML_WRITER_ENABLED) + int mem_base; + int ret_val; + xmlTextWriterPtr writer; /* the xmlTextWriterPtr */ + int n_writer; + int pe; /* TRUE if this is a parameter entity, FALSE if not */ + int n_pe; + xmlChar * name; /* the name of the DTD ATTLIST */ + int n_name; + + for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) { + for (n_pe = 0;n_pe < gen_nb_int;n_pe++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + mem_base = xmlMemBlocks(); + writer = gen_xmlTextWriterPtr(n_writer, 0); + pe = gen_int(n_pe, 1); + name = gen_const_xmlChar_ptr(n_name, 2); + + ret_val = xmlTextWriterStartDTDEntity(writer, pe, (const xmlChar *)name); + desret_int(ret_val); + call_tests++; + des_xmlTextWriterPtr(n_writer, writer, 0); + des_int(n_pe, pe, 1); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextWriterStartDTDEntity", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_writer); + printf(" %d", n_pe); + printf(" %d", n_name); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextWriterStartDocument(void) { + int test_ret = 0; + +#if defined(LIBXML_WRITER_ENABLED) + int mem_base; + int ret_val; + xmlTextWriterPtr writer; /* the xmlTextWriterPtr */ + int n_writer; + char * version; /* the xml version ("1.0") or NULL for default ("1.0") */ + int n_version; + char * encoding; /* the encoding or NULL for default */ + int n_encoding; + char * standalone; /* "yes" or "no" or NULL for default */ + int n_standalone; + + for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) { + for (n_version = 0;n_version < gen_nb_const_char_ptr;n_version++) { + for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) { + for (n_standalone = 0;n_standalone < gen_nb_const_char_ptr;n_standalone++) { + mem_base = xmlMemBlocks(); + writer = gen_xmlTextWriterPtr(n_writer, 0); + version = gen_const_char_ptr(n_version, 1); + encoding = gen_const_char_ptr(n_encoding, 2); + standalone = gen_const_char_ptr(n_standalone, 3); + + ret_val = xmlTextWriterStartDocument(writer, (const char *)version, (const char *)encoding, (const char *)standalone); + desret_int(ret_val); + call_tests++; + des_xmlTextWriterPtr(n_writer, writer, 0); + des_const_char_ptr(n_version, (const char *)version, 1); + des_const_char_ptr(n_encoding, (const char *)encoding, 2); + des_const_char_ptr(n_standalone, (const char *)standalone, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextWriterStartDocument", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_writer); + printf(" %d", n_version); + printf(" %d", n_encoding); + printf(" %d", n_standalone); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextWriterStartElement(void) { + int test_ret = 0; + +#if defined(LIBXML_WRITER_ENABLED) + int mem_base; + int ret_val; + xmlTextWriterPtr writer; /* the xmlTextWriterPtr */ + int n_writer; + xmlChar * name; /* element name */ + int n_name; + + for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + mem_base = xmlMemBlocks(); + writer = gen_xmlTextWriterPtr(n_writer, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + + ret_val = xmlTextWriterStartElement(writer, (const xmlChar *)name); + desret_int(ret_val); + call_tests++; + des_xmlTextWriterPtr(n_writer, writer, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextWriterStartElement", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_writer); + printf(" %d", n_name); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextWriterStartElementNS(void) { + int test_ret = 0; + +#if defined(LIBXML_WRITER_ENABLED) + int mem_base; + int ret_val; + xmlTextWriterPtr writer; /* the xmlTextWriterPtr */ + int n_writer; + xmlChar * prefix; /* namespace prefix or NULL */ + int n_prefix; + xmlChar * name; /* element local name */ + int n_name; + xmlChar * namespaceURI; /* namespace URI or NULL */ + int n_namespaceURI; + + for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) { + for (n_prefix = 0;n_prefix < gen_nb_const_xmlChar_ptr;n_prefix++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_namespaceURI = 0;n_namespaceURI < gen_nb_const_xmlChar_ptr;n_namespaceURI++) { + mem_base = xmlMemBlocks(); + writer = gen_xmlTextWriterPtr(n_writer, 0); + prefix = gen_const_xmlChar_ptr(n_prefix, 1); + name = gen_const_xmlChar_ptr(n_name, 2); + namespaceURI = gen_const_xmlChar_ptr(n_namespaceURI, 3); + + ret_val = xmlTextWriterStartElementNS(writer, (const xmlChar *)prefix, (const xmlChar *)name, (const xmlChar *)namespaceURI); + desret_int(ret_val); + call_tests++; + des_xmlTextWriterPtr(n_writer, writer, 0); + des_const_xmlChar_ptr(n_prefix, (const xmlChar *)prefix, 1); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 2); + des_const_xmlChar_ptr(n_namespaceURI, (const xmlChar *)namespaceURI, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextWriterStartElementNS", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_writer); + printf(" %d", n_prefix); + printf(" %d", n_name); + printf(" %d", n_namespaceURI); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextWriterStartPI(void) { + int test_ret = 0; + +#if defined(LIBXML_WRITER_ENABLED) + int mem_base; + int ret_val; + xmlTextWriterPtr writer; /* the xmlTextWriterPtr */ + int n_writer; + xmlChar * target; /* PI target */ + int n_target; + + for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) { + for (n_target = 0;n_target < gen_nb_const_xmlChar_ptr;n_target++) { + mem_base = xmlMemBlocks(); + writer = gen_xmlTextWriterPtr(n_writer, 0); + target = gen_const_xmlChar_ptr(n_target, 1); + + ret_val = xmlTextWriterStartPI(writer, (const xmlChar *)target); + desret_int(ret_val); + call_tests++; + des_xmlTextWriterPtr(n_writer, writer, 0); + des_const_xmlChar_ptr(n_target, (const xmlChar *)target, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextWriterStartPI", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_writer); + printf(" %d", n_target); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextWriterWriteAttribute(void) { + int test_ret = 0; + +#if defined(LIBXML_WRITER_ENABLED) + int mem_base; + int ret_val; + xmlTextWriterPtr writer; /* the xmlTextWriterPtr */ + int n_writer; + xmlChar * name; /* attribute name */ + int n_name; + xmlChar * content; /* attribute content */ + int n_content; + + for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) { + mem_base = xmlMemBlocks(); + writer = gen_xmlTextWriterPtr(n_writer, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + content = gen_const_xmlChar_ptr(n_content, 2); + + ret_val = xmlTextWriterWriteAttribute(writer, (const xmlChar *)name, (const xmlChar *)content); + desret_int(ret_val); + call_tests++; + des_xmlTextWriterPtr(n_writer, writer, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextWriterWriteAttribute", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_writer); + printf(" %d", n_name); + printf(" %d", n_content); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextWriterWriteAttributeNS(void) { + int test_ret = 0; + +#if defined(LIBXML_WRITER_ENABLED) + int mem_base; + int ret_val; + xmlTextWriterPtr writer; /* the xmlTextWriterPtr */ + int n_writer; + xmlChar * prefix; /* namespace prefix */ + int n_prefix; + xmlChar * name; /* attribute local name */ + int n_name; + xmlChar * namespaceURI; /* namespace URI */ + int n_namespaceURI; + xmlChar * content; /* attribute content */ + int n_content; + + for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) { + for (n_prefix = 0;n_prefix < gen_nb_const_xmlChar_ptr;n_prefix++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_namespaceURI = 0;n_namespaceURI < gen_nb_const_xmlChar_ptr;n_namespaceURI++) { + for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) { + mem_base = xmlMemBlocks(); + writer = gen_xmlTextWriterPtr(n_writer, 0); + prefix = gen_const_xmlChar_ptr(n_prefix, 1); + name = gen_const_xmlChar_ptr(n_name, 2); + namespaceURI = gen_const_xmlChar_ptr(n_namespaceURI, 3); + content = gen_const_xmlChar_ptr(n_content, 4); + + ret_val = xmlTextWriterWriteAttributeNS(writer, (const xmlChar *)prefix, (const xmlChar *)name, (const xmlChar *)namespaceURI, (const xmlChar *)content); + desret_int(ret_val); + call_tests++; + des_xmlTextWriterPtr(n_writer, writer, 0); + des_const_xmlChar_ptr(n_prefix, (const xmlChar *)prefix, 1); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 2); + des_const_xmlChar_ptr(n_namespaceURI, (const xmlChar *)namespaceURI, 3); + des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 4); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextWriterWriteAttributeNS", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_writer); + printf(" %d", n_prefix); + printf(" %d", n_name); + printf(" %d", n_namespaceURI); + printf(" %d", n_content); + printf("\n"); + } + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextWriterWriteBase64(void) { + int test_ret = 0; + +#if defined(LIBXML_WRITER_ENABLED) + int mem_base; + int ret_val; + xmlTextWriterPtr writer; /* the xmlTextWriterPtr */ + int n_writer; + char * data; /* binary data */ + int n_data; + int start; /* the position within the data of the first byte to encode */ + int n_start; + int len; /* the number of bytes to encode */ + int n_len; + + for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) { + for (n_data = 0;n_data < gen_nb_const_char_ptr;n_data++) { + for (n_start = 0;n_start < gen_nb_int;n_start++) { + for (n_len = 0;n_len < gen_nb_int;n_len++) { + mem_base = xmlMemBlocks(); + writer = gen_xmlTextWriterPtr(n_writer, 0); + data = gen_const_char_ptr(n_data, 1); + start = gen_int(n_start, 2); + len = gen_int(n_len, 3); + + ret_val = xmlTextWriterWriteBase64(writer, (const char *)data, start, len); + desret_int(ret_val); + call_tests++; + des_xmlTextWriterPtr(n_writer, writer, 0); + des_const_char_ptr(n_data, (const char *)data, 1); + des_int(n_start, start, 2); + des_int(n_len, len, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextWriterWriteBase64", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_writer); + printf(" %d", n_data); + printf(" %d", n_start); + printf(" %d", n_len); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextWriterWriteBinHex(void) { + int test_ret = 0; + +#if defined(LIBXML_WRITER_ENABLED) + int mem_base; + int ret_val; + xmlTextWriterPtr writer; /* the xmlTextWriterPtr */ + int n_writer; + char * data; /* binary data */ + int n_data; + int start; /* the position within the data of the first byte to encode */ + int n_start; + int len; /* the number of bytes to encode */ + int n_len; + + for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) { + for (n_data = 0;n_data < gen_nb_const_char_ptr;n_data++) { + for (n_start = 0;n_start < gen_nb_int;n_start++) { + for (n_len = 0;n_len < gen_nb_int;n_len++) { + mem_base = xmlMemBlocks(); + writer = gen_xmlTextWriterPtr(n_writer, 0); + data = gen_const_char_ptr(n_data, 1); + start = gen_int(n_start, 2); + len = gen_int(n_len, 3); + + ret_val = xmlTextWriterWriteBinHex(writer, (const char *)data, start, len); + desret_int(ret_val); + call_tests++; + des_xmlTextWriterPtr(n_writer, writer, 0); + des_const_char_ptr(n_data, (const char *)data, 1); + des_int(n_start, start, 2); + des_int(n_len, len, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextWriterWriteBinHex", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_writer); + printf(" %d", n_data); + printf(" %d", n_start); + printf(" %d", n_len); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextWriterWriteCDATA(void) { + int test_ret = 0; + +#if defined(LIBXML_WRITER_ENABLED) + int mem_base; + int ret_val; + xmlTextWriterPtr writer; /* the xmlTextWriterPtr */ + int n_writer; + xmlChar * content; /* CDATA content */ + int n_content; + + for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) { + for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) { + mem_base = xmlMemBlocks(); + writer = gen_xmlTextWriterPtr(n_writer, 0); + content = gen_const_xmlChar_ptr(n_content, 1); + + ret_val = xmlTextWriterWriteCDATA(writer, (const xmlChar *)content); + desret_int(ret_val); + call_tests++; + des_xmlTextWriterPtr(n_writer, writer, 0); + des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextWriterWriteCDATA", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_writer); + printf(" %d", n_content); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextWriterWriteComment(void) { + int test_ret = 0; + +#if defined(LIBXML_WRITER_ENABLED) + int mem_base; + int ret_val; + xmlTextWriterPtr writer; /* the xmlTextWriterPtr */ + int n_writer; + xmlChar * content; /* comment string */ + int n_content; + + for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) { + for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) { + mem_base = xmlMemBlocks(); + writer = gen_xmlTextWriterPtr(n_writer, 0); + content = gen_const_xmlChar_ptr(n_content, 1); + + ret_val = xmlTextWriterWriteComment(writer, (const xmlChar *)content); + desret_int(ret_val); + call_tests++; + des_xmlTextWriterPtr(n_writer, writer, 0); + des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextWriterWriteComment", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_writer); + printf(" %d", n_content); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextWriterWriteDTD(void) { + int test_ret = 0; + +#if defined(LIBXML_WRITER_ENABLED) + int mem_base; + int ret_val; + xmlTextWriterPtr writer; /* the xmlTextWriterPtr */ + int n_writer; + xmlChar * name; /* the name of the DTD */ + int n_name; + xmlChar * pubid; /* the public identifier, which is an alternative to the system identifier */ + int n_pubid; + xmlChar * sysid; /* the system identifier, which is the URI of the DTD */ + int n_sysid; + xmlChar * subset; /* string content of the DTD */ + int n_subset; + + for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_pubid = 0;n_pubid < gen_nb_const_xmlChar_ptr;n_pubid++) { + for (n_sysid = 0;n_sysid < gen_nb_const_xmlChar_ptr;n_sysid++) { + for (n_subset = 0;n_subset < gen_nb_const_xmlChar_ptr;n_subset++) { + mem_base = xmlMemBlocks(); + writer = gen_xmlTextWriterPtr(n_writer, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + pubid = gen_const_xmlChar_ptr(n_pubid, 2); + sysid = gen_const_xmlChar_ptr(n_sysid, 3); + subset = gen_const_xmlChar_ptr(n_subset, 4); + + ret_val = xmlTextWriterWriteDTD(writer, (const xmlChar *)name, (const xmlChar *)pubid, (const xmlChar *)sysid, (const xmlChar *)subset); + desret_int(ret_val); + call_tests++; + des_xmlTextWriterPtr(n_writer, writer, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + des_const_xmlChar_ptr(n_pubid, (const xmlChar *)pubid, 2); + des_const_xmlChar_ptr(n_sysid, (const xmlChar *)sysid, 3); + des_const_xmlChar_ptr(n_subset, (const xmlChar *)subset, 4); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextWriterWriteDTD", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_writer); + printf(" %d", n_name); + printf(" %d", n_pubid); + printf(" %d", n_sysid); + printf(" %d", n_subset); + printf("\n"); + } + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextWriterWriteDTDAttlist(void) { + int test_ret = 0; + +#if defined(LIBXML_WRITER_ENABLED) + int mem_base; + int ret_val; + xmlTextWriterPtr writer; /* the xmlTextWriterPtr */ + int n_writer; + xmlChar * name; /* the name of the DTD ATTLIST */ + int n_name; + xmlChar * content; /* content of the ATTLIST */ + int n_content; + + for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) { + mem_base = xmlMemBlocks(); + writer = gen_xmlTextWriterPtr(n_writer, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + content = gen_const_xmlChar_ptr(n_content, 2); + + ret_val = xmlTextWriterWriteDTDAttlist(writer, (const xmlChar *)name, (const xmlChar *)content); + desret_int(ret_val); + call_tests++; + des_xmlTextWriterPtr(n_writer, writer, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextWriterWriteDTDAttlist", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_writer); + printf(" %d", n_name); + printf(" %d", n_content); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextWriterWriteDTDElement(void) { + int test_ret = 0; + +#if defined(LIBXML_WRITER_ENABLED) + int mem_base; + int ret_val; + xmlTextWriterPtr writer; /* the xmlTextWriterPtr */ + int n_writer; + xmlChar * name; /* the name of the DTD element */ + int n_name; + xmlChar * content; /* content of the element */ + int n_content; + + for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) { + mem_base = xmlMemBlocks(); + writer = gen_xmlTextWriterPtr(n_writer, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + content = gen_const_xmlChar_ptr(n_content, 2); + + ret_val = xmlTextWriterWriteDTDElement(writer, (const xmlChar *)name, (const xmlChar *)content); + desret_int(ret_val); + call_tests++; + des_xmlTextWriterPtr(n_writer, writer, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextWriterWriteDTDElement", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_writer); + printf(" %d", n_name); + printf(" %d", n_content); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextWriterWriteDTDEntity(void) { + int test_ret = 0; + +#if defined(LIBXML_WRITER_ENABLED) + int mem_base; + int ret_val; + xmlTextWriterPtr writer; /* the xmlTextWriterPtr */ + int n_writer; + int pe; /* TRUE if this is a parameter entity, FALSE if not */ + int n_pe; + xmlChar * name; /* the name of the DTD entity */ + int n_name; + xmlChar * pubid; /* the public identifier, which is an alternative to the system identifier */ + int n_pubid; + xmlChar * sysid; /* the system identifier, which is the URI of the DTD */ + int n_sysid; + xmlChar * ndataid; /* the xml notation name. */ + int n_ndataid; + xmlChar * content; /* content of the entity */ + int n_content; + + for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) { + for (n_pe = 0;n_pe < gen_nb_int;n_pe++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_pubid = 0;n_pubid < gen_nb_const_xmlChar_ptr;n_pubid++) { + for (n_sysid = 0;n_sysid < gen_nb_const_xmlChar_ptr;n_sysid++) { + for (n_ndataid = 0;n_ndataid < gen_nb_const_xmlChar_ptr;n_ndataid++) { + for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) { + mem_base = xmlMemBlocks(); + writer = gen_xmlTextWriterPtr(n_writer, 0); + pe = gen_int(n_pe, 1); + name = gen_const_xmlChar_ptr(n_name, 2); + pubid = gen_const_xmlChar_ptr(n_pubid, 3); + sysid = gen_const_xmlChar_ptr(n_sysid, 4); + ndataid = gen_const_xmlChar_ptr(n_ndataid, 5); + content = gen_const_xmlChar_ptr(n_content, 6); + + ret_val = xmlTextWriterWriteDTDEntity(writer, pe, (const xmlChar *)name, (const xmlChar *)pubid, (const xmlChar *)sysid, (const xmlChar *)ndataid, (const xmlChar *)content); + desret_int(ret_val); + call_tests++; + des_xmlTextWriterPtr(n_writer, writer, 0); + des_int(n_pe, pe, 1); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 2); + des_const_xmlChar_ptr(n_pubid, (const xmlChar *)pubid, 3); + des_const_xmlChar_ptr(n_sysid, (const xmlChar *)sysid, 4); + des_const_xmlChar_ptr(n_ndataid, (const xmlChar *)ndataid, 5); + des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 6); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextWriterWriteDTDEntity", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_writer); + printf(" %d", n_pe); + printf(" %d", n_name); + printf(" %d", n_pubid); + printf(" %d", n_sysid); + printf(" %d", n_ndataid); + printf(" %d", n_content); + printf("\n"); + } + } + } + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextWriterWriteDTDExternalEntity(void) { + int test_ret = 0; + +#if defined(LIBXML_WRITER_ENABLED) + int mem_base; + int ret_val; + xmlTextWriterPtr writer; /* the xmlTextWriterPtr */ + int n_writer; + int pe; /* TRUE if this is a parameter entity, FALSE if not */ + int n_pe; + xmlChar * name; /* the name of the DTD entity */ + int n_name; + xmlChar * pubid; /* the public identifier, which is an alternative to the system identifier */ + int n_pubid; + xmlChar * sysid; /* the system identifier, which is the URI of the DTD */ + int n_sysid; + xmlChar * ndataid; /* the xml notation name. */ + int n_ndataid; + + for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) { + for (n_pe = 0;n_pe < gen_nb_int;n_pe++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_pubid = 0;n_pubid < gen_nb_const_xmlChar_ptr;n_pubid++) { + for (n_sysid = 0;n_sysid < gen_nb_const_xmlChar_ptr;n_sysid++) { + for (n_ndataid = 0;n_ndataid < gen_nb_const_xmlChar_ptr;n_ndataid++) { + mem_base = xmlMemBlocks(); + writer = gen_xmlTextWriterPtr(n_writer, 0); + pe = gen_int(n_pe, 1); + name = gen_const_xmlChar_ptr(n_name, 2); + pubid = gen_const_xmlChar_ptr(n_pubid, 3); + sysid = gen_const_xmlChar_ptr(n_sysid, 4); + ndataid = gen_const_xmlChar_ptr(n_ndataid, 5); + + ret_val = xmlTextWriterWriteDTDExternalEntity(writer, pe, (const xmlChar *)name, (const xmlChar *)pubid, (const xmlChar *)sysid, (const xmlChar *)ndataid); + desret_int(ret_val); + call_tests++; + des_xmlTextWriterPtr(n_writer, writer, 0); + des_int(n_pe, pe, 1); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 2); + des_const_xmlChar_ptr(n_pubid, (const xmlChar *)pubid, 3); + des_const_xmlChar_ptr(n_sysid, (const xmlChar *)sysid, 4); + des_const_xmlChar_ptr(n_ndataid, (const xmlChar *)ndataid, 5); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextWriterWriteDTDExternalEntity", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_writer); + printf(" %d", n_pe); + printf(" %d", n_name); + printf(" %d", n_pubid); + printf(" %d", n_sysid); + printf(" %d", n_ndataid); + printf("\n"); + } + } + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextWriterWriteDTDExternalEntityContents(void) { + int test_ret = 0; + +#if defined(LIBXML_WRITER_ENABLED) + int mem_base; + int ret_val; + xmlTextWriterPtr writer; /* the xmlTextWriterPtr */ + int n_writer; + xmlChar * pubid; /* the public identifier, which is an alternative to the system identifier */ + int n_pubid; + xmlChar * sysid; /* the system identifier, which is the URI of the DTD */ + int n_sysid; + xmlChar * ndataid; /* the xml notation name. */ + int n_ndataid; + + for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) { + for (n_pubid = 0;n_pubid < gen_nb_const_xmlChar_ptr;n_pubid++) { + for (n_sysid = 0;n_sysid < gen_nb_const_xmlChar_ptr;n_sysid++) { + for (n_ndataid = 0;n_ndataid < gen_nb_const_xmlChar_ptr;n_ndataid++) { + mem_base = xmlMemBlocks(); + writer = gen_xmlTextWriterPtr(n_writer, 0); + pubid = gen_const_xmlChar_ptr(n_pubid, 1); + sysid = gen_const_xmlChar_ptr(n_sysid, 2); + ndataid = gen_const_xmlChar_ptr(n_ndataid, 3); + + ret_val = xmlTextWriterWriteDTDExternalEntityContents(writer, (const xmlChar *)pubid, (const xmlChar *)sysid, (const xmlChar *)ndataid); + desret_int(ret_val); + call_tests++; + des_xmlTextWriterPtr(n_writer, writer, 0); + des_const_xmlChar_ptr(n_pubid, (const xmlChar *)pubid, 1); + des_const_xmlChar_ptr(n_sysid, (const xmlChar *)sysid, 2); + des_const_xmlChar_ptr(n_ndataid, (const xmlChar *)ndataid, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextWriterWriteDTDExternalEntityContents", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_writer); + printf(" %d", n_pubid); + printf(" %d", n_sysid); + printf(" %d", n_ndataid); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextWriterWriteDTDInternalEntity(void) { + int test_ret = 0; + +#if defined(LIBXML_WRITER_ENABLED) + int mem_base; + int ret_val; + xmlTextWriterPtr writer; /* the xmlTextWriterPtr */ + int n_writer; + int pe; /* TRUE if this is a parameter entity, FALSE if not */ + int n_pe; + xmlChar * name; /* the name of the DTD entity */ + int n_name; + xmlChar * content; /* content of the entity */ + int n_content; + + for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) { + for (n_pe = 0;n_pe < gen_nb_int;n_pe++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) { + mem_base = xmlMemBlocks(); + writer = gen_xmlTextWriterPtr(n_writer, 0); + pe = gen_int(n_pe, 1); + name = gen_const_xmlChar_ptr(n_name, 2); + content = gen_const_xmlChar_ptr(n_content, 3); + + ret_val = xmlTextWriterWriteDTDInternalEntity(writer, pe, (const xmlChar *)name, (const xmlChar *)content); + desret_int(ret_val); + call_tests++; + des_xmlTextWriterPtr(n_writer, writer, 0); + des_int(n_pe, pe, 1); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 2); + des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextWriterWriteDTDInternalEntity", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_writer); + printf(" %d", n_pe); + printf(" %d", n_name); + printf(" %d", n_content); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextWriterWriteDTDNotation(void) { + int test_ret = 0; + +#if defined(LIBXML_WRITER_ENABLED) + int mem_base; + int ret_val; + xmlTextWriterPtr writer; /* the xmlTextWriterPtr */ + int n_writer; + xmlChar * name; /* the name of the xml notation */ + int n_name; + xmlChar * pubid; /* the public identifier, which is an alternative to the system identifier */ + int n_pubid; + xmlChar * sysid; /* the system identifier, which is the URI of the DTD */ + int n_sysid; + + for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_pubid = 0;n_pubid < gen_nb_const_xmlChar_ptr;n_pubid++) { + for (n_sysid = 0;n_sysid < gen_nb_const_xmlChar_ptr;n_sysid++) { + mem_base = xmlMemBlocks(); + writer = gen_xmlTextWriterPtr(n_writer, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + pubid = gen_const_xmlChar_ptr(n_pubid, 2); + sysid = gen_const_xmlChar_ptr(n_sysid, 3); + + ret_val = xmlTextWriterWriteDTDNotation(writer, (const xmlChar *)name, (const xmlChar *)pubid, (const xmlChar *)sysid); + desret_int(ret_val); + call_tests++; + des_xmlTextWriterPtr(n_writer, writer, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + des_const_xmlChar_ptr(n_pubid, (const xmlChar *)pubid, 2); + des_const_xmlChar_ptr(n_sysid, (const xmlChar *)sysid, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextWriterWriteDTDNotation", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_writer); + printf(" %d", n_name); + printf(" %d", n_pubid); + printf(" %d", n_sysid); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextWriterWriteElement(void) { + int test_ret = 0; + +#if defined(LIBXML_WRITER_ENABLED) + int mem_base; + int ret_val; + xmlTextWriterPtr writer; /* the xmlTextWriterPtr */ + int n_writer; + xmlChar * name; /* element name */ + int n_name; + xmlChar * content; /* element content */ + int n_content; + + for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) { + mem_base = xmlMemBlocks(); + writer = gen_xmlTextWriterPtr(n_writer, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + content = gen_const_xmlChar_ptr(n_content, 2); + + ret_val = xmlTextWriterWriteElement(writer, (const xmlChar *)name, (const xmlChar *)content); + desret_int(ret_val); + call_tests++; + des_xmlTextWriterPtr(n_writer, writer, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextWriterWriteElement", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_writer); + printf(" %d", n_name); + printf(" %d", n_content); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextWriterWriteElementNS(void) { + int test_ret = 0; + +#if defined(LIBXML_WRITER_ENABLED) + int mem_base; + int ret_val; + xmlTextWriterPtr writer; /* the xmlTextWriterPtr */ + int n_writer; + xmlChar * prefix; /* namespace prefix */ + int n_prefix; + xmlChar * name; /* element local name */ + int n_name; + xmlChar * namespaceURI; /* namespace URI */ + int n_namespaceURI; + xmlChar * content; /* element content */ + int n_content; + + for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) { + for (n_prefix = 0;n_prefix < gen_nb_const_xmlChar_ptr;n_prefix++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_namespaceURI = 0;n_namespaceURI < gen_nb_const_xmlChar_ptr;n_namespaceURI++) { + for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) { + mem_base = xmlMemBlocks(); + writer = gen_xmlTextWriterPtr(n_writer, 0); + prefix = gen_const_xmlChar_ptr(n_prefix, 1); + name = gen_const_xmlChar_ptr(n_name, 2); + namespaceURI = gen_const_xmlChar_ptr(n_namespaceURI, 3); + content = gen_const_xmlChar_ptr(n_content, 4); + + ret_val = xmlTextWriterWriteElementNS(writer, (const xmlChar *)prefix, (const xmlChar *)name, (const xmlChar *)namespaceURI, (const xmlChar *)content); + desret_int(ret_val); + call_tests++; + des_xmlTextWriterPtr(n_writer, writer, 0); + des_const_xmlChar_ptr(n_prefix, (const xmlChar *)prefix, 1); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 2); + des_const_xmlChar_ptr(n_namespaceURI, (const xmlChar *)namespaceURI, 3); + des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 4); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextWriterWriteElementNS", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_writer); + printf(" %d", n_prefix); + printf(" %d", n_name); + printf(" %d", n_namespaceURI); + printf(" %d", n_content); + printf("\n"); + } + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextWriterWriteFormatAttribute(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlTextWriterWriteFormatAttributeNS(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlTextWriterWriteFormatCDATA(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlTextWriterWriteFormatComment(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlTextWriterWriteFormatDTD(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlTextWriterWriteFormatDTDAttlist(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlTextWriterWriteFormatDTDElement(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlTextWriterWriteFormatDTDInternalEntity(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlTextWriterWriteFormatElement(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlTextWriterWriteFormatElementNS(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlTextWriterWriteFormatPI(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlTextWriterWriteFormatRaw(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlTextWriterWriteFormatString(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlTextWriterWritePI(void) { + int test_ret = 0; + +#if defined(LIBXML_WRITER_ENABLED) + int mem_base; + int ret_val; + xmlTextWriterPtr writer; /* the xmlTextWriterPtr */ + int n_writer; + xmlChar * target; /* PI target */ + int n_target; + xmlChar * content; /* PI content */ + int n_content; + + for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) { + for (n_target = 0;n_target < gen_nb_const_xmlChar_ptr;n_target++) { + for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) { + mem_base = xmlMemBlocks(); + writer = gen_xmlTextWriterPtr(n_writer, 0); + target = gen_const_xmlChar_ptr(n_target, 1); + content = gen_const_xmlChar_ptr(n_content, 2); + + ret_val = xmlTextWriterWritePI(writer, (const xmlChar *)target, (const xmlChar *)content); + desret_int(ret_val); + call_tests++; + des_xmlTextWriterPtr(n_writer, writer, 0); + des_const_xmlChar_ptr(n_target, (const xmlChar *)target, 1); + des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextWriterWritePI", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_writer); + printf(" %d", n_target); + printf(" %d", n_content); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextWriterWriteRaw(void) { + int test_ret = 0; + +#if defined(LIBXML_WRITER_ENABLED) + int mem_base; + int ret_val; + xmlTextWriterPtr writer; /* the xmlTextWriterPtr */ + int n_writer; + xmlChar * content; /* text string */ + int n_content; + + for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) { + for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) { + mem_base = xmlMemBlocks(); + writer = gen_xmlTextWriterPtr(n_writer, 0); + content = gen_const_xmlChar_ptr(n_content, 1); + + ret_val = xmlTextWriterWriteRaw(writer, (const xmlChar *)content); + desret_int(ret_val); + call_tests++; + des_xmlTextWriterPtr(n_writer, writer, 0); + des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextWriterWriteRaw", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_writer); + printf(" %d", n_content); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextWriterWriteRawLen(void) { + int test_ret = 0; + +#if defined(LIBXML_WRITER_ENABLED) + int mem_base; + int ret_val; + xmlTextWriterPtr writer; /* the xmlTextWriterPtr */ + int n_writer; + xmlChar * content; /* text string */ + int n_content; + int len; /* length of the text string */ + int n_len; + + for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) { + for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) { + for (n_len = 0;n_len < gen_nb_int;n_len++) { + mem_base = xmlMemBlocks(); + writer = gen_xmlTextWriterPtr(n_writer, 0); + content = gen_const_xmlChar_ptr(n_content, 1); + len = gen_int(n_len, 2); + + ret_val = xmlTextWriterWriteRawLen(writer, (const xmlChar *)content, len); + desret_int(ret_val); + call_tests++; + des_xmlTextWriterPtr(n_writer, writer, 0); + des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 1); + des_int(n_len, len, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextWriterWriteRawLen", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_writer); + printf(" %d", n_content); + printf(" %d", n_len); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextWriterWriteString(void) { + int test_ret = 0; + +#if defined(LIBXML_WRITER_ENABLED) + int mem_base; + int ret_val; + xmlTextWriterPtr writer; /* the xmlTextWriterPtr */ + int n_writer; + xmlChar * content; /* text string */ + int n_content; + + for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) { + for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) { + mem_base = xmlMemBlocks(); + writer = gen_xmlTextWriterPtr(n_writer, 0); + content = gen_const_xmlChar_ptr(n_content, 1); + + ret_val = xmlTextWriterWriteString(writer, (const xmlChar *)content); + desret_int(ret_val); + call_tests++; + des_xmlTextWriterPtr(n_writer, writer, 0); + des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlTextWriterWriteString", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_writer); + printf(" %d", n_content); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlTextWriterWriteVFormatAttribute(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlTextWriterWriteVFormatAttributeNS(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlTextWriterWriteVFormatCDATA(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlTextWriterWriteVFormatComment(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlTextWriterWriteVFormatDTD(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlTextWriterWriteVFormatDTDAttlist(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlTextWriterWriteVFormatDTDElement(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlTextWriterWriteVFormatDTDInternalEntity(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlTextWriterWriteVFormatElement(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlTextWriterWriteVFormatElementNS(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlTextWriterWriteVFormatPI(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlTextWriterWriteVFormatRaw(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlTextWriterWriteVFormatString(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + +static int +test_xmlwriter(void) { + int test_ret = 0; + + if (quiet == 0) printf("Testing xmlwriter : 52 of 80 functions ...\n"); + test_ret += test_xmlNewTextWriter(); + test_ret += test_xmlNewTextWriterFilename(); + test_ret += test_xmlNewTextWriterMemory(); + test_ret += test_xmlNewTextWriterPushParser(); + test_ret += test_xmlNewTextWriterTree(); + test_ret += test_xmlTextWriterEndAttribute(); + test_ret += test_xmlTextWriterEndCDATA(); + test_ret += test_xmlTextWriterEndComment(); + test_ret += test_xmlTextWriterEndDTD(); + test_ret += test_xmlTextWriterEndDTDAttlist(); + test_ret += test_xmlTextWriterEndDTDElement(); + test_ret += test_xmlTextWriterEndDTDEntity(); + test_ret += test_xmlTextWriterEndDocument(); + test_ret += test_xmlTextWriterEndElement(); + test_ret += test_xmlTextWriterEndPI(); + test_ret += test_xmlTextWriterFlush(); + test_ret += test_xmlTextWriterFullEndElement(); + test_ret += test_xmlTextWriterSetIndent(); + test_ret += test_xmlTextWriterSetIndentString(); + test_ret += test_xmlTextWriterSetQuoteChar(); + test_ret += test_xmlTextWriterStartAttribute(); + test_ret += test_xmlTextWriterStartAttributeNS(); + test_ret += test_xmlTextWriterStartCDATA(); + test_ret += test_xmlTextWriterStartComment(); + test_ret += test_xmlTextWriterStartDTD(); + test_ret += test_xmlTextWriterStartDTDAttlist(); + test_ret += test_xmlTextWriterStartDTDElement(); + test_ret += test_xmlTextWriterStartDTDEntity(); + test_ret += test_xmlTextWriterStartDocument(); + test_ret += test_xmlTextWriterStartElement(); + test_ret += test_xmlTextWriterStartElementNS(); + test_ret += test_xmlTextWriterStartPI(); + test_ret += test_xmlTextWriterWriteAttribute(); + test_ret += test_xmlTextWriterWriteAttributeNS(); + test_ret += test_xmlTextWriterWriteBase64(); + test_ret += test_xmlTextWriterWriteBinHex(); + test_ret += test_xmlTextWriterWriteCDATA(); + test_ret += test_xmlTextWriterWriteComment(); + test_ret += test_xmlTextWriterWriteDTD(); + test_ret += test_xmlTextWriterWriteDTDAttlist(); + test_ret += test_xmlTextWriterWriteDTDElement(); + test_ret += test_xmlTextWriterWriteDTDEntity(); + test_ret += test_xmlTextWriterWriteDTDExternalEntity(); + test_ret += test_xmlTextWriterWriteDTDExternalEntityContents(); + test_ret += test_xmlTextWriterWriteDTDInternalEntity(); + test_ret += test_xmlTextWriterWriteDTDNotation(); + test_ret += test_xmlTextWriterWriteElement(); + test_ret += test_xmlTextWriterWriteElementNS(); + test_ret += test_xmlTextWriterWriteFormatAttribute(); + test_ret += test_xmlTextWriterWriteFormatAttributeNS(); + test_ret += test_xmlTextWriterWriteFormatCDATA(); + test_ret += test_xmlTextWriterWriteFormatComment(); + test_ret += test_xmlTextWriterWriteFormatDTD(); + test_ret += test_xmlTextWriterWriteFormatDTDAttlist(); + test_ret += test_xmlTextWriterWriteFormatDTDElement(); + test_ret += test_xmlTextWriterWriteFormatDTDInternalEntity(); + test_ret += test_xmlTextWriterWriteFormatElement(); + test_ret += test_xmlTextWriterWriteFormatElementNS(); + test_ret += test_xmlTextWriterWriteFormatPI(); + test_ret += test_xmlTextWriterWriteFormatRaw(); + test_ret += test_xmlTextWriterWriteFormatString(); + test_ret += test_xmlTextWriterWritePI(); + test_ret += test_xmlTextWriterWriteRaw(); + test_ret += test_xmlTextWriterWriteRawLen(); + test_ret += test_xmlTextWriterWriteString(); + test_ret += test_xmlTextWriterWriteVFormatAttribute(); + test_ret += test_xmlTextWriterWriteVFormatAttributeNS(); + test_ret += test_xmlTextWriterWriteVFormatCDATA(); + test_ret += test_xmlTextWriterWriteVFormatComment(); + test_ret += test_xmlTextWriterWriteVFormatDTD(); + test_ret += test_xmlTextWriterWriteVFormatDTDAttlist(); + test_ret += test_xmlTextWriterWriteVFormatDTDElement(); + test_ret += test_xmlTextWriterWriteVFormatDTDInternalEntity(); + test_ret += test_xmlTextWriterWriteVFormatElement(); + test_ret += test_xmlTextWriterWriteVFormatElementNS(); + test_ret += test_xmlTextWriterWriteVFormatPI(); + test_ret += test_xmlTextWriterWriteVFormatRaw(); + test_ret += test_xmlTextWriterWriteVFormatString(); + + if (test_ret != 0) + printf("Module xmlwriter: %d errors\n", test_ret); + return(test_ret); +} + +static int +test_xmlXPathCastBooleanToNumber(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + double ret_val; + int val; /* a boolean */ + int n_val; + + for (n_val = 0;n_val < gen_nb_int;n_val++) { + mem_base = xmlMemBlocks(); + val = gen_int(n_val, 0); + + ret_val = xmlXPathCastBooleanToNumber(val); + desret_double(ret_val); + call_tests++; + des_int(n_val, val, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathCastBooleanToNumber", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_val); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathCastBooleanToString(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlChar * ret_val; + int val; /* a boolean */ + int n_val; + + for (n_val = 0;n_val < gen_nb_int;n_val++) { + mem_base = xmlMemBlocks(); + val = gen_int(n_val, 0); + + ret_val = xmlXPathCastBooleanToString(val); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_int(n_val, val, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathCastBooleanToString", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_val); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathCastNodeSetToBoolean(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + int ret_val; + xmlNodeSetPtr ns; /* a node-set */ + int n_ns; + + for (n_ns = 0;n_ns < gen_nb_xmlNodeSetPtr;n_ns++) { + mem_base = xmlMemBlocks(); + ns = gen_xmlNodeSetPtr(n_ns, 0); + + ret_val = xmlXPathCastNodeSetToBoolean(ns); + desret_int(ret_val); + call_tests++; + des_xmlNodeSetPtr(n_ns, ns, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathCastNodeSetToBoolean", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ns); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathCastNodeSetToNumber(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + double ret_val; + xmlNodeSetPtr ns; /* a node-set */ + int n_ns; + + for (n_ns = 0;n_ns < gen_nb_xmlNodeSetPtr;n_ns++) { + mem_base = xmlMemBlocks(); + ns = gen_xmlNodeSetPtr(n_ns, 0); + + ret_val = xmlXPathCastNodeSetToNumber(ns); + desret_double(ret_val); + call_tests++; + des_xmlNodeSetPtr(n_ns, ns, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathCastNodeSetToNumber", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ns); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathCastNodeSetToString(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlChar * ret_val; + xmlNodeSetPtr ns; /* a node-set */ + int n_ns; + + for (n_ns = 0;n_ns < gen_nb_xmlNodeSetPtr;n_ns++) { + mem_base = xmlMemBlocks(); + ns = gen_xmlNodeSetPtr(n_ns, 0); + + ret_val = xmlXPathCastNodeSetToString(ns); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_xmlNodeSetPtr(n_ns, ns, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathCastNodeSetToString", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ns); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathCastNodeToNumber(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + double ret_val; + xmlNodePtr node; /* a node */ + int n_node; + + for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) { + mem_base = xmlMemBlocks(); + node = gen_xmlNodePtr(n_node, 0); + + ret_val = xmlXPathCastNodeToNumber(node); + desret_double(ret_val); + call_tests++; + des_xmlNodePtr(n_node, node, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathCastNodeToNumber", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_node); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathCastNodeToString(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlChar * ret_val; + xmlNodePtr node; /* a node */ + int n_node; + + for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) { + mem_base = xmlMemBlocks(); + node = gen_xmlNodePtr(n_node, 0); + + ret_val = xmlXPathCastNodeToString(node); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_xmlNodePtr(n_node, node, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathCastNodeToString", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_node); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathCastNumberToBoolean(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + int ret_val; + double val; /* a number */ + int n_val; + + for (n_val = 0;n_val < gen_nb_double;n_val++) { + mem_base = xmlMemBlocks(); + val = gen_double(n_val, 0); + + ret_val = xmlXPathCastNumberToBoolean(val); + desret_int(ret_val); + call_tests++; + des_double(n_val, val, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathCastNumberToBoolean", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_val); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathCastNumberToString(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlChar * ret_val; + double val; /* a number */ + int n_val; + + for (n_val = 0;n_val < gen_nb_double;n_val++) { + mem_base = xmlMemBlocks(); + val = gen_double(n_val, 0); + + ret_val = xmlXPathCastNumberToString(val); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_double(n_val, val, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathCastNumberToString", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_val); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathCastStringToBoolean(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + int ret_val; + xmlChar * val; /* a string */ + int n_val; + + for (n_val = 0;n_val < gen_nb_const_xmlChar_ptr;n_val++) { + mem_base = xmlMemBlocks(); + val = gen_const_xmlChar_ptr(n_val, 0); + + ret_val = xmlXPathCastStringToBoolean((const xmlChar *)val); + desret_int(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_val, (const xmlChar *)val, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathCastStringToBoolean", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_val); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathCastStringToNumber(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + double ret_val; + xmlChar * val; /* a string */ + int n_val; + + for (n_val = 0;n_val < gen_nb_const_xmlChar_ptr;n_val++) { + mem_base = xmlMemBlocks(); + val = gen_const_xmlChar_ptr(n_val, 0); + + ret_val = xmlXPathCastStringToNumber((const xmlChar *)val); + desret_double(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_val, (const xmlChar *)val, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathCastStringToNumber", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_val); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathCastToBoolean(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + int ret_val; + xmlXPathObjectPtr val; /* an XPath object */ + int n_val; + + for (n_val = 0;n_val < gen_nb_xmlXPathObjectPtr;n_val++) { + mem_base = xmlMemBlocks(); + val = gen_xmlXPathObjectPtr(n_val, 0); + + ret_val = xmlXPathCastToBoolean(val); + desret_int(ret_val); + call_tests++; + des_xmlXPathObjectPtr(n_val, val, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathCastToBoolean", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_val); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathCastToNumber(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + double ret_val; + xmlXPathObjectPtr val; /* an XPath object */ + int n_val; + + for (n_val = 0;n_val < gen_nb_xmlXPathObjectPtr;n_val++) { + mem_base = xmlMemBlocks(); + val = gen_xmlXPathObjectPtr(n_val, 0); + + ret_val = xmlXPathCastToNumber(val); + desret_double(ret_val); + call_tests++; + des_xmlXPathObjectPtr(n_val, val, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathCastToNumber", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_val); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathCastToString(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlChar * ret_val; + xmlXPathObjectPtr val; /* an XPath object */ + int n_val; + + for (n_val = 0;n_val < gen_nb_xmlXPathObjectPtr;n_val++) { + mem_base = xmlMemBlocks(); + val = gen_xmlXPathObjectPtr(n_val, 0); + + ret_val = xmlXPathCastToString(val); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_xmlXPathObjectPtr(n_val, val, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathCastToString", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_val); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathCmpNodes(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + int ret_val; + xmlNodePtr node1; /* the first node */ + int n_node1; + xmlNodePtr node2; /* the second node */ + int n_node2; + + for (n_node1 = 0;n_node1 < gen_nb_xmlNodePtr;n_node1++) { + for (n_node2 = 0;n_node2 < gen_nb_xmlNodePtr;n_node2++) { + mem_base = xmlMemBlocks(); + node1 = gen_xmlNodePtr(n_node1, 0); + node2 = gen_xmlNodePtr(n_node2, 1); + + ret_val = xmlXPathCmpNodes(node1, node2); + desret_int(ret_val); + call_tests++; + des_xmlNodePtr(n_node1, node1, 0); + des_xmlNodePtr(n_node2, node2, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathCmpNodes", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_node1); + printf(" %d", n_node2); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathCompile(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + +#ifdef LIBXML_XPATH_ENABLED + +#define gen_nb_xmlXPathCompExprPtr 1 +static xmlXPathCompExprPtr gen_xmlXPathCompExprPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlXPathCompExprPtr(int no ATTRIBUTE_UNUSED, xmlXPathCompExprPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} +#endif + +#ifdef LIBXML_XPATH_ENABLED + +#define gen_nb_xmlXPathContextPtr 1 +static xmlXPathContextPtr gen_xmlXPathContextPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlXPathContextPtr(int no ATTRIBUTE_UNUSED, xmlXPathContextPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} +#endif + + +static int +test_xmlXPathCompiledEval(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathObjectPtr ret_val; + xmlXPathCompExprPtr comp; /* the compiled XPath expression */ + int n_comp; + xmlXPathContextPtr ctx; /* the XPath context */ + int n_ctx; + + for (n_comp = 0;n_comp < gen_nb_xmlXPathCompExprPtr;n_comp++) { + for (n_ctx = 0;n_ctx < gen_nb_xmlXPathContextPtr;n_ctx++) { + mem_base = xmlMemBlocks(); + comp = gen_xmlXPathCompExprPtr(n_comp, 0); + ctx = gen_xmlXPathContextPtr(n_ctx, 1); + + ret_val = xmlXPathCompiledEval(comp, ctx); + desret_xmlXPathObjectPtr(ret_val); + call_tests++; + des_xmlXPathCompExprPtr(n_comp, comp, 0); + des_xmlXPathContextPtr(n_ctx, ctx, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathCompiledEval", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_comp); + printf(" %d", n_ctx); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathCompiledEvalToBoolean(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + int ret_val; + xmlXPathCompExprPtr comp; /* the compiled XPath expression */ + int n_comp; + xmlXPathContextPtr ctxt; /* the XPath context */ + int n_ctxt; + + for (n_comp = 0;n_comp < gen_nb_xmlXPathCompExprPtr;n_comp++) { + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathContextPtr;n_ctxt++) { + mem_base = xmlMemBlocks(); + comp = gen_xmlXPathCompExprPtr(n_comp, 0); + ctxt = gen_xmlXPathContextPtr(n_ctxt, 1); + + ret_val = xmlXPathCompiledEvalToBoolean(comp, ctxt); + desret_int(ret_val); + call_tests++; + des_xmlXPathCompExprPtr(n_comp, comp, 0); + des_xmlXPathContextPtr(n_ctxt, ctxt, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathCompiledEvalToBoolean", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_comp); + printf(" %d", n_ctxt); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathContextSetCache(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + int ret_val; + xmlXPathContextPtr ctxt; /* the XPath context */ + int n_ctxt; + int active; /* enables/disables (creates/frees) the cache */ + int n_active; + int value; /* a value with semantics dependant on @options */ + int n_value; + int options; /* options (currently only the value 0 is used) */ + int n_options; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathContextPtr;n_ctxt++) { + for (n_active = 0;n_active < gen_nb_int;n_active++) { + for (n_value = 0;n_value < gen_nb_int;n_value++) { + for (n_options = 0;n_options < gen_nb_int;n_options++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathContextPtr(n_ctxt, 0); + active = gen_int(n_active, 1); + value = gen_int(n_value, 2); + options = gen_int(n_options, 3); + + ret_val = xmlXPathContextSetCache(ctxt, active, value, options); + desret_int(ret_val); + call_tests++; + des_xmlXPathContextPtr(n_ctxt, ctxt, 0); + des_int(n_active, active, 1); + des_int(n_value, value, 2); + des_int(n_options, options, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathContextSetCache", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_active); + printf(" %d", n_value); + printf(" %d", n_options); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathConvertBoolean(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathObjectPtr ret_val; + xmlXPathObjectPtr val; /* an XPath object */ + int n_val; + + for (n_val = 0;n_val < gen_nb_xmlXPathObjectPtr;n_val++) { + mem_base = xmlMemBlocks(); + val = gen_xmlXPathObjectPtr(n_val, 0); + + ret_val = xmlXPathConvertBoolean(val); + val = NULL; + desret_xmlXPathObjectPtr(ret_val); + call_tests++; + des_xmlXPathObjectPtr(n_val, val, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathConvertBoolean", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_val); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathConvertNumber(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathObjectPtr ret_val; + xmlXPathObjectPtr val; /* an XPath object */ + int n_val; + + for (n_val = 0;n_val < gen_nb_xmlXPathObjectPtr;n_val++) { + mem_base = xmlMemBlocks(); + val = gen_xmlXPathObjectPtr(n_val, 0); + + ret_val = xmlXPathConvertNumber(val); + val = NULL; + desret_xmlXPathObjectPtr(ret_val); + call_tests++; + des_xmlXPathObjectPtr(n_val, val, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathConvertNumber", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_val); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathConvertString(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathObjectPtr ret_val; + xmlXPathObjectPtr val; /* an XPath object */ + int n_val; + + for (n_val = 0;n_val < gen_nb_xmlXPathObjectPtr;n_val++) { + mem_base = xmlMemBlocks(); + val = gen_xmlXPathObjectPtr(n_val, 0); + + ret_val = xmlXPathConvertString(val); + val = NULL; + desret_xmlXPathObjectPtr(ret_val); + call_tests++; + des_xmlXPathObjectPtr(n_val, val, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathConvertString", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_val); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathCtxtCompile(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlXPathEval(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathObjectPtr ret_val; + xmlChar * str; /* the XPath expression */ + int n_str; + xmlXPathContextPtr ctx; /* the XPath context */ + int n_ctx; + + for (n_str = 0;n_str < gen_nb_const_xmlChar_ptr;n_str++) { + for (n_ctx = 0;n_ctx < gen_nb_xmlXPathContextPtr;n_ctx++) { + mem_base = xmlMemBlocks(); + str = gen_const_xmlChar_ptr(n_str, 0); + ctx = gen_xmlXPathContextPtr(n_ctx, 1); + + ret_val = xmlXPathEval((const xmlChar *)str, ctx); + desret_xmlXPathObjectPtr(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_str, (const xmlChar *)str, 0); + des_xmlXPathContextPtr(n_ctx, ctx, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathEval", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_str); + printf(" %d", n_ctx); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathEvalExpression(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathObjectPtr ret_val; + xmlChar * str; /* the XPath expression */ + int n_str; + xmlXPathContextPtr ctxt; /* the XPath context */ + int n_ctxt; + + for (n_str = 0;n_str < gen_nb_const_xmlChar_ptr;n_str++) { + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathContextPtr;n_ctxt++) { + mem_base = xmlMemBlocks(); + str = gen_const_xmlChar_ptr(n_str, 0); + ctxt = gen_xmlXPathContextPtr(n_ctxt, 1); + + ret_val = xmlXPathEvalExpression((const xmlChar *)str, ctxt); + desret_xmlXPathObjectPtr(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_str, (const xmlChar *)str, 0); + des_xmlXPathContextPtr(n_ctxt, ctxt, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathEvalExpression", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_str); + printf(" %d", n_ctxt); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathEvalPredicate(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + int ret_val; + xmlXPathContextPtr ctxt; /* the XPath context */ + int n_ctxt; + xmlXPathObjectPtr res; /* the Predicate Expression evaluation result */ + int n_res; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathContextPtr;n_ctxt++) { + for (n_res = 0;n_res < gen_nb_xmlXPathObjectPtr;n_res++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathContextPtr(n_ctxt, 0); + res = gen_xmlXPathObjectPtr(n_res, 1); + + ret_val = xmlXPathEvalPredicate(ctxt, res); + desret_int(ret_val); + call_tests++; + des_xmlXPathContextPtr(n_ctxt, ctxt, 0); + des_xmlXPathObjectPtr(n_res, res, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathEvalPredicate", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_res); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathInit(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + + mem_base = xmlMemBlocks(); + + xmlXPathInit(); + call_tests++; + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathInit", + xmlMemBlocks() - mem_base); + test_ret++; + printf("\n"); + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathIsInf(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + int ret_val; + double val; /* a double value */ + int n_val; + + for (n_val = 0;n_val < gen_nb_double;n_val++) { + mem_base = xmlMemBlocks(); + val = gen_double(n_val, 0); + + ret_val = xmlXPathIsInf(val); + desret_int(ret_val); + call_tests++; + des_double(n_val, val, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathIsInf", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_val); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathIsNaN(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) + int mem_base; + int ret_val; + double val; /* a double value */ + int n_val; + + for (n_val = 0;n_val < gen_nb_double;n_val++) { + mem_base = xmlMemBlocks(); + val = gen_double(n_val, 0); + + ret_val = xmlXPathIsNaN(val); + desret_int(ret_val); + call_tests++; + des_double(n_val, val, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathIsNaN", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_val); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathNewContext(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlXPathNodeEval(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathObjectPtr ret_val; + xmlNodePtr node; /* the node to to use as the context node */ + int n_node; + xmlChar * str; /* the XPath expression */ + int n_str; + xmlXPathContextPtr ctx; /* the XPath context */ + int n_ctx; + + for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) { + for (n_str = 0;n_str < gen_nb_const_xmlChar_ptr;n_str++) { + for (n_ctx = 0;n_ctx < gen_nb_xmlXPathContextPtr;n_ctx++) { + mem_base = xmlMemBlocks(); + node = gen_xmlNodePtr(n_node, 0); + str = gen_const_xmlChar_ptr(n_str, 1); + ctx = gen_xmlXPathContextPtr(n_ctx, 2); + + ret_val = xmlXPathNodeEval(node, (const xmlChar *)str, ctx); + desret_xmlXPathObjectPtr(ret_val); + call_tests++; + des_xmlNodePtr(n_node, node, 0); + des_const_xmlChar_ptr(n_str, (const xmlChar *)str, 1); + des_xmlXPathContextPtr(n_ctx, ctx, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathNodeEval", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_node); + printf(" %d", n_str); + printf(" %d", n_ctx); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathNodeSetCreate(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlNodeSetPtr ret_val; + xmlNodePtr val; /* an initial xmlNodePtr, or NULL */ + int n_val; + + for (n_val = 0;n_val < gen_nb_xmlNodePtr;n_val++) { + mem_base = xmlMemBlocks(); + val = gen_xmlNodePtr(n_val, 0); + + ret_val = xmlXPathNodeSetCreate(val); + desret_xmlNodeSetPtr(ret_val); + call_tests++; + des_xmlNodePtr(n_val, val, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathNodeSetCreate", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_val); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathObjectCopy(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathObjectPtr ret_val; + xmlXPathObjectPtr val; /* the original object */ + int n_val; + + for (n_val = 0;n_val < gen_nb_xmlXPathObjectPtr;n_val++) { + mem_base = xmlMemBlocks(); + val = gen_xmlXPathObjectPtr(n_val, 0); + + ret_val = xmlXPathObjectCopy(val); + desret_xmlXPathObjectPtr(ret_val); + call_tests++; + des_xmlXPathObjectPtr(n_val, val, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathObjectCopy", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_val); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathOrderDocElems(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + long ret_val; + xmlDocPtr doc; /* an input document */ + int n_doc; + + for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) { + mem_base = xmlMemBlocks(); + doc = gen_xmlDocPtr(n_doc, 0); + + ret_val = xmlXPathOrderDocElems(doc); + desret_long(ret_val); + call_tests++; + des_xmlDocPtr(n_doc, doc, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathOrderDocElems", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_doc); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathSetContextNode(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + int ret_val; + xmlNodePtr node; /* the node to to use as the context node */ + int n_node; + xmlXPathContextPtr ctx; /* the XPath context */ + int n_ctx; + + for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) { + for (n_ctx = 0;n_ctx < gen_nb_xmlXPathContextPtr;n_ctx++) { + mem_base = xmlMemBlocks(); + node = gen_xmlNodePtr(n_node, 0); + ctx = gen_xmlXPathContextPtr(n_ctx, 1); + + ret_val = xmlXPathSetContextNode(node, ctx); + desret_int(ret_val); + call_tests++; + des_xmlNodePtr(n_node, node, 0); + des_xmlXPathContextPtr(n_ctx, ctx, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathSetContextNode", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_node); + printf(" %d", n_ctx); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + +static int +test_xpath(void) { + int test_ret = 0; + + if (quiet == 0) printf("Testing xpath : 32 of 40 functions ...\n"); + test_ret += test_xmlXPathCastBooleanToNumber(); + test_ret += test_xmlXPathCastBooleanToString(); + test_ret += test_xmlXPathCastNodeSetToBoolean(); + test_ret += test_xmlXPathCastNodeSetToNumber(); + test_ret += test_xmlXPathCastNodeSetToString(); + test_ret += test_xmlXPathCastNodeToNumber(); + test_ret += test_xmlXPathCastNodeToString(); + test_ret += test_xmlXPathCastNumberToBoolean(); + test_ret += test_xmlXPathCastNumberToString(); + test_ret += test_xmlXPathCastStringToBoolean(); + test_ret += test_xmlXPathCastStringToNumber(); + test_ret += test_xmlXPathCastToBoolean(); + test_ret += test_xmlXPathCastToNumber(); + test_ret += test_xmlXPathCastToString(); + test_ret += test_xmlXPathCmpNodes(); + test_ret += test_xmlXPathCompile(); + test_ret += test_xmlXPathCompiledEval(); + test_ret += test_xmlXPathCompiledEvalToBoolean(); + test_ret += test_xmlXPathContextSetCache(); + test_ret += test_xmlXPathConvertBoolean(); + test_ret += test_xmlXPathConvertNumber(); + test_ret += test_xmlXPathConvertString(); + test_ret += test_xmlXPathCtxtCompile(); + test_ret += test_xmlXPathEval(); + test_ret += test_xmlXPathEvalExpression(); + test_ret += test_xmlXPathEvalPredicate(); + test_ret += test_xmlXPathInit(); + test_ret += test_xmlXPathIsInf(); + test_ret += test_xmlXPathIsNaN(); + test_ret += test_xmlXPathNewContext(); + test_ret += test_xmlXPathNodeEval(); + test_ret += test_xmlXPathNodeSetCreate(); + test_ret += test_xmlXPathObjectCopy(); + test_ret += test_xmlXPathOrderDocElems(); + test_ret += test_xmlXPathSetContextNode(); + + if (test_ret != 0) + printf("Module xpath: %d errors\n", test_ret); + return(test_ret); +} +#ifdef LIBXML_XPATH_ENABLED + +#define gen_nb_xmlXPathParserContextPtr 1 +static xmlXPathParserContextPtr gen_xmlXPathParserContextPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlXPathParserContextPtr(int no ATTRIBUTE_UNUSED, xmlXPathParserContextPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} +#endif + + +static int +test_valuePop(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathObjectPtr ret_val; + xmlXPathParserContextPtr ctxt; /* an XPath evaluation context */ + int n_ctxt; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + + ret_val = valuePop(ctxt); + desret_xmlXPathObjectPtr(ret_val); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in valuePop", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_valuePush(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + int ret_val; + xmlXPathParserContextPtr ctxt; /* an XPath evaluation context */ + int n_ctxt; + xmlXPathObjectPtr value; /* the XPath object */ + int n_value; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + for (n_value = 0;n_value < gen_nb_xmlXPathObjectPtr;n_value++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + value = gen_xmlXPathObjectPtr(n_value, 1); + + ret_val = valuePush(ctxt, value); + desret_int(ret_val); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + des_xmlXPathObjectPtr(n_value, value, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in valuePush", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_value); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathAddValues(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathParserContextPtr ctxt; /* the XPath Parser context */ + int n_ctxt; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + + xmlXPathAddValues(ctxt); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathAddValues", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathBooleanFunction(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathParserContextPtr ctxt; /* the XPath Parser context */ + int n_ctxt; + int nargs; /* the number of arguments */ + int n_nargs; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + for (n_nargs = 0;n_nargs < gen_nb_int;n_nargs++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + nargs = gen_int(n_nargs, 1); + + xmlXPathBooleanFunction(ctxt, nargs); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + des_int(n_nargs, nargs, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathBooleanFunction", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_nargs); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathCeilingFunction(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathParserContextPtr ctxt; /* the XPath Parser context */ + int n_ctxt; + int nargs; /* the number of arguments */ + int n_nargs; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + for (n_nargs = 0;n_nargs < gen_nb_int;n_nargs++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + nargs = gen_int(n_nargs, 1); + + xmlXPathCeilingFunction(ctxt, nargs); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + des_int(n_nargs, nargs, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathCeilingFunction", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_nargs); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathCompareValues(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + int ret_val; + xmlXPathParserContextPtr ctxt; /* the XPath Parser context */ + int n_ctxt; + int inf; /* less than (1) or greater than (0) */ + int n_inf; + int strict; /* is the comparison strict */ + int n_strict; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + for (n_inf = 0;n_inf < gen_nb_int;n_inf++) { + for (n_strict = 0;n_strict < gen_nb_int;n_strict++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + inf = gen_int(n_inf, 1); + strict = gen_int(n_strict, 2); + + ret_val = xmlXPathCompareValues(ctxt, inf, strict); + desret_int(ret_val); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + des_int(n_inf, inf, 1); + des_int(n_strict, strict, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathCompareValues", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_inf); + printf(" %d", n_strict); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathConcatFunction(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathParserContextPtr ctxt; /* the XPath Parser context */ + int n_ctxt; + int nargs; /* the number of arguments */ + int n_nargs; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + for (n_nargs = 0;n_nargs < gen_nb_int;n_nargs++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + nargs = gen_int(n_nargs, 1); + + xmlXPathConcatFunction(ctxt, nargs); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + des_int(n_nargs, nargs, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathConcatFunction", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_nargs); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathContainsFunction(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathParserContextPtr ctxt; /* the XPath Parser context */ + int n_ctxt; + int nargs; /* the number of arguments */ + int n_nargs; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + for (n_nargs = 0;n_nargs < gen_nb_int;n_nargs++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + nargs = gen_int(n_nargs, 1); + + xmlXPathContainsFunction(ctxt, nargs); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + des_int(n_nargs, nargs, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathContainsFunction", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_nargs); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathCountFunction(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathParserContextPtr ctxt; /* the XPath Parser context */ + int n_ctxt; + int nargs; /* the number of arguments */ + int n_nargs; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + for (n_nargs = 0;n_nargs < gen_nb_int;n_nargs++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + nargs = gen_int(n_nargs, 1); + + xmlXPathCountFunction(ctxt, nargs); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + des_int(n_nargs, nargs, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathCountFunction", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_nargs); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathDebugDumpCompExpr(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) && defined(LIBXML_DEBUG_ENABLED) + int mem_base; + FILE * output; /* the FILE * for the output */ + int n_output; + xmlXPathCompExprPtr comp; /* the precompiled XPath expression */ + int n_comp; + int depth; /* the indentation level. */ + int n_depth; + + for (n_output = 0;n_output < gen_nb_FILE_ptr;n_output++) { + for (n_comp = 0;n_comp < gen_nb_xmlXPathCompExprPtr;n_comp++) { + for (n_depth = 0;n_depth < gen_nb_int;n_depth++) { + mem_base = xmlMemBlocks(); + output = gen_FILE_ptr(n_output, 0); + comp = gen_xmlXPathCompExprPtr(n_comp, 1); + depth = gen_int(n_depth, 2); + + xmlXPathDebugDumpCompExpr(output, comp, depth); + call_tests++; + des_FILE_ptr(n_output, output, 0); + des_xmlXPathCompExprPtr(n_comp, comp, 1); + des_int(n_depth, depth, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathDebugDumpCompExpr", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_output); + printf(" %d", n_comp); + printf(" %d", n_depth); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathDebugDumpObject(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) && defined(LIBXML_DEBUG_ENABLED) + int mem_base; + FILE * output; /* the FILE * to dump the output */ + int n_output; + xmlXPathObjectPtr cur; /* the object to inspect */ + int n_cur; + int depth; /* indentation level */ + int n_depth; + + for (n_output = 0;n_output < gen_nb_FILE_ptr;n_output++) { + for (n_cur = 0;n_cur < gen_nb_xmlXPathObjectPtr;n_cur++) { + for (n_depth = 0;n_depth < gen_nb_int;n_depth++) { + mem_base = xmlMemBlocks(); + output = gen_FILE_ptr(n_output, 0); + cur = gen_xmlXPathObjectPtr(n_cur, 1); + depth = gen_int(n_depth, 2); + + xmlXPathDebugDumpObject(output, cur, depth); + call_tests++; + des_FILE_ptr(n_output, output, 0); + des_xmlXPathObjectPtr(n_cur, cur, 1); + des_int(n_depth, depth, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathDebugDumpObject", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_output); + printf(" %d", n_cur); + printf(" %d", n_depth); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathDifference(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlNodeSetPtr ret_val; + xmlNodeSetPtr nodes1; /* a node-set */ + int n_nodes1; + xmlNodeSetPtr nodes2; /* a node-set */ + int n_nodes2; + + for (n_nodes1 = 0;n_nodes1 < gen_nb_xmlNodeSetPtr;n_nodes1++) { + for (n_nodes2 = 0;n_nodes2 < gen_nb_xmlNodeSetPtr;n_nodes2++) { + mem_base = xmlMemBlocks(); + nodes1 = gen_xmlNodeSetPtr(n_nodes1, 0); + nodes2 = gen_xmlNodeSetPtr(n_nodes2, 1); + + ret_val = xmlXPathDifference(nodes1, nodes2); + desret_xmlNodeSetPtr(ret_val); + call_tests++; + des_xmlNodeSetPtr(n_nodes1, nodes1, 0); + des_xmlNodeSetPtr(n_nodes2, nodes2, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathDifference", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_nodes1); + printf(" %d", n_nodes2); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathDistinct(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlNodeSetPtr ret_val; + xmlNodeSetPtr nodes; /* a node-set */ + int n_nodes; + + for (n_nodes = 0;n_nodes < gen_nb_xmlNodeSetPtr;n_nodes++) { + mem_base = xmlMemBlocks(); + nodes = gen_xmlNodeSetPtr(n_nodes, 0); + + ret_val = xmlXPathDistinct(nodes); + desret_xmlNodeSetPtr(ret_val); + call_tests++; + des_xmlNodeSetPtr(n_nodes, nodes, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathDistinct", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_nodes); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathDistinctSorted(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlNodeSetPtr ret_val; + xmlNodeSetPtr nodes; /* a node-set, sorted by document order */ + int n_nodes; + + for (n_nodes = 0;n_nodes < gen_nb_xmlNodeSetPtr;n_nodes++) { + mem_base = xmlMemBlocks(); + nodes = gen_xmlNodeSetPtr(n_nodes, 0); + + ret_val = xmlXPathDistinctSorted(nodes); + desret_xmlNodeSetPtr(ret_val); + call_tests++; + des_xmlNodeSetPtr(n_nodes, nodes, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathDistinctSorted", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_nodes); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathDivValues(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathParserContextPtr ctxt; /* the XPath Parser context */ + int n_ctxt; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + + xmlXPathDivValues(ctxt); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathDivValues", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathEqualValues(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + int ret_val; + xmlXPathParserContextPtr ctxt; /* the XPath Parser context */ + int n_ctxt; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + + ret_val = xmlXPathEqualValues(ctxt); + desret_int(ret_val); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathEqualValues", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathErr(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathParserContextPtr ctxt; /* a XPath parser context */ + int n_ctxt; + int error; /* the error code */ + int n_error; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + for (n_error = 0;n_error < gen_nb_int;n_error++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + error = gen_int(n_error, 1); + + xmlXPathErr(ctxt, error); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + des_int(n_error, error, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathErr", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_error); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathEvalExpr(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathParserContextPtr ctxt; /* the XPath Parser context */ + int n_ctxt; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + + xmlXPathEvalExpr(ctxt); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathEvalExpr", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathEvaluatePredicateResult(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + int ret_val; + xmlXPathParserContextPtr ctxt; /* the XPath Parser context */ + int n_ctxt; + xmlXPathObjectPtr res; /* the Predicate Expression evaluation result */ + int n_res; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + for (n_res = 0;n_res < gen_nb_xmlXPathObjectPtr;n_res++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + res = gen_xmlXPathObjectPtr(n_res, 1); + + ret_val = xmlXPathEvaluatePredicateResult(ctxt, res); + desret_int(ret_val); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + des_xmlXPathObjectPtr(n_res, res, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathEvaluatePredicateResult", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_res); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathFalseFunction(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathParserContextPtr ctxt; /* the XPath Parser context */ + int n_ctxt; + int nargs; /* the number of arguments */ + int n_nargs; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + for (n_nargs = 0;n_nargs < gen_nb_int;n_nargs++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + nargs = gen_int(n_nargs, 1); + + xmlXPathFalseFunction(ctxt, nargs); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + des_int(n_nargs, nargs, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathFalseFunction", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_nargs); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathFloorFunction(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathParserContextPtr ctxt; /* the XPath Parser context */ + int n_ctxt; + int nargs; /* the number of arguments */ + int n_nargs; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + for (n_nargs = 0;n_nargs < gen_nb_int;n_nargs++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + nargs = gen_int(n_nargs, 1); + + xmlXPathFloorFunction(ctxt, nargs); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + des_int(n_nargs, nargs, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathFloorFunction", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_nargs); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathFunctionLookup(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlXPathFunctionLookupNS(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlXPathHasSameNodes(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + int ret_val; + xmlNodeSetPtr nodes1; /* a node-set */ + int n_nodes1; + xmlNodeSetPtr nodes2; /* a node-set */ + int n_nodes2; + + for (n_nodes1 = 0;n_nodes1 < gen_nb_xmlNodeSetPtr;n_nodes1++) { + for (n_nodes2 = 0;n_nodes2 < gen_nb_xmlNodeSetPtr;n_nodes2++) { + mem_base = xmlMemBlocks(); + nodes1 = gen_xmlNodeSetPtr(n_nodes1, 0); + nodes2 = gen_xmlNodeSetPtr(n_nodes2, 1); + + ret_val = xmlXPathHasSameNodes(nodes1, nodes2); + desret_int(ret_val); + call_tests++; + des_xmlNodeSetPtr(n_nodes1, nodes1, 0); + des_xmlNodeSetPtr(n_nodes2, nodes2, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathHasSameNodes", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_nodes1); + printf(" %d", n_nodes2); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathIdFunction(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathParserContextPtr ctxt; /* the XPath Parser context */ + int n_ctxt; + int nargs; /* the number of arguments */ + int n_nargs; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + for (n_nargs = 0;n_nargs < gen_nb_int;n_nargs++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + nargs = gen_int(n_nargs, 1); + + xmlXPathIdFunction(ctxt, nargs); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + des_int(n_nargs, nargs, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathIdFunction", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_nargs); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathIntersection(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlNodeSetPtr ret_val; + xmlNodeSetPtr nodes1; /* a node-set */ + int n_nodes1; + xmlNodeSetPtr nodes2; /* a node-set */ + int n_nodes2; + + for (n_nodes1 = 0;n_nodes1 < gen_nb_xmlNodeSetPtr;n_nodes1++) { + for (n_nodes2 = 0;n_nodes2 < gen_nb_xmlNodeSetPtr;n_nodes2++) { + mem_base = xmlMemBlocks(); + nodes1 = gen_xmlNodeSetPtr(n_nodes1, 0); + nodes2 = gen_xmlNodeSetPtr(n_nodes2, 1); + + ret_val = xmlXPathIntersection(nodes1, nodes2); + desret_xmlNodeSetPtr(ret_val); + call_tests++; + des_xmlNodeSetPtr(n_nodes1, nodes1, 0); + des_xmlNodeSetPtr(n_nodes2, nodes2, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathIntersection", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_nodes1); + printf(" %d", n_nodes2); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathIsNodeType(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + int ret_val; + xmlChar * name; /* a name string */ + int n_name; + + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + mem_base = xmlMemBlocks(); + name = gen_const_xmlChar_ptr(n_name, 0); + + ret_val = xmlXPathIsNodeType((const xmlChar *)name); + desret_int(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathIsNodeType", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_name); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathLangFunction(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathParserContextPtr ctxt; /* the XPath Parser context */ + int n_ctxt; + int nargs; /* the number of arguments */ + int n_nargs; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + for (n_nargs = 0;n_nargs < gen_nb_int;n_nargs++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + nargs = gen_int(n_nargs, 1); + + xmlXPathLangFunction(ctxt, nargs); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + des_int(n_nargs, nargs, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathLangFunction", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_nargs); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathLastFunction(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathParserContextPtr ctxt; /* the XPath Parser context */ + int n_ctxt; + int nargs; /* the number of arguments */ + int n_nargs; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + for (n_nargs = 0;n_nargs < gen_nb_int;n_nargs++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + nargs = gen_int(n_nargs, 1); + + xmlXPathLastFunction(ctxt, nargs); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + des_int(n_nargs, nargs, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathLastFunction", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_nargs); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathLeading(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlNodeSetPtr ret_val; + xmlNodeSetPtr nodes1; /* a node-set */ + int n_nodes1; + xmlNodeSetPtr nodes2; /* a node-set */ + int n_nodes2; + + for (n_nodes1 = 0;n_nodes1 < gen_nb_xmlNodeSetPtr;n_nodes1++) { + for (n_nodes2 = 0;n_nodes2 < gen_nb_xmlNodeSetPtr;n_nodes2++) { + mem_base = xmlMemBlocks(); + nodes1 = gen_xmlNodeSetPtr(n_nodes1, 0); + nodes2 = gen_xmlNodeSetPtr(n_nodes2, 1); + + ret_val = xmlXPathLeading(nodes1, nodes2); + desret_xmlNodeSetPtr(ret_val); + call_tests++; + des_xmlNodeSetPtr(n_nodes1, nodes1, 0); + des_xmlNodeSetPtr(n_nodes2, nodes2, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathLeading", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_nodes1); + printf(" %d", n_nodes2); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathLeadingSorted(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlNodeSetPtr ret_val; + xmlNodeSetPtr nodes1; /* a node-set, sorted by document order */ + int n_nodes1; + xmlNodeSetPtr nodes2; /* a node-set, sorted by document order */ + int n_nodes2; + + for (n_nodes1 = 0;n_nodes1 < gen_nb_xmlNodeSetPtr;n_nodes1++) { + for (n_nodes2 = 0;n_nodes2 < gen_nb_xmlNodeSetPtr;n_nodes2++) { + mem_base = xmlMemBlocks(); + nodes1 = gen_xmlNodeSetPtr(n_nodes1, 0); + nodes2 = gen_xmlNodeSetPtr(n_nodes2, 1); + + ret_val = xmlXPathLeadingSorted(nodes1, nodes2); + desret_xmlNodeSetPtr(ret_val); + call_tests++; + des_xmlNodeSetPtr(n_nodes1, nodes1, 0); + des_xmlNodeSetPtr(n_nodes2, nodes2, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathLeadingSorted", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_nodes1); + printf(" %d", n_nodes2); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathLocalNameFunction(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathParserContextPtr ctxt; /* the XPath Parser context */ + int n_ctxt; + int nargs; /* the number of arguments */ + int n_nargs; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + for (n_nargs = 0;n_nargs < gen_nb_int;n_nargs++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + nargs = gen_int(n_nargs, 1); + + xmlXPathLocalNameFunction(ctxt, nargs); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + des_int(n_nargs, nargs, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathLocalNameFunction", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_nargs); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathModValues(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathParserContextPtr ctxt; /* the XPath Parser context */ + int n_ctxt; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + + xmlXPathModValues(ctxt); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathModValues", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathMultValues(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathParserContextPtr ctxt; /* the XPath Parser context */ + int n_ctxt; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + + xmlXPathMultValues(ctxt); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathMultValues", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathNamespaceURIFunction(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathParserContextPtr ctxt; /* the XPath Parser context */ + int n_ctxt; + int nargs; /* the number of arguments */ + int n_nargs; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + for (n_nargs = 0;n_nargs < gen_nb_int;n_nargs++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + nargs = gen_int(n_nargs, 1); + + xmlXPathNamespaceURIFunction(ctxt, nargs); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + des_int(n_nargs, nargs, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathNamespaceURIFunction", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_nargs); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathNewBoolean(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathObjectPtr ret_val; + int val; /* the boolean value */ + int n_val; + + for (n_val = 0;n_val < gen_nb_int;n_val++) { + mem_base = xmlMemBlocks(); + val = gen_int(n_val, 0); + + ret_val = xmlXPathNewBoolean(val); + desret_xmlXPathObjectPtr(ret_val); + call_tests++; + des_int(n_val, val, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathNewBoolean", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_val); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathNewCString(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathObjectPtr ret_val; + char * val; /* the char * value */ + int n_val; + + for (n_val = 0;n_val < gen_nb_const_char_ptr;n_val++) { + mem_base = xmlMemBlocks(); + val = gen_const_char_ptr(n_val, 0); + + ret_val = xmlXPathNewCString((const char *)val); + desret_xmlXPathObjectPtr(ret_val); + call_tests++; + des_const_char_ptr(n_val, (const char *)val, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathNewCString", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_val); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathNewFloat(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathObjectPtr ret_val; + double val; /* the double value */ + int n_val; + + for (n_val = 0;n_val < gen_nb_double;n_val++) { + mem_base = xmlMemBlocks(); + val = gen_double(n_val, 0); + + ret_val = xmlXPathNewFloat(val); + desret_xmlXPathObjectPtr(ret_val); + call_tests++; + des_double(n_val, val, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathNewFloat", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_val); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathNewNodeSet(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathObjectPtr ret_val; + xmlNodePtr val; /* the NodePtr value */ + int n_val; + + for (n_val = 0;n_val < gen_nb_xmlNodePtr;n_val++) { + mem_base = xmlMemBlocks(); + val = gen_xmlNodePtr(n_val, 0); + + ret_val = xmlXPathNewNodeSet(val); + desret_xmlXPathObjectPtr(ret_val); + call_tests++; + des_xmlNodePtr(n_val, val, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathNewNodeSet", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_val); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathNewNodeSetList(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathObjectPtr ret_val; + xmlNodeSetPtr val; /* an existing NodeSet */ + int n_val; + + for (n_val = 0;n_val < gen_nb_xmlNodeSetPtr;n_val++) { + mem_base = xmlMemBlocks(); + val = gen_xmlNodeSetPtr(n_val, 0); + + ret_val = xmlXPathNewNodeSetList(val); + desret_xmlXPathObjectPtr(ret_val); + call_tests++; + des_xmlNodeSetPtr(n_val, val, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathNewNodeSetList", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_val); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathNewParserContext(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlXPathNewString(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathObjectPtr ret_val; + xmlChar * val; /* the xmlChar * value */ + int n_val; + + for (n_val = 0;n_val < gen_nb_const_xmlChar_ptr;n_val++) { + mem_base = xmlMemBlocks(); + val = gen_const_xmlChar_ptr(n_val, 0); + + ret_val = xmlXPathNewString((const xmlChar *)val); + desret_xmlXPathObjectPtr(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_val, (const xmlChar *)val, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathNewString", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_val); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathNextAncestor(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlNodePtr ret_val; + xmlXPathParserContextPtr ctxt; /* the XPath Parser context */ + int n_ctxt; + xmlNodePtr cur; /* the current node in the traversal */ + int n_cur; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + cur = gen_xmlNodePtr(n_cur, 1); + + ret_val = xmlXPathNextAncestor(ctxt, cur); + desret_xmlNodePtr(ret_val); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + des_xmlNodePtr(n_cur, cur, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathNextAncestor", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_cur); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathNextAncestorOrSelf(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlNodePtr ret_val; + xmlXPathParserContextPtr ctxt; /* the XPath Parser context */ + int n_ctxt; + xmlNodePtr cur; /* the current node in the traversal */ + int n_cur; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + cur = gen_xmlNodePtr(n_cur, 1); + + ret_val = xmlXPathNextAncestorOrSelf(ctxt, cur); + desret_xmlNodePtr(ret_val); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + des_xmlNodePtr(n_cur, cur, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathNextAncestorOrSelf", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_cur); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathNextAttribute(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlNodePtr ret_val; + xmlXPathParserContextPtr ctxt; /* the XPath Parser context */ + int n_ctxt; + xmlNodePtr cur; /* the current attribute in the traversal */ + int n_cur; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + cur = gen_xmlNodePtr(n_cur, 1); + + ret_val = xmlXPathNextAttribute(ctxt, cur); + desret_xmlNodePtr(ret_val); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + des_xmlNodePtr(n_cur, cur, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathNextAttribute", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_cur); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathNextChild(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlNodePtr ret_val; + xmlXPathParserContextPtr ctxt; /* the XPath Parser context */ + int n_ctxt; + xmlNodePtr cur; /* the current node in the traversal */ + int n_cur; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + cur = gen_xmlNodePtr(n_cur, 1); + + ret_val = xmlXPathNextChild(ctxt, cur); + desret_xmlNodePtr(ret_val); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + des_xmlNodePtr(n_cur, cur, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathNextChild", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_cur); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathNextDescendant(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlNodePtr ret_val; + xmlXPathParserContextPtr ctxt; /* the XPath Parser context */ + int n_ctxt; + xmlNodePtr cur; /* the current node in the traversal */ + int n_cur; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + cur = gen_xmlNodePtr(n_cur, 1); + + ret_val = xmlXPathNextDescendant(ctxt, cur); + desret_xmlNodePtr(ret_val); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + des_xmlNodePtr(n_cur, cur, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathNextDescendant", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_cur); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathNextDescendantOrSelf(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlNodePtr ret_val; + xmlXPathParserContextPtr ctxt; /* the XPath Parser context */ + int n_ctxt; + xmlNodePtr cur; /* the current node in the traversal */ + int n_cur; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + cur = gen_xmlNodePtr(n_cur, 1); + + ret_val = xmlXPathNextDescendantOrSelf(ctxt, cur); + desret_xmlNodePtr(ret_val); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + des_xmlNodePtr(n_cur, cur, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathNextDescendantOrSelf", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_cur); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathNextFollowing(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlNodePtr ret_val; + xmlXPathParserContextPtr ctxt; /* the XPath Parser context */ + int n_ctxt; + xmlNodePtr cur; /* the current node in the traversal */ + int n_cur; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + cur = gen_xmlNodePtr(n_cur, 1); + + ret_val = xmlXPathNextFollowing(ctxt, cur); + desret_xmlNodePtr(ret_val); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + des_xmlNodePtr(n_cur, cur, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathNextFollowing", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_cur); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathNextFollowingSibling(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlNodePtr ret_val; + xmlXPathParserContextPtr ctxt; /* the XPath Parser context */ + int n_ctxt; + xmlNodePtr cur; /* the current node in the traversal */ + int n_cur; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + cur = gen_xmlNodePtr(n_cur, 1); + + ret_val = xmlXPathNextFollowingSibling(ctxt, cur); + desret_xmlNodePtr(ret_val); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + des_xmlNodePtr(n_cur, cur, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathNextFollowingSibling", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_cur); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathNextNamespace(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlNodePtr ret_val; + xmlXPathParserContextPtr ctxt; /* the XPath Parser context */ + int n_ctxt; + xmlNodePtr cur; /* the current attribute in the traversal */ + int n_cur; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + cur = gen_xmlNodePtr(n_cur, 1); + + ret_val = xmlXPathNextNamespace(ctxt, cur); + desret_xmlNodePtr(ret_val); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + des_xmlNodePtr(n_cur, cur, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathNextNamespace", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_cur); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathNextParent(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlNodePtr ret_val; + xmlXPathParserContextPtr ctxt; /* the XPath Parser context */ + int n_ctxt; + xmlNodePtr cur; /* the current node in the traversal */ + int n_cur; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + cur = gen_xmlNodePtr(n_cur, 1); + + ret_val = xmlXPathNextParent(ctxt, cur); + desret_xmlNodePtr(ret_val); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + des_xmlNodePtr(n_cur, cur, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathNextParent", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_cur); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathNextPreceding(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlNodePtr ret_val; + xmlXPathParserContextPtr ctxt; /* the XPath Parser context */ + int n_ctxt; + xmlNodePtr cur; /* the current node in the traversal */ + int n_cur; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + cur = gen_xmlNodePtr(n_cur, 1); + + ret_val = xmlXPathNextPreceding(ctxt, cur); + desret_xmlNodePtr(ret_val); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + des_xmlNodePtr(n_cur, cur, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathNextPreceding", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_cur); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathNextPrecedingSibling(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlNodePtr ret_val; + xmlXPathParserContextPtr ctxt; /* the XPath Parser context */ + int n_ctxt; + xmlNodePtr cur; /* the current node in the traversal */ + int n_cur; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + cur = gen_xmlNodePtr(n_cur, 1); + + ret_val = xmlXPathNextPrecedingSibling(ctxt, cur); + desret_xmlNodePtr(ret_val); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + des_xmlNodePtr(n_cur, cur, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathNextPrecedingSibling", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_cur); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathNextSelf(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlNodePtr ret_val; + xmlXPathParserContextPtr ctxt; /* the XPath Parser context */ + int n_ctxt; + xmlNodePtr cur; /* the current node in the traversal */ + int n_cur; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + cur = gen_xmlNodePtr(n_cur, 1); + + ret_val = xmlXPathNextSelf(ctxt, cur); + desret_xmlNodePtr(ret_val); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + des_xmlNodePtr(n_cur, cur, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathNextSelf", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_cur); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathNodeLeading(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlNodeSetPtr ret_val; + xmlNodeSetPtr nodes; /* a node-set */ + int n_nodes; + xmlNodePtr node; /* a node */ + int n_node; + + for (n_nodes = 0;n_nodes < gen_nb_xmlNodeSetPtr;n_nodes++) { + for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) { + mem_base = xmlMemBlocks(); + nodes = gen_xmlNodeSetPtr(n_nodes, 0); + node = gen_xmlNodePtr(n_node, 1); + + ret_val = xmlXPathNodeLeading(nodes, node); + desret_xmlNodeSetPtr(ret_val); + call_tests++; + des_xmlNodeSetPtr(n_nodes, nodes, 0); + des_xmlNodePtr(n_node, node, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathNodeLeading", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_nodes); + printf(" %d", n_node); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathNodeLeadingSorted(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlNodeSetPtr ret_val; + xmlNodeSetPtr nodes; /* a node-set, sorted by document order */ + int n_nodes; + xmlNodePtr node; /* a node */ + int n_node; + + for (n_nodes = 0;n_nodes < gen_nb_xmlNodeSetPtr;n_nodes++) { + for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) { + mem_base = xmlMemBlocks(); + nodes = gen_xmlNodeSetPtr(n_nodes, 0); + node = gen_xmlNodePtr(n_node, 1); + + ret_val = xmlXPathNodeLeadingSorted(nodes, node); + desret_xmlNodeSetPtr(ret_val); + call_tests++; + des_xmlNodeSetPtr(n_nodes, nodes, 0); + des_xmlNodePtr(n_node, node, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathNodeLeadingSorted", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_nodes); + printf(" %d", n_node); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathNodeSetAdd(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + int ret_val; + xmlNodeSetPtr cur; /* the initial node set */ + int n_cur; + xmlNodePtr val; /* a new xmlNodePtr */ + int n_val; + + for (n_cur = 0;n_cur < gen_nb_xmlNodeSetPtr;n_cur++) { + for (n_val = 0;n_val < gen_nb_xmlNodePtr;n_val++) { + mem_base = xmlMemBlocks(); + cur = gen_xmlNodeSetPtr(n_cur, 0); + val = gen_xmlNodePtr(n_val, 1); + + ret_val = xmlXPathNodeSetAdd(cur, val); + desret_int(ret_val); + call_tests++; + des_xmlNodeSetPtr(n_cur, cur, 0); + des_xmlNodePtr(n_val, val, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathNodeSetAdd", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_cur); + printf(" %d", n_val); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathNodeSetAddNs(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + int ret_val; + xmlNodeSetPtr cur; /* the initial node set */ + int n_cur; + xmlNodePtr node; /* the hosting node */ + int n_node; + xmlNsPtr ns; /* a the namespace node */ + int n_ns; + + for (n_cur = 0;n_cur < gen_nb_xmlNodeSetPtr;n_cur++) { + for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) { + for (n_ns = 0;n_ns < gen_nb_xmlNsPtr;n_ns++) { + mem_base = xmlMemBlocks(); + cur = gen_xmlNodeSetPtr(n_cur, 0); + node = gen_xmlNodePtr(n_node, 1); + ns = gen_xmlNsPtr(n_ns, 2); + + ret_val = xmlXPathNodeSetAddNs(cur, node, ns); + desret_int(ret_val); + call_tests++; + des_xmlNodeSetPtr(n_cur, cur, 0); + des_xmlNodePtr(n_node, node, 1); + des_xmlNsPtr(n_ns, ns, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathNodeSetAddNs", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_cur); + printf(" %d", n_node); + printf(" %d", n_ns); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathNodeSetAddUnique(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + int ret_val; + xmlNodeSetPtr cur; /* the initial node set */ + int n_cur; + xmlNodePtr val; /* a new xmlNodePtr */ + int n_val; + + for (n_cur = 0;n_cur < gen_nb_xmlNodeSetPtr;n_cur++) { + for (n_val = 0;n_val < gen_nb_xmlNodePtr;n_val++) { + mem_base = xmlMemBlocks(); + cur = gen_xmlNodeSetPtr(n_cur, 0); + val = gen_xmlNodePtr(n_val, 1); + + ret_val = xmlXPathNodeSetAddUnique(cur, val); + desret_int(ret_val); + call_tests++; + des_xmlNodeSetPtr(n_cur, cur, 0); + des_xmlNodePtr(n_val, val, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathNodeSetAddUnique", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_cur); + printf(" %d", n_val); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathNodeSetContains(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + int ret_val; + xmlNodeSetPtr cur; /* the node-set */ + int n_cur; + xmlNodePtr val; /* the node */ + int n_val; + + for (n_cur = 0;n_cur < gen_nb_xmlNodeSetPtr;n_cur++) { + for (n_val = 0;n_val < gen_nb_xmlNodePtr;n_val++) { + mem_base = xmlMemBlocks(); + cur = gen_xmlNodeSetPtr(n_cur, 0); + val = gen_xmlNodePtr(n_val, 1); + + ret_val = xmlXPathNodeSetContains(cur, val); + desret_int(ret_val); + call_tests++; + des_xmlNodeSetPtr(n_cur, cur, 0); + des_xmlNodePtr(n_val, val, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathNodeSetContains", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_cur); + printf(" %d", n_val); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathNodeSetDel(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlNodeSetPtr cur; /* the initial node set */ + int n_cur; + xmlNodePtr val; /* an xmlNodePtr */ + int n_val; + + for (n_cur = 0;n_cur < gen_nb_xmlNodeSetPtr;n_cur++) { + for (n_val = 0;n_val < gen_nb_xmlNodePtr;n_val++) { + mem_base = xmlMemBlocks(); + cur = gen_xmlNodeSetPtr(n_cur, 0); + val = gen_xmlNodePtr(n_val, 1); + + xmlXPathNodeSetDel(cur, val); + call_tests++; + des_xmlNodeSetPtr(n_cur, cur, 0); + des_xmlNodePtr(n_val, val, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathNodeSetDel", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_cur); + printf(" %d", n_val); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathNodeSetMerge(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlNodeSetPtr ret_val; + xmlNodeSetPtr val1; /* the first NodeSet or NULL */ + int n_val1; + xmlNodeSetPtr val2; /* the second NodeSet */ + int n_val2; + + for (n_val1 = 0;n_val1 < gen_nb_xmlNodeSetPtr;n_val1++) { + for (n_val2 = 0;n_val2 < gen_nb_xmlNodeSetPtr;n_val2++) { + mem_base = xmlMemBlocks(); + val1 = gen_xmlNodeSetPtr(n_val1, 0); + val2 = gen_xmlNodeSetPtr(n_val2, 1); + + ret_val = xmlXPathNodeSetMerge(val1, val2); + desret_xmlNodeSetPtr(ret_val); + call_tests++; + des_xmlNodeSetPtr(n_val1, val1, 0); + des_xmlNodeSetPtr(n_val2, val2, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathNodeSetMerge", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_val1); + printf(" %d", n_val2); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathNodeSetRemove(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlNodeSetPtr cur; /* the initial node set */ + int n_cur; + int val; /* the index to remove */ + int n_val; + + for (n_cur = 0;n_cur < gen_nb_xmlNodeSetPtr;n_cur++) { + for (n_val = 0;n_val < gen_nb_int;n_val++) { + mem_base = xmlMemBlocks(); + cur = gen_xmlNodeSetPtr(n_cur, 0); + val = gen_int(n_val, 1); + + xmlXPathNodeSetRemove(cur, val); + call_tests++; + des_xmlNodeSetPtr(n_cur, cur, 0); + des_int(n_val, val, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathNodeSetRemove", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_cur); + printf(" %d", n_val); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathNodeSetSort(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlNodeSetPtr set; /* the node set */ + int n_set; + + for (n_set = 0;n_set < gen_nb_xmlNodeSetPtr;n_set++) { + mem_base = xmlMemBlocks(); + set = gen_xmlNodeSetPtr(n_set, 0); + + xmlXPathNodeSetSort(set); + call_tests++; + des_xmlNodeSetPtr(n_set, set, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathNodeSetSort", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_set); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathNodeTrailing(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlNodeSetPtr ret_val; + xmlNodeSetPtr nodes; /* a node-set */ + int n_nodes; + xmlNodePtr node; /* a node */ + int n_node; + + for (n_nodes = 0;n_nodes < gen_nb_xmlNodeSetPtr;n_nodes++) { + for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) { + mem_base = xmlMemBlocks(); + nodes = gen_xmlNodeSetPtr(n_nodes, 0); + node = gen_xmlNodePtr(n_node, 1); + + ret_val = xmlXPathNodeTrailing(nodes, node); + desret_xmlNodeSetPtr(ret_val); + call_tests++; + des_xmlNodeSetPtr(n_nodes, nodes, 0); + des_xmlNodePtr(n_node, node, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathNodeTrailing", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_nodes); + printf(" %d", n_node); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathNodeTrailingSorted(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlNodeSetPtr ret_val; + xmlNodeSetPtr nodes; /* a node-set, sorted by document order */ + int n_nodes; + xmlNodePtr node; /* a node */ + int n_node; + + for (n_nodes = 0;n_nodes < gen_nb_xmlNodeSetPtr;n_nodes++) { + for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) { + mem_base = xmlMemBlocks(); + nodes = gen_xmlNodeSetPtr(n_nodes, 0); + node = gen_xmlNodePtr(n_node, 1); + + ret_val = xmlXPathNodeTrailingSorted(nodes, node); + desret_xmlNodeSetPtr(ret_val); + call_tests++; + des_xmlNodeSetPtr(n_nodes, nodes, 0); + des_xmlNodePtr(n_node, node, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathNodeTrailingSorted", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_nodes); + printf(" %d", n_node); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathNormalizeFunction(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathParserContextPtr ctxt; /* the XPath Parser context */ + int n_ctxt; + int nargs; /* the number of arguments */ + int n_nargs; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + for (n_nargs = 0;n_nargs < gen_nb_int;n_nargs++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + nargs = gen_int(n_nargs, 1); + + xmlXPathNormalizeFunction(ctxt, nargs); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + des_int(n_nargs, nargs, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathNormalizeFunction", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_nargs); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathNotEqualValues(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + int ret_val; + xmlXPathParserContextPtr ctxt; /* the XPath Parser context */ + int n_ctxt; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + + ret_val = xmlXPathNotEqualValues(ctxt); + desret_int(ret_val); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathNotEqualValues", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathNotFunction(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathParserContextPtr ctxt; /* the XPath Parser context */ + int n_ctxt; + int nargs; /* the number of arguments */ + int n_nargs; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + for (n_nargs = 0;n_nargs < gen_nb_int;n_nargs++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + nargs = gen_int(n_nargs, 1); + + xmlXPathNotFunction(ctxt, nargs); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + des_int(n_nargs, nargs, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathNotFunction", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_nargs); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathNsLookup(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + const xmlChar * ret_val; + xmlXPathContextPtr ctxt; /* the XPath context */ + int n_ctxt; + xmlChar * prefix; /* the namespace prefix value */ + int n_prefix; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathContextPtr;n_ctxt++) { + for (n_prefix = 0;n_prefix < gen_nb_const_xmlChar_ptr;n_prefix++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathContextPtr(n_ctxt, 0); + prefix = gen_const_xmlChar_ptr(n_prefix, 1); + + ret_val = xmlXPathNsLookup(ctxt, (const xmlChar *)prefix); + desret_const_xmlChar_ptr(ret_val); + call_tests++; + des_xmlXPathContextPtr(n_ctxt, ctxt, 0); + des_const_xmlChar_ptr(n_prefix, (const xmlChar *)prefix, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathNsLookup", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_prefix); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathNumberFunction(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathParserContextPtr ctxt; /* the XPath Parser context */ + int n_ctxt; + int nargs; /* the number of arguments */ + int n_nargs; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + for (n_nargs = 0;n_nargs < gen_nb_int;n_nargs++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + nargs = gen_int(n_nargs, 1); + + xmlXPathNumberFunction(ctxt, nargs); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + des_int(n_nargs, nargs, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathNumberFunction", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_nargs); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathParseNCName(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlChar * ret_val; + xmlXPathParserContextPtr ctxt; /* the XPath Parser context */ + int n_ctxt; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + + ret_val = xmlXPathParseNCName(ctxt); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathParseNCName", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathParseName(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlChar * ret_val; + xmlXPathParserContextPtr ctxt; /* the XPath Parser context */ + int n_ctxt; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + + ret_val = xmlXPathParseName(ctxt); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathParseName", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathPopBoolean(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + int ret_val; + xmlXPathParserContextPtr ctxt; /* an XPath parser context */ + int n_ctxt; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + + ret_val = xmlXPathPopBoolean(ctxt); + desret_int(ret_val); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathPopBoolean", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathPopExternal(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + void * ret_val; + xmlXPathParserContextPtr ctxt; /* an XPath parser context */ + int n_ctxt; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + + ret_val = xmlXPathPopExternal(ctxt); + desret_void_ptr(ret_val); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathPopExternal", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathPopNodeSet(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlNodeSetPtr ret_val; + xmlXPathParserContextPtr ctxt; /* an XPath parser context */ + int n_ctxt; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + + ret_val = xmlXPathPopNodeSet(ctxt); + desret_xmlNodeSetPtr(ret_val); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathPopNodeSet", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathPopNumber(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + double ret_val; + xmlXPathParserContextPtr ctxt; /* an XPath parser context */ + int n_ctxt; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + + ret_val = xmlXPathPopNumber(ctxt); + desret_double(ret_val); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathPopNumber", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathPopString(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlChar * ret_val; + xmlXPathParserContextPtr ctxt; /* an XPath parser context */ + int n_ctxt; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + + ret_val = xmlXPathPopString(ctxt); + desret_xmlChar_ptr(ret_val); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathPopString", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathPositionFunction(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathParserContextPtr ctxt; /* the XPath Parser context */ + int n_ctxt; + int nargs; /* the number of arguments */ + int n_nargs; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + for (n_nargs = 0;n_nargs < gen_nb_int;n_nargs++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + nargs = gen_int(n_nargs, 1); + + xmlXPathPositionFunction(ctxt, nargs); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + des_int(n_nargs, nargs, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathPositionFunction", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_nargs); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathRegisterAllFunctions(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathContextPtr ctxt; /* the XPath context */ + int n_ctxt; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathContextPtr;n_ctxt++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathContextPtr(n_ctxt, 0); + + xmlXPathRegisterAllFunctions(ctxt); + call_tests++; + des_xmlXPathContextPtr(n_ctxt, ctxt, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathRegisterAllFunctions", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathRegisterFunc(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlXPathRegisterFuncLookup(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlXPathRegisterFuncNS(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlXPathRegisterNs(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + int ret_val; + xmlXPathContextPtr ctxt; /* the XPath context */ + int n_ctxt; + xmlChar * prefix; /* the namespace prefix cannot be NULL or empty string */ + int n_prefix; + xmlChar * ns_uri; /* the namespace name */ + int n_ns_uri; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathContextPtr;n_ctxt++) { + for (n_prefix = 0;n_prefix < gen_nb_const_xmlChar_ptr;n_prefix++) { + for (n_ns_uri = 0;n_ns_uri < gen_nb_const_xmlChar_ptr;n_ns_uri++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathContextPtr(n_ctxt, 0); + prefix = gen_const_xmlChar_ptr(n_prefix, 1); + ns_uri = gen_const_xmlChar_ptr(n_ns_uri, 2); + + ret_val = xmlXPathRegisterNs(ctxt, (const xmlChar *)prefix, (const xmlChar *)ns_uri); + desret_int(ret_val); + call_tests++; + des_xmlXPathContextPtr(n_ctxt, ctxt, 0); + des_const_xmlChar_ptr(n_prefix, (const xmlChar *)prefix, 1); + des_const_xmlChar_ptr(n_ns_uri, (const xmlChar *)ns_uri, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathRegisterNs", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_prefix); + printf(" %d", n_ns_uri); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathRegisterVariable(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + int ret_val; + xmlXPathContextPtr ctxt; /* the XPath context */ + int n_ctxt; + xmlChar * name; /* the variable name */ + int n_name; + xmlXPathObjectPtr value; /* the variable value or NULL */ + int n_value; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathContextPtr;n_ctxt++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_value = 0;n_value < gen_nb_xmlXPathObjectPtr;n_value++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathContextPtr(n_ctxt, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + value = gen_xmlXPathObjectPtr(n_value, 2); + + ret_val = xmlXPathRegisterVariable(ctxt, (const xmlChar *)name, value); + desret_int(ret_val); + call_tests++; + des_xmlXPathContextPtr(n_ctxt, ctxt, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + des_xmlXPathObjectPtr(n_value, value, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathRegisterVariable", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_name); + printf(" %d", n_value); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathRegisterVariableLookup(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlXPathRegisterVariableNS(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + int ret_val; + xmlXPathContextPtr ctxt; /* the XPath context */ + int n_ctxt; + xmlChar * name; /* the variable name */ + int n_name; + xmlChar * ns_uri; /* the variable namespace URI */ + int n_ns_uri; + xmlXPathObjectPtr value; /* the variable value or NULL */ + int n_value; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathContextPtr;n_ctxt++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_ns_uri = 0;n_ns_uri < gen_nb_const_xmlChar_ptr;n_ns_uri++) { + for (n_value = 0;n_value < gen_nb_xmlXPathObjectPtr;n_value++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathContextPtr(n_ctxt, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + ns_uri = gen_const_xmlChar_ptr(n_ns_uri, 2); + value = gen_xmlXPathObjectPtr(n_value, 3); + + ret_val = xmlXPathRegisterVariableNS(ctxt, (const xmlChar *)name, (const xmlChar *)ns_uri, value); + desret_int(ret_val); + call_tests++; + des_xmlXPathContextPtr(n_ctxt, ctxt, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + des_const_xmlChar_ptr(n_ns_uri, (const xmlChar *)ns_uri, 2); + des_xmlXPathObjectPtr(n_value, value, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathRegisterVariableNS", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_name); + printf(" %d", n_ns_uri); + printf(" %d", n_value); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathRegisteredFuncsCleanup(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathContextPtr ctxt; /* the XPath context */ + int n_ctxt; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathContextPtr;n_ctxt++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathContextPtr(n_ctxt, 0); + + xmlXPathRegisteredFuncsCleanup(ctxt); + call_tests++; + des_xmlXPathContextPtr(n_ctxt, ctxt, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathRegisteredFuncsCleanup", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathRegisteredNsCleanup(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathContextPtr ctxt; /* the XPath context */ + int n_ctxt; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathContextPtr;n_ctxt++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathContextPtr(n_ctxt, 0); + + xmlXPathRegisteredNsCleanup(ctxt); + call_tests++; + des_xmlXPathContextPtr(n_ctxt, ctxt, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathRegisteredNsCleanup", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathRegisteredVariablesCleanup(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathContextPtr ctxt; /* the XPath context */ + int n_ctxt; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathContextPtr;n_ctxt++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathContextPtr(n_ctxt, 0); + + xmlXPathRegisteredVariablesCleanup(ctxt); + call_tests++; + des_xmlXPathContextPtr(n_ctxt, ctxt, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathRegisteredVariablesCleanup", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathRoot(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathParserContextPtr ctxt; /* the XPath Parser context */ + int n_ctxt; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + + xmlXPathRoot(ctxt); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathRoot", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathRoundFunction(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathParserContextPtr ctxt; /* the XPath Parser context */ + int n_ctxt; + int nargs; /* the number of arguments */ + int n_nargs; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + for (n_nargs = 0;n_nargs < gen_nb_int;n_nargs++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + nargs = gen_int(n_nargs, 1); + + xmlXPathRoundFunction(ctxt, nargs); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + des_int(n_nargs, nargs, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathRoundFunction", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_nargs); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathStartsWithFunction(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathParserContextPtr ctxt; /* the XPath Parser context */ + int n_ctxt; + int nargs; /* the number of arguments */ + int n_nargs; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + for (n_nargs = 0;n_nargs < gen_nb_int;n_nargs++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + nargs = gen_int(n_nargs, 1); + + xmlXPathStartsWithFunction(ctxt, nargs); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + des_int(n_nargs, nargs, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathStartsWithFunction", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_nargs); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathStringEvalNumber(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + double ret_val; + xmlChar * str; /* A string to scan */ + int n_str; + + for (n_str = 0;n_str < gen_nb_const_xmlChar_ptr;n_str++) { + mem_base = xmlMemBlocks(); + str = gen_const_xmlChar_ptr(n_str, 0); + + ret_val = xmlXPathStringEvalNumber((const xmlChar *)str); + desret_double(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_str, (const xmlChar *)str, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathStringEvalNumber", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_str); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathStringFunction(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathParserContextPtr ctxt; /* the XPath Parser context */ + int n_ctxt; + int nargs; /* the number of arguments */ + int n_nargs; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + for (n_nargs = 0;n_nargs < gen_nb_int;n_nargs++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + nargs = gen_int(n_nargs, 1); + + xmlXPathStringFunction(ctxt, nargs); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + des_int(n_nargs, nargs, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathStringFunction", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_nargs); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathStringLengthFunction(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathParserContextPtr ctxt; /* the XPath Parser context */ + int n_ctxt; + int nargs; /* the number of arguments */ + int n_nargs; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + for (n_nargs = 0;n_nargs < gen_nb_int;n_nargs++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + nargs = gen_int(n_nargs, 1); + + xmlXPathStringLengthFunction(ctxt, nargs); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + des_int(n_nargs, nargs, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathStringLengthFunction", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_nargs); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathSubValues(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathParserContextPtr ctxt; /* the XPath Parser context */ + int n_ctxt; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + + xmlXPathSubValues(ctxt); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathSubValues", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathSubstringAfterFunction(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathParserContextPtr ctxt; /* the XPath Parser context */ + int n_ctxt; + int nargs; /* the number of arguments */ + int n_nargs; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + for (n_nargs = 0;n_nargs < gen_nb_int;n_nargs++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + nargs = gen_int(n_nargs, 1); + + xmlXPathSubstringAfterFunction(ctxt, nargs); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + des_int(n_nargs, nargs, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathSubstringAfterFunction", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_nargs); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathSubstringBeforeFunction(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathParserContextPtr ctxt; /* the XPath Parser context */ + int n_ctxt; + int nargs; /* the number of arguments */ + int n_nargs; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + for (n_nargs = 0;n_nargs < gen_nb_int;n_nargs++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + nargs = gen_int(n_nargs, 1); + + xmlXPathSubstringBeforeFunction(ctxt, nargs); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + des_int(n_nargs, nargs, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathSubstringBeforeFunction", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_nargs); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathSubstringFunction(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathParserContextPtr ctxt; /* the XPath Parser context */ + int n_ctxt; + int nargs; /* the number of arguments */ + int n_nargs; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + for (n_nargs = 0;n_nargs < gen_nb_int;n_nargs++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + nargs = gen_int(n_nargs, 1); + + xmlXPathSubstringFunction(ctxt, nargs); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + des_int(n_nargs, nargs, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathSubstringFunction", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_nargs); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathSumFunction(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathParserContextPtr ctxt; /* the XPath Parser context */ + int n_ctxt; + int nargs; /* the number of arguments */ + int n_nargs; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + for (n_nargs = 0;n_nargs < gen_nb_int;n_nargs++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + nargs = gen_int(n_nargs, 1); + + xmlXPathSumFunction(ctxt, nargs); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + des_int(n_nargs, nargs, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathSumFunction", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_nargs); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathTrailing(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlNodeSetPtr ret_val; + xmlNodeSetPtr nodes1; /* a node-set */ + int n_nodes1; + xmlNodeSetPtr nodes2; /* a node-set */ + int n_nodes2; + + for (n_nodes1 = 0;n_nodes1 < gen_nb_xmlNodeSetPtr;n_nodes1++) { + for (n_nodes2 = 0;n_nodes2 < gen_nb_xmlNodeSetPtr;n_nodes2++) { + mem_base = xmlMemBlocks(); + nodes1 = gen_xmlNodeSetPtr(n_nodes1, 0); + nodes2 = gen_xmlNodeSetPtr(n_nodes2, 1); + + ret_val = xmlXPathTrailing(nodes1, nodes2); + desret_xmlNodeSetPtr(ret_val); + call_tests++; + des_xmlNodeSetPtr(n_nodes1, nodes1, 0); + des_xmlNodeSetPtr(n_nodes2, nodes2, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathTrailing", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_nodes1); + printf(" %d", n_nodes2); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathTrailingSorted(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlNodeSetPtr ret_val; + xmlNodeSetPtr nodes1; /* a node-set, sorted by document order */ + int n_nodes1; + xmlNodeSetPtr nodes2; /* a node-set, sorted by document order */ + int n_nodes2; + + for (n_nodes1 = 0;n_nodes1 < gen_nb_xmlNodeSetPtr;n_nodes1++) { + for (n_nodes2 = 0;n_nodes2 < gen_nb_xmlNodeSetPtr;n_nodes2++) { + mem_base = xmlMemBlocks(); + nodes1 = gen_xmlNodeSetPtr(n_nodes1, 0); + nodes2 = gen_xmlNodeSetPtr(n_nodes2, 1); + + ret_val = xmlXPathTrailingSorted(nodes1, nodes2); + desret_xmlNodeSetPtr(ret_val); + call_tests++; + des_xmlNodeSetPtr(n_nodes1, nodes1, 0); + des_xmlNodeSetPtr(n_nodes2, nodes2, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathTrailingSorted", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_nodes1); + printf(" %d", n_nodes2); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathTranslateFunction(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathParserContextPtr ctxt; /* the XPath Parser context */ + int n_ctxt; + int nargs; /* the number of arguments */ + int n_nargs; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + for (n_nargs = 0;n_nargs < gen_nb_int;n_nargs++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + nargs = gen_int(n_nargs, 1); + + xmlXPathTranslateFunction(ctxt, nargs); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + des_int(n_nargs, nargs, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathTranslateFunction", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_nargs); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathTrueFunction(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathParserContextPtr ctxt; /* the XPath Parser context */ + int n_ctxt; + int nargs; /* the number of arguments */ + int n_nargs; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + for (n_nargs = 0;n_nargs < gen_nb_int;n_nargs++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + nargs = gen_int(n_nargs, 1); + + xmlXPathTrueFunction(ctxt, nargs); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + des_int(n_nargs, nargs, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathTrueFunction", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_nargs); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathValueFlipSign(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathParserContextPtr ctxt; /* the XPath Parser context */ + int n_ctxt; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + + xmlXPathValueFlipSign(ctxt); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathValueFlipSign", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathVariableLookup(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathObjectPtr ret_val; + xmlXPathContextPtr ctxt; /* the XPath context */ + int n_ctxt; + xmlChar * name; /* the variable name */ + int n_name; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathContextPtr;n_ctxt++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathContextPtr(n_ctxt, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + + ret_val = xmlXPathVariableLookup(ctxt, (const xmlChar *)name); + desret_xmlXPathObjectPtr(ret_val); + call_tests++; + des_xmlXPathContextPtr(n_ctxt, ctxt, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathVariableLookup", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_name); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathVariableLookupNS(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathObjectPtr ret_val; + xmlXPathContextPtr ctxt; /* the XPath context */ + int n_ctxt; + xmlChar * name; /* the variable name */ + int n_name; + xmlChar * ns_uri; /* the variable namespace URI */ + int n_ns_uri; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathContextPtr;n_ctxt++) { + for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) { + for (n_ns_uri = 0;n_ns_uri < gen_nb_const_xmlChar_ptr;n_ns_uri++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathContextPtr(n_ctxt, 0); + name = gen_const_xmlChar_ptr(n_name, 1); + ns_uri = gen_const_xmlChar_ptr(n_ns_uri, 2); + + ret_val = xmlXPathVariableLookupNS(ctxt, (const xmlChar *)name, (const xmlChar *)ns_uri); + desret_xmlXPathObjectPtr(ret_val); + call_tests++; + des_xmlXPathContextPtr(n_ctxt, ctxt, 0); + des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1); + des_const_xmlChar_ptr(n_ns_uri, (const xmlChar *)ns_uri, 2); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathVariableLookupNS", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_name); + printf(" %d", n_ns_uri); + printf("\n"); + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathWrapCString(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathObjectPtr ret_val; + char * val; /* the char * value */ + int n_val; + + for (n_val = 0;n_val < gen_nb_char_ptr;n_val++) { + mem_base = xmlMemBlocks(); + val = gen_char_ptr(n_val, 0); + + ret_val = xmlXPathWrapCString(val); + desret_xmlXPathObjectPtr(ret_val); + call_tests++; + des_char_ptr(n_val, val, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathWrapCString", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_val); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathWrapExternal(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathObjectPtr ret_val; + void * val; /* the user data */ + int n_val; + + for (n_val = 0;n_val < gen_nb_void_ptr;n_val++) { + mem_base = xmlMemBlocks(); + val = gen_void_ptr(n_val, 0); + + ret_val = xmlXPathWrapExternal(val); + desret_xmlXPathObjectPtr(ret_val); + call_tests++; + des_void_ptr(n_val, val, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathWrapExternal", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_val); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPathWrapNodeSet(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathObjectPtr ret_val; + xmlNodeSetPtr val; /* the NodePtr value */ + int n_val; + + for (n_val = 0;n_val < gen_nb_xmlNodeSetPtr;n_val++) { + mem_base = xmlMemBlocks(); + val = gen_xmlNodeSetPtr(n_val, 0); + + ret_val = xmlXPathWrapNodeSet(val); + desret_xmlXPathObjectPtr(ret_val); + call_tests++; + des_xmlNodeSetPtr(n_val, val, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPathWrapNodeSet", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_val); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPatherror(void) { + int test_ret = 0; + +#if defined(LIBXML_XPATH_ENABLED) + int mem_base; + xmlXPathParserContextPtr ctxt; /* the XPath Parser context */ + int n_ctxt; + const char * file; /* the file name */ + int n_file; + int line; /* the line number */ + int n_line; + int no; /* the error number */ + int n_no; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + for (n_file = 0;n_file < gen_nb_filepath;n_file++) { + for (n_line = 0;n_line < gen_nb_int;n_line++) { + for (n_no = 0;n_no < gen_nb_int;n_no++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + file = gen_filepath(n_file, 1); + line = gen_int(n_line, 2); + no = gen_int(n_no, 3); + + xmlXPatherror(ctxt, file, line, no); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + des_filepath(n_file, file, 1); + des_int(n_line, line, 2); + des_int(n_no, no, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPatherror", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_file); + printf(" %d", n_line); + printf(" %d", n_no); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + +static int +test_xpathInternals(void) { + int test_ret = 0; + + if (quiet == 0) printf("Testing xpathInternals : 106 of 117 functions ...\n"); + test_ret += test_valuePop(); + test_ret += test_valuePush(); + test_ret += test_xmlXPathAddValues(); + test_ret += test_xmlXPathBooleanFunction(); + test_ret += test_xmlXPathCeilingFunction(); + test_ret += test_xmlXPathCompareValues(); + test_ret += test_xmlXPathConcatFunction(); + test_ret += test_xmlXPathContainsFunction(); + test_ret += test_xmlXPathCountFunction(); + test_ret += test_xmlXPathDebugDumpCompExpr(); + test_ret += test_xmlXPathDebugDumpObject(); + test_ret += test_xmlXPathDifference(); + test_ret += test_xmlXPathDistinct(); + test_ret += test_xmlXPathDistinctSorted(); + test_ret += test_xmlXPathDivValues(); + test_ret += test_xmlXPathEqualValues(); + test_ret += test_xmlXPathErr(); + test_ret += test_xmlXPathEvalExpr(); + test_ret += test_xmlXPathEvaluatePredicateResult(); + test_ret += test_xmlXPathFalseFunction(); + test_ret += test_xmlXPathFloorFunction(); + test_ret += test_xmlXPathFunctionLookup(); + test_ret += test_xmlXPathFunctionLookupNS(); + test_ret += test_xmlXPathHasSameNodes(); + test_ret += test_xmlXPathIdFunction(); + test_ret += test_xmlXPathIntersection(); + test_ret += test_xmlXPathIsNodeType(); + test_ret += test_xmlXPathLangFunction(); + test_ret += test_xmlXPathLastFunction(); + test_ret += test_xmlXPathLeading(); + test_ret += test_xmlXPathLeadingSorted(); + test_ret += test_xmlXPathLocalNameFunction(); + test_ret += test_xmlXPathModValues(); + test_ret += test_xmlXPathMultValues(); + test_ret += test_xmlXPathNamespaceURIFunction(); + test_ret += test_xmlXPathNewBoolean(); + test_ret += test_xmlXPathNewCString(); + test_ret += test_xmlXPathNewFloat(); + test_ret += test_xmlXPathNewNodeSet(); + test_ret += test_xmlXPathNewNodeSetList(); + test_ret += test_xmlXPathNewParserContext(); + test_ret += test_xmlXPathNewString(); + test_ret += test_xmlXPathNextAncestor(); + test_ret += test_xmlXPathNextAncestorOrSelf(); + test_ret += test_xmlXPathNextAttribute(); + test_ret += test_xmlXPathNextChild(); + test_ret += test_xmlXPathNextDescendant(); + test_ret += test_xmlXPathNextDescendantOrSelf(); + test_ret += test_xmlXPathNextFollowing(); + test_ret += test_xmlXPathNextFollowingSibling(); + test_ret += test_xmlXPathNextNamespace(); + test_ret += test_xmlXPathNextParent(); + test_ret += test_xmlXPathNextPreceding(); + test_ret += test_xmlXPathNextPrecedingSibling(); + test_ret += test_xmlXPathNextSelf(); + test_ret += test_xmlXPathNodeLeading(); + test_ret += test_xmlXPathNodeLeadingSorted(); + test_ret += test_xmlXPathNodeSetAdd(); + test_ret += test_xmlXPathNodeSetAddNs(); + test_ret += test_xmlXPathNodeSetAddUnique(); + test_ret += test_xmlXPathNodeSetContains(); + test_ret += test_xmlXPathNodeSetDel(); + test_ret += test_xmlXPathNodeSetMerge(); + test_ret += test_xmlXPathNodeSetRemove(); + test_ret += test_xmlXPathNodeSetSort(); + test_ret += test_xmlXPathNodeTrailing(); + test_ret += test_xmlXPathNodeTrailingSorted(); + test_ret += test_xmlXPathNormalizeFunction(); + test_ret += test_xmlXPathNotEqualValues(); + test_ret += test_xmlXPathNotFunction(); + test_ret += test_xmlXPathNsLookup(); + test_ret += test_xmlXPathNumberFunction(); + test_ret += test_xmlXPathParseNCName(); + test_ret += test_xmlXPathParseName(); + test_ret += test_xmlXPathPopBoolean(); + test_ret += test_xmlXPathPopExternal(); + test_ret += test_xmlXPathPopNodeSet(); + test_ret += test_xmlXPathPopNumber(); + test_ret += test_xmlXPathPopString(); + test_ret += test_xmlXPathPositionFunction(); + test_ret += test_xmlXPathRegisterAllFunctions(); + test_ret += test_xmlXPathRegisterFunc(); + test_ret += test_xmlXPathRegisterFuncLookup(); + test_ret += test_xmlXPathRegisterFuncNS(); + test_ret += test_xmlXPathRegisterNs(); + test_ret += test_xmlXPathRegisterVariable(); + test_ret += test_xmlXPathRegisterVariableLookup(); + test_ret += test_xmlXPathRegisterVariableNS(); + test_ret += test_xmlXPathRegisteredFuncsCleanup(); + test_ret += test_xmlXPathRegisteredNsCleanup(); + test_ret += test_xmlXPathRegisteredVariablesCleanup(); + test_ret += test_xmlXPathRoot(); + test_ret += test_xmlXPathRoundFunction(); + test_ret += test_xmlXPathStartsWithFunction(); + test_ret += test_xmlXPathStringEvalNumber(); + test_ret += test_xmlXPathStringFunction(); + test_ret += test_xmlXPathStringLengthFunction(); + test_ret += test_xmlXPathSubValues(); + test_ret += test_xmlXPathSubstringAfterFunction(); + test_ret += test_xmlXPathSubstringBeforeFunction(); + test_ret += test_xmlXPathSubstringFunction(); + test_ret += test_xmlXPathSumFunction(); + test_ret += test_xmlXPathTrailing(); + test_ret += test_xmlXPathTrailingSorted(); + test_ret += test_xmlXPathTranslateFunction(); + test_ret += test_xmlXPathTrueFunction(); + test_ret += test_xmlXPathValueFlipSign(); + test_ret += test_xmlXPathVariableLookup(); + test_ret += test_xmlXPathVariableLookupNS(); + test_ret += test_xmlXPathWrapCString(); + test_ret += test_xmlXPathWrapExternal(); + test_ret += test_xmlXPathWrapNodeSet(); + test_ret += test_xmlXPatherror(); + + if (test_ret != 0) + printf("Module xpathInternals: %d errors\n", test_ret); + return(test_ret); +} + +static int +test_xmlXPtrBuildNodeList(void) { + int test_ret = 0; + +#if defined(LIBXML_XPTR_ENABLED) + int mem_base; + xmlNodePtr ret_val; + xmlXPathObjectPtr obj; /* the XPointer result from the evaluation. */ + int n_obj; + + for (n_obj = 0;n_obj < gen_nb_xmlXPathObjectPtr;n_obj++) { + mem_base = xmlMemBlocks(); + obj = gen_xmlXPathObjectPtr(n_obj, 0); + + ret_val = xmlXPtrBuildNodeList(obj); + desret_xmlNodePtr(ret_val); + call_tests++; + des_xmlXPathObjectPtr(n_obj, obj, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPtrBuildNodeList", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_obj); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPtrEval(void) { + int test_ret = 0; + +#if defined(LIBXML_XPTR_ENABLED) + int mem_base; + xmlXPathObjectPtr ret_val; + xmlChar * str; /* the XPointer expression */ + int n_str; + xmlXPathContextPtr ctx; /* the XPointer context */ + int n_ctx; + + for (n_str = 0;n_str < gen_nb_const_xmlChar_ptr;n_str++) { + for (n_ctx = 0;n_ctx < gen_nb_xmlXPathContextPtr;n_ctx++) { + mem_base = xmlMemBlocks(); + str = gen_const_xmlChar_ptr(n_str, 0); + ctx = gen_xmlXPathContextPtr(n_ctx, 1); + + ret_val = xmlXPtrEval((const xmlChar *)str, ctx); + desret_xmlXPathObjectPtr(ret_val); + call_tests++; + des_const_xmlChar_ptr(n_str, (const xmlChar *)str, 0); + des_xmlXPathContextPtr(n_ctx, ctx, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPtrEval", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_str); + printf(" %d", n_ctx); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPtrEvalRangePredicate(void) { + int test_ret = 0; + +#if defined(LIBXML_XPTR_ENABLED) + int mem_base; + xmlXPathParserContextPtr ctxt; /* the XPointer Parser context */ + int n_ctxt; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + + xmlXPtrEvalRangePredicate(ctxt); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPtrEvalRangePredicate", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + +#ifdef LIBXML_XPTR_ENABLED + +#define gen_nb_xmlLocationSetPtr 1 +static xmlLocationSetPtr gen_xmlLocationSetPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { + return(NULL); +} +static void des_xmlLocationSetPtr(int no ATTRIBUTE_UNUSED, xmlLocationSetPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) { +} +#endif + + +static int +test_xmlXPtrLocationSetAdd(void) { + int test_ret = 0; + +#if defined(LIBXML_XPTR_ENABLED) + int mem_base; + xmlLocationSetPtr cur; /* the initial range set */ + int n_cur; + xmlXPathObjectPtr val; /* a new xmlXPathObjectPtr */ + int n_val; + + for (n_cur = 0;n_cur < gen_nb_xmlLocationSetPtr;n_cur++) { + for (n_val = 0;n_val < gen_nb_xmlXPathObjectPtr;n_val++) { + mem_base = xmlMemBlocks(); + cur = gen_xmlLocationSetPtr(n_cur, 0); + val = gen_xmlXPathObjectPtr(n_val, 1); + + xmlXPtrLocationSetAdd(cur, val); + call_tests++; + des_xmlLocationSetPtr(n_cur, cur, 0); + des_xmlXPathObjectPtr(n_val, val, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPtrLocationSetAdd", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_cur); + printf(" %d", n_val); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPtrLocationSetCreate(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlXPtrLocationSetDel(void) { + int test_ret = 0; + +#if defined(LIBXML_XPTR_ENABLED) + int mem_base; + xmlLocationSetPtr cur; /* the initial range set */ + int n_cur; + xmlXPathObjectPtr val; /* an xmlXPathObjectPtr */ + int n_val; + + for (n_cur = 0;n_cur < gen_nb_xmlLocationSetPtr;n_cur++) { + for (n_val = 0;n_val < gen_nb_xmlXPathObjectPtr;n_val++) { + mem_base = xmlMemBlocks(); + cur = gen_xmlLocationSetPtr(n_cur, 0); + val = gen_xmlXPathObjectPtr(n_val, 1); + + xmlXPtrLocationSetDel(cur, val); + call_tests++; + des_xmlLocationSetPtr(n_cur, cur, 0); + des_xmlXPathObjectPtr(n_val, val, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPtrLocationSetDel", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_cur); + printf(" %d", n_val); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPtrLocationSetMerge(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlXPtrLocationSetRemove(void) { + int test_ret = 0; + +#if defined(LIBXML_XPTR_ENABLED) + int mem_base; + xmlLocationSetPtr cur; /* the initial range set */ + int n_cur; + int val; /* the index to remove */ + int n_val; + + for (n_cur = 0;n_cur < gen_nb_xmlLocationSetPtr;n_cur++) { + for (n_val = 0;n_val < gen_nb_int;n_val++) { + mem_base = xmlMemBlocks(); + cur = gen_xmlLocationSetPtr(n_cur, 0); + val = gen_int(n_val, 1); + + xmlXPtrLocationSetRemove(cur, val); + call_tests++; + des_xmlLocationSetPtr(n_cur, cur, 0); + des_int(n_val, val, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPtrLocationSetRemove", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_cur); + printf(" %d", n_val); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPtrNewCollapsedRange(void) { + int test_ret = 0; + +#if defined(LIBXML_XPTR_ENABLED) + int mem_base; + xmlXPathObjectPtr ret_val; + xmlNodePtr start; /* the starting and ending node */ + int n_start; + + for (n_start = 0;n_start < gen_nb_xmlNodePtr;n_start++) { + mem_base = xmlMemBlocks(); + start = gen_xmlNodePtr(n_start, 0); + + ret_val = xmlXPtrNewCollapsedRange(start); + desret_xmlXPathObjectPtr(ret_val); + call_tests++; + des_xmlNodePtr(n_start, start, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPtrNewCollapsedRange", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_start); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPtrNewContext(void) { + int test_ret = 0; + + + /* missing type support */ + return(test_ret); +} + + +static int +test_xmlXPtrNewLocationSetNodeSet(void) { + int test_ret = 0; + +#if defined(LIBXML_XPTR_ENABLED) + int mem_base; + xmlXPathObjectPtr ret_val; + xmlNodeSetPtr set; /* a node set */ + int n_set; + + for (n_set = 0;n_set < gen_nb_xmlNodeSetPtr;n_set++) { + mem_base = xmlMemBlocks(); + set = gen_xmlNodeSetPtr(n_set, 0); + + ret_val = xmlXPtrNewLocationSetNodeSet(set); + desret_xmlXPathObjectPtr(ret_val); + call_tests++; + des_xmlNodeSetPtr(n_set, set, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPtrNewLocationSetNodeSet", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_set); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPtrNewLocationSetNodes(void) { + int test_ret = 0; + +#if defined(LIBXML_XPTR_ENABLED) + int mem_base; + xmlXPathObjectPtr ret_val; + xmlNodePtr start; /* the start NodePtr value */ + int n_start; + xmlNodePtr end; /* the end NodePtr value or NULL */ + int n_end; + + for (n_start = 0;n_start < gen_nb_xmlNodePtr;n_start++) { + for (n_end = 0;n_end < gen_nb_xmlNodePtr;n_end++) { + mem_base = xmlMemBlocks(); + start = gen_xmlNodePtr(n_start, 0); + end = gen_xmlNodePtr(n_end, 1); + + ret_val = xmlXPtrNewLocationSetNodes(start, end); + desret_xmlXPathObjectPtr(ret_val); + call_tests++; + des_xmlNodePtr(n_start, start, 0); + des_xmlNodePtr(n_end, end, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPtrNewLocationSetNodes", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_start); + printf(" %d", n_end); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPtrNewRange(void) { + int test_ret = 0; + +#if defined(LIBXML_XPTR_ENABLED) + int mem_base; + xmlXPathObjectPtr ret_val; + xmlNodePtr start; /* the starting node */ + int n_start; + int startindex; /* the start index */ + int n_startindex; + xmlNodePtr end; /* the ending point */ + int n_end; + int endindex; /* the ending index */ + int n_endindex; + + for (n_start = 0;n_start < gen_nb_xmlNodePtr;n_start++) { + for (n_startindex = 0;n_startindex < gen_nb_int;n_startindex++) { + for (n_end = 0;n_end < gen_nb_xmlNodePtr;n_end++) { + for (n_endindex = 0;n_endindex < gen_nb_int;n_endindex++) { + mem_base = xmlMemBlocks(); + start = gen_xmlNodePtr(n_start, 0); + startindex = gen_int(n_startindex, 1); + end = gen_xmlNodePtr(n_end, 2); + endindex = gen_int(n_endindex, 3); + + ret_val = xmlXPtrNewRange(start, startindex, end, endindex); + desret_xmlXPathObjectPtr(ret_val); + call_tests++; + des_xmlNodePtr(n_start, start, 0); + des_int(n_startindex, startindex, 1); + des_xmlNodePtr(n_end, end, 2); + des_int(n_endindex, endindex, 3); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPtrNewRange", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_start); + printf(" %d", n_startindex); + printf(" %d", n_end); + printf(" %d", n_endindex); + printf("\n"); + } + } + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPtrNewRangeNodeObject(void) { + int test_ret = 0; + +#if defined(LIBXML_XPTR_ENABLED) + int mem_base; + xmlXPathObjectPtr ret_val; + xmlNodePtr start; /* the starting node */ + int n_start; + xmlXPathObjectPtr end; /* the ending object */ + int n_end; + + for (n_start = 0;n_start < gen_nb_xmlNodePtr;n_start++) { + for (n_end = 0;n_end < gen_nb_xmlXPathObjectPtr;n_end++) { + mem_base = xmlMemBlocks(); + start = gen_xmlNodePtr(n_start, 0); + end = gen_xmlXPathObjectPtr(n_end, 1); + + ret_val = xmlXPtrNewRangeNodeObject(start, end); + desret_xmlXPathObjectPtr(ret_val); + call_tests++; + des_xmlNodePtr(n_start, start, 0); + des_xmlXPathObjectPtr(n_end, end, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPtrNewRangeNodeObject", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_start); + printf(" %d", n_end); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPtrNewRangeNodePoint(void) { + int test_ret = 0; + +#if defined(LIBXML_XPTR_ENABLED) + int mem_base; + xmlXPathObjectPtr ret_val; + xmlNodePtr start; /* the starting node */ + int n_start; + xmlXPathObjectPtr end; /* the ending point */ + int n_end; + + for (n_start = 0;n_start < gen_nb_xmlNodePtr;n_start++) { + for (n_end = 0;n_end < gen_nb_xmlXPathObjectPtr;n_end++) { + mem_base = xmlMemBlocks(); + start = gen_xmlNodePtr(n_start, 0); + end = gen_xmlXPathObjectPtr(n_end, 1); + + ret_val = xmlXPtrNewRangeNodePoint(start, end); + desret_xmlXPathObjectPtr(ret_val); + call_tests++; + des_xmlNodePtr(n_start, start, 0); + des_xmlXPathObjectPtr(n_end, end, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPtrNewRangeNodePoint", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_start); + printf(" %d", n_end); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPtrNewRangeNodes(void) { + int test_ret = 0; + +#if defined(LIBXML_XPTR_ENABLED) + int mem_base; + xmlXPathObjectPtr ret_val; + xmlNodePtr start; /* the starting node */ + int n_start; + xmlNodePtr end; /* the ending node */ + int n_end; + + for (n_start = 0;n_start < gen_nb_xmlNodePtr;n_start++) { + for (n_end = 0;n_end < gen_nb_xmlNodePtr;n_end++) { + mem_base = xmlMemBlocks(); + start = gen_xmlNodePtr(n_start, 0); + end = gen_xmlNodePtr(n_end, 1); + + ret_val = xmlXPtrNewRangeNodes(start, end); + desret_xmlXPathObjectPtr(ret_val); + call_tests++; + des_xmlNodePtr(n_start, start, 0); + des_xmlNodePtr(n_end, end, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPtrNewRangeNodes", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_start); + printf(" %d", n_end); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPtrNewRangePointNode(void) { + int test_ret = 0; + +#if defined(LIBXML_XPTR_ENABLED) + int mem_base; + xmlXPathObjectPtr ret_val; + xmlXPathObjectPtr start; /* the starting point */ + int n_start; + xmlNodePtr end; /* the ending node */ + int n_end; + + for (n_start = 0;n_start < gen_nb_xmlXPathObjectPtr;n_start++) { + for (n_end = 0;n_end < gen_nb_xmlNodePtr;n_end++) { + mem_base = xmlMemBlocks(); + start = gen_xmlXPathObjectPtr(n_start, 0); + end = gen_xmlNodePtr(n_end, 1); + + ret_val = xmlXPtrNewRangePointNode(start, end); + desret_xmlXPathObjectPtr(ret_val); + call_tests++; + des_xmlXPathObjectPtr(n_start, start, 0); + des_xmlNodePtr(n_end, end, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPtrNewRangePointNode", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_start); + printf(" %d", n_end); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPtrNewRangePoints(void) { + int test_ret = 0; + +#if defined(LIBXML_XPTR_ENABLED) + int mem_base; + xmlXPathObjectPtr ret_val; + xmlXPathObjectPtr start; /* the starting point */ + int n_start; + xmlXPathObjectPtr end; /* the ending point */ + int n_end; + + for (n_start = 0;n_start < gen_nb_xmlXPathObjectPtr;n_start++) { + for (n_end = 0;n_end < gen_nb_xmlXPathObjectPtr;n_end++) { + mem_base = xmlMemBlocks(); + start = gen_xmlXPathObjectPtr(n_start, 0); + end = gen_xmlXPathObjectPtr(n_end, 1); + + ret_val = xmlXPtrNewRangePoints(start, end); + desret_xmlXPathObjectPtr(ret_val); + call_tests++; + des_xmlXPathObjectPtr(n_start, start, 0); + des_xmlXPathObjectPtr(n_end, end, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPtrNewRangePoints", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_start); + printf(" %d", n_end); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPtrRangeToFunction(void) { + int test_ret = 0; + +#if defined(LIBXML_XPTR_ENABLED) + int mem_base; + xmlXPathParserContextPtr ctxt; /* the XPointer Parser context */ + int n_ctxt; + int nargs; /* the number of args */ + int n_nargs; + + for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) { + for (n_nargs = 0;n_nargs < gen_nb_int;n_nargs++) { + mem_base = xmlMemBlocks(); + ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0); + nargs = gen_int(n_nargs, 1); + + xmlXPtrRangeToFunction(ctxt, nargs); + call_tests++; + des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0); + des_int(n_nargs, nargs, 1); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPtrRangeToFunction", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_ctxt); + printf(" %d", n_nargs); + printf("\n"); + } + } + } + function_tests++; +#endif + + return(test_ret); +} + + +static int +test_xmlXPtrWrapLocationSet(void) { + int test_ret = 0; + +#if defined(LIBXML_XPTR_ENABLED) + int mem_base; + xmlXPathObjectPtr ret_val; + xmlLocationSetPtr val; /* the LocationSet value */ + int n_val; + + for (n_val = 0;n_val < gen_nb_xmlLocationSetPtr;n_val++) { + mem_base = xmlMemBlocks(); + val = gen_xmlLocationSetPtr(n_val, 0); + + ret_val = xmlXPtrWrapLocationSet(val); + desret_xmlXPathObjectPtr(ret_val); + call_tests++; + des_xmlLocationSetPtr(n_val, val, 0); + xmlResetLastError(); + if (mem_base != xmlMemBlocks()) { + printf("Leak of %d blocks found in xmlXPtrWrapLocationSet", + xmlMemBlocks() - mem_base); + test_ret++; + printf(" %d", n_val); + printf("\n"); + } + } + function_tests++; +#endif + + return(test_ret); +} + +static int +test_xpointer(void) { + int test_ret = 0; + + if (quiet == 0) printf("Testing xpointer : 17 of 21 functions ...\n"); + test_ret += test_xmlXPtrBuildNodeList(); + test_ret += test_xmlXPtrEval(); + test_ret += test_xmlXPtrEvalRangePredicate(); + test_ret += test_xmlXPtrLocationSetAdd(); + test_ret += test_xmlXPtrLocationSetCreate(); + test_ret += test_xmlXPtrLocationSetDel(); + test_ret += test_xmlXPtrLocationSetMerge(); + test_ret += test_xmlXPtrLocationSetRemove(); + test_ret += test_xmlXPtrNewCollapsedRange(); + test_ret += test_xmlXPtrNewContext(); + test_ret += test_xmlXPtrNewLocationSetNodeSet(); + test_ret += test_xmlXPtrNewLocationSetNodes(); + test_ret += test_xmlXPtrNewRange(); + test_ret += test_xmlXPtrNewRangeNodeObject(); + test_ret += test_xmlXPtrNewRangeNodePoint(); + test_ret += test_xmlXPtrNewRangeNodes(); + test_ret += test_xmlXPtrNewRangePointNode(); + test_ret += test_xmlXPtrNewRangePoints(); + test_ret += test_xmlXPtrRangeToFunction(); + test_ret += test_xmlXPtrWrapLocationSet(); + + if (test_ret != 0) + printf("Module xpointer: %d errors\n", test_ret); + return(test_ret); +} +static int +test_module(const char *module) { + if (!strcmp(module, "HTMLparser")) return(test_HTMLparser()); + if (!strcmp(module, "HTMLtree")) return(test_HTMLtree()); + if (!strcmp(module, "SAX2")) return(test_SAX2()); + if (!strcmp(module, "c14n")) return(test_c14n()); + if (!strcmp(module, "catalog")) return(test_catalog()); + if (!strcmp(module, "chvalid")) return(test_chvalid()); + if (!strcmp(module, "debugXML")) return(test_debugXML()); + if (!strcmp(module, "dict")) return(test_dict()); + if (!strcmp(module, "encoding")) return(test_encoding()); + if (!strcmp(module, "entities")) return(test_entities()); + if (!strcmp(module, "hash")) return(test_hash()); + if (!strcmp(module, "list")) return(test_list()); + if (!strcmp(module, "nanoftp")) return(test_nanoftp()); + if (!strcmp(module, "nanohttp")) return(test_nanohttp()); + if (!strcmp(module, "parser")) return(test_parser()); + if (!strcmp(module, "parserInternals")) return(test_parserInternals()); + if (!strcmp(module, "pattern")) return(test_pattern()); + if (!strcmp(module, "relaxng")) return(test_relaxng()); + if (!strcmp(module, "schemasInternals")) return(test_schemasInternals()); + if (!strcmp(module, "schematron")) return(test_schematron()); + if (!strcmp(module, "tree")) return(test_tree()); + if (!strcmp(module, "uri")) return(test_uri()); + if (!strcmp(module, "valid")) return(test_valid()); + if (!strcmp(module, "xinclude")) return(test_xinclude()); + if (!strcmp(module, "xmlIO")) return(test_xmlIO()); + if (!strcmp(module, "xmlautomata")) return(test_xmlautomata()); + if (!strcmp(module, "xmlerror")) return(test_xmlerror()); + if (!strcmp(module, "xmlmodule")) return(test_xmlmodule()); + if (!strcmp(module, "xmlreader")) return(test_xmlreader()); + if (!strcmp(module, "xmlregexp")) return(test_xmlregexp()); + if (!strcmp(module, "xmlsave")) return(test_xmlsave()); + if (!strcmp(module, "xmlschemas")) return(test_xmlschemas()); + if (!strcmp(module, "xmlschemastypes")) return(test_xmlschemastypes()); + if (!strcmp(module, "xmlstring")) return(test_xmlstring()); + if (!strcmp(module, "xmlunicode")) return(test_xmlunicode()); + if (!strcmp(module, "xmlwriter")) return(test_xmlwriter()); + if (!strcmp(module, "xpath")) return(test_xpath()); + if (!strcmp(module, "xpathInternals")) return(test_xpathInternals()); + if (!strcmp(module, "xpointer")) return(test_xpointer()); + return(0); +} diff --git a/testchar.c b/testchar.c new file mode 100644 index 0000000..0d08792 --- /dev/null +++ b/testchar.c @@ -0,0 +1,617 @@ +/** + * Test the UTF-8 decoding routines + * + * author: Daniel Veillard + * copy: see Copyright for the status of this software. + */ + +#include +#include +#include +#include + +#include "buf.h" + +int lastError; + +static void errorHandler(void *unused, xmlErrorPtr err) { + if ((unused == NULL) && (err != NULL) && (lastError == 0)) { + lastError = err->code; + } +} + +char document1[100] = "XXXX"; +char document2[100] = ""; + +static void testDocumentRangeByte1(xmlParserCtxtPtr ctxt, char *document, + int len, char *data, int forbid1, int forbid2) { + int i; + xmlDocPtr res; + + for (i = 0;i <= 0xFF;i++) { + lastError = 0; + xmlCtxtReset(ctxt); + + data[0] = i; + + res = xmlReadMemory(document, len, "test", NULL, 0); + + if ((i == forbid1) || (i == forbid2)) { + if ((lastError == 0) || (res != NULL)) + fprintf(stderr, + "Failed to detect invalid char for Byte 0x%02X: %c\n", + i, i); + } + + else if ((i == '<') || (i == '&')) { + if ((lastError == 0) || (res != NULL)) + fprintf(stderr, + "Failed to detect illegal char %c for Byte 0x%02X\n", i, i); + } + else if (((i < 0x20) || (i >= 0x80)) && + (i != 0x9) && (i != 0xA) && (i != 0xD)) { + if ((lastError != XML_ERR_INVALID_CHAR) && (res != NULL)) + fprintf(stderr, + "Failed to detect invalid char for Byte 0x%02X\n", i); + } + else if (res == NULL) { + fprintf(stderr, + "Failed to parse valid char for Byte 0x%02X : %c\n", i, i); + } + if (res != NULL) + xmlFreeDoc(res); + } +} + +static void testDocumentRangeByte2(xmlParserCtxtPtr ctxt, char *document, + int len, char *data) { + int i, j; + xmlDocPtr res; + + for (i = 0x80;i <= 0xFF;i++) { + for (j = 0;j <= 0xFF;j++) { + lastError = 0; + xmlCtxtReset(ctxt); + + data[0] = i; + data[1] = j; + + res = xmlReadMemory(document, len, "test", NULL, 0); + + /* if first bit of first char is set, then second bit must too */ + if ((i & 0x80) && ((i & 0x40) == 0)) { + if ((lastError == 0) || (res != NULL)) + fprintf(stderr, + "Failed to detect invalid char for Bytes 0x%02X 0x%02X\n", + i, j); + } + + /* + * if first bit of first char is set, then second char first + * bits must be 10 + */ + else if ((i & 0x80) && ((j & 0xC0) != 0x80)) { + if ((lastError == 0) || (res != NULL)) + fprintf(stderr, + "Failed to detect invalid char for Bytes 0x%02X 0x%02X\n", + i, j); + } + + /* + * if using a 2 byte encoding then the value must be greater + * than 0x80, i.e. one of bits 5 to 1 of i must be set + */ + else if ((i & 0x80) && ((i & 0x1E) == 0)) { + if ((lastError == 0) || (res != NULL)) + fprintf(stderr, + "Failed to detect invalid char for Bytes 0x%02X 0x%02X\n", + i, j); + } + + /* + * if third bit of first char is set, then the sequence would need + * at least 3 bytes, but we give only 2 ! + */ + else if ((i & 0xE0) == 0xE0) { + if ((lastError == 0) || (res != NULL)) + fprintf(stderr, + "Failed to detect invalid char for Bytes 0x%02X 0x%02X 0x00\n", + i, j); + } + + /* + * We should see no error in remaning cases + */ + else if ((lastError != 0) || (res == NULL)) { + fprintf(stderr, + "Failed to parse document for Bytes 0x%02X 0x%02X\n", i, j); + } + if (res != NULL) + xmlFreeDoc(res); + } + } +} + +/** + * testDocumentRanges: + * + * Test the correct UTF8 character parsing in context of XML documents + * Those are in-context injection tests checking the parser behaviour on + * edge case values at different point in content, beginning and end of + * CDATA in text or in attribute values. + */ + +static void testDocumentRanges(void) { + xmlParserCtxtPtr ctxt; + char *data; + + /* + * Set up a parsing context using the first document as + * the current input source. + */ + ctxt = xmlNewParserCtxt(); + if (ctxt == NULL) { + fprintf(stderr, "Failed to allocate parser context\n"); + return; + } + + printf("testing 1 byte char in document: 1"); + fflush(stdout); + data = &document1[5]; + data[0] = ' '; + data[1] = ' '; + data[2] = ' '; + data[3] = ' '; + /* test 1 byte injection at beginning of area */ + testDocumentRangeByte1(ctxt, &document1[0], strlen(document1), + data, -1, -1); + printf(" 2"); + fflush(stdout); + data[0] = ' '; + data[1] = ' '; + data[2] = ' '; + data[3] = ' '; + /* test 1 byte injection at end of area */ + testDocumentRangeByte1(ctxt, &document1[0], strlen(document1), + data + 3, -1, -1); + + printf(" 3"); + fflush(stdout); + data = &document2[10]; + data[0] = ' '; + data[1] = ' '; + data[2] = ' '; + data[3] = ' '; + /* test 1 byte injection at beginning of area */ + testDocumentRangeByte1(ctxt, &document2[0], strlen(document2), + data, '\'', -1); + printf(" 4"); + fflush(stdout); + data[0] = ' '; + data[1] = ' '; + data[2] = ' '; + data[3] = ' '; + /* test 1 byte injection at end of area */ + testDocumentRangeByte1(ctxt, &document2[0], strlen(document2), + data + 3, '\'', -1); + printf(" done\n"); + + printf("testing 2 byte char in document: 1"); + fflush(stdout); + data = &document1[5]; + data[0] = ' '; + data[1] = ' '; + data[2] = ' '; + data[3] = ' '; + /* test 2 byte injection at beginning of area */ + testDocumentRangeByte2(ctxt, &document1[0], strlen(document1), + data); + printf(" 2"); + fflush(stdout); + data[0] = ' '; + data[1] = ' '; + data[2] = ' '; + data[3] = ' '; + /* test 2 byte injection at end of area */ + testDocumentRangeByte2(ctxt, &document1[0], strlen(document1), + data + 2); + + printf(" 3"); + fflush(stdout); + data = &document2[10]; + data[0] = ' '; + data[1] = ' '; + data[2] = ' '; + data[3] = ' '; + /* test 2 byte injection at beginning of area */ + testDocumentRangeByte2(ctxt, &document2[0], strlen(document2), + data); + printf(" 4"); + fflush(stdout); + data[0] = ' '; + data[1] = ' '; + data[2] = ' '; + data[3] = ' '; + /* test 2 byte injection at end of area */ + testDocumentRangeByte2(ctxt, &document2[0], strlen(document2), + data + 2); + printf(" done\n"); + + xmlFreeParserCtxt(ctxt); +} + +static void testCharRangeByte1(xmlParserCtxtPtr ctxt, char *data) { + int i = 0; + int len, c; + + data[1] = 0; + data[2] = 0; + data[3] = 0; + for (i = 0;i <= 0xFF;i++) { + data[0] = i; + ctxt->charset = XML_CHAR_ENCODING_UTF8; + + lastError = 0; + c = xmlCurrentChar(ctxt, &len); + if ((i == 0) || (i >= 0x80)) { + /* we must see an error there */ + if (lastError != XML_ERR_INVALID_CHAR) + fprintf(stderr, + "Failed to detect invalid char for Byte 0x%02X\n", i); + } else if (i == 0xD) { + if ((c != 0xA) || (len != 1)) + fprintf(stderr, "Failed to convert char for Byte 0x%02X\n", i); + } else if ((c != i) || (len != 1)) { + fprintf(stderr, "Failed to parse char for Byte 0x%02X\n", i); + } + } +} + +static void testCharRangeByte2(xmlParserCtxtPtr ctxt, char *data) { + int i, j; + int len, c; + + data[2] = 0; + data[3] = 0; + for (i = 0x80;i <= 0xFF;i++) { + for (j = 0;j <= 0xFF;j++) { + data[0] = i; + data[1] = j; + ctxt->charset = XML_CHAR_ENCODING_UTF8; + + lastError = 0; + c = xmlCurrentChar(ctxt, &len); + + /* if first bit of first char is set, then second bit must too */ + if ((i & 0x80) && ((i & 0x40) == 0)) { + if (lastError != XML_ERR_INVALID_CHAR) + fprintf(stderr, + "Failed to detect invalid char for Bytes 0x%02X 0x%02X\n", + i, j); + } + + /* + * if first bit of first char is set, then second char first + * bits must be 10 + */ + else if ((i & 0x80) && ((j & 0xC0) != 0x80)) { + if (lastError != XML_ERR_INVALID_CHAR) + fprintf(stderr, + "Failed to detect invalid char for Bytes 0x%02X 0x%02X: %d\n", + i, j, c); + } + + /* + * if using a 2 byte encoding then the value must be greater + * than 0x80, i.e. one of bits 5 to 1 of i must be set + */ + else if ((i & 0x80) && ((i & 0x1E) == 0)) { + if (lastError != XML_ERR_INVALID_CHAR) + fprintf(stderr, + "Failed to detect invalid char for Bytes 0x%02X 0x%02X: %d\n", + i, j, c); + } + + /* + * if third bit of first char is set, then the sequence would need + * at least 3 bytes, but we give only 2 ! + */ + else if ((i & 0xE0) == 0xE0) { + if (lastError != XML_ERR_INVALID_CHAR) + fprintf(stderr, + "Failed to detect invalid char for Bytes 0x%02X 0x%02X 0x00\n", + i, j); + } + + /* + * We should see no error in remaning cases + */ + else if ((lastError != 0) || (len != 2)) { + fprintf(stderr, + "Failed to parse char for Bytes 0x%02X 0x%02X\n", i, j); + } + + /* + * Finally check the value is right + */ + else if (c != (j & 0x3F) + ((i & 0x1F) << 6)) { + fprintf(stderr, + "Failed to parse char for Bytes 0x%02X 0x%02X: expect %d got %d\n", + i, j, ((j & 0x3F) + ((i & 0x1F) << 6)), c); + } + } + } +} + +static void testCharRangeByte3(xmlParserCtxtPtr ctxt, char *data) { + int i, j, k, K; + int len, c; + unsigned char lows[6] = {0, 0x80, 0x81, 0xC1, 0xFF, 0xBF}; + int value; + + data[3] = 0; + for (i = 0xE0;i <= 0xFF;i++) { + for (j = 0;j <= 0xFF;j++) { + for (k = 0;k < 6;k++) { + data[0] = i; + data[1] = j; + K = lows[k]; + data[2] = (char) K; + value = (K & 0x3F) + ((j & 0x3F) << 6) + ((i & 0xF) << 12); + ctxt->charset = XML_CHAR_ENCODING_UTF8; + + lastError = 0; + c = xmlCurrentChar(ctxt, &len); + + /* + * if fourth bit of first char is set, then the sequence would need + * at least 4 bytes, but we give only 3 ! + */ + if ((i & 0xF0) == 0xF0) { + if (lastError != XML_ERR_INVALID_CHAR) + fprintf(stderr, + "Failed to detect invalid char for Bytes 0x%02X 0x%02X 0x%02X 0x%02X\n", + i, j, K, data[3]); + } + + /* + * The second and the third bytes must start with 10 + */ + else if (((j & 0xC0) != 0x80) || ((K & 0xC0) != 0x80)) { + if (lastError != XML_ERR_INVALID_CHAR) + fprintf(stderr, + "Failed to detect invalid char for Bytes 0x%02X 0x%02X 0x%02X\n", + i, j, K); + } + + /* + * if using a 3 byte encoding then the value must be greater + * than 0x800, i.e. one of bits 4 to 0 of i must be set or + * the 6th byte of data[1] must be set + */ + else if (((i & 0xF) == 0) && ((j & 0x20) == 0)) { + if (lastError != XML_ERR_INVALID_CHAR) + fprintf(stderr, + "Failed to detect invalid char for Bytes 0x%02X 0x%02X 0x%02X\n", + i, j, K); + } + + /* + * There are values in that range that are not allowed in XML-1.0 + */ + else if (((value > 0xD7FF) && (value <0xE000)) || + ((value > 0xFFFD) && (value <0x10000))) { + if (lastError != XML_ERR_INVALID_CHAR) + fprintf(stderr, + "Failed to detect invalid char 0x%04X for Bytes 0x%02X 0x%02X 0x%02X\n", + value, i, j, K); + } + + /* + * We should see no error in remaining cases + */ + else if ((lastError != 0) || (len != 3)) { + fprintf(stderr, + "Failed to parse char for Bytes 0x%02X 0x%02X 0x%02X\n", + i, j, K); + } + + /* + * Finally check the value is right + */ + else if (c != value) { + fprintf(stderr, + "Failed to parse char for Bytes 0x%02X 0x%02X 0x%02X: expect %d got %d\n", + i, j, data[2], value, c); + } + } + } + } +} + +static void testCharRangeByte4(xmlParserCtxtPtr ctxt, char *data) { + int i, j, k, K, l, L; + int len, c; + unsigned char lows[6] = {0, 0x80, 0x81, 0xC1, 0xFF, 0xBF}; + int value; + + data[4] = 0; + for (i = 0xF0;i <= 0xFF;i++) { + for (j = 0;j <= 0xFF;j++) { + for (k = 0;k < 6;k++) { + for (l = 0;l < 6;l++) { + data[0] = i; + data[1] = j; + K = lows[k]; + data[2] = (char) K; + L = lows[l]; + data[3] = (char) L; + value = (L & 0x3F) + ((K & 0x3F) << 6) + ((j & 0x3F) << 12) + + ((i & 0x7) << 18); + ctxt->charset = XML_CHAR_ENCODING_UTF8; + + lastError = 0; + c = xmlCurrentChar(ctxt, &len); + + /* + * if fifth bit of first char is set, then the sequence would need + * at least 5 bytes, but we give only 4 ! + */ + if ((i & 0xF8) == 0xF8) { + if (lastError != XML_ERR_INVALID_CHAR) + fprintf(stderr, + "Failed to detect invalid char for Bytes 0x%02X 0x%02X 0x%02X 0x%02X\n", + i, j, K, data[3]); + } + + /* + * The second, third and fourth bytes must start with 10 + */ + else if (((j & 0xC0) != 0x80) || ((K & 0xC0) != 0x80) || + ((L & 0xC0) != 0x80)) { + if (lastError != XML_ERR_INVALID_CHAR) + fprintf(stderr, + "Failed to detect invalid char for Bytes 0x%02X 0x%02X 0x%02X 0x%02X\n", + i, j, K, L); + } + + /* + * if using a 3 byte encoding then the value must be greater + * than 0x10000, i.e. one of bits 3 to 0 of i must be set or + * the 6 or 5th byte of j must be set + */ + else if (((i & 0x7) == 0) && ((j & 0x30) == 0)) { + if (lastError != XML_ERR_INVALID_CHAR) + fprintf(stderr, + "Failed to detect invalid char for Bytes 0x%02X 0x%02X 0x%02X 0x%02X\n", + i, j, K, L); + } + + /* + * There are values in that range that are not allowed in XML-1.0 + */ + else if (((value > 0xD7FF) && (value <0xE000)) || + ((value > 0xFFFD) && (value <0x10000)) || + (value > 0x10FFFF)) { + if (lastError != XML_ERR_INVALID_CHAR) + fprintf(stderr, +"Failed to detect invalid char 0x%04X for Bytes 0x%02X 0x%02X 0x%02X 0x%02X\n", + value, i, j, K, L); + } + + /* + * We should see no error in remaining cases + */ + else if ((lastError != 0) || (len != 4)) { + fprintf(stderr, + "Failed to parse char for Bytes 0x%02X 0x%02X 0x%02X\n", + i, j, K); + } + + /* + * Finally check the value is right + */ + else if (c != value) { + fprintf(stderr, + "Failed to parse char for Bytes 0x%02X 0x%02X 0x%02X: expect %d got %d\n", + i, j, data[2], value, c); + } + } + } + } + } +} + +/** + * testCharRanges: + * + * Test the correct UTF8 character parsing in isolation i.e. + * not when parsing a full document, this is less expensive and we can + * cover the full range of UTF-8 chars accepted by XML-1.0 + */ + +static void testCharRanges(void) { + char data[5]; + xmlParserCtxtPtr ctxt; + xmlParserInputBufferPtr buf; + xmlParserInputPtr input; + + memset(data, 0, 5); + + /* + * Set up a parsing context using the above data buffer as + * the current input source. + */ + ctxt = xmlNewParserCtxt(); + if (ctxt == NULL) { + fprintf(stderr, "Failed to allocate parser context\n"); + return; + } + buf = xmlParserInputBufferCreateStatic(data, sizeof(data), + XML_CHAR_ENCODING_NONE); + if (buf == NULL) { + fprintf(stderr, "Failed to allocate input buffer\n"); + goto error; + } + input = xmlNewInputStream(ctxt); + if (input == NULL) { + xmlFreeParserInputBuffer(buf); + goto error; + } + input->filename = NULL; + input->buf = buf; + input->cur = + input->base = xmlBufContent(input->buf->buffer); + input->end = input->base + 4; + inputPush(ctxt, input); + + printf("testing char range: 1"); + fflush(stdout); + testCharRangeByte1(ctxt, data); + printf(" 2"); + fflush(stdout); + testCharRangeByte2(ctxt, data); + printf(" 3"); + fflush(stdout); + testCharRangeByte3(ctxt, data); + printf(" 4"); + fflush(stdout); + testCharRangeByte4(ctxt, data); + printf(" done\n"); + fflush(stdout); + +error: + xmlFreeParserCtxt(ctxt); +} + +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 + + /* + * Catch errors separately + */ + + xmlSetStructuredErrorFunc(NULL, errorHandler); + + /* + * Run the tests + */ + testCharRanges(); + testDocumentRanges(); + + /* + * Cleanup function for the XML library. + */ + xmlCleanupParser(); + /* + * this is to debug memory for regression tests + */ + xmlMemoryDump(); + return(0); +} diff --git a/testdict.c b/testdict.c new file mode 100644 index 0000000..40bebd0 --- /dev/null +++ b/testdict.c @@ -0,0 +1,444 @@ +#include +#include +#include + +/* #define WITH_PRINT */ + +static const char *seeds1[] = { + "a", "b", "c", + "d", "e", "f", + "g", "h", "i", + "j", "k", "l", + + NULL +}; + +static const char *seeds2[] = { + "m", "n", "o", + "p", "q", "r", + "s", "t", "u", + "v", "w", "x", + + NULL +}; + +#define NB_STRINGS_NS 100 +#define NB_STRINGS_MAX 10000 +#define NB_STRINGS_MIN 10 + +static xmlChar *strings1[NB_STRINGS_MAX]; +static xmlChar *strings2[NB_STRINGS_MAX]; +static const xmlChar *test1[NB_STRINGS_MAX]; +static const xmlChar *test2[NB_STRINGS_MAX]; +static int nbErrors = 0; + +static void fill_strings(void) { + int i, j, k; + + /* + * That's a bit nasty but the output is fine and it doesn't take hours + * there is a small but sufficient number of duplicates, and we have + * ":xxx" and full QNames in the last NB_STRINGS_NS values + */ + for (i = 0; seeds1[i] != NULL; i++) { + strings1[i] = xmlStrdup((const xmlChar *) seeds1[i]); + if (strings1[i] == NULL) { + fprintf(stderr, "Out of memory while generating strings1\n"); + exit(1); + } + } + for (j = 0, k = 0;i < NB_STRINGS_MAX - NB_STRINGS_NS;i++,j++) { + strings1[i] = xmlStrncatNew(strings1[j], strings1[k], -1); + if (strings1[i] == NULL) { + fprintf(stderr, "Out of memory while generating strings1\n"); + exit(1); + } + if (j >= 50) { + j = 0; + k++; + } + } + for (j = 0; (j < 50) && (i < NB_STRINGS_MAX); i++, j+=2) { + strings1[i] = xmlStrncatNew(strings1[j], (const xmlChar *) ":", -1); + if (strings1[i] == NULL) { + fprintf(stderr, "Out of memory while generating strings1\n"); + exit(1); + } + } + for (j = NB_STRINGS_MAX - NB_STRINGS_NS, k = 0; + i < NB_STRINGS_MAX;i++,j++) { + strings1[i] = xmlStrncatNew(strings1[j], strings1[k], -1); + if (strings1[i] == NULL) { + fprintf(stderr, "Out of memory while generating strings1\n"); + exit(1); + } + k += 3; + if (k >= 50) k = 0; + } + + /* + * Now do the same with the second pool of strings + */ + for (i = 0; seeds2[i] != NULL; i++) { + strings2[i] = xmlStrdup((const xmlChar *) seeds2[i]); + if (strings2[i] == NULL) { + fprintf(stderr, "Out of memory while generating strings2\n"); + exit(1); + } + } + for (j = 0, k = 0;i < NB_STRINGS_MAX - NB_STRINGS_NS;i++,j++) { + strings2[i] = xmlStrncatNew(strings2[j], strings2[k], -1); + if (strings2[i] == NULL) { + fprintf(stderr, "Out of memory while generating strings2\n"); + exit(1); + } + if (j >= 50) { + j = 0; + k++; + } + } + for (j = 0; (j < 50) && (i < NB_STRINGS_MAX); i++, j+=2) { + strings2[i] = xmlStrncatNew(strings2[j], (const xmlChar *) ":", -1); + if (strings2[i] == NULL) { + fprintf(stderr, "Out of memory while generating strings2\n"); + exit(1); + } + } + for (j = NB_STRINGS_MAX - NB_STRINGS_NS, k = 0; + i < NB_STRINGS_MAX;i++,j++) { + strings2[i] = xmlStrncatNew(strings2[j], strings2[k], -1); + if (strings2[i] == NULL) { + fprintf(stderr, "Out of memory while generating strings2\n"); + exit(1); + } + k += 3; + if (k >= 50) k = 0; + } + +} + +#ifdef WITH_PRINT +static void print_strings(void) { + int i; + + for (i = 0; i < NB_STRINGS_MAX;i++) { + printf("%s\n", strings1[i]); + } + for (i = 0; i < NB_STRINGS_MAX;i++) { + printf("%s\n", strings2[i]); + } +} +#endif + +static void clean_strings(void) { + int i; + + for (i = 0; i < NB_STRINGS_MAX; i++) { + if (strings1[i] != NULL) /* really should not happen */ + xmlFree(strings1[i]); + } + for (i = 0; i < NB_STRINGS_MAX; i++) { + if (strings2[i] != NULL) /* really should not happen */ + xmlFree(strings2[i]); + } +} + +/* + * This tests the sub-dictionary support + */ +static int run_test2(xmlDictPtr parent) { + int i, j; + xmlDictPtr dict; + int ret = 0; + xmlChar prefix[40]; + xmlChar *cur, *pref; + const xmlChar *tmp; + + dict = xmlDictCreateSub(parent); + if (dict == NULL) { + fprintf(stderr, "Out of memory while creating sub-dictionary\n"); + exit(1); + } + memset(test2, 0, sizeof(test2)); + + /* + * Fill in NB_STRINGS_MIN, at this point the dictionary should not grow + * and we allocate all those doing the fast key computations + * All the strings are based on a different seeds subset so we know + * they are allocated in the main dictionary, not coming from the parent + */ + for (i = 0;i < NB_STRINGS_MIN;i++) { + test2[i] = xmlDictLookup(dict, strings2[i], -1); + if (test2[i] == NULL) { + fprintf(stderr, "Failed lookup for '%s'\n", strings2[i]); + ret = 1; + nbErrors++; + } + } + j = NB_STRINGS_MAX - NB_STRINGS_NS; + /* ":foo" like strings2 */ + for (i = 0;i < NB_STRINGS_MIN;i++, j++) { + test2[j] = xmlDictLookup(dict, strings2[j], xmlStrlen(strings2[j])); + if (test2[j] == NULL) { + fprintf(stderr, "Failed lookup for '%s'\n", strings2[j]); + ret = 1; + nbErrors++; + } + } + /* "a:foo" like strings2 */ + j = NB_STRINGS_MAX - NB_STRINGS_MIN; + for (i = 0;i < NB_STRINGS_MIN;i++, j++) { + test2[j] = xmlDictLookup(dict, strings2[j], xmlStrlen(strings2[j])); + if (test2[j] == NULL) { + fprintf(stderr, "Failed lookup for '%s'\n", strings2[j]); + ret = 1; + nbErrors++; + } + } + + /* + * At this point allocate all the strings + * the dictionary will grow in the process, reallocate more string tables + * and switch to the better key generator + */ + for (i = 0;i < NB_STRINGS_MAX;i++) { + if (test2[i] != NULL) + continue; + test2[i] = xmlDictLookup(dict, strings2[i], -1); + if (test2[i] == NULL) { + fprintf(stderr, "Failed lookup for '%s'\n", strings2[i]); + ret = 1; + nbErrors++; + } + } + + /* + * Now we can start to test things, first that all strings2 belongs to + * the dict, and that none of them was actually allocated in the parent + */ + for (i = 0;i < NB_STRINGS_MAX;i++) { + if (!xmlDictOwns(dict, test2[i])) { + fprintf(stderr, "Failed ownership failure for '%s'\n", + strings2[i]); + ret = 1; + nbErrors++; + } + if (xmlDictOwns(parent, test2[i])) { + fprintf(stderr, "Failed parent ownership failure for '%s'\n", + strings2[i]); + ret = 1; + nbErrors++; + } + } + + /* + * Also verify that all strings from the parent are seen from the subdict + */ + for (i = 0;i < NB_STRINGS_MAX;i++) { + if (!xmlDictOwns(dict, test1[i])) { + fprintf(stderr, "Failed sub-ownership failure for '%s'\n", + strings1[i]); + ret = 1; + nbErrors++; + } + } + + /* + * Then that another lookup to the string in sub will return the same + */ + for (i = 0;i < NB_STRINGS_MAX;i++) { + if (xmlDictLookup(dict, strings2[i], -1) != test2[i]) { + fprintf(stderr, "Failed re-lookup check for %d, '%s'\n", + i, strings2[i]); + ret = 1; + nbErrors++; + } + } + /* + * But also that any lookup for a string in the parent will be provided + * as in the parent + */ + for (i = 0;i < NB_STRINGS_MAX;i++) { + if (xmlDictLookup(dict, strings1[i], -1) != test1[i]) { + fprintf(stderr, "Failed parent string lookup check for %d, '%s'\n", + i, strings1[i]); + ret = 1; + nbErrors++; + } + } + + /* + * check the QName lookups + */ + for (i = NB_STRINGS_MAX - NB_STRINGS_NS;i < NB_STRINGS_MAX;i++) { + cur = strings2[i]; + pref = &prefix[0]; + while (*cur != ':') *pref++ = *cur++; + cur++; + *pref = 0; + tmp = xmlDictQLookup(dict, &prefix[0], cur); + if (tmp != test2[i]) { + fprintf(stderr, "Failed lookup check for '%s':'%s'\n", + &prefix[0], cur); + ret = 1; + nbErrors++; + } + } + /* + * check the QName lookups for strings from the parent + */ + for (i = NB_STRINGS_MAX - NB_STRINGS_NS;i < NB_STRINGS_MAX;i++) { + cur = strings1[i]; + pref = &prefix[0]; + while (*cur != ':') *pref++ = *cur++; + cur++; + *pref = 0; + tmp = xmlDictQLookup(dict, &prefix[0], cur); + if (xmlDictQLookup(dict, &prefix[0], cur) != test1[i]) { + fprintf(stderr, "Failed parent lookup check for '%s':'%s'\n", + &prefix[0], cur); + ret = 1; + nbErrors++; + } + } + + xmlDictFree(dict); + return(ret); +} + +/* + * Test a single dictionary + */ +static int run_test1(void) { + int i, j; + xmlDictPtr dict; + int ret = 0; + xmlChar prefix[40]; + xmlChar *cur, *pref; + const xmlChar *tmp; + + dict = xmlDictCreate(); + if (dict == NULL) { + fprintf(stderr, "Out of memory while creating dictionary\n"); + exit(1); + } + memset(test1, 0, sizeof(test1)); + + /* + * Fill in NB_STRINGS_MIN, at this point the dictionary should not grow + * and we allocate all those doing the fast key computations + */ + for (i = 0;i < NB_STRINGS_MIN;i++) { + test1[i] = xmlDictLookup(dict, strings1[i], -1); + if (test1[i] == NULL) { + fprintf(stderr, "Failed lookup for '%s'\n", strings1[i]); + ret = 1; + nbErrors++; + } + } + j = NB_STRINGS_MAX - NB_STRINGS_NS; + /* ":foo" like strings1 */ + for (i = 0;i < NB_STRINGS_MIN;i++, j++) { + test1[j] = xmlDictLookup(dict, strings1[j], xmlStrlen(strings1[j])); + if (test1[j] == NULL) { + fprintf(stderr, "Failed lookup for '%s'\n", strings1[j]); + ret = 1; + nbErrors++; + } + } + /* "a:foo" like strings1 */ + j = NB_STRINGS_MAX - NB_STRINGS_MIN; + for (i = 0;i < NB_STRINGS_MIN;i++, j++) { + test1[j] = xmlDictLookup(dict, strings1[j], xmlStrlen(strings1[j])); + if (test1[j] == NULL) { + fprintf(stderr, "Failed lookup for '%s'\n", strings1[j]); + ret = 1; + nbErrors++; + } + } + + /* + * At this point allocate all the strings + * the dictionary will grow in the process, reallocate more string tables + * and switch to the better key generator + */ + for (i = 0;i < NB_STRINGS_MAX;i++) { + if (test1[i] != NULL) + continue; + test1[i] = xmlDictLookup(dict, strings1[i], -1); + if (test1[i] == NULL) { + fprintf(stderr, "Failed lookup for '%s'\n", strings1[i]); + ret = 1; + nbErrors++; + } + } + + /* + * Now we can start to test things, first that all strings1 belongs to + * the dict + */ + for (i = 0;i < NB_STRINGS_MAX;i++) { + if (!xmlDictOwns(dict, test1[i])) { + fprintf(stderr, "Failed ownership failure for '%s'\n", + strings1[i]); + ret = 1; + nbErrors++; + } + } + + /* + * Then that another lookup to the string will return the same + */ + for (i = 0;i < NB_STRINGS_MAX;i++) { + if (xmlDictLookup(dict, strings1[i], -1) != test1[i]) { + fprintf(stderr, "Failed re-lookup check for %d, '%s'\n", + i, strings1[i]); + ret = 1; + nbErrors++; + } + } + + /* + * More complex, check the QName lookups + */ + for (i = NB_STRINGS_MAX - NB_STRINGS_NS;i < NB_STRINGS_MAX;i++) { + cur = strings1[i]; + pref = &prefix[0]; + while (*cur != ':') *pref++ = *cur++; + cur++; + *pref = 0; + tmp = xmlDictQLookup(dict, &prefix[0], cur); + if (tmp != test1[i]) { + fprintf(stderr, "Failed lookup check for '%s':'%s'\n", + &prefix[0], cur); + ret = 1; + nbErrors++; + } + } + + run_test2(dict); + + xmlDictFree(dict); + return(ret); +} + +int main(void) +{ + int ret; + + LIBXML_TEST_VERSION + fill_strings(); +#ifdef WITH_PRINT + print_strings(); +#endif + ret = run_test1(); + if (ret == 0) { + printf("dictionary tests succeeded %d strings\n", 2 * NB_STRINGS_MAX); + } else { + printf("dictionary tests failed with %d errors\n", nbErrors); + } + clean_strings(); + xmlCleanupParser(); + xmlMemoryDump(); + return(ret); +} diff --git a/testdso.c b/testdso.c new file mode 100644 index 0000000..bd4ff08 --- /dev/null +++ b/testdso.c @@ -0,0 +1,12 @@ +#include + +#define IN_LIBXML +#include "libxml/xmlexports.h" + +XMLPUBFUN int hello_world(void); + +int hello_world(void) +{ + printf("Success!\n"); + return 0; +} diff --git a/testlimits.c b/testlimits.c new file mode 100644 index 0000000..577f593 --- /dev/null +++ b/testlimits.c @@ -0,0 +1,1637 @@ +/* + * testlimits.c: C program to run libxml2 regression tests checking various + * limits in document size. Will consume a lot of RAM and CPU cycles + * + * To compile on Unixes: + * cc -o testlimits `xml2-config --cflags` testlimits.c `xml2-config --libs` -lpthread + * + * See Copyright for the status of this software. + * + * daniel@veillard.com + */ + +#include "libxml.h" +#include + +#if !defined(_WIN32) || defined(__CYGWIN__) +#include +#endif +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#ifdef LIBXML_READER_ENABLED +#include +#endif + +static int verbose = 0; +static int tests_quiet = 0; + +/************************************************************************ + * * + * time handling * + * * + ************************************************************************/ + +/* maximum time for one parsing before declaring a timeout */ +#define MAX_TIME 2 /* seconds */ + +static clock_t t0; +int timeout = 0; + +static void reset_timout(void) { + timeout = 0; + t0 = clock(); +} + +static int check_time(void) { + clock_t tnow = clock(); + if (((tnow - t0) / CLOCKS_PER_SEC) > MAX_TIME) { + timeout = 1; + return(0); + } + return(1); +} + +/************************************************************************ + * * + * Huge document generator * + * * + ************************************************************************/ + +#include + +/* + * Huge documents are built using fixed start and end chunks + * and filling between the two an unconventional amount of char data + */ +typedef struct hugeTest hugeTest; +typedef hugeTest *hugeTestPtr; +struct hugeTest { + const char *description; + const char *name; + const char *start; + const char *end; +}; + +static struct hugeTest hugeTests[] = { + { "Huge text node", "huge:textNode", "", "" }, + { "Huge attribute node", "huge:attrNode", "" }, + { "Huge comment node", "huge:commentNode", "" }, + { "Huge PI node", "huge:piNode", "" }, +}; + +static const char *current; +static int rlen; +static unsigned int currentTest = 0; +static int instate = 0; + +/** + * hugeMatch: + * @URI: an URI to test + * + * Check for an huge: query + * + * Returns 1 if yes and 0 if another Input module should be used + */ +static int +hugeMatch(const char * URI) { + if ((URI != NULL) && (!strncmp(URI, "huge:", 5))) + return(1); + return(0); +} + +/** + * hugeOpen: + * @URI: an URI to test + * + * Return a pointer to the huge: query handler, in this example simply + * the current pointer... + * + * Returns an Input context or NULL in case or error + */ +static void * +hugeOpen(const char * URI) { + if ((URI == NULL) || (strncmp(URI, "huge:", 5))) + return(NULL); + + for (currentTest = 0;currentTest < sizeof(hugeTests)/sizeof(hugeTests[0]); + currentTest++) + if (!strcmp(hugeTests[currentTest].name, URI)) + goto found; + + return(NULL); + +found: + rlen = strlen(hugeTests[currentTest].start); + current = hugeTests[currentTest].start; + instate = 0; + return((void *) current); +} + +/** + * hugeClose: + * @context: the read context + * + * Close the huge: query handler + * + * Returns 0 or -1 in case of error + */ +static int +hugeClose(void * context) { + if (context == NULL) return(-1); + fprintf(stderr, "\n"); + return(0); +} + +#define CHUNK 4096 + +char filling[CHUNK + 1]; + +static void fillFilling(void) { + int i; + + for (i = 0;i < CHUNK;i++) { + filling[i] = 'a'; + } + filling[CHUNK] = 0; +} + +size_t maxlen = 64 * 1024 * 1024; +size_t curlen = 0; +size_t dotlen; + +/** + * hugeRead: + * @context: the read context + * @buffer: where to store data + * @len: number of bytes to read + * + * Implement an huge: query read. + * + * Returns the number of bytes read or -1 in case of error + */ +static int +hugeRead(void *context, char *buffer, int len) +{ + if ((context == NULL) || (buffer == NULL) || (len < 0)) + return (-1); + + if (instate == 0) { + if (len >= rlen) { + len = rlen; + rlen = 0; + memcpy(buffer, current, len); + instate = 1; + curlen = 0; + dotlen = maxlen / 10; + } else { + memcpy(buffer, current, len); + rlen -= len; + current += len; + } + } else if (instate == 2) { + if (len >= rlen) { + len = rlen; + rlen = 0; + memcpy(buffer, current, len); + instate = 3; + curlen = 0; + } else { + memcpy(buffer, current, len); + rlen -= len; + current += len; + } + } else if (instate == 1) { + if (len > CHUNK) len = CHUNK; + memcpy(buffer, &filling[0], len); + curlen += len; + if (curlen >= maxlen) { + rlen = strlen(hugeTests[currentTest].end); + current = hugeTests[currentTest].end; + instate = 2; + } else { + if (curlen > dotlen) { + fprintf(stderr, "."); + dotlen += maxlen / 10; + } + } + } else + len = 0; + return (len); +} + +/************************************************************************ + * * + * Crazy document generator * + * * + ************************************************************************/ + +unsigned int crazy_indx = 0; + +const char *crazy = "\ +\ +\ +\ +\ +\ +\ +]>\ +\ +\ +\ +\ +\ +foo\ +\ +\ +\ +"; + +/** + * crazyMatch: + * @URI: an URI to test + * + * Check for a crazy: query + * + * Returns 1 if yes and 0 if another Input module should be used + */ +static int +crazyMatch(const char * URI) { + if ((URI != NULL) && (!strncmp(URI, "crazy:", 6))) + return(1); + return(0); +} + +/** + * crazyOpen: + * @URI: an URI to test + * + * Return a pointer to the crazy: query handler, in this example simply + * the current pointer... + * + * Returns an Input context or NULL in case or error + */ +static void * +crazyOpen(const char * URI) { + if ((URI == NULL) || (strncmp(URI, "crazy:", 6))) + return(NULL); + + if (crazy_indx > strlen(crazy)) + return(NULL); + reset_timout(); + rlen = crazy_indx; + current = &crazy[0]; + instate = 0; + return((void *) current); +} + +/** + * crazyClose: + * @context: the read context + * + * Close the crazy: query handler + * + * Returns 0 or -1 in case of error + */ +static int +crazyClose(void * context) { + if (context == NULL) return(-1); + return(0); +} + + +/** + * crazyRead: + * @context: the read context + * @buffer: where to store data + * @len: number of bytes to read + * + * Implement an crazy: query read. + * + * Returns the number of bytes read or -1 in case of error + */ +static int +crazyRead(void *context, char *buffer, int len) +{ + if ((context == NULL) || (buffer == NULL) || (len < 0)) + return (-1); + + if ((check_time() <= 0) && (instate == 1)) { + fprintf(stderr, "\ntimeout in crazy(%d)\n", crazy_indx); + rlen = strlen(crazy) - crazy_indx; + current = &crazy[crazy_indx]; + instate = 2; + } + if (instate == 0) { + if (len >= rlen) { + len = rlen; + rlen = 0; + memcpy(buffer, current, len); + instate = 1; + curlen = 0; + } else { + memcpy(buffer, current, len); + rlen -= len; + current += len; + } + } else if (instate == 2) { + if (len >= rlen) { + len = rlen; + rlen = 0; + memcpy(buffer, current, len); + instate = 3; + curlen = 0; + } else { + memcpy(buffer, current, len); + rlen -= len; + current += len; + } + } else if (instate == 1) { + if (len > CHUNK) len = CHUNK; + memcpy(buffer, &filling[0], len); + curlen += len; + if (curlen >= maxlen) { + rlen = strlen(crazy) - crazy_indx; + current = &crazy[crazy_indx]; + instate = 2; + } + } else + len = 0; + return (len); +} +/************************************************************************ + * * + * Libxml2 specific routines * + * * + ************************************************************************/ + +static int nb_tests = 0; +static int nb_errors = 0; +static int nb_leaks = 0; +static int extraMemoryFromResolver = 0; + +/* + * We need to trap calls to the resolver to not account memory for the catalog + * which is shared to the current running test. We also don't want to have + * network downloads modifying tests. + */ +static xmlParserInputPtr +testExternalEntityLoader(const char *URL, const char *ID, + xmlParserCtxtPtr ctxt) { + xmlParserInputPtr ret; + int memused = xmlMemUsed(); + + ret = xmlNoNetExternalEntityLoader(URL, ID, ctxt); + extraMemoryFromResolver += xmlMemUsed() - memused; + + return(ret); +} + +/* + * Trapping the error messages at the generic level to grab the equivalent of + * stderr messages on CLI tools. + */ +static char testErrors[32769]; +static int testErrorsSize = 0; + +static void XMLCDECL +channel(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...) { + va_list args; + int res; + + if (testErrorsSize >= 32768) + return; + va_start(args, msg); + res = vsnprintf(&testErrors[testErrorsSize], + 32768 - testErrorsSize, + msg, args); + va_end(args); + if (testErrorsSize + res >= 32768) { + /* buffer is full */ + testErrorsSize = 32768; + testErrors[testErrorsSize] = 0; + } else { + testErrorsSize += res; + } + testErrors[testErrorsSize] = 0; +} + +/** + * xmlParserPrintFileContext: + * @input: an xmlParserInputPtr input + * + * Displays current context within the input content for error tracking + */ + +static void +xmlParserPrintFileContextInternal(xmlParserInputPtr input , + xmlGenericErrorFunc chanl, void *data ) { + const xmlChar *cur, *base; + unsigned int n, col; /* GCC warns if signed, because compared with sizeof() */ + xmlChar content[81]; /* space for 80 chars + line terminator */ + xmlChar *ctnt; + + if (input == NULL) return; + cur = input->cur; + base = input->base; + /* skip backwards over any end-of-lines */ + while ((cur > base) && ((*(cur) == '\n') || (*(cur) == '\r'))) { + cur--; + } + n = 0; + /* search backwards for beginning-of-line (to max buff size) */ + while ((n++ < (sizeof(content)-1)) && (cur > base) && + (*(cur) != '\n') && (*(cur) != '\r')) + cur--; + if ((*(cur) == '\n') || (*(cur) == '\r')) cur++; + /* calculate the error position in terms of the current position */ + col = input->cur - cur; + /* search forward for end-of-line (to max buff size) */ + n = 0; + ctnt = content; + /* copy selected text to our buffer */ + while ((*cur != 0) && (*(cur) != '\n') && + (*(cur) != '\r') && (n < sizeof(content)-1)) { + *ctnt++ = *cur++; + n++; + } + *ctnt = 0; + /* print out the selected text */ + chanl(data ,"%s\n", content); + /* create blank line with problem pointer */ + n = 0; + ctnt = content; + /* (leave buffer space for pointer + line terminator) */ + while ((nfile; + line = err->line; + code = err->code; + domain = err->domain; + level = err->level; + node = err->node; + if ((domain == XML_FROM_PARSER) || (domain == XML_FROM_HTML) || + (domain == XML_FROM_DTD) || (domain == XML_FROM_NAMESPACE) || + (domain == XML_FROM_IO) || (domain == XML_FROM_VALID)) { + ctxt = err->ctxt; + } + str = err->message; + + if (code == XML_ERR_OK) + return; + + if ((node != NULL) && (node->type == XML_ELEMENT_NODE)) + name = node->name; + + /* + * Maintain the compatibility with the legacy error handling + */ + if (ctxt != NULL) { + input = ctxt->input; + if ((input != NULL) && (input->filename == NULL) && + (ctxt->inputNr > 1)) { + cur = input; + input = ctxt->inputTab[ctxt->inputNr - 2]; + } + if (input != NULL) { + if (input->filename) + channel(data, "%s:%d: ", input->filename, input->line); + else if ((line != 0) && (domain == XML_FROM_PARSER)) + channel(data, "Entity: line %d: ", input->line); + } + } else { + if (file != NULL) + channel(data, "%s:%d: ", file, line); + else if ((line != 0) && (domain == XML_FROM_PARSER)) + channel(data, "Entity: line %d: ", line); + } + if (name != NULL) { + channel(data, "element %s: ", name); + } + if (code == XML_ERR_OK) + return; + switch (domain) { + case XML_FROM_PARSER: + channel(data, "parser "); + break; + case XML_FROM_NAMESPACE: + channel(data, "namespace "); + break; + case XML_FROM_DTD: + case XML_FROM_VALID: + channel(data, "validity "); + break; + case XML_FROM_HTML: + channel(data, "HTML parser "); + break; + case XML_FROM_MEMORY: + channel(data, "memory "); + break; + case XML_FROM_OUTPUT: + channel(data, "output "); + break; + case XML_FROM_IO: + channel(data, "I/O "); + break; + case XML_FROM_XINCLUDE: + channel(data, "XInclude "); + break; + case XML_FROM_XPATH: + channel(data, "XPath "); + break; + case XML_FROM_XPOINTER: + channel(data, "parser "); + break; + case XML_FROM_REGEXP: + channel(data, "regexp "); + break; + case XML_FROM_MODULE: + channel(data, "module "); + break; + case XML_FROM_SCHEMASV: + channel(data, "Schemas validity "); + break; + case XML_FROM_SCHEMASP: + channel(data, "Schemas parser "); + break; + case XML_FROM_RELAXNGP: + channel(data, "Relax-NG parser "); + break; + case XML_FROM_RELAXNGV: + channel(data, "Relax-NG validity "); + break; + case XML_FROM_CATALOG: + channel(data, "Catalog "); + break; + case XML_FROM_C14N: + channel(data, "C14N "); + break; + case XML_FROM_XSLT: + channel(data, "XSLT "); + break; + default: + break; + } + if (code == XML_ERR_OK) + return; + switch (level) { + case XML_ERR_NONE: + channel(data, ": "); + break; + case XML_ERR_WARNING: + channel(data, "warning : "); + break; + case XML_ERR_ERROR: + channel(data, "error : "); + break; + case XML_ERR_FATAL: + channel(data, "error : "); + break; + } + if (code == XML_ERR_OK) + return; + if (str != NULL) { + int len; + len = xmlStrlen((const xmlChar *)str); + if ((len > 0) && (str[len - 1] != '\n')) + channel(data, "%s\n", str); + else + channel(data, "%s", str); + } else { + channel(data, "%s\n", "out of memory error"); + } + if (code == XML_ERR_OK) + return; + + if (ctxt != NULL) { + xmlParserPrintFileContextInternal(input, channel, data); + if (cur != NULL) { + if (cur->filename) + channel(data, "%s:%d: \n", cur->filename, cur->line); + else if ((line != 0) && (domain == XML_FROM_PARSER)) + channel(data, "Entity: line %d: \n", cur->line); + xmlParserPrintFileContextInternal(cur, channel, data); + } + } + if ((domain == XML_FROM_XPATH) && (err->str1 != NULL) && + (err->int1 < 100) && + (err->int1 < xmlStrlen((const xmlChar *)err->str1))) { + xmlChar buf[150]; + int i; + + channel(data, "%s\n", err->str1); + for (i=0;i < err->int1;i++) + buf[i] = ' '; + buf[i++] = '^'; + buf[i] = 0; + channel(data, "%s\n", buf); + } +} + +static void +initializeLibxml2(void) { + xmlGetWarningsDefaultValue = 0; + xmlPedanticParserDefault(0); + + xmlMemSetup(xmlMemFree, xmlMemMalloc, xmlMemRealloc, xmlMemoryStrdup); + xmlInitParser(); + xmlSetExternalEntityLoader(testExternalEntityLoader); + xmlSetStructuredErrorFunc(NULL, testStructuredErrorHandler); + /* + * register the new I/O handlers + */ + if (xmlRegisterInputCallbacks(hugeMatch, hugeOpen, + hugeRead, hugeClose) < 0) { + fprintf(stderr, "failed to register Huge handlers\n"); + exit(1); + } + if (xmlRegisterInputCallbacks(crazyMatch, crazyOpen, + crazyRead, crazyClose) < 0) { + fprintf(stderr, "failed to register Crazy handlers\n"); + exit(1); + } +} + +/************************************************************************ + * * + * SAX empty callbacks * + * * + ************************************************************************/ + +unsigned long callbacks = 0; + +/** + * isStandaloneCallback: + * @ctxt: An XML parser context + * + * Is this document tagged standalone ? + * + * Returns 1 if true + */ +static int +isStandaloneCallback(void *ctx ATTRIBUTE_UNUSED) +{ + callbacks++; + return (0); +} + +/** + * hasInternalSubsetCallback: + * @ctxt: An XML parser context + * + * Does this document has an internal subset + * + * Returns 1 if true + */ +static int +hasInternalSubsetCallback(void *ctx ATTRIBUTE_UNUSED) +{ + callbacks++; + return (0); +} + +/** + * hasExternalSubsetCallback: + * @ctxt: An XML parser context + * + * Does this document has an external subset + * + * Returns 1 if true + */ +static int +hasExternalSubsetCallback(void *ctx ATTRIBUTE_UNUSED) +{ + callbacks++; + return (0); +} + +/** + * internalSubsetCallback: + * @ctxt: An XML parser context + * + * Does this document has an internal subset + */ +static void +internalSubsetCallback(void *ctx ATTRIBUTE_UNUSED, + const xmlChar * name ATTRIBUTE_UNUSED, + const xmlChar * ExternalID ATTRIBUTE_UNUSED, + const xmlChar * SystemID ATTRIBUTE_UNUSED) +{ + callbacks++; + return; +} + +/** + * externalSubsetCallback: + * @ctxt: An XML parser context + * + * Does this document has an external subset + */ +static void +externalSubsetCallback(void *ctx ATTRIBUTE_UNUSED, + const xmlChar * name ATTRIBUTE_UNUSED, + const xmlChar * ExternalID ATTRIBUTE_UNUSED, + const xmlChar * SystemID ATTRIBUTE_UNUSED) +{ + callbacks++; + return; +} + +/** + * resolveEntityCallback: + * @ctxt: An XML parser context + * @publicId: The public ID of the entity + * @systemId: The system ID of the entity + * + * Special entity resolver, better left to the parser, it has + * more context than the application layer. + * The default behaviour is to NOT resolve the entities, in that case + * the ENTITY_REF nodes are built in the structure (and the parameter + * values). + * + * Returns the xmlParserInputPtr if inlined or NULL for DOM behaviour. + */ +static xmlParserInputPtr +resolveEntityCallback(void *ctx ATTRIBUTE_UNUSED, + const xmlChar * publicId ATTRIBUTE_UNUSED, + const xmlChar * systemId ATTRIBUTE_UNUSED) +{ + callbacks++; + return (NULL); +} + +/** + * getEntityCallback: + * @ctxt: An XML parser context + * @name: The entity name + * + * Get an entity by name + * + * Returns the xmlParserInputPtr if inlined or NULL for DOM behaviour. + */ +static xmlEntityPtr +getEntityCallback(void *ctx ATTRIBUTE_UNUSED, + const xmlChar * name ATTRIBUTE_UNUSED) +{ + callbacks++; + return (NULL); +} + +/** + * getParameterEntityCallback: + * @ctxt: An XML parser context + * @name: The entity name + * + * Get a parameter entity by name + * + * Returns the xmlParserInputPtr + */ +static xmlEntityPtr +getParameterEntityCallback(void *ctx ATTRIBUTE_UNUSED, + const xmlChar * name ATTRIBUTE_UNUSED) +{ + callbacks++; + return (NULL); +} + + +/** + * entityDeclCallback: + * @ctxt: An XML parser context + * @name: the entity name + * @type: the entity type + * @publicId: The public ID of the entity + * @systemId: The system ID of the entity + * @content: the entity value (without processing). + * + * An entity definition has been parsed + */ +static void +entityDeclCallback(void *ctx ATTRIBUTE_UNUSED, + const xmlChar * name ATTRIBUTE_UNUSED, + int type ATTRIBUTE_UNUSED, + const xmlChar * publicId ATTRIBUTE_UNUSED, + const xmlChar * systemId ATTRIBUTE_UNUSED, + xmlChar * content ATTRIBUTE_UNUSED) +{ + callbacks++; + return; +} + +/** + * attributeDeclCallback: + * @ctxt: An XML parser context + * @name: the attribute name + * @type: the attribute type + * + * An attribute definition has been parsed + */ +static void +attributeDeclCallback(void *ctx ATTRIBUTE_UNUSED, + const xmlChar * elem ATTRIBUTE_UNUSED, + const xmlChar * name ATTRIBUTE_UNUSED, + int type ATTRIBUTE_UNUSED, int def ATTRIBUTE_UNUSED, + const xmlChar * defaultValue ATTRIBUTE_UNUSED, + xmlEnumerationPtr tree ATTRIBUTE_UNUSED) +{ + callbacks++; + return; +} + +/** + * elementDeclCallback: + * @ctxt: An XML parser context + * @name: the element name + * @type: the element type + * @content: the element value (without processing). + * + * An element definition has been parsed + */ +static void +elementDeclCallback(void *ctx ATTRIBUTE_UNUSED, + const xmlChar * name ATTRIBUTE_UNUSED, + int type ATTRIBUTE_UNUSED, + xmlElementContentPtr content ATTRIBUTE_UNUSED) +{ + callbacks++; + return; +} + +/** + * notationDeclCallback: + * @ctxt: An XML parser context + * @name: The name of the notation + * @publicId: The public ID of the entity + * @systemId: The system ID of the entity + * + * What to do when a notation declaration has been parsed. + */ +static void +notationDeclCallback(void *ctx ATTRIBUTE_UNUSED, + const xmlChar * name ATTRIBUTE_UNUSED, + const xmlChar * publicId ATTRIBUTE_UNUSED, + const xmlChar * systemId ATTRIBUTE_UNUSED) +{ + callbacks++; + return; +} + +/** + * unparsedEntityDeclCallback: + * @ctxt: An XML parser context + * @name: The name of the entity + * @publicId: The public ID of the entity + * @systemId: The system ID of the entity + * @notationName: the name of the notation + * + * What to do when an unparsed entity declaration is parsed + */ +static void +unparsedEntityDeclCallback(void *ctx ATTRIBUTE_UNUSED, + const xmlChar * name ATTRIBUTE_UNUSED, + const xmlChar * publicId ATTRIBUTE_UNUSED, + const xmlChar * systemId ATTRIBUTE_UNUSED, + const xmlChar * notationName ATTRIBUTE_UNUSED) +{ + callbacks++; + return; +} + +/** + * setDocumentLocatorCallback: + * @ctxt: An XML parser context + * @loc: A SAX Locator + * + * Receive the document locator at startup, actually xmlDefaultSAXLocator + * Everything is available on the context, so this is useless in our case. + */ +static void +setDocumentLocatorCallback(void *ctx ATTRIBUTE_UNUSED, + xmlSAXLocatorPtr loc ATTRIBUTE_UNUSED) +{ + callbacks++; + return; +} + +/** + * startDocumentCallback: + * @ctxt: An XML parser context + * + * called when the document start being processed. + */ +static void +startDocumentCallback(void *ctx ATTRIBUTE_UNUSED) +{ + callbacks++; + return; +} + +/** + * endDocumentCallback: + * @ctxt: An XML parser context + * + * called when the document end has been detected. + */ +static void +endDocumentCallback(void *ctx ATTRIBUTE_UNUSED) +{ + callbacks++; + return; +} + +#if 0 +/** + * startElementCallback: + * @ctxt: An XML parser context + * @name: The element name + * + * called when an opening tag has been processed. + */ +static void +startElementCallback(void *ctx ATTRIBUTE_UNUSED, + const xmlChar * name ATTRIBUTE_UNUSED, + const xmlChar ** atts ATTRIBUTE_UNUSED) +{ + callbacks++; + return; +} + +/** + * endElementCallback: + * @ctxt: An XML parser context + * @name: The element name + * + * called when the end of an element has been detected. + */ +static void +endElementCallback(void *ctx ATTRIBUTE_UNUSED, + const xmlChar * name ATTRIBUTE_UNUSED) +{ + callbacks++; + return; +} +#endif + +/** + * charactersCallback: + * @ctxt: An XML parser context + * @ch: a xmlChar string + * @len: the number of xmlChar + * + * receiving some chars from the parser. + * Question: how much at a time ??? + */ +static void +charactersCallback(void *ctx ATTRIBUTE_UNUSED, + const xmlChar * ch ATTRIBUTE_UNUSED, + int len ATTRIBUTE_UNUSED) +{ + callbacks++; + return; +} + +/** + * referenceCallback: + * @ctxt: An XML parser context + * @name: The entity name + * + * called when an entity reference is detected. + */ +static void +referenceCallback(void *ctx ATTRIBUTE_UNUSED, + const xmlChar * name ATTRIBUTE_UNUSED) +{ + callbacks++; + return; +} + +/** + * ignorableWhitespaceCallback: + * @ctxt: An XML parser context + * @ch: a xmlChar string + * @start: the first char in the string + * @len: the number of xmlChar + * + * receiving some ignorable whitespaces from the parser. + * Question: how much at a time ??? + */ +static void +ignorableWhitespaceCallback(void *ctx ATTRIBUTE_UNUSED, + const xmlChar * ch ATTRIBUTE_UNUSED, + int len ATTRIBUTE_UNUSED) +{ + callbacks++; + return; +} + +/** + * processingInstructionCallback: + * @ctxt: An XML parser context + * @target: the target name + * @data: the PI data's + * @len: the number of xmlChar + * + * A processing instruction has been parsed. + */ +static void +processingInstructionCallback(void *ctx ATTRIBUTE_UNUSED, + const xmlChar * target ATTRIBUTE_UNUSED, + const xmlChar * data ATTRIBUTE_UNUSED) +{ + callbacks++; + return; +} + +/** + * cdataBlockCallback: + * @ctx: the user data (XML parser context) + * @value: The pcdata content + * @len: the block length + * + * called when a pcdata block has been parsed + */ +static void +cdataBlockCallback(void *ctx ATTRIBUTE_UNUSED, + const xmlChar * value ATTRIBUTE_UNUSED, + int len ATTRIBUTE_UNUSED) +{ + callbacks++; + return; +} + +/** + * commentCallback: + * @ctxt: An XML parser context + * @value: the comment content + * + * A comment has been parsed. + */ +static void +commentCallback(void *ctx ATTRIBUTE_UNUSED, + const xmlChar * value ATTRIBUTE_UNUSED) +{ + callbacks++; + return; +} + +/** + * warningCallback: + * @ctxt: An XML parser context + * @msg: the message to display/transmit + * @...: extra parameters for the message display + * + * Display and format a warning messages, gives file, line, position and + * extra parameters. + */ +static void XMLCDECL +warningCallback(void *ctx ATTRIBUTE_UNUSED, + const char *msg ATTRIBUTE_UNUSED, ...) +{ + callbacks++; + return; +} + +/** + * errorCallback: + * @ctxt: An XML parser context + * @msg: the message to display/transmit + * @...: extra parameters for the message display + * + * Display and format a error messages, gives file, line, position and + * extra parameters. + */ +static void XMLCDECL +errorCallback(void *ctx ATTRIBUTE_UNUSED, const char *msg ATTRIBUTE_UNUSED, + ...) +{ + callbacks++; + return; +} + +/** + * fatalErrorCallback: + * @ctxt: An XML parser context + * @msg: the message to display/transmit + * @...: extra parameters for the message display + * + * Display and format a fatalError messages, gives file, line, position and + * extra parameters. + */ +static void XMLCDECL +fatalErrorCallback(void *ctx ATTRIBUTE_UNUSED, + const char *msg ATTRIBUTE_UNUSED, ...) +{ + return; +} + + +/* + * SAX2 specific callbacks + */ + +/** + * startElementNsCallback: + * @ctxt: An XML parser context + * @name: The element name + * + * called when an opening tag has been processed. + */ +static void +startElementNsCallback(void *ctx ATTRIBUTE_UNUSED, + const xmlChar * localname ATTRIBUTE_UNUSED, + const xmlChar * prefix ATTRIBUTE_UNUSED, + const xmlChar * URI ATTRIBUTE_UNUSED, + int nb_namespaces ATTRIBUTE_UNUSED, + const xmlChar ** namespaces ATTRIBUTE_UNUSED, + int nb_attributes ATTRIBUTE_UNUSED, + int nb_defaulted ATTRIBUTE_UNUSED, + const xmlChar ** attributes ATTRIBUTE_UNUSED) +{ + callbacks++; + return; +} + +/** + * endElementCallback: + * @ctxt: An XML parser context + * @name: The element name + * + * called when the end of an element has been detected. + */ +static void +endElementNsCallback(void *ctx ATTRIBUTE_UNUSED, + const xmlChar * localname ATTRIBUTE_UNUSED, + const xmlChar * prefix ATTRIBUTE_UNUSED, + const xmlChar * URI ATTRIBUTE_UNUSED) +{ + callbacks++; + return; +} + +static xmlSAXHandler callbackSAX2HandlerStruct = { + internalSubsetCallback, + isStandaloneCallback, + hasInternalSubsetCallback, + hasExternalSubsetCallback, + resolveEntityCallback, + getEntityCallback, + entityDeclCallback, + notationDeclCallback, + attributeDeclCallback, + elementDeclCallback, + unparsedEntityDeclCallback, + setDocumentLocatorCallback, + startDocumentCallback, + endDocumentCallback, + NULL, + NULL, + referenceCallback, + charactersCallback, + ignorableWhitespaceCallback, + processingInstructionCallback, + commentCallback, + warningCallback, + errorCallback, + fatalErrorCallback, + getParameterEntityCallback, + cdataBlockCallback, + externalSubsetCallback, + XML_SAX2_MAGIC, + NULL, + startElementNsCallback, + endElementNsCallback, + NULL +}; + +static xmlSAXHandlerPtr callbackSAX2Handler = &callbackSAX2HandlerStruct; + +/************************************************************************ + * * + * The tests front-ends * + * * + ************************************************************************/ + +/** + * readerTest: + * @filename: the file to parse + * @max_size: size of the limit to test + * @options: parsing options + * @fail: should a failure be reported + * + * Parse a memory generated file using SAX + * + * Returns 0 in case of success, an error code otherwise + */ +static int +saxTest(const char *filename, size_t limit, int options, int fail) { + int res = 0; + xmlParserCtxtPtr ctxt; + xmlDocPtr doc; + xmlSAXHandlerPtr old_sax; + + nb_tests++; + + maxlen = limit; + ctxt = xmlNewParserCtxt(); + if (ctxt == NULL) { + fprintf(stderr, "Failed to create parser context\n"); + return(1); + } + old_sax = ctxt->sax; + ctxt->sax = callbackSAX2Handler; + ctxt->userData = NULL; + doc = xmlCtxtReadFile(ctxt, filename, NULL, options); + + if (doc != NULL) { + fprintf(stderr, "SAX parsing generated a document !\n"); + xmlFreeDoc(doc); + res = 0; + } else if (ctxt->wellFormed == 0) { + if (fail) + res = 0; + else { + fprintf(stderr, "Failed to parse '%s' %lu\n", filename, limit); + res = 1; + } + } else { + if (fail) { + fprintf(stderr, "Failed to get failure for '%s' %lu\n", + filename, limit); + res = 1; + } else + res = 0; + } + ctxt->sax = old_sax; + xmlFreeParserCtxt(ctxt); + + return(res); +} +#ifdef LIBXML_READER_ENABLED +/** + * readerTest: + * @filename: the file to parse + * @max_size: size of the limit to test + * @options: parsing options + * @fail: should a failure be reported + * + * Parse a memory generated file using the xmlReader + * + * Returns 0 in case of success, an error code otherwise + */ +static int +readerTest(const char *filename, size_t limit, int options, int fail) { + xmlTextReaderPtr reader; + int res = 0; + int ret; + + nb_tests++; + + maxlen = limit; + reader = xmlReaderForFile(filename , NULL, options); + if (reader == NULL) { + fprintf(stderr, "Failed to open '%s' test\n", filename); + return(1); + } + ret = xmlTextReaderRead(reader); + while (ret == 1) { + ret = xmlTextReaderRead(reader); + } + if (ret != 0) { + if (fail) + res = 0; + else { + if (strncmp(filename, "crazy:", 6) == 0) + fprintf(stderr, "Failed to parse '%s' %u\n", + filename, crazy_indx); + else + fprintf(stderr, "Failed to parse '%s' %lu\n", + filename, limit); + res = 1; + } + } else { + if (fail) { + if (strncmp(filename, "crazy:", 6) == 0) + fprintf(stderr, "Failed to get failure for '%s' %u\n", + filename, crazy_indx); + else + fprintf(stderr, "Failed to get failure for '%s' %lu\n", + filename, limit); + res = 1; + } else + res = 0; + } + if (timeout) + res = 1; + xmlFreeTextReader(reader); + + return(res); +} +#endif + +/************************************************************************ + * * + * Tests descriptions * + * * + ************************************************************************/ + +typedef int (*functest) (const char *filename, size_t limit, int options, + int fail); + +typedef struct limitDesc limitDesc; +typedef limitDesc *limitDescPtr; +struct limitDesc { + const char *name; /* the huge generator name */ + size_t limit; /* the limit to test */ + int options; /* extra parser options */ + int fail; /* whether the test should fail */ +}; + +static limitDesc limitDescriptions[] = { + /* max length of a text node in content */ + {"huge:textNode", XML_MAX_TEXT_LENGTH - CHUNK, 0, 0}, + {"huge:textNode", XML_MAX_TEXT_LENGTH + CHUNK, 0, 1}, + {"huge:textNode", XML_MAX_TEXT_LENGTH + CHUNK, XML_PARSE_HUGE, 0}, + /* max length of a text node in content */ + {"huge:attrNode", XML_MAX_TEXT_LENGTH - CHUNK, 0, 0}, + {"huge:attrNode", XML_MAX_TEXT_LENGTH + CHUNK, 0, 1}, + {"huge:attrNode", XML_MAX_TEXT_LENGTH + CHUNK, XML_PARSE_HUGE, 0}, + /* max length of a comment node */ + {"huge:commentNode", XML_MAX_TEXT_LENGTH - CHUNK, 0, 0}, + {"huge:commentNode", XML_MAX_TEXT_LENGTH + CHUNK, 0, 1}, + {"huge:commentNode", XML_MAX_TEXT_LENGTH + CHUNK, XML_PARSE_HUGE, 0}, + /* max length of a PI node */ + {"huge:piNode", XML_MAX_TEXT_LENGTH - CHUNK, 0, 0}, + {"huge:piNode", XML_MAX_TEXT_LENGTH + CHUNK, 0, 1}, + {"huge:piNode", XML_MAX_TEXT_LENGTH + CHUNK, XML_PARSE_HUGE, 0}, +}; + +typedef struct testDesc testDesc; +typedef testDesc *testDescPtr; +struct testDesc { + const char *desc; /* descripton of the test */ + functest func; /* function implementing the test */ +}; + +static +testDesc testDescriptions[] = { + { "Parsing of huge files with the sax parser", saxTest}, +/* { "Parsing of huge files with the tree parser", treeTest}, */ +#ifdef LIBXML_READER_ENABLED + { "Parsing of huge files with the reader", readerTest}, +#endif + {NULL, NULL} +}; + +typedef struct testException testException; +typedef testException *testExceptionPtr; +struct testException { + unsigned int test; /* the parser test number */ + unsigned int limit; /* the limit test number */ + int fail; /* new fail value or -1*/ + size_t size; /* new limit value or 0 */ +}; + +static +testException testExceptions[] = { + /* the SAX parser doesn't hit a limit of XML_MAX_TEXT_LENGTH text nodes */ + { 0, 1, 0, 0}, +}; + +static int +launchTests(testDescPtr tst, unsigned int test) { + int res = 0, err = 0; + unsigned int i, j; + size_t limit; + int fail; + + if (tst == NULL) return(-1); + + for (i = 0;i < sizeof(limitDescriptions)/sizeof(limitDescriptions[0]);i++) { + limit = limitDescriptions[i].limit; + fail = limitDescriptions[i].fail; + /* + * Handle exceptions if any + */ + for (j = 0;j < sizeof(testExceptions)/sizeof(testExceptions[0]);j++) { + if ((testExceptions[j].test == test) && + (testExceptions[j].limit == i)) { + if (testExceptions[j].fail != -1) + fail = testExceptions[j].fail; + if (testExceptions[j].size != 0) + limit = testExceptions[j].size; + break; + } + } + res = tst->func(limitDescriptions[i].name, limit, + limitDescriptions[i].options, fail); + if (res != 0) { + nb_errors++; + err++; + } + } + return(err); +} + + +static int +runtest(unsigned int i) { + int ret = 0, res; + int old_errors, old_tests, old_leaks; + + old_errors = nb_errors; + old_tests = nb_tests; + old_leaks = nb_leaks; + if ((tests_quiet == 0) && (testDescriptions[i].desc != NULL)) + printf("## %s\n", testDescriptions[i].desc); + res = launchTests(&testDescriptions[i], i); + if (res != 0) + ret++; + if (verbose) { + if ((nb_errors == old_errors) && (nb_leaks == old_leaks)) + printf("Ran %d tests, no errors\n", nb_tests - old_tests); + else + printf("Ran %d tests, %d errors, %d leaks\n", + nb_tests - old_tests, + nb_errors - old_errors, + nb_leaks - old_leaks); + } + return(ret); +} + +static int +launchCrazySAX(unsigned int test, int fail) { + int res = 0, err = 0; + + crazy_indx = test; + + res = saxTest("crazy::test", XML_MAX_LOOKUP_LIMIT - CHUNK, 0, fail); + if (res != 0) { + nb_errors++; + err++; + } + if (tests_quiet == 0) + fprintf(stderr, "%c", crazy[test]); + + return(err); +} + +#ifdef LIBXML_READER_ENABLED +static int +launchCrazy(unsigned int test, int fail) { + int res = 0, err = 0; + + crazy_indx = test; + + res = readerTest("crazy::test", XML_MAX_LOOKUP_LIMIT - CHUNK, 0, fail); + if (res != 0) { + nb_errors++; + err++; + } + if (tests_quiet == 0) + fprintf(stderr, "%c", crazy[test]); + + return(err); +} +#endif + +static int get_crazy_fail(int test) { + /* + * adding 1000000 of character 'a' leads to parser failure mostly + * everywhere except in those special spots. Need to be updated + * each time crazy is updated + */ + int fail = 1; + if ((test == 44) || /* PI in Misc */ + ((test >= 50) && (test <= 55)) || /* Comment in Misc */ + (test == 79) || /* PI in DTD */ + ((test >= 85) && (test <= 90)) || /* Comment in DTD */ + (test == 154) || /* PI in Misc */ + ((test >= 160) && (test <= 165)) || /* Comment in Misc */ + ((test >= 178) && (test <= 181)) || /* attribute value */ + (test == 183) || /* Text */ + (test == 189) || /* PI in Content */ + (test == 191) || /* Text */ + ((test >= 195) && (test <= 200)) || /* Comment in Content */ + ((test >= 203) && (test <= 206)) || /* Text */ + (test == 215) || (test == 216) || /* in CDATA */ + (test == 219) || /* Text */ + (test == 231) || /* PI in Misc */ + ((test >= 237) && (test <= 242))) /* Comment in Misc */ + fail = 0; + return(fail); +} + +static int +runcrazy(void) { + int ret = 0, res = 0; + int old_errors, old_tests, old_leaks; + unsigned int i; + + old_errors = nb_errors; + old_tests = nb_tests; + old_leaks = nb_leaks; + +#ifdef LIBXML_READER_ENABLED + if (tests_quiet == 0) { + printf("## Crazy tests on reader\n"); + } + for (i = 0;i < strlen(crazy);i++) { + res += launchCrazy(i, get_crazy_fail(i)); + if (res != 0) + ret++; + } +#endif + + if (tests_quiet == 0) { + printf("\n## Crazy tests on SAX\n"); + } + for (i = 0;i < strlen(crazy);i++) { + res += launchCrazySAX(i, get_crazy_fail(i)); + if (res != 0) + ret++; + } + if (tests_quiet == 0) + fprintf(stderr, "\n"); + if (verbose) { + if ((nb_errors == old_errors) && (nb_leaks == old_leaks)) + printf("Ran %d tests, no errors\n", nb_tests - old_tests); + else + printf("Ran %d tests, %d errors, %d leaks\n", + nb_tests - old_tests, + nb_errors - old_errors, + nb_leaks - old_leaks); + } + return(ret); +} + + +int +main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) { + int i, a, ret = 0; + int subset = 0; + + fillFilling(); + initializeLibxml2(); + + for (a = 1; a < argc;a++) { + if (!strcmp(argv[a], "-v")) + verbose = 1; + else if (!strcmp(argv[a], "-quiet")) + tests_quiet = 1; + else if (!strcmp(argv[a], "-crazy")) + subset = 1; + } + if (subset == 0) { + for (i = 0; testDescriptions[i].func != NULL; i++) { + ret += runtest(i); + } + } + ret += runcrazy(); + if ((nb_errors == 0) && (nb_leaks == 0)) { + ret = 0; + printf("Total %d tests, no errors\n", + nb_tests); + } else { + ret = 1; + printf("Total %d tests, %d errors, %d leaks\n", + nb_tests, nb_errors, nb_leaks); + } + xmlCleanupParser(); + xmlMemoryDump(); + + return(ret); +} diff --git a/testrecurse.c b/testrecurse.c new file mode 100644 index 0000000..e5d5d1b --- /dev/null +++ b/testrecurse.c @@ -0,0 +1,965 @@ +/* + * testrecurse.c: C program to run libxml2 regression tests checking entities + * recursions + * + * To compile on Unixes: + * cc -o testrecurse `xml2-config --cflags` testrecurse.c `xml2-config --libs` -lpthread + * + * See Copyright for the status of this software. + * + * daniel@veillard.com + */ + +#include "libxml.h" +#include + +#if !defined(_WIN32) || defined(__CYGWIN__) +#include +#endif +#include +#include +#include +#include + +#include +#include +#include +#ifdef LIBXML_READER_ENABLED +#include +#endif + +/* + * O_BINARY is just for Windows compatibility - if it isn't defined + * on this system, avoid any compilation error + */ +#ifdef O_BINARY +#define RD_FLAGS O_RDONLY | O_BINARY +#else +#define RD_FLAGS O_RDONLY +#endif + +typedef int (*functest) (const char *filename, const char *result, + const char *error, int options); + +typedef struct testDesc testDesc; +typedef testDesc *testDescPtr; +struct testDesc { + const char *desc; /* descripton of the test */ + functest func; /* function implementing the test */ + const char *in; /* glob to path for input files */ + const char *out; /* output directory */ + const char *suffix;/* suffix for output files */ + const char *err; /* suffix for error output files */ + int options; /* parser options for the test */ +}; + +static int checkTestFile(const char *filename); + + +#if defined(_WIN32) && !defined(__CYGWIN__) + +#include +#include + +typedef struct +{ + size_t gl_pathc; /* Count of paths matched so far */ + char **gl_pathv; /* List of matched pathnames. */ + size_t gl_offs; /* Slots to reserve in 'gl_pathv'. */ +} glob_t; + +#define GLOB_DOOFFS 0 +static int glob(const char *pattern, int flags, + int errfunc(const char *epath, int eerrno), + glob_t *pglob) { + glob_t *ret; + WIN32_FIND_DATA FindFileData; + HANDLE hFind; + unsigned int nb_paths = 0; + char directory[500]; + int len; + + if ((pattern == NULL) || (pglob == NULL)) return(-1); + + strncpy(directory, pattern, 499); + for (len = strlen(directory);len >= 0;len--) { + if (directory[len] == '/') { + len++; + directory[len] = 0; + break; + } + } + if (len <= 0) + len = 0; + + + ret = pglob; + memset(ret, 0, sizeof(glob_t)); + + hFind = FindFirstFileA(pattern, &FindFileData); + if (hFind == INVALID_HANDLE_VALUE) + return(0); + nb_paths = 20; + ret->gl_pathv = (char **) malloc(nb_paths * sizeof(char *)); + if (ret->gl_pathv == NULL) { + FindClose(hFind); + return(-1); + } + strncpy(directory + len, FindFileData.cFileName, 499 - len); + ret->gl_pathv[ret->gl_pathc] = strdup(directory); + if (ret->gl_pathv[ret->gl_pathc] == NULL) + goto done; + ret->gl_pathc++; + while(FindNextFileA(hFind, &FindFileData)) { + if (FindFileData.cFileName[0] == '.') + continue; + if (ret->gl_pathc + 2 > nb_paths) { + char **tmp = realloc(ret->gl_pathv, nb_paths * 2 * sizeof(char *)); + if (tmp == NULL) + break; + ret->gl_pathv = tmp; + nb_paths *= 2; + } + strncpy(directory + len, FindFileData.cFileName, 499 - len); + ret->gl_pathv[ret->gl_pathc] = strdup(directory); + if (ret->gl_pathv[ret->gl_pathc] == NULL) + break; + ret->gl_pathc++; + } + ret->gl_pathv[ret->gl_pathc] = NULL; + +done: + FindClose(hFind); + return(0); +} + + + +static void globfree(glob_t *pglob) { + unsigned int i; + if (pglob == NULL) + return; + + for (i = 0;i < pglob->gl_pathc;i++) { + if (pglob->gl_pathv[i] != NULL) + free(pglob->gl_pathv[i]); + } +} + +#else +#include +#endif + +/************************************************************************ + * * + * Huge document generator * + * * + ************************************************************************/ + +#include + + +static const char *start = " \ + \ + \ +]> \ +"; + +static const char *segment = " &e; &f; &d;\n"; +static const char *finish = ""; + +static int curseg = 0; +static const char *current; +static int rlen; + +/** + * hugeMatch: + * @URI: an URI to test + * + * Check for an huge: query + * + * Returns 1 if yes and 0 if another Input module should be used + */ +static int +hugeMatch(const char * URI) { + if ((URI != NULL) && (!strncmp(URI, "huge:", 4))) + return(1); + return(0); +} + +/** + * hugeOpen: + * @URI: an URI to test + * + * Return a pointer to the huge: query handler, in this example simply + * the current pointer... + * + * Returns an Input context or NULL in case or error + */ +static void * +hugeOpen(const char * URI) { + if ((URI == NULL) || (strncmp(URI, "huge:", 4))) + return(NULL); + rlen = strlen(start); + current = start; + return((void *) current); +} + +/** + * hugeClose: + * @context: the read context + * + * Close the huge: query handler + * + * Returns 0 or -1 in case of error + */ +static int +hugeClose(void * context) { + if (context == NULL) return(-1); + return(0); +} + +#define MAX_NODES 1000000 + +/** + * hugeRead: + * @context: the read context + * @buffer: where to store data + * @len: number of bytes to read + * + * Implement an huge: query read. + * + * Returns the number of bytes read or -1 in case of error + */ +static int +hugeRead(void *context, char *buffer, int len) +{ + if ((context == NULL) || (buffer == NULL) || (len < 0)) + return (-1); + + if (len >= rlen) { + if (curseg >= MAX_NODES + 1) { + rlen = 0; + return(0); + } + len = rlen; + rlen = 0; + memcpy(buffer, current, len); + curseg ++; + if (curseg == MAX_NODES) { + fprintf(stderr, "\n"); + rlen = strlen(finish); + current = finish; + } else { + if (curseg % (MAX_NODES / 10) == 0) + fprintf(stderr, "."); + rlen = strlen(segment); + current = segment; + } + } else { + memcpy(buffer, current, len); + rlen -= len; + current += len; + } + return (len); +} + +/************************************************************************ + * * + * Libxml2 specific routines * + * * + ************************************************************************/ + +static int nb_tests = 0; +static int nb_errors = 0; +static int nb_leaks = 0; +static int extraMemoryFromResolver = 0; + +static int +fatalError(void) { + fprintf(stderr, "Exitting tests on fatal error\n"); + exit(1); +} + +/* + * We need to trap calls to the resolver to not account memory for the catalog + * which is shared to the current running test. We also don't want to have + * network downloads modifying tests. + */ +static xmlParserInputPtr +testExternalEntityLoader(const char *URL, const char *ID, + xmlParserCtxtPtr ctxt) { + xmlParserInputPtr ret; + + if (checkTestFile(URL)) { + ret = xmlNoNetExternalEntityLoader(URL, ID, ctxt); + } else { + int memused = xmlMemUsed(); + ret = xmlNoNetExternalEntityLoader(URL, ID, ctxt); + extraMemoryFromResolver += xmlMemUsed() - memused; + } + + return(ret); +} + +/* + * Trapping the error messages at the generic level to grab the equivalent of + * stderr messages on CLI tools. + */ +static char testErrors[32769]; +static int testErrorsSize = 0; + +static void XMLCDECL +channel(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...) { + va_list args; + int res; + + if (testErrorsSize >= 32768) + return; + va_start(args, msg); + res = vsnprintf(&testErrors[testErrorsSize], + 32768 - testErrorsSize, + msg, args); + va_end(args); + if (testErrorsSize + res >= 32768) { + /* buffer is full */ + testErrorsSize = 32768; + testErrors[testErrorsSize] = 0; + } else { + testErrorsSize += res; + } + testErrors[testErrorsSize] = 0; +} + +/** + * xmlParserPrintFileContext: + * @input: an xmlParserInputPtr input + * + * Displays current context within the input content for error tracking + */ + +static void +xmlParserPrintFileContextInternal(xmlParserInputPtr input , + xmlGenericErrorFunc chanl, void *data ) { + const xmlChar *cur, *base; + unsigned int n, col; /* GCC warns if signed, because compared with sizeof() */ + xmlChar content[81]; /* space for 80 chars + line terminator */ + xmlChar *ctnt; + + if (input == NULL) return; + cur = input->cur; + base = input->base; + /* skip backwards over any end-of-lines */ + while ((cur > base) && ((*(cur) == '\n') || (*(cur) == '\r'))) { + cur--; + } + n = 0; + /* search backwards for beginning-of-line (to max buff size) */ + while ((n++ < (sizeof(content)-1)) && (cur > base) && + (*(cur) != '\n') && (*(cur) != '\r')) + cur--; + if ((*(cur) == '\n') || (*(cur) == '\r')) cur++; + /* calculate the error position in terms of the current position */ + col = input->cur - cur; + /* search forward for end-of-line (to max buff size) */ + n = 0; + ctnt = content; + /* copy selected text to our buffer */ + while ((*cur != 0) && (*(cur) != '\n') && + (*(cur) != '\r') && (n < sizeof(content)-1)) { + *ctnt++ = *cur++; + n++; + } + *ctnt = 0; + /* print out the selected text */ + chanl(data ,"%s\n", content); + /* create blank line with problem pointer */ + n = 0; + ctnt = content; + /* (leave buffer space for pointer + line terminator) */ + while ((nfile; + line = err->line; + code = err->code; + domain = err->domain; + level = err->level; + node = err->node; + if ((domain == XML_FROM_PARSER) || (domain == XML_FROM_HTML) || + (domain == XML_FROM_DTD) || (domain == XML_FROM_NAMESPACE) || + (domain == XML_FROM_IO) || (domain == XML_FROM_VALID)) { + ctxt = err->ctxt; + } + str = err->message; + + if (code == XML_ERR_OK) + return; + + if ((node != NULL) && (node->type == XML_ELEMENT_NODE)) + name = node->name; + + /* + * Maintain the compatibility with the legacy error handling + */ + if (ctxt != NULL) { + input = ctxt->input; + if ((input != NULL) && (input->filename == NULL) && + (ctxt->inputNr > 1)) { + cur = input; + input = ctxt->inputTab[ctxt->inputNr - 2]; + } + if (input != NULL) { + if (input->filename) + channel(data, "%s:%d: ", input->filename, input->line); + else if ((line != 0) && (domain == XML_FROM_PARSER)) + channel(data, "Entity: line %d: ", input->line); + } + } else { + if (file != NULL) + channel(data, "%s:%d: ", file, line); + else if ((line != 0) && (domain == XML_FROM_PARSER)) + channel(data, "Entity: line %d: ", line); + } + if (name != NULL) { + channel(data, "element %s: ", name); + } + if (code == XML_ERR_OK) + return; + switch (domain) { + case XML_FROM_PARSER: + channel(data, "parser "); + break; + case XML_FROM_NAMESPACE: + channel(data, "namespace "); + break; + case XML_FROM_DTD: + case XML_FROM_VALID: + channel(data, "validity "); + break; + case XML_FROM_HTML: + channel(data, "HTML parser "); + break; + case XML_FROM_MEMORY: + channel(data, "memory "); + break; + case XML_FROM_OUTPUT: + channel(data, "output "); + break; + case XML_FROM_IO: + channel(data, "I/O "); + break; + case XML_FROM_XINCLUDE: + channel(data, "XInclude "); + break; + case XML_FROM_XPATH: + channel(data, "XPath "); + break; + case XML_FROM_XPOINTER: + channel(data, "parser "); + break; + case XML_FROM_REGEXP: + channel(data, "regexp "); + break; + case XML_FROM_MODULE: + channel(data, "module "); + break; + case XML_FROM_SCHEMASV: + channel(data, "Schemas validity "); + break; + case XML_FROM_SCHEMASP: + channel(data, "Schemas parser "); + break; + case XML_FROM_RELAXNGP: + channel(data, "Relax-NG parser "); + break; + case XML_FROM_RELAXNGV: + channel(data, "Relax-NG validity "); + break; + case XML_FROM_CATALOG: + channel(data, "Catalog "); + break; + case XML_FROM_C14N: + channel(data, "C14N "); + break; + case XML_FROM_XSLT: + channel(data, "XSLT "); + break; + default: + break; + } + if (code == XML_ERR_OK) + return; + switch (level) { + case XML_ERR_NONE: + channel(data, ": "); + break; + case XML_ERR_WARNING: + channel(data, "warning : "); + break; + case XML_ERR_ERROR: + channel(data, "error : "); + break; + case XML_ERR_FATAL: + channel(data, "error : "); + break; + } + if (code == XML_ERR_OK) + return; + if (str != NULL) { + int len; + len = xmlStrlen((const xmlChar *)str); + if ((len > 0) && (str[len - 1] != '\n')) + channel(data, "%s\n", str); + else + channel(data, "%s", str); + } else { + channel(data, "%s\n", "out of memory error"); + } + if (code == XML_ERR_OK) + return; + + if (ctxt != NULL) { + xmlParserPrintFileContextInternal(input, channel, data); + if (cur != NULL) { + if (cur->filename) + channel(data, "%s:%d: \n", cur->filename, cur->line); + else if ((line != 0) && (domain == XML_FROM_PARSER)) + channel(data, "Entity: line %d: \n", cur->line); + xmlParserPrintFileContextInternal(cur, channel, data); + } + } + if ((domain == XML_FROM_XPATH) && (err->str1 != NULL) && + (err->int1 < 100) && + (err->int1 < xmlStrlen((const xmlChar *)err->str1))) { + xmlChar buf[150]; + int i; + + channel(data, "%s\n", err->str1); + for (i=0;i < err->int1;i++) + buf[i] = ' '; + buf[i++] = '^'; + buf[i] = 0; + channel(data, "%s\n", buf); + } +} + +static void +initializeLibxml2(void) { + xmlGetWarningsDefaultValue = 0; + xmlPedanticParserDefault(0); + + xmlMemSetup(xmlMemFree, xmlMemMalloc, xmlMemRealloc, xmlMemoryStrdup); + xmlInitParser(); + xmlSetExternalEntityLoader(testExternalEntityLoader); + xmlSetStructuredErrorFunc(NULL, testStructuredErrorHandler); + /* + * register the new I/O handlers + */ + if (xmlRegisterInputCallbacks(hugeMatch, hugeOpen, + hugeRead, hugeClose) < 0) { + fprintf(stderr, "failed to register Huge handler\n"); + exit(1); + } +} + +/************************************************************************ + * * + * File name and path utilities * + * * + ************************************************************************/ + +static const char *baseFilename(const char *filename) { + const char *cur; + if (filename == NULL) + return(NULL); + cur = &filename[strlen(filename)]; + while ((cur > filename) && (*cur != '/')) + cur--; + if (*cur == '/') + return(cur + 1); + return(cur); +} + +static char *resultFilename(const char *filename, const char *out, + const char *suffix) { + const char *base; + char res[500]; + char suffixbuff[500]; + +/************* + if ((filename[0] == 't') && (filename[1] == 'e') && + (filename[2] == 's') && (filename[3] == 't') && + (filename[4] == '/')) + filename = &filename[5]; + *************/ + + base = baseFilename(filename); + if (suffix == NULL) + suffix = ".tmp"; + if (out == NULL) + out = ""; + + strncpy(suffixbuff,suffix,499); +#ifdef VMS + if(strstr(base,".") && suffixbuff[0]=='.') + suffixbuff[0]='_'; +#endif + + snprintf(res, 499, "%s%s%s", out, base, suffixbuff); + res[499] = 0; + return(strdup(res)); +} + +static int checkTestFile(const char *filename) { + struct stat buf; + + if (stat(filename, &buf) == -1) + return(0); + +#if defined(_WIN32) && !defined(__CYGWIN__) + if (!(buf.st_mode & _S_IFREG)) + return(0); +#else + if (!S_ISREG(buf.st_mode)) + return(0); +#endif + + return(1); +} + + + +/************************************************************************ + * * + * Test to detect or not recursive entities * + * * + ************************************************************************/ +/** + * recursiveDetectTest: + * @filename: the file to parse + * @result: the file with expected result + * @err: the file with error messages: unused + * + * Parse a file loading DTD and replacing entities check it fails for + * lol cases + * + * Returns 0 in case of success, an error code otherwise + */ +static int +recursiveDetectTest(const char *filename, + const char *result ATTRIBUTE_UNUSED, + const char *err ATTRIBUTE_UNUSED, + int options ATTRIBUTE_UNUSED) { + xmlDocPtr doc; + xmlParserCtxtPtr ctxt; + int res = 0; + + nb_tests++; + + ctxt = xmlNewParserCtxt(); + /* + * base of the test, parse with the old API + */ + doc = xmlCtxtReadFile(ctxt, filename, NULL, + XML_PARSE_NOENT | XML_PARSE_DTDLOAD); + if ((doc != NULL) || (ctxt->lastError.code != XML_ERR_ENTITY_LOOP)) { + fprintf(stderr, "Failed to detect recursion in %s\n", filename); + xmlFreeParserCtxt(ctxt); + xmlFreeDoc(doc); + return(1); + } + xmlFreeParserCtxt(ctxt); + + return(res); +} + +/** + * notRecursiveDetectTest: + * @filename: the file to parse + * @result: the file with expected result + * @err: the file with error messages: unused + * + * Parse a file loading DTD and replacing entities check it works for + * good cases + * + * Returns 0 in case of success, an error code otherwise + */ +static int +notRecursiveDetectTest(const char *filename, + const char *result ATTRIBUTE_UNUSED, + const char *err ATTRIBUTE_UNUSED, + int options ATTRIBUTE_UNUSED) { + xmlDocPtr doc; + xmlParserCtxtPtr ctxt; + int res = 0; + + nb_tests++; + + ctxt = xmlNewParserCtxt(); + /* + * base of the test, parse with the old API + */ + doc = xmlCtxtReadFile(ctxt, filename, NULL, + XML_PARSE_NOENT | XML_PARSE_DTDLOAD); + if (doc == NULL) { + fprintf(stderr, "Failed to parse correct file %s\n", filename); + xmlFreeParserCtxt(ctxt); + return(1); + } + xmlFreeDoc(doc); + xmlFreeParserCtxt(ctxt); + + return(res); +} + +#ifdef LIBXML_READER_ENABLED +/** + * notRecursiveHugeTest: + * @filename: the file to parse + * @result: the file with expected result + * @err: the file with error messages: unused + * + * Parse a memory generated file + * good cases + * + * Returns 0 in case of success, an error code otherwise + */ +static int +notRecursiveHugeTest(const char *filename ATTRIBUTE_UNUSED, + const char *result ATTRIBUTE_UNUSED, + const char *err ATTRIBUTE_UNUSED, + int options ATTRIBUTE_UNUSED) { + xmlTextReaderPtr reader; + int res = 0; + int ret; + + nb_tests++; + + reader = xmlReaderForFile("huge:test" , NULL, + XML_PARSE_NOENT | XML_PARSE_DTDLOAD); + if (reader == NULL) { + fprintf(stderr, "Failed to open huge:test\n"); + return(1); + } + ret = xmlTextReaderRead(reader); + while (ret == 1) { + ret = xmlTextReaderRead(reader); + } + if (ret != 0) { + fprintf(stderr, "Failed to parser huge:test with entities\n"); + res = 1; + } + xmlFreeTextReader(reader); + + return(res); +} +#endif + +/************************************************************************ + * * + * Tests Descriptions * + * * + ************************************************************************/ + +static +testDesc testDescriptions[] = { + { "Parsing recursive test cases" , + recursiveDetectTest, "./test/recurse/lol*.xml", NULL, NULL, NULL, + 0 }, + { "Parsing non-recursive test cases" , + notRecursiveDetectTest, "./test/recurse/good*.xml", NULL, NULL, NULL, + 0 }, +#ifdef LIBXML_READER_ENABLED + { "Parsing non-recursive huge case" , + notRecursiveHugeTest, NULL, NULL, NULL, NULL, + 0 }, +#endif + {NULL, NULL, NULL, NULL, NULL, NULL, 0} +}; + +/************************************************************************ + * * + * The main code driving the tests * + * * + ************************************************************************/ + +static int +launchTests(testDescPtr tst) { + int res = 0, err = 0; + size_t i; + char *result; + char *error; + int mem; + + if (tst == NULL) return(-1); + if (tst->in != NULL) { + glob_t globbuf; + + globbuf.gl_offs = 0; + glob(tst->in, GLOB_DOOFFS, NULL, &globbuf); + for (i = 0;i < globbuf.gl_pathc;i++) { + if (!checkTestFile(globbuf.gl_pathv[i])) + continue; + if (tst->suffix != NULL) { + result = resultFilename(globbuf.gl_pathv[i], tst->out, + tst->suffix); + if (result == NULL) { + fprintf(stderr, "Out of memory !\n"); + fatalError(); + } + } else { + result = NULL; + } + if (tst->err != NULL) { + error = resultFilename(globbuf.gl_pathv[i], tst->out, + tst->err); + if (error == NULL) { + fprintf(stderr, "Out of memory !\n"); + fatalError(); + } + } else { + error = NULL; + } + if ((result) &&(!checkTestFile(result))) { + fprintf(stderr, "Missing result file %s\n", result); + } else if ((error) &&(!checkTestFile(error))) { + fprintf(stderr, "Missing error file %s\n", error); + } else { + mem = xmlMemUsed(); + extraMemoryFromResolver = 0; + testErrorsSize = 0; + testErrors[0] = 0; + res = tst->func(globbuf.gl_pathv[i], result, error, + tst->options | XML_PARSE_COMPACT); + xmlResetLastError(); + if (res != 0) { + fprintf(stderr, "File %s generated an error\n", + globbuf.gl_pathv[i]); + nb_errors++; + err++; + } + else if (xmlMemUsed() != mem) { + if ((xmlMemUsed() != mem) && + (extraMemoryFromResolver == 0)) { + fprintf(stderr, "File %s leaked %d bytes\n", + globbuf.gl_pathv[i], xmlMemUsed() - mem); + nb_leaks++; + err++; + } + } + testErrorsSize = 0; + } + if (result) + free(result); + if (error) + free(error); + } + globfree(&globbuf); + } else { + testErrorsSize = 0; + testErrors[0] = 0; + extraMemoryFromResolver = 0; + res = tst->func(NULL, NULL, NULL, tst->options); + if (res != 0) { + nb_errors++; + err++; + } + } + return(err); +} + +static int verbose = 0; +static int tests_quiet = 0; + +static int +runtest(int i) { + int ret = 0, res; + int old_errors, old_tests, old_leaks; + + old_errors = nb_errors; + old_tests = nb_tests; + old_leaks = nb_leaks; + if ((tests_quiet == 0) && (testDescriptions[i].desc != NULL)) + printf("## %s\n", testDescriptions[i].desc); + res = launchTests(&testDescriptions[i]); + if (res != 0) + ret++; + if (verbose) { + if ((nb_errors == old_errors) && (nb_leaks == old_leaks)) + printf("Ran %d tests, no errors\n", nb_tests - old_tests); + else + printf("Ran %d tests, %d errors, %d leaks\n", + nb_tests - old_tests, + nb_errors - old_errors, + nb_leaks - old_leaks); + } + return(ret); +} + +int +main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) { + int i, a, ret = 0; + int subset = 0; + + initializeLibxml2(); + + for (a = 1; a < argc;a++) { + if (!strcmp(argv[a], "-v")) + verbose = 1; + else if (!strcmp(argv[a], "-quiet")) + tests_quiet = 1; + else { + for (i = 0; testDescriptions[i].func != NULL; i++) { + if (strstr(testDescriptions[i].desc, argv[a])) { + ret += runtest(i); + subset++; + } + } + } + } + if (subset == 0) { + for (i = 0; testDescriptions[i].func != NULL; i++) { + ret += runtest(i); + } + } + if ((nb_errors == 0) && (nb_leaks == 0)) { + ret = 0; + printf("Total %d tests, no errors\n", + nb_tests); + } else { + ret = 1; + printf("Total %d tests, %d errors, %d leaks\n", + nb_tests, nb_errors, nb_leaks); + } + xmlCleanupParser(); + xmlMemoryDump(); + + return(ret); +} diff --git a/threads.c b/threads.c new file mode 100644 index 0000000..b9d6cae --- /dev/null +++ b/threads.c @@ -0,0 +1,1039 @@ +/** + * threads.c: set of generic threading related routines + * + * See Copyright for the status of this software. + * + * Gary Pennington + * daniel@veillard.com + */ + +#define IN_LIBXML +#include "libxml.h" + +#include + +#include +#include + +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_UNISTD_H +#include +#endif +#ifdef HAVE_STDLIB_H +#include +#endif +#ifdef HAVE_PTHREAD_H +#include +#elif defined HAVE_WIN32_THREADS +#include +#ifndef HAVE_COMPILER_TLS +#include +#endif +#endif + +#ifdef HAVE_BEOS_THREADS +#include +#include +#endif + +#if defined(SOLARIS) +#include +#endif + +/* #define DEBUG_THREADS */ + +#ifdef HAVE_PTHREAD_H + +static int libxml_is_threaded = -1; +#if defined(__GNUC__) && defined(__GLIBC__) +#ifdef linux +#if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || (__GNUC__ > 3) +extern int pthread_once (pthread_once_t *__once_control, + void (*__init_routine) (void)) + __attribute((weak)); +extern void *pthread_getspecific (pthread_key_t __key) + __attribute((weak)); +extern int pthread_setspecific (pthread_key_t __key, + __const void *__pointer) + __attribute((weak)); +extern int pthread_key_create (pthread_key_t *__key, + void (*__destr_function) (void *)) + __attribute((weak)); +extern int pthread_key_delete (pthread_key_t __key) + __attribute((weak)); +extern int pthread_mutex_init () + __attribute((weak)); +extern int pthread_mutex_destroy () + __attribute((weak)); +extern int pthread_mutex_lock () + __attribute((weak)); +extern int pthread_mutex_unlock () + __attribute((weak)); +extern int pthread_cond_init () + __attribute((weak)); +extern int pthread_cond_destroy () + __attribute((weak)); +extern int pthread_cond_wait () + __attribute((weak)); +extern int pthread_equal () + __attribute((weak)); +extern pthread_t pthread_self () + __attribute((weak)); +extern int pthread_key_create () + __attribute((weak)); +extern int pthread_key_delete () + __attribute((weak)); +extern int pthread_cond_signal () + __attribute((weak)); +#endif +#endif /* linux */ +#endif /* defined(__GNUC__) && defined(__GLIBC__) */ +#endif /* HAVE_PTHREAD_H */ + +/* + * 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; +static pthread_once_t once_control_init = PTHREAD_ONCE_INIT; +static pthread_mutex_t global_init_lock = PTHREAD_MUTEX_INITIALIZER; +#elif defined HAVE_WIN32_THREADS +#if defined(HAVE_COMPILER_TLS) +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 struct { + DWORD done; + DWORD control; +} run_once = { 0, 0}; +static volatile LPCRITICAL_SECTION global_init_lock = NULL; + +/* endif HAVE_WIN32_THREADS */ +#elif defined HAVE_BEOS_THREADS +int32 globalkey = 0; +thread_id mainthread = 0; +int32 run_once_init = 0; +static int32 global_init_lock = -1; +static vint32 global_init_count = 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 + if (libxml_is_threaded != 0) + 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 + if (libxml_is_threaded != 0) + 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 + if (libxml_is_threaded != 0) + 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"); +#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 + if (libxml_is_threaded != 0) + 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 + if (libxml_is_threaded != 0) { + 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) +{ + if (tok == NULL) + return; +#ifdef HAVE_PTHREAD_H + if (libxml_is_threaded != 0) { + pthread_mutex_destroy(&tok->lock); + pthread_cond_destroy(&tok->cv); + } +#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 + if (libxml_is_threaded == 0) + return; + + 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 + if (libxml_is_threaded == 0) + return; + + pthread_mutex_lock(&tok->lock); + tok->held--; + if (tok->held == 0) { + if (tok->waiters) + pthread_cond_signal(&tok->cv); + memset(&tok->tid, 0, sizeof(tok->tid)); + } + pthread_mutex_unlock(&tok->lock); +#elif defined HAVE_WIN32_THREADS + if (tok->count > 0) { + 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 +} + +/** + * xmlGlobalInitMutexLock + * + * Makes sure that the global initialization mutex is initialized and + * locks it. + */ +void +__xmlGlobalInitMutexLock(void) +{ + /* Make sure the global init lock is initialized and then lock it. */ +#ifdef HAVE_PTHREAD_H + /* The mutex is statically initialized, so we just lock it. */ + if (pthread_mutex_lock != NULL) + pthread_mutex_lock(&global_init_lock); +#elif defined HAVE_WIN32_THREADS + LPCRITICAL_SECTION cs; + + /* Create a new critical section */ + if (global_init_lock == NULL) { + cs = malloc(sizeof(CRITICAL_SECTION)); + if (cs == NULL) { + xmlGenericError(xmlGenericErrorContext, + "xmlGlobalInitMutexLock: out of memory\n"); + return; + } + InitializeCriticalSection(cs); + + /* Swap it into the global_init_lock */ +#ifdef InterlockedCompareExchangePointer + InterlockedCompareExchangePointer(&global_init_lock, cs, NULL); +#else /* Use older void* version */ + InterlockedCompareExchange((void **) &global_init_lock, + (void *) cs, NULL); +#endif /* InterlockedCompareExchangePointer */ + + /* If another thread successfully recorded its critical + * section in the global_init_lock then discard the one + * allocated by this thread. */ + if (global_init_lock != cs) { + DeleteCriticalSection(cs); + free(cs); + } + } + + /* Lock the chosen critical section */ + EnterCriticalSection(global_init_lock); +#elif defined HAVE_BEOS_THREADS + int32 sem; + + /* Allocate a new semaphore */ + sem = create_sem(1, "xmlGlobalinitMutex"); + + while (global_init_lock == -1) { + if (atomic_add(&global_init_count, 1) == 0) { + global_init_lock = sem; + } else { + snooze(1); + atomic_add(&global_init_count, -1); + } + } + + /* If another thread successfully recorded its critical + * section in the global_init_lock then discard the one + * allocated by this thread. */ + if (global_init_lock != sem) + delete_sem(sem); + + /* Acquire the chosen semaphore */ + if (acquire_sem(global_init_lock) != B_NO_ERROR) { +#ifdef DEBUG_THREADS + xmlGenericError(xmlGenericErrorContext, + "xmlGlobalInitMutexLock():BeOS:Couldn't acquire semaphore\n"); +#endif + } +#endif +} + +void +__xmlGlobalInitMutexUnlock(void) +{ +#ifdef HAVE_PTHREAD_H + if (pthread_mutex_unlock != NULL) + pthread_mutex_unlock(&global_init_lock); +#elif defined HAVE_WIN32_THREADS + if (global_init_lock != NULL) { + LeaveCriticalSection(global_init_lock); + } +#elif defined HAVE_BEOS_THREADS + release_sem(global_init_lock); +#endif +} + +/** + * xmlGlobalInitMutexDestroy + * + * Makes sure that the global initialization mutex is destroyed before + * application termination. + */ +void +__xmlGlobalInitMutexDestroy(void) +{ +#ifdef HAVE_PTHREAD_H +#elif defined HAVE_WIN32_THREADS + if (global_init_lock != NULL) { + DeleteCriticalSection(global_init_lock); + free(global_init_lock); + global_init_lock = NULL; + } +#endif +} + +/************************************************************************ + * * + * Per thread global state handling * + * * + ************************************************************************/ + +#ifdef LIBXML_THREAD_ENABLED +#ifdef xmlLastError +#undef xmlLastError +#endif + +/** + * 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) +{ + xmlGlobalState *gs = (xmlGlobalState *) state; + + /* free any memory allocated in the thread's xmlLastError */ + xmlResetError(&(gs->xmlLastError)); + 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) { + xmlGenericError(xmlGenericErrorContext, + "xmlGetGlobalState: out of memory\n"); + return (NULL); + } + + memset(gs, 0, sizeof(xmlGlobalState)); + xmlInitializeGlobalState(gs); + return (gs); +} +#endif /* LIBXML_THREAD_ENABLED */ + +#ifdef HAVE_PTHREAD_H +#elif defined 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 XMLCDECL +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; + + if (libxml_is_threaded == 0) + return (NULL); + + pthread_once(&once_control, xmlOnceInit); + + if ((globalval = (xmlGlobalState *) + pthread_getspecific(globalkey)) == NULL) { + xmlGlobalState *tsd = xmlNewGlobalState(); + if (tsd == NULL) + return(NULL); + + 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; + + 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(); + + if (tsd == NULL) + return(NULL); + p = (xmlGlobalStateCleanupHelperParams *) + malloc(sizeof(xmlGlobalStateCleanupHelperParams)); + if (p == NULL) { + xmlGenericError(xmlGenericErrorContext, + "xmlGetGlobalState: out of memory\n"); + xmlFreeGlobalState(tsd); + return(NULL); + } + 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(); + if (tsd == NULL) + return (NULL); + + 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 + * Note that this is likely to be broken on some platforms using pthreads + * as the specification doesn't mandate pthread_t to be an integer type + * + * Returns the current thread ID number + */ +int +xmlGetThreadId(void) +{ +#ifdef HAVE_PTHREAD_H + pthread_t id; + int ret; + + if (libxml_is_threaded == 0) + return (0); + id = pthread_self(); + /* horrible but preserves compat, see warning above */ + memcpy(&ret, &id, sizeof(ret)); + return (ret); +#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 + if (libxml_is_threaded == -1) + xmlInitThreads(); + if (libxml_is_threaded == 0) + return (1); + pthread_once(&once_control, xmlOnceInit); +#elif defined HAVE_WIN32_THREADS + xmlOnceInit(); +#elif defined HAVE_BEOS_THREADS + xmlOnceInit(); +#endif + +#ifdef DEBUG_THREADS + xmlGenericError(xmlGenericErrorContext, "xmlIsMainThread()\n"); +#endif +#ifdef HAVE_PTHREAD_H + return (pthread_equal(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 HAVE_PTHREAD_H + if (libxml_is_threaded == -1) { + if ((pthread_once != NULL) && + (pthread_getspecific != NULL) && + (pthread_setspecific != NULL) && + (pthread_key_create != NULL) && + (pthread_key_delete != NULL) && + (pthread_mutex_init != NULL) && + (pthread_mutex_destroy != NULL) && + (pthread_mutex_lock != NULL) && + (pthread_mutex_unlock != NULL) && + (pthread_cond_init != NULL) && + (pthread_cond_destroy != NULL) && + (pthread_cond_wait != NULL) && + (pthread_equal != NULL) && + (pthread_self != NULL) && + (pthread_cond_signal != NULL)) { + libxml_is_threaded = 1; + +/* fprintf(stderr, "Running multithreaded\n"); */ + } else { + +/* fprintf(stderr, "Running without multithread\n"); */ + libxml_is_threaded = 0; + } + } +#elif 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. + * + * WARNING: if your application is multithreaded or has plugin support + * calling this may crash the application if another thread or + * a plugin is still using libxml2. It's sometimes very hard to + * guess if libxml2 is in use in the application, some libraries + * or plugins may use it without notice. In case of doubt abstain + * from calling this function or do it just before calling exit() + * to avoid leak reports from valgrind ! + */ +void +xmlCleanupThreads(void) +{ +#ifdef DEBUG_THREADS + xmlGenericError(xmlGenericErrorContext, "xmlCleanupThreads()\n"); +#endif +#ifdef HAVE_PTHREAD_H + if ((libxml_is_threaded) && (pthread_key_delete != NULL)) + pthread_key_delete(globalkey); + once_control = once_control_init; +#elif defined(HAVE_WIN32_THREADS) && !defined(HAVE_COMPILER_TLS) && (!defined(LIBXML_STATIC) || defined(LIBXML_STATIC_FOR_DLL)) + if (globalkey != TLS_OUT_OF_INDEXES) { + xmlGlobalStateCleanupHelperParams *p; + + 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(); + __xmlInitializeDict(); +#elif defined(HAVE_WIN32_THREADS) + if (!run_once.done) { + if (InterlockedIncrement(&run_once.control) == 1) { +#if !defined(HAVE_COMPILER_TLS) + globalkey = TlsAlloc(); +#endif + mainthread = GetCurrentThreadId(); + __xmlInitializeDict(); + run_once.done = 1; + } else { + /* Another thread is working; give up our slice and + * wait until they're done. */ + while (!run_once.done) + Sleep(0); + } + } +#elif defined HAVE_BEOS_THREADS + if (atomic_add(&run_once_init, 1) == 0) { + globalkey = tls_allocate(); + tls_set(globalkey, NULL); + mainthread = find_thread(NULL); + __xmlInitializeDict(); + } 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 + */ +#ifdef HAVE_PTHREAD_H +#elif defined(HAVE_WIN32_THREADS) && !defined(HAVE_COMPILER_TLS) && (!defined(LIBXML_STATIC) || defined(LIBXML_STATIC_FOR_DLL)) +#if defined(LIBXML_STATIC_FOR_DLL) +BOOL XMLCALL +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 +#define bottom_threads +#include "elfgcchack.h" diff --git a/timsort.h b/timsort.h new file mode 100644 index 0000000..795f272 --- /dev/null +++ b/timsort.h @@ -0,0 +1,518 @@ +/* + * taken from https://github.com/swenson/sort + * Kept as is for the moment to be able to apply upstream patches for that + * code, currently used only to speed up XPath node sorting, see xpath.c + */ + +/* + * All code in this header, unless otherwise specified, is hereby licensed under the MIT Public License: + +Copyright (c) 2010 Christopher Swenson + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +#include +#include +#include +#ifdef HAVE_STDINT_H +#include +#else +#ifdef HAVE_INTTYPES_H +#include +#elif defined(WIN32) +typedef __int64 int64_t; +typedef unsigned __int64 uint64_t; +#endif +#endif + +#ifndef MK_UINT64 +#if defined(WIN32) && defined(_MSC_VER) && _MSC_VER < 1300 +#define MK_UINT64(x) ((uint64_t)(x)) +#else +#define MK_UINT64(x) x##ULL +#endif +#endif + +#ifndef MAX +#define MAX(x,y) (((x) > (y) ? (x) : (y))) +#endif +#ifndef MIN +#define MIN(x,y) (((x) < (y) ? (x) : (y))) +#endif + +int compute_minrun(uint64_t); + +#ifndef CLZ +#if defined(__GNUC__) && ((__GNUC__ == 3 && __GNUC_MINOR__ >= 4) || (__GNUC__ > 3)) +#define CLZ __builtin_clzll +#else + +int clzll(uint64_t); + +/* adapted from Hacker's Delight */ +int clzll(uint64_t x) /* {{{ */ +{ + int n; + + if (x == 0) return(64); + n = 0; + if (x <= MK_UINT64(0x00000000FFFFFFFF)) {n = n + 32; x = x << 32;} + if (x <= MK_UINT64(0x0000FFFFFFFFFFFF)) {n = n + 16; x = x << 16;} + if (x <= MK_UINT64(0x00FFFFFFFFFFFFFF)) {n = n + 8; x = x << 8;} + if (x <= MK_UINT64(0x0FFFFFFFFFFFFFFF)) {n = n + 4; x = x << 4;} + if (x <= MK_UINT64(0x3FFFFFFFFFFFFFFF)) {n = n + 2; x = x << 2;} + if (x <= MK_UINT64(0x7FFFFFFFFFFFFFFF)) {n = n + 1;} + return n; +} +/* }}} */ + +#define CLZ clzll +#endif +#endif + +int compute_minrun(uint64_t size) /* {{{ */ +{ + const int top_bit = 64 - CLZ(size); + const int shift = MAX(top_bit, 6) - 6; + const int minrun = size >> shift; + const uint64_t mask = (MK_UINT64(1) << shift) - 1; + if (mask & size) return minrun + 1; + return minrun; +} +/* }}} */ + +#ifndef SORT_NAME +#error "Must declare SORT_NAME" +#endif + +#ifndef SORT_TYPE +#error "Must declare SORT_TYPE" +#endif + +#ifndef SORT_CMP +#define SORT_CMP(x, y) ((x) < (y) ? -1 : ((x) == (y) ? 0 : 1)) +#endif + + +#define SORT_SWAP(x,y) {SORT_TYPE __SORT_SWAP_t = (x); (x) = (y); (y) = __SORT_SWAP_t;} + +#define SORT_CONCAT(x, y) x ## _ ## y +#define SORT_MAKE_STR1(x, y) SORT_CONCAT(x,y) +#define SORT_MAKE_STR(x) SORT_MAKE_STR1(SORT_NAME,x) + +#define BINARY_INSERTION_FIND SORT_MAKE_STR(binary_insertion_find) +#define BINARY_INSERTION_SORT_START SORT_MAKE_STR(binary_insertion_sort_start) +#define BINARY_INSERTION_SORT SORT_MAKE_STR(binary_insertion_sort) +#define REVERSE_ELEMENTS SORT_MAKE_STR(reverse_elements) +#define COUNT_RUN SORT_MAKE_STR(count_run) +#define CHECK_INVARIANT SORT_MAKE_STR(check_invariant) +#define TIM_SORT SORT_MAKE_STR(tim_sort) +#define TIM_SORT_RESIZE SORT_MAKE_STR(tim_sort_resize) +#define TIM_SORT_MERGE SORT_MAKE_STR(tim_sort_merge) +#define TIM_SORT_COLLAPSE SORT_MAKE_STR(tim_sort_collapse) + +#define TIM_SORT_RUN_T SORT_MAKE_STR(tim_sort_run_t) +#define TEMP_STORAGE_T SORT_MAKE_STR(temp_storage_t) + +typedef struct { + int64_t start; + int64_t length; +} TIM_SORT_RUN_T; + +void BINARY_INSERTION_SORT(SORT_TYPE *dst, const size_t size); +void TIM_SORT(SORT_TYPE *dst, const size_t size); + +/* Function used to do a binary search for binary insertion sort */ +static int64_t BINARY_INSERTION_FIND(SORT_TYPE *dst, const SORT_TYPE x, const size_t size) +{ + int64_t l, c, r; + SORT_TYPE lx; + SORT_TYPE cx; + l = 0; + r = size - 1; + c = r >> 1; + lx = dst[l]; + + /* check for beginning conditions */ + if (SORT_CMP(x, lx) < 0) + return 0; + else if (SORT_CMP(x, lx) == 0) + { + int64_t i = 1; + while (SORT_CMP(x, dst[i]) == 0) i++; + return i; + } + + cx = dst[c]; + while (1) + { + const int val = SORT_CMP(x, cx); + if (val < 0) + { + if (c - l <= 1) return c; + r = c; + } + else if (val > 0) + { + if (r - c <= 1) return c + 1; + l = c; + lx = cx; + } + else + { + do + { + cx = dst[++c]; + } while (SORT_CMP(x, cx) == 0); + return c; + } + c = l + ((r - l) >> 1); + cx = dst[c]; + } +} + +/* Binary insertion sort, but knowing that the first "start" entries are sorted. Used in timsort. */ +static void BINARY_INSERTION_SORT_START(SORT_TYPE *dst, const size_t start, const size_t size) +{ + int64_t i; + for (i = start; i < (int64_t) size; i++) + { + int64_t j; + SORT_TYPE x; + int64_t location; + /* If this entry is already correct, just move along */ + if (SORT_CMP(dst[i - 1], dst[i]) <= 0) continue; + + /* Else we need to find the right place, shift everything over, and squeeze in */ + x = dst[i]; + location = BINARY_INSERTION_FIND(dst, x, i); + for (j = i - 1; j >= location; j--) + { + dst[j + 1] = dst[j]; + } + dst[location] = x; + } +} + +/* Binary insertion sort */ +void BINARY_INSERTION_SORT(SORT_TYPE *dst, const size_t size) +{ + BINARY_INSERTION_SORT_START(dst, 1, size); +} + +/* timsort implementation, based on timsort.txt */ + +static void REVERSE_ELEMENTS(SORT_TYPE *dst, int64_t start, int64_t end) +{ + while (1) + { + if (start >= end) return; + SORT_SWAP(dst[start], dst[end]); + start++; + end--; + } +} + +static int64_t COUNT_RUN(SORT_TYPE *dst, const int64_t start, const size_t size) +{ + int64_t curr; + if (size - start == 1) return 1; + if (start >= (int64_t) size - 2) + { + if (SORT_CMP(dst[size - 2], dst[size - 1]) > 0) + SORT_SWAP(dst[size - 2], dst[size - 1]); + return 2; + } + + curr = start + 2; + + if (SORT_CMP(dst[start], dst[start + 1]) <= 0) + { + /* increasing run */ + while (1) + { + if (curr == (int64_t) size - 1) break; + if (SORT_CMP(dst[curr - 1], dst[curr]) > 0) break; + curr++; + } + return curr - start; + } + else + { + /* decreasing run */ + while (1) + { + if (curr == (int64_t) size - 1) break; + if (SORT_CMP(dst[curr - 1], dst[curr]) <= 0) break; + curr++; + } + /* reverse in-place */ + REVERSE_ELEMENTS(dst, start, curr - 1); + return curr - start; + } +} + +#define PUSH_NEXT() do {\ +len = COUNT_RUN(dst, curr, size);\ +run = minrun;\ +if (run < minrun) run = minrun;\ +if (run > (int64_t) size - curr) run = size - curr;\ +if (run > len)\ +{\ + BINARY_INSERTION_SORT_START(&dst[curr], len, run);\ + len = run;\ +}\ +{\ +run_stack[stack_curr].start = curr;\ +run_stack[stack_curr].length = len;\ +stack_curr++;\ +}\ +curr += len;\ +if (curr == (int64_t) size)\ +{\ + /* finish up */ \ + while (stack_curr > 1) \ + { \ + TIM_SORT_MERGE(dst, run_stack, stack_curr, store); \ + run_stack[stack_curr - 2].length += run_stack[stack_curr - 1].length; \ + stack_curr--; \ + } \ + if (store->storage != NULL)\ + {\ + free(store->storage);\ + store->storage = NULL;\ + }\ + return;\ +}\ +}\ +while (0) + +static int CHECK_INVARIANT(TIM_SORT_RUN_T *stack, const int stack_curr) +{ + int64_t A, B, C; + if (stack_curr < 2) return 1; + if (stack_curr == 2) + { + const int64_t A1 = stack[stack_curr - 2].length; + const int64_t B1 = stack[stack_curr - 1].length; + if (A1 <= B1) return 0; + return 1; + } + A = stack[stack_curr - 3].length; + B = stack[stack_curr - 2].length; + C = stack[stack_curr - 1].length; + if ((A <= B + C) || (B <= C)) return 0; + return 1; +} + +typedef struct { + size_t alloc; + SORT_TYPE *storage; +} TEMP_STORAGE_T; + + +static void TIM_SORT_RESIZE(TEMP_STORAGE_T *store, const size_t new_size) +{ + if (store->alloc < new_size) + { + SORT_TYPE *tempstore = (SORT_TYPE *)realloc(store->storage, new_size * sizeof(SORT_TYPE)); + if (tempstore == NULL) + { + fprintf(stderr, "Error allocating temporary storage for tim sort: need %lu bytes", sizeof(SORT_TYPE) * new_size); + exit(1); + } + store->storage = tempstore; + store->alloc = new_size; + } +} + +static void TIM_SORT_MERGE(SORT_TYPE *dst, const TIM_SORT_RUN_T *stack, const int stack_curr, TEMP_STORAGE_T *store) +{ + const int64_t A = stack[stack_curr - 2].length; + const int64_t B = stack[stack_curr - 1].length; + const int64_t curr = stack[stack_curr - 2].start; + SORT_TYPE *storage; + int64_t i, j, k; + + TIM_SORT_RESIZE(store, MIN(A, B)); + storage = store->storage; + + /* left merge */ + if (A < B) + { + memcpy(storage, &dst[curr], A * sizeof(SORT_TYPE)); + i = 0; + j = curr + A; + + for (k = curr; k < curr + A + B; k++) + { + if ((i < A) && (j < curr + A + B)) + { + if (SORT_CMP(storage[i], dst[j]) <= 0) + dst[k] = storage[i++]; + else + dst[k] = dst[j++]; + } + else if (i < A) + { + dst[k] = storage[i++]; + } + else + dst[k] = dst[j++]; + } + } + /* right merge */ + else + { + memcpy(storage, &dst[curr + A], B * sizeof(SORT_TYPE)); + i = B - 1; + j = curr + A - 1; + + for (k = curr + A + B - 1; k >= curr; k--) + { + if ((i >= 0) && (j >= curr)) + { + if (SORT_CMP(dst[j], storage[i]) > 0) + dst[k] = dst[j--]; + else + dst[k] = storage[i--]; + } + else if (i >= 0) + dst[k] = storage[i--]; + else + dst[k] = dst[j--]; + } + } +} + +static int TIM_SORT_COLLAPSE(SORT_TYPE *dst, TIM_SORT_RUN_T *stack, int stack_curr, TEMP_STORAGE_T *store, const size_t size) +{ + while (1) { + int64_t A, B, C, D; + int ABC, BCD, BD, CD; + + /* if the stack only has one thing on it, we are done with the collapse */ + if (stack_curr <= 1) { + break; + } + + /* if this is the last merge, just do it */ + if ((stack_curr == 2) && (stack[0].length + stack[1].length == size)) { + TIM_SORT_MERGE(dst, stack, stack_curr, store); + stack[0].length += stack[1].length; + stack_curr--; + break; + } + /* check if the invariant is off for a stack of 2 elements */ + else if ((stack_curr == 2) && (stack[0].length <= stack[1].length)) { + TIM_SORT_MERGE(dst, stack, stack_curr, store); + stack[0].length += stack[1].length; + stack_curr--; + break; + } else if (stack_curr == 2) { + break; + } + + B = stack[stack_curr - 3].length; + C = stack[stack_curr - 2].length; + D = stack[stack_curr - 1].length; + + if (stack_curr >= 4) { + A = stack[stack_curr - 4].length; + ABC = (A <= B + C); + } else { + ABC = 0; + } + + BCD = (B <= C + D) || ABC; + CD = (C <= D); + BD = (B < D); + + /* Both invariants are good */ + if (!BCD && !CD) { + break; + } + + /* left merge */ + if (BCD && !CD) { + TIM_SORT_MERGE(dst, stack, stack_curr - 1, store); + stack[stack_curr - 3].length += stack[stack_curr - 2].length; + stack[stack_curr - 2] = stack[stack_curr - 1]; + stack_curr--; + } else { + /* right merge */ + TIM_SORT_MERGE(dst, stack, stack_curr, store); + stack[stack_curr - 2].length += stack[stack_curr - 1].length; + stack_curr--; + } + } + + return stack_curr; +} + +void TIM_SORT(SORT_TYPE *dst, const size_t size) +{ + int minrun; + TEMP_STORAGE_T _store, *store; + TIM_SORT_RUN_T run_stack[128]; + int stack_curr = 0; + int64_t len, run; + int64_t curr = 0; + + if (size < 64) + { + BINARY_INSERTION_SORT(dst, size); + return; + } + + /* compute the minimum run length */ + minrun = compute_minrun(size); + + /* temporary storage for merges */ + store = &_store; + store->alloc = 0; + store->storage = NULL; + + PUSH_NEXT(); + PUSH_NEXT(); + PUSH_NEXT(); + + while (1) + { + if (!CHECK_INVARIANT(run_stack, stack_curr)) + { + stack_curr = TIM_SORT_COLLAPSE(dst, run_stack, stack_curr, store, size); + continue; + } + PUSH_NEXT(); + } +} + +#undef SORT_CONCAT +#undef SORT_MAKE_STR1 +#undef SORT_MAKE_STR +#undef SORT_NAME +#undef SORT_TYPE +#undef SORT_CMP +#undef TEMP_STORAGE_T +#undef TIM_SORT_RUN_T +#undef PUSH_NEXT +#undef SORT_SWAP +#undef SORT_CONCAT +#undef SORT_MAKE_STR1 +#undef SORT_MAKE_STR +#undef BINARY_INSERTION_FIND +#undef BINARY_INSERTION_SORT_START +#undef BINARY_INSERTION_SORT +#undef REVERSE_ELEMENTS +#undef COUNT_RUN +#undef TIM_SORT +#undef TIM_SORT_RESIZE +#undef TIM_SORT_COLLAPSE +#undef TIM_SORT_RUN_T +#undef TEMP_STORAGE_T diff --git a/tree.c b/tree.c new file mode 100644 index 0000000..9d330b8 --- /dev/null +++ b/tree.c @@ -0,0 +1,10122 @@ +/* + * 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 /* for memset() only ! */ +#include +#ifdef HAVE_CTYPE_H +#include +#endif +#ifdef HAVE_STDLIB_H +#include +#endif +#ifdef HAVE_ZLIB_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef LIBXML_HTML_ENABLED +#include +#endif +#ifdef LIBXML_DEBUG_ENABLED +#include +#endif + +#include "buf.h" +#include "save.h" + +int __xmlRegisterCallbacks = 0; + +/************************************************************************ + * * + * Forward declarations * + * * + ************************************************************************/ + +static xmlNsPtr +xmlNewReconciliedNs(xmlDocPtr doc, xmlNodePtr tree, xmlNsPtr ns); + +static xmlChar* xmlGetPropNodeValueInternal(const xmlAttr *prop); + +/************************************************************************ + * * + * 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\n"; + break; + case XML_TREE_INVALID_DEC: + msg = "invalid decimal character value\n"; + break; + case XML_TREE_UNTERMINATED_ENTITY: + msg = "unterminated entity reference %15s\n"; + break; + case XML_TREE_NOT_UTF8: + msg = "string is not in UTF-8\n"; + break; + default: + msg = "unexpected error number\n"; + } + __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 IS_STR_XML(str) ((str != NULL) && (str[0] == 'x') && \ + (str[1] == 'm') && (str[2] == 'l') && (str[3] == 0)) + +/* #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 + +#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(const xmlDtd *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(const xmlDtd *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; + + if (prefix == NULL) return(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 length in byte of the prefix and return a pointer + * to the start of the name without the prefix + */ + +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) || defined(LIBXML_DEBUG_ENABLED) || defined (LIBXML_HTML_ENABLED) || defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED) || defined(LIBXML_LEGACY_ENABLED) +/** + * xmlValidateNCName: + * @value: the value to check + * @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; + + if (value == NULL) + return(-1); + + /* + * 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; + + if (value == NULL) + return(-1); + /* + * 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; + + if (value == NULL) + return(-1); + /* + * 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; + + if (value == NULL) + return(-1); + /* + * 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) { + if ((scheme == XML_BUFFER_ALLOC_EXACT) || + (scheme == XML_BUFFER_ALLOC_DOUBLEIT) || + (scheme == XML_BUFFER_ALLOC_HYBRID)) + 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 + * XML_BUFFER_ALLOC_HYBRID - use exact sizes on small strings to keep memory usage tight + * in normal usage, and doubleit on large strings to avoid + * pathological 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. + * Note that for a default namespace, @prefix should be NULL. + * + * We use href==NULL in the case of an element creation where the namespace + * was not defined. + * + * Returns a new namespace pointer or NULL + */ +xmlNsPtr +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"))) { + /* xml namespace is predefined, no need to add it */ + if (xmlStrEqual(href, XML_XML_NAMESPACE)) + return(NULL); + + /* + * Problem, this is an attempt to bind xml prefix to a wrong + * namespace, which breaks + * Namespace constraint: Reserved Prefixes and Namespace Names + * from XML namespace. But documents authors may not care in + * their context so let's proceed. + */ + } + + /* + * 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; + } + if ((node->type == XML_ELEMENT_NODE) || + (node->type == XML_ATTRIBUTE_NODE)) + 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(const xmlDoc *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 (cur->name == NULL) { + xmlTreeErrMemory("building internal subset"); + xmlFree(cur); + return(NULL); + } + } + if (ExternalID != NULL) { + cur->ExternalID = xmlStrdup(ExternalID); + if (cur->ExternalID == NULL) { + xmlTreeErrMemory("building internal subset"); + if (cur->name != NULL) + xmlFree((char *)cur->name); + xmlFree(cur); + return(NULL); + } + } + if (SystemID != NULL) { + cur->SystemID = xmlStrdup(SystemID); + if (cur->SystemID == NULL) { + xmlTreeErrMemory("building internal subset"); + if (cur->name != NULL) + xmlFree((char *)cur->name); + if (cur->ExternalID != NULL) + xmlFree((char *)cur->ExternalID); + xmlFree(cur); + return(NULL); + } + } + 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" dictionary in the + * current scope + */ +#define DICT_FREE(str) \ + if ((str) && ((!dict) || \ + (xmlDictOwns(dict, (const xmlChar *)(str)) == 0))) \ + xmlFree((char *)(str)); + + +/** + * DICT_COPY: + * @str: a string + * + * Copy a string using a "dict" dictionary in the current scope, + * if availabe. + */ +#define DICT_COPY(str, cpy) \ + if (str) { \ + if (dict) { \ + if (xmlDictOwns(dict, (const xmlChar *)(str))) \ + cpy = (xmlChar *) (str); \ + else \ + cpy = (xmlChar *) xmlDictLookup((dict), (const xmlChar *)(str), -1); \ + } else \ + cpy = xmlStrdup((const xmlChar *)(str)); } + +/** + * DICT_CONST_COPY: + * @str: a string + * + * Copy a string using a "dict" dictionary in the current scope, + * if availabe. + */ +#define DICT_CONST_COPY(str, cpy) \ + if (str) { \ + if (dict) { \ + if (xmlDictOwns(dict, (const xmlChar *)(str))) \ + cpy = (const xmlChar *) (str); \ + else \ + cpy = xmlDictLookup((dict), (const xmlChar *)(str), -1); \ + } else \ + cpy = (const xmlChar *) xmlStrdup((const xmlChar *)(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 nodes which are not part of the specific lists + * of notations, elements, attributes and entities. + */ + while (c != NULL) { + next = c->next; + if ((c->type != XML_NOTATION_NODE) && + (c->type != XML_ELEMENT_DECL) && + (c->type != XML_ATTRIBUTE_DECL) && + (c->type != XML_ENTITY_DECL)) { + 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); + if (cur->version == NULL) { + xmlTreeErrMemory("building doc"); + xmlFree(cur); + return(NULL); + } + cur->standalone = -1; + cur->compression = -1; /* not initialized */ + cur->doc = cur; + cur->parseFlags = 0; + cur->properties = XML_DOC_USERBUILT; + /* + * 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; + } +#ifdef LIBXML_DEBUG_RUNTIME +#ifdef LIBXML_DEBUG_ENABLED + xmlDebugCheckDocument(stderr, cur); +#endif +#endif + + 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(const xmlDoc *doc, const xmlChar *value, int len) { + xmlNodePtr ret = NULL, last = NULL; + xmlNodePtr node; + xmlChar *val; + const xmlChar *cur = value, *end = cur + len; + const xmlChar *q; + xmlEntityPtr ent; + xmlBufPtr buf; + + if (value == NULL) return(NULL); + + buf = xmlBufCreateSize(0); + if (buf == NULL) return(NULL); + xmlBufSetAllocationScheme(buf, XML_BUFFER_ALLOC_HYBRID); + + q = cur; + while ((cur < end) && (*cur != 0)) { + if (cur[0] == '&') { + int charval = 0; + xmlChar tmp; + + /* + * Save the current text. + */ + if (cur != q) { + if (xmlBufAdd(buf, q, cur - q)) + goto out; + } + 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); + goto out; + } + 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 (xmlBufCat(buf, ent->content)) + goto out; + + } else { + /* + * Flush buffer so far + */ + if (!xmlBufIsEmpty(buf)) { + node = xmlNewDocText(doc, NULL); + if (node == NULL) { + if (val != NULL) xmlFree(val); + goto out; + } + node->content = xmlBufDetach(buf); + + if (last == NULL) { + last = ret = node; + } else { + last = xmlAddNextSibling(last, node); + } + } + + /* + * Create a new REFERENCE_REF node + */ + node = xmlNewReference(doc, val); + if (node == NULL) { + if (val != NULL) xmlFree(val); + goto out; + } + 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; + ent->last = temp; + temp = temp->next; + } + } + if (last == NULL) { + last = ret = node; + } else { + last = xmlAddNextSibling(last, node); + } + } + xmlFree(val); + } + cur++; + q = cur; + } + if (charval != 0) { + xmlChar buffer[10]; + int l; + + l = xmlCopyCharMultiByte(buffer, charval); + buffer[l] = 0; + + if (xmlBufCat(buf, buffer)) + goto out; + charval = 0; + } + } else + cur++; + } + + if (cur != q) { + /* + * Handle the last piece of text. + */ + if (xmlBufAdd(buf, q, cur - q)) + goto out; + } + + if (!xmlBufIsEmpty(buf)) { + node = xmlNewDocText(doc, NULL); + if (node == NULL) goto out; + node->content = xmlBufDetach(buf); + + if (last == NULL) { + ret = node; + } else { + xmlAddNextSibling(last, node); + } + } else if (ret == NULL) { + ret = xmlNewDocText(doc, BAD_CAST ""); + } + +out: + xmlBufFree(buf); + 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(const xmlDoc *doc, const xmlChar *value) { + xmlNodePtr ret = NULL, last = NULL; + xmlNodePtr node; + xmlChar *val; + const xmlChar *cur = value; + const xmlChar *q; + xmlEntityPtr ent; + xmlBufPtr buf; + + if (value == NULL) return(NULL); + + buf = xmlBufCreateSize(0); + if (buf == NULL) return(NULL); + xmlBufSetAllocationScheme(buf, XML_BUFFER_ALLOC_HYBRID); + + q = cur; + while (*cur != 0) { + if (cur[0] == '&') { + int charval = 0; + xmlChar tmp; + + /* + * Save the current text. + */ + if (cur != q) { + if (xmlBufAdd(buf, q, cur - q)) + goto out; + } + 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); + goto out; + } + 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 (xmlBufCat(buf, ent->content)) + goto out; + + } else { + /* + * Flush buffer so far + */ + if (!xmlBufIsEmpty(buf)) { + node = xmlNewDocText(doc, NULL); + node->content = xmlBufDetach(buf); + + if (last == NULL) { + last = ret = node; + } else { + last = xmlAddNextSibling(last, node); + } + } + + /* + * Create a new REFERENCE_REF node + */ + node = xmlNewReference(doc, val); + if (node == NULL) { + if (val != NULL) xmlFree(val); + goto out; + } + else if ((ent != NULL) && (ent->children == NULL)) { + xmlNodePtr temp; + + ent->children = (xmlNodePtr) -1; + 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 buffer[10]; + int len; + + len = xmlCopyCharMultiByte(buffer, charval); + buffer[len] = 0; + + if (xmlBufCat(buf, buffer)) + goto out; + charval = 0; + } + } else + cur++; + } + if ((cur != q) || (ret == NULL)) { + /* + * Handle the last piece of text. + */ + xmlBufAdd(buf, q, cur - q); + } + + if (!xmlBufIsEmpty(buf)) { + node = xmlNewDocText(doc, NULL); + node->content = xmlBufDetach(buf); + + if (last == NULL) { + ret = node; + } else { + xmlAddNextSibling(last, node); + } + } + +out: + xmlBufFree(buf); + 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, const xmlNode *list, int inLine) +{ + const xmlNode *node = list; + xmlChar *ret = NULL; + xmlEntityPtr ent; + int attr; + + if (list == NULL) + return (NULL); + if ((list->parent != NULL) && (list->parent->type == XML_ATTRIBUTE_NODE)) + attr = 1; + else + attr = 0; + + while (node != NULL) { + if ((node->type == XML_TEXT_NODE) || + (node->type == XML_CDATA_SECTION_NODE)) { + if (inLine) { + ret = xmlStrcat(ret, node->content); + } else { + xmlChar *buffer; + + if (attr) + buffer = xmlEncodeAttributeEntities(doc, node->content); + else + 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(const xmlDoc *doc, const xmlNode *list, int inLine) +{ + const xmlNode *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 */ + +static xmlAttrPtr +xmlNewPropInternal(xmlNodePtr node, xmlNsPtr ns, + const xmlChar * name, const xmlChar * value, + int eatname) +{ + xmlAttrPtr cur; + xmlDocPtr doc = NULL; + + if ((node != NULL) && (node->type != XML_ELEMENT_NODE)) { + if ((eatname == 1) && + ((node->doc == NULL) || + (!(xmlDictOwns(node->doc->dict, name))))) + xmlFree((xmlChar *) name); + return (NULL); + } + + /* + * Allocate a new property and fill the fields. + */ + cur = (xmlAttrPtr) xmlMalloc(sizeof(xmlAttr)); + if (cur == NULL) { + if ((eatname == 1) && + ((node == NULL) || (node->doc == NULL) || + (!(xmlDictOwns(node->doc->dict, name))))) + xmlFree((xmlChar *) name); + 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; + + if (eatname == 0) { + if ((doc != NULL) && (doc->dict != NULL)) + cur->name = (xmlChar *) xmlDictLookup(doc->dict, name, -1); + else + cur->name = xmlStrdup(name); + } else + cur->name = name; + + if (value != NULL) { + xmlNodePtr tmp; + + if(!xmlCheckUTF8(value)) { + xmlTreeErr(XML_TREE_NOT_UTF8, (xmlNodePtr) doc, + NULL); + if (doc != NULL) + doc->encoding = xmlStrdup(BAD_CAST "ISO-8859-1"); + } + cur->children = xmlNewDocText(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; + } + } + + /* + * 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 ((value != NULL) && (node != NULL) && + (xmlIsID(node->doc, node, cur) == 1)) + xmlAddID(NULL, node->doc, value, cur); + + if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue)) + xmlRegisterNodeDefaultValue((xmlNodePtr) cur); + return (cur); +} + +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_HTML_ENABLED) || \ + defined(LIBXML_SCHEMAS_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) { + + if (name == NULL) { +#ifdef DEBUG_TREE + xmlGenericError(xmlGenericErrorContext, + "xmlNewProp : name == NULL\n"); +#endif + return(NULL); + } + + return xmlNewPropInternal(node, NULL, name, value, 0); +} +#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) { + + if (name == NULL) { +#ifdef DEBUG_TREE + xmlGenericError(xmlGenericErrorContext, + "xmlNewNsProp : name == NULL\n"); +#endif + return(NULL); + } + + return xmlNewPropInternal(node, ns, name, value, 0); +} + +/** + * 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) { + + if (name == NULL) { +#ifdef DEBUG_TREE + xmlGenericError(xmlGenericErrorContext, + "xmlNewNsPropEatName : name == NULL\n"); +#endif + return(NULL); + } + + return xmlNewPropInternal(node, ns, name, value, 1); +} + +/** + * 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; + + if ((doc != NULL) && (doc->dict != NULL)) + cur->name = xmlDictLookup(doc->dict, name, -1); + else + 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->doc != NULL) && (cur->atype == XML_ATTRIBUTE_ID)) { + xmlRemoveID(cur->doc, cur); + } + if (cur->children != NULL) xmlFreeNodeList(cur->children); + DICT_FREE(cur->name) + xmlFree(cur); +} + +/** + * 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; + if (cur->next != NULL) + cur->next->prev = NULL; + 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); +} + +/** + * xmlNewDocPI: + * @doc: the target document + * @name: the processing instruction name + * @content: the PI content + * + * Creation of a processing instruction element. + * Returns a pointer to the new node object. + */ +xmlNodePtr +xmlNewDocPI(xmlDocPtr doc, 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; + + if ((doc != NULL) && (doc->dict != NULL)) + cur->name = xmlDictLookup(doc->dict, name, -1); + else + cur->name = xmlStrdup(name); + if (content != NULL) { + cur->content = xmlStrdup(content); + } + cur->doc = doc; + + if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue)) + xmlRegisterNodeDefaultValue((xmlNodePtr)cur); + return(cur); +} + +/** + * xmlNewPI: + * @name: the processing instruction name + * @content: the PI content + * + * Creation of a processing instruction element. + * Use xmlDocNewPI preferably to get string interning + * + * Returns a pointer to the new node object. + */ +xmlNodePtr +xmlNewPI(const xmlChar *name, const xmlChar *content) { + return(xmlNewDocPI(NULL, name, content)); +} + +/** + * 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"); + /* we can't check here that name comes from the doc dictionary */ + 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; + + if ((doc != NULL) && (doc->dict != NULL)) + cur = xmlNewNodeEatName(ns, (xmlChar *) + xmlDictLookup(doc->dict, name, -1)); + else + 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) + } + } else { + /* if name don't come from the doc dictionary free it here */ + if ((name != NULL) && (doc != NULL) && + (!(xmlDictOwns(doc->dict, name)))) + xmlFree(name); + } + 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 = xmlNewDocNode(doc, ns, name, NULL); + 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; + + if (name == NULL) + return(NULL); + + /* + * 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(const xmlDoc *doc, const xmlChar *name) { + xmlNodePtr cur; + xmlEntityPtr ent; + + if (name == NULL) + return(NULL); + + /* + * 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 = (xmlDoc *)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(const xmlDoc *doc, const xmlChar *content) { + xmlNodePtr cur; + + cur = xmlNewText(content); + if (cur != NULL) cur->doc = (xmlDoc *)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) || (tree->type == XML_NAMESPACE_DECL)) + return; + if (tree->doc != doc) { + if(tree->type == XML_ELEMENT_NODE) { + prop = tree->properties; + while (prop != NULL) { + if (prop->atype == XML_ATTRIBUTE_ID) { + xmlRemoveID(tree->doc, prop); + } + + prop->doc = doc; + xmlSetListDoc(prop->children, doc); + + /* + * TODO: ID attributes should be also added to the new + * document, but this breaks things like xmlReplaceNode. + * The underlying problem is that xmlRemoveID is only called + * if a node is destroyed, not if it's unlinked. + */ +#if 0 + if (xmlIsID(doc, tree, prop)) { + xmlChar *idVal = xmlNodeListGetString(doc, prop->children, + 1); + xmlAddID(NULL, doc, idVal, prop); + } +#endif + + 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) || (list->type == XML_NAMESPACE_DECL)) + 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 */ + +/** + * xmlAddPropSibling: + * @prev: the attribute to which @prop is added after + * @cur: the base attribute passed to calling function + * @prop: the new attribute + * + * Add a new attribute after @prev using @cur as base attribute. + * When inserting before @cur, @prev is passed as @cur->prev. + * When inserting after @cur, @prev is passed as @cur. + * If an existing attribute is found it is detroyed prior to adding @prop. + * + * Returns the attribute being inserted or NULL in case of error. + */ +static xmlNodePtr +xmlAddPropSibling(xmlNodePtr prev, xmlNodePtr cur, xmlNodePtr prop) { + xmlAttrPtr attr; + + if ((cur == NULL) || (cur->type != XML_ATTRIBUTE_NODE) || + (prop == NULL) || (prop->type != XML_ATTRIBUTE_NODE) || + ((prev != NULL) && (prev->type != XML_ATTRIBUTE_NODE))) + return(NULL); + + /* check if an attribute with the same name exists */ + if (prop->ns == NULL) + attr = xmlHasNsProp(cur->parent, prop->name, NULL); + else + attr = xmlHasNsProp(cur->parent, prop->name, prop->ns->href); + + if (prop->doc != cur->doc) { + xmlSetTreeDoc(prop, cur->doc); + } + prop->parent = cur->parent; + prop->prev = prev; + if (prev != NULL) { + prop->next = prev->next; + prev->next = prop; + if (prop->next) + prop->next->prev = prop; + } else { + prop->next = cur; + cur->prev = prop; + } + if (prop->prev == NULL && prop->parent != NULL) + prop->parent->properties = (xmlAttrPtr) prop; + if ((attr != NULL) && (attr->type != XML_ATTRIBUTE_DECL)) { + /* different instance, destroy it (attributes must be unique) */ + xmlRemoveProp((xmlAttrPtr) attr); + } + return prop; +} + +/** + * 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) || (cur->type == XML_NAMESPACE_DECL)) { +#ifdef DEBUG_TREE + xmlGenericError(xmlGenericErrorContext, + "xmlAddNextSibling : cur == NULL\n"); +#endif + return(NULL); + } + if ((elem == NULL) || (elem->type == XML_NAMESPACE_DECL)) { +#ifdef DEBUG_TREE + xmlGenericError(xmlGenericErrorContext, + "xmlAddNextSibling : elem == NULL\n"); +#endif + return(NULL); + } + + if (cur == elem) { +#ifdef DEBUG_TREE + xmlGenericError(xmlGenericErrorContext, + "xmlAddNextSibling : cur == elem\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) { + return xmlAddPropSibling(cur, cur, elem); + } + + 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->parent->last = elem; + return(elem); +} + +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_HTML_ENABLED) || \ + defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_XINCLUDE_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) || (cur->type == XML_NAMESPACE_DECL)) { +#ifdef DEBUG_TREE + xmlGenericError(xmlGenericErrorContext, + "xmlAddPrevSibling : cur == NULL\n"); +#endif + return(NULL); + } + if ((elem == NULL) || (elem->type == XML_NAMESPACE_DECL)) { +#ifdef DEBUG_TREE + xmlGenericError(xmlGenericErrorContext, + "xmlAddPrevSibling : elem == NULL\n"); +#endif + return(NULL); + } + + if (cur == elem) { +#ifdef DEBUG_TREE + xmlGenericError(xmlGenericErrorContext, + "xmlAddPrevSibling : cur == elem\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) { + return xmlAddPropSibling(cur->prev, cur, elem); + } + + 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) && (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) || (cur->type == XML_NAMESPACE_DECL)) { +#ifdef DEBUG_TREE + xmlGenericError(xmlGenericErrorContext, + "xmlAddSibling : cur == NULL\n"); +#endif + return(NULL); + } + + if ((elem == NULL) || (elem->type == XML_NAMESPACE_DECL)) { +#ifdef DEBUG_TREE + xmlGenericError(xmlGenericErrorContext, + "xmlAddSibling : elem == NULL\n"); +#endif + return(NULL); + } + + if (cur == elem) { +#ifdef DEBUG_TREE + xmlGenericError(xmlGenericErrorContext, + "xmlAddSibling : cur == elem\n"); +#endif + return(NULL); + } + + /* + * Constant time is we can rely on the ->parent->last to find + * the last sibling. + */ + if ((cur->type != XML_ATTRIBUTE_NODE) && (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); + } else if (elem->type == XML_ATTRIBUTE_NODE) { + return xmlAddPropSibling(cur, cur, elem); + } + + 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) || (parent->type == XML_NAMESPACE_DECL)) { +#ifdef DEBUG_TREE + xmlGenericError(xmlGenericErrorContext, + "xmlAddChildList : parent == NULL\n"); +#endif + return(NULL); + } + + if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL)) { +#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; + /* the parent may not be linked to a doc ! */ + if (cur->doc != parent->doc) { + xmlSetTreeDoc(cur, parent->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) || (parent->type == XML_NAMESPACE_DECL)) { +#ifdef DEBUG_TREE + xmlGenericError(xmlGenericErrorContext, + "xmlAddChild : parent == NULL\n"); +#endif + return(NULL); + } + + if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL)) { +#ifdef DEBUG_TREE + xmlGenericError(xmlGenericErrorContext, + "xmlAddChild : child == NULL\n"); +#endif + return(NULL); + } + + if (parent == cur) { +#ifdef DEBUG_TREE + xmlGenericError(xmlGenericErrorContext, + "xmlAddChild : parent == cur\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)) { + 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->type != XML_ELEMENT_NODE) + return(NULL); + if (parent->properties != NULL) { + /* check if an attribute with the same name exists */ + xmlAttrPtr lastattr; + + if (cur->ns == NULL) + lastattr = xmlHasNsProp(parent, cur->name, NULL); + else + lastattr = xmlHasNsProp(parent, cur->name, cur->ns->href); + if ((lastattr != NULL) && (lastattr != (xmlAttrPtr) cur) && (lastattr->type != XML_ATTRIBUTE_DECL)) { + /* different instance, destroy it (attributes must be unique) */ + xmlUnlinkNode((xmlNodePtr) lastattr); + xmlFreeProp(lastattr); + } + if (lastattr == (xmlAttrPtr) cur) + return(cur); + + } + if (parent->properties == NULL) { + parent->properties = (xmlAttrPtr) cur; + } else { + /* find the end */ + xmlAttrPtr 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(const xmlNode *parent) { + if ((parent == NULL) || (parent->type == XML_NAMESPACE_DECL)) { +#ifdef DEBUG_TREE + xmlGenericError(xmlGenericErrorContext, + "xmlGetLastChild : parent == NULL\n"); +#endif + return(NULL); + } + return(parent->last); +} + +#ifdef LIBXML_TREE_ENABLED +/* + * 5 interfaces from DOM ElementTraversal + */ + +/** + * xmlChildElementCount: + * @parent: the parent node + * + * Finds the current number of child nodes of that element which are + * element nodes. + * Note the handling of entities references is different than in + * the W3C DOM element traversal spec since we don't have back reference + * from entities content to entities references. + * + * Returns the count of element child or 0 if not available + */ +unsigned long +xmlChildElementCount(xmlNodePtr parent) { + unsigned long ret = 0; + xmlNodePtr cur = NULL; + + if (parent == NULL) + return(0); + switch (parent->type) { + case XML_ELEMENT_NODE: + case XML_ENTITY_NODE: + case XML_DOCUMENT_NODE: + case XML_DOCUMENT_FRAG_NODE: + case XML_HTML_DOCUMENT_NODE: + cur = parent->children; + break; + default: + return(0); + } + while (cur != NULL) { + if (cur->type == XML_ELEMENT_NODE) + ret++; + cur = cur->next; + } + return(ret); +} + +/** + * xmlFirstElementChild: + * @parent: the parent node + * + * Finds the first child node of that element which is a Element node + * Note the handling of entities references is different than in + * the W3C DOM element traversal spec since we don't have back reference + * from entities content to entities references. + * + * Returns the first element child or NULL if not available + */ +xmlNodePtr +xmlFirstElementChild(xmlNodePtr parent) { + xmlNodePtr cur = NULL; + + if (parent == NULL) + return(NULL); + switch (parent->type) { + case XML_ELEMENT_NODE: + case XML_ENTITY_NODE: + case XML_DOCUMENT_NODE: + case XML_DOCUMENT_FRAG_NODE: + case XML_HTML_DOCUMENT_NODE: + cur = parent->children; + break; + default: + return(NULL); + } + while (cur != NULL) { + if (cur->type == XML_ELEMENT_NODE) + return(cur); + cur = cur->next; + } + return(NULL); +} + +/** + * xmlLastElementChild: + * @parent: the parent node + * + * Finds the last child node of that element which is a Element node + * Note the handling of entities references is different than in + * the W3C DOM element traversal spec since we don't have back reference + * from entities content to entities references. + * + * Returns the last element child or NULL if not available + */ +xmlNodePtr +xmlLastElementChild(xmlNodePtr parent) { + xmlNodePtr cur = NULL; + + if (parent == NULL) + return(NULL); + switch (parent->type) { + case XML_ELEMENT_NODE: + case XML_ENTITY_NODE: + case XML_DOCUMENT_NODE: + case XML_DOCUMENT_FRAG_NODE: + case XML_HTML_DOCUMENT_NODE: + cur = parent->last; + break; + default: + return(NULL); + } + while (cur != NULL) { + if (cur->type == XML_ELEMENT_NODE) + return(cur); + cur = cur->prev; + } + return(NULL); +} + +/** + * xmlPreviousElementSibling: + * @node: the current node + * + * Finds the first closest previous sibling of the node which is an + * element node. + * Note the handling of entities references is different than in + * the W3C DOM element traversal spec since we don't have back reference + * from entities content to entities references. + * + * Returns the previous element sibling or NULL if not available + */ +xmlNodePtr +xmlPreviousElementSibling(xmlNodePtr node) { + if (node == NULL) + return(NULL); + switch (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_XINCLUDE_START: + case XML_XINCLUDE_END: + node = node->prev; + break; + default: + return(NULL); + } + while (node != NULL) { + if (node->type == XML_ELEMENT_NODE) + return(node); + node = node->prev; + } + return(NULL); +} + +/** + * xmlNextElementSibling: + * @node: the current node + * + * Finds the first closest next sibling of the node which is an + * element node. + * Note the handling of entities references is different than in + * the W3C DOM element traversal spec since we don't have back reference + * from entities content to entities references. + * + * Returns the next element sibling or NULL if not available + */ +xmlNodePtr +xmlNextElementSibling(xmlNodePtr node) { + if (node == NULL) + return(NULL); + switch (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_XINCLUDE_START: + case XML_XINCLUDE_END: + node = node->next; + break; + default: + return(NULL); + } + while (node != NULL) { + if (node->type == XML_ELEMENT_NODE) + return(node); + node = node->next; + } + return(NULL); +} + +#endif /* LIBXML_TREE_ENABLED */ + +/** + * 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) && + (cur->content != (xmlChar *) &(cur->properties))) { + 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 + * dictionary + */ + 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->type == XML_ENTITY_DECL) { + xmlEntityPtr ent = (xmlEntityPtr) cur; + DICT_FREE(ent->SystemID); + DICT_FREE(ent->ExternalID); + } + 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) && + (cur->content != (xmlChar *) &(cur->properties))) { + 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 dictionary + */ + 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 + * If one need to free the node, use xmlFreeNode() routine after the + * unlink to discard it. + * Note that namespace nodes can't be unlinked as they do not have + * pointer to their parent. + */ +void +xmlUnlinkNode(xmlNodePtr cur) { + if (cur == NULL) { +#ifdef DEBUG_TREE + xmlGenericError(xmlGenericErrorContext, + "xmlUnlinkNode : node == NULL\n"); +#endif + return; + } + if (cur->type == XML_NAMESPACE_DECL) + 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->type == XML_ENTITY_DECL) { + xmlDocPtr doc; + doc = cur->doc; + if (doc != NULL) { + if (doc->intSubset != NULL) { + if (xmlHashLookup(doc->intSubset->entities, cur->name) == cur) + xmlHashRemoveEntry(doc->intSubset->entities, cur->name, + NULL); + if (xmlHashLookup(doc->intSubset->pentities, cur->name) == cur) + xmlHashRemoveEntry(doc->intSubset->pentities, cur->name, + NULL); + } + if (doc->extSubset != NULL) { + if (xmlHashLookup(doc->extSubset->entities, cur->name) == cur) + xmlHashRemoveEntry(doc->extSubset->entities, cur->name, + NULL); + if (xmlHashLookup(doc->extSubset->pentities, cur->name) == cur) + xmlHashRemoveEntry(doc->extSubset->pentities, cur->name, + 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 == cur) return(NULL); + if ((old == NULL) || (old->type == XML_NAMESPACE_DECL) || + (old->parent == NULL)) { +#ifdef DEBUG_TREE + xmlGenericError(xmlGenericErrorContext, + "xmlReplaceNode : old == NULL or without parent\n"); +#endif + return(NULL); + } + if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL)) { + 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); + xmlSetTreeDoc(cur, 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); + +static xmlAttrPtr +xmlCopyPropInternal(xmlDocPtr doc, xmlNodePtr target, xmlAttrPtr cur) { + xmlAttrPtr ret; + + if (cur == NULL) return(NULL); + if ((target != NULL) && (target->type != XML_ELEMENT_NODE)) + return(NULL); + if (target != NULL) + ret = xmlNewDocProp(target->doc, cur->name, NULL); + else if (doc != NULL) + ret = xmlNewDocProp(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); +} + +/** + * 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) { + return xmlCopyPropInternal(NULL, target, cur); +} + +/** + * 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; + + if ((target != NULL) && (target->type != XML_ELEMENT_NODE)) + return(NULL); + while (cur != NULL) { + q = xmlCopyProp(target, cur); + if (q == NULL) + return(NULL); + 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(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) xmlCopyPropInternal(doc, 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) { + if ((doc != NULL) && (doc->dict != NULL)) + ret->name = xmlDictLookup(doc->dict, node->name, -1); + else + 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->type == XML_ELEMENT_NODE) || + (node->type == XML_XINCLUDE_START)) && (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 { + ret->ns = xmlNewReconciliedNs(doc, ret, node->ns); + } + } else { + /* + * reference the existing namespace definition in our own tree. + */ + ret->ns = ns; + } + } + if (((node->type == XML_ELEMENT_NODE) || + (node->type == XML_XINCLUDE_START)) && (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) && + ((__xmlRegisterCallbacks) && (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 ); + if (q == NULL) return(NULL); + 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 (q == NULL) return(NULL); + 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(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(xmlNodePtr node, xmlDocPtr doc, int extended) { + xmlNodePtr ret; + + ret = xmlStaticCopyNode(node, doc, NULL, extended); + return(ret); +} + +/** + * xmlDocCopyNodeList: + * @doc: the target document + * @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 xmlDocCopyNodeList(xmlDocPtr doc, xmlNodePtr node) { + xmlNodePtr ret = xmlStaticCopyNodeList(node, doc, NULL); + return(ret); +} + +/** + * xmlCopyNodeList: + * @node: the first node in the list. + * + * Do a recursive copy of the node list. + * Use xmlDocCopyNodeList() if possible to ensure string interning. + * + * Returns: a new #xmlNodePtr, or NULL in case of error. + */ +xmlNodePtr xmlCopyNodeList(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); + if (doc->URL != NULL) + ret->URL = xmlStrdup(doc->URL); + 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); + if (ret->intSubset == NULL) { + xmlFreeDoc(ret); + return(NULL); + } + 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 * + * * + ************************************************************************/ + +/** + * xmlGetLineNoInternal: + * @node: valid node + * @depth: used to limit any risk of recursion + * + * Get line number of @node. + * Try to override the limitation of lines being store in 16 bits ints + * + * Returns the line number if successful, -1 otherwise + */ +static long +xmlGetLineNoInternal(const xmlNode *node, int depth) +{ + long result = -1; + + if (depth >= 5) + return(-1); + + if (!node) + return result; + if ((node->type == XML_ELEMENT_NODE) || + (node->type == XML_TEXT_NODE) || + (node->type == XML_COMMENT_NODE) || + (node->type == XML_PI_NODE)) { + if (node->line == 65535) { + if ((node->type == XML_TEXT_NODE) && (node->psvi != NULL)) + result = (long) node->psvi; + else if ((node->type == XML_ELEMENT_NODE) && + (node->children != NULL)) + result = xmlGetLineNoInternal(node->children, depth + 1); + else if (node->next != NULL) + result = xmlGetLineNoInternal(node->next, depth + 1); + else if (node->prev != NULL) + result = xmlGetLineNoInternal(node->prev, depth + 1); + } + if ((result == -1) || (result == 65535)) + result = (long) node->line; + } else if ((node->prev != NULL) && + ((node->prev->type == XML_ELEMENT_NODE) || + (node->prev->type == XML_TEXT_NODE) || + (node->prev->type == XML_COMMENT_NODE) || + (node->prev->type == XML_PI_NODE))) + result = xmlGetLineNoInternal(node->prev, depth + 1); + else if ((node->parent != NULL) && + (node->parent->type == XML_ELEMENT_NODE)) + result = xmlGetLineNoInternal(node->parent, depth + 1); + + return result; +} + +/** + * xmlGetLineNo: + * @node: valid node + * + * Get line number of @node. + * Try to override the limitation of lines being store in 16 bits ints + * if XML_PARSE_BIG_LINES parser option was used + * + * Returns the line number if successful, -1 otherwise + */ +long +xmlGetLineNo(const xmlNode *node) +{ + return(xmlGetLineNoInternal(node, 0)); +} + +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_DEBUG_ENABLED) +/** + * xmlGetNodePath: + * @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(const xmlNode *node) +{ + const xmlNode *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, generic; + + if ((node == NULL) || (node->type == XML_NAMESPACE_DECL)) + 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) { + generic = 0; + sep = "/"; + name = (const char *) cur->name; + if (cur->ns) { + if (cur->ns->prefix != NULL) { + snprintf(nametemp, sizeof(nametemp) - 1, "%s:%s", + (char *)cur->ns->prefix, (char *)cur->name); + nametemp[sizeof(nametemp) - 1] = 0; + name = nametemp; + } else { + /* + * We cannot express named elements in the default + * namespace, so use "*". + */ + generic = 1; + name = "*"; + } + } + 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) && + (generic || + (xmlStrEqual(cur->name, tmp->name) && + ((tmp->ns == cur->ns) || + ((tmp->ns != NULL) && (cur->ns != NULL) && + (xmlStrEqual(cur->ns->prefix, tmp->ns->prefix))))))) + occur++; + tmp = tmp->prev; + } + if (occur == 0) { + tmp = cur->next; + while (tmp != NULL && occur == 0) { + if ((tmp->type == XML_ELEMENT_NODE) && + (generic || + (xmlStrEqual(cur->name, tmp->name) && + ((tmp->ns == cur->ns) || + ((tmp->ns != NULL) && (cur->ns != NULL) && + (xmlStrEqual(cur->ns->prefix, tmp->ns->prefix))))))) + 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 ((tmp->type == XML_TEXT_NODE) || + (tmp->type == XML_CDATA_SECTION_NODE)) + occur++; + tmp = tmp->prev; + } + /* + * Evaluate if this is the only text- or CDATA-section-node; + * if yes, then we'll get "text()", otherwise "text()[1]". + */ + if (occur == 0) { + tmp = cur->next; + while (tmp != NULL) { + if ((tmp->type == XML_TEXT_NODE) || + (tmp->type == XML_CDATA_SECTION_NODE)) + { + occur = 1; + break; + } + tmp = tmp->next; + } + } else + occur++; + } else if (cur->type == XML_PI_NODE) { + sep = "/"; + snprintf(nametemp, sizeof(nametemp) - 1, + "processing-instruction('%s')", (char *)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); + if (cur->ns) { + if (cur->ns->prefix != NULL) + snprintf(nametemp, sizeof(nametemp) - 1, "%s:%s", + (char *)cur->ns->prefix, (char *)cur->name); + else + snprintf(nametemp, sizeof(nametemp) - 1, "%s", + (char *)cur->name); + nametemp[sizeof(nametemp) - 1] = 0; + name = nametemp; + } + next = ((xmlAttrPtr) cur)->parent; + } else { + next = cur->parent; + } + + /* + * 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", (char *)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(const xmlDoc *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, if root is NULL no action is taken, + * to remove a node from a document use xmlUnlinkNode(root) instead. + * + * 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, NULL if root was NULL + */ +xmlNodePtr +xmlDocSetRootElement(xmlDocPtr doc, xmlNodePtr root) { + xmlNodePtr old = NULL; + + if (doc == NULL) return(NULL); + if ((root == NULL) || (root->type == XML_NAMESPACE_DECL)) + return(NULL); + xmlUnlinkNode(root); + xmlSetTreeDoc(root, 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(const xmlNode *cur) { + xmlChar *lang; + + if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL)) + return(NULL); + while (cur != NULL) { + lang = xmlGetNsProp(cur, BAD_CAST "lang", XML_XML_NAMESPACE); + if (lang != NULL) + 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(const xmlNode *cur) { + xmlChar *space; + + if ((cur == NULL) || (cur->type != XML_ELEMENT_NODE)) + return(-1); + while (cur != NULL) { + space = xmlGetNsProp(cur, BAD_CAST "space", XML_XML_NAMESPACE); + if (space != NULL) { + 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) { + xmlDocPtr doc; + xmlDictPtr dict; + const xmlChar *freeme = NULL; + + 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; + } + doc = cur->doc; + if (doc != NULL) + dict = doc->dict; + else + dict = NULL; + if (dict != NULL) { + if ((cur->name != NULL) && (!xmlDictOwns(dict, cur->name))) + freeme = cur->name; + cur->name = xmlDictLookup(dict, name, -1); + } else { + if (cur->name != NULL) + freeme = cur->name; + cur->name = xmlStrdup(name); + } + + if (freeme) + xmlFree((xmlChar *) freeme); +} +#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; + xmlChar* fixed; + + 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 = xmlPathToURI(uri); + return; + } + } + + ns = xmlSearchNsByHref(cur->doc, cur, XML_XML_NAMESPACE); + if (ns == NULL) + return; + fixed = xmlPathToURI(uri); + if (fixed != NULL) { + xmlSetNsProp(cur, ns, BAD_CAST "base", fixed); + xmlFree(fixed); + } else { + 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 + * doc->URL in this case + * + * 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(const xmlDoc *doc, const xmlNode *cur) { + xmlChar *oldbase = NULL; + xmlChar *base, *newbase; + + if ((cur == NULL) && (doc == NULL)) + return(NULL); + if ((cur != NULL) && (cur->type == XML_NAMESPACE_DECL)) + return(NULL); + if (doc == NULL) doc = cur->doc; + if ((doc != NULL) && (doc->type == XML_HTML_DOCUMENT_NODE)) { + cur = doc->children; + 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, const xmlNode *cur) +{ + xmlBufPtr buf; + int ret; + + if ((cur == NULL) || (buffer == NULL)) return(-1); + buf = xmlBufFromBuffer(buffer); + ret = xmlBufGetNodeContent(buf, cur); + buffer = xmlBufBackToBuffer(buf); + if ((ret < 0) || (buffer == NULL)) + return(-1); + return(0); +} + +/** + * xmlBufGetNodeContent: + * @buf: a buffer xmlBufPtr + * @cur: the node being read + * + * Read the value of a node @cur, this can be either the text carried + * directly by this node if it's a TEXT node or the aggregate string + * of the values carried by this node child's (TEXT and ENTITY_REF). + * Entity references are substituted. + * Fills up the buffer @buf with this value + * + * Returns 0 in case of success and -1 in case of error. + */ +int +xmlBufGetNodeContent(xmlBufPtr buf, const xmlNode *cur) +{ + if ((cur == NULL) || (buf == NULL)) return(-1); + switch (cur->type) { + case XML_CDATA_SECTION_NODE: + case XML_TEXT_NODE: + xmlBufCat(buf, cur->content); + break; + case XML_DOCUMENT_FRAG_NODE: + case XML_ELEMENT_NODE:{ + const xmlNode *tmp = cur; + + while (tmp != NULL) { + switch (tmp->type) { + case XML_CDATA_SECTION_NODE: + case XML_TEXT_NODE: + if (tmp->content != NULL) + xmlBufCat(buf, tmp->content); + break; + case XML_ENTITY_REF_NODE: + xmlBufGetNodeContent(buf, tmp); + 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) + xmlBufCat(buf, tmp->content); + else + xmlBufGetNodeContent(buf, tmp); + tmp = tmp->next; + } + break; + } + case XML_COMMENT_NODE: + case XML_PI_NODE: + xmlBufCat(buf, 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) { + xmlBufGetNodeContent(buf, 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)) { + xmlBufGetNodeContent(buf, cur); + } + cur = cur->next; + } + break; + case XML_NAMESPACE_DECL: + xmlBufCat(buf, ((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(const xmlNode *cur) +{ + if (cur == NULL) + return (NULL); + switch (cur->type) { + case XML_DOCUMENT_FRAG_NODE: + case XML_ELEMENT_NODE:{ + xmlBufPtr buf; + xmlChar *ret; + + buf = xmlBufCreateSize(64); + if (buf == NULL) + return (NULL); + xmlBufGetNodeContent(buf, cur); + ret = xmlBufDetach(buf); + xmlBufFree(buf); + return (ret); + } + case XML_ATTRIBUTE_NODE: + return(xmlGetPropNodeValueInternal((xmlAttrPtr) cur)); + 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; + xmlBufPtr buf; + xmlChar *ret; + + /* lookup entity declaration */ + ent = xmlGetDocEntity(cur->doc, cur->name); + if (ent == NULL) + return (NULL); + + buf = xmlBufCreate(); + if (buf == NULL) + return (NULL); + + xmlBufGetNodeContent(buf, cur); + + ret = xmlBufDetach(buf); + xmlBufFree(buf); + 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: { + xmlBufPtr buf; + xmlChar *ret; + + buf = xmlBufCreate(); + if (buf == NULL) + return (NULL); + + xmlBufGetNodeContent(buf, (xmlNodePtr) cur); + + ret = xmlBufDetach(buf); + xmlBufFree(buf); + 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. + * NOTE: @content is supposed to be a piece of XML CDATA, so it allows entity + * references, but XML special chars need to be escaped first by using + * xmlEncodeEntitiesReentrant() resp. xmlEncodeSpecialChars(). + */ +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) && + (cur->content != (xmlChar *) &(cur->properties))) { + if (!((cur->doc != NULL) && (cur->doc->dict != NULL) && + (xmlDictOwns(cur->doc->dict, cur->content)))) + xmlFree(cur->content); + } + if (cur->children != NULL) xmlFreeNodeList(cur->children); + cur->last = cur->children = NULL; + if (content != NULL) { + cur->content = xmlStrdup(content); + } else + cur->content = NULL; + cur->properties = NULL; + cur->nsDef = 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. + * NOTE: @content is supposed to be a piece of XML CDATA, so it allows entity + * references, but XML special chars need to be escaped first by using + * xmlEncodeEntitiesReentrant() resp. xmlEncodeSpecialChars(). + */ +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) && + (cur->content != (xmlChar *) &(cur->properties))) { + if (!((cur->doc != NULL) && (cur->doc->dict != NULL) && + (xmlDictOwns(cur->doc->dict, cur->content)))) + xmlFree(cur->content); + } + if (cur->children != NULL) xmlFreeNodeList(cur->children); + cur->children = cur->last = NULL; + if (content != NULL) { + cur->content = xmlStrndup(content, len); + } else + cur->content = NULL; + cur->properties = NULL; + cur->nsDef = 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. + * NOTE: In contrast to xmlNodeSetContentLen(), @content is supposed to be + * raw text, so unescaped XML special chars are allowed, entity + * references are not supported. + */ +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->content == (xmlChar *) &(cur->properties)) || + ((cur->doc != NULL) && (cur->doc->dict != NULL) && + xmlDictOwns(cur->doc->dict, cur->content))) { + cur->content = xmlStrncatNew(cur->content, content, len); + cur->properties = NULL; + cur->nsDef = NULL; + break; + } + cur->content = xmlStrncat(cur->content, content, len); + } + 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. + * NOTE: In contrast to xmlNodeSetContent(), @content is supposed to be + * raw text, so unescaped XML special chars are allowed, entity + * references are not supported. + */ +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) || defined(LIBXML_SCHEMAS_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(const xmlDoc *doc ATTRIBUTE_UNUSED, const xmlNode *node) +{ + xmlNsPtr cur; + xmlNsPtr *ret = NULL; + int nbns = 0; + int maxns = 10; + int i; + + if ((node == NULL) || (node->type == XML_NAMESPACE_DECL)) + return(NULL); + + while (node != NULL) { + if (node->type == XML_ELEMENT_NODE) { + cur = node->nsDef; + 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 */ + +/* +* xmlTreeEnsureXMLDecl: +* @doc: the doc +* +* Ensures that there is an XML namespace declaration on the doc. +* +* Returns the XML ns-struct or NULL on API and internal errors. +*/ +static xmlNsPtr +xmlTreeEnsureXMLDecl(xmlDocPtr doc) +{ + if (doc == NULL) + return (NULL); + if (doc->oldNs != NULL) + return (doc->oldNs); + { + xmlNsPtr ns; + ns = (xmlNsPtr) xmlMalloc(sizeof(xmlNs)); + if (ns == NULL) { + xmlTreeErrMemory( + "allocating the XML namespace"); + return (NULL); + } + memset(ns, 0, sizeof(xmlNs)); + ns->type = XML_LOCAL_NAMESPACE; + ns->href = xmlStrdup(XML_XML_NAMESPACE); + ns->prefix = xmlStrdup((const xmlChar *)"xml"); + doc->oldNs = ns; + return (ns); + } +} + +/** + * 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; + const xmlNode *orig = node; + + if ((node == NULL) || (node->type == XML_NAMESPACE_DECL)) return(NULL); + if ((nameSpace != NULL) && + (xmlStrEqual(nameSpace, (const xmlChar *)"xml"))) { + if ((doc == NULL) && (node->type == XML_ELEMENT_NODE)) { + /* + * 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 == NULL) { + doc = node->doc; + if (doc == NULL) + return(NULL); + } + /* + * Return the XML namespace declaration held by the doc. + */ + if (doc->oldNs == NULL) + return(xmlTreeEnsureXMLDecl(doc)); + else + 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; + int is_attr; + + if ((node == NULL) || (node->type == XML_NAMESPACE_DECL) || (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 == NULL) { + doc = node->doc; + if (doc == NULL) + return(NULL); + } + /* + * Return the XML namespace declaration held by the doc. + */ + if (doc->oldNs == NULL) + return(xmlTreeEnsureXMLDecl(doc)); + else + return(doc->oldNs); + } + is_attr = (node->type == XML_ATTRIBUTE_NODE); + 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 (((!is_attr) || (cur->prefix != NULL)) && + (xmlNsInScope(doc, orig, node, cur->prefix) == 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 (((!is_attr) || (cur->prefix != NULL)) && + (xmlNsInScope(doc, orig, node, cur->prefix) == 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 + */ +static xmlNsPtr +xmlNewReconciliedNs(xmlDocPtr doc, xmlNodePtr tree, xmlNsPtr ns) { + xmlNsPtr def; + xmlChar prefix[50]; + int counter = 1; + + if ((tree == NULL) || (tree->type != XML_ELEMENT_NODE)) { +#ifdef DEBUG_TREE + xmlGenericError(xmlGenericErrorContext, + "xmlNewReconciliedNs : tree == NULL\n"); +#endif + return(NULL); + } + if ((ns == NULL) || (ns->type != XML_NAMESPACE_DECL)) { +#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", (char *)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", + (char *)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; + + if ((node == NULL) || (node->type != XML_ELEMENT_NODE)) return(-1); + if ((doc == NULL) || (doc->type != XML_DOCUMENT_NODE)) return(-1); + if (node->doc != doc) return(-1); + 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. + */ + if (node->type == XML_ELEMENT_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) && (node->type != XML_ENTITY_REF_NODE)) { + /* 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 */ + +static xmlAttrPtr +xmlGetPropNodeInternal(const xmlNode *node, const xmlChar *name, + const xmlChar *nsName, int useDTD) +{ + xmlAttrPtr prop; + + if ((node == NULL) || (node->type != XML_ELEMENT_NODE) || (name == NULL)) + return(NULL); + + if (node->properties != NULL) { + prop = node->properties; + if (nsName == NULL) { + /* + * We want the attr to be in no namespace. + */ + do { + if ((prop->ns == NULL) && xmlStrEqual(prop->name, name)) { + return(prop); + } + prop = prop->next; + } while (prop != NULL); + } else { + /* + * We want the attr to be in the specified namespace. + */ + do { + if ((prop->ns != NULL) && xmlStrEqual(prop->name, name) && + ((prop->ns->href == nsName) || + xmlStrEqual(prop->ns->href, nsName))) + { + return(prop); + } + prop = prop->next; + } while (prop != NULL); + } + } + +#ifdef LIBXML_TREE_ENABLED + if (! useDTD) + return(NULL); + /* + * Check if there is a default/fixed attribute declaration in + * the internal or external subset. + */ + if ((node->doc != NULL) && (node->doc->intSubset != NULL)) { + xmlDocPtr doc = node->doc; + xmlAttributePtr attrDecl = NULL; + xmlChar *elemQName, *tmpstr = NULL; + + /* + * We need the QName of the element for the DTD-lookup. + */ + if ((node->ns != NULL) && (node->ns->prefix != NULL)) { + tmpstr = xmlStrdup(node->ns->prefix); + tmpstr = xmlStrcat(tmpstr, BAD_CAST ":"); + tmpstr = xmlStrcat(tmpstr, node->name); + if (tmpstr == NULL) + return(NULL); + elemQName = tmpstr; + } else + elemQName = (xmlChar *) node->name; + if (nsName == NULL) { + /* + * The common and nice case: Attr in no namespace. + */ + attrDecl = xmlGetDtdQAttrDesc(doc->intSubset, + elemQName, name, NULL); + if ((attrDecl == NULL) && (doc->extSubset != NULL)) { + attrDecl = xmlGetDtdQAttrDesc(doc->extSubset, + elemQName, name, NULL); + } + } else { + xmlNsPtr *nsList, *cur; + + /* + * The ugly case: Search using the prefixes of in-scope + * ns-decls corresponding to @nsName. + */ + nsList = xmlGetNsList(node->doc, node); + if (nsList == NULL) { + if (tmpstr != NULL) + xmlFree(tmpstr); + return(NULL); + } + cur = nsList; + while (*cur != NULL) { + if (xmlStrEqual((*cur)->href, nsName)) { + attrDecl = xmlGetDtdQAttrDesc(doc->intSubset, elemQName, + name, (*cur)->prefix); + if (attrDecl) + break; + if (doc->extSubset != NULL) { + attrDecl = xmlGetDtdQAttrDesc(doc->extSubset, elemQName, + name, (*cur)->prefix); + if (attrDecl) + break; + } + } + cur++; + } + xmlFree(nsList); + } + if (tmpstr != NULL) + xmlFree(tmpstr); + /* + * Only default/fixed attrs are relevant. + */ + if ((attrDecl != NULL) && (attrDecl->defaultValue != NULL)) + return((xmlAttrPtr) attrDecl); + } +#endif /* LIBXML_TREE_ENABLED */ + return(NULL); +} + +static xmlChar* +xmlGetPropNodeValueInternal(const xmlAttr *prop) +{ + if (prop == NULL) + return(NULL); + if (prop->type == XML_ATTRIBUTE_NODE) { + /* + * Note that we return at least the empty string. + * TODO: Do we really always want that? + */ + if (prop->children != NULL) { + if ((prop->children->next == NULL) && + ((prop->children->type == XML_TEXT_NODE) || + (prop->children->type == XML_CDATA_SECTION_NODE))) + { + /* + * Optimization for the common case: only 1 text node. + */ + return(xmlStrdup(prop->children->content)); + } else { + xmlChar *ret; + + ret = xmlNodeListGetString(prop->doc, prop->children, 1); + if (ret != NULL) + return(ret); + } + } + return(xmlStrdup((xmlChar *)"")); + } else if (prop->type == XML_ATTRIBUTE_DECL) { + return(xmlStrdup(((xmlAttributePtr)prop)->defaultValue)); + } + return(NULL); +} + +/** + * 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(const xmlNode *node, const xmlChar *name) { + xmlAttrPtr prop; + xmlDocPtr doc; + + if ((node == NULL) || (node->type != XML_ELEMENT_NODE) || (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. + * Note that a namespace of NULL indicates to use the default namespace. + * + * Returns the attribute or the attribute declaration or NULL + * if neither was found. + */ +xmlAttrPtr +xmlHasNsProp(const xmlNode *node, const xmlChar *name, const xmlChar *nameSpace) { + + return(xmlGetPropNodeInternal(node, name, nameSpace, xmlCheckDTD)); +} + +/** + * 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(const xmlNode *node, const xmlChar *name) { + xmlAttrPtr prop; + + prop = xmlHasProp(node, name); + if (prop == NULL) + return(NULL); + return(xmlGetPropNodeValueInternal(prop)); +} + +/** + * 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(const xmlNode *node, const xmlChar *name) { + xmlAttrPtr prop; + + prop = xmlGetPropNodeInternal(node, name, NULL, xmlCheckDTD); + if (prop == NULL) + return(NULL); + return(xmlGetPropNodeValueInternal(prop)); +} + +/** + * 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(const xmlNode *node, const xmlChar *name, const xmlChar *nameSpace) { + xmlAttrPtr prop; + + prop = xmlGetPropNodeInternal(node, name, nameSpace, xmlCheckDTD); + if (prop == NULL) + return(NULL); + return(xmlGetPropNodeValueInternal(prop)); +} + +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) +/** + * xmlUnsetProp: + * @node: the node + * @name: the attribute name + * + * Remove an attribute carried by a node. + * This handles only attributes in no namespace. + * Returns 0 if successful, -1 if not found + */ +int +xmlUnsetProp(xmlNodePtr node, const xmlChar *name) { + xmlAttrPtr prop; + + prop = xmlGetPropNodeInternal(node, name, NULL, 0); + if (prop == NULL) + return(-1); + xmlUnlinkNode((xmlNodePtr) prop); + xmlFreeProp(prop); + return(0); +} + +/** + * 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; + + prop = xmlGetPropNodeInternal(node, name, (ns != NULL) ? ns->href : NULL, 0); + if (prop == NULL) + return(-1); + xmlUnlinkNode((xmlNodePtr) prop); + xmlFreeProp(prop); + return(0); +} +#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 (a QName) + * @value: the attribute value + * + * Set (or reset) an attribute carried by a node. + * If @name has a prefix, then the corresponding + * namespace-binding will be used, if in scope; it is an + * error it there's no such ns-binding for the prefix in + * scope. + * Returns the attribute pointer. + * + */ +xmlAttrPtr +xmlSetProp(xmlNodePtr node, const xmlChar *name, const xmlChar *value) { + int len; + const xmlChar *nqname; + + if ((node == NULL) || (name == NULL) || (node->type != XML_ELEMENT_NODE)) + return(NULL); + + /* + * handle QNames + */ + nqname = xmlSplitQName3(name, &len); + if (nqname != NULL) { + xmlNsPtr ns; + xmlChar *prefix = xmlStrndup(name, len); + ns = xmlSearchNs(node->doc, node, prefix); + if (prefix != NULL) + xmlFree(prefix); + if (ns != NULL) + return(xmlSetNsProp(node, ns, nqname, value)); + } + return(xmlSetNsProp(node, NULL, name, value)); +} + +/** + * 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 (ns && (ns->href == NULL)) + return(NULL); + prop = xmlGetPropNodeInternal(node, name, (ns != NULL) ? ns->href : NULL, 0); + if (prop != NULL) { + /* + * Modify the attribute's value. + */ + if (prop->atype == XML_ATTRIBUTE_ID) { + xmlRemoveID(node->doc, prop); + prop->atype = XML_ATTRIBUTE_ID; + } + if (prop->children != NULL) + xmlFreeNodeList(prop->children); + prop->children = NULL; + prop->last = NULL; + prop->ns = ns; + if (value != NULL) { + xmlNodePtr tmp; + + if(!xmlCheckUTF8(value)) { + xmlTreeErr(XML_TREE_NOT_UTF8, (xmlNodePtr) node->doc, + NULL); + if (node->doc != NULL) + node->doc->encoding = xmlStrdup(BAD_CAST "ISO-8859-1"); + } + prop->children = xmlNewDocText(node->doc, value); + prop->last = NULL; + tmp = prop->children; + while (tmp != NULL) { + tmp->parent = (xmlNodePtr) prop; + if (tmp->next == NULL) + prop->last = tmp; + tmp = tmp->next; + } + } + if (prop->atype == XML_ATTRIBUTE_ID) + xmlAddID(NULL, node->doc, value, prop); + return(prop); + } + /* + * No equal attr found; create a new one. + */ + return(xmlNewPropInternal(node, ns, name, value, 0)); +} + +#endif /* LIBXML_TREE_ENABLED */ + +/** + * xmlNodeIsText: + * @node: the node + * + * Is this node a Text node ? + * Returns 1 yes, 0 no + */ +int +xmlNodeIsText(const xmlNode *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(const xmlNode *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) && + (node->type != XML_COMMENT_NODE) && + (node->type != XML_PI_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->content == (xmlChar *) &(node->properties)) || + ((node->doc != NULL) && (node->doc->dict != NULL) && + xmlDictOwns(node->doc->dict, node->content))) { + node->content = xmlStrncatNew(node->content, content, len); + } else { + node->content = xmlStrncat(node->content, content, len); + } + node->properties = NULL; + if (node->content == NULL) + return(-1); + return(0); +} + +/************************************************************************ + * * + * 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; + ret->contentIO = NULL; + 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; + ret->contentIO = NULL; + return(ret); +} + +/** + * xmlBufferDetach: + * @buf: the buffer + * + * Remove the string contained in a buffer and gie it back to the + * caller. The buffer is reset to an empty content. + * This doesn't work with immutable buffers as they can't be reset. + * + * Returns the previous string contained by the buffer. + */ +xmlChar * +xmlBufferDetach(xmlBufferPtr buf) { + xmlChar *ret; + + if (buf == NULL) + return(NULL); + if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) + return(NULL); + + ret = buf->content; + buf->content = NULL; + buf->size = 0; + buf->use = 0; + + 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) || + (buf->alloc == XML_BUFFER_ALLOC_IO)) return; + if ((scheme == XML_BUFFER_ALLOC_DOUBLEIT) || + (scheme == XML_BUFFER_ALLOC_EXACT) || + (scheme == XML_BUFFER_ALLOC_HYBRID) || + (scheme == XML_BUFFER_ALLOC_IMMUTABLE)) + 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->alloc == XML_BUFFER_ALLOC_IO) && + (buf->contentIO != NULL)) { + xmlFree(buf->contentIO); + } else if ((buf->content != NULL) && + (buf->alloc != XML_BUFFER_ALLOC_IMMUTABLE)) { + xmlFree(buf->content); + } + xmlFree(buf); +} + +/** + * xmlBufferEmpty: + * @buf: the buffer + * + * empty a buffer. + */ +void +xmlBufferEmpty(xmlBufferPtr buf) { + if (buf == NULL) return; + if (buf->content == NULL) return; + buf->use = 0; + if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) { + buf->content = BAD_CAST ""; + } else if ((buf->alloc == XML_BUFFER_ALLOC_IO) && + (buf->contentIO != NULL)) { + size_t start_buf = buf->content - buf->contentIO; + + buf->size += start_buf; + buf->content = buf->contentIO; + buf->content[0] = 0; + } else { + buf->content[0] = 0; + } +} + +/** + * 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 (buf == NULL) return(-1); + if (len == 0) return(0); + if (len > buf->use) return(-1); + + buf->use -= len; + if ((buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) || + ((buf->alloc == XML_BUFFER_ALLOC_IO) && (buf->contentIO != NULL))) { + /* + * we just move the content pointer, but also make sure + * the perceived buffer size has shrinked accordingly + */ + buf->content += len; + buf->size -= len; + + /* + * sometimes though it maybe be better to really shrink + * on IO buffers + */ + if ((buf->alloc == XML_BUFFER_ALLOC_IO) && (buf->contentIO != NULL)) { + size_t start_buf = buf->content - buf->contentIO; + if (start_buf >= buf->size) { + memmove(buf->contentIO, &buf->content[0], buf->use); + buf->content = buf->contentIO; + buf->content[buf->use] = 0; + buf->size += start_buf; + } + } + } else { + memmove(buf->content, &buf->content[len], buf->use); + buf->content[buf->use] = 0; + } + 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 == NULL) return(-1); + + if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) return(0); + if (len + buf->use < buf->size) return(0); + + /* + * Windows has a BIG problem on realloc timing, so we try to double + * the buffer size (if that's enough) (bug 146697) + * Apparently BSD too, and it's probably best for linux too + * On an embedded system this may be something to change + */ +#if 1 + if (buf->size > len) + size = buf->size * 2; + else + size = buf->use + len + 100; +#else + size = buf->use + len + 100; +#endif + + if ((buf->alloc == XML_BUFFER_ALLOC_IO) && (buf->contentIO != NULL)) { + size_t start_buf = buf->content - buf->contentIO; + + newbuf = (xmlChar *) xmlRealloc(buf->contentIO, start_buf + size); + if (newbuf == NULL) { + xmlTreeErrMemory("growing buffer"); + return(-1); + } + buf->contentIO = newbuf; + buf->content = newbuf + start_buf; + } else { + 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 xmlBuffer *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 xmlBuffer *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; + size_t start_buf; + + if (buf == NULL) + return(0); + + if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) return(0); + + /* Don't resize if we don't have to */ + if (size < buf->size) + return 1; + + /* figure out new size */ + switch (buf->alloc){ + case XML_BUFFER_ALLOC_IO: + case XML_BUFFER_ALLOC_DOUBLEIT: + /*take care of empty case*/ + newSize = (buf->size ? buf->size*2 : size + 10); + while (size > newSize) { + if (newSize > UINT_MAX / 2) { + xmlTreeErrMemory("growing buffer"); + return 0; + } + newSize *= 2; + } + break; + case XML_BUFFER_ALLOC_EXACT: + newSize = size+10; + break; + case XML_BUFFER_ALLOC_HYBRID: + if (buf->use < BASE_BUFFER_SIZE) + newSize = size; + else { + newSize = buf->size * 2; + while (size > newSize) { + if (newSize > UINT_MAX / 2) { + xmlTreeErrMemory("growing buffer"); + return 0; + } + newSize *= 2; + } + } + break; + + default: + newSize = size+10; + break; + } + + if ((buf->alloc == XML_BUFFER_ALLOC_IO) && (buf->contentIO != NULL)) { + start_buf = buf->content - buf->contentIO; + + if (start_buf > newSize) { + /* move data back to start */ + memmove(buf->contentIO, buf->content, buf->use); + buf->content = buf->contentIO; + buf->content[buf->use] = 0; + buf->size += start_buf; + } else { + rebuf = (xmlChar *) xmlRealloc(buf->contentIO, start_buf + newSize); + if (rebuf == NULL) { + xmlTreeErrMemory("growing buffer"); + return 0; + } + buf->contentIO = rebuf; + buf->content = rebuf + start_buf; + } + } else { + if (buf->content == NULL) { + rebuf = (xmlChar *) xmlMallocAtomic(newSize); + } else if (buf->size - buf->use < 100) { + rebuf = (xmlChar *) xmlRealloc(buf->content, newSize); + } else { + /* + * if we are reallocating a buffer far from being full, it's + * better to make a new allocation and copy only the used range + * and free the old one. + */ + rebuf = (xmlChar *) xmlMallocAtomic(newSize); + if (rebuf != NULL) { + memcpy(rebuf, buf->content, buf->use); + xmlFree(buf->content); + rebuf[buf->use] = 0; + } + } + if (rebuf == NULL) { + 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. + * + * Returns 0 successful, a positive error code number otherwise + * and -1 in case of internal or API error. + */ +int +xmlBufferAdd(xmlBufferPtr buf, const xmlChar *str, int len) { + unsigned int needSize; + + if ((str == NULL) || (buf == NULL)) { + return -1; + } + if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) return -1; + if (len < -1) { +#ifdef DEBUG_BUFFER + xmlGenericError(xmlGenericErrorContext, + "xmlBufferAdd: len < 0\n"); +#endif + return -1; + } + if (len == 0) return 0; + + if (len < 0) + len = xmlStrlen(str); + + if (len < 0) return -1; + if (len == 0) return 0; + + needSize = buf->use + len + 2; + if (needSize > buf->size){ + if (!xmlBufferResize(buf, needSize)){ + xmlTreeErrMemory("growing buffer"); + return XML_ERR_NO_MEMORY; + } + } + + memmove(&buf->content[buf->use], str, len*sizeof(xmlChar)); + buf->use += len; + buf->content[buf->use] = 0; + return 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. + * + * Returns 0 successful, a positive error code number otherwise + * and -1 in case of internal or API error. + */ +int +xmlBufferAddHead(xmlBufferPtr buf, const xmlChar *str, int len) { + unsigned int needSize; + + if (buf == NULL) + return(-1); + if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) return -1; + if (str == NULL) { +#ifdef DEBUG_BUFFER + xmlGenericError(xmlGenericErrorContext, + "xmlBufferAddHead: str == NULL\n"); +#endif + return -1; + } + if (len < -1) { +#ifdef DEBUG_BUFFER + xmlGenericError(xmlGenericErrorContext, + "xmlBufferAddHead: len < 0\n"); +#endif + return -1; + } + if (len == 0) return 0; + + if (len < 0) + len = xmlStrlen(str); + + if (len <= 0) return -1; + + if ((buf->alloc == XML_BUFFER_ALLOC_IO) && (buf->contentIO != NULL)) { + size_t start_buf = buf->content - buf->contentIO; + + if (start_buf > (unsigned int) len) { + /* + * We can add it in the space previously shrinked + */ + buf->content -= len; + memmove(&buf->content[0], str, len); + buf->use += len; + buf->size += len; + return(0); + } + } + needSize = buf->use + len + 2; + if (needSize > buf->size){ + if (!xmlBufferResize(buf, needSize)){ + xmlTreeErrMemory("growing buffer"); + return XML_ERR_NO_MEMORY; + } + } + + memmove(&buf->content[len], &buf->content[0], buf->use); + memmove(&buf->content[0], str, len); + buf->use += len; + buf->content[buf->use] = 0; + return 0; +} + +/** + * xmlBufferCat: + * @buf: the buffer to add to + * @str: the #xmlChar string + * + * Append a zero terminated string to an XML buffer. + * + * Returns 0 successful, a positive error code number otherwise + * and -1 in case of internal or API error. + */ +int +xmlBufferCat(xmlBufferPtr buf, const xmlChar *str) { + if (buf == NULL) + return(-1); + if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) return -1; + if (str == NULL) return -1; + return 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. + * + * Returns 0 successful, a positive error code number otherwise + * and -1 in case of internal or API error. + */ +int +xmlBufferCCat(xmlBufferPtr buf, const char *str) { + const char *cur; + + if (buf == NULL) + return(-1); + if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) return -1; + if (str == NULL) { +#ifdef DEBUG_BUFFER + xmlGenericError(xmlGenericErrorContext, + "xmlBufferCCat: str == NULL\n"); +#endif + return -1; + } + for (cur = str;*cur != 0;cur++) { + if (buf->use + 10 >= buf->size) { + if (!xmlBufferResize(buf, buf->use+10)){ + xmlTreeErrMemory("growing buffer"); + return XML_ERR_NO_MEMORY; + } + } + buf->content[buf->use++] = *cur; + } + buf->content[buf->use] = 0; + return 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 == NULL) + return; + 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 == NULL) + return; + 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 == NULL) + return; + 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 """, 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 (const xmlDoc *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; +} + +#define XML_TREE_NSMAP_PARENT -1 +#define XML_TREE_NSMAP_XML -2 +#define XML_TREE_NSMAP_DOC -3 +#define XML_TREE_NSMAP_CUSTOM -4 + +typedef struct xmlNsMapItem *xmlNsMapItemPtr; +struct xmlNsMapItem { + xmlNsMapItemPtr next; + xmlNsMapItemPtr prev; + xmlNsPtr oldNs; /* old ns decl reference */ + xmlNsPtr newNs; /* new ns decl reference */ + int shadowDepth; /* Shadowed at this depth */ + /* + * depth: + * >= 0 == @node's ns-decls + * -1 == @parent's ns-decls + * -2 == the doc->oldNs XML ns-decl + * -3 == the doc->oldNs storage ns-decls + * -4 == ns-decls provided via custom ns-handling + */ + int depth; +}; + +typedef struct xmlNsMap *xmlNsMapPtr; +struct xmlNsMap { + xmlNsMapItemPtr first; + xmlNsMapItemPtr last; + xmlNsMapItemPtr pool; +}; + +#define XML_NSMAP_NOTEMPTY(m) (((m) != NULL) && ((m)->first != NULL)) +#define XML_NSMAP_FOREACH(m, i) for (i = (m)->first; i != NULL; i = (i)->next) +#define XML_NSMAP_POP(m, i) \ + i = (m)->last; \ + (m)->last = (i)->prev; \ + if ((m)->last == NULL) \ + (m)->first = NULL; \ + else \ + (m)->last->next = NULL; \ + (i)->next = (m)->pool; \ + (m)->pool = i; + +/* +* xmlDOMWrapNsMapFree: +* @map: the ns-map +* +* Frees the ns-map +*/ +static void +xmlDOMWrapNsMapFree(xmlNsMapPtr nsmap) +{ + xmlNsMapItemPtr cur, tmp; + + if (nsmap == NULL) + return; + cur = nsmap->pool; + while (cur != NULL) { + tmp = cur; + cur = cur->next; + xmlFree(tmp); + } + cur = nsmap->first; + while (cur != NULL) { + tmp = cur; + cur = cur->next; + xmlFree(tmp); + } + xmlFree(nsmap); +} + +/* +* xmlDOMWrapNsMapAddItem: +* @map: the ns-map +* @oldNs: the old ns-struct +* @newNs: the new ns-struct +* @depth: depth and ns-kind information +* +* Adds an ns-mapping item. +*/ +static xmlNsMapItemPtr +xmlDOMWrapNsMapAddItem(xmlNsMapPtr *nsmap, int position, + xmlNsPtr oldNs, xmlNsPtr newNs, int depth) +{ + xmlNsMapItemPtr ret; + xmlNsMapPtr map; + + if (nsmap == NULL) + return(NULL); + if ((position != -1) && (position != 0)) + return(NULL); + map = *nsmap; + + if (map == NULL) { + /* + * Create the ns-map. + */ + map = (xmlNsMapPtr) xmlMalloc(sizeof(struct xmlNsMap)); + if (map == NULL) { + xmlTreeErrMemory("allocating namespace map"); + return (NULL); + } + memset(map, 0, sizeof(struct xmlNsMap)); + *nsmap = map; + } + + if (map->pool != NULL) { + /* + * Reuse an item from the pool. + */ + ret = map->pool; + map->pool = ret->next; + memset(ret, 0, sizeof(struct xmlNsMapItem)); + } else { + /* + * Create a new item. + */ + ret = (xmlNsMapItemPtr) xmlMalloc(sizeof(struct xmlNsMapItem)); + if (ret == NULL) { + xmlTreeErrMemory("allocating namespace map item"); + return (NULL); + } + memset(ret, 0, sizeof(struct xmlNsMapItem)); + } + + if (map->first == NULL) { + /* + * First ever. + */ + map->first = ret; + map->last = ret; + } else if (position == -1) { + /* + * Append. + */ + ret->prev = map->last; + map->last->next = ret; + map->last = ret; + } else if (position == 0) { + /* + * Set on first position. + */ + map->first->prev = ret; + ret->next = map->first; + map->first = ret; + } + + ret->oldNs = oldNs; + ret->newNs = newNs; + ret->shadowDepth = -1; + ret->depth = depth; + return (ret); +} + +/* +* xmlDOMWrapStoreNs: +* @doc: the doc +* @nsName: the namespace name +* @prefix: the prefix +* +* Creates or reuses an xmlNs struct on doc->oldNs with +* the given prefix and namespace name. +* +* Returns the aquired ns struct or NULL in case of an API +* or internal error. +*/ +static xmlNsPtr +xmlDOMWrapStoreNs(xmlDocPtr doc, + const xmlChar *nsName, + const xmlChar *prefix) +{ + xmlNsPtr ns; + + if (doc == NULL) + return (NULL); + ns = xmlTreeEnsureXMLDecl(doc); + if (ns == NULL) + return (NULL); + if (ns->next != NULL) { + /* Reuse. */ + ns = ns->next; + while (ns != NULL) { + if (((ns->prefix == prefix) || + xmlStrEqual(ns->prefix, prefix)) && + xmlStrEqual(ns->href, nsName)) { + return (ns); + } + if (ns->next == NULL) + break; + ns = ns->next; + } + } + /* Create. */ + if (ns != NULL) { + ns->next = xmlNewNs(NULL, nsName, prefix); + return (ns->next); + } + return(NULL); +} + +/* +* xmlDOMWrapNewCtxt: +* +* Allocates and initializes a new DOM-wrapper context. +* +* Returns the xmlDOMWrapCtxtPtr or NULL in case of an internal error. +*/ +xmlDOMWrapCtxtPtr +xmlDOMWrapNewCtxt(void) +{ + xmlDOMWrapCtxtPtr ret; + + ret = xmlMalloc(sizeof(xmlDOMWrapCtxt)); + if (ret == NULL) { + xmlTreeErrMemory("allocating DOM-wrapper context"); + return (NULL); + } + memset(ret, 0, sizeof(xmlDOMWrapCtxt)); + return (ret); +} + +/* +* xmlDOMWrapFreeCtxt: +* @ctxt: the DOM-wrapper context +* +* Frees the DOM-wrapper context. +*/ +void +xmlDOMWrapFreeCtxt(xmlDOMWrapCtxtPtr ctxt) +{ + if (ctxt == NULL) + return; + if (ctxt->namespaceMap != NULL) + xmlDOMWrapNsMapFree((xmlNsMapPtr) ctxt->namespaceMap); + /* + * TODO: Store the namespace map in the context. + */ + xmlFree(ctxt); +} + +/* +* xmlTreeLookupNsListByPrefix: +* @nsList: a list of ns-structs +* @prefix: the searched prefix +* +* Searches for a ns-decl with the given prefix in @nsList. +* +* Returns the ns-decl if found, NULL if not found and on +* API errors. +*/ +static xmlNsPtr +xmlTreeNSListLookupByPrefix(xmlNsPtr nsList, const xmlChar *prefix) +{ + if (nsList == NULL) + return (NULL); + { + xmlNsPtr ns; + ns = nsList; + do { + if ((prefix == ns->prefix) || + xmlStrEqual(prefix, ns->prefix)) { + return (ns); + } + ns = ns->next; + } while (ns != NULL); + } + return (NULL); +} + +/* +* +* xmlDOMWrapNSNormGatherInScopeNs: +* @map: the namespace map +* @node: the node to start with +* +* Puts in-scope namespaces into the ns-map. +* +* Returns 0 on success, -1 on API or internal errors. +*/ +static int +xmlDOMWrapNSNormGatherInScopeNs(xmlNsMapPtr *map, + xmlNodePtr node) +{ + xmlNodePtr cur; + xmlNsPtr ns; + xmlNsMapItemPtr mi; + int shadowed; + + if ((map == NULL) || (*map != NULL)) + return (-1); + if ((node == NULL) || (node->type == XML_NAMESPACE_DECL)) + return (-1); + /* + * Get in-scope ns-decls of @parent. + */ + cur = node; + while ((cur != NULL) && (cur != (xmlNodePtr) cur->doc)) { + if (cur->type == XML_ELEMENT_NODE) { + if (cur->nsDef != NULL) { + ns = cur->nsDef; + do { + shadowed = 0; + if (XML_NSMAP_NOTEMPTY(*map)) { + /* + * Skip shadowed prefixes. + */ + XML_NSMAP_FOREACH(*map, mi) { + if ((ns->prefix == mi->newNs->prefix) || + xmlStrEqual(ns->prefix, mi->newNs->prefix)) { + shadowed = 1; + break; + } + } + } + /* + * Insert mapping. + */ + mi = xmlDOMWrapNsMapAddItem(map, 0, NULL, + ns, XML_TREE_NSMAP_PARENT); + if (mi == NULL) + return (-1); + if (shadowed) + mi->shadowDepth = 0; + ns = ns->next; + } while (ns != NULL); + } + } + cur = cur->parent; + } + return (0); +} + +/* +* XML_TREE_ADOPT_STR: If we have a dest-dict, put @str in the dict; +* otherwise copy it, when it was in the source-dict. +*/ +#define XML_TREE_ADOPT_STR(str) \ + if (adoptStr && (str != NULL)) { \ + if (destDoc->dict) { \ + const xmlChar *old = str; \ + str = xmlDictLookup(destDoc->dict, str, -1); \ + if ((sourceDoc == NULL) || (sourceDoc->dict == NULL) || \ + (!xmlDictOwns(sourceDoc->dict, old))) \ + xmlFree((char *)old); \ + } else if ((sourceDoc) && (sourceDoc->dict) && \ + xmlDictOwns(sourceDoc->dict, str)) { \ + str = BAD_CAST xmlStrdup(str); \ + } \ + } + +/* +* XML_TREE_ADOPT_STR_2: If @str was in the source-dict, then +* put it in dest-dict or copy it. +*/ +#define XML_TREE_ADOPT_STR_2(str) \ + if (adoptStr && (str != NULL) && (sourceDoc != NULL) && \ + (sourceDoc->dict != NULL) && \ + xmlDictOwns(sourceDoc->dict, cur->content)) { \ + if (destDoc->dict) \ + cur->content = (xmlChar *) \ + xmlDictLookup(destDoc->dict, cur->content, -1); \ + else \ + cur->content = xmlStrdup(BAD_CAST cur->content); \ + } + +/* +* xmlDOMWrapNSNormAddNsMapItem2: +* +* For internal use. Adds a ns-decl mapping. +* +* Returns 0 on success, -1 on internal errors. +*/ +static int +xmlDOMWrapNSNormAddNsMapItem2(xmlNsPtr **list, int *size, int *number, + xmlNsPtr oldNs, xmlNsPtr newNs) +{ + if (*list == NULL) { + *list = (xmlNsPtr *) xmlMalloc(6 * sizeof(xmlNsPtr)); + if (*list == NULL) { + xmlTreeErrMemory("alloc ns map item"); + return(-1); + } + *size = 3; + *number = 0; + } else if ((*number) >= (*size)) { + *size *= 2; + *list = (xmlNsPtr *) xmlRealloc(*list, + (*size) * 2 * sizeof(xmlNsPtr)); + if (*list == NULL) { + xmlTreeErrMemory("realloc ns map item"); + return(-1); + } + } + (*list)[2 * (*number)] = oldNs; + (*list)[2 * (*number) +1] = newNs; + (*number)++; + return (0); +} + +/* +* xmlDOMWrapRemoveNode: +* @ctxt: a DOM wrapper context +* @doc: the doc +* @node: the node to be removed. +* @options: set of options, unused at the moment +* +* Unlinks the given node from its owner. +* This will substitute ns-references to node->nsDef for +* ns-references to doc->oldNs, thus ensuring the removed +* branch to be autark wrt ns-references. +* +* NOTE: This function was not intensively tested. +* +* Returns 0 on success, 1 if the node is not supported, +* -1 on API and internal errors. +*/ +int +xmlDOMWrapRemoveNode(xmlDOMWrapCtxtPtr ctxt, xmlDocPtr doc, + xmlNodePtr node, int options ATTRIBUTE_UNUSED) +{ + xmlNsPtr *list = NULL; + int sizeList, nbList, i, j; + xmlNsPtr ns; + + if ((node == NULL) || (doc == NULL) || (node->doc != doc)) + return (-1); + + /* TODO: 0 or -1 ? */ + if (node->parent == NULL) + return (0); + + switch (node->type) { + case XML_TEXT_NODE: + case XML_CDATA_SECTION_NODE: + case XML_ENTITY_REF_NODE: + case XML_PI_NODE: + case XML_COMMENT_NODE: + xmlUnlinkNode(node); + return (0); + case XML_ELEMENT_NODE: + case XML_ATTRIBUTE_NODE: + break; + default: + return (1); + } + xmlUnlinkNode(node); + /* + * Save out-of-scope ns-references in doc->oldNs. + */ + do { + switch (node->type) { + case XML_ELEMENT_NODE: + if ((ctxt == NULL) && (node->nsDef != NULL)) { + ns = node->nsDef; + do { + if (xmlDOMWrapNSNormAddNsMapItem2(&list, &sizeList, + &nbList, ns, ns) == -1) + goto internal_error; + ns = ns->next; + } while (ns != NULL); + } + /* No break on purpose. */ + case XML_ATTRIBUTE_NODE: + if (node->ns != NULL) { + /* + * Find a mapping. + */ + if (list != NULL) { + for (i = 0, j = 0; i < nbList; i++, j += 2) { + if (node->ns == list[j]) { + node->ns = list[++j]; + goto next_node; + } + } + } + ns = NULL; + if (ctxt != NULL) { + /* + * User defined. + */ + } else { + /* + * Add to doc's oldNs. + */ + ns = xmlDOMWrapStoreNs(doc, node->ns->href, + node->ns->prefix); + if (ns == NULL) + goto internal_error; + } + if (ns != NULL) { + /* + * Add mapping. + */ + if (xmlDOMWrapNSNormAddNsMapItem2(&list, &sizeList, + &nbList, node->ns, ns) == -1) + goto internal_error; + } + node->ns = ns; + } + if ((node->type == XML_ELEMENT_NODE) && + (node->properties != NULL)) { + node = (xmlNodePtr) node->properties; + continue; + } + break; + default: + goto next_sibling; + } +next_node: + if ((node->type == XML_ELEMENT_NODE) && + (node->children != NULL)) { + node = node->children; + continue; + } +next_sibling: + if (node == NULL) + break; + if (node->next != NULL) + node = node->next; + else { + node = node->parent; + goto next_sibling; + } + } while (node != NULL); + + if (list != NULL) + xmlFree(list); + return (0); + +internal_error: + if (list != NULL) + xmlFree(list); + return (-1); +} + +/* +* xmlSearchNsByNamespaceStrict: +* @doc: the document +* @node: the start node +* @nsName: the searched namespace name +* @retNs: the resulting ns-decl +* @prefixed: if the found ns-decl must have a prefix (for attributes) +* +* Dynamically searches for a ns-declaration which matches +* the given @nsName in the ancestor-or-self axis of @node. +* +* Returns 1 if a ns-decl was found, 0 if not and -1 on API +* and internal errors. +*/ +static int +xmlSearchNsByNamespaceStrict(xmlDocPtr doc, xmlNodePtr node, + const xmlChar* nsName, + xmlNsPtr *retNs, int prefixed) +{ + xmlNodePtr cur, prev = NULL, out = NULL; + xmlNsPtr ns, prevns; + + if ((doc == NULL) || (nsName == NULL) || (retNs == NULL)) + return (-1); + if ((node == NULL) || (node->type == XML_NAMESPACE_DECL)) + return(-1); + + *retNs = NULL; + if (xmlStrEqual(nsName, XML_XML_NAMESPACE)) { + *retNs = xmlTreeEnsureXMLDecl(doc); + if (*retNs == NULL) + return (-1); + return (1); + } + cur = node; + do { + if (cur->type == XML_ELEMENT_NODE) { + if (cur->nsDef != NULL) { + for (ns = cur->nsDef; ns != NULL; ns = ns->next) { + if (prefixed && (ns->prefix == NULL)) + continue; + if (prev != NULL) { + /* + * Check the last level of ns-decls for a + * shadowing prefix. + */ + prevns = prev->nsDef; + do { + if ((prevns->prefix == ns->prefix) || + ((prevns->prefix != NULL) && + (ns->prefix != NULL) && + xmlStrEqual(prevns->prefix, ns->prefix))) { + /* + * Shadowed. + */ + break; + } + prevns = prevns->next; + } while (prevns != NULL); + if (prevns != NULL) + continue; + } + /* + * Ns-name comparison. + */ + if ((nsName == ns->href) || + xmlStrEqual(nsName, ns->href)) { + /* + * At this point the prefix can only be shadowed, + * if we are the the (at least) 3rd level of + * ns-decls. + */ + if (out) { + int ret; + + ret = xmlNsInScope(doc, node, prev, ns->prefix); + if (ret < 0) + return (-1); + /* + * TODO: Should we try to find a matching ns-name + * only once? This here keeps on searching. + * I think we should try further since, there might + * be an other matching ns-decl with an unshadowed + * prefix. + */ + if (! ret) + continue; + } + *retNs = ns; + return (1); + } + } + out = prev; + prev = cur; + } + } else if ((cur->type == XML_ENTITY_NODE) || + (cur->type == XML_ENTITY_DECL)) + return (0); + cur = cur->parent; + } while ((cur != NULL) && (cur->doc != (xmlDocPtr) cur)); + return (0); +} + +/* +* xmlSearchNsByPrefixStrict: +* @doc: the document +* @node: the start node +* @prefix: the searched namespace prefix +* @retNs: the resulting ns-decl +* +* Dynamically searches for a ns-declaration which matches +* the given @nsName in the ancestor-or-self axis of @node. +* +* Returns 1 if a ns-decl was found, 0 if not and -1 on API +* and internal errors. +*/ +static int +xmlSearchNsByPrefixStrict(xmlDocPtr doc, xmlNodePtr node, + const xmlChar* prefix, + xmlNsPtr *retNs) +{ + xmlNodePtr cur; + xmlNsPtr ns; + + if ((doc == NULL) || (node == NULL) || (node->type == XML_NAMESPACE_DECL)) + return(-1); + + if (retNs) + *retNs = NULL; + if (IS_STR_XML(prefix)) { + if (retNs) { + *retNs = xmlTreeEnsureXMLDecl(doc); + if (*retNs == NULL) + return (-1); + } + return (1); + } + cur = node; + do { + if (cur->type == XML_ELEMENT_NODE) { + if (cur->nsDef != NULL) { + ns = cur->nsDef; + do { + if ((prefix == ns->prefix) || + xmlStrEqual(prefix, ns->prefix)) + { + /* + * Disabled namespaces, e.g. xmlns:abc="". + */ + if (ns->href == NULL) + return(0); + if (retNs) + *retNs = ns; + return (1); + } + ns = ns->next; + } while (ns != NULL); + } + } else if ((cur->type == XML_ENTITY_NODE) || + (cur->type == XML_ENTITY_DECL)) + return (0); + cur = cur->parent; + } while ((cur != NULL) && (cur->doc != (xmlDocPtr) cur)); + return (0); +} + +/* +* xmlDOMWrapNSNormDeclareNsForced: +* @doc: the doc +* @elem: the element-node to declare on +* @nsName: the namespace-name of the ns-decl +* @prefix: the preferred prefix of the ns-decl +* @checkShadow: ensure that the new ns-decl doesn't shadow ancestor ns-decls +* +* Declares a new namespace on @elem. It tries to use the +* given @prefix; if a ns-decl with the given prefix is already existent +* on @elem, it will generate an other prefix. +* +* Returns 1 if a ns-decl was found, 0 if not and -1 on API +* and internal errors. +*/ +static xmlNsPtr +xmlDOMWrapNSNormDeclareNsForced(xmlDocPtr doc, + xmlNodePtr elem, + const xmlChar *nsName, + const xmlChar *prefix, + int checkShadow) +{ + + xmlNsPtr ret; + char buf[50]; + const xmlChar *pref; + int counter = 0; + + if ((doc == NULL) || (elem == NULL) || (elem->type != XML_ELEMENT_NODE)) + return(NULL); + /* + * Create a ns-decl on @anchor. + */ + pref = prefix; + while (1) { + /* + * Lookup whether the prefix is unused in elem's ns-decls. + */ + if ((elem->nsDef != NULL) && + (xmlTreeNSListLookupByPrefix(elem->nsDef, pref) != NULL)) + goto ns_next_prefix; + if (checkShadow && elem->parent && + ((xmlNodePtr) elem->parent->doc != elem->parent)) { + /* + * Does it shadow ancestor ns-decls? + */ + if (xmlSearchNsByPrefixStrict(doc, elem->parent, pref, NULL) == 1) + goto ns_next_prefix; + } + ret = xmlNewNs(NULL, nsName, pref); + if (ret == NULL) + return (NULL); + if (elem->nsDef == NULL) + elem->nsDef = ret; + else { + xmlNsPtr ns2 = elem->nsDef; + while (ns2->next != NULL) + ns2 = ns2->next; + ns2->next = ret; + } + return (ret); +ns_next_prefix: + counter++; + if (counter > 1000) + return (NULL); + if (prefix == NULL) { + snprintf((char *) buf, sizeof(buf), + "ns_%d", counter); + } else + snprintf((char *) buf, sizeof(buf), + "%.30s_%d", (char *)prefix, counter); + pref = BAD_CAST buf; + } +} + +/* +* xmlDOMWrapNSNormAquireNormalizedNs: +* @doc: the doc +* @elem: the element-node to declare namespaces on +* @ns: the ns-struct to use for the search +* @retNs: the found/created ns-struct +* @nsMap: the ns-map +* @depth: the current tree depth +* @ancestorsOnly: search in ancestor ns-decls only +* @prefixed: if the searched ns-decl must have a prefix (for attributes) +* +* Searches for a matching ns-name in the ns-decls of @nsMap, if not +* found it will either declare it on @elem, or store it in doc->oldNs. +* If a new ns-decl needs to be declared on @elem, it tries to use the +* @ns->prefix for it, if this prefix is already in use on @elem, it will +* change the prefix or the new ns-decl. +* +* Returns 0 if succeeded, -1 otherwise and on API/internal errors. +*/ +static int +xmlDOMWrapNSNormAquireNormalizedNs(xmlDocPtr doc, + xmlNodePtr elem, + xmlNsPtr ns, + xmlNsPtr *retNs, + xmlNsMapPtr *nsMap, + + int depth, + int ancestorsOnly, + int prefixed) +{ + xmlNsMapItemPtr mi; + + if ((doc == NULL) || (ns == NULL) || (retNs == NULL) || + (nsMap == NULL)) + return (-1); + + *retNs = NULL; + /* + * Handle XML namespace. + */ + if (IS_STR_XML(ns->prefix)) { + /* + * Insert XML namespace mapping. + */ + *retNs = xmlTreeEnsureXMLDecl(doc); + if (*retNs == NULL) + return (-1); + return (0); + } + /* + * If the search should be done in ancestors only and no + * @elem (the first ancestor) was specified, then skip the search. + */ + if ((XML_NSMAP_NOTEMPTY(*nsMap)) && + (! (ancestorsOnly && (elem == NULL)))) + { + /* + * Try to find an equal ns-name in in-scope ns-decls. + */ + XML_NSMAP_FOREACH(*nsMap, mi) { + if ((mi->depth >= XML_TREE_NSMAP_PARENT) && + /* + * ancestorsOnly: This should be turned on to gain speed, + * if one knows that the branch itself was already + * ns-wellformed and no stale references existed. + * I.e. it searches in the ancestor axis only. + */ + ((! ancestorsOnly) || (mi->depth == XML_TREE_NSMAP_PARENT)) && + /* Skip shadowed prefixes. */ + (mi->shadowDepth == -1) && + /* Skip xmlns="" or xmlns:foo="". */ + ((mi->newNs->href != NULL) && + (mi->newNs->href[0] != 0)) && + /* Ensure a prefix if wanted. */ + ((! prefixed) || (mi->newNs->prefix != NULL)) && + /* Equal ns name */ + ((mi->newNs->href == ns->href) || + xmlStrEqual(mi->newNs->href, ns->href))) { + /* Set the mapping. */ + mi->oldNs = ns; + *retNs = mi->newNs; + return (0); + } + } + } + /* + * No luck, the namespace is out of scope or shadowed. + */ + if (elem == NULL) { + xmlNsPtr tmpns; + + /* + * Store ns-decls in "oldNs" of the document-node. + */ + tmpns = xmlDOMWrapStoreNs(doc, ns->href, ns->prefix); + if (tmpns == NULL) + return (-1); + /* + * Insert mapping. + */ + if (xmlDOMWrapNsMapAddItem(nsMap, -1, ns, + tmpns, XML_TREE_NSMAP_DOC) == NULL) { + xmlFreeNs(tmpns); + return (-1); + } + *retNs = tmpns; + } else { + xmlNsPtr tmpns; + + tmpns = xmlDOMWrapNSNormDeclareNsForced(doc, elem, ns->href, + ns->prefix, 0); + if (tmpns == NULL) + return (-1); + + if (*nsMap != NULL) { + /* + * Does it shadow ancestor ns-decls? + */ + XML_NSMAP_FOREACH(*nsMap, mi) { + if ((mi->depth < depth) && + (mi->shadowDepth == -1) && + ((ns->prefix == mi->newNs->prefix) || + xmlStrEqual(ns->prefix, mi->newNs->prefix))) { + /* + * Shadows. + */ + mi->shadowDepth = depth; + break; + } + } + } + if (xmlDOMWrapNsMapAddItem(nsMap, -1, ns, tmpns, depth) == NULL) { + xmlFreeNs(tmpns); + return (-1); + } + *retNs = tmpns; + } + return (0); +} + +typedef enum { + XML_DOM_RECONNS_REMOVEREDUND = 1<<0 +} xmlDOMReconcileNSOptions; + +/* +* xmlDOMWrapReconcileNamespaces: +* @ctxt: DOM wrapper context, unused at the moment +* @elem: the element-node +* @options: option flags +* +* Ensures that ns-references point to ns-decls hold on element-nodes. +* Ensures that the tree is namespace wellformed by creating additional +* ns-decls where needed. Note that, since prefixes of already existent +* ns-decls can be shadowed by this process, it could break QNames in +* attribute values or element content. +* +* NOTE: This function was not intensively tested. +* +* Returns 0 if succeeded, -1 otherwise and on API/internal errors. +*/ + +int +xmlDOMWrapReconcileNamespaces(xmlDOMWrapCtxtPtr ctxt ATTRIBUTE_UNUSED, + xmlNodePtr elem, + int options) +{ + int depth = -1, adoptns = 0, parnsdone = 0; + xmlNsPtr ns, prevns; + xmlDocPtr doc; + xmlNodePtr cur, curElem = NULL; + xmlNsMapPtr nsMap = NULL; + xmlNsMapItemPtr /* topmi = NULL, */ mi; + /* @ancestorsOnly should be set by an option flag. */ + int ancestorsOnly = 0; + int optRemoveRedundantNS = + ((xmlDOMReconcileNSOptions) options & XML_DOM_RECONNS_REMOVEREDUND) ? 1 : 0; + xmlNsPtr *listRedund = NULL; + int sizeRedund = 0, nbRedund = 0, ret, i, j; + + if ((elem == NULL) || (elem->doc == NULL) || + (elem->type != XML_ELEMENT_NODE)) + return (-1); + + doc = elem->doc; + cur = elem; + do { + switch (cur->type) { + case XML_ELEMENT_NODE: + adoptns = 1; + curElem = cur; + depth++; + /* + * Namespace declarations. + */ + if (cur->nsDef != NULL) { + prevns = NULL; + ns = cur->nsDef; + while (ns != NULL) { + if (! parnsdone) { + if ((elem->parent) && + ((xmlNodePtr) elem->parent->doc != elem->parent)) { + /* + * Gather ancestor in-scope ns-decls. + */ + if (xmlDOMWrapNSNormGatherInScopeNs(&nsMap, + elem->parent) == -1) + goto internal_error; + } + parnsdone = 1; + } + + /* + * Lookup the ns ancestor-axis for equal ns-decls in scope. + */ + if (optRemoveRedundantNS && XML_NSMAP_NOTEMPTY(nsMap)) { + XML_NSMAP_FOREACH(nsMap, mi) { + if ((mi->depth >= XML_TREE_NSMAP_PARENT) && + (mi->shadowDepth == -1) && + ((ns->prefix == mi->newNs->prefix) || + xmlStrEqual(ns->prefix, mi->newNs->prefix)) && + ((ns->href == mi->newNs->href) || + xmlStrEqual(ns->href, mi->newNs->href))) + { + /* + * A redundant ns-decl was found. + * Add it to the list of redundant ns-decls. + */ + if (xmlDOMWrapNSNormAddNsMapItem2(&listRedund, + &sizeRedund, &nbRedund, ns, mi->newNs) == -1) + goto internal_error; + /* + * Remove the ns-decl from the element-node. + */ + if (prevns) + prevns->next = ns->next; + else + cur->nsDef = ns->next; + goto next_ns_decl; + } + } + } + + /* + * Skip ns-references handling if the referenced + * ns-decl is declared on the same element. + */ + if ((cur->ns != NULL) && adoptns && (cur->ns == ns)) + adoptns = 0; + /* + * Does it shadow any ns-decl? + */ + if (XML_NSMAP_NOTEMPTY(nsMap)) { + XML_NSMAP_FOREACH(nsMap, mi) { + if ((mi->depth >= XML_TREE_NSMAP_PARENT) && + (mi->shadowDepth == -1) && + ((ns->prefix == mi->newNs->prefix) || + xmlStrEqual(ns->prefix, mi->newNs->prefix))) { + + mi->shadowDepth = depth; + } + } + } + /* + * Push mapping. + */ + if (xmlDOMWrapNsMapAddItem(&nsMap, -1, ns, ns, + depth) == NULL) + goto internal_error; + + prevns = ns; +next_ns_decl: + ns = ns->next; + } + } + if (! adoptns) + goto ns_end; + /* No break on purpose. */ + case XML_ATTRIBUTE_NODE: + /* No ns, no fun. */ + if (cur->ns == NULL) + goto ns_end; + + if (! parnsdone) { + if ((elem->parent) && + ((xmlNodePtr) elem->parent->doc != elem->parent)) { + if (xmlDOMWrapNSNormGatherInScopeNs(&nsMap, + elem->parent) == -1) + goto internal_error; + } + parnsdone = 1; + } + /* + * Adjust the reference if this was a redundant ns-decl. + */ + if (listRedund) { + for (i = 0, j = 0; i < nbRedund; i++, j += 2) { + if (cur->ns == listRedund[j]) { + cur->ns = listRedund[++j]; + break; + } + } + } + /* + * Adopt ns-references. + */ + if (XML_NSMAP_NOTEMPTY(nsMap)) { + /* + * Search for a mapping. + */ + XML_NSMAP_FOREACH(nsMap, mi) { + if ((mi->shadowDepth == -1) && + (cur->ns == mi->oldNs)) { + + cur->ns = mi->newNs; + goto ns_end; + } + } + } + /* + * Aquire a normalized ns-decl and add it to the map. + */ + if (xmlDOMWrapNSNormAquireNormalizedNs(doc, curElem, + cur->ns, &ns, + &nsMap, depth, + ancestorsOnly, + (cur->type == XML_ATTRIBUTE_NODE) ? 1 : 0) == -1) + goto internal_error; + cur->ns = ns; + +ns_end: + if ((cur->type == XML_ELEMENT_NODE) && + (cur->properties != NULL)) { + /* + * Process attributes. + */ + cur = (xmlNodePtr) cur->properties; + continue; + } + break; + default: + goto next_sibling; + } +into_content: + if ((cur->type == XML_ELEMENT_NODE) && + (cur->children != NULL)) { + /* + * Process content of element-nodes only. + */ + cur = cur->children; + continue; + } +next_sibling: + if (cur == elem) + break; + if (cur->type == XML_ELEMENT_NODE) { + if (XML_NSMAP_NOTEMPTY(nsMap)) { + /* + * Pop mappings. + */ + while ((nsMap->last != NULL) && + (nsMap->last->depth >= depth)) + { + XML_NSMAP_POP(nsMap, mi) + } + /* + * Unshadow. + */ + XML_NSMAP_FOREACH(nsMap, mi) { + if (mi->shadowDepth >= depth) + mi->shadowDepth = -1; + } + } + depth--; + } + if (cur->next != NULL) + cur = cur->next; + else { + if (cur->type == XML_ATTRIBUTE_NODE) { + cur = cur->parent; + goto into_content; + } + cur = cur->parent; + goto next_sibling; + } + } while (cur != NULL); + + ret = 0; + goto exit; +internal_error: + ret = -1; +exit: + if (listRedund) { + for (i = 0, j = 0; i < nbRedund; i++, j += 2) { + xmlFreeNs(listRedund[j]); + } + xmlFree(listRedund); + } + if (nsMap != NULL) + xmlDOMWrapNsMapFree(nsMap); + return (ret); +} + +/* +* xmlDOMWrapAdoptBranch: +* @ctxt: the optional context for custom processing +* @sourceDoc: the optional sourceDoc +* @node: the element-node to start with +* @destDoc: the destination doc for adoption +* @destParent: the optional new parent of @node in @destDoc +* @options: option flags +* +* Ensures that ns-references point to @destDoc: either to +* elements->nsDef entries if @destParent is given, or to +* @destDoc->oldNs otherwise. +* If @destParent is given, it ensures that the tree is namespace +* wellformed by creating additional ns-decls where needed. +* Note that, since prefixes of already existent ns-decls can be +* shadowed by this process, it could break QNames in attribute +* values or element content. +* +* NOTE: This function was not intensively tested. +* +* Returns 0 if succeeded, -1 otherwise and on API/internal errors. +*/ +static int +xmlDOMWrapAdoptBranch(xmlDOMWrapCtxtPtr ctxt, + xmlDocPtr sourceDoc, + xmlNodePtr node, + xmlDocPtr destDoc, + xmlNodePtr destParent, + int options ATTRIBUTE_UNUSED) +{ + int ret = 0; + xmlNodePtr cur, curElem = NULL; + xmlNsMapPtr nsMap = NULL; + xmlNsMapItemPtr mi; + xmlNsPtr ns = NULL; + int depth = -1, adoptStr = 1; + /* gather @parent's ns-decls. */ + int parnsdone; + /* @ancestorsOnly should be set per option. */ + int ancestorsOnly = 0; + + /* + * Optimize string adoption for equal or none dicts. + */ + if ((sourceDoc != NULL) && + (sourceDoc->dict == destDoc->dict)) + adoptStr = 0; + else + adoptStr = 1; + + /* + * Get the ns-map from the context if available. + */ + if (ctxt) + nsMap = (xmlNsMapPtr) ctxt->namespaceMap; + /* + * Disable search for ns-decls in the parent-axis of the + * desination element, if: + * 1) there's no destination parent + * 2) custom ns-reference handling is used + */ + if ((destParent == NULL) || + (ctxt && ctxt->getNsForNodeFunc)) + { + parnsdone = 1; + } else + parnsdone = 0; + + cur = node; + if ((cur != NULL) && (cur->type == XML_NAMESPACE_DECL)) + goto internal_error; + + while (cur != NULL) { + /* + * Paranoid source-doc sanity check. + */ + if (cur->doc != sourceDoc) { + /* + * We'll assume XIncluded nodes if the doc differs. + * TODO: Do we need to reconciliate XIncluded nodes? + * This here skips XIncluded nodes and tries to handle + * broken sequences. + */ + if (cur->next == NULL) + goto leave_node; + do { + cur = cur->next; + if ((cur->type == XML_XINCLUDE_END) || + (cur->doc == node->doc)) + break; + } while (cur->next != NULL); + + if (cur->doc != node->doc) + goto leave_node; + } + cur->doc = destDoc; + switch (cur->type) { + case XML_XINCLUDE_START: + case XML_XINCLUDE_END: + /* + * TODO + */ + return (-1); + case XML_ELEMENT_NODE: + curElem = cur; + depth++; + /* + * Namespace declarations. + * - ns->href and ns->prefix are never in the dict, so + * we need not move the values over to the destination dict. + * - Note that for custom handling of ns-references, + * the ns-decls need not be stored in the ns-map, + * since they won't be referenced by node->ns. + */ + if ((cur->nsDef) && + ((ctxt == NULL) || (ctxt->getNsForNodeFunc == NULL))) + { + if (! parnsdone) { + /* + * Gather @parent's in-scope ns-decls. + */ + if (xmlDOMWrapNSNormGatherInScopeNs(&nsMap, + destParent) == -1) + goto internal_error; + parnsdone = 1; + } + for (ns = cur->nsDef; ns != NULL; ns = ns->next) { + /* + * NOTE: ns->prefix and ns->href are never in the dict. + * XML_TREE_ADOPT_STR(ns->prefix) + * XML_TREE_ADOPT_STR(ns->href) + */ + /* + * Does it shadow any ns-decl? + */ + if (XML_NSMAP_NOTEMPTY(nsMap)) { + XML_NSMAP_FOREACH(nsMap, mi) { + if ((mi->depth >= XML_TREE_NSMAP_PARENT) && + (mi->shadowDepth == -1) && + ((ns->prefix == mi->newNs->prefix) || + xmlStrEqual(ns->prefix, + mi->newNs->prefix))) { + + mi->shadowDepth = depth; + } + } + } + /* + * Push mapping. + */ + if (xmlDOMWrapNsMapAddItem(&nsMap, -1, + ns, ns, depth) == NULL) + goto internal_error; + } + } + /* No break on purpose. */ + case XML_ATTRIBUTE_NODE: + /* No namespace, no fun. */ + if (cur->ns == NULL) + goto ns_end; + + if (! parnsdone) { + if (xmlDOMWrapNSNormGatherInScopeNs(&nsMap, + destParent) == -1) + goto internal_error; + parnsdone = 1; + } + /* + * Adopt ns-references. + */ + if (XML_NSMAP_NOTEMPTY(nsMap)) { + /* + * Search for a mapping. + */ + XML_NSMAP_FOREACH(nsMap, mi) { + if ((mi->shadowDepth == -1) && + (cur->ns == mi->oldNs)) { + + cur->ns = mi->newNs; + goto ns_end; + } + } + } + /* + * No matching namespace in scope. We need a new one. + */ + if ((ctxt) && (ctxt->getNsForNodeFunc)) { + /* + * User-defined behaviour. + */ + ns = ctxt->getNsForNodeFunc(ctxt, cur, + cur->ns->href, cur->ns->prefix); + /* + * Insert mapping if ns is available; it's the users fault + * if not. + */ + if (xmlDOMWrapNsMapAddItem(&nsMap, -1, + cur->ns, ns, XML_TREE_NSMAP_CUSTOM) == NULL) + goto internal_error; + cur->ns = ns; + } else { + /* + * Aquire a normalized ns-decl and add it to the map. + */ + if (xmlDOMWrapNSNormAquireNormalizedNs(destDoc, + /* ns-decls on curElem or on destDoc->oldNs */ + destParent ? curElem : NULL, + cur->ns, &ns, + &nsMap, depth, + ancestorsOnly, + /* ns-decls must be prefixed for attributes. */ + (cur->type == XML_ATTRIBUTE_NODE) ? 1 : 0) == -1) + goto internal_error; + cur->ns = ns; + } +ns_end: + /* + * Further node properties. + * TODO: Is this all? + */ + XML_TREE_ADOPT_STR(cur->name) + if (cur->type == XML_ELEMENT_NODE) { + cur->psvi = NULL; + cur->line = 0; + cur->extra = 0; + /* + * Walk attributes. + */ + if (cur->properties != NULL) { + /* + * Process first attribute node. + */ + cur = (xmlNodePtr) cur->properties; + continue; + } + } else { + /* + * Attributes. + */ + if ((sourceDoc != NULL) && + (((xmlAttrPtr) cur)->atype == XML_ATTRIBUTE_ID)) + { + xmlRemoveID(sourceDoc, (xmlAttrPtr) cur); + } + ((xmlAttrPtr) cur)->atype = 0; + ((xmlAttrPtr) cur)->psvi = NULL; + } + break; + case XML_TEXT_NODE: + case XML_CDATA_SECTION_NODE: + /* + * This puts the content in the dest dict, only if + * it was previously in the source dict. + */ + XML_TREE_ADOPT_STR_2(cur->content) + goto leave_node; + case XML_ENTITY_REF_NODE: + /* + * Remove reference to the entitity-node. + */ + cur->content = NULL; + cur->children = NULL; + cur->last = NULL; + if ((destDoc->intSubset) || (destDoc->extSubset)) { + xmlEntityPtr ent; + /* + * Assign new entity-node if available. + */ + ent = xmlGetDocEntity(destDoc, cur->name); + if (ent != NULL) { + cur->content = ent->content; + cur->children = (xmlNodePtr) ent; + cur->last = (xmlNodePtr) ent; + } + } + goto leave_node; + case XML_PI_NODE: + XML_TREE_ADOPT_STR(cur->name) + XML_TREE_ADOPT_STR_2(cur->content) + break; + case XML_COMMENT_NODE: + break; + default: + goto internal_error; + } + /* + * Walk the tree. + */ + if (cur->children != NULL) { + cur = cur->children; + continue; + } + +leave_node: + if (cur == node) + break; + if ((cur->type == XML_ELEMENT_NODE) || + (cur->type == XML_XINCLUDE_START) || + (cur->type == XML_XINCLUDE_END)) + { + /* + * TODO: Do we expect nsDefs on XML_XINCLUDE_START? + */ + if (XML_NSMAP_NOTEMPTY(nsMap)) { + /* + * Pop mappings. + */ + while ((nsMap->last != NULL) && + (nsMap->last->depth >= depth)) + { + XML_NSMAP_POP(nsMap, mi) + } + /* + * Unshadow. + */ + XML_NSMAP_FOREACH(nsMap, mi) { + if (mi->shadowDepth >= depth) + mi->shadowDepth = -1; + } + } + depth--; + } + if (cur->next != NULL) + cur = cur->next; + else if ((cur->type == XML_ATTRIBUTE_NODE) && + (cur->parent->children != NULL)) + { + cur = cur->parent->children; + } else { + cur = cur->parent; + goto leave_node; + } + } + + goto exit; + +internal_error: + ret = -1; + +exit: + /* + * Cleanup. + */ + if (nsMap != NULL) { + if ((ctxt) && (ctxt->namespaceMap == nsMap)) { + /* + * Just cleanup the map but don't free. + */ + if (nsMap->first) { + if (nsMap->pool) + nsMap->last->next = nsMap->pool; + nsMap->pool = nsMap->first; + nsMap->first = NULL; + } + } else + xmlDOMWrapNsMapFree(nsMap); + } + return(ret); +} + +/* +* xmlDOMWrapCloneNode: +* @ctxt: the optional context for custom processing +* @sourceDoc: the optional sourceDoc +* @node: the node to start with +* @resNode: the clone of the given @node +* @destDoc: the destination doc +* @destParent: the optional new parent of @node in @destDoc +* @deep: descend into child if set +* @options: option flags +* +* References of out-of scope ns-decls are remapped to point to @destDoc: +* 1) If @destParent is given, then nsDef entries on element-nodes are used +* 2) If *no* @destParent is given, then @destDoc->oldNs entries are used. +* This is the case when you don't know already where the cloned branch +* will be added to. +* +* If @destParent is given, it ensures that the tree is namespace +* wellformed by creating additional ns-decls where needed. +* Note that, since prefixes of already existent ns-decls can be +* shadowed by this process, it could break QNames in attribute +* values or element content. +* TODO: +* 1) What to do with XInclude? Currently this returns an error for XInclude. +* +* Returns 0 if the operation succeeded, +* 1 if a node of unsupported (or not yet supported) type was given, +* -1 on API/internal errors. +*/ + +int +xmlDOMWrapCloneNode(xmlDOMWrapCtxtPtr ctxt, + xmlDocPtr sourceDoc, + xmlNodePtr node, + xmlNodePtr *resNode, + xmlDocPtr destDoc, + xmlNodePtr destParent, + int deep, + int options ATTRIBUTE_UNUSED) +{ + int ret = 0; + xmlNodePtr cur, curElem = NULL; + xmlNsMapPtr nsMap = NULL; + xmlNsMapItemPtr mi; + xmlNsPtr ns; + int depth = -1; + /* int adoptStr = 1; */ + /* gather @parent's ns-decls. */ + int parnsdone = 0; + /* + * @ancestorsOnly: + * TODO: @ancestorsOnly should be set per option. + * + */ + int ancestorsOnly = 0; + xmlNodePtr resultClone = NULL, clone = NULL, parentClone = NULL, prevClone = NULL; + xmlNsPtr cloneNs = NULL, *cloneNsDefSlot = NULL; + xmlDictPtr dict; /* The destination dict */ + + if ((node == NULL) || (resNode == NULL) || (destDoc == NULL)) + return(-1); + /* + * TODO: Initially we support only element-nodes. + */ + if (node->type != XML_ELEMENT_NODE) + return(1); + /* + * Check node->doc sanity. + */ + if ((node->doc != NULL) && (sourceDoc != NULL) && + (node->doc != sourceDoc)) { + /* + * Might be an XIncluded node. + */ + return (-1); + } + if (sourceDoc == NULL) + sourceDoc = node->doc; + if (sourceDoc == NULL) + return (-1); + + dict = destDoc->dict; + /* + * Reuse the namespace map of the context. + */ + if (ctxt) + nsMap = (xmlNsMapPtr) ctxt->namespaceMap; + + *resNode = NULL; + + cur = node; + if ((cur != NULL) && (cur->type == XML_NAMESPACE_DECL)) + return(-1); + + while (cur != NULL) { + if (cur->doc != sourceDoc) { + /* + * We'll assume XIncluded nodes if the doc differs. + * TODO: Do we need to reconciliate XIncluded nodes? + * TODO: This here returns -1 in this case. + */ + goto internal_error; + } + /* + * Create a new node. + */ + switch (cur->type) { + case XML_XINCLUDE_START: + case XML_XINCLUDE_END: + /* + * TODO: What to do with XInclude? + */ + goto internal_error; + break; + case XML_ELEMENT_NODE: + case XML_TEXT_NODE: + case XML_CDATA_SECTION_NODE: + case XML_COMMENT_NODE: + case XML_PI_NODE: + case XML_DOCUMENT_FRAG_NODE: + case XML_ENTITY_REF_NODE: + case XML_ENTITY_NODE: + /* + * Nodes of xmlNode structure. + */ + clone = (xmlNodePtr) xmlMalloc(sizeof(xmlNode)); + if (clone == NULL) { + xmlTreeErrMemory("xmlDOMWrapCloneNode(): allocating a node"); + goto internal_error; + } + memset(clone, 0, sizeof(xmlNode)); + /* + * Set hierachical links. + */ + if (resultClone != NULL) { + clone->parent = parentClone; + if (prevClone) { + prevClone->next = clone; + clone->prev = prevClone; + } else + parentClone->children = clone; + } else + resultClone = clone; + + break; + case XML_ATTRIBUTE_NODE: + /* + * Attributes (xmlAttr). + */ + clone = (xmlNodePtr) xmlMalloc(sizeof(xmlAttr)); + if (clone == NULL) { + xmlTreeErrMemory("xmlDOMWrapCloneNode(): allocating an attr-node"); + goto internal_error; + } + memset(clone, 0, sizeof(xmlAttr)); + /* + * Set hierachical links. + * TODO: Change this to add to the end of attributes. + */ + if (resultClone != NULL) { + clone->parent = parentClone; + if (prevClone) { + prevClone->next = clone; + clone->prev = prevClone; + } else + parentClone->properties = (xmlAttrPtr) clone; + } else + resultClone = clone; + break; + default: + /* + * TODO QUESTION: Any other nodes expected? + */ + goto internal_error; + } + + clone->type = cur->type; + clone->doc = destDoc; + + /* + * Clone the name of the node if any. + */ + if (cur->name == xmlStringText) + clone->name = xmlStringText; + else if (cur->name == xmlStringTextNoenc) + /* + * NOTE: Although xmlStringTextNoenc is never assigned to a node + * in tree.c, it might be set in Libxslt via + * "xsl:disable-output-escaping". + */ + clone->name = xmlStringTextNoenc; + else if (cur->name == xmlStringComment) + clone->name = xmlStringComment; + else if (cur->name != NULL) { + DICT_CONST_COPY(cur->name, clone->name); + } + + switch (cur->type) { + case XML_XINCLUDE_START: + case XML_XINCLUDE_END: + /* + * TODO + */ + return (-1); + case XML_ELEMENT_NODE: + curElem = cur; + depth++; + /* + * Namespace declarations. + */ + if (cur->nsDef != NULL) { + if (! parnsdone) { + if (destParent && (ctxt == NULL)) { + /* + * Gather @parent's in-scope ns-decls. + */ + if (xmlDOMWrapNSNormGatherInScopeNs(&nsMap, + destParent) == -1) + goto internal_error; + } + parnsdone = 1; + } + /* + * Clone namespace declarations. + */ + cloneNsDefSlot = &(clone->nsDef); + for (ns = cur->nsDef; ns != NULL; ns = ns->next) { + /* + * Create a new xmlNs. + */ + cloneNs = (xmlNsPtr) xmlMalloc(sizeof(xmlNs)); + if (cloneNs == NULL) { + xmlTreeErrMemory("xmlDOMWrapCloneNode(): " + "allocating namespace"); + return(-1); + } + memset(cloneNs, 0, sizeof(xmlNs)); + cloneNs->type = XML_LOCAL_NAMESPACE; + + if (ns->href != NULL) + cloneNs->href = xmlStrdup(ns->href); + if (ns->prefix != NULL) + cloneNs->prefix = xmlStrdup(ns->prefix); + + *cloneNsDefSlot = cloneNs; + cloneNsDefSlot = &(cloneNs->next); + + /* + * Note that for custom handling of ns-references, + * the ns-decls need not be stored in the ns-map, + * since they won't be referenced by node->ns. + */ + if ((ctxt == NULL) || + (ctxt->getNsForNodeFunc == NULL)) + { + /* + * Does it shadow any ns-decl? + */ + if (XML_NSMAP_NOTEMPTY(nsMap)) { + XML_NSMAP_FOREACH(nsMap, mi) { + if ((mi->depth >= XML_TREE_NSMAP_PARENT) && + (mi->shadowDepth == -1) && + ((ns->prefix == mi->newNs->prefix) || + xmlStrEqual(ns->prefix, + mi->newNs->prefix))) { + /* + * Mark as shadowed at the current + * depth. + */ + mi->shadowDepth = depth; + } + } + } + /* + * Push mapping. + */ + if (xmlDOMWrapNsMapAddItem(&nsMap, -1, + ns, cloneNs, depth) == NULL) + goto internal_error; + } + } + } + /* cur->ns will be processed further down. */ + break; + case XML_ATTRIBUTE_NODE: + /* IDs will be processed further down. */ + /* cur->ns will be processed further down. */ + break; + case XML_TEXT_NODE: + case XML_CDATA_SECTION_NODE: + /* + * Note that this will also cover the values of attributes. + */ + DICT_COPY(cur->content, clone->content); + goto leave_node; + case XML_ENTITY_NODE: + /* TODO: What to do here? */ + goto leave_node; + case XML_ENTITY_REF_NODE: + if (sourceDoc != destDoc) { + if ((destDoc->intSubset) || (destDoc->extSubset)) { + xmlEntityPtr ent; + /* + * Different doc: Assign new entity-node if available. + */ + ent = xmlGetDocEntity(destDoc, cur->name); + if (ent != NULL) { + clone->content = ent->content; + clone->children = (xmlNodePtr) ent; + clone->last = (xmlNodePtr) ent; + } + } + } else { + /* + * Same doc: Use the current node's entity declaration + * and value. + */ + clone->content = cur->content; + clone->children = cur->children; + clone->last = cur->last; + } + goto leave_node; + case XML_PI_NODE: + DICT_COPY(cur->content, clone->content); + goto leave_node; + case XML_COMMENT_NODE: + DICT_COPY(cur->content, clone->content); + goto leave_node; + default: + goto internal_error; + } + + if (cur->ns == NULL) + goto end_ns_reference; + +/* handle_ns_reference: */ + /* + ** The following will take care of references to ns-decls ******** + ** and is intended only for element- and attribute-nodes. + ** + */ + if (! parnsdone) { + if (destParent && (ctxt == NULL)) { + if (xmlDOMWrapNSNormGatherInScopeNs(&nsMap, destParent) == -1) + goto internal_error; + } + parnsdone = 1; + } + /* + * Adopt ns-references. + */ + if (XML_NSMAP_NOTEMPTY(nsMap)) { + /* + * Search for a mapping. + */ + XML_NSMAP_FOREACH(nsMap, mi) { + if ((mi->shadowDepth == -1) && + (cur->ns == mi->oldNs)) { + /* + * This is the nice case: a mapping was found. + */ + clone->ns = mi->newNs; + goto end_ns_reference; + } + } + } + /* + * No matching namespace in scope. We need a new one. + */ + if ((ctxt != NULL) && (ctxt->getNsForNodeFunc != NULL)) { + /* + * User-defined behaviour. + */ + ns = ctxt->getNsForNodeFunc(ctxt, cur, + cur->ns->href, cur->ns->prefix); + /* + * Add user's mapping. + */ + if (xmlDOMWrapNsMapAddItem(&nsMap, -1, + cur->ns, ns, XML_TREE_NSMAP_CUSTOM) == NULL) + goto internal_error; + clone->ns = ns; + } else { + /* + * Aquire a normalized ns-decl and add it to the map. + */ + if (xmlDOMWrapNSNormAquireNormalizedNs(destDoc, + /* ns-decls on curElem or on destDoc->oldNs */ + destParent ? curElem : NULL, + cur->ns, &ns, + &nsMap, depth, + /* if we need to search only in the ancestor-axis */ + ancestorsOnly, + /* ns-decls must be prefixed for attributes. */ + (cur->type == XML_ATTRIBUTE_NODE) ? 1 : 0) == -1) + goto internal_error; + clone->ns = ns; + } + +end_ns_reference: + + /* + * Some post-processing. + * + * Handle ID attributes. + */ + if ((clone->type == XML_ATTRIBUTE_NODE) && + (clone->parent != NULL)) + { + if (xmlIsID(destDoc, clone->parent, (xmlAttrPtr) clone)) { + + xmlChar *idVal; + + idVal = xmlNodeListGetString(cur->doc, cur->children, 1); + if (idVal != NULL) { + if (xmlAddID(NULL, destDoc, idVal, (xmlAttrPtr) cur) == NULL) { + /* TODO: error message. */ + xmlFree(idVal); + goto internal_error; + } + xmlFree(idVal); + } + } + } + /* + ** + ** The following will traverse the tree ************************** + ** + * + * Walk the element's attributes before descending into child-nodes. + */ + if ((cur->type == XML_ELEMENT_NODE) && (cur->properties != NULL)) { + prevClone = NULL; + parentClone = clone; + cur = (xmlNodePtr) cur->properties; + continue; + } +into_content: + /* + * Descend into child-nodes. + */ + if (cur->children != NULL) { + if (deep || (cur->type == XML_ATTRIBUTE_NODE)) { + prevClone = NULL; + parentClone = clone; + cur = cur->children; + continue; + } + } + +leave_node: + /* + * At this point we are done with the node, its content + * and an element-nodes's attribute-nodes. + */ + if (cur == node) + break; + if ((cur->type == XML_ELEMENT_NODE) || + (cur->type == XML_XINCLUDE_START) || + (cur->type == XML_XINCLUDE_END)) { + /* + * TODO: Do we expect nsDefs on XML_XINCLUDE_START? + */ + if (XML_NSMAP_NOTEMPTY(nsMap)) { + /* + * Pop mappings. + */ + while ((nsMap->last != NULL) && + (nsMap->last->depth >= depth)) + { + XML_NSMAP_POP(nsMap, mi) + } + /* + * Unshadow. + */ + XML_NSMAP_FOREACH(nsMap, mi) { + if (mi->shadowDepth >= depth) + mi->shadowDepth = -1; + } + } + depth--; + } + if (cur->next != NULL) { + prevClone = clone; + cur = cur->next; + } else if (cur->type != XML_ATTRIBUTE_NODE) { + /* + * Set clone->last. + */ + if (clone->parent != NULL) + clone->parent->last = clone; + clone = clone->parent; + if (clone != NULL) + parentClone = clone->parent; + /* + * Process parent --> next; + */ + cur = cur->parent; + goto leave_node; + } else { + /* This is for attributes only. */ + clone = clone->parent; + parentClone = clone->parent; + /* + * Process parent-element --> children. + */ + cur = cur->parent; + goto into_content; + } + } + goto exit; + +internal_error: + ret = -1; + +exit: + /* + * Cleanup. + */ + if (nsMap != NULL) { + if ((ctxt) && (ctxt->namespaceMap == nsMap)) { + /* + * Just cleanup the map but don't free. + */ + if (nsMap->first) { + if (nsMap->pool) + nsMap->last->next = nsMap->pool; + nsMap->pool = nsMap->first; + nsMap->first = NULL; + } + } else + xmlDOMWrapNsMapFree(nsMap); + } + /* + * TODO: Should we try a cleanup of the cloned node in case of a + * fatal error? + */ + *resNode = resultClone; + return (ret); +} + +/* +* xmlDOMWrapAdoptAttr: +* @ctxt: the optional context for custom processing +* @sourceDoc: the optional source document of attr +* @attr: the attribute-node to be adopted +* @destDoc: the destination doc for adoption +* @destParent: the optional new parent of @attr in @destDoc +* @options: option flags +* +* @attr is adopted by @destDoc. +* Ensures that ns-references point to @destDoc: either to +* elements->nsDef entries if @destParent is given, or to +* @destDoc->oldNs otherwise. +* +* Returns 0 if succeeded, -1 otherwise and on API/internal errors. +*/ +static int +xmlDOMWrapAdoptAttr(xmlDOMWrapCtxtPtr ctxt, + xmlDocPtr sourceDoc, + xmlAttrPtr attr, + xmlDocPtr destDoc, + xmlNodePtr destParent, + int options ATTRIBUTE_UNUSED) +{ + xmlNodePtr cur; + int adoptStr = 1; + + if ((attr == NULL) || (destDoc == NULL)) + return (-1); + + attr->doc = destDoc; + if (attr->ns != NULL) { + xmlNsPtr ns = NULL; + + if (ctxt != NULL) { + /* TODO: User defined. */ + } + /* XML Namespace. */ + if (IS_STR_XML(attr->ns->prefix)) { + ns = xmlTreeEnsureXMLDecl(destDoc); + } else if (destParent == NULL) { + /* + * Store in @destDoc->oldNs. + */ + ns = xmlDOMWrapStoreNs(destDoc, attr->ns->href, attr->ns->prefix); + } else { + /* + * Declare on @destParent. + */ + if (xmlSearchNsByNamespaceStrict(destDoc, destParent, attr->ns->href, + &ns, 1) == -1) + goto internal_error; + if (ns == NULL) { + ns = xmlDOMWrapNSNormDeclareNsForced(destDoc, destParent, + attr->ns->href, attr->ns->prefix, 1); + } + } + if (ns == NULL) + goto internal_error; + attr->ns = ns; + } + + XML_TREE_ADOPT_STR(attr->name); + attr->atype = 0; + attr->psvi = NULL; + /* + * Walk content. + */ + if (attr->children == NULL) + return (0); + cur = attr->children; + if ((cur != NULL) && (cur->type == XML_NAMESPACE_DECL)) + goto internal_error; + while (cur != NULL) { + cur->doc = destDoc; + switch (cur->type) { + case XML_TEXT_NODE: + case XML_CDATA_SECTION_NODE: + XML_TREE_ADOPT_STR_2(cur->content) + break; + case XML_ENTITY_REF_NODE: + /* + * Remove reference to the entitity-node. + */ + cur->content = NULL; + cur->children = NULL; + cur->last = NULL; + if ((destDoc->intSubset) || (destDoc->extSubset)) { + xmlEntityPtr ent; + /* + * Assign new entity-node if available. + */ + ent = xmlGetDocEntity(destDoc, cur->name); + if (ent != NULL) { + cur->content = ent->content; + cur->children = (xmlNodePtr) ent; + cur->last = (xmlNodePtr) ent; + } + } + break; + default: + break; + } + if (cur->children != NULL) { + cur = cur->children; + continue; + } +next_sibling: + if (cur == (xmlNodePtr) attr) + break; + if (cur->next != NULL) + cur = cur->next; + else { + cur = cur->parent; + goto next_sibling; + } + } + return (0); +internal_error: + return (-1); +} + +/* +* xmlDOMWrapAdoptNode: +* @ctxt: the optional context for custom processing +* @sourceDoc: the optional sourceDoc +* @node: the node to start with +* @destDoc: the destination doc +* @destParent: the optional new parent of @node in @destDoc +* @options: option flags +* +* References of out-of scope ns-decls are remapped to point to @destDoc: +* 1) If @destParent is given, then nsDef entries on element-nodes are used +* 2) If *no* @destParent is given, then @destDoc->oldNs entries are used +* This is the case when you have an unlinked node and just want to move it +* to the context of +* +* If @destParent is given, it ensures that the tree is namespace +* wellformed by creating additional ns-decls where needed. +* Note that, since prefixes of already existent ns-decls can be +* shadowed by this process, it could break QNames in attribute +* values or element content. +* NOTE: This function was not intensively tested. +* +* Returns 0 if the operation succeeded, +* 1 if a node of unsupported type was given, +* 2 if a node of not yet supported type was given and +* -1 on API/internal errors. +*/ +int +xmlDOMWrapAdoptNode(xmlDOMWrapCtxtPtr ctxt, + xmlDocPtr sourceDoc, + xmlNodePtr node, + xmlDocPtr destDoc, + xmlNodePtr destParent, + int options) +{ + if ((node == NULL) || (node->type == XML_NAMESPACE_DECL) || + (destDoc == NULL) || + ((destParent != NULL) && (destParent->doc != destDoc))) + return(-1); + /* + * Check node->doc sanity. + */ + if ((node->doc != NULL) && (sourceDoc != NULL) && + (node->doc != sourceDoc)) { + /* + * Might be an XIncluded node. + */ + return (-1); + } + if (sourceDoc == NULL) + sourceDoc = node->doc; + if (sourceDoc == destDoc) + return (-1); + switch (node->type) { + case XML_ELEMENT_NODE: + case XML_ATTRIBUTE_NODE: + case XML_TEXT_NODE: + case XML_CDATA_SECTION_NODE: + case XML_ENTITY_REF_NODE: + case XML_PI_NODE: + case XML_COMMENT_NODE: + break; + case XML_DOCUMENT_FRAG_NODE: + /* TODO: Support document-fragment-nodes. */ + return (2); + default: + return (1); + } + /* + * Unlink only if @node was not already added to @destParent. + */ + if ((node->parent != NULL) && (destParent != node->parent)) + xmlUnlinkNode(node); + + if (node->type == XML_ELEMENT_NODE) { + return (xmlDOMWrapAdoptBranch(ctxt, sourceDoc, node, + destDoc, destParent, options)); + } else if (node->type == XML_ATTRIBUTE_NODE) { + return (xmlDOMWrapAdoptAttr(ctxt, sourceDoc, + (xmlAttrPtr) node, destDoc, destParent, options)); + } else { + xmlNodePtr cur = node; + int adoptStr = 1; + + cur->doc = destDoc; + /* + * Optimize string adoption. + */ + if ((sourceDoc != NULL) && + (sourceDoc->dict == destDoc->dict)) + adoptStr = 0; + switch (node->type) { + case XML_TEXT_NODE: + case XML_CDATA_SECTION_NODE: + XML_TREE_ADOPT_STR_2(node->content) + break; + case XML_ENTITY_REF_NODE: + /* + * Remove reference to the entitity-node. + */ + node->content = NULL; + node->children = NULL; + node->last = NULL; + if ((destDoc->intSubset) || (destDoc->extSubset)) { + xmlEntityPtr ent; + /* + * Assign new entity-node if available. + */ + ent = xmlGetDocEntity(destDoc, node->name); + if (ent != NULL) { + node->content = ent->content; + node->children = (xmlNodePtr) ent; + node->last = (xmlNodePtr) ent; + } + } + XML_TREE_ADOPT_STR(node->name) + break; + case XML_PI_NODE: { + XML_TREE_ADOPT_STR(node->name) + XML_TREE_ADOPT_STR_2(node->content) + break; + } + default: + break; + } + } + return (0); +} + +#define bottom_tree +#include "elfgcchack.h" diff --git a/trio.c b/trio.c new file mode 100644 index 0000000..c8b9c84 --- /dev/null +++ b/trio.c @@ -0,0 +1,6895 @@ +/************************************************************************* + * + * $Id$ + * + * 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 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 +#include +#include + +#if (defined(__STDC_ISO_10646__) || defined(MB_LEN_MAX) \ + || defined(USE_MULTIBYTE) || TRIO_WIDECHAR) \ + && !defined(_WIN32_WCE) +# 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 + +#if defined(_WIN32_WCE) +#include +#endif + +/************************************************************************* + * Generic definitions + */ + +#if !(defined(DEBUG) || defined(NDEBUG)) +# define NDEBUG +#endif + +#include +#include +#if !defined(TRIO_COMPILER_SUPPORTS_C99) +# define isblank(x) (((x)==32) || ((x)==9)) +#endif +#if defined(TRIO_COMPILER_ANCIENT) +# include +#else +# include +#endif +#include + +#if defined( HAVE_ERRNO_H ) || defined( __VMS ) +#include +#endif + +#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 + +#ifndef VA_LIST_IS_ARRAY +#define TRIO_VA_LIST_PTR va_list * +#define TRIO_VA_LIST_ADDR(l) (&(l)) +#define TRIO_VA_LIST_DEREF(l) (*(l)) +#else +#define TRIO_VA_LIST_PTR va_list +#define TRIO_VA_LIST_ADDR(l) (l) +#define TRIO_VA_LIST_DEREF(l) (l) +#endif + +typedef unsigned long trio_flags_t; + + +/************************************************************************* + * Platform specific definitions + */ +#if defined(TRIO_PLATFORM_UNIX) || defined(TRIO_PLATFORM_OS400) +# include +# include +# include +# define USE_LOCALE +#endif /* TRIO_PLATFORM_UNIX */ +#if defined(TRIO_PLATFORM_VMS) +# include +#endif +#if defined(TRIO_PLATFORM_WIN32) +# if defined(_WIN32_WCE) +# include +# else +# include +# define read _read +# define write _write +# endif +#endif /* TRIO_PLATFORM_WIN32 */ + +#if TRIO_WIDECHAR +# if defined(TRIO_COMPILER_SUPPORTS_ISO94) +# include +# include +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) && !defined( __VMS ) +# include +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) || defined( __VMS ) +# include +#ifdef __VMS +typedef long long int intmax_t; +typedef unsigned long long int uintmax_t; +#endif +typedef intmax_t trio_intmax_t; +typedef uintmax_t trio_uintmax_t; +typedef int8_t trio_int8_t; +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))) \ + && !defined(_WIN32_WCE) +# 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" + +#if !defined(HAVE_ISASCII) && !defined(isascii) +#ifndef __VMS +# define isascii(x) ((unsigned int)(x) < 128) +#endif +#endif + +/* 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$"; + +/* + * 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, + TRIO_VA_LIST_PTR 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(TRIO_VA_LIST_DEREF(arglist), trio_wchar_t *) + : (trio_wchar_t *)(argarray[num]); + } + else +#endif + { + parameters[i].data.string = (argarray == NULL) + ? va_arg(TRIO_VA_LIST_DEREF(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(TRIO_VA_LIST_DEREF(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(TRIO_VA_LIST_DEREF(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 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(TRIO_VA_LIST_DEREF(arglist), size_t) + : (trio_uintmax_t)(*((size_t *)argarray[num])); + else +#endif +#if defined(QUALIFIER_PTRDIFF_T) + if (parameters[i].flags & FLAGS_PTRDIFF_T) + parameters[i].data.number.as_unsigned = (argarray == NULL) + ? (trio_uintmax_t)va_arg(TRIO_VA_LIST_DEREF(arglist), ptrdiff_t) + : (trio_uintmax_t)(*((ptrdiff_t *)argarray[num])); + else +#endif +#if defined(QUALIFIER_INTMAX_T) + if (parameters[i].flags & FLAGS_INTMAX_T) + parameters[i].data.number.as_unsigned = (argarray == NULL) + ? (trio_uintmax_t)va_arg(TRIO_VA_LIST_DEREF(arglist), trio_intmax_t) + : (trio_uintmax_t)(*((trio_intmax_t *)argarray[num])); + else +#endif + if (parameters[i].flags & FLAGS_QUAD) + parameters[i].data.number.as_unsigned = (argarray == NULL) + ? (trio_uintmax_t)va_arg(TRIO_VA_LIST_DEREF(arglist), trio_ulonglong_t) + : (trio_uintmax_t)(*((trio_ulonglong_t *)argarray[num])); + else if (parameters[i].flags & FLAGS_LONG) + parameters[i].data.number.as_unsigned = (argarray == NULL) + ? (trio_uintmax_t)va_arg(TRIO_VA_LIST_DEREF(arglist), long) + : (trio_uintmax_t)(*((long *)argarray[num])); + else + { + if (argarray == NULL) + parameters[i].data.number.as_unsigned = (trio_uintmax_t)va_arg(TRIO_VA_LIST_DEREF(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(TRIO_VA_LIST_DEREF(arglist), trio_pointer_t ) + : argarray[num]; + else + parameters[i].data.number.as_unsigned = (argarray == NULL) + ? (trio_uintmax_t)va_arg(TRIO_VA_LIST_DEREF(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(TRIO_VA_LIST_DEREF(arglist), trio_long_double_t *) + : (trio_long_double_t *)argarray[num]; + else + { + if (parameters[i].flags & FLAGS_LONG) + parameters[i].data.doublePointer = (argarray == NULL) + ? va_arg(TRIO_VA_LIST_DEREF(arglist), double *) + : (double *)argarray[num]; + else + parameters[i].data.doublePointer = (argarray == NULL) + ? (double *)va_arg(TRIO_VA_LIST_DEREF(arglist), float *) + : (double *)((float *)argarray[num]); + } + } + else + { + if (parameters[i].flags & FLAGS_LONGDOUBLE) + parameters[i].data.longdoubleNumber = (argarray == NULL) + ? va_arg(TRIO_VA_LIST_DEREF(arglist), trio_long_double_t) + : (trio_long_double_t)(*((trio_long_double_t *)argarray[num])); + else + { + if (argarray == NULL) + parameters[i].data.longdoubleNumber = + (trio_long_double_t)va_arg(TRIO_VA_LIST_DEREF(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 + * " + */ +/* 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 = ¶meters[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 = ¶meters[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, + TRIO_VA_LIST_PTR 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, + TRIO_VA_LIST_PTR 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, TRIO_VA_LIST_ADDR(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, TRIO_VA_LIST_ADDR(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, TRIO_VA_LIST_ADDR(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, TRIO_VA_LIST_ADDR(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, TRIO_VA_LIST_ADDR(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, TRIO_VA_LIST_ADDR(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, TRIO_VA_LIST_ADDR(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, TRIO_VA_LIST_ADDR(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, TRIO_VA_LIST_ADDR(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, TRIO_VA_LIST_ADDR(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, TRIO_VA_LIST_ADDR(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, TRIO_VA_LIST_ADDR(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, TRIO_VA_LIST_ADDR(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, TRIO_VA_LIST_ADDR(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, TRIO_VA_LIST_ADDR(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, TRIO_VA_LIST_ADDR(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, TRIO_VA_LIST_ADDR(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, TRIO_VA_LIST_ADDR(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, TRIO_VA_LIST_ADDR(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, TRIO_VA_LIST_ADDR(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, + TRIO_VA_LIST_PTR 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; + + assert(VALID(self)); + assert(VALID(self->location)); + assert(VALID(file)); + + file = (FILE *)self->location; + + 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 size; + unsigned char input; + + assert(VALID(self)); + assert(VALID(self->location)); + + fd = *((int *)self->location); + + 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, TRIO_VA_LIST_ADDR(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, TRIO_VA_LIST_ADDR(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, TRIO_VA_LIST_ADDR(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, TRIO_VA_LIST_ADDR(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, TRIO_VA_LIST_ADDR(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, TRIO_VA_LIST_ADDR(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, TRIO_VA_LIST_ADDR(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, TRIO_VA_LIST_ADDR(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, TRIO_VA_LIST_ADDR(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, TRIO_VA_LIST_ADDR(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..99d2127 --- /dev/null +++ b/trio.h @@ -0,0 +1,230 @@ +/************************************************************************* + * + * $Id$ + * + * 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(TRIO_HAVE_CONFIG_H) +# include "config.h" +#endif + +#include "triodef.h" + +#include +#include +#if defined(TRIO_COMPILER_ANCIENT) +# include +#else +# include +#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 functions */ +#ifndef HAVE_PRINTF +# undef printf +# define printf trio_printf +#endif +#ifndef HAVE_VPRINTF +# undef vprintf +# define vprintf trio_vprintf +#endif +#ifndef HAVE_FPRINTF +# undef fprintf +# define fprintf trio_fprintf +#endif +#ifndef HAVE_VFPRINTF +# undef vfprintf +# define vfprintf trio_vfprintf +#endif +#ifndef HAVE_SPRINTF +# undef sprintf +# define sprintf trio_sprintf +#endif +#ifndef HAVE_VSPRINTF +# undef vsprintf +# define vsprintf trio_vsprintf +#endif +#ifndef HAVE_SNPRINTF +# undef snprintf +# define snprintf trio_snprintf +#endif +#ifndef HAVE_VSNPRINTF +# undef vsnprintf +# define vsnprintf trio_vsnprintf +#endif +#ifndef HAVE_SCANF +# undef scanf +# define scanf trio_scanf +#endif +#ifndef HAVE_VSCANF +# undef vscanf +# define vscanf trio_vscanf +#endif +#ifndef HAVE_FSCANF +# undef fscanf +# define fscanf trio_fscanf +#endif +#ifndef HAVE_VFSCANF +# undef vfscanf +# define vfscanf trio_vfscanf +#endif +#ifndef HAVE_SSCANF +# undef sscanf +# define sscanf trio_sscanf +#endif +#ifndef HAVE_VSSCANF +# undef vsscanf +# define vsscanf trio_vsscanf +#endif +/* These aren't stdio functions, but we make them look similar */ +#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..46772ee --- /dev/null +++ b/triodef.h @@ -0,0 +1,228 @@ +/************************************************************************* + * + * $Id$ + * + * Copyright (C) 2001 Bjorn Reese + * + * 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(__OS400__) +# define TRIO_PLATFORM_OS400 +#elif defined(unix) || defined(__unix) || defined(__unix__) +# define TRIO_PLATFORM_UNIX +#elif defined(TRIO_COMPILER_XLC) || defined(_AIX) +# define TRIO_PLATFORM_UNIX +#elif defined(TRIO_COMPILER_DECC) || defined(__osf___) +# define TRIO_PLATFORM_UNIX +#elif defined(__NetBSD__) +# define TRIO_PLATFORM_UNIX +#elif defined(__Lynx__) +# 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 +#elif defined(TRIO_COMPILER_XLC) && defined(__EXTENDED__) +# define TRIO_COMPILER_SUPPORTS_C89 +# define TRIO_COMPILER_SUPPORTS_C90 +# define TRIO_COMPILER_SUPPORTS_C94 +#endif + +#if defined(_XOPEN_SOURCE) +# 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..6fbabb5 --- /dev/null +++ b/trionan.c @@ -0,0 +1,914 @@ +/************************************************************************* + * + * $Id$ + * + * Copyright (C) 2001 Bjorn Reese + * + * 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 +#include +#include +#include +#if defined(TRIO_PLATFORM_UNIX) +# include +#endif +#if defined(TRIO_COMPILER_DECC) +# if defined(__linux__) +# include +# else +# include +# endif +#endif +#include + +#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$"; + +#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)]) + +#if (defined(__BORLANDC__) && __BORLANDC__ >= 0x0590) +static TRIO_CONST double internalEndianMagic = 7.949928895127362e-275; +#else +static TRIO_CONST double internalEndianMagic = 7.949928895127363e-275; +#endif + +/* 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 + +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..be6e718 --- /dev/null +++ b/trionan.h @@ -0,0 +1,84 @@ +/************************************************************************* + * + * $Id$ + * + * Copyright (C) 2001 Bjorn Reese + * + * 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..8462c56 --- /dev/null +++ b/triop.h @@ -0,0 +1,150 @@ +/************************************************************************* + * + * $Id$ + * + * 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 +#if defined(TRIO_COMPILER_ANCIENT) +# include +#else +# include +#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..123bbeb --- /dev/null +++ b/triostr.c @@ -0,0 +1,2112 @@ +/************************************************************************* + * + * $Id$ + * + * 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 +#include +#include +#include +#include +#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 + +#ifdef __VMS +# define USE_STRTOD +#elif 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 +# if defined(_WIN32_WCE) +# define strcasecmp(x,y) _stricmp(x,y) +# else +# define strcasecmp(x,y) strcmpi(x,y) +# endif +#elif defined(TRIO_PLATFORM_OS400) +# define USE_STRCASECMP +# define USE_STRNCASECMP +# include +#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$"; +#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) && !defined(_WIN32_WCE) +/** + 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 ::= [ ] + ( | + | + ) + [ [ ] ] + number ::= 1*( ) + 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) && !defined(_WIN32_WCE) +/* + * 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..27f4ace --- /dev/null +++ b/triostr.h @@ -0,0 +1,144 @@ +/************************************************************************* + * + * $Id$ + * + * 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 +#include +#include +#include +#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)); +#if !defined(_WIN32_WCE) +TRIO_STRING_PUBLIC size_t trio_format_date_max TRIO_PROTO((char *target, size_t max, const char *format, const struct tm *datetime)); +#endif +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)); +#if !defined(_WIN32_WCE) +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)); +#endif +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..2bd5720 --- /dev/null +++ b/uri.c @@ -0,0 +1,2567 @@ +/** + * uri.c: set of generic URI related routines + * + * Reference: RFCs 3986, 2732 and 2373 + * + * See Copyright for the status of this software. + * + * daniel@veillard.com + */ + +#define IN_LIBXML +#include "libxml.h" + +#include + +#include +#include +#include +#include + +/** + * MAX_URI_LENGTH: + * + * The definition of the URI regexp in the above RFC has no size limit + * In practice they are usually relativey short except for the + * data URI scheme as defined in RFC 2397. Even for data URI the usual + * maximum size before hitting random practical limits is around 64 KB + * and 4KB is usually a maximum admitted limit for proper operations. + * The value below is more a security limit than anything else and + * really should never be hit by 'normal' operations + * Set to 1 MByte in 2012, this is only enforced on output + */ +#define MAX_URI_LENGTH 1024 * 1024 + +static void +xmlURIErrMemory(const char *extra) +{ + if (extra) + __xmlRaiseError(NULL, NULL, NULL, + NULL, NULL, XML_FROM_URI, + XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0, + extra, NULL, NULL, 0, 0, + "Memory allocation failed : %s\n", extra); + else + __xmlRaiseError(NULL, NULL, NULL, + NULL, NULL, XML_FROM_URI, + XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0, + NULL, NULL, NULL, 0, 0, + "Memory allocation failed\n"); +} + +static void xmlCleanURI(xmlURIPtr uri); + +/* + * Old rule from 2396 used in legacy handling code + * 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')) + +#ifdef IS_DIGIT +#undef IS_DIGIT +#endif +/* + * 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)) + +/* + * mark = "-" | "_" | "." | "!" | "~" | "*" | "'" | "(" | ")" + */ + +#define IS_MARK(x) (((x) == '-') || ((x) == '_') || ((x) == '.') || \ + ((x) == '!') || ((x) == '~') || ((x) == '*') || ((x) == '\'') || \ + ((x) == '(') || ((x) == ')')) + +/* + * unwise = "{" | "}" | "|" | "\" | "^" | "`" + */ + +#define IS_UNWISE(p) \ + (((*(p) == '{')) || ((*(p) == '}')) || ((*(p) == '|')) || \ + ((*(p) == '\\')) || ((*(p) == '^')) || ((*(p) == '[')) || \ + ((*(p) == ']')) || ((*(p) == '`'))) +/* + * reserved = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | "," | + * "[" | "]" + */ + +#define IS_RESERVED(x) (((x) == ';') || ((x) == '/') || ((x) == '?') || \ + ((x) == ':') || ((x) == '@') || ((x) == '&') || ((x) == '=') || \ + ((x) == '+') || ((x) == '$') || ((x) == ',') || ((x) == '[') || \ + ((x) == ']')) + +/* + * unreserved = alphanum | mark + */ + +#define IS_UNRESERVED(x) (IS_ALPHANUM(x) || IS_MARK(x)) + +/* + * 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 ] + */ + +#define STRNDUP(s, n) (char *) xmlStrndup((const xmlChar *)(s), (n)) + +/************************************************************************ + * * + * RFC 3986 parser * + * * + ************************************************************************/ + +#define ISA_DIGIT(p) ((*(p) >= '0') && (*(p) <= '9')) +#define ISA_ALPHA(p) (((*(p) >= 'a') && (*(p) <= 'z')) || \ + ((*(p) >= 'A') && (*(p) <= 'Z'))) +#define ISA_HEXDIG(p) \ + (ISA_DIGIT(p) || ((*(p) >= 'a') && (*(p) <= 'f')) || \ + ((*(p) >= 'A') && (*(p) <= 'F'))) + +/* + * sub-delims = "!" / "$" / "&" / "'" / "(" / ")" + * / "*" / "+" / "," / ";" / "=" + */ +#define ISA_SUB_DELIM(p) \ + (((*(p) == '!')) || ((*(p) == '$')) || ((*(p) == '&')) || \ + ((*(p) == '(')) || ((*(p) == ')')) || ((*(p) == '*')) || \ + ((*(p) == '+')) || ((*(p) == ',')) || ((*(p) == ';')) || \ + ((*(p) == '=')) || ((*(p) == '\''))) + +/* + * gen-delims = ":" / "/" / "?" / "#" / "[" / "]" / "@" + */ +#define ISA_GEN_DELIM(p) \ + (((*(p) == ':')) || ((*(p) == '/')) || ((*(p) == '?')) || \ + ((*(p) == '#')) || ((*(p) == '[')) || ((*(p) == ']')) || \ + ((*(p) == '@'))) + +/* + * reserved = gen-delims / sub-delims + */ +#define ISA_RESERVED(p) (ISA_GEN_DELIM(p) || (ISA_SUB_DELIM(p))) + +/* + * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" + */ +#define ISA_UNRESERVED(p) \ + ((ISA_ALPHA(p)) || (ISA_DIGIT(p)) || ((*(p) == '-')) || \ + ((*(p) == '.')) || ((*(p) == '_')) || ((*(p) == '~'))) + +/* + * pct-encoded = "%" HEXDIG HEXDIG + */ +#define ISA_PCT_ENCODED(p) \ + ((*(p) == '%') && (ISA_HEXDIG(p + 1)) && (ISA_HEXDIG(p + 2))) + +/* + * pchar = unreserved / pct-encoded / sub-delims / ":" / "@" + */ +#define ISA_PCHAR(p) \ + (ISA_UNRESERVED(p) || ISA_PCT_ENCODED(p) || ISA_SUB_DELIM(p) || \ + ((*(p) == ':')) || ((*(p) == '@'))) + +/** + * xmlParse3986Scheme: + * @uri: pointer to an URI structure + * @str: pointer to the string to analyze + * + * Parse an URI scheme + * + * ALPHA *( ALPHA / DIGIT / "+" / "-" / "." ) + * + * Returns 0 or the error code + */ +static int +xmlParse3986Scheme(xmlURIPtr uri, const char **str) { + const char *cur; + + if (str == NULL) + return(-1); + + cur = *str; + if (!ISA_ALPHA(cur)) + return(2); + cur++; + while (ISA_ALPHA(cur) || ISA_DIGIT(cur) || + (*cur == '+') || (*cur == '-') || (*cur == '.')) cur++; + if (uri != NULL) { + if (uri->scheme != NULL) xmlFree(uri->scheme); + uri->scheme = STRNDUP(*str, cur - *str); + } + *str = cur; + return(0); +} + +/** + * xmlParse3986Fragment: + * @uri: pointer to an URI structure + * @str: pointer to the string to analyze + * + * Parse the query part of an URI + * + * fragment = *( pchar / "/" / "?" ) + * NOTE: the strict syntax as defined by 3986 does not allow '[' and ']' + * in the fragment identifier but this is used very broadly for + * xpointer scheme selection, so we are allowing it here to not break + * for example all the DocBook processing chains. + * + * Returns 0 or the error code + */ +static int +xmlParse3986Fragment(xmlURIPtr uri, const char **str) +{ + const char *cur; + + if (str == NULL) + return (-1); + + cur = *str; + + while ((ISA_PCHAR(cur)) || (*cur == '/') || (*cur == '?') || + (*cur == '[') || (*cur == ']') || + ((uri != NULL) && (uri->cleanup & 1) && (IS_UNWISE(cur)))) + NEXT(cur); + if (uri != NULL) { + if (uri->fragment != NULL) + xmlFree(uri->fragment); + if (uri->cleanup & 2) + uri->fragment = STRNDUP(*str, cur - *str); + else + uri->fragment = xmlURIUnescapeString(*str, cur - *str, NULL); + } + *str = cur; + return (0); +} + +/** + * xmlParse3986Query: + * @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 +xmlParse3986Query(xmlURIPtr uri, const char **str) +{ + const char *cur; + + if (str == NULL) + return (-1); + + cur = *str; + + while ((ISA_PCHAR(cur)) || (*cur == '/') || (*cur == '?') || + ((uri != NULL) && (uri->cleanup & 1) && (IS_UNWISE(cur)))) + NEXT(cur); + if (uri != NULL) { + if (uri->query != NULL) + xmlFree(uri->query); + if (uri->cleanup & 2) + uri->query = STRNDUP(*str, cur - *str); + else + uri->query = xmlURIUnescapeString(*str, cur - *str, NULL); + + /* Save the raw bytes of the query as well. + * See: http://mail.gnome.org/archives/xml/2007-April/thread.html#00114 + */ + if (uri->query_raw != NULL) + xmlFree (uri->query_raw); + uri->query_raw = STRNDUP (*str, cur - *str); + } + *str = cur; + return (0); +} + +/** + * xmlParse3986Port: + * @uri: pointer to an URI structure + * @str: the string to analyze + * + * Parse a port part and fills in the appropriate fields + * of the @uri structure + * + * port = *DIGIT + * + * Returns 0 or the error code + */ +static int +xmlParse3986Port(xmlURIPtr uri, const char **str) +{ + const char *cur = *str; + unsigned port = 0; /* unsigned for defined overflow behavior */ + + if (ISA_DIGIT(cur)) { + while (ISA_DIGIT(cur)) { + port = port * 10 + (*cur - '0'); + + cur++; + } + if (uri != NULL) + uri->port = port & INT_MAX; /* port value modulo INT_MAX+1 */ + *str = cur; + return(0); + } + return(1); +} + +/** + * xmlParse3986Userinfo: + * @uri: pointer to an URI structure + * @str: the string to analyze + * + * Parse an user informations part and fills in the appropriate fields + * of the @uri structure + * + * userinfo = *( unreserved / pct-encoded / sub-delims / ":" ) + * + * Returns 0 or the error code + */ +static int +xmlParse3986Userinfo(xmlURIPtr uri, const char **str) +{ + const char *cur; + + cur = *str; + while (ISA_UNRESERVED(cur) || ISA_PCT_ENCODED(cur) || + ISA_SUB_DELIM(cur) || (*cur == ':')) + NEXT(cur); + if (*cur == '@') { + if (uri != NULL) { + if (uri->user != NULL) xmlFree(uri->user); + if (uri->cleanup & 2) + uri->user = STRNDUP(*str, cur - *str); + else + uri->user = xmlURIUnescapeString(*str, cur - *str, NULL); + } + *str = cur; + return(0); + } + return(1); +} + +/** + * xmlParse3986DecOctet: + * @str: the string to analyze + * + * dec-octet = DIGIT ; 0-9 + * / %x31-39 DIGIT ; 10-99 + * / "1" 2DIGIT ; 100-199 + * / "2" %x30-34 DIGIT ; 200-249 + * / "25" %x30-35 ; 250-255 + * + * Skip a dec-octet. + * + * Returns 0 if found and skipped, 1 otherwise + */ +static int +xmlParse3986DecOctet(const char **str) { + const char *cur = *str; + + if (!(ISA_DIGIT(cur))) + return(1); + if (!ISA_DIGIT(cur+1)) + cur++; + else if ((*cur != '0') && (ISA_DIGIT(cur + 1)) && (!ISA_DIGIT(cur+2))) + cur += 2; + else if ((*cur == '1') && (ISA_DIGIT(cur + 1)) && (ISA_DIGIT(cur + 2))) + cur += 3; + else if ((*cur == '2') && (*(cur + 1) >= '0') && + (*(cur + 1) <= '4') && (ISA_DIGIT(cur + 2))) + cur += 3; + else if ((*cur == '2') && (*(cur + 1) == '5') && + (*(cur + 2) >= '0') && (*(cur + 1) <= '5')) + cur += 3; + else + return(1); + *str = cur; + return(0); +} +/** + * xmlParse3986Host: + * @uri: pointer to an URI structure + * @str: the string to analyze + * + * Parse an host part and fills in the appropriate fields + * of the @uri structure + * + * host = IP-literal / IPv4address / reg-name + * IP-literal = "[" ( IPv6address / IPvFuture ) "]" + * IPv4address = dec-octet "." dec-octet "." dec-octet "." dec-octet + * reg-name = *( unreserved / pct-encoded / sub-delims ) + * + * Returns 0 or the error code + */ +static int +xmlParse3986Host(xmlURIPtr uri, const char **str) +{ + const char *cur = *str; + const char *host; + + host = cur; + /* + * IPv6 and future adressing scheme are enclosed between brackets + */ + if (*cur == '[') { + cur++; + while ((*cur != ']') && (*cur != 0)) + cur++; + if (*cur != ']') + return(1); + cur++; + goto found; + } + /* + * try to parse an IPv4 + */ + if (ISA_DIGIT(cur)) { + if (xmlParse3986DecOctet(&cur) != 0) + goto not_ipv4; + if (*cur != '.') + goto not_ipv4; + cur++; + if (xmlParse3986DecOctet(&cur) != 0) + goto not_ipv4; + if (*cur != '.') + goto not_ipv4; + if (xmlParse3986DecOctet(&cur) != 0) + goto not_ipv4; + if (*cur != '.') + goto not_ipv4; + if (xmlParse3986DecOctet(&cur) != 0) + goto not_ipv4; + goto found; +not_ipv4: + cur = *str; + } + /* + * then this should be a hostname which can be empty + */ + while (ISA_UNRESERVED(cur) || ISA_PCT_ENCODED(cur) || ISA_SUB_DELIM(cur)) + NEXT(cur); +found: + if (uri != NULL) { + if (uri->authority != NULL) xmlFree(uri->authority); + uri->authority = NULL; + if (uri->server != NULL) xmlFree(uri->server); + if (cur != host) { + if (uri->cleanup & 2) + uri->server = STRNDUP(host, cur - host); + else + uri->server = xmlURIUnescapeString(host, cur - host, NULL); + } else + uri->server = NULL; + } + *str = cur; + return(0); +} + +/** + * xmlParse3986Authority: + * @uri: pointer to an URI structure + * @str: the string to analyze + * + * Parse an authority part and fills in the appropriate fields + * of the @uri structure + * + * authority = [ userinfo "@" ] host [ ":" port ] + * + * Returns 0 or the error code + */ +static int +xmlParse3986Authority(xmlURIPtr uri, const char **str) +{ + const char *cur; + int ret; + + cur = *str; + /* + * try to parse an userinfo and check for the trailing @ + */ + ret = xmlParse3986Userinfo(uri, &cur); + if ((ret != 0) || (*cur != '@')) + cur = *str; + else + cur++; + ret = xmlParse3986Host(uri, &cur); + if (ret != 0) return(ret); + if (*cur == ':') { + cur++; + ret = xmlParse3986Port(uri, &cur); + if (ret != 0) return(ret); + } + *str = cur; + return(0); +} + +/** + * xmlParse3986Segment: + * @str: the string to analyze + * @forbid: an optional forbidden character + * @empty: allow an empty segment + * + * Parse a segment and fills in the appropriate fields + * of the @uri structure + * + * segment = *pchar + * segment-nz = 1*pchar + * segment-nz-nc = 1*( unreserved / pct-encoded / sub-delims / "@" ) + * ; non-zero-length segment without any colon ":" + * + * Returns 0 or the error code + */ +static int +xmlParse3986Segment(const char **str, char forbid, int empty) +{ + const char *cur; + + cur = *str; + if (!ISA_PCHAR(cur)) { + if (empty) + return(0); + return(1); + } + while (ISA_PCHAR(cur) && (*cur != forbid)) + NEXT(cur); + *str = cur; + return (0); +} + +/** + * xmlParse3986PathAbEmpty: + * @uri: pointer to an URI structure + * @str: the string to analyze + * + * Parse an path absolute or empty and fills in the appropriate fields + * of the @uri structure + * + * path-abempty = *( "/" segment ) + * + * Returns 0 or the error code + */ +static int +xmlParse3986PathAbEmpty(xmlURIPtr uri, const char **str) +{ + const char *cur; + int ret; + + cur = *str; + + while (*cur == '/') { + cur++; + ret = xmlParse3986Segment(&cur, 0, 1); + if (ret != 0) return(ret); + } + if (uri != NULL) { + if (uri->path != NULL) xmlFree(uri->path); + if (*str != cur) { + if (uri->cleanup & 2) + uri->path = STRNDUP(*str, cur - *str); + else + uri->path = xmlURIUnescapeString(*str, cur - *str, NULL); + } else { + uri->path = NULL; + } + } + *str = cur; + return (0); +} + +/** + * xmlParse3986PathAbsolute: + * @uri: pointer to an URI structure + * @str: the string to analyze + * + * Parse an path absolute and fills in the appropriate fields + * of the @uri structure + * + * path-absolute = "/" [ segment-nz *( "/" segment ) ] + * + * Returns 0 or the error code + */ +static int +xmlParse3986PathAbsolute(xmlURIPtr uri, const char **str) +{ + const char *cur; + int ret; + + cur = *str; + + if (*cur != '/') + return(1); + cur++; + ret = xmlParse3986Segment(&cur, 0, 0); + if (ret == 0) { + while (*cur == '/') { + cur++; + ret = xmlParse3986Segment(&cur, 0, 1); + if (ret != 0) return(ret); + } + } + if (uri != NULL) { + if (uri->path != NULL) xmlFree(uri->path); + if (cur != *str) { + if (uri->cleanup & 2) + uri->path = STRNDUP(*str, cur - *str); + else + uri->path = xmlURIUnescapeString(*str, cur - *str, NULL); + } else { + uri->path = NULL; + } + } + *str = cur; + return (0); +} + +/** + * xmlParse3986PathRootless: + * @uri: pointer to an URI structure + * @str: the string to analyze + * + * Parse an path without root and fills in the appropriate fields + * of the @uri structure + * + * path-rootless = segment-nz *( "/" segment ) + * + * Returns 0 or the error code + */ +static int +xmlParse3986PathRootless(xmlURIPtr uri, const char **str) +{ + const char *cur; + int ret; + + cur = *str; + + ret = xmlParse3986Segment(&cur, 0, 0); + if (ret != 0) return(ret); + while (*cur == '/') { + cur++; + ret = xmlParse3986Segment(&cur, 0, 1); + if (ret != 0) return(ret); + } + if (uri != NULL) { + if (uri->path != NULL) xmlFree(uri->path); + if (cur != *str) { + if (uri->cleanup & 2) + uri->path = STRNDUP(*str, cur - *str); + else + uri->path = xmlURIUnescapeString(*str, cur - *str, NULL); + } else { + uri->path = NULL; + } + } + *str = cur; + return (0); +} + +/** + * xmlParse3986PathNoScheme: + * @uri: pointer to an URI structure + * @str: the string to analyze + * + * Parse an path which is not a scheme and fills in the appropriate fields + * of the @uri structure + * + * path-noscheme = segment-nz-nc *( "/" segment ) + * + * Returns 0 or the error code + */ +static int +xmlParse3986PathNoScheme(xmlURIPtr uri, const char **str) +{ + const char *cur; + int ret; + + cur = *str; + + ret = xmlParse3986Segment(&cur, ':', 0); + if (ret != 0) return(ret); + while (*cur == '/') { + cur++; + ret = xmlParse3986Segment(&cur, 0, 1); + if (ret != 0) return(ret); + } + if (uri != NULL) { + if (uri->path != NULL) xmlFree(uri->path); + if (cur != *str) { + if (uri->cleanup & 2) + uri->path = STRNDUP(*str, cur - *str); + else + uri->path = xmlURIUnescapeString(*str, cur - *str, NULL); + } else { + uri->path = NULL; + } + } + *str = cur; + return (0); +} + +/** + * xmlParse3986HierPart: + * @uri: pointer to an URI structure + * @str: the string to analyze + * + * Parse an hierarchical part and fills in the appropriate fields + * of the @uri structure + * + * hier-part = "//" authority path-abempty + * / path-absolute + * / path-rootless + * / path-empty + * + * Returns 0 or the error code + */ +static int +xmlParse3986HierPart(xmlURIPtr uri, const char **str) +{ + const char *cur; + int ret; + + cur = *str; + + if ((*cur == '/') && (*(cur + 1) == '/')) { + cur += 2; + ret = xmlParse3986Authority(uri, &cur); + if (ret != 0) return(ret); + if (uri->server == NULL) + uri->port = -1; + ret = xmlParse3986PathAbEmpty(uri, &cur); + if (ret != 0) return(ret); + *str = cur; + return(0); + } else if (*cur == '/') { + ret = xmlParse3986PathAbsolute(uri, &cur); + if (ret != 0) return(ret); + } else if (ISA_PCHAR(cur)) { + ret = xmlParse3986PathRootless(uri, &cur); + if (ret != 0) return(ret); + } else { + /* path-empty is effectively empty */ + if (uri != NULL) { + if (uri->path != NULL) xmlFree(uri->path); + uri->path = NULL; + } + } + *str = cur; + return (0); +} + +/** + * xmlParse3986RelativeRef: + * @uri: pointer to an URI structure + * @str: the string to analyze + * + * Parse an URI string and fills in the appropriate fields + * of the @uri structure + * + * relative-ref = relative-part [ "?" query ] [ "#" fragment ] + * relative-part = "//" authority path-abempty + * / path-absolute + * / path-noscheme + * / path-empty + * + * Returns 0 or the error code + */ +static int +xmlParse3986RelativeRef(xmlURIPtr uri, const char *str) { + int ret; + + if ((*str == '/') && (*(str + 1) == '/')) { + str += 2; + ret = xmlParse3986Authority(uri, &str); + if (ret != 0) return(ret); + ret = xmlParse3986PathAbEmpty(uri, &str); + if (ret != 0) return(ret); + } else if (*str == '/') { + ret = xmlParse3986PathAbsolute(uri, &str); + if (ret != 0) return(ret); + } else if (ISA_PCHAR(str)) { + ret = xmlParse3986PathNoScheme(uri, &str); + if (ret != 0) return(ret); + } else { + /* path-empty is effectively empty */ + if (uri != NULL) { + if (uri->path != NULL) xmlFree(uri->path); + uri->path = NULL; + } + } + + if (*str == '?') { + str++; + ret = xmlParse3986Query(uri, &str); + if (ret != 0) return(ret); + } + if (*str == '#') { + str++; + ret = xmlParse3986Fragment(uri, &str); + if (ret != 0) return(ret); + } + if (*str != 0) { + xmlCleanURI(uri); + return(1); + } + return(0); +} + + +/** + * xmlParse3986URI: + * @uri: pointer to an URI structure + * @str: the string to analyze + * + * Parse an URI string and fills in the appropriate fields + * of the @uri structure + * + * scheme ":" hier-part [ "?" query ] [ "#" fragment ] + * + * Returns 0 or the error code + */ +static int +xmlParse3986URI(xmlURIPtr uri, const char *str) { + int ret; + + ret = xmlParse3986Scheme(uri, &str); + if (ret != 0) return(ret); + if (*str != ':') { + return(1); + } + str++; + ret = xmlParse3986HierPart(uri, &str); + if (ret != 0) return(ret); + if (*str == '?') { + str++; + ret = xmlParse3986Query(uri, &str); + if (ret != 0) return(ret); + } + if (*str == '#') { + str++; + ret = xmlParse3986Fragment(uri, &str); + if (ret != 0) return(ret); + } + if (*str != 0) { + xmlCleanURI(uri); + return(1); + } + return(0); +} + +/** + * xmlParse3986URIReference: + * @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 = URI / relative-ref + * + * Returns 0 or the error code + */ +static int +xmlParse3986URIReference(xmlURIPtr uri, const char *str) { + int ret; + + if (str == NULL) + return(-1); + xmlCleanURI(uri); + + /* + * Try first to parse absolute refs, then fallback to relative if + * it fails. + */ + ret = xmlParse3986URI(uri, str); + if (ret != 0) { + xmlCleanURI(uri); + ret = xmlParse3986RelativeRef(uri, str); + if (ret != 0) { + xmlCleanURI(uri); + return(ret); + } + } + return(0); +} + +/** + * xmlParseURI: + * @str: the URI string to analyze + * + * Parse an URI based on RFC 3986 + * + * URI-reference = [ absoluteURI | relativeURI ] [ "#" fragment ] + * + * Returns a newly built 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 = xmlParse3986URIReference(uri, str); + if (ret) { + xmlFreeURI(uri); + return(NULL); + } + } + return(uri); +} + +/** + * xmlParseURIReference: + * @uri: pointer to an URI structure + * @str: the string to analyze + * + * Parse an URI reference string based on RFC 3986 and fills in the + * appropriate fields of the @uri structure + * + * URI-reference = URI / relative-ref + * + * Returns 0 or the error code + */ +int +xmlParseURIReference(xmlURIPtr uri, const char *str) { + return(xmlParse3986URIReference(uri, str)); +} + +/** + * xmlParseURIRaw: + * @str: the URI string to analyze + * @raw: if 1 unescaping of URI pieces are disabled + * + * Parse an URI but allows to keep intact the original fragments. + * + * URI-reference = URI / relative-ref + * + * Returns a newly built xmlURIPtr or NULL in case of error + */ +xmlURIPtr +xmlParseURIRaw(const char *str, int raw) { + xmlURIPtr uri; + int ret; + + if (str == NULL) + return(NULL); + uri = xmlCreateURI(); + if (uri != NULL) { + if (raw) { + uri->cleanup |= 2; + } + ret = xmlParseURIReference(uri, str); + if (ret) { + xmlFreeURI(uri); + return(NULL); + } + } + return(uri); +} + +/************************************************************************ + * * + * 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) { + xmlURIErrMemory("creating URI structure\n"); + return(NULL); + } + memset(ret, 0, sizeof(xmlURI)); + return(ret); +} + +/** + * xmlSaveUriRealloc: + * + * Function to handle properly a reallocation when saving an URI + * Also imposes some limit on the length of an URI string output + */ +static xmlChar * +xmlSaveUriRealloc(xmlChar *ret, int *max) { + xmlChar *temp; + int tmp; + + if (*max > MAX_URI_LENGTH) { + xmlURIErrMemory("reaching arbitrary MAX_URI_LENGTH limit\n"); + return(NULL); + } + tmp = *max * 2; + temp = (xmlChar *) xmlRealloc(ret, (tmp + 1)); + if (temp == NULL) { + xmlURIErrMemory("saving URI\n"); + return(NULL); + } + *max = tmp; + return(temp); +} + +/** + * xmlSaveUri: + * @uri: pointer to an xmlURI + * + * Save the URI as an escaped string + * + * Returns a new string (to be deallocated by caller) + */ +xmlChar * +xmlSaveUri(xmlURIPtr uri) { + xmlChar *ret = NULL; + xmlChar *temp; + const char *p; + int len; + int max; + + if (uri == NULL) return(NULL); + + + max = 80; + ret = (xmlChar *) xmlMallocAtomic((max + 1) * sizeof(xmlChar)); + if (ret == NULL) { + xmlURIErrMemory("saving URI\n"); + return(NULL); + } + len = 0; + + if (uri->scheme != NULL) { + p = uri->scheme; + while (*p != 0) { + if (len >= max) { + temp = xmlSaveUriRealloc(ret, &max); + if (temp == NULL) goto mem_error; + ret = temp; + } + ret[len++] = *p++; + } + if (len >= max) { + temp = xmlSaveUriRealloc(ret, &max); + if (temp == NULL) goto mem_error; + ret = temp; + } + ret[len++] = ':'; + } + if (uri->opaque != NULL) { + p = uri->opaque; + while (*p != 0) { + if (len + 3 >= max) { + temp = xmlSaveUriRealloc(ret, &max); + if (temp == NULL) goto mem_error; + ret = temp; + } + 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) || (uri->port == -1)) { + if (len + 3 >= max) { + temp = xmlSaveUriRealloc(ret, &max); + if (temp == NULL) goto mem_error; + ret = temp; + } + ret[len++] = '/'; + ret[len++] = '/'; + if (uri->user != NULL) { + p = uri->user; + while (*p != 0) { + if (len + 3 >= max) { + temp = xmlSaveUriRealloc(ret, &max); + if (temp == NULL) goto mem_error; + ret = temp; + } + 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) { + temp = xmlSaveUriRealloc(ret, &max); + if (temp == NULL) goto mem_error; + ret = temp; + } + ret[len++] = '@'; + } + if (uri->server != NULL) { + p = uri->server; + while (*p != 0) { + if (len >= max) { + temp = xmlSaveUriRealloc(ret, &max); + if (temp == NULL) goto mem_error; + ret = temp; + } + ret[len++] = *p++; + } + if (uri->port > 0) { + if (len + 10 >= max) { + temp = xmlSaveUriRealloc(ret, &max); + if (temp == NULL) goto mem_error; + ret = temp; + } + len += snprintf((char *) &ret[len], max - len, ":%d", uri->port); + } + } + } else if (uri->authority != NULL) { + if (len + 3 >= max) { + temp = xmlSaveUriRealloc(ret, &max); + if (temp == NULL) goto mem_error; + ret = temp; + } + ret[len++] = '/'; + ret[len++] = '/'; + p = uri->authority; + while (*p != 0) { + if (len + 3 >= max) { + temp = xmlSaveUriRealloc(ret, &max); + if (temp == NULL) goto mem_error; + ret = temp; + } + 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) { + temp = xmlSaveUriRealloc(ret, &max); + if (temp == NULL) goto mem_error; + ret = temp; + } + } + if (uri->path != NULL) { + p = uri->path; + /* + * the colon in file:///d: should not be escaped or + * Windows accesses fail later. + */ + if ((uri->scheme != NULL) && + (p[0] == '/') && + (((p[1] >= 'a') && (p[1] <= 'z')) || + ((p[1] >= 'A') && (p[1] <= 'Z'))) && + (p[2] == ':') && + (xmlStrEqual(BAD_CAST uri->scheme, BAD_CAST "file"))) { + if (len + 3 >= max) { + temp = xmlSaveUriRealloc(ret, &max); + if (temp == NULL) goto mem_error; + ret = temp; + } + ret[len++] = *p++; + ret[len++] = *p++; + ret[len++] = *p++; + } + while (*p != 0) { + if (len + 3 >= max) { + temp = xmlSaveUriRealloc(ret, &max); + if (temp == NULL) goto mem_error; + ret = temp; + } + 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_raw != NULL) { + if (len + 1 >= max) { + temp = xmlSaveUriRealloc(ret, &max); + if (temp == NULL) goto mem_error; + ret = temp; + } + ret[len++] = '?'; + p = uri->query_raw; + while (*p != 0) { + if (len + 1 >= max) { + temp = xmlSaveUriRealloc(ret, &max); + if (temp == NULL) goto mem_error; + ret = temp; + } + ret[len++] = *p++; + } + } else if (uri->query != NULL) { + if (len + 3 >= max) { + temp = xmlSaveUriRealloc(ret, &max); + if (temp == NULL) goto mem_error; + ret = temp; + } + ret[len++] = '?'; + p = uri->query; + while (*p != 0) { + if (len + 3 >= max) { + temp = xmlSaveUriRealloc(ret, &max); + if (temp == NULL) goto mem_error; + ret = temp; + } + 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) { + temp = xmlSaveUriRealloc(ret, &max); + if (temp == NULL) goto mem_error; + ret = temp; + } + ret[len++] = '#'; + p = uri->fragment; + while (*p != 0) { + if (len + 3 >= max) { + temp = xmlSaveUriRealloc(ret, &max); + if (temp == NULL) goto mem_error; + ret = temp; + } + 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) { + temp = xmlSaveUriRealloc(ret, &max); + if (temp == NULL) goto mem_error; + ret = temp; + } + ret[len] = 0; + return(ret); + +mem_error: + xmlFree(ret); + return(NULL); +} + +/** + * xmlPrintURI: + * @stream: a FILE* for the output + * @uri: pointer to an xmlURI + * + * Prints the URI in the stream @stream. + */ +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; + if (uri->query_raw != NULL) xmlFree(uri->query_raw); + uri->query_raw = 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); + if (uri->query_raw != NULL) xmlFree(uri->query_raw); + 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 "/../", where 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 "/..", where + * is a complete path segment not equal to "..", that + * "/.." 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); +} + +static int is_hex(char c) { + if (((c >= '0') && (c <= '9')) || + ((c >= 'a') && (c <= 'f')) || + ((c >= 'A') && (c <= 'F'))) + return(1); + 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, but does not check that the string is an URI. The + * output is a direct unsigned char translation of %XX values (no encoding) + * Note that the length of the result can only be smaller or same size as + * the input string. + * + * Returns a copy of the string, but unescaped, will return NULL only in case + * of error + */ +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) { + xmlURIErrMemory("unescaping URI value\n"); + return(NULL); + } + } else + ret = target; + in = str; + out = ret; + while(len > 0) { + if ((len > 2) && (*in == '%') && (is_hex(in[1])) && (is_hex(in[2]))) { + 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; + xmlChar *temp; + const xmlChar *in; + int len, out; + + if (str == NULL) + return(NULL); + if (str[0] == 0) + return(xmlStrdup(str)); + len = xmlStrlen(str); + if (!(len > 0)) return(NULL); + + len += 20; + ret = (xmlChar *) xmlMallocAtomic(len); + if (ret == NULL) { + xmlURIErrMemory("escaping URI value\n"); + return(NULL); + } + in = (const xmlChar *) str; + out = 0; + while(*in != 0) { + if (len - out <= 3) { + temp = xmlSaveUriRealloc(ret, &len); + if (temp == NULL) { + xmlURIErrMemory("escaping URI value\n"); + xmlFree(ret); + return(NULL); + } + ret = temp; + } + + 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) { \ + xmlURIErrMemory("escaping URI value\n"); \ + xmlFreeURI(uri); \ + 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,BAD_CAST "//"); + ret = xmlStrcat(ret, segment); + ret = xmlStrcat(ret, BAD_CAST "@"); + xmlFree(segment); + } + + if (uri->server) { + segment = xmlURIEscapeStr(BAD_CAST uri->server, BAD_CAST "/?;:@"); + NULLCHK(segment) + if (uri->user == NULL) + 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_raw) { + ret = xmlStrcat(ret, BAD_CAST "?"); + ret = xmlStrcat(ret, BAD_CAST uri->query_raw); + } + else 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); +} + +/************************************************************************ + * * + * 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_raw != NULL) + res->query_raw = xmlMemStrdup (ref->query_raw); + else if (ref->query != NULL) + res->query = xmlMemStrdup(ref->query); + else if (bas->query_raw != NULL) + res->query_raw = xmlMemStrdup(bas->query_raw); + 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_raw != NULL) + res->query_raw = xmlMemStrdup(ref->query_raw); + else 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) { + xmlURIErrMemory("resolving URI against base\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); +} + +/** + * xmlBuildRelativeURI: + * @URI: the URI reference under consideration + * @base: the base value + * + * Expresses the URI of the reference in terms relative to the + * base. Some examples of this operation include: + * base = "http://site1.com/docs/book1.html" + * URI input URI returned + * docs/pic1.gif pic1.gif + * docs/img/pic1.gif img/pic1.gif + * img/pic1.gif ../img/pic1.gif + * http://site1.com/docs/pic1.gif pic1.gif + * http://site2.com/docs/pic1.gif http://site2.com/docs/pic1.gif + * + * base = "docs/book1.html" + * URI input URI returned + * docs/pic1.gif pic1.gif + * docs/img/pic1.gif img/pic1.gif + * img/pic1.gif ../img/pic1.gif + * http://site1.com/docs/pic1.gif http://site1.com/docs/pic1.gif + * + * + * Note: if the URI reference is really wierd or complicated, it may be + * worthwhile to first convert it into a "nice" one by calling + * xmlBuildURI (using 'base') before calling this routine, + * since this routine (for reasonable efficiency) assumes URI has + * already been through some validation. + * + * Returns a new URI string (to be freed by the caller) or NULL in case + * error. + */ +xmlChar * +xmlBuildRelativeURI (const xmlChar * URI, const xmlChar * base) +{ + xmlChar *val = NULL; + int ret; + int ix; + int pos = 0; + int nbslash = 0; + int len; + xmlURIPtr ref = NULL; + xmlURIPtr bas = NULL; + xmlChar *bptr, *uptr, *vptr; + int remove_path = 0; + + if ((URI == NULL) || (*URI == 0)) + return NULL; + + /* + * First parse URI into a standard form + */ + ref = xmlCreateURI (); + if (ref == NULL) + return NULL; + /* If URI not already in "relative" form */ + if (URI[0] != '.') { + ret = xmlParseURIReference (ref, (const char *) URI); + if (ret != 0) + goto done; /* Error in URI, return NULL */ + } else + ref->path = (char *)xmlStrdup(URI); + + /* + * Next parse base into the same standard form + */ + if ((base == NULL) || (*base == 0)) { + val = xmlStrdup (URI); + goto done; + } + bas = xmlCreateURI (); + if (bas == NULL) + goto done; + if (base[0] != '.') { + ret = xmlParseURIReference (bas, (const char *) base); + if (ret != 0) + goto done; /* Error in base, return NULL */ + } else + bas->path = (char *)xmlStrdup(base); + + /* + * If the scheme / server on the URI differs from the base, + * just return the URI + */ + if ((ref->scheme != NULL) && + ((bas->scheme == NULL) || + (xmlStrcmp ((xmlChar *)bas->scheme, (xmlChar *)ref->scheme)) || + (xmlStrcmp ((xmlChar *)bas->server, (xmlChar *)ref->server)))) { + val = xmlStrdup (URI); + goto done; + } + if (xmlStrEqual((xmlChar *)bas->path, (xmlChar *)ref->path)) { + val = xmlStrdup(BAD_CAST ""); + goto done; + } + if (bas->path == NULL) { + val = xmlStrdup((xmlChar *)ref->path); + goto done; + } + if (ref->path == NULL) { + ref->path = (char *) "/"; + remove_path = 1; + } + + /* + * At this point (at last!) we can compare the two paths + * + * First we take care of the special case where either of the + * two path components may be missing (bug 316224) + */ + if (bas->path == NULL) { + if (ref->path != NULL) { + uptr = (xmlChar *) ref->path; + if (*uptr == '/') + uptr++; + /* exception characters from xmlSaveUri */ + val = xmlURIEscapeStr(uptr, BAD_CAST "/;&=+$,"); + } + goto done; + } + bptr = (xmlChar *)bas->path; + if (ref->path == NULL) { + for (ix = 0; bptr[ix] != 0; ix++) { + if (bptr[ix] == '/') + nbslash++; + } + uptr = NULL; + len = 1; /* this is for a string terminator only */ + } else { + /* + * Next we compare the two strings and find where they first differ + */ + if ((ref->path[pos] == '.') && (ref->path[pos+1] == '/')) + pos += 2; + if ((*bptr == '.') && (bptr[1] == '/')) + bptr += 2; + else if ((*bptr == '/') && (ref->path[pos] != '/')) + bptr++; + while ((bptr[pos] == ref->path[pos]) && (bptr[pos] != 0)) + pos++; + + if (bptr[pos] == ref->path[pos]) { + val = xmlStrdup(BAD_CAST ""); + goto done; /* (I can't imagine why anyone would do this) */ + } + + /* + * In URI, "back up" to the last '/' encountered. This will be the + * beginning of the "unique" suffix of URI + */ + ix = pos; + if ((ref->path[ix] == '/') && (ix > 0)) + ix--; + else if ((ref->path[ix] == 0) && (ix > 1) && (ref->path[ix - 1] == '/')) + ix -= 2; + for (; ix > 0; ix--) { + if (ref->path[ix] == '/') + break; + } + if (ix == 0) { + uptr = (xmlChar *)ref->path; + } else { + ix++; + uptr = (xmlChar *)&ref->path[ix]; + } + + /* + * In base, count the number of '/' from the differing point + */ + if (bptr[pos] != ref->path[pos]) {/* check for trivial URI == base */ + for (; bptr[ix] != 0; ix++) { + if (bptr[ix] == '/') + nbslash++; + } + } + len = xmlStrlen (uptr) + 1; + } + + if (nbslash == 0) { + if (uptr != NULL) + /* exception characters from xmlSaveUri */ + val = xmlURIEscapeStr(uptr, BAD_CAST "/;&=+$,"); + goto done; + } + + /* + * Allocate just enough space for the returned string - + * length of the remainder of the URI, plus enough space + * for the "../" groups, plus one for the terminator + */ + val = (xmlChar *) xmlMalloc (len + 3 * nbslash); + if (val == NULL) { + xmlURIErrMemory("building relative URI\n"); + goto done; + } + vptr = val; + /* + * Put in as many "../" as needed + */ + for (; nbslash>0; nbslash--) { + *vptr++ = '.'; + *vptr++ = '.'; + *vptr++ = '/'; + } + /* + * Finish up with the end of the URI + */ + if (uptr != NULL) { + if ((vptr > val) && (len > 0) && + (uptr[0] == '/') && (vptr[-1] == '/')) { + memcpy (vptr, uptr + 1, len - 1); + vptr[len - 2] = 0; + } else { + memcpy (vptr, uptr, len); + vptr[len - 1] = 0; + } + } else { + vptr[len - 1] = 0; + } + + /* escape the freshly-built path */ + vptr = val; + /* exception characters from xmlSaveUri */ + val = xmlURIEscapeStr(vptr, BAD_CAST "/;&=+$,"); + xmlFree(vptr); + +done: + /* + * Free the working variables + */ + if (remove_path != 0) + ref->path = NULL; + if (ref != NULL) + xmlFreeURI (ref); + if (bas != NULL) + xmlFreeURI (bas); + + 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) +{ +/* + * For Windows implementations, additional work needs to be done to + * replace backslashes in pathnames with "forward slashes" + */ +#if defined(_WIN32) && !defined(__CYGWIN__) + int len = 0; + int i = 0; + xmlChar *p = NULL; +#endif + xmlURIPtr uri; + xmlChar *ret; + const xmlChar *absuri; + + if (path == NULL) + return(NULL); + +#if defined(_WIN32) + /* + * We must not change the backslashes to slashes if the the path + * starts with \\?\ + * Those paths can be up to 32k characters long. + * Was added specifically for OpenOffice, those paths can't be converted + * to URIs anyway. + */ + if ((path[0] == '\\') && (path[1] == '\\') && (path[2] == '?') && + (path[3] == '\\') ) + return xmlStrdup((const xmlChar *) path); +#endif + + /* sanitize filename starting with // so it can be used as URI */ + if ((path[0] == '/') && (path[1] == '/') && (path[2] != '/')) + path++; + + if ((uri = xmlParseURI((const char *) path)) != NULL) { + xmlFreeURI(uri); + return xmlStrdup(path); + } + + /* Check if this is an "absolute uri" */ + absuri = xmlStrstr(path, BAD_CAST "://"); + if (absuri != NULL) { + int l, j; + unsigned char c; + xmlChar *escURI; + + /* + * this looks like an URI where some parts have not been + * escaped leading to a parsing problem. Check that the first + * part matches a protocol. + */ + l = absuri - path; + /* Bypass if first part (part before the '://') is > 20 chars */ + if ((l <= 0) || (l > 20)) + goto path_processing; + /* Bypass if any non-alpha characters are present in first part */ + for (j = 0;j < l;j++) { + c = path[j]; + if (!(((c >= 'a') && (c <= 'z')) || ((c >= 'A') && (c <= 'Z')))) + goto path_processing; + } + + /* Escape all except the characters specified in the supplied path */ + escURI = xmlURIEscapeStr(path, BAD_CAST ":/?_.#&;="); + if (escURI != NULL) { + /* Try parsing the escaped path */ + uri = xmlParseURI((const char *) escURI); + /* If successful, return the escaped string */ + if (uri != NULL) { + xmlFreeURI(uri); + return escURI; + } + } + } + +path_processing: +/* For Windows implementations, replace backslashes with 'forward slashes' */ +#if defined(_WIN32) && !defined(__CYGWIN__) + /* + * Create a URI structure + */ + uri = xmlCreateURI(); + if (uri == NULL) { /* Guard against 'out of memory' */ + return(NULL); + } + + len = xmlStrlen(path); + if ((len > 2) && IS_WINDOWS_PATH(path)) { + /* make the scheme 'file' */ + uri->scheme = xmlStrdup(BAD_CAST "file"); + /* allocate space for leading '/' + path + string terminator */ + uri->path = xmlMallocAtomic(len + 2); + if (uri->path == NULL) { + xmlFreeURI(uri); /* Guard agains 'out of memory' */ + return(NULL); + } + /* Put in leading '/' plus path */ + uri->path[0] = '/'; + p = uri->path + 1; + strncpy(p, path, len + 1); + } else { + uri->path = xmlStrdup(path); + if (uri->path == NULL) { + xmlFreeURI(uri); + return(NULL); + } + p = uri->path; + } + /* Now change all occurences of '\' to '/' */ + while (*p != '\0') { + if (*p == '\\') + *p = '/'; + p++; + } + + if (uri->scheme == NULL) { + ret = xmlStrdup((const xmlChar *) uri->path); + } else { + ret = xmlSaveUri(uri); + } + + xmlFreeURI(uri); +#else + ret = xmlStrdup((const xmlChar *) path); +#endif + return(ret); +} + +/** + * xmlPathToURI: + * @path: the resource locator in a filesystem notation + * + * Constructs an URI expressing the existing path + * + * Returns a new URI, or a duplicate of the path parameter if the + * construction fails. The caller is responsible for freeing the memory + * occupied by the returned string. If there is insufficient memory available, + * or the argument is NULL, the function returns NULL. + */ +xmlChar * +xmlPathToURI(const xmlChar *path) +{ + xmlURIPtr uri; + xmlURI temp; + xmlChar *ret, *cal; + + if (path == NULL) + return(NULL); + + if ((uri = xmlParseURI((const char *) path)) != NULL) { + xmlFreeURI(uri); + return xmlStrdup(path); + } + cal = xmlCanonicPath(path); + if (cal == NULL) + return(NULL); +#if defined(_WIN32) && !defined(__CYGWIN__) + /* xmlCanonicPath can return an URI on Windows (is that the intended behaviour?) + If 'cal' is a valid URI allready then we are done here, as continuing would make + it invalid. */ + if ((uri = xmlParseURI((const char *) cal)) != NULL) { + xmlFreeURI(uri); + return cal; + } + /* 'cal' can contain a relative path with backslashes. If that is processed + by xmlSaveURI, they will be escaped and the external entity loader machinery + will fail. So convert them to slashes. Misuse 'ret' for walking. */ + ret = cal; + while (*ret != '\0') { + if (*ret == '\\') + *ret = '/'; + ret++; + } +#endif + memset(&temp, 0, sizeof(temp)); + temp.path = (char *) cal; + ret = xmlSaveUri(&temp); + xmlFree(cal); + return(ret); +} +#define bottom_uri +#include "elfgcchack.h" diff --git a/valid.c b/valid.c new file mode 100644 index 0000000..19f84b8 --- /dev/null +++ b/valid.c @@ -0,0 +1,7054 @@ +/* + * 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 + +#ifdef HAVE_STDLIB_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +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__); + +#ifdef LIBXML_VALID_ENABLED +static int +xmlValidateAttributeValueInternal(xmlDocPtr doc, xmlAttributeType type, + const xmlChar *value); +#endif +/************************************************************************ + * * + * 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; + /* Use the special values to detect if it is part of a parsing + context */ + if ((ctxt->finishDtd == XML_CTXT_FINISH_DTD_0) || + (ctxt->finishDtd == XML_CTXT_FINISH_DTD_1)) { + long delta = (char *) ctxt - (char *) ctxt->userData; + if ((delta > 0) && (delta < 250)) + 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 LIBXML_ATTR_FORMAT(3,0) +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; + /* Use the special values to detect if it is part of a parsing + context */ + if ((ctxt->finishDtd == XML_CTXT_FINISH_DTD_0) || + (ctxt->finishDtd == XML_CTXT_FINISH_DTD_1)) { + long delta = (char *) ctxt - (char *) ctxt->userData; + if ((delta > 0) && (delta < 250)) + 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, + "%s", 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 LIBXML_ATTR_FORMAT(4,0) +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; + /* Use the special values to detect if it is part of a parsing + context */ + if ((ctxt->finishDtd == XML_CTXT_FINISH_DTD_0) || + (ctxt->finishDtd == XML_CTXT_FINISH_DTD_1)) { + long delta = (char *) ctxt - (char *) ctxt->userData; + if ((delta > 0) && (delta < 250)) + 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 LIBXML_ATTR_FORMAT(4,0) +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; + /* Use the special values to detect if it is part of a parsing + context */ + if ((ctxt->finishDtd == XML_CTXT_FINISH_DTD_0) || + (ctxt->finishDtd == XML_CTXT_FINISH_DTD_1)) { + long delta = (char *) ctxt - (char *) ctxt->userData; + if ((delta > 0) && (delta < 250)) + 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 LIBXML_ATTR_FORMAT(4,0) +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->warning; + data = ctxt->userData; + /* Use the special values to detect if it is part of a parsing + context */ + if ((ctxt->finishDtd == XML_CTXT_FINISH_DTD_0) || + (ctxt->finishDtd == XML_CTXT_FINISH_DTD_1)) { + long delta = (char *) ctxt - (char *) ctxt->userData; + if ((delta > 0) && (delta < 250)) + 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 (NULL); + ctxt->nodeNr--; + if (ctxt->nodeNr > 0) + ctxt->node = ctxt->nodeTab[ctxt->nodeNr - 1]; + else + ctxt->node = NULL; + ret = ctxt->nodeTab[ctxt->nodeNr]; + ctxt->nodeTab[ctxt->nodeNr] = NULL; + 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) + +#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: + ctxt->state = xmlAutomataNewEpsilon(ctxt->am, + ctxt->state, NULL); + xmlAutomataNewTransition(ctxt->am, + ctxt->state, ctxt->state, fullname, 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) { + if (cur->vstateTab != NULL) + xmlFree(cur->vstateTab); + if (cur->nodeTab != NULL) + xmlFree(cur->nodeTab); + xmlFree(cur); +} + +#endif /* LIBXML_VALID_ENABLED */ + +/** + * xmlNewDocElementContent: + * @doc: the document + * @name: the subelement name or NULL + * @type: the type of element content decl + * + * Allocate an element content structure for the document. + * + * Returns NULL if not, otherwise the new element content structure + */ +xmlElementContentPtr +xmlNewDocElementContent(xmlDocPtr doc, const xmlChar *name, + xmlElementContentType type) { + xmlElementContentPtr ret; + xmlDictPtr dict = NULL; + + if (doc != NULL) + dict = doc->dict; + + 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) { + int l; + const xmlChar *tmp; + + tmp = xmlSplitQName3(name, &l); + if (tmp == NULL) { + if (dict == NULL) + ret->name = xmlStrdup(name); + else + ret->name = xmlDictLookup(dict, name, -1); + } else { + if (dict == NULL) { + ret->prefix = xmlStrndup(name, l); + ret->name = xmlStrdup(tmp); + } else { + ret->prefix = xmlDictLookup(dict, name, l); + ret->name = xmlDictLookup(dict, tmp, -1); + } + } + } + return(ret); +} + +/** + * xmlNewElementContent: + * @name: the subelement name or NULL + * @type: the type of element content decl + * + * Allocate an element content structure. + * Deprecated in favor of xmlNewDocElementContent + * + * Returns NULL if not, otherwise the new element content structure + */ +xmlElementContentPtr +xmlNewElementContent(const xmlChar *name, xmlElementContentType type) { + return(xmlNewDocElementContent(NULL, name, type)); +} + +/** + * xmlCopyDocElementContent: + * @doc: the document owning the element declaration + * @cur: An element content pointer. + * + * Build a copy of an element content description. + * + * Returns the new xmlElementContentPtr or NULL in case of error. + */ +xmlElementContentPtr +xmlCopyDocElementContent(xmlDocPtr doc, xmlElementContentPtr cur) { + xmlElementContentPtr ret = NULL, prev = NULL, tmp; + xmlDictPtr dict = NULL; + + if (cur == NULL) return(NULL); + + if (doc != NULL) + dict = doc->dict; + + ret = (xmlElementContentPtr) xmlMalloc(sizeof(xmlElementContent)); + if (ret == NULL) { + xmlVErrMemory(NULL, "malloc failed"); + return(NULL); + } + memset(ret, 0, sizeof(xmlElementContent)); + ret->type = cur->type; + ret->ocur = cur->ocur; + if (cur->name != NULL) { + if (dict) + ret->name = xmlDictLookup(dict, cur->name, -1); + else + ret->name = xmlStrdup(cur->name); + } + + if (cur->prefix != NULL) { + if (dict) + ret->prefix = xmlDictLookup(dict, cur->prefix, -1); + else + ret->prefix = xmlStrdup(cur->prefix); + } + if (cur->c1 != NULL) + ret->c1 = xmlCopyDocElementContent(doc, cur->c1); + if (ret->c1 != NULL) + ret->c1->parent = ret; + if (cur->c2 != NULL) { + prev = ret; + cur = cur->c2; + while (cur != NULL) { + tmp = (xmlElementContentPtr) xmlMalloc(sizeof(xmlElementContent)); + if (tmp == NULL) { + xmlVErrMemory(NULL, "malloc failed"); + return(ret); + } + memset(tmp, 0, sizeof(xmlElementContent)); + tmp->type = cur->type; + tmp->ocur = cur->ocur; + prev->c2 = tmp; + if (cur->name != NULL) { + if (dict) + tmp->name = xmlDictLookup(dict, cur->name, -1); + else + tmp->name = xmlStrdup(cur->name); + } + + if (cur->prefix != NULL) { + if (dict) + tmp->prefix = xmlDictLookup(dict, cur->prefix, -1); + else + tmp->prefix = xmlStrdup(cur->prefix); + } + if (cur->c1 != NULL) + tmp->c1 = xmlCopyDocElementContent(doc,cur->c1); + if (tmp->c1 != NULL) + tmp->c1->parent = ret; + prev = tmp; + cur = cur->c2; + } + } + return(ret); +} + +/** + * xmlCopyElementContent: + * @cur: An element content pointer. + * + * Build a copy of an element content description. + * Deprecated, use xmlCopyDocElementContent instead + * + * Returns the new xmlElementContentPtr or NULL in case of error. + */ +xmlElementContentPtr +xmlCopyElementContent(xmlElementContentPtr cur) { + return(xmlCopyDocElementContent(NULL, cur)); +} + +/** + * xmlFreeDocElementContent: + * @doc: the document owning the element declaration + * @cur: the element content tree to free + * + * Free an element content structure. The whole subtree is removed. + */ +void +xmlFreeDocElementContent(xmlDocPtr doc, xmlElementContentPtr cur) { + xmlElementContentPtr next; + xmlDictPtr dict = NULL; + + if (doc != NULL) + dict = doc->dict; + + while (cur != NULL) { + next = cur->c2; + 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) xmlFreeDocElementContent(doc, cur->c1); + if (dict) { + if ((cur->name != NULL) && (!xmlDictOwns(dict, cur->name))) + xmlFree((xmlChar *) cur->name); + if ((cur->prefix != NULL) && (!xmlDictOwns(dict, cur->prefix))) + xmlFree((xmlChar *) cur->prefix); + } else { + if (cur->name != NULL) xmlFree((xmlChar *) cur->name); + if (cur->prefix != NULL) xmlFree((xmlChar *) cur->prefix); + } + xmlFree(cur); + cur = next; + } +} + +/** + * xmlFreeElementContent: + * @cur: the element content tree to free + * + * Free an element content structure. The whole subtree is removed. + * Deprecated, use xmlFreeDocElementContent instead + */ +void +xmlFreeElementContent(xmlElementContentPtr cur) { + xmlFreeDocElementContent(NULL, 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) || + ((content->c2->type == XML_ELEMENT_CONTENT_SEQ) && + (content->c2->ocur != XML_ELEMENT_CONTENT_ONCE))) + 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) || + ((content->c2->type == XML_ELEMENT_CONTENT_OR) && + (content->c2->ocur != XML_ELEMENT_CONTENT_ONCE))) + 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 + * @englob: 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 englob ATTRIBUTE_UNUSED) { +} +#endif /* LIBXML_OUTPUT_ENABLED */ + +/** + * xmlSnprintfElementContent: + * @buf: an output buffer + * @size: the buffer size + * @content: An element table + * @englob: 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 englob) { + int len; + + if (content == NULL) return; + len = strlen(buf); + if (size - len < 50) { + if ((size - len > 4) && (buf[len - 1] != '.')) + strcat(buf, " ..."); + return; + } + if (englob) 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 (englob) + 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 * + * * + ****************************************************************/ + +/** + * xmlFreeElement: + * @elem: An element + * + * Deallocate the memory used by an element definition + */ +static void +xmlFreeElement(xmlElementPtr elem) { + if (elem == NULL) return; + xmlUnlinkNode((xmlNodePtr) elem); + xmlFreeDocElementContent(elem->doc, 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) { + xmlDictPtr dict = NULL; + + if (dtd->doc != NULL) + dict = dtd->doc->dict; + table = xmlHashCreateDict(0, dict); + 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); + } + if (ns != NULL) { + xmlFree(ns); + ns = 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; + /* + * Avoid a stupid copy when called by the parser + * and flag it by setting a special parent value + * so the parser doesn't unallocate it. + */ + if ((ctxt != NULL) && + ((ctxt->finishDtd == XML_CTXT_FINISH_DTD_0) || + (ctxt->finishDtd == XML_CTXT_FINISH_DTD_1))) { + ret->content = content; + if (content != NULL) + content->parent = (xmlElementContentPtr) 1; + } else { + ret->content = xmlCopyDocElementContent(dtd->doc, 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) { + if ((buf == NULL) || (elem == NULL)) + return; + switch (elem->etype) { + case XML_ELEMENT_TYPE_EMPTY: + xmlBufferWriteChar(buf, "prefix != NULL) { + xmlBufferWriteCHAR(buf, elem->prefix); + xmlBufferWriteChar(buf, ":"); + } + xmlBufferWriteCHAR(buf, elem->name); + xmlBufferWriteChar(buf, " EMPTY>\n"); + break; + case XML_ELEMENT_TYPE_ANY: + xmlBufferWriteChar(buf, "prefix != NULL) { + xmlBufferWriteCHAR(buf, elem->prefix); + xmlBufferWriteChar(buf, ":"); + } + xmlBufferWriteCHAR(buf, elem->name); + xmlBufferWriteChar(buf, " ANY>\n"); + break; + case XML_ELEMENT_TYPE_MIXED: + xmlBufferWriteChar(buf, "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, "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) { + if ((buf == NULL) || (table == NULL)) + return; + 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 (ret == NULL) return(NULL); + + 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 ((buf == NULL) || (cur == NULL)) + return; + + xmlBufferWriteCHAR(buf, cur->name); + if (cur->next == NULL) + xmlBufferWriteChar(buf, ")"); + else { + xmlBufferWriteChar(buf, " | "); + xmlDumpEnumeration(buf, cur->next); + } +} +#endif /* LIBXML_OUTPUT_ENABLED */ + +#ifdef LIBXML_VALID_ENABLED +/** + * xmlScanIDAttributeDecl: + * @ctxt: the validation context + * @elem: the element name + * @err: whether to raise errors here + * + * 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, int err) { + 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) && (err)) + 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) { + xmlDictPtr dict; + + if (attr == NULL) return; + if (attr->doc != NULL) + dict = attr->doc->dict; + else + dict = NULL; + xmlUnlinkNode((xmlNodePtr) attr); + if (attr->tree != NULL) + xmlFreeEnumeration(attr->tree); + if (dict) { + if ((attr->elem != NULL) && (!xmlDictOwns(dict, attr->elem))) + xmlFree((xmlChar *) attr->elem); + if ((attr->name != NULL) && (!xmlDictOwns(dict, attr->name))) + xmlFree((xmlChar *) attr->name); + if ((attr->prefix != NULL) && (!xmlDictOwns(dict, attr->prefix))) + xmlFree((xmlChar *) attr->prefix); + if ((attr->defaultValue != NULL) && + (!xmlDictOwns(dict, attr->defaultValue))) + xmlFree((xmlChar *) attr->defaultValue); + } else { + 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; + xmlDictPtr dict = NULL; + + if (dtd == NULL) { + xmlFreeEnumeration(tree); + return(NULL); + } + if (name == NULL) { + xmlFreeEnumeration(tree); + return(NULL); + } + if (elem == NULL) { + xmlFreeEnumeration(tree); + return(NULL); + } + if (dtd->doc != NULL) + dict = dtd->doc->dict; + +#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) && + (!xmlValidateAttributeValueInternal(dtd->doc, type, defaultValue))) { + xmlErrValidNode(ctxt, (xmlNodePtr) dtd, XML_DTD_ATTRIBUTE_DEFAULT, + "Attribute %s of %s: invalid default value\n", + elem, name, defaultValue); + defaultValue = NULL; + if (ctxt != 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) { + xmlFreeEnumeration(tree); + return(NULL); + } + } + + /* + * Create the Attribute table if needed. + */ + table = (xmlAttributeTablePtr) dtd->attributes; + if (table == NULL) { + table = xmlHashCreateDict(0, dict); + dtd->attributes = (void *) table; + } + if (table == NULL) { + xmlVErrMemory(ctxt, + "xmlAddAttributeDecl: Table creation failed!\n"); + xmlFreeEnumeration(tree); + return(NULL); + } + + + ret = (xmlAttributePtr) xmlMalloc(sizeof(xmlAttribute)); + if (ret == NULL) { + xmlVErrMemory(ctxt, "malloc failed"); + xmlFreeEnumeration(tree); + return(NULL); + } + memset(ret, 0, sizeof(xmlAttribute)); + ret->type = XML_ATTRIBUTE_DECL; + + /* + * fill the structure. + */ + ret->atype = type; + /* + * doc must be set before possible error causes call + * to xmlFreeAttribute (because it's used to check on + * dict use) + */ + ret->doc = dtd->doc; + if (dict) { + ret->name = xmlDictLookup(dict, name, -1); + ret->prefix = xmlDictLookup(dict, ns, -1); + ret->elem = xmlDictLookup(dict, elem, -1); + } else { + ret->name = xmlStrdup(name); + ret->prefix = xmlStrdup(ns); + ret->elem = xmlStrdup(elem); + } + ret->def = def; + ret->tree = tree; + if (defaultValue != NULL) { + if (dict) + ret->defaultValue = xmlDictLookup(dict, defaultValue, -1); + else + ret->defaultValue = xmlStrdup(defaultValue); + } + + /* + * Validity Check: + * Search the DTD for previous declarations of the ATTLIST + */ + if (xmlHashAddEntry3(table, ret->name, ret->prefix, ret->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, 1) != 0)) { + xmlErrValidNode(ctxt, (xmlNodePtr) dtd, XML_DTD_MULTIPLE_ID, + "Element %s has too may ID attributes defined : %s\n", + elem, name, NULL); + if (ctxt != 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; + 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) { + if ((buf == NULL) || (attr == NULL)) + return; + xmlBufferWriteChar(buf, "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) { + if ((buf == NULL) || (table == NULL)) + return; + xmlHashScan(table, (xmlHashScanner) xmlDumpAttributeDeclScan, buf); +} +#endif /* LIBXML_OUTPUT_ENABLED */ + +/************************************************************************ + * * + * NOTATIONs * + * * + ************************************************************************/ +/** + * 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) { + xmlDictPtr dict = NULL; + if (dtd->doc != NULL) + dict = dtd->doc->dict; + + dtd->notations = table = xmlHashCreateDict(0, dict); + } + 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) { + if ((buf == NULL) || (nota == NULL)) + return; + xmlBufferWriteChar(buf, "name); + if (nota->PublicID != NULL) { + xmlBufferWriteChar(buf, " PUBLIC "); + xmlBufferWriteQuotedString(buf, nota->PublicID); + if (nota->SystemID != NULL) { + xmlBufferWriteChar(buf, " "); + xmlBufferWriteQuotedString(buf, nota->SystemID); + } + } else { + xmlBufferWriteChar(buf, " SYSTEM "); + xmlBufferWriteQuotedString(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) { + if ((buf == NULL) || (table == NULL)) + return; + 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" dictionary in the + * current scope + */ +#define DICT_FREE(str) \ + if ((str) && ((!dict) || \ + (xmlDictOwns(dict, (const xmlChar *)(str)) == 0))) \ + xmlFree((char *)(str)); + +/** + * 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 = xmlHashCreateDict(0, doc->dict); + } + 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) { + 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 ((attr == NULL) || (attr->name == NULL)) return(0); + if ((attr->ns != NULL) && (attr->ns->prefix != NULL) && + (!strcmp((char *) attr->name, "id")) && + (!strcmp((char *) attr->ns->prefix, "xml"))) + return(1); + if (doc == NULL) return(0); + if ((doc->intSubset == NULL) && (doc->extSubset == NULL) && + (doc->type != XML_HTML_DOCUMENT_NODE)) { + 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 "a"))))) + return(1); + return(0); + } else if (elem == NULL) { + return(0); + } else { + xmlAttributePtr attrDecl = NULL; + + xmlChar felem[50], fattr[50]; + xmlChar *fullelemname, *fullattrname; + + fullelemname = (elem->ns != NULL && elem->ns->prefix != NULL) ? + xmlBuildQName(elem->name, elem->ns->prefix, felem, 50) : + (xmlChar *)elem->name; + + fullattrname = (attr->ns != NULL && attr->ns->prefix != NULL) ? + xmlBuildQName(attr->name, attr->ns->prefix, fattr, 50) : + (xmlChar *)attr->name; + + if (fullelemname != NULL && fullattrname != NULL) { + attrDecl = xmlGetDtdAttrDesc(doc->intSubset, fullelemname, + fullattrname); + if ((attrDecl == NULL) && (doc->extSubset != NULL)) + attrDecl = xmlGetDtdAttrDesc(doc->extSubset, fullelemname, + fullattrname); + } + + if ((fullattrname != fattr) && (fullattrname != attr->name)) + xmlFree(fullattrname); + if ((fullelemname != felem) && (fullelemname != elem->name)) + xmlFree(fullelemname); + + if ((attrDecl != NULL) && (attrDecl->atype == XML_ATTRIBUTE_ID)) + return(1); + } + 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); + + 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); + } + + xmlHashRemoveEntry(table, ID, (xmlHashDeallocator) xmlFreeID); + xmlFree(ID); + attr->atype = 0; + 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; + +/** + * 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 = xmlHashCreateDict(0, doc->dict); + } + 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); + goto failed; + } + if (xmlHashAddEntry(table, value, ref_list) < 0) { + xmlListDelete(ref_list); + xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR, + "xmlAddRef: Reference list insertion failed!\n", + NULL); + goto failed; + } + } + if (xmlListAppend(ref_list, ret) != 0) { + xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR, + "xmlAddRef: Reference list insertion failed!\n", + NULL); + goto failed; + } + return(ret); +failed: + if (ret != NULL) { + if (ret->value != NULL) + xmlFree((char *)ret->value); + if (ret->name != NULL) + xmlFree((char *)ret->name); + xmlFree(ret); + } + return(NULL); +} + +/** + * 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 (attr == NULL) + return(0); + if (doc == NULL) { + doc = attr->doc; + if (doc == NULL) return(0); + } + + if ((doc->intSubset == NULL) && (doc->extSubset == NULL)) { + return(0); + } else if (doc->type == XML_HTML_DOCUMENT_NODE) { + /* TODO @@@ */ + return(0); + } else { + xmlAttributePtr attrDecl; + + if (elem == NULL) return(0); + 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); + + 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) { + xmlDictPtr dict = NULL; + + if (dtd->doc != NULL) + dict = dtd->doc->dict; + + if (!create) + return(NULL); + /* + * Create the Element table if needed. + */ + table = (xmlElementTablePtr) dtd->elements; + if (table == NULL) { + table = xmlHashCreateDict(0, dict); + 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) || + (notationName == 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 for example + */ + case XML_ELEMENT_TYPE_ANY: + case XML_ELEMENT_TYPE_MIXED: + return(1); + } + return(1); +} + +#ifdef LIBXML_VALID_ENABLED + +static int +xmlIsDocNameStartChar(xmlDocPtr doc, int c) { + if ((doc == NULL) || (doc->properties & XML_DOC_OLD10) == 0) { + /* + * Use the new checks of production [4] [4a] amd [5] of the + * Update 5 of XML-1.0 + */ + if (((c >= 'a') && (c <= 'z')) || + ((c >= 'A') && (c <= 'Z')) || + (c == '_') || (c == ':') || + ((c >= 0xC0) && (c <= 0xD6)) || + ((c >= 0xD8) && (c <= 0xF6)) || + ((c >= 0xF8) && (c <= 0x2FF)) || + ((c >= 0x370) && (c <= 0x37D)) || + ((c >= 0x37F) && (c <= 0x1FFF)) || + ((c >= 0x200C) && (c <= 0x200D)) || + ((c >= 0x2070) && (c <= 0x218F)) || + ((c >= 0x2C00) && (c <= 0x2FEF)) || + ((c >= 0x3001) && (c <= 0xD7FF)) || + ((c >= 0xF900) && (c <= 0xFDCF)) || + ((c >= 0xFDF0) && (c <= 0xFFFD)) || + ((c >= 0x10000) && (c <= 0xEFFFF))) + return(1); + } else { + if (IS_LETTER(c) || (c == '_') || (c == ':')) + return(1); + } + return(0); +} + +static int +xmlIsDocNameChar(xmlDocPtr doc, int c) { + if ((doc == NULL) || (doc->properties & XML_DOC_OLD10) == 0) { + /* + * Use the new checks of production [4] [4a] amd [5] of the + * Update 5 of XML-1.0 + */ + if (((c >= 'a') && (c <= 'z')) || + ((c >= 'A') && (c <= 'Z')) || + ((c >= '0') && (c <= '9')) || /* !start */ + (c == '_') || (c == ':') || + (c == '-') || (c == '.') || (c == 0xB7) || /* !start */ + ((c >= 0xC0) && (c <= 0xD6)) || + ((c >= 0xD8) && (c <= 0xF6)) || + ((c >= 0xF8) && (c <= 0x2FF)) || + ((c >= 0x300) && (c <= 0x36F)) || /* !start */ + ((c >= 0x370) && (c <= 0x37D)) || + ((c >= 0x37F) && (c <= 0x1FFF)) || + ((c >= 0x200C) && (c <= 0x200D)) || + ((c >= 0x203F) && (c <= 0x2040)) || /* !start */ + ((c >= 0x2070) && (c <= 0x218F)) || + ((c >= 0x2C00) && (c <= 0x2FEF)) || + ((c >= 0x3001) && (c <= 0xD7FF)) || + ((c >= 0xF900) && (c <= 0xFDCF)) || + ((c >= 0xFDF0) && (c <= 0xFFFD)) || + ((c >= 0x10000) && (c <= 0xEFFFF))) + return(1); + } else { + if ((IS_LETTER(c)) || (IS_DIGIT(c)) || + (c == '.') || (c == '-') || + (c == '_') || (c == ':') || + (IS_COMBINING(c)) || + (IS_EXTENDER(c))) + return(1); + } + return(0); +} + +/** + * xmlValidateNameValue: + * @doc: pointer to the document or NULL + * @value: an Name value + * + * Validate that the given value match Name production + * + * returns 1 if valid or 0 otherwise + */ + +static int +xmlValidateNameValueInternal(xmlDocPtr doc, const xmlChar *value) { + const xmlChar *cur; + int val, len; + + if (value == NULL) return(0); + cur = value; + val = xmlStringCurrentChar(NULL, cur, &len); + cur += len; + if (!xmlIsDocNameStartChar(doc, val)) + return(0); + + val = xmlStringCurrentChar(NULL, cur, &len); + cur += len; + while (xmlIsDocNameChar(doc, val)) { + val = xmlStringCurrentChar(NULL, cur, &len); + cur += len; + } + + if (val != 0) return(0); + + return(1); +} + +/** + * 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) { + return(xmlValidateNameValueInternal(NULL, value)); +} + +/** + * xmlValidateNamesValueInternal: + * @doc: pointer to the document or NULL + * @value: an Names value + * + * Validate that the given value match Names production + * + * returns 1 if valid or 0 otherwise + */ + +static int +xmlValidateNamesValueInternal(xmlDocPtr doc, const xmlChar *value) { + const xmlChar *cur; + int val, len; + + if (value == NULL) return(0); + cur = value; + val = xmlStringCurrentChar(NULL, cur, &len); + cur += len; + + if (!xmlIsDocNameStartChar(doc, val)) + return(0); + + val = xmlStringCurrentChar(NULL, cur, &len); + cur += len; + while (xmlIsDocNameChar(doc, val)) { + val = xmlStringCurrentChar(NULL, cur, &len); + cur += len; + } + + /* Should not test IS_BLANK(val) here -- see erratum E20*/ + while (val == 0x20) { + while (val == 0x20) { + val = xmlStringCurrentChar(NULL, cur, &len); + cur += len; + } + + if (!xmlIsDocNameStartChar(doc, val)) + return(0); + + val = xmlStringCurrentChar(NULL, cur, &len); + cur += len; + + while (xmlIsDocNameChar(doc, 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) { + return(xmlValidateNamesValueInternal(NULL, value)); +} + +/** + * xmlValidateNmtokenValueInternal: + * @doc: pointer to the document or NULL + * @value: an Nmtoken value + * + * Validate that the given value match Nmtoken production + * + * [ VC: Name Token ] + * + * returns 1 if valid or 0 otherwise + */ + +static int +xmlValidateNmtokenValueInternal(xmlDocPtr doc, const xmlChar *value) { + const xmlChar *cur; + int val, len; + + if (value == NULL) return(0); + cur = value; + val = xmlStringCurrentChar(NULL, cur, &len); + cur += len; + + if (!xmlIsDocNameChar(doc, val)) + return(0); + + val = xmlStringCurrentChar(NULL, cur, &len); + cur += len; + while (xmlIsDocNameChar(doc, 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) { + return(xmlValidateNmtokenValueInternal(NULL, value)); +} + +/** + * xmlValidateNmtokensValueInternal: + * @doc: pointer to the document or NULL + * @value: an Nmtokens value + * + * Validate that the given value match Nmtokens production + * + * [ VC: Name Token ] + * + * returns 1 if valid or 0 otherwise + */ + +static int +xmlValidateNmtokensValueInternal(xmlDocPtr doc, 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 (!xmlIsDocNameChar(doc, val)) + return(0); + + while (xmlIsDocNameChar(doc, val)) { + val = xmlStringCurrentChar(NULL, cur, &len); + cur += len; + } + + /* Should not test IS_BLANK(val) here -- see erratum E20*/ + while (val == 0x20) { + while (val == 0x20) { + val = xmlStringCurrentChar(NULL, cur, &len); + cur += len; + } + if (val == 0) return(1); + + if (!xmlIsDocNameChar(doc, val)) + return(0); + + val = xmlStringCurrentChar(NULL, cur, &len); + cur += len; + + while (xmlIsDocNameChar(doc, 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) { + return(xmlValidateNmtokensValueInternal(NULL, value)); +} + +/** + * 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); +} + +/** + * xmlValidateAttributeValueInternal: + * @doc: the document + * @type: an attribute type + * @value: an attribute value + * + * Validate that the given attribute value match the proper production + * + * returns 1 if valid or 0 otherwise + */ + +static int +xmlValidateAttributeValueInternal(xmlDocPtr doc, xmlAttributeType type, + const xmlChar *value) { + switch (type) { + case XML_ATTRIBUTE_ENTITIES: + case XML_ATTRIBUTE_IDREFS: + return(xmlValidateNamesValueInternal(doc, value)); + case XML_ATTRIBUTE_ENTITY: + case XML_ATTRIBUTE_IDREF: + case XML_ATTRIBUTE_ID: + case XML_ATTRIBUTE_NOTATION: + return(xmlValidateNameValueInternal(doc, value)); + case XML_ATTRIBUTE_NMTOKENS: + case XML_ATTRIBUTE_ENUMERATION: + return(xmlValidateNmtokensValueInternal(doc, value)); + case XML_ATTRIBUTE_NMTOKEN: + return(xmlValidateNmtokenValueInternal(doc, value)); + case XML_ATTRIBUTE_CDATA: + break; + } + return(1); +} + +/** + * 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) { + return(xmlValidateAttributeValueInternal(NULL, type, value)); +} + +/** + * 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(NULL); + 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(NULL); + 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 = xmlValidateAttributeValueInternal(doc, 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, 0); + } else { + xmlAttributeTablePtr table; + + /* + * The attribute may be declared in the internal subset and the + * element in the external subset. + */ + nbId = 0; + if (doc->intSubset != NULL) { + 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, 0); + } + 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->c1->prefix))) { + if (cur->c1->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->c1->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->c1->prefix))) { + if (cur->c1->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->c1->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 = xmlValidateAttributeValueInternal(doc, 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 = xmlValidateAttributeValueInternal(doc, 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) || (parent == NULL) || (ctxt == 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) { + 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) || + (elem->type != XML_ELEMENT_NODE)) + 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 ((ctxt == NULL) || (doc == NULL) || + (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; + + if (ctxt == NULL) + return(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 length 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 (ctxt == NULL) + return(0); + 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; + + if (ctxt == NULL) + return(0); +/* 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->ns != 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) || + (elem->type == XML_NAMESPACE_DECL)) + 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); + if (elem->type == XML_ELEMENT_NODE) { + attr = elem->properties; + while (attr != NULL) { + value = xmlNodeListGetString(doc, attr->children, 0); + ret &= xmlValidateOneAttribute(ctxt, doc, elem, attr, value); + if (value != NULL) + xmlFree((char *)value); + attr= attr->next; + } + ns = elem->nsDef; + while (ns != NULL) { + if (elem->ns == NULL) + ret &= xmlValidateOneNamespace(ctxt, doc, elem, NULL, + ns, ns->href); + else + ret &= xmlValidateOneNamespace(ctxt, doc, elem, + elem->ns->prefix, ns, ns->href); + ns = ns->next; + } + } + child = elem->children; + while (child != NULL) { + 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; + unsigned int save; + + if (ctxt == NULL) + return(0); + if (doc == NULL) { + xmlErrValid(ctxt, XML_DTD_NO_DOC, + "xmlValidateDocumentFinal: doc == NULL\n", NULL); + return(0); + } + + /* trick to get correct line id report */ + save = ctxt->finishDtd; + ctxt->finishDtd = 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); + + ctxt->finishDtd = save; + 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. + * Note the the internal subset (if present) is de-coupled + * (i.e. not used), which could give problems if ID or IDREF + * is present. + * + * returns 1 if valid or 0 otherwise + */ + +int +xmlValidateDtd(xmlValidCtxtPtr ctxt, xmlDocPtr doc, xmlDtdPtr dtd) { + int ret; + xmlDtdPtr oldExt, oldInt; + xmlNodePtr root; + + if (dtd == NULL) return(0); + if (doc == NULL) return(0); + oldExt = doc->extSubset; + oldInt = doc->intSubset; + doc->extSubset = dtd; + doc->intSubset = NULL; + ret = xmlValidateRoot(ctxt, doc); + if (ret == 0) { + doc->extSubset = oldExt; + doc->intSubset = oldInt; + 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; + doc->intSubset = oldInt; + 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) || (ctxt == 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 == NULL) + return(0); + 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)) { + xmlChar *sysID; + if (doc->intSubset->SystemID != NULL) { + sysID = xmlBuildURI(doc->intSubset->SystemID, + doc->URL); + if (sysID == NULL) { + xmlErrValid(ctxt, XML_DTD_LOAD_ERROR, + "Could not build URI for external subset \"%s\"\n", + (const char *) doc->intSubset->SystemID); + return 0; + } + } else + sysID = NULL; + doc->extSubset = xmlParseDTD(doc->intSubset->ExternalID, + (const xmlChar *)sysID); + if (sysID != NULL) + xmlFree(sysID); + 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 + * @names: 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 **names, + int *len, int max) { + int i; + + if ((ctree == NULL) || (names == 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", names[i])) return(*len); + names[(*len)++] = BAD_CAST "#PCDATA"; + break; + case XML_ELEMENT_CONTENT_ELEMENT: + for (i = 0; i < *len;i++) + if (xmlStrEqual(ctree->name, names[i])) return(*len); + names[(*len)++] = ctree->name; + break; + case XML_ELEMENT_CONTENT_SEQ: + xmlValidGetPotentialChildren(ctree->c1, names, len, max); + xmlValidGetPotentialChildren(ctree->c2, names, len, max); + break; + case XML_ELEMENT_CONTENT_OR: + xmlValidGetPotentialChildren(ctree->c1, names, len, max); + xmlValidGetPotentialChildren(ctree->c2, names, len, max); + break; + } + + return(*len); +} + +/* + * Dummy function to suppress messages while we try out valid elements + */ +static void XMLCDECL xmlNoValidityErr(void *ctx ATTRIBUTE_UNUSED, + const char *msg ATTRIBUTE_UNUSED, ...) { + return; +} + +/** + * xmlValidGetValidElements: + * @prev: an element to insert after + * @next: an element to insert next + * @names: 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 **names, + int max) { + xmlValidCtxt vctxt; + int nb_valid_elements = 0; + const xmlChar *elements[256]={0}; + int nb_elements = 0, i; + const xmlChar *name; + + xmlNode *ref_node; + xmlNode *parent; + xmlNode *test_node; + + xmlNode *prev_next; + xmlNode *next_prev; + xmlNode *parent_childs; + xmlNode *parent_last; + + xmlElement *element_desc; + + if (prev == NULL && next == NULL) + return(-1); + + if (names == NULL) return(-1); + if (max <= 0) return(-1); + + memset(&vctxt, 0, sizeof (xmlValidCtxt)); + vctxt.error = xmlNoValidityErr; /* this suppresses err/warn output */ + + 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 = xmlNewDocNode (ref_node->doc, NULL, BAD_CAST "", NULL); + if (test_node == NULL) + return(-1); + + test_node->parent = parent; + test_node->prev = prev; + test_node->next = next; + name = test_node->name; + + if (prev) prev->next = test_node; + else parent->children = test_node; + + if (next) next->prev = test_node; + else parent->last = test_node; + + /* + * 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], names[j])) break; + names[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 */ + +#define bottom_valid +#include "elfgcchack.h" diff --git a/vms/build_libxml.com b/vms/build_libxml.com new file mode 100755 index 0000000..3a6fcc0 --- /dev/null +++ b/vms/build_libxml.com @@ -0,0 +1,273 @@ +$! 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 : 19 March 2008 Tycho Hilhorst +$! - added module schematron.c (prevent xmllint errors) +$! - added /DEF and /INCLUDE options to cc_opts to tell +$! config.h is available, and where to find it +$! : 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 = "/nowarn/DEF=HAVE_CONFIG_H/NAMES=(as_is,SHORTENED)/FLOAT=IEEE/IEEE_MODE=DENORM_RESULTS/INCLUDE=xml_srcdir" +$! +$ if p1.eqs."DEBUG" .or. p2.eqs."DEBUG" +$ then +$ 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 = "parser.c SAX.c entities.c encoding.c error.c parserInternals.c" +$ sources = sources + " tree.c hash.c list.c xmlIO.c xmlmemory.c uri.c" +$ sources = sources + " valid.c xlink.c HTMLparser.c HTMLtree.c debugXML.c xpath.c" +$ sources = sources + " xpointer.c xinclude.c nanohttp.c nanoftp.c DOCBparser.c" +$ sources = sources + " catalog.c globals.c threads.c c14n.c xmlstring.c" +$ sources = sources + " xmlregexp.c xmlschemas.c xmlschemastypes.c xmlunicode.c" +$ sources = sources + " triostr.c trio.c xmlreader.c relaxng.c dict.c SAX2.c" +$ sources = sources + " xmlwriter.c legacy.c chvalid.c pattern.c xmlsave.c" +$ sources = sources + " schematron.c xmlmodule.c buf.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 +$! copy/log xmlversion.h [-.include.libxml] +$! +$ 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" +$ if f$search( "sys$library:iconv.olb" ) .eqs. "" +$ then +$ link_command'opts' 'object_file',- + XML_LIBDIR:libxml.olb/library +$ else +$ link_command'opts' 'object_file',- + XML_LIBDIR:libxml.olb/library,sys$library:iconv/lib +$ endif +$ endif +$! +$EXIT_BUILD: +$ exit $status +$! +$endsubroutine diff --git a/vms/config.vms b/vms/config.vms new file mode 100755 index 0000000..d1cd7f3 --- /dev/null +++ b/vms/config.vms @@ -0,0 +1,216 @@ +/* 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 ICONV_CONST + +/* 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 header file. */ +#undef HAVE_ARPA_INET_H + +/* Define if you have the header file. */ +#define HAVE_CTYPE_H 1 + +/* Define if you have the header file. */ +#define HAVE_DIRENT_H 1 + +/* Define if you have the header file. */ +#define HAVE_ERRNO_H 1 + +/* Define if you have the header file. */ +#define HAVE_FCNTL_H 1 + +/* Define if you have the header file. */ +#define HAVE_FLOAT_H 1 + +/* Define if you have the header file. */ +#define HAVE_FP_CLASS_H 1 + +/* Define if you have the header file. */ +#undef HAVE_IEEEFP_H + +/* Define if you have the header file. */ +#undef HAVE_MALLOC_H + +/* Define if you have the header file. */ +#define HAVE_MATH_H 1 + +/* Define if you have the header file. */ +#undef HAVE_NAN_H + +/* Define if you have the header file. */ +#undef HAVE_NDIR_H + +/* Define if you have the header file. */ +#define HAVE_NETDB_H 1 + +/* Define if you have the header file. */ +#undef HAVE_NETINET_IN_H + +/* Define if you have the header file. */ +#define HAVE_STDARG_H 1 + +/* Define if you have the 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 header file. */ +#define HAVE_STRINGS_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRING_H 1 + +/* Define to 1 if you have the `strndup' function. */ +#undef HAVE_STRNDUP + +/* Define if you have the header file. */ +#undef HAVE_SYS_DIR_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_MMAN_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_NDIR_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_SELECT_H + +/* Define if you have the header file. */ +#define HAVE_SYS_SOCKET_H 1 + +/* Define if you have the header file. */ +#define HAVE_SYS_STAT_H 1 + +/* Define if you have the header file. */ +#undef HAVE_SYS_TIME_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define if you have the header file. */ +#define HAVE_TIME_H 1 + +/* Define if you have the header file. */ +#define HAVE_UNISTD_H 1 + +/* Define if you have the header file. */ +#undef HAVE_ZLIB_H + +/* 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 + +#include + +#define HAVE_DLOPEN 1 +#define HAVE_DLFCN_H 1 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 +< #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 + etc. To correct this use the command + + $ set file /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 + + 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/Makefile.bcb b/win32/Makefile.bcb new file mode 100644 index 0000000..7129c61 --- /dev/null +++ b/win32/Makefile.bcb @@ -0,0 +1,355 @@ +# 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 +# based on the MSVC version of +# March 2002, Igor Zlatkovic +# + +# 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" -DNOLIBTOOL +!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 -DNOLIBTOOL -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 +!if "$(WITH_LZMA)" == "1" +CFLAGS = $(CFLAGS) -DHAVE_LZMA_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;$(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 ws2_32.lib +!endif +!if "$(WITH_ICONV)" == "1" +LIBS = $(LIBS) iconvomf.lib +!endif +!if "$(WITH_ZLIB)" == "1" +LIBS = $(LIBS) zlibomf.lib +!endif +!if "$(WITH_LZMA)" == "1" +LIBS = $(LIBS) liblzma.lib +!endif +!if "$(WITH_THREADS)" == "posix" +LIBS = $(LIBS) pthreadVC.lib +!endif +!if "$(WITH_MODULES)" == "1" +LIBS = $(LIBS) kernel32.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)\buf.obj\ + $(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)\schematron.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)\xmlmodule.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)\buf.obj\ + $(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)\schematron.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)\xmlmodule.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)\testModule.exe\ + $(BINDIR)\testSAX.exe\ + $(BINDIR)\testSchemas.exe\ + $(BINDIR)\testURI.exe\ + $(BINDIR)\testXPath.exe\ + $(BINDIR)\runtest.exe\ + $(BINDIR)\runsuite.exe\ + $(BINDIR)\testapi.exe\ + $(BINDIR)\testlimits.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-libs : all + if not exist "$(INCPREFIX)\libxml2" mkdir "$(INCPREFIX)\libxml2" + if not exist "$(INCPREFIX)\libxml2\libxml" mkdir "$(INCPREFIX)\libxml2\libxml" + if not exist "$(BINPREFIX)" mkdir "$(BINPREFIX)" + if not exist "$(LIBPREFIX)" mkdir "$(LIBPREFIX)" + copy $(XML_SRCDIR)\include\libxml\*.h "$(INCPREFIX)\libxml2\libxml" + copy $(BINDIR)\$(XML_SO) "$(SOPREFIX)" + copy $(BINDIR)\$(XML_A) "$(LIBPREFIX)" + copy $(BINDIR)\$(XML_IMP) "$(LIBPREFIX)" + copy $(BINDIR)\*.exe "$(BINPREFIX)" + +install : install-libs + copy $(BINDIR)\*.exe "$(BINPREFIX)" + +install-dist : install-libs + copy $(BINDIR)\xml*.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) /nologo PREFIX=$(BDPREFIX) SOPREFIX=$(BDPREFIX)\bin install-dist + 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..1889376 --- /dev/null +++ b/win32/Makefile.mingw @@ -0,0 +1,354 @@ +# 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 + +# 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 -DNOLIBTOOL +ifeq ($(WITH_THREADS),1) +CPPFLAGS += -D_REENTRANT +endif + +# The compiler and its options. +CC = gcc.exe +CFLAGS += -DWIN32 -D_WINDOWS -D_MBCS -DNOLIBTOOL +CFLAGS += -I$(XML_SRCDIR) -I$(XML_SRCDIR)/include -I$(INCPREFIX) $(INCLUDE) +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 +ifeq ($(WITH_LZMA),1) +CFLAGS += -DHAVE_LZMA_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 -lws2_32 +endif +ifeq ($(WITH_HTTP),1) +CFLAGS += -D_WINSOCKAPI_ +LIBS += -lwsock32 -lws2_32 +endif +ifeq ($(WITH_ICONV),1) +LIBS += -liconv +endif +ifeq ($(WITH_ZLIB),1) +# Could be named differently +# LIBS += -lzdll +LIBS += -lz +endif +ifeq ($(WITH_LZMA),1) +LIBS += -llzma +endif +ifeq ($(WITH_THREADS),posix) +LIBS += -lpthreadGC +endif +ifeq ($(WITH_MODULES),1) +LIBS += -lkernel32 +endif + +LIBS += $(LIB) + +# 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)/buf.o\ + $(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)/schematron.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)/xmlmodule.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)/buf.o\ + $(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)/schematron.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)/xmlmodule.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)/testModule.exe\ + $(BINDIR)/testRelax.exe\ + $(BINDIR)/testSAX.exe\ + $(BINDIR)/testSchemas.exe\ + $(BINDIR)/testURI.exe\ + $(BINDIR)/testXPath.exe\ + $(BINDIR)/runtest.exe\ + $(BINDIR)/runsuite.exe\ + $(BINDIR)/testapi.exe\ + $(BINDIR)/testlimits.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-libs : all + cmd.exe /C "if not exist $(INCPREFIX)\libxml2 mkdir $(INCPREFIX)\libxml2" + cmd.exe /C "if not exist $(INCPREFIX)\libxml2\libxml mkdir $(INCPREFIX)\libxml2\libxml" + cmd.exe /C "if not exist $(BINPREFIX) mkdir $(BINPREFIX)" + cmd.exe /C "if not exist $(LIBPREFIX) mkdir $(LIBPREFIX)" + cmd.exe /C "copy $(XML_SRCDIR)\include\libxml\*.h $(INCPREFIX)\libxml2\libxml" + cmd.exe /C "copy $(BINDIR)\$(XML_SO) $(SOPREFIX)" + cmd.exe /C "copy $(BINDIR)\$(XML_A) $(LIBPREFIX)" + cmd.exe /C "copy $(BINDIR)\$(XML_IMP) $(LIBPREFIX)" + cmd.exe /C "copy $(BINDIR)\xml*.exe $(BINPREFIX)" + +install : install-libs + cmd.exe /C "copy $(BINDIR)\*.exe $(BINPREFIX)" + +install-dist : install-libs + cmd.exe /C "copy $(BINDIR)\xml*.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) SOPREFIX=$(BDPREFIX)/bin install-dist + 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)/$( + +# 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 +XML_A_DLL = $(XML_BASENAME)_a_dll.lib + +# Place where we let the compiler put its output. +BINDIR = bin.msvc +XML_INTDIR = int.msvc +XML_INTDIR_A = int.a.msvc +XML_INTDIR_A_DLL = int.a.dll.msvc +UTILS_INTDIR = int.utils.msvc + +# The preprocessor and its options. +CPP = cl.exe /EP +CPPFLAGS = /nologo /I$(XML_SRCDIR)\include /D "NOLIBTOOL" +!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" /D "NOLIBTOOL" /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 +!if "$(WITH_LZMA)" == "1" +CFLAGS = $(CFLAGS) /D "HAVE_LZMA_H" +!endif +CFLAGS = $(CFLAGS) /D_CRT_SECURE_NO_DEPRECATE /D_CRT_NONSTDC_NO_DEPRECATE + +# 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 ws2_32.lib +!endif +!if "$(WITH_ICONV)" == "1" +LIBS = $(LIBS) iconv.lib +!endif +!if "$(WITH_ICU)" == "1" +LIBS = $(LIBS) icu.lib +!endif +!if "$(WITH_ZLIB)" == "1" +# could be named differently zdll or zlib +# LIBS = $(LIBS) zdll.lib +LIBS = $(LIBS) zlib.lib +!endif +!if "$(WITH_LZMA)" == "1" +LIBS = $(LIBS) liblzma.lib +!endif +!if "$(WITH_THREADS)" == "posix" +LIBS = $(LIBS) pthreadVC.lib +!endif +!if "$(WITH_MODULES)" == "1" +LIBS = $(LIBS) kernel32.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 +# commented out as this break VC10 c.f. 634846 +# LDFLAGS = $(LDFLAGS) /OPT:NOWIN98 +LDFLAGS = $(LDFLAGS) +!endif + +# Libxml object files. +XML_OBJS = $(XML_INTDIR)\buf.obj\ + $(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)\schematron.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)\xmlmodule.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)\buf.obj\ + $(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)\schematron.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)\xmlmodule.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 + +# Static libxml object files. +XML_OBJS_A_DLL = $(XML_INTDIR_A_DLL)\buf.obj\ + $(XML_INTDIR_A_DLL)\c14n.obj\ + $(XML_INTDIR_A_DLL)\catalog.obj\ + $(XML_INTDIR_A_DLL)\chvalid.obj\ + $(XML_INTDIR_A_DLL)\debugXML.obj\ + $(XML_INTDIR_A_DLL)\dict.obj\ + $(XML_INTDIR_A_DLL)\DOCBparser.obj\ + $(XML_INTDIR_A_DLL)\encoding.obj\ + $(XML_INTDIR_A_DLL)\entities.obj\ + $(XML_INTDIR_A_DLL)\error.obj\ + $(XML_INTDIR_A_DLL)\globals.obj\ + $(XML_INTDIR_A_DLL)\hash.obj\ + $(XML_INTDIR_A_DLL)\HTMLparser.obj\ + $(XML_INTDIR_A_DLL)\HTMLtree.obj\ + $(XML_INTDIR_A_DLL)\legacy.obj\ + $(XML_INTDIR_A_DLL)\list.obj\ + $(XML_INTDIR_A_DLL)\nanoftp.obj\ + $(XML_INTDIR_A_DLL)\nanohttp.obj\ + $(XML_INTDIR_A_DLL)\parser.obj\ + $(XML_INTDIR_A_DLL)\parserInternals.obj\ + $(XML_INTDIR_A_DLL)\pattern.obj\ + $(XML_INTDIR_A_DLL)\relaxng.obj\ + $(XML_INTDIR_A_DLL)\SAX2.obj\ + $(XML_INTDIR_A_DLL)\SAX.obj\ + $(XML_INTDIR_A_DLL)\schematron.obj\ + $(XML_INTDIR_A_DLL)\threads.obj\ + $(XML_INTDIR_A_DLL)\tree.obj\ + $(XML_INTDIR_A_DLL)\uri.obj\ + $(XML_INTDIR_A_DLL)\valid.obj\ + $(XML_INTDIR_A_DLL)\xinclude.obj\ + $(XML_INTDIR_A_DLL)\xlink.obj\ + $(XML_INTDIR_A_DLL)\xmlIO.obj\ + $(XML_INTDIR_A_DLL)\xmlmemory.obj\ + $(XML_INTDIR_A_DLL)\xmlreader.obj\ + $(XML_INTDIR_A_DLL)\xmlregexp.obj\ + $(XML_INTDIR_A_DLL)\xmlmodule.obj\ + $(XML_INTDIR_A_DLL)\xmlsave.obj\ + $(XML_INTDIR_A_DLL)\xmlschemas.obj\ + $(XML_INTDIR_A_DLL)\xmlschemastypes.obj\ + $(XML_INTDIR_A_DLL)\xmlunicode.obj\ + $(XML_INTDIR_A_DLL)\xmlwriter.obj\ + $(XML_INTDIR_A_DLL)\xpath.obj\ + $(XML_INTDIR_A_DLL)\xpointer.obj\ + $(XML_INTDIR_A_DLL)\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)\testModule.exe\ + $(BINDIR)\testSAX.exe\ + $(BINDIR)\testSchemas.exe\ + $(BINDIR)\testURI.exe\ + $(BINDIR)\testXPath.exe\ + $(BINDIR)\runtest.exe\ + $(BINDIR)\runsuite.exe\ + $(BINDIR)\testapi.exe\ + $(BINDIR)\testlimits.exe\ + $(BINDIR)\testrecurse.exe + +!if "$(WITH_THREADS)" == "yes" || "$(WITH_THREADS)" == "ctls" || "$(WITH_THREADS)" == "native" +UTILS = $(UTILS) $(BINDIR)\testThreadsWin32.exe +!else if "$(WITH_THREADS)" == "posix" +UTILS = $(UTILS) $(BINDIR)\testThreads.exe +!endif + +!if "$(VCMANIFEST)" == "1" +_VC_MANIFEST_EMBED_EXE= if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;1 +_VC_MANIFEST_EMBED_DLL= if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2 +!else +_VC_MANIFEST_EMBED_EXE= +_VC_MANIFEST_EMBED_DLL= +!endif + +all : libxml libxmla libxmladll utils + +libxml : $(BINDIR)\$(XML_SO) + +libxmla : $(BINDIR)\$(XML_A) + +libxmladll : $(BINDIR)\$(XML_A_DLL) + +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 $(XML_INTDIR_A_DLL) rmdir /S /Q $(XML_INTDIR_A_DLL) + 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-libs : all + if not exist $(INCPREFIX)\libxml2 mkdir $(INCPREFIX)\libxml2 + if not exist $(INCPREFIX)\libxml2\libxml mkdir $(INCPREFIX)\libxml2\libxml + if not exist $(BINPREFIX) mkdir $(BINPREFIX) + if not exist $(LIBPREFIX) mkdir $(LIBPREFIX) + if not exist $(SOPREFIX) mkdir $(SOPREFIX) + copy $(XML_SRCDIR)\include\libxml\*.h $(INCPREFIX)\libxml2\libxml + copy $(BINDIR)\$(XML_SO) $(SOPREFIX) + copy $(BINDIR)\$(XML_A) $(LIBPREFIX) + copy $(BINDIR)\$(XML_A_DLL) $(LIBPREFIX) + copy $(BINDIR)\$(XML_IMP) $(LIBPREFIX) + +install : install-libs + copy $(BINDIR)\*.exe $(BINPREFIX) + -copy $(BINDIR)\*.pdb $(BINPREFIX) + +install-dist : install-libs + copy $(BINDIR)\xml*.exe $(BINPREFIX) + -copy $(BINDIR)\xml*.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) SOPREFIX=$(BDPREFIX)\bin install-dist + 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) + +# Makes the static for dll libxml intermediate directory. +$(XML_INTDIR_A_DLL) : + if not exist $(XML_INTDIR_A_DLL) mkdir $(XML_INTDIR_A_DLL) + +# 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 $< + +# An implicit rule for static for dll libxml compilation. +{$(XML_SRCDIR)}.c{$(XML_INTDIR_A_DLL)}.obj:: + $(CC) $(CFLAGS) /D "LIBXML_STATIC" /D "LIBXML_STATIC_FOR_DLL" /Fo$(XML_INTDIR_A_DLL)\ /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) + +# Compiles static for dll libxml source. Uses the implicit rule for commands. +$(XML_OBJS_A_DLL) : $(XML_INTDIR_A_DLL) + +# 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) + @$(_VC_MANIFEST_EMBED_DLL) + +#$(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) + +# Creates the libxml static for dll archive. +$(BINDIR)\$(XML_A_DLL) : $(BINDIR) $(XML_OBJS_A_DLL) + $(AR) $(ARFLAGS) /OUT:$(BINDIR)\$(XML_A_DLL) $(XML_OBJS_A_DLL) + +# 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)\$( .memdump + @echo ## XPath regression tests + @-$(BINDIR)\testXPath.exe | find /C "support not compiled in" 1>nul + @if %ERRORLEVEL% NEQ 0 @( \ + echo Skipping debug not compiled in\ + @exit 0 \ + ) + @for %%I in ($(XML_SRCDIR)\test\XPath\expr\*.*) do @( \ + @IF NOT EXIST $(XML_SRCDIR)\result\XPath\expr\%%~nxI ( \ + @echo New test %%~nxI &&\ + @echo %%~nxI &&\ + $(BINDIR)\testXPath.exe -f --expr %%I > $(XML_SRCDIR)/result/XPath/expr/%%~nxI &&\ + findstr /C:"MEMORY ALLOCATED : 0" \ + ) ELSE ( \ + $(BINDIR)\testXPath.exe -f --expr %%I 2>&1 > result.%%~nxI &&\ + fc $(XML_SRCDIR)\result\XPath\expr\%%~nxI result.%%~nxI >nul &\ + iF ERRORLEVEL 1 exit 1 & \ + findstr "MEMORY ALLOCATED" .memdump | findstr /C:"MEMORY ALLOCATED : 0" >nul &&\ + del result.%%~nxI \ + ) \ + ) + @for %%I in ($(XML_SRCDIR)\test\XPath\docs\*.*) do @( \ + for %%J in ($(XML_SRCDIR)\test\XPath\tests\%%~nxI*.*) do @( \ + if not exist $(XML_SRCDIR)\result\XPath\tests\%%~nxJ ( \ + $(BINDIR)\testXPath.exe -f -i %%I %%J > $(XML_SRCDIR)\result\XPath\tests\%%~nxJ &&\ + findstr /C:"MEMORY ALLOCATED" .memdump | findstr /C:"MEMORY ALLOCATED : 0" > nul \ + ) ELSE ( \ + $(BINDIR)\testXPAth.exe -f -i %%I %%J 2>&1 > result.%%~nxJ &&\ + findstr /C:"MEMORY ALLOCATED" .memdump | findstr /C:"MEMORY ALLOCATED : 0">null &&\ + fc $(XML_SRCDIR)\result\XPath\tests\%%~nxJ result.%%~nxJ >null & \ + IF ERRORLEVEL 1 (echo Error: %%I %%J & exit 1) & \ + del result.%%~nxJ \ + )\ + )\ + ) + +XMLtests : $(BINDIR)\xmllint.exe + @echo. 2> .memdump + @echo ## XML regression tests + -@for %%I in ($(XML_SRCDIR)\test\*) do @( \ + if not exist $(XML_SRCDIR)\result\%%~nxI ( \ + echo New test file %%~nxI &\ + $(BINDIR)\xmllint.exe %%I > $(XML_SRCDIR)\result\%%~nxI && \ + findstr /C:"MEMORY ALLOCATED" .memdump | findstr /C:"MEMORY ALLOCATED : 0" > null \ + ) ELSE ( \ + $(BINDIR)\xmllint.exe %%I 2>&1 > result.%%~nxI && \ + findstr /C:"MEMORY ALLOC" .memdump | findstr /C:"MEMORY ALLOCATED : 0" > null && \ + fc $(XML_SRCDIR)\result\%%~nxI result.%%~nxI > null && \ + $(BINDIR)\xmllint.exe result.%%~nxI 2>&1 > result2.%%~nxI | findstr /V /C:"failed to load external entity" && \ + fc result.%%~nxI result2.%%~nxI & \ + del result.%%~nxI result2.%%~nxI\ + ) \ + ) + + + + + + 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 + Eric Zurcher + + diff --git a/win32/VC10/README.vc10 b/win32/VC10/README.vc10 new file mode 100644 index 0000000..4805bdc --- /dev/null +++ b/win32/VC10/README.vc10 @@ -0,0 +1,27 @@ + +README file for VC10 project files for libxml2 +---------------------------------------------- + +to clarify: This is not the readme file for the whole libxml2 project. +Rather, it's a readme for the VC10 project files, attached to the libxml2 proejct. + +Quick Start +----------- + +1) To use, load the libxml2.sln solution file into visual studio +2) check and correct paths for dependent "iconv" project which most certaily +are wrong on your environment. +3) Compile all projects + + +Background Info +--------------- + +Running of "configure.sh" won't make sense since VS doesn't support +this kind of build system and the environment is pretty much known already +if you're using Visual Studio. Instead, a preconfigured "config.h" file +is provided in the "win32\VC10" directory and referenced by the project +files already. + +The compile process is not completely warning-free: Some warnings will +appear during compile which can be ignored. diff --git a/win32/VC10/RuleSet1.ruleset b/win32/VC10/RuleSet1.ruleset new file mode 100644 index 0000000..9985a6c --- /dev/null +++ b/win32/VC10/RuleSet1.ruleset @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/win32/VC10/config.h b/win32/VC10/config.h new file mode 100644 index 0000000..891b57e --- /dev/null +++ b/win32/VC10/config.h @@ -0,0 +1,127 @@ +#ifndef __LIBXML_WIN32_CONFIG__ +#define __LIBXML_WIN32_CONFIG__ + +#define HAVE_CTYPE_H +#define HAVE_STDARG_H +#define HAVE_MALLOC_H +#define HAVE_ERRNO_H +#define HAVE_STDINT_H + +#if defined(_WIN32_WCE) +#undef HAVE_ERRNO_H +#include +#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 +#include +#endif + +#include + +#ifndef ICONV_CONST +#define ICONV_CONST const +#endif + +#ifdef NEED_SOCKETS +#include +#endif + +/* + * Windows platforms may define except + */ +#undef except + +#define HAVE_ISINF +#define HAVE_ISNAN +#include +#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 +/* 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) +#define mkdir(p,m) _mkdir(p) +#if _MSC_VER < 1900 // Cannot define this in VS 2015 and above! +#define snprintf _snprintf +#endif +#if _MSC_VER < 1500 +#define vsnprintf(b,c,f,a) _vsnprintf(b,c,f,a) +#endif +#elif defined(__MINGW32__) +#define mkdir(p,m) _mkdir(p) +#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) && !defined(_WIN32_WCE) +#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/win32/VC10/libxml2-focus.vcxproj b/win32/VC10/libxml2-focus.vcxproj new file mode 100644 index 0000000..914ce25 --- /dev/null +++ b/win32/VC10/libxml2-focus.vcxproj @@ -0,0 +1,184 @@ + + + + + Debug DLL + Win32 + + + Debug + Win32 + + + Release DLL + Win32 + + + Release + Win32 + + + + {7EA50C94-26BD-4893-B773-625CD3D3DEA6} + libxml2 + + + + StaticLibrary + true + Unicode + + + StaticLibrary + true + Unicode + + + StaticLibrary + false + true + Unicode + + + StaticLibrary + Unicode + true + + + + + + + + + + + + + + + + + + + + + + $(ProjectDir)..\..\lib\ + + + $(ProjectDir)..\..\lib\ + + + + + $(ProjectDir)..\..\lib\ + + + $(ProjectDir)..\..\lib\ + + + + Level3 + Disabled + $(ProjectDir);$(ProjectDir)..\..\include;$(ProjectDir)..\..\..\libiconv-1.14\include + 4018; 4996 + /MP %(AdditionalOptions) + false + + + true + + + + + Level3 + Disabled + $(ProjectDir);$(ProjectDir)..\..\include;$(ProjectDir)..\..\..\libiconv-1.14\include + 4018; 4996 + /MP %(AdditionalOptions) + false + + + true + + + + + Level3 + MaxSpeed + true + true + /MP %(AdditionalOptions) + $(ProjectDir);$(ProjectDir)..\..\include;$(ProjectDir)..\..\..\libiconv-1.14\include + 4018; 4996 + + + true + true + true + + + + + /MP %(AdditionalOptions) + $(ProjectDir);$(ProjectDir)..\..\include;$(ProjectDir)..\..\..\libiconv-1.14\include + 4018; 4996 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/win32/VC10/libxml2.sln b/win32/VC10/libxml2.sln new file mode 100644 index 0000000..8485751 --- /dev/null +++ b/win32/VC10/libxml2.sln @@ -0,0 +1,49 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libxml2", "libxml2.vcxproj", "{1D6039F6-5078-416F-A3AF-A36EFC7E6A1C}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "runsuite", "runsuite.vcxproj", "{D841B4F7-C277-49CB-B379-8B1801C8EE35}" + ProjectSection(ProjectDependencies) = postProject + {BEC03130-A64C-48F8-863C-52DA83CFB3AE} = {BEC03130-A64C-48F8-863C-52DA83CFB3AE} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "iconv", "..\..\..\libiconv-1.14.vc10\windows\VC10\iconv.vcxproj", "{BEC03130-A64C-48F8-863C-52DA83CFB3AE}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug DLL|Win32 = Debug DLL|Win32 + Debug|Win32 = Debug|Win32 + Release DLL|Win32 = Release DLL|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {1D6039F6-5078-416F-A3AF-A36EFC7E6A1C}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {1D6039F6-5078-416F-A3AF-A36EFC7E6A1C}.Debug DLL|Win32.Build.0 = Debug|Win32 + {1D6039F6-5078-416F-A3AF-A36EFC7E6A1C}.Debug|Win32.ActiveCfg = Debug|Win32 + {1D6039F6-5078-416F-A3AF-A36EFC7E6A1C}.Debug|Win32.Build.0 = Debug|Win32 + {1D6039F6-5078-416F-A3AF-A36EFC7E6A1C}.Release DLL|Win32.ActiveCfg = Release|Win32 + {1D6039F6-5078-416F-A3AF-A36EFC7E6A1C}.Release DLL|Win32.Build.0 = Release|Win32 + {1D6039F6-5078-416F-A3AF-A36EFC7E6A1C}.Release|Win32.ActiveCfg = Release|Win32 + {1D6039F6-5078-416F-A3AF-A36EFC7E6A1C}.Release|Win32.Build.0 = Release|Win32 + {D841B4F7-C277-49CB-B379-8B1801C8EE35}.Debug DLL|Win32.ActiveCfg = Debug|Win32 + {D841B4F7-C277-49CB-B379-8B1801C8EE35}.Debug DLL|Win32.Build.0 = Debug|Win32 + {D841B4F7-C277-49CB-B379-8B1801C8EE35}.Debug|Win32.ActiveCfg = Debug|Win32 + {D841B4F7-C277-49CB-B379-8B1801C8EE35}.Debug|Win32.Build.0 = Debug|Win32 + {D841B4F7-C277-49CB-B379-8B1801C8EE35}.Release DLL|Win32.ActiveCfg = Release|Win32 + {D841B4F7-C277-49CB-B379-8B1801C8EE35}.Release DLL|Win32.Build.0 = Release|Win32 + {D841B4F7-C277-49CB-B379-8B1801C8EE35}.Release|Win32.ActiveCfg = Release|Win32 + {D841B4F7-C277-49CB-B379-8B1801C8EE35}.Release|Win32.Build.0 = Release|Win32 + {BEC03130-A64C-48F8-863C-52DA83CFB3AE}.Debug DLL|Win32.ActiveCfg = Debug DLL|Win32 + {BEC03130-A64C-48F8-863C-52DA83CFB3AE}.Debug DLL|Win32.Build.0 = Debug DLL|Win32 + {BEC03130-A64C-48F8-863C-52DA83CFB3AE}.Debug|Win32.ActiveCfg = Debug|Win32 + {BEC03130-A64C-48F8-863C-52DA83CFB3AE}.Debug|Win32.Build.0 = Debug|Win32 + {BEC03130-A64C-48F8-863C-52DA83CFB3AE}.Release DLL|Win32.ActiveCfg = Release DLL|Win32 + {BEC03130-A64C-48F8-863C-52DA83CFB3AE}.Release DLL|Win32.Build.0 = Release DLL|Win32 + {BEC03130-A64C-48F8-863C-52DA83CFB3AE}.Release|Win32.ActiveCfg = Release|Win32 + {BEC03130-A64C-48F8-863C-52DA83CFB3AE}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/win32/VC10/libxml2.vcxproj b/win32/VC10/libxml2.vcxproj new file mode 100644 index 0000000..0588fa6 --- /dev/null +++ b/win32/VC10/libxml2.vcxproj @@ -0,0 +1,137 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {1D6039F6-5078-416F-A3AF-A36EFC7E6A1C} + libxml2 + + + + StaticLibrary + true + Unicode + + + Application + false + true + MultiByte + + + + + + + + + + + + + $(ProjectDir)..\..\lib\ + + + build\$(ProjectName)$(Configuration)\ + + + + Level3 + Disabled + $(ProjectDir);$(ProjectDir)..\..\include;$(ProjectDir)..\..\..\libiconv-1.14.vc10\include;%(AdditionalIncludeDirectories) + 4996 + false + true + + + true + + + + + Level3 + MaxSpeed + true + true + + + true + true + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {bec03130-a64c-48f8-863c-52da83cfb3ae} + true + true + false + true + false + + + + + + \ No newline at end of file diff --git a/win32/VC10/libxml2.vcxproj.filters b/win32/VC10/libxml2.vcxproj.filters new file mode 100644 index 0000000..e8e7af3 --- /dev/null +++ b/win32/VC10/libxml2.vcxproj.filters @@ -0,0 +1,171 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + {22791c14-7c07-4222-ad58-8c18d3fb10ba} + + + {bfddc99f-05d4-4f06-98d1-346b1be73d6f} + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files\windows\VC10 + + + Header Files + + + Header Files + + + Header Files + + + \ No newline at end of file diff --git a/win32/VC10/runsuite.vcxproj b/win32/VC10/runsuite.vcxproj new file mode 100644 index 0000000..83cc991 --- /dev/null +++ b/win32/VC10/runsuite.vcxproj @@ -0,0 +1,85 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {D841B4F7-C277-49CB-B379-8B1801C8EE35} + runsuite + + + + Application + true + Unicode + + + Application + false + true + MultiByte + + + + + + + + + + + + + $(ProjectDir)..\..\lib\ + build\$(ProjectName)$(Configuration)\ + + + + Level3 + Disabled + $(ProjectDir);$(ProjectDir)..\..\include;$(ProjectDir)..\..\..\libiconv-1.14.vc10\include;%(AdditionalIncludeDirectories) + 4996 + _UNICODE;UNICODE;%(PreprocessorDefinitions) + /MP %(AdditionalOptions) + false + + + true + Ws2_32.lib;%(AdditionalDependencies) + + + + + Level3 + MaxSpeed + true + true + + + true + true + true + + + + + + + + {bec03130-a64c-48f8-863c-52da83cfb3ae} + + + {1d6039f6-5078-416f-a3af-a36efc7e6a1c} + + + + + + \ No newline at end of file diff --git a/win32/VC10/runsuite.vcxproj.filters b/win32/VC10/runsuite.vcxproj.filters new file mode 100644 index 0000000..d7dce00 --- /dev/null +++ b/win32/VC10/runsuite.vcxproj.filters @@ -0,0 +1,22 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Source Files + + + \ No newline at end of file diff --git a/win32/configure.js b/win32/configure.js new file mode 100644 index 0000000..92b9ba0 --- /dev/null +++ b/win32/configure.js @@ -0,0 +1,708 @@ +/* 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 + */ + +/* 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.ac"; +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; +var verCvs; +var useCvsVer = true; +/* 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 withIcu = false; +var withIso8859x = false; +var withZlib = false; +var withLzma = false; +var withDebug = true; +var withMemDebug = false; +var withRunDebug = false; +var withSchemas = true; +var withSchematron = true; +var withRegExps = true; +var withModules = 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 vcmanifest = false; +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 + " \n"; + txt += " cscript " + WScript.ScriptName + " help\n\n"; + txt += "Options can be specified in the form
    + + + + + + + + + + + + /usr/bin + + + Directory + + + + + foo.sgml + + + Filename + + + + + command + + + Command or text that would be typed. + + + + + replaceable + + + "Variable" text that can be replaced. + + + + + Program or Doc Code + + Program or document code + + + + + + + + + + + About This Handbook + + This Handbook is a guide for both writing documentation for + GNOME components and applications and for properly binding and + packaging documentation into GNOME applications. + + + 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 + + Getting The GNOME Handbook of Writing Software + Documentation . Alternately, one may + download it anonymously from GNOME CVS under gnome-docu/gdp. + + + + + + + + Getting Started Writing GNOME Documentation + + + + + Selecting A Document + + + Document Something You Know + + 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 assign 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. + + + It is also important to spend some time with GNOME to make + sure you are familiar enough with it to be + authoritative 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. + + + 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 docs@gnome.org. + + + + + The GNOME Documentation Status Table + + The GDP Documentation Status Table + (DocTable) (http://www.gnome.org/gdp/doctable/) 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. + + + You should use the DocTable 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 DocTable also allows + people to make announcements and suggestions and to discuss + issues in the comments section. + + + Note + + Note that the information in the + DocTable 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. + + + + + + + + + Installing and Using DocBook + + 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. + + + NOTE + + 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 + gnome-doc-list mailing list + 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. + + + + Installing DocBook + + Download and install the following DocBook Tools packages: 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 noarch + directory.) You can find more + information on DocBook Tools here. + + + If you are an Emacs user you may + want to grab the psgml package as well. This is a major mode + for editing sgml files in Emacs. + + + + + GDP Stylesheets + + The GDP uses its own DocBook stylesheets. To use the GDP + stylesheets, you should download the file + gdp-both.dsl from the gnome-docu/gdp/dsssl module in + CVS (or from + GDP Custom DSSSL Stylesheet)and copy it + + over the file + /usr/lib/sgml/stylesheets/cygnus-both.dsl. + Alternately, you can download and install the + gnome-doc-tools package which will set + up the stylesheets as well as the DTD discussed below. + + + + + + + GDP DTD (PNG Image Support) + + 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 http://www.gnu.org/philosophy/gif.html. + + + 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: + + + + + Download the + GDP DocBook DTD for PNG support and install it + where you keep your DTD's. (On Red Hat use /usr/lib/sgml/.) Note that + the 3.0 DTD is missing support for the + <legalnotice> tag, so it is + recommended that you use version 3.1 + + + + + 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: + +PUBLIC "-//GNOME//DTD DocBook PNG Variant V1.0//EN" "png-support-3.0.dtd" + + If you are using the 3.1 DTD, use: + +PUBLIC "-//GNOME//DTD DocBook PNG Variant V1.1//EN" "png-support-3.1.dtd" + + + + + + Alternately, you can download and install the + gnome-doc-tools package which will set + up the custom stylesheets and DTD for you. + + + 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: + + + Articles: + +]]> + + + + Books: + +]]> + + + + + + + Editors + + 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. + + + Probably the two most popular editors available are + Emacs and + vi. 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 . + + + + + Creating Something Useful with your Docs + + 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 Jade. In + most cases you will not have to work directly with + Jade; Instead, you will use the + scripts provided by DocBook Tools. + + + To preview your DocBook document, it is easiest to convert + it to html. If you have installed the + DocBook tools described above, all you have to do is to run + the command $db2html + mydocument.sgml. If there are no sgml syntax + errors, this will create a directory mydocument and place the + resulting html files in it. The title page of the document + will typically be + mydocument/index.html. If you have + screenshots in your document, you will have to copy these + files into the mydocument directory by + hand. You can use any web browser to view your document. + Note that every time you run db2html, it + creates the mydocument directory over, so + you will have to copy the screenshots over each time. + + + You can also convert your document to PostScript by running + the command $db2ps + mydocument.sgml, after which you can print out or + view the resulting .ps file. + + + NOTE + + 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 . + + + + + + Images in DocBook Tools + + 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. + + + 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). + + + Thus, you should never explicitly + include the extension of the image file, since DocBook + Tools will automatically insert it for you. For example: + + + + My Image + + Sample GNOME Display + + + + +]]> + + You will notice in this example that the file + myfile.png was referred to as simply + myfile. Now when you run + db2html to create an html file, it will + automatically look for myfile.png in + the directory. + + + 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 http://people.redhat.com/dcm/sgml.html + (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 + img2eps on you system. + + + + + Learning DocBook + + There are many resources available to help you learn DocBook. + The following resources on the web are useful for learning + DocBook: + + + + + http://www.docbook.org - Norman + Walsh's DocBook: The Definitive + Guide. Online O'Reilly book on using + DocBook. Contains an excellent element reference. May be + too formal for a beginner. + + + + + A Practical Introduction to DocBook + - The Open Source Writers Group's introduction to using + DocBook. This is an excellent HOW-TO type article on + getting started. + + + + + Getting Going with DocBook: Notes for + Hackers - 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. + + + + + + FreeBSD Documentation Project Primer for New + Contributors - 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. + + + + + Norman Walsh's book is also available in print. + + + The following sections of this document are designed to help + documentation authors write correct and consistent DocBook: + + + + + - Descriptions of + commonly used DocBook tags. + + + + + 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. + + + + + + + + + + GDP Document Templates + + Templates for various types of GNOME documents are found in + . They are kept in CVS in + gnome-docu/gdp/templates. The easiest source to get them from + is probably the GDP + Document Templates web page, which is typically kept + completely up-to-date with CVS and has a basic description of + each file from CVS. + + + + + + + Screenshots + + Most GNOME documents will have screenshots of the particular + applet, application, GNOME component, or widget being + discussed. As discussed above in 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 above. + + + Screenshot Appearance + + For all screenshots of windows that typically have border + decorations (e.g. applications and dialogs, but not applets + in a panel), 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 + + gnome-doc-list mailing list + requesting a GDP member reproduce these screenshots in the + correct format and email them to you. + + + + Screenshot Tools + + There are many tools for taking screenshots in + GNOME/Linux. Perhaps the most convenient is the + Screen-Shooter Applet. 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 + Netscape or the + GNOME Help Browser. You + should save your screenshot as a GIF and + then use convert filename.gif + filename.png.) For applets + in a Panel, + xv can be used to crop the + screenshot to only include the relevant portion of the + Panel. Note that + xv and + gimp can both be used for taking + screenshots, cropping screenshots, and converting image + formats. + + + + Screenshot Files + + 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 db2html to + convert your SGML file to HTML (see ), 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 db2html 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 , but will not need to copy these + images from their default location, as they are included + directly into the output(PostScript of PDF) file. + + + + + + + + + Application Bugs + + 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 + About 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 Bug + Buddy applet which is part of the gnome-applets + package. + + + + + + + + Using CVS + + 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. + + + + Anonymous CVS + + To anonymously check out documents from CVS, you must first + log in. From the bash shell, you should set your CVSROOT + shell variable with export + CVSROOT=':pserver:anonymous@anoncvs.gnome.org:/cvs/gnome' + and then login with cvs login(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 cvs -z3 checkout + gnome-docu/gdp. After you have this document + checked out and you would like to download any updates on + the CVS server, use cvs -z3 update -Pd. + + + + + Login CVS 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 + username with a + password, you must first set your CVSROOT shell variable with + export + CVSROOT=':pserver:username@cvs.gnome.org:/cvs/gnome'. + Log in with cvs login 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 + filename into + the CVS server, type cvs -z3 commit + filename. 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 EDITOR environment variable or + with the option. You + may also check in any modifications to files in the working + directory and subdirectories using cvs -z3 + commit. To + add a new file to the CVS server, use cvs -z3 add + filename, followed by the + commit command. + + + + + CVS Etiquette + + 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 ChangeLog 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. + + + + + + + + + The GNOME Documentation System + + + + + The GNOME Help Browser + + At the core of the GNOME help system is the GNOME + Help Browser. The Help + Browser 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. + + + The GNOME Help Browser 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. + + + + + + + The GNOME Help Browser (GNOME-2.0) In + GNOME 2.0, the GNOME Help Browser + will be replaced by Nautilus. + 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 GNOME Help Browser + 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 jade 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 + Nautilus, visit the #nautilus IRC + channel on irc.gnome.org. + + + + + + Dynamic Document Synthesis(GNOME-2.0) + + 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. + + + 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. + + + + + + + The GNOME Documentation Components + + + Application Manuals + + 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 below. + + + + + Application Help + + Applications should have a Help + button on screens on which users may need help. These + Help buttons should pull up the + default help browser, determined by the + ghelp URL Handler (configured using the + Control Center), typically the + GNOME Help Browser. 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 below. + + + + + Application Context Sensitive Help (coming in + GNOME-2.0) + + 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 + below. + + + + + The GNOME User Guide + + The GNOME User Guide describes the + GNOME desktop environment and core components of GNOME such + as the panel and + control center. 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. + + + + + User Documents + + Aside from the GNOME User Guide, + there are several other documents to help GNOME users learn + GNOME, including the GNOME FAQ, + GNOME Installation and Configuration + Guide, and the GNOME Administrators + Guide. + + + + + Developer Documents + + There are many White Papers, Tutorials, HOWTO's and FAQ's to + make programming GNOME and GNOME applications as easy as + possible. + + + 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 GNOME API + Reference page. + + + + + Project Documents + + 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. + + + + + + + + + + DocBook Basics + + + + Introduction to DocBook + + 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 + elements which are contained between + brackets, < and >. Text is marked by both beginning and + ending elements, for example in the DocBook DTD, one denotes a + title with <title>The + Title</title>. + + + 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. + + + 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 DocBook + Tools, a free package of utilities for working with DocBook + which includes Jade, which does the SGML/DSSL + parsing. You can read more about DocBook Tools in . + + + The final appearance of the output (e.g. PostScript or HTML) + is determined by a + stylesheet. Stylesheets are files, + written in a special language (DSSSL — 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 — see . + + + The advantage of specifying the structure + of a document with SGML instead of specifying the + appearance 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. + + + 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 <author> elements, making for a faster and more + accurate search. + + + 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. + + + As stated before, the GDP uses the DocBook DTD. For a list of + introductory and reference resources on DocBook, see . The following sections also provide + convenient instructions on which markup tags to use in various + circumstances. Be sure to read + for GDP documentation-specific guidelines. + + + + + + XML and SGML + + 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 strongly + advised that the documentation writers conform to XML + syntax rules. Here are most important differences: + + + + + Minimization + + + + It is possible with some implementations of SGML to use + minimizations to close elements in a document by using + </>, for example: + <title>The + Title</>. This is not + allowed in XML. You can use sgmlnorm command, + included in DocBook Tools package, to expand minimized tags; + if you are using Emacs with psgml + mode, you can also use menu command + + Modify + Normalize + . + + + + + Self-closing tags + + + + Also, in SGML some tags are allowed not to have closing + tags. For example, it is legal for + <xref> not to have a closing tag: + <xref + linkend="someid">. In + XML, it is illegal; instead, you should use + <xref + linkend="someid"/> (note the + slash!). + + + + + + Case sensitive tags + + + In XML, unlike SGML, tags are case-senstive + <title> and + <TITLE> are different tags! + Therefore, please always use lowercase tags (except for + things like DOCTYPE, CDATA and + ENTITY, which are not DocBook tags). + + + + + + + + + + + + + + + Structure Elements + + + Sections and paragraphs + + Top-level element of a book body must be + <chapter>; it may contain one or more + <sect1>, each of them may contain + <sect2> and so on up to + <sect5>. The top-level element of an + article body is always + <sect1>. 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. + + Please try to avoid using deeply nested sections; for + most situations, <sect1> and + <sect2> should be sufficient. If not, + you probably should split your <sect1> + into several smaller ones. + + Use the tag <para> for + paragraphs, even if there is only one paragraph in a + section—see template for examples. + + + + + Notes, Warnings, And Tips + + 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 + <note>, <tip>, + <warning>, + <important> respectively. For example: + + + TIP + + To speed up program compilation, use gcc + compiler with Pentium optimization. + +]]> produces + + + TIP + + To speed up program compilation, use + gcc compiler with Pentium + optimization. + + + Note that this should not be inside a + <para> but between paragraphs. + + + + Screenshots and other figures + + To include screenshots and other figures, use the following + tags: + + + + Screenshot + + Screenshot of a program + + + +]]> + + replacing example_screenshot with the + actual file name (without extension). The result will look like this: + +
    + Screenshot + + Screenshot of a program + + + +
    +
    + + NOTE + + Notice in this example that the screenshot file name does + not include the file type extension — to find out + why, please read . + + +
    + + Program listings and terminal session + To show a file fragment—for example, program + listing—use <programlisting> tag: + + +[Desktop Entry] +Name=Gnumeric spreadsheet +Exec=gnumeric +Icon=gnome-gnumeric.png +Terminal=0 +Type=Application +]]> + + which produces + +[Desktop Entry] +Name=Gnumeric spreadsheet +Exec=gnumeric +Icon=gnome-gnumeric.png +Terminal=0 +Type=Application + + As a matter of fact, all examples in this document were + produced using <programlisting>. + + + To show a record of terminal session—i.e., sequence of + commands entered at the command line—use + <screen> tag: + + +bash$make love +make: *** No rule to make target `love'. Stop. +]]> + + which produces + +bash$make love +make: *** No rule to make target `love'. Stop. + + Note the use of tags <prompt> and + <userinput> for marking system prompt + and commands entered by user. + + NOTE + + Note that both <programlisting> + and <screen> preserve linebreaks, + but interpret SGML tags (unlike LaTeX + verbatim environment). Take a look at + the source of this document to see how you can have SGML + tags literally shown but not interpreted, + + + + + + Lists + + The most common list types in DocBook are + <itemizedlist>, + <orderedlist>, and + <variablelist>. + + + + <itemizedlist> + + This is the simplest unnumbered list, parallel to + <ul> in HTML. Here is an example: + + + + + Show backup files — This will + show any backup file that might be on your system. + + + + + Show hidden files — This will + show all "dot files" or files that begin with a dot. This + files typically include configuration files and directories. + + + + + Mix files and directories — This + option will display files and directories in the order you + sort them instead of + always having directories shown above files. + + + +]]> + + and output: + + + + + Show backup files — + This will show any backup file that might be on + your system. + + + + + + Show hidden files — + This will show all "dot files" or files that + begin with a dot. This files typically include + configuration files and directories. + + + + + + Mix files and directories + — This option will display files and + directories in the order you sort them instead + of always having directories shown above files. + + + + Note the use of &mdash; + for long dash (see ). Also, + please note that the result looks much nicer because the + terms being explained (Show backup + files, etc.) are set in a different font. In + this case, it was achieved by using <guilabel> + tag. In other cases, use appropriate tags such as + <guimenuitem>, + <command>, + or — if none of + this applies — use + <emphasis>. + + + + + <orderedlist> + + This list is completely analogous to + <itemizedlist> 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 numeration, + for example <orderedlist + numeration="lowerroman">. Possible values of + these attribute are arabic, + upperalpha, + loweralpha, + upperroman, + lowerroman. + + + + + <variablelist> + 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 + <variablelist> 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 <variablelist>. The + source looked liked this: + + + + <itemizedlist> + + This is the simplest unnumbered list, parallel to + <ul> in HTML. Here is an example:... + + + + <orderedlist> + + This list is completely analogous to + <itemizedlist> + + + + <variablelist> + + This list is used when each entry is rather long,... + + + +]]> + + + + + + + Lists can be nested; in this case, the stylesheets + are smart enough to change the numeration (for + <orderedlist>) or marks of each entry + (in <itemizedlist>) for sub-lists + + + +
    + + + + + Inline Elements + + + GUI elements + + + + <guibutton> — used for + buttons, including checkbuttons and radio buttons + + + + + + <guimenu>, + <guisubmenu> —used for + top-level menus and submenus + respectively, for example Utilities submenu of the + Main Menu]]> + + + + + + <guimenuitem>—an entry in a + menu + + + + + + <guiicon>—an icon + + + + + + <guilabel>—for items which have + labels, like tabs, or bounding boxes. + + + + + <interface>— for most everything + else... a window, a dialog box, the Panel, etc. + + + + + If you need to refer to a sequence of menu choices, such as + + Main Menu + Utilities GNOME + terminal + + there is a special construction for this, too: + + + Main Menu Utilities + GNOME terminal ]]> + + + + + + Links and references + + To refer to another place in the same document, you can use + tags <xref> and + <link>. 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: + +tip was given in +. ]]> + + which produces: An example of a tip was given in . + + + Here notes and extip + are the id attributes of and of the + example of a tip in it. + + To produce a link to an external source, such as a + Web page or a local file, use <ulink> + tag, for example: + +GNOME Web page ]]> + + which produces: To find more about GNOME, please visit + The GNOME Web + Site You can use any of the standard URL types, such + as http, ftp, file, telnet, mailto (in + most cases, however, use of mailto is + unnecessary—see discussion of + <email> tag). + + + + Filenames, commands, and other + computer-related things + + Here are some tags used to describe operating system-related + things: + + + + <filename> — used + for filenames, + e.g.<filename> + foo.sgml + </filename> + produces: foo.sgml. + + + + <filename + class="directory"> — used for + directories, e.g.<filename + class="directory">/usr/bin + </filename> + produces: /usr/bin. + + + + + <application> — used for + application names, + e.g. <application>Gnumeric + </application> produces: + Gnumeric. + + + + + <envar> — used for + environment variables, e.g. + <envar>PATH</envar>. + + + + + + <command> — used for + commands entered on command line, e.g. + <command>make install + </command> produces: + make install. + + + + + <replaceable> — used for + replaceable text, e.g. + <command>db2html<replaceable> + foo.sgml + </replaceable></command> + produces: db2html + foo.sgml. + + + + + + + Keyboard input + To mark up text input by the user, use + <userinput>. + + To mark keystrokes such as shortcuts and other + commands, use <keycap>. + 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: <keysym> + and <keycode>. However you are + unlikely to need these for most documentation. For reference, + <keysym> is for the symbolic + name of a key. <keycode> is + for the scan code of a key. These are not + terms commonly required in GNOME documentation, + although <keysym> is useful for marking + up control codes. + + + To mark up a combination of keystrokes, use the + <keycombo> wrapper: + + + Ctrl + Alt + F1 +]]> + + + + Finally, if you want to show a shortcut for some menu + command, here are the appropriate tags (rather long): + + + + Ctrlq + + Quit +]]> + + which produces simply + + Ctrl-q + Quit + + + + + + E-mail addresses To mark up e-mail + address, use <email>: + +me@mydomain.com)]]> + + which produces: The easiest way to get in touch with me is + by e-mail (me@mydomain.com) Note that + <email> automatically produces a link + in html version. + + + + + Special symbols + + 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 + entities, which is SGML analogue of + macros, or commands, of LaTeX. They generally have the form + &entityname;. Note that the semicolon + is required. + + + here is partial list of most commonly used enitites: + + + + &amp; — ampersend (&) + + + &lt; — left angle bracket (<) + + + &copy; — copyright sign (©) + + + &mdash; — long dash (—) + + + &hellip; — ellipsis (…) + + + + 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 (&mdash;) 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. + + + +
    + + + + + GDP Documentation Conventions + + + + + Conventions for All GDP Documentation + + XML compatibility + + All GNOME documentation should conform to XML syntax + requirements, which are stricter than SGML ones — see + for more informaion. + + + + + Authors' names + + 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 — see templates for an + example. + + + + + + + + Conventions for Application Documentation + + + Application Version Identification + + Application documentation should identify the version of the + application for which the documentation is written: + + + Introduction + + blah-blah-blah This document describes version 1.0.53 of gfoo. + +]]> + + + + + Copyright information + 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). + + + + Software license + + All GNOME applications must contain information about the + license (for software, not for documentation), either in the + "About" box or in the manual. + + + + + Bug reporting + + Application documentation should give an address for + reporting bugs and for submitting comments about the + documentaion (see templates for an example). + + + + + + + + + Writing Application and Applet Manuals + + 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. + + + Documentation Availability + + 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. + + + Application manuals should be based on the template in + . Applet manuals should be based on + the templates in for GNOME + versions 1.x and the templates in + for GNOME versions 2.x. + + + Manuals For Large Applications + + Manuals for very large applications, such as GNOME Workshop + components should be a <book> (and thus + use <chapter> for each primary section) + , instead of <article> which most + applications use(with each primary section being a + <sect1>). + + + + Applet Manuals in GNOME 2.0 + + 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 + <sect1>. Applet manuals will typically + have several sections, each of which is + <sect2>. + + + + Application manuals should be made available by having a + "Manual" entry in the Help pull-down menu + at the top of the + application, as described in . + Applets should make their manuals available by + right-clicking on the applet. + + + + + + + + Listing Documents in the Help Menu + + + Developer Information + + This section is for developers. Documentation authors + generally do not need to know this material. + + + + Typically the application manual and possibly additional help + documents will be made available to the user under the + Help menu at the top right of the + application. To do this, you must first write a + topic.dat file. The format for this file is: + +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. + + For example, Gnumeric's + topic.dat file is: + +gnumeric.html Gnumeric manual +function-reference.html Gnumeric function reference + + When the application is installed, the + topic.dat file should be placed in the + $prefix/share/gnome/help/appname/C/ directory + where appname is replaced by the + application's name. The application documentation (converted + from SGML into HTML with db2html) should be + placed in this directory too. + + + + If the help files are not present in the correct directory, the + menu items will NOT appear when the program is run. + + + + The topic.dat file is used by the GNOME + menu building code to generate the Help + menu. When you define your menu: + +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("appname"), + GNOMEUIINFO_END + }; + + the line specifying GNOMEUIINFO_HELP causes + GNOME to create a menu entry which is tied to the documentation + in the directory mentioned above. Also, all the topics in the + topic.dat file will get menu entries in the + Help menu. When the user selects any of these + topics from the Help menu, a help browser + will be started with the associated HTML documentation. + + + + + + + + Application Help Buttons + + + Developer Information + + This section is for developers. Documentation authors + generally do not need to know this material. + + + + Most GNOME applications will have Help + buttons. These are most often seen in Preference windows. (All + Preference windows should have Help + buttons.) Most Help buttons will connect + to the application manual, although some may connect to special + documents. Because the Help 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 + Help buttons are pressed. + + + To make the Help buttons call the correct document in the GNOME Help + Browser the developer should add code based on the following example: + + +gchar *tmp; +tmp = gnome_help_file_find_file ("module", "page.html"); +if (tmp) { + gnome_help_goto(0, tmp); + g_free(tmp); +} + + + NOTE + + The example above is in the C language, please refer to other + documentation or forums for other GNOME language bindings. + + + + + + + + Packaging Applet Documentation + + Applet Documentation Files + + In GNOME 2.0 each applet will have its own documentation + installed separately, and the GNOME 2.0 help + browser (Nautilus) will dynamically + merge the applet documents into a single virtual book + called GNOME Applets. 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 GNOME Applets book before + distribution. Telsa + hobbit@aloss.ukuu.org.uk 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. + + + 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). + + + 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 <xref> links to + the introductory chapter of the GNOME + Applets book must be removed (as the 1.x + GNOME Help Browser 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 GNOME Applets book, you must + remember to add <legalnotice> and + <copyright> sections. + + + + + Adding Documentation to an Applet Menu + + Developer Information + + This section is for developers. Documentation authors + generally do not need to know this material. + + + + Applets should have About and + Manual 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. + + + To add an applet's manual to its applet menu, use: + +/* add an item to the applet menu */ +applet_widget_register_callback(APPLET_WIDGET(applet), "manual", +_("Manual"), &open_manual, NULL); + + 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. + + + You will need to write a simple callback function to open the + help browser to the appropriate document. This is done using + the gnome_help_file_find_file function, + as described in . + + + You will also want to add an About menu + item to the applet's menu. This is a + stock menu item and is done: + +applet_widget_register_stock_callback (APPLET_WIDGET(applet), "about", + GNOME_STOCK_MENU_ABOUT, _("About"), &my_applet_cb_about, + NULL); + + + + More information can be found at Writing + GNOME panel applets using the GTK+/GTK-- widget set. + + + + + + + + + Writing Context Sensitive Help (coming in GNOME-2.0) + + 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. + + + 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. + + + 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. + + + 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. + + + 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. + + + + + + + Referring to Other GNOME Documentation (coming in + GNOME-2.0) + + 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. + + + + + + + + Basics of Documentation Style + + 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 become + experts. Remember, your goal is to produce complete, + intuitive and clear documentation. + + + 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. + + + + + + Planning + + 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 + <book> tag instead of + <chapter> or + <article>. + + + + + + + Achieving a Balanced Style + + + Just as you need to juggle expert and novice readers, + you'll have to juggle a number of other extremes as you write: + + + + 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. + + + + + Be engaging and friendly, yet professional. Games + documents may be less formal than productivity + application documents (people don't + use games, they + play 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. + + + + + + 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. + + + + + + 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. + + + + + + + + + + + + Structure + + 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. + + + As to linking, there's some disagreement about whether to use + <xref> <link> + 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. + + + 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<book>, it will probably be best to + contribute to that rather than developing your own. + + + + + + Grammar and Spelling + + 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. + + + 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. + + + 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. + + + + + + + + Teamwork + + + Working With The GDP Team + + 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 GDP Documentation + Status Table (http://www.gnome.org/gdp/doctable/) 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 + gnome-doc-list mailing list. + + + 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 + gnome-doc-list mailing list. + + + + + + + Working With Developers + + 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. + + + + + + + + + + Finishing A Document + + + + + Editing The Document + + 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. + + + + + + + Submitting The Document + + 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. + + + The final step is to email the GNOME Translation Team at + gnome-i18n@nuclecu.unam.mx to notify them that + there is a new document for them to translate. + + + + + + + + Resources + + + + Resources On The Web The GNOME + Documentation Project Web page lists current GDP + projects and members. + + + The GDP Documentation Status Table tracks the + status of all the various documentation components of GNOME. + + + Norman Walsh's DocBook: The Definitive + Guide in an excellent book on DocBook, + available both online and in print. + + + + + + + Books + + Docbook: The Definitive Guide is available in both printed + form and on the web at: + + Docbook: The Definitive Guide + + + + + + + + Mailing Lists + + The gnome-docs-list 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 GNOME Mailing Lists. This is a rather + low-volume list, so you will not be flooded with messages. + + + + + + + IRC + + 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. + + + + + + + + + + Document Templates + + + + Template 1: Application Manual + + The following template should be used for all application + manuals. You can always get the latest copy of this + template from GDP + Documentation Templates. + + + + + + +]> + + + + + + +
    + + + MY-GNOME-APP + + 2000 + ME-THE-AUTHOR + + + + + + + + + Permission is granted to copy, distribute and/or modify this + document under the terms of the GNU Free + Documentation License, 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 GNU Free + Documentation License from the Free Software + Foundation by visiting their Web site or by writing + to: Free Software Foundation, Inc., 59 Temple Place - Suite + 330, Boston, MA 02111-1307, USA. + + + 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. + + + + + + This is version 1.0 of MY-GNOME-APP manual. + + + + + + + + + Introduction + + + MY-GNOME-APP 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 MY-GNOME-APP + 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. + + + It also allows you to save and print theorem proofs and to add + comments to the proofs it produces. + + + + To run MY-GNOME-APP, select + + SUBMENU + MY-GNOME-APP + + from the Main Menu, or type + MYGNOMEAPP on the command line. + + + + MY-GNOME-APP is included in the + GNOME-PACKAGE package, which is part of the + GNOME desktop environment. This document describes version + &version; of MY-GNOME-APP. + + + + + + + + + Using MY-GNOME-APP + + MY-GNOME-APP can be used to produce a + perfect proof of any 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 + MY-GNOME-APP. + + + + + Basic usage + + Starting MY-GNOME-APP opens the + Main window, shown in . The window is at first empty. + + +
    + MY-GNOME-APP Main Window + + MY-GNOME-APP Main Window + + + +
    + +
    + + + + + + Proving a Theorem + + To get a proof of a theorem, select + + File + New + , + which will + bring up the New Proof dialog box. + Enter the statement of the theorem in the + Theorem statement field, select your + desired proof type from the drop-down menu, and and press + Prove!. + + + If MY-GNOME-APP cannot prove the + theorem by the method you have chosen, or if you have not + selected a proof type at all, + MY-GNOME-APP 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: + + + + Deduction + + + This is a proof method that is generally accepted + for full credit by Logic professors. + + + + + Induction + + + This logical style will also earn you full credit on + your homework. + + + + + Dialog + + + This logical method is best for Philosophy classes, + and will probably only merit partial credit on Logic + or Mathematics homework. + + + + + Confusion + + + Suitable only for political debates, battles of wits + against the unarmed, and Philosophy classes focusing + on the works of Kant. Use with caution. + + + + + + + + + + Proving Incorrect Theorms + + MY-GNOME-APP 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 + MY-GNOME-APP to prove its + logical inverse. + + + + + Editing Proofs + + Once you have proven the theorem, it will be displayed in + the main window. 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. + + + 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 Style submenu of the + Edit menu. + MY-GNOME-APP will convert the + text to that style. + + + 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. + + + + Altering The Proofs Themselves + + MY-GNOME-APP does not allow you + to alter a proof it has produced itself. You can, save + your proof as a plain text file (using the + Save as... menu), and alter it + that way. Be aware, however, that + MY-GNOME-APP uses its own file + format for saved proofs, and cannot re-open a file unless + it is in the .mga format. + + + + + + + +
    + + + + + + Toolbar + + The toolbar (shown in ) + provides access to several commonly used routines. +
    + MY-GNOME-APP Toolbar + + MY-GNOME-APP Toolbar + + +
    + + + New + + + Brings up the New Theorem + dialog. + + + + + Open + + + Open an exisiting theorem you want to prove, or a + completed proof you wish to print or format. + + + + + Save + + + Save the current theorem permanently in a + file. + + + + +
    +
    + + + + + + + Menus + + The menu bar, located at the top of the Main + Window, contains the following menus: + + + + File + + + This menu contains: + + + + + + F3 + + Open + + — This opens a file which is saved on your computer. + + + + + + + CtrlS + + Save + + — This saves your file. + + + + + + + CtrlW + + Close + + — This closes your file. + + + + + + + CtrlQ + + Exit + + — This quits the application. + + + + + + + + + Edit + + + This menu contains: + + + + + + CtrlX + + Cut + + — This removes any text or data which is selected and + places it in the buffer. + + + + + + + CtrlC + + Copy + + — This copies any text or data which is selected into + the buffer. + + + + + + + CtrlV + + Paste + + — This pastes any text or data which is copied into + the buffer. + + + + + COMMAND1… + — This opens the COMMAND1 + dialog, which is used to .... + + + + + COMMAND2 + — This .... + + + + + + + + + + Settings + + + This menu contains: + + + + Preferences… + — This opens the Preferences + Dialog, which allows you to configure + many settings. + + + + + COMMAND3 — + This command does something. + + + + + + + + + Help + + + This menu contains: + + + + Manual — This + opens the GNOME Help + Browser and displays this manual. + + + + + + About — This + opens the About dialog + which shows basic information about + MY-GNOME-APP, such as + the author's name, the application version number, + and the URL for the application's Web page if one + exists. + + + + + + + + +
    + + + + + + + Customization + + To change the application settings, select + + Settings + Preferences... + . This opens the + Preferences dialog, shown in . + + +
    + Preferences Dialog + + Preferences Dialog + + + +
    + + + The properties in the PREFSTABNAME tab are: + + + + + + Default Text Style + + + 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. + + + + + (Configuration Item Label) + + + (Description of Configuration) + + + + + (Configuration Item Label) + + + (Description of Configuration) + + + + + + + + The properties in the SECONDTABNAME tab are: + + + (Configuration Item Label) + + + (Description of Configuration) + + + + + (Configuration Item Label) + + + (Description of Configuration) + + + + + + + + After you have made all the changes you want, click on + OK to apply the changes and close the + Properties dialog. To cancel the changes + and return to previous values, click the + Close button. + + +
    + + + + + + + + + + + Known Bugs and Limitations + + This application has no known bugs. + + + + + + + + Authors + + MY-GNOME-APP was written by GNOME-HACKER + (hacker@gnome.org). To find more information about + MY-GNOME-APP, please visit the MY-GNOME-APP Web + page. Please send all comments, suggestions, and bug + reports to the GNOME + bug tracking database. (Instructions for submitting bug + reports can be found + on-line.) You can also use Bug Report + Tool (bug-buddy), available in the + Utilities submenu of Main + Menu, for submitting bug reports. + + + + This manual was written by ME + (MYNAME@MYADDRESS). Please send all comments and + suggestions regarding this manual to the GNOME Documentation + Project by sending an email to + docs@gnome.org. You can also add your comments online + by using the GNOME Documentation Status + Table. + + + + + + + + + + + License + + 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. + + + A copy of the GNU General Public License is + included as an appendix to the GNOME Users + Guide. You may also obtain a copy of the + GNU General Public License from the Free + Software Foundation by visiting their Web site or by writing to +
    + Free Software Foundation, Inc. + 59 Temple Place - Suite 330 + Boston, MA 02111-1307 + USA +
    +
    +
    +
    + + + + + + + + + +]]> + + +
    +
    +
    + + + + + Template 2: Applet Manual For GNOME 1.x + + 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 GDP + Documentation Templates. Note that the template + consists of two files; the first file calls the second as an + entity. You should name the first file + appletname-applet.sgml + and the second file should be named + appletname.sgml, + where + appletname is + the name of the applet. + + + + +]> + + + +
    + + + + APPLETNAME Applet + + 2000 + YOURFULLNAME + + + + + + + + + Permission is granted to copy, distribute and/or modify this + document under the terms of the GNU Free Documentation + License, 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 GNU Free Documentation License from + the Free Software Foundation by visiting their Web site or by writing to: + Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + + + 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. + + + + + This is version XXX of the APPLETNAME applet manual. + + + + + + &APPLETNAME.sgml; + +
    + + +]]> + + +
    + + + + + APPLET Applet + + + APPLET applet, shown in , allows you to …. To add this + applet to a Panel, + right-click on the Panel and choose + + Panel + Add to panel + Applet + SECTION + APPLET + . + + +
    + APPLET Applet + + APPLET Applet + + + +
    + + + + Usage + + (Place a short description of how to use the applet here.) + + + + Right-clicking on the applet brings up a menu containing the + following items: + + + + + Properties… — + opens the + Properties dialog. + + + + + + Help — + displays this document. + + + + + + About… — + shows basic information about APPLET + Applet, including the applet's version and the + author's name. + + + + + + + + + + + Customization + + You can customize APPLET + applet by right-clicking on it and choosing + Properties…. This will open the + Properties dialog(shown in ), which allows you to + change various settings. + + +
    + Properties dialog + + Properties dialog + + + +
    + + + The properties are: + + + + + (Configuration Item Label) — If this button is + checked…(description) + + + + + + (Configuration Item Label) — Selecting this + button…(description) + + + + + + (Configuration Item Label) — Enter the name of + …(description) + + + + + + + After you have made all the changes you want, click on + OK to apply the changes and close the + Properties dialog. To cancel the changes + and return to previous values, click the + Close button. + +
    + + + + + + Known Bugs and Limitations + + This applet has no known bugs. + + + + + + + + Authors + + APPLET was written by GNOME-HACKER + (hacker@gnome.org). Please send all comments, + suggestions, and bug + reports to the GNOME + bug tracking database. (Instructions for submitting bug + reports can be found + on-line. You can also use Bug Report + Tool (bug-buddy), available in the + Utilities submenu of Main + Menu, for submitting bug reports. + + + + This manual was written by ME + (MYNAME@MYADDRESS). Please send all comments and + suggestions regarding this manual to the GNOME Documentation + Project by sending an email to + docs@gnome.org. You can also submit comments online + by using the GNOME Documentation + Status Table. + + + + + + + + + + + License + + 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. + + + A copy of the GNU General Public License is + included as an appendix to the GNOME Users + Guide. You may also obtain a copy of the + GNU General Public License from the Free + Software Foundation by visiting their Web site or by writing to +
    + Free Software Foundation, Inc. + 59 Temple Place - Suite 330 + Boston, MA 02111-1307 + USA +
    +
    +
    + +
    + + + + +]]> + + + +
    +
    +
    + + + + + Template 2: Applet Manual For GNOME 2.x + + 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 GDP + Documentation Templates. + + + 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 + gnome-applets.sgml. Name the second file + according to the applet's name: + appletname-applet.sgml. + Make sure you update the entity + at the top of the shell document to reflect the new name of + the applet document. + + + + + +]> + + + + + GNOME Applets + + TelsaGwynne + JohnFleck + DavidMason + Red Hat, Inc. + + DanMueth + AlexanderKirillov + + GNOME Applets version 0.1 for GNOME 1.1.5 + 2000 + + 2000 + Telsa Gwynne, John Fleck, Red Hat Inc., Dan Mueth, and + Alexander Kirillov + + + + 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 Free Software Foundation. + + + 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. + + + + + + + Introduction + + + + What Are Applets? + + Applets are one of the most popular and useful objects you can add + to your Panel to customize your desktop. + An applet is a small application which runs inside a small area of + your Panel. Applets have been written for + a wide range of purposes. Some are very powerful interactive + tools, such as the Tasklist 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 Battery Charge + Monitor) or weather + information(see GNOME Weather). Some + are simply for amusement(see Fish). + + + + Applets are similar to swallowed applications in that both of them + reside within the Panel. However, + swallowed applications are generally applications which were + not designed to run within the Panel. + Typically one will swallow an application which already exists in + the main desktop area, putting it into your + Panel. The application will continue to + run in the Panel until you end the + application or unswallow it, placing it back onto the main part of + your desktop when you need to. + + + +
    + Example Applets + + Example Applets + + + +
    + Several example applets are shown in . From left to right, they are: (1) + Mixer Applet, which allows you to turn + on/off sound and control its volume by clicking on the applet. (2) + Sound Monitor Applet, which displays + the current volume of sound being played and allows you to control + various sound features. (3) GTCD + Applet, a CD player which has all its controls + available in the applet and displays the track and time. (4) + Drive Mount Applet, used to mount and + unmount drives with a single click of the mouse. (5) + Desk Guide which allows you to view + and control multiple virtual screens. (6) + Tasklist Applet which allows you to + control your various windows and applications. +
    + + 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 + Panels 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 The GNOME + Software Map for lists of additional GNOME applications + and applets. + + + As you read through the the rest of this chapter, you should try + adding and removing applets from your Panel and + experiment with them freely. + +
    + + + + Adding, Moving, and Removing Applets + + + Adding Applets to a Panel + + To add an applet to a Panel, right-click + on the Panel and select + PanelAdd to panel + Applet. 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 + Panel. + + + + + Moving Applets In or Between Panels + + It is easy to move applets in a Panel or + between two Panels. 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 Panel + or between two Panels this way. If you + don't have a three-button mouse, just + right-click on the applet and choose + Move. 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 Panels in the + GNOME Control Center: 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 + Shift button (for "push" mode), + Ctrl (for "switched" mode), or + Alt (for "free" mode, i.e. jumping other other + objects without disturbing them) button while dragging. + + + To change the global Panel preferences, right-click on any applet + or Panel and select + + Panel + Global Preferences... + . + The Default movement mode is set under the + Applets tab. + + + + + Removing Applets from a Panel + + To remove an applet from a Panel, + right-click on the applet and select Remove from + panel.... + + + + + + + + The Right-Click Pop-Up Menu + + Clicking the right mouse button on any applet brings up + a pop-up menu. This + menu always has certain standard menu items in it and + often has additional items which vary depending on the particular + applet. + + + Standard Pop-Up Items + + All applets should have the following items in their right-click + pop-up menu: + + + Remove from panel + + + The Remove from panel menu item + removes the applet from the Panel. + + + + + + Move + + + After selecting Move, 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 + Panels this way. + + + + + + Panel + + + The Panel submenu contains various + items and submenus for adding and removing + Panels and applets and for changing + the configuration. + + + + + + About + + + The About... 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. + + + + + + Help + + + The Help menu item brings up the help + manual for the applet. + + + + + + + + + The Applet Properties Dialog + + Many applets have customizable properties. These applets will + have a Properties... menu item in their + right-click pop-up menu which brings up the + Properties dialog where you can alter the + appearance or behaviour of the applet. +
    + An Example Applet Properties Dialog + + An Example Applets Properties Dialog + + + +
    + All Properties dialogs have the following + buttons at the bottom of the dialog: + + + + OK — + Pressing OK will activate any changes + in the properties you have made and close the + Properties dialog. + + + + + Apply — + Pressing Apply at any time will + make your changes active without closing the + Properties 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. + + + + + Close — + Pressing Close will close the + Properties dialog. Only changes in the + configuration which were previously applied with the + Apply button will persist. Other + changes will not be made active. + + + + + Help — + Pressing Help brings up the manual for + the application, opening it to the page describing the + Properties dialog. + + + +
    +
    + + + Other Common Pop-Up Items + + Many applets also have one or more of the following items in their + right-click pop-up menu: + + + Run... + + + The Run... 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: + + + + + The CPU Load applet, which monitors + what programs are running, has a Run + gtop... menu item. Selecting this menu item + starts GTop, which allows you to + view and control programs which are running. + + + + + The CD Player applet has a + Run gtcd... menu item which + starts the GNOME CD Player when + selected, which has more capabilities than the applet. + + + + + + + + +
    + + + Feedback + + Reporting Applet Bugs + + GNOME users are encouraged to report bugs to The GNOME Bug Tracking + System. The easiest way to submit bugs is to use the + Bug Report Tool program by selecting + + Main Menu Utilities + Bug Report Tool + . + 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. + + + + Providing Feedback + + GNOME users are welcome to provide suggestions for how + applications and documentation can be improved. Suggestions for + application changes should be submitted using the + Bug Report Tool 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 + docs@gnome.org. + + + + Joining GNOME + + 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 — The GNOME Development + Site, documentation writers — The GNOME Documentation + Project, icon design artists — Gnome Icon Web, + general — Helping GNOME, + or just join the gnome-list email list (see GNOME Mailing + Lists) to discuss what you are interested in doing. + + + +
    + + + + Template Applets + + &TEMPLATE-APPLET + + + +
    + + + + + + + +]]> +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GNOMEAPPLET Applet + + + GNOMEAPPLET applet, shown in , does this and that. To learn how to + add this applet to a Panel, see . + + + +
    + GNOMEAPPLET + + GNOMEAPPLET + + + +
    + + + Usage + + This applet does nothing. To use it, just + left-click on it and it will instantly do nothing. + + + + + Right-Click Pop-Up Menu Items + + In addition to the standard menu items (see ), the right-click pop-up menu has + the following items: + + + + Properties... — This menu + item opens the Properties dialog (see + ) which allows you to + customize the appearance and behavior of this applet. + + + + + Run Hello World... — This + menu item starts the program Hello + World, used to say "hello" to the world. + + + + + + + + Properties + + You can configure GNOMEAPPLET applet by + right-clicking on the applet and choosing the + Properties... menu item. This will open the + Properties dialog, shown in . + +
    + Properties Dialog + + Properties Dialog + + + +
    + + + To change the color of the applet, click on the + color button. To change other properties, + click on other buttons. + + + + For more information on the Properties + dialog, including descriptions of the OK, + Apply, Cancel, and + Help buttons, see . + +
    + + + Known Bugs and Limitations + + There are no known bugs in the + GNOMEAPPLET applet. + + + + + Authors + + This applet was writen by HACKER-NAME + HACKER-EMAIL. The documentation for this applet + which you are reading now was written by + YOUR-NAME YOUR-EMAIL. For information on submitting + bug reports and suggestions for improvements, see . + + + +
    + + + + + +]]> + + +
    +
    +
    + + +
    + + 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 @@ + + + + + + + + + + + + + + + + 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 @@ + + + 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 @@ + + + + + + + + + + + + + + + + + + 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 @@ + + + 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 @@ + + 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 @@ + + + + + + + + + + + + + + + + + + + + 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 @@ + + + + + + + + + + + + + + + + + + + + + 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 @@ + + + + + + + + + + + + + + + + + + + + + + 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 @@ + + + + + + + + + + + + + + + + + + + + + + + + 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 @@ + + + + + + + + + + + + + + + diff --git a/test/relaxng/libvirt.rng b/test/relaxng/libvirt.rng new file mode 100644 index 0000000..c1f586e --- /dev/null +++ b/test/relaxng/libvirt.rng @@ -0,0 +1,1258 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + dynamic + static + + + + + + + + + + + xen + kvm + kqemu + qemu + lxc + openvz + test + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + i686 + x86_64 + ia64 + + + + + + + xenpv + xenner + + + + + xen + linux + + + + + + + + + + + + + + hvm + + + + + + + i686 + x86_64 + + + + + xenfv + pc + isapc + + + + + + + + mips + + + mips + + + + + + + sparc + + + sun4m + + + + + + + ppc + + + + g3beige + mac99 + prep + + + + + + + + exe + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + localtime + utc + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + hd + fd + cdrom + network + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + floppy + disk + cdrom + + + + + + + file + + + + + + + + + + + + + + + + block + + + + + + + + + + + + + + + + + + + + + + + + + + ide + fdc + scsi + virtio + xen + usb + uml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + none + writeback + writethrough + + + + + + + + + file + + + + + + + + + + + + + + block + + + + + + + + + + + + + + mount + + + + + + + + + + + + + + template + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bridge + + + + + + + + + + + + + + + + ethernet + + + + + + + + + + + + + + + + network + + + + + + + + + + + + + + user + + + + + + + + internal + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sdl + + + + + + + + + + + + + + + yes + no + + + + + + + vnc + + + + + + + + + + yes + no + + + + + + + + + + + + + + + + + + + + + + rdp + + + + + + + + + + yes + no + + + + + + + yes + no + + + + + + + yes + no + + + + + + + + + + + + desktop + + + + + + + + + + yes + no + + + + + + + + + + + + + + + vga + cirrus + vmvga + xen + vbox + + + + + + + + + + + + + + + + + + yes + no + + + + + + + yes + no + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + destroy + restart + preserve + rename-restart + + + + + + + dev + file + pipe + unix + tcp + udp + null + stdio + vc + pty + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sb16 + es1370 + pcspk + ac97 + + + + + + + + + + + + + + + + + + + tablet + mouse + + + + + + ps2 + usb + xen + + + + + + + + + + + subsystem + capabilities + + + + + usb + pci + + + + + yes + no + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + [0-9]+ + + + + + [0-9]+ + 1 + + + + + -1 + + + + + [0-9]+ + 4000 + + + + + [A-Za-z0-9_\.\+\-&:/]+ + + + + + [A-Za-z0-9_\.\+\-]+ + + + + + [a-zA-Z0-9_\+\-]+ + + + + + + [a-fA-F0-9]{32} + + + [a-fA-F0-9]{8}\-([a-fA-F0-9]{4}\-){3}[a-fA-F0-9]{12} + + + + + + [a-zA-Z0-9_\.\+\-&/%]+ + + + + + /[a-zA-Z0-9_\.\+\-&/%]+ + + + + + /[a-zA-Z0-9_\.\+\-&/%]* + + + + + /[a-zA-Z0-9_\+\-/%]+ + + + + + [a-zA-Z0-9_\.\-:/]+ + + + + + ([a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2} + + + + + ([0-2]?[0-9]?[0-9]\.){3}[0-2]?[0-9]?[0-9] + + + + + (0x)?[0-9a-fA-F]{1,4} + + + + + (0x)?[0-9a-fA-F]{1,3} + + + + + (0x)?[0-9a-fA-F]{1,4} + + + + + (0x)?[0-9a-fA-F]{1,2} + + + + + (0x)?[0-1]?[0-9a-fA-F] + + + + + (0x)?[0-7] + + + diff --git a/test/relaxng/libvirt_0.xml b/test/relaxng/libvirt_0.xml new file mode 100644 index 0000000..c17d9d5 --- /dev/null +++ b/test/relaxng/libvirt_0.xml @@ -0,0 +1,23 @@ + + pvtest + 596a5d2171f48fb2e068e2386a5c413e + + linux + /var/lib/xen/vmlinuz.2Dn2YT + /var/lib/xen/initrd.img.0u-Vhq + method=http://download.fedora.devel.redhat.com/pub/fedora/linux/core/test/5.91/x86_64/os + + 430080 + 2 + destroy + destroy + destroy + + + + + + + + + diff --git a/test/relaxng/list.rng b/test/relaxng/list.rng new file mode 100644 index 0000000..57de17c --- /dev/null +++ b/test/relaxng/list.rng @@ -0,0 +1,23 @@ + + + + + + -?([0-9]+(\.[0-9]*)?|\.[0-9]+) + + + + + + + + + + + + + + diff --git a/test/relaxng/list_0.xml b/test/relaxng/list_0.xml new file mode 100644 index 0000000..a6b4d60 --- /dev/null +++ b/test/relaxng/list_0.xml @@ -0,0 +1 @@ + diff --git a/test/relaxng/list_1.xml b/test/relaxng/list_1.xml new file mode 100644 index 0000000..a8907cc --- /dev/null +++ b/test/relaxng/list_1.xml @@ -0,0 +1 @@ + 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 @@ + + + + + + + + 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 @@ + + + + + + + + + diff --git a/test/relaxng/pattern3.rng b/test/relaxng/pattern3.rng new file mode 100644 index 0000000..fa4434f --- /dev/null +++ b/test/relaxng/pattern3.rng @@ -0,0 +1,11 @@ + + + + + + [a-z]+ + + + + diff --git a/test/relaxng/pattern3_1.xml b/test/relaxng/pattern3_1.xml new file mode 100644 index 0000000..f559cd3 --- /dev/null +++ b/test/relaxng/pattern3_1.xml @@ -0,0 +1 @@ + ooo 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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 @@ + + + + + + + + + + + + + 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 @@ + + + + + + + + + + + + + + + + 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 @@ + + x + + y + + diff --git a/test/relaxng/spec.rng b/test/relaxng/spec.rng new file mode 100644 index 0000000..9650f71 --- /dev/null +++ b/test/relaxng/spec.rng @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 @@ + + + A foo 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 @@ + + + diff --git a/test/relaxng/spec_0.xml b/test/relaxng/spec_0.xml new file mode 100644 index 0000000..cb8f7be --- /dev/null +++ b/test/relaxng/spec_0.xml @@ -0,0 +1,3589 @@ + + + + + + + + +]> +
    + + +$Id: spec.xml,v 1.159 2001/12/02 12:12:12 jjc Exp $ +RELAX NG Specification + + + JamesClark + +
    jjc@jclark.com
    +
    +
    + + MURATAMakoto + +
    EB2M-MRT@asahi-net.or.jp
    +
    +
    +
    +3 December 2001 + +$Id: spec.xml,v 1.159 2001/12/02 12:12:12 jjc Exp $ + + +2001OASIS + + + +Copyright © The Organization for the Advancement of +Structured Information Standards [OASIS] 2001. All Rights +Reserved. + +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. + +The limited permissions granted above are perpetual and will not +be revoked by OASIS or its successors or assigns. + +This document and the information contained herein is provided +on an AS IS 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. + + + +Status of this Document + +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 relax-ng-comment@lists.oasis-open.org. + +A list of known errors in this document is available at http://www.oasis-open.org/committees/relax-ng/spec-20011203-errata.html. + + + + +This is the definitive specification of RELAX NG, a simple +schema language for XML, based on and . 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. + + + + + Committee Specification + 3 December 2001 + + + Committee Specification + 11 August 2001 + + +
    + + +
    +Introduction + +This document specifies + + + +when an XML document is a correct RELAX NG +schema + +when an XML document is valid with respect to a +correct RELAX NG schema + + + +An XML document that is being validated with respect to a RELAX NG +schema is referred to as an instance. + +The structure of this document is as follows. describes the data model, which is the +abstraction of an XML document used throughout the rest of the +document. describes the syntax of a +RELAX NG schema; any correct RELAX NG schema must conform to this +syntax. 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. describes the syntax that +results from applying the transformations; this simple syntax is a +subset of the full syntax. 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. 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, describes +conformance requirements for RELAX NG validators. + +A tutorial is available separately (see ). + +
    + +
    +Data model + +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 and must conform to the constraints of . + +An XML document is represented by an element. An element consists +of + + + +a name + +a context + +a set of attributes + +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 + + + +A name consists of + + +a string representing the namespace URI; the empty +string has special significance, representing the absence of any +namespace + +a string representing the local name; this string matches the NCName +production of + + +A context consists of + + +a base URI +a namespace map; this maps prefixes to namespace URIs, +and also may specify a default namespace URI (as declared +by the xmlns attribute) + + +An attribute consists of + + +a name +a string representing the value + + +A string consists of a sequence of zero or more characters, +where a character is as defined in . + +The element for an XML document is constructed from an instance +of the as follows. We use the notation +[x] to refer to the value of the +x 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. + +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. + +
    +Example + +Suppose the document +http://www.example.com/doc.xml is as +follows: + + + +]]> + +The element representing this document has + + +a name which has + + +the empty string as the namespace URI, representing +the absence of any namespace + +foo as the local +name + + + + + +a context which has + + +http://www.example.com/doc.xml as the base +URI + +a namespace map which + + + +maps the prefix xml to the +namespace URI +http://www.w3.org/XML/1998/namespace +(the xml prefix is implicitly declared +by every XML document) + +specifies the empty string as the default namespace +URI + + + + + + + + + +an empty set of attributes + +a sequence of children consisting +of an element which has + + +a name which has + + +http://www.example.com/n1 as the +namespace URI + +bar1 as the local +name + + + + + +a context which has + + +http://www.example.com/doc.xml as the base +URI + +a namespace map which + + + +maps the prefix pre1 to the +namespace URI +http://www.example.com/n1 + +maps the prefix xml to the +namespace URI +http://www.w3.org/XML/1998/namespace + +specifies the empty string as the default namespace +URI + + + + + + + + + +an empty set of attributes + +an empty sequence of children + + + +followed by an element which has + + +a name which has + + +http://www.example.com/n2 as the +namespace URI + +bar2 as the local +name + + + + + +a context which has + + +http://www.example.com/doc.xml as the base +URI + +a namespace map which + + + +maps the prefix pre2 to the +namespace URI +http://www.example.com/n2 + +maps the prefix xml to the +namespace URI +http://www.w3.org/XML/1998/namespace + +specifies the empty string as the default namespace +URI + + + + + + + + + +an empty set of attributes + +an empty sequence of children + + + + + + +
    + +
    + +
    +Full syntax + +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 ]]>, an instance or +schema can use ]]> 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: + +http://relaxng.org/ns/structure/1.0 + +The symbols QName and NCName are defined in . The anyURI symbol has the same meaning as the +anyURI datatype of : it indicates a +string that, after escaping of disallowed values as described in +Section 5.4 of , is a URI reference as defined +in (as modified by ). The symbol string matches any string. + +In addition to the attributes shown explicitly, any element can +have an ns attribute and any element can have a +datatypeLibrary attribute. The +ns attribute can have any value. The value of the +datatypeLibrary 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. + +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 value, param +and name) 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. + +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. + +Leading and trailing whitespace is allowed for value of each +name, type and +combine attribute and for the content of each +name element. + + + +
    +Example + +Here is an example of a schema in the full syntax for the +document in . + + + + A foo element. + + + + + + +]]> + +
    + +
    + +
    +Simplification + +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. + +
    +Annotations + +Foreign attributes and elements are removed. + +It is safe to remove xml:base +attributes at this stage because xml:base +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, xml:base +attributes can be discarded. + +
    + +
    +Whitespace + +For each element other than value and +param, each child that is a string containing only +whitespace characters is removed. + +Leading and trailing whitespace characters are removed from the +value of each name, type and +combine attribute and from the content of each +name element. + +
    + +
    +<literal>datatypeLibrary</literal> attribute + +The value of each datatypeLibary attribute is +transformed by escaping disallowed characters as specified in Section +5.4 of . + +For any data or value +element that does not have a datatypeLibrary +attribute, a datatypeLibrary attribute is +added. The value of the added datatypeLibrary +attribute is the value of the datatypeLibrary +attribute of the nearest ancestor element that has a +datatypeLibrary attribute, or the empty string if +there is no such ancestor. Then, any datatypeLibrary +attribute that is on an element other than data or +value is removed. + +
    + +
    +<literal>type</literal> attribute of <literal>value</literal> element + +For any value element that does not have a +type attribute, a type attribute +is added with value token and the value of the +datatypeLibrary attribute is changed to the empty +string. + +
    + +
    +<literal>href</literal> attribute + +The value of the href attribute on an +externalRef or include element +is first transformed by escaping disallowed characters as specified in +Section 5.4 of . The URI reference is then +resolved into an absolute form as described in section 5.2 of using the base URI from the context of the element +that bears the href attribute. + +The value of the href attribute will be used +to construct an element (as specified in ). 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 application/xml or +text/xml, the MIME entity must be parsed as an XML +document in accordance with the applicable RFC (at the term of writing +) and an element constructed from the result +of the parse as specified in . In +particular, the charset parameter must be handled +as specified by the RFC. This specification does not define the +handling of media types other than application/xml +and text/xml. The href 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. + + does not define the +interpretation of fragment identifiers for +application/xml or +text/xml. + +
    + +
    +<literal>externalRef</literal> element + +An externalRef element is transformed as +follows. An element is constructed using the URI reference that is +the value of href attribute as specified in . 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 +externalRef attribute with an +href attribute with the same value. + +Any ns attribute on the +externalRef element is transferred to the +referenced element if the referenced element does not already have an +ns attribute. The externalRef +element is then replaced by the referenced element. + +
    + +
    +<literal>include</literal> element + +An include element is transformed as follows. +An element is constructed using the URI reference that is the value of +href attribute as specified in . This element must be a grammar +element, matching the syntax for grammar. + +This grammar 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 grammar element +must not require the dereferencing of an include +attribute with an href attribute with the same +value. + +Define the components of an element to +be the children of the element together with the components of any +div child elements. If the +include element has a start +component, then the grammar element must have a +start component. If the include +element has a start component, then all +start components are removed from the +grammar element. If the include +element has a define component, then the +grammar element must have a +define component with the same name. For every +define component of the include +element, all define components with the same name +are removed from the grammar element. + +The include element is transformed into a +div element. The attributes of the +div element are the attributes of the +include element other than the +href attribute. The children of the +div element are the grammar +element (after the removal of the start and +define components described by the preceding +paragraph) followed by the children of the include +element. The grammar element is then renamed to +div. + +
    + +
    +<literal>name</literal> attribute of <literal>element</literal> +and <literal>attribute</literal> elements + +The name attribute on an +element or attribute element is +transformed into a name child element. + +If an attribute element has a +name attribute but no ns +attribute, then an ns="" attribute is added to the +name child element. + +
    + +
    +<literal>ns</literal> attribute + +For any name, nsName or +value element that does not have an +ns attribute, an ns attribute is +added. The value of the added ns attribute is the +value of the ns attribute of the nearest ancestor +element that has an ns attribute, or the empty +string if there is no such ancestor. Then, any ns +attribute that is on an element other than name, +nsName or value is +removed. + +The value of the ns attribute is +not transformed either by escaping +disallowed characters, or in any other way, because the value of the +ns attribute is compared against namespace URIs in +the instance, which are not subject to any +transformation. + +Since include and +externalRef elements are resolved after +datatypeLibrary attributes are added but before +ns attributes are added, ns +attributes are inherited into external schemas but +datatypeLibrary attributes are not. + +
    + +
    +QNames + +For any name element containing a prefix, the +prefix is removed and an ns attribute is added +replacing any existing ns attribute. The value of +the added ns attribute is the value to which the +namespace map of the context of the name element +maps the prefix. The context must have a mapping for the +prefix. + +
    + +
    +<literal>div</literal> element + +Each div element is replaced by its +children. + +
    + +
    +Number of child elements + +A define, oneOrMore, +zeroOrMore, optional, list or +mixed 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 group +element. Similarly, an element 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 +group element. + +A except 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 choice element. + +If an attribute element has only one child +element (a name class), then a text element is +added. + +A choice, group or +interleave 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, + +<choice> p1 p2 p3 </choice> + +is transformed to + +<choice> <choice> p1 p2 </choice> p3 </choice> + +This reduces the number of child elements by one. The +transformation is applied repeatedly until there are exactly two child +elements. + +
    + +
    +<literal>mixed</literal> element + +A mixed element is transformed into an +interleaving with a text element: + +<mixed> p </mixed> + +is transformed into + +<interleave> p <text/> </interleave> + +
    + +
    +<literal>optional</literal> element + +An optional element is transformed into +a choice with empty: + +<optional> p </optional> + +is transformed into + +<choice> p <empty/> </choice> + +
    + +
    +<literal>zeroOrMore</literal> element + +A zeroOrMore element is transformed into a choice +between oneOrMore and +empty: + +<zeroOrMore> p </zeroOrMore> + +is transformed into + +<choice> <oneOrMore> p </oneOrMore> <empty/> </choice> + +
    + +
    +Constraints + +In this rule, no transformation is performed, but various +constraints are checked. + +The constraints in this section, unlike the constraints +specified in , can be checked without +resolving any ref elements, and are accordingly +applied even to patterns that will disappear during later stages of +simplification because they are not reachable (see ) or because of notAllowed +(see ). + +An except element that is a child of an +anyName element must not have any +anyName descendant elements. An +except element that is a child of an +nsName element must not have any +nsName or anyName descendant +elements. + +A name element that occurs as the first child +of an attribute element or as the descendant of the +first child of an attribute element and that has an +ns attribute with value equal to the empty string +must not have content equal to xmlns. + +A name or nsName element +that occurs as the first child of an attribute +element or as the descendant of the first child of an +attribute element must not have an +ns attribute with value +http://www.w3.org/2000/xmlns. + +The defines the namespace URI of +namespace declaration attributes to be +http://www.w3.org/2000/xmlns. + +A data or value element +must be correct in its use of datatypes. Specifically, the +type attribute must identify a datatype within the +datatype library identified by the value of the +datatypeLibrary attribute. For a +data element, the parameter list must be one that +is allowed by the datatype (see ). + +
    + +
    +<literal>combine</literal> attribute + +For each grammar element, all +define elements with the same name are combined +together. For any name, there must not be more than one +define element with that name that does not have a +combine attribute. For any name, if there is a +define element with that name that has a +combine attribute with the value +choice, then there must not also be a +define element with that name that has a +combine attribute with the value +interleave. Thus, for any name, if there is more +than one define element with that name, then there +is a unique value for the combine attribute for +that name. After determining this unique value, the +combine attributes are removed. A pair of +definitions + +<define name="n"> + p1 +</define> +<define name="n"> + p2 +</define> + +is combined into + +<define name="n"> + <c> + p1 + p2 + </c> +</define> + +where c is the value of the +combine attribute. Pairs of definitions are +combined until there is exactly one define element +for each name. + +Similarly, for each grammar element all +start elements are combined together. There must +not be more than one start element that does not +have a combine attribute. If there is a +start element that has a combine +attribute with the value choice, there must not +also be a start element that has a +combine attribute with the value +interleave. + +
    + +
    +<literal>grammar</literal> element + +In this rule, the schema is transformed so that its top-level +element is grammar and so that it has no other +grammar elements. + +Define the in-scope grammar for an +element to be the nearest ancestor grammar element. A +ref element refers to a +define element if the value of their +name attributes is the same and their in-scope +grammars are the same. A parentRef element +refers to a define element +if the value of their name attributes is the same +and the in-scope grammar of the in-scope grammar of the +parentRef element is the same as the in-scope +grammar of the define element. Every +ref or parentRef element must +refer to a define element. A +grammar must have a start child +element. + +First, transform the top-level pattern +p into +<grammar><start>p</start></grammar>. +Next, rename define elements so that no two +define elements anywhere in the schema have the +same name. To rename a define element, change the +value of its name attribute and change the value of +the name attribute of all ref +and parentRef elements that refer to that +define element. Next, move all +define elements to be children of the top-level +grammar element, replace each nested +grammar element by the child of its +start element and rename each +parentRef element to ref. + +
    + + +
    +<literal>define</literal> and <literal>ref</literal> elements + +In this rule, the grammar is transformed so that every +element element is the child of a +define element, and the child of every +define element is an element +element. + +First, remove any define element that is not +reachable. A define element +is reachable if there is reachable ref element +referring to it. A ref element is reachable if it +is the descendant of the start element or of a +reachable define element. Now, for +each element element that is not the child of a +define element, add a define +element to the grammar element, and replace the +element element by a ref element +referring to the added define element. The value of +the name attribute of the added +define element must be different from value of the +name attribute of all other +define elements. The child of the added +define element is the element +element. + +Define a ref element to be +expandable if it refers to a +define element whose child is not an +element element. For each ref +element that is expandable and is a descendant of a +start element or an element +element, expand it by replacing the ref element by +the child of the define element to which it refers and +then recursively expanding any expandable ref +elements in this replacement. This must not result in a loop. +In other words expanding the replacement of a +ref element having a name with +value n must not require the expansion of +ref element also having a name +with value n. Finally, remove any +define element whose child is not an +element element. + +
    + +
    +<literal>notAllowed</literal> element + +In this rule, the grammar is transformed so that a +notAllowed element occurs only as the child of +a start or element element. An +attribute, list, +group, interleave, +or oneOrMore element that has a +notAllowed child element is transformed into a +notAllowed element. A choice +element that has two notAllowed child elements is +transformed into a notAllowed element. A +choice element that has one +notAllowed child element is transformed into its +other child element. An except element that has a +notAllowed child element is removed. +The preceding transformations are applied +repeatedly until none of them is applicable any more. +Any define element that is no longer reachable +is removed. + +
    + +
    +<literal>empty</literal> element + +In this rule, the grammar is transformed so that an +empty element does not occur as a child of a +group, interleave, or +oneOrMore element or as the second child of +a choice element. A group, +interleave or choice element +that has two empty child elements is transformed +into an empty element. A group +or interleave element that has one +empty child element is transformed into its other +child element. A choice element whose +second child element is an empty element is +transformed by interchanging its two child elements. A +oneOrMore element that has an +empty child element is transformed into an +empty element. The preceding transformations are applied +repeatedly until none of them is applicable any more. + +
    + +
    + +
    +Simple syntax + +After applying all the rules in , the schema will match the following +grammar: + + + +With this grammar, no elements or attributes are allowed other +than those explicitly shown. + +
    +Example + +The following is an example of how the schema in can be transformed into the simple +syntax: + + + + + + + + + + foo + + + + + + + + + + bar1 + + + + + + + bar2 + + + +]]> + +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. + +
    + +
    + +
    +Semantics + +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. + +This kind of formalism is similar to a proof system. +However, a traditional proof system only has positive +antecedents. + +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(p), 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. + +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. + +
    +Name classes + +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 : it consists of a namespace URI and a local +name. + +We use the following notation: + + + +is a variable +that ranges over names + +ranges over name classes + + + + + + +asserts that name is a member of name class + + + + + +We are now ready for our first axiom, which is called "anyName +1": + + + + + + + + + + +This says for any name , belongs to the name class , +in other words 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 . + +Our first inference rule is almost as simple: + + + + + + + + + + + + + + + + + + + + + +This says that for any name +and for any name class , +if does not belong to , +then belongs to + + + + + . In other words, + + + + matches any name that does not match . + +We now need the following additional notation: + + + + + +ranges over local names; a local name is a string that +matches the NCName production of , that is, +a name with no colons + + +ranges over URIs + + + + + + + + +constructs a name with URI and local +name + + + + +The remaining axioms and inference rules for name classes are as +follows: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    +Patterns + +The axioms and inference rules for patterns use the following +notation: + + + +ranges +over contexts (as defined in ) + +ranges over +sets of attributes; a set with a single member +is considered the same as that member + +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 may contain consecutive strings and may contain strings +that are empty; thus, there are sequences ranged over by that cannot occur as the children of an +element + +ranges +over patterns (elements matching the pattern +production) + + + + + + + + +asserts that with respect to context , the +attributes and the sequence of elements and +strings matches the pattern + + + +
    +<literal>choice</literal> pattern + +The semantics of the choice pattern are as follows: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    +<literal>group</literal> pattern + +We use the following additional notation: + + + + + + + +represents the concatenation of the sequences and + + + + + + + +represents the union of +and + + + + + +The semantics of the group pattern are as follows: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +The restriction in +ensures that the set of attributes constructed in the consequent will +not have multiple attributes with the same name. + +
    + + +
    +<literal>empty</literal> pattern + +We use the following additional notation: + + +represents an empty sequence + +represents an empty set + + + +The semantics of the empty pattern are as follows: + + + + + + + + + + + + + + +
    + + +
    +<literal>text</literal> pattern + +We use the following additional notation: + + +ranges +over strings + + +The semantics of the text pattern are as follows: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +The effect of the above rule is that a text +element matches zero or more strings. + +
    + + +
    +<literal>oneOrMore</literal> pattern + +We use the following additional notation: + + + + + + +asserts that there is no name that is +the name of both an attribute in +and of an attribute in + + + +The semantics of the oneOrMore pattern are as follows: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    +<literal>interleave</literal> pattern + +We use the following additional notation: + + + + + + + + +asserts that +is an interleaving of +and + + + + +The semantics of interleaving are defined by the following rules. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +For example, the interleavings of +]]> and +]]> are +]]>, +]]>, and +]]>. + +The semantics of the interleave pattern are +as follows: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +The restriction in +ensures that the set of attributes constructed in the consequent will +not have multiple attributes with the same name. + +
    + +
    +<literal>element</literal> and <literal>attribute</literal> pattern + +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 weak matching. 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. + + + +represents an empty +string + +ranges over the empty +sequence and strings that consist entirely of +whitespace + + + + + + + + +asserts that with respect to context , the +attributes and the sequence of elements and +strings weakly matches the pattern + + + +The semantics of weak matching are as follows: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +We use the following additional notation: + + + + + + + + +constructs an attribute with name +and value + + + + + + + + + +constructs an element with name , +context , +attributes +and mixed sequence as children + + + + + + +asserts that the mixed sequence 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 + + + + + + + +asserts that the grammar contains + + + + + + + + + + + + + +The semantics of the attribute pattern are as follows: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +The semantics of the element pattern are as follows: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    +<literal>data</literal> and <literal>value</literal> pattern + +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. + + + +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. + +It can determine whether two strings represent the +same value of a datatype. This service does not have any +parameters. + + + +Both services may make use of the context of a string. For +example, a datatype representing a QName would use the namespace +map. + +We use the following additional notation: + + + + + + + + + + +asserts that in the datatype library identified by URI , the string interpreted with +context is a legal +value of datatype with parameters + + + + + + + + + + +asserts that in the datatype library identified by URI , string interpreted with +context represents the same value of +the datatype as the string interpreted in the context of + + +ranges over sequences of parameters + + + + + +within the start-tag of a pattern refers to the context +of the pattern element + + + + + + + + + +constructs a context which is the same as +except that the default namespace is ; if is the empty string, then there is no default namespace +in the constructed context + + + +The datatypeEqual function must be reflexive, transitive +and symmetric, that is, the following inference rules must hold: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +The semantics of the data and +value patterns are as follows: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    +Built-in datatype library + +The empty URI identifies a special built-in datatype library. +This provides two datatypes, string and +token. No parameters are allowed for either of +these datatypes. + + + + + + + +asserts that +and are identical + + + + + + + +returns the string , +with leading and trailing whitespace characters removed, +and with each other maximal sequence of whitespace characters +replaced by a single space character + + + +The semantics of the two built-in datatypes are as +follows: + + + + + + + string + + + + + + + + + + string + + + + + + + + + + + token + + + + + + + + + + + + + + + + + + token + + + + + + + + + +
    + +
    +<literal>list</literal> pattern + +We use the following additional notation: + + + + + + +returns a sequence of strings one for each whitespace delimited token +of ; each string in the returned sequence will +be non-empty and will not contain any +whitespace + + + +The semantics of the list pattern are as follows: + + + + + + + + + + + + + + + + + + + + + + + + + +It is crucial in the above inference rule that the +sequence that is matched against a pattern can contain consecutive +strings. + +
    + +
    + +
    +Validity + +Now we can define when an element is valid with respect to a +schema. We use the following additional notation: + + + +ranges over elements + + + + + +asserts that the element is valid with +respect to the grammar + + + + +asserts that the grammar contains + + + + +An element is valid if together with an empty set of attributes +it matches the start pattern of the grammar. + + + + + + + + + + + + + + + + + + + + +
    + +
    +Example + +Let be + + + + + + + foo + + + + + + + + +where is + + + + + + + + +and is + + + + + http://www.example.com/n1 + bar1 + + + + + + + +and is + + + + + http://www.example.com/n2 + bar2 + + + + + + + +Assuming appropriate definitions of , and , this represents the document in . + +We now show how can be shown to +be valid with respect to the schema in . The schema is equivalent to the +following propositions: + + + + + foo + + + + + + + foo.element + + + foo + + + + + bar1 + + + + + bar2 + + + + + + + + + bar1.element + + + http://www.example.com/n1 + + bar1 + + + + + + + + bar2.element + + + http://www.example.com/n2 + + bar2 + + + + + + +Let name class be + + + + + http://www.example.com/n1 + + bar1 + + + +and let be + + + + + http://www.example.com/n2 + + bar2 + + + +Then, by the inference rule (name) in , we have + + + + + http://www.example.com/n1 + bar1 + + + + + +and + + + + + http://www.example.com/n2 + bar2 + + + + + + +By the inference rule (empty) in , +we have + + + + + + + + + + +and + + + + + + + + + + +Thus by the inference rule (element) in , we have + + + + + + + + + bar1 + + + + + +Note that we have chosen , since any context is allowed. + +Likewise, we have + + + + + + + + + bar2 + + + + + +By the inference rule (group) in , we have + + + + + + + + + + + + + bar1 + + + + + bar2 + + + + + + +By the inference rule (element) in , we have + + + + + + + + + foo + + + + + + + + foo + + + + + +Here is an arbitrary +context. + +Thus we can apply the inference rule (valid) in and obtain + + + + + + + +
    + +
    + +
    +Restrictions + +The following constraints are all checked after the grammar has +been transformed to the simple form described in . The purpose of these restrictions is to +catch user errors and to facilitate implementation. + +
    +Contextual restrictions + +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 prohibited path to +describe these restrictions. A path is a sequence of NCNames separated +by / or //. + + + +An element matches a path +x, where x is an +NCName, if and only if the local name of the element is +x + +An element matches a path +x/p, +where x is an NCName and +p is a path, if and only if the local name +of the element is x and the element has a +child that matches p + +An element matches a path +x//p, +where x is an NCName and +p is a path, if and only if the local name +of the element is x and the element has a +descendant that matches p + + + +For example, the element + + + + + +]]> + +matches the paths foo, +foo/bar, foo//bar, +foo//baz, foo/bar/baz, +foo/bar//baz and foo//bar/baz, +but not foo/baz or +foobar. + +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. + +
    +<literal>attribute</literal> pattern + +The following paths are prohibited: + + +attribute//ref +attribute//attribute + + +
    + +
    +<literal>oneOrMore</literal> pattern + +The following paths are prohibited: + + +oneOrMore//group//attribute +oneOrMore//interleave//attribute + + +
    + +
    +<literal>list</literal> pattern + +The following paths are prohibited: + + +list//list +list//ref +list//attribute +list//text +list//interleave + +
    + +
    +<literal>except</literal> in <literal>data</literal> pattern + +The following paths are prohibited: + + +data/except//attribute +data/except//ref +data/except//text +data/except//list +data/except//group +data/except//interleave +data/except//oneOrMore +data/except//empty + + +This implies that an except element +with a data parent can contain only +data, value and +choice elements. + +
    + +
    +<literal>start</literal> element + +The following paths are prohibited: + + +start//attribute +start//data +start//value +start//text +start//list +start//group +start//interleave +start//oneOrMore +start//empty + +
    + +
    + +
    +String sequences + +RELAX NG does not allow a pattern such as: + + + + + + + + +]]> + +Nor does it allow a pattern such as: + + + + + + +]]> + +More generally, if the pattern for the content of an element or +attribute contains + + + +a pattern that can match a child +(that is, an element, data, +value, list or +text pattern), and + +a pattern that matches a single string (that is, a +data, value or +list pattern), + + + +then the two patterns must be alternatives to each other. + +This rule does not apply to patterns occurring within a +list pattern. + +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. + + + + + +returns the empty content-type + + + + +returns the complex content-type + + + + +returns the simple content-type + + + +ranges over content-types + + + + + + + + +asserts that the content-types and +are groupable + + + + +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. + + + + + + + + + + + + + + + + + + + + + + +Some patterns have a content-type. We use the following +additional notation. + + + + + + + + + +asserts that pattern has +content-type + + + + + + + + +returns the maximum of and where the +content-types in increasing order are , +, + + + + +The following rules define when a pattern has a content-type and, +if so, what it is. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +The antecedent in the (data 2) rule above is in fact +redundant because of the prohibited paths in . + +Now we can describe the restriction. We use the following +notation. + + + + + + +asserts that the schema is incorrect + + + + +All patterns occurring as the content of an element pattern must +have a content-type. + + + + + + + + + + + + + + + + + + + + +
    + +
    +Restrictions on attributes + +Duplicate attributes are not allowed. More precisely, for a +pattern <group> p1 +p2 </group> or +<interleave> p1 +p2 </interleave>, there must +not be a name that belongs to both the name class of an +attribute pattern occurring in +p1 and the name class of an +attribute pattern occurring in +p2. A pattern p1 +is defined to occur in a pattern +p2 if + + + +p1 is +p2, or + +p2 is a +choice, interleave, +group or oneOrMore element and +p1 occurs in one or more children of +p2. + + + +Attributes using infinite name classes must be repeated. More +precisely, an attribute element that has an +anyName or nsName descendant +element must have a oneOrMore ancestor +element. + +This restriction is necessary for closure under +negation. + +
    + +
    +Restrictions on <literal>interleave</literal> + +For a pattern <interleave> +p1 p2 +</interleave>, + + + +there must not be a name that belongs to both the name +class of an element pattern referenced by a +ref pattern occurring in +p1 and the name class of an +element pattern referenced by a +ref pattern occurring in +p2, and + +a text pattern must not occur in +both p1 and +p2. + + + + defines when one +pattern is considered to occur in another pattern. + +
    + +
    + +
    +Conformance + +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. + +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 . 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 externalRef or +include 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. + +
    + + +RELAX NG schema for RELAX NG + + + + + + +Changes since version 0.9 + +The changes in this version relative to version 0.9 +are as follows: + + + +in the namespace URI, 0.9 has been +changed to 1.0 + +data/except//empty has been added +as a prohibited path (see ) + +start//empty has been added +as a prohibited path (see ) + + now specifies how a +list element with more than one child element is +transformed + + now specifies how a +notAllowed element occurring in an +except element is transformed + +although a relative URI is not allowed as the value of +the ns and datatypeLibrary +attributes, an empty string is allowed (see ) + +the removal of unreachable definitions in is now correctly specified + + now specifies that +define elements that are no longer reachable are +removed + + has been added; the +restrictions on the contents of except in name +classes that are now specified in the newly added section were +previously specified in a subsection of , which has been +removed + +the treatment of element and attribute values that +consist only of whitespace has been refined (see and ) + +attributes with infinite name classes are now required +to be repeated (see ) + +restrictions have been imposed on +interleave (see ); list//interleave +has been added as a prohibited path (see ) + +some of the prohibited paths in have been corrected to use +ref rather than +element + +an error in the inference rule (text 1) in has been corrected + +the value of the ns attribute is +now unconstrained (see ) + + + + + + +RELAX NG TC (Non-Normative) + +This specification was prepared and approved for publication by +the RELAX NG TC. The current members of the TC are: + + +Fabio Arciniegas +James Clark +Mike Fitzgerald +KAWAGUCHI Kohsuke +Josh Lubell +MURATA Makoto +Norman Walsh +David Webber + + + + +References + +Normative + +XML 1.0Tim Bray, +Jean Paoli, and +C. M. Sperberg-McQueen, Eve Maler, editors. +Extensible Markup +Language (XML) 1.0 Second Edition. +W3C (World Wide Web Consortium), 2000. + +XML NamespacesTim Bray, +Dave Hollander, +and Andrew Layman, editors. +Namespaces in +XML. +W3C (World Wide Web Consortium), 1999. + +XLinkSteve DeRose, Eve Maler +and David Orchard, editors. +XML Linking +Language (XLink) Version 1.0. +W3C (World Wide Web Consortium), 2001. + +XML InfosetJohn Cowan, Richard Tobin, +editors. +XML +Information Set. +W3C (World Wide Web Consortium), 2001. + +RFC 2396T. Berners-Lee, R. Fielding, L. Masinter. +RFC 2396: +Uniform Resource Identifiers (URI): Generic +Syntax. +IETF (Internet Engineering Task Force). 1998. + +RFC 2732R. Hinden, B. Carpenter, L. Masinter. +RFC 2732: Format for Literal IPv6 Addresses in URL's. +IETF (Internet Engineering Task Force), 1999. + +RFC 3023 M. Murata, +S. St.Laurent, D. Kohn. RFC 3023: XML Media +Types. IETF (Internet Engineering Task Force), +2001. + + + +Non-Normative + +W3C XML Schema DatatypesPaul V. Biron, Ashok Malhotra, editors. +XML Schema Part 2: Datatypes. +W3C (World Wide Web Consortium), 2001. + +TREXJames Clark. +TREX - Tree Regular Expressions for XML. +Thai Open Source Software Center, 2001. + +RELAXMURATA Makoto. +RELAX (Regular +Language description for XML). INSTAC +(Information Technology Research and Standardization Center), 2001. + +XML Schema FormalAllen Brown, +Matthew Fuchs, Jonathan Robie, Philip Wadler, editors. +XML Schema: Formal Description. +W3C (World Wide Web Consortium), 2001. + +TutorialJames Clark, +Makoto MURATA, editors. RELAX +NG Tutorial. OASIS, 2001. + + + + + +
    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 @@ + + + + + + + + + + + + + + + + + + + + + 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 @@ + +Daniel Veillard +daniel@veillard.com +For libxml2 implementation of Relax NG spec. + +Test of node matches + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Test of indeterminism + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Test of grammars merging + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    + + +

    + +

    + + +

    + +

    +
    + + + + +

    + + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    + + +

    + +

    + + +

    + +

    +
    + +

    + +

    +
    + +

    + +

    +
    + + + + + + + + + + +

    + + +

    +
    + +

    + + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    + + +

    + +

    + + +

    + +

    +
    + +

    + +

    +
    + +

    + +

    +
    + +

    + +

    +
    + +

    + +

    +
    + +

    + +

    +
    + + + + + + + + + + + + + + + + + + + +

    + + +

    +
    + +

    + + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    + + +

    + +

    + + +

    + +

    +
    + +

    + +

    +
    + +

    + +

    +
    + +

    + +

    +
    + +

    + +

    +
    + +

    + +

    +
    + +

    + +

    +
    + +

    + +

    +
    + +

    + +

    +
    + + + + + + + + + + + + + + + + + + + +

    + + +

    +
    + +

    + + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + +

    + + + + + + + + + + + + + + +

    + + + + + + +

    + + + + + + +Test of ID/IDREF + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Test of ENTITY/ENTITIES + + + + + + + + + + +foo + + +foo + + + foo + + +foo bar + + + + + + + + + + + + +foo + + + foo bar + + + foo bar foo + + +foo bar + + + + +Test of Mixed + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + mixed + + + + + + + + mixed + + + + + + + is + + inter + + mixed + + + + + + + mixed + + . + + + + + + this + + is + + inter + + mixed + + . + + + + + + 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 @@ + + + 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 @@ + + + + + + + + + + + + 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 @@ + + + foobar + + 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 @@ + 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 @@ + 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 @@ + 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 @@ + 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 @@ + 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 @@ + 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 @@ + + + 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 @@ + 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 @@ + 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 @@ + 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 @@ + 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 @@ + + + + + + + + + + + + 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 @@ + + foobar + 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 @@ + + + + + + + + + + + + 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 @@ + + foobar + 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 @@ + + + + + + + + + + + + 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 @@ + + foobar + 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 @@ + + + + + + + + + + + + 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 @@ + + foobar + 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 @@ + + + + + + + + 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 @@ + + + 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 @@ + + + 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 @@ + + + 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 @@ + + + + + + + + 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 @@ + + + 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 @@ + + + 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 @@ + + + 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 @@ + + + + + + + + + + + + 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 @@ + + + foobar + + 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 @@ + + + + + + + + + + + + + + + + + + + + + + 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 @@ + + + + + + + + + + + + + + + + + + + + + + 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 @@ + + + foo + bar + this guy is annoying ! + + 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 @@ + + + + + + + + + + + + + + + + +"> + +'"> + + + + + + + + + +amp, +lt, +gt, +apos, +quot"> + + + + + +]> + + + + + +

    +Extensible Markup Language (XML) 1.0 + +REC-xml-&iso6.doc.date; +W3C Recommendation +&draft.day;&draft.month;&draft.year; + + + +http://www.w3.org/TR/1998/REC-xml-&iso6.doc.date; + +http://www.w3.org/TR/1998/REC-xml-&iso6.doc.date;.xml + +http://www.w3.org/TR/1998/REC-xml-&iso6.doc.date;.html + +http://www.w3.org/TR/1998/REC-xml-&iso6.doc.date;.pdf + +http://www.w3.org/TR/1998/REC-xml-&iso6.doc.date;.ps + + + +http://www.w3.org/TR/REC-xml + + + +http://www.w3.org/TR/PR-xml-971208 + + + +Tim Bray +Textuality and Netscape +tbray@textuality.com +Jean Paoli +Microsoft +jeanpa@microsoft.com +C. M. Sperberg-McQueen +University of Illinois at Chicago +cmsmcq@uic.edu + + +

    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.

    +
    + +

    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.

    +

    +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 http://www.w3.org/XML. A list of +current W3C Recommendations and other technical documents can be found +at http://www.w3.org/TR. +

    +

    This specification uses the term URI, which is defined by , a work in progress expected to update and . +

    +

    The list of known errors in this specification is +available at +http://www.w3.org/XML/xml-19980210-errata.

    +

    Please report errors in this document to +xml-editor@w3.org. +

    +
    + + + +

    Chicago, Vancouver, Mountain View, et al.: +World-Wide Web Consortium, XML Working Group, 1996, 1997.

    +
    + +

    Created in electronic form.

    +
    + +English +Extended Backus-Naur Form (formal grammar) + + + +1997-12-03 : CMSMcQ : yet further changes +1997-12-02 : TB : further changes (see TB to XML WG, +2 December 1997) +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 < in attriubte values +uppercase hex characters, +namechar list, + +1997-12-01 : JB : add some column-width parameters +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!). + +1997-10-08 : TB : Removed %-constructs again, new rules +for PE appearance. +1997-10-01 : TB : Case-sensitive markup; cleaned up +element-type defs, lotsa little edits for style +1997-09-25 : TB : Change to elm's new DTD, with +substantial detail cleanup as a side-effect +1997-07-24 : CMSMcQ : correct error (lost *) in definition +of ignoreSectContents (thanks to Makoto Murata) +Allow all empty elements to have end-tags, consistent with +SGML TC (as per JJC). +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. + +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. +1997-06-29 : TB : various edits +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 (?). + +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. +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. +1997-04-01 : CMSMcQ : corrections from JJC, EM, HT, and self +1997-03-31 : Tim Bray : many changes +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. +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 only 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.) +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'. +1997-03-21 : TB : massive changes on plane flight from Chicago +to Vancouver +1997-03-21 : CMSMcQ : correct as many reported errors as possible. + +1997-03-20 : CMSMcQ : correct typos listed in CMSMcQ hand copy of spec. +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 &nbsp; +and define nbsp as &#160;, and refill a lot of paragraphs for +legibility. +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. + +1996-11-11 : CMSMcQ : revise for style. +Add new rhs to entity declaration, for parameter entities. +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. +1996-10-31 : TB : Add Entity Handling section +1996-10-30 : TB : Clean up term & termdef. Slip in +ERB decision re EMPTY. +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. +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 only 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. +1996-10-16 : TB : track down & excise all DSD references; +introduce some EBNF for entity declarations. +1996-10-?? : TB : consistency check, fix up scraps so +they all parse, get formatter working, correct a few productions. +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. +1996-10-10 : TB : eliminate name recognizers (and more?) +1996-10-09 : CMSMcQ : revise for style, consistency through 2.3 +(Characters) +1996-10-09 : CMSMcQ : re-unite everything for convenience, +at least temporarily, and revise quickly +1996-10-08 : TB : first major homogenization pass +1996-10-08 : TB : turn "current" attribute on div type into +CDATA +1996-10-02 : TB : remould into skeleton + entities +1996-09-30 : CMSMcQ : add a few more sections prior to exchange + with Tim. +1996-09-20 : CMSMcQ : finish transcribing notes. +1996-09-19 : CMSMcQ : begin transcribing notes for draft. +1996-09-13 : CMSMcQ : made outline from notes of 09-06, +do some housekeeping + + +
    + + +Introduction +

    Extensible Markup Language, abbreviated XML, describes a class of +data objects called XML documents 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 . +By construction, XML documents +are conforming SGML documents. +

    +

    XML documents are made up of storage units called entities, which contain either parsed +or unparsed data. +Parsed data is made up of characters, +some +of which form character data, +and some of which form markup. +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.

    +

    A software module +called an XML processor is used to read XML documents +and provide access to their content and structure. It is assumed that an XML processor is +doing its work on behalf of another module, called the +application. 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.

    + + +Origin and Goals +

    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. +

    +

    The design goals for XML are: +

    XML shall be straightforwardly usable over the +Internet.

    +

    XML shall support a wide variety of applications.

    +

    XML shall be compatible with SGML.

    +

    It shall be easy to write programs which process XML +documents.

    +

    The number of optional features in XML is to be kept to the +absolute minimum, ideally zero.

    +

    XML documents should be human-legible and reasonably +clear.

    +

    The XML design should be prepared quickly.

    +

    The design of XML shall be formal and concise.

    +

    XML documents shall be easy to create.

    +

    Terseness in XML markup is of minimal importance.

    +

    +

    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.

    +

    This version of the XML specification + +&doc.distribution;.

    + +
    + + + + + +Terminology + +

    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: + + + +

    Conforming documents and XML +processors are permitted to but need not behave as +described.

    + + + +

    Conforming documents and XML processors +are required to behave as described; otherwise they are in 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.

    +
    + + +

    An error +which a conforming XML processor +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). +

    +
    + + +

    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.

    +
    + + +

    A rule which applies to all +valid XML documents. +Violations of validity constraints are errors; they must, at user option, +be reported by +validating XML processors.

    +
    + + +

    A rule which applies to all well-formed XML documents. +Violations of well-formedness constraints are +fatal errors.

    +
    + + + +

    (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 +. + +

    +
    + + +

    A feature of +XML included solely to ensure that XML remains compatible with SGML. +

    +
    + + +

    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;.

    +
    + +

    +
    + + +
    + + + +Documents + +

    +A data object is an +XML document if it is +well-formed, as +defined in this specification. +A well-formed XML document may in addition be +valid if it meets certain further +constraints.

    + +

    Each XML document has both a logical and a physical structure. +Physically, the document is composed of units called entities. An entity may refer to other entities to cause their +inclusion in the document. A document begins in a "root" or document entity. +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 . +

    + + +Well-Formed XML Documents + +

    +A textual object is +a well-formed XML document if: + +

    Taken as a whole, it +matches the production labeled document.

    +

    It +meets all the well-formedness constraints given in this specification.

    +
    +

    Each of the parsed entities +which is referenced directly or indirectly within the document is +well-formed.

    +

    +

    + +Document +document +prolog +element +Misc* + +

    +

    Matching the document production +implies that: + +

    It contains one or more +elements.

    + + +

    There is exactly +one element, called the root, or document element, no +part of which appears in the content of any other element. +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. +

    + +

    +

    As a consequence +of this, +for each non-root element +C in the document, there is one other element P +in the document such that +C is in the content of P, but is not in +the content of any other element that is in the content of +P. +P is referred to as the +parent of C, and C as a +child of P.

    + + +Characters + +

    A parsed entity contains +text, a sequence of +characters, +which may represent markup or character data. +A character +is an atomic unit of text as specified by +ISO/IEC 10646 . +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 , is discouraged. + + +Character Range + +Char +#x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] +| [#x10000-#x10FFFF] +any Unicode character, excluding the +surrogate blocks, FFFE, and FFFF. + + +

    + +

    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 . +

    + +
    + + +Common Syntactic Constructs + +

    This section defines some symbols used widely in the grammar.

    +

    S (white space) consists of one or more space (#x20) +characters, carriage returns, line feeds, or tabs. + + +White Space + +S +(#x20 | #x9 | #xD | #xA)+ + + +

    +

    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 .

    +

    A Name 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. +Names beginning with the string "xml", or any string +which would match (('X'|'x') ('M'|'m') ('L'|'l')), are +reserved for standardization in this or future versions of this +specification. +

    + +

    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.

    +
    +

    An +Nmtoken (name token) is any mixture of +name characters. + +Names and Tokens +NameChar +Letter +| Digit +| '.' | '-' | '_' | ':' +| CombiningChar +| Extender + +Name +(Letter | '_' | ':') +(NameChar)* +Names +Name +(S Name)* +Nmtoken +(NameChar)+ +Nmtokens +Nmtoken (S Nmtoken)* + +

    +

    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 +(EntityValue), +the values of attributes (AttValue), +and external identifiers +(SystemLiteral). +Note that a SystemLiteral +can be parsed without scanning for markup. + +Literals +EntityValue +'"' +([^%&"] +| PEReference +| Reference)* +'"' + +|  +"'" +([^%&'] +| PEReference +| Reference)* +"'" + +AttValue +'"' +([^<&"] +| Reference)* +'"' + +|  +"'" +([^<&'] +| Reference)* +"'" + +SystemLiteral +('"' [^"]* '"') | ("'" [^']* "'") + + +PubidLiteral +'"' PubidChar* +'"' +| "'" (PubidChar - "'")* "'" + +PubidChar +#x20 | #xD | #xA +| [a-zA-Z0-9] +| [-'()+,./:=?;!*#@$_%] + + +

    + +
    + + +Character Data and Markup + +

    Text consists of intermingled +character +data and markup. +Markup takes the form of +start-tags, +end-tags, +empty-element tags, +entity references, +character references, +comments, +CDATA section delimiters, +document type declarations, and +processing instructions. + +

    +

    All text that is not markup +constitutes the character data of +the document.

    +

    The ampersand character (&) and the left angle bracket (<) +may appear in their literal form only when used as markup +delimiters, or within a comment, a +processing instruction, +or a CDATA section. + +They are also legal within the literal entity +value of an internal entity declaration; see +. + +If they are needed elsewhere, +they must be escaped +using either numeric character references +or the strings +"&amp;" and "&lt;" respectively. +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. +

    +

    +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, "]]>".

    +

    +To allow attribute values to contain both single and double quotes, the +apostrophe or single-quote character (') may be represented as +"&apos;", and the double-quote character (") as +"&quot;". + +Character Data + +CharData +[^<&]* - ([^<&]* ']]>' [^<&]*) + + +

    +
    + + +Comments + +

    Comments may +appear anywhere in a document outside other +markup; in addition, +they may appear within the document type declaration +at places allowed by the grammar. +They are not part of the document's character +data; an XML +processor may, but need not, make it possible for an application to +retrieve the text of comments. +For compatibility, the string +"--" (double-hyphen) must not occur within +comments. + +Comments +Comment +'<!--' +((Char - '-') +| ('-' (Char - '-')))* +'-->' + + +

    +

    An example of a comment: +<!&como; declarations for <head> & <body> &comc;> +

    +
    + + +Processing Instructions + +

    Processing +instructions (PIs) allow documents to contain instructions +for applications. + + +Processing Instructions +PI +'<?' PITarget +(S +(Char* - +(Char* &pic; Char*)))? +&pic; +PITarget +Name - +(('X' | 'x') ('M' | 'm') ('L' | 'l')) + + +PIs are not part of the document's character +data, but must be passed through to the application. The +PI begins with a target (PITarget) used +to identify the application to which the instruction is directed. +The target names "XML", "xml", and so on are +reserved for standardization in this or future versions of this +specification. +The +XML Notation mechanism +may be used for +formal declaration of PI targets. +

    +
    + + +CDATA Sections + +

    CDATA sections +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 "<![CDATA[" and end with the string +"]]>": + +CDATA Sections +CDSect +CDStart +CData +CDEnd +CDStart +'<![CDATA[' + +CData +(Char* - +(Char* ']]>' Char*)) + + +CDEnd +']]>' + + + +Within a CDATA section, only the CDEnd 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 +"&lt;" and "&amp;". CDATA sections +cannot nest. +

    + +

    An example of a CDATA section, in which "<greeting>" and +"</greeting>" +are recognized as character data, not +markup: +<![CDATA[<greeting>Hello, world!</greeting>]]> +

    +
    + + +Prolog and Document Type Declaration + +

    XML documents +may, and should, +begin with an XML declaration which specifies +the version of +XML being used. +For example, the following is a complete XML document, well-formed but not +valid: + +Hello, world! +]]> +and so is this: +Hello, world! +]]> +

    + +

    The version number "1.0" should be used to indicate +conformance to this version of this specification; it is an error +for a document to use the value "1.0" +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 "1.0", 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. +

    +

    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 document type declaration, to define +constraints on the logical structure and to support the use of +predefined storage units. + +An XML document is +valid if it has an associated document type +declaration and if the document +complies with the constraints expressed in it.

    +

    The document type declaration must appear before +the first element in the document. + +Prolog + +prolog +XMLDecl? +Misc* +(doctypedecl +Misc*)? +XMLDecl +&xmlpio; +VersionInfo +EncodingDecl? +SDDecl? +S? +&pic; + +VersionInfo +S 'version' Eq +(' VersionNum ' +| " VersionNum ") + +Eq +S? '=' S? + +VersionNum +([a-zA-Z0-9_.:] | '-')+ + +Misc +Comment | PI | +S + +

    + +

    The XML +document type declaration +contains or points to +markup declarations +that provide a grammar for a +class of documents. +This grammar is known as a document type definition, +or DTD. +The document type declaration can point to an external subset (a +special kind of +external entity) 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. +

    +

    +A markup declaration is +an element type declaration, +an attribute-list declaration, +an entity declaration, or +a notation declaration. + +These declarations may be contained in whole or in part +within parameter entities, +as described in the well-formedness and validity constraints below. +For fuller information, see +.

    + +Document Type Definition + +doctypedecl +'<!DOCTYPE' S +Name (S +ExternalID)? +S? ('[' +(markupdecl +| PEReference +| S)* +']' +S?)? '>' + + +markupdecl +elementdecl +| AttlistDecl +| EntityDecl +| NotationDecl +| PI +| Comment + + + + + + + + +

    The markup declarations may be made up in whole or in part of +the replacement text of +parameter entities. +The productions later in this specification for +individual nonterminals (elementdecl, +AttlistDecl, and so on) describe +the declarations after all the parameter entities have been +included.

    + + +Root Element Type +

    +The Name in the document type declaration must +match the element type of the root element. +

    +
    + + +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.

    +
    + +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.) +

    +
    +

    +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 +markupdecl, interspersed with white space +or parameter-entity references. +However, portions of the contents +of the +external subset or of external parameter entities may conditionally be ignored +by using +the conditional section +construct; this is not allowed in the internal subset. + + +External Subset + +extSubset +TextDecl? +extSubsetDecl +extSubsetDecl +( +markupdecl +| conditionalSect +| PEReference +| S +)* + + +

    +

    The external subset and external parameter entities also differ +from the internal subset in that in them, +parameter-entity references +are permitted within markup declarations, +not only between markup declarations.

    +

    An example of an XML document with a document type declaration: + + +Hello, world! +]]> +The system identifier +"hello.dtd" gives the URI of a DTD for the document.

    +

    The declarations can also be given locally, as in this +example: + + +]> +Hello, world! +]]> +If both the external and internal subsets are used, the +internal subset is considered to occur before the external subset. + +This has the effect that entity and attribute-list declarations in the +internal subset take precedence over those in the external subset. +

    +
    + + +Standalone Document Declaration +

    Markup declarations can affect the content of the document, +as passed from an XML processor +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 document entity. + +Standalone Document Declaration + +SDDecl + +S +'standalone' Eq +(("'" ('yes' | 'no') "'") | ('"' ('yes' | 'no') '"')) + + + +

    +

    +In a standalone document declaration, the value "yes" indicates +that there +are no markup declarations external to the document +entity (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 "no" indicates that there are or may be such +external markup declarations. +Note that the standalone document declaration only +denotes the presence of external declarations; the presence, in a +document, of +references to external entities, when those entities are +internally declared, +does not change its standalone status.

    +

    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 "no" is assumed.

    +

    Any XML document for which standalone="no" holds can +be converted algorithmically to a standalone document, +which may be desirable for some network delivery applications.

    + +Standalone Document Declaration +

    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 &magicents;), +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. +

    +
    + +
    +

    An example XML declaration with a standalone document declaration:<?xml version="&XML.version;" standalone='yes'?>

    +
    + +White Space Handling + +

    In editing XML documents, it is often convenient to use "white space" +(spaces, tabs, and blank lines, denoted by the nonterminal +S 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.

    +

    An XML processor +must always pass all characters in a document that are not +markup through to the application. A +validating XML processor must also inform the application +which of these characters constitute white space appearing +in element content. +

    +

    A special attribute +named xml:space 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 +declared if it is used. +When declared, it must be given as an +enumerated type whose only +possible values are "default" and "preserve". +For example:]]>

    +

    The value "default" signals that applications' +default white-space processing modes are acceptable for this element; the +value "preserve" 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 xml:space attribute. +

    +

    The root element 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. +

    + +
    + +End-of-Line Handling +

    XML parsed entities 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).

    +

    To simplify the tasks of applications, +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.) +

    +
    + +Language Identification +

    In document processing, it is often useful to +identify the natural or formal language +in which the content is +written. +A special attribute named +xml:lang 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 +declared if it is used. +The values of the attribute are language identifiers as defined +by , "Tags for the Identification of Languages": + +Language Identification +LanguageID +Langcode +('-' Subcode)* +Langcode +ISO639Code | +IanaCode | +UserCode + +ISO639Code +([a-z] | [A-Z]) ([a-z] | [A-Z]) +IanaCode +('i' | 'I') '-' ([a-z] | [A-Z])+ +UserCode +('x' | 'X') '-' ([a-z] | [A-Z])+ +Subcode +([a-z] | [A-Z])+ + +The Langcode may be any of the following: + +

    a two-letter language code as defined by +, "Codes +for the representation of names of languages"

    +

    a language identifier registered with the Internet +Assigned Numbers Authority ; these begin with the +prefix "i-" (or "I-")

    +

    a language identifier assigned by the user, or agreed on +between parties in private use; these must begin with the +prefix "x-" or "X-" in order to ensure that they do not conflict +with names later standardized or registered with IANA

    +

    +

    There may be any number of Subcode segments; if +the first +subcode segment exists and the Subcode consists of two +letters, then it must be a country code from +, "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 Langcode begins with the prefix +"x-" or +"X-".

    +

    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.

    +

    For example: +The quick brown fox jumps over the lazy dog.

    +

    What colour is it?

    +

    What color is it?

    + + Habe nun, ach! Philosophie, + Juristerei, und Medizin + und leider auch Theologie + durchaus studiert mit heißem Bemüh'n. + ]]>

    + +

    The intent declared with xml:lang is considered to apply to +all attributes and content of the element where it is specified, +unless overridden with an instance of xml:lang +on another element within that content.

    + +

    A simple declaration for xml:lang might take +the form +xml:lang NMTOKEN #IMPLIED +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: + + + ]]> +

    + +
    +
    + + + +Logical Structures + +

    Each XML document contains one or more +elements, the boundaries of which are +either delimited by start-tags +and end-tags, or, for empty elements, by an empty-element tag. Each element has a type, +identified by name, sometimes called its "generic +identifier" (GI), and may have a set of +attribute specifications. Each attribute specification +has a name and a value. +

    +Element +element +EmptyElemTag +| STag content +ETag + + + + +

    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 (('X'|'x')('M'|'m')('L'|'l')) +are reserved for standardization in this or future versions of this +specification. +

    + +Element Type Match +

    +The Name in an element's end-tag must match +the element type in +the start-tag. +

    +
    + +Element Valid +

    An element is +valid if +there is a declaration matching +elementdecl where the +Name matches the element type, and +one of the following holds:

    + +

    The declaration matches EMPTY and the element has no +content.

    +

    The declaration matches children and +the sequence of +child elements +belongs to the language generated by the regular expression in +the content model, with optional white space (characters +matching the nonterminal S) between each pair +of child elements.

    +

    The declaration matches Mixed and +the content consists of character +data and child elements +whose types match names in the content model.

    +

    The declaration matches ANY, and the types +of any child elements have +been declared.

    +
    +
    + + +Start-Tags, End-Tags, and Empty-Element Tags + +

    The beginning of every +non-empty XML element is marked by a start-tag. + +Start-tag + +STag +'<' Name +(S Attribute)* +S? '>' + + +Attribute +Name Eq +AttValue + + + + + +The Name in +the start- and end-tags gives the +element's type. + +The Name-AttValue pairs are +referred to as +the attribute specifications of the element, +with the +Name in each pair +referred to as the attribute name and +the content of the +AttValue (the text between the +' or " delimiters) +as the attribute value. +

    + +Unique Att Spec +

    +No attribute name may appear more than once in the same start-tag +or empty-element tag. +

    +
    + +Attribute Value Type +

    +The attribute must have been declared; the value must be of the type +declared for it. +(For attribute types, see .) +

    +
    + +No External Entity References +

    +Attribute values cannot contain direct or indirect entity references +to external entities. +

    +
    + +No < in Attribute Values +

    The replacement text of any entity +referred to directly or indirectly in an attribute +value (other than "&lt;") must not contain +a <. +

    +

    An example of a start-tag: +<termdef id="dt-dog" term="dog">

    +

    The end of every element +that begins with a start-tag must +be marked by an end-tag +containing a name that echoes the element's type as given in the +start-tag: + +End-tag + +ETag +'</' Name +S? '>' + + +

    +

    An example of an end-tag:</termdef>

    +

    The +text between the start-tag and +end-tag is called the element's +content: + +Content of Elements + +content +(element | CharData +| Reference | CDSect +| PI | Comment)* + + + +

    +

    If an element is empty, +it must be represented either by a start-tag immediately followed +by an end-tag or by an empty-element tag. +An +empty-element tag takes a special form: + +Tags for Empty Elements + +EmptyElemTag +'<' Name (S +Attribute)* S? +'/>' + + + + +

    +

    Empty-element tags may be used for any element which has no +content, whether or not it is declared using the keyword +EMPTY. +For interoperability, the empty-element +tag must be used, and can only be used, for elements which are +declared EMPTY.

    +

    Examples of empty elements: +<IMG align="left" + src="http://www.w3.org/Icons/WWW/w3c_home" /> +<br></br> +<br/>

    +
    + + +Element Type Declarations + +

    The element structure of an +XML document may, for +validation purposes, +be constrained +using element type and attribute-list declarations. +An element type declaration constrains the element's +content. +

    + +

    Element type declarations often constrain which element types can +appear as children 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.

    +

    An element +type declaration takes the form: + +Element Type Declaration + +elementdecl +'<!ELEMENT' S +Name +S +contentspec +S? '>' + +contentspec +'EMPTY' +| 'ANY' +| Mixed +| children + + + + +where the Name gives the element type +being declared. +

    + + +Unique Element Type Declaration +

    +No element type may be declared more than once. +

    +
    + +

    Examples of element type declarations: +<!ELEMENT br EMPTY> +<!ELEMENT p (#PCDATA|emph)* > +<!ELEMENT %name.para; %content.para; > +<!ELEMENT container ANY>

    + + +Element Content + +

    An element type has +element content when elements of that +type must contain only child +elements (no character data), optionally separated by +white space (characters matching the nonterminal +S). + +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 (cps), which consist of names, +choice lists of content particles, or +sequence lists of content particles: + +Element-content Models + +children +(choice +| seq) +('?' | '*' | '+')? +cp +(Name +| choice +| seq) +('?' | '*' | '+')? +choice +'(' S? cp +( S? '|' S? cp )* +S? ')' + +seq +'(' S? cp +( S? ',' S? cp )* +S? ')' + + + + +where each Name is the type of an element which may +appear as a child. +Any content +particle in a choice list may appear in the element content at the location where +the choice list appears in the grammar; +content particles occurring in a sequence list must each +appear in the element content 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 (+), zero or more (*), or zero or +one times (?). +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.

    +

    +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. For compatibility, 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 . + + +

    + +Proper Group/PE Nesting +

    Parameter-entity +replacement text must be properly nested +with parenthetized 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 ,). +

    +
    +

    Examples of element-content models: +<!ELEMENT spec (front, body, back?)> +<!ELEMENT div1 (head, (p | list | note)*, div2*)> +<!ELEMENT dictionary-body (%div.mix; | %dict.mix;)*>

    +
    + + +Mixed Content + +

    An element +type has +mixed content when elements of that type may contain +character data, optionally interspersed with +child elements. +In this case, the types of the child elements +may be constrained, but not their order or their number of occurrences: + +Mixed-content Declaration + +Mixed +'(' S? +'#PCDATA' +(S? +'|' +S? +Name)* +S? +')*' +| '(' S? '#PCDATA' S? ')' + + + + + + +where the Names give the types of elements +that may appear as children. +

    + +No Duplicate Types +

    The same name must not appear more than once in a single mixed-content +declaration. +

    +

    Examples of mixed content declarations: +<!ELEMENT p (#PCDATA|a|ul|b|i|em)*> +<!ELEMENT p (#PCDATA | %font; | %phrase; | %special; | %form;)* > +<!ELEMENT b (#PCDATA)>

    +
    +
    + + +Attribute-List Declarations + +

    Attributes are used to associate +name-value pairs with elements. +Attribute specifications may appear only within start-tags +and empty-element tags; +thus, the productions used to +recognize them appear in . +Attribute-list +declarations may be used: + +

    To define the set of attributes pertaining to a given +element type.

    +

    To establish type constraints for these +attributes.

    +

    To provide default values +for attributes.

    + +

    +

    +Attribute-list declarations specify the name, data type, and default +value (if any) of each attribute associated with a given element type: + +Attribute-list Declaration +AttlistDecl +'<!ATTLIST' S +Name +AttDef* +S? '>' + +AttDef +S Name +S AttType +S DefaultDecl + + +The Name in the +AttlistDecl 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 Name in the +AttDef rule is +the name of the attribute.

    +

    +When more than one AttlistDecl 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. +For interoperability, 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. +

    + + +Attribute Types + +

    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: + +Attribute Types + +AttType +StringType +| TokenizedType +| EnumeratedType + + +StringType +'CDATA' + +TokenizedType +'ID' + + + +| 'IDREF' + +| 'IDREFS' + +| 'ENTITY' + +| 'ENTITIES' + +| 'NMTOKEN' + +| 'NMTOKENS' + + + +

    + +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. +

    +
    + +One ID per Element Type +

    No element type may have more than one ID attribute specified.

    +
    + +ID Attribute Default +

    An ID attribute must have a declared default of #IMPLIED or +#REQUIRED.

    +
    + +IDREF +

    +Values of type IDREF must match +the Name production, and +values of type IDREFS must match +Names; +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. +

    +
    + +Entity Name +

    +Values of type ENTITY +must match the Name production, +values of type ENTITIES must match +Names; +each Name must +match the +name of an unparsed entity declared in the +DTD. +

    +
    + +Name Token +

    +Values of type NMTOKEN must match the +Nmtoken production; +values of type NMTOKENS must +match Nmtokens. +

    +
    + +

    Enumerated attributes can take one +of a list of values provided in the declaration. There are two +kinds of enumerated types: + +Enumerated Attribute Types +EnumeratedType +NotationType +| Enumeration + +NotationType +'NOTATION' +S +'(' +S? +Name +(S? '|' S? +Name)* +S? ')' + + +Enumeration +'(' S? +Nmtoken +(S? '|' +S? +Nmtoken)* +S? +')' + + +A NOTATION attribute identifies a +notation, declared in the +DTD with associated system and/or public identifiers, to +be used in interpreting the element to which the attribute +is attached. +

    + + +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. +

    +
    + +Enumeration +

    +Values of this type +must match one of the Nmtoken tokens in the +declaration. +

    +
    +

    For interoperability, the same +Nmtoken should not occur more than once in the +enumerated attribute types of a single element type. +

    +
    + + +Attribute Defaults + +

    An attribute declaration 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. + +Attribute Defaults + +DefaultDecl +'#REQUIRED' +| '#IMPLIED' +| (('#FIXED' S)? AttValue) + + + + + + + + +

    +

    In an attribute declaration, #REQUIRED means that the +attribute must always be provided, #IMPLIED that no default +value is provided. + +If the +declaration +is neither #REQUIRED nor #IMPLIED, then the +AttValue value contains the declared +default value; the #FIXED 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.

    + +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. +

    + +Attribute Default Legal +

    +The declared +default value must meet the lexical constraints of the declared attribute type. +

    +
    + +Fixed Attribute Default +

    If an attribute has a default value declared with the +#FIXED keyword, instances of that attribute must +match the default value. +

    + +

    Examples of attribute-list declarations: +<!ATTLIST termdef + id ID #REQUIRED + name CDATA #IMPLIED> +<!ATTLIST list + type (bullets|ordered|glossary) "ordered"> +<!ATTLIST form + method CDATA #FIXED "POST">

    +
    + +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. +

    +
    +
    + +Conditional Sections +

    +Conditional sections are portions of the +document type declaration external subset +which are +included in, or excluded from, the logical structure of the DTD based on +the keyword which governs them. + +Conditional Section + +conditionalSect +includeSect +| ignoreSect + + +includeSect +'<![' S? 'INCLUDE' S? '[' + +extSubsetDecl +']]>' + + +ignoreSect +'<![' S? 'IGNORE' S? '[' +ignoreSectContents* +']]>' + + +ignoreSectContents +Ignore +('<![' ignoreSectContents ']]>' +Ignore)* +Ignore +Char* - +(Char* ('<![' | ']]>') +Char*) + + + + +

    +

    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. +

    +

    If the keyword of the +conditional section is INCLUDE, then the contents of the conditional +section are part of the DTD. +If the keyword of the conditional +section is IGNORE, 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 INCLUDE occurs within a larger conditional +section with a keyword of IGNORE, both the outer and the +inner conditional sections are ignored.

    +

    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.

    +

    An example: +<!ENTITY % draft 'INCLUDE' > +<!ENTITY % final 'IGNORE' > + +<![%draft;[ +<!ELEMENT book (comments*, title, body, supplements?)> +]]> +<![%final;[ +<!ELEMENT book (title, body, supplements?)> +]]> + +

    +
    + + + + +
    + + + +Physical Structures + +

    An XML document may consist +of one or many storage units. These are called +entities; they all have content and are all +(except for the document entity, see below, and +the external DTD subset) +identified by name. + +Each XML document has one entity +called the document entity, which serves +as the starting point for the XML +processor and may contain the whole document.

    +

    Entities may be either parsed or unparsed. +A parsed entity's +contents are referred to as its +replacement text; +this text is considered an +integral part of the document.

    + +

    An +unparsed entity +is a resource whose contents may or may not be +text, and if text, may not be XML. +Each unparsed entity +has an associated notation, 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. +

    +

    +Parsed entities are invoked by name using entity references; +unparsed entities by name, given in the value of ENTITY +or ENTITIES +attributes.

    +

    General entities +are entities for use within the document content. +In this specification, general entities are sometimes referred +to with the unqualified term entity when this leads +to no ambiguity. +Parameter entities +are parsed entities for use within the DTD. +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. +

    + + +Character and Entity References +

    +A character reference refers to a specific character in the +ISO/IEC 10646 character set, for example one not directly accessible from +available input devices. + +Character Reference +CharRef +'&#' [0-9]+ ';' +| '&hcro;' [0-9a-fA-F]+ ';' + + + + +Legal Character +

    Characters referred to using character references must +match the production for +Char.

    + +If the character reference begins with "&#x", the digits and +letters up to the terminating ; provide a hexadecimal +representation of the character's code point in ISO/IEC 10646. +If it begins just with "&#", the digits up to the terminating +; provide a decimal representation of the character's +code point. + +

    +

    An entity +reference refers to the content of a named entity. +References to +parsed general entities +use ampersand (&) and semicolon (;) as +delimiters. + +Parameter-entity references use percent-sign (%) and +semicolon +(;) as delimiters. +

    + +Entity Reference +Reference +EntityRef +| CharRef +EntityRef +'&' Name ';' + + + + + +PEReference +'%' Name ';' + + + + + + + +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: &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.

    +

    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'.

    +
    + +Entity Declared +

    In a document with an external subset or external parameter +entities with "standalone='no'", +the Name given in the entity reference must match that in an +entity declaration. +For interoperability, valid documents should declare the entities +&magicents;, in the form +specified in . +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.

    +
    + + +Parsed Entity +

    +An entity reference must not contain the name of an unparsed entity. Unparsed entities may be referred +to only in attribute values declared to +be of type ENTITY or ENTITIES. +

    +
    + +No Recursion +

    +A parsed entity must not contain a recursive reference to itself, +either directly or indirectly. +

    +
    + +In DTD +

    +Parameter-entity references may only appear in the +DTD. +

    +
    +

    Examples of character and entity references: +Type <key>less-than</key> (&hcro;3C;) to save options. +This document was prepared on &docdate; and +is classified &security-level;.

    +

    Example of a parameter-entity reference: + + + +%ISOLat2;]]>

    +
    + + +Entity Declarations + +

    +Entities are declared thus: + +Entity Declaration + +EntityDecl +GEDecl | PEDecl + + +GEDecl +'<!ENTITY' S Name +S EntityDef +S? '>' + +PEDecl +'<!ENTITY' S '%' S +Name S +PEDef S? '>' + + +EntityDef +EntityValue +| (ExternalID +NDataDecl?) + + + +PEDef +EntityValue +| ExternalID + + +The Name identifies the entity in an +entity reference or, in the case of an +unparsed entity, in the value of an ENTITY or ENTITIES +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. +

    + + +Internal Entities + +

    If +the entity definition is an +EntityValue, +the defined entity is called an internal entity. +There is no separate physical +storage object, and the content of the entity is given in the +declaration. +Note that some processing of entity and character references in the +literal entity value may be required to +produce the correct replacement +text: see . +

    +

    An internal entity is a parsed +entity.

    +

    Example of an internal entity declaration: +<!ENTITY Pub-Status "This is a pre-release of the + specification.">

    +
    + + +External Entities + +

    If the entity is not +internal, it is an external +entity, declared as follows: + +External Entity Declaration + +ExternalID +'SYSTEM' S +SystemLiteral +| 'PUBLIC' S +PubidLiteral +S +SystemLiteral + + +NDataDecl +S 'NDATA' S +Name + + +If the NDataDecl is present, this is a +general unparsed +entity; otherwise it is a parsed entity.

    + +Notation Declared +

    +The Name must match the declared name of a +notation. +

    +
    +

    The +SystemLiteral +is called the entity's system identifier. It is a URI, +which may be used to retrieve the entity. +Note that the hash mark (#) 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 +document entity, to the entity +containing the external DTD subset, +or to some other external parameter entity. +

    +

    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).

    +

    +In addition to a system identifier, an external identifier may +include a public identifier. +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.

    +

    Examples of external entity declarations: +<!ENTITY open-hatch + SYSTEM "http://www.textuality.com/boilerplate/OpenHatch.xml"> +<!ENTITY open-hatch + PUBLIC "-//Textuality//TEXT Standard open-hatch boilerplate//EN" + "http://www.textuality.com/boilerplate/OpenHatch.xml"> +<!ENTITY hatch-pic + SYSTEM "../grafix/OpenHatch.gif" + NDATA gif >

    +
    + +
    + + +Parsed Entities + +The Text Declaration +

    External parsed entities may each begin with a text +declaration. + +Text Declaration + +TextDecl +&xmlpio; +VersionInfo? +EncodingDecl +S? &pic; + + + +

    +

    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.

    +
    + +Well-Formed Parsed Entities +

    The document entity is well-formed if it matches the production labeled +document. +An external general +parsed entity is well-formed if it matches the production labeled +extParsedEnt. +An external parameter +entity is well-formed if it matches the production labeled +extPE. + +Well-Formed External Parsed Entity +extParsedEnt +TextDecl? +content + +extPE +TextDecl? +extSubsetDecl + + +An internal general parsed entity is well-formed if its replacement text +matches the production labeled +content. +All internal parameter entities are well-formed by definition. +

    +

    A consequence of well-formedness in entities is that the logical +and physical structures in an XML document are properly nested; no +start-tag, +end-tag, +empty-element tag, +element, +comment, +processing instruction, +character +reference, or +entity reference +can begin in one entity and end in another.

    +
    + +Character Encoding in Entities + +

    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. + +

    +

    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.

    +

    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 text +declaration containing an encoding declaration: + +Encoding Declaration +EncodingDecl +S +'encoding' Eq +('"' EncName '"' | +"'" EncName "'" ) + + +EncName +[A-Za-z] ([A-Za-z0-9._] | '-')* +Encoding name contains only Latin characters + + +In the document entity, the encoding +declaration is part of the XML declaration. +The EncName is the name of the encoding used. +

    + +

    In an encoding declaration, the values +"UTF-8", +"UTF-16", +"ISO-10646-UCS-2", and +"ISO-10646-UCS-4" should be +used for the various encodings and transformations of Unicode / +ISO/IEC 10646, the values +"ISO-8859-1", +"ISO-8859-2", ... +"ISO-8859-9" should be used for the parts of ISO 8859, and +the values +"ISO-2022-JP", +"Shift_JIS", and +"EUC-JP" +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 charsets) +with the Internet Assigned Numbers +Authority , 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.

    +

    In the absence of information provided by an external +transport protocol (e.g. HTTP or MIME), +it is an error 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.

    + +

    It is a fatal error when an XML processor +encounters an entity with an encoding that it is unable to process.

    +

    Examples of encoding declarations: +<?xml encoding='UTF-8'?> +<?xml encoding='EUC-JP'?>

    +
    +
    + +XML Processor Treatment of Entities and References +

    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 XML processor in +each case. +The labels in the leftmost column describe the recognition context: + + +

    as a reference +anywhere after the start-tag and +before the end-tag of an element; corresponds +to the nonterminal content.

    + + + +

    as a reference within either the value of an attribute in a +start-tag, or a default +value in an attribute declaration; +corresponds to the nonterminal +AttValue.

    + + +

    as a Name, not a reference, appearing either as +the value of an +attribute which has been declared as type ENTITY, or as one of +the space-separated tokens in the value of an attribute which has been +declared as type ENTITIES.

    +
    + +

    as a reference +within a parameter or internal entity's +literal entity value in +the entity's declaration; corresponds to the nonterminal +EntityValue.

    + +

    as a reference within either the internal or external subsets of the +DTD, but outside +of an EntityValue or +AttValue.

    +
    +

    + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Not Recognized +

    Outside the DTD, the % character has no +special significance; thus, what would be parameter entity references in the +DTD are not recognized as markup in content. +Similarly, the names of unparsed entities are not recognized except +when they appear in the value of an appropriately declared attribute. +

    +
    + +Included +

    An entity is +included when its +replacement text 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 +character data +and (except for parameter entities) markup, +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 "AT&amp;T;" expands to +"AT&T;" and the remaining ampersand is not recognized +as an entity-reference delimiter.) +A character reference is included when the indicated +character is processed in place of the reference itself. +

    +
    + +Included If Validating +

    When an XML processor recognizes a reference to a parsed entity, in order +to validate +the document, the processor must +include its +replacement text. +If the entity is external, and the processor is not +attempting to validate the XML document, the +processor may, 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.

    +

    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. +

    +
    + +Forbidden +

    The following are forbidden, and constitute +fatal errors: + +

    the appearance of a reference to an +unparsed entity. +

    +

    the appearance of any character or general-entity reference in the +DTD except within an EntityValue or +AttValue.

    +

    a reference to an external entity in an attribute value.

    +
    + +

    +
    + +Included in Literal +

    When an entity reference appears in an +attribute value, or a parameter entity reference appears in a literal entity +value, its replacement text 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: + +]]> +while this is not: +<!ENTITY EndAttr "27'" > +<element attribute='a-&EndAttr;> +

    + +Notify +

    When the name of an unparsed +entity appears as a token in the +value of an attribute of declared type ENTITY or ENTITIES, +a validating processor must inform the +application of the system +and public (if any) +identifiers for both the entity and its associated +notation.

    +
    + +Bypassed +

    When a general entity reference appears in the +EntityValue in an entity declaration, +it is bypassed and left as is.

    +
    + +Included as PE +

    Just as with external parsed entities, parameter entities +need only be included if +validating. +When a parameter-entity reference is recognized in the DTD +and included, its +replacement +text 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. +

    +
    + + + +Construction of Internal Entity Replacement Text +

    In discussing the treatment +of internal entities, it is +useful to distinguish two forms of the entity's value. +The literal +entity value is the quoted string actually +present in the entity declaration, corresponding to the +non-terminal EntityValue. +The replacement +text is the content of the entity, after +replacement of character references and parameter-entity +references. +

    + +

    The literal entity value +as given in an internal entity declaration +(EntityValue) 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 +included as described above +must contain the replacement text 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: + + + +]]> +then the replacement text for the entity "book" is: +La Peste: Albert Camus, +© 1947 Éditions Gallimard. &rights; +The general-entity reference "&rights;" would be expanded +should the reference "&book;" appear in the document's +content or an attribute value.

    +

    These simple rules may have complex interactions; for a detailed +discussion of a difficult example, see +. +

    + +
    + +Predefined Entities +

    Entity and character +references can both be used to escape 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 +"&#60;" and "&#38;" may be used to +escape < and & when they occur +in character data.

    +

    All XML processors must recognize these entities whether they +are declared or not. +For interoperability, +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. + + + + + +]]> +Note that the < and & characters +in the declarations of "lt" and "amp" +are doubly escaped to meet the requirement that entity replacement +be well-formed. +

    +
    + + +Notation Declarations + +

    Notations identify by +name the format of unparsed +entities, the +format of elements which bear a notation attribute, +or the application to which +a processing instruction is +addressed.

    +

    +Notation declarations +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. + +Notation Declarations +NotationDecl +'<!NOTATION' S Name +S +(ExternalID | +PublicID) +S? '>' +PublicID +'PUBLIC' S +PubidLiteral + + +

    +

    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 +system identifier, +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.)

    +
    + + + +Document Entity + +

    The document +entity serves as the root of the entity +tree and a starting-point for an XML +processor. +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.

    +
    + + + + + + +Conformance + + +Validating and Non-Validating Processors +

    Conforming XML processors fall into two +classes: validating and non-validating.

    +

    Validating and non-validating processors alike must report +violations of this specification's well-formedness constraints +in the content of the +document entity and any +other parsed entities that +they read.

    +

    +Validating processors must report +violations of the constraints expressed by the declarations in the +DTD, and +failures to fulfill the validity constraints given +in this specification. + +To accomplish this, validating XML processors must read and process the entire +DTD and all external parsed entities referenced in the document. +

    +

    Non-validating processors are required to check only the +document entity, including +the entire internal DTD subset, for well-formedness. + +While they are not required to check the document for validity, +they are required to +process 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 not read; that is to +say, they must +use the information in those declarations to +normalize attribute values, +include the replacement text of +internal entities, and supply +default attribute values. + +They must not process +entity declarations or +attribute-list declarations +encountered after a reference to a parameter entity that is not +read, since the entity may have contained overriding declarations. +

    +
    + +Using XML Processors +

    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: + +

    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 +Entity Declared, +Parsed Entity, and +No Recursion, as well +as some of the cases described as +forbidden in +.

    +

    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 +normalize attribute values, +include the replacement text of +internal entities, or supply +default attribute values, +where doing so depends on having read declarations in +external or parameter entities.

    + +

    +

    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.

    +
    +
    + + +Notation + +

    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 +symbol ::= expression

    +

    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. + +

    + +

    Within the expression on the right-hand side of a rule, the following +expressions are used to match strings of one or more characters: + + + +

    where N 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 +#xN 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.

    + + + +

    matches any character +with a value in the range(s) indicated (inclusive).

    +
    + + +

    matches any character +with a value outside the +range indicated.

    +
    + + +

    matches any character +with a value not among the characters given.

    +
    + + +

    matches a literal string matching +that given inside the double quotes.

    +
    + + +

    matches a literal string matching +that given inside the single quotes.

    +
    + +These symbols may be combined to match more complex patterns as follows, +where A and B represent simple expressions: + + + +

    expression is treated as a unit +and may be combined as described in this list.

    +
    + + +

    matches A or nothing; optional A.

    +
    + + +

    matches A followed by B.

    +
    + + +

    matches A or B but not both.

    +
    + + +

    matches any string that matches A but does not match +B. +

    +
    + + +

    matches one or more occurrences of A.

    +
    + + +

    matches zero or more occurrences of A.

    +
    + +
    +Other notations used in the productions are: + + + +

    comment.

    +
    + + +

    well-formedness constraint; this identifies by name a +constraint on +well-formed documents +associated with a production.

    +
    + + +

    validity constraint; this identifies by name a constraint on +valid documents associated with +a production.

    +
    +
    +

    + + + + + + + + + +References + +Normative References + + + +(Internet Assigned Numbers Authority) Official Names for +Character Sets, +ed. Keld Simonsen et al. +See ftp://ftp.isi.edu/in-notes/iana/assignments/character-sets. + + + +IETF (Internet Engineering Task Force). +RFC 1766: Tags for the Identification of Languages, +ed. H. Alvestrand. +1995. + + + +(International Organization for Standardization). +ISO 639:1988 (E). +Code for the representation of names of languages. +[Geneva]: International Organization for +Standardization, 1988. + + +(International Organization for Standardization). +ISO 3166-1:1997 (E). +Codes for the representation of names of countries and their subdivisions +— Part 1: Country codes +[Geneva]: International Organization for +Standardization, 1997. + +ISO +(International Organization for Standardization). +ISO/IEC 10646-1993 (E). Information technology — Universal +Multiple-Octet Coded Character Set (UCS) — Part 1: +Architecture and Basic Multilingual Plane. +[Geneva]: International Organization for +Standardization, 1993 (plus amendments AM 1 through AM 7). + + +The Unicode Consortium. +The Unicode Standard, Version 2.0. +Reading, Mass.: Addison-Wesley Developers Press, 1996. + + + + + +Other References + + + +Aho, Alfred V., +Ravi Sethi, and Jeffrey D. Ullman. +Compilers: Principles, Techniques, and Tools. +Reading: Addison-Wesley, 1986, rpt. corr. 1988. + + +Berners-Lee, T., R. Fielding, and L. Masinter. +Uniform Resource Identifiers (URI): Generic Syntax and +Semantics. +1997. +(Work in progress; see updates to RFC1738.) + +Brüggemann-Klein, Anne. +Regular Expressions into Finite Automata. +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. + + + +Brüggemann-Klein, Anne, +and Derick Wood. +Deterministic Regular Languages. +Universität Freiburg, Institut für Informatik, +Bericht 38, Oktober 1991. + + +James Clark. +Comparison of SGML and XML. See +http://www.w3.org/TR/NOTE-sgml-xml-971215. + + +IETF (Internet Engineering Task Force). +RFC 1738: Uniform Resource Locators (URL), +ed. T. Berners-Lee, L. Masinter, M. McCahill. +1994. + + + +IETF (Internet Engineering Task Force). +RFC 1808: Relative Uniform Resource Locators, +ed. R. Fielding. +1995. + + + +IETF (Internet Engineering Task Force). +RFC 2141: URN Syntax, +ed. R. Moats. +1997. + + +ISO +(International Organization for Standardization). +ISO 8879:1986(E). Information processing — Text and Office +Systems — Standard Generalized Markup Language (SGML). First +edition — 1986-10-15. [Geneva]: International Organization for +Standardization, 1986. + + + +ISO +(International Organization for Standardization). +ISO/IEC 10744-1992 (E). Information technology — +Hypermedia/Time-based Structuring Language (HyTime). + +[Geneva]: International Organization for +Standardization, 1992. +Extended Facilities Annexe. +[Geneva]: International Organization for +Standardization, 1996. + + + + + + + + +Character Classes +

    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. + +Characters + +Letter +BaseChar +| Ideographic +BaseChar +[#x0041-#x005A] +| [#x0061-#x007A] +| [#x00C0-#x00D6] +| [#x00D8-#x00F6] +| [#x00F8-#x00FF] +| [#x0100-#x0131] +| [#x0134-#x013E] +| [#x0141-#x0148] +| [#x014A-#x017E] +| [#x0180-#x01C3] +| [#x01CD-#x01F0] +| [#x01F4-#x01F5] +| [#x01FA-#x0217] +| [#x0250-#x02A8] +| [#x02BB-#x02C1] +| #x0386 +| [#x0388-#x038A] +| #x038C +| [#x038E-#x03A1] +| [#x03A3-#x03CE] +| [#x03D0-#x03D6] +| #x03DA +| #x03DC +| #x03DE +| #x03E0 +| [#x03E2-#x03F3] +| [#x0401-#x040C] +| [#x040E-#x044F] +| [#x0451-#x045C] +| [#x045E-#x0481] +| [#x0490-#x04C4] +| [#x04C7-#x04C8] +| [#x04CB-#x04CC] +| [#x04D0-#x04EB] +| [#x04EE-#x04F5] +| [#x04F8-#x04F9] +| [#x0531-#x0556] +| #x0559 +| [#x0561-#x0586] +| [#x05D0-#x05EA] +| [#x05F0-#x05F2] +| [#x0621-#x063A] +| [#x0641-#x064A] +| [#x0671-#x06B7] +| [#x06BA-#x06BE] +| [#x06C0-#x06CE] +| [#x06D0-#x06D3] +| #x06D5 +| [#x06E5-#x06E6] +| [#x0905-#x0939] +| #x093D +| [#x0958-#x0961] +| [#x0985-#x098C] +| [#x098F-#x0990] +| [#x0993-#x09A8] +| [#x09AA-#x09B0] +| #x09B2 +| [#x09B6-#x09B9] +| [#x09DC-#x09DD] +| [#x09DF-#x09E1] +| [#x09F0-#x09F1] +| [#x0A05-#x0A0A] +| [#x0A0F-#x0A10] +| [#x0A13-#x0A28] +| [#x0A2A-#x0A30] +| [#x0A32-#x0A33] +| [#x0A35-#x0A36] +| [#x0A38-#x0A39] +| [#x0A59-#x0A5C] +| #x0A5E +| [#x0A72-#x0A74] +| [#x0A85-#x0A8B] +| #x0A8D +| [#x0A8F-#x0A91] +| [#x0A93-#x0AA8] +| [#x0AAA-#x0AB0] +| [#x0AB2-#x0AB3] +| [#x0AB5-#x0AB9] +| #x0ABD +| #x0AE0 +| [#x0B05-#x0B0C] +| [#x0B0F-#x0B10] +| [#x0B13-#x0B28] +| [#x0B2A-#x0B30] +| [#x0B32-#x0B33] +| [#x0B36-#x0B39] +| #x0B3D +| [#x0B5C-#x0B5D] +| [#x0B5F-#x0B61] +| [#x0B85-#x0B8A] +| [#x0B8E-#x0B90] +| [#x0B92-#x0B95] +| [#x0B99-#x0B9A] +| #x0B9C +| [#x0B9E-#x0B9F] +| [#x0BA3-#x0BA4] +| [#x0BA8-#x0BAA] +| [#x0BAE-#x0BB5] +| [#x0BB7-#x0BB9] +| [#x0C05-#x0C0C] +| [#x0C0E-#x0C10] +| [#x0C12-#x0C28] +| [#x0C2A-#x0C33] +| [#x0C35-#x0C39] +| [#x0C60-#x0C61] +| [#x0C85-#x0C8C] +| [#x0C8E-#x0C90] +| [#x0C92-#x0CA8] +| [#x0CAA-#x0CB3] +| [#x0CB5-#x0CB9] +| #x0CDE +| [#x0CE0-#x0CE1] +| [#x0D05-#x0D0C] +| [#x0D0E-#x0D10] +| [#x0D12-#x0D28] +| [#x0D2A-#x0D39] +| [#x0D60-#x0D61] +| [#x0E01-#x0E2E] +| #x0E30 +| [#x0E32-#x0E33] +| [#x0E40-#x0E45] +| [#x0E81-#x0E82] +| #x0E84 +| [#x0E87-#x0E88] +| #x0E8A +| #x0E8D +| [#x0E94-#x0E97] +| [#x0E99-#x0E9F] +| [#x0EA1-#x0EA3] +| #x0EA5 +| #x0EA7 +| [#x0EAA-#x0EAB] +| [#x0EAD-#x0EAE] +| #x0EB0 +| [#x0EB2-#x0EB3] +| #x0EBD +| [#x0EC0-#x0EC4] +| [#x0F40-#x0F47] +| [#x0F49-#x0F69] +| [#x10A0-#x10C5] +| [#x10D0-#x10F6] +| #x1100 +| [#x1102-#x1103] +| [#x1105-#x1107] +| #x1109 +| [#x110B-#x110C] +| [#x110E-#x1112] +| #x113C +| #x113E +| #x1140 +| #x114C +| #x114E +| #x1150 +| [#x1154-#x1155] +| #x1159 +| [#x115F-#x1161] +| #x1163 +| #x1165 +| #x1167 +| #x1169 +| [#x116D-#x116E] +| [#x1172-#x1173] +| #x1175 +| #x119E +| #x11A8 +| #x11AB +| [#x11AE-#x11AF] +| [#x11B7-#x11B8] +| #x11BA +| [#x11BC-#x11C2] +| #x11EB +| #x11F0 +| #x11F9 +| [#x1E00-#x1E9B] +| [#x1EA0-#x1EF9] +| [#x1F00-#x1F15] +| [#x1F18-#x1F1D] +| [#x1F20-#x1F45] +| [#x1F48-#x1F4D] +| [#x1F50-#x1F57] +| #x1F59 +| #x1F5B +| #x1F5D +| [#x1F5F-#x1F7D] +| [#x1F80-#x1FB4] +| [#x1FB6-#x1FBC] +| #x1FBE +| [#x1FC2-#x1FC4] +| [#x1FC6-#x1FCC] +| [#x1FD0-#x1FD3] +| [#x1FD6-#x1FDB] +| [#x1FE0-#x1FEC] +| [#x1FF2-#x1FF4] +| [#x1FF6-#x1FFC] +| #x2126 +| [#x212A-#x212B] +| #x212E +| [#x2180-#x2182] +| [#x3041-#x3094] +| [#x30A1-#x30FA] +| [#x3105-#x312C] +| [#xAC00-#xD7A3] + +Ideographic +[#x4E00-#x9FA5] +| #x3007 +| [#x3021-#x3029] + +CombiningChar +[#x0300-#x0345] +| [#x0360-#x0361] +| [#x0483-#x0486] +| [#x0591-#x05A1] +| [#x05A3-#x05B9] +| [#x05BB-#x05BD] +| #x05BF +| [#x05C1-#x05C2] +| #x05C4 +| [#x064B-#x0652] +| #x0670 +| [#x06D6-#x06DC] +| [#x06DD-#x06DF] +| [#x06E0-#x06E4] +| [#x06E7-#x06E8] +| [#x06EA-#x06ED] +| [#x0901-#x0903] +| #x093C +| [#x093E-#x094C] +| #x094D +| [#x0951-#x0954] +| [#x0962-#x0963] +| [#x0981-#x0983] +| #x09BC +| #x09BE +| #x09BF +| [#x09C0-#x09C4] +| [#x09C7-#x09C8] +| [#x09CB-#x09CD] +| #x09D7 +| [#x09E2-#x09E3] +| #x0A02 +| #x0A3C +| #x0A3E +| #x0A3F +| [#x0A40-#x0A42] +| [#x0A47-#x0A48] +| [#x0A4B-#x0A4D] +| [#x0A70-#x0A71] +| [#x0A81-#x0A83] +| #x0ABC +| [#x0ABE-#x0AC5] +| [#x0AC7-#x0AC9] +| [#x0ACB-#x0ACD] +| [#x0B01-#x0B03] +| #x0B3C +| [#x0B3E-#x0B43] +| [#x0B47-#x0B48] +| [#x0B4B-#x0B4D] +| [#x0B56-#x0B57] +| [#x0B82-#x0B83] +| [#x0BBE-#x0BC2] +| [#x0BC6-#x0BC8] +| [#x0BCA-#x0BCD] +| #x0BD7 +| [#x0C01-#x0C03] +| [#x0C3E-#x0C44] +| [#x0C46-#x0C48] +| [#x0C4A-#x0C4D] +| [#x0C55-#x0C56] +| [#x0C82-#x0C83] +| [#x0CBE-#x0CC4] +| [#x0CC6-#x0CC8] +| [#x0CCA-#x0CCD] +| [#x0CD5-#x0CD6] +| [#x0D02-#x0D03] +| [#x0D3E-#x0D43] +| [#x0D46-#x0D48] +| [#x0D4A-#x0D4D] +| #x0D57 +| #x0E31 +| [#x0E34-#x0E3A] +| [#x0E47-#x0E4E] +| #x0EB1 +| [#x0EB4-#x0EB9] +| [#x0EBB-#x0EBC] +| [#x0EC8-#x0ECD] +| [#x0F18-#x0F19] +| #x0F35 +| #x0F37 +| #x0F39 +| #x0F3E +| #x0F3F +| [#x0F71-#x0F84] +| [#x0F86-#x0F8B] +| [#x0F90-#x0F95] +| #x0F97 +| [#x0F99-#x0FAD] +| [#x0FB1-#x0FB7] +| #x0FB9 +| [#x20D0-#x20DC] +| #x20E1 +| [#x302A-#x302F] +| #x3099 +| #x309A + +Digit +[#x0030-#x0039] +| [#x0660-#x0669] +| [#x06F0-#x06F9] +| [#x0966-#x096F] +| [#x09E6-#x09EF] +| [#x0A66-#x0A6F] +| [#x0AE6-#x0AEF] +| [#x0B66-#x0B6F] +| [#x0BE7-#x0BEF] +| [#x0C66-#x0C6F] +| [#x0CE6-#x0CEF] +| [#x0D66-#x0D6F] +| [#x0E50-#x0E59] +| [#x0ED0-#x0ED9] +| [#x0F20-#x0F29] + +Extender +#x00B7 +| #x02D0 +| #x02D1 +| #x0387 +| #x0640 +| #x0E46 +| #x0EC6 +| #x3005 +| [#x3031-#x3035] +| [#x309D-#x309E] +| [#x30FC-#x30FE] + + + + +

    +

    The character classes defined here can be derived from the +Unicode character database as follows: + + +

    Name start characters must have one of the categories Ll, Lu, +Lo, Lt, Nl.

    + + +

    Name characters other than Name-start characters +must have one of the categories Mc, Me, Mn, Lm, or Nd.

    +
    + +

    Characters in the compatibility area (i.e. with character code +greater than #xF900 and less than #xFFFE) are not allowed in XML +names.

    +
    + +

    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 "<") are not allowed.

    +
    + +

    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.

    +
    + +

    Characters #x20DD-#x20E0 are excluded (in accordance with +Unicode, section 5.14).

    +
    + +

    Character #x00B7 is classified as an extender, because the +property list so identifies it.

    +
    + +

    Character #x0387 is added as a name character, because #x00B7 +is its canonical equivalent.

    +
    + +

    Characters ':' and '_' are allowed as name-start characters.

    +
    + +

    Characters '-' and '.' are allowed as name characters.

    +
    + +

    +
    + +XML and SGML + +

    XML is designed to be a subset of SGML, in that every +valid 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 . +

    +
    + +Expansion of Entity and Character References +

    This appendix contains some examples illustrating the +sequence of entity- and character-reference recognition and +expansion, as specified in .

    +

    +If the DTD contains the declaration +An ampersand (&#38;) may be escaped +numerically (&#38;#38;) or with a general entity +(&amp;).

    " > +]]> +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 "example": +An ampersand (&) may be escaped +numerically (&#38;) or with a general entity +(&amp;).

    +]]>
    +A reference in the document to "&example;" +will cause the text to be reparsed, at which time the +start- and end-tags of the "p" element will be recognized +and the three references will be recognized and expanded, +resulting in a "p" element with the following content +(all data, no delimiters or markup): + +

    +

    A more complex example will illustrate the rules and their +effects fully. In the following example, the line numbers are +solely for reference. + +2 +4 +5 ' > +6 %xx; +7 ]> +8 This sample shows a &tricky; method. +]]> +This produces the following: + +

    in line 4, the reference to character 37 is expanded immediately, +and the parameter entity "xx" is stored in the symbol +table with the value "%zz;". Since the replacement text +is not rescanned, the reference to parameter entity "zz" +is not recognized. (And it would be an error if it were, since +"zz" is not yet declared.)

    +

    in line 5, the character reference "&#60;" is +expanded immediately and the parameter entity "zz" is +stored with the replacement text +"<!ENTITY tricky "error-prone" >", +which is a well-formed entity declaration.

    +

    in line 6, the reference to "xx" is recognized, +and the replacement text of "xx" (namely +"%zz;") is parsed. The reference to "zz" +is recognized in its turn, and its replacement text +("<!ENTITY tricky "error-prone" >") is parsed. +The general entity "tricky" has now been +declared, with the replacement text "error-prone".

    +

    +in line 8, the reference to the general entity "tricky" is +recognized, and it is expanded, so the full content of the +"test" element is the self-describing (and ungrammatical) string +This sample shows a error-prone method. +

    + +

    +
    + +Deterministic Content Models +

    For compatibility, it is +required +that content models in element type declarations be deterministic. +

    + +

    SGML +requires deterministic content models (it calls them +"unambiguous"); XML processors built using SGML systems may +flag non-deterministic content models as errors.

    +

    For example, the content model ((b, c) | (b, d)) is +non-deterministic, because given an initial b the parser +cannot know which b in the model is being matched without +looking ahead to see which element follows the b. +In this case, the two references to +b can be collapsed +into a single reference, making the model read +(b, (c | d)). An initial b now clearly +matches only a single name in the content model. The parser doesn't +need to look ahead to see what follows; either c or +d would be accepted.

    +

    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 . +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. +

    +

    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 .

    +
    + +Autodetection of Character Encodings +

    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—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. +

    +

    +Because each XML entity not in UTF-8 or UTF-16 format must +begin with an XML encoding declaration, in which the first characters +must be '<?xml', 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, '<' is +"#x0000003C" and '?' is "#x0000003F", and the Byte +Order Mark required of UTF-16 data streams is "#xFEFF".

    +

    + + +

    00 00 00 3C: UCS-4, big-endian machine (1234 order)

    + + +

    3C 00 00 00: UCS-4, little-endian machine (4321 order)

    +
    + +

    00 00 3C 00: UCS-4, unusual octet order (2143)

    +
    + +

    00 3C 00 00: UCS-4, unusual octet order (3412)

    +
    + +

    FE FF: UTF-16, big-endian

    +
    + +

    FF FE: UTF-16, little-endian

    +
    + +

    00 3C 00 3F: UTF-16, big-endian, no Byte Order Mark +(and thus, strictly speaking, in error)

    +
    + +

    3C 00 3F 00: UTF-16, little-endian, no Byte Order Mark +(and thus, strictly speaking, in error)

    +
    + +

    3C 3F 78 6D: 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 +

    +
    + +

    4C 6F A7 94: EBCDIC (in some flavor; the full +encoding declaration must be read to tell which code page is in +use)

    +
    + +

    other: UTF-8 without an encoding declaration, or else +the data stream is corrupt, fragmentary, or enclosed in +a wrapper of some kind

    +
    + +

    +

    +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). +

    +

    +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. +

    +

    +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. +

    +

    +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. +

    +

    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. + +

    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. +

    +

    If an XML entity is delivered with a +MIME type of text/xml, then the charset parameter +on the MIME type determines the +character encoding method; all other heuristics and sources of +information are solely for error recovery. +

    +

    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. +

    + +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. +

    + +
    + + +W3C XML Working Group + +

    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:

    + + +Jon Bosak, SunChair +James ClarkTechnical Lead +Tim Bray, Textuality and NetscapeXML Co-editor +Jean Paoli, MicrosoftXML Co-editor +C. M. Sperberg-McQueen, U. of Ill.XML +Co-editor +Dan Connolly, W3CW3C Liaison +Paula Angerstein, Texcel +Steve DeRose, INSO +Dave Hollander, HP +Eliot Kimber, ISOGEN +Eve Maler, ArborText +Tom Magliery, NCSA +Murray Maloney, Muzmo and Grif +Makoto Murata, Fuji Xerox Information Systems +Joel Nava, Adobe +Conleth O'Connell, Vignette +Peter Sharpe, SoftQuad +John Tigue, DataChannel + + +
    +
    + + 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 @@ + + + + + + + + + + + + + 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 @@ + + This should work + 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 @@ + + This should fail + 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 @@ + + This should fail + 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 @@ + + + + + + + + + + default + preserve + + + + 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 @@ + 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 @@ + + + + + + xml:space + + + + + + + + default + preserve + + + + 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 @@ + 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 @@ + + + + Information about a single email address. + + + + + + + + + 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 @@ + + foobar + 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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 @@ + +

    start

    +
    +
    + تاريخ درج: چهارشنبه، 29 اسفند 1386 + - Wednesday, March 19, 2008      + نويسنده:       + دفعات مشاهده: 2688 + بار      كد: 341 +
    +
    + + + +
    +
    +
    +
    + +
    + + + +
    + عکس محصول هنر یکی از همکاران است. روی آن کلیک کند.
    +
    + +
    +

    +
      نظرات + کاربران:
    • حاجی جÙرسون:
      4/5/2008 - + 7:08:00 PM
      با درود به شما... Ø¨Ø¯ÙˆÙ† هیچ گونه طنز + Ùˆ دستکاری توسط حاجی دایی نقل شده است این ها Ú©Ù‡ در بیان جدی + اینقدر طناز هستند وای به روزی Ú©Ù‡ بخواهند طنز بنویسند. ببین + شهیر جان Ú†Ù‡ کسانی سر جوانان ما را با اصلاحات 8 سال گول + مالیدند.. این ها را بخوانید :::::((دبيركل مجمع اسلامي بانوان + Ú¯Ùت: به نظر مي‌رسد آقاي خاتمي قصد Ùاصله گرÙتن از تندروها + را ندارد Ùˆ تا اين روند ادامه دارد ما با تندروها در يك ائتلا٠+ شركت نمي‌كنيم. به گزارش خبرنگار سياسي خبرگزاري Ùارس، + Ùاطمه كروبي دبيركل مجمع اسلامي بانوان عصر امروز شنبه در جمع + خبرنگاران رسانه‌هاي گروهي روند برگزاري انتخابات هشتمين + دوره مجلس شوراي اسلامي را تحليل كرد. وي ضمن برشمردن مرزبندي خود + با جربان تندروي اصلاح طلب اÙزود: اين ما نيستيم كه با ستاد ائتلا٠+ اصلاح طلبان اختلا٠داريم اما انحصارگري برخي از گروه‌ها + جريان اصلاحات را دچار از هم‌گسستگي كرد. داوطلب هشتمين دوره + انتخابات مجلس شوراي اسلامي درباره تشكيل ستاد مردمي اصلاحات خاطر + نشان كرد: آقاي خاتمي به توصيه‌ها Ùˆ نظرات دوستانشان توجهي + ندارند Ùˆ اگر اين امكان وجود داشت كه همه جريانات اصلاح طلب زير + يك عنوان Ùعاليت كنند حتما از آن استقبال مي‌كرديم اما به + نظر نمي‌رسد كه آقاي خاتمي بخواهد از تندروها Ùاصله بگيرد Ùˆ + تا اين روند ادامه داشته باشد ما با تندروها در يك ائتلا٠شركت + نمي‌كنيم. وي در مورد شركت تشكل متبوع خود در مرحله بعدي + انتخابات مجلس Ú¯Ùت: برخي از كانديداهاي نزديك به ما به مرحله دوم + انتخابات راه ياÙته‌اند Ùˆ ما با تمام توان در اين مرحله از + آنها دÙاع خواهيم كرد. كروبي تاكيد كرد: گروهي انحصارگر با + اقدامات غيرعقلاني Ùˆ تندروي‌هاي خود اتوبوس اصلاحات را در دره + سرنگون كردند)))) لطÙا پیدا کنید پرتقال Ùروش را......واقعا این + ها Ù…ÛŒ خواهند دوباره وارد مجلس Ùˆ دولت شوند.....اووووووووووووووو + لالالالالالا........نه!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! البته این + مجمع بانوان بیشتر به سÙره های نذر Ùˆ سبزی پاک کردن های خونه + مامان بزرگ Ùˆ خاله زنک بازی های عصر قاجاریه Ùˆ مجلس پا تختی Ùˆ + حنا بندون عروس شباهت دارد. مهندس جان گویا ما از دست این ....Ùˆ + عیالش باید برویم گوشه همان ابدارخانه Ùˆ شاغلام Ùˆ چایی + دیشلمه....شما تشری٠نمی آورید؟


    • سیاوش:
      4/3/2008 - 9:28:00 PM
      مرد هزار چهره مرد هزار چهره کیست؟شخصیتی ساخته Ùˆ پرداخته مهران مدیری، پیمان قاسم خانی Ùˆ دیگر نویسندگان؟ تنها هدÙØ´ آنست Ú©Ù‡ چند روز تعطیلات، مارا سرگم کند Ùˆ دیگر هیچ؟ مرد هزار چهره یک طنز است یک طنز تلخ، برداشتی واقعی از جامعه ایرانی. من جوانم پس دردآشنای جوانانم Ùˆ خود را با خود Ùˆ دیگر جوانان طر٠می کنم بسیار اند جوانانی Ú©Ù‡ مصداق مرد هزار چهره هستند جوانانی سودا زده یا به قول خود مسعود "جو گیر" Ú©Ù‡ هر با محصولی کهنه را با تعریÙÛŒ جدید به آنها ارائه کنند چنان با تمام Ùˆ جود Ù…ÛŒ پذیرند Ú©Ù‡ گویی راه Ùائق آمدن بر تمام مشکلاتشان را یاÙته اند Ùˆ Ù…ÛŒ خرند، خواه این تحÙÙ‡ تئوری بر گرÙته از تÙکرات خشک Ùˆ Ùسیلی گروهی باشد یا مدل ملیجک وار لباسی در پشت ویترین Ùروشگاه. مهم نیست Ú†Ù‡ باشد! مهم نیست دلیل انتخابش Ú†Ù‡ باشد! مهم نیست نتیجه این انتخاب چیست! تنها مهم است Ú©Ù‡ Ù…ÛŒ گویند از این طر٠بÙرمائید!حال این بÙرمائید Ú†Ù‡ معنایی دارد باز هم مهم نیست!!! وای بر ما Ú©Ù‡ نه خود را Ù…ÛŒ شناسیم Ùˆ نه در جهت شناخت خویش قدم Ù…ÛŒ گذاریم. وای بر ما Ú©Ù‡ دیگر حتی ندای درون خویش را نمی توانیم بشنویم. وای بر ما Ú©Ù‡ نمی دانیم Ú†Ù‡ Ù…ÛŒ خواهیم Ùˆ هر بار Ú©Ù‡ چیزی Ù…ÛŒ خواهیم Ùˆ در مسیر وصال پا Ù…ÛŒ گذاریم به میانه راه نرسیده چنان مجذوب زرق Ùˆ برق راههای دیگر Ù…ÛŒ شویم Ú©Ù‡ مبدا Ùˆ مقصد را یکجا Ùراموش Ù…ÛŒ کنیم. وای بر ما Ú©Ù‡ نمی توانیم در برابر هر آنچه در مقابل انسانیت ما ایستاده "نه"بگوییم. درست است Ú©Ù‡ ما جوانان به تنهایی مقصر نیستیم اما چون شروع تقصیریم پس Ù…ÛŒ توانیم از ابتدا مانع مشکل هم باشیم. با احترام سیاوش

      +بسیار زیبا سیاوش جان. درود بر تو. شهیر


    • احسان __ خط سوم:
      4/3/2008 - 8:21:00 PM
      با سلام Ùˆ ادای احترام وکسب اجازه از شهیر عزیز . از عماد جان عزیزم بخاطر زحمتی Ú©Ù‡ کشیدند Ùˆ اطلاعات خوبی Ú©Ù‡ دادند ØŒ به سهم خودم تشکر Ù…ÛŒ کنم . با کمال شرمندگی از اینکه "بدون هماهنگی" Ùˆ " اجازه ای قبلی شما" Ùˆ "بسرعت" ØŒ معدود اشتباهات تایپی را Ú©Ù‡ با توجه به حجم مطلب ØŒ امری کاملا اجتناب ناپذیر است ØŒ سعی کردم Ú©Ù‡ اصلاح کنم ØŒ از شما پوزش Ù…ÛŒ خواهم . البته عماد جان عزیزم ØŒ بد نیست بدانید Ú©Ù‡ در میزان اشتباه در تایپ هرگز به پای بنده نخواهید رسید ! شاهد ادعای حقیر، شهیر Ùˆ حسین جان عزیزم هستند Ú©Ù‡ خبردارند Ú©Ù‡ چگونه بنده در یک Ùقره عملیات تایپ ØŒ دو صÙحه ای کامل را جا انداختم !!! کاÙÛŒ است بپرسید ØŒ در نهایت صداقت ØŒ بر این رکورد بی نظیر Ùˆ تاریخی شهادت خواهند داد ! باز هم از زحمات عماد جان Ùˆ نیز سوالات خوب حسین جان تشکر Ù…ÛŒ کنم Ú©Ù‡ ان وعده ای مقاله ای عیدانه ای Ù…Ùصل شهیر را در باره ای زنده یاد مرحوم مصدق ØŒ در وسع خود بجای اوردند . ضمن انکه هیچکدام از دوستان، این زحمت ارزشمند عماد جان را دلیل ان نخواهند دانست Ú©Ù‡ شهیرعزیز بعد از بازگشت از مساÙرت ØŒ سر Ùرصت وعده ای خود را عمل نکنند . مشتاقانه اما نه عجولانه ØŒ منتظر مقاله ای شهیر هم خواهیم ماند. با احترام : احسان

      +احسان جان، من Ùکر کردم قضیه شامل مرور زمان شده است. تا امروز Ú©Ù‡ نرسیده ام دست به این پروژه بزنم. اگر عشق به Ø­Ùظ ارتباط با شما ها نبود تا روز 25 اپریل به خودم مرخصی Ù…ÛŒ دادم. در این سÙر خدا Ù…ÛŒ داند چند هزار مایل در 3 قاره را پیموده ام. از پوست Ú©Ù„Ùت خودم در عجبم Ú©Ù‡ چطوری تونستم اخبار را دنبال کنم Ùˆ چند مقاله کوتاه بنویسم. گرÙتاری زیاد بود. شهیر


    • عماد Û²Û´ ساله از اصÙهان:
      4/3/2008 - 7:14:00 PM
      شهير جان اگر طولانی شد ببخشيد چاره ای نبود احسان جان از کمک شما نيز در ويرايش اين مطلب متشکرم اميدوارم حسين عزیز نيز راضی باشد

      +ممنون از زحمتی که کشیدی عماد جان. شهیر


    • حسین:
      4/3/2008 - 7:04:00 PM
      سلام آقا شهیر با اجازه شما خواستم از عماد عزیز وهمچنین سرور بزرگوار آقااحسان تشکر کنم وبه آقا عمادبگویم دستت درد نکنه بابت زحمتت ÙˆÙوق العاده عالی بود.قسمتی Ú©Ù‡ نوشتید" خود دکتر مصدق در تقریراتشان به اشتباه بودن تصمیمشان مبنی بر استعÙاء اقرار Ù…ÛŒ کنند"واقعا جالب وحاکی از روح بلند دکتر مصدق هست .بااینکه سوالات خرد وریز زیاد هست اما از اینکه به سوالات عمده من با توجه به کتاب دکتر مصدق پاسخ دادید بازهم تشکر میکنم .میخواستم این پاسخ را برای نویسنده مقاله رجانیوز copy&paste
      +کنم Ú¯Ùتم شاید هرچند به احتمال ضعی٠برای سایت دوست داشتنی آقا شهیر مشکلی پیش +آید.خواستم با حذ٠نام آقا شهیر وشما از کامنت اینکار را بکنم احتمال دادم راضی +نباشید .بنابراین Ùعلا علیرغم میل Ùراوان از اینکار صر٠نظر کردم .بهرحال بازهم +ممنون ومتشکر


    • حاجی جÙرسون:
      4/3/2008 - 6:06:00 PM FOO!
      با درود از قدیم Ú¯Ùته اند Ú©Ù‡ یک کلمه هم از مادر عروس بشنوید. بنابراین به اÙاضات اخیر کشور دوست Ùˆ برادر Ùˆ سوسیالیست چین عزیز Ùˆ جان جانان کمونیست عنایت بÙرمایید: رادیو Ùردا: ديپلمات ها در وين Ú¯Ùته اند: Ú©Ù‡ چين، از مخالÙان تشديد تحريم های ايران در شورای امينت، اطلاعات خود درباره ارتباط برنامه هسته ای تهران با تلاش برای دستيابی سلاح اتمی را در اختيار آژانس بين المللی انرژی اتمی قرار داده است. العجب!!!!!! انتخاب :با وجود اینکه چین به شدت با تحریمهای شورای امنیت سازمان ملل علیه ایران مخالÙت Ù…ÛŒ کرد، اطلاعاتی در رابطه با Ùعالیتهای هسته ای ایران در اختیار مقامات آژانس بین المللی انرژی اتمی قرار داده Ú©Ù‡ بر اساس آن ایران در تلاش برای دست یابی به سلاح های اتمی است. به گزارش خبرنگار سرویس بین الملل خبرگزاری انتخاب به نقل از Ùاکس نیوز؛جان بولتون ،نمایندۀ پیشین ایالات متحدۀ امریکا در سازمان ملل،در این باره Ú¯Ùت: اقدام اینچنینی از سوی چین به دلیل روابط نظامی Ú©Ù‡ میان دو کشور [ایران Ùˆ چین] برقرار است، بسیار قابل توجه است. خبرنگار انتخاب Ù…ÛŒ اÙزاید؛ در حالی چین به این اقدام دست زده است Ú©Ù‡ همکاری های تجاری Ùˆ نظامی ایران با این کشور بطور بی سابقه ای اÙزایش یاÙته است. یا باب الحوائج!!!!! رادیو زمانه: چین با وجود مخالÙت با تحریم‌های شدید شورای امنیت علیه تهران، اطلاعاتی درباره تلاش‌های تهران برای ساخت تسلیحات هسته‌ای به آژانس بین‌المللی انرژی اتمی ارائه کرده است. آسوشیتدپرس با اعلام این خبر به نقل از چند دیپلمات آشنا با پرونده هسته‌ای ایران نوشت، Ù¾Ú©Ù† به همراه مسکو همواره بر سر راه شورای امنیت Ùˆ امریکا برای اعمال مجازات های سخت تر علیه تهران به دلیل مقاومت هسته ای این کشور به صورت یک مانع عمل کرده‌اند. این گزارش Ù…ÛŒ اÙزاید، تصمیم چین برای ارائه اطلاعاتی جهت استÙاده در تحقیقات آژانس انرژی اتمی درباره برنامه تسلیحات هسته‌ای ایران، گویای اÙزایش نارضایتی بین‌المللی درباره برنامه هسته‌ای جمهوری اسلامی است Ú©Ù‡ حتی تلاش برای ساخت چنین تسلیحاتی را نیز تکذیب Ù…ÛŒ‌کند. بر اساس این گزارش، دو دیپلمات بلندپایه Ú©Ù‡ ارتباط نزدیکی با آژانس بین‌المللی انرژی اتمی دارند این اقدام چین را برملا کرده‌اند. آژانس بین‌المللی انرژی اتمی از اظهار نظر در این باره خودداری کرده است. العجب. من مامور Ùˆ معذور..حالا از پدر عروس چند کلمه بشنوید: سخنگوی آژانس بین المللی انرژی اتمی ادعای برخی از رسانه های غربی را درباره این Ú©Ù‡ چین اطلاعاتی را درباره برنامه هسته ای ایران در اختیار آژانس قرار داده است ØŒ تکذیب کرد . ملیسا Ùلمینگ در Ú¯Ùت Ùˆ Ú¯Ùˆ با خبرنگار واحد مرکزی خبر تاکید کرد : آژانس بین المللی انرژی اتمی هرگز درباره اطلاعات محرمانه دریاÙتی از کشورها اظهار نظر نمی کند . ÙˆÛŒ Ú¯Ùت: هم 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 @@ + +Top Stories News from Wired News + + + + + + +
      + + + +
      + +
      True to the Original
      + + + + + + + + + + + + + + + + + + + + + + + + + +

         updated 10:15 a.m.  15.Oct.99.PDT
      + + + + + + + + + + +
      + + + + + + + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +
      SECTIONS
      Business
      Culture
      Technology
      Politics
      +WIRE SERVICE NEWS
      Top Headlines
      Sports
      Finance
      + FREE DELIVERY
      + + + + +
      +
      + + + + + + + + + +  +
      + + +
      + STOCKS
      Get Quote:
       
      +Financial Services
      +
      +
      +
      + + + Datek + Wired Index Fund + internet.com Index Fund + GetSmart's MortgageFinder +
      Today's Summary
      Wired Index | All Indexes
      Portfolios
      FIND A BOOK
      + + + + + + + + + + +
      +
      + + + +
      + + + +
      +

      + Powered by barnesandnoble.com + +
      + + +

      + +
      WIRED + MAGAZINE
      + + +
      + +Wired Magazine
      + +Issue 7.11 +
      +
      + + +Subscribe to Wired.
      Special offer!
      + + +
      +
      + HOTWIRED
      +Frontdoor
      +Webmonkey
      +Webmonkey Guides
      +RGB Gallery
      +Animation Express
      +Suck.com
      +
      + HOTBOT
      +Search
      +Shopping
      +
      +
      + + + Wired News staff

      + + + + Contact us
      + + +

      + + Wired News delivered
      by PalmPilot,
      Outlook Express,
      In-Box Direct,
      +or PointCast

      + + + +
      + + + + + + + + + + + + + + + +
      +
      +

      + + + + +Nomad's Land

      Homeless, but ID'd, in Seattle
      8:15 a.m. 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.
      in Politics
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
       HITS & MISC.
       
      + + Calendar of E-Vents
      Ongoing goings-on.

      Rants & Raves
      Readers on Apple's G4 ... AOL's passwords ... MS vs. Linux.

       CURRENT HOO-HA
        + +
      + +MP3 Rocks the Web
      Download the sound.
      Sponsored by Musicmaker


      + +The Wireless World
      Networking gets unplugged.
      Sponsored by Ericsson


      + +Digital Hollywood
      The buzz of tech.

      + +IPO Outlook
      Deals in the pipeline.
      Sponsored by Sun


      + +E-Biz
      Business unusual.
      Sponsored by IBM


      + +Med-Tech Center
      From the bleeding edge.
      Sponsored by WebMD


      + +The Linux Effect
      Not just for geeks.


      + +Executive Summary
      CEOs, COOs, CIOs unite.
      Sponsored by Vignette

      + +Making the Grade
      Reading, writing, and ROM.
      Sponsored by U of Phoenix


      + +Infostructure
      An IS/IT resource
      Sponsored by Sprint

      + +Y2K Watch
      Tick... Tick... Tick...

      + +More Hoo-Ha
       
      + +
       MEANWHILE...
        +
      + + + +Führer Furor

      +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. +

    • More from Lycos

      +
    • + + + 
      + +
      + +Other Top Stories
      +
      + + +Wall Street Keeps Reeling
      10:15 a.m. 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.
      in Reuters

      The Market's Madness
      9:10 a.m. 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.
      in Reuters

      'Want a Loan? What's Your Race?'
      3:00 a.m. 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.
      in Politics

      Music Regs: A Bagful of Noise
      3:00 a.m. 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.
      in Business

      Can't Beat 'Em? Green 'Em
      3:00 a.m. 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.
      in Technology

      Y2K Cloud Over MS Office
      3:00 a.m. 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.
      in Business

      Med-Tech
      Biochips for Custom Chemo
      3:00 a.m. 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.
      in Technology

      High Stakes in Priceline Suit
      3:00 a.m. 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.
      in Business

      Biodiversity Merges Online
      3:00 a.m. 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.
      in Technology

      + + + + +
      +Elsewhere Today
      +
      + + +FCC: Hands-Off on Broadband
      The Industry Standard

      White House Lashes Out on Treaty
      Lycos

      Steve Jobs at 44
      Time

      Computers May Run on Gas
      ZDNN

      Much Is Free in the Wired World
      The New York Times (Registration Required)

      Melissa: I'm Baaaack
      USA Today

      Domain Owners Surrender Privacy
      MSNBC

      Dividing to Conquer in VC Game
      The Washington Post

      The Red Hat Diaries
      Salon

      Screensaver to Predict Climate
      BBC News

      + + + + + +
      + +
      + + + +
      +
      + +

      + +

      +Send us feedback + |  +Work at Wired Digital + |  +Advertise with us +
      +About Wired Digital + |  +Our Privacy Policy
      + + +

      Copyright © 1994-99 Wired Digital Inc. All rights reserved. + +
      + + + + + + + + + + +

      + + +
      + + +
      + + + 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 @@ + + + + Four separate rectangles + + + + + + 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 @@ + + + + This valid svg document draws a triangle which is a hyperlink + + +

      + + 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 @@ + + + This well formed svg document draws a triangle which is a hyperlink + + +

      + + 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 @@ + + + + + Kona Lavadome mountain bike + + 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. + + + + 14/12 gauge double butted spoke + + + black anodised low torsion hub + + + twin wall, eyeletted rim + + + 8 speed, wide ratio gearing + + + double cross lacing of 32 spokes + + + + + Front wheel + The front wheel provides grip, steering and some shock absorption + + + + + + + + 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 @@ + + + + This is a blue circle with a red outline + + + + + 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 @@ + + + + + + + + + + Defining things for later use + + + 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 @@ + + + + + + Company sales by region + + + This is a bar chart which shows + company sales by region. + + + + 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 @@ + + + + This is an ellipse, axis aligned and centered on the origin + + + + + 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 @@ + + + + This sample SVG file draws a flower + + + + + + 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 @@ + + + + Gradient example + + + + + + + + + + + + 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 @@ + + + + Two groups, each of two rectangles + + + + + + + + + + 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 @@ + + + + Two named groups + + + + + + + + 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 @@ + + + + Groups can nest + + + + + + + + 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 @@ + + + + This graphic links to an external image + + + My image + + 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 @@ + + + This links to an external image + + + My image + + 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 @@ + + + + Linear gradient example + + + + + + + + + + + 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 @@ + + + + + + + + + An double-headed arrow example using markers + + + + + + + + + + + + + + + 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 @@ + + + + Example of using a mask + + + + + + + + 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 @@ + + + This example uses the switch element to provide a + fallback graphical representation of an equation, if + MathML is not supported. + + + + + + + + + + + + + + Formula goes here + + + + 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 @@ + + + + + + + + + + + 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 @@ + + + + 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 @@ + + + + + + + + + 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 @@ + + + + + + + + + + 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 @@ + + + + A sample polyline, and equivalent path + + + + 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 @@ + + + + + + + + + + + + + + This chart includes private data in another namespace + + + 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 @@ + + + + Radial gradient example with three gradient stops + + + + + + + + + + + + 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 @@ + + + + This is a rectangle + + + + + 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 @@ + + + + This is an example SVG file + The global description uses markup from the + mydoc namespace. + + + + + 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 @@ + + + + + + + + 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 @@ + + + + + + + + + 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 @@ + + + + + + + Here is my title + 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 @@ + + + + + + + + + + + + + + + + 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 @@ + + + + + + + + + + Examples of inline and referenced content + + + + + + + + + + + + + + + + + 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 @@ + + + This well formed svg document contains a hyperlink + + +

      + + 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 @@ + + + + + XYZ + + ABC + + + + 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 @@ + + + + + + + + + + + + + 123 + ABC + 456 + DEF 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 @@ + + + + 123 + 456 + + 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 @@ + + + + Simple text on a path + + + Text on path + 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 @@ + + + + + + + + + + + + + General graphics on a path + + + + + + + + + + + + + + + + + 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 @@ + + + + Demonstration of coordinate transforms + + + This prints 12 pixels high. + This prints 12 pixels high. + + + + + + This prints 24 pixels high. + + + This prints 12 pixels high. + + + + 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 @@ + + + + + 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 @@ + + + + Gradients apply to leaf nodes + + + + + + + + + + + + + + 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 @@ + + + + + + + + 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 @@ + + + + This SVG drawing embeds another one, + thus establishing a new viewport + + + + + + 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 @@ + + + + Transformation with establishment of a new viewport + + + This prints 12 pixels high. + This prints 12 pixels high. + + + + + + This prints 24 pixels high. + + + This prints 12 pixels high. + + + + + + + + + + This prints 36 pixels high. + This prints 36 pixels high. + + + + + 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 @@ + + + + + + + + + + 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 @@ + + + + + + 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 @@ + + + + + + + + +]> + + diff --git a/test/VC/AttributeNmtokens b/test/VC/AttributeNmtokens new file mode 100644 index 0000000..8710de4 --- /dev/null +++ b/test/VC/AttributeNmtokens @@ -0,0 +1,6 @@ + + +]> + + 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 @@ + + +]> + violates [ VC: No Duplicate Types ] 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 @@ + + 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 @@ + +]> +

      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 @@ + +]> +Oops, this element was declared EMPTY 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 @@ + + + + +]> + This seems Ok but this was not declared 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 @@ + + + + +]> + but thiswas not declaredseems 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 @@ + + + + +]> +lacks c 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 @@ + + + + +]> + 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 @@ + + + + +]> + doc is non-deterministic 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 @@ + + +]> + 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 @@ + + + + +]> + + + first line + second line + 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 @@ + + + + +]> + + + first line + second line + 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 @@ + + + +]> + 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 @@ + + + +]> + 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 @@ + + + +]> + 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 @@ + +]> + 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 @@ + "> + + + 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 @@ + + + + +]> + violates [ VC: Unique Element Type Declaration ] 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 @@ + + + + + +]> + violates [ VC: Unique Element Type Declaration ] 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 @@ + + 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 @@ + + 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 @@ + + + + + +]> + diff --git a/test/VCM/AttributeNmtokens.xml b/test/VCM/AttributeNmtokens.xml new file mode 100644 index 0000000..575f811 --- /dev/null +++ b/test/VCM/AttributeNmtokens.xml @@ -0,0 +1,14 @@ + + + +]> + + + + + + 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 @@ + +]> + 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 @@ + + +]> + 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 @@ + + +]> + 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 @@ + + +]> + + + + + 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 @@ + + +]> + + + 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 @@ + + +]> + + + + + 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 @@ + + + + +]> + + + 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 @@ + + + +]> + + + 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 @@ + + + + +]> + 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 @@ + + + + +]> + 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 @@ + + + + +]> + 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 @@ + +]> +text 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 @@ + + + + +]> + + + + 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 @@ + + + + +]> + 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 @@ + + + + + +"> +&c;"> +]> + + +&bc; +&bc; + + 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 @@ + + + + + +]> + + + 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 @@ + + + + + + + + + + + +]> + + + 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 @@ + +]> + + +text + + 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 @@ + + +]> + 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 @@ + + +]> + + + 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 @@ + + + +]> + + + + 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 @@ + + + +]> + + + 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 @@ + + +]> + 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 @@ + + +]> + 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 @@ + + violates [ WFC: Element Type Match ] 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 @@ + + &unknown; violates [ WFC: Entity Declared ] 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 @@ + + +]> + &unknown; violates [ WFC: Entity Declared ] 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 @@ + + + &unknown; violates [ WFC: Entity Declared ] 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 @@ + +"> +]> + violates [ WFC: Entity Declared ] 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 @@ + +"> +]> + violates [ WFC: Entity Declared ] 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 @@ + +  violates [ WFC: Legal Character ] 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 @@ + + +]> + violates [ WFC: No External Entity References ] 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 @@ + + +]> + violates [ WFC: No < in Attribute Values ] 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 @@ + + + + +]> + &a; violates [ WFC: No Recursion ] 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 @@ + + + +]> + violates [ WFC: PEs in Internal Subset ] 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 @@ + + violates [ WFC: Unique Att Spec ] 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 @@ + + violates [ WFC: Unique Att Spec ] 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 @@ + + + + +]> + + + + + + + + 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 @@ + + + + Inclusion failed + + diff --git a/test/XInclude/docs/fallback2.xml b/test/XInclude/docs/fallback2.xml new file mode 100644 index 0000000..dac71f9 --- /dev/null +++ b/test/XInclude/docs/fallback2.xml @@ -0,0 +1,10 @@ + + + There is no b.xml ... + + + There is no c.xml ... + + + + 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 @@ + + + + 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 @@ + + + + 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 @@ + + + + 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 @@ + + + + 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 @@ + + 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 @@ + + + + + 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 @@ + + + + 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 @@ + + + +]> + + + + + 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 @@ + +

      something

      +

      really

      +

      simple

      + 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 @@ + 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 @@ + + + + Welcome to Gnome + + + The Linux adventure +

      bla bla bla ...

      + +

      ...

      +
      + + Chapter 2 +

      this is chapter 2 ...

      +
      + + Chapter 3 +

      this is chapter 3 ...

      +
      + + Chapter 4 +

      this is chapter 4 ...

      +
      + + Chapter 5 +

      this is chapter 5 ...

      +
      +
      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 @@ + + + + Welcome to Gnome + + + The Linux adventure +

      bla bla bla ...

      + +

      ...

      +
      + + Chapter 2 +

      this is chapter 2 ...

      +
      + + Chapter 3 +

      this is chapter 3 ...

      +
      + + Chapter 4 +

      this is chapter 4 ...

      +
      + + Chapter 5 +

      this is chapter 5 ...

      +
      +
      diff --git a/test/XPath/docs/lang b/test/XPath/docs/lang new file mode 100644 index 0000000..abfe1d6 --- /dev/null +++ b/test/XPath/docs/lang @@ -0,0 +1,13 @@ + + 1 + + en + 3 + + 4 + +
      + + + +
      diff --git a/test/XPath/docs/mixed b/test/XPath/docs/mixed new file mode 100644 index 0000000..3b457bc --- /dev/null +++ b/test/XPath/docs/mixed @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/test/XPath/docs/nodes b/test/XPath/docs/nodes new file mode 100644 index 0000000..a863df0 --- /dev/null +++ b/test/XPath/docs/nodes @@ -0,0 +1,2 @@ + +txttxt \ No newline at end of file diff --git a/test/XPath/docs/ns b/test/XPath/docs/ns new file mode 100644 index 0000000..88f4575 --- /dev/null +++ b/test/XPath/docs/ns @@ -0,0 +1,3 @@ + + + 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 @@ + + + + Welcome to Gnome + + + The Linux adventure +

      bla bla bla ...

      + +

      ...

      +
      +
      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 @@ + + +

      a simple test

      +

      multiple tests

      +

      a difficult one

      +

      a span

      n

      ing one

      +

      and an unbal

      anced test

      +

      for empty string 123

      +
      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 @@ + + + + + + + + +N + + 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 @@ + + + + + + + + + + + +]> + + + + Welcome to Gnome + + + The Linux adventure +

      bla bla bla ...

      + +

      ...

      +

      third p

      +

      fourth p

      +
      + + Chapter 2 +

      this is chapter 2 ...

      +
      + + Chapter 3 +

      this is chapter 3 ...

      +
      + + Chapter 4 +

      this is chapter 4 ...

      +
      + + Chapter 5 +

      this is chapter 5 ...

      +
      +
      diff --git a/test/XPath/expr/base b/test/XPath/expr/base new file mode 100644 index 0000000..f57e4d0 --- /dev/null +++ b/test/XPath/expr/base @@ -0,0 +1,7 @@ +1 +1+2 +2*3 +1+2*3+4 +(1+2)*(3+4) +1*1+1*1+1*1+1*1+1*1+1*1+1*1+1*1+1*1+1*1+1*1+1*1+1*1+1*1+1*1+1*1+1*1+1*1+1*1+1*1+1*1 +self::-name 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..17638f7 --- /dev/null +++ b/test/XPath/tests/chaptersbase @@ -0,0 +1,10 @@ +/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 +//p[1] 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/langsimple b/test/XPath/tests/langsimple new file mode 100644 index 0000000..f71a321 --- /dev/null +++ b/test/XPath/tests/langsimple @@ -0,0 +1,5 @@ +//*[lang('en')] +//*[lang('en-us')] +//*[lang('en-gb')] +//*[lang('fr')] +//*[lang('')] diff --git a/test/XPath/tests/mixedpat b/test/XPath/tests/mixedpat new file mode 100644 index 0000000..c212f6c --- /dev/null +++ b/test/XPath/tests/mixedpat @@ -0,0 +1,7 @@ +s +s|p1/s +s|/root/p1/s +/root/p1/s|s +//s +//s|p1 +p1|//s diff --git a/test/XPath/tests/nodespat b/test/XPath/tests/nodespat new file mode 100644 index 0000000..c157a3e --- /dev/null +++ b/test/XPath/tests/nodespat @@ -0,0 +1,5 @@ +/. +//. +/root//. +//.//./././/. +/root//././/bar//. \ No newline at end of file diff --git a/test/XPath/tests/nssimple b/test/XPath/tests/nssimple new file mode 100644 index 0000000..d2a9528 --- /dev/null +++ b/test/XPath/tests/nssimple @@ -0,0 +1,3 @@ +/doc/elem/namespace::node()/.. +/doc/elem/namespace::*/self::node()[true()] +//*[namespace::ns1] 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..8b2c7d1 --- /dev/null +++ b/test/XPath/tests/simplebase @@ -0,0 +1,15 @@ +/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() +/child::EXAMPLE/attribute::prop1/self::node() +/child::EXAMPLE/attribute::prop1/self::* +/child::EXAMPLE/attribute::prop1/descendant-or-self::node() +/child::EXAMPLE/attribute::prop1/descendant-or-self::* +/child::EXAMPLE/attribute::prop1/ancestor-or-self::node() +/child::EXAMPLE/attribute::prop1/ancestor-or-self::* +/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 @@ + diff --git a/test/att10 b/test/att10 new file mode 100644 index 0000000..5c14dc6 --- /dev/null +++ b/test/att10 @@ -0,0 +1,22 @@ + + + + + + + +]> + + + + + + + + + diff --git a/test/att11 b/test/att11 new file mode 100644 index 0000000..32faaf3 --- /dev/null +++ b/test/att11 @@ -0,0 +1,13 @@ + + + + + +]> + diff --git a/test/att2 b/test/att2 new file mode 100644 index 0000000..e630ff5 --- /dev/null +++ b/test/att2 @@ -0,0 +1 @@ + diff --git a/test/att3 b/test/att3 new file mode 100644 index 0000000..d576fec --- /dev/null +++ b/test/att3 @@ -0,0 +1 @@ + diff --git a/test/att4 b/test/att4 new file mode 100644 index 0000000..2e8bbca --- /dev/null +++ b/test/att4 @@ -0,0 +1,9264 @@ + + + + + + + diff --git a/test/att5 b/test/att5 new file mode 100644 index 0000000..2c05105 --- /dev/null +++ b/test/att5 @@ -0,0 +1,73 @@ +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/att6 b/test/att6 new file mode 100644 index 0000000..79508e9 --- /dev/null +++ b/test/att6 @@ -0,0 +1,6 @@ + + + + pvalue->ReferencedOrder.SellersOrderID + + \ 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 @@ + + + +"> +]> + + + &test.ent; + diff --git a/test/att8 b/test/att8 new file mode 100644 index 0000000..2cb6f56 --- /dev/null +++ b/test/att8 @@ -0,0 +1 @@ +/bsk:DocPart[@docId='20040308152601345236' and @docPartNo=1]XQL Request processing XQL Request processed diff --git a/test/att9 b/test/att9 new file mode 100644 index 0000000..f06b531 --- /dev/null +++ b/test/att9 @@ -0,0 +1,5 @@ + + +]> + 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 @@ + 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/badcomment.xml b/test/badcomment.xml new file mode 100644 index 0000000..147414c --- /dev/null +++ b/test/badcomment.xml @@ -0,0 +1,18 @@ + + + +Char* ']]>' Char*)) +']]>' +CDATA sections +| '<!DOCTYPE' +(Char - ('[' | ']'))+ +('[' +simpleDTD* +']')? '>' +doc type declaration +simpleDTD +'<!&como;' +(Char* - +(Char* '&comc;' Char*)) +'&comc;>'--> + 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 @@ + + +]> +&WhatHeSaid; 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 @@ + 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 @@ + diff --git a/test/c14n/1-1-without-comments/doc.dtd b/test/c14n/1-1-without-comments/doc.dtd new file mode 100755 index 0000000..c460239 --- /dev/null +++ b/test/c14n/1-1-without-comments/doc.dtd @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/test/c14n/1-1-without-comments/example-1.xml b/test/c14n/1-1-without-comments/example-1.xml new file mode 100755 index 0000000..ed450c7 --- /dev/null +++ b/test/c14n/1-1-without-comments/example-1.xml @@ -0,0 +1,14 @@ + + + + + + +Hello, world! + + + + + + diff --git a/test/c14n/1-1-without-comments/example-2.xml b/test/c14n/1-1-without-comments/example-2.xml new file mode 100755 index 0000000..74eeea1 --- /dev/null +++ b/test/c14n/1-1-without-comments/example-2.xml @@ -0,0 +1,11 @@ + + + A B + + A + + B + A B + C + + diff --git a/test/c14n/1-1-without-comments/example-3.xml b/test/c14n/1-1-without-comments/example-3.xml new file mode 100755 index 0000000..a7a1950 --- /dev/null +++ b/test/c14n/1-1-without-comments/example-3.xml @@ -0,0 +1,18 @@ +]> + + + + + + + + + + + + + + diff --git a/test/c14n/1-1-without-comments/example-4.xml b/test/c14n/1-1-without-comments/example-4.xml new file mode 100755 index 0000000..3fba138 --- /dev/null +++ b/test/c14n/1-1-without-comments/example-4.xml @@ -0,0 +1,9 @@ +]> + + First line Second line + 2 + "0" && value<"10" ?"valid":"error"]]> + valid + + + diff --git a/test/c14n/1-1-without-comments/example-5.xml b/test/c14n/1-1-without-comments/example-5.xml new file mode 100755 index 0000000..92c5322 --- /dev/null +++ b/test/c14n/1-1-without-comments/example-5.xml @@ -0,0 +1,12 @@ + + + + + +]> + + &ent1;, &ent2;! + + + diff --git a/test/c14n/1-1-without-comments/example-6.xml b/test/c14n/1-1-without-comments/example-6.xml new file mode 100755 index 0000000..31e2071 --- /dev/null +++ b/test/c14n/1-1-without-comments/example-6.xml @@ -0,0 +1,2 @@ + +© diff --git a/test/c14n/1-1-without-comments/example-7.xml b/test/c14n/1-1-without-comments/example-7.xml new file mode 100755 index 0000000..41171cb --- /dev/null +++ b/test/c14n/1-1-without-comments/example-7.xml @@ -0,0 +1,11 @@ + + +]> + + + + + + + diff --git a/test/c14n/1-1-without-comments/example-7.xpath b/test/c14n/1-1-without-comments/example-7.xpath new file mode 100755 index 0000000..84ddb08 --- /dev/null +++ b/test/c14n/1-1-without-comments/example-7.xpath @@ -0,0 +1,10 @@ + + (//.|//@*|//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()) + ] + \ No newline at end of file diff --git a/test/c14n/1-1-without-comments/example-8.xml b/test/c14n/1-1-without-comments/example-8.xml new file mode 100755 index 0000000..a07f6c7 --- /dev/null +++ b/test/c14n/1-1-without-comments/example-8.xml @@ -0,0 +1,11 @@ + + +]> + + + + + + + diff --git a/test/c14n/1-1-without-comments/example-8.xpath b/test/c14n/1-1-without-comments/example-8.xpath new file mode 100755 index 0000000..84ddb08 --- /dev/null +++ b/test/c14n/1-1-without-comments/example-8.xpath @@ -0,0 +1,10 @@ + + (//.|//@*|//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()) + ] + \ No newline at end of file diff --git a/test/c14n/1-1-without-comments/world.txt b/test/c14n/1-1-without-comments/world.txt new file mode 100755 index 0000000..04fea06 --- /dev/null +++ b/test/c14n/1-1-without-comments/world.txt @@ -0,0 +1 @@ +world \ No newline at end of file diff --git a/test/c14n/1-1-without-comments/xmlbase-c14n11spec-102.xml b/test/c14n/1-1-without-comments/xmlbase-c14n11spec-102.xml new file mode 100644 index 0000000..18b7c75 --- /dev/null +++ b/test/c14n/1-1-without-comments/xmlbase-c14n11spec-102.xml @@ -0,0 +1,16 @@ + + + +]> + + + + + + + \ No newline at end of file diff --git a/test/c14n/1-1-without-comments/xmlbase-c14n11spec-102.xpath b/test/c14n/1-1-without-comments/xmlbase-c14n11spec-102.xpath new file mode 100644 index 0000000..e919acc --- /dev/null +++ b/test/c14n/1-1-without-comments/xmlbase-c14n11spec-102.xpath @@ -0,0 +1,9 @@ + + +(//. | //@* | //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())] + diff --git a/test/c14n/1-1-without-comments/xmlbase-c14n11spec2-102.xml b/test/c14n/1-1-without-comments/xmlbase-c14n11spec2-102.xml new file mode 100644 index 0000000..d271afd --- /dev/null +++ b/test/c14n/1-1-without-comments/xmlbase-c14n11spec2-102.xml @@ -0,0 +1,16 @@ + + + +]> + + + + + + + \ No newline at end of file diff --git a/test/c14n/1-1-without-comments/xmlbase-c14n11spec2-102.xpath b/test/c14n/1-1-without-comments/xmlbase-c14n11spec2-102.xpath new file mode 100644 index 0000000..cdaad3e --- /dev/null +++ b/test/c14n/1-1-without-comments/xmlbase-c14n11spec2-102.xpath @@ -0,0 +1,9 @@ + + +(//. | //@* | //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())] + diff --git a/test/c14n/1-1-without-comments/xmlbase-c14n11spec3-102.xml b/test/c14n/1-1-without-comments/xmlbase-c14n11spec3-102.xml new file mode 100644 index 0000000..f46e1e9 --- /dev/null +++ b/test/c14n/1-1-without-comments/xmlbase-c14n11spec3-102.xml @@ -0,0 +1,14 @@ + + + + + + + + + + diff --git a/test/c14n/1-1-without-comments/xmlbase-c14n11spec3-102.xpath b/test/c14n/1-1-without-comments/xmlbase-c14n11spec3-102.xpath new file mode 100644 index 0000000..1d8dd71 --- /dev/null +++ b/test/c14n/1-1-without-comments/xmlbase-c14n11spec3-102.xpath @@ -0,0 +1,9 @@ + + +(//. | //@* | //namespace::*) +[self::a or ancestor-or-self::d] + diff --git a/test/c14n/1-1-without-comments/xmlbase-prop-1.xml b/test/c14n/1-1-without-comments/xmlbase-prop-1.xml new file mode 100755 index 0000000..24a899b --- /dev/null +++ b/test/c14n/1-1-without-comments/xmlbase-prop-1.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + diff --git a/test/c14n/1-1-without-comments/xmlbase-prop-1.xpath b/test/c14n/1-1-without-comments/xmlbase-prop-1.xpath new file mode 100755 index 0000000..168e98d --- /dev/null +++ b/test/c14n/1-1-without-comments/xmlbase-prop-1.xpath @@ -0,0 +1,11 @@ + + +(//. | //@* | //namespace::*) +[ancestor-or-self::ietf:c14n11XmlBaseDoc1 and not(ancestor-or-self::ietf:e2)] + diff --git a/test/c14n/1-1-without-comments/xmlbase-prop-2.xml b/test/c14n/1-1-without-comments/xmlbase-prop-2.xml new file mode 100755 index 0000000..4c85329 --- /dev/null +++ b/test/c14n/1-1-without-comments/xmlbase-prop-2.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + diff --git a/test/c14n/1-1-without-comments/xmlbase-prop-2.xpath b/test/c14n/1-1-without-comments/xmlbase-prop-2.xpath new file mode 100755 index 0000000..fdab085 --- /dev/null +++ b/test/c14n/1-1-without-comments/xmlbase-prop-2.xpath @@ -0,0 +1,10 @@ + + +(//. | //@* | //namespace::*) +[ancestor-or-self::ietf:e1] + diff --git a/test/c14n/1-1-without-comments/xmlbase-prop-3.xml b/test/c14n/1-1-without-comments/xmlbase-prop-3.xml new file mode 100755 index 0000000..19ce738 --- /dev/null +++ b/test/c14n/1-1-without-comments/xmlbase-prop-3.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + diff --git a/test/c14n/1-1-without-comments/xmlbase-prop-3.xpath b/test/c14n/1-1-without-comments/xmlbase-prop-3.xpath new file mode 100755 index 0000000..de87508 --- /dev/null +++ b/test/c14n/1-1-without-comments/xmlbase-prop-3.xpath @@ -0,0 +1,11 @@ + + +(//. | //@* | //namespace::*) +[ancestor-or-self::ietf:e11] + diff --git a/test/c14n/1-1-without-comments/xmlbase-prop-4.xml b/test/c14n/1-1-without-comments/xmlbase-prop-4.xml new file mode 100755 index 0000000..57e4436 --- /dev/null +++ b/test/c14n/1-1-without-comments/xmlbase-prop-4.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + diff --git a/test/c14n/1-1-without-comments/xmlbase-prop-4.xpath b/test/c14n/1-1-without-comments/xmlbase-prop-4.xpath new file mode 100755 index 0000000..818ef10 --- /dev/null +++ b/test/c14n/1-1-without-comments/xmlbase-prop-4.xpath @@ -0,0 +1,11 @@ + + +(//. | //@* | //namespace::*) +[ancestor-or-self::ietf:e111] + diff --git a/test/c14n/1-1-without-comments/xmlbase-prop-5.xml b/test/c14n/1-1-without-comments/xmlbase-prop-5.xml new file mode 100755 index 0000000..f92a897 --- /dev/null +++ b/test/c14n/1-1-without-comments/xmlbase-prop-5.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + diff --git a/test/c14n/1-1-without-comments/xmlbase-prop-5.xpath b/test/c14n/1-1-without-comments/xmlbase-prop-5.xpath new file mode 100755 index 0000000..7020803 --- /dev/null +++ b/test/c14n/1-1-without-comments/xmlbase-prop-5.xpath @@ -0,0 +1,11 @@ + + +(//. | //@* | //namespace::*) +[ancestor-or-self::ietf:e21] + diff --git a/test/c14n/1-1-without-comments/xmlbase-prop-6.xml b/test/c14n/1-1-without-comments/xmlbase-prop-6.xml new file mode 100755 index 0000000..62824f9 --- /dev/null +++ b/test/c14n/1-1-without-comments/xmlbase-prop-6.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + diff --git a/test/c14n/1-1-without-comments/xmlbase-prop-6.xpath b/test/c14n/1-1-without-comments/xmlbase-prop-6.xpath new file mode 100755 index 0000000..2b93c64 --- /dev/null +++ b/test/c14n/1-1-without-comments/xmlbase-prop-6.xpath @@ -0,0 +1,10 @@ + + +(//. | //@* | //namespace::*) +[ancestor-or-self::ietf:e3] + diff --git a/test/c14n/1-1-without-comments/xmlbase-prop-7.xml b/test/c14n/1-1-without-comments/xmlbase-prop-7.xml new file mode 100755 index 0000000..ee13916 --- /dev/null +++ b/test/c14n/1-1-without-comments/xmlbase-prop-7.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + diff --git a/test/c14n/1-1-without-comments/xmlbase-prop-7.xpath b/test/c14n/1-1-without-comments/xmlbase-prop-7.xpath new file mode 100755 index 0000000..7d37ab8 --- /dev/null +++ b/test/c14n/1-1-without-comments/xmlbase-prop-7.xpath @@ -0,0 +1,10 @@ + + +(//. | //@* | //namespace::*) +[ancestor-or-self::ietf:c14n11XmlBaseDoc1 and not(ancestor-or-self::ietf:e1 or ancestor-or-self::ietf:e2)] + diff --git a/test/c14n/1-1-without-comments/xmlid-prop-1.xml b/test/c14n/1-1-without-comments/xmlid-prop-1.xml new file mode 100644 index 0000000..ca58c2b --- /dev/null +++ b/test/c14n/1-1-without-comments/xmlid-prop-1.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/c14n/1-1-without-comments/xmlid-prop-1.xpath b/test/c14n/1-1-without-comments/xmlid-prop-1.xpath new file mode 100755 index 0000000..dc5573c --- /dev/null +++ b/test/c14n/1-1-without-comments/xmlid-prop-1.xpath @@ -0,0 +1,10 @@ + + +(//. | //@* | //namespace::*) +[ancestor-or-self::ietf:e1] + diff --git a/test/c14n/1-1-without-comments/xmlid-prop-2.xml b/test/c14n/1-1-without-comments/xmlid-prop-2.xml new file mode 100644 index 0000000..ca58c2b --- /dev/null +++ b/test/c14n/1-1-without-comments/xmlid-prop-2.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/c14n/1-1-without-comments/xmlid-prop-2.xpath b/test/c14n/1-1-without-comments/xmlid-prop-2.xpath new file mode 100755 index 0000000..bed44b7 --- /dev/null +++ b/test/c14n/1-1-without-comments/xmlid-prop-2.xpath @@ -0,0 +1,10 @@ + + +(//. | //@* | //namespace::*) +[ancestor-or-self::ietf:e11 or ancestor-or-self::ietf:e12] + diff --git a/test/c14n/1-1-without-comments/xmllang-prop-1.xml b/test/c14n/1-1-without-comments/xmllang-prop-1.xml new file mode 100644 index 0000000..1111e33 --- /dev/null +++ b/test/c14n/1-1-without-comments/xmllang-prop-1.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/c14n/1-1-without-comments/xmllang-prop-1.xpath b/test/c14n/1-1-without-comments/xmllang-prop-1.xpath new file mode 100755 index 0000000..224924e --- /dev/null +++ b/test/c14n/1-1-without-comments/xmllang-prop-1.xpath @@ -0,0 +1,10 @@ + + +(//. | //@* | //namespace::*) +[ancestor-or-self::ietf:e1] + diff --git a/test/c14n/1-1-without-comments/xmllang-prop-2.xml b/test/c14n/1-1-without-comments/xmllang-prop-2.xml new file mode 100644 index 0000000..1111e33 --- /dev/null +++ b/test/c14n/1-1-without-comments/xmllang-prop-2.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/c14n/1-1-without-comments/xmllang-prop-2.xpath b/test/c14n/1-1-without-comments/xmllang-prop-2.xpath new file mode 100755 index 0000000..ca21758 --- /dev/null +++ b/test/c14n/1-1-without-comments/xmllang-prop-2.xpath @@ -0,0 +1,10 @@ + + +(//. | //@* | //namespace::*) +[ancestor-or-self::ietf:e2] + diff --git a/test/c14n/1-1-without-comments/xmllang-prop-3.xml b/test/c14n/1-1-without-comments/xmllang-prop-3.xml new file mode 100644 index 0000000..1111e33 --- /dev/null +++ b/test/c14n/1-1-without-comments/xmllang-prop-3.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/c14n/1-1-without-comments/xmllang-prop-3.xpath b/test/c14n/1-1-without-comments/xmllang-prop-3.xpath new file mode 100755 index 0000000..86e77fa --- /dev/null +++ b/test/c14n/1-1-without-comments/xmllang-prop-3.xpath @@ -0,0 +1,10 @@ + + +(//. | //@* | //namespace::*) +[ancestor-or-self::ietf:e11] + diff --git a/test/c14n/1-1-without-comments/xmllang-prop-4.xml b/test/c14n/1-1-without-comments/xmllang-prop-4.xml new file mode 100644 index 0000000..1111e33 --- /dev/null +++ b/test/c14n/1-1-without-comments/xmllang-prop-4.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/c14n/1-1-without-comments/xmllang-prop-4.xpath b/test/c14n/1-1-without-comments/xmllang-prop-4.xpath new file mode 100755 index 0000000..fdc7661 --- /dev/null +++ b/test/c14n/1-1-without-comments/xmllang-prop-4.xpath @@ -0,0 +1,10 @@ + + +(//. | //@* | //namespace::*) +[ancestor-or-self::ietf:e11 or ancestor-or-self::ietf:e12] + diff --git a/test/c14n/1-1-without-comments/xmlspace-prop-1.xml b/test/c14n/1-1-without-comments/xmlspace-prop-1.xml new file mode 100644 index 0000000..62da9e4 --- /dev/null +++ b/test/c14n/1-1-without-comments/xmlspace-prop-1.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/c14n/1-1-without-comments/xmlspace-prop-1.xpath b/test/c14n/1-1-without-comments/xmlspace-prop-1.xpath new file mode 100755 index 0000000..bad373a --- /dev/null +++ b/test/c14n/1-1-without-comments/xmlspace-prop-1.xpath @@ -0,0 +1,10 @@ + + +(//. | //@* | //namespace::*) +[ancestor-or-self::ietf:e1] + diff --git a/test/c14n/1-1-without-comments/xmlspace-prop-2.xml b/test/c14n/1-1-without-comments/xmlspace-prop-2.xml new file mode 100644 index 0000000..62da9e4 --- /dev/null +++ b/test/c14n/1-1-without-comments/xmlspace-prop-2.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/c14n/1-1-without-comments/xmlspace-prop-2.xpath b/test/c14n/1-1-without-comments/xmlspace-prop-2.xpath new file mode 100755 index 0000000..ffb7d85 --- /dev/null +++ b/test/c14n/1-1-without-comments/xmlspace-prop-2.xpath @@ -0,0 +1,10 @@ + + +(//. | //@* | //namespace::*) +[ancestor-or-self::ietf:e2] + diff --git a/test/c14n/1-1-without-comments/xmlspace-prop-3.xml b/test/c14n/1-1-without-comments/xmlspace-prop-3.xml new file mode 100644 index 0000000..62da9e4 --- /dev/null +++ b/test/c14n/1-1-without-comments/xmlspace-prop-3.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/c14n/1-1-without-comments/xmlspace-prop-3.xpath b/test/c14n/1-1-without-comments/xmlspace-prop-3.xpath new file mode 100755 index 0000000..3f27aed --- /dev/null +++ b/test/c14n/1-1-without-comments/xmlspace-prop-3.xpath @@ -0,0 +1,10 @@ + + +(//. | //@* | //namespace::*) +[ancestor-or-self::ietf:e11] + diff --git a/test/c14n/1-1-without-comments/xmlspace-prop-4.xml b/test/c14n/1-1-without-comments/xmlspace-prop-4.xml new file mode 100644 index 0000000..62da9e4 --- /dev/null +++ b/test/c14n/1-1-without-comments/xmlspace-prop-4.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/c14n/1-1-without-comments/xmlspace-prop-4.xpath b/test/c14n/1-1-without-comments/xmlspace-prop-4.xpath new file mode 100755 index 0000000..49c4395 --- /dev/null +++ b/test/c14n/1-1-without-comments/xmlspace-prop-4.xpath @@ -0,0 +1,10 @@ + + +(//. | //@* | //namespace::*) +[ancestor-or-self::ietf:e11 or ancestor-or-self::ietf:e12] + 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 @@ + + + + + + + + + + + + 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 @@ + + + (//. | //@* | //namespace::*) + [ + + ancestor-or-self::bar:Something + ] + 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 @@ + + + + + + + + + + + + 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 @@ + + + (//. | //@* | //namespace::*) + [ + + 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()) + ] + 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 @@ + + + + + + + + + + + + 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 @@ + + + (//. | //@* | //namespace::*) + [ + + ancestor-or-self::bar:Something and + (self::text() or + (namespace-uri() != "") or + (string(self::node()) = namespace-uri(parent::node()))) + ] + 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 @@ + + + + + + + + + + + + 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 @@ + + + (//. | //@* | //namespace::*) + [ + + ancestor-or-self::bar:Something and + not (self::foo:Something) and + (self::text() or + (namespace-uri() != "") or + (string(self::node()) = namespace-uri(parent::node()))) + ] + 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 @@ + + + + + + + + + + + + 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 @@ + + + (//. | //@* | //namespace::*) + [ + + ancestor-or-self::bar:Something and + (count(parent::node()/namespace::*) != + count(parent::node()/namespace::* | self::node())) + ] + 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 @@ + + + + + + + + + + + + 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 @@ + + + (//. | //@* | //namespace::*) + [ + + ancestor-or-self::bar:Something and + (self::text() or + (namespace-uri() != "")) + ] + 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 @@ + + + + + + + + + + + + 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 @@ + + + (//. | //@* | //namespace::*) + [ + + ancestor-or-self::bar:Something and + (count(parent::node()/namespace::*) = + count(parent::node()/namespace::* | self::node())) + ] + 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 @@ + + + + + + + + + + + + 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 @@ + + + (//. | //@* | //namespace::*) + [ + + ancestor-or-self::bar:Something and + (string(self::node()) = namespace-uri(parent::node())) + ] + 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 @@ + + + + + + + + + + + + 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 @@ + + + (//. | //@* | //namespace::*) + [ + + ancestor-or-self::bar:Something and + (self::text() or + (namespace-uri() != "") or + ((name() = "") and + ((count(ancestor-or-self::node()) mod 2) = 1))) + ] + 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 @@ + + + + + + + + + + + + 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 @@ + + + (//. | //@* | //namespace::*) + [ + + ancestor-or-self::bar:Something + ] + 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 @@ + + + + + + + + + + + + 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 @@ + + + (//. | //@* | //namespace::*) + [ + + 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()) + ] + 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 @@ + + + + + + + + + + + + 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 @@ + + + (//. | //@* | //namespace::*) + [ + + ancestor-or-self::bar:Something and + (self::text() or + (namespace-uri() != "") or + (string(self::node()) = namespace-uri(parent::node()))) + ] + 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 @@ + + + + + + + + + + + + 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 @@ + + + (//. | //@* | //namespace::*) + [ + + ancestor-or-self::bar:Something and + not (self::foo:Something) and + (self::text() or + (namespace-uri() != "") or + (string(self::node()) = namespace-uri(parent::node()))) + ] + 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 @@ + + + + + + + + + + + + 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 @@ + + + (//. | //@* | //namespace::*) + [ + + ancestor-or-self::bar:Something and + (count(parent::node()/namespace::*) != + count(parent::node()/namespace::* | self::node())) + ] + 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 @@ + + + + + + + + + + + + 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 @@ + + + (//. | //@* | //namespace::*) + [ + + ancestor-or-self::bar:Something and + (self::text() or + (namespace-uri() != "")) + ] + 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 @@ + + + + + + + + + + + + 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 @@ + + + (//. | //@* | //namespace::*) + [ + + ancestor-or-self::bar:Something and + (count(parent::node()/namespace::*) = + count(parent::node()/namespace::* | self::node())) + ] + 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 @@ + + + + + + + + + + + + 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 @@ + + + (//. | //@* | //namespace::*) + [ + + ancestor-or-self::bar:Something and + (string(self::node()) = namespace-uri(parent::node())) + ] + 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 @@ + + + + + + + + + + + + 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 @@ + + + (//. | //@* | //namespace::*) + [ + + ancestor-or-self::bar:Something and + (self::text() or + (namespace-uri() != "") or + ((name() = "") and + ((count(ancestor-or-self::node()) mod 2) = 1))) + ] + 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 @@ +]> + + + + + + + + + + + + + + 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 @@ + +(//. | //@* | //namespace::*)[ancestor-or-self::e6] + \ 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 @@ +]> + + + + + + + + + + + + + + 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 @@ + +(//. | //@* | //namespace::*)[ancestor-or-self::e6] + \ No newline at end of file diff --git a/test/c14n/exc-without-comments/test-2.xml b/test/c14n/exc-without-comments/test-2.xml new file mode 100644 index 0000000..83d15a7 --- /dev/null +++ b/test/c14n/exc-without-comments/test-2.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + sj1VXDB2VMCU5qmva2OtDw3kKOs= + + + ... + + + ... + + + diff --git a/test/c14n/exc-without-comments/test-2.xpath b/test/c14n/exc-without-comments/test-2.xpath new file mode 100644 index 0000000..e57652f --- /dev/null +++ b/test/c14n/exc-without-comments/test-2.xpath @@ -0,0 +1,6 @@ + +(//. | //@* | //namespace::*) +[ + ancestor-or-self::ds:SignedInfo +] + \ 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..c460239 --- /dev/null +++ b/test/c14n/with-comments/doc.dtd @@ -0,0 +1 @@ + \ No newline at end of file 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 @@ + + + + + + +Hello, world! + + + + + + 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 @@ + + + A B + + A + + B + A B + C + + 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 @@ +]> + + + + + + + + + + + + + + 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 @@ +]> + + First line Second line + 2 + "0" && value<"10" ?"valid":"error"]]> + valid + + + 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 @@ + + + + + +]> + + &ent1;, &ent2;! + + + 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 @@ + +© 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 @@ + + +]> + + + + + + + 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 @@ + + (//.|//@*|//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()) + ] + \ 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..c460239 --- /dev/null +++ b/test/c14n/without-comments/doc.dtd @@ -0,0 +1 @@ + \ No newline at end of file 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 @@ + + + + + + +Hello, world! + + + + + + 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 @@ + + + A B + + A + + B + A B + C + + 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 @@ +]> + + + + + + + + + + + + + + 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 @@ +]> + + First line Second line + 2 + "0" && value<"10" ?"valid":"error"]]> + valid + + + 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 @@ + + + + + +]> + + &ent1;, &ent2;! + + + 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 @@ + +© 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 @@ + + +]> + + + + + + + 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 @@ + + (//.|//@*|//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()) + ] + \ 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 @@ + + + + + + + + + + + + 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 @@ + + + (//. | //@* | //namespace::*) + [ + + ancestor-or-self::bar:Something + ] + 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 @@ + + + + + + + + + + + + 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 @@ + + + (//. | //@* | //namespace::*) + [ + + 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()) + ] + 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 @@ + + + + + + + + + + + + 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 @@ + + + (//. | //@* | //namespace::*) + [ + + ancestor-or-self::bar:Something and + (self::text() or + (namespace-uri() != "") or + (string(self::node()) = namespace-uri(parent::node()))) + ] + 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 @@ + + + + + + + + + + + + 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 @@ + + + (//. | //@* | //namespace::*) + [ + + ancestor-or-self::bar:Something and + not (self::foo:Something) and + (self::text() or + (namespace-uri() != "") or + (string(self::node()) = namespace-uri(parent::node()))) + ] + 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 @@ + + + + + + + + + + + + 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 @@ + + + (//. | //@* | //namespace::*) + [ + + ancestor-or-self::bar:Something and + (count(parent::node()/namespace::*) != + count(parent::node()/namespace::* | self::node())) + ] + 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 @@ + + + + + + + + + + + + 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 @@ + + + (//. | //@* | //namespace::*) + [ + + ancestor-or-self::bar:Something and + (self::text() or + (namespace-uri() != "")) + ] + 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 @@ + + + + + + + + + + + + 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 @@ + + + (//. | //@* | //namespace::*) + [ + + ancestor-or-self::bar:Something and + (count(parent::node()/namespace::*) = + count(parent::node()/namespace::* | self::node())) + ] + 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 @@ + + + + + + + + + + + + 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 @@ + + + (//. | //@* | //namespace::*) + [ + + ancestor-or-self::bar:Something and + (string(self::node()) = namespace-uri(parent::node())) + ] + 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 @@ + + + + + + + + + + + + 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 @@ + + + (//. | //@* | //namespace::*) + [ + + ancestor-or-self::bar:Something and + (self::text() or + (namespace-uri() != "") or + ((name() = "") and + ((count(ancestor-or-self::node()) mod 2) = 1))) + ] + 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 @@ + + + + + + +]> +I am the text. 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 @@ + + + + + + +]> + + (//.|//@*|//namespace::*) + [ + self::text() + ] + 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 @@ + + + + + + +]> + + + + + CN=Merlin Hughes,O=Baltimore Technologies\, Ltd.,ST=Dublin,C=IE + + + + CN=Test DSA CA,O=Baltimore Technologies\, Ltd.,ST=Dublin,C=IE + + 970849936 + + + 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= + + + + \ 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 @@ + + + + + + +]> + + (//.|//@*|//namespace::*) + [ + ancestor-or-self::dsig:X509Data + ] + 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 @@ + + + + + + + + \ 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 @@ + + + (//. | //@* | //namespace::*) + [ + ancestor-or-self::n1:elem2 + ] + + \ 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 @@ +]> + + + + + + + + + + + + + + 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 @@ + +(//. | //@* | //namespace::*)[ancestor-or-self::e6] + \ 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/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 @@ + + + + + + + + + + + + + + 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 @@ + + + + + + + + + + + + + + + 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 @@ + + + + + + + + diff --git a/test/catalogs/whites.script b/test/catalogs/whites.script new file mode 100644 index 0000000..8f4dd13 --- /dev/null +++ b/test/catalogs/whites.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/whites.sgml b/test/catalogs/whites.sgml new file mode 100644 index 0000000..50269b7 --- /dev/null +++ b/test/catalogs/whites.sgml @@ -0,0 +1,5 @@ +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 "-//Davenport//DTD DocBook + V3.0//EN" "docbook.dtd" +PUBLIC "-//Davenport//ENTITIES DocBook Additional General Entities V3.0//EN" "dbgenent.mod" diff --git a/test/catalogs/whitex.script b/test/catalogs/whitex.script new file mode 100644 index 0000000..a49ca23 --- /dev/null +++ b/test/catalogs/whitex.script @@ -0,0 +1,7 @@ +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" +public " -//OASIS//ENTITIES DocBook XML Character Entities V4.1.2//EN" +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/whitex.xml b/test/catalogs/whitex.xml new file mode 100644 index 0000000..d742887 --- /dev/null +++ b/test/catalogs/whitex.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + diff --git a/test/cdata b/test/cdata new file mode 100644 index 0000000..bd8c474 --- /dev/null +++ b/test/cdata @@ -0,0 +1,3 @@ + +Hello, world!]]> + diff --git a/test/cdata-2-byte-UTF-8.xml b/test/cdata-2-byte-UTF-8.xml new file mode 100644 index 0000000..8552efc --- /dev/null +++ b/test/cdata-2-byte-UTF-8.xml @@ -0,0 +1,6 @@ + + + +

      +

      +
      diff --git a/test/cdata-3-byte-UTF-8.xml b/test/cdata-3-byte-UTF-8.xml new file mode 100644 index 0000000..b959a12 --- /dev/null +++ b/test/cdata-3-byte-UTF-8.xml @@ -0,0 +1,7 @@ + + + +

      +

      +

      +
      diff --git a/test/cdata-4-byte-UTF-8.xml b/test/cdata-4-byte-UTF-8.xml new file mode 100644 index 0000000..4d1d9a8 --- /dev/null +++ b/test/cdata-4-byte-UTF-8.xml @@ -0,0 +1,8 @@ + + + +

      +

      +

      +

      +
      diff --git a/test/cdata2 b/test/cdata2 new file mode 100644 index 0000000..b4db791 --- /dev/null +++ b/test/cdata2 @@ -0,0 +1,6 @@ + + + ]> + 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 @@ + + + + + + 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 @@ + + + + + + diff --git a/test/comment3.xml b/test/comment3.xml new file mode 100644 index 0000000..395f67c --- /dev/null +++ b/test/comment3.xml @@ -0,0 +1,164 @@ + + + diff --git a/test/comment4.xml b/test/comment4.xml new file mode 100644 index 0000000..93282d8 --- /dev/null +++ b/test/comment4.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/test/comment5.xml b/test/comment5.xml new file mode 100644 index 0000000..398f974 --- /dev/null +++ b/test/comment5.xml @@ -0,0 +1,9 @@ + + + diff --git a/test/comment6.xml b/test/comment6.xml new file mode 100644 index 0000000..014500b --- /dev/null +++ b/test/comment6.xml @@ -0,0 +1,13 @@ + + +]> + diff --git a/test/dav1 b/test/dav1 new file mode 100644 index 0000000..cbfd4c4 --- /dev/null +++ b/test/dav1 @@ -0,0 +1,25 @@ + + + + + + Box type A + + + J.J. Dingleheimerschmidt + + + HTTP/1.1 200 OK + + + + + + + HTTP/1.1 403 Forbidden + The user does not have access to the DingALing property. + + + There has been an access violation error. + + diff --git a/test/dav10 b/test/dav10 new file mode 100644 index 0000000..4b00da4 --- /dev/null +++ b/test/dav10 @@ -0,0 +1,4 @@ + + + http://www.ics.uci.edu/~ejw/contact.html + diff --git a/test/dav11 b/test/dav11 new file mode 100644 index 0000000..8ac23d6 --- /dev/null +++ b/test/dav11 @@ -0,0 +1,21 @@ + + + + + write + exclusive + + + + http://www.ics.uci.edu/~ejw/contact.html + + + Second-604800 + + + opaquelocktoken:xyz122393481230912asdfa09s8df09s7df + + + + + diff --git a/test/dav12 b/test/dav12 new file mode 100644 index 0000000..d8d03fe --- /dev/null +++ b/test/dav12 @@ -0,0 +1,2 @@ + +http://www.ics.uci.edu/~ejw/contact.html diff --git a/test/dav13 b/test/dav13 new file mode 100644 index 0000000..f44ae38 --- /dev/null +++ b/test/dav13 @@ -0,0 +1,16 @@ + + + + + http://webdav.sb.aol.com/workspace/webdav/proposal.doc + + + http://webdav.sb.aol.com/workspace/webdav/ + + HTTP/1.1 202 Accepted + + + http://foo.bar/blah + HTTP/1.1 403 Forbidden + + diff --git a/test/dav15 b/test/dav15 new file mode 100644 index 0000000..b80802e --- /dev/null +++ b/test/dav15 @@ -0,0 +1,20 @@ + + + + + Source + http://foo.bar/program + http://foo.bar/src/main.c + + + Library + http://foo.bar/program + http://foo.bar/src/main.lib + + + Makefile + http://foo.bar/program + http://foo.bar/src/makefile + + + diff --git a/test/dav16 b/test/dav16 new file mode 100644 index 0000000..9a7dc36 --- /dev/null +++ b/test/dav16 @@ -0,0 +1,6 @@ + + + + + + diff --git a/test/dav17 b/test/dav17 new file mode 100644 index 0000000..1137662 --- /dev/null +++ b/test/dav17 @@ -0,0 +1,22 @@ + + + + + + + write + exclusive + + http://foo.com/doc/ + + Jane Smith + Infinite + + iamuri:unique!!!!! + + + + + HTTP/1.1 200 OK + + diff --git a/test/dav18 b/test/dav18 new file mode 100644 index 0000000..3de1c19 --- /dev/null +++ b/test/dav18 @@ -0,0 +1,6 @@ + + + + + + diff --git a/test/dav19 b/test/dav19 new file mode 100644 index 0000000..9535ffc --- /dev/null +++ b/test/dav19 @@ -0,0 +1,18 @@ + + + + + + + Write + Exclusive + + + Write + Shared + + + + HTTP/1.1 200 OK + + diff --git a/test/dav2 b/test/dav2 new file mode 100644 index 0000000..f831b4b --- /dev/null +++ b/test/dav2 @@ -0,0 +1,24 @@ + + + + http://www.foo.bar/container/ + + + Box type A + + + Hadrian + + + HTTP 1.1 200 OK + + + http://www.foo.bar/container/index.html + + + Box type B + + + HTTP 1.1 200 OK + + diff --git a/test/dav3 b/test/dav3 new file mode 100644 index 0000000..986b3fe --- /dev/null +++ b/test/dav3 @@ -0,0 +1,18 @@ + + + + http://www.foo.bar/container/ + + + + + HTTP 1.1 200 OK + + + http://www.foo.bar/container/index.html + + + + HTTP 1.1 200 OK + + diff --git a/test/dav4 b/test/dav4 new file mode 100644 index 0000000..9ab7ceb --- /dev/null +++ b/test/dav4 @@ -0,0 +1,16 @@ + + + + + + Jim Whitehead + Roy Fielding + + + + + + + + + diff --git a/test/dav5 b/test/dav5 new file mode 100644 index 0000000..68ebab9 --- /dev/null +++ b/test/dav5 @@ -0,0 +1,17 @@ + + + + + + + HTTP/1.1 420 Method Failure + + + + + + HTTP/1.1 409 Conflict + + Copyright Owner can not be deleted or +altered. + diff --git a/test/dav6 b/test/dav6 new file mode 100644 index 0000000..3d0de24 --- /dev/null +++ b/test/dav6 @@ -0,0 +1,22 @@ + + + + http://www.microsoft.com/user/yarong/dav_drafts/ + + + + + + + HTTP 1.1 200 OK + + + + http://www.microsoft.com/user/yarong/dav_drafts/base + + + + + HTTP 1.1 200 OK + + diff --git a/test/dav7 b/test/dav7 new file mode 100644 index 0000000..ec4a952 --- /dev/null +++ b/test/dav7 @@ -0,0 +1,16 @@ + + + + http://www.foo.bar/container/resource1 + http://www.foo.bar/container/resource2 + HTTP/1.1 200 OK + + + http://www.foo.bar/container/ + HTTP/1.1 420 Method Failure + + + http://www.foo.bar/container/resource3 + HTTP/1.1 412 Precondition Failed + + diff --git a/test/dav8 b/test/dav8 new file mode 100644 index 0000000..7f99baf --- /dev/null +++ b/test/dav8 @@ -0,0 +1,14 @@ + + + + http://www.foo.bar/othercontainer/resource1 + http://www.foo.bar/othercontainer/resource2 + http://www.foo.bar/othercontainer/ + http://www.foo.bar/othercontainer/R2/D2 + HTTP/1.1 201 Created + + + http://www.foo.bar/othercontainer/R2/ + HTTP/1.1 412 Precondition Failed + + diff --git a/test/dav9 b/test/dav9 new file mode 100644 index 0000000..8ed63b8 --- /dev/null +++ b/test/dav9 @@ -0,0 +1,18 @@ + + + + http://www.foo.bar/container/resource1 + http://www.foo.bar/container/resource2 + http://www.foo.bar/container/ + http://www.foo.bar/container/C2/R2 + HTTP/1.1 201 Created + + + http://www.foo.bar/container/C2 + HTTP/1.1 420 Method Failure + + + http://www.foo.bar/othercontainer/C2 + HTTP/1.1 409 Conflict + + 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 @@ + + +]> + 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 @@ + + +]> + diff --git a/test/dia1 b/test/dia1 new file mode 100644 index 0000000..207bd73 --- /dev/null +++ b/test/dia1 @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/dia2 b/test/dia2 new file mode 100644 index 0000000..207bd73 --- /dev/null +++ b/test/dia2 @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/dtd1 b/test/dtd1 new file mode 100644 index 0000000..35c9dc7 --- /dev/null +++ b/test/dtd1 @@ -0,0 +1,5 @@ + + + + diff --git a/test/dtd10 b/test/dtd10 new file mode 100644 index 0000000..f5e49e7 --- /dev/null +++ b/test/dtd10 @@ -0,0 +1,8 @@ + + + + + +]> +This is a valid document diff --git a/test/dtd11 b/test/dtd11 new file mode 100644 index 0000000..bdd512b --- /dev/null +++ b/test/dtd11 @@ -0,0 +1,5 @@ + + +]> + diff --git a/test/dtd12 b/test/dtd12 new file mode 100644 index 0000000..a0fbf22 --- /dev/null +++ b/test/dtd12 @@ -0,0 +1,5 @@ + + +]> +&WhatHeSaid; diff --git a/test/dtd13 b/test/dtd13 new file mode 100644 index 0000000..d18d00c --- /dev/null +++ b/test/dtd13 @@ -0,0 +1,6 @@ + + +]> + + diff --git a/test/dtd2 b/test/dtd2 new file mode 100644 index 0000000..3bcc101 --- /dev/null +++ b/test/dtd2 @@ -0,0 +1,4 @@ + +]> +This is a valid document ! diff --git a/test/dtd3 b/test/dtd3 new file mode 100644 index 0000000..63f44a5 --- /dev/null +++ b/test/dtd3 @@ -0,0 +1,5 @@ + +]> +This is a valid document ! + diff --git a/test/dtd4 b/test/dtd4 new file mode 100644 index 0000000..5457b91 --- /dev/null +++ b/test/dtd4 @@ -0,0 +1,4 @@ + +]> + diff --git a/test/dtd5 b/test/dtd5 new file mode 100644 index 0000000..a33889b --- /dev/null +++ b/test/dtd5 @@ -0,0 +1,6 @@ + + + +]> +This is a valid document diff --git a/test/dtd6 b/test/dtd6 new file mode 100644 index 0000000..35e63fc --- /dev/null +++ b/test/dtd6 @@ -0,0 +1,6 @@ + + + +]> +This is a valid document diff --git a/test/dtd7 b/test/dtd7 new file mode 100644 index 0000000..b151c21 --- /dev/null +++ b/test/dtd7 @@ -0,0 +1,6 @@ + + + +]> +This is a valid document diff --git a/test/dtd8 b/test/dtd8 new file mode 100644 index 0000000..ce7a291 --- /dev/null +++ b/test/dtd8 @@ -0,0 +1,8 @@ + + + + + +]> +This is a valid document diff --git a/test/dtd9 b/test/dtd9 new file mode 100644 index 0000000..144b8c5 --- /dev/null +++ b/test/dtd9 @@ -0,0 +1,8 @@ + + + + + +]> +This is a valid document 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 @@ + + + diff --git a/test/ebcdic_566012.xml b/test/ebcdic_566012.xml new file mode 100644 index 0000000..09b4e7b --- /dev/null +++ b/test/ebcdic_566012.xml @@ -0,0 +1 @@ +Lo§”“@¥…™¢‰–•~ñKð@…•ƒ–„‰•‡~ÉÂÔ`ññôñ@on%L£…¢£@££™~JàZ@an% \ No newline at end of file diff --git a/test/emptycdata.xml b/test/emptycdata.xml new file mode 100644 index 0000000..bc98388 --- /dev/null +++ b/test/emptycdata.xml @@ -0,0 +1,4 @@ + + + + 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; + diff --git a/test/ent10 b/test/ent10 new file mode 100644 index 0000000..4778d89 --- /dev/null +++ b/test/ent10 @@ -0,0 +1,21 @@ + + + + + + + + hello world + + " +> +]> + + + &f; + + diff --git a/test/ent11 b/test/ent11 new file mode 100644 index 0000000..6c611c1 --- /dev/null +++ b/test/ent11 @@ -0,0 +1,6 @@ + + +]> + +&newl; diff --git a/test/ent12 b/test/ent12 new file mode 100644 index 0000000..f495831 --- /dev/null +++ b/test/ent12 @@ -0,0 +1,8 @@ + + + +]> + + &bar; + diff --git a/test/ent13 b/test/ent13 new file mode 100644 index 0000000..f5ebd89 --- /dev/null +++ b/test/ent13 @@ -0,0 +1,6 @@ + + +]> +a + diff --git a/test/ent2 b/test/ent2 new file mode 100644 index 0000000..155e2d2 --- /dev/null +++ b/test/ent2 @@ -0,0 +1,11 @@ + + + + +]> + + &title; + This text is about XML, the &xml; and this is an embedded + + diff --git a/test/ent3 b/test/ent3 new file mode 100644 index 0000000..f9803b8 --- /dev/null +++ b/test/ent3 @@ -0,0 +1,8 @@ + + +]> + + Test of entities in attributes. + + diff --git a/test/ent4 b/test/ent4 new file mode 100644 index 0000000..e668b40 --- /dev/null +++ b/test/ent4 @@ -0,0 +1,8 @@ + + +]> + + Test of &amp; behaviour a&b . + + diff --git a/test/ent5 b/test/ent5 new file mode 100644 index 0000000..adb9ea7 --- /dev/null +++ b/test/ent5 @@ -0,0 +1,5 @@ + + + This is an inverted exclamation sign ¡ + This is a space + diff --git a/test/ent6 b/test/ent6 new file mode 100644 index 0000000..40b2f12 --- /dev/null +++ b/test/ent6 @@ -0,0 +1,8 @@ + + + + + +]> + diff --git a/test/ent7 b/test/ent7 new file mode 100644 index 0000000..3ef2030 --- /dev/null +++ b/test/ent7 @@ -0,0 +1,7 @@ +"> + +%sampleEnt; + +]> +'they called me &sampleEnt;' diff --git a/test/ent8 b/test/ent8 new file mode 100644 index 0000000..5eeccf2 --- /dev/null +++ b/test/ent8 @@ -0,0 +1,9 @@ + + +]> + + Retenção + <> + &test1;&test2; + diff --git a/test/ent9 b/test/ent9 new file mode 100644 index 0000000..5db63ba --- /dev/null +++ b/test/ent9 @@ -0,0 +1,61 @@ +,,,"> +]> + + &test1; +

      WE need lot of garbage now to trigger the problem

      +

      WE need lot of garbage now to trigger the problem

      +

      WE need lot of garbage now to trigger the problem

      +

      WE need lot of garbage now to trigger the problem

      +

      WE need lot of garbage now to trigger the problem

      +

      WE need lot of garbage now to trigger the problem

      +

      WE need lot of garbage now to trigger the problem

      +

      WE need lot of garbage now to trigger the problem

      +

      WE need lot of garbage now to trigger the problem

      +

      WE need lot of garbage now to trigger the problem

      +

      WE need lot of garbage now to trigger the problem

      +

      WE need lot of garbage now to trigger the problem

      +

      WE need lot of garbage now to trigger the problem

      +

      WE need lot of garbage now to trigger the problem

      +

      WE need lot of garbage now to trigger the problem

      +

      WE need lot of garbage now to trigger the problem

      +

      WE need lot of garbage now to trigger the problem

      +

      WE need lot of garbage now to trigger the problem

      +

      WE need lot of garbage now to trigger the problem

      +

      WE need lot of garbage now to trigger the problem

      +

      WE need lot of garbage now to trigger the problem

      +

      WE need lot of garbage now to trigger the problem

      +

      WE need lot of garbage now to trigger the problem

      +

      WE need lot of garbage now to trigger the problem

      +

      WE need lot of garbage now to trigger the problem

      +

      WE need lot of garbage now to trigger the problem

      +

      WE need lot of garbage now to trigger the problem

      +

      WE need lot of garbage now to trigger the problem

      +

      WE need lot of garbage now to trigger the problem

      +

      WE need lot of garbage now to trigger the problem

      +

      WE need lot of garbage now to trigger the problem

      +

      WE need lot of garbage now to trigger the problem

      +

      WE need lot of garbage now to trigger the problem

      +

      WE need lot of garbage now to trigger the problem

      +

      WE need lot of garbage now to trigger the problem

      +

      WE need lot of garbage now to trigger the problem

      +

      WE need lot of garbage now to trigger the problem

      +

      WE need lot of garbage now to trigger the problem

      +

      WE need lot of garbage now to trigger the problem

      +

      WE need lot of garbage now to trigger the problem

      +

      WE need lot of garbage now to trigger the problem

      +

      WE need lot of garbage now to trigger the problem

      +

      WE need lot of garbage now to trigger the problem

      +

      WE need lot of garbage now to trigger the problem

      +

      WE need lot of garbage now to trigger the problem

      +

      WE need lot of garbage now to trigger the problem

      +

      WE need lot of garbage now to trigger the problem

      +

      WE need lot of garbage now to trigger the problem

      +

      WE need lot of garbage now to trigger the problem

      +

      WE need lot of garbage now to trigger the problem

      +

      WE need lot of garbage now to trigger the problem

      +

      WE need lot of garbage now to trigger the problem

      +

      WE need lot of garbage now to trigger the problem

      + &test1; +
      + diff --git a/test/ent_738805.xml b/test/ent_738805.xml new file mode 100644 index 0000000..9ec70b1 --- /dev/null +++ b/test/ent_738805.xml @@ -0,0 +1,16 @@ + + + +]> + + + + + +&a; should appear after colon: &a; +&b; should appear after colon: &a; +&a; should appear after colon: &b; +&b; should appear after colon: &b; + + diff --git a/test/errors/754946.xml b/test/errors/754946.xml new file mode 100644 index 0000000..6b5f9b0 --- /dev/null +++ b/test/errors/754946.xml @@ -0,0 +1 @@ +%SYSTEM; \ No newline at end of file diff --git a/test/errors/758588.xml b/test/errors/758588.xml new file mode 100644 index 0000000..bec7e93 --- /dev/null +++ b/test/errors/758588.xml @@ -0,0 +1 @@ + + + + + + + + + + + + + + + + + +"> + +'"> + + + + + + + + + +amp, +lt, +gt, +apos, +quot"> + + + + + +]> + + + + + +
      +Extensible Markup Language (XML) 1.0 + +REC-xml-&iso6.doc.date; +W3C Recommendation +&draft.day;&draft.month;&draft.year; + + + +http://www.w3.org/TR/1998/REC-xml-&iso6.doc.date; + +http://www.w3.org/TR/1998/REC-xml-&iso6.doc.date;.xml + +http://www.w3.org/TR/1998/REC-xml-&iso6.doc.date;.html + +http://www.w3.org/TR/1998/REC-xml-&iso6.doc.date;.pdf + +http://www.w3.org/TR/1998/REC-xml-&iso6.doc.date;.ps + + + +httÿÿÿ€www.w3.org/TR/REC-xml + + + +http://www.w3.org/TR/PR-xml-971208 + + + +Tim Bray +Textuality and Netscape +tbray@textuality.com +Jean Paoli +Microsoft +jeanpa@microsoft.com +C. M. Sperberg-McQueen +University of Illinois at Chicago +cmsmcq@uic.edu + + +

      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.

      +
      + +

      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 spPcification and to promote its widespread +deployment. This enhances the functionality and +interoperability of the Web.

      +

      +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 http://www.w3.org/XML. A list of +current W3C Recommendations and other technical documents can be found +at http://www.w3.org/TR. +

      +

      This specification uses the term URI, which is defined by , a work in progress expected to update and . +

      +

      The list of known errors in this specification is +available at +http://www.w3.org/XML/xml-19980210-errata.

      +

      Please report errors in this document to +xml-editor@w3.org. +

      +
      + + + +

      Chicago, Vancouver, Mountain View, et al.: +World-Wide Web Consortium, XML Working Group, 1996, 1997.

      +
      + +

      Created in electronic form.

      +
      + +English +Extended Backus-Naur Form (formal grammar) + + + +1997-12-03 : CMSMcQ : yet further changes +1997-12-02 : TB : further changes (see TB to XML WG, +2 December 1997) +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 < in attriubte values +uppercase hex characters, +namechar list, + +1997-12-01 : JB : add some column-width parameters +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 definÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙxamples with Byte Order Mark. +Add content model as a term and clarify that it applies to both +mixed and element content. + +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 whi +1997-06-29 : TB : various edits +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 (?). + +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 validawwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww it meant 'may or may not'. +1997-03-21 : TB : massive changes on plane flight from Chicago +to Vancouver +1997-03-21 : CMSMcQ : correct as many reported errors as possible. + +1997-03-20 : CMSMcQ : correct typos listed in CMSMcQ hand copy of spec. +1997 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. + +1996-11-11 : CMSMcQ : revise for style. +Add new rhs to entity declaration, for parameter entities. +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. +1996-10-31 : TB : Add Entity Handling section +1996-10-30 : TB : Clean up term & termdef. Slip in +ERB decision re EMPTY. +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. +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 only 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. +1996-10-16 : TB : track down & excise all DSD references; +introduce some EBNF for entity declarations. +1996-10-?? nsistency check, fix up scraps so +they all parse, get formatter working, correct a few productions. +1996-10-10/11 : CMSMcQ : various maintenance, stylistic, and +organizational changes: +Replace a few literals with xmlpio and +pi""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. +1996-10-10 : TB : eliminate name recognizers (and more?) +1996-10-09 : CMSMcQ : revise for style, consistency through 2.3 +(Characters) +1996-10-09 : CMSMcQ : re-unite everything for convenience, +at least temporarily, and revise quickly +1996-10-08 : TB : first major homogenization pass +1996-10-08 : TB : turn "current" attribute on div type into +CDATA +1996-10-02 : TB : remould into skeleton + entities +1996-09-30 : CMSMcQ : add a few more sections prior to exchange + with Tim. +1996-09-20 : CMSMcQ : finish transcribing notes. +1996-09-19 : CMSMcQ : begin transcribing notes for draft. +1996-09-13 : CMSMcQ : made outline from notes of 09-06, +do some housekeeping + + +
      +<ðððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððm> is used to read XML documents +and provide access to their content and structure. It is @ssumed that an XML processor is +doing its work on behalf of another module, called the +application. This specification describes the +required beh\vior of an XML processor in terms of how it must read XML +data and the information it must provide to the application.

      + + +Origin and Goals +

      XML was developed by an XML Working Group (orisable over the +Internet.

      +

      XML shall support a wide variey of applications.

      +

      XML shall be compatible with SGML.

      +

      It shall be easy to write programs which process XML +documents.

      +

      The number of optional features in XML is to be kept to the +absolute minimum, ideally zero.

      +

      XML documents shou \ No newline at end of file diff --git a/test/errors/759573-2.xml b/test/errors/759573-2.xml new file mode 100644 index 0000000..5ad655f --- /dev/null +++ b/test/errors/759573-2.xml @@ -0,0 +1,9 @@ + + + +' > +%xx;ÿggKENSMYNT#MENTDŴzz;'> +r.B"/> +e %xx; \ No newline at end of file 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 @@ +oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo diff --git a/test/errors/attr3.xml b/test/errors/attr3.xml new file mode 100644 index 0000000..e2567f5 --- /dev/null +++ b/test/errors/attr3.xml @@ -0,0 +1,6 @@ + + + +]> + diff --git a/test/errors/attr4.xml b/test/errors/attr4.xml new file mode 100644 index 0000000..553bbce --- /dev/null +++ b/test/errors/attr4.xml @@ -0,0 +1 @@ + diff --git a/test/errors/cdata.xml b/test/errors/cdata.xml new file mode 100644 index 0000000..8f2bc09 --- /dev/null +++ b/test/errors/cdata.xml @@ -0,0 +1,2 @@ + + diff --git a/test/errors/charref1.xml b/test/errors/charref1.xml new file mode 100644 index 0000000..11423df --- /dev/null +++ b/test/errors/charref1.xml @@ -0,0 +1 @@ + diff --git a/test/errors/comment1.xml b/test/errors/comment1.xml new file mode 100644 index 0000000..b02bb17 --- /dev/null +++ b/test/errors/comment1.xml @@ -0,0 +1,6 @@ + +]> + + diff --git a/test/errors/content1.xml b/test/errors/content1.xml new file mode 100644 index 0000000..7264694 --- /dev/null +++ b/test/errors/content1.xml @@ -0,0 +1,10 @@ + + + + + + +]> +Any content + 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 @@ + +]> + + +]> + + diff --git a/test/expr/base b/test/expr/base new file mode 100644 index 0000000..7ba11e2 --- /dev/null +++ b/test/expr/base @@ -0,0 +1,86 @@ +=>a +1 a +1 a | a +0 b +=>a|b +1 a +1 b +1 a | b +0 a{0} +0 b{0} +=>a | b | a +1 a +1 b +1 a | b +1 b | a +1 a | b | b +1 a | b | a +1 b | a | b +=>a,a +1 a,a +0 a +0 a,a,a +=>a{0,3} +1 a{3} +1 a +1 a,a,a +1 a{1,3} +=>(a|b){0,4} +1 a +1 b +1 a,b +1 a,b,a,b +0 b,a,b,a,b +1 b,a{1,3} +1 a{1,3},b +0 a{1,3},b,a +0 a{1,4},b +0 a{0,5} +1 (b|a){0,4} +0 (b|a){0,4},a +1 (a,b){0,2} +1 (a,b){0,1},b +=> a* +1 a +1 a? +1 a+ +1 a* +1 a{0} +=> a+ +1 a +0 a? +1 a+ +0 a* +1 a?,a +1 a,a* +1 a*,a +1 a?,a*,a +1 a*,a?,a +=>(a|b)* +1 a +1 b +1 a,b +1 a,b,a,b +1 (b|a){0,4} +1 (b|a){0,4},a +1 a* +1 b* +1 (a|b)* +1 a{1,3} +1 b,a{1,3} +1 a{1,3},b +1 a*,(a|b)* +1 a*,b{2,5} +1 a*,(a|b)*,b{2,5} +=>(a|b)+,(c|d) +1 a+,c +0 a*,c +1 a,c +1 a,b*,a*,c +# more complex +=>(a|b),(a|c){0,100} +1 a{0,100},(a|c) +0 a{0,101},(a|c) +# the example from cmsmcq at extreme markup 05 +=>(a, ((b, c, d){0,5}, e{0,1}){0,4}, f) +1 (a, b, (c, d, b){2,3}, c, d, e, f) diff --git a/test/intsubset.xml b/test/intsubset.xml new file mode 100644 index 0000000..709de15 --- /dev/null +++ b/test/intsubset.xml @@ -0,0 +1,6 @@ + + + +]> + diff --git a/test/intsubset2.xml b/test/intsubset2.xml new file mode 100644 index 0000000..4ae845a --- /dev/null +++ b/test/intsubset2.xml @@ -0,0 +1,282 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +] > + + diff --git a/test/isolat1 b/test/isolat1 new file mode 100644 index 0000000..1e5a059 --- /dev/null +++ b/test/isolat1 @@ -0,0 +1,2 @@ + + diff --git a/test/isolat2 b/test/isolat2 new file mode 100644 index 0000000..8c290b9 --- /dev/null +++ b/test/isolat2 @@ -0,0 +1,107 @@ + + + + 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 + + diff --git a/test/isolat3 b/test/isolat3 new file mode 100644 index 0000000..40fb3a0 --- /dev/null +++ b/test/isolat3 @@ -0,0 +1,10 @@ + + + + +]]> +then the replacement text for the entity "book" is: +La Peste: Albert Camus, +© 1947 Éditions Gallimard. &rights; + diff --git a/test/japancrlf.xml b/test/japancrlf.xml new file mode 100644 index 0000000..480cb2d --- /dev/null +++ b/test/japancrlf.xml @@ -0,0 +1,6 @@ +<入力メッセージ + xmlns="http://schemas.cordys.com/webapps/1.0/bpm/c8c8b82a-0ac0-3d19-01e2-bda74af9b826"> + + \ No newline at end of file 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 @@ + 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 @@ + 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 @@ + 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 @@ + 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 @@ + 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 @@ + 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 @@ + 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 @@ + 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 @@ + 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 @@ + diff --git a/test/namespaces/reconcile/tests-to-c.xsl b/test/namespaces/reconcile/tests-to-c.xsl new file mode 100644 index 0000000..9a0d1c6 --- /dev/null +++ b/test/namespaces/reconcile/tests-to-c.xsl @@ -0,0 +1,275 @@ + + + + + + +#include +#include +#include +]]> + + + + + +int main(int argc, char **argv) { + + + /* printf("finished.\n"); */ + return (0); +} + + + + + nsTest_ + + (); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + xmlDocPtr + + ; + const char * + + _str = " + + + + "; + + + + const char * + exp_str = " + + + + "; + + + + + + = xmlReadDoc(BAD_CAST + + _str, NULL, NULL, 0); + + + + xmlFreeDoc( + + ); + + + + + + + xmlNodePtr + + ; + + + + + + /* Selecting node "". */ + xp = xmlXPathNewContext( + + ); + + + xmlXPathRegisterNs(xp, BAD_CAST " + + ", BAD_CAST " + + "); + + + + + = nsSelectNode(xp, " + + "); + xmlXPathFreeContext(xp); + + + + + + /* Reconcile node "". */ + xmlDOMWrapReconcileNamespaces(NULL, + + , 0); + + + + + xmlDOMWrapRemoveNode(NULL, + + ->doc, + + , 0); + + + + + /* Adopt "". */ + xmlDOMWrapAdoptNode(NULL, + + ->doc, + + , + + , + + + + + + NULL + + + , 0); + + + + + xmlAddChild( + + , + + ); + + + + + /* Serialize "". */ + result_str = nsSerializeNode(xmlDocGetRootElement( + + )); + /* Compare result. */ + if (! xmlStrEqual(BAD_CAST result_str, BAD_CAST exp_str)) { + printf("FAILED\n"); + printf("%s\n", (const char *) result_str); + printf("- - -\n"); + printf("Expected:\n%s\n", exp_str); + printf("= = =\n"); + } + xmlFree(result_str); + + + + + void nsTest_ + + (void) { + xmlChar * result_str; + xmlXPathContextPtr xp; + int memory; + + + memory = xmlMemUsed(); + xmlInitParser(); + + + xmlCleanupParser(); + memory = xmlMemUsed() - memory; + + if (memory != 0) { + printf("## '%s' MEMORY leak: %d\n", " + + ", memory); + } +} + + + + + + +xmlChar * nsSerializeNode(xmlNodePtr node) { + xmlChar * ret; + + xmlOutputBufferPtr buf; + buf = xmlAllocOutputBuffer(NULL); + xmlNodeDumpOutput(buf, node->doc, node, 0, 0, NULL); + xmlOutputBufferFlush(buf); + ret = (xmlChar *) buf->buffer->content; + buf->buffer->content = NULL; + (void) xmlOutputBufferClose(buf); + return (ret); +} + +xmlNodePtr nsSelectNode(xmlXPathContextPtr xp, const char * xpath) { + xmlXPathObjectPtr xpres; + xmlNodePtr ret; + + xpres = xmlXPathEval(BAD_CAST xpath, xp); + ret = xpres->nodesetval->nodeTab[0]; + xmlXPathFreeObject(xpres); + return (ret); +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/namespaces/reconcile/tests.xml b/test/namespaces/reconcile/tests.xml new file mode 100644 index 0000000..c6f8c54 --- /dev/null +++ b/test/namespaces/reconcile/tests.xml @@ -0,0 +1,249 @@ + + + + + ]]> + ]]> + ]]> + + + + + + + + + + + + + + + + + + + + + + + + + + ]]> + + + + ]]> + ]]> + + + + + + + + + + + + + + ]]> + + + + ]]> + ]]> + + + + + + + + + + + + + + ]]> + + + + + ]]> + ]]> + + + + + + + + + + + + + + ]]> + + + + + ]]> + ]]> + + + + + + + + + + + + + + ]]> + + + + + ]]> + ]]> + + + + + + + + + + + + + + ]]> + + + + + ]]> + ]]> + + + + + + + + + + + + + + + +]]> + + + + + ]]> + ]]> + + + + + + + + + + + + + + + +]]> + + + + + +

      + + + + + + +]]> + + + + + + + + + + +

      + + + + + +

      + +]]> + + + + + + + + + + + + +]]> + + + + + + + + + + + + + + + + + + + +]]> + + diff --git a/test/ns b/test/ns new file mode 100644 index 0000000..94b927e --- /dev/null +++ b/test/ns @@ -0,0 +1,4 @@ + + + + diff --git a/test/ns2 b/test/ns2 new file mode 100644 index 0000000..80aaf94 --- /dev/null +++ b/test/ns2 @@ -0,0 +1,3 @@ + + diff --git a/test/ns3 b/test/ns3 new file mode 100644 index 0000000..76bb20d --- /dev/null +++ b/test/ns3 @@ -0,0 +1,3 @@ + + diff --git a/test/ns4 b/test/ns4 new file mode 100644 index 0000000..136bf92 --- /dev/null +++ b/test/ns4 @@ -0,0 +1,2 @@ + + diff --git a/test/ns5 b/test/ns5 new file mode 100644 index 0000000..d75d345 --- /dev/null +++ b/test/ns5 @@ -0,0 +1,4 @@ + + + + diff --git a/test/ns6 b/test/ns6 new file mode 100644 index 0000000..1f2a8b3 --- /dev/null +++ b/test/ns6 @@ -0,0 +1,4 @@ + + + + diff --git a/test/ns7 b/test/ns7 new file mode 100644 index 0000000..d32b3b4 --- /dev/null +++ b/test/ns7 @@ -0,0 +1 @@ + diff --git a/test/nsclean.xml b/test/nsclean.xml new file mode 100644 index 0000000..c293ddb --- /dev/null +++ b/test/nsclean.xml @@ -0,0 +1,9 @@ + +
      + + +
      + diff --git a/test/p3p b/test/p3p new file mode 100644 index 0000000..dad8fb7 --- /dev/null +++ b/test/p3p @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + diff --git a/test/pattern/conj.pat b/test/pattern/conj.pat new file mode 100644 index 0000000..ca80a06 --- /dev/null +++ b/test/pattern/conj.pat @@ -0,0 +1,8 @@ +a|b +a|c +b|c +a|b|c +/a|b +b|/a +a//c|b//c +d|e|f|g|h|a diff --git a/test/pattern/conj.xml b/test/pattern/conj.xml new file mode 100644 index 0000000..c1c770e --- /dev/null +++ b/test/pattern/conj.xml @@ -0,0 +1,13 @@ +
      + + + + + + + + + + + + diff --git a/test/pattern/multiple.pat b/test/pattern/multiple.pat new file mode 100644 index 0000000..3f1ee3e --- /dev/null +++ b/test/pattern/multiple.pat @@ -0,0 +1,27 @@ +a +b +c +c/a +c/b +b/a +c/b/a +c//a +c//b +b//a +c//b//a +c/b//a +c//b/a +/a +/b +/c +/c/a +/c/b +/b/a +/c/b/a +/c//a +/c//b +/b//a +/c//b//a +/c/b//a +/c//b/a + diff --git a/test/pattern/multiple.xml b/test/pattern/multiple.xml new file mode 100644 index 0000000..62f31a5 --- /dev/null +++ b/test/pattern/multiple.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/test/pattern/namespaces.pat b/test/pattern/namespaces.pat new file mode 100644 index 0000000..c273a10 --- /dev/null +++ b/test/pattern/namespaces.pat @@ -0,0 +1,10 @@ +//a +//a:a +//b +//b:b +/a//a +/a/a +/a/b +/a/a:a +/a/a:b +/a/c:a diff --git a/test/pattern/namespaces.xml b/test/pattern/namespaces.xml new file mode 100644 index 0000000..1ebb50f --- /dev/null +++ b/test/pattern/namespaces.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/test/pattern/simple.pat b/test/pattern/simple.pat new file mode 100644 index 0000000..1b298ae --- /dev/null +++ b/test/pattern/simple.pat @@ -0,0 +1,15 @@ +a +b +b +/a +/b +/c +a/b +a/b/c +//a +//b +//c +a//b +a//c +b//c + diff --git a/test/pattern/simple.xml b/test/pattern/simple.xml new file mode 100644 index 0000000..16ac6c2 --- /dev/null +++ b/test/pattern/simple.xml @@ -0,0 +1,5 @@ + + + text + + 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 @@ + + + + + + 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 @@ + + + + + + diff --git a/test/rdf1 b/test/rdf1 new file mode 100644 index 0000000..d44c3c6 --- /dev/null +++ b/test/rdf1 @@ -0,0 +1,81 @@ + + + + rpm + 2.5 + 2 + i386 + Linux + Manhattan + Red Hat Software + Red Hat Software <bugs@redhat.com> + Utilities/System + Red Hat Package Manager + 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. + GPL + * Sun May 10 1998 Prospector System <bugs@redhat.com> + - translations modified for de, fr, tr + + rpm-2.5-2.src.rpm + ftp://ftp.redhat.com/pub/redhat/redhat-5.1/SRPMS + Sun May 10 14:52:32 1998 + 894826352 + 850599 + porky.redhat.com + + + rpm + + + + + /bin/sh + ld-linux.so.2 + libc.so.6 + libdb.so.2 + libz.so.1 + /bin/bash + /bin/sh + + + /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 + + + diff --git a/test/rdf2 b/test/rdf2 new file mode 100644 index 0000000..fe80399 --- /dev/null +++ b/test/rdf2 @@ -0,0 +1,1899 @@ + + + + ncurses4 + 4.2 + 3 + i386 + Linux + DLD + delix Computer GmbH + Till Bubeck <bubeck@delix.de>, Ngo Than <than@delix.de> + Libraries + Bibliothek zur Ansteuerung von Terminals + 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. + GPL + ncurses4-4.2-3.src.rpm + Tue May 12 19:30:26 1998 + 895015826 + 1373513 + erdbeere.delix.de + + + ncurses4 + libpanel.so.4 + libncurses.so.4 + libmenu.so.4 + libform.so.4 + ncurses + + + /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 + + + diff --git a/test/recurse/good.xml b/test/recurse/good.xml new file mode 100644 index 0000000..60aa1b6 --- /dev/null +++ b/test/recurse/good.xml @@ -0,0 +1,343 @@ + + + +]> +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; +&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;&d; diff --git a/test/recurse/goodattr.xml b/test/recurse/goodattr.xml new file mode 100644 index 0000000..94f7071 --- /dev/null +++ b/test/recurse/goodattr.xml @@ -0,0 +1,343 @@ + + + +]> + diff --git a/test/recurse/lol1.xml b/test/recurse/lol1.xml new file mode 100644 index 0000000..d92c985 --- /dev/null +++ b/test/recurse/lol1.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + +]> +&laugh13; + diff --git a/test/recurse/lol2.xml b/test/recurse/lol2.xml new file mode 100644 index 0000000..e07dc4d --- /dev/null +++ b/test/recurse/lol2.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + +]> +text + diff --git a/test/recurse/lol3.dtd b/test/recurse/lol3.dtd new file mode 100644 index 0000000..eb3bc20 --- /dev/null +++ b/test/recurse/lol3.dtd @@ -0,0 +1,20 @@ + +"> + + + + + + + + + + + + + +%laugh13; + diff --git a/test/recurse/lol3.xml b/test/recurse/lol3.xml new file mode 100644 index 0000000..acc2346 --- /dev/null +++ b/test/recurse/lol3.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/test/recurse/lol4.patch b/test/recurse/lol4.patch new file mode 100644 index 0000000..f41be28 --- /dev/null +++ b/test/recurse/lol4.patch @@ -0,0 +1,16 @@ +Index: parser.c +=================================================================== +--- parser.c (revision 3773) ++++ parser.c (working copy) +@@ -2505,6 +2505,11 @@ xmlStringLenDecodeEntities(xmlParserCtxt + c = CUR_SCHAR(str, l); + else + c = 0; ++ if ((nbchars > 500000) && ++ (ctxt->instate == XML_PARSER_ATTRIBUTE_VALUE)) { ++ xmlFatalErr(ctxt, XML_ERR_ENTITY_LOOP, NULL); ++ goto int_error; ++ } + } + buffer[nbchars++] = 0; + return(buffer); diff --git a/test/recurse/lol4.xml b/test/recurse/lol4.xml new file mode 100644 index 0000000..dd6d9eb --- /dev/null +++ b/test/recurse/lol4.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]> +text diff --git a/test/recurse/lol5.xml b/test/recurse/lol5.xml new file mode 100644 index 0000000..b2aa6cb --- /dev/null +++ b/test/recurse/lol5.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]> +&ha48; diff --git a/test/recurse/lol6.xml b/test/recurse/lol6.xml new file mode 100644 index 0000000..2e9d55e --- /dev/null +++ b/test/recurse/lol6.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + +]> +text + diff --git a/test/regexp/branch b/test/regexp/branch new file mode 100644 index 0000000..6a728e6 --- /dev/null +++ b/test/regexp/branch @@ -0,0 +1,14 @@ +=>a|b(d|e(g|h|i)|f)|c +a +c +bd +bf +beg +beh +bei +b +be +bi +f +ab +ac diff --git a/test/regexp/bug316338 b/test/regexp/bug316338 new file mode 100644 index 0000000..98c7838 --- /dev/null +++ b/test/regexp/bug316338 @@ -0,0 +1,20 @@ +=>(((C|c)(([\s]*\-?[0-9]+(\.[0-9]+)?((e|E)\-?[0-9]+)?){3})+[\s]*))+ +C 433 +C 433 12 +C 433 123 +C 433 123 456 +C 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 +=>(((C|c)(([\s]+\-?[0-9]+(\.[0-9]+)?((e|E)\-?[0-9]+)?){3})+[\s]*))+ +C 433 +C 433 12 +C 433 123 +C 433 123 456 +C 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 +=>(((C|c)(([\s]+\-?[0-9]+(\.[0-9]+)?[\s]*,[\s]*\-?[0-9]+(\.[0-9]+)?){3})+[\s]*))+ +C 433 +C 433 12 +C 433 123 +C 433 123 456 +C 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 +=>(((M|m)([\s]+\-?[0-9]+(\.[0-9]+)?((e|E)\-?[0-9]+)?[\s]*,[\s]*\-?[0-9]+(\.[0-9]+)?((e|E)\-?[0-9]+)?)[\s]*)|((L|l)([\s]+\-?[0-9]+(\.[0-9]+)?((e|E)\-?[0-9]+)?[\s]*,[\s]*\-?[0-9]+(\.[0-9]+)?((e|E)\-?[0-9]+)?)+[\s]*)|((H|h)([\s]+\-?[0-9]+(\.[0-9]+)?((e|E)\-?[0-9]+)?)+[\s]*)|((V|v)([\s]+\-?[0-9]+(\.[0-9]+)?((e|E)\-?[0-9]+)?)+[\s]*)|((C|c)(([\s]+\-?[0-9]+(\.[0-9]+)?((e|E)\-?[0-9]+)?[\s]*,[\s]*\-?[0-9]+(\.[0-9]+)?((e|E)\-?[0-9]+)?){3})+[\s]*)|((Q|q)(([\s]+\-?[0-9]+(\.[0-9]+)?((e|E)\-?[0-9]+)?[\s]*,[\s]*\-?[0-9]+(\.[0-9]+)?((e|E)\-?[0-9]+)?){2})+[\s]*)|((S|s)(([\s]+\-?[0-9]+(\.[0-9]+)?((e|E)\-?[0-9]+)?[\s]*,[\s]*\-?[0-9]+(\.[0-9]+)?((e|E)\-?[0-9]+)?){2})+[\s]*)|((A|a)([\s]+\-?[0-9]+(\.[0-9]+)?((e|E)\-?[0-9]+)?[\s]*,[\s]*\-?[0-9]+(\.[0-9]+)?((e|E)\-?[0-9]+)?[\s]*\-?[0-9]+(\.[0-9]+)?((e|E)\-?[0-9]+)?[\s]+[0-1][\s]+[0-1][\s]+\-?[0-9]+(\.[0-9]+)?((e|E)\-?[0-9]+)?[\s]*,[\s]*\-?[0-9]+(\.[0-9]+)?((e|E)\-?[0-9]+)?)+[\s]*)|((Z|z)[\s]*))* +M 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 724.64,433.12 718.08,433.12 711.52,433.12 diff --git a/test/regexp/bug420596 b/test/regexp/bug420596 new file mode 100644 index 0000000..b6f285d --- /dev/null +++ b/test/regexp/bug420596 @@ -0,0 +1,10 @@ +=>(\+|-)(0[0-9]|1[0-1]) ++01 +-01 ++10 +-10 +=>[+-](0[0-9]|1[0-1]) ++01 +-01 ++10 +-10 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..ddb4cfd --- /dev/null +++ b/test/regexp/hard @@ -0,0 +1,12 @@ +=>((a|b|\p{Nd}){1,2}|aaa|bbbb){1,2} +bab +aaca +aaabbbb +a0b +aa0aaa +b0aaa +=>(\d{1,3}\.){3}\d{1,3} +1.2.3.4 +1.22.333.44 +1.2.3 +1..2.3 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/ranges2 b/test/regexp/ranges2 new file mode 100644 index 0000000..a8eb884 --- /dev/null +++ b/test/regexp/ranges2 @@ -0,0 +1,14 @@ +=>(a|b{0,3}){0,1} +a +aa +b +bb +bbb +bbbb +ab +ba +=>([0-9]{0,3}|([0-9]{0}|[0-9]{0,3})){0,3} +0 +00 +123 +abc 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/302836.rng b/test/relaxng/302836.rng new file mode 100644 index 0000000..b4db298 --- /dev/null +++ b/test/relaxng/302836.rng @@ -0,0 +1,35 @@ + + + + + firstValue + + + + + + + + + + + + + + + secondValue + + + + + + + + + + + + + + diff --git a/test/relaxng/302836_0.xml b/test/relaxng/302836_0.xml new file mode 100644 index 0000000..25eb2f1 --- /dev/null +++ b/test/relaxng/302836_0.xml @@ -0,0 +1,12 @@ + + + secondValue + + + diff --git a/test/relaxng/307377.rng b/test/relaxng/307377.rng new file mode 100644 index 0000000..37a87c9 --- /dev/null +++ b/test/relaxng/307377.rng @@ -0,0 +1,14 @@ + + + + + + 1 + 2 + 3 + + + + + + diff --git a/test/relaxng/307377_0.xml b/test/relaxng/307377_0.xml new file mode 100644 index 0000000..106d02a --- /dev/null +++ b/test/relaxng/307377_0.xml @@ -0,0 +1 @@ + diff --git a/test/relaxng/307377_1.xml b/test/relaxng/307377_1.xml new file mode 100644 index 0000000..73b0d1c --- /dev/null +++ b/test/relaxng/307377_1.xml @@ -0,0 +1 @@ + diff --git a/test/relaxng/307377_2.xml b/test/relaxng/307377_2.xml new file mode 100644 index 0000000..4a041aa --- /dev/null +++ b/test/relaxng/307377_2.xml @@ -0,0 +1 @@ + diff --git a/test/relaxng/492317.rng b/test/relaxng/492317.rng new file mode 100644 index 0000000..343f294 --- /dev/null +++ b/test/relaxng/492317.rng @@ -0,0 +1,16 @@ + + + + + Foo + + + + + + Bar + + + + + diff --git a/test/relaxng/492317_0.xml b/test/relaxng/492317_0.xml new file mode 100644 index 0000000..6ab9d80 --- /dev/null +++ b/test/relaxng/492317_0.xml @@ -0,0 +1,4 @@ + + + + diff --git a/test/relaxng/492317_1.xml b/test/relaxng/492317_1.xml new file mode 100644 index 0000000..d325ac2 --- /dev/null +++ b/test/relaxng/492317_1.xml @@ -0,0 +1,4 @@ + + + + diff --git a/test/relaxng/492317_2.xml b/test/relaxng/492317_2.xml new file mode 100644 index 0000000..33bbc5d --- /dev/null +++ b/test/relaxng/492317_2.xml @@ -0,0 +1,4 @@ + + + + diff --git a/test/relaxng/558452.rng b/test/relaxng/558452.rng new file mode 100644 index 0000000..80fbf7b --- /dev/null +++ b/test/relaxng/558452.rng @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/test/relaxng/558452_0.xml b/test/relaxng/558452_0.xml new file mode 100644 index 0000000..70440e2 --- /dev/null +++ b/test/relaxng/558452_0.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/test/relaxng/558452_1.xml b/test/relaxng/558452_1.xml new file mode 100644 index 0000000..2c569f9 --- /dev/null +++ b/test/relaxng/558452_1.xml @@ -0,0 +1,3 @@ + + + diff --git a/test/relaxng/558452_2.xml b/test/relaxng/558452_2.xml new file mode 100644 index 0000000..6e24626 --- /dev/null +++ b/test/relaxng/558452_2.xml @@ -0,0 +1,4 @@ + + + + diff --git a/test/relaxng/558452_3.xml b/test/relaxng/558452_3.xml new file mode 100644 index 0000000..5ceb468 --- /dev/null +++ b/test/relaxng/558452_3.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/test/relaxng/558452_4.xml b/test/relaxng/558452_4.xml new file mode 100644 index 0000000..a1ee72b --- /dev/null +++ b/test/relaxng/558452_4.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/test/relaxng/565219.rng b/test/relaxng/565219.rng new file mode 100644 index 0000000..087ed95 --- /dev/null +++ b/test/relaxng/565219.rng @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/test/relaxng/565219_0.xml b/test/relaxng/565219_0.xml new file mode 100644 index 0000000..a964a07 --- /dev/null +++ b/test/relaxng/565219_0.xml @@ -0,0 +1 @@ + diff --git a/test/relaxng/565219_1.xml b/test/relaxng/565219_1.xml new file mode 100644 index 0000000..f1999f8 --- /dev/null +++ b/test/relaxng/565219_1.xml @@ -0,0 +1 @@ + diff --git a/test/relaxng/565219_2.xml b/test/relaxng/565219_2.xml new file mode 100644 index 0000000..a964a07 --- /dev/null +++ b/test/relaxng/565219_2.xml @@ -0,0 +1 @@ + diff --git a/test/relaxng/595792-ext.rng b/test/relaxng/595792-ext.rng new file mode 100644 index 0000000..58990cb --- /dev/null +++ b/test/relaxng/595792-ext.rng @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/test/relaxng/595792.rng b/test/relaxng/595792.rng new file mode 100644 index 0000000..fb2eb93 --- /dev/null +++ b/test/relaxng/595792.rng @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/relaxng/595792_0.xml b/test/relaxng/595792_0.xml new file mode 100644 index 0000000..546c589 --- /dev/null +++ b/test/relaxng/595792_0.xml @@ -0,0 +1,4 @@ + + + foo + diff --git a/test/relaxng/710744.rng b/test/relaxng/710744.rng new file mode 100644 index 0000000..aeea0b8 --- /dev/null +++ b/test/relaxng/710744.rng @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/test/relaxng/710744_1.xml b/test/relaxng/710744_1.xml new file mode 100644 index 0000000..f17c808 --- /dev/null +++ b/test/relaxng/710744_1.xml @@ -0,0 +1,2 @@ + diff --git a/test/relaxng/710744_2.xml b/test/relaxng/710744_2.xml new file mode 100644 index 0000000..1aef3a9 --- /dev/null +++ b/test/relaxng/710744_2.xml @@ -0,0 +1,3 @@ + 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 @@ +"> +]> + +James Clark +jjc@jclark.com +For October 26 version of the spec. + +
      3
      + +Various possible syntax errors. + +
      3
      + + + +
      + +
      3
      + + + + + + + + + + + + +
      + +
      3
      + + + + + + + + +
      + +
      3
      + + + foo + + + +
      + +
      3
      + + + + bar + + + +
      + +
      3
      + + + + + foo + + + bar + + + + + +
      + +
      3
      + + + + + foo + + + bar + + + + + +
      + +
      3
      + + + + + foo + + + bar + + + + +
      + +
      3
      + + + + + +
      + +
      3
      + + + + + +
      + +
      3
      + + + + + + + +
      + +
      3
      + + + + + + + +
      + +
      3
      + + + + + + + + + + +
      + +
      3
      + + + + + + + + + + + + + + +
      + +
      3
      + + + + + + + + + + + + + + + + + + +
      +
      + +Tests for obsolete syntax + +
      3
      + + + + + + + + + +
      + +
      3
      + + + + + + + +
      + +
      3
      + + + + foo + + + + +
      + +
      3
      + + + + + foo + + + + +
      + +
      3
      + + + + + +
      + +
      3
      + + + + + +
      + +
      3
      + + + + + + + +
      + +
      3
      + + + + + + + +
      +
      + +Tests for missing attributes and child elements + +
      3
      + + + + +
      + +
      3
      + + + foo + + +
      + +
      3
      + + + + +
      + +
      3
      + + + + + +
      + +
      3
      + + + + + +
      + +
      3
      + + + + + +
      + +
      3
      + + + + + +
      + +
      3
      + + + + + +
      + +
      3
      + + + + + +
      + +
      3
      + + + + + +
      + +
      3
      + + + + + +
      + +
      3
      + + + + + +
      + +
      3
      + + + + + + +
      + +
      3
      + + + + + + + + +
      + +
      3
      + + + + + + + + +
      + +
      3
      + + + + + + + +
      + +
      3
      + + + + + +
      + +
      3
      + + + + + + + +
      + +
      3
      + + + + + + + +
      + +
      3
      + + + + + + + + + + +
      + +
      3
      + + + + + +
      + +
      3
      + + + + + + + + + + +
      + +
      3
      + + + + + + + + + + + + + + +
      + +
      3
      + + + + + + + + + + + + +
      + +
      3
      + + + + + + + + + + + + + + + + +
      +
      + +Checking of ns attribute + +
      3
      + + + + + + + + +
      + +
      3
      +No checking of ns attribute is performed + + + + + + + + +
      + +
      3
      +No checking of ns attribute is performed + + + + + +
      + +
      3
      +No checking of ns attribute is performed + + + + + +
      +
      + +Checking of datatypeLibrary attribute + +
      3
      +Value of datatypeLibrary attribute must conform to RFC 2396 + + + + + +
      + +
      3
      +Value of datatypeLibrary attribute must conform to RFC 2396 + + + + + + + + +
      + +
      3
      +Value of datatypeLibrary attribute must conform to RFC 2396 + + + + + + + + +
      + +
      3
      +Value of datatypeLibrary attribute must conform to RFC 2396 + + + + + +
      + +
      3
      +Value of datatypeLibrary attribute must conform to RFC 2396 + + + + + +
      + +
      3
      +Value of datatypeLibrary attribute must conform to RFC 2396 + + + + + +
      + +
      3
      +Value of datatypeLibrary attribute must conform to RFC 2396 + + + + + + + + +
      + +
      3
      +Value of datatypeLibrary attribute must not be relative + + + + + +
      + +
      3
      +Value of datatypeLibrary attribute must not be relative + + + + + +
      + +
      3
      +Value of datatypeLibrary attribute must not be relative + + + + + +
      + +
      3
      +Value of datatypeLibrary attribute must not be relative + + + + + +
      + +
      3
      + + + + + + + + +
      + +
      3
      + + + + + + + + +
      + +
      3
      + + + + + + +x + +
      + +
      3
      +Value of datatypeLibrary attribute must not contain fragment identifier + + + + + +
      + +
      3
      +Value of datatypeLibrary attribute must not contain fragment identifier + + + + + +
      +
      + +Tests for QName and NCNames in schemas + +
      3
      + + + + + + + + +&dii; + +
      + +
      3
      + + + + + +
      + +
      3
      + + + + + +
      + +
      3
      + + + + + + +
      + +
      3
      + + + + + + +
      + +
      3
      + + + + + + + + + + + + +
      + +
      3
      + + + + + + + + + + + + + + + +
      + +
      3
      + + + + + + + + + + + + +
      + +
      3
      + + + + + + + + + + + + +
      + +
      3
      + + + + + + + + + + + + +
      + +
      3
      + + + + + +
      + +
      3
      + + + + + +
      + +
      3
      + + + + + +
      +
      + +Tests for elements that allow only a single pattern child. + +
      3
      + + + + + + + + + + +
      + +
      3
      + + + + + + + + +
      + +
      3
      + + + + bar + + + + + +
      +
      + +Tests for foreign element and attribute handling. + +
      3
      + + + + + +
      + +
      3
      + + + foo + + + +
      + +
      3
      + + + foo + + +
      + +
      3
      + + + + + + +X + +
      + +
      3
      + + + + + + + + + + + + +
      + +
      3
      + + + + + + + + + + foo + + + + + + + + + + + + + + + + +X + +
      + +
      3
      + + + + + foo + + + + + + + +X + +
      + +
      3
      + + + + + + + + + + foo + + + + + + + + + + +X + +
      + +
      3
      + + + + + + + + + + foo + + + + + + + + + + +X + +
      +
      +
      + +
      4
      + +
      4.2
      + +
      4.2
      + + + + + + + + +
      + +
      4.2
      + + + bar + + + +bar + + +bar + +
      + +
      4.2
      + + + + + + +X + +
      + +
      4.2
      + + + foo + bar + + + + + +
      + +
      4.2
      + + + + + + + + + + + + + + + + + + + + + + + + + +
      +
      + +
      4.4
      + + + bar + + + +bar + + + + bar + + + + bar + + +baz + + +ba r + +
      + +
      4.5
      + +
      4.5
      + + + + + + + + + + + + + + + + +
      + +
      4.5
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      4.5
      + + + + + + + + +
      +
      + +
      4.6
      + +
      4.6
      + + + + + + + + + + + + + + +
      + +
      4.6
      + + + + + + + + + + + + + + +
      + +
      4.6
      + + + + + + +
      + +
      4.6
      + + + + + + + + + + +
      + +
      4.6
      + + + + + + + + + +
      + +
      4.6
      +Same value of href before resolution, but not a loop. + + + + + + + + + + + + + + + + + + + + + +
      +
      + +
      4.7
      + +
      4.7
      + + + + + + + + + + + + + + + + + + + + +
      + +
      4.7
      + + + + + + + + + + + + + + + + + + + + +
      + +
      4.7
      + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      4.7
      + + + + + + + + + + +
      + +
      4.7
      + + + + + + + + + + +
      + +
      4.7
      + + + + + + + + + + + + + + + +
      + +
      4.7
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      4.7
      + + + + + + + + + + + + + + + + + + +
      + +
      4.7
      + + + + + + + + + + + + + + + + + + + +
      + +
      4.7
      + + + + + + + + + + + + + + + + + + +
      + +
      4.7
      + + + + + + + + + + + + + + + + + + + +
      + +
      4.7
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      4.7
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +
      + +
      4.8
      + +
      4.8
      + + + + + + + + + + + +
      + +
      4.8
      + + + + + + + + + + + +
      +
      + +
      4.9
      + +
      4.9
      + + + + bar + + + + + + + + + +
      + +
      4.6
      +
      4.9
      + + + + + + + + + + + + + + + + +
      + + + + + foo + + + + + + + + + + + foo + + + + + + + + + + + bar + + + + + + + +
      + +
      4.10
      + +
      4.10
      + + + + + +
      + +
      4.10
      + + + + + + + + + + + +
      + +
      4.10
      + + + + + + + + + + + +
      + +
      4.10
      + + + + + + + + + + + +
      +
      + +
      4.11
      + +
      4.11
      + + +
      +
      + + + +
      + + + + + +
      +
      + + + + + + + + + + + + +
      4.12
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +X + + +X + + + + +
      + +
      4.12
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +X + + +X + + + + +
      + +
      4.12
      +
      4.15
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +X + + +X + + + + +
      + +
      4.12
      +
      4.14
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +X + + +X + + + + +
      + +
      4.12
      + + + + x + y + z + + + + +x y z + + +x + +
      + +
      4.12
      +
      4.13
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +X + + +X + + + + +
      + +
      4.12
      + + + foo + + + + + + + + + + + + + + + + + + + + + + + + + + + +X + + +X + + + + +
      + +
      4.12
      + + + + + foo + bar + baz + + + + + + + + + +
      + +
      4.12
      + + + + + x + y + z + + + + + +xyz +x +y +y +
      + +
      4.12
      + + + + + + + + + + + + + + +
      + +
      4.12
      + + + + bar + + + + + + + + + + + + +
      + +
      4.12
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +X + + +X + + + + +
      + +
      4.12
      + + + + + + + + + + + + + + + + + + + +
      + +
      4.12
      + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      4.12
      + + + + + + + + + + + +
      + +
      4.12
      + + + + + + + + + + + +
      + +
      4.12
      + + + + + + + + + + + +
      +
      + +
      4.13
      + +
      4.13
      + + + + + + + + + +x + +x +xy + + +
      +
      + +
      4.14
      + +
      4.14
      + + + + + + + + + + + +x + +
      +
      + +
      4.15
      + +
      4.15
      + + + + + + + + + + + +x + + +
      +
      + +
      4.16
      + +
      4.16
      + + + + + + + + + + + + + + +
      + +
      4.16
      + + + + + + + + + foo + + + + + + + + +
      + +
      4.16
      + + + + + + + + + + + + + + +
      + +
      4.16
      + + + + + + + + + foo + + + + + + + + +
      + +
      4.16
      + + + + + + + + + + + + + + +
      + +
      4.16
      + + + + + + + + + foo + + + + + + + + +
      + +
      4.16
      +Tests that 4.16 is before 4.20. + + + + + + + + + + + + + + + + + + + +
      + +
      4.16
      +Tests that 4.16 is before removal of unreachable definitions. + + + + + + + + + + + + + + + + + + + +
      + +
      4.16
      + + + + + + + +
      + +
      4.16
      + + + + + + +
      + +
      4.16
      + + + + + + + +
      + +
      4.16
      + + + + + + + + + + +
      + +
      4.16
      + + + + + + + + + + + + + + +
      + +
      4.16
      + + + + + + + +
      + +
      4.16
      + + + + + xmlns + foo + + + + + +
      + +
      4.16
      + + + + xmlns + + + + +
      + +
      4.16
      + + + + xmlns + + + + +
      + +
      4.16
      + + + + + xmlns + + + + + +
      + +
      4.16
      + + + + + foo + xmlns + + + + + +
      + +
      4.16
      + + + + + + + xmlns + + + + + + + +
      + +
      4.16
      + + + + + + + xmlns + + + + + + + +
      + +
      4.16
      + + + + + + + +
      + +
      4.16
      + + + + + + +
      + +
      4.16
      + + + + 2 + + + +
      + +
      4.16
      + + + + + +
      + +
      4.16
      + + + + + +
      + +
      4.16
      + + + + + + 2 + + + + +
      + +
      4.16
      + + + + + + + + +
      + +
      4.16
      + + + + + + + + +
      + +
      4.16
      + + + + + + + + + + 2 + + + + +
      + +
      4.16
      + + + + + + + + + + + + +
      + +
      4.16
      + + + + + + + + + + + + +
      +
      + +
      4.17
      + +
      4.17
      + + + + + + + + + + + + + + + + + + + + + + +
      + +
      4.17
      + + + + + + + + + + + + + + + + + + + +
      + +
      4.17
      + + + + + + + + + + + + + + + + + +
      + +
      4.17
      + + + + + + + + + + + + + + +
      + +
      4.17
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      4.17
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      4.17
      + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      4.17
      + + + + + + + + + + + + + + + + + + + + + +
      + +
      4.17
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      4.17
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      4.17
      + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      4.17
      + + + + + + + + + + + + + + + + + + + + + +
      +
      + +
      4.18
      + +
      4.18
      +grammar must have a start + + + + + + + + + +
      + +
      4.18
      +4.17 is before 4.18 + + + + + + + + + + + + + + + + + + +
      + +
      4.18
      +4.17 is before 4.19 + + + + + + + + + + + + + + + + + +
      + +
      4.18
      +every ref must have a def + + + + + + + +
      + +
      4.18
      +4.17 is before 4.18 + + + + + + + + + + + + +
      + +
      4.18
      +4.17 is before 4.19 + + + + + + + + + + + + + + + +
      + +
      4.18
      +every parentRef must have a def + + + + + + + + + + + + + + + + +
      + +
      4.18
      +4.17 is before 4.18 + + + + + + + + + + + + + + + + + + + + + +
      + +
      4.18
      +4.17 is before 4.19 + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      4.18
      + + + + + + + + + + + + + + + + + + + +
      + +
      4.18
      + + + + + + + + + + + + + + + + + + + + +
      + +
      4.18
      + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      4.18
      + + + + + + + + + + + + + + + + + + + + + + + +
      +
      + +
      4.19
      + +
      4.19
      + + + + + + + + + + + + + + + + + +
      + +
      4.19
      + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      4.19
      + + + + + + + + + + + + + +
      + +
      4.19
      +
      4.20
      +Tests that recursion detection happens before +normalization of notAllowed. + + + + + + + + + + + + + + + + + + + + + + + +
      +
      + + +
      6
      + +
      6.1
      + +
      6.1
      + + + + + + + + + + + + +
      + +
      6.1
      + + + + + foo + + + + + + + + + + + + + + +
      + +
      6.1
      + + + + + + + + + + + + + + + + +
      + +
      6.1
      + + + + + + + + + + + + +
      + +
      6.1
      + + + + + + + + + + + + + + + + + + +
      + +
      6.1
      + + + + + foo + + + + + + + + + + + + + + +
      + +
      6.1
      + + + + + foo + + + + + + + + + + + + + + + + + +
      + +
      6.1
      + + + foo + + + + + + + + + + + + + + + +
      + +
      6.1
      + + + foo + + + + + + + + + + + + + + + +
      + +
      6.1
      + + + + foo + bar + + + + + + + + + + + + + +
      +
      + +
      6.2
      + +
      6.2.1
      + +
      6.2.1
      + + + + + + + + + + + + + + + + + + + +
      + +
      6.2.1
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      6.2.1
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      6.2.1
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +
      + +
      6.2.2
      + +
      6.2.2
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      6.2.2
      + + + + + + + + + + + + + + + + + + +
      + +
      6.2.2
      + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      6.2.2
      + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      6.2.2
      + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      6.2.2
      + + + + + + + + + + + + + + + + + + + + + + + + +
      +
      + +
      6.2.3
      + +
      6.2.3
      + + + + + + + + + + + + + + + + + + + + + + + + + + +x + + + + + + + +
      + +
      6.2.3
      + + + + + + + + + + +
      + +
      6.2.3
      + + + + + + + + + +x + + +
      + +
      6.2.3
      + + + + + + + + + + + + +
      + +
      6.2.3
      + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      6.2.4
      + +
      6.2.4
      + + + + + + + + + + + + +x + + + +x + +y + + + + + +
      + +
      6.2.4
      + + + + + + + + + + + + + + + + + + + + +x + + + + + +x + +y + + + + + + +x + +
      + +
      6.2.4
      + + + + + + + + + + + + + + + + + + + + +x + + + + + + +x + +y + + + + + + +x + +
      + +
      6.2.4
      + + + + + + + + + + + + + + + + + + + + +x + + + + + + +x + +y + + + + + + +x + + +xx + + +xx + +
      + +
      6.2.4
      + + + + + + + + + + + + + + + + + + + + +x + +
      +
      + +
      6.2.5
      + +
      6.2.5
      + + + + + + + + + + + + + + + + + + + + + +
      + +
      6.2.5
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      6.2.5
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      6.2.5
      + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +
      + +
      6.2.6
      + +
      6.2.6
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      6.2.6
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      6.2.6
      + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      6.2.6
      + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +
      + +
      6.2.7
      + +
      6.2.7
      + + + + bar + baz + + + + + + + + + + + + + + + + + + + +baz + +
      + +
      6.2.7
      + + + + bar + + baz + + + + + + + + + + + + + + + + + + +baz + + + + + + + +
      + +
      6.2.7
      + + + + bar + + + + + + + + + + + + + +
      + +
      6.2.7
      + + + foo + + + bar + + + + baz + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      6.2.7
      +
      6.2.8
      + + + + + + + +x +
      + +
      6.2.7
      +
      6.2.8
      + + + + + + + + + + +x +
      + +
      6.2.7
      +
      6.2.8
      +
      6.2.10
      + + + + + + + + + +x + x +x y +
      + +
      6.2.7
      +
      6.2.8
      + + + + + 2 + + + +xx +xxx + + +x + + +
      + +
      6.2.7
      +
      6.2.8
      + + + + x + + + + + + + x +x +y + + + + + + +x + +x +
      + +
      6.2.7
      +
      6.2.8
      + + + + x + + + + + + + + + x +x +y + + + + + + +x + +x +
      +
      + +
      6.2.8
      + +
      6.2.8
      + + + + + + x + y + + + + + + +xyzzy + + +x + + +y + + + x + +
      + +
      6.2.8
      + + + + + + + + +
      + +
      6.2.8
      + + + + + + + + +
      + +
      6.2.8
      + + + + + + + + + + + + + +x + +
      +
      + +
      6.2.9
      + +
      6.2.9
      + + + + + + +xyzzy + + + +x + +y + +z + + + + + + + + + + + + + + + +
      + +
      6.2.9
      + + + + + + +xyzzy + + + +x + +y + +z + + + + + + + + + + + + + + + +
      + +
      6.2.9
      + + + x + + +x +xy + x + +
      + +
      6.2.9
      + + + x + + + x + xy +x + +
      + +
      6.2.9
      + + + x + + +x + x +x + x + +xy +
      + +
      6.2.9
      + + + x y + + +x y + x y +x y +xy +
      + +
      6.2.9
      + + + x + + +x + x +x + x + +xy +
      + +
      6.2.9
      + + + x y + + +x y +x y + x y +x y +x y + +xy +
      + +
      6.2.9
      + + + + + +
      + +
      6.2.9
      + + + + + +
      + +
      6.2.9
      + + + + 2 + + + +
      + +
      6.2.9
      + + + + 2 + + + +
      +
      + +
      6.2.10
      + +
      6.2.10
      + + + + x + + + + +x + + + x + + +x x + +
      + +
      6.2.10
      + + + + + x + + + + + +x + + + x x x x + + + + + +x y + +
      + +
      6.2.10
      + + + + + x + y + + + + + +x y + + +x y + + + x y + + +x + +
      + +
      6.2.10
      + + + + + + + + + + + +x y + + + + + +x y z + +
      + +
      6.2.10
      + + + + x y + + + + +x y + +
      +
      +
      +
      + +
      7
      + +
      7.1
      + +
      7.1.1
      + + + + + + + + + + + + + +
      + +
      7.1.1
      + + + + + + + + + + + + + + + + +
      + +
      7.1.1
      + + + + + + + + + + + +
      + +
      7.1.1
      + + + + + + + + + + + + + + +
      + +
      7.1.2
      + + + + + + + + + + + + + + +
      + +
      7.1.2
      + + + + + + + + + + + + + + + + + + +
      + +
      7.1.2
      + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      7.1.2
      + + + + + + + + + + + + + + +
      + +
      7.1.2
      + + + + + + + + + + + + + + + + + + +
      + +
      7.1.2
      + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      7.1.3
      + + + + + + + + + + + + + +
      + +
      7.1.3
      + + + + + + + + + + + + + + + + +
      + +
      7.1.3
      + + + + + + + + + + + + + +
      + +
      7.1.3
      + + + + + + + + + + + + + + + + +
      + +
      7.1.3
      + + + + + + + + + + + + + +
      + +
      7.1.3
      + + + + + + + + + + + + + + + + +
      + +
      7.1.3
      + + + + + + + + + + + + + + +
      + +
      7.1.3
      + + + + + + + x + y + + + + + + +
      + +
      7.1.3
      + + + + + + + + x + y + + z + + + + + + +
      + +
      7.1.4
      + + + + + + + + + + + + + +
      + +
      7.1.4
      + + + + + + + + + + + + + + + +
      + +
      7.1.4
      + + + + + + + + + + + + + +
      + +
      7.1.4
      + + + + + + + + + + + + + + + +
      + +
      7.1.4
      + + + + + + + + + + + + + + + + +
      + +
      7.1.4
      + + + + + + + + + + + + + + + + +
      + +
      7.1.4
      + + + + + + + + + + + + + + + +
      + +
      7.1.4
      + + + + + + + + + + + + + +
      + +
      7.1.5
      + + + + + + + +
      + +
      7.1.5
      + + + + + + + +
      + +
      7.1.5
      + + + + + + + + + + + + +
      + +
      7.1.5
      + + + + + foo + + + + + + + +
      + +
      7.1.5
      + + + + + + + +
      + +
      7.1.5
      + + + + + + + + + + + + +
      + +
      7.1.5
      + + + + + + + + + +
      + +
      7.1.5
      + + + + + + + + + + + + + + +
      + +
      7.1.5
      + + + + + + + + + + + + + + +
      + +
      7.1.5
      + + + + + + + + + + + + + + + + + + + +
      + +
      7.1.5
      + + + + + + + + + + + + + + +
      + +
      7.1.5
      + + + + + + + + + + + + + + + + + + + +
      + +
      7.1.5
      + + + + + + + + + + + +
      + +
      7.1.5
      + + + + + + + + + + + + + + + + +
      + +
      7.1.5
      + + + + + + + +
      + +
      7.1.5
      + + + + + + + + + + + + +
      + +
      7.1.5
      +
      7
      +
      4.18
      +Tests that constraints are post-normalization + + + + + + + + + + +text + +
      + +
      7.1.5
      +
      7
      +
      4.18
      + + + +
      + +
      7.1.1
      +
      7
      +
      4.20
      + + + + + + + + + + + + + + + +
      + +
      7.1.1
      +
      7
      +
      4.20
      +The nested attribute element is normalized out because +of the not allowed. + + + + + + + + + + + + + + + + +
      + +
      7.1.2
      +
      7
      +
      4.12
      +The group element is normalized out. + + + + + + + + + + + + + + + + + + +
      + +
      7.1.2
      +
      7
      +
      4.21
      +The group element is normalized out. + + + + + + + + + + + + + + + + + + + +
      + +
      7.1.2
      +
      7
      +
      4.20
      +The attribute elements are all normalized out. + + + + + + + + + + + + + + + + +
      +
      + +
      7.2
      + +
      7.2
      + + + + + + + + + + + + +
      + +Checks that normalization of notAllowed happens +before string sequence checking. +
      7.2
      +
      4.20
      + + + + + + + + + + + + + + + + + + + +
      + +
      4.20
      +
      7.2
      +notAllowed in an element is not normalized + + + + + + + + + + + + + + + + +
      +
      + +
      7.3
      + +
      7.3
      + + + + + + +
      + +
      7.3
      + + + + + + + + +
      + +
      7.3
      + + + + + + + + + + +
      + +
      7.3
      + + + + + + + + +
      + +
      7.3
      + + + + + + + + + + +
      + +
      7.3
      + + + + + + + + + + +
      + +
      7.3
      + + + + + + + + baz + + + + + + +
      + +
      7.3
      + + + + + + + + bar + + + + + + + + + + + + + + + + + + + + + +
      + +
      7.3
      + + + + + + + + + + +
      + +
      7.3
      + + + + + + + + baz + + + + + + +
      + +
      7.3
      + + + + + + + + + + + + + + +
      + +
      7.3
      + + + + + + + + + + + + + + +
      + +
      7.3
      + + + + + + + + + + + + bar + + + + + + +
      + +
      7.3
      + + + + + + + + + foo + + + + + + + + + +
      + +
      7.3
      + + + + + + + + + foo + + + + + + + + + + + + + +
      + +
      7.3
      + + + + + + + + + bar + + + + + + + + + + + + + + + + + + +
      + +
      7.3
      + + + + + + + + + + + + + + + + + +
      + +
      7.3
      + + + + + + + + + + + +
      + +
      7.3
      + + + + + + + + + +
      + +
      7.3
      + + + + + +
      + +
      7.3
      + + + + + +
      + +
      7.3
      + + + foo + + +
      +
      + +
      7.4
      + +
      7.4
      + + + + + + + + + + + + +
      + +
      7.4
      + + + + + + + + + + + + + + + + + +
      + +
      7.4
      + + + + + + + + + + + + + + + + + +
      + +
      7.4
      + + + + + + + + + + + + + + + + + + + + + + +
      + +
      7.4
      + + + + + + + + + + + + + + +
      + +
      7.4
      + + + + + + + + + + + + + +
      + +
      7.4
      + + + + + + + + + + + + + +
      + +
      7.4
      + + + + + + + + + + + + +
      + +
      7.4
      + + + + + + + + + + bar + + + + + + + + + + +
      + +
      7.4
      + + + + + + + + + + + + + + + + + + + + +
      + +
      7.4
      + + + + + + + + +
      + +
      7.4
      + + + + + + + + + + + + + + +
      +
      +
      + +Regressions + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/relaxng/OpenDocumentSub.rng b/test/relaxng/OpenDocumentSub.rng new file mode 100644 index 0000000..161be66 --- /dev/null +++ b/test/relaxng/OpenDocumentSub.rng @@ -0,0 +1,229 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + document + chapter + page + + + + + + + + + text + page + section + document + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + i + I + + + + + + + + a + A + + + + + + + + + + + + + + + + + + footnote + endnote + + + + + + + + + + + + + + + true + false + + + + + + diff --git a/test/relaxng/OpenDocumentSub_0.xml b/test/relaxng/OpenDocumentSub_0.xml new file mode 100644 index 0000000..9cfb198 --- /dev/null +++ b/test/relaxng/OpenDocumentSub_0.xml @@ -0,0 +1,7 @@ + + + + + + + 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 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/relaxng/choice0.rng b/test/relaxng/choice0.rng new file mode 100644 index 0000000..99526e1 --- /dev/null +++ b/test/relaxng/choice0.rng @@ -0,0 +1,25 @@ + + + + + + ethernet + + + + + + + + + + serial + + + + + + + + + diff --git a/test/relaxng/choice0_0.xml b/test/relaxng/choice0_0.xml new file mode 100644 index 0000000..113ffa8 --- /dev/null +++ b/test/relaxng/choice0_0.xml @@ -0,0 +1,2 @@ + + diff --git a/test/relaxng/choice0_1.xml b/test/relaxng/choice0_1.xml new file mode 100644 index 0000000..f0c441d --- /dev/null +++ b/test/relaxng/choice0_1.xml @@ -0,0 +1,2 @@ + + diff --git a/test/relaxng/choice0_2.xml b/test/relaxng/choice0_2.xml new file mode 100644 index 0000000..5f67e0b --- /dev/null +++ b/test/relaxng/choice0_2.xml @@ -0,0 +1,3 @@ + + + diff --git a/test/relaxng/choice0_3.xml b/test/relaxng/choice0_3.xml new file mode 100644 index 0000000..79ac4a6 --- /dev/null +++ b/test/relaxng/choice0_3.xml @@ -0,0 +1,3 @@ + + + diff --git a/test/relaxng/choice0_4.xml b/test/relaxng/choice0_4.xml new file mode 100644 index 0000000..1de1abc --- /dev/null +++ b/test/relaxng/choice0_4.xml @@ -0,0 +1,2 @@ + + diff --git a/test/relaxng/choice0_5.xml b/test/relaxng/choice0_5.xml new file mode 100644 index 0000000..2ac50f7 --- /dev/null +++ b/test/relaxng/choice0_5.xml @@ -0,0 +1,3 @@ + + + diff --git a/test/relaxng/choice0_6.xml b/test/relaxng/choice0_6.xml new file mode 100644 index 0000000..1e4d1d2 --- /dev/null +++ b/test/relaxng/choice0_6.xml @@ -0,0 +1,3 @@ + + + diff --git a/test/relaxng/choice0_7.xml b/test/relaxng/choice0_7.xml new file mode 100644 index 0000000..f28f89f --- /dev/null +++ b/test/relaxng/choice0_7.xml @@ -0,0 +1,3 @@ + + + diff --git a/test/relaxng/choice0_8.xml b/test/relaxng/choice0_8.xml new file mode 100644 index 0000000..f810229 --- /dev/null +++ b/test/relaxng/choice0_8.xml @@ -0,0 +1,3 @@ + + + diff --git a/test/relaxng/compare0.rng b/test/relaxng/compare0.rng new file mode 100644 index 0000000..a0446c8 --- /dev/null +++ b/test/relaxng/compare0.rng @@ -0,0 +1,8 @@ + + + + 1 + + + diff --git a/test/relaxng/compare0_0.xml b/test/relaxng/compare0_0.xml new file mode 100644 index 0000000..6a74b2f --- /dev/null +++ b/test/relaxng/compare0_0.xml @@ -0,0 +1,3 @@ + + + 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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + false + + + + + + + + + + true + false + + + + + + + + + + + + + + + + + + + + + default + + optional + + + + + + + + + + + + + + default + mandatory + optional + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 @@ + + + + + + + core + Core + Jádro + Grundlæggende + Haupt + Núcleo + Tore + Lágmarkskerfi + Principale + コア + 핵심 + Kjerne + Núcleo + ОÑнова + Grundläggande + 核心 + ä¸»è¦ + true + Smallest possible installation + Nejmenší možná instalace + Mindst mulige installation + Kleinstmögliche Installation + Instalación lo más pequeña posible + Plus petite installation possible + Lágmarks uppsetning + Installazione minima + 最低å¯èƒ½ãªã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ« + 가능한 최소 설치 + Minste mulige installering + A mais pequena instalação possível + Минимально Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð°Ñ ÑƒÑтановка + Minsta möjliga installation + 最å°å®‰è£… + 最å°çš„å®‰è£ + false + + ash + basesystem + bash + bdflush + cpio + e2fsprogs + ed + file + filesystem + glibc + grub + hdparm + hotplug + initscripts + iproute + iputils + kbd + kernel + ksymoops + libgcc + libtermcap + losetup + passwd + procps + raidtools + readline + redhat-logos + redhat-release + rootfiles + rpm + setserial + setup + sysklogd + SysVinit + termcap + util-linux + vim-minimal + + authconfig + kudzu + lilo + mouseconfig + shadow-utils + + + + + base + Base + Základ + Base + Basis + Base + Base + Grunnur + Base + ベース + 기준 + Grunnpakker + Base + ОÑнова + Bas + 基本 + 基礎 + + false + true + + core + dialup + + + acl + anacron + apmd + aspell + at + attr + authconfig + autofs + bc + bind-utils + bzip2 + crontabs + cyrus-sasl-plain + dhclient + diffutils + dos2unix + dosfstools + dump + ethtool + eject + fbset + finger + ftp + gpm + irda-utils + kbdconfig + kernel-pcmcia-cs + krb5-workstation + kudzu + lftp + lha + logrotate + lsof + logwatch + lokkit + mailcap + man + man-pages + mkbootdisk + mt-st + mtools + mtr + netconfig + nfs-utils + nss_ldap + ntsysv + openssh-clients + pam_krb5 + pam_smb + parted + pax + pciutils + pidentd + pinfo + quota + rdate + redhat-logos + reiserfs-utils + rp-pppoe + rsh + rsync + jfsutils + setuptool + sendmail + slocate + specspo + star + sudo + stunnel + talk + tcp_wrappers + tcsh + telnet + traceroute + time + timeconfig + tmpwatch + up2date + utempter + wireless-tools + rdist + tcpdump + net-snmp-utils + openssh-server + wget + unix2dos + unzip + whois + vim-common + vixie-cron + ypbind + zip + + + + + printing + true + true + Printing Support + Podpora pro tisk + Udskriftsunderstøttelse + Drucker-Support + Soporte para la impresión + Support d'impression + Prentstuðningur + Supporto per la stampa + å°åˆ·ã‚µãƒãƒ¼ãƒˆ + ì¸ì‡„ ì§€ì› + Skriverstøtte + Suporte a Impressão + Поддержка печати + Utskriftsstöd + 打å°æ”¯æŒ + 列å°æ”¯æ´ + Install these tools to enable the system to print or act as a print server. + Nainstalováním tÄ›chto nástrojů umožníte VaÅ¡emu poÄítaÄi tisknout nebo vystupovat jako tiskový server. + Installér disse værktøjer for at lade systemet udskrive eller fungere som udskriftsserver. + Installieren Sie diese Tools, um es dem System zu ermöglichen zu drucken oder als Drucker-Server zu funktionieren. + Instalar estas herramientas para habilitar el sistema para imprimir o actuar como un servidor de impresión. + Installer ces outils pour habiliter le système à imprimer ou agir comme un serveur d'impression. + Settu þessa pakka inn ef þú vilt prenta eða setja upp prentþjón. + Installare questi strumenti per permettere al sistema di stampare o fungere da server di stampa. + ã“れらã®ãƒ„ールをインストールã—ã¦ã‚·ã‚¹ãƒ†ãƒ ã‚’å°åˆ·å¯èƒ½ã«ã€åˆã¯ãƒ—リントサーãƒã¨ã—㦠有効ã«ã—ã¾ã™ã€‚ + 시스템ì—ì„œ ì¸ì‡„ 가능하게 하거나 ì¸ì‡„ 서버로 기능하게 하시려면 ì´ ë„구를 설치하십시오. + Installer disse verktøyene for Ã¥ kunne bruke skriver og Ã¥ kunne sette opp systemet some utskriftstjener. + Instale estas ferramentas se desejar imprimir com o computador ou que este funcione como servidor de impressão. + УÑтановите Ñти пакеты, чтобы получить возможноÑÑ‚ÑŒ печатать файлы или иÑпользовать ÑиÑтему как Ñервер печати. + Installera dessa verktyg för att lÃ¥ta systemet skriva ut eller agera utskriftsserver. + 安装这些工具æ¥å¯ç”¨æ‰“å°ç³»ç»Ÿæˆ–充当打å°æœåŠ¡å™¨çš„系统。 + 請安è£é€™äº›å¥—件,以啟用系統的列å°åŠŸèƒ½æˆ–當作一部列å°ä¼ºæœå™¨ã€‚ + + cups + + + 4Suite + XFree86-font-utils + a2ps + ghostscript + hpijs + LPRng + ttfprint + redhat-config-printer + redhat-switch-printer + + + + + cups + false + false + Cups + Cups + CUPS + Cups + Cups + Coupes + Cups + Cups + カップ + CUPS + Cups + Cups + Cups + Cups + Cups + Cups + Cups printing service and drivers to use it. + Tisková služba Cups a ovladaÄe pro její použití. + Udskriftstjenesten CUPS og de driverrutiner som behøves for brug af den. + Cups Druckerdienst und Treiber für die Verwendung. + Servicios de impresión cups y drivers para usarlo. + Service d'impression des coupes et lecteurs pour l'utiliser. + Cups prentkerfið og reklar fyrir það. + Servizio di stampa Cups e relativi driver per utilizzarlo. + カップå°åˆ·ã‚µãƒ¼ãƒ“スã¨ãれを使用ã™ã‚‹ãƒ‰ãƒ©ã‚¤ãƒãƒ¼ + CUPS ì¸ì‡„ 서비스와 ì´ ì„œë¹„ìŠ¤ë¥¼ 사용할 ë“œë¼ì´ë²„. + Utskriftssystemet Cups med drivere. + Serviço de impressão cups e controladores para o utilizar. + Служба печати Cups и драйверы Ð´Ð»Ñ ÐµÐµ иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ + Utskriftstjänsten Cups och de drivrutiner som behövs för användning av den. + Cups 打å°æœåŠ¡åŠæ‰€éœ€é©±åŠ¨ç¨‹åºã€‚ + Cups 列å°æœå‹™èˆ‡è¦ä½¿ç”¨çš„驅動程å¼ã€‚ + + cups + cups-drivers + cups-drivers-hpijs + cups-drivers-pnm2ppa + + + + + base-x + true + true + X Window System + X Window System + Vinduessystemet X + X Window System + Sistema X Window + Système X Window + X gluggakerfið + Sistema X Window + X Window System + X 윈ë„ìš° 시스템 + X + Sistema de Janelas X + СиÑтема X Window + Fönstersystemet X + X 窗å£ç³»ç»Ÿ + X 視窗系統 + Install this group of packages to use the base graphical (X) user interface. + Tuto skupinu balíÄků nainstalujte pro použití grafického (X) uživatelského prostÅ™edí. + Installér denne pakkegruppe for at bruge den grundlæggende grafiske brugergrænseflade (X). + Installieren Sie diese Paketgruppe, um die grafische Hauptbenutzeroberfläche (X) zu verwenden. + Instalar este grupo de paquetes para usar la interfaz de usuario (X) gráfica. + Installer ce groupe de paquetages pour utiliser l'interface utilisateur graphique de base (X). + Settu þessa pakka inn ef þú vilt nota myndræn forrit (X). + Installare questo gruppo di pacchetti per usare l'interfaccia utente grafica (X) di base. + ã“ã®ãƒ‘ッケージã®ã‚°ãƒ«ãƒ¼ãƒ—をインストールã—ã¦ã€åŸºæœ¬çš„グラフィカル(X)ユーザーインターフェイスを使用ã—ã¾ã™ã€‚ + 기본 그래픽 (X) ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ 사용하시려면 ì´ íŒ¨í‚¤ì§€ ê·¸ë£¹ì„ ì„¤ì¹˜í•˜ì‹­ì‹œì˜¤. + Installer denne pakkegruppen for Ã¥ bruke et grafisk grensesnitt (X). + Instale este grupo de pacotes para usar a interface gráfica básica de utilizador (o X). + УÑтановите Ñту группу пакетов, чтобы получить графичеÑкий Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ (X) + Installera denna paketgrupp för att använda det grundläggande grafiska gränssnittet (X). + 安装这组软件包æ¥ä½¿ç”¨åŸºç¡€å›¾å½¢åŒ–用户界é¢(X)。 + 請安è£é€™å€‹å¥—件群組,以用來使用基礎的圖形 (X) 使用者介é¢ã€‚ + + printing + + + authconfig-gtk + bitmap-fonts + firstboot + desktop-backgrounds-basic + desktop-backgrounds-extra + gdm + openssh-askpass + openssh-askpass-gnome + redhat-config-date + redhat-config-network + redhat-config-services + redhat-config-soundcard + redhat-config-users + redhat-config-xfree86 + redhat-logviewer + redhat-config-printer-gui + redhat-switch-printer-gnome + redhat-switchmail-gnome + redhat-config-packages + switchdesk + usermode-gtk + XFree86 + Xtest + XFree86-font-utils + XFree86-tools + XFree86-twm + XFree86-xauth + XFree86-75dpi-fonts + XFree86-100dpi-fonts + xinitrc + XFree86-xdm + up2date-gnome + rhn-applet + WindowMaker + xisdnload + + + + + dialup + false + true + Dialup Networking Support + Podpora vytáÄeného pÅ™ipojení k síti + Understøttelse for opkaldt opkopling + Dialup Netzwerk Support + Soporte de red del marcado + Support d'accès distant au réseau + Upphringinetsstuðningur + Supporto di networking dialup + ダイヤルアップãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚µãƒãƒ¼ãƒˆ + 전화연결 네트워킹 ì§€ì› + Støtte for oppringt nettverk + Suporte a Ligações Telefónicas + Удаленный доÑтуп к Ñети + Stöd för uppringd uppkoppling + 拨å·è”ç½‘æ”¯æŒ + æ’¥è™Ÿç¶²è·¯æ”¯æ´ + + ppp + lrzsz + minicom + statserial + wvdial + isdn4k-utils + + + + + gnome-desktop + true + true + GNOME Desktop Environment + ProstÅ™edí pracovní plochy GNOME + Skrivebordsmiljøet Gnome + GNOME Desktopumgebung + Entorno de escritorio de GNOME + Environnement de bureau GNOME + GNOME skjáborðið + Ambiente desktop di GNOME + GNOMEデスクトップ環境 + GNOME ë°ìŠ¤í¬íƒ‘ 환경 + Skrivebordsmiljøet GNOME + Ambiente de Trabalho GNOME + Окружение рабочего Ñтола GNOME + Skrivbordsmiljön GNOME + GNOME æ¡Œé¢çŽ¯å¢ƒ + GNOME æ¡Œé¢ç’°å¢ƒ + GNOME is a powerful, graphical user interface which includes a panel, desktop, system icons, and a graphical file manager. + 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ů. + Gnome er en stærk grafisk brugergrænseflade som indholder et panel, et skrivebord, systemikoner og en grafisk filbehandler. + GNOME ist eine leistungsstarkes grafisches Benutzerinterface mit Panel, Desktop, Systemsymbolen und grafischem Fenstermanager. + GNOME es una interfaz gráfica de usuario potente que incluye un panel, un escritorio, iconos del sistema y gestores de ficheros gráficos. + 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. + GNOME er öflugt myndrænt vinnuumhverfi sem inniheldur spjald, skjáborð, kerfissmámyndir og myndrænann skráarstjóra. + GNOME è una potente interfaccia grafica utente che include un pannello, un desktop, icone di sistema e un file manager grafico. + GNOMEã¯ã€ãƒ‘ãƒãƒ«ã€ãƒ‡ã‚¹ã‚¯ãƒˆãƒƒãƒ—ã€ã‚·ã‚¹ãƒ†ãƒ ã‚¢ã‚¤ã‚³ãƒ³ã€åŠã³ã‚°ãƒ©ãƒ•ã‚£ã‚«ãƒ« ファイルマãƒã‚¸ãƒ£ã‚’å«ã‚€å¼·åŠ›ãªã‚°ãƒ©ãƒ•ã‚£ã‚«ãƒ«ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã§ã™ã€‚ + GNOMEì€ ê°•ë ¥í•œ 그래픽 ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìŠ¤ë¡œì„œ 패ë„, ë°ìŠ¤í¬íƒ‘, 시스템 ì•„ì´ì½˜ê³¼ 그래픽 íŒŒì¼ ê´€ë¦¬ìž ê¸°ëŠ¥ì„ ê°–ì¶”ê³  있습니다. + GNOME er et kraftig, grafisk brukergrensesnitt som inkluderer et panel, skrivebord, systemikoner og en grafisk filhÃ¥ndterer + GNOME is a powerful, graphical user interface which includes a panel, desktop, system icons, and a graphical file manager. + GNOME - Ñто мощный графичеÑкий Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ, который включает панель, рабочий Ñтол, ÑиÑтемные пиктограммы и графичеÑкий менеджер файлов. + GNOME är ett kraftfullt, grafiskt användargränssnitt som innehÃ¥ller en panel, ett skrivbord, systemikoner och en grafisk filhanterare. + GNOME 是一个功能强大的图形化用户界é¢ï¼Œå®ƒåŒ…括一个é¢æ¿ã€ æ¡Œé¢ã€ç³»ç»Ÿå›¾æ ‡ã€ä»¥åŠå›¾å½¢åŒ–文件管ç†å™¨ã€‚ + GNOME 是一個功能強大的圖形使用者介é¢ï¼Œå®ƒå«æœ‰ä¸€å€‹é¢æ¿ã€æ¡Œé¢ã€ç³»çµ±åœ–示 以åŠä¸€å€‹åœ–形的檔案管ç†å“¡ã€‚ + + base-x + + + control-center + desktop-file-utils + eog + file-roller + gconf-editor + gedit + gftp + gimp-print-utils + gnome-applets + gnome-audio + gnome-media + gnome-panel + gnome-session + gnome-spell + gnome-system-monitor + gnome-terminal + gnome-user-docs + gnome-utils + gnome-vfs-extras + gnome-vfs2-extras + gqview + gtk-engines + gtk2-engines + ggv + mtr-gtk + magicdev + hwbrowser + metacity + nautilus + switchdesk-gnome + yelp + + + + + kde-desktop + KDE Desktop Environment + ProstÅ™edí pracovní plochy KDE + Skrivebordsmiljøet KDE + KDE Desktopumgebung + Entorno de escritorio para KDE + Environnement de bureau KDE + KDE skjáborðið + Ambiente desktop KDE + KDEデスクトップ環境 + KDE ë°ìŠ¤í¬íƒ‘ 환경 + Skrivebordsmiljøet KDE + Ambiente de Trabalho KDE + Окружение рабочего Ñтола KDE + Skrivbordsmiljön KDE + KDE æ¡Œé¢çŽ¯å¢ƒ + KDE æ¡Œé¢ç’°å¢ƒ + KDE is a powerful, graphical user interface which includes a panel, desktop, system icons, and a graphical file manager. + 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ů. + KDE er en stærk, grafisk brugergrænseflade som indholder et panel, et skrivebord, systemikoner og en grafisk filbehandler. + KDE ist eine leistungsstarkes grafisches Benutzerinterface mit Panel, Desktop, Systemsymbolen und grafischem Fenstermanager. + 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. + 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. + KDE er öflugt myndrænt vinnuumhverfi sem inniheldur spjald, skjáborð, kerfissmámyndir og myndrænann skráarstjóra. + KDE è una potente interfaccia grafica utente che include un pannello, un desktop, icone di sistema e un file manager grafico. + KDEã¯ã€ãƒ‘ãƒãƒ«ã€ãƒ‡ã‚¹ã‚¯ãƒˆãƒƒãƒ—ã€ã‚·ã‚¹ãƒ†ãƒ ã‚¢ã‚¤ã‚³ãƒ³åŠã³ã‚°ãƒ©ãƒ•ã‚£ã‚«ãƒ«ãƒ•ã‚¡ã‚¤ãƒ« マãƒã‚¸ãƒ£ã‚’å«ã‚€å¼·åŠ›ãªã‚°ãƒ©ãƒ•ã‚£ã‚«ãƒ«ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã§ã™ã€‚ + KDE는 강력한 그래픽 ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìŠ¤ë¡œì„œ 패ë„, ë°ìŠ¤í¬íƒ‘, 시스템 ì•„ì´ì½˜ê³¼ 그래픽 íŒŒì¼ ê´€ë¦¬ìž ê¸°ëŠ¥ì„ ê°–ì¶”ê³  있습니다. + KDE er et kraftig, grafisk brukergrensesnitt som inkluderer et panel, skrivebord, systemikoner og en grafisk filhÃ¥ndterer. + 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. + KDE Ñто мощный графичеÑкий интерфейÑ, включающий в ÑÐµÐ±Ñ Ð¿Ð°Ð½ÐµÐ»ÑŒ приложений, рабочий Ñтол, ÑиÑтемные иконки, и графичеÑкий менеджер файлов. + KDE är ett kraftfullt, grafiskt användargränssnitt som innehÃ¥ller en panel, ett skrivbord, systemikoner och en grafisk filhanterare. + KDE 是一个功能强大的图形化用户界é¢ã€‚它包括é¢æ¿ã€æ¡Œé¢ã€ 系统图标ã€ä»¥åŠå›¾å½¢åŒ–文件管ç†å™¨ã€‚ + KDE 是一個功能強大的圖形使用者介é¢ï¼Œå®ƒå«æœ‰ä¸€å€‹é¢æ¿ã€æ¡Œé¢ã€ç³»çµ±åœ–示 以åŠä¸€å€‹åœ–形的檔案管ç†å“¡ã€‚ + + base-x + dialup + + + ark + arts + autorun + fam + htdig + kaboodle + kamera + karm + kcalc + kcharselect + kdeaddons-kate + kdeaddons-noatun + kdeaddons-konqueror + kdeaddons-kicker + kdeaddons-konqueror + kdeadmin + kdeartwork + kdeartwork-locolor + kdeartwork-screensavers + kdemultimedia-arts + kdemultimedia-kfile + kdepasswd + kdepim + kdebase + kdessh + kdf + kdict + kedit + kdeaddons-knewsticker + kdeutils-laptop + kfloppy + kfile-pdf + kfile-png + khexedit + kjots + kljettool + klprfax + klpq + kmix + kpf + kregexpeditor + kscd + ksnapshot + ktimer + lisa + switchdesk-kde + xinetd + kppp + kpppload + kghostview + kdvi + kiconedit + kmail + kit + koncd + kpaint + kuickshow + kview + kviewshell + + + + + graphical-internet + Graphical Internet + Grafický Internet + Grafisk internet + Grafisches Internet + Internet gráfica + Internet graphique + Myndræn Internettól + Internet grafico + グラフィカルインターãƒãƒƒãƒˆ + 그래픽 ì¸í„°ë„· + Grafisk Internet + Internet em Modo Gráfico + ГрафичеÑкие ÑредÑтва Интернет + Grafiskt Internet + 图形化互è”网 + 圖形化網際網路 + This group includes graphical email, Web, and chat clients. + Tato skupina obsahuje grafické klienty pro email, WWW a chat. + Denne gruppe indeholder grafiske klienter for e-post, netlæsning og chat. + Diese Gruppe umfasst grafische E-Mail, Web und Chat-Clients. + El grupo incluye clientes gráficos de correo electrónico, Web y chat. + Ce groupe comprend le courrier électronique graphique, Web et les clients de conversation. + Þessi hópur inniheldur myndræn póst, vef og spjallforrit. + Questo gruppo include e-mail, Web e chat client grafici. + ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã«ã¯ã€ã‚°ãƒ©ãƒ•ã‚£ã‚«ãƒ«emailã€Webã€åŠã³ãƒãƒ£ãƒƒãƒˆã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãŒ å«ã¾ã‚Œã¦ã„ã¾ã™ã€‚ + ì´ ê·¸ë£¹ì—는 그래픽 ì´ë©”ì¼, 웹, 채팅 í´ë¼ì´ì–¸íŠ¸ê°€ í¬í•¨ë˜ì–´ 있습니다. + Denne gruppen inkluderer grafiske epost, web og chat-klienter. + Este grupo contém clientes gráficso de email, Web e chat. + Эта группа включает графичеÑкие клиенты Ñлектронной почты, Веб и чата. + Denna grupp inkluderar grafiska klienter för e-post, webbsurfande och chatt. + 这组软件包包å«å›¾å½¢åŒ–电å­é‚®ä»¶ã€ä¸‡ç»´ç½‘å’ŒèŠå¤©å®¢æˆ·ã€‚ + 這個群組包括圖形的電å­éƒµä»¶ã€ç¶²é ä»¥åŠèŠå¤©ç”¨æˆ¶ç«¯ã€‚ + true + true + + balsa + evolution + gaim + galeon + gnomemeeting + mozilla + mozilla-psm + mozilla-chat + mozilla-mail + pan + xchat + indexhtml + licq-kde + ksirc + kmail + korn + knode + kit + quanta + + + + + text-internet + Text-based Internet + Textový Internet + Tekstbaseret internet + Textbasiertes Internet + Internet basada en texto + Internet basé sur texte + Internet með textaskilum + Internet text-based + テキストベースã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆ + í…스트-기반 ì¸í„°ë„· + Tekstbaserte Internett-programmer + Internet em modo texto + ТеÑтовые ÑредÑтва Интернет + Textbaserat Internet + 基于文本的互è”网 + 文字為主的網際網路 + This group includes text-based email, Web, and chat clients. These applications do not require the X Window System. + Tato skupina obsahuje textové klienty pro email, WWW a chat. Tyto aplikace nepotÅ™ebují X Window System. + Denne gruppe indeholder tekst-baserede klienter for e-post, netlæsning og chat. Disse programmer kræver ikke vinduessystemet X. + Diese Gruppe enthält text-basierte E-Mail, Web und Chat-Clients. Diese Anwendungen benötigen das X Window System nicht. + Este grupo incluye correo electrónico en forma de texto, Web y clientes de chats. Estas aplicaciones no necesitan el sistema X Window. + 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. + Þessi hópur inniheldur póst, vef og spjallforrit með textaskilum. Þessi tól þurfa ekki X gluggakerfið. + Questo gruppo include e-mail, Web e chat client text-based. Tali applicazioni non richiedono il sistema X Window. + ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã«ã¯ã€ãƒ†ã‚­ã‚¹ãƒˆãƒ™ãƒ¼ã‚¹ã®email, Web,åŠã³ãƒãƒ£ãƒƒãƒˆã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãŒå«ã¾ã‚Œã¦ ã„ã¾ã™ã€‚ã“れらã®ã‚¢ãƒ—リケーションã¯X Window Systemã‚’å¿…è¦ã¨ã—ã¾ã›ã‚“。 + ì´ ê·¸ë¦…ì—는 í…스트-기반 ì´ë©”ì¼, 웹, 채팅 í´ë¼ì´ì–¸íŠ¸ê°€ í¬í•¨ë˜ì–´ 있습니다. X 윈ë„ìš° ì‹œìŠ¤í…œì´ ì—†ì–´ë„ ìž‘ë™í•©ë‹ˆë‹¤. + Denne gruppen inneholder tekstbaserte epost, web og chat-klienter. Disse programmene trenger ikke X. + 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. + Эта группа Ñодержит текÑтовые Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Ñ Ñлектронной почтой, интернетом, а также чат-клиенты. ÐŸÑ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð² Ñтой группе не требуют X Window System + Denna grupp inkluderar text-baserade klienter för e-post, webbsurfande och chatt. Dessa program kräver inte fönstersystemet X. + 这组软件包包å«åŸºäºŽæ–‡æœ¬çš„电å­é‚®ä»¶ã€ä¸‡ç»´ç½‘ã€å’ŒèŠå¤©å®¢æˆ·çš„软件包。 这些应用程åºä¸è¦æ±‚ X 窗å£ç³»ç»Ÿã€‚ + 這個群組包括文字為主的電å­éƒµä»¶ã€ç¶²é èˆ‡èŠå¤©ç”¨æˆ¶ç«¯ã€‚ é€™äº›æ‡‰ç”¨ç¨‹å¼ ä¸¦ä¸éœ€è¦ X 視窗系統。 + true + true + + base + + + fetchmail + epic + lynx + mutt + ncftp + pine + slrn + + + + + sound-and-video + Sound and Video + Zvuk a video + Lyd og video + Sound und Video + Sonido y vídeo + Son et vidéo + Hljóð og mynd + Audio e video + サウンドã¨ãƒ“デオ + 사운드와 비디오 + Lyd og bilde + Som e Video + Звук и видео + Ljud och video + 视频和音频 + 音效與視訊 + From CD recording to playing audio CDs and multimedia files, this package group allows you to work with sound and video on the system. + 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ů. + Denne gruppe lader dig arbejde med lyd og video pÃ¥ systemet, med altfra cd-optagning til afspilning af lyd-cd'er og multimedie-filer. + 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. + 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. + CDã®éŒ²éŸ³ã‹ã‚‰ã‚ªãƒ¼ãƒ‡ã‚£ã‚ªCDã¨ãƒžãƒ«ãƒãƒ¡ãƒ‡ã‚£ã‚¢ãƒ•ã‚¡ã‚¤ãƒ«ã®å†ç”Ÿã¾ã§ã€ã“㮠パッケージグループã§ã‚·ã‚¹ãƒ†ãƒ ä¸Šã®ã‚µã‚¦ãƒ³ãƒ‰ã¨ãƒ“デオを機能を使用ã§ãã¾ã™ã€‚ + ì´ íŒ¨í‚¤ì§€ ê·¸ë£¹ì„ ì‚¬ìš©í•˜ì—¬ CD ë…¹ìŒì—ì„œ 오디오 CD ë° ë©€í‹°ë¯¸ë””ì–´ íŒŒì¼ ìž¬ìƒì— ì´ë¥´ê¸°ê¹Œì§€ 다양한 사운드와 비디오 ìž‘ì—…ì„ ìˆ˜í–‰í•˜ì‹¤ 수 있습니다. + Denne pakkegruppen inneholder programmer for Ã¥ spille av CDer og multimediefiler samt arbeide med lyd og bilde pÃ¥ systemet. + 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. + От запиÑи CD до Ð¿Ñ€Ð¾Ð¸Ð³Ñ€Ñ‹Ð²Ð°Ð½Ð¸Ñ Ð·Ð²ÑƒÐºÐ¾Ð²Ñ‹Ñ… диÑков и MP3, Ñта группа пакетов позволÑет работать Ñо звуком и видео в ÑиÑтеме. + Denna paketgrupp lÃ¥ter dig arbeta med ljud och video, vare sig det gäller cdinspelning eller att lyssna pÃ¥ musikskivor och multimediafiler. + 从光盘录制到播放音频光盘和多媒体文件,该软件包组å…许您使用系统上的音频和视频资æºã€‚ + 從燒錄 CD 到播放音效 CD 與多媒體檔案,這個套件群組讓您å¯ä»¥åœ¨ç³»çµ±ä¸Šä½¿ç”¨éŸ³æ•ˆèˆ‡è¦–訊的功能。 + true + true + + base + base-x + + + aumix + cdda2wav + cdlabelgen + cdp + cdparanoia + cdrecord + dvdrecord + dvgrab + grip + gtoaster + kaboodle + kdeaddons-noatun + kmid + kmidi + koncd + mikmod + sndconfig + sox + vorbis-tools + xawtv + xcdroast + xmms + xmms-skins + + + + + graphics + Graphics + Grafika + Grafik + Grafik + Gráficos + Graphismes + Myndvinnsla + Grafica + グラフィクス + 그래픽 + Grafikk + Gráficos + Графика + Grafik + 图形 + 圖形 + This group includes packages to help you manipulate and scan images. + Tato skupina obsahuje balíÄky, které Vám pomohou pracovat s obrázky a skenovat je. + Denne gruppe indeholder pakker som hjælper dig med at manipulere og indlæse billeder. + Diese Gruppe umfasst Pakete, mit denen Sie Bilder bearbeiten und scannen können. + Este grupo incluye paquetes que le permitirán manipular y escanera imágenes. + Ce groupe comprend des paquetages qui vous aident à manipuler et scanner des images. + Þessi hópur inniheldur pakka sem gera þér kleyft að skanna og breyta myndum. + Questo gruppo include i pacchetti per la manipolazione e la scansione delle immagini. + ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã«ã¯ã‚¤ãƒ¡ãƒ¼ã‚¸ã®å‡¦ç†ã¨ã‚¹ã‚­ãƒ£ãƒ³ã‚’手ä¼ã†ãƒ‘ッケージãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚ + ì´ ê·¸ë£¹ì— í¬í•¨ëœ 패키지는 ì´ë¯¸ì§€ë¥¼ 스캔, ì¡°ìž‘ ìž‘ì—…ì„ ë„와드립니다. + Denne gruppen inneholder pakker for manipulering og innscanning av bilder. + Este grupo inclui pacotes que o ajudam a manipular e digitalizar imagens. + Эта группа Ñодержит Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð½ÐµÐ¾Ð±Ñ…Ð¾Ð´Ð¸Ð¼Ñ‹Ðµ Ð´Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Ñ Ð³Ñ€Ð°Ñ„Ð¸ÐºÐ¾Ð¹ и Ñканерами. + Denna grupp inkluderar paket som hjälper dig manipulera och läsa in bilder. + 这组软件包包括用æ¥å¸®åŠ©æ‚¨æ“作和扫æ图åƒçš„软件包。 + 這個群組包括了幫助您處ç†èˆ‡æŽƒæå½±åƒçš„套件。 + true + true + + base + base-x + + + ImageMagick + sane-frontends + xsane + xsane-gimp + dia + gimp + gimp-data-extras + gtkam + gtkam-gimp + kamera + kcoloredit + kiconedit + kooka + kpaint + kuickshow + netpbm-progs + xfig + + + + + + office + Office/Productivity + Kancelář/produktivita + Kontorprogrammel + Office/Produktivität + Oficina/Productividad + Bureau/Productivité + Skrifstofuforrit + Office/Produttività + Office/生産性 + 사무/ìƒì‚°ì„± + Kontor/Produktivitet + Escritório/Produtividade + ОфиÑные Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ + Kontorsprogramvara + 办公/生产率 + 辦公軟體/作業軟體 + The applications include office suites, PDF viewers, and more. + Aplikace zahrnují kancelářské balíky, prohlížeÄe PDF atd. + Programmerne inkluderer suiter med kontorprogrammel, PDF-visere, med mere. + Die Anwendungen enthalten Office-Programme, PDF-Anzeigeprogramme u.v.m. + Las aplicaciones incluyen los paquetes de ofimática, los visualizadores de PDF y mucho más. + Les applications comprennent des suites de bureau, des afficheurs PDF et bien plus encore. + Forritin innihalda meðal annars skrifstofutól, PDF sjár og fleira. + Le applicazioni includono pacchetti per l'ufficio, programmi per visualizzare i PDF e altro. + アプリケーションã«ã¯ã€ã‚ªãƒ•ã‚£ã‚¹ã‚»ãƒƒãƒˆã€PDFビューアåŠã³ãã®ä»–ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚ + ì´ ì‘ìš© í”„ë¡œê·¸ëž¨ì€ ì‚¬ë¬´ìš© 프로그램 모ìŒ, PDF 보기 프로그램 ë“±ì„ í¬í•¨í•©ë‹ˆë‹¤. + Applikasjonene innerholder kontorstøtteprogrammer, PDV-lesere og mer. + As aplicações incluem pacotes de escritório, visualizadores de PDF e outros. + Эта группа включает в ÑÐµÐ±Ñ Ð¾Ñ„Ð¸Ñные приложениÑ: редакторы текÑта, программы Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñмотра PDF файлов, и проч. + Programmen inkluderar sviter med kontorsprogramvara, PDF-visare, med mera. + 包括的应用程åºæœ‰åŠžå…¬å¥—件ã€PDF 查看器等等。 + 應用程å¼åŒ…括了辦公室套è£è»Ÿé«”ã€PDF 檢視器等等。 + true + true + + base-x + + + openoffice + xpdf + MagicPoint + abiword + ggv + gnumeric + gnucash + mrproject + kdepim-pilot + koffice + kdvi + kghostview + kfax + tetex-xdvi + + + + + mail-server + Mail Server + PoÅ¡tovní server + Postserver + Mail-Server + Servidor de correo + Serveur de courrier + Póstþjónn + Server Mail + メールサーム+ ë©”ì¼ ì„œë²„ + Eposttjener + Servidor de Mail + Сервер Ñлектронной почты + E-postserver + 邮件æœåŠ¡å™¨ + 郵件伺æœå™¨ + These packages allow you to configure an IMAP or Postfix mail server. + Tyto balíÄky Vám umožní nakonfigurovat server IMAP nebo poÅ¡tovní server Postfix. + Disse pakker lader dig konfigurere en IMAP- eller Postfix-postserver. + Mit diesen Paketen können Sie einen IMAP oder Postfix Mail-Server konfigurieren. + Estos paquetes le permiten configurar un servidor de correo IMAP o Postfix. + Ces paquetages vous permettent de configurer un serveur de courrier IMAP ou Postfix. + Þessir pakkar gera þér kleyft að setja upp IMAP eða Postfix pósthús. + Questi pacchetti consentono di configurare un server di posta IMAP o Postfix. + ã“れらã®ãƒ‘ッケージã§ã€IMAP ã‹ Postfixメールサーãƒã‚’設定ã§ãã¾ã™ã€‚ + ì´ íŒ¨í‚¤ì§€ëŠ” IMAPê³¼ Postfix ë©”ì¼ ì„œë²„ ì„¤ì •ì„ ë„와ì¤ë‹ˆë‹¤. + Disse pakkene lar deg konfigurere en IMAP eller Postfix eposttjener. + Este pacotes permitem-lhe configurar os servidores de mail IMAP ou Postfix. + Эти пакеты позволÑÑŽÑ‚ наÑтроить почтовый Ñервер IMAP или Postfix. + Dessa paket lÃ¥ter dig konfigurera en IMAP- eller Postfix-epostserver. + 这些软件包å…许您é…ç½® IMAP 或 Postfix 邮件æœåŠ¡å™¨ã€‚ + 這些套件讓您å¯ä»¥è¨­å®šä¸€å€‹ IMAP 或 Postfix 郵件伺æœå™¨ã€‚ + true + + base + + + sendmail + imap + sendmail-cf + mailman + spamassassin + squirrelmail + postfix + + + + + network-server + Network Servers + Síťové servery + Netværksservere + Netzwerk-Server + Servidores de red + Serveur de réseau + Netþjónustur + Server di rete + ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚µãƒ¼ãƒ + ë„¤íŠ¸ì›Œí¬ ì„œë²„ + Nettverkstjener + Servidores de Rede + Сетевые Ñерверы + Nätverksservrar + 网络æœåŠ¡å™¨ + 網路伺æœå™¨ + These packages include network-based servers such as CIPE, DHCP, and telnet. + Tyto balíÄky zahrnují síťové servery jako CIPE, DHCP a telnet. + Disse pakker inkluderer netværksbaserede servere som fx CIPE, DHCP og telnet. + Diese Pakete enthalten netzwerkbasierte Server wie CIPE, DHCP und telnet. + Estos paquetes incluyen servidores basados en la red tales como CIPE, DHCP, y telnet. + Ces paquetages comprennent des serveurs basés sur réseau comme CIPE, DHCP et telnet. + Þessir pakkar innihalda netþjónustur eins og CIPE, DHCP og telnet. + Questi pacchetti includono server network-based quali CIPE, DHCP e telnet. + ã“れらã®ãƒ‘ッケージã«ã¯ã€CIPE, DHCP, ã‚„ telnetãªã©ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ™ãƒ¼ã‚¹ã®ã‚µãƒ¼ãƒãŒ å«ã¾ã‚Œã¦ã„ã¾ã™ã€‚ + ì´ íŒ¨í‚¤ì§€ì—는 CIPE, DHCP, telnetê³¼ ê°™ì€ ë„¤íŠ¸ì›Œí¬-기반 서버가 í¬í•¨ë˜ì–´ 있습니다. + Disse pakkene inkluderer nettverks-baserte tjenester som CIPE, DHCP og telnet. + Estes pacotes incluem servdores de rede como o CIPE, DHCP e telnet. + Эти пакеты включают в ÑÐµÐ±Ñ Ñ‚Ð°ÐºÐ¸Ðµ Ñетевые ÑервиÑÑ‹, как CIPE, DHCP и telet + Dessa paket inkluderar nätverksbaserade servrar som exempelvis CIPE, DHCP och telnet. + 这些软件包包括基于网络的æœåŠ¡å™¨ï¼Œä¾‹å¦‚ CIPEã€DHCPã€å’Œ telnet。 + 這些套件包括網路為主的伺æœå™¨ï¼Œä¾‹å¦‚ CIPE, DHCP 與 telnet。 + true + + base + + + amanda-server + am-utils + cipe + dhcp + finger-server + krb5-server + pxe + radvd + rsh-server + talk-server + telnet-server + ypserv + zebra + + + + + news-server + News Server + News server + Nyhedsgruppesserver + News-Server + Servidor de noticias + Serveur de news + Fréttaþjónn + Server news + ニュースサーム+ 뉴스 서버 + News-tjenere + Servidor de News + Сервер новоÑтей + Diskussionsgruppsserver + æ–°é—»æœåŠ¡å™¨ + æ–°èžä¼ºæœå™¨ + This group allows you to configure the system as a news server. + Tato skupina Vám umožní nakonfigurovat poÄítaÄ jako news server. + Denne gruppe lader dig konfigurere systemet som en nyhedsgruppesserver. + Mit dieser Gruppe können Sie das System als News-Server konfigurieren. + Este grupo le permite configurar el sistema como un servidor nuevo. + Ce groupe vous permet de configurer le système comme nouveau serveur. + Þessi tól gera þér kleyft að stilla vélina sem news þjón. + Questo gruppo consente di configurare il sistema come server news. + ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã§ã€ãƒ‹ãƒ¥ãƒ¼ã‚¹ã‚µãƒ¼ãƒã¨ã—ã¦ã‚·ã‚¹ãƒ†ãƒ ã‚’設定ã§ãã¾ã™ã€‚ + ì´ ê·¸ë£¹ì„ ì‚¬ìš©í•˜ì—¬ ì‹œìŠ¤í…œì„ ë‰´ìŠ¤ 서버로 설정하실 수 있습니다. + Disse verktøyene lar deg kjøre en news-tjener pÃ¥ systemet. + Este grupo permite-lhe configurar o sistema como um servidor de notícias. + Эта группа позволÑет иÑпользовать ÑиÑтему как Ñервер новоÑтей. + Denna grupp lÃ¥ter dig konfigurera systemet som en diskussionsgruppsserver. + 这组软件包å…许您把系统é…ç½®æˆæ–°é—»æœåŠ¡å™¨ã€‚ + 這個群組讓您å¯ä»¥è¨­å®šç³»çµ±ç‚ºä¸€éƒ¨æ–°èžä¼ºæœå™¨ã€‚ + true + + base + + + inn + + + + + smb-server + Windows File Server + Souborový server pro Windows + Windows-filserver + Windows Datei-Server + Servidor de ficheros Windows + Serveur de fichier Windows + Skráaþjónn fyrir Windows + File server Windows + Windowsファイルサーム+ Windows íŒŒì¼ ì„œë²„ + Filtjener for Windows + Servidor de Ficheiros Windows + Файловый Ñервер Ð´Ð»Ñ Windows + Windows-filserver + Windows 文件æœåŠ¡å™¨ + Windows 檔案伺æœå™¨ + This package group allows you to share files between Linux and MS Windows(tm) systems. + Tato skupina balíÄků Vám umožní sdílet soubory mezi systémy Linux a MS Windows (tm). + Denne pakkegruppe lader dig dele filer mellem Linux og system med MS Windows(tm). + Mit dieser Paketgruppe können Sie Dateien in Linux und MS Windows (tm) gemeinsam nutzen. + Este grupo de paquetes le permite compartir ficheros entre los sistemas Linux y MS Windows (tm). + Ce groupe de paquetages vous permet de partager des fichiers entre les systèmes Linux et Windows (m). + Þessi pakkahópur gerir þér kleyft að skiptast á skrám milli Linux og MS Windows véla. + Questo gruppo di pacchetti consente di condividere i file tra sistemi Linux e MS Windows(tm). + ã“ã®ãƒ‘ッケージグループã§ã€Linux 㨠MS Windows(tm) システムã®é–“ã§ãƒ•ã‚¡ã‚¤ãƒ«ã‚’共有 ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ + ì´ íŒ¨í‚¤ì§€ ê·¸ë£¹ì„ ì‚¬ìš©í•˜ì—¬ Linux와 MS Windows (tm) 시스템 사ì´ì—ì„œ 파ì¼ì„ 공유할 수 있습니다. + Denne pakkegruppen lar deg dele filer mellom Linux og MS Windows(tm)-systemer. + Este grupo de pacotes permite-lhe partilhar os ficheiros entre os sistemas Linux e MS Windows (tm). + Эта группа пакетов делает возможным доÑтуп к файлам между ÑиÑтемами Linux и MS Windows(tm). + Denna paketgrupp lÃ¥ter dig dela ut filer mellan Linux och system med MS Windows(tm). + 该软件包组å…许您在 Linux å’Œ MS Windows(tm) 系统间共享文件。 + 這個套件群組使您å¯ä»¥åœ¨ Linux 與 MS Windows (tm) 系統間共享檔案。 + true + + base + + + samba-client + samba + + + + + server-cfg + Server Configuration Tools + Nástroje pro konfiguraci serveru + Serverkonfigurationsværktøjer + Server Konfigurationstools + Herramientas de configuración del servidor + Outils de configuration de serveur + Stillingatól fyrir þjóna + Tool di configurazione del server + サーãƒè¨­å®šãƒ„ール + 서버 설정 ë„구 + Konfigurasjonsverktøy for tjenere + Ferramentas de Configuração de Servidores + СредÑтва наÑтройки Ñервера + Serverkonfigurationsverktyg + æœåŠ¡å™¨é…置工具 + 伺æœå™¨è¨­å®šå·¥å…· + This group contains all of Red Hat's custom server configuration tools. + Tato skupina obsahuje vÅ¡echny nástroje pro konfiguraci serveru od spoleÄnosti Red Hat. + Denne gruppe indholder alle Red Hats specialtilpassede serverkonfigureringsværktøjer. + Diese Gruppe enthält alle Tools für die benutzerdefinierte Konfiguration des Servers von Red Hat. + Este grupo contiene todas las herramientas de configuración del servidor de personalización de Red Hat. + Ce groupe contient tous les outils de configuration du serveur personnalisé Red Hat. + Þessi hópur inniheldur öll Red Hat stillingatólin. + Questo gruppo contiene tutti gli strumenti per personalizzare la configurazione del server Red Hat. + ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã«ã¯ã€å…¨ã¦ã®Red Hatカスタムサーãƒè¨­å®šãƒ„ールãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚ + ì´ ê·¸ë£¹ì—는 Red Hatì˜ ì‚¬ìš©ìž ì„¤ì • 서버 설정 ë„구가 ëª¨ë‘ í¬í•¨ë˜ì–´ 있습니다. + Denne gruppen inneholder Red Hats konfigurasjonsverktøy. + Este grupo contém todas as ferramentas de configuração de servidores da Red Hat. + Эта группа включает в ÑÐµÐ±Ñ Ð²Ñе ÑредÑтва админиÑÑ‚Ñ€Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñервера, напиÑанные в Red Hat. + Denna grupp innehÃ¥ller alla Red Hats specialanpassade serverkonfigurationsverktyg. + 这组软件包包å«æ‰€æœ‰ Red Hat 的定制æœåŠ¡å™¨é…置工具。 + 這個群組包括所有 Red Hat 自訂的伺æœå™¨è¨­å®šå·¥å…·ã€‚ + true + + base + + + redhat-config-bind + redhat-config-httpd + redhat-config-nfs + redhat-config-network + redhat-config-printer + redhat-config-printer-gui + redhat-config-securitylevel + redhat-config-services + redhat-switch-printer + redhat-switch-printer-gnome + redhat-switchmail + redhat-switchmail-gnome + + + + + ftp-server + FTP Server + FTP server + FTP-server + FTP-Server + Servidor FTP + Serveur FTP + FTP þjónn + Server FTP + FTP サーム+ FTP 서버 + FTP-tjener + Servidor FTP + Сервер FTP + FTP-server + FTP æœåŠ¡å™¨ + FTP 伺æœå™¨ + These tools allow you to run an FTP server on the system. + Tyto nástroje Vám umožní na poÄítaÄi provozovat FTP server. + Disse værktøjer lader dig køre en FTP-server pÃ¥ systemet. + Mit diesen Tools können Sie einen FTP-Server im System ausführen. + Estas herramientas le permiten ejecutar un servidor FTP en el sistema. + Ces outils vous permettent d'exécuter un serveur FTP sur le système. + Þessi tól gera þér kleyft að keyra FTP þjón á vélinni. + Questi strumenti consentono di eseguire un server FTP sul sistema. + ã“れらã®ãƒ„ールã§ã‚·ã‚¹ãƒ†ãƒ ä¸Šã®FTPサーãƒã‚’実行ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ + ì´ ë„구를 사용하여 시스템 ìƒì—ì„œ FTP 서버를 ìš´ì˜í•˜ì‹¤ 수 있습니다. + Disse verktøyene lar deg kjøre en ftp-tjener pÃ¥ systemet. + Estas ferramentas permitem-lhe correr um servidor FTP no seu computador. + Эти ÑредÑтва позволÑÑŽÑ‚ иÑпользовать ÑиÑтему как Ñервер FTP. + Dessa verktyg lÃ¥ter dig köra en FTP-server pÃ¥ systemet. + 这些工具å…许您在系统上è¿è¡Œ FTP æœåŠ¡å™¨ã€‚ + 這些工具讓您å¯ä»¥åœ¨ç³»çµ±ä¸ŠåŸ·è¡Œä¸€å€‹ FTP 伺æœå™¨ã€‚ + true + + base + + + anonftp + vsftpd + + + + + sql-server + SQL Database Server + Databázový server SQL + SQL-databaseserver + SQL Datenbank-Server + Servidor de la base de datos SQL + Serveur de base de données SQL + SQL gagnagrunnur + Server per database SQL + SQLデータベースサーム+ SQL ë°ì´í„°ë² ì´ìŠ¤ 서버 + Database-tjener + Servidor de Base de Dados SQL + Сервер базы данных SQL + SQL-databasserver + SQL æ•°æ®åº“æœåŠ¡å™¨ + SQL 資料庫伺æœå™¨ + This package group allows you to run an SQL server on the system. + Tato skupina balíÄků Vám umožní na poÄítaÄi provozovat SQL server. + Denne pakkegruppe lader dig køre en SQL-server pÃ¥ systemet. + Mit dieser Paketgruppe können Sie einen SQL-Server im System ausführen. + Este grupo de paquetes le permite ejecutar un servidor SQL en el sistema. + Ce groupe de paquetages vous permet d'exécuter un serveur SQL sur le système. + Þessi pakkahópur gerir þér kleyft að keyra SQL þjónustu. + Questo gruppo di pacchetti consente di eseguire un server SQL sul sistema. + ã“ã®ãƒ‘ッケージグループã§ã€ã‚·ã‚¹ãƒ†ãƒ ä¸Šã®SQLサーãƒã‚’実行ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ + ì´ íŒ¨í‚¤ì§€ ê·¸ë£¹ì„ ì‚¬ìš©í•˜ì—¬ 시스템 ìƒì—ì„œ SQL 서버를 ìš´ì˜í•˜ì‹¤ 수 있습니다. + Denne pakkegruppen lar deg kjøre en database-tjenere pÃ¥ systemet. + Este grupo de pacotes permite-lhe correr um servidor SQL no seu sistema. + Ð’ Ñту группу включены различные SQL Ñерверы. + Denna paketgrupp lÃ¥ter dig köra en SQL-server pÃ¥ systemet. + 该软件包组å…许您在系统上è¿è¡Œ SQL æœåŠ¡å™¨ã€‚ + 這個套件群組讓您å¯ä»¥åœ¨ç³»çµ±ä¸ŠåŸ·è¡Œä¸€éƒ¨ SQL 伺æœå™¨ã€‚ + true + + base + + + postgresql-server + unixODBC + perl-DBD-Pg + perl-DB_File + mysql-server + + + + + web-server + Web Server + WWW server + Webserver + Web-Server + Servidor Web + Serveur Web + Vefþjónn + Server Web + Webサーム+ 웹 서버 + Webtjener + Servidor Web + Веб-Ñервер + Webbserver + 万维网æœåŠ¡å™¨ + 網é ä¼ºæœå™¨ + These tools allow you to run a Web server on the system. + Tyto nástroje Vám umožní na poÄítaÄi provozovat WWW server. + Disse værktøjer lader dig køre en webserver pÃ¥ systemet. + Mit diesen Tools können Sie einen Web-Server im System ausführen. + Estas herramientas le permiten ejecutar un servidor Web en el sistema. + Ces outils vous permettent d'exécuter un serveur Web sur le système. + Þessi tól gera þér kleyft að keyra vefþjón á vélinni. + Questi strumenti consentono di eseguire un server Web sul sistema. + ã“れらã®ãƒ„ールã§ã‚·ã‚¹ãƒ†ãƒ ä¸Šã®Webサーãƒã‚’実行ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ + ì´ ë„구를 사용하여 시스템 ìƒì—ì„œ 웹서버를 ìš´ì˜í•˜ì‹¤ 수 있습니다. + Disse verktøyene lar deg kjøre en web-tjener pÃ¥ systemet. + Estas ferramentas permitem-lhe correr um servidor Web no seu computador. + Эти ÑредÑтва позволÑÑŽÑ‚ иÑпользовать ÑиÑтему как Веб-Ñервер + Dessa verktyg lÃ¥ter dig köra en webbserver pÃ¥ systemet. + 这些工具å…许您在系统生è¿è¡Œä¸‡ç»´ç½‘æœåŠ¡å™¨ã€‚ + 這些工具讓您å¯ä»¥åœ¨ç³»çµ±ä¸ŠåŸ·è¡Œä¸€å€‹ç¶²é ä¼ºæœå™¨ã€‚ + true + + base + + + httpd + httpd-manual + hwcrypto + mod_python + mod_perl + mod_ssl + php + php-imap + php-ldap + php-pgsql + mod_auth_pgsql + squid + tux + webalizer + + + + + dns-server + DNS Name Server + Jmenný server DNS + DNS-navneserver + DNS Name-Server + Servidor del nombre DNS + Nom de serveur DNS + DNS nafnaþjónn + Nome server DNS + DNSãƒãƒ¼ãƒ ã‚µãƒ¼ãƒ + DNS ì´ë¦„ 서버 + DNS-tjener + Servidor de Nomes DNS + Сервер DNS + DNS-namnserver + DNS å称æœåŠ¡å™¨ + DNS å稱伺æœå™¨ + This package group allows you to run a DNS name server (BIND) on the system. + Tato skupina balíÄků Vám umožní na poÄítaÄi provozovat jmenný server DNS (BIND). + Denne pakkegruppe lader dig køre en DNS-navneserver (BIND) pÃ¥ systemet. + Mit dieser Paketgruppe können Sie einen DNS Name-Server (BIND) im System ausführen. + Este paquete le permite ejecutar un servidor de nombre DNS (BIND) en el sistema. + Ce groupe de paquetages vous permet d'exécuter un nom de serveur DNS (BIND) sur le système. + Þessi pakkahópur gerir þér kleyft að keyra DNS nafnaþjón (BIND) á vélinni þinni. + Questo gruppo di pacchetti consente di eseguire un name server DNS (BIND) sul sistema. + ã“ã®ãƒ‘ッケージグループã§ã€ã‚·ã‚¹ãƒ†ãƒ ä¸Šã®DNSãƒãƒ¼ãƒ ã‚µãƒ¼ãƒ(BIND)を実行ã§ãã¾ã™ã€‚ + ì´ íŒ¨í‚¤ì§€ ê·¸ë£¹ì„ ì‚¬ìš©í•˜ì—¬ 시스템 ìƒì—ì„œ DNS ì´ë¦„ 서버 (BIND)를 ìš´ì˜í•˜ì‹¤ 수 있습니다. + Denne pakkegruppen lar deg kjøre en DNS-tjener (BIND) pÃ¥ systemet. + Este grupo de pacotes permite-lhe correr um servidor de nomes de DNS (o BIND) no sistema. + Пакеты в Ñтой группе позволÑÑ‚ вам уÑтановить и наÑтроить DNS (BIND). + Denna paketgrupp lÃ¥ter dig köra en DNS-namnserver (BIND) pÃ¥ systemet. + 该软件包组å…许您在系统上è¿è¡Œ DNS å称æœåŠ¡å™¨(BIND)。 + 這個套件群組讓您å¯ä»¥åœ¨ç³»çµ±ä¸ŠåŸ·è¡Œä¸€éƒ¨ DNS å稱伺æœå™¨ (BIND)。 + true + + base + + + caching-nameserver + bind + + + + + authoring-and-publishing + Authoring and Publishing + TvoÅ™ení a publikování + Forfatterskab og publicering + Authoring und Publishing + Autorización y publicación + Authoring et Publishing + Umbrot og ritstörf + Authoring e publishing + 著作ã¨ç™ºè¡Œ + 제작과 ì¶œíŒ + Tekstpublisering + Autoria e Publicação + Подготовка публикаций + Författande och publicering + 授æƒå’Œå‡ºç‰ˆ + 編寫與出版 + These tools allow you to create documentation in the DocBook format and convert them to HTML, PDF, Postscript, and text. + Tyto nástroje Vám umožní vytvářet dokumentaci ve formátu DocBook a konvertovat ji do HTML, PDF, Postscriptu a textu. + Disse værktøjer lader dig skabe dokumentation i DocBook-formatet og konvertere dem til HTML, PDF, Postscript og tekst. + Mit diesen Tools können Sie Dokumentation im DocBook Format anlegen und diese in die Formate HTML, PDF, Postscript und Text konvertieren. + Estas herramientas le permiten crear documentación en formato DocBook y convertirla a HTML, PDF, Postscript y texto. + Ces outils vous permettent de créer de la documentation sous format DocBook et de la convertir en HTML, PDF, Postscript et texte. + Þessi tól gera þér kleyft að búa til skjöl á DocBook sniði og breyta þeim í HTML, PDF, Postscript og texta. + Questi strumenti consentono di creare documenti in formato DocBook e di convertirli in HTML, PDF, Postscript e testo. + ã“れらã®ãƒ„ールã§ã€DocBookå½¢å¼ã§æ–‡æ›¸ã‚’作æˆã—ã¦ã€ãれらをHTML, PDF, Postscript, åŠã³ textã¸å¤‰æ›ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚. + ì´ ë„구를 사용하여 DocBook 형ì‹ì˜ 문서를 ìƒì„±í•˜ì‹¤ 수 있으며 ìƒì„±ëœ 문서를 HTML, PDF, Postscript와 í…스트 형ì‹ìœ¼ë¡œ 변환하실 수 있습니다. + Disse verktøyene lar deg lage dokumentasjon i DocBook-formatet og konvertere dem til HTML, PDF, Postscript og tekst. + Estas ferramentas permitem-lhe criar a documentação no formato DocBook e convertê-la para HTML, PDF, PostScript e texto. + Эти ÑредÑтва позволÑÑŽÑ‚ Ñоздавать документацию в формате DocBook и преобразовывать в HTML, PDF, Postscript и текÑÑ‚. + Dessa verktyg lÃ¥ter dig skapa dokumentation i DocBook-formatet och konvertera dem till HTML, PDF, Postscript och text. + 这些软件包å…许您创建 DocBook æ ¼å¼çš„文档,并将它们转æ¢æˆ HTML〠PDFã€Postscript 和文本格å¼ã€‚ + 這些工具讓您å¯ä»¥å»ºç«‹ DocBook æ ¼å¼çš„說明文件,並且 將它們轉æ›ç‚º HTML, PDF, Postscript 與文字。 + true + + base + + + docbook-dtds + docbook-style-dsssl + docbook-utils + docbook-utils-pdf + linuxdoc-tools + tetex + tetex-afm + tetex-xdvi + tetex-latex + xmlto + + + + + engineering-and-scientific + Engineering and Scientific + VÄ›decké nástroje + Ingeniør- og naturvidenskab + Engineering und Wissenschaft + Ingeniería y científico + Engineering et Scientifique + Vísindi og verkfræði + Settori engineering e scientifico + 技術系ã¨ç§‘学系 + 공학과 과학 + Vitenskapelige programmer + Engenharia e Ciência + Ðаучные и инженерные + Konstruktion och forskning + 工程和科学 + 工程與科學 + This group includes packages for performing mathematical and scientific computations and plotting, as well as unit conversion. + 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. + Denne gruppe indeholder pakker for udførsel af matematiske og videnskabelige beregninger og diagramtegning sÃ¥vel som enhedskonvertering. + Diese Gruppe enthält Pakete für mathematische und wissenschaftliche Berechnungen und Plotting sowie die Konversion von Einheiten. + El grupo incluye paquetes para ejecutar cálculos matemáticos y científicos y trazados, así como la conversión de la unidad. + Ce groupe comprend les paquetages pour exécuter des calculs mathématiques et scientifiques, le traçage et la conversion des unités. + Þ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. + Questo gruppo include i pacchetti per l'esecuzione e il plotting di operazioni matematiche e scientifiche, nonché la conversione di unità. + ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã«ã¯ã€ãƒ¦ãƒ‹ãƒƒãƒˆå¤‰æ›ã¨å…±ã«ã€æ•°å­¦çš„åŠã³ç§‘学的ãªæ¼”ç®—ã¨ãƒ—ロッティングを 実践ã™ã‚‹ç‚ºã®ãƒ‘ッケージãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚ + ì´ ê·¸ë£¹ì€ ë‹¨ìœ„ 변환 ê¸°ëŠ¥ì„ ë¹„ë¡¯í•˜ì—¬ 수학 계산과 과학 ê³„ì‚°ì„ ìˆ˜í–‰í•˜ê³  출력하는 패키지를 í¬í•¨í•©ë‹ˆë‹¤. + Denne gruppen inneholder pakker for Ã¥ utføre matematiske og vitenskapelige beregninger/visualiseringer samt enhetskonverteringer. + Este grupo inclui os pacotes para efecutar cálculos matemáticos e científicos, apresentá-los e efectuar a conversão de unidades. + Эта группа Ñодержит Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¼Ð°Ñ‚ÐµÐ¼Ð°Ñ‚Ð¸Ñ‡ÐµÑких и прочих научных вычиÑлений и преобразований. + Denna grupp inkluderar paket för utförande av matematiska och vetenskapliga beräkningar och diagramritning sÃ¥väl som enhetskonvertering. + 这组软件包包括用æ¥æ‰§è¡Œæ•°å­¦å’Œç§‘学计算ã€ç»˜å›¾ã€ä»¥åŠè®¡é‡å•ä½è½¬æ¢çš„软件包。 + 這個群組包括的套件å¯ç”¨ä¾†åŸ·è¡Œæ•¸å­¸èˆ‡ç§‘學的計算與繪圖,以åŠå–®ä½çš„æ›ç®—。 + true + + base + + + blas + gnuplot + lam + lapack + octave + pvm + units + + + + + + editors + Editors + Editory + Tekstredigering + Editoren + Editores + Editeurs + Ritlar + Editor + エディタ + 편집기 + Editorer + Editores + Редакторы + Textredigerare + 编辑器 + 編輯器 + Sometimes called text editors, these are programs that allow you to create and edit files. These include Emacs and Vi. + NÄ›kdy oznaÄované jako textové editory, tyto programy Vám umožní vytvářet a upravovat soubory. Tato skupina zahrnuje Emacs a Vi. + Dette er programmer som lader dig skabe og redigere filer, og de kaldes ofte for tekstredigerere. Disse inkluderer Emacs og Vi. + Diese auch Text-Editoren genannten Programme ermöglichen das Anlegen und Bearbeiten von Dateien. Dazu gehören Emacs und Vi. + Existen programas que permiten crear y modificar ficheros, a veces llamados editores de texto. Estos incluyen Emacs y Vi. + Parfois appelés éditeurs de texte, ces programmes vous permettent de créer et d'éditer des fichiers. Ils comprennent Emacs et Vi. + 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. + Talvolta definiti editor di testo, questi programmi consentono di creare emodificare i file. Sono inclusi Emacs e Vi. + 時ã«ã¯ãƒ†ã‚­ã‚¹ãƒˆã‚¨ãƒ‡ã‚£ã‚¿ã¨å‘¼ã°ã‚Œã‚‹ãƒ•ã‚¡ã‚¤ãƒ«ã‚’作æˆã¨ç·¨é›†ã§ãるプログラム㌠ã‚ã‚Šã¾ã™ã€‚ã“れらã«ã¯Emacs 㨠ViãŒå«ã¾ã‚Œã¾ã™ã€‚ + ê°€ë”씩 í…스트 편집기ë¼ê³ ë„ 불리우는 ì´ í”„ë¡œê·¸ëž¨ì€ íŒŒì¼ì„ ìƒì„±í•˜ê³  íŽ¸ì§‘í•˜ëŠ”ë° ì‚¬ìš©ë©ë‹ˆë‹¤. ì´ëŸ¬í•œ 프로그램ì—는 Emacs와 Viê°€ í¬í•¨ë©ë‹ˆë‹¤. + Disse programmene, ofte kalt teksteditorer, lar deg lage og redigere filer. Emacs og Vi er inkludert her. + Normalmente chamados editores de texto, estes programas permite-lhe criar e editar ficheiros. Inclui o Emacs e o Vi. + Эти программы, иногда называемые текÑтовыми редакторами, позволÑÑŽÑ‚ редактировать текÑÑ‚Ñ‹. Включают Emacs and Vi. + Detta är program som lÃ¥ter dig skapa och redigera filer, och kallas ofta textredigerare. Dessa inkluderar Emacs och Vi. + 有时å«åšæ–‡æœ¬ç¼–辑器。它们是å…许您创建和编辑文件的程åºã€‚包括 Emacs å’Œ Vi。 + 這些是讓您å¯ä»¥å»ºç«‹èˆ‡ç·¨è¼¯æª”案的程å¼ï¼Œæœ‰æ™‚候稱為文字編輯器。 這些包括了 Emacs 與 Vi。 + true + + base + emacs + xemacs + + + vim-enhanced + + + + + + emacs + Emacs + Emacs + Emacs + Emacs + Emacs + Emacs + Emacs + Emacs + Emacs + Emacs + Emacs + Emacs + Emacs + Emacs + Emacs + Emacs + The GNU Emacs text editor. + Textový editor GNU Emacs. + Tekstredigereren GNU Emacs. + Der Text-Editor GNU Emacs. + Editor de textos Emacs de GNU. + Editeur de texte GNU Emacs. + GNU Emacs ritillinn. + Editor di testo GNU Emacs. + GNU Emacsテキストエディタ + GNU Emacs í…스트 편집기. + Teksteditoren GNU Emacs. + O editor de texto GNU Emacs. + ТекÑтовый редактор GNU Emacs. + Textredigeraren GNU Emacs. + GNU Emacs 文本编辑器 + GNU Emacs 文字編輯器。 + false + + base + + + emacs + emacs-leim + psgml + + + + + xemacs + XEmacs + XEmacs + XEmacs + XEmacs + XEmacs + XEmacs + XEmacs + XEmacs + XEmacs + XEmacs + XEmacs + XEmacs + XEmacs + XEmacs + XEmacs + XEmacs + The XEmacs text editor. + Textový editor XEmacs. + Tekstredigereren XEmacs. + Der Text-Editor XEmacs. + Editor de textos de XEmacs. + Editeur de texte XEmacs. + XEmacs ritillinn. + Editor di testo XEmacs. + XEmacsテキストエディタ + XEmacs í…스트 편집기. + Teksteditoren XEmacs. + O editor de texto XEmacs. + ТекÑтовый редактор XEmacs + Textredigeraren XEmacs. + XEmacs 文本编辑器 + XEmacs 文字編輯器。 + false + + base + + + xemacs + xemacs-el + xemacs-info + + + + + system-tools + System Tools + Systémové nástroje + Systemværktøjer + Systemtools + Herramientas del sistema + Outils de système + Kerfistól + Tool di sistema + システムツール〠+ 시스템 ë„구 + Systemverktøy + Ferramentas do Sistema + СиÑтемные ÑредÑтва + Systemverktyg + 系统工具 + 系統工具 + 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. + 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. + 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. + 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. + 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. + Ce groupe est un ensemble de différents outils pour le système, ainsi qu'un client pour la connexion aux parts SMB et d'outils permettant de gérer le trafic dans le réseau. + Þ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. + 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. + ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã¯ã€SMB共有ã¸æŽ¥ç¶šã™ã‚‹ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚„ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯é€šä¿¡é‡ã‚’モニタã™ã‚‹ ツールãªã©ã®ã‚·ã‚¹ãƒ†ãƒ ç”¨ã®å„種ツールã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã§ã™ã€‚ + ì´ ê·¸ë£¹ì€ SMB ê³µìœ ì— ì ‘ì†í•˜ëŠ”ë° ì‚¬ìš©ë˜ëŠ” í´ë¼ì´ì–¸íŠ¸ì™€ ë„¤íŠ¸ì›Œí¬ ì†Œí†µëŸ‰ì„ ê°ì‹œí•˜ëŠ” ë„구와 ê°™ì€ ë‹¤ì–‘í•œ 시스템 ë„구 모ìŒìž…니다. + Denne gruppen er en samling av ulike systemverktøy, som oppkobling mot SMB-ressurser og nettverksovervÃ¥kning. + 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. + Эта группа Ñодержит различные ÑиÑтемные утилиты: например, Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð´Ð¾Ñтупа к SMB Ñерверам, и программы Ð´Ð»Ñ Ð¼Ð¾Ð½Ð¸Ñ‚Ð¾Ñ€Ð¸Ð½Ð³Ð° Ñетевого траффика. + 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. + 这组软件包是å„类系统工具的集åˆï¼Œè­¬å¦‚:连接 SMB 共享的客户;监控网络交通的工具。 + 這個群組是系統上許多種工具的收集,例如用來連線到 SMB 共享的用戶端, 以åŠç”¨ä¾†ç›£è¦–網路æµé‡çš„工具。 + true + + amanda-client + ethereal + ethereal-gnome + gnome-lokkit + nmap + nmap-frontend + rdesktop + samba-client + shapecfg + vnc + xdelta + mc + screen + + + + + admin-tools + Administration Tools + Nástroje pro administraci + Administrationsværktøjer + Verwaltungstools + Herramientas de administración + Outils d'administration + Kerfisstjórnunartól + Strumenti amministrativi + 管ç†ãƒ„ール + 관리 ë„구 + Administrasjonsverktøy + Ferramentas de Administração + СредÑтва админиÑÑ‚Ñ€Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ + Administrationsverktyg + 管ç†å·¥å…· + 管ç†å·¥å…· + This group is a collection of graphical administration tools for the system, such as for managing user accounts and configuring system hardware. + Tato skupina je soubor grafických nástrojů administrace, napÅ™. pro správu uživatelských úÄtů a nastavení hardware poÄítaÄe. + Denne gruppe er en samling grafiske administrationsværktøjer for systemet, som fx behandling af brugerkonti og konfiguration af systemudstyr. + 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. + 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. + Ce groupe est un ensemble d'outils d'administration graphique pour le système, ainsi que pour la gestion des comptes utilisateurs et la configuration du matériel système. + Þ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ð. + Questo gruppo è una raccolta di tool per la gestione della grafica del sistema, che consente di gestire gli account utente e di configurare l'hardware di sistema. + ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã¯ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’管ç†ã—ãŸã‚Šã€ã‚·ã‚¹ãƒ†ãƒ ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã‚’設定ã—ãŸã‚Šã™ã‚‹ システムã®ç‚ºã®ã‚°ãƒ©ãƒ•ã‚£ã‚«ãƒ«ç®¡ç†ãƒ„ールã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã§ã™ã€‚ + ì´ ê·¸ë£¹ì€ ì‚¬ìš©ìž ê³„ì •ì„ ê´€ë¦¬í•˜ê³  시스템 하드웨어를 설정하는 그래픽 시스템 관리 ë„구 모ìŒìž…니다. + Denne gruppen er en samling av grafiske administrasjonsverktøy for systemet, inkludert brukeradministrasjon og hardwarekonfigurering. + 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 'hardware' do sistema. + Эта группа Ñодержит графичеÑкие Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð½Ð°Ñтройки ÑиÑтемы. С помощью Ñтих приложений можно добавить новых пользователей, наÑтроить звук, разрешение Ñкрана, и проч. + Denna grupp är en samling grafiska administrationsverktyg för systemet, som exempelvis hantering av användarkonton och konfiguration av systemhÃ¥rdvara. + 这组软件包包括一个系统图形化管ç†å·¥å…·çš„集åˆï¼Œè­¬å¦‚:管ç†ç”¨æˆ·å¸å·å’Œé…置系统硬件。 + 這個群組是系統中圖形管ç†å·¥å…·çš„收集,例如用來管ç†ä½¿ç”¨è€…帳號與 設定系統硬體。 + true + + authconfig-gtk + redhat-config-date + redhat-config-keyboard + redhat-config-kickstart + redhat-config-language + redhat-config-mouse + redhat-config-rootpassword + redhat-config-soundcard + redhat-config-users + redhat-config-packages + redhat-config-proc + redhat-logviewer + + + + + games + Games and Entertainment + Hry a zábava + Spil og underholdning + Spiele und Zeitvertreib + Juegos y entretenimiento + Jeux et Divertissements + Leikir og skemmtun + Giochi e divertimento + ゲームã¨å¨¯æ¥½ + 게임과 ì˜¤ë½ + Spill og underholdning + Jogos e Entretenimento + Игры и Ñ€Ð°Ð·Ð²Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ + Spel och underhÃ¥llning + 游æˆå’Œå¨±ä¹ + éŠæˆ²èˆ‡å¨›æ¨‚ + Various ways to relax and spend your free time. + Různé způsoby, jak relaxovat a trávit volný Äas. + Diverse mÃ¥der at slappe af og bruge fritiden. + Verschiedene Möglichkeiten zur Entspannung und zum Zeitvertreib. + Maneras de relajarse y pasar el tiempo libre. + Différentes manières de vous relaxer et de passer le temps. + Ãmslegt til að slappa af yfir og eyða lausum tíma. + Vari modi per rilassarsi e passare il tempo libero. + リラックスã—ã¦æš‡ãªæ™‚é–“ã‚’éŽã”ã™ã„ã‚ã„ã‚ãªæ–¹æ³• + 휴ì‹ì„ 취하면서 여가 ì‹œê°„ì„ ë³´ë‚¼ 수 있는 다양한 방법. + Forskjellige mÃ¥ter Ã¥ slappe av og fordrive fritiden. + Várias maneiras de relaxar e passar o seu tempo livre. + Различные ÑпоÑобы раÑÑлабитьÑÑ Ð¸ провеÑти Ñвободное времÑ. + Diverse sätt att slappna av och fördriva ledig tid. + 放æ¾å’Œæ‰“å‘时间的途径。 + 許多種讓您放鬆以åŠæ¶ˆç£¨æ™‚間的方法。 + true + + base + + + fortune-mod + joystick + Maelstrom + chromium + freeciv + tuxracer + xboard + gnome-games + kdegames + + + + + ISO8859-2-support + ISO8859-2 Support + Podpora pro ISO8859-2 + Understøttelse for ISO8-859-2 + ISO8859-2 Support + Soporte ISO8859-2 + Support ISO8859-2 + ISO8859-2 stuðningur + Supporto ISO8859-2 + ISO8859-2 サãƒãƒ¼ãƒˆ + ISO8859-2 ì§€ì› + Støtte for ISO8859-2 + Suporte a ISO8859-2 + Поддержка ISO8859-2 + Stöd för ISO8859-2 + ISO8859-2 æ”¯æŒ + ISO8859-2 æ”¯æ´ + false + + fonts-ISO8859-2 + fonts-ISO8859-2-75dpi + fonts-ISO8859-2-100dpi + + + + + ISO8859-9-support + ISO8859-9 Support + Podpora pro ISO8859-9 + Understøttelse for ISO-8859-9 + ISO8859-9 Support + Soporte ISO8859-9 + Support ISO8859-9 + ISO8859-9 stuðningur + Supporto ISO8859-9 + ISO8859-9 サãƒãƒ¼ãƒˆ + ISO8859-9 ì§€ì› + Støtte for ISO8859-9 + Suporte a ISO8859-9 + Поддержка ISO8859-9 + Stöd för ISO8859-9 + ISO8859-9 æ”¯æŒ + ISO8859-9 æ”¯æ´ + false + + XFree86-ISO8859-9-75dpi-fonts + XFree86-ISO8859-9-100dpi-fonts + + + + + cyrillic-support + false + Cyrillic Support + Podpora pro azbuku + Understøttelse for kyrillisk alfabet + Support für Kyrillisch + Soporte para el cirílico + Support cyrillique + Kýrílíska + Supporto per il cirillico + シリル語ã®ã‚µãƒãƒ¼ãƒˆ + 키릴 ë¬¸ìž ì§€ì› + Støtte for kyrillisk + Suporte a Cirilico + Поддержка кириллицы + Stöd för kyrilliskt alfabet + è¥¿é‡Œå°”è¯­æ”¯æŒ + æ–¯æ‹‰å¤«èªžæ”¯æ´ + + XFree86-cyrillic-fonts + fonts-KOI8-R + fonts-KOI8-R-100dpi + + + + + british-support + false + British Support + Podpora pro angliÄtinu (Velká Británie) + Understøttelse for britisk engelsk + Support für Englisch (Großbritannien) + Soporte para el inglés británico + Support anglais + Breska + Supporto per l'inglese britannico + 英国語ã®ã‚µãƒãƒ¼ãƒˆ + ì˜êµ­ì‹ ì˜ì–´ ì§€ì› + Støtte for britisk + Suporte a Inglês Britânico + Поддержка британÑкого английÑкого + Stöd för brittisk engelska + 英å¼è‹±è¯­æ”¯æŒ + 英å¼è‹±æ–‡æ”¯æ´ + en_GB + + aspell-en-gb + kde-i18n-British + + + + + canadian-support + false + Canadian Support + Podpora pro angliÄtinu (Kanada) + Understøttelse for canadisk engelsk + Support für Englisch (Kanada) + Soporte para el francés de Canadá + Support canadien + Canadíska + Supporto per il canadese + カナダ英語ã®ã‚µãƒãƒ¼ãƒˆ + ìºë‚˜ë‹¤ì‹ ì˜ì–´ ì§€ì› + Støtte for kanadisk + Suporte a Canadiano + Поддержка канадÑкого английÑкого + Stöd för kanadensisk engelska + 加拿大å¼è‹±è¯­æ”¯æŒ + åŠ æ‹¿å¤§è‹±æ–‡æ”¯æ´ + en_CA + + aspell-en-ca + + + + + catalan-support + false + Catalan Support + Podpora pro katalánÅ¡tinu + Understøttelse for katalansk + Support für Spanisch (Katalanien) + Soporte para el catalán + Support catalan + Catalónska + Supporto per il catalano + カタルーニャ語ã®ã‚µãƒãƒ¼ãƒˆ + 카탈로니아어 ì§€ì› + Støtte for katalansk + Suporte a Catalão + Поддержка каталонÑкого Ñзыка + Stöd för katalanska + åŠ æ³°éš†è¯­æ”¯æŒ + åŠ æ³°éš†èªžæ”¯æ´ + ca + + aspell-ca + kde-i18n-Catalan + + + + + brazilian-support + false + Brazilian Support + Podpora pro portugalÅ¡tinu (Brazílie) + Understøttelse for brasiliansk portugisisk + Support für Portugiesisch (Brasilien) + Soporte para el brasileño + Support brésilien + Brasílíska + Supporto per il brasiliano + ブラジル語ã®ã‚µãƒãƒ¼ãƒˆ + 브ë¼ì§ˆì–´ ì§€ì› + Støtte for portugisisk(Brasil) + Suporte a Português do Brasil + Поддержка бразильÑкого Ñзыка + Stöd för brasiliansk portugisiska + å·´è¥¿è¯­æ”¯æŒ + 巴西å¼è‘¡è„ç‰™èªžæ”¯æ´ + pt_BR + + portuguese-support + + + aspell-pt_BR + kde-i18n-Brazil + + + + + czech-support + false + Czech Support + Podpora pro ÄeÅ¡tinu + Understøttelse for tjekkisk + Support für Tschechisch + Soporte para el checo + Support tchèque + Tjékkneska + Supporto per il ceco + ãƒã‚§ã‚³èªžã®ã‚µãƒãƒ¼ãƒˆ + 체코어 ì§€ì› + Støtte for tsjekkisk + Suporte a Checo + Поддержка чешÑкого Ñзыка + Stöd för tjeckiska + æ·å…‹è¯­æ”¯æŒ + æ·å…‹èªžæ”¯æ´ + cz + + ISO8859-2-support + + + kde-i18n-Czech + man-pages-cs + + + + + danish-support + false + Danish Support + Podpora pro dánÅ¡tinu + Understøttelse for dansk + Support für Dänisch + Soporte para el danés + Support danois + Danska + Supporto per il danese + デンマーク語ã®ã‚µãƒãƒ¼ãƒˆ + ë´ë§ˆí¬ì–´ ì§€ì› + Støtte for dansk + Suporte a Dinamarquês + Поддержка датÑкого Ñзыка + Stöd för danska + ä¸¹éº¦è¯­æ”¯æŒ + ä¸¹éº¥èªžæ”¯æ´ + da_DK + + aspell-da + kde-i18n-Danish + man-pages-da + + + + + dutch-support + false + Dutch Support + Podpora holandÅ¡tiny + Understøttelse for hollandsk + Support für Holländisch + Soporte para el holandés + Support hollandais + Hollenska + Supporto per l'olandese + オランダ語ã®ã‚µãƒãƒ¼ãƒˆ + 네ë¸ëž€ë“œì–´ ì§€ì› + Støtte for nederlandsk + Suporte a Holandês + Поддержка датÑкого Ñзыка + Stöd för nederländska + è·å…°è¯­æ”¯æŒ + è·è˜­èªžæ”¯æ´ + nl + + aspell-nl + kde-i18n-Dutch + + + + + estonian-support + false + Estonian Support + Podpora pro estonÅ¡tinu + Understøttelse for estisk + Support für Estonisch + Soporte para el estonio + Support estonien + Eistneska + Supporto per l'estone + エストニア語ã®ã‚µãƒãƒ¼ãƒˆ + ì—스토니아어 ì§€ì› + Støtte for estlandsk + Suporte a Estónio + Поддержка ÑÑтонÑкого Ñзыка + Stöd för estniska + çˆ±æ²™å°¼äºšè¯­æ”¯æŒ + æ„›æ²™å°¼äºžèªžæ”¯æ´ + et_EE + + ISO8859-2-support + + + kde-i18n-Estonian + + + + + finish-support + false + Finnish Support + Podpora pro finÅ¡tinu + Understøttelse for finsk + Support für Finnisch + Finalizar el soporte + Support finnois + Finnska + Supporto per il finlandese + フィンランド語ã®ã‚µãƒãƒ¼ãƒˆ + 핀란드어 ì§€ì› + Støtte for finsk + Suporte a Finlandês + Поддержка финÑкого Ñзыка + Stöd för finska + èŠ¬å…°è¯­æ”¯æŒ + èŠ¬è˜­èªžæ”¯æ´ + fi_FI + + kde-i18n-Finnish + + + + + german-support + false + German Support + Podpora pro nÄ›mÄinu + Understøttelse for tysk + Support für Deutsch + Soporte para el alemán + Support allemand + Þýska + Supporto per il tedesco + ドイツ語ã®ã‚µãƒãƒ¼ãƒˆ + ë…ì¼ì–´ ì§€ì› + Støtte for tysk + Suporte a Alemão + Поддержка немецкого Ñзыка + Stöd för tyska + å¾·è¯­æ”¯æŒ + å¾·èªžæ”¯æ´ + de_DE + + aspell-de + kde-i18n-German + man-pages-de + + + + + greek-support + false + Greek Support + Podpora pro Å™eÄtinu + Understøttelse for græsk + Support für Griechisch + Soporte para el griego + Support grec + Gríska + Supporto per il greco + ギリシャ語ã®ã‚µãƒãƒ¼ãƒˆ + 그리스어 ì§€ì› + Støtte for gresk + Suporte a Grego + Поддержка гречеÑкого Ñзыка + Stöd för grekiska + å¸Œè…Šè¯­æ”¯æŒ + å¸Œè‡˜èªžæ”¯æ´ + el_GR + + kde-i18n-Greek + + + + + hebrew-support + false + Hebrew Support + Podpora pro hebrejÅ¡tinu + Understøttelse for hebraisk + Support für Hebräisch + Soporte para el hebreo + Support hébreu + Hebreska + Supporto per l'ebraico + ヘブライ語ã®ã‚µãƒãƒ¼ãƒˆ + 헤브루어 ì§€ì› + Støtte for hebraisk + Suporte a Hebreu + Поддержка Ñзыка иврит + Stöd för hebreiska + 希伯æ¥è¯­æ”¯æŒ + å¸Œä¼¯ä¾†èªžæ”¯æ´ + he_IL + + kde-i18n-Hebrew + + + + + hungarian-support + false + Hungarian Support + Podpora pro maÄarÅ¡tinu + Understøttelse for ungarnsk + Support für Ungarisch + Soporte para el húngaro + Support hongrois + Ungverska + Supporto per l'ungherese + ãƒãƒ³ã‚¬ãƒªãƒ¼èªžã®ã‚µãƒãƒ¼ãƒˆ + í—가리아어 ì§€ì› + Støtte for ungarsk + Suporte a Hungaro + Поддержка венгерÑкого Ñзыка + Stöd för ungerska + åŒˆç‰™åˆ©è¯­æ”¯æŒ + åŒˆç‰™åˆ©èªžæ”¯æ´ + hu_HU + + ISO8859-2-support + + + kde-i18n-Hungarian + + + + + spanish-support + false + Spanish Support + Podpora pro Å¡panÄ›lÅ¡tinu + Understøttelse for spansk + Support für Spanisch + Soporte para el español + Support espagnol + Spánska + Supporto per lo spagnolo + スペイン語ã®ã‚µãƒãƒ¼ãƒˆ + 스페ì¸ì–´ ì§€ì› + Støtte for spansk + Suporte a Espanhol + Поддержка иÑпанÑкого Ñзыка + Stöd för spanska + 西ç­ç‰™è¯­æ”¯æŒ + 西ç­ç‰™èªžæ”¯æ´ + es_ES + + aspell-es + kde-i18n-Spanish + man-pages-es + + + + + french-support + false + French Support + Podpora pro francouzÅ¡tinu + Understøttelse for fransk + Support für Französisch + Soporte para el francés + Support français + Franska + Supporto per il francese + フランス語ã®ã‚µãƒãƒ¼ãƒˆ + 프랑스어 ì§€ì› + Støtte for fransk + Suporte a Francês + Поддержка французÑкого Ñзыка + Stöd för franska + æ³•è¯­æ”¯æŒ + æ³•èªžæ”¯æ´ + fr_FR + + aspell-fr + kde-i18n-French + man-pages-fr + + + + + icelandic-support + false + Icelandic Support + Podpora pro islandÅ¡tinu + Understøttelse for islandsk + Support für Isländisch + Soporte para el islandés + Support islandais + Ãslenska + Supporto per l'islandese + アイスランド語ã®ã‚µãƒãƒ¼ãƒˆ + ì•„ì´ìŠ¬ëž€ë“œì–´ ì§€ì› + Støtte for islandsk + Suporte a Islandês + Поддержка иÑландÑкого Ñзыка + Stöd för isländska + å†°å²›è¯­æ”¯æŒ + å†°å³¶èªžæ”¯æ´ + is_IS + + kde-i18n-Icelandic + + + + + italian-support + false + Italian Support + Podpora pro italÅ¡tinu + Understøttelse for italiensk + Support für Italienisch + Soporte para el italiano + Support italien + Ãtalska + Supporto per l'italiano + イタリア語ã®ã‚µãƒãƒ¼ãƒˆ + ì´íƒˆë¦¬ì•„ì–´ ì§€ì› + Støtte for italiensk + Suporte a Italiano + Поддержка итальÑнÑкого Ñзыка + Stöd för italienska + æ„å¤§åˆ©è¯­æ”¯æŒ + ç¾©å¤§åˆ©æ–‡æ”¯æ´ + it_IT + + aspell-it + kde-i18n-Italian + man-pages-it + + + + + korean-support + false + Korean Support + Podpora pro korejÅ¡tinu + Understøttelse for koreansk + Support für Koreanisch + Soporte para el coreano + Support coréen + Kóreska + Supporto per il coreano + 韓国語ã®ã‚µãƒãƒ¼ãƒˆ + 한국어 ì§€ì› + Støtte for koreansk + Suporte a Coreano + Поддержка корейÑкого Ñзыка + Stöd för koreanska + éŸ©æ–‡æ”¯æŒ + éŸ“æ–‡æ”¯æ´ + ko_KR + + nvi-m17n + kde-i18n-Korean + man-pages-ko + kWnn-devel + ami + kWnn + hanterm-xf + h2ps + nhpf + ttfonts-ko + + + + + norwegian-support + false + Norwegian Support + Podpora pro norÅ¡tinu + Understøttelse for norsk + Support für Norwegisch + Soporte para el noruego + Support norvégien + Norska + Supporto per il norvegese + ノルウェー語ã®ã‚µãƒãƒ¼ãƒˆ + 노르웨ì´ì–´ ì§€ì› + Støtte for norsk + Suporte a Norueguês + Поддержка норвежÑкого Ñзыка + Stöd för norska + 挪å¨æ”¯æŒ + 挪å¨èªžæ”¯æ´ + no_NO + + aspell-no + kde-i18n-Norwegian + kde-i18n-Norwegian-Nynorsk + + + + + polish-support + false + Polish Support + Podpora pro polÅ¡tinu + Understøttelse for polsk + Support für Polnisch + Soporte para el polaco + Support polonais + Pólska + Supporto per il polacco + ãƒãƒ¼ãƒ©ãƒ³ãƒ‰èªžã®ã‚µãƒãƒ¼ãƒˆ + í´ëž€ë“œì–´ ì§€ì› + Støtte for polsk + Suporte a Polaco + Поддержка польÑкого Ñзыка + Stöd för polska + æ³¢å…°è¯­æ”¯æŒ + æ³¢è˜­èªžæ”¯æ´ + pl_PL + + ISO8859-2-support + + + kde-i18n-Polish + man-pages-pl + + + + + portuguese-support + false + Portuguese Support + Podpora pro portugalÅ¡tinu + Understøttelse for portugisisk + Support für Portugiesisch + Soporte para el portugués + Support portugais + Portúgalska + Supporto per il portoghese + ãƒãƒ«ãƒˆã‚¬ãƒ«èªžã®ã‚µãƒãƒ¼ãƒˆ + í¬ë¥´íˆ¬ê°ˆì–´ ì§€ì› + Støtte for portugisisk + Suporte a Português + Поддержка португальÑкого Ñзыка + Stöd för portugisiska + è‘¡è„ç‰™è¯­æ”¯æŒ + è‘¡è„ç‰™èªžæ”¯æ´ + pt + + aspell-pt + kde-i18n-Portuguese + + + + + romanian-support + false + Romanian Support + Podpora pro rumunÅ¡tinu + Understøttelse for rumænsk + Support für Rumänisch + Soporte para el rumano + Support roumain + Rómanska + Supporto per il romeno + ルーマニア語ã®ã‚µãƒãƒ¼ãƒˆ + 루마니아어 ì§€ì› + Støtte for rumensk + Suporte a Romeno + Поддержка румынÑкого Ñзыка + Stöd för rumänska + ç½—é©¬å°¼äºšè¯­æ”¯æŒ + ç¾…é¦¬å°¼äºžèªžæ”¯æ´ + ro_RO + + ISO8859-2-support + + + kde-i18n-Romanian + + + + + russian-support + false + Russian Support + Podpora pro ruÅ¡tinu + Understøttelse for russisk + Support für Russisch + Soporte para el ruso + Support russe + Rússnenska + Supporto per il russo + ロシア語ã®ã‚µãƒãƒ¼ãƒˆ + 러시아어 ì§€ì› + Støtte for russisk + Suporte a Russo + Поддержка руÑÑкого Ñзыка + Stöd för ryska + ä¿„è¯­æ”¯æŒ + ä¿„èªžæ”¯æ´ + ru_RU + + cyrillic-support + + + kde-i18n-Russian + man-pages-ru + + + + + serbian-support + false + Serbian Support + Podpora srbÅ¡tiny + Understøttelse for serbisk + Support für Serbisch + Soporte para el serbio + Support serbe + Serbneska + Supporto per il serbo + シベリア語ã®ã‚µãƒãƒ¼ãƒˆ + 세르비아어 ì§€ì› + Støtte for serbisk + Suporte a Sérvio + Поддержка ÑербÑкого Ñзыка + Stöd för serbiska + å¡žå°”ç»´äºšè¯­æ”¯æŒ + è³½çˆ¾ç¶­äºžèªžæ”¯æ´ + sr_YU + + ISO8859-2-support + + + kde-i18n-Serbian + + + + + slovak-support + false + Slovak Support + Podpora pro slovenÅ¡tinu + Understøttelse for slovakisk + Support für Slowakisch + Soporte para el eslovaco + Support slovaque + Slóvak + Supporto per lo slovacco + スロãƒã‚­ã‚¢èªžã®ã‚µãƒãƒ¼ãƒˆ + 슬로바키아어 ì§€ì› + Støtte for slovakisk + Suporte a Eslovaco + Поддержка Ñловацкого Ñзыка + Stöd för slovakiska + 斯洛ä¼å…‹è¯­æ”¯æŒ + 斯洛ä¼å…‹èªžæ”¯æ´ + sk_SK + + ISO8859-2-support + + + kde-i18n-Slovak + + + + + slovenian-support + false + Slovenian Support + Podpora pro slovinÅ¡tinu + Understøttelse for slovensk + Support für Slowenisch + Soporte para el eslovenio + Support slovène + Slóvnenska + Supporto per lo sloveno + スロベニア語ã®ã‚µãƒãƒ¼ãƒˆ + 슬로베ì´ì•„ì–´ ì§€ì› + Støtte for slovensk + Suporte a Eslovénio + Поддержка ÑловенÑкого Ñзыка + Stöd för slovenska + æ–¯æ´›æ–‡å°¼äºšè¯­æ”¯æŒ + æ–¯æ´›æ³•å°¼äºžèªžæ”¯æ´ + sl_SI + + ISO8859-2-support + + + kde-i18n-Slovenian + + + + + swedish-support + false + Swedish Support + Podpora pro Å¡védÅ¡tinu + Understøttelse for svensk + Support für Schwedisch + Soporte para el sueco + Support suédois + Sænska + Supporto per lo svedese + スウェデーン語ã®ã‚µãƒãƒ¼ãƒˆ + 스웨ë´ì–´ ì§€ì› + Støtte for svensk + Suporte a Sueco + Поддержка шведÑкого Ñзыка + Stöd för svenska + ç‘žå…¸è¯­æ”¯æŒ + ç‘žå…¸èªžæ”¯æ´ + sv_SE + + aspell-sv + kde-i18n-Swedish + + + + + turkish-support + false + Turkish Support + Podpora pro tureÄtinu + Understøttelse for tyrkisk + Support für Türkisch + Soporte para el turco + Support turc + Tyrkneska + Supporto per il turco + トルコ語ã®ã‚µãƒãƒ¼ãƒˆ + 터키어 ì§€ì› + Støtte for Tyrkisk + Suporte a Turco + Поддержка турецкого Ñзыка + Stöd för turkiska + åœŸè€³å…¶è¯­æ”¯æŒ + åœŸè€³å…¶èªžæ”¯æ´ + tr_TR + + ISO8859-9-support + + + kde-i18n-Turkish + + + + + ukrainian-support + false + Ukrainian Support + Podpora pro ukrajinÅ¡tinu + Understøttelse for ukrainsk + Support für Ukrainisch + Soporte para el ucraniano + Support ukrainien + Úkraínska + Supporto per l'ucraino + ウクライナ語ã®ã‚µãƒãƒ¼ãƒˆ + ìš°í¬ë¼ì´ë‚˜ì–´ ì§€ì› + Støtte for ukrainsk + Suporte a Ucraniano + Поддержка украинÑкого Ñзыка + Stöd för ukrainska + ä¹Œå…‹å…°è¯­æ”¯æŒ + çƒå…‹è˜­èªžæ”¯æ´ + uk_UA + + cyrillic-support + + + kde-i18n-Ukrainian + + + + + chinese-support + false + Chinese Support + Podpora pro ÄínÅ¡tinu + Understøttelse for kinesisk + Support für Chinesisch + Soporte para el chino + Support chinois + Kínverska + Supporto per il cinese + 中国語ã®ã‚µãƒãƒ¼ãƒˆ + 중국어 ì§€ì› + Støtte for kinesisk + Suporte a Chinês + Поддержка китайÑкого Ñзыка + Stöd för kinesiska + ä¸­æ–‡æ”¯æŒ + ä¸­æ–‡æ”¯æ´ + zh + + nvi-m17n + kde-i18n-Chinese + kde-i18n-Chinese-Big5 + man-pages-ko + cWnn-devel + libtabe-devel + cWnn + miniChinput + stardict + tWnn + ttfonts-zh_TW + ttfonts-zh_CN + taipeifonts + xcin + bg5ps + + + + + japanese-support + false + Japanese Support + Podpora pro japonÅ¡tinu + Understøttelse for japansk + Support für Japanisch + Soporte para el japonés + Support japonais + Japanska + Supporto per il giapponese + 日本語ã®ã‚µãƒãƒ¼ãƒˆ + ì¼ë³¸ì–´ ì§€ì› + Støtte for japansk + Suporte a Japonês + Поддержка ÑпонÑкого Ñзыка + Stöd för japanska + æ—¥è¯­æ”¯æŒ + æ—¥æ–‡æ”¯æ´ + ja_JP + + Canna + jcode.pl + kakasi-dict + kcc + kon2 + kon2-fonts + lv + nvi-m17n + nvi-m17n-canna + perl-NKF + perl-Text-Kakasi + nkf + ttfonts-ja + watanabe-vf + kde-i18n-Japanese + fonts-ja + jisksp14 + jisksp16-1990 + FreeWnn + kappa20 + kinput2-canna-wnn6 + knm_new + kterm + skkdic + skkinput + man-pages-ja + kakasi-devel + Wnn6-SDK-devel + namazu-devel + + + + + development-tools + Development Tools + Vývojové nástroje + Udviklingsværktøjer + Entwicklungstools + Herramientas de desarrollo + Outils de développement + Þróunartól + Strumenti di sviluppo + 開発ツール + 개발용 ë„구 + Utviklingsverktøy + Ferramentas de Desenvolvimento + СредÑтва разработки + Utvecklingsverktyg + å¼€å‘工具 + 開發工具 + These tools include core development tools such as automake, gcc, perl, python, and debuggers. + Tyto nástroje zahrnují základní vývojové nástroje jako automake, gcc, perl, python a ladící nástroje. + Disse værktøjer inkluderer basale udviklingsværktøjer som fx automake, gcc, perl, python og fejlsøgningsværktøjer. + Zu diesen Tools gehören grundlegende Entwicklungstools wie automake, gcc, perl, python und debuggers. + Estas herramientas incluyen herramientas de desarrollo de núcleo como por ejemplo automake, gcc, perl, python y depuradores. + Ces outils comprennent des outils de développement mémoire comme automake, gcc, perl, python, ainsi que des débogueurs. + Þessi tól eru meðal annars automake, gcc, perl, python og aflúsunartól. + Questi strumenti includono i principali tool di sviluppo tra cui automake, gcc, perl, python, e i debugger. + ã“れらã®ãƒ„ールã«ã¯ã€automake, gcc, perl, python, åŠã³ãƒ‡ãƒãƒƒã‚¬ãªã©ã®ã‚³ã‚¢é–‹ç™ºãƒ„ール㌠å«ã¾ã‚Œã¦ã„ã¾ã™ã€‚ + ì´ ë„구ì—는 automake, gcc, perl, pythonê³¼ 디버거와 ê°™ì€ í•µì‹¬ 개발용 ë„구가 í¬í•¨ë˜ì–´ 있습니다. + Disse verktøyene inkluderer utviklingsverktøy som automake, gcc, perl, python og avlusere. + Estas ferramentas incluem as ferramentas básicas de desenvolvimento como o automake, o gcc, o perl, o python e os depuradores. + Эти ÑредÑтва включают оÑновные ÑредÑтва разработки, такие как automake, gcc, perl, python и отладчики. + Dessa verktyg inkluderar kärnutvecklingsverktyg som exempelvis automake, gcc, perl, python och felsökningsverktyg. + 这些工具包括 automakeã€gccã€perlã€python 和调试器之类的核心开å‘工具。 + 這些工具包括主è¦çš„開發工具,例如 automake, gcc, perl, python ä»¥åŠ debuggers。 + true + + development-libs + + + ElectricFence + autoconf + automake14 + automake15 + automake + binutils + bison + byacc + cdecl + cproto + cvs + ddd + dev86 + diffstat + doxygen + dmalloc + expect + flex + gcc + gcc-c++ + gcc-g77 + gcc-gnat + gcc-java + gcc-objc + gdb + gettext + indent + libtool + ltrace + make + memprof + nasm + njamd + patchutils + perl-CPAN + pkgconfig + pmake + pstack + python-devel + rcs + rpm-build + redhat-rpm-config + splint + strace + texinfo + + + + + development-libs + Development Libraries + Knihovny pro vývoj + Udviklingsbiblioteker + Entwicklungsbibliotheken + Librerías de desarrollo + Bibliothèques de développement + Þróunaraðgerðasöfn + Librerie di sviluppo + 開発ライブラリ + 개발용 ë¼ì´ë¸ŒëŸ¬ë¦¬ + Utviklingsbibliotek + Bibliotecas de Desenvolvimento + Библиотеки Ð´Ð»Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ + Utvecklingsbibliotek + å¼€å‘库 + 開發函å¼åº« + The packages in this group are core libraries needed to develop applications. + BalíÄky v této skupinÄ› jsou základní knihovny potÅ™ebné pro vývoj aplikací. + Pakkerne i denne gruppe er basale biblioteker som behøves til udvikling af program. + Bei den Paketen dieser Gruppe handelt es sich um grundlegende Bibliotheken für die Entwicklung von Anwendungen. + Los paquetes de este grupo son librerías de núcleo necesarias para desarrollar aplicaciones. + Les paquetages de ce groupe sont des bibliothèques de mémoire nécessaires au développement d'applications. + Pakkarnir í þessum hóp eru grunnaðgerðasöfnin sem þarf til að þróa hugbúnað. + I pacchetti di questo gruppo sono le principali librerie di sviluppo delle applicazioni. + ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã®ãƒ‘ッケージã¯ã‚¢ãƒ—リケーションã®é–‹ç™ºã«å¿…è¦ãªã‚³ã‚¢ãƒ©ã‚¤ãƒ–ラリã§ã™ã€‚ + ì´ íŒ¨í‚¤ì§€ ê·¸ë£¹ì€ ì‘ìš© í”„ë¡œê·¸ëž¨ì„ ê°œë°œí•˜ëŠ”ë° í•„ìš”í•œ 핵심 ë¼ì´ë¸ŒëŸ¬ë¦¬ìž…니다. + Pakkene i denne gruppen er basis-biblioteker for bruk ved programutvikling. + Os pacotes neste grupo contém bibliotecas de base necessárias para desenvolver aplicações. + Эта группа Ñодержит библиотеки необходимые Ð´Ð»Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ приложений. + Paketen i denna grupp är kärnbibliotek som behövs för utveckling av program. + 该组中的软件包是开å‘应用程åºæ‰€éœ€çš„核心库。 + 這個群組中的套件是用來開發應用程å¼æ‰€éœ€çš„主è¦å‡½å¼åº«ã€‚ + false + + curl-devel + cyrus-sasl-devel + db4-devel + db4-utils + dialog + expat-devel + gdbm-devel + gmp-devel + gpm-devel + hesiod-devel + krb5-devel + krbafs-devel + kudzu-devel + libcap-devel + libtermcap-devel + libusb-devel + libuser-devel + libxml-devel + libxml2-devel + lockdev-devel + modutils-devel + ncurses-devel + newt-devel + openldap-devel + openssl-devel + pam-devel + pciutils-devel + readline-devel + rpm-devel + slang-devel + swig + zlib-devel + libogg-devel + libvorbis-devel + + + + + kernel-development + Kernel Development + Vývoj jádra + Kerneudvikling + Kernel-Entwicklung + Desarrollo del kernel + Développement du noyau + Kjarnaþróun + Sviluppo del kernel + カーãƒãƒ«é–‹ç™º + ì»¤ë„ ê°œë°œ + Kjerneutvikling + Desenvolvimento do Kernel + СредÑтва Ð´Ð»Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ Ñдра + Kärnutveckling + å†…æ ¸å¼€å‘ + 核心開發 + Install these packages to recompile the kernel. + Tyto balíÄky nainstalujte pro rekompilaci jádra. + Installér disse pakker for at oversætte om kernen. + Installieren Sie diese Pakete, wenn Sie selber den Kernel übersetzen möchten. + Settu þessa pakka inn ef þú vilt endurþýða kjarnann. + カーãƒãƒ«ã‚’å†ã‚³ãƒ³ãƒ‘イルã™ã‚‹ç‚ºã«ã“れらã®ãƒ‘ッケージをインストールã—ã¾ã™ã€‚ + 커ë„ì„ ìž¬ì»´íŒŒì¼í•˜ì‹œë ¤ë©´ ì´ íŒ¨í‚¤ì§€ë¥¼ 설치하십시오. + Installer disse pakkene for Ã¥ rekompilere kjernen. + Instale estes pacotes para recompilar o núcleo. + УÑтановите Ñти пакеты Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»Ñции Ñдра ÑиÑтемы. + Installera dessa paket för att kompilera om kärnan. + 安装这些软件包æ¥é‡æ–°ç¼–译内核。 + 請安è£é€™äº›å¥—件以é‡æ–°ç·¨è­¯æ ¸å¿ƒã€‚ + true + + development-tools + + + kernel-source + libattr-devel + libacl-devel + tk + + + + + legacy-software-development + Legacy Software Development + Podpora pro vývoj zdÄ›dÄ›ného software + Udvikling af ældre programmel + Legacy-Software Entwicklung + Desarrollo del software de legado + Développement du logiciel hérité + Þróunartól fyrir gömul forrit + Sviluppo del legacy software + レガシーソフトウェアーã®é–‹ç™º + 레거시 소프트웨어 개발 + Programvareutvikling for eldre systemer. + Desenvolvimento de Software Legado + СредÑтва Ð´Ð»Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ уÑтаревших приложений + Utveckling av äldre programvara + åŽŸæœ‰çš„è½¯ä»¶å¼€å‘ + 舊å¼è»Ÿé«”開發 + false + + compat-gcc + compat-gcc-c++ + compat-gcc-g77 + compat-libstdc++ + compat-libstdc++-devel + + + + + x-software-development + X Software Development + Vývoj software pro X + X-programmeludvikling + X Softwareentwicklung + Desarrollo del software X + Développement du logiciel X + Hugbúnaðarþróun fyrir X gluggakerfið + Sviluppo del software X + Xソフトウェア開発 + X 소프트웨어 개발 + Programvareutvikling for X + Desenvolvimento de Software para X + Разработка ПО Ð´Ð»Ñ X + X-programvaruutveckling + X è½¯ä»¶å¼€å‘ + X 軟體開發 + These packages allow you to develop applications for the X Window System. + Tyto balíÄky Vám umožní vyvíjet aplikace pro X Window System. + Disse pakker lader dig udvikle programmer for vinduessystemet X. + Mit diesen Paketen können Sie Anwendungen für das X Window System entwickeln. + Estos paquetes le permiten desarrollar aplicaciones para el sistema X Window. + Ces paquetages vous permettent de développer les applications pour le système X Window. + Þessir pakkar gera þér kleyft að þróa hugbúnað fyrir X gluggakerfið. + Questi pacchetti consentono di sviluppare applicazioni per il sistema X Window. + ã“れらã®ãƒ‘ッケージã§X Window System用ã®ã‚¢ãƒ—リケーションを開発ã§ãã¾ã™ã€‚ + ì´ íŒ¨í‚¤ì§€ëŠ” X 윈ë„ìš° 시스템ì—ì„œ ì‚¬ìš©ë  ì‘ìš© í”„ë¡œê·¸ëž¨ì„ ê°œë°œí•  수 있게 í•´ì¤ë‹ˆë‹¤. + Disse pakkene lar deg utvikle programmer for X. + Este pacotes permitem-lhe desenvolver aplicações para o X Window System. + Эти пакеты позволÑÑŽÑ‚ разрабатывать Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ X Window System. + Dessa paket lÃ¥ter dig utveckla program för fönstersystemet X. + 这些软件包å…许您开å‘用于 X 窗å£ç³»ç»Ÿçš„应用程åºã€‚ + 這些套件讓您å¯ä»¥ç‚º X 視窗系統開發應用程å¼ã€‚ + true + + Glide3-devel + XFree86-devel + Xaw3d-devel + gd-devel + lesstif-devel + libjpeg-devel + libtiff-devel + libpng-devel + libmng-devel + libungif-devel + freetype-devel + netpbm-devel + libpng10-devel + openmotif-devel + SDL-devel + SDL_image-devel + SDL_mixer-devel + SDL_net-devel + + + + + gnome-software-development + GNOME Software Development + Vývoj software pro GNOMOE + Gnome-programmeludvikling + GNOME Softwareentwicklung + Desarrollo de software de GNOME + Développement de logiciel GNOME + Hugbúnaðarþróun fyrir GNOME + Sviluppo del software di GNOME + GNOME ソフトウェア開発 + GNOME 소프트웨어 개발 + Programvareutvikling for GNOME + Desenvolvimento de Software GNOME + Разработка Ñ Ð¸Ñпользованием GNOME + GNOME-programvaruutveckling + GNOME è½¯ä»¶å¼€å‘ + GNOME 軟體開發 + Install these packages in order to develop GTK+ and GNOME graphical applications. + Tyto balíÄky nainstalujte pro vývoj grafických aplikací pro GTK+ a GNOME. + Installér disse pakker for at kunne udvikle grafiske programmer som bruger GTK+ og Gnome. + Installieren Sie diese Pakete, um Applikationen für GTK+ und GNOME zu entwickeln. + Instalar estos paquetes para desarrollar GTK+ y las aplicaciones gráficas de GNOME. + Installer ces paquetages pour développer les applications graphiques GTK+ et GNOME. + Settu þessa pakka inn ef þú vilt þróa GTK+ og GNOME forrit. + Installare questi pacchetti per sviluppare le applicazioni grafiche GTK+ e GNOME. + GTK+ 㨠GNOMEã®ã‚°ãƒ©ãƒ•ã‚£ã‚«ãƒ«ã‚¢ãƒ—リケーションを開発ã™ã‚‹ç‚ºã«ã¯ã“れら㮠パッケージをインストールã—ã¦ä¸‹ã•ã„。 + GTK+와 GNOME 그래픽 ì‘ìš© í”„ë¡œê·¸ëž¨ì„ ê°œë°œí•˜ì‹œë ¤ë©´ ì´ íŒ¨í‚¤ì§€ë¥¼ 설치하십시오. + Installer disse pakkene for utvikling av GTK+- og GNOME-programmer. + Instale estes pacotes se quiser desenvolver aplicações gráficas GTK+ ou GNOME. + УÑтановите Ñти пакеты Ð´Ð»Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ графичеÑких приложений GTK+ и GNOME. + Installera dessa paket för att kunna utveckla grafiska program som använder GTK+ och GNOME. + 安装这些软件包æ¥å¼€å‘ GTK+ å’Œ GNOME 图形化应用程åºã€‚ + 請安è£é€™äº›å¥—件,用來開發 GTK+ 與 GNOME 的圖形應用程å¼ã€‚ + true + + bug-buddy + pygtk2-devel + glib-devel + glib2-devel + gtk+-devel + GConf-devel + GConf2-devel + Guppi-devel + ORBit-devel + ORBit2-devel + atk-devel + bonobo-activation-devel + bonobo-conf-devel + bonobo-devel + eel2-devel + fontconfig-devel + gail-devel + gal-devel + gdk-pixbuf-devel + gnome-libs-devel + gnome-pilot-devel + gnome-print-devel + gnome-vfs-devel + gnome-vfs2-devel + gtkhtml-devel + gtk2-devel + imlib-devel + libIDL-devel + libart_lgpl-devel + libbonobo-devel + libbonoboui-devel + libglade-devel + libglade2-devel + libgnome-devel + libgnomecanvas-devel + libgnomeui-devel + libgtop-devel + libole2-devel + librsvg-devel + librsvg2-devel + libunicode-devel + libxslt-devel + linc-devel + oaf-devel + pango-devel + glade + glade2 + + + + + kde-software-development + KDE Software Development + Vývoj software pro GNOME + KDE-programmeludvikling + KDE Softwareentwicklung + Desarrollo de software para KDE + Développement de logiciel KDE + Hugbúnaðarþróun fyrir KDE + Sviluppo software KDE + KDEソフトウェア開発 + KDE 소프트웨어 개발 + Programvareutvikling for KDE + Desenvolvimento de Software KDE + СредÑтва Ð´Ð»Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ в KDE + KDE-programvaruutveckling + KDE è½¯ä»¶å¼€å‘ + KDE 軟體開發 + Install these packages to develop QT and KDE graphical applications. + Tyto balíÄky nainstalujte pro vývoj grafických aplikací pro QT a KDE. + Installér disse pakker for at udvikle grafiske programmer som bruger QT og KDE. + Installieren Sie diese Pakete, um Applikationen für QT und KDE zu entwickeln. + Instalar estos paquetes para desarrollar las aplicaciones gráficas QT y KDE. + Installer ces paquetages pour développer les applications graphiques QT et KDE. + Settu þessa pakka inn ef þú vilt þróa QT og KDE forrit + Installare questi pacchetti per sviluppare le applicazioni grafiche QT e KDE. + QTã¨KDEã®ã‚°ãƒ©ãƒ•ã‚£ã‚«ãƒ«ã‚¢ãƒ—リケーション開発ã«ã¯ã“れらã®ãƒ‘ッケージをインストールã—ã¾ã™ã€‚ + QT와 KDE 그래픽 ì‘ìš© í”„ë¡œê·¸ëž¨ì„ ê°œë°œí•˜ì‹œë ¤ë©´ ì´ íŒ¨í‚¤ì§€ë¥¼ 설치하십시오. + Installer disse pakkene for utvikling av QT og KDE-programmer. + Instale estes pacotes se quiser desenvolver aplicações gráficas QT ou KDE. + УÑтановите Ñти пакеты Ð´Ð»Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ приложений QT и KDE. + Installera dessa paket för att utveckla grafiska program för QT och KDE. + 安装这些软件包æ¥å¼€å‘ QT å’Œ KDE 图形化应用程åºã€‚ + 請安è£é€™äº›å¥—件,用來開發 QT 與 KDE 的圖形應用程å¼ã€‚ + true + + PyQt-devel + arts-devel + cdparanoia-devel + cervisia + cups-devel + kdbg + kdebase-devel + kdelibs-devel + kdenetwork-devel + kdesdk-kapptemplate + kdesdk-kbabel + kdesdk-kbugbuster + kdesdk-kmtrace + kdesdk-kompare + kdesdk-kspy + kdepim-devel + kdevelop + kdoc + kregexpeditor-devel + kviewshell-devel + libkscan-devel + pilot-link-devel + qt-designer + qt-devel + sane-backends-devel + sip-devel + libxslt-devel + + + + + + workstation-common + false + Workstation Common + SpoleÄné pro pracovní stanici + Fælles for arbejdsstation + Workstation Common + Zona común de la estación de trabajo + Poste de travail commun + Almennt fyrir vinnustöðvar + Workstation Common + ワークステーション共通 + ì›ìŠ¤í…Œì´ì…˜ 공통 + Arbeidsstasjon - felles + Estação de Trabalho Comum + Ð¢Ð¸Ð¿Ð¾Ð²Ð°Ñ Ð Ð°Ð±Ð¾Ñ‡Ð°Ñ Ð¡Ñ‚Ð°Ð½Ñ†Ð¸Ñ + Gemensamt för arbetsstation + 工作站通用 + å·¥ä½œç«™å…±åŒ + + base + base-x + admin-tools + editors + sound-and-video + dialup + office + graphical-internet + text-internet + printing + graphics + games + + + + + server + false + Server + Server + Server + Server + Servidor + Serveur + Þjónn + Server + サーム+ 서버 + Tjener + Servidor + Сервер + Server + æœåŠ¡å™¨ + 伺æœå™¨ + + base + printing + text-internet + dialup + web-server + smb-server + server-cfg + admin-tools + + + + + gnome + false + GNOME + GNOME + Gnome + GNOME + GNOME + GNOME + GNOME + GNOME + GNOME + GNOME + GNOME + GNOME + GNOME + GNOME + GNOME + GNOME + + gnome-desktop + + + + + kde + false + KDE + KDE + KDE + KDE + KDE + KDE + KDE + KDE + KDE + KDE + KDE + KDE + KDE + KDE + KDE + KDE + + kde-desktop + + + + + supported + false + Supported Packages + Podporované balíÄky + Pakker som understøttes + Unterstützte Pakete + Paquetes soportados + Paquetages pris en charge + Studdir pakkar + Pacchetti supportati + サãƒãƒ¼ãƒˆã•ã‚Œã‚‹ãƒ‘ッケージ + 지ì›í•˜ëŠ” 패키지 + Støttede pakker + Pacotes Suportados + Поддерживаемые пакеты + Paket som stöds + 支æŒçš„软件包 + 支æ´çš„套件 + + anaconda + anaconda-help + anaconda-images + anaconda-runtime + booty + + + + + + + Desktops + ProstÅ™edí pracovní plochy + Skriveborde + Skjáborð + デスクトップ + ë°ìŠ¤í¬íƒ‘ + Skrivebord + Ambiente de Trabalho + Оконные менеджеры + Skrivbord + æ¡Œé¢ + æ¡Œé¢ + + base-x + gnome-desktop + kde-desktop + + + + Applications + Aplikace + Programmer + Forrit + アプリケーション + ì‘ìš© 프로그램 + Programmer + Aplicações + ÐŸÑ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ + Program + åº”ç”¨ç¨‹åº + æ‡‰ç”¨ç¨‹å¼ + + editors + engineering-and-scientific + graphical-internet + text-internet + office + sound-and-video + authoring-and-publishing + graphics + games + + + + Servers + Servery + Servere + Server + Þjónar + サーム+ 서버 + Tjenere + Servidores + Серверы + Servrar + æœåŠ¡å™¨ + 伺æœå™¨ + + server-cfg + web-server + mail-server + smb-server + dns-server + ftp-server + sql-server + news-server + network-server + + + + Development + Vývoj + Udvikling + Softwareentwicklung + Þróun + 開発 + 개발용 ë„구 + Utviklingsverktøy + Desenvolvimento + Программирование + Utveckling + å¼€å‘ + 程å¼é–‹ç™¼ + + development-tools + kernel-development + x-software-development + gnome-software-development + kde-software-development + + + + System + Systém + System + Systemtools + Kerfi + システム + 시스템 + System + Sistema + СиÑтема + System + 系统 + 系統 + + admin-tools + system-tools + printing + + + + + + + busybox + + + + + libtool-libs + + glibc + + + + kpaint + + glibc + kdelibs + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + kde-i18n-Estonian + + + + + libpng10-devel + + libpng10 + zlib-devel + + + + tclx + + glibc + bash + tcl + tk + XFree86-libs + + + + gnomemeeting + + openh323 + pwlib + GConf2 + bash + libart_lgpl + atk + libbonobo + bonobo-activation + libbonoboui + openssl + glibc + esound + libgcc + gtk2 + glib2 + libgnome + libgnomecanvas + libgnomeui + gnome-vfs2 + XFree86-libs + openldap + linc + ORBit2 + pango + SDL + libstdc++ + libxml2 + zlib + + + + gtk+-devel + + gtk+ + glib-devel + XFree86-devel + info + bash + + + + gdbm + + glibc + + + + cdrecord-devel + + cdrecord + + + + wl-xemacs + + xemacs + wl-common + flim-xemacs + + + + lapack-man + + + + + perl-Compress-Zlib + + glibc + zlib + perl + + + + modutils-devel + + + + + gnuchess + + glibc + + + + gnome-audio + + + + + mikmod + + info + bash + glibc + ncurses + + + + ruby-tcltk + + ruby-libs + glibc + tcl + tk + XFree86-libs + + + + postgresql-libs + + glibc + krb5-libs + openssl + libgcc + libstdc++ + + + + tk + + glibc + bash + tcl + XFree86-libs + + + + Xbae + + glibc + XFree86-libs + openmotif + + + + bzip2-libs + + glibc + + + + cadaver + + openssl + glibc + ncurses + readline + libxml2 + zlib + + + + klpq + + LPRng + glibc + kdelibs + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + aspell-es + + aspell + + + + man-pages-es + + + + + fam + + portmap + xinetd + bash + glibc + libgcc + libstdc++ + + + + openh323 + + pwlib + glibc + openssl + expat + libgcc + libstdc++ + + + + ncftp + + glibc + ncurses + + + + basesystem + + setup + filesystem + + + + ttfonts-ko + + chkfontpath + XFree86-font-utils + fontconfig + bash + + + + rpm-build + + rpm + patch + file + bash + perl + bzip2-libs + glibc + libelf + popt + + + + mew-common + + info + bash + perl + glibc + zlib + + + + rhmask + + glibc + + + + libaio-devel + + libaio + + + + lisa + + glibc + kdelibs + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + gimp-perl + + gimp + perl + glibc + gtk+ + glib + XFree86-libs + Gtk-Perl + perl-PDL + + + + parted + + glibc + e2fsprogs + + + + zlib + + glibc + + + + dosfstools + + glibc + + + + xmms + + gtk+ + unzip + redhat-menus + redhat-artwork + glibc + glib + XFree86-Mesa-libGL + XFree86-libs + mikmod + libogg + libvorbis + libxml + zlib + + + + libtermcap + + termcap + glibc + + + + firstboot + + chkconfig + pygtk2 + python + usermode + metacity + rhpl + redhat-config-date + redhat-config-language + redhat-config-mouse + redhat-config-keyboard + redhat-config-soundcard + redhat-config-securitylevel + redhat-config-rootpassword + redhat-config-packages + up2date + redhat-logos + bash + + + + libxslt + + libxml2 + glibc + zlib + + + + XFree86-base-fonts + + chkfontpath + XFree86-font-utils + bash + + + + perl-DBD-Pg + + perl + perl-DBI + glibc + postgresql-libs + + + + sendmail + + chkconfig + shadow-utils + mktemp + fileutils + gawk + sed + sh-utils + procmail + bash + openssl + glibc + db4 + gdbm + hesiod + openldap + cyrus-sasl + + + + perl-Devel-Symdump + + perl + + + + openssl-devel + + openssl + + + + asp2php + + glibc + + + + kernel-pcmcia-cs + + kernel + chkconfig + kudzu + hotplug + bash + glibc + + + + libwnck-devel + + libwnck + glib2-devel + pango-devel + gtk2-devel + + + + pump-devel + + + + + ggv + + GConf2 + scrollkeeper + bash + libart_lgpl + atk + libbonobo + bonobo-activation + libbonoboui + glibc + gtk2 + glib2 + libgnome + libgnomecanvas + libgnomeui + gnome-vfs2 + XFree86-libs + linc + ORBit2 + pango + popt + libxml2 + zlib + + + + ncurses-devel + + ncurses + bash + perl + + + + redhat-config-printer + + alchemist + python + perl + PyXML + fileutils + initscripts + gzip + sed + LPRng + m4 + pnm2ppa + bzip2 + foomatic + ghostscript + newt + Omni-foomatic + mpage + usermode + rhpl + bash + glibc + + + + libao-devel + + libao + + + + mew + + emacs + mew-common + + + + xinetd + + chkconfig + initscripts + filesystem + setup + fileutils + bash + glibc + + + + knewsticker + + kdenetwork-libs + glibc + kdelibs + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + galeon + + glib + gtk+ + libxml + gnome-libs + GConf + ORBit + oaf + gnome-vfs + gdk-pixbuf + libglade + mozilla + perl + bash + + + + libxslt-devel + + libxslt + libxml2-devel + bash + + + + vim-X11 + + vim-common + libacl + glibc + gtk+ + glib + gpm + ncurses + perl + XFree86-libs + + + + symlinks + + glibc + + + + rpm2html + + glibc + gnome-libs + popt + rpm + libxml2 + zlib + + + + gtkam + + glibc + gtk+ + gdk-pixbuf + glib + gphoto2 + XFree86-libs + + + + sh-utils + + pam + bash + glibc + + + + XFree86-twm + + XFree86 + XFree86-libs + glibc + + + + alchemist + + libxml2 + libxslt + glibc + python + glib + zlib + + + + njamd + + glibc + ncurses + + + + xosview + + glibc + libgcc + libstdc++ + XFree86-libs + + + + dictd + + glibc + + + + ethereal-gnome + + gtk+ + usermode + ethereal + openssl + glibc + glib + libpcap + net-snmp + XFree86-libs + zlib + + + + netpbm-devel + + netpbm + + + + mouseconfig + + findutils + textutils + bash + glibc + newt + popt + + + + kdeaddons-kate + + kdebase + glibc + kdelibs + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + vlock + + pam + glibc + + + + redhat-lsb + + glibc + zlib + ncurses + XFree86-libs + XFree86-Mesa-libGL + gawk + sh-utils + textutils + fileutils + cpio + grep + gzip + net-tools + util-linux + mktemp + mount + procps + sed + bash + tar + psmisc + SysVinit + binutils + at + bc + diffutils + vixie-cron + file + findutils + glibc-common + LPRng + m4 + make + man + passwd + patch + rsync + time + shadow-utils + postfix + + + + usermode-gtk + + usermode + atk + glibc + gtk2 + libglade2 + glib2 + XFree86-libs + pango + libxml2 + zlib + + + + ltrace + + glibc + + + + perl-XML-Parser + + perl + perl-libwww-perl + perl-URI + glibc + expat + + + + fortune-mod + + glibc + + + + gphoto2-devel + + gphoto2 + pkgconfig + bash + + + + librsvg-devel + + librsvg + bash + + + + gnome-vfs2-devel + + gnome-vfs2 + GConf2-devel + libbonobo-devel + + + + mysql-devel + + mysql + + + + kpppload + + kdelibs + glibc + libgcc + qt + libstdc++ + XFree86-libs + + + + perl-Filter-Simple + + perl-Filter + perl-Parse-RecDescent + perl + + + + gmp-devel + + gmp + info + bash + + + + redhat-config-kickstart + + pygtk2 + pygtk2-libglade + python + hwdata + rhpl + bash + sh-utils + + + + kmid + + glibc + kdelibs + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + WindowMaker-libs + + glibc + libjpeg + libpng + libtiff + libungif + XFree86-libs + zlib + + + + gnome-spell + + gnome-libs + aspell + audiofile + bonobo + glibc + esound + freetype + libgal19 + gtk+ + imlib + gdk-pixbuf + libglade + glib + gdk-pixbuf-gnome + libgnomeprint15 + XFree86-libs + ORBit + oaf + pspell + libstdc++ + libxml + zlib + + + + vte-devel + + vte + gtk2-devel + glibc + glib2 + + + + libbonoboui + + libxml2 + ORBit2 + bonobo-activation + libbonobo + libgnomecanvas + libgnome + libart_lgpl + gtk2 + libglade2 + glibc + atk + GConf2 + glib2 + gnome-vfs2 + linc + pango + zlib + + + + m4 + + info + bash + glibc + + + + timeconfig + + initscripts + glibc + util-linux + fileutils + gawk + bash + newt + popt + + + + bash + + mktemp + bash + glibc + libtermcap + + + + kmix + + glibc + kdelibs + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + perl-Frontier-RPC + + perl + perl-libwww-perl + perl-XML-Parser + + + + blas + + glibc + + + + libgnomeprintui-devel + + libgnomeprintui + gtk2-devel + libgnomeprint-devel + libgnomecanvas-devel + + + + expat + + glibc + + + + nkf + + glibc + + + + authconfig-gtk + + authconfig + pygtk2-libglade + pam + python + + + + statserial + + glibc + ncurses + + + + kdenetwork-devel + + kdenetwork-libs + + + + mozilla + + fileutils + perl + psmisc + mozilla-nspr + indexhtml + bash + glibc + gtk+ + glib + compat-libstdc++ + XFree86-libs + zlib + + + + portmap + + chkconfig + initscripts + util-linux + bash + glibc + + + + Maelstrom + + glibc + libgcc + SDL + SDL_net + libstdc++ + + + + sysreport + + bash + gawk + grep + sed + + + + cdparanoia + + cdparanoia-libs + glibc + + + + indent + + info + bash + glibc + + + + xsane + + glibc + gtk+ + glib + libjpeg + libpng + sane-backends + libtiff + libusb + XFree86-libs + zlib + + + + parted-devel + + parted + + + + mc + + pam + chkconfig + dev + bash + perl + e2fsprogs + glibc + glib + gpm + slang + libtermcap + + + + autoconf213 + + gawk + m4 + mktemp + perl + textutils + bash + + + + ruby-libs + + bash + sh-utils + glibc + gdbm + ncurses + readline + + + + setup + + + + + desktop-backgrounds-basic + + + + + XFree86-ISO8859-9-75dpi-fonts + + chkfontpath + XFree86-font-utils + bash + + + + db4-utils + + db4 + glibc + + + + postgresql-jdbc + + + + + kde-i18n-Norwegian + + + + + kamera + + gphoto2 + glibc + kdelibs + libgcc + XFree86-libs + libpng + qt + libstdc++ + libusb + zlib + + + + samba-swat + + samba + xinetd + libacl + openssl + glibc + cups-libs + pam + popt + + + + mx + + python + glibc + + + + bg5ps + + python + glibc + freetype + + + + nautilus + + fam + filesystem + eog + scrollkeeper + desktop-backgrounds-basic + redhat-menus + redhat-artwork + gnome-vfs2 + eel2 + bash + libart_lgpl + atk + audiofile + libbonobo + bonobo-activation + libbonoboui + glibc + esound + gail + GConf2 + gtk2 + libglade2 + glib2 + libgnome + libgnomecanvas + gnome-desktop + libgnomeui + XFree86-libs + libjpeg + linc + ORBit2 + pango + popt + librsvg2 + libxml2 + zlib + + + + sendmail-cf + + bash + + + + diffstat + + glibc + + + + XFree86-75dpi-fonts + + chkfontpath + XFree86-font-utils + bash + + + + gtk2-devel + + gtk2 + pango-devel + atk-devel + glib2-devel + XFree86-devel + glibc + glib2 + + + + compat-libgcj-devel + + zip + compat-libgcj + + + + SDL_mixer-devel + + SDL_mixer + + + + kde-i18n-Serbian + + + + + ncurses4 + + glibc + + + + openldap-devel + + openldap + + + + kon2-fonts + + + + + routed + + chkconfig + bash + glibc + + + + gnome-vfs2 + + gnome-mime-data + redhat-menus + bash + glibc + perl + libbonobo + bonobo-activation + bzip2-libs + openssl + fam + GConf2 + glib2 + linc + ORBit2 + libxml2 + zlib + + + + ImageMagick-c++ + + ImageMagick + glibc + + + + glib-devel + + glib + bash + + + + xloadimage + + glibc + libtiff + XFree86-libs + + + + eruby + + glibc + eruby-libs + ruby-libs + + + + cyrus-sasl-gssapi + + cyrus-sasl + krb5-libs + glibc + + + + passivetex + + tetex + xmltex + bash + + + + gnome-pilot-devel + + ORBit-devel + pilot-link-devel + gnome-pilot + + + + emacs-leim + + emacs + + + + libgnomeui-devel + + libgnomeui + zlib-devel + esound-devel + ORBit2-devel + glib2-devel + pango-devel + gtk2-devel + GConf2-devel + gnome-vfs2-devel + libgnomecanvas-devel + bonobo-activation-devel + libbonobo-devel + libbonoboui-devel + libxml2-devel + libgnome-devel + libart_lgpl-devel + libglade2-devel + + + + rhpl + + python + glibc + + + + gtk-engines + + gtk+ + bash + glibc + imlib + glib + XFree86-libs + + + + Xft + + glibc + freetype + XFree86-libs + + + + lam + + openssh-server + openssh-clients + bash + libaio + glibc + + + + jadetex + + sgml-common + tetex + tetex-latex + openjade + bash + + + + gnome-vfs-extras + + gnome-vfs + glibc + cups-libs + + + + jfsutils + + glibc + + + + cWnn-devel + + bash + + + + inn-devel + + inn + + + + xdelta + + glibc + bash + glib + zlib + + + + ghostscript-gtk + + ghostscript + glibc + gtk+ + glib + XFree86-libs + + + + fonts-ISO8859-2-100dpi + + chkfontpath + XFree86-font-utils + bash + + + + netdump-server + + shadow-utils + openssh-server + bash + glibc + glib + popt + + + + perl-Crypt-SSLeay + + perl + openssl + glibc + + + + aspell + + pspell + glibc + bash + libgcc + libtool-libs + ncurses + libstdc++ + + + + kdemultimedia-kfile + + glibc + kdelibs + libgcc + XFree86-libs + libogg + libpng + qt + libstdc++ + libvorbis + zlib + + + + openh323-devel + + openh323 + + + + lha + + glibc + + + + postfix + + chkconfig + initscripts + sh-utils + fileutils + textutils + shadow-utils + pcre + cyrus-sasl + openssl + bash + glibc + db4 + + + + mrproject + + glib + gtk+ + libxml + gnome-libs + ORBit + oaf + gnome-vfs + gdk-pixbuf + bonobo + popt + gnome-print + gal + libglade + libmrproject + libart_lgpl + atk + libbonobo + bonobo-activation + libbonoboui + glibc + GConf2 + gtk2 + libglade2 + glib2 + libgnome + libgnomecanvas + libgnomeui + gnome-vfs2 + XFree86-libs + linc + ORBit2 + pango + libxml2 + zlib + + + + pciutils + + kernel + hwdata + glibc + + + + Glide3 + + glibc + bash + XFree86-libs + + + + libwvstreams + + glibc + openssl + libgcc + libstdc++ + zlib + + + + wine + + shadow-utils + cups-libs + bash + perl + arts + glibc + XFree86-Mesa-libGL + XFree86-Mesa-libGLU + XFree86-libs + libjpeg + ncurses + sane-backends + libusb + + + + openssh-clients + + openssh + krb5-libs + openssl + glibc + zlib + + + + qtcups + + cups + qt + desktop-file-utils + glibc + cups-libs + libgcc + libstdc++ + zlib + + + + libIDL-devel + + libIDL + pkgconfig + glib2-devel + info + bash + + + + mars-nwe + + chkconfig + initscripts + ipxutils + bash + glibc + gdbm + + + + man-pages-fr + + + + + perl-Time-HiRes + + perl + glibc + + + + x3270 + + XFree86-font-utils + desktop-file-utils + glibc + + + + xmms-skins + + xmms + + + + anonftp + + vsftpd + grep + shadow-utils + glibc + fileutils + gzip + cpio + tar + libtermcap + sh-utils + textutils + bash + + + + python-tools + + python + bash + sh-utils + + + + bonobo-conf + + bonobo + GConf + oaf + glib + gtk+ + glibc + gnome-libs + audiofile + esound + imlib + gdk-pixbuf + XFree86-libs + ORBit + popt + libxml + zlib + + + + libungif-devel + + libungif + + + + XFree86-devel + + fontconfig + XFree86-libs + bash + glibc + + + + kregexpeditor + + kdelibs + glibc + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + ttfonts-ja + + fontconfig + chkfontpath + XFree86-font-utils + bash + + + + cipe + + info + bash + glibc + + + + lslk + + glibc + + + + libmng-devel + + libmng + + + + im-sdk + + Canna-libs + glibc + libgcc + XFree86-libs + pam + libstdc++ + + + + fonts-KOI8-R-75dpi + + chkfontpath + bash + + + + mozilla-nss + + mozilla-nspr + bash + glibc + + + + doxygen-doxywizard + + doxygen + glibc + libgcc + qt + libstdc++ + XFree86-libs + + + + kmidi + + timidity++ + arts + glibc + kdelibs + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + redhat-logos + + + + + compat-gcc-g77 + + compat-gcc + glibc + + + + kde-i18n-Dutch + + + + + kdemultimedia-libs + + glibc + libgcc + libogg + libstdc++ + libvorbis + XFree86-libs + + + + quanta + + kdelibs + glibc + libgcc + XFree86-libs + libjpeg + libpng + qt + libstdc++ + zlib + + + + XFree86-libs + + glibc + grep + textutils + bash + fontconfig + freetype + XFree86-Mesa-libGL + + + + atk-devel + + atk + glib2-devel + + + + giftrans + + glibc + + + + gtk2-engines + + gtk2 + atk + glibc + glib2 + pango + + + + foomatic + + perl + perl-DateManip + perl-libxml-enno + perl-libxml-perl + perl-Parse-Yapp + perl-XML-Dumper + perl-XML-Encoding + perl-XML-Parser + fileutils + initscripts + bash + glibc + libxml2 + zlib + perl-libwww-perl + perl-XML-Grove + perl-XML-Twig + + + + ncpfs + + ipxutils + glibc + + + + gnome-mime-data + + + + + ImageMagick-c++-devel + + ImageMagick + ImageMagick-c++ + ImageMagick-devel + + + + kcharselect + + kdebase + glibc + kdelibs + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + dhclient + + initscripts + bash + glibc + + + + libdbi + + glibc + + + + kde-i18n-Slovenian + + + + + xmltex + + tetex + bash + + + + libxml2-devel + + libxml2 + zlib-devel + bash + + + + amanda-server + + gnuplot + fileutils + grep + initscripts + xinetd + amanda + bash + perl + glibc + readline + libtermcap + + + + diskcheck + + crontabs + postfix + grep + bash + python + + + + e2fsprogs-devel + + e2fsprogs + info + bash + + + + pdksh + + grep + fileutils + bash + glibc + + + + fonts-ja + + XFree86-100dpi-fonts + XFree86-75dpi-fonts + chkfontpath + bash + + + + kWnn-devel + + bash + + + + awesfx + + glibc + + + + XFree86-doc + + + + + gnome-applets + + scrollkeeper + gnome-panel + bash + glibc + libart_lgpl + atk + libbonobo + bonobo-activation + libbonoboui + gail + GConf2 + gtk2 + libglade2 + glib2 + libgnome + libgnomecanvas + libgnomeui + gnome-vfs2 + libgtop2 + XFree86-libs + linc + ORBit2 + pango + libxml2 + zlib + + + + perl-SGMLSpm + + openjade + perl + + + + libtool-libs13 + + glibc + + + + koffice + + kdelibs + glibc + bash + perl + libart_lgpl + arts + audiofile + freetype + libgcc + XFree86-libs + libjpeg + libpng + qt + libstdc++ + libxml2 + libxslt + zlib + + + + docbook-style-dsssl + + openjade + docbook-dtds + sgml-common + bash + perl + + + + libavc1394-devel + + + + + cyrus-sasl-devel + + cyrus-sasl + glibc + gdbm + pam + + + + umb-scheme + + info + bash + glibc + + + + eel2-devel + + eel2 + gtk2-devel + libgnomeui-devel + gnome-vfs2-devel + librsvg2-devel + bonobo-activation-devel + libxml2-devel + libart_lgpl-devel + gail-devel + + + + expect + + glibc + tcl + tk + XFree86-libs + + + + gimp-print-cups + + cups + bash + openssl + glibc + cups-libs + gimp-print + libjpeg + libpng + libtiff + zlib + + + + gnome-kerberos + + atk + krb5-libs + glibc + gtk2 + libglade2 + glib2 + pango + libxml2 + zlib + + + + ftp + + glibc + ncurses + readline + + + + enscript + + bash + perl + glibc + + + + noatun + + glibc + kdemultimedia-arts + arts + kdelibs + audiofile + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + libgnomeprint-devel + + libgnomeprint + glib2-devel + pango-devel + libxml2-devel + libart_lgpl-devel + libbonobo-devel + bonobo-activation-devel + freetype + + + + freeciv + + desktop-file-utils + bash + audiofile + glibc + esound + gtk+ + imlib + glib + XFree86-libs + ncurses + readline + Xaw3d + zlib + + + + librpm404 + + gawk + fileutils + textutils + mktemp + shadow-utils + bash + bzip2-libs + glibc + zlib + + + + gnome-print-devel + + gnome-print + gdk-pixbuf-devel + + + + librep-devel + + librep + bash + glibc + gdbm + + + + gtkhtml2-devel + + gtkhtml2 + gtk2-devel + libxml2-devel + gnome-vfs2-devel + gail-devel + + + + xtraceroute + + gtkglarea + glibc + gtk+ + gdk-pixbuf + glib + XFree86-Mesa-libGL + XFree86-Mesa-libGLU + XFree86-libs + + + + compat-libstdc++-devel + + compat-libstdc++ + + + + losetup + + glibc + + + + ntp + + chkconfig + shadow-utils + sed + libcap + bash + perl + glibc + + + + sharutils + + info + bash + perl + glibc + + + + postgresql-python + + python + mx + sh-utils + glibc + postgresql-libs + + + + PyQt-examples + + PyQt + sh-utils + + + + SDL_mixer + + SDL + glibc + libogg + libvorbis + + + + ktalkd + + glibc + kdelibs + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + ash + + fileutils + grep + bash + glibc + + + + eruby-libs + + ruby-libs + glibc + + + + kdebase-devel + + kdebase + + + + kdebindings-qtc + + qt + glibc + libgcc + libstdc++ + XFree86-libs + + + + VFlib2 + + XFree86-truetype-fonts + glibc + freetype + XFree86-libs + + + + xsane-gimp + + gawk + sh-utils + fileutils + bash + glibc + gtk+ + gimp + glib + libjpeg + libpng + sane-backends + libtiff + libusb + XFree86-libs + zlib + + + + libtabe-devel + + libtabe + + + + gnome-media + + scrollkeeper + bash + libart_lgpl + atk + audiofile + libbonobo + bonobo-activation + libbonoboui + glibc + esound + gail + GConf2 + gtk2 + glib2 + libgnome + libgnomecanvas + libgnomeui + gnome-vfs2 + XFree86-libs + linc + ORBit2 + pango + popt + libxml2 + zlib + + + + openssh + + util-linux + initscripts + krb5-libs + openssl + glibc + zlib + + + + openssl + + mktemp + glibc + bash + + + + festival + + glibc + bash + perl + libstdc++ + libtermcap + + + + stardict + + openmotif + glibc + libgcc + libstdc++ + XFree86-libs + + + + qmkbootdisk + + glibc + qt + mkbootdisk + desktop-file-utils + libgcc + libstdc++ + + + + ImageMagick + + bzip2 + freetype + libjpeg + libpng + libtiff + libungif + zlib + glibc + bzip2-libs + XFree86-libs + libxml2 + + + + wordtrans-web + + wordtrans + + + + nedit + + openmotif + desktop-file-utils + glibc + XFree86-libs + + + + fonts-KOI8-R-100dpi + + chkfontpath + bash + + + + oaf-devel + + oaf + bash + + + + ipxutils + + glibc + + + + kudzu-devel + + pciutils-devel + + + + ethereal + + libpcap + net-snmp + bash + perl + openssl + glibc + glib + zlib + + + + bootparamd + + chkconfig + portmap + bash + glibc + + + + licq-gnome + + licq + glibc + libgcc + gtk+ + glib + libstdc++ + XFree86-libs + + + + kdbg + + gdb + glibc + kdelibs + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + usbview + + gtk+ + glibc + glib + XFree86-libs + + + + cups + + chkconfig + initscripts + cups-libs + htmlview + xinetd + bash + openssl + glibc + pam + zlib + + + + gpm + + chkconfig + glibc + info + pam + bash + ncurses + + + + pmake + + mktemp + bash + glibc + + + + Xbae-devel + + Xbae + + + + pkgconfig + + glibc + + + + php-mysql + + php + perl + grep + mysql + zlib + bash + glibc + + + + jed + + info + bash + sh-utils + glibc + slang + + + + autorun + + glibc + libgcc + libstdc++ + + + + krb5-server + + krb5-libs + grep + info + bash + sh-utils + chkconfig + glibc + + + + gkrellm + + gtk+ + glib + imlib + glibc + XFree86-libs + + + + kmessedwords + + glibc + kdelibs + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + gtkhtml + + gnome-print + gdk-pixbuf + pspell + bonobo + glibc + gnome-libs + audiofile + libcapplet0 + esound + freetype + libgal19 + gtk+ + imlib + libghttp + libglade + glib + gdk-pixbuf-gnome + libgnomeprint15 + XFree86-libs + ORBit + oaf + popt + libxml + zlib + + + + kernel-bigmem + + fileutils + modutils + initscripts + mkinitrd + bash + + + + qt-PostgreSQL + + qt + glibc + fontconfig + XFree86-Mesa-libGL + XFree86-Mesa-libGLU + XFree86-libs + postgresql-libs + Xft + + + + setuptool + + glibc + newt + + + + lrzsz + + glibc + + + + skkdic + + + + + wordtrans + + glibc + libgcc + qt + libstdc++ + + + + beecrypt + + glibc + + + + isdn4k-utils-devel + + isdn4k-utils + + + + grep + + info + pcre + bash + glibc + + + + guile + + info + readline + umb-scheme + bash + glibc + ncurses + + + + ttfprint + + fileutils + bash + glibc + + + + mkbootdisk + + mkinitrd + dosfstools + syslinux + bash + + + + tree + + glibc + + + + isdn4k-utils + + initscripts + chkconfig + glibc + fileutils + sh-utils + bash + ncurses + + + + PyQt + + python + glibc + libgcc + qt + sip + libstdc++ + XFree86-libs + zlib + + + + h2ps + + glibc + + + + openmotif + + glibc + bash + XFree86-libs + + + + gnupg + + info + bash + perl + glibc + openldap + zlib + + + + kde-i18n-Italian + + + + + emacs-el + + emacs + + + + python-docs + + + + + redhat-config-httpd + + python + alchemist + libglade2 + pygtk2-libglade + pygtk2 + gnome-python2 + httpd + usermode + 4Suite + bash + + + + kstars + + glibc + kdelibs + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + cproto + + glibc + + + + kde-i18n-British + + + + + libraw1394-devel + + + + + knotes + + glibc + kdelibs + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + ORBit + + info + glibc + glib + + + + openssl095a + + glibc + + + + kde-i18n-Spanish + + + + + perl-Parse-RecDescent + + perl + + + + linuxdoc-tools + + openjade + tetex-latex + gawk + groff + bash + perl + glibc + + + + libxml-devel + + libxml + bash + + + + fonts-KOI8-R + + chkfontpath + bash + perl + + + + compat-libgcj + + info + zip + glibc + libgcc + zlib + + + + XFree86-ISO8859-2-100dpi-fonts + + chkfontpath + XFree86-font-utils + bash + + + + amanda-devel + + amanda + + + + genromfs + + glibc + + + + python-devel + + bash + + + + kvoctrain + + perl + glibc + kdelibs + libgcc + XFree86-libs + libjpeg + libpng + qt + libstdc++ + zlib + + + + licq-qt + + licq + glibc + libgcc + XFree86-libs + qt + libstdc++ + + + + automake14 + + perl + info + bash + + + + automake15 + + perl + info + bash + + + + redhat-config-date + + pygtk2 + python + gnome-python2-canvas + usermode + ntp + chkconfig + rhpl + bash + sh-utils + + + + gimp-print + + bash + glibc + ghostscript + zlib + + + + aspell-sv + + aspell + + + + wireless-tools + + glibc + + + + passwd + + pam + glibc + glib2 + popt + libuser + + + + php-ldap + + php + perl + bash + glibc + openldap + + + + quota + + kernel + initscripts + glibc + + + + isdn4k-utils-vboxgetty + + isdn4k-utils + tcl + glibc + + + + SDL + + glibc + XFree86-libs + + + + gdk-pixbuf + + glibc + gtk+ + glib + libjpeg + libpng + libtiff + XFree86-libs + zlib + + + + desktop-file-utils + + glibc + glib2 + popt + + + + gdm + + shadow-utils + scrollkeeper + gtk2 + libglade2 + libgnomeui + libgnomecanvas + librsvg2 + libxml2 + pam + xinitrc + usermode + xsri + util-linux + redhat-artwork + redhat-menus + bash + libart_lgpl + atk + libbonobo + bonobo-activation + libbonoboui + glibc + GConf2 + glib2 + libgnome + gnome-vfs2 + XFree86-libs + linc + ORBit2 + pango + popt + zlib + + + + libwnck + + glib2 + gtk2 + glibc + atk + pango + + + + eel2 + + gtk2 + libgnomeui + gnome-vfs2 + librsvg2 + bonobo-activation + libxml2 + libart_lgpl + glibc + atk + libbonobo + libbonoboui + gail + GConf2 + libglade2 + glib2 + libgnome + libgnomecanvas + XFree86-libs + linc + ORBit2 + pango + zlib + + + + atk + + glibc + glib2 + + + + usermode + + util-linux + pam + glibc + glib2 + libuser + + + + hesiod-devel + + hesiod + + + + sendmail-doc + + + + + qt-designer + + qt-devel + glibc + qt + fontconfig + XFree86-Mesa-libGL + XFree86-Mesa-libGLU + XFree86-libs + Xft + zlib + + + + kdelibs + + qt + arts + cups-libs + glibc + bash + perl + python + audiofile + bzip2-libs + libgcc + XFree86-libs + libjpeg + pcre + libpng + libstdc++ + libtiff + libxml2 + libxslt + zlib + + + + postgresql-contrib + + postgresql-libs + postgresql + bash + sh-utils + perl + krb5-libs + openssl + glibc + pam + readline + libtermcap + zlib + perl-DBD-Pg + perl-DBI + postgresql-perl + perl-Time-HiRes + + + + gsl + + info + glibc + + + + pam + + cracklib + cracklib-dicts + glib + initscripts + grep + mktemp + sed + fileutils + textutils + glibc + bash + db4 + + + + mozilla-dom-inspector + + fileutils + mozilla + bash + glibc + mozilla-nspr + compat-libstdc++ + zlib + + + + librsvg2-devel + + librsvg2 + gtk2-devel + libxml2-devel + freetype-devel + libart_lgpl-devel + + + + ac-archive + + autoconf + perl + automake + + + + bonobo-activation-devel + + bonobo-activation + ORBit2-devel + libxml2-devel + glib2-devel + + + + anaconda-runtime + + + + + mozilla-nspr-devel + + mozilla-nspr + bash + + + + redhat-config-mouse + + pygtk2 + python + usermode + rhpl + pyxf86config + bash + + + + openldap-servers + + fileutils + make + openldap + openssl + shadow-utils + chkconfig + bash + perl + krb5-libs + glibc + gdbm + libtool-libs + pam + cyrus-sasl + + + + perl-XML-Twig + + perl + perl-XML-Parser + + + + stunnel + + textutils + fileutils + mktemp + glibc + words + net-tools + sh-utils + glibc-common + make + openssl + + + + ddskk + + emacs + apel + + + + kdeartwork-kworldclock + + kdetoys + + + + gnome-system-monitor + + libgnomeui + libgtop2 + libwnck + bash + libart_lgpl + atk + libbonobo + bonobo-activation + libbonoboui + glibc + GConf2 + gtk2 + glib2 + libgnome + libgnomecanvas + gnome-vfs2 + XFree86-libs + linc + ORBit2 + pango + libxml2 + zlib + + + + cdp + + glibc + ncurses + + + + findutils + + info + bash + glibc + + + + isicom + + bash + glibc + + + + popt + + glibc + + + + finger-server + + xinetd + glibc + + + + fontconfig + + freetype + bash + glibc + expat + + + + up2date-gnome + + up2date + usermode + pam + pygtk2 + pygtk2-libglade + gnome-python2 + gnome-python2-canvas + usermode-gtk + python + + + + patchutils + + bash + perl + glibc + + + + sox-devel + + + + + XFree86-tools + + XFree86 + bash + perl + glibc + freetype + XFree86-Mesa-libGL + XFree86-Mesa-libGLU + XFree86-libs + + + + gcc-c++ + + gcc + libstdc++ + libstdc++-devel + glibc + + + + gimp-print-utils + + gimp-print + glibc + ncurses + readline + zlib + + + + gsl-devel + + gsl + bash + + + + iptables + + kernel + chkconfig + bash + glibc + + + + kinput2-canna-wnn6 + + bash + Canna-libs + glibc + XFree86-libs + Wnn6-SDK + + + + kviewshell-devel + + kviewshell + + + + perl-XML-Dumper + + perl + perl-XML-Parser + + + + unix2dos + + glibc + + + + licq-text + + licq + glibc + libgcc + ncurses + libstdc++ + + + + libdbi-devel + + libdbi + + + + prelink + + glibc + kernel + + + + compat-gcc-c++ + + compat-gcc + compat-libstdc++ + compat-libstdc++-devel + glibc + + + + kdepim-cellphone + + kdepim + glibc + kdelibs + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + bitmap-fonts + + fontconfig + bash + + + + gdbm-devel + + gdbm + info + bash + + + + kdvi + + bash + glibc + kdelibs + libgcc + XFree86-libs + kviewshell + libpng + qt + libstdc++ + zlib + + + + kdeaddons-noatun + + noatun + kdemultimedia-arts + arts + kdelibs + audiofile + glibc + libgcc + XFree86-libs + libpng + qt + SDL + libstdc++ + zlib + + + + aumix-X11 + + aumix + glibc + gtk+ + glib + gpm + ncurses + XFree86-libs + + + + libelf-devel + + libelf + + + + tetex-dvips + + tetex + psutils + bash + glibc + + + + perl-CPAN + + perl + + + + patch + + glibc + + + + mew-xemacs + + xemacs + mew-common + + + + libelf + + glibc + + + + kdesdk-kspy + + glibc + kdelibs + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + libgnome-devel + + libgnome + zlib-devel + esound-devel + ORBit2-devel + glib2-devel + libbonobo-devel + GConf2-devel + gnome-vfs2-devel + libxml2-devel + libxslt-devel + bonobo-activation-devel + + + + taipeifonts + + grep + XFree86-font-utils + textutils + mktemp + bash + + + + gnome-python2 + + gnome-python2-bonobo + libart_lgpl + atk + libbonobo + bonobo-activation + libbonoboui + glibc + GConf2 + gtk2 + glib2 + libgnome + libgnomecanvas + libgnomeui + gnome-vfs2 + XFree86-libs + linc + ORBit2 + pango + libxml2 + zlib + + + + pcre-devel + + pcre + bash + + + + dump + + setup + rmt + + + + nut + + nut-client + fileutils + chkconfig + initscripts + glibc + + + + openssh-askpass + + openssh + glibc + XFree86-libs + + + + rdesktop + + openssl + glibc + XFree86-libs + + + + sed + + info + bash + glibc + + + + LPRng + + chkconfig + mktemp + fileutils + textutils + gawk + bash + krb5-libs + glibc + + + + pygtk2-libglade + + pygtk2 + atk + glibc + gtk2 + libglade2 + glib2 + pango + libxml2 + zlib + + + + mgetty + + info + mktemp + bash + glibc + + + + ark + + zip + unzip + tar + glibc + kdelibs + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + mdadm + + bash + glibc + + + + XFree86-xtrap-clients + + XFree86 + glibc + XFree86-libs + + + + libaio + + initscripts + glibc + + + + libart_lgpl-devel + + libart_lgpl + bash + + + + xawtv + + XFree86 + XFree86-font-utils + usermode + bash + glibc + XFree86-libs + libjpeg + ncurses + + + + libungif-progs + + libungif + bash + perl + glibc + XFree86-libs + + + + kernel-debug + + fileutils + modutils + initscripts + mkinitrd + bash + + + + indexhtml + + + + + libmng-static + + + + + timidity++ + + arts + glibc + ncurses + libogg + slang + libvorbis + + + + finger + + glibc + + + + glibc-debug-static + + glibc + glibc-devel + + + + libpng + + glibc + zlib + + + + libgnomeprint + + urw-fonts + ghostscript + ghostscript-fonts + libxml + perl + XFree86 + bash + glibc + libart_lgpl + libbonobo + bonobo-activation + freetype + glib2 + linc + ORBit2 + pango + popt + libxml2 + zlib + + + + irb + + ruby + sh-utils + + + + kdebindings + + kdelibs + kdebase + glibc + libgcc + gtk+ + glib + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + kterm + + utempter + glibc + XFree86-libs + ncurses + + + + libole2-devel + + libole2 + bash + + + + gnome-terminal + + vte + bash + libart_lgpl + atk + libbonobo + bonobo-activation + libbonoboui + glibc + GConf2 + gtk2 + libglade2 + glib2 + libgnome + libgnomecanvas + libgnomeui + gnome-vfs2 + XFree86-libs + linc + ORBit2 + pango + popt + libxml2 + zlib + + + + perl-DateManip + + perl + + + + wl + + emacs + wl-common + flim + + + + cyrus-sasl + + glibc + chkconfig + initscripts + bash + krb5-libs + db4 + gdbm + pam + + + + WindowMaker + + cpp + glibc + bash + perl + libjpeg + libpng + libtiff + libungif + WindowMaker-libs + XFree86-libs + zlib + + + + Guppi-devel + + Guppi + gnome-libs-devel + gnome-print-devel + bonobo-devel + + + + pydict + + pygtk2 + bash + + + + newt + + slang + glibc + popt + + + + xchat + + perl + gnome-libs + audiofile + openssl + glibc + esound + gtk+ + imlib + gdk-pixbuf + glib + XFree86-libs + + + + gnome-print + + gnome-libs + urw-fonts + ghostscript + ghostscript-fonts + libxml + perl + XFree86 + libgnomeprint15 + bash + audiofile + glibc + esound + freetype + gtk+ + imlib + gdk-pixbuf + glib + XFree86-libs + zlib + + + + mrtg + + perl + gd + bash + glibc + libpng + zlib + perl-CGI + perl-URI + + + + Xaw3d-devel + + Xaw3d + bash + + + + kfile-pdf + + glibc + kdelibs + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + sysstat + + kernel + sh-utils + textutils + grep + fileutils + vixie-cron + bash + glibc + + + + fonts-ISO8859-2 + + chkfontpath + XFree86-font-utils + bash + + + + arts-devel + + bash + glibc + libgcc + arts + libstdc++ + + + + kdeartwork-screensavers + + kdebase + glibc + kdelibs + libgcc + XFree86-Mesa-libGL + XFree86-Mesa-libGLU + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + iptables-ipv6 + + iptables + bash + glibc + + + + lsof + + glibc + + + + binutils + + info + bash + glibc + + + + freetype-demos + + freetype + glibc + XFree86-libs + + + + perl-RPM2 + + perl + glibc + libelf + popt + rpm + + + + namazu + + perl + perl-File-MMagic + perl-NKF + kakasi + perl-Text-Kakasi + glibc + + + + ElectricFence + + glibc + bash + + + + autoconvert-xchat + + xchat + glibc + + + + Gtk-Perl + + perl + gtk+ + gtkglarea + gnome-libs + audiofile + glibc + esound + imlib + gdk-pixbuf + libglade + glib + XFree86-Mesa-libGL + XFree86-Mesa-libGLU + XFree86-libs + libjpeg + libpng10 + libxml + zlib + perl-libwww-perl + + + + cdicconf + + perl + gtk+ + glibc + libglade + glib + XFree86-libs + libxml + zlib + + + + krbafs-utils + + krbafs + glibc + krb5-libs + + + + byacc + + glibc + + + + memprof + + bash + libart_lgpl + atk + binutils + libbonobo + bonobo-activation + libbonoboui + glibc + GConf2 + gtk2 + libglade2 + glib2 + libgnome + libgnomecanvas + libgnomeui + gnome-vfs2 + XFree86-libs + linc + ORBit2 + pango + popt + libxml2 + zlib + + + + redhat-rpm-config + + rpm-build + bash + perl + + + + kde-i18n-Japanese + + + + + compat-slang + + glibc + + + + perl-Inline + + perl + + + + gtkglarea + + XFree86 + gtk+ + glibc + bash + + + + mod_perl + + httpd + perl + glibc + + + + glibc-kernheaders + + fileutils + initscripts + bash + + + + specspo + + + + + redhat-config-printer-gui + + redhat-config-printer + pygtk2 + pygtk2-libglade + gnome-python2 + gnome-python2-gtkhtml2 + usermode + python + + + + ncurses + + glibc + bash + + + + nfs-utils + + kernel + portmap + sed + gawk + sh-utils + fileutils + textutils + grep + chkconfig + shadow-utils + util-linux + bash + glibc + + + + gal + + + + + gedit + + scrollkeeper + GConf2 + bash + libart_lgpl + atk + libbonobo + bonobo-activation + libbonoboui + glibc + eel2 + gail + gtk2 + libglade2 + glib2 + libgnome + libgnomecanvas + libgnomeprint + libgnomeprintui + libgnomeui + gnome-vfs2 + XFree86-libs + linc + ORBit2 + pango + popt + libxml2 + zlib + + + + libpng10 + + glibc + zlib + + + + squirrelmail + + httpd + php + perl + tmpwatch + postfix + bash + sh-utils + + + + imap + + pam + xinetd + bash + krb5-libs + openssl + glibc + + + + metacity + + redhat-artwork + bash + atk + glibc + GConf2 + gtk2 + libglade2 + glib2 + XFree86-libs + linc + ORBit2 + pango + libxml2 + zlib + + + + xpdf-japanese + + xpdf + + + + librep + + info + gmp + glibc + bash + gdbm + ncurses + readline + + + + busybox-anaconda + + glibc + + + + readline-devel + + readline + + + + amanda-client + + fileutils + grep + initscripts + xinetd + amanda + bash + glibc + readline + libtermcap + + + + kdeaddons-knewsticker + + kdebase + kdenetwork-libs + knewsticker + + + + pam_krb5 + + krbafs + krb5-libs + glibc + + + + irda-utils + + chkconfig + grep + modutils + bash + glibc + glib + + + + hwcrypto + + chkconfig + initscripts + gawk + bash + glibc + + + + kdebindings-kmozilla + + mozilla + kdebase + glibc + kdebindings + kdelibs + libgcc + gtk+ + glib + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + cdparanoia-libs + + bash + glibc + + + + perl-DBD-MySQL + + perl + perl-DBI + glibc + mysql + zlib + + + + kaboodle + + arts + kdelibs + audiofile + glibc + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + tripwire + + sed + grep + gzip + tar + gawk + bash + + + + cdecl + + glibc + readline + libtermcap + + + + net-snmp-devel + + net-snmp + + + + libart_lgpl + + glibc + + + + freetype-devel + + freetype + bash + + + + libxml + + info + glibc + zlib + + + + tetex + + tmpwatch + dialog + ed + info + sh-utils + tetex-fonts + bash + perl + glibc + libgcc + libpng + libstdc++ + + + + ksymoops + + glibc + + + + gimp + + gtk+ + desktop-file-utils + glibc + bash + glib + gnome-libs + XFree86-libs + libjpeg + libpng + libpng10 + libtiff + zlib + + + + Canna + + chkconfig + setup + grep + fileutils + bash + Canna-libs + glibc + + + + Wnn6-SDK-devel + + Wnn6-SDK + + + + openmotif21 + + glibc + XFree86-libs + + + + make + + info + bash + glibc + + + + balsa + + gtk+ + gnome-libs + audiofile + openssl + glibc + esound + libesmtp + freetype + libgal19 + libgcc + imlib + gdk-pixbuf + libglade + glib + gdk-pixbuf-gnome + libgnomeprint15 + krb5-libs + gtkhtml + XFree86-libs + openldap + libtool-libs + pcre + pspell + libstdc++ + libxml + zlib + + + + slang-devel + + slang + sh-utils + + + + ruby-mode + + emacs + + + + vnc-server + + XFree86 + bash + chkconfig + perl + glibc + XFree86-libs + zlib + + + + beecrypt-devel + + beecrypt + + + + gconf-editor + + atk + glibc + GConf2 + gtk2 + glib2 + linc + ORBit2 + pango + + + + ipchains + + chkconfig + sh-utils + initscripts + bash + glibc + + + + karm + + glibc + kdelibs + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + itcl + + glibc + bash + tcl + tk + + + + kde-i18n-Korean + + + + + php-dbg-server + + php + perl + bash + glibc + + + + SDL_image-devel + + SDL_image + SDL-devel + + + + kit + + glibc + kdelibs + libgcc + XFree86-libs + libjpeg + libpng + qt + libstdc++ + zlib + + + + fam-devel + + fam + + + + exmh + + nmh + tk + + + + perl-Filter + + glibc + perl + + + + libgcj-devel + + zip + libgcj + gawk + + + + gnome-utils + + bash + libart_lgpl + atk + libbonobo + bonobo-activation + libbonoboui + glibc + e2fsprogs + GConf2 + gtk2 + libglade2 + glib2 + libgnome + libgnomecanvas + libgnomeui + gnome-vfs2 + XFree86-libs + linc + ncurses + ORBit2 + gnome-panel + pango + popt + libxml2 + zlib + + + + gnome-python2-canvas + + libgnomecanvas + gtk2 + pygtk2 + libart_lgpl + atk + glibc + glib2 + pango + + + + libxml10 + + info + glibc + + + + gqview + + gtk+ + imlib + desktop-file-utils + glibc + gdk-pixbuf + glib + libpng + XFree86-libs + zlib + + + + ImageMagick-perl + + ImageMagick + perl + bzip2-libs + glibc + XFree86-libs + freetype + libjpeg + libpng + libtiff + libxml2 + zlib + + + + cups-libs + + glibc + openssl + libjpeg + libpng + libtiff + zlib + + + + GConf2-devel + + GConf2 + libxml2-devel + ORBit2-devel + glib2-devel + + + + ghostscript-devel + + ghostscript + bash + + + + slrn + + slang + sh-utils + openssl + glibc + + + + ORBit2-devel + + indent + glib2-devel + linc-devel + libIDL-devel + ORBit2 + bash + glibc + glib2 + libIDL + linc + popt + + + + kdeadmin + + glibc + kdelibs + usermode + libgcc + XFree86-libs + libjpeg + pam + libpng + qt + libstdc++ + zlib + + + + gzip + + info + mktemp + less + bash + glibc + + + + lilo + + mkinitrd + bash + glibc + + + + kde-i18n-Russian + + + + + nss_db-compat + + glibc + + + + dejagnu + + tcl + expect + bash + + + + librsvg2 + + gtk2 + libxml2 + popt + freetype + libart_lgpl + libpng + glibc + + + + kernel-uml + + kernel-utils + + + + redhat-logviewer + + pygtk2 + python + usermode + bash + sh-utils + + + + spamassassin + + perl + chkconfig + perl-Net-DNS + perl-Time-HiRes + procmail + bash + glibc + db4 + gdbm + mrtg + + + + rhn-applet + + python + rpm + rpm-python + rhnlib + pygtk2-libglade + pygtk2 + up2date-gnome + gnome-python2 + libgnomeui + libgnome + gnome-python2-gtkhtml2 + up2date + e2fsprogs + bash + libart_lgpl + atk + libbonobo + bonobo-activation + libbonoboui + glibc + GConf2 + gtk2 + glib2 + libgnomecanvas + gnome-vfs2 + XFree86-libs + linc + ORBit2 + pango + libxml2 + zlib + + + + mysql + + glibc + info + grep + fileutils + chkconfig + bash + perl-DBI + perl-DBD-MySQL + perl + libgcc + ncurses + readline + libstdc++ + zlib + perl-CGI + + + + netconfig + + glibc + newt + + + + libgnomeprintui + + gtk2 + libgnomeprint + libgnomecanvas + glibc + libart_lgpl + atk + libbonobo + bonobo-activation + glib2 + linc + ORBit2 + pango + libxml2 + zlib + + + + kde-i18n-Chinese + + + + + libpcap + + kernel + openssl + glibc + + + + w3c-libwww + + glibc + zlib + + + + kdessh + + openssh-clients + glibc + kdelibs + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + tuxracer + + glibc + libgcc + XFree86-Mesa-libGL + XFree86-Mesa-libGLU + XFree86-libs + SDL + libstdc++ + tcl + + + + skkinput + + dbskkd-cdb + glibc + XFree86-libs + + + + lokkit + + iptables + glibc + newt + popt + slang + + + + kernel-utils + + chkconfig + initscripts + fileutils + bash + openssl + glibc + ncurses + readline + net-snmp + + + + compat-pwdb + + glibc + + + + kfax + + glibc + kdelibs + libgcc + XFree86-libs + libjpeg + kviewshell + libpng + qt + libstdc++ + libtiff + zlib + + + + libattr-devel + + libattr + + + + kdebase + + kdelibs + libxml2 + xinitrc + XFree86-xdm + cdparanoia-libs + desktop-backgrounds-basic + redhat-menus + redhat-artwork + shadow-utils + fileutils + desktop-file-utils + lm_sensors + glibc + sh-utils + XFree86-xfs + bash + arts + audiofile + openssl + freetype + libgcc + XFree86-libs + libjpeg + openldap + pam + libpng + qt + libstdc++ + libvorbis + zlib + + + + gd-devel + + gd + + + + kjots + + glibc + kdelibs + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + cups-drivers-hpijs + + hpijs + ghostscript + initscripts + bash + + + + postgresql-devel + + postgresql-libs + bash + krb5-libs + openssl + glibc + pam + readline + libtermcap + zlib + + + + eruby-devel + + eruby-libs + + + + desktop-backgrounds-extra + + + + + w3m-el + + w3m-el-common + emacs + flim + w3m + + + + bonobo-activation + + linc + glibc + perl + glib2 + ORBit2 + popt + libxml2 + zlib + + + + w3c-libwww-devel + + w3c-libwww + bash + + + + ktimer + + kdelibs + glibc + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + magicdev + + gnome-mime-data + bash + libart_lgpl + atk + libbonobo + bonobo-activation + libbonoboui + glibc + GConf2 + gtk2 + libglade2 + glib2 + libgnome + libgnomecanvas + libgnomeui + gnome-vfs2 + XFree86-libs + linc + ORBit2 + pango + libxml2 + zlib + + + + perl-TermReadKey + + glibc + perl + + + + pyOpenSSL + + openssl + glibc + + + + rsync + + glibc + popt + + + + libgnat + + glibc + libgcc + + + + libpng-devel + + libpng + zlib-devel + + + + g-wrap-devel + + info + g-wrap + guile-devel + bash + guile + + + + gcc-g77 + + gcc + libf2c + info + bash + glibc + + + + termcap + + + + + tetex-latex + + tetex + netpbm-progs + bash + perl + + + + vnc-doc + + + + + klettres + + glibc + kdelibs + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + kdebindings-qtjava + + qt + libgcj + jdkgcj + glibc + libgcc + libstdc++ + XFree86-libs + + + + cWnn + + FreeWnn-common + cWnn-common + shadow-utils + chkconfig + bash + glibc + + + + vnc + + chkconfig + initscripts + glibc + XFree86-libs + libjpeg + zlib + + + + xemacs + + info + ctags + bash + sh-utils + perl + Canna-libs + glibc + db4 + XFree86-libs + libjpeg + openldap + ncurses + libpng + postgresql-libs + libtiff + FreeWnn-libs + openmotif + zlib + + + + libgal19 + + gal + glibc + gtk+ + glib + XFree86-libs + + + + kdesdk-kbugbuster + + glibc + kdelibs + libgcc + XFree86-libs + libjpeg + libpng + qt + libstdc++ + zlib + + + + sysklogd + + fileutils + chkconfig + bash + glibc + + + + dvdrecord + + glibc + + + + kedit + + kdelibs + glibc + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + GConf2 + + info + glibc + atk + gtk2 + glib2 + linc + ORBit2 + pango + popt + libxml2 + zlib + + + + sylpheed + + gtk+ + glibc + gdk-pixbuf + glib + XFree86-libs + + + + libgtop2 + + glib2 + glibc + + + + glibc + + glibc-common + basesystem + glibc + + + + XFree86 + + utempter + cpp + XFree86-xauth + Glide3 + XFree86-xfs + XFree86-libs + XFree86-base-fonts + pam + kernel + fileutils + chkfontpath + XFree86-font-utils + bash + perl + glibc + freetype + XFree86-Mesa-libGL + ncurses + zlib + + + + x3270-x11 + + x3270 + bash + glibc + XFree86-libs + + + + Wnn6-SDK + + fileutils + bash + glibc + + + + kdepim-pilot + + kdepim + glibc + kdelibs + libgcc + XFree86-libs + pilot-link + libpng + qt + libstdc++ + zlib + + + + libtermcap-devel + + libtermcap + bash + + + + epic + + glibc + ncurses + + + + libtiff-devel + + libtiff + + + + FreeWnn-devel + + bash + + + + bc + + info + grep + bash + glibc + ncurses + readline + + + + compat-gcc + + binutils + glibc-devel + info + glibc + + + + gtkam-gimp + + gtkam + gimp + fileutils + gawk + sh-utils + bash + glibc + gtk+ + gdk-pixbuf + glib + gphoto2 + XFree86-libs + + + + wget + + info + bash + openssl + glibc + + + + kdesdk-kapptemplate + + bash + sh-utils + + + + libdbi-dbd-mysql + + libdbi + glibc + mysql + + + + sawfish + + librep + rep-gtk + info + bash + atk + audiofile + glibc + esound + gtk2 + glib2 + gmp + XFree86-libs + imlib + libjpeg + pango + libpng + libtiff + libungif + zlib + + + + kdepim-devel + + kdepim + + + + kdemultimedia-arts + + kdemultimedia-libs + glibc + arts + kdelibs + audiofile + libgcc + XFree86-libs + libogg + libpng + qt + libstdc++ + libvorbis + zlib + + + + postgresql + + glibc + initscripts + postgresql-libs + bash + krb5-libs + openssl + pam + readline + libtermcap + zlib + + + + mgetty-voice + + mgetty + glibc + + + + freetype-utils + + freetype + glibc + XFree86-libs + + + + redhat-config-bind + + python + alchemist + gtk2 + gnome-python2 + bind + 4Suite + usermode + bash + + + + words + + bash + + + + FreeWnn-common + + grep + textutils + shadow-utils + bash + + + + redhat-config-xfree86 + + pygtk2 + pygtk2-libglade + python + usermode + hwdata + kudzu + pyxf86config + rhpl + bash + + + + dialog + + bash + glibc + ncurses + + + + pccts + + glibc + + + + glib2 + + glibc + + + + ncurses-c++-devel + + ncurses + + + + kdesdk-kmtrace + + bash + glibc + kdelibs + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + hesiod + + glibc + + + + libmrproject-devel + + libmrproject + gtk+-devel + glibc + + + + kde-i18n-Finnish + + + + + webalizer + + shadow-utils + fileutils + bash + glibc + db4 + gd + libpng + zlib + + + + kernel-BOOT + + fileutils + modutils + bash + + + + SDL_image + + glibc + libjpeg + libpng + SDL + libtiff + zlib + + + + httpd-devel + + libtool + httpd + perl + + + + kdesdk-gimp + + gimp + + + + xemacs-el + + xemacs + + + + pilot-link095-compat + + glibc + + + + shapecfg + + kernel + iproute + bash + glibc + + + + dhcp-devel + + dhcp + + + + GConf + + info + glib + oaf + gtk+ + ORBit + libxml + bash + glibc + popt + XFree86-libs + zlib + + + + sox + + bash + glibc + libogg + libvorbis + + + + bdflush + + glibc + + + + pcre + + glibc + + + + sane-frontends + + gtk+ + gimp + sane-backends + glibc + glib + libjpeg + libusb + XFree86-libs + + + + aspell-devel + + pspell-devel + aspell + + + + sane-backends + + glibc + mktemp + grep + textutils + fileutils + bash + libjpeg + libusb + + + + php-snmp + + php + perl + bash + glibc + net-snmp + + + + man-pages-ru + + + + + recode-devel + + recode + + + + ctags + + glibc + + + + tcpdump + + kernel + bash + openssl + glibc + + + + zisofs-tools + + glibc + zlib + + + + kde-i18n-Polish + + + + + docbook-utils + + docbook-style-dsssl + docbook-dtds + perl-SGMLSpm + which + bash + perl + + + + qt-MySQL + + qt + glibc + fontconfig + XFree86-Mesa-libGL + XFree86-Mesa-libGLU + XFree86-libs + mysql + Xft + + + + traceroute + + glibc + + + + cyrus-sasl-plain + + cyrus-sasl + glibc + pam + + + + file-roller + + scrollkeeper + GConf2 + bash + libart_lgpl + atk + libbonobo + bonobo-activation + libbonoboui + glibc + gtk2 + libglade2 + glib2 + libgnome + libgnomecanvas + libgnomeui + gnome-vfs2 + XFree86-libs + linc + ORBit2 + pango + popt + libxml2 + zlib + + + + mod_auth_pgsql + + httpd + glibc + postgresql-libs + + + + XFree86-truetype-fonts + + chkfontpath + XFree86-font-utils + bash + + + + gnome-python2-applet + + libart_lgpl + atk + libbonobo + bonobo-activation + libbonoboui + glibc + GConf2 + gtk2 + glib2 + libgnome + libgnomecanvas + libgnomeui + gnome-vfs2 + XFree86-libs + linc + ORBit2 + gnome-panel + pango + libxml2 + zlib + + + + libcapplet0-devel + + libcapplet0 + gnome-libs-devel + + + + rp-pppoe + + chkconfig + initscripts + fileutils + ppp + kernel + bash + glibc + + + + info + + bash + glibc + ncurses + + + + pwlib-devel + + pwlib + openssl + glibc + expat + libgcc + libstdc++ + + + + attr + + glibc + libattr + + + + kdesdk-kompare + + glibc + kdelibs + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + man-pages-it + + + + + mtr + + glibc + ncurses + libtermcap + + + + cervisia + + glibc + kdelibs + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + fontconfig-devel + + fontconfig + freetype-devel + bash + + + + autofs + + chkconfig + bash + mktemp + sed + gawk + textutils + sh-utils + grep + procps + redhat-release + glibc + hesiod + openldap + + + + ppp + + glibc + pam + bash + + + + autoconf + + info + gawk + m4 + mktemp + perl + textutils + bash + + + + xinitrc + + XFree86 + bash + switchdesk + + + + pam-devel + + pam + + + + mozilla-mail + + fileutils + mozilla + bash + glibc + mozilla-nspr + compat-libstdc++ + + + + ypserv + + gawk + make + portmap + bash + chkconfig + initscripts + glibc + gdbm + + + + arpwatch + + chkconfig + initscripts + bash + glibc + + + + gnome-vfs + + glib + GConf + oaf + gnome-mime-data + glibc + bash + perl + bzip2-libs + openssl + gtk+ + ORBit + XFree86-libs + libxml + zlib + + + + mailx + + glibc + + + + ksirc + + perl + glibc + kdelibs + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + perl-Date-Calc + + glibc + perl-Bit-Vector + perl + + + + diffutils + + info + bash + glibc + + + + ruby-docs + + + + + curl + + bash + openssl + glibc + + + + hpijs + + ghostscript + glibc + libgcc + libstdc++ + + + + tix + + glibc + tcl + tk + + + + gnuplot + + gd + libpng + glibc + XFree86-libs + ncurses + readline + zlib + + + + perl-NKF + + glibc + perl + + + + nc + + bash + glibc + + + + kgeo + + glibc + kdelibs + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + kviewshell + + kview + glibc + kdelibs + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + cups-drivers + + cups + ghostscript + initscripts + bash + + + + plugger + + mozilla + mikmod + xloadimage + sox + glibc + XFree86-libs + + + + FreeWnn + + chkconfig + grep + textutils + shadow-utils + FreeWnn-common + bash + glibc + + + + korn + + glibc + kdelibs + libgcc + XFree86-libs + kdenetwork-libs + libpng + qt + libstdc++ + zlib + + + + gnome-session + + redhat-artwork + redhat-logos + GConf2 + bash + libart_lgpl + atk + audiofile + libbonobo + bonobo-activation + libbonoboui + glibc + esound + gtk2 + glib2 + libgnome + libgnomecanvas + libgnomeui + gnome-vfs2 + XFree86-libs + linc + ORBit2 + pango + libxml2 + zlib + + + + kdeartwork + + kdebase + glibc + kdelibs + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + GConf-devel + + GConf + ORBit-devel + glib-devel + oaf-devel + gtk+-devel + bash + + + + perl-Digest-HMAC + + perl-Digest-SHA1 + perl + + + + gnome-desktop + + redhat-artwork + redhat-menus + bash + glibc + libart_lgpl + atk + libbonobo + bonobo-activation + libbonoboui + GConf2 + gtk2 + glib2 + libgnome + libgnomecanvas + libgnomeui + gnome-vfs2 + XFree86-libs + linc + ORBit2 + pango + libxml2 + zlib + + + + htdig-web + + htdig + glibc + libgcc + libstdc++ + zlib + + + + libogg + + glibc + + + + ncompress + + glibc + + + + pwlib + + glibc + openssl + expat + libgcc + libstdc++ + + + + dos2unix + + glibc + + + + qt2-designer + + qt2-devel + glibc + XFree86-libs + libjpeg + libmng + libpng + compat-libstdc++ + zlib + + + + xemacs-info + + xemacs + bash + + + + hanterm-xf + + XFree86-libs + Xaw3d + ttfonts-ko + glibc + libtermcap + utempter + + + + libgnomecanvas + + gtk2 + glibc + libart_lgpl + atk + libglade2 + glib2 + pango + libxml2 + zlib + + + + time + + info + bash + glibc + + + + kxmlrpcd + + glibc + kdelibs + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + gnome-lokkit + + gnome-libs + iptables + audiofile + glibc + esound + gtk+ + imlib + glib + XFree86-libs + + + + nasm + + info + bash + glibc + + + + gv + + ghostscript + glibc + XFree86-libs + Xaw3d + + + + cyrus-sasl-md5 + + cyrus-sasl + openssl + glibc + + + + gkermit + + glibc + + + + iputils + + glibc + + + + perl-HTML-Tagset + + perl + + + + XFree86-cyrillic-fonts + + chkfontpath + XFree86-font-utils + bash + + + + python-optik + + python + + + + redhat-switchmail + + newt + chkconfig + python + sh-utils + + + + gd + + glibc + freetype + libjpeg + libpng + zlib + + + + pciutils-devel + + + + + recode + + info + glibc + bash + + + + php-pgsql + + php + perl + krb5-libs + openssl + postgresql-libs + bash + glibc + + + + fileutils + + info + grep + bash + libacl + glibc + libtermcap + + + + xsnow + + glibc + XFree86-libs + + + + wmix + + glibc + XFree86-libs + + + + dtach + + glibc + + + + klprfax + + LPRng + kdebase + bash + glibc + kdelibs + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + gcc-objc + + gcc + libobjc + glibc + + + + kview + + glibc + kdelibs + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + rpm-devel + + rpm + glibc + bzip2-libs + libelf + popt + + + + tcllib + + glibc + + + + lftp + + bash + openssl + glibc + libgcc + ncurses + readline + libstdc++ + + + + unzip + + bash + glibc + + + + psacct + + info + bash + glibc + + + + openssl096 + + glibc + + + + kcc + + glibc + + + + linc-devel + + linc + pkgconfig + glib2-devel + bash + glibc + glib2 + + + + mkisofs + + glibc + + + + XFree86-Xnest + + XFree86 + glibc + pam + XFree86-libs + zlib + + + + gtk2 + + glib2 + atk + pango + bash + glibc + fontconfig + freetype + libjpeg + libpng + libtiff + XFree86-libs + Xft + + + + gtk+ + + glib + glibc + XFree86-libs + + + + apmd + + chkconfig + initscripts + bash + glibc + + + + ghostscript + + VFlib2 + zlib + libpng + glib + urw-fonts + ghostscript-fonts + Omni + bash + perl + glibc + cups-libs + gimp-print + XFree86-libs + libstdc++ + freetype + + + + bind-devel + + bind + bash + + + + gnucash + + glibc + info + bash + perl + gnome-libs + audiofile + bonobo + esound + freetype + libgal19 + gtk+ + imlib + gdk-pixbuf + libghttp + libglade + glib + gdk-pixbuf-gnome + libgnomeprint15 + gtkhtml + guile + Guppi + g-wrap + XFree86-libs + ORBit + oaf + popt + libxml + zlib + perl-CPAN + + + + dia + + libxml + redhat-menus + gnome-libs + audiofile + glibc + esound + gtk+ + imlib + gdk-pixbuf + glib + XFree86-libs + libpng + popt + libunicode + zlib + + + + fbset + + perl + glibc + + + + mozilla-devel + + mozilla + glibc + glib + ORBit + mozilla-nspr + compat-libstdc++ + + + + a2ps + + fileutils + sh-utils + info + psutils + bash + perl + glibc + + + + booty + + rhpl + glibc + + + + kdenetwork-libs + + qt + kdelibs + glibc + libgcc + XFree86-libs + libpng + libstdc++ + zlib + + + + rusers + + glibc + + + + fetchmail + + postfix + krb5-libs + openssl + glibc + hesiod + + + + tora + + glibc + kdelibs + qt + libstdc++ + + + + nss_ldap + + nscd + grep + mktemp + sed + textutils + glibc + bash + openldap + pam + + + + gnome-python2-nautilus + + orbit-python + nautilus + sh-utils + libart_lgpl + atk + libbonobo + bonobo-activation + libbonoboui + glibc + eel2 + gail + GConf2 + gtk2 + libglade2 + glib2 + libgnome + libgnomecanvas + libgnomeui + gnome-vfs2 + XFree86-libs + linc + ORBit2 + pango + libxml2 + zlib + + + + dev + + shadow-utils + fileutils + sed + textutils + mktemp + bash + + + + anaconda + + chkconfig + rpm404-python + rhpl + python + atk + glibc + e2fsprogs + gtk2 + glib2 + pango + popt + XFree86-libs + zlib + + + + mktemp + + glibc + + + + jisksp14 + + XFree86-xfs + bash + + + + imlib-devel + + imlib + libtiff-devel + libjpeg-devel + zlib-devel + gtk+-devel + libungif-devel + XFree86-devel + bash + + + + mkinitrd + + dev + e2fsprogs + bash + fileutils + grep + mount + gzip + tar + modutils + losetup + mktemp + findutils + lvm + filesystem + glibc + + + + reiserfs-utils + + glibc + + + + php-dbg-base + + + + + kakasi + + glibc + bash + + + + nvi-m17n + + fileutils + tcsh + bash + perl + + + + kde-i18n-Catalan + + + + + bridge-utils-devel + + + + + kernel-doc + + + + + macutils + + glibc + + + + gawk + + info + mktemp + bash + glibc + + + + tcl + + glibc + + + + raidtools + + MAKEDEV + bash + glibc + + + + gnome-panel + + gnome-desktop + gawk + textutils + fileutils + bash + glibc + libart_lgpl + atk + libbonobo + bonobo-activation + libbonoboui + GConf2 + gtk2 + libglade2 + glib2 + libgnome + libgnomecanvas + libgnomeui + gnome-vfs2 + XFree86-libs + linc + ORBit2 + pango + libpng + popt + libwnck + libxml2 + zlib + + + + octave + + gnuplot + less + info + bash + glibc + blas + libf2c + libgcc + lapack + ncurses + readline + libstdc++ + + + + gimp-devel + + gtk+-devel + gimp + bash + + + + libbonoboui-devel + + libbonoboui + libxml2-devel + ORBit2-devel + bonobo-activation-devel + libbonobo-devel + libgnomecanvas-devel + libgnome-devel + libart_lgpl-devel + gtk2-devel + libglade2-devel + libart_lgpl + atk + libbonobo + bonobo-activation + glibc + GConf2 + gtk2 + glib2 + libgnome + libgnomecanvas + gnome-vfs2 + linc + ORBit2 + pango + popt + libxml2 + zlib + + + + xpdf + + urw-fonts + bash + glibc + freetype + libgcc + XFree86-libs + libstdc++ + + + + unixODBC-kde + + qt + glibc + libgcc + unixODBC + libstdc++ + XFree86-libs + + + + xpdf-korean + + xpdf + + + + scrollkeeper + + intltool + docbook-dtds + openjade + bash + glibc + libxml2 + libxslt + zlib + + + + libgnomeui + + ORBit2 + glib2 + pango + gtk2 + GConf2 + gnome-vfs2 + libgnomecanvas + bonobo-activation + libbonobo + libbonoboui + libxml2 + libgnome + libart_lgpl + libglade2 + esound + Xft + fontconfig + glibc + atk + XFree86-libs + linc + popt + zlib + + + + cdda2wav + + glibc + + + + libraw1394 + + bash + glibc + + + + bind-utils + + glibc + openssl + + + + aspell-en-gb + + aspell + + + + redhat-config-language + + pygtk2 + python + usermode + bash + + + + kudzu + + chkconfig + modutils + pam + hwdata + bash + glibc + newt + popt + + + + nmap + + glibc + + + + man-pages-ja + + + + + comsat + + xinetd + glibc + + + + aspell-fr + + aspell + + + + pxe + + chkconfig + bash + glibc + libgcc + libstdc++ + + + + mozilla-psm + + fileutils + mozilla + mozilla-nss + bash + glibc + mozilla-nspr + compat-libstdc++ + + + + zip + + glibc + + + + libstdc++-devel + + libstdc++ + + + + perl + + perl + glibc + db4 + gdbm + perl-Filter + + + + kregexpeditor-devel + + + + + dietlibc + + + + + w3c-libwww-apps + + w3c-libwww + glibc + zlib + + + + telnet-server + + xinetd + glibc + + + + pygtk2-devel + + pygtk2 + bash + + + + sudo + + pam + bash + glibc + + + + bug-buddy + + gdb + libart_lgpl + atk + libbonobo + bonobo-activation + libbonoboui + glibc + GConf2 + gtk2 + libglade2 + glib2 + libgnome + libgnomecanvas + libgnomeui + gnome-vfs2 + XFree86-libs + linc + ORBit2 + pango + libxml2 + zlib + + + + kde-i18n-Hebrew + + + + + ntsysv + + chkconfig + glibc + newt + popt + + + + pinfo + + glibc + ncurses + + + + jisksp16-1990 + + XFree86-xfs + bash + + + + netdump + + openssh + openssh-clients + fileutils + textutils + gawk + net-tools + bash + + + + redhat-config-services + + chkconfig + gnome-python2 + pygtk2 + pygtk2-libglade + gnome-python2-canvas + rhpl + usermode + usermode-gtk + + + + lm_sensors + + glibc + bash + perl + + + + xfig + + transfig + xpdf + ImageMagick + aspell + htmlview + glibc + XFree86-libs + libjpeg + libpng + Xaw3d + zlib + + + + libjpeg-devel + + libjpeg + + + + flim-xemacs + + xemacs + + + + xpdf-chinese-traditional + + xpdf + + + + sip-devel + + sip + + + + htmlview + + redhat-menus + bash + + + + xsri + + atk + glibc + gtk2 + glib2 + pango + popt + XFree86-libs + + + + tar + + info + bash + glibc + + + + perl-File-MMagic + + perl + + + + wu-ftpd + + fileutils + openssl + xinetd + pam + bash + perl + glibc + + + + pilot-link-devel + + pilot-link + + + + keduca + + glibc + kdelibs + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + kde-i18n-Hungarian + + + + + imlib + + libtiff + libjpeg + zlib + gtk+ + glibc + glib + XFree86-libs + libpng + libungif + + + + logrotate + + bash + glibc + popt + + + + cWnn-common + + FreeWnn-common + shadow-utils + glibc + + + + gnome-libs + + gtk+ + ORBit + imlib + esound + htmlview + utempter + glibc + bash + audiofile + glib + XFree86-libs + libjpeg + libpng10 + zlib + + + + htdig + + bash + glibc + libgcc + libstdc++ + zlib + + + + rdist + + glibc + + + + glibc-devel + + info + glibc-kernheaders + glibc + bash + + + + gcc + + cpp + binutils + glibc-devel + libgcc + info + bash + glibc + + + + sip + + glibc + python + libgcc + qt + libstdc++ + XFree86-libs + + + + mod_ssl + + openssl + dev + textutils + httpd + make + bash + glibc + + + + kghostview + + glibc + kdelibs + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + librsvg + + glib + gtk+ + libxml + gdk-pixbuf + popt + freetype + libpng + glibc + + + + fonts-ISO8859-2-75dpi + + chkfontpath + XFree86-font-utils + bash + + + + gnome-desktop-devel + + gnome-desktop + glib2-devel + gtk2-devel + GConf2-devel + gnome-vfs2-devel + libgnomeui-devel + libgnome-devel + + + + openoffice-libs + + glibc + db4 + freetype + libgcc + XFree86-libs + libstdc++ + + + + rep-gtk + + librep + gtk2 + bash + atk + glibc + libglade2 + glib2 + pango + libxml2 + zlib + + + + guile-devel + + guile + bash + + + + sndconfig + + sox + kudzu + aumix + kernel + glibc + + + + libxslt-python + + libxslt + libxml2 + python + glibc + + + + tcsh + + fileutils + grep + bash + glibc + libtermcap + + + + nut-client + + chkconfig + bash + glibc + + + + aspell-en-ca + + aspell + + + + librpm404-devel + + librpm404 + popt + + + + nasm-rdoff + + glibc + + + + caching-nameserver + + bind + textutils + grep + bash + + + + wmapm + + glibc + XFree86-libs + + + + pspell + + glibc + bash + libgcc + libtool-libs + libstdc++ + + + + kljettool + + glibc + kdelibs + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + pyxf86config + + glib2 + python + bash + glibc + + + + libf2c + + glibc + + + + man + + fileutils + less + groff + findutils + mktemp + bash + glibc + + + + zlib-devel + + zlib + + + + miniChinput + + glibc + fontconfig + libgcc + imlib + libstdc++ + XFree86-libs + Xft + + + + bind + + shadow-utils + chkconfig + textutils + fileutils + sed + bind-utils + initscripts + bash + openssl + glibc + + + + logwatch + + perl + textutils + sh-utils + grep + mailx + bash + + + + libglade2-devel + + libglade2 + libxml2-devel + gtk2-devel + python + + + + pvm + + initscripts + bash + tcsh + glibc + + + + rpm404-python + + librpm404 + python + bzip2-libs + glibc + popt + zlib + + + + talk + + glibc + ncurses + + + + libao + + glibc + + + + qt-Xt + + qt + glibc + fontconfig + XFree86-Mesa-libGL + XFree86-Mesa-libGLU + XFree86-libs + Xft + + + + libuser + + glibc + glib2 + openldap + pam + popt + + + + libole2 + + glibc + glib + + + + nss_db + + glibc + make + + + + sgml-common + + sh-utils + fileutils + textutils + grep + bash + + + + kbd + + pam + usermode + sed + mktemp + initscripts + bash + glibc + + + + gcc-gnat + + gcc + libgnat + info + bash + glibc + + + + perl-Archive-Tar + + perl + + + + pine + + krb5-libs + bash + openssl + glibc + openldap + ncurses + pam + + + + mutt + + slang + postfix + wget + bash + krb5-libs + openssl + glibc + cyrus-sasl + + + + transfig + + tcsh + bash + glibc + libjpeg + libpng + zlib + + + + anaconda-images + + anaconda-runtime + + + + netatalk-devel + + + + + tmpwatch + + psmisc + glibc + + + + wvdial + + ppp + glibc + libgcc + lockdev + libstdc++ + libwvstreams + + + + SDL_net-devel + + SDL_net + + + + bonobo-conf-devel + + bonobo-conf + + + + kdemultimedia-devel + + kdemultimedia-arts + noatun + + + + libglade2 + + libxml2 + glibc + atk + gtk2 + glib2 + pango + zlib + + + + kde-i18n-Afrikaans + + + + + jpilot + + gtk+ + pilot-link + glibc + openssl + glib + XFree86-libs + + + + pilot-link + + glibc + libgcc + libpng + readline + libstdc++ + libtermcap + + + + ruby + + ruby-libs + glibc + + + + xcpustate + + glibc + XFree86-libs + + + + perl-Text-Kakasi + + perl + kakasi + glibc + + + + apel + + emacs + + + + at-spi-devel + + at-spi + gtk2-devel + libbonobo-devel + ORBit2-devel + gail-devel + + + + flex + + glibc + + + + am-utils + + portmap + grep + gawk + findutils + info + chkconfig + bash + perl + glibc + gdbm + hesiod + openldap + + + + sendmail-devel + + + + + kde-i18n-Swedish + + + + + python + + bash + sh-utils + openssl + glibc + db4 + expat + gdbm + gmp + ncurses + readline + libtermcap + zlib + + + + splint + + glibc + + + + kdegames + + glibc + arts + audiofile + kdelibs + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + w3m-el-xemacs + + w3m-el-common + xemacs + flim-xemacs + w3m + + + + SysVinit + + pam + bash + glibc + + + + groff-gxditview + + glibc + XFree86-libs + + + + net-snmp-utils + + net-snmp + bash + perl + openssl + glibc + + + + pango + + glib2 + bash + glibc + fontconfig + freetype + XFree86-libs + Xft + + + + wl-common + + info + bash + + + + libstdc++ + + glibc + libgcc + + + + krb5-devel + + krb5-libs + bash + glibc + + + + knm_new + + XFree86-font-utils + bash + + + + compat-gcc-java + + compat-gcc + compat-libgcj + compat-libgcj-devel + glibc + zlib + + + + libjpeg + + glibc + + + + cleanfeed + + perl + + + + expat-devel + + expat + + + + wordtrans-qt + + wordtrans + glibc + libgcc + qt + libstdc++ + + + + qtcups-devel + + + + + psmisc + + glibc + ncurses + + + + kde-i18n-Czech + + + + + xmms-devel + + xmms + bash + + + + kpf + + glibc + kdelibs + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + wordtrans-kde + + wordtrans + glibc + kdelibs + libgcc + qt + libstdc++ + + + + bonobo + + gnome-libs + ORBit + oaf + libxml + glibc + bash + audiofile + esound + freetype + gtk+ + imlib + gdk-pixbuf + glib + libgnomeprint15 + XFree86-libs + popt + zlib + + + + openssh-askpass-gnome + + openssh + atk + glibc + gtk2 + glib2 + pango + XFree86-libs + + + + kdeaddons-kicker + + kdebase + glibc + kdelibs + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + ed + + info + bash + glibc + + + + openoffice + + XFree86 + perl + openoffice-libs + openoffice-i18n + redhat-menus + chkfontpath + XFree86-font-utils + bash + glibc + libgcc + XFree86-libs + mozilla + mozilla-mail + libstdc++ + zlib + + + + xtoolwait + + glibc + XFree86-libs + + + + gpm-devel + + gpm + + + + libgcc + + glibc + + + + zebra + + grep + chkconfig + info + bash + glibc + ncurses + pam + readline + + + + libmng + + zlib + libjpeg + glibc + + + + bitmap-fonts-cjk + + fontconfig + + + + libgcj + + zip + glibc + libgcc + zlib + + + + pvm-gui + + pvm + tcsh + bash + glibc + tcl + tk + XFree86-libs + + + + nhpf + + glibc + + + + kdeutils-laptop + + kdebase + glibc + kdelibs + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + bzip2-devel + + bzip2 + bzip2-libs + + + + XFree86-Mesa-libGL + + bash + glibc + XFree86-libs + + + + gperf + + info + bash + glibc + libgcc + libstdc++ + + + + rwall-server + + chkconfig + portmap + bash + glibc + + + + libtabe + + db4 + glibc + + + + postgresql-odbc + + glibc + + + + dhcp + + chkconfig + bash + glibc + + + + mtx + + bash + glibc + + + + openjade + + sgml-common + docbook-dtds + glibc + libgcc + libstdc++ + + + + kdepim + + glibc + perl + kdelibs + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + php-devel + + bash + + + + perl-Parse-Yapp + + perl + + + + gnome-audio-extra + + + + + kcoloredit + + glibc + kdelibs + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + qt2-devel + + qt2 + perl + glibc + XFree86-libs + libjpeg + libmng + libpng + compat-libstdc++ + zlib + + + + XFree86-ISO8859-15-75dpi-fonts + + chkfontpath + XFree86-font-utils + bash + + + + procmail + + bash + glibc + + + + dev86 + + bash + glibc + + + + gnumeric + + gnome-libs + libglade + guile + gnome-print + gtk+ + glibc + audiofile + bonobo + esound + freetype + libgal19 + imlib + gdk-pixbuf + glib + gdk-pixbuf-gnome + libole2 + libgnomeprint15 + XFree86-libs + ORBit + oaf + popt + libxml + zlib + + + + rdate + + glibc + + + + redhat-switchmail-gnome + + redhat-switchmail + libglade2 + pygtk2-libglade + pygtk2 + python + chkconfig + + + + perl-XML-Encoding + + perl + perl-XML-Parser + + + + qt-ODBC + + qt + glibc + fontconfig + XFree86-Mesa-libGL + XFree86-Mesa-libGLU + XFree86-libs + unixODBC + Xft + + + + glibc-common + + + + + XFree86-xdm + + XFree86 + pam + xinitrc + bash + glibc + XFree86-libs + + + + kdict + + glibc + kdelibs + libgcc + XFree86-libs + libjpeg + libpng + qt + libstdc++ + zlib + + + + rootfiles + + bash + + + + qt-devel + + qt + perl + glibc + fontconfig + XFree86-Mesa-libGL + XFree86-Mesa-libGLU + XFree86-libs + Xft + zlib + + + + openoffice-i18n + + + + + blas-man + + + + + libdbi-dbd-pgsql + + libdbi + glibc + postgresql-libs + + + + rarpd + + chkconfig + bash + glibc + + + + slocate + + shadow-utils + bash + glibc + + + + mt-st + + glibc + + + + tftp-server + + xinetd + bash + glibc + + + + compat-db + + glibc + compat-libstdc++ + tcl + + + + glibc-debug + + glibc + glibc-devel + + + + tWnn + + FreeWnn-common + cWnn-common + shadow-utils + chkconfig + bash + glibc + + + + tcp_wrappers + + glibc + + + + pam_smb + + glibc + + + + mtools + + info + bash + glibc + + + + pygtk2 + + gtk2 + python + sh-utils + atk + glibc + glib2 + pango + + + + kde-i18n-French + + + + + openldap12 + + glibc + gdbm + + + + open + + glibc + + + + aspell-nl + + aspell + + + + aspell-no + + aspell + + + + vim-minimal + + vim-common + libacl + glibc + libtermcap + + + + rmt + + + + + SDL_net + + SDL + glibc + + + + glibc-profile + + + + + emacspeak + + emacs + info + bash + + + + kWnn + + FreeWnn-common + shadow-utils + chkconfig + bash + glibc + + + + aspell-it + + aspell + + + + groff-perl + + bash + perl + + + + urw-fonts + + chkfontpath + fontconfig + bash + + + + libkscan-devel + + libkscan + + + + alchemist-devel + + alchemist + + + + kmail + + kdenetwork-libs + glibc + kdelibs + libgcc + XFree86-libs + libjpeg + libpng + qt + libstdc++ + zlib + + + + xmlto + + docbook-style-xsl + passivetex + libxslt + docbook-dtds + bash + + + + gnome-vfs-devel + + gnome-vfs + GConf-devel + oaf-devel + bash + + + + SDL-devel + + SDL + XFree86-devel + bash + + + + comps-extras + + python + + + + mgetty-sendfax + + mgetty + netpbm-progs + bash + perl + glibc + + + + rsh + + glibc + + + + postgresql-perl + + perl + glibc + postgresql-libs + + + + kdelibs-devel + + qt-devel + kdelibs + pcre-devel + glibc + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + kcalc + + glibc + kdelibs + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + ftpcopy + + bash + glibc + + + + psutils + + bash + perl + glibc + + + + authconfig + + glibc + pam + glib2 + newt + popt + + + + libusb + + glibc + + + + hdparm + + glibc + + + + XFree86-100dpi-fonts + + chkfontpath + XFree86-font-utils + bash + + + + libcap-devel + + libcap + + + + postgresql-server + + shadow-utils + chkconfig + postgresql + postgresql-libs + bash + krb5-libs + openssl + glibc + pam + readline + libtermcap + zlib + + + + Xlt + + glibc + XFree86-libs + + + + jdkgcj + + gcc-java + libgcj + bash + + + + aspell-pt + + aspell + + + + perl-HTML-Parser + + perl + perl-HTML-Tagset + glibc + + + + kruler + + glibc + kdelibs + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + Xaw3d + + fileutils + glibc + bash + XFree86-libs + + + + ttcp + + glibc + + + + kernel-source + + fileutils + gawk + gcc + bash + glibc + + + + lm_sensors-devel + + lm_sensors + + + + Xtest + + XFree86 + atk + glibc + gtk2 + glib2 + pango + popt + XFree86-libs + + + + gftp + + gtk+ + bash + glibc + glib + ncurses + readline + XFree86-libs + + + + docbook-dtds + + xml-common + fileutils + textutils + grep + perl + libxml2 + sgml-common + bash + + + + privoxy + + shadow-utils + chkconfig + initscripts + sh-utils + bash + glibc + + + + httpd-manual + + + + + zsh + + fileutils + grep + info + libcap + bash + glibc + libtermcap + + + + pidentd + + chkconfig + fileutils + sed + initscripts + util-linux + bash + openssl + glibc + + + + Xft-devel + + Xft + freetype-devel + fontconfig-devel + bash + + + + setserial + + glibc + + + + libobjc + + glibc + + + + bonobo-devel + + bonobo + + + + control-center + + xscreensaver + redhat-menus + bash + glibc + libart_lgpl + atk + audiofile + libbonobo + bonobo-activation + libbonoboui + esound + fontconfig + freetype + GConf2 + gtk2 + libglade2 + glib2 + libgnome + libgnomecanvas + gnome-desktop + libgnomeui + gnome-vfs2 + XFree86-libs + linc + ORBit2 + pango + popt + Xft + libxml2 + zlib + + + + xisdnload + + isdn4k-utils + glibc + XFree86-libs + + + + xboard + + gnuchess + info + desktop-file-utils + bash + perl + glibc + XFree86-libs + + + + gtkhtml2 + + gtk2 + libxml2 + gnome-vfs2 + gail + glibc + libart_lgpl + atk + glib2 + libgnomecanvas + pango + zlib + + + + ypbind + + chkconfig + portmap + yp-tools + bash + glibc + + + + licq + + htmlview + desktop-file-utils + bash + perl + openssl + glibc + libgcc + libstdc++ + + + + inews + + glibc + libelf + + + + redhat-config-securitylevel + + pygtk2 + python + usermode + bash + + + + crontabs + + bash + + + + gnome-vfs2-extras + + gnome-vfs + glibc + cups-libs + + + + net-snmp + + chkconfig + bash + perl + bzip2-libs + openssl + glibc + gnome-libs + libelf + popt + rpm + zlib + + + + dbskkd-cdb + + glibc + + + + kde-i18n-Greek + + + + + libglade-devel + + libglade + gnome-libs-devel + libxml-devel + bash + sh-utils + + + + VFlib2-conf-ja + + VFlib2 + ttfonts-ja + + + + vixie-cron + + sysklogd + bash + chkconfig + initscripts + glibc + + + + perl-libxml-enno + + perl + perl-DateManip + perl-libwww-perl + perl-Parse-Yapp + perl-XML-Encoding + perl-XML-Parser + + + + which + + glibc + + + + libcap + + glibc + + + + redhat-config-packages + + initscripts + usermode + libglade2 + pygtk2-libglade + pygtk2 + python + rhpl + comps-extras + rpm404-python + libxml2-python + gnome-python2 + bash + + + + samba-client + + samba-common + bash + libacl + openssl + glibc + cups-libs + ncurses + pam + popt + readline + + + + kscd + + glibc + perl + kdelibs + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + hwbrowser + + gnome-python2 + usermode + kudzu + parted + bash + + + + cracklib-dicts + + words + bash + cracklib + glibc + + + + man-pages-ko + + man + gzip + + + + aspell-pt_BR + + aspell + + + + gal-devel + + gal + libgal19 + + + + kde-i18n-Norwegian-Nynorsk + + + + + gnome-python2-gtkhtml2 + + gtkhtml2 + atk + glibc + gtk2 + glib2 + pango + libxml2 + zlib + + + + wmclock + + glibc + XFree86-libs + + + + kdetoys + + glibc + kdelibs + libgcc + XFree86-libs + libjpeg + libpng + qt + libstdc++ + zlib + + + + mozilla-nspr + + bash + glibc + + + + eject + + glibc + + + + kdoc + + perl + + + + strace + + glibc + + + + libbonobo + + glibc + bonobo-activation + glib2 + linc + ORBit2 + libxml2 + zlib + + + + pango-devel + + pango + XFree86-devel + glib2-devel + freetype-devel + fontconfig-devel + Xft-devel + + + + elinks + + bash + openssl + glibc + gpm + + + + hwdata + + + + + libusb-devel + + libusb + bash + + + + readline41 + + glibc + + + + tetex-xdvi + + tetex-fonts + bash + glibc + XFree86-libs + w3c-libwww + VFlib2 + Xaw3d + zlib + + + + ktouch + + glibc + kdelibs + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + gail + + atk + gtk2 + libgnomecanvas + glibc + libart_lgpl + glib2 + pango + + + + iproute + + bash + glibc + + + + docbook-style-xsl + + docbook-dtds + xml-common + bash + + + + libkscan + + sane-backends + glibc + kdelibs + libgcc + XFree86-libs + libjpeg + libpng + qt + libstdc++ + libusb + zlib + + + + ImageMagick-devel + + ImageMagick + bash + + + + docbook-utils-pdf + + tetex-dvips + jadetex + docbook-utils + bash + + + + db4-java + + db4 + glibc + + + + libgtop-examples + + libgtop + glibc + gdbm + glib + gnome-libs + guile + + + + libIDL + + glibc + glib2 + + + + linc + + glibc + glib2 + + + + openldap-clients + + openldap + openssl + glibc + gdbm + pam + cyrus-sasl + libtermcap + + + + bash-doc + + + + + unixODBC-devel + + unixODBC + + + + krb5-workstation + + krb5-libs + grep + info + bash + sh-utils + glibc + libtermcap + + + + up2date + + python + rpm + rpm-python + gnupg + sh-utils + rhnlib + chkconfig + mkinitrd + python-optik + rhpl + newt + bash + glibc + + + + libgtop2-devel + + libgtop2 + glib2-devel + + + + ethtool + + glibc + + + + ksnapshot + + glibc + kdelibs + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + vorbis-tools + + libogg + libvorbis + libao + glibc + curl + + + + Xlt-devel + + Xlt + + + + redhat-config-rootpassword + + pygtk2 + python + usermode + libuser + bash + + + + pnm2ppa + + bash + glibc + + + + kdegames-devel + + kdegames + + + + cpio + + info + bash + glibc + + + + kfract + + glibc + kdelibs + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + nmap-frontend + + nmap + gtk+ + glibc + glib + XFree86-libs + + + + tetex-fonts + + bash + + + + textutils + + info + glibc + + + + util-linux + + pam + info + bash + glibc + ncurses + libtermcap + zlib + + + + db4 + + glibc + + + + XFree86-Xvfb + + XFree86 + glibc + pam + zlib + + + + evolution + + scrollkeeper + bonobo + GConf + oaf + mozilla-nss + mozilla-nspr + glibc + sh-utils + perl + gnome-libs + audiofile + bonobo-conf + esound + freetype + libgal19 + gtk+ + imlib + gdk-pixbuf + libglade + glib + gdk-pixbuf-gnome + libgnomeprint15 + gnome-vfs + gnome-pilot + gtkhtml + XFree86-libs + ORBit + openldap + pilot-link + popt + libxml + zlib + + + + lesstif + + XFree86 + glibc + + + + glibc-utils + + glibc + bash + perl + gd + libpng + zlib + + + + qt + + glibc + fontconfig + Xft + fileutils + bash + cups-libs + XFree86-Mesa-libGL + XFree86-Mesa-libGLU + XFree86-libs + libjpeg + libmng + libpng + zlib + + + + libvorbis-devel + + libogg-devel + libvorbis + + + + krb5-libs + + grep + glibc + sh-utils + bash + + + + bison + + info + bash + glibc + + + + net-tools + + glibc + + + + libvorbis + + libogg + glibc + + + + libunicode-devel + + libunicode + bash + + + + amanda + + fileutils + grep + initscripts + tar + bash + glibc + readline + libtermcap + + + + autoconvert + + python + glibc + + + + qt2-static + + qt2-devel + + + + kernel + + fileutils + modutils + initscripts + mkinitrd + bash + + + + asp2php-gtk + + asp2php + glibc + gtk+ + glib + XFree86-libs + + + + lockdev-devel + + lockdev + + + + openmotif-devel + + openmotif + glibc + XFree86-libs + + + + php-manual + + php + + + + adjtimex + + glibc + + + + w3m-el-common + + + + + redhat-config-nfs + + pygtk2 + python + nfs-utils + usermode + bash + + + + efax + + make + bash + glibc + + + + MySQL-python + + python + mx + mysql + glibc + zlib + + + + tmake + + perl + + + + mailcap + + + + + libghttp + + glibc + + + + kdepasswd + + glibc + kdelibs + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + redhat-menus + + + + + kde-i18n-Portuguese + + + + + redhat-release + + bash + + + + aspell-ca + + aspell + + + + ORBit2 + + info + glibc + glib2 + linc + popt + + + + ipvsadm + + bash + glibc + popt + + + + VFlib2-VFjfm + + VFlib2 + bash + + + + libgnome + + glib2 + libbonobo + gnome-vfs2 + libxml2 + ORBit2 + libxslt + GConf2 + utempter + bash + glibc + audiofile + bonobo-activation + bzip2-libs + esound + linc + popt + zlib + + + + krbafs + + glibc + + + + libunicode + + glibc + + + + redhat-config-network + + initscripts + usermode + alchemist + kudzu + libglade2 + pygtk2-libglade + pygtk2 + python + gnome-python2 + wvdial + rhpl + gnome-python2-canvas + sh-utils + + + + tux + + chkconfig + bash + glibc + glib + popt + + + + redhat-config-proc + + procps + usermode + glibc + gtk+ + glib + XFree86-libs + libxml + zlib + + + + qt2 + + glibc + bash + XFree86-libs + libjpeg + libmng + libpng + compat-libstdc++ + zlib + + + + audiofile-devel + + audiofile + pkgconfig + bash + + + + kakasi-dict + + kakasi + + + + screen + + info + ncurses + bash + glibc + pam + utempter + + + + lynx + + indexhtml + bash + perl + openssl + glibc + ncurses + zlib + perl-CGI + + + + MyODBC + + unixODBC + glibc + mysql + zlib + + + + nscd + + chkconfig + shadow-utils + sh-utils + bash + glibc + + + + kfloppy + + kdelibs + glibc + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + joe + + ncurses + glibc + + + + vte + + bitmap-fonts + glibc + atk + fontconfig + freetype + gtk2 + glib2 + pango + Xft + XFree86-libs + + + + XFree86-xauth + + bash + glibc + XFree86-libs + + + + gtk-doc + + docbook-utils + openjade + bash + perl + + + + libghttp-devel + + libghttp + + + + tkinter + + python + glibc + tcl + tix + tk + XFree86-libs + + + + ORBit-devel + + indent + glib-devel + ORBit + bash + glibc + glib + + + + perl-XML-Grove + + perl + perl-libxml-perl + + + + Canna-devel + + Canna-libs + + + + cdrecord + + glibc + + + + lockdev + + shadow-utils + filesystem + bash + glibc + + + + kakasi-devel + + kakasi + + + + ami + + glibc + gtk+ + gdk-pixbuf + glib + XFree86-libs + + + + gnome-pilot + + pilot-link + ORBit + libglade + libxml + gnome-vfs + redhat-menus + glibc + gnome-libs + audiofile + libcapplet0 + esound + GConf + gtk+ + imlib + glib + XFree86-libs + oaf + popt + zlib + + + + mtr-gtk + + mtr + usermode + glibc + gtk+ + glib + ncurses + libtermcap + XFree86-libs + + + + switchdesk-kde + + glibc + libgcc + qt + libstdc++ + + + + libattr + + glibc + + + + modutils + + chkconfig + sh-utils + bash + glibc + + + + kappa20 + + XFree86-font-utils + bash + + + + perl-DBI + + perl + glibc + + + + gdk-pixbuf-gnome + + gdk-pixbuf + glibc + gnome-libs + audiofile + esound + gtk+ + imlib + glib + XFree86-libs + + + + lesstif-devel + + XFree86-devel + lesstif + glibc + XFree86-libs + + + + kernel-smp + + fileutils + modutils + initscripts + mkinitrd + bash + + + + kde-i18n-German + + + + + mysql-server + + chkconfig + shadow-utils + mysql + sh-utils + bash + glibc + libgcc + libstdc++ + zlib + + + + at-spi + + gtk2 + libbonobo + ORBit2 + gail + glibc + libart_lgpl + atk + bonobo-activation + glib2 + libgnomecanvas + XFree86-libs + linc + pango + libxml2 + zlib + + + + db4-devel + + db4 + + + + Glide3-devel + + Glide3 + + + + lv + + glibc + libtermcap + + + + arts + + audiofile + glibc + bash + libgcc + glib2 + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + redhat-switch-printer + + newt + chkconfig + python + sh-utils + + + + php-dbg-client + + php-dbg-base + php-dbg-server + glibc + libgcc + ncurses + pcre + readline + libstdc++ + + + + yp-tools + + ypbind + glibc + + + + libacl + + glibc + libattr + + + + PyQt-devel + + PyQt + + + + Omni-foomatic + + Omni + foomatic + fileutils + bash + + + + php-imap + + php + perl + bash + krb5-libs + openssl + glibc + + + + rhnlib + + pyOpenSSL + python + + + + openssl-perl + + perl + openssl + + + + glib2-devel + + pkgconfig + glib2 + bash + perl + glibc + + + + radvd + + chkconfig + shadow-utils + initscripts + bash + glibc + + + + cracklib + + glibc + + + + php-odbc + + php + perl + grep + unixODBC + bash + glibc + + + + esound + + glibc + bash + audiofile + + + + talk-server + + xinetd + glibc + + + + kde-i18n-Chinese-Big5 + + + + + rsh-server + + pam + glibc + + + + perl-URI + + perl + + + + doxygen + + glibc + libgcc + libstdc++ + + + + nasm-doc + + + + + chkfontpath + + XFree86-xfs + SysVinit + glibc + popt + + + + utempter + + shadow-utils + glibc + fileutils + bash + + + + mgetty-viewfax + + glibc + XFree86-libs + + + + libogg-devel + + libogg + + + + netpbm-progs + + netpbm + bash + perl + glibc + libjpeg + libpng + libtiff + zlib + + + + mount + + mktemp + gawk + diffutils + textutils + fileutils + glibc + + + + licq-kde + + licq + glibc + libgcc + XFree86-libs + kdelibs + qt + libstdc++ + + + + cvs + + info + bash + tcsh + perl + krb5-libs + glibc + zlib + + + + pstack + + glibc + + + + netpbm + + glibc + + + + MagicPoint + + watanabe-vf + VFlib2 + perl + glibc + XFree86-libs + libmng + libpng + freetype + libungif + + + + libgtop + + info + glibc + bash + gdbm + glib + + + + gd-progs + + gd + perl + glibc + freetype + libjpeg + libpng + zlib + + + + procps + + fileutils + glibc + bash + ncurses + + + + man-pages-de + + + + + kfile-png + + glibc + kdelibs + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + pychecker + + python + bash + + + + hexedit + + glibc + ncurses + + + + man-pages-da + + + + + tetex-doc + + bash + perl + + + + libxml2 + + glibc + zlib + + + + aspell-de + + aspell + + + + squid + + chkconfig + logrotate + shadow-utils + bash + perl + glibc + openldap + pam + perl-URI + + + + kde-i18n-Ukrainian + + + + + aspell-da + + aspell + + + + imlib-cfgeditor + + imlib + glibc + gtk+ + glib + XFree86-libs + + + + kde-i18n-Brazil + + + + + chkconfig + + glibc + + + + texinfo + + info + bash + glibc + zlib + + + + switchdesk + + textutils + desktop-file-utils + bash + + + + ttfonts-zh_TW + + chkfontpath + fontconfig + bash + + + + PyXML + + python + glibc + + + + mpage + + glibc + + + + whois + + glibc + + + + perl-Net-DNS + + perl + perl-Digest-HMAC + + + + pax + + glibc + + + + XFree86-ISO8859-9-100dpi-fonts + + chkfontpath + XFree86-font-utils + bash + + + + iscsi + + kernel + chkconfig + bash + glibc + + + + sane-backends-devel + + sane-backends + + + + libgail-gnome + + atk + gtk2 + libgnomeui + at-spi + glibc + libart_lgpl + libbonobo + bonobo-activation + libbonoboui + GConf2 + glib2 + libgnome + libgnomecanvas + gnome-vfs2 + XFree86-libs + linc + ORBit2 + pango + libxml2 + zlib + + + + glade2 + + gail-devel + libart_lgpl + atk + libbonobo + bonobo-activation + libbonoboui + glibc + GConf2 + gtk2 + glib2 + libgnome + libgnomecanvas + libgnomeprint + libgnomeprintui + libgnomeui + gnome-vfs2 + XFree86-libs + linc + ORBit2 + pango + popt + libxml2 + zlib + + + + units + + info + bash + glibc + ncurses + readline + + + + psgml + + sgml-common + emacs + bash + + + + perl-Digest-SHA1 + + glibc + perl + + + + pan + + gtk2 + atk + glibc + glib2 + pango + libxml2 + zlib + + + + ddskk-xemacs + + xemacs + + + + man-pages-cs + + + + + mozilla-nss-devel + + + + + unixODBC + + glibc + libgcc + ncurses + qt + readline + libstdc++ + XFree86-libs + + + + bzip2 + + bzip2-libs + bash + glibc + + + + namazu-devel + + namazu + bash + + + + mod_auth_mysql + + httpd + glibc + mysql + + + + m2crypto + + python + glibc + openssl + + + + openldap + + cyrus-sasl + cyrus-sasl-md5 + mktemp + glibc + openssl + + + + rpm-python + + rpm + python + glibc + sh-utils + bzip2-libs + libelf + popt + + + + gcc-java + + gcc + libgcj + libgcj-devel + info + bash + glibc + zlib + + + + php + + perl + httpd + glibc + bzip2-libs + openssl + curl + db4 + expat + freetype + libgcc + gdbm + gd + gmp + libjpeg + libtool-libs + ncurses + pam + libpng + pspell + libstdc++ + libxml2 + zlib + + + + redhat-config-soundcard + + pygtk2 + python + usermode + sox + rhpl + bash + + + + tftp + + glibc + + + + libacl-devel + + libacl + + + + imap-devel + + + + + gdk-pixbuf-devel + + gdk-pixbuf + gdk-pixbuf-gnome + gnome-libs-devel + bash + + + + kdeartwork-locolor + + + + + filesystem + + setup + + + + namazu-cgi + + namazu + httpd + glibc + + + + joystick + + glibc + + + + kbdconfig + + kbd + glibc + newt + popt + + + + nut-cgi + + httpd + glibc + gd + libpng + zlib + + + + gnome-user-docs + + scrollkeeper + bash + + + + vim-common + + bash + gawk + glibc + + + + xml-common + + sh-utils + fileutils + textutils + grep + + + + less + + bash + glibc + ncurses + + + + glut + + XFree86-Mesa-libGL + glibc + XFree86-Mesa-libGLU + XFree86-libs + + + + libgnomecanvas-devel + + libgnomecanvas + gtk2-devel + libart_lgpl-devel + libglade2-devel + + + + vsftpd + + xinetd + logrotate + libcap + glibc + pam + + + + gdb + + info + bash + glibc + ncurses + + + + xferstats + + glibc + glib + + + + gnome-python2-gconf + + GConf2 + sh-utils + glibc + glib2 + linc + ORBit2 + + + + orbit-python-devel + + + + + kon2 + + sh-utils + textutils + termcap + bash + glibc + + + + samba + + pam + samba-common + logrotate + initscripts + chkconfig + mktemp + psmisc + fileutils + sed + bash + tcsh + perl + libacl + openssl + glibc + cups-libs + popt + perl-CGI + + + + xcdroast + + cdrecord + mkisofs + cdda2wav + usermode + glibc + gtk+ + imlib + glib + XFree86-libs + libjpeg + libpng + libtiff + libungif + zlib + + + + mingetty + + glibc + + + + lapack + + glibc + blas + + + + xscreensaver + + fortune-mod + redhat-logos + pam + bash + perl + atk + glibc + gtk2 + libglade2 + glib2 + XFree86-Mesa-libGL + XFree86-Mesa-libGLU + XFree86-libs + libjpeg + pango + libxml2 + zlib + + + + perl-PDL + + perl + glibc + gsl + perl-Filter + perl-Inline + + + + libgtop-devel + + libgtop + + + + nvi-m17n-canna + + bash + Canna-libs + glibc + libtermcap + + + + cups-devel + + cups-libs + bash + + + + kdebindings-devel + + kdebindings + + + + watanabe-vf + + + + + chromium + + zlib + glibc + libgcc + XFree86-Mesa-libGL + XFree86-Mesa-libGLU + qt + SDL + libstdc++ + XFree86-libs + + + + libbonobo-devel + + libbonobo + bonobo-activation-devel + ORBit2-devel + libxml2-devel + linc-devel + + + + gmp + + glibc + + + + grip + + vorbis-tools + gnome-libs + audiofile + cdparanoia-libs + glibc + esound + libgcc + gtk+ + imlib + libghttp + glib + XFree86-libs + libstdc++ + + + + jcode.pl + + + + + ruby-devel + + ruby-libs + + + + libesmtp-devel + + libesmtp + + + + swig + + glibc + libgcc + libstdc++ + + + + orbit-python + + ORBit2 + linc + libIDL + glib2 + python + sh-utils + glibc + + + + libcapplet0 + + glibc + gnome-libs + audiofile + esound + gtk+ + imlib + glib + XFree86-libs + ORBit + + + + libglade + + gnome-libs + libxml + glibc + audiofile + esound + gtk+ + imlib + glib + XFree86-libs + zlib + + + + xcin + + libtabe + glibc + db4 + XFree86-libs + + + + kde-i18n-Romanian + + + + + kde2-compat + + qt2 + openssl + fileutils + bash + glibc + perl + python + audiofile + bzip2-libs + cups-libs + fam + XFree86-libs + libjpeg + pcre + libpng + compat-libstdc++ + libtiff + libxml2 + libxslt + zlib + + + + ytalk + + glibc + XFree86-libs + ncurses + + + + kde-i18n-Icelandic + + + + + minicom + + lockdev + bash + glibc + ncurses + + + + XFree86-Mesa-libGLU + + bash + glibc + libgcc + libstdc++ + + + + perl-Bit-Vector + + glibc + perl-Date-Calc + perl + + + + rusers-server + + chkconfig + portmap + bash + glibc + procps + + + + man-pages + + + + + perl-DB_File + + perl + glibc + db4 + + + + postgresql-tcl + + tcl + glibc + bash + e2fsprogs + openssl + krb5-libs + pam + postgresql-libs + readline + libtermcap + zlib + + + + grub + + info + mktemp + bash + glibc + + + + gnome-libs-devel + + gnome-libs + gtk+-devel + ORBit-devel + imlib-devel + esound-devel + bash + perl + + + + kdf + + kdebase + glibc + kdelibs + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + redhat-config-users + + libuser + python + pygtk2 + pygtk2-libglade + usermode + bash + + + + kiconedit + + glibc + kdelibs + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + switchdesk-gnome + + glibc + gtk+ + glib + XFree86-libs + + + + pspell-devel + + pspell + + + + perl-libxml-perl + + perl + perl-XML-Parser + + + + intltool + + patch + bash + perl + + + + rpm + + gawk + fileutils + textutils + mktemp + shadow-utils + popt + libelf + bash + bzip2-libs + glibc + + + + automake + + perl + info + bash + + + + shadow-utils + + glibc + + + + libwvstreams-devel + + libwvstreams + + + + perl-TimeDate + + perl + + + + kdeaddons-konqueror + + kdebase + arts + kdelibs + audiofile + glibc + libgcc + XFree86-libs + libjpeg + libpng + qt + libstdc++ + zlib + + + + ddd + + info + openmotif + bash + sh-utils + glibc + libelf + libgcc + XFree86-libs + ncurses + libstdc++ + + + + x3270-text + + x3270 + glibc + ncurses + readline + libtermcap + + + + gtkhtml-devel + + gtkhtml + gnome-libs-devel + gnome-print-devel + libunicode-devel + gdk-pixbuf-devel + libglade-devel + libxml-devel + bonobo-devel + gal-devel + + + + dvgrab + + glibc + libgcc + libraw1394 + libstdc++ + + + + Canna-libs + + bash + glibc + + + + cups-drivers-pnm2ppa + + pnm2ppa + ghostscript + initscripts + bash + + + + anacron + + bash + vixie-cron + chkconfig + glibc + + + + syslinux + + glibc + + + + gnome-games + + scrollkeeper + bash + libart_lgpl + atk + audiofile + libbonobo + bonobo-activation + libbonoboui + glibc + esound + GConf2 + gtk2 + glib2 + libgnome + libgnomecanvas + libgnomeui + gnome-vfs2 + guile + XFree86-libs + linc + ncurses + ORBit2 + pango + libxml2 + zlib + + + + kdesdk-kbabel + + python + glibc + kdelibs + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + kde-i18n-Danish + + + + + mailman + + shadow-utils + postfix + vixie-cron + httpd + python + mktemp + bash + sh-utils + glibc + + + + MAKEDEV + + bash + glibc + + + + nmh + + fileutils + bash + glibc + libtermcap + + + + vim-enhanced + + vim-common + bash + libacl + glibc + gpm + ncurses + perl + + + + kde-i18n-Turkish + + + + + libuser-devel + + libuser + + + + libesmtp + + glibc + openssl + + + + Guppi + + glibc + gnome-libs + audiofile + bonobo + esound + freetype + libgal19 + gtk+ + imlib + gdk-pixbuf + libglade + glib + gdk-pixbuf-gnome + libgnomeprint15 + XFree86-libs + ORBit + oaf + libxml + zlib + + + + glut-devel + + glut + XFree86-Mesa-libGL + XFree86-devel + + + + glade + + gnome-libs + audiofile + glibc + esound + gtk+ + imlib + glib + XFree86-libs + + + + acl + + libacl + libattr + glibc + + + + gimp-print-devel + + gimp-print + bash + + + + iptraf + + glibc + ncurses + + + + khexedit + + kdelibs + glibc + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + abiword + + libpng10 + chkfontpath + bash + glibc + libgcc + gtk+ + glib + libtool-libs + libpng + pspell + libstdc++ + XFree86-libs + libxml2 + zlib + + + + libtool + + info + autoconf + automake + m4 + perl + libtool-libs + mktemp + bash + + + + festival-devel + + festival + + + + libgnomeprint15 + + glibc + gnome-libs + audiofile + esound + freetype + gtk+ + imlib + gdk-pixbuf + glib + XFree86-libs + libxml + zlib + + + + libavc1394 + + bash + glibc + libraw1394 + + + + gail-devel + + gail + gtk2-devel + libgnomecanvas-devel + + + + libtiff + + zlib + libjpeg + glibc + + + + compat-gcc-objc + + compat-gcc + libobjc + glibc + + + + redhat-artwork + + redhat-logos + qt + + + + xdelta-devel + + xdelta + + + + aumix + + initscripts + glibc + gpm + ncurses + + + + g-wrap + + guile + glibc + + + + libungif + + glibc + XFree86-libs + + + + mod_python + + httpd + glibc + + + + knode + + kdenetwork-libs + glibc + kdelibs + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + kooka + + libkscan + sane-backends + glibc + kdelibs + libgcc + XFree86-libs + libjpeg + libpng + qt + libstdc++ + libusb + zlib + + + + w3m + + indexhtml + perl + openssl + ImageMagick + bash + glibc + gpm + XFree86-libs + imlib + libjpeg + ncurses + libpng + libtiff + libungif + zlib + + + + httpd + + mailcap + gawk + file + findutils + chkconfig + mktemp + fileutils + sh-utils + textutils + shadow-utils + bash + openssl + glibc + db4 + expat + gdbm + zlib + + + + XFree86-ISO8859-15-100dpi-fonts + + chkfontpath + XFree86-font-utils + bash + + + + rcs + + glibc + + + + netatalk + + chkconfig + initscripts + pam + tcp_wrappers + openssl + cracklib + bash + perl + glibc + + + + emacs + + info + dev + bash + perl + glibc + XFree86-libs + libjpeg + ncurses + libpng + libtiff + libungif + Xaw3d + zlib + + + + perl-libwww-perl + + perl + perl-URI + perl-HTML-Parser + + + + groff + + mktemp + info + bash + glibc + libgcc + libstdc++ + + + + wine-devel + + wine + + + + glib + + glibc + + + + mozilla-js-debugger + + fileutils + mozilla + bash + + + + hotplug-gtk + + gnome-libs + audiofile + glibc + esound + gtk+ + imlib + glib + XFree86-libs + + + + openssh-server + + openssh + chkconfig + shadow-utils + pam + bash + krb5-libs + openssl + glibc + zlib + + + + kde-i18n-Slovak + + + + + redhat-switch-printer-gnome + + redhat-switch-printer + libglade2 + pygtk2-libglade + pygtk2 + python + chkconfig + + + + dmalloc + + info + bash + glibc + + + + unarj + + glibc + + + + gaim + + gtk+ + glibc + gnome-desktop + aspell + htmlview + bash + audiofile + esound + gdk-pixbuf + glib + XFree86-libs + + + + libmrproject + + gtk2 + glibc + + + + gnome-python2-bonobo + + orbit-python + bonobo-activation + libbonobo + libbonoboui + libart_lgpl + atk + glibc + GConf2 + gtk2 + glib2 + libgnome + libgnomecanvas + gnome-vfs2 + linc + ORBit2 + pango + libxml2 + zlib + + + + bridge-utils + + glibc + + + + VFlib2-devel + + VFlib2 + bash + + + + 4Suite + + python + PyXML + sh-utils + glibc + + + + cdrdao + + glibc + libgcc + libstdc++ + + + + flim + + emacs + apel + info + + + + initscripts + + mingetty + gawk + sed + mktemp + e2fsprogs + procps + sysklogd + setup + psmisc + which + grep + modutils + util-linux + mount + bash + SysVinit + iproute + iputils + net-tools + bdflush + redhat-release + chkconfig + shadow-utils + fileutils + sh-utils + glibc + + + + libxml2-python + + libxml2 + python + glibc + + + + xpdf-chinese-simplified + + xpdf + + + + XFree86-xfs + + fileutils + sed + shadow-utils + chkconfig + XFree86-font-utils + XFree86-libs + bash + glibc + zlib + + + + gphoto2 + + hotplug + glibc + grep + fileutils + lockdev + bash + glib + libjpeg + ncurses + readline + libusb + + + + perl-CGI + + perl + + + + lvm + + glibc + bash + + + + newt-devel + + slang-devel + newt + glibc + + + + procinfo + + perl + glibc + libtermcap + + + + perl-BSD-Resource + + glibc + perl + + + + koffice-devel + + + + + krbafs-devel + + krbafs + + + + koncd + + cdrecord + mkisofs + arts + audiofile + glibc + kdelibs + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + hotplug + + usbutils + chkconfig + bash + glibc + + + + compat-libstdc++ + + bash + glibc + libgcc + + + + inn + + chkconfig + grep + textutils + sed + fileutils + sh-utils + cleanfeed + bash + inews + perl + glibc + db4 + libelf + + + + at + + fileutils + chkconfig + bash + glibc + + + + file + + glibc + + + + rwall + + glibc + + + + samba-common + + bash + libacl + openssl + glibc + cups-libs + pam + popt + + + + mozilla-chat + + fileutils + mozilla + bash + + + + anaconda-help + + + + + oaf + + glibc + perl + glib + ORBit + popt + libxml + zlib + + + + kdevelop + + kdelibs-devel + make + perl + autoconf + automake + flex + qt-designer + bash + glibc + kdelibs + libgcc + XFree86-libs + libjpeg + libpng + qt + libstdc++ + zlib + + + + uucp + + fileutils + info + lockdev + bash + perl + glibc + + + + freetype + + bash + glibc + + + + perl-suidperl + + perl + glibc + + + + gettext + + info + bash + python + glibc + libgcc + libgcj + zlib + + + + cdparanoia-devel + + cdparanoia-libs + + + + gtoaster + + cdrecord + cdrdao + mkisofs + cdda2wav + sox + usermode + glibc + gtk+ + glib + ORBit + XFree86-libs + + + + esound-devel + + esound + audiofile-devel + bash + + + + gimp-data-extras + + + + + XFree86-font-utils + + glibc + freetype + libgcc + libstdc++ + XFree86-libs + zlib + + + + redhat-config-keyboard + + pygtk2 + python + usermode + rhpl + pyxf86config + bash + + + + stat + + glibc + + + + gnumeric-devel + + gnumeric + + + + star + + libacl + glibc + + + + rwho + + chkconfig + bash + glibc + + + + nvi-m17n-nocanna + + bash + glibc + libtermcap + + + + telnet + + glibc + ncurses + + + + kdebindings-kdejava + + kdelibs + kdebindings-qtjava + libgcj + glibc + libgcc + XFree86-libs + libjpeg + pcre + libpng + qt + libstdc++ + zlib + + + + kppp + + usermode + bash + glibc + kdelibs + libgcc + XFree86-libs + libpng + qt + libstdc++ + zlib + + + + man-pages-pl + + + + + readline + + info + glibc + bash + + + + curl-devel + + curl + bash + + + + slang + + glibc + + + + eog + + bash + libart_lgpl + atk + libbonobo + bonobo-activation + libbonoboui + glibc + GConf2 + gtk2 + glib2 + libgnome + libgnomecanvas + libgnomeprint + libgnomeui + gnome-vfs2 + XFree86-libs + libjpeg + linc + ORBit2 + pango + libpng + popt + librsvg2 + libxml2 + zlib + + + + kuickshow + + glibc + kdelibs + libgcc + XFree86-libs + imlib + libjpeg + libpng + qt + libstdc++ + libtiff + libungif + zlib + + + + yelp + + scrollkeeper + gtk2 + gnome-vfs2 + gtkhtml2 + libgnomeui + libbonobo + libart_lgpl + atk + bonobo-activation + libbonoboui + glibc + GConf2 + glib2 + libgnome + libgnomecanvas + XFree86-libs + linc + ORBit2 + pango + popt + libxml2 + libxslt + zlib + + + + Omni + + glibc + cups-libs + + + + tetex-afm + + tetex + bash + glibc + + + + slrn-pull + + slrn + bash + openssl + glibc + slang + + + + kdebindings-kdec + + qt + kdebindings-qtc + glibc + kdelibs + libgcc + XFree86-libs + libjpeg + pcre + libpng + libstdc++ + zlib + + + + usbutils + + hwdata + glibc + + + + e2fsprogs + + glibc + + + + audiofile + + glibc + bash + + + + XFree86-ISO8859-2-75dpi-fonts + + chkfontpath + XFree86-font-utils + bash + + + + ttfonts-zh_CN + + chkfontpath + XFree86-font-utils + fontconfig + bash + + + + cdlabelgen + + perl + + + + ghostscript-fonts + + ghostscript + fontconfig + + + + FreeWnn-libs + + bash + glibc + + + + qt2-Xt + + qt2 + glibc + compat-libstdc++ + XFree86-libs + + + + cpp + + info + bash + glibc + + + + oprofile + + kernel + bash + binutils + glibc + libgcc + popt + qt + libstdc++ + + + + sash + + + + 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 @@ + + + + + + + + + + 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 @@ +hello \ 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 @@ + + + + + + + + + + + + + + + + + + + + + + + \ 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 @@ + + + + + + + + \ No newline at end of file diff --git a/test/relaxng/docbook.rng b/test/relaxng/docbook.rng new file mode 100644 index 0000000..85a6aed --- /dev/null +++ b/test/relaxng/docbook.rng @@ -0,0 +1,9141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + changed + added + deleted + off + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + BMP + CGM-CHAR + CGM-BINARY + CGM-CLEAR + DITROFF + DVI + EPS + EQN + FAX + GIF + GIF87a + GIF89a + JPG + JPEG + IGES + PCX + PIC + PNG + PS + SGML + TBL + TEX + TIFF + WMF + WPG + linespecific + + + + + + + + + + + + + + + + + + + + + + left + right + center + + + + + + + + + + + + 0 + 1 + + + + + + + + + click + double-click + press + seq + simul + other + + + + + + + + + + + + + + + + + + + + linespecific + + + + + + numbered + unnumbered + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + refentry + none + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + qanda + number + none + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + optional + required + + + + + + + + + + + + + + + + + + + + + + optional + required + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + other + sect1 + sect2 + sect3 + sect4 + sect5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + normal + compact + + + + + + + + + + + + + + + + + + + + + + + + + arabic + upperalpha + loweralpha + upperroman + lowerroman + + + + + + + inherit + ignore + + + + + + + continues + restarts + + + + + + + normal + compact + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + inline + vert + horiz + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + calspair + linecolumn + linerange + linecolumnpair + other + + + + + + + + + + + + + + + + + + + + + + + + + + calspair + linecolumn + linerange + linecolumnpair + other + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + calspair + linecolumn + linerange + linecolumnpair + other + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + monospaced + normal + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + 1 + + + + + + + 0 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + 1 + + + + + + + 0 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + BMP + CGM-CHAR + CGM-BINARY + CGM-CLEAR + DITROFF + DVI + EPS + EQN + FAX + GIF + GIF87a + GIF89a + JPG + JPEG + IGES + PCX + PIC + PNG + PS + SGML + TBL + TEX + TIFF + WMF + WPG + linespecific + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + left + right + center + + + + + + + + + + + + 0 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + left + right + center + + + + + + + + + + + + 0 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + opt + req + plain + + + + + + + norepeat + repeat + + + + + + + + + + + + + + + + + + + + + + + + + + + + + opt + req + plain + + + + + + + norepeat + repeat + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + class + interface + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + opt + req + plain + + + + + + + norepeat + repeat + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + BMP + CGM-CHAR + CGM-BINARY + CGM-CLEAR + DITROFF + DVI + EPS + EQN + FAX + GIF + GIF87a + GIF89a + JPG + JPEG + IGES + PCX + PIC + PNG + PS + SGML + TBL + TEX + TIFF + WMF + WPG + linespecific + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + service + trade + registered + copyright + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + hardware + software + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + name + table + field + key1 + key2 + record + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + headerfile + devicefile + libraryfile + directory + symlink + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + limit + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + cartridge + cdrom + disk + tape + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + command + function + option + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + command + function + option + parameter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + attribute + attvalue + element + endtag + emptytag + genentity + numcharref + paramentity + pi + xmlpi + starttag + sgmlcomment + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + limit + + + + + + + + + + + + + + + + + + + + + + + + + + + constant + groupname + library + macro + osname + resource + systemname + username + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + article + book + chapter + part + refentry + section + journal + series + set + manuscript + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + service + trade + registered + copyright + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + all + global + local + + + + + + + preferred + normal + + + + + + + singular + startofrange + endofrange + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sect2 + sect3 + sect4 + sect5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sect1 + sect3 + sect4 + sect5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sect1 + sect2 + sect4 + sect5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sect1 + sect2 + sect3 + sect5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sect1 + sect2 + sect3 + sect4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + journalarticle + productsheet + whitepaper + techreport + specification + faq + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + top + bottom + topbot + all + sides + none + + + + + + + 0 + 1 + + + + + + + 0 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + top + bottom + topbot + all + sides + none + + + + + + + 0 + 1 + + + + + + + 0 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + 0 + 1 + + + + + + + 0 + 1 + + + + + + + left + right + center + justify + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + 1 + + + + + + + 0 + 1 + + + + + + + left + right + center + justify + char + + + + + + + + + + + + + + + + + + + + + + + + + + + + top + middle + bottom + + + + + + + + + + + + + + + + + + top + middle + bottom + + + + + + + + + + + + + + + + + + 0 + 1 + + + + + + + top + middle + bottom + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + 1 + + + + + + + 0 + 1 + + + + + + + left + right + center + justify + char + + + + + + + + + + + + + + + + + top + middle + bottom + + + + + diff --git a/test/relaxng/docbook_0.xml b/test/relaxng/docbook_0.xml new file mode 100644 index 0000000..ede051d --- /dev/null +++ b/test/relaxng/docbook_0.xml @@ -0,0 +1,4448 @@ + + + + + + + + + + + + +]> + + + +
      + + + + + + David + Mason + + Red Hat, Inc. +
      + dcm@redhat.com +
      +
      +
      + + + Daniel + Mueth + +
      + d-mueth@uchicago.edu +
      +
      +
      + + + Alexander + Kirillov + +
      + kirillov@math.sunysb.edu +
      +
      +
      + +
      + + + This is a pre-release! + + + + + + 0.99 + + + 04.10.2000 + + + + + + 2000 + Red Hat, Inc., Daniel Mueth, and Alexander Kirillov + + + + + Permission is granted to copy, distribute and/or modify this + document under the terms of the GNU Free Documentation + License, 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 GNU Free Documentation License from + the Free Software Foundation by visiting their Web site or by writing to: + Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + + + 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. + + + + The GNOME Handbook of Writing Software Documentation + +
      + + + + + Introduction + + + + + The GNOME Documentation Project + + + Goals + + 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 + GNOME Help Browser, 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 APIs for the GNOME libraries, GNOME White + Papers, GNOME developer tutorials, the GNOME Developer + FAQ, the GNOME + Developer's Website, and GNOME + Handbook's, such as the one you are reading. + User documentation include the GNOME User's + Guide, the GNOME FAQ, and + GNOME application documentation. Most GNOME applications + have their own manual in addition to context sensitive help. + + + + + Joining the GDP + + 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 + + gnome-doc-list mailing list . + Read , 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 + + GDP Website. + + + + + Collaborating with the GDP + + 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 + gnome-doc-list mailing list + 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. + + + + + + + + Notation and Conventions + + This Handbook uses the following notation: + + +
    Entity TypeCharacter
    ParameterInternal +GeneralExternal Parsed +GeneralUnparsed
    Reference +in ContentNot recognizedIncludedIncluded if validatingForbiddenIncluded
    Reference +in Attribute ValueNot recognizedIncluded in literalForbiddenForbiddenIncluded
    Occurs as +Attribute ValueNot recognizedForbiddenForbiddenNotifyNot recognized
    Reference +in EntityValueIncluded in literalBypassedBypassedForbiddenIncluded
    Reference +in DTDIncluded as PEForbiddenForbiddenForbiddenForbidden
    + + + + + + +
    hello !
    +

    end

    + 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 @@ + + + + + + + + + + addressBook + + + + + card + + + + name + + + + + + + givenName + + + + + + + + familyName + + + + + + + + + email + + + + + + + + + + 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 @@ + + + + + + + + + + + + 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 @@ + + + John Smith + js@example.com + + + Fred Bloggs + fb@example.net + + 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 @@ + + + + + + + + + + + + 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 @@ + + + John Smith + js@example.com + + + Fred Bloggs + fb@example.net + + 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 @@ + + + + + + + + + + + + + + + + + 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 @@ + + + John Smith + js@example.com + + + Fred Bloggs + fb@example.net + + 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 @@ + + + + + + + + + + + + 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 @@ + + + John Smith + js@example.com + + + Fred Bloggs + fb@example.net + + 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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 @@ + + + John + Smith + js@example.com + + + Fred Bloggs + fb@example.net + + 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 @@ + + + + + + + + + + + + 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 @@ + + + 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 @@ + + + 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 @@ + + + + + + + + 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 @@ +js@example.comJohn Smith 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 @@ + + + + + + + + + + + + + + + + + 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 @@ + + + + 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 @@ + + + + + + + + + + + + + + + + + + + + + + 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 @@ + + + + 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 @@ + + + + + + + + + + + + + + + + + + + + + + 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 @@ + + + +John Smith +js@example.com +John Smithjs@example.com + 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 @@ + +js@example.comJohn Smith + 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 @@ + + + + + + + + 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 @@ + + + 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 @@ + + 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 @@ + 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 @@ + + + + + + + + + + + + + + + + + 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 @@ + + foobar + foobar + 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 @@ + + + + + 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 @@ + 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 @@ + + + + + + + + + + + + + + + + + + + + + + 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 @@ + + John Smithjs@example.com" + John Smith2js2@example.com" + 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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 @@ + + John Smithjs@example.com" + John Smith2js2@example.com" + 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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 @@ +

    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 @@ +

    a

    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 @@ +

    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 @@ +

    c

    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 @@ +

    abcdefg

    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 @@ +

    abcdefg

    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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 @@ +

    abcdefg

    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 @@ + + + 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 @@ +5 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 @@ + + + + + + + + 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 @@ +15.20 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 @@ + + + + + + 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 @@ +5fails 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 @@ + + + + + + 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 @@ +5 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 @@ + + + 127 + + 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 @@ + + + + + + html + text + + + 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 @@ + 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 @@ + 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 @@ + 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 @@ + 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 @@ + + 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 @@ + + + + + + + + + + html + text + + + 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 @@ + + John Smith + js@example.com + text + 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 @@ + + John Smith + js@example.com + html + 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 @@ + + John Smith + js@example.com + html + 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 @@ + + John Smith + js@example.com + error + 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 @@ + + + + + + html + text + + + 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 @@ + 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 @@ + + + + + + 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 @@ +1.2 3.4 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 @@ +1.2 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 @@ +1.2 3.4 5.6 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 @@ + 1.2 3.4 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 @@ + + + + + + + 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 @@ +1.2 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 @@ +1.2 3.4 5.6 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 @@ + 1.2 3.4 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 @@ + 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 @@ + + + + + + + + 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 @@ +1.2 3.4 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 @@ +1.2 3.4 5 6 7 8 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 @@ + 1.2 3.4 5 6 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 @@ +1.2 3.4 5.6 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 @@ +1.2 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 @@ + + + + + + + + + + + + + + + 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 @@ + + + b@b + b + + 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 @@ + + + b + b@b + + + 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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 @@ + + meta1 + foo + meta2 + 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 @@ + + meta + meta + + link + + + link + + base + foo + meta + + link + + meta + meta + meta + meta + meta + + link + + + link + + + link + + + link + + + link + + 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 @@ + + title + 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 @@ + + meta1 + foo + meta2 + error + 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 @@ + + meta2 + 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 @@ + + base + foo + error + 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 @@ + + + + + + + + + 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 @@ + how are you

    'yau de poelle

    ?
    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 @@ + + + + + + + + + + + + + + + + + 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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + 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 @@ + +

    abcdefg

    +
    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 @@ + + + + + + + + + + + + + + + + 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 @@ + + foobar + 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 @@ + + + + + + + + + + + + + + + + + + + + + + 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 @@ + + foobar + 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 @@ + + + foo + bar + this guy is annoying ! + + 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 @@ + + + + + + + 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 @@ + +
    a + a + 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 @@ + + a + a + 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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 @@ + a b c d e 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 @@ + a b c d foo e 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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 @@ + a b c d e 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 @@ + a b c d foo e 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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + 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 @@ + + + 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 @@ + + + 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 @@ + + + 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 @@ + + + + + + + + + + + + + + + + + + + + + + + + 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 @@ + + + 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 @@ + + + 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 @@ + + + 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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + 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 @@ + +

    abcdefg

    +
    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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 @@ + +

    abcdefg

    +
    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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 @@ + +

    abcdefg

    +
    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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + choice + interleave + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/schemas/570702_0.xml b/test/schemas/570702_0.xml new file mode 100644 index 0000000..774e56f --- /dev/null +++ b/test/schemas/570702_0.xml @@ -0,0 +1,13 @@ + + + + + 15 + 127 + 15 + 127 + 15 + 127 + + diff --git a/test/schemas/570702_0.xsd b/test/schemas/570702_0.xsd new file mode 100644 index 0000000..397a4d6 --- /dev/null +++ b/test/schemas/570702_0.xsd @@ -0,0 +1,25 @@ + + + + + + + Destination Number Length + + + + + + + + + + + destroy flag + + + + + + diff --git a/test/schemas/579746_0.xml b/test/schemas/579746_0.xml new file mode 100644 index 0000000..7e42f2a --- /dev/null +++ b/test/schemas/579746_0.xml @@ -0,0 +1,3 @@ + + + diff --git a/test/schemas/579746_0.xsd b/test/schemas/579746_0.xsd new file mode 100644 index 0000000..1695fe6 --- /dev/null +++ b/test/schemas/579746_0.xsd @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/test/schemas/579746_1.xml b/test/schemas/579746_1.xml new file mode 100644 index 0000000..12f3d4d --- /dev/null +++ b/test/schemas/579746_1.xml @@ -0,0 +1,4 @@ + + + + diff --git a/test/schemas/579746_1.xsd b/test/schemas/579746_1.xsd new file mode 100644 index 0000000..e354967 --- /dev/null +++ b/test/schemas/579746_1.xsd @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/test/schemas/579746_2.xml b/test/schemas/579746_2.xml new file mode 100644 index 0000000..5d16dea --- /dev/null +++ b/test/schemas/579746_2.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/test/schemas/579746_3.xml b/test/schemas/579746_3.xml new file mode 100644 index 0000000..aedcc21 --- /dev/null +++ b/test/schemas/579746_3.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/test/schemas/579746_4.xml b/test/schemas/579746_4.xml new file mode 100644 index 0000000..94bdc55 --- /dev/null +++ b/test/schemas/579746_4.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/test/schemas/579746_5.xml b/test/schemas/579746_5.xml new file mode 100644 index 0000000..b4b1350 --- /dev/null +++ b/test/schemas/579746_5.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/test/schemas/582887-attribute.xsd b/test/schemas/582887-attribute.xsd new file mode 100644 index 0000000..75d7d4a --- /dev/null +++ b/test/schemas/582887-attribute.xsd @@ -0,0 +1,12 @@ + + + + + + + + + + diff --git a/test/schemas/582887-common.xsd b/test/schemas/582887-common.xsd new file mode 100644 index 0000000..c1c385d --- /dev/null +++ b/test/schemas/582887-common.xsd @@ -0,0 +1,8 @@ + + + + + + diff --git a/test/schemas/582887-element.xsd b/test/schemas/582887-element.xsd new file mode 100644 index 0000000..0562021 --- /dev/null +++ b/test/schemas/582887-element.xsd @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/test/schemas/582887_0.xml b/test/schemas/582887_0.xml new file mode 100644 index 0000000..0a74714 --- /dev/null +++ b/test/schemas/582887_0.xml @@ -0,0 +1,7 @@ + + + + diff --git a/test/schemas/582887_0.xsd b/test/schemas/582887_0.xsd new file mode 100644 index 0000000..a3b175a --- /dev/null +++ b/test/schemas/582887_0.xsd @@ -0,0 +1,17 @@ + + + + + + + + + + + + + diff --git a/test/schemas/582906-1-common.xsd b/test/schemas/582906-1-common.xsd new file mode 100644 index 0000000..aa7cbda --- /dev/null +++ b/test/schemas/582906-1-common.xsd @@ -0,0 +1,6 @@ + + + + diff --git a/test/schemas/582906-1-prog1.xsd b/test/schemas/582906-1-prog1.xsd new file mode 100644 index 0000000..33dde56 --- /dev/null +++ b/test/schemas/582906-1-prog1.xsd @@ -0,0 +1,11 @@ + + + + + + + diff --git a/test/schemas/582906-1-prog2-include.xsd b/test/schemas/582906-1-prog2-include.xsd new file mode 100644 index 0000000..8701cfc --- /dev/null +++ b/test/schemas/582906-1-prog2-include.xsd @@ -0,0 +1,9 @@ + + + + + + + diff --git a/test/schemas/582906-1-prog2.xsd b/test/schemas/582906-1-prog2.xsd new file mode 100644 index 0000000..4528fff --- /dev/null +++ b/test/schemas/582906-1-prog2.xsd @@ -0,0 +1,13 @@ + + + + + + + + + diff --git a/test/schemas/582906-1_0.xml b/test/schemas/582906-1_0.xml new file mode 100644 index 0000000..311d85f --- /dev/null +++ b/test/schemas/582906-1_0.xml @@ -0,0 +1,5 @@ + +5.3 diff --git a/test/schemas/582906-1_0.xsd b/test/schemas/582906-1_0.xsd new file mode 100644 index 0000000..578f5a4 --- /dev/null +++ b/test/schemas/582906-1_0.xsd @@ -0,0 +1,20 @@ + + + + + + + + + + + diff --git a/test/schemas/582906-2-common.xsd b/test/schemas/582906-2-common.xsd new file mode 100644 index 0000000..c3b8c37 --- /dev/null +++ b/test/schemas/582906-2-common.xsd @@ -0,0 +1,7 @@ + + + + diff --git a/test/schemas/582906-2-prog1.xsd b/test/schemas/582906-2-prog1.xsd new file mode 100644 index 0000000..5cd2d41 --- /dev/null +++ b/test/schemas/582906-2-prog1.xsd @@ -0,0 +1,11 @@ + + + + + + + diff --git a/test/schemas/582906-2-prog2-include.xsd b/test/schemas/582906-2-prog2-include.xsd new file mode 100644 index 0000000..4985aa3 --- /dev/null +++ b/test/schemas/582906-2-prog2-include.xsd @@ -0,0 +1,9 @@ + + + + + + + diff --git a/test/schemas/582906-2-prog2.xsd b/test/schemas/582906-2-prog2.xsd new file mode 100644 index 0000000..9446f21 --- /dev/null +++ b/test/schemas/582906-2-prog2.xsd @@ -0,0 +1,13 @@ + + + + + + + + + diff --git a/test/schemas/582906-2_0.xml b/test/schemas/582906-2_0.xml new file mode 100644 index 0000000..e928957 --- /dev/null +++ b/test/schemas/582906-2_0.xml @@ -0,0 +1,5 @@ + +5.3 diff --git a/test/schemas/582906-2_0.xsd b/test/schemas/582906-2_0.xsd new file mode 100644 index 0000000..e62ebb8 --- /dev/null +++ b/test/schemas/582906-2_0.xsd @@ -0,0 +1,20 @@ + + + + + + + + + + + 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 @@ + + + + + + + + + + + + + + + + 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 @@ + + + + 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 @@ + + + + + + + + + + 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 @@ + 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 @@ + + + + + + + + + + + + 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 @@ + + 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 @@ + + + + + + + + + + + + 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 @@ + 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 @@ + + + + + + + + + + + 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 @@ + 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 @@ + 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 @@ + 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 @@ + 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 @@ + diff --git a/test/schemas/allsg_0.xml b/test/schemas/allsg_0.xml new file mode 100644 index 0000000..814646f --- /dev/null +++ b/test/schemas/allsg_0.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/test/schemas/allsg_0.xsd b/test/schemas/allsg_0.xsd new file mode 100644 index 0000000..11d27a8 --- /dev/null +++ b/test/schemas/allsg_0.xsd @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/schemas/allsg_1.xml b/test/schemas/allsg_1.xml new file mode 100644 index 0000000..d1dc9c4 --- /dev/null +++ b/test/schemas/allsg_1.xml @@ -0,0 +1,8 @@ + + + + + + diff --git a/test/schemas/allsg_2.xml b/test/schemas/allsg_2.xml new file mode 100644 index 0000000..b39cb7a --- /dev/null +++ b/test/schemas/allsg_2.xml @@ -0,0 +1,8 @@ + + + + + + diff --git a/test/schemas/allsg_3.xml b/test/schemas/allsg_3.xml new file mode 100644 index 0000000..ac37b7b --- /dev/null +++ b/test/schemas/allsg_3.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/test/schemas/allsg_4.xml b/test/schemas/allsg_4.xml new file mode 100644 index 0000000..bbb654a --- /dev/null +++ b/test/schemas/allsg_4.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/test/schemas/allsg_5.xml b/test/schemas/allsg_5.xml new file mode 100644 index 0000000..44dde3e --- /dev/null +++ b/test/schemas/allsg_5.xml @@ -0,0 +1,8 @@ + + + + + + diff --git a/test/schemas/annot-err_0.xml b/test/schemas/annot-err_0.xml new file mode 100644 index 0000000..fe92b0a --- /dev/null +++ b/test/schemas/annot-err_0.xml @@ -0,0 +1,4 @@ + + \ No newline at end of file diff --git a/test/schemas/annot-err_0.xsd b/test/schemas/annot-err_0.xsd new file mode 100644 index 0000000..94d818c --- /dev/null +++ b/test/schemas/annot-err_0.xsd @@ -0,0 +1,21 @@ + + + + + I shouldn't do this here... + + weeelll + + + hmmmmmm + + ...and here as well - more than ever + + + + diff --git a/test/schemas/any1_0.xml b/test/schemas/any1_0.xml new file mode 100644 index 0000000..91264e4 --- /dev/null +++ b/test/schemas/any1_0.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + diff --git a/test/schemas/any1_0.xsd b/test/schemas/any1_0.xsd new file mode 100644 index 0000000..ed0087b --- /dev/null +++ b/test/schemas/any1_0.xsd @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/schemas/any2_0.xml b/test/schemas/any2_0.xml new file mode 100644 index 0000000..e649a2c --- /dev/null +++ b/test/schemas/any2_0.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + diff --git a/test/schemas/any2_0.xsd b/test/schemas/any2_0.xsd new file mode 100644 index 0000000..2bf726e --- /dev/null +++ b/test/schemas/any2_0.xsd @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/schemas/any3_0.xml b/test/schemas/any3_0.xml new file mode 100644 index 0000000..158f91c --- /dev/null +++ b/test/schemas/any3_0.xml @@ -0,0 +1,17 @@ + + + + + + + + + + diff --git a/test/schemas/any3_0.xsd b/test/schemas/any3_0.xsd new file mode 100644 index 0000000..b5c29f6 --- /dev/null +++ b/test/schemas/any3_0.xsd @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/schemas/any4_0.xml b/test/schemas/any4_0.xml new file mode 100644 index 0000000..1620397 --- /dev/null +++ b/test/schemas/any4_0.xml @@ -0,0 +1,17 @@ + + + + + + + + + + diff --git a/test/schemas/any4_0.xsd b/test/schemas/any4_0.xsd new file mode 100644 index 0000000..fa93577 --- /dev/null +++ b/test/schemas/any4_0.xsd @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/schemas/any5_0.xml b/test/schemas/any5_0.xml new file mode 100644 index 0000000..e716cb1 --- /dev/null +++ b/test/schemas/any5_0.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/test/schemas/any5_0.xsd b/test/schemas/any5_0.xsd new file mode 100644 index 0000000..70c8789 --- /dev/null +++ b/test/schemas/any5_0.xsd @@ -0,0 +1,13 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/test/schemas/any5_1.xml b/test/schemas/any5_1.xml new file mode 100644 index 0000000..91dcb54 --- /dev/null +++ b/test/schemas/any5_1.xml @@ -0,0 +1,12 @@ + + + + + + + + + + diff --git a/test/schemas/any5_1.xsd b/test/schemas/any5_1.xsd new file mode 100644 index 0000000..4d3c9de --- /dev/null +++ b/test/schemas/any5_1.xsd @@ -0,0 +1,14 @@ + + + + + + + + + + + + diff --git a/test/schemas/any5_2.xml b/test/schemas/any5_2.xml new file mode 100644 index 0000000..e8434d1 --- /dev/null +++ b/test/schemas/any5_2.xml @@ -0,0 +1,8 @@ + + + + + + diff --git a/test/schemas/any5_3.xml b/test/schemas/any5_3.xml new file mode 100644 index 0000000..828c4b3 --- /dev/null +++ b/test/schemas/any5_3.xml @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/test/schemas/any5_4.xml b/test/schemas/any5_4.xml new file mode 100644 index 0000000..91dcb54 --- /dev/null +++ b/test/schemas/any5_4.xml @@ -0,0 +1,12 @@ + + + + + + + + + + diff --git a/test/schemas/any5_5.xml b/test/schemas/any5_5.xml new file mode 100644 index 0000000..e09d8a1 --- /dev/null +++ b/test/schemas/any5_5.xml @@ -0,0 +1,12 @@ + + + + + + + + + + diff --git a/test/schemas/any5_6.xml b/test/schemas/any5_6.xml new file mode 100644 index 0000000..3b0ad73 --- /dev/null +++ b/test/schemas/any5_6.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + diff --git a/test/schemas/any6_0.xml b/test/schemas/any6_0.xml new file mode 100755 index 0000000..068a1a9 --- /dev/null +++ b/test/schemas/any6_0.xml @@ -0,0 +1,8 @@ + + + + + + \ No newline at end of file diff --git a/test/schemas/any6_1.xsd b/test/schemas/any6_1.xsd new file mode 100644 index 0000000..23b2f5d --- /dev/null +++ b/test/schemas/any6_1.xsd @@ -0,0 +1,36 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/schemas/any6_2.xsd b/test/schemas/any6_2.xsd new file mode 100644 index 0000000..a552ca8 --- /dev/null +++ b/test/schemas/any6_2.xsd @@ -0,0 +1,19 @@ + + + + + + + + + + + + diff --git a/test/schemas/any7_0.xml b/test/schemas/any7_0.xml new file mode 100755 index 0000000..288b1e7 --- /dev/null +++ b/test/schemas/any7_0.xml @@ -0,0 +1,19 @@ + + + + + + diff --git a/test/schemas/any7_1.xml b/test/schemas/any7_1.xml new file mode 100755 index 0000000..624c712 --- /dev/null +++ b/test/schemas/any7_1.xml @@ -0,0 +1,18 @@ + + + + + + \ No newline at end of file diff --git a/test/schemas/any7_1.xsd b/test/schemas/any7_1.xsd new file mode 100755 index 0000000..546904f --- /dev/null +++ b/test/schemas/any7_1.xsd @@ -0,0 +1,13 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/test/schemas/any7_2.xml b/test/schemas/any7_2.xml new file mode 100644 index 0000000..66d84d0 --- /dev/null +++ b/test/schemas/any7_2.xml @@ -0,0 +1,20 @@ + + + + + + + diff --git a/test/schemas/any7_2.xsd b/test/schemas/any7_2.xsd new file mode 100755 index 0000000..cabfd98 --- /dev/null +++ b/test/schemas/any7_2.xsd @@ -0,0 +1,13 @@ + + + + + + + + + + + diff --git a/test/schemas/any8_0.xml b/test/schemas/any8_0.xml new file mode 100644 index 0000000..6e87cff --- /dev/null +++ b/test/schemas/any8_0.xml @@ -0,0 +1,9 @@ + + + + + diff --git a/test/schemas/any8_1.xsd b/test/schemas/any8_1.xsd new file mode 100644 index 0000000..9264893 --- /dev/null +++ b/test/schemas/any8_1.xsd @@ -0,0 +1,20 @@ + + + + + + + + + + + + + diff --git a/test/schemas/anyAttr-derive-errors1_0.xml b/test/schemas/anyAttr-derive-errors1_0.xml new file mode 100644 index 0000000..98e948c --- /dev/null +++ b/test/schemas/anyAttr-derive-errors1_0.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/schemas/anyAttr-derive-errors1_0.xsd b/test/schemas/anyAttr-derive-errors1_0.xsd new file mode 100644 index 0000000..1ab9bab --- /dev/null +++ b/test/schemas/anyAttr-derive-errors1_0.xsd @@ -0,0 +1,223 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/schemas/anyAttr-derive1_0.xml b/test/schemas/anyAttr-derive1_0.xml new file mode 100644 index 0000000..de89f45 --- /dev/null +++ b/test/schemas/anyAttr-derive1_0.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/schemas/anyAttr-derive1_0.xsd b/test/schemas/anyAttr-derive1_0.xsd new file mode 100644 index 0000000..bc14d99 --- /dev/null +++ b/test/schemas/anyAttr-derive1_0.xsd @@ -0,0 +1,227 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/schemas/anyAttr-derive2_0.xml b/test/schemas/anyAttr-derive2_0.xml new file mode 100644 index 0000000..c90cb88 --- /dev/null +++ b/test/schemas/anyAttr-derive2_0.xml @@ -0,0 +1,9 @@ + + + + + diff --git a/test/schemas/anyAttr-derive2_0.xsd b/test/schemas/anyAttr-derive2_0.xsd new file mode 100644 index 0000000..3a74d68 --- /dev/null +++ b/test/schemas/anyAttr-derive2_0.xsd @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/schemas/anyAttr-errors1_0.xml b/test/schemas/anyAttr-errors1_0.xml new file mode 100644 index 0000000..769a5bb --- /dev/null +++ b/test/schemas/anyAttr-errors1_0.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/test/schemas/anyAttr-processContents-err1_0.xml b/test/schemas/anyAttr-processContents-err1_0.xml new file mode 100644 index 0000000..a0122f4 --- /dev/null +++ b/test/schemas/anyAttr-processContents-err1_0.xml @@ -0,0 +1,11 @@ + + + + + + diff --git a/test/schemas/anyAttr-processContents-err1_0.xsd b/test/schemas/anyAttr-processContents-err1_0.xsd new file mode 100644 index 0000000..cc2a0fd --- /dev/null +++ b/test/schemas/anyAttr-processContents-err1_0.xsd @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/schemas/anyAttr-processContents1_0.xml b/test/schemas/anyAttr-processContents1_0.xml new file mode 100644 index 0000000..f821089 --- /dev/null +++ b/test/schemas/anyAttr-processContents1_0.xml @@ -0,0 +1,13 @@ + + + + + + + + diff --git a/test/schemas/anyAttr-processContents1_0.xsd b/test/schemas/anyAttr-processContents1_0.xsd new file mode 100644 index 0000000..a468702 --- /dev/null +++ b/test/schemas/anyAttr-processContents1_0.xsd @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/schemas/anyAttr.importA.1_0.xsd b/test/schemas/anyAttr.importA.1_0.xsd new file mode 100644 index 0000000..92e0bbe --- /dev/null +++ b/test/schemas/anyAttr.importA.1_0.xsd @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/schemas/anyAttr.importB.1_0.xsd b/test/schemas/anyAttr.importB.1_0.xsd new file mode 100644 index 0000000..33eaba8 --- /dev/null +++ b/test/schemas/anyAttr.importB.1_0.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/test/schemas/anyAttr1_0.xml b/test/schemas/anyAttr1_0.xml new file mode 100644 index 0000000..50b5b16 --- /dev/null +++ b/test/schemas/anyAttr1_0.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/schemas/anyAttr1_0.xsd b/test/schemas/anyAttr1_0.xsd new file mode 100644 index 0000000..1fcf898 --- /dev/null +++ b/test/schemas/anyAttr1_0.xsd @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 @@ + 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 @@ + + + + + + + + + + + + + diff --git a/test/schemas/attruse_0_0.xml b/test/schemas/attruse_0_0.xml new file mode 100644 index 0000000..241ab27 --- /dev/null +++ b/test/schemas/attruse_0_0.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/schemas/attruse_0_0.xsd b/test/schemas/attruse_0_0.xsd new file mode 100644 index 0000000..bc9ccef --- /dev/null +++ b/test/schemas/attruse_0_0.xsd @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/schemas/attruse_0_1.xml b/test/schemas/attruse_0_1.xml new file mode 100644 index 0000000..b857c6d --- /dev/null +++ b/test/schemas/attruse_0_1.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/schemas/attruse_0_2.xml b/test/schemas/attruse_0_2.xml new file mode 100644 index 0000000..f55ccdc --- /dev/null +++ b/test/schemas/attruse_0_2.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/schemas/bug141312_0.xml b/test/schemas/bug141312_0.xml new file mode 100644 index 0000000..7d7abb1 --- /dev/null +++ b/test/schemas/bug141312_0.xml @@ -0,0 +1,2 @@ + +lalala diff --git a/test/schemas/bug141312_0.xsd b/test/schemas/bug141312_0.xsd new file mode 100644 index 0000000..c9a7e2c --- /dev/null +++ b/test/schemas/bug141312_0.xsd @@ -0,0 +1,16 @@ + + + + + + + + + + + + + diff --git a/test/schemas/bug141333.xml b/test/schemas/bug141333.xml new file mode 100644 index 0000000..e14aa46 --- /dev/null +++ b/test/schemas/bug141333.xml @@ -0,0 +1,9 @@ + + + + + + + diff --git a/test/schemas/bug141333.xsd b/test/schemas/bug141333.xsd new file mode 100644 index 0000000..1b81a7b --- /dev/null +++ b/test/schemas/bug141333.xsd @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/schemas/bug141333_0.xml b/test/schemas/bug141333_0.xml new file mode 100644 index 0000000..e14aa46 --- /dev/null +++ b/test/schemas/bug141333_0.xml @@ -0,0 +1,9 @@ + + + + + + + diff --git a/test/schemas/bug141333_0.xsd b/test/schemas/bug141333_0.xsd new file mode 100644 index 0000000..1b81a7b --- /dev/null +++ b/test/schemas/bug141333_0.xsd @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/schemas/bug143951.imp b/test/schemas/bug143951.imp new file mode 100644 index 0000000..58420d3 --- /dev/null +++ b/test/schemas/bug143951.imp @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/test/schemas/bug143951_0.xml b/test/schemas/bug143951_0.xml new file mode 100644 index 0000000..a742a0d --- /dev/null +++ b/test/schemas/bug143951_0.xml @@ -0,0 +1,9 @@ + + + $File: //depot/NNL/R1.0_SandM_Dev/Projects/SandM/src/uisupport +/xml/cliTestCommands.xml $ + + diff --git a/test/schemas/bug143951_0.xsd b/test/schemas/bug143951_0.xsd new file mode 100644 index 0000000..d5c9511 --- /dev/null +++ b/test/schemas/bug143951_0.xsd @@ -0,0 +1,17 @@ + + + + + + + + + + + + diff --git a/test/schemas/bug145246.xsd.imp b/test/schemas/bug145246.xsd.imp new file mode 100644 index 0000000..7d92e1c --- /dev/null +++ b/test/schemas/bug145246.xsd.imp @@ -0,0 +1,119 @@ + + + + + + DCMES 1.1 XML Schema + XML Schema for http://purl.org/dc/elements/1.1/ namespace + + Created 2003-04-02 + + Created by + + Tim Cole (t-cole3@uiuc.edu) + Tom Habing (thabing@uiuc.edu) + Jane Hunter (jane@dstc.edu.au) + Pete Johnston (p.johnston@ukoln.ac.uk), + Carl Lagoze (lagoze@cs.cornell.edu) + + This schema declares XML elements for the 15 DC elements from the + http://purl.org/dc/elements/1.1/ namespace. + + It defines a complexType SimpleLiteral which permits mixed content + and makes the xml:lang attribute available. It disallows child elements by + use of minOcccurs/maxOccurs. + + However, this complexType does permit the derivation of other complexTypes + which would permit child elements. + + All elements are declared as substitutable for the abstract element any, + which means that the default type for all elements is dc:SimpleLiteral. + + + + + + + + + + + + + This is the default type for all of the DC elements. + It permits text content only with optional + xml:lang attribute. + Text is allowed because mixed="true", but sub-elements + are disallowed because minOccurs="0" and maxOccurs="0" + are on the xs:any tag. + + This complexType allows for restriction or extension permitting + child elements. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + This group is included as a convenience for schema authors + who need to refer to all the elements in the + http://purl.org/dc/elements/1.1/ namespace. + + + + + + + + + + + + + + This complexType is included as a convenience for schema authors who need to define a root + or container element for all of the DC elements. + + + + + + + + + + + diff --git a/test/schemas/bug145246_0.xml b/test/schemas/bug145246_0.xml new file mode 100644 index 0000000..09050c6 --- /dev/null +++ b/test/schemas/bug145246_0.xml @@ -0,0 +1,30 @@ + + + + + + + message + + + + + + + + + + diff --git a/test/schemas/bug145246_0.xsd b/test/schemas/bug145246_0.xsd new file mode 100644 index 0000000..9cfe8c6 --- /dev/null +++ b/test/schemas/bug145246_0.xsd @@ -0,0 +1,173 @@ + + + + + + This schema describes giml dialog sources + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/schemas/bug152470_1.xml b/test/schemas/bug152470_1.xml new file mode 100755 index 0000000..adca237 --- /dev/null +++ b/test/schemas/bug152470_1.xml @@ -0,0 +1,9 @@ + + + + vXENc+Um/9/NvmYKiHDLaErK0gk= + + \ No newline at end of file diff --git a/test/schemas/bug152470_1.xsd b/test/schemas/bug152470_1.xsd new file mode 100755 index 0000000..7fc9747 --- /dev/null +++ b/test/schemas/bug152470_1.xsd @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/schemas/bug167754_0.xml b/test/schemas/bug167754_0.xml new file mode 100644 index 0000000..e5ec7d7 --- /dev/null +++ b/test/schemas/bug167754_0.xml @@ -0,0 +1,12 @@ + + + + + + + + + + diff --git a/test/schemas/bug167754_0.xsd b/test/schemas/bug167754_0.xsd new file mode 100644 index 0000000..e7883d2 --- /dev/null +++ b/test/schemas/bug167754_0.xsd @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/schemas/bug303566_1.xml b/test/schemas/bug303566_1.xml new file mode 100644 index 0000000..1bf56dc --- /dev/null +++ b/test/schemas/bug303566_1.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + diff --git a/test/schemas/bug303566_1.xsd b/test/schemas/bug303566_1.xsd new file mode 100644 index 0000000..fee99f7 --- /dev/null +++ b/test/schemas/bug303566_1.xsd @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/schemas/bug306806_0.xml b/test/schemas/bug306806_0.xml new file mode 100644 index 0000000..90c55e1 --- /dev/null +++ b/test/schemas/bug306806_0.xml @@ -0,0 +1,111 @@ + + + + + /all/turbine/r.turbshaft + + 1.375 + 30.250 + + -13.125 0.000 0.000 + -0.000 90.000 0.000 + + /all/turbine/r.turbshaft/s.turbshaft + + + + + + + /all/turbine/r.turbshaft + + 1.375 + 0 0 0 + 1.1 1.1 1.1 + /all/turbine/r.turbshaft/s.turbshaft + + + + + + + /all/turbine/r.turbshaft + + 1.375 + 0 0 0 + 1.1 1.1 1.1 + /all/turbine/r.turbshaft/s.turbshaft + + + + + + + /all/turbine/r.turbshaft + + 1.375 + 0 0 0 + 1.1 1.1 1.1 + /all/turbine/r.turbshaft/s.turbshaft + + + + + + /all/turbine/r.turbshaft + + 1.375 + 0 0 0 + 1.1 1.1 1.1 + /all/turbine/r.turbshaft/s.turbshaft + + + + + + + /all/turbine/r.turbshaft + + 1.375 + 0 0 0 + 1.1 1.1 1.1 + /all/turbine/r.turbshaft/s.turbshaft + + + + + + /all/turbine/r.turbshaft + + 1.375 + 0 0 0 + 1.1 1.1 1.1 + /all/turbine/r.turbshaft/s.turbshaft + + + + + + /all/turbine/r.turbshaft + + 1.375 + 0 0 0 + 1.1 1.1 1.1 + /all/turbine/r.turbshaft/s.turbshaft + + + + + + /all/turbine/r.turbshaft + + 1.375 + 0 0 0 + 1.1 1.1 1.1 + /all/turbine/r.turbshaft/s.turbshaft + + + + diff --git a/test/schemas/bug306806_1.xsd b/test/schemas/bug306806_1.xsd new file mode 100644 index 0000000..edc805d --- /dev/null +++ b/test/schemas/bug306806_1.xsd @@ -0,0 +1,544 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + global ############# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/schemas/bug309338_0.xml b/test/schemas/bug309338_0.xml new file mode 100644 index 0000000..33cbf95 --- /dev/null +++ b/test/schemas/bug309338_0.xml @@ -0,0 +1,4 @@ + +2000.00 diff --git a/test/schemas/bug309338_1.xsd b/test/schemas/bug309338_1.xsd new file mode 100644 index 0000000..0aa586c --- /dev/null +++ b/test/schemas/bug309338_1.xsd @@ -0,0 +1,13 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/test/schemas/bug310264_0.xml b/test/schemas/bug310264_0.xml new file mode 100644 index 0000000..98f057c --- /dev/null +++ b/test/schemas/bug310264_0.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/schemas/bug310264_0.xsd b/test/schemas/bug310264_0.xsd new file mode 100644 index 0000000..6f2b333 --- /dev/null +++ b/test/schemas/bug310264_0.xsd @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + diff --git a/test/schemas/bug312957_0.xml b/test/schemas/bug312957_0.xml new file mode 100644 index 0000000..c22444f --- /dev/null +++ b/test/schemas/bug312957_0.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + diff --git a/test/schemas/bug312957_1.xsd b/test/schemas/bug312957_1.xsd new file mode 100644 index 0000000..fb7972e --- /dev/null +++ b/test/schemas/bug312957_1.xsd @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/schemas/bug313982_0.xml b/test/schemas/bug313982_0.xml new file mode 100644 index 0000000..18c81ea --- /dev/null +++ b/test/schemas/bug313982_0.xml @@ -0,0 +1,4 @@ + +0.99 diff --git a/test/schemas/bug313982_0.xsd b/test/schemas/bug313982_0.xsd new file mode 100644 index 0000000..69d0613 --- /dev/null +++ b/test/schemas/bug313982_0.xsd @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/test/schemas/bug321475_0.xml b/test/schemas/bug321475_0.xml new file mode 100644 index 0000000..6190231 --- /dev/null +++ b/test/schemas/bug321475_0.xml @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/test/schemas/bug321475_1.xsd b/test/schemas/bug321475_1.xsd new file mode 100644 index 0000000..b714a0d --- /dev/null +++ b/test/schemas/bug321475_1.xsd @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/schemas/bug322411_0.xml b/test/schemas/bug322411_0.xml new file mode 100644 index 0000000..f883648 --- /dev/null +++ b/test/schemas/bug322411_0.xml @@ -0,0 +1,93 @@ + + + + + 1 + 2 + 3 + 4 + 5 + + dupl1 + dupl2 + dupl3 + dupl4 + dupl5 + dupl6 + dupl7 + dupl8 + dupl9 + dupl10 + dupl11 + + 6 + 7 + 8 + 9 + 10 + 11 + + 12 + 13 + 14 + 15 + + dupl1 + dupl2 + dupl3 + dupl4 + dupl5 + dupl6 + dupl7 + dupl8 + dupl9 + dupl10 + dupl11 + + 16 + 17 + 18 + 19 + 20 + 21 + + + 22 + 23 + 24 + 25 + 26 + 27 + 28 + 29 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 40 + 41 + + dupl1 + dupl2 + dupl3 + dupl4 + dupl5 + dupl6 + dupl7 + dupl8 + dupl9 + dupl10 + dupl11 + + + + 41 + + + diff --git a/test/schemas/bug322411_1.xsd b/test/schemas/bug322411_1.xsd new file mode 100644 index 0000000..383dee6 --- /dev/null +++ b/test/schemas/bug322411_1.xsd @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/schemas/bug323510_0.xml b/test/schemas/bug323510_0.xml new file mode 100644 index 0000000..ce7647d --- /dev/null +++ b/test/schemas/bug323510_0.xml @@ -0,0 +1,3 @@ + + + diff --git a/test/schemas/bug323510_1.xsd b/test/schemas/bug323510_1.xsd new file mode 100644 index 0000000..8b047ce --- /dev/null +++ b/test/schemas/bug323510_1.xsd @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/test/schemas/bug455953_0.xml b/test/schemas/bug455953_0.xml new file mode 100644 index 0000000..448907c --- /dev/null +++ b/test/schemas/bug455953_0.xml @@ -0,0 +1,9 @@ + + + + + + EMPTY + + + \ No newline at end of file diff --git a/test/schemas/bug455953_0.xsd b/test/schemas/bug455953_0.xsd new file mode 100644 index 0000000..f635570 --- /dev/null +++ b/test/schemas/bug455953_0.xsd @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/schemas/changelog093_0.xml b/test/schemas/changelog093_0.xml new file mode 100644 index 0000000..4b49612 --- /dev/null +++ b/test/schemas/changelog093_0.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + diff --git a/test/schemas/changelog093_1.xsd b/test/schemas/changelog093_1.xsd new file mode 100644 index 0000000..cf2bcc6 --- /dev/null +++ b/test/schemas/changelog093_1.xsd @@ -0,0 +1,253 @@ + + + + + + A description of an XML application which itemizes changes over the + life-span of a software project. Changes are tracked by releases, with a + granularity of individual items made up of files that were affected. + + + Randy J. Ray (rjray@blackperl.com) + 2004-11-22 + changelog,xml,schema + + An XML Schema declaration describing an XML expression of software + project change-logs. + + + + + + XML Schema for Changelogs + + An XML Schema declaration describing an XML expression of software + project change-logs. + + + + Randy J. Ray + + + + + Randy J. Ray + + + + + + + + + + + + + + + + + + + + + An open-ended container type for including version-control information + at various levels within the changelog structure. This is the only + type which explicitly permits content from foreign namespaces. + + + + + + + + + + + + + A description block is used to document everything from specific change + items to the release as a whole. + + + + + + + + + + + + + The versionString type is applied to attributes that describe simple + revision-number strings. It only supports CVS (RCS) styled version + numbers. + + + + + + + + + + + The fileType definition is used for the file element, a part of the + itemType declaration. It is defined separately so that it can be + referred to from multiple places. + + + + + + + + + + + + + + + + + + + + + + + + + + A file element contains a single block representing a fileType. + + + + + + + + + + + + These element blocks define a single change-item within the scope of a + given release. A change-item consists of one or more files that were + affected, and a description of the change itself. + + + + + + + + + + + + + + + + + + + + + + + + An item element contains a single block representing an itemType. + + + + + + + + + + + + The release is the primary piece of information that a changelog + collects and organizes. A release contains an optional description, + followed by one or more item blocks. The release element is also the + greatest user of attributes besides the file element. A release element + must have at least a "version" attribute, uniquely identifying the + release itself. Additionally, it may have "tag" to associate it with + a release-system tag and "date" to specify the date the release was + created. + + + + + + + + + + + + + + + + + + + + + + + + + + + + The changelog element is intended as the document root element. It + contains an overview element (identical in structure to the description + element, but named differently to prevent collision in XPath queries) + and one or more release blocks. + + + + + + + + + + + + + + + + + + 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 @@ + + + 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 @@ + + + + + + + + + + + + + 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 @@ + + + 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 @@ + + + + + + + + + + + + + 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 @@ + + + + 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 @@ + + + + + + + + + + + + + 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 @@ + + + + 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 @@ + + 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 @@ + + + + + + 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 @@ + + + + + + + diff --git a/test/schemas/complex-type-extension_0.xml b/test/schemas/complex-type-extension_0.xml new file mode 100644 index 0000000..8cdda23 --- /dev/null +++ b/test/schemas/complex-type-extension_0.xml @@ -0,0 +1,12 @@ + + + + Name1 + 20 + + + Name1 + Name2 + 20 + + diff --git a/test/schemas/complex-type-extension_0.xsd b/test/schemas/complex-type-extension_0.xsd new file mode 100644 index 0000000..6a6237a --- /dev/null +++ b/test/schemas/complex-type-extension_0.xsd @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/schemas/cos-ct-extends-1-3_0.xml b/test/schemas/cos-ct-extends-1-3_0.xml new file mode 100644 index 0000000..a0b8a59 --- /dev/null +++ b/test/schemas/cos-ct-extends-1-3_0.xml @@ -0,0 +1,9 @@ + + + + + + diff --git a/test/schemas/cos-ct-extends-1-3_0.xsd b/test/schemas/cos-ct-extends-1-3_0.xsd new file mode 100644 index 0000000..7655a8e --- /dev/null +++ b/test/schemas/cos-ct-extends-1-3_0.xsd @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/schemas/cos-st-restricts-1-2-err_0.xml b/test/schemas/cos-st-restricts-1-2-err_0.xml new file mode 100644 index 0000000..6f60e5b --- /dev/null +++ b/test/schemas/cos-st-restricts-1-2-err_0.xml @@ -0,0 +1,3 @@ + +1 2 diff --git a/test/schemas/cos-st-restricts-1-2-err_0.xsd b/test/schemas/cos-st-restricts-1-2-err_0.xsd new file mode 100644 index 0000000..9d3fabf --- /dev/null +++ b/test/schemas/cos-st-restricts-1-2-err_0.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/schemas/ct-sc-nobase_0.xml b/test/schemas/ct-sc-nobase_0.xml new file mode 100644 index 0000000..8678410 --- /dev/null +++ b/test/schemas/ct-sc-nobase_0.xml @@ -0,0 +1,4 @@ + + \ No newline at end of file diff --git a/test/schemas/ct-sc-nobase_0.xsd b/test/schemas/ct-sc-nobase_0.xsd new file mode 100644 index 0000000..a00e941 --- /dev/null +++ b/test/schemas/ct-sc-nobase_0.xsd @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/schemas/date_0.xml b/test/schemas/date_0.xml new file mode 100644 index 0000000..6c677ed --- /dev/null +++ b/test/schemas/date_0.xml @@ -0,0 +1,26 @@ + + + + 01:02:59 + 12:59:59.0001 + 12:00:00 + 1996-05-20 + 2002-05-18 + 1996-05-19Z + 2002-05-19Z + 2002-05-18Z + 2000-05-18Z + 2000-05-18T00:00:00 + 2002-05-19T21:30:00.99 + 1969-12-31T23:00:01-01:00 + --01-01 + --07-04 + --12-25 + 2002 + 2002-05 + --05Z + ---31 + --02-28Z + --12-31-06:00 + 2003-04-30T18:00:00-06:00 + 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 @@ + + + + + Testing date/time data types + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + some US holidays + + + + + New Year's day + + + + + 4th of July + + + + + Christmas + + + + + + diff --git a/test/schemas/decimal-1.xml b/test/schemas/decimal-1.xml new file mode 100644 index 0000000..4568ff1 --- /dev/null +++ b/test/schemas/decimal-1.xml @@ -0,0 +1,37 @@ + + + + + 0. + .0 + .10 + 01. + 000 + 123456789012345678 + -123456789012345678 + 0.123456789012345678 + -0.123456789012345678 + + . + - + + + * + - 1 + + 1 + + 0 + - 0 + + diff --git a/test/schemas/decimal-1.xsd b/test/schemas/decimal-1.xsd new file mode 100644 index 0000000..830ca3e --- /dev/null +++ b/test/schemas/decimal-1.xsd @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/test/schemas/decimal-1_0.xml b/test/schemas/decimal-1_0.xml new file mode 100644 index 0000000..7bf3719 --- /dev/null +++ b/test/schemas/decimal-1_0.xml @@ -0,0 +1,24 @@ + + + + 0. + .0 + .10 + 01. + 000 + 123456789012345678 + -123456789012345678 + 0.123456789012345678 + -0.123456789012345678 + + . + - + + + * + - 1 + + 1 + + 0 + - 0 + diff --git a/test/schemas/decimal-1_1.xsd b/test/schemas/decimal-1_1.xsd new file mode 100644 index 0000000..f598c86 --- /dev/null +++ b/test/schemas/decimal-1_1.xsd @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/test/schemas/decimal-2_0.xml b/test/schemas/decimal-2_0.xml new file mode 100644 index 0000000..166f781 --- /dev/null +++ b/test/schemas/decimal-2_0.xml @@ -0,0 +1,14 @@ + + + + 0.1 + 0.001 + 0.0 + -0.0 + 1 + + -0.1 + -1 + diff --git a/test/schemas/decimal-2_1.xsd b/test/schemas/decimal-2_1.xsd new file mode 100644 index 0000000..cc71670 --- /dev/null +++ b/test/schemas/decimal-2_1.xsd @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/test/schemas/decimal-3_0.xml b/test/schemas/decimal-3_0.xml new file mode 100644 index 0000000..fec1ed3 --- /dev/null +++ b/test/schemas/decimal-3_0.xml @@ -0,0 +1,17 @@ + + + + 0.12 + 0.0 + 0.02 + 12 + 1.2 + + 0.123 + 0.023 + 123 + 12.3 + + diff --git a/test/schemas/decimal-3_1.xsd b/test/schemas/decimal-3_1.xsd new file mode 100644 index 0000000..23ae8f7 --- /dev/null +++ b/test/schemas/decimal-3_1.xsd @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/test/schemas/derivation-ok-extension-err_0.xml b/test/schemas/derivation-ok-extension-err_0.xml new file mode 100644 index 0000000..ccfa348 --- /dev/null +++ b/test/schemas/derivation-ok-extension-err_0.xml @@ -0,0 +1,9 @@ + + + + + + diff --git a/test/schemas/derivation-ok-extension-err_0.xsd b/test/schemas/derivation-ok-extension-err_0.xsd new file mode 100644 index 0000000..89be581 --- /dev/null +++ b/test/schemas/derivation-ok-extension-err_0.xsd @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/test/schemas/derivation-ok-extension_0.xml b/test/schemas/derivation-ok-extension_0.xml new file mode 100644 index 0000000..0cf871e --- /dev/null +++ b/test/schemas/derivation-ok-extension_0.xml @@ -0,0 +1,9 @@ + + + + + + diff --git a/test/schemas/derivation-ok-extension_0.xsd b/test/schemas/derivation-ok-extension_0.xsd new file mode 100644 index 0000000..b99065b --- /dev/null +++ b/test/schemas/derivation-ok-extension_0.xsd @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/test/schemas/derivation-ok-restriction-2-1-1_0.xml b/test/schemas/derivation-ok-restriction-2-1-1_0.xml new file mode 100644 index 0000000..a92fb0c --- /dev/null +++ b/test/schemas/derivation-ok-restriction-2-1-1_0.xml @@ -0,0 +1,8 @@ + + + + + + diff --git a/test/schemas/derivation-ok-restriction-2-1-1_0.xsd b/test/schemas/derivation-ok-restriction-2-1-1_0.xsd new file mode 100644 index 0000000..e91fe43 --- /dev/null +++ b/test/schemas/derivation-ok-restriction-2-1-1_0.xsd @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/schemas/derivation-ok-restriction-4-1-err_0.xml b/test/schemas/derivation-ok-restriction-4-1-err_0.xml new file mode 100644 index 0000000..6021eb9 --- /dev/null +++ b/test/schemas/derivation-ok-restriction-4-1-err_0.xml @@ -0,0 +1,8 @@ + + + + + + diff --git a/test/schemas/derivation-ok-restriction-4-1-err_0.xsd b/test/schemas/derivation-ok-restriction-4-1-err_0.xsd new file mode 100644 index 0000000..c7400ac --- /dev/null +++ b/test/schemas/derivation-ok-restriction-4-1-err_0.xsd @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/schemas/derivation-restriction-anyAttr_0.xml b/test/schemas/derivation-restriction-anyAttr_0.xml new file mode 100644 index 0000000..66e7d3f --- /dev/null +++ b/test/schemas/derivation-restriction-anyAttr_0.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/test/schemas/derivation-restriction-anyAttr_0.xsd b/test/schemas/derivation-restriction-anyAttr_0.xsd new file mode 100644 index 0000000..f72c316 --- /dev/null +++ b/test/schemas/derivation-restriction-anyAttr_0.xsd @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/schemas/derivation-restriction-anyType.xml b/test/schemas/derivation-restriction-anyType.xml new file mode 100644 index 0000000..c86c50a --- /dev/null +++ b/test/schemas/derivation-restriction-anyType.xml @@ -0,0 +1,9 @@ + + + + + + diff --git a/test/schemas/derivation-restriction-anyType.xsd b/test/schemas/derivation-restriction-anyType.xsd new file mode 100644 index 0000000..ec217d2 --- /dev/null +++ b/test/schemas/derivation-restriction-anyType.xsd @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + 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 @@ + + first page + second page + third page + 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 @@ + + + + + + + + + + + + + + + + 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 @@ + + + PT0.9S + PT0.1S + PT0.999999S + P0Y27D + P27DT23H59M59S + P0Y + P367DT23H59M59S + P13M + P12M + PT86399S + 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 @@ + + + + + Testing duration data types + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 @@ + + + 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 @@ + + + + + Testing min and max occurance attributes on element + + + + + + + + + + + diff --git a/test/schemas/element-err_0.xml b/test/schemas/element-err_0.xml new file mode 100644 index 0000000..4f43fd9 --- /dev/null +++ b/test/schemas/element-err_0.xml @@ -0,0 +1,4 @@ + + \ No newline at end of file diff --git a/test/schemas/element-err_0.xsd b/test/schemas/element-err_0.xsd new file mode 100644 index 0000000..92604c8 --- /dev/null +++ b/test/schemas/element-err_0.xsd @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/schemas/element-minmax-err_0.xml b/test/schemas/element-minmax-err_0.xml new file mode 100644 index 0000000..62c5ec1 --- /dev/null +++ b/test/schemas/element-minmax-err_0.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/test/schemas/element-minmax-err_0.xsd b/test/schemas/element-minmax-err_0.xsd new file mode 100644 index 0000000..3384e7c --- /dev/null +++ b/test/schemas/element-minmax-err_0.xsd @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/test/schemas/empty-value_0.xml b/test/schemas/empty-value_0.xml new file mode 100644 index 0000000..e7058e2 --- /dev/null +++ b/test/schemas/empty-value_0.xml @@ -0,0 +1,2 @@ + + diff --git a/test/schemas/empty-value_1.xml b/test/schemas/empty-value_1.xml new file mode 100644 index 0000000..674ba86 --- /dev/null +++ b/test/schemas/empty-value_1.xml @@ -0,0 +1,2 @@ + + diff --git a/test/schemas/empty-value_1.xsd b/test/schemas/empty-value_1.xsd new file mode 100644 index 0000000..5e17d5f --- /dev/null +++ b/test/schemas/empty-value_1.xsd @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + 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 @@ + 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 @@ + + + + + + + + + + + + + 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 @@ + + + + + + + + + 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 @@ + + + Albert + Arnold + Gore + Jr + 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 @@ + + + + + + + + + + + + + + + + + + + + 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 @@ +salut 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 @@ + + + + + + + + + + + + + + + + + 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 @@ +salut 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 @@ +<salut/> diff --git a/test/schemas/extension2_0.xml b/test/schemas/extension2_0.xml new file mode 100644 index 0000000..202c988 --- /dev/null +++ b/test/schemas/extension2_0.xml @@ -0,0 +1,4 @@ + + diff --git a/test/schemas/extension2_1.xsd b/test/schemas/extension2_1.xsd new file mode 100644 index 0000000..0fa88af --- /dev/null +++ b/test/schemas/extension2_1.xsd @@ -0,0 +1,17 @@ + + + + + + + + + + + + diff --git a/test/schemas/facet-unionST-err1_0.xml b/test/schemas/facet-unionST-err1_0.xml new file mode 100644 index 0000000..b47df61 --- /dev/null +++ b/test/schemas/facet-unionST-err1_0.xml @@ -0,0 +1,4 @@ + +tiny + diff --git a/test/schemas/facet-unionST-err1_0.xsd b/test/schemas/facet-unionST-err1_0.xsd new file mode 100644 index 0000000..476668b --- /dev/null +++ b/test/schemas/facet-unionST-err1_0.xsd @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/schemas/facet-whiteSpace_0.xml b/test/schemas/facet-whiteSpace_0.xml new file mode 100644 index 0000000..dba26ca --- /dev/null +++ b/test/schemas/facet-whiteSpace_0.xml @@ -0,0 +1,7 @@ + +hmmm + + f f ff f + \ No newline at end of file diff --git a/test/schemas/facet-whiteSpace_0.xsd b/test/schemas/facet-whiteSpace_0.xsd new file mode 100644 index 0000000..83ef142 --- /dev/null +++ b/test/schemas/facet-whiteSpace_0.xsd @@ -0,0 +1,12 @@ + + + + + + + + + + + \ No newline at end of file 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 @@ + + Foo Bar + 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 @@ + + + + + + + + + + + + + + + + + + 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 @@ + + + 00 + 0123456789ABCDEF + abcdef0123456789 + 0123456789abcdef + 0123456789ABCDEF + 0123456789abcdef0123456789ABCDEF + 0123456789abcdef0123456789ABCDEF0123456789abcdef0123456789ABCDEF0123456789abcdef0123456789ABCDEF0123456789abcdef0123456789ABCDEF0123456789abcdef0123456789ABCDEF + 01234567899876543210 + 00112233445566778899aAbBcCdDeEfF + A0B1C2D3E4F5 + + 00 + 0000000000000000 + 1122334455667788 + + abcd + 0ed0 + 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 @@ + + + + + Testing hexBinary data types + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/schemas/hexbinary_1.xml b/test/schemas/hexbinary_1.xml new file mode 100644 index 0000000..0f34854 --- /dev/null +++ b/test/schemas/hexbinary_1.xml @@ -0,0 +1,15 @@ + + + + + + 0 + 0123456789ABCDEFGH + +abcdef0123456789 + -0123456789abcdef + + 112233445566778899 + + ab + 00fedc + diff --git a/test/schemas/idc-keyref-err1_0.xml b/test/schemas/idc-keyref-err1_0.xml new file mode 100644 index 0000000..64a1d0b --- /dev/null +++ b/test/schemas/idc-keyref-err1_0.xml @@ -0,0 +1,14 @@ + + + + + + + + + + \ No newline at end of file diff --git a/test/schemas/idc-keyref-err1_1.xsd b/test/schemas/idc-keyref-err1_1.xsd new file mode 100644 index 0000000..43c769f --- /dev/null +++ b/test/schemas/idc-keyref-err1_1.xsd @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/schemas/import-455953.xsd b/test/schemas/import-455953.xsd new file mode 100644 index 0000000..4613d8f --- /dev/null +++ b/test/schemas/import-455953.xsd @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/schemas/import-bad-1_0.imp b/test/schemas/import-bad-1_0.imp new file mode 100755 index 0000000..d70c012 --- /dev/null +++ b/test/schemas/import-bad-1_0.imp @@ -0,0 +1,5 @@ + + + \ No newline at end of file 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 @@ + + + + + + + + + + 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 @@ + + + + xy + + 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 @@ + + + + + + + + + + + + + + + diff --git a/test/schemas/import1_0.imp b/test/schemas/import1_0.imp new file mode 100644 index 0000000..b7fd2ec --- /dev/null +++ b/test/schemas/import1_0.imp @@ -0,0 +1,8 @@ + + + + + + \ No newline at end of file diff --git a/test/schemas/import1_0.xml b/test/schemas/import1_0.xml new file mode 100644 index 0000000..7046521 --- /dev/null +++ b/test/schemas/import1_0.xml @@ -0,0 +1,11 @@ + + + + + + + \ No newline at end of file diff --git a/test/schemas/import1_0.xsd b/test/schemas/import1_0.xsd new file mode 100644 index 0000000..309139c --- /dev/null +++ b/test/schemas/import1_0.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/schemas/import1_0b.imp b/test/schemas/import1_0b.imp new file mode 100644 index 0000000..70bddd7 --- /dev/null +++ b/test/schemas/import1_0b.imp @@ -0,0 +1,8 @@ + + + + + + \ No newline at end of file diff --git a/test/schemas/import2_0.imp b/test/schemas/import2_0.imp new file mode 100644 index 0000000..298e6b1 --- /dev/null +++ b/test/schemas/import2_0.imp @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/test/schemas/import2_0.xml b/test/schemas/import2_0.xml new file mode 100644 index 0000000..67723d4 --- /dev/null +++ b/test/schemas/import2_0.xml @@ -0,0 +1,8 @@ + + + + + diff --git a/test/schemas/import2_0.xsd b/test/schemas/import2_0.xsd new file mode 100644 index 0000000..6922bec --- /dev/null +++ b/test/schemas/import2_0.xsd @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/test/schemas/include1_0.inc b/test/schemas/include1_0.inc new file mode 100644 index 0000000..1745abe --- /dev/null +++ b/test/schemas/include1_0.inc @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/schemas/include1_0.xml b/test/schemas/include1_0.xml new file mode 100644 index 0000000..8ffee0e --- /dev/null +++ b/test/schemas/include1_0.xml @@ -0,0 +1,8 @@ + + + anyURI + + + \ No newline at end of file diff --git a/test/schemas/include1_0.xsd b/test/schemas/include1_0.xsd new file mode 100644 index 0000000..5e6d837 --- /dev/null +++ b/test/schemas/include1_0.xsd @@ -0,0 +1,15 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/schemas/include2_0.inc b/test/schemas/include2_0.inc new file mode 100644 index 0000000..3104cd5 --- /dev/null +++ b/test/schemas/include2_0.inc @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/schemas/include2_0.xml b/test/schemas/include2_0.xml new file mode 100644 index 0000000..b460b93 --- /dev/null +++ b/test/schemas/include2_0.xml @@ -0,0 +1,9 @@ + + + + + + \ No newline at end of file diff --git a/test/schemas/include2_0.xsd b/test/schemas/include2_0.xsd new file mode 100644 index 0000000..5f63102 --- /dev/null +++ b/test/schemas/include2_0.xsd @@ -0,0 +1,14 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/test/schemas/include3_0.inc b/test/schemas/include3_0.inc new file mode 100644 index 0000000..c0436e8 --- /dev/null +++ b/test/schemas/include3_0.inc @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/test/schemas/include3_0.xml b/test/schemas/include3_0.xml new file mode 100644 index 0000000..e880cc5 --- /dev/null +++ b/test/schemas/include3_0.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/test/schemas/include3_0.xsd b/test/schemas/include3_0.xsd new file mode 100644 index 0000000..5319486 --- /dev/null +++ b/test/schemas/include3_0.xsd @@ -0,0 +1,9 @@ + + + + + + + \ No newline at end of file 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 @@ + +foo +2 +1.0 +No comment ! + diff --git a/test/schemas/item_0.xsd b/test/schemas/item_0.xsd new file mode 100644 index 0000000..315e06e --- /dev/null +++ b/test/schemas/item_0.xsd @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/schemas/item_1.xsd b/test/schemas/item_1.xsd new file mode 100644 index 0000000..3cf966e --- /dev/null +++ b/test/schemas/item_1.xsd @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 @@ +25 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 @@ + + + + + + + + + + + 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 @@ + + + 25 + cm + 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 @@ + + + + + + + + + + + + + + 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 @@ + + + 25 + cm + 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 @@ + + + + + + + + + + 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 @@ + + hello world + hello world + hello world + hello world + 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 @@ + + + + + Comment describing your root element + + + + + + + + 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 @@ + + hello world + 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 @@ + + + + + Comment describing your root element + + + + + + + + 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 @@ + + hello world + hello world + 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 @@ +x diff --git a/test/schemas/mixed0_0.xsd b/test/schemas/mixed0_0.xsd new file mode 100644 index 0000000..a82226ec --- /dev/null +++ b/test/schemas/mixed0_0.xsd @@ -0,0 +1,5 @@ + + + + + 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 @@ +x 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 @@ + + + + + + + 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 @@ + + 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 @@ + + + + + + + + + + + + + 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 @@ + + 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 @@ + + + + + + + + + + + + + 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 @@ + + 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 @@ + + 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 @@ + + 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 @@ +some 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 @@ + + + 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 @@ +content 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 @@ + + + + + + + + + + + + diff --git a/test/schemas/nvdcve_0.xml b/test/schemas/nvdcve_0.xml new file mode 100644 index 0000000..20a0aed --- /dev/null +++ b/test/schemas/nvdcve_0.xml @@ -0,0 +1,5235 @@ + + + + + The Settings Manager in Adobe Flash Player 9.0.124.0 and earlier allows remote attackers to cause victims to unknowingly click on a link or dialog via access control dialogs disguised as normal graphical elements, as demonstrated by hijacking the camera or microphone, and related to "clickjacking." + + + + + + + + + + + + adobe-flash-click-hijacking(45721) + 1020996 + 31625 + ADV-2008-2764 + http://www.adobe.com/support/security/advisories/apsa08-08.html + 32163 + http://ha.ckers.org/blog/20081007/clickjacking-details/ + http://blog.guya.net/2008/10/07/malicious-camera-spying-using-clickjacking/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Heap-based buffer overflow in Mplayer.exe in Herosoft Inc. Hero DVD Player 3.0.8 allows user-assisted remote attackers to execute arbitrary code via an M3u file with a "long entry." NOTE: the provenance of this information is unknown; the details are obtained solely from third party information. + + + + + + + + + + + + + 31627 + 31933 + + + + + + + + + + Unspecified vulnerability in IBM Lotus Quickr 8.1 before Fix pack 1 (8.1.0.1) might allow attackers to cause a denial of service (system crash) via a "nonstandard URL argument" to the OpenDocument command. NOTE: due to lack of details from the vendor, it is not clear whether this is a vulnerability. + + + + + + + + + lotus-quickr-opendocument-dos(45692) + 31608 + ADV-2008-2753 + http://www-01.ibm.com/support/docview.wss?uid=swg27013341 + 32098 + + + + + + + + + + Unspecified vulnerability in IBM Lotus Quickr 8.1 before Fix pack 1 (8.1.0.1) allows a place manager to "demote or delete a place superuser group" via unknown vectors. + + + + + + + + + + + + lotus-quickr-placemanager-security-bypass(45694) + 31608 + ADV-2008-2753 + http://www-01.ibm.com/support/docview.wss?uid=swg27013341 + 32098 + + + + + + + + + + Unspecified vulnerability in IBM Lotus Quickr 8.1 before Fix pack 1 (8.1.0.1) allows editors to delete pages that were created by a different author via unknown vectors. + + + + + + + + + + + lotus-quickr-editor-security-bypass(45693) + 31608 + ADV-2008-2753 + http://www-01.ibm.com/support/docview.wss?uid=swg27013341 + 32098 + + + + + + + + + + Stack-based buffer overflow in the file parsing function in Tonec Internet Download Manager, possibly 5.14 and earlier, allows remote attackers to cause a denial of service (crash) and possibly execute arbitrary code via a crafted AppleDouble file containing a long string. NOTE: this is probably a different vulnerability than CVE-2005-2210. + + + + + + + + + internetdownloadmanager-file-bo(45711) + 31603 + http://downloads.securityfocus.com/vulnerabilities/exploits/31603.pl + + + + + + + + + + Unrestricted file upload vulnerability in processFiles.php in FOSS Gallery Admin and FOSS Gallery Public 1.0 beta allows remote attackers to execute arbitrary code by uploading a file with an executable extension, then accessing it via a direct request to the file in the root directory. + + + + + + + + + + + + fossgallery-multiple-file-upload(45683) + 31574 + 6680 + 6674 + 6670 + + + + + + + + + + + + Microsoft Windows Vista Home and Ultimate Edition SP1 and earlier allows local users to cause a denial of service (page fault and system crash) via multiple attempts to access a virtual address in a PAGE_NOACCESS memory page. + + + + + + + + + 31570 + 6671 + 32115 + + + + + + + + + + + + + + + + + + Todd Woolums ASP News Management, possibly 2.21, stores db/news.mdb under the web root with insufficient access control, which allows remote attackers to obtain sensitive information via a direct request. + + + + + + + + + 20080927 ASP News Remote Password Disclouse Vulnerability + + + + + + + + + + ASP/MS Access Shoutbox, probably 1.1 beta, stores db/shoutdb.mdb under the web root with insufficient access control, which allows remote attackers to obtain sensitive information via a direct request. + + + + + + + + + 20080927 shoutbox Remote Password Disclouse Vulnerability + + + + + Cross-site scripting (XSS) vulnerability in BBcode API module in Phorum 5.2.8 allows remote attackers to inject arbitrary web script or HTML via nested BBcode image tags. + + + + + + + + + + phorum-img-xss(45686) + 31589 + http://trac.phorum.org/changeset/3528 + http://nulledcore.com/?p=126 + + + + + + + + + + The HTML parser in KDE Konqueror 3.5.9 allows remote attackers to cause a denial of service (application crash) via a font tag with a long color value, which triggers an assertion error. + + + + + + + + + 31605 + 6689 + + + + + + + + + + Blue Coat K9 Web Protection 4.0.230 Beta relies on client-side JavaScript as a protection mechanism, which allows remote attackers to bypass authentication and access the (1) summary, (2) detail, (3) overrides, and (4) pwemail pages by disabling JavaScript. + + + + + + + + + + + k9webprotection-multiple-auth-bypass(45696) + 31584 + 20081004 Blue Coat K9 Web Protection V4.0.230 Beta Vulnerability + http://dicas3000.blogspot.com/2008/10/blue-coat-k9-web-protection-v40230-beta.html + + + + + + + + + + SQL injection vulnerability in galerie.php in Galerie 3.2 allows remote attackers to execute arbitrary SQL commands via the pic parameter. + + + + + + + + + + + + galerie-pic-sql-injection(45698) + 31593 + 6675 + + + + + + + + + + SQL injection vulnerability in leggi.php in geccBBlite 2.0 allows remote attackers to execute arbitrary SQL commands via the id parameter. + + + + + + + + + + + + 31585 + 6677 + + + + + + + + + + Multiple SQL injection vulnerabilities in Fastpublish CMS 1.9.9.9.9 d (1.9999 d) allow remote attackers to execute arbitrary SQL commands via the (1) sprache parameter to index2.php and the (2) artikel parameter to index.php. + + + + + + + + + + + + 31582 + 6678 + 32126 + + + + + + + + + + + Multiple directory traversal vulnerabilities in Fastpublish CMS 1.9999 d allow remote attackers to include and execute arbitrary local files via a .. (dot dot) in the target parameter to (1) index2.php and (2) index.php. + + + + + + + + + + + 31582 + 6678 + 32126 + + + + + + + + + + + Cross-site scripting (XSS) vulnerability in bulk_update.pl in AutoNessus before 1.2.2 allows remote attackers to inject arbitrary web script or HTML via the remark parameter. + + + + + + + + + + 31559 + http://sourceforge.net/project/shownotes.php?group_id=216367&release_id=630124 + autonessus-bulkupdate-xss(45634) + http://sourceforge.net/tracker/index.php?func=detail&aid=2141884&group_id=216367&atid=1037394 + 32046 + http://autonessus.cvs.sourceforge.net/viewvc/autonessus/AutoNessus/www/bulk_update.pl?r1=1.2&r2=1.3 + + + + + + + + + + + + + + SQL injection vulnerability in thisraidprogress.php in the World of Warcraft tracker infusion (raidtracker_panel) module 2.0 for PHP-Fusion allows remote attackers to execute arbitrary SQL commands via the INFO_RAID_ID parameter. + + + + + + + + + + + + 31579 + 6682 + + + + + + + + + + Multiple directory traversal vulnerabilities in JMweb MP3 Music Audio Search and Download Script allow remote attackers to include and execute arbitrary local files via a .. (dot dot) in the src parameter to (1) listen.php and (2) download.php. + + + + + + + + + + + + 31573 + 6669 + 32141 + + + + + + + + + + SQL injection vulnerability in login.php in IP Reg 0.4 and earlier allows remote attackers to execute arbitrary SQL commands via the user_name parameter. + + + + + + + + + + + + ipreg-login-sql-injection(45641) + 31561 + 6657 + + + + + + + + + + + + + SQL injection vulnerability in the "Check User" feature (includes/check_user.php) in AdaptCMS Lite and AdaptCMS Pro 1.3 allows remote attackers to execute arbitrary SQL commands via the user_name parameter. + + + + + + + + + + + + http://www.adaptcms.com/article/51/News/URGENT-AdaptCMS-13-Security-Fix-Released/ + 32171 + adaptcmslite-checkuser-sql-injection(45642) + 31557 + 6662 + + + + + + + + + + + + SQL injection vulnerability in index.php in AmpJuke 0.7.5 allows remote attackers to execute arbitrary SQL commands via the special parameter in a performerid action. + + + + + + + + + + + + 31592 + 32168 + http://packetstorm.linuxsecurity.com/0810-exploits/ampjuke-sql.txt + + + + + + + + + + Multiple directory traversal vulnerabilities in CCMS 3.1 allow remote attackers to include and execute arbitrary local files via a .. (dot dot) in the skin parameter to (1) index.php, (2) forums.php, (3) admin.php, (4) header.php, (5) pages/story.php and (6) pages/poll.php. + + + + + + + + + + + 31566 + 6663 + + + + + + + + + + SQL injection vulnerability in recept.php in the Recepies (Recept) module 1.1 for PHP-Fusion allows remote attackers to execute arbitrary SQL commands via the kat_id parameter in a kategorier action. NOTE: some of these details are obtained from third party information. + + + + + + + + + + + + 31578 + 6683 + 32004 + + + + + + + + + + Directory traversal vulnerability in notes.php in Phlatline's Personal Information Manager (pPIM) 1.01 allows remote attackers to include and execute arbitrary local files via a .. (dot dot) in the id parameter in an edit action. + + + + + + + + + + + + 31571 + 6667 + + + + + + + + + + Multiple PHP remote file inclusion vulnerabilities in asiCMS alpha 0.208 allow remote attackers to execute arbitrary PHP code via a URL in the _ENV[asicms][path] parameter to (1) Association.php, (2) BigMath.php, (3) DiffieHellman.php, (4) DumbStore.php, (5) Extension.php, (6) FileStore.php, (7) HMAC.php, (8) MemcachedStore.php, (9) Message.php, (10) Nonce.php, (11) SQLStore.php, (12) SReg.php, (13) TrustRoot.php, and (14) URINorm.php in classes/Auth/OpenID/; and (15) XRDS.php, (16) XRI.php and (17) XRIRes.php in classes/Auth/Yadis/. + + + + + + + + + + + + 31601 + 6685 + + + + + + + + + + Cross-site scripting (XSS) vulnerability in Brilliant Gallery 5.x before 5.x-4.2, a module for Drupal, allows remote authenticated users with permissions to inject arbitrary web script or HTML via unspecified vectors related to posting of answers. + + + + + + + + + + http://drupal.org/node/315919 + brilliantgallery-unspecified-xss(45636) + 31554 + 32106 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SQL injection vulnerability in Brilliant Gallery 5.x before 5.x-4.2, a module for Drupal, allows remote attackers to execute arbitrary SQL commands via unspecified vectors, related to queries. NOTE: this might be the same issue as CVE-2008-4338. + + + + + + + + + + + brilliantgallery-unspecified-sql-injection(45637) + 31554 + 32106 + http://drupal.org/node/315919 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Cross-site scripting (XSS) vulnerability in index.php in MaxiScript Website Directory allows remote attackers to inject arbitrary web script or HTML via the keyword parameter in a search action. + + + + + + + + + + websitedirectory-index-xss(45657) + 31562 + 20081003 Website Directory - XSS Exploit + 32176 + + + + + + + + + + Heap-based buffer overflow in the mch_expand_wildcards function in os_unix.c in Vim 6.2 and 6.3 allows user-assisted attackers to execute arbitrary code via shell metacharacters in filenames, as demonstrated by the netrw.v3 test case. + + + + + + + + + + + + 31681 + APPLE-SA-2008-10-09 + [oss-security] 20080731 Re: Re: More arbitrary code executions in Netrw + [oss-security] 20080715 Re: Re: More arbitrary code executions in Netrw + ftp://ftp.vim.org/pub/vim/patches/6.3/6.3.059 + ftp://ftp.vim.org/pub/vim/patches/6.2.429 + + + + + + + + + + + The Hewlett-Packard Graphics Language (HPGL) filter in CUPS before 1.3.9 allows remote attackers to execute arbitrary code via crafted pen width and pen color opcodes that overwrite arbitrary memory. + + + + + + + + + + + 31681 + http://www.cups.org/articles.php?L575 + RHSA-2008:0937 + MDVSA-2008:211 + ADV-2008-2782 + http://www.cups.org/str.php?L2911 + 32226 + 32084 + APPLE-SA-2008-10-09 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Buffer overflow in ColorSync in Mac OS X 10.4.11 and 10.5.5 allows remote attackers to cause a denial of service (application termination) and possibly execute arbitrary code via an image with a crafted ICC profile. + + + + + + + + + + + + 31681 + APPLE-SA-2008-10-09 + + + + + + + + + + + + + + + Unspecified vulnerability in Finder in Mac OS X 10.5.5 allows user-assisted attackers to cause a denial of service (continuous termination and restart) via a crafted Desktop file that generates an error when producing its icon, related to an "error recovery issue." + + + + + + + + + 31681 + APPLE-SA-2008-10-09 + + + + + + + + + + + + + Heap-based buffer overflow in the local IPC component in the EAPOLController plugin for configd (Networking component) in Mac OS X 10.4.11 and 10.5.5 allows local users to execute arbitrary code via unknown vectors. + + + + + + + + + + + + 31681 + APPLE-SA-2008-10-09 + + + + + + + + + + + + + + + The Postfix configuration file in Mac OS X 10.5.5 causes Postfix to be network-accessible when mail is sent from a local command-line tool, which allows remote attackers to send mail to local Mac OS X users. + + + + + + + + + + + + 31681 + APPLE-SA-2008-10-09 + + + + + + + + + + Buffer overflow in PSNormalizer in Mac OS X 10.4.11 and 10.5.5 allows remote attackers to cause a denial of service (application termination) and execute arbitrary code via a PostScript file with a crafted bounding box comment. + + + + + + + + + + + + + 31681 + APPLE-SA-2008-10-09 + + + + + + + + + + + + + + + Integer signedness error in QuickLook in Mac OS X 10.5.5 allows remote attackers to cause a denial of service (application termination) and execute arbitrary code via a crafted Microsoft Excel file that triggers an out-of-bounds memory access. + + + + + + + + + + + + 31681 + APPLE-SA-2008-10-09 + + + + + + + + + + + + + Unspecified vulnerability in rlogind in the rlogin component in Mac OS X 10.4.11 and 10.5.5 applies hosts.equiv entries to root despite what is stated in documentation, which might allow remote attackers to bypass intended access restrictions. + + + + + + + + + + + + 31681 + APPLE-SA-2008-10-09 + + + + + + + + + + + + + + + Unspecified vulnerability in Script Editor in Mac OS X 10.4.11 and 10.5.5 allows local users to cause the scripting dictionary to be written to arbitrary locations, related to an "insecure file operation" on temporary files. + + + + + + + + + + + 31681 + APPLE-SA-2008-10-09 + + + + + + + + + + + + + + + Weblog in Mac OS X Server 10.4.11 does not properly check an error condition when a weblog posting access control list is specified for a user that has multiple short names, which might allow attackers to bypass intended access restrictions. + + + + + + + + + + + + 31681 + APPLE-SA-2008-10-09 + + + + + + + + + + Multiple untrusted search path vulnerabilities in Portage before 2.1.4.5 include the current working directory in the Python search path, which allows local users to execute arbitrary code via a modified Python module that is loaded by the (1) ys-apps/portage, (2) net-mail/fetchmail, (3) app-editors/leo ebuilds, and other ebuilds. + + + + + + + + + + + + + 31670 + GLSA-200810-02 + + + + + + + + + + + + + Cross-site scripting (XSS) vulnerability in Kantan WEB Server 1.8 and earlier allows remote attackers to inject arbitrary web script or HTML via unknown vectors. + + + Patch Information - http://unyora.sakura.ne.jp/soft/EasyHTTPServer/index.html + + + + + + + + + + 31244 + 48222 + JVNDB-2008-000060 + JVN#94163107 + + + + + + + + + + + SQL injection vulnerability in EC-CUBE Ver2 2.1.2a and earlier, and Ver2 RC 2.3.0-rc1 and earlier, allows remote attackers to execute arbitrary SQL commands via unspecified vectors. + + + + + + + + + + + + http://www.ec-cube.net/info/080829 + 32065 + JVNDB-2008-000065 + JVN#81111541 + + + + + + + + + + + + + + Cross-site scripting (XSS) vulnerability in EC-CUBE Ver2 2.1.2a and earlier, EC-CUBE Ver2 Beta(RC) 2.2.0-beta and earlier, and EC-CUBE Community Edition Nighly-Build r17623 and earlier allows remote attackers to inject arbitrary web script or HTML via unspecified vectors, a different issue than CVE-2008-4536 and CVE-2008-4537. + + + + + + + + + + http://www.ec-cube.net/release/detail.php?release_id=193 + 32065 + JVNDB-2008-000064 + JVN#99916563 + + + + + + + + + + + + + + Cross-site scripting (XSS) vulnerability in EC-CUBE Ver1 1.4.6 and earlier, Ver1 Beta 1.5.0-beta and earlier, Ver2 2.1.2a and earlier, Ver2 Beta(RC) 2.2.0-beta and earlier, Community Edition 1.3.4 and earlier, and Community Edition Nightly-Build r17319 and earlier allows remote attackers to inject arbitrary web script or HTML via unspecified vectors, a different issue than CVE-2008-4535 and CVE-2008-4537. + + + + + + + + + + http://www.ec-cube.net/release/detail.php?release_id=193 + 32065 + JVN#36085487 + + + + + + + + + + + + + + + + Cross-site scripting (XSS) vulnerability in EC-CUBE Ver1 1.4.6 and earlier, Ver1 Beta 1.5.0-beta and earlier, Ver2 2.1.2a and earlier, Ver2 Beta(RC) 2.1.1-beta and earlier, Community Edition 1.3.4 and earlier, and Community Edition Nightly-Build r17336 and earlier allows remote attackers to inject arbitrary web script or HTML via unspecified vectors, a different issue than CVE-2008-4535 and CVE-2008-4536. + + + + + + + + + + http://www.ec-cube.net/release/detail.php?release_id=193 + 32065 + JVNDB-2008-000062 + JVN#26621646 + + + + + + + + + + + + + + + + Apache Tomcat 5.5.0 and 4.1.0 through 4.1.31 allows remote attackers to bypass an IP address restriction and obtain sensitive information via a request that is processed concurrently with another request but in a different thread, leading to an instance-variable overwrite associated with a "synchronization problem" and lack of thread safety, and related to RemoteFilterValve, RemoteAddrValve, and RemoteHostValve. + + + + + + + + + https://issues.apache.org/bugzilla/show_bug.cgi?id=25835 + 31698 + 20081009 [SECURITY] CVE-2008-3271 - Apache Tomcat information disclosure + http://www.fujitsu.com/global/support/software/security/products-f/interstage-200806e.html + http://tomcat.apache.org/security-5.html + http://tomcat.apache.org/security-4.html + 32234 + JVN#30732239 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multiple stack-based buffer overflows in ovalarmsrv in HP OpenView Network Node Manager (OV NNM) 7.51, and possibly 7.01, 7.50, and 7.53, allow remote attackers to execute arbitrary code via a long (1) REQUEST_SEV_CHANGE (aka number 47), (2) REQUEST_SAVE_STATE (aka number 61), or (3) REQUEST_RESTORE_STATE (aka number 62) request to TCP port 2954. + + + + + + + + + + + SSRT080042 + 28668 + 20080407 Multiple vulnerabilities in HP OpenView NNM 7.53 + 31688 + http://downloads.securityfocus.com/vulnerabilities/exploits/28668.c + http://aluigi.altervista.org/adv/closedview_old-adv.txt + + + + + + + + + + + + + Unspecified vulnerability in ovtopmd in HP OpenView Network Node Manager (OV NNM) 7.01, 7.51, and 7.53 allows remote attackers to cause a denial of service via unknown vectors, a different vulnerability than CVE-2008-3536, CVE-2008-3537, and CVE-2008-3544. NOTE: due to insufficient details from the vendor, it is not clear whether this is the same as CVE-2008-1853. + + + + + + + + + SSRT080046 + 31669 + 1021014 + 29796 + + + + + + + + + + + + Cross-site scripting (XSS) vulnerability in HP System Management Homepage (SMH) before 2.1.15.210 on Linux and Windows allows remote attackers to inject arbitrary web script or HTML via unspecified vectors, a different vulnerability than CVE-2008-1663. + + + + + + + + + + 31663 + ADV-2008-2778 + 1021015 + 32199 + HPSBMA02376 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Windows Mobile 6 on the HTC Hermes device makes WLAN passwords available to an auto-completion mechanism for the password input field, which allows physically proximate attackers to bypass password authentication and obtain WLAN access. + + + + + + + + + 20081008 Windows Mobile 6 insecure password handling and too short WLAN-password + + + + + + + + + + Heap-based buffer overflow in the FTP subsystem in Sun Java System Web Proxy Server 4.0 through 4.0.7 allows remote attackers to execute arbitrary code via unspecified vectors. + + + + + + + + + + + sun-webproxy-ftp-bo(45782) + 31691 + ADV-2008-2781 + 242986 + 1021038 + 32227 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Cross-site scripting (XSS) vulnerability in Cisco Unity 4.x before 4.2(1)ES162, 5.x before 5.0(1)ES56, and 7.x before 7.0(2)ES8 allows remote authenticated administrators to inject arbitrary web script or HTML by entering it in the database (aka data store). + + + + + + + + + + http://www.voipshield.com/research-details.php?id=127 + 31642 + ADV-2008-2771 + 20081008 VoIPshield Reported Vulnerabilities in Cisco Unity Server + 1021012 + 32207 + + + + + + + + + + + + + + + + + + + + + Cisco Unity 4.x before 4.2(1)ES161, 5.x before 5.0(1)ES53, and 7.x before 7.0(2)ES8, when using anonymous authentication (aka native Unity authentication), allows remote attackers to cause a denial of service (session exhaustion) via a large number of connections. + + + + + + + + + http://www.voipshield.com/research-details.php?id=128 + 31642 + ADV-2008-2771 + 20081008 VoIPshield Reported Vulnerabilities in Cisco Unity Server + 1021013 + 32187 + + + + + + + + + + + + + + + + + + + + + Unspecified vulnerability in an unspecified Microsoft API, as used by Cisco Unity and possibly other products, allows remote attackers to cause a denial of service by sending crafted packets to dynamic UDP ports, related to a "processing error." + + + + + + + + + http://www.voipshield.com/research-details.php?id=129 + 31642 + ADV-2008-2771 + 20081008 VoIPshield Reported Vulnerabilities in Cisco Unity Server + 1021020 + + + + + + + + + + Cisco Unity 4.x before 4.2(1)ES161, 5.x before 5.0(1)ES53, and 7.x before 7.0(2)ES8 uses weak permissions for the D:\CommServer\Reports directory, which allows remote authenticated users to obtain sensitive information by reading files in this directory. + + + + + + + + + http://www.voipshield.com/research-details.php?id=130 + 31642 + ADV-2008-2771 + 20081008 VoIPshield Reported Vulnerabilities in Cisco Unity Server + 1021022 + 32187 + + + + + + + + + + + + + + + + + + + + + The Marvell driver for the Linksys WAP4400N Wi-Fi access point with firmware 1.2.14 on the Marvell 88W8361P-BEM1 chipset, when WEP mode is enabled, does not properly parse malformed 802.11 frames, which allows remote attackers to cause a denial of service (reboot or hang-up) via a malformed association request containing the WEP flag, as demonstrated by a request that is too short, a different vulnerability than CVE-2008-1144 and CVE-2008-1197. + + + + + + + + + linksys-wap4400n-request-dos(45841) + 31742 + 20081013 Marvell Driver Malformed Association Request Vulnerability + ADV-2008-2805 + 32259 + + + + + + + + + + Adobe Flash Player 9.0.45.0, 9.0.112.0, 9.0.124.0, and 10.0.12.10 allows remote web servers to cause a denial of service (NULL pointer dereference and browser crash) by returning a different response when an HTTP request is sent a second time, as demonstrated by two responses that provide SWF files with different SWF version numbers. + + + + + + + + + + 20081002 Adobe Flash Player plug-in null pointer dereference and browser crash + http://www.mochimedia.com/~matthew/flashcrash/ + + + + + + + + + + + + + Heap-based buffer overflow in the PdvrAtl.PdvrOcx.1 ActiveX control (pdvratl.dll) in DVRHOST Web CMS OCX 1.0.1.25 allows remote attackers to execute arbitrary code via a long second argument to the TimeSpanFormat method. + + + + + + + + + + + dvrhost-pdvrocx-bo(39640) + 27267 + 4903 + 28443 + + + + + + + + + + Stack-based buffer overflow in the PTZCamPanelCtrl ActiveX control (CamPanel.dll) in RTS Sentry 2.1.0.2 allows remote attackers to execute arbitrary code via a long second argument to the ConnectServer method. + + + + + + + + + + + + + rtssentry-ptzcampanelctrl-bo(39725) + 27304 + 4918 + 28435 + + + + + + + + + + The ImageShack Toolbar ActiveX control (ImageShackToolbar.dll) in ImageShack Toolbar 4.5.7, possibly including 4.5.7.69, allows remote attackers to force the upload of arbitrary image files to the ImageShack site via a file: URI argument to the BuildSlideShow method. + + + + + + + + + + toolbar-imageshacktoolbar-info-disclosure(39921) + 27439 + 20080124 ImageShack Toolbar FileUploader Class insecurities + 4981 + 28644 + + + + + + + + + + + strongSwan 4.2.6 and earlier allows remote attackers to cause a denial of service (daemon crash) via an IKE_SA_INIT message with a large number of NULL values in a Key Exchange payload, which triggers a NULL pointer dereference for the return value of the mpz_export function in the GNU Multiprecision Library (GMP). + + + + + + + + + 1020903 + 31291 + ADV-2008-2660 + 31963 + http://labs.mudynamics.com/advisories/MU-200809-01.txt + http://download.strongswan.org/CHANGES4.txt + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + nfs-utils 1.0.9, and possibly other versions before 1.1.3, invokes the host_ctl function with the wrong order of arguments, which causes TCP Wrappers to ignore netgroups and allows remote attackers to bypass intended access restrictions. + + + + + + + + + + + + https://bugzilla.redhat.com/show_bug.cgi?id=458676 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Heap-based buffer overflow in the read_rle16 function in imagetops in CUPS before 1.3.9 allows remote attackers to execute arbitrary code via an SGI image with malformed Run Length Encoded (RLE) data containing a small image and a large row count. + + + + + + + + + + + + 1021033 + 31690 + RHSA-2008:0937 + MDVSA-2008:211 + ADV-2008-2782 + http://www.cups.org/str.php?L2918 + http://www.cups.org/articles.php?L575 + 32226 + 32084 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Integer overflow in the WriteProlog function in texttops in CUPS before 1.3.9 allows remote attackers to execute arbitrary code via a crafted PostScript file that triggers a heap-based buffer overflow. + + + + + + + + + + + 1021034 + 31690 + RHSA-2008:0937 + MDVSA-2008:211 + ADV-2008-2782 + http://www.cups.org/str.php?L2919 + http://www.cups.org/articles.php?L575 + 32226 + 32084 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Husdawg, LLC Systems Requirements Lab 3 allows remote attackers to force the download and execution of arbitrary programs via unknown vectors in (1) ActiveX control (sysreqlab.dll, sysreqlabsli.dll, or sysreqlab2.dll) and (2) Java applet in RLApplet.class in sysreqlab2.jar or sysreqlab.jar. + + + + + + + + + + + VU#166651 + http://www.systemrequirementslab.com/bulletins/security_bulletin_1.html + + + + + + + + + + Directory traversal vulnerability in the RPC interface (asdbapi.dll) in CA ARCserve Backup (formerly BrightStor ARCserve Backup) r11.1 through r12.0 allows remote attackers to execute arbitrary commands via a .. (dot dot) in an RPC call with opnum 0x10A. + + + + + + + + + + + + https://support.ca.com/irj/portal/anonymous/phpsupcontent?contentID=188143 + 20081011 CA BrightStor ARCServe BackUp Message Engine Remote Command Injection Vulnerability + + + + + + + + + + + + + + + + + + + + Unspecified vulnerability in the tape engine service in asdbapi.dll in CA ARCserve Backup (formerly BrightStor ARCserve Backup) r11.1 through r12.0 allows remote attackers to cause a denial of service (crash) via a crafted request. + + + + + + + + + https://support.ca.com/irj/portal/anonymous/phpsupcontent?contentID=188143 + + + + + + + + + + + + + + + + + + + + Unspecified vulnerability in the database engine service in asdbapi.dll in CA ARCserve Backup (formerly BrightStor ARCserve Backup) r11.1 through r12.0 allows remote attackers to cause a denial of service (crash) via a crafted request, related to "insufficient validation." + + + + + + + + + https://support.ca.com/irj/portal/anonymous/phpsupcontent?contentID=188143 + + + + + + + + + + + + + + + + + + + + Unspecified vulnerability in asdbapi.dll in CA ARCserve Backup (formerly BrightStor ARCserve Backup) r11.1 through r12.0 allows remote attackers to cause a denial of service (crash of multiple services) via crafted authentication credentials, related to "insufficient validation." + + + + + + + + + https://support.ca.com/irj/portal/anonymous/phpsupcontent?contentID=188143 + + + + + + + + + + + + + + + + + + + + Stack-based buffer overflow in the push_subg function in parser.y (lib/graph/parser.c) in Graphviz 2.20.2, and possibly earlier versions, allows user-assisted remote attackers to cause a denial of service (memory corruption) or execute arbitrary code via a DOT file with a large number of Agraph_t elements. + + + + + + + + + + + + + 31648 + 20081008 Advisory: Graphviz Buffer Overflow Code Execution + 32186 + http://roeehay.blogspot.com/2008/10/graphviz-buffer-overflow-code-execution.html + http://bugs.gentoo.org/show_bug.cgi?id=240636 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Unspecified vulnerability in the Oracle JDeveloper component in Oracle Application Server 10.1.2.2 allows local users to affect confidentiality via unknown vectors. + + + + + + + + + http://www.oracle.com/technology/deploy/security/critical-patch-updates/cpuoct2008.html + + + + + + + + + + Unspecified vulnerability in the Oracle Reports Developer component in Oracle Application Server 1.0.2.2, 9.0.4.3, and 10.1.2.2, and E-Business Suite 11.5.10.2, allows remote authenticated users to affect availability via unknown vectors. + + + + + + + + + http://www.oracle.com/technology/deploy/security/critical-patch-updates/cpuoct2008.html + + + + + + + + + + + + + + + Unspecified vulnerability in the Oracle OLAP component in Oracle Database 10.1.0.5 allows remote authenticated users to affect confidentiality, integrity, and availability via unknown vectors. + + + + + + + + + + + + http://www.oracle.com/technology/deploy/security/critical-patch-updates/cpuoct2008.html + + + + + + + + + + Unspecified vulnerability in the Core RDBMS component in Oracle Database 9.2.0.8, 9.2.0.8DV, 10.1.0.5, and 10.2.0.2 allows remote attackers to affect confidentiality and integrity via unknown vectors. + + + + + + + + + + http://www.oracle.com/technology/deploy/security/critical-patch-updates/cpuoct2008.html + + + + + + + + + + + + + + + Unspecified vulnerability in the Oracle Portal component in Oracle Application Server 9.0.4.3 and 10.1.2.3 allows remote attackers to affect integrity via unknown vectors. + + + + + + + + + http://www.oracle.com/technology/deploy/security/critical-patch-updates/cpuoct2008.html + + + + + + + + + + + Unspecified vulnerability in the Oracle Spatial component in Oracle Database 9.2.0.8, 9.2.0.8DV, 10.1.0.5, and 10.2.0.3 allows remote authenticated users to affect confidentiality and integrity via unknown vectors. + + + + + + + + + + http://www.oracle.com/technology/deploy/security/critical-patch-updates/cpuoct2008.html + + + + + + + + + + + + + + + Unspecified vulnerability in the Oracle Portal component in Oracle Application Server 9.0.4.3 and 10.1.2.3 allows remote attackers to affect integrity via unknown vectors. + + + + + + + + + http://www.oracle.com/technology/deploy/security/critical-patch-updates/cpuoct2008.html + + + + + + + + + + + Unspecified vulnerability in the Upgrade component in Oracle Database 10.1.0.5 and 10.2.0.3 allows remote authenticated users to affect confidentiality and integrity via unknown vectors. + + + + + + + + + + http://www.oracle.com/technology/deploy/security/critical-patch-updates/cpuoct2008.html + + + + + + + + + + + Unspecified vulnerability in the Workspace Manager component in Oracle Database 9.2.0.8, 9.2.0.8DV, 10.1.0.5, 10.2.0.3, and 11.1.0.6 allows remote authenticated users to affect confidentiality and integrity, related to SYS.LT and WMSYS.LT. + + + + + + + + + + http://www.oracle.com/technology/deploy/security/critical-patch-updates/cpuoct2008.html + + + + + + + + + + + + + + + + + + Unspecified vulnerability in the Workspace Manager component in Oracle Database 9.2.0.8, 9.2.0.8DV, 10.1.0.5, 10.2.0.3, and 11.1.0.6 allows remote authenticated users to affect confidentiality and integrity, related to SYS.LT and WMSYS.LT. + + + + + + + + + + http://www.oracle.com/technology/deploy/security/critical-patch-updates/cpuoct2008.html + + + + + + + + + + + + + + + + + + Unspecified vulnerability in the Workspace Manager component in Oracle Database 9.2.0.8, 9.2.0.8DV, 10.1.0.5, 10.2.0.3, and 11.1.0.6 allows remote authenticated users to affect confidentiality and integrity, related to SYS.LT and WMSYS.LT. + + + + + + + + + + http://www.oracle.com/technology/deploy/security/critical-patch-updates/cpuoct2008.html + + + + + + + + + + + + + + + + + + Unspecified vulnerability in the Oracle Applications Technology Stack component in Oracle E-Business Suite 12.0.4 allows remote attackers to affect confidentiality via unknown vectors. + + + + + + + + + http://www.oracle.com/technology/deploy/security/critical-patch-updates/cpuoct2008.html + + + + + + + + + + Unspecified vulnerability in the Oracle Discoverer Administrator component in Oracle Application Server 9.0.4.3 and 10.1.2.2 allows local users to affect confidentiality via unknown vectors. + + + + + + + + + http://www.oracle.com/technology/deploy/security/critical-patch-updates/cpuoct2008.html + + + + + + + + + + + Unspecified vulnerability in the Oracle Discoverer Desktop component in Oracle Application Server 10.1.2.3 allows local users to affect confidentiality via unknown vectors. + + + + + + + + + http://www.oracle.com/technology/deploy/security/critical-patch-updates/cpuoct2008.html + + + + + + + + + + Unspecified vulnerability in the iSupplier Portal component in Oracle E-Business Suite 11.5.10.2 and 12.0.4 allows remote attackers to affect confidentiality via unknown vectors. + + + + + + + + + http://www.oracle.com/technology/deploy/security/critical-patch-updates/cpuoct2008.html + + + + + + + + + + + + Unspecified vulnerability in the Oracle Data Mining component in Oracle Database 10.2.0.3 allows remote authenticated users to affect confidentiality, integrity, and availability, related to DMSYS.ODM_MODEL_UTIL. + + + + + + + + + + + http://www.oracle.com/technology/deploy/security/critical-patch-updates/cpuoct2008.html + + + + + + + + + + Unspecified vulnerability in the Oracle OLAP component in Oracle Database 9.2.08, 9.2.0.8DV, and 10.1.0.5 allows remote authenticated users to affect availability, related to OLAPSYS.CWM2_OLAP_AW_AWUTIL. + + + + + + + + + http://www.oracle.com/technology/deploy/security/critical-patch-updates/cpuoct2008.html + + + + + + + + + + + + + + Unspecified vulnerability in the Oracle OLAP component in Oracle Database 9.2.08, 9.2.0.8DV, and 10.1.0.5 allows remote authenticated users to affect availability, related to OLAPSYS.CWM2_OLAP_AW_AWUTIL. + + + + + + + + + http://www.oracle.com/technology/deploy/security/critical-patch-updates/cpuoct2008.html + + + + + + + + + + + + + + Unspecified vulnerability in the Oracle Data Mining component in Oracle Database 10.2.0.4 allows remote authenticated users to affect confidentiality and integrity, related to DMSYS.DBMS_DM_EXP_INTERNAL. + + + + + + + + + + http://www.oracle.com/technology/deploy/security/critical-patch-updates/cpuoct2008.html + + + + + + + + + + Unspecified vulnerability in the Oracle Applications Framework component in Oracle E-Business Suite 11.5.10.2 and 12.0.4 allows remote authenticated users to affect integrity via unknown vectors. + + + + + + + + + http://www.oracle.com/technology/deploy/security/critical-patch-updates/cpuoct2008.html + + + + + + + + + + + + Unspecified vulnerability in the Workspace Manager component in Oracle Database 9.2.0.8, 9.2.0.8DV, 10.1.0.5, 10.2.0.3, and 11.1.0.6 allows remote authenticated users to affect confidentiality and integrity, related to WMSYS.LTADM. + + + + + + + + + + http://www.oracle.com/technology/deploy/security/critical-patch-updates/cpuoct2008.html + + + + + + + + + + + + + + + + + + Unspecified vulnerability in the Change Data Capture component in Oracle Database 10.1.0.5, 10.2.0.4, and 11.1.0.6 allows remote authenticated users to affect confidentiality and integrity, related to DBMS_CDC_PUBLISH. + + + + + + + + + + http://www.oracle.com/technology/deploy/security/critical-patch-updates/cpuoct2008.html + + + + + + + + + + + + + + Unspecified vulnerability in the Change Data Capture component in Oracle Database 10.1.0.5, 10.2.0.4, and 11.1.0.6 allows remote authenticated users to affect confidentiality and integrity, related to SYS.DBMS_CDC_IPUBLISH. + + + + + + + + + + http://www.oracle.com/technology/deploy/security/critical-patch-updates/cpuoct2008.html + + + + + + + + + + + + + + Unspecified vulnerability in the Oracle iStore component in Oracle E-Business Suite 12.0.4 allows remote authenticated users to affect confidentiality and integrity via unknown vectors. + + + + + + + + + + http://www.oracle.com/technology/deploy/security/critical-patch-updates/cpuoct2008.html + + + + + + + + + + Unspecified vulnerability in the PeopleTools component in Oracle PeopleSoft Enterprise and JD Edwards EnterpriseOne 8.48.18 and 8.49.14 allows remote attackers to affect confidentiality and integrity via unknown vectors. + + + + + + + + + + http://www.oracle.com/technology/deploy/security/critical-patch-updates/cpuoct2008.html + + + + + + + + + + + + + + + + + + + Unspecified vulnerability in the PeopleSoft Enterprise Portal component in Oracle PeopleSoft Enterprise and JD Edwards EnterpriseOne EP 8.9 and EP 9.0 allows remote authenticated users to affect confidentiality and integrity via unknown vectors. + + + + + + + + + + http://www.oracle.com/technology/deploy/security/critical-patch-updates/cpuoct2008.html + + + + + + + + + + + + + + + Unspecified vulnerability in the PeopleTools component in Oracle PeopleSoft Enterprise and JD Edwards EnterpriseOne 8.48.18 and 8.49.14 allows remote authenticated users to affect confidentiality via unknown vectors. + + + + + + + + + http://www.oracle.com/technology/deploy/security/critical-patch-updates/cpuoct2008.html + + + + + + + + + + + + + + + Unspecified vulnerability in the PeopleTools component in Oracle PeopleSoft Enterprise and JD Edwards EnterpriseOne 8.48.18 and 8.49.14 allows remote attackers to affect confidentiality via unknown vectors. + + + + + + + + + http://www.oracle.com/technology/deploy/security/critical-patch-updates/cpuoct2008.html + + + + + + + + + + + + + + + Unspecified vulnerability in the JDE EnterpriseOne Business Service Server component in Oracle PeopleSoft Enterprise and JD Edwards EnterpriseOne 8.97.2.2 and 8.98.0.1 allows local users to affect confidentiality and integrity via unknown vectors. + + + + + + + + + + http://www.oracle.com/technology/deploy/security/critical-patch-updates/cpuoct2008.html + + + + + + + + + + + + + + + Unspecified vulnerability in the Oracle Application Express component in Oracle Database 11.1.0.6 allows remote authenticated users to affect confidentiality, integrity, and availability via unknown vectors. + + + + + + + + + + + + http://www.oracle.com/technology/deploy/security/critical-patch-updates/cpuoct2008.html + + + + + + + + + + Unspecified vulnerability in the WebLogic Server Plugins for Apache component in BEA Product Suite 10.3, 10.0 MP1, 9.2 MP3, 9.1, 9.0, 8.1 SP6, 7.0 SP7, and 6.1 SP7 allows remote attackers to affect confidentiality, integrity, and availability via unknown vectors. + + + + + + + + + + + + http://www.oracle.com/technology/deploy/security/critical-patch-updates/cpuoct2008.html + + + + + + + + + + + + + + + + + Unspecified vulnerability in the WebLogic Server component in BEA Product Suite 9.1 allows remote attackers to affect confidentiality, integrity, and availability via unknown vectors. + + + + + + + + + + + + http://www.oracle.com/technology/deploy/security/critical-patch-updates/cpuoct2008.html + + + + + + + + + + Unspecified vulnerability in the WebLogic Workshop component in BEA Product Suite 10.3, 10.2, 10.0 MP1, 9.2 MP3, and 8.1 SP6 allows remote attackers to affect confidentiality, integrity, and availability via unknown vectors. + + + + + + + + + + + http://www.oracle.com/technology/deploy/security/critical-patch-updates/cpuoct2008.html + + + + + + + + + + + + + + Unspecified vulnerability in the WebLogic Server component in BEA Product Suite 10.0 MP1, 9.2 MP3, 9.1, and 9.0 allows remote authenticated users to affect integrity via unknown vectors. + + + + + + + + + http://www.oracle.com/technology/deploy/security/critical-patch-updates/cpuoct2008.html + + + + + + + + + + + + + Unspecified vulnerability in the WebLogic Workshop component in BEA Product Suite WLW 8.1SP5 allows remote attackers to affect confidentiality, integrity, and availability via unknown vectors. + + + + + + + + + + + + http://www.oracle.com/technology/deploy/security/critical-patch-updates/cpuoct2008.html + + + + + + + + + + + + + Unspecified vulnerability in the WebLogic Server component in BEA Product Suite 10.0 MP1, 9.2 MP3, 9.1, 9.0, and 8.1 SP6 allows remote attackers to affect confidentiality, integrity, and availability via unknown vectors. + + + + + + + + + + + http://www.oracle.com/technology/deploy/security/critical-patch-updates/cpuoct2008.html + + + + + + + + + + + + + + Multiple integer overflows in dhost.exe in Novell eDirectory 8.8 before 8.8.3, and 8.73 before 8.7.3.10 ftf1, allow remote attackers to execute arbitrary code via a crafted (1) Content-Length header in a SOAP request or (2) Netware Core Protocol opcode 0x0F message, which triggers a heap-based buffer overflow. + + + + + + + + + + + + http://www.zerodayinitiative.com/advisories/ZDI-08-065 + http://www.zerodayinitiative.com/advisories/ZDI-08-063 + 20081008 ZDI-08-065: Novell eDirectory Core Protocol Opcode 0x0F Heap Overflow Vulnerability + 20081008 ZDI-08-063: Novell eDirectory dhost.exe Content-Length Header Heap Overflow Vulnerability + http://www.novell.com/support/php/search.do?cmd=displayKC&docType=kc&externalId=7001184&sliceId=1&docTypeID=DT_TID_1_1&dialogID=78066829&stateId=0%200%2078062953 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Heap-based buffer overflow in dhost.exe in Novell eDirectory 8.8 before 8.8.3, and 8.7.3 before 8.7.3.10 ftf1, allows remote attackers to execute arbitrary code via a SOAP request with a long Accept-Language header. + + + + + + + + + + + http://www.zerodayinitiative.com/advisories/ZDI-08-064 + 20081008 ZDI-08-064: Novell eDirectory dhost.exe Accept Language Header Heap Overflow Vulnerability + http://www.novell.com/support/php/search.do?cmd=displayKC&docType=kc&externalId=7000086&sliceId=1&docTypeID=DT_TID_1_1&dialogID=78066829&stateId=0%200%2078062953 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Heap-based buffer overflow in dhost.exe in Novell eDirectory 8.x before 8.8.3, and 8.7.3 before 8.7.3.10 ftf1, allows remote attackers to execute arbitrary code via a crafted Netware Core Protocol opcode 0x24 message that triggers a calculation error that under-allocates a heap buffer. + + + + + + + + + + + http://www.zerodayinitiative.com/advisories/ZDI-08-066/ + 20081008 ZDI-08-066: Novell eDirectory Core Protocol Opcode 0x24 Heap Overflow Vulnerability + http://www.novell.com/support/php/search.do?cmd=displayKC&docType=kc&externalId=7001183&sliceId=1&docTypeID=DT_TID_1_1&dialogID=78066829&stateId=0%200%2078062953 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Stack-based buffer overflow in the adm_build_path function in sadmind in Sun Solstice AdminSuite on Solaris 8 and 9 allows remote attackers to execute arbitrary code via a crafted request. + + + + + + + + + + + 31751 + 20081014 [RISE-2008001] Sun Solstice AdminSuite sadmind adm_build_path()Buffer Overflow Vulnerability + http://risesecurity.org/advisories/RISE-2008001.txt + + + + + + + + + + + + + + + plugins/wacko/highlight/html.php in Strawberry in CuteNews.ru 1.1.1 (aka Strawberry) allows remote attackers to execute arbitrary PHP code via the text parameter, which is inserted into an executable regular expression. + + + + + + + + + + + cutenews-html-code-execution(39450) + 40236 + 4851 + 28330 + + + + + + + + + + Array index error in VLC media player 0.9.2 allows remote attackers to overwrite arbitrary memory and execute arbitrary code via an XSPF playlist file with a negative identifier tag, which passes a signed comparison. + + + + + + + + + + + + + http://www.coresecurity.com/content/vlc-xspf-memory-corruption + + + + + + + + + + Integer overflow in the Internet Printing Protocol (IPP) ISAPI extension in Microsoft Internet Information Services (IIS) 5.0 through 7.0 on Windows 2000 SP4, XP SP2 and SP3, Server 2003 SP1 and SP2, and Server 2008 allows remote authenticated users to execute arbitrary code via an HTTP POST request that triggers an outbound IPP connection from a web server to a machine operated by the attacker, aka "Integer Overflow in IPP Service Vulnerability." + + + + + + + + + + + MS08-062 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The kernel in Microsoft Windows 2000 SP4, XP SP2 and SP3, Server 2003 SP1 and SP2, Vista Gold and SP1, and Server 2008 does not properly validate window properties sent from a parent window to a child window during creation of a new window, which allows local users to gain privileges via a crafted application, aka "Windows Kernel Window Creation Vulnerability." + + + + + + + + + + + MS08-061 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Double free vulnerability in the kernel in Microsoft Windows 2000 SP4, XP SP2 and SP3, Server 2003 SP1 and SP2, Vista Gold and SP1, and Server 2008 allows local users to gain privileges via a crafted application that makes system calls within multiple threads, aka "Windows Kernel Unhandled Exception Vulnerability." NOTE: according to Microsoft, this is not a duplicate of CVE-2008-4510. + + + + + + + + + + + MS08-061 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The kernel in Microsoft Windows 2000 SP4, XP SP2 and SP3, Server 2003 SP1 and SP2, Vista Gold and SP1, and Server 2008 does not properly validate parameters sent from user mode to the kernel, which allows local users to gain privileges via a crafted application, aka "Windows Kernel Memory Corruption Vulnerability." + + + + + + + + + + + + MS08-061 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + afd.sys in the Ancillary Function Driver (AFD) component in Microsoft Windows XP SP2 and SP3 and Windows Server 2003 SP1 and SP2 does not properly validate input sent from user mode to the kernel, which allows local users to gain privileges via a crafted application, aka "AFD Kernel Overwrite Vulnerability." + + + + + + + + + + + MS08-066 + + + + + + + + + + + + + + + + + + + + + + Microsoft Host Integration Server (HIS) 2000, 2004, and 2006 does not limit RPC access to administrative functions, which allows remote attackers to bypass authentication and execute arbitrary code via a crafted SNA RPC message, aka "HIS Command Execution Vulnerability." + + + + + + + + + + + + MS08-059 + + + + + + + + + + + + + + + + + + + + + Microsoft Excel 2000 SP3, 2002 SP3, 2003 SP2 and SP3, and 2007 Gold and SP1; Office Excel Viewer 2003 SP3; Office Excel Viewer; Office Compatibility Pack for Word, Excel, and PowerPoint 2007 File Formats Gold and SP1; Office 2004 and 2008 for Mac; and Open XML File Format Converter for Mac do not properly allocate memory when loading Excel objects during parsing of the Excel spreadsheet file format, which allows remote attackers to execute arbitrary code via a crafted BIFF file, aka "File Format Parsing Vulnerability." + + + + + + + + + + + + MS08-057 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Microsoft Internet Explorer 6 and 7 does not properly determine the domain or security zone of origin of web script, which allows remote attackers to bypass the intended cross-domain security policy, and execute arbitrary code or obtain sensitive information, via a crafted HTML document, aka "HTML Element Cross-Domain Vulnerability." + + + + + + + + + + + + MS08-058 + + + + + + + + + + + + Microsoft Internet Explorer 6 and 7 does not properly determine the domain or security zone of origin of web script, which allows remote attackers to bypass the intended cross-domain security policy, and execute arbitrary code or obtain sensitive information, via a crafted HTML document, aka "Event Handling Cross-Domain Vulnerability." + + + + + + + + + + + + + MS08-058 + + + + + + + + + + + + Microsoft Internet Explorer 6 and 7 does not properly determine the domain or security zone of origin of web script, which allows remote attackers to bypass the intended cross-domain security policy and obtain sensitive information via a crafted HTML document, aka "Cross-Domain Information Disclosure Vulnerability." + + + + + + + + + + MS08-058 + + + + + + + + + + + + Microsoft Internet Explorer 6 does not properly handle errors associated with access to an object that has been (1) incorrectly initialized or (2) deleted, which allows remote attackers to execute arbitrary code via a crafted HTML document, aka "Uninitialized Memory Corruption Vulnerability." + + + + + + + + + + + + + MS08-058 + + + + + + + + + + + + Microsoft Internet Explorer 5.01 SP4 and 6 does not properly handle errors associated with access to uninitialized memory, which allows remote attackers to execute arbitrary code via a crafted HTML document, aka "HTML Objects Memory Corruption Vulnerability." + + + + + + + + + + + + + MS08-058 + + + + + + + + + + + + Microsoft Excel 2000 SP3, 2002 SP3, and 2003 SP2 and SP3 does not properly validate data in the VBA Performance Cache, which allows remote attackers to execute arbitrary code via a crafted Excel file, aka "Calendar Object Validation Vulnerability." + + + + + + + + + + + + + MS08-057 + + + + + + + + + + + + The Microsoft Message Queuing (MSMQ) service in Microsoft Windows 2000 SP4 does not properly validate parameters to string APIs, which allows remote attackers to execute arbitrary code via a crafted RPC call that overflows a "heap request," aka "Message Queuing Service Remote Code Execution Vulnerability." + + + + + + + + + + + + MS08-065 + + + + + + + + + + Integer overflow in the REPT function in Microsoft Excel 2000 SP3, 2002 SP3, 2003 SP2 and SP3, and 2007 Gold and SP1; Office Excel Viewer 2003 SP3; Office Excel Viewer; Office Compatibility Pack for Word, Excel, and PowerPoint 2007 File Formats Gold and SP1; Office SharePoint Server 2007 Gold and SP1; Office 2004 and 2008 for Mac; and Open XML File Format Converter for Mac allows remote attackers to execute arbitrary code via an Excel file containing a formula within a cell, aka "Formula Parsing Vulnerability." + + + + + + + + + + + + + MS08-057 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Cross-site scripting (XSS) vulnerability in Microsoft Office XP SP3 allows remote attackers to inject arbitrary web script or HTML via a document that contains a "Content-Disposition: attachment" header and is accessed through a cdo: URL, which renders the content instead of raising a File Download dialog box, aka "Vulnerability in Content-Disposition Header Vulnerability." + + + + + + + + + + MS08-056 + + + + + + + + + + Active Directory in Microsoft Windows 2000 SP4 does not properly allocate memory for (1) LDAP and (2) LDAPS requests, which allows remote attackers to execute arbitrary code via a crafted request, aka "Active Directory Overflow Vulnerability." + + + + + + + + + + + + MS08-060 + + + + + + + + + + Integer overflow in Memory Manager in Microsoft Windows XP SP2 and SP3, Server 2003 SP1 and SP2, Vista Gold and SP1, and Server 2008 allows local users to gain privileges via a crafted application that triggers an erroneous decrement of a variable, related to validation of parameters for Virtual Address Descriptors (VADs) and a "memory allocation mapping error," aka "Virtual Address Descriptor Elevation of Privilege Vulnerability." + + + + + + + + + + + MS08-064 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Buffer underflow in Microsoft Windows 2000 SP4, XP SP2 and SP3, Server 2003 SP1 and SP2, Vista Gold and SP1, and Server 2008 allows remote attackers to execute arbitrary code via a Server Message Block (SMB) request that contains a filename with a crafted length, aka "SMB Buffer Underflow Vulnerability." + + + + + + + + + + + + MS08-063 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SQL injection vulnerability in xlacomments.asp in XIGLA Software Absolute Poll Manager XE 4.1 allows remote attackers to execute arbitrary SQL commands via the p parameter. + + + + + + + + + + + + 31724 + 6731 + + + + + + + + + + SQL injection vulnerability in index.php in Real Estate Classifieds allows remote attackers to execute arbitrary SQL commands via the cat parameter. + + + + + + + + + + + + 31723 + 6736 + 32223 + + + + + + + + + + Cross-site scripting (XSS) vulnerability in the LiveSearch module in Plone before 3.0.4 allows remote attackers to inject arbitrary web script or HTML via the Description field for search results, as demonstrated using the onerror Javascript even in an IMG tag. + + + + + + + + + + 27098 + http://plone.org/products/plone/releases/3.0.4 + 28293 + http://dev.plone.org/plone/ticket/7439 + + + + + + + + + + + + + + + + + + + + GuildFTPd 0.999.14, and possibly other versions, allows remote attackers to cause a denial of service (crash) and possibly execute arbitrary code via long arguments to the CWD and LIST commands, which triggers heap corruption related to an improper free call, and possibly triggering a heap-based buffer overflow. + + + + + + + + + + + + 31729 + 6738 + ADV-2008-2794 + 32218 + + + + + + + + + + SQL injection vulnerability in kategori.asp in MunzurSoft Wep Portal W3 allows remote attackers to execute arbitrary SQL commands via the kat parameter. + + + + + + + + + + + + 31713 + 6725 + 32238 + + + + + + + + + + SQL injection vulnerability in default.asp in Ayco Okul Portali allows remote attackers to execute arbitrary SQL commands via the linkid parameter. + + + + + + + + + + + + aop-linkid-sql-injection(45801) + 31704 + 6720 + 32244 + + + + + + + + + + qemu-make-debian-root in qemu 0.9.1-5 on Debian GNU/Linux allows local users to overwrite arbitrary files via a symlink attack on temporary files and directories. + + + + + + + + + + + + [oss-security] 20081014 Re: CVE id request: qemu + [oss-security] 20081013 CVE id request: qemu + http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=496394 + + + + + + + + + + The do_splice_from function in fs/splice.c in the Linux kernel before 2.6.27 does not reject file descriptors that have the O_APPEND flag set, which allows local users to bypass append mode and make arbitrary changes to other locations in the file. + + + + + + + + + + + + [oss-security] 20081014 Re: CVE request: kernel: don't allow splice() to files opened with O_APPEND + [oss-security] 20081013 CVE request: kernel: don't allow splice() to files opened with O_APPEND + http://www.kernel.org/pub/linux/kernel/v2.6/ChangeLog-2.6.27 + http://git.kernel.org/?p=linux/kernel/git/stable/linux-2.6.26.y.git;a=commit;h=efc968d450e013049a662d22727cf132618dcb2f + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Buffer overflow in the DoCommand function in jhead before 2.84 might allow context-dependent attackers to cause a denial of service (crash) via (1) a long -cmd argument and (2) possibly other unspecified vectors. + + + + + + + + + https://bugs.launchpad.net/ubuntu/+source/jhead/+bug/271020 + http://www.sentex.net/~mwandel/jhead/changes.txt + [oss-security] 20081015 Re: CVE request: jhead + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sctp in Linux kernel before 2.6.25.18 allows remote attackers to cause a denial of service (OOPS) via an INIT-ACK that states the peer does not support AUTH, which causes the sctp_process_init function to clean up active transports and triggers the OOPS when the T1-Init timer expires. + + + + + + + + + [linux-kernel] 20081006 [patch 58/71] sctp: Fix oops when INIT-ACK indicates that peer doesnt support AUTH + http://kernel.org/pub/linux/kernel/v2.6/ChangeLog-2.6.25.18 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The ACL plugin in Dovecot before 1.1.4 treats negative access rights as if they are positive access rights, which allows attackers to bypass intended access restrictions. + + + + + + + + + + ADV-2008-2745 + [Dovecot-news] 20081005 v1.1.4 released + 31587 + 32164 + http://bugs.gentoo.org/show_bug.cgi?id=240409 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The ACL plugin in Dovecot before 1.1.4 allows attackers to bypass intended access restrictions by using the "k" right to create unauthorized "parent/child/child" mailboxes. + + + + + + + + + [Dovecot-news] 20081005 v1.1.4 released + 31587 + ADV-2008-2745 + 32164 + http://bugs.gentoo.org/show_bug.cgi?id=240409 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The (1) fence_apc and (2) fence_apc_snmp programs, as used in (a) fence 2.02.00-r1 and possibly (b) cman, when running in verbose mode, allows local users to append to arbitrary files via a symlink attack on the apclog temporary file. + + + + + + + + + [oss-security] 20081013 Re: CVE Request + http://bugs.gentoo.org/show_bug.cgi?id=240576 + + + + + + + + + + + + + fence_manual in fence allows local users to modify arbitrary files via a symlink attack on the fence_manual.fifo temporary file. + + + + + + + + + + + + [oss-security] 20081013 Re: CVE Request + + + + + + + + + + + + + The Editor in IBM ENOVIA SmarTeam 5 before release 18 SP5, and release 19 before SP01, allows remote authenticated users to bypass intended access restrictions and read Document objects via the Workflow Process (aka Flow Process) view. + + + + + + + + + 31748 + HD71425 + http://www-01.ibm.com/support/docview.wss?uid=swg27012567&aid=1 + 32105 + + + + + + + + + + Mozilla Firefox 3.0.1 through 3.0.3 on Windows does not properly identify the context of Windows .url shortcut files, which allows user-assisted remote attackers to bypass the Same Origin Policy and obtain sensitive information via an HTML document that is directly accessible through a filesystem, as demonstrated by documents in (1) local folders, (2) Windows share folders, and (3) RAR archives, and as demonstrated by IFRAMEs referencing shortcuts that point to (a) about:cache?device=memory and (b) about:cache?device=disk, a variant of CVE-2008-2810. + + + + + + + + + + 20081007 Firefox Privacy Broken If Used to Open Web Page File + 32192 + http://liudieyu0.blog124.fc2.com/blog-entry-6.html + + + + + + + + + + + + Insecure method vulnerability in the Chilkat FTP 2.0 ActiveX component (ChilkatCert.dll) allows remote attackers to overwrite arbitrary files via a full pathname in the SavePkcs8File method. + + + + + + + + + + + + 27540 + 5028 + + + + + + + + + + Insecure method vulnerability in Chilkat Mail 7.8 ActiveX control (ChilkatCert.dll) allows remote attackers to overwrite arbitrary files via a full pathname to the SaveLastError method. + + + + + + + + + + + + + chilkatmail-chilkatcert-file-overwrite(40041) + 27493 + 5005 + + + + + + + + + + Belong Software Site Builder 0.1 beta allows remote attackers to bypass intended access restrictions and perform administrative actions via a direct request to admin/home.php. + + + + + + + + + + + + belongsitebuilder-admin-security-bypass(39842) + 27402 + 20080122 Belong Site Builder 0.1b Bypass Admincp + + + + + + + + + + Insecure method vulnerability in the MVSNCLientWebAgent61.WebAgent.1 ActiveX control (isusweb.dll 6.1.100.61372) in Macrovision FLEXnet Connect 6.1 allows remote attackers to force the download and execution of arbitrary files via the DownloadAndExecute method. + + + + + + + + + + + + + 27279 + 4913 + 28496 + + + + + + + + + + Insecure method vulnerability in the MSVNClientDownloadManager61Lib.DownloadManager.1 ActiveX control (ISDM.exe 6.1.100.61372) in Macrovision FLEXnet Connect 6.1 allows remote attackers to force the download and execution of arbitrary files via the AddFile and RunScheduledJobs methods. NOTE: this could be leveraged for code execution by uploading executable files to Startup folders. + + + + + + + + + + + + macrovision-flexnet-file-overwrite(39653) + 27279 + 4909 + 28496 + + + + + + + + + + Stack-based buffer overflow in the FTP server in Etype Eserv 3.x, possibly 3.26, allows remote attackers to cause a denial of service (daemon crash) and possibly execute arbitrary code via a long argument to the ABOR command. + + + + + + + + + + + + eservftp-abor-bo(45864) + http://www.zeroscience.org/codes/eserv_bof.txt + 31753 + 6752 + + + + + + + + + + + + Heap-based buffer overflow in the tvtumin.sys kernel driver in Lenovo Rescue and Recovery 4.20, including 4.20.0511 and 4.20.0512, allows local users to execute arbitrary code via a long file name. + + + + + + + + + + + 31737 + http://www-307.ibm.com/pc/support/site.wss/MIGR-70699.html + http://www-307.ibm.com/pc/support/site.wss/MIGR-4Q2QAK.html + lenovo-rescue-recovery-tvtumin-bo(45839) + 1021041 + 20081010 iSEC Partners Security Advisory - 2008-002-lenovornr - Lenovo Rescue and Recovery 4.20 + http://www.isecpartners.com/advisories/2008-02-lenovornr.txt + ADV-2008-2806 + 32252 + + + + + + + + + + + + Multiple SQL injection vulnerabilities in Stash 1.0.3 allow remote attackers to execute arbitrary SQL commands via (1) the username parameter to admin/login.php and (2) the post parameter to admin/news.php. + + + + + + + + + + + + stash-news-sql-injection(45799) + 31687 + 6714 + + + + + + + + + + Multiple cross-site scripting (XSS) vulnerabilities in admin/include/isadmin.inc.php in PhpWebGallery 1.3.4 allow remote attackers to inject arbitrary web script or HTML via the (1) lang[access_forbiden] and (2) lang[ident_title] parameters. + + + + + + + + + + 6425 + + + + + + + + + + Directory traversal vulnerability in index.php in Sports Clubs Web Panel 0.0.1 allows remote attackers to include and execute arbitrary local files via a .. (dot dot) in the p parameter. + + + + + + + + + + + + 6427 + ADV-2008-2550 + + + + + + + + + + ActionScript in Adobe Flash Player 9.0.124.0 and earlier does not require user interaction in conjunction with (1) the FileReference.browse operation in the FileReference upload API or (2) the FileReference.download operation in the FileReference download API, which allows remote attackers to create a browse dialog box, and possibly have unspecified other impact, via an SWF file. + + + + + + + + + adobe-flash-filereference-file-upload(45913) + http://www.adobe.com/support/security/bulletins/apsb08-18.html + 32270 + ADV-2008-2838 + http://www.adobe.com/devnet/flashplayer/articles/fplayer10_security_changes.html + 1021061 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multiple heap-based buffer overflows in Adobe Flash CS3 Professional on Windows and Flash MX 2004 allow remote attackers to execute arbitrary code via an SWF file containing long control parameters. + + + adobe-flash-cs3-bo(45914) + 31769 + 20081015 Multiple Flash Authoring Heap Overflows - Malformed SWF Files + ADV-2008-2837 + http://www.adobe.com/support/security/advisories/apsa08-09.html + 1021060 + http://security-assessment.com/files/advisories/2008-10-16_Multiple_Flash_Authoring_Heap_Overflows.pdf + 32246 + + + + + Unspecified vulnerability in HP Systems Insight Manager (SIM) before 5.2 Update 2 (C.05.02.02.00) allows remote attackers to obtain sensitive information via unspecified vectors. + + + hp-sim-unspecified-security-bypass(45916) + 31777 + ADV-2008-2836 + 32287 + SSRT080035 + HPSBMA02378 + + + + + Apple iPhone 2.1 with firmware 5F136, when Require Passcode is enabled and Show SMS Preview is disabled, allows physically proximate attackers to obtain sensitive information by performing an Emergency Call tap and then reading SMS messages on the device screen, aka Apple bug number 6267416. + + + http://www.karlkraft.com/index.php/2008/10/03/yet-another-iphone-emergency-call-security-bug/ + 1021021 + + + + + Unspecified vulnerability in the SNMPv3 component in Linksys WAP4400N firmware 1.2.14 on the Marvell Semiconductor 88W8361P-BEM1 chipset has unknown impact and attack vectors, probably remote. + + + linksys-wap4400n-unspecified(45842) + ADV-2008-2805 + 32259 + + + + + Multiple unspecified vulnerabilities in Slaytanic Scripts Content Plus 2.1.1 have unknown impact and remote attack vectors. + + + http://sourceforge.net/project/shownotes.php?release_id=632842 + 32245 + + + + + Cross-site scripting (XSS) vulnerability in Shindig-Integrator 5.x, a module for Drupal, allows remote authenticated users to inject arbitrary web script or HTML via unspecified vectors in generated pages. + + + shindigintegrator-unspecified-xss(45925) + 32285 + http://drupal.org/node/321758 + + + + + Shindig-Integrator 5.x, a module for Drupal, does not properly restrict generated page access, which allows remote attackers to gain privileges via unspecified vectors. + + + 32285 + http://drupal.org/node/321758 + + + + + Unspecified vulnerability in Shindig-Integrator 5.x, a module for Drupal, has unspecified impact and remote attack vectors related to "numerous flaws" that are not related to XSS or access control, a different vulnerability than CVE-2008-4596 and CVE-2008-4597. + + + 32285 + http://drupal.org/node/321758 + + + + + SQL injection vulnerability in category.php in Mosaic Commerce allows remote attackers to execute arbitrary SQL commands via the cid parameter. + + + mosaiccommerce-category-sql-injection(45926) + 31782 + 6763 + + + + + configure.php in PokerMax Poker League Tournament Script 0.13 allows remote attackers to bypass authentication and gain administrative access by setting the ValidUserAdmin cookie. + + + pokermax-cookie-security-bypass(45931) + 31784 + 6766 + 32312 + + + + + Cross-site scripting (XSS) vulnerability in the login feature in Habari CMS 0.5.1 allows remote attackers to inject arbitrary web script or HTML via the habari_username parameter. + + + 31794 + 32311 + http://packetstorm.linuxsecurity.com/0810-exploits/habaricms-xss.txt + + + + + Directory traversal vulnerability in index.php in Post Affiliate Pro 2.0 allows remote authenticated users to read and possibly execute arbitrary local files via a .. (dot dot) in the md parameter. + + + 31796 + 6772 + + + + + SQL injection vulnerability in search.php in iGaming CMS 2.0 Alpha 1 allows remote attackers to execute arbitrary SQL commands via the keywords parameter in a search_games action. + + + 31793 + 6769 + + + + + SQL injection vulnerability in index.php in Easy CafeEngine 1.1 allows remote attackers to execute arbitrary SQL commands via the itemid parameter. + + + 31788 + 6762 + 32307 + + + + + SQL injection vulnerability in CafeEngine allows remote attackers to execute arbitrary SQL commands via the id parameter to (1) dish.php and (2) menu.php. + + + cafeengine-dish-menu-sql-injection(45929) + 31786 + 6762 + 32308 + + + + + Multiple SQL injection vulnerabilities in IP Reg 0.4 and earlier allow remote attackers to execute arbitrary SQL commands via the (1) location_id parameter to locationdel.php and (2) vlan_id parameter to it.php. NOTE: the vlanview.php and vlandel.php vectors are already covered by CVE-2007-6579. + + + ipreg-locationid-vlanid-sql-injection(45934) + 31781 + 6765 + + + + \ No newline at end of file diff --git a/test/schemas/nvdcve_0.xsd b/test/schemas/nvdcve_0.xsd new file mode 100644 index 0000000..f24b574 --- /dev/null +++ b/test/schemas/nvdcve_0.xsd @@ -0,0 +1,498 @@ + + + + This schema defines the structure of the National + Vulnerability Database XML feed files version: 1.2. The elements and + attribute in this document are described by xs:annotation tags. This + file is kept at http://nvd.nist.gov/schema/nvdcve.xsd. The NVD XML + feeds are available at http://nvd.nist.gov/download.cfm. + + Release Notes: + + Version 1.2: + * CVSS version 2 scores and vectors have been added. Please see + http://nvd.nist.gov/cvss.cfm?vectorinfo and + http://www.first.org/cvss/cvss-guide.html for more information on + how to interpret this data. + + + + The root element of the NVD CVE feed. Multiple "entry" child elements describe specific NVD CVE entries. + + + + + + + + The schema version number supported by the feed. + + + + + The date the feed was generated. + + + + + + + + A CVE entry. + + + + + + + + + Documents one CVE entry. The child elements should always + appear in the sequence defined below. These elements are compatible with + entry elements from the CVE XML feeds. + + + + + Description wrapper tag, parent to any + documented descriptions of this CVE entry. While the "desc" + tag will always be present, there may be no "descript" child + tags. Only one "descript" tag will exist for each + description source (i.e. CVE, NVD, ...). + + + + + + A description of a CVE entry + from the source indicated by the "source" + attribute. + + + + + + + + Impact wrapper tag (may or may not be + present). Only one "impact" tag will exist for each impact + explanation source. + + + + + + Contains a specific impact + explanation of this CVE entry from source + indicated by the "source" attribute. + + + + + + + + + Solution wrapper tag (may or may not be + present). Only one "sol" tag will exist for each solution + explanation source. + + + + + Loss type tag (may or may not be present). + Contains one loss type child for each loss type of this CVE + entry. Potential loss types are: "avail" => availability + "conf" => confidentiality "int" => integrity "sec_prot" => + security protection + + + + + Vulnerability type tag (may or may not be + present). Contains one vulnerability type child for each + vulnerability type of this CVE entry. Potential + vulnerability types are: "access" => Access validation error + "input" => Input validation error "design" => Design error + "exception" => Exceptional condition error "env" => + Environmental error "config" => Configuration error "race" + => Race condition error "other" => other + + + + + Vulnerability range tag (may or may not be + present). Contains one vulnerability range child for each + vulnerability range of this CVE entry. Potential + vulnerability ranges are: "local" => Locally exploitable + "local_network" => Local network exploitable "network" => + Network exploitable "user_init" => User accesses attacker + + + + + + Reference wrapper tag (always present). + External references to this CVE entry are contained within + this tag. + + + + + + Individual reference to this CVE + entry. Text is the name of this vulnerability at + this particular reference. Attributes: "source" + (required) => Name of reference source "url" + (required) => hyperlink to reference "sig" => + indicates this reference includes a tool + signature "adv" => indicates this reference is a + Security Advisory "patch" => indicates this + reference includes a patch for this + vulnerability + + + + + + + + Vulnerable software wrapper tag (may or may + not be present). Software affected by this CVE entry are + listed within this tag. + + + + + + CVE or CAN + + + + + + + + + + + the full CVE name + + + + + + + + + + the sequence number from CVE name + + + + + + + + + + the NVD name (if it exists) + + + + + the date this entry was discovered + + + + + the date this entry was published + + + + + the date this entry was last modified + + + + + the entry's severity as determined by the NVD analysts: High, Medium, or Low + + + + + + + + + + + + indicates that this CVE entry has been rejected by CVE or NVD + + + + + the CVSS Version Indicator + + + + + Same as the CVSS_base_score to provide backwards compatability with the previous CVE XML feed format. This field is deprecated an may be removed at a future date. + + + + + CVSS version 2 Base Score + + + + + CVSS version 2 Impact Score + + + + + CVSS version 2 Exploit Score + + + + + the CVSS version 2 Vector string + + + + + + + + + + The source of the CVE description. + + + + + + + + + + + + + + + + + + + + + Input validation error tag with + one attribute for each input validation error + type. Potential input validation error types + are: "bound" => Boundary condition error + "buffer" => Buffer overflow + + + + + + + + + + + + + + + + + + + + Contains a specific solution + explanation of this CVE entry from source + indicated by the "source" attribute. + + + + + + + + + + + + + + + + + + + + + + Security Protection tag with one + attribute for each security protection type. + Potential security protection types are: "admin" + => gain administrative access "user" => gain + user access "other" => other + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Product wrapper tag. Versions of + this product that are affected by this + vulnerability are listed within this tag. + Attributes: "name" => Product name "vendor" => + Vendor of this product + + + + + + Represents a version + of this product that is affected by + this vulnerability. Attributes: + "num" => This version number "prev" + => Indicates that versions previous + to this version number are also + affected by this vulnerability + "edition" => Indicates the edition + associated with the version number + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Defines date format for NVD. Dates follow the mask "yyyy-mm-dd" + + + + + + + + + Restricts urls in NVD beyond the xs:anyURI restrictions. + + + + + + + + + + simpleType used for attributes that are only present when they are + true. Such attributes appear only in the form attribute_name="1". + + + + + + + + + simpleType used when scoring on a scale of 0-10, inclusive + + + + + + + + + + simpleType to describe the CVSS Base Vector + + + + + + 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 @@ + + + + Alice Smith + 123 Maple Street + Mill Valley + CA + 90952 + + + Robert Smith + 8 Oak Avenue + Old Town + PA + 95819 + + Hurry, my lawn is going wild! + + + Lawnmower + 1 + 148.95 + Confirm this is electric + + + Baby Monitor + 1 + 39.98 + 1999-05-21 + + + 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 @@ + + + + +Purchase order schema for Example.com. + Copyright 2000 Example.com. All rights reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/schemas/po1_0.xml b/test/schemas/po1_0.xml new file mode 100644 index 0000000..8781bbf --- /dev/null +++ b/test/schemas/po1_0.xml @@ -0,0 +1,34 @@ + + + + Alice Smith + 123 Maple Street + Mill Valley + CA + 90952 + + + Robert Smith + 8 Oak Avenue + Old Town + PA + 95819 + + Hurry, my lawn is going wild! + + + Lawnmower + 1 + 148.95 + Confirm this is electric + + + Baby Monitor + 1 + 39.98 + 1999-05-21 + + + + diff --git a/test/schemas/po1_0.xsd b/test/schemas/po1_0.xsd new file mode 100644 index 0000000..a630561 --- /dev/null +++ b/test/schemas/po1_0.xsd @@ -0,0 +1,64 @@ + + + + +Purchase order schema for Example.com. + Copyright 2000 Example.com. All rights reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/schemas/poschargrp0_0.xml b/test/schemas/poschargrp0_0.xml new file mode 100644 index 0000000..0800b1b --- /dev/null +++ b/test/schemas/poschargrp0_0.xml @@ -0,0 +1,2 @@ + +value \ No newline at end of file diff --git a/test/schemas/poschargrp0_0.xsd b/test/schemas/poschargrp0_0.xsd new file mode 100644 index 0000000..3243a2f --- /dev/null +++ b/test/schemas/poschargrp0_0.xsd @@ -0,0 +1,14 @@ + + + + + + + + + + + diff --git a/test/schemas/regexp-char-ref_0.xml b/test/schemas/regexp-char-ref_0.xml new file mode 100644 index 0000000..f6f463e --- /dev/null +++ b/test/schemas/regexp-char-ref_0.xml @@ -0,0 +1,7 @@ + + + diff --git a/test/schemas/regexp-char-ref_0.xsd b/test/schemas/regexp-char-ref_0.xsd new file mode 100644 index 0000000..2d91c6c --- /dev/null +++ b/test/schemas/regexp-char-ref_0.xsd @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/test/schemas/regexp-char-ref_1.xsd b/test/schemas/regexp-char-ref_1.xsd new file mode 100644 index 0000000..598a4d5 --- /dev/null +++ b/test/schemas/regexp-char-ref_1.xsd @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/test/schemas/restrict-CT-attr-ref_0.xml b/test/schemas/restrict-CT-attr-ref_0.xml new file mode 100644 index 0000000..d021a83 --- /dev/null +++ b/test/schemas/restrict-CT-attr-ref_0.xml @@ -0,0 +1,3 @@ + + \ No newline at end of file diff --git a/test/schemas/restrict-CT-attr-ref_0.xsd b/test/schemas/restrict-CT-attr-ref_0.xsd new file mode 100644 index 0000000..a98b82a --- /dev/null +++ b/test/schemas/restrict-CT-attr-ref_0.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/schemas/restriction-attr1_0.xml b/test/schemas/restriction-attr1_0.xml new file mode 100644 index 0000000..33b8f19 --- /dev/null +++ b/test/schemas/restriction-attr1_0.xml @@ -0,0 +1,3 @@ + + diff --git a/test/schemas/restriction-attr1_0.xsd b/test/schemas/restriction-attr1_0.xsd new file mode 100644 index 0000000..31c288f --- /dev/null +++ b/test/schemas/restriction-attr1_0.xsd @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/schemas/restriction-enum-1_0.xml b/test/schemas/restriction-enum-1_0.xml new file mode 100644 index 0000000..9bdb4a3 --- /dev/null +++ b/test/schemas/restriction-enum-1_0.xml @@ -0,0 +1,7 @@ + + +c diff --git a/test/schemas/restriction-enum-1_1.xsd b/test/schemas/restriction-enum-1_1.xsd new file mode 100644 index 0000000..69e353d --- /dev/null +++ b/test/schemas/restriction-enum-1_1.xsd @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + 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 @@ + + + Bill + Clinton + 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 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/test/schemas/scc-no-xmlns_0.xml b/test/schemas/scc-no-xmlns_0.xml new file mode 100644 index 0000000..b85cdcb --- /dev/null +++ b/test/schemas/scc-no-xmlns_0.xml @@ -0,0 +1,3 @@ + + + diff --git a/test/schemas/scc-no-xmlns_0.xsd b/test/schemas/scc-no-xmlns_0.xsd new file mode 100644 index 0000000..731c81b --- /dev/null +++ b/test/schemas/scc-no-xmlns_0.xsd @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/test/schemas/scc-no-xsi_0.xml b/test/schemas/scc-no-xsi_0.xml new file mode 100644 index 0000000..b85cdcb --- /dev/null +++ b/test/schemas/scc-no-xsi_0.xml @@ -0,0 +1,3 @@ + + + diff --git a/test/schemas/scc-no-xsi_0.xsd b/test/schemas/scc-no-xsi_0.xsd new file mode 100644 index 0000000..388b6a9 --- /dev/null +++ b/test/schemas/scc-no-xsi_0.xsd @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/test/schemas/seq-dubl-elem1_0.xml b/test/schemas/seq-dubl-elem1_0.xml new file mode 100644 index 0000000..a93c8ee --- /dev/null +++ b/test/schemas/seq-dubl-elem1_0.xml @@ -0,0 +1,7 @@ + + + PEhlbGxvIHdvcmxkIT4= + PEhlbGxvIHdvcmxkIT4= + \ No newline at end of file diff --git a/test/schemas/seq-dubl-elem1_0.xsd b/test/schemas/seq-dubl-elem1_0.xsd new file mode 100644 index 0000000..fd05da7 --- /dev/null +++ b/test/schemas/seq-dubl-elem1_0.xsd @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file 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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 @@ + + + + + Testing min and max occurance attributes on sequences + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/schemas/src-attribute1_0.xml b/test/schemas/src-attribute1_0.xml new file mode 100644 index 0000000..760efd9 --- /dev/null +++ b/test/schemas/src-attribute1_0.xml @@ -0,0 +1,2 @@ + + diff --git a/test/schemas/src-attribute1_0.xsd b/test/schemas/src-attribute1_0.xsd new file mode 100644 index 0000000..dba8b48 --- /dev/null +++ b/test/schemas/src-attribute1_0.xsd @@ -0,0 +1,13 @@ + + + + + + + + + + + diff --git a/test/schemas/src-attribute2_0.xml b/test/schemas/src-attribute2_0.xml new file mode 100644 index 0000000..760efd9 --- /dev/null +++ b/test/schemas/src-attribute2_0.xml @@ -0,0 +1,2 @@ + + diff --git a/test/schemas/src-attribute2_0.xsd b/test/schemas/src-attribute2_0.xsd new file mode 100644 index 0000000..d10cc81 --- /dev/null +++ b/test/schemas/src-attribute2_0.xsd @@ -0,0 +1,13 @@ + + + + + + + + + + + diff --git a/test/schemas/src-attribute3-1_0.xml b/test/schemas/src-attribute3-1_0.xml new file mode 100644 index 0000000..760efd9 --- /dev/null +++ b/test/schemas/src-attribute3-1_0.xml @@ -0,0 +1,2 @@ + + diff --git a/test/schemas/src-attribute3-1_0.xsd b/test/schemas/src-attribute3-1_0.xsd new file mode 100644 index 0000000..28e003c --- /dev/null +++ b/test/schemas/src-attribute3-1_0.xsd @@ -0,0 +1,15 @@ + + + + + + + + + + + + + diff --git a/test/schemas/src-attribute3-2-form_0.xml b/test/schemas/src-attribute3-2-form_0.xml new file mode 100644 index 0000000..760efd9 --- /dev/null +++ b/test/schemas/src-attribute3-2-form_0.xml @@ -0,0 +1,2 @@ + + diff --git a/test/schemas/src-attribute3-2-form_0.xsd b/test/schemas/src-attribute3-2-form_0.xsd new file mode 100644 index 0000000..0c7cc23 --- /dev/null +++ b/test/schemas/src-attribute3-2-form_0.xsd @@ -0,0 +1,16 @@ + + + + + + + + + + + + + diff --git a/test/schemas/src-attribute3-2-st_0.xml b/test/schemas/src-attribute3-2-st_0.xml new file mode 100644 index 0000000..760efd9 --- /dev/null +++ b/test/schemas/src-attribute3-2-st_0.xml @@ -0,0 +1,2 @@ + + diff --git a/test/schemas/src-attribute3-2-st_0.xsd b/test/schemas/src-attribute3-2-st_0.xsd new file mode 100644 index 0000000..f256381 --- /dev/null +++ b/test/schemas/src-attribute3-2-st_0.xsd @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + diff --git a/test/schemas/src-attribute3-2-type_0.xml b/test/schemas/src-attribute3-2-type_0.xml new file mode 100644 index 0000000..760efd9 --- /dev/null +++ b/test/schemas/src-attribute3-2-type_0.xml @@ -0,0 +1,2 @@ + + diff --git a/test/schemas/src-attribute3-2-type_0.xsd b/test/schemas/src-attribute3-2-type_0.xsd new file mode 100644 index 0000000..54f1973 --- /dev/null +++ b/test/schemas/src-attribute3-2-type_0.xsd @@ -0,0 +1,16 @@ + + + + + + + + + + + + + diff --git a/test/schemas/src-attribute4_0.xml b/test/schemas/src-attribute4_0.xml new file mode 100644 index 0000000..760efd9 --- /dev/null +++ b/test/schemas/src-attribute4_0.xml @@ -0,0 +1,2 @@ + + diff --git a/test/schemas/src-attribute4_0.xsd b/test/schemas/src-attribute4_0.xsd new file mode 100644 index 0000000..cc9d8ac --- /dev/null +++ b/test/schemas/src-attribute4_0.xsd @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + diff --git a/test/schemas/src-element1_0.xml b/test/schemas/src-element1_0.xml new file mode 100644 index 0000000..760efd9 --- /dev/null +++ b/test/schemas/src-element1_0.xml @@ -0,0 +1,2 @@ + + diff --git a/test/schemas/src-element1_0.xsd b/test/schemas/src-element1_0.xsd new file mode 100644 index 0000000..ffd8d57 --- /dev/null +++ b/test/schemas/src-element1_0.xsd @@ -0,0 +1,9 @@ + + + + + + + diff --git a/test/schemas/src-element2-1_0.xml b/test/schemas/src-element2-1_0.xml new file mode 100644 index 0000000..760efd9 --- /dev/null +++ b/test/schemas/src-element2-1_0.xml @@ -0,0 +1,2 @@ + + diff --git a/test/schemas/src-element2-1_0.xsd b/test/schemas/src-element2-1_0.xsd new file mode 100644 index 0000000..61c2edf --- /dev/null +++ b/test/schemas/src-element2-1_0.xsd @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + diff --git a/test/schemas/src-element2-2_0.xml b/test/schemas/src-element2-2_0.xml new file mode 100644 index 0000000..760efd9 --- /dev/null +++ b/test/schemas/src-element2-2_0.xml @@ -0,0 +1,2 @@ + + diff --git a/test/schemas/src-element2-2_0.xsd b/test/schemas/src-element2-2_0.xsd new file mode 100644 index 0000000..a70740a --- /dev/null +++ b/test/schemas/src-element2-2_0.xsd @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/schemas/src-element3_0.xml b/test/schemas/src-element3_0.xml new file mode 100644 index 0000000..760efd9 --- /dev/null +++ b/test/schemas/src-element3_0.xml @@ -0,0 +1,2 @@ + + diff --git a/test/schemas/src-element3_0.xsd b/test/schemas/src-element3_0.xsd new file mode 100644 index 0000000..28b69d8 --- /dev/null +++ b/test/schemas/src-element3_0.xsd @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/schemas/subst-group-1_0.xsd b/test/schemas/subst-group-1_0.xsd new file mode 100644 index 0000000..af21eeb --- /dev/null +++ b/test/schemas/subst-group-1_0.xsd @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/schemas/subst-group-1_1.xml b/test/schemas/subst-group-1_1.xml new file mode 100644 index 0000000..087fe02 --- /dev/null +++ b/test/schemas/subst-group-1_1.xml @@ -0,0 +1,12 @@ + + + + + Test 1. + + Test 2. + + + diff --git a/test/schemas/union2_1.xml b/test/schemas/union2_1.xml new file mode 100644 index 0000000..e148080 --- /dev/null +++ b/test/schemas/union2_1.xml @@ -0,0 +1,6 @@ + + + 5 + \ No newline at end of file diff --git a/test/schemas/union2_1.xsd b/test/schemas/union2_1.xsd new file mode 100644 index 0000000..6d83726 --- /dev/null +++ b/test/schemas/union2_1.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/schemas/union_0_0.xml b/test/schemas/union_0_0.xml new file mode 100644 index 0000000..1a47763 --- /dev/null +++ b/test/schemas/union_0_0.xml @@ -0,0 +1,8 @@ + + + EMP0090 + EMP0099 + + diff --git a/test/schemas/union_0_0.xsd b/test/schemas/union_0_0.xsd new file mode 100644 index 0000000..23e93d1 --- /dev/null +++ b/test/schemas/union_0_0.xsd @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/schemas/vdv-complexTypes.xsd b/test/schemas/vdv-complexTypes.xsd new file mode 100644 index 0000000..cd40fb8 --- /dev/null +++ b/test/schemas/vdv-complexTypes.xsd @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/schemas/vdv-first0_0.xml b/test/schemas/vdv-first0_0.xml new file mode 100644 index 0000000..a12bcad --- /dev/null +++ b/test/schemas/vdv-first0_0.xml @@ -0,0 +1,33 @@ + + + + + 0836217462 + Being a Dog Is a Full-Time Job + + Charles M Schulz + 1922-11-26 + 2000-02-12 + + + Peppermint Patty + 1966-08-22 + bold, brash and tomboyish + + + Snoopy + 1950-10-04 + extroverted beagle + + + Schroeder + 1951-05-30 + brought classical music to the Peanuts strip + + + Lucy + 1952-03-03 + bossy, crabby and selfish + + + 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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/schemas/vdv-first1_0.xml b/test/schemas/vdv-first1_0.xml new file mode 100644 index 0000000..a12bcad --- /dev/null +++ b/test/schemas/vdv-first1_0.xml @@ -0,0 +1,33 @@ + + + + + 0836217462 + Being a Dog Is a Full-Time Job + + Charles M Schulz + 1922-11-26 + 2000-02-12 + + + Peppermint Patty + 1966-08-22 + bold, brash and tomboyish + + + Snoopy + 1950-10-04 + extroverted beagle + + + Schroeder + 1951-05-30 + brought classical music to the Peanuts strip + + + Lucy + 1952-03-03 + bossy, crabby and selfish + + + 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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/schemas/vdv-first2_0.xml b/test/schemas/vdv-first2_0.xml new file mode 100644 index 0000000..a12bcad --- /dev/null +++ b/test/schemas/vdv-first2_0.xml @@ -0,0 +1,33 @@ + + + + + 0836217462 + Being a Dog Is a Full-Time Job + + Charles M Schulz + 1922-11-26 + 2000-02-12 + + + Peppermint Patty + 1966-08-22 + bold, brash and tomboyish + + + Snoopy + 1950-10-04 + extroverted beagle + + + Schroeder + 1951-05-30 + brought classical music to the Peanuts strip + + + Lucy + 1952-03-03 + bossy, crabby and selfish + + + diff --git a/test/schemas/vdv-first2_0.xsd b/test/schemas/vdv-first2_0.xsd new file mode 100644 index 0000000..c768e97 --- /dev/null +++ b/test/schemas/vdv-first2_0.xsd @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/schemas/vdv-first3_0.xml b/test/schemas/vdv-first3_0.xml new file mode 100644 index 0000000..a12bcad --- /dev/null +++ b/test/schemas/vdv-first3_0.xml @@ -0,0 +1,33 @@ + + + + + 0836217462 + Being a Dog Is a Full-Time Job + + Charles M Schulz + 1922-11-26 + 2000-02-12 + + + Peppermint Patty + 1966-08-22 + bold, brash and tomboyish + + + Snoopy + 1950-10-04 + extroverted beagle + + + Schroeder + 1951-05-30 + brought classical music to the Peanuts strip + + + Lucy + 1952-03-03 + bossy, crabby and selfish + + + diff --git a/test/schemas/vdv-first3_0.xsd b/test/schemas/vdv-first3_0.xsd new file mode 100644 index 0000000..18b1459 --- /dev/null +++ b/test/schemas/vdv-first3_0.xsd @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/schemas/vdv-first4_0.xml b/test/schemas/vdv-first4_0.xml new file mode 100644 index 0000000..0b2d7e2 --- /dev/null +++ b/test/schemas/vdv-first4_0.xml @@ -0,0 +1,33 @@ + + + + + 0836217462 + Being a Dog Is a Full-Time Job + + Charles M Schulz + 1922-11-26 + 2000-02-12 + + + Peppermint Patty + 1966-08-22 + bold, brash and tomboyish + + + Snoopy + 1950-10-04 + extroverted beagle + + + Schroeder + 1951-05-30 + brought classical music to the Peanuts strip + + + Lucy + 1952-03-03 + bossy, crabby and selfish + + + diff --git a/test/schemas/vdv-first4_0.xsd b/test/schemas/vdv-first4_0.xsd new file mode 100755 index 0000000..9e8e236 --- /dev/null +++ b/test/schemas/vdv-first4_0.xsd @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/schemas/vdv-first4_1.xml b/test/schemas/vdv-first4_1.xml new file mode 100644 index 0000000..1259ef2 --- /dev/null +++ b/test/schemas/vdv-first4_1.xml @@ -0,0 +1,33 @@ + + + + + 0836217462 + Being a Dog Is a Full-Time Job + + Charles M Schulz + 1922-11-26 + 2000-02-12 + + + Peppermint Patty + 196T6-08-22 + bold, brash and tomboyish + + + Snoopy + 1950-10-04 + extroverted beagle + + + Schroeder + 1951-05-30 + brought classical music to the Peanuts strip + + + Lucy + 1952-03-03 + bossy, crabby and selfish + + + diff --git a/test/schemas/vdv-first4_2.xml b/test/schemas/vdv-first4_2.xml new file mode 100644 index 0000000..c4acce6 --- /dev/null +++ b/test/schemas/vdv-first4_2.xml @@ -0,0 +1,33 @@ + + + + + 0836217462 + Being a Dog Is a Full-Time Job + + Charles M Schulz + 1922-11-26 + 2000-02-12 + + + Peppermint Patty + 1966-08-22 + bold, brash and tomboyish + + + Snoopy + 1950-10-04 + extroverted beagle + + + Schroeder + 2000-01-20Z + brought classical music to the Peanuts strip + + + Lucy + 1952-03-03 + bossy, crabby and selfish + + + diff --git a/test/schemas/vdv-first5_0.xml b/test/schemas/vdv-first5_0.xml new file mode 100644 index 0000000..7d4e662 --- /dev/null +++ b/test/schemas/vdv-first5_0.xml @@ -0,0 +1,33 @@ + + + + + 0836217462 + Being a Dog Is a Full-Time Job + + Charles M Schulz + 1922-11-26 + 2000-02-12 + + + Peppermint Patty + 1966-08-22 + bold, brash and tomboyish + + + Snoopy + 1950-10-04 + extroverted beagle + + + Schroeder + 1951-05-30 + brought classical music to the Peanuts strip + + + Lucy + 1952-03-03 + bossy, crabby and selfish + + + diff --git a/test/schemas/vdv-first5_0.xsd b/test/schemas/vdv-first5_0.xsd new file mode 100644 index 0000000..6d5ffaa --- /dev/null +++ b/test/schemas/vdv-first5_0.xsd @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/schemas/vdv-simpleTypes.xsd b/test/schemas/vdv-simpleTypes.xsd new file mode 100644 index 0000000..79f95fd --- /dev/null +++ b/test/schemas/vdv-simpleTypes.xsd @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/schemas/xml.xsd b/test/schemas/xml.xsd new file mode 100644 index 0000000..e49fff8 --- /dev/null +++ b/test/schemas/xml.xsd @@ -0,0 +1,117 @@ + + + + + + + See http://www.w3.org/XML/1998/namespace.html and + http://www.w3.org/TR/REC-xml for information about this namespace. + + This schema document describes the XML namespace, in a form + suitable for import by other schema documents. + + Note that local names in this namespace are intended to be defined + only by the World Wide Web Consortium or its subgroups. The + following names are currently defined in this namespace and should + not be used with conflicting semantics by any Working Group, + specification, or document instance: + + base (as an attribute name): denotes an attribute whose value + provides a URI to be used as the base for interpreting any + relative URIs in the scope of the element on which it + appears; its value is inherited. This name is reserved + by virtue of its definition in the XML Base specification. + + lang (as an attribute name): denotes an attribute whose value + is a language code for the natural language of the content of + any element; its value is inherited. This name is reserved + by virtue of its definition in the XML specification. + + space (as an attribute name): denotes an attribute whose + value is a keyword indicating what whitespace processing + discipline is intended for the content of the element; its + value is inherited. This name is reserved by virtue of its + definition in the XML specification. + + Father (in any context at all): denotes Jon Bosak, the chair of + the original XML Working Group. This name is reserved by + the following decision of the W3C XML Plenary and + XML Coordination groups: + + In appreciation for his vision, leadership and dedication + the W3C XML Plenary on this 10th day of February, 2000 + reserves for Jon Bosak in perpetuity the XML name + xml:Father + + + + + This schema defines attributes and an attribute group + suitable for use by + schemas wishing to allow xml:base, xml:lang or xml:space attributes + on elements they define. + + To enable this, such a schema must import this schema + for the XML namespace, e.g. as follows: + <schema . . .> + . . . + <import namespace="http://www.w3.org/XML/1998/namespace" + schemaLocation="http://www.w3.org/2001/03/xml.xsd"/> + + Subsequently, qualified reference to any of the attributes + or the group defined below will have the desired effect, e.g. + + <type . . .> + . . . + <attributeGroup ref="xml:specialAttrs"/> + + will define a type which will schema-validate an instance + element with any of those attributes + + + + In keeping with the XML Schema WG's standard versioning + policy, this schema document will persist at + http://www.w3.org/2001/03/xml.xsd. + At the date of issue it can also be found at + http://www.w3.org/2001/xml.xsd. + The schema document at that URI may however change in the future, + in order to remain compatible with the latest version of XML Schema + itself. In other words, if the XML Schema namespace changes, the version + of this document at + http://www.w3.org/2001/xml.xsd will change + accordingly; the version at + http://www.w3.org/2001/03/xml.xsd will not change. + + + + + + In due course, we should install the relevant ISO 2- and 3-letter + codes as the enumerated possible values . . . + + + + + + + + + + + + + + + See http://www.w3.org/TR/xmlbase/ for + information about this attribute. + + + + + + + + + + diff --git a/test/schemas/xsd-list-itemType_0.xml b/test/schemas/xsd-list-itemType_0.xml new file mode 100644 index 0000000..a20e408 --- /dev/null +++ b/test/schemas/xsd-list-itemType_0.xml @@ -0,0 +1,3 @@ + + +tea for two and two for tea diff --git a/test/schemas/xsd-list-itemType_0.xsd b/test/schemas/xsd-list-itemType_0.xsd new file mode 100644 index 0000000..b96dbb4 --- /dev/null +++ b/test/schemas/xsd-list-itemType_0.xsd @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/schemas/xsd-simpleType-varieties_0.xml b/test/schemas/xsd-simpleType-varieties_0.xml new file mode 100644 index 0000000..83a0b2a --- /dev/null +++ b/test/schemas/xsd-simpleType-varieties_0.xml @@ -0,0 +1,8 @@ + + + + fajita + pub pub + + + diff --git a/test/schemas/xsd-simpleType-varieties_0.xsd b/test/schemas/xsd-simpleType-varieties_0.xsd new file mode 100644 index 0000000..8a752e2 --- /dev/null +++ b/test/schemas/xsd-simpleType-varieties_0.xsd @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/schematron/zvon1.sct b/test/schematron/zvon1.sct new file mode 100644 index 0000000..36179dd --- /dev/null +++ b/test/schematron/zvon1.sct @@ -0,0 +1,23 @@ + + + + BBB element is missing. + BBB element is present. + AAA misses attribute name. + AAA contains attribute name. + + + + + BBB element is present. + AAA contains attribute name. + + + + + BBB element is missing. + AAA misses attribute name. + + + + diff --git a/test/schematron/zvon10.sct b/test/schematron/zvon10.sct new file mode 100644 index 0000000..783fac5 --- /dev/null +++ b/test/schematron/zvon10.sct @@ -0,0 +1,15 @@ + + + + BBB element is not present + CCC element is not present + + + + + BBB element is not present + CCC element is not present + There is an extra element + + + diff --git a/test/schematron/zvon10_0.xml b/test/schematron/zvon10_0.xml new file mode 100644 index 0000000..d3ac388 --- /dev/null +++ b/test/schematron/zvon10_0.xml @@ -0,0 +1,3 @@ + + + diff --git a/test/schematron/zvon10_1.xml b/test/schematron/zvon10_1.xml new file mode 100644 index 0000000..ba9bdca --- /dev/null +++ b/test/schematron/zvon10_1.xml @@ -0,0 +1,4 @@ + + + + diff --git a/test/schematron/zvon11.sct b/test/schematron/zvon11.sct new file mode 100644 index 0000000..79b01fd --- /dev/null +++ b/test/schematron/zvon11.sct @@ -0,0 +1,8 @@ + + + + The element must not have an isolated aaa attribute + The element must not have an isolated bbb attribute + + + diff --git a/test/schematron/zvon11_0.xml b/test/schematron/zvon11_0.xml new file mode 100644 index 0000000..f065eed --- /dev/null +++ b/test/schematron/zvon11_0.xml @@ -0,0 +1,3 @@ + + + diff --git a/test/schematron/zvon11_1.xml b/test/schematron/zvon11_1.xml new file mode 100644 index 0000000..c889933 --- /dev/null +++ b/test/schematron/zvon11_1.xml @@ -0,0 +1,3 @@ + + + diff --git a/test/schematron/zvon11_2.xml b/test/schematron/zvon11_2.xml new file mode 100644 index 0000000..26e1221 --- /dev/null +++ b/test/schematron/zvon11_2.xml @@ -0,0 +1,3 @@ + + + diff --git a/test/schematron/zvon11_3.xml b/test/schematron/zvon11_3.xml new file mode 100644 index 0000000..d3ac388 --- /dev/null +++ b/test/schematron/zvon11_3.xml @@ -0,0 +1,3 @@ + + + diff --git a/test/schematron/zvon12.sct b/test/schematron/zvon12.sct new file mode 100644 index 0000000..049b125 --- /dev/null +++ b/test/schematron/zvon12.sct @@ -0,0 +1,8 @@ + + + + There is not enough letters in the abbreviation + There is too much letters in the abbreviation + + + diff --git a/test/schematron/zvon12_0.xml b/test/schematron/zvon12_0.xml new file mode 100644 index 0000000..d5f28d5 --- /dev/null +++ b/test/schematron/zvon12_0.xml @@ -0,0 +1,3 @@ + + + diff --git a/test/schematron/zvon12_1.xml b/test/schematron/zvon12_1.xml new file mode 100644 index 0000000..3507f6b --- /dev/null +++ b/test/schematron/zvon12_1.xml @@ -0,0 +1,3 @@ + + + diff --git a/test/schematron/zvon12_2.xml b/test/schematron/zvon12_2.xml new file mode 100644 index 0000000..e0d81af --- /dev/null +++ b/test/schematron/zvon12_2.xml @@ -0,0 +1,3 @@ + + + diff --git a/test/schematron/zvon13.sct b/test/schematron/zvon13.sct new file mode 100644 index 0000000..cd433e0 --- /dev/null +++ b/test/schematron/zvon13.sct @@ -0,0 +1,7 @@ + + + + The values do not sum to 100%. + + + diff --git a/test/schematron/zvon13_0.xml b/test/schematron/zvon13_0.xml new file mode 100644 index 0000000..52619c3 --- /dev/null +++ b/test/schematron/zvon13_0.xml @@ -0,0 +1,6 @@ + + 20 + 30 + 10 + 50 + diff --git a/test/schematron/zvon13_1.xml b/test/schematron/zvon13_1.xml new file mode 100644 index 0000000..8fb7368 --- /dev/null +++ b/test/schematron/zvon13_1.xml @@ -0,0 +1,5 @@ + + 20 + 10 + 50 + diff --git a/test/schematron/zvon13_2.xml b/test/schematron/zvon13_2.xml new file mode 100644 index 0000000..af4d76a --- /dev/null +++ b/test/schematron/zvon13_2.xml @@ -0,0 +1,5 @@ + + 20 + 30 + 50 + diff --git a/test/schematron/zvon14.sct b/test/schematron/zvon14.sct new file mode 100644 index 0000000..f98b6d8 --- /dev/null +++ b/test/schematron/zvon14.sct @@ -0,0 +1,10 @@ + + + + Element CCC must not be a child of element + + + + + + diff --git a/test/schematron/zvon14_0.xml b/test/schematron/zvon14_0.xml new file mode 100644 index 0000000..b627043 --- /dev/null +++ b/test/schematron/zvon14_0.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/test/schematron/zvon15.sct b/test/schematron/zvon15.sct new file mode 100644 index 0000000..7da5d86 --- /dev/null +++ b/test/schematron/zvon15.sct @@ -0,0 +1,11 @@ + + + + Attribute + is forbidden in element + + + + + + diff --git a/test/schematron/zvon15_0.xml b/test/schematron/zvon15_0.xml new file mode 100644 index 0000000..390aedb --- /dev/null +++ b/test/schematron/zvon15_0.xml @@ -0,0 +1,4 @@ + + + + diff --git a/test/schematron/zvon1_0.xml b/test/schematron/zvon1_0.xml new file mode 100644 index 0000000..d3ac388 --- /dev/null +++ b/test/schematron/zvon1_0.xml @@ -0,0 +1,3 @@ + + + diff --git a/test/schematron/zvon1_1.xml b/test/schematron/zvon1_1.xml new file mode 100644 index 0000000..861c90a --- /dev/null +++ b/test/schematron/zvon1_1.xml @@ -0,0 +1,3 @@ + + + diff --git a/test/schematron/zvon2.sct b/test/schematron/zvon2.sct new file mode 100644 index 0000000..56974a0 --- /dev/null +++ b/test/schematron/zvon2.sct @@ -0,0 +1,9 @@ + + + + Text in element + must not contain character @ + + + + diff --git a/test/schematron/zvon2_0.xml b/test/schematron/zvon2_0.xml new file mode 100644 index 0000000..832c507 --- /dev/null +++ b/test/schematron/zvon2_0.xml @@ -0,0 +1,4 @@ + + bbbb + cccc + diff --git a/test/schematron/zvon2_1.xml b/test/schematron/zvon2_1.xml new file mode 100644 index 0000000..6ade195 --- /dev/null +++ b/test/schematron/zvon2_1.xml @@ -0,0 +1,4 @@ + + bbbb@bbb.com + ccc@ccc.com + diff --git a/test/schematron/zvon2_2.xml b/test/schematron/zvon2_2.xml new file mode 100644 index 0000000..812d44a --- /dev/null +++ b/test/schematron/zvon2_2.xml @@ -0,0 +1,5 @@ + + bbbb + cccc + aaa@aaa.net + diff --git a/test/schematron/zvon3.sct b/test/schematron/zvon3.sct new file mode 100644 index 0000000..f75b67b --- /dev/null +++ b/test/schematron/zvon3.sct @@ -0,0 +1,8 @@ + + + + attribute name is not present + attribute name is present + + + diff --git a/test/schematron/zvon3_0.xml b/test/schematron/zvon3_0.xml new file mode 100644 index 0000000..ec8dc43 --- /dev/null +++ b/test/schematron/zvon3_0.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/schematron/zvon4.sct b/test/schematron/zvon4.sct new file mode 100644 index 0000000..0b8a4e1 --- /dev/null +++ b/test/schematron/zvon4.sct @@ -0,0 +1,10 @@ + + + + Root element is + , not AAA + + Root element is AAA + + + diff --git a/test/schematron/zvon4_0.xml b/test/schematron/zvon4_0.xml new file mode 100644 index 0000000..4ba332e --- /dev/null +++ b/test/schematron/zvon4_0.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/test/schematron/zvon4_1.xml b/test/schematron/zvon4_1.xml new file mode 100644 index 0000000..5becbcf --- /dev/null +++ b/test/schematron/zvon4_1.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/test/schematron/zvon5.sct b/test/schematron/zvon5.sct new file mode 100644 index 0000000..36cb8bb --- /dev/null +++ b/test/schematron/zvon5.sct @@ -0,0 +1,12 @@ + + + + Source contains an empty element CCC + [1]An element CCC does not contain any text + [2]An element CCC does not contain any text + [1]An element CCC does not contain any child element + [2]An element CCC does not contain any child element + + + + diff --git a/test/schematron/zvon5_0.xml b/test/schematron/zvon5_0.xml new file mode 100644 index 0000000..dc7c36b --- /dev/null +++ b/test/schematron/zvon5_0.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/test/schematron/zvon5_1.xml b/test/schematron/zvon5_1.xml new file mode 100644 index 0000000..6915fa6 --- /dev/null +++ b/test/schematron/zvon5_1.xml @@ -0,0 +1,5 @@ + + + I am CCC element + + diff --git a/test/schematron/zvon5_2.xml b/test/schematron/zvon5_2.xml new file mode 100644 index 0000000..2a11400 --- /dev/null +++ b/test/schematron/zvon5_2.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/test/schematron/zvon6.sct b/test/schematron/zvon6.sct new file mode 100644 index 0000000..678ae58 --- /dev/null +++ b/test/schematron/zvon6.sct @@ -0,0 +1,8 @@ + + + + O.K. + The AAA value is not permitted. + + + diff --git a/test/schematron/zvon6_0.xml b/test/schematron/zvon6_0.xml new file mode 100644 index 0000000..a3efb70 --- /dev/null +++ b/test/schematron/zvon6_0.xml @@ -0,0 +1,3 @@ + +aaa + diff --git a/test/schematron/zvon6_1.xml b/test/schematron/zvon6_1.xml new file mode 100644 index 0000000..7d7daf8 --- /dev/null +++ b/test/schematron/zvon6_1.xml @@ -0,0 +1,3 @@ + + bbb + diff --git a/test/schematron/zvon6_2.xml b/test/schematron/zvon6_2.xml new file mode 100644 index 0000000..555f24d --- /dev/null +++ b/test/schematron/zvon6_2.xml @@ -0,0 +1,3 @@ + + ccc + diff --git a/test/schematron/zvon7.sct b/test/schematron/zvon7.sct new file mode 100644 index 0000000..a22a89e --- /dev/null +++ b/test/schematron/zvon7.sct @@ -0,0 +1,9 @@ + + + + O.K. + The AAA value is not an integer. + + + + diff --git a/test/schematron/zvon7_0.xml b/test/schematron/zvon7_0.xml new file mode 100644 index 0000000..a3efb70 --- /dev/null +++ b/test/schematron/zvon7_0.xml @@ -0,0 +1,3 @@ + +aaa + diff --git a/test/schematron/zvon7_1.xml b/test/schematron/zvon7_1.xml new file mode 100644 index 0000000..8da0ae5 --- /dev/null +++ b/test/schematron/zvon7_1.xml @@ -0,0 +1,3 @@ + + 12.234 + diff --git a/test/schematron/zvon7_2.xml b/test/schematron/zvon7_2.xml new file mode 100644 index 0000000..e27cfe7 --- /dev/null +++ b/test/schematron/zvon7_2.xml @@ -0,0 +1,3 @@ + +45 + diff --git a/test/schematron/zvon7_3.xml b/test/schematron/zvon7_3.xml new file mode 100644 index 0000000..c17295a --- /dev/null +++ b/test/schematron/zvon7_3.xml @@ -0,0 +1,3 @@ + +0 + diff --git a/test/schematron/zvon7_4.xml b/test/schematron/zvon7_4.xml new file mode 100644 index 0000000..4f34fbe --- /dev/null +++ b/test/schematron/zvon7_4.xml @@ -0,0 +1,3 @@ + +-45 + diff --git a/test/schematron/zvon8.sct b/test/schematron/zvon8.sct new file mode 100644 index 0000000..5641ecd --- /dev/null +++ b/test/schematron/zvon8.sct @@ -0,0 +1,10 @@ + + + + O.K. + Some AAA are missing + Some BBB are missing + + + + diff --git a/test/schematron/zvon8_0.xml b/test/schematron/zvon8_0.xml new file mode 100644 index 0000000..b6739bb --- /dev/null +++ b/test/schematron/zvon8_0.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/schematron/zvon8_1.xml b/test/schematron/zvon8_1.xml new file mode 100644 index 0000000..196dbe2 --- /dev/null +++ b/test/schematron/zvon8_1.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/test/schematron/zvon8_2.xml b/test/schematron/zvon8_2.xml new file mode 100644 index 0000000..f85de82 --- /dev/null +++ b/test/schematron/zvon8_2.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/test/schematron/zvon9.sct b/test/schematron/zvon9.sct new file mode 100644 index 0000000..6f67877 --- /dev/null +++ b/test/schematron/zvon9.sct @@ -0,0 +1,9 @@ + + + + Attribute id is missing + Attribute id is used in wrong context + + + + diff --git a/test/schematron/zvon9_0.xml b/test/schematron/zvon9_0.xml new file mode 100644 index 0000000..d871519 --- /dev/null +++ b/test/schematron/zvon9_0.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/test/schematron/zvon9_1.xml b/test/schematron/zvon9_1.xml new file mode 100644 index 0000000..5c1c1bf --- /dev/null +++ b/test/schematron/zvon9_1.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/test/schematron/zvon9_2.xml b/test/schematron/zvon9_2.xml new file mode 100644 index 0000000..7e09fab --- /dev/null +++ b/test/schematron/zvon9_2.xml @@ -0,0 +1,7 @@ + + + + + + + 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 @@ + + + + + + + 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 @@ + + + + + + + diff --git a/test/scripts/set1.script b/test/scripts/set1.script new file mode 100644 index 0000000..e9a3e69 --- /dev/null +++ b/test/scripts/set1.script @@ -0,0 +1,2 @@ +set +save - diff --git a/test/scripts/set1.xml b/test/scripts/set1.xml new file mode 100644 index 0000000..dcd0694 --- /dev/null +++ b/test/scripts/set1.xml @@ -0,0 +1 @@ +foo diff --git a/test/scripts/set3.script b/test/scripts/set3.script new file mode 100644 index 0000000..e99745a --- /dev/null +++ b/test/scripts/set3.script @@ -0,0 +1,5 @@ +cd * +xpath //*[namespace-uri()="bar"] +set +xpath //*[namespace-uri()="bar"] +save - diff --git a/test/scripts/set3.xml b/test/scripts/set3.xml new file mode 100644 index 0000000..211b4e5 --- /dev/null +++ b/test/scripts/set3.xml @@ -0,0 +1 @@ +foo diff --git a/test/scripts/set4.script b/test/scripts/set4.script new file mode 100644 index 0000000..39d64cb --- /dev/null +++ b/test/scripts/set4.script @@ -0,0 +1,4 @@ +cd a/b +set +xpath //*[namespace-uri()="foo"] +save - diff --git a/test/scripts/set4.xml b/test/scripts/set4.xml new file mode 100644 index 0000000..1ba4401 --- /dev/null +++ b/test/scripts/set4.xml @@ -0,0 +1 @@ + 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 @@ + + + + Slashdot:News for Nerds. Stuff that Matters. + http://slashdot.org/ + News for Nerds. Stuff that Matters + + + + Slashdot + http://slashdot.org/images/slashdotlg.gif + http://slashdot.org + + + + 100 Mbit/s on Fibre to the home + http://slashdot.org/articles/99/06/06/1440211.shtml + + + + Gimp 1.2 Preview + http://slashdot.org/articles/99/06/06/1438246.shtml + + + + Sony's AIBO robot Sold Out + http://slashdot.org/articles/99/06/06/1432256.shtml + + + + Ask Slashdot: Another Word for "Hacker"? + http://slashdot.org/askslashdot/99/06/05/1815225.shtml + + + + Corel Linux FAQ + http://slashdot.org/articles/99/06/05/1842218.shtml + + + + Upside downsides MP3.COM. + http://slashdot.org/articles/99/06/05/1558210.shtml + + + + 2 Terabits of Bandwidth + http://slashdot.org/articles/99/06/05/1554258.shtml + + + + Suppression of cold fusion research? + http://slashdot.org/articles/99/06/04/2313200.shtml + + + + California Gov. Halts Wage Info Sale + http://slashdot.org/articles/99/06/04/235256.shtml + + + + Red Hat Announces IPO + http://slashdot.org/articles/99/06/04/0849207.shtml + + \ 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 @@ + + + 100 Mbit/s on Fibre to the home + http://slashdot.org/articles/99/06/06/1440211.shtml + + CmdrTaco + wouldn't-it-be-nice + internet + 20 +
    articles
    + topicinternet.jpg +
    + + Gimp 1.2 Preview + http://slashdot.org/articles/99/06/06/1438246.shtml + + CmdrTaco + stuff-to-read + gimp + 12 +
    articles
    + topicgimp.gif +
    + + Sony's AIBO robot Sold Out + http://slashdot.org/articles/99/06/06/1432256.shtml + + CmdrTaco + stuff-to-see + tech + 10 +
    articles
    + topictech2.jpg +
    + + Ask Slashdot: Another Word for "Hacker"? + http://slashdot.org/askslashdot/99/06/05/1815225.shtml + + Cliff + hacker-vs-cracker + news + 385 +
    askslashdot
    + topicnews.gif +
    + + Corel Linux FAQ + http://slashdot.org/articles/99/06/05/1842218.shtml + + CmdrTaco + stuff-to-read + corel + 164 +
    articles
    + topiccorel.gif +
    + + Upside downsides MP3.COM. + http://slashdot.org/articles/99/06/05/1558210.shtml + + CmdrTaco + stuff-to-think-about + music + 48 +
    articles
    + topicmusic.gif +
    + + 2 Terabits of Bandwidth + http://slashdot.org/articles/99/06/05/1554258.shtml + + CmdrTaco + faster-porn + internet + 66 +
    articles
    + topicinternet.jpg +
    + + Suppression of cold fusion research? + http://slashdot.org/articles/99/06/04/2313200.shtml + + Hemos + possibly-probably + science + 217 +
    articles
    + topicscience.gif +
    + + California Gov. Halts Wage Info Sale + http://slashdot.org/articles/99/06/04/235256.shtml + + Hemos + woo-hoo! + usa + 16 +
    articles
    + topicus.gif +
    + + Red Hat Announces IPO + http://slashdot.org/articles/99/06/04/0849207.shtml + + Justin + details-sketchy + redhat + 155 +
    articles
    + topicredhat.gif +
    +
    diff --git a/test/slashdot16.xml b/test/slashdot16.xml new file mode 100644 index 0000000..f6a7f2a Binary files /dev/null and b/test/slashdot16.xml 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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/svg2 b/test/svg2 new file mode 100644 index 0000000..aa1adac --- /dev/null +++ b/test/svg2 @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + Java Font definition:Dialog 0 + + + Java Font definition:Helvetica 0 + + + + this is text + + + + Java Font definition:Dialog 0 + + + Java Font definition:Helvetica 700 + + + + sadfsadfsad + + + + + + + + + + + Java Font definition:Dialog 700 + + + Java Font definition:Dialog 700 + + + diff --git a/test/svg3 b/test/svg3 new file mode 100644 index 0000000..9b0de5a --- /dev/null +++ b/test/svg3 @@ -0,0 +1,722 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 @@ + + + + + + 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 @@ + 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 @@ + +%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 @@ + + + Let's use predefined entites & < > + Let's use a DTD defined entity &bent; + + + 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 @@ + +%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 @@ + + + Let's use predefined entites & < > + + Let's use a DTD defined entity &bent; + + 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 @@ + + + + + + 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 @@ + + 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 @@ + +%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 @@ + + + Let's use a DTD defined entity &bent; + Let's use predefined entites & < > + + + 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 @@ + +%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 @@ + + + Let's use a DTD defined entity &bent; + + Let's use predefined entites & < > + + 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 @@ + + + + + + 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 @@ + 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 @@ + +%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 @@ + + + + Let's use predefined entites & < > + Let's use a DTD defined entity &bent; + + 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 @@ + +%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 @@ + + + + Let's use a DTD defined entity &bent; + Let's use predefined entites & < > + + 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 @@ + + + + + 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 @@ + + + + + + + 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 @@ + + 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 @@ + +my 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 @@ + +content diff --git a/test/utf16bebom.xml b/test/utf16bebom.xml new file mode 100644 index 0000000..8c402e0 Binary files /dev/null and b/test/utf16bebom.xml differ diff --git a/test/utf16bom.xml b/test/utf16bom.xml new file mode 100644 index 0000000..1916dc1 Binary files /dev/null and b/test/utf16bom.xml differ diff --git a/test/utf16lebom.xml b/test/utf16lebom.xml new file mode 100644 index 0000000..933640c Binary files /dev/null and b/test/utf16lebom.xml 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 @@ + 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 @@ + + + + + b text + + diff --git a/test/valid/694228.xml b/test/valid/694228.xml new file mode 100644 index 0000000..057c926 --- /dev/null +++ b/test/valid/694228.xml @@ -0,0 +1,5 @@ + + + + &entity; + diff --git a/test/valid/737840.xml b/test/valid/737840.xml new file mode 100644 index 0000000..2d27b73 --- /dev/null +++ b/test/valid/737840.xml @@ -0,0 +1,10 @@ + + + + +]> + + + ⌖ + 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 @@ + + + + + + + + + + + + + + + + +"> + +'"> + + + + + + + + + +amp, +lt, +gt, +apos, +quot"> + + + + + +]> + + + + + +
    +Extensible Markup Language (XML) 1.0 + +REC-xml-&iso6.doc.date; +W3C Recommendation +&draft.day;&draft.month;&draft.year; + + + +http://www.w3.org/TR/1998/REC-xml-&iso6.doc.date; + +http://www.w3.org/TR/1998/REC-xml-&iso6.doc.date;.xml + +http://www.w3.org/TR/1998/REC-xml-&iso6.doc.date;.html + +http://www.w3.org/TR/1998/REC-xml-&iso6.doc.date;.pdf + +http://www.w3.org/TR/1998/REC-xml-&iso6.doc.date;.ps + + + +http://www.w3.org/TR/REC-xml + + + +http://www.w3.org/TR/PR-xml-971208 + + + +Tim Bray +Textuality and Netscape +tbray@textuality.com +Jean Paoli +Microsoft +jeanpa@microsoft.com +C. M. Sperberg-McQueen +University of Illinois at Chicago +cmsmcq@uic.edu + + +

    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.

    +
    + +

    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.

    +

    +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 http://www.w3.org/XML. A list of +current W3C Recommendations and other technical documents can be found +at http://www.w3.org/TR. +

    +

    This specification uses the term URI, which is defined by , a work in progress expected to update and . +

    +

    The list of known errors in this specification is +available at +http://www.w3.org/XML/xml-19980210-errata.

    +

    Please report errors in this document to +xml-editor@w3.org. +

    +
    + + + +

    Chicago, Vancouver, Mountain View, et al.: +World-Wide Web Consortium, XML Working Group, 1996, 1997.

    +
    + +

    Created in electronic form.

    +
    + +English +Extended Backus-Naur Form (formal grammar) + + + +1997-12-03 : CMSMcQ : yet further changes +1997-12-02 : TB : further changes (see TB to XML WG, +2 December 1997) +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 < in attriubte values +uppercase hex characters, +namechar list, + +1997-12-01 : JB : add some column-width parameters +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!). + +1997-10-08 : TB : Removed %-constructs again, new rules +for PE appearance. +1997-10-01 : TB : Case-sensitive markup; cleaned up +element-type defs, lotsa little edits for style +1997-09-25 : TB : Change to elm's new DTD, with +substantial detail cleanup as a side-effect +1997-07-24 : CMSMcQ : correct error (lost *) in definition +of ignoreSectContents (thanks to Makoto Murata) +Allow all empty elements to have end-tags, consistent with +SGML TC (as per JJC). +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. + +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. +1997-06-29 : TB : various edits +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 (?). + +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. +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. +1997-04-01 : CMSMcQ : corrections from JJC, EM, HT, and self +1997-03-31 : Tim Bray : many changes +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. +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 only 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.) +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'. +1997-03-21 : TB : massive changes on plane flight from Chicago +to Vancouver +1997-03-21 : CMSMcQ : correct as many reported errors as possible. + +1997-03-20 : CMSMcQ : correct typos listed in CMSMcQ hand copy of spec. +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 &nbsp; +and define nbsp as &#160;, and refill a lot of paragraphs for +legibility. +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. + +1996-11-11 : CMSMcQ : revise for style. +Add new rhs to entity declaration, for parameter entities. +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. +1996-10-31 : TB : Add Entity Handling section +1996-10-30 : TB : Clean up term & termdef. Slip in +ERB decision re EMPTY. +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. +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 only 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. +1996-10-16 : TB : track down & excise all DSD references; +introduce some EBNF for entity declarations. +1996-10-?? : TB : consistency check, fix up scraps so +they all parse, get formatter working, correct a few productions. +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. +1996-10-10 : TB : eliminate name recognizers (and more?) +1996-10-09 : CMSMcQ : revise for style, consistency through 2.3 +(Characters) +1996-10-09 : CMSMcQ : re-unite everything for convenience, +at least temporarily, and revise quickly +1996-10-08 : TB : first major homogenization pass +1996-10-08 : TB : turn "current" attribute on div type into +CDATA +1996-10-02 : TB : remould into skeleton + entities +1996-09-30 : CMSMcQ : add a few more sections prior to exchange + with Tim. +1996-09-20 : CMSMcQ : finish transcribing notes. +1996-09-19 : CMSMcQ : begin transcribing notes for draft. +1996-09-13 : CMSMcQ : made outline from notes of 09-06, +do some housekeeping + + +
    + + +Introduction +

    Extensible Markup Language, abbreviated XML, describes a class of +data objects called XML documents 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 . +By construction, XML documents +are conforming SGML documents. +

    +

    XML documents are made up of storage units called entities, which contain either parsed +or unparsed data. +Parsed data is made up of characters, +some +of which form character data, +and some of which form markup. +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.

    +

    A software module +called an XML processor is used to read XML documents +and provide access to their content and structure. It is assumed that an XML processor is +doing its work on behalf of another module, called the +application. 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.

    + + +Origin and Goals +

    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. +

    +

    The design goals for XML are: +

    XML shall be straightforwardly usable over the +Internet.

    +

    XML shall support a wide variety of applications.

    +

    XML shall be compatible with SGML.

    +

    It shall be easy to write programs which process XML +documents.

    +

    The number of optional features in XML is to be kept to the +absolute minimum, ideally zero.

    +

    XML documents should be human-legible and reasonably +clear.

    +

    The XML design should be prepared quickly.

    +

    The design of XML shall be formal and concise.

    +

    XML documents shall be easy to create.

    +

    Terseness in XML markup is of minimal importance.

    +

    +

    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.

    +

    This version of the XML specification + +&doc.distribution;.

    + +
    + + + + + +Terminology + +

    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: + + + +

    Conforming documents and XML +processors are permitted to but need not behave as +described.

    + + + +

    Conforming documents and XML processors +are required to behave as described; otherwise they are in 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.

    +
    + + +

    An error +which a conforming XML processor +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). +

    +
    + + +

    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.

    +
    + + +

    A rule which applies to all +valid XML documents. +Violations of validity constraints are errors; they must, at user option, +be reported by +validating XML processors.

    +
    + + +

    A rule which applies to all well-formed XML documents. +Violations of well-formedness constraints are +fatal errors.

    +
    + + + +

    (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 +. + +

    +
    + + +

    A feature of +XML included solely to ensure that XML remains compatible with SGML. +

    +
    + + +

    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;.

    +
    + +

    +
    + + +
    + + + +Documents + +

    +A data object is an +XML document if it is +well-formed, as +defined in this specification. +A well-formed XML document may in addition be +valid if it meets certain further +constraints.

    + +

    Each XML document has both a logical and a physical structure. +Physically, the document is composed of units called entities. An entity may refer to other entities to cause their +inclusion in the document. A document begins in a "root" or document entity. +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 . +

    + + +Well-Formed XML Documents + +

    +A textual object is +a well-formed XML document if: + +

    Taken as a whole, it +matches the production labeled document.

    +

    It +meets all the well-formedness constraints given in this specification.

    +
    +

    Each of the parsed entities +which is referenced directly or indirectly within the document is +well-formed.

    +

    +

    + +Document +document +prolog +element +Misc* + +

    +

    Matching the document production +implies that: + +

    It contains one or more +elements.

    + + +

    There is exactly +one element, called the root, or document element, no +part of which appears in the content of any other element. +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. +

    + +

    +

    As a consequence +of this, +for each non-root element +C in the document, there is one other element P +in the document such that +C is in the content of P, but is not in +the content of any other element that is in the content of +P. +P is referred to as the +parent of C, and C as a +child of P.

    + + +Characters + +

    A parsed entity contains +text, a sequence of +characters, +which may represent markup or character data. +A character +is an atomic unit of text as specified by +ISO/IEC 10646 . +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 , is discouraged. + + +Character Range + +Char +#x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] +| [#x10000-#x10FFFF] +any Unicode character, excluding the +surrogate blocks, FFFE, and FFFF. + + +

    + +

    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 . +

    + +
    + + +Common Syntactic Constructs + +

    This section defines some symbols used widely in the grammar.

    +

    S (white space) consists of one or more space (#x20) +characters, carriage returns, line feeds, or tabs. + + +White Space + +S +(#x20 | #x9 | #xD | #xA)+ + + +

    +

    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 .

    +

    A Name 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. +Names beginning with the string "xml", or any string +which would match (('X'|'x') ('M'|'m') ('L'|'l')), are +reserved for standardization in this or future versions of this +specification. +

    + +

    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.

    +
    +

    An +Nmtoken (name token) is any mixture of +name characters. + +Names and Tokens +NameChar +Letter +| Digit +| '.' | '-' | '_' | ':' +| CombiningChar +| Extender + +Name +(Letter | '_' | ':') +(NameChar)* +Names +Name +(S Name)* +Nmtoken +(NameChar)+ +Nmtokens +Nmtoken (S Nmtoken)* + +

    +

    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 +(EntityValue), +the values of attributes (AttValue), +and external identifiers +(SystemLiteral). +Note that a SystemLiteral +can be parsed without scanning for markup. + +Literals +EntityValue +'"' +([^%&"] +| PEReference +| Reference)* +'"' + +|  +"'" +([^%&'] +| PEReference +| Reference)* +"'" + +AttValue +'"' +([^<&"] +| Reference)* +'"' + +|  +"'" +([^<&'] +| Reference)* +"'" + +SystemLiteral +('"' [^"]* '"') | ("'" [^']* "'") + + +PubidLiteral +'"' PubidChar* +'"' +| "'" (PubidChar - "'")* "'" + +PubidChar +#x20 | #xD | #xA +| [a-zA-Z0-9] +| [-'()+,./:=?;!*#@$_%] + + +

    + +
    + + +Character Data and Markup + +

    Text consists of intermingled +character +data and markup. +Markup takes the form of +start-tags, +end-tags, +empty-element tags, +entity references, +character references, +comments, +CDATA section delimiters, +document type declarations, and +processing instructions. + +

    +

    All text that is not markup +constitutes the character data of +the document.

    +

    The ampersand character (&) and the left angle bracket (<) +may appear in their literal form only when used as markup +delimiters, or within a comment, a +processing instruction, +or a CDATA section. + +They are also legal within the literal entity +value of an internal entity declaration; see +. + +If they are needed elsewhere, +they must be escaped +using either numeric character references +or the strings +"&amp;" and "&lt;" respectively. +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. +

    +

    +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, "]]>".

    +

    +To allow attribute values to contain both single and double quotes, the +apostrophe or single-quote character (') may be represented as +"&apos;", and the double-quote character (") as +"&quot;". + +Character Data + +CharData +[^<&]* - ([^<&]* ']]>' [^<&]*) + + +

    +
    + + +Comments + +

    Comments may +appear anywhere in a document outside other +markup; in addition, +they may appear within the document type declaration +at places allowed by the grammar. +They are not part of the document's character +data; an XML +processor may, but need not, make it possible for an application to +retrieve the text of comments. +For compatibility, the string +"--" (double-hyphen) must not occur within +comments. + +Comments +Comment +'<!--' +((Char - '-') +| ('-' (Char - '-')))* +'-->' + + +

    +

    An example of a comment: +<!&como; declarations for <head> & <body> &comc;> +

    +
    + + +Processing Instructions + +

    Processing +instructions (PIs) allow documents to contain instructions +for applications. + + +Processing Instructions +PI +'<?' PITarget +(S +(Char* - +(Char* &pic; Char*)))? +&pic; +PITarget +Name - +(('X' | 'x') ('M' | 'm') ('L' | 'l')) + + +PIs are not part of the document's character +data, but must be passed through to the application. The +PI begins with a target (PITarget) used +to identify the application to which the instruction is directed. +The target names "XML", "xml", and so on are +reserved for standardization in this or future versions of this +specification. +The +XML Notation mechanism +may be used for +formal declaration of PI targets. +

    +
    + + +CDATA Sections + +

    CDATA sections +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 "<![CDATA[" and end with the string +"]]>": + +CDATA Sections +CDSect +CDStart +CData +CDEnd +CDStart +'<![CDATA[' + +CData +(Char* - +(Char* ']]>' Char*)) + + +CDEnd +']]>' + + + +Within a CDATA section, only the CDEnd 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 +"&lt;" and "&amp;". CDATA sections +cannot nest. +

    + +

    An example of a CDATA section, in which "<greeting>" and +"</greeting>" +are recognized as character data, not +markup: +<![CDATA[<greeting>Hello, world!</greeting>]]> +

    +
    + + +Prolog and Document Type Declaration + +

    XML documents +may, and should, +begin with an XML declaration which specifies +the version of +XML being used. +For example, the following is a complete XML document, well-formed but not +valid: + +Hello, world! +]]> +and so is this: +Hello, world! +]]> +

    + +

    The version number "1.0" should be used to indicate +conformance to this version of this specification; it is an error +for a document to use the value "1.0" +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 "1.0", 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. +

    +

    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 document type declaration, to define +constraints on the logical structure and to support the use of +predefined storage units. + +An XML document is +valid if it has an associated document type +declaration and if the document +complies with the constraints expressed in it.

    +

    The document type declaration must appear before +the first element in the document. + +Prolog + +prolog +XMLDecl? +Misc* +(doctypedecl +Misc*)? +XMLDecl +&xmlpio; +VersionInfo +EncodingDecl? +SDDecl? +S? +&pic; + +VersionInfo +S 'version' Eq +(' VersionNum ' +| " VersionNum ") + +Eq +S? '=' S? + +VersionNum +([a-zA-Z0-9_.:] | '-')+ + +Misc +Comment | PI | +S + +

    + +

    The XML +document type declaration +contains or points to +markup declarations +that provide a grammar for a +class of documents. +This grammar is known as a document type definition, +or DTD. +The document type declaration can point to an external subset (a +special kind of +external entity) 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. +

    +

    +A markup declaration is +an element type declaration, +an attribute-list declaration, +an entity declaration, or +a notation declaration. + +These declarations may be contained in whole or in part +within parameter entities, +as described in the well-formedness and validity constraints below. +For fuller information, see +.

    + +Document Type Definition + +doctypedecl +'<!DOCTYPE' S +Name (S +ExternalID)? +S? ('[' +(markupdecl +| PEReference +| S)* +']' +S?)? '>' + + +markupdecl +elementdecl +| AttlistDecl +| EntityDecl +| NotationDecl +| PI +| Comment + + + + + + + + +

    The markup declarations may be made up in whole or in part of +the replacement text of +parameter entities. +The productions later in this specification for +individual nonterminals (elementdecl, +AttlistDecl, and so on) describe +the declarations after all the parameter entities have been +included.

    + + +Root Element Type +

    +The Name in the document type declaration must +match the element type of the root element. +

    +
    + + +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.

    +
    + +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.) +

    +
    +

    +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 +markupdecl, interspersed with white space +or parameter-entity references. +However, portions of the contents +of the +external subset or of external parameter entities may conditionally be ignored +by using +the conditional section +construct; this is not allowed in the internal subset. + + +External Subset + +extSubset +TextDecl? +extSubsetDecl +extSubsetDecl +( +markupdecl +| conditionalSect +| PEReference +| S +)* + + +

    +

    The external subset and external parameter entities also differ +from the internal subset in that in them, +parameter-entity references +are permitted within markup declarations, +not only between markup declarations.

    +

    An example of an XML document with a document type declaration: + + +Hello, world! +]]> +The system identifier +"hello.dtd" gives the URI of a DTD for the document.

    +

    The declarations can also be given locally, as in this +example: + + +]> +Hello, world! +]]> +If both the external and internal subsets are used, the +internal subset is considered to occur before the external subset. + +This has the effect that entity and attribute-list declarations in the +internal subset take precedence over those in the external subset. +

    +
    + + +Standalone Document Declaration +

    Markup declarations can affect the content of the document, +as passed from an XML processor +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 document entity. + +Standalone Document Declaration + +SDDecl + +S +'standalone' Eq +(("'" ('yes' | 'no') "'") | ('"' ('yes' | 'no') '"')) + + + +

    +

    +In a standalone document declaration, the value "yes" indicates +that there +are no markup declarations external to the document +entity (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 "no" indicates that there are or may be such +external markup declarations. +Note that the standalone document declaration only +denotes the presence of external declarations; the presence, in a +document, of +references to external entities, when those entities are +internally declared, +does not change its standalone status.

    +

    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 "no" is assumed.

    +

    Any XML document for which standalone="no" holds can +be converted algorithmically to a standalone document, +which may be desirable for some network delivery applications.

    + +Standalone Document Declaration +

    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 &magicents;), +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. +

    +
    + +
    +

    An example XML declaration with a standalone document declaration:<?xml version="&XML.version;" standalone='yes'?>

    +
    + +White Space Handling + +

    In editing XML documents, it is often convenient to use "white space" +(spaces, tabs, and blank lines, denoted by the nonterminal +S 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.

    +

    An XML processor +must always pass all characters in a document that are not +markup through to the application. A +validating XML processor must also inform the application +which of these characters constitute white space appearing +in element content. +

    +

    A special attribute +named xml:space 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 +declared if it is used. +When declared, it must be given as an +enumerated type whose only +possible values are "default" and "preserve". +For example:]]>

    +

    The value "default" signals that applications' +default white-space processing modes are acceptable for this element; the +value "preserve" 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 xml:space attribute. +

    +

    The root element 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. +

    + +
    + +End-of-Line Handling +

    XML parsed entities 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).

    +

    To simplify the tasks of applications, +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.) +

    +
    + +Language Identification +

    In document processing, it is often useful to +identify the natural or formal language +in which the content is +written. +A special attribute named +xml:lang 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 +declared if it is used. +The values of the attribute are language identifiers as defined +by , "Tags for the Identification of Languages": + +Language Identification +LanguageID +Langcode +('-' Subcode)* +Langcode +ISO639Code | +IanaCode | +UserCode + +ISO639Code +([a-z] | [A-Z]) ([a-z] | [A-Z]) +IanaCode +('i' | 'I') '-' ([a-z] | [A-Z])+ +UserCode +('x' | 'X') '-' ([a-z] | [A-Z])+ +Subcode +([a-z] | [A-Z])+ + +The Langcode may be any of the following: + +

    a two-letter language code as defined by +, "Codes +for the representation of names of languages"

    +

    a language identifier registered with the Internet +Assigned Numbers Authority ; these begin with the +prefix "i-" (or "I-")

    +

    a language identifier assigned by the user, or agreed on +between parties in private use; these must begin with the +prefix "x-" or "X-" in order to ensure that they do not conflict +with names later standardized or registered with IANA

    +

    +

    There may be any number of Subcode segments; if +the first +subcode segment exists and the Subcode consists of two +letters, then it must be a country code from +, "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 Langcode begins with the prefix +"x-" or +"X-".

    +

    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.

    +

    For example: +The quick brown fox jumps over the lazy dog.

    +

    What colour is it?

    +

    What color is it?

    + + Habe nun, ach! Philosophie, + Juristerei, und Medizin + und leider auch Theologie + durchaus studiert mit heißem Bemüh'n. + ]]>

    + +

    The intent declared with xml:lang is considered to apply to +all attributes and content of the element where it is specified, +unless overridden with an instance of xml:lang +on another element within that content.

    + +

    A simple declaration for xml:lang might take +the form +xml:lang NMTOKEN #IMPLIED +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: + + + ]]> +

    + +
    +
    + + + +Logical Structures + +

    Each XML document contains one or more +elements, the boundaries of which are +either delimited by start-tags +and end-tags, or, for empty elements, by an empty-element tag. Each element has a type, +identified by name, sometimes called its "generic +identifier" (GI), and may have a set of +attribute specifications. Each attribute specification +has a name and a value. +

    +Element +element +EmptyElemTag +| STag content +ETag + + + + +

    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 (('X'|'x')('M'|'m')('L'|'l')) +are reserved for standardization in this or future versions of this +specification. +

    + +Element Type Match +

    +The Name in an element's end-tag must match +the element type in +the start-tag. +

    +
    + +Element Valid +

    An element is +valid if +there is a declaration matching +elementdecl where the +Name matches the element type, and +one of the following holds:

    + +

    The declaration matches EMPTY and the element has no +content.

    +

    The declaration matches children and +the sequence of +child elements +belongs to the language generated by the regular expression in +the content model, with optional white space (characters +matching the nonterminal S) between each pair +of child elements.

    +

    The declaration matches Mixed and +the content consists of character +data and child elements +whose types match names in the content model.

    +

    The declaration matches ANY, and the types +of any child elements have +been declared.

    +
    +
    + + +Start-Tags, End-Tags, and Empty-Element Tags + +

    The beginning of every +non-empty XML element is marked by a start-tag. + +Start-tag + +STag +'<' Name +(S Attribute)* +S? '>' + + +Attribute +Name Eq +AttValue + + + + + +The Name in +the start- and end-tags gives the +element's type. + +The Name-AttValue pairs are +referred to as +the attribute specifications of the element, +with the +Name in each pair +referred to as the attribute name and +the content of the +AttValue (the text between the +' or " delimiters) +as the attribute value. +

    + +Unique Att Spec +

    +No attribute name may appear more than once in the same start-tag +or empty-element tag. +

    +
    + +Attribute Value Type +

    +The attribute must have been declared; the value must be of the type +declared for it. +(For attribute types, see .) +

    +
    + +No External Entity References +

    +Attribute values cannot contain direct or indirect entity references +to external entities. +

    +
    + +No < in Attribute Values +

    The replacement text of any entity +referred to directly or indirectly in an attribute +value (other than "&lt;") must not contain +a <. +

    +

    An example of a start-tag: +<termdef id="dt-dog" term="dog">

    +

    The end of every element +that begins with a start-tag must +be marked by an end-tag +containing a name that echoes the element's type as given in the +start-tag: + +End-tag + +ETag +'</' Name +S? '>' + + +

    +

    An example of an end-tag:</termdef>

    +

    The +text between the start-tag and +end-tag is called the element's +content: + +Content of Elements + +content +(element | CharData +| Reference | CDSect +| PI | Comment)* + + + +

    +

    If an element is empty, +it must be represented either by a start-tag immediately followed +by an end-tag or by an empty-element tag. +An +empty-element tag takes a special form: + +Tags for Empty Elements + +EmptyElemTag +'<' Name (S +Attribute)* S? +'/>' + + + + +

    +

    Empty-element tags may be used for any element which has no +content, whether or not it is declared using the keyword +EMPTY. +For interoperability, the empty-element +tag must be used, and can only be used, for elements which are +declared EMPTY.

    +

    Examples of empty elements: +<IMG align="left" + src="http://www.w3.org/Icons/WWW/w3c_home" /> +<br></br> +<br/>

    +
    + + +Element Type Declarations + +

    The element structure of an +XML document may, for +validation purposes, +be constrained +using element type and attribute-list declarations. +An element type declaration constrains the element's +content. +

    + +

    Element type declarations often constrain which element types can +appear as children 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.

    +

    An element +type declaration takes the form: + +Element Type Declaration + +elementdecl +'<!ELEMENT' S +Name +S +contentspec +S? '>' + +contentspec +'EMPTY' +| 'ANY' +| Mixed +| children + + + + +where the Name gives the element type +being declared. +

    + + +Unique Element Type Declaration +

    +No element type may be declared more than once. +

    +
    + +

    Examples of element type declarations: +<!ELEMENT br EMPTY> +<!ELEMENT p (#PCDATA|emph)* > +<!ELEMENT %name.para; %content.para; > +<!ELEMENT container ANY>

    + + +Element Content + +

    An element type has +element content when elements of that +type must contain only child +elements (no character data), optionally separated by +white space (characters matching the nonterminal +S). + +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 (cps), which consist of names, +choice lists of content particles, or +sequence lists of content particles: + +Element-content Models + +children +(choice +| seq) +('?' | '*' | '+')? +cp +(Name +| choice +| seq) +('?' | '*' | '+')? +choice +'(' S? cp +( S? '|' S? cp )* +S? ')' + +seq +'(' S? cp +( S? ',' S? cp )* +S? ')' + + + + +where each Name is the type of an element which may +appear as a child. +Any content +particle in a choice list may appear in the element content at the location where +the choice list appears in the grammar; +content particles occurring in a sequence list must each +appear in the element content 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 (+), zero or more (*), or zero or +one times (?). +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.

    +

    +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. For compatibility, 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 . + + +

    + +Proper Group/PE Nesting +

    Parameter-entity +replacement text must be properly nested +with parenthetized 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 ,). +

    +
    +

    Examples of element-content models: +<!ELEMENT spec (front, body, back?)> +<!ELEMENT div1 (head, (p | list | note)*, div2*)> +<!ELEMENT dictionary-body (%div.mix; | %dict.mix;)*>

    +
    + + +Mixed Content + +

    An element +type has +mixed content when elements of that type may contain +character data, optionally interspersed with +child elements. +In this case, the types of the child elements +may be constrained, but not their order or their number of occurrences: + +Mixed-content Declaration + +Mixed +'(' S? +'#PCDATA' +(S? +'|' +S? +Name)* +S? +')*' +| '(' S? '#PCDATA' S? ')' + + + + + + +where the Names give the types of elements +that may appear as children. +

    + +No Duplicate Types +

    The same name must not appear more than once in a single mixed-content +declaration. +

    +

    Examples of mixed content declarations: +<!ELEMENT p (#PCDATA|a|ul|b|i|em)*> +<!ELEMENT p (#PCDATA | %font; | %phrase; | %special; | %form;)* > +<!ELEMENT b (#PCDATA)>

    +
    +
    + + +Attribute-List Declarations + +

    Attributes are used to associate +name-value pairs with elements. +Attribute specifications may appear only within start-tags +and empty-element tags; +thus, the productions used to +recognize them appear in . +Attribute-list +declarations may be used: + +

    To define the set of attributes pertaining to a given +element type.

    +

    To establish type constraints for these +attributes.

    +

    To provide default values +for attributes.

    + +

    +

    +Attribute-list declarations specify the name, data type, and default +value (if any) of each attribute associated with a given element type: + +Attribute-list Declaration +AttlistDecl +'<!ATTLIST' S +Name +AttDef* +S? '>' + +AttDef +S Name +S AttType +S DefaultDecl + + +The Name in the +AttlistDecl 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 Name in the +AttDef rule is +the name of the attribute.

    +

    +When more than one AttlistDecl 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. +For interoperability, 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. +

    + + +Attribute Types + +

    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: + +Attribute Types + +AttType +StringType +| TokenizedType +| EnumeratedType + + +StringType +'CDATA' + +TokenizedType +'ID' + + + +| 'IDREF' + +| 'IDREFS' + +| 'ENTITY' + +| 'ENTITIES' + +| 'NMTOKEN' + +| 'NMTOKENS' + + + +

    + +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. +

    +
    + +One ID per Element Type +

    No element type may have more than one ID attribute specified.

    +
    + +ID Attribute Default +

    An ID attribute must have a declared default of #IMPLIED or +#REQUIRED.

    +
    + +IDREF +

    +Values of type IDREF must match +the Name production, and +values of type IDREFS must match +Names; +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. +

    +
    + +Entity Name +

    +Values of type ENTITY +must match the Name production, +values of type ENTITIES must match +Names; +each Name must +match the +name of an unparsed entity declared in the +DTD. +

    +
    + +Name Token +

    +Values of type NMTOKEN must match the +Nmtoken production; +values of type NMTOKENS must +match Nmtokens. +

    +
    + +

    Enumerated attributes can take one +of a list of values provided in the declaration. There are two +kinds of enumerated types: + +Enumerated Attribute Types +EnumeratedType +NotationType +| Enumeration + +NotationType +'NOTATION' +S +'(' +S? +Name +(S? '|' S? +Name)* +S? ')' + + +Enumeration +'(' S? +Nmtoken +(S? '|' +S? +Nmtoken)* +S? +')' + + +A NOTATION attribute identifies a +notation, declared in the +DTD with associated system and/or public identifiers, to +be used in interpreting the element to which the attribute +is attached. +

    + + +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. +

    +
    + +Enumeration +

    +Values of this type +must match one of the Nmtoken tokens in the +declaration. +

    +
    +

    For interoperability, the same +Nmtoken should not occur more than once in the +enumerated attribute types of a single element type. +

    +
    + + +Attribute Defaults + +

    An attribute declaration 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. + +Attribute Defaults + +DefaultDecl +'#REQUIRED' +| '#IMPLIED' +| (('#FIXED' S)? AttValue) + + + + + + + + +

    +

    In an attribute declaration, #REQUIRED means that the +attribute must always be provided, #IMPLIED that no default +value is provided. + +If the +declaration +is neither #REQUIRED nor #IMPLIED, then the +AttValue value contains the declared +default value; the #FIXED 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.

    + +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. +

    + +Attribute Default Legal +

    +The declared +default value must meet the lexical constraints of the declared attribute type. +

    +
    + +Fixed Attribute Default +

    If an attribute has a default value declared with the +#FIXED keyword, instances of that attribute must +match the default value. +

    + +

    Examples of attribute-list declarations: +<!ATTLIST termdef + id ID #REQUIRED + name CDATA #IMPLIED> +<!ATTLIST list + type (bullets|ordered|glossary) "ordered"> +<!ATTLIST form + method CDATA #FIXED "POST">

    +
    + +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. +

    +
    +
    + +Conditional Sections +

    +Conditional sections are portions of the +document type declaration external subset +which are +included in, or excluded from, the logical structure of the DTD based on +the keyword which governs them. + +Conditional Section + +conditionalSect +includeSect +| ignoreSect + + +includeSect +'<![' S? 'INCLUDE' S? '[' + +extSubsetDecl +']]>' + + +ignoreSect +'<![' S? 'IGNORE' S? '[' +ignoreSectContents* +']]>' + + +ignoreSectContents +Ignore +('<![' ignoreSectContents ']]>' +Ignore)* +Ignore +Char* - +(Char* ('<![' | ']]>') +Char*) + + + + +

    +

    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. +

    +

    If the keyword of the +conditional section is INCLUDE, then the contents of the conditional +section are part of the DTD. +If the keyword of the conditional +section is IGNORE, 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 INCLUDE occurs within a larger conditional +section with a keyword of IGNORE, both the outer and the +inner conditional sections are ignored.

    +

    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.

    +

    An example: +<!ENTITY % draft 'INCLUDE' > +<!ENTITY % final 'IGNORE' > + +<![%draft;[ +<!ELEMENT book (comments*, title, body, supplements?)> +]]> +<![%final;[ +<!ELEMENT book (title, body, supplements?)> +]]> + +

    +
    + + + + +
    + + + +Physical Structures + +

    An XML document may consist +of one or many storage units. These are called +entities; they all have content and are all +(except for the document entity, see below, and +the external DTD subset) +identified by name. + +Each XML document has one entity +called the document entity, which serves +as the starting point for the XML +processor and may contain the whole document.

    +

    Entities may be either parsed or unparsed. +A parsed entity's +contents are referred to as its +replacement text; +this text is considered an +integral part of the document.

    + +

    An +unparsed entity +is a resource whose contents may or may not be +text, and if text, may not be XML. +Each unparsed entity +has an associated notation, 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. +

    +

    +Parsed entities are invoked by name using entity references; +unparsed entities by name, given in the value of ENTITY +or ENTITIES +attributes.

    +

    General entities +are entities for use within the document content. +In this specification, general entities are sometimes referred +to with the unqualified term entity when this leads +to no ambiguity. +Parameter entities +are parsed entities for use within the DTD. +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. +

    + + +Character and Entity References +

    +A character reference refers to a specific character in the +ISO/IEC 10646 character set, for example one not directly accessible from +available input devices. + +Character Reference +CharRef +'&#' [0-9]+ ';' +| '&hcro;' [0-9a-fA-F]+ ';' + + + + +Legal Character +

    Characters referred to using character references must +match the production for +Char.

    + +If the character reference begins with "&#x", the digits and +letters up to the terminating ; provide a hexadecimal +representation of the character's code point in ISO/IEC 10646. +If it begins just with "&#", the digits up to the terminating +; provide a decimal representation of the character's +code point. + +

    +

    An entity +reference refers to the content of a named entity. +References to +parsed general entities +use ampersand (&) and semicolon (;) as +delimiters. + +Parameter-entity references use percent-sign (%) and +semicolon +(;) as delimiters. +

    + +Entity Reference +Reference +EntityRef +| CharRef +EntityRef +'&' Name ';' + + + + + +PEReference +'%' Name ';' + + + + + + + +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: &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.

    +

    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'.

    +
    + +Entity Declared +

    In a document with an external subset or external parameter +entities with "standalone='no'", +the Name given in the entity reference must match that in an +entity declaration. +For interoperability, valid documents should declare the entities +&magicents;, in the form +specified in . +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.

    +
    + + +Parsed Entity +

    +An entity reference must not contain the name of an unparsed entity. Unparsed entities may be referred +to only in attribute values declared to +be of type ENTITY or ENTITIES. +

    +
    + +No Recursion +

    +A parsed entity must not contain a recursive reference to itself, +either directly or indirectly. +

    +
    + +In DTD +

    +Parameter-entity references may only appear in the +DTD. +

    +
    +

    Examples of character and entity references: +Type <key>less-than</key> (&hcro;3C;) to save options. +This document was prepared on &docdate; and +is classified &security-level;.

    +

    Example of a parameter-entity reference: + + + +%ISOLat2;]]>

    +
    + + +Entity Declarations + +

    +Entities are declared thus: + +Entity Declaration + +EntityDecl +GEDecl | PEDecl + + +GEDecl +'<!ENTITY' S Name +S EntityDef +S? '>' + +PEDecl +'<!ENTITY' S '%' S +Name S +PEDef S? '>' + + +EntityDef +EntityValue +| (ExternalID +NDataDecl?) + + + +PEDef +EntityValue +| ExternalID + + +The Name identifies the entity in an +entity reference or, in the case of an +unparsed entity, in the value of an ENTITY or ENTITIES +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. +

    + + +Internal Entities + +

    If +the entity definition is an +EntityValue, +the defined entity is called an internal entity. +There is no separate physical +storage object, and the content of the entity is given in the +declaration. +Note that some processing of entity and character references in the +literal entity value may be required to +produce the correct replacement +text: see . +

    +

    An internal entity is a parsed +entity.

    +

    Example of an internal entity declaration: +<!ENTITY Pub-Status "This is a pre-release of the + specification.">

    +
    + + +External Entities + +

    If the entity is not +internal, it is an external +entity, declared as follows: + +External Entity Declaration + +ExternalID +'SYSTEM' S +SystemLiteral +| 'PUBLIC' S +PubidLiteral +S +SystemLiteral + + +NDataDecl +S 'NDATA' S +Name + + +If the NDataDecl is present, this is a +general unparsed +entity; otherwise it is a parsed entity.

    + +Notation Declared +

    +The Name must match the declared name of a +notation. +

    +
    +

    The +SystemLiteral +is called the entity's system identifier. It is a URI, +which may be used to retrieve the entity. +Note that the hash mark (#) 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 +document entity, to the entity +containing the external DTD subset, +or to some other external parameter entity. +

    +

    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).

    +

    +In addition to a system identifier, an external identifier may +include a public identifier. +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.

    +

    Examples of external entity declarations: +<!ENTITY open-hatch + SYSTEM "http://www.textuality.com/boilerplate/OpenHatch.xml"> +<!ENTITY open-hatch + PUBLIC "-//Textuality//TEXT Standard open-hatch boilerplate//EN" + "http://www.textuality.com/boilerplate/OpenHatch.xml"> +<!ENTITY hatch-pic + SYSTEM "../grafix/OpenHatch.gif" + NDATA gif >

    +
    + +
    + + +Parsed Entities + +The Text Declaration +

    External parsed entities may each begin with a text +declaration. + +Text Declaration + +TextDecl +&xmlpio; +VersionInfo? +EncodingDecl +S? &pic; + + + +

    +

    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.

    +
    + +Well-Formed Parsed Entities +

    The document entity is well-formed if it matches the production labeled +document. +An external general +parsed entity is well-formed if it matches the production labeled +extParsedEnt. +An external parameter +entity is well-formed if it matches the production labeled +extPE. + +Well-Formed External Parsed Entity +extParsedEnt +TextDecl? +content + +extPE +TextDecl? +extSubsetDecl + + +An internal general parsed entity is well-formed if its replacement text +matches the production labeled +content. +All internal parameter entities are well-formed by definition. +

    +

    A consequence of well-formedness in entities is that the logical +and physical structures in an XML document are properly nested; no +start-tag, +end-tag, +empty-element tag, +element, +comment, +processing instruction, +character +reference, or +entity reference +can begin in one entity and end in another.

    +
    + +Character Encoding in Entities + +

    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. + +

    +

    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.

    +

    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 text +declaration containing an encoding declaration: + +Encoding Declaration +EncodingDecl +S +'encoding' Eq +('"' EncName '"' | +"'" EncName "'" ) + + +EncName +[A-Za-z] ([A-Za-z0-9._] | '-')* +Encoding name contains only Latin characters + + +In the document entity, the encoding +declaration is part of the XML declaration. +The EncName is the name of the encoding used. +

    + +

    In an encoding declaration, the values +"UTF-8", +"UTF-16", +"ISO-10646-UCS-2", and +"ISO-10646-UCS-4" should be +used for the various encodings and transformations of Unicode / +ISO/IEC 10646, the values +"ISO-8859-1", +"ISO-8859-2", ... +"ISO-8859-9" should be used for the parts of ISO 8859, and +the values +"ISO-2022-JP", +"Shift_JIS", and +"EUC-JP" +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 charsets) +with the Internet Assigned Numbers +Authority , 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.

    +

    In the absence of information provided by an external +transport protocol (e.g. HTTP or MIME), +it is an error 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.

    + +

    It is a fatal error when an XML processor +encounters an entity with an encoding that it is unable to process.

    +

    Examples of encoding declarations: +<?xml encoding='UTF-8'?> +<?xml encoding='EUC-JP'?>

    +
    +
    + +XML Processor Treatment of Entities and References +

    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 XML processor in +each case. +The labels in the leftmost column describe the recognition context: + + +

    as a reference +anywhere after the start-tag and +before the end-tag of an element; corresponds +to the nonterminal content.

    + + + +

    as a reference within either the value of an attribute in a +start-tag, or a default +value in an attribute declaration; +corresponds to the nonterminal +AttValue.

    + + +

    as a Name, not a reference, appearing either as +the value of an +attribute which has been declared as type ENTITY, or as one of +the space-separated tokens in the value of an attribute which has been +declared as type ENTITIES.

    +
    + +

    as a reference +within a parameter or internal entity's +literal entity value in +the entity's declaration; corresponds to the nonterminal +EntityValue.

    + +

    as a reference within either the internal or external subsets of the +DTD, but outside +of an EntityValue or +AttValue.

    +
    +

    + + +
    Entity TypeCharacter
    ParameterInternal +GeneralExternal Parsed +GeneralUnparsed
    Reference +in ContentNot recognizedIncludedIncluded if validatingForbiddenIncluded
    Reference +in Attribute ValueNot recognizedIncluded in literalForbiddenForbiddenIncluded
    Occurs as +Attribute ValueNot recognizedForbiddenForbiddenNotifyNot recognized
    Reference +in EntityValueIncluded in literalBypassedBypassedForbiddenIncluded
    Reference +in DTDIncluded as PEForbiddenForbiddenForbiddenForbidden